@usableapp/cardds 0.7.38 → 0.7.40

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/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  > For: a project that consumes `@usableapp/cardds` and its AI — what changed between versions, written as before → after, so a screen can be brought up to date without reading the source. Newest first. A consumer never edits cardds; if something here leaves you without a way to do what you did before, report the gap.
4
4
 
5
+ ## 0.7.40 — 2026-10-01
6
+
7
+ ### Changed
8
+ - **`--screen-w`: 30rem → 34.375rem (550px)** (Lh 2026-10-01). A screen 540 wide (a phone set to a small display size, a fold's outer screen) showed a 30px strip each side; it now fills edge to edge. A window wider than 550px is still held to a centred column. Check a full-width picture and a wide button on your widest device; a project that sets `--screen-w` itself is not touched.
9
+
10
+ ## 0.7.39 — 2026-10-01
11
+
12
+ ### Fixed
13
+ - **`Sheet`: its foot arrives and leaves WITH the sheet, solid the whole way** (Lh 2026-10-01, seen on timebank's agreement page). Before, while a sheet slid up or down (away / peek ↔ up) its foot stood still on the screen's bottom edge and FADED in or out — for a third of a second the body's words slid through that strip behind a half-transparent button; two sheets swapping showed two faded feet over each other. Now at peek and away the foot stands on the sheet's own bottom edge and rides with it, never transparent; between half · 3q · full it still stays on the box's edge as before. Nothing to change in a screen.
14
+
5
15
  ## 0.7.38 — 2026-10-01
6
16
 
7
17
  ### Fixed
package/css/sheet.css CHANGED
@@ -157,12 +157,15 @@
157
157
  background: linear-gradient(var(--card-bg), var(--card-bg)) bottom / 100% var(--_foot) no-repeat;
158
158
  pointer-events: none;
159
159
  translate: 0 calc(-1 * var(--_y) - var(--_drag, 0rem));
160
- transition: translate var(--motion-sheet) ease, opacity var(--motion-sheet) ease, visibility 0s;
160
+ transition: translate var(--motion-sheet) ease, visibility 0s;
161
161
  }
162
162
  .sheet > .card__foot > * { pointer-events: auto; }
163
163
  .sheet:has(> .card__foot) > .sheet__body { margin-bottom: calc(var(--_foot) - var(--card-pad)); } /* the body stops above the strip (the card's own padding is the rest) */
164
164
  .sheet.is-dragging > .card__foot { transition: none; }
165
- :is(.sheet--peek, .sheet--away) > .card__foot { opacity: 0; visibility: hidden; transition: translate var(--motion-sheet) ease, opacity var(--motion-sheet) ease, visibility 0s linear var(--motion-sheet); }
165
+ /* at peek and away the foot is NOT held on the box's edge: it stands on the sheet's own bottom edge (no counter-slide), so it
166
+ LEAVES AND ARRIVES WITH ITS SHEET — solid the whole way, hidden only once the slide is over. It used to stay in place and
167
+ fade: the body slid through the strip behind a half-transparent button (timebank, Lh 2026-10-01: "ตัวหนังสือลอดใต้ปุ่ม"). */
168
+ :is(.sheet--peek, .sheet--away) > .card__foot { translate: 0 0; visibility: hidden; transition: translate var(--motion-sheet) ease, visibility 0s linear var(--motion-sheet); }
166
169
  /* that padding can be taller than the body's own box (a short box: a small phone with the keyboard up) and a
167
170
  box is never smaller than its padding — so the pinned parts must not give way to it: the body runs past
168
171
  the sheet's clipped edge instead, where nothing shows anyway. At peek and away no part of the body shows. */
package/css/tokens.css CHANGED
@@ -12,9 +12,9 @@
12
12
 
13
13
  :root {
14
14
  /* ---- layout ---- */
15
- --screen-w: 30rem; /* 480: the column's CAP — .screen, .action-bar, .sheet-stage. A phone never reaches it (the widest are ~450 CSS px):
16
- on a phone the screen is the device, edge to edge; the cap only keeps a tablet / desktop window to a phone-sized
17
- column. Was 25rem: a 412px phone showed a strip each side (Lh 2026-10-01) */
15
+ --screen-w: 34.375rem; /* 550: the column's CAP — .screen, .action-bar, .sheet-stage. On a phone the screen is the device, edge to edge —
16
+ also a phone set to a small display size, a fold's outer screen (540 was seen, Lh 2026-10-01); the cap only keeps
17
+ a tablet / desktop window to a phone-sized column. Was 25rem (a 412px phone showed a strip each side), then 30rem */
18
18
  --screen-centre: 40%; /* the human centre of a screen: the middle of its top four fifths — the bottom fifth is the thumb's (Lh, 2026-09-10). .card--centre sits here */
19
19
 
20
20
  /* ---- the four bases: what a project retunes (Lh, 2026-09-20) ----
package/dist/cardds.css CHANGED
@@ -53,9 +53,9 @@
53
53
 
54
54
  :root {
55
55
  /* ---- layout ---- */
56
- --screen-w: 30rem; /* 480: the column's CAP — .screen, .action-bar, .sheet-stage. A phone never reaches it (the widest are ~450 CSS px):
57
- on a phone the screen is the device, edge to edge; the cap only keeps a tablet / desktop window to a phone-sized
58
- column. Was 25rem: a 412px phone showed a strip each side (Lh 2026-10-01) */
56
+ --screen-w: 34.375rem; /* 550: the column's CAP — .screen, .action-bar, .sheet-stage. On a phone the screen is the device, edge to edge —
57
+ also a phone set to a small display size, a fold's outer screen (540 was seen, Lh 2026-10-01); the cap only keeps
58
+ a tablet / desktop window to a phone-sized column. Was 25rem (a 412px phone showed a strip each side), then 30rem */
59
59
  --screen-centre: 40%; /* the human centre of a screen: the middle of its top four fifths — the bottom fifth is the thumb's (Lh, 2026-09-10). .card--centre sits here */
60
60
 
61
61
  /* ---- the four bases: what a project retunes (Lh, 2026-09-20) ----
@@ -1450,12 +1450,15 @@ button:enabled { cursor: pointer; } /* a disabled one keeps the arrow */
1450
1450
  background: linear-gradient(var(--card-bg), var(--card-bg)) bottom / 100% var(--_foot) no-repeat;
1451
1451
  pointer-events: none;
1452
1452
  translate: 0 calc(-1 * var(--_y) - var(--_drag, 0rem));
1453
- transition: translate var(--motion-sheet) ease, opacity var(--motion-sheet) ease, visibility 0s;
1453
+ transition: translate var(--motion-sheet) ease, visibility 0s;
1454
1454
  }
1455
1455
  .sheet > .card__foot > * { pointer-events: auto; }
1456
1456
  .sheet:has(> .card__foot) > .sheet__body { margin-bottom: calc(var(--_foot) - var(--card-pad)); } /* the body stops above the strip (the card's own padding is the rest) */
1457
1457
  .sheet.is-dragging > .card__foot { transition: none; }
1458
- :is(.sheet--peek, .sheet--away) > .card__foot { opacity: 0; visibility: hidden; transition: translate var(--motion-sheet) ease, opacity var(--motion-sheet) ease, visibility 0s linear var(--motion-sheet); }
1458
+ /* at peek and away the foot is NOT held on the box's edge: it stands on the sheet's own bottom edge (no counter-slide), so it
1459
+ LEAVES AND ARRIVES WITH ITS SHEET — solid the whole way, hidden only once the slide is over. It used to stay in place and
1460
+ fade: the body slid through the strip behind a half-transparent button (timebank, Lh 2026-10-01: "ตัวหนังสือลอดใต้ปุ่ม"). */
1461
+ :is(.sheet--peek, .sheet--away) > .card__foot { translate: 0 0; visibility: hidden; transition: translate var(--motion-sheet) ease, visibility 0s linear var(--motion-sheet); }
1459
1462
  /* that padding can be taller than the body's own box (a short box: a small phone with the keyboard up) and a
1460
1463
  box is never smaller than its padding — so the pinned parts must not give way to it: the body runs past
1461
1464
  the sheet's clipped edge instead, where nothing shows anyway. At peek and away no part of the body shows. */
@@ -20,7 +20,7 @@ export interface ScreenProps extends ComponentProps<'div'> {
20
20
  * Screen — the mobile screen in THREE parts: **top** and **content** (the children) in one flex column, the content down to the
21
21
  * screen's foot; **bottom** a LAYER over it there (Lh 2026-09-23). Top = `TopBar` / `AppBar`, or `top="lead"` (no bar, the words start
22
22
  * 15% down). Content = a box of components one after another — a `Step` (`Pages` of `Page`s / a `Page` [+ `Sheet`]), a `Centre`, a
23
- * `SheetStack`… Bottom = an `ActionBar` (the walk's `PagerAt` its first row) or a `FloatBar`, covering the content's foot on purpose. Max 30rem wide, the standard inset, no vertical padding. A plain Screen (no `fill`) scrolls.
23
+ * `SheetStack`… Bottom = an `ActionBar` (the walk's `PagerAt` its first row) or a `FloatBar`, covering the content's foot on purpose. Max 34.375rem (550px) wide, the standard inset, no vertical padding. A plain Screen (no `fill`) scrolls.
24
24
  * ONE OUTCOME, DRAWN ONCE (Lh 2026-10-01): a screen that can come out more than one way is not drawn until the app knows which —
25
25
  * `ready={false}` until then.
26
26
  * The slots set the order; children laid by hand in the same order still work.
@@ -5,7 +5,7 @@ import { cx } from '../cx.js';
5
5
  * Screen — the mobile screen in THREE parts: **top** and **content** (the children) in one flex column, the content down to the
6
6
  * screen's foot; **bottom** a LAYER over it there (Lh 2026-09-23). Top = `TopBar` / `AppBar`, or `top="lead"` (no bar, the words start
7
7
  * 15% down). Content = a box of components one after another — a `Step` (`Pages` of `Page`s / a `Page` [+ `Sheet`]), a `Centre`, a
8
- * `SheetStack`… Bottom = an `ActionBar` (the walk's `PagerAt` its first row) or a `FloatBar`, covering the content's foot on purpose. Max 30rem wide, the standard inset, no vertical padding. A plain Screen (no `fill`) scrolls.
8
+ * `SheetStack`… Bottom = an `ActionBar` (the walk's `PagerAt` its first row) or a `FloatBar`, covering the content's foot on purpose. Max 34.375rem (550px) wide, the standard inset, no vertical padding. A plain Screen (no `fill`) scrolls.
9
9
  * ONE OUTCOME, DRAWN ONCE (Lh 2026-10-01): a screen that can come out more than one way is not drawn until the app knows which —
10
10
  * `ready={false}` until then.
11
11
  * The slots set the order; children laid by hand in the same order still work.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usableapp/cardds",
3
- "version": "0.7.38",
3
+ "version": "0.7.40",
4
4
  "license": "UNLICENSED",
5
5
  "type": "module",
6
6
  "description": "card-first mobile design system, React-first: the components in src/ are thin wrappers over the CSS contract (css/*.css stays the only truth); gallery/ shows every story live (npm run dev), tests/ measures the geometry.",