dsh-claude-style 0.19.3 → 0.19.4-dev.49

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/docs/CHANGELOG.md CHANGED
@@ -2,6 +2,64 @@
2
2
 
3
3
  All notable changes to `dsh-claude-style` are documented here, newest first.
4
4
 
5
+ ## [0.19.4] - 2026-10-26
6
+
7
+ [中文](#cn-0.19.4) | [English](#en-0.19.4)
8
+
9
+ <h3 id="cn-0.19.4">新增功能</h3>
10
+
11
+ - 新增看板用量能力:已折好的会话用量(每天的四类 token 分桶、按小时的结算次数与各模型总量)经 `dsh-claude-style:usage` 交给看板组件,与工作台首页那块用量面板读同一份缓存;能力注册可以带自己的调用时长上限。
12
+ - 新增对 `dsh-better-sidebar` 底部面板的页面像素适配:面板的左右边取两侧栏的实际位置、上边取输入区座位的下沿、下边取窗口底,全部按页面缩放因子换算;拖拽侧栏期间暂停写入,缩放回到 1 倍时把插件自己的值写回。
13
+ - 新增自定义计费表(#170):设置页「计费币种」下面多一行「编辑」,打开一张按模型填写单价的表(模型 / 缓存读 / 输入 / 输出,每百万 token)。填过的桶覆盖官方价格表,留空的桶仍按表格计价;表格里查不到的模型只按这张表计价。价格表跟会话一起送到宿主,正在流式估算的那一段也按同一张表算。窄屏时每一行折成一张卡片,模型在上、三个单价各带标签。
14
+
15
+ ### 体验优化
16
+
17
+ - 改善用量面板热力图的日提示:提示改为网格里常驻的一个元素,指针从一天移到另一天时在两天之间移动与缩放,不再为每一格生成一个再销毁,指针移过格间空隙时也不再消失;出现前有一小段停顿,离开时随即淡出。
18
+ - 改善颜色涂装的开销:等待行与设置预览卡上,色相与漂移两条常驻动画从连续插值改为按二十四步推进,`filter` 与八层背景位置从每帧重绘降为每周期二十四次(约每秒五次);四到五秒的周期下,漂移仍读作流动而不是跳动。
19
+ - 改善折叠摘要测算文案宽度的开销:测量所依赖的字体签名按隐藏的测量元素缓存,字体加载完成时整体失效,`getComputedStyle` 不再每个分组每趟重算;宽度表超过五百条时重新开始,长会话里每个不同的计数不再各占一条永久记录。
20
+
21
+ ### 问题修复
22
+
23
+ - 修复宿主的语音输入展开输入行活动格时,主题认不出这一格、挂载其中的麦克风入口随之失去座位排版的问题。
24
+ - 修复页面缩放下页面横向滚动、内容越出窗口右边界(#166):缩放只写在 `<body>` 上,`<html>` 的内边距与 `<body>` 的外边距先按窗口排版、再被倍数放大,越过窗口的那几像素又没有哪个 `overflow` 收得住。缩放时两者一并归零,纵向滚动交给文档元素,页面宽度不再随倍数多出几像素。
25
+ - 修复中文输入法的合成被皮肤打断:输入框处于合成期间时,空闲提示不再写入输入卡片,合成落地后再补写一次,微软拼音等输入法可以完整输入一个词。
26
+ - 修复模型选择器的峰谷徽章在分钟刷新后仍使用旧的悬停提示与读屏文字,使两级菜单的倍率、倒计时与完整说明同步更新,跨分钟打开二级菜单时也会刷新已有行。
27
+ - 修复窗口不可见时皮肤动画仍在运行:页面隐藏时 `<body>` 带上 `data-dsh-claude-asleep`,样式表把页面上的动画停在当下位置,首页涟漪的帧与字符定时器一并停摆,回到前台从当下继续,不再追赶积压的合成帧。
28
+ - 修复比窗口还高的皮肤弹层把下半截画到页面外:落位之后统一夹进窗口,卡片从窗口上沿开始,底部的行不再落到看不见的地方。
29
+ - 修复选择「减弱」动画后骨架脉冲仍在循环:上下文统计面板与首页用量面板的占位条各有一处声明压过全局兜底把循环次数定成一次的规则,一处是带 `!important` 的动画简写,一处是更高的选择器权重;两处改为从兜底网读循环次数。
30
+ - 修复会话视图页签的按钮盒相互重叠的问题,使各页签的点击区域与选中底板保持独立。
31
+ - 修复侧栏页脚的更新入口在接管后消失(#167):插件挂在 `sidebar.footer.action` 里的更新控件带 `data-dsh-plugin="update"` 与 `data-dsh-part="entry"`,皮肤按这两个名字认出它,把它留在侧栏——原节点留在槽位里不显示,账号行右端立一份它的副本,文案、图标、进度与点击都跟着插件自己走;侧栏收成细轨时副本收起。
32
+ - 修复三处随使用累积的残留:模型按钮重建时,标签交换的尺寸订阅没有随旧标签释放;模型子菜单的悬停定时器与光标焦点结算的定时器在功能拆卸后仍会触发。
33
+ - 修复账号行显示登录用的账号号码而不是设置里的用户名:桌面端有账号行时那一行由宿主自己渲染,皮肤只重绘了它的盒子与头像,文字从未被替换;而设置页明确写着「用户名显示在欢迎语与账号行里」。现在宿主那行的标签换成解析出的名字,交还页脚时把宿主原文放回。
34
+ - 修复关闭「重绘模型选择器」后上下文圆环掉到工具栏下方单独一行(#162):圆环原本以模型座位的盒子为落点,关闭重绘后座位不存在,于是皮肤既没有画圆环、也没有把宿主自己的圆环收起来,宿主那个更宽的圆环占住这一行,中段空档被判为放不下,整行让到下方。圆环回答的是上下文用量,与模型选择器是否重绘无关:没有座位时它落在座位的槽本身,宿主圆环照旧收起。
35
+
36
+ <h3 id="en-0.19.4">New Features</h3>
37
+
38
+ - Add a widget-board usage capability: the folded session usage (four token buckets per day, settlements per hour and per-model totals) reaches widget cards as `dsh-claude-style:usage`, reading the same cache as the studio home panel; a capability registration can now carry its own call timeout.
39
+ - Add page-pixel fitting for `dsh-better-sidebar`'s bottom panel: its left and right edges follow the two side columns, its top edge follows the composer seat's bottom, and its height reaches the window's bottom, all divided by the page-zoom factor; writes pause while a column is dragged, and every value the plugin wrote is restored at scale 1.
40
+ - Add the custom price table (#170): a "Edit" row under the billing currency opens a per-model table of rates (model / cache read / input / output, per million tokens). A filled bucket overrides the official tables and a blank one keeps their rate; a model the tables do not carry is priced from this table alone. The rows travel with the session to the host, so the answer still streaming is priced the same way. Under 760px each row folds into a card with the model above three labelled rates.
41
+
42
+ ### Improvements
43
+
44
+ - Improve the usage panel's day tip: the tip is one element the grid keeps, so it travels and resizes between two days instead of being built and dropped for each cell, and crossing the gutters between cells no longer makes it disappear; it rests a moment before appearing and fades at once on the way out.
45
+ - Improve the cost of the colour wash: on the waiting line and the settings preview cards, the hue turn and the drift advance in twenty-four steps instead of interpolating continuously, taking the `filter` and the eight background positions from a repaint per frame to twenty-four a cycle (about five a second); over a four-to-five-second cycle the drift still reads as drifting rather than stepping.
46
+ - Improve the cost of measuring a folded summary's wording: the face a measurement depends on is kept per hidden measuring span and dropped when a face arrives, so `getComputedStyle` is no longer recalculated per group per pass, and the table starts over past five hundred entries instead of keeping a permanent record for every count a long session rolls.
47
+
48
+ ### Bug Fixes
49
+
50
+ - Fix the theme not recognising the composer's activity seat while the host expands it for voice input, which took the seat's layout away from the microphone entry mounted inside it.
51
+ - Fix the page scrolling sideways and content running past the window's right edge at a page zoom (#166): the scale was written on `<body>` alone, so the document element's padding and the body's margin were laid out against the window and then drawn through the factor, and no `overflow` could clip the few pixels that reached past it. Both go to zero while the page is drawn at a factor and the document element takes the vertical scroll, so the page no longer grows a few pixels wider with every step.
52
+ - Fix the skin breaking an input-method composition: the idle hint is no longer written into the composer card while the field is composing, and settles once the composition lands, so CJK input methods can finish a word.
53
+ - Fix model picker rate badges retaining stale tooltips and accessible names after a minute refresh, keeping the rate, countdown and full judgement together in both menu levels and refreshing existing rows when the second level opens in a new minute.
54
+ - Fix the skin's animations running while the window is hidden: a hidden page marks `<body>` with `data-dsh-claude-asleep`, the stylesheet holds every animation on the page where it stands, and the home ripple's frame and character clocks stop with it, so a return carries on from there instead of catching up on queued frames.
55
+ - Fix a skin popover taller than the window drawing its lower rows off the page: every card is held inside the window after it is placed, so it begins at the window's top edge instead of ending below its bottom.
56
+ - Fix the skeleton pulses still cycling under the Reduced animation choice: the placeholders of the context statistics panel and of the home page's usage panel each overrode the theme-wide net's single iteration — one through a shorthand carrying `!important`, the other through a heavier selector — and both now take their iteration count from that net.
57
+ - Fix overlapping conversation view-tab buttons so each tab keeps its own hit area and active pill.
58
+ - Fix the update control vanishing from the sidebar footer once the skin takes the footer over (#167): the control a plugin mounts into `sidebar.footer.action` names itself with `data-dsh-plugin="update"` and `data-dsh-part="entry"`, and the skin recognises it by those names and keeps it in the sidebar — the plugin's own node stays hidden in its slot while a copy of it stands at the right end of the account row, carrying the plugin's words, mark, progress and press; the rail folds the copy away.
59
+ - Fix three leftovers that accumulate with use: a rebuilt model button left its label's swap subscription behind with the old label, and the model sub-menu's hover timer and the caret's focus-settle timer still fired after their feature was torn down.
60
+ - Fix the account row showing the account number the host signs in with instead of the name from the settings: on a host that renders that row itself the skin repainted its box and picture but never its words, while the settings page promises the name shows on the account row too. The host row's label now carries the resolved name, and the host's own label is put back when the footer is handed over.
61
+ - Fix the context ring dropping to a line of its own under the toolbar when "Redraw the model picker" is off (#162): the ring stood behind the model seat's box, and with the picker's redraw off there is no seat — so the skin drew no ring and left the host's own meter uncovered, whose wider box took the row and made the middle gap read as too narrow, moving the whole line below. The ring answers the context reading, not the picker's switch: with no seat it closes the slot itself, and the host's meter stays covered.
62
+
5
63
  ## [0.19.3] - 2026-10-25
6
64
 
7
65
  [中文](#cn-0.19.3) | [English](#en-0.19.3)
package/docs/STYLE.md CHANGED
@@ -563,6 +563,11 @@ close)` and calls `closeOtherPopovers(name)` on the way open, so opening the
563
563
  model picker folds the permission menu, the account drawer and the host's hero
564
564
  menu.
565
565
 
566
+ Every card the skin places stays inside the window: `positionAnchoredPopover`
567
+ holds the resolved position inside the window's own pixels, so a card taller
568
+ than the room beside its trigger begins at the window's top edge rather than
569
+ drawing its lower rows past the bottom of the page.
570
+
566
571
  The context meter's popover is the host's own panel (it portals it, places it,
567
572
  and dismisses it), so the skin drives its trigger on hover and paints nothing of
568
573
  the shell itself. What it carries is described under "Context popover" below.
@@ -641,6 +646,14 @@ that carries its one-shot entrance), and the feature stamps
641
646
  placement has been read twice with the same value. The entrance animation hangs
642
647
  on that stamp, so it plays on the card the reader will actually see.
643
648
 
649
+ One footer control stays in the sidebar rather than becoming a row of that
650
+ card: the update plugin's own button, which names itself with
651
+ `data-dsh-plugin="update"` and `data-dsh-part="entry"`. The takeover leaves the
652
+ plugin's node hidden in its slot and stands a copy of it at the right end of the
653
+ account row — the plugin's words, mark, progress and press, at the pill's 22px
654
+ height and 11px type — so a reader reaching for an update does not have to open
655
+ the menu first. The rail has no room beside the icon and folds the copy away.
656
+
644
657
  ## Context popover · 上下文弹层
645
658
 
646
659
  The context meter's popover is the host's own panel: the skin opens it by
@@ -705,6 +718,15 @@ fits its figures again for the width the arriving amount needs. The
705
718
  nothing is drawn, and the browser asks the host for neither the price table nor
706
719
  the session's total.
707
720
 
721
+ The settings page's custom price table (the row under the currency) writes a row
722
+ per model — `model|input|cacheRead|output`, per million tokens in that currency —
723
+ and a filled bucket overrides the tables' rate while a blank one leaves it alone.
724
+ The rows travel to the host with the session's cost ask, so a settlement and the
725
+ answer still streaming are priced from one set of rates; a model neither the
726
+ tables nor a row prices leaves the segment out of the line as before. The
727
+ editor's card is the modal's own: a 720px card on the window, and a page under
728
+ 760px folds each row into a card with the model above three labelled rates.
729
+
708
730
  Which figures appear follows the host's statistics row. Its detailed form gets
709
731
  the whole list. Its compact form carries only the output speed and the cache-hit
710
732
  share on the composer line, so the block keeps the four that row leaves out —
@@ -958,17 +980,20 @@ grid takes one
958
980
  equal column per week (twenty-six weeks), square cells from a 3px gutter, in
959
981
  Claude Code's blue data ramp (`#3b6ecf` mixed in at the shares `HOME_HEAT_RAMP`
960
982
  in `packages/client/src/constants.ts` lists, over the neutral empty cell); because the columns are fractions of the panel's own width, the newest
961
- week can never fall past the edge. Hovering a cell shows Claude Code's day tip at
962
- once: a solid pill in the label ink with the canvas tone for text (so it inverts
963
- with the theme), 13px medium, reading the day in the shell's language and the
964
- tokens that day spent ("Sep 9 — 15.9k tokens"), the same figure the cell's heat
965
- is bucketed from; the pill is centred on its cell except where its own width
966
- would carry it past the panel's edge, and there it lines up with that cell's
967
- outer edge so it stays inside the panel, and it stands above its cell except
968
- where the cell holds more room below it, and there it hangs under the cell so it
969
- never reaches over the grid's top edge across the stat cells; the pill's own
970
- width and height are read off the cell the
971
- pointer is on (`packages/client/src/features/home/heat-tip.ts`).
983
+ week can never fall past the edge. Hovering a cell raises Claude Code's day tip
984
+ after a short rest: a solid pill in the label ink with the canvas tone for text
985
+ (so it inverts with the theme), 13px medium, reading the day in the shell's
986
+ language and the tokens that day spent ("Sep 9 — 15.9k tokens"), the same figure
987
+ the cell's heat is bucketed from. The grid carries one pill and moves it onto the
988
+ day the pointer names, so a crossing between two cells changes its words in place
989
+ and leaves it standing over the gutters between them rather than building and
990
+ dropping a box for every cell; it is centred on its day except where its own
991
+ width would carry it past the panel's edge, and there it lines up with that
992
+ cell's outer edge so it stays inside the panel, and it stands above its cell
993
+ except where the cell holds more room below it, and there it hangs under the cell
994
+ so it never reaches over the grid's top edge across the stat cells; its width is
995
+ taken from the words it carries and its height from its own box
996
+ (`packages/client/src/features/home/heat-tip.ts`).
972
997
  Models is Claude Code's own shape: one column
973
998
  per day of the chart's thirty-day window, stacked from the axis up with each
974
999
  model's slice in its rank's colour (ranks past the ramp share its last, grey
Binary file
Binary file
Binary file
@@ -101,15 +101,15 @@
101
101
  "encoding": "br",
102
102
  "bytes": 77602
103
103
  },
104
- "dd2226ba435f.js": {
104
+ "212c8e3d551b.js": {
105
105
  "type": "text/javascript; charset=utf-8",
106
106
  "encoding": "br",
107
- "bytes": 34453
107
+ "bytes": 35437
108
108
  },
109
- "ca6d29e08e1f.js.map": {
109
+ "7d2dcb0be136.js.map": {
110
110
  "type": "application/json; charset=utf-8",
111
111
  "encoding": "br",
112
- "bytes": 185238
112
+ "bytes": 189414
113
113
  },
114
114
  "b55a1acf34e0.js": {
115
115
  "type": "text/javascript; charset=utf-8",
@@ -121,15 +121,15 @@
121
121
  "encoding": "br",
122
122
  "bytes": 28560
123
123
  },
124
- "cbbadac799d3.js": {
124
+ "976cd6c95f4b.js": {
125
125
  "type": "text/javascript; charset=utf-8",
126
126
  "encoding": "br",
127
- "bytes": 20977
127
+ "bytes": 20952
128
128
  },
129
- "b6d695c4c978.js.map": {
129
+ "adb6fefb20ef.js.map": {
130
130
  "type": "application/json; charset=utf-8",
131
131
  "encoding": "br",
132
- "bytes": 80207
132
+ "bytes": 80025
133
133
  },
134
134
  "ee5c79cfab80.js": {
135
135
  "type": "text/javascript; charset=utf-8",
@@ -151,15 +151,15 @@
151
151
  "encoding": "br",
152
152
  "bytes": 134535
153
153
  },
154
- "d021d0e8b40f.js": {
154
+ "d1be2553f5b3.js": {
155
155
  "type": "text/javascript; charset=utf-8",
156
156
  "encoding": "br",
157
- "bytes": 42475
157
+ "bytes": 42546
158
158
  },
159
- "e8179a83512a.js.map": {
159
+ "b1a6fbd74af8.js.map": {
160
160
  "type": "application/json; charset=utf-8",
161
161
  "encoding": "br",
162
- "bytes": 165856
162
+ "bytes": 169499
163
163
  }
164
164
  }
165
165
  }