Skip to content

Commit

Permalink
v2 (#6)
Browse files Browse the repository at this point in the history
  • Loading branch information
metonym authored Nov 29, 2020
1 parent 9ab76af commit 5cbc337
Show file tree
Hide file tree
Showing 10 changed files with 362 additions and 51 deletions.
4 changes: 3 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
language: node_js
node_js: 12
cache: yarn
script: yarn prepack
script:
- yarn svelte-check
- yarn prepack
15 changes: 7 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,11 @@ Customize the toggle switch descriptors through the "on" and "off" props.
<Toggle on="On" off="Off" />
```

Alternatively, you can use named slots:
Alternatively, you can override the default slot:

```svelte
<Toggle on off>
<span style="margin-left: .5rem" slot="on">"on" descriptor</span>
<span style="margin-left: .5rem" slot="off">"off" descriptor</span>
<Toggle let:toggled>
<span style="margin-left: .5rem">{toggled ? "Yes" : "No"}</span>
</Toggle>
```

Expand Down Expand Up @@ -120,20 +119,20 @@ API for the default `Toggle` component.

## Dispatched events

The `Toggle` component dispatches a "change" event.
The `Toggle` component dispatches a "toggle" event.

```svelte
<script>
let events = [];
</script>
<Toggle
on:change={({ detail }) => {
events = [...events, detail.toggled];
on:toggle={(e) => {
events = [...events, e.detail];
}}
/>
<strong>Events:</strong> {events.join(', ')}
<strong>on:toggle</strong> {events.join(', ')}
```

## Forwarded events
Expand Down
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"types": "./types/index.d.ts",
"sideEffects": false,
"scripts": {
"svelte-check": "svelte-check",
"dev": "rollup -cw",
"predeploy": "rollup -c",
"deploy": "npx gh-pages -d dist",
Expand All @@ -20,7 +21,8 @@
"@tsconfig/svelte": "^1.0.10",
"rollup": "^2.33.2",
"rollup-plugin-svelte": "^6.1.1",
"svelte": "^3.29.7",
"svelte": "^3.30.0",
"svelte-check": "^1.1.17",
"svelte-readme": "^1.1.0",
"typescript": "^4.0.5"
},
Expand Down
1 change: 1 addition & 0 deletions rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const BUNDLE = process.env.BUNDLE === "true";
export default () => {
if (!BUNDLE) {
return svelteReadme({
svelte: { immutable: true },
minify: !DEV,
prefixUrl: "https://github.com/metonym/svelte-toggle/tree/master/",
style: `
Expand Down
18 changes: 9 additions & 9 deletions src/Toggle.svelte
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
<script>
/**
* @slot {{ toggled: boolean; }}
*/
export let label = "Label";
export let hideLabel = false;
export let small = false;
Expand Down Expand Up @@ -26,9 +30,9 @@
const dispatch = createEventDispatcher();
/**
* @event {{ toggled: boolean; }} change
* @event {boolean} toggle
*/
$: dispatch("change", { toggled });
$: dispatch("toggle", toggled);
</script>

<style>
Expand Down Expand Up @@ -136,12 +140,8 @@
on:focus
on:blur
on:keydown />
{#if toggled}
{#if on}
<slot name="on"><span>{on}</span></slot>
{/if}
{:else if off}
<slot name="off"><span>{off}</span></slot>
{/if}
<slot {toggled}>
{#if on && off}<span>{toggled ? on : off}</span>{/if}
</slot>
</div>
</ToggleCore>
30 changes: 30 additions & 0 deletions test.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<script lang="ts">
import Toggle, { ToggleCore } from "./types";
let toggled = true;
</script>

<Toggle
label="label"
hideLabel
on="On"
off="Off"
on:toggle={(e) => {
console.log(e.detail);
}} />

<Toggle let:toggled={isToggled}>
<span style="margin-left: .5rem">{isToggled ? 'Yes' : 'No'}</span>
</Toggle>

<ToggleCore {toggled} let:label let:button>
<!-- svelte-ignore a11y-label-has-associated-control -->
<label {...label}>Label</label>
<button
{...button}
on:click={() => {
toggled = !toggled;
}}>
{toggled ? 'On' : 'Off'}
</button>
</ToggleCore>
32 changes: 15 additions & 17 deletions types/Toggle.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/// <reference types="svelte" />
import { SvelteComponent } from "svelte";

export interface ToggleProps extends svelte.JSX.HTMLAttributes<HTMLElementTagNameMap["button"]> {
/**
Expand Down Expand Up @@ -52,20 +53,17 @@ export interface ToggleProps extends svelte.JSX.HTMLAttributes<HTMLElementTagNam
untoggledColor?: string;
}

export default class Toggle {
$$prop_def: ToggleProps;
$$slot_def: {
off: {};
on: {};
};

$on(eventname: "change", cb: (event: CustomEvent<{ toggled: boolean }>) => void): () => void;
$on(eventname: "click", cb: (event: WindowEventMap["click"]) => void): () => void;
$on(eventname: "mouseover", cb: (event: WindowEventMap["mouseover"]) => void): () => void;
$on(eventname: "mouseenter", cb: (event: WindowEventMap["mouseenter"]) => void): () => void;
$on(eventname: "mouseout", cb: (event: WindowEventMap["mouseout"]) => void): () => void;
$on(eventname: "focus", cb: (event: WindowEventMap["focus"]) => void): () => void;
$on(eventname: "blur", cb: (event: WindowEventMap["blur"]) => void): () => void;
$on(eventname: "keydown", cb: (event: WindowEventMap["keydown"]) => void): () => void;
$on(eventname: string, cb: (event: Event) => void): () => void;
}
export default class Toggle extends SvelteComponent<
ToggleProps,
{
toggle: CustomEvent<boolean>;
click: WindowEventMap["click"];
mouseover: WindowEventMap["mouseover"];
mouseenter: WindowEventMap["mouseenter"];
mouseout: WindowEventMap["mouseout"];
focus: WindowEventMap["focus"];
blur: WindowEventMap["blur"];
keydown: WindowEventMap["keydown"];
},
{ default: { toggled: boolean } }
> {}
14 changes: 7 additions & 7 deletions types/ToggleCore.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/// <reference types="svelte" />
import { SvelteComponent } from "svelte";

export interface ToggleCoreProps {
/**
Expand All @@ -17,9 +18,10 @@ export interface ToggleCoreProps {
disabled?: boolean;
}

export default class ToggleCore {
$$prop_def: ToggleCoreProps;
$$slot_def: {
export default class ToggleCore extends SvelteComponent<
ToggleCoreProps,
{},
{
default: {
label: { for: string };
button: {
Expand All @@ -31,7 +33,5 @@ export default class ToggleCore {
[key: string]: any;
};
};
};

$on(eventname: string, cb: (event: Event) => void): () => void;
}
}
> {}
2 changes: 1 addition & 1 deletion types/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export { default } from "./Toggle";
export { default as ToggleCore } from "./ToggleCore";
export { default } from "./Toggle";
Loading

0 comments on commit 5cbc337

Please sign in to comment.