Index: app/Http/Controllers/GenericModelController.php
===================================================================
--- app/Http/Controllers/GenericModelController.php	(revision 047232ed8179bfed3c1ae2ed01c3fa82ef3f523e)
+++ app/Http/Controllers/GenericModelController.php	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -19,5 +19,4 @@
         $fillable = $modelInstance->getFillable();
 
-        // Eager load relationships for displaying data
         $relationships = $this->getRelationships($modelInstance);
         if (!empty($relationships)) {
Index: bun.lock
===================================================================
--- bun.lock	(revision 047232ed8179bfed3c1ae2ed01c3fa82ef3f523e)
+++ bun.lock	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -9,5 +9,5 @@
         "@tanstack/vue-table": "^8.21.3",
         "@types/lodash-es": "^4.17.12",
-        "@vueuse/core": "^13.6.0",
+        "@vueuse/core": "^13.9.0",
         "bunx": "^0.1.0",
         "class-variance-authority": "^0.7.1",
@@ -17,5 +17,5 @@
         "lodash-es": "^4.17.21",
         "lucide-vue-next": "^0.536.0",
-        "reka-ui": "^2.4.1",
+        "reka-ui": "^2.5.0",
         "shadcn-vue": "^2.2.0",
         "tailwind-merge": "^3.3.1",
@@ -426,9 +426,9 @@
     "@vuedx/template-ast-types": ["@vuedx/template-ast-types@0.7.1", "", { "dependencies": { "@vue/compiler-core": "^3.0.0" } }, "sha512-Mqugk/F0lFN2u9bhimH6G1kSu2hhLi2WoqgCVxrMvgxm2kDc30DtdvVGRq+UgEmKVP61OudcMtZqkUoGQeFBUQ=="],
 
-    "@vueuse/core": ["@vueuse/core@13.6.0", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "13.6.0", "@vueuse/shared": "13.6.0" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-DJbD5fV86muVmBgS9QQPddVX7d9hWYswzlf4bIyUD2dj8GC46R1uNClZhVAmsdVts4xb2jwp1PbpuiA50Qee1A=="],
-
-    "@vueuse/metadata": ["@vueuse/metadata@13.6.0", "", {}, "sha512-rnIH7JvU7NjrpexTsl2Iwv0V0yAx9cw7+clymjKuLSXG0QMcLD0LDgdNmXic+qL0SGvgSVPEpM9IDO/wqo1vkQ=="],
-
-    "@vueuse/shared": ["@vueuse/shared@13.6.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-pDykCSoS2T3fsQrYqf9SyF0QXWHmcGPQ+qiOVjlYSzlWd9dgppB2bFSM1GgKKkt7uzn0BBMV3IbJsUfHG2+BCg=="],
+    "@vueuse/core": ["@vueuse/core@13.9.0", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "13.9.0", "@vueuse/shared": "13.9.0" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA=="],
+
+    "@vueuse/metadata": ["@vueuse/metadata@13.9.0", "", {}, "sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg=="],
+
+    "@vueuse/shared": ["@vueuse/shared@13.9.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g=="],
 
     "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="],
@@ -1020,5 +1020,5 @@
     "recast-x": ["recast-x@1.0.5", "", { "dependencies": { "ast-types": "npm:ast-types-x@1.18.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-CkfWKhQiYsMQYaWUkHdERXUxT2jJLBoa5y7zFv3dUAE7Ly5oU/0hsqrENyEfrCL03pDsQYbnoz17Cbagx/c2OA=="],
 
-    "reka-ui": ["reka-ui@2.4.1", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^12.5.0", "@vueuse/shared": "^12.5.0", "aria-hidden": "^1.2.4", "defu": "^6.1.4", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.2.0" } }, "sha512-NB7DrCsODN8MH02BWtgiExygfFcuuZ5/PTn6fMgjppmFHqePvNhmSn1LEuF35nel6PFbA4v+gdj0IoGN1yZ+vw=="],
+    "reka-ui": ["reka-ui@2.5.0", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^12.5.0", "@vueuse/shared": "^12.5.0", "aria-hidden": "^1.2.4", "defu": "^6.1.4", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.2.0" } }, "sha512-81aMAmJeVCy2k0E6x7n1kypDY6aM1ldLis5+zcdV1/JtoAlSDck5OBsyLRJU9CfgbrQp1ImnRnBSmC4fZ2fkZQ=="],
 
     "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
