diff --git a/plugins/carhop-blocks/src/document-card/block.json b/plugins/carhop-blocks/src/document-card/block.json
new file mode 100644
index 0000000..3400fbb
--- /dev/null
+++ b/plugins/carhop-blocks/src/document-card/block.json
@@ -0,0 +1,54 @@
+{
+ "$schema": "https://schemas.wp.org/trunk/block.json",
+ "apiVersion": 3,
+ "name": "carhop-blocks/document-card",
+ "version": "0.1.0",
+ "title": "Document Card",
+ "category": "carhop-blocks",
+ "icon": "smiley",
+ "description": "Document Card pour la mise en forme supérieure d'éléments de contenu",
+ "example": {},
+ "supports": {
+ "html": false,
+ "color": {
+ "text": true,
+ "background": false,
+ "link": false
+ }
+ },
+ "textdomain": "document-card",
+ "editorScript": "file:./index.js",
+ "editorStyle": "file:./index.css",
+ "style": "file:./style-index.css",
+ "viewScript": "file:./view.js",
+ "attributes": {
+ "isInitilized": {
+ "type": "boolean",
+ "default": false
+ },
+ "documentType": {
+ "type": "string",
+ "default": "document",
+ "enum": [
+ "internal",
+ "external"
+ ]
+ },
+ "documentFileSize": {
+ "type": "number",
+ "default": 0
+ },
+ "documentUrl": {
+ "type": "string",
+ "default": ""
+ },
+ "documentId": {
+ "type": "number",
+ "default": 0
+ },
+ "UserhasValidatedExternalUrl": {
+ "type": "boolean",
+ "default": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/carhop-blocks/src/document-card/edit.js b/plugins/carhop-blocks/src/document-card/edit.js
new file mode 100644
index 0000000..32c7714
--- /dev/null
+++ b/plugins/carhop-blocks/src/document-card/edit.js
@@ -0,0 +1,342 @@
+import { __ } from "@wordpress/i18n";
+import {
+ useBlockProps,
+ InnerBlocks,
+ InspectorControls,
+ MediaUpload,
+ MediaUploadCheck,
+ BlockControls,
+ MediaReplaceFlow,
+} from "@wordpress/block-editor";
+import { __experimentalHStack as HStack } from "@wordpress/components";
+
+import {
+ PanelBody,
+ TextControl,
+ Button,
+ Placeholder,
+ ToolbarButton,
+ Icon,
+ __experimentalToggleGroupControl as ToggleGroupControl,
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
+} from "@wordpress/components";
+import { file, link, external } from "@wordpress/icons";
+
+import { MediaPlaceholder } from "@wordpress/block-editor";
+import "./editor.scss";
+
+export default function Edit({ attributes, setAttributes }) {
+ const {
+ isInitilized,
+ documentType,
+ documentUrl,
+ documentId,
+ UserhasValidatedExternalUrl,
+ documentFileSize,
+ } = attributes;
+
+ const blockProps = useBlockProps({
+ className: "document-card",
+ });
+
+ const hasDocument =
+ (documentType === "internal" && documentId && documentUrl) ||
+ (documentType === "external" && documentUrl && UserhasValidatedExternalUrl);
+
+ const resetDocument = () => {
+ setAttributes({
+ documentId: 0,
+ documentUrl: "",
+ documentFileSize: 0,
+ isInitilized: false,
+ UserhasValidatedExternalUrl: false,
+ });
+ };
+
+ const setInternalDocument = (media) => {
+ const fileSize = media.filesizeInBytes || 0;
+ const fileSizeInKB = Math.round(fileSize / 1024);
+
+ setAttributes({
+ documentType: "internal",
+ documentFileSize: fileSizeInKB,
+ documentId: media.id,
+ documentUrl: media.url,
+ isInitilized: true,
+ });
+ };
+
+ const setExternalDocument = (url) => {
+ setAttributes({
+ documentType: "external",
+ documentFileSize: 0,
+ documentId: 0,
+ documentUrl: url,
+ isInitilized: true,
+ });
+ };
+
+ return (
+ <>
+