@softwareone/spi-sv5-library 1.14.4 → 1.15.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 (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 +43 -46
  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
@@ -23,13 +23,15 @@
23
23
  onclick={() => (isPasswordVisible = !isPasswordVisible)}
24
24
  aria-label={isPasswordVisible ? 'Hide password' : 'Show password'}
25
25
  >
26
- <span class="material-icons-outlined form-input-icon form-input-icon--password">
26
+ <span
27
+ class="material-icons-outlined form-input-icon spi-text-regular-4 form-input-icon--password"
28
+ >
27
29
  {isPasswordVisible ? 'visibility_off' : 'visibility'}
28
30
  </span>
29
31
  </button>
30
32
  {:else}
31
33
  <span
32
- class="material-icons-outlined form-input-icon form-input-icon--{type}"
34
+ class="material-icons-outlined form-input-icon spi-text-regular-4 form-input-icon--{type}"
33
35
  class:form-input-icon--date-status={isDateInput &&
34
36
  (type === 'error' || type === 'success')}>{icons[type]}</span
35
37
  >
@@ -41,19 +43,17 @@
41
43
  display: inline-flex;
42
44
  align-items: center;
43
45
  justify-content: center;
44
- font-size: 18px;
45
46
  height: 18px;
46
- line-height: 1;
47
47
  position: static;
48
48
  transform: none;
49
49
  }
50
50
 
51
51
  .form-input-icon--error {
52
- color: #dc2626;
52
+ color: var(--spi-color-text-danger);
53
53
  }
54
54
 
55
55
  .form-input-icon--success {
56
- color: #059669;
56
+ color: var(--spi-color-text-success);
57
57
  }
58
58
 
59
59
  .form-input-icon--password {
@@ -61,7 +61,7 @@
61
61
  }
62
62
 
63
63
  .form-input-icon--date-status {
64
- margin-right: 40px;
64
+ margin-right: var(--spi-size-10);
65
65
  }
66
66
 
