DuyTa's picture
Upload folder using huggingface_hub
bc20498 verified
import { ActionReturn, Action } from 'svelte/action';
/**
* Additional attributes extended from `svelte-put/shortcut`
*
* The ambient types for these extended attributes should be available automatically
* whenever `svelte-put/shorcut` is imported.
*/
export interface ShortcutAttributes {
'on:shortcut'?: (event: CustomEvent<ShortcutEventDetail>) => void;
}
/**
* Supported modifier keys, map to {@link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent | KeyboardEvent}'s
* {@link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/altKey | altkey},
* {@link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/ctrlKey | ctrlKey},
* {@link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/shiftKey | shiftKey},
* {@link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/metaKey | metaKey}.
*
*
*/
export type ShortcutModifier = 'alt' | 'ctrl' | 'meta' | 'shift';
/**
* Possible variations for modifier definition
* @example
*
* Listen for a single modifier
*
* ```svelte
* <script>
* import { shortcut } from '@svelte-put/shortcut';
* </script>
*
* <window use:shortcut={{
* trigger: {
* key: 'k' ,
* modifier: 'ctrl',
* },
* }}
* />
* ```
* @example
*
* Listen for one of many modifiers (or)
*
* ```svelte
* <script>
* import { shortcut } from '@svelte-put/shortcut';
* </script>
*
* <window use:shortcut={{
* trigger: {
* key: 'k' ,
* modifier: ['ctrl', 'meta'],
* },
* }}
* />
* ```
* @example
*
* Listen for a combination of multiple modifiers (and)
*
* ```svelte
* <script>
* import { shortcut } from '@svelte-put/shortcut';
* </script>
*
* <window use:shortcut={{
* trigger: {
* key: 'k' ,
* modifier: [['ctrl', 'shift']],
* },
* }}
* />
*
* ```
* @example
*
* A mix of the 3 previous examples
*
* ```svelte
* <script>
* import { shortcut } from '@svelte-put/shortcut';
* </script>
*
* <window use:shortcut={{
* trigger: {
* key: 'k' ,
* modifier: [
* ['ctrl', 'shift'], // ctrl and shift
* // or
* ['meta'], // meta
* ],
* },
* }}
* />
* ```
*/
export type ShortcutModifierDefinition =
| ShortcutModifier
| ShortcutModifier[]
| ShortcutModifier[][];
/**
* A definition of a shortcut trigger
*
*/
export interface ShortcutTrigger {
/**
* whether to enable this triggered. Default to `true`
*
*
*
* `false` means trigger is disabled,
* but event listener is still placed on node
*/
enabled?: boolean;
/** modifier key to listen to in conjunction of `key` */
modifier?: ShortcutModifierDefinition;
/** id to distinguish this trigger from others, recommended when using `on:shortcut` */
id?: string;
/** the {@link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent | KeyboardEvent}.key to listen to */
key: string;
/** callback for when the trigger is matched */
callback?: (detail: ShortcutEventDetail) => void;
/**
* whether to call `event.preventDefault` before firing callback. Default to `false`
*
*
*
* This is called on the node the action is attached to, not the node that triggers the original `KeyboardEvent`.
* So for example, if `shortcut` is attached to `window`, by the time `preventDefault` is called, the event has already been
* bubbled up to `window`.
*/
preventDefault?: boolean;
}
/**
* svelte action parameter to config behavior of `shortcut`
*
*/
export interface ShortcutParameter {
/** whether to activate the action. Default to `true` */
enabled?: boolean;
/** Either a single {@link ShortcutTrigger} definition or an array of multiple ones */
trigger: Array<ShortcutTrigger> | ShortcutTrigger;
/** event type to place on node. Default to `keydown` */
type?: 'keydown' | 'keyup';
}
/**
* `detail` payload for 'shortcut' {@link https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent | CustomEvent }
* @example
*
* ```html
* <script>
* import { shortcut, type ShortcutEventDetail } from '@svelte-put/shortcut';
*
* function onShortcut(event: CustomEvent<ShortcutEventDetail>) {
* if (event.detail.trigger.id === 'my-shortcut') {
* console.log('do something');
* }
* }
* <script/>
*
* <window
* use:shortcut={{
* trigger: {
* key: 'k ,
* modifier: ['ctrl'],
* id: 'my-shortcut',
* },
* }}
* on:shortcut={onShortcut}
* />
* ```
*/
export interface ShortcutEventDetail {
/** the node that the action was placed on */
node: HTMLElement;
/** the shortcut trigger of this event */
trigger: ShortcutTrigger;
/** the original `KeyboardEvent`. Helpful to access the event target, for example */
originalEvent: KeyboardEvent;
}
/** */
export type ShortcutAction = Action<HTMLElement, ShortcutParameter, ShortcutAttributes>;
/** */
export type ShortcutActionReturn = ActionReturn<ShortcutParameter, ShortcutAttributes>;