@stackoverflow/stacks 1.0.0 → 1.2.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 (74) hide show
  1. package/README.md +47 -47
  2. package/dist/controllers/s-popover.d.ts +11 -2
  3. package/dist/css/stacks.css +257 -8
  4. package/dist/css/stacks.min.css +1 -1
  5. package/dist/js/stacks.js +18 -2
  6. package/dist/js/stacks.min.js +1 -1
  7. package/lib/css/atomic/borders.less +378 -378
  8. package/lib/css/atomic/colors.less +209 -209
  9. package/lib/css/atomic/flex.less +375 -375
  10. package/lib/css/atomic/grid.less +174 -174
  11. package/lib/css/atomic/misc.less +343 -343
  12. package/lib/css/atomic/spacing.less +342 -314
  13. package/lib/css/atomic/typography.less +273 -273
  14. package/lib/css/atomic/width-height.less +194 -194
  15. package/lib/css/base/body.less +44 -44
  16. package/lib/css/base/configuration-static.less +61 -61
  17. package/lib/css/base/icons.less +20 -20
  18. package/lib/css/base/internals.less +220 -220
  19. package/lib/css/base/reset-meyer.less +64 -64
  20. package/lib/css/base/reset-normalize.less +449 -449
  21. package/lib/css/base/reset.less +20 -20
  22. package/lib/css/components/activity-indicator.less +44 -45
  23. package/lib/css/components/avatars.less +189 -189
  24. package/lib/css/components/badges.less +254 -209
  25. package/lib/css/components/banners.less +80 -80
  26. package/lib/css/components/blank-states.less +26 -26
  27. package/lib/css/components/breadcrumbs.less +44 -44
  28. package/lib/css/components/button-groups.less +104 -104
  29. package/lib/css/components/buttons.less +665 -665
  30. package/lib/css/components/cards.less +44 -44
  31. package/lib/css/components/code-blocks.less +130 -130
  32. package/lib/css/components/collapsible.less +104 -104
  33. package/lib/css/components/inputs.less +728 -728
  34. package/lib/css/components/link-previews.less +136 -136
  35. package/lib/css/components/links.less +218 -218
  36. package/lib/css/components/menu.less +47 -47
  37. package/lib/css/components/modals.less +133 -133
  38. package/lib/css/components/navigation.less +146 -146
  39. package/lib/css/components/notices.less +233 -233
  40. package/lib/css/components/page-titles.less +60 -60
  41. package/lib/css/components/pagination.less +55 -55
  42. package/lib/css/components/popovers.less +197 -197
  43. package/lib/css/components/post-summary.less +436 -425
  44. package/lib/css/components/progress-bars.less +330 -330
  45. package/lib/css/components/prose.less +503 -503
  46. package/lib/css/components/spinner.less +107 -107
  47. package/lib/css/components/tables.less +341 -341
  48. package/lib/css/components/tags.less +236 -236
  49. package/lib/css/components/toggle-switches.less +144 -144
  50. package/lib/css/components/topbar.less +427 -427
  51. package/lib/css/components/uploader.less +210 -210
  52. package/lib/css/components/user-cards.less +169 -169
  53. package/lib/css/components/widget-dynamic.less +33 -33
  54. package/lib/css/components/widget-static.less +273 -273
  55. package/lib/css/exports/constants-colors.less +1092 -1092
  56. package/lib/css/exports/constants-helpers.less +108 -108
  57. package/lib/css/exports/constants-type.less +153 -153
  58. package/lib/css/exports/exports.less +15 -15
  59. package/lib/css/exports/mixins.less +237 -237
  60. package/lib/css/stacks-dynamic.less +35 -35
  61. package/lib/css/stacks-static.less +86 -86
  62. package/lib/css/stacks.less +13 -13
  63. package/lib/ts/controllers/index.ts +7 -7
  64. package/lib/ts/controllers/s-expandable-control.ts +188 -188
  65. package/lib/ts/controllers/s-modal.ts +321 -321
  66. package/lib/ts/controllers/s-navigation-tablist.ts +117 -117
  67. package/lib/ts/controllers/s-popover.ts +567 -547
  68. package/lib/ts/controllers/s-table.ts +220 -220
  69. package/lib/ts/controllers/s-tooltip.ts +246 -246
  70. package/lib/ts/controllers/s-uploader.ts +172 -172
  71. package/lib/ts/index.ts +20 -20
  72. package/lib/ts/stacks.ts +88 -88
  73. package/lib/tsconfig.json +13 -13
  74. package/package.json +86 -87
