Skip to content

Examples — Vue 3

Practical examples for using the Nepali Date Picker in Vue 3 applications.

Basic Date Picker

vue
<script setup lang="ts">
import { ref } from 'vue'
import { NepaliDatePicker } from 'nepali-datepicker-vue'

const date = ref('')
</script>

<template>
  <div style="width: 250px">
    <NepaliDatePicker v-model="date" placeholder="Select a date" />
    <p v-if="date">You selected: {{ date }}</p>
  </div>
</template>

Date Range Restriction

vue
<script setup lang="ts">
import { ref } from 'vue'
import { NepaliDatePicker } from 'nepali-datepicker-vue'

const date = ref('')
</script>

<template>
  <NepaliDatePicker
    v-model="date"
    minDate="2082-01-01"
    maxDate="2082-02-32"
    placeholder="YYYY-MM-DD"
  />
</template>

Dynamic Min/Max Dates

vue
<script setup lang="ts">
import { ref } from 'vue'
import { NepaliDatePicker } from 'nepali-datepicker-vue'
import { NepaliDate } from 'nepali-date-library'

const date = ref('')
const today = new NepaliDate()
const minDate = today.addDays(-7).format('YYYY-MM-DD')
const maxDate = new NepaliDate().addDays(7).format('YYYY-MM-DD')
</script>

<template>
  <NepaliDatePicker v-model="date" :minDate="minDate" :maxDate="maxDate" />
</template>

Without Year and Month Selectors

vue
<NepaliDatePicker v-model="date" :year-select="false" :month-select="false" />

Read-Only (No Typing)

vue
<NepaliDatePicker v-model="date" :allow-typing="false" placeholder="Click to open" />

With Mini English Dates & Saturday Highlighting

vue
<NepaliDatePicker
  v-model="date"
  :mini-english-date="true"
  :highlight-saturday="true"
/>

Real-Time Input Updates

vue
<NepaliDatePicker v-model="date" :update-on-input-change="true" />

Custom Styled Input

vue
<NepaliDatePicker v-model="date" class="custom-wrapper" inputClass="custom-input" />
css
.custom-input {
  border: 2px solid #4A90E2 !important;
  border-radius: 8px !important;
  padding: 8px 12px !important;
}

Dark Theme Override

css
.dark .nepali-datepicker .calendar-input {
  background: #2c3e50;
  color: #ecf0f1;
  border: 1px solid #34495e;
}
.dark .nepali-datepicker .calendar {
  background: #2c3e50;
  color: #ecf0f1;
  border: 1px solid #34495e;
}
.dark .nepali-datepicker .calendar__selected {
  background-color: #3498db !important;
}
.dark .nepali-datepicker .calendar__toggle_button {
  background: #2c3e50;
}

Form Integration

vue
<script setup lang="ts">
import { ref, reactive } from 'vue'
import { NepaliDatePicker } from 'nepali-datepicker-vue'

const form = reactive({ name: '', birthDate: '' })
const errors = reactive({ name: '', birthDate: '' })

function submitForm() {
  errors.name = form.name ? '' : 'Name is required'
  errors.birthDate = form.birthDate ? '' : 'Birth date is required'
  if (form.name && form.birthDate) {
    alert('Submitted: ' + JSON.stringify(form))
  }
}
</script>

<template>
  <form @submit.prevent="submitForm" style="max-width: 350px">
    <div style="margin-bottom: 16px">
      <label>Name</label>
      <input v-model="form.name" />
      <span v-if="errors.name" style="color:red">{{ errors.name }}</span>
    </div>
    <div style="margin-bottom: 16px">
      <label>Date of Birth (BS)</label>
      <NepaliDatePicker v-model="form.birthDate" placeholder="YYYY-MM-DD" />
      <span v-if="errors.birthDate" style="color:red">{{ errors.birthDate }}</span>
    </div>
    <button type="submit">Submit</button>
  </form>
</template>

Linked Date Range (Two Pickers)

vue
<script setup lang="ts">
import { ref } from 'vue'
import { NepaliDatePicker } from 'nepali-datepicker-vue'

const startDate = ref('')
const endDate = ref('')
</script>

<template>
  <div style="display: flex; gap: 16px">
    <div>
      <label>Start Date</label>
      <NepaliDatePicker v-model="startDate" placeholder="Start" />
    </div>
    <div>
      <label>End Date</label>
      <NepaliDatePicker v-model="endDate" :minDate="startDate" placeholder="End" />
    </div>
  </div>
</template>

TIP

Binding endDate's minDate to startDate creates a linked range where end can never be before start.


Programmatic Focus

vue
<script setup lang="ts">
import { ref } from 'vue'
import { NepaliDatePicker } from 'nepali-datepicker-vue'

const date = ref('')
const openPicker = () => document.getElementById('my-picker')?.focus()
</script>

<template>
  <NepaliDatePicker v-model="date" id="my-picker" />
  <button @click="openPicker">Open Picker</button>
</template>

Disabled State

vue
<script setup lang="ts">
import { ref } from 'vue'
import { NepaliDatePicker } from 'nepali-datepicker-vue'

const date = ref('2081-05-15')
const isDisabled = ref(true)
</script>

<template>
  <NepaliDatePicker v-model="date" :disabled="isDisabled" />
  <button @click="isDisabled = !isDisabled">Toggle Disabled</button>
</template>

Released under the MIT License.