ă‚­ăƒŒăƒœăƒŒăƒ‰ă‚·ăƒ§ăƒŒăƒˆă‚«ăƒƒăƒˆăƒ—ăƒ©ă‚°ă‚€ăƒł

ă‚­ăƒŒăƒœăƒŒăƒ‰ă‚·ăƒ§ăƒŒăƒˆă‚«ăƒƒăƒˆ (Keyboard Shortcuts) ăƒ—ăƒ©ă‚°ă‚€ăƒłăŻă€ăƒŠăƒ“ă‚ČăƒŒă‚·ăƒ§ăƒłă€ă‚€ăƒ™ăƒłăƒˆçźĄç†ă€ăŠă‚ˆăłă‚ŻăƒȘăƒƒăƒ—ăƒœăƒŒăƒ‰æ“äœœăźăŸă‚ăźă‚°ăƒ­ăƒŒăƒăƒ«ăȘă‚­ăƒŒăƒœăƒŒăƒ‰ă‚łăƒłăƒˆăƒ­ăƒŒăƒ«ă‚’ćŻèƒœă«ă—ăŸă™ă€‚

ă‚€ăƒłă‚čăƒˆăƒŒăƒ«

ăƒ—ăƒ©ă‚°ă‚€ăƒłăƒ‘ăƒƒă‚±ăƒŒă‚žă‚’ă‚€ăƒłă‚čăƒˆăƒŒăƒ«ă—ăŸă™ïŒš

npm install @dayflow/plugin-keyboard-shortcuts
pnpm add @dayflow/plugin-keyboard-shortcuts
yarn add @dayflow/plugin-keyboard-shortcuts
bun add @dayflow/plugin-keyboard-shortcuts

äœżă„æ–č

import { useCalendarApp, DayFlowCalendar } from '@dayflow/react';
import { createKeyboardShortcutsPlugin } from '@dayflow/plugin-keyboard-shortcuts';

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [
      /* ăƒ“ăƒ„ăƒŒ */
    ],
    plugins: [
      createKeyboardShortcutsPlugin({
        // ă‚Șăƒ—ă‚·ăƒ§ăƒłèš­ćźš
      }),
    ],
  });

  return <DayFlowCalendar calendar={calendar} />;
}
<template>
  <DayFlowCalendar :calendar="calendar" />
</template>

<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
import { createKeyboardShortcutsPlugin } from '@dayflow/plugin-keyboard-shortcuts';

const calendar = useCalendarApp({
  views: [
    /* ăƒ“ăƒ„ăƒŒ */
  ],
  plugins: [
    createKeyboardShortcutsPlugin({
      // ă‚Șăƒ—ă‚·ăƒ§ăƒłèš­ćźš
    }),
  ],
});
</script>
import { Component } from '@angular/core';
import { DayFlowCalendarModule } from '@dayflow/angular';
import { createKeyboardShortcutsPlugin } from '@dayflow/plugin-keyboard-shortcuts';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [DayFlowCalendarModule],
  template: `<dayflow-calendar [calendar]="calendar"></dayflow-calendar>`
})
export class AppComponent {
  calendar = {
    views: [
      /* ăƒ“ăƒ„ăƒŒ */
    ],
    plugins: [
      createKeyboardShortcutsPlugin({
        // ă‚Șăƒ—ă‚·ăƒ§ăƒłèš­ćźš
      })
    ]
  };
}
<script>
  import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
  import { createKeyboardShortcutsPlugin } from '@dayflow/plugin-keyboard-shortcuts';

  const calendar = useCalendarApp({
    views: [
      /* ăƒ“ăƒ„ăƒŒ */
    ],
    plugins: [
      createKeyboardShortcutsPlugin({
        // ă‚Șăƒ—ă‚·ăƒ§ăƒłèš­ćźš
      }),
    ],
  });
</script>

<DayFlowCalendar {calendar} />

ăƒ‡ăƒ•ă‚©ăƒ«ăƒˆăźă‚·ăƒ§ăƒŒăƒˆă‚«ăƒƒăƒˆ

æ“äœœă‚­ăƒŒ (Mac)ă‚­ăƒŒ (Windows/Linux)
ä»Šæ—„ă«ç§»ć‹•Cmd + TCtrl + T
æ€œçŽąCmd + FCtrl + F
æ–°èŠă‚€ăƒ™ăƒłăƒˆCmd + NCtrl + N
ナビă‚ČăƒŒă‚·ăƒ§ăƒłArrowLeft / ArrowRightArrowLeft / ArrowRight
ă‚€ăƒ™ăƒłăƒˆăźă‚żăƒ–ç§»ć‹•Tab / Shift + TabTab / Shift + Tab
ć…ƒă«æˆ»ă™Cmd + ZCtrl + Z
やり目しCmd + Shift + Z / Cmd + YCtrl + Y
ă‚€ăƒ™ăƒłăƒˆă‚’ă‚łăƒ”ăƒŒCmd + CCtrl + C
ă‚€ăƒ™ăƒłăƒˆă‚’ćˆ‡ă‚Šć–ă‚ŠCmd + XCtrl + X
ă‚€ăƒ™ăƒłăƒˆă‚’èČŒă‚Šä»˜ă‘Cmd + VCtrl + V
ă‚€ăƒ™ăƒłăƒˆă‚’ć‰Šé™€Backspace / DeleteBackspace / Delete
ăƒ€ă‚€ă‚ąăƒ­ă‚°/ăƒ‘ăƒăƒ«ă‚’é–‰ă˜ă‚‹EscEsc

