@arolariu/components 1.0.0 → 1.1.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 (218) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/EXAMPLES.md +2510 -0
  3. package/dist/components/ui/alert-dialog.d.ts +4 -16
  4. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  5. package/dist/components/ui/alert-dialog.js +18 -14
  6. package/dist/components/ui/alert-dialog.js.map +1 -1
  7. package/dist/components/ui/avatar.d.ts +3 -12
  8. package/dist/components/ui/avatar.d.ts.map +1 -1
  9. package/dist/components/ui/avatar.js +18 -15
  10. package/dist/components/ui/avatar.js.map +1 -1
  11. package/dist/components/ui/button-group.d.ts +1 -1
  12. package/dist/components/ui/button-group.d.ts.map +1 -1
  13. package/dist/components/ui/calendar.d.ts +1 -4
  14. package/dist/components/ui/calendar.d.ts.map +1 -1
  15. package/dist/components/ui/calendar.js +7 -7
  16. package/dist/components/ui/calendar.js.map +1 -1
  17. package/dist/components/ui/carousel.d.ts.map +1 -1
  18. package/dist/components/ui/carousel.js.map +1 -1
  19. package/dist/components/ui/chart.d.ts.map +1 -1
  20. package/dist/components/ui/chart.js +125 -59
  21. package/dist/components/ui/chart.js.map +1 -1
  22. package/dist/components/ui/checkbox-group.d.ts +2 -6
  23. package/dist/components/ui/checkbox-group.d.ts.map +1 -1
  24. package/dist/components/ui/checkbox-group.js +8 -7
  25. package/dist/components/ui/checkbox-group.js.map +1 -1
  26. package/dist/components/ui/checkbox.d.ts +3 -1
  27. package/dist/components/ui/checkbox.d.ts.map +1 -1
  28. package/dist/components/ui/checkbox.js +4 -1
  29. package/dist/components/ui/checkbox.js.map +1 -1
  30. package/dist/components/ui/collapsible.d.ts.map +1 -1
  31. package/dist/components/ui/collapsible.js.map +1 -1
  32. package/dist/components/ui/combobox.d.ts +335 -0
  33. package/dist/components/ui/combobox.d.ts.map +1 -0
  34. package/dist/components/ui/combobox.js +206 -0
  35. package/dist/components/ui/combobox.js.map +1 -0
  36. package/dist/components/ui/combobox.module.js +23 -0
  37. package/dist/components/ui/combobox.module.js.map +1 -0
  38. package/dist/components/ui/combobox_module.css +142 -0
  39. package/dist/components/ui/combobox_module.css.map +1 -0
  40. package/dist/components/ui/command.d.ts.map +1 -1
  41. package/dist/components/ui/command.js +25 -16
  42. package/dist/components/ui/command.js.map +1 -1
  43. package/dist/components/ui/context-menu.d.ts.map +1 -1
  44. package/dist/components/ui/context-menu.js.map +1 -1
  45. package/dist/components/ui/drawer.d.ts.map +1 -1
  46. package/dist/components/ui/drawer.js.map +1 -1
  47. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  48. package/dist/components/ui/dropdown-menu.js.map +1 -1
  49. package/dist/components/ui/dropdrawer.d.ts +10 -16
  50. package/dist/components/ui/dropdrawer.d.ts.map +1 -1
  51. package/dist/components/ui/dropdrawer.js +28 -20
  52. package/dist/components/ui/dropdrawer.js.map +1 -1
  53. package/dist/components/ui/item.d.ts +1 -1
  54. package/dist/components/ui/item.d.ts.map +1 -1
  55. package/dist/components/ui/menubar.d.ts +11 -13
  56. package/dist/components/ui/menubar.d.ts.map +1 -1
  57. package/dist/components/ui/menubar.js.map +1 -1
  58. package/dist/components/ui/meter.d.ts +8 -24
  59. package/dist/components/ui/meter.d.ts.map +1 -1
  60. package/dist/components/ui/meter.js +23 -19
  61. package/dist/components/ui/meter.js.map +1 -1
  62. package/dist/components/ui/navigation-menu.d.ts +3 -12
  63. package/dist/components/ui/navigation-menu.d.ts.map +1 -1
  64. package/dist/components/ui/navigation-menu.js +14 -11
  65. package/dist/components/ui/navigation-menu.js.map +1 -1
  66. package/dist/components/ui/number-field.d.ts +6 -12
  67. package/dist/components/ui/number-field.d.ts.map +1 -1
  68. package/dist/components/ui/number-field.js.map +1 -1
  69. package/dist/components/ui/progress.d.ts +1 -4
  70. package/dist/components/ui/progress.d.ts.map +1 -1
  71. package/dist/components/ui/progress.js +10 -9
  72. package/dist/components/ui/progress.js.map +1 -1
  73. package/dist/components/ui/radio-group.d.ts +2 -4
  74. package/dist/components/ui/radio-group.d.ts.map +1 -1
  75. package/dist/components/ui/radio-group.js.map +1 -1
  76. package/dist/components/ui/resizable.d.ts +3 -3
  77. package/dist/components/ui/resizable.d.ts.map +1 -1
  78. package/dist/components/ui/resizable.js.map +1 -1
  79. package/dist/components/ui/scratcher.d.ts +1 -1
  80. package/dist/components/ui/scratcher.d.ts.map +1 -1
  81. package/dist/components/ui/scratcher.js +5 -4
  82. package/dist/components/ui/scratcher.js.map +1 -1
  83. package/dist/components/ui/scroll-area.d.ts +2 -4
  84. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  85. package/dist/components/ui/scroll-area.js.map +1 -1
  86. package/dist/components/ui/separator.d.ts +1 -4
  87. package/dist/components/ui/separator.d.ts.map +1 -1
  88. package/dist/components/ui/separator.js +9 -8
  89. package/dist/components/ui/separator.js.map +1 -1
  90. package/dist/components/ui/sheet.d.ts.map +1 -1
  91. package/dist/components/ui/sheet.js.map +1 -1
  92. package/dist/components/ui/sidebar.d.ts +1 -1
  93. package/dist/components/ui/sidebar.d.ts.map +1 -1
  94. package/dist/components/ui/sidebar.js.map +1 -1
  95. package/dist/components/ui/sonner.d.ts +5 -4
  96. package/dist/components/ui/sonner.d.ts.map +1 -1
  97. package/dist/components/ui/sonner.js +7 -6
  98. package/dist/components/ui/sonner.js.map +1 -1
  99. package/dist/components/ui/toggle-group.d.ts +2 -8
  100. package/dist/components/ui/toggle-group.d.ts.map +1 -1
  101. package/dist/components/ui/toggle-group.js +12 -10
  102. package/dist/components/ui/toggle-group.js.map +1 -1
  103. package/dist/components/ui/toolbar.d.ts +10 -30
  104. package/dist/components/ui/toolbar.d.ts.map +1 -1
  105. package/dist/components/ui/toolbar.js +28 -23
  106. package/dist/components/ui/toolbar.js.map +1 -1
  107. package/dist/hooks/useClipboard.d.ts +77 -0
  108. package/dist/hooks/useClipboard.d.ts.map +1 -0
  109. package/dist/hooks/useClipboard.js +42 -0
  110. package/dist/hooks/useClipboard.js.map +1 -0
  111. package/dist/hooks/useControllableState.d.ts +54 -0
  112. package/dist/hooks/useControllableState.d.ts.map +1 -0
  113. package/dist/hooks/useControllableState.js +29 -0
  114. package/dist/hooks/useControllableState.js.map +1 -0
  115. package/dist/hooks/useDebounce.d.ts +33 -0
  116. package/dist/hooks/useDebounce.d.ts.map +1 -0
  117. package/dist/hooks/useDebounce.js +20 -0
  118. package/dist/hooks/useDebounce.js.map +1 -0
  119. package/dist/hooks/useEventCallback.d.ts +34 -0
  120. package/dist/hooks/useEventCallback.d.ts.map +1 -0
  121. package/dist/hooks/useEventCallback.js +12 -0
  122. package/dist/hooks/useEventCallback.js.map +1 -0
  123. package/dist/hooks/useId.d.ts +30 -0
  124. package/dist/hooks/useId.d.ts.map +1 -0
  125. package/dist/hooks/useId.js +9 -0
  126. package/dist/hooks/useId.js.map +1 -0
  127. package/dist/hooks/useIntersectionObserver.d.ts +51 -0
  128. package/dist/hooks/useIntersectionObserver.d.ts.map +1 -0
  129. package/dist/hooks/useIntersectionObserver.js +25 -0
  130. package/dist/hooks/useIntersectionObserver.js.map +1 -0
  131. package/dist/hooks/useInterval.d.ts +55 -0
  132. package/dist/hooks/useInterval.d.ts.map +1 -0
  133. package/dist/hooks/useInterval.js +24 -0
  134. package/dist/hooks/useInterval.js.map +1 -0
  135. package/dist/hooks/useLocalStorage.d.ts +43 -0
  136. package/dist/hooks/useLocalStorage.d.ts.map +1 -0
  137. package/dist/hooks/useLocalStorage.js +53 -0
  138. package/dist/hooks/useLocalStorage.js.map +1 -0
  139. package/dist/hooks/useMergedRefs.d.ts +27 -0
  140. package/dist/hooks/useMergedRefs.d.ts.map +1 -0
  141. package/dist/hooks/useMergedRefs.js +11 -0
  142. package/dist/hooks/useMergedRefs.js.map +1 -0
  143. package/dist/hooks/useOnClickOutside.d.ts +32 -0
  144. package/dist/hooks/useOnClickOutside.d.ts.map +1 -0
  145. package/dist/hooks/useOnClickOutside.js +23 -0
  146. package/dist/hooks/useOnClickOutside.js.map +1 -0
  147. package/dist/hooks/usePrevious.d.ts +33 -0
  148. package/dist/hooks/usePrevious.d.ts.map +1 -0
  149. package/dist/hooks/usePrevious.js +14 -0
  150. package/dist/hooks/usePrevious.js.map +1 -0
  151. package/dist/hooks/useThrottle.d.ts +37 -0
  152. package/dist/hooks/useThrottle.d.ts.map +1 -0
  153. package/dist/hooks/useThrottle.js +34 -0
  154. package/dist/hooks/useThrottle.js.map +1 -0
  155. package/dist/hooks/useTimeout.d.ts +28 -0
  156. package/dist/hooks/useTimeout.d.ts.map +1 -0
  157. package/dist/hooks/useTimeout.js +24 -0
  158. package/dist/hooks/useTimeout.js.map +1 -0
  159. package/dist/index.d.ts +14 -0
  160. package/dist/index.d.ts.map +1 -1
  161. package/dist/index.js +14 -0
  162. package/dist/lib/utilities.d.ts +2 -3
  163. package/dist/lib/utilities.d.ts.map +1 -1
  164. package/dist/lib/utilities.js.map +1 -1
  165. package/dist/motion/tokens.js +5 -5
  166. package/dist/motion/tokens.js.map +1 -1
  167. package/dist/rslib-runtime.js +39 -0
  168. package/dist/rslib-runtime.js.map +1 -0
  169. package/package.json +82 -3
  170. package/src/components/ui/alert-dialog.tsx +15 -8
  171. package/src/components/ui/avatar.tsx +9 -6
  172. package/src/components/ui/calendar.tsx +7 -13
  173. package/src/components/ui/carousel.tsx +2 -0
  174. package/src/components/ui/chart.tsx +63 -60
  175. package/src/components/ui/checkbox-group.tsx +4 -5
  176. package/src/components/ui/checkbox.tsx +10 -2
  177. package/src/components/ui/collapsible.tsx +1 -0
  178. package/src/components/ui/combobox.module.css +158 -0
  179. package/src/components/ui/combobox.tsx +569 -0
  180. package/src/components/ui/command.tsx +31 -15
  181. package/src/components/ui/context-menu.tsx +3 -0
  182. package/src/components/ui/drawer.tsx +2 -0
  183. package/src/components/ui/dropdown-menu.tsx +3 -0
  184. package/src/components/ui/dropdrawer.tsx +80 -62
  185. package/src/components/ui/menubar.tsx +9 -10
  186. package/src/components/ui/meter.tsx +16 -17
  187. package/src/components/ui/navigation-menu.tsx +41 -33
  188. package/src/components/ui/number-field.tsx +6 -13
  189. package/src/components/ui/progress.tsx +3 -2
  190. package/src/components/ui/radio-group.tsx +2 -5
  191. package/src/components/ui/resizable.tsx +2 -2
  192. package/src/components/ui/scratcher.tsx +6 -10
  193. package/src/components/ui/scroll-area.tsx +2 -5
  194. package/src/components/ui/separator.tsx +4 -3
  195. package/src/components/ui/sheet.tsx +3 -0
  196. package/src/components/ui/sidebar.tsx +1 -0
  197. package/src/components/ui/sonner.tsx +20 -12
  198. package/src/components/ui/toggle-group.tsx +6 -4
  199. package/src/components/ui/toolbar.tsx +20 -21
  200. package/src/hooks/useClipboard.tsx +137 -0
  201. package/src/hooks/useControllableState.tsx +81 -0
  202. package/src/hooks/useDebounce.tsx +50 -0
  203. package/src/hooks/useEventCallback.tsx +47 -0
  204. package/src/hooks/useId.tsx +36 -0
  205. package/src/hooks/useIntersectionObserver.tsx +81 -0
  206. package/src/hooks/useInterval.tsx +80 -0
  207. package/src/hooks/useLocalStorage.tsx +111 -0
  208. package/src/hooks/useMergedRefs.tsx +48 -0
  209. package/src/hooks/useOnClickOutside.tsx +55 -0
  210. package/src/hooks/usePrevious.tsx +44 -0
  211. package/src/hooks/useThrottle.tsx +78 -0
  212. package/src/hooks/useTimeout.tsx +51 -0
  213. package/src/index.ts +23 -0
  214. package/src/lib/utilities.ts +4 -4
  215. package/src/motion/tokens.ts +4 -4
  216. package/src/stories/DesignPrinciples.mdx +48 -0
  217. package/src/stories/GettingStarted.mdx +92 -0
  218. package/src/stories/Welcome.mdx +44 -0
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/sonner.js","sources":["../../../src/components/ui/sonner.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/**\r\n * @fileoverview Base UI-backed toast provider and imperative toast bridge.\r\n *\r\n * Replaces the previous `sonner` runtime dependency while preserving the existing public exports:\r\n * `Toaster` for container rendering and `toast` for imperative notifications used throughout the\r\n * website and component consumers.\r\n */\r\n\r\nimport {Toast} from \"@base-ui/react/toast\";\r\nimport {AlertCircle, BellRing, CheckCircle2, Info, LoaderCircle, TriangleAlert, X} from \"lucide-react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./sonner.module.css\";\r\n\r\nconst DEFAULT_TOAST_DURATION = 5000;\r\nconst DEFAULT_TOAST_LIMIT = 3;\r\nconst DEFAULT_TOAST_CLOSE_LABEL = \"Close notification\";\r\nconst DEFAULT_VIEWPORT_ARIA_LABEL = \"Notifications\";\r\n\r\ntype ToastPosition = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"top-center\" | \"bottom-center\";\r\ntype ToastVariant = \"default\" | \"success\" | \"error\" | \"info\" | \"warning\" | \"loading\";\r\ntype ToastIdentifier = number | string;\r\ntype ToastRenderable = React.ReactNode | (() => React.ReactNode);\r\ntype ToastPromise<Value> = Promise<Value> | (() => Promise<Value>);\r\ntype ResolvedPromiseState = ToastRenderable | ToastPromiseResolvedOptions | undefined;\r\n\r\ninterface ToastAction {\r\n label: React.ReactNode;\r\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n}\r\n\r\ntype ToastActionRenderable = React.ReactNode | ToastAction;\r\n\r\ninterface ToastOptions {\r\n id?: ToastIdentifier;\r\n description?: ToastRenderable;\r\n duration?: number;\r\n className?: string;\r\n descriptionClassName?: string;\r\n closeButton?: boolean;\r\n closeButtonAriaLabel?: string;\r\n style?: React.CSSProperties;\r\n priority?: \"high\" | \"low\";\r\n action?: ToastActionRenderable;\r\n cancel?: ToastActionRenderable;\r\n onDismiss?: (toast: ToastSnapshot) => void;\r\n onAutoClose?: (toast: ToastSnapshot) => void;\r\n}\r\n\r\ninterface ToastPromiseResolvedOptions extends ToastOptions {\r\n message: ToastRenderable;\r\n}\r\n\r\ntype ToastPromiseState<Value> =\r\n | ToastRenderable\r\n | ToastPromiseResolvedOptions\r\n | ((value: Value) => ToastRenderable | ToastPromiseResolvedOptions | Promise<ToastRenderable | ToastPromiseResolvedOptions>);\r\n\r\ninterface ToastPromiseOptions<Value> extends ToastOptions {\r\n loading?: ToastRenderable | ToastPromiseResolvedOptions;\r\n success?: ToastPromiseState<Value>;\r\n error?: ToastPromiseState<unknown>;\r\n finally?: () => void | Promise<void>;\r\n}\r\n\r\ninterface ToasterProps {\r\n /**\r\n * Screen position used for the toast viewport.\r\n * @default \"bottom-right\"\r\n */\r\n position?: ToastPosition;\r\n /**\r\n * Default auto-dismiss duration, in milliseconds, for each toast.\r\n * @default 5000\r\n */\r\n duration?: number;\r\n /**\r\n * Maximum number of simultaneously visible toasts.\r\n * @default 3\r\n */\r\n visibleToasts?: number;\r\n /**\r\n * Whether to render a close button for each toast by default.\r\n * @default true\r\n */\r\n closeButton?: boolean;\r\n /**\r\n * Accessible label announced for the toast viewport container.\r\n * @default \"Notifications\"\r\n */\r\n containerAriaLabel?: string;\r\n /**\r\n * Additional CSS classes merged with the toast viewport.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Inline styles applied to the toast viewport.\r\n * @default undefined\r\n */\r\n style?: React.CSSProperties;\r\n /**\r\n * Default options merged into each toast created while this toaster is mounted.\r\n * @default undefined\r\n */\r\n toastOptions?: ToastOptions;\r\n}\r\n\r\ninterface ToastSnapshot {\r\n id: string;\r\n variant: ToastVariant;\r\n title?: React.ReactNode;\r\n description?: React.ReactNode;\r\n}\r\n\r\ninterface ToastMetadata {\r\n variant: ToastVariant;\r\n className?: string;\r\n descriptionClassName?: string;\r\n closeButton: boolean;\r\n closeButtonAriaLabel: string;\r\n style?: React.CSSProperties;\r\n action?: ToastActionRenderable;\r\n cancel?: ToastActionRenderable;\r\n customContent?: React.ReactNode;\r\n}\r\n\r\ninterface ToastUpdateOptions extends ToastOptions {\r\n message?: ToastRenderable;\r\n variant?: ToastVariant;\r\n}\r\n\r\ninterface ToasterRegistration {\r\n closeButton: boolean;\r\n toastOptions: ToastOptions;\r\n}\r\n\r\ninterface ToastRecord {\r\n metadata: ToastMetadata;\r\n options: ToastOptions;\r\n snapshot: ToastSnapshot;\r\n}\r\n\r\ninterface ToastApi {\r\n (message: ToastRenderable, options?: ToastOptions): string;\r\n success: (message: ToastRenderable, options?: ToastOptions) => string;\r\n error: (message: ToastRenderable, options?: ToastOptions) => string;\r\n info: (message: ToastRenderable, options?: ToastOptions) => string;\r\n warning: (message: ToastRenderable, options?: ToastOptions) => string;\r\n loading: (message: ToastRenderable, options?: ToastOptions) => string;\r\n message: (message: ToastRenderable, options?: ToastOptions) => string;\r\n update: (toastId: ToastIdentifier, options: ToastUpdateOptions) => string;\r\n dismiss: (toastId?: ToastIdentifier) => string | undefined;\r\n promise: <Value>(promise: ToastPromise<Value>, options?: ToastPromiseOptions<Value>) => Promise<Value>;\r\n custom: (renderer: (toastId: string) => React.ReactElement, options?: ToastOptions) => string;\r\n getToasts: () => ReadonlyArray<ToastSnapshot>;\r\n getHistory: () => ReadonlyArray<ToastSnapshot>;\r\n}\r\n\r\nconst positionStyles: Record<ToastPosition, string> = {\r\n \"bottom-center\": styles.viewportBottomCenter,\r\n \"bottom-left\": styles.viewportBottomLeft,\r\n \"bottom-right\": styles.viewportBottomRight,\r\n \"top-center\": styles.viewportTopCenter,\r\n \"top-left\": styles.viewportTopLeft,\r\n \"top-right\": styles.viewportTopRight,\r\n};\r\n\r\nconst variantStyles: Record<ToastVariant, string> = {\r\n default: styles.default,\r\n error: styles.error,\r\n info: styles.info,\r\n loading: styles.loading,\r\n success: styles.success,\r\n warning: styles.warning,\r\n};\r\n\r\nconst toastManager = Toast.createToastManager<ToastMetadata>();\r\ntype ToastAddOptions = Parameters<typeof toastManager.add>[0];\r\ntype ToastUpdatePayload = Parameters<typeof toastManager.update>[1];\r\nconst toastHistory: ToastSnapshot[] = [];\r\nconst activeToasts = new Map<string, ToastSnapshot>();\r\nconst toastRecords = new Map<string, ToastRecord>();\r\nconst toasterRegistrations = new Map<string, ToasterRegistration>();\r\n\r\nlet toastSequence = 0;\r\n\r\nfunction createToastIdentifier(identifier?: ToastIdentifier): string {\r\n if (identifier !== undefined) {\r\n return String(identifier);\r\n }\r\n\r\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\r\n return globalThis.crypto.randomUUID();\r\n }\r\n\r\n toastSequence += 1;\r\n return `toast-${String(toastSequence)}`;\r\n}\r\n\r\nfunction isRenderableFactory(value: ToastRenderable | undefined): value is () => React.ReactNode {\r\n return typeof value === \"function\";\r\n}\r\n\r\n// eslint-disable-next-line sonarjs/function-return-type -- React renderables intentionally normalize to one public node type.\r\nfunction resolveRenderable(value?: ToastRenderable): React.ReactNode | undefined {\r\n const resolvedValue = isRenderableFactory(value) ? value() : value;\r\n return resolvedValue;\r\n}\r\n\r\nfunction getSnapshot(id: string, variant: ToastVariant, title?: React.ReactNode, description?: React.ReactNode): ToastSnapshot {\r\n return {\r\n description,\r\n id,\r\n title,\r\n variant,\r\n };\r\n}\r\n\r\nfunction registerToast(snapshot: ToastSnapshot): void {\r\n activeToasts.set(snapshot.id, snapshot);\r\n toastHistory.push(snapshot);\r\n}\r\n\r\nfunction registerToastRecord(record: ToastRecord): void {\r\n toastRecords.set(record.snapshot.id, record);\r\n registerToast(record.snapshot);\r\n}\r\n\r\nfunction replaceToastHistorySnapshot(snapshot: ToastSnapshot): void {\r\n for (let index = toastHistory.length - 1; index >= 0; index -= 1) {\r\n if (toastHistory[index]?.id === snapshot.id) {\r\n toastHistory[index] = snapshot;\r\n return;\r\n }\r\n }\r\n\r\n toastHistory.push(snapshot);\r\n}\r\n\r\nfunction replaceToastRecord(record: ToastRecord): void {\r\n toastRecords.set(record.snapshot.id, record);\r\n activeToasts.set(record.snapshot.id, record.snapshot);\r\n replaceToastHistorySnapshot(record.snapshot);\r\n}\r\n\r\nfunction unregisterToast(toastId?: string): void {\r\n if (!toastId) {\r\n activeToasts.clear();\r\n toastRecords.clear();\r\n return;\r\n }\r\n\r\n activeToasts.delete(toastId);\r\n toastRecords.delete(toastId);\r\n}\r\n\r\nfunction getActiveToasterRegistration(): ToasterRegistration {\r\n const registrations = [...toasterRegistrations.values()];\r\n return registrations.at(-1) ?? {closeButton: true, toastOptions: {}};\r\n}\r\n\r\nfunction mergeToastOptions(options?: ToastOptions): ToastOptions {\r\n return {\r\n ...getActiveToasterRegistration().toastOptions,\r\n ...options,\r\n };\r\n}\r\n\r\nfunction isToastVariant(value: string | undefined): value is ToastVariant {\r\n return value === \"default\" || value === \"error\" || value === \"info\" || value === \"loading\" || value === \"success\" || value === \"warning\";\r\n}\r\n\r\nfunction createToastMetadata(\r\n variant: ToastVariant,\r\n options: ToastOptions,\r\n closeButton: boolean,\r\n customContent?: React.ReactNode,\r\n): ToastMetadata {\r\n return {\r\n action: options.action,\r\n cancel: options.cancel,\r\n className: options.className,\r\n closeButton,\r\n closeButtonAriaLabel: options.closeButtonAriaLabel ?? DEFAULT_TOAST_CLOSE_LABEL,\r\n customContent,\r\n descriptionClassName: options.descriptionClassName,\r\n style: options.style,\r\n variant,\r\n };\r\n}\r\n\r\nfunction createToastRecord({\r\n id,\r\n message,\r\n options,\r\n variant,\r\n customContent,\r\n}: Readonly<{\r\n customContent?: React.ReactNode;\r\n id: string;\r\n message?: ToastRenderable;\r\n options: ToastOptions;\r\n variant: ToastVariant;\r\n}>): ToastRecord {\r\n const activeRegistration = getActiveToasterRegistration();\r\n const closeButton = options.closeButton ?? activeRegistration.closeButton;\r\n const title = message === undefined ? undefined : resolveRenderable(message);\r\n const description = resolveRenderable(options.description);\r\n const snapshot = getSnapshot(id, variant, title, description);\r\n\r\n return {\r\n metadata: createToastMetadata(variant, options, closeButton, customContent),\r\n options,\r\n snapshot,\r\n };\r\n}\r\n\r\nfunction createToastLifecycleHandlers(toastId: string, record: ToastRecord): Pick<ToastAddOptions, \"onClose\" | \"onRemove\"> {\r\n return {\r\n onClose: () => {\r\n record.options.onDismiss?.(activeToasts.get(toastId) ?? record.snapshot);\r\n },\r\n onRemove: () => {\r\n const snapshot = activeToasts.get(toastId) ?? record.snapshot;\r\n unregisterToast(toastId);\r\n record.options.onAutoClose?.(snapshot);\r\n },\r\n };\r\n}\r\n\r\nfunction createToastAddPayload(record: ToastRecord): ToastAddOptions {\r\n const lifecycleHandlers = createToastLifecycleHandlers(record.snapshot.id, record);\r\n\r\n return {\r\n description: record.snapshot.description,\r\n id: record.snapshot.id,\r\n priority: record.options.priority,\r\n timeout: record.options.duration,\r\n title: record.snapshot.title,\r\n type: record.snapshot.variant,\r\n data: record.metadata,\r\n ...lifecycleHandlers,\r\n };\r\n}\r\n\r\nfunction buildToastOptions(message: ToastRenderable, variant: ToastVariant, options?: ToastOptions): ToastAddOptions {\r\n const mergedOptions = mergeToastOptions(options);\r\n const toastId = createToastIdentifier(mergedOptions.id);\r\n const record = createToastRecord({\r\n id: toastId,\r\n message,\r\n options: mergedOptions,\r\n variant,\r\n });\r\n\r\n registerToastRecord(record);\r\n\r\n return createToastAddPayload(record);\r\n}\r\n\r\nfunction showToast(message: ToastRenderable, variant: ToastVariant, options?: ToastOptions): string {\r\n const payload = buildToastOptions(message, variant, options);\r\n return toastManager.add(payload);\r\n}\r\n\r\nfunction dismissToast(toastId?: ToastIdentifier): string | undefined {\r\n if (toastId === undefined) {\r\n unregisterToast();\r\n toastManager.close();\r\n return undefined;\r\n }\r\n\r\n const normalizedToastId = String(toastId);\r\n unregisterToast(normalizedToastId);\r\n toastManager.close(normalizedToastId);\r\n return normalizedToastId;\r\n}\r\n\r\nfunction updateToast(toastId: ToastIdentifier, options: ToastUpdateOptions): string {\r\n const normalizedToastId = String(toastId);\r\n const existingRecord = toastRecords.get(normalizedToastId);\r\n const mergedOptions: ToastOptions = {\r\n ...(existingRecord?.options ?? {}),\r\n ...options,\r\n };\r\n const variant = options.variant ?? existingRecord?.snapshot.variant ?? \"default\";\r\n const nextMessage = options.message === undefined ? existingRecord?.snapshot.title : resolveRenderable(options.message);\r\n const nextDescription = options.description === undefined ? existingRecord?.snapshot.description : resolveRenderable(options.description);\r\n const metadata = createToastMetadata(\r\n variant,\r\n mergedOptions,\r\n mergedOptions.closeButton ?? existingRecord?.metadata.closeButton ?? getActiveToasterRegistration().closeButton,\r\n existingRecord?.metadata.customContent,\r\n );\r\n const record: ToastRecord = {\r\n metadata,\r\n options: mergedOptions,\r\n snapshot: getSnapshot(normalizedToastId, variant, nextMessage, nextDescription),\r\n };\r\n\r\n replaceToastRecord(record);\r\n\r\n const payload: ToastUpdatePayload = {\r\n description: record.snapshot.description,\r\n priority: record.options.priority,\r\n timeout: record.options.duration,\r\n title: record.snapshot.title,\r\n type: record.snapshot.variant,\r\n data: record.metadata,\r\n ...createToastLifecycleHandlers(normalizedToastId, record),\r\n };\r\n\r\n toastManager.update(normalizedToastId, payload);\r\n\r\n return normalizedToastId;\r\n}\r\n\r\nfunction resolvePromiseState<Value>(state: ToastPromiseState<Value> | ResolvedPromiseState, value: Value): Promise<ResolvedPromiseState> {\r\n if (typeof state === \"function\") {\r\n return Promise.resolve(state(value));\r\n }\r\n\r\n return Promise.resolve(state);\r\n}\r\n\r\nfunction isPromiseResolvedOptions(value: ToastRenderable | ToastPromiseResolvedOptions | undefined): value is ToastPromiseResolvedOptions {\r\n return typeof value === \"object\" && value !== null && \"message\" in value;\r\n}\r\n\r\nfunction isToastAction(value: ToastActionRenderable | undefined): value is ToastAction {\r\n if (React.isValidElement(value)) {\r\n return false;\r\n }\r\n\r\n return typeof value === \"object\" && value !== null && \"label\" in value && \"onClick\" in value;\r\n}\r\n\r\n// eslint-disable-next-line sonarjs/function-return-type -- Variant selection intentionally maps to React nodes for a single icon slot.\r\nfunction getVariantIcon(variant: ToastVariant): React.ReactNode {\r\n const icons: Record<ToastVariant, React.ReactNode> = {\r\n default: (\r\n <BellRing\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n error: (\r\n <AlertCircle\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n info: (\r\n <Info\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n loading: (\r\n <LoaderCircle\r\n aria-hidden='true'\r\n className={cn(styles.icon, styles.iconSpin)}\r\n />\r\n ),\r\n success: (\r\n <CheckCircle2\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n warning: (\r\n <TriangleAlert\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n };\r\n\r\n return icons[variant];\r\n}\r\n\r\nfunction ToastActions({\r\n toastId,\r\n action,\r\n cancel,\r\n}: Readonly<{toastId: string; action?: ToastActionRenderable; cancel?: ToastActionRenderable}>): React.JSX.Element | null {\r\n if (!action && !cancel) {\r\n return null;\r\n }\r\n\r\n const renderAction = (value: ToastActionRenderable | undefined, className: string): React.ReactElement | null => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n if (React.isValidElement(value)) {\r\n return value;\r\n }\r\n\r\n if (isToastAction(value)) {\r\n return (\r\n <button\r\n className={className}\r\n type='button'\r\n onClick={(event) => {\r\n value.onClick(event);\r\n dismissToast(toastId);\r\n }}>\r\n {value.label}\r\n </button>\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n return (\r\n <div className={styles.actions}>\r\n {renderAction(cancel, styles.secondaryAction)}\r\n {renderAction(action, styles.primaryAction)}\r\n </div>\r\n );\r\n}\r\n\r\nfunction ToastViewportContent(): React.JSX.Element {\r\n const {toasts} = Toast.useToastManager<ToastMetadata>();\r\n\r\n return (\r\n <>\r\n {toasts.map((toastItem) => {\r\n const variant = isToastVariant(toastItem.type) ? toastItem.type : \"default\";\r\n const action = toastItem.data?.action;\r\n const cancel = toastItem.data?.cancel;\r\n\r\n return (\r\n <Toast.Root\r\n key={toastItem.id}\r\n toast={toastItem}\r\n className={cn(styles.root, variantStyles[variant], toastItem.data?.className)}\r\n data-variant={variant}\r\n style={toastItem.data?.style}>\r\n <Toast.Content className={styles.content}>\r\n {toastItem.data?.customContent ?? (\r\n <>\r\n <div className={styles.leading}>{getVariantIcon(variant)}</div>\r\n <div className={styles.body}>\r\n {toastItem.title ? <Toast.Title className={styles.title}>{toastItem.title}</Toast.Title> : null}\r\n {toastItem.description ? (\r\n <Toast.Description className={cn(styles.description, toastItem.data?.descriptionClassName)}>\r\n {toastItem.description}\r\n </Toast.Description>\r\n ) : null}\r\n <ToastActions\r\n action={action}\r\n cancel={cancel}\r\n toastId={toastItem.id}\r\n />\r\n </div>\r\n {toastItem.data?.closeButton ? (\r\n <Toast.Close\r\n aria-label={toastItem.data.closeButtonAriaLabel}\r\n className={styles.close}>\r\n <X\r\n aria-hidden='true'\r\n className={styles.closeIcon}\r\n />\r\n </Toast.Close>\r\n ) : null}\r\n </>\r\n )}\r\n </Toast.Content>\r\n </Toast.Root>\r\n );\r\n })}\r\n </>\r\n );\r\n}\r\n\r\n/**\r\n * Toast notification container.\r\n *\r\n * @remarks\r\n * Renders the Base UI provider, portal, and viewport with defaults that preserve the previous\r\n * shared `Toaster` export behavior used by the website.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Toaster position='top-right' visibleToasts={5} />\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toast | Base UI Toast Docs}\r\n */\r\nfunction Toaster({\r\n className,\r\n closeButton = true,\r\n containerAriaLabel = DEFAULT_VIEWPORT_ARIA_LABEL,\r\n duration = DEFAULT_TOAST_DURATION,\r\n position = \"bottom-right\",\r\n style,\r\n toastOptions,\r\n visibleToasts = DEFAULT_TOAST_LIMIT,\r\n}: Readonly<ToasterProps>): React.JSX.Element {\r\n const toasterId = React.useId();\r\n\r\n React.useEffect(() => {\r\n toasterRegistrations.set(toasterId, {\r\n closeButton,\r\n toastOptions: toastOptions ?? {},\r\n });\r\n\r\n return () => {\r\n toasterRegistrations.delete(toasterId);\r\n };\r\n }, [closeButton, toastOptions, toasterId]);\r\n\r\n return (\r\n <Toast.Provider\r\n limit={visibleToasts}\r\n timeout={duration}\r\n toastManager={toastManager}>\r\n <Toast.Portal>\r\n <Toast.Viewport\r\n aria-label={containerAriaLabel}\r\n className={cn(styles.viewport, positionStyles[position], className)}\r\n style={style}>\r\n <ToastViewportContent />\r\n </Toast.Viewport>\r\n </Toast.Portal>\r\n </Toast.Provider>\r\n );\r\n}\r\n\r\nToaster.displayName = \"Toaster\";\r\n\r\n/**\r\n * Imperative toast API for creating transient notifications outside React render flows.\r\n *\r\n * @remarks\r\n * Built on Base UI's toast manager and preserved as a drop-in replacement for the previous\r\n * `sonner` export surface.\r\n *\r\n * @example\r\n * ```tsx\r\n * toast.success(\"Profile updated\");\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toast | Base UI Toast Docs}\r\n */\r\nconst toast = ((message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"default\", options)) as ToastApi;\r\n\r\ntoast.success = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"success\", options);\r\ntoast.error = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"error\", options);\r\ntoast.info = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"info\", options);\r\ntoast.warning = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"warning\", options);\r\ntoast.loading = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"loading\", options);\r\ntoast.message = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"default\", options);\r\ntoast.update = (toastId: ToastIdentifier, options: ToastUpdateOptions): string => updateToast(toastId, options);\r\ntoast.dismiss = (toastId?: ToastIdentifier): string | undefined => dismissToast(toastId);\r\ntoast.custom = (renderer: (toastId: string) => React.ReactElement, options?: ToastOptions): string => {\r\n const mergedOptions = mergeToastOptions(options);\r\n const toastId = createToastIdentifier(mergedOptions.id);\r\n const record = createToastRecord({\r\n customContent: renderer(toastId),\r\n id: toastId,\r\n options: mergedOptions,\r\n variant: \"default\",\r\n });\r\n\r\n registerToastRecord(record);\r\n\r\n toastManager.add(createToastAddPayload(record));\r\n\r\n return toastId;\r\n};\r\nfunction mergePromiseToastOptions(baseOptions: ToastOptions, override?: ToastPromiseResolvedOptions): ToastOptions {\r\n if (!override) {\r\n return baseOptions;\r\n }\r\n\r\n return {\r\n action: override.action ?? baseOptions.action,\r\n cancel: override.cancel ?? baseOptions.cancel,\r\n className: override.className ?? baseOptions.className,\r\n closeButton: override.closeButton ?? baseOptions.closeButton,\r\n closeButtonAriaLabel: override.closeButtonAriaLabel ?? baseOptions.closeButtonAriaLabel,\r\n description: override.description ?? baseOptions.description,\r\n descriptionClassName: override.descriptionClassName ?? baseOptions.descriptionClassName,\r\n duration: override.duration ?? baseOptions.duration,\r\n id: override.id ?? baseOptions.id,\r\n onAutoClose: override.onAutoClose ?? baseOptions.onAutoClose,\r\n onDismiss: override.onDismiss ?? baseOptions.onDismiss,\r\n priority: override.priority ?? baseOptions.priority,\r\n style: override.style ?? baseOptions.style,\r\n };\r\n}\r\n\r\nfunction getPromiseBaseOptions<Value>(options?: ToastPromiseOptions<Value>): ToastOptions {\r\n return {\r\n action: options?.action,\r\n cancel: options?.cancel,\r\n className: options?.className,\r\n closeButton: options?.closeButton,\r\n closeButtonAriaLabel: options?.closeButtonAriaLabel,\r\n description: options?.description,\r\n descriptionClassName: options?.descriptionClassName,\r\n duration: options?.duration,\r\n id: options?.id,\r\n onAutoClose: options?.onAutoClose,\r\n onDismiss: options?.onDismiss,\r\n priority: options?.priority,\r\n style: options?.style,\r\n };\r\n}\r\n\r\nfunction showResolvedPromiseToast(\r\n loadingToastId: string | undefined,\r\n variant: Exclude<ToastVariant, \"default\">,\r\n resolvedState: ToastRenderable | ToastPromiseResolvedOptions | undefined,\r\n baseOptions: ToastOptions,\r\n): void {\r\n if (!resolvedState) {\r\n if (loadingToastId) {\r\n dismissToast(loadingToastId);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const overrideOptions = isPromiseResolvedOptions(resolvedState) ? resolvedState : undefined;\r\n const message = isPromiseResolvedOptions(resolvedState) ? resolvedState.message : resolvedState;\r\n const mergedOptions = mergePromiseToastOptions(baseOptions, overrideOptions);\r\n\r\n if (loadingToastId) {\r\n toast.update(loadingToastId, {\r\n ...mergedOptions,\r\n message,\r\n variant,\r\n });\r\n\r\n return;\r\n }\r\n\r\n showToast(message, variant, mergedOptions);\r\n}\r\n\r\ntoast.promise = async function promise<Value>(promiseValue: ToastPromise<Value>, options?: ToastPromiseOptions<Value>): Promise<Value> {\r\n const pendingPromise = typeof promiseValue === \"function\" ? promiseValue() : promiseValue;\r\n const baseOptions = getPromiseBaseOptions(options);\r\n const loadingState = options?.loading;\r\n const loadingOptions = isPromiseResolvedOptions(loadingState) ? loadingState : undefined;\r\n const loadingMessage = isPromiseResolvedOptions(loadingState) ? loadingState.message : loadingState;\r\n const loadingToastId = loadingMessage ? toast.loading(loadingMessage, mergePromiseToastOptions(baseOptions, loadingOptions)) : undefined;\r\n\r\n try {\r\n const result = await pendingPromise;\r\n const successState = await resolvePromiseState(options?.success, result);\r\n showResolvedPromiseToast(loadingToastId, \"success\", successState, baseOptions);\r\n\r\n return result;\r\n } catch (error: unknown) {\r\n const errorState = await resolvePromiseState(options?.error, error);\r\n showResolvedPromiseToast(loadingToastId, \"error\", errorState, baseOptions);\r\n\r\n throw error;\r\n } finally {\r\n const handleFinally = options?.finally;\r\n if (handleFinally) {\r\n await handleFinally();\r\n }\r\n }\r\n};\r\ntoast.getToasts = (): ReadonlyArray<ToastSnapshot> => [...activeToasts.values()];\r\ntoast.getHistory = (): ReadonlyArray<ToastSnapshot> => [...toastHistory];\r\n\r\nexport type {Toast} from \"@base-ui/react/toast\";\r\nexport {toast, Toaster};\r\n"],"names":["DEFAULT_TOAST_DURATION","DEFAULT_TOAST_LIMIT","DEFAULT_TOAST_CLOSE_LABEL","DEFAULT_VIEWPORT_ARIA_LABEL","positionStyles","styles","variantStyles","toastManager","Toast","toastHistory","activeToasts","Map","toastRecords","toasterRegistrations","toastSequence","createToastIdentifier","identifier","undefined","String","globalThis","isRenderableFactory","value","resolveRenderable","resolvedValue","getSnapshot","id","variant","title","description","registerToast","snapshot","registerToastRecord","record","replaceToastHistorySnapshot","index","replaceToastRecord","unregisterToast","toastId","getActiveToasterRegistration","registrations","mergeToastOptions","options","isToastVariant","createToastMetadata","closeButton","customContent","createToastRecord","message","activeRegistration","createToastLifecycleHandlers","createToastAddPayload","lifecycleHandlers","buildToastOptions","mergedOptions","showToast","payload","dismissToast","normalizedToastId","updateToast","existingRecord","nextMessage","nextDescription","metadata","resolvePromiseState","state","Promise","isPromiseResolvedOptions","isToastAction","React","getVariantIcon","icons","BellRing","AlertCircle","Info","LoaderCircle","cn","CheckCircle2","TriangleAlert","ToastActions","action","cancel","renderAction","className","event","ToastViewportContent","toasts","toastItem","X","Toaster","containerAriaLabel","duration","position","style","toastOptions","visibleToasts","toasterId","toast","renderer","mergePromiseToastOptions","baseOptions","override","getPromiseBaseOptions","showResolvedPromiseToast","loadingToastId","resolvedState","overrideOptions","promiseValue","pendingPromise","loadingState","loadingOptions","loadingMessage","result","successState","error","errorState","handleFinally"],"mappings":"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"}
1
+ {"version":3,"file":"components/ui/sonner.js","sources":["../../../src/components/ui/sonner.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/**\r\n * @fileoverview Base UI-backed toast provider and imperative toast bridge.\r\n *\r\n * Replaces the previous `sonner` runtime dependency while preserving the existing public exports:\r\n * `Toaster` for container rendering and `toast` for imperative notifications used throughout the\r\n * website and component consumers.\r\n */\r\n\r\nimport {Toast} from \"@base-ui/react/toast\";\r\nimport {AlertCircle, BellRing, CheckCircle2, Info, LoaderCircle, TriangleAlert, X} from \"lucide-react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./sonner.module.css\";\r\n\r\nconst DEFAULT_TOAST_DURATION = 5000;\r\nconst DEFAULT_TOAST_LIMIT = 3;\r\nconst DEFAULT_TOAST_CLOSE_LABEL = \"Close notification\";\r\nconst DEFAULT_VIEWPORT_ARIA_LABEL = \"Notifications\";\r\n\r\ntype ToastPosition = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"top-center\" | \"bottom-center\";\r\ntype ToastVariant = \"default\" | \"success\" | \"error\" | \"info\" | \"warning\" | \"loading\";\r\ntype ToastIdentifier = number | string;\r\ntype ToastRenderable = React.ReactNode | (() => React.ReactNode);\r\ntype ToastPromise<Value> = Promise<Value> | (() => Promise<Value>);\r\ntype ResolvedPromiseState = ToastRenderable | ToastPromiseResolvedOptions | undefined;\r\n\r\ninterface ToastAction {\r\n label: React.ReactNode;\r\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n}\r\n\r\ntype ToastActionRenderable = React.ReactNode | ToastAction;\r\n\r\ninterface ToastOptions {\r\n id?: ToastIdentifier;\r\n description?: ToastRenderable;\r\n duration?: number;\r\n className?: string;\r\n descriptionClassName?: string;\r\n closeButton?: boolean;\r\n closeButtonAriaLabel?: string;\r\n style?: React.CSSProperties;\r\n priority?: \"high\" | \"low\";\r\n action?: ToastActionRenderable;\r\n cancel?: ToastActionRenderable;\r\n onDismiss?: (toast: ToastSnapshot) => void;\r\n onAutoClose?: (toast: ToastSnapshot) => void;\r\n}\r\n\r\ninterface ToastPromiseResolvedOptions extends ToastOptions {\r\n message: ToastRenderable;\r\n}\r\n\r\ntype ToastPromiseState<Value> =\r\n | ToastRenderable\r\n | ToastPromiseResolvedOptions\r\n | ((value: Value) => ToastRenderable | ToastPromiseResolvedOptions | Promise<ToastRenderable | ToastPromiseResolvedOptions>);\r\n\r\ninterface ToastPromiseOptions<Value> extends ToastOptions {\r\n loading?: ToastRenderable | ToastPromiseResolvedOptions;\r\n success?: ToastPromiseState<Value>;\r\n error?: ToastPromiseState<unknown>;\r\n finally?: () => void | Promise<void>;\r\n}\r\n\r\ninterface ToasterProps {\r\n /**\r\n * Screen position used for the toast viewport.\r\n * @default \"bottom-right\"\r\n */\r\n position?: ToastPosition;\r\n /**\r\n * Default auto-dismiss duration, in milliseconds, for each toast.\r\n * @default 5000\r\n */\r\n duration?: number;\r\n /**\r\n * Maximum number of simultaneously visible toasts.\r\n * @default 3\r\n */\r\n visibleToasts?: number;\r\n /**\r\n * Whether to render a close button for each toast by default.\r\n * @default true\r\n */\r\n closeButton?: boolean;\r\n /**\r\n * Accessible label announced for the toast viewport container.\r\n * @default \"Notifications\"\r\n */\r\n containerAriaLabel?: string;\r\n /**\r\n * Additional CSS classes merged with the toast viewport.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Inline styles applied to the toast viewport.\r\n * @default undefined\r\n */\r\n style?: React.CSSProperties;\r\n /**\r\n * Default options merged into each toast created while this toaster is mounted.\r\n * @default undefined\r\n */\r\n toastOptions?: ToastOptions;\r\n}\r\n\r\ninterface ToastSnapshot {\r\n id: string;\r\n variant: ToastVariant;\r\n title?: React.ReactNode;\r\n description?: React.ReactNode;\r\n}\r\n\r\ninterface ToastMetadata {\r\n variant: ToastVariant;\r\n className?: string;\r\n descriptionClassName?: string;\r\n closeButton: boolean;\r\n closeButtonAriaLabel: string;\r\n style?: React.CSSProperties;\r\n action?: ToastActionRenderable;\r\n cancel?: ToastActionRenderable;\r\n customContent?: React.ReactNode;\r\n}\r\n\r\ninterface ToastUpdateOptions extends ToastOptions {\r\n message?: ToastRenderable;\r\n variant?: ToastVariant;\r\n}\r\n\r\ninterface ToasterRegistration {\r\n closeButton: boolean;\r\n toastOptions: ToastOptions;\r\n}\r\n\r\ninterface ToastRecord {\r\n metadata: ToastMetadata;\r\n options: ToastOptions;\r\n snapshot: ToastSnapshot;\r\n}\r\n\r\ninterface ToastApi {\r\n (message: ToastRenderable, options?: ToastOptions): string;\r\n success: (message: ToastRenderable, options?: ToastOptions) => string;\r\n error: (message: ToastRenderable, options?: ToastOptions) => string;\r\n info: (message: ToastRenderable, options?: ToastOptions) => string;\r\n warning: (message: ToastRenderable, options?: ToastOptions) => string;\r\n loading: (message: ToastRenderable, options?: ToastOptions) => string;\r\n message: (message: ToastRenderable, options?: ToastOptions) => string;\r\n update: (toastId: ToastIdentifier, options: ToastUpdateOptions) => string;\r\n dismiss: (toastId?: ToastIdentifier) => string | undefined;\r\n promise: <Value>(promise: ToastPromise<Value>, options?: ToastPromiseOptions<Value>) => Promise<Value>;\r\n custom: (renderer: (toastId: string) => React.ReactElement, options?: ToastOptions) => string;\r\n getToasts: () => ReadonlyArray<ToastSnapshot>;\r\n getHistory: () => ReadonlyArray<ToastSnapshot>;\r\n}\r\n\r\nconst positionStyles: Record<ToastPosition, string> = {\r\n \"bottom-center\": styles.viewportBottomCenter,\r\n \"bottom-left\": styles.viewportBottomLeft,\r\n \"bottom-right\": styles.viewportBottomRight,\r\n \"top-center\": styles.viewportTopCenter,\r\n \"top-left\": styles.viewportTopLeft,\r\n \"top-right\": styles.viewportTopRight,\r\n};\r\n\r\nconst variantStyles: Record<ToastVariant, string> = {\r\n default: styles.default,\r\n error: styles.error,\r\n info: styles.info,\r\n loading: styles.loading,\r\n success: styles.success,\r\n warning: styles.warning,\r\n};\r\n\r\nconst toastManager = Toast.createToastManager<ToastMetadata>();\r\ntype ToastAddOptions = Parameters<typeof toastManager.add>[0];\r\ntype ToastUpdatePayload = Parameters<typeof toastManager.update>[1];\r\nconst toastHistory: ToastSnapshot[] = [];\r\nconst activeToasts = new Map<string, ToastSnapshot>();\r\nconst toastRecords = new Map<string, ToastRecord>();\r\nconst toasterRegistrations = new Map<string, ToasterRegistration>();\r\n\r\nlet toastSequence = 0;\r\n\r\nfunction createToastIdentifier(identifier?: ToastIdentifier): string {\r\n if (identifier !== undefined) {\r\n return String(identifier);\r\n }\r\n\r\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\r\n return globalThis.crypto.randomUUID();\r\n }\r\n\r\n toastSequence += 1;\r\n return `toast-${String(toastSequence)}`;\r\n}\r\n\r\nfunction isRenderableFactory(value: ToastRenderable | undefined): value is () => React.ReactNode {\r\n return typeof value === \"function\";\r\n}\r\n\r\n// eslint-disable-next-line sonarjs/function-return-type -- React renderables intentionally normalize to one public node type.\r\nfunction resolveRenderable(value?: ToastRenderable): React.ReactNode | undefined {\r\n const resolvedValue = isRenderableFactory(value) ? value() : value;\r\n return resolvedValue;\r\n}\r\n\r\nfunction getSnapshot(id: string, variant: ToastVariant, title?: React.ReactNode, description?: React.ReactNode): ToastSnapshot {\r\n return {\r\n description,\r\n id,\r\n title,\r\n variant,\r\n };\r\n}\r\n\r\nfunction registerToast(snapshot: ToastSnapshot): void {\r\n activeToasts.set(snapshot.id, snapshot);\r\n toastHistory.push(snapshot);\r\n}\r\n\r\nfunction registerToastRecord(record: ToastRecord): void {\r\n toastRecords.set(record.snapshot.id, record);\r\n registerToast(record.snapshot);\r\n}\r\n\r\nfunction replaceToastHistorySnapshot(snapshot: ToastSnapshot): void {\r\n for (let index = toastHistory.length - 1; index >= 0; index -= 1) {\r\n if (toastHistory[index]?.id === snapshot.id) {\r\n toastHistory[index] = snapshot;\r\n return;\r\n }\r\n }\r\n\r\n toastHistory.push(snapshot);\r\n}\r\n\r\nfunction replaceToastRecord(record: ToastRecord): void {\r\n toastRecords.set(record.snapshot.id, record);\r\n activeToasts.set(record.snapshot.id, record.snapshot);\r\n replaceToastHistorySnapshot(record.snapshot);\r\n}\r\n\r\nfunction unregisterToast(toastId?: string): void {\r\n if (!toastId) {\r\n activeToasts.clear();\r\n toastRecords.clear();\r\n return;\r\n }\r\n\r\n activeToasts.delete(toastId);\r\n toastRecords.delete(toastId);\r\n}\r\n\r\nfunction getActiveToasterRegistration(): ToasterRegistration {\r\n const registrations = [...toasterRegistrations.values()];\r\n return registrations.at(-1) ?? {closeButton: true, toastOptions: {}};\r\n}\r\n\r\nfunction mergeToastOptions(options?: ToastOptions): ToastOptions {\r\n return {\r\n ...getActiveToasterRegistration().toastOptions,\r\n ...options,\r\n };\r\n}\r\n\r\nfunction isToastVariant(value: string | undefined): value is ToastVariant {\r\n return value === \"default\" || value === \"error\" || value === \"info\" || value === \"loading\" || value === \"success\" || value === \"warning\";\r\n}\r\n\r\nfunction createToastMetadata(\r\n variant: ToastVariant,\r\n options: ToastOptions,\r\n closeButton: boolean,\r\n customContent?: React.ReactNode,\r\n): ToastMetadata {\r\n return {\r\n action: options.action,\r\n cancel: options.cancel,\r\n className: options.className,\r\n closeButton,\r\n closeButtonAriaLabel: options.closeButtonAriaLabel ?? DEFAULT_TOAST_CLOSE_LABEL,\r\n customContent,\r\n descriptionClassName: options.descriptionClassName,\r\n style: options.style,\r\n variant,\r\n };\r\n}\r\n\r\nfunction createToastRecord({\r\n id,\r\n message,\r\n options,\r\n variant,\r\n customContent,\r\n}: Readonly<{\r\n customContent?: React.ReactNode;\r\n id: string;\r\n message?: ToastRenderable;\r\n options: ToastOptions;\r\n variant: ToastVariant;\r\n}>): ToastRecord {\r\n const activeRegistration = getActiveToasterRegistration();\r\n const closeButton = options.closeButton ?? activeRegistration.closeButton;\r\n const title = message === undefined ? undefined : resolveRenderable(message);\r\n const description = resolveRenderable(options.description);\r\n const snapshot = getSnapshot(id, variant, title, description);\r\n\r\n return {\r\n metadata: createToastMetadata(variant, options, closeButton, customContent),\r\n options,\r\n snapshot,\r\n };\r\n}\r\n\r\nfunction createToastLifecycleHandlers(toastId: string, record: ToastRecord): Pick<ToastAddOptions, \"onClose\" | \"onRemove\"> {\r\n return {\r\n onClose: () => {\r\n record.options.onDismiss?.(activeToasts.get(toastId) ?? record.snapshot);\r\n },\r\n onRemove: () => {\r\n const snapshot = activeToasts.get(toastId) ?? record.snapshot;\r\n unregisterToast(toastId);\r\n record.options.onAutoClose?.(snapshot);\r\n },\r\n };\r\n}\r\n\r\nfunction createToastAddPayload(record: ToastRecord): ToastAddOptions {\r\n const lifecycleHandlers = createToastLifecycleHandlers(record.snapshot.id, record);\r\n\r\n return {\r\n description: record.snapshot.description,\r\n id: record.snapshot.id,\r\n priority: record.options.priority,\r\n timeout: record.options.duration,\r\n title: record.snapshot.title,\r\n type: record.snapshot.variant,\r\n data: record.metadata,\r\n ...lifecycleHandlers,\r\n };\r\n}\r\n\r\nfunction buildToastOptions(message: ToastRenderable, variant: ToastVariant, options?: ToastOptions): ToastAddOptions {\r\n const mergedOptions = mergeToastOptions(options);\r\n const toastId = createToastIdentifier(mergedOptions.id);\r\n const record = createToastRecord({\r\n id: toastId,\r\n message,\r\n options: mergedOptions,\r\n variant,\r\n });\r\n\r\n registerToastRecord(record);\r\n\r\n return createToastAddPayload(record);\r\n}\r\n\r\nfunction showToast(message: ToastRenderable, variant: ToastVariant, options?: ToastOptions): string {\r\n const payload = buildToastOptions(message, variant, options);\r\n return toastManager.add(payload);\r\n}\r\n\r\nfunction dismissToast(toastId?: ToastIdentifier): string | undefined {\r\n if (toastId === undefined) {\r\n unregisterToast();\r\n toastManager.close();\r\n return undefined;\r\n }\r\n\r\n const normalizedToastId = String(toastId);\r\n unregisterToast(normalizedToastId);\r\n toastManager.close(normalizedToastId);\r\n return normalizedToastId;\r\n}\r\n\r\nfunction updateToast(toastId: ToastIdentifier, options: ToastUpdateOptions): string {\r\n const normalizedToastId = String(toastId);\r\n const existingRecord = toastRecords.get(normalizedToastId);\r\n const mergedOptions: ToastOptions = {\r\n ...existingRecord?.options,\r\n ...options,\r\n };\r\n const variant = options.variant ?? existingRecord?.snapshot.variant ?? \"default\";\r\n const nextMessage = options.message === undefined ? existingRecord?.snapshot.title : resolveRenderable(options.message);\r\n const nextDescription = options.description === undefined ? existingRecord?.snapshot.description : resolveRenderable(options.description);\r\n const metadata = createToastMetadata(\r\n variant,\r\n mergedOptions,\r\n mergedOptions.closeButton ?? existingRecord?.metadata.closeButton ?? getActiveToasterRegistration().closeButton,\r\n existingRecord?.metadata.customContent,\r\n );\r\n const record: ToastRecord = {\r\n metadata,\r\n options: mergedOptions,\r\n snapshot: getSnapshot(normalizedToastId, variant, nextMessage, nextDescription),\r\n };\r\n\r\n replaceToastRecord(record);\r\n\r\n const payload: ToastUpdatePayload = {\r\n description: record.snapshot.description,\r\n priority: record.options.priority,\r\n timeout: record.options.duration,\r\n title: record.snapshot.title,\r\n type: record.snapshot.variant,\r\n data: record.metadata,\r\n ...createToastLifecycleHandlers(normalizedToastId, record),\r\n };\r\n\r\n toastManager.update(normalizedToastId, payload);\r\n\r\n return normalizedToastId;\r\n}\r\n\r\nfunction resolvePromiseState<Value>(state: ToastPromiseState<Value> | ResolvedPromiseState, value: Value): Promise<ResolvedPromiseState> {\r\n if (typeof state === \"function\") {\r\n return Promise.resolve(state(value));\r\n }\r\n\r\n return Promise.resolve(state);\r\n}\r\n\r\nfunction isPromiseResolvedOptions(value: ToastRenderable | ToastPromiseResolvedOptions | undefined): value is ToastPromiseResolvedOptions {\r\n return typeof value === \"object\" && value !== null && \"message\" in value;\r\n}\r\n\r\nfunction isToastAction(value: ToastActionRenderable | undefined): value is ToastAction {\r\n if (React.isValidElement(value)) {\r\n return false;\r\n }\r\n\r\n return typeof value === \"object\" && value !== null && \"label\" in value && \"onClick\" in value;\r\n}\r\n\r\n// eslint-disable-next-line sonarjs/function-return-type -- Variant selection intentionally maps to React nodes for a single icon slot.\r\nfunction getVariantIcon(variant: ToastVariant): React.ReactNode {\r\n const icons: Record<ToastVariant, React.ReactNode> = {\r\n default: (\r\n <BellRing\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n error: (\r\n <AlertCircle\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n info: (\r\n <Info\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n loading: (\r\n <LoaderCircle\r\n aria-hidden='true'\r\n className={cn(styles.icon, styles.iconSpin)}\r\n />\r\n ),\r\n success: (\r\n <CheckCircle2\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n warning: (\r\n <TriangleAlert\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n };\r\n\r\n return icons[variant];\r\n}\r\n\r\nfunction ToastActions({\r\n toastId,\r\n action,\r\n cancel,\r\n}: Readonly<{toastId: string; action?: ToastActionRenderable; cancel?: ToastActionRenderable}>): React.JSX.Element | null {\r\n if (!action && !cancel) {\r\n return null;\r\n }\r\n\r\n const renderAction = (value: ToastActionRenderable | undefined, className: string): React.ReactElement | null => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n if (React.isValidElement(value)) {\r\n return value;\r\n }\r\n\r\n if (isToastAction(value)) {\r\n return (\r\n <button\r\n className={className}\r\n type='button'\r\n onClick={(event) => {\r\n value.onClick(event);\r\n dismissToast(toastId);\r\n }}>\r\n {value.label}\r\n </button>\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n return (\r\n <div className={styles.actions}>\r\n {renderAction(cancel, styles.secondaryAction)}\r\n {renderAction(action, styles.primaryAction)}\r\n </div>\r\n );\r\n}\r\n\r\nfunction ToastViewportContent(): React.JSX.Element {\r\n const {toasts} = Toast.useToastManager<ToastMetadata>();\r\n\r\n return (\r\n <>\r\n {toasts.map((toastItem) => {\r\n const variant = isToastVariant(toastItem.type) ? toastItem.type : \"default\";\r\n const action = toastItem.data?.action;\r\n const cancel = toastItem.data?.cancel;\r\n\r\n return (\r\n <Toast.Root\r\n key={toastItem.id}\r\n toast={toastItem}\r\n className={cn(styles.root, variantStyles[variant], toastItem.data?.className)}\r\n data-variant={variant}\r\n style={toastItem.data?.style}>\r\n <Toast.Content className={styles.content}>\r\n {toastItem.data?.customContent ?? (\r\n <>\r\n <div className={styles.leading}>{getVariantIcon(variant)}</div>\r\n <div className={styles.body}>\r\n {toastItem.title ? <Toast.Title className={styles.title}>{toastItem.title}</Toast.Title> : null}\r\n {toastItem.description ? (\r\n <Toast.Description className={cn(styles.description, toastItem.data?.descriptionClassName)}>\r\n {toastItem.description}\r\n </Toast.Description>\r\n ) : null}\r\n <ToastActions\r\n action={action}\r\n cancel={cancel}\r\n toastId={toastItem.id}\r\n />\r\n </div>\r\n {toastItem.data?.closeButton ? (\r\n <Toast.Close\r\n aria-label={toastItem.data.closeButtonAriaLabel}\r\n className={styles.close}>\r\n <X\r\n aria-hidden='true'\r\n className={styles.closeIcon}\r\n />\r\n </Toast.Close>\r\n ) : null}\r\n </>\r\n )}\r\n </Toast.Content>\r\n </Toast.Root>\r\n );\r\n })}\r\n </>\r\n );\r\n}\r\n\r\n/**\r\n * Toast notification container.\r\n *\r\n * @remarks\r\n * Renders the Base UI provider, portal, and viewport with defaults that preserve the previous\r\n * shared `Toaster` export behavior used by the website.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Toaster position='top-right' visibleToasts={5} />\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toast | Base UI Toast Docs}\r\n */\r\n/**\r\n * Toaster is the root viewport container for displaying toast notifications.\r\n * It should be rendered once at the app root level.\r\n */\r\nconst Toaster = React.forwardRef<HTMLDivElement, ToasterProps>(function Toaster(\r\n {\r\n className,\r\n closeButton = true,\r\n containerAriaLabel = DEFAULT_VIEWPORT_ARIA_LABEL,\r\n duration = DEFAULT_TOAST_DURATION,\r\n position = \"bottom-right\",\r\n style,\r\n toastOptions,\r\n visibleToasts = DEFAULT_TOAST_LIMIT,\r\n },\r\n forwardedRef,\r\n) {\r\n const toasterId = React.useId();\r\n\r\n React.useEffect(() => {\r\n toasterRegistrations.set(toasterId, {\r\n closeButton,\r\n toastOptions: toastOptions ?? {},\r\n });\r\n\r\n return () => {\r\n toasterRegistrations.delete(toasterId);\r\n };\r\n }, [closeButton, toastOptions, toasterId]);\r\n\r\n return (\r\n <Toast.Provider\r\n limit={visibleToasts}\r\n timeout={duration}\r\n toastManager={toastManager}>\r\n <Toast.Portal>\r\n <Toast.Viewport\r\n ref={forwardedRef}\r\n aria-label={containerAriaLabel}\r\n className={cn(styles.viewport, positionStyles[position], className)}\r\n style={style}>\r\n <ToastViewportContent />\r\n </Toast.Viewport>\r\n </Toast.Portal>\r\n </Toast.Provider>\r\n );\r\n});\r\n\r\nToaster.displayName = \"Toaster\";\r\n\r\n/**\r\n * Imperative toast API for creating transient notifications outside React render flows.\r\n *\r\n * @remarks\r\n * Built on Base UI's toast manager and preserved as a drop-in replacement for the previous\r\n * `sonner` export surface.\r\n *\r\n * @example\r\n * ```tsx\r\n * toast.success(\"Profile updated\");\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toast | Base UI Toast Docs}\r\n */\r\nconst toast = ((message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"default\", options)) as ToastApi;\r\n\r\ntoast.success = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"success\", options);\r\ntoast.error = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"error\", options);\r\ntoast.info = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"info\", options);\r\ntoast.warning = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"warning\", options);\r\ntoast.loading = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"loading\", options);\r\ntoast.message = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"default\", options);\r\ntoast.update = (toastId: ToastIdentifier, options: ToastUpdateOptions): string => updateToast(toastId, options);\r\ntoast.dismiss = (toastId?: ToastIdentifier): string | undefined => dismissToast(toastId);\r\ntoast.custom = (renderer: (toastId: string) => React.ReactElement, options?: ToastOptions): string => {\r\n const mergedOptions = mergeToastOptions(options);\r\n const toastId = createToastIdentifier(mergedOptions.id);\r\n const record = createToastRecord({\r\n customContent: renderer(toastId),\r\n id: toastId,\r\n options: mergedOptions,\r\n variant: \"default\",\r\n });\r\n\r\n registerToastRecord(record);\r\n\r\n toastManager.add(createToastAddPayload(record));\r\n\r\n return toastId;\r\n};\r\nfunction mergePromiseToastOptions(baseOptions: ToastOptions, override?: ToastPromiseResolvedOptions): ToastOptions {\r\n if (!override) {\r\n return baseOptions;\r\n }\r\n\r\n return {\r\n action: override.action ?? baseOptions.action,\r\n cancel: override.cancel ?? baseOptions.cancel,\r\n className: override.className ?? baseOptions.className,\r\n closeButton: override.closeButton ?? baseOptions.closeButton,\r\n closeButtonAriaLabel: override.closeButtonAriaLabel ?? baseOptions.closeButtonAriaLabel,\r\n description: override.description ?? baseOptions.description,\r\n descriptionClassName: override.descriptionClassName ?? baseOptions.descriptionClassName,\r\n duration: override.duration ?? baseOptions.duration,\r\n id: override.id ?? baseOptions.id,\r\n onAutoClose: override.onAutoClose ?? baseOptions.onAutoClose,\r\n onDismiss: override.onDismiss ?? baseOptions.onDismiss,\r\n priority: override.priority ?? baseOptions.priority,\r\n style: override.style ?? baseOptions.style,\r\n };\r\n}\r\n\r\nfunction getPromiseBaseOptions<Value>(options?: ToastPromiseOptions<Value>): ToastOptions {\r\n return {\r\n action: options?.action,\r\n cancel: options?.cancel,\r\n className: options?.className,\r\n closeButton: options?.closeButton,\r\n closeButtonAriaLabel: options?.closeButtonAriaLabel,\r\n description: options?.description,\r\n descriptionClassName: options?.descriptionClassName,\r\n duration: options?.duration,\r\n id: options?.id,\r\n onAutoClose: options?.onAutoClose,\r\n onDismiss: options?.onDismiss,\r\n priority: options?.priority,\r\n style: options?.style,\r\n };\r\n}\r\n\r\nfunction showResolvedPromiseToast(\r\n loadingToastId: string | undefined,\r\n variant: Exclude<ToastVariant, \"default\">,\r\n resolvedState: ToastRenderable | ToastPromiseResolvedOptions | undefined,\r\n baseOptions: ToastOptions,\r\n): void {\r\n if (!resolvedState) {\r\n if (loadingToastId) {\r\n dismissToast(loadingToastId);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const overrideOptions = isPromiseResolvedOptions(resolvedState) ? resolvedState : undefined;\r\n const message = isPromiseResolvedOptions(resolvedState) ? resolvedState.message : resolvedState;\r\n const mergedOptions = mergePromiseToastOptions(baseOptions, overrideOptions);\r\n\r\n if (loadingToastId) {\r\n toast.update(loadingToastId, {\r\n ...mergedOptions,\r\n message,\r\n variant,\r\n });\r\n\r\n return;\r\n }\r\n\r\n showToast(message, variant, mergedOptions);\r\n}\r\n\r\ntoast.promise = async function promise<Value>(promiseValue: ToastPromise<Value>, options?: ToastPromiseOptions<Value>): Promise<Value> {\r\n const pendingPromise = typeof promiseValue === \"function\" ? promiseValue() : promiseValue;\r\n const baseOptions = getPromiseBaseOptions(options);\r\n const loadingState = options?.loading;\r\n const loadingOptions = isPromiseResolvedOptions(loadingState) ? loadingState : undefined;\r\n const loadingMessage = isPromiseResolvedOptions(loadingState) ? loadingState.message : loadingState;\r\n const loadingToastId = loadingMessage ? toast.loading(loadingMessage, mergePromiseToastOptions(baseOptions, loadingOptions)) : undefined;\r\n\r\n try {\r\n const result = await pendingPromise;\r\n const successState = await resolvePromiseState(options?.success, result);\r\n showResolvedPromiseToast(loadingToastId, \"success\", successState, baseOptions);\r\n\r\n return result;\r\n } catch (error: unknown) {\r\n const errorState = await resolvePromiseState(options?.error, error);\r\n showResolvedPromiseToast(loadingToastId, \"error\", errorState, baseOptions);\r\n\r\n throw error;\r\n } finally {\r\n const handleFinally = options?.finally;\r\n if (handleFinally) {\r\n await handleFinally();\r\n }\r\n }\r\n};\r\ntoast.getToasts = (): ReadonlyArray<ToastSnapshot> => [...activeToasts.values()];\r\ntoast.getHistory = (): ReadonlyArray<ToastSnapshot> => [...toastHistory];\r\n\r\nexport type {Toast} from \"@base-ui/react/toast\";\r\nexport {toast, Toaster};\r\n"],"names":["DEFAULT_TOAST_DURATION","DEFAULT_TOAST_LIMIT","DEFAULT_TOAST_CLOSE_LABEL","DEFAULT_VIEWPORT_ARIA_LABEL","positionStyles","styles","variantStyles","toastManager","Toast","toastHistory","activeToasts","Map","toastRecords","toasterRegistrations","toastSequence","createToastIdentifier","identifier","undefined","String","globalThis","isRenderableFactory","value","resolveRenderable","resolvedValue","getSnapshot","id","variant","title","description","registerToast","snapshot","registerToastRecord","record","replaceToastHistorySnapshot","index","replaceToastRecord","unregisterToast","toastId","getActiveToasterRegistration","registrations","mergeToastOptions","options","isToastVariant","createToastMetadata","closeButton","customContent","createToastRecord","message","activeRegistration","createToastLifecycleHandlers","createToastAddPayload","lifecycleHandlers","buildToastOptions","mergedOptions","showToast","payload","dismissToast","normalizedToastId","updateToast","existingRecord","nextMessage","nextDescription","metadata","resolvePromiseState","state","Promise","isPromiseResolvedOptions","isToastAction","React","getVariantIcon","icons","BellRing","AlertCircle","Info","LoaderCircle","cn","CheckCircle2","TriangleAlert","ToastActions","action","cancel","renderAction","className","event","ToastViewportContent","toasts","toastItem","X","Toaster","containerAriaLabel","duration","position","style","toastOptions","visibleToasts","forwardedRef","toasterId","toast","renderer","mergePromiseToastOptions","baseOptions","override","getPromiseBaseOptions","showResolvedPromiseToast","loadingToastId","resolvedState","overrideOptions","promiseValue","pendingPromise","loadingState","loadingOptions","loadingMessage","result","successState","error","errorState","handleFinally"],"mappings":"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"}
@@ -47,10 +47,7 @@ export interface ToggleGroupItemProps extends Omit<ToggleProps, "pressed" | "def
47
47
  *
