@motir/design-system 0.10.0 → 0.11.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@motir/design-system",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Motir's 3-axis design system (colour · style · type): distributable token CSS, the axis registries, the theme-apply API, and framework-agnostic React primitives. Shared by motir-core and planner-scaffolded products.",
5
5
  "license": "GPL-3.0-only",
6
6
  "repository": {
@@ -59,9 +59,11 @@
59
59
  }
60
60
  },
61
61
  "devDependencies": {
62
+ "@testing-library/react": "^16.3.2",
62
63
  "@types/node": "^22.19.19",
63
64
  "@types/react": "^19",
64
65
  "@types/react-dom": "^19",
66
+ "happy-dom": "^20.9.0",
65
67
  "tsup": "^8.5.0",
66
68
  "typescript": "^5",
67
69
  "vitest": "^4.1.7"
package/theme.css CHANGED
@@ -1984,7 +1984,24 @@
1984
1984
  dividers inside a wavy card): the full-box `.border`, and the single-side
1985
1985
  dividers `.border-b` / `.border-t` (table rows, section rules) — the latter
1986
1986
  scoped INSIDE `[data-surface]` panels to bound the count to real surfaces (and
1987
- their rows are virtualised, so only ~viewport-many overlays ever render). */
1987
+ their rows are virtualised, so only ~viewport-many overlays ever render).
1988
+
1989
+ ⚠️ THE INK IS AN `outline`, NOT A `border`, AND THE OVERLAY BOX NEVER LEAVES ITS
1990
+ HOST'S PADDING BOX (MOTIR-7693). The line has to straddle the host's padding
1991
+ edge — 1px out, 1px in — to sit on the real border it roughens. Drawn as a
1992
+ 2px border on an overlay at `inset: -1px`, that put the overlay's BOX one
1993
+ pixel past its host on every side, and when the host is also a scroll
1994
+ container (`.border` + `overflow-*-auto`: framed tables, pickers, code blocks)
1995
+ its own `::after` is part of its scrollable overflow — `scrollWidth` /
1996
+ `scrollHeight` one past the client box, so the browser drew a vertical AND a
1997
+ horizontal scroll bar on content that fits. An outline is ink, not layout: it
1998
+ never counts toward scrollable overflow. So the overlay box sits at `inset: 0`
1999
+ and `outline-offset: -1px` puts the 2px line back on exactly the same pixels.
2000
+ The dividers are the same move — a 0-height box ON the edge, a 1px outline
2001
+ either side of it (the line it replaces was 2px straddling the edge), and
2002
+ `left`/`right: 1px` to cancel the outline's run past the box's ends; their
2003
+ `bottom: -1px` overflowed a scroller whose last row drops its real border.
2004
+ tests/e2e/hand-drawn-scroll-frame.spec.ts measures it in Chromium. */
1988
2005
  @scope ([data-style='hand-drawn-indie']) to ([data-style]) {
1989
2006
  .border {
1990
2007
  border-width: 2px;
@@ -1999,9 +2016,10 @@
1999
2016
  .border::after {
2000
2017
  content: '';
2001
2018
  position: absolute;
2002
- inset: -1px;
2019
+ inset: 0;
2003
2020
  pointer-events: none;
2004
- border: 2px solid var(--el-border-strong);
2021
+ outline: 2px solid var(--el-border-strong);
2022
+ outline-offset: -1px;
2005
2023
  border-radius: inherit;
2006
2024
  filter: url(#hd-rough);
2007
2025
  }
@@ -2020,12 +2038,12 @@
2020
2038
  [data-surface] .border-b:not(.border)::after {
2021
2039
  content: '';
2022
2040
  position: absolute;
2023
- left: 0;
2024
- right: 0;
2025
- bottom: -1px;
2041
+ left: 1px;
2042
+ right: 1px;
2043
+ bottom: 0;
2026
2044
  height: 0;
2027
2045
  pointer-events: none;
2028
- border-bottom: 2px solid var(--el-border-strong);
2046
+ outline: 1px solid var(--el-border-strong);
2029
2047
  filter: url(#hd-rough);
2030
2048
  }
2031
2049
  }
@@ -2033,12 +2051,12 @@
2033
2051
  [data-surface] .border-t:not(.border)::after {
2034
2052
  content: '';
2035
2053
  position: absolute;
2036
- left: 0;
2037
- right: 0;
2038
- top: -1px;
2054
+ left: 1px;
2055
+ right: 1px;
2056
+ top: 0;
2039
2057
  height: 0;
2040
2058
  pointer-events: none;
2041
- border-top: 2px solid var(--el-border-strong);
2059
+ outline: 1px solid var(--el-border-strong);
2042
2060
  filter: url(#hd-rough);
2043
2061
  }
2044
2062
  }