@softwareone/spi-sv5-library 1.14.4 → 1.15.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.
Files changed (79) hide show
  1. package/dist/components/accordion/Accordion.svelte +14 -23
  2. package/dist/components/announcement/Announcement.svelte +53 -61
  3. package/dist/components/avatar/Avatar.svelte +30 -12
  4. package/dist/components/avatar/Avatar.svelte.d.ts +2 -2
  5. package/dist/components/button/Button.svelte +41 -44
  6. package/dist/components/card/Card.svelte +4 -6
  7. package/dist/components/chips/Chips.svelte +37 -36
  8. package/dist/components/chips/Chips.svelte.d.ts +1 -1
  9. package/dist/components/confirmation/Confirmation.svelte +1 -1
  10. package/dist/components/controls/attach-file/AttachFile.svelte +18 -41
  11. package/dist/components/controls/attach-file/FileManager.svelte +16 -30
  12. package/dist/components/controls/attach-file/Warnings.svelte +13 -15
  13. package/dist/components/controls/input/Input.svelte +46 -72
  14. package/dist/components/controls/input/InputIcon.svelte +13 -13
  15. package/dist/components/controls/label/Label.svelte +5 -9
  16. package/dist/components/controls/radio-group/RadioGroup.svelte +25 -39
  17. package/dist/components/controls/select/Select.svelte +49 -71
  18. package/dist/components/controls/textarea/TextArea.svelte +36 -45
  19. package/dist/components/controls/toggle/Toggle.svelte +35 -37
  20. package/dist/components/delete-confirmation/DeleteConfirmation.svelte +1 -1
  21. package/dist/components/error-page/ErrorPage.svelte +9 -18
  22. package/dist/components/footer/Footer.svelte +6 -7
  23. package/dist/components/form/Form.svelte +1 -1
  24. package/dist/components/header/Header.svelte +39 -45
  25. package/dist/components/header/HeaderAccount.svelte +21 -33
  26. package/dist/components/header/HeaderLoader.svelte +13 -8
  27. package/dist/components/highlight-panel/HighlightPanel.svelte +29 -34
  28. package/dist/components/home/Home.svelte +18 -36
  29. package/dist/components/link/Link.svelte +1 -1
  30. package/dist/components/menu/Menu.svelte +12 -12
  31. package/dist/components/menu/MenuItem.svelte +25 -29
  32. package/dist/components/menu/Sidebar.svelte +32 -40
  33. package/dist/components/modal/Modal.svelte +8 -12
  34. package/dist/components/modal/ModalContent.svelte +3 -3
  35. package/dist/components/modal/ModalFooter.svelte +5 -5
  36. package/dist/components/modal/ModalHeader.svelte +6 -11
  37. package/dist/components/notification/Notification.svelte +20 -27
  38. package/dist/components/processing/Processing.svelte +9 -16
  39. package/dist/components/progress-page/ProgressPage.svelte +13 -18
  40. package/dist/components/progress-wizard/ProgressWizard.svelte +43 -54
  41. package/dist/components/search/Search.svelte +24 -29
  42. package/dist/components/spinner/Spinner.svelte +1 -1
  43. package/dist/components/switcher/Switcher.svelte +14 -23
  44. package/dist/components/table/ActionsColumn.svelte +13 -33
  45. package/dist/components/table/AdvancedFilter.svelte +39 -74
  46. package/dist/components/table/Body.svelte +9 -18
  47. package/dist/components/table/ColumnVisibilityDropdown.svelte +24 -55
  48. package/dist/components/table/Footer.svelte +2 -4
  49. package/dist/components/table/Header.svelte +23 -44
  50. package/dist/components/table/PageSize.svelte +24 -36
  51. package/dist/components/table/Pagination.svelte +49 -35
  52. package/dist/components/table/RowCheckBox.svelte +5 -12
  53. package/dist/components/table/Skeleton.svelte +16 -25
  54. package/dist/components/table/Table.svelte +50 -38
  55. package/dist/components/table/Table.svelte.d.ts +5 -1
  56. package/dist/components/table/types.d.ts +9 -1
  57. package/dist/components/table/utils.d.ts +5 -1
  58. package/dist/components/table/utils.js +8 -8
  59. package/dist/components/tabs/Tabs.svelte +16 -20
  60. package/dist/components/toast/Toast.svelte +27 -30
  61. package/dist/components/tooltip/Tooltip.svelte +15 -19
  62. package/dist/components/waffle/Waffle.svelte +9 -13
  63. package/dist/components/waffle/WaffleItems.svelte +10 -13
  64. package/dist/styles/index.css +3 -0
  65. package/dist/styles/reset.css +19 -0
  66. package/dist/styles/tokens/index.css +2 -0
  67. package/dist/styles/tokens/primitives/borders.css +17 -0
  68. package/dist/styles/tokens/primitives/colors.css +41 -0
  69. package/dist/styles/tokens/primitives/index.css +7 -0
  70. package/dist/styles/tokens/primitives/motion.css +11 -0
  71. package/dist/styles/tokens/primitives/opacity.css +6 -0
  72. package/dist/styles/tokens/primitives/shadows.css +11 -0
  73. package/dist/styles/tokens/primitives/sizing.css +19 -0
  74. package/dist/styles/tokens/primitives/typography.css +13 -0
  75. package/dist/styles/tokens/semantic/colors.css +78 -0
  76. package/dist/styles/tokens/semantic/index.css +2 -0
  77. package/dist/styles/tokens/semantic/shadows.css +9 -0
  78. package/dist/styles/utilities.css +73 -0
  79. package/package.json +3 -2
