@siemens/element-theme 47.0.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 (92) hide show
  1. package/package.json +28 -0
  2. package/src/styles/_accessibility.scss +9 -0
  3. package/src/styles/_all-variables.scss +7 -0
  4. package/src/styles/_bootstrap.scss +26 -0
  5. package/src/styles/_themes.scss +35 -0
  6. package/src/styles/_variables.scss +10 -0
  7. package/src/styles/bootstrap/_alert.scss +60 -0
  8. package/src/styles/bootstrap/_badges.scss +115 -0
  9. package/src/styles/bootstrap/_breadcrumb.scss +32 -0
  10. package/src/styles/bootstrap/_button-group.scss +101 -0
  11. package/src/styles/bootstrap/_buttons.scss +244 -0
  12. package/src/styles/bootstrap/_card.scss +208 -0
  13. package/src/styles/bootstrap/_containers.scss +44 -0
  14. package/src/styles/bootstrap/_dropdowns.scss +216 -0
  15. package/src/styles/bootstrap/_forms.scss +10 -0
  16. package/src/styles/bootstrap/_functions.scss +188 -0
  17. package/src/styles/bootstrap/_grid.scss +33 -0
  18. package/src/styles/bootstrap/_helpers.scss +6 -0
  19. package/src/styles/bootstrap/_images.scss +45 -0
  20. package/src/styles/bootstrap/_list-group.scss +197 -0
  21. package/src/styles/bootstrap/_mixins.scss +30 -0
  22. package/src/styles/bootstrap/_modals.scss +234 -0
  23. package/src/styles/bootstrap/_nav.scss +155 -0
  24. package/src/styles/bootstrap/_pagination.scss +58 -0
  25. package/src/styles/bootstrap/_popovers.scss +188 -0
  26. package/src/styles/bootstrap/_progress.scss +42 -0
  27. package/src/styles/bootstrap/_reboot.scss +618 -0
  28. package/src/styles/bootstrap/_root.scss +22 -0
  29. package/src/styles/bootstrap/_tables.scss +186 -0
  30. package/src/styles/bootstrap/_tooltip.scss +145 -0
  31. package/src/styles/bootstrap/_transitions.scss +28 -0
  32. package/src/styles/bootstrap/_type.scss +235 -0
  33. package/src/styles/bootstrap/_utilities.scss +105 -0
  34. package/src/styles/bootstrap/_variables.scss +654 -0
  35. package/src/styles/bootstrap/forms/_form-check.scss +249 -0
  36. package/src/styles/bootstrap/forms/_form-control.scss +151 -0
  37. package/src/styles/bootstrap/forms/_form-file.scss +29 -0
  38. package/src/styles/bootstrap/forms/_form-label.scss +39 -0
  39. package/src/styles/bootstrap/forms/_form-range.scss +68 -0
  40. package/src/styles/bootstrap/forms/_input-group.scss +103 -0
  41. package/src/styles/bootstrap/forms/_validation.scss +95 -0
  42. package/src/styles/bootstrap/helpers/_clearfix.scss +5 -0
  43. package/src/styles/bootstrap/helpers/_position.scss +34 -0
  44. package/src/styles/bootstrap/helpers/_stacks.scss +13 -0
  45. package/src/styles/bootstrap/helpers/_stretched-link.scss +14 -0
  46. package/src/styles/bootstrap/helpers/_text-truncation.scss +9 -0
  47. package/src/styles/bootstrap/helpers/_visually-hidden.scss +10 -0
  48. package/src/styles/bootstrap/mixins/_backdrop.scss +19 -0
  49. package/src/styles/bootstrap/mixins/_breakpoints.scss +136 -0
  50. package/src/styles/bootstrap/mixins/_clearfix.scss +7 -0
  51. package/src/styles/bootstrap/mixins/_container.scss +7 -0
  52. package/src/styles/bootstrap/mixins/_deprecate.scss +12 -0
  53. package/src/styles/bootstrap/mixins/_gradients.scss +14 -0
  54. package/src/styles/bootstrap/mixins/_grid.scss +171 -0
  55. package/src/styles/bootstrap/mixins/_image.scss +15 -0
  56. package/src/styles/bootstrap/mixins/_lists.scss +5 -0
  57. package/src/styles/bootstrap/mixins/_reset-text.scss +18 -0
  58. package/src/styles/bootstrap/mixins/_table-row.scss +31 -0
  59. package/src/styles/bootstrap/mixins/_text-truncate.scss +7 -0
  60. package/src/styles/bootstrap/mixins/_transition.scss +28 -0
  61. package/src/styles/bootstrap/mixins/_utilities.scss +86 -0
  62. package/src/styles/bootstrap/mixins/_visually-hidden.scss +29 -0
  63. package/src/styles/components/_application-header.scss +244 -0
  64. package/src/styles/components/_container-grid.scss +99 -0
  65. package/src/styles/components/_datatable.scss +328 -0
  66. package/src/styles/components/_drag_drop.scss +105 -0
  67. package/src/styles/components/_electron-titlebar.scss +5 -0
  68. package/src/styles/components/_elevation.scss +21 -0
  69. package/src/styles/components/_focus.scss +21 -0
  70. package/src/styles/components/_icons.scss +25 -0
  71. package/src/styles/components/_layout.scss +105 -0
  72. package/src/styles/components/_links.scss +34 -0
  73. package/src/styles/components/_pills.scss +45 -0
  74. package/src/styles/components/_scrollbar.scss +10 -0
  75. package/src/styles/components/_skeleton.scss +42 -0
  76. package/src/styles/components/_switch.scss +77 -0
  77. package/src/styles/components/_system-banner.scss +5 -0
  78. package/src/styles/components/_widgets.scss +58 -0
  79. package/src/styles/variables/_animations.scss +7 -0
  80. package/src/styles/variables/_elevation.scss +25 -0
  81. package/src/styles/variables/_focus.scss +55 -0
  82. package/src/styles/variables/_layout.scss +6 -0
  83. package/src/styles/variables/_semantic-tokens.scss +178 -0
  84. package/src/styles/variables/_si-vars.scss +19 -0
  85. package/src/styles/variables/_spacers.scss +28 -0
  86. package/src/styles/variables/_typography.scss +66 -0
  87. package/src/styles/variables/_utilities.scss +599 -0
  88. package/src/styles/variables/_zindex.scss +20 -0
  89. package/src/theme/_base-colors.scss +79 -0
  90. package/src/theme/_data-colors.scss +105 -0
  91. package/src/theme/_theme-element.scss +339 -0
  92. package/src/theme.scss +49 -0
