@sparkelf/dsh-patch-composer-popover-boundaries 0.2.1-alpha.2 → 0.2.1-alpha.21
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
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"file": "./patches/composer-popover-boundaries.patch",
|
|
9
9
|
"id": "composer-popover-center-boundaries",
|
|
10
10
|
"target": {
|
|
11
|
-
"baseRevision": "
|
|
11
|
+
"baseRevision": "6851e496285b2c9670066fdd142e7e46da586649",
|
|
12
12
|
"kind": "dsh-source",
|
|
13
13
|
"paths": [
|
|
14
14
|
"apps/web/tests/",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"url": "git+https://github.com/SparkElf/deepseek-harness-plus.git"
|
|
36
36
|
},
|
|
37
37
|
"type": "module",
|
|
38
|
-
"version": "0.2.1-alpha.
|
|
38
|
+
"version": "0.2.1-alpha.21"
|
|
39
39
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
diff --git a/apps/web/tests/access-confirmation.e2e.ts b/apps/web/tests/access-confirmation.e2e.ts
|
|
2
|
-
index
|
|
2
|
+
index f97978d346..edab518be0 100644
|
|
3
3
|
--- a/apps/web/tests/access-confirmation.e2e.ts
|
|
4
4
|
+++ b/apps/web/tests/access-confirmation.e2e.ts
|
|
5
5
|
@@ -151,6 +151,12 @@ describe('web e2e: experimental Auto and Full access confirmation', () => {
|
|
@@ -16,7 +16,7 @@ index a47cad6..6c05516 100644
|
|
|
16
16
|
const dialog = page.getByRole('dialog', { name: '确认启用完全权限?' })
|
|
17
17
|
await dialog.waitFor({ timeout: 10_000 })
|
|
18
18
|
diff --git a/apps/web/tests/default-model.e2e.ts b/apps/web/tests/default-model.e2e.ts
|
|
19
|
-
index
|
|
19
|
+
index 72ebfb69c2..b61f6a61f8 100644
|
|
20
20
|
--- a/apps/web/tests/default-model.e2e.ts
|
|
21
21
|
+++ b/apps/web/tests/default-model.e2e.ts
|
|
22
22
|
@@ -323,6 +323,13 @@ describe('web e2e: the composer model switch is the default for later sessions',
|
|
@@ -34,20 +34,20 @@ index d87bf4c..901bf5f 100644
|
|
|
34
34
|
const composerBounds = await page.locator('[data-composer-card]').first().boundingBox()
|
|
35
35
|
expect(modelMenuBounds!.width).toBeLessThan(composerBounds!.width)
|
|
36
36
|
diff --git a/packages/client/ui-layout/README.md b/packages/client/ui-layout/README.md
|
|
37
|
-
index
|
|
37
|
+
index 43c61b89d1..8fa5117005 100644
|
|
38
38
|
--- a/packages/client/ui-layout/README.md
|
|
39
39
|
+++ b/packages/client/ui-layout/README.md
|
|
40
40
|
@@ -56,7 +56,7 @@ The presenter consumes resolved theme snapshots and projects them onto the docum
|
|
41
41
|
|
|
42
42
|
`selectPanel(id)` checks the live `main` registry before changing selection; an absent key throws and leaves the current panel intact. `beginNavigation()` returns an abort signal for an asynchronous UI navigation. A later call, a valid panel selection (including repeated selection), or layout disposal aborts that signal without cancelling underlying Session creation. Consumers check the signal before committing navigation or moving drafts.
|
|
43
43
|
|
|
44
|
-
-One registration declares the frame slots and binds `ctx.layout` methods `selectPanel`, `toggleSidebar`, `openRightbar(track, fullscreen)`, and `closeRightbar`. One root store separates `panelInfo` selection from `layoutInfo` measurements, width preferences, and presentation reports. `ctx.layout.panelInfo` and the standard `usePanelInfo` hook share the same selection source; AppFrame subscribes to the stable layout object. The `rightbar` owner supplies actual `width`, `viewportWidth`, and normal-presentation eligibility `canShow`; insufficient room causes a deterministic close, never automatic reopening on widening. Fullscreen hides the width handle without releasing a track the occupant retains. AppFrame keeps the column containers mounted. The right column's root controller renders `rightbar.session` through `SessionProvider` only while the Conversation is selected; its unmount report releases the track. The independent title component uses the selected Session title only while the Conversation is visible, with the build-configured product title or localized `common.brand.localBuild` as its fallback; locale revisions update that fallback. The theme presenter is a second effect: pure DOM writes from resolved snapshots — initial state through the getter once, then event-driven only, with no React path. It applies palette, font-size, and token variables before measuring the rendered background as the single color authority. Fullscreen presentation suppresses grid and handle transitions; its occupant reports the new columns only after covering the frame. Fullscreen exit keeps transitions suppressed while the frame installs its destination geometry: close removes the right track, and restore retains it. Subsequent normal geometry actions restore ordinary transitions.
|
|
45
|
-
+One registration declares the frame slots and binds `ctx.layout` methods `selectPanel`, `toggleSidebar`, `openRightbar(track, fullscreen)`, and `closeRightbar`. One root store separates `panelInfo` selection from `layoutInfo` measurements, width preferences, and presentation reports. `ctx.layout.panelInfo` and the standard `usePanelInfo` hook share the same selection source; AppFrame subscribes to the stable layout object. The `rightbar` owner supplies actual `width`, `viewportWidth`, and normal-presentation eligibility `canShow`; insufficient room causes a deterministic close, never automatic reopening on widening. Fullscreen hides the width handle without releasing a track the occupant retains. AppFrame keeps the column containers mounted. The center column marks its DOM owner so portaled composer menus can stay inside its horizontal bounds. The right column's root controller renders `rightbar.session` through `SessionProvider` only while the Conversation is selected; its unmount report releases the track. The independent title component uses the selected Session title only while the Conversation is visible, with the build-configured product title or localized `common.brand.localBuild` as its fallback; locale revisions update that fallback. The theme presenter is a second effect: pure DOM writes from resolved snapshots — initial state through the getter once, then event-driven only, with no React path. It applies palette, font-size, and token variables before measuring the rendered background as the single color authority. Fullscreen presentation suppresses grid and handle transitions; its occupant reports the new columns only after covering the frame. Fullscreen exit keeps transitions suppressed while the frame installs its destination geometry: close removes the right track, and restore retains it. Subsequent normal geometry actions restore ordinary transitions.
|
|
44
|
+
-One registration declares the frame slots and binds `ctx.layout` methods `selectPanel`, `toggleSidebar`, `openRightbar(track, fullscreen)`, and `closeRightbar`. One root store separates `panelInfo` selection from `layoutInfo` measurements, width preferences, and presentation reports. `ctx.layout.panelInfo` and the standard `usePanelInfo` hook share the same selection source; AppFrame subscribes to the stable layout object. The `rightbar` owner supplies actual `width`, `viewportWidth`, and normal-presentation eligibility `canShow`; insufficient room causes a deterministic close, never automatic reopening on widening. Fullscreen hides the width handle without releasing a track the occupant retains. AppFrame keeps the column containers mounted. The right column's root controller renders `rightbar.session` through `SessionProvider` only while the Conversation is selected; its unmount report releases the track. The independent title component uses the selected Session title only while the Conversation is visible, with the build-configured product title or localized `common.brand.localBuild` as its fallback; locale revisions update that fallback. The theme presenter is a second effect: pure DOM writes from resolved snapshots — initial state through the getter once, then event-driven only, with no React path. It applies palette, font-size, font-list, and token variables before measuring the rendered background as the single color authority. Fullscreen presentation suppresses grid and handle transitions; its occupant reports the new columns only after covering the frame. Fullscreen exit keeps transitions suppressed while the frame installs its destination geometry: close removes the right track, and restore retains it. Subsequent normal geometry actions restore ordinary transitions.
|
|
45
|
+
+One registration declares the frame slots and binds `ctx.layout` methods `selectPanel`, `toggleSidebar`, `openRightbar(track, fullscreen)`, and `closeRightbar`. One root store separates `panelInfo` selection from `layoutInfo` measurements, width preferences, and presentation reports. `ctx.layout.panelInfo` and the standard `usePanelInfo` hook share the same selection source; AppFrame subscribes to the stable layout object. The `rightbar` owner supplies actual `width`, `viewportWidth`, and normal-presentation eligibility `canShow`; insufficient room causes a deterministic close, never automatic reopening on widening. Fullscreen hides the width handle without releasing a track the occupant retains. AppFrame keeps the column containers mounted. The center column marks its DOM owner so portaled composer menus can stay inside its horizontal bounds. The right column's root controller renders `rightbar.session` through `SessionProvider` only while the Conversation is selected; its unmount report releases the track. The independent title component uses the selected Session title only while the Conversation is visible, with the build-configured product title or localized `common.brand.localBuild` as its fallback; locale revisions update that fallback. The theme presenter is a second effect: pure DOM writes from resolved snapshots — initial state through the getter once, then event-driven only, with no React path. It applies palette, font-size, font-list, and token variables before measuring the rendered background as the single color authority. Fullscreen presentation suppresses grid and handle transitions; its occupant reports the new columns only after covering the frame. Fullscreen exit keeps transitions suppressed while the frame installs its destination geometry: close removes the right track, and restore retains it. Subsequent normal geometry actions restore ordinary transitions.
|
|
46
46
|
|
|
47
47
|
</details>
|
|
48
48
|
|
|
49
49
|
diff --git a/packages/client/ui-layout/src/client/AppFrame.tsx b/packages/client/ui-layout/src/client/AppFrame.tsx
|
|
50
|
-
index
|
|
50
|
+
index 5614947447..e3fc26d707 100644
|
|
51
51
|
--- a/packages/client/ui-layout/src/client/AppFrame.tsx
|
|
52
52
|
+++ b/packages/client/ui-layout/src/client/AppFrame.tsx
|
|
53
53
|
@@ -33,7 +33,7 @@ export type AppFrameProps =
|
|
@@ -60,7 +60,7 @@ index 5614947..e3fc26d 100644
|
|
|
60
60
|
|
|
61
61
|
/** Subscribe to the main key without subscribing the column frame to each panel id. */
|
|
62
62
|
diff --git a/packages/client/ui-model-selection/src/client/ModelSelect.module.css b/packages/client/ui-model-selection/src/client/ModelSelect.module.css
|
|
63
|
-
index
|
|
63
|
+
index f4f42cb9cc..3b01c1a887 100644
|
|
64
64
|
--- a/packages/client/ui-model-selection/src/client/ModelSelect.module.css
|
|
65
65
|
+++ b/packages/client/ui-model-selection/src/client/ModelSelect.module.css
|
|
66
66
|
@@ -94,7 +94,9 @@
|
|
@@ -75,10 +75,10 @@ index f4f42cb..3b01c1a 100644
|
|
|
75
75
|
min-width: min(240px, calc(100vw - 32px));
|
|
76
76
|
max-width: min(420px, calc(100vw - 32px));
|
|
77
77
|
diff --git a/packages/client/ui-model-selection/src/client/ModelSelect.tsx b/packages/client/ui-model-selection/src/client/ModelSelect.tsx
|
|
78
|
-
index
|
|
78
|
+
index 8d37dab5e3..43e1d320f1 100644
|
|
79
79
|
--- a/packages/client/ui-model-selection/src/client/ModelSelect.tsx
|
|
80
80
|
+++ b/packages/client/ui-model-selection/src/client/ModelSelect.tsx
|
|
81
|
-
@@ -
|
|
81
|
+
@@ -219,13 +219,25 @@ export function ModelSelect(
|
|
82
82
|
const rect = triggerRef.current?.getBoundingClientRect()
|
|
83
83
|
if (rect === undefined) return
|
|
84
84
|
const MARGIN = 12
|
|
@@ -108,10 +108,10 @@ index fbeda5d..1857d75 100644
|
|
|
108
108
|
// First run measures the hidden pre-render (same commit as `open`), so
|
|
109
109
|
// the card lands placed before anything paints.
|
|
110
110
|
diff --git a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx
|
|
111
|
-
index
|
|
111
|
+
index b077cc9093..b8bbc7a284 100644
|
|
112
112
|
--- a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx
|
|
113
113
|
+++ b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx
|
|
114
|
-
@@ -
|
|
114
|
+
@@ -323,23 +323,30 @@ describe('ModelSelect reasoning effort', () => {
|
|
115
115
|
Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { configurable: true, get: () => 200 })
|
|
116
116
|
Object.defineProperty(HTMLElement.prototype, 'offsetHeight', { configurable: true, get: () => 300 })
|
|
117
117
|
try {
|
|
@@ -148,7 +148,7 @@ index 470c852..40998a1 100644
|
|
|
148
148
|
// Interactions inside the trigger subtree or the portaled card stay open.
|
|
149
149
|
expect(fireEvent.mouseDown(menu)).toBe(true)
|
|
150
150
|
diff --git a/packages/client/ui-permission-presets/src/client/PermissionSelect.tsx b/packages/client/ui-permission-presets/src/client/PermissionSelect.tsx
|
|
151
|
-
index
|
|
151
|
+
index 0281c41a24..f44f20a8fc 100644
|
|
152
152
|
--- a/packages/client/ui-permission-presets/src/client/PermissionSelect.tsx
|
|
153
153
|
+++ b/packages/client/ui-permission-presets/src/client/PermissionSelect.tsx
|
|
154
154
|
@@ -1,4 +1,4 @@
|
|
@@ -157,7 +157,7 @@ index f34e2b1..c5db564 100644
|
|
|
157
157
|
import type { ReactNode } from 'react'
|
|
158
158
|
import clsx from 'clsx'
|
|
159
159
|
import {
|
|
160
|
-
@@ -
|
|
160
|
+
@@ -81,6 +81,8 @@ export function PermissionSelect({
|
|
161
161
|
const catalog = usePermissionCatalog(state => state.value)
|
|
162
162
|
const [pick, setPick] = useState<string | null>(null)
|
|
163
163
|
const [open, setOpen] = useState(false)
|
|
@@ -166,7 +166,7 @@ index f34e2b1..c5db564 100644
|
|
|
166
166
|
const [confirmation, setConfirmation] = useState<string | null>(null)
|
|
167
167
|
const [acknowledged, setAcknowledged] = useState(false)
|
|
168
168
|
|
|
169
|
-
@@ -
|
|
169
|
+
@@ -171,8 +173,12 @@ export function PermissionSelect({
|
|
170
170
|
onClose={() => { setOpen(false) }}
|
|
171
171
|
side="top"
|
|
172
172
|
portal
|
|
@@ -178,9 +178,9 @@ index f34e2b1..c5db564 100644
|
|
|
178
178
|
+ }}
|
|
179
179
|
type="button"
|
|
180
180
|
className={css.trigger}
|
|
181
|
-
aria-label={t('mode', { name:
|
|
181
|
+
aria-label={t('mode', { name: currentLabel })}
|
|
182
182
|
diff --git a/packages/client/ui-primitives/README.md b/packages/client/ui-primitives/README.md
|
|
183
|
-
index
|
|
183
|
+
index c4f3467c8e..304b055e38 100644
|
|
184
184
|
--- a/packages/client/ui-primitives/README.md
|
|
185
185
|
+++ b/packages/client/ui-primitives/README.md
|
|
186
186
|
@@ -46,7 +46,7 @@ Check this table before writing a control in a feature package. A plugin cannot
|
|
@@ -193,7 +193,7 @@ index 9ce34c7..15b8360 100644
|
|
|
193
193
|
| `Pill` | Selectable capsule button for view switchers and filters; takes `active` and `onClick`. |
|
|
194
194
|
| `SegmentedTabs` | Controlled equal-width tabs with a sliding indicator and Left/Right, Home, and End navigation. The caller supplies labels, tab/panel ids, and panel content. |
|
|
195
195
|
diff --git a/packages/client/ui-primitives/README.zh.md b/packages/client/ui-primitives/README.zh.md
|
|
196
|
-
index
|
|
196
|
+
index 48cec6c9c3..ab4f647a7b 100644
|
|
197
197
|
--- a/packages/client/ui-primitives/README.zh.md
|
|
198
198
|
+++ b/packages/client/ui-primitives/README.zh.md
|
|
199
199
|
@@ -25,7 +25,7 @@ kind: "package-library"
|
|
@@ -206,7 +206,7 @@ index 92a8de2..a9dcf91 100644
|
|
|
206
206
|
弹窗自动进入及弹窗、菜单回焦,包括通过 Esc 和应用关闭快捷键触发的回焦,均使用 `focusWithoutRing(element, options?)`,在 Tab 或方向键导航恢复正常焦点样式前抑制外轮廓线。弹窗容器仍不绘制焦点外框。原有边框、阴影和错误状态保持不变。用 `data-modal-autofocus` 标记弹窗的初始控件,让模态层先保存触发控件,再移动焦点。随弹窗挂载的控件不得使用 React `autoFocus`,因为它会在保存触发控件前执行。弹窗容器获得焦点时,Tab 和 Shift+Tab 分别进入第一个和最后一个可聚焦控件。
|
|
207
207
|
|
|
208
208
|
diff --git a/packages/client/ui-primitives/src/Menu.tsx b/packages/client/ui-primitives/src/Menu.tsx
|
|
209
|
-
index
|
|
209
|
+
index fd5b655d5c..cd0a7ead05 100644
|
|
210
210
|
--- a/packages/client/ui-primitives/src/Menu.tsx
|
|
211
211
|
+++ b/packages/client/ui-primitives/src/Menu.tsx
|
|
212
212
|
@@ -1,5 +1,5 @@
|
|
@@ -296,7 +296,7 @@ index fd5b655..cd0a7ea 100644
|
|
|
296
296
|
// Opening remembers where the keyboard was, so closing can hand it back to
|
|
297
297
|
// that control — an anchor wrapping several (a split button) cannot be asked
|
|
298
298
|
diff --git a/packages/client/ui-primitives/tests/atoms.client.spec.tsx b/packages/client/ui-primitives/tests/atoms.client.spec.tsx
|
|
299
|
-
index
|
|
299
|
+
index bc48ea0d38..767b60a7a6 100644
|
|
300
300
|
--- a/packages/client/ui-primitives/tests/atoms.client.spec.tsx
|
|
301
301
|
+++ b/packages/client/ui-primitives/tests/atoms.client.spec.tsx
|
|
302
302
|
@@ -504,6 +504,33 @@ describe('Menu', () => {
|