spaper 0.2.3 → 0.3.6

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 (44) hide show
  1. package/README.md +28 -1
  2. package/components/Alert.svelte +8 -6
  3. package/components/Alert.svelte.d.ts +3 -1
  4. package/components/Article.svelte +1 -1
  5. package/components/Badge.svelte +1 -1
  6. package/components/Breadcrumb.svelte +1 -1
  7. package/components/Button.svelte +1 -1
  8. package/components/Card.svelte +2 -1
  9. package/components/Card.svelte.d.ts +2 -1
  10. package/components/CloseButton.svelte +23 -0
  11. package/components/CloseButton.svelte.d.ts +19 -0
  12. package/components/Collapsible.svelte +2 -2
  13. package/components/Form/Checkbox.svelte +2 -2
  14. package/components/Form/Form.svelte +4 -0
  15. package/components/Form/Form.svelte.d.ts +20 -0
  16. package/components/Form/Input.svelte +1 -1
  17. package/components/Form/Radio.svelte +1 -1
  18. package/components/Form/Select.svelte +1 -1
  19. package/components/Form/Slider.svelte +2 -2
  20. package/components/Form/Switch.svelte +11 -5
  21. package/components/Form/index.d.ts +2 -1
  22. package/components/Form/index.js +2 -1
  23. package/components/Modal/Modal.svelte +4 -14
  24. package/components/Navbar.svelte +2 -2
  25. package/components/Pagination/Arrow.svelte +1 -1
  26. package/components/Pagination/NavigationButton.svelte +1 -1
  27. package/components/Pagination/Pagination.svelte +4 -2
  28. package/components/Popover.svelte +2 -2
  29. package/components/Popover.svelte.d.ts +2 -2
  30. package/components/Progress.svelte +1 -1
  31. package/components/Table.svelte +2 -3
  32. package/components/Tabs/Tab.svelte +1 -1
  33. package/components/Tabs/Tabs.svelte +13 -2
  34. package/components/Toast/Toast.svelte +91 -0
  35. package/components/Toast/Toast.svelte.d.ts +26 -0
  36. package/components/Toast/ToastContainer.svelte +37 -0
  37. package/components/Toast/ToastContainer.svelte.d.ts +18 -0
  38. package/components/Toast/index.d.ts +32 -0
  39. package/components/Toast/index.js +37 -0
  40. package/index.d.ts +3 -2
  41. package/index.js +3 -2
  42. package/package.json +12 -10
  43. package/types.d.ts +4 -0
  44. package/utils.js +4 -1