@@ -6,13 +6,21 @@ export interface Action {
6
6
  isMainAction?: boolean;
7
7
  onClick: VoidFunction;
8
8
  }
9
- export interface Pagination {
9
+ interface BasePagination {
10
10
  totalItems: number;
11
11
  totalPages: number;
12
+ }
13
+ export interface PagePagination extends BasePagination {
12
14
  currentPage: number;
13
15
  }
16
+ export interface CursorPagination extends BasePagination {
17
+ nextCursor?: string | null;
18
+ prevCursor?: string | null;
19
+ }
20
+ export type Pagination = PagePagination | CursorPagination;
14
21
  export interface Filter {
15
22
  column: string;
16
23
  value: string;
17
24
  operation?: Operation;
18
25
  }
26
+ export {};
@@ -1,8 +1,12 @@
1
1
  import { type ColumnDef, type Row } from './adapter/index.js';
2
- import type { Action, Filter } from './types.js';
2
+ import type { Action, CursorPagination, Filter, PagePagination, Pagination } from './types.js';
3
3
  export declare const createCheckedColumn: <T>() => import("./adapter/index.js").DisplayColumnDef<T, unknown>;
4
4
  export declare const createActionsColumn: <T>(getActions: (row: Row<T>) => Action[]) => import("./adapter/index.js").DisplayColumnDef<T, unknown>;
5
5
  export declare const createStaticTable: <TData>(columns: ColumnDef<TData, any>[], data: TData[]) => import("./adapter/index.js").Table<TData>;
6
+ export declare const isValidPage: (value: number | undefined) => value is number;
7
+ export declare const isValidPageSize: (value: number | undefined) => value is number;
6
8
  export declare const getPageLimit: (urlSearchParams: URLSearchParams) => number;
7
9
  export declare const getPage: (urlSearchParams: URLSearchParams) => number;
8
10
  export declare const sanitizeFilters: (filterParams: string[]) => Filter[];
11
+ export declare const isPagePagination: (pagination: Pagination) => pagination is PagePagination;
12
+ export declare const isCursorPagination: (pagination: Pagination) => pagination is CursorPagination;
@@ -58,17 +58,15 @@ export const createStaticTable = (columns, data) => {
58
58
  renderFallbackValue: null
59
59
  });
60
60
  };
