dowel-ui 0.32.0 → 0.34.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/README.md +5 -4
- package/dist/eslint/index.d.ts +2 -0
- package/dist/eslint/index.d.ts.map +1 -1
- package/dist/eslint/index.js +24 -4
- package/dist/eslint/index.js.map +1 -1
- package/dist/eslint/no-arbitrary-scale.d.ts +20 -0
- package/dist/eslint/no-arbitrary-scale.d.ts.map +1 -0
- package/dist/eslint/no-arbitrary-scale.js +261 -0
- package/dist/eslint/no-arbitrary-scale.js.map +1 -0
- package/dist/eslint/no-raw-button.d.ts +3 -0
- package/dist/eslint/no-raw-button.d.ts.map +1 -0
- package/dist/eslint/no-raw-button.js +51 -0
- package/dist/eslint/no-raw-button.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/palettes/atlas.json +1 -1
- package/dist/palettes/austeris.json +1 -1
- package/dist/palettes/dowel.json +1 -1
- package/dist/palettes/efema.json +1 -1
- package/dist/palettes/furca.json +1 -1
- package/dist/palettes/hilvan.json +1 -1
- package/dist/palettes/kasl-server.json +1 -1
- package/dist/palettes/kasl.json +1 -1
- package/dist/palettes/kilna.json +1 -1
- package/dist/palettes/lyrid.json +1 -1
- package/dist/palettes/lyrn.json +1 -1
- package/dist/palettes/midda.json +1 -1
- package/dist/palettes/nitid.json +1 -1
- package/dist/palettes/nooma.json +1 -1
- package/dist/palettes/rhapsod.json +1 -1
- package/dist/palettes/rigger.json +1 -1
- package/dist/palettes/scheda.json +1 -1
- package/dist/palettes/sefy.json +1 -1
- package/dist/palettes/turnout.json +1 -1
- package/dist/registry.json +246 -127
- package/dist/theme.css +29 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -60,10 +60,11 @@ npx shadcn@latest add https://lacodda.github.io/dowel/r/button.json
|
|
|
60
60
|
npx shadcn@latest add https://lacodda.github.io/dowel/r/app.json # or a whole set
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
A hundred and
|
|
63
|
+
A hundred and twelve primitives so far - controls and forms, overlays on
|
|
64
64
|
[Base UI](https://base-ui.com), menus, the command palette, tables and long
|
|
65
|
-
lists, charts, loading and empty screens, markdown, code and
|
|
66
|
-
frame and how it divides, a desktop window's own chrome, and
|
|
65
|
+
lists, charts, a month of days, loading and empty screens, markdown, code and
|
|
66
|
+
diffs, a screen's frame and how it divides, a desktop window's own chrome, and
|
|
67
|
+
the line's marks.
|
|
67
68
|
Each is written in the vocabulary - no raw colours, no `dark:` utilities, no
|
|
68
69
|
date in the browser's language - and runs its own gate: axe, the keyboard, a
|
|
69
70
|
dependency budget and a picture in both themes.
|
|
@@ -152,7 +153,7 @@ where it measured 3.49:1. Derived, it is white there, at 6.01:1.
|
|
|
152
153
|
|
|
153
154
|
## Status
|
|
154
155
|
|
|
155
|
-
The theme, the scales, an accent per product, and a hundred and
|
|
156
|
+
The theme, the scales, an accent per product, and a hundred and twelve primitives are
|
|
156
157
|
in daily use across two products of the line. Every component installs from a
|
|
157
158
|
versioned registry and passes its own gate - axe, the keyboard, a dependency
|
|
158
159
|
budget, a scale that refuses a length nobody argued for, a floor under every
|
package/dist/eslint/index.d.ts
CHANGED
|
@@ -11,4 +11,6 @@ export default dowel;
|
|
|
11
11
|
export { noRawColor, findRawColor } from './no-raw-color.js';
|
|
12
12
|
export { noImplicitLocale } from './no-implicit-locale.js';
|
|
13
13
|
export { noNativeSelect } from './no-native-select.js';
|
|
14
|
+
export { noArbitraryScale, findArbitraryScale, TYPE_STEPS, RADIUS_STEPS } from './no-arbitrary-scale.js';
|
|
15
|
+
export { noRawButton } from './no-raw-button.js';
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAmE5C;;+EAE+E;AAC/E,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG;IAAE,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;KAAE,CAAA;CAEtE,CAAA;AAEF,eAAe,KAAK,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/eslint/index.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
import { noArbitraryScale } from './no-arbitrary-scale.js';
|
|
1
2
|
import { noImplicitLocale } from './no-implicit-locale.js';
|
|
2
3
|
import { noNativeSelect } from './no-native-select.js';
|
|
4
|
+
import { noRawButton } from './no-raw-button.js';
|
|
3
5
|
import { noRawColor } from './no-raw-color.js';
|
|
4
6
|
/*
|
|
5
7
|
* The dowel ESLint plugin.
|
|
6
8
|
*
|
|
7
|
-
*
|
|
9
|
+
* Five rules, and each enforces a convention the system rests on: a
|
|
8
10
|
* component names colours from the vocabulary and never writes one down, no
|
|
9
11
|
* screen uses a native `<select>`, which the browser draws in its own chrome,
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
+
* no date or number is formatted in the browser's language rather than the
|
|
13
|
+
* application's, sizes come from the scale rather than from the eye, and a
|
|
14
|
+
* screen presses Buttons rather than `<button>`s.
|
|
12
15
|
*
|
|
13
16
|
* It ships from the package rather than the registry because it is not a
|
|
14
17
|
* component - it is not copied into a product and edited there, it is a check
|
|
@@ -27,10 +30,16 @@ const plugin = {
|
|
|
27
30
|
'no-raw-color': noRawColor,
|
|
28
31
|
'no-native-select': noNativeSelect,
|
|
29
32
|
'no-implicit-locale': noImplicitLocale,
|
|
33
|
+
'no-arbitrary-scale': noArbitraryScale,
|
|
34
|
+
'no-raw-button': noRawButton,
|
|
30
35
|
},
|
|
31
36
|
};
|
|
32
37
|
/** The rules, applied where components live. Scoped to TypeScript sources:
|
|
33
|
-
* the theme is CSS and the build tools are Node, and neither is a component.
|
|
38
|
+
* the theme is CSS and the build tools are Node, and neither is a component.
|
|
39
|
+
*
|
|
40
|
+
* `no-raw-button` is kept out of `ui/`, the directory a product keeps its
|
|
41
|
+
* primitives in (shadcn's `components/ui`): a primitive is where the one
|
|
42
|
+
* `<button>` a screen should not write gets written, once. */
|
|
34
43
|
const recommended = [
|
|
35
44
|
{
|
|
36
45
|
files: ['**/*.{ts,tsx}'],
|
|
@@ -39,6 +48,15 @@ const recommended = [
|
|
|
39
48
|
'dowel/no-raw-color': 'error',
|
|
40
49
|
'dowel/no-native-select': 'error',
|
|
41
50
|
'dowel/no-implicit-locale': 'error',
|
|
51
|
+
'dowel/no-arbitrary-scale': 'error',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
files: ['**/*.tsx'],
|
|
56
|
+
ignores: ['**/ui/**'],
|
|
57
|
+
plugins: { dowel: plugin },
|
|
58
|
+
rules: {
|
|
59
|
+
'dowel/no-raw-button': 'error',
|
|
42
60
|
},
|
|
43
61
|
},
|
|
44
62
|
];
|
|
@@ -52,4 +70,6 @@ export default dowel;
|
|
|
52
70
|
export { noRawColor, findRawColor } from './no-raw-color.js';
|
|
53
71
|
export { noImplicitLocale } from './no-implicit-locale.js';
|
|
54
72
|
export { noNativeSelect } from './no-native-select.js';
|
|
73
|
+
export { noArbitraryScale, findArbitraryScale, TYPE_STEPS, RADIUS_STEPS } from './no-arbitrary-scale.js';
|
|
74
|
+
export { noRawButton } from './no-raw-button.js';
|
|
55
75
|
//# sourceMappingURL=index.js.map
|
package/dist/eslint/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IACvB,KAAK,EAAE;QACL,cAAc,EAAE,UAAU;QAC1B,kBAAkB,EAAE,cAAc;QAClC,oBAAoB,EAAE,gBAAgB;QACtC,oBAAoB,EAAE,gBAAgB;QACtC,eAAe,EAAE,WAAW;KAC7B;CACsB,CAAA;AAEzB;;;;;8DAK8D;AAC9D,MAAM,WAAW,GAAoB;IACnC;QACE,KAAK,EAAE,CAAC,eAAe,CAAC;QACxB,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QAC1B,KAAK,EAAE;YACL,oBAAoB,EAAE,OAAO;YAC7B,wBAAwB,EAAE,OAAO;YACjC,0BAA0B,EAAE,OAAO;YACnC,0BAA0B,EAAE,OAAO;SACpC;KACF;IACD;QACE,KAAK,EAAE,CAAC,UAAU,CAAC;QACnB,OAAO,EAAE,CAAC,UAAU,CAAC;QACrB,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QAC1B,KAAK,EAAE;YACL,qBAAqB,EAAE,OAAO;SAC/B;KACF;CACF,CAAA;AAED;;+EAE+E;AAC/E,MAAM,KAAK,GAAkE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;IACjG,OAAO,EAAE,EAAE,WAAW,EAAE;CACzB,CAAC,CAAA;AAEF,eAAe,KAAK,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Rule } from 'eslint';
|
|
2
|
+
/** The type scale, in pixels, by the step that names it. Mirrors the theme;
|
|
3
|
+
* `scale.test.ts` holds the two to each other. */
|
|
4
|
+
export declare const TYPE_STEPS: Record<number, string>;
|
|
5
|
+
/** The radii, in pixels, by the step that names them. */
|
|
6
|
+
export declare const RADIUS_STEPS: Record<number, string>;
|
|
7
|
+
export interface ScaleFinding {
|
|
8
|
+
/** Where the class starts in the string. */
|
|
9
|
+
index: number;
|
|
10
|
+
/** The class as written, `hover:` and all. */
|
|
11
|
+
text: string;
|
|
12
|
+
message: string;
|
|
13
|
+
/** The class to write instead, when there is exactly one. */
|
|
14
|
+
fix?: string;
|
|
15
|
+
}
|
|
16
|
+
/** What is off the scale in this string. Exported for the gate that holds the
|
|
17
|
+
* set itself to the same rule, and for the test: the matching is the rule. */
|
|
18
|
+
export declare function findArbitraryScale(text: string): ScaleFinding[];
|
|
19
|
+
export declare const noArbitraryScale: Rule.RuleModule;
|
|
20
|
+
//# sourceMappingURL=no-arbitrary-scale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-arbitrary-scale.d.ts","sourceRoot":"","sources":["../../src/eslint/no-arbitrary-scale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAgGlC;kDACkD;AAClD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ7C,CAAA;AAED,yDAAyD;AACzD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO/C,CAAA;AAQD,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AA4CD;8EAC8E;AAC9E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAkE/D;AAED,eAAO,MAAM,gBAAgB,EAAE,IAAI,CAAC,UA6CnC,CAAA"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `no-arbitrary-scale` - sizes come from the scale, or they are argued for.
|
|
3
|
+
*
|
|
4
|
+
* The colour vocabulary holds because a raw colour does not compile. Size has
|
|
5
|
+
* no such wall: `text-[13px]` compiles perfectly, looks deliberate, and is how
|
|
6
|
+
* a product drifts into nine sizes inside four pixels. kilna had 160 of them
|
|
7
|
+
* in its screens, and half were literally a step of the scale written the
|
|
8
|
+
* long way - `text-[12px]` for `text-sm` - which no reader of the code could
|
|
9
|
+
* tell from the other half, the ones that really were off the scale.
|
|
10
|
+
*
|
|
11
|
+
* So the rule reads every class string, finds the fixed lengths chosen by eye,
|
|
12
|
+
* and says which step they are:
|
|
13
|
+
*
|
|
14
|
+
* - **the same length as a named step** is fixed automatically - `text-[12px]`
|
|
15
|
+
* becomes `text-sm`, `rounded-[9px]` becomes `rounded-md`, `h-[22px]`
|
|
16
|
+
* becomes `h-5.5` - because nothing is decided by writing it the long way;
|
|
17
|
+
* - **a length off the scale** is reported with the steps either side of it,
|
|
18
|
+
* and the fix is a decision: take a step, or disable the line with the
|
|
19
|
+
* reason no step can carry it.
|
|
20
|
+
*
|
|
21
|
+
* What it leaves alone is anything computed or proportional - `calc()`,
|
|
22
|
+
* `min()`, `var()`, percentages, viewport units, `ch` and `fr` - because those
|
|
23
|
+
* are relationships, not measurements: `w-[min(22rem,100%)]` says "as wide as
|
|
24
|
+
* it wants but never off the screen", which no step can say.
|
|
25
|
+
*/
|
|
26
|
+
/** Utilities that measure on the spacing scale: a step is a quarter of a rem,
|
|
27
|
+
* so 4px is `1` and 22px is `5.5`. */
|
|
28
|
+
const SPACING = [
|
|
29
|
+
'size',
|
|
30
|
+
'w',
|
|
31
|
+
'h',
|
|
32
|
+
'min-w',
|
|
33
|
+
'min-h',
|
|
34
|
+
'max-w',
|
|
35
|
+
'max-h',
|
|
36
|
+
'p',
|
|
37
|
+
'px',
|
|
38
|
+
'py',
|
|
39
|
+
'pt',
|
|
40
|
+
'pb',
|
|
41
|
+
'pl',
|
|
42
|
+
'pr',
|
|
43
|
+
'ps',
|
|
44
|
+
'pe',
|
|
45
|
+
'm',
|
|
46
|
+
'mx',
|
|
47
|
+
'my',
|
|
48
|
+
'mt',
|
|
49
|
+
'mb',
|
|
50
|
+
'ml',
|
|
51
|
+
'mr',
|
|
52
|
+
'ms',
|
|
53
|
+
'me',
|
|
54
|
+
'gap',
|
|
55
|
+
'gap-x',
|
|
56
|
+
'gap-y',
|
|
57
|
+
'space-x',
|
|
58
|
+
'space-y',
|
|
59
|
+
'top',
|
|
60
|
+
'bottom',
|
|
61
|
+
'left',
|
|
62
|
+
'right',
|
|
63
|
+
'inset',
|
|
64
|
+
'inset-x',
|
|
65
|
+
'inset-y',
|
|
66
|
+
'start',
|
|
67
|
+
'end',
|
|
68
|
+
'translate-x',
|
|
69
|
+
'translate-y',
|
|
70
|
+
'basis',
|
|
71
|
+
'leading',
|
|
72
|
+
'scroll-m',
|
|
73
|
+
'scroll-p',
|
|
74
|
+
];
|
|
75
|
+
const RADIUS = [
|
|
76
|
+
'rounded',
|
|
77
|
+
'rounded-t',
|
|
78
|
+
'rounded-b',
|
|
79
|
+
'rounded-l',
|
|
80
|
+
'rounded-r',
|
|
81
|
+
'rounded-s',
|
|
82
|
+
'rounded-e',
|
|
83
|
+
'rounded-tl',
|
|
84
|
+
'rounded-tr',
|
|
85
|
+
'rounded-bl',
|
|
86
|
+
'rounded-br',
|
|
87
|
+
'rounded-ss',
|
|
88
|
+
'rounded-se',
|
|
89
|
+
'rounded-es',
|
|
90
|
+
'rounded-ee',
|
|
91
|
+
];
|
|
92
|
+
/** The type scale, in pixels, by the step that names it. Mirrors the theme;
|
|
93
|
+
* `scale.test.ts` holds the two to each other. */
|
|
94
|
+
export const TYPE_STEPS = {
|
|
95
|
+
10: '2xs',
|
|
96
|
+
11: 'xs',
|
|
97
|
+
12: 'sm',
|
|
98
|
+
14: 'base',
|
|
99
|
+
16: 'lg',
|
|
100
|
+
18: 'xl',
|
|
101
|
+
21: '2xl',
|
|
102
|
+
};
|
|
103
|
+
/** The radii, in pixels, by the step that names them. */
|
|
104
|
+
export const RADIUS_STEPS = {
|
|
105
|
+
4: 'xs',
|
|
106
|
+
6: 'sm',
|
|
107
|
+
9: 'md',
|
|
108
|
+
12: 'lg',
|
|
109
|
+
16: 'xl',
|
|
110
|
+
20: '2xl',
|
|
111
|
+
};
|
|
112
|
+
/** The tracking steps, in em. */
|
|
113
|
+
const TRACKING_STEPS = {
|
|
114
|
+
'0.085': 'caption',
|
|
115
|
+
'-0.01': 'tight',
|
|
116
|
+
};
|
|
117
|
+
const escape = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
118
|
+
/*
|
|
119
|
+
* One class: optional variants (`hover:`, `data-[open]:`, `[&_svg]:`), an
|
|
120
|
+
* optional minus, a utility, and a bracketed value. The utility names are
|
|
121
|
+
* tried longest first, so `min-w` is not read as `w` and `rounded-tl` is not
|
|
122
|
+
* read as `rounded`.
|
|
123
|
+
*/
|
|
124
|
+
const UTILITIES = [...SPACING, ...RADIUS, 'text', 'tracking'].sort((a, b) => b.length - a.length);
|
|
125
|
+
const VARIANT = String.raw `(?:[\w-]+(?:\[[^\]]*\])?|\[[^\]]*\]):`;
|
|
126
|
+
const CLASS = new RegExp(String.raw `(?<=^|[\s"'\x60])((?:${VARIANT})*)(-?)(${UTILITIES.map(escape).join('|')})-\[([^\]\s]+)\](?=$|[\s"'\x60])`, 'g');
|
|
127
|
+
/** A plain length in pixels, or `undefined` for anything else. */
|
|
128
|
+
function pixels(value) {
|
|
129
|
+
const match = /^(-?\d*\.?\d+)(px|rem)$/.exec(value);
|
|
130
|
+
if (!match)
|
|
131
|
+
return undefined;
|
|
132
|
+
const amount = Number(match[1]);
|
|
133
|
+
return match[2] === 'rem' ? amount * 16 : amount;
|
|
134
|
+
}
|
|
135
|
+
/** The two named steps either side of a length, for the message. */
|
|
136
|
+
function neighbours(px, steps, prefix) {
|
|
137
|
+
const sizes = Object.keys(steps).map(Number).sort((a, b) => a - b);
|
|
138
|
+
const below = [...sizes].reverse().find((size) => size < px);
|
|
139
|
+
const above = sizes.find((size) => size > px);
|
|
140
|
+
return [below, above]
|
|
141
|
+
.filter((size) => size !== undefined)
|
|
142
|
+
.map((size) => `\`${prefix}-${steps[size]}\` (${size}px)`)
|
|
143
|
+
.join(' or ');
|
|
144
|
+
}
|
|
145
|
+
/** The spacing step for a length: exact at half a step (2px) or finer as a
|
|
146
|
+
* named step; `hair` for the one named in-between. */
|
|
147
|
+
function spacingStep(px) {
|
|
148
|
+
if (Math.abs(px) === 3)
|
|
149
|
+
return 'hair';
|
|
150
|
+
if (px % 2 !== 0)
|
|
151
|
+
return undefined;
|
|
152
|
+
return String(Math.abs(px) / 4);
|
|
153
|
+
}
|
|
154
|
+
/** What is off the scale in this string. Exported for the gate that holds the
|
|
155
|
+
* set itself to the same rule, and for the test: the matching is the rule. */
|
|
156
|
+
export function findArbitraryScale(text) {
|
|
157
|
+
const findings = [];
|
|
158
|
+
for (const match of text.matchAll(CLASS)) {
|
|
159
|
+
const [whole, variants = '', minus, utility, value] = match;
|
|
160
|
+
const at = match.index ?? 0;
|
|
161
|
+
if (utility === 'tracking') {
|
|
162
|
+
if (/var\(|calc\(/.test(value))
|
|
163
|
+
continue;
|
|
164
|
+
const step = TRACKING_STEPS[value.replace(/em$/, '')];
|
|
165
|
+
findings.push({
|
|
166
|
+
index: at,
|
|
167
|
+
text: whole,
|
|
168
|
+
message: step
|
|
169
|
+
? `\`${whole}\` is \`tracking-${step}\` written the long way.`
|
|
170
|
+
: `\`${whole}\` is tracking chosen by eye. The scale has \`tracking-caption\` for uppercase captions and \`tracking-tight\` for large type; use one, or say on this line why neither fits.`,
|
|
171
|
+
fix: step ? `${variants}tracking-${step}` : undefined,
|
|
172
|
+
});
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
const px = pixels(value);
|
|
176
|
+
// Computed, relative or proportional: a relationship, not a length.
|
|
177
|
+
if (px === undefined)
|
|
178
|
+
continue;
|
|
179
|
+
if (utility === 'text') {
|
|
180
|
+
const step = TYPE_STEPS[px];
|
|
181
|
+
findings.push({
|
|
182
|
+
index: at,
|
|
183
|
+
text: whole,
|
|
184
|
+
message: step
|
|
185
|
+
? `\`${whole}\` is \`text-${step}\` written the long way.`
|
|
186
|
+
: `\`${whole}\` is off the type scale. The nearest steps are ${neighbours(px, TYPE_STEPS, 'text')}; take one, or say on this line why neither can carry it.`,
|
|
187
|
+
fix: step ? `${variants}text-${step}` : undefined,
|
|
188
|
+
});
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (RADIUS.includes(utility)) {
|
|
192
|
+
const step = RADIUS_STEPS[px];
|
|
193
|
+
findings.push({
|
|
194
|
+
index: at,
|
|
195
|
+
text: whole,
|
|
196
|
+
message: step
|
|
197
|
+
? `\`${whole}\` is \`${utility}-${step}\` written the long way.`
|
|
198
|
+
: `\`${whole}\` is off the radius scale. The nearest steps are ${neighbours(px, RADIUS_STEPS, utility)}; take one, or say on this line why neither fits.`,
|
|
199
|
+
fix: step ? `${variants}${utility}-${step}` : undefined,
|
|
200
|
+
});
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
const step = spacingStep(px);
|
|
204
|
+
// `-mt-[2px]` and `mt-[-2px]` are both a pull of two pixels; both minus
|
|
205
|
+
// signs together are a push. The step is written with one sign, outside.
|
|
206
|
+
const sign = (minus === '-') !== px < 0 ? '-' : '';
|
|
207
|
+
findings.push({
|
|
208
|
+
index: at,
|
|
209
|
+
text: whole,
|
|
210
|
+
message: step
|
|
211
|
+
? `\`${whole}\` is \`${sign}${utility}-${step}\` written the long way.`
|
|
212
|
+
: `\`${whole}\` is a length chosen by eye, between two steps of the scale. Take a step, or say on this line why none can carry it.`,
|
|
213
|
+
fix: step ? `${variants}${sign}${utility}-${step}` : undefined,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
return findings;
|
|
217
|
+
}
|
|
218
|
+
export const noArbitraryScale = {
|
|
219
|
+
meta: {
|
|
220
|
+
type: 'suggestion',
|
|
221
|
+
fixable: 'code',
|
|
222
|
+
docs: {
|
|
223
|
+
description: 'Forbid fixed lengths chosen by eye in class names; sizes come from the type, radius and spacing scales.',
|
|
224
|
+
url: 'https://lacodda.github.io/dowel/guides/linting/',
|
|
225
|
+
},
|
|
226
|
+
schema: [],
|
|
227
|
+
},
|
|
228
|
+
create(context) {
|
|
229
|
+
const source = context.sourceCode;
|
|
230
|
+
return {
|
|
231
|
+
Literal(node) {
|
|
232
|
+
if (typeof node.value !== 'string')
|
|
233
|
+
return;
|
|
234
|
+
const raw = source.getText(node);
|
|
235
|
+
// A fix is written into the source, so it is offered only where the
|
|
236
|
+
// source is the value between two quotes - an escape inside the
|
|
237
|
+
// literal would shift every offset after it.
|
|
238
|
+
const fixable = raw.slice(1, -1) === node.value;
|
|
239
|
+
const start = node.range[0] + 1;
|
|
240
|
+
for (const finding of findArbitraryScale(node.value)) {
|
|
241
|
+
context.report({
|
|
242
|
+
node,
|
|
243
|
+
message: finding.message,
|
|
244
|
+
fix: fixable && finding.fix !== undefined
|
|
245
|
+
? (fixer) => fixer.replaceTextRange([start + finding.index, start + finding.index + finding.text.length], finding.fix)
|
|
246
|
+
: null,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
TemplateElement(node) {
|
|
251
|
+
// Reported, not fixed: a template element's range includes the
|
|
252
|
+
// delimiters around it, which differ by position in the template.
|
|
253
|
+
const text = node.value.cooked ?? node.value.raw;
|
|
254
|
+
for (const finding of findArbitraryScale(text)) {
|
|
255
|
+
context.report({ node: node, message: finding.message });
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
//# sourceMappingURL=no-arbitrary-scale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-arbitrary-scale.js","sourceRoot":"","sources":["../../src/eslint/no-arbitrary-scale.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-raw-button.d.ts","sourceRoot":"","sources":["../../src/eslint/no-raw-button.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AA6BlC,eAAO,MAAM,WAAW,EAAE,IAAI,CAAC,UAwB9B,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `no-raw-button` - a screen presses Buttons, not `<button>`s.
|
|
3
|
+
*
|
|
4
|
+
* A raw `<button className="…">` looks like the cheap way to a small control,
|
|
5
|
+
* and it quietly drops everything Button knows: `type="button"`, so it does
|
|
6
|
+
* not submit the form it sits in; the focus ring; the disabled look, and a
|
|
7
|
+
* disabled reason a pointer and a keyboard can reach; the size of an icon
|
|
8
|
+
* inside it; the control row that makes it the height of the field beside it
|
|
9
|
+
* and follows `data-density`. kilna had 95 of them in 42 files, and each one
|
|
10
|
+
* got some of that right and a different some wrong - three sizes of chip,
|
|
11
|
+
* five recipes for the same toggle, a trash row whose reason was dead.
|
|
12
|
+
*
|
|
13
|
+
* The set has a primitive for each shape those buttons were: Button in six
|
|
14
|
+
* variants for an action (`icon` for a glyph, `link` for one that reads as a
|
|
15
|
+
* link), RowButton for a row of a list, Chip with `pressed` for a switch,
|
|
16
|
+
* SegmentedControl for one of a few. Where a primitive wants a trigger it
|
|
17
|
+
* takes `render={<Button />}`.
|
|
18
|
+
*
|
|
19
|
+
* The primitives themselves are made of `<button>`s, so the recommended
|
|
20
|
+
* config leaves the directory a product keeps them in - `ui/` - alone.
|
|
21
|
+
*/
|
|
22
|
+
const MESSAGE = 'A raw `<button>` forgets what Button knows: `type="button"`, the focus ring, the disabled look and its ' +
|
|
23
|
+
'reason, the icon size and the control height. Use Button (variants ghost, icon, link, ...), RowButton for a ' +
|
|
24
|
+
'row of a list, Chip with `pressed` for a switch, or `render={<Button />}` where a primitive takes a trigger.';
|
|
25
|
+
export const noRawButton = {
|
|
26
|
+
meta: {
|
|
27
|
+
type: 'suggestion',
|
|
28
|
+
docs: {
|
|
29
|
+
description: 'Forbid the native `<button>` element outside the primitives; screens use Button and its kin.',
|
|
30
|
+
url: 'https://lacodda.github.io/dowel/guides/linting/',
|
|
31
|
+
},
|
|
32
|
+
schema: [],
|
|
33
|
+
messages: { raw: MESSAGE },
|
|
34
|
+
},
|
|
35
|
+
create(context) {
|
|
36
|
+
return {
|
|
37
|
+
// `JSXOpeningElement` is not in ESLint's own AST types - the JSX nodes
|
|
38
|
+
// come from the TypeScript parser - so the visitor is declared by name
|
|
39
|
+
// and the node is read structurally, as in `no-native-select`.
|
|
40
|
+
JSXOpeningElement(node) {
|
|
41
|
+
const name = node.name;
|
|
42
|
+
// Lower case is the HTML element; `<Button>` is the component and
|
|
43
|
+
// `<Base.Button>` is somebody's namespace.
|
|
44
|
+
if (name?.type !== 'JSXIdentifier' || name.name !== 'button')
|
|
45
|
+
return;
|
|
46
|
+
context.report({ node, messageId: 'raw' });
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=no-raw-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-raw-button.js","sourceRoot":"","sources":["../../src/eslint/no-raw-button.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,OAAO,GACX,yGAAyG;IACzG,8GAA8G;IAC9G,8GAA8G,CAAA;AAEhH,MAAM,CAAC,MAAM,WAAW,GAAoB;IAC1C,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,8FAA8F;YAC3G,GAAG,EAAE,iDAAiD;SACvD;QACD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;KAC3B;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,uEAAuE;YACvE,uEAAuE;YACvE,+DAA+D;YAC/D,iBAAiB,CAAC,IAAe;gBAC/B,MAAM,IAAI,GAAI,IAA+D,CAAC,IAAI,CAAA;gBAClF,kEAAkE;gBAClE,2CAA2C;gBAC3C,IAAI,IAAI,EAAE,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAM;gBACpE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;YAC5C,CAAC;SACmB,CAAA;IACxB,CAAC;CACF,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -74,7 +74,7 @@ export declare const sizeTokens: readonly ["size-target", "spacing-hair", "row-c
|
|
|
74
74
|
* token compiles to nothing and the button loses its width with no error
|
|
75
75
|
* anywhere. Every measurement here is one axis.
|
|
76
76
|
*/
|
|
77
|
-
export declare const chromeTokens: readonly ["spacing-titlebar", "spacing-rail", "spacing-window-button", "spacing-resize-edge", "spacing-resize-corner"];
|
|
77
|
+
export declare const chromeTokens: readonly ["spacing-titlebar", "spacing-rail", "spacing-rail-compact", "spacing-window-button", "spacing-resize-edge", "spacing-resize-corner"];
|
|
78
78
|
/** Stacking order. Not a Tailwind namespace either: a component reads these
|
|
79
79
|
* as `z-index: var(--z-modal)`. The names are a promise about what covers
|
|
80
80
|
* what, and the values only mean anything relative to each other. */
|
|
@@ -83,7 +83,7 @@ export declare const layerTokens: readonly ["z-popup", "z-sticky", "z-menu", "z-
|
|
|
83
83
|
* vocabulary - a docs page, an inspector, the JSON export, the test that keeps
|
|
84
84
|
* this file honest against the stylesheet - reads this, so a new category
|
|
85
85
|
* cannot be added and quietly missed by half of them. */
|
|
86
|
-
export declare const allTokens: readonly ["bg", "raise", "soft", "softer", "line", "line-2", "text", "dim", "faint", "accent", "accent-2", "accent-soft", "on-accent", "on-good", "on-warn", "on-bad", "on-info", "good", "good-soft", "warn", "warn-soft", "bad", "bad-soft", "info", "info-soft", "series-1", "series-2", "series-3", "series-4", "series-5", "series-6", "series-7", "series-8", "scale-100", "scale-200", "scale-300", "scale-400", "scale-500", "scale-600", "scale-700", "chart-grid", "chart-axis", "heat-1", "heat-2", "heat-3", "heat-4", "heat-5", "syntax-keyword", "syntax-string", "syntax-number", "syntax-comment", "syntax-name", "syntax-type", "syntax-punctuation", "syntax-meta", "accent-base", "neutral-base", "neutral-tint", "neutral-tint-strong", "ground", "ink", "shadow-lift", "shadow-raise", "shadow-float", "radius-xs", "radius-sm", "radius-md", "radius-lg", "radius-xl", "radius-2xl", "radius-inner", "font-sans", "font-mono", "text-2xs", "text-xs", "text-sm", "text-base", "text-lg", "text-xl", "text-2xl", "font-weight-normal", "font-weight-medium", "font-weight-semibold", "tracking-caption", "tracking-tight", "icon-stroke", "duration-quick", "duration-base", "duration-slow", "ease-out", "ease-in-out", "size-target", "spacing-hair", "row-control", "row-control-sm", "row-control-lg", "row-cell", "spacing-titlebar", "spacing-rail", "spacing-window-button", "spacing-resize-edge", "spacing-resize-corner", "z-popup", "z-sticky", "z-menu", "z-floating", "z-overlay", "z-modal", "z-palette", "z-toast"];
|
|
86
|
+
export declare const allTokens: readonly ["bg", "raise", "soft", "softer", "line", "line-2", "text", "dim", "faint", "accent", "accent-2", "accent-soft", "on-accent", "on-good", "on-warn", "on-bad", "on-info", "good", "good-soft", "warn", "warn-soft", "bad", "bad-soft", "info", "info-soft", "series-1", "series-2", "series-3", "series-4", "series-5", "series-6", "series-7", "series-8", "scale-100", "scale-200", "scale-300", "scale-400", "scale-500", "scale-600", "scale-700", "chart-grid", "chart-axis", "heat-1", "heat-2", "heat-3", "heat-4", "heat-5", "syntax-keyword", "syntax-string", "syntax-number", "syntax-comment", "syntax-name", "syntax-type", "syntax-punctuation", "syntax-meta", "accent-base", "neutral-base", "neutral-tint", "neutral-tint-strong", "ground", "ink", "shadow-lift", "shadow-raise", "shadow-float", "radius-xs", "radius-sm", "radius-md", "radius-lg", "radius-xl", "radius-2xl", "radius-inner", "font-sans", "font-mono", "text-2xs", "text-xs", "text-sm", "text-base", "text-lg", "text-xl", "text-2xl", "font-weight-normal", "font-weight-medium", "font-weight-semibold", "tracking-caption", "tracking-tight", "icon-stroke", "duration-quick", "duration-base", "duration-slow", "ease-out", "ease-in-out", "size-target", "spacing-hair", "row-control", "row-control-sm", "row-control-lg", "row-cell", "spacing-titlebar", "spacing-rail", "spacing-rail-compact", "spacing-window-button", "spacing-resize-edge", "spacing-resize-corner", "z-popup", "z-sticky", "z-menu", "z-floating", "z-overlay", "z-modal", "z-palette", "z-toast"];
|
|
87
87
|
export type ColorToken = (typeof colorTokens)[number];
|
|
88
88
|
export type ThemeParameter = (typeof themeParameters)[number];
|
|
89
89
|
export type ElevationToken = (typeof elevationTokens)[number];
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AACvE,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,SAAS,EACT,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,aAAa,EACb,QAAQ,EACR,cAAc,EACd,KAAK,KAAK,GACX,MAAM,YAAY,CAAA;AAEnB;6DAC6D;AAC7D,eAAO,MAAM,WAAW,qQA0Bd,CAAA;AAEV;;;;4EAI4E;AAC5E,eAAO,MAAM,YAAY,2GASf,CAAA;AAEV;kDACkD;AAClD,eAAO,MAAM,WAAW,sGAQd,CAAA;AAEV;4CAC4C;AAC5C,eAAO,MAAM,WAAW,uCAAwC,CAAA;AAEhE;;;;mEAImE;AACnE,eAAO,MAAM,UAAU,6DAA8D,CAAA;AAErF;;;;;;;oDAOoD;AACpD,eAAO,MAAM,YAAY,oJASf,CAAA;AAEV;oEACoE;AACpE,eAAO,MAAM,eAAe,kGAOlB,CAAA;AAEV;yDACyD;AACzD,eAAO,MAAM,eAAe,0DAA2D,CAAA;AAEvF;8DAC8D;AAC9D,eAAO,MAAM,YAAY,0GAQf,CAAA;AAEV;;+DAE+D;AAC/D,eAAO,MAAM,UAAU,+OAgBb,CAAA;AAEV;;0CAE0C;AAC1C,eAAO,MAAM,YAAY,0FAMf,CAAA;AAEV;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,yGAOb,CAAA;AAEV;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/palettes/atlas.json
CHANGED
package/dist/palettes/dowel.json
CHANGED
package/dist/palettes/efema.json
CHANGED
package/dist/palettes/furca.json
CHANGED
package/dist/palettes/kasl.json
CHANGED