èš­ćźš

ă‚­ăƒŒăƒžăƒƒăƒ”ăƒłă‚°ă‚’ă‚«ă‚čă‚żăƒžă‚€ă‚șă—ăŸă‚Šă€ć„ă‚ąă‚Żă‚·ăƒ§ăƒłă«ă‚«ă‚čă‚żăƒ ă‚łăƒŒăƒ«ăƒăƒƒă‚Żă‚’æäŸ›ă—ăŸă‚Šă§ăăŸă™ïŒš

createKeyboardShortcutsPlugin({
  keyMap: {
    today: 't',
    search: 'f',
    prev: 'ArrowLeft',
    next: 'ArrowRight',
    undo: 'z',
    redo: 'y',
    delete: 'Delete',
    newEvent: 'n',
  },
  callbacks: {
    undo: app => {
      console.log('ă‚«ă‚čă‚żăƒ ăźć…ƒă«æˆ»ă™ăƒ­ă‚žăƒƒă‚Ż');
      app.undo();
    },
    redo: app => {
      console.log('ă‚«ă‚čタムぼやり目しロゾック');
      if ((app as any).redo) (app as any).redo();
    },
    delete: app => {
      if (confirm('æœŹćœ“ă«ć‰Šé™€ă—ăŸă™ă‹ïŒŸ')) {
        const selectedId = app.state.selectedEventId;
        if (selectedId) app.deleteEvent(selectedId);
      }
    },
  },
});

ćˆ©ç”šćŻèƒœăȘă‚łăƒŒăƒ«ăƒăƒƒă‚Ż

callbacks ă‚Șăƒ–ă‚žă‚§ă‚Żăƒˆă§ăŻä»„äž‹ăźă‚łăƒŒăƒ«ăƒăƒƒă‚ŻăŒă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăŸă™ïŒš

  • undo, redo, paste (app ă‚’ć—ă‘ć–ă‚ŠăŸă™)
  • copy, cut, delete (app ず event?: Event ă‚’ć—ă‘ć–ă‚ŠăŸă™)
  • today, search, prev, next, newEvent, dismiss (app ă‚’ć—ă‘ć–ă‚ŠăŸă™)
  • tab (app ず reverse: boolean ă‚’ć—ă‘ć–ă‚ŠăŸă™)

ăƒ—ăƒ©ă‚°ă‚€ăƒł API

ăƒ—ăƒ©ă‚°ă‚€ăƒłăƒăƒłăƒ‰ăƒ«ă‚’ć–ćŸ—ă—ăŠă€ćźŸèĄŒæ™‚ă«ă‚·ăƒ§ăƒŒăƒˆă‚«ăƒƒăƒˆăźć‹•äœœă‚’ćˆ¶ćŸĄă§ăăŸă™ïŒš

import { type KeyboardShortcutsService } from '@dayflow/plugin-keyboard-shortcuts';

const kb = app.getPlugin<KeyboardShortcutsService>('keyboard-shortcuts');

KeyboardShortcutsService

ăƒĄă‚œăƒƒăƒ‰èż”ă‚Šć€€èȘŹæ˜Ž
enable()voidă‚·ăƒ§ăƒŒăƒˆă‚«ăƒƒăƒˆć‡Šç†ă‚’ć†æœ‰ćŠč挖する
disable()voidenable() ăŒć‘Œă°ă‚Œă‚‹ăŸă§ć…šă‚·ăƒ§ăƒŒăƒˆă‚«ăƒƒăƒˆă‚’æŠ‘ćˆ¶ă™ă‚‹
isEnabled()booleană‚·ăƒ§ăƒŒăƒˆă‚«ăƒƒăƒˆăŒçŸćœšæœ‰ćŠčă‹ă©ă†ă‹ă‚’èż”ă™

ă‚ˆăă‚ă‚‹äœżç”šäŸ‹ăšă—ăŠă€ă‚«ă‚čă‚żăƒ ăƒąăƒŒăƒ€ăƒ«ă‚„ăƒȘッチテキă‚čăƒˆă‚šăƒ‡ă‚Łă‚żăŒé–‹ă„ăŠă„ă‚‹é–“ă€ă‚«ăƒŹăƒłăƒ€ăƒŒăźă‚·ăƒ§ăƒŒăƒˆă‚«ăƒƒăƒˆă‚’äž€æ™‚çš„ă«æŠ‘ćˆ¶ă™ă‚‹ć ŽćˆăŒă‚ă‚ŠăŸă™ïŒš

function MyModal() {
  const kb = app.getPlugin<KeyboardShortcutsService>('keyboard-shortcuts');

  useEffect(() => {
    kb?.disable();
    return () => kb?.enable(); // ă‚ąăƒłăƒžă‚Šăƒłăƒˆæ™‚ă«ćŸ©ć…ƒ
  }, []);

  // ...
}

ăƒ—ăƒ­ă‚°ăƒ©ăƒ ă‹ă‚‰é–‹ă„ăŠă„ă‚‹ UI ă‚’é–‰ă˜ă‚‹ă“ăšă‚‚ă§ăăŸă™ïŒš

app.dismissUI();

On this page