@aiquants/daily-report 0.51.0 → 0.52.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/CHANGELOG.md +40 -0
- package/README.md +43 -8
- package/dist/client.js +5 -5
- package/dist/client.mjs +5 -5
- package/dist/styles/daily-report.standalone.css +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,46 @@ All notable changes to `@aiquants/daily-report` are documented here.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- **操作部品と一覧の行の主の文字を本文の段 (13px) に**: 押せる部品と一覧の行の主の文字を `text-xs` の 12px から本文の段 (`BODY_TEXT_CLASS_NAME`。
|
|
10
|
+
`font-size: var(--aqdr-font-size-body, 0.8125rem)`・`line-height: var(--aqdr-line-height-body, 1.25rem)`。根 16px で 13px の文字・20px の行) へ上げた。
|
|
11
|
+
対象はビューのタブと側面ペインのタブ (`SEGMENTED_TRIGGER_CLASS_NAME`)・操作列の日報作成のボタンと自動既読のスイッチの文言・List のカードの営業日と作成者の札
|
|
12
|
+
(カードの名前)・添付のダウンロードのリンク・検索の帯の AND/OR と絞り込みの切り替え・コメントの削除の確認・ids ストリームの再試行のボタン。値は rem なので、
|
|
13
|
+
ページの拡大とブラウザーの文字の大きさの設定に従う。パッケージは 2 つの独自プロパティを読むだけで宣言しないので、ホストは `:root` で自分の型の段へ結べる
|
|
14
|
+
(結ばなければ既定の値)。補足の文字 (節の見出し語・メタデータ・知らせ・札・件数) はパッケージの下限の 12px のまま。20px の行は 44px の的・48px の帯の部品・
|
|
15
|
+
24px の札に収まるので、どの箱の高さも List の行の枠の高さも変わらない。
|
|
16
|
+
- **検索の帯の切り替えの最小の幅と折り返しの境目を 13px の文字から求め直した**: 最小の幅は 2 つの規則 (既定の文言の広い方の幅を 4px の格子へ切り上げて
|
|
17
|
+
4px 以上の余りを残し、外の余白 8 との和を 8 の倍数にする) で、AND/OR が 56px から 64px (`min-w-16`。`AND` は約 52.2px で、余りの規則の 60 を和が 72 になる幅へ切り上げた)、絞り込みが 104px から 112px (`min-w-28`。`絞り込み (48)` は約 105.3px)。
|
|
18
|
+
絞り込みの切り替えが自分の行へ移るビューの幅の境目 (`SEARCH_FILTERS_TOGGLE_WRAP_CLASS_NAME`・`SEARCH_ROW_CLASS_NAME`・`SEARCH_FAILURE_LINE_CLASS_NAME` の
|
|
19
|
+
`@max-[…]/views`) は、行の最小の幅の式 8 + 16 + 64 + 8 + 120 + 8 + 112 から 320px を 336px にした。既定の文言では入力欄の始まりと終わりの縁は 8px の段の上
|
|
20
|
+
(外の余白と合わせた 72 と 120) で、1/8 の奇数倍の画素密度 (2.625 など。ブロックの刻み 8px) でも装置の画素に乗る。
|
|
21
|
+
|
|
22
|
+
## 0.51.1 (2026-10-25)
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- **低い窓でもビューが 0 に潰れない (WCAG 1.4.10)**: 0.51.0 で操作列の帯がどのポインターでも 56px (折り返せば 112px)、検索の行の帯が 56〜112px になったため、
|
|
27
|
+
400 % の拡大 (320 × 256 CSS px、マウス) ではホストの見出し 148px と 2 つの帯 224px が列を使い切り、List と DetailList のビューの高さが 0 になって行に届かなかった。
|
|
28
|
+
ビューの根要素は最小の高さとして List の行の枠の高さ 1 つ分 P (`VIEW_MIN_BLOCK_SIZE_CLASS_NAME` = 4⌈(52px + 2rem + max(4.75rem, 44px)) / 4⌉。根 16px で 160。
|
|
29
|
+
`round()` を持たない描画エンジンは切り上げる前の和) を持ち、ページの箱からビューの根要素までの箱 (ページの枠・内容の列・ビューのタブ・タブの中身。
|
|
30
|
+
`PAGE_FILL_COLUMN_CLASS_NAME`) は中身の最小 (帯とビューの最小の高さ) より小さくならない。帯とビューの最小の高さが収まらない窓では、ページの箱がホストの列から
|
|
31
|
+
はみ出し、ホストの列 (かその祖先) の縦のスクロールがページ (見出し・帯・ビュー) を動かす。ホストはその列を `overflow-y: auto` にする (はみ出しを切る列ではビューが
|
|
32
|
+
隠れる。README の「Host scroll for short windows」)。ふつうの高さの窓では何も変わらない (ビューは列の残りを埋め、ページはスクロールしない)。
|
|
33
|
+
- **側面ペインの記事のスクロールの箱が潰れない (WCAG 1.4.10)**: 同じ 400 % の拡大で List のカードから開くモバイルのオーバーレイ (ダイアログ 256px) では、ペインの帯
|
|
34
|
+
(見出しの列とタブの並び) の下で記事のスクロールの箱が 12px まで潰れ、スクロールで見せたスターと既読のボタン (44px) の中心が箱の外に落ちて押せなかった。
|
|
35
|
+
記事と相関のタブの中身は最小の高さとして的の行 1 行 (`SIDE_PANE_SCROLL_PANEL_MIN_BLOCK_SIZE_CLASS_NAME` = `--spacing(2)` + T + 4px。根 16px で 56px) を持ち、
|
|
36
|
+
帯 (`SIDE_PANE_HEADER_BOX_CLASS_NAME`) は縮まず、タブの根は中身に基づく最小の高さを保つ。ペインが帯と的の行 1 行を入れきれない高さでは、見出しの列とタブの根を
|
|
37
|
+
包む中身の箱 (`SIDE_PANE_CONTENT_BOX_CLASS_NAME`) が縦にスクロールする (見出し・タブ・記事が一緒に動く。デスクトップでは細いバーにビューのスクロールバーの組の色、
|
|
38
|
+
オーバーレイでは面の縦のスクロール領域 `SWIPE_OVERLAY_SCROLL_AREA_STYLE` で、閉じるボタンは箱の下に残る)。ふつうの高さでは何も変わらない (スクロールの範囲が
|
|
39
|
+
無い)。オーバーレイの中身の箱はスクロール領域なので、見出しとタブの並びで始まった縦の 1 本指の動きも記事の上と同じくブラウザーのスクロールへ渡る (横の動きは
|
|
40
|
+
今まで通りスワイプ)。
|
|
41
|
+
- **オーバーレイの知らせの置き場が空のとき場所を取らない**: 置き場には知らせの提供者の警告の領域 (見えない `role="alert"`) が常に入るので `:empty` で隠れず、
|
|
42
|
+
高さ 0 の項目として列の間隔 16px を 2 つ並べていた (320 × 256 では日報の箱から 16px を奪った)。置き場は見える知らせを持つ間だけ flex の箱になり、それ以外は
|
|
43
|
+
箱を作らない (`display: contents`。警告の領域は読み上げの木に残る)。どの高さでもオーバーレイの日報の箱が 16px 高くなる (閉じるボタンの位置は変わらない)。
|
|
44
|
+
|
|
45
|
+
## 0.51.0 (2026-10-25)
|
|
46
|
+
|
|
7
47
|
### Breaking
|
|
8
48
|
|
|
9
49
|
- **的の大きさと配置がどのポインターでも同じ (マウス・トラックパッド・ペンでも 44 × 44 CSS px。WCAG 2.5.5)**: 0.50.0 で粗いポインター
|
package/README.md
CHANGED
|
@@ -2228,13 +2228,13 @@ while the screen shows searching as the indicator and a failure on the failure l
|
|
|
2228
2228
|
line wraps instead of truncating;
|
|
2229
2229
|
it comes first in the field's description (before the syntax help), and the field is `aria-invalid` only for an invalid query (busy, unavailable and
|
|
2230
2230
|
other failures are no input errors).
|
|
2231
|
-
The AND / OR toggle and the filter toggle share one look: a 48 px tall pill (the band's control height) with
|
|
2231
|
+
The AND / OR toggle and the filter toggle share one look: a 48 px tall pill (the band's control height) with semibold text in the body step (13 px on a 20 px line, **Text size** below), in the field face (OR; the closed filter row), whose
|
|
2232
2232
|
boundary comes from the text-field token as the field's does, or the filled face (AND; the open filter row), blue-800 under white text (dark: a light
|
|
2233
2233
|
blue-300 fill under slate-950 text) and `Highlight` under `HighlightText` in forced colours (**Text fields** in [Selection and focus appearance](#selection-and-focus-appearance)).
|
|
2234
2234
|
The faces differ only in colour, so a toggle that changes its face moves nothing. Each toggle stacks its current label and an invisible reserved label
|
|
2235
2235
|
in one grid cell — the AND / OR toggle the other mode's label, the filter toggle its label with the largest number of selected values (every filter at
|
|
2236
2236
|
its limit) —,
|
|
2237
|
-
so it takes the wider label's width, rounded up to a lattice minimum (
|
|
2237
|
+
so it takes the wider label's width, rounded up to a lattice minimum (64 px and 112 px; with its 8 px margin each spans a multiple of 8, 72 px and 120 px), and neither a press nor a growing count moves the field's
|
|
2238
2238
|
edges; with the default labels the field starts and ends on the 4 px lattice.
|
|
2239
2239
|
The reserved label is the generated content of a hidden element, so it is in neither the toggle's accessible name nor its text.
|
|
2240
2240
|
The field's description (`labels.searchSyntaxHelp`, also its tooltip) gives the syntax, says that a word in Latin letters also finds its kana reading
|
|
@@ -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
|
|
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
|
|
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).
|
|
@@ -3823,7 +3849,7 @@ luminance by 0.026 in the light theme, and a `shadow-md` brings the ring down to
|
|
|
3823
3849
|
- **Tab bars are one segmented control**: the side pane's tabs and the view-mode toolbar share one geometry. The bar has a 12 px corner (`rounded-xl`)
|
|
3824
3850
|
and a total inset of 4 px that counts its border (4 px padding without a border; 1 px border + 3 px padding with one), the same at the top and at
|
|
3825
3851
|
the sides.
|
|
3826
|
-
The tabs are 44 px tall (the target T; 48 px in the toolbar's band) with
|
|
3852
|
+
The tabs are 44 px tall (the target T; 48 px in the toolbar's band) with 13 px labels on 20 px lines (the body step, **Text size** below) and an 8 px corner (`rounded-lg`), so the side pane's bar is
|
|
3827
3853
|
4 + 44 + 4 = 52 px and the toolbar's 4 + 48 + 4 = 56 px tall, and every tab is concentric with its bar: 12 − 4 = 8. Because xl − lg = 4 equals the inset both in Tailwind's scale and in a host `--radius` scale (lg = `--radius`, xl =
|
|
3828
3854
|
`--radius` + 4 px), the pair stays concentric for any host radius; the toolbar's children at its end corners (the create button, the development
|
|
3829
3855
|
box) are `rounded-lg` too.
|
|
@@ -3873,7 +3899,8 @@ luminance by 0.026 in the light theme, and a `shadow-md` brings the ring down to
|
|
|
3873
3899
|
are exactly the token's, and the search box's spec renders every status message in both locales and checks that the line carries the token and no
|
|
3874
3900
|
truncating class.
|
|
3875
3901
|
- **Type and contrast**: no text is smaller than 12 px (`text-xs`; a scan of every module under `src/client` rejects a smaller arbitrary size,
|
|
3876
|
-
`src/client/components/report-views.spec.tsx`)
|
|
3902
|
+
`src/client/components/report-views.spec.tsx`), and the primary text of every control and list row is the body step, 13 px on a 20 px line
|
|
3903
|
+
(**Text size** below); every text colour reaches 7:1 (WCAG 1.4.6, AAA) against every surface it can sit on, in both themes
|
|
3877
3904
|
and every state (hover, active, `aria-*`, `data-*`, translucent surfaces composited over theirs), and the indicators 3:1:
|
|
3878
3905
|
`src/client/ui/aaa-text-contrast.spec.ts` scans every class literal of the shipped client (and the comment authors' colours) that sets a text colour,
|
|
3879
3906
|
refuses one without a registered surface, and measures each against its surfaces. The quiet text (section labels, metadata, placeholders, the empty
|
|
@@ -3882,6 +3909,14 @@ luminance by 0.026 in the light theme, and a `shadow-md` brings the ring down to
|
|
|
3882
3909
|
7.07–9.75). A source badge's colours are the host's (**External Source Badge Configuration**). Targets reach WCAG 2.5.5's 44 px under every pointer
|
|
3883
3910
|
(**Target size** below), except the List's resize handle with its 10 px hit area and the 8 px scroll bar beside it (**Side pane** above) and the
|
|
3884
3911
|
other exceptions listed there, so 2.5.5 is not claimed overall.
|
|
3912
|
+
- **Text size**: the primary text of every control and list row — the view tabs and the side pane's tabs, the toolbar's create button and the
|
|
3913
|
+
auto-read switch's label, the List card's business-date and author pills (the card's name), the attachments' download link, the search band's AND / OR
|
|
3914
|
+
and filter toggles, the comment's delete confirmation and the ids stream's retry button — is the body step, written once in the package's style tokens:
|
|
3915
|
+
`font-size: var(--aqdr-font-size-body, 0.8125rem)` and
|
|
3916
|
+
`line-height: var(--aqdr-line-height-body, 1.25rem)`, 13 px on a 20 px line at a 16 px root. Both are rem, so they follow page zoom and the browser's
|
|
3917
|
+
font-size setting. The package reads the two custom properties and never declares them: a host may bind them on `:root` (for example to its own type
|
|
3918
|
+
scale), and without a binding the defaults apply. Supplementary text (section labels, metadata, notices, badges, counts) stays at the package's 12 px
|
|
3919
|
+
floor. The 20 px line fits every box it sits in (the 44 px targets, the band's 48 px controls and the 24 px pills), so every box keeps its height.
|
|
3885
3920
|
- **WCAG 2.2 AAA beyond contrast**: met are 1.4.9 (no images of text), 2.1.3 (every function by the keyboard, the List splitter's arrow keys
|
|
3886
3921
|
included), 2.2.3 (nothing on a timer; **The built-in notice**), 2.3.2 (no flashes), 2.3.3 (motion follows `prefers-reduced-motion`), 2.4.8 (the page
|
|
3887
3922
|
and the report headings tell where the viewer is), 2.4.9 (links name their purpose), 2.4.10 (sections carry headings), 2.4.12 and 2.4.13 (the focus
|
|
@@ -3916,7 +3951,7 @@ luminance by 0.026 in the light theme, and a `shadow-md` brings the ring down to
|
|
|
3916
3951
|
`VirtualScroll`'s tap-scroll circle. Text fields use 16 px text under a coarse pointer (14 px under a fine one), so focusing them does not zoom the
|
|
3917
3952
|
page on touch browsers; this text is the only rule the package keys on the pointer, and a Tailwind host generates it from Tailwind CSS v4.1 on
|
|
3918
3953
|
(**Tailwind v4 host** above). The search field's Enter key is labelled as search (`enterkeyhint="search"`) and the comment field's as send
|
|
3919
|
-
(`enterkeyhint="send"`). When the views are narrower than
|
|
3954
|
+
(`enterkeyhint="send"`). When the views are narrower than 336 px (the search row's smallest width: the band's insets, both toggles, two 8 px gaps
|
|
3920
3955
|
and a field that keeps one 44 px target of text room), the search box's filter toggle moves to a line of its own under the field. The mobile overlay keeps its
|
|
3921
3956
|
content at least its 16 px padding and at least the display's safe-area insets (`env(safe-area-inset-*)`) from each edge.
|
|
3922
3957
|
- **Action buttons and icons**: the List card's star and read toggles, the star, read, edit and delete buttons of the DetailList header and the side
|