スポンサー
Support Framework7

カレンダー / デートピッカー

    Calendarは、タッチ操作に最適化されたコンポーネントで、日付を簡単に扱うことができます。

    カレンダーは、インラインコンポーネントとしても、オーバーレイとしても使用できます。オーバーレイのCalendarは、タブレット(iPad)では自動的にPopoverに変換されます。

    カレンダーアプリのメソッド

    ここでは、Calendarに関連するAppメソッドを紹介します。

    app.calendar.create(parameters)- Calendarのインスタンスを作成する

    • parameters - object. カレンダーのパラメータを持つオブジェクト

    作成されたCalendarのインスタンスを返すメソッド

    app.calendar.destroy(el)- Calendarのインスタンスを破棄する

    • el - HTMLElementまたはstring(CSSセレクタを使用)またはobject。破棄するカレンダー要素またはカレンダーインスタンスです。

    app.calendar.get(el)- HTML要素でカレンダーのインスタンスを取得

    • el - HTMLElement または string (CSSセレクタを使用)。Calendarの要素です。

    メソッドは、Calendarのインスタンスを返します。

    app.calendar.close(el)- カレンダーを閉じる

    • el - HTMLElement または string (with CSS Selector). Calendarの要素を閉じます。

    メソッドはCalendarのインスタンスを返す

    例:

    var calendar = app.calendar.create({
        inputEl: '#calendar-input'
    });

    カレンダーのパラメータ

    利用可能なCalendarのパラメータの一覧を見てみましょう。

    ParameterTypeDefaultDescription
    localestring

    Calendarのロケール。Intl.DateTimeFormatで受け入れられる正しいロケールでなければなりません。指定されていない場合(デフォルト)、ブラウザのロケールを使用します。

    例えば、en-US, ru, en, en-US-u-ca-buddhist などです。

    valuearray最初に選択された日付を表す配列です。配列の各項目は、選択された日付を表します。
    disabledDate Range無効な日付を追加します。パラメータには、日付の範囲と呼ばれるものを指定します(詳細は以下を参照)。
    eventsDate Range

    イベントのある日付。イベントのある日付は、カレンダーの日に追加の "ドット "でマークされます。パラメータには日付範囲というものがあります(詳細は後述)。

    一日にいくつかの異なるイベントがあることを示したい場合は、複数の異なる色のドットで示すことができます。この場合、日付範囲を配列として渡す必要があります。各オブジェクトは datecolor プロパティを持ちます。

    [
      {
        date: new Date(2018, 4, 11),
        color: '#2196f3',
      },
      // 同じ日だけど色が違う場合、この日にもう一つドットが追加されます。
      {
        date: new Date(2018, 4, 11),
        color: '#4caf50',
      },
    ]
    rangesClassesarrayカスタムCSSクラスを追加してスタイリングを行いたい日付範囲。受け入れられるフォーマットは以下の通りです。
    formatValuefunction (values)入力値をフォーマットするための関数で、新しい/フォーマットされた文字列値を返す必要があります。valuesは配列で、各項目が選択された日付を表します。カスタムフォーマットを指定するために、dateFormatパラメータの代わりに使用することができます。
    monthNamesarrayauto完全な月名を含む配列です。autoであれば、指定したロケール`(またはブラウザのロケール)に基づいて月名を表示します。
    monthNamesShortarrayauto短い月名を表す配列。autoであれば、指定されたロケール`(またはブラウザのロケール)に基づいて月名を表示します。
    dayNamesarrayauto曜日の名前を表す配列。 autoであれば、指定したlocale`(またはブラウザのロケール)に基づいて、曜日名を表示します。
    dayNamesShortarrayauto曜日の短い名前の配列。 autoであれば、指定したlocale`(またはブラウザのロケール)に基づいて曜日名を表示します。
    firstDaynumber1週の最初の日。デフォルトでは 1 - 月曜日
    weekendDaysarray[0, 6]週末のインデックス番号を表す配列。デフォルトでは、土曜日と日曜日です。
    dateFormatstring
    object
    undefined

    未定義の場合は、locale(または、ブラウザのロケール)に基づいたフォーマットを使用します。

    Intl.DateTimeFormat.optionsを受け入れることができます。

    例えば、{ month: 'long', day: 'numeric' }.

    また、文字列に特殊なトークンを入れて渡すこともでき、そのような表現も可能です。

    • yyyy - 4桁の年
    • yyyy - 2桁の年号
    • mm - 2桁の月番号、01から12まで
    • m - 1から12までの月番号
    • MM - 完全な月名
    • M - 短い月名
    • DD - 2桁の曜日番号、01から31まで
    • d - 曜日番号、1から31まで
    • DD - 完全な曜日名
    • D - 曜日の短い名前

    timePicker`を有効にすると、次のような追加の時間表現が利用できます。

    • HH - 24時間形式の2桁の時間 (00 - 23)
    • H - 24時間形式の時(0~23)です。
    • hh - 12-hours format 2 digits hours (00 - 12)
    • h - 12時間形式の時(0~12)です。
    • :mm - 2桁の分 (00 - 59)
    • :m - 分(0~59)です。
    • ss - 2桁の秒(00 - 59
    • s - 秒(0~59
    • A - 大文字のPostまたはAnte Meridiem(PMまたはAM)
    • a - 大文字と小文字が混在した時刻(午後または午前
    multiplebooleanfalse複数の日付や値を選択できるようにする
    rangePickerbooleanfalseレンジピッカーを有効にします。multiple`とは互換性がありません。
    rangePickerMinDaysnumber1rangePicker` が有効な場合に選択する必要のある最小日数
    rangePickerMaxDaysnumber0RangePickerが有効なときに選択できる最大日数。0 は最大値がないことを意味します。
    directionstring'horizontal'月のレイアウト方向、「水平」または「垂直」のいずれかを指定します。
    minDateDatenull最小許容日付
    maxDateDatenull最大許容日
    touchMovebooleantrue有効にすると、タッチ操作時にカレンダーの月が指に合わせてスライドします。
    animatebooleantrue月間の移行を有効にする
    closeOnSelectbooleanfalse有効にすると、ユーザーが日付を選択したときにカレンダーが閉じられる
    weekHeaderbooleantrue週のヘッダーに短い名前の曜日を表示する
    monthSelectorbooleantrueツールバーの月セレクタを有効にする
    monthPickerbooleantrueツールバーの月セレクタをクリックすると、月ピッカーが月を選択するようになります。
    yearSelectorbooleantrueツールバーの年ピッカーを有効にする
    yearPickerbooleantrueツールバーの年セレクタをクリックすると、年ピッカーで年を選択できるようにする
    yearPickerMinnumber年ピッカーの最小利用可能年は、デフォルトでは今日から100年を引いたものになっています。
    yearPickerMaxnumber年ピッカーで選択可能な最大の年(デフォルトでは、今日と100年を足したものになっています
    timePickerbooleanfalse時間選択ツールを有効にします。
    timePickerFormatobject{hour: 'numeric', minute: 'numeric'}

    時刻セレクターに表示される時刻のフォーマット。Intl.DateTimeFormat.optionsを受け付けます。

    AM/PM のフォーマットは、選択された指定の locale に依存し、指定されていない場合はブラウザのロケールに依存します。

    timePickerPlaceholderstringSelect time時間セレクターのプレースホルダーに表示するテキスト。
    Container/opener-specific parameters
    containerElstring
    HTMLElement
    生成されたカレンダーのHTMLを配置するCSSセレクタまたはHTML要素を持つ文字列です。インラインカレンダーにのみ使用してください
    openInstringautoautopopover (カレンダーをポップオーバーで開く)、sheet (シートモーダルで開く)、customModal (カスタムカレンダーモーダルオーバーレイで開く)のいずれかを指定します。autoの場合、小さい画面ではシートモーダルで、大きい画面ではポップオーバーで開きます。
    sheetPushbooleanfalseカレンダーシートを開いたときに、ビュー/秒を後ろにプッシュできるようになります。
    sheetSwipeToClosebooleanundefinedスワイプでカレンダーシートを閉じる機能を有効にします。指定しない場合は、アプリのシートの swipeToClose パラメータを継承します。
    inputElstring or HTMLElementCSSセレクタ付きの文字列、または関連する入力要素を持つHTML要素
    scrollToInputbooleantrueカレンダーを開いたときに、ビューポート(ページ内容)を入力までスクロールします。
    inputReadOnlybooleantrue指定した入力項目に "readonly" 属性を設定する
    cssClassstringカレンダー要素に設定される追加のCSSクラス名
    closeByOutsideClickbooleantrue有効な場合、ピッカーまたは関連する入力要素の外側をクリックするとピッカーが閉じられる
    toolbarbooleantrueカレンダーツールバーを有効にする
    toolbarCloseTextstringDoneDone/Closeツールバーボタンのテキスト
    headerbooleanfalseカレンダーのヘッダーを有効にする
    headerPlaceholderstringSelect dateデフォルトのカレンダーヘッダーのプレースホルダーテキスト
    routableModalsbooleanfalse開いたカレンダーをルータの履歴に追加し、ルータの履歴をさかのぼってカレンダーを閉じることができるようにし、現在のルートをカレンダーモーダルに設定します。
    urlstringdate/カレントルートとして設定されるカレンダーモーダルのURL
    viewobjectroutableModalsが有効な場合、ルーティングを設定するビューです。親ビューが見つからない場合は、inputEl`の親ビュー、またはメインビューがデフォルトとなります。
    backdropbooleanカレンダーの背景(後ろの暗い半透明のレイヤー)を有効にします。デフォルトでは、カレンダーをポップオーバーで開いたときにのみ有効になります。
    closeByBackdropClickbooleantrue有効にすると、背景をクリックするとカレンダーが閉じます。
    Render Functions
    renderWeekHeaderfunction週のヘッダーをレンダリングする関数です。週のヘッダの HTML 文字列を返さなければなりません。
    renderMonthsfunction(date)月のラッパーを表示する関数です。月のコンテナを表示する関数です。
    renderMonthfunction(date, offset)単一月を描画する関数です。単一月のHTML文字列を返す。
    renderMonthSelectorfunction月セレクタを表示する関数です。必ず月セレクタを返す。
    renderYearSelectorfunction年セレクタを描画する機能を提供します。年セレクタを返す。
    renderHeaderfunctionカレンダーヘッダを描画する機能を有する。カレンダーヘッダーを描画する機能。
    renderToolbarfunctionツールバーを描画する関数です。ツールバーを表示する関数です。
    renderfunctionカレンダー全体を表示する関数です。カレンダー全体のHTML文字列を返す必要があります。
    Events
    onobject

    イベントハンドラーを持つオブジェクトです。例えば、以下のようになります。

    var calendar = app.calendar.create({
      ...
      on: {
        opened: function () {
          console.log('Calendar opened')
        }
      }
    })

    以下のすべてのパラメータは、アプリのグローバルパラメータの calendar プロパティで使用でき、すべてのカレンダーのデフォルトを設定できます。例えば、以下のようになります。

    var app = new Framework7({
      calendar: {
        url: 'calendar/',
        dateFormat: 'dd.mm.yyyy',
      }
    });

    日付の範囲

    カレンダーのパラメータ(disabledeventsrangesClasses)の中には、Date Rangeと呼ばれるものがあります。これは、すべての可能な日付の組み合わせを指定してカバーする簡単な方法です。

    例えば、日付で配列することができます。

    var calendar = app.calendar.create({
        ...
        // 例えば、2015年11月10日と2015年11月11日を無効にします。
        disabled: [new Date(2015, 10, 10), new Date(2015, 10, 11)],
        ...
    });

    trueまたはfalseを返す必要があるカスタム関数にすることができます。

    var calendar = app.calendar.create({
        ...
        //2015年11月のすべての日付を無効にする
        disabled: function (date) {
            if (date.getFullYear() === 2015 && date.getMonth() === 10) {
                return true;
            }
            else {
                return false;
            }
        },
        ...
    });

    または、fromtoプロパティを持つオブジェクト

    var calendar = app.calendar.create({
        ...
        //2015年10月1日から2015年12月31日までのすべての日付を無効にする
        disabled: {
            from: new Date(2015, 9, 1),
            to: new Date(2015, 11, 31)
        },
        ...
    });

    または、fromまたはtoプロパティだけを持つオブジェクト

    var calendar = app.calendar.create({
        ...
        //2015年12月以降のすべての日付を無効にする
        disabled: {
            from: new Date(2015, 11, 1)
        },
        ...
    });

    または、dateプロパティを持つオブジェクト。

    var calendar = app.calendar.create({
        ...
        // 2015年12月1日を無効にする
        disabled: {
            date: new Date(2015, 11, 1)
        },
        ...
    });

    または、日付とオブジェクトが混在する配列。

    var calendar = app.calendar.create({
        ...
        events: [
            new Date(2015, 9, 1),
            new Date(2015, 9, 5),
            {
                from: new Date(2015, 9, 10),
                to: new Date(2015, 9, 15)
            },
            {
                from: new Date(2015, 9, 20),
                to: new Date(2015, 9, 31)
            },
            {
                date: new Date(2015, 11, 1),
                color: '#ff0000'
            },
            // 同じ日付だが、もう一つの色のドットが追加される
            {
                date: new Date(2015, 11, 1),
                color: '#00ff00'
            },
        ],
        ...
    });

    レンジクラス

    rangesClasses パラメータには、日付の範囲を持つオブジェクトの配列と、その範囲のクラス名を指定します。

    var calendar = app.calendar.create({
        ...
        //novemberとoctoberのクラスを追加
        rangesClasses: [
            //10月のすべての日付に "day-october "クラスの追加
            {
                // cssClass "プロパティには、この範囲のCSSクラス名を指定します。
                cssClass: 'day-october', //string CSS class
                // range "プロパティの日付範囲
                range: function (date) {
                    return date.getMonth() === 9
                }
            },
            //2016年1月1日から10日までの「day-holiday」クラスの追加
            {
                cssClass: 'day-holiday',
                range: {
                    from: new Date(2016, 0, 1),
                    to: new Date(2016, 0, 10)
                }
            }
        ],
        ...
    });

    カレンダーのメソッドとプロパティ

    カレンダーを初期化すると、その初期化されたインスタンスが変数(上記の例ではcalendar変数)に格納され、便利なメソッドやプロパティが用意されます。

    Properties
    calendar.appグローバルアプリのインスタンスへのリンク
    calendar.containerElカレンダーラッピングコンテナ HTML 要素 (インラインカレンダーを使用している場合)
    calendar.$containerElカレンダーのラッピングコンテナのHTML要素を持つDom7のインスタンス(インラインカレンダーが使用されている場合
    calendar.elCalendar HTML 要素
    calendar.$elカレンダーのHTML要素を持つDom7インスタンス
    calendar.inputElカレンダーの入力 HTML 要素 (inputEl パラメータで渡されます)
    calendar.$inputElカレンダー入力 HTML 要素を持つ Dom7 インスタンス (inputEl パラメータで渡される)
    calendar.value各項目が選択された日付を表す配列
    calendar.currentMonthカレンダービューの現在の月。0 "から "11 "までの数字で表します。
    calendar.currentYearカレンダービューの現在の年。例えば、2020のような数字です。
    calendar.openedカレンダーが現在開かれている場合は、trueとなります。
    calendar.inlineインラインカレンダーが使用されている場合は、trueとなります。
    calendar.cols指定されたカレンダーのカラムを持つ配列です。それぞれの列には、独自のメソッドとプロパティがあります(以下を参照)。
    calendar.urlカレンダーのURL (url パラメータで渡されたもの)
    calendar.viewカレンダーのビュー(view パラメータで渡されたもの)または見つかった親ビュー
    calendar.params初期化パラメータを持つオブジェクト
    calendar.allowTouchMove初期化後にタッチ操作を行わないようにするには、このフラグを false に設定します。
    Methods
    calendar.setValue(values)選択された新しい日付を設定します。values` は配列で、各項目が選択された日付を表します。
    calendar.getValue()現在のカレンダーの値を返します。
    calendar.addValue()値の配列に値を追加します。複数の選択が可能な場合に便利です (パラメータ multiple: true)
    calendar.update()カレンダーを再表示します。値を動的に追加/変更し、カレンダーのレイアウトを更新する必要がある場合に便利です。
    calendar.nextMonth(duration)指定された duration の間、カレンダーを翌月に移行させる(単位:ミリ秒
    calendar.prevMonth(duration)カレンダーを前月に移行させます(duration in ms
    calendar.nextYear()次の年へのカレンダー遷移
    calendar.prevYear()前年度へのカレンダー遷移
    calendar.setYearMonth(year, month, duration)ms単位の指定されたへのカレンダー遷移
    calendar.open()カレンダーを開く
    calendar.close()カレンダーを閉じる
    calendar.destroy()カレンダーのインスタンスを破棄して、すべてのイベントを削除する
    calendar.on(event, handler)イベントハンドラの追加
    calendar.once(event, handler)イベントハンドラを追加しますが、発生後は削除されます。
    calendar.off(event, handler)イベント・ハンドラの削除
    calendar.off(event)指定したイベントのハンドラをすべて削除する
    calendar.emit(event, ...args)インスタンスでイベントを発生させる

    Calendarのイベント

    Calendarでは、以下のDOMイベントがCalendar要素に、イベントがappとCalendarインスタンスに発生します。

    DOM イベント

    EventTargetDescription
    calendar:openCalendar Element<div class="calendar">イベントは、Calendar がオープニングアニメーションを開始したときに発生します。
    calendar:openedCalendar Element<div class="calendar">イベントは、Calendar のオープニングアニメーションが完了した後に発生します。
    calendar:closeCalendar Element<div class="calendar">イベントは、Calendar が閉じるアニメーションを開始したときに発生します。
    calendar:closedCalendar Element<div class="calendar">イベントは、Calendarが閉じるアニメーションを完了した後に発生します。

    アプリとカレンダーインスタンスのイベント

    Calendarインスタンスは、SelfインスタンスとAppインスタンスの両方にイベントを発行します。アプリのインスタンスのイベントは、同じ名前でプレフィックスとして calendar が付いています。

    EventTargetArgumentsDescription
    dayClickcalendar(calendar, dayEl, year, month, day)カレンダーの曜日要素をクリックすると、イベントが発生します。
    calendarDayClickapp
    changecalendar(calendar, value)カレンダーの値が変更されると、イベントが発生します。
    calendarChangeapp
    monthAddcalendar(calendar, monthEl)新しい月のHTMLレイアウトが追加されると、イベントが発生します。追加されたHTML要素を後処理する必要がある場合に便利です。
    calendarMonthAddapp
    monthYearChangeStartcalendar(calendar, year, month)翌月への移行開始時にイベントを発生させる
    calendarMonthYearChangeStartapp
    monthYearChangeEndcalendar(calendar, year, month)翌月への移行後にイベントが発生します。
    calendarMonthYearChangeEndapp
    initcalendar(calendar)カレンダーが初期化されたときにイベントが発生する
    calendarInitapp
    opencalendar(calendar)カレンダーのオープニングアニメーションが始まった時にイベントが発生します。イベントハンドラの引数として、Calendarのインスタンスを受け取ります。
    calendarOpenapp
    openedcalendar(calendar)イベントは、カレンダーがオープニングアニメーションを完了した後に発生します。イベントハンドラがカレンダのインスタンスを受信したときの引数として
    calendarOpenedapp
    closecalendar(calendar)イベントは、Calendarが閉じるアニメーションを開始するときに発生します。As an argument event handler receive calendar instance
    calendarCloseapp
    closedcalendar(calendar)イベントは、Calendarが閉じるアニメーションを完了した後にトリガされます。As an argument event handler receive calendar instance
    calendarClosedapp
    beforeDestroycalendar(calendar)イベントは、Calendarインスタンスが破壊される直前に発生します。As an argument event handler receives calendar instance
    calendarBeforeDestroyapp

    CSS Variables

    Below is the list of related CSS variables (CSS custom properties).

    Note that commented variables are not specified by default and their values is what they fallback to in this case.

    :root {
      --f7-calendar-height: 340px;
      --f7-calendar-sheet-landscape-height: 220px;
      --f7-calendar-popover-width: 320px;
      --f7-calendar-popover-height: 320px;
      --f7-calendar-modal-height: 420px;
      --f7-calendar-modal-max-width: 380px;
      --f7-calendar-modal-border-radius: 4px;
      /*
      --f7-calendar-header-bg-color: var(--f7-bars-bg-color);
      --f7-calendar-header-link-color: var(--f7-bars-link-color);
      --f7-calendar-header-text-color: var(--f7-bars-text-color);
      --f7-calendar-footer-bg-color: var(--f7-bars-bg-color);
      --f7-calendar-footer-border-color: var(--f7-bars-border-color);
      --f7-calendar-footer-link-color: var(--f7-bars-link-color);
      --f7-calendar-footer-text-color: var(--f7-bars-text-color);
      --f7-calendar-week-header-bg-color: var(--f7-bars-bg-color);
      --f7-calendar-week-header-text-color: var(--f7-bars-text-color);
      */
      --f7-calendar-footer-padding: 0 8px;
      --f7-calendar-week-header-font-size: 11px;
      --f7-calendar-selected-text-color: #fff;
      /*
      --f7-calendar-selected-bg-color:  var(--f7-theme-color);
      */
      --f7-calendar-prev-next-text-color: #b8b8b8;
      --f7-calendar-disabled-text-color: #d4d4d4;
      --f7-calendar-event-dot-size: 4px;
      /*
      --f7-calendar-event-bg-color: var(--f7-theme-color);
      */
      /*
      --f7-calendar-picker-selected-text-color: var(--f7-theme-color);
      */
      --f7-calendar-time-selector-height: 28px;
      --f7-calendar-day-text-color: #000;
      --f7-calendar-sheet-bg-color: #fff;
      --f7-calendar-modal-bg-color: #fff;
      --f7-calendar-picker-bg-color: #fff;
      --f7-calendar-picker-pressed-bg-color: rgba(0, 0, 0, 0.1);
      --f7-calendar-picker-hover-bg-color: rgba(0, 0, 0, 0.03);
      --f7-calendar-time-selector-bg-color: rgba(0, 0, 0, 0.1);
    }
    :root .theme-dark,
    :root.theme-dark {
      --f7-calendar-sheet-border-color: var(--f7-bars-border-color);
      --f7-calendar-modal-bg-color: #121212;
      --f7-calendar-sheet-bg-color: #121212;
      --f7-calendar-picker-bg-color: #1c1c1d;
      --f7-calendar-picker-pressed-bg-color: rgba(255, 255, 255, 0.08);
      --f7-calendar-picker-hover-bg-color: rgba(255, 255, 255, 0.03);
      --f7-calendar-time-selector-bg-color: rgba(255, 255, 255, 0.1);
    }
    .ios {
      --f7-calendar-sheet-border-color: #929499;
      --f7-calendar-header-height: 44px;
      --f7-calendar-header-font-size: 17px;
      --f7-calendar-header-font-weight: 600;
      --f7-calendar-header-padding: 0 8px;
      --f7-calendar-footer-height: 44px;
      --f7-calendar-footer-font-size: 17px;
      --f7-calendar-week-header-height: 18px;
      --f7-calendar-day-font-size: 15px;
      --f7-calendar-day-size: 30px;
      --f7-calendar-picker-font-size: 17px;
      --f7-calendar-time-selector-font-size: 17px;
      --f7-calendar-row-border-color: rgba(0, 0, 0, 0.25);
      --f7-calendar-today-text-color: #000;
      --f7-calendar-today-bg-color: #e3e3e3;
    }
    .ios .theme-dark,
    .ios.theme-dark {
      --f7-calendar-row-border-color: var(--f7-bars-border-color);
      --f7-calendar-day-text-color: #fff;
      --f7-calendar-today-text-color: #fff;
      --f7-calendar-today-bg-color: #333;
    }
    .md {
      --f7-calendar-sheet-border-color: #ccc;
      --f7-calendar-header-height: 56px;
      --f7-calendar-header-font-size: 20px;
      --f7-calendar-header-font-weight: 400;
      --f7-calendar-header-padding: 0 24px;
      --f7-calendar-footer-height: 48px;
      --f7-calendar-footer-font-size: 14px;
      --f7-calendar-week-header-height: 24px;
      --f7-calendar-row-border-color: transparent;
      --f7-calendar-day-font-size: 14px;
      /*
      --f7-calendar-today-text-color: var(--f7-theme-color);
      */
      --f7-calendar-today-bg-color: none;
      --f7-calendar-day-size: 32px;
      --f7-calendar-picker-font-size: 14px;
      --f7-calendar-time-selector-font-size: 14px;
    }
    .md .theme-dark,
    .md.theme-dark {
      --f7-calendar-day-text-color: rgba(255, 255, 255, 0.87);
    }
    .aurora {
      --f7-calendar-sheet-border-color: #ccc;
      --f7-calendar-header-height: 56px;
      --f7-calendar-header-font-size: 18px;
      --f7-calendar-header-font-weight: 600;
      --f7-calendar-header-padding: 0 16px;
      --f7-calendar-footer-height: 48px;
      --f7-calendar-footer-font-size: 14px;
      --f7-calendar-footer-padding: 0 16px;
      --f7-calendar-week-header-height: 24px;
      --f7-calendar-day-font-size: 14px;
      --f7-calendar-day-size: 32px;
      --f7-calendar-picker-font-size: 16px;
      --f7-calendar-time-selector-font-size: 14px;
      --f7-calendar-row-border-color: transparent;
      --f7-calendar-today-text-color: #000;
      --f7-calendar-today-bg-color: #e3e3e3;
    }
    .aurora .theme-dark,
    .aurora.theme-dark {
      --f7-calendar-day-text-color: #fff;
      --f7-calendar-today-text-color: #fff;
      --f7-calendar-today-bg-color: #333;
    }
    

    Examples

    <template>
      <div class="page">
        <div class="navbar">
          <div class="navbar-bg"></div>
          <div class="navbar-inner">
            <div class="title">Calendar</div>
          </div>
        </div>
        <div class="page-content">
          <div class="block-title">Default setup</div>
          <div class="list no-hairlines-md">
            <ul>
              <li>
                <div class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-input-wrap">
                      <input type="text" placeholder="Your birth date" readonly="readonly" id="demo-calendar-default" />
                    </div>
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="block-title">Custom date format</div>
          <div class="list no-hairlines-md">
            <ul>
              <li>
                <div class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-input-wrap">
                      <input type="text" placeholder="Select date" readonly="readonly" id="demo-calendar-date-format" />
                    </div>
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="block-title">Date + Time</div>
          <div class="list no-hairlines-md">
            <ul>
              <li>
                <div class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-input-wrap">
                      <input type="text" placeholder="Select date and time" readonly="readonly"
                        id="demo-calendar-date-time" />
                    </div>
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="block-title">Multiple Values</div>
          <div class="list no-hairlines-md">
            <ul>
              <li>
                <div class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-input-wrap">
                      <input type="text" placeholder="Select multiple dates" readonly="readonly"
                        id="demo-calendar-multiple" />
                    </div>
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="block-title">Range Picker</div>
          <div class="list no-hairlines-md">
            <ul>
              <li>
                <div class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-input-wrap">
                      <input type="text" placeholder="Select date range" readonly="readonly" id="demo-calendar-range" />
                    </div>
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="block-title">Open in Modal</div>
          <div class="list no-hairlines-md">
            <ul>
              <li>
                <div class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-input-wrap">
                      <input type="text" placeholder="Select date" readonly="readonly" id="demo-calendar-modal" />
                    </div>
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="block-title">With Events</div>
          <div class="list no-hairlines-md">
            <ul>
              <li>
                <div class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-input-wrap">
                      <input type="text" placeholder="Select date" readonly="readonly" id="demo-calendar-events" />
                    </div>
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="block-title">Disabled Dates</div>
          <div class="list no-hairlines-md">
            <ul>
              <li>
                <div class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-input-wrap">
                      <input type="text" placeholder="Select date" readonly="readonly" id="demo-calendar-disabled" />
                    </div>
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="block-title">Inline with custom toolbar</div>
          <div class="block block-strong no-padding">
            <div id="demo-calendar-inline-container"></div>
          </div>
        </div>
      </div>
    </template>
    <script>
      export default (props, { $, $f7, $on }) => {
        let calendarDefault;
        let calendarDateFormat;
        let calendarDateTime;
        let calendarMultiple;
        let calendarRange;
        let calendarModal;
        let calendarEvents;
        let calendarDisabled;
        let calendarInline;
    
        $on('pageInit', () => {
          // Default
          calendarDefault = $f7.calendar.create({
            inputEl: '#demo-calendar-default',
          });
          // With custom date format
          calendarDateFormat = $f7.calendar.create({
            inputEl: '#demo-calendar-date-format',
            dateFormat: { weekday: 'long', month: 'long', day: '2-digit', year: 'numeric' },
          });
          // Date + Time
          calendarDateTime = $f7.calendar.create({
            inputEl: '#demo-calendar-date-time',
            timePicker: true,
            dateFormat: { month: 'numeric', day: 'numeric', year: 'numeric', hour: 'numeric', minute: 'numeric' },
          });
          // With multiple values
          calendarMultiple = $f7.calendar.create({
            inputEl: '#demo-calendar-multiple',
            dateFormat: { month: 'short', day: 'numeric' },
            multiple: true
          });
          // Range Picker
          calendarRange = $f7.calendar.create({
            inputEl: '#demo-calendar-range',
            rangePicker: true
          });
          // Custom modal
          calendarModal = $f7.calendar.create({
            inputEl: '#demo-calendar-modal',
            openIn: 'customModal',
            header: true,
            footer: true,
          });
          // With events
          var now = new Date();
          var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
          var weekLater = new Date().setDate(today.getDate() + 7);
          calendarEvents = $f7.calendar.create({
            inputEl: '#demo-calendar-events',
            events: [
              {
                from: today,
                to: weekLater
              },
              //- more events this day
              {
                date: today,
                color: '#ff0000'
              },
              {
                date: today,
                color: '#00ff00'
              },
            ]
          });
          // Disabled
          var today = new Date();
          var weekLater = new Date().setDate(today.getDate() + 7);
          calendarDisabled = $f7.calendar.create({
            inputEl: '#demo-calendar-disabled',
            disabled: {
              from: today,
              to: weekLater
            }
          });
          // Inline with custom toolbar
          var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
          calendarInline = $f7.calendar.create({
            containerEl: '#demo-calendar-inline-container',
            value: [new Date()],
            weekHeader: false,
            renderToolbar: function () {
              return `
              <div class="toolbar calendar-custom-toolbar no-shadow">
                <div class="toolbar-inner">
                  <div class="left">
                    <a href="#" class="link icon-only"><i class="icon icon-back ${$f7.theme === 'md' ? 'color-black' : ''}"></i></a>
                  </div>
                  <div class="center"></div>
                  <div class="right">
                    <a href="#" class="link icon-only"><i class="icon icon-forward ${$f7.theme === 'md' ? 'color-black' : ''}"></i></a>
                  </div>
                </div>
              </div>
              `;
            },
            on: {
              init: function (c) {
                $('.calendar-custom-toolbar .center').text(monthNames[c.currentMonth] + ', ' + c.currentYear);
                $('.calendar-custom-toolbar .left .link').on('click', function () {
                  calendarInline.prevMonth();
                });
                $('.calendar-custom-toolbar .right .link').on('click', function () {
                  calendarInline.nextMonth();
                });
              },
              monthYearChangeStart: function (c) {
                $('.calendar-custom-toolbar .center').text(monthNames[c.currentMonth] + ', ' + c.currentYear);
              }
            }
          });
        });
    
        return $render;
      };
    
    
    </script>