@collectivetrait/lineaui 0.0.0-stage → 1.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 (130) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE +21 -0
  3. package/README.md +113 -2
  4. package/config.json +3 -0
  5. package/dist/blocks.css +5042 -0
  6. package/dist/blocks.css.map +1 -0
  7. package/dist/bundle.js +873 -0
  8. package/dist/core.css +1641 -0
  9. package/dist/core.css.map +1 -0
  10. package/dist/icons-manifest.json +1 -0
  11. package/dist/icons.css +158 -0
  12. package/dist/styles.css +10546 -0
  13. package/dist/styles.css.map +1 -0
  14. package/dist/theme-init.js +8 -0
  15. package/dist/utilities.css +3865 -0
  16. package/dist/utilities.css.map +1 -0
  17. package/humans.txt +8 -0
  18. package/js/config.js +3 -0
  19. package/js/index.js +45 -0
  20. package/js/modules/copy.js +64 -0
  21. package/js/modules/dialog.js +55 -0
  22. package/js/modules/dismiss.js +43 -0
  23. package/js/modules/dropdown.js +108 -0
  24. package/js/modules/gallery.js +84 -0
  25. package/js/modules/highlight.js +89 -0
  26. package/js/modules/navigation.js +104 -0
  27. package/js/modules/quantity.js +63 -0
  28. package/js/modules/rhythm.js +21 -0
  29. package/js/modules/table.js +109 -0
  30. package/js/modules/tabs.js +112 -0
  31. package/js/modules/toast.js +97 -0
  32. package/js/modules/tooltip.js +106 -0
  33. package/js/theme-init.js +8 -0
  34. package/package.json +71 -4
  35. package/scss/_blocks-only.scss +4 -0
  36. package/scss/_core.scss +7 -0
  37. package/scss/_index.scss +12 -0
  38. package/scss/_layers.scss +2 -0
  39. package/scss/_utilities-only.scss +4 -0
  40. package/scss/base/_code.scss +50 -0
  41. package/scss/base/_forms.scss +110 -0
  42. package/scss/base/_index.scss +7 -0
  43. package/scss/base/_interactive.scss +25 -0
  44. package/scss/base/_media.scss +28 -0
  45. package/scss/base/_reset.scss +53 -0
  46. package/scss/base/_tables.scss +49 -0
  47. package/scss/base/_typography.scss +232 -0
  48. package/scss/blocks/_accordion.scss +88 -0
  49. package/scss/blocks/_alert.scss +101 -0
  50. package/scss/blocks/_avatar.scss +104 -0
  51. package/scss/blocks/_badge.scss +72 -0
  52. package/scss/blocks/_breadcrumb.scss +65 -0
  53. package/scss/blocks/_button-group.scss +73 -0
  54. package/scss/blocks/_button.scss +212 -0
  55. package/scss/blocks/_card.scss +146 -0
  56. package/scss/blocks/_choice.scss +163 -0
  57. package/scss/blocks/_code.scss +157 -0
  58. package/scss/blocks/_data-list.scss +92 -0
  59. package/scss/blocks/_divider.scss +54 -0
  60. package/scss/blocks/_drawer.scss +160 -0
  61. package/scss/blocks/_dropdown.scss +167 -0
  62. package/scss/blocks/_empty-state.scss +61 -0
  63. package/scss/blocks/_field.scss +146 -0
  64. package/scss/blocks/_form.scss +87 -0
  65. package/scss/blocks/_gallery.scss +120 -0
  66. package/scss/blocks/_index.scss +49 -0
  67. package/scss/blocks/_input-group.scss +95 -0
  68. package/scss/blocks/_line-item.scss +105 -0
  69. package/scss/blocks/_list.scss +117 -0
  70. package/scss/blocks/_media.scss +105 -0
  71. package/scss/blocks/_menu.scss +191 -0
  72. package/scss/blocks/_meta.scss +59 -0
  73. package/scss/blocks/_modal.scss +156 -0
  74. package/scss/blocks/_navbar.scss +227 -0
  75. package/scss/blocks/_order-summary.scss +92 -0
  76. package/scss/blocks/_page-header.scss +88 -0
  77. package/scss/blocks/_pagination.scss +110 -0
  78. package/scss/blocks/_price.scss +88 -0
  79. package/scss/blocks/_product-card.scss +138 -0
  80. package/scss/blocks/_progress.scss +68 -0
  81. package/scss/blocks/_prose.scss +165 -0
  82. package/scss/blocks/_quantity.scss +73 -0
  83. package/scss/blocks/_quote.scss +71 -0
  84. package/scss/blocks/_rating.scss +50 -0
  85. package/scss/blocks/_site-footer.scss +135 -0
  86. package/scss/blocks/_skeleton.scss +63 -0
  87. package/scss/blocks/_spinner.scss +44 -0
  88. package/scss/blocks/_stat.scss +111 -0
  89. package/scss/blocks/_steps.scss +147 -0
  90. package/scss/blocks/_swatch.scss +117 -0
  91. package/scss/blocks/_table.scss +242 -0
  92. package/scss/blocks/_tabs.scss +168 -0
  93. package/scss/blocks/_tag.scss +72 -0
  94. package/scss/blocks/_timeline.scss +84 -0
  95. package/scss/blocks/_toast.scss +146 -0
  96. package/scss/blocks/_toolbar.scss +67 -0
  97. package/scss/blocks/_tooltip.scss +63 -0
  98. package/scss/helpers/_index.scss +2 -0
  99. package/scss/helpers/_rhythm.scss +64 -0
  100. package/scss/helpers/_typography.scss +4 -0
  101. package/scss/layout/_cluster.scss +43 -0
  102. package/scss/layout/_container.scss +26 -0
  103. package/scss/layout/_grid.scss +90 -0
  104. package/scss/layout/_index.scss +5 -0
  105. package/scss/layout/_section.scss +78 -0
  106. package/scss/layout/_shell.scss +87 -0
  107. package/scss/settings/_blocks.scss +3 -0
  108. package/scss/settings/_breakpoints.scss +7 -0
  109. package/scss/settings/_fonts.scss +5 -0
  110. package/scss/settings/_index.scss +7 -0
  111. package/scss/settings/_layout.scss +5 -0
  112. package/scss/settings/_prefix.scss +1 -0
  113. package/scss/settings/_rhythm.scss +6 -0
  114. package/scss/settings/_utilities.scss +2 -0
  115. package/scss/tokens/_borders.scss +16 -0
  116. package/scss/tokens/_elevation.scss +37 -0
  117. package/scss/tokens/_index.scss +8 -0
  118. package/scss/tokens/_layout.scss +17 -0
  119. package/scss/tokens/_motion.scss +17 -0
  120. package/scss/tokens/_palette.scss +50 -0
  121. package/scss/tokens/_roles.scss +90 -0
  122. package/scss/tokens/_space.scss +9 -0
  123. package/scss/tokens/_type.scss +57 -0
  124. package/scss/tools/_bem.scss +22 -0
  125. package/scss/tools/_index.scss +4 -0
  126. package/scss/tools/_rhythm.scss +26 -0
  127. package/scss/tools/_role-engine.scss +16 -0
  128. package/scss/tools/_utility-generator.scss +74 -0
  129. package/scss/utilities/_index.scss +8 -0
  130. package/scss/utilities/_map.scss +321 -0
