@justai/cuts 0.70.0 → 0.72.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": "@justai/cuts",
3
- "version": "0.70.0",
3
+ "version": "0.72.0",
4
4
  "description": "A persona's named parts \u2014 the page shell that holds them, and the cuts themselves.",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -45,7 +45,15 @@ const { title, note } = Astro.props;
45
45
  </div>
46
46
 
47
47
  <style>
48
+ /* queries: two action lists touching · no gap between groups · the second group sits on the first
49
+ THE BREAK IS THE GRAMMAR, so the component owns it.
50
+ A group carried its INTERNAL 7px and nothing between itself and the next one, which left the
51
+ break — the thing that separates "things you might do" from "the door with no way back" — to
52
+ whichever consumer remembered a wrapper. files did in one sheet and not in another, and the
53
+ second one read as one long list with a red row at the end.
54
+ `:last-child` so a lone group adds no trailing space it did not ask for. */
48
55
  .jal-group { display: flex; flex-direction: column; gap: 7px; }
56
+ .jal-group + .jal-group { margin-block-start: 22px; }
49
57
  /* Inset and grouped: the card is the group, and `overflow: hidden` is what lets a row's own
50
58
  background reach the rounded corner instead of squaring it off on press. */
51
59
  .jal {
@@ -126,8 +126,16 @@ const on = value && options.some((o) => o.value === value) ? value : options[0]?
126
126
  this is what makes it true for the eye. */
127
127
  isolation: isolate;
128
128
  }
129
+ /* queries: segmented control height · 44px touch target · the segments are too small
130
+ TWO SIZES, AND THE DIFFERENCE IS WHAT THE CONTROL IS.
131
+ `full` is a VIEW'S OWN SWITCH — a thumb's first target on the screen, so it meets the fleet's
132
+ 44px like every row and every action does. `inline` is a TOOLBAR CHIP, sitting among other
133
+ chrome at chrome's size; forcing 44 there would make a toolbar taller than its content, which
134
+ is why iOS ships its own segmented controls shorter in exactly that position.
135
+ Found by a consumer's spec measuring 33px where its page promised 44 — a number the component
136
+ should have owned rather than each page discovering separately. */
129
137
  .jseg[data-width="full"] { display: flex; width: 100%; }
130
- .jseg[data-width="full"] .jseg-item { flex: 1; }
138
+ .jseg[data-width="full"] .jseg-item { flex: 1; min-height: 44px; }
131
139
 
132
140
  .jseg-item {
133
141
  box-sizing: border-box;
package/src/Sheet.astro CHANGED
@@ -186,6 +186,17 @@ const doneLabel = done === false ? null : (done ?? (detent === "large" ? "Done"
186
186
  Only one page is in the layout at a time, so the body's height is the CURRENT page's — which is
187
187
  what makes the sheet grow and shrink around the content the way a navigation stack does. The
188
188
  slide is 220ms and is skipped for reduced motion, where the pages simply swap. */
189
+ /* queries: the second sheet page appears BELOW the first · pushing shows both pages · the history
190
+ list is squeezed at the bottom · a page does not hide · consumer css beats the sheet
191
+ HIDING A PAGE IS A MECHANISM, NOT A SUGGESTION, so it is written where a class cannot outrank
192
+ it. `[data-sheet-page] { display: none }` is one attribute — specificity (0,1,0) — and any
193
+ consumer rule naming two classes beats it. files styles its detail page as `.pp .fd { display:
194
+ flex }`, which is ordinary and correct, and it meant the root page NEVER HID: pushing to the
195
+ versions drew them one under the other, so a person who tapped History got a cramped strip at
196
+ the bottom of a sheet still showing everything they had just left.
197
+ Qualified by the dialog it lives in, which raises this to (0,2,1) and keeps the rule honest —
198
+ a page outside a sheet is nobody's business here. */
199
+ :global(dialog [data-sheet-page]:not(.is-current):not(.is-popping)) { display: none; }
189
200
  :global([data-sheet-page]) { display: none; }
190
201
  :global([data-sheet-page].is-current) { display: block; animation: sheet-push 0.22s var(--ease-out) both; }
191
202
  :global([data-sheet-page].is-popping) { display: block; animation: sheet-pop 0.22s var(--ease-out) both; }