@oneplatformdev/ui 0.1.99-beta.296 → 0.1.99-beta.298

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/.storybook/Wrappers.js.map +1 -1
  2. package/Accordion/Accordion.js.map +1 -1
  3. package/Alert/Alert.js.map +1 -1
  4. package/Alert/alertVariants.js.map +1 -1
  5. package/AlertDialog/AlertDialog.js.map +1 -1
  6. package/AlertDialog/AlertDialog.stories.js +2 -4
  7. package/AlertDialog/AlertDialog.stories.js.map +1 -1
  8. package/AlertDialog/AlertDialogRoot.js +18 -20
  9. package/AlertDialog/AlertDialogRoot.js.map +1 -1
  10. package/AreaChart/AreaChart.js.map +1 -1
  11. package/Aside/Aside.js.map +1 -1
  12. package/Aside/AsideSidebar.js.map +1 -1
  13. package/AspectRatio/AspectRatio.js.map +1 -1
  14. package/Avatar/Avatar.js.map +1 -1
  15. package/Badge/Badge.js.map +1 -1
  16. package/Badge/badgeVariants.js.map +1 -1
  17. package/Breadcrumb/Breadcrumb.js.map +1 -1
  18. package/Button/Button.js +10 -11
  19. package/Button/Button.js.map +1 -1
  20. package/Button/Button.stories.js.map +1 -1
  21. package/Button/Button.utils.js.map +1 -1
  22. package/Button/ButtonCounterBadge.js.map +1 -1
  23. package/Button/buttonVariants.js.map +1 -1
  24. package/ButtonIcon/ButtonIcon.js +19 -22
  25. package/ButtonIcon/ButtonIcon.js.map +1 -1
  26. package/ButtonIcon/ButtonIcon.stories.js.map +1 -1
  27. package/ButtonIcon/buttonIconVariants.js.map +1 -1
  28. package/CHANGELOG.md +3491 -3465
  29. package/Calendar/Calendar.js +4 -6
  30. package/Calendar/Calendar.js.map +1 -1
  31. package/Card/Card.js.map +1 -1
  32. package/Carousel/Carousel.js +6 -7
  33. package/Carousel/Carousel.js.map +1 -1
  34. package/Chart/Chart.js.map +1 -1
  35. package/Checkbox/Checkbox.js +0 -1
  36. package/Checkbox/Checkbox.js.map +1 -1
  37. package/Checkbox/Checkbox.stories.js.map +1 -1
  38. package/Collapsible/Collapsible.js.map +1 -1
  39. package/Combobox/Combobox.js +10 -10
  40. package/Combobox/Combobox.js.map +1 -1
  41. package/Combobox/Combobox.stories.js.map +1 -1
  42. package/Combobox/Combobox.types.js.map +1 -1
  43. package/Combobox/ComboboxOptionItem.js +18 -19
  44. package/Combobox/ComboboxOptionItem.js.map +1 -1
  45. package/Combobox/ComboboxRenderContent.js +26 -27
  46. package/Combobox/ComboboxRenderContent.js.map +1 -1
  47. package/Combobox/ComboboxRenderOptions.js +5 -5
  48. package/Combobox/ComboboxRenderOptions.js.map +1 -1
  49. package/Combobox/ComboboxRenderTrigger.js +18 -20
  50. package/Combobox/ComboboxRenderTrigger.js.map +1 -1
  51. package/Command/Command.js +21 -22
  52. package/Command/Command.js.map +1 -1
  53. package/ContextPopover/ContextDropdownMenu.js.map +1 -1
  54. package/ContextPopover/ContextPopover.js.map +1 -1
  55. package/ContextPopover/useContextPopoverHandler.js.map +1 -1
  56. package/DataTable/DataTable.js +24 -26
  57. package/DataTable/DataTable.js.map +1 -1
  58. package/DataTable/DataTableColumnFilter.js +6 -7
  59. package/DataTable/DataTableColumnFilter.js.map +1 -1
  60. package/DataTable/useDataTable.js.map +1 -1
  61. package/DatePicker/DatePicker.js +1 -2
  62. package/DatePicker/DatePicker.js.map +1 -1
  63. package/Dialog/Dialog.js +20 -21
  64. package/Dialog/Dialog.js.map +1 -1
  65. package/Dialog/Dialog.stories.js +14 -15
  66. package/Dialog/Dialog.stories.js.map +1 -1
  67. package/Dialog/DialogOverlayScope.js.map +1 -1
  68. package/Dialog/useDialogClosePosition.js.map +1 -1
  69. package/Drawer/Drawer.js.map +1 -1
  70. package/DropdownMenu/DropdownMenu.js.map +1 -1
  71. package/Dropzone/Dropzone.d.ts.map +1 -1
  72. package/Dropzone/Dropzone.js +300 -277
  73. package/Dropzone/Dropzone.js.map +1 -1
  74. package/Dropzone/Dropzone.stories.js +87 -66
  75. package/Dropzone/Dropzone.stories.js.map +1 -1
  76. package/Dropzone/Dropzone.types.d.ts +2 -1
  77. package/Dropzone/Dropzone.types.d.ts.map +1 -1
  78. package/Dropzone/Dropzone.types.js +17 -6
  79. package/Dropzone/Dropzone.types.js.map +1 -1
  80. package/Dropzone/DropzoneCoverPreview.d.ts +14 -0
  81. package/Dropzone/DropzoneCoverPreview.d.ts.map +1 -0
  82. package/Dropzone/DropzoneCoverPreview.js +56 -0
  83. package/Dropzone/DropzoneCoverPreview.js.map +1 -0
  84. package/Dropzone/DropzoneFileCard.d.ts +17 -0
  85. package/Dropzone/DropzoneFileCard.d.ts.map +1 -0
  86. package/Dropzone/DropzoneFileCard.js +39 -0
  87. package/Dropzone/DropzoneFileCard.js.map +1 -0
  88. package/Dropzone/DropzoneFilePreview.js.map +1 -1
  89. package/Dropzone/DropzoneSinglePickPreview.js +2 -3
  90. package/Dropzone/DropzoneSinglePickPreview.js.map +1 -1
  91. package/Dropzone/DropzoneUtils.js.map +1 -1
  92. package/Dropzone/index.js +6 -5
  93. package/Form/Form.js +14 -15
  94. package/Form/Form.js.map +1 -1
  95. package/Form/FormRenderControl.js +6 -7
  96. package/Form/FormRenderControl.js.map +1 -1
  97. package/Form/Form_old.js +4 -5
  98. package/Form/Form_old.js.map +1 -1
  99. package/FormCheckbox/FormCheckbox.js +4 -4
  100. package/FormCheckbox/FormCheckbox.js.map +1 -1
  101. package/FormCombobox/FormCombobox.js +4 -4
  102. package/FormCombobox/FormCombobox.js.map +1 -1
  103. package/FormDatePicker/FormDatePicker.js +4 -4
  104. package/FormDatePicker/FormDatePicker.js.map +1 -1
  105. package/FormDropzone/FormDropzone.js +3 -3
  106. package/FormDropzone/FormDropzone.js.map +1 -1
  107. package/FormInput/FormInput.js +6 -6
  108. package/FormInput/FormInput.js.map +1 -1
  109. package/FormInput/FormInput.stories.js.map +1 -1
  110. package/FormRadio/FormRadio.js.map +1 -1
  111. package/FormSelect/FormSelect.js +6 -9
  112. package/FormSelect/FormSelect.js.map +1 -1
  113. package/FormTextarea/FormTextarea.js +4 -4
  114. package/FormTextarea/FormTextarea.js.map +1 -1
  115. package/Header/Header.js.map +1 -1
  116. package/HoverCard/HoverCard.js.map +1 -1
  117. package/InfoBlock/InfoBlock.js.map +1 -1
  118. package/InfoBlock/InfoBlock.stories.js.map +1 -1
  119. package/InfoBlock/infoBlockVariants.js.map +1 -1
  120. package/Input/Input.js.map +1 -1
  121. package/Input/Input.stories.js.map +1 -1
  122. package/Input/inputVariants.js.map +1 -1
  123. package/InputOTP/InputOTP.d.ts.map +1 -1
  124. package/InputOTP/InputOTP.js.map +1 -1
  125. package/LICENSE +21 -21
  126. package/Label/Label.js.map +1 -1
  127. package/Label/labelVariants.js.map +1 -1
  128. package/LazyLoader/LazyLoader.js +4 -5
  129. package/LazyLoader/LazyLoader.js.map +1 -1
  130. package/LoadedIcon/LoadedIcon.js.map +1 -1
  131. package/LoadingMask/LoadingMask.js.map +1 -1
  132. package/LoadingMask/RenderLoadingMask.js.map +1 -1
  133. package/LoadingProgress/LoadingProgress.js.map +1 -1
  134. package/LoadingProgress/loadingProgressVariants.js.map +1 -1
  135. package/Menubar/Menubar.js.map +1 -1
  136. package/NavigationMenu/NavigationMenu.js.map +1 -1
  137. package/NavigationMenu/navigationMenuVariants.js.map +1 -1
  138. package/Pagination/Pagination.js +0 -1
  139. package/Pagination/Pagination.js.map +1 -1
  140. package/Popover/Popover.js.map +1 -1
  141. package/Progress/Progress.js.map +1 -1
  142. package/README.md +7 -7
  143. package/Radio/Radio.js.map +1 -1
  144. package/RadioGroup/RadioGroup.js.map +1 -1
  145. package/Resizable/Resizable.js.map +1 -1
  146. package/Resizable/Resizable.stories.js.map +1 -1
  147. package/ScrollArea/ScrollArea.js.map +1 -1
  148. package/Search/Search.js +9 -9
  149. package/Search/Search.js.map +1 -1
  150. package/Search/Search.stories.js.map +1 -1
  151. package/Select/Select.js +6 -7
  152. package/Select/Select.js.map +1 -1
  153. package/Select/Select.stories.js.map +1 -1
  154. package/Select/SelectRoot.js.map +1 -1
  155. package/Separator/Separator.js.map +1 -1
  156. package/Sheet/Sheet.js.map +1 -1
  157. package/Sidebar/Sidebar.js +20 -21
  158. package/Sidebar/Sidebar.js.map +1 -1
  159. package/Skeleton/Skeleton.js.map +1 -1
  160. package/Slider/Slider.js.map +1 -1
  161. package/Sonner/Sonner.js.map +1 -1
  162. package/Switch/Switch.js.map +1 -1
  163. package/Switch/Switch.stories.js.map +1 -1
  164. package/Table/Table.js.map +1 -1
  165. package/TablePagination/TablePagination.js +21 -26
  166. package/TablePagination/TablePagination.js.map +1 -1
  167. package/Tabs/Tabs.js.map +1 -1
  168. package/Tabs/TabsRoot.js.map +1 -1
  169. package/Textarea/Textarea.js.map +1 -1
  170. package/Textarea/Textarea.stories.js.map +1 -1
  171. package/Textarea/useAutosizeTextArea.js.map +1 -1
  172. package/Theme/ThemeModeToggle.js +3 -4
  173. package/Theme/ThemeModeToggle.js.map +1 -1
  174. package/Theme/ThemeProvider.js.map +1 -1
  175. package/Toast/Toast.js.map +1 -1
  176. package/Toast/toast.constants.js.map +1 -1
  177. package/Toast/toastVariants.js.map +1 -1
  178. package/Toast/useToast.js.map +1 -1
  179. package/Toaster/Toaster.js.map +1 -1
  180. package/Toggle/Toggle.js.map +1 -1
  181. package/ToggleGroup/ToggleGroup.js.map +1 -1
  182. package/Tooltip/Tooltip.js.map +1 -1
  183. package/Tooltip/TooltipRoot.js.map +1 -1
  184. package/Tooltip/tooltipVariants.js.map +1 -1
  185. package/index.js +304 -303
  186. package/package.json +4 -4
  187. package/vite-env.d.ts +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.stories.js","sources":["../../src/Dropzone/Dropzone.stories.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react';\n\nimport { Dropzone } from './Dropzone';\nimport {\n DEFAULT_DOCUMENT_TYPES,\n DEFAULT_IMAGES_TYPES,\n DropzoneValueItem,\n DEFAULT_VIDEO_TYPES,\n} from './Dropzone.types';\n\ntype ControlledProps = React.ComponentProps<typeof Dropzone> & {\n initialValue?: string[];\n};\n\nfunction ControlledDropzone({ initialValue = [], ...args }: ControlledProps) {\n const [value, setValue] = useState<DropzoneValueItem[]>(initialValue);\n\n return (\n <div className=\"w-full space-y-3\">\n <Dropzone\n {...args}\n value={value}\n onChangeValue={(items) => setValue(items)}\n />\n\n <div className=\"text-xs text-muted-foreground\">\n value:\n <pre className=\"mt-1 text-[11px] bg-muted p-2 rounded\">\n {JSON.stringify(value, null, 2)}\n </pre>\n </div>\n </div>\n );\n}\n\nconst meta = {\n title: 'Dropzone',\n component: Dropzone,\n parameters: {\n layout: 'centered',\n },\n args: {\n labelSelectedFiles: 'Selected files',\n labelFileTooLarge: 'File is too large',\n maxFiles: 1,\n maxSizeMB: 100,\n singlePick: true,\n className: 'w-full',\n },\n argTypes: {\n onChangeValue: { control: false },\n value: { control: false },\n },\n decorators: [\n (Story) => (\n <div className=\"p-6 w-[680px]\">\n <Story />\n </div>\n ),\n ],\n} satisfies Meta<typeof Dropzone>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Images: Story = {\n args: {\n acceptTypes: DEFAULT_IMAGES_TYPES,\n labelDropzonePrompt: 'Upload image',\n labelDropzoneSubPrompt: 'Formats: .jpg .jpeg .png .webp',\n maxSizeMB: 5,\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const Files: Story = {\n args: {\n acceptTypes: DEFAULT_DOCUMENT_TYPES,\n labelDropzonePrompt: 'Upload file',\n labelDropzoneSubPrompt: 'Formats: pdf, doc/docx, xls/xlsx, ppt/pptx, txt, csv',\n maxSizeMB: 100,\n maxFiles: 1,\n singlePick: true,\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const Videos: Story = {\n args: {\n acceptTypes: DEFAULT_VIDEO_TYPES,\n labelDropzonePrompt: 'Upload video',\n labelDropzoneSubPrompt: 'Formats: .mp4 .mov .avi .webm',\n maxSizeMB: 100,\n maxFiles: 1,\n singlePick: true,\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const VideoYoutubeLink: Story = {\n args: {\n acceptTypes: DEFAULT_VIDEO_TYPES,\n labelDropzonePrompt: 'Upload video',\n labelDropzoneSubPrompt: 'Formats: .mp4 .mov .avi .webm or YouTube URL as value',\n maxSizeMB: 100,\n maxFiles: 1,\n singlePick: true,\n },\n render: (args) => {\n const YoutubeStory = () => {\n const [url, setUrl] = useState('https://www.youtube.com/watch?v=dQw4w9WgXcQ');\n const value = url.trim() ? [url.trim()] : [];\n\n return (\n <div className=\"w-full space-y-3\">\n <input\n type=\"text\"\n value={url}\n onChange={(event) => setUrl(event.target.value)}\n placeholder=\"Paste YouTube URL\"\n className=\"w-full h-10 rounded-md border border-[#E4E4E7] px-3 text-sm\"\n />\n\n <Dropzone\n {...args}\n value={value}\n onChangeValue={(items) => {\n const next = items[0];\n if (typeof next === 'string') {\n setUrl(next);\n }\n }}\n />\n </div>\n );\n };\n\n return <YoutubeStory />;\n },\n};\n\nfunction UploadingDropzoneMock(args: React.ComponentProps<typeof Dropzone>) {\n const [value, setValue] = useState<DropzoneValueItem[]>([]);\n const [isUploading, setIsUploading] = useState(false);\n const [uploadProgress, setUploadProgress] = useState(0);\n const [uploadLoadedBytes, setUploadLoadedBytes] = useState(0);\n const [uploadTotalBytes, setUploadTotalBytes] = useState(0);\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearInterval(timerRef.current);\n };\n }, []);\n\n return (\n <div className=\"w-full space-y-3\">\n <Dropzone\n {...args}\n value={value}\n isUploading={isUploading}\n uploadProgress={uploadProgress}\n uploadLoadedBytes={uploadLoadedBytes}\n uploadTotalBytes={uploadTotalBytes}\n onCancelUpload={() => {\n if (timerRef.current) clearInterval(timerRef.current);\n timerRef.current = null;\n setIsUploading(false);\n setUploadProgress(0);\n setUploadLoadedBytes(0);\n setUploadTotalBytes(0);\n }}\n onChangeValue={(items) => {\n setValue(items);\n if (!items.length) return;\n\n if (timerRef.current) clearInterval(timerRef.current);\n timerRef.current = null;\n\n const selected = items[0];\n const totalBytes =\n selected instanceof File ? selected.size : 50 * 1024 * 1024;\n let loadedBytes = 0;\n\n setUploadTotalBytes(totalBytes);\n setUploadLoadedBytes(0);\n setUploadProgress(0);\n setIsUploading(true);\n\n timerRef.current = setInterval(() => {\n loadedBytes = Math.min(totalBytes, loadedBytes + totalBytes * 0.08);\n const progress = totalBytes ? Math.round((loadedBytes / totalBytes) * 100) : 0;\n\n setUploadLoadedBytes(loadedBytes);\n setUploadProgress(progress);\n\n if (loadedBytes >= totalBytes) {\n if (timerRef.current) clearInterval(timerRef.current);\n timerRef.current = null;\n setTimeout(() => setIsUploading(false), 350);\n }\n }, 250);\n }}\n />\n </div>\n );\n}\n\nexport const VideoRemoteUrl: Story = {\n args: {\n acceptTypes: DEFAULT_VIDEO_TYPES,\n labelDropzonePrompt: 'Upload video',\n labelDropzoneSubPrompt: 'Formats: .mp4 .mov .avi .webm',\n maxSizeMB: 100,\n maxFiles: 1,\n singlePick: true,\n },\n render: (args) => {\n const RemoteVideoStory = () => {\n const [url, setUrl] = useState(\n 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4'\n );\n const value: DropzoneValueItem[] = url.trim() ? [url.trim()] : [];\n\n return (\n <div className=\"w-full space-y-3\">\n <input\n type=\"text\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"Paste remote video URL (.mp4, .avi, .webm)\"\n className=\"w-full h-10 rounded-md border border-[#E4E4E7] px-3 text-sm\"\n />\n <Dropzone\n {...args}\n value={value}\n onChangeValue={(items) => {\n const next = items[0];\n setUrl(typeof next === 'string' ? next : '');\n }}\n />\n </div>\n );\n };\n\n return <RemoteVideoStory />;\n },\n};\n\nexport const VideoUploadingMock: Story = {\n args: {\n acceptTypes: DEFAULT_VIDEO_TYPES,\n labelDropzonePrompt: 'Upload video',\n labelDropzoneSubPrompt: 'Formats: .mp4 .mov .avi .webm',\n labelUploadingTitle: 'Завантаження відео...',\n labelUploadingHint: 'Будь ласка, не закривайте сторінку',\n labelUploadingActionCancel: 'Скасувати',\n maxSizeMB: 100,\n maxFiles: 1,\n singlePick: true,\n },\n render: (args) => <UploadingDropzoneMock {...args} />,\n};\n\nexport const MultiImagesPersistent: Story = {\n args: {\n acceptTypes: DEFAULT_IMAGES_TYPES,\n labelDropzonePrompt: 'Перетягніть фото або оберіть файли',\n labelDropzoneSubPrompt: 'JPG, PNG, WEBP, HEIC · до 5 МБ кожне',\n labelOrClickToSelect: 'Завантажити файл',\n maxSizeMB: 5,\n maxFiles: 20,\n singlePick: false,\n persistentDropzone: true,\n previewVariant: 'image-grid',\n className: 'w-[598px]',\n classNames: {\n previewWraper: 'w-[75px] h-[75px] rounded-[8px] border-0',\n previewImage: 'rounded-[8px] object-cover',\n },\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const MultiImagesCoverFirst: Story = {\n args: {\n acceptTypes: DEFAULT_IMAGES_TYPES,\n labelDropzonePrompt: 'Перетягніть фото або оберіть файли',\n labelDropzoneSubPrompt: 'JPG, PNG, WEBP, HEIC · до 5 МБ кожне',\n labelOrClickToSelect: 'Завантажити файл',\n maxSizeMB: 5,\n maxFiles: 20,\n singlePick: false,\n persistentDropzone: true,\n previewVariant: 'image-grid',\n coverFirstItem: true,\n className: 'w-[400px]',\n classNames: {\n previewWraper: 'w-[75px] h-[75px] rounded-[8px] border-0',\n previewImage: 'rounded-[8px] object-cover',\n },\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const MultilinePromptSpacing: Story = {\n args: {\n acceptTypes: DEFAULT_IMAGES_TYPES,\n labelDropzonePrompt: 'Додайте файл\\nПеретягніть сюди або натисніть',\n labelDropzoneSubPrompt: 'JPG, PNG, WEBP до 5 МБ кожне',\n labelOrClickToSelect: 'Обрати',\n maxSizeMB: 5,\n maxFiles: 1,\n singlePick: true,\n className: 'w-[598px]',\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const FileErrorTooLarge: Story = {\n args: {\n acceptTypes: DEFAULT_DOCUMENT_TYPES,\n labelDropzonePrompt: 'Upload file...',\n labelDropzoneSubPrompt: 'PDF only, max 1 MB',\n labelFileTooLarge: 'File is too large. Max size is 1 MB.',\n maxSizeMB: 1,\n maxFiles: 1,\n singlePick: true,\n className: 'w-[598px]',\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const FileErrorInvalidType: Story = {\n args: {\n acceptTypes: ['application/pdf'],\n labelDropzonePrompt: 'Upload file...',\n labelDropzoneSubPrompt: 'Only PDF is supported',\n labelInvalidFileType: 'Invalid file type. Please upload a PDF file.',\n maxSizeMB: 5,\n maxFiles: 1,\n singlePick: true,\n className: 'w-[598px]',\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const PhotoErrorTooLarge: Story = {\n args: {\n acceptTypes: DEFAULT_IMAGES_TYPES,\n labelDropzonePrompt: 'Upload photo...',\n labelDropzoneSubPrompt: 'JPG/PNG/WEBP, max 1 MB',\n labelFileTooLarge: 'Photo is too large. Max size is 1 MB.',\n maxSizeMB: 1,\n maxFiles: 1,\n singlePick: true,\n className: 'w-[598px]',\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const PhotoErrorInvalidType: Story = {\n args: {\n acceptTypes: DEFAULT_IMAGES_TYPES,\n labelDropzonePrompt: 'Upload photo...',\n labelDropzoneSubPrompt: 'Only image files are supported',\n labelInvalidFileType: 'Invalid file type. Please upload an image file.',\n maxSizeMB: 5,\n maxFiles: 1,\n singlePick: true,\n className: 'w-[598px]',\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const PhotosMultiErrorTooLarge: Story = {\n args: {\n acceptTypes: DEFAULT_IMAGES_TYPES,\n labelDropzonePrompt: 'Drag photos or choose files',\n labelDropzoneSubPrompt: 'JPG, PNG, WEBP · max 1 MB each',\n labelFileTooLarge: 'One or more photos are too large. Max size is 1 MB each.',\n maxSizeMB: 1,\n maxFiles: 20,\n singlePick: false,\n persistentDropzone: true,\n previewVariant: 'image-grid',\n className: 'w-[598px]',\n classNames: {\n previewWraper: 'w-[75px] h-[75px] rounded-[8px] border-0',\n previewImage: 'rounded-[8px] object-cover',\n },\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const PhotosMultiErrorInvalidType: Story = {\n args: {\n acceptTypes: DEFAULT_IMAGES_TYPES,\n labelDropzonePrompt: 'Drag photos or choose files',\n labelDropzoneSubPrompt: 'Only image files are supported',\n labelInvalidFileType: 'One or more files have invalid type.',\n maxSizeMB: 5,\n maxFiles: 20,\n singlePick: false,\n persistentDropzone: true,\n previewVariant: 'image-grid',\n className: 'w-[598px]',\n classNames: {\n previewWraper: 'w-[75px] h-[75px] rounded-[8px] border-0',\n previewImage: 'rounded-[8px] object-cover',\n },\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const VideoErrorTooLarge: Story = {\n args: {\n acceptTypes: DEFAULT_VIDEO_TYPES,\n labelDropzonePrompt: 'Upload video...',\n labelDropzoneSubPrompt: 'MP4/MOV/AVI/WEBM, max 1 MB',\n labelFileTooLarge: 'Video is too large. Max size is 1 MB.',\n maxSizeMB: 1,\n maxFiles: 1,\n singlePick: true,\n className: 'w-[598px]',\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n\nexport const VideoErrorInvalidType: Story = {\n args: {\n acceptTypes: DEFAULT_VIDEO_TYPES,\n labelDropzonePrompt: 'Upload video...',\n labelDropzoneSubPrompt: 'Only video files are supported',\n labelInvalidFileType: 'Invalid file type. Please upload a video file.',\n maxSizeMB: 100,\n maxFiles: 1,\n singlePick: true,\n className: 'w-[598px]',\n },\n render: (args) => <ControlledDropzone {...args} />,\n};\n"],"names":["ControlledDropzone","initialValue","args","value","setValue","useState","jsxs","jsx","Dropzone","items","meta","Story","Images","DEFAULT_IMAGES_TYPES","Files","DEFAULT_DOCUMENT_TYPES","Videos","DEFAULT_VIDEO_TYPES","VideoYoutubeLink","url","setUrl","event","next","UploadingDropzoneMock","isUploading","setIsUploading","uploadProgress","setUploadProgress","uploadLoadedBytes","setUploadLoadedBytes","uploadTotalBytes","setUploadTotalBytes","timerRef","useRef","useEffect","selected","totalBytes","loadedBytes","progress","VideoRemoteUrl","e","VideoUploadingMock","MultiImagesPersistent","MultiImagesCoverFirst","MultilinePromptSpacing","FileErrorTooLarge","FileErrorInvalidType","PhotoErrorTooLarge","PhotoErrorInvalidType","PhotosMultiErrorTooLarge","PhotosMultiErrorInvalidType","VideoErrorTooLarge","VideoErrorInvalidType"],"mappings":"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"}
