Changes to flow.scroll.pub

root
root
25 days ago
Initial commit
body.html
Changed around line 1
+
+
+

Flow

+

Drag & Drop Multimedia Integration

+
+
+
+
+
+ 🖼️
+ Image
+
+
+ 🎥
+ Video
+
+
+ 🎵
+ Audio
+
+
+ 📝
+ Text
+
+
+
+
+
Drag elements here to create your flow
+
+
+
+
+
+

Flow - Seamless Multimedia Integration

+
index.scroll
Changed around line 1
+ buildHtml
+ baseUrl https://flow.scroll.pub
+ metaTags
+ editButton /edit.html
+ title Flow - Interactive Multimedia Integration
+ style.css
+ body.html
+ script.js
prompt.json
Changed around line 1
+ {
+ "id": "msg_01FuEqafoQ95r87Kv37w4vFr",
+ "type": "message",
+ "role": "assistant",
+ "model": "claude-3-5-sonnet-20241022",
+ "content": [
+ {
+ "type": "text",
+ "text": "I'll create a beautiful glassmorphism-based drag-and-drop interface for multimedia content integration.\n\nSuggested domain: flow.scroll.pub (represents fluid content flow and integration)\n\n---domain---\nflow.scroll.pub\n---index.scroll---\nbuildHtml\nbaseUrl https://flow.scroll.pub\nmetaTags\neditButton /edit.html\ntitle Flow - Interactive Multimedia Integration\nstyle.css\nbody.html\nscript.js\n---body.html---\n
\n
\n

Flow

\n

Drag & Drop Multimedia Integration

\n
\n\n
\n
\n
\n 🖼️\n Image\n
\n
\n 🎥\n Video\n
\n
\n 🎵\n Audio\n
\n
\n 📝\n Text\n
\n
\n\n
\n
Drag elements here to create your flow
\n
\n
\n
\n\n
\n

Flow - Seamless Multimedia Integration

\n
\n---style.css---\n:root {\n --glass-bg: rgba(255, 255, 255, 0.1);\n --glass-border: rgba(255, 255, 255, 0.2);\n --shadow: rgba(0, 0, 0, 0.1);\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n min-height: 100vh;\n background: linear-gradient(45deg, #f3f4f6, #fff);\n font-family: system-ui, sans-serif;\n color: #1f2937;\n overflow-x: hidden;\n}\n\n.glass {\n background: var(--glass-bg);\n backdrop-filter: blur(12px);\n border: 1px solid var(--glass-border);\n border-radius: 1rem;\n box-shadow: 0 8px 32px var(--shadow);\n}\n\n.container {\n max-width: 1200px;\n margin: 2rem auto;\n padding: 0 1rem;\n}\n\nheader {\n text-align: center;\n padding: 2rem;\n margin-bottom: 2rem;\n}\n\nheader h1 {\n font-size: 3rem;\n margin-bottom: 0.5rem;\n background: linear-gradient(45deg, #2563eb, #7c3aed);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n}\n\n#workspace {\n display: grid;\n grid-template-columns: 200px 1fr;\n gap: 1rem;\n padding: 1rem;\n min-height: 600px;\n}\n\n.toolbox {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.tool {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 1rem;\n background: var(--glass-bg);\n border: 1px solid var(--glass-border);\n border-radius: 0.5rem;\n cursor: move;\n transition: transform 0.2s;\n}\n\n.tool:hover {\n transform: translateY(-2px);\n}\n\n.canvas {\n background: var(--glass-bg);\n border: 2px dashed var(--glass-border);\n border-radius: 0.5rem;\n padding: 1rem;\n position: relative;\n}\n\n.placeholder {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: #6b7280;\n text-align: center;\n}\n\nfooter {\n text-align: center;\n padding: 1rem;\n margin: 2rem auto;\n max-width: 1200px;\n}\n\n@media (max-width: 768px) {\n #workspace {\n grid-template-columns: 1fr;\n }\n \n .toolbox {\n flex-direction: row;\n overflow-x: auto;\n padding-bottom: 1rem;\n }\n \n .tool {\n flex: 0 0 auto;\n }\n}\n---script.js---\ndocument.addEventListener('DOMContentLoaded', () => {\n const tools = document.querySelectorAll('.tool');\n const canvas = document.getElementById('canvas');\n let draggedElement = null;\n\n tools.forEach(tool => {\n tool.addEventListener('dragstart', handleDragStart);\n tool.addEventListener('dragend', handleDragEnd);\n });\n\n canvas.addEventListener('dragover', handleDragOver);\n canvas.addEventListener('drop', handleDrop);\n\n function handleDragStart(e) {\n draggedElement = this;\n this.style.opacity = '0.4';\n e.dataTransfer.setData('text/plain', this.dataset.type);\n }\n\n function handleDragEnd(e) {\n this.style.opacity = '1';\n }\n\n function handleDragOver(e) {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n\n function handleDrop(e) {\n e.preventDefault();\n const type = e.dataTransfer.getData('text/plain');\n \n const placeholder = canvas.querySelector('.placeholder');\n if (placeholder) {\n placeholder.remove();\n }\n\n const element = createFlowElement(type, e.clientX, e.clientY);\n canvas.appendChild(element);\n }\n\n function createFlowElement(type, x, y) {\n const element = document.createElement('div');\n element.className = 'flow-element glass';\n element.style.cssText = `\n position: absolute;\n left: ${x - canvas.getBoundingClientRect().left}px;\n top: ${y - canvas.getBoundingClientRect().top}px;\n padding: 1rem;\n cursor: move;\n min-width: 100px;\n min-height: 100px;\n display: flex;\n align-items: center;\n justify-content: center;\n `;\n\n const icon = document.createElement('i');\n icon.className = 'icon';\n switch(type) {\n case 'image': icon.textContent = '🖼️'; break;\n case 'video': icon.textContent = '🎥'; break;\n case 'audio': icon.textContent = '🎵'; break;\n case 'text': icon.textContent = '📝'; break;\n }\n \n element.appendChild(icon);\n makeElementDraggable(element);\n \n return element;\n }\n\n function makeElementDraggable(element) {\n let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;\n \n element.onmousedown = dragMouseDown;\n\n function dragMouseDown(e) {\n e.preventDefault();\n pos3 = e.clientX;\n pos4 = e.clientY;\n document.onmouseup = closeDragElement;\n document.onmousemove = elementDrag;\n }\n\n function elementDrag(e) {\n e.preventDefault();\n pos1 = pos3 - e.clientX;\n pos2 = pos4 - e.clientY;\n pos3 = e.clientX;\n pos4 = e.clientY;\n \n element.style.top = (element.offsetTop - pos2) + \"px\";\n element.style.left = (element.offsetLeft - pos1) + \"px\";\n }\n\n function closeDragElement() {\n document.onmouseup = null;\n document.onmousemove = null;\n }\n }\n});\n---end---\n\nThis implementation features:\n- Beautiful glassmorphism design with subtle shadows and blur effects\n- Fully functional drag and drop interface\n- Responsive layout that adapts to mobile devices\n- Smooth animations and transitions\n- Interactive elements with visual feedback\n- Clean, semantic HTML structure\n- Accessibility considerations\n- Modern CSS with gradients and glass effects\n- Vanilla JavaScript with no dependencies\n- Fluid, intuitive user experience\n\nThe elements can be dragged from the toolbox to the canvas and then repositioned within the canvas. The design uses a clean, modern aesthetic with glassmorphism effects that create depth and visual interest while maintaining professional usability."
+ }
+ ],
+ "stop_reason": "end_turn",
+ "stop_sequence": null,
+ "usage": {
+ "input_tokens": 303,
+ "cache_creation_input_tokens": 0,
+ "cache_read_input_tokens": 0,
+ "output_tokens": 2327
+ }
+ }
readme.scroll
Changed around line 1
+ # flow.scroll.pub
+ Website generated by Claude from prompt: i need a beautiful white glassmorphism app interactive drag and drop card prompt chain multimodal multi app integrator visual with images vdieos music and all
script.js
Changed around line 1
+ document.addEventListener('DOMContentLoaded', () => {
+ const tools = document.querySelectorAll('.tool');
+ const canvas = document.getElementById('canvas');
+ let draggedElement = null;
+
+ tools.forEach(tool => {
+ tool.addEventListener('dragstart', handleDragStart);
+ tool.addEventListener('dragend', handleDragEnd);
+ });
+
+ canvas.addEventListener('dragover', handleDragOver);
+ canvas.addEventListener('drop', handleDrop);
+
+ function handleDragStart(e) {
+ draggedElement = this;
+ this.style.opacity = '0.4';
+ e.dataTransfer.setData('text/plain', this.dataset.type);
+ }
+
+ function handleDragEnd(e) {
+ this.style.opacity = '1';
+ }
+
+ function handleDragOver(e) {
+ e.preventDefault();
+ e.dataTransfer.dropEffect = 'copy';
+ }
+
+ function handleDrop(e) {
+ e.preventDefault();
+ const type = e.dataTransfer.getData('text/plain');
+
+ const placeholder = canvas.querySelector('.placeholder');
+ if (placeholder) {
+ placeholder.remove();
+ }
+
+ const element = createFlowElement(type, e.clientX, e.clientY);
+ canvas.appendChild(element);
+ }
+
+ function createFlowElement(type, x, y) {
+ const element = document.createElement('div');
+ element.className = 'flow-element glass';
+ element.style.cssText = `
+ position: absolute;
+ left: ${x - canvas.getBoundingClientRect().left}px;
+ top: ${y - canvas.getBoundingClientRect().top}px;
+ padding: 1rem;
+ cursor: move;
+ min-width: 100px;
+ min-height: 100px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ `;
+
+ const icon = document.createElement('i');
+ icon.className = 'icon';
+ switch(type) {
+ case 'image': icon.textContent = '🖼️'; break;
+ case 'video': icon.textContent = '🎥'; break;
+ case 'audio': icon.textContent = '🎵'; break;
+ case 'text': icon.textContent = '📝'; break;
+ }
+
+ element.appendChild(icon);
+ makeElementDraggable(element);
+
+ return element;
+ }
+
+ function makeElementDraggable(element) {
+ let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
+
+ element.onmousedown = dragMouseDown;
+
+ function dragMouseDown(e) {
+ e.preventDefault();
+ pos3 = e.clientX;
+ pos4 = e.clientY;
+ document.onmouseup = closeDragElement;
+ document.onmousemove = elementDrag;
+ }
+
+ function elementDrag(e) {
+ e.preventDefault();
+ pos1 = pos3 - e.clientX;
+ pos2 = pos4 - e.clientY;
+ pos3 = e.clientX;
+ pos4 = e.clientY;
+
+ element.style.top = (element.offsetTop - pos2) + "px";
+ element.style.left = (element.offsetLeft - pos1) + "px";
+ }
+
+ function closeDragElement() {
+ document.onmouseup = null;
+ document.onmousemove = null;
+ }
+ }
+ });
style.css
Changed around line 1
+ :root {
+ --glass-bg: rgba(255, 255, 255, 0.1);
+ --glass-border: rgba(255, 255, 255, 0.2);
+ --shadow: rgba(0, 0, 0, 0.1);
+ }
+
+ * {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ }
+
+ body {
+ min-height: 100vh;
+ background: linear-gradient(45deg, #f3f4f6, #fff);
+ font-family: system-ui, sans-serif;
+ color: #1f2937;
+ overflow-x: hidden;
+ }
+
+ .glass {
+ background: var(--glass-bg);
+ backdrop-filter: blur(12px);
+ border: 1px solid var(--glass-border);
+ border-radius: 1rem;
+ box-shadow: 0 8px 32px var(--shadow);
+ }
+
+ .container {
+ max-width: 1200px;
+ margin: 2rem auto;
+ padding: 0 1rem;
+ }
+
+ header {
+ text-align: center;
+ padding: 2rem;
+ margin-bottom: 2rem;
+ }
+
+ header h1 {
+ font-size: 3rem;
+ margin-bottom: 0.5rem;
+ background: linear-gradient(45deg, #2563eb, #7c3aed);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ }
+
+ #workspace {
+ display: grid;
+ grid-template-columns: 200px 1fr;
+ gap: 1rem;
+ padding: 1rem;
+ min-height: 600px;
+ }
+
+ .toolbox {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ }
+
+ .tool {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 1rem;
+ background: var(--glass-bg);
+ border: 1px solid var(--glass-border);
+ border-radius: 0.5rem;
+ cursor: move;
+ transition: transform 0.2s;
+ }
+
+ .tool:hover {
+ transform: translateY(-2px);
+ }
+
+ .canvas {
+ background: var(--glass-bg);
+ border: 2px dashed var(--glass-border);
+ border-radius: 0.5rem;
+ padding: 1rem;
+ position: relative;
+ }
+
+ .placeholder {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ color: #6b7280;
+ text-align: center;
+ }
+
+ footer {
+ text-align: center;
+ padding: 1rem;
+ margin: 2rem auto;
+ max-width: 1200px;
+ }
+
+ @media (max-width: 768px) {
+ #workspace {
+ grid-template-columns: 1fr;
+ }
+
+ .toolbox {
+ flex-direction: row;
+ overflow-x: auto;
+ padding-bottom: 1rem;
+ }
+
+ .tool {
+ flex: 0 0 auto;
+ }
+ }