@synopackageland/ui 0.23.5 → 0.23.6

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.
@@ -15,10 +15,10 @@ App. Each line links to its details below.
15
15
  | No tab heading on tab pages | A page of the tab bar draws no title, icon or brand in the bar (`phone-bar-title="none"`) and no heading of its own: the tab bar says where the user is. A sub-page keeps Back and its title. |
16
16
  | Title on a tab page is opt-in | Showing a title on a tab page is the App's explicit choice: `phone-bar-title="auto"` on `AppLayout`, and the SDK AppShell's own opt-in (`phoneTitle`). |
17
17
  | Hide on scroll | By `transform` only; the scroller keeps its size, position and padding and nothing writes `scrollTop`, so a momentum fling keeps going. Slow scrolls use distance hysteresis, flicks decide at once. See [Hide on scroll](#native-phone-shell) and [Gesture velocity](#gesture-velocity). |
18
- | No horizontal pan | The page never pans sideways: the phone layout's content area and page scroller clip `overflow-x`, and `check:phone-layout` asserts `scrollWidth == clientWidth` for the document and the page's scrollers at 320, 360, 390 and 430px. An inner horizontal scroller (a table, a tab strip) still scrolls. |
18
+ | No horizontal pan | The page never pans sideways: the phone layout's content area and page scroller clip `overflow-x`, a `PageHeader`'s last action keeps its tap box inside the header, and `check:phone-layout` asserts `scrollWidth == clientWidth` for the document and the page's scrollers at 320, 360, 390 and 430px and in landscape (825x360, 753x279), also when the scroller is an App's own element in a fill page. An inner horizontal scroller (a table, a tab strip) still scrolls. |
19
19
  | Bottom accessory | `#accessory` docks above the tab bar, lifts the FAB and toasts, and slides into the tab bar's place with the bars. |
20
- | Sticky offsets | `--ui-sticky-top-offset` counts the covered padding, a sticky `PageHeader`, the tabs strip and every `data-ui-sticky` row, so scrolling to an element lands below them. A row in an App's own nested scroller (a side pane) sticks at that scroller's top and counts only there. |
21
- | No end space under docked bars | The room under the last row is constant (`--ui-page-end-space`, plus `--ui-bars-room` under docked bars); a fill page's list runs under the FAB and bars to the screen's bottom with no blank band. |
20
+ | Sticky offsets | `--ui-sticky-top-offset` counts the covered padding, a sticky `PageHeader`, the tabs strip and every `data-ui-sticky` row, so scrolling to an element lands below them. A row in an App's own nested scroller (a side pane, a record pane) sticks below the sticky `PageHeader` and tabs strip in that scroller and counts only there. |
21
+ | No end space under docked bars | The room under the last row is constant (`--ui-page-end-space`, plus `--ui-bars-room` under docked bars); a fill page's list runs under the FAB and bars to the screen's bottom with no blank band, also when that list is an App's own element nested in the page. |
22
22
  | Gesture velocity | One estimator and one set of thresholds for every gesture decision the UI makes. See [Gesture velocity](#gesture-velocity). |
23
23
 
24
24
  ## Width containment and the release gate
@@ -219,6 +219,19 @@ its 44px over the gutter and loses only what would lie outside the page. The
219
219
  body's width and `max-width` allow for the bleed; an App that sizes the body
220
220
  itself (`width: 100%`) is overridden by the body's inline width.
221
221
 
222
+ A fill page's scroller can be an element of the App's own, with the
223
+ `PageHeader` inside it (a record pane). No PageContent clip sits between the
224
+ header and that scroller's edge, so a "…" IconButton at the end of the
225
+ header reached 13px past it in a landscape phone window. A `PageHeader`'s
226
+ last action therefore sets `--ui-hit-end-room` to the header's own end
227
+ padding (`--ui-page-padding-x`, 0 inside a PageContent): its tap box stops
228
+ at the header's edge and grows towards its start side, still the full 44px,
229
+ wherever the header is. The scroller itself is not clipped: an App's
230
+ scroller that also scrolls a wide table sideways keeps doing so. For the
231
+ same reason no UI component's box reaches past its own edges: an
232
+ Accordion's pressed wash reaches 4px past each side by `box-shadow` (ink,
233
+ never scrollable overflow), not by a wider trigger.
234
+
222
235
  A control at the end edge of its own component is the component's job, not
223
236
  the page's: a dismissible Callout is often full width in an App's own
224
237
  scroller with no `PageContent` around it. Such a control sets
@@ -820,8 +833,15 @@ An App sets no `top` of its own and measures nothing.
820
833
  rows (`top` 0 for the first), never counts in the page's offset, and the
821
834
  container gets its own `--ui-sticky-top-offset` (its top padding plus its
822
835
  rows), so what scrolls in the pane stops below the pane's rows and not
823
- below the page's header. Before 0.23.5 such a row was stuck the page's
824
- header height down inside its pane.
836
+ below the page's header.
837
+ - A sticky `PageHeader` (and a sticky tabs strip) inside such a container
838
+ covers that container's top, not the page's: the container's rows stick
839
+ below it (`--ui-sticky-row-top` starts at the header's height), the
840
+ container's `--ui-sticky-top-offset` is its top padding plus the header,
841
+ the strip and its rows, and the container gets its own
842
+ `--ui-page-sticky-top` (its header's height) for a strip in it. Such a
843
+ header is left out of the page's `--ui-page-sticky-top` and offset. A
844
+ container with a sticky header and no rows gets the header as its offset.
825
845
  - A nested scroller without rows still inherits the page's offset as its
826
846
  content's scroll margin. Mark it `data-ui-sticky-scope` and what scrolls in
827
847
  it takes no page offset. A fill page's own list scroller
@@ -839,7 +859,14 @@ the room for the bars is the separate `--ui-bars-room` spacer, and a fill
839
859
  page whose own scroller has the FAB's room gets no end space below that
840
860
  scroller, so no blank band sits under a list. An App shell that pads its
841
861
  page end reads it:
842
- `padding-bottom: var(--ui-page-end-space, var(--ui-space-6, 24px))`.
862
+ `padding-bottom: var(--ui-page-end-space, var(--ui-space-6, 24px))`. Under
863
+ docked bars its value is a `calc()` expression, not a plain length: code
864
+ that needs it in pixels reads a resolved length (PageContent reads the
865
+ computed margin of a hidden probe whose `margin-top` is the variable), never
866
+ `parseFloat` of the property's text. PageContent subtracts it when it looks
867
+ for a fill page's scroller, so an App that puts the end space on a wrapper
868
+ around its own scroller (rather than on the scroller) still has that
869
+ scroller found.
843
870
 
844
871
  **Scroll helpers.** A phone page scrolls in a different element than a
845
872
  desktop or DSM window. `nearestScroller(el)` returns the element that
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/ui",
3
- "version": "0.23.5",
3
+ "version": "0.23.6",
4
4
  "description": "Shared Vue 3 UI component library with a DSM 7 inspired application theme",
5
5
  "license": "MIT",
6
6
  "type": "module",