1
+ {"version":3,"file":"Dropzone.stories.js","sources":["../../src/Dropzone/Dropzone.stories.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\r\nimport type { Meta, StoryObj } from '@storybook/react';\r\n\r\nimport { Dropzone } from './Dropzone';\r\nimport {\r\n DEFAULT_AUDIO_TYPES,\r\n DEFAULT_DOCUMENT_TYPES,\r\n DEFAULT_IMAGES_TYPES,\r\n DropzoneValueItem,\r\n DEFAULT_VIDEO_TYPES,\r\n} from './Dropzone.types';\r\n\r\ntype ControlledProps = React.ComponentProps<typeof Dropzone> & {\r\n initialValue?: string[];\r\n};\r\n\r\nfunction ControlledDropzone({ initialValue = [], ...args }: ControlledProps) {\r\n const [value, setValue] = useState<DropzoneValueItem[]>(initialValue);\r\n\r\n return (\r\n <div className=\"w-full space-y-3\">\r\n <Dropzone\r\n {...args}\r\n value={value}\r\n onChangeValue={(items) => setValue(items)}\r\n />\r\n\r\n <div className=\"text-xs text-muted-foreground\">\r\n value:\r\n <pre className=\"mt-1 text-[11px] bg-muted p-2 rounded\">\r\n {JSON.stringify(value, null, 2)}\r\n </pre>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst meta = {\r\n title: 'Dropzone',\r\n component: Dropzone,\r\n parameters: {\r\n layout: 'centered',\r\n },\r\n args: {\r\n labelSelectedFiles: 'Selected files',\r\n labelFileTooLarge: 'File is too large',\r\n maxFiles: 1,\r\n maxSizeMB: 100,\r\n singlePick: true,\r\n className: 'w-full',\r\n },\r\n argTypes: {\r\n onChangeValue: { control: false },\r\n value: { control: false },\r\n },\r\n decorators: [\r\n (Story) => (\r\n <div className=\"p-6 w-[680px]\">\r\n <Story />\r\n </div>\r\n ),\r\n ],\r\n} satisfies Meta<typeof Dropzone>;\r\n\r\nexport default meta;\r\n\r\ntype Story = StoryObj<typeof meta>;\r\n\r\nexport const Images: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_IMAGES_TYPES,\r\n labelDropzonePrompt: 'Upload image',\r\n labelDropzoneSubPrompt: 'Formats: .jpg .jpeg .png .webp',\r\n maxSizeMB: 5,\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const Files: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_DOCUMENT_TYPES,\r\n labelDropzonePrompt: 'Upload file',\r\n labelDropzoneSubPrompt: 'Formats: pdf, doc/docx, xls/xlsx, ppt/pptx, txt, csv',\r\n maxSizeMB: 100,\r\n maxFiles: 1,\r\n singlePick: true,\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const Videos: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_VIDEO_TYPES,\r\n labelDropzonePrompt: 'Upload video',\r\n labelDropzoneSubPrompt: 'Formats: .mp4 .mov .avi .webm',\r\n maxSizeMB: 100,\r\n maxFiles: 1,\r\n singlePick: true,\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const VideoYoutubeLink: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_VIDEO_TYPES,\r\n labelDropzonePrompt: 'Upload video',\r\n labelDropzoneSubPrompt: 'Formats: .mp4 .mov .avi .webm or YouTube URL as value',\r\n maxSizeMB: 100,\r\n maxFiles: 1,\r\n singlePick: true,\r\n },\r\n render: (args) => {\r\n const YoutubeStory = () => {\r\n const [url, setUrl] = useState('https://www.youtube.com/watch?v=dQw4w9WgXcQ');\r\n const value = url.trim() ? [url.trim()] : [];\r\n\r\n return (\r\n <div className=\"w-full space-y-3\">\r\n <input\r\n type=\"text\"\r\n value={url}\r\n onChange={(event) => setUrl(event.target.value)}\r\n placeholder=\"Paste YouTube URL\"\r\n className=\"w-full h-10 rounded-md border border-[#E4E4E7] px-3 text-sm\"\r\n />\r\n\r\n <Dropzone\r\n {...args}\r\n value={value}\r\n onChangeValue={(items) => {\r\n const next = items[0];\r\n if (typeof next === 'string') {\r\n setUrl(next);\r\n }\r\n }}\r\n />\r\n </div>\r\n );\r\n };\r\n\r\n return <YoutubeStory />;\r\n },\r\n};\r\n\r\nfunction UploadingDropzoneMock(args: React.ComponentProps<typeof Dropzone>) {\r\n const [value, setValue] = useState<DropzoneValueItem[]>([]);\r\n const [isUploading, setIsUploading] = useState(false);\r\n const [uploadProgress, setUploadProgress] = useState(0);\r\n const [uploadLoadedBytes, setUploadLoadedBytes] = useState(0);\r\n const [uploadTotalBytes, setUploadTotalBytes] = useState(0);\r\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (timerRef.current) clearInterval(timerRef.current);\r\n };\r\n }, []);\r\n\r\n return (\r\n <div className=\"w-full space-y-3\">\r\n <Dropzone\r\n {...args}\r\n value={value}\r\n isUploading={isUploading}\r\n uploadProgress={uploadProgress}\r\n uploadLoadedBytes={uploadLoadedBytes}\r\n uploadTotalBytes={uploadTotalBytes}\r\n onCancelUpload={() => {\r\n if (timerRef.current) clearInterval(timerRef.current);\r\n timerRef.current = null;\r\n setIsUploading(false);\r\n setUploadProgress(0);\r\n setUploadLoadedBytes(0);\r\n setUploadTotalBytes(0);\r\n }}\r\n onChangeValue={(items) => {\r\n setValue(items);\r\n if (!items.length) return;\r\n\r\n if (timerRef.current) clearInterval(timerRef.current);\r\n timerRef.current = null;\r\n\r\n const selected = items[0];\r\n const totalBytes =\r\n selected instanceof File ? selected.size : 50 * 1024 * 1024;\r\n let loadedBytes = 0;\r\n\r\n setUploadTotalBytes(totalBytes);\r\n setUploadLoadedBytes(0);\r\n setUploadProgress(0);\r\n setIsUploading(true);\r\n\r\n timerRef.current = setInterval(() => {\r\n loadedBytes = Math.min(totalBytes, loadedBytes + totalBytes * 0.08);\r\n const progress = totalBytes ? Math.round((loadedBytes / totalBytes) * 100) : 0;\r\n\r\n setUploadLoadedBytes(loadedBytes);\r\n setUploadProgress(progress);\r\n\r\n if (loadedBytes >= totalBytes) {\r\n if (timerRef.current) clearInterval(timerRef.current);\r\n timerRef.current = null;\r\n setTimeout(() => setIsUploading(false), 350);\r\n }\r\n }, 250);\r\n }}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport const VideoRemoteUrl: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_VIDEO_TYPES,\r\n labelDropzonePrompt: 'Upload video',\r\n labelDropzoneSubPrompt: 'Formats: .mp4 .mov .avi .webm',\r\n maxSizeMB: 100,\r\n maxFiles: 1,\r\n singlePick: true,\r\n },\r\n render: (args) => {\r\n const RemoteVideoStory = () => {\r\n const [url, setUrl] = useState(\r\n 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4'\r\n );\r\n const value: DropzoneValueItem[] = url.trim() ? [url.trim()] : [];\r\n\r\n return (\r\n <div className=\"w-full space-y-3\">\r\n <input\r\n type=\"text\"\r\n value={url}\r\n onChange={(e) => setUrl(e.target.value)}\r\n placeholder=\"Paste remote video URL (.mp4, .avi, .webm)\"\r\n className=\"w-full h-10 rounded-md border border-[#E4E4E7] px-3 text-sm\"\r\n />\r\n <Dropzone\r\n {...args}\r\n value={value}\r\n onChangeValue={(items) => {\r\n const next = items[0];\r\n setUrl(typeof next === 'string' ? next : '');\r\n }}\r\n />\r\n </div>\r\n );\r\n };\r\n\r\n return <RemoteVideoStory />;\r\n },\r\n};\r\n\r\nexport const VideoUploadingMock: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_VIDEO_TYPES,\r\n labelDropzonePrompt: 'Upload video',\r\n labelDropzoneSubPrompt: 'Formats: .mp4 .mov .avi .webm',\r\n labelUploadingTitle: 'Завантаження відео...',\r\n labelUploadingHint: 'Будь ласка, не закривайте сторінку',\r\n labelUploadingActionCancel: 'Скасувати',\r\n maxSizeMB: 100,\r\n maxFiles: 1,\r\n singlePick: true,\r\n },\r\n render: (args) => <UploadingDropzoneMock {...args} />,\r\n};\r\n\r\nexport const MultiImagesPersistent: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_IMAGES_TYPES,\r\n labelDropzonePrompt: 'Перетягніть фото або оберіть файли',\r\n labelDropzoneSubPrompt: 'JPG, PNG, WEBP, HEIC · до 5 МБ кожне',\r\n labelOrClickToSelect: 'Завантажити файл',\r\n maxSizeMB: 5,\r\n maxFiles: 20,\r\n singlePick: false,\r\n persistentDropzone: true,\r\n previewVariant: 'image-grid',\r\n className: 'w-[598px]',\r\n classNames: {\r\n previewWraper: 'w-[75px] h-[75px] rounded-[8px] border-0',\r\n previewImage: 'rounded-[8px] object-cover',\r\n },\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const MultiFilesList: Story = {\r\n args: {\r\n acceptTypes: [\r\n ...DEFAULT_DOCUMENT_TYPES,\r\n ...DEFAULT_IMAGES_TYPES,\r\n ...DEFAULT_VIDEO_TYPES,\r\n ...DEFAULT_AUDIO_TYPES,\r\n ],\r\n labelDropzonePrompt: 'Перетягніть файли або оберіть',\r\n labelDropzoneSubPrompt:\r\n 'PDF, DOC/DOCX, XLS/XLSX, зображення, відео, аудіо · до 50 МБ кожне',\r\n labelOrClickToSelect: 'Завантажити файл',\r\n labelSelectedFiles: 'Обрані файли',\r\n maxSizeMB: 50,\r\n maxFiles: 4,\r\n singlePick: false,\r\n persistentDropzone: true,\r\n previewVariant: 'file-list',\r\n className: 'w-[598px]',\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const MultiImagesCoverFirst: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_IMAGES_TYPES,\r\n labelDropzonePrompt: 'Перетягніть фото або оберіть файли',\r\n labelDropzoneSubPrompt: 'JPG, PNG, WEBP, HEIC · до 5 МБ кожне',\r\n labelOrClickToSelect: 'Завантажити файл',\r\n maxSizeMB: 5,\r\n maxFiles: 20,\r\n singlePick: false,\r\n persistentDropzone: true,\r\n previewVariant: 'image-grid',\r\n coverFirstItem: true,\r\n className: 'w-[400px]',\r\n classNames: {\r\n previewWraper: 'w-[75px] h-[75px] rounded-[8px] border-0',\r\n previewImage: 'rounded-[8px] object-cover',\r\n },\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const MultilinePromptSpacing: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_IMAGES_TYPES,\r\n labelDropzonePrompt: 'Додайте файл\\nПеретягніть сюди або натисніть',\r\n labelDropzoneSubPrompt: 'JPG, PNG, WEBP до 5 МБ кожне',\r\n labelOrClickToSelect: 'Обрати',\r\n maxSizeMB: 5,\r\n maxFiles: 1,\r\n singlePick: true,\r\n className: 'w-[598px]',\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const FileErrorTooLarge: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_DOCUMENT_TYPES,\r\n labelDropzonePrompt: 'Upload file...',\r\n labelDropzoneSubPrompt: 'PDF only, max 1 MB',\r\n labelFileTooLarge: 'File is too large. Max size is 1 MB.',\r\n maxSizeMB: 1,\r\n maxFiles: 1,\r\n singlePick: true,\r\n className: 'w-[598px]',\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const FileErrorInvalidType: Story = {\r\n args: {\r\n acceptTypes: ['application/pdf'],\r\n labelDropzonePrompt: 'Upload file...',\r\n labelDropzoneSubPrompt: 'Only PDF is supported',\r\n labelInvalidFileType: 'Invalid file type. Please upload a PDF file.',\r\n maxSizeMB: 5,\r\n maxFiles: 1,\r\n singlePick: true,\r\n className: 'w-[598px]',\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const PhotoErrorTooLarge: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_IMAGES_TYPES,\r\n labelDropzonePrompt: 'Upload photo...',\r\n labelDropzoneSubPrompt: 'JPG/PNG/WEBP, max 1 MB',\r\n labelFileTooLarge: 'Photo is too large. Max size is 1 MB.',\r\n maxSizeMB: 1,\r\n maxFiles: 1,\r\n singlePick: true,\r\n className: 'w-[598px]',\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const PhotoErrorInvalidType: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_IMAGES_TYPES,\r\n labelDropzonePrompt: 'Upload photo...',\r\n labelDropzoneSubPrompt: 'Only image files are supported',\r\n labelInvalidFileType: 'Invalid file type. Please upload an image file.',\r\n maxSizeMB: 5,\r\n maxFiles: 1,\r\n singlePick: true,\r\n className: 'w-[598px]',\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const PhotosMultiErrorTooLarge: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_IMAGES_TYPES,\r\n labelDropzonePrompt: 'Drag photos or choose files',\r\n labelDropzoneSubPrompt: 'JPG, PNG, WEBP · max 1 MB each',\r\n labelFileTooLarge: 'One or more photos are too large. Max size is 1 MB each.',\r\n maxSizeMB: 1,\r\n maxFiles: 20,\r\n singlePick: false,\r\n persistentDropzone: true,\r\n previewVariant: 'image-grid',\r\n className: 'w-[598px]',\r\n classNames: {\r\n previewWraper: 'w-[75px] h-[75px] rounded-[8px] border-0',\r\n previewImage: 'rounded-[8px] object-cover',\r\n },\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const PhotosMultiErrorInvalidType: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_IMAGES_TYPES,\r\n labelDropzonePrompt: 'Drag photos or choose files',\r\n labelDropzoneSubPrompt: 'Only image files are supported',\r\n labelInvalidFileType: 'One or more files have invalid type.',\r\n maxSizeMB: 5,\r\n maxFiles: 20,\r\n singlePick: false,\r\n persistentDropzone: true,\r\n previewVariant: 'image-grid',\r\n className: 'w-[598px]',\r\n classNames: {\r\n previewWraper: 'w-[75px] h-[75px] rounded-[8px] border-0',\r\n previewImage: 'rounded-[8px] object-cover',\r\n },\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const VideoErrorTooLarge: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_VIDEO_TYPES,\r\n labelDropzonePrompt: 'Upload video...',\r\n labelDropzoneSubPrompt: 'MP4/MOV/AVI/WEBM, max 1 MB',\r\n labelFileTooLarge: 'Video is too large. Max size is 1 MB.',\r\n maxSizeMB: 1,\r\n maxFiles: 1,\r\n singlePick: true,\r\n className: 'w-[598px]',\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n\r\nexport const VideoErrorInvalidType: Story = {\r\n args: {\r\n acceptTypes: DEFAULT_VIDEO_TYPES,\r\n labelDropzonePrompt: 'Upload video...',\r\n labelDropzoneSubPrompt: 'Only video files are supported',\r\n labelInvalidFileType: 'Invalid file type. Please upload a video file.',\r\n maxSizeMB: 100,\r\n maxFiles: 1,\r\n singlePick: true,\r\n className: 'w-[598px]',\r\n },\r\n render: (args) => <ControlledDropzone {...args} />,\r\n};\r\n"],"names":["ControlledDropzone","initialValue","args","value","setValue","useState","jsxs","jsx","Dropzone","items","meta","Story","Images","DEFAULT_IMAGES_TYPES","Files","DEFAULT_DOCUMENT_TYPES","Videos","DEFAULT_VIDEO_TYPES","VideoYoutubeLink","url","setUrl","event","next","UploadingDropzoneMock","isUploading","setIsUploading","uploadProgress","setUploadProgress","uploadLoadedBytes","setUploadLoadedBytes","uploadTotalBytes","setUploadTotalBytes","timerRef","useRef","useEffect","selected","totalBytes","loadedBytes","progress","VideoRemoteUrl","e","VideoUploadingMock","MultiImagesPersistent","MultiFilesList","DEFAULT_AUDIO_TYPES","MultiImagesCoverFirst","MultilinePromptSpacing","FileErrorTooLarge","FileErrorInvalidType","PhotoErrorTooLarge","PhotoErrorInvalidType","PhotosMultiErrorTooLarge","PhotosMultiErrorInvalidType","VideoErrorTooLarge","VideoErrorInvalidType"],"mappings":"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"}
@@ -44,7 +44,7 @@ export interface DropzoneProps extends DropzoneTranslations, React.HTMLAttribute
44
44
  size?: number;
