Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions components/ExtensionWidgets.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -126,21 +126,34 @@ test("compares widget lines without delimiter collisions", () => {
assert.deepEqual(getUpdatedExtensionWidgetKeys(previous, next), ["status"]);
});

test("uses a compact key-only trigger with a placement icon", () => {
test("keeps one-line widgets compact but expandable", () => {
const html = renderWidgets({
widgets: [{ key: "long-extension-widget-key", lines: ["ready"], placement: "belowEditor" }],
widgets: [{ key: "single-line-widget", lines: ["ready"], placement: "belowEditor" }],
});

assert.match(html, /extension-widget-triggers/);
assert.match(html, /<svg[^>]*extension-widget-placement-icon/);
assert.match(html, /data-direction="down"/);
assert.doesNotMatch(html, /[\u2191\u2193]/);
assert.match(html, /Below editor widget/);
assert.doesNotMatch(html, /aria-expanded/);
assert.match(html, /title="long-extension-widget-key - Below editor widget"/);
assert.match(html, /<button[^>]*class="extension-widget-trigger/);
assert.match(html, /aria-expanded="false"/);
assert.match(html, /title="single-line-widget - Below editor widget - Expand"/);
assert.match(html, /extension-widget-key/);
assert.match(html, /extension-widget-update-pulse/);
assert.doesNotMatch(html, /extension-widget-preview/);
assert.doesNotMatch(html, /extension-widget-line-count/);
assert.doesNotMatch(html, />ready</);
assert.doesNotMatch(html, /<pre/);
});

test("keeps empty widgets non-interactive", () => {
const html = renderWidgets({
widgets: [{ key: "empty-widget", lines: [], placement: "aboveEditor" }],
});

assert.match(html, /<div class="extension-widget-trigger/);
assert.doesNotMatch(html, /<button/);
assert.doesNotMatch(html, /aria-expanded/);
assert.match(html, /title="empty-widget - Above editor widget"/);
});
4 changes: 2 additions & 2 deletions components/ExtensionWidgets.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ export function ExtensionWidgets({ widgets }: { widgets: ExtensionWidgetItem[] }

const expandedWidget = widgets.find((widget) => (
widget.key === expandedWidgetKey
&& widget.lines.length > 1
&& widget.lines.length > 0
));

const toggleWidget = (widget: ExtensionWidgetItem) => {
Expand Down Expand Up @@ -139,7 +139,7 @@ export function ExtensionWidgets({ widgets }: { widgets: ExtensionWidgetItem[] }
)}
<div className="extension-widget-triggers" aria-label={t("chat.extensionWidgets")}>
{widgets.map((widget, index) => {
const expandable = widget.lines.length > 1;
const expandable = widget.lines.length > 0;
const expanded = expandable && widget.key === expandedWidget?.key;
const updating = updatingWidgetKeys.has(widget.key);
const lineCountLabel = t(
Expand Down