@caprionlinesrl/puck-plugin-media 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +422 -0
- package/dist/index.css +2288 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +479 -0
- package/dist/index.d.ts +479 -0
- package/dist/index.js +3029 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2990 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Modal/Modal.module.css","../src/components/SearchBar/SearchBar.module.css","../src/components/LoadMoreButton/LoadMoreButton.module.css","../src/components/ConfirmDialog/ConfirmDialog.module.css","../src/components/SelectionToolbar/SelectionToolbar.module.css","../src/components/ImageGrid/ImageGrid.module.css","../src/components/UploadDropzone/UploadDropzone.module.css","../src/components/UploadQueue/UploadQueue.module.css","../src/components/ImagePickerModal/ImagePickerModal.module.css","../src/components/ImageField/ImageField.module.css","../src/components/GalleryPickerModal/GalleryPickerModal.module.css","../src/components/GalleryField/GalleryField.module.css","../src/components/DocumentPickerModal/DocumentPickerModal.module.css","../src/components/DocumentField/DocumentField.module.css","../src/components/MediaPanel/MediaPanel.module.css"],"sourcesContent":[".backdrop {\n position: fixed;\n inset: 0;\n z-index: 9999;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n animation: fadeIn 0.15s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.modal {\n position: relative;\n width: 100%;\n max-width: 900px;\n max-height: calc(100vh - 48px);\n background: white;\n border-radius: 12px;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: slideUp 0.2s ease;\n}\n\n.modal.small {\n max-width: 700px;\n}\n\n@keyframes slideUp {\n from { opacity: 0; transform: translateY(16px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 20px;\n border-bottom: 1px solid #e5e5e5;\n flex-shrink: 0;\n}\n\n.title {\n flex: 1;\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #171717;\n}\n\n.headerActions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.closeButton {\n padding: 8px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n color: #737373;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s, color 0.15s;\n}\n\n.closeButton:hover {\n background: #f5f5f5;\n color: #171717;\n}\n\n.toolbar {\n padding: 16px 20px;\n border-bottom: 1px solid #e5e5e5;\n flex-shrink: 0;\n}\n\n.content {\n flex: 1;\n overflow-y: scroll;\n padding: 20px;\n min-height: 200px;\n}\n\n.loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n height: 200px;\n color: #737373;\n font-size: 14px;\n}\n\n.spinner {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.empty {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: #737373;\n font-size: 14px;\n text-align: center;\n}\n\n.footer {\n flex-shrink: 0;\n padding: 12px 20px;\n border-top: 1px solid #e5e5e5;\n background: #fafafa;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n}\n\n/* Mobile Responsive */\n@media (max-width: 640px) {\n .backdrop {\n padding: 0;\n align-items: flex-end;\n }\n\n .modal {\n width: 100%;\n max-width: 100%;\n max-height: 90vh;\n min-height: 400px;\n border-radius: 12px 12px 0 0;\n }\n\n .header {\n flex-wrap: wrap;\n gap: 8px;\n }\n\n .headerActions {\n flex-wrap: wrap;\n }\n\n .footer {\n flex-direction: column;\n gap: 12px;\n }\n}\n",".container {\n position: relative;\n flex: 1;\n}\n\n.icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: #a3a3a3;\n pointer-events: none;\n}\n\n.input {\n width: 100%;\n padding: 10px 40px 10px 44px;\n border: 1px solid #e5e5e5;\n border-radius: 8px;\n font-size: 14px;\n background: #fafafa;\n transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;\n}\n\n.input:focus {\n outline: none;\n border-color: #3b82f6;\n background: white;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.input::placeholder {\n color: #a3a3a3;\n}\n\n.input::-webkit-search-cancel-button {\n display: none;\n}\n\n.clearButton {\n position: absolute;\n right: 12px;\n top: 50%;\n transform: translateY(-50%);\n padding: 4px;\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n color: #737373;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.clearButton:hover {\n background: #e5e5e5;\n color: #171717;\n}\n",".container {\n display: flex;\n justify-content: center;\n margin-top: 20px;\n}\n\n.button {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #f5f5f5;\n border: 1px solid #e5e5e5;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #171717;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.button:hover:not(:disabled) {\n background: #ebebeb;\n border-color: #d4d4d4;\n}\n\n.button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.spinner {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n",".overlay {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n animation: fadeIn 0.15s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.dialog {\n background: white;\n border-radius: 12px;\n padding: 24px;\n max-width: 400px;\n width: 90%;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\n animation: slideUp 0.2s ease;\n}\n\n@keyframes slideUp {\n from { opacity: 0; transform: translateY(16px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.title {\n margin: 0 0 12px 0;\n font-size: 18px;\n font-weight: 600;\n color: #171717;\n}\n\n.message {\n margin: 0 0 20px 0;\n font-size: 14px;\n color: #525252;\n line-height: 1.5;\n}\n\n.actions {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.cancelButton {\n padding: 10px 16px;\n background: #f5f5f5;\n border: 1px solid #e5e5e5;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #171717;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.cancelButton:hover:not(:disabled) {\n background: #ebebeb;\n}\n\n.cancelButton:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.confirmButton {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n background: #3b82f6;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.confirmButton:hover:not(:disabled) {\n background: #2563eb;\n}\n\n.confirmButton.danger {\n background: #dc2626;\n}\n\n.confirmButton.danger:hover:not(:disabled) {\n background: #b91c1c;\n}\n\n.confirmButton:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.spinner {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* Mobile Responsive */\n@media (max-width: 640px) {\n .actions {\n flex-direction: column;\n }\n\n .cancelButton,\n .confirmButton {\n width: 100%;\n justify-content: center;\n }\n}\n",".toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n gap: 16px;\n}\n\n.selectAllButton {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: #525252;\n transition: background 0.15s;\n}\n\n.selectAllButton:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.checkbox {\n width: 20px;\n height: 20px;\n border: 2px solid #d4d4d4;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s, border-color 0.15s;\n background: white;\n}\n\n.checked .checkbox {\n background: #3b82f6;\n border-color: #3b82f6;\n color: white;\n}\n\n.indeterminate .checkbox {\n background: #3b82f6;\n border-color: #3b82f6;\n}\n\n.indeterminateLine {\n width: 10px;\n height: 2px;\n background: white;\n border-radius: 1px;\n}\n\n.actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.cancelButton {\n padding: 8px 16px;\n background: transparent;\n border: 1px solid #e5e5e5;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #525252;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.cancelButton:hover {\n background: #f5f5f5;\n border-color: #d4d4d4;\n}\n\n.deleteButton {\n padding: 8px 16px;\n background: #dc2626;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: background 0.15s, opacity 0.15s;\n}\n\n.deleteButton:hover:not(:disabled) {\n background: #b91c1c;\n}\n\n.deleteButton:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Mobile Responsive */\n@media (max-width: 640px) {\n .toolbar {\n flex-wrap: wrap;\n gap: 12px;\n }\n\n .selectAllButton {\n order: 1;\n }\n\n .actions {\n order: 2;\n width: 100%;\n justify-content: stretch;\n }\n\n .cancelButton,\n .deleteButton {\n flex: 1;\n }\n}\n",".grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 12px;\n}\n\n@media (min-width: 640px) {\n .grid {\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n }\n}\n\n.itemContainer {\n display: flex;\n flex-direction: column;\n background: white;\n border: 2px solid #e5e5e5;\n border-radius: 8px;\n overflow: hidden;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n\n.itemContainer:hover {\n border-color: #3b82f6;\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15);\n}\n\n.itemContainer:has(.item:focus) {\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);\n}\n\n.itemContainer:has(.selected) {\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);\n}\n\n.item {\n display: block;\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n padding: 0;\n transition: transform 0.15s;\n}\n\n.item:focus {\n outline: none;\n}\n\n.item:active {\n transform: scale(0.98);\n}\n\n.imageWrapper {\n position: relative;\n aspect-ratio: 1;\n background: #f5f5f5;\n overflow: hidden;\n}\n\n.image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n transition: transform 0.2s;\n}\n\n.itemContainer:hover .image {\n transform: scale(1.05);\n}\n\n/* Checkmark for selection (normal mode) */\n.checkmark {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 24px;\n height: 24px;\n background: #3b82f6;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n/* Checkbox for manage mode */\n.checkbox {\n position: absolute;\n top: 8px;\n left: 8px;\n width: 22px;\n height: 22px;\n background: white;\n border: 2px solid #d4d4d4;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transition: background 0.15s, border-color 0.15s;\n}\n\n.checkbox:hover {\n border-color: #3b82f6;\n}\n\n.checkboxChecked {\n background: #3b82f6;\n border-color: #3b82f6;\n}\n\n.info {\n padding: 8px 10px;\n min-height: 48px;\n}\n\n.infoRow {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 4px;\n}\n\n.infoText {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.filename {\n font-size: 12px;\n font-weight: 500;\n color: #171717;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 1.4;\n}\n\n.meta {\n display: flex;\n gap: 8px;\n font-size: 11px;\n color: #737373;\n}\n\n.meta span {\n white-space: nowrap;\n}\n\n/* Edit Button */\n.editButton {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n color: #a3a3a3;\n transition: background 0.15s, color 0.15s;\n flex-shrink: 0;\n}\n\n.editButton:hover {\n background: #f5f5f5;\n color: #3b82f6;\n}\n\n.editButton:focus {\n outline: none;\n background: #f5f5f5;\n color: #3b82f6;\n}\n",".dropzone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 20px 16px;\n border: 2px dashed #d4d4d4;\n border-radius: 8px;\n background: #fafafa;\n cursor: pointer;\n transition: border-color 0.15s, background 0.15s;\n user-select: none;\n}\n\n.dropzone:hover:not(.disabled) {\n border-color: #3b82f6;\n background: #eff6ff;\n}\n\n.dropzone:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);\n}\n\n.dropzone.dragging {\n border-color: #3b82f6;\n background: #dbeafe;\n border-style: solid;\n}\n\n.dropzone.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.input {\n display: none;\n}\n\n.icon {\n color: #737373;\n transition: color 0.15s;\n}\n\n.dropzone:hover:not(.disabled) .icon,\n.dropzone.dragging .icon {\n color: #3b82f6;\n}\n\n.text {\n font-size: 14px;\n font-weight: 500;\n color: #525252;\n text-align: center;\n}\n\n.dropzone:hover:not(.disabled) .text,\n.dropzone.dragging .text {\n color: #3b82f6;\n}\n\n.hint {\n font-size: 12px;\n color: #a3a3a3;\n text-align: center;\n}\n",".container {\n border: 1px solid #e5e5e5;\n border-radius: 8px;\n background: white;\n overflow: hidden;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: #f5f5f5;\n border-bottom: 1px solid #e5e5e5;\n}\n\n.title {\n font-size: 13px;\n font-weight: 500;\n color: #171717;\n}\n\n.clearButton {\n padding: 4px 8px;\n background: transparent;\n border: none;\n border-radius: 4px;\n font-size: 12px;\n color: #3b82f6;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.clearButton:hover {\n background: #eff6ff;\n}\n\n.list {\n max-height: 200px;\n overflow-y: auto;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.item:last-child {\n border-bottom: none;\n}\n\n.preview {\n position: relative;\n width: 40px;\n height: 40px;\n border-radius: 4px;\n overflow: hidden;\n flex-shrink: 0;\n background: #f5f5f5;\n}\n\n.previewImage {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.previewPlaceholder {\n width: 100%;\n height: 100%;\n background: linear-gradient(135deg, #e5e5e5 0%, #f5f5f5 100%);\n}\n\n.progressOverlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.3);\n}\n\n.progressBar {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background: rgba(0, 0, 0, 0.5);\n transition: height 0.2s ease;\n}\n\n.progressText {\n position: relative;\n z-index: 1;\n font-size: 10px;\n font-weight: 600;\n color: white;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);\n}\n\n.info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.filename {\n font-size: 13px;\n color: #171717;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.size {\n font-size: 11px;\n color: #737373;\n}\n\n.error {\n font-size: 11px;\n color: #dc2626;\n}\n\n.actions {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n}\n\n.cancelButton {\n padding: 4px;\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n color: #737373;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s, color 0.15s;\n}\n\n.cancelButton:hover {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.spinner {\n color: #3b82f6;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.successIcon {\n color: #16a34a;\n}\n\n.errorIcon {\n color: #dc2626;\n}\n\n/* Status-based item styles */\n.item.completed {\n background: #f0fdf4;\n}\n\n.item.error {\n background: #fef2f2;\n}\n","/* Header Buttons */\n.backButton {\n padding: 8px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n color: #737373;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s, color 0.15s;\n}\n\n.backButton:hover {\n background: #f5f5f5;\n color: #171717;\n}\n\n.selectModeButton {\n padding: 8px 14px;\n background: #f5f5f5;\n border: 1px solid #e5e5e5;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #525252;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.selectModeButton:hover {\n background: #ebebeb;\n border-color: #d4d4d4;\n}\n\n/* Toolbar */\n.toolbar {\n display: flex;\n gap: 12px;\n}\n\n/* Upload Section */\n.uploadSection {\n margin-bottom: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Footer */\n.footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n width: 100%;\n}\n\n.footerInfo {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n flex: 1;\n}\n\n.footerImage {\n width: 36px;\n height: 36px;\n object-fit: cover;\n border-radius: 4px;\n border: 1px solid #e5e5e5;\n flex-shrink: 0;\n}\n\n.footerFilename {\n font-size: 13px;\n font-weight: 500;\n color: #171717;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.footerMeta {\n font-size: 12px;\n color: #737373;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.selectButton {\n padding: 10px 20px;\n background: #3b82f6;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: background 0.15s;\n flex-shrink: 0;\n}\n\n.selectButton:hover {\n background: #2563eb;\n}\n\n/* Edit View */\n.editContent {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.editPreview {\n display: flex;\n justify-content: center;\n align-items: center;\n background: #f5f5f5;\n border-radius: 8px;\n padding: 20px;\n min-height: 200px;\n max-height: 300px;\n}\n\n.editImage {\n max-width: 100%;\n max-height: 260px;\n object-fit: contain;\n border-radius: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.editInfo {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px;\n background: #fafafa;\n border-radius: 8px;\n}\n\n.editInfoRow {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.editInfoLabel {\n font-size: 13px;\n font-weight: 500;\n color: #737373;\n min-width: 100px;\n}\n\n.editInfoValue {\n font-size: 13px;\n color: #171717;\n}\n\n.editField {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.editFieldHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.editFieldLabel {\n font-size: 14px;\n font-weight: 600;\n color: #171717;\n margin: 0;\n}\n\n.langTabs {\n display: flex;\n gap: 2px;\n background: #e5e5e5;\n border-radius: 6px;\n padding: 3px;\n}\n\n.langTab {\n padding: 6px 12px;\n font-size: 12px;\n font-weight: 600;\n color: #737373;\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.langTab:hover {\n color: #525252;\n}\n\n.langTabActive {\n background: white;\n color: #171717;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.editInput {\n padding: 12px 14px;\n border: 1px solid #e5e5e5;\n border-radius: 8px;\n font-size: 14px;\n background: white;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n\n.editInput:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.editInput::placeholder {\n color: #a3a3a3;\n}\n\n.editFooter {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.saveButton {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #10b981;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.saveButton:hover:not(:disabled) {\n background: #059669;\n}\n\n.saveButton:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.spinner {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* Mobile Responsive */\n@media (max-width: 640px) {\n .footer {\n flex-direction: column;\n gap: 12px;\n }\n\n .footerInfo {\n width: 100%;\n }\n\n .selectButton {\n width: 100%;\n }\n\n .editPreview {\n min-height: 150px;\n max-height: 200px;\n }\n\n .editImage {\n max-height: 160px;\n }\n\n .editInfoRow {\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n }\n\n .editInfoLabel {\n min-width: auto;\n }\n}\n",".container {\n margin-top: 8px;\n}\n\n.preview {\n position: relative;\n border-radius: 6px;\n overflow: hidden;\n border: 1px solid #e5e5e5;\n background: #f5f5f5;\n}\n\n.image {\n width: 100%;\n height: 128px;\n object-fit: cover;\n display: block;\n}\n\n.overlay {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.preview:hover .overlay {\n opacity: 1;\n}\n\n.changeButton {\n padding: 8px 16px;\n background: white;\n border: none;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.changeButton:hover {\n background: #f0f0f0;\n}\n\n.removeButton {\n padding: 8px;\n background: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #dc2626;\n transition: background 0.15s;\n}\n\n.removeButton:hover {\n background: #fee2e2;\n}\n\n.selectButton {\n width: 100%;\n padding: 24px 16px;\n border: 2px dashed #d4d4d4;\n border-radius: 6px;\n background: transparent;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n color: #737373;\n font-size: 13px;\n transition: border-color 0.15s, color 0.15s, background 0.15s;\n}\n\n.selectButton:hover {\n border-color: #3b82f6;\n color: #3b82f6;\n background: #eff6ff;\n}\n\n.selectButton:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);\n}\n","/* Header Buttons */\n.backButton {\n padding: 8px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n color: #737373;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s, color 0.15s;\n}\n\n.backButton:hover {\n background: #f5f5f5;\n color: #171717;\n}\n\n.selectModeButton {\n padding: 8px 16px;\n background: #f5f5f5;\n border: 1px solid #e5e5e5;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #525252;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.selectModeButton:hover {\n background: #ebebeb;\n border-color: #d4d4d4;\n}\n\n/* Toolbar */\n.toolbar {\n display: flex;\n gap: 12px;\n}\n\n.createButton {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 16px;\n background: #3b82f6;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s;\n}\n\n.createButton:hover {\n background: #2563eb;\n}\n\n/* Create Form */\n.createForm {\n display: flex;\n gap: 8px;\n padding: 12px;\n background: #f5f5f5;\n border-radius: 8px;\n margin-bottom: 16px;\n}\n\n.createInput {\n flex: 1;\n padding: 8px 12px;\n border: 1px solid #e5e5e5;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n}\n\n.createInput:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.createSubmitButton {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: #3b82f6;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.createSubmitButton:hover:not(:disabled) {\n background: #2563eb;\n}\n\n.createSubmitButton:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.createCancelButton {\n padding: 8px 12px;\n background: white;\n border: 1px solid #e5e5e5;\n border-radius: 6px;\n font-size: 14px;\n color: #525252;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.createCancelButton:hover {\n background: #f5f5f5;\n}\n\n/* Upload Section */\n.uploadSection {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Gallery Grid */\n.galleryGrid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 16px;\n}\n\n.galleryCard {\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.galleryCardButton {\n display: block;\n width: 100%;\n padding: 0;\n background: white;\n border: 2px solid #e5e5e5;\n border-radius: 8px;\n cursor: pointer;\n text-align: left;\n transition: border-color 0.15s, box-shadow 0.15s;\n overflow: hidden;\n}\n\n.galleryCardButton:hover {\n border-color: #3b82f6;\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15);\n}\n\n.galleryCardButton.selected {\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);\n}\n\n.checkbox {\n position: absolute;\n top: 8px;\n left: 8px;\n width: 22px;\n height: 22px;\n background: white;\n border: 2px solid #d4d4d4;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n transition: background 0.15s, border-color 0.15s;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.checkboxChecked {\n background: #3b82f6;\n border-color: #3b82f6;\n color: white;\n}\n\n.galleryCover {\n aspect-ratio: 4/3;\n background: #f5f5f5;\n overflow: hidden;\n}\n\n.galleryCover img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.2s;\n}\n\n.galleryCardButton:hover .galleryCover img {\n transform: scale(1.05);\n}\n\n.galleryCoverPlaceholder {\n width: 100%;\n height: 100%;\n background: linear-gradient(135deg, #e5e5e5 0%, #f5f5f5 100%);\n}\n\n.galleryInfo {\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.galleryName {\n font-size: 14px;\n font-weight: 500;\n color: #171717;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.galleryCount {\n font-size: 12px;\n color: #737373;\n}\n\n/* Footer */\n.footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n width: 100%;\n}\n\n.footerInfo {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n}\n\n.footerText {\n font-size: 13px;\n color: #737373;\n}\n\n.selectButton {\n padding: 10px 20px;\n background: #3b82f6;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: background 0.15s;\n flex-shrink: 0;\n}\n\n.selectButton:hover {\n background: #2563eb;\n}\n\n/* Edit View */\n.editContent {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.editPreview {\n display: flex;\n justify-content: center;\n align-items: center;\n background: #f5f5f5;\n border-radius: 8px;\n padding: 20px;\n min-height: 200px;\n max-height: 300px;\n}\n\n.editImage {\n max-width: 100%;\n max-height: 260px;\n object-fit: contain;\n border-radius: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.editInfo {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px;\n background: #fafafa;\n border-radius: 8px;\n}\n\n.editInfoRow {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.editInfoLabel {\n font-size: 13px;\n font-weight: 500;\n color: #737373;\n min-width: 100px;\n}\n\n.editInfoValue {\n font-size: 13px;\n color: #171717;\n}\n\n.editField {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.editFieldHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.editFieldLabel {\n font-size: 14px;\n font-weight: 600;\n color: #171717;\n margin: 0;\n}\n\n.langTabs {\n display: flex;\n gap: 2px;\n background: #e5e5e5;\n border-radius: 6px;\n padding: 3px;\n}\n\n.langTab {\n padding: 6px 12px;\n font-size: 12px;\n font-weight: 600;\n color: #737373;\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.langTab:hover {\n color: #525252;\n}\n\n.langTabActive {\n background: white;\n color: #171717;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.editInput {\n padding: 12px 14px;\n border: 1px solid #e5e5e5;\n border-radius: 8px;\n font-size: 14px;\n background: white;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n\n.editInput:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.editInput::placeholder {\n color: #a3a3a3;\n}\n\n.editFooter {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.saveButton {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #10b981;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.saveButton:hover:not(:disabled) {\n background: #059669;\n}\n\n.saveButton:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.spinner {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* Mobile Responsive */\n@media (max-width: 640px) {\n .toolbar {\n flex-direction: column;\n }\n\n .createButton {\n width: 100%;\n justify-content: center;\n }\n\n .footer {\n flex-direction: column;\n gap: 12px;\n }\n\n .footerInfo {\n width: 100%;\n }\n\n .selectButton {\n width: 100%;\n }\n\n .editPreview {\n min-height: 150px;\n max-height: 200px;\n }\n\n .editImage {\n max-height: 160px;\n }\n\n .editInfoRow {\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n }\n\n .editInfoLabel {\n min-width: auto;\n }\n}\n",".container {\n margin-top: 8px;\n}\n\n.preview {\n border-radius: 6px;\n border: 1px solid #e5e5e5;\n background: #fafafa;\n padding: 12px;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.name {\n font-size: 14px;\n font-weight: 500;\n color: #171717;\n}\n\n.count {\n font-size: 12px;\n color: #737373;\n}\n\n.thumbnails {\n display: flex;\n gap: 6px;\n margin-bottom: 12px;\n}\n\n.thumbnail {\n width: 48px;\n height: 48px;\n border-radius: 4px;\n overflow: hidden;\n border: 1px solid #e5e5e5;\n background: #f5f5f5;\n}\n\n.thumbnail img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.more {\n width: 48px;\n height: 48px;\n border-radius: 4px;\n border: 1px solid #e5e5e5;\n background: #f5f5f5;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 500;\n color: #737373;\n}\n\n.actions {\n display: flex;\n gap: 8px;\n}\n\n.changeButton {\n flex: 1;\n padding: 8px 12px;\n background: white;\n border: 1px solid #e5e5e5;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n color: #525252;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.changeButton:hover {\n background: #f5f5f5;\n border-color: #d4d4d4;\n}\n\n.removeButton {\n padding: 8px;\n background: white;\n border: 1px solid #e5e5e5;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #dc2626;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.removeButton:hover {\n background: #fee2e2;\n border-color: #fecaca;\n}\n\n.selectButton {\n width: 100%;\n padding: 24px 16px;\n border: 2px dashed #d4d4d4;\n border-radius: 6px;\n background: transparent;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n color: #737373;\n font-size: 13px;\n transition: border-color 0.15s, color 0.15s, background 0.15s;\n}\n\n.selectButton:hover {\n border-color: #3b82f6;\n color: #3b82f6;\n background: #eff6ff;\n}\n\n.selectButton:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);\n}\n","/* Header Buttons */\n.backButton {\n padding: 8px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n color: #737373;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s, color 0.15s;\n}\n\n.backButton:hover {\n background: #f5f5f5;\n color: #171717;\n}\n\n.selectModeButton {\n padding: 8px 16px;\n background: #f5f5f5;\n border: 1px solid #e5e5e5;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #525252;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.selectModeButton:hover {\n background: #ebebeb;\n border-color: #d4d4d4;\n}\n\n/* Toolbar */\n.toolbar {\n display: flex;\n gap: 12px;\n}\n\n/* Upload Section */\n.uploadSection {\n margin-bottom: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Document List */\n.documentList {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.documentItemContainer {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.documentItem {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n background: white;\n border: 1px solid #e5e5e5;\n border-radius: 8px;\n cursor: pointer;\n text-align: left;\n transition: border-color 0.15s, background 0.15s;\n}\n\n.documentItem:hover {\n border-color: #3b82f6;\n background: #f9fafb;\n}\n\n.documentItem.selected {\n border-color: #3b82f6;\n background: #eff6ff;\n}\n\n.checkbox {\n width: 20px;\n height: 20px;\n border: 2px solid #d4d4d4;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.checkboxChecked {\n background: #3b82f6;\n border-color: #3b82f6;\n color: white;\n}\n\n.documentIcon {\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #f5f5f5;\n border-radius: 6px;\n}\n\n.pdfIcon {\n color: #dc2626;\n}\n\n.fileIcon {\n color: #737373;\n}\n\n.documentInfo {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.documentName {\n font-size: 14px;\n font-weight: 500;\n color: #171717;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.documentMeta {\n font-size: 12px;\n color: #737373;\n}\n\n.checkmark {\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n background: #3b82f6;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n}\n\n.editButton {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n padding: 8px;\n background: white;\n border: 1px solid #e5e5e5;\n border-radius: 6px;\n cursor: pointer;\n color: #737373;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.15s, background 0.15s, color 0.15s;\n}\n\n.documentItemContainer:hover .editButton {\n opacity: 1;\n}\n\n.editButton:hover {\n background: #f5f5f5;\n color: #171717;\n}\n\n/* Footer */\n.footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n width: 100%;\n}\n\n.footerInfo {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n flex: 1;\n}\n\n.footerIcon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border-radius: 6px;\n border: 1px solid #e5e5e5;\n flex-shrink: 0;\n}\n\n.footerFilename {\n font-size: 13px;\n font-weight: 500;\n color: #171717;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.footerMeta {\n font-size: 12px;\n color: #737373;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.selectButton {\n padding: 10px 20px;\n background: #3b82f6;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: background 0.15s;\n flex-shrink: 0;\n}\n\n.selectButton:hover {\n background: #2563eb;\n}\n\n/* Edit View */\n.editContent {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.editPreview {\n display: flex;\n justify-content: center;\n align-items: center;\n background: #f5f5f5;\n border-radius: 8px;\n padding: 40px;\n}\n\n.editIcon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border-radius: 12px;\n border: 1px solid #e5e5e5;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.editIcon svg {\n width: 40px;\n height: 40px;\n}\n\n.editInfo {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px;\n background: #fafafa;\n border-radius: 8px;\n}\n\n.editInfoRow {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.editInfoLabel {\n font-size: 13px;\n font-weight: 500;\n color: #737373;\n min-width: 80px;\n}\n\n.editInfoValue {\n font-size: 13px;\n color: #171717;\n}\n\n.editField {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.editFieldHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.editFieldLabel {\n font-size: 14px;\n font-weight: 600;\n color: #171717;\n margin: 0;\n}\n\n.langTabs {\n display: flex;\n gap: 2px;\n background: #e5e5e5;\n border-radius: 6px;\n padding: 3px;\n}\n\n.langTab {\n padding: 6px 12px;\n font-size: 12px;\n font-weight: 600;\n color: #737373;\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.langTab:hover {\n color: #525252;\n}\n\n.langTabActive {\n background: white;\n color: #171717;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.editInput {\n padding: 12px 14px;\n border: 1px solid #e5e5e5;\n border-radius: 8px;\n font-size: 14px;\n background: white;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n\n.editInput:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.editInput::placeholder {\n color: #a3a3a3;\n}\n\n.editFooter {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.saveButton {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #10b981;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.saveButton:hover:not(:disabled) {\n background: #059669;\n}\n\n.saveButton:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.spinner {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* Mobile Responsive */\n@media (max-width: 640px) {\n .footer {\n flex-direction: column;\n gap: 12px;\n }\n\n .footerInfo {\n width: 100%;\n }\n\n .selectButton {\n width: 100%;\n }\n\n .editInfoRow {\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n }\n\n .editInfoLabel {\n min-width: auto;\n }\n}\n",".container {\n margin-top: 8px;\n}\n\n.preview {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border-radius: 6px;\n border: 1px solid #e5e5e5;\n background: #fafafa;\n}\n\n.iconWrapper {\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border-radius: 6px;\n border: 1px solid #e5e5e5;\n}\n\n.pdfIcon {\n color: #dc2626;\n}\n\n.fileIcon {\n color: #737373;\n}\n\n.info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.title {\n font-size: 13px;\n font-weight: 500;\n color: #171717;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.meta {\n font-size: 11px;\n color: #737373;\n}\n\n.actions {\n flex-shrink: 0;\n display: flex;\n gap: 6px;\n}\n\n.changeButton {\n padding: 6px 12px;\n background: white;\n border: 1px solid #e5e5e5;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n color: #525252;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.changeButton:hover {\n background: #f5f5f5;\n border-color: #d4d4d4;\n}\n\n.removeButton {\n padding: 6px;\n background: white;\n border: 1px solid #e5e5e5;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #dc2626;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.removeButton:hover {\n background: #fee2e2;\n border-color: #fecaca;\n}\n\n.selectButton {\n width: 100%;\n padding: 24px 16px;\n border: 2px dashed #d4d4d4;\n border-radius: 6px;\n background: transparent;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n color: #737373;\n font-size: 13px;\n transition: border-color 0.15s, color 0.15s, background 0.15s;\n}\n\n.selectButton:hover {\n border-color: #3b82f6;\n color: #3b82f6;\n background: #eff6ff;\n}\n\n.selectButton:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);\n}\n",".panel {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background: var(--puck-color-grey-12, #f5f5f5);\n border: 1px solid var(--puck-color-grey-09, #e5e5e5);\n border-radius: 8px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: var(--puck-color-grey-02, #171717);\n transition: background 0.15s, border-color 0.15s;\n text-align: left;\n width: 100%;\n}\n\n.item:hover {\n background: var(--puck-color-grey-11, #ebebeb);\n border-color: var(--puck-color-grey-08, #d4d4d4);\n}\n\n.item:active {\n background: var(--puck-color-grey-10, #e0e0e0);\n}\n\n.item svg {\n flex-shrink: 0;\n color: var(--puck-color-grey-05, #737373);\n}\n\n.item:hover svg {\n color: var(--puck-color-grey-03, #525252);\n}\n"],"mappings":"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","names":["backdrop","fadeIn","modal","small","slideUp","header","title","headerActions","closeButton","toolbar","content","loading","spinner","spin","empty","footer","container","icon","input","clearButton","container","button","spinner","spin","overlay","fadeIn","dialog","slideUp","title","message","actions","cancelButton","confirmButton","danger","spinner","spin","toolbar","selectAllButton","checkbox","checked","indeterminate","indeterminateLine","actions","cancelButton","deleteButton","grid","itemContainer","item","selected","imageWrapper","image","checkmark","checkbox","checkboxChecked","info","infoRow","infoText","filename","meta","editButton","dropzone","disabled","dragging","input","icon","text","hint","container","header","title","clearButton","list","item","preview","previewImage","previewPlaceholder","progressOverlay","progressBar","progressText","info","filename","size","error","actions","cancelButton","spinner","spin","successIcon","errorIcon","completed","backButton","selectModeButton","toolbar","uploadSection","footer","footerInfo","footerImage","footerFilename","footerMeta","selectButton","editContent","editPreview","editImage","editInfo","editInfoRow","editInfoLabel","editInfoValue","editField","editFieldHeader","editFieldLabel","langTabs","langTab","langTabActive","editInput","editFooter","saveButton","spinner","spin","container","preview","image","overlay","changeButton","removeButton","selectButton","backButton","selectModeButton","toolbar","createButton","createForm","createInput","createSubmitButton","createCancelButton","uploadSection","galleryGrid","galleryCard","galleryCardButton","selected","checkbox","checkboxChecked","galleryCover","galleryCoverPlaceholder","galleryInfo","galleryName","galleryCount","footer","footerInfo","footerText","selectButton","editContent","editPreview","editImage","editInfo","editInfoRow","editInfoLabel","editInfoValue","editField","editFieldHeader","editFieldLabel","langTabs","langTab","langTabActive","editInput","editFooter","saveButton","spinner","spin","container","preview","header","name","count","thumbnails","thumbnail","more","actions","changeButton","removeButton","selectButton","backButton","selectModeButton","toolbar","uploadSection","documentList","documentItemContainer","documentItem","selected","checkbox","checkboxChecked","documentIcon","pdfIcon","fileIcon","documentInfo","documentName","documentMeta","checkmark","editButton","footer","footerInfo","footerIcon","footerFilename","footerMeta","selectButton","editContent","editPreview","editIcon","editInfo","editInfoRow","editInfoLabel","editInfoValue","editField","editFieldHeader","editFieldLabel","langTabs","langTab","langTabActive","editInput","editFooter","saveButton","spinner","spin","container","preview","iconWrapper","pdfIcon","fileIcon","info","title","meta","actions","changeButton","removeButton","selectButton","panel","item"]}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Language configuration for multilingual fields
|
|
6
|
+
*/
|
|
7
|
+
interface Language {
|
|
8
|
+
code: string;
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Default languages when not specified
|
|
13
|
+
*/
|
|
14
|
+
declare const DEFAULT_LANGUAGES: Language[];
|
|
15
|
+
/**
|
|
16
|
+
* Localized string value (e.g., { en: 'Hello', it: 'Ciao' })
|
|
17
|
+
*/
|
|
18
|
+
type LocalizedString = Record<string, string | undefined>;
|
|
19
|
+
/**
|
|
20
|
+
* Image item - used both for API responses and stored values in Puck JSON
|
|
21
|
+
*/
|
|
22
|
+
interface ImageItem {
|
|
23
|
+
/** Unique identifier */
|
|
24
|
+
id: string;
|
|
25
|
+
/** Full URL to the image file */
|
|
26
|
+
url: string;
|
|
27
|
+
/** Original filename */
|
|
28
|
+
filename?: string;
|
|
29
|
+
/** Alt text (multilingual) */
|
|
30
|
+
alt?: LocalizedString;
|
|
31
|
+
/** Image width in pixels */
|
|
32
|
+
width?: number;
|
|
33
|
+
/** Image height in pixels */
|
|
34
|
+
height?: number;
|
|
35
|
+
/** File size in bytes */
|
|
36
|
+
size?: number;
|
|
37
|
+
/** Thumbnail URL for faster loading in picker (falls back to url if not provided) */
|
|
38
|
+
thumbnailUrl?: string;
|
|
39
|
+
/** Creation date (useful for cache invalidation) */
|
|
40
|
+
createdAt?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Document item - used both for API responses and stored values in Puck JSON
|
|
44
|
+
*/
|
|
45
|
+
interface DocumentItem {
|
|
46
|
+
/** Unique identifier */
|
|
47
|
+
id: string;
|
|
48
|
+
/** Full URL to the document file */
|
|
49
|
+
url: string;
|
|
50
|
+
/** Original filename */
|
|
51
|
+
filename: string;
|
|
52
|
+
/** Display title (multilingual) */
|
|
53
|
+
title?: LocalizedString;
|
|
54
|
+
/** MIME type (e.g., 'application/pdf') */
|
|
55
|
+
mimeType: string;
|
|
56
|
+
/** File size in bytes */
|
|
57
|
+
size: number;
|
|
58
|
+
/** File extension (e.g., 'pdf', 'docx') */
|
|
59
|
+
extension: string;
|
|
60
|
+
/** Creation date (useful for cache invalidation) */
|
|
61
|
+
createdAt?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Gallery item - used both for API responses and stored values in Puck JSON
|
|
65
|
+
*/
|
|
66
|
+
interface GalleryItem {
|
|
67
|
+
/** Unique identifier */
|
|
68
|
+
id: string;
|
|
69
|
+
/** Gallery name */
|
|
70
|
+
name: string;
|
|
71
|
+
/** Cover image for preview */
|
|
72
|
+
coverImage?: ImageItem;
|
|
73
|
+
/** Images in the gallery */
|
|
74
|
+
images: ImageItem[];
|
|
75
|
+
/** Number of images in the gallery (optional, can be calculated from images.length) */
|
|
76
|
+
imageCount?: number;
|
|
77
|
+
/** Creation date (useful for cache invalidation) */
|
|
78
|
+
createdAt?: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Parameters passed to fetchList functions
|
|
82
|
+
*/
|
|
83
|
+
interface FetchListParams {
|
|
84
|
+
/** Search query string */
|
|
85
|
+
query?: string;
|
|
86
|
+
/** Page number (1-indexed) */
|
|
87
|
+
page?: number;
|
|
88
|
+
/** Items per page */
|
|
89
|
+
pageSize?: number;
|
|
90
|
+
/** Additional filters */
|
|
91
|
+
filters?: Record<string, unknown>;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Result from fetchList - paginated result
|
|
95
|
+
*/
|
|
96
|
+
interface FetchListResult<T> {
|
|
97
|
+
/** Array of items */
|
|
98
|
+
items: T[];
|
|
99
|
+
/** Total number of items (for pagination) */
|
|
100
|
+
total?: number;
|
|
101
|
+
/** Whether there are more items to load */
|
|
102
|
+
hasMore?: boolean;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generic fetch list function type
|
|
106
|
+
*/
|
|
107
|
+
type FetchListFn<T> = (params: FetchListParams) => Promise<T[] | FetchListResult<T>>;
|
|
108
|
+
/**
|
|
109
|
+
* Callbacks passed to upload functions
|
|
110
|
+
*/
|
|
111
|
+
interface UploadCallbacks {
|
|
112
|
+
/** Called with upload progress (0-100) */
|
|
113
|
+
onProgress: (percent: number) => void;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Upload function that handles single or multiple files
|
|
117
|
+
*/
|
|
118
|
+
type UploadFn<T> = (files: File | File[], callbacks: UploadCallbacks) => Promise<T | T[]>;
|
|
119
|
+
/**
|
|
120
|
+
* Configuration for file uploads
|
|
121
|
+
*/
|
|
122
|
+
interface UploadConfig {
|
|
123
|
+
/**
|
|
124
|
+
* Accepted file types (MIME types or extensions)
|
|
125
|
+
* @default 'image/*' for images, '*' for documents
|
|
126
|
+
*/
|
|
127
|
+
accept?: string;
|
|
128
|
+
/**
|
|
129
|
+
* Maximum file size in bytes
|
|
130
|
+
* @default 10485760 (10MB)
|
|
131
|
+
*/
|
|
132
|
+
maxSize?: number;
|
|
133
|
+
/**
|
|
134
|
+
* Allow multiple file uploads
|
|
135
|
+
* @default true
|
|
136
|
+
*/
|
|
137
|
+
multiple?: boolean;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Status of a file being uploaded
|
|
141
|
+
*/
|
|
142
|
+
type UploadStatus = 'pending' | 'uploading' | 'completed' | 'error';
|
|
143
|
+
/**
|
|
144
|
+
* State of a file in the upload queue
|
|
145
|
+
*/
|
|
146
|
+
interface UploadingFile {
|
|
147
|
+
/** Unique ID for this upload */
|
|
148
|
+
id: string;
|
|
149
|
+
/** The file being uploaded */
|
|
150
|
+
file: File;
|
|
151
|
+
/** Upload progress (0-100) */
|
|
152
|
+
progress: number;
|
|
153
|
+
/** Current upload status */
|
|
154
|
+
status: UploadStatus;
|
|
155
|
+
/** Error message if status is 'error' */
|
|
156
|
+
error?: string;
|
|
157
|
+
/** Resulting item if status is 'completed' */
|
|
158
|
+
result?: ImageItem | DocumentItem;
|
|
159
|
+
/** Preview URL for the file (blob URL) */
|
|
160
|
+
previewUrl?: string;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Image-related callbacks
|
|
164
|
+
*/
|
|
165
|
+
interface ImageOptions {
|
|
166
|
+
/** Function to fetch image list from your API */
|
|
167
|
+
fetchList: FetchListFn<ImageItem>;
|
|
168
|
+
/** Function to upload images (optional) */
|
|
169
|
+
upload?: UploadFn<ImageItem>;
|
|
170
|
+
/** Function to update image metadata (alt text) */
|
|
171
|
+
update?: (id: string, data: {
|
|
172
|
+
alt?: LocalizedString;
|
|
173
|
+
}) => Promise<ImageItem>;
|
|
174
|
+
/** Function to delete an image (optional) */
|
|
175
|
+
delete?: (id: string) => Promise<void>;
|
|
176
|
+
/** Configuration for file uploads */
|
|
177
|
+
uploadConfig?: UploadConfig;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Gallery-related callbacks
|
|
181
|
+
*/
|
|
182
|
+
interface GalleryOptions {
|
|
183
|
+
/** Function to fetch gallery list from your API (required) */
|
|
184
|
+
fetchList: FetchListFn<GalleryItem>;
|
|
185
|
+
/** Function to fetch a single gallery by ID */
|
|
186
|
+
fetch: (id: string) => Promise<GalleryItem>;
|
|
187
|
+
/** Function to create a new gallery */
|
|
188
|
+
create: (name: string) => Promise<GalleryItem>;
|
|
189
|
+
/** Function to delete a gallery */
|
|
190
|
+
delete: (id: string) => Promise<void>;
|
|
191
|
+
/** Function to upload images to a gallery */
|
|
192
|
+
upload: (galleryId: string, files: File | File[], callbacks: UploadCallbacks) => Promise<ImageItem | ImageItem[]>;
|
|
193
|
+
/** Function to remove an image from a gallery */
|
|
194
|
+
removeImage: (galleryId: string, imageId: string) => Promise<void>;
|
|
195
|
+
/** Function to update image metadata within a gallery (optional - hides alt editing if not provided) */
|
|
196
|
+
updateImage?: (galleryId: string, imageId: string, data: {
|
|
197
|
+
alt?: LocalizedString;
|
|
198
|
+
}) => Promise<ImageItem>;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Document-related callbacks
|
|
202
|
+
*/
|
|
203
|
+
interface DocumentOptions {
|
|
204
|
+
/** Function to fetch document list from your API */
|
|
205
|
+
fetchList: FetchListFn<DocumentItem>;
|
|
206
|
+
/** Function to upload documents (optional - hides upload area if not provided) */
|
|
207
|
+
upload?: UploadFn<DocumentItem>;
|
|
208
|
+
/** Function to update document metadata (title) (optional - hides edit icon if not provided) */
|
|
209
|
+
update?: (id: string, data: {
|
|
210
|
+
title?: LocalizedString;
|
|
211
|
+
}) => Promise<DocumentItem>;
|
|
212
|
+
/** Function to delete a document (optional - hides manage button if not provided) */
|
|
213
|
+
delete?: (id: string) => Promise<void>;
|
|
214
|
+
/** Configuration for file uploads */
|
|
215
|
+
uploadConfig?: UploadConfig;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Plugin configuration options
|
|
219
|
+
*/
|
|
220
|
+
interface MediaPluginOptions {
|
|
221
|
+
/**
|
|
222
|
+
* Languages for multilingual fields (alt, title)
|
|
223
|
+
* @default [{ code: 'it', label: 'Italiano' }, { code: 'en', label: 'English' }]
|
|
224
|
+
*/
|
|
225
|
+
languages?: Language[];
|
|
226
|
+
/**
|
|
227
|
+
* Image-related configuration (required)
|
|
228
|
+
*/
|
|
229
|
+
image: ImageOptions;
|
|
230
|
+
/**
|
|
231
|
+
* Gallery-related configuration (optional)
|
|
232
|
+
*/
|
|
233
|
+
gallery?: GalleryOptions;
|
|
234
|
+
/**
|
|
235
|
+
* Document-related configuration (optional)
|
|
236
|
+
*/
|
|
237
|
+
document?: DocumentOptions;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Internal props passed to ImageField component
|
|
241
|
+
*/
|
|
242
|
+
interface ImageFieldProps {
|
|
243
|
+
name: string;
|
|
244
|
+
value: ImageItem | null;
|
|
245
|
+
onChange: (value: ImageItem | null) => void;
|
|
246
|
+
field: {
|
|
247
|
+
label?: string;
|
|
248
|
+
[key: string]: unknown;
|
|
249
|
+
};
|
|
250
|
+
languages: Language[];
|
|
251
|
+
imageOptions: ImageOptions;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Internal props passed to GalleryField component
|
|
255
|
+
*/
|
|
256
|
+
interface GalleryFieldProps {
|
|
257
|
+
name: string;
|
|
258
|
+
value: GalleryItem | null;
|
|
259
|
+
onChange: (value: GalleryItem | null) => void;
|
|
260
|
+
field: {
|
|
261
|
+
label?: string;
|
|
262
|
+
[key: string]: unknown;
|
|
263
|
+
};
|
|
264
|
+
languages: Language[];
|
|
265
|
+
galleryOptions: GalleryOptions;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Internal props passed to DocumentField component
|
|
269
|
+
*/
|
|
270
|
+
interface DocumentFieldProps {
|
|
271
|
+
name: string;
|
|
272
|
+
value: DocumentItem | null;
|
|
273
|
+
onChange: (value: DocumentItem | null) => void;
|
|
274
|
+
field: {
|
|
275
|
+
label?: string;
|
|
276
|
+
[key: string]: unknown;
|
|
277
|
+
};
|
|
278
|
+
languages: Language[];
|
|
279
|
+
documentOptions: DocumentOptions;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Props for ImagePickerModal component
|
|
283
|
+
*/
|
|
284
|
+
interface ImagePickerModalProps {
|
|
285
|
+
languages: Language[];
|
|
286
|
+
imageOptions: ImageOptions;
|
|
287
|
+
title?: string;
|
|
288
|
+
selectedImage?: ImageItem | null;
|
|
289
|
+
onSelect?: (item: ImageItem) => void;
|
|
290
|
+
onClose: () => void;
|
|
291
|
+
/** When false, hides the "Select Image" button. Useful for media library mode. Default: true */
|
|
292
|
+
selectable?: boolean;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Props for GalleryPickerModal component
|
|
296
|
+
*/
|
|
297
|
+
interface GalleryPickerModalProps {
|
|
298
|
+
languages: Language[];
|
|
299
|
+
galleryOptions: GalleryOptions;
|
|
300
|
+
title?: string;
|
|
301
|
+
selectedGallery?: GalleryItem | null;
|
|
302
|
+
onSelect?: (gallery: GalleryItem) => void;
|
|
303
|
+
onClose: () => void;
|
|
304
|
+
/** When false, hides the "Select Gallery" button. Useful for media library mode. Default: true */
|
|
305
|
+
selectable?: boolean;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Props for DocumentPickerModal component
|
|
309
|
+
*/
|
|
310
|
+
interface DocumentPickerModalProps {
|
|
311
|
+
languages: Language[];
|
|
312
|
+
documentOptions: DocumentOptions;
|
|
313
|
+
title?: string;
|
|
314
|
+
selectedDocument?: DocumentItem | null;
|
|
315
|
+
onSelect?: (item: DocumentItem) => void;
|
|
316
|
+
onClose: () => void;
|
|
317
|
+
/** When false, hides the "Select Document" button. Useful for media library mode. Default: true */
|
|
318
|
+
selectable?: boolean;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Props for ImageGrid component
|
|
322
|
+
*/
|
|
323
|
+
interface ImageGridProps {
|
|
324
|
+
items: ImageItem[];
|
|
325
|
+
onSelect: (item: ImageItem) => void;
|
|
326
|
+
selectedId?: string;
|
|
327
|
+
loading?: boolean;
|
|
328
|
+
/** Callback when user clicks edit icon */
|
|
329
|
+
onEditAlt?: (item: ImageItem) => void;
|
|
330
|
+
/** Whether manage mode is active (for bulk delete) */
|
|
331
|
+
manageMode?: boolean;
|
|
332
|
+
/** Set of selected item IDs for bulk operations */
|
|
333
|
+
selectedIds?: Set<string>;
|
|
334
|
+
/** Callback when user toggles selection in manage mode */
|
|
335
|
+
onToggleSelect?: (item: ImageItem) => void;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Puck Plugin type
|
|
339
|
+
*/
|
|
340
|
+
interface PuckPlugin {
|
|
341
|
+
name: string;
|
|
342
|
+
label?: string;
|
|
343
|
+
icon?: ReactNode;
|
|
344
|
+
render?: () => ReactNode;
|
|
345
|
+
overrides?: {
|
|
346
|
+
fieldTypes?: Record<string, (props: unknown) => ReactNode>;
|
|
347
|
+
[key: string]: unknown;
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Create a Puck plugin for media library integration
|
|
353
|
+
*
|
|
354
|
+
* @example
|
|
355
|
+
* ```tsx
|
|
356
|
+
* import { createMediaPlugin } from '@onda-suite/puck-plugin-media';
|
|
357
|
+
*
|
|
358
|
+
* const mediaPlugin = createMediaPlugin({
|
|
359
|
+
* // Optional: configure languages for alt/title fields
|
|
360
|
+
* languages: [
|
|
361
|
+
* { code: 'it', label: 'Italiano' },
|
|
362
|
+
* { code: 'en', label: 'English' },
|
|
363
|
+
* ],
|
|
364
|
+
*
|
|
365
|
+
* // Image configuration (required)
|
|
366
|
+
* image: {
|
|
367
|
+
* fetchList: async ({ query, page, pageSize }) => {
|
|
368
|
+
* const res = await fetch(`/api/images?q=${query}&page=${page}`);
|
|
369
|
+
* return res.json();
|
|
370
|
+
* },
|
|
371
|
+
* upload: async (file, { onProgress }) => {
|
|
372
|
+
* // Upload with progress tracking...
|
|
373
|
+
* return uploadedImageItem;
|
|
374
|
+
* },
|
|
375
|
+
* update: async (id, { alt }) => {
|
|
376
|
+
* // Update alt text
|
|
377
|
+
* return updatedImageItem;
|
|
378
|
+
* },
|
|
379
|
+
* delete: async (id) => {
|
|
380
|
+
* // Delete image (enables "Select Items" mode)
|
|
381
|
+
* },
|
|
382
|
+
* uploadConfig: {
|
|
383
|
+
* accept: 'image/*',
|
|
384
|
+
* maxSize: 10 * 1024 * 1024, // 10MB
|
|
385
|
+
* multiple: true,
|
|
386
|
+
* },
|
|
387
|
+
* },
|
|
388
|
+
*
|
|
389
|
+
* // Gallery configuration (optional)
|
|
390
|
+
* gallery: {
|
|
391
|
+
* fetchList: async ({ query, page }) => { ... },
|
|
392
|
+
* fetch: async (id) => { ... },
|
|
393
|
+
* create: async (name) => { ... },
|
|
394
|
+
* delete: async (id) => { ... },
|
|
395
|
+
* upload: async (galleryId, file, { onProgress }) => { ... },
|
|
396
|
+
* removeImage: async (galleryId, imageId) => { ... },
|
|
397
|
+
* updateImage: async (galleryId, imageId, { alt }) => { ... },
|
|
398
|
+
* },
|
|
399
|
+
*
|
|
400
|
+
* // Document configuration (optional)
|
|
401
|
+
* document: {
|
|
402
|
+
* fetchList: async ({ query, page }) => { ... },
|
|
403
|
+
* upload: async (file, { onProgress }) => { ... },
|
|
404
|
+
* update: async (id, { title }) => { ... },
|
|
405
|
+
* delete: async (id) => {
|
|
406
|
+
* // Delete document (enables "Select Items" mode)
|
|
407
|
+
* },
|
|
408
|
+
* uploadConfig: {
|
|
409
|
+
* accept: '.pdf,.doc,.docx,.xls,.xlsx',
|
|
410
|
+
* maxSize: 20 * 1024 * 1024, // 20MB
|
|
411
|
+
* multiple: true,
|
|
412
|
+
* },
|
|
413
|
+
* },
|
|
414
|
+
* });
|
|
415
|
+
*
|
|
416
|
+
* <Puck config={config} plugins={[mediaPlugin]} />
|
|
417
|
+
* ```
|
|
418
|
+
*/
|
|
419
|
+
declare function createMediaPlugin(options: MediaPluginOptions): PuckPlugin;
|
|
420
|
+
|
|
421
|
+
declare function ImageField({ value, onChange, field, languages, imageOptions, }: ImageFieldProps): react_jsx_runtime.JSX.Element;
|
|
422
|
+
|
|
423
|
+
declare function ImagePickerModal({ languages, imageOptions, title, selectedImage, onSelect, onClose, selectable, }: ImagePickerModalProps): react_jsx_runtime.JSX.Element;
|
|
424
|
+
|
|
425
|
+
declare function ImageGrid({ items, onSelect, selectedId, onEditAlt, manageMode, selectedIds, onToggleSelect, }: ImageGridProps): react_jsx_runtime.JSX.Element;
|
|
426
|
+
|
|
427
|
+
declare function GalleryField({ value, onChange, field, languages, galleryOptions, }: GalleryFieldProps): react_jsx_runtime.JSX.Element;
|
|
428
|
+
|
|
429
|
+
declare function GalleryPickerModal({ languages, galleryOptions, title, selectedGallery: _initialSelectedGallery, onSelect, onClose, selectable, }: GalleryPickerModalProps): react_jsx_runtime.JSX.Element;
|
|
430
|
+
|
|
431
|
+
declare function DocumentField({ value, onChange, field, languages, documentOptions, }: DocumentFieldProps): react_jsx_runtime.JSX.Element;
|
|
432
|
+
|
|
433
|
+
declare function DocumentPickerModal({ languages, documentOptions, title, selectedDocument, onSelect, onClose, selectable, }: DocumentPickerModalProps): react_jsx_runtime.JSX.Element;
|
|
434
|
+
|
|
435
|
+
interface MediaPanelProps {
|
|
436
|
+
languages: Language[];
|
|
437
|
+
imageOptions: ImageOptions;
|
|
438
|
+
galleryOptions?: GalleryOptions;
|
|
439
|
+
documentOptions?: DocumentOptions;
|
|
440
|
+
}
|
|
441
|
+
declare function MediaPanel({ languages, imageOptions, galleryOptions, documentOptions, }: MediaPanelProps): react_jsx_runtime.JSX.Element;
|
|
442
|
+
|
|
443
|
+
interface UploadDropzoneProps {
|
|
444
|
+
onFilesSelected: (files: FileList) => void;
|
|
445
|
+
config: Required<UploadConfig>;
|
|
446
|
+
disabled?: boolean;
|
|
447
|
+
}
|
|
448
|
+
declare function UploadDropzone({ onFilesSelected, config, disabled, }: UploadDropzoneProps): react_jsx_runtime.JSX.Element;
|
|
449
|
+
|
|
450
|
+
interface UploadQueueProps {
|
|
451
|
+
files: UploadingFile[];
|
|
452
|
+
onCancel: (id: string) => void;
|
|
453
|
+
onClearCompleted: () => void;
|
|
454
|
+
}
|
|
455
|
+
declare function UploadQueue({ files, onCancel, onClearCompleted }: UploadQueueProps): react_jsx_runtime.JSX.Element | null;
|
|
456
|
+
|
|
457
|
+
declare const formatFileSize: (bytes: number) => string;
|
|
458
|
+
interface UseUploadOptions<T extends ImageItem | DocumentItem> {
|
|
459
|
+
upload: UploadFn<T>;
|
|
460
|
+
config?: UploadConfig;
|
|
461
|
+
onUploadComplete?: (item: T) => void;
|
|
462
|
+
}
|
|
463
|
+
interface UseUploadReturn {
|
|
464
|
+
/** Files currently being uploaded */
|
|
465
|
+
uploading: UploadingFile[];
|
|
466
|
+
/** Whether any upload is in progress */
|
|
467
|
+
isUploading: boolean;
|
|
468
|
+
/** Add files to upload queue */
|
|
469
|
+
addFiles: (files: FileList | File[]) => void;
|
|
470
|
+
/** Cancel a specific upload */
|
|
471
|
+
cancelUpload: (id: string) => void;
|
|
472
|
+
/** Clear completed/errored uploads */
|
|
473
|
+
clearCompleted: () => void;
|
|
474
|
+
/** The merged config being used */
|
|
475
|
+
uploadConfig: Required<UploadConfig>;
|
|
476
|
+
}
|
|
477
|
+
declare function useUpload<T extends ImageItem | DocumentItem>({ upload, config, onUploadComplete, }: UseUploadOptions<T>): UseUploadReturn;
|
|
478
|
+
|
|
479
|
+
export { DEFAULT_LANGUAGES, DocumentField, type DocumentItem, type DocumentOptions, DocumentPickerModal, type FetchListFn, type FetchListParams, type FetchListResult, GalleryField, type GalleryItem, type GalleryOptions, GalleryPickerModal, ImageField, ImageGrid, type ImageItem, type ImageOptions, ImagePickerModal, type Language, type LocalizedString, MediaPanel, type MediaPluginOptions, type UploadCallbacks, type UploadConfig, UploadDropzone, type UploadFn, UploadQueue, type UploadStatus, type UploadingFile, createMediaPlugin, formatFileSize, useUpload };
|