SectionMenu.svelte 1.9 KB

12345678910111213141516171819202122232425262728293031323334
  1. <script>
  2. import contractLight from '$lib/assets/icons/contract-light.svg';
  3. import contractDark from '$lib/assets/icons/contract-dark.svg';
  4. import issueLight from '$lib/assets/icons/issue-light.svg';
  5. import issueDark from '$lib/assets/icons/issue-dark.svg';
  6. import registerLight from '$lib/assets/icons/register-light.svg';
  7. import registerDark from '$lib/assets/icons/register-dark.svg';
  8. export let title;
  9. export let options = [];
  10. </script>
  11. <div class="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg p-6 mb-8">
  12. <div class="text-lg font-semibold text-gray-900 dark:text-gray-100 mb-4">{title}</div>
  13. <div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4">
  14. {#each options as opt}
  15. <button class="flex items-center p-4 bg-gray-100 dark:bg-gray-700 border border-gray-200 dark:border-gray-600 rounded hover:bg-gray-200 dark:hover:bg-gray-600 hover:border-blue-500 text-gray-800 dark:text-gray-100"
  16. on:click={opt.onClick}>
  17. {#if opt.icon === 'contract'}
  18. <img src={contractLight} alt="" aria-hidden="true" class="w-5 h-5 mr-3 inline-block dark:hidden" />
  19. <img src={contractDark} alt="" aria-hidden="true" class="w-5 h-5 mr-3 hidden dark:inline-block" />
  20. {:else if opt.icon === 'issue'}
  21. <img src={issueLight} alt="" aria-hidden="true" class="w-5 h-5 mr-3 inline-block dark:hidden" />
  22. <img src={issueDark} alt="" aria-hidden="true" class="w-5 h-5 mr-3 hidden dark:inline-block" />
  23. {:else if opt.icon === 'register'}
  24. <img src={registerLight} alt="" aria-hidden="true" class="w-5 h-5 mr-3 inline-block dark:hidden" />
  25. <img src={registerDark} alt="" aria-hidden="true" class="w-5 h-5 mr-3 hidden dark:inline-block" />
  26. {:else}
  27. <span class="mr-3">{opt.icon}</span>
  28. {/if}
  29. <span>{opt.label}</span>
  30. </button>
  31. {/each}
  32. </div>
  33. </div>