@@ -0,0 +1,156 @@
1
+ @use 'sass:list';
2
+ @use '../settings' as s;
3
+ @use '../tools/bem' as b;
4
+ @use '../tools/rhythm' as r;
5
+
6
+ @if list.length(s.$blocks) == 0 or list.index(s.$blocks, 'modal') {
7
+ @layer blocks {
8
+ @include b.block('modal') {
9
+ --_max-width: min(90vw, 560px);
10
+
11
+ position: relative;
12
+ background-color: var(--surface-raised);
13
+ color: var(--text);
14
+ border: none;
15
+ border-radius: var(--r-xs);
16
+ padding: 0;
17
+ max-inline-size: var(--_max-width);
18
+ box-shadow: var(--sh4);
19
+ overflow: visible;
20
+
21
+ opacity: 1;
22
+ transform: scale(1);
23
+ transition: opacity var(--dur-base) var(--e-exit),
24
+ transform var(--dur-base) var(--e-exit),
25
+ overlay var(--dur-base) var(--e-exit) allow-discrete,
26
+ display var(--dur-base) var(--e-exit) allow-discrete;
27
+
28
+ @starting-style {
29
+ opacity: 0;
30
+ transform: scale(0.95);
31
+ }
32
+
33
+ &:not([open]) {
34
+ opacity: 0;
35
+ transform: scale(0.95);
36
+ }
37
+
38
+ &::backdrop {
39
+ background-color: var(--overlay);
40
+ opacity: 1;
41
+ transition: opacity var(--dur-base) var(--e-exit),
42
+ overlay var(--dur-base) var(--e-exit) allow-discrete,
43
+ display var(--dur-base) var(--e-exit) allow-discrete;
44
+
45
+ @starting-style {
46
+ opacity: 0;
47
+ }
48
+ }
49
+
50
+ &:not([open])::backdrop {
51
+ opacity: 0;
52
+ }
53
+
54
+ @include b.element('close') {
55
+ position: absolute;
56
+ top: var(--s2);
57
+ right: var(--s2);
58
+ z-index: 1;
59
+ display: inline-flex;
60
+ align-items: center;
61
+ justify-content: center;
62
+ width: 32px;
63
+ height: 32px;
64
+ padding: 0;
65
+ border: none;
66
+ background: none;
67
+ color: var(--c-muted);
68
+ cursor: pointer;
69
+ border-radius: var(--r-md);
70
+ flex-shrink: 0;
71
+
72
+ &:hover {
73
+ color: var(--text);
74
+ background-color: var(--surface-raised);
75
+ }
76
+
77
+ &:focus-visible {
78
+ outline: 2px solid var(--focus);
79
+ outline-offset: -2px;
80
+ }
81
+ }
82
+
83
+ @include b.element('header') {
84
+ display: flex;
85
+ align-items: center;
86
+ gap: var(--s2);
87
+ padding: var(--s4) calc(var(--s4) + 32px) 0 var(--s4);
88
+ }
89
+
90
+ @include b.element('title') {
91
+ font: 600 var(--t-h4-s)/var(--t-h4-lh) var(--f-ui);
92
+ flex: 1;
93
+ min-width: 0;
94
+ margin: 0;
95
+ }
96
+
97
+ @include b.element('body') {
98
+ padding: var(--s4);
99
+ overflow-y: auto;
100
+
101
+ > p:first-child,
102
+ > h1:first-child,
103
+ > h2:first-child,
104
+ > h3:first-child,
105
+ > h4:first-child,
106
+ > h5:first-child,
107
+ > h6:first-child {
108
+ margin-top: 0;
109
+ }
110
+ }
111
+
112
+ @include b.element('footer') {
113
+ display: flex;
114
+ align-items: center;
115
+ justify-content: flex-end;
116
+ gap: var(--s2);
117
+ padding: var(--s4);
118
+ padding-top: 0;
119
+ }
120
+
121
+ @include b.modifier('sm') { --_max-width: min(90vw, 400px); }
122
+ @include b.modifier('md') { --_max-width: min(90vw, 560px); }
123
+ @include b.modifier('lg') { --_max-width: min(90vw, 800px); }
124
+ @include b.modifier('full') {
125
+ --_max-width: 100vw;
126
+ max-block-size: 100vh;
127
+ border-radius: 0;
128
+ }
129
+
130
+ @include b.modifier('scroll-body') {
131
+ max-block-size: min(90vh, 600px);
132
+ display: flex;
133
+ flex-direction: column;
134
+
135
+ .#{s.$prefix}modal__body {
136
+ flex: 1;
137
+ overflow-y: auto;
138
+ }
139
+ }
140
+
141
+ @include b.modifier('center') {
142
+ text-align: center;
143
+
144
+ .#{s.$prefix}modal__footer {
145
+ justify-content: center;
146
+ }
147
+ }
148
+
149
+ @include b.modifier('danger') {
150
+ .#{s.$prefix}modal__title {
151
+ color: var(--danger-text);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
@@ -0,0 +1,227 @@
1
+ @use 'sass:list';
2
+ @use 'sass:map';
3
+ @use '../settings' as s;
4
+ @use '../tools/bem' as b;
5
+ @use '../tools/rhythm' as r;
6
+ @use '../tools/role-engine' as role;
7
+
8
+ $navbar-collapse-bp: md !default;
9
+
10
+ @if list.length(s.$blocks) == 0 or list.index(s.$blocks, 'navbar') {
11
+ @layer blocks {
12
+ @include b.block('navbar') {
13
+ --_height: var(--s4);
14
+ --_bg: var(--surface);
15
+ --_text: var(--text);
16
+ --_border-color: var(--border);
17
+ --_fill: var(--primary);
18
+
19
+ position: relative;
20
+ background-color: var(--_bg);
21
+ color: var(--_text);
22
+ z-index: 100;
23
+
24
+ @include b.element('inner') {
25
+ display: flex;
26
+ align-items: center;
27
+ gap: var(--s3);
28
+ max-width: var(--container-wide);
29
+ margin-inline: auto;
30
+ padding-inline: var(--gutter);
31
+ min-height: var(--_height);
32
+ }
33
+
34
+ @include b.element('brand') {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: var(--s2);
38
+ font: 700 var(--t-h4-s)/var(--t-h4-lh) var(--f-ui);
39
+ text-decoration: none;
40
+ color: inherit;
41
+ flex-shrink: 0;
42
+ }
43
+
44
+ @include b.element('nav') {
45
+ display: flex;
46
+ align-items: center;
47
+ gap: var(--s-h);
48
+ flex: 1;
49
+ }
50
+
51
+ @include b.element('item') {
52
+ list-style: none;
53
+ }
54
+
55
+ @include b.element('link') {
56
+ display: inline-flex;
57
+ align-items: center;
58
+ gap: var(--s1);
59
+ padding: var(--s1) var(--s2);
60
+ min-height: r.lines(2);
61
+ font: 500 var(--t-body-sm-s)/var(--t-body-sm-lh) var(--f-ui);
62
+ color: var(--c-muted);
63
+ text-decoration: none;
64
+ transition: color var(--dur-fast) var(--e-standard);
65
+
66
+ &:hover {
67
+ color: var(--_text);
68
+ }
69
+
70
+ &[aria-current="page"] {
71
+ color: var(--primary-text);
72
+ }
73
+ }
74
+
75
+ @include b.element('actions') {
76
+ display: flex;
77
+ align-items: center;
78
+ gap: var(--s2);
79
+ margin-left: auto;
80
+ }
81
+
82
+ @include b.element('toggle') {
83
+ display: none;
84
+ appearance: none;
85
+ background: none;
86
+ border: none;
87
+ padding: var(--s1);
88
+ cursor: pointer;
89
+ color: inherit;
90
+ border-radius: var(--r-md);
91
+
92
+ &:hover {
93
+ background-color: var(--surface-raised);
94
+ }
95
+ }
96
+
97
+ @include b.element('panel') {
98
+ display: none;
99
+ }
100
+
101
+ @media (max-width: #{map.get(s.$breakpoints, $navbar-collapse-bp)}) {
102
+ &__toggle {
103
+ display: flex;
104
+ align-items: center;
105
+ justify-content: center;
106
+ margin-left: auto;
107
+ }
108
+
109
+ &__nav {
110
+ display: none;
111
+ }
112
+
113
+ &__actions {
114
+ display: none;
115
+ }
116
+
117
+ &__panel {
118
+ position: absolute;
119
+ top: 100%;
120
+ left: 0;
121
+ right: 0;
122
+ background: var(--_bg);
123
+ padding: var(--s2) var(--gutter);
124
+ box-shadow: var(--sh3);
125
+ z-index: 99;
126
+ display: none;
127
+ opacity: 0;
128
+ transform: translateY(-8px);
129
+ transition: opacity var(--dur-base) var(--e-exit),
130
+ transform var(--dur-base) var(--e-exit),
131
+ display var(--dur-base) var(--e-exit) allow-discrete;
132
+
133
+ &[aria-hidden="false"] {
134
+ display: block;
135
+ opacity: 1;
136
+ transform: translateY(0);
137
+ transition: opacity var(--dur-base) var(--e-enter),
138
+ transform var(--dur-base) var(--e-enter),
139
+ display var(--dur-base) var(--e-enter) allow-discrete;
140
+
141
+ @starting-style {
142
+ opacity: 0;
143
+ transform: translateY(-8px);
144
+ }
145
+ }
146
+ }
147
+
148
+ &__panel .#{s.$prefix}navbar__link {
149
+ display: flex;
150
+ width: 100%;
151
+ padding: var(--s2) var(--s3);
152
+ border-radius: var(--r-md);
153
+
154
+ &:hover {
155
+ background-color: var(--surface-raised);
156
+ }
157
+ }
158
+
159
+ // Backdrop overlay
160
+ &:has(.#{s.$prefix}navbar__panel[aria-hidden="false"])::before {
161
+ content: '';
162
+ position: fixed;
163
+ top: 0;
164
+ left: 0;
165
+ right: 0;
166
+ bottom: 0;
167
+ background: var(--overlay);
168
+ z-index: 98;
169
+ }
170
+ }
171
+
172
+ @include b.modifier('actions-visible') {
173
+ @media (max-width: #{map.get(s.$breakpoints, $navbar-collapse-bp)}) {
174
+ .#{s.$prefix}navbar__actions {
175
+ display: flex;
176
+ }
177
+ }
178
+ }
179
+
180
+ @include b.modifier('sticky') {
181
+ position: sticky;
182
+ top: 0;
183
+ }
184
+
185
+ @include b.modifier('transparent') {
186
+ --_bg: transparent;
187
+ border-bottom: 0;
188
+
189
+ &.is-stuck {
190
+ --_bg: var(--surface);
191
+ border-bottom: var(--bd1) solid var(--_border-color);
192
+ transition: background-color var(--dur-base) var(--e-standard);
193
+ }
194
+ }
195
+
196
+ @include b.modifier('bordered') {
197
+ border-bottom: var(--bd1) solid var(--_border-color);
198
+
199
+ .#{s.$prefix}navbar__inner {
200
+ min-height: calc(var(--_height) - var(--bd1));
201
+ }
202
+ }
203
+
204
+ @include b.modifier('center') {
205
+ .#{s.$prefix}navbar__nav {
206
+ justify-content: center;
207
+ }
208
+ }
209
+
210
+ @include b.modifier('compact') {
211
+ --_height: var(--s4);
212
+
213
+ .#{s.$prefix}navbar__link {
214
+ min-height: r.lines(1);
215
+ }
216
+ }
217
+
218
+ @include role.role-modifiers;
219
+ }
220
+
221
+ @media (max-width: #{map.get(s.$breakpoints, $navbar-collapse-bp)}) {
222
+ html.#{s.$prefix}navbar-open {
223
+ overflow: hidden;
224
+ }
225
+ }
226
+ }
227
+ }
@@ -0,0 +1,92 @@
1
+ @use 'sass:list';
2
+ @use '../settings' as s;
3
+ @use '../tools/bem' as b;
4
+
5
+ @if list.length(s.$blocks) == 0 or list.index(s.$blocks, 'order-summary') {
6
+ @layer blocks {
7
+ @include b.block('order-summary') {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: 0.5rem;
11
+
12
+ @include b.element('header') {
13
+ font: 600 1.125rem/1.5rem var(--f-ui);
14
+ color: var(--text);
15
+ }
16
+
17
+ @include b.element('items') {
18
+ display: flex;
19
+ flex-direction: column;
20
+ }
21
+
22
+ @include b.element('row') {
23
+ display: flex;
24
+ justify-content: space-between;
25
+ font: 400 1rem/1.5rem var(--f-ui);
26
+ color: var(--c-muted);
27
+ font-variant-numeric: tabular-nums;
28
+
29
+ > :last-child {
30
+ color: var(--text);
31
+ }
32
+ }
33
+
34
+ @include b.element('label') {
35
+ color: var(--c-muted);
36
+ }
37
+
38
+ @include b.element('value') {
39
+ color: var(--text);
40
+ font-variant-numeric: tabular-nums;
41
+ }
42
+
43
+ @include b.element('discount') {
44
+ > :last-child {
45
+ color: var(--success-text);
46
+ }
47
+ }
48
+
49
+ @include b.element('coupon') {
50
+ display: flex;
51
+ gap: var(--s2);
52
+ align-items: center;
53
+ }
54
+
55
+ @include b.element('total') {
56
+ display: flex;
57
+ justify-content: space-between;
58
+ padding-top: calc(1.5rem - var(--bd1));
59
+ border-top: var(--bd1) solid var(--border);
60
+ font: 600 1.25rem/1.5rem var(--f-ui);
61
+ font-variant-numeric: tabular-nums;
62
+ margin-bottom: 1.5rem;
63
+ }
64
+
65
+ @include b.element('note') {
66
+ font: 400 0.875rem/1.5rem var(--f-ui);
67
+ color: var(--c-subtle);
68
+ }
69
+
70
+ @include b.element('actions') {
71
+ display: flex;
72
+ flex-direction: column;
73
+ gap: var(--s2);
74
+ }
75
+
76
+ @include b.modifier('sticky') {
77
+ position: sticky;
78
+ top: var(--s3);
79
+ }
80
+
81
+ @include b.modifier('sunken') {
82
+ background-color: var(--surface-sunken);
83
+ padding: var(--s4);
84
+ border-radius: var(--r-md);
85
+ }
86
+
87
+ @include b.modifier('compact') {
88
+ gap: 0.25rem;
89
+ }
90
+ }
91
+ }
92
+ }
@@ -0,0 +1,88 @@
1
+ @use 'sass:list';
2
+ @use '../settings' as s;
3
+ @use '../tools/bem' as b;
4
+ @use '../tools/rhythm' as r;
5
+
6
+ @if list.length(s.$blocks) == 0 or list.index(s.$blocks, 'page-header') {
7
+ @layer blocks {
8
+ @include b.block('page-header') {
9
+ margin-bottom: r.lines(2);
10
+
11
+ @include b.element('breadcrumb') {
12
+ margin-bottom: var(--s2);
13
+ }
14
+
15
+ @include b.element('eyebrow') {
16
+ font: var(--t-meta-s)/var(--t-meta-lh) var(--f-mono);
17
+ text-transform: uppercase;
18
+ letter-spacing: 0.08em;
19
+ font-weight: 500;
20
+ color: var(--c-muted);
21
+ margin-bottom: var(--s1);
22
+ }
23
+
24
+ @include b.element('title') {
25
+ font: 400 var(--t-h1-s)/var(--t-h1-lh) var(--f-prose);
26
+ letter-spacing: -0.01em;
27
+ text-wrap: balance;
28
+ margin-top: 0;
29
+ }
30
+
31
+ @include b.element('lead') {
32
+ font: var(--t-lead-s)/var(--t-lead-lh) var(--f-prose);
33
+ color: var(--c-muted);
34
+ margin-top: var(--s2);
35
+ max-width: 44rem;
36
+ }
37
+
38
+ @include b.element('meta') {
39
+ margin-top: var(--s2);
40
+ }
41
+
42
+ @include b.element('actions') {
43
+ display: flex;
44
+ gap: var(--s2);
45
+ margin-top: var(--s3);
46
+ }
47
+
48
+ @include b.element('tabs') {
49
+ margin-top: var(--s3);
50
+ border-bottom: var(--bd1) solid var(--border);
51
+ }
52
+
53
+ @include b.modifier('hero') {
54
+ margin-bottom: r.lines(3);
55
+
56
+ .#{s.$prefix}page-header__title {
57
+ font-size: var(--t-display-2-s);
58
+ line-height: var(--t-display-2-lh);
59
+ }
60
+ }
61
+
62
+ @include b.modifier('compact') {
63
+ margin-bottom: r.lines(1);
64
+
65
+ .#{s.$prefix}page-header__title {
66
+ font: 600 var(--t-h3-s)/var(--t-h3-lh) var(--f-ui);
67
+ }
68
+ }
69
+
70
+ @include b.modifier('center') {
71
+ text-align: center;
72
+
73
+ .#{s.$prefix}page-header__lead {
74
+ margin-inline: auto;
75
+ }
76
+
77
+ .#{s.$prefix}page-header__actions {
78
+ justify-content: center;
79
+ }
80
+ }
81
+
82
+ @include b.modifier('bordered') {
83
+ padding-bottom: calc(#{r.lines(1)} - var(--bd1));
84
+ border-bottom: var(--bd1) solid var(--border);
85
+ }
86
+ }
87
+ }
88
+ }
@@ -0,0 +1,110 @@
1
+ @use 'sass:list';
2
+ @use '../settings' as s;
3
+ @use '../tools/bem' as b;
4
+
5
+ @if list.length(s.$blocks) == 0 or list.index(s.$blocks, 'pagination') {
6
+ @layer blocks {
7
+ @include b.block('pagination') {
8
+
9
+ @include b.element('list') {
10
+ display: flex;
11
+ gap: 0.25rem;
12
+ list-style: none;
13
+ align-items: center;
14
+ flex-wrap: wrap;
15
+ padding: 0;
16
+ margin: 0;
17
+ }
18
+
19
+ @include b.element('link') {
20
+ display: inline-grid;
21
+ place-items: center;
22
+ min-width: 2.5rem;
23
+ height: 2.5rem;
24
+ padding-inline: 0.5rem;
25
+ border-radius: var(--r-md);
26
+ font: 500 0.875rem/1.25rem var(--f-mono);
27
+ color: var(--c-muted);
28
+ text-decoration: none;
29
+
30
+ &:hover {
31
+ background: var(--surface-raised);
32
+ color: var(--text);
33
+ }
34
+
35
+ &[aria-current="page"] {
36
+ background: var(--primary-subtle);
37
+ color: var(--primary-text);
38
+ border: var(--bd1) solid var(--primary-text);
39
+ }
40
+
41
+ &[aria-disabled="true"] {
42
+ color: var(--c-subtle);
43
+ pointer-events: none;
44
+ }
45
+ }
46
+
47
+ @include b.element('ellipsis') {
48
+ color: var(--c-subtle);
49
+ padding-inline: 0.5rem;
50
+ }
51
+
52
+ @include b.element('summary') {
53
+ font: 400 0.875rem/1.25rem var(--f-ui);
54
+ color: var(--c-muted);
55
+ padding-inline: 0.5rem;
56
+ }
57
+
58
+ @include b.modifier('sm') {
59
+ .#{s.$prefix}pagination__link {
60
+ min-width: 2rem;
61
+ height: 2rem;
62
+ }
63
+ }
64
+
65
+ @include b.modifier('simple') {
66
+ .#{s.$prefix}pagination__list {
67
+ justify-content: space-between;
68
+ }
69
+
70
+ .#{s.$prefix}pagination__link {
71
+ border-radius: 0;
72
+
73
+ &:hover {
74
+ background: none;
75
+ }
76
+ }
77
+ }
78
+
79
+ @include b.modifier('compact') {
80
+ .#{s.$prefix}pagination__link {
81
+ border-radius: 0;
82
+
83
+ &:hover {
84
+ background: none;
85
+ }
86
+ }
87
+ }
88
+
89
+ @include b.modifier('text') {
90
+ .#{s.$prefix}pagination__link {
91
+ border-radius: 0;
92
+ color: var(--link);
93
+
94
+ &:hover {
95
+ background: none;
96
+ color: var(--link-hover);
97
+ text-decoration: underline;
98
+ }
99
+
100
+ &[aria-current="page"] {
101
+ background: none;
102
+ border: 0;
103
+ color: var(--text);
104
+ font-weight: 700;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ }