fix(ui): allow trigger-anchored dropdowns on mobile
This commit is contained in:
1 parent
9d90418490
commit
b1db287f2a
4 files changed
+27
-4
No files matched your search
@@ -688,7 +688,7 @@
|
|||||||
},
|
},
|
||||||
"packages/ui": {
|
"packages/ui": {
|
||||||
"name": "@wrnexus/ui",
|
"name": "@wrnexus/ui",
|
||||||
"version": "0.8.64",
|
"version": "0.8.65",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@wrnexus/core": "workspace:*",
|
"@wrnexus/core": "workspace:*",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ items: unknown[] = []
|
|||||||
showChevron: boolean = true
|
showChevron: boolean = true
|
||||||
menuLabel: string = "Dropdown menu"
|
menuLabel: string = "Dropdown menu"
|
||||||
placement: string = "bottom-start"
|
placement: string = "bottom-start"
|
||||||
|
mobilePanel: string = "sheet"
|
||||||
width: string = "md"
|
width: string = "md"
|
||||||
size: string = "default"
|
size: string = "default"
|
||||||
color: string = "primary"
|
color: string = "primary"
|
||||||
@@ -151,6 +152,7 @@ items: unknown[] = []
|
|||||||
data-ui-component="Dropdown"
|
data-ui-component="Dropdown"
|
||||||
data-open='{open || visible ? "true" : "false"}'
|
data-open='{open || visible ? "true" : "false"}'
|
||||||
data-placement='{placement}'
|
data-placement='{placement}'
|
||||||
|
data-mobile-panel='{mobilePanel}'
|
||||||
data-width='{width}'
|
data-width='{width}'
|
||||||
data-size='{size}'
|
data-size='{size}'
|
||||||
data-color='{color}'
|
data-color='{color}'
|
||||||
@@ -572,7 +574,7 @@ items: unknown[] = []
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 639px) {
|
@media (max-width: 639px) {
|
||||||
.wrn-dropdown[data-placement] .wrn-dropdown__panel {
|
.wrn-dropdown[data-placement][data-mobile-panel="sheet"] .wrn-dropdown__panel {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
right: 0.75rem;
|
right: 0.75rem;
|
||||||
bottom: 0.75rem;
|
bottom: 0.75rem;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ui",
|
"name": "@wrnexus/ui",
|
||||||
"version": "0.8.64",
|
"version": "0.8.65",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -8,6 +8,25 @@ import { Window } from "happy-dom";
|
|||||||
const source = (name: string) => readFileSync(uiComponentPath(name), "utf8");
|
const source = (name: string) => readFileSync(uiComponentPath(name), "utf8");
|
||||||
|
|
||||||
describe("account shell UI regressions", () => {
|
describe("account shell UI regressions", () => {
|
||||||
|
test("Dropdown allows anchored mobile menus without changing existing sheet defaults", async () => {
|
||||||
|
for (const mobilePanel of [undefined, "dropdown", "sheet"]) {
|
||||||
|
const dom = mountHtml(
|
||||||
|
await renderComponent(source("Dropdown"), {
|
||||||
|
label: "User",
|
||||||
|
placement: "bottom-end",
|
||||||
|
...(mobilePanel ? { mobilePanel } : {}),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
expect(dom.querySelector(".wrn-dropdown")?.getAttribute("data-mobile-panel")).toBe(
|
||||||
|
mobilePanel ?? "sheet",
|
||||||
|
);
|
||||||
|
(dom.querySelector(".wrn-dropdown__trigger") as HTMLButtonElement).click();
|
||||||
|
expect(dom.querySelector(".wrn-dropdown__panel")?.hasAttribute("hidden")).toBe(false);
|
||||||
|
}
|
||||||
|
expect(source("Dropdown")).not.toContain(
|
||||||
|
".wrn-dropdown[data-placement] .wrn-dropdown__panel {",
|
||||||
|
);
|
||||||
|
});
|
||||||
test("Dropdown is natively hidden before CSS or hydration and still toggles afterward", async () => {
|
test("Dropdown is natively hidden before CSS or hydration and still toggles afterward", async () => {
|
||||||
for (const props of [{}, { open: true }, { defaultOpen: true }]) {
|
for (const props of [{}, { open: true }, { defaultOpen: true }]) {
|
||||||
const html = await renderComponent(source("Dropdown"), { label: "User", ...props });
|
const html = await renderComponent(source("Dropdown"), { label: "User", ...props });
|
||||||
@@ -189,7 +208,9 @@ describe("account shell UI regressions", () => {
|
|||||||
/\.wrn-sidebar__icon\s*\{[^}]*width: 1.05rem;[^}]*height: 1.05rem;/s,
|
/\.wrn-sidebar__icon\s*\{[^}]*width: 1.05rem;[^}]*height: 1.05rem;/s,
|
||||||
);
|
);
|
||||||
expect(source("Sidebar")).toContain("margin-inline-start");
|
expect(source("Sidebar")).toContain("margin-inline-start");
|
||||||
expect(source("Dropdown")).toContain(".wrn-dropdown[data-placement] .wrn-dropdown__panel");
|
expect(source("Dropdown")).toContain(
|
||||||
|
'.wrn-dropdown[data-placement][data-mobile-panel="sheet"] .wrn-dropdown__panel',
|
||||||
|
);
|
||||||
expect(source("Footer")).toMatch(/\.wrn-footer__copyright-left\s*\{\s*grid-column: 1;/);
|
expect(source("Footer")).toMatch(/\.wrn-footer__copyright-left\s*\{\s*grid-column: 1;/);
|
||||||
expect(source("Footer")).toMatch(/\.wrn-footer__copyright-right\s*\{\s*grid-column: 3;/);
|
expect(source("Footer")).toMatch(/\.wrn-footer__copyright-right\s*\{\s*grid-column: 3;/);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in new issue
Block a user