Skip to content

Commit 5604f64

Browse files
committed
refactor: improve dropdown handling in DocksCommand and enhance DocksTabs layout for better visibility
1 parent 83874e9 commit 5604f64

4 files changed

Lines changed: 33 additions & 11 deletions

File tree

packages/core/src/components/command.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,34 +60,37 @@ export class DocksCommand extends DocksWidget {
6060
@state()
6161
private dropdownContributions: Contribution[] = []
6262

63+
private closeDropdown(dropdown: { open?: boolean } | null | undefined) {
64+
if (dropdown && dropdown.open !== undefined) {
65+
dropdown.open = false
66+
}
67+
}
68+
69+
private closeParentDropdown() {
70+
this.closeDropdown(this.closest('wa-dropdown') as { open?: boolean } | null)
71+
}
72+
6373
private handleClick(event?: Event) {
6474
if (this.disabled) return
6575

6676
if (event) {
6777
event.stopPropagation()
6878
}
6979

80+
this.closeParentDropdown()
81+
7082
if (this.action) {
7183
this.action(event)
7284
return
7385
}
7486

7587
if (this.cmd) {
76-
const dropdown = this.closest('wa-dropdown') as any;
77-
if (dropdown && dropdown.open !== undefined) {
78-
dropdown.open = false;
79-
}
8088
void this.executeCommand(this.cmd, this.params);
8189
}
8290
}
8391

8492
private handleSelect(event: CustomEvent) {
85-
// Close dropdown immediately when any item is selected
86-
// This ensures the dropdown is hidden before the command executes
87-
const dropdown = event.target as any;
88-
if (dropdown && dropdown.open !== undefined) {
89-
dropdown.open = false;
90-
}
93+
this.closeDropdown(event.target as { open?: boolean })
9194
}
9295

9396
private isInDropdown(): boolean {

packages/core/src/parts/tabs.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,13 +469,27 @@ export class DocksTabs extends DocksContainer {
469469
overflow: hidden;
470470
}
471471
472-
:host(:is([placement="top"], [placement="bottom"])) wa-tab-group::part(base) {
472+
/* Top: nav (order 0) → row 1 auto, body (order 2) → row 2 1fr. */
473+
:host([placement="top"]) wa-tab-group::part(base) {
473474
display: grid;
474475
grid-template-rows: auto minmax(0, 1fr);
475476
height: 100%;
476477
width: 100%;
477478
}
478479
480+
/* Bottom: body (order 1) → row 1 1fr, nav (order 2) → row 2 auto. */
481+
:host([placement="bottom"]) wa-tab-group::part(base) {
482+
display: grid;
483+
grid-template-rows: minmax(0, 1fr) auto;
484+
height: 100%;
485+
width: 100%;
486+
}
487+
488+
:host([placement="bottom"]) wa-tab-group::part(body) {
489+
min-height: 0;
490+
overflow: hidden;
491+
}
492+
479493
:host(:is([placement="start"], [placement="end"])) wa-tab-group::part(base) {
480494
height: 100%;
481495
width: 100%;

packages/extension-dataviewer/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
"./api": {
1818
"types": "./dist/api.d.ts",
1919
"import": "./dist/api.js"
20+
},
21+
"./table": {
22+
"types": "./dist/docks-data-table.d.ts",
23+
"import": "./dist/table.js"
2024
}
2125
},
2226
"files": [

packages/extension-dataviewer/vite.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export default defineConfig({
2222
entry: {
2323
index: path.resolve(__dirname, 'src/index.ts'),
2424
api: path.resolve(__dirname, 'src/api.ts'),
25+
table: path.resolve(__dirname, 'src/docks-data-table.ts'),
2526
},
2627
formats: ['es'],
2728
fileName: (_, name) => `${name}.js`,

0 commit comments

Comments
 (0)