45
45
  };
46
46
  persistentDropzone?: boolean;
47
- previewVariant?: 'default' | 'image-grid';
47
+ previewVariant?: 'default' | 'image-grid' | 'file-list';
48
48
  designVariant?: 'legacy' | 'modern';
49
49
  documentUploadCard?: boolean;
50
50
  /**
@@ -64,6 +64,7 @@ export interface DropzoneStyles {
64
64
  export declare const DEFAULT_DOCUMENT_TYPES: string[];
65
65
  export declare const DEFAULT_IMAGES_TYPES: string[];
66
66
  export declare const DEFAULT_VIDEO_TYPES: string[];
67
+ export declare const DEFAULT_AUDIO_TYPES: string[];
67
68
  export declare const DEFAULT_FILE_TYPES: string[];
68
69
  export interface DropzoneControl {
69
70
  setItems: Dispatch<SetStateAction<DropzoneValueItem[]>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.types.d.ts","sourceRoot":"","sources":["../../src/Dropzone/Dropzone.types.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Dropzone.types.d.ts","sourceRoot":"","sources":["../../src/Dropzone/Dropzone.types.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const e = [
1
+ const o = [
2
2
  "application/pdf",
3
3
  "application/msword",
4
4
  "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
@@ -8,7 +8,7 @@ const e = [
8
8
  "application/vnd.openxmlformats-officedocument.presentationml.presentation",
9
9
  "text/csv",
10
10
  "text/plain"
11
- ], o = [
11
+ ], e = [
12
12
  "image/png",
13
13
  "image/jpeg",
14
14
  "image/jpg",
@@ -20,11 +20,22 @@ const e = [
20
20
  "video/x-msvideo",
21
21
  "video/webm",
22
22
  "video/avi"
23
- ], n = e;
23
+ ], a = [
24
+ "audio/mpeg",
25
+ // mp3
26
+ "audio/wav",
27
+ "audio/x-wav",
28
+ "audio/ogg",
29
+ "audio/mp4",
30
+ // m4a
31
+ "audio/aac",
32
+ "audio/webm"
33
+ ], p = o;
24
34
  export {
25
- e as DEFAULT_DOCUMENT_TYPES,
26
- n as DEFAULT_FILE_TYPES,
27
- o as DEFAULT_IMAGES_TYPES,
35
+ a as DEFAULT_AUDIO_TYPES,
36
+ o as DEFAULT_DOCUMENT_TYPES,
37
+ p as DEFAULT_FILE_TYPES,
38
+ e as DEFAULT_IMAGES_TYPES,
28
39
  i as DEFAULT_VIDEO_TYPES
29
40
  };
30
41
  //# sourceMappingURL=Dropzone.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.types.js","sources":["../../src/Dropzone/Dropzone.types.tsx"],"sourcesContent":["import { FileRejection } from 'react-dropzone';\nimport { Dispatch, SetStateAction } from 'react';\n\nexport type DropzoneValueItem = File | string;\n\nexport interface FilePreviewProps {\n item: DropzoneValueItem;\n styles?: Pick<\n DropzoneStyles,\n 'previewWraper' | 'previewImage' | 'previewFile'\n >;\n}\n\nexport interface DropzoneTranslations {\n labelDropzonePrompt?: string;\n labelDropzoneSubPrompt?: string;\n labelOrClickToSelect?: string;\n labelSelectedFiles?: string;\n labelUploadErrors?: string;\n labelFileTooLarge?: string;\n labelInvalidFileType?: string;\n labelVideoUploaded?: string;\n labelVideoReplace?: string;\n}\n\nexport interface DropzoneProps\n extends DropzoneTranslations,\n React.HTMLAttributes<HTMLDivElement> {\n acceptTypes?: string[];\n maxSizeMB: number;\n maxFiles?: number;\n onErrors?: (errors: FileRejection[]) => void;\n hideErrors?: boolean;\n disabled?: boolean;\n classNames?: DropzoneStyles;\n value?: DropzoneValueItem[];\n onChangeValue?: (items: DropzoneValueItem[]) => void;\n singlePick?: boolean;\n labelDropzoneClassname?: string;\n labelDropzoneSubClassname?: string;\n isUploading?: boolean;\n uploadProgress?: number;\n uploadLoadedBytes?: number;\n uploadTotalBytes?: number;\n onCancelUpload?: () => void;\n labelUploadingTitle?: string;\n labelUploadingHint?: string;\n labelUploadingActionCancel?: string;\n labelUploadingOf?: string;\n playerTranslations?: Partial<Record<string, string>>;\n singlePickFileInfo?: { name?: string; size?: number };\n persistentDropzone?: boolean;\n previewVariant?: 'default' | 'image-grid';\n designVariant?: 'legacy' | 'modern';\n documentUploadCard?: boolean;\n /**\n * In `image-grid` variant, render the first item as a full-width cover preview.\n * Other items keep the regular grid size. The remove (X) button is preserved.\n */\n coverFirstItem?: boolean;\n}\n\nexport interface DropzoneStyles {\n idleWrapper?: string;\n previewWrapper?: string;\n errorWrapper?: string;\n previewWraper?: string;\n previewImage?: string;\n previewFile?: string;\n}\n\nexport const DEFAULT_DOCUMENT_TYPES = [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/csv',\n 'text/plain',\n];\n\nexport const DEFAULT_IMAGES_TYPES = [\n 'image/png',\n 'image/jpeg',\n 'image/jpg',\n 'image/webp',\n // 'image/gif', // TODO: normalize this type\n];\n\nexport const DEFAULT_VIDEO_TYPES = [\n 'video/mp4',\n 'video/quicktime',\n 'video/x-msvideo',\n 'video/webm',\n 'video/avi'\n];\n\n// Backward-compatible alias.\nexport const DEFAULT_FILE_TYPES = DEFAULT_DOCUMENT_TYPES;\n\n\nexport interface DropzoneControl {\n setItems: Dispatch<SetStateAction<DropzoneValueItem[]>>;\n}\n"],"names":["DEFAULT_DOCUMENT_TYPES","DEFAULT_IMAGES_TYPES","DEFAULT_VIDEO_TYPES","DEFAULT_FILE_TYPES"],"mappings":"AAuEO,MAAMA,IAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAEF,GAEaC,IAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGaC,IAAqBH;"}
1
+ {"version":3,"file":"Dropzone.types.js","sources":["../../src/Dropzone/Dropzone.types.tsx"],"sourcesContent":["import { FileRejection } from 'react-dropzone';\r\nimport { Dispatch, SetStateAction } from 'react';\r\n\r\nexport type DropzoneValueItem = File | string;\r\n\r\nexport interface FilePreviewProps {\r\n item: DropzoneValueItem;\r\n styles?: Pick<\r\n DropzoneStyles,\r\n 'previewWraper' | 'previewImage' | 'previewFile'\r\n >;\r\n}\r\n\r\nexport interface DropzoneTranslations {\r\n labelDropzonePrompt?: string;\r\n labelDropzoneSubPrompt?: string;\r\n labelOrClickToSelect?: string;\r\n labelSelectedFiles?: string;\r\n labelUploadErrors?: string;\r\n labelFileTooLarge?: string;\r\n labelInvalidFileType?: string;\r\n labelVideoUploaded?: string;\r\n labelVideoReplace?: string;\r\n}\r\n\r\nexport interface DropzoneProps\r\n extends DropzoneTranslations,\r\n React.HTMLAttributes<HTMLDivElement> {\r\n acceptTypes?: string[];\r\n maxSizeMB: number;\r\n maxFiles?: number;\r\n onErrors?: (errors: FileRejection[]) => void;\r\n hideErrors?: boolean;\r\n disabled?: boolean;\r\n classNames?: DropzoneStyles;\r\n value?: DropzoneValueItem[];\r\n onChangeValue?: (items: DropzoneValueItem[]) => void;\r\n singlePick?: boolean;\r\n labelDropzoneClassname?: string;\r\n labelDropzoneSubClassname?: string;\r\n isUploading?: boolean;\r\n uploadProgress?: number;\r\n uploadLoadedBytes?: number;\r\n uploadTotalBytes?: number;\r\n onCancelUpload?: () => void;\r\n labelUploadingTitle?: string;\r\n labelUploadingHint?: string;\r\n labelUploadingActionCancel?: string;\r\n labelUploadingOf?: string;\r\n playerTranslations?: Partial<Record<string, string>>;\r\n singlePickFileInfo?: { name?: string; size?: number };\r\n persistentDropzone?: boolean;\r\n previewVariant?: 'default' | 'image-grid' | 'file-list';\r\n designVariant?: 'legacy' | 'modern';\r\n documentUploadCard?: boolean;\r\n /**\r\n * In `image-grid` variant, render the first item as a full-width cover preview.\r\n * Other items keep the regular grid size. The remove (X) button is preserved.\r\n */\r\n coverFirstItem?: boolean;\r\n}\r\n\r\nexport interface DropzoneStyles {\r\n idleWrapper?: string;\r\n previewWrapper?: string;\r\n errorWrapper?: string;\r\n previewWraper?: string;\r\n previewImage?: string;\r\n previewFile?: string;\r\n}\r\n\r\nexport const DEFAULT_DOCUMENT_TYPES = [\r\n 'application/pdf',\r\n 'application/msword',\r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/vnd.ms-powerpoint',\r\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n 'text/csv',\r\n 'text/plain',\r\n];\r\n\r\nexport const DEFAULT_IMAGES_TYPES = [\r\n 'image/png',\r\n 'image/jpeg',\r\n 'image/jpg',\r\n 'image/webp',\r\n // 'image/gif', // TODO: normalize this type\r\n];\r\n\r\nexport const DEFAULT_VIDEO_TYPES = [\r\n 'video/mp4',\r\n 'video/quicktime',\r\n 'video/x-msvideo',\r\n 'video/webm',\r\n 'video/avi'\r\n];\r\n\r\nexport const DEFAULT_AUDIO_TYPES = [\r\n 'audio/mpeg', // mp3\r\n 'audio/wav',\r\n 'audio/x-wav',\r\n 'audio/ogg',\r\n 'audio/mp4', // m4a\r\n 'audio/aac',\r\n 'audio/webm',\r\n];\r\n\r\n// Backward-compatible alias.\r\nexport const DEFAULT_FILE_TYPES = DEFAULT_DOCUMENT_TYPES;\r\n\r\n\r\nexport interface DropzoneControl {\r\n setItems: Dispatch<SetStateAction<DropzoneValueItem[]>>;\r\n}\r\n"],"names":["DEFAULT_DOCUMENT_TYPES","DEFAULT_IMAGES_TYPES","DEFAULT_VIDEO_TYPES","DEFAULT_AUDIO_TYPES","DEFAULT_FILE_TYPES"],"mappings":"AAuEO,MAAMA,IAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAEF,GAEaC,IAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAAsB;AAAA,EACjC;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AACF,GAGaC,IAAqBJ;"}
@@ -0,0 +1,14 @@
1
+ import { DropzoneValueItem } from './Dropzone.types';
2
+ interface DropzoneCoverPreviewProps {
3
+ item: DropzoneValueItem;
4
+ className?: string;
5
+ }
6
+ /**
7
+ * Cover preview for the image-grid (multi select) drop area.
8
+ * Mirrors the single image preview: wide images fill the frame (object-cover),
9
+ * portrait images are shown in full (object-contain) over a blurred backdrop,
10
+ * so the cover is never cropped awkwardly.
11
+ */
12
+ export declare const DropzoneCoverPreview: ({ item, className }: DropzoneCoverPreviewProps) => import("react/jsx-runtime").JSX.Element | null;
13
+ export {};
14
+ //# sourceMappingURL=DropzoneCoverPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropzoneCoverPreview.d.ts","sourceRoot":"","sources":["../../src/Dropzone/DropzoneCoverPreview.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,UAAU,yBAAyB;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,qBAAqB,yBAAyB,mDAmDlF,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { jsxs as m, jsx as a } from "react/jsx-runtime";
2
+ import { useState as n, useEffect as d } from "react";
3
+ import { cn as i } from "@oneplatformdev/utils";
4
+ import { isFile as v } from "./DropzoneUtils.js";
5
+ const h = ({ item: e, className: u }) => {
6
+ const [t, o] = n(""), [l, f] = n(!1);
7
+ return d(() => {
8
+ if (v(e)) {
9
+ const r = URL.createObjectURL(e);
10
+ return o(r), () => URL.revokeObjectURL(r);
11
+ }
12
+ if (typeof e == "string") {
13
+ o(e);
14
+ return;
15
+ }
16
+ o("");
17
+ }, [e]), t ? /* @__PURE__ */ m(
18
+ "div",
19
+ {
20
+ className: i(
21
+ "relative flex w-full h-full items-center justify-center overflow-hidden",
22
+ u
23
+ ),
24
+ children: [
25
+ !l && /* @__PURE__ */ a(
26
+ "div",
27
+ {
28
+ className: "absolute inset-0 scale-110 bg-cover bg-center opacity-80 blur-xl",
29
+ style: { backgroundImage: `url(${t})` }
30
+ }
31
+ ),
32
+ /* @__PURE__ */ a(
33
+ "img",
34
+ {
35
+ src: t,
36
+ alt: "",
37
+ onLoad: (r) => {
38
+ const { naturalWidth: s, naturalHeight: c } = r.currentTarget;
39
+ f(
40
+ !!s && !!c && s > c
41
+ );
42
+ },
43
+ className: i(
44
+ "relative h-full",
45
+ l ? "w-full object-cover" : "z-10 max-w-full object-contain"
46
+ )
47
+ }
48
+ )
49
+ ]
50
+ }
51
+ ) : null;
52
+ };
53
+ export {
54
+ h as DropzoneCoverPreview
55
+ };
56
+ //# sourceMappingURL=DropzoneCoverPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropzoneCoverPreview.js","sources":["../../src/Dropzone/DropzoneCoverPreview.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\n\r\nimport { cn } from '@oneplatformdev/utils';\r\n\r\nimport { DropzoneValueItem } from './Dropzone.types';\r\nimport { isFile } from './DropzoneUtils';\r\n\r\ninterface DropzoneCoverPreviewProps {\r\n item: DropzoneValueItem;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Cover preview for the image-grid (multi select) drop area.\r\n * Mirrors the single image preview: wide images fill the frame (object-cover),\r\n * portrait images are shown in full (object-contain) over a blurred backdrop,\r\n * so the cover is never cropped awkwardly.\r\n */\r\nexport const DropzoneCoverPreview = ({ item, className }: DropzoneCoverPreviewProps) => {\r\n const [src, setSrc] = useState('');\r\n const [isWideImage, setIsWideImage] = useState(false);\r\n\r\n useEffect(() => {\r\n if (isFile(item)) {\r\n const objectUrl = URL.createObjectURL(item);\r\n setSrc(objectUrl);\r\n return () => URL.revokeObjectURL(objectUrl);\r\n }\r\n\r\n if (typeof item === 'string') {\r\n setSrc(item);\r\n return undefined;\r\n }\r\n\r\n setSrc('');\r\n return undefined;\r\n }, [item]);\r\n\r\n if (!src) return null;\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'relative flex w-full h-full items-center justify-center overflow-hidden',\r\n className,\r\n )}\r\n >\r\n {!isWideImage && (\r\n <div\r\n className=\"absolute inset-0 scale-110 bg-cover bg-center opacity-80 blur-xl\"\r\n style={{ backgroundImage: `url(${src})` }}\r\n />\r\n )}\r\n <img\r\n src={src}\r\n alt=\"\"\r\n onLoad={(event) => {\r\n const { naturalWidth, naturalHeight } = event.currentTarget;\r\n setIsWideImage(\r\n !!naturalWidth && !!naturalHeight && naturalWidth > naturalHeight,\r\n );\r\n }}\r\n className={cn(\r\n 'relative h-full',\r\n isWideImage ? 'w-full object-cover' : 'z-10 max-w-full object-contain',\r\n )}\r\n />\r\n </div>\r\n );\r\n};\r\n"],"names":["DropzoneCoverPreview","item","className","src","setSrc","useState","isWideImage","setIsWideImage","useEffect","isFile","objectUrl","jsxs","cn","jsx","event","naturalWidth","naturalHeight"],"mappings":";;;;AAkBO,MAAMA,IAAuB,CAAC,EAAE,MAAAC,GAAM,WAAAC,QAA2C;AACtF,QAAM,CAACC,GAAKC,CAAM,IAAIC,EAAS,EAAE,GAC3B,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAK;AAkBpD,SAhBAG,EAAU,MAAM;AACd,QAAIC,EAAOR,CAAI,GAAG;AAChB,YAAMS,IAAY,IAAI,gBAAgBT,CAAI;AAC1C,aAAAG,EAAOM,CAAS,GACT,MAAM,IAAI,gBAAgBA,CAAS;AAAA,IAC5C;AAEA,QAAI,OAAOT,KAAS,UAAU;AAC5B,MAAAG,EAAOH,CAAI;AACX;AAAA,IACF;AAEA,IAAAG,EAAO,EAAE;AAAA,EAEX,GAAG,CAACH,CAAI,CAAC,GAEJE,IAGH,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAV;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,CAACI,KACA,gBAAAO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,iBAAiB,OAAOV,CAAG,IAAA;AAAA,UAAI;AAAA,QAAA;AAAA,QAG5C,gBAAAU;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAAV;AAAA,YACA,KAAI;AAAA,YACJ,QAAQ,CAACW,MAAU;AACjB,oBAAM,EAAE,cAAAC,GAAc,eAAAC,EAAA,IAAkBF,EAAM;AAC9C,cAAAP;AAAA,gBACE,CAAC,CAACQ,KAAgB,CAAC,CAACC,KAAiBD,IAAeC;AAAA,cAAA;AAAA,YAExD;AAAA,YACA,WAAWJ;AAAA,cACT;AAAA,cACAN,IAAc,wBAAwB;AAAA,YAAA;AAAA,UACxC;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA,IA5Ba;AA+BnB;"}
@@ -0,0 +1,17 @@
1
+ import { FC } from 'react';
2
+ export interface DropzoneFileCardProps {
3
+ name: string;
4
+ sizeLabel?: string;
5
+ /** Resolved extension icon (svg src). When absent a generic icon is shown. */
6
+ iconSrc?: string | null;
7
+ disabled?: boolean;
8
+ className?: string;
9
+ onRemove?: (event: React.MouseEvent<HTMLDivElement>) => void;
10
+ }
11
+ /**
12
+ * Прямокутна картка файлу для мультизавантаження (variant `file-list`):
13
+ * іконка за типом + назва + розмір + кнопка видалення. Підходить під будь-який
14
+ * тип (pdf / doc / фото / відео) — усі показуються однаково.
15
+ */
16
+ export declare const DropzoneFileCard: FC<DropzoneFileCardProps>;
17
+ //# sourceMappingURL=DropzoneFileCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropzoneFileCard.d.ts","sourceRoot":"","sources":["../../src/Dropzone/DropzoneFileCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAI3B,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAC9D;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA6CtD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { jsxs as l, jsx as e } from "react/jsx-runtime";
2
+ import { FileTextIcon as o, X as m } from "lucide-react";
3
+ import { cn as x } from "@oneplatformdev/utils";
4
+ const h = ({
5
+ name: r,
6
+ sizeLabel: t,
7
+ iconSrc: i,
8
+ disabled: n = !1,
9
+ className: a,
10
+ onRemove: s
11
+ }) => /* @__PURE__ */ l(
12
+ "div",
13
+ {
14
+ className: x(
15
+ "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4",
16
+ a
17
+ ),
18
+ onClick: (c) => c.stopPropagation(),
19
+ children: [
20
+ i ? /* @__PURE__ */ e("img", { src: i, alt: "", className: "size-10 shrink-0" }) : /* @__PURE__ */ e("div", { className: "size-10 rounded-[8px] bg-[#9368FF] text-white flex items-center justify-center shrink-0", children: /* @__PURE__ */ e(o, { size: 20 }) }),
21
+ /* @__PURE__ */ l("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
22
+ /* @__PURE__ */ e("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate", children: r }),
23
+ t && /* @__PURE__ */ e("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children: t })
24
+ ] }),
25
+ !n && s && /* @__PURE__ */ e(
26
+ "div",
27
+ {
28
+ className: "size-6 flex items-center justify-center cursor-pointer shrink-0",
29
+ onClick: s,
30
+ children: /* @__PURE__ */ e(m, { size: 24, color: "#06080D" })
31
+ }
32
+ )
33
+ ]
34
+ }
35
+ );
36
+ export {
37
+ h as DropzoneFileCard
38
+ };
39
+ //# sourceMappingURL=DropzoneFileCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropzoneFileCard.js","sources":["../../src/Dropzone/DropzoneFileCard.tsx"],"sourcesContent":["import { FileTextIcon, X } from 'lucide-react';\nimport { FC } from 'react';\n\nimport { cn } from '@oneplatformdev/utils';\n\nexport interface DropzoneFileCardProps {\n name: string;\n sizeLabel?: string;\n /** Resolved extension icon (svg src). When absent a generic icon is shown. */\n iconSrc?: string | null;\n disabled?: boolean;\n className?: string;\n onRemove?: (event: React.MouseEvent<HTMLDivElement>) => void;\n}\n\n/**\n * Прямокутна картка файлу для мультизавантаження (variant `file-list`):\n * іконка за типом + назва + розмір + кнопка видалення. Підходить під будь-який\n * тип (pdf / doc / фото / відео) — усі показуються однаково.\n */\nexport const DropzoneFileCard: FC<DropzoneFileCardProps> = ({\n name,\n sizeLabel,\n iconSrc,\n disabled = false,\n className,\n onRemove,\n}) => {\n return (\n <div\n className={cn(\n 'w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4',\n className\n )}\n onClick={(event) => event.stopPropagation()}\n >\n {iconSrc ? (\n <img src={iconSrc} alt=\"\" className=\"size-10 shrink-0\" />\n ) : (\n <div className=\"size-10 rounded-[8px] bg-[#9368FF] text-white flex items-center justify-center shrink-0\">\n <FileTextIcon size={20} />\n </div>\n )}\n\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\n {name}\n </span>\n {sizeLabel && (\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\n {sizeLabel}\n </span>\n )}\n </div>\n\n {!disabled && onRemove && (\n <div\n className=\"size-6 flex items-center justify-center cursor-pointer shrink-0\"\n onClick={onRemove}\n >\n <X size={24} color=\"#06080D\" />\n </div>\n )}\n </div>\n );\n};\n"],"names":["DropzoneFileCard","name","sizeLabel","iconSrc","disabled","className","onRemove","jsxs","cn","event","jsx","FileTextIcon","X"],"mappings":";;;AAoBO,MAAMA,IAA8C,CAAC;AAAA,EAC1D,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,UAAAC;AACF,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAH;AAAA,IAAA;AAAA,IAEF,SAAS,CAACI,MAAUA,EAAM,gBAAA;AAAA,IAEzB,UAAA;AAAA,MAAAN,sBACE,OAAA,EAAI,KAAKA,GAAS,KAAI,IAAG,WAAU,oBAAmB,IAEvD,gBAAAO,EAAC,SAAI,WAAU,2FACb,4BAACC,GAAA,EAAa,MAAM,IAAI,GAC1B;AAAA,MAGF,gBAAAJ,EAAC,OAAA,EAAI,WAAU,4DACb,UAAA;AAAA,QAAA,gBAAAG,EAAC,QAAA,EAAK,WAAU,2EACb,UAAAT,GACH;AAAA,QACCC,KACC,gBAAAQ,EAAC,QAAA,EAAK,WAAU,gEACb,UAAAR,EAAA,CACH;AAAA,MAAA,GAEJ;AAAA,MAEC,CAACE,KAAYE,KACZ,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAASJ;AAAA,UAET,UAAA,gBAAAI,EAACE,GAAA,EAAE,MAAM,IAAI,OAAM,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAC/B;AAAA,EAAA;AAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropzoneFilePreview.js","sources":["../../src/Dropzone/DropzoneFilePreview.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react';\nimport { File as FileIcon } from 'lucide-react';\nimport { DEFAULT_IMAGES_TYPES, FilePreviewProps } from './Dropzone.types';\nimport { isFile } from './DropzoneUtils';\nimport { cn } from '@oneplatformdev/utils';\nimport { MediaPlayer, MediaProvider } from '@vidstack/react';\nimport { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default';\n\nimport '@vidstack/react/player/styles/base.css';\nimport '@vidstack/react/player/styles/default/theme.css';\nimport '@vidstack/react/player/styles/default/layouts/video.css';\n\nexport const FilePreview: FC<FilePreviewProps> = ({ item, styles }) => {\n const [preview, setPreview] = useState<string | null>(null);\n\n const isFileTypeImage =\n isFile(item) && DEFAULT_IMAGES_TYPES.includes(item.type);\n const isFileTypeVideo = isFile(item) && item.type.includes('video');\n\n useEffect(() => {\n let img: HTMLImageElement | null = null;\n\n if (isFile(item) && isFileTypeImage) {\n const reader = new FileReader();\n reader.onloadend = () => setPreview(reader.result as string);\n reader.readAsDataURL(item);\n\n return () => setPreview(null);\n } else if (typeof item === 'string') {\n img = new Image();\n img.src = item;\n img.onload = () => setPreview(item);\n img.onerror = () => setPreview(null);\n\n return () => {\n img!.onload = null;\n img!.onerror = null;\n };\n } else if (isFile(item) && isFileTypeVideo) {\n const objectUrl = URL.createObjectURL(item);\n setPreview(objectUrl);\n return () => URL.revokeObjectURL(objectUrl);\n } else {\n setPreview(null);\n }\n\n return () => setPreview(null);\n }, [item, isFileTypeImage, isFileTypeVideo]);\n\n return (\n <div\n className={cn(\n 'w-32 h-32 border border-gray-300 rounded-md overflow-hidden flex items-center justify-center',\n styles?.previewWraper\n )}\n >\n {preview && isFileTypeVideo ? (\n <div className=\"w-full h-full bg-black\" onClick={(event) => event.stopPropagation()}>\n <MediaPlayer\n src={isFile(item) ? { src: preview, type: item.type } : preview}\n className=\"h-full w-full bg-black text-white\"\n playsInline\n >\n <MediaProvider />\n <DefaultVideoLayout icons={defaultLayoutIcons} />\n </MediaPlayer>\n </div>\n ) : preview ? (\n <img\n src={preview}\n alt={isFile(item) ? item.name : 'external-image'}\n className={cn('w-full h-full object-cover', styles?.previewImage)}\n />\n ) : (\n <div\n className={cn(\n 'flex flex-col items-center justify-center text-gray-500 text-sm p-2 text-center',\n styles?.previewFile\n )}\n >\n <FileIcon className=\"w-6 h-6\" />\n {!isFile(item) ? (\n <span className=\"text-xs break-all\">{item}</span>\n ) : (\n <span className=\"text-xs break-all\">{item.name}</span>\n )}\n </div>\n )}\n </div>\n );\n};\n"],"names":["FilePreview","item","styles","preview","setPreview","useState","isFileTypeImage","isFile","DEFAULT_IMAGES_TYPES","isFileTypeVideo","useEffect","img","reader","objectUrl","jsx","cn","event","jsxs","MediaPlayer","MediaProvider","DefaultVideoLayout","defaultLayoutIcons","FileIcon"],"mappings":";;;;;;;;;;;AAYO,MAAMA,IAAoC,CAAC,EAAE,MAAAC,GAAM,QAAAC,QAAa;AACrE,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAwB,IAAI,GAEpDC,IACJC,EAAON,CAAI,KAAKO,EAAqB,SAASP,EAAK,IAAI,GACnDQ,IAAkBF,EAAON,CAAI,KAAKA,EAAK,KAAK,SAAS,OAAO;AAElE,SAAAS,EAAU,MAAM;AACd,QAAIC,IAA+B;AAEnC,QAAIJ,EAAON,CAAI,KAAKK,GAAiB;AACnC,YAAMM,IAAS,IAAI,WAAA;AACnB,aAAAA,EAAO,YAAY,MAAMR,EAAWQ,EAAO,MAAgB,GAC3DA,EAAO,cAAcX,CAAI,GAElB,MAAMG,EAAW,IAAI;AAAA,IAC9B,OAAA;AAAA,UAAW,OAAOH,KAAS;AACzB,eAAAU,IAAM,IAAI,MAAA,GACVA,EAAI,MAAMV,GACVU,EAAI,SAAS,MAAMP,EAAWH,CAAI,GAClCU,EAAI,UAAU,MAAMP,EAAW,IAAI,GAE5B,MAAM;AACX,UAAAO,EAAK,SAAS,MACdA,EAAK,UAAU;AAAA,QACjB;AACF,UAAWJ,EAAON,CAAI,KAAKQ,GAAiB;AAC1C,cAAMI,IAAY,IAAI,gBAAgBZ,CAAI;AAC1C,eAAAG,EAAWS,CAAS,GACb,MAAM,IAAI,gBAAgBA,CAAS;AAAA,MAC5C;AACE,QAAAT,EAAW,IAAI;AAAA;AAGjB,WAAO,MAAMA,EAAW,IAAI;AAAA,EAC9B,GAAG,CAACH,GAAMK,GAAiBG,CAAe,CAAC,GAGzC,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAb,GAAQ;AAAA,MAAA;AAAA,MAGT,UAAAC,KAAWM,IACV,gBAAAK,EAAC,OAAA,EAAI,WAAU,0BAAyB,SAAS,CAACE,MAAUA,EAAM,gBAAA,GAChE,UAAA,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKX,EAAON,CAAI,IAAI,EAAE,KAAKE,GAAS,MAAMF,EAAK,KAAA,IAASE;AAAA,UACxD,WAAU;AAAA,UACV,aAAW;AAAA,UAEX,UAAA;AAAA,YAAA,gBAAAW,EAACK,GAAA,EAAc;AAAA,YACf,gBAAAL,EAACM,GAAA,EAAmB,OAAOC,EAAA,CAAoB;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,EACjD,CACF,IACElB,IACF,gBAAAW;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKX;AAAA,UACL,KAAKI,EAAON,CAAI,IAAIA,EAAK,OAAO;AAAA,UAChC,WAAWc,EAAG,8BAA8Bb,GAAQ,YAAY;AAAA,QAAA;AAAA,MAAA,IAGlE,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWF;AAAA,YACT;AAAA,YACAb,GAAQ;AAAA,UAAA;AAAA,UAGV,UAAA;AAAA,YAAA,gBAAAY,EAACQ,GAAA,EAAS,WAAU,UAAA,CAAU;AAAA,YAC5Bf,EAAON,CAAI,IAGX,gBAAAa,EAAC,QAAA,EAAK,WAAU,qBAAqB,YAAK,KAAA,CAAK,sBAF9C,QAAA,EAAK,WAAU,qBAAqB,UAAAb,EAAA,CAAK;AAAA,UAEK;AAAA,QAAA;AAAA,MAAA;AAAA,IAEnD;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"DropzoneFilePreview.js","sources":["../../src/Dropzone/DropzoneFilePreview.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react';\r\nimport { File as FileIcon } from 'lucide-react';\r\nimport { DEFAULT_IMAGES_TYPES, FilePreviewProps } from './Dropzone.types';\r\nimport { isFile } from './DropzoneUtils';\r\nimport { cn } from '@oneplatformdev/utils';\r\nimport { MediaPlayer, MediaProvider } from '@vidstack/react';\r\nimport { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default';\r\n\r\nimport '@vidstack/react/player/styles/base.css';\r\nimport '@vidstack/react/player/styles/default/theme.css';\r\nimport '@vidstack/react/player/styles/default/layouts/video.css';\r\n\r\nexport const FilePreview: FC<FilePreviewProps> = ({ item, styles }) => {\r\n const [preview, setPreview] = useState<string | null>(null);\r\n\r\n const isFileTypeImage =\r\n isFile(item) && DEFAULT_IMAGES_TYPES.includes(item.type);\r\n const isFileTypeVideo = isFile(item) && item.type.includes('video');\r\n\r\n useEffect(() => {\r\n let img: HTMLImageElement | null = null;\r\n\r\n if (isFile(item) && isFileTypeImage) {\r\n const reader = new FileReader();\r\n reader.onloadend = () => setPreview(reader.result as string);\r\n reader.readAsDataURL(item);\r\n\r\n return () => setPreview(null);\r\n } else if (typeof item === 'string') {\r\n img = new Image();\r\n img.src = item;\r\n img.onload = () => setPreview(item);\r\n img.onerror = () => setPreview(null);\r\n\r\n return () => {\r\n img!.onload = null;\r\n img!.onerror = null;\r\n };\r\n } else if (isFile(item) && isFileTypeVideo) {\r\n const objectUrl = URL.createObjectURL(item);\r\n setPreview(objectUrl);\r\n return () => URL.revokeObjectURL(objectUrl);\r\n } else {\r\n setPreview(null);\r\n }\r\n\r\n return () => setPreview(null);\r\n }, [item, isFileTypeImage, isFileTypeVideo]);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'w-32 h-32 border border-gray-300 rounded-md overflow-hidden flex items-center justify-center',\r\n styles?.previewWraper\r\n )}\r\n >\r\n {preview && isFileTypeVideo ? (\r\n <div className=\"w-full h-full bg-black\" onClick={(event) => event.stopPropagation()}>\r\n <MediaPlayer\r\n src={isFile(item) ? { src: preview, type: item.type } : preview}\r\n className=\"h-full w-full bg-black text-white\"\r\n playsInline\r\n >\r\n <MediaProvider />\r\n <DefaultVideoLayout icons={defaultLayoutIcons} />\r\n </MediaPlayer>\r\n </div>\r\n ) : preview ? (\r\n <img\r\n src={preview}\r\n alt={isFile(item) ? item.name : 'external-image'}\r\n className={cn('w-full h-full object-cover', styles?.previewImage)}\r\n />\r\n ) : (\r\n <div\r\n className={cn(\r\n 'flex flex-col items-center justify-center text-gray-500 text-sm p-2 text-center',\r\n styles?.previewFile\r\n )}\r\n >\r\n <FileIcon className=\"w-6 h-6\" />\r\n {!isFile(item) ? (\r\n <span className=\"text-xs break-all\">{item}</span>\r\n ) : (\r\n <span className=\"text-xs break-all\">{item.name}</span>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n"],"names":["FilePreview","item","styles","preview","setPreview","useState","isFileTypeImage","isFile","DEFAULT_IMAGES_TYPES","isFileTypeVideo","useEffect","img","reader","objectUrl","jsx","cn","event","jsxs","MediaPlayer","MediaProvider","DefaultVideoLayout","defaultLayoutIcons","FileIcon"],"mappings":";;;;;;;;;;;AAYO,MAAMA,IAAoC,CAAC,EAAE,MAAAC,GAAM,QAAAC,QAAa;AACrE,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAwB,IAAI,GAEpDC,IACJC,EAAON,CAAI,KAAKO,EAAqB,SAASP,EAAK,IAAI,GACnDQ,IAAkBF,EAAON,CAAI,KAAKA,EAAK,KAAK,SAAS,OAAO;AAElE,SAAAS,EAAU,MAAM;AACd,QAAIC,IAA+B;AAEnC,QAAIJ,EAAON,CAAI,KAAKK,GAAiB;AACnC,YAAMM,IAAS,IAAI,WAAA;AACnB,aAAAA,EAAO,YAAY,MAAMR,EAAWQ,EAAO,MAAgB,GAC3DA,EAAO,cAAcX,CAAI,GAElB,MAAMG,EAAW,IAAI;AAAA,IAC9B,OAAA;AAAA,UAAW,OAAOH,KAAS;AACzB,eAAAU,IAAM,IAAI,MAAA,GACVA,EAAI,MAAMV,GACVU,EAAI,SAAS,MAAMP,EAAWH,CAAI,GAClCU,EAAI,UAAU,MAAMP,EAAW,IAAI,GAE5B,MAAM;AACX,UAAAO,EAAK,SAAS,MACdA,EAAK,UAAU;AAAA,QACjB;AACF,UAAWJ,EAAON,CAAI,KAAKQ,GAAiB;AAC1C,cAAMI,IAAY,IAAI,gBAAgBZ,CAAI;AAC1C,eAAAG,EAAWS,CAAS,GACb,MAAM,IAAI,gBAAgBA,CAAS;AAAA,MAC5C;AACE,QAAAT,EAAW,IAAI;AAAA;AAGjB,WAAO,MAAMA,EAAW,IAAI;AAAA,EAC9B,GAAG,CAACH,GAAMK,GAAiBG,CAAe,CAAC,GAGzC,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAb,GAAQ;AAAA,MAAA;AAAA,MAGT,UAAAC,KAAWM,IACV,gBAAAK,EAAC,OAAA,EAAI,WAAU,0BAAyB,SAAS,CAACE,MAAUA,EAAM,gBAAA,GAChE,UAAA,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKX,EAAON,CAAI,IAAI,EAAE,KAAKE,GAAS,MAAMF,EAAK,KAAA,IAASE;AAAA,UACxD,WAAU;AAAA,UACV,aAAW;AAAA,UAEX,UAAA;AAAA,YAAA,gBAAAW,EAACK,GAAA,EAAc;AAAA,YACf,gBAAAL,EAACM,GAAA,EAAmB,OAAOC,EAAA,CAAoB;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,EACjD,CACF,IACElB,IACF,gBAAAW;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKX;AAAA,UACL,KAAKI,EAAON,CAAI,IAAIA,EAAK,OAAO;AAAA,UAChC,WAAWc,EAAG,8BAA8Bb,GAAQ,YAAY;AAAA,QAAA;AAAA,MAAA,IAGlE,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWF;AAAA,YACT;AAAA,YACAb,GAAQ;AAAA,UAAA;AAAA,UAGV,UAAA;AAAA,YAAA,gBAAAY,EAACQ,GAAA,EAAS,WAAU,UAAA,CAAU;AAAA,YAC5Bf,EAAON,CAAI,IAGX,gBAAAa,EAAC,QAAA,EAAK,WAAU,qBAAqB,YAAK,KAAA,CAAK,sBAF9C,QAAA,EAAK,WAAU,qBAAqB,UAAAb,EAAA,CAAK;AAAA,UAEK;AAAA,QAAA;AAAA,MAAA;AAAA,IAEnD;AAAA,EAAA;AAIR;"}
@@ -11,7 +11,6 @@ import "@vidstack/react/player/styles/default/theme.css";
11
11
  import "@vidstack/react/player/styles/default/layouts/video.css";
