@softwareone/spi-sv5-library 1.14.3 → 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 (89) 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 +6 -6
  10. package/dist/components/confirmation/Confirmation.svelte.d.ts +2 -2
  11. package/dist/components/controls/attach-file/AttachFile.svelte +18 -41
  12. package/dist/components/controls/attach-file/FileManager.svelte +16 -30
  13. package/dist/components/controls/attach-file/Warnings.svelte +13 -15
  14. package/dist/components/controls/input/Input.svelte +46 -72
  15. package/dist/components/controls/input/InputIcon.svelte +13 -13
  16. package/dist/components/controls/label/Label.svelte +5 -9
  17. package/dist/components/controls/radio-group/RadioGroup.svelte +25 -39
  18. package/dist/components/controls/select/Select.svelte +49 -71
  19. package/dist/components/controls/textarea/TextArea.svelte +36 -45
  20. package/dist/components/controls/toggle/Toggle.svelte +35 -37
  21. package/dist/components/delete-confirmation/DeleteConfirmation.svelte +3 -5
  22. package/dist/components/error-page/ErrorPage.svelte +9 -18
  23. package/dist/components/footer/Footer.svelte +9 -14
  24. package/dist/components/footer/Footer.svelte.d.ts +0 -1
  25. package/dist/components/footer/FooterLogo.svelte +16 -0
  26. package/dist/components/footer/FooterLogo.svelte.d.ts +26 -0
  27. package/dist/components/form/Form.svelte +1 -1
  28. package/dist/components/header/Header.svelte +39 -45
  29. package/dist/components/header/HeaderAccount.svelte +21 -33
  30. package/dist/components/header/HeaderLoader.svelte +13 -8
  31. package/dist/components/highlight-panel/HighlightPanel.svelte +29 -34
  32. package/dist/components/home/Home.svelte +18 -36
  33. package/dist/components/link/Link.svelte +1 -1
  34. package/dist/components/menu/Menu.svelte +16 -21
  35. package/dist/components/menu/MenuItem.svelte +25 -29
  36. package/dist/components/menu/Sidebar.svelte +32 -40
  37. package/dist/components/menu/utils.d.ts +1 -1
  38. package/dist/components/menu/utils.js +6 -7
  39. package/dist/components/modal/Modal.svelte +8 -11
  40. package/dist/components/modal/ModalContent.svelte +3 -3
  41. package/dist/components/modal/ModalFooter.svelte +5 -5
  42. package/dist/components/modal/ModalHeader.svelte +6 -11
  43. package/dist/components/notification/Notification.svelte +20 -27
  44. package/dist/components/processing/Processing.svelte +9 -16
  45. package/dist/components/progress-page/ProgressPage.svelte +13 -18
  46. package/dist/components/progress-wizard/ProgressWizard.svelte +43 -54
  47. package/dist/components/search/Search.svelte +24 -29
  48. package/dist/components/spinner/Spinner.svelte +1 -1
  49. package/dist/components/switcher/Switcher.svelte +14 -23
  50. package/dist/components/table/ActionsColumn.svelte +13 -33
  51. package/dist/components/table/AdvancedFilter.svelte +39 -74
  52. package/dist/components/table/Body.svelte +9 -18
  53. package/dist/components/table/ColumnVisibilityDropdown.svelte +24 -55
  54. package/dist/components/table/Footer.svelte +2 -4
  55. package/dist/components/table/Header.svelte +23 -44
  56. package/dist/components/table/PageSize.svelte +24 -36
  57. package/dist/components/table/Pagination.svelte +49 -35
  58. package/dist/components/table/RowCheckBox.svelte +5 -12
  59. package/dist/components/table/Skeleton.svelte +16 -25
  60. package/dist/components/table/Table.svelte +50 -38
  61. package/dist/components/table/Table.svelte.d.ts +5 -1
  62. package/dist/components/table/types.d.ts +9 -1
  63. package/dist/components/table/utils.d.ts +5 -1
  64. package/dist/components/table/utils.js +8 -8
  65. package/dist/components/tabs/Tabs.svelte +16 -20
  66. package/dist/components/toast/Toast.svelte +27 -30
  67. package/dist/components/tooltip/Tooltip.svelte +15 -19
  68. package/dist/components/waffle/Waffle.svelte +9 -13
  69. package/dist/components/waffle/WaffleItems.svelte +10 -13
  70. package/dist/styles/index.css +3 -0
  71. package/dist/styles/reset.css +19 -0
  72. package/dist/styles/tokens/index.css +2 -0
  73. package/dist/styles/tokens/primitives/borders.css +17 -0
  74. package/dist/styles/tokens/primitives/colors.css +41 -0
  75. package/dist/styles/tokens/primitives/index.css +7 -0
  76. package/dist/styles/tokens/primitives/motion.css +11 -0
  77. package/dist/styles/tokens/primitives/opacity.css +6 -0
  78. package/dist/styles/tokens/primitives/shadows.css +11 -0
  79. package/dist/styles/tokens/primitives/sizing.css +19 -0
  80. package/dist/styles/tokens/primitives/typography.css +13 -0
  81. package/dist/styles/tokens/semantic/colors.css +78 -0
  82. package/dist/styles/tokens/semantic/index.css +2 -0
  83. package/dist/styles/tokens/semantic/shadows.css +9 -0
  84. package/dist/styles/utilities.css +73 -0
  85. package/dist/utils/index.d.ts +1 -0
  86. package/dist/utils/index.js +1 -0
  87. package/dist/utils/url.d.ts +3 -0
  88. package/dist/utils/url.js +15 -0
  89. package/package.json +3 -2
