@softwareone/spi-sv5-library 1.3.2 → 1.4.0

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.
@@ -9,11 +9,14 @@
9
9
  title?: string;
10
10
  homeUrl?: string;
11
11
  hideAccount?: boolean;
12
+ hideHelp?: boolean;
13
+ hideNotification?: boolean;
12
14
  accountName?: string;
13
15
  userName?: string;
14
16
  profileUrl?: string;
15
17
  hideLoader?: boolean;
16
18
  menu?: Snippet<[showMenu: boolean]>;
19
+ waffle?: Snippet<[showWaffle: boolean]>;
17
20
  }
18
21
 
19
22
  let {
@@ -24,25 +27,53 @@
24
27
  userName = '',
25
28
  profileUrl = '/profile',
26
29
  hideLoader,
27
- menu
30
+ menu,
31
+ waffle
28
32
  }: HeaderProps = $props();
29
33
 
34
+ let showWaffle = $state(false);
30
35
  let showMenu = $state(false);
31
36
 
37
+ const toggleWaffle = () => {
38
+ showWaffle = !showWaffle;
39
+ showMenu = false;
40
+ };
41
+
32
42
  const toggleMenu = () => {
33
43
  showMenu = !showMenu;
44
+ showWaffle = false;
45
+ };
46
+
47
+ const handleKeydown = (event: KeyboardEvent) => {
48
+ if (event.key === 'Escape' && (showWaffle || showMenu)) {
49
+ showWaffle = false;
50
+ showMenu = false;
51
+ }
34
52
  };
35
53
  </script>
36
54
 
55
+ <svelte:window onkeydown={handleKeydown} />
56
+
37
57
  <div class="header-container">
38
58
  <nav class="header-section">
