Skip to content

Commit 3d584d3

Browse files
committed
feat: add monthClor, monthBtnSelected, monthBtn to Datepicker
1 parent 15d1821 commit 3d584d3

File tree

4 files changed

+11
-6
lines changed

4 files changed

+11
-6
lines changed

src/lib/datepicker/Datepicker.svelte

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
<script lang="ts">
22
import { onMount } from "svelte";
3+
import { twMerge } from "tailwind-merge";
34
import clsx from "clsx";
45
import { fade } from "svelte/transition";
56
import { Button, ToolbarButton, type DatepickerProps, cn } from "$lib";
67
import { datepicker } from "./theme";
78
8-
let { value = $bindable(), defaultDate = null, range = false, rangeFrom = $bindable(), rangeTo = $bindable(), locale = "default", firstDayOfWeek = 0, dateFormat, placeholder = "Select date", disabled = false, required = false, inputClass = "", color = "primary", inline = false, autohide = true, showActionButtons = false, title = "", onselect, onclear, onapply, btnClass, inputmode = "none", classes, class: className }: DatepickerProps = $props();
9+
let { value = $bindable(), defaultDate = null, range = false, rangeFrom = $bindable(), rangeTo = $bindable(), locale = "default", firstDayOfWeek = 0, dateFormat, placeholder = "Select date", disabled = false, required = false, inputClass = "", color = "primary", inline = false, autohide = true, showActionButtons = false, title = "", onselect, onclear, onapply, btnClass, inputmode = "none", classes, monthColor="alternative", monthBtnSelected ='bg-primary-500 text-white', monthBtn='text-gray-700 dark:text-gray-300', class: className }: DatepickerProps = $props();
910
1011
const dateFormatDefault = { year: "numeric", month: "long", day: "numeric" };
1112
// const dateFormatOptions = $derived(dateFormat ?? dateFormatDefault);
@@ -193,7 +194,7 @@
193194
if (!inline) isOpen = false;
194195
}
195196
196-
let { base, input, button, titleVariant, actionButtons, columnHeader, polite, grid, nav, dayButton } = datepicker();
197+
let { base, input, button, titleVariant, actionButtons, columnHeader, polite, grid, nav, dayButton, monthButton } = datepicker();
197198
</script>
198199

199200
{#snippet navButton(forward: boolean)}
@@ -241,7 +242,7 @@
241242
</div>
242243
<div class="grid grid-cols-4 gap-2 p-4">
243244
{#each monthNames as month, index}
244-
<Button type="button" class="rounded-lg px-3 py-2 text-sm hover:bg-gray-100 focus:ring-2 focus:ring-blue-500 dark:hover:bg-gray-700 {currentMonth.getMonth() === index ? 'bg-blue-500 text-white' : 'text-gray-700 dark:text-gray-300'}" onclick={(event: MouseEvent) => selectMonth(index, event)}>
245+
<Button type="button" color={monthColor} class={twMerge(monthButton(), currentMonth.getMonth() === index ? clsx(monthBtnSelected) : clsx(monthBtn), clsx(classes?.monthButton))} onclick={(event: MouseEvent) => selectMonth(index, event)}>
245246
{month}
246247
</Button>
247248
{/each}

src/lib/datepicker/theme.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ export const datepicker = tv({
1818
columnHeader: "text-center text-sm font-medium text-gray-500 dark:text-gray-400",
1919
grid: "grid grid-cols-7 gap-1 w-64",
2020
nav: "mb-4 flex items-center justify-between",
21-
dayButton: "h-8 w-full block flex-1 leading-9 border-0 rounded-lg cursor-pointer text-center font-semibold text-sm day p-0"
21+
dayButton: "h-8 w-full block flex-1 leading-9 border-0 rounded-lg cursor-pointer text-center font-semibold text-sm day p-0",
22+
monthButton: "rounded-lg px-3 py-2 text-sm hover:bg-gray-100 focus:ring-2 focus:ring-blue-500 dark:hover:bg-gray-700"
2223
},
2324
variants: {
2425
color: {

src/lib/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,9 @@ export interface DatepickerProps extends DatepickerVariants, Omit<HTMLAttributes
504504
onapply?: (x: DateOrRange) => void;
505505
btnClass?: ClassValue;
506506
inputmode?: HTMLInputAttributes["inputmode"];
507+
monthColor?: ButtonProps["color"];
508+
monthBtnSelected?: ClassValue;
509+
monthBtn?: ClassValue;
507510
}
508511

509512
// device-mockups

src/routes/docs/components/datepicker.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ Use the `inline` prop to display the calendar without a popup.
8484
Select one of the following colors for the `color` prop:
8585
`primary`(default), `blue`, `red`, `green`, `yellow`, `purple`, `dark`, `light`, `alternative`, `secondary`, `gray`, `orange`, `amber`, `lime`, `emerald`, `teal`, `cyan`, `sky`, `indigo`, `violet`, `fuchsia`, `pink`, `rose`.
8686

87-
The `classes` prop has the following `class` for disposal: `base`, `input`, `titleVariant`, `polite`, `button`,`actionButtons`, `columnHeader`, `grid`, `nav`, `dayButton`.
87+
The `classes` prop has the following `class` for disposal: `base`, `input`, `titleVariant`, `polite`, `button`,`actionButtons`, `columnHeader`, `grid`, `nav`, `dayButton`, `monthButton`.
8888

8989
```svelte example class="h-[430px]"
9090
<script lang="ts">
9191
import { Datepicker } from "flowbite-svelte";
9292
</script>
9393
9494
<div class="mb-64 md:w-1/2">
95-
<Datepicker color="blue" classes={{ polite: "hover:text-blue-700!", dayButton: "hover:text-blue-400", titleVariant: "text-blue-800" }} title="Select your preferred date" />
95+
<Datepicker color="blue" classes={{ polite: "hover:text-blue-700!", dayButton: "hover:text-blue-400", titleVariant: "text-blue-800", monthButton:"text-blue-700" }} title="Select your preferred date" monthBtnSelected="bg-blue-200" />
9696
</div>
9797
```
9898

0 commit comments

Comments
 (0)