Write on the margins of the internet. Powered by the AT Protocol. margin.at
extension web atproto comments
at main 192 lines 8.6 kB view raw
1import React from "react"; 2import { Button } from "../ui"; 3import { 4 X, 5 ExternalLink, 6 Key, 7 Share, 8 Bookmark, 9 PenTool, 10 MoreHorizontal, 11} from "lucide-react"; 12import { AppleIcon } from "../common/Icons"; 13 14interface IOSShortcutModalProps { 15 isOpen: boolean; 16 onClose: () => void; 17} 18 19export default function IOSShortcutModal({ 20 isOpen, 21 onClose, 22}: IOSShortcutModalProps) { 23 if (!isOpen) return null; 24 25 return ( 26 <div 27 className="fixed inset-0 z-[100] flex items-center justify-center p-4 bg-black/40 backdrop-blur-sm animate-fade-in overflow-y-auto" 28 onClick={onClose} 29 > 30 <div 31 className="bg-white dark:bg-surface-900 rounded-xl shadow-2xl max-w-lg w-full animate-scale-in ring-1 ring-surface-200 dark:ring-surface-700 overflow-hidden my-auto" 32 onClick={(e) => e.stopPropagation()} 33 > 34 <div className="flex items-center justify-between px-6 py-4 border-b border-surface-200 dark:border-surface-800"> 35 <div className="flex items-center gap-2"> 36 <div className="w-8 h-8 rounded-lg bg-surface-100 dark:bg-surface-800 flex items-center justify-center text-surface-900 dark:text-white"> 37 <AppleIcon size={16} /> 38 </div> 39 <h2 className="text-lg font-semibold text-surface-900 dark:text-white"> 40 Save from iOS Safari 41 </h2> 42 </div> 43 <button 44 onClick={onClose} 45 className="p-2 text-surface-400 dark:text-surface-500 hover:bg-surface-100 dark:hover:bg-surface-800 rounded-lg transition-colors" 46 > 47 <X size={20} /> 48 </button> 49 </div> 50 51 <div className="px-6 py-5 max-h-[70vh] overflow-y-auto space-y-6"> 52 <div className="rounded-xl overflow-hidden bg-surface-100 dark:bg-surface-800 ring-1 ring-surface-200 dark:ring-surface-700 aspect-[9/16] max-h-80 mx-auto flex items-center justify-center relative"> 53 <video 54 src="/shortcut_walkthrough.mp4" 55 autoPlay 56 muted 57 loop 58 playsInline 59 controls 60 className="w-full h-full object-contain" 61 /> 62 </div> 63 64 <div className="space-y-4"> 65 <h3 className="text-sm font-semibold text-surface-900 dark:text-white uppercase tracking-wider"> 66 How to use the shortcut 67 </h3> 68 69 <div className="space-y-3"> 70 <div className="flex gap-3 text-sm"> 71 <div className="w-6 h-6 rounded-full bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 flex items-center justify-center flex-shrink-0 font-medium text-xs mt-0.5"> 72 1 73 </div> 74 <div> 75 <p className="text-surface-900 dark:text-white font-medium"> 76 Install the shortcut 77 </p> 78 <a 79 href="https://www.icloud.com/shortcuts/1e33ebf52f55431fae1e187cfe9738c3" 80 target="_blank" 81 rel="noopener noreferrer" 82 className="inline-flex items-center gap-1.5 mt-1.5 px-3 py-1.5 bg-surface-100 dark:bg-surface-800 hover:bg-surface-200 dark:hover:bg-surface-700 text-surface-900 dark:text-white rounded-lg text-xs font-medium transition-colors" 83 > 84 <ExternalLink size={14} /> Get iOS Shortcut 85 </a> 86 </div> 87 </div> 88 89 <div className="flex gap-3 text-sm"> 90 <div className="w-6 h-6 rounded-full bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 flex items-center justify-center flex-shrink-0 font-medium text-xs mt-0.5"> 91 2 92 </div> 93 <div> 94 <p className="text-surface-900 dark:text-white font-medium flex items-center gap-1.5"> 95 Generate an API Key{" "} 96 <Key size={14} className="text-surface-400" /> 97 </p> 98 <p className="text-surface-600 dark:text-surface-400 mt-0.5"> 99 Create a new key on this settings page and copy it. 100 </p> 101 </div> 102 </div> 103 104 <div className="flex gap-3 text-sm"> 105 <div className="w-6 h-6 rounded-full bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 flex items-center justify-center flex-shrink-0 font-medium text-xs mt-0.5"> 106 3 107 </div> 108 <div> 109 <p className="text-surface-900 dark:text-white font-medium"> 110 Configure the shortcut 111 </p> 112 <p className="text-surface-600 dark:text-surface-400 mt-0.5"> 113 In the Shortcuts app, click the{" "} 114 <MoreHorizontal size={14} className="inline mx-0.5" /> menu 115 on the <strong>Save to Margin</strong> shortcut, and paste 116 your API key in the Text action right below the setup 117 comment. 118 </p> 119 </div> 120 </div> 121 122 <div className="flex gap-3 text-sm"> 123 <div className="w-6 h-6 rounded-full bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 flex items-center justify-center flex-shrink-0 font-medium text-xs mt-0.5"> 124 4 125 </div> 126 <div> 127 <p className="text-surface-900 dark:text-white font-medium flex items-center gap-1.5"> 128 To Bookmark a page{" "} 129 <Bookmark size={14} className="text-surface-400" /> 130 </p> 131 <p className="text-surface-600 dark:text-surface-400 mt-0.5"> 132 Don't select any text. Click the{" "} 133 <MoreHorizontal size={14} className="inline mx-0.5" /> menu 134 in Safari, press{" "} 135 <Share size={12} className="inline mx-0.5" />{" "} 136 <strong>Share</strong>, and select{" "} 137 <strong>Save to Margin</strong>. 138 </p> 139 </div> 140 </div> 141 142 <div className="flex gap-3 text-sm"> 143 <div className="w-6 h-6 rounded-full bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 flex items-center justify-center flex-shrink-0 font-medium text-xs mt-0.5"> 144 5 145 </div> 146 <div> 147 <p className="text-surface-900 dark:text-white font-medium flex items-center gap-1.5"> 148 To Highlight text{" "} 149 <PenTool size={14} className="text-surface-400" /> 150 </p> 151 <p className="text-surface-600 dark:text-surface-400 mt-0.5"> 152 Select text on the page, click the{" "} 153 <MoreHorizontal size={14} className="inline mx-0.5" /> menu, 154 press <strong>Share</strong>, and select{" "} 155 <strong>Save to Margin</strong>. Leave the Note field empty. 156 </p> 157 </div> 158 </div> 159 160 <div className="flex gap-3 text-sm"> 161 <div className="w-6 h-6 rounded-full bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 flex items-center justify-center flex-shrink-0 font-medium text-xs mt-0.5"> 162 6 163 </div> 164 <div> 165 <p className="text-surface-900 dark:text-white font-medium"> 166 To Add an Annotation 167 </p> 168 <p className="text-surface-600 dark:text-surface-400 mt-0.5"> 169 Select text, share to <strong>Save to Margin</strong> (via 170 the <MoreHorizontal size={14} className="inline mx-0.5" />{" "} 171 menu), enter your custom note in the Note field, and press 172 Done! 173 </p> 174 </div> 175 </div> 176 </div> 177 </div> 178 </div> 179 180 <div className="px-6 py-4 bg-surface-50 dark:bg-surface-800/50 border-t border-surface-200 dark:border-surface-800"> 181 <Button 182 onClick={onClose} 183 variant="primary" 184 className="w-full justify-center" 185 > 186 Got it 187 </Button> 188 </div> 189 </div> 190 </div> 191 ); 192}