@@ -0,0 +1,45 @@
1
+ @use '../variables/spacers';
2
+ @use './mixins/image';
3
+ @use './variables';
4
+
5
+ // Responsive images (ensure images don't scale beyond their parents)
6
+ //
7
+ // This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.
8
+ // We previously tried the "images are responsive by default" approach in Bootstrap v2,
9
+ // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)
10
+ // which weren't expecting the images within themselves to be involuntarily resized.
11
+ // See also https://github.com/twbs/bootstrap/issues/18178
12
+ .img-fluid {
13
+ @include image.img-fluid();
14
+ }
15
+
16
+ // Image thumbnails
17
+ .img-thumbnail {
18
+ padding: variables.$thumbnail-padding;
19
+ background-color: variables.$thumbnail-bg;
20
+ border: variables.$thumbnail-border-width solid variables.$thumbnail-border-color;
21
+ border-radius: variables.$thumbnail-border-radius;
22
+ box-shadow: variables.$thumbnail-box-shadow;
23
+
24
+ // Keep them at most 100% wide
25
+ @include image.img-fluid();
26
+ }
27
+
28
+ //
29
+ // Figures
30
+ //
31
+
32
+ .figure {
33
+ // Ensures the caption's text aligns with the image.
34
+ display: inline-block;
35
+ }
36
+
37
+ .figure-img {
38
+ margin-block-end: spacers.$spacer * 0.5;
39
+ line-height: 1;
40
+ }
41
+
42
+ .figure-caption {
43
+ font-size: variables.$figure-caption-font-size;
44
+ color: variables.$figure-caption-color;
45
+ }
@@ -0,0 +1,197 @@
1
+ @use 'sass:map';
2
+
3
+ @use '../variables/focus';
4
+ @use '../variables/semantic-tokens';
5
+ @use '../variables/typography';
6
+ @use 'mixins/breakpoints';
7
+ @use 'variables';
8
+
9
+ .list-group {
10
+ display: flex;
11
+ flex-direction: column;
12
+ padding-inline-start: 0;
13
+ border-radius: variables.$list-group-border-radius;
14
+ }
15
+
16
+ .list-group-numbered {
17
+ list-style-type: none;
18
+ counter-reset: section;
19
+
20
+ > li::before {
21
+ // Increments only this instance of the section counter
22
+ content: counters(section, '.') '. ';
23
+ counter-increment: section;
24
+ }
25
+ }
26
+
27
+ .list-group-item-action {
28
+ inline-size: 100%; // For `<button>`s (anchors become 100% by default though)
29
+ color: variables.$list-group-action-color;
30
+ text-align: inherit; // For `<button>`s (anchors inherit)
31
+
32
+ // Hover state
33
+ &:is(:hover, :focus) {
34
+ z-index: 1; // Place hover/focus items above their siblings for proper border styling
35
+ color: variables.$list-group-action-hover-color;
36
+ text-decoration: none;
37
+ background-color: variables.$list-group-hover-bg;
38
+ }
39
+
40
+ &:focus-visible {
41
+ outline-offset: focus.$focus-style-outline-inside-offset;
42
+ }
43
+
44
+ &:active {
45
+ color: variables.$list-group-action-active-color;
46
+ background-color: variables.$list-group-action-active-bg;
47
+ }
48
+ }
49
+
50
+ .list-group-item {
51
+ position: relative;
52
+ display: block;
53
+ padding-block: variables.$list-group-item-padding-y;
54
+ padding-inline: variables.$list-group-item-padding-x;
55
+ color: variables.$list-group-color;
56
+ text-decoration: none;
57
+ background-color: variables.$list-group-bg;
58
+ border: variables.$list-group-border-width solid variables.$list-group-border-color;
59
+ border-inline-width: 0;
60
+ margin: 0;
61
+
62
+ .list-group-item-heading {
63
+ color: variables.$headings-color;
64
+ }
65
+
66
+ &:first-child {
67
+ border-block-start: none;
68
+ border-start-start-radius: inherit;
69
+ border-start-end-radius: inherit;
70
+ }
71
+
72
+ &:last-child {
73
+ border-block-end-color: transparent;
74
+ border-end-start-radius: inherit;
75
+ border-end-end-radius: inherit;
76
+ }
77
+
78
+ &:is(.disabled, :disabled) {
79
+ color: variables.$list-group-disabled-color;
80
+ pointer-events: none;
81
+ background-color: variables.$list-group-disabled-bg;
82
+ }
83
+
84
+ // Include both here for `<a>`s and `<button>`s
85
+ &.active {
86
+ z-index: 2; // Place active items above their siblings for proper border styling
87
+ color: variables.$list-group-active-color;
88
+ background-color: variables.$list-group-active-bg;
89
+ border-color: variables.$list-group-active-border-color;
90
+ }
91
+
92
+ & + & {
93
+ border-block-start-width: 0;
94
+
95
+ &.active {
96
+ margin-block-start: -(variables.$list-group-border-width);
97
+ border-block-start-width: variables.$list-group-border-width;
98
+ }
99
+ }
100
+ }
101
+
102
+ .list-group-lg .list-group-item {
103
+ min-block-size: 64px;
104
+ }
105
+
106
+ .list-group-md .list-group-item {
107
+ min-block-size: 48px;
108
+ }
109
+
110
+ .list-header {
111
+ font-size: typography.$si-font-size-caption-1;
112
+ padding-block: variables.$list-group-item-padding-y;
113
+ padding-inline: variables.$list-group-item-padding-x;
114
+ color: variables.$headings-color;
115
+ margin-block-end: -1px;
116
+ border: 1px solid variables.$list-group-border-color;
117
+ }
118
+
119
+ @each $breakpoint in map.keys(variables.$grid-breakpoints) {
120
+ @include breakpoints.media-breakpoint-up($breakpoint) {
121
+ $infix: breakpoints.breakpoint-infix($breakpoint, variables.$grid-breakpoints);
122
+
123
+ .list-group-horizontal#{$infix} {
124
+ flex-direction: row;
125
+
126
+ > .list-group-item {
127
+ border-block-width: 0;
128
+
129
+ &:first-child {
130
+ border-end-start-radius: variables.$list-group-border-radius;
131
+ border-start-end-radius: 0;
132
+ }
133
+
134
+ &:last-child {
135
+ border-start-end-radius: variables.$list-group-border-radius;
136
+ border-end-start-radius: 0;
137
+ }
138
+
139
+ &.active {
140
+ margin-block-start: 0;
141
+ }
142
+
143
+ + .list-group-item {
144
+ border-inline-start-width: variables.$list-group-border-width;
145
+
146
+ &.active {
147
+ margin-inline-start: -(variables.$list-group-border-width);
148
+ border-inline-start-width: variables.$list-group-border-width;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+ }
155
+
156
+ .list-group-flush {
157
+ border-radius: 0;
158
+
159
+ > .list-group-item {
160
+ border-inline-width: 0;
161
+ border-block-width: 0 variables.$list-group-border-width;
162
+
163
+ &:last-child {
164
+ border-block-end-width: 0;
165
+ }
166
+ }
167
+ }
168
+
169
+ .list-group-item-secondary {
170
+ background-color: semantic-tokens.$element-ui-4;
171
+ color: semantic-tokens.$element-text-primary;
172
+ }
173
+
174
+ .list-group-item-success {
175
+ color: semantic-tokens.$element-text-success;
176
+ background: semantic-tokens.$element-base-success;
177
+ }
178
+
179
+ .list-group-item-warning {
180
+ color: semantic-tokens.$element-text-warning;
181
+ background: semantic-tokens.$element-base-warning;
182
+ }
183
+
184
+ .list-group-item-caution {
185
+ background-color: semantic-tokens.$element-base-caution;
186
+ color: semantic-tokens.$element-text-caution;
187
+ }
188
+
189
+ .list-group-item-danger {
190
+ color: semantic-tokens.$element-text-danger;
191
+ background: semantic-tokens.$element-base-danger;
192
+ }
193
+
194
+ .list-group-item-info {
195
+ color: semantic-tokens.$element-text-information;
196
+ background: semantic-tokens.$element-base-information;
197
+ }
@@ -0,0 +1,30 @@
1
+ // Toggles
2
+ //
3
+ // Used in conjunction with global variables to enable certain theme features.
4
+
5
+ // Deprecate
6
+ @forward './mixins/deprecate';
7
+
8
+ // Helpers
9
+ @forward './mixins/breakpoints';
10
+ @forward './mixins/image';
11
+ @forward './mixins/visually-hidden';
12
+ @forward './mixins/reset-text';
13
+ @forward './mixins/text-truncate';
14
+
15
+ // Utilities
16
+ @forward './mixins/utilities';
17
+
18
+ // Components
19
+ @forward './mixins/backdrop';
20
+ @forward './mixins/lists';
21
+ @forward './mixins/table-row';
22
+
23
+ // Skins
24
+ @forward './mixins/gradients';
25
+ @forward './mixins/transition';
26
+
27
+ // Layout
28
+ @forward './mixins/clearfix';
29
+ @forward './mixins/container';
30
+ @forward './mixins/grid';
@@ -0,0 +1,234 @@
1
+ @use '../variables/spacers';
2
+ @use '../variables/typography';
3
+ @use '../variables/zindex';
4
+ @use './functions';
5
+ @use './mixins/backdrop';
6
+ @use './mixins/breakpoints';
7
+ @use './variables';
8
+
9
+ @use 'sass:map';
10
+
11
+ .modal {
12
+ position: fixed;
13
+ inset-block-start: 0;
14
+ inset-inline-start: 0;
15
+ block-size: 100%;
16
+ inline-size: 100%;
17
+ z-index: zindex.$zindex-modal;
18
+ display: none;
19
+ overflow-x: hidden;
20
+ overflow-y: auto;
21
+ // Prevent Chrome on Windows from adding a focus outline. For details, see
22
+ // https://github.com/twbs/bootstrap/pull/10951.
23
+ outline: 0;
24
+ // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a
25
+ // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342
26
+ // See also https://github.com/twbs/bootstrap/issues/17695
27
+ }
28
+
29
+ .modal-dialog {
30
+ position: relative;
31
+ inline-size: auto;
32
+ margin: variables.$modal-dialog-margin;
33
+ // allow clicks to pass through for custom click handling to close modal
34
+ pointer-events: none;
35
+ // because of :focus-visible that shouldn't be visible
36
+ box-shadow: none !important; // stylelint-disable-line declaration-no-important
37
+
38
+ .modal.fade & {
39
+ transition: variables.$modal-transition;
40
+ transform: variables.$modal-fade-transform;
41
+ }
42
+
43
+ .modal.show & {
44
+ transform: variables.$modal-show-transform;
45
+ }
46
+
47
+ // When trying to close, animate focus to scale
48
+ .modal.modal-static & {
49
+ transform: variables.$modal-scale-transform;
50
+ }
51
+ }
52
+
53
+ .modal-dialog-scrollable {
54
+ block-size: functions.subtract(100%, variables.$modal-dialog-margin * 2);
55
+
56
+ .modal-content {
57
+ max-block-size: 100%;
58
+ overflow: hidden;
59
+ }
60
+
61
+ .modal-body {
62
+ overflow-y: auto;
63
+ }
64
+ }
65
+
66
+ .modal-dialog-centered {
67
+ display: flex;
68
+ align-items: center;
69
+ min-block-size: functions.subtract(100%, variables.$modal-dialog-margin * 2);
70
+ }
71
+
72
+ .modal-header {
73
+ display: flex;
74
+ flex-shrink: 0;
75
+ align-items: center;
76
+ justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
77
+ padding-block: variables.$modal-header-padding-y;
78
+ padding-inline: variables.$modal-header-padding-x;
79
+ border-start-start-radius: variables.$modal-content-inner-border-radius;
80
+ border-start-end-radius: variables.$modal-content-inner-border-radius;
81
+
82
+ .btn-close {
83
+ padding-block: variables.$modal-header-padding-y * 0.5;
84
+ padding-inline: variables.$modal-header-padding-x * 0.5;
85
+ margin: 0;
86
+ }
87
+
88
+ .icon {
89
+ font-size: 2rem;
90
+ margin-inline-end: map.get(spacers.$spacers, 4);
91
+ }
92
+
93
+ .modal-title {
94
+ flex: 1;
95
+ }
96
+ }
97
+
98
+ .modal-title {
99
+ font-size: typography.$si-font-size-title-1;
100
+ font-weight: typography.$si-font-weight-title-1;
101
+ line-height: variables.$modal-title-line-height;
102
+ margin-block-end: 0;
103
+ }
104
+
105
+ .modal-backdrop {
106
+ @include backdrop.overlay-backdrop(
107
+ zindex.$zindex-modal-backdrop,
108
+ variables.$modal-backdrop-bg,
109
+ variables.$modal-backdrop-opacity
110
+ );
111
+ }
112
+
113
+ .modal-content {
114
+ position: relative;
115
+ display: flex;
116
+ flex-direction: column;
117
+ inline-size: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`
118
+ // counteract the pointer-events: none; in the .modal-dialog
119
+ color: variables.$modal-content-color;
120
+ pointer-events: auto;
121
+ background-color: variables.$modal-content-bg;
122
+ background-clip: padding-box;
123
+ border-radius: variables.$modal-content-border-radius;
124
+ box-shadow: variables.$modal-content-box-shadow-xs;
125
+ // Remove focus outline from opened modal
126
+ outline: 0;
127
+ }
128
+
129
+ .modal-body {
130
+ position: relative;
131
+ // Enable `flex-grow: 1` so that the body take up as much space as possible
132
+ // when there should be a fixed height on `.modal-dialog`.
133
+ flex: 1 1 auto;
134
+ padding-block: map.get(spacers.$spacers, 5) variables.$modal-inner-padding;
135
+ // use margin instead of padding so that the scrollbar isn't on the edge of the dialog
136
+ margin-inline: variables.$modal-inner-padding;
137
+ padding-inline: 0;
138
+
139
+ .modal-dialog-scrollable & {
140
+ padding-block: 0;
141
+ }
142
+ }
143
+
144
+ .modal-footer {
145
+ display: flex;
146
+ flex-wrap: wrap;
147
+ flex-shrink: 0;
148
+ align-items: center; // vertically center
149
+ justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
150
+ padding: (variables.$modal-inner-padding - variables.$modal-footer-margin-between * 0.5);
151
+ border-end-start-radius: variables.$modal-content-inner-border-radius;
152
+ border-end-end-radius: variables.$modal-content-inner-border-radius;
153
+
154
+ // Place margin between footer elements
155
+ // This solution is far from ideal because of the universal selector usage,
156
+ // but is needed to fix https://github.com/twbs/bootstrap/issues/24800
157
+ > * {
158
+ margin: (variables.$modal-footer-margin-between * 0.5);
159
+ }
160
+ }
161
+
162
+ @media (max-width: 400px) {
163
+ .modal-footer {
164
+ flex-direction: column;
165
+ align-items: stretch;
166
+ }
167
+ }
168
+
169
+ // Scale up the modal
170
+ @include breakpoints.media-breakpoint-up(sm) {
171
+ // Automatically set modal's width for larger viewports
172
+ .modal-dialog {
173
+ max-inline-size: variables.$modal-md;
174
+ margin-block: variables.$modal-dialog-margin-y-sm-up;
175
+ margin-inline: auto;
176
+ }
177
+
178
+ .modal-dialog-scrollable {
179
+ block-size: functions.subtract(100%, variables.$modal-dialog-margin-y-sm-up * 2);
180
+ }
181
+
182
+ .modal-dialog-centered {
183
+ min-block-size: functions.subtract(100%, variables.$modal-dialog-margin-y-sm-up * 2);
184
+ }
185
+
186
+ .modal-content {
187
+ box-shadow: variables.$modal-content-box-shadow-sm-up;
188
+ }
189
+
190
+ .modal-sm {
191
+ max-inline-size: variables.$modal-sm;
192
+ }
193
+ }
194
+
195
+ @include breakpoints.media-breakpoint-up(lg) {
196
+ .modal-lg,
197
+ .modal-xl {
198
+ max-inline-size: variables.$modal-lg;
199
+ }
200
+ }
201
+
202
+ @include breakpoints.media-breakpoint-up(xl) {
203
+ .modal-xl {
204
+ max-inline-size: variables.$modal-xl;
205
+ }
206
+ }
207
+
208
+ // scss-docs-start modal-fullscreen-loop
209
+ @each $breakpoint in map.keys(variables.$grid-breakpoints) {
210
+ $infix: breakpoints.breakpoint-infix($breakpoint, variables.$grid-breakpoints);
211
+ $postfix: if($infix != '', $infix + '-down', '');
212
+
213
+ @include breakpoints.media-breakpoint-down($breakpoint) {
214
+ .modal-fullscreen#{$postfix} {
215
+ inline-size: 100vw;
216
+ max-inline-size: none;
217
+ block-size: 100%;
218
+ margin: 0;
219
+
220
+ .modal-content {
221
+ block-size: 100%;
222
+ border: 0;
223
+ }
224
+
225
+ :is(.modal-header, .modal-content, .modal-footer) {
226
+ border-radius: 0;
227
+ }
228
+
229
+ .modal-body {
230
+ overflow-y: auto;
231
+ }
232
+ }
233
+ }
234
+ }
@@ -0,0 +1,155 @@
1
+ @use '../variables/semantic-tokens';
2
+ @use '../variables/spacers';
3
+ @use './variables';
4
+
5
+ @use 'sass:map';
6
+
7
+ $nav-tabs-height: 40px;
8
+ $nav-tabs-min-width: 100px;
9
+
10
+ .nav {
11
+ display: flex;
12
+ flex-wrap: wrap;
13
+ padding-inline-start: 0;
14
+ margin-block-end: 0;
15
+ list-style: none;
16
+
17
+ .nav-link {
18
+ &:hover {
19
+ color: semantic-tokens.$element-action-secondary-text-hover;
20
+ background: semantic-tokens.$element-action-secondary-hover;
21
+ border-color: semantic-tokens.$element-action-secondary-border-hover;
22
+ }
23
+ }
24
+ }
25
+
26
+ .nav-link {
27
+ display: block;
28
+ padding-block: variables.$nav-link-padding-y;
29
+ padding-inline: variables.$nav-link-padding-x;
30
+ font-size: variables.$nav-link-font-size;
31
+ font-weight: variables.$nav-link-font-weight;
32
+ color: variables.$nav-link-color;
33
+
34
+ &:is(:hover, :focus) {
35
+ color: variables.$nav-link-hover-color;
36
+ text-decoration: none;
37
+ }
38
+
39
+ // Disabled state lightens text
40
+ &.disabled {
41
+ color: variables.$nav-link-disabled-color;
42
+ pointer-events: none;
43
+ cursor: default;
44
+ }
45
+ }
46
+
47
+ .nav-tabs {
48
+ position: relative;
49
+ block-size: $nav-tabs-height;
50
+ line-height: 1.125rem;
51
+ border: 0;
52
+ flex-wrap: nowrap;
53
+
54
+ &::before {
55
+ content: '';
56
+ position: absolute;
57
+ inset-inline: 0;
58
+ inset-block-end: 0;
59
+ block-size: variables.$nav-tabs-border-width;
60
+ background: semantic-tokens.$element-ui-4;
61
+ }
62
+
63
+ &:focus-visible::before {
64
+ // because otherwise the focus is cut off
65
+ background: semantic-tokens.$element-focus-default;
66
+ }
67
+
68
+ .nav-link {
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ block-size: $nav-tabs-height;
73
+ min-inline-size: $nav-tabs-min-width;
74
+ margin-block-end: -(variables.$nav-tabs-border-width);
75
+ background: none;
76
+ border-style: solid;
77
+ border-color: transparent;
78
+ border-width: 0 0 variables.$nav-tabs-border-width;
79
+ border-start-start-radius: variables.$btn-border-radius;
80
+ border-start-end-radius: variables.$btn-border-radius;
81
+ cursor: pointer;
82
+
83
+ .badge {
84
+ margin-inline-start: map.get(spacers.$spacers, 1);
85
+ margin-block-start: -7px;
86
+ flex-shrink: 0;
87
+ }
88
+
89
+ &.active {
90
+ border-color: semantic-tokens.$element-action-secondary-border-hover;
91
+ }
92
+
93
+ &:hover {
94
+ isolation: isolate;
95
+ }
96
+
97
+ &.disabled {
98
+ color: variables.$nav-link-disabled-color;
99
+ background-color: transparent;
100
+ border-color: transparent;
101
+ }
102
+ }
103
+
104
+ :is(.nav-link.active, .nav-item.show .nav-link) {
105
+ color: variables.$nav-tabs-link-active-color;
106
+ }
107
+
108
+ .dropdown-menu {
109
+ // Make dropdown border overlap tab border
110
+ margin-block-start: -(variables.$nav-tabs-border-width);
111
+ border-start-start-radius: 0;
112
+ border-start-end-radius: 0;
113
+ }
114
+ }
115
+
116
+ //
117
+ // Justified variants
118
+ //
119
+
120
+ .nav-fill {
121
+ > .nav-link,
122
+ .nav-item {
123
+ flex: 1 1 auto;
124
+ text-align: center;
125
+ }
126
+ }
127
+
128
+ .nav-justified {
129
+ > .nav-link,
130
+ .nav-item {
131
+ flex-basis: 0;
132
+ flex-grow: 1;
133
+ text-align: center;
134
+ }
135
+ }
136
+
137
+ :is(.nav-fill, .nav-justified) {
138
+ .nav-item .nav-link {
139
+ inline-size: 100%; // Make sure button will grow
140
+ }
141
+ }
142
+
143
+ // Tabbable tabs
144
+ //
145
+ // Hide tabbable panes to start, show them when `.active`
146
+
147
+ .tab-content {
148
+ > .tab-pane {
149
+ display: none;
150
+ }
151
+
152
+ > .active {
153
+ display: block;
154
+ }
155
+ }
@@ -0,0 +1,58 @@
1
+ @use '../variables/semantic-tokens';
2
+ @use '../variables/spacers';
3
+ @use '../variables/typography';
4
+ @use 'mixins/lists';
5
+
6
+ @use 'sass:map';
7
+
8
+ $page-button-size: 24px;
9
+
10
+ .pagination {
11
+ display: flex;
12
+ margin: 0;
13
+ padding-block: map.get(spacers.$spacers, 4);
14
+ @include lists.list-unstyled();
15
+ }
16
+
17
+ .page-item {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ border-radius: ($page-button-size * 0.5);
22
+ min-inline-size: $page-button-size;
23
+ block-size: $page-button-size;
24
+ padding-block: 0;
25
+ padding-inline: map.get(spacers.$spacers, 2);
26
+ margin-inline: map.get(spacers.$spacers, 1);
27
+ background: transparent;
28
+ font-size: typography.$si-font-size-title-2;
29
+ font-weight: typography.$si-font-weight-title-2;
30
+ color: semantic-tokens.$element-text-primary;
31
+ border: 0;
32
+
33
+ &:is(.active, :hover:not(:disabled)):not(.separator) {
34
+ background: semantic-tokens.$element-base-1-selected;
35
+ }
36
+
37
+ &:has(.icon) {
38
+ padding-inline: 0;
39
+ }
40
+
41
+ &.disabled {
42
+ opacity: semantic-tokens.$element-action-disabled-opacity;
43
+ }
44
+
45
+ &.separator {
46
+ font-weight: normal;
47
+ }
48
+ }
49
+
50
+ .page-link {
51
+ cursor: pointer;
52
+ color: inherit;
53
+
54
+ &:hover {
55
+ text-decoration: none;
56
+ color: inherit;
57
+ }
58
+ }