12
12
  /* empty css */
13
13
  import { ButtonIcon as Q } from "../ButtonIcon/ButtonIcon.js";
14
- import "../ButtonIcon/buttonIconVariants.js";
15
14
  const Z = `
16
15
  .dropzone-youtube-player:not([data-fullscreen]) .vds-play-button,
17
16
  .dropzone-youtube-player[data-fullscreen="false"] .vds-play-button,
@@ -55,7 +54,7 @@ const Z = `
55
54
  } catch {
56
55
  return "";
57
56
  }
58
- }, be = ({
57
+ }, ye = ({
59
58
  item: e,
60
59
  disabled: s,
61
60
  onRemoveClick: u,
@@ -221,7 +220,7 @@ const Z = `
221
220
  ] });
222
221
  };
223
222
  export {
224
- be as DropzoneSinglePickPreview,
223
+ ye as DropzoneSinglePickPreview,
225
224
  ee as transformImageToSrc
226
225
  };
227
226
  //# sourceMappingURL=DropzoneSinglePickPreview.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropzoneSinglePickPreview.js","sources":["../../src/Dropzone/DropzoneSinglePickPreview.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\nimport { cn } from '@oneplatformdev/utils';\nimport { DropzoneValueItem } from './Dropzone.types';\nimport { isFile, isVideoUrl } from './DropzoneUtils';\nimport { FileIcon, PencilIcon, Trash2, Video, X } from 'lucide-react';\nimport { MediaPlayer, type MediaPlayerInstance, MediaProvider, Poster } from '@vidstack/react';\nimport { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default';\nimport { Button } from '../Button/Button';\n\nimport '@vidstack/react/player/styles/base.css';\nimport '@vidstack/react/player/styles/default/theme.css';\nimport '@vidstack/react/player/styles/default/layouts/video.css';\nimport './DropzoneSinglePickPreview.css';\nimport { ButtonIcon } from \"../ButtonIcon\";\n\nconst YOUTUBE_PLAYER_STYLES = `\n.dropzone-youtube-player:not([data-fullscreen]) .vds-play-button,\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-play-button,\n.dropzone-youtube-player:not([data-fullscreen]) .vds-buffering-indicator,\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-buffering-indicator,\n.dropzone-youtube-player:not([data-fullscreen]) .vds-loading-indicator,\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-loading-indicator,\n.dropzone-youtube-player:not([data-fullscreen]) .vds-spinner,\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-spinner {\n display: none !important;\n}\n`;\n\nexport const transformImageToSrc = (preview?: string | File | null): string => {\n if (!preview) return '';\n switch (true) {\n case typeof preview === 'string' && !!preview.trim() && preview !== 'null':\n return preview;\n case preview instanceof File:\n return URL.createObjectURL(preview);\n case preview instanceof FileList:\n return preview[0] ? URL.createObjectURL(preview[0]) : '';\n default:\n return '';\n }\n};\n\nconst isYoutubeUrl = (value?: string | null) => {\n if (!value) return false;\n try {\n const url = new URL(value);\n const hostname = url.hostname.toLowerCase();\n return hostname.includes('youtube.com') || hostname.includes('youtu.be');\n } catch {\n return false;\n }\n};\n\nconst extractYoutubeId = (value: string) => {\n try {\n const url = new URL(value);\n const hostname = url.hostname.toLowerCase();\n\n if (hostname.includes('youtu.be')) {\n return url.pathname.replace('/', '').trim();\n }\n\n const searchId = url.searchParams.get('v');\n if (searchId) return searchId.trim();\n\n const pathParts = url.pathname.split('/').filter(Boolean);\n const embedIndex = pathParts.findIndex((part) => part === 'embed');\n if (embedIndex >= 0 && pathParts[embedIndex + 1]) {\n return pathParts[embedIndex + 1].trim();\n }\n\n return '';\n } catch {\n return '';\n }\n};\n\ninterface SinglePickPreviewProps {\n item: DropzoneValueItem;\n disabled?: boolean;\n onRemoveClick: (e: React.MouseEvent<HTMLElement>) => void;\n onReplaceClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n labelUploaded?: string;\n labelReplace?: string;\n fileInfo?: { name?: string; size?: number };\n playerTranslations?: Partial<Record<string, string>>;\n}\n\nexport const DropzoneSinglePickPreview = ({\n item,\n disabled,\n onRemoveClick,\n onReplaceClick,\n labelReplace = 'Замінити',\n fileInfo,\n playerTranslations,\n}: SinglePickPreviewProps) => {\n const [previewUrl, setPreviewUrl] = useState('');\n const [isWideImage, setIsWideImage] = useState(false);\n const isFileType = isFile(item);\n const fileName = isFileType ? item.name : (fileInfo?.name ?? item);\n\n const isYoutubeVideo = useMemo(\n () => typeof item === 'string' && isYoutubeUrl(item),\n [item]\n );\n const isRemoteVideo = useMemo(\n () => typeof item === 'string' && !isYoutubeVideo && isVideoUrl(item),\n [item, isYoutubeVideo]\n );\n const youtubeId = useMemo(\n () => (isYoutubeVideo && typeof item === 'string' ? extractYoutubeId(item) : ''),\n [isYoutubeVideo, item]\n );\n const youtubeSource = useMemo(() => {\n if (!isYoutubeVideo || typeof item !== 'string') return '';\n return youtubeId ? `youtube/${youtubeId}` : item;\n }, [isYoutubeVideo, item, youtubeId]);\n const youtubeThumbnail = useMemo(\n () => (youtubeId ? `https://img.youtube.com/vi/${youtubeId}/hqdefault.jpg` : undefined),\n [youtubeId]\n );\n const [youtubeStarted, setYoutubeStarted] = useState(false);\n const [showPoster, setShowPoster] = useState(true);\n const mediaPlayerRef = useRef<MediaPlayerInstance>(null);\n const lastMuteStateRef = useRef<boolean | null>(null);\n\n useEffect(() => {\n setYoutubeStarted(false);\n setShowPoster(true);\n }, [youtubeSource]);\n\n const showImage = useMemo(() => {\n return (isFileType && item.type?.includes('image')) || (typeof item === 'string' && !isYoutubeVideo && !isRemoteVideo);\n }, [item, isFileType, isYoutubeVideo, isRemoteVideo]);\n\n const showVideo = useMemo(() => {\n return (isFileType && item.type?.includes('video')) || isYoutubeVideo || isRemoteVideo;\n }, [item, isFileType, isYoutubeVideo, isRemoteVideo]);\n\n const fileSize = useMemo(() => {\n const bytes = isFileType ? item.size : fileInfo?.size;\n if (!bytes || bytes < 0) return '';\n const K = 1024, M = K * 1024, G = M * 1024;\n if (bytes >= G) return `${(bytes / G).toFixed(2)} GB`;\n if (bytes >= M) {\n const v = bytes / M;\n return `${v >= 100 ? v.toFixed(0) : v.toFixed(2)} MB`;\n }\n if (bytes >= K) {\n const v = bytes / K;\n return `${v >= 100 ? v.toFixed(0) : v.toFixed(1)} KB`;\n }\n return `${bytes} B`;\n }, [item, isFileType, fileInfo?.size]);\n\n useEffect(() => {\n if (showImage || showVideo) {\n const nextPreview = transformImageToSrc(item);\n setPreviewUrl(nextPreview);\n\n if (isFileType && nextPreview) {\n return () => URL.revokeObjectURL(nextPreview);\n }\n } else {\n setPreviewUrl('');\n }\n\n return undefined;\n }, [item, isFileType, showImage, showVideo]);\n\n return (\n <div className=\"relative w-full h-full overflow-hidden\">\n {isYoutubeVideo && <style>{YOUTUBE_PLAYER_STYLES}</style>}\n {showVideo && previewUrl ? (\n <div className=\"w-full rounded-lg overflow-hidden bg-black\" onClick={(event) => event.stopPropagation()}>\n <div className=\"aspect-video\">\n <MediaPlayer\n ref={mediaPlayerRef}\n title={isFileType ? (item as File).name : isYoutubeVideo ? undefined : (typeof item === 'string' ? item : undefined)}\n src={isYoutubeVideo ? youtubeSource : { src: previewUrl, type: isFileType ? (item as File).type : undefined }}\n poster={isYoutubeVideo ? youtubeThumbnail : undefined}\n className={`h-full w-full bg-black text-white ${\n isYoutubeVideo && youtubeStarted ? 'dropzone-youtube-player' : ''\n }`}\n playsInline\n onPlay={() => {\n setShowPoster(false);\n if (isYoutubeVideo) setYoutubeStarted(true);\n }}\n onVolumeChange={(detail) => {\n if (!isYoutubeVideo) return;\n const shouldMute = detail.volume === 0 || detail.muted;\n if (lastMuteStateRef.current === shouldMute) return;\n lastMuteStateRef.current = shouldMute;\n const iframe = mediaPlayerRef.current?.el?.querySelector('iframe') as HTMLIFrameElement | null;\n if (!iframe?.contentWindow) return;\n iframe.contentWindow.postMessage(\n JSON.stringify({ event: 'command', func: shouldMute ? 'mute' : 'unMute', args: [] }),\n '*'\n );\n }}\n >\n <MediaProvider />\n {showPoster && isYoutubeVideo && youtubeThumbnail && (\n <Poster\n className=\"absolute inset-0 h-full w-full object-cover\"\n src={youtubeThumbnail}\n alt={typeof item === 'string' ? item : ''}\n />\n )}\n <DefaultVideoLayout\n icons={defaultLayoutIcons}\n translations={playerTranslations as never}\n noAudioGain\n slots={{ pipButton: null, googleCastButton: null }}\n />\n </MediaPlayer>\n </div>\n </div>\n ) : !showVideo && previewUrl ? (\n <div className=\"relative flex w-full h-full items-center justify-center overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg\">\n {!isWideImage && (\n <div\n className=\"absolute inset-0 scale-110 bg-cover bg-center opacity-80 blur-xl\"\n style={{ backgroundImage: `url(${previewUrl})` }}\n />\n )}\n {!disabled && (\n <div className=\"absolute top-2 right-2 z-20 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm\" onClick={onRemoveClick} >\n <X size={16} strokeWidth={2} color=\"black\" />\n </div>\n )}\n <img\n src={previewUrl}\n alt={fileName?.toString()}\n onLoad={(e) => {\n const { naturalWidth, naturalHeight } = e.currentTarget;\n setIsWideImage(\n !!naturalWidth && !!naturalHeight && naturalWidth > naturalHeight,\n );\n }}\n className={cn(\n 'relative h-full',\n isWideImage ? 'w-full object-cover' : 'z-10 max-w-full object-contain',\n )}\n />\n </div>\n ) : !showVideo ? (\n <div className=\"relative w-full h-full overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg\">\n {!disabled && (\n <div className=\"absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm\" onClick={onRemoveClick} >\n <X size={16} strokeWidth={2} color=\"black\" />\n </div>\n )}\n <div className=\"w-full h-full flex flex-col items-center justify-center text-gray-600\">\n <FileIcon size={28} />\n <span className=\"text-sm mt-2 break-all px-2 text-center\">\n {fileName?.toString()}\n </span>\n </div>\n </div>\n ) : null}\n\n {showVideo && !isYoutubeVideo && (\n <div\n className=\"mt-2 w-full h-auto min-h-14 rounded-[8px] border border-[#E8E9EB] bg-[#FCFCFC] p-2 flex items-center gap-4\"\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"size-10 rounded-[8px] bg-[#9368FF1F] flex items-center justify-center shrink-0\">\n <Video className=\"size-6 text-[#06080D]\" />\n </div>\n\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1 justify-start\">\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate text-left\">\n {fileName?.toString()}\n </span>\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#363B4E] text-left\">\n {fileSize}\n </span>\n </div>\n\n {!disabled && (\n <Button\n type=\"button\"\n color=\"secondary\"\n startAdornment={PencilIcon}\n size=\"md\"\n onClick={(event) => {\n event.stopPropagation();\n onReplaceClick?.(event);\n }}\n >\n {labelReplace}\n </Button>\n )}\n\n {!disabled && (\n <ButtonIcon\n icon={Trash2}\n variant=\"outlined\"\n size=\"md\"\n color=\"secondary\"\n onClick={onRemoveClick}\n />\n )}\n </div>\n )}\n </div>\n );\n};\n"],"names":["YOUTUBE_PLAYER_STYLES","transformImageToSrc","preview","isYoutubeUrl","value","hostname","extractYoutubeId","url","searchId","pathParts","embedIndex","part","DropzoneSinglePickPreview","item","disabled","onRemoveClick","onReplaceClick","labelReplace","fileInfo","playerTranslations","previewUrl","setPreviewUrl","useState","isWideImage","setIsWideImage","isFileType","isFile","fileName","isYoutubeVideo","useMemo","isRemoteVideo","isVideoUrl","youtubeId","youtubeSource","youtubeThumbnail","youtubeStarted","setYoutubeStarted","showPoster","setShowPoster","mediaPlayerRef","useRef","lastMuteStateRef","useEffect","showImage","showVideo","fileSize","bytes","K","M","G","v","nextPreview","jsxs","jsx","event","MediaPlayer","detail","shouldMute","iframe","MediaProvider","Poster","DefaultVideoLayout","defaultLayoutIcons","X","e","naturalWidth","naturalHeight","cn","FileIcon","Video","Button","PencilIcon","ButtonIcon","Trash2"],"mappings":"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"}
1
+ {"version":3,"file":"DropzoneSinglePickPreview.js","sources":["../../src/Dropzone/DropzoneSinglePickPreview.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { cn } from '@oneplatformdev/utils';\r\nimport { DropzoneValueItem } from './Dropzone.types';\r\nimport { isFile, isVideoUrl } from './DropzoneUtils';\r\nimport { FileIcon, PencilIcon, Trash2, Video, X } from 'lucide-react';\r\nimport { MediaPlayer, type MediaPlayerInstance, MediaProvider, Poster } from '@vidstack/react';\r\nimport { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default';\r\nimport { Button } from '../Button/Button';\r\n\r\nimport '@vidstack/react/player/styles/base.css';\r\nimport '@vidstack/react/player/styles/default/theme.css';\r\nimport '@vidstack/react/player/styles/default/layouts/video.css';\r\nimport './DropzoneSinglePickPreview.css';\r\nimport { ButtonIcon } from \"../ButtonIcon\";\r\n\r\nconst YOUTUBE_PLAYER_STYLES = `\r\n.dropzone-youtube-player:not([data-fullscreen]) .vds-play-button,\r\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-play-button,\r\n.dropzone-youtube-player:not([data-fullscreen]) .vds-buffering-indicator,\r\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-buffering-indicator,\r\n.dropzone-youtube-player:not([data-fullscreen]) .vds-loading-indicator,\r\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-loading-indicator,\r\n.dropzone-youtube-player:not([data-fullscreen]) .vds-spinner,\r\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-spinner {\r\n display: none !important;\r\n}\r\n`;\r\n\r\nexport const transformImageToSrc = (preview?: string | File | null): string => {\r\n if (!preview) return '';\r\n switch (true) {\r\n case typeof preview === 'string' && !!preview.trim() && preview !== 'null':\r\n return preview;\r\n case preview instanceof File:\r\n return URL.createObjectURL(preview);\r\n case preview instanceof FileList:\r\n return preview[0] ? URL.createObjectURL(preview[0]) : '';\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\nconst isYoutubeUrl = (value?: string | null) => {\r\n if (!value) return false;\r\n try {\r\n const url = new URL(value);\r\n const hostname = url.hostname.toLowerCase();\r\n return hostname.includes('youtube.com') || hostname.includes('youtu.be');\r\n } catch {\r\n return false;\r\n }\r\n};\r\n\r\nconst extractYoutubeId = (value: string) => {\r\n try {\r\n const url = new URL(value);\r\n const hostname = url.hostname.toLowerCase();\r\n\r\n if (hostname.includes('youtu.be')) {\r\n return url.pathname.replace('/', '').trim();\r\n }\r\n\r\n const searchId = url.searchParams.get('v');\r\n if (searchId) return searchId.trim();\r\n\r\n const pathParts = url.pathname.split('/').filter(Boolean);\r\n const embedIndex = pathParts.findIndex((part) => part === 'embed');\r\n if (embedIndex >= 0 && pathParts[embedIndex + 1]) {\r\n return pathParts[embedIndex + 1].trim();\r\n }\r\n\r\n return '';\r\n } catch {\r\n return '';\r\n }\r\n};\r\n\r\ninterface SinglePickPreviewProps {\r\n item: DropzoneValueItem;\r\n disabled?: boolean;\r\n onRemoveClick: (e: React.MouseEvent<HTMLElement>) => void;\r\n onReplaceClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\r\n labelUploaded?: string;\r\n labelReplace?: string;\r\n fileInfo?: { name?: string; size?: number };\r\n playerTranslations?: Partial<Record<string, string>>;\r\n}\r\n\r\nexport const DropzoneSinglePickPreview = ({\r\n item,\r\n disabled,\r\n onRemoveClick,\r\n onReplaceClick,\r\n labelReplace = 'Замінити',\r\n fileInfo,\r\n playerTranslations,\r\n}: SinglePickPreviewProps) => {\r\n const [previewUrl, setPreviewUrl] = useState('');\r\n const [isWideImage, setIsWideImage] = useState(false);\r\n const isFileType = isFile(item);\r\n const fileName = isFileType ? item.name : (fileInfo?.name ?? item);\r\n\r\n const isYoutubeVideo = useMemo(\r\n () => typeof item === 'string' && isYoutubeUrl(item),\r\n [item]\r\n );\r\n const isRemoteVideo = useMemo(\r\n () => typeof item === 'string' && !isYoutubeVideo && isVideoUrl(item),\r\n [item, isYoutubeVideo]\r\n );\r\n const youtubeId = useMemo(\r\n () => (isYoutubeVideo && typeof item === 'string' ? extractYoutubeId(item) : ''),\r\n [isYoutubeVideo, item]\r\n );\r\n const youtubeSource = useMemo(() => {\r\n if (!isYoutubeVideo || typeof item !== 'string') return '';\r\n return youtubeId ? `youtube/${youtubeId}` : item;\r\n }, [isYoutubeVideo, item, youtubeId]);\r\n const youtubeThumbnail = useMemo(\r\n () => (youtubeId ? `https://img.youtube.com/vi/${youtubeId}/hqdefault.jpg` : undefined),\r\n [youtubeId]\r\n );\r\n const [youtubeStarted, setYoutubeStarted] = useState(false);\r\n const [showPoster, setShowPoster] = useState(true);\r\n const mediaPlayerRef = useRef<MediaPlayerInstance>(null);\r\n const lastMuteStateRef = useRef<boolean | null>(null);\r\n\r\n useEffect(() => {\r\n setYoutubeStarted(false);\r\n setShowPoster(true);\r\n }, [youtubeSource]);\r\n\r\n const showImage = useMemo(() => {\r\n return (isFileType && item.type?.includes('image')) || (typeof item === 'string' && !isYoutubeVideo && !isRemoteVideo);\r\n }, [item, isFileType, isYoutubeVideo, isRemoteVideo]);\r\n\r\n const showVideo = useMemo(() => {\r\n return (isFileType && item.type?.includes('video')) || isYoutubeVideo || isRemoteVideo;\r\n }, [item, isFileType, isYoutubeVideo, isRemoteVideo]);\r\n\r\n const fileSize = useMemo(() => {\r\n const bytes = isFileType ? item.size : fileInfo?.size;\r\n if (!bytes || bytes < 0) return '';\r\n const K = 1024, M = K * 1024, G = M * 1024;\r\n if (bytes >= G) return `${(bytes / G).toFixed(2)} GB`;\r\n if (bytes >= M) {\r\n const v = bytes / M;\r\n return `${v >= 100 ? v.toFixed(0) : v.toFixed(2)} MB`;\r\n }\r\n if (bytes >= K) {\r\n const v = bytes / K;\r\n return `${v >= 100 ? v.toFixed(0) : v.toFixed(1)} KB`;\r\n }\r\n return `${bytes} B`;\r\n }, [item, isFileType, fileInfo?.size]);\r\n\r\n useEffect(() => {\r\n if (showImage || showVideo) {\r\n const nextPreview = transformImageToSrc(item);\r\n setPreviewUrl(nextPreview);\r\n\r\n if (isFileType && nextPreview) {\r\n return () => URL.revokeObjectURL(nextPreview);\r\n }\r\n } else {\r\n setPreviewUrl('');\r\n }\r\n\r\n return undefined;\r\n }, [item, isFileType, showImage, showVideo]);\r\n\r\n return (\r\n <div className=\"relative w-full h-full overflow-hidden\">\r\n {isYoutubeVideo && <style>{YOUTUBE_PLAYER_STYLES}</style>}\r\n {showVideo && previewUrl ? (\r\n <div className=\"w-full rounded-lg overflow-hidden bg-black\" onClick={(event) => event.stopPropagation()}>\r\n <div className=\"aspect-video\">\r\n <MediaPlayer\r\n ref={mediaPlayerRef}\r\n title={isFileType ? (item as File).name : isYoutubeVideo ? undefined : (typeof item === 'string' ? item : undefined)}\r\n src={isYoutubeVideo ? youtubeSource : { src: previewUrl, type: isFileType ? (item as File).type : undefined }}\r\n poster={isYoutubeVideo ? youtubeThumbnail : undefined}\r\n className={`h-full w-full bg-black text-white ${\r\n isYoutubeVideo && youtubeStarted ? 'dropzone-youtube-player' : ''\r\n }`}\r\n playsInline\r\n onPlay={() => {\r\n setShowPoster(false);\r\n if (isYoutubeVideo) setYoutubeStarted(true);\r\n }}\r\n onVolumeChange={(detail) => {\r\n if (!isYoutubeVideo) return;\r\n const shouldMute = detail.volume === 0 || detail.muted;\r\n if (lastMuteStateRef.current === shouldMute) return;\r\n lastMuteStateRef.current = shouldMute;\r\n const iframe = mediaPlayerRef.current?.el?.querySelector('iframe') as HTMLIFrameElement | null;\r\n if (!iframe?.contentWindow) return;\r\n iframe.contentWindow.postMessage(\r\n JSON.stringify({ event: 'command', func: shouldMute ? 'mute' : 'unMute', args: [] }),\r\n '*'\r\n );\r\n }}\r\n >\r\n <MediaProvider />\r\n {showPoster && isYoutubeVideo && youtubeThumbnail && (\r\n <Poster\r\n className=\"absolute inset-0 h-full w-full object-cover\"\r\n src={youtubeThumbnail}\r\n alt={typeof item === 'string' ? item : ''}\r\n />\r\n )}\r\n <DefaultVideoLayout\r\n icons={defaultLayoutIcons}\r\n translations={playerTranslations as never}\r\n noAudioGain\r\n slots={{ pipButton: null, googleCastButton: null }}\r\n />\r\n </MediaPlayer>\r\n </div>\r\n </div>\r\n ) : !showVideo && previewUrl ? (\r\n <div className=\"relative flex w-full h-full items-center justify-center overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg\">\r\n {!isWideImage && (\r\n <div\r\n className=\"absolute inset-0 scale-110 bg-cover bg-center opacity-80 blur-xl\"\r\n style={{ backgroundImage: `url(${previewUrl})` }}\r\n />\r\n )}\r\n {!disabled && (\r\n <div className=\"absolute top-2 right-2 z-20 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm\" onClick={onRemoveClick} >\r\n <X size={16} strokeWidth={2} color=\"black\" />\r\n </div>\r\n )}\r\n <img\r\n src={previewUrl}\r\n alt={fileName?.toString()}\r\n onLoad={(e) => {\r\n const { naturalWidth, naturalHeight } = e.currentTarget;\r\n setIsWideImage(\r\n !!naturalWidth && !!naturalHeight && naturalWidth > naturalHeight,\r\n );\r\n }}\r\n className={cn(\r\n 'relative h-full',\r\n isWideImage ? 'w-full object-cover' : 'z-10 max-w-full object-contain',\r\n )}\r\n />\r\n </div>\r\n ) : !showVideo ? (\r\n <div className=\"relative w-full h-full overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg\">\r\n {!disabled && (\r\n <div className=\"absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm\" onClick={onRemoveClick} >\r\n <X size={16} strokeWidth={2} color=\"black\" />\r\n </div>\r\n )}\r\n <div className=\"w-full h-full flex flex-col items-center justify-center text-gray-600\">\r\n <FileIcon size={28} />\r\n <span className=\"text-sm mt-2 break-all px-2 text-center\">\r\n {fileName?.toString()}\r\n </span>\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n {showVideo && !isYoutubeVideo && (\r\n <div\r\n className=\"mt-2 w-full h-auto min-h-14 rounded-[8px] border border-[#E8E9EB] bg-[#FCFCFC] p-2 flex items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <div className=\"size-10 rounded-[8px] bg-[#9368FF1F] flex items-center justify-center shrink-0\">\r\n <Video className=\"size-6 text-[#06080D]\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1 justify-start\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate text-left\">\r\n {fileName?.toString()}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#363B4E] text-left\">\r\n {fileSize}\r\n </span>\r\n </div>\r\n\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n color=\"secondary\"\r\n startAdornment={PencilIcon}\r\n size=\"md\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n onReplaceClick?.(event);\r\n }}\r\n >\r\n {labelReplace}\r\n </Button>\r\n )}\r\n\r\n {!disabled && (\r\n <ButtonIcon\r\n icon={Trash2}\r\n variant=\"outlined\"\r\n size=\"md\"\r\n color=\"secondary\"\r\n onClick={onRemoveClick}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n"],"names":["YOUTUBE_PLAYER_STYLES","transformImageToSrc","preview","isYoutubeUrl","value","hostname","extractYoutubeId","url","searchId","pathParts","embedIndex","part","DropzoneSinglePickPreview","item","disabled","onRemoveClick","onReplaceClick","labelReplace","fileInfo","playerTranslations","previewUrl","setPreviewUrl","useState","isWideImage","setIsWideImage","isFileType","isFile","fileName","isYoutubeVideo","useMemo","isRemoteVideo","isVideoUrl","youtubeId","youtubeSource","youtubeThumbnail","youtubeStarted","setYoutubeStarted","showPoster","setShowPoster","mediaPlayerRef","useRef","lastMuteStateRef","useEffect","showImage","showVideo","fileSize","bytes","K","M","G","v","nextPreview","jsxs","jsx","event","MediaPlayer","detail","shouldMute","iframe","MediaProvider","Poster","DefaultVideoLayout","defaultLayoutIcons","X","e","naturalWidth","naturalHeight","cn","FileIcon","Video","Button","PencilIcon","ButtonIcon","Trash2"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropzoneUtils.js","sources":["../../src/Dropzone/DropzoneUtils.tsx"],"sourcesContent":["import { DropzoneValueItem } from './Dropzone.types';\n\nexport function isFile(item: DropzoneValueItem): item is File {\n return item instanceof File;\n}\n\nconst VIDEO_EXTENSIONS = ['.mp4', '.mov', '.avi', '.webm', '.mkv', '.m4v'];\n\nexport function isVideoUrl(item: DropzoneValueItem): boolean {\n if (typeof item !== 'string') return false;\n try {\n const path = new URL(item).pathname.toLowerCase();\n return VIDEO_EXTENSIONS.some((ext) => path.endsWith(ext));\n } catch {\n return false;\n }\n}\n\nexport function extractName(url: string) {\n try {\n const parts = url.split('?')[0].split('#')[0].split('/');\n return parts[parts.length - 1] || url;\n } catch {\n return url;\n }\n}\n\nexport const DefaultFileIcon = () => {\n return (\n <svg width=\"55\" height=\"55\" viewBox=\"0 0 55 55\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <mask id=\"mask0_2430_114601\" maskUnits=\"userSpaceOnUse\" x=\"7\" y=\"4\" width=\"39\" height=\"46\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.25 4.68359H45.6174V49.354H7.25V4.68359Z\" fill=\"white\"/>\n </mask>\n <g mask=\"url(#mask0_2430_114601)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.5386 8.05859C13.8103 8.05859 10.7143 11.0781 10.6266 14.8018V38.9196C10.5456 42.7468 13.5606 45.8968 17.3518 45.9801H35.5386C39.2938 45.8451 42.2661 42.7468 42.2413 38.9308V18.9216L31.8148 8.05859H17.5656H17.5386ZM17.5664 49.3551H17.2829C11.6309 49.2336 7.1309 44.5356 7.2524 38.8836V14.7613C7.38515 9.17909 11.9932 4.68359 17.5327 4.68359H17.5732H32.5334C32.9924 4.68359 33.4312 4.87034 33.7507 5.20109L45.1492 17.0743C45.4484 17.3871 45.6172 17.8078 45.6172 18.2421V38.9196C45.6532 44.5648 41.2522 49.1526 35.5979 49.3551H17.5664Z\" fill=\"#0D0E2B\" fill-opacity=\"0.7\"/>\n </g>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M43.9198 20.3703H37.7233C33.6036 20.359 30.2578 17.002 30.2578 12.889V6.34375C30.2578 5.41225 31.0138 4.65625 31.9453 4.65625C32.8768 4.65625 33.6328 5.41225 33.6328 6.34375V12.889C33.6328 15.148 35.4688 16.9885 37.7278 16.9953H43.9198C44.8513 16.9953 45.6073 17.7513 45.6073 18.6828C45.6073 19.6143 44.8513 20.3703 43.9198 20.3703Z\" fill=\"#0D0E2B\" fill-opacity=\"0.7\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.5708 37.729C24.6393 37.729 23.8833 36.973 23.8833 36.0415V22.4492C23.8833 21.5177 24.6393 20.7617 25.5708 20.7617C26.5023 20.7617 27.2583 21.5177 27.2583 22.4492V36.0415C27.2583 36.973 26.5023 37.729 25.5708 37.729Z\" fill=\"#0D0E2B\" fill-opacity=\"0.7\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.5678 37.7279C25.1201 37.7279 24.6881 37.5501 24.3731 37.2306L19.0968 31.9341C18.4398 31.2726 18.4421 30.2039 19.1013 29.5469C19.7628 28.8899 20.8316 28.8899 21.4886 29.5514L25.5678 33.6509L29.6471 29.5514C30.3041 28.8899 31.3728 28.8899 32.0343 29.5469C32.6936 30.2039 32.6958 31.2726 32.0388 31.9341L26.7626 37.2306C26.4476 37.5501 26.0156 37.7279 25.5678 37.7279Z\" fill=\"#0D0E2B\" fill-opacity=\"0.7\"/>\n </svg>\n \n );\n};\n"],"names":["isFile","item","VIDEO_EXTENSIONS","isVideoUrl","path","ext","extractName","url","parts","DefaultFileIcon","jsxs","jsx"],"mappings":";AAEO,SAASA,EAAOC,GAAuC;AAC5D,SAAOA,aAAgB;AACzB;AAEA,MAAMC,IAAmB,CAAC,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,MAAM;AAElE,SAASC,EAAWF,GAAkC;AAC3D,MAAI,OAAOA,KAAS,SAAU,QAAO;AACrC,MAAI;AACF,UAAMG,IAAO,IAAI,IAAIH,CAAI,EAAE,SAAS,YAAA;AACpC,WAAOC,EAAiB,KAAK,CAACG,MAAQD,EAAK,SAASC,CAAG,CAAC;AAAA,EAC1D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAASC,EAAYC,GAAa;AACvC,MAAI;AACF,UAAMC,IAAQD,EAAI,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG;AACvD,WAAOC,EAAMA,EAAM,SAAS,CAAC,KAAKD;AAAA,EACpC,QAAQ;AACN,WAAOA;AAAA,EACT;AACF;AAEO,MAAME,IAAkB,MAE3B,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAClE,UAAA;AAAA,EAAA,gBAAAC,EAAC,QAAA,EAAK,IAAG,qBAAoB,WAAU,kBAAiB,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MACtF,UAAA,gBAAAA,EAAC,QAAA,EAAK,aAAU,WAAU,aAAU,WAAU,GAAE,8CAA6C,MAAK,QAAA,CAAO,EAAA,CACzG;AAAA,oBACC,KAAA,EAAE,MAAK,2BACR,UAAA,gBAAAA,EAAC,UAAK,aAAU,WAAU,aAAU,WAAU,GAAE,4hBAA2hB,MAAK,WAAU,gBAAa,OAAK,GAC5mB;AAAA,EACA,gBAAAA,EAAC,QAAA,EAAK,aAAU,WAAU,aAAU,WAAU,GAAE,gVAA+U,MAAK,WAAU,gBAAa,MAAA,CAAK;AAAA,EACha,gBAAAA,EAAC,QAAA,EAAK,aAAU,WAAU,aAAU,WAAU,GAAE,+NAA8N,MAAK,WAAU,gBAAa,MAAA,CAAK;AAAA,EAC/S,gBAAAA,EAAC,QAAA,EAAK,aAAU,WAAU,aAAU,WAAU,GAAE,qXAAoX,MAAK,WAAU,gBAAa,MAAA,CAAK;AAAA,GACrc;"}
1
+ {"version":3,"file":"DropzoneUtils.js","sources":["../../src/Dropzone/DropzoneUtils.tsx"],"sourcesContent":["import { DropzoneValueItem } from './Dropzone.types';\r\n\r\nexport function isFile(item: DropzoneValueItem): item is File {\r\n return item instanceof File;\r\n}\r\n\r\nconst VIDEO_EXTENSIONS = ['.mp4', '.mov', '.avi', '.webm', '.mkv', '.m4v'];\r\n\r\nexport function isVideoUrl(item: DropzoneValueItem): boolean {\r\n if (typeof item !== 'string') return false;\r\n try {\r\n const path = new URL(item).pathname.toLowerCase();\r\n return VIDEO_EXTENSIONS.some((ext) => path.endsWith(ext));\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function extractName(url: string) {\r\n try {\r\n const parts = url.split('?')[0].split('#')[0].split('/');\r\n return parts[parts.length - 1] || url;\r\n } catch {\r\n return url;\r\n }\r\n}\r\n\r\nexport const DefaultFileIcon = () => {\r\n return (\r\n <svg width=\"55\" height=\"55\" viewBox=\"0 0 55 55\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <mask id=\"mask0_2430_114601\" maskUnits=\"userSpaceOnUse\" x=\"7\" y=\"4\" width=\"39\" height=\"46\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.25 4.68359H45.6174V49.354H7.25V4.68359Z\" fill=\"white\"/>\r\n </mask>\r\n <g mask=\"url(#mask0_2430_114601)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.5386 8.05859C13.8103 8.05859 10.7143 11.0781 10.6266 14.8018V38.9196C10.5456 42.7468 13.5606 45.8968 17.3518 45.9801H35.5386C39.2938 45.8451 42.2661 42.7468 42.2413 38.9308V18.9216L31.8148 8.05859H17.5656H17.5386ZM17.5664 49.3551H17.2829C11.6309 49.2336 7.1309 44.5356 7.2524 38.8836V14.7613C7.38515 9.17909 11.9932 4.68359 17.5327 4.68359H17.5732H32.5334C32.9924 4.68359 33.4312 4.87034 33.7507 5.20109L45.1492 17.0743C45.4484 17.3871 45.6172 17.8078 45.6172 18.2421V38.9196C45.6532 44.5648 41.2522 49.1526 35.5979 49.3551H17.5664Z\" fill=\"#0D0E2B\" fill-opacity=\"0.7\"/>\r\n </g>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M43.9198 20.3703H37.7233C33.6036 20.359 30.2578 17.002 30.2578 12.889V6.34375C30.2578 5.41225 31.0138 4.65625 31.9453 4.65625C32.8768 4.65625 33.6328 5.41225 33.6328 6.34375V12.889C33.6328 15.148 35.4688 16.9885 37.7278 16.9953H43.9198C44.8513 16.9953 45.6073 17.7513 45.6073 18.6828C45.6073 19.6143 44.8513 20.3703 43.9198 20.3703Z\" fill=\"#0D0E2B\" fill-opacity=\"0.7\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.5708 37.729C24.6393 37.729 23.8833 36.973 23.8833 36.0415V22.4492C23.8833 21.5177 24.6393 20.7617 25.5708 20.7617C26.5023 20.7617 27.2583 21.5177 27.2583 22.4492V36.0415C27.2583 36.973 26.5023 37.729 25.5708 37.729Z\" fill=\"#0D0E2B\" fill-opacity=\"0.7\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M25.5678 37.7279C25.1201 37.7279 24.6881 37.5501 24.3731 37.2306L19.0968 31.9341C18.4398 31.2726 18.4421 30.2039 19.1013 29.5469C19.7628 28.8899 20.8316 28.8899 21.4886 29.5514L25.5678 33.6509L29.6471 29.5514C30.3041 28.8899 31.3728 28.8899 32.0343 29.5469C32.6936 30.2039 32.6958 31.2726 32.0388 31.9341L26.7626 37.2306C26.4476 37.5501 26.0156 37.7279 25.5678 37.7279Z\" fill=\"#0D0E2B\" fill-opacity=\"0.7\"/>\r\n </svg>\r\n \r\n );\r\n};\r\n"],"names":["isFile","item","VIDEO_EXTENSIONS","isVideoUrl","path","ext","extractName","url","parts","DefaultFileIcon","jsxs","jsx"],"mappings":";AAEO,SAASA,EAAOC,GAAuC;AAC5D,SAAOA,aAAgB;AACzB;AAEA,MAAMC,IAAmB,CAAC,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,MAAM;AAElE,SAASC,EAAWF,GAAkC;AAC3D,MAAI,OAAOA,KAAS,SAAU,QAAO;AACrC,MAAI;AACF,UAAMG,IAAO,IAAI,IAAIH,CAAI,EAAE,SAAS,YAAA;AACpC,WAAOC,EAAiB,KAAK,CAACG,MAAQD,EAAK,SAASC,CAAG,CAAC;AAAA,EAC1D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAASC,EAAYC,GAAa;AACvC,MAAI;AACF,UAAMC,IAAQD,EAAI,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG;AACvD,WAAOC,EAAMA,EAAM,SAAS,CAAC,KAAKD;AAAA,EACpC,QAAQ;AACN,WAAOA;AAAA,EACT;AACF;AAEO,MAAME,IAAkB,MAE3B,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAClE,UAAA;AAAA,EAAA,gBAAAC,EAAC,QAAA,EAAK,IAAG,qBAAoB,WAAU,kBAAiB,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MACtF,UAAA,gBAAAA,EAAC,QAAA,EAAK,aAAU,WAAU,aAAU,WAAU,GAAE,8CAA6C,MAAK,QAAA,CAAO,EAAA,CACzG;AAAA,oBACC,KAAA,EAAE,MAAK,2BACR,UAAA,gBAAAA,EAAC,UAAK,aAAU,WAAU,aAAU,WAAU,GAAE,4hBAA2hB,MAAK,WAAU,gBAAa,OAAK,GAC5mB;AAAA,EACA,gBAAAA,EAAC,QAAA,EAAK,aAAU,WAAU,aAAU,WAAU,GAAE,gVAA+U,MAAK,WAAU,gBAAa,MAAA,CAAK;AAAA,EACha,gBAAAA,EAAC,QAAA,EAAK,aAAU,WAAU,aAAU,WAAU,GAAE,+NAA8N,MAAK,WAAU,gBAAa,MAAA,CAAK;AAAA,EAC/S,gBAAAA,EAAC,QAAA,EAAK,aAAU,WAAU,aAAU,WAAU,GAAE,qXAAoX,MAAK,WAAU,gBAAa,MAAA,CAAK;AAAA,GACrc;"}
package/Dropzone/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import { Dropzone as _ } from "./Dropzone.js";
2
- import { DEFAULT_DOCUMENT_TYPES as o, DEFAULT_FILE_TYPES as r, DEFAULT_IMAGES_TYPES as A, DEFAULT_VIDEO_TYPES as F } from "./Dropzone.types.js";
2
+ import { DEFAULT_AUDIO_TYPES as A, DEFAULT_DOCUMENT_TYPES as U, DEFAULT_FILE_TYPES as o, DEFAULT_IMAGES_TYPES as F, DEFAULT_VIDEO_TYPES as L } from "./Dropzone.types.js";
3
3
  export {
4
- o as DEFAULT_DOCUMENT_TYPES,
5
- r as DEFAULT_FILE_TYPES,
6
- A as DEFAULT_IMAGES_TYPES,
7
- F as DEFAULT_VIDEO_TYPES,
4
+ A as DEFAULT_AUDIO_TYPES,
5
+ U as DEFAULT_DOCUMENT_TYPES,
6
+ o as DEFAULT_FILE_TYPES,
7
+ F as DEFAULT_IMAGES_TYPES,
8
+ L as DEFAULT_VIDEO_TYPES,
8
9
  _ as Dropzone
9
10
  };
10
11
  //# sourceMappingURL=index.js.map