forked from tsai/budibase
21 changed files with 384 additions and 2698 deletions
@ -0,0 +1,14 @@ |
|||||
|
<script> |
||||
|
import "@spectrum-css/divider/dist/index-vars.css" |
||||
|
export let l = false |
||||
|
export let m = false |
||||
|
export let s = false |
||||
|
|
||||
|
export let vertical = false |
||||
|
</script> |
||||
|
|
||||
|
<hr |
||||
|
class:spectrum-Divider--sizeL={l} |
||||
|
class:spectrum-Divider--sizeM={m} |
||||
|
class:spectrum-Divider--sizeS={s} |
||||
|
class="spectrum-Divider spectrum-Divider--{vertical ? 'vertical' : 'horizontal'} spectrum-Dialog-divider"> |
||||
@ -0,0 +1,38 @@ |
|||||
|
<script> |
||||
|
import "@spectrum-css/progressbar/dist/index-vars.css" |
||||
|
import { tweened } from 'svelte/motion'; |
||||
|
import { cubicOut } from 'svelte/easing'; |
||||
|
|
||||
|
export let value = false |
||||
|
export let easing = cubicOut |
||||
|
export let duration = 1000; |
||||
|
export let width = false; |
||||
|
export let sideLabel = false |
||||
|
export let overBackground = false |
||||
|
|
||||
|
export let s = false; |
||||
|
export let m = false; |
||||
|
export let l = false; |
||||
|
export let xl = false; |
||||
|
|
||||
|
const progress = tweened(0, { |
||||
|
duration: duration, |
||||
|
easing: easing |
||||
|
}); |
||||
|
|
||||
|
$: if (value) $progress = value |
||||
|
</script> |
||||
|
|
||||
|
|
||||
|
<div class:spectrum-ProgressBar--indeterminate={!value} class:spectrum-ProgressBar--sideLabel={sideLabel} class:spectrum-ProgressBar--sizeS={s} class:spectrum-ProgressBar--sizeM={m} class:spectrum-ProgressBar--sizeL={l} class:spectrum-ProgressBar--sizeXL={xl} class="spectrum-ProgressBar" value={$progress} role="progressbar" aria-valuenow={$progress} aria-valuemin="0" aria-valuemax="100" style={width ? `width: ${width}px;` : ''}> |
||||
|
{#if $$slots} |
||||
|
<div class:spectrum-FieldLabel--sizeS={s} class:spectrum-FieldLabel--sizeM={m} class:spectrum-FieldLabel--sizeL={l} class:spectrum-FieldLabel--sizeXL={xl} class="spectrum-FieldLabel spectrum-ProgressBar-label"><slot /></div> |
||||
|
{/if} |
||||
|
{#if value} |
||||
|
<div class:spectrum-FieldLabel--sizeS={s} class:spectrum-FieldLabel--sizeM={m} class:spectrum-FieldLabel--sizeL={l} class:spectrum-FieldLabel--sizeXL={xl} class="spectrum-FieldLabel spectrum-ProgressBar-percentage">{Math.round($progress)}%</div> |
||||
|
{/if} |
||||
|
<div class="spectrum-ProgressBar-track"> |
||||
|
<div class="spectrum-ProgressBar-fill" style={value ? `width: ${$progress}%` : ''}></div> |
||||
|
</div> |
||||
|
<div class="spectrum-ProgressBar-label" hidden=""></div> |
||||
|
</div> |
||||
@ -0,0 +1,29 @@ |
|||||
|
<script> |
||||
|
// WIP! Does not yet work. |
||||
|
import "@spectrum-css/progresscircle/dist/index-vars.css" |
||||
|
import { tweened } from 'svelte/motion'; |
||||
|
import { cubicOut } from 'svelte/easing'; |
||||
|
|
||||
|
export let value = false |
||||
|
export let small; |
||||
|
export let large; |
||||
|
|
||||
|
export let overBackground; |
||||
|
</script> |
||||
|
|
||||
|
<div class:spectrum-ProgressBar--indeterminate={!value} class:spectrum-ProgressCircle--small={small} class:spectrum-ProgressCircle--large={large} class="spectrum-ProgressCircle"> |
||||
|
<div class="spectrum-ProgressCircle-track"></div> |
||||
|
<div class="spectrum-ProgressCircle-fills"> |
||||
|
<div class="spectrum-ProgressCircle-fillMask1"> |
||||
|
<div class="spectrum-ProgressCircle-fillSubMask1"> |
||||
|
<div class="spectrum-ProgressCircle-fill"></div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="spectrum-ProgressCircle-fillMask2"> |
||||
|
<div class="spectrum-ProgressCircle-fillSubMask2"> |
||||
|
<div class="spectrum-ProgressCircle-fill"></div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
@ -0,0 +1,35 @@ |
|||||
|
<script> |
||||
|
import { getContext, onMount } from 'svelte' |
||||
|
import Portal from "svelte-portal" |
||||
|
export let title |
||||
|
export let icon = ''; |
||||
|
|
||||
|
const selected = getContext('tab') |
||||
|
let tab; |
||||
|
let tabInfo |
||||
|
const setTabInfo = () => { |
||||
|
tabInfo = tab.getBoundingClientRect() |
||||
|
if ($selected.title === title) { |
||||
|
$selected.info = tabInfo |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
onMount(() => { |
||||
|
setTabInfo() |
||||
|
}) |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
<div bind:this={tab} on:click={() => $selected = {...$selected, title, info: tab.getBoundingClientRect()} } class:is-selected={$selected.title === title} class="spectrum-Tabs-item" tabindex="0"> |
||||
|
{#if icon} |
||||
|
<svg class="spectrum-Icon spectrum-Icon--sizeM" focusable="false" aria-hidden="true" aria-label="Folder"> |
||||
|
<use xlink:href="#spectrum-icon-18-{icon}" /> |
||||
|
</svg> |
||||
|
{/if} |
||||
|
<span class="spectrum-Tabs-itemLabel">{title}</span> |
||||
|
</div> |
||||
|
{#if $selected.title === title} |
||||
|
<Portal target=".spectrum-Tabs-content-{$selected.id}"> |
||||
|
<slot /> |
||||
|
</Portal> |
||||
|
{/if} |
||||
@ -0,0 +1,71 @@ |
|||||
|
<script> |
||||
|
import "@spectrum-css/tabs/dist/index-vars.css" |
||||
|
import { writable } from 'svelte/store' |
||||
|
import { onMount, setContext, createEventDispatcher } from 'svelte' |
||||
|
|
||||
|
export let selected; |
||||
|
export let vertical = false |
||||
|
let _id = id() |
||||
|
const tab = writable({title: selected, id: _id}) |
||||
|
setContext('tab', tab) |
||||
|
|
||||
|
let container; |
||||
|
|
||||
|
const dispatch = createEventDispatcher() |
||||
|
|
||||
|
$: selected = $tab.title |
||||
|
$: selected = dispatch('select', selected) |
||||
|
|
||||
|
let top, left, width, height; |
||||
|
$: calculateIndicatorLength($tab) |
||||
|
$: calculateIndicatorOffset($tab) |
||||
|
|
||||
|
function calculateIndicatorLength() { |
||||
|
if (!vertical) { |
||||
|
width = $tab.info?.width + 24 + 'px' |
||||
|
height = $tab.info?.height |
||||
|
} else { |
||||
|
height = $tab.info?.height + 4 + 'px' |
||||
|
width = $tab.info?.width |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function calculateIndicatorOffset() { |
||||
|
if (!vertical) { |
||||
|
left = $tab.info?.left - container?.getBoundingClientRect().left - 12 + 'px' |
||||
|
top = $tab.info?.top |
||||
|
} else { |
||||
|
top = $tab.info?.top - container?.getBoundingClientRect().top + 'px' |
||||
|
left = $tab.info?.left |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
onMount(() => { |
||||
|
calculateIndicatorLength() |
||||
|
calculateIndicatorOffset() |
||||
|
}) |
||||
|
|
||||
|
function id() { |
||||
|
return ( |
||||
|
"_" + |
||||
|
Math.random() |
||||
|
.toString(36) |
||||
|
.substr(2, 9) |
||||
|
) |
||||
|
} |
||||
|
</script> |
||||
|
<div bind:this={container} class="selected-border spectrum-Tabs spectrum-Tabs--{vertical ? 'vertical' : 'horizontal'}"> |
||||
|
<slot /> |
||||
|
<div class="spectrum-Tabs-selectionIndicator indicator-transition" style="width: {width}; height: {height}; left: {left}; top: {top};"></div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="spectrum-Tabs-content spectrum-Tabs-content-{_id}" /> |
||||
|
|
||||
|
<style> |
||||
|
.spectrum-Tabs-content { |
||||
|
margin-top: var(--spectrum-global-dimension-static-size-150); |
||||
|
} |
||||
|
.indicator-transition { |
||||
|
transition: all 200ms |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,29 @@ |
|||||
|
<script> |
||||
|
import "@spectrum-css/typography/dist/index-vars.css" |
||||
|
|
||||
|
// Sizes |
||||
|
export let xxxl = false; |
||||
|
export let xxl = false; |
||||
|
export let xl = false; |
||||
|
export let l = false; |
||||
|
export let m = false; |
||||
|
export let s = false; |
||||
|
export let xs = false; |
||||
|
export let xxs = false; |
||||
|
|
||||
|
export let serif = false; |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
<p class="spectrum-Body" |
||||
|
class:spectrum-Body--serif={serif} |
||||
|
class:spectrum-Body--sizeXXXL={xxxl} |
||||
|
class:spectrum-Body--sizeXXL={xxl} |
||||
|
class:spectrum-Body--sizeXL={xl} |
||||
|
class:spectrum-Body--sizeL={l} |
||||
|
class:spectrum-Body--sizeM={m} |
||||
|
class:spectrum-Body--sizeS={s} |
||||
|
class:spectrum-Body--sizeXS={xs} |
||||
|
class:spectrum-Body--sizeXXS={xxs}> |
||||
|
<slot /> |
||||
|
</p> |
||||
@ -0,0 +1,20 @@ |
|||||
|
<script> |
||||
|
import "@spectrum-css/typography/dist/index-vars.css" |
||||
|
|
||||
|
// Sizes |
||||
|
export let xl = false; |
||||
|
export let l = false; |
||||
|
export let m = false; |
||||
|
export let s = false; |
||||
|
export let xs = false; |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
<code class="spectrum-Code" |
||||
|
class:spectrum-Code--sizeXL={xl} |
||||
|
class:spectrum-Code--sizeL={l} |
||||
|
class:spectrum-Code--sizeM={m} |
||||
|
class:spectrum-Code--sizeS={s} |
||||
|
class:spectrum-Code--sizeXS={xs}> |
||||
|
<slot /> |
||||
|
</code> |
||||
@ -0,0 +1,21 @@ |
|||||
|
<script> |
||||
|
import "@spectrum-css/typography/dist/index-vars.css" |
||||
|
|
||||
|
// Sizes |
||||
|
export let xl = false; |
||||
|
export let l = false; |
||||
|
export let m = false; |
||||
|
export let s = false; |
||||
|
|
||||
|
export let serif = false; |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
<p class="spectrum-Detail" |
||||
|
class:spectrum-Detail--serif={serif} |
||||
|
class:spectrum-Detail--sizeXL={xl} |
||||
|
class:spectrum-Detail--sizeL={l} |
||||
|
class:spectrum-Detail--sizeM={m} |
||||
|
class:spectrum-Detail--sizeS={s}> |
||||
|
<slot /> |
||||
|
</p> |
||||
@ -0,0 +1,78 @@ |
|||||
|
<script> |
||||
|
import "@spectrum-css/typography/dist/index-vars.css" |
||||
|
|
||||
|
// Level |
||||
|
export let h1 = false; |
||||
|
export let h2 = false; |
||||
|
export let h3 = false; |
||||
|
export let h4 = false; |
||||
|
|
||||
|
// Sizes |
||||
|
export let xxxl = false; |
||||
|
export let xxl = false; |
||||
|
export let xl = false; |
||||
|
export let l = false; |
||||
|
export let m = false; |
||||
|
export let s = false; |
||||
|
export let xs = false; |
||||
|
export let xxs = false; |
||||
|
|
||||
|
export let serif = false; |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
{#if h1} |
||||
|
<h1 class="spectrum-Heading" |
||||
|
class:spectrum-Heading--serif={serif} |
||||
|
class:spectrum-Heading--sizeXXXL={xxxl} |
||||
|
class:spectrum-Heading--sizeXXL={xxl} |
||||
|
class:spectrum-Heading--sizeXL={xl} |
||||
|
class:spectrum-Heading--sizeL={l} |
||||
|
class:spectrum-Heading--sizeM={m} |
||||
|
class:spectrum-Heading--sizeS={s} |
||||
|
class:spectrum-Heading--sizeXS={xs} |
||||
|
class:spectrum-Heading--sizeXXS={xxs}> |
||||
|
<slot /> |
||||
|
</h1> |
||||
|
{:else if h2} |
||||
|
<h2 class="spectrum-Heading" |
||||
|
class:spectrum-Heading--serif={serif} |
||||
|
class:spectrum-Heading--sizeXXXL={xxxl} |
||||
|
class:spectrum-Heading--sizeXXL={xxl} |
||||
|
class:spectrum-Heading--sizeXL={xl} |
||||
|
class:spectrum-Heading--sizeL={l} |
||||
|
class:spectrum-Heading--sizeM={m} |
||||
|
class:spectrum-Heading--sizeS={s} |
||||
|
class:spectrum-Heading--sizeXS={xs} |
||||
|
class:spectrum-Heading--sizeXXS={xxs}> |
||||
|
<slot /> |
||||
|
</h2> |
||||
|
{:else if h3} |
||||
|
<h3 class="spectrum-Heading" |
||||
|
class:spectrum-Heading--serif={serif} |
||||
|
class:spectrum-Heading--sizeXXXL={xxxl} |
||||
|
class:spectrum-Heading--sizeXXL={xxl} |
||||
|
class:spectrum-Heading--sizeXL={xl} |
||||
|
class:spectrum-Heading--sizeL={l} |
||||
|
class:spectrum-Heading--sizeM={m} |
||||
|
class:spectrum-Heading--sizeS={s} |
||||
|
class:spectrum-Heading--sizeXS={xs} |
||||
|
class:spectrum-Heading--sizeXXS={xxs}> |
||||
|
<slot /> |
||||
|
</h3> |
||||
|
{:else if h4} |
||||
|
<h4 class="spectrum-Heading" |
||||
|
class:spectrum-Heading--serif={serif} |
||||
|
class:spectrum-Heading--sizeXXXL={xxxl} |
||||
|
class:spectrum-Heading--sizeXXL={xxl} |
||||
|
class:spectrum-Heading--sizeXL={xl} |
||||
|
class:spectrum-Heading--sizeL={l} |
||||
|
class:spectrum-Heading--sizeM={m} |
||||
|
class:spectrum-Heading--sizeS={s} |
||||
|
class:spectrum-Heading--sizeXS={xs} |
||||
|
class:spectrum-Heading--sizeXXS={xxs}> |
||||
|
<slot /> |
||||
|
</h4> |
||||
|
{:else} |
||||
|
SPECIFY HEADING SIZE! |
||||
|
{/if} |
||||
File diff suppressed because it is too large
Loading…
Reference in new issue