dowel-ui 0.23.0 → 0.25.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/theme.css CHANGED
@@ -80,6 +80,133 @@
80
80
  --bad-soft: color-mix(in oklab, var(--bad) 14%, transparent);
81
81
  --info-soft: color-mix(in oklab, var(--info) 15%, transparent);
82
82
 
83
+ /* Series colours, for charts.
84
+ *
85
+ * Like the status hues and unlike everything else here, these do NOT follow
86
+ * the product accent - and that is the whole decision. A series is a
87
+ * property of the data, not of the product showing it; a palette derived
88
+ * from the accent would paint the same series differently in kilna and in
89
+ * kasl-server, which is the one thing a series colour must never do.
90
+ *
91
+ * Deriving them from the accent was measured, not guessed: rotating the hue
92
+ * by fixed angles put the best candidate at Delta-E 12.1 from the product's
93
+ * own accent with adjacent pairs at 9.8, and threw 46 of 152 colours outside
94
+ * sRGB. The fixed palette does better on both counts.
95
+ *
96
+ * The cost of fixing them is stated plainly: 13 of the line's 19 accents sit
97
+ * within Delta-E 8 of some slot (lyrid 2.7, atlas 3.1, turnout 3.2). A chart
98
+ * shows one accent, so this is survivable - but it is exactly why identity is
99
+ * carried by the legend and by direct labels, never by hue on its own. The
100
+ * components of this block enforce that; it is not advice.
101
+ *
102
+ * Assigned in order, 1..8, and never cycled: a ninth series folds into
103
+ * "other", or the chart becomes small multiples. The order is the
104
+ * colour-blind-safety mechanism - the worst adjacent pair is Delta-E 8.4
105
+ * under simulated protanopia - so re-ordering these breaks a gate.
106
+ *
107
+ * Slot 8 is the line's own value rather than the reference palette's. The
108
+ * reference red sat Delta-E 1.9 from `--bad`, which would have let a series
109
+ * impersonate a status; this one clears every status by 15 and costs
110
+ * nothing, the worst adjacent pair being unchanged.
111
+ *
112
+ * Some slots sit below 3:1 against the surface. That is allowed only because
113
+ * the relief ships with them: visible values, or the table view.
114
+ */
115
+ --series-1: #3987e5;
116
+ --series-2: #d95926;
117
+ --series-3: #199e70;
118
+ --series-4: #c98500;
119
+ --series-5: #d55181;
120
+ --series-6: #008300;
121
+ --series-7: #9085e9;
122
+ --series-8: #a3215a;
123
+
124
+ /* Magnitude rather than identity: one hue, light to dark. A heatmap cell
125
+ * reads this. The lightest step is allowed to recede toward the surface,
126
+ * because "near zero" should; an ordered-but-discrete scale (tiers, funnel
127
+ * stages) starts at 300 instead, where the contrast still holds. */
128
+ --scale-100: #0d366b;
129
+ --scale-200: #184f95;
130
+ --scale-300: #256abf;
131
+ --scale-400: #2a78d6;
132
+ --scale-500: #3987e5;
133
+ --scale-600: #5598e7;
134
+ --scale-700: #86b6ef;
135
+
136
+ /* The chart's own furniture. A gridline that competes with the data is drawn
137
+ * wrong, so it is quieter than `--line`; the axis is the one that may be
138
+ * seen. */
139
+ --chart-grid: rgb(255 255 255 / 0.06);
140
+ --chart-axis: rgb(255 255 255 / 0.14);
141
+
142
+ /* Heat, for a grid of cells where colour is the only thing carrying the
143
+ * value - a year of activity, a month of a team's hours.
144
+ *
145
+ * Five discrete steps rather than the seven of `--scale-*`, and a separate
146
+ * set rather than a slice of them, because the two answer different
147
+ * questions. `--scale-*` is sequential: a continuous magnitude, where the
148
+ * lightest step means "near zero" and may recede toward the surface.
149
+ * Heat is ordinal: five shades a reader tells apart at a glance and matches
150
+ * against a legend, which needs wider gaps between them (no slice of
151
+ * `--scale-*` clears the 0.06 lightness step - they sit 0.047 apart) and a
152
+ * bottom step that stays distinct from an empty cell.
153
+ *
154
+ * That last one is the whole point. A heatmap cell has more meanings than a
155
+ * number: nothing recorded, a day still running, a day outside the data, and
156
+ * a value. If the faintest value looks like the empty cell, the grid says
157
+ * somebody did nothing on a day nobody reported - and `--heat-1` clears the
158
+ * empty square by 2.1:1 so it cannot.
159
+ *
160
+ * Fixed, like the series and unlike almost everything else here. Derived
161
+ * from the accent - as the first consumer did - the faintest step sat 1.3:1
162
+ * from the empty cell for half the line, and pinning lightness instead ran
163
+ * out of sRGB: the darkest accents cannot reach the top of the ramp at their
164
+ * own chroma.
165
+ */
166
+ --heat-1: #28528e;
167
+ --heat-2: #3a65a3;
168
+ --heat-3: #4d78b7;
169
+ --heat-4: #608ccd;
170
+ --heat-5: #73a0e2;
171
+
172
+ /* Syntax, for code shown inside a product.
173
+ *
174
+ * Eight kinds rather than the fifty a highlighter's theme names, because
175
+ * these are the distinctions that survive across languages: a keyword, a
176
+ * literal string, a number, a comment, an identifier, a type, punctuation,
177
+ * and the metadata around the code (a decorator, an attribute, a prompt).
178
+ * Anything finer is a grammar's own vocabulary and does not travel.
179
+ *
180
+ * Fixed, like the series and the heat ramps, and for the same reason: code
181
+ * is not a property of the product showing it, and `if` should not be
182
+ * magenta in kilna and cobalt in kasl-server.
183
+ *
184
+ * Chosen against the surface code actually sits on - `--soft` over `--bg`,
185
+ * which is what CodeBlock and `.prose pre` draw - and every slot clears
186
+ * 4.5:1 AS TEXT in both themes. That threshold, not the 3:1 the series are
187
+ * held to, is the whole reason these exist separately: the series palette
188
+ * was measured here first and five of its eight light values sat under 3:1,
189
+ * one at 1.90:1. A filled bar can be pale; a 12px glyph cannot.
190
+ *
191
+ * These are deliberately NOT held to the colour-blind floor the series are.
192
+ * A series colour is the identity of its mark - lose the hue and the data is
193
+ * gone. Syntax colour is a second reading of what the text already says in
194
+ * full: a keyword is a keyword by its spelling, and CodeBlock's default
195
+ * renders no colour at all and stays readable. `syntax.test.ts` says so in
196
+ * place, so the omission is not mistaken for an oversight.
197
+ *
198
+ * `comment` is the quietest on purpose - it is the one kind a reader is
199
+ * meant to be able to skip - and still clears the threshold.
200
+ */
201
+ --syntax-keyword: #c792ea;
202
+ --syntax-string: #9ccc65;
203
+ --syntax-number: #f78c6c;
204
+ --syntax-comment: #9e99a6;
205
+ --syntax-name: #82aaff;
206
+ --syntax-type: #4dd0b1;
207
+ --syntax-punctuation: #c4bfcb;
208
+ --syntax-meta: #f0a868;
209
+
83
210
  /* Elevation, three steps. The products had one shadow and used it for
84
211
  * everything that leaves the flow - a toast, a dropdown and a modal all
85
212
  * floated by the same amount, so a modal never felt further away than the
@@ -143,6 +270,51 @@
143
270
  --bad-soft: color-mix(in oklab, var(--bad) 12%, transparent);
144
271
  --info-soft: color-mix(in oklab, var(--info) 11%, transparent);
145
272
 
273
+ /* Series and scale, stepped for the light surface - the same eight hues
274
+ * chosen again against this ground, not the dark values lightened. The dark
275
+ * block says why these do not follow the product accent. */
276
+ --series-1: #2a78d6;
277
+ --series-2: #eb6834;
278
+ --series-3: #1baf7a;
279
+ --series-4: #eda100;
280
+ --series-5: #e87ba4;
281
+ --series-6: #008300;
282
+ --series-7: #4a3aa7;
283
+ --series-8: #85284d;
284
+
285
+ --scale-100: #cde2fb;
286
+ --scale-200: #9ec5f4;
287
+ --scale-300: #6da7ec;
288
+ --scale-400: #3987e5;
289
+ --scale-500: #2a78d6;
290
+ --scale-600: #1c5cab;
291
+ --scale-700: #104281;
292
+
293
+ --chart-grid: oklch(from color-mix(in oklab, var(--neutral-base) 30%, #181420) l c h / 0.08);
294
+ --chart-axis: oklch(from color-mix(in oklab, var(--neutral-base) 30%, #181420) l c h / 0.18);
295
+
296
+ /* The same five steps chosen again for the light ground, running the other
297
+ * way: here "more" is darker. See the dark block for why heat is its own
298
+ * ramp and not a slice of `--scale-*`. */
299
+ --heat-1: #84a8fd;
300
+ --heat-2: #7193e7;
301
+ --heat-3: #5e7fd1;
302
+ --heat-4: #4c6cbb;
303
+ --heat-5: #3b58a6;
304
+
305
+ /* The same eight kinds chosen again for the light ground - not the dark
306
+ * values darkened. Each clears 4.5:1 as text against `--soft` over this
307
+ * theme's `--bg`; the dark block says why syntax is its own palette and
308
+ * why it is not held to the colour-blind floor. */
309
+ --syntax-keyword: #7c3aad;
310
+ --syntax-string: #276c2b;
311
+ --syntax-number: #b5451b;
312
+ --syntax-comment: #6f6b78;
313
+ --syntax-name: #1a5fb4;
314
+ --syntax-type: #00695c;
315
+ --syntax-punctuation: #4a4753;
316
+ --syntax-meta: #9c4a00;
317
+
146
318
  --shadow-lift: 0 2px 8px rgb(30 24 38 / 0.08);
147
319
  --shadow-raise: 0 10px 30px rgb(30 24 38 / 0.14);
148
320
  --shadow-float: 0 24px 60px rgb(30 24 38 / 0.18);
@@ -182,6 +354,51 @@
182
354
  --bad-soft: color-mix(in oklab, var(--bad) 12%, transparent);
183
355
  --info-soft: color-mix(in oklab, var(--info) 11%, transparent);
184
356
 
357
+ /* Series and scale, stepped for the light surface - the same eight hues
358
+ * chosen again against this ground, not the dark values lightened. The dark
359
+ * block says why these do not follow the product accent. */
360
+ --series-1: #2a78d6;
361
+ --series-2: #eb6834;
362
+ --series-3: #1baf7a;
363
+ --series-4: #eda100;
364
+ --series-5: #e87ba4;
365
+ --series-6: #008300;
366
+ --series-7: #4a3aa7;
367
+ --series-8: #85284d;
368
+
369
+ --scale-100: #cde2fb;
370
+ --scale-200: #9ec5f4;
371
+ --scale-300: #6da7ec;
372
+ --scale-400: #3987e5;
373
+ --scale-500: #2a78d6;
374
+ --scale-600: #1c5cab;
375
+ --scale-700: #104281;
376
+
377
+ --chart-grid: oklch(from color-mix(in oklab, var(--neutral-base) 30%, #181420) l c h / 0.08);
378
+ --chart-axis: oklch(from color-mix(in oklab, var(--neutral-base) 30%, #181420) l c h / 0.18);
379
+
380
+ /* The same five steps chosen again for the light ground, running the other
381
+ * way: here "more" is darker. See the dark block for why heat is its own
382
+ * ramp and not a slice of `--scale-*`. */
383
+ --heat-1: #84a8fd;
384
+ --heat-2: #7193e7;
385
+ --heat-3: #5e7fd1;
386
+ --heat-4: #4c6cbb;
387
+ --heat-5: #3b58a6;
388
+
389
+ /* The same eight kinds chosen again for the light ground - not the dark
390
+ * values darkened. Each clears 4.5:1 as text against `--soft` over this
391
+ * theme's `--bg`; the dark block says why syntax is its own palette and
392
+ * why it is not held to the colour-blind floor. */
393
+ --syntax-keyword: #7c3aad;
394
+ --syntax-string: #276c2b;
395
+ --syntax-number: #b5451b;
396
+ --syntax-comment: #6f6b78;
397
+ --syntax-name: #1a5fb4;
398
+ --syntax-type: #00695c;
399
+ --syntax-punctuation: #4a4753;
400
+ --syntax-meta: #9c4a00;
401
+
185
402
  --shadow-lift: 0 2px 8px rgb(30 24 38 / 0.08);
186
403
  --shadow-raise: 0 10px 30px rgb(30 24 38 / 0.14);
187
404
  --shadow-float: 0 24px 60px rgb(30 24 38 / 0.18);
@@ -275,6 +492,46 @@
275
492
  --color-info: var(--info);
276
493
  --color-info-soft: var(--info-soft);
277
494
 
495
+ /* Charts. `bg-series-3`, `fill-series-3`, `stroke-scale-500` - the same
496
+ * utilities the rest of the vocabulary gets, so a chart is written in
497
+ * tokens like everything else and `dowel/no-raw-color` can hold it to
498
+ * that. */
499
+ --color-series-1: var(--series-1);
500
+ --color-series-2: var(--series-2);
501
+ --color-series-3: var(--series-3);
502
+ --color-series-4: var(--series-4);
503
+ --color-series-5: var(--series-5);
504
+ --color-series-6: var(--series-6);
505
+ --color-series-7: var(--series-7);
506
+ --color-series-8: var(--series-8);
507
+ --color-scale-100: var(--scale-100);
508
+ --color-scale-200: var(--scale-200);
509
+ --color-scale-300: var(--scale-300);
510
+ --color-scale-400: var(--scale-400);
511
+ --color-scale-500: var(--scale-500);
512
+ --color-scale-600: var(--scale-600);
513
+ --color-scale-700: var(--scale-700);
514
+ --color-chart-grid: var(--chart-grid);
515
+ --color-chart-axis: var(--chart-axis);
516
+ --color-heat-1: var(--heat-1);
517
+ --color-heat-2: var(--heat-2);
518
+ --color-heat-3: var(--heat-3);
519
+ --color-heat-4: var(--heat-4);
520
+ --color-heat-5: var(--heat-5);
521
+
522
+ /* Syntax, so a highlighted token is written `text-syntax-keyword` like every
523
+ * other colour in the system, and `dowel/no-raw-color` can hold it to that.
524
+ * A highlighter's own stylesheet - which writes hex values into class names
525
+ * of its own choosing - is what this replaces. */
526
+ --color-syntax-keyword: var(--syntax-keyword);
527
+ --color-syntax-string: var(--syntax-string);
528
+ --color-syntax-number: var(--syntax-number);
529
+ --color-syntax-comment: var(--syntax-comment);
530
+ --color-syntax-name: var(--syntax-name);
531
+ --color-syntax-type: var(--syntax-type);
532
+ --color-syntax-punctuation: var(--syntax-punctuation);
533
+ --color-syntax-meta: var(--syntax-meta);
534
+
278
535
  /* Kept because they are not palette choices: a hairline is `transparent`,
279
536
  * an SVG follows `currentColor`, and pure black and white are what an
280
537
  * overlay scrim and a print sheet are made of. */
package/dist/tokens.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "$description": "The dowel token vocabulary: the scales every product of the lacodda line is drawn on. Colours are omitted - they are derived per product from its own accent.",
2
+ "$description": "The dowel token vocabulary: the scales every product of the lacodda line is drawn on. Most colours are omitted - they are derived per product from its own accent - except the five that are fixed for the whole line: the chart series, the magnitude scale, the status hues, the heat ramp and the syntax colours.",
3
3
  "radius": {
4
4
  "$type": "dimension",
5
5
  "$description": "Corner radius. `md` is the control radius: inputs, buttons, list rows.",
@@ -40,6 +40,238 @@
40
40
  }
41
41
  }
42
42
  },
43
+ "series": {
44
+ "$type": "color",
45
+ "$description": "Chart series, assigned 1..8 in order and never cycled. Alone among the colours here they do not follow the product accent: a series belongs to the data. The order is what keeps adjacent slots apart under colour blindness, so it is not a display order.",
46
+ "dark": {
47
+ "series-1": {
48
+ "$value": "#3987e5"
49
+ },
50
+ "series-2": {
51
+ "$value": "#d95926"
52
+ },
53
+ "series-3": {
54
+ "$value": "#199e70"
55
+ },
56
+ "series-4": {
57
+ "$value": "#c98500"
58
+ },
59
+ "series-5": {
60
+ "$value": "#d55181"
61
+ },
62
+ "series-6": {
63
+ "$value": "#008300"
64
+ },
65
+ "series-7": {
66
+ "$value": "#9085e9"
67
+ },
68
+ "series-8": {
69
+ "$value": "#a3215a"
70
+ }
71
+ },
72
+ "light": {
73
+ "series-1": {
74
+ "$value": "#2a78d6"
75
+ },
76
+ "series-2": {
77
+ "$value": "#eb6834"
78
+ },
79
+ "series-3": {
80
+ "$value": "#1baf7a"
81
+ },
82
+ "series-4": {
83
+ "$value": "#eda100"
84
+ },
85
+ "series-5": {
86
+ "$value": "#e87ba4"
87
+ },
88
+ "series-6": {
89
+ "$value": "#008300"
90
+ },
91
+ "series-7": {
92
+ "$value": "#4a3aa7"
93
+ },
94
+ "series-8": {
95
+ "$value": "#85284d"
96
+ }
97
+ }
98
+ },
99
+ "scale": {
100
+ "$type": "color",
101
+ "$description": "Magnitude: one hue, running away from the ground as the value grows. Heatmap cells read this. For an ordered-but-discrete scale start at 300, where contrast still holds.",
102
+ "dark": {
103
+ "scale-100": {
104
+ "$value": "#0d366b"
105
+ },
106
+ "scale-200": {
107
+ "$value": "#184f95"
108
+ },
109
+ "scale-300": {
110
+ "$value": "#256abf"
111
+ },
112
+ "scale-400": {
113
+ "$value": "#2a78d6"
114
+ },
115
+ "scale-500": {
116
+ "$value": "#3987e5"
117
+ },
118
+ "scale-600": {
119
+ "$value": "#5598e7"
120
+ },
121
+ "scale-700": {
122
+ "$value": "#86b6ef"
123
+ }
124
+ },
125
+ "light": {
126
+ "scale-100": {
127
+ "$value": "#cde2fb"
128
+ },
129
+ "scale-200": {
130
+ "$value": "#9ec5f4"
131
+ },
132
+ "scale-300": {
133
+ "$value": "#6da7ec"
134
+ },
135
+ "scale-400": {
136
+ "$value": "#3987e5"
137
+ },
138
+ "scale-500": {
139
+ "$value": "#2a78d6"
140
+ },
141
+ "scale-600": {
142
+ "$value": "#1c5cab"
143
+ },
144
+ "scale-700": {
145
+ "$value": "#104281"
146
+ }
147
+ }
148
+ },
149
+ "status": {
150
+ "$type": "color",
151
+ "$description": "Meaning rather than decoration, and the same in every product of the line. Never the only carrier: a badge shows an icon and a word as well, so the message survives a monochrome screen.",
152
+ "dark": {
153
+ "good": {
154
+ "$value": "#45d18f"
155
+ },
156
+ "warn": {
157
+ "$value": "#e8b13f"
158
+ },
159
+ "bad": {
160
+ "$value": "#ef6a6a"
161
+ },
162
+ "info": {
163
+ "$value": "#4cc4e0"
164
+ }
165
+ },
166
+ "light": {
167
+ "good": {
168
+ "$value": "#0c8554"
169
+ },
170
+ "warn": {
171
+ "$value": "#9a6b0c"
172
+ },
173
+ "bad": {
174
+ "$value": "#c93b3b"
175
+ },
176
+ "info": {
177
+ "$value": "#0d7f9c"
178
+ }
179
+ }
180
+ },
181
+ "heat": {
182
+ "$type": "color",
183
+ "$description": "Heat: five ordinal steps for a grid where colour is the only thing carrying the value. Its own ramp rather than a slice of the scale, because the faintest step has to stay distinct from an empty cell.",
184
+ "dark": {
185
+ "heat-1": {
186
+ "$value": "#28528e"
187
+ },
188
+ "heat-2": {
189
+ "$value": "#3a65a3"
190
+ },
191
+ "heat-3": {
192
+ "$value": "#4d78b7"
193
+ },
194
+ "heat-4": {
195
+ "$value": "#608ccd"
196
+ },
197
+ "heat-5": {
198
+ "$value": "#73a0e2"
199
+ }
200
+ },
201
+ "light": {
202
+ "heat-1": {
203
+ "$value": "#84a8fd"
204
+ },
205
+ "heat-2": {
206
+ "$value": "#7193e7"
207
+ },
208
+ "heat-3": {
209
+ "$value": "#5e7fd1"
210
+ },
211
+ "heat-4": {
212
+ "$value": "#4c6cbb"
213
+ },
214
+ "heat-5": {
215
+ "$value": "#3b58a6"
216
+ }
217
+ }
218
+ },
219
+ "syntax": {
220
+ "$type": "color",
221
+ "$description": "The eight kinds in a piece of code worth telling apart in every language. Measured as text against the hardest surface a code block sits on, which is why they are not the series palette.",
222
+ "dark": {
223
+ "syntax-keyword": {
224
+ "$value": "#c792ea"
225
+ },
226
+ "syntax-string": {
227
+ "$value": "#9ccc65"
228
+ },
229
+ "syntax-number": {
230
+ "$value": "#f78c6c"
231
+ },
232
+ "syntax-comment": {
233
+ "$value": "#9e99a6"
234
+ },
235
+ "syntax-name": {
236
+ "$value": "#82aaff"
237
+ },
238
+ "syntax-type": {
239
+ "$value": "#4dd0b1"
240
+ },
241
+ "syntax-punctuation": {
242
+ "$value": "#c4bfcb"
243
+ },
244
+ "syntax-meta": {
245
+ "$value": "#f0a868"
246
+ }
247
+ },
248
+ "light": {
249
+ "syntax-keyword": {
250
+ "$value": "#7c3aad"
251
+ },
252
+ "syntax-string": {
253
+ "$value": "#276c2b"
254
+ },
255
+ "syntax-number": {
256
+ "$value": "#b5451b"
257
+ },
258
+ "syntax-comment": {
259
+ "$value": "#6f6b78"
260
+ },
261
+ "syntax-name": {
262
+ "$value": "#1a5fb4"
263
+ },
264
+ "syntax-type": {
265
+ "$value": "#00695c"
266
+ },
267
+ "syntax-punctuation": {
268
+ "$value": "#4a4753"
269
+ },
270
+ "syntax-meta": {
271
+ "$value": "#9c4a00"
272
+ }
273
+ }
274
+ },
43
275
  "typography": {
44
276
  "$type": "typography",
45
277
  "$description": "Type steps, each with the line height it is set on.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dowel-ui",
3
- "version": "0.23.0",
3
+ "version": "0.25.0",
4
4
  "description": "The lacodda line design system: theme tokens and React primitives, distributed as a shadcn-compatible registry.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -46,6 +46,7 @@
46
46
  "import": "./dist/cli/index.js"
47
47
  },
48
48
  "./theme.css": "./dist/theme.css",
49
+ "./prose.css": "./dist/prose.css",
49
50
  "./tokens.json": "./dist/tokens.json",
50
51
  "./registry.json": "./dist/registry.json",
51
52
  "./accents/*.css": "./dist/accents/*.css"
@@ -61,13 +62,13 @@
61
62
  "react-dom": "^19.0.0"
62
63
  },
63
64
  "devDependencies": {
64
- "@types/node": "^26.4.1",
65
- "@types/react": "^19.2.18",
66
- "@types/react-dom": "^19.2.7",
65
+ "@types/node": "^26.5.1",
66
+ "@types/react": "^19.3.0",
67
+ "@types/react-dom": "^19.3.0",
67
68
  "class-variance-authority": "^0.7.1",
68
69
  "eslint": "^10.10.0",
69
- "react": "^19.2.8",
70
- "react-dom": "^19.2.8"
70
+ "react": "^19.3.0",
71
+ "react-dom": "^19.3.0"
71
72
  },
72
73
  "publishConfig": {
73
74
  "access": "public",
@@ -75,7 +76,7 @@
75
76
  },
76
77
  "dependencies": {
77
78
  "clsx": "^2.1.1",
78
- "tailwind-merge": "^3.6.0"
79
+ "tailwind-merge": "^3.7.0"
79
80
  },
80
81
  "peerDependenciesMeta": {
81
82
  "eslint": {