quirk-ui 0.1.158 → 0.1.159
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/dist/core/components/Button/Button.test.cjs +1 -1
- package/dist/core/components/Button/Button.test.mjs +181 -112
- package/dist/core/components/NavBar/NavBar.test.cjs +1 -1
- package/dist/core/components/NavBar/NavBar.test.mjs +89 -29
- package/dist/core.d.ts +12 -2
- package/dist/main.d.ts +12 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const n=require("react/jsx-runtime"),e=require("../../../react.esm-C_9Ma9mj.cjs"),r=require("../../../index-0SVQqhAg.cjs");require("../../../index-CW_Ehh1q.cjs");const a=e.vi.fn();e.vi.mock("../../context/ModalContext",()=>({useModal:()=>({open:a})}));e.describe("Button",()=>{e.describe("Rendering as button",()=>{e.it("renders as a button by default",()=>{e.render(n.jsx(r.Button,{variant:"primary",children:"Click Me"}));const t=e.screen.getByRole("button",{name:"Click Me"});e.globalExpect(t).toBeInTheDocument(),e.globalExpect(t.tagName).toBe("BUTTON")}),e.it("renders as a button when 'as' is set to 'button'",()=>{e.render(n.jsx(r.Button,{as:"button",variant:"primary",children:"Click Me"}));const t=e.screen.getByRole("button",{name:"Click Me"});e.globalExpect(t).toBeInTheDocument(),e.globalExpect(t).toHaveClass("button","primary")}),e.it("has type='button' by default",()=>{e.render(n.jsx(r.Button,{variant:"primary",children:"Click Me"}));const t=e.screen.getByRole("button");e.globalExpect(t).toHaveAttribute("type","button")}),e.it("respects the disabled prop on buttons",()=>{e.render(n.jsx(r.Button,{as:"button",variant:"primary",disabled:!0,children:"Disabled"}));const t=e.screen.getByRole("button",{name:"Disabled"});e.globalExpect(t).toBeDisabled()}),e.it("calls onClick when clicked",()=>{const t=e.vi.fn();e.render(n.jsx(r.Button,{variant:"primary",onClick:t,children:"Click Me"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(t).toHaveBeenCalledTimes(1)}),e.it("does not call onClick when disabled",()=>{const t=e.vi.fn();e.render(n.jsx(r.Button,{variant:"primary",onClick:t,disabled:!0,children:"Disabled"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(t).not.toHaveBeenCalled()})}),e.describe("Rendering as anchor",()=>{e.it("renders as an anchor when 'as' is set to 'a'",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",variant:"link",children:"Click Me"}));const t=e.screen.getByRole("link",{name:"Click Me"});e.globalExpect(t).toBeInTheDocument(),e.globalExpect(t.tagName).toBe("A"),e.globalExpect(t).toHaveAttribute("href","/test"),e.globalExpect(t).toHaveClass("button","link")}),e.it("adds rel='noopener noreferrer' when target is '_blank'",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",target:"_blank",variant:"link",children:"External"})),e.globalExpect(e.screen.getByRole("link",{name:"External"})).toHaveAttribute("rel","noopener noreferrer")}),e.it("preserves custom rel attribute and adds security",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",target:"_blank",rel:"author",variant:"link",children:"External"})),e.globalExpect(e.screen.getByRole("link")).toHaveAttribute("rel","author noopener noreferrer")}),e.it("does not add security rel for internal links",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",variant:"link",children:"Internal"})),e.globalExpect(e.screen.getByRole("link")).not.toHaveAttribute("rel")}),e.it("adds aria-disabled when disabled",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",variant:"link",disabled:!0,children:"Disabled Link"})),e.globalExpect(e.screen.getByRole("link")).toHaveAttribute("aria-disabled","true")})}),e.describe("Scroll button",()=>{e.it("renders as a scroll button when 'as' is set to 'scroll'",()=>{e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"section-1",variant:"primary",children:"Scroll Down"})),e.globalExpect(e.screen.getByRole("button",{name:"Scroll to section-1"})).toBeInTheDocument()}),e.it("has proper aria-label for scroll button",()=>{e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"footer",variant:"primary",children:"To Footer"})),e.globalExpect(e.screen.getByRole("button")).toHaveAttribute("aria-label","Scroll to footer")}),e.it("scrolls to target element when clicked",()=>{const t=document.createElement("div");t.id="target-section",document.body.appendChild(t);const o=e.vi.fn();t.scrollIntoView=o,e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"target-section",variant:"primary",children:"Scroll"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(o).toHaveBeenCalledWith({behavior:"smooth",block:"start"}),document.body.removeChild(t)}),e.it("uses scrollTo with offset when scrollOffset is set",()=>{const t=document.createElement("div");t.id="offset-section",document.body.appendChild(t);const o=e.vi.fn();window.scrollTo=o,e.vi.spyOn(t,"getBoundingClientRect").mockReturnValue({top:200}),e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"offset-section",scrollOffset:80,variant:"primary",children:"Scroll"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(o).toHaveBeenCalledWith({top:e.globalExpect.any(Number),behavior:"smooth"}),document.body.removeChild(t)}),e.it("does not error if scroll target does not exist",()=>{e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"non-existent",variant:"primary",children:"Scroll"})),e.globalExpect(()=>e.fireEvent.click(e.screen.getByRole("button"))).not.toThrow()})}),e.describe("Modal button",()=>{e.it("renders as a button when 'as' is set to 'modal'",()=>{e.render(n.jsx(r.Button,{as:"modal",modalPayload:{heading:"Contact Us"},variant:"primary",children:"Open Modal"})),e.globalExpect(e.screen.getByRole("button",{name:"Open Modal"})).toBeInTheDocument()}),e.it("calls useModal open with the payload when clicked",()=>{const t={heading:"Contact Us",formReference:{_id:"form-123",heading:"Contact"}};e.render(n.jsx(r.Button,{as:"modal",modalPayload:t,variant:"primary",children:"Open Form"})),e.fireEvent.click(e.screen.getByRole("button",{name:"Open Form"})),e.globalExpect(a).toHaveBeenCalledWith(t)}),e.it("is disabled when disabled prop is set",()=>{e.render(n.jsx(r.Button,{as:"modal",modalPayload:{heading:"Test"},variant:"primary",disabled:!0,children:"Disabled Modal"})),e.globalExpect(e.screen.getByRole("button")).toBeDisabled()}),e.it("does not call open when disabled",()=>{a.mockClear(),e.render(n.jsx(r.Button,{as:"modal",modalPayload:{heading:"Test"},variant:"primary",disabled:!0,children:"Disabled"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(a).not.toHaveBeenCalled()})}),e.describe("Variants",()=>{["primary","primaryInverted","secondary","secondaryInverted","link","linkInverted","underline","underlineInverted","blurred","blurredInverted"].forEach(o=>{e.it(`applies ${o} variant class`,()=>{e.render(n.jsx(r.Button,{variant:o,children:"Button"})),e.globalExpect(e.screen.getByRole("button")).toHaveClass(o)})}),e.it("uses primary variant by default",()=>{e.render(n.jsx(r.Button,{children:"Default"})),e.globalExpect(e.screen.getByRole("button")).toHaveClass("primary")})}),e.describe("Icons",()=>{e.it("includes icon when icon prop is provided",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"arrow-right",children:"Next"})),e.globalExpect(document.querySelector(".icon")).toBeInTheDocument(),e.globalExpect(document.querySelector(".icon svg")).toBeInTheDocument()}),e.it("places icon on the left when iconAlignment is 'left'",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"arrow-left",iconAlignment:"left",children:"Back"})),e.globalExpect(document.querySelector(".content")).toHaveClass("iconLeft")}),e.it("places icon on the right when iconAlignment is 'right'",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"arrow-right",iconAlignment:"right",children:"Next"})),e.globalExpect(document.querySelector(".content")).toHaveClass("iconRight")}),e.it("uses right alignment by default",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"arrow-right",children:"Default Icon"})),e.globalExpect(document.querySelector(".content")).toHaveClass("iconRight")}),e.it("icon has aria-hidden attribute",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"settings",children:"Settings"})),e.globalExpect(document.querySelector(".icon")).toHaveAttribute("aria-hidden","true")})}),e.describe("Image display",()=>{e.it("renders image when displayType is 'image' and imageSrc is provided",()=>{e.render(n.jsx(r.Button,{variant:"primary",displayType:"image",imageSrc:"/logo.png",imageAlt:"Company Logo",children:"Text not shown"}));const t=document.querySelector("img");e.globalExpect(t).toHaveAttribute("src","/logo.png"),e.globalExpect(t).toHaveAttribute("alt","Company Logo")}),e.it("renders ImageComponent when provided",()=>{const t=()=>n.jsx("div",{"data-testid":"custom-image",children:"Custom"});e.render(n.jsx(r.Button,{variant:"primary",displayType:"image",ImageComponent:n.jsx(t,{}),children:"Text"})),e.globalExpect(e.screen.getByTestId("custom-image")).toBeInTheDocument()}),e.it("applies image class when displayType is image",()=>{e.render(n.jsx(r.Button,{variant:"primary",displayType:"image",imageSrc:"/logo.png",children:"Text"}));const t=e.screen.getByRole("button");e.globalExpect(t).toHaveClass("image"),e.globalExpect(t).not.toHaveClass("primary")})}),e.describe("Custom className",()=>{e.it("applies custom className",()=>{e.render(n.jsx(r.Button,{variant:"primary",className:"custom-button",children:"Custom"}));const t=e.screen.getByRole("button");e.globalExpect(t).toHaveClass("custom-button","button","primary")})}),e.describe("Accessibility",()=>{e.it("has button role for button element",()=>{e.render(n.jsx(r.Button,{variant:"primary",children:"Click"})),e.globalExpect(e.screen.getByRole("button")).toBeInTheDocument()}),e.it("has link role for anchor element",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",variant:"link",children:"Link"})),e.globalExpect(e.screen.getByRole("link")).toBeInTheDocument()}),e.it("supports aria attributes",()=>{e.render(n.jsx(r.Button,{variant:"primary","aria-label":"Custom Label","aria-describedby":"desc",children:"Button"}));const t=e.screen.getByRole("button");e.globalExpect(t).toHaveAttribute("aria-label","Custom Label"),e.globalExpect(t).toHaveAttribute("aria-describedby","desc")})}),e.describe("Edge cases",()=>{e.it("handles undefined variant",()=>{e.render(n.jsx(r.Button,{variant:void 0,children:"No Variant"})),e.globalExpect(e.screen.getByRole("button")).toHaveClass("button")}),e.it("handles complex children",()=>{e.render(n.jsxs(r.Button,{variant:"primary",children:[n.jsx("span",{children:"Complex"}),n.jsx("strong",{children:"Children"})]})),e.globalExpect(e.screen.getByText("Complex")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("Children")).toBeInTheDocument()})})});
|
|
1
|
+
"use strict";const n=require("react/jsx-runtime"),e=require("../../../react.esm-C_9Ma9mj.cjs"),r=require("../../../index-0SVQqhAg.cjs");require("../../../index-CW_Ehh1q.cjs");const a=e.vi.fn();e.vi.mock("../../context/ModalContext",()=>({useModal:()=>({open:a})}));e.describe("Button",()=>{e.describe("Rendering as button",()=>{e.it("renders as a button by default",()=>{e.render(n.jsx(r.Button,{variant:"primary",children:"Click Me"}));const t=e.screen.getByRole("button",{name:"Click Me"});e.globalExpect(t).toBeInTheDocument(),e.globalExpect(t.tagName).toBe("BUTTON")}),e.it("renders as a button when 'as' is set to 'button'",()=>{e.render(n.jsx(r.Button,{as:"button",variant:"primary",children:"Click Me"}));const t=e.screen.getByRole("button",{name:"Click Me"});e.globalExpect(t).toBeInTheDocument(),e.globalExpect(t).toHaveClass("button","primary")}),e.it("has type='button' by default",()=>{e.render(n.jsx(r.Button,{variant:"primary",children:"Click Me"}));const t=e.screen.getByRole("button");e.globalExpect(t).toHaveAttribute("type","button")}),e.it("respects the disabled prop on buttons",()=>{e.render(n.jsx(r.Button,{as:"button",variant:"primary",disabled:!0,children:"Disabled"}));const t=e.screen.getByRole("button",{name:"Disabled"});e.globalExpect(t).toBeDisabled()}),e.it("calls onClick when clicked",()=>{const t=e.vi.fn();e.render(n.jsx(r.Button,{variant:"primary",onClick:t,children:"Click Me"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(t).toHaveBeenCalledTimes(1)}),e.it("does not call onClick when disabled",()=>{const t=e.vi.fn();e.render(n.jsx(r.Button,{variant:"primary",onClick:t,disabled:!0,children:"Disabled"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(t).not.toHaveBeenCalled()})}),e.describe("Rendering as anchor",()=>{e.it("renders as an anchor when 'as' is set to 'a'",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",variant:"link",children:"Click Me"}));const t=e.screen.getByRole("link",{name:"Click Me"});e.globalExpect(t).toBeInTheDocument(),e.globalExpect(t.tagName).toBe("A"),e.globalExpect(t).toHaveAttribute("href","/test"),e.globalExpect(t).toHaveClass("button","link")}),e.it("adds rel='noopener noreferrer' when target is '_blank'",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",target:"_blank",variant:"link",children:"External"})),e.globalExpect(e.screen.getByRole("link",{name:"External"})).toHaveAttribute("rel","noopener noreferrer")}),e.it("preserves custom rel attribute and adds security",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",target:"_blank",rel:"author",variant:"link",children:"External"})),e.globalExpect(e.screen.getByRole("link")).toHaveAttribute("rel","author noopener noreferrer")}),e.it("does not add security rel for internal links",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",variant:"link",children:"Internal"})),e.globalExpect(e.screen.getByRole("link")).not.toHaveAttribute("rel")}),e.it("adds aria-disabled when disabled",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",variant:"link",disabled:!0,children:"Disabled Link"})),e.globalExpect(e.screen.getByRole("link")).toHaveAttribute("aria-disabled","true")})}),e.describe("Scroll button",()=>{e.it("renders as a scroll button when 'as' is set to 'scroll'",()=>{e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"section-1",variant:"primary",children:"Scroll Down"})),e.globalExpect(e.screen.getByRole("button",{name:"Scroll to section-1"})).toBeInTheDocument()}),e.it("has proper aria-label for scroll button",()=>{e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"footer",variant:"primary",children:"To Footer"})),e.globalExpect(e.screen.getByRole("button")).toHaveAttribute("aria-label","Scroll to footer")}),e.it("scrolls to target element when clicked",()=>{const t=document.createElement("div");t.id="target-section",document.body.appendChild(t);const o=e.vi.fn();t.scrollIntoView=o,e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"target-section",variant:"primary",children:"Scroll"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(o).toHaveBeenCalledWith({behavior:"smooth",block:"start"}),document.body.removeChild(t)}),e.it("uses scrollTo with offset when scrollOffset is set",()=>{const t=document.createElement("div");t.id="offset-section",document.body.appendChild(t);const o=e.vi.fn();window.scrollTo=o,e.vi.spyOn(t,"getBoundingClientRect").mockReturnValue({top:200}),e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"offset-section",scrollOffset:80,variant:"primary",children:"Scroll"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(o).toHaveBeenCalledWith({top:e.globalExpect.any(Number),behavior:"smooth"}),document.body.removeChild(t)}),e.it("does not error if scroll target does not exist",()=>{e.render(n.jsx(r.Button,{as:"scroll",scrollTarget:"non-existent",variant:"primary",children:"Scroll"})),e.globalExpect(()=>e.fireEvent.click(e.screen.getByRole("button"))).not.toThrow()})}),e.describe("Modal button",()=>{e.it("renders as a button when 'as' is set to 'modal'",()=>{e.render(n.jsx(r.Button,{as:"modal",modalPayload:{heading:{title:[{_type:"block",_key:"a",children:[{_type:"span",_key:"b",text:"Contact Us",marks:[]}],markDefs:[],style:"normal"}]}},variant:"primary",children:"Open Modal"})),e.globalExpect(e.screen.getByRole("button",{name:"Open Modal"})).toBeInTheDocument()}),e.it("calls useModal open with the payload when clicked",()=>{const t={heading:{title:[{_type:"block",_key:"a",children:[{_type:"span",_key:"b",text:"Contact Us",marks:[]}],markDefs:[],style:"normal"}]},formReference:{_id:"form-123",heading:{title:[{_type:"block",_key:"c",children:[{_type:"span",_key:"d",text:"Contact",marks:[]}],markDefs:[],style:"normal"}]}}};e.render(n.jsx(r.Button,{as:"modal",modalPayload:t,variant:"primary",children:"Open Form"})),e.fireEvent.click(e.screen.getByRole("button",{name:"Open Form"})),e.globalExpect(a).toHaveBeenCalledWith(t)}),e.it("is disabled when disabled prop is set",()=>{e.render(n.jsx(r.Button,{as:"modal",modalPayload:{heading:{title:[{_type:"block",_key:"a",children:[{_type:"span",_key:"b",text:"Test",marks:[]}],markDefs:[],style:"normal"}]}},variant:"primary",disabled:!0,children:"Disabled Modal"})),e.globalExpect(e.screen.getByRole("button")).toBeDisabled()}),e.it("does not call open when disabled",()=>{a.mockClear(),e.render(n.jsx(r.Button,{as:"modal",modalPayload:{heading:{title:[{_type:"block",_key:"a",children:[{_type:"span",_key:"b",text:"Test",marks:[]}],markDefs:[],style:"normal"}]}},variant:"primary",disabled:!0,children:"Disabled"})),e.fireEvent.click(e.screen.getByRole("button")),e.globalExpect(a).not.toHaveBeenCalled()})}),e.describe("Variants",()=>{["primary","primaryInverted","secondary","secondaryInverted","link","linkInverted","underline","underlineInverted","blurred","blurredInverted"].forEach(o=>{e.it(`applies ${o} variant class`,()=>{e.render(n.jsx(r.Button,{variant:o,children:"Button"})),e.globalExpect(e.screen.getByRole("button")).toHaveClass(o)})}),e.it("uses primary variant by default",()=>{e.render(n.jsx(r.Button,{children:"Default"})),e.globalExpect(e.screen.getByRole("button")).toHaveClass("primary")})}),e.describe("Icons",()=>{e.it("includes icon when icon prop is provided",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"arrow-right",children:"Next"})),e.globalExpect(document.querySelector(".icon")).toBeInTheDocument(),e.globalExpect(document.querySelector(".icon svg")).toBeInTheDocument()}),e.it("places icon on the left when iconAlignment is 'left'",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"arrow-left",iconAlignment:"left",children:"Back"})),e.globalExpect(document.querySelector(".content")).toHaveClass("iconLeft")}),e.it("places icon on the right when iconAlignment is 'right'",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"arrow-right",iconAlignment:"right",children:"Next"})),e.globalExpect(document.querySelector(".content")).toHaveClass("iconRight")}),e.it("uses right alignment by default",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"arrow-right",children:"Default Icon"})),e.globalExpect(document.querySelector(".content")).toHaveClass("iconRight")}),e.it("icon has aria-hidden attribute",()=>{e.render(n.jsx(r.Button,{variant:"primary",icon:"settings",children:"Settings"})),e.globalExpect(document.querySelector(".icon")).toHaveAttribute("aria-hidden","true")})}),e.describe("Image display",()=>{e.it("renders image when displayType is 'image' and imageSrc is provided",()=>{e.render(n.jsx(r.Button,{variant:"primary",displayType:"image",imageSrc:"/logo.png",imageAlt:"Company Logo",children:"Text not shown"}));const t=document.querySelector("img");e.globalExpect(t).toHaveAttribute("src","/logo.png"),e.globalExpect(t).toHaveAttribute("alt","Company Logo")}),e.it("renders ImageComponent when provided",()=>{const t=()=>n.jsx("div",{"data-testid":"custom-image",children:"Custom"});e.render(n.jsx(r.Button,{variant:"primary",displayType:"image",ImageComponent:n.jsx(t,{}),children:"Text"})),e.globalExpect(e.screen.getByTestId("custom-image")).toBeInTheDocument()}),e.it("applies image class when displayType is image",()=>{e.render(n.jsx(r.Button,{variant:"primary",displayType:"image",imageSrc:"/logo.png",children:"Text"}));const t=e.screen.getByRole("button");e.globalExpect(t).toHaveClass("image"),e.globalExpect(t).not.toHaveClass("primary")})}),e.describe("Custom className",()=>{e.it("applies custom className",()=>{e.render(n.jsx(r.Button,{variant:"primary",className:"custom-button",children:"Custom"}));const t=e.screen.getByRole("button");e.globalExpect(t).toHaveClass("custom-button","button","primary")})}),e.describe("Accessibility",()=>{e.it("has button role for button element",()=>{e.render(n.jsx(r.Button,{variant:"primary",children:"Click"})),e.globalExpect(e.screen.getByRole("button")).toBeInTheDocument()}),e.it("has link role for anchor element",()=>{e.render(n.jsx(r.Button,{as:"a",href:"/test",variant:"link",children:"Link"})),e.globalExpect(e.screen.getByRole("link")).toBeInTheDocument()}),e.it("supports aria attributes",()=>{e.render(n.jsx(r.Button,{variant:"primary","aria-label":"Custom Label","aria-describedby":"desc",children:"Button"}));const t=e.screen.getByRole("button");e.globalExpect(t).toHaveAttribute("aria-label","Custom Label"),e.globalExpect(t).toHaveAttribute("aria-describedby","desc")})}),e.describe("Edge cases",()=>{e.it("handles undefined variant",()=>{e.render(n.jsx(r.Button,{variant:void 0,children:"No Variant"})),e.globalExpect(e.screen.getByRole("button")).toHaveClass("button")}),e.it("handles complex children",()=>{e.render(n.jsxs(r.Button,{variant:"primary",children:[n.jsx("span",{children:"Complex"}),n.jsx("strong",{children:"Children"})]})),e.globalExpect(e.screen.getByText("Complex")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("Children")).toBeInTheDocument()})})});
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { v as d, d as
|
|
1
|
+
import { jsx as a, jsxs as u } from "react/jsx-runtime";
|
|
2
|
+
import { v as d, d as i, i as n, r as o, s as l, g as e, f as c } from "../../../react.esm-DjxyacK8.js";
|
|
3
3
|
import { B as r } from "../../../index-aWdsapYP.js";
|
|
4
4
|
import "../../../index-DPGXWTtt.js";
|
|
5
5
|
const m = d.fn();
|
|
6
6
|
d.mock("../../context/ModalContext", () => ({
|
|
7
7
|
useModal: () => ({ open: m })
|
|
8
8
|
}));
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
i("Button", () => {
|
|
10
|
+
i("Rendering as button", () => {
|
|
11
11
|
n("renders as a button by default", () => {
|
|
12
|
-
|
|
13
|
-
const t =
|
|
12
|
+
o(/* @__PURE__ */ a(r, { variant: "primary", children: "Click Me" }));
|
|
13
|
+
const t = l.getByRole("button", { name: "Click Me" });
|
|
14
14
|
e(t).toBeInTheDocument(), e(t.tagName).toBe("BUTTON");
|
|
15
15
|
}), n("renders as a button when 'as' is set to 'button'", () => {
|
|
16
|
-
|
|
17
|
-
/* @__PURE__ */
|
|
16
|
+
o(
|
|
17
|
+
/* @__PURE__ */ a(r, { as: "button", variant: "primary", children: "Click Me" })
|
|
18
18
|
);
|
|
19
|
-
const t =
|
|
19
|
+
const t = l.getByRole("button", { name: "Click Me" });
|
|
20
20
|
e(t).toBeInTheDocument(), e(t).toHaveClass("button", "primary");
|
|
21
21
|
}), n("has type='button' by default", () => {
|
|
22
|
-
|
|
23
|
-
const t =
|
|
22
|
+
o(/* @__PURE__ */ a(r, { variant: "primary", children: "Click Me" }));
|
|
23
|
+
const t = l.getByRole("button");
|
|
24
24
|
e(t).toHaveAttribute("type", "button");
|
|
25
25
|
}), n("respects the disabled prop on buttons", () => {
|
|
26
|
-
|
|
27
|
-
/* @__PURE__ */
|
|
26
|
+
o(
|
|
27
|
+
/* @__PURE__ */ a(r, { as: "button", variant: "primary", disabled: !0, children: "Disabled" })
|
|
28
28
|
);
|
|
29
|
-
const t =
|
|
29
|
+
const t = l.getByRole("button", { name: "Disabled" });
|
|
30
30
|
e(t).toBeDisabled();
|
|
31
31
|
}), n("calls onClick when clicked", () => {
|
|
32
32
|
const t = d.fn();
|
|
33
|
-
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
-
), c.click(
|
|
33
|
+
o(
|
|
34
|
+
/* @__PURE__ */ a(r, { variant: "primary", onClick: t, children: "Click Me" })
|
|
35
|
+
), c.click(l.getByRole("button")), e(t).toHaveBeenCalledTimes(1);
|
|
36
36
|
}), n("does not call onClick when disabled", () => {
|
|
37
37
|
const t = d.fn();
|
|
38
|
-
|
|
39
|
-
/* @__PURE__ */
|
|
40
|
-
), c.click(
|
|
38
|
+
o(
|
|
39
|
+
/* @__PURE__ */ a(r, { variant: "primary", onClick: t, disabled: !0, children: "Disabled" })
|
|
40
|
+
), c.click(l.getByRole("button")), e(t).not.toHaveBeenCalled();
|
|
41
41
|
});
|
|
42
|
-
}),
|
|
42
|
+
}), i("Rendering as anchor", () => {
|
|
43
43
|
n("renders as an anchor when 'as' is set to 'a'", () => {
|
|
44
|
-
|
|
45
|
-
/* @__PURE__ */
|
|
44
|
+
o(
|
|
45
|
+
/* @__PURE__ */ a(r, { as: "a", href: "/test", variant: "link", children: "Click Me" })
|
|
46
46
|
);
|
|
47
|
-
const t =
|
|
47
|
+
const t = l.getByRole("link", { name: "Click Me" });
|
|
48
48
|
e(t).toBeInTheDocument(), e(t.tagName).toBe("A"), e(t).toHaveAttribute("href", "/test"), e(t).toHaveClass("button", "link");
|
|
49
49
|
}), n("adds rel='noopener noreferrer' when target is '_blank'", () => {
|
|
50
|
-
|
|
51
|
-
/* @__PURE__ */
|
|
52
|
-
), e(
|
|
50
|
+
o(
|
|
51
|
+
/* @__PURE__ */ a(r, { as: "a", href: "/test", target: "_blank", variant: "link", children: "External" })
|
|
52
|
+
), e(l.getByRole("link", { name: "External" })).toHaveAttribute(
|
|
53
53
|
"rel",
|
|
54
54
|
"noopener noreferrer"
|
|
55
55
|
);
|
|
56
56
|
}), n("preserves custom rel attribute and adds security", () => {
|
|
57
|
-
|
|
58
|
-
/* @__PURE__ */
|
|
59
|
-
), e(
|
|
57
|
+
o(
|
|
58
|
+
/* @__PURE__ */ a(r, { as: "a", href: "/test", target: "_blank", rel: "author", variant: "link", children: "External" })
|
|
59
|
+
), e(l.getByRole("link")).toHaveAttribute(
|
|
60
60
|
"rel",
|
|
61
61
|
"author noopener noreferrer"
|
|
62
62
|
);
|
|
63
63
|
}), n("does not add security rel for internal links", () => {
|
|
64
|
-
|
|
65
|
-
/* @__PURE__ */
|
|
66
|
-
), e(
|
|
64
|
+
o(
|
|
65
|
+
/* @__PURE__ */ a(r, { as: "a", href: "/test", variant: "link", children: "Internal" })
|
|
66
|
+
), e(l.getByRole("link")).not.toHaveAttribute("rel");
|
|
67
67
|
}), n("adds aria-disabled when disabled", () => {
|
|
68
|
-
|
|
69
|
-
/* @__PURE__ */
|
|
70
|
-
), e(
|
|
68
|
+
o(
|
|
69
|
+
/* @__PURE__ */ a(r, { as: "a", href: "/test", variant: "link", disabled: !0, children: "Disabled Link" })
|
|
70
|
+
), e(l.getByRole("link")).toHaveAttribute("aria-disabled", "true");
|
|
71
71
|
});
|
|
72
|
-
}),
|
|
72
|
+
}), i("Scroll button", () => {
|
|
73
73
|
n("renders as a scroll button when 'as' is set to 'scroll'", () => {
|
|
74
|
-
|
|
75
|
-
/* @__PURE__ */
|
|
74
|
+
o(
|
|
75
|
+
/* @__PURE__ */ a(r, { as: "scroll", scrollTarget: "section-1", variant: "primary", children: "Scroll Down" })
|
|
76
76
|
), e(
|
|
77
|
-
|
|
77
|
+
l.getByRole("button", { name: "Scroll to section-1" })
|
|
78
78
|
).toBeInTheDocument();
|
|
79
79
|
}), n("has proper aria-label for scroll button", () => {
|
|
80
|
-
|
|
81
|
-
/* @__PURE__ */
|
|
82
|
-
), e(
|
|
80
|
+
o(
|
|
81
|
+
/* @__PURE__ */ a(r, { as: "scroll", scrollTarget: "footer", variant: "primary", children: "To Footer" })
|
|
82
|
+
), e(l.getByRole("button")).toHaveAttribute(
|
|
83
83
|
"aria-label",
|
|
84
84
|
"Scroll to footer"
|
|
85
85
|
);
|
|
@@ -87,9 +87,9 @@ l("Button", () => {
|
|
|
87
87
|
const t = document.createElement("div");
|
|
88
88
|
t.id = "target-section", document.body.appendChild(t);
|
|
89
89
|
const s = d.fn();
|
|
90
|
-
t.scrollIntoView = s,
|
|
91
|
-
/* @__PURE__ */
|
|
92
|
-
), c.click(
|
|
90
|
+
t.scrollIntoView = s, o(
|
|
91
|
+
/* @__PURE__ */ a(r, { as: "scroll", scrollTarget: "target-section", variant: "primary", children: "Scroll" })
|
|
92
|
+
), c.click(l.getByRole("button")), e(s).toHaveBeenCalledWith({
|
|
93
93
|
behavior: "smooth",
|
|
94
94
|
block: "start"
|
|
95
95
|
}), document.body.removeChild(t);
|
|
@@ -99,8 +99,8 @@ l("Button", () => {
|
|
|
99
99
|
const s = d.fn();
|
|
100
100
|
window.scrollTo = s, d.spyOn(t, "getBoundingClientRect").mockReturnValue({
|
|
101
101
|
top: 200
|
|
102
|
-
}),
|
|
103
|
-
/* @__PURE__ */
|
|
102
|
+
}), o(
|
|
103
|
+
/* @__PURE__ */ a(
|
|
104
104
|
r,
|
|
105
105
|
{
|
|
106
106
|
as: "scroll",
|
|
@@ -110,66 +110,135 @@ l("Button", () => {
|
|
|
110
110
|
children: "Scroll"
|
|
111
111
|
}
|
|
112
112
|
)
|
|
113
|
-
), c.click(
|
|
113
|
+
), c.click(l.getByRole("button")), e(s).toHaveBeenCalledWith({
|
|
114
114
|
top: e.any(Number),
|
|
115
115
|
behavior: "smooth"
|
|
116
116
|
}), document.body.removeChild(t);
|
|
117
117
|
}), n("does not error if scroll target does not exist", () => {
|
|
118
|
-
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
-
), e(() => c.click(
|
|
118
|
+
o(
|
|
119
|
+
/* @__PURE__ */ a(r, { as: "scroll", scrollTarget: "non-existent", variant: "primary", children: "Scroll" })
|
|
120
|
+
), e(() => c.click(l.getByRole("button"))).not.toThrow();
|
|
121
121
|
});
|
|
122
|
-
}),
|
|
122
|
+
}), i("Modal button", () => {
|
|
123
123
|
n("renders as a button when 'as' is set to 'modal'", () => {
|
|
124
|
-
|
|
125
|
-
/* @__PURE__ */
|
|
124
|
+
o(
|
|
125
|
+
/* @__PURE__ */ a(
|
|
126
126
|
r,
|
|
127
127
|
{
|
|
128
128
|
as: "modal",
|
|
129
|
-
modalPayload: {
|
|
129
|
+
modalPayload: {
|
|
130
|
+
heading: {
|
|
131
|
+
title: [
|
|
132
|
+
{
|
|
133
|
+
_type: "block",
|
|
134
|
+
_key: "a",
|
|
135
|
+
children: [
|
|
136
|
+
{ _type: "span", _key: "b", text: "Contact Us", marks: [] }
|
|
137
|
+
],
|
|
138
|
+
markDefs: [],
|
|
139
|
+
style: "normal"
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
},
|
|
130
144
|
variant: "primary",
|
|
131
145
|
children: "Open Modal"
|
|
132
146
|
}
|
|
133
147
|
)
|
|
134
148
|
), e(
|
|
135
|
-
|
|
149
|
+
l.getByRole("button", { name: "Open Modal" })
|
|
136
150
|
).toBeInTheDocument();
|
|
137
151
|
}), n("calls useModal open with the payload when clicked", () => {
|
|
138
152
|
const t = {
|
|
139
|
-
heading:
|
|
140
|
-
|
|
153
|
+
heading: {
|
|
154
|
+
title: [
|
|
155
|
+
{
|
|
156
|
+
_type: "block",
|
|
157
|
+
_key: "a",
|
|
158
|
+
children: [
|
|
159
|
+
{ _type: "span", _key: "b", text: "Contact Us", marks: [] }
|
|
160
|
+
],
|
|
161
|
+
markDefs: [],
|
|
162
|
+
style: "normal"
|
|
163
|
+
}
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
formReference: {
|
|
167
|
+
_id: "form-123",
|
|
168
|
+
heading: {
|
|
169
|
+
title: [
|
|
170
|
+
{
|
|
171
|
+
_type: "block",
|
|
172
|
+
_key: "c",
|
|
173
|
+
children: [
|
|
174
|
+
{ _type: "span", _key: "d", text: "Contact", marks: [] }
|
|
175
|
+
],
|
|
176
|
+
markDefs: [],
|
|
177
|
+
style: "normal"
|
|
178
|
+
}
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
}
|
|
141
182
|
};
|
|
142
|
-
|
|
143
|
-
/* @__PURE__ */
|
|
144
|
-
), c.click(
|
|
183
|
+
o(
|
|
184
|
+
/* @__PURE__ */ a(r, { as: "modal", modalPayload: t, variant: "primary", children: "Open Form" })
|
|
185
|
+
), c.click(l.getByRole("button", { name: "Open Form" })), e(m).toHaveBeenCalledWith(t);
|
|
145
186
|
}), n("is disabled when disabled prop is set", () => {
|
|
146
|
-
|
|
147
|
-
/* @__PURE__ */
|
|
187
|
+
o(
|
|
188
|
+
/* @__PURE__ */ a(
|
|
148
189
|
r,
|
|
149
190
|
{
|
|
150
191
|
as: "modal",
|
|
151
|
-
modalPayload: {
|
|
192
|
+
modalPayload: {
|
|
193
|
+
heading: {
|
|
194
|
+
title: [
|
|
195
|
+
{
|
|
196
|
+
_type: "block",
|
|
197
|
+
_key: "a",
|
|
198
|
+
children: [
|
|
199
|
+
{ _type: "span", _key: "b", text: "Test", marks: [] }
|
|
200
|
+
],
|
|
201
|
+
markDefs: [],
|
|
202
|
+
style: "normal"
|
|
203
|
+
}
|
|
204
|
+
]
|
|
205
|
+
}
|
|
206
|
+
},
|
|
152
207
|
variant: "primary",
|
|
153
208
|
disabled: !0,
|
|
154
209
|
children: "Disabled Modal"
|
|
155
210
|
}
|
|
156
211
|
)
|
|
157
|
-
), e(
|
|
212
|
+
), e(l.getByRole("button")).toBeDisabled();
|
|
158
213
|
}), n("does not call open when disabled", () => {
|
|
159
|
-
m.mockClear(),
|
|
160
|
-
/* @__PURE__ */
|
|
214
|
+
m.mockClear(), o(
|
|
215
|
+
/* @__PURE__ */ a(
|
|
161
216
|
r,
|
|
162
217
|
{
|
|
163
218
|
as: "modal",
|
|
164
|
-
modalPayload: {
|
|
219
|
+
modalPayload: {
|
|
220
|
+
heading: {
|
|
221
|
+
title: [
|
|
222
|
+
{
|
|
223
|
+
_type: "block",
|
|
224
|
+
_key: "a",
|
|
225
|
+
children: [
|
|
226
|
+
{ _type: "span", _key: "b", text: "Test", marks: [] }
|
|
227
|
+
],
|
|
228
|
+
markDefs: [],
|
|
229
|
+
style: "normal"
|
|
230
|
+
}
|
|
231
|
+
]
|
|
232
|
+
}
|
|
233
|
+
},
|
|
165
234
|
variant: "primary",
|
|
166
235
|
disabled: !0,
|
|
167
236
|
children: "Disabled"
|
|
168
237
|
}
|
|
169
238
|
)
|
|
170
|
-
), c.click(
|
|
239
|
+
), c.click(l.getByRole("button")), e(m).not.toHaveBeenCalled();
|
|
171
240
|
});
|
|
172
|
-
}),
|
|
241
|
+
}), i("Variants", () => {
|
|
173
242
|
[
|
|
174
243
|
"primary",
|
|
175
244
|
"primaryInverted",
|
|
@@ -183,40 +252,40 @@ l("Button", () => {
|
|
|
183
252
|
"blurredInverted"
|
|
184
253
|
].forEach((s) => {
|
|
185
254
|
n(`applies ${s} variant class`, () => {
|
|
186
|
-
|
|
255
|
+
o(/* @__PURE__ */ a(r, { variant: s, children: "Button" })), e(l.getByRole("button")).toHaveClass(s);
|
|
187
256
|
});
|
|
188
257
|
}), n("uses primary variant by default", () => {
|
|
189
|
-
|
|
258
|
+
o(/* @__PURE__ */ a(r, { children: "Default" })), e(l.getByRole("button")).toHaveClass("primary");
|
|
190
259
|
});
|
|
191
|
-
}),
|
|
260
|
+
}), i("Icons", () => {
|
|
192
261
|
n("includes icon when icon prop is provided", () => {
|
|
193
|
-
|
|
194
|
-
/* @__PURE__ */
|
|
262
|
+
o(
|
|
263
|
+
/* @__PURE__ */ a(r, { variant: "primary", icon: "arrow-right", children: "Next" })
|
|
195
264
|
), e(document.querySelector(".icon")).toBeInTheDocument(), e(document.querySelector(".icon svg")).toBeInTheDocument();
|
|
196
265
|
}), n("places icon on the left when iconAlignment is 'left'", () => {
|
|
197
|
-
|
|
198
|
-
/* @__PURE__ */
|
|
266
|
+
o(
|
|
267
|
+
/* @__PURE__ */ a(r, { variant: "primary", icon: "arrow-left", iconAlignment: "left", children: "Back" })
|
|
199
268
|
), e(document.querySelector(".content")).toHaveClass("iconLeft");
|
|
200
269
|
}), n("places icon on the right when iconAlignment is 'right'", () => {
|
|
201
|
-
|
|
202
|
-
/* @__PURE__ */
|
|
270
|
+
o(
|
|
271
|
+
/* @__PURE__ */ a(r, { variant: "primary", icon: "arrow-right", iconAlignment: "right", children: "Next" })
|
|
203
272
|
), e(document.querySelector(".content")).toHaveClass("iconRight");
|
|
204
273
|
}), n("uses right alignment by default", () => {
|
|
205
|
-
|
|
206
|
-
/* @__PURE__ */
|
|
274
|
+
o(
|
|
275
|
+
/* @__PURE__ */ a(r, { variant: "primary", icon: "arrow-right", children: "Default Icon" })
|
|
207
276
|
), e(document.querySelector(".content")).toHaveClass("iconRight");
|
|
208
277
|
}), n("icon has aria-hidden attribute", () => {
|
|
209
|
-
|
|
210
|
-
/* @__PURE__ */
|
|
278
|
+
o(
|
|
279
|
+
/* @__PURE__ */ a(r, { variant: "primary", icon: "settings", children: "Settings" })
|
|
211
280
|
), e(document.querySelector(".icon")).toHaveAttribute(
|
|
212
281
|
"aria-hidden",
|
|
213
282
|
"true"
|
|
214
283
|
);
|
|
215
284
|
});
|
|
216
|
-
}),
|
|
285
|
+
}), i("Image display", () => {
|
|
217
286
|
n("renders image when displayType is 'image' and imageSrc is provided", () => {
|
|
218
|
-
|
|
219
|
-
/* @__PURE__ */
|
|
287
|
+
o(
|
|
288
|
+
/* @__PURE__ */ a(
|
|
220
289
|
r,
|
|
221
290
|
{
|
|
222
291
|
variant: "primary",
|
|
@@ -230,42 +299,42 @@ l("Button", () => {
|
|
|
230
299
|
const t = document.querySelector("img");
|
|
231
300
|
e(t).toHaveAttribute("src", "/logo.png"), e(t).toHaveAttribute("alt", "Company Logo");
|
|
232
301
|
}), n("renders ImageComponent when provided", () => {
|
|
233
|
-
|
|
234
|
-
/* @__PURE__ */
|
|
302
|
+
o(
|
|
303
|
+
/* @__PURE__ */ a(
|
|
235
304
|
r,
|
|
236
305
|
{
|
|
237
306
|
variant: "primary",
|
|
238
307
|
displayType: "image",
|
|
239
|
-
ImageComponent: /* @__PURE__ */
|
|
308
|
+
ImageComponent: /* @__PURE__ */ a(() => /* @__PURE__ */ a("div", { "data-testid": "custom-image", children: "Custom" }), {}),
|
|
240
309
|
children: "Text"
|
|
241
310
|
}
|
|
242
311
|
)
|
|
243
|
-
), e(
|
|
312
|
+
), e(l.getByTestId("custom-image")).toBeInTheDocument();
|
|
244
313
|
}), n("applies image class when displayType is image", () => {
|
|
245
|
-
|
|
246
|
-
/* @__PURE__ */
|
|
314
|
+
o(
|
|
315
|
+
/* @__PURE__ */ a(r, { variant: "primary", displayType: "image", imageSrc: "/logo.png", children: "Text" })
|
|
247
316
|
);
|
|
248
|
-
const t =
|
|
317
|
+
const t = l.getByRole("button");
|
|
249
318
|
e(t).toHaveClass("image"), e(t).not.toHaveClass("primary");
|
|
250
319
|
});
|
|
251
|
-
}),
|
|
320
|
+
}), i("Custom className", () => {
|
|
252
321
|
n("applies custom className", () => {
|
|
253
|
-
|
|
254
|
-
/* @__PURE__ */
|
|
322
|
+
o(
|
|
323
|
+
/* @__PURE__ */ a(r, { variant: "primary", className: "custom-button", children: "Custom" })
|
|
255
324
|
);
|
|
256
|
-
const t =
|
|
325
|
+
const t = l.getByRole("button");
|
|
257
326
|
e(t).toHaveClass("custom-button", "button", "primary");
|
|
258
327
|
});
|
|
259
|
-
}),
|
|
328
|
+
}), i("Accessibility", () => {
|
|
260
329
|
n("has button role for button element", () => {
|
|
261
|
-
|
|
330
|
+
o(/* @__PURE__ */ a(r, { variant: "primary", children: "Click" })), e(l.getByRole("button")).toBeInTheDocument();
|
|
262
331
|
}), n("has link role for anchor element", () => {
|
|
263
|
-
|
|
264
|
-
/* @__PURE__ */
|
|
265
|
-
), e(
|
|
332
|
+
o(
|
|
333
|
+
/* @__PURE__ */ a(r, { as: "a", href: "/test", variant: "link", children: "Link" })
|
|
334
|
+
), e(l.getByRole("link")).toBeInTheDocument();
|
|
266
335
|
}), n("supports aria attributes", () => {
|
|
267
|
-
|
|
268
|
-
/* @__PURE__ */
|
|
336
|
+
o(
|
|
337
|
+
/* @__PURE__ */ a(
|
|
269
338
|
r,
|
|
270
339
|
{
|
|
271
340
|
variant: "primary",
|
|
@@ -275,19 +344,19 @@ l("Button", () => {
|
|
|
275
344
|
}
|
|
276
345
|
)
|
|
277
346
|
);
|
|
278
|
-
const t =
|
|
347
|
+
const t = l.getByRole("button");
|
|
279
348
|
e(t).toHaveAttribute("aria-label", "Custom Label"), e(t).toHaveAttribute("aria-describedby", "desc");
|
|
280
349
|
});
|
|
281
|
-
}),
|
|
350
|
+
}), i("Edge cases", () => {
|
|
282
351
|
n("handles undefined variant", () => {
|
|
283
|
-
|
|
352
|
+
o(/* @__PURE__ */ a(r, { variant: void 0, children: "No Variant" })), e(l.getByRole("button")).toHaveClass("button");
|
|
284
353
|
}), n("handles complex children", () => {
|
|
285
|
-
|
|
354
|
+
o(
|
|
286
355
|
/* @__PURE__ */ u(r, { variant: "primary", children: [
|
|
287
|
-
/* @__PURE__ */
|
|
288
|
-
/* @__PURE__ */
|
|
356
|
+
/* @__PURE__ */ a("span", { children: "Complex" }),
|
|
357
|
+
/* @__PURE__ */ a("strong", { children: "Children" })
|
|
289
358
|
] })
|
|
290
|
-
), e(
|
|
359
|
+
), e(l.getByText("Complex")).toBeInTheDocument(), e(l.getByText("Children")).toBeInTheDocument();
|
|
291
360
|
});
|
|
292
361
|
});
|
|
293
362
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const t=require("react/jsx-runtime"),e=require("../../../react.esm-C_9Ma9mj.cjs"),a=require("./index.cjs");require("../../../index-CW_Ehh1q.cjs");e.vi.mock("../../utils/NoScroll/noScroll",()=>({lockScroll:e.vi.fn(),unlockScroll:e.vi.fn()}));const d=e.vi.fn();e.vi.mock("../../../core/context/ModalContext",()=>({useModal:()=>({open:d})}));e.vi.mock("../Modal",()=>({Modal:({trigger:n,content:r})=>t.jsxs("div",{"data-testid":"modal-wrapper",children:[n,r]})}));const s=()=>{Object.defineProperty(window,"innerWidth",{writable:!0,configurable:!0,value:1024}),window.dispatchEvent(new Event("resize"))},u=()=>{Object.defineProperty(window,"innerWidth",{writable:!0,configurable:!0,value:375}),window.dispatchEvent(new Event("resize"))},o=[{_key:"home",label:"Home",href:"/"},{_key:"about",label:"About",href:"/about"},{_key:"ext",label:"External",href:"https://example.com",isExternal:!0}],c=[{_key:"products",label:"Products",sublinks:[{_key:"p1",label:"Widget",href:"/widget"},{_key:"p2",label:"Gadget",href:"/gadget"}]}],i=[{_key:"g1",title:"Solutions",primaryItems:[{_key:"s1",label:"Enterprise",href:"/enterprise",sublinks:[{_key:"e1",label:"SSO",href:"/sso"},{_key:"e2",label:"Security",href:"/security"}]},{_key:"s2",label:"Startup",href:"/startup"}],secondaryItems:[{_key:"r1",label:"Case Studies",href:"/case-studies"}]}],b=[{_key:"login",label:"Log in",ariaLabel:"Log in",href:"/login",variant:"secondary"},{_key:"signup",label:"Sign up",ariaLabel:"Sign up",href:"/signup",variant:"primary"}];e.describe("Navbar",()=>{e.describe("Rendering",()=>{e.it("renders the header element",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toBeInTheDocument()}),e.it("renders logo when provided",()=>{e.render(t.jsx(a.Navbar,{logo:t.jsx("img",{"data-testid":"logo",src:"/logo.svg",alt:"Logo"})})),e.globalExpect(e.screen.getByTestId("logo")).toBeInTheDocument()}),e.it("renders title when no logo provided",()=>{e.render(t.jsx(a.Navbar,{title:"My Site"})),e.globalExpect(e.screen.getByText("My Site")).toBeInTheDocument()}),e.it("renders nothing in logo slot when neither logo nor title given",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{}));e.globalExpect(n.querySelector(".logo")).not.toBeInTheDocument(),e.globalExpect(n.querySelector(".title")).not.toBeInTheDocument()}),e.it("renders navigation landmark",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("navigation",{name:"Primary navigation"})).toBeInTheDocument()})}),e.describe("Flat navigation items",()=>{e.it("renders all flat nav links",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("Home")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("About")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("External")).toBeInTheDocument()}),e.it("renders correct hrefs",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("Home")).toHaveAttribute("href","/"),e.globalExpect(e.screen.getByText("About")).toHaveAttribute("href","/about")}),e.it("renders external links with target=_blank",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("External")).toHaveAttribute("target","_blank")}),e.it("renders external links with rel=noopener noreferrer",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("External")).toHaveAttribute("rel","noopener noreferrer")}),e.it("renders internal links with target=_self",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("Home")).toHaveAttribute("target","_self")})}),e.describe("Items with sublinks (default navigationType)",()=>{e.it("renders parent item as button when no href",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByRole("button",{name:/products/i})).toBeInTheDocument()}),e.it("toggle button has aria-haspopup=true",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByRole("button",{name:/products/i})).toHaveAttribute("aria-haspopup","true")}),e.it("toggle button starts with aria-expanded=false",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByRole("button",{name:/products/i})).toHaveAttribute("aria-expanded","false")}),e.it("sublink dropdown has role=menu and aria-label",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{items:c}));e.globalExpect(n.querySelector("[role='menu'][aria-label='Products submenu']")).toBeInTheDocument()}),e.it("clicking toggle button opens dropdown (aria-expanded=true)",()=>{e.render(t.jsx(a.Navbar,{items:c}));const n=e.screen.getByRole("button",{name:/products/i});e.fireEvent.click(n),e.globalExpect(n).toHaveAttribute("aria-expanded","true")}),e.it("clicking toggle button twice closes dropdown (aria-expanded=false)",()=>{e.render(t.jsx(a.Navbar,{items:c}));const n=e.screen.getByRole("button",{name:/products/i});e.fireEvent.click(n),e.fireEvent.click(n),e.globalExpect(n).toHaveAttribute("aria-expanded","false")}),e.it("sublinks are rendered inside the dropdown",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByText("Widget")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("Gadget")).toBeInTheDocument()}),e.it("sublinks have correct hrefs",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByText("Widget")).toHaveAttribute("href","/widget"),e.globalExpect(e.screen.getByText("Gadget")).toHaveAttribute("href","/gadget")})}),e.describe("onClick callback",()=>{e.it("calls onClick when a flat link is clicked",()=>{const n=e.vi.fn(),r=[{_key:"click",label:"Click me",href:"#",onClick:n}];e.render(t.jsx(a.Navbar,{items:r})),e.fireEvent.click(e.screen.getByText("Click me")),e.globalExpect(n).toHaveBeenCalledOnce()})}),e.describe("Variant",()=>{e.it("applies standard variant class by default",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("standard")}),e.it("applies transparent variant class",()=>{e.render(t.jsx(a.Navbar,{variant:"transparent"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("transparent")})}),e.describe("Alignment",()=>{e.it("applies right alignment class by default",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("right")}),e.it("applies left alignment class",()=>{e.render(t.jsx(a.Navbar,{alignment:"left"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("left")}),e.it("applies center alignment class",()=>{e.render(t.jsx(a.Navbar,{alignment:"center"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("center")})}),e.describe("Sticky",()=>{e.it("does not apply sticky class by default",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).not.toHaveClass("sticky")}),e.it("applies sticky class when isSticky=true",()=>{e.render(t.jsx(a.Navbar,{isSticky:!0})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("sticky")})}),e.describe("Navigation type",()=>{e.it("applies default class when no groups",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("default")}),e.it("applies advanced class when groups provided",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("advanced")})}),e.describe("Utility items",()=>{e.it("renders both desktop and mobile utility navs",()=>{e.render(t.jsx(a.Navbar,{utilityItems:b}));const n=e.screen.getAllByRole("navigation",{name:"Utility navigation"});e.globalExpect(n).toHaveLength(2)}),e.it("renders all utility button labels",()=>{e.render(t.jsx(a.Navbar,{utilityItems:b})),e.globalExpect(e.screen.getAllByText("Log in").length).toBeGreaterThan(0),e.globalExpect(e.screen.getAllByText("Sign up").length).toBeGreaterThan(0)}),e.it("renders link utility items as anchors with correct href",()=>{e.render(t.jsx(a.Navbar,{utilityItems:b}));const n=e.screen.getAllByRole("link",{name:"Sign up"});e.globalExpect(n.length).toBeGreaterThan(0),n.forEach(r=>e.globalExpect(r).toHaveAttribute("href","/signup"))}),e.it("does not render utility nav when no items",()=>{e.render(t.jsx(a.Navbar,{utilityItems:[]})),e.globalExpect(e.screen.queryByRole("navigation",{name:"Utility navigation"})).not.toBeInTheDocument()}),e.it("does not crash when only one utility item provided",()=>{const n=[{_key:"cta",label:"Sign up",ariaLabel:"Sign up",href:"/signup"}];e.globalExpect(()=>e.render(t.jsx(a.Navbar,{utilityItems:n}))).not.toThrow()}),e.it("renders modal utility item as a button (not an anchor)",()=>{const n=[{_key:"contact",label:"Contact Us",ariaLabel:"Contact Us",variant:"primary",modalPayload:{heading:"Contact Us"}}];e.render(t.jsx(a.Navbar,{utilityItems:n}));const r=e.screen.getAllByRole("button",{name:"Contact Us"});e.globalExpect(r.length).toBeGreaterThan(0),r.forEach(l=>e.globalExpect(l.tagName).toBe("BUTTON"))}),e.it("calls useModal open with correct payload when modal utility item is clicked",()=>{d.mockClear();const n={heading:"Contact Us",formReference:{_id:"form-1",heading:"Contact"}},r=[{_key:"contact",label:"Contact Us",ariaLabel:"Contact Us",variant:"primary",modalPayload:n}];e.render(t.jsx(a.Navbar,{utilityItems:r}));const l=e.screen.getAllByRole("button",{name:"Contact Us"});e.fireEvent.click(l[0]),e.globalExpect(d).toHaveBeenCalledWith(n)}),e.it("renders mixed link and modal utility items correctly",()=>{const n=[{_key:"login",label:"Log in",ariaLabel:"Log in",href:"/login",variant:"secondary"},{_key:"contact",label:"Contact Us",ariaLabel:"Contact Us",variant:"primary",modalPayload:{heading:"Contact"}}];e.render(t.jsx(a.Navbar,{utilityItems:n}));const r=e.screen.getAllByRole("link",{name:"Log in"});e.globalExpect(r.length).toBeGreaterThan(0);const l=e.screen.getAllByRole("button",{name:"Contact Us"});e.globalExpect(l.length).toBeGreaterThan(0)})}),e.describe("Mobile menu toggle",()=>{e.it("renders toggle button",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("button",{name:/open menu/i})).toBeInTheDocument()}),e.it("toggle starts closed (aria-expanded=false)",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("button",{name:/open menu/i})).toHaveAttribute("aria-expanded","false")}),e.it("opens menu on click",()=>{e.render(t.jsx(a.Navbar,{items:o}));const n=e.screen.getByRole("button",{name:/open menu/i});e.fireEvent.click(n),e.globalExpect(n).toHaveAttribute("aria-expanded","true")}),e.it("closes menu on second click",()=>{e.render(t.jsx(a.Navbar,{items:o}));const n=e.screen.getByRole("button",{name:/open menu/i});e.fireEvent.click(n),e.fireEvent.click(n),e.globalExpect(n).toHaveAttribute("aria-expanded","false")}),e.it("toggle has aria-controls pointing to main-menu",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("button",{name:/open menu/i})).toHaveAttribute("aria-controls","main-menu")}),e.it("aria-label changes to 'Close menu' when menu is open",()=>{e.render(t.jsx(a.Navbar,{items:o}));const n=e.screen.getByRole("button",{name:/open menu/i});e.fireEvent.click(n),e.globalExpect(e.screen.getByRole("button",{name:/close menu/i})).toBeInTheDocument()})}),e.describe("Search button",()=>{e.it("does not render search button when showSearch=false",()=>{e.render(t.jsx(a.Navbar,{showSearch:!1})),e.globalExpect(e.screen.queryByRole("button",{name:/search/i})).not.toBeInTheDocument()}),e.it("renders search button in mobile bar when showSearch=true and on mobile",()=>{u(),e.render(t.jsx(a.Navbar,{showSearch:!0,items:o})),e.globalExpect(e.screen.getByRole("button",{name:/search/i})).toBeInTheDocument()}),e.it("renders search button in nav when showSearch=true and on desktop",()=>{s(),e.render(t.jsx(a.Navbar,{showSearch:!0,items:o})),e.globalExpect(e.screen.getByRole("button",{name:/search/i})).toBeInTheDocument()})}),e.describe("Custom styling",()=>{e.it("applies custom className",()=>{e.render(t.jsx(a.Navbar,{className:"my-navbar"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("my-navbar")}),e.it("preserves base navbar class alongside custom className",()=>{e.render(t.jsx(a.Navbar,{className:"my-navbar"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("navbar")}),e.it("applies inline style",()=>{e.render(t.jsx(a.Navbar,{style:{borderBottom:"2px solid red"}}));const n=e.screen.getByRole("banner");e.globalExpect(n.style.borderBottom).toBe("2px solid red")})}),e.describe("Accessibility",()=>{e.it("header has banner landmark role",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toBeInTheDocument()}),e.it("header has aria-label='Site header'",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toHaveAttribute("aria-label","Site header")}),e.it("primary nav has id=main-menu",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{items:o}));e.globalExpect(n.querySelector("#main-menu")).toBeInTheDocument()}),e.it("primary nav has aria-label='Primary navigation'",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("navigation",{name:"Primary navigation"})).toBeInTheDocument()}),e.it("decorative icons are aria-hidden",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(document.querySelectorAll("[aria-hidden='true']").length).toBeGreaterThan(0)}),e.it("external link icons are aria-hidden",()=>{e.render(t.jsx(a.Navbar,{items:o}));const r=e.screen.getByText("External").querySelector("[aria-hidden='true']");e.globalExpect(r).toBeInTheDocument()})}),e.describe("Props forwarding",()=>{e.it("forwards data attributes to header",()=>{e.render(t.jsx(a.Navbar,{"data-testid":"my-navbar"})),e.globalExpect(e.screen.getByTestId("my-navbar")).toBeInTheDocument()})}),e.describe("Advanced navigation (groups)",()=>{e.beforeEach(()=>{s()}),e.it("renders group titles",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByText("Solutions")).toBeInTheDocument()}),e.it("group toggle button has aria-haspopup=true",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("button",{name:/solutions/i})).toHaveAttribute("aria-haspopup","true")}),e.it("group toggle starts with aria-expanded=false",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("button",{name:/solutions/i})).toHaveAttribute("aria-expanded","false")}),e.it("group submenu has role=menu and aria-label",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"}));e.globalExpect(n.querySelector("[aria-label='Solutions submenu']")).toBeInTheDocument()}),e.it("mouseenter on group wrapper opens the mega-menu (aria-expanded=true)",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"}));const n=e.screen.getByRole("button",{name:/solutions/i});e.fireEvent.mouseEnter(n.closest(".linkWrapper")),e.globalExpect(n).toHaveAttribute("aria-expanded","true")}),e.it("renders primary items inside the mega-menu",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByText("Enterprise")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("Startup")).toBeInTheDocument()}),e.it("primary items with href are rendered as links",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"}));const n=e.screen.getByText("Enterprise").closest("a");e.globalExpect(n).not.toBeNull(),e.globalExpect(n.tagName).toBe("A"),e.globalExpect(n).toHaveAttribute("href","/enterprise")}),e.it("renders secondary items",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByText("Case Studies")).toBeInTheDocument()}),e.it("hovering a primary item with sublinks reveals column 2 children",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.fireEvent.mouseEnter(e.screen.getByText("Enterprise").closest("a")),e.globalExpect(e.screen.getByText("SSO")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("Security")).toBeInTheDocument()}),e.it("column 2 disappears after hovering a primary item without sublinks",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.fireEvent.mouseEnter(e.screen.getByText("Enterprise").closest("a")),e.globalExpect(e.screen.getByText("SSO")).toBeInTheDocument(),e.fireEvent.mouseEnter(e.screen.getByText("Startup").closest("a")),e.globalExpect(e.screen.queryByText("SSO")).not.toBeInTheDocument()}),e.it("mouseleave on submenu panel closes the mega-menu",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),r=e.screen.getByRole("button",{name:/solutions/i}),l=r.closest(".linkWrapper"),g=n.querySelector("[aria-label='Solutions submenu']");e.fireEvent.mouseEnter(l),e.globalExpect(r).toHaveAttribute("aria-expanded","true"),e.fireEvent.mouseLeave(g),e.globalExpect(r).toHaveAttribute("aria-expanded","false")}),e.it("primary item click calls onClick and closes dropdown",()=>{const n=e.vi.fn(),r=[{_key:"g1",title:"Menu",primaryItems:[{_key:"item1",label:"Clickable",href:"/dest",onClick:n}]}];e.render(t.jsx(a.Navbar,{groups:r,navigationType:"advanced"})),e.fireEvent.click(e.screen.getByText("Clickable").closest("a")),e.globalExpect(n).toHaveBeenCalledOnce()})}),e.describe("Spotlight card",()=>{const r=[{_key:"spot",title:"Spotlight Group",primaryItems:[{_key:"p1",label:"Item One",href:"/one"}],spotlight:{title:"New Feature",description:"Check it out",callToAction:{label:"Learn more",ariaLabel:"Learn more about new feature",variant:"primary",linkOptions:{linkType:"internal",internalUrl:{slug:{current:"new-feature"}}}}}}];e.it("renders the spotlight CTA button",()=>{s(),e.render(t.jsx(a.Navbar,{groups:r,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("link",{name:/learn more/i})).toBeInTheDocument()}),e.it("spotlight CTA resolves internal href correctly",()=>{s(),e.render(t.jsx(a.Navbar,{groups:r,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("link",{name:/learn more/i})).toHaveAttribute("href","/new-feature")}),e.it("spotlight CTA resolves external href correctly",()=>{s();const g=[{_key:"g",title:"Ext Group",primaryItems:[{_key:"p1",label:"Item",href:"/item"}],spotlight:{callToAction:{label:"Visit",ariaLabel:"Visit external site",linkOptions:{linkType:"external",externalUrl:"https://example.com"}}}}];e.render(t.jsx(a.Navbar,{groups:g,navigationType:"advanced"}));const p=e.screen.getByRole("link",{name:/visit/i});e.globalExpect(p).toHaveAttribute("href","https://example.com"),e.globalExpect(p).toHaveAttribute("target","_blank")}),e.it("renders spotlight image when provided",()=>{s();const l=[{_key:"g",title:"Img Group",primaryItems:[{_key:"p1",label:"Item",href:"/item"}],spotlight:{callToAction:{label:"Go",linkOptions:{linkType:"internal",internalUrl:{slug:{current:"go"}}}},image:{asset:{_id:"1",url:"/img.jpg",altText:"Demo image",title:"Demo",description:"Demo desc"},imageUrls:{small:"/s.jpg",medium:"/m.jpg",large:"/l.jpg"}}}}];e.render(t.jsx(a.Navbar,{groups:l,navigationType:"advanced"}));const g=e.screen.getByAltText("Demo image");e.globalExpect(g).toBeInTheDocument(),e.globalExpect(g).toHaveAttribute("src","/m.jpg")}),e.it("renders nothing when callToAction is absent",()=>{s();const l=[{_key:"g",title:"No CTA",primaryItems:[{_key:"p1",label:"Item",href:"/item"}],spotlight:{title:"Title only"}}];e.globalExpect(()=>e.render(t.jsx(a.Navbar,{groups:l,navigationType:"advanced"}))).not.toThrow()})}),e.describe("renderText prop",()=>{e.it("calls renderText for spotlight title when provided",()=>{s();const n=e.vi.fn(l=>typeof l=="string"?t.jsx("span",{children:l}):null),r=[{_key:"g",title:"Group",primaryItems:[{_key:"p1",label:"Item",href:"/item"}],spotlight:{title:"Spotlight Title",callToAction:{label:"Go",linkOptions:{linkType:"internal",internalUrl:{slug:{current:"go"}}}}}}];e.render(t.jsx(a.Navbar,{groups:r,navigationType:"advanced",renderText:n})),e.globalExpect(n).toHaveBeenCalledWith("Spotlight Title",e.globalExpect.any(String))})})});
|
|
1
|
+
"use strict";const t=require("react/jsx-runtime"),e=require("../../../react.esm-C_9Ma9mj.cjs"),a=require("./index.cjs");require("../../../index-CW_Ehh1q.cjs");e.vi.mock("../../utils/NoScroll/noScroll",()=>({lockScroll:e.vi.fn(),unlockScroll:e.vi.fn()}));const d=e.vi.fn();e.vi.mock("../../../core/context/ModalContext",()=>({useModal:()=>({open:d})}));e.vi.mock("../Modal",()=>({Modal:({trigger:n,content:r})=>t.jsxs("div",{"data-testid":"modal-wrapper",children:[n,r]})}));const s=()=>{Object.defineProperty(window,"innerWidth",{writable:!0,configurable:!0,value:1024}),window.dispatchEvent(new Event("resize"))},u=()=>{Object.defineProperty(window,"innerWidth",{writable:!0,configurable:!0,value:375}),window.dispatchEvent(new Event("resize"))},o=[{_key:"home",label:"Home",href:"/"},{_key:"about",label:"About",href:"/about"},{_key:"ext",label:"External",href:"https://example.com",isExternal:!0}],c=[{_key:"products",label:"Products",sublinks:[{_key:"p1",label:"Widget",href:"/widget"},{_key:"p2",label:"Gadget",href:"/gadget"}]}],i=[{_key:"g1",title:"Solutions",primaryItems:[{_key:"s1",label:"Enterprise",href:"/enterprise",sublinks:[{_key:"e1",label:"SSO",href:"/sso"},{_key:"e2",label:"Security",href:"/security"}]},{_key:"s2",label:"Startup",href:"/startup"}],secondaryItems:[{_key:"r1",label:"Case Studies",href:"/case-studies"}]}],b=[{_key:"login",label:"Log in",ariaLabel:"Log in",href:"/login",variant:"secondary"},{_key:"signup",label:"Sign up",ariaLabel:"Sign up",href:"/signup",variant:"primary"}];e.describe("Navbar",()=>{e.describe("Rendering",()=>{e.it("renders the header element",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toBeInTheDocument()}),e.it("renders logo when provided",()=>{e.render(t.jsx(a.Navbar,{logo:t.jsx("img",{"data-testid":"logo",src:"/logo.svg",alt:"Logo"})})),e.globalExpect(e.screen.getByTestId("logo")).toBeInTheDocument()}),e.it("renders title when no logo provided",()=>{e.render(t.jsx(a.Navbar,{title:"My Site"})),e.globalExpect(e.screen.getByText("My Site")).toBeInTheDocument()}),e.it("renders nothing in logo slot when neither logo nor title given",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{}));e.globalExpect(n.querySelector(".logo")).not.toBeInTheDocument(),e.globalExpect(n.querySelector(".title")).not.toBeInTheDocument()}),e.it("renders navigation landmark",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("navigation",{name:"Primary navigation"})).toBeInTheDocument()})}),e.describe("Flat navigation items",()=>{e.it("renders all flat nav links",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("Home")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("About")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("External")).toBeInTheDocument()}),e.it("renders correct hrefs",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("Home")).toHaveAttribute("href","/"),e.globalExpect(e.screen.getByText("About")).toHaveAttribute("href","/about")}),e.it("renders external links with target=_blank",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("External")).toHaveAttribute("target","_blank")}),e.it("renders external links with rel=noopener noreferrer",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("External")).toHaveAttribute("rel","noopener noreferrer")}),e.it("renders internal links with target=_self",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByText("Home")).toHaveAttribute("target","_self")})}),e.describe("Items with sublinks (default navigationType)",()=>{e.it("renders parent item as button when no href",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByRole("button",{name:/products/i})).toBeInTheDocument()}),e.it("toggle button has aria-haspopup=true",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByRole("button",{name:/products/i})).toHaveAttribute("aria-haspopup","true")}),e.it("toggle button starts with aria-expanded=false",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByRole("button",{name:/products/i})).toHaveAttribute("aria-expanded","false")}),e.it("sublink dropdown has role=menu and aria-label",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{items:c}));e.globalExpect(n.querySelector("[role='menu'][aria-label='Products submenu']")).toBeInTheDocument()}),e.it("clicking toggle button opens dropdown (aria-expanded=true)",()=>{e.render(t.jsx(a.Navbar,{items:c}));const n=e.screen.getByRole("button",{name:/products/i});e.fireEvent.click(n),e.globalExpect(n).toHaveAttribute("aria-expanded","true")}),e.it("clicking toggle button twice closes dropdown (aria-expanded=false)",()=>{e.render(t.jsx(a.Navbar,{items:c}));const n=e.screen.getByRole("button",{name:/products/i});e.fireEvent.click(n),e.fireEvent.click(n),e.globalExpect(n).toHaveAttribute("aria-expanded","false")}),e.it("sublinks are rendered inside the dropdown",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByText("Widget")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("Gadget")).toBeInTheDocument()}),e.it("sublinks have correct hrefs",()=>{e.render(t.jsx(a.Navbar,{items:c})),e.globalExpect(e.screen.getByText("Widget")).toHaveAttribute("href","/widget"),e.globalExpect(e.screen.getByText("Gadget")).toHaveAttribute("href","/gadget")})}),e.describe("onClick callback",()=>{e.it("calls onClick when a flat link is clicked",()=>{const n=e.vi.fn(),r=[{_key:"click",label:"Click me",href:"#",onClick:n}];e.render(t.jsx(a.Navbar,{items:r})),e.fireEvent.click(e.screen.getByText("Click me")),e.globalExpect(n).toHaveBeenCalledOnce()})}),e.describe("Variant",()=>{e.it("applies standard variant class by default",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("standard")}),e.it("applies transparent variant class",()=>{e.render(t.jsx(a.Navbar,{variant:"transparent"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("transparent")})}),e.describe("Alignment",()=>{e.it("applies right alignment class by default",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("right")}),e.it("applies left alignment class",()=>{e.render(t.jsx(a.Navbar,{alignment:"left"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("left")}),e.it("applies center alignment class",()=>{e.render(t.jsx(a.Navbar,{alignment:"center"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("center")})}),e.describe("Sticky",()=>{e.it("does not apply sticky class by default",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).not.toHaveClass("sticky")}),e.it("applies sticky class when isSticky=true",()=>{e.render(t.jsx(a.Navbar,{isSticky:!0})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("sticky")})}),e.describe("Navigation type",()=>{e.it("applies default class when no groups",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("default")}),e.it("applies advanced class when groups provided",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("advanced")})}),e.describe("Utility items",()=>{e.it("renders both desktop and mobile utility navs",()=>{e.render(t.jsx(a.Navbar,{utilityItems:b}));const n=e.screen.getAllByRole("navigation",{name:"Utility navigation"});e.globalExpect(n).toHaveLength(2)}),e.it("renders all utility button labels",()=>{e.render(t.jsx(a.Navbar,{utilityItems:b})),e.globalExpect(e.screen.getAllByText("Log in").length).toBeGreaterThan(0),e.globalExpect(e.screen.getAllByText("Sign up").length).toBeGreaterThan(0)}),e.it("renders link utility items as anchors with correct href",()=>{e.render(t.jsx(a.Navbar,{utilityItems:b}));const n=e.screen.getAllByRole("link",{name:"Sign up"});e.globalExpect(n.length).toBeGreaterThan(0),n.forEach(r=>e.globalExpect(r).toHaveAttribute("href","/signup"))}),e.it("does not render utility nav when no items",()=>{e.render(t.jsx(a.Navbar,{utilityItems:[]})),e.globalExpect(e.screen.queryByRole("navigation",{name:"Utility navigation"})).not.toBeInTheDocument()}),e.it("does not crash when only one utility item provided",()=>{const n=[{_key:"cta",label:"Sign up",ariaLabel:"Sign up",href:"/signup"}];e.globalExpect(()=>e.render(t.jsx(a.Navbar,{utilityItems:n}))).not.toThrow()}),e.it("renders modal utility item as a button (not an anchor)",()=>{const n=[{_key:"contact",label:"Contact Us",ariaLabel:"Contact Us",variant:"primary",modalPayload:{heading:{title:[{_type:"block",_key:"cua",children:[{_type:"span",_key:"cub",text:"Contact Us",marks:[]}],markDefs:[],style:"normal"}]}}}];e.render(t.jsx(a.Navbar,{utilityItems:n}));const r=e.screen.getAllByRole("button",{name:"Contact Us"});e.globalExpect(r.length).toBeGreaterThan(0),r.forEach(l=>e.globalExpect(l.tagName).toBe("BUTTON"))}),e.it("calls useModal open with correct payload when modal utility item is clicked",()=>{d.mockClear();const n={heading:{title:[{_type:"block",_key:"cua",children:[{_type:"span",_key:"cub",text:"Contact Us",marks:[]}],markDefs:[],style:"normal"}]},formReference:{_id:"form-1",heading:{title:[{_type:"block",_key:"coa",children:[{_type:"span",_key:"cob",text:"Contact",marks:[]}],markDefs:[],style:"normal"}]}}},r=[{_key:"contact",label:"Contact Us",ariaLabel:"Contact Us",variant:"primary",modalPayload:n}];e.render(t.jsx(a.Navbar,{utilityItems:r}));const l=e.screen.getAllByRole("button",{name:"Contact Us"});e.fireEvent.click(l[0]),e.globalExpect(d).toHaveBeenCalledWith(n)}),e.it("renders mixed link and modal utility items correctly",()=>{const n=[{_key:"login",label:"Log in",ariaLabel:"Log in",href:"/login",variant:"secondary"},{_key:"contact",label:"Contact Us",ariaLabel:"Contact Us",variant:"primary",modalPayload:{heading:{title:[{_type:"block",_key:"coa",children:[{_type:"span",_key:"cob",text:"Contact",marks:[]}],markDefs:[],style:"normal"}]}}}];e.render(t.jsx(a.Navbar,{utilityItems:n}));const r=e.screen.getAllByRole("link",{name:"Log in"});e.globalExpect(r.length).toBeGreaterThan(0);const l=e.screen.getAllByRole("button",{name:"Contact Us"});e.globalExpect(l.length).toBeGreaterThan(0)})}),e.describe("Mobile menu toggle",()=>{e.it("renders toggle button",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("button",{name:/open menu/i})).toBeInTheDocument()}),e.it("toggle starts closed (aria-expanded=false)",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("button",{name:/open menu/i})).toHaveAttribute("aria-expanded","false")}),e.it("opens menu on click",()=>{e.render(t.jsx(a.Navbar,{items:o}));const n=e.screen.getByRole("button",{name:/open menu/i});e.fireEvent.click(n),e.globalExpect(n).toHaveAttribute("aria-expanded","true")}),e.it("closes menu on second click",()=>{e.render(t.jsx(a.Navbar,{items:o}));const n=e.screen.getByRole("button",{name:/open menu/i});e.fireEvent.click(n),e.fireEvent.click(n),e.globalExpect(n).toHaveAttribute("aria-expanded","false")}),e.it("toggle has aria-controls pointing to main-menu",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("button",{name:/open menu/i})).toHaveAttribute("aria-controls","main-menu")}),e.it("aria-label changes to 'Close menu' when menu is open",()=>{e.render(t.jsx(a.Navbar,{items:o}));const n=e.screen.getByRole("button",{name:/open menu/i});e.fireEvent.click(n),e.globalExpect(e.screen.getByRole("button",{name:/close menu/i})).toBeInTheDocument()})}),e.describe("Search button",()=>{e.it("does not render search button when showSearch=false",()=>{e.render(t.jsx(a.Navbar,{showSearch:!1})),e.globalExpect(e.screen.queryByRole("button",{name:/search/i})).not.toBeInTheDocument()}),e.it("renders search button in mobile bar when showSearch=true and on mobile",()=>{u(),e.render(t.jsx(a.Navbar,{showSearch:!0,items:o})),e.globalExpect(e.screen.getByRole("button",{name:/search/i})).toBeInTheDocument()}),e.it("renders search button in nav when showSearch=true and on desktop",()=>{s(),e.render(t.jsx(a.Navbar,{showSearch:!0,items:o})),e.globalExpect(e.screen.getByRole("button",{name:/search/i})).toBeInTheDocument()})}),e.describe("Custom styling",()=>{e.it("applies custom className",()=>{e.render(t.jsx(a.Navbar,{className:"my-navbar"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("my-navbar")}),e.it("preserves base navbar class alongside custom className",()=>{e.render(t.jsx(a.Navbar,{className:"my-navbar"})),e.globalExpect(e.screen.getByRole("banner")).toHaveClass("navbar")}),e.it("applies inline style",()=>{e.render(t.jsx(a.Navbar,{style:{borderBottom:"2px solid red"}}));const n=e.screen.getByRole("banner");e.globalExpect(n.style.borderBottom).toBe("2px solid red")})}),e.describe("Accessibility",()=>{e.it("header has banner landmark role",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toBeInTheDocument()}),e.it("header has aria-label='Site header'",()=>{e.render(t.jsx(a.Navbar,{})),e.globalExpect(e.screen.getByRole("banner")).toHaveAttribute("aria-label","Site header")}),e.it("primary nav has id=main-menu",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{items:o}));e.globalExpect(n.querySelector("#main-menu")).toBeInTheDocument()}),e.it("primary nav has aria-label='Primary navigation'",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(e.screen.getByRole("navigation",{name:"Primary navigation"})).toBeInTheDocument()}),e.it("decorative icons are aria-hidden",()=>{e.render(t.jsx(a.Navbar,{items:o})),e.globalExpect(document.querySelectorAll("[aria-hidden='true']").length).toBeGreaterThan(0)}),e.it("external link icons are aria-hidden",()=>{e.render(t.jsx(a.Navbar,{items:o}));const r=e.screen.getByText("External").querySelector("[aria-hidden='true']");e.globalExpect(r).toBeInTheDocument()})}),e.describe("Props forwarding",()=>{e.it("forwards data attributes to header",()=>{e.render(t.jsx(a.Navbar,{"data-testid":"my-navbar"})),e.globalExpect(e.screen.getByTestId("my-navbar")).toBeInTheDocument()})}),e.describe("Advanced navigation (groups)",()=>{e.beforeEach(()=>{s()}),e.it("renders group titles",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByText("Solutions")).toBeInTheDocument()}),e.it("group toggle button has aria-haspopup=true",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("button",{name:/solutions/i})).toHaveAttribute("aria-haspopup","true")}),e.it("group toggle starts with aria-expanded=false",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("button",{name:/solutions/i})).toHaveAttribute("aria-expanded","false")}),e.it("group submenu has role=menu and aria-label",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"}));e.globalExpect(n.querySelector("[aria-label='Solutions submenu']")).toBeInTheDocument()}),e.it("mouseenter on group wrapper opens the mega-menu (aria-expanded=true)",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"}));const n=e.screen.getByRole("button",{name:/solutions/i});e.fireEvent.mouseEnter(n.closest(".linkWrapper")),e.globalExpect(n).toHaveAttribute("aria-expanded","true")}),e.it("renders primary items inside the mega-menu",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByText("Enterprise")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("Startup")).toBeInTheDocument()}),e.it("primary items with href are rendered as links",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"}));const n=e.screen.getByText("Enterprise").closest("a");e.globalExpect(n).not.toBeNull(),e.globalExpect(n.tagName).toBe("A"),e.globalExpect(n).toHaveAttribute("href","/enterprise")}),e.it("renders secondary items",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.globalExpect(e.screen.getByText("Case Studies")).toBeInTheDocument()}),e.it("hovering a primary item with sublinks reveals column 2 children",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.fireEvent.mouseEnter(e.screen.getByText("Enterprise").closest("a")),e.globalExpect(e.screen.getByText("SSO")).toBeInTheDocument(),e.globalExpect(e.screen.getByText("Security")).toBeInTheDocument()}),e.it("column 2 disappears after hovering a primary item without sublinks",()=>{e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),e.fireEvent.mouseEnter(e.screen.getByText("Enterprise").closest("a")),e.globalExpect(e.screen.getByText("SSO")).toBeInTheDocument(),e.fireEvent.mouseEnter(e.screen.getByText("Startup").closest("a")),e.globalExpect(e.screen.queryByText("SSO")).not.toBeInTheDocument()}),e.it("mouseleave on submenu panel closes the mega-menu",()=>{const{container:n}=e.render(t.jsx(a.Navbar,{groups:i,navigationType:"advanced"})),r=e.screen.getByRole("button",{name:/solutions/i}),l=r.closest(".linkWrapper"),g=n.querySelector("[aria-label='Solutions submenu']");e.fireEvent.mouseEnter(l),e.globalExpect(r).toHaveAttribute("aria-expanded","true"),e.fireEvent.mouseLeave(g),e.globalExpect(r).toHaveAttribute("aria-expanded","false")}),e.it("primary item click calls onClick and closes dropdown",()=>{const n=e.vi.fn(),r=[{_key:"g1",title:"Menu",primaryItems:[{_key:"item1",label:"Clickable",href:"/dest",onClick:n}]}];e.render(t.jsx(a.Navbar,{groups:r,navigationType:"advanced"})),e.fireEvent.click(e.screen.getByText("Clickable").closest("a")),e.globalExpect(n).toHaveBeenCalledOnce()})}),e.describe("Spotlight card",()=>{const r=[{_key:"spot",title:"Spotlight Group",primaryItems:[{_key:"p1",label:"Item One",href:"/one"}],spotlight:{title:"New Feature",description:"Check it out",callToAction:{label:"Learn more",ariaLabel:"Learn more about new feature",variant:"primary",linkOptions:{linkType:"internal",internalUrl:{slug:{current:"new-feature"}}}}}}];e.it("renders the spotlight CTA button",()=>{s(),e.render(t.jsx(a.Navbar,{groups:r,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("link",{name:/learn more/i})).toBeInTheDocument()}),e.it("spotlight CTA resolves internal href correctly",()=>{s(),e.render(t.jsx(a.Navbar,{groups:r,navigationType:"advanced"})),e.globalExpect(e.screen.getByRole("link",{name:/learn more/i})).toHaveAttribute("href","/new-feature")}),e.it("spotlight CTA resolves external href correctly",()=>{s();const g=[{_key:"g",title:"Ext Group",primaryItems:[{_key:"p1",label:"Item",href:"/item"}],spotlight:{callToAction:{label:"Visit",ariaLabel:"Visit external site",linkOptions:{linkType:"external",externalUrl:"https://example.com"}}}}];e.render(t.jsx(a.Navbar,{groups:g,navigationType:"advanced"}));const p=e.screen.getByRole("link",{name:/visit/i});e.globalExpect(p).toHaveAttribute("href","https://example.com"),e.globalExpect(p).toHaveAttribute("target","_blank")}),e.it("renders spotlight image when provided",()=>{s();const l=[{_key:"g",title:"Img Group",primaryItems:[{_key:"p1",label:"Item",href:"/item"}],spotlight:{callToAction:{label:"Go",linkOptions:{linkType:"internal",internalUrl:{slug:{current:"go"}}}},image:{asset:{_id:"1",url:"/img.jpg",altText:"Demo image",title:"Demo",description:"Demo desc"},imageUrls:{small:"/s.jpg",medium:"/m.jpg",large:"/l.jpg"}}}}];e.render(t.jsx(a.Navbar,{groups:l,navigationType:"advanced"}));const g=e.screen.getByAltText("Demo image");e.globalExpect(g).toBeInTheDocument(),e.globalExpect(g).toHaveAttribute("src","/m.jpg")}),e.it("renders nothing when callToAction is absent",()=>{s();const l=[{_key:"g",title:"No CTA",primaryItems:[{_key:"p1",label:"Item",href:"/item"}],spotlight:{title:"Title only"}}];e.globalExpect(()=>e.render(t.jsx(a.Navbar,{groups:l,navigationType:"advanced"}))).not.toThrow()})}),e.describe("renderText prop",()=>{e.it("calls renderText for spotlight title when provided",()=>{s();const n=e.vi.fn(l=>typeof l=="string"?t.jsx("span",{children:l}):null),r=[{_key:"g",title:"Group",primaryItems:[{_key:"p1",label:"Item",href:"/item"}],spotlight:{title:"Spotlight Title",callToAction:{label:"Go",linkOptions:{linkType:"internal",internalUrl:{slug:{current:"go"}}}}}}];e.render(t.jsx(a.Navbar,{groups:r,navigationType:"advanced",renderText:n})),e.globalExpect(n).toHaveBeenCalledWith("Spotlight Title",e.globalExpect.any(String))})})});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { v as d, d as c, i as a, r as o, g as e, s as t, f as
|
|
1
|
+
import { jsxs as B, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { v as d, d as c, i as a, r as o, g as e, s as t, f as m, b as T } from "../../../react.esm-DjxyacK8.js";
|
|
3
3
|
import { Navbar as i } from "./index.mjs";
|
|
4
4
|
import "../../../index-DPGXWTtt.js";
|
|
5
5
|
d.mock("../../utils/NoScroll/noScroll", () => ({
|
|
@@ -14,7 +14,7 @@ d.mock("../Modal", () => ({
|
|
|
14
14
|
Modal: ({
|
|
15
15
|
trigger: r,
|
|
16
16
|
content: l
|
|
17
|
-
}) => /* @__PURE__ */
|
|
17
|
+
}) => /* @__PURE__ */ B("div", { "data-testid": "modal-wrapper", children: [
|
|
18
18
|
r,
|
|
19
19
|
l
|
|
20
20
|
] })
|
|
@@ -141,11 +141,11 @@ c("Navbar", () => {
|
|
|
141
141
|
}), a("clicking toggle button opens dropdown (aria-expanded=true)", () => {
|
|
142
142
|
o(/* @__PURE__ */ n(i, { items: y }));
|
|
143
143
|
const r = t.getByRole("button", { name: /products/i });
|
|
144
|
-
|
|
144
|
+
m.click(r), e(r).toHaveAttribute("aria-expanded", "true");
|
|
145
145
|
}), a("clicking toggle button twice closes dropdown (aria-expanded=false)", () => {
|
|
146
146
|
o(/* @__PURE__ */ n(i, { items: y }));
|
|
147
147
|
const r = t.getByRole("button", { name: /products/i });
|
|
148
|
-
|
|
148
|
+
m.click(r), m.click(r), e(r).toHaveAttribute("aria-expanded", "false");
|
|
149
149
|
}), a("sublinks are rendered inside the dropdown", () => {
|
|
150
150
|
o(/* @__PURE__ */ n(i, { items: y })), e(t.getByText("Widget")).toBeInTheDocument(), e(t.getByText("Gadget")).toBeInTheDocument();
|
|
151
151
|
}), a("sublinks have correct hrefs", () => {
|
|
@@ -156,7 +156,7 @@ c("Navbar", () => {
|
|
|
156
156
|
const r = d.fn();
|
|
157
157
|
o(/* @__PURE__ */ n(i, { items: [
|
|
158
158
|
{ _key: "click", label: "Click me", href: "#", onClick: r }
|
|
159
|
-
] })),
|
|
159
|
+
] })), m.click(t.getByText("Click me")), e(r).toHaveBeenCalledOnce();
|
|
160
160
|
});
|
|
161
161
|
}), c("Variant", () => {
|
|
162
162
|
a("applies standard variant class by default", () => {
|
|
@@ -218,16 +218,62 @@ c("Navbar", () => {
|
|
|
218
218
|
label: "Contact Us",
|
|
219
219
|
ariaLabel: "Contact Us",
|
|
220
220
|
variant: "primary",
|
|
221
|
-
modalPayload: {
|
|
221
|
+
modalPayload: {
|
|
222
|
+
heading: {
|
|
223
|
+
title: [
|
|
224
|
+
{
|
|
225
|
+
_type: "block",
|
|
226
|
+
_key: "cua",
|
|
227
|
+
children: [
|
|
228
|
+
{
|
|
229
|
+
_type: "span",
|
|
230
|
+
_key: "cub",
|
|
231
|
+
text: "Contact Us",
|
|
232
|
+
marks: []
|
|
233
|
+
}
|
|
234
|
+
],
|
|
235
|
+
markDefs: [],
|
|
236
|
+
style: "normal"
|
|
237
|
+
}
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
}
|
|
222
241
|
}
|
|
223
242
|
] }));
|
|
224
243
|
const l = t.getAllByRole("button", { name: "Contact Us" });
|
|
225
|
-
e(l.length).toBeGreaterThan(0), l.forEach((
|
|
244
|
+
e(l.length).toBeGreaterThan(0), l.forEach((u) => e(u.tagName).toBe("BUTTON"));
|
|
226
245
|
}), a("calls useModal open with correct payload when modal utility item is clicked", () => {
|
|
227
246
|
v.mockClear();
|
|
228
247
|
const r = {
|
|
229
|
-
heading:
|
|
230
|
-
|
|
248
|
+
heading: {
|
|
249
|
+
title: [
|
|
250
|
+
{
|
|
251
|
+
_type: "block",
|
|
252
|
+
_key: "cua",
|
|
253
|
+
children: [
|
|
254
|
+
{ _type: "span", _key: "cub", text: "Contact Us", marks: [] }
|
|
255
|
+
],
|
|
256
|
+
markDefs: [],
|
|
257
|
+
style: "normal"
|
|
258
|
+
}
|
|
259
|
+
]
|
|
260
|
+
},
|
|
261
|
+
formReference: {
|
|
262
|
+
_id: "form-1",
|
|
263
|
+
heading: {
|
|
264
|
+
title: [
|
|
265
|
+
{
|
|
266
|
+
_type: "block",
|
|
267
|
+
_key: "coa",
|
|
268
|
+
children: [
|
|
269
|
+
{ _type: "span", _key: "cob", text: "Contact", marks: [] }
|
|
270
|
+
],
|
|
271
|
+
markDefs: [],
|
|
272
|
+
style: "normal"
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
}
|
|
276
|
+
}
|
|
231
277
|
};
|
|
232
278
|
o(/* @__PURE__ */ n(i, { utilityItems: [
|
|
233
279
|
{
|
|
@@ -238,8 +284,8 @@ c("Navbar", () => {
|
|
|
238
284
|
modalPayload: r
|
|
239
285
|
}
|
|
240
286
|
] }));
|
|
241
|
-
const
|
|
242
|
-
|
|
287
|
+
const u = t.getAllByRole("button", { name: "Contact Us" });
|
|
288
|
+
m.click(u[0]), e(v).toHaveBeenCalledWith(r);
|
|
243
289
|
}), a("renders mixed link and modal utility items correctly", () => {
|
|
244
290
|
o(/* @__PURE__ */ n(i, { utilityItems: [
|
|
245
291
|
{
|
|
@@ -254,15 +300,29 @@ c("Navbar", () => {
|
|
|
254
300
|
label: "Contact Us",
|
|
255
301
|
ariaLabel: "Contact Us",
|
|
256
302
|
variant: "primary",
|
|
257
|
-
modalPayload: {
|
|
303
|
+
modalPayload: {
|
|
304
|
+
heading: {
|
|
305
|
+
title: [
|
|
306
|
+
{
|
|
307
|
+
_type: "block",
|
|
308
|
+
_key: "coa",
|
|
309
|
+
children: [
|
|
310
|
+
{ _type: "span", _key: "cob", text: "Contact", marks: [] }
|
|
311
|
+
],
|
|
312
|
+
markDefs: [],
|
|
313
|
+
style: "normal"
|
|
314
|
+
}
|
|
315
|
+
]
|
|
316
|
+
}
|
|
317
|
+
}
|
|
258
318
|
}
|
|
259
319
|
] }));
|
|
260
320
|
const l = t.getAllByRole("link", { name: "Log in" });
|
|
261
321
|
e(l.length).toBeGreaterThan(0);
|
|
262
|
-
const
|
|
322
|
+
const u = t.getAllByRole("button", {
|
|
263
323
|
name: "Contact Us"
|
|
264
324
|
});
|
|
265
|
-
e(
|
|
325
|
+
e(u.length).toBeGreaterThan(0);
|
|
266
326
|
});
|
|
267
327
|
}), c("Mobile menu toggle", () => {
|
|
268
328
|
a("renders toggle button", () => {
|
|
@@ -276,11 +336,11 @@ c("Navbar", () => {
|
|
|
276
336
|
}), a("opens menu on click", () => {
|
|
277
337
|
o(/* @__PURE__ */ n(i, { items: s }));
|
|
278
338
|
const r = t.getByRole("button", { name: /open menu/i });
|
|
279
|
-
|
|
339
|
+
m.click(r), e(r).toHaveAttribute("aria-expanded", "true");
|
|
280
340
|
}), a("closes menu on second click", () => {
|
|
281
341
|
o(/* @__PURE__ */ n(i, { items: s }));
|
|
282
342
|
const r = t.getByRole("button", { name: /open menu/i });
|
|
283
|
-
|
|
343
|
+
m.click(r), m.click(r), e(r).toHaveAttribute("aria-expanded", "false");
|
|
284
344
|
}), a("toggle has aria-controls pointing to main-menu", () => {
|
|
285
345
|
o(/* @__PURE__ */ n(i, { items: s })), e(
|
|
286
346
|
t.getByRole("button", { name: /open menu/i })
|
|
@@ -288,7 +348,7 @@ c("Navbar", () => {
|
|
|
288
348
|
}), a("aria-label changes to 'Close menu' when menu is open", () => {
|
|
289
349
|
o(/* @__PURE__ */ n(i, { items: s }));
|
|
290
350
|
const r = t.getByRole("button", { name: /open menu/i });
|
|
291
|
-
|
|
351
|
+
m.click(r), e(
|
|
292
352
|
t.getByRole("button", { name: /close menu/i })
|
|
293
353
|
).toBeInTheDocument();
|
|
294
354
|
});
|
|
@@ -367,7 +427,7 @@ c("Navbar", () => {
|
|
|
367
427
|
}), a("mouseenter on group wrapper opens the mega-menu (aria-expanded=true)", () => {
|
|
368
428
|
o(/* @__PURE__ */ n(i, { groups: g, navigationType: "advanced" }));
|
|
369
429
|
const r = t.getByRole("button", { name: /solutions/i });
|
|
370
|
-
|
|
430
|
+
m.mouseEnter(r.closest(".linkWrapper")), e(r).toHaveAttribute("aria-expanded", "true");
|
|
371
431
|
}), a("renders primary items inside the mega-menu", () => {
|
|
372
432
|
o(/* @__PURE__ */ n(i, { groups: g, navigationType: "advanced" })), e(t.getByText("Enterprise")).toBeInTheDocument(), e(t.getByText("Startup")).toBeInTheDocument();
|
|
373
433
|
}), a("primary items with href are rendered as links", () => {
|
|
@@ -377,16 +437,16 @@ c("Navbar", () => {
|
|
|
377
437
|
}), a("renders secondary items", () => {
|
|
378
438
|
o(/* @__PURE__ */ n(i, { groups: g, navigationType: "advanced" })), e(t.getByText("Case Studies")).toBeInTheDocument();
|
|
379
439
|
}), a("hovering a primary item with sublinks reveals column 2 children", () => {
|
|
380
|
-
o(/* @__PURE__ */ n(i, { groups: g, navigationType: "advanced" })),
|
|
440
|
+
o(/* @__PURE__ */ n(i, { groups: g, navigationType: "advanced" })), m.mouseEnter(t.getByText("Enterprise").closest("a")), e(t.getByText("SSO")).toBeInTheDocument(), e(t.getByText("Security")).toBeInTheDocument();
|
|
381
441
|
}), a("column 2 disappears after hovering a primary item without sublinks", () => {
|
|
382
|
-
o(/* @__PURE__ */ n(i, { groups: g, navigationType: "advanced" })),
|
|
442
|
+
o(/* @__PURE__ */ n(i, { groups: g, navigationType: "advanced" })), m.mouseEnter(t.getByText("Enterprise").closest("a")), e(t.getByText("SSO")).toBeInTheDocument(), m.mouseEnter(t.getByText("Startup").closest("a")), e(t.queryByText("SSO")).not.toBeInTheDocument();
|
|
383
443
|
}), a("mouseleave on submenu panel closes the mega-menu", () => {
|
|
384
444
|
const { container: r } = o(
|
|
385
445
|
/* @__PURE__ */ n(i, { groups: g, navigationType: "advanced" })
|
|
386
|
-
), l = t.getByRole("button", { name: /solutions/i }),
|
|
446
|
+
), l = t.getByRole("button", { name: /solutions/i }), u = l.closest(".linkWrapper"), h = r.querySelector(
|
|
387
447
|
"[aria-label='Solutions submenu']"
|
|
388
448
|
);
|
|
389
|
-
|
|
449
|
+
m.mouseEnter(u), e(l).toHaveAttribute("aria-expanded", "true"), m.mouseLeave(h), e(l).toHaveAttribute("aria-expanded", "false");
|
|
390
450
|
}), a("primary item click calls onClick and closes dropdown", () => {
|
|
391
451
|
const r = d.fn();
|
|
392
452
|
o(/* @__PURE__ */ n(i, { groups: [
|
|
@@ -397,7 +457,7 @@ c("Navbar", () => {
|
|
|
397
457
|
{ _key: "item1", label: "Clickable", href: "/dest", onClick: r }
|
|
398
458
|
]
|
|
399
459
|
}
|
|
400
|
-
], navigationType: "advanced" })),
|
|
460
|
+
], navigationType: "advanced" })), m.click(t.getByText("Clickable").closest("a")), e(r).toHaveBeenCalledOnce();
|
|
401
461
|
});
|
|
402
462
|
}), c("Spotlight card", () => {
|
|
403
463
|
const l = [
|
|
@@ -447,8 +507,8 @@ c("Navbar", () => {
|
|
|
447
507
|
}
|
|
448
508
|
}
|
|
449
509
|
], navigationType: "advanced" }));
|
|
450
|
-
const
|
|
451
|
-
e(
|
|
510
|
+
const k = t.getByRole("link", { name: /visit/i });
|
|
511
|
+
e(k).toHaveAttribute("href", "https://example.com"), e(k).toHaveAttribute("target", "_blank");
|
|
452
512
|
}), a("renders spotlight image when provided", () => {
|
|
453
513
|
p(), o(/* @__PURE__ */ n(i, { groups: [
|
|
454
514
|
{
|
|
@@ -480,7 +540,7 @@ c("Navbar", () => {
|
|
|
480
540
|
e(h).toBeInTheDocument(), e(h).toHaveAttribute("src", "/m.jpg");
|
|
481
541
|
}), a("renders nothing when callToAction is absent", () => {
|
|
482
542
|
p();
|
|
483
|
-
const
|
|
543
|
+
const u = [
|
|
484
544
|
{
|
|
485
545
|
_key: "g",
|
|
486
546
|
title: "No CTA",
|
|
@@ -489,14 +549,14 @@ c("Navbar", () => {
|
|
|
489
549
|
}
|
|
490
550
|
];
|
|
491
551
|
e(
|
|
492
|
-
() => o(/* @__PURE__ */ n(i, { groups:
|
|
552
|
+
() => o(/* @__PURE__ */ n(i, { groups: u, navigationType: "advanced" }))
|
|
493
553
|
).not.toThrow();
|
|
494
554
|
});
|
|
495
555
|
}), c("renderText prop", () => {
|
|
496
556
|
a("calls renderText for spotlight title when provided", () => {
|
|
497
557
|
p();
|
|
498
558
|
const r = d.fn(
|
|
499
|
-
(
|
|
559
|
+
(u) => typeof u == "string" ? /* @__PURE__ */ n("span", { children: u }) : null
|
|
500
560
|
);
|
|
501
561
|
o(
|
|
502
562
|
/* @__PURE__ */ n(
|
package/dist/core.d.ts
CHANGED
|
@@ -980,7 +980,12 @@ declare type ModalForm = {
|
|
|
980
980
|
identifier?: {
|
|
981
981
|
current: string;
|
|
982
982
|
};
|
|
983
|
-
heading
|
|
983
|
+
/** heading object matching FormBlock's heading prop shape */
|
|
984
|
+
heading?: {
|
|
985
|
+
eyebrow?: unknown[];
|
|
986
|
+
title?: unknown[];
|
|
987
|
+
description?: unknown[];
|
|
988
|
+
};
|
|
984
989
|
steps?: unknown[];
|
|
985
990
|
maxWidth?: string;
|
|
986
991
|
submitLabel?: string;
|
|
@@ -998,7 +1003,12 @@ declare type ModalForm = {
|
|
|
998
1003
|
|
|
999
1004
|
declare type ModalPayload = {
|
|
1000
1005
|
/** Optional heading shown at the top of the modal */
|
|
1001
|
-
heading
|
|
1006
|
+
/** heading object matching FormBlock's heading prop shape */
|
|
1007
|
+
heading?: {
|
|
1008
|
+
eyebrow?: unknown[];
|
|
1009
|
+
title?: unknown[];
|
|
1010
|
+
description?: unknown[];
|
|
1011
|
+
};
|
|
1002
1012
|
/** Optional rich text — renders above the form as a description/intro */
|
|
1003
1013
|
modalContent?: PortableTextBlock[];
|
|
1004
1014
|
/** Optional form document — renders a FormBlock inside the modal */
|
package/dist/main.d.ts
CHANGED
|
@@ -1229,7 +1229,12 @@ declare type ModalForm = {
|
|
|
1229
1229
|
identifier?: {
|
|
1230
1230
|
current: string;
|
|
1231
1231
|
};
|
|
1232
|
-
heading
|
|
1232
|
+
/** heading object matching FormBlock's heading prop shape */
|
|
1233
|
+
heading?: {
|
|
1234
|
+
eyebrow?: unknown[];
|
|
1235
|
+
title?: unknown[];
|
|
1236
|
+
description?: unknown[];
|
|
1237
|
+
};
|
|
1233
1238
|
steps?: unknown[];
|
|
1234
1239
|
maxWidth?: string;
|
|
1235
1240
|
submitLabel?: string;
|
|
@@ -1247,7 +1252,12 @@ declare type ModalForm = {
|
|
|
1247
1252
|
|
|
1248
1253
|
declare type ModalPayload = {
|
|
1249
1254
|
/** Optional heading shown at the top of the modal */
|
|
1250
|
-
heading
|
|
1255
|
+
/** heading object matching FormBlock's heading prop shape */
|
|
1256
|
+
heading?: {
|
|
1257
|
+
eyebrow?: unknown[];
|
|
1258
|
+
title?: unknown[];
|
|
1259
|
+
description?: unknown[];
|
|
1260
|
+
};
|
|
1251
1261
|
/** Optional rich text — renders above the form as a description/intro */
|
|
1252
1262
|
modalContent?: PortableTextBlock[];
|
|
1253
1263
|
/** Optional form document — renders a FormBlock inside the modal */
|