sveltacular 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +11 -0
  2. package/dist/forms/button/button.stories.svelte +33 -0
  3. package/dist/forms/button/button.stories.svelte.d.ts +14 -0
  4. package/dist/forms/button/button.svelte +129 -0
  5. package/dist/forms/button/button.svelte.d.ts +26 -0
  6. package/dist/forms/check-box/check-box.stories.svelte +13 -0
  7. package/dist/forms/check-box/check-box.stories.svelte.d.ts +14 -0
  8. package/dist/forms/check-box/check-box.svelte +26 -0
  9. package/dist/forms/check-box/check-box.svelte.d.ts +21 -0
  10. package/dist/forms/check-box/check-input.svelte +32 -0
  11. package/dist/forms/check-box/check-input.svelte.d.ts +20 -0
  12. package/dist/forms/date-box/date-box.stories.svelte +17 -0
  13. package/dist/forms/date-box/date-box.stories.svelte.d.ts +14 -0
  14. package/dist/forms/date-box/date-box.svelte +68 -0
  15. package/dist/forms/date-box/date-box.svelte.d.ts +23 -0
  16. package/dist/forms/dropdown-box/dropdown-box.stories.svelte +15 -0
  17. package/dist/forms/dropdown-box/dropdown-box.stories.svelte.d.ts +14 -0
  18. package/dist/forms/dropdown-box/dropdown-box.svelte +36 -0
  19. package/dist/forms/dropdown-box/dropdown-box.svelte.d.ts +25 -0
  20. package/dist/forms/form-field.svelte +22 -0
  21. package/dist/forms/form-field.svelte.d.ts +19 -0
  22. package/dist/forms/form-label.svelte +14 -0
  23. package/dist/forms/form-label.svelte.d.ts +19 -0
  24. package/dist/forms/form.svelte +12 -0
  25. package/dist/forms/form.svelte.d.ts +20 -0
  26. package/dist/forms/number-box/number-box.stories.svelte +21 -0
  27. package/dist/forms/number-box/number-box.stories.svelte.d.ts +14 -0
  28. package/dist/forms/number-box/number-box.svelte +83 -0
  29. package/dist/forms/number-box/number-box.svelte.d.ts +28 -0
  30. package/dist/forms/switch/switch.stories.svelte +13 -0
  31. package/dist/forms/switch/switch.stories.svelte.d.ts +14 -0
  32. package/dist/forms/switch/switch.svelte +73 -0
  33. package/dist/forms/switch/switch.svelte.d.ts +20 -0
  34. package/dist/forms/text-area/text-area.stories.svelte +13 -0
  35. package/dist/forms/text-area/text-area.stories.svelte.d.ts +14 -0
  36. package/dist/forms/text-area/text-area.svelte +34 -0
  37. package/dist/forms/text-area/text-area.svelte.d.ts +25 -0
  38. package/dist/forms/text-box/text-box.stories.svelte +17 -0
  39. package/dist/forms/text-box/text-box.stories.svelte.d.ts +14 -0
  40. package/dist/forms/text-box/text-box.svelte +83 -0
  41. package/dist/forms/text-box/text-box.svelte.d.ts +30 -0
  42. package/dist/forms/upload-dropzone/upload-dropzone.stories.svelte +11 -0
  43. package/dist/forms/upload-dropzone/upload-dropzone.stories.svelte.d.ts +14 -0
  44. package/dist/forms/upload-dropzone/upload-dropzone.svelte +82 -0
  45. package/dist/forms/upload-dropzone/upload-dropzone.svelte.d.ts +18 -0
  46. package/dist/generic/card/card.stories.svelte +9 -0
  47. package/dist/generic/card/card.stories.svelte.d.ts +14 -0
  48. package/dist/generic/card/card.svelte +39 -0
  49. package/dist/generic/card/card.svelte.d.ts +19 -0
  50. package/dist/generic/divider/divider.stories.svelte +9 -0
  51. package/dist/generic/divider/divider.stories.svelte.d.ts +14 -0
  52. package/dist/generic/divider/divider.svelte +10 -0
  53. package/dist/generic/divider/divider.svelte.d.ts +23 -0
  54. package/dist/generic/link/link.stories.svelte +21 -0
  55. package/dist/generic/link/link.stories.svelte.d.ts +14 -0
  56. package/dist/generic/link/link.svelte +41 -0
  57. package/dist/generic/link/link.svelte.d.ts +22 -0
  58. package/dist/generic/overlay.svelte +24 -0
  59. package/dist/generic/overlay.svelte.d.ts +27 -0
  60. package/dist/generic/pill/pill.stories.svelte +29 -0
  61. package/dist/generic/pill/pill.stories.svelte.d.ts +14 -0
  62. package/dist/generic/pill/pill.svelte +35 -0
  63. package/dist/generic/pill/pill.svelte.d.ts +20 -0
  64. package/dist/generic/scorecard/scorecard.stories.svelte +9 -0
  65. package/dist/generic/scorecard/scorecard.stories.svelte.d.ts +14 -0
  66. package/dist/generic/scorecard/scorecard.svelte +28 -0
  67. package/dist/generic/scorecard/scorecard.svelte.d.ts +18 -0
  68. package/dist/icons/angle-right-icon.svelte +12 -0
  69. package/dist/icons/angle-right-icon.svelte.d.ts +14 -0
  70. package/dist/icons/angle-up-icon.svelte +9 -0
  71. package/dist/icons/angle-up-icon.svelte.d.ts +23 -0
  72. package/dist/icons/home-icon.svelte +8 -0
  73. package/dist/icons/home-icon.svelte.d.ts +14 -0
  74. package/dist/icons/svg-icon.svelte +16 -0
  75. package/dist/icons/svg-icon.svelte.d.ts +24 -0
  76. package/dist/icons/upload-icon.svelte +9 -0
  77. package/dist/icons/upload-icon.svelte.d.ts +23 -0
  78. package/dist/index.d.ts +0 -0
  79. package/dist/index.js +2 -0
  80. package/dist/layout/flex-col.svelte +14 -0
  81. package/dist/layout/flex-col.svelte.d.ts +20 -0
  82. package/dist/layout/flex-item.svelte +7 -0
  83. package/dist/layout/flex-item.svelte.d.ts +27 -0
  84. package/dist/layout/flex-row.svelte +33 -0
  85. package/dist/layout/flex-row.svelte.d.ts +20 -0
  86. package/dist/modals/alert.stories.svelte +19 -0
  87. package/dist/modals/alert.stories.svelte.d.ts +14 -0
  88. package/dist/modals/alert.svelte +44 -0
  89. package/dist/modals/alert.svelte.d.ts +23 -0
  90. package/dist/modals/confirm.stories.svelte +9 -0
  91. package/dist/modals/confirm.stories.svelte.d.ts +14 -0
  92. package/dist/modals/confirm.svelte +57 -0
  93. package/dist/modals/confirm.svelte.d.ts +27 -0
  94. package/dist/modals/dialog-body.svelte +9 -0
  95. package/dist/modals/dialog-body.svelte.d.ts +27 -0
  96. package/dist/modals/dialog-footer.svelte +19 -0
  97. package/dist/modals/dialog-footer.svelte.d.ts +27 -0
  98. package/dist/modals/dialog-header.svelte +38 -0
  99. package/dist/modals/dialog-header.svelte.d.ts +20 -0
  100. package/dist/modals/dialog-window.svelte +33 -0
  101. package/dist/modals/dialog-window.svelte.d.ts +19 -0
  102. package/dist/modals/prompt.stories.svelte +9 -0
  103. package/dist/modals/prompt.stories.svelte.d.ts +14 -0
  104. package/dist/modals/prompt.svelte +66 -0
  105. package/dist/modals/prompt.svelte.d.ts +30 -0
  106. package/dist/navigation/accordian/accordian.stories.svelte +18 -0
  107. package/dist/navigation/accordian/accordian.stories.svelte.d.ts +14 -0
  108. package/dist/navigation/accordian/accordian.svelte +62 -0
  109. package/dist/navigation/accordian/accordian.svelte.d.ts +19 -0
  110. package/dist/navigation/app-bar/app-bar.stories.svelte +21 -0
  111. package/dist/navigation/app-bar/app-bar.stories.svelte.d.ts +14 -0
  112. package/dist/navigation/app-bar/app-bar.svelte +53 -0
  113. package/dist/navigation/app-bar/app-bar.svelte.d.ts +22 -0
  114. package/dist/navigation/breadcrumbs/breadcrumbs.stories.svelte +16 -0
  115. package/dist/navigation/breadcrumbs/breadcrumbs.stories.svelte.d.ts +14 -0
  116. package/dist/navigation/breadcrumbs/breadcrumbs.svelte +56 -0
  117. package/dist/navigation/breadcrumbs/breadcrumbs.svelte.d.ts +20 -0
  118. package/dist/navigation/side-bar/side-bar.stories.svelte +19 -0
  119. package/dist/navigation/side-bar/side-bar.stories.svelte.d.ts +14 -0
  120. package/dist/navigation/side-bar/side-bar.svelte +33 -0
  121. package/dist/navigation/side-bar/side-bar.svelte.d.ts +18 -0
  122. package/dist/navigation/tabs/tab-group.svelte +20 -0
  123. package/dist/navigation/tabs/tab-group.svelte.d.ts +21 -0
  124. package/dist/navigation/tabs/tab.svelte +87 -0
  125. package/dist/navigation/tabs/tab.svelte.d.ts +21 -0
  126. package/dist/navigation/tabs/tabs.stories.svelte +20 -0
  127. package/dist/navigation/tabs/tabs.stories.svelte.d.ts +14 -0
  128. package/dist/tables/data-grid.stories.svelte +40 -0
  129. package/dist/tables/data-grid.stories.svelte.d.ts +14 -0
  130. package/dist/tables/data-grid.svelte +43 -0
  131. package/dist/tables/data-grid.svelte.d.ts +18 -0
  132. package/dist/tables/table-body.svelte +3 -0
  133. package/dist/tables/table-body.svelte.d.ts +27 -0
  134. package/dist/tables/table-cell.svelte +13 -0
  135. package/dist/tables/table-cell.svelte.d.ts +18 -0
  136. package/dist/tables/table-footer-cell.svelte +12 -0
  137. package/dist/tables/table-footer-cell.svelte.d.ts +18 -0
  138. package/dist/tables/table-footer-row.svelte +3 -0
  139. package/dist/tables/table-footer-row.svelte.d.ts +27 -0
  140. package/dist/tables/table-footer.svelte +11 -0
  141. package/dist/tables/table-footer.svelte.d.ts +27 -0
  142. package/dist/tables/table-header-cell.svelte +18 -0
  143. package/dist/tables/table-header-cell.svelte.d.ts +18 -0
  144. package/dist/tables/table-header-row.svelte +4 -0
  145. package/dist/tables/table-header-row.svelte.d.ts +27 -0
  146. package/dist/tables/table-header.svelte +14 -0
  147. package/dist/tables/table-header.svelte.d.ts +27 -0
  148. package/dist/tables/table-row.svelte +15 -0
  149. package/dist/tables/table-row.svelte.d.ts +27 -0
  150. package/dist/tables/table.svelte +10 -0
  151. package/dist/tables/table.svelte.d.ts +27 -0
  152. package/package.json +73 -0
