Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
207 changes: 159 additions & 48 deletions web/app/[locale]/dashboard/mobile-devices/mobile-devices-dashboard.tsx

Large diffs are not rendered by default.

18 changes: 14 additions & 4 deletions web/app/[locale]/dashboard/mobile-devices/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,16 @@ export default async function MobileDevicesDashboardPage({
if (!isStackConfigured()) redirect("/");
const t = await getTranslations({ locale, namespace: "dashboard.mobileDevices" });
return (
<div className="mx-auto w-full max-w-5xl px-3 py-4">
<div className="mb-4 border-b border-border pb-3">
<h1 className="text-sm font-medium">{t("title")}</h1>
<p className="mt-1 max-w-2xl text-muted">{t("description")}</p>
<div className="mx-auto w-full max-w-6xl px-4 py-6 sm:px-6 sm:py-8">
<div className="mb-7 flex items-start gap-4 border-b border-border pb-6">
<span className="mt-0.5 flex size-10 shrink-0 items-center justify-center border border-border bg-code-bg text-muted" aria-hidden="true">
<MobileDevicesIcon />
</span>
<div>
<p className="text-xs font-medium uppercase tracking-[0.16em] text-muted">{t("eyebrow")}</p>
<h1 className="mt-1 text-xl font-medium tracking-tight">{t("title")}</h1>
<p className="mt-2 max-w-2xl text-sm leading-6 text-muted">{t("description")}</p>
</div>
</div>
<Suspense fallback={<DashboardSectionSkeleton variant="rows" />}>
<MobileDevicesSection locale={locale} />
Expand All @@ -28,6 +34,10 @@ export default async function MobileDevicesDashboardPage({
);
}

function MobileDevicesIcon() {
return <svg aria-hidden="true" viewBox="0 0 20 20" className="size-5" fill="none" stroke="currentColor" strokeWidth="1.2"><rect x="2.5" y="3" width="11" height="8" rx="1" /><path d="M5.5 14.5h5M8 11v3.5M15 6.5h2.5v10H10v-2" /></svg>;
}

export async function MobileDevicesSection({ locale }: { readonly locale: string }) {
const section = await loadDashboardSection(locale, "/dashboard/mobile-devices");
if (section.kind === "unavailable") {
Expand Down
11 changes: 10 additions & 1 deletion web/messages/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "تم إلغاؤه",
"relaySettings": "إعدادات الترحيل",
"relaySettingsDescription": "اختر خوادم الترحيل التي يستخدمها هذا الفريق. أدخل عنوان URL واحدًا في كل سطر.",
"saveRelaySettings": "حفظ إعدادات الترحيل"
"saveRelaySettings": "حفظ إعدادات الترحيل",
"eyebrow": "السحابة / الأجهزة",
"scopeActive": "عرض هذا الفريق",
"emptyTitle": "لا توجد أجهزة متصلة بعد",
"emptyDescription": "عند إقران جهاز cmux بهذا الفريق، سيظهر هنا مع منصته وإصداره وعناصر التحكم في الوصول.",
"revoking": "جارٍ إلغاء الوصول…",
"registeredDevices": "الأجهزة المسجلة",
"activeDevices": "الأجهزة النشطة",
"directoryRevision": "مراجعة الدليل",
"savingRelaySettings": "جارٍ الحفظ…"
},
"coderouterAccounts": {
"shareWithTeam": "مشاركة مع الفريق",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/bs.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Opozvan",
"relaySettings": "Postavke releja",
"relaySettingsDescription": "Odaberite relejne servere koje koristi ovaj tim. Unesite jedan URL po redu.",
"saveRelaySettings": "Sačuvaj postavke releja"
"saveRelaySettings": "Sačuvaj postavke releja",
"eyebrow": "oblak / uređaji",
"scopeActive": "Prikazan je ovaj tim",
"emptyTitle": "Još nema povezanih uređaja",
"emptyDescription": "Kada se cmux uređaj upari s ovim timom, ovdje će se prikazati njegova platforma, verzija i kontrole pristupa.",
"revoking": "Opozivanje pristupa…",
"registeredDevices": "Registrirani uređaji",
"activeDevices": "Aktivni uređaji",
"directoryRevision": "Revizija direktorija",
"savingRelaySettings": "Spremanje…"
},
"coderouterAccounts": {
"shareWithTeam": "Podijeli s timom",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/da.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Tilbagekaldt",
"relaySettings": "Relayindstillinger",
"relaySettingsDescription": "Vælg de relayservere, som dette team bruger. Indtast én URL pr. linje.",
"saveRelaySettings": "Gem relayindstillinger"
"saveRelaySettings": "Gem relayindstillinger",
"eyebrow": "cloud / enheder",
"scopeActive": "Viser dette team",
"emptyTitle": "Ingen tilsluttede enheder endnu",
"emptyDescription": "Når en cmux-enhed parres med dette team, vises den her med platform, version og adgangskontrol.",
"revoking": "Tilbagekalder…",
"registeredDevices": "Registrerede enheder",
"activeDevices": "Aktive enheder",
"directoryRevision": "Oversigtens revision",
"savingRelaySettings": "Gemmer…"
},
"coderouterAccounts": {
"shareWithTeam": "Del med teamet",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Entzogen",
"relaySettings": "Relay-Einstellungen",
"relaySettingsDescription": "Wähle die Relay-Server für dieses Team. Gib pro Zeile eine URL ein.",
"saveRelaySettings": "Relay-Einstellungen speichern"
"saveRelaySettings": "Relay-Einstellungen speichern",
"eyebrow": "Cloud / Geräte",
"scopeActive": "Dieses Team wird angezeigt",
"emptyTitle": "Noch keine verbundenen Geräte",
"emptyDescription": "Sobald ein cmux-Gerät mit diesem Team gekoppelt ist, erscheint es hier mit Plattform, Version und Zugriffsverwaltung.",
"revoking": "Zugriff wird entzogen…",
"registeredDevices": "Registrierte Geräte",
"activeDevices": "Aktive Geräte",
"directoryRevision": "Verzeichnisrevision",
"savingRelaySettings": "Wird gespeichert…"
},
"coderouterAccounts": {
"shareWithTeam": "Mit Team teilen",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -607,21 +607,30 @@
"title": "Mobile devices",
"description": "Manage access to your connected computers, phones, and tablets.",
"team": "Team",
"scopeActive": "Team scope active",
"teamSwitchError": "Could not switch teams. Try again.",
"loading": "Loading devices…",
"empty": "No devices are registered for this team.",
"emptyTitle": "No connected devices yet",
"emptyDescription": "When a cmux device pairs with this team, it will appear here with its platform, version, and access controls.",
"unavailable": "Could not load your devices. Refresh the page to try again.",
"retry": "Try again",
"mutationError": "The device change could not be completed.",
"revoke": "Revoke access",
"revoking": "Revoking…",
"deviceId": "Device",
"revision": "Revision",
"registeredDevices": "Registered devices",
"activeDevices": "Active devices",
"directoryRevision": "Directory revision",
"status": "Status",
"active": "Active",
"revoked": "Revoked",
"relaySettings": "Relay settings",
"relaySettingsDescription": "Choose the relay servers used by this team. Enter one URL per line.",
"saveRelaySettings": "Save relay settings"
"saveRelaySettings": "Save relay settings",
"savingRelaySettings": "Saving…",
"eyebrow": "cloud / devices"
}
},
"vault": {
Expand Down
11 changes: 10 additions & 1 deletion web/messages/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Revocado",
"relaySettings": "Configuración de retransmisión",
"relaySettingsDescription": "Elige los servidores de retransmisión que usa este equipo. Introduce una URL por línea.",
"saveRelaySettings": "Guardar configuración de retransmisión"
"saveRelaySettings": "Guardar configuración de retransmisión",
"eyebrow": "nube / dispositivos",
"scopeActive": "Mostrando este equipo",
"emptyTitle": "Aún no hay dispositivos conectados",
"emptyDescription": "Cuando un dispositivo cmux se vincule con este equipo, aparecerá aquí con su plataforma, versión y controles de acceso.",
"revoking": "Revocando…",
"registeredDevices": "Dispositivos registrados",
"activeDevices": "Dispositivos activos",
"directoryRevision": "Revisión del directorio",
"savingRelaySettings": "Guardando…"
},
"coderouterAccounts": {
"shareWithTeam": "Compartir con el equipo",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Révoqué",
"relaySettings": "Paramètres du relais",
"relaySettingsDescription": "Choisissez les serveurs relais utilisés par cette équipe. Saisissez une URL par ligne.",
"saveRelaySettings": "Enregistrer les paramètres du relais"
"saveRelaySettings": "Enregistrer les paramètres du relais",
"eyebrow": "cloud / appareils",
"scopeActive": "Affichage de cette équipe",
"emptyTitle": "Aucun appareil connecté pour le moment",
"emptyDescription": "Lorsqu’un appareil cmux est associé à cette équipe, il apparaît ici avec sa plateforme, sa version et ses contrôles d’accès.",
"revoking": "Révocation…",
"registeredDevices": "Appareils enregistrés",
"activeDevices": "Appareils actifs",
"directoryRevision": "Révision du répertoire",
"savingRelaySettings": "Enregistrement…"
},
"coderouterAccounts": {
"shareWithTeam": "Partager avec l’équipe",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Revocato",
"relaySettings": "Impostazioni relay",
"relaySettingsDescription": "Scegli i server relay usati da questo team. Inserisci un URL per riga.",
"saveRelaySettings": "Salva impostazioni relay"
"saveRelaySettings": "Salva impostazioni relay",
"eyebrow": "cloud / dispositivi",
"scopeActive": "Visualizzazione di questo team",
"emptyTitle": "Nessun dispositivo connesso",
"emptyDescription": "Quando un dispositivo cmux viene associato a questo team, apparirà qui con piattaforma, versione e controlli di accesso.",
"revoking": "Revoca in corso…",
"registeredDevices": "Dispositivi registrati",
"activeDevices": "Dispositivi attivi",
"directoryRevision": "Revisione dell’elenco",
"savingRelaySettings": "Salvataggio…"
},
"coderouterAccounts": {
"shareWithTeam": "Condividi con il team",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -621,7 +621,16 @@
"revoked": "取り消し済み",
"relaySettings": "リレー設定",
"relaySettingsDescription": "このチームで使用するリレーサーバーを選択します。1 行に 1 つ URL を入力してください。",
"saveRelaySettings": "リレー設定を保存"
"saveRelaySettings": "リレー設定を保存",
"eyebrow": "クラウド / デバイス",
"scopeActive": "このチームを表示中",
"emptyTitle": "接続済みのデバイスはまだありません",
"emptyDescription": "cmuxデバイスをこのチームとペアリングすると、プラットフォーム、バージョン、アクセス管理がここに表示されます。",
"revoking": "取り消し中…",
"registeredDevices": "登録済みデバイス",
"activeDevices": "有効なデバイス",
"directoryRevision": "一覧のリビジョン",
"savingRelaySettings": "保存中…"
}
},
"vault": {
Expand Down
11 changes: 10 additions & 1 deletion web/messages/km.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "បានដកហូត",
"relaySettings": "ការកំណត់ relay",
"relaySettingsDescription": "ជ្រើសរើសម៉ាស៊ីនមេ relay ដែលក្រុមនេះប្រើ។ បញ្ចូល URL មួយក្នុងមួយជួរ។",
"saveRelaySettings": "រក្សាទុកការកំណត់ relay"
"saveRelaySettings": "រក្សាទុកការកំណត់ relay",
"eyebrow": "ពពក / ឧបករណ៍",
"scopeActive": "កំពុងបង្ហាញក្រុមនេះ",
"emptyTitle": "មិនទាន់មានឧបករណ៍បានភ្ជាប់ទេ",
"emptyDescription": "នៅពេលឧបករណ៍ cmux ផ្គូផ្គងជាមួយក្រុមនេះ វានឹងបង្ហាញនៅទីនេះជាមួយវេទិកា កំណែ និងការគ្រប់គ្រងសិទ្ធិចូលប្រើ។",
"revoking": "កំពុងដកសិទ្ធិចូលប្រើ…",
"registeredDevices": "ឧបករណ៍ដែលបានចុះឈ្មោះ",
"activeDevices": "ឧបករណ៍សកម្ម",
"directoryRevision": "កំណែបញ្ជី",
"savingRelaySettings": "កំពុងរក្សាទុក…"
},
"coderouterAccounts": {
"shareWithTeam": "ចែករំលែកជាមួយក្រុម",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "취소됨",
"relaySettings": "릴레이 설정",
"relaySettingsDescription": "이 팀에서 사용할 릴레이 서버를 선택하세요. 한 줄에 URL 하나를 입력하세요.",
"saveRelaySettings": "릴레이 설정 저장"
"saveRelaySettings": "릴레이 설정 저장",
"eyebrow": "클라우드 / 기기",
"scopeActive": "이 팀을 표시 중",
"emptyTitle": "아직 연결된 기기가 없습니다",
"emptyDescription": "cmux 기기를 이 팀과 페어링하면 플랫폼, 버전 및 접근 제어가 여기에 표시됩니다.",
"revoking": "접근 권한 취소 중…",
"registeredDevices": "등록된 기기",
"activeDevices": "활성 기기",
"directoryRevision": "목록 리비전",
"savingRelaySettings": "저장 중…"
},
"coderouterAccounts": {
"shareWithTeam": "팀과 공유",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/no.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Tilbakekalt",
"relaySettings": "Relay-innstillinger",
"relaySettingsDescription": "Velg relay-serverne som dette teamet bruker. Skriv inn én URL per linje.",
"saveRelaySettings": "Lagre relay-innstillinger"
"saveRelaySettings": "Lagre relay-innstillinger",
"eyebrow": "sky / enheter",
"scopeActive": "Viser dette teamet",
"emptyTitle": "Ingen tilkoblede enheter ennå",
"emptyDescription": "Når en cmux-enhet pares med dette teamet, vises den her med plattform, versjon og tilgangskontroller.",
"revoking": "Tilbakekaller…",
"registeredDevices": "Registrerte enheter",
"activeDevices": "Aktive enheter",
"directoryRevision": "Katalogrevisjon",
"savingRelaySettings": "Lagrer…"
},
"coderouterAccounts": {
"shareWithTeam": "Del med teamet",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Unieważnione",
"relaySettings": "Ustawienia przekaźnika",
"relaySettingsDescription": "Wybierz serwery przekaźnikowe używane przez ten zespół. Wpisz jeden URL w wierszu.",
"saveRelaySettings": "Zapisz ustawienia przekaźnika"
"saveRelaySettings": "Zapisz ustawienia przekaźnika",
"eyebrow": "chmura / urządzenia",
"scopeActive": "Wyświetlanie tego zespołu",
"emptyTitle": "Brak połączonych urządzeń",
"emptyDescription": "Gdy urządzenie cmux zostanie sparowane z tym zespołem, pojawi się tutaj wraz z platformą, wersją i ustawieniami dostępu.",
"revoking": "Cofanie dostępu…",
"registeredDevices": "Zarejestrowane urządzenia",
"activeDevices": "Aktywne urządzenia",
"directoryRevision": "Rewizja katalogu",
"savingRelaySettings": "Zapisywanie…"
},
"coderouterAccounts": {
"shareWithTeam": "Udostępnij zespołowi",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/pt-BR.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Revogado",
"relaySettings": "Configurações de relay",
"relaySettingsDescription": "Escolha os servidores de relay usados por esta equipe. Insira uma URL por linha.",
"saveRelaySettings": "Salvar configurações de relay"
"saveRelaySettings": "Salvar configurações de relay",
"eyebrow": "nuvem / dispositivos",
"scopeActive": "Exibindo esta equipe",
"emptyTitle": "Nenhum dispositivo conectado ainda",
"emptyDescription": "Quando um dispositivo cmux for pareado com esta equipe, ele aparecerá aqui com plataforma, versão e controles de acesso.",
"revoking": "Revogando…",
"registeredDevices": "Dispositivos registrados",
"activeDevices": "Dispositivos ativos",
"directoryRevision": "Revisão do diretório",
"savingRelaySettings": "Salvando…"
},
"coderouterAccounts": {
"shareWithTeam": "Compartilhar com a equipe",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "Отозвано",
"relaySettings": "Настройки ретрансляторов",
"relaySettingsDescription": "Выберите серверы ретрансляции для этой команды. Введите по одному URL в строке.",
"saveRelaySettings": "Сохранить настройки ретрансляторов"
"saveRelaySettings": "Сохранить настройки ретрансляторов",
"eyebrow": "облако / устройства",
"scopeActive": "Показаны данные этой команды",
"emptyTitle": "Подключённых устройств пока нет",
"emptyDescription": "После сопряжения устройства cmux с этой командой здесь появятся его платформа, версия и настройки доступа.",
"revoking": "Отзыв доступа…",
"registeredDevices": "Зарегистрированные устройства",
"activeDevices": "Активные устройства",
"directoryRevision": "Ревизия каталога",
"savingRelaySettings": "Сохранение…"
},
"coderouterAccounts": {
"shareWithTeam": "Поделиться с командой",
Expand Down
11 changes: 10 additions & 1 deletion web/messages/th.json
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,16 @@
"revoked": "เพิกถอนแล้ว",
"relaySettings": "การตั้งค่ารีเลย์",
"relaySettingsDescription": "เลือกเซิร์ฟเวอร์รีเลย์ที่ทีมนี้ใช้ ป้อน URL หนึ่งรายการต่อบรรทัด",
"saveRelaySettings": "บันทึกการตั้งค่ารีเลย์"
"saveRelaySettings": "บันทึกการตั้งค่ารีเลย์",
"eyebrow": "คลาวด์ / อุปกรณ์",
"scopeActive": "กำลังแสดงทีมนี้",
"emptyTitle": "ยังไม่มีอุปกรณ์ที่เชื่อมต่อ",
"emptyDescription": "เมื่ออุปกรณ์ cmux จับคู่กับทีมนี้แล้ว อุปกรณ์จะแสดงที่นี่พร้อมแพลตฟอร์ม เวอร์ชัน และการควบคุมการเข้าถึง",
"revoking": "กำลังเพิกถอน…",
"registeredDevices": "อุปกรณ์ที่ลงทะเบียน",
"activeDevices": "อุปกรณ์ที่ใช้งานอยู่",
"directoryRevision": "รุ่นแก้ไขของรายการ",
"savingRelaySettings": "กำลังบันทึก…"
},
"coderouterAccounts": {
"shareWithTeam": "แชร์กับทีม",
Expand Down
Loading
Loading