()
| 276 | } |
| 277 | |
| 278 | func (m keysTabModel) renderContent() string { |
| 279 | var sb strings.Builder |
| 280 | |
| 281 | sb.WriteString(titleStyle.Render(T("keys_title"))) |
| 282 | sb.WriteString("\n") |
| 283 | sb.WriteString(helpStyle.Render(T("keys_help"))) |
| 284 | sb.WriteString("\n") |
| 285 | sb.WriteString(strings.Repeat("─", m.width)) |
| 286 | sb.WriteString("\n") |
| 287 | |
| 288 | if m.err != nil { |
| 289 | sb.WriteString(errorStyle.Render(T("error_prefix") + m.err.Error())) |
| 290 | sb.WriteString("\n") |
| 291 | return sb.String() |
| 292 | } |
| 293 | |
| 294 | // ━━━ Access API Keys (interactive) ━━━ |
| 295 | sb.WriteString(tableHeaderStyle.Render(fmt.Sprintf(" %s (%d)", T("access_keys"), len(m.keys)))) |
| 296 | sb.WriteString("\n") |
| 297 | |
| 298 | if len(m.keys) == 0 { |
| 299 | sb.WriteString(subtitleStyle.Render(T("no_keys"))) |
| 300 | sb.WriteString("\n") |
| 301 | } |
| 302 | |
| 303 | for i, key := range m.keys { |
| 304 | cursor := " " |
| 305 | rowStyle := lipgloss.NewStyle() |
| 306 | if i == m.cursor { |
| 307 | cursor = "▸ " |
| 308 | rowStyle = lipgloss.NewStyle().Bold(true) |
| 309 | } |
| 310 | |
| 311 | row := fmt.Sprintf("%s%d. %s", cursor, i+1, maskKey(key)) |
| 312 | sb.WriteString(rowStyle.Render(row)) |
| 313 | sb.WriteString("\n") |
| 314 | |
| 315 | // Delete confirmation |
| 316 | if m.confirm == i { |
| 317 | sb.WriteString(warningStyle.Render(fmt.Sprintf(" "+T("confirm_delete_key"), maskKey(key)))) |
| 318 | sb.WriteString("\n") |
| 319 | } |
| 320 | |
| 321 | // Edit input |
| 322 | if m.editing && m.editIdx == i { |
| 323 | sb.WriteString(m.editInput.View()) |
| 324 | sb.WriteString("\n") |
| 325 | sb.WriteString(helpStyle.Render(T("enter_save_esc"))) |
| 326 | sb.WriteString("\n") |
| 327 | } |
| 328 | } |
| 329 | |
| 330 | // Add input |
| 331 | if m.adding { |
| 332 | sb.WriteString("\n") |
| 333 | sb.WriteString(m.editInput.View()) |
| 334 | sb.WriteString("\n") |
| 335 | sb.WriteString(helpStyle.Render(T("enter_add"))) |
no test coverage detected