@@ -9,7 +9,7 @@
9
9
  let { title, homeItems }: Props = $props();
10
10
  </script>
11
11
 
12
- <h1 class="home-title">
12
+ <h1 class="home-title spi-text-semibold-4">
13
13
  {title}
14
14
  </h1>
15
15
 
@@ -18,8 +18,8 @@
18
18
  <a href={homeItem.url} class="home-item">
19
19
  <img src={homeItem.homeIcon} alt={homeItem.text} />
20
20
  <div>
21
- <h2>{homeItem.text}</h2>
22
- <p>{homeItem.detail}</p>
21
+ <h2 class="spi-text-semibold-3">{homeItem.text}</h2>
22
+ <p class="spi-text-regular-2">{homeItem.detail}</p>
23
23
  </div>
24
24
  </a>
25
25
  {/each}
@@ -27,20 +27,12 @@
27
27
 
28
28
  <style>
29
29
  .home-title {
30
- padding-bottom: 16px;
31
- font-size: 18px;
32
- line-height: 1.55;
33
- font-weight: 600;
34
- }
35
-
36
- .home-container {
37
- --black: #000;
38
- --white: #fff;
30
+ padding-bottom: var(--spi-size-4);
39
31
  }
40
32
 
41
33
  .home-container.grid {
42
34
  display: grid;
43
- gap: 24px;
35
+ gap: var(--spi-size-6);
44
36
 
45
37
  @media (width >= 640px) {
46
38
  grid-template-columns: repeat(1, minmax(0, 1fr));
@@ -59,45 +51,35 @@
59
51
  display: flex;
60
52
  max-height: 190px;
61
53
  max-width: 770px;
62
- gap: 16px;
63
- padding: 12px;
64
- border-radius: 16px;
65
- background: var(--white);
54
+ gap: var(--spi-size-4);
55
+ padding: var(--spi-size-3);
56
+ border-radius: var(--spi-rounded-2xl);
57
+ background: var(--spi-color-surface-default);
66
58
  transition:
67
- box-shadow 0.2s ease-in-out,
68
- transform 0.2s ease-in-out;
69
- box-shadow:
70
- 0 1px 16px 0 rgba(107, 113, 128, 0.1),
71
- 0 1px 3px 0 rgba(107, 113, 128, 0.2);
59
+ box-shadow var(--spi-duration-normal) var(--spi-ease-in-out),
60
+ transform var(--spi-duration-normal) var(--spi-ease-in-out);
61
+ box-shadow: var(--spi-shadow-card);
72
62
 
73
63
  &:hover {
74
64
  transform: translateY(-2px);
75
65
  box-shadow:
76
- 0 4px 20px 0 rgba(71, 42, 255, 0.2),
77
- 0 2px 6px 0 rgba(107, 113, 128, 0.25);
66
+ 0 4px 20px 0 color-mix(in srgb, var(--spi-color-primary-light) 50%, transparent),
67
+ 0 2px 6px 0 color-mix(in srgb, var(--spi-color-neutral-base) 50%, transparent);
78
68
  }
79
69
 
80
70
  > img {
81
- width: 36px;
82
- height: 36px;
71
+ width: var(--spi-size-9);
72
+ height: var(--spi-size-9);
83
73
  margin: auto 0;
84
74
  filter: invert(27%) sepia(99%) saturate(4729%) hue-rotate(240deg) brightness(101%)
85
75
  contrast(106%);
86
76
  }
87
77
 
88
78
  > div {
89
- color: var(--black);
79
+ color: var(--spi-color-text-primary);
90
80
 
91
81
  > h2 {
92
- padding-bottom: 8px;
93
- font-size: 16px;
94
- line-height: 1.5;
95
- font-weight: 600;
96
- }
97
-
98
- > p {
99
- font-size: 14px;
100
- line-height: 1.42;
82
+ padding-bottom: var(--spi-size-2);
101
83
  }
102
84
  }
103
85
  }
@@ -20,7 +20,7 @@
20
20
 
21
21
  <style>
22
22
  .link {
23
- color: var(--primary-color, #472aff);
23
+ color: var(--spi-color-text-link);
24
24
  text-decoration: none;
25
25
  }
26
26
 
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
- import { page } from '$app/state';
3
2
  import { fade } from 'svelte/transition';
4
3
 
4
+ import { existRoute, getFirstPathSegment, getNormalizedPathname } from '../../utils/index.js';
5
5
  import MainMenuItem from './MenuItem.svelte';
6
6
  import type { MenuItem } from './types.js';
7
7
 
@@ -20,14 +20,9 @@
20
20
  };
21
21
 
22
22
  const isActiveMenuItem = (url: string) => {
23
- const pathname = page.url.pathname.replace(/^\/v\d+\//, '/');
24
- const firstSegmentUrl = pathname.split('/')[1];
25
- return existRoute(`/${firstSegmentUrl}`, url);
26
- };
27
-
28
- const existRoute = (url: string, pathname: string) => {
29
- const regex = new RegExp(`${url}(?![\\w-])`);
30
- return regex.test(pathname);
23
+ const pathname = getNormalizedPathname();
24
+ const firstPathSegment = getFirstPathSegment(pathname);
25
+ return existRoute(firstPathSegment, url);
31
26
  };
32
27
 
33
28
  const onHandleMenu = () => {
@@ -70,7 +65,7 @@
70
65
  .menu-backdrop {
71
66
  position: fixed;
72
67
  inset: 0;
73
- background-color: rgba(243, 244, 246, 0.5);
68
+ background-color: var(--spi-color-backdrop);
74
69
  cursor: pointer;
75
70
  z-index: 30;
76
71
  border: none;
@@ -78,16 +73,16 @@
78
73
 
79
74
  .menu-nav {
80
75
  position: absolute;
81
- top: 80px;
82
- left: 24px;
83
- bottom: 24px;
76
+ top: var(--spi-size-20);
77
+ left: var(--spi-size-6);
78
+ bottom: var(--spi-size-6);
84
79
  display: flex;
85
- border: 1px solid #f3f4f6;
86
- border-bottom-left-radius: 10px;
87
- border-bottom-right-radius: 10px;
88
- background-color: white;
89
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
90
- min-height: calc(100vh - 80px - 55px);
80
+ border: var(--spi-border-1) solid var(--spi-color-border-default);
81
+ border-bottom-left-radius: var(--spi-rounded-xl);
82
+ border-bottom-right-radius: var(--spi-rounded-xl);
83
+ background-color: var(--spi-color-surface-default);
84
+ box-shadow: var(--spi-shadow-dropdown);
85
+ min-height: calc(100vh - var(--spi-size-20) - 55px);
91
86
  z-index: 40;
92
87
  width: auto;
93
88
  }
@@ -95,8 +90,8 @@
95
90
  .menu-list {
96
91
  display: flex;
97
92
  flex-direction: column;
98
- gap: 0.25rem;
99
- padding: 0.7rem;
93
+ gap: var(--spi-size-1);
94
+ padding: var(--spi-size-3);
100
95
  width: 150px;
101
96
  overflow-y: auto;
102
97
  overflow-x: hidden;
@@ -23,44 +23,41 @@
23
23
  ]}
24
24
  onclick={() => onClick?.(item)}
25
25
  >
26
- <span class="material-icons-outlined icon-span">{item.icon}</span>
27
- <h2 class="item-name-span" class:hidden={isCollapsed}>{item.text}</h2>
26
+ <span class="material-icons-outlined icon-span spi-text-regular-5">{item.icon}</span>
27
+ <h2 class="item-name-span spi-text-regular-2" class:hidden={isCollapsed}>
28
+ {item.text}
29
+ </h2>
28
30
  </a>
29
31
  </Tooltip>
30
32
  </li>
31
33
 
32
34
  <style>
33
35
  .item {
34
- min-height: 28px;
35
- padding: 8px;
36
- border-radius: 8px;
36
+ min-height: var(--spi-size-7);
37
+ padding: var(--spi-size-2);
38
+ border-radius: var(--spi-rounded-lg);
37
39
  justify-content: flex-start;
38
40
  align-items: center;
39
- gap: 8px;
41
+ gap: var(--spi-size-2);
40
42
  display: inline-flex;
41
43
  background: none;
42
44
  border: none;
43
45
  cursor: pointer;
44
- transition: background-color 0.2s ease;
46
+ transition: background-color var(--spi-duration-normal) var(--spi-ease-default);
45
47
  }
46
48
 
47
49
  .item-name-span {
48
50
  text-align: left;
49
- color: black;
50
- font-size: 14px;
51
- font-weight: 400;
52
- line-height: 20px;
51
+ color: var(--spi-color-text-primary);
53
52
  word-wrap: break-word;
54
53
  }
55
54
 
56
55
  .icon-span {
57
- color: black;
58
- font-size: 20px;
59
- font-weight: 400;
60
- line-height: 20px;
61
56
  word-wrap: break-word;
62
- border-radius: 50%;
63
- transition: background-color 0.2s ease;
57
+ line-height: normal;
58
+ color: var(--spi-color-text-primary);
59
+ border-radius: var(--spi-rounded-full);
60
+ transition: background-color var(--spi-duration-normal) var(--spi-ease-default);
64
61
  }
65
62
 
66
63
  .expanded {
@@ -68,34 +65,33 @@
68
65
  }
69
66
 
70
67
  .expanded:hover:not(.active-expanded) {
71
- background-color: #f4f6f8;
68
+ background-color: var(--spi-color-surface-subtle);
72
69
  }
73
70
 
74
71
  .active-expanded {
75
- background-color: #eaecff;
76
- color: #472aff;
72
+ background-color: var(--spi-color-primary-lighter);
73
+ color: var(--spi-color-primary-base);
77
74
  cursor: default;
78
75
  }
79
76
 
80
77
  .collapsed {
81
- width: 68px;
82
78
  justify-content: center;
83
79
  position: relative;
84
80
  width: 100%;
85
81
  }
86
82
 
87
83
  .collapsed .icon-span:hover {
88
- background-color: #f4f6f8;
84
+ background-color: var(--spi-color-surface-subtle);
89
85
  }
90
86
 
91
87
  .active-collapsed {
92
- background-color: #eaecff;
93
- border-radius: 50%;
94
- color: #472aff;
88
+ background-color: var(--spi-color-primary-lighter);
89
+ border-radius: var(--spi-rounded-full);
90
+ color: var(--spi-color-primary-base);
95
91
  }
96
92
 
97
93
  .active-collapsed:hover {
98
- background-color: #eaecff;
94
+ background-color: var(--spi-color-primary-lighter);
99
95
  cursor: default;
100
96
  }
101
97
 
@@ -103,7 +99,7 @@
103
99
  .active-collapsed .icon-span,
104
100
  .active-expanded .item-name-span,
105
101
  .active-collapsed .item-name-span {
106
- color: #472aff;
102
+ color: var(--spi-color-primary-base);
107
103
  }
108
104
 
109
105
  .item.collapsed:focus,
@@ -115,8 +111,8 @@
115
111
 
116
112
  .item.collapsed:focus-visible .icon-span,
117
113
  .item.expanded:focus-visible {
118
- box-shadow: 0 0 0 2px #472aff;
119
- background-color: #eaecff;
114
+ box-shadow: 0 0 0 var(--spi-border-2) var(--spi-color-primary-base);
115
+ background-color: var(--spi-color-primary-lighter);
120
116
  outline: none;
121
117
  }
122
118
 
@@ -38,14 +38,14 @@
38
38
  <section class="menu-header">
39
39
  <div class="menu-title" class:hidden={isCollapsed}>
40
40
  <div class="menu">
41
- <h2 class="menu-span">Menu</h2>
41
+ <h2 class="menu-span spi-text-semibold-2">Menu</h2>
42
42
  </div>
43
43
  </div>
44
44
  <div class="category-items">
45
45
  <button type="button" class="button" onclick={toggleSidebar}>
46
- <span class="material-icons-outlined icon-span">
47
- {isCollapsed ? 'menu' : 'menu_open'}
48
- </span>
46
+ <span class="material-icons-outlined icon-span spi-text-regular-5"
47
+ >{isCollapsed ? 'menu' : 'menu_open'}</span
48
+ >
49
49
  </button>
50
50
  </div>
51
51
  </section>
@@ -54,7 +54,7 @@
54
54
  <section class="content">
55
55
  {#each subMenuItems as subMenuItem, index (index)}
56
56
  <section class="category-content">
57
- <h2 class="category-span" class:hidden={isCollapsed}>
57
+ <h2 class="category-span spi-text-regular-1" class:hidden={isCollapsed}>
58
58
  {subMenuItem.category}
59
59
  </h2>
60
60
  <menu class="category-items-details">
@@ -79,40 +79,40 @@
79
79
  <style>
80
80
  .side-menu {
81
81
  display: inline-flex;
82
- transition: width 0.3s ease;
82
+ transition: width var(--spi-duration-slow) var(--spi-ease-default);
83
83
  }
84
84
 
85
85
  .menu-content {
86
86
  width: 100%;
87
87
  height: 100%;
88
- padding: 16px;
89
- background: white;
90
- border-right: 1px #e0e5e8 solid;
88
+ padding: var(--spi-size-4);
89
+ background: var(--spi-color-surface-default);
90
+ border-right: var(--spi-border-1) solid var(--spi-color-border-default);
91
91
  flex-direction: column;
92
92
  justify-content: flex-start;
93
93
  align-items: center;
94
- gap: 32px;
94
+ gap: var(--spi-size-8);
95
95
  display: flex;
96
96
  }
97
97
 
98
98
  .header {
99
99
  align-self: stretch;
100
100
  flex-direction: column;
101
- gap: 16px;
101
+ gap: var(--spi-size-4);
102
102
  display: flex;
103
103
  }
104
104
 
105
105
  .menu-header {
106
- padding-bottom: 8px;
107
- border-bottom: 1px #e0e5e8 solid;
106
+ padding-bottom: var(--spi-size-2);
107
+ border-bottom: var(--spi-border-1) solid var(--spi-color-border-default);
108
108
  gap: 10px;
109
109
  display: inline-flex;
110
110
  }
111
111
 
112
112
  .menu-title {
113
113
  flex: 1 1 0;
114
- padding-top: 8px;
115
- padding-bottom: 8px;
114
+ padding-top: var(--spi-size-2);
115
+ padding-bottom: var(--spi-size-2);
116
116
  display: flex;
117
117
  }
118
118
 
@@ -123,35 +123,30 @@
123
123
  }
124
124
 
125
125
  .menu-span {
126
- color: black;
127
- font-size: 14px;
128
- font-weight: 600;
129
- line-height: 20px;
126
+ color: var(--spi-color-text-primary);
130
127
  word-wrap: break-word;
131
128
  }
132
129
 
133
130
  .category-items {
134
- padding: 8px;
135
- gap: 8px;
131
+ padding: var(--spi-size-2);
132
+ gap: var(--spi-size-2);
136
133
  display: flex;
137
134
  }
138
135
 
139
136
  .content {
140
137
  flex-direction: column;
141
- gap: 24px;
138
+ gap: var(--spi-size-6);
142
139
  display: flex;
143
140
  }
144
141
 
145
142
  .category-content {
146
143
  flex-direction: column;
147
- gap: 8px;
144
+ gap: var(--spi-size-2);
148
145
  display: flex;
149
146
  }
150
147
 
151
148
  .category-span {
152
- color: #6b7180;
153
- font-size: 12px;
154
- font-weight: 400;
149
+ color: var(--spi-color-text-muted);
155
150
  word-wrap: break-word;
156
151
  }
157
152
 
@@ -162,16 +157,13 @@
162
157
  }
163
158
 
164
159
  button:focus-visible {
165
- box-shadow: 0 0 0 2px #472aff;
166
- background-color: #eaecff;
160
+ box-shadow: 0 0 0 var(--spi-border-2) var(--spi-color-border-focus);
161
+ background-color: var(--spi-color-primary-lighter);
167
162
  outline: none;
168
163
  }
169
164
 
170
165
  .icon-span {
171
- color: #25282d;
172
- font-size: 20px;
173
- font-weight: 400;
174
- line-height: 20px;
166
+ color: var(--spi-color-neutral-darkest);
175
167
  word-wrap: break-word;
176
168
  }
177
169
 
@@ -192,10 +184,10 @@
192
184
  }
193
185
 
194
186
  .collapsed .menu-content {
195
- padding: 8px;
187
+ padding: var(--spi-size-2);
196
188
  }
197
189
  .collapsed .content {
198
- padding: 8px;
190
+ padding: var(--spi-size-2);
199
191
  }
200
192
  .collapsed .menu-header {
201
193
  align-items: center;
@@ -204,24 +196,24 @@
204
196
  .collapsed .menu-header {
205
197
  justify-content: flex-start;
206
198
  align-items: center;
207
- padding: 8px;
199
+ padding: var(--spi-size-2);
208
200
  }
209
201
 
210
202
  .button {
211
203
  background: transparent;
212
204
  border: none;
213
205
  cursor: pointer;
214
- border-radius: 50%;
215
- width: 36px;
216
- height: 36px;
206
+ border-radius: var(--spi-rounded-full);
207
+ width: var(--spi-size-9);
208
+ height: var(--spi-size-9);
217
209
  display: flex;
218
210
  align-items: center;
219
211
  justify-content: center;
220
- transition: background-color 0.2s ease;
212
+ transition: background-color var(--spi-duration-normal) var(--spi-ease-default);
221
213
  }
222
214
 
223
215
  .button:hover {
224
- background-color: #f4f6f8;
216
+ background-color: var(--spi-color-surface-subtle);
225
217
  }
226
218
 
227
219
  @media (max-width: 768px) {
@@ -1,2 +1,2 @@
1
1
  import type { MainMenu, SubMenuItem } from './types.js';
2
- export declare const getSubMenuItemsFromMenu: (items: MainMenu[], url: string, excludedRoutes?: string[]) => SubMenuItem[];
2
+ export declare const getSubMenuItemsFromMenu: (items: MainMenu[], excludedRoutes?: string[]) => SubMenuItem[];
@@ -1,12 +1,11 @@
1
- export const getSubMenuItemsFromMenu = (items, url, excludedRoutes) => {
2
- const cleanUrl = url.replace(/^\/v\d+\//, '/');
3
- if (excludedRoutes?.includes(cleanUrl))
1
+ import { existRoute, getFirstPathSegment, getNormalizedPathname } from '../../utils/index.js';
2
+ export const getSubMenuItemsFromMenu = (items, excludedRoutes) => {
3
+ const pathname = getNormalizedPathname();
4
+ if (excludedRoutes?.includes(pathname))
4
5
  return [];
5
- const matchedPath = /^\/[^/]+/.exec(cleanUrl);
6
- const urlValue = matchedPath?.[0] ?? '';
6
+ const firstPathSegment = getFirstPathSegment(pathname);
7
7
  const matchedMenu = items.find((menu) => {
8
- const regex = new RegExp(`${urlValue}(?![\\w-])`);
9
- return regex.test(menu.url);
8
+ return existRoute(firstPathSegment, menu.url);
10
9
  });
11
10
  return matchedMenu?.children ?? [];
12
11
  };
@@ -26,7 +26,7 @@
26
26
  </script>
27
27
 
28
28
  <div class="modal-backdrop">
29
- <div class="modal-container {width}">
29
+ <div class="modal-container {width} spi-text-regular-2">
30
30
  <div
31
31
  onclose={onHandleClose}
32
32
  class="modal"
@@ -52,20 +52,17 @@
52
52
  justify-content: center;
53
53
  width: 100%;
54
54
  height: 100%;
55
- background-color: #e0e5e880;
55
+ background-color: var(--spi-color-backdrop);
56
56
  }
57
57
 
58
58
  .modal-container {
59
59
  width: var(--modal-width);
60
60
  max-height: 90%;
61
- border-radius: 16px;
62
- background-color: #ffffff;
61
+ border-radius: var(--spi-rounded-2xl);
62
+ background-color: var(--spi-color-surface-default);
63
63
  margin: auto;
64
64
  overflow-y: auto;
65
- box-shadow:
66
- 0px 1px 10px 0px rgba(51, 56, 64, 0.12),
67
- 0px 2px 4px -1px rgba(51, 56, 64, 0.2),
68
- 0px 4px 5px 0px rgba(51, 56, 64, 0.14);
65
+ box-shadow: var(--spi-shadow-card-hover);
69
66
  }
70
67
 
71
68
  .modal {
@@ -93,12 +90,12 @@
93
90
  }
94
91
 
95
92
  .modal-container::-webkit-scrollbar-thumb {
96
- background: #888;
97
- border-radius: 10px;
93
+ background: var(--spi-color-neutral-dark);
94
+ border-radius: var(--spi-rounded-full);
98
95
  }
99
96
 
100
97
  .modal-container::-webkit-scrollbar-thumb:hover {
101
- background: #555;
98
+ background: var(--spi-color-neutral-darker);
102
99
  }
103
100
 
104
101
  :global(html:has(.modal-backdrop)) {
@@ -19,12 +19,12 @@
19
19
  display: flex;
20
20
  flex-direction: column;
21
21
  align-items: flex-start;
22
- gap: 24px;
22
+ gap: var(--spi-size-6);
23
23
  align-self: stretch;
24
- background: #fff;
24
+ background: var(--spi-color-surface-default);
25
25
  }
26
26
 
27
27
  .padding {
28
- padding: 24px;
28
+ padding: var(--spi-size-6);
29
29
  }
30
30
  </style>
@@ -18,14 +18,14 @@
18
18
  .modal-footer,
19
19
  .button-section {
20
20
  display: flex;
21
- gap: 16px;
21
+ gap: var(--spi-size-4);
22
22
  }
23
23
  .modal-footer {
24
24
  width: 100%;
25
- padding: 24px;
25
+ padding: var(--spi-size-6);
26
26
  justify-content: space-between;
27
- border-radius: 0px 0px 16px 16px;
28
- border-top: 1px solid #aeb1b9;
29
- background: #fff;
27
+ border-radius: 0 0 var(--spi-rounded-2xl) var(--spi-rounded-2xl);
28
+ border-top: var(--spi-border-1) solid var(--spi-color-border-medium);
29
+ background: var(--spi-color-surface-default);
30
30
  }
31
31
  </style>
@@ -15,7 +15,7 @@
15
15
  {#if errorIcon}
16
16
  <span class="icon error material-icons-outlined">report</span>
17
17
  {/if}
18
- <h2>{title}</h2>
18
+ <h2 class="spi-text-semibold-4">{title}</h2>
19
19
  </div>
20
20
  <button type="button" class="close-button material-icons-outlined" onclick={onclose}
21
21
  >close</button
@@ -28,12 +28,12 @@
28
28
  .modal-header-title {
29
29
  display: flex;
30
30
  justify-content: space-between;
31
- gap: 16px;
31
+ gap: var(--spi-size-4);
32
32
  }
33
33
  .modal-header {
34
- padding: 24px;
34
+ padding: var(--spi-size-6);
35
35
  align-self: stretch;
36
- border-bottom: 1px solid #aeb1b9;
36
+ border-bottom: var(--spi-border-1) solid var(--spi-color-border-medium);
37
37
  }
38
38
 
39
39
  .modal-header-title > .icon {
@@ -45,11 +45,6 @@
45
45
  align-items: center;
46
46
  }
47
47
 
48
- .modal-header-title h2 {
49
- font-size: 18px;
50
- font-weight: 600;
51
- }
52
-
53
48
  .modal-header > .close-button {
54
49
  background: none;
55
50
  border: none;
@@ -57,7 +52,7 @@
57
52
 
58
53
  .modal-header > .close-button:hover {
59
54
  cursor: pointer;
60
- color: #434952;
55
+ color: var(--spi-color-text-secondary);
61
56
  }
62
57
 
63
58
  .modal-header > .close-button:focus {
@@ -65,6 +60,6 @@
65
60
  }
66
61
 
67
62
  .icon.error {
68
- --color-icon: #dc182c;
63
+ --color-icon: var(--spi-color-danger-base);
69
64
  }
70
65
  </style>