Grid.svelte 805 B

1234567891011121314151617181920212223242526272829303132
  1. <script lang="ts">
  2. import type { Snippet } from "svelte";
  3. import type { BaseComponentProps } from "@json-render/svelte";
  4. import type { ShadcnProps } from "./catalog.js";
  5. interface Props extends BaseComponentProps<ShadcnProps<"Grid">> {
  6. children?: Snippet;
  7. }
  8. let { props, children }: Props = $props();
  9. const colsMap: Record<number, string> = {
  10. 1: "grid-cols-1",
  11. 2: "grid-cols-2",
  12. 3: "grid-cols-3",
  13. 4: "grid-cols-4",
  14. 5: "grid-cols-5",
  15. 6: "grid-cols-6",
  16. };
  17. const gapMap: Record<string, string> = {
  18. sm: "gap-2",
  19. md: "gap-3",
  20. lg: "gap-4",
  21. };
  22. const n = $derived(Math.max(1, Math.min(6, props.columns ?? 1)));
  23. </script>
  24. <div class={`grid ${colsMap[n] ?? "grid-cols-1"} ${gapMap[props.gap ?? "md"] ?? "gap-3"}`}>
  25. {@render children?.()}
  26. </div>