39
59
  {#if !hideLoader}
40
60
  <HeaderLoader />
41
61
  {/if}
42
-
62
+ {#if waffle}
63
+ <button
64
+ type="button"
65
+ class={[showWaffle && 'active', 'header-button']}
66
+ onclick={toggleWaffle}
67
+ aria-label="Waffle Component"
68
+ aria-expanded={showWaffle}
69
+ >
70
+ <span class="material-icons icon-span">apps</span>
71
+ </button>
72
+ {@render waffle(showWaffle)}
73
+ {/if}
43
74
  {#if menu}
44
75
  <button type="button" class="header-button" onclick={toggleMenu} aria-label="menu button">
45
- <span class="material-icons icon-span">menu</span>
76
+ <span class="material-icons icon-span menu-icon">menu</span>
46
77
  </button>
47
78
  {@render menu(showMenu)}
48
79
  {/if}
@@ -69,20 +100,30 @@
69
100
  justify-content: center;
70
101
  align-items: center;
71
102
  border-radius: 50%;
72
- background: white;
103
+ background: transparent;
73
104
  z-index: 40;
74
105
  cursor: pointer;
75
106
  border: none;
76
107
  width: 40px;
77
108
  height: 40px;
109
+ transition: background-color 0.2s ease-in-out;
78
110
  }
79
111
 
80
112
  .header-button:hover {
81
113
  background: #e0e5e8;
82
114
  }
83
115
 
116
+ .header-button.active {
117
+ background: #fff;
118
+ color: #374151;
119
+ }
120
+
121
+ .header-button .menu-icon {
122
+ transform: scale(1.26);
123
+ }
124
+
84
125
  .icon-span {
85
- font-size: 32px;
126
+ font-size: 24px;
86
127
  color: #6b7180;
87
128
  }
88
129
 
@@ -95,6 +136,8 @@
95
136
  background: #fff;
96
137
  height: 80px;
97
138
  border-bottom: 3px solid #aeb1b9;
139
+ position: relative;
140
+ z-index: 50;
98
141
  }
99
142
 
100
143
  .header-section {
@@ -3,11 +3,14 @@ interface HeaderProps {
3
3
  title?: string;
4
4
  homeUrl?: string;
5
5
  hideAccount?: boolean;
6
+ hideHelp?: boolean;
7
+ hideNotification?: boolean;
6
8
  accountName?: string;
7
9
  userName?: string;
8
10
  profileUrl?: string;
9
11
  hideLoader?: boolean;
10
12
  menu?: Snippet<[showMenu: boolean]>;
13
+ waffle?: Snippet<[showWaffle: boolean]>;
11
14
  }
12
15
  declare const Header: import("svelte").Component<HeaderProps, {}, "">;
13
16
  type Header = ReturnType<typeof Header>;
@@ -19,9 +19,7 @@
19
19
  <section class={['home-container', hasSingleItem && 'centered', hasManyItems && 'grid']}>
20
20
  {#each homeItems as homeItem}
21
21
  <a href={homeItem.url} class="home-item">
22
- <span>
23
- <img src={homeItem.icon} alt={homeItem.text} />
24
- </span>
22
+ <img src={homeItem.icon} alt={homeItem.text} />
25
23
  <div>
26
24
  <h2>{homeItem.text}</h2>
27
25
  <p>{homeItem.detail}</p>
@@ -82,15 +80,11 @@
82
80
  background: var(--black-1);
83
81
  transition: background 0.2s ease-in-out;
84
82
 
85
- > span {
86
- display: flex;
87
- align-items: center;
88
-
89
- > img {
90
- width: 40px;
91
- height: 40px;
92
- filter: invert(100%);
93
- }
83
+ > img {
84
+ width: 36px;
85
+ height: 36px;
86
+ margin: auto 0;
87
+ filter: invert(100%);
94
88
  }
95
89
 
96
90
  > div {
@@ -10,16 +10,9 @@
10
10
  showMenu: boolean;
11
11
  }
12
12
 
13
- let isMainMenu: boolean = $state(true);
14
- let activeItem: string = $state('');
15
-
16
13
  let { menuItems, showMenu }: MenuProps = $props();
17
14
 
18
- $effect(() => {
19
- if (showMenu) {
20
- setActiveMenuItem();
21
- }
22
- });
15
+ let activeItem = $state('');
23
16
 
24
17
  const setActiveMenuItem = () => {
25
18
  activeItem = menuItems.find((menuItem: MenuItem) => isActiveMenuItem(menuItem.url))?.text || '';
@@ -43,6 +36,12 @@
43
36
  const onHandleMenu = () => {
44
37
  showMenu = !showMenu;
45
38
  };
39
+
40
+ $effect(() => {
41
+ if (showMenu) {
42
+ setActiveMenuItem();
43
+ }
44
+ });
46
45
  </script>
47
46
 
48
47
  {#if showMenu}
@@ -60,7 +59,6 @@
60
59
  item={menuItem}
61
60
  isCollapsed={false}
62
61
  activeItem={activeItem === menuItem.text}
63
- {isMainMenu}
64
62
  onClick={onClickMenuItem}
65
63
  />
66
64
  {/each}
@@ -7,10 +7,9 @@
7
7
  isCollapsed: boolean;
8
8
  onClick?: (item: MenuItem) => void;
9
9
  activeItem: boolean;
10
- isMainMenu?: boolean;
11
10
  }
12
11
 
13
- let { item, isCollapsed = false, onClick, activeItem, isMainMenu }: MenuItemProps = $props();
12
+ let { item, isCollapsed = false, onClick, activeItem }: MenuItemProps = $props();
14
13
  </script>
15
14
 
16
15
  <li>
@@ -20,8 +19,7 @@
20
19
  class={[
21
20
  'item',
22
21
  isCollapsed ? 'collapsed' : 'expanded',
23
- activeItem && `active-${isCollapsed ? 'collapsed' : 'expanded'}`,
24
- isMainMenu && 'main-menu'
22
+ activeItem && `active-${isCollapsed ? 'collapsed' : 'expanded'}`
25
23
  ]}
26
24
  onclick={() => onClick?.(item)}
27
25
  >
@@ -108,16 +106,6 @@
108
106
  color: #472aff;
109
107
  }
110
108
 
111
- .main-menu.expanded:hover:not(.active-expanded),
112
- .main-menu.collapsed:hover:not(.active-collapsed) {
113
- background-color: #eaecff;
114
- }
115
-
116
- .main-menu:hover .item-name-span,
117
- .main-menu:hover .icon-span {
118
- color: #472aff;
119
- }
120
-
121
109
  .item.collapsed:focus,
122
110
  .item.collapsed:focus-visible {
123
111
  outline: none;
@@ -4,7 +4,6 @@ interface MenuItemProps {
4
4
  isCollapsed: boolean;
5
5
  onClick?: (item: MenuItem) => void;
6
6
  activeItem: boolean;
7
- isMainMenu?: boolean;
8
7
  }
9
8
  declare const MenuItem: import("svelte").Component<MenuItemProps, {}, "">;
10
9
  type MenuItem = ReturnType<typeof MenuItem>;
@@ -11,6 +11,7 @@
11
11
  title,
12
12
  width = 'xs',
13
13
  errorIcon,
14
+ hideHeader,
14
15
  onclose = () => {},
15
16
  children,
16
17
  footer,
@@ -33,7 +34,7 @@
33
34
  start: 0.95
34
35
  }}
35
36
  >
36
- <ModalHeader {title} {errorIcon} onclose={onHandleClose} />
37
+ <ModalHeader {title} {errorIcon} {hideHeader} onclose={onHandleClose} />
37
38
  <ModalContent content={children} {disablePadding} />
38
39
  <ModalFooter {footer} onclose={onHandleClose} />
39
40
  </div>
@@ -21,7 +21,6 @@
21
21
  gap: 24px;
22
22
  align-self: stretch;
23
23
  background: #fff;
24
- border-top: 1px solid #aeb1b9;
25
24
  }
26
25
 
27
26
  .padding {
@@ -4,20 +4,23 @@
4
4
  let {
5
5
  title = '',
6
6
  errorIcon = false,
7
+ hideHeader = false,
7
8
  onclose
8
9
  }: ModalHeaderProps & { onclose: VoidFunction } = $props();
9
10
  </script>
10
11
 
11
- <header class="modal-header">
12
- <div class="modal-header-title">
13
- {#if errorIcon}
14
- <span class="icon error material-icons-outlined">report</span>
15
- {/if}
16
- <h2>{title}</h2>
17
- </div>
18
- <button type="button" class="close-button material-icons-outlined" onclick={onclose}>close</button
19
- >
20
- </header>
12
+ {#if !hideHeader}
13
+ <header class="modal-header">
14
+ <div class="modal-header-title">
15
+ {#if errorIcon}
16
+ <span class="icon error material-icons-outlined">report</span>
17
+ {/if}
18
+ <h2>{title}</h2>
19
+ </div>
20
+ <button type="button" class="close-button material-icons-outlined" onclick={onclose}>close</button
21
+ >
22
+ </header>
23
+ {/if}
21
24
 
22
25
  <style>
23
26
  .modal-header,
@@ -29,6 +32,7 @@
29
32
  .modal-header {
30
33
  padding: 24px;
31
34
  align-self: stretch;
35
+ border-bottom: 1px solid #aeb1b9;
32
36
  }
33
37
 
34
38
  .modal-header-title > .icon {
@@ -9,6 +9,7 @@ export interface ModalProps extends ModalHeaderProps, ModalFooterProps {
9
9
  export interface ModalHeaderProps {
10
10
  title?: string;
11
11
  errorIcon?: boolean;
12
+ hideHeader?: boolean;
12
13
  }
13
14
  export interface ModalFooterProps {
14
15
  footer?: Snippet;
@@ -0,0 +1,89 @@
1
+ <script lang="ts">
2
+ import Modal from '../Modal/Modal.svelte';
3
+ import type { ProcessingProps } from './processingState.svelte.js';
4
+
5
+ let {
6
+ title = 'Processing your request',
7
+ text = '',
8
+ show = $bindable(true),
9
+ asModal = false
10
+ }: ProcessingProps = $props();
11
+ </script>
12
+
13
+ {#snippet processingContent()}
14
+ <div class="processing-header">
15
+ <span class="material-icons-outlined processing-icon">autorenew</span>
16
+ <div class="processing-content">
17
+ <h2 class="processing-title">{title}</h2>
18
+ {#if text}
19
+ <p class="processing-text">{text}</p>
20
+ {/if}
21
+ </div>
22
+ </div>
23
+ {/snippet}
24
+
25
+ {#if show}
26
+ {#if asModal}
27
+ <Modal bind:showModal={show} width="xs" hideHeader>
28
+ <div class="modal-processing-content">
29
+ {@render processingContent()}
30
+ </div>
31
+ </Modal>
32
+ {:else}
33
+ {@render processingContent()}
34
+ {/if}
35
+ {/if}
36
+
37
+ <style>
38
+ .processing-header {
39
+ display: flex;
40
+ flex-direction: column;
41
+ align-items: center;
42
+ text-align: center;
43
+ gap: 24px;
44
+ }
45
+
46
+ .processing-content {
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 8px;
50
+ }
51
+
52
+ .processing-title {
53
+ font-size: 18px;
54
+ font-weight: 700;
55
+ }
56
+
57
+ .processing-text {
58
+ font-size: 16px;
59
+ white-space: pre-line;
60
+ line-height: 1.5;
61
+ }
62
+
63
+ .processing-icon {
64
+ background: linear-gradient(256deg, #00c9cd -2.41%, #472aff 31.72%, #392d9c 65.86%, #000 100%);
65
+ background-clip: text;
66
+ -webkit-background-clip: text;
67
+ -webkit-text-fill-color: transparent;
68
+ font-size: 32px;
69
+ animation: rotate 2s linear infinite;
70
+ }
71
+
72
+ @keyframes rotate {
73
+ from {
74
+ transform: rotate(0deg);
75
+ }
76
+ to {
77
+ transform: rotate(360deg);
78
+ }
79
+ }
80
+
81
+ .modal-processing-content {
82
+ display: flex;
83
+ flex-direction: column;
84
+ justify-content: center;
85
+ align-items: center;
86
+ min-height: 200px;
87
+ width: 100%;
88
+ }
89
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { ProcessingProps } from './processingState.svelte.js';
2
+ declare const Processing: import("svelte").Component<ProcessingProps, {}, "show">;
3
+ type Processing = ReturnType<typeof Processing>;
4
+ export default Processing;
@@ -0,0 +1,6 @@
1
+ export interface ProcessingProps {
2
+ title?: string;
3
+ text?: string;
4
+ show?: boolean;
5
+ asModal?: boolean;
6
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,78 @@
1
+ <script lang="ts">
2
+ import { type SwitcherOption } from '../index.js';
3
+
4
+ interface SwitcherProps {
5
+ options: string[] | SwitcherOption[];
6
+ value?: string | null;
7
+ }
8
+
9
+ let { options, value = $bindable() }: SwitcherProps = $props();
10
+
11
+ const isStringArray = (items: string[] | SwitcherOption[]): items is string[] =>
12
+ typeof items[0] === 'string';
13
+
14
+ const originalOptions = $derived<SwitcherOption[]>(
15
+ isStringArray(options) ? options.map((option) => ({ label: option, value: option })) : options
16
+ );
17
+ </script>
18
+
19
+ <div class="switcher-container">
20
+ {#each originalOptions as option}
21
+ <button
22
+ type="button"
23
+ class={['switcher-option', option.value === value && 'active']}
24
+ onclick={() => (value = option.value)}
25
+ >
26
+ {option.label}
27
+ </button>
28
+ {/each}
29
+ </div>
30
+
31
+ <style>
32
+ .switcher-container {
33
+ --primary-color: #472aff;
34
+ --white: #fff;
35
+ --info-1: #eaecff;
36
+ --gray-1: #f4f6f8;
37
+ --gray-3: #aeb1b9;
38
+ --gray-4: #6b7180;
39
+
40
+ display: flex;
41
+ flex-wrap: wrap;
42
+ width: fit-content;
43
+ padding: 4px;
44
+ gap: 12px;
45
+ border: 1px solid var(--gray-3);
46
+ border-radius: 8px;
47
+ }
48
+
49
+ .switcher-container > .switcher-option {
50
+ cursor: pointer;
51
+ border: none;
52
+ padding: 4px 20px;
53
+ font-size: 14px;
54
+ color: var(--gray-4);
55
+ font-weight: 500;
56
+ border-radius: 8px;
57
+ background: none;
58
+ }
59
+
60
+ .switcher-container > .switcher-option:hover {
61
+ background: var(--gray-1);
62
+ }
63
+
64
+ .switcher-container > .switcher-option:focus-visible {
65
+ box-shadow: 0px 0px 0px 3px #959bff;
66
+ outline: none;
67
+ }
68
+
69
+ .switcher-container > .switcher-option.active {
70
+ color: var(--white);
71
+ background: var(--primary-color);
72
+ transition: background 0.2s ease-in-out;
73
+ }
74
+
75
+ .switcher-container > .switcher-option.active:hover {
76
+ background: #3520bf;
77
+ }
78
+ </style>
@@ -0,0 +1,8 @@
1
+ import { type SwitcherOption } from '../index.js';
2
+ interface SwitcherProps {
3
+ options: string[] | SwitcherOption[];
4
+ value?: string | null;
5
+ }
6
+ declare const Switcher: import("svelte").Component<SwitcherProps, {}, "value">;
7
+ type Switcher = ReturnType<typeof Switcher>;
8
+ export default Switcher;
@@ -0,0 +1,4 @@
1
+ export interface SwitcherOption {
2
+ value: string;
3
+ label: string;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,95 @@
1
+ <script lang="ts">
2
+ import { fade } from 'svelte/transition';
3
+ import type { WaffleItem } from './waffleState.svelte.js';
4
+ import WaffleItems from './WaffleItems.svelte';
5
+
6
+ interface Props {
7
+ items?: WaffleItem[];
8
+ showWaffle?: boolean;
9
+ }
10
+
11
+ let { items = [], showWaffle = false }: Props = $props();
12
+
13
+ const handleTileClick = (item: WaffleItem) => {
14
+ onHandleWaffle();
15
+ window.open(item.url, '_blank', 'noopener,noreferrer');
16
+ };
17
+
18
+ const onHandleWaffle = () => {
19
+ showWaffle = !showWaffle;
20
+ };
21
+ </script>
22
+
23
+ {#if showWaffle}
24
+ <div
25
+ class="waffle-backdrop"
26
+ onclick={onHandleWaffle}
27
+ onkeydown={onHandleWaffle}
28
+ transition:fade={{ duration: 200 }}
29
+ role="button"
30
+ tabindex="0"
31
+ aria-label="Close waffle menu"
32
+ ></div>
33
+
34
+ <aside
35
+ class="waffle-dropdown"
36
+ transition:fade={{ duration: 250 }}
37
+ role="dialog"
38
+ aria-labelledby="waffle-title"
39
+ aria-modal="true"
40
+ >
41
+ <h2 class="waffle-title">SoftwareOne Cloud</h2>
42
+
43
+ <div class="waffle-content">
44
+ <ul class="waffle-grid" role="list">
45
+ {#each items as item (item.title)}
46
+ <li role="listitem">
47
+ <WaffleItems {...item} onclickwaffleitems={() => handleTileClick(item)} />
48
+ </li>
49
+ {/each}
50
+ </ul>
51
+ </div>
52
+ </aside>
53
+ {/if}
54
+
55
+ <style>
56
+ .waffle-backdrop {
57
+ position: fixed;
58
+ inset: 0;
59
+ background: rgba(243, 244, 246, 0.5);
60
+ cursor: pointer;
61
+ z-index: 30;
62
+ }
63
+
64
+ .waffle-dropdown {
65
+ position: absolute;
66
+ display: flex;
67
+ flex-direction: column;
68
+ border-radius: 8px;
69
+ background: #fff;
70
+ box-shadow:
71
+ 0 10px 15px -3px rgba(0, 0, 0, 0.1),
72
+ 0 4px 6px -2px rgba(0, 0, 0, 0.05);
73
+ top: 80px;
74
+ left: 0;
75
+ z-index: 40;
76
+ width: 600px;
77
+ }
78
+
79
+ .waffle-content {
80
+ padding: 20px 24px 24px 24px;
81
+ }
82
+
83
+ .waffle-title {
84
+ padding: 24px 24px 0 24px;
85
+ font-size: 14px;
86
+ font-weight: 600;
87
+ text-align: center;
88
+ }
89
+
90
+ .waffle-grid {
91
+ display: grid;
92
+ grid-template-columns: repeat(3, 1fr);
93
+ gap: 16px;
94
+ }
95
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { WaffleItem } from './waffleState.svelte.js';
2
+ interface Props {
3
+ items?: WaffleItem[];
4
+ showWaffle?: boolean;
5
+ }
6
+ declare const Waffle: import("svelte").Component<Props, {}, "">;
7
+ type Waffle = ReturnType<typeof Waffle>;
8
+ export default Waffle;
@@ -0,0 +1,82 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ title: string;
4
+ icon: string;
5
+ isNew?: boolean;
6
+ onclickwaffleitems: VoidFunction;
7
+ }
8
+
9
+ let { title, icon, isNew = false, onclickwaffleitems }: Props = $props();
10
+ </script>
11
+
12
+ <button onclick={onclickwaffleitems} class="waffle-item-button">
13
+ {#if isNew}
14
+ <span class="waffle-new-badge" aria-label="New application">New</span>
15
+ {/if}
16
+
17
+ <figure class="waffle-icon-container" aria-hidden="true">
18
+ {@html icon}
19
+ </figure>
20
+
21
+ <h3 class="waffle-title">
22
+ {title}
23
+ </h3>
24
+ </button>
25
+
26
+ <style>
27
+ .waffle-item-button {
28
+ position: relative;
29
+ width: 150px;
30
+ height: 110px;
31
+ display: flex;
32
+ flex-direction: column;
33
+ align-items: center;
34
+ justify-content: center;
35
+ border-radius: 8px;
36
+ text-align: center;
37
+ border: none;
38
+ background: transparent;
39
+ cursor: pointer;
40
+ transition: background-color 0.2s ease-in-out;
41
+ }
42
+
43
+ .waffle-item-button:hover {
44
+ background: #f4f6f8;
45
+ }
46
+
47
+ .waffle-item-button:focus, .waffle-item-button:focus-visible {
48
+ background: #eaecff;
49
+ }
50
+
51
+ .waffle-new-badge {
52
+ position: absolute;
53
+ top: 8px;
54
+ right: 8px;
55
+ background: #e6f9f2;
56
+ color: #29764d;
57
+ font-size: 14px;
58
+ font-weight: 500;
59
+ padding: 2px 6px;
60
+ border-radius: 4px;
61
+ }
62
+
63
+ .waffle-icon-container {
64
+ width: 40px;
65
+ height: 40px;
66
+ margin-bottom: 12px;
67
+ display: flex;
68
+ align-items: center;
69
+ justify-content: center;
70
+ }
71
+
72
+ .waffle-title {
73
+ color: #000;
74
+ font-weight: 500;
75
+ font-size: inherit;
76
+ word-break: break-words;
77
+ line-height: 1.25;
78
+ text-align: center;
79
+ padding: 0 4px;
80
+ margin: 0;
81
+ }
82
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ title: string;
3
+ icon: string;
4
+ isNew?: boolean;
5
+ onclickwaffleitems: VoidFunction;
6
+ }
7
+ declare const WaffleItems: import("svelte").Component<Props, {}, "">;
8
+ type WaffleItems = ReturnType<typeof WaffleItems>;
9
+ export default WaffleItems;
@@ -0,0 +1,6 @@
1
+ export interface WaffleItem {
2
+ title: string;
3
+ url: string;
4
+ icon: string;
5
+ isNew?: boolean;
6
+ }
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.d.ts CHANGED
@@ -27,15 +27,20 @@ import type { MenuItem } from './Menu/SidebarState.svelte';
27
27
  import Modal from './Modal/Modal.svelte';
28
28
  import type { ModalProps } from './Modal/modalState.svelte.js';
29
29
  import Notification from './Notification/Notification.svelte';
30
+ import Processing from './Processing/Processing.svelte';
30
31
  import ProgressPage from './ProgressPage/ProgressPage.svelte';
31
32
  import { setProgressWizardStepsContext, getProgressWizardContext } from './ProgressWizard/context.js';
32
33
  import ProgressWizard from './ProgressWizard/ProgressWizard.svelte';
33
34
  import { setStepValidity, type ProgressWizardStep } from './ProgressWizard/progressWizardState.svelte.js';
34
35
  import Search from './Search/Search.svelte';
35
36
  import Spinner from './Spinner/Spinner.svelte';
37
+ import Switcher from './Switcher/Switcher.svelte';
38
+ import type { SwitcherOption } from './Switcher/switcherState.svelte.js';
36
39
  import Tabs from './Tabs/Tabs.svelte';
37
40
  import type { Tab } from './Tabs/tabsState.svelte.js';
38
41
  import Toaster from './Toast/Toast.svelte';
39
42
  import { addToast, type Toast } from './Toast/toastState.svelte';
40
43
  import Tooltip from './Tooltip/Tooltip.svelte';
41
- export { Accordion, addBreadcrumbsNameMap, addToast, Avatar, Breadcrumbs, Button, Card, Chips, ChipType, ColumnType, ErrorPage, Footer, getProgressWizardContext, Header, HeaderAccount, HeaderLoader, HeaderLogo, HighlightPanel, Home, ImageType, Input, Menu, Modal, Notification, ProgressPage, ProgressWizard, Search, Select, setStepValidity, setProgressWizardStepsContext, Sidebar, Spinner, Tabs, TextArea, Toaster, Toggle, Tooltip, type BreadcrumbsNameMap, type HighlightPanelColumn, type HomeItem, type MenuItem, type ModalProps, type ProgressWizardStep, type SelectOption, type Tab, type Toast };
44
+ import Waffle from './Waffle/Waffle.svelte';
45
+ import type { WaffleItem } from './Waffle/waffleState.svelte.js';
46
+ export { Accordion, addBreadcrumbsNameMap, addToast, Avatar, Breadcrumbs, Button, Card, Chips, ChipType, ColumnType, ErrorPage, Footer, getProgressWizardContext, Header, HeaderAccount, HeaderLoader, HeaderLogo, HighlightPanel, Home, ImageType, Input, Menu, Modal, Notification, Processing, ProgressPage, ProgressWizard, Search, Select, setStepValidity, setProgressWizardStepsContext, Sidebar, Spinner, Switcher, Tabs, TextArea, Toaster, Toggle, Tooltip, Waffle, type BreadcrumbsNameMap, type HighlightPanelColumn, type HomeItem, type MenuItem, type ModalProps, type ProgressWizardStep, type SelectOption, type SwitcherOption, type Tab, type Toast, type WaffleItem };
package/dist/index.js CHANGED
@@ -23,14 +23,17 @@ import Menu from './Menu/Menu.svelte';
23
23
  import Sidebar from './Menu/Sidebar.svelte';
24
24
  import Modal from './Modal/Modal.svelte';
25
25
  import Notification from './Notification/Notification.svelte';
26
+ import Processing from './Processing/Processing.svelte';
26
27
  import ProgressPage from './ProgressPage/ProgressPage.svelte';
27
28
  import { setProgressWizardStepsContext, getProgressWizardContext } from './ProgressWizard/context.js';
28
29
  import ProgressWizard from './ProgressWizard/ProgressWizard.svelte';
29
30
  import { setStepValidity } from './ProgressWizard/progressWizardState.svelte.js';
30
31
  import Search from './Search/Search.svelte';
31
32
  import Spinner from './Spinner/Spinner.svelte';
33
+ import Switcher from './Switcher/Switcher.svelte';
32
34
  import Tabs from './Tabs/Tabs.svelte';
33
35
  import Toaster from './Toast/Toast.svelte';
34
36
  import { addToast } from './Toast/toastState.svelte';
35
37
  import Tooltip from './Tooltip/Tooltip.svelte';
36
- export { Accordion, addBreadcrumbsNameMap, addToast, Avatar, Breadcrumbs, Button, Card, Chips, ChipType, ColumnType, ErrorPage, Footer, getProgressWizardContext, Header, HeaderAccount, HeaderLoader, HeaderLogo, HighlightPanel, Home, ImageType, Input, Menu, Modal, Notification, ProgressPage, ProgressWizard, Search, Select, setStepValidity, setProgressWizardStepsContext, Sidebar, Spinner, Tabs, TextArea, Toaster, Toggle, Tooltip };
38
+ import Waffle from './Waffle/Waffle.svelte';
39
+ export { Accordion, addBreadcrumbsNameMap, addToast, Avatar, Breadcrumbs, Button, Card, Chips, ChipType, ColumnType, ErrorPage, Footer, getProgressWizardContext, Header, HeaderAccount, HeaderLoader, HeaderLogo, HighlightPanel, Home, ImageType, Input, Menu, Modal, Notification, Processing, ProgressPage, ProgressWizard, Search, Select, setStepValidity, setProgressWizardStepsContext, Sidebar, Spinner, Switcher, Tabs, TextArea, Toaster, Toggle, Tooltip, Waffle };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softwareone/spi-sv5-library",
3
- "version": "1.3.2",
3
+ "version": "1.4.0",
4
4
  "description": "Svelte components",
5
5
  "keywords": [
6
6
  "svelte",