48
48
  * @see {@link https://base-ui.com/react/components/toggle-group | Base UI Toggle Group Docs}
49
49
  */
50
- declare function ToggleGroup(props: Readonly<ToggleGroup.Props>): React.ReactElement;
51
- declare namespace ToggleGroup {
52
- var displayName: string;
53
- }
50
+ declare const ToggleGroup: React.ForwardRefExoticComponent<Omit<ToggleGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
54
51
  /**
55
52
  * Renders an individual toggle item within a toggle group.
56
53
  *
@@ -68,10 +65,7 @@ declare namespace ToggleGroup {
68
65
  *
69
66
  * @see {@link https://base-ui.com/react/components/toggle-group | Base UI Toggle Group Docs}
70
67
  */
71
- declare function ToggleGroupItem(props: Readonly<ToggleGroupItem.Props>): React.ReactElement;
72
- declare namespace ToggleGroupItem {
73
- var displayName: string;
74
- }
68
+ declare const ToggleGroupItem: React.ForwardRefExoticComponent<Omit<ToggleGroupItemProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
75
69
  declare namespace ToggleGroup {
76
70
  type Props = ToggleGroupProps;
77
71
  type State = BaseToggleGroup.State;
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toggle-group.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,IAAI,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAE3E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAC,MAAM,EAAkB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAC,MAAM,UAAU,CAAC;AAUvG,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,OAAO,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9G;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;CAAG;AAEpH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,iBAAS,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAc3E;kBAdQ,WAAW;;;AAgBpB;;;;;;;;;;;;;;;;GAgBG;AACH,iBAAS,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAkBnF;kBAlBQ,eAAe;;;AAqBxB,kBAAU,WAAW,CAAC;IACpB,KAAY,KAAK,GAAG,gBAAgB,CAAC;IACrC,KAAY,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;CAC3C;AAGD,kBAAU,eAAe,CAAC;IACxB,KAAY,KAAK,GAAG,oBAAoB,CAAC;IACzC,KAAY,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;CAClC;AAKD,OAAO,EAAC,WAAW,EAAE,eAAe,EAAC,CAAC"}
1
+ {"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toggle-group.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,IAAI,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAE3E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAC,MAAM,EAAkB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAC,MAAM,UAAU,CAAC;AAUvG,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,OAAO,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9G;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;CAAG;AAEpH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,WAAW,sGAef,CAAC;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,QAAA,MAAM,eAAe,6GAmBnB,CAAC;AAGH,kBAAU,WAAW,CAAC;IACpB,KAAY,KAAK,GAAG,gBAAgB,CAAC;IACrC,KAAY,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;CAC3C;AAGD,kBAAU,eAAe,CAAC;IACxB,KAAY,KAAK,GAAG,oBAAoB,CAAC;IACzC,KAAY,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;CAClC;AAKD,OAAO,EAAC,WAAW,EAAE,eAAe,EAAC,CAAC"}
@@ -1,17 +1,18 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { mergeProps } from "@base-ui/react/merge-props";
4
- import { ToggleGroup } from "@base-ui/react/toggle-group";
4
+ import { ToggleGroup as toggle_group_ToggleGroup } from "@base-ui/react/toggle-group";
5
5
  import { useRender } from "@base-ui/react/use-render";
6
- import { createContext, useContext } from "react";
6
+ import { createContext, forwardRef, useContext } from "react";
7
7
  import { cn } from "../../lib/utilities.js";
8
8
  import { Toggle, toggleVariants } from "./toggle.js";
9
9
  import toggle_group_module from "./toggle-group.module.js";
10
10
  const ToggleGroupContext = /*#__PURE__*/ createContext({});
11
- function toggle_group_ToggleGroup(props) {
11
+ const ui_toggle_group_ToggleGroup = /*#__PURE__*/ forwardRef(function(props, forwardedRef) {
12
12
  const { className, children, render, size, variant, ...otherProps } = props;
13
- return /*#__PURE__*/ jsx(ToggleGroup, {
13
+ return /*#__PURE__*/ jsx(toggle_group_ToggleGroup, {
14
14
  ...otherProps,
15
+ ref: forwardedRef,
15
16
  render: useRender({
16
17
  defaultTagName: "div",
17
18
  render: render,
@@ -27,11 +28,12 @@ function toggle_group_ToggleGroup(props) {
27
28
  children: children
28
29
  })
29
30
  });
30
- }
31
- function ToggleGroupItem(props) {
31
+ });
32
+ const toggle_group_ToggleGroupItem = /*#__PURE__*/ forwardRef(function(props, forwardedRef) {
32
33
  const { className, size, variant, ...otherProps } = props;
33
34
  const context = useContext(ToggleGroupContext);
34
35
  return /*#__PURE__*/ jsx(Toggle, {
36
+ ref: forwardedRef,
35
37
  className: cn(toggleVariants({
36
38
  variant: variant ?? context.variant,
37
39
  size: size ?? context.size
@@ -40,9 +42,9 @@ function ToggleGroupItem(props) {
40
42
  variant: variant ?? context.variant,
41
43
  ...otherProps
42
44
  });
43
- }
44
- toggle_group_ToggleGroup.displayName = "ToggleGroup";
45
- ToggleGroupItem.displayName = "ToggleGroupItem";
46
- export { ToggleGroupItem, toggle_group_ToggleGroup as ToggleGroup };
45
+ });
46
+ ui_toggle_group_ToggleGroup.displayName = "ToggleGroup";
47
+ toggle_group_ToggleGroupItem.displayName = "ToggleGroupItem";
48
+ export { toggle_group_ToggleGroupItem as ToggleGroupItem, ui_toggle_group_ToggleGroup as ToggleGroup };
47
49
 
48
50
  //# sourceMappingURL=toggle-group.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/toggle-group.js","sources":["../../../src/components/ui/toggle-group.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {mergeProps} from \"@base-ui/react/merge-props\";\r\nimport {ToggleGroup as BaseToggleGroup} from \"@base-ui/react/toggle-group\";\r\nimport {useRender} from \"@base-ui/react/use-render\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport {Toggle, toggleVariants, type ToggleProps, type ToggleSize, type ToggleVariant} from \"./toggle\";\r\nimport styles from \"./toggle-group.module.css\";\r\n\r\ninterface ToggleGroupContextValue {\r\n size?: ToggleSize;\r\n variant?: ToggleVariant;\r\n}\r\n\r\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({});\r\n\r\nexport interface ToggleGroupProps extends Omit<React.ComponentPropsWithRef<typeof BaseToggleGroup>, \"className\"> {\r\n /**\r\n * Additional CSS classes merged with the toggle-group root styles.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Shared visual variant inherited by descendant toggle items when not explicitly overridden.\r\n * @default undefined\r\n */\r\n variant?: ToggleVariant;\r\n /**\r\n * Shared size inherited by descendant toggle items when not explicitly overridden.\r\n * @default undefined\r\n */\r\n size?: ToggleSize;\r\n}\r\n\r\n/**\r\n * Props for an individual toggle-group item.\r\n *\r\n * @remarks\r\n * Inherits the shared toggle API except for pressed-state props, which are controlled\r\n * by the surrounding {@link ToggleGroup}.\r\n */\r\nexport interface ToggleGroupItemProps extends Omit<ToggleProps, \"pressed\" | \"defaultPressed\" | \"onPressedChange\"> {}\r\n\r\n/**\r\n * Groups related toggles into a single multi-select or single-select control.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toggle Group primitives\r\n * - Provides shared `size` and `variant` values to descendant items\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToggleGroup\r\n * defaultValue={[\"bold\"]}\r\n * toggleMultiple>\r\n * <ToggleGroupItem value='bold'>Bold</ToggleGroupItem>\r\n * <ToggleGroupItem value='italic'>Italic</ToggleGroupItem>\r\n * </ToggleGroup>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toggle-group | Base UI Toggle Group Docs}\r\n */\r\nfunction ToggleGroup(props: Readonly<ToggleGroup.Props>): React.ReactElement {\r\n const {className, children, render, size, variant, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToggleGroup\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.root, className)}, {}),\r\n })}>\r\n <ToggleGroupContext.Provider value={{variant, size}}>{children}</ToggleGroupContext.Provider>\r\n </BaseToggleGroup>\r\n );\r\n}\r\n\r\n/**\r\n * Renders an individual toggle item within a toggle group.\r\n *\r\n * @remarks\r\n * - Renders a styled toggle button\r\n * - Built on the shared `Toggle` component and Base UI Toggle Group state\r\n * - Inherits `size` and `variant` from the nearest {@link ToggleGroup} when omitted\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToggleGroup defaultValue={[\"left\"]}>\r\n * <ToggleGroupItem value='left'>Left</ToggleGroupItem>\r\n * </ToggleGroup>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toggle-group | Base UI Toggle Group Docs}\r\n */\r\nfunction ToggleGroupItem(props: Readonly<ToggleGroupItem.Props>): React.ReactElement {\r\n const {className, size, variant, ...otherProps} = props;\r\n const context = React.useContext(ToggleGroupContext);\r\n\r\n return (\r\n <Toggle\r\n className={cn(\r\n toggleVariants({\r\n variant: variant ?? context.variant,\r\n size: size ?? context.size,\r\n }),\r\n className,\r\n )}\r\n size={size ?? context.size}\r\n variant={variant ?? context.variant}\r\n {...otherProps}\r\n />\r\n );\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToggleGroup {\r\n export type Props = ToggleGroupProps;\r\n export type State = BaseToggleGroup.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToggleGroupItem {\r\n export type Props = ToggleGroupItemProps;\r\n export type State = Toggle.State;\r\n}\r\n\r\nToggleGroup.displayName = \"ToggleGroup\";\r\nToggleGroupItem.displayName = \"ToggleGroupItem\";\r\n\r\nexport {ToggleGroup, ToggleGroupItem};\r\n"],"names":["ToggleGroupContext","React","ToggleGroup","props","className","children","render","size","variant","otherProps","BaseToggleGroup","useRender","mergeProps","cn","styles","ToggleGroupItem","context","Toggle","toggleVariants"],"mappings":";;;;;;;;;AAgBA,MAAMA,qBAAqB,WAAHA,GAAGC,cAA6C,CAAC;AAiDzE,SAASC,yBAAYC,KAAkC;IACrD,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,OAAO,EAAE,GAAGC,YAAW,GAAGN;IAEpE,OAAO,WAAP,GACE,IAACO,aAAeA;QACb,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQL;YACR,OAAOM,WAAW;gBAAC,WAAWC,GAAGC,oBAAAA,IAAW,EAAEV;YAAU,GAAG,CAAC;QAC9D;kBACA,kBAACJ,mBAAmB,QAAQ;YAAC,OAAO;gBAACQ;gBAASD;YAAI;sBAAIF;;;AAG5D;AAmBA,SAASU,gBAAgBZ,KAAsC;IAC7D,MAAM,EAACC,SAAS,EAAEG,IAAI,EAAEC,OAAO,EAAE,GAAGC,YAAW,GAAGN;IAClD,MAAMa,UAAUf,WAAiBD;IAEjC,OAAO,WAAP,GACE,IAACiB,QAAMA;QACL,WAAWJ,GACTK,eAAe;YACb,SAASV,WAAWQ,QAAQ,OAAO;YACnC,MAAMT,QAAQS,QAAQ,IAAI;QAC5B,IACAZ;QAEF,MAAMG,QAAQS,QAAQ,IAAI;QAC1B,SAASR,WAAWQ,QAAQ,OAAO;QAClC,GAAGP,UAAU;;AAGpB;AAcAP,yBAAY,WAAW,GAAG;AAC1Ba,gBAAgB,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/toggle-group.js","sources":["../../../src/components/ui/toggle-group.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {mergeProps} from \"@base-ui/react/merge-props\";\r\nimport {ToggleGroup as BaseToggleGroup} from \"@base-ui/react/toggle-group\";\r\nimport {useRender} from \"@base-ui/react/use-render\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport {Toggle, toggleVariants, type ToggleProps, type ToggleSize, type ToggleVariant} from \"./toggle\";\r\nimport styles from \"./toggle-group.module.css\";\r\n\r\ninterface ToggleGroupContextValue {\r\n size?: ToggleSize;\r\n variant?: ToggleVariant;\r\n}\r\n\r\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({});\r\n\r\nexport interface ToggleGroupProps extends Omit<React.ComponentPropsWithRef<typeof BaseToggleGroup>, \"className\"> {\r\n /**\r\n * Additional CSS classes merged with the toggle-group root styles.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Shared visual variant inherited by descendant toggle items when not explicitly overridden.\r\n * @default undefined\r\n */\r\n variant?: ToggleVariant;\r\n /**\r\n * Shared size inherited by descendant toggle items when not explicitly overridden.\r\n * @default undefined\r\n */\r\n size?: ToggleSize;\r\n}\r\n\r\n/**\r\n * Props for an individual toggle-group item.\r\n *\r\n * @remarks\r\n * Inherits the shared toggle API except for pressed-state props, which are controlled\r\n * by the surrounding {@link ToggleGroup}.\r\n */\r\nexport interface ToggleGroupItemProps extends Omit<ToggleProps, \"pressed\" | \"defaultPressed\" | \"onPressedChange\"> {}\r\n\r\n/**\r\n * Groups related toggles into a single multi-select or single-select control.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toggle Group primitives\r\n * - Provides shared `size` and `variant` values to descendant items\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToggleGroup\r\n * defaultValue={[\"bold\"]}\r\n * toggleMultiple>\r\n * <ToggleGroupItem value='bold'>Bold</ToggleGroupItem>\r\n * <ToggleGroupItem value='italic'>Italic</ToggleGroupItem>\r\n * </ToggleGroup>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toggle-group | Base UI Toggle Group Docs}\r\n */\r\nconst ToggleGroup = React.forwardRef<HTMLDivElement, ToggleGroup.Props>(function ToggleGroup(props, forwardedRef) {\r\n const {className, children, render, size, variant, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToggleGroup\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.root, className)}, {}),\r\n })}>\r\n <ToggleGroupContext.Provider value={{variant, size}}>{children}</ToggleGroupContext.Provider>\r\n </BaseToggleGroup>\r\n );\r\n});\r\n\r\n/**\r\n * Renders an individual toggle item within a toggle group.\r\n *\r\n * @remarks\r\n * - Renders a styled toggle button\r\n * - Built on the shared `Toggle` component and Base UI Toggle Group state\r\n * - Inherits `size` and `variant` from the nearest {@link ToggleGroup} when omitted\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToggleGroup defaultValue={[\"left\"]}>\r\n * <ToggleGroupItem value='left'>Left</ToggleGroupItem>\r\n * </ToggleGroup>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toggle-group | Base UI Toggle Group Docs}\r\n */\r\nconst ToggleGroupItem = React.forwardRef<HTMLButtonElement, ToggleGroupItem.Props>(function ToggleGroupItem(props, forwardedRef) {\r\n const {className, size, variant, ...otherProps} = props;\r\n const context = React.useContext(ToggleGroupContext);\r\n\r\n return (\r\n <Toggle\r\n ref={forwardedRef}\r\n className={cn(\r\n toggleVariants({\r\n variant: variant ?? context.variant,\r\n size: size ?? context.size,\r\n }),\r\n className,\r\n )}\r\n size={size ?? context.size}\r\n variant={variant ?? context.variant}\r\n {...otherProps}\r\n />\r\n );\r\n});\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToggleGroup {\r\n export type Props = ToggleGroupProps;\r\n export type State = BaseToggleGroup.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToggleGroupItem {\r\n export type Props = ToggleGroupItemProps;\r\n export type State = Toggle.State;\r\n}\r\n\r\nToggleGroup.displayName = \"ToggleGroup\";\r\nToggleGroupItem.displayName = \"ToggleGroupItem\";\r\n\r\nexport {ToggleGroup, ToggleGroupItem};\r\n"],"names":["ToggleGroupContext","React","ToggleGroup","props","forwardedRef","className","children","render","size","variant","otherProps","BaseToggleGroup","useRender","mergeProps","cn","styles","ToggleGroupItem","context","Toggle","toggleVariants"],"mappings":";;;;;;;;;AAgBA,MAAMA,qBAAqB,WAAHA,GAAGC,cAA6C,CAAC;AAiDzE,MAAMC,8BAAc,WAAHA,GAAGD,WAAoD,SAAqBE,KAAK,EAAEC,YAAY;IAC9G,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,OAAO,EAAE,GAAGC,YAAW,GAAGP;IAEpE,OAAO,WAAP,GACE,IAACQ,0BAAeA;QACb,GAAGD,UAAU;QACd,KAAKN;QACL,QAAQQ,UAAU;YAChB,gBAAgB;YAChB,QAAQL;YACR,OAAOM,WAAW;gBAAC,WAAWC,GAAGC,oBAAAA,IAAW,EAAEV;YAAU,GAAG,CAAC;QAC9D;kBACA,kBAACL,mBAAmB,QAAQ;YAAC,OAAO;gBAACS;gBAASD;YAAI;sBAAIF;;;AAG5D;AAmBA,MAAMU,+BAAkB,WAAHA,GAAGf,WAA2D,SAAyBE,KAAK,EAAEC,YAAY;IAC7H,MAAM,EAACC,SAAS,EAAEG,IAAI,EAAEC,OAAO,EAAE,GAAGC,YAAW,GAAGP;IAClD,MAAMc,UAAUhB,WAAiBD;IAEjC,OAAO,WAAP,GACE,IAACkB,QAAMA;QACL,KAAKd;QACL,WAAWU,GACTK,eAAe;YACb,SAASV,WAAWQ,QAAQ,OAAO;YACnC,MAAMT,QAAQS,QAAQ,IAAI;QAC5B,IACAZ;QAEF,MAAMG,QAAQS,QAAQ,IAAI;QAC1B,SAASR,WAAWQ,QAAQ,OAAO;QAClC,GAAGP,UAAU;;AAGpB;AAcAR,4BAAY,WAAW,GAAG;AAC1Bc,6BAAgB,WAAW,GAAG"}
@@ -1,10 +1,5 @@
1
1
  import { Toolbar as BaseToolbar } from "@base-ui/react/toolbar";
2
2
  import * as React from "react";
3
- type ToolbarProps = React.ComponentPropsWithRef<typeof BaseToolbar.Root>;
4
- type ToolbarButtonProps = React.ComponentPropsWithRef<typeof BaseToolbar.Button>;
5
- type ToolbarGroupProps = React.ComponentPropsWithRef<typeof BaseToolbar.Group>;
6
- type ToolbarSeparatorProps = React.ComponentPropsWithRef<typeof BaseToolbar.Separator>;
7
- type ToolbarLinkProps = React.ComponentPropsWithRef<typeof BaseToolbar.Link>;
8
3
  /**
9
4
  * Arranges related actions into a keyboard-accessible toolbar.
10
5
  *
@@ -23,10 +18,7 @@ type ToolbarLinkProps = React.ComponentPropsWithRef<typeof BaseToolbar.Link>;
23
18
  *
24
19
  * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}
25
20
  */
26
- declare function Toolbar(props: Readonly<Toolbar.Props>): React.ReactElement;
27
- declare namespace Toolbar {
28
- var displayName: string;
29
- }
21
+ declare const Toolbar: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react").ToolbarRootProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
30
22
  /**
31
23
  * Renders an interactive button within a toolbar.
32
24
  *
@@ -42,10 +34,7 @@ declare namespace Toolbar {
42
34
  *
43
35
  * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}
44
36
  */
45
- declare function ToolbarButton(props: Readonly<ToolbarButton.Props>): React.ReactElement;
46
- declare namespace ToolbarButton {
47
- var displayName: string;
48
- }
37
+ declare const ToolbarButton: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react").ToolbarButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
49
38
  /**
50
39
  * Groups related toolbar controls into a single visual cluster.
51
40
  *
@@ -63,10 +52,7 @@ declare namespace ToolbarButton {
63
52
  *
64
53
  * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}
65
54
  */
66
- declare function ToolbarGroup(props: Readonly<ToolbarGroup.Props>): React.ReactElement;
67
- declare namespace ToolbarGroup {
68
- var displayName: string;
69
- }
55
+ declare const ToolbarGroup: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react").ToolbarGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
70
56
  /**
71
57
  * Renders a visual separator between toolbar items or groups.
72
58
  *
@@ -81,10 +67,7 @@ declare namespace ToolbarGroup {
81
67
  *
82
68
  * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}
83
69
  */
84
- declare function ToolbarSeparator(props: Readonly<ToolbarSeparator.Props>): React.ReactElement;
85
- declare namespace ToolbarSeparator {
86
- var displayName: string;
87
- }
70
+ declare const ToolbarSeparator: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react").ToolbarSeparatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
88
71
  /**
89
72
  * Renders a link that visually matches toolbar buttons.
90
73
  *
@@ -99,28 +82,25 @@ declare namespace ToolbarSeparator {
99
82
  *
100
83
  * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}
101
84
  */
102
- declare function ToolbarLink(props: Readonly<ToolbarLink.Props>): React.ReactElement;
103
- declare namespace ToolbarLink {
104
- var displayName: string;
105
- }
85
+ declare const ToolbarLink: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react").ToolbarLinkProps, "ref"> & React.RefAttributes<HTMLAnchorElement>, "ref"> & React.RefAttributes<HTMLAnchorElement>>;
106
86
  declare namespace Toolbar {
107
- type Props = ToolbarProps;
87
+ type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Root>;
108
88
  type State = BaseToolbar.Root.State;
109
89
  }
110
90
  declare namespace ToolbarButton {
111
- type Props = ToolbarButtonProps;
91
+ type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Button>;
112
92
  type State = BaseToolbar.Button.State;
113
93
  }
114
94
  declare namespace ToolbarGroup {
115
- type Props = ToolbarGroupProps;
95
+ type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Group>;
116
96
  type State = BaseToolbar.Group.State;
117
97
  }
118
98
  declare namespace ToolbarSeparator {
119
- type Props = ToolbarSeparatorProps;
99
+ type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Separator>;
120
100
  type State = BaseToolbar.Separator.State;
121
101
  }
122
102
  declare namespace ToolbarLink {
123
- type Props = ToolbarLinkProps;
103
+ type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Link>;
124
104
  type State = BaseToolbar.Link.State;
125
105
  }
126
106
  export { Toolbar, ToolbarButton, ToolbarGroup, ToolbarLink, ToolbarSeparator };
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toolbar.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,KAAK,YAAY,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AACzE,KAAK,kBAAkB,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AACjF,KAAK,iBAAiB,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC/E,KAAK,qBAAqB,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;AACvF,KAAK,gBAAgB,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAE7E;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAcnE;kBAdQ,OAAO;;;AAgBhB;;;;;;;;;;;;;;GAcG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAc/E;kBAdQ,aAAa;;;AAgBtB;;;;;;;;;;;;;;;;GAgBG;AACH,iBAAS,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAc7E;kBAdQ,YAAY;;;AAgBrB;;;;;;;;;;;;;GAaG;AACH,iBAAS,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAarF;kBAbQ,gBAAgB;;;AAezB;;;;;;;;;;;;;GAaG;AACH,iBAAS,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAc3E;kBAdQ,WAAW;;;AAiBpB,kBAAU,OAAO,CAAC;IAChB,KAAY,KAAK,GAAG,YAAY,CAAC;IACjC,KAAY,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;CAC5C;AAGD,kBAAU,aAAa,CAAC;IACtB,KAAY,KAAK,GAAG,kBAAkB,CAAC;IACvC,KAAY,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;CAC9C;AAGD,kBAAU,YAAY,CAAC;IACrB,KAAY,KAAK,GAAG,iBAAiB,CAAC;IACtC,KAAY,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;CAC7C;AAGD,kBAAU,gBAAgB,CAAC;IACzB,KAAY,KAAK,GAAG,qBAAqB,CAAC;IAC1C,KAAY,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;CACjD;AAGD,kBAAU,WAAW,CAAC;IACpB,KAAY,KAAK,GAAG,gBAAgB,CAAC;IACrC,KAAY,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;CAC5C;AAQD,OAAO,EAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAC,CAAC"}
1
+ {"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toolbar.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,OAAO,kLAeX,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,aAAa,0LAejB,CAAC;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,QAAA,MAAM,YAAY,mLAehB,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,gBAAgB,uLAcpB,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,WAAW,wLAef,CAAC;AAGH,kBAAU,OAAO,CAAC;IAChB,KAAY,KAAK,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IACzE,KAAY,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;CAC5C;AAGD,kBAAU,aAAa,CAAC;IACtB,KAAY,KAAK,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3E,KAAY,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;CAC9C;AAGD,kBAAU,YAAY,CAAC;IACrB,KAAY,KAAK,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1E,KAAY,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;CAC7C;AAGD,kBAAU,gBAAgB,CAAC;IACzB,KAAY,KAAK,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;IAC9E,KAAY,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;CACjD;AAGD,kBAAU,WAAW,CAAC;IACpB,KAAY,KAAK,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IACzE,KAAY,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;CAC5C;AAQD,OAAO,EAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAC,CAAC"}
@@ -1,15 +1,16 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { mergeProps } from "@base-ui/react/merge-props";
4
- import { Toolbar } from "@base-ui/react/toolbar";
4
+ import { Toolbar as toolbar_Toolbar } from "@base-ui/react/toolbar";
5
5
  import { useRender } from "@base-ui/react/use-render";
6
- import "react";
6
+ import { forwardRef } from "react";
7
7
  import { cn } from "../../lib/utilities.js";
8
8
  import toolbar_module from "./toolbar.module.js";
9
- function toolbar_Toolbar(props) {
9
+ const ui_toolbar_Toolbar = /*#__PURE__*/ forwardRef(function(props, forwardedRef) {
10
10
  const { className, children, render, ...otherProps } = props;
11
- return /*#__PURE__*/ jsx(Toolbar.Root, {
11
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Root, {
12
12
  ...otherProps,
13
+ ref: forwardedRef,
13
14
  render: useRender({
14
15
  defaultTagName: "div",
15
16
  render: render,
@@ -19,11 +20,12 @@ function toolbar_Toolbar(props) {
19
20
  }),
20
21
  children: children
21
22
  });
22
- }
23
- function ToolbarButton(props) {
23
+ });
24
+ const toolbar_ToolbarButton = /*#__PURE__*/ forwardRef(function(props, forwardedRef) {
24
25
  const { className, children, render, ...otherProps } = props;
25
- return /*#__PURE__*/ jsx(Toolbar.Button, {
26
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Button, {
26
27
  ...otherProps,
28
+ ref: forwardedRef,
27
29
  render: useRender({
28
30
  defaultTagName: "button",
29
31
  render: render,
@@ -33,11 +35,12 @@ function ToolbarButton(props) {
33
35
  }),
34
36
  children: children
35
37
  });
36
- }
37
- function ToolbarGroup(props) {
38
+ });
39
+ const toolbar_ToolbarGroup = /*#__PURE__*/ forwardRef(function(props, forwardedRef) {
38
40
  const { className, children, render, ...otherProps } = props;
39
- return /*#__PURE__*/ jsx(Toolbar.Group, {
41
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Group, {
40
42
  ...otherProps,
43
+ ref: forwardedRef,
41
44
  render: useRender({
42
45
  defaultTagName: "div",
43
46
  render: render,
@@ -47,11 +50,12 @@ function ToolbarGroup(props) {
47
50
  }),
48
51
  children: children
49
52
  });
50
- }
51
- function ToolbarSeparator(props) {
53
+ });
54
+ const toolbar_ToolbarSeparator = /*#__PURE__*/ forwardRef(function(props, forwardedRef) {
52
55
  const { className, render, ...otherProps } = props;
53
- return /*#__PURE__*/ jsx(Toolbar.Separator, {
56
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Separator, {
54
57
  ...otherProps,
58
+ ref: forwardedRef,
55
59
  render: useRender({
56
60
  defaultTagName: "div",
57
61
  render: render,
@@ -60,11 +64,12 @@ function ToolbarSeparator(props) {
60
64
  }, {})
61
65
  })
62
66
  });
63
- }
64
- function ToolbarLink(props) {
67
+ });
68
+ const toolbar_ToolbarLink = /*#__PURE__*/ forwardRef(function(props, forwardedRef) {
65
69
  const { className, children, render, ...otherProps } = props;
66
- return /*#__PURE__*/ jsx(Toolbar.Link, {
70
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Link, {
67
71
  ...otherProps,
72
+ ref: forwardedRef,
68
73
  render: useRender({
69
74
  defaultTagName: "a",
70
75
  render: render,
@@ -74,12 +79,12 @@ function ToolbarLink(props) {
74
79
  }),
75
80
  children: children
76
81
  });
77
- }
78
- toolbar_Toolbar.displayName = "Toolbar";
79
- ToolbarButton.displayName = "ToolbarButton";
80
- ToolbarGroup.displayName = "ToolbarGroup";
81
- ToolbarSeparator.displayName = "ToolbarSeparator";
82
- ToolbarLink.displayName = "ToolbarLink";
83
- export { ToolbarButton, ToolbarGroup, ToolbarLink, ToolbarSeparator, toolbar_Toolbar as Toolbar };
82
+ });
83
+ ui_toolbar_Toolbar.displayName = "Toolbar";
84
+ toolbar_ToolbarButton.displayName = "ToolbarButton";
85
+ toolbar_ToolbarGroup.displayName = "ToolbarGroup";
86
+ toolbar_ToolbarSeparator.displayName = "ToolbarSeparator";
87
+ toolbar_ToolbarLink.displayName = "ToolbarLink";
88
+ export { toolbar_ToolbarButton as ToolbarButton, toolbar_ToolbarGroup as ToolbarGroup, toolbar_ToolbarLink as ToolbarLink, toolbar_ToolbarSeparator as ToolbarSeparator, ui_toolbar_Toolbar as Toolbar };
84
89
 
85
90
  //# sourceMappingURL=toolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/toolbar.js","sources":["../../../src/components/ui/toolbar.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {mergeProps} from \"@base-ui/react/merge-props\";\r\nimport {Toolbar as BaseToolbar} from \"@base-ui/react/toolbar\";\r\nimport {useRender} from \"@base-ui/react/use-render\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./toolbar.module.css\";\r\n\r\ntype ToolbarProps = React.ComponentPropsWithRef<typeof BaseToolbar.Root>;\r\ntype ToolbarButtonProps = React.ComponentPropsWithRef<typeof BaseToolbar.Button>;\r\ntype ToolbarGroupProps = React.ComponentPropsWithRef<typeof BaseToolbar.Group>;\r\ntype ToolbarSeparatorProps = React.ComponentPropsWithRef<typeof BaseToolbar.Separator>;\r\ntype ToolbarLinkProps = React.ComponentPropsWithRef<typeof BaseToolbar.Link>;\r\n\r\n/**\r\n * Arranges related actions into a keyboard-accessible toolbar.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar primitives\r\n * - Supports roving focus and compound toolbar item composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <Toolbar aria-label='Text formatting'>\r\n * <ToolbarButton>Bold</ToolbarButton>\r\n * <ToolbarButton>Italic</ToolbarButton>\r\n * </Toolbar>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction Toolbar(props: Readonly<Toolbar.Props>): React.ReactElement {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Root\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.root, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Root>\r\n );\r\n}\r\n\r\n/**\r\n * Renders an interactive button within a toolbar.\r\n *\r\n * @remarks\r\n * - Renders a `<button>` element by default\r\n * - Built on Base UI Toolbar button behavior\r\n * - Applies shared toolbar item spacing and focus styling\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarButton aria-label='Bold'>B</ToolbarButton>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction ToolbarButton(props: Readonly<ToolbarButton.Props>): React.ReactElement {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Button\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"button\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.item, styles.button, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Button>\r\n );\r\n}\r\n\r\n/**\r\n * Groups related toolbar controls into a single visual cluster.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar grouping primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarGroup>\r\n * <ToolbarButton>Left</ToolbarButton>\r\n * <ToolbarButton>Center</ToolbarButton>\r\n * </ToolbarGroup>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction ToolbarGroup(props: Readonly<ToolbarGroup.Props>): React.ReactElement {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Group\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.group, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Group>\r\n );\r\n}\r\n\r\n/**\r\n * Renders a visual separator between toolbar items or groups.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar separator primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarSeparator />\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction ToolbarSeparator(props: Readonly<ToolbarSeparator.Props>): React.ReactElement {\r\n const {className, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Separator\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.separator, className)}, {}),\r\n })}\r\n />\r\n );\r\n}\r\n\r\n/**\r\n * Renders a link that visually matches toolbar buttons.\r\n *\r\n * @remarks\r\n * - Renders an `<a>` element by default\r\n * - Built on Base UI Toolbar link primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarLink href='/docs'>Docs</ToolbarLink>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction ToolbarLink(props: Readonly<ToolbarLink.Props>): React.ReactElement {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Link\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"a\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.item, styles.link, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Link>\r\n );\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace Toolbar {\r\n export type Props = ToolbarProps;\r\n export type State = BaseToolbar.Root.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarButton {\r\n export type Props = ToolbarButtonProps;\r\n export type State = BaseToolbar.Button.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarGroup {\r\n export type Props = ToolbarGroupProps;\r\n export type State = BaseToolbar.Group.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarSeparator {\r\n export type Props = ToolbarSeparatorProps;\r\n export type State = BaseToolbar.Separator.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarLink {\r\n export type Props = ToolbarLinkProps;\r\n export type State = BaseToolbar.Link.State;\r\n}\r\n\r\nToolbar.displayName = \"Toolbar\";\r\nToolbarButton.displayName = \"ToolbarButton\";\r\nToolbarGroup.displayName = \"ToolbarGroup\";\r\nToolbarSeparator.displayName = \"ToolbarSeparator\";\r\nToolbarLink.displayName = \"ToolbarLink\";\r\n\r\nexport {Toolbar, ToolbarButton, ToolbarGroup, ToolbarLink, ToolbarSeparator};\r\n"],"names":["Toolbar","props","className","children","render","otherProps","BaseToolbar","useRender","mergeProps","cn","styles","ToolbarButton","ToolbarGroup","ToolbarSeparator","ToolbarLink"],"mappings":";;;;;;;;AAkCA,SAASA,gBAAQC,KAA8B;IAC7C,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAErD,OAAO,WAAP,GACE,IAACK,QAAAA,IAAgB;QACd,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAER;YAAU,GAAG,CAAC;QAC9D;kBACCC;;AAGP;AAiBA,SAASQ,cAAcV,KAAoC;IACzD,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAErD,OAAO,WAAP,GACE,IAACK,QAAAA,MAAkB;QAChB,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAEA,eAAAA,MAAa,EAAER;YAAU,GAAG,CAAC;QAC7E;kBACCC;;AAGP;AAmBA,SAASS,aAAaX,KAAmC;IACvD,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAErD,OAAO,WAAP,GACE,IAACK,QAAAA,KAAiB;QACf,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,KAAY,EAAER;YAAU,GAAG,CAAC;QAC/D;kBACCC;;AAGP;AAgBA,SAASU,iBAAiBZ,KAAuC;IAC/D,MAAM,EAACC,SAAS,EAAEE,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAE3C,OAAO,WAAP,GACE,IAACK,QAAAA,SAAqB;QACnB,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,SAAgB,EAAER;YAAU,GAAG,CAAC;QACnE;;AAGN;AAgBA,SAASY,YAAYb,KAAkC;IACrD,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAErD,OAAO,WAAP,GACE,IAACK,QAAAA,IAAgB;QACd,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAEA,eAAAA,IAAW,EAAER;YAAU,GAAG,CAAC;QAC3E;kBACCC;;AAGP;AAgCAH,gBAAQ,WAAW,GAAG;AACtBW,cAAc,WAAW,GAAG;AAC5BC,aAAa,WAAW,GAAG;AAC3BC,iBAAiB,WAAW,GAAG;AAC/BC,YAAY,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/toolbar.js","sources":["../../../src/components/ui/toolbar.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {mergeProps} from \"@base-ui/react/merge-props\";\r\nimport {Toolbar as BaseToolbar} from \"@base-ui/react/toolbar\";\r\nimport {useRender} from \"@base-ui/react/use-render\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./toolbar.module.css\";\r\n\r\n/**\r\n * Arranges related actions into a keyboard-accessible toolbar.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar primitives\r\n * - Supports roving focus and compound toolbar item composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <Toolbar aria-label='Text formatting'>\r\n * <ToolbarButton>Bold</ToolbarButton>\r\n * <ToolbarButton>Italic</ToolbarButton>\r\n * </Toolbar>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst Toolbar = React.forwardRef<HTMLDivElement, Toolbar.Props>(function Toolbar(props, forwardedRef) {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Root\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.root, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Root>\r\n );\r\n});\r\n\r\n/**\r\n * Renders an interactive button within a toolbar.\r\n *\r\n * @remarks\r\n * - Renders a `<button>` element by default\r\n * - Built on Base UI Toolbar button behavior\r\n * - Applies shared toolbar item spacing and focus styling\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarButton aria-label='Bold'>B</ToolbarButton>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst ToolbarButton = React.forwardRef<HTMLButtonElement, ToolbarButton.Props>(function ToolbarButton(props, forwardedRef) {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Button\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"button\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.item, styles.button, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Button>\r\n );\r\n});\r\n\r\n/**\r\n * Groups related toolbar controls into a single visual cluster.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar grouping primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarGroup>\r\n * <ToolbarButton>Left</ToolbarButton>\r\n * <ToolbarButton>Center</ToolbarButton>\r\n * </ToolbarGroup>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst ToolbarGroup = React.forwardRef<HTMLDivElement, ToolbarGroup.Props>(function ToolbarGroup(props, forwardedRef) {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Group\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.group, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Group>\r\n );\r\n});\r\n\r\n/**\r\n * Renders a visual separator between toolbar items or groups.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar separator primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarSeparator />\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst ToolbarSeparator = React.forwardRef<HTMLDivElement, ToolbarSeparator.Props>(function ToolbarSeparator(props, forwardedRef) {\r\n const {className, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Separator\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.separator, className)}, {}),\r\n })}\r\n />\r\n );\r\n});\r\n\r\n/**\r\n * Renders a link that visually matches toolbar buttons.\r\n *\r\n * @remarks\r\n * - Renders an `<a>` element by default\r\n * - Built on Base UI Toolbar link primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarLink href='/docs'>Docs</ToolbarLink>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst ToolbarLink = React.forwardRef<HTMLAnchorElement, ToolbarLink.Props>(function ToolbarLink(props, forwardedRef) {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Link\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"a\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.item, styles.link, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Link>\r\n );\r\n});\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace Toolbar {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Root>;\r\n export type State = BaseToolbar.Root.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarButton {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Button>;\r\n export type State = BaseToolbar.Button.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarGroup {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Group>;\r\n export type State = BaseToolbar.Group.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarSeparator {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Separator>;\r\n export type State = BaseToolbar.Separator.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarLink {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Link>;\r\n export type State = BaseToolbar.Link.State;\r\n}\r\n\r\nToolbar.displayName = \"Toolbar\";\r\nToolbarButton.displayName = \"ToolbarButton\";\r\nToolbarGroup.displayName = \"ToolbarGroup\";\r\nToolbarSeparator.displayName = \"ToolbarSeparator\";\r\nToolbarLink.displayName = \"ToolbarLink\";\r\n\r\nexport {Toolbar, ToolbarButton, ToolbarGroup, ToolbarLink, ToolbarSeparator};\r\n"],"names":["Toolbar","React","props","forwardedRef","className","children","render","otherProps","BaseToolbar","useRender","mergeProps","cn","styles","ToolbarButton","ToolbarGroup","ToolbarSeparator","ToolbarLink"],"mappings":";;;;;;;;AA4BA,MAAMA,qBAAU,WAAHA,GAAGC,WAAgD,SAAiBC,KAAK,EAAEC,YAAY;IAClG,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAErD,OAAO,WAAP,GACE,IAACM,gBAAAA,IAAgB;QACd,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAER;YAAU,GAAG,CAAC;QAC9D;kBACCC;;AAGP;AAiBA,MAAMQ,wBAAgB,WAAHA,GAAGZ,WAAyD,SAAuBC,KAAK,EAAEC,YAAY;IACvH,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAErD,OAAO,WAAP,GACE,IAACM,gBAAAA,MAAkB;QAChB,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAEA,eAAAA,MAAa,EAAER;YAAU,GAAG,CAAC;QAC7E;kBACCC;;AAGP;AAmBA,MAAMS,uBAAe,WAAHA,GAAGb,WAAqD,SAAsBC,KAAK,EAAEC,YAAY;IACjH,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAErD,OAAO,WAAP,GACE,IAACM,gBAAAA,KAAiB;QACf,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,KAAY,EAAER;YAAU,GAAG,CAAC;QAC/D;kBACCC;;AAGP;AAgBA,MAAMU,2BAAmB,WAAHA,GAAGd,WAAyD,SAA0BC,KAAK,EAAEC,YAAY;IAC7H,MAAM,EAACC,SAAS,EAAEE,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAE3C,OAAO,WAAP,GACE,IAACM,gBAAAA,SAAqB;QACnB,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,SAAgB,EAAER;YAAU,GAAG,CAAC;QACnE;;AAGN;AAgBA,MAAMY,sBAAc,WAAHA,GAAGf,WAAuD,SAAqBC,KAAK,EAAEC,YAAY;IACjH,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAErD,OAAO,WAAP,GACE,IAACM,gBAAAA,IAAgB;QACd,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAEA,eAAAA,IAAW,EAAER;YAAU,GAAG,CAAC;QAC3E;kBACCC;;AAGP;AAgCAL,mBAAQ,WAAW,GAAG;AACtBa,sBAAc,WAAW,GAAG;AAC5BC,qBAAa,WAAW,GAAG;AAC3BC,yBAAiB,WAAW,GAAG;AAC/BC,oBAAY,WAAW,GAAG"}