@@ -1,210 +1,210 @@
1
- //
2
- // STACK OVERFLOW
3
- // FILE UPLOAD -- DYNAMIC PARTS
4
- //
5
- // This CSS comes from Stacks, our CSS & Pattern library for rapidly building
6
- // Stack Overflow. For documentation of all these classes and how to contribute,
7
- // visit https://stackoverflow.design/
8
-
9
- .s-uploader {
10
- align-items: center;
11
- background-color: var(--black-025);
12
- border-radius: var(--br-lg);
13
- display: flex;
14
- min-height: var(--su-static128);
15
- justify-content: center;
16
- padding: var(--su8) var(--su16);
17
- position: relative;
18
- text-align: center;
19
-
20
- // Add the dashed border as an SVG background mask
21
- &:before {
22
- --s-uploader-background-image: url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='5' ry='5' stroke='%23000000' stroke-width='8' stroke-dasharray='7%2c 22' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e");
23
- content: '';
24
- display: block;
25
- position: absolute;
26
- top: 0;
27
- left: 0;
28
- right: 0;
29
- bottom: 0;
30
- background-color: var(--black-150);
31
- -webkit-mask-image: var(--s-uploader-background-image);
32
- mask-image: var(--s-uploader-background-image);
33
- border-radius: var(--br-lg);
34
-
35
- .highcontrast-mode({
36
- background-color: var(--black-400);
37
- });
38
- }
39
-
40
- &.has-error {
41
- background-color: var(--red-050);
42
-
43
- &:before {
44
- background-color: var(--red-400);
45
-
46
- .highcontrast-mode({
47
- background-color: var(--red-400);
48
- });
49
- }
50
-
51
- .s-link {
52
- color: var(--red-900);
53
- }
54
- }
55
-
56
- &.has-success {
57
- background-color: var(--green-025);
58
-
59
- &:before {
60
- background-color: var(--green-400);
61
-
62
- .highcontrast-mode({
63
- background-color: var(--green-400);
64
- });
65
- }
66
-
67
- .s-link {
68
- color: var(--green-900);
69
- }
70
- }
71
-
72
- &.has-warning {
73
- background-color: var(--yellow-050);
74
-
75
- &:before {
76
- background-color: var(--yellow-400);
77
-
78
- .highcontrast-mode({
79
- background-color: var(--yellow-400);
80
- });
81
- }
82
-
83
- .s-link {
84
- color: var(--yellow-900);
85
- }
86
- }
87
-
88
- &.is-active {
89
- background-color: var(--black-050);
90
-
91
- &:before {
92
- background-color: var(--black-200);
93
-
94
- .highcontrast-mode({
95
- background-color: var(--black);
96
- });
97
- }
98
- }
99
-
100
- &.is-disabled {
101
- opacity: 0.5;
102
- }
103
-
104
- // This is to for safari shadow DOM
105
- // see https://github.com/StackExchange/Stacks/pull/690#issuecomment-861028193
106
- input[type="file"]::file-selector-button {
107
- cursor: pointer;
108
- }
109
-
110
- .s-uploader--input {
111
- cursor: pointer;
112
- height: 100%;
113
- inset: 0;
114
- opacity: 0;
115
- position: absolute;
116
- width: 100%;
117
-
118
- &:focus:focus-visible + .s-uploader--container {
119
- background-color: var(--black-050);
120
- box-shadow: 0 0 0 var(--su-static4) var(--focus-ring);
121
- }
122
- }
123
-
124
- .s-uploader--preview {
125
- max-width: 100%;
126
- pointer-events: none;
127
- }
128
-
129
- .s-uploader--preview-thumbnail {
130
- background-color: var(--white);
131
- border-radius: var(--br-sm);
132
- box-shadow: var(--bs-md);
133
- max-height: var(--su-static128);
134
- max-width: 100%;
135
- overflow: hidden;
136
- text-overflow: ellipsis;
137
- white-space: nowrap;
138
-
139
- .highcontrast-mode({ border: 1px solid var(--black); });
140
-
141
- &:is(img) {
142
- object-fit: scale-down;
143
- object-position: center;
144
- }
145
-
146
- &:not(img) {
147
- padding: var(--su16);
148
- }
149
- }
150
-
151
- .s-uploader--previews {
152
- max-width: 100%;
153
- text-align: left;
154
-
155
- &.has-multiple {
156
- display: block;
157
- height: auto;
158
- padding: var(--su8) var(--su2);
159
- width: 100%;
160
-
161
- .s-uploader--preview {
162
- align-items: center;
163
- display: flex;
164
- padding: var(--su6) 0;
165
- width: 100%;
166
-
167
- &:after {
168
- content: attr(data-filename);
169
- display: block;
170
- margin-left: var(--su12);
171
- max-width: 100%;
172
- overflow: hidden;
173
- text-overflow: ellipsis;
174
- white-space: nowrap;
175
- }
176
- }
177
-
178
- .s-uploader--preview-thumbnail {
179
- color: transparent;
180
- height: var(--su-static32);
181
- flex-shrink: 0;
182
- width: var(--su-static32);
183
-
184
- &:is(img) {
185
- object-fit: cover;
186
- }
187
- &:not(img) {
188
- --s-uploader--preview-document-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' fill='%23535A60' width='18' height='18' viewBox='0 0 18 18'%3E%3Cpath d='M3 3a2 2 0 012-2h6l4 4v10a2 2 0 01-2 2H5a2 2 0 01-2-2V3zm7-1.5V6h4.5L10 1.5z'%3E%3C/path%3E%3C/svg%3E");
189
- background-image: var(--s-uploader--preview-document-icon);
190
- background-position: center;
191
- background-repeat: no-repeat;
192
- }
193
- }
194
- }
195
- }
196
-
197
- .s-uploader--previews-heading {
198
- color: var(--black-900);
199
- font-size: var(--fs-body2);
200
- font-weight: 600;
201
- padding-bottom: var(--su8);
202
- }
203
-
204
- .s-uploader--reset {
205
- position: absolute;
206
- right: var(--su8);
207
- top: var(--su8);
208
- z-index: var(--zi-active);
209
- }
210
- }
1
+ //
2
+ // STACK OVERFLOW
3
+ // FILE UPLOAD -- DYNAMIC PARTS
4
+ //
5
+ // This CSS comes from Stacks, our CSS & Pattern library for rapidly building
6
+ // Stack Overflow. For documentation of all these classes and how to contribute,
7
+ // visit https://stackoverflow.design/
8
+
9
+ .s-uploader {
10
+ align-items: center;
11
+ background-color: var(--black-025);
12
+ border-radius: var(--br-lg);
13
+ display: flex;
14
+ min-height: var(--su-static128);
15
+ justify-content: center;
16
+ padding: var(--su8) var(--su16);
17
+ position: relative;
18
+ text-align: center;
19
+
20
+ // Add the dashed border as an SVG background mask
21
+ &:before {
22
+ --s-uploader-background-image: url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='5' ry='5' stroke='%23000000' stroke-width='8' stroke-dasharray='7%2c 22' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e");
23
+ content: '';
24
+ display: block;
25
+ position: absolute;
26
+ top: 0;
27
+ left: 0;
28
+ right: 0;
29
+ bottom: 0;
30
+ background-color: var(--black-150);
31
+ -webkit-mask-image: var(--s-uploader-background-image);
32
+ mask-image: var(--s-uploader-background-image);
33
+ border-radius: var(--br-lg);
34
+
35
+ .highcontrast-mode({
36
+ background-color: var(--black-400);
37
+ });
38
+ }
39
+
40
+ &.has-error {
41
+ background-color: var(--red-050);
42
+
43
+ &:before {
44
+ background-color: var(--red-400);
45
+
46
+ .highcontrast-mode({
47
+ background-color: var(--red-400);
48
+ });
49
+ }
50
+
51
+ .s-link {
52
+ color: var(--red-900);
53
+ }
54
+ }
55
+
56
+ &.has-success {
57
+ background-color: var(--green-025);
58
+
59
+ &:before {
60
+ background-color: var(--green-400);
61
+
62
+ .highcontrast-mode({
63
+ background-color: var(--green-400);
64
+ });
65
+ }
66
+
67
+ .s-link {
68
+ color: var(--green-900);
69
+ }
70
+ }
71
+
72
+ &.has-warning {
73
+ background-color: var(--yellow-050);
74
+
75
+ &:before {
76
+ background-color: var(--yellow-400);
77
+
78
+ .highcontrast-mode({
79
+ background-color: var(--yellow-400);
80
+ });
81
+ }
82
+
83
+ .s-link {
84
+ color: var(--yellow-900);
85
+ }
86
+ }
87
+
88
+ &.is-active {
89
+ background-color: var(--black-050);
90
+
91
+ &:before {
92
+ background-color: var(--black-200);
93
+
94
+ .highcontrast-mode({
95
+ background-color: var(--black);
96
+ });
97
+ }
98
+ }
99
+
100
+ &.is-disabled {
101
+ opacity: 0.5;
102
+ }
103
+
104
+ // This is to for safari shadow DOM
105
+ // see https://github.com/StackExchange/Stacks/pull/690#issuecomment-861028193
106
+ input[type="file"]::file-selector-button {
107
+ cursor: pointer;
108
+ }
109
+
110
+ .s-uploader--input {
111
+ cursor: pointer;
112
+ height: 100%;
113
+ inset: 0;
114
+ opacity: 0;
115
+ position: absolute;
116
+ width: 100%;
117
+
118
+ &:focus:focus-visible + .s-uploader--container {
119
+ background-color: var(--black-050);
120
+ box-shadow: 0 0 0 var(--su-static4) var(--focus-ring);
121
+ }
122
+ }
123
+
124
+ .s-uploader--preview {
125
+ max-width: 100%;
126
+ pointer-events: none;
127
+ }
128
+
129
+ .s-uploader--preview-thumbnail {
130
+ background-color: var(--white);
131
+ border-radius: var(--br-sm);
132
+ box-shadow: var(--bs-md);
133
+ max-height: var(--su-static128);
134
+ max-width: 100%;
135
+ overflow: hidden;
136
+ text-overflow: ellipsis;
137
+ white-space: nowrap;
138
+
139
+ .highcontrast-mode({ border: 1px solid var(--black); });
140
+
141
+ &:is(img) {
142
+ object-fit: scale-down;
143
+ object-position: center;
144
+ }
145
+
146
+ &:not(img) {
147
+ padding: var(--su16);
148
+ }
149
+ }
150
+
151
+ .s-uploader--previews {
152
+ max-width: 100%;
153
+ text-align: left;
154
+
155
+ &.has-multiple {
156
+ display: block;
157
+ height: auto;
158
+ padding: var(--su8) var(--su2);
159
+ width: 100%;
160
+
161
+ .s-uploader--preview {
162
+ align-items: center;
163
+ display: flex;
164
+ padding: var(--su6) 0;
165
+ width: 100%;
166
+
167
+ &:after {
168
+ content: attr(data-filename);
169
+ display: block;
170
+ margin-left: var(--su12);
171
+ max-width: 100%;
172
+ overflow: hidden;
173
+ text-overflow: ellipsis;
174
+ white-space: nowrap;
175
+ }
176
+ }
177
+
178
+ .s-uploader--preview-thumbnail {
179
+ color: transparent;
180
+ height: var(--su-static32);
181
+ flex-shrink: 0;
182
+ width: var(--su-static32);
183
+
184
+ &:is(img) {
185
+ object-fit: cover;
186
+ }
187
+ &:not(img) {
188
+ --s-uploader--preview-document-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' fill='%23535A60' width='18' height='18' viewBox='0 0 18 18'%3E%3Cpath d='M3 3a2 2 0 012-2h6l4 4v10a2 2 0 01-2 2H5a2 2 0 01-2-2V3zm7-1.5V6h4.5L10 1.5z'%3E%3C/path%3E%3C/svg%3E");
189
+ background-image: var(--s-uploader--preview-document-icon);
190
+ background-position: center;
191
+ background-repeat: no-repeat;
192
+ }
193
+ }
194
+ }
195
+ }
196
+
197
+ .s-uploader--previews-heading {
198
+ color: var(--black-900);
199
+ font-size: var(--fs-body2);
200
+ font-weight: 600;
201
+ padding-bottom: var(--su8);
202
+ }
203
+
204
+ .s-uploader--reset {
205
+ position: absolute;
206
+ right: var(--su8);
207
+ top: var(--su8);
208
+ z-index: var(--zi-active);
209
+ }
210
+ }