From e458b631151937f0dd0879c23b933fe6f7664e05 Mon Sep 17 00:00:00 2001 From: Antigravity Date: Thu, 7 May 2026 22:29:02 +0000 Subject: [PATCH] feat: architectural grid editor fullPage + slash commands + doc info panel + AI title --- architectural-grid (2)/.env.example | 9 + architectural-grid (2)/.gitignore | 8 + architectural-grid (2)/README.md | 20 + architectural-grid (2)/index.html | 13 + architectural-grid (2)/metadata.json | 6 + architectural-grid (2)/package.json | 34 + architectural-grid (2)/src/App.tsx | 579 ++++++++ architectural-grid (2)/src/index.css | 52 + architectural-grid (2)/src/main.tsx | 10 + architectural-grid (2)/tsconfig.json | 26 + architectural-grid (2)/vite.config.ts | 24 + architectural-grid (3)/.env.example | 9 + architectural-grid (3)/.gitignore | 8 + architectural-grid (3)/README.md | 20 + architectural-grid (3)/index.html | 13 + architectural-grid (3)/metadata.json | 6 + architectural-grid (3)/package-lock.json | 0 architectural-grid (3)/package.json | 34 + architectural-grid (3)/src/App.tsx | 936 ++++++++++++ architectural-grid (3)/src/index.css | 58 + architectural-grid (3)/src/main.tsx | 10 + architectural-grid (3)/tsconfig.json | 26 + architectural-grid (3)/vite.config.ts | 24 + architectural-grid (4)/.env.example | 9 + architectural-grid (4)/.gitignore | 8 + architectural-grid (4)/README.md | 20 + architectural-grid (4)/index.html | 13 + architectural-grid (4)/metadata.json | 6 + architectural-grid (4)/package.json | 34 + architectural-grid (4)/src/App.tsx | 1305 +++++++++++++++++ architectural-grid (4)/src/index.css | 58 + architectural-grid (4)/src/main.tsx | 10 + architectural-grid (4)/tsconfig.json | 26 + architectural-grid (4)/vite.config.ts | 24 + architectural-grid1/.env.example | 9 + architectural-grid1/.gitignore | 8 + architectural-grid1/README.md | 20 + architectural-grid1/index.html | 13 + architectural-grid1/metadata.json | 6 + architectural-grid1/package.json | 34 + architectural-grid1/src/App.tsx | 408 ++++++ architectural-grid1/src/index.css | 34 + architectural-grid1/src/main.tsx | 10 + architectural-grid1/tsconfig.json | 26 + architectural-grid1/vite.config.ts | 24 + memento-note/.win11-prompt.txt | 60 + .../app/(main)/agents/agents-page-client.tsx | 84 +- memento-note/app/(main)/layout.tsx | 34 +- memento-note/app/(main)/page.tsx | 10 +- .../settings/appearance/appearance-form.tsx | 132 -- .../appearance/appearance-settings-client.tsx | 96 +- .../app/(main)/settings/appearance/page.tsx | 8 +- memento-note/app/actions/ai-settings.ts | 12 +- memento-note/app/actions/profile.ts | 5 +- memento-note/app/actions/user-settings.ts | 35 +- memento-note/app/api/canvas/route.ts | 21 +- memento-note/app/api/notes/route.ts | 9 +- memento-note/app/globals.css | 513 +++++-- memento-note/app/layout.tsx | 40 +- memento-note/components/agents/agent-card.tsx | 27 +- memento-note/components/agents/agent-form.tsx | 4 +- memento-note/components/agents/agent-help.tsx | 34 +- .../components/agents/agent-run-log.tsx | 12 +- .../components/agents/agent-templates.tsx | 23 +- .../components/ai-chat-layout-bridge.tsx | 12 + memento-note/components/ai-chat.tsx | 3 +- .../components/contextual-ai-chat.tsx | 158 +- memento-note/components/favorites-section.tsx | 4 +- memento-note/components/header.tsx | 83 +- memento-note/components/home-client.tsx | 359 ++--- memento-note/components/label-badge.tsx | 2 +- .../components/markdown-slash-commands.tsx | 224 +++ memento-note/components/note-card.tsx | 6 +- .../components/note-document-info-panel.tsx | 243 +++ memento-note/components/note-editor.tsx | 193 ++- .../components/note-inline-editor.tsx | 1 + memento-note/components/note-input.tsx | 5 +- memento-note/components/notebooks-list.tsx | 6 +- .../components/notes-editorial-view.tsx | 192 +++ memento-note/components/notes-list-view.tsx | 166 +++ .../components/notes-main-section.tsx | 11 +- .../components/notes-notebook-feed.tsx | 69 + memento-note/components/notes-tabs-view.tsx | 14 +- memento-note/components/notes-view-toggle.tsx | 22 +- memento-note/components/rich-text-editor.tsx | 14 +- memento-note/components/sidebar.tsx | 588 +++++--- memento-note/components/theme-initializer.tsx | 122 +- memento-note/components/title-suggestions.tsx | 16 +- memento-note/components/ui/button.tsx | 6 +- memento-note/components/ui/card.tsx | 2 +- memento-note/components/ui/input.tsx | 4 +- memento-note/components/ui/toast.tsx | 26 +- .../1ce3dbee-4772-40b5-8600-9b06a901fdc3.png | Bin 0 -> 183459 bytes .../a90ca17a-85f4-4977-abce-5572dd049cee.png | Bin 0 -> 75008 bytes .../bb2cd39f-83f7-4ff4-b64f-69c4df375dbe.png | Bin 0 -> 86824 bytes memento-note/lib/apply-document-theme.ts | 83 ++ .../lib/client/excalidraw-export-image.ts | 59 + memento-note/lib/note-preview.ts | 29 + memento-note/lib/theme-script.ts | 62 +- memento-note/lib/types.ts | 14 +- memento-note/locales/ar.json | 16 +- memento-note/locales/de.json | 14 +- memento-note/locales/en.json | 34 +- memento-note/locales/es.json | 14 +- memento-note/locales/fa.json | 14 +- memento-note/locales/fr.json | 34 +- memento-note/locales/hi.json | 14 +- memento-note/locales/it.json | 14 +- memento-note/locales/ja.json | 14 +- memento-note/locales/ko.json | 14 +- memento-note/locales/nl.json | 14 +- memento-note/locales/pl.json | 14 +- memento-note/locales/pt.json | 14 +- memento-note/locales/ru.json | 14 +- memento-note/locales/zh.json | 14 +- memento-note/package-lock.json | 69 + memento-note/package.json | 1 + memento-note/public/icons/icon-192.svg | 4 +- memento-note/public/icons/icon-512.svg | 4 +- memento-note/public/manifest.json | 4 +- .../public/textures/natural-paper.png | Bin 0 -> 101491 bytes memento-note/run-test.ts | 8 + memento-note/tests/reminder-dialog.spec.ts | 8 +- stitch_momento_settings_redesign/DESIGN.md | 162 ++ stitch_momento_settings_redesign/code.html | 263 ++++ stitch_momento_settings_redesign/screen.png | Bin 0 -> 256791 bytes 126 files changed, 7652 insertions(+), 1110 deletions(-) create mode 100644 architectural-grid (2)/.env.example create mode 100644 architectural-grid (2)/.gitignore create mode 100644 architectural-grid (2)/README.md create mode 100644 architectural-grid (2)/index.html create mode 100644 architectural-grid (2)/metadata.json create mode 100644 architectural-grid (2)/package.json create mode 100644 architectural-grid (2)/src/App.tsx create mode 100644 architectural-grid (2)/src/index.css create mode 100644 architectural-grid (2)/src/main.tsx create mode 100644 architectural-grid (2)/tsconfig.json create mode 100644 architectural-grid (2)/vite.config.ts create mode 100644 architectural-grid (3)/.env.example create mode 100644 architectural-grid (3)/.gitignore create mode 100644 architectural-grid (3)/README.md create mode 100644 architectural-grid (3)/index.html create mode 100644 architectural-grid (3)/metadata.json create mode 100644 architectural-grid (3)/package-lock.json create mode 100644 architectural-grid (3)/package.json create mode 100644 architectural-grid (3)/src/App.tsx create mode 100644 architectural-grid (3)/src/index.css create mode 100644 architectural-grid (3)/src/main.tsx create mode 100644 architectural-grid (3)/tsconfig.json create mode 100644 architectural-grid (3)/vite.config.ts create mode 100644 architectural-grid (4)/.env.example create mode 100644 architectural-grid (4)/.gitignore create mode 100644 architectural-grid (4)/README.md create mode 100644 architectural-grid (4)/index.html create mode 100644 architectural-grid (4)/metadata.json create mode 100644 architectural-grid (4)/package.json create mode 100644 architectural-grid (4)/src/App.tsx create mode 100644 architectural-grid (4)/src/index.css create mode 100644 architectural-grid (4)/src/main.tsx create mode 100644 architectural-grid (4)/tsconfig.json create mode 100644 architectural-grid (4)/vite.config.ts create mode 100644 architectural-grid1/.env.example create mode 100644 architectural-grid1/.gitignore create mode 100644 architectural-grid1/README.md create mode 100644 architectural-grid1/index.html create mode 100644 architectural-grid1/metadata.json create mode 100644 architectural-grid1/package.json create mode 100644 architectural-grid1/src/App.tsx create mode 100644 architectural-grid1/src/index.css create mode 100644 architectural-grid1/src/main.tsx create mode 100644 architectural-grid1/tsconfig.json create mode 100644 architectural-grid1/vite.config.ts create mode 100644 memento-note/.win11-prompt.txt delete mode 100644 memento-note/app/(main)/settings/appearance/appearance-form.tsx create mode 100644 memento-note/components/ai-chat-layout-bridge.tsx create mode 100644 memento-note/components/markdown-slash-commands.tsx create mode 100644 memento-note/components/note-document-info-panel.tsx create mode 100644 memento-note/components/notes-editorial-view.tsx create mode 100644 memento-note/components/notes-list-view.tsx create mode 100644 memento-note/components/notes-notebook-feed.tsx create mode 100644 memento-note/data/uploads/notes/1ce3dbee-4772-40b5-8600-9b06a901fdc3.png create mode 100644 memento-note/data/uploads/notes/a90ca17a-85f4-4977-abce-5572dd049cee.png create mode 100644 memento-note/data/uploads/notes/bb2cd39f-83f7-4ff4-b64f-69c4df375dbe.png create mode 100644 memento-note/lib/apply-document-theme.ts create mode 100644 memento-note/lib/client/excalidraw-export-image.ts create mode 100644 memento-note/public/textures/natural-paper.png create mode 100644 memento-note/run-test.ts create mode 100644 stitch_momento_settings_redesign/DESIGN.md create mode 100644 stitch_momento_settings_redesign/code.html create mode 100644 stitch_momento_settings_redesign/screen.png diff --git a/architectural-grid (2)/.env.example b/architectural-grid (2)/.env.example new file mode 100644 index 0000000..7a550fe --- /dev/null +++ b/architectural-grid (2)/.env.example @@ -0,0 +1,9 @@ +# GEMINI_API_KEY: Required for Gemini AI API calls. +# AI Studio automatically injects this at runtime from user secrets. +# Users configure this via the Secrets panel in the AI Studio UI. +GEMINI_API_KEY="MY_GEMINI_API_KEY" + +# APP_URL: The URL where this applet is hosted. +# AI Studio automatically injects this at runtime with the Cloud Run service URL. +# Used for self-referential links, OAuth callbacks, and API endpoints. +APP_URL="MY_APP_URL" diff --git a/architectural-grid (2)/.gitignore b/architectural-grid (2)/.gitignore new file mode 100644 index 0000000..5a86d2a --- /dev/null +++ b/architectural-grid (2)/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +build/ +dist/ +coverage/ +.DS_Store +*.log +.env* +!.env.example diff --git a/architectural-grid (2)/README.md b/architectural-grid (2)/README.md new file mode 100644 index 0000000..0078184 --- /dev/null +++ b/architectural-grid (2)/README.md @@ -0,0 +1,20 @@ +
+GHBanner +
+ +# Run and deploy your AI Studio app + +This contains everything you need to run your app locally. + +View your app in AI Studio: https://ai.studio/apps/b7b577c6-4d9f-44ac-8fe1-85bc3c6d6e66 + +## Run Locally + +**Prerequisites:** Node.js + + +1. Install dependencies: + `npm install` +2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key +3. Run the app: + `npm run dev` diff --git a/architectural-grid (2)/index.html b/architectural-grid (2)/index.html new file mode 100644 index 0000000..21dfe69 --- /dev/null +++ b/architectural-grid (2)/index.html @@ -0,0 +1,13 @@ + + + + + + My Google AI Studio App + + +
+ + + + diff --git a/architectural-grid (2)/metadata.json b/architectural-grid (2)/metadata.json new file mode 100644 index 0000000..3e19746 --- /dev/null +++ b/architectural-grid (2)/metadata.json @@ -0,0 +1,6 @@ +{ + "name": "Architectural Grid", + "description": "A minimalist notebook for architectural research and conceptual sketches.", + "requestFramePermissions": [], + "majorCapabilities": [] +} diff --git a/architectural-grid (2)/package.json b/architectural-grid (2)/package.json new file mode 100644 index 0000000..6b3f167 --- /dev/null +++ b/architectural-grid (2)/package.json @@ -0,0 +1,34 @@ +{ + "name": "react-example", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --port=3000 --host=0.0.0.0", + "build": "vite build", + "preview": "vite preview", + "clean": "rm -rf dist", + "lint": "tsc --noEmit" + }, + "dependencies": { + "@google/genai": "^1.29.0", + "@tailwindcss/vite": "^4.1.14", + "@vitejs/plugin-react": "^5.0.4", + "lucide-react": "^0.546.0", + "react": "^19.0.1", + "react-dom": "^19.0.1", + "vite": "^6.2.3", + "express": "^4.21.2", + "dotenv": "^17.2.3", + "motion": "^12.23.24" + }, + "devDependencies": { + "@types/node": "^22.14.0", + "autoprefixer": "^10.4.21", + "tailwindcss": "^4.1.14", + "tsx": "^4.21.0", + "typescript": "~5.8.2", + "vite": "^6.2.3", + "@types/express": "^4.17.21" + } +} diff --git a/architectural-grid (2)/src/App.tsx b/architectural-grid (2)/src/App.tsx new file mode 100644 index 0000000..06b6450 --- /dev/null +++ b/architectural-grid (2)/src/App.tsx @@ -0,0 +1,579 @@ +/** + * @license + * SPDX-License-Identifier: Apache-2.0 + */ + +import React, { useState, useMemo } from 'react'; +import { + Plus, + Search, + Share2, + Archive, + Settings, + Lock, + ChevronRight, + MoreVertical, + ArrowLeft +} from 'lucide-react'; +import { motion, AnimatePresence } from 'motion/react'; + +// --- Types --- + +interface Note { + id: string; + carnetId: string; + title: string; + content: string; + imageUrl: string; + date: string; +} + +interface Carnet { + id: string; + name: string; + initial: string; + type: 'Private' | 'Project' | 'Shared'; + isPrivate?: boolean; +} + +// --- Mock Data --- + +const CARNETS: Carnet[] = [ + { id: '1', name: 'Daily Notes', initial: 'D', type: 'Private', isPrivate: true }, + { id: '2', name: 'Project: Neo', initial: 'P', type: 'Project' }, + { id: '3', name: 'Shared Docs', initial: 'S', type: 'Shared' }, + { id: '4', name: 'Architecture Research', initial: 'A', type: 'Project' }, +]; + +const ALL_NOTES: Note[] = [ + { + id: 'n1', + carnetId: '4', + title: 'Grid Systems', + date: 'Oct 26, 2024', + content: 'Grid Systems is streathen in ognitiacs clesign and simulhere desipmalt: complded structurer and manamateriai-s: ci arevenuatingly used, asiller straterty of insaee to the tmn and usaes of disrension, architecture of emiornabious tracious structures.', + imageUrl: 'https://images.unsplash.com/photo-1503387762-592dea58ef23?auto=format&fit=crop&q=80&w=800&h=600' + }, + { + id: 'n2', + carnetId: '4', + title: 'Materiality', + date: 'Oct 24, 2024', + content: 'Materiality is combinated by relliaitic structureirs measure of plastics, natural, materials and priotical structures. Materialed coasts erabiocera alann light spaces and octicm employed design on thodolen of materiality, and tohlite tersev/ used in the gridin structures en obain materials, coms pathetic structure.', + imageUrl: 'https://images.unsplash.com/photo-1486406146926-c627a92ad1ab?auto=format&fit=crop&q=80&w=800&h=600' + }, + { + id: 'n3', + carnetId: '4', + title: 'Light & Space', + date: 'Oct 22, 2024', + content: 'Light & Space is a creaivity of light & Space inralicated in sizazant or dark crotrcning and netrescenations of avant trurme sivonpaltures for in inncr-en allimativefiting is cerriadating and sityle.', + imageUrl: 'https://images.unsplash.com/photo-1497366216548-37526070297c?auto=format&fit=crop&q=80&w=800&h=600' + }, + { + id: 'n4', + carnetId: '2', + title: 'Neo-Brutalism study', + date: 'Sep 12, 2024', + content: 'Exploring the raw aesthetic of neo-brutalism in urban environments. Focus on concrete textures and massive forms.', + imageUrl: 'https://images.unsplash.com/photo-1518005020951-eccb494ad742?auto=format&fit=crop&q=80&w=800&h=600' + } +]; + +// --- Components --- + +interface NoteLinkProps { + note: Note; + isActive: boolean; + onClick: () => void; +} + +const NoteLink: React.FC = ({ note, isActive, onClick }) => ( + +
+ {note.title} + +); + +interface SidebarItemProps { + carnet: Carnet; + isActive: boolean; + notes: Note[]; + activeNoteId: string | null; + onCarnetClick: () => void; + onNoteClick: (noteId: string) => void; +} + +const SidebarItem: React.FC = ({ + carnet, + isActive, + notes, + activeNoteId, + onCarnetClick, + onNoteClick +}) => { + return ( +
+ { + onCarnetClick(); + }} + className={`w-full flex items-center gap-3 px-4 py-3 rounded-xl transition-all duration-300 group + ${isActive ? 'active-nav-item' : 'hover:bg-white/40'}`} + > + + + +
+ {carnet.initial} +
+
+
+ + {carnet.name} + + {carnet.isPrivate && } +
+
+
+ + + {isActive && ( + + {notes.map(note => ( + onNoteClick(note.id)} + /> + ))} + {notes.length === 0 && ( +

No notes yet

+ )} +
+ )} +
+
+ ); +}; + +export default function App() { + const [carnets, setCarnets] = useState(CARNETS); + const [notes, setNotes] = useState(ALL_NOTES); + const [activeCarnetId, setActiveCarnetId] = useState('4'); + const [activeNoteId, setActiveNoteId] = useState(null); + + // Modal States + const [showNewCarnetModal, setShowNewCarnetModal] = useState(false); + const [showNewNoteModal, setShowNewNoteModal] = useState(false); + + // Form States + const [newCarnetName, setNewCarnetName] = useState(''); + const [newNoteTitle, setNewNoteTitle] = useState(''); + const [newNoteContent, setNewNoteContent] = useState(''); + + const filteredNotes = useMemo(() => + notes.filter(n => n.carnetId === activeCarnetId), + [activeCarnetId, notes]); + + const activeNote = useMemo(() => + notes.find(n => n.id === activeNoteId), + [activeNoteId, notes]); + + const activeCarnet = useMemo(() => + carnets.find(c => c.id === activeCarnetId), + [activeCarnetId, carnets]); + + const handleAddCarnet = (e: React.FormEvent) => { + e.preventDefault(); + if (!newCarnetName.trim()) return; + + const newCarnet: Carnet = { + id: Date.now().toString(), + name: newCarnetName, + initial: newCarnetName.charAt(0).toUpperCase(), + type: 'Project' + }; + + setCarnets([...carnets, newCarnet]); + setNewCarnetName(''); + setShowNewCarnetModal(false); + setActiveCarnetId(newCarnet.id); + }; + + const handleAddNote = (e: React.FormEvent) => { + e.preventDefault(); + if (!newNoteTitle.trim() || !newNoteContent.trim()) return; + + const newNote: Note = { + id: `n-${Date.now()}`, + carnetId: activeCarnetId, + title: newNoteTitle, + date: new Intl.DateTimeFormat('en-US', { month: 'short', day: 'numeric', year: 'numeric' }).format(new Date()), + content: newNoteContent, + imageUrl: 'https://images.unsplash.com/photo-1487958449943-2429e8be8625?auto=format&fit=crop&q=80&w=800&h=600' + }; + + setNotes([newNote, ...notes]); + setNewNoteTitle(''); + setNewNoteContent(''); + setShowNewNoteModal(false); + setActiveNoteId(newNote.id); + }; + + return ( +
+
+ +
+
+
+ + + +
+ + {!activeNoteId ? ( + +
+
+

+ {activeCarnet?.name} — {filteredNotes[0]?.date || 'Oct 26'} +

+
+ +
+
+ + +
+ +
+
+ +
+
+ {filteredNotes.map((note, index) => ( + setActiveNoteId(note.id)} + > +

+ {note.title} + +

+
+
+ {note.title} +
+
+

+ {note.content} +

+ Read more +
+
+
+ ))} + {filteredNotes.length === 0 && ( +
+

This notebook is waiting for its first vision.

+ +
+ )} +
+
+ +
+

+ © 2024 Architectural Grid. All rights reserved. +

+
+
+ ) : ( + +
+
+ +
+ + +
+
+ +
+
+
+ {activeCarnet?.name} + + {activeNote?.date} +
+

+ {activeNote?.title} +

+
+ +
+ {activeNote?.title} +
+ +
+

+ {activeNote?.content.split('.')[0]}. +

+
+

+ {activeNote?.content} + {activeNote?.id.startsWith('n-') && ( + <> +

+ Architectural grids serve as the invisible scaffolding upon which spatial experiences are constructed. Beyond mere structural repetition, they facilitate a rhythmic dialogue between materiality and void. In this exploration, we examine how light fractures these rigid boundaries, creating a dynamic interplay that evolves with the passage of time. + + )} +

+
+
+
+ + )} + +
+
+ + {/* Modals */} + + {showNewCarnetModal && ( +
+ setShowNewCarnetModal(false)} + className="absolute inset-0 bg-ink/40 backdrop-blur-sm" + /> + +

Create New Carnet

+
+
+ + setNewCarnetName(e.target.value)} + placeholder="E.g., Sustainable Patterns" + className="w-full bg-white border border-border rounded-lg px-4 py-3 outline-none focus:border-ink transition-colors font-serif italic text-lg" + /> +
+
+ + +
+
+
+
+ )} + + {showNewNoteModal && ( +
+ setShowNewNoteModal(false)} + className="absolute inset-0 bg-ink/40 backdrop-blur-sm" + /> + +

Add Architectural Note

+
+
+ + setNewNoteTitle(e.target.value)} + placeholder="Enter the title of your study..." + className="w-full bg-white border border-border rounded-lg px-5 py-4 outline-none focus:border-ink transition-colors font-serif text-2xl" + /> +
+
+ +