ds-tis 1.0.0-beta.10

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/LICENSE +49 -0
  2. package/README.md +125 -0
  3. package/css/base/forced-colors.css +62 -0
  4. package/css/base/icons.css +73 -0
  5. package/css/base/index.css +4 -0
  6. package/css/base/reset.css +80 -0
  7. package/css/base/typography.css +211 -0
  8. package/css/components/accordion.css +153 -0
  9. package/css/components/alert.css +161 -0
  10. package/css/components/avatar.css +76 -0
  11. package/css/components/badge.css +83 -0
  12. package/css/components/breadcrumb.css +58 -0
  13. package/css/components/button.css +364 -0
  14. package/css/components/card.css +159 -0
  15. package/css/components/checkbox.css +296 -0
  16. package/css/components/combobox.css +330 -0
  17. package/css/components/divider.css +20 -0
  18. package/css/components/form-field.css +137 -0
  19. package/css/components/index.css +28 -0
  20. package/css/components/input.css +356 -0
  21. package/css/components/link.css +67 -0
  22. package/css/components/menu.css +246 -0
  23. package/css/components/modal.css +236 -0
  24. package/css/components/pagination.css +132 -0
  25. package/css/components/radio.css +280 -0
  26. package/css/components/select.css +399 -0
  27. package/css/components/skeleton.css +52 -0
  28. package/css/components/spinner.css +59 -0
  29. package/css/components/tabs.css +79 -0
  30. package/css/components/textarea.css +218 -0
  31. package/css/components/toggle.css +202 -0
  32. package/css/components/tooltip.css +116 -0
  33. package/css/design-system.css +13 -0
  34. package/css/tokens/generated/component.css +720 -0
  35. package/css/tokens/generated/foundation.css +282 -0
  36. package/css/tokens/generated/index.css +5 -0
  37. package/css/tokens/generated/theme-dark.css +243 -0
  38. package/css/tokens/generated/theme-light.css +244 -0
  39. package/css/tokens/index.css +6 -0
  40. package/css/utilities/elevation.css +24 -0
  41. package/css/utilities/index.css +2 -0
  42. package/css/utilities/layout.css +132 -0
  43. package/docs/agent-consumer-usage.en.md +322 -0
  44. package/docs/agent-consumer-usage.md +294 -0
  45. package/docs/api/adrs.json +186 -0
  46. package/docs/api/components.json +2071 -0
  47. package/docs/api/consumer-context.json +66 -0
  48. package/docs/api/foundations.json +94 -0
  49. package/docs/api/tokens.json +6839 -0
  50. package/docs/llms-full.txt +23699 -0
  51. package/docs/llms.txt +109 -0
  52. package/docs/templates/contact.html +364 -0
  53. package/docs/templates/dashboard.html +318 -0
  54. package/docs/templates/index.html +232 -0
  55. package/docs/templates/login.html +286 -0
  56. package/docs/templates/settings.html +365 -0
  57. package/docs/templates/signup.html +350 -0
  58. package/js/accordion.js +192 -0
  59. package/js/combobox.js +263 -0
  60. package/js/menu.js +301 -0
  61. package/js/modal.js +256 -0
  62. package/js/package.json +3 -0
  63. package/js/tabs.js +200 -0
  64. package/js/theme/apply.js +75 -0
  65. package/js/theme/brand-contrast-audit.js +133 -0
  66. package/js/theme/color.js +149 -0
  67. package/js/theme/config-schema.js +40 -0
  68. package/js/theme/contrast.js +76 -0
  69. package/js/theme/export.js +118 -0
  70. package/js/theme/index.js +21 -0
  71. package/js/theme/overlay.js +29 -0
  72. package/js/theme/package.json +3 -0
  73. package/js/theme/palette.js +103 -0
  74. package/js/theme/radius.js +76 -0
  75. package/js/theme/semantic-mapper.js +138 -0
  76. package/js/theme/typography.js +33 -0
  77. package/js/theme/url-state.js +52 -0
  78. package/js/tooltip.js +227 -0
  79. package/package.json +139 -0
