@nuvia/components 0.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.
- package/README.md +96 -0
- package/dist/hooks/use-mobile.cjs +44 -0
- package/dist/hooks/use-mobile.cjs.map +1 -0
- package/dist/hooks/use-mobile.js +22 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-toast.cjs +146 -0
- package/dist/hooks/use-toast.cjs.map +1 -0
- package/dist/hooks/use-toast.js +122 -0
- package/dist/hooks/use-toast.js.map +1 -0
- package/dist/index.cjs +4117 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +3800 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/fonts.cjs +15 -0
- package/dist/lib/fonts.cjs.map +1 -0
- package/dist/lib/fonts.js +13 -0
- package/dist/lib/fonts.js.map +1 -0
- package/dist/lib/utils.cjs +18 -0
- package/dist/lib/utils.cjs.map +1 -0
- package/dist/lib/utils.js +14 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/providers/theme.cjs +24 -0
- package/dist/providers/theme.cjs.map +1 -0
- package/dist/providers/theme.js +22 -0
- package/dist/providers/theme.js.map +1 -0
- package/dist/ui/accordion.cjs +75 -0
- package/dist/ui/accordion.cjs.map +1 -0
- package/dist/ui/accordion.js +49 -0
- package/dist/ui/accordion.js.map +1 -0
- package/dist/ui/alert-dialog.cjs +189 -0
- package/dist/ui/alert-dialog.cjs.map +1 -0
- package/dist/ui/alert-dialog.js +156 -0
- package/dist/ui/alert-dialog.js.map +1 -0
- package/dist/ui/alert.cjs +81 -0
- package/dist/ui/alert.cjs.map +1 -0
- package/dist/ui/alert.js +57 -0
- package/dist/ui/alert.js.map +1 -0
- package/dist/ui/aspect-ratio.cjs +29 -0
- package/dist/ui/aspect-ratio.cjs.map +1 -0
- package/dist/ui/aspect-ratio.js +7 -0
- package/dist/ui/aspect-ratio.js.map +1 -0
- package/dist/ui/auto-complete.cjs +284 -0
- package/dist/ui/auto-complete.cjs.map +1 -0
- package/dist/ui/auto-complete.js +262 -0
- package/dist/ui/auto-complete.js.map +1 -0
- package/dist/ui/avatar.cjs +70 -0
- package/dist/ui/avatar.cjs.map +1 -0
- package/dist/ui/avatar.js +45 -0
- package/dist/ui/avatar.js.map +1 -0
- package/dist/ui/badge.cjs +34 -0
- package/dist/ui/badge.cjs.map +1 -0
- package/dist/ui/badge.js +31 -0
- package/dist/ui/badge.js.map +1 -0
- package/dist/ui/breadcrumb.cjs +120 -0
- package/dist/ui/breadcrumb.cjs.map +1 -0
- package/dist/ui/breadcrumb.js +92 -0
- package/dist/ui/breadcrumb.js.map +1 -0
- package/dist/ui/button.cjs +80 -0
- package/dist/ui/button.cjs.map +1 -0
- package/dist/ui/button.js +57 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/calendar.cjs +135 -0
- package/dist/ui/calendar.cjs.map +1 -0
- package/dist/ui/calendar.js +113 -0
- package/dist/ui/calendar.js.map +1 -0
- package/dist/ui/card.cjs +89 -0
- package/dist/ui/card.cjs.map +1 -0
- package/dist/ui/card.js +62 -0
- package/dist/ui/card.js.map +1 -0
- package/dist/ui/carousel.cjs +269 -0
- package/dist/ui/carousel.cjs.map +1 -0
- package/dist/ui/carousel.js +240 -0
- package/dist/ui/carousel.js.map +1 -0
- package/dist/ui/chart.cjs +267 -0
- package/dist/ui/chart.cjs.map +1 -0
- package/dist/ui/chart.js +239 -0
- package/dist/ui/chart.js.map +1 -0
- package/dist/ui/checkbox.cjs +55 -0
- package/dist/ui/checkbox.cjs.map +1 -0
- package/dist/ui/checkbox.js +32 -0
- package/dist/ui/checkbox.js.map +1 -0
- package/dist/ui/chip.cjs +79 -0
- package/dist/ui/chip.cjs.map +1 -0
- package/dist/ui/chip.js +55 -0
- package/dist/ui/chip.js.map +1 -0
- package/dist/ui/collapsible.cjs +33 -0
- package/dist/ui/collapsible.cjs.map +1 -0
- package/dist/ui/collapsible.js +9 -0
- package/dist/ui/collapsible.js.map +1 -0
- package/dist/ui/combobox.cjs +254 -0
- package/dist/ui/combobox.cjs.map +1 -0
- package/dist/ui/combobox.js +232 -0
- package/dist/ui/combobox.js.map +1 -0
- package/dist/ui/command.cjs +199 -0
- package/dist/ui/command.cjs.map +1 -0
- package/dist/ui/command.js +168 -0
- package/dist/ui/command.js.map +1 -0
- package/dist/ui/context-menu.cjs +181 -0
- package/dist/ui/context-menu.cjs.map +1 -0
- package/dist/ui/context-menu.js +144 -0
- package/dist/ui/context-menu.js.map +1 -0
- package/dist/ui/dialog.cjs +132 -0
- package/dist/ui/dialog.cjs.map +1 -0
- package/dist/ui/dialog.js +100 -0
- package/dist/ui/dialog.js.map +1 -0
- package/dist/ui/drawer.cjs +128 -0
- package/dist/ui/drawer.cjs.map +1 -0
- package/dist/ui/drawer.js +97 -0
- package/dist/ui/drawer.js.map +1 -0
- package/dist/ui/dropdown-menu.cjs +194 -0
- package/dist/ui/dropdown-menu.cjs.map +1 -0
- package/dist/ui/dropdown-menu.js +157 -0
- package/dist/ui/dropdown-menu.js.map +1 -0
- package/dist/ui/form.cjs +179 -0
- package/dist/ui/form.cjs.map +1 -0
- package/dist/ui/form.js +149 -0
- package/dist/ui/form.js.map +1 -0
- package/dist/ui/hover-card.cjs +53 -0
- package/dist/ui/hover-card.cjs.map +1 -0
- package/dist/ui/hover-card.js +28 -0
- package/dist/ui/hover-card.js.map +1 -0
- package/dist/ui/input-otp.cjs +76 -0
- package/dist/ui/input-otp.cjs.map +1 -0
- package/dist/ui/input-otp.js +51 -0
- package/dist/ui/input-otp.js.map +1 -0
- package/dist/ui/input.cjs +51 -0
- package/dist/ui/input.cjs.map +1 -0
- package/dist/ui/input.js +29 -0
- package/dist/ui/input.js.map +1 -0
- package/dist/ui/label.cjs +55 -0
- package/dist/ui/label.cjs.map +1 -0
- package/dist/ui/label.js +32 -0
- package/dist/ui/label.js.map +1 -0
- package/dist/ui/lottie-animation.cjs +85 -0
- package/dist/ui/lottie-animation.cjs.map +1 -0
- package/dist/ui/lottie-animation.js +79 -0
- package/dist/ui/lottie-animation.js.map +1 -0
- package/dist/ui/menubar.cjs +210 -0
- package/dist/ui/menubar.cjs.map +1 -0
- package/dist/ui/menubar.js +172 -0
- package/dist/ui/menubar.js.map +1 -0
- package/dist/ui/multi-combobox.cjs +319 -0
- package/dist/ui/multi-combobox.cjs.map +1 -0
- package/dist/ui/multi-combobox.js +297 -0
- package/dist/ui/multi-combobox.js.map +1 -0
- package/dist/ui/navigation-menu.cjs +136 -0
- package/dist/ui/navigation-menu.cjs.map +1 -0
- package/dist/ui/navigation-menu.js +105 -0
- package/dist/ui/navigation-menu.js.map +1 -0
- package/dist/ui/pagination.cjs +172 -0
- package/dist/ui/pagination.cjs.map +1 -0
- package/dist/ui/pagination.js +144 -0
- package/dist/ui/pagination.js.map +1 -0
- package/dist/ui/popover.cjs +55 -0
- package/dist/ui/popover.cjs.map +1 -0
- package/dist/ui/popover.js +29 -0
- package/dist/ui/popover.js.map +1 -0
- package/dist/ui/progress.cjs +54 -0
- package/dist/ui/progress.cjs.map +1 -0
- package/dist/ui/progress.js +31 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/radio-group.cjs +62 -0
- package/dist/ui/radio-group.cjs.map +1 -0
- package/dist/ui/radio-group.js +38 -0
- package/dist/ui/radio-group.js.map +1 -0
- package/dist/ui/resizable.cjs +65 -0
- package/dist/ui/resizable.cjs.map +1 -0
- package/dist/ui/resizable.js +41 -0
- package/dist/ui/resizable.js.map +1 -0
- package/dist/ui/scroll-area.cjs +66 -0
- package/dist/ui/scroll-area.cjs.map +1 -0
- package/dist/ui/scroll-area.js +42 -0
- package/dist/ui/scroll-area.js.map +1 -0
- package/dist/ui/select.cjs +152 -0
- package/dist/ui/select.cjs.map +1 -0
- package/dist/ui/select.js +120 -0
- package/dist/ui/select.js.map +1 -0
- package/dist/ui/separator.cjs +52 -0
- package/dist/ui/separator.cjs.map +1 -0
- package/dist/ui/separator.js +29 -0
- package/dist/ui/separator.js.map +1 -0
- package/dist/ui/sheet.cjs +143 -0
- package/dist/ui/sheet.cjs.map +1 -0
- package/dist/ui/sheet.js +111 -0
- package/dist/ui/sheet.js.map +1 -0
- package/dist/ui/sidebar.cjs +816 -0
- package/dist/ui/sidebar.cjs.map +1 -0
- package/dist/ui/sidebar.js +768 -0
- package/dist/ui/sidebar.js.map +1 -0
- package/dist/ui/skeleton.cjs +25 -0
- package/dist/ui/skeleton.cjs.map +1 -0
- package/dist/ui/skeleton.js +23 -0
- package/dist/ui/skeleton.js.map +1 -0
- package/dist/ui/slider.cjs +51 -0
- package/dist/ui/slider.cjs.map +1 -0
- package/dist/ui/slider.js +28 -0
- package/dist/ui/slider.js.map +1 -0
- package/dist/ui/sonner.cjs +46 -0
- package/dist/ui/sonner.cjs.map +1 -0
- package/dist/ui/sonner.js +41 -0
- package/dist/ui/sonner.js.map +1 -0
- package/dist/ui/spinner.cjs +83 -0
- package/dist/ui/spinner.cjs.map +1 -0
- package/dist/ui/spinner.js +81 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/switch.cjs +67 -0
- package/dist/ui/switch.cjs.map +1 -0
- package/dist/ui/switch.js +44 -0
- package/dist/ui/switch.js.map +1 -0
- package/dist/ui/table.cjs +118 -0
- package/dist/ui/table.cjs.map +1 -0
- package/dist/ui/table.js +89 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/tabs.cjs +79 -0
- package/dist/ui/tabs.cjs.map +1 -0
- package/dist/ui/tabs.js +53 -0
- package/dist/ui/tabs.js.map +1 -0
- package/dist/ui/textarea.cjs +48 -0
- package/dist/ui/textarea.cjs.map +1 -0
- package/dist/ui/textarea.js +26 -0
- package/dist/ui/textarea.js.map +1 -0
- package/dist/ui/toast.cjs +125 -0
- package/dist/ui/toast.cjs.map +1 -0
- package/dist/ui/toast.js +96 -0
- package/dist/ui/toast.js.map +1 -0
- package/dist/ui/toaster.cjs +251 -0
- package/dist/ui/toaster.cjs.map +1 -0
- package/dist/ui/toaster.js +228 -0
- package/dist/ui/toaster.js.map +1 -0
- package/dist/ui/toggle-group.cjs +101 -0
- package/dist/ui/toggle-group.cjs.map +1 -0
- package/dist/ui/toggle-group.js +76 -0
- package/dist/ui/toggle-group.js.map +1 -0
- package/dist/ui/toggle.cjs +66 -0
- package/dist/ui/toggle.cjs.map +1 -0
- package/dist/ui/toggle.js +42 -0
- package/dist/ui/toggle.js.map +1 -0
- package/dist/ui/tooltip.cjs +54 -0
- package/dist/ui/tooltip.cjs.map +1 -0
- package/dist/ui/tooltip.js +28 -0
- package/dist/ui/tooltip.js.map +1 -0
- package/package.json +116 -0
- package/src/styles/globals.css +529 -0
package/README.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# @nuvia/components
|
|
2
|
+
|
|
3
|
+
React UI components for Nuvia applications, built with Radix UI primitives and Tailwind CSS.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @nuvia/components @nuvia/tailwind-config
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
1. Configure your `tailwind.config.ts`:
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
export { config as default } from "@nuvia/tailwind-config";
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. Import the global styles in your app:
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import "@nuvia/components/styles/globals.css";
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
3. Wrap your app with providers:
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { ThemeProvider, TooltipProvider } from "@nuvia/components";
|
|
29
|
+
|
|
30
|
+
export function App({ children }) {
|
|
31
|
+
return (
|
|
32
|
+
<ThemeProvider>
|
|
33
|
+
<TooltipProvider>
|
|
34
|
+
{children}
|
|
35
|
+
</TooltipProvider>
|
|
36
|
+
</ThemeProvider>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Usage
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { Button, Card, Dialog } from "@nuvia/components";
|
|
45
|
+
// Or import from specific paths
|
|
46
|
+
import { Button } from "@nuvia/components/ui/button";
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Components
|
|
50
|
+
|
|
51
|
+
- Accordion
|
|
52
|
+
- Alert / Alert Dialog
|
|
53
|
+
- Avatar
|
|
54
|
+
- Badge
|
|
55
|
+
- Breadcrumb
|
|
56
|
+
- Button
|
|
57
|
+
- Calendar
|
|
58
|
+
- Card
|
|
59
|
+
- Carousel
|
|
60
|
+
- Chart
|
|
61
|
+
- Checkbox
|
|
62
|
+
- Chip
|
|
63
|
+
- Collapsible
|
|
64
|
+
- Combobox / Multi-Combobox
|
|
65
|
+
- Command
|
|
66
|
+
- Context Menu
|
|
67
|
+
- Dialog
|
|
68
|
+
- Drawer
|
|
69
|
+
- Dropdown Menu
|
|
70
|
+
- Form
|
|
71
|
+
- Hover Card
|
|
72
|
+
- Input / Input OTP
|
|
73
|
+
- Label
|
|
74
|
+
- Menubar
|
|
75
|
+
- Navigation Menu
|
|
76
|
+
- Pagination
|
|
77
|
+
- Popover
|
|
78
|
+
- Progress
|
|
79
|
+
- Radio Group
|
|
80
|
+
- Resizable
|
|
81
|
+
- Scroll Area
|
|
82
|
+
- Select
|
|
83
|
+
- Separator
|
|
84
|
+
- Sheet
|
|
85
|
+
- Sidebar
|
|
86
|
+
- Skeleton
|
|
87
|
+
- Slider
|
|
88
|
+
- Sonner (Toast)
|
|
89
|
+
- Spinner
|
|
90
|
+
- Switch
|
|
91
|
+
- Table
|
|
92
|
+
- Tabs
|
|
93
|
+
- Textarea
|
|
94
|
+
- Toast / Toaster
|
|
95
|
+
- Toggle / Toggle Group
|
|
96
|
+
- Tooltip
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
|
|
5
|
+
function _interopNamespace(e) {
|
|
6
|
+
if (e && e.__esModule) return e;
|
|
7
|
+
var n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
Object.keys(e).forEach(function (k) {
|
|
10
|
+
if (k !== 'default') {
|
|
11
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return e[k]; }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
24
|
+
|
|
25
|
+
var MOBILE_BREAKPOINT = 768;
|
|
26
|
+
function useIsMobile() {
|
|
27
|
+
const [isMobile, setIsMobile] = React__namespace.useState(
|
|
28
|
+
void 0
|
|
29
|
+
);
|
|
30
|
+
React__namespace.useEffect(() => {
|
|
31
|
+
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
32
|
+
const onChange = () => {
|
|
33
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
34
|
+
};
|
|
35
|
+
mql.addEventListener("change", onChange);
|
|
36
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
37
|
+
return () => mql.removeEventListener("change", onChange);
|
|
38
|
+
}, []);
|
|
39
|
+
return !!isMobile;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
exports.useIsMobile = useIsMobile;
|
|
43
|
+
//# sourceMappingURL=use-mobile.cjs.map
|
|
44
|
+
//# sourceMappingURL=use-mobile.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-mobile.tsx"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,iBAAA,GAAoB,GAAA;AAEnB,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUA,gBAAA,CAAA,QAAA;AAAA,IACpC;AAAA,GACF;AAEA,EAAMA,2BAAU,MAAM;AACpB,IAAA,MAAM,MAAM,MAAA,CAAO,UAAA,CAAW,CAAA,YAAA,EAAe,iBAAA,GAAoB,CAAC,CAAA,GAAA,CAAK,CAAA;AACvE,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,WAAA,CAAY,MAAA,CAAO,aAAa,iBAAiB,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACvC,IAAA,WAAA,CAAY,MAAA,CAAO,aAAa,iBAAiB,CAAA;AACjD,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,CAAC,CAAC,QAAA;AACX","file":"use-mobile.cjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
var MOBILE_BREAKPOINT = 768;
|
|
4
|
+
function useIsMobile() {
|
|
5
|
+
const [isMobile, setIsMobile] = React.useState(
|
|
6
|
+
void 0
|
|
7
|
+
);
|
|
8
|
+
React.useEffect(() => {
|
|
9
|
+
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
10
|
+
const onChange = () => {
|
|
11
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
12
|
+
};
|
|
13
|
+
mql.addEventListener("change", onChange);
|
|
14
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
15
|
+
return () => mql.removeEventListener("change", onChange);
|
|
16
|
+
}, []);
|
|
17
|
+
return !!isMobile;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { useIsMobile };
|
|
21
|
+
//# sourceMappingURL=use-mobile.js.map
|
|
22
|
+
//# sourceMappingURL=use-mobile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-mobile.tsx"],"names":[],"mappings":";;AAIA,IAAM,iBAAA,GAAoB,GAAA;AAEnB,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,IACpC;AAAA,GACF;AAEA,EAAM,gBAAU,MAAM;AACpB,IAAA,MAAM,MAAM,MAAA,CAAO,UAAA,CAAW,CAAA,YAAA,EAAe,iBAAA,GAAoB,CAAC,CAAA,GAAA,CAAK,CAAA;AACvE,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,WAAA,CAAY,MAAA,CAAO,aAAa,iBAAiB,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACvC,IAAA,WAAA,CAAY,MAAA,CAAO,aAAa,iBAAiB,CAAA;AACjD,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,CAAC,CAAC,QAAA;AACX","file":"use-mobile.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n"]}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
|
|
5
|
+
function _interopNamespace(e) {
|
|
6
|
+
if (e && e.__esModule) return e;
|
|
7
|
+
var n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
Object.keys(e).forEach(function (k) {
|
|
10
|
+
if (k !== 'default') {
|
|
11
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return e[k]; }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
24
|
+
|
|
25
|
+
var TOAST_LIMIT = 1;
|
|
26
|
+
var TOAST_REMOVE_DELAY = 1e6;
|
|
27
|
+
var count = 0;
|
|
28
|
+
function genId() {
|
|
29
|
+
count = (count + 1) % Number.MAX_SAFE_INTEGER;
|
|
30
|
+
return count.toString();
|
|
31
|
+
}
|
|
32
|
+
var toastTimeouts = /* @__PURE__ */ new Map();
|
|
33
|
+
var addToRemoveQueue = (toastId) => {
|
|
34
|
+
if (toastTimeouts.has(toastId)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const timeout = setTimeout(() => {
|
|
38
|
+
toastTimeouts.delete(toastId);
|
|
39
|
+
dispatch({
|
|
40
|
+
type: "REMOVE_TOAST",
|
|
41
|
+
toastId
|
|
42
|
+
});
|
|
43
|
+
}, TOAST_REMOVE_DELAY);
|
|
44
|
+
toastTimeouts.set(toastId, timeout);
|
|
45
|
+
};
|
|
46
|
+
var reducer = (state, action) => {
|
|
47
|
+
switch (action.type) {
|
|
48
|
+
case "ADD_TOAST":
|
|
49
|
+
return {
|
|
50
|
+
...state,
|
|
51
|
+
toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT)
|
|
52
|
+
};
|
|
53
|
+
case "UPDATE_TOAST":
|
|
54
|
+
return {
|
|
55
|
+
...state,
|
|
56
|
+
toasts: state.toasts.map(
|
|
57
|
+
(t) => t.id === action.toast.id ? { ...t, ...action.toast } : t
|
|
58
|
+
)
|
|
59
|
+
};
|
|
60
|
+
case "DISMISS_TOAST": {
|
|
61
|
+
const { toastId } = action;
|
|
62
|
+
if (toastId) {
|
|
63
|
+
addToRemoveQueue(toastId);
|
|
64
|
+
} else {
|
|
65
|
+
state.toasts.forEach((toast2) => {
|
|
66
|
+
addToRemoveQueue(toast2.id);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
...state,
|
|
71
|
+
toasts: state.toasts.map(
|
|
72
|
+
(t) => t.id === toastId || toastId === void 0 ? {
|
|
73
|
+
...t,
|
|
74
|
+
open: false
|
|
75
|
+
} : t
|
|
76
|
+
)
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
case "REMOVE_TOAST":
|
|
80
|
+
if (action.toastId === void 0) {
|
|
81
|
+
return {
|
|
82
|
+
...state,
|
|
83
|
+
toasts: []
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
...state,
|
|
88
|
+
toasts: state.toasts.filter((t) => t.id !== action.toastId)
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
var listeners = [];
|
|
93
|
+
var memoryState = { toasts: [] };
|
|
94
|
+
function dispatch(action) {
|
|
95
|
+
memoryState = reducer(memoryState, action);
|
|
96
|
+
listeners.forEach((listener) => {
|
|
97
|
+
listener(memoryState);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function toast({ ...props }) {
|
|
101
|
+
const id = genId();
|
|
102
|
+
const update = (props2) => dispatch({
|
|
103
|
+
type: "UPDATE_TOAST",
|
|
104
|
+
toast: { ...props2, id }
|
|
105
|
+
});
|
|
106
|
+
const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id });
|
|
107
|
+
dispatch({
|
|
108
|
+
type: "ADD_TOAST",
|
|
109
|
+
toast: {
|
|
110
|
+
...props,
|
|
111
|
+
id,
|
|
112
|
+
open: true,
|
|
113
|
+
onOpenChange: (open) => {
|
|
114
|
+
if (!open) dismiss();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
id,
|
|
120
|
+
dismiss,
|
|
121
|
+
update
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function useToast() {
|
|
125
|
+
const [state, setState] = React__namespace.useState(memoryState);
|
|
126
|
+
React__namespace.useEffect(() => {
|
|
127
|
+
listeners.push(setState);
|
|
128
|
+
return () => {
|
|
129
|
+
const index = listeners.indexOf(setState);
|
|
130
|
+
if (index > -1) {
|
|
131
|
+
listeners.splice(index, 1);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}, [state]);
|
|
135
|
+
return {
|
|
136
|
+
...state,
|
|
137
|
+
toast,
|
|
138
|
+
dismiss: (toastId) => dispatch({ type: "DISMISS_TOAST", toastId })
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
exports.reducer = reducer;
|
|
143
|
+
exports.toast = toast;
|
|
144
|
+
exports.useToast = useToast;
|
|
145
|
+
//# sourceMappingURL=use-toast.cjs.map
|
|
146
|
+
//# sourceMappingURL=use-toast.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-toast.ts"],"names":["toast","props","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAM,WAAA,GAAc,CAAA;AACpB,IAAM,kBAAA,GAAqB,GAAA;AAgB3B,IAAI,KAAA,GAAQ,CAAA;AAEZ,SAAS,KAAA,GAAQ;AACf,EAAA,KAAA,GAAA,CAAS,KAAA,GAAQ,KAAK,MAAA,CAAO,gBAAA;AAC7B,EAAA,OAAO,MAAM,QAAA,EAAS;AACxB;AA0BA,IAAM,aAAA,uBAAoB,GAAA,EAA2C;AAErE,IAAM,gBAAA,GAAmB,CAAC,OAAA,KAAoB;AAC5C,EAAA,IAAI,aAAA,CAAc,GAAA,CAAI,OAAO,CAAA,EAAG;AAC9B,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,IAAA,aAAA,CAAc,OAAO,OAAO,CAAA;AAC5B,IAAA,QAAA,CAAS;AAAA,MACP,IAAA,EAAM,cAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH,GAAG,kBAAkB,CAAA;AAErB,EAAA,aAAA,CAAc,GAAA,CAAI,SAAS,OAAO,CAAA;AACpC,CAAA;AAEO,IAAM,OAAA,GAAU,CAAC,KAAA,EAAc,MAAA,KAA0B;AAC9D,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,WAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,CAAC,MAAA,CAAO,KAAA,EAAO,GAAG,MAAM,MAAM,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,WAAW;AAAA,OAC9D;AAAA,IAEF,KAAK,cAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,MAAM,MAAA,CAAO,GAAA;AAAA,UAAI,CAAC,CAAA,KACxB,CAAA,CAAE,EAAA,KAAO,MAAA,CAAO,KAAA,CAAM,EAAA,GAAK,EAAE,GAAG,CAAA,EAAG,GAAG,MAAA,CAAO,OAAM,GAAI;AAAA;AACzD,OACF;AAAA,IAEF,KAAK,eAAA,EAAiB;AACpB,MAAA,MAAM,EAAE,SAAQ,GAAI,MAAA;AAIpB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,gBAAA,CAAiB,OAAO,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAACA,MAAAA,KAAU;AAC9B,UAAA,gBAAA,CAAiBA,OAAM,EAAE,CAAA;AAAA,QAC3B,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,MAAM,MAAA,CAAO,GAAA;AAAA,UAAI,CAAC,CAAA,KACxB,CAAA,CAAE,EAAA,KAAO,OAAA,IAAW,YAAY,MAAA,GAC5B;AAAA,YACE,GAAG,CAAA;AAAA,YACH,IAAA,EAAM;AAAA,WACR,GACA;AAAA;AACN,OACF;AAAA,IACF;AAAA,IACA,KAAK,cAAA;AACH,MAAA,IAAI,MAAA,CAAO,YAAY,MAAA,EAAW;AAChC,QAAA,OAAO;AAAA,UACL,GAAG,KAAA;AAAA,UACH,QAAQ;AAAC,SACX;AAAA,MACF;AACA,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,MAAA,CAAO,OAAO;AAAA,OAC5D;AAAA;AAEN;AAEA,IAAM,YAA2C,EAAC;AAElD,IAAI,WAAA,GAAqB,EAAE,MAAA,EAAQ,EAAC,EAAE;AAEtC,SAAS,SAAS,MAAA,EAAgB;AAChC,EAAA,WAAA,GAAc,OAAA,CAAQ,aAAa,MAAM,CAAA;AACzC,EAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC9B,IAAA,QAAA,CAAS,WAAW,CAAA;AAAA,EACtB,CAAC,CAAA;AACH;AAIA,SAAS,KAAA,CAAM,EAAE,GAAG,KAAA,EAAM,EAAU;AAClC,EAAA,MAAM,KAAK,KAAA,EAAM;AAEjB,EAAA,MAAM,MAAA,GAAS,CAACC,MAAAA,KACd,QAAA,CAAS;AAAA,IACP,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO,EAAE,GAAGA,MAAAA,EAAO,EAAA;AAAG,GACvB,CAAA;AACH,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,EAAE,MAAM,eAAA,EAAiB,OAAA,EAAS,IAAI,CAAA;AAErE,EAAA,QAAA,CAAS;AAAA,IACP,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,EAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,CAAC,MAAM,OAAA,EAAQ;AAAA,MACrB;AAAA;AACF,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,QAAA,GAAW;AAClB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUC,0BAAgB,WAAW,CAAA;AAE3D,EAAMA,2BAAU,MAAM;AACpB,IAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,QAAQ,CAAA;AACxC,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,SAAA,CAAU,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MAC3B;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,KAAA;AAAA,IACA,OAAA,EAAS,CAAC,OAAA,KAAqB,QAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAS;AAAA,GAC5E;AACF","file":"use-toast.cjs","sourcesContent":["\"use client\";\n\n// Inspired by react-hot-toast library\nimport * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"../ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n"]}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
var TOAST_LIMIT = 1;
|
|
4
|
+
var TOAST_REMOVE_DELAY = 1e6;
|
|
5
|
+
var count = 0;
|
|
6
|
+
function genId() {
|
|
7
|
+
count = (count + 1) % Number.MAX_SAFE_INTEGER;
|
|
8
|
+
return count.toString();
|
|
9
|
+
}
|
|
10
|
+
var toastTimeouts = /* @__PURE__ */ new Map();
|
|
11
|
+
var addToRemoveQueue = (toastId) => {
|
|
12
|
+
if (toastTimeouts.has(toastId)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const timeout = setTimeout(() => {
|
|
16
|
+
toastTimeouts.delete(toastId);
|
|
17
|
+
dispatch({
|
|
18
|
+
type: "REMOVE_TOAST",
|
|
19
|
+
toastId
|
|
20
|
+
});
|
|
21
|
+
}, TOAST_REMOVE_DELAY);
|
|
22
|
+
toastTimeouts.set(toastId, timeout);
|
|
23
|
+
};
|
|
24
|
+
var reducer = (state, action) => {
|
|
25
|
+
switch (action.type) {
|
|
26
|
+
case "ADD_TOAST":
|
|
27
|
+
return {
|
|
28
|
+
...state,
|
|
29
|
+
toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT)
|
|
30
|
+
};
|
|
31
|
+
case "UPDATE_TOAST":
|
|
32
|
+
return {
|
|
33
|
+
...state,
|
|
34
|
+
toasts: state.toasts.map(
|
|
35
|
+
(t) => t.id === action.toast.id ? { ...t, ...action.toast } : t
|
|
36
|
+
)
|
|
37
|
+
};
|
|
38
|
+
case "DISMISS_TOAST": {
|
|
39
|
+
const { toastId } = action;
|
|
40
|
+
if (toastId) {
|
|
41
|
+
addToRemoveQueue(toastId);
|
|
42
|
+
} else {
|
|
43
|
+
state.toasts.forEach((toast2) => {
|
|
44
|
+
addToRemoveQueue(toast2.id);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
...state,
|
|
49
|
+
toasts: state.toasts.map(
|
|
50
|
+
(t) => t.id === toastId || toastId === void 0 ? {
|
|
51
|
+
...t,
|
|
52
|
+
open: false
|
|
53
|
+
} : t
|
|
54
|
+
)
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
case "REMOVE_TOAST":
|
|
58
|
+
if (action.toastId === void 0) {
|
|
59
|
+
return {
|
|
60
|
+
...state,
|
|
61
|
+
toasts: []
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
...state,
|
|
66
|
+
toasts: state.toasts.filter((t) => t.id !== action.toastId)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
var listeners = [];
|
|
71
|
+
var memoryState = { toasts: [] };
|
|
72
|
+
function dispatch(action) {
|
|
73
|
+
memoryState = reducer(memoryState, action);
|
|
74
|
+
listeners.forEach((listener) => {
|
|
75
|
+
listener(memoryState);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function toast({ ...props }) {
|
|
79
|
+
const id = genId();
|
|
80
|
+
const update = (props2) => dispatch({
|
|
81
|
+
type: "UPDATE_TOAST",
|
|
82
|
+
toast: { ...props2, id }
|
|
83
|
+
});
|
|
84
|
+
const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id });
|
|
85
|
+
dispatch({
|
|
86
|
+
type: "ADD_TOAST",
|
|
87
|
+
toast: {
|
|
88
|
+
...props,
|
|
89
|
+
id,
|
|
90
|
+
open: true,
|
|
91
|
+
onOpenChange: (open) => {
|
|
92
|
+
if (!open) dismiss();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
id,
|
|
98
|
+
dismiss,
|
|
99
|
+
update
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function useToast() {
|
|
103
|
+
const [state, setState] = React.useState(memoryState);
|
|
104
|
+
React.useEffect(() => {
|
|
105
|
+
listeners.push(setState);
|
|
106
|
+
return () => {
|
|
107
|
+
const index = listeners.indexOf(setState);
|
|
108
|
+
if (index > -1) {
|
|
109
|
+
listeners.splice(index, 1);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}, [state]);
|
|
113
|
+
return {
|
|
114
|
+
...state,
|
|
115
|
+
toast,
|
|
116
|
+
dismiss: (toastId) => dispatch({ type: "DISMISS_TOAST", toastId })
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { reducer, toast, useToast };
|
|
121
|
+
//# sourceMappingURL=use-toast.js.map
|
|
122
|
+
//# sourceMappingURL=use-toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-toast.ts"],"names":["toast","props"],"mappings":"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","file":"use-toast.js","sourcesContent":["\"use client\";\n\n// Inspired by react-hot-toast library\nimport * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"../ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n"]}
|