division-ds 0.4.1 → 0.5.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/AGENTS.md CHANGED
@@ -51,7 +51,7 @@ installs these rules into that project's `AGENTS.md`, `GEMINI.md` and Cursor rul
51
51
  `.claude/skills/` (Claude Code).
52
52
 
53
53
  An agent that supports MCP can have the docs and the same checks as tools instead:
54
- `claude mcp add division-ds -- npx -y division-ds@0.4.0 mcp` (`list_components`, `get_component`,
54
+ `claude mcp add division-ds -- npx -y division-ds@0.4.1 mcp` (`list_components`, `get_component`,
55
55
  `search`, `get_tokens`, `validate_code`, `check_contrast`, `get_add_command`,
56
56
  `get_review_checklist`).
57
57
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "division-ds",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "Checks a project that uses Division DS components (raw colours, invented tokens, touching buttons, unknown props), and serves the docs and the same checks to agents over MCP.",
5
5
  "license": "MIT",
6
6
  "author": "Victor Ilioiu",
@@ -5,57 +5,57 @@
5
5
  {
6
6
  "name": "--color-signal-50",
7
7
  "layer": "primitive",
8
- "value": "#fef5f0"
8
+ "value": "#fff4f0"
9
9
  },
10
10
  {
11
11
  "name": "--color-signal-100",
12
12
  "layer": "primitive",
13
- "value": "#fcd5c3"
13
+ "value": "#ffccb8"
14
14
  },
15
15
  {
16
16
  "name": "--color-signal-200",
17
17
  "layer": "primitive",
18
- "value": "#f9b596"
18
+ "value": "#ffa581"
19
19
  },
20
20
  {
21
21
  "name": "--color-signal-300",
22
22
  "layer": "primitive",
23
- "value": "#f79569"
23
+ "value": "#ff7d49"
24
24
  },
25
25
  {
26
26
  "name": "--color-signal-400",
27
27
  "layer": "primitive",
28
- "value": "#f4753c"
28
+ "value": "#ff5512"
29
29
  },
30
30
  {
31
31
  "name": "--color-signal-500",
32
32
  "layer": "primitive",
33
- "value": "#f2550f"
33
+ "value": "#d93e00"
34
34
  },
35
35
  {
36
36
  "name": "--color-signal-600",
37
37
  "layer": "primitive",
38
- "value": "#c6440b"
38
+ "value": "#b13200"
39
39
  },
40
40
  {
41
41
  "name": "--color-signal-700",
42
42
  "layer": "primitive",
43
- "value": "#983508"
43
+ "value": "#882700"
44
44
  },
45
45
  {
46
46
  "name": "--color-signal-800",
47
47
  "layer": "primitive",
48
- "value": "#6a2506"
48
+ "value": "#601b00"
49
49
  },
50
50
  {
51
51
  "name": "--color-signal-900",
52
52
  "layer": "primitive",
53
- "value": "#3c1503"
53
+ "value": "#381000"
54
54
  },
55
55
  {
56
56
  "name": "--color-signal-950",
57
57
  "layer": "primitive",
58
- "value": "#0f0501"
58
+ "value": "#0f0400"
59
59
  },
60
60
  {
61
61
  "name": "--color-hostile-50",
@@ -566,7 +566,7 @@
566
566
  {
567
567
  "name": "--color-accent-signal-fill",
568
568
  "layer": "semantic",
569
- "value": "#f2550f",
569
+ "value": "#d93e00",
570
570
  "use": "A solid block in the brand colour, exactly as chosen: the primary Button, IconButton, a solid signal Badge. Put accent.signal.ink on it, never text.primary. Never use it as the only sign of a state; use accent.signal.indicator.",
571
571
  "measured": {
572
572
  "dark": "The brand colour, exactly as chosen: Button, IconButton and solid Badge backgrounds, and brand decoration. Text on it is accent.signal.ink. Never the only sign of a state; that is accent.signal.indicator. The theme builder never moves it.",
@@ -577,61 +577,61 @@
577
577
  "name": "--color-accent-signal-text",
578
578
  "layer": "semantic",
579
579
  "value": {
580
- "dark": "#f2550f",
581
- "light": "#983508"
580
+ "dark": "#ff5512",
581
+ "light": "#b13200"
582
582
  },
583
583
  "use": "Orange text or icon on a surface: a current nav item, an emphasised figure, a link accent.",
584
584
  "measured": {
585
- "dark": "5.80:1 on surface.base",
586
- "light": "6.70:1 on surface.base -- promoted a step from dark theme's 500, because 500 only reaches 3.14:1 on the light base"
585
+ "dark": "6.26:1 on surface.base. A step lighter than the brand fill, which reaches 4.42:1 on the dark page, under the 4.5:1 text needs.",
586
+ "light": "5.73:1 on surface.base. A step darker than dark theme's 400; the brand fill itself reaches only 4.11:1 on the light page, under the 4.5:1 text needs."
587
587
  }
588
588
  },
589
589
  {
590
590
  "name": "--color-accent-signal-ink",
591
591
  "layer": "semantic",
592
- "value": "#0a0602",
592
+ "value": "#ffffff",
593
593
  "use": "Text and icons on accent.signal.fill.",
594
594
  "measured": {
595
- "dark": "5.85:1 on accent.signal.fill",
596
- "light": "5.85:1 on accent.signal.fill"
595
+ "dark": "White, 4.53:1 on accent.signal.fill",
596
+ "light": "White, 4.53:1 on accent.signal.fill"
597
597
  }
598
598
  },
599
599
  {
600
600
  "name": "--color-accent-signal-indicator",
601
601
  "layer": "semantic",
602
- "value": "#f2550f",
602
+ "value": "#d93e00",
603
603
  "use": "The accent where colour alone shows a state or value: a checked control, Switch on, Progress, Slider, Rating stars, the current item in Sidebar, Navbar, Tabs, SegmentedControl, Stepper and highlighted menu rows. Put accent.signal.indicator-ink on it.",
604
604
  "measured": {
605
- "dark": "The accent where colour alone marks a state or a value: checked controls, Switch on, Progress, Slider, Rating stars, the current item of Sidebar, Navbar, Tabs, SegmentedControl, Stepper and highlighted menu rows, and the hero numerals. 5.80:1 on surface.base. Same stop as accent.signal.fill here; the theme builder moves it to a nearby stop when a chosen accent is too pale or too dark to reach 3:1, and leaves accent.signal.fill alone.",
606
- "light": "The accent where colour alone marks a state or a value: checked controls, Switch on, Progress, Slider, Rating stars, the current item of Sidebar, Navbar, Tabs, SegmentedControl, Stepper and highlighted menu rows, and the hero numerals. 3.14:1 on surface.base. Same stop as accent.signal.fill here; the theme builder moves it to a nearby stop when a chosen accent is too pale or too dark to reach 3:1, and leaves accent.signal.fill alone."
605
+ "dark": "The accent where colour alone marks a state or a value: checked controls, Switch on, Progress, Slider, Rating stars, the current item of Sidebar, Navbar, Tabs, SegmentedControl, Stepper and highlighted menu rows, and the hero numerals. 4.42:1 on surface.base. Same stop as accent.signal.fill here; the theme builder moves it to a nearby stop when a chosen accent is too pale or too dark to reach 3:1, and leaves accent.signal.fill alone.",
606
+ "light": "The accent where colour alone marks a state or a value: checked controls, Switch on, Progress, Slider, Rating stars, the current item of Sidebar, Navbar, Tabs, SegmentedControl, Stepper and highlighted menu rows, and the hero numerals. 4.11:1 on surface.base. Same stop as accent.signal.fill here; the theme builder moves it to a nearby stop when a chosen accent is too pale or too dark to reach 3:1, and leaves accent.signal.fill alone."
607
607
  }
608
608
  },
609
609
  {
610
610
  "name": "--color-accent-signal-indicator-ink",
611
611
  "layer": "semantic",
612
- "value": "#0a0602",
612
+ "value": "#ffffff",
613
613
  "use": "Text and icons on accent.signal.indicator.",
614
614
  "measured": {
615
- "dark": "Text and icons on accent.signal.indicator. 5.85:1. The theme builder picks white or this dark ink, whichever reaches 4.5:1.",
616
- "light": "Text and icons on accent.signal.indicator. 5.85:1. The theme builder picks white or this dark ink, whichever reaches 4.5:1."
615
+ "dark": "Text and icons on accent.signal.indicator: white, 4.53:1. The theme builder picks white or a dark ink, whichever reaches 4.5:1.",
616
+ "light": "Text and icons on accent.signal.indicator: white, 4.53:1. The theme builder picks white or a dark ink, whichever reaches 4.5:1."
617
617
  }
618
618
  },
619
619
  {
620
620
  "name": "--color-accent-signal-wash",
621
621
  "layer": "semantic",
622
- "value": "rgba(242, 85, 15, 0.12)",
622
+ "value": "rgba(217, 62, 0, 0.12)",
623
623
  "use": "The faint orange hover wash under a nav item or an inactive tab.",
624
624
  "measured": {
625
- "dark": "Hover wash under a nav item or an inactive tab. Text on it is text.primary and gated. The focus ring and a checked control's fill drop under 3:1 on it in light theme, so neither is ever drawn on it.",
626
- "light": "Hover wash under a nav item or an inactive tab. Text on it is text.primary and gated. A checked control's indicator drops under 3:1 on it in light theme and the focus ring is not gated on it, so neither is ever drawn on it."
625
+ "dark": "Hover wash under a nav item or an inactive tab. Text on it is text.primary and gated. Neither a checked control's fill nor the focus ring is gated on it, so neither is ever drawn on it.",
626
+ "light": "Hover wash under a nav item or an inactive tab. Text on it is text.primary and gated. Neither a checked control's indicator nor the focus ring is gated on it, so neither is ever drawn on it."
627
627
  }
628
628
  },
629
629
  {
630
630
  "name": "--color-accent-signal-glow",
631
631
  "layer": "semantic",
632
632
  "value": {
633
- "dark": "rgba(242, 85, 15, 0.38)",
634
- "light": "rgba(242, 85, 15, 0.3)"
633
+ "dark": "rgba(217, 62, 0, 0.38)",
634
+ "light": "rgba(217, 62, 0, 0.3)"
635
635
  },
636
636
  "use": "The faint shadow of an interactive Card on hover and focus. Used by the Card component only.",
637
637
  "measured": {
@@ -655,7 +655,7 @@
655
655
  "use": "Error and destructive text or icon on a surface: field errors, an invalid border, a failed status.",
656
656
  "measured": {
657
657
  "dark": "6.23:1 on surface.base, 5.42:1 on surface.raised, 4.80:1 on raised nested in raised, 5.92:1 on surface.sunken. hostile.500 measured 4.48:1 on surface.raised, under 4.5:1.",
658
- "light": "6.70:1 on surface.base"
658
+ "light": "5.73:1 on surface.base. A step darker than dark theme's 400; the brand fill itself reaches only 4.11:1 on the light page, under the 4.5:1 text needs."
659
659
  }
660
660
  },
661
661
  {
@@ -765,7 +765,7 @@
765
765
  "use": "The dimmed leading zeros of a hero numeral. Decorative; never text that has to be read.",
766
766
  "measured": {
767
767
  "dark": "The dimmed leading-zero pad on a hero numeral (Overview, Progress readout, docs section index). Decorative and aria-hidden: it is a column width, never a value, so no SC 1.4.3 obligation attaches to it. 5.35:1 on surface.base, which is 31% of text.primary's 17.17:1 there -- that share, not the absolute ratio, is what makes it read as padding rather than as a digit. Holds the same value text.muted holds in this theme and is deliberately NOT an alias of it: text.muted is real secondary text with an AA floor, and the two move for different reasons.",
768
- "light": "The dimmed leading-zero pad. 3.82:1 on surface.base, 22% of text.primary's 17.55:1 there, against the dark theme's 31%. Light theme needs a LIGHTER step than text.muted for the same role: muted aliases neutral.500 and measures 11.44:1 here, 65% of ink, which does not read as dimmed and out-shouts the signal.fill numeral it is padding (3.14:1 on this surface). neutral.400 would land at 6.58:1 and 38% of ink, closer to dark's share but more than twice the contrast of the digits beside it, so neutral.300 is the step that keeps the pad quieter than what it pads."
768
+ "light": "The dimmed leading-zero pad. 3.82:1 on surface.base, 22% of text.primary's 17.55:1 there, against the dark theme's 31%. Light theme needs a LIGHTER step than text.muted for the same role: muted aliases neutral.500 and measures 11.44:1 here, 65% of ink, which does not read as dimmed and out-shouts the signal.fill numeral it is padding (4.11:1 on this surface). neutral.400 would land at 6.58:1 and 38% of ink, closer to dark's share but more than twice the contrast of the digits beside it, so neutral.300 is the step that keeps the pad quieter than what it pads."
769
769
  }
770
770
  },
771
771
  {
@@ -811,25 +811,23 @@
811
811
  "name": "--color-focus-ring",
812
812
  "layer": "semantic",
813
813
  "value": {
814
- "dark": "#f2550f",
815
- "light": "#c6440b"
814
+ "dark": "#ff5512",
815
+ "light": "#d93e00"
816
816
  },
817
817
  "use": "The keyboard focus outline. Use it only in focus-visible:outline-[var(--color-focus-ring)], with a 2px outline and a 2px offset.",
818
818
  "measured": {
819
- "light": "4.51:1 on surface.base. A step darker than accent.signal.fill, which reaches only 3.14:1 on the light page: the ring is the one mark every keyboard user depends on, so it gets a margin."
819
+ "dark": "6.26:1 on surface.base. A step lighter than accent.signal.fill, which reaches 3.41:1 on nested panels: the ring is the one mark every keyboard user depends on, so it gets a margin.",
820
+ "light": "4.11:1 on surface.base. The brand colour itself: it clears 3:1 on every light surface, so the ring no longer needs a step of its own."
820
821
  }
821
822
  },
822
823
  {
823
824
  "name": "--color-chart-series-1",
824
825
  "layer": "semantic",
825
- "value": {
826
- "dark": "#f2550f",
827
- "light": "#c6440b"
828
- },
826
+ "value": "#d93e00",
829
827
  "use": "The first data series in a chart. A graphic colour, never text. ChartPanel applies it.",
830
828
  "measured": {
831
- "dark": "First chart series: a line, a bar, a legend swatch. A graphic, 3:1: 5.80:1 on surface.base, 5.05:1 on surface.raised, 4.47:1 nested. Never text.",
832
- "light": "First chart series: a line, a bar, a legend swatch. A graphic, 3:1: 4.51:1 on surface.base, 4.79:1 on surface.raised, 4.88:1 nested. Never text."
829
+ "dark": "First chart series: a line, a bar, a legend swatch. A graphic, 3:1: 4.42:1 on surface.base, 3.85:1 on surface.raised, 3.41:1 nested. Never text.",
830
+ "light": "First chart series: a line, a bar, a legend swatch. A graphic, 3:1: 4.11:1 on surface.base, 4.37:1 on surface.raised, 4.45:1 nested. Never text."
833
831
  }
834
832
  },
835
833
  {