@bgord/design 0.28.0 → 0.29.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.
- package/dist/main.css +2018 -2005
- package/dist/main.min.css +1 -1
- package/dist/main.min.css.br +0 -0
- package/dist/main.min.css.gz +0 -0
- package/dist/normalize.css +20 -25
- package/dist/normalize.min.css +1 -1
- package/dist/normalize.min.css.br +0 -0
- package/dist/normalize.min.css.gz +0 -0
- package/package.json +28 -49
- package/src/generate-css.ts +25 -168
- package/src/generator.ts +4 -69
- package/src/{axis-placements-generator.ts → generators/axis-placements-generator.ts} +13 -19
- package/src/generators/backdrops-generator.ts +18 -0
- package/src/{backgrounds-generator.ts → generators/backgrounds-generator.ts} +8 -8
- package/src/{border-colors-generator.ts → generators/border-colors-generator.ts} +11 -11
- package/src/generators/border-radiuses-generator.ts +17 -0
- package/src/{border-widths-generator.ts → generators/border-widths-generator.ts} +11 -15
- package/src/generators/cursors-generator.ts +28 -0
- package/src/{displays-generator.ts → generators/displays-generator.ts} +10 -16
- package/src/generators/flex-directions-generator.ts +27 -0
- package/src/generators/flex-grows-generator.ts +28 -0
- package/src/generators/flex-shrinks-generator.ts +28 -0
- package/src/generators/flex-wraps-generator.ts +28 -0
- package/src/{font-colors-generator.ts → generators/font-colors-generator.ts} +8 -8
- package/src/generators/font-size-generator.ts +28 -0
- package/src/generators/font-weight-generator.ts +18 -0
- package/src/generators/gap-generator.ts +28 -0
- package/src/generators/heights-generator.ts +28 -0
- package/src/generators/index.ts +34 -0
- package/src/generators/letter-spacings-generator.ts +18 -0
- package/src/generators/line-height-generator.ts +18 -0
- package/src/{margins-generator.ts → generators/margins-generator.ts} +20 -26
- package/src/generators/max-heights-generator.ts +28 -0
- package/src/generators/max-widths-generator.ts +28 -0
- package/src/generators/object-fits-generator.ts +28 -0
- package/src/generators/object-positions-generator.ts +28 -0
- package/src/generators/overflows-generator.ts +18 -0
- package/src/{paddings-generator.ts → generators/paddings-generator.ts} +20 -26
- package/src/generators/pointer-events-generator.ts +28 -0
- package/src/{positioners-generator.ts → generators/positioners-generator.ts} +7 -13
- package/src/generators/positions-generator.ts +28 -0
- package/src/generators/rotates-generator.ts +28 -0
- package/src/generators/shadows-generator.ts +18 -0
- package/src/{transforms-generator.ts → generators/transforms-generator.ts} +10 -14
- package/src/generators/widths-generator.ts +28 -0
- package/src/generators/z-index-generator.ts +18 -0
- package/src/index.ts +3 -0
- package/src/normalize.css +18 -19
- package/src/rules/button-empty-content.css +5 -0
- package/src/rules/button-icon-title.css +1 -1
- package/src/rules/focusable-hidden-element.css +5 -0
- package/src/rules/image-alt.css +1 -1
- package/src/rules/input-missing-id.css +4 -0
- package/src/rules/input-missing-name.css +4 -0
- package/src/rules/invalid-list-element.css +1 -1
- package/src/rules/link-empty-href.css +5 -0
- package/src/rules/target-blank-referer.css +3 -3
- package/src/rules/title-truncate.css +6 -6
- package/src/tokens.ts +245 -275
- package/src/ui/button.css +15 -11
- package/src/ui/checkbox.css +1 -1
- package/src/ui/input.css +6 -2
- package/src/ui/label.css +2 -2
- package/src/ui/link.css +1 -1
- package/src/ui/range.css +6 -10
- package/src/ui/select.css +1 -1
- package/src/ui/textarea.css +6 -2
- package/dist/axis-placements-generator.d.ts +0 -7
- package/dist/backdrops-generator.d.ts +0 -6
- package/dist/backgrounds-generator.d.ts +0 -6
- package/dist/border-colors-generator.d.ts +0 -9
- package/dist/border-radiuses-generator.d.ts +0 -6
- package/dist/border-widths-generator.d.ts +0 -6
- package/dist/cursors-generator.d.ts +0 -7
- package/dist/design.cjs.development.js +0 -2663
- package/dist/design.cjs.development.js.map +0 -1
- package/dist/design.cjs.production.min.js +0 -2
- package/dist/design.cjs.production.min.js.map +0 -1
- package/dist/design.esm.js +0 -2659
- package/dist/design.esm.js.map +0 -1
- package/dist/displays-generator.d.ts +0 -7
- package/dist/file.d.ts +0 -10
- package/dist/flex-directions-generator.d.ts +0 -7
- package/dist/flex-grows-generator.d.ts +0 -7
- package/dist/flex-shrinks-generator.d.ts +0 -7
- package/dist/flex-wraps-generator.d.ts +0 -7
- package/dist/font-colors-generator.d.ts +0 -6
- package/dist/font-size-generator.d.ts +0 -7
- package/dist/font-weight-generator.d.ts +0 -6
- package/dist/gap-generator.d.ts +0 -7
- package/dist/generate-css.d.ts +0 -1
- package/dist/generator.d.ts +0 -43
- package/dist/heights-generator.d.ts +0 -7
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -8
- package/dist/letter-spacings-generator.d.ts +0 -6
- package/dist/line-height-generator.d.ts +0 -6
- package/dist/margins-generator.d.ts +0 -7
- package/dist/max-heights-generator.d.ts +0 -7
- package/dist/max-widths-generator.d.ts +0 -7
- package/dist/object-fits-generator.d.ts +0 -7
- package/dist/object-positions-generator.d.ts +0 -7
- package/dist/overflows-generator.d.ts +0 -6
- package/dist/paddings-generator.d.ts +0 -7
- package/dist/pointer-events-generator.d.ts +0 -7
- package/dist/positioners-generator.d.ts +0 -7
- package/dist/positions-generator.d.ts +0 -7
- package/dist/rotates-generator.d.ts +0 -7
- package/dist/tokens.d.ts +0 -67
- package/dist/transforms-generator.d.ts +0 -6
- package/dist/widths-generator.d.ts +0 -7
- package/dist/z-index-generator.d.ts +0 -6
- package/src/backdrops-generator.ts +0 -22
- package/src/border-radiuses-generator.ts +0 -20
- package/src/cursors-generator.ts +0 -34
- package/src/file.ts +0 -24
- package/src/flex-directions-generator.ts +0 -33
- package/src/flex-grows-generator.ts +0 -34
- package/src/flex-shrinks-generator.ts +0 -34
- package/src/flex-wraps-generator.ts +0 -35
- package/src/font-size-generator.ts +0 -34
- package/src/font-weight-generator.ts +0 -22
- package/src/gap-generator.ts +0 -34
- package/src/heights-generator.ts +0 -34
- package/src/index.tsx +0 -3
- package/src/letter-spacings-generator.ts +0 -22
- package/src/line-height-generator.ts +0 -22
- package/src/max-heights-generator.ts +0 -34
- package/src/max-widths-generator.ts +0 -34
- package/src/object-fits-generator.ts +0 -35
- package/src/object-positions-generator.ts +0 -35
- package/src/overflows-generator.ts +0 -22
- package/src/pointer-events-generator.ts +0 -34
- package/src/positions-generator.ts +0 -35
- package/src/rotates-generator.ts +0 -35
- package/src/widths-generator.ts +0 -34
- package/src/z-index-generator.ts +0 -21
|
@@ -1,20 +1,14 @@
|
|
|
1
|
-
import { AbstractGenerator, GeneratorConfigType } from
|
|
1
|
+
import { AbstractGenerator, GeneratorConfigType } from "../generator";
|
|
2
2
|
|
|
3
3
|
export class PositionersGenerator extends AbstractGenerator {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
constructor(config: GeneratorConfigType) {
|
|
8
|
-
super('Positioners');
|
|
9
|
-
|
|
10
|
-
this.spacing = config.spacing;
|
|
11
|
-
this.breakpoints = config.breakpoints;
|
|
4
|
+
constructor(private readonly config: GeneratorConfigType) {
|
|
5
|
+
super("Positioners");
|
|
12
6
|
}
|
|
13
7
|
|
|
14
8
|
generateCss(): string {
|
|
15
|
-
let output =
|
|
9
|
+
let output = "";
|
|
16
10
|
|
|
17
|
-
for (const [key, value] of Object.entries(this.
|
|
11
|
+
for (const [key, value] of Object.entries(this.config.Spacing)) {
|
|
18
12
|
output += `*[data-top='${key}'] {\n top: ${value};\n}\n`;
|
|
19
13
|
output += `*[data-right='${key}'] {\n right: ${value};\n}\n`;
|
|
20
14
|
output += `*[data-bottom='${key}'] {\n bottom: ${value};\n}\n`;
|
|
@@ -22,10 +16,10 @@ export class PositionersGenerator extends AbstractGenerator {
|
|
|
22
16
|
output += `*[data-inset='${key}'] {\n inset: ${value};\n}\n`;
|
|
23
17
|
}
|
|
24
18
|
|
|
25
|
-
for (const [name, value] of Object.entries(this.
|
|
19
|
+
for (const [name, value] of Object.entries(this.config.Breakpoints)) {
|
|
26
20
|
output += `@media (max-width: ${value}px) {\n`;
|
|
27
21
|
|
|
28
|
-
for (const [key, value] of Object.entries(this.
|
|
22
|
+
for (const [key, value] of Object.entries(this.config.Spacing)) {
|
|
29
23
|
output += `*[data-${name}-top='${key}'] {\n top: ${value};\n}\n`;
|
|
30
24
|
output += `*[data-${name}-right='${key}'] {\n right: ${value};\n}\n`;
|
|
31
25
|
output += `*[data-${name}-bottom='${key}'] {\n bottom: ${value};\n}\n`;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AbstractGenerator, GeneratorConfigType } from "../generator";
|
|
2
|
+
|
|
3
|
+
export class PositionsGenerator extends AbstractGenerator {
|
|
4
|
+
constructor(private readonly config: GeneratorConfigType) {
|
|
5
|
+
super("Positions");
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
generateCss(): string {
|
|
9
|
+
let output = "";
|
|
10
|
+
|
|
11
|
+
// Regular display: data-position="*"
|
|
12
|
+
for (const [key, value] of Object.entries(this.config.Positions)) {
|
|
13
|
+
output += `*[data-position='${key}'] {\n position: ${value};\n}\n`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
for (const [name, value] of Object.entries(this.config.Breakpoints)) {
|
|
17
|
+
output += `@media (max-width: ${value}px) {\n`;
|
|
18
|
+
|
|
19
|
+
for (const [key, value] of Object.entries(this.config.Positions)) {
|
|
20
|
+
output += ` *[data-${name}-position='${key}'] {\n position: ${value};\n }\n`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
output += "}\n";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return output;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AbstractGenerator, GeneratorConfigType } from "../generator";
|
|
2
|
+
|
|
3
|
+
export class RotatesGenerator extends AbstractGenerator {
|
|
4
|
+
constructor(private readonly config: GeneratorConfigType) {
|
|
5
|
+
super("Rotates");
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
generateCss(): string {
|
|
9
|
+
let output = "";
|
|
10
|
+
|
|
11
|
+
// Regular display: data-rotate="*"
|
|
12
|
+
for (const [key, value] of Object.entries(this.config.Rotates)) {
|
|
13
|
+
output += `*[data-rotate='${key}'] {\n transform: rotate(${value}deg);\n}\n`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
for (const [name, value] of Object.entries(this.config.Breakpoints)) {
|
|
17
|
+
output += `@media (max-width: ${value}px) {\n`;
|
|
18
|
+
|
|
19
|
+
for (const [key, value] of Object.entries(this.config.Rotates)) {
|
|
20
|
+
output += ` *[data-${name}-rotate='${key}'] {\n transform: rotate(${value}deg);\n }\n`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
output += "}\n";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return output;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AbstractGenerator, GeneratorConfigType } from "../generator";
|
|
2
|
+
|
|
3
|
+
export class ShadowsGenerator extends AbstractGenerator {
|
|
4
|
+
constructor(private readonly config: GeneratorConfigType) {
|
|
5
|
+
super("Shadows");
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
generateCss(): string {
|
|
9
|
+
let output = "";
|
|
10
|
+
|
|
11
|
+
// Regular display: data-shadow="*"
|
|
12
|
+
for (const [key, value] of Object.entries(this.config.Shadows)) {
|
|
13
|
+
output += `*[data-shadow='${key}'] {\n box-shadow: ${value};\n}\n`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return output;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -1,40 +1,36 @@
|
|
|
1
|
-
import { AbstractGenerator, GeneratorConfigType } from
|
|
1
|
+
import { AbstractGenerator, GeneratorConfigType } from "../generator";
|
|
2
2
|
|
|
3
3
|
export class TransformsGenerator extends AbstractGenerator {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
constructor(config: GeneratorConfigType) {
|
|
7
|
-
super('Transforms');
|
|
8
|
-
|
|
9
|
-
this.transforms = config.transforms;
|
|
4
|
+
constructor(private readonly config: GeneratorConfigType) {
|
|
5
|
+
super("Transforms");
|
|
10
6
|
}
|
|
11
7
|
|
|
12
8
|
generateCss(): string {
|
|
13
|
-
let output =
|
|
9
|
+
let output = "";
|
|
14
10
|
|
|
15
11
|
// Regular display: data-transform~="*"
|
|
16
|
-
for (const [key, value] of Object.entries(this.
|
|
17
|
-
if (key ===
|
|
12
|
+
for (const [key, value] of Object.entries(this.config.Transforms)) {
|
|
13
|
+
if (key === "truncate") {
|
|
18
14
|
output += `*[data-transform~='${key}'] {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n`;
|
|
19
15
|
continue;
|
|
20
16
|
}
|
|
21
17
|
|
|
22
|
-
if (key ===
|
|
18
|
+
if (key === "line-clamp") {
|
|
23
19
|
output += `*[data-transform~='${key}'] {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: var(--lines, 2); overflow: hidden;\n}\n`;
|
|
24
20
|
continue;
|
|
25
21
|
}
|
|
26
22
|
|
|
27
|
-
if (key ===
|
|
23
|
+
if (key === "center") {
|
|
28
24
|
output += `*[data-transform~='${key}'] {\n text-align: center;\n}\n`;
|
|
29
25
|
continue;
|
|
30
26
|
}
|
|
31
27
|
|
|
32
|
-
if (key ===
|
|
28
|
+
if (key === "upper-first") {
|
|
33
29
|
output += `*[data-transform~='upper-first']:first-letter {\n text-transform: uppercase;\n}\n`;
|
|
34
30
|
continue;
|
|
35
31
|
}
|
|
36
32
|
|
|
37
|
-
if (key ===
|
|
33
|
+
if (key === "nowrap") {
|
|
38
34
|
output += `*[data-transform~='nowrap'] {\n white-space: nowrap;\n}\n`;
|
|
39
35
|
continue;
|
|
40
36
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AbstractGenerator, GeneratorConfigType } from "../generator";
|
|
2
|
+
|
|
3
|
+
export class WidthsGenerator extends AbstractGenerator {
|
|
4
|
+
constructor(private readonly config: GeneratorConfigType) {
|
|
5
|
+
super("Widths");
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
generateCss(): string {
|
|
9
|
+
let output = "";
|
|
10
|
+
|
|
11
|
+
// Regular display: data-width="*"
|
|
12
|
+
for (const [key, value] of Object.entries(this.config.Widths)) {
|
|
13
|
+
output += `*[data-width='${key}'] {\n width: ${value};\n}\n`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
for (const [name, value] of Object.entries(this.config.Breakpoints)) {
|
|
17
|
+
output += `@media (max-width: ${value}px) {\n`;
|
|
18
|
+
|
|
19
|
+
for (const [key, value] of Object.entries(this.config.Widths)) {
|
|
20
|
+
output += ` *[data-${name}-width='${key}'] {\n width: ${value};\n }\n`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
output += "}\n";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return output;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AbstractGenerator, GeneratorConfigType } from "../generator";
|
|
2
|
+
|
|
3
|
+
export class ZIndexGenerator extends AbstractGenerator {
|
|
4
|
+
constructor(private readonly config: GeneratorConfigType) {
|
|
5
|
+
super("Z indexes");
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
generateCss(): string {
|
|
9
|
+
let output = "";
|
|
10
|
+
|
|
11
|
+
// Regular display: data-z="*"
|
|
12
|
+
for (const [key, value] of Object.entries(this.config.ZIndexes)) {
|
|
13
|
+
output += `*[data-z='${key}'] {\n z-index: ${value};\n}\n`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return output;
|
|
17
|
+
}
|
|
18
|
+
}
|
package/src/index.ts
ADDED
package/src/normalize.css
CHANGED
|
@@ -117,7 +117,6 @@ a {
|
|
|
117
117
|
abbr[title] {
|
|
118
118
|
border-bottom: none; /* 1 */
|
|
119
119
|
text-decoration: underline; /* 2 */
|
|
120
|
-
text-decoration: underline dotted; /* 2 */
|
|
121
120
|
}
|
|
122
121
|
|
|
123
122
|
/**
|
|
@@ -228,9 +227,9 @@ select {
|
|
|
228
227
|
*/
|
|
229
228
|
|
|
230
229
|
button,
|
|
231
|
-
[type=
|
|
232
|
-
[type=
|
|
233
|
-
[type=
|
|
230
|
+
[type="button"],
|
|
231
|
+
[type="reset"],
|
|
232
|
+
[type="submit"] {
|
|
234
233
|
-webkit-appearance: button;
|
|
235
234
|
}
|
|
236
235
|
|
|
@@ -239,9 +238,9 @@ button,
|
|
|
239
238
|
*/
|
|
240
239
|
|
|
241
240
|
button::-moz-focus-inner,
|
|
242
|
-
[type=
|
|
243
|
-
[type=
|
|
244
|
-
[type=
|
|
241
|
+
[type="button"]::-moz-focus-inner,
|
|
242
|
+
[type="reset"]::-moz-focus-inner,
|
|
243
|
+
[type="submit"]::-moz-focus-inner {
|
|
245
244
|
border-style: none;
|
|
246
245
|
padding: 0;
|
|
247
246
|
}
|
|
@@ -249,14 +248,14 @@ button::-moz-focus-inner,
|
|
|
249
248
|
/**
|
|
250
249
|
* Remove step arrows from the numeric input
|
|
251
250
|
*/
|
|
252
|
-
input[type=
|
|
253
|
-
input[type=
|
|
251
|
+
input[type="number"]::-webkit-outer-spin-button,
|
|
252
|
+
input[type="number"]::-webkit-inner-spin-button {
|
|
254
253
|
appearance: none;
|
|
255
254
|
margin: 0;
|
|
256
255
|
}
|
|
257
256
|
|
|
258
257
|
/* Firefox */
|
|
259
|
-
input[type=
|
|
258
|
+
input[type="number"] {
|
|
260
259
|
appearance: textfield;
|
|
261
260
|
}
|
|
262
261
|
|
|
@@ -265,9 +264,9 @@ input[type='number'] {
|
|
|
265
264
|
*/
|
|
266
265
|
|
|
267
266
|
button:-moz-focusring,
|
|
268
|
-
[type=
|
|
269
|
-
[type=
|
|
270
|
-
[type=
|
|
267
|
+
[type="button"]:-moz-focusring,
|
|
268
|
+
[type="reset"]:-moz-focusring,
|
|
269
|
+
[type="submit"]:-moz-focusring {
|
|
271
270
|
outline: 1px dotted ButtonText;
|
|
272
271
|
}
|
|
273
272
|
|
|
@@ -316,8 +315,8 @@ textarea {
|
|
|
316
315
|
* 2. Remove the padding in IE 10.
|
|
317
316
|
*/
|
|
318
317
|
|
|
319
|
-
[type=
|
|
320
|
-
[type=
|
|
318
|
+
[type="checkbox"],
|
|
319
|
+
[type="radio"] {
|
|
321
320
|
box-sizing: border-box; /* 1 */
|
|
322
321
|
padding: 0; /* 2 */
|
|
323
322
|
}
|
|
@@ -326,8 +325,8 @@ textarea {
|
|
|
326
325
|
* Correct the cursor style of increment and decrement buttons in Chrome.
|
|
327
326
|
*/
|
|
328
327
|
|
|
329
|
-
[type=
|
|
330
|
-
[type=
|
|
328
|
+
[type="number"]::-webkit-inner-spin-button,
|
|
329
|
+
[type="number"]::-webkit-outer-spin-button {
|
|
331
330
|
height: auto;
|
|
332
331
|
}
|
|
333
332
|
|
|
@@ -336,7 +335,7 @@ textarea {
|
|
|
336
335
|
* 2. Correct the outline style in Safari.
|
|
337
336
|
*/
|
|
338
337
|
|
|
339
|
-
[type=
|
|
338
|
+
[type="search"] {
|
|
340
339
|
-webkit-appearance: textfield; /* 1 */
|
|
341
340
|
outline-offset: -2px; /* 2 */
|
|
342
341
|
}
|
|
@@ -345,7 +344,7 @@ textarea {
|
|
|
345
344
|
* Remove the inner padding in Chrome and Safari on macOS.
|
|
346
345
|
*/
|
|
347
346
|
|
|
348
|
-
[type=
|
|
347
|
+
[type="search"]::-webkit-search-decoration {
|
|
349
348
|
-webkit-appearance: none;
|
|
350
349
|
}
|
|
351
350
|
|
package/src/rules/image-alt.css
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
[target=
|
|
1
|
+
[target="_blank"]:not([rel]) {
|
|
2
2
|
position: relative;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
[target=
|
|
5
|
+
[target="_blank"]:not([rel]):after {
|
|
6
6
|
background: red;
|
|
7
7
|
position: absolute;
|
|
8
8
|
inset: 0;
|
|
9
|
-
content:
|
|
9
|
+
content: "Rule #2 violation (target-blank-referer)";
|
|
10
10
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
[data-transform=
|
|
1
|
+
[data-transform="truncate"]:not([title]) {
|
|
2
2
|
position: relative;
|
|
3
3
|
}
|
|
4
|
-
[data-transform=
|
|
4
|
+
[data-transform="truncate"]:not([title]):after {
|
|
5
5
|
background: red;
|
|
6
6
|
position: absolute;
|
|
7
7
|
inset: 0;
|
|
8
|
-
content:
|
|
8
|
+
content: "Rule #1 violation (title-truncate)";
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
[data-transform=
|
|
11
|
+
[data-transform="line-clamp"]:not([title]) {
|
|
12
12
|
position: relative;
|
|
13
13
|
}
|
|
14
|
-
[data-transform=
|
|
14
|
+
[data-transform="line-clamp"]:not([title]):after {
|
|
15
15
|
background: red;
|
|
16
16
|
position: absolute;
|
|
17
17
|
inset: 0;
|
|
18
|
-
content:
|
|
18
|
+
content: "Rule #1 violation (title-truncate)";
|
|
19
19
|
}
|