@@ -0,0 +1,20 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ action?: "get" | "post" | "put" | "delete" | undefined;
5
+ };
6
+ events: {
7
+ submit: CustomEvent<void>;
8
+ } & {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {
12
+ default: {};
13
+ };
14
+ };
15
+ export type FormProps = typeof __propDef.props;
16
+ export type FormEvents = typeof __propDef.events;
17
+ export type FormSlots = typeof __propDef.slots;
18
+ export default class Form extends SvelteComponent<FormProps, FormEvents, FormSlots> {
19
+ }
20
+ export {};
@@ -0,0 +1,21 @@
1
+ <script>import { Meta, Story, Template } from "@storybook/addon-svelte-csf";
2
+ import NumberBox from "./number-box.svelte";
3
+ </script>
4
+
5
+ <Meta title="Forms/NumberBox" component={NumberBox} />
6
+
7
+ <Template let:args>
8
+ <NumberBox {...args}>Value</NumberBox>
9
+ </Template>
10
+
11
+ <Story name="Stanard" args={{ placeholder: 'Enter a Number', type: 'number' }} />
12
+
13
+ <Story
14
+ name="Currency"
15
+ args={{ placeholder: 'Price of tea in china', type: 'currency', decimals: 0, symbol: '$' }}
16
+ />
17
+
18
+ <Story
19
+ name="Units"
20
+ args={{ placeholder: 'Enter your weight', type: 'number', decimals: 0, units: 'pounds' }}
21
+ />
@@ -0,0 +1,14 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export type NumberBoxProps = typeof __propDef.props;
10
+ export type NumberBoxEvents = typeof __propDef.events;
11
+ export type NumberBoxSlots = typeof __propDef.slots;
12
+ export default class NumberBox extends SvelteComponent<NumberBoxProps, NumberBoxEvents, NumberBoxSlots> {
13
+ }
14
+ export {};
@@ -0,0 +1,83 @@
1
+ <script>import { roundToDecimals } from "../../../helpers/round-to-decimals.js";
2
+ import { uniqueId } from "../../../helpers/unique-id.js";
3
+ import FormField from "../form-field.svelte";
4
+ import FormLabel from "../form-label.svelte";
5
+ const id = uniqueId();
6
+ export let value = 0;
7
+ export let placeholder = "";
8
+ export let size = "md";
9
+ export let type = "number";
10
+ export let step = 1;
11
+ export let min = 0;
12
+ export let max = 1e6;
13
+ export let decimals = 0;
14
+ export let symbol = null;
15
+ export let units = null;
16
+ $:
17
+ hasSymbol = symbol !== null;
18
+ const valueChanged = () => {
19
+ value = roundToDecimals(value, decimals);
20
+ };
21
+ </script>
22
+
23
+ <FormField {size}>
24
+ {#if $$slots.default}
25
+ <FormLabel {id}><slot /></FormLabel>
26
+ {/if}
27
+ <div class={type} class:hasSymbol>
28
+ <input
29
+ {id}
30
+ {placeholder}
31
+ bind:value
32
+ type="number"
33
+ {step}
34
+ {min}
35
+ {max}
36
+ on:change={valueChanged}
37
+ />
38
+ {#if symbol}
39
+ <span class="symbol">{symbol}</span>
40
+ {/if}
41
+ {#if units}
42
+ <span class="units">{units}</span>
43
+ {/if}
44
+ </div>
45
+ </FormField>
46
+
47
+ <style>div {
48
+ position: relative;
49
+ }
50
+ div .symbol {
51
+ position: absolute;
52
+ top: 0.32rem;
53
+ left: 0.5rem;
54
+ color: #000;
55
+ font-size: 1.125rem;
56
+ line-height: 1.75rem;
57
+ }
58
+ div .units {
59
+ position: absolute;
60
+ top: 0.32rem;
61
+ right: 2.5rem;
62
+ color: #888;
63
+ font-size: 1rem;
64
+ line-height: 1.75rem;
65
+ text-align: right;
66
+ }
67
+ div input {
68
+ width: 100%;
69
+ padding: 0.5rem 1rem;
70
+ border-radius: 0.25rem;
71
+ border: 1px solid #b7b7b7;
72
+ background-color: #fff;
73
+ color: #5c5c5c;
74
+ font-size: 0.875rem;
75
+ font-weight: 500;
76
+ line-height: 1.25rem;
77
+ transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.2s ease-in-out, fill 0.2s ease-in-out, stroke 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
78
+ user-select: none;
79
+ white-space: nowrap;
80
+ }
81
+ div.hasSymbol input {
82
+ padding-left: 2rem;
83
+ }</style>
@@ -0,0 +1,28 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { FormFieldSizeOptions } from '../../../types/form.js';
3
+ declare const __propDef: {
4
+ props: {
5
+ value?: number | undefined;
6
+ placeholder?: string | undefined;
7
+ size?: FormFieldSizeOptions | undefined;
8
+ type?: ("number" | "currency") | undefined;
9
+ step?: number | undefined;
10
+ min?: number | undefined;
11
+ max?: number | undefined;
12
+ decimals?: number | undefined;
13
+ symbol?: string | null | undefined;
14
+ units?: string | null | undefined;
15
+ };
16
+ events: {
17
+ [evt: string]: CustomEvent<any>;
18
+ };
19
+ slots: {
20
+ default: {};
21
+ };
22
+ };
23
+ export type NumberBoxProps = typeof __propDef.props;
24
+ export type NumberBoxEvents = typeof __propDef.events;
25
+ export type NumberBoxSlots = typeof __propDef.slots;
26
+ export default class NumberBox extends SvelteComponent<NumberBoxProps, NumberBoxEvents, NumberBoxSlots> {
27
+ }
28
+ export {};
@@ -0,0 +1,13 @@
1
+ <script>import { Meta, Story } from "@storybook/addon-svelte-csf";
2
+ import Switch from "./switch.svelte";
3
+ </script>
4
+
5
+ <Meta title="Forms/Switch" component={Switch} />
6
+
7
+ <Story name="Standard">
8
+ <Switch isChecked={true}>Turn on sync</Switch>
9
+ </Story>
10
+
11
+ <Story name="No Label">
12
+ <Switch isChecked={false} />
13
+ </Story>
@@ -0,0 +1,14 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export type SwitchProps = typeof __propDef.props;
10
+ export type SwitchEvents = typeof __propDef.events;
11
+ export type SwitchSlots = typeof __propDef.slots;
12
+ export default class Switch extends SvelteComponent<SwitchProps, SwitchEvents, SwitchSlots> {
13
+ }
14
+ export {};
@@ -0,0 +1,73 @@
1
+ <script>import { uniqueId } from "../../../helpers/unique-id.js";
2
+ import { createEventDispatcher } from "svelte";
3
+ export let isChecked = false;
4
+ const id = uniqueId();
5
+ const dispatch = createEventDispatcher();
6
+ const onClick = () => {
7
+ isChecked = !isChecked;
8
+ };
9
+ </script>
10
+
11
+ <div class:isChecked>
12
+ <input
13
+ type="checkbox"
14
+ bind:checked={isChecked}
15
+ on:change={() => dispatch('change', isChecked)}
16
+ {id}
17
+ />
18
+ <!-- svelte-ignore a11y-interactive-supports-focus -->
19
+ <span
20
+ class="switch"
21
+ on:click={onClick}
22
+ on:keypress={onClick}
23
+ role="checkbox"
24
+ aria-checked={isChecked}
25
+ >
26
+ <span class="switch__toggle" />
27
+ </span>
28
+ {#if $$slots.default}
29
+ <label for={id}>
30
+ <slot />
31
+ </label>
32
+ {/if}
33
+ </div>
34
+
35
+ <style>div {
36
+ line-height: 2rem;
37
+ font-size: 1rem;
38
+ }
39
+ div input {
40
+ display: none;
41
+ }
42
+ div .switch {
43
+ display: inline-block;
44
+ width: 40px;
45
+ height: 20px;
46
+ background-color: #ccc;
47
+ border-radius: 10px;
48
+ position: relative;
49
+ cursor: pointer;
50
+ transition: background-color 0.2s ease-in-out;
51
+ vertical-align: middle;
52
+ }
53
+ div .switch__toggle {
54
+ display: inline-block;
55
+ width: 16px;
56
+ height: 16px;
57
+ background-color: #fff;
58
+ border-radius: 50%;
59
+ position: absolute;
60
+ top: 2px;
61
+ left: 2px;
62
+ transition: left 0.2s ease-in-out;
63
+ }
64
+ div.isChecked .switch {
65
+ background-color: #55f;
66
+ }
67
+ div.isChecked .switch__toggle {
68
+ left: 22px;
69
+ }
70
+ div label {
71
+ vertical-align: middle;
72
+ margin-left: 0.5rem;
73
+ }</style>
@@ -0,0 +1,20 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ isChecked?: boolean | undefined;
5
+ };
6
+ events: {
7
+ change: CustomEvent<boolean>;
8
+ } & {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {
12
+ default: {};
13
+ };
14
+ };
15
+ export type SwitchProps = typeof __propDef.props;
16
+ export type SwitchEvents = typeof __propDef.events;
17
+ export type SwitchSlots = typeof __propDef.slots;
18
+ export default class Switch extends SvelteComponent<SwitchProps, SwitchEvents, SwitchSlots> {
19
+ }
20
+ export {};
@@ -0,0 +1,13 @@
1
+ <script>import { Meta, Story } from "@storybook/addon-svelte-csf";
2
+ import TextArea from "./text-area.svelte";
3
+ </script>
4
+
5
+ <Meta title="Forms/TextArea" component={TextArea} />
6
+
7
+ <Story name="Text Area (small)">
8
+ <TextArea placeholder="Placeholder text" rows={3} size="sm">Form Field</TextArea>
9
+ </Story>
10
+
11
+ <Story name="Text Area (large)">
12
+ <TextArea placeholder="Placeholder text" rows={10} size="lg">Form Field</TextArea>
13
+ </Story>
@@ -0,0 +1,14 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export type TextAreaProps = typeof __propDef.props;
10
+ export type TextAreaEvents = typeof __propDef.events;
11
+ export type TextAreaSlots = typeof __propDef.slots;
12
+ export default class TextArea extends SvelteComponent<TextAreaProps, TextAreaEvents, TextAreaSlots> {
13
+ }
14
+ export {};
@@ -0,0 +1,34 @@
1
+ <script>import { uniqueId } from "../../../helpers/unique-id.js";
2
+ import FormField from "../form-field.svelte";
3
+ import FormLabel from "../form-label.svelte";
4
+ const id = uniqueId();
5
+ export let size = "xl";
6
+ export let value = "";
7
+ export let placeholder = "";
8
+ export let rows = 4;
9
+ export let disabled = false;
10
+ export let required = false;
11
+ export let readonly = false;
12
+ </script>
13
+
14
+ <FormField {size}>
15
+ {#if $$slots.default}
16
+ <FormLabel {id} {required}><slot /></FormLabel>
17
+ {/if}
18
+ <textarea {id} {placeholder} {rows} bind:value {required} {disabled} {readonly} />
19
+ </FormField>
20
+
21
+ <style>textarea {
22
+ width: 100%;
23
+ padding: 0.5rem 1rem;
24
+ border-radius: 0.25rem;
25
+ border: 1px solid #b7b7b7;
26
+ background-color: #fff;
27
+ color: #5c5c5c;
28
+ font-size: 0.875rem;
29
+ font-weight: 500;
30
+ line-height: 1.25rem;
31
+ transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.2s ease-in-out, fill 0.2s ease-in-out, stroke 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
32
+ user-select: none;
33
+ white-space: nowrap;
34
+ }</style>
@@ -0,0 +1,25 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { FormFieldSizeOptions } from '../../../types/form.js';
3
+ declare const __propDef: {
4
+ props: {
5
+ size?: FormFieldSizeOptions | undefined;
6
+ value?: string | undefined;
7
+ placeholder?: string | undefined;
8
+ rows?: number | undefined;
9
+ disabled?: boolean | undefined;
10
+ required?: boolean | undefined;
11
+ readonly?: boolean | undefined;
12
+ };
13
+ events: {
14
+ [evt: string]: CustomEvent<any>;
15
+ };
16
+ slots: {
17
+ default: {};
18
+ };
19
+ };
20
+ export type TextAreaProps = typeof __propDef.props;
21
+ export type TextAreaEvents = typeof __propDef.events;
22
+ export type TextAreaSlots = typeof __propDef.slots;
23
+ export default class TextArea extends SvelteComponent<TextAreaProps, TextAreaEvents, TextAreaSlots> {
24
+ }
25
+ export {};
@@ -0,0 +1,17 @@
1
+ <script>import { Meta, Story } from "@storybook/addon-svelte-csf";
2
+ import TextBox from "./text-box.svelte";
3
+ </script>
4
+
5
+ <Meta title="Forms/TextBox" component={TextBox} />
6
+
7
+ <Story name="Stanard">
8
+ <TextBox
9
+ type="text"
10
+ placeholder="Placeholder text"
11
+ helperText="Here is some additional requirements for the input.">Form Field</TextBox
12
+ >
13
+ </Story>
14
+
15
+ <Story name="Units">
16
+ <TextBox type="text" units="cm" value="10" placeholder="Placeholder text">Desired Length</TextBox>
17
+ </Story>
@@ -0,0 +1,14 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export type TextBoxProps = typeof __propDef.props;
10
+ export type TextBoxEvents = typeof __propDef.events;
11
+ export type TextBoxSlots = typeof __propDef.slots;
12
+ export default class TextBox extends SvelteComponent<TextBoxProps, TextBoxEvents, TextBoxSlots> {
13
+ }
14
+ export {};
@@ -0,0 +1,83 @@
1
+ <script>import { uniqueId } from "../../../helpers/unique-id.js";
2
+ import FormField from "../form-field.svelte";
3
+ import FormLabel from "../form-label.svelte";
4
+ const id = uniqueId();
5
+ export let value = "";
6
+ export let placeholder = "";
7
+ export let helperText = "";
8
+ export let size = "md";
9
+ export let type = "text";
10
+ export let disabled = false;
11
+ export let required = false;
12
+ export let readonly = false;
13
+ export let maxlength = void 0;
14
+ export let minlength = void 0;
15
+ export let pattern = void 0;
16
+ export let units = void 0;
17
+ </script>
18
+
19
+ <FormField {size}>
20
+ {#if $$slots.default}
21
+ <FormLabel {id} {required}><slot /></FormLabel>
22
+ {/if}
23
+ <div>
24
+ <input
25
+ {id}
26
+ {placeholder}
27
+ bind:value
28
+ {...{ type }}
29
+ {disabled}
30
+ {readonly}
31
+ {required}
32
+ {maxlength}
33
+ {minlength}
34
+ {pattern}
35
+ />
36
+ {#if helperText}
37
+ <div class="helper-text">{helperText}</div>
38
+ {/if}
39
+ {#if units}
40
+ <div class="units">{units}</div>
41
+ {/if}
42
+ </div>
43
+ </FormField>
44
+
45
+ <style>div {
46
+ position: relative;
47
+ }
48
+ div input {
49
+ width: 100%;
50
+ padding: 0.5rem 1rem;
51
+ border-radius: 0.25rem;
52
+ border: 1px solid #b7b7b7;
53
+ background-color: #fff;
54
+ color: #5c5c5c;
55
+ font-size: 0.875rem;
56
+ font-weight: 500;
57
+ line-height: 1.25rem;
58
+ transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.2s ease-in-out, fill 0.2s ease-in-out, stroke 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
59
+ user-select: none;
60
+ white-space: nowrap;
61
+ }
62
+ div input::placeholder {
63
+ color: #b7b7b7;
64
+ font-style: italic;
65
+ }
66
+ div .units {
67
+ position: absolute;
68
+ top: 0.32rem;
69
+ right: 1rem;
70
+ color: #888;
71
+ font-size: 1rem;
72
+ line-height: 1.75rem;
73
+ text-align: right;
74
+ }
75
+ div .helper-text {
76
+ font-size: 0.75rem;
77
+ font-weight: 300;
78
+ line-height: 1.2rem;
79
+ display: none;
80
+ }
81
+ div input:focus + .helper-text {
82
+ display: block;
83
+ }</style>
@@ -0,0 +1,30 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { AllowedTextInputTypes, FormFieldSizeOptions } from '../../../types/form.js';
3
+ declare const __propDef: {
4
+ props: {
5
+ value?: string | undefined;
6
+ placeholder?: string | undefined;
7
+ helperText?: string | undefined;
8
+ size?: FormFieldSizeOptions | undefined;
9
+ type?: AllowedTextInputTypes | undefined;
10
+ disabled?: boolean | undefined;
11
+ required?: boolean | undefined;
12
+ readonly?: boolean | undefined;
13
+ maxlength?: number | undefined;
14
+ minlength?: number | undefined;
15
+ pattern?: string | undefined;
16
+ units?: string | undefined;
17
+ };
18
+ events: {
19
+ [evt: string]: CustomEvent<any>;
20
+ };
21
+ slots: {
22
+ default: {};
23
+ };
24
+ };
25
+ export type TextBoxProps = typeof __propDef.props;
26
+ export type TextBoxEvents = typeof __propDef.events;
27
+ export type TextBoxSlots = typeof __propDef.slots;
28
+ export default class TextBox extends SvelteComponent<TextBoxProps, TextBoxEvents, TextBoxSlots> {
29
+ }
30
+ export {};
@@ -0,0 +1,11 @@
1
+ <script>import { Meta, Story } from "@storybook/addon-svelte-csf";
2
+ import UploadDropzone from "./upload-dropzone.svelte";
3
+ </script>
4
+
5
+ <Meta title="Forms/UploadDropzone" component={UploadDropzone} />
6
+
7
+ <Story name="Stanard">
8
+ <div style="width: 300px; height: 300px;">
9
+ <UploadDropzone />
10
+ </div>
11
+ </Story>
@@ -0,0 +1,14 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export type UploadDropzoneProps = typeof __propDef.props;
10
+ export type UploadDropzoneEvents = typeof __propDef.events;
11
+ export type UploadDropzoneSlots = typeof __propDef.slots;
12
+ export default class UploadDropzone extends SvelteComponent<UploadDropzoneProps, UploadDropzoneEvents, UploadDropzoneSlots> {
13
+ }
14
+ export {};
@@ -0,0 +1,82 @@
1
+ <script>import UploadIcon from "../../icons/upload-icon.svelte";
2
+ import { createEventDispatcher } from "svelte";
3
+ let disabled = false;
4
+ let isDragging = false;
5
+ const dispatch = createEventDispatcher();
6
+ const selectFiles = async (e) => {
7
+ const target = e.target;
8
+ if (!target?.files || !target.files.length)
9
+ return;
10
+ const files = [...target.files].filter((file) => file.type.startsWith("image/"));
11
+ if (!files.length)
12
+ return;
13
+ dispatch("filesSelected", files);
14
+ };
15
+ const dropFiles = async (e) => {
16
+ dragStop(e);
17
+ if (!e.dataTransfer)
18
+ return;
19
+ const files = e.dataTransfer.items ? [...e.dataTransfer.items].filter((item) => item.kind === "file").map((item) => item.getAsFile()).filter((item) => !!item) : e.dataTransfer.files;
20
+ if (!files.length)
21
+ return;
22
+ dispatch("filesSelected", files);
23
+ };
24
+ const dragStart = (e) => {
25
+ e.preventDefault();
26
+ e.stopPropagation();
27
+ isDragging = true;
28
+ };
29
+ const dragStop = (e) => {
30
+ e.preventDefault();
31
+ e.stopPropagation();
32
+ isDragging = false;
33
+ };
34
+ </script>
35
+
36
+ <div class="dropzone" class:disabled class:isDragging>
37
+ <label
38
+ on:drop={dropFiles}
39
+ on:dragenter={dragStart}
40
+ on:dragstart={dragStart}
41
+ on:dragover={dragStart}
42
+ on:dragend={dragStop}
43
+ on:dragleave={dragStop}
44
+ on:dragexit={dragStop}
45
+ >
46
+ <input type="file" id="upload-button" accept="image/*" on:change={selectFiles} {disabled} />
47
+ <div class="icon"><UploadIcon /></div>
48
+ <div class="text">
49
+ {#if $$slots.default}
50
+ <slot />
51
+ {:else}
52
+ <span>Drop file or click to select</span>
53
+ {/if}
54
+ </div>
55
+ </label>
56
+ </div>
57
+
58
+ <style>input[type=file] {
59
+ display: none;
60
+ }
61
+
62
+ .dropzone {
63
+ display: flex;
64
+ justify-content: center;
65
+ align-items: center;
66
+ width: 100%;
67
+ height: 100%;
68
+ border: 2px dashed #ccc;
69
+ border-radius: 0.25rem;
70
+ color: #ccc;
71
+ font-size: 1.5rem;
72
+ font-weight: bold;
73
+ cursor: pointer;
74
+ }
75
+ .dropzone.disabled {
76
+ opacity: 0.5;
77
+ cursor: not-allowed;
78
+ }
79
+ .dropzone.isDragging {
80
+ background-color: #bbf;
81
+ color: #333;
82
+ }</style>
@@ -0,0 +1,18 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ filesSelected: CustomEvent<FileList | File[]>;
6
+ } & {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {
10
+ default: {};
11
+ };
12
+ };
13
+ export type UploadDropzoneProps = typeof __propDef.props;
14
+ export type UploadDropzoneEvents = typeof __propDef.events;
15
+ export type UploadDropzoneSlots = typeof __propDef.slots;
16
+ export default class UploadDropzone extends SvelteComponent<UploadDropzoneProps, UploadDropzoneEvents, UploadDropzoneSlots> {
17
+ }
18
+ export {};
@@ -0,0 +1,9 @@
1
+ <script>import { Meta, Story } from "@storybook/addon-svelte-csf";
2
+ import Card from "./card.svelte";
3
+ </script>
4
+
5
+ <Meta title="Generic/Card" component={Card} />
6
+
7
+ <Story name="Primary">
8
+ <Card title="Card title">This is the content of the card</Card>
9
+ </Story>