diff options
| author | Adam Soltys <[email protected]> | 2026-02-27 23:45:57 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-02-27 23:45:57 -0800 |
| commit | a13df7e6333514843a12832f6d75ce5a4a8eade9 (patch) | |
| tree | 66685c5487ee571e18e0e18575ca2608d4a04273 /src | |
| parent | 7f52cb3b1613e8acb50755483ef210a4f9e15ac3 (diff) | |
| download | coinos-ui-a13df7e6333514843a12832f6d75ce5a4a8eade9.tar.gz coinos-ui-a13df7e6333514843a12832f6d75ce5a4a8eade9.zip | |
ui updates
Diffstat (limited to 'src')
28 files changed, 148 insertions, 163 deletions
diff --git a/src/components/Menu.svelte b/src/components/Menu.svelte index f1584cde..17c0bf08 100644 --- a/src/components/Menu.svelte +++ b/src/components/Menu.svelte @@ -8,7 +8,7 @@ let showMenu = $state(false); let menuButtons = [ - { key: "nav.settings", icon: "ph:gear-bold", href: `/settings` }, + { key: "nav.settings", icon: "ph:faders-bold", href: `/settings` }, { key: "nav.support", icon: "ph:lifebuoy-bold", href: `/support` }, { key: "nav.map", icon: "ph:map-trifold-bold", href: `/map` }, // { diff --git a/src/components/Toggle.svelte b/src/components/Toggle.svelte index 8aee2829..14a8abcc 100644 --- a/src/components/Toggle.svelte +++ b/src/components/Toggle.svelte @@ -5,6 +5,6 @@ <label for={id} class="inline-flex relative items-center mr-5 cursor-pointer"> <input type="checkbox" bind:checked={value} {id} name={id} class="sr-only peer" /> <div - class="w-11 h-6 bg-gray-200 rounded-full peer dark:bg-gray-700 peer-focus:ring-4 peer-focus:ring-gray-300 dark:peer-focus:ring-gray-800 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-green-500" + class="w-11 h-6 bg-gray-400 rounded-full peer peer-focus:ring-4 peer-focus:ring-gray-300 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-green-500" ></div> </label> diff --git a/src/lib/store.ts b/src/lib/store.ts index df2c1eba..435df4b2 100644 --- a/src/lib/store.ts +++ b/src/lib/store.ts @@ -71,7 +71,7 @@ export const avatar = writable(); export const banner = writable(); export const event = writable(); export const events = writable({}); -export const fiat = persistLocalValue("fiat", true); +export const fiat = persistLocalValue("fiat", false); export const installPrompt: Writable<any> = writable(); export const invoice = writable(); export const last = writable(); diff --git a/src/locales/ar.json b/src/locales/ar.json index 5cc77c61..8d7dfb57 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -250,7 +250,7 @@ "login": { "forgot": "نسيت كلمة السر؟?", "resetSent": "وصلة إعادة صياغة كلمة السر سوف ترسل إلى بريدك الإلكتروني إذا كان لدينا على ملف.", - "continue": "استمر", + "continue": "متابعة", "reset": "إعادة صياغة كلمة السر", "resetDesc": "يمكننا إرسال وصلة إعادة إذا أضفت وتحققت من بريدك الإليكتروني", "optional": "الاختياري", @@ -274,7 +274,10 @@ "accountCreatedNeedsPasskey": "! يجب أن تجهزي مفتاح المرور لتكمليه.", "setupPasskey": "جهزوا جواز السفر", "passkeyCreationFailed": "فشل صنع (باسكي) أرجوك حاول مرة أخرى.", - "enter2faCode": "Enter 2FA Code" + "enter2faCode": "Enter 2FA Code", + "usernamePlaceholder": "اسم المستخدم الخاص بك", + "registerPasskey": "التسجيل باستخدام مفتاح المرور", + "registerNostr": "التسجيل باستخدام Nostr" }, "nav": { "dark": "الوضع الداكن", diff --git a/src/locales/bn.json b/src/locales/bn.json index 87a0b4ed..c28d34a0 100644 --- a/src/locales/bn.json +++ b/src/locales/bn.json @@ -220,7 +220,7 @@ "login": { "forgot": "পাসওয়ার্ড ভুলে গেলে?", "resetSent": "ফাইলের মধ্যে উপস্থিত তথ্য নিরাপদ হলে পাসওয়ার্ড সহযোগে একটি পাসওয়ার্ড সহযোগে প্রেরিত হবে।.", - "continue": "এগিয়ে চলুন", + "continue": "চালিয়ে যান", "reset": "পাসওয়ার্ড পুনরায় নির্ধারণ করুন", "resetDesc": "আপনি যোগ করলে আমরা একটি রিসেট লিঙ্ক পাঠাতে পারেন এবং যাচাই করে দেখতে পারেন অন্যথায় অনুগ্রহ করে প্রবেশ করুন", "optional": "বিকল্প", @@ -244,7 +244,10 @@ "accountCreatedNeedsPasskey": "অ্যাকাউন্ট তৈরি! আপনাকে একটি পাসকি সেট করতে হবে।.", "setupPasskey": "পাস-কি স্থাপন করুন", "passkeyCreationFailed": "পাসকি সৃষ্টি করতে ব্যর্থ. অনুগ্রহ করে পুনরায় প্রচেষ্টা করুন।.", - "enter2faCode": "২F কোড লিখুন" + "enter2faCode": "২F কোড লিখুন", + "usernamePlaceholder": "আপনার ব্যবহারকারীর নাম", + "registerPasskey": "পাসকি দিয়ে নিবন্ধন করুন", + "registerNostr": "Nostr দিয়ে নিবন্ধন করুন" }, "nav": { "dark": "ডার্ক মোড", diff --git a/src/locales/de.json b/src/locales/de.json index fc78402d..e99b8130 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -194,7 +194,10 @@ "accountCreatedNeedsPasskey": "Konto erstellt! Du musst einen Passkey einrichten, um weiterzumachen.", "setupPasskey": "Passkey einrichten", "passkeyCreationFailed": "Passkey-Erstellung fehlgeschlagen. Bitte versuchen Sie es noch einmal.", - "enter2faCode": "Geben Sie 2FA-Code ein" + "enter2faCode": "Geben Sie 2FA-Code ein", + "usernamePlaceholder": "Dein Benutzername", + "registerPasskey": "Mit Passkey registrieren", + "registerNostr": "Mit Nostr registrieren" }, "nav": { "profile": "Profil", diff --git a/src/locales/el.json b/src/locales/el.json index f669dc90..bc17abc0 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -163,7 +163,10 @@ "accountCreatedNeedsPasskey": "Ο λογαριασμός δημιουργήθηκε! Πρέπει να στήσεις ένα κλειδί για να συνεχίσεις.", "setupPasskey": "Set κλειδιού πρόσβασης", "passkeyCreationFailed": "Η δημιουργία passkey απέτυχε. Παρακαλώ προσπαθήστε ξανά.", - "enter2faCode": "Εισάγετε τον κωδικό 2FA" + "enter2faCode": "Εισάγετε τον κωδικό 2FA", + "usernamePlaceholder": "Το όνομα χρήστη σου", + "registerPasskey": "Εγγραφή με Passkey", + "registerNostr": "Εγγραφή με Nostr" }, "nav": { "profile": "Προφίλ", diff --git a/src/locales/en.json b/src/locales/en.json index 01fefe71..ae5a56f0 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -309,7 +309,10 @@ "accountCreatedNeedsPasskey": "Account created! You need to set up a passkey to continue.", "setupPasskey": "Set up Passkey", "passkeyCreationFailed": "Passkey creation failed. Please try again.", - "enter2faCode": "Enter 2FA Code" + "enter2faCode": "Enter 2FA Code", + "usernamePlaceholder": "Your username", + "registerPasskey": "Register with Passkey", + "registerNostr": "Register with Nostr" }, "nav": { "home": "Home", @@ -341,6 +344,7 @@ "loadMore": "Load more", "url": "Public URL", "lnurl": "Payment code", + "copyLnurl": "Copy LNURL", "install": "Add to homescreen", "moreDetails": "Profile details", "noMessages": "You have not sent or received any messages", @@ -365,6 +369,7 @@ "pay": "Pay", "scanToPayBTC": "Scan to pay with bitcoin", "this": "This", + "paymentCode": "Payment code", "lightningAddress": "Lightning address", "dashboard": { "setup": "Setup self-custody", diff --git a/src/locales/es.json b/src/locales/es.json index 65430b04..dba0385a 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -177,7 +177,10 @@ "accountCreatedNeedsPasskey": "¡Cuenta creada! Necesitas establecer un passkey para continuar.", "setupPasskey": "Configuración de Passkey", "passkeyCreationFailed": "La creación de Passkey falló. Por favor, inténtalo de nuevo.", - "enter2faCode": "Código 2FA" + "enter2faCode": "Código 2FA", + "usernamePlaceholder": "Tu nombre de usuario", + "registerPasskey": "Registrarse con Passkey", + "registerNostr": "Registrarse con Nostr" }, "nav": { "about": "Acerca de", diff --git a/src/locales/fa.json b/src/locales/fa.json index 8dc781b7..9e13cdc2 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -177,7 +177,10 @@ "accountCreatedNeedsPasskey": "حساب ایجاد شده! شما باید یک کلید برای ادامه دادن تنظیم کنید.", "setupPasskey": "راه اندازی Passkey", "passkeyCreationFailed": "آفرینش کلید شکست خورد. لطفا دوباره امتحان کنید.", - "enter2faCode": "کد 2FA" + "enter2faCode": "کد 2FA", + "usernamePlaceholder": "نام کاربری شما", + "registerPasskey": "ثبتنام با کلید عبور", + "registerNostr": "ثبتنام با Nostr" }, "nav": { "about": "در باره", diff --git a/src/locales/fr.json b/src/locales/fr.json index 73b11b7f..b84c48db 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -182,7 +182,10 @@ "accountCreatedNeedsPasskey": "Compte créé ! Vous devez installer une clé de passe pour continuer.", "setupPasskey": "Configurer Passkey", "passkeyCreationFailed": "La création de Passkey a échoué. Veuillez réessayer.", - "enter2faCode": "Entrez le code 2FA" + "enter2faCode": "Entrez le code 2FA", + "usernamePlaceholder": "Votre nom d'utilisateur", + "registerPasskey": "S'inscrire avec Passkey", + "registerNostr": "S'inscrire avec Nostr" }, "nav": { "startInSeconds": "Commencer en quelques secondes", diff --git a/src/locales/hi.json b/src/locales/hi.json index 29a788ac..8f24ab9c 100644 --- a/src/locales/hi.json +++ b/src/locales/hi.json @@ -250,7 +250,7 @@ "login": { "forgot": "पासवर्ड भूल गए?", "resetSent": "यदि हमारे पास फ़ाइल है तो पासवर्ड रीसेट लिंक आपके ईमेल पर भेजा जाएगा।.", - "continue": "जारी", + "continue": "जारी रखें", "reset": "पासवर्ड रीसेट", "resetDesc": "यदि आप अपने ईमेल को जोड़ा और सत्यापित करते हैं तो हम एक रीसेट लिंक भेज सकते हैं अन्यथा कृपया हमसे संपर्क करें", "optional": "वैकल्पिक", @@ -274,7 +274,10 @@ "accountCreatedNeedsPasskey": "खाता बनाया! आपको जारी रखने के लिए एक बंदी स्थापित करने की आवश्यकता है।.", "setupPasskey": "Passkey", "passkeyCreationFailed": "बंदी निर्माण विफल रहा। फिर से प्रयास करें।.", - "enter2faCode": "2FA कोड दर्ज करें" + "enter2faCode": "2FA कोड दर्ज करें", + "usernamePlaceholder": "आपका उपयोगकर्ता नाम", + "registerPasskey": "पासकी से रजिस्टर करें", + "registerNostr": "Nostr से रजिस्टर करें" }, "nav": { "dark": "डार्क मोड", diff --git a/src/locales/it.json b/src/locales/it.json index 90bfce28..ba332eeb 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -274,7 +274,10 @@ "accountCreatedNeedsPasskey": "Account creato! È necessario impostare un passkey per continuare.", "setupPasskey": "Impostare Passkey", "passkeyCreationFailed": "La creazione del passkey è fallita. Per favore riprovate.", - "enter2faCode": "Inserisci il codice 2FA" + "enter2faCode": "Inserisci il codice 2FA", + "usernamePlaceholder": "Il tuo nome utente", + "registerPasskey": "Registrati con Passkey", + "registerNostr": "Registrati con Nostr" }, "nav": { "dark": "Modalità scura", diff --git a/src/locales/ja.json b/src/locales/ja.json index 4664e058..d80ace25 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -170,14 +170,17 @@ "createAccount": "アカウントを作成する", "signUp": "サインアップ", "resetSent": "パスワードリセットリンクは、ファイルにインストールしている場合は、メールに送信されます.", - "continue": "お問い合わせ", + "continue": "続ける", "resetDesc": "追加して確認したメールが届かない場合は、リセットリンクを送信できます", "nostr": "Nostrでサインイン", "nostrConnect": "ノスト接続", "accountCreatedNeedsPasskey": "アカウント作成 続けてパスキーを設定する必要があります.", "setupPasskey": "パスキーの設定", "passkeyCreationFailed": "パッキー作成が失敗しました。 お問い合わせ.", - "enter2faCode": "2FAコードを入力してください" + "enter2faCode": "2FAコードを入力してください", + "usernamePlaceholder": "ユーザー名", + "registerPasskey": "パスキーで登録", + "registerNostr": "Nostrで登録" }, "nav": { "about": "About", diff --git a/src/locales/ko.json b/src/locales/ko.json index 6aaa8357..6dcd594e 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -250,7 +250,7 @@ "login": { "forgot": "비밀번호를 잊으셨나요?", "resetSent": "비밀번호 재설정 링크가 이메일로 전송됩니다.", - "continue": "계속하기", + "continue": "계속", "reset": "비밀번호 재설정", "resetDesc": "우리는 당신이 추가하고 확인하면 재설정 링크를 보낼 수 있습니다", "optional": "옵션 정보", @@ -274,7 +274,10 @@ "accountCreatedNeedsPasskey": "계정 생성! 패스키를 계속 설정해야 합니다.", "setupPasskey": "Passkey 설정", "passkeyCreationFailed": "Passkey 생성 실패. 다시 시도하십시오.", - "enter2faCode": "2FA 코드 입력" + "enter2faCode": "2FA 코드 입력", + "usernamePlaceholder": "사용자 이름", + "registerPasskey": "패스키로 등록", + "registerNostr": "Nostr로 등록" }, "nav": { "dark": "다크 모드", diff --git a/src/locales/nl.json b/src/locales/nl.json index f2d0724a..fb475bab 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -274,7 +274,10 @@ "accountCreatedNeedsPasskey": "Account aangemaakt! Je moet een wachtwoord instellen om door te gaan.", "setupPasskey": "Wachtwoord instellen", "passkeyCreationFailed": "Aanmaken van wachtwoord is mislukt. Probeer het nog eens.", - "enter2faCode": "Code 2FA" + "enter2faCode": "Code 2FA", + "usernamePlaceholder": "Je gebruikersnaam", + "registerPasskey": "Registreren met Passkey", + "registerNostr": "Registreren met Nostr" }, "nav": { "dark": "Donkere modus", diff --git a/src/locales/pl.json b/src/locales/pl.json index 5a664aa5..d03c068d 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -244,7 +244,10 @@ "accountCreatedNeedsPasskey": "Konto utworzone! Musisz ustawić klucz, żeby kontynuować.", "setupPasskey": "Ustaw hasło", "passkeyCreationFailed": "Tworzenie hasła nie powiodło się. Proszę spróbować jeszcze raz.", - "enter2faCode": "Wprowadź kod 2FA" + "enter2faCode": "Wprowadź kod 2FA", + "usernamePlaceholder": "Twoja nazwa użytkownika", + "registerPasskey": "Zarejestruj się z Passkey", + "registerNostr": "Zarejestruj się z Nostr" }, "mapAdd": { "header": "Dodaj swoją lokalizację", diff --git a/src/locales/pt.json b/src/locales/pt.json index ea11ff52..bdb94c30 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -186,14 +186,17 @@ "createAccount": "Criar uma conta", "signUp": "Inscrever-se", "resetSent": "Um link de redefinição de senha será enviado para o seu e-mail se o tivermos no arquivo.", - "continue": "Continue", + "continue": "Continuar", "resetDesc": "Podemos enviar um link de reset se você adicionou e verificou seu e-mail caso contrário, por favor, acesse para", "nostr": "Entrar com Nostr", "nostrConnect": "Nostr conectar", "accountCreatedNeedsPasskey": "Conta criada! Tens de configurar uma chave de acesso para continuar.", "setupPasskey": "Configurar senha", "passkeyCreationFailed": "A criação da chave de passagem falhou. Por favor, tente novamente.", - "enter2faCode": "Digite o código 2FA" + "enter2faCode": "Digite o código 2FA", + "usernamePlaceholder": "Seu nome de usuário", + "registerPasskey": "Registrar com Passkey", + "registerNostr": "Registrar com Nostr" }, "nav": { "about": "Sobre", diff --git a/src/locales/ru.json b/src/locales/ru.json index 0535cfab..0b0dcee6 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -140,14 +140,17 @@ "createAccount": "Зарегистрироваться", "signUp": "Зарегистрироваться", "resetSent": "Ссылка сброса пароля будет отправлена на вашу электронную почту, если у нас она есть в файле.", - "continue": "Продолжать", + "continue": "Продолжить", "resetDesc": "Мы можем отправить ссылку сброса, если вы добавили и проверили свою электронную почту, в противном случае, пожалуйста, свяжитесь с нами", "nostr": "Зарегистрируйтесь в Nostr", "nostrConnect": "Подключение Nostr", "accountCreatedNeedsPasskey": "Создан аккаунт! Вам нужно установить ключ, чтобы продолжить.", "setupPasskey": "Настройка Passkey", "passkeyCreationFailed": "Создание Passkey провалилось. Пожалуйста, попробуйте еще раз.", - "enter2faCode": "Введите код 2FA" + "enter2faCode": "Введите код 2FA", + "usernamePlaceholder": "Ваше имя пользователя", + "registerPasskey": "Зарегистрироваться с Passkey", + "registerNostr": "Зарегистрироваться с Nostr" }, "mapAdd": { "header": "Добавьте свою локацию", diff --git a/src/locales/th.json b/src/locales/th.json index 6023d831..f5c2ce0e 100644 --- a/src/locales/th.json +++ b/src/locales/th.json @@ -220,7 +220,7 @@ "login": { "forgot": "ลืมรหัสผ่าน?", "resetSent": "จะมีการส่งลิงก์ใหม่ไปยังอีเมลของคุณ ถ้าเรามีมันอยู่ในแฟ้ม.", - "continue": "ทําต่อไป", + "continue": "ดำเนินการต่อ", "reset": "ตั้งค่ารหัสผ่านใหม่", "resetDesc": "เราสามารถส่งลิงก์ใหม่ได้ ถ้าคุณเพิ่มและตรวจสอบอีเมลของคุณ มิฉะนั้น โปรดติดต่อไปยัง", "optional": "ตัวเลือก", @@ -244,7 +244,10 @@ "accountCreatedNeedsPasskey": "คิด บัญชี! คุณต้องติดตั้งพาสคีย์เพื่อดําเนินการต่อ.", "setupPasskey": "ตั้งค่าพาสคีย์", "passkeyCreationFailed": "การสร้างพาสคีย์ล้มเหลว กรุณาลองอีกครั้ง.", - "enter2faCode": "ป้อนรหัส 2FA" + "enter2faCode": "ป้อนรหัส 2FA", + "usernamePlaceholder": "ชื่อผู้ใช้ของคุณ", + "registerPasskey": "ลงทะเบียนด้วย Passkey", + "registerNostr": "ลงทะเบียนด้วย Nostr" }, "nav": { "dark": "โหมดมืด", diff --git a/src/locales/tr.json b/src/locales/tr.json index a55d3ac9..893fc6f7 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -220,7 +220,7 @@ "login": { "forgot": "Şifreyi mi unuttunuz?", "resetSent": "Bir parola sıfırlama linki, dosya üzerinde varsa e-postanıza gönderilir.", - "continue": "Devam etmeye devam et", + "continue": "Devam et", "reset": "Şifre sıfırlama", "resetDesc": "E-postanızı ekledikten ve doğrulayan bir sıfırlama linkini gönderebiliriz, aksi takdirde lütfen e-postanızı onaylayın", "optional": "Seçmeli", @@ -244,7 +244,10 @@ "accountCreatedNeedsPasskey": "Hesap oluşturuldu! Devam etmek için bir passkey kurmak zorundasınız.", "setupPasskey": "Set up Passkey", "passkeyCreationFailed": "Paskey yaratımı başarısız oldu. Lütfen tekrar deneyin.", - "enter2faCode": "2FA Code" + "enter2faCode": "2FA Code", + "usernamePlaceholder": "Kullanıcı adınız", + "registerPasskey": "Passkey ile kayıt ol", + "registerNostr": "Nostr ile kayıt ol" }, "mapAdd": { "header": "Konumunuzu ekleyin", diff --git a/src/locales/zh.json b/src/locales/zh.json index 16951da9..95b4d38d 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -177,7 +177,10 @@ "accountCreatedNeedsPasskey": "账户创建! 你需要设置一个密码继续.", "setupPasskey": "设置密码", "passkeyCreationFailed": "Passkey 创建失败 。 请再试一次.", - "enter2faCode": "输入 2FA 代码" + "enter2faCode": "输入 2FA 代码", + "usernamePlaceholder": "您的用户名", + "registerPasskey": "使用 Passkey 注册", + "registerNostr": "使用 Nostr 注册" }, "nav": { "about": "关于", diff --git a/src/routes/(app)/[username]/(profile)/+layout.svelte b/src/routes/(app)/[username]/(profile)/+layout.svelte index 168be9b2..df63051f 100644 --- a/src/routes/(app)/[username]/(profile)/+layout.svelte +++ b/src/routes/(app)/[username]/(profile)/+layout.svelte @@ -1,29 +1,19 @@ <script lang="ts"> - import { copy, f, loc, post, s, sats, success, fail } from "$lib/utils"; - import { fiat } from "$lib/store"; - import { t } from "$lib/translations"; - import { bech32 } from "@scure/base"; - import { page } from "$app/stores"; - import { PUBLIC_DOMAIN } from "$env/static/public"; + import { f, loc, post, s, sats, success, fail } from "$lib/utils"; let { data, children } = $props(); - let { encode, toWords } = bech32; - let { rates, user, subject } = $derived(data); let rate = $derived(rates[subject.currency]); let { events, src, text } = $derived(data as any); let satsPerCurrency = $derived((1 * sats) / rate); - let { currency, npub, username: n, display } = $derived(subject); + let { currency, username: n, display } = $derived(subject); let locale = $derived(loc(user)); let showBio = $state(); let toggleBio = () => (showBio = !showBio); - let showDetails = $state(); - let toggleDetails = () => (showDetails = !showDetails); - let password = $state(); let reset = async (e) => { @@ -38,33 +28,19 @@ let stripped = $derived(n.replace(/\s/g, "")); let username = $derived(n.length > 60 ? n.substr(0, 6) : display || stripped); - let lnaddr = $derived(subject?.anon ? subject.lud16 || undefined : `${stripped}@${$page.url.host}`); - let profile = $derived(`${$page.url.host}/${subject.anon ? npub : stripped}`); - let lnurl = $derived( - encode( - "lnurl", - toWords( - new TextEncoder().encode(`https://${PUBLIC_DOMAIN}/p/${subject.anon ? npub : stripped}`), - ), - 20000, - ), - ); </script> <div class="container mx-auto w-full px-4 flex flex-wrap lg:flex-nowrap"> <div class="hidden lg:block lg:w-[280px] xl:w-[360px]"></div> <div class="w-full lg:w-[280px] xl:w-[360px] lg:absolute space-y-2 left-20 mx-auto"> - <div class="flex text-3xl font-bold text-center mx-auto justify-center gap-1 items-center"> - <button class="flex gap-1 items-center" onclick={toggleDetails}> - <div class="break-words">{display || username}</div> - <iconify-icon noobserver icon="ph:list-bold" width="32"></iconify-icon> - </button> + <div class="flex text-3xl font-bold text-center mx-auto justify-center gap-3 items-center"> + <div class="break-words">{display || username}</div> {#if subject.id === user?.id} - <a href="/settings/profile" class="btn contents" aria-label="Edit profile"> - <iconify-icon noobserver icon="ph:pencil-bold" width="32"></iconify-icon> + <a href="/settings/profile" class="flex items-center" aria-label="Profile settings"> + <iconify-icon noobserver icon="ph:faders-bold" width="32"></iconify-icon> </a> {:else} - <a href="/dm?username={subject.username}" class="btn contents" aria-label="Direct Message"> + <a href="/dm?username={subject.username}" aria-label="Direct Message"> <iconify-icon noobserver icon="ph:chat-bold" width="32"></iconify-icon> </a> {/if} @@ -92,100 +68,6 @@ </div> {/if} - {#if showDetails} - <div class="space-y-5"> - {#if lnaddr} - <div> - <div class="text-secondary">{$t("user.lightningAddress")}</div> - <div class="flex gap-4"> - <div class="break-all grow text-xl">{lnaddr}</div> - <div class="flex mb-auto gap-1"> - <button - type="button" - class="my-auto" - aria-label="Copy lightning address" - onclick={() => copy(lnaddr)} - > - <iconify-icon noobserver icon="ph:copy-bold" width="32"></iconify-icon> - </button> - <a - href={`/qr/${encodeURIComponent(lnaddr)}`} - class="my-auto" - aria-label="Show lightning address QR" - > - <iconify-icon noobserver icon="ph:qr-code-bold" width="32"></iconify-icon> - </a> - </div> - </div> - </div> - {/if} - <div> - <div class="text-secondary">{$t("user.url")}</div> - <div class="flex gap-4"> - <div class="break-all grow text-xl">{profile}</div> - <div class="flex mb-auto gap-1"> - <button - type="button" - class="my-auto" - aria-label="Copy profile URL" - onclick={() => copy(profile)} - > - <iconify-icon noobserver icon="ph:copy-bold" width="32"></iconify-icon> - </button> - <a - href={`/qr/${encodeURIComponent(`${$page.url.protocol}//${profile}`)}`} - class="my-auto" - aria-label="Show profile URL QR" - > - <iconify-icon noobserver icon="ph:qr-code-bold" width="32"></iconify-icon> - </a> - </div> - </div> - </div> - <div> - <div class="text-secondary">{$t("user.lnurl")}</div> - <div class="flex gap-4"> - <div class="break-all grow text-xl">{lnurl}</div> - <div class="flex mb-auto gap-1"> - <button - type="button" - class="my-auto" - aria-label="Copy LNURL" - onclick={() => copy(`lightning:${lnurl}`)} - > - <iconify-icon noobserver icon="ph:copy-bold" width="32"></iconify-icon> - </button> - <a - href={`/${n}/accepted/${encodeURIComponent(`lightning:${lnurl}`)}`} - class="my-auto" - aria-label="Show LNURL QR" - > - <iconify-icon noobserver icon="ph:qr-code-bold" width="32"></iconify-icon> - </a> - </div> - </div> - </div> - <!-- <div> --> - <!-- <div class="text-secondary">{$t("user.nostrPubkey")}</div> --> - <!-- <div class="flex gap-4"> --> - <!-- <div class="break-all grow text-xl"> --> - <!-- {npub} --> - <!-- </div> --> - <!-- <div class="flex my-auto gap-1"> --> - <!-- <button class="my-auto" onclick={() => copy(npub)} --> - <!-- ><iconify-icon noobserver icon="ph:copy-bold" width="32" --> - <!-- ></iconify-icon></button --> - <!-- > --> - <!-- <a href={`/qr/${encodeURIComponent(npub)}`} class="my-auto"> --> - <!-- <iconify-icon noobserver icon="ph:qr-code-bold" width="32" --> - <!-- ></iconify-icon> --> - <!-- </a> --> - <!-- </div> --> - <!-- </div> --> - <!-- </div> --> - </div> - {/if} - <div class="flex flex-wrap gap-2 w-full text-lg"> <!-- {#if user && user.username !== subject.username && subject.pubkey} --> <!-- {#if following} --> diff --git a/src/routes/(app)/[username]/accepted/[text]/+page.svelte b/src/routes/(app)/[username]/accepted/[text]/+page.svelte index 6b2c3a86..be4cfe55 100644 --- a/src/routes/(app)/[username]/accepted/[text]/+page.svelte +++ b/src/routes/(app)/[username]/accepted/[text]/+page.svelte @@ -1,6 +1,7 @@ <script> import Qr from "$comp/Qr.svelte"; import { back, copy } from "$lib/utils"; + import { t } from "$lib/translations"; import { bech32 } from "@scure/base"; import { page } from "$app/stores"; import { PUBLIC_DOMAIN } from "$env/static/public"; @@ -21,7 +22,7 @@ </script> <div class="px-2"> - <div class="border-8 border-black p-8 max-w-[580px] mx-auto mt-20 space-y-2 rounded-3xl relative"> + <div class="border-8 border-black bg-white text-black p-8 max-w-[580px] mx-auto mt-20 space-y-2 rounded-3xl relative"> <div class="flex gap-2 mx-auto justify-center"> <!-- <img src="/images/bitcoin.png" class="w-16 h-16 my-auto" /> --> <img src="/images/bitcoin-logo.png" class="my-auto w-[400px]" alt="Bitcoin" /> @@ -43,6 +44,6 @@ <button onclick={() => copy(lnurl)} class="flex gap-1 m-auto my-8"> <iconify-icon icon="ph:copy-bold" width={32}></iconify-icon> - LNURL + {$t("user.copyLnurl")} </button> </div> diff --git a/src/routes/(app)/settings/account/+page.svelte b/src/routes/(app)/settings/account/+page.svelte index 8622553e..bb9ddbc6 100644 --- a/src/routes/(app)/settings/account/+page.svelte +++ b/src/routes/(app)/settings/account/+page.svelte @@ -146,7 +146,7 @@ {#if connect !== "connected"} <a href={connect} class="btn flex"> - <img src="/images/square.svg" class="w-12" alt="Square" /> + <img src="/images/square.svg" class="w-12" class:invert={$theme === "dark"} alt="Square" /> <div>{$t("user.settings.connectSquare")}</div> </a> {:else} diff --git a/src/routes/(app)/settings/profile/+page.svelte b/src/routes/(app)/settings/profile/+page.svelte index 201a9c30..a6e86d58 100644 --- a/src/routes/(app)/settings/profile/+page.svelte +++ b/src/routes/(app)/settings/profile/+page.svelte @@ -3,6 +3,9 @@ import { avatar, banner as bannerStore } from "$lib/store"; import { t } from "$lib/translations"; import { page } from "$app/stores"; + import { copy } from "$lib/utils"; + import { bech32 } from "@scure/base"; + import { PUBLIC_DOMAIN } from "$env/static/public"; import PasswordInput from "$comp/PasswordInput.svelte"; let { data } = $props(); @@ -60,6 +63,20 @@ let full = $derived(`${$page.url.protocol}//${url}`); let addr = $derived(`${username}@${$page.url.host}`); + let { encode, toWords } = bech32; + let stripped = $derived((username as string)?.replace(/\s/g, "")); + let lnurl = $derived( + stripped + ? encode( + "lnurl", + toWords( + new TextEncoder().encode(`https://${PUBLIC_DOMAIN}/p/${user?.anon ? user.npub : stripped}`), + ), + 20000, + ) + : "", + ); + $effect(() => { if (!user) return; if (typeof about === "undefined") about = user.about; @@ -179,3 +196,29 @@ <textarea name="about" bind:value={about} placeholder={$t("user.settings.aboutPlaceholder")} ></textarea> </div> + +{#if lnurl} + <div> + <span class="font-bold">{$t("user.paymentCode")}</span> + <div class="flex gap-4"> + <div class="break-all grow text-xl">{lnurl}</div> + <div class="flex mb-auto gap-1"> + <button + type="button" + class="my-auto" + aria-label="Copy payment code" + onclick={() => copy(`lightning:${lnurl}`)} + > + <iconify-icon noobserver icon="ph:copy-bold" width="32"></iconify-icon> + </button> + <a + href={`/${username}/accepted/${encodeURIComponent(`lightning:${lnurl}`)}`} + class="my-auto" + aria-label="Show payment code QR" + > + <iconify-icon noobserver icon="ph:qr-code-bold" width="32"></iconify-icon> + </a> + </div> + </div> + </div> +{/if} diff --git a/src/routes/(static)/register/+page.svelte b/src/routes/(static)/register/+page.svelte index 8645356a..9c196011 100644 --- a/src/routes/(static)/register/+page.svelte +++ b/src/routes/(static)/register/+page.svelte @@ -115,14 +115,14 @@ bind:value={username} onfocus={clear} autocapitalize="none" - placeholder="Your username" + placeholder={$t("login.usernamePlaceholder")} onkeydown={(e: KeyboardEvent) => e.key === "Enter" && continueToAuth()} /> <span class="at-suffix font-bold whitespace-nowrap select-none self-stretch flex items-center px-3">@coinos.io</span> </label> <button class="btn btn-accent" onclick={continueToAuth}> - Continue + {$t("login.continue")} </button> <p class="text-secondary text-center font-medium"> diff --git a/src/routes/(static)/register/auth/+page.svelte b/src/routes/(static)/register/auth/+page.svelte index 5809ef4b..80915108 100644 --- a/src/routes/(static)/register/auth/+page.svelte +++ b/src/routes/(static)/register/auth/+page.svelte @@ -363,7 +363,7 @@ {:else} <iconify-icon noobserver icon="ph:fingerprint-bold" width="24"></iconify-icon> {/if} - <div class="my-auto">Register with Passkey</div> + <div class="my-auto">{$t("login.registerPasskey")}</div> </button> <button type="button" class="btn" onclick={nostrLogin}> @@ -374,7 +374,7 @@ {:else} <img src="/images/nostr.png" class="w-8" alt="Nostr" /> {/if} - <div class="my-auto">Register with Nostr</div> + <div class="my-auto">{$t("login.registerNostr")}</div> </button> <p class="text-secondary text-center font-medium"> |