67
67
  @-moz-document url-prefix() {
@@ -73,16 +73,16 @@
73
73
  .form-input-icon-button {
74
74
  background: none;
75
75
  border: none;
76
- padding: 4px;
76
+ padding: var(--spi-size-1);
77
77
  cursor: pointer;
78
78
  display: flex;
79
79
  align-items: center;
80
80
  justify-content: center;
81
- color: #000;
82
- transition: color 0.2s ease;
83
- width: 24px;
84
- height: 24px;
85
- border-radius: 4px;
81
+ color: var(--spi-color-text-primary);
82
+ transition: color var(--spi-duration-normal) var(--spi-ease-default);
83
+ width: var(--spi-size-6);
84
+ height: var(--spi-size-6);
85
+ border-radius: var(--spi-rounded-sm);
86
86
  position: relative;
87
87
  z-index: 1;
88
88
  pointer-events: auto;
@@ -6,7 +6,7 @@
6
6
  </script>
7
7
 
8
8
  {#if label}
9
- <div class="form-label-container">
9
+ <div class="form-label-container spi-text-medium-2">
10
10
  <label for={id}>{label}</label>
11
11
  {#if required}
12
12
  <span class="form-label-required">Required</span>
@@ -15,7 +15,7 @@
15
15
  {/if}
16
16
  {#if infoTooltip}
17
17
  <Tooltip content={infoTooltip} width="sm">
18
- <span class="material-icons-outlined">info</span>
18
+ <span class="material-icons-outlined spi-text-medium-2">info</span>
19
19
  </Tooltip>
20
20
  {/if}
21
21
  </div>
@@ -24,22 +24,18 @@
24
24
  <style>
25
25
  .form-label-container {
26
26
  display: flex;
27
- gap: 8px;
28
- font-weight: 500;
29
- font-size: 14px;
30
- line-height: 20px;
27
+ gap: var(--spi-size-2);
31
28
  }
32
29
 
33
30
  .form-label-optional {
34
- color: #6b7180;
31
+ color: var(--spi-color-text-muted);
35
32
  }
36
33
 
37
34
  .form-label-required {
38
- color: #dc2626;
35
+ color: var(--spi-color-text-danger);
39
36
  }
40
37
 
41
38
  .material-icons-outlined {
42
- font-size: 14px;
43
39
  vertical-align: middle;
44
40
  }
45
41
  </style>
@@ -37,10 +37,10 @@
37
37
  );
38
38
  </script>
39
39
 
40
- <div class="form-container">
40
+ <div class="form-container spi-text-regular-2">
41
41
  <Label {label} {required} {optional} {infoTooltip} />
42
42
  {#if description}
43
- <p class="message-description">{description}</p>
43
+ <p class="message-description spi-text-regular-1">{description}</p>
44
44
  {/if}
45
45
  <div class={['radio-group', row && 'row']} role="radiogroup">
46
46
  {#each normalizedOptions as option, index (option.value)}
@@ -62,7 +62,7 @@
62
62
  disabled && 'disabled'
63
63
  ]}
64
64
  ></span>
65
- <span class="radio-label">{option.label}</span>
65
+ <span class="radio-label spi-text-regular-2">{option.label}</span>
66
66
  </label>
67
67
  {/each}
68
68
  </div>
@@ -70,47 +70,38 @@
70
70
 
71
71
  <style>
72
72
  .form-container {
73
- --primary-color: #472aff;
74
- --primary-focus: rgba(149, 155, 255, 0.3);
75
- --gray-4: #6b7180;
76
- --gray-2: #e0e5e8;
77
- --white: #fff;
78
-
79
73
  display: flex;
80
74
  flex-direction: column;
81
- gap: 8px;
82
- font-size: 14px;
83
- line-height: 20px;
75
+ gap: var(--spi-size-2);
84
76
  }
85
77
 
86
78
  .message-description {
87
- font-size: 12px;
88
- color: var(--gray-4);
79
+ color: var(--spi-color-text-muted);
89
80
  }
90
81
 
91
82
  .radio-group {
92
83
  display: flex;
93
84
  flex-direction: column;
94
- gap: 8px;
85
+ gap: var(--spi-size-2);
95
86
  }
96
87
 
97
88
  .radio-group.row {
98
89
  flex-direction: row;
99
90
  flex-wrap: wrap;
100
- gap: 8px 24px;
91
+ gap: var(--spi-size-2) var(--spi-size-6);
101
92
  }
102
93
 
103
94
  .radio-option {
104
95
  display: flex;
105
96
  align-items: center;
106
- gap: 8px;
97
+ gap: var(--spi-size-2);
107
98
  cursor: pointer;
108
99
  user-select: none;
109
100
  }
110
101
 
111
102
  .radio-option.disabled {
112
103
  cursor: not-allowed;
113
- color: var(--gray-4);
104
+ color: var(--spi-color-text-muted);
114
105
  }
115
106
 
116
107
  .radio-input {
@@ -127,50 +118,45 @@
127
118
  width: 18px;
128
119
  height: 18px;
129
120
  min-width: 18px;
130
- border-radius: 50%;
131
- border: 2px solid var(--gray-4);
132
- background: var(--white);
133
- transition: all 0.2s ease-in-out;
121
+ border-radius: var(--spi-rounded-full);
122
+ border: var(--spi-border-2) solid var(--spi-color-border-strong);
123
+ background: var(--spi-color-surface-default);
124
+ transition: all var(--spi-duration-normal) var(--spi-ease-in-out);
134
125
  }
135
126
 
136
127
  .radio-indicator::after {
137
128
  content: '';
138
- width: 8px;
139
- height: 8px;
140
- border-radius: 50%;
129
+ width: var(--spi-size-2);
130
+ height: var(--spi-size-2);
131
+ border-radius: var(--spi-rounded-full);
141
132
  background: transparent;
142
- transition: background 0.2s ease-in-out;
133
+ transition: background var(--spi-duration-normal) var(--spi-ease-in-out);
143
134
  }
144
135
 
145
136
  .radio-option:not(.disabled):hover .radio-indicator {
146
- border-color: var(--primary-color);
137
+ border-color: var(--spi-color-border-focus);
147
138
  }
148
139
 
149
140
  .radio-input:focus-visible + .radio-indicator {
150
- box-shadow: 0px 0px 0px 3px var(--primary-focus);
151
- border-color: var(--primary-color);
141
+ box-shadow: var(--spi-shadow-focus-primary);
142
+ border-color: var(--spi-color-border-focus);
152
143
  }
153
144
 
154
145
  .radio-indicator.checked {
155
- border-color: var(--primary-color);
146
+ border-color: var(--spi-color-border-focus);
156
147
  }
157
148
 
158
149
  .radio-indicator.checked::after {
159
- background: var(--primary-color);
150
+ background: var(--spi-color-primary-base);
160
151
  }
161
152
 
162
153
  .radio-indicator.disabled {
163
- border-color: var(--gray-4);
164
- background: var(--gray-2);
154
+ border-color: var(--spi-color-disabled-border);
155
+ background: var(--spi-color-surface-muted);
165
156
  cursor: not-allowed;
166
157
  }
167
158
 
168
159
  .radio-indicator.disabled.checked::after {
169
- background: var(--gray-4);
170
- }
171
-
172
- .radio-label {
173
- font-size: 14px;
174
- line-height: 20px;
160
+ background: var(--spi-color-text-muted);
175
161
  }
176
162
  </style>
@@ -243,7 +243,7 @@
243
243
  <section
244
244
  role="button"
245
245
  tabindex="0"
246
- class="dropdown-container"
246
+ class="dropdown-container spi-text-regular-2"
247
247
  onclick={readonly ? undefined : onToggleListOptions}
248
248
  onkeypress={readonly ? undefined : onToggleListOptions}
249
249
  bind:this={dropdownContainer}
@@ -319,12 +319,12 @@
319
319
  {/if}
320
320
  </div>
321
321
  {#if description}
322
- <p class="message-description">
322
+ <p class="message-description spi-text-regular-1">
323
323
  {description}
324
324
  </p>
325
325
  {/if}
326
326
  {#if isInvalid}
327
- <p class="message-error">
327
+ <p class="message-error spi-text-regular-1">
328
328
  {Array.isArray(error) ? error[0] : error}
329
329
  </p>
330
330
  {/if}
@@ -373,25 +373,10 @@
373
373
 
374
374
  <style>
375
375
  .form-control {
376
- --primary-color: #472aff;
377
- --white: #fff;
378
- --black: #000;
379
- --error: #dc2626;
380
- --success: #008556;
381
- --info-1: #eaecff;
382
- --gray-1: #f4f6f8;
383
- --gray-2: #e0e5e8;
384
- --gray-3: #aeb1b9;
385
- --gray-4: #6b7180;
386
- --readonly-bg: #f9fafb;
387
- --readonly-border: #d1d5db;
388
- --border: 1px solid var(--gray-4);
389
-
390
376
  display: flex;
391
377
  flex-direction: column;
392
378
  width: 100%;
393
- gap: 8px;
394
- font-size: 14px;
379
+ gap: var(--spi-size-2);
395
380
 
396
381
  > .label-wrapper {
397
382
  width: fit-content;
@@ -400,24 +385,22 @@
400
385
  }
401
386
 
402
387
  > .message-description {
403
- font-size: 12px;
404
- color: var(--gray-4);
388
+ color: var(--spi-color-text-muted);
405
389
  }
406
390
 
407
391
  > .message-error {
408
- font-size: 12px;
409
- color: var(--error);
392
+ color: var(--spi-color-text-danger);
410
393
  }
411
394
  }
412
395
 
413
396
  .dropdown {
414
397
  position: relative;
415
- border: var(--border);
416
- border-radius: 8px;
398
+ border: var(--spi-border-1) solid var(--spi-color-border-strong);
399
+ border-radius: var(--spi-rounded-lg);
417
400
  background: transparent;
418
401
  transition:
419
- border-color 0.2s ease-in-out,
420
- box-shadow 0.2s ease-in-out;
402
+ border-color var(--spi-duration-normal) var(--spi-ease-in-out),
403
+ box-shadow var(--spi-duration-normal) var(--spi-ease-in-out);
421
404
  }
422
405
 
423
406
  .dropdown.disabled {
@@ -425,7 +408,7 @@
425
408
 
426
409
  > .dropdown-container {
427
410
  pointer-events: none;
428
- background: var(--gray-2);
411
+ background: var(--spi-color-surface-muted);
429
412
  }
430
413
  }
431
414
 
@@ -434,74 +417,72 @@
434
417
 
435
418
  > .dropdown-container {
436
419
  cursor: default;
437
- background: var(--readonly-bg);
438
- border-color: var(--readonly-border);
420
+ background: var(--spi-color-surface-subtle);
421
+ border-color: var(--spi-color-disabled-border);
439
422
  }
440
423
  }
441
424
 
442
425
  .dropdown:not(.disabled, .readonly, .invalid, .valid):hover {
443
- border: 1px solid var(--primary-color);
426
+ border: var(--spi-border-1) solid var(--spi-color-primary-base);
444
427
  }
445
428
 
446
429
  .dropdown:not(.disabled, .readonly, .invalid, .valid):focus-within {
447
- border: 1px solid var(--primary-color);
448
- box-shadow: 0 0 0 3px rgba(149, 155, 255, 0.3);
430
+ border: var(--spi-border-1) solid var(--spi-color-primary-base);
431
+ box-shadow: var(--spi-shadow-focus-primary);
449
432
  }
450
433
 
451
434
  .dropdown.valid {
452
- border: 1px solid var(--success);
435
+ border: var(--spi-border-1) solid var(--spi-color-success-base);
453
436
  }
454
437
 
455
438
  .dropdown.valid:focus-within {
456
- box-shadow: 0px 0px 0px 3px rgba(16, 185, 129, 0.15);
439
+ box-shadow: var(--spi-shadow-focus-success);
457
440
  }
458
441
 
459
442
  .dropdown.invalid {
460
- border: 1px solid var(--error);
443
+ border: var(--spi-border-1) solid var(--spi-color-danger-base);
461
444
  }
462
445
 
463
446
  .dropdown.invalid:focus-within {
464
- box-shadow: 0px 0px 0px 3px rgba(220, 38, 38, 0.2);
447
+ box-shadow: var(--spi-shadow-focus-danger);
465
448
  }
466
449
 
467
450
  .dropdown > .dropdown-container {
468
- font-size: 14px;
469
- line-height: 20px;
470
451
  display: grid;
471
452
  grid-template-columns: 1fr auto;
472
- min-height: 36px;
473
- padding: 8px 16px;
474
- gap: 8px;
453
+ min-height: var(--spi-size-9);
454
+ padding: var(--spi-size-2) var(--spi-size-4);
455
+ gap: var(--spi-size-2);
475
456
  align-items: center;
476
457
  cursor: pointer;
477
458
  outline: none;
478
459
  border: none;
479
- border-radius: 8px;
480
- background: var(--white);
460
+ border-radius: var(--spi-rounded-lg);
461
+ background: var(--spi-color-surface-default);
481
462
  }
482
463
 
483
464
  .dropdown > .dropdown-container > .dropdown-container-selected-options {
484
465
  display: flex;
485
466
  flex-wrap: wrap;
486
467
  max-height: 250px;
487
- gap: 8px;
468
+ gap: var(--spi-size-2);
488
469
  align-items: center;
489
470
  overflow-y: auto;
490
471
 
491
472
  > .placeholder {
492
- color: var(--gray-4);
493
- opacity: 1;
473
+ color: var(--spi-color-text-muted);
474
+ opacity: var(--spi-opacity-100);
494
475
  }
495
476
 
496
477
  > .dropdown-container-selected-option {
497
478
  display: flex;
498
- padding: 0px 5px;
499
- gap: 4px;
479
+ padding: 0 var(--spi-size-1);
480
+ gap: var(--spi-size-1);
500
481
  align-items: center;
501
482
  cursor: default;
502
- border-radius: 4px;
503
- border: 1px solid var(--gray-2);
504
- background: var(--gray-1);
483
+ border-radius: var(--spi-rounded-sm);
484
+ border: var(--spi-border-1) solid var(--spi-color-border-default);
485
+ background: var(--spi-color-surface-subtle);
505
486
  }
506
487
  }
507
488
 
@@ -511,19 +492,16 @@
511
492
  flex-direction: column;
512
493
  z-index: 100;
513
494
  width: 100%;
514
- padding: 8px;
515
- margin-top: 8px;
516
- gap: 8px;
517
- border-radius: 8px;
518
- background: var(--white);
519
- box-shadow:
520
- 0px 4px 5px rgba(51, 56, 64, 0.15),
521
- 0px 1px 3px rgba(51, 56, 64, 0.2),
522
- 0px 1px 16px rgba(51, 56, 64, 0.1);
495
+ padding: var(--spi-size-2);
496
+ margin-top: var(--spi-size-2);
497
+ gap: var(--spi-size-2);
498
+ border-radius: var(--spi-rounded-lg);
499
+ background: var(--spi-color-surface-default);
500
+ box-shadow: var(--spi-shadow-card-hover);
523
501
 
524
502
  > .dropdown-list-no-options-message {
525
503
  text-align: center;
526
- color: var(--gray-4);
504
+ color: var(--spi-color-text-muted);
527
505
  }
528
506
  }
529
507
 
@@ -531,7 +509,7 @@
531
509
  top: auto;
532
510
  transform-origin: bottom;
533
511
  bottom: 100%;
534
- margin-bottom: 8px;
512
+ margin-bottom: var(--spi-size-2);
535
513
  }
536
514
 
537
515
  .dropdown > .dropdown-list.position-fixed {
@@ -545,7 +523,7 @@
545
523
  display: flex;
546
524
  flex-direction: column;
547
525
  max-height: 200px;
548
- gap: 8px;
526
+ gap: var(--spi-size-2);
549
527
  overflow-y: auto;
550
528
 
551
529
  .dropdown-list-option {
@@ -554,8 +532,8 @@
554
532
  align-items: center;
555
533
  text-align: left;
556
534
  width: 100%;
557
- min-height: 40px;
558
- padding: 0px 8px;
535
+ min-height: var(--spi-size-10);
536
+ padding: 0 var(--spi-size-2);
559
537
  cursor: pointer;
560
538
  outline: none;
561
539
  border: none;
@@ -565,25 +543,25 @@
565
543
 
566
544
  .dropdown-list-option:not(.active) > button:focus-visible,
567
545
  .dropdown-list-option:not(.active) > button:hover {
568
- background: var(--gray-1);
546
+ background: var(--spi-color-surface-subtle);
569
547
  }
570
548
 
571
549
  .dropdown-list-option.active {
572
- background: var(--info-1);
550
+ background: var(--spi-color-primary-lighter);
573
551
  }
574
552
  }
575
553
 
576
554
  .clear-button {
577
555
  outline: none;
578
556
  border: none;
579
- color: var(--gray-4);
557
+ color: var(--spi-color-text-muted);
580
558
  background: transparent;
581
- transition: color 0.2s ease-in-out;
559
+ transition: color var(--spi-duration-normal) var(--spi-ease-in-out);
582
560
  }
583
561
 
584
562
  .clear-button:focus-visible,
585
563
  .clear-button:hover {
586
564
  cursor: pointer;
587
- color: var(--black);
565
+ color: var(--spi-color-text-primary);
588
566
  }
589
567
  </style>