diff --git a/packages/kitchen-sink/src/examples/DigitalPersonalJournal.jsx b/packages/kitchen-sink/src/examples/DigitalPersonalJournal.jsx
new file mode 100644
index 0000000000..22d884a866
--- /dev/null
+++ b/packages/kitchen-sink/src/examples/DigitalPersonalJournal.jsx
@@ -0,0 +1,110 @@
+import React, { useState, useRef } from 'react';
+import { block } from "million/react";
+
+const JournalComponent = ({ entry, onDelete }) => (
+
+
{entry.id}. {entry.title}
+
{entry.text}
+ {entry.media && (
+
+ {entry.media.type.startsWith('image') && (
+
+ )}
+ {entry.media.type.startsWith('video') && (
+
+ )}
+
+ )}
+
+
+
+
+
+);
+
+const DigitalPersonalJournal = block(function Journal() {
+ const [entries, setEntries] = useState([]);
+ const [title, setTitle] = useState('');
+ const [text, setText] = useState('');
+ const [mediaFile, setMediaFile] = useState(null);
+ const [nextId, setNextId] = useState(1);
+ const fileInputRef = useRef(null);
+
+ const handleAddEntry = () => {
+ if (title || text || mediaFile) {
+ const newEntry = {
+ id: nextId,
+ title,
+ text,
+ media: mediaFile
+ ? { url: URL.createObjectURL(mediaFile), type: mediaFile.type }
+ : null,
+ };
+ setEntries([...entries, newEntry]);
+ setNextId(nextId + 1);
+ setTitle('');
+ setText('');
+ setMediaFile(null);
+
+ if (fileInputRef.current) {
+ fileInputRef.current.value = '';
+ }
+ }
+ };
+
+ const handleDeleteEntry = (id) => {
+ const updatedEntries = entries.filter((entry) => entry.id !== id);
+ setEntries(updatedEntries);
+ };
+
+ return (
+
+ );
+}
+)
+
+export default DigitalPersonalJournal;