@aiquants/daily-report 0.51.0 → 0.51.1

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
@@ -4,6 +4,29 @@ All notable changes to `@aiquants/daily-report` are documented here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ### Fixed
8
+
9
+ - **低い窓でもビューが 0 に潰れない (WCAG 1.4.10)**: 0.51.0 で操作列の帯がどのポインターでも 56px (折り返せば 112px)、検索の行の帯が 56〜112px になったため、
10
+ 400 % の拡大 (320 × 256 CSS px、マウス) ではホストの見出し 148px と 2 つの帯 224px が列を使い切り、List と DetailList のビューの高さが 0 になって行に届かなかった。
11
+ ビューの根要素は最小の高さとして List の行の枠の高さ 1 つ分 P (`VIEW_MIN_BLOCK_SIZE_CLASS_NAME` = 4⌈(52px + 2rem + max(4.75rem, 44px)) / 4⌉。根 16px で 160。
12
+ `round()` を持たない描画エンジンは切り上げる前の和) を持ち、ページの箱からビューの根要素までの箱 (ページの枠・内容の列・ビューのタブ・タブの中身。
13
+ `PAGE_FILL_COLUMN_CLASS_NAME`) は中身の最小 (帯とビューの最小の高さ) より小さくならない。帯とビューの最小の高さが収まらない窓では、ページの箱がホストの列から
14
+ はみ出し、ホストの列 (かその祖先) の縦のスクロールがページ (見出し・帯・ビュー) を動かす。ホストはその列を `overflow-y: auto` にする (はみ出しを切る列ではビューが
15
+ 隠れる。README の「Host scroll for short windows」)。ふつうの高さの窓では何も変わらない (ビューは列の残りを埋め、ページはスクロールしない)。
16
+ - **側面ペインの記事のスクロールの箱が潰れない (WCAG 1.4.10)**: 同じ 400 % の拡大で List のカードから開くモバイルのオーバーレイ (ダイアログ 256px) では、ペインの帯
17
+ (見出しの列とタブの並び) の下で記事のスクロールの箱が 12px まで潰れ、スクロールで見せたスターと既読のボタン (44px) の中心が箱の外に落ちて押せなかった。
18
+ 記事と相関のタブの中身は最小の高さとして的の行 1 行 (`SIDE_PANE_SCROLL_PANEL_MIN_BLOCK_SIZE_CLASS_NAME` = `--spacing(2)` + T + 4px。根 16px で 56px) を持ち、
19
+ 帯 (`SIDE_PANE_HEADER_BOX_CLASS_NAME`) は縮まず、タブの根は中身に基づく最小の高さを保つ。ペインが帯と的の行 1 行を入れきれない高さでは、見出しの列とタブの根を
20
+ 包む中身の箱 (`SIDE_PANE_CONTENT_BOX_CLASS_NAME`) が縦にスクロールする (見出し・タブ・記事が一緒に動く。デスクトップでは細いバーにビューのスクロールバーの組の色、
21
+ オーバーレイでは面の縦のスクロール領域 `SWIPE_OVERLAY_SCROLL_AREA_STYLE` で、閉じるボタンは箱の下に残る)。ふつうの高さでは何も変わらない (スクロールの範囲が
22
+ 無い)。オーバーレイの中身の箱はスクロール領域なので、見出しとタブの並びで始まった縦の 1 本指の動きも記事の上と同じくブラウザーのスクロールへ渡る (横の動きは
23
+ 今まで通りスワイプ)。
24
+ - **オーバーレイの知らせの置き場が空のとき場所を取らない**: 置き場には知らせの提供者の警告の領域 (見えない `role="alert"`) が常に入るので `:empty` で隠れず、
25
+ 高さ 0 の項目として列の間隔 16px を 2 つ並べていた (320 × 256 では日報の箱から 16px を奪った)。置き場は見える知らせを持つ間だけ flex の箱になり、それ以外は
26
+ 箱を作らない (`display: contents`。警告の領域は読み上げの木に残る)。どの高さでもオーバーレイの日報の箱が 16px 高くなる (閉じるボタンの位置は変わらない)。
27
+
28
+ ## 0.51.0 (2026-10-25)
29
+
7
30
  ### Breaking
8
31
 
9
32
  - **的の大きさと配置がどのポインターでも同じ (マウス・トラックパッド・ペンでも 44 × 44 CSS px。WCAG 2.5.5)**: 0.50.0 で粗いポインター
package/README.md CHANGED
@@ -2786,9 +2786,16 @@ view, and no script computes or writes a height.
2786
2786
  (`display: flex; flex-direction: column`) whose height is bounded — a definite height, or the growing item of a column with a minimum height, such
2787
2787
  as a `min-height: 100dvh` shell whose footer follows the content. The header that `renderHeader` returns and the page box are items of that
2788
2788
  container, and the page box takes the rest of it. Nothing is bound and no host variable is read.
