feat: support skeleton prop

This commit is contained in:
Eric Liu 2020-07-24 17:14:12 -07:00
commit bd6bd15c79
5 changed files with 136 additions and 88 deletions

View file

@ -6,7 +6,12 @@
</script> </script>
{#if skeleton} {#if skeleton}
<AccordionSkeleton {...$$restProps} /> <AccordionSkeleton
{...$$restProps}
on:click
on:mouseover
on:mouseenter
on:mouseleave />
{:else} {:else}
<ul <ul
class:bx--accordion={true} class:bx--accordion={true}

View file

@ -1,8 +1,19 @@
<script> <script>
export let noTrailingSlash = false; export let noTrailingSlash = false;
export let skeleton = false;
import BreadcrumbSkeleton from "./Breadcrumb.Skeleton.svelte";
</script> </script>
<nav {#if skeleton}
<BreadcrumbSkeleton
{...$$restProps}
on:click
on:mouseover
on:mouseenter
on:mouseleave />
{:else}
<nav
aria-label="Breadcrumb" aria-label="Breadcrumb"
{...$$restProps} {...$$restProps}
on:click on:click
@ -14,4 +25,5 @@
class:bx--breadcrumb--no-trailing-slash={noTrailingSlash}> class:bx--breadcrumb--no-trailing-slash={noTrailingSlash}>
<slot /> <slot />
</ol> </ol>
</nav> </nav>
{/if}

View file

@ -1,5 +1,6 @@
<script> <script>
export let as = undefined; export let as = undefined;
export let skeleton = false;
export let disabled = false; export let disabled = false;
export let href = undefined; export let href = undefined;
export let icon = undefined; export let icon = undefined;
@ -14,6 +15,7 @@
export let ref = null; export let ref = null;
import { getContext } from "svelte"; import { getContext } from "svelte";
import ButtonSkeleton from "./Button.Skeleton.svelte";
const ctx = getContext("ComposedModal"); const ctx = getContext("ComposedModal");
@ -40,16 +42,27 @@
hasIconOnly && hasIconOnly &&
tooltipAlignment && tooltipAlignment &&
`bx--tooltip--align-${tooltipAlignment}`, `bx--tooltip--align-${tooltipAlignment}`,
$$restProps.class $$restProps.class,
] ]
.filter(Boolean) .filter(Boolean)
.join(" ") .join(" "),
}; };
</script> </script>
{#if as} {#if skeleton}
<ButtonSkeleton
{href}
small={size === 'small'}
{...$$restProps}
style={hasIconOnly && 'width: 3rem;'}
on:click
on:mouseover
on:mouseenter
on:mouseleave />
{:else}
{#if as}
<slot props={buttonProps} /> <slot props={buttonProps} />
{:else if href && !disabled} {:else if href && !disabled}
<!-- svelte-ignore a11y-missing-attribute --> <!-- svelte-ignore a11y-missing-attribute -->
<a <a
bind:this={ref} bind:this={ref}
@ -70,7 +83,7 @@
aria-label={iconDescription} /> aria-label={iconDescription} />
{/if} {/if}
</a> </a>
{:else} {:else}
<button <button
bind:this={ref} bind:this={ref}
{...buttonProps} {...buttonProps}
@ -90,4 +103,5 @@
aria-label={iconDescription} /> aria-label={iconDescription} />
{/if} {/if}
</button> </button>
{/if}
{/if} {/if}

View file

@ -1,4 +1,5 @@
<script> <script>
export let skeleton = false;
export let indeterminate = false; export let indeterminate = false;
export let readonly = false; export let readonly = false;
export let checked = false; export let checked = false;
@ -11,13 +12,22 @@
export let ref = null; export let ref = null;
import { createEventDispatcher } from "svelte"; import { createEventDispatcher } from "svelte";
import CheckboxSkeleton from "./Checkbox.Skeleton.svelte";
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
$: dispatch("check", checked); $: dispatch("check", checked);
</script> </script>
<div {#if skeleton}
<CheckboxSkeleton
{...$$restProps}
on:click
on:mouseover
on:mouseenter
on:mouseleave />
{:else}
<div
class:bx--form-item={true} class:bx--form-item={true}
class:bx--checkbox-wrapper={true} class:bx--checkbox-wrapper={true}
{...$$restProps} {...$$restProps}
@ -46,4 +56,5 @@
{labelText} {labelText}
</span> </span>
</label> </label>
</div> </div>
{/if}

View file

@ -1,6 +1,7 @@
<script> <script>
export let type = "single"; // "single" | "inline" | "multi" export let type = "single"; // "single" | "inline" | "multi"
export let code = undefined; export let code = undefined;
export let expanded = false;
export let light = false; export let light = false;
export let skeleton = false; export let skeleton = false;
export let copyButtonDescription = undefined; export let copyButtonDescription = undefined;
@ -9,6 +10,7 @@
export let feedbackTimeout = 2000; export let feedbackTimeout = 2000;
export let showLessText = "Show less"; export let showLessText = "Show less";
export let showMoreText = "Show more"; export let showMoreText = "Show more";
export let showMoreLess = false;
export let id = "ccs-" + Math.random().toString(36); export let id = "ccs-" + Math.random().toString(36);
export let ref = null; export let ref = null;
@ -19,8 +21,6 @@
import { CopyButton } from "../CopyButton"; import { CopyButton } from "../CopyButton";
import CodeSnippetSkeleton from "./CodeSnippet.Skeleton.svelte"; import CodeSnippetSkeleton from "./CodeSnippet.Skeleton.svelte";
$: showMoreLess = false;
$: expanded = false;
$: expandText = expanded ? showLessText : showMoreText; $: expandText = expanded ? showLessText : showMoreText;
afterUpdate(() => { afterUpdate(() => {
@ -31,7 +31,13 @@
</script> </script>
{#if skeleton} {#if skeleton}
<CodeSnippetSkeleton {type} {...$$restProps} /> <CodeSnippetSkeleton
{type}
{...$$restProps}
on:click
on:mouseover
on:mouseenter
on:mouseleave />
{:else} {:else}
{#if type === 'inline'} {#if type === 'inline'}
<Copy <Copy