package/README.md CHANGED
@@ -14,7 +14,7 @@ Browse [documentation and demo here](https://oli8.github.io/spaper/).
14
14
  Add a link to the CDN into your HTML file:
15
15
 
16
16
  ```html
17
- <link rel="stylesheet" href="https://unpkg.com/papercss@1.8.2/dist/paper.min.css">
17
+ <link rel="stylesheet" href="https://unpkg.com/papercss@1.8.3/dist/paper.min.css">
18
18
  ```
19
19
 
20
20
  Or use NPM:
@@ -48,3 +48,30 @@ npm i spaper
48
48
  <Alert>...</Alert>
49
49
  <Button>Click me</Button>
50
50
  ```
51
+
52
+ <hr />
53
+
54
+ #### Components
55
+
56
+ - Alert
57
+ - Article
58
+ - Badge
59
+ - Breadcrumb
60
+ - Button
61
+ - Card
62
+ - Collapsible
63
+ - Form
64
+ - Checkbox
65
+ - Input
66
+ - Radio
67
+ - Select
68
+ - Slider
69
+ - Switch
70
+ - Modal
71
+ - Navbar
72
+ - Pagination
73
+ - Popover
74
+ - Progress
75
+ - Table
76
+ - Tabs
77
+ - Toast
@@ -1,13 +1,16 @@
1
- <div class={classes}
1
+ <div {...$$restProps}
2
+ class={classes}
2
3
  class:closed class:dismissible
3
4
  role="alert">
4
5
  <slot />
5
6
  {#if dismissible}
6
- <span class="btn-close" on:click={close}>X</span>
7
+ <CloseButton on:click={close} />
7
8
  {/if}
8
9
  </div>
9
10
 
10
- <script lang="ts">;
11
+ <script >var _a;
12
+ ;
13
+ import CloseButton from './CloseButton.svelte';
11
14
  import { computeClasses } from '../utils';
12
15
  export let type = 'primary';
13
16
  export let dismissible = false;
@@ -15,11 +18,10 @@ let closed = false;
15
18
  function close() {
16
19
  closed = true;
17
20
  }
18
- let classes;
19
- $: classes = `alert ${computeClasses('alert', { type })}`;
21
+ $: classes = `${(_a = $$restProps.class) !== null && _a !== void 0 ? _a : ''} alert ${computeClasses('alert', { type })}`;
20
22
  </script>
21
23
 
22
- <style lang="scss">.alert {
24
+ <style >.alert {
23
25
  transition: all 0.25s ease-out;
24
26
  }
25
27
  .alert.closed {
@@ -1,7 +1,9 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
+ import type { PaperType } from '../types';
2
3
  declare const __propDef: {
3
4
  props: {
4
- type?: any;
5
+ [x: string]: any;
6
+ type?: PaperType;
5
7
  dismissible?: boolean;
6
8
  };
7
9
  events: {
@@ -31,7 +31,7 @@
31
31
  {/if}
32
32
  </article>
33
33
 
34
- <script lang="ts">export let title = '';
34
+ <script >export let title = '';
35
35
  export let meta = '';
36
36
  export let textLead = '';
37
37
  export let border = false;
@@ -2,7 +2,7 @@
2
2
  <slot />
3
3
  </span>
4
4
 
5
- <script lang="ts">;
5
+ <script >;
6
6
  export let type = 'primary';
7
7
  export let rounded = false;
8
8
  </script>
@@ -10,6 +10,6 @@
10
10
  {/each}
11
11
  </ul>
12
12
 
13
- <script lang="ts">export let border = false;
13
+ <script >export let border = false;
14
14
  export let items = [];
15
15
  </script>
@@ -16,7 +16,7 @@
16
16
  </button>
17
17
  {/if}
18
18
 
19
- <script lang="ts">var _a;
19
+ <script >var _a;
20
20
  ;
21
21
  import { computeClasses, getDomAttributes } from '../utils';
22
22
  export let type = null;
@@ -57,7 +57,8 @@
57
57
  {/if}
58
58
  </div>
59
59
 
60
- <script lang="ts">export let title = '';
60
+ <script >;
61
+ export let title = '';
61
62
  export let subTitle = '';
62
63
  export let image = '';
63
64
  export let imageAlt = '';
@@ -1,11 +1,12 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
+ import type { PositionY } from "../types";
2
3
  declare const __propDef: {
3
4
  props: {
4
5
  title?: string;
5
6
  subTitle?: string;
6
7
  image?: string;
7
8
  imageAlt?: string;
8
- imagePlacement?: 'top' | 'bottom';
9
+ imagePlacement?: PositionY;
9
10
  header?: string;
10
11
  footer?: string;
11
12
  width?: string;
@@ -0,0 +1,23 @@
1
+ <button {...$$restProps}
2
+ class="{$$restProps.class ?? ''} btn-close"
3
+ aria-label={ariaLabel}
4
+ on:click>
5
+ X
6
+ </button>
7
+
8
+ <script >export let ariaLabel = 'close';
9
+ </script>
10
+
11
+ <style >button {
12
+ float: right;
13
+ border: 0;
14
+ padding: 0;
15
+ background: none;
16
+ box-shadow: none;
17
+ transform: none;
18
+ }
19
+ button:hover, button:focus {
20
+ transform: none;
21
+ box-shadow: none;
22
+ border: 0;
23
+ }</style>
@@ -0,0 +1,19 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ ariaLabel?: string;
6
+ };
7
+ events: {
8
+ click: MouseEvent;
9
+ } & {
10
+ [evt: string]: CustomEvent<any>;
11
+ };
12
+ slots: {};
13
+ };
14
+ export declare type CloseButtonProps = typeof __propDef.props;
15
+ export declare type CloseButtonEvents = typeof __propDef.events;
16
+ export declare type CloseButtonSlots = typeof __propDef.slots;
17
+ export default class CloseButton extends SvelteComponentTyped<CloseButtonProps, CloseButtonEvents, CloseButtonSlots> {
18
+ }
19
+ export {};
@@ -14,10 +14,10 @@
14
14
  </div>
15
15
  </section>
16
16
 
17
- <script lang="ts" context="module">let count = 0;
17
+ <script context="module">let count = 0;
18
18
  </script>
19
19
 
20
- <script lang="ts">var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
20
+ <script >var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
21
21
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22
22
  return new (P || (P = Promise))(function (resolve, reject) {
23
23
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -9,7 +9,7 @@
9
9
  <span>{label}</span>
10
10
  </label>
11
11
 
12
- <script lang="ts">import { createEventDispatcher } from 'svelte';
12
+ <script >import { createEventDispatcher } from 'svelte';
13
13
  export let label = '';
14
14
  export let value = '';
15
15
  export let name = '';
@@ -30,7 +30,7 @@ function onChange({ target }) {
30
30
  }
31
31
  </script>
32
32
 
33
- <style lang="scss">input[disabled] + span::before, input[disabled] ~ span {
33
+ <style >input[disabled] + span::before, input[disabled] ~ span {
34
34
  opacity: 0.5;
35
35
  cursor: not-allowed;
36
36
  }</style>
@@ -0,0 +1,4 @@
1
+ <form {...$$restProps}
2
+ class="{$$restProps.class ?? ''} form-group">
3
+ <slot />
4
+ </form>
@@ -0,0 +1,20 @@
1
+ /** @typedef {typeof __propDef.props} FormProps */
2
+ /** @typedef {typeof __propDef.events} FormEvents */
3
+ /** @typedef {typeof __propDef.slots} FormSlots */
4
+ export default class Form {
5
+ }
6
+ export type FormProps = typeof __propDef.props;
7
+ export type FormEvents = typeof __propDef.events;
8
+ export type FormSlots = typeof __propDef.slots;
9
+ declare const __propDef: {
10
+ props: {
11
+ [x: string]: any;
12
+ };
13
+ events: {
14
+ [evt: string]: CustomEvent<any>;
15
+ };
16
+ slots: {
17
+ default: {};
18
+ };
19
+ };
20
+ export {};
@@ -29,7 +29,7 @@
29
29
  on:change />
30
30
  {/if}
31
31
 
32
- <script lang="ts">var _a;
32
+ <script >var _a;
33
33
  import { createEventDispatcher } from 'svelte';
34
34
  import { computeClasses, getDomAttributes } from '../../utils';
35
35
  ;
@@ -19,7 +19,7 @@
19
19
  on:change />
20
20
  {/if}
21
21
 
22
- <script lang="ts">export let label = '';
22
+ <script >export let label = '';
23
23
  export let value = '';
24
24
  export let group = '';
25
25
  </script>
@@ -21,7 +21,7 @@
21
21
  </select>
22
22
  {/if}
23
23
 
24
- <script lang="ts">import { createEventDispatcher } from 'svelte';
24
+ <script >import { createEventDispatcher } from 'svelte';
25
25
  export let label = '';
26
26
  export let value = '';
27
27
  let selectElement;
@@ -24,7 +24,7 @@
24
24
  {/if}
25
25
  </label>
26
26
 
27
- <script lang="ts">import { onMount } from 'svelte';
27
+ <script >import { onMount } from 'svelte';
28
28
  ;
29
29
  import { computeClasses } from '../../utils';
30
30
  export let label = '';
@@ -52,7 +52,7 @@ $: if (percentage) {
52
52
  }
53
53
  </script>
54
54
 
55
- <style lang="scss">label.block {
55
+ <style >label.block {
56
56
  width: 100%;
57
57
  }
58
58
  label.disabled {
@@ -3,7 +3,8 @@
3
3
  class:disabled>
4
4
  <input bind:checked
5
5
  type="checkbox"
6
- {disabled} />
6
+ {disabled}
7
+ on:change={onChange} />
7
8
  <div class="paper-switch-tile-card border">
8
9
  <div class={`paper-switch-tile-card-front border
9
10
  ${bgClass(tile.off.background)}`}>
@@ -20,7 +21,8 @@
20
21
  <input id={domId}
21
22
  bind:checked
22
23
  type="checkbox"
23
- {disabled} />
24
+ {disabled}
25
+ on:change={onChange} />
24
26
  <span class="paper-switch-slider"
25
27
  class:round></span>
26
28
  </label>
@@ -32,16 +34,17 @@
32
34
  {/if}
33
35
  {/if}
34
36
 
35
- <script lang="ts" context="module">let count = 0;
37
+ <script context="module">let count = 0;
36
38
  </script>
37
39
 
38
- <script lang="ts">import { onMount } from "svelte";
40
+ <script >import { onMount, createEventDispatcher } from "svelte";
39
41
  ;
40
42
  export let checked = false;
41
43
  export let disabled = false;
42
44
  export let round = false;
43
45
  export let inline = false;
44
46
  export let tile = null;
47
+ const dispatch = createEventDispatcher();
45
48
  let id;
46
49
  onMount(() => {
47
50
  id = count++;
@@ -50,6 +53,9 @@ let domId;
50
53
  $: domId = `paper-switch-input-${id}`;
51
54
  let prefix;
52
55
  $: prefix = 'paper-switch' + (inline ? '-2' : '');
56
+ function onChange() {
57
+ dispatch('change', checked);
58
+ }
53
59
  function bgClass(color) {
54
60
  if (!color)
55
61
  return;
@@ -57,7 +63,7 @@ function bgClass(color) {
57
63
  }
58
64
  </script>
59
65
 
60
- <style lang="scss">input[disabled] + span,
66
+ <style >input[disabled] + span,
61
67
  .paper-switch-tile.disabled {
62
68
  opacity: 0.5;
63
69
  cursor: not-allowed;
@@ -4,5 +4,6 @@ import Radio from './Radio.svelte';
4
4
  import Checkbox from './Checkbox.svelte';
5
5
  import Switch from './Switch.svelte';
6
6
  import Slider from './Slider.svelte';
7
+ import Form from './Form.svelte';
7
8
  export declare type InputType = 'text' | 'email' | 'number' | 'password' | 'search' | 'tel' | 'url' | 'time' | 'date' | 'month' | 'week' | 'datetime-local' | 'color' | 'textarea';
8
- export { Input, Select, Radio, Checkbox, Switch, Slider, };
9
+ export { Input, Select, Radio, Checkbox, Switch, Slider, Form, };
@@ -4,4 +4,5 @@ import Radio from './Radio.svelte';
4
4
  import Checkbox from './Checkbox.svelte';
5
5
  import Switch from './Switch.svelte';
6
6
  import Slider from './Slider.svelte';
7
- export { Input, Select, Radio, Checkbox, Switch, Slider, };
7
+ import Form from './Form.svelte';
8
+ export { Input, Select, Radio, Checkbox, Switch, Slider, Form, };
@@ -2,10 +2,7 @@
2
2
 
3
3
  <div class="modal" class:active>
4
4
  <div class="modal-body">
5
- <button class="btn-close"
6
- on:click={close}>
7
- X
8
- </button>
5
+ <CloseButton on:click={close} />
9
6
  {#if title}
10
7
  <h4 class="modal-title">{title}</h4>
11
8
  {/if}
@@ -26,7 +23,8 @@
26
23
  </div>
27
24
  </div>
28
25
 
29
- <script lang="ts">import Button from '../Button.svelte';
26
+ <script >import Button from '../Button.svelte';
27
+ import CloseButton from '../CloseButton.svelte';
30
28
  export let active = false;
31
29
  export let title = '';
32
30
  export let subTitle = '';
@@ -40,15 +38,7 @@ function handleKeydown({ key }) {
40
38
  }
41
39
  </script>
42
40
 
43
- <style lang="scss">.btn-close {
44
- border: 0;
45
- }
46
- .btn-close:hover {
47
- box-shadow: none;
48
- transform: none;
49
- }
50
-
51
- .modal.active {
41
+ <style >.modal.active {
52
42
  opacity: 1;
53
43
  visibility: visible;
54
44
  }
@@ -14,7 +14,7 @@
14
14
  </div>
15
15
  </nav>
16
16
 
17
- <script lang="ts">export let border = true;
17
+ <script >export let border = true;
18
18
  export let fixed = false;
19
19
  export let split = true;
20
20
  let open = false;
@@ -23,7 +23,7 @@ function collapse() {
23
23
  }
24
24
  </script>
25
25
 
26
- <style lang="scss">/* Papercss removes border of buttons in .collapsible */
26
+ <style >/* Papercss removes border of buttons in .collapsible */
27
27
  .collapsible > button {
28
28
  border: 2px solid var(--primary);
29
29
  }
@@ -7,7 +7,7 @@
7
7
  {/if}
8
8
  </svg>
9
9
 
10
- <script lang="ts">;
10
+ <script >;
11
11
  ;
12
12
  import arrowDimension from './arrow-dimension';
13
13
  export let size;
@@ -10,7 +10,7 @@
10
10
  {/if}
11
11
  </Button>
12
12
 
13
- <script lang="ts">import Button from '../Button.svelte';
13
+ <script >import Button from '../Button.svelte';
14
14
  import Arrow from './Arrow.svelte';
15
15
  ;
16
16
  export let size;
@@ -51,7 +51,7 @@
51
51
  {/if}
52
52
  </section>
53
53
 
54
- <script lang="ts">import { createEventDispatcher } from 'svelte';
54
+ <script >import { createEventDispatcher } from 'svelte';
55
55
  import Button from '../Button.svelte';
56
56
  import Input from '../Form/Input.svelte';
57
57
  ;
@@ -98,12 +98,14 @@ function shouldDisplayEllipsis(idx) {
98
98
  return pages[idx - 2].show;
99
99
  }
100
100
  function changePage(val) {
101
+ if (pageInvalid(val))
102
+ return;
101
103
  current = val;
102
104
  dispatch('change', current);
103
105
  }
104
106
  </script>
105
107
 
106
- <style lang="scss">ul, li {
108
+ <style >ul, li {
107
109
  display: inline;
108
110
  }
109
111
 
@@ -5,7 +5,7 @@
5
5
  <slot />
6
6
  </div>
7
7
 
8
- <script lang="ts">;
8
+ <script >;
9
9
  export let label = '';
10
10
  export let position = 'top';
11
11
  export let inline = true;
@@ -17,7 +17,7 @@ function bgClass(color) {
17
17
  }
18
18
  </script>
19
19
 
20
- <style lang="scss">.inline {
20
+ <style >.inline {
21
21
  display: inline;
22
22
  }
23
23
 
@@ -1,10 +1,10 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type { PaperType } from "../types";
2
+ import type { PaperType, Position } from "../types";
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  [x: string]: any;
6
6
  label?: string;
7
- position?: 'top' | 'right' | 'bottom' | 'left';
7
+ position?: Position;
8
8
  inline?: boolean;
9
9
  background?: PaperType;
10
10
  active?: boolean;
@@ -10,7 +10,7 @@
10
10
  </div>
11
11
  </div>
12
12
 
13
- <script lang="ts">;
13
+ <script >;
14
14
  export let value = 50;
15
15
  export let type = 'primary';
16
16
  export let showValue = false;
@@ -41,8 +41,7 @@
41
41
  </tbody>
42
42
  </table>
43
43
 
44
- <script lang="ts">import pick from 'lodash.pick';
45
- let tmpCol;
44
+ <script >let tmpCol;
46
45
  export let columns = [];
47
46
  export let data = [];
48
47
  export let striped = false;
@@ -63,7 +62,7 @@ function isColumnObj(arg) {
63
62
  return arg.field;
64
63
  }
65
64
  function getRowFiltered(row) {
66
- return Object.entries(pick(row, displayedFields));
65
+ return Object.entries(row).filter(([key, _val]) => displayedFields.includes(key));
67
66
  }
68
67
  $: if (!columns.length) {
69
68
  columns = Object.keys(data[0] || {});
@@ -10,7 +10,7 @@
10
10
  <slot />
11
11
  </div>
12
12
 
13
- <script lang="ts">import { onMount, getContext } from 'svelte';
13
+ <script >import { onMount, getContext } from 'svelte';
14
14
  ;
15
15
  export let label;
16
16
  const key = {};
@@ -15,7 +15,7 @@
15
15
  <slot />
16
16
  </div>
17
17
 
18
- <script lang="ts">import { onMount, setContext, createEventDispatcher } from 'svelte';
18
+ <script >import { onMount, setContext, createEventDispatcher } from 'svelte';
19
19
  import { writable } from 'svelte/store';
20
20
  ;
21
21
  ;
@@ -52,7 +52,7 @@ function updateTabsVisility() {
52
52
  $: activeTab && updateTabsVisility();
53
53
  </script>
54
54
 
55
- <style lang="scss">.tabs-label-header {
55
+ <style >.tabs-label-header {
56
56
  cursor: pointer;
57
57
  color: var(--primary-light);
58
58
  display: inline-block;
@@ -67,4 +67,15 @@ $: activeTab && updateTabsVisility();
67
67
  .tabs-label-header--active {
68
68
  color: var(--primary);
69
69
  border-bottom: 3px solid var(--secondary);
70
+ }
71
+
72
+ :global(.tabs input) {
73
+ display: block;
74
+ }
75
+
76
+ :global(.tabs label) {
77
+ all: inherit;
78
+ }
79
+ :global(.tabs label):hover {
80
+ all: inherit;
70
81
  }</style>
@@ -0,0 +1,91 @@
1
+ {#if active}
2
+ <div class={classes}
3
+ bind:this={toastElement}
4
+ on:mouseenter={pause}
5
+ on:mouseleave={dismiss}
6
+ in:fly={{ y: position.includes('top') ? -100 : 100 }}
7
+ out:fade={{ duration: TRANSITION_OUT_DURATION }}
8
+ role="alert">
9
+ {@html message}
10
+ {#if dismissible||indefinite}
11
+ <CloseButton ariaLabel={closeAriaLabel}
12
+ on:click={close} />
13
+ {/if}
14
+ </div>
15
+ {/if}
16
+
17
+ <script >import { onMount } from 'svelte';
18
+ import { fly, fade } from 'svelte/transition';
19
+ ;
20
+ ;
21
+ import { computeClasses } from '../../utils';
22
+ import ToastContainer, { containerClass } from './ToastContainer.svelte';
23
+ import CloseButton from '../CloseButton.svelte';
24
+ export let message;
25
+ export let type = 'primary';
26
+ export let duration = 2000;
27
+ export let position = 'top-right';
28
+ export let pauseOnHover = false;
29
+ export let dismissible = false;
30
+ export let indefinite = false;
31
+ export let closeAriaLabel = 'close';
32
+ export let onClose = null;
33
+ const TRANSITION_OUT_DURATION = 300;
34
+ let active = true;
35
+ let toastElement;
36
+ let timeoutId;
37
+ $: containerSelector = `.${containerClass}.${position}`;
38
+ $: classes = `alert margin-small shadow ${computeClasses('alert', { type })}`;
39
+ onMount(() => {
40
+ insert();
41
+ if (!indefinite) {
42
+ timeoutId = window.setTimeout(close, duration);
43
+ }
44
+ if (timeoutId) {
45
+ return () => clearTimeout(timeoutId);
46
+ }
47
+ });
48
+ function pause() {
49
+ if (!pauseOnHover || indefinite)
50
+ return;
51
+ clearTimeout(timeoutId);
52
+ }
53
+ function dismiss() {
54
+ if (!pauseOnHover || indefinite)
55
+ return;
56
+ close();
57
+ }
58
+ function close() {
59
+ active = false;
60
+ removeContainer();
61
+ onClose === null || onClose === void 0 ? void 0 : onClose();
62
+ }
63
+ function getContainer() {
64
+ return document.querySelector(containerSelector);
65
+ }
66
+ function setupContainer() {
67
+ new ToastContainer({
68
+ target: document.body,
69
+ props: { position },
70
+ });
71
+ return getContainer();
72
+ }
73
+ function insert() {
74
+ const container = getContainer() || setupContainer();
75
+ container.insertAdjacentElement('afterbegin', toastElement);
76
+ }
77
+ function removeContainer() {
78
+ const container = getContainer();
79
+ setTimeout(() => {
80
+ if (container.children.length === 1) {
81
+ container.remove();
82
+ }
83
+ }, TRANSITION_OUT_DURATION);
84
+ }
85
+ </script>
86
+
87
+ <style>
88
+ div {
89
+ width: 250px;
90
+ }
91
+ </style>
@@ -0,0 +1,26 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { PaperType } from '../../types';
3
+ import type { ToastPosition } from './';
4
+ declare const __propDef: {
5
+ props: {
6
+ message: string;
7
+ type?: PaperType;
8
+ duration?: number;
9
+ position?: ToastPosition;
10
+ pauseOnHover?: boolean;
11
+ dismissible?: boolean;
12
+ indefinite?: boolean;
13
+ closeAriaLabel?: string;
14
+ onClose?: Function;
15
+ };
16
+ events: {
17
+ [evt: string]: CustomEvent<any>;
18
+ };
19
+ slots: {};
20
+ };
21
+ export declare type ToastProps = typeof __propDef.props;
22
+ export declare type ToastEvents = typeof __propDef.events;
23
+ export declare type ToastSlots = typeof __propDef.slots;
24
+ export default class Toast extends SvelteComponentTyped<ToastProps, ToastEvents, ToastSlots> {
25
+ }
26
+ export {};
@@ -0,0 +1,37 @@
1
+ <div class="{containerClass} {position}">
2
+ </div>
3
+
4
+ <script context="module">export const containerClass = 'paper-toast-container';
5
+ </script>
6
+
7
+ <script >;
8
+ export let position = 'top-right';
9
+ </script>
10
+
11
+ <style >:global(.paper-toast-container:is(.top, .bottom) > div) {
12
+ align-self: center;
13
+ }
14
+
15
+ :global(.paper-toast-container:is([class*=right]) > div) {
16
+ align-self: end;
17
+ }
18
+
19
+ div {
20
+ position: fixed;
21
+ display: flex;
22
+ width: 100%;
23
+ padding: 2em;
24
+ overflow: hidden;
25
+ z-index: 9999;
26
+ flex-direction: column;
27
+ }
28
+ div[class*=top] {
29
+ top: 0;
30
+ }
31
+ div[class*=bottom] {
32
+ bottom: 0;
33
+ flex-direction: column-reverse;
34
+ }
35
+ div[class*=left] {
36
+ left: 0;
37
+ }</style>
@@ -0,0 +1,18 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ export declare const containerClass = "paper-toast-container";
3
+ import type { ToastPosition } from './';
4
+ declare const __propDef: {
5
+ props: {
6
+ position?: ToastPosition;
7
+ };
8
+ events: {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ };
13
+ export declare type ToastContainerProps = typeof __propDef.props;
14
+ export declare type ToastContainerEvents = typeof __propDef.events;
15
+ export declare type ToastContainerSlots = typeof __propDef.slots;
16
+ export default class ToastContainer extends SvelteComponentTyped<ToastContainerProps, ToastContainerEvents, ToastContainerSlots> {
17
+ }
18
+ export {};
@@ -0,0 +1,32 @@
1
+ import type { PaperType, PositionY } from '../../types';
2
+ export declare type ToastPosition = PositionY | 'top-right' | 'bottom-right' | 'bottom-left' | 'top-left';
3
+ interface ToastProps {
4
+ message: string;
5
+ type?: PaperType;
6
+ duration?: number;
7
+ position?: ToastPosition;
8
+ pauseOnHover?: boolean;
9
+ dismissible?: boolean;
10
+ indefinite?: boolean;
11
+ closeAriaLabel?: string;
12
+ onClose?: Function;
13
+ }
14
+ interface ToastMethods {
15
+ open: (props: ToastProps | string) => void;
16
+ info: (options: OpenWithTypeParams | string) => void;
17
+ success: (options: OpenWithTypeParams | string) => void;
18
+ warning: (options: OpenWithTypeParams | string) => void;
19
+ warn: (options: OpenWithTypeParams | string) => void;
20
+ danger: (options: OpenWithTypeParams | string) => void;
21
+ error: (options: OpenWithTypeParams | string) => void;
22
+ }
23
+ declare type OpenWithTypeParams = Omit<ToastProps, 'type'>;
24
+ export declare function open(props: ToastProps | string): void;
25
+ export declare const info: (options: OpenWithTypeParams | string) => void;
26
+ export declare const success: (options: OpenWithTypeParams | string) => void;
27
+ export declare const warning: (options: OpenWithTypeParams | string) => void;
28
+ export declare const warn: (options: OpenWithTypeParams | string) => void;
29
+ export declare const danger: (options: OpenWithTypeParams | string) => void;
30
+ export declare const error: (options: OpenWithTypeParams | string) => void;
31
+ declare const _default: ToastMethods;
32
+ export default _default;
@@ -0,0 +1,37 @@
1
+ import Toast from './Toast.svelte';
2
+ export function open(props) {
3
+ if (typeof props === 'string')
4
+ props = { message: props };
5
+ new Toast({
6
+ target: document.body,
7
+ props,
8
+ intro: true,
9
+ });
10
+ }
11
+ function openType(type) {
12
+ return (options) => {
13
+ const props = {
14
+ type,
15
+ message: '',
16
+ };
17
+ if (typeof options === 'string')
18
+ props.message = options;
19
+ else
20
+ Object.assign(props, options);
21
+ new Toast({
22
+ target: document.body,
23
+ props,
24
+ intro: true,
25
+ });
26
+ };
27
+ }
28
+ export const info = openType('secondary');
29
+ export const success = openType('success');
30
+ export const warning = openType('warning');
31
+ export const warn = warning;
32
+ export const danger = openType('danger');
33
+ export const error = danger;
34
+ Object.assign(Toast, {
35
+ open, info, success, warning, warn, error, danger
36
+ });
37
+ export default Toast;
package/index.d.ts CHANGED
@@ -5,7 +5,7 @@ import Breadcrumb from './components/Breadcrumb.svelte';
5
5
  import Navbar from './components/Navbar.svelte';
6
6
  import Modal from './components/Modal';
7
7
  import { Tabs, Tab } from './components/Tabs';
8
- import { Input, Select, Radio, Checkbox, Switch, Slider } from './components/Form';
8
+ import { Input, Select, Radio, Checkbox, Switch, Slider, Form } from './components/Form';
9
9
  import Article from './components/Article.svelte';
10
10
  import Card from './components/Card.svelte';
11
11
  import Collapsible from './components/Collapsible.svelte';
@@ -13,4 +13,5 @@ import Popover from './components/Popover.svelte';
13
13
  import Progress from './components/Progress.svelte';
14
14
  import Table from './components/Table.svelte';
15
15
  import Pagination from './components/Pagination';
16
- export { Button, Alert, Badge, Breadcrumb, Navbar, Modal, Tabs, Tab, Input, Select, Radio, Checkbox, Switch, Slider, Article, Card, Collapsible, Popover, Progress, Table, Pagination, };
16
+ import Toast from './components/Toast';
17
+ export { Button, Alert, Badge, Breadcrumb, Navbar, Modal, Tabs, Tab, Form, Input, Select, Radio, Checkbox, Switch, Slider, Article, Card, Collapsible, Popover, Progress, Table, Pagination, Toast, };
package/index.js CHANGED
@@ -5,7 +5,7 @@ import Breadcrumb from './components/Breadcrumb.svelte';
5
5
  import Navbar from './components/Navbar.svelte';
6
6
  import Modal from './components/Modal';
7
7
  import { Tabs, Tab } from './components/Tabs';
8
- import { Input, Select, Radio, Checkbox, Switch, Slider } from './components/Form';
8
+ import { Input, Select, Radio, Checkbox, Switch, Slider, Form } from './components/Form';
9
9
  import Article from './components/Article.svelte';
10
10
  import Card from './components/Card.svelte';
11
11
  import Collapsible from './components/Collapsible.svelte';
@@ -13,4 +13,5 @@ import Popover from './components/Popover.svelte';
13
13
  import Progress from './components/Progress.svelte';
14
14
  import Table from './components/Table.svelte';
15
15
  import Pagination from './components/Pagination';
16
- export { Button, Alert, Badge, Breadcrumb, Navbar, Modal, Tabs, Tab, Input, Select, Radio, Checkbox, Switch, Slider, Article, Card, Collapsible, Popover, Progress, Table, Pagination, };
16
+ import Toast from './components/Toast';
17
+ export { Button, Alert, Badge, Breadcrumb, Navbar, Modal, Tabs, Tab, Form, Input, Select, Radio, Checkbox, Switch, Slider, Article, Card, Collapsible, Popover, Progress, Table, Pagination, Toast, };
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "papercss",
9
9
  "components"
10
10
  ],
11
- "version": "0.2.3",
11
+ "version": "0.3.6",
12
12
  "repository": {
13
13
  "type": "git",
14
14
  "url": "git+https://github.com/Oli8/spaper.git"
@@ -18,13 +18,9 @@
18
18
  },
19
19
  "homepage": "https://github.com/Oli8/spaper#readme",
20
20
  "peerDependencies": {
21
- "papercss": "^1.8.2"
21
+ "papercss": "^1.8.3"
22
22
  },
23
23
  "type": "module",
24
- "dependencies": {
25
- "lodash.omit": "^4.5.0",
26
- "lodash.pick": "^4.4.0"
27
- },
28
24
  "exports": {
29
25
  "./package.json": "./package.json",
30
26
  "./components/Alert.svelte": "./components/Alert.svelte",
@@ -33,8 +29,10 @@
33
29
  "./components/Breadcrumb.svelte": "./components/Breadcrumb.svelte",
34
30
  "./components/Button.svelte": "./components/Button.svelte",
35
31
  "./components/Card.svelte": "./components/Card.svelte",
32
+ "./components/CloseButton.svelte": "./components/CloseButton.svelte",
36
33
  "./components/Collapsible.svelte": "./components/Collapsible.svelte",
37
34
  "./components/Form/Checkbox.svelte": "./components/Form/Checkbox.svelte",
35
+ "./components/Form/Form.svelte": "./components/Form/Form.svelte",
38
36
  "./components/Form/Input.svelte": "./components/Form/Input.svelte",
39
37
  "./components/Form/Radio.svelte": "./components/Form/Radio.svelte",
40
38
  "./components/Form/Select.svelte": "./components/Form/Select.svelte",
@@ -48,7 +46,7 @@
48
46
  "./components/Pagination/Arrow.svelte": "./components/Pagination/Arrow.svelte",
49
47
  "./components/Pagination/NavigationButton.svelte": "./components/Pagination/NavigationButton.svelte",
50
48
  "./components/Pagination/Pagination.svelte": "./components/Pagination/Pagination.svelte",
51
- "./components/Pagination/arrow-dimension.js": "./components/Pagination/arrow-dimension.js",
49
+ "./components/Pagination/arrow-dimension": "./components/Pagination/arrow-dimension.js",
52
50
  "./components/Pagination": "./components/Pagination/index.js",
53
51
  "./components/Popover.svelte": "./components/Popover.svelte",
54
52
  "./components/Progress.svelte": "./components/Progress.svelte",
@@ -56,8 +54,12 @@
56
54
  "./components/Tabs/Tab.svelte": "./components/Tabs/Tab.svelte",
57
55
  "./components/Tabs/Tabs.svelte": "./components/Tabs/Tabs.svelte",
58
56
  "./components/Tabs": "./components/Tabs/index.js",
57
+ "./components/Toast/Toast.svelte": "./components/Toast/Toast.svelte",
58
+ "./components/Toast/ToastContainer.svelte": "./components/Toast/ToastContainer.svelte",
59
+ "./components/Toast": "./components/Toast/index.js",
59
60
  "./components/style.scss": "./components/style.scss",
60
61
  ".": "./index.js",
61
- "./utils.js": "./utils.js"
62
- }
63
- }
62
+ "./utils": "./utils.js"
63
+ },
64
+ "svelte": "./index.js"
65
+ }
package/types.d.ts CHANGED
@@ -7,3 +7,7 @@ export type PaperFlexPlacement = 'spaces' | 'edges' | 'right' | 'center' | 'left
7
7
  export type PaperAlign = 'left' | 'center' | 'right';
8
8
 
9
9
  export type Attributes = Record<string, string|boolean>;
10
+
11
+ export type PositionY = 'top' | 'bottom';
12
+ export type PositionX = 'left' | 'right';
13
+ export type Position = PositionX | PositionY;
package/utils.js CHANGED
@@ -1,10 +1,13 @@
1
- import omit from 'lodash.omit';
2
1
  const propToClass = {
3
2
  size: (pf, val) => `${pf}-${val}`,
4
3
  block: (pf, _val) => `${pf}-block`,
5
4
  type: (pf, val) => `${pf}-${val}`,
6
5
  outline: (pf, val) => `${pf}-${val}-outline`,
7
6
  };
7
+ function omit(obj, properties) {
8
+ return Object.fromEntries(Object.entries(obj)
9
+ .filter(([key, _val]) => !properties.includes(key)));
10
+ }
8
11
  export function computeClasses(elPrefix, props) {
9
12
  return Object.entries(props)
10
13
  .filter(([_prop, val]) => val)