@@ -0,0 +1,246 @@
1
+ /* ============================================================
2
+ COMPONENT: Menu / Action Menu
3
+ Base para listas de comandos e composicao menu button.
4
+ ============================================================ */
5
+
6
+ .ds-menu {
7
+ --_ds-menu-min-width: var(--ds-size-layout-xs);
8
+ --_ds-menu-item-height: var(--ds-menu-item-height-md);
9
+ --_ds-menu-item-gap: var(--ds-menu-item-gap-md);
10
+ --_ds-menu-item-padding-x: var(--ds-menu-item-padding-x-md);
11
+ --_ds-menu-item-icon-size: var(--ds-menu-item-icon-size-md);
12
+ --_ds-menu-item-icon-stroke-width: var(--ds-menu-item-icon-stroke-width-md);
13
+
14
+ box-sizing: border-box;
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: var(--ds-menu-surface-gap-default);
18
+ inline-size: max-content;
19
+ min-inline-size: min(100%, var(--_ds-menu-min-width));
20
+ max-inline-size: 100%;
21
+ padding: var(--ds-menu-surface-padding-default);
22
+ margin: 0;
23
+ list-style: none;
24
+ background: var(--ds-menu-surface-bg-default);
25
+ color: var(--ds-menu-item-content-color-default);
26
+ border: var(--ds-menu-surface-border-width-default) solid var(--ds-menu-surface-border-color-default);
27
+ border-radius: var(--ds-menu-surface-radius-default);
28
+ box-shadow: var(--ds-menu-surface-shadow-default);
29
+ font-family: var(--ds-body-font-family-sans);
30
+ font-size: var(--ds-body-font-size-sm);
31
+ font-weight: var(--ds-body-font-weight-regular);
32
+ line-height: var(--ds-body-line-height-sm);
33
+ z-index: var(--ds-z-tooltip);
34
+ }
35
+
36
+ .ds-menu--sm {
37
+ --_ds-menu-min-width: var(--ds-size-5xl);
38
+ --_ds-menu-item-height: var(--ds-menu-item-height-sm);
39
+ --_ds-menu-item-gap: var(--ds-menu-item-gap-sm);
40
+ --_ds-menu-item-padding-x: var(--ds-menu-item-padding-x-sm);
41
+ --_ds-menu-item-icon-size: var(--ds-menu-item-icon-size-sm);
42
+ --_ds-menu-item-icon-stroke-width: var(--ds-menu-item-icon-stroke-width-sm);
43
+ }
44
+
45
+ .ds-menu--lg {
46
+ --_ds-menu-item-height: var(--ds-menu-item-height-lg);
47
+ --_ds-menu-item-gap: var(--ds-menu-item-gap-lg);
48
+ --_ds-menu-item-padding-x: var(--ds-menu-item-padding-x-lg);
49
+ --_ds-menu-item-icon-size: var(--ds-menu-item-icon-size-lg);
50
+ --_ds-menu-item-icon-stroke-width: var(--ds-menu-item-icon-stroke-width-lg);
51
+ }
52
+
53
+ .ds-menu--full {
54
+ inline-size: 100%;
55
+ }
56
+
57
+ .ds-menu__group {
58
+ display: flex;
59
+ flex-direction: column;
60
+ gap: var(--ds-menu-surface-gap-default);
61
+ }
62
+
63
+ .ds-menu__label {
64
+ padding: var(--ds-space-xs) var(--ds-space-md);
65
+ color: var(--ds-content-subtle);
66
+ font-size: var(--ds-body-font-size-xs);
67
+ font-weight: var(--ds-body-font-weight-semibold);
68
+ line-height: var(--ds-body-line-height-xs);
69
+ }
70
+
71
+ .ds-menu__separator {
72
+ block-size: var(--ds-menu-surface-border-width-default);
73
+ margin: var(--ds-space-xs) var(--ds-space-sm);
74
+ background: var(--ds-menu-surface-border-color-default);
75
+ }
76
+
77
+ .ds-menu__item {
78
+ box-sizing: border-box;
79
+ display: grid;
80
+ grid-template-columns: auto minmax(0, 1fr) auto;
81
+ align-items: center;
82
+ gap: var(--_ds-menu-item-gap);
83
+ min-block-size: var(--_ds-menu-item-height);
84
+ inline-size: 100%;
85
+ padding: 0 var(--_ds-menu-item-padding-x);
86
+ border: 0;
87
+ border-radius: var(--ds-menu-item-radius-default);
88
+ background: var(--ds-menu-item-bg-default);
89
+ color: var(--ds-menu-item-content-color-default);
90
+ font: inherit;
91
+ text-align: start;
92
+ text-decoration: none;
93
+ cursor: pointer;
94
+ transition: background-color var(--ds-motion-duration-fast) var(--ds-motion-ease-default),
95
+ color var(--ds-motion-duration-fast) var(--ds-motion-ease-default);
96
+ }
97
+
98
+ .ds-menu__item:hover:not([disabled]):not([aria-disabled="true"]),
99
+ .ds-menu__item[data-active="true"] {
100
+ background: var(--ds-menu-item-bg-hover-default);
101
+ color: var(--ds-menu-item-content-color-hover);
102
+ }
103
+
104
+ .ds-menu__item:focus-visible {
105
+ background: var(--ds-menu-item-bg-focused);
106
+ color: var(--ds-menu-item-content-color-focused);
107
+ outline: var(--ds-focus-ring-width) solid var(--ds-focus-ring-color-default);
108
+ outline-offset: var(--ds-focus-ring-width);
109
+ border-radius: var(--ds-menu-focus-ring-radius-default);
110
+ }
111
+
112
+ .ds-menu__item[disabled],
113
+ .ds-menu__item[aria-disabled="true"] {
114
+ background: var(--ds-menu-item-bg-disabled);
115
+ color: var(--ds-menu-item-content-color-disabled);
116
+ cursor: not-allowed;
117
+ pointer-events: none;
118
+ }
119
+
120
+ .ds-menu__item--destructive {
121
+ color: var(--ds-menu-item-content-color-destructive);
122
+ }
123
+
124
+ .ds-menu__item--destructive:hover:not([disabled]):not([aria-disabled="true"]),
125
+ .ds-menu__item--destructive[data-active="true"] {
126
+ background: var(--ds-feedback-error-background-subtle);
127
+ color: var(--ds-menu-item-content-color-destructive);
128
+ }
129
+
130
+ .ds-menu__item--destructive:focus-visible {
131
+ outline-color: var(--ds-focus-ring-color-error);
132
+ }
133
+
134
+ .ds-menu__item-label {
135
+ min-inline-size: 0;
136
+ overflow: hidden;
137
+ text-overflow: ellipsis;
138
+ white-space: nowrap;
139
+ font-weight: var(--ds-body-font-weight-medium);
140
+ }
141
+
142
+ .ds-menu__item-description {
143
+ display: block;
144
+ margin-block-start: var(--ds-space-2xs);
145
+ color: var(--ds-menu-item-meta-color-default);
146
+ font-size: var(--ds-body-font-size-xs);
147
+ font-weight: var(--ds-body-font-weight-regular);
148
+ line-height: var(--ds-body-line-height-xs);
149
+ white-space: normal;
150
+ }
151
+
152
+ .ds-menu__item:hover:not([disabled]):not([aria-disabled="true"]) .ds-menu__item-description,
153
+ .ds-menu__item[data-active="true"] .ds-menu__item-description {
154
+ color: var(--ds-menu-item-content-color-default);
155
+ }
156
+
157
+ .ds-menu__icon,
158
+ .ds-menu__check {
159
+ inline-size: var(--_ds-menu-item-icon-size);
160
+ block-size: var(--_ds-menu-item-icon-size);
161
+ flex-shrink: 0;
162
+ color: var(--ds-menu-item-icon-color-default);
163
+ fill: none;
164
+ stroke: currentColor;
165
+ stroke-width: var(--_ds-menu-item-icon-stroke-width);
166
+ }
167
+
168
+ .ds-menu__shortcut {
169
+ justify-self: end;
170
+ color: var(--ds-menu-item-meta-color-default);
171
+ font-size: var(--ds-body-font-size-xs);
172
+ line-height: var(--ds-body-line-height-xs);
173
+ }
174
+
175
+ .ds-menu__item:hover:not([disabled]):not([aria-disabled="true"]) .ds-menu__shortcut,
176
+ .ds-menu__item[data-active="true"] .ds-menu__shortcut {
177
+ color: var(--ds-menu-item-content-color-default);
178
+ }
179
+
180
+ .ds-menu__item[disabled] .ds-menu__icon,
181
+ .ds-menu__item[aria-disabled="true"] .ds-menu__icon,
182
+ .ds-menu__item[disabled] .ds-menu__check,
183
+ .ds-menu__item[aria-disabled="true"] .ds-menu__check {
184
+ color: var(--ds-menu-item-icon-color-disabled);
185
+ }
186
+
187
+ .ds-menu__item[disabled] .ds-menu__shortcut,
188
+ .ds-menu__item[aria-disabled="true"] .ds-menu__shortcut,
189
+ .ds-menu__item[disabled] .ds-menu__item-description,
190
+ .ds-menu__item[aria-disabled="true"] .ds-menu__item-description {
191
+ color: var(--ds-menu-item-meta-color-disabled);
192
+ }
193
+
194
+ .ds-menu__item--destructive .ds-menu__icon,
195
+ .ds-menu__item--destructive .ds-menu__check {
196
+ color: var(--ds-menu-item-icon-color-destructive);
197
+ }
198
+
199
+ .ds-menu__item--destructive .ds-menu__shortcut,
200
+ .ds-menu__item--destructive .ds-menu__item-description {
201
+ color: var(--ds-menu-item-meta-color-destructive);
202
+ }
203
+
204
+ .ds-menu__check {
205
+ visibility: hidden;
206
+ }
207
+
208
+ .ds-menu__item[aria-checked="true"] .ds-menu__check {
209
+ visibility: visible;
210
+ }
211
+
212
+ .ds-action-menu {
213
+ position: relative;
214
+ display: inline-block;
215
+ }
216
+
217
+ .ds-action-menu__content {
218
+ position: absolute;
219
+ inset-block-start: calc(100% + var(--ds-action-menu-overlay-gap-default));
220
+ inset-inline-end: 0;
221
+ visibility: hidden;
222
+ opacity: 0;
223
+ transform: translateY(calc(-1 * var(--ds-action-menu-overlay-gap-default)));
224
+ transition: opacity var(--ds-motion-duration-fast) var(--ds-motion-ease-default),
225
+ transform var(--ds-motion-duration-fast) var(--ds-motion-ease-default),
226
+ visibility var(--ds-motion-duration-fast) var(--ds-motion-ease-default);
227
+ }
228
+
229
+ .ds-action-menu[data-open="true"] .ds-action-menu__content,
230
+ .ds-action-menu__trigger[aria-expanded="true"] + .ds-action-menu__content {
231
+ visibility: visible;
232
+ opacity: 1;
233
+ transform: translateY(0);
234
+ }
235
+
236
+ .ds-action-menu--start .ds-action-menu__content {
237
+ inset-inline-end: auto;
238
+ inset-inline-start: 0;
239
+ }
240
+
241
+ @media (prefers-reduced-motion: reduce) {
242
+ .ds-menu__item,
243
+ .ds-action-menu__content {
244
+ transition: none;
245
+ }
246
+ }
@@ -0,0 +1,236 @@
1
+ /* ============================================================
2
+ COMPONENT: Modal / Dialog
3
+ ============================================================ */
4
+
5
+ /* Overlay */
6
+ .ds-modal-overlay {
7
+ position: fixed;
8
+ inset: 0;
9
+ background-color: var(--ds-modal-overlay-bg-default);
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ z-index: var(--ds-modal-overlay-z-index-default);
14
+ padding: var(--ds-modal-overlay-padding-default);
15
+ }
16
+
17
+ /* display:flex acima vence o [hidden] do UA sem !important — consumers
18
+ que usam o atributo hidden precisam desta regra explícita. */
19
+ .ds-modal-overlay[hidden] {
20
+ display: none;
21
+ }
22
+
23
+ /* Dialog */
24
+ .ds-modal {
25
+ --_ds-modal-focus-ring-bleed: calc(var(--ds-focus-ring-width) * 2);
26
+
27
+ background-color: var(--ds-modal-bg-default);
28
+ border-radius: var(--ds-modal-radius-default);
29
+ box-shadow: var(--ds-modal-shadow-default);
30
+ width: 100%;
31
+ max-height: calc(100vh - var(--ds-space-section-sm));
32
+ padding: var(--ds-modal-container-padding-sm);
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: var(--ds-modal-container-gap-sm);
36
+ overflow: visible;
37
+ }
38
+
39
+ /* Sizes */
40
+ .ds-modal--sm { max-width: var(--ds-modal-max-width-sm); }
41
+ .ds-modal--md {
42
+ max-width: var(--ds-modal-max-width-md);
43
+ padding: var(--ds-modal-container-padding-md);
44
+ gap: var(--ds-modal-container-gap-md);
45
+ }
46
+
47
+ .ds-modal--lg {
48
+ max-width: var(--ds-modal-max-width-lg);
49
+ padding: var(--ds-modal-container-padding-lg);
50
+ gap: var(--ds-modal-container-gap-lg);
51
+ }
52
+
53
+ /* Header */
54
+ .ds-modal__header {
55
+ position: relative;
56
+ display: flex;
57
+ align-items: flex-start;
58
+ justify-content: space-between;
59
+ gap: var(--ds-modal-header-gap-default);
60
+ }
61
+
62
+ .ds-modal__heading {
63
+ min-width: 0;
64
+ flex: 1;
65
+ display: flex;
66
+ flex-direction: column;
67
+ gap: var(--ds-modal-heading-gap-default);
68
+ padding-right: calc(var(--ds-modal-close-size-sm) + var(--ds-modal-header-gap-default));
69
+ }
70
+
71
+ .ds-modal--md .ds-modal__heading {
72
+ padding-right: calc(var(--ds-modal-close-size-md) + var(--ds-modal-header-gap-default));
73
+ }
74
+
75
+ .ds-modal--lg .ds-modal__heading {
76
+ padding-right: calc(var(--ds-modal-close-size-lg) + var(--ds-modal-header-gap-default));
77
+ }
78
+
79
+ .ds-modal__title {
80
+ margin: 0;
81
+ font-size: var(--ds-body-font-size-xl);
82
+ font-weight: var(--ds-body-font-weight-semibold);
83
+ color: var(--ds-modal-title-color-default);
84
+ line-height: var(--ds-body-line-height-xl);
85
+ letter-spacing: var(--ds-body-letter-spacing-normal);
86
+ padding-right: calc(var(--ds-modal-close-size-sm) + var(--ds-modal-header-gap-default));
87
+ }
88
+
89
+ .ds-modal__heading .ds-modal__title {
90
+ padding-right: 0;
91
+ }
92
+
93
+ .ds-modal--md .ds-modal__title {
94
+ font-size: var(--ds-body-font-size-2xl);
95
+ line-height: var(--ds-body-line-height-2xl);
96
+ letter-spacing: var(--ds-body-letter-spacing-normal);
97
+ padding-right: calc(var(--ds-modal-close-size-md) + var(--ds-modal-header-gap-default));
98
+ }
99
+
100
+ .ds-modal--lg .ds-modal__title {
101
+ font-size: var(--ds-body-font-size-3xl);
102
+ line-height: var(--ds-body-line-height-3xl);
103
+ letter-spacing: var(--ds-body-letter-spacing-tight);
104
+ padding-right: calc(var(--ds-modal-close-size-lg) + var(--ds-modal-header-gap-default));
105
+ }
106
+
107
+ .ds-modal--md .ds-modal__heading .ds-modal__title,
108
+ .ds-modal--lg .ds-modal__heading .ds-modal__title {
109
+ padding-right: 0;
110
+ }
111
+
112
+ .ds-modal__description {
113
+ margin: 0;
114
+ color: var(--ds-modal-description-color-default);
115
+ font-size: var(--ds-body-font-size-sm);
116
+ font-weight: var(--ds-body-font-weight-regular);
117
+ line-height: var(--ds-body-line-height-sm);
118
+ }
119
+
120
+ .ds-modal--md .ds-modal__description {
121
+ font-size: var(--ds-body-font-size-sm);
122
+ line-height: var(--ds-body-line-height-sm);
123
+ }
124
+
125
+ .ds-modal--lg .ds-modal__description {
126
+ font-size: var(--ds-body-font-size-md);
127
+ line-height: var(--ds-body-line-height-md);
128
+ }
129
+
130
+ .ds-modal__close {
131
+ position: absolute;
132
+ top: calc(var(--ds-space-sm) - var(--ds-modal-container-padding-sm));
133
+ right: calc(var(--ds-space-sm) - var(--ds-modal-container-padding-sm));
134
+ flex-shrink: 0;
135
+ width: var(--ds-modal-close-size-sm);
136
+ height: var(--ds-modal-close-size-sm);
137
+ background: none;
138
+ border: none;
139
+ padding: var(--ds-modal-close-padding-sm);
140
+ cursor: pointer;
141
+ color: var(--ds-modal-close-color-default);
142
+ border-radius: var(--ds-radius-sm);
143
+ display: inline-flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ transition: color var(--ds-motion-duration-fast) var(--ds-motion-ease-default);
147
+ }
148
+
149
+ .ds-modal__close .ds-icon {
150
+ width: var(--ds-modal-close-icon-size-sm);
151
+ height: var(--ds-modal-close-icon-size-sm);
152
+ color: currentColor;
153
+ stroke-width: var(--ds-modal-close-icon-stroke-width-default);
154
+ }
155
+
156
+ .ds-modal--md .ds-modal__close {
157
+ top: calc(var(--ds-space-sm) - var(--ds-modal-container-padding-md));
158
+ right: calc(var(--ds-space-sm) - var(--ds-modal-container-padding-md));
159
+ width: var(--ds-modal-close-size-md);
160
+ height: var(--ds-modal-close-size-md);
161
+ padding: var(--ds-modal-close-padding-md);
162
+ }
163
+
164
+ .ds-modal--md .ds-modal__close .ds-icon {
165
+ width: var(--ds-modal-close-icon-size-md);
166
+ height: var(--ds-modal-close-icon-size-md);
167
+ }
168
+
169
+ .ds-modal--lg .ds-modal__close {
170
+ top: calc(var(--ds-space-sm) - var(--ds-modal-container-padding-lg));
171
+ right: calc(var(--ds-space-sm) - var(--ds-modal-container-padding-lg));
172
+ width: var(--ds-modal-close-size-lg);
173
+ height: var(--ds-modal-close-size-lg);
174
+ padding: var(--ds-modal-close-padding-lg);
175
+ }
176
+
177
+ .ds-modal--lg .ds-modal__close .ds-icon {
178
+ width: var(--ds-modal-close-icon-size-lg);
179
+ height: var(--ds-modal-close-icon-size-lg);
180
+ }
181
+
182
+ .ds-modal__close:hover {
183
+ color: var(--ds-content-strong);
184
+ }
185
+
186
+ .ds-modal__close:focus-visible {
187
+ outline: var(--ds-focus-ring-width) solid var(--ds-focus-ring-color-default);
188
+ outline-offset: var(--ds-focus-ring-width);
189
+ }
190
+
191
+ /* Body — escala por size do modal (espelha Figma):
192
+ sm → font-size sm + line-height sm
193
+ md → font-size md + line-height md
194
+ lg → font-size lg + line-height xl */
195
+ .ds-modal__body {
196
+ overflow-y: auto;
197
+ margin: calc(var(--_ds-modal-focus-ring-bleed) * -1);
198
+ padding: var(--_ds-modal-focus-ring-bleed);
199
+ color: var(--ds-modal-body-color-default);
200
+ font-size: var(--ds-body-font-size-sm);
201
+ font-weight: var(--ds-body-font-weight-regular);
202
+ line-height: var(--ds-body-line-height-sm);
203
+ }
204
+
205
+ .ds-modal--md .ds-modal__body {
206
+ font-size: var(--ds-body-font-size-md);
207
+ line-height: var(--ds-body-line-height-md);
208
+ }
209
+
210
+ .ds-modal--lg .ds-modal__body {
211
+ font-size: var(--ds-body-font-size-lg);
212
+ line-height: var(--ds-body-line-height-xl);
213
+ }
214
+
215
+ /* Footer */
216
+ .ds-modal__footer {
217
+ display: flex;
218
+ justify-content: flex-end;
219
+ gap: var(--ds-modal-footer-gap-sm);
220
+ /* Figma: footer não tem divider/border-top. */
221
+ }
222
+
223
+ .ds-modal--md .ds-modal__footer {
224
+ gap: var(--ds-modal-footer-gap-md);
225
+ }
226
+
227
+ .ds-modal--lg .ds-modal__footer {
228
+ gap: var(--ds-modal-footer-gap-lg);
229
+ }
230
+
231
+ /* ---------------------------------------------------------
232
+ Reduced motion
233
+ --------------------------------------------------------- */
234
+ @media (prefers-reduced-motion: reduce) {
235
+ .ds-modal__close { transition: none; }
236
+ }
@@ -0,0 +1,132 @@
1
+ /* ==========================================================================
2
+ Pagination
3
+ ========================================================================== */
4
+
5
+ .ds-pagination {
6
+ display: flex;
7
+ align-items: center;
8
+ gap: var(--ds-pagination-gap-default);
9
+ }
10
+
11
+ .ds-pagination__list {
12
+ display: flex;
13
+ align-items: center;
14
+ gap: var(--ds-pagination-gap-default);
15
+ margin: 0;
16
+ padding: 0;
17
+ list-style: none;
18
+ }
19
+
20
+ .ds-pagination__item {
21
+ display: flex;
22
+ align-items: center;
23
+ }
24
+
25
+ /* Page number
26
+ ========================================================================== */
27
+
28
+ .ds-pagination__page {
29
+ position: relative;
30
+ display: inline-flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ box-sizing: border-box;
34
+ min-width: var(--ds-pagination-item-min-width-md);
35
+ height: var(--ds-pagination-item-height-md);
36
+ padding: 0 var(--ds-space-2xs);
37
+ border: none;
38
+ border-radius: var(--ds-pagination-item-radius-default);
39
+ background: var(--ds-pagination-item-bg-default);
40
+ color: var(--ds-pagination-item-content-color-default);
41
+ font-family: var(--ds-pagination-item-font-family-default);
42
+ font-size: var(--ds-pagination-item-font-size-md);
43
+ font-weight: var(--ds-pagination-item-font-weight-default);
44
+ line-height: var(--ds-pagination-item-line-height-md);
45
+ text-decoration: none;
46
+ cursor: pointer;
47
+ transition:
48
+ background-color var(--ds-motion-duration-fast) var(--ds-motion-ease-default),
49
+ color var(--ds-motion-duration-fast) var(--ds-motion-ease-default);
50
+ }
51
+
52
+ a.ds-pagination__page:hover:not(.ds-pagination__page--current):not(:disabled):not([aria-disabled="true"]) {
53
+ background: var(--ds-pagination-item-bg-hover);
54
+ color: var(--ds-pagination-item-content-color-hover);
55
+ }
56
+
57
+ .ds-pagination__page--current {
58
+ background: var(--ds-pagination-item-bg-current);
59
+ color: var(--ds-pagination-item-content-color-current);
60
+ font-weight: var(--ds-pagination-item-font-weight-current);
61
+ cursor: default;
62
+ pointer-events: none;
63
+ }
64
+
65
+ .ds-pagination__page:disabled,
66
+ .ds-pagination__page[aria-disabled="true"] {
67
+ background: var(--ds-pagination-item-bg-disabled);
68
+ color: var(--ds-pagination-item-content-color-disabled);
69
+ cursor: not-allowed;
70
+ pointer-events: none;
71
+ }
72
+
73
+ .ds-pagination__page:focus-visible {
74
+ outline: none;
75
+ }
76
+
77
+ .ds-pagination__page:focus-visible::after {
78
+ content: "";
79
+ position: absolute;
80
+ inset: calc(var(--ds-focus-ring-width) * -1);
81
+ box-sizing: border-box;
82
+ border: var(--ds-focus-ring-width) solid var(--ds-focus-ring-color-default);
83
+ border-radius: var(--ds-pagination-focus-ring-radius-default);
84
+ pointer-events: none;
85
+ }
86
+
87
+ /* Ellipsis (non-interactive)
88
+ ========================================================================== */
89
+
90
+ .ds-pagination__ellipsis {
91
+ display: inline-flex;
92
+ align-items: center;
93
+ justify-content: center;
94
+ min-width: var(--ds-pagination-item-min-width-md);
95
+ height: var(--ds-pagination-item-height-md);
96
+ color: var(--ds-pagination-icon-color-default);
97
+ pointer-events: none;
98
+ }
99
+
100
+ .ds-pagination__ellipsis .ds-icon {
101
+ width: var(--ds-pagination-icon-size-sm);
102
+ height: var(--ds-pagination-icon-size-sm);
103
+ stroke-width: var(--ds-pagination-icon-stroke-width-sm);
104
+ }
105
+
106
+ /* Sizes
107
+ ========================================================================== */
108
+
109
+ .ds-pagination--sm .ds-pagination__page,
110
+ .ds-pagination--sm .ds-pagination__ellipsis {
111
+ min-width: var(--ds-pagination-item-min-width-sm);
112
+ height: var(--ds-pagination-item-height-sm);
113
+ font-size: var(--ds-pagination-item-font-size-sm);
114
+ line-height: var(--ds-pagination-item-line-height-sm);
115
+ }
116
+
117
+ .ds-pagination--lg .ds-pagination__page,
118
+ .ds-pagination--lg .ds-pagination__ellipsis {
119
+ min-width: var(--ds-pagination-item-min-width-lg);
120
+ height: var(--ds-pagination-item-height-lg);
121
+ font-size: var(--ds-pagination-item-font-size-lg);
122
+ line-height: var(--ds-pagination-item-line-height-lg);
123
+ }
124
+
125
+ /* Reduced motion
126
+ ========================================================================== */
127
+
128
+ @media (prefers-reduced-motion: reduce) {
129
+ .ds-pagination__page {
130
+ transition: none;
131
+ }
132
+ }