Index: package.json
===================================================================
--- package.json	(revision 047232ed8179bfed3c1ae2ed01c3fa82ef3f523e)
+++ package.json	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -42,5 +42,5 @@
         "@tanstack/vue-table": "^8.21.3",
         "@types/lodash-es": "^4.17.12",
-        "@vueuse/core": "^13.6.0",
+        "@vueuse/core": "^13.9.0",
         "bunx": "^0.1.0",
         "class-variance-authority": "^0.7.1",
@@ -50,5 +50,5 @@
         "lodash-es": "^4.17.21",
         "lucide-vue-next": "^0.536.0",
-        "reka-ui": "^2.4.1",
+        "reka-ui": "^2.5.0",
         "shadcn-vue": "^2.2.0",
         "tailwind-merge": "^3.3.1",
Index: resources/js/Pages/GenericModelPage.vue
===================================================================
--- resources/js/Pages/GenericModelPage.vue	(revision 047232ed8179bfed3c1ae2ed01c3fa82ef3f523e)
+++ resources/js/Pages/GenericModelPage.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -85,5 +85,8 @@
 const fields = computed(() => {
     if (!props.items.data.length) return [];
-    return Object.keys(props.items.data[0]);
+    const allFields = Object.keys(props.items.data[0]);
+    console.log('🔍 All fields from data:', allFields);
+    console.log('🔍 First item data structure:', props.items.data[0]);
+    return allFields;
 });
 
@@ -206,4 +209,12 @@
 }
 
+// const toggleRowExpansion = (itemId: string) => {
+//     if (expandedRows.value.has(itemId)) {
+//         expandedRows.value.delete(itemId);
+//     } else {
+//         expandedRows.value.add(itemId);
+//     }
+// };
+
 const toggleRowExpansion = (itemId: string) => {
     if (expandedRows.value.has(itemId)) {
@@ -211,4 +222,16 @@
     } else {
         expandedRows.value.add(itemId);
+
+        // Debug the item being expanded
+        const item = props.items.data.find(i => i.id === itemId);
+        console.log('🔍 Expanding item:', item);
+        console.log('🔍 Item keys:', Object.keys(item));
+
+        // Check specifically for producer-related fields
+        Object.keys(item).forEach(key => {
+            if (key.toLowerCase().includes('producer')) {
+                console.log(`🔍 Producer-related field "${key}":`, typeof item[key], item[key]);
+            }
+        });
     }
 };
@@ -300,8 +323,43 @@
 
 // Use this computed property to define which fields to show in the detailed view and forms
+// const detailFields = computed(() => {
+//     return fields.value.filter(
+//         (field) => !['id', 'created_at', 'updated_at', 'buyer', 'transport', 'receiver'].includes(field),
+//     );
+// });
+
+// const detailFields = computed(() => {
+//     const filtered = fields.value.filter(
+//         (field) => !['id', 'created_at', 'updated_at', 'buyer', 'transport', 'receiver'].includes(field),
+//     );
+//     console.log('🔍 Detail fields after filtering:', filtered);
+//
+//     // Let's also see what each field contains
+//     if (props.items.data.length > 0) {
+//         filtered.forEach(field => {
+//             const value = props.items.data[0][field];
+//             console.log(`🔍 Field "${field}":`, typeof value, value);
+//         });
+//     }
+//
+//     return filtered;
+// });
+
 const detailFields = computed(() => {
-    return fields.value.filter(
-        (field) => !['id', 'created_at', 'updated_at', 'buyer', 'transport', 'receiver'].includes(field),
-    );
+    return fields.value.filter(field => {
+        // Exclude basic fields we don't want to show
+        if (['id', 'created_at', 'updated_at'].includes(field)) return false;
+
+        // Exclude relationship objects (keep only foreign keys ending with _id)
+        // This will exclude 'producer' object but keep 'producer_id'
+        if (props.items.data.length > 0) {
+            const value = props.items.data[0][field];
+            if (typeof value === 'object' && value !== null && !field.endsWith('_id')) {
+                return false;
+            }
+        }
+
+        return true;
+    });
 });
 
Index: resources/js/components/ui/calendar/Calendar.vue
===================================================================
--- resources/js/components/ui/calendar/Calendar.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/Calendar.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,61 @@
+<script lang="ts" setup>
+import type { CalendarRootEmits, CalendarRootProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { CalendarRoot, useForwardPropsEmits } from "reka-ui"
+import { cn } from "@/lib/utils"
+import { CalendarCell, CalendarCellTrigger, CalendarGrid, CalendarGridBody, CalendarGridHead, CalendarGridRow, CalendarHeadCell, CalendarHeader, CalendarHeading, CalendarNextButton, CalendarPrevButton } from "."
+
+const props = defineProps<CalendarRootProps & { class?: HTMLAttributes["class"] }>()
+const emits = defineEmits<CalendarRootEmits>()
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwarded = useForwardPropsEmits(delegatedProps, emits)
+</script>
+
+<template>
+  <CalendarRoot
+    v-slot="{ grid, weekDays }"
+    data-slot="calendar"
+    :class="cn('p-3', props.class)"
+    v-bind="forwarded"
+  >
+    <CalendarHeader>
+      <CalendarHeading />
+
+      <div class="flex items-center gap-1">
+        <CalendarPrevButton />
+        <CalendarNextButton />
+      </div>
+    </CalendarHeader>
+
+    <div class="flex flex-col gap-y-4 mt-4 sm:flex-row sm:gap-x-4 sm:gap-y-0">
+      <CalendarGrid v-for="month in grid" :key="month.value.toString()">
+        <CalendarGridHead>
+          <CalendarGridRow>
+            <CalendarHeadCell
+              v-for="day in weekDays" :key="day"
+            >
+              {{ day }}
+            </CalendarHeadCell>
+          </CalendarGridRow>
+        </CalendarGridHead>
+        <CalendarGridBody>
+          <CalendarGridRow v-for="(weekDates, index) in month.rows" :key="`weekDate-${index}`" class="mt-2 w-full">
+            <CalendarCell
+              v-for="weekDate in weekDates"
+              :key="weekDate.toString()"
+              :date="weekDate"
+            >
+              <CalendarCellTrigger
+                :day="weekDate"
+                :month="month.value"
+              />
+            </CalendarCell>
+          </CalendarGridRow>
+        </CalendarGridBody>
+      </CalendarGrid>
+    </div>
+  </CalendarRoot>
+</template>
Index: resources/js/components/ui/calendar/CalendarCell.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarCell.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarCell.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,23 @@
+<script lang="ts" setup>
+import type { CalendarCellProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { CalendarCell, useForwardProps } from "reka-ui"
+import { cn } from "@/lib/utils"
+
+const props = defineProps<CalendarCellProps & { class?: HTMLAttributes["class"] }>()
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwardedProps = useForwardProps(delegatedProps)
+</script>
+
+<template>
+  <CalendarCell
+    data-slot="calendar-cell"
+    :class="cn('relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([data-selected])]:rounded-md [&:has([data-selected])]:bg-accent', props.class)"
+    v-bind="forwardedProps"
+  >
+    <slot />
+  </CalendarCell>
+</template>
Index: resources/js/components/ui/calendar/CalendarCellTrigger.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarCellTrigger.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarCellTrigger.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,39 @@
+<script lang="ts" setup>
+import type { CalendarCellTriggerProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { CalendarCellTrigger, useForwardProps } from "reka-ui"
+import { cn } from "@/lib/utils"
+import { buttonVariants } from '@/components/ui/button'
+
+const props = withDefaults(defineProps<CalendarCellTriggerProps & { class?: HTMLAttributes["class"] }>(), {
+  as: "button",
+})
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwardedProps = useForwardProps(delegatedProps)
+</script>
+
+<template>
+  <CalendarCellTrigger
+    data-slot="calendar-cell-trigger"
+    :class="cn(
+      buttonVariants({ variant: 'ghost' }),
+      'size-8 p-0 font-normal aria-selected:opacity-100 cursor-default',
+      '[&[data-today]:not([data-selected])]:bg-accent [&[data-today]:not([data-selected])]:text-accent-foreground',
+      // Selected
+      'data-[selected]:bg-primary data-[selected]:text-primary-foreground data-[selected]:opacity-100 data-[selected]:hover:bg-primary data-[selected]:hover:text-primary-foreground data-[selected]:focus:bg-primary data-[selected]:focus:text-primary-foreground',
+      // Disabled
+      'data-[disabled]:text-muted-foreground data-[disabled]:opacity-50',
+      // Unavailable
+      'data-[unavailable]:text-destructive-foreground data-[unavailable]:line-through',
+      // Outside months
+      'data-[outside-view]:text-muted-foreground',
+      props.class,
+    )"
+    v-bind="forwardedProps"
+  >
+    <slot />
+  </CalendarCellTrigger>
+</template>
Index: resources/js/components/ui/calendar/CalendarGrid.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarGrid.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarGrid.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,23 @@
+<script lang="ts" setup>
+import type { CalendarGridProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { CalendarGrid, useForwardProps } from "reka-ui"
+import { cn } from "@/lib/utils"
+
+const props = defineProps<CalendarGridProps & { class?: HTMLAttributes["class"] }>()
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwardedProps = useForwardProps(delegatedProps)
+</script>
+
+<template>
+  <CalendarGrid
+    data-slot="calendar-grid"
+    :class="cn('w-full border-collapse space-x-1', props.class)"
+    v-bind="forwardedProps"
+  >
+    <slot />
+  </CalendarGrid>
+</template>
Index: resources/js/components/ui/calendar/CalendarGridBody.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarGridBody.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarGridBody.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,15 @@
+<script lang="ts" setup>
+import type { CalendarGridBodyProps } from "reka-ui"
+import { CalendarGridBody } from "reka-ui"
+
+const props = defineProps<CalendarGridBodyProps>()
+</script>
+
+<template>
+  <CalendarGridBody
+    data-slot="calendar-grid-body"
+    v-bind="props"
+  >
+    <slot />
+  </CalendarGridBody>
+</template>
Index: resources/js/components/ui/calendar/CalendarGridHead.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarGridHead.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarGridHead.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,16 @@
+<script lang="ts" setup>
+import type { CalendarGridHeadProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { CalendarGridHead } from "reka-ui"
+
+const props = defineProps<CalendarGridHeadProps & { class?: HTMLAttributes["class"] }>()
+</script>
+
+<template>
+  <CalendarGridHead
+    data-slot="calendar-grid-head"
+    v-bind="props"
+  >
+    <slot />
+  </CalendarGridHead>
+</template>
Index: resources/js/components/ui/calendar/CalendarGridRow.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarGridRow.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarGridRow.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,22 @@
+<script lang="ts" setup>
+import type { CalendarGridRowProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { CalendarGridRow, useForwardProps } from "reka-ui"
+import { cn } from "@/lib/utils"
+
+const props = defineProps<CalendarGridRowProps & { class?: HTMLAttributes["class"] }>()
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwardedProps = useForwardProps(delegatedProps)
+</script>
+
+<template>
+  <CalendarGridRow
+    data-slot="calendar-grid-row"
+    :class="cn('flex', props.class)" v-bind="forwardedProps"
+  >
+    <slot />
+  </CalendarGridRow>
+</template>
Index: resources/js/components/ui/calendar/CalendarHeadCell.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarHeadCell.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarHeadCell.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,23 @@
+<script lang="ts" setup>
+import type { CalendarHeadCellProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { CalendarHeadCell, useForwardProps } from "reka-ui"
+import { cn } from "@/lib/utils"
+
+const props = defineProps<CalendarHeadCellProps & { class?: HTMLAttributes["class"] }>()
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwardedProps = useForwardProps(delegatedProps)
+</script>
+
+<template>
+  <CalendarHeadCell
+    data-slot="calendar-head-cell"
+    :class="cn('text-muted-foreground rounded-md w-8 font-normal text-[0.8rem]', props.class)"
+    v-bind="forwardedProps"
+  >
+    <slot />
+  </CalendarHeadCell>
+</template>
Index: resources/js/components/ui/calendar/CalendarHeader.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarHeader.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarHeader.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,23 @@
+<script lang="ts" setup>
+import type { CalendarHeaderProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { CalendarHeader, useForwardProps } from "reka-ui"
+import { cn } from "@/lib/utils"
+
+const props = defineProps<CalendarHeaderProps & { class?: HTMLAttributes["class"] }>()
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwardedProps = useForwardProps(delegatedProps)
+</script>
+
+<template>
+  <CalendarHeader
+    data-slot="calendar-header"
+    :class="cn('flex justify-center pt-1 relative items-center w-full', props.class)"
+    v-bind="forwardedProps"
+  >
+    <slot />
+  </CalendarHeader>
+</template>
Index: resources/js/components/ui/calendar/CalendarHeading.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarHeading.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarHeading.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,30 @@
+<script lang="ts" setup>
+import type { CalendarHeadingProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { CalendarHeading, useForwardProps } from "reka-ui"
+import { cn } from "@/lib/utils"
+
+const props = defineProps<CalendarHeadingProps & { class?: HTMLAttributes["class"] }>()
+
+defineSlots<{
+  default: (props: { headingValue: string }) => any
+}>()
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwardedProps = useForwardProps(delegatedProps)
+</script>
+
+<template>
+  <CalendarHeading
+    v-slot="{ headingValue }"
+    data-slot="calendar-heading"
+    :class="cn('text-sm font-medium', props.class)"
+    v-bind="forwardedProps"
+  >
+    <slot :heading-value>
+      {{ headingValue }}
+    </slot>
+  </CalendarHeading>
+</template>
Index: resources/js/components/ui/calendar/CalendarNextButton.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarNextButton.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarNextButton.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,32 @@
+<script lang="ts" setup>
+import type { CalendarNextProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { ChevronRight } from "lucide-vue-next"
+import { CalendarNext, useForwardProps } from "reka-ui"
+import { cn } from "@/lib/utils"
+import { buttonVariants } from '@/components/ui/button'
+
+const props = defineProps<CalendarNextProps & { class?: HTMLAttributes["class"] }>()
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwardedProps = useForwardProps(delegatedProps)
+</script>
+
+<template>
+  <CalendarNext
+    data-slot="calendar-next-button"
+    :class="cn(
+      buttonVariants({ variant: 'outline' }),
+      'absolute right-1',
+      'size-7 bg-transparent p-0 opacity-50 hover:opacity-100',
+      props.class,
+    )"
+    v-bind="forwardedProps"
+  >
+    <slot>
+      <ChevronRight class="size-4" />
+    </slot>
+  </CalendarNext>
+</template>
Index: resources/js/components/ui/calendar/CalendarPrevButton.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarPrevButton.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/CalendarPrevButton.vue	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,32 @@
+<script lang="ts" setup>
+import type { CalendarPrevProps } from "reka-ui"
+import type { HTMLAttributes } from "vue"
+import { reactiveOmit } from "@vueuse/core"
+import { ChevronLeft } from "lucide-vue-next"
+import { CalendarPrev, useForwardProps } from "reka-ui"
+import { cn } from "@/lib/utils"
+import { buttonVariants } from '@/components/ui/button'
+
+const props = defineProps<CalendarPrevProps & { class?: HTMLAttributes["class"] }>()
+
+const delegatedProps = reactiveOmit(props, "class")
+
+const forwardedProps = useForwardProps(delegatedProps)
+</script>
+
+<template>
+  <CalendarPrev
+    data-slot="calendar-prev-button"
+    :class="cn(
+      buttonVariants({ variant: 'outline' }),
+      'absolute left-1',
+      'size-7 bg-transparent p-0 opacity-50 hover:opacity-100',
+      props.class,
+    )"
+    v-bind="forwardedProps"
+  >
+    <slot>
+      <ChevronLeft class="size-4" />
+    </slot>
+  </CalendarPrev>
+</template>
Index: resources/js/components/ui/calendar/index.ts
===================================================================
--- resources/js/components/ui/calendar/index.ts	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
+++ resources/js/components/ui/calendar/index.ts	(revision 3989749f9bf29b73946732a608aec8454e3608f8)
@@ -0,0 +1,12 @@
+export { default as Calendar } from "./Calendar.vue"
+export { default as CalendarCell } from "./CalendarCell.vue"
+export { default as CalendarCellTrigger } from "./CalendarCellTrigger.vue"
+export { default as CalendarGrid } from "./CalendarGrid.vue"
+export { default as CalendarGridBody } from "./CalendarGridBody.vue"
+export { default as CalendarGridHead } from "./CalendarGridHead.vue"
+export { default as CalendarGridRow } from "./CalendarGridRow.vue"
+export { default as CalendarHeadCell } from "./CalendarHeadCell.vue"
+export { default as CalendarHeader } from "./CalendarHeader.vue"
+export { default as CalendarHeading } from "./CalendarHeading.vue"
+export { default as CalendarNextButton } from "./CalendarNextButton.vue"
+export { default as CalendarPrevButton } from "./CalendarPrevButton.vue"
