@douglasneuroinformatics/libui 4.8.2 → 4.8.3

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.
@@ -89,41 +89,39 @@ var DialogBody = ({
89
89
  };
90
90
 
91
91
  // src/components/Dialog/DialogContent.tsx
92
- import { forwardRef as forwardRef4 } from "react";
92
+ import "react";
93
93
  import { Close, Content, Portal } from "@radix-ui/react-dialog";
94
94
  import { XIcon } from "lucide-react";
95
95
 
96
96
  // src/components/Dialog/DialogOverlay.tsx
97
- import { forwardRef as forwardRef3 } from "react";
97
+ import "react";
98
98
  import { Overlay } from "@radix-ui/react-dialog";
99
99
  import { jsx as jsx4 } from "react/jsx-runtime";
100
- var DialogOverlay = forwardRef3(function DialogOverlay2({ className, ...props }, ref) {
100
+ var DialogOverlay = ({ className, ...props }) => {
101
101
  return /* @__PURE__ */ jsx4(
102
102
  Overlay,
103
103
  {
104
104
  className: cn(
105
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80 duration-200",
105
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80 duration-300",
106
106
  className
107
107
  ),
108
- ref,
109
108
  ...props
110
109
  }
111
110
  );
112
- });
111
+ };
113
112
 
114
113
  // src/components/Dialog/DialogContent.tsx
115
114
  import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
116
- var DialogContent = forwardRef4(function DialogContent2({ children, className, ...props }, ref) {
115
+ var DialogContent = ({ children, className, ...props }) => {
117
116
  return /* @__PURE__ */ jsxs2(Portal, { children: [
118
117
  /* @__PURE__ */ jsx5(DialogOverlay, {}),
119
118
  /* @__PURE__ */ jsxs2(
120
119
  Content,
121
120
  {
122
121
  className: cn(
123
- "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg",
122
+ "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-md border p-6 shadow-lg duration-300 sm:max-w-lg sm:rounded-lg",
124
123
  className
125
124
  ),
126
- ref,
127
125
  ...props,
128
126
  children: [
129
127
  children,
@@ -132,15 +130,15 @@ var DialogContent = forwardRef4(function DialogContent2({ children, className, .
132
130
  }
133
131
  )
134
132
  ] });
135
- });
133
+ };
136
134
 
137
135
  // src/components/Dialog/DialogDescription.tsx
138
- import { forwardRef as forwardRef5 } from "react";
136
+ import "react";
139
137
  import { Description } from "@radix-ui/react-dialog";
140
138
  import { jsx as jsx6 } from "react/jsx-runtime";
141
- var DialogDescription = forwardRef5(function DialogDescription2({ className, ...props }, ref) {
142
- return /* @__PURE__ */ jsx6(Description, { className: cn("text-sm text-muted-foreground", className), ref, ...props });
143
- });
139
+ var DialogDescription = ({ className, ...props }) => {
140
+ return /* @__PURE__ */ jsx6(Description, { className: cn("text-muted-foreground text-sm", className), ...props });
141
+ };
144
142
 
145
143
  // src/components/Dialog/DialogFooter.tsx
146
144
  import "react";
@@ -153,14 +151,12 @@ import { jsx as jsx8 } from "react/jsx-runtime";
153
151
  var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx8("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props });
154
152
 
155
153
  // src/components/Dialog/DialogTitle.tsx
156
- import { forwardRef as forwardRef6 } from "react";
154
+ import "react";
157
155
  import { Title } from "@radix-ui/react-dialog";
158
156
  import { jsx as jsx9 } from "react/jsx-runtime";
159
- var DialogTitle = forwardRef6(
160
- function DialogTitle2({ className, ...props }, ref) {
161
- return /* @__PURE__ */ jsx9(Title, { className: cn("text-lg font-semibold leading-none tracking-tight", className), ref, ...props });
162
- }
163
- );
157
+ var DialogTitle = ({ className, ...props }) => {
158
+ return /* @__PURE__ */ jsx9(Title, { className: cn("text-lg leading-none font-semibold tracking-tight", className), ...props });
159
+ };
164
160
 
165
161
  // src/components/Dialog/Dialog.tsx
166
162
  var Dialog = Object.assign(Root.bind(null), {
@@ -322,4 +318,4 @@ export {
322
318
  Dialog,
323
319
  NotificationHub
324
320
  };
325
- //# sourceMappingURL=chunk-ZQ2TE7CF.js.map
321
+ //# sourceMappingURL=chunk-VWNGEXWI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Dialog/DialogBody.tsx","../src/components/Dialog/DialogContent.tsx","../src/components/Dialog/DialogOverlay.tsx","../src/components/Dialog/DialogDescription.tsx","../src/components/Dialog/DialogFooter.tsx","../src/components/Dialog/DialogHeader.tsx","../src/components/Dialog/DialogTitle.tsx","../src/providers/CoreProvider/NotificationHub.tsx","../src/providers/CoreProvider/NotificationIcon.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Slot, Slottable } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport type { Simplify } from 'type-fest';\n\nimport { cn } from '@/utils';\n\nexport const BUTTON_ICON_SIZE = {\n lg: 18,\n md: 16,\n sm: 14\n};\n\nexport const buttonVariants = cva(\n 'flex items-center justify-center whitespace-nowrap cursor-pointer rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n {\n defaultVariants: {\n size: 'md',\n variant: 'primary'\n },\n variants: {\n size: {\n icon: 'p-1.5 aspect-square',\n lg: 'h-10 rounded-md px-8 text-base',\n md: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs'\n },\n variant: {\n danger: 'bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/70',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n outline: 'border border-input bg-inherit shadow-xs',\n primary: 'bg-primary text-primary-foreground shadow-sm hover:bg-primary/90',\n secondary: 'bg-secondary border text-secondary-foreground shadow-xs hover:bg-secondary/10'\n }\n }\n }\n);\n\nexport type ButtonProps = Simplify<\n React.ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n /** @deprecated - use children */\n label?: string;\n }\n>;\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { asChild, children, className, label, size = 'md', variant = 'primary', ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp className={cn(buttonVariants({ className, size, variant }))} ref={ref} {...props}>\n {label}\n <Slottable>{children}</Slottable>\n </Comp>\n );\n});\n","import * as React from 'react';\n\nimport { cn } from '@/utils';\n\nconst CardRoot = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(function CardRoot(\n { className, ...props },\n ref\n) {\n return (\n <div\n className={cn('bg-card text-card-foreground rounded-xl border shadow-sm', className)}\n data-testid=\"card\"\n ref={ref}\n {...props}\n />\n );\n});\n\nexport const Card = Object.assign(CardRoot, {\n Content: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('p-6 pt-0', className)} {...props} />\n ),\n Description: ({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) => (\n <p className={cn('text-muted-foreground text-sm', className)} {...props} />\n ),\n Footer: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => {\n return <div className={cn('flex items-center p-6 pt-0', className)} {...props} />;\n },\n Header: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n Title: ({ children, className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) => (\n <h3 className={cn('leading-none font-semibold tracking-tight', className)} {...props}>\n {children}\n </h3>\n )\n});\n","import { Root, Trigger } from '@radix-ui/react-dialog';\n\nimport { DialogBody } from './DialogBody';\nimport { DialogContent } from './DialogContent';\nimport { DialogDescription } from './DialogDescription';\nimport { DialogFooter } from './DialogFooter';\nimport { DialogHeader } from './DialogHeader';\nimport { DialogTitle } from './DialogTitle';\n\nexport const Dialog = Object.assign(Root.bind(null), {\n Body: DialogBody,\n Content: DialogContent,\n Description: DialogDescription,\n Footer: DialogFooter,\n Header: DialogHeader,\n Title: DialogTitle,\n Trigger\n});\n","import * as React from 'react';\n\nimport { cn } from '@/utils';\n\nexport const DialogBody = ({\n children,\n className,\n ...props\n}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>) => {\n return (\n <div className={cn('py-4', className)} {...props}>\n {children}\n </div>\n );\n};\n","import {} from 'react';\n\nimport { Close, Content, Portal } from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\n\nimport { cn } from '@/utils';\n\nimport { DialogOverlay } from './DialogOverlay';\n\nexport const DialogContent = ({ children, className, ...props }: React.ComponentProps<typeof Content>) => {\n return (\n <Portal>\n <DialogOverlay />\n <Content\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-md border p-6 shadow-lg duration-300 sm:max-w-lg sm:rounded-lg',\n className\n )}\n {...props}\n >\n {children}\n <Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"h-4 w-4\" />\n </Close>\n </Content>\n </Portal>\n );\n};\n","import {} from 'react';\n\nimport { Overlay } from '@radix-ui/react-dialog';\n\nimport { cn } from '@/utils';\n\nexport const DialogOverlay = ({ className, ...props }: React.ComponentProps<typeof Overlay>) => {\n return (\n <Overlay\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80 duration-300',\n className\n )}\n {...props}\n />\n );\n};\n","import {} from 'react';\n\nimport { Description } from '@radix-ui/react-dialog';\n\nimport { cn } from '@/utils';\n\nexport const DialogDescription = ({ className, ...props }: React.ComponentProps<typeof Description>) => {\n return <Description className={cn('text-muted-foreground text-sm', className)} {...props} />;\n};\n","import * as React from 'react';\n\nimport { cn } from '@/utils';\n\nexport const DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col gap-x-2 gap-y-0.5 sm:flex-row', className)} {...props} />\n);\n","import * as React from 'react';\n\nimport { cn } from '@/utils';\n\nexport const DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n);\n","import {} from 'react';\n\nimport { Title } from '@radix-ui/react-dialog';\n\nimport { cn } from '@/utils';\n\nexport const DialogTitle = ({ className, ...props }: React.ComponentProps<typeof Title>) => {\n return <Title className={cn('text-lg leading-none font-semibold tracking-tight', className)} {...props} />;\n};\n","import { XIcon } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\n\nimport { Card } from '@/components/Card';\nimport { useTranslation } from '@/hooks';\nimport { useNotificationsStore } from '@/hooks/useNotificationsStore';\n\nimport { NotificationIcon } from './NotificationIcon';\n\ntype NotificationHubProps = {\n /** The number of milliseconds before the notification is automatically cleared */\n timeout?: number;\n};\n\nconst NotificationHub = ({ timeout = 5000 }: NotificationHubProps) => {\n const { t } = useTranslation('libui');\n const { dismissNotification, notifications } = useNotificationsStore();\n\n return (\n <div className=\"fixed bottom-0 z-50 w-full print:hidden\">\n <AnimatePresence>\n {notifications.map((item) => (\n <motion.div\n animate={{ height: 'auto', opacity: 1 }}\n className=\"relative max-w-sm\"\n exit={{ height: 0, opacity: 0 }}\n initial={{ height: 0, opacity: 0 }}\n key={item.id}\n transition={{ bounce: 0.1, type: 'spring' }}\n >\n <div className=\"w-full p-2\">\n <Card className=\"w-full rounded-lg p-0\">\n <div className=\"p-4\">\n <div className=\"mb-2 flex items-center\">\n <NotificationIcon type={item.type} />\n <h5 className=\"ml-3 grow font-medium text-slate-900 dark:text-slate-100\">\n {item.title ?? t(`notifications.types.${item.type}`)}\n </h5>\n <button\n className=\"inline-flex rounded-md text-slate-400 hover:text-slate-500 focus:ring-1 focus:ring-sky-500 focus:outline-hidden dark:focus:ring-sky-600\"\n type=\"button\"\n onClick={() => {\n dismissNotification(item.id);\n }}\n >\n <XIcon aria-hidden=\"true\" className=\"h-5 w-5\" />\n </button>\n </div>\n <p className=\"text-muted-foreground my-2\">{item.message}</p>\n </div>\n <motion.div\n animate={{ width: '100%' }}\n className=\"h-1 bg-slate-500\"\n initial={{ width: '0%' }}\n transition={{ duration: timeout / 1000, ease: 'linear' }}\n onAnimationComplete={() => {\n dismissNotification(item.id);\n }}\n />\n </Card>\n </div>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n );\n};\n\nexport { NotificationHub, type NotificationHubProps };\n","import type { NotificationInterface } from '@/hooks/useNotificationsStore';\n\nexport type NotificationIconProps = {\n type: NotificationInterface['type'];\n};\n\nexport const NotificationIcon = ({ type }: NotificationIconProps) => {\n switch (type) {\n case 'error':\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-red-500\"\n data-slot=\"icon\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25Zm-1.72 6.97a.75.75 0 1 0-1.06 1.06L10.94 12l-1.72 1.72a.75.75 0 1 0 1.06 1.06L12 13.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L13.06 12l1.72-1.72a.75.75 0 1 0-1.06-1.06L12 10.94l-1.72-1.72Z\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n );\n case 'info':\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-blue-500\"\n data-slot=\"icon\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.34l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n );\n case 'success':\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-green-500\"\n data-slot=\"icon\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"\n fillRule=\"evenodd\"\n />\n </svg>\n );\n case 'warning':\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-yellow-500\"\n data-slot=\"icon\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12ZM12 8.25a.75.75 0 0 1 .75.75v3.75a.75.75 0 0 1-1.5 0V9a.75.75 0 0 1 .75-.75Zm0 8.25a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n );\n }\n};\n"],"mappings":"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","names":["Button","React","jsx","CardRoot","jsx","jsx","jsx","jsxs","jsx","jsx","jsx","jsx","XIcon","jsx","jsx","jsxs","XIcon"]}
@@ -1247,11 +1247,11 @@ declare const DatePicker: React$1.ForwardRefExoticComponent<DatePickerProps & Re
1247
1247
 
1248
1248
  declare const Dialog: React$1.FC<_radix_ui_react_dialog.DialogProps> & {
1249
1249
  Body: ({ children, className, ...props }: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>) => react_jsx_runtime.JSX.Element;
1250
- Content: React$1.ForwardRefExoticComponent<Omit<_radix_ui_react_dialog.DialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1251
- Description: React$1.ForwardRefExoticComponent<Omit<_radix_ui_react_dialog.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
1250
+ Content: ({ children, className, ...props }: React.ComponentProps<React$1.ForwardRefExoticComponent<_radix_ui_react_dialog.DialogContentProps & React$1.RefAttributes<HTMLDivElement>>>) => react_jsx_runtime.JSX.Element;
1251
+ Description: ({ className, ...props }: React.ComponentProps<React$1.ForwardRefExoticComponent<_radix_ui_react_dialog.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>>>) => react_jsx_runtime.JSX.Element;
1252
1252
  Footer: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
1253
1253
  Header: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
1254
- Title: React$1.ForwardRefExoticComponent<Omit<_radix_ui_react_dialog.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
1254
+ Title: ({ className, ...props }: React.ComponentProps<React$1.ForwardRefExoticComponent<_radix_ui_react_dialog.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>>>) => react_jsx_runtime.JSX.Element;
1255
1255
  Trigger: React$1.ForwardRefExoticComponent<_radix_ui_react_dialog.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
1256
1256
  };
1257
1257
 
@@ -6,7 +6,7 @@ import {
6
6
  Dialog,
7
7
  NotificationHub,
8
8
  buttonVariants
9
- } from "./chunk-ZQ2TE7CF.js";
9
+ } from "./chunk-VWNGEXWI.js";
10
10
  import {
11
11
  ChartContext,
12
12
  useChart,
package/dist/providers.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  Button,
4
4
  Dialog,
5
5
  NotificationHub
6
- } from "./chunk-ZQ2TE7CF.js";
6
+ } from "./chunk-VWNGEXWI.js";
7
7
  import {
8
8
  useDestructiveActionStore,
9
9
  useTranslation
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@douglasneuroinformatics/libui",
3
3
  "type": "module",
4
- "version": "4.8.2",
4
+ "version": "4.8.3",
5
5
  "packageManager": "pnpm@10.7.1",
6
6
  "description": "Generic UI components for DNP projects, built using React and Tailwind CSS",
7
7
  "author": "Joshua Unrau",
@@ -1,4 +1,4 @@
1
- import { forwardRef } from 'react';
1
+ import {} from 'react';
2
2
 
3
3
  import { Close, Content, Portal } from '@radix-ui/react-dialog';
4
4
  import { XIcon } from 'lucide-react';
@@ -7,19 +7,15 @@ import { cn } from '@/utils';
7
7
 
8
8
  import { DialogOverlay } from './DialogOverlay';
9
9
 
10
- export const DialogContent = forwardRef<
11
- React.ElementRef<typeof Content>,
12
- React.ComponentPropsWithoutRef<typeof Content>
13
- >(function DialogContent({ children, className, ...props }, ref) {
10
+ export const DialogContent = ({ children, className, ...props }: React.ComponentProps<typeof Content>) => {
14
11
  return (
15
12
  <Portal>
16
13
  <DialogOverlay />
17
14
  <Content
18
15
  className={cn(
19
- 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg',
16
+ 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-md border p-6 shadow-lg duration-300 sm:max-w-lg sm:rounded-lg',
20
17
  className
21
18
  )}
22
- ref={ref}
23
19
  {...props}
24
20
  >
25
21
  {children}
@@ -29,4 +25,4 @@ export const DialogContent = forwardRef<
29
25
  </Content>
30
26
  </Portal>
31
27
  );
32
- });
28
+ };
@@ -1,12 +1,9 @@
1
- import { forwardRef } from 'react';
1
+ import {} from 'react';
2
2
 
3
3
  import { Description } from '@radix-ui/react-dialog';
4
4
 
5
5
  import { cn } from '@/utils';
6
6
 
7
- export const DialogDescription = forwardRef<
8
- React.ElementRef<typeof Description>,
9
- React.ComponentPropsWithoutRef<typeof Description>
10
- >(function DialogDescription({ className, ...props }, ref) {
11
- return <Description className={cn('text-sm text-muted-foreground', className)} ref={ref} {...props} />;
12
- });
7
+ export const DialogDescription = ({ className, ...props }: React.ComponentProps<typeof Description>) => {
8
+ return <Description className={cn('text-muted-foreground text-sm', className)} {...props} />;
9
+ };
@@ -1,21 +1,17 @@
1
- import { forwardRef } from 'react';
1
+ import {} from 'react';
2
2
 
3
3
  import { Overlay } from '@radix-ui/react-dialog';
4
4
 
5
5
  import { cn } from '@/utils';
6
6
 
7
- export const DialogOverlay = forwardRef<
8
- React.ElementRef<typeof Overlay>,
9
- React.ComponentPropsWithoutRef<typeof Overlay>
10
- >(function DialogOverlay({ className, ...props }, ref) {
7
+ export const DialogOverlay = ({ className, ...props }: React.ComponentProps<typeof Overlay>) => {
11
8
  return (
12
9
  <Overlay
13
10
  className={cn(
14
- 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80 duration-200',
11
+ 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80 duration-300',
15
12
  className
16
13
  )}
17
- ref={ref}
18
14
  {...props}
19
15
  />
20
16
  );
21
- });
17
+ };
@@ -1,13 +1,9 @@
1
- import { forwardRef } from 'react';
1
+ import {} from 'react';
2
2
 
3
3
  import { Title } from '@radix-ui/react-dialog';
4
4
 
5
5
  import { cn } from '@/utils';
6
6
 
7
- export const DialogTitle = forwardRef<React.ElementRef<typeof Title>, React.ComponentPropsWithoutRef<typeof Title>>(
8
- function DialogTitle({ className, ...props }, ref) {
9
- return (
10
- <Title className={cn('text-lg font-semibold leading-none tracking-tight', className)} ref={ref} {...props} />
11
- );
12
- }
13
- );
7
+ export const DialogTitle = ({ className, ...props }: React.ComponentProps<typeof Title>) => {
8
+ return <Title className={cn('text-lg leading-none font-semibold tracking-tight', className)} {...props} />;
9
+ };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Dialog/DialogBody.tsx","../src/components/Dialog/DialogContent.tsx","../src/components/Dialog/DialogOverlay.tsx","../src/components/Dialog/DialogDescription.tsx","../src/components/Dialog/DialogFooter.tsx","../src/components/Dialog/DialogHeader.tsx","../src/components/Dialog/DialogTitle.tsx","../src/providers/CoreProvider/NotificationHub.tsx","../src/providers/CoreProvider/NotificationIcon.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Slot, Slottable } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport type { Simplify } from 'type-fest';\n\nimport { cn } from '@/utils';\n\nexport const BUTTON_ICON_SIZE = {\n lg: 18,\n md: 16,\n sm: 14\n};\n\nexport const buttonVariants = cva(\n 'flex items-center justify-center whitespace-nowrap cursor-pointer rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n {\n defaultVariants: {\n size: 'md',\n variant: 'primary'\n },\n variants: {\n size: {\n icon: 'p-1.5 aspect-square',\n lg: 'h-10 rounded-md px-8 text-base',\n md: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs'\n },\n variant: {\n danger: 'bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/70',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n outline: 'border border-input bg-inherit shadow-xs',\n primary: 'bg-primary text-primary-foreground shadow-sm hover:bg-primary/90',\n secondary: 'bg-secondary border text-secondary-foreground shadow-xs hover:bg-secondary/10'\n }\n }\n }\n);\n\nexport type ButtonProps = Simplify<\n React.ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n /** @deprecated - use children */\n label?: string;\n }\n>;\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { asChild, children, className, label, size = 'md', variant = 'primary', ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp className={cn(buttonVariants({ className, size, variant }))} ref={ref} {...props}>\n {label}\n <Slottable>{children}</Slottable>\n </Comp>\n );\n});\n","import * as React from 'react';\n\nimport { cn } from '@/utils';\n\nconst CardRoot = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(function CardRoot(\n { className, ...props },\n ref\n) {\n return (\n <div\n className={cn('bg-card text-card-foreground rounded-xl border shadow-sm', className)}\n data-testid=\"card\"\n ref={ref}\n {...props}\n />\n );\n});\n\nexport const Card = Object.assign(CardRoot, {\n Content: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('p-6 pt-0', className)} {...props} />\n ),\n Description: ({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) => (\n <p className={cn('text-muted-foreground text-sm', className)} {...props} />\n ),\n Footer: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => {\n return <div className={cn('flex items-center p-6 pt-0', className)} {...props} />;\n },\n Header: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n Title: ({ children, className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) => (\n <h3 className={cn('leading-none font-semibold tracking-tight', className)} {...props}>\n {children}\n </h3>\n )\n});\n","import { Root, Trigger } from '@radix-ui/react-dialog';\n\nimport { DialogBody } from './DialogBody';\nimport { DialogContent } from './DialogContent';\nimport { DialogDescription } from './DialogDescription';\nimport { DialogFooter } from './DialogFooter';\nimport { DialogHeader } from './DialogHeader';\nimport { DialogTitle } from './DialogTitle';\n\nexport const Dialog = Object.assign(Root.bind(null), {\n Body: DialogBody,\n Content: DialogContent,\n Description: DialogDescription,\n Footer: DialogFooter,\n Header: DialogHeader,\n Title: DialogTitle,\n Trigger\n});\n","import * as React from 'react';\n\nimport { cn } from '@/utils';\n\nexport const DialogBody = ({\n children,\n className,\n ...props\n}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>) => {\n return (\n <div className={cn('py-4', className)} {...props}>\n {children}\n </div>\n );\n};\n","import { forwardRef } from 'react';\n\nimport { Close, Content, Portal } from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\n\nimport { cn } from '@/utils';\n\nimport { DialogOverlay } from './DialogOverlay';\n\nexport const DialogContent = forwardRef<\n React.ElementRef<typeof Content>,\n React.ComponentPropsWithoutRef<typeof Content>\n>(function DialogContent({ children, className, ...props }, ref) {\n return (\n <Portal>\n <DialogOverlay />\n <Content\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg',\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n <Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"h-4 w-4\" />\n </Close>\n </Content>\n </Portal>\n );\n});\n","import { forwardRef } from 'react';\n\nimport { Overlay } from '@radix-ui/react-dialog';\n\nimport { cn } from '@/utils';\n\nexport const DialogOverlay = forwardRef<\n React.ElementRef<typeof Overlay>,\n React.ComponentPropsWithoutRef<typeof Overlay>\n>(function DialogOverlay({ className, ...props }, ref) {\n return (\n <Overlay\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80 duration-200',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n});\n","import { forwardRef } from 'react';\n\nimport { Description } from '@radix-ui/react-dialog';\n\nimport { cn } from '@/utils';\n\nexport const DialogDescription = forwardRef<\n React.ElementRef<typeof Description>,\n React.ComponentPropsWithoutRef<typeof Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return <Description className={cn('text-sm text-muted-foreground', className)} ref={ref} {...props} />;\n});\n","import * as React from 'react';\n\nimport { cn } from '@/utils';\n\nexport const DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col gap-x-2 gap-y-0.5 sm:flex-row', className)} {...props} />\n);\n","import * as React from 'react';\n\nimport { cn } from '@/utils';\n\nexport const DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n);\n","import { forwardRef } from 'react';\n\nimport { Title } from '@radix-ui/react-dialog';\n\nimport { cn } from '@/utils';\n\nexport const DialogTitle = forwardRef<React.ElementRef<typeof Title>, React.ComponentPropsWithoutRef<typeof Title>>(\n function DialogTitle({ className, ...props }, ref) {\n return (\n <Title className={cn('text-lg font-semibold leading-none tracking-tight', className)} ref={ref} {...props} />\n );\n }\n);\n","import { XIcon } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\n\nimport { Card } from '@/components/Card';\nimport { useTranslation } from '@/hooks';\nimport { useNotificationsStore } from '@/hooks/useNotificationsStore';\n\nimport { NotificationIcon } from './NotificationIcon';\n\ntype NotificationHubProps = {\n /** The number of milliseconds before the notification is automatically cleared */\n timeout?: number;\n};\n\nconst NotificationHub = ({ timeout = 5000 }: NotificationHubProps) => {\n const { t } = useTranslation('libui');\n const { dismissNotification, notifications } = useNotificationsStore();\n\n return (\n <div className=\"fixed bottom-0 z-50 w-full print:hidden\">\n <AnimatePresence>\n {notifications.map((item) => (\n <motion.div\n animate={{ height: 'auto', opacity: 1 }}\n className=\"relative max-w-sm\"\n exit={{ height: 0, opacity: 0 }}\n initial={{ height: 0, opacity: 0 }}\n key={item.id}\n transition={{ bounce: 0.1, type: 'spring' }}\n >\n <div className=\"w-full p-2\">\n <Card className=\"w-full rounded-lg p-0\">\n <div className=\"p-4\">\n <div className=\"mb-2 flex items-center\">\n <NotificationIcon type={item.type} />\n <h5 className=\"ml-3 grow font-medium text-slate-900 dark:text-slate-100\">\n {item.title ?? t(`notifications.types.${item.type}`)}\n </h5>\n <button\n className=\"inline-flex rounded-md text-slate-400 hover:text-slate-500 focus:ring-1 focus:ring-sky-500 focus:outline-hidden dark:focus:ring-sky-600\"\n type=\"button\"\n onClick={() => {\n dismissNotification(item.id);\n }}\n >\n <XIcon aria-hidden=\"true\" className=\"h-5 w-5\" />\n </button>\n </div>\n <p className=\"text-muted-foreground my-2\">{item.message}</p>\n </div>\n <motion.div\n animate={{ width: '100%' }}\n className=\"h-1 bg-slate-500\"\n initial={{ width: '0%' }}\n transition={{ duration: timeout / 1000, ease: 'linear' }}\n onAnimationComplete={() => {\n dismissNotification(item.id);\n }}\n />\n </Card>\n </div>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n );\n};\n\nexport { NotificationHub, type NotificationHubProps };\n","import type { NotificationInterface } from '@/hooks/useNotificationsStore';\n\nexport type NotificationIconProps = {\n type: NotificationInterface['type'];\n};\n\nexport const NotificationIcon = ({ type }: NotificationIconProps) => {\n switch (type) {\n case 'error':\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-red-500\"\n data-slot=\"icon\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25Zm-1.72 6.97a.75.75 0 1 0-1.06 1.06L10.94 12l-1.72 1.72a.75.75 0 1 0 1.06 1.06L12 13.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L13.06 12l1.72-1.72a.75.75 0 1 0-1.06-1.06L12 10.94l-1.72-1.72Z\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n );\n case 'info':\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-blue-500\"\n data-slot=\"icon\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.34l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n );\n case 'success':\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-green-500\"\n data-slot=\"icon\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"\n fillRule=\"evenodd\"\n />\n </svg>\n );\n case 'warning':\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-yellow-500\"\n data-slot=\"icon\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12ZM12 8.25a.75.75 0 0 1 .75.75v3.75a.75.75 0 0 1-1.5 0V9a.75.75 0 0 1 .75-.75Zm0 8.25a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n );\n }\n};\n"],"mappings":"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","names":["Button","React","jsx","CardRoot","jsx","forwardRef","forwardRef","jsx","forwardRef","DialogOverlay","jsx","jsxs","forwardRef","DialogContent","forwardRef","jsx","forwardRef","DialogDescription","jsx","jsx","forwardRef","jsx","forwardRef","DialogTitle","XIcon","jsx","jsx","jsxs","XIcon"]}