@myzbox/react-overlay 1.0.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/LICENSE +21 -0
- package/README.md +457 -0
- package/dist/index.d.ts +1 -0
- package/dist/react-overlay.css +1 -0
- package/dist/react-overlay.es.js +865 -0
- package/dist/react-overlay.umd.js +26 -0
- package/package.json +85 -0
- package/src/components/index.ts +11 -0
- package/src/components/modal/Modal.tsx +186 -0
- package/src/components/modal-variants/AlertModal.tsx +56 -0
- package/src/components/modal-variants/ConfirmModal.tsx +78 -0
- package/src/components/modal-variants/Drawer.tsx +51 -0
- package/src/components/popover/Popover.tsx +54 -0
- package/src/components/toast/Toast.tsx +61 -0
- package/src/components/toast/ToastProvider.tsx +71 -0
- package/src/components/toast/index.ts +3 -0
- package/src/components/toast/useToast.ts +48 -0
- package/src/components/tooltip/Tooltip.tsx +52 -0
- package/src/hooks/useClickOutside.ts +24 -0
- package/src/hooks/useDraggable.ts +75 -0
- package/src/hooks/useModal.ts +23 -0
- package/src/index.ts +8 -0
- package/src/styles/Modal.module.css +314 -0
- package/src/styles/ModalVariants.module.css +132 -0
- package/src/styles/Popover.module.css +70 -0
- package/src/styles/Toast.module.css +196 -0
- package/src/styles/Tooltip.module.css +50 -0
- package/src/styles/index.css +5 -0
- package/src/types/Modal.ts +100 -0
- package/src/types/Popover.ts +13 -0
- package/src/types/Toast.ts +19 -0
- package/src/types/Tooltip.ts +19 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 myzbox
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
# @myzbox/react-overlay
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@myzbox/react-overlay)
|
|
4
|
+
[](https://www.npmjs.com/package/@myzbox/react-overlay)
|
|
5
|
+
[](https://bundlephobia.com/package/@myzbox/react-overlay)
|
|
6
|
+
[](https://github.com/myzbox/react-overlay/blob/main/LICENSE)
|
|
7
|
+
|
|
8
|
+
A highly configurable, accessible, and senior-grade React overlay library. Built with TypeScript, Accessibility, and Performance in mind.
|
|
9
|
+
|
|
10
|
+
## Features
|
|
11
|
+
|
|
12
|
+
- 🎯 **Accessible**: Fully compliant with WAI-ARIA practices (focus trapping, aria attributes, keyboard navigation).
|
|
13
|
+
- 🎨 **Animations**: Built-in animations (Zoom, Fade, Slide Up/Down/Left/Right).
|
|
14
|
+
- 📱 **Responsive**: Mobile-friendly out of the box.
|
|
15
|
+
- 🖐 **Draggable**: Enable drag-and-drop support on modals.
|
|
16
|
+
- 🗄️ **Drawer Component**: Slide-out panels from any edge (Left, Right, Top, Bottom).
|
|
17
|
+
- 💡 **Tooltip Component**: Customizable tooltips with support for HTML content.
|
|
18
|
+
- 💬 **Popover Component**: Click-triggered interactive popups.
|
|
19
|
+
- 🍞 **Toast System**: Global notifications with stacking, positioning, and auto-close.
|
|
20
|
+
- 🌈 **Themable**: Configurable colors via CSS Variables.
|
|
21
|
+
- 🧩 **Variants**: Includes `AlertModal`, `ConfirmModal`, `Drawer`, `Tooltip`, `Popover`, and `Toast`.
|
|
22
|
+
- 🛠 **Customizable**: Extensive props for specific positioning, sizing, and styling.
|
|
23
|
+
- 📦 **Lightweight**: Minimal dependencies (`classnames`, `react`, `react-dom`).
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @myzbox/react-overlay
|
|
29
|
+
# or
|
|
30
|
+
yarn add @myzbox/react-overlay
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Ensure you have peer dependencies installed:
|
|
34
|
+
```bash
|
|
35
|
+
npm install react react-dom
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Basic Usage
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
// Complete bundle (Recommended)
|
|
42
|
+
import '@myzbox/react-overlay/dist/react-overlay.css';
|
|
43
|
+
|
|
44
|
+
// OR import all source modules at once
|
|
45
|
+
import '@myzbox/react-overlay/styles/index.css';
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
// 1. Wrap your app with ToastProvider
|
|
50
|
+
import { ToastProvider } from '@myzbox/react-overlay';
|
|
51
|
+
|
|
52
|
+
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
53
|
+
<ToastProvider>
|
|
54
|
+
<App />
|
|
55
|
+
</ToastProvider>
|
|
56
|
+
);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### `<Modal />`
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
import React, { useState } from 'react';
|
|
63
|
+
import { Modal, useModal } from '@myzbox/react-overlay';
|
|
64
|
+
|
|
65
|
+
const App = () => {
|
|
66
|
+
const { isOpen, open, close } = useModal();
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
<>
|
|
70
|
+
<button onClick={open}>Open Modal</button>
|
|
71
|
+
|
|
72
|
+
<Modal
|
|
73
|
+
isOpen={isOpen}
|
|
74
|
+
onClose={close}
|
|
75
|
+
title="Welcome"
|
|
76
|
+
position="center"
|
|
77
|
+
animation="zoom"
|
|
78
|
+
draggable // Enable drag
|
|
79
|
+
>
|
|
80
|
+
<p>This is a custom accessible modal.</p>
|
|
81
|
+
<div style={{ marginTop: '1rem', display: 'flex', justifyContent: 'flex-end' }}>
|
|
82
|
+
<button onClick={close}>Close</button>
|
|
83
|
+
</div>
|
|
84
|
+
</Modal>
|
|
85
|
+
</>
|
|
86
|
+
);
|
|
87
|
+
};
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### `<Tooltip />`
|
|
91
|
+
|
|
92
|
+
```tsx
|
|
93
|
+
import { Tooltip } from '@myzbox/react-overlay';
|
|
94
|
+
|
|
95
|
+
<Tooltip content="I am a simple tooltip" position="top">
|
|
96
|
+
<button>Hover me</button>
|
|
97
|
+
</Tooltip>
|
|
98
|
+
|
|
99
|
+
// With HTML content and custom width
|
|
100
|
+
<Tooltip
|
|
101
|
+
content={<strong>Bold content</strong>}
|
|
102
|
+
width={200}
|
|
103
|
+
position="right"
|
|
104
|
+
>
|
|
105
|
+
<button>HTML Tooltip</button>
|
|
106
|
+
</Tooltip>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### `<AlertModal />` - Simple Alerts
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
import { AlertModal, useModal } from '@myzbox/react-overlay';
|
|
113
|
+
|
|
114
|
+
const App = () => {
|
|
115
|
+
const { isOpen, open, close } = useModal();
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
<>
|
|
119
|
+
<button onClick={open}>Show Success Alert</button>
|
|
120
|
+
|
|
121
|
+
<AlertModal
|
|
122
|
+
isOpen={isOpen}
|
|
123
|
+
onClose={close}
|
|
124
|
+
type="success" // 'success' | 'error' | 'warning' | 'info'
|
|
125
|
+
message="Your changes have been saved successfully!"
|
|
126
|
+
okText="Got it"
|
|
127
|
+
onOk={() => console.log('OK clicked')}
|
|
128
|
+
/>
|
|
129
|
+
</>
|
|
130
|
+
);
|
|
131
|
+
};
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### `<ConfirmModal />` - Confirmation Dialogs
|
|
135
|
+
|
|
136
|
+
```tsx
|
|
137
|
+
import { ConfirmModal, useModal } from '@myzbox/react-overlay';
|
|
138
|
+
|
|
139
|
+
const App = () => {
|
|
140
|
+
const { isOpen, open, close } = useModal();
|
|
141
|
+
|
|
142
|
+
const handleDelete = async () => {
|
|
143
|
+
// Simulate async operation
|
|
144
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
145
|
+
console.log('Deleted!');
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
return (
|
|
149
|
+
<>
|
|
150
|
+
<button onClick={open}>Delete Item</button>
|
|
151
|
+
|
|
152
|
+
<ConfirmModal
|
|
153
|
+
isOpen={isOpen}
|
|
154
|
+
onClose={close}
|
|
155
|
+
message="Are you sure you want to delete this item? This action cannot be undone."
|
|
156
|
+
confirmText="Delete"
|
|
157
|
+
cancelText="Cancel"
|
|
158
|
+
isDestructive={true} // Red button for dangerous actions
|
|
159
|
+
onConfirm={handleDelete} // Supports async functions
|
|
160
|
+
onCancel={() => console.log('Cancelled')}
|
|
161
|
+
/>
|
|
162
|
+
</>
|
|
163
|
+
);
|
|
164
|
+
};
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### `<Drawer />` - Side Panels
|
|
168
|
+
|
|
169
|
+
```tsx
|
|
170
|
+
import { Drawer, useModal } from '@myzbox/react-overlay';
|
|
171
|
+
|
|
172
|
+
const App = () => {
|
|
173
|
+
const { isOpen, open, close } = useModal();
|
|
174
|
+
|
|
175
|
+
return (
|
|
176
|
+
<>
|
|
177
|
+
<button onClick={open}>Open Settings</button>
|
|
178
|
+
|
|
179
|
+
<Drawer
|
|
180
|
+
isOpen={isOpen}
|
|
181
|
+
onClose={close}
|
|
182
|
+
placement="right" // 'left' | 'right' | 'top' | 'bottom'
|
|
183
|
+
title="Settings"
|
|
184
|
+
>
|
|
185
|
+
<div>
|
|
186
|
+
<h3>Account Settings</h3>
|
|
187
|
+
<p>Configure your preferences here...</p>
|
|
188
|
+
</div>
|
|
189
|
+
</Drawer>
|
|
190
|
+
</>
|
|
191
|
+
);
|
|
192
|
+
};
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### `<Tooltip />` - Contextual Help
|
|
196
|
+
|
|
197
|
+
```tsx
|
|
198
|
+
import { Tooltip } from '@myzbox/react-overlay';
|
|
199
|
+
|
|
200
|
+
// Simple text tooltip
|
|
201
|
+
<Tooltip content="Click to copy to clipboard" position="top">
|
|
202
|
+
<button>Copy</button>
|
|
203
|
+
</Tooltip>
|
|
204
|
+
|
|
205
|
+
// Rich HTML content
|
|
206
|
+
<Tooltip
|
|
207
|
+
content={
|
|
208
|
+
<div>
|
|
209
|
+
<strong>Pro Tip:</strong>
|
|
210
|
+
<p>Hold Shift to select multiple items</p>
|
|
211
|
+
</div>
|
|
212
|
+
}
|
|
213
|
+
position="right"
|
|
214
|
+
delay={300}
|
|
215
|
+
width={250}
|
|
216
|
+
>
|
|
217
|
+
<span>ℹ️ Help</span>
|
|
218
|
+
</Tooltip>
|
|
219
|
+
|
|
220
|
+
// Icon with tooltip
|
|
221
|
+
<Tooltip content="This is a multi-line tooltip that provides detailed information about the feature">
|
|
222
|
+
<button>🔍</button>
|
|
223
|
+
</Tooltip>
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### `<Popover />` - Interactive Menus
|
|
227
|
+
|
|
228
|
+
```tsx
|
|
229
|
+
import { Popover } from '@myzbox/react-overlay';
|
|
230
|
+
|
|
231
|
+
// Simple content
|
|
232
|
+
<Popover content="Quick info here" position="bottom">
|
|
233
|
+
<button>Click Me</button>
|
|
234
|
+
</Popover>
|
|
235
|
+
|
|
236
|
+
// Interactive menu with render prop
|
|
237
|
+
<Popover
|
|
238
|
+
content={(close) => (
|
|
239
|
+
<div style={{ padding: '1rem' }}>
|
|
240
|
+
<h4>Actions</h4>
|
|
241
|
+
<button onClick={() => { console.log('Edit'); close(); }}>
|
|
242
|
+
Edit
|
|
243
|
+
</button>
|
|
244
|
+
<button onClick={() => { console.log('Delete'); close(); }}>
|
|
245
|
+
Delete
|
|
246
|
+
</button>
|
|
247
|
+
<button onClick={close}>Cancel</button>
|
|
248
|
+
</div>
|
|
249
|
+
)}
|
|
250
|
+
position="bottom"
|
|
251
|
+
width={200}
|
|
252
|
+
draggable // Make it draggable
|
|
253
|
+
>
|
|
254
|
+
<button>⋮ More Options</button>
|
|
255
|
+
</Popover>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### `useToast()` - Global Notifications
|
|
259
|
+
|
|
260
|
+
```tsx
|
|
261
|
+
import { useToast, ToastProvider } from '@myzbox/react-overlay';
|
|
262
|
+
|
|
263
|
+
// Wrap your app with ToastProvider first
|
|
264
|
+
function Root() {
|
|
265
|
+
return (
|
|
266
|
+
<ToastProvider>
|
|
267
|
+
<App />
|
|
268
|
+
</ToastProvider>
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
function App() {
|
|
273
|
+
const toast = useToast();
|
|
274
|
+
|
|
275
|
+
const showNotifications = () => {
|
|
276
|
+
// Simple usage
|
|
277
|
+
toast.success("Saved successfully!");
|
|
278
|
+
toast.error("Failed to save");
|
|
279
|
+
toast.warning("Please review your changes");
|
|
280
|
+
toast.info("New update available");
|
|
281
|
+
|
|
282
|
+
// Advanced with options
|
|
283
|
+
toast.success("File uploaded", {
|
|
284
|
+
position: "top-right", // 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'
|
|
285
|
+
duration: 5000, // milliseconds (0 = never auto-close)
|
|
286
|
+
delay: 500, // delay before showing
|
|
287
|
+
draggable: true // allow dragging
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
// Manual close (persist until user closes)
|
|
291
|
+
toast.info("Processing your request...", { duration: 0 });
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
return <button onClick={showNotifications}>Show Toasts</button>;
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Advanced: Draggable Modals
|
|
299
|
+
|
|
300
|
+
```tsx
|
|
301
|
+
import { Modal, useModal } from '@myzbox/react-overlay';
|
|
302
|
+
|
|
303
|
+
const App = () => {
|
|
304
|
+
const { isOpen, open, close } = useModal();
|
|
305
|
+
|
|
306
|
+
return (
|
|
307
|
+
<>
|
|
308
|
+
<button onClick={open}>Open Draggable Modal</button>
|
|
309
|
+
|
|
310
|
+
<Modal
|
|
311
|
+
isOpen={isOpen}
|
|
312
|
+
onClose={close}
|
|
313
|
+
title="Drag me around!"
|
|
314
|
+
draggable={true} // Enable dragging
|
|
315
|
+
position="center"
|
|
316
|
+
animation="zoom"
|
|
317
|
+
>
|
|
318
|
+
<p>You can drag this modal by its header!</p>
|
|
319
|
+
</Modal>
|
|
320
|
+
</>
|
|
321
|
+
);
|
|
322
|
+
};
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### `useToast()`
|
|
326
|
+
|
|
327
|
+
```tsx
|
|
328
|
+
import { useToast } from '@myzbox/react-overlay';
|
|
329
|
+
|
|
330
|
+
const MyComponent = () => {
|
|
331
|
+
const toast = useToast();
|
|
332
|
+
|
|
333
|
+
const handleClick = () => {
|
|
334
|
+
// Simple
|
|
335
|
+
toast.success("Operation saved!");
|
|
336
|
+
|
|
337
|
+
// Advanced
|
|
338
|
+
toast.error("Network Error", {
|
|
339
|
+
position: "bottom-right",
|
|
340
|
+
duration: 5000,
|
|
341
|
+
delay: 500, // Wait 500ms before showing
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
// Manual Close / Persistent
|
|
345
|
+
toast.info("Updating...", { duration: 0 }); // 0 = never close automatically
|
|
346
|
+
};
|
|
347
|
+
|
|
348
|
+
return <button onClick={handleClick}>Show Toast</button>;
|
|
349
|
+
};
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## Theming & Customization
|
|
353
|
+
|
|
354
|
+
Define these variables in your CSS (e.g., `:root`) to override default colors:
|
|
355
|
+
|
|
356
|
+
```css
|
|
357
|
+
:root {
|
|
358
|
+
/* Modal Backgrounds */
|
|
359
|
+
--rm-overlay-bg: rgba(0, 0, 0, 0.5);
|
|
360
|
+
--rm-modal-bg: #ffffff;
|
|
361
|
+
|
|
362
|
+
/* Text & Borders */
|
|
363
|
+
--rm-text-color: #374151;
|
|
364
|
+
--rm-title-color: #111827;
|
|
365
|
+
--rm-border-color: #e5e7eb;
|
|
366
|
+
|
|
367
|
+
/* Buttons */
|
|
368
|
+
--rm-btn-primary-bg: #2563eb;
|
|
369
|
+
--rm-btn-primary-hover: #1d4ed8;
|
|
370
|
+
--rm-btn-primary-text: #ffffff;
|
|
371
|
+
|
|
372
|
+
--rm-btn-destructive-bg: #dc2626;
|
|
373
|
+
--rm-btn-destructive-hover: #b91c1c;
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
## Components API
|
|
378
|
+
|
|
379
|
+
### `<Modal />`
|
|
380
|
+
|
|
381
|
+
| Prop | Type | Default | Description |
|
|
382
|
+
|------|------|---------|-------------|
|
|
383
|
+
| `isOpen` | boolean | required | Controls visibility |
|
|
384
|
+
| `onClose` | function | required | Callback when requesting close |
|
|
385
|
+
| `children` | ReactNode | required | Content of the modal |
|
|
386
|
+
| `draggable` | boolean | `false` | Enable drag functionality |
|
|
387
|
+
| `position` | 'center', 'top', etc. | 'center' | Position on screen |
|
|
388
|
+
| `size` | 'sm', 'md', 'lg', 'xl', 'full' | 'md' | Width size preset |
|
|
389
|
+
| `animation` | 'zoom', 'fade', 'slide-up'... | 'zoom' | Entry/Exit animation |
|
|
390
|
+
| `hideHeader` | boolean | `false` | Hides the header (title/close btn) |
|
|
391
|
+
|
|
392
|
+
### `<AlertModal />`
|
|
393
|
+
|
|
394
|
+
| Prop | Type | Default | Description |
|
|
395
|
+
|------|------|---------|-------------|
|
|
396
|
+
| `type` | 'success', 'error', 'warning', 'info' | 'info' | Visual style/icon |
|
|
397
|
+
| `message` | ReactNode | required | Alert content |
|
|
398
|
+
| `showHeader` | boolean | `true` | Show/Hide the header |
|
|
399
|
+
| `onOk` | function | - | Callback for OK button |
|
|
400
|
+
|
|
401
|
+
### `<Tooltip />`
|
|
402
|
+
|
|
403
|
+
| Prop | Type | Default | Description |
|
|
404
|
+
|------|------|---------|-------------|
|
|
405
|
+
| `children` | ReactNode | required | Trigger element |
|
|
406
|
+
| `content` | ReactNode | required | content of tooltip |
|
|
407
|
+
| `position` | 'top', 'bottom', 'left', 'right' | 'top' | Position relative to trigger |
|
|
408
|
+
| `delay` | number | 200 | Delay in ms before showing |
|
|
409
|
+
| `width` | string/number | - | Custom width |
|
|
410
|
+
| `height` | string/number | - | Custom height |
|
|
411
|
+
|
|
412
|
+
### `<Popover />`
|
|
413
|
+
|
|
414
|
+
| Prop | Type | Default | Description |
|
|
415
|
+
|------|------|---------|-------------|
|
|
416
|
+
| `children` | ReactNode | required | Trigger element (clickable) |
|
|
417
|
+
| `content` | ReactNode | required | Content of the popover |
|
|
418
|
+
| `position` | 'top', 'bottom', 'left', 'right' | 'bottom' | Position relative to trigger |
|
|
419
|
+
| `width` | string/number | - | Custom width |
|
|
420
|
+
|
|
421
|
+
## Community
|
|
422
|
+
|
|
423
|
+
- [Changelog](./CHANGELOG.md)
|
|
424
|
+
- [Roadmap](./ROADMAP.md)
|
|
425
|
+
- [Contributing](./CONTRIBUTING.md)
|
|
426
|
+
|
|
427
|
+
## 🤝 Contributing
|
|
428
|
+
|
|
429
|
+
Contributions are welcome!
|
|
430
|
+
|
|
431
|
+
Please read CONTRIBUTING.md before submitting a pull request.
|
|
432
|
+
|
|
433
|
+
## 👤 Maintainer
|
|
434
|
+
|
|
435
|
+
**Maintainer:** Mahantesh Teli
|
|
436
|
+
**Email:** <myzbox1@gmail.com>
|
|
437
|
+
**Organization:** myZbox
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
For questions, bug reports, or feature requests, please open an issue.
|
|
441
|
+
Direct emails are recommended only for security or private concerns.
|
|
442
|
+
|
|
443
|
+
## 📄 License
|
|
444
|
+
|
|
445
|
+
MIT © 2026 myzbox
|
|
446
|
+
|
|
447
|
+
## ⭐ Support
|
|
448
|
+
|
|
449
|
+
If this library helps you:
|
|
450
|
+
|
|
451
|
+
Star the repository ⭐
|
|
452
|
+
|
|
453
|
+
Share feedback
|
|
454
|
+
|
|
455
|
+
Open issues for bugs or feature requests
|
|
456
|
+
|
|
457
|
+
---
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--rm-overlay-bg: rgba(0, 0, 0, .5);--rm-modal-bg: #ffffff;--rm-modal-shadow: 0 4px 6px rgba(0, 0, 0, .1), 0 10px 15px rgba(0, 0, 0, .1);--rm-text-color: #374151;--rm-title-color: #111827;--rm-border-color: #e5e7eb;--rm-close-color: #374151;--rm-close-hover-bg: #f3f4f6;--rm-close-hover-color: #111827;--rm-footer-bg: #f9fafb}._overlay_1pta6_15{box-sizing:border-box!important;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:var(--rm-overlay-bg);display:flex;justify-content:center;align-items:center;z-index:1000;opacity:0;transition:opacity .2s ease-in-out;pointer-events:none}._overlay_1pta6_15._open_1pta6_32{opacity:1;pointer-events:auto}._overlay_1pta6_15._center_1pta6_38{justify-content:center;align-items:center;box-sizing:border-box}._overlay_1pta6_15._top_1pta6_44{align-items:flex-start;padding-top:2rem;box-sizing:border-box}._overlay_1pta6_15._bottom_1pta6_50{align-items:flex-end;padding-bottom:2rem}._overlay_1pta6_15._left_1pta6_55{justify-content:flex-start;height:100vh;box-sizing:border-box}._overlay_1pta6_15._right_1pta6_61{justify-content:flex-end;height:100vh}._overlay_1pta6_15._top-left_1pta6_66{justify-content:flex-start;align-items:flex-start;padding:2rem;box-sizing:border-box}._overlay_1pta6_15._top-right_1pta6_73{justify-content:flex-end;align-items:flex-start;padding:2rem;box-sizing:border-box}._overlay_1pta6_15._bottom-left_1pta6_80{justify-content:flex-start;align-items:flex-end;padding:2rem;box-sizing:border-box}._overlay_1pta6_15._bottom-right_1pta6_87{justify-content:flex-end;align-items:flex-end;padding:2rem;box-sizing:border-box}._modal_1pta6_94{box-sizing:border-box;background:var(--rm-modal-bg);border-radius:8px;box-shadow:var(--rm-modal-shadow);width:100%;max-width:100%;max-height:90vh;display:flex;flex-direction:column;position:relative;overflow:hidden;opacity:0;transform:scale(.95);transition:all .2s cubic-bezier(.4,0,.2,1)}._modal_1pta6_94 *,._modal_1pta6_94 *:before,._modal_1pta6_94 *:after{box-sizing:border-box}._modal_1pta6_94._open_1pta6_32{opacity:1;transform:scale(1);animation:_openScale_1pta6_1 .2s cubic-bezier(.4,0,.2,1)}._modal_1pta6_94._sm_1pta6_124{width:400px}._modal_1pta6_94._md_1pta6_128{width:600px}._modal_1pta6_94._lg_1pta6_132{width:800px}._modal_1pta6_94._xl_1pta6_136{width:1140px}._modal_1pta6_94._full_1pta6_140{width:98vw;height:96vh;max-height:96vh;border-radius:8px}._modal_1pta6_94._auto_1pta6_147{width:auto}@keyframes _openScale_1pta6_1{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}._modal_1pta6_94._slide-up_1pta6_164{transform:translateY(20px)}._modal_1pta6_94._slide-up_1pta6_164._open_1pta6_32{transform:translateY(0)}._modal_1pta6_94._slide-down_1pta6_172{transform:translateY(-20px)}._modal_1pta6_94._slide-down_1pta6_172._open_1pta6_32{transform:translateY(0)}._modal_1pta6_94._fade_1pta6_180,._modal_1pta6_94._fade_1pta6_180._open_1pta6_32{transform:none}._modal_1pta6_94._slide-left_1pta6_188{transform:translate(-20px)}._modal_1pta6_94._slide-left_1pta6_188._open_1pta6_32{transform:translate(0)}._modal_1pta6_94._slide-right_1pta6_196{transform:translate(20px)}._modal_1pta6_94._slide-right_1pta6_196._open_1pta6_32{transform:translate(0)}._modal_1pta6_94._drawer-slide-right_1pta6_205{transform:translate(100%)}._modal_1pta6_94._drawer-slide-right_1pta6_205._open_1pta6_32{transform:translate(0)}._modal_1pta6_94._drawer-slide-left_1pta6_213{transform:translate(-100%)}._modal_1pta6_94._drawer-slide-left_1pta6_213._open_1pta6_32{transform:translate(0)}._modal_1pta6_94._drawer-slide-up_1pta6_221{transform:translateY(100%)}._modal_1pta6_94._drawer-slide-up_1pta6_221._open_1pta6_32{transform:translateY(0)}._modal_1pta6_94._drawer-slide-down_1pta6_229{transform:translateY(-100%)}._modal_1pta6_94._drawer-slide-down_1pta6_229._open_1pta6_32{transform:translateY(0)}._header_1pta6_237{box-sizing:border-box;width:100%;padding:1rem 1.5rem;border-bottom:1px solid var(--rm-border-color);display:flex;justify-content:space-between;align-items:center}._header_1pta6_237._draggable_1pta6_247{cursor:move;-webkit-user-select:none;user-select:none}._title_1pta6_252{font-size:1.25rem;font-weight:600;color:var(--rm-title-color);margin:0}._closeButton_1pta6_259{box-sizing:border-box;background:transparent;border:none;cursor:pointer;width:32px;height:32px;border-radius:50%;color:var(--rm-close-color);transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;align-items:center;justify-content:center;margin-right:-4px;background-color:transparent}._closeButton_1pta6_259:hover{color:var(--rm-close-hover-color);transform:scale(1.15)}._closeButton_1pta6_259:active{transform:scale(.95)}._closeButton_1pta6_259 svg{width:16px;height:16px;stroke:currentColor;stroke-width:3;display:block;transition:transform .2s}._content_1pta6_294{box-sizing:border-box;width:100%;padding:1.5rem;overflow-y:auto;flex:1;color:var(--rm-text-color);font-size:1rem;line-height:1.5}._footer_1pta6_305{box-sizing:border-box;width:100%;padding:1rem 1.5rem;border-top:1px solid var(--rm-border-color);background-color:var(--rm-footer-bg);display:flex;justify-content:flex-end;gap:.75rem}:root{--rm-success-bg: #d1fae5;--rm-success-color: #065f46;--rm-error-bg: #fee2e2;--rm-error-color: #991b1b;--rm-warning-bg: #fef3c7;--rm-warning-color: #92400e;--rm-info-bg: #dbeafe;--rm-info-color: #1e40af;--rm-btn-primary-bg: #2563eb;--rm-btn-primary-hover: #1d4ed8;--rm-btn-primary-text: #ffffff;--rm-btn-default-bg: #ffffff;--rm-btn-default-border: #d1d5db;--rm-btn-default-text: #374151;--rm-btn-default-hover: #f3f4f6;--rm-btn-destructive-bg: #dc2626;--rm-btn-destructive-hover: #b91c1c}._drawer_43ihb_24{border-radius:0;max-height:none}._drawer_43ihb_24._left_43ihb_29,._drawer_43ihb_24._right_43ihb_30{height:100vh;border-radius:0}._drawer_43ihb_24._top_43ihb_35,._drawer_43ihb_24._bottom_43ihb_36{width:100vw;border-radius:0}._alertModal_43ihb_41{box-sizing:border-box;display:block}._alertContent_43ihb_47{display:flex;align-items:center;gap:1rem}._icon_43ihb_53{width:2rem;height:2rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0}._success_43ihb_64 ._icon_43ihb_53{background:var(--rm-success-bg);color:var(--rm-success-color)}._error_43ihb_69 ._icon_43ihb_53{background:var(--rm-error-bg);color:var(--rm-error-color)}._warning_43ihb_74 ._icon_43ihb_53{background:var(--rm-warning-bg);color:var(--rm-warning-color)}._info_43ihb_79 ._icon_43ihb_53{background:var(--rm-info-bg);color:var(--rm-info-color)}._okButton_43ihb_84,._confirmButton_43ihb_85{box-sizing:border-box;background:var(--rm-btn-primary-bg);color:var(--rm-btn-primary-text);border:none;padding:.5rem 1rem;border-radius:4px;cursor:pointer;font-weight:500}._okButton_43ihb_84:hover,._confirmButton_43ihb_85:hover{background:var(--rm-btn-primary-hover)}._okButton_43ihb_84:disabled,._confirmButton_43ihb_85:disabled{opacity:.5;cursor:not-allowed}._cancelButton_43ihb_107{box-sizing:border-box;background:var(--rm-btn-default-bg);border:1px solid var(--rm-btn-default-border);color:var(--rm-btn-default-text);padding:.5rem 1rem;border-radius:4px;cursor:pointer}._cancelButton_43ihb_107:hover{background:var(--rm-btn-default-hover)}._cancelButton_43ihb_107:disabled{opacity:.5;cursor:not-allowed}._destructive_43ihb_126{background:var(--rm-btn-destructive-bg)}._destructive_43ihb_126:hover{background:var(--rm-btn-destructive-hover)}._wrapper_1bfkp_1{position:relative;display:inline-block}._trigger_1bfkp_6{cursor:pointer;display:inline-block}._popover_1bfkp_11{position:absolute;background-color:#fff;color:#374151;padding:1rem;border-radius:8px;border:1px solid #e5e7eb;z-index:900;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;min-width:200px;animation:_fadeIn_1bfkp_1 .15s ease-out}._popover_1bfkp_11._draggable_1bfkp_24{cursor:move;-webkit-user-select:none;user-select:none}._popover_1bfkp_11._bottom_1bfkp_30{top:calc(100% + .5rem);left:50%;transform:translate(-50%);transform-origin:top center}._popover_1bfkp_11._top_1bfkp_37{bottom:calc(100% + .5rem);left:50%;transform:translate(-50%);transform-origin:bottom center}._popover_1bfkp_11._left_1bfkp_44{right:calc(100% + .5rem);top:50%;transform:translateY(-50%);transform-origin:center right}._popover_1bfkp_11._right_1bfkp_51{left:calc(100% + .5rem);top:50%;transform:translateY(-50%);transform-origin:center left}@keyframes _fadeIn_1bfkp_1{0%{opacity:0;transform:scale(.95);margin-top:-5px}to{opacity:1;transform:scale(1);margin-top:0}}._toast_15h14_1{display:flex;align-items:center;gap:12px;min-width:300px;max-width:400px;padding:12px 16px;border-radius:6px;background:#fff;box-shadow:0 4px 12px #00000026;margin-bottom:10px;pointer-events:auto;overflow:hidden;animation:_slideIn_15h14_1 .3s ease-out;transition:all .3s ease-in-out;position:relative}._toast_15h14_1._draggable_15h14_19{cursor:move;-webkit-user-select:none;user-select:none}._toast_15h14_1._exiting_15h14_24{opacity:0;transform:scale(.95);margin-bottom:-40px}._toast_15h14_1._success_15h14_31{border-left:4px solid #10b981}._toast_15h14_1._error_15h14_35{border-left:4px solid #ef4444}._toast_15h14_1._warning_15h14_39{border-left:4px solid #f59e0b}._toast_15h14_1._info_15h14_43{border-left:4px solid #3b82f6}._icon_15h14_47{font-weight:700;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;flex-shrink:0}._toast_15h14_1._success_15h14_31 ._icon_15h14_47{background-color:#ecfdf5;color:#059669}._toast_15h14_1._error_15h14_35 ._icon_15h14_47{background-color:#fef2f2;color:#dc2626}._toast_15h14_1._warning_15h14_39 ._icon_15h14_47{background-color:#fffbeb;color:#d97706}._toast_15h14_1._info_15h14_43 ._icon_15h14_47{background-color:#eff6ff;color:#2563eb}._content_15h14_78{flex:1;font-size:14px;color:#374151;line-height:1.4}._closeBtn_15h14_85{background:transparent;border:none;cursor:pointer;font-size:18px;color:#4b5563;padding:0;display:flex;font-weight:700;align-items:center;justify-content:center;width:24px;height:24px}._closeBtn_15h14_85:hover{color:#111827;background-color:#0000000d;border-radius:4px}@keyframes _slideIn_15h14_1{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}._container_15h14_119{position:fixed;z-index:9999;pointer-events:none;display:flex;flex-direction:column;padding:16px;gap:8px}._container_15h14_119._top-left_15h14_129{top:0;left:0;align-items:flex-start}._container_15h14_119._top-right_15h14_135{top:0;right:0;align-items:flex-end}._container_15h14_119._top-center_15h14_141{top:0;left:50%;transform:translate(-50%);align-items:center}._container_15h14_119._bottom-left_15h14_148{bottom:0;left:0;align-items:flex-start;flex-direction:column-reverse}._container_15h14_119._bottom-right_15h14_155{bottom:0;right:0;align-items:flex-end;flex-direction:column-reverse}._container_15h14_119._bottom-center_15h14_162{bottom:0;left:50%;transform:translate(-50%);align-items:center;flex-direction:column-reverse}._container_15h14_119._bottom-left_15h14_148 ._toast_15h14_1,._container_15h14_119._bottom-right_15h14_155 ._toast_15h14_1,._container_15h14_119._bottom-center_15h14_162 ._toast_15h14_1{margin-bottom:0;margin-top:10px;animation:_slideInBottom_15h14_1 .3s ease-out}._container_15h14_119._bottom-left_15h14_148 ._toast_15h14_1._exiting_15h14_24,._container_15h14_119._bottom-right_15h14_155 ._toast_15h14_1._exiting_15h14_24,._container_15h14_119._bottom-center_15h14_162 ._toast_15h14_1._exiting_15h14_24{margin-top:-40px;margin-bottom:0}@keyframes _slideInBottom_15h14_1{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}._wrapper_1dham_1{position:relative;display:inline-block}._tooltip_1dham_6{position:absolute;background-color:#111827;color:#fff;padding:.5rem .75rem;border-radius:4px;font-size:.875rem;z-index:1000;white-space:nowrap;pointer-events:none;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;opacity:0;animation:_fadeIn_1dham_1 .2s forwards}._tooltip_1dham_6._top_1dham_22{bottom:100%;left:50%;transform:translate(-50%) translateY(-.5rem)}._tooltip_1dham_6._bottom_1dham_28{top:100%;left:50%;transform:translate(-50%) translateY(.5rem)}._tooltip_1dham_6._left_1dham_34{right:100%;top:50%;transform:translateY(-50%) translate(-.5rem)}._tooltip_1dham_6._right_1dham_40{left:100%;top:50%;transform:translateY(-50%) translate(.5rem)}@keyframes _fadeIn_1dham_1{to{opacity:1}}
|