MarkdownEditor.razor 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <div class="border border-zinc-800 rounded p-4 bg-zinc-900">
  2. @if (ShowActionButtons)
  3. {
  4. <div class="flex justify-end gap-3 mb-2 text-xs">
  5. <button class="text-emerald-400 hover:text-emerald-300 transition"
  6. @onclick="HandleSave">
  7. Save
  8. </button>
  9. <button class="text-zinc-500 hover:text-zinc-300 transition"
  10. @onclick="HandleCancel">
  11. Cancel
  12. </button>
  13. </div>
  14. }
  15. <textarea
  16. class="w-full h-64 bg-zinc-950 text-zinc-200 border border-zinc-700 rounded p-3 text-sm font-mono focus:outline-none focus:ring-2 focus:ring-emerald-500"
  17. value="@Value"
  18. @oninput="HandleInput">
  19. </textarea>
  20. </div>
  21. @code {
  22. [Parameter] public string? Value { get; set; }
  23. [Parameter] public EventCallback<string?> ValueChanged { get; set; }
  24. [Parameter] public bool ShowActionButtons { get; set; } = true;
  25. [Parameter] public EventCallback OnSave { get; set; }
  26. [Parameter] public EventCallback OnCancel { get; set; }
  27. async Task HandleInput(ChangeEventArgs e)
  28. {
  29. Value = e.Value?.ToString();
  30. await ValueChanged.InvokeAsync(Value);
  31. }
  32. async Task HandleSave()
  33. {
  34. if (OnSave.HasDelegate)
  35. await OnSave.InvokeAsync();
  36. }
  37. async Task HandleCancel()
  38. {
  39. if (OnCancel.HasDelegate)
  40. await OnCancel.InvokeAsync();
  41. }
  42. }