@moontra/moonui-pro 2.20.1 → 2.20.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.
- package/dist/index.d.ts +691 -261
- package/dist/index.mjs +7418 -4934
- package/package.json +11 -5
- package/plugin/index.d.ts +86 -0
- package/plugin/index.js +308 -0
- package/scripts/postbuild.js +27 -0
- package/scripts/postinstall.js +176 -23
- package/src/__tests__/use-intersection-observer.test.tsx +0 -216
- package/src/__tests__/use-local-storage.test.tsx +0 -174
- package/src/__tests__/use-pro-access.test.tsx +0 -183
- package/src/components/advanced-chart/advanced-chart.test.tsx +0 -281
- package/src/components/advanced-chart/index.tsx +0 -1242
- package/src/components/advanced-forms/index.tsx +0 -426
- package/src/components/animated-button/index.tsx +0 -385
- package/src/components/calendar/event-dialog.tsx +0 -372
- package/src/components/calendar/index.tsx +0 -1073
- package/src/components/calendar-pro/index.tsx +0 -1697
- package/src/components/color-picker/index.tsx +0 -432
- package/src/components/credit-card-input/index.tsx +0 -406
- package/src/components/dashboard/dashboard-grid.tsx +0 -462
- package/src/components/dashboard/demo.tsx +0 -425
- package/src/components/dashboard/index.tsx +0 -1046
- package/src/components/dashboard/time-range-picker.tsx +0 -336
- package/src/components/dashboard/types.ts +0 -222
- package/src/components/dashboard/widgets/activity-feed.tsx +0 -344
- package/src/components/dashboard/widgets/chart-widget.tsx +0 -418
- package/src/components/dashboard/widgets/metric-card.tsx +0 -343
- package/src/components/data-table/data-table-bulk-actions.tsx +0 -204
- package/src/components/data-table/data-table-column-toggle.tsx +0 -169
- package/src/components/data-table/data-table-export.ts +0 -156
- package/src/components/data-table/data-table-filter-drawer.tsx +0 -448
- package/src/components/data-table/data-table.test.tsx +0 -187
- package/src/components/data-table/index.tsx +0 -845
- package/src/components/draggable-list/index.tsx +0 -100
- package/src/components/enhanced/badge.tsx +0 -191
- package/src/components/enhanced/button.tsx +0 -362
- package/src/components/enhanced/card.tsx +0 -266
- package/src/components/enhanced/dialog.tsx +0 -246
- package/src/components/enhanced/index.ts +0 -4
- package/src/components/error-boundary/index.tsx +0 -109
- package/src/components/file-upload/file-upload.test.tsx +0 -243
- package/src/components/file-upload/index.tsx +0 -1660
- package/src/components/floating-action-button/index.tsx +0 -206
- package/src/components/form-wizard/form-wizard-context.tsx +0 -307
- package/src/components/form-wizard/form-wizard-navigation.tsx +0 -118
- package/src/components/form-wizard/form-wizard-progress.tsx +0 -298
- package/src/components/form-wizard/form-wizard-step.tsx +0 -111
- package/src/components/form-wizard/index.tsx +0 -102
- package/src/components/form-wizard/types.ts +0 -76
- package/src/components/gesture-drawer/index.tsx +0 -551
- package/src/components/github-stars/github-api.ts +0 -426
- package/src/components/github-stars/hooks.ts +0 -516
- package/src/components/github-stars/index.tsx +0 -375
- package/src/components/github-stars/types.ts +0 -148
- package/src/components/github-stars/variants.tsx +0 -513
- package/src/components/health-check/index.tsx +0 -439
- package/src/components/hover-card-3d/index.tsx +0 -530
- package/src/components/index.ts +0 -128
- package/src/components/internal/index.ts +0 -78
- package/src/components/kanban/add-card-modal.tsx +0 -502
- package/src/components/kanban/card-detail-modal.tsx +0 -761
- package/src/components/kanban/index.ts +0 -13
- package/src/components/kanban/kanban.tsx +0 -1684
- package/src/components/kanban/types.ts +0 -168
- package/src/components/lazy-component/index.tsx +0 -823
- package/src/components/license-error/index.tsx +0 -29
- package/src/components/magnetic-button/index.tsx +0 -167
- package/src/components/memory-efficient-data/index.tsx +0 -1016
- package/src/components/moonui-quiz-form/index.tsx +0 -817
- package/src/components/optimized-image/index.tsx +0 -425
- package/src/components/performance-debugger/index.tsx +0 -589
- package/src/components/performance-monitor/index.tsx +0 -794
- package/src/components/phone-number-input/index.tsx +0 -338
- package/src/components/pinch-zoom/index.tsx +0 -566
- package/src/components/quiz-form/index.tsx +0 -479
- package/src/components/rich-text-editor/index-old-backup.tsx +0 -437
- package/src/components/rich-text-editor/index.tsx +0 -2324
- package/src/components/rich-text-editor/slash-commands-extension.ts +0 -220
- package/src/components/rich-text-editor/slash-commands.css +0 -35
- package/src/components/rich-text-editor/table-styles.css +0 -65
- package/src/components/sidebar/index.tsx +0 -865
- package/src/components/spotlight-card/index.tsx +0 -191
- package/src/components/swipeable-card/index.tsx +0 -100
- package/src/components/timeline/index.tsx +0 -1148
- package/src/components/ui/accordion.tsx +0 -73
- package/src/components/ui/alert-dialog.tsx +0 -141
- package/src/components/ui/alert.tsx +0 -141
- package/src/components/ui/aspect-ratio.tsx +0 -245
- package/src/components/ui/avatar.tsx +0 -153
- package/src/components/ui/badge.tsx +0 -228
- package/src/components/ui/breadcrumb.tsx +0 -214
- package/src/components/ui/button.tsx +0 -222
- package/src/components/ui/calendar.tsx +0 -387
- package/src/components/ui/card.tsx +0 -214
- package/src/components/ui/checkbox.tsx +0 -259
- package/src/components/ui/collapsible.tsx +0 -135
- package/src/components/ui/color-picker.tsx +0 -97
- package/src/components/ui/command.tsx +0 -225
- package/src/components/ui/dialog.tsx +0 -334
- package/src/components/ui/dropdown-menu.tsx +0 -218
- package/src/components/ui/gesture-drawer.tsx +0 -11
- package/src/components/ui/hover-card.tsx +0 -29
- package/src/components/ui/index.ts +0 -190
- package/src/components/ui/input.tsx +0 -222
- package/src/components/ui/label.tsx +0 -29
- package/src/components/ui/lightbox.tsx +0 -606
- package/src/components/ui/magnetic-button.tsx +0 -129
- package/src/components/ui/media-gallery.tsx +0 -612
- package/src/components/ui/pagination.tsx +0 -123
- package/src/components/ui/popover.tsx +0 -185
- package/src/components/ui/progress.tsx +0 -30
- package/src/components/ui/radio-group.tsx +0 -257
- package/src/components/ui/scroll-area.tsx +0 -47
- package/src/components/ui/select.tsx +0 -374
- package/src/components/ui/separator.tsx +0 -145
- package/src/components/ui/sheet.tsx +0 -139
- package/src/components/ui/skeleton.tsx +0 -20
- package/src/components/ui/slider.tsx +0 -354
- package/src/components/ui/spotlight-card.tsx +0 -119
- package/src/components/ui/switch.tsx +0 -86
- package/src/components/ui/table.tsx +0 -329
- package/src/components/ui/tabs.tsx +0 -198
- package/src/components/ui/textarea.tsx +0 -28
- package/src/components/ui/toast.tsx +0 -317
- package/src/components/ui/toggle.tsx +0 -119
- package/src/components/ui/tooltip.tsx +0 -151
- package/src/components/virtual-list/index.tsx +0 -668
- package/src/hooks/use-chart.ts +0 -205
- package/src/hooks/use-data-table.ts +0 -182
- package/src/hooks/use-docs-pro-access.ts +0 -13
- package/src/hooks/use-license-check.ts +0 -65
- package/src/hooks/use-subscription.ts +0 -19
- package/src/hooks/use-toast.ts +0 -15
- package/src/index.ts +0 -14
- package/src/lib/ai-providers.ts +0 -377
- package/src/lib/component-metadata.ts +0 -18
- package/src/lib/micro-interactions.ts +0 -255
- package/src/lib/paddle.ts +0 -17
- package/src/lib/utils.ts +0 -6
- package/src/patterns/login-form/index.tsx +0 -276
- package/src/patterns/login-form/types.ts +0 -67
- package/src/setupTests.ts +0 -41
- package/src/styles/advanced-chart.css +0 -239
- package/src/styles/calendar.css +0 -35
- package/src/styles/design-system.css +0 -363
- package/src/styles/index.css +0 -85
- package/src/styles/tailwind.css +0 -7
- package/src/styles/tokens.css +0 -455
- package/src/types/moonui.d.ts +0 -22
- package/src/types/next-auth.d.ts +0 -21
- package/src/use-intersection-observer.tsx +0 -154
- package/src/use-local-storage.tsx +0 -71
- package/src/use-paddle.ts +0 -138
- package/src/use-performance-optimizer.ts +0 -389
- package/src/use-pro-access.ts +0 -141
- package/src/use-scroll-animation.ts +0 -219
- package/src/use-subscription.ts +0 -37
- package/src/use-toast.ts +0 -32
- package/src/utils/chart-helpers.ts +0 -357
- package/src/utils/cn.ts +0 -6
- package/src/utils/data-processing.ts +0 -151
- package/src/utils/license-validator.tsx +0 -183
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
import { render, screen, fireEvent, waitFor } from '@testing-library/react'
|
|
2
|
-
import '@testing-library/jest-dom'
|
|
3
|
-
import React from 'react'
|
|
4
|
-
import MoonUIFileUploadPro from './index'
|
|
5
|
-
|
|
6
|
-
// Mock FileReader
|
|
7
|
-
const mockFileReader = {
|
|
8
|
-
readAsDataURL: jest.fn(),
|
|
9
|
-
result: 'data:image/png;base64,mock-base64-data',
|
|
10
|
-
onload: null as any,
|
|
11
|
-
onerror: null as any,
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
global.FileReader = jest.fn(() => mockFileReader) as any
|
|
15
|
-
|
|
16
|
-
// Mock file objects
|
|
17
|
-
const createMockFile = (name: string, size: number, type: string) => {
|
|
18
|
-
const file = new File(['mock content'], name, { type })
|
|
19
|
-
Object.defineProperty(file, 'size', { value: size })
|
|
20
|
-
return file
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
describe('MoonUIFileUploadPro', () => {
|
|
24
|
-
beforeEach(() => {
|
|
25
|
-
jest.clearAllMocks()
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
it('renders without crashing', () => {
|
|
29
|
-
render(<MoonUIFileUploadPro />)
|
|
30
|
-
|
|
31
|
-
expect(screen.getByText('File Upload')).toBeInTheDocument()
|
|
32
|
-
expect(screen.getByText('Drag and drop files here, or click to select')).toBeInTheDocument()
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
it('renders with custom title and description', () => {
|
|
36
|
-
render(
|
|
37
|
-
<MoonUIFileUploadPro
|
|
38
|
-
accept="image/*"
|
|
39
|
-
maxSize={5}
|
|
40
|
-
multiple
|
|
41
|
-
/>
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
expect(screen.getByText('Upload up to 5 files (max 5MB each)')).toBeInTheDocument()
|
|
45
|
-
expect(screen.getByText('Accepted types: image/*')).toBeInTheDocument()
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
it('handles file selection', async () => {
|
|
49
|
-
const mockOnUpload = jest.fn()
|
|
50
|
-
render(<MoonUIFileUploadPro onUpload={mockOnUpload} />)
|
|
51
|
-
|
|
52
|
-
const file = createMockFile('test.jpg', 1024, 'image/jpeg')
|
|
53
|
-
const input = screen.getByRole('button', { hidden: true }) // Hidden file input
|
|
54
|
-
|
|
55
|
-
fireEvent.change(input, { target: { files: [file] } })
|
|
56
|
-
|
|
57
|
-
await waitFor(() => {
|
|
58
|
-
expect(mockOnUpload).toHaveBeenCalledWith([file])
|
|
59
|
-
})
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
it('validates file size', () => {
|
|
63
|
-
const mockOnUpload = jest.fn()
|
|
64
|
-
render(<MoonUIFileUploadPro onUpload={mockOnUpload} maxSize={1} />)
|
|
65
|
-
|
|
66
|
-
const file = createMockFile('large-file.jpg', 2 * 1024 * 1024, 'image/jpeg') // 2MB
|
|
67
|
-
const input = screen.getByRole('button', { hidden: true })
|
|
68
|
-
|
|
69
|
-
// Mock alert
|
|
70
|
-
global.alert = jest.fn()
|
|
71
|
-
|
|
72
|
-
fireEvent.change(input, { target: { files: [file] } })
|
|
73
|
-
|
|
74
|
-
expect(global.alert).toHaveBeenCalledWith('large-file.jpg: File size must be less than 1MB')
|
|
75
|
-
expect(mockOnUpload).not.toHaveBeenCalled()
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
it('validates file type', () => {
|
|
79
|
-
const mockOnUpload = jest.fn()
|
|
80
|
-
render(
|
|
81
|
-
<MoonUIFileUploadPro
|
|
82
|
-
onUpload={mockOnUpload}
|
|
83
|
-
allowedMimeTypes={['image/jpeg', 'image/png']}
|
|
84
|
-
/>
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
const file = createMockFile('document.pdf', 1024, 'application/pdf')
|
|
88
|
-
const input = screen.getByRole('button', { hidden: true })
|
|
89
|
-
|
|
90
|
-
global.alert = jest.fn()
|
|
91
|
-
|
|
92
|
-
fireEvent.change(input, { target: { files: [file] } })
|
|
93
|
-
|
|
94
|
-
expect(global.alert).toHaveBeenCalledWith('document.pdf: File type application/pdf is not allowed')
|
|
95
|
-
expect(mockOnUpload).not.toHaveBeenCalled()
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
it('handles multiple files', async () => {
|
|
99
|
-
const mockOnUpload = jest.fn()
|
|
100
|
-
render(<MoonUIFileUploadPro onUpload={mockOnUpload} multiple />)
|
|
101
|
-
|
|
102
|
-
const files = [
|
|
103
|
-
createMockFile('file1.jpg', 1024, 'image/jpeg'),
|
|
104
|
-
createMockFile('file2.png', 2048, 'image/png'),
|
|
105
|
-
]
|
|
106
|
-
const input = screen.getByRole('button', { hidden: true })
|
|
107
|
-
|
|
108
|
-
fireEvent.change(input, { target: { files } })
|
|
109
|
-
|
|
110
|
-
await waitFor(() => {
|
|
111
|
-
expect(mockOnUpload).toHaveBeenCalledWith(files)
|
|
112
|
-
})
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
it('respects maxFiles limit', () => {
|
|
116
|
-
const mockOnUpload = jest.fn()
|
|
117
|
-
render(<MoonUIFileUploadPro onUpload={mockOnUpload} maxFiles={2} />)
|
|
118
|
-
|
|
119
|
-
const files = [
|
|
120
|
-
createMockFile('file1.jpg', 1024, 'image/jpeg'),
|
|
121
|
-
createMockFile('file2.png', 1024, 'image/png'),
|
|
122
|
-
createMockFile('file3.gif', 1024, 'image/gif'),
|
|
123
|
-
]
|
|
124
|
-
const input = screen.getByRole('button', { hidden: true })
|
|
125
|
-
|
|
126
|
-
global.alert = jest.fn()
|
|
127
|
-
|
|
128
|
-
fireEvent.change(input, { target: { files } })
|
|
129
|
-
|
|
130
|
-
expect(global.alert).toHaveBeenCalledWith('Maximum 2 files allowed')
|
|
131
|
-
expect(mockOnUpload).not.toHaveBeenCalled()
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
it('handles drag and drop', () => {
|
|
135
|
-
const mockOnUpload = jest.fn()
|
|
136
|
-
render(<MoonUIFileUploadPro onUpload={mockOnUpload} />)
|
|
137
|
-
|
|
138
|
-
const dropZone = screen.getByText('Drag and drop files here, or click to select').closest('div')
|
|
139
|
-
const file = createMockFile('test.jpg', 1024, 'image/jpeg')
|
|
140
|
-
|
|
141
|
-
fireEvent.dragOver(dropZone!, {
|
|
142
|
-
dataTransfer: { files: [file] },
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
expect(dropZone).toHaveClass('border-primary')
|
|
146
|
-
|
|
147
|
-
fireEvent.drop(dropZone!, {
|
|
148
|
-
dataTransfer: { files: [file] },
|
|
149
|
-
})
|
|
150
|
-
|
|
151
|
-
expect(dropZone).not.toHaveClass('border-primary')
|
|
152
|
-
})
|
|
153
|
-
|
|
154
|
-
it('handles file removal', async () => {
|
|
155
|
-
const mockOnRemove = jest.fn()
|
|
156
|
-
render(<MoonUIFileUploadPro onRemove={mockOnRemove} />)
|
|
157
|
-
|
|
158
|
-
const file = createMockFile('test.jpg', 1024, 'image/jpeg')
|
|
159
|
-
const input = screen.getByRole('button', { hidden: true })
|
|
160
|
-
|
|
161
|
-
fireEvent.change(input, { target: { files: [file] } })
|
|
162
|
-
|
|
163
|
-
await waitFor(() => {
|
|
164
|
-
expect(screen.getByText('test.jpg')).toBeInTheDocument()
|
|
165
|
-
})
|
|
166
|
-
|
|
167
|
-
const removeButton = screen.getByRole('button', { name: /remove/i })
|
|
168
|
-
fireEvent.click(removeButton)
|
|
169
|
-
|
|
170
|
-
expect(mockOnRemove).toHaveBeenCalledWith(file)
|
|
171
|
-
})
|
|
172
|
-
|
|
173
|
-
it('shows progress during upload', async () => {
|
|
174
|
-
const mockOnUpload = jest.fn().mockResolvedValue(undefined)
|
|
175
|
-
render(<MoonUIFileUploadPro onUpload={mockOnUpload} />)
|
|
176
|
-
|
|
177
|
-
const file = createMockFile('test.jpg', 1024, 'image/jpeg')
|
|
178
|
-
const input = screen.getByRole('button', { hidden: true })
|
|
179
|
-
|
|
180
|
-
fireEvent.change(input, { target: { files: [file] } })
|
|
181
|
-
|
|
182
|
-
await waitFor(() => {
|
|
183
|
-
expect(screen.getByText('Uploading files...')).toBeInTheDocument()
|
|
184
|
-
})
|
|
185
|
-
})
|
|
186
|
-
|
|
187
|
-
it('handles upload success', async () => {
|
|
188
|
-
const mockOnUpload = jest.fn().mockResolvedValue(undefined)
|
|
189
|
-
render(<MoonUIFileUploadPro onUpload={mockOnUpload} />)
|
|
190
|
-
|
|
191
|
-
const file = createMockFile('test.jpg', 1024, 'image/jpeg')
|
|
192
|
-
const input = screen.getByRole('button', { hidden: true })
|
|
193
|
-
|
|
194
|
-
fireEvent.change(input, { target: { files: [file] } })
|
|
195
|
-
|
|
196
|
-
await waitFor(() => {
|
|
197
|
-
expect(screen.getByText('success')).toBeInTheDocument()
|
|
198
|
-
})
|
|
199
|
-
})
|
|
200
|
-
|
|
201
|
-
it('handles upload error', async () => {
|
|
202
|
-
const mockOnUpload = jest.fn().mockRejectedValue(new Error('Upload failed'))
|
|
203
|
-
render(<MoonUIFileUploadPro onUpload={mockOnUpload} />)
|
|
204
|
-
|
|
205
|
-
const file = createMockFile('test.jpg', 1024, 'image/jpeg')
|
|
206
|
-
const input = screen.getByRole('button', { hidden: true })
|
|
207
|
-
|
|
208
|
-
fireEvent.change(input, { target: { files: [file] } })
|
|
209
|
-
|
|
210
|
-
await waitFor(() => {
|
|
211
|
-
expect(screen.getByText('error')).toBeInTheDocument()
|
|
212
|
-
expect(screen.getByText('Upload failed')).toBeInTheDocument()
|
|
213
|
-
})
|
|
214
|
-
})
|
|
215
|
-
|
|
216
|
-
it('is disabled when disabled prop is true', () => {
|
|
217
|
-
render(<MoonUIFileUploadPro disabled />)
|
|
218
|
-
|
|
219
|
-
const dropZone = screen.getByText('Drag and drop files here, or click to select').closest('div')
|
|
220
|
-
expect(dropZone).toHaveClass('cursor-not-allowed')
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
it('applies custom className', () => {
|
|
224
|
-
render(<MoonUIFileUploadPro className="custom-upload" />)
|
|
225
|
-
|
|
226
|
-
const container = screen.getByText('File Upload').closest('div')
|
|
227
|
-
expect(container).toHaveClass('custom-upload')
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
it('formats file sizes correctly', () => {
|
|
231
|
-
render(<MoonUIFileUploadPro />)
|
|
232
|
-
|
|
233
|
-
// This would be tested through the file display after upload
|
|
234
|
-
// The formatFileSize function should be tested separately
|
|
235
|
-
})
|
|
236
|
-
|
|
237
|
-
it('displays correct file icons', () => {
|
|
238
|
-
render(<MoonUIFileUploadPro />)
|
|
239
|
-
|
|
240
|
-
// This would be tested through the file display after upload
|
|
241
|
-
// The getFileIcon function should be tested separately
|
|
242
|
-
})
|
|
243
|
-
})
|