61
+ export const isValidPage = (value) => value !== undefined && Number.isInteger(value) && value > 0;
62
+ export const isValidPageSize = (value) => value !== undefined && DEFAULT_ITEMS_PER_PAGE_OPTIONS.includes(value);
61
63
  export const getPageLimit = (urlSearchParams) => {
62
- const limitParam = urlSearchParams.get('limit');
63
- const limit = Number(limitParam);
64
- const isLimitValid = !Number.isNaN(limit) && DEFAULT_ITEMS_PER_PAGE_OPTIONS.includes(limit);
65
- return isLimitValid ? limit : DEFAULT_PAGE_LIMIT;
64
+ const limit = Number(urlSearchParams.get('limit'));
65
+ return isValidPageSize(limit) ? limit : DEFAULT_PAGE_LIMIT;
66
66
  };
67
67
  export const getPage = (urlSearchParams) => {
68
- const pageParam = urlSearchParams.get('page');
69
- const page = Number(pageParam);
70
- const isPageValid = pageParam && !Number.isNaN(page) && page > 0;
71
- return isPageValid ? page : DEFAULT_PAGE;
68
+ const page = Number(urlSearchParams.get('page'));
69
+ return isValidPage(page) ? page : DEFAULT_PAGE;
72
70
  };
73
71
  export const sanitizeFilters = (filterParams) => {
74
72
  return filterParams
@@ -100,3 +98,5 @@ const isValidFilter = (column, operator, value) => {
100
98
  const isValidOperation = (operation) => {
101
99
  return Object.values(Operation).includes(operation);
102
100
  };
101
+ export const isPagePagination = (pagination) => 'currentPage' in pagination;
102
+ export const isCursorPagination = (pagination) => 'nextCursor' in pagination || 'prevCursor' in pagination;
@@ -30,7 +30,7 @@
30
30
  aria-controls="panel-{tab.index}"
31
31
  tabindex={isActiveTab ? 0 : -1}
32
32
  type="button"
33
- class:active={isActiveTab}
33
+ class={isActiveTab ? 'active spi-text-semibold-3' : 'spi-text-medium-3'}
34
34
  onclick={handleClick(tab.index)}
35
35
  >
36
36
  {tab.label}
@@ -42,7 +42,7 @@
42
42
  {#each tabs as tab, index (index)}
43
43
  {#if activeTab === tab.index}
44
44
  <div
45
- class={['tabs-content', !tab.disablePadding && 'padding']}
45
+ class={['tabs-content', 'spi-text-regular-4', !tab.disablePadding && 'padding']}
46
46
  id="panel-{tab.index}"
47
47
  role="tabpanel"
48
48
  aria-labelledby="tab-{tab.index}"
@@ -67,40 +67,37 @@
67
67
 
68
68
  .tabs-list {
69
69
  display: flex;
70
- gap: 16px;
71
- border-bottom: 1px solid #e0e5e8;
72
- padding: 0 24px;
70
+ gap: var(--spi-size-4);
71
+ border-bottom: var(--spi-border-1) solid var(--spi-color-border-default);
72
+ padding: 0 var(--spi-size-6);
73
73
  }
74
74
 
75
75
  .tabs-list button {
76
- border-radius: 8px;
77
- background-color: #fff;
78
- padding: 20px 16px 20px;
76
+ border-radius: var(--spi-rounded-lg);
77
+ background-color: var(--spi-color-surface-default);
78
+ padding: var(--spi-size-5) var(--spi-size-4);
79
79
  position: relative;
80
80
  border: none;
81
- font-size: 16px;
82
- font-weight: 500;
83
81
  }
84
82
 
85
83
  .tabs-list button:hover {
86
- background-color: #f4f6f8;
84
+ background-color: var(--spi-color-surface-subtle);
87
85
  cursor: pointer;
88
86
  }
89
87
 
90
88
  .tabs-list button.active {
91
- color: #472aff;
92
- font-weight: 600;
89
+ color: var(--spi-color-primary-base);
93
90
  }
94
91
 
95
92
  .tabs-list button::after {
96
93
  content: '';
97
94
  position: absolute;
98
95
  left: 50%;
99
- bottom: -2px;
96
+ bottom: calc(-1 * var(--spi-border-2));
100
97
  width: 0;
101
- height: 4px;
102
- background-color: #472aff;
103
- border-radius: 8px;
98
+ height: var(--spi-size-1);
99
+ background-color: var(--spi-color-primary-base);
100
+ border-radius: var(--spi-rounded-lg);
104
101
  transform: translateX(-50%);
105
102
  }
106
103
 
@@ -113,15 +110,14 @@
113
110
  width: 100%;
114
111
  height: 100%;
115
112
  position: relative;
116
- border-radius: 0px 0px 16px 16px;
113
+ border-radius: 0 0 var(--spi-rounded-2xl) var(--spi-rounded-2xl);
117
114
  overflow-wrap: break-word;
118
115
  box-sizing: border-box;
119
116
  min-height: 300px;
120
117
  text-align: left;
121
- font-size: 18px;
122
118
  }
123
119
 
124
120
  .padding {
125
- padding: 24px;
121
+ padding: var(--spi-size-6);
126
122
  }
127
123
  </style>
@@ -28,7 +28,7 @@
28
28
  <div class="toast" in:fly={transitionConfig} out:fly={transitionConfig}>
29
29
  <span class="status-indicator {toast.type}"></span>
30
30
  <div class="toast-content-container">
31
- <div class="toast-content">
31
+ <div class="toast-content spi-text-regular-2">
32
32
  <span>{toast.message}</span>
33
33
  {#if toast.link}
34
34
  <a class="toast-content-link" href={toast.link} title="View details"
@@ -53,12 +53,12 @@
53
53
  <style>
54
54
  .toast-container {
55
55
  position: fixed;
56
- top: 96px;
57
- right: 16px;
56
+ top: var(--spi-size-24);
57
+ right: var(--spi-size-4);
58
58
  z-index: 9999;
59
59
  display: flex;
60
60
  flex-direction: column;
61
- gap: 16px;
61
+ gap: var(--spi-size-4);
62
62
  align-items: flex-end;
63
63
  }
64
64
 
@@ -66,17 +66,14 @@
66
66
  min-width: 400px;
67
67
  max-width: 600px;
68
68
  width: fit-content;
69
- min-height: 52px;
69
+ min-height: var(--spi-size-14);
70
70
  display: inline-flex;
71
- padding: 8px;
72
- gap: 16px;
73
- border-radius: 8px;
74
- border: 1px solid #e0e5e8;
75
- background: #fff;
76
- box-shadow:
77
- 0px 4px 5px 0px rgba(51, 56, 64, 0.15),
78
- 0px 1px 3px 0px rgba(51, 56, 64, 0.2),
79
- 0px 1px 16px 0px rgba(51, 56, 64, 0.1);
71
+ padding: var(--spi-size-2);
72
+ gap: var(--spi-size-4);
73
+ border-radius: var(--spi-rounded-lg);
74
+ border: var(--spi-border-1) solid var(--spi-color-border-default);
75
+ background: var(--spi-color-surface-default);
76
+ box-shadow: var(--spi-shadow-card);
80
77
  }
81
78
 
82
79
  .toast-content {
@@ -84,55 +81,55 @@
84
81
  justify-content: space-between;
85
82
  flex-direction: row;
86
83
  flex-wrap: wrap;
87
- gap: 8px;
88
- padding: 8px 0px;
89
- font-size: 14px;
90
- font-weight: 400;
91
- line-height: 20px;
84
+ gap: var(--spi-size-2);
85
+ padding: var(--spi-size-2) 0;
92
86
  align-items: center;
93
87
  }
94
88
 
95
89
  .toast-content-container {
96
90
  display: flex;
97
91
  align-items: center;
98
- gap: 16px;
92
+ gap: var(--spi-size-4);
99
93
  flex-grow: 1;
100
94
  }
101
95
 
102
96
  .status-indicator {
103
- width: 8px;
97
+ width: var(--spi-size-2);
104
98
  align-self: stretch;
105
99
  flex-shrink: 0;
106
- border-radius: 4px;
100
+ border-radius: var(--spi-rounded-sm);
107
101
  background-color: var(--toast-bg);
108
102
  }
109
103
 
110
104
  .toast-content-link {
111
105
  display: flex;
112
106
  align-items: center;
113
- color: #2b1999;
107
+ color: var(--spi-color-primary-darker);
114
108
  }
115
109
 
116
110
  .toast-content-link:hover {
117
- color: #472aff;
111
+ color: var(--spi-color-primary-base);
118
112
  text-decoration: underline;
119
113
  }
120
114
 
121
115
  .status-indicator.info {
122
- --toast-bg: #472aff;
116
+ --toast-bg: var(--spi-color-primary-base);
123
117
  }
124
118
 
125
119
  .status-indicator.warning {
126
- --toast-bg: #e87d1e;
120
+ --toast-bg: var(--spi-color-warning-base);
127
121
  }
122
+
128
123
  .status-indicator.danger {
129
- --toast-bg: #dc182c;
124
+ --toast-bg: var(--spi-color-danger-base);
130
125
  }
126
+
131
127
  .status-indicator.neutral {
132
- --toast-bg: #6b7180;
128
+ --toast-bg: var(--spi-color-neutral-base);
133
129
  }
130
+
134
131
  .status-indicator.success {
135
- --toast-bg: #008556;
132
+ --toast-bg: var(--spi-color-success-base);
136
133
  }
137
134
 
138
135
  .toast-close-container {
@@ -147,7 +144,7 @@
147
144
 
148
145
  .toast-close-button:hover {
149
146
  cursor: pointer;
150
- color: #434952;
147
+ color: var(--spi-color-text-secondary);
151
148
  }
152
149
 
153
150
  .toast-close-button:focus {
@@ -51,7 +51,7 @@
51
51
 
52
52
  {#if isVisible && content}
53
53
  <div
54
- class="tooltip tooltip-{position} tooltip-{width} {customClass}"
54
+ class="tooltip tooltip-{position} tooltip-{width} {customClass} spi-text-regular-2"
55
55
  in:fly={transitionConfig}
56
56
  out:fly={transitionConfig}
57
57
  role="tooltip"
@@ -76,15 +76,12 @@
76
76
  .tooltip {
77
77
  position: absolute;
78
78
  z-index: 1000;
79
- padding: 8px 12px;
80
- border-radius: 6px;
81
- font-size: 14px;
82
- font-weight: 400;
83
- line-height: 20px;
79
+ padding: var(--spi-size-2) var(--spi-size-3);
80
+ border-radius: var(--spi-rounded-md);
84
81
  text-align: center;
85
82
  pointer-events: none;
86
- background-color: #25282d;
87
- color: #ffffff;
83
+ background-color: var(--spi-color-neutral-darkest);
84
+ color: var(--spi-color-text-inverse);
88
85
  white-space: normal;
89
86
  }
90
87
 
@@ -101,66 +98,65 @@
101
98
  }
102
99
 
103
100
  .tooltip-top {
104
- bottom: calc(100% + 12px);
101
+ bottom: calc(100% + var(--spi-size-3));
105
102
  left: 50%;
106
103
  transform: translateX(-50%);
107
104
  }
108
105
 
109
106
  .tooltip-bottom {
110
- top: calc(100% + 12px);
107
+ top: calc(100% + var(--spi-size-3));
111
108
  left: 50%;
112
109
  transform: translateX(-50%);
113
110
  }
114
111
 
115
112
  .tooltip-left {
116
113
  top: 50%;
117
- right: calc(100% + 12px);
114
+ right: calc(100% + var(--spi-size-3));
118
115
  transform: translateY(-50%);
119
116
  }
120
117
 
121
118
  .tooltip-right {
122
119
  top: 50%;
123
- left: calc(100% + 12px);
120
+ left: calc(100% + var(--spi-size-3));
124
121
  transform: translateY(-50%);
125
122
  }
126
123
 
127
124
  .tooltip-arrow {
128
125
  position: absolute;
129
- border: 6px solid transparent;
126
+ border: var(--spi-border-5) solid transparent;
130
127
  }
131
128
 
132
129
  .tooltip-arrow-top {
133
130
  top: 100%;
134
131
  left: 50%;
135
132
  transform: translateX(-50%);
136
- border-top-color: #25282d;
133
+ border-top-color: var(--spi-color-neutral-darkest);
137
134
  }
138
135
 
139
136
  .tooltip-arrow-bottom {
140
137
  bottom: 100%;
141
138
  left: 50%;
142
139
  transform: translateX(-50%);
143
- border-bottom-color: #25282d;
140
+ border-bottom-color: var(--spi-color-neutral-darkest);
144
141
  }
145
142
 
146
143
  .tooltip-arrow-left {
147
144
  top: 50%;
148
145
  left: 100%;
149
146
  transform: translateY(-50%);
150
- border-left-color: #25282d;
147
+ border-left-color: var(--spi-color-neutral-darkest);
151
148
  }
152
149
 
153
150
  .tooltip-arrow-right {
154
151
  top: 50%;
155
152
  right: 100%;
156
153
  transform: translateY(-50%);
157
- border-right-color: #25282d;
154
+ border-right-color: var(--spi-color-neutral-darkest);
158
155
  }
159
156
 
160
157
  @media (max-width: 768px) {
161
158
  .tooltip {
162
- font-size: 11px;
163
- padding: 6px 10px;
159
+ padding: var(--spi-size-1) var(--spi-size-2);
164
160
  }
165
161
  }
166
162
  </style>
@@ -39,7 +39,7 @@
39
39
  aria-labelledby="waffle-title"
40
40
  aria-modal="true"
41
41
  >
42
- <h2 class="waffle-title">SoftwareOne Cloud</h2>
42
+ <h2 class="waffle-title spi-text-semibold-2">SoftwareOne Cloud</h2>
43
43
 
44
44
  <div class="waffle-content">
45
45
  <ul class="waffle-grid" role="list">
@@ -57,7 +57,7 @@
57
57
  .waffle-backdrop {
58
58
  position: fixed;
59
59
  inset: 0;
60
- background: rgba(243, 244, 246, 0.5);
60
+ background: var(--spi-color-backdrop);
61
61
  cursor: pointer;
62
62
  z-index: 30;
63
63
  }
@@ -66,31 +66,27 @@
66
66
  position: absolute;
67
67
  display: flex;
68
68
  flex-direction: column;
69
- border-radius: 8px;
70
- background: #fff;
71
- box-shadow:
72
- 0 10px 15px -3px rgba(0, 0, 0, 0.1),
73
- 0 4px 6px -2px rgba(0, 0, 0, 0.05);
74
- top: 80px;
69
+ border-radius: var(--spi-rounded-lg);
70
+ background: var(--spi-color-surface-default);
71
+ box-shadow: var(--spi-shadow-dropdown);
72
+ top: var(--spi-size-20);
75
73
  left: 0;
76
74
  z-index: 40;
77
75
  width: 600px;
78
76
  }
79
77
 
80
78
  .waffle-content {
81
- padding: 20px 24px 24px 24px;
79
+ padding: var(--spi-size-5) var(--spi-size-6) var(--spi-size-6) var(--spi-size-6);
82
80
  }
83
81
 
84
82
  .waffle-title {
85
- padding: 24px 24px 0 24px;
86
- font-size: 14px;
87
- font-weight: 600;
83
+ padding: var(--spi-size-6) var(--spi-size-6) 0 var(--spi-size-6);
88
84
  text-align: center;
89
85
  }
90
86
 
91
87
  .waffle-grid {
92
88
  display: grid;
93
89
  grid-template-columns: repeat(3, 1fr);
94
- gap: 16px;
90
+ gap: var(--spi-size-4);
95
91
  }
96
92
  </style>
@@ -10,7 +10,7 @@
10
10
 
11
11
  <button type="button" onclick={onclickwaffleitems} class="waffle-item-button">
12
12
  <img src={iconUrl} alt="" aria-hidden="true" class="waffle-item-img" />
13
- <h3 class="waffle-title">
13
+ <h3 class="waffle-title spi-text-medium-2">
14
14
  {title}
15
15
  </h3>
16
16
  </button>
@@ -24,39 +24,36 @@
24
24
  flex-direction: column;
25
25
  align-items: center;
26
26
  justify-content: center;
27
- border-radius: 8px;
27
+ border-radius: var(--spi-rounded-lg);
28
28
  text-align: center;
29
29
  border: none;
30
30
  background: transparent;
31
31
  cursor: pointer;
32
- transition: background-color 0.2s ease-in-out;
32
+ transition: background-color var(--spi-duration-normal) var(--spi-ease-in-out);
33
33
  }
34
34
 
35
35
  .waffle-item-button:hover {
36
- background: #f4f6f8;
36
+ background: var(--spi-color-surface-subtle);
37
37
  }
38
38
 
39
39
  .waffle-item-button:focus,
40
40
  .waffle-item-button:focus-visible {
41
- background: #eaecff;
41
+ background: var(--spi-color-primary-lighter);
42
42
  }
43
43
 
44
44
  .waffle-item-img {
45
- width: 40px;
46
- height: 40px;
47
- margin-bottom: 12px;
45
+ width: var(--spi-size-10);
46
+ height: var(--spi-size-10);
47
+ margin-bottom: var(--spi-size-3);
48
48
  filter: invert(27%) sepia(99%) saturate(4729%) hue-rotate(240deg) brightness(101%)
49
49
  contrast(106%);
50
50
  }
51
51
 
52
52
  .waffle-title {
53
- color: #000;
54
- font-weight: 500;
55
- font-size: inherit;
53
+ color: var(--spi-color-text-primary);
56
54
  word-break: break-words;
57
- line-height: 1.25;
58
55
  text-align: center;
59
- padding: 0 4px;
56
+ padding: 0 var(--spi-size-1);
60
57
  margin: 0;
61
58
  }
62
59
  </style>
@@ -0,0 +1,3 @@
1
+ @import './tokens/index.css';
2
+ @import './reset.css';
3
+ @import './utilities.css';
@@ -0,0 +1,19 @@
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ margin: 0;
5
+ padding: 0;
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ ul,
10
+ ol,
11
+ li,
12
+ summary {
13
+ list-style: none;
14
+ }
15
+
16
+ a {
17
+ text-decoration: none;
18
+ color: inherit;
19
+ }
@@ -0,0 +1,2 @@
1
+ @import './primitives/index.css';
2
+ @import './semantic/index.css';
@@ -0,0 +1,17 @@
1
+ :root {
2
+ --spi-border-1: 1px;
3
+ --spi-border-2: 2px;
4
+ --spi-border-3: 3px;
5
+ --spi-border-4: 4px;
6
+ --spi-border-5: 5px;
7
+
8
+ --spi-rounded-none: 0;
9
+ --spi-rounded-xs: 2px;
10
+ --spi-rounded-sm: 4px;
11
+ --spi-rounded-md: 6px;
12
+ --spi-rounded-lg: 8px;
13
+ --spi-rounded-xl: 12px;
14
+ --spi-rounded-2xl: 16px;
15
+ --spi-rounded-3xl: 24px;
16
+ --spi-rounded-full: 9999px;
17
+ }
@@ -0,0 +1,41 @@
1
+ :root {
2
+ --spi-color-violet-1: #eaecff;
3
+ --spi-color-violet-2: #959bff;
4
+ --spi-color-violet-3: #472aff;
5
+ --spi-color-violet-4: #3520bf;
6
+ --spi-color-violet-5: #2b1999;
7
+
8
+ --spi-color-red-1: #fce8ea;
9
+ --spi-color-red-2: #ee8c96;
10
+ --spi-color-red-3: #dc182c;
11
+ --spi-color-red-4: #bb1425;
12
+ --spi-color-red-5: #8f101d;
13
+
14
+ --spi-color-gray-1: #f4f6f8;
15
+ --spi-color-gray-2: #e0e5e8;
16
+ --spi-color-gray-3: #aeb1b9;
17
+ --spi-color-gray-4: #6b7180;
18
+ --spi-color-gray-5: #434952;
19
+ --spi-color-gray-6: #25282d;
20
+
21
+ --spi-color-green-1: #e6f9f2;
22
+ --spi-color-green-2: #80e1ae;
23
+ --spi-color-green-3: #008556;
24
+ --spi-color-green-4: #00784d;
25
+ --spi-color-green-5: #005838;
26
+
27
+ --spi-color-blue-1: #cae4ff;
28
+ --spi-color-blue-2: #4da6ff;
29
+ --spi-color-blue-3: #2775c4;
30
+ --spi-color-blue-4: #1f5c99;
31
+ --spi-color-blue-5: #174475;
32
+
33
+ --spi-color-orange-1: #fdf2e9;
34
+ --spi-color-orange-2: #f1b178;
35
+ --spi-color-orange-3: #e87d1e;
36
+ --spi-color-orange-4: #733f11;
37
+ --spi-color-orange-5: #4d2a0b;
38
+
39
+ --spi-color-white: #ffffff;
40
+ --spi-color-black: #000000;
41
+ }
@@ -0,0 +1,7 @@
1
+ @import './borders.css';
2
+ @import './colors.css';
3
+ @import './motion.css';
4
+ @import './opacity.css';
5
+ @import './shadows.css';
6
+ @import './sizing.css';
7
+ @import './typography.css';
@@ -0,0 +1,11 @@
1
+ :root {
2
+ --spi-duration-fast: 100ms;
3
+ --spi-duration-normal: 200ms;
4
+ --spi-duration-slow: 300ms;
5
+ --spi-duration-slower: 500ms;
6
+
7
+ --spi-ease-default: ease;
8
+ --spi-ease-in: ease-in;
9
+ --spi-ease-out: ease-out;
10
+ --spi-ease-in-out: ease-in-out;
11
+ }
@@ -0,0 +1,6 @@
1
+ :root {
2
+ --spi-opacity-0: 0;
3
+ --spi-opacity-50: 0.5;
4
+ --spi-opacity-100: 1;
5
+ --spi-opacity-disabled: 0.4;
6
+ }
@@ -0,0 +1,11 @@
1
+ :root {
2
+ --spi-shadow-sm: 0 1px 16px 0 rgba(107, 113, 128, 0.1), 0 1px 3px 0 rgba(107, 113, 128, 0.2);
3
+
4
+ --spi-shadow-md:
5
+ 0 1px 10px 0 rgba(51, 56, 64, 0.12), 0 2px 4px -1px rgba(51, 56, 64, 0.2),
6
+ 0 4px 5px 0 rgba(51, 56, 64, 0.14);
7
+
8
+ --spi-shadow-lg:
9
+ 0 4px 5px 0 rgba(51, 56, 64, 0.15), 0 1px 3px 0 rgba(51, 56, 64, 0.2),
10
+ 0 1px 16px 0 rgba(51, 56, 64, 0.1);
11
+ }
@@ -0,0 +1,19 @@
1
+ :root {
2
+ --spi-size-1: 4px;
3
+ --spi-size-2: 8px;
4
+ --spi-size-3: 12px;
5
+ --spi-size-4: 16px;
6
+ --spi-size-5: 20px;
7
+ --spi-size-6: 24px;
8
+ --spi-size-7: 28px;
9
+ --spi-size-8: 32px;
10
+ --spi-size-9: 36px;
11
+ --spi-size-10: 40px;
12
+ --spi-size-11: 44px;
13
+ --spi-size-12: 48px;
14
+ --spi-size-14: 56px;
15
+ --spi-size-16: 64px;
16
+ --spi-size-18: 72px;
17
+ --spi-size-20: 80px;
18
+ --spi-size-24: 96px;
19
+ }
@@ -0,0 +1,13 @@
1
+ :root {
2
+ --spi-font-size-xs: 0.75rem; /* 12px */
3
+ --spi-font-size-sm: 0.875rem; /* 14px */
4
+ --spi-font-size-md: 1rem; /* 16px */
5
+ --spi-font-size-lg: 1.125rem; /* 18px */
6
+ --spi-font-size-xl: 1.25rem; /* 20px */
7
+ --spi-font-size-2xl: 1.5rem; /* 24px */
8
+
9
+ --spi-font-weight-regular: 400;
10
+ --spi-font-weight-medium: 500;
11
+ --spi-font-weight-semibold: 600;
12
+ --spi-font-weight-bold: 700;
13
+ }