1.0.10 • Published 1 year ago

vue3-better-pick v1.0.10

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Vue3BetterPick (Tailwindcss)

StackBlitz Demo

Usage

<template>
  <div class="p-4 flex flex-col gap-8">
    <label>
      datetime
      <DateTimePicker
        v-model="date"
        type="datetime"
        format="dd.MM.yyyy HH:mm"
        @update:modelValue="console.log"
      />
    </label>
    <label>
      date
      <DateTimePicker
        v-model="date"
        type="date"
        format="dd.MM.yyyy"
        @update:modelValue="console.log"
      />
    </label>
    <label>
      time
      <DateTimePicker
        v-model="date"
        type="time"
        format=" HH:mm"
        @update:modelValue="console.log"
      />
    </label>

    <div class="text-lg">Selected date: {{ date }}</div>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const testDate = new Date();
testDate.setMonth(0);

const date = ref<Date | null>(new Date());
</script>

<style>
:root {
  --better-pick-primary: 117 143 237;
}
</style>

Props

proptypedefault
type"datetime" | "date" | "time""datetime"
placeholderstring"Datum auswählen"
invalidDateTextstring"Ungültiges Datum"
formatstring"dd.MM.yyyy HH:mm"
uiDatePickerUiStylingundefined

DatePickerUiStyling

You can style the DatePicker-Component using tailwind by passing the style-description-object to the component.

Whatever you pass in gets merged with the default.

Example:

<DateTimePicker
  :ui="{
    content: {
      picker: {
        date: {
          controls: {
            navigation: {
              button:
                'rounded-full hover:bg-red-500 p-1 aspect-square w-8 h-8 flex items-center justify-center',
            },
          },
        },
      },
    },
  }"

Shape of the description-type

type DatePickerUiStyling = {
  trigger: {
    wrapper: string;
    input: string;
  };
  content: {
    wrapper: string;
    picker: {
      wrapper: string;
      date: {
        wrapper: string;
        controls: {
          wrapper: string;
          monthYear: {
            wrapper: string;
            month: {
              button: string;
              content: {
                wrapper: string;
                button: {
                  base: string;
                  active: string;
                  current: string;
                };
              };
            };
            year: {
              button: string;
              content: {
                wrapper: string;
                button: {
                  base: string;
                  active: string;
                  current: string;
                };
              };
            };
          };
          navigation: {
            wrapper: string;
            button: string;
          };
        };
        daysGrid: {
          wrapper: string;
          weekDay: string;
          offset: string;
          day: {
            base: string;
            selected: string;
            today: string;
          };
        };
      };
      time: {
        wrapper: string;
        timeInfo: string;
        pickersWrapper: string;
      };
    };
  };
};

Default description values

const datePickerUiStyling: DatePickerUiStyling = {
  trigger: {
    wrapper:
      "border border-black rounded-md p-1 focus-within:border-[color:var(--better-pick-primary)]",
    input:
      "w-full focus:border-none focus:ring-0 focus:outline-none bg-transparent",
  },
  content: {
    wrapper: "p-1 bg-white shadow-md",
    picker: {
      wrapper: "flex gap-2",
      date: {
        wrapper: "flex flex-col",
        controls: {
          wrapper: "flex items-center justify-between",
          monthYear: {
            wrapper: "flex items-center",
            month: {
              button:
                "rounded-md hover:bg-[color:rgba(var(--better-pick-primary)/0.25)] p-1",
              content: {
                wrapper:
                  "p-1 bg-white shadow-md grid grid-cols-3 gap-2 overflow-auto h-64",
                button: {
                  base: "text-center rounded-md hover:bg-[color:rgba(var(--better-pick-primary)/0.25)] p-1",
                  active: "",
                  current: "",
                },
              },
            },
            year: {
              button:
                "rounded-md hover:bg-[color:rgba(var(--better-pick-primary)/0.25)] p-1",
              content: {
                wrapper:
                  "p-1 bg-white shadow-md grid grid-cols-4 gap-2 overflow-auto h-64",
                button: {
                  base: "text-center rounded-md hover:bg-[color:rgba(var(--better-pick-primary)/0.25)] p-1",
                  active: "",
                  current: "",
                },
              },
            },
          },
          navigation: {
            wrapper: "flex items-center",
            button:
              "rounded-full hover:bg-[color:rgba(var(--better-pick-primary)/0.25)] p-1 aspect-square w-6 h-6 flex items-center justify-center",
          },
        },
        daysGrid: {
          wrapper: "grid",
          weekDay: "text-center aspect-square p-1 font-semibold",
          offset: "text-center aspect-square p-1",
          day: {
            base: "text-center rounded-full border border-transparent aspect-square p-1 cursor-pointer hover:bg-[color:rgba(var(--better-pick-primary)/0.25)]",
            selected:
              "!bg-[color:rgba(var(--better-pick-primary)/0.75)] text-white",
            today: "border-gray-500",
          },
        },
      },
      time: {
        wrapper: "flex flex-col p-1",
        timeInfo: "text-center",
        pickersWrapper: "flex-1 flex gap-2 w-[150px] items-center",
      },
    },
  },
};

Todos

  • Dark Theme
  • More props, for example 'clearable'
  • Date Range
  • Multi-Dates
1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.10

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago