Skip to content

Commit 616b6e9

Browse files
committed
v0.2.1
1 parent 003c280 commit 616b6e9

File tree

9 files changed

+866
-53
lines changed

9 files changed

+866
-53
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.2.1](https://github.com/metonym/svelte-keydown/releases/tag/v0.2.1) - 2020-12-21
9+
10+
**Fixes**
11+
12+
- add index type in TypeScript definitions for generic key events
13+
814
## [0.2.0](https://github.com/metonym/svelte-keydown/releases/tag/v0.2.0) - 2020-11-18
915

16+
**Features**
17+
1018
- add TypeScript definitions
1119

1220
## [0.1.0](https://github.com/metonym/svelte-keydown/releases/tag/v0.1.0) - 2020-04-26

README.md

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,47 @@
55

66
> Utility to listen for keyboard events.
77
8-
Simple wrapper using [svelte:body](https://svelte.dev/docs#svelte_body) to listen for [keydown](https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event) events.
8+
Utility component leveraging the [svelte:body API](https://svelte.dev/docs#svelte_body) to listen for [keydown](https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event) events.
99

10-
This can be used to close modals or listen for a combination of keydown events.
10+
**Use Cases**
11+
12+
- toggle modals
13+
- capture a combination of keys (i.e., "Meta-s")
14+
15+
---
16+
17+
<!-- TOC -->
1118

1219
## Install
1320

1421
```bash
1522
yarn add -D svelte-keydown
23+
# OR
24+
npm i -D svelte-keydown
1625
```
1726

1827
## Usage
1928

2029
```svelte
2130
<script>
2231
import Keydown from "svelte-keydown";
32+
33+
let events = [];
2334
</script>
2435
25-
<Keydown on:Enter="{() => { console.log('Enter'); }}" />
36+
<Keydown on:Enter="{() => { events = [...events, 'enter'] }}" />
37+
38+
Press "enter": {events.join(', ')}
2639
```
2740

2841
## Examples
2942

3043
### Escape to Close Modal
3144

45+
In this use case, keydown events are paused if the modal is not open.
46+
3247
```svelte
3348
<script>
34-
import Keydown from "svelte-keydown";
35-
3649
let showModal = true;
3750
3851
function closeModal() {
@@ -41,52 +54,64 @@ yarn add -D svelte-keydown
4154
</script>
4255
4356
<Keydown paused="{!showModal}" on:Escape="{closeModal}" />
57+
58+
<button on:click="{() => { showModal = !showModal; }}">Toggle modal</button>
59+
<br />
60+
Toggled {showModal}
61+
4462
```
4563

4664
### "Command+S" to Save
4765

66+
Use the `combo` dispatched event to listen for a combination of keys.
67+
4868
```svelte
4969
<script>
50-
import Keydown from "svelte-keydown";
70+
let save = [];
5171
</script>
5272
5373
<Keydown
54-
on:combo="{({detail}) => {
55-
if (detail === 'Meta-s') {
74+
on:combo="{(e) => {
75+
if (e.detail === 'Meta-s') {
5676
console.log('Save');
77+
save = [...save, e.detail]
5778
}
5879
}}"
5980
/>
81+
82+
{save.join(', ')}
6083
```
6184

6285
## API
6386

64-
| Property name | Value |
65-
| :------------ | :--------------------------- |
66-
| paused | `boolean` (default: `false`) |
87+
| Prop name | Value |
88+
| :-------- | :--------------------------- |
89+
| paused | `boolean` (default: `false`) |
6790

6891
### Dispatched events
6992

70-
#### `on:{Key}`
93+
#### `on:[Key]`
7194

7295
Example:
7396

7497
```svelte
75-
<Keydown on:Enter={() => {}} />
98+
<Keydown on:Enter />
99+
<Keydown on:Escape />
100+
76101
```
77102

78103
#### `on:key`
79104

80-
Alternative API to `on:{Key}`.
105+
Alternative API to `on:[Key]`.
81106

82107
Example:
83108

84109
```svelte
85110
<Keydown
86111
on:key={({ detail }) => {
87-
console.log(detail); // "Enter"
88-
}}
89-
/>
112+
console.log(detail); // string | "Enter"
113+
}} />
114+
90115
```
91116

92117
#### `on:combo`
@@ -99,11 +124,17 @@ Example:
99124
<Keydown
100125
on:combo={({ detail }) => {
101126
console.log(detail); // "Meta-Shift-a"
102-
}}
103-
/>
127+
}} />
128+
104129
```
105130

106-
## [Changelog](CHANGELOG.md)
131+
## TypeScript
132+
133+
Svelte version 3.31 or greater is required to use this module with TypeScript.
134+
135+
## Changelog
136+
137+
[CHANGELOG.md](CHANGELOG.md)
107138

108139
## License
109140

package.json

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "svelte-keydown",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"license": "MIT",
55
"description": "Utility to listen for keyboard events",
66
"author": "Eric Liu (https://github.com/metonym)",
@@ -10,13 +10,21 @@
1010
"types": "./types/index.d.ts",
1111
"sideEffects": false,
1212
"scripts": {
13-
"prepack": "rollup -c"
13+
"dev": "rollup -cw",
14+
"predeploy": "rollup -c",
15+
"deploy": "npx gh-pages -d dist",
16+
"prepack": "BUNDLE=true rollup -c",
17+
"svelte-check": "svelte-check"
1418
},
1519
"devDependencies": {
16-
"@rollup/plugin-node-resolve": "^10.0.0",
17-
"rollup": "^2.33.3",
18-
"rollup-plugin-svelte": "^6.1.1",
19-
"svelte": "^3.29.7"
20+
"@rollup/plugin-node-resolve": "^11.0.0",
21+
"@tsconfig/svelte": "^1.0.10",
22+
"rollup": "^2.34.2",
23+
"rollup-plugin-svelte": "^7.0.0",
24+
"svelte": "^3.31.0",
25+
"svelte-check": "^1.1.23",
26+
"svelte-readme": "^1.3.0",
27+
"typescript": "^4.1.3"
2028
},
2129
"repository": {
2230
"type": "git",

rollup.config.js

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,30 @@
11
import resolve from "@rollup/plugin-node-resolve";
22
import svelte from "rollup-plugin-svelte";
3+
import svelteReadme from "svelte-readme";
34
import pkg from "./package.json";
45

5-
export default ["es", "umd"].map((format) => {
6-
const UMD = format === "umd";
6+
const DEV = process.env.ROLLUP_WATCH;
7+
const BUNDLE = process.env.BUNDLE === "true";
78

8-
return {
9-
input: pkg.svelte,
10-
output: {
11-
format,
12-
file: UMD ? pkg.main : pkg.module,
13-
name: UMD ? pkg.name : undefined,
14-
},
15-
plugins: [svelte(), resolve()],
16-
};
17-
});
9+
export default () => {
10+
if (!BUNDLE) {
11+
return svelteReadme({
12+
svelte: { dev: DEV, immutable: true },
13+
minify: !DEV,
14+
});
15+
}
16+
17+
return ["es", "umd"].map((format) => {
18+
const UMD = format === "umd";
19+
20+
return {
21+
input: pkg.svelte,
22+
output: {
23+
format,
24+
file: UMD ? pkg.main : pkg.module,
25+
name: UMD ? pkg.name : undefined,
26+
},
27+
plugins: [svelte(), resolve()],
28+
};
29+
});
30+
};

test.svelte

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<script lang="ts">
2+
import Keydown from "./types";
3+
4+
let showModal = true;
5+
6+
function closeModal() {
7+
showModal = false;
8+
}
9+
</script>
10+
11+
<Keydown
12+
paused={!showModal}
13+
on:Escape={closeModal}
14+
on:combo={(e) => {
15+
console.log(e.detail);
16+
}} />
17+
18+
Toggled
19+
{showModal}
20+
<button
21+
on:click={() => {
22+
showModal = !showModal;
23+
}}>Toggle modal</button>

tsconfig.json

Whitespace-only changes.

types/Keydown.d.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/// <reference types="svelte" />
2+
import { SvelteComponentTyped } from "svelte";
23

34
export interface KeydownProps {
45
/**
@@ -7,11 +8,12 @@ export interface KeydownProps {
78
paused?: boolean;
89
}
910

10-
export default class Keydown {
11-
$$prop_def: KeydownProps;
12-
$$slot_def: {};
13-
14-
$on(eventname: "combo", cb: (event: CustomEvent<string>) => void): () => void;
15-
$on(eventname: "key", cb: (event: CustomEvent<string>) => void): () => void;
16-
$on(eventname: string, cb: (event: Event) => void): () => void;
17-
}
11+
export default class Keydown extends SvelteComponentTyped<
12+
KeydownProps,
13+
{
14+
combo: CustomEvent<string>;
15+
key: CustomEvent<string>;
16+
[key: string]: CustomEvent<any>;
17+
},
18+
{}
19+
> {}

types/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { default } from "./Keydown";
1+
export { default as default } from "./Keydown";

0 commit comments

Comments
 (0)