2789
- Outside such a container the view has no height to fill: its size is contained (below), so its content cannot size it, and it is 0 px tall.
2789
+ Outside such a container the view has only its minimum (below): its size is contained, so its content cannot size it.
2790
+ - **Host scroll for short windows**: a view never gets shorter than one List row slot P (**The view's minimum** below). When the container is shorter
2791
+ than the toolbar band plus that minimum (a 400 % zoom, a short window), the page box grows past the container instead of the view collapsing, so the
2792
+ container or one of its ancestors must scroll in the block axis (`overflow-y: auto`, not `hidden` or `clip`): the page scrolls (the host's header,
2793
+ the bands and the view) and every row stays reachable (WCAG 1.4.10). A container that clips its overflow hides the view. At ordinary window sizes the
2794
+ minimum is below the space left, the page box just fills the container and nothing scrolls.
2790
2795
  - **The fill chain**: every box from the page box down to a view's root — the page box, its centred width-capped wrapper, the view-mode tabs and the
2791
- active tab panel — fills the rest of its parent column (`flex: 1 1 0%; min-height: 0`) and declares no height. The wrapper's padding is the block
2796
+ active tab panel — fills the rest of its parent column (`flex: 1 1 0%`), never gets smaller than its content's minimum (`min-height: auto`: the band
2797
+ and the view's minimum) and declares no height. The view's root fills the tab panel at `flex: 1 1 0%` with the view's minimum as its
2798
+ `min-height`. The wrapper's padding is the block
2792
2799
  quantum q of the device-pixel lattice at the top and the sides (4 px, 8 px at the odd multiples of 1/8; **Row slots on the lattice**) and none at
2793
2800
  the bottom, so the view's box ends exactly at the page's bottom edge.
2794
2801
  Between the wrapper's top and the active tab panel sits the band of the view-mode toolbar (the search row too, when configured), which does not
@@ -2797,9 +2804,28 @@ view, and no script computes or writes a height.
2797
2804
  box (the fill rule and the page surface, slate-50 / dark slate-950) and its centred column (the fill rule, at most `max-w-6xl`, q from the frame's
2798
2805
  top and side edges, starting on the lattice; the column carries q itself). So the page keeps its colour in both schemes while loading ends (a dark
2799
2806
  page never shows the light surface first) and the content does not move sideways between the screens.
2807
+ - **The view's minimum**: one List row slot P = 4 · ⌈(52 px + 2 rem + max(4.75 rem, 44 px)) / 4⌉ (**List slot P**; 160 px at a 16 px root), the
2808
+ smallest whole row the views draw, as the root's `min-height` in the slot's own expression (an engine without `round()` takes the unrounded sum,
2809
+ less than 4 px below P). A view of that height shows at least one whole List card; a DetailList row, taller than P, scrolls inside the view.
2810
+ - **The side pane's minimum and its own scroll**: the side pane (the desktop frame beside the List and the mobile overlay's pane box) stacks two
2811
+ bands, the header column (business date and author) and the tab list, above its tab panel, a scroll box. The bands never shrink, and the tab panel
2812
+ never gets shorter than one whole target row inside its own block padding: `--spacing(2)` (its top padding) + T (44 px) + 4 px (the focus-ring
2813
+ reach at its bottom), 56 px (14 lattice units) at a 16 px root, so a 44 px control scrolled into view lies inside the box with its focus ring
2814
+ (4 + 44 + 4 = 52 within the scroll padding). The tabs root keeps its content's minimum (the tab list plus that row). When the pane cannot hold the
2815
+ bands plus that row (a 400 % zoom, a short window), the pane's content box (around the header column and the tabs, its clipping edges 4 px
2816
+ outside its content) overflows and scrolls in the block axis, so the header, the tabs and the article move together. On the desktop its thin bar
2817
+ wears the views' scroll-bar colours; in the overlay it is a vertical scroll area of the swipe overlay's panel (`touch-action: pan-y pinch-zoom`
2818
+ and `overscroll-behavior-y: contain`) and the close button stays below it. It never scrolls sideways, so a horizontal move on the overlay's pane
2819
+ is still the swipe.
2820
+ At ordinary heights the content fits, there is no scroll range and nothing moves. The pane scrolls inside the view's box, so the host needs
2821
+ nothing for it.
2822
+ - **The overlay's notice slot takes room only for the notice**: the slot of the error notice in the overlay, between the pane box and the close
2823
+ button, always holds the provider's alert region (a visually hidden `role="alert"` element), so it is never empty. It generates no box
2824
+ (`display: contents`) unless it holds the visible notice, so the column keeps one 16 px gap between the pane box and the close button; the alert
2825
+ region, absolutely positioned, stays in the accessibility tree.
2800
2826
  - **The view's root contains its size** (the fill rule, `contain: size` and `overflow: clip`, its children in block flow): its box is sized as if it
2801
2827
  were empty, so what the view renders — a `VirtualScroll` given the measured height — never feeds back into the root's size, into the intrinsic size
2802
- of an ancestor (a host column with a minimum height does not grow) or into the document's scroll height. The clip keeps rows drawn for the previous
2828
+ of an ancestor (a host column with a minimum height does not grow) or into the document's scroll height; only the view's minimum does. The clip keeps rows drawn for the previous
2803
2829
  height from painting outside the box during the one frame before the view renders the new height.
2804
2830
  The root's layout and paint are not contained: either would make the root the containing block of the mobile overlay, a fixed-position descendant,
2805
2831
  and as a flex item of its column the root could not be a relayout boundary anyway (Chromium makes no flex or grid item one, contained or not).