quirk-ui 0.1.175 → 0.1.176
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 +165 -198
- package/dist/core/components/NavBar/NavBar.test.cjs +1 -1
- package/dist/core/components/NavBar/NavBar.test.mjs +40 -42
- package/dist/core.d.ts +0 -7
- package/dist/main.d.ts +0 -7
- package/dist/next/ui/CallToAction/index.cjs +1 -1
- package/dist/next/ui/CallToAction/index.mjs +35 -36
- 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:{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
|
+
"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:{formReference:{_id:"form-modal",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={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:{formReference:{_id:"form-disabled"}},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:{formReference:{_id:"form-disabled"}},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,106 +1,106 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { v as d, d as
|
|
1
|
+
import { jsx as o, jsxs as u } from "react/jsx-runtime";
|
|
2
|
+
import { v as d, d as l, i as a, r as n, s as i, 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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const t =
|
|
9
|
+
l("Button", () => {
|
|
10
|
+
l("Rendering as button", () => {
|
|
11
|
+
a("renders as a button by default", () => {
|
|
12
|
+
n(/* @__PURE__ */ o(r, { variant: "primary", children: "Click Me" }));
|
|
13
|
+
const t = i.getByRole("button", { name: "Click Me" });
|
|
14
14
|
e(t).toBeInTheDocument(), e(t.tagName).toBe("BUTTON");
|
|
15
|
-
}),
|
|
16
|
-
|
|
17
|
-
/* @__PURE__ */
|
|
15
|
+
}), a("renders as a button when 'as' is set to 'button'", () => {
|
|
16
|
+
n(
|
|
17
|
+
/* @__PURE__ */ o(r, { as: "button", variant: "primary", children: "Click Me" })
|
|
18
18
|
);
|
|
19
|
-
const t =
|
|
19
|
+
const t = i.getByRole("button", { name: "Click Me" });
|
|
20
20
|
e(t).toBeInTheDocument(), e(t).toHaveClass("button", "primary");
|
|
21
|
-
}),
|
|
22
|
-
|
|
23
|
-
const t =
|
|
21
|
+
}), a("has type='button' by default", () => {
|
|
22
|
+
n(/* @__PURE__ */ o(r, { variant: "primary", children: "Click Me" }));
|
|
23
|
+
const t = i.getByRole("button");
|
|
24
24
|
e(t).toHaveAttribute("type", "button");
|
|
25
|
-
}),
|
|
26
|
-
|
|
27
|
-
/* @__PURE__ */
|
|
25
|
+
}), a("respects the disabled prop on buttons", () => {
|
|
26
|
+
n(
|
|
27
|
+
/* @__PURE__ */ o(r, { as: "button", variant: "primary", disabled: !0, children: "Disabled" })
|
|
28
28
|
);
|
|
29
|
-
const t =
|
|
29
|
+
const t = i.getByRole("button", { name: "Disabled" });
|
|
30
30
|
e(t).toBeDisabled();
|
|
31
|
-
}),
|
|
31
|
+
}), a("calls onClick when clicked", () => {
|
|
32
32
|
const t = d.fn();
|
|
33
|
-
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
-
), c.click(
|
|
36
|
-
}),
|
|
33
|
+
n(
|
|
34
|
+
/* @__PURE__ */ o(r, { variant: "primary", onClick: t, children: "Click Me" })
|
|
35
|
+
), c.click(i.getByRole("button")), e(t).toHaveBeenCalledTimes(1);
|
|
36
|
+
}), a("does not call onClick when disabled", () => {
|
|
37
37
|
const t = d.fn();
|
|
38
|
-
|
|
39
|
-
/* @__PURE__ */
|
|
40
|
-
), c.click(
|
|
38
|
+
n(
|
|
39
|
+
/* @__PURE__ */ o(r, { variant: "primary", onClick: t, disabled: !0, children: "Disabled" })
|
|
40
|
+
), c.click(i.getByRole("button")), e(t).not.toHaveBeenCalled();
|
|
41
41
|
});
|
|
42
|
-
}),
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
/* @__PURE__ */
|
|
42
|
+
}), l("Rendering as anchor", () => {
|
|
43
|
+
a("renders as an anchor when 'as' is set to 'a'", () => {
|
|
44
|
+
n(
|
|
45
|
+
/* @__PURE__ */ o(r, { as: "a", href: "/test", variant: "link", children: "Click Me" })
|
|
46
46
|
);
|
|
47
|
-
const t =
|
|
47
|
+
const t = i.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
|
-
}),
|
|
50
|
-
|
|
51
|
-
/* @__PURE__ */
|
|
52
|
-
), e(
|
|
49
|
+
}), a("adds rel='noopener noreferrer' when target is '_blank'", () => {
|
|
50
|
+
n(
|
|
51
|
+
/* @__PURE__ */ o(r, { as: "a", href: "/test", target: "_blank", variant: "link", children: "External" })
|
|
52
|
+
), e(i.getByRole("link", { name: "External" })).toHaveAttribute(
|
|
53
53
|
"rel",
|
|
54
54
|
"noopener noreferrer"
|
|
55
55
|
);
|
|
56
|
-
}),
|
|
57
|
-
|
|
58
|
-
/* @__PURE__ */
|
|
59
|
-
), e(
|
|
56
|
+
}), a("preserves custom rel attribute and adds security", () => {
|
|
57
|
+
n(
|
|
58
|
+
/* @__PURE__ */ o(r, { as: "a", href: "/test", target: "_blank", rel: "author", variant: "link", children: "External" })
|
|
59
|
+
), e(i.getByRole("link")).toHaveAttribute(
|
|
60
60
|
"rel",
|
|
61
61
|
"author noopener noreferrer"
|
|
62
62
|
);
|
|
63
|
-
}),
|
|
64
|
-
|
|
65
|
-
/* @__PURE__ */
|
|
66
|
-
), e(
|
|
67
|
-
}),
|
|
68
|
-
|
|
69
|
-
/* @__PURE__ */
|
|
70
|
-
), e(
|
|
63
|
+
}), a("does not add security rel for internal links", () => {
|
|
64
|
+
n(
|
|
65
|
+
/* @__PURE__ */ o(r, { as: "a", href: "/test", variant: "link", children: "Internal" })
|
|
66
|
+
), e(i.getByRole("link")).not.toHaveAttribute("rel");
|
|
67
|
+
}), a("adds aria-disabled when disabled", () => {
|
|
68
|
+
n(
|
|
69
|
+
/* @__PURE__ */ o(r, { as: "a", href: "/test", variant: "link", disabled: !0, children: "Disabled Link" })
|
|
70
|
+
), e(i.getByRole("link")).toHaveAttribute("aria-disabled", "true");
|
|
71
71
|
});
|
|
72
|
-
}),
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
/* @__PURE__ */
|
|
72
|
+
}), l("Scroll button", () => {
|
|
73
|
+
a("renders as a scroll button when 'as' is set to 'scroll'", () => {
|
|
74
|
+
n(
|
|
75
|
+
/* @__PURE__ */ o(r, { as: "scroll", scrollTarget: "section-1", variant: "primary", children: "Scroll Down" })
|
|
76
76
|
), e(
|
|
77
|
-
|
|
77
|
+
i.getByRole("button", { name: "Scroll to section-1" })
|
|
78
78
|
).toBeInTheDocument();
|
|
79
|
-
}),
|
|
80
|
-
|
|
81
|
-
/* @__PURE__ */
|
|
82
|
-
), e(
|
|
79
|
+
}), a("has proper aria-label for scroll button", () => {
|
|
80
|
+
n(
|
|
81
|
+
/* @__PURE__ */ o(r, { as: "scroll", scrollTarget: "footer", variant: "primary", children: "To Footer" })
|
|
82
|
+
), e(i.getByRole("button")).toHaveAttribute(
|
|
83
83
|
"aria-label",
|
|
84
84
|
"Scroll to footer"
|
|
85
85
|
);
|
|
86
|
-
}),
|
|
86
|
+
}), a("scrolls to target element when clicked", () => {
|
|
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, n(
|
|
91
|
+
/* @__PURE__ */ o(r, { as: "scroll", scrollTarget: "target-section", variant: "primary", children: "Scroll" })
|
|
92
|
+
), c.click(i.getByRole("button")), e(s).toHaveBeenCalledWith({
|
|
93
93
|
behavior: "smooth",
|
|
94
94
|
block: "start"
|
|
95
95
|
}), document.body.removeChild(t);
|
|
96
|
-
}),
|
|
96
|
+
}), a("uses scrollTo with offset when scrollOffset is set", () => {
|
|
97
97
|
const t = document.createElement("div");
|
|
98
98
|
t.id = "offset-section", document.body.appendChild(t);
|
|
99
99
|
const s = d.fn();
|
|
100
100
|
window.scrollTo = s, d.spyOn(t, "getBoundingClientRect").mockReturnValue({
|
|
101
101
|
top: 200
|
|
102
|
-
}),
|
|
103
|
-
/* @__PURE__ */
|
|
102
|
+
}), n(
|
|
103
|
+
/* @__PURE__ */ o(
|
|
104
104
|
r,
|
|
105
105
|
{
|
|
106
106
|
as: "scroll",
|
|
@@ -110,35 +110,43 @@ i("Button", () => {
|
|
|
110
110
|
children: "Scroll"
|
|
111
111
|
}
|
|
112
112
|
)
|
|
113
|
-
), c.click(
|
|
113
|
+
), c.click(i.getByRole("button")), e(s).toHaveBeenCalledWith({
|
|
114
114
|
top: e.any(Number),
|
|
115
115
|
behavior: "smooth"
|
|
116
116
|
}), document.body.removeChild(t);
|
|
117
|
-
}),
|
|
118
|
-
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
-
), e(() => c.click(
|
|
117
|
+
}), a("does not error if scroll target does not exist", () => {
|
|
118
|
+
n(
|
|
119
|
+
/* @__PURE__ */ o(r, { as: "scroll", scrollTarget: "non-existent", variant: "primary", children: "Scroll" })
|
|
120
|
+
), e(() => c.click(i.getByRole("button"))).not.toThrow();
|
|
121
121
|
});
|
|
122
|
-
}),
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
/* @__PURE__ */
|
|
122
|
+
}), l("Modal button", () => {
|
|
123
|
+
a("renders as a button when 'as' is set to 'modal'", () => {
|
|
124
|
+
n(
|
|
125
|
+
/* @__PURE__ */ o(
|
|
126
126
|
r,
|
|
127
127
|
{
|
|
128
128
|
as: "modal",
|
|
129
129
|
modalPayload: {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
130
|
+
formReference: {
|
|
131
|
+
_id: "form-modal",
|
|
132
|
+
heading: {
|
|
133
|
+
title: [
|
|
134
|
+
{
|
|
135
|
+
_type: "block",
|
|
136
|
+
_key: "a",
|
|
137
|
+
children: [
|
|
138
|
+
{
|
|
139
|
+
_type: "span",
|
|
140
|
+
_key: "b",
|
|
141
|
+
text: "Contact Us",
|
|
142
|
+
marks: []
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
markDefs: [],
|
|
146
|
+
style: "normal"
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
}
|
|
142
150
|
}
|
|
143
151
|
},
|
|
144
152
|
variant: "primary",
|
|
@@ -146,23 +154,10 @@ i("Button", () => {
|
|
|
146
154
|
}
|
|
147
155
|
)
|
|
148
156
|
), e(
|
|
149
|
-
|
|
157
|
+
i.getByRole("button", { name: "Open Modal" })
|
|
150
158
|
).toBeInTheDocument();
|
|
151
|
-
}),
|
|
159
|
+
}), a("calls useModal open with the payload when clicked", () => {
|
|
152
160
|
const t = {
|
|
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
161
|
formReference: {
|
|
167
162
|
_id: "form-123",
|
|
168
163
|
heading: {
|
|
@@ -180,65 +175,37 @@ i("Button", () => {
|
|
|
180
175
|
}
|
|
181
176
|
}
|
|
182
177
|
};
|
|
183
|
-
|
|
184
|
-
/* @__PURE__ */
|
|
185
|
-
), c.click(
|
|
186
|
-
}),
|
|
187
|
-
|
|
188
|
-
/* @__PURE__ */
|
|
178
|
+
n(
|
|
179
|
+
/* @__PURE__ */ o(r, { as: "modal", modalPayload: t, variant: "primary", children: "Open Form" })
|
|
180
|
+
), c.click(i.getByRole("button", { name: "Open Form" })), e(m).toHaveBeenCalledWith(t);
|
|
181
|
+
}), a("is disabled when disabled prop is set", () => {
|
|
182
|
+
n(
|
|
183
|
+
/* @__PURE__ */ o(
|
|
189
184
|
r,
|
|
190
185
|
{
|
|
191
186
|
as: "modal",
|
|
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
|
-
},
|
|
187
|
+
modalPayload: { formReference: { _id: "form-disabled" } },
|
|
207
188
|
variant: "primary",
|
|
208
189
|
disabled: !0,
|
|
209
190
|
children: "Disabled Modal"
|
|
210
191
|
}
|
|
211
192
|
)
|
|
212
|
-
), e(
|
|
213
|
-
}),
|
|
214
|
-
m.mockClear(),
|
|
215
|
-
/* @__PURE__ */
|
|
193
|
+
), e(i.getByRole("button")).toBeDisabled();
|
|
194
|
+
}), a("does not call open when disabled", () => {
|
|
195
|
+
m.mockClear(), n(
|
|
196
|
+
/* @__PURE__ */ o(
|
|
216
197
|
r,
|
|
217
198
|
{
|
|
218
199
|
as: "modal",
|
|
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
|
-
},
|
|
200
|
+
modalPayload: { formReference: { _id: "form-disabled" } },
|
|
234
201
|
variant: "primary",
|
|
235
202
|
disabled: !0,
|
|
236
203
|
children: "Disabled"
|
|
237
204
|
}
|
|
238
205
|
)
|
|
239
|
-
), c.click(
|
|
206
|
+
), c.click(i.getByRole("button")), e(m).not.toHaveBeenCalled();
|
|
240
207
|
});
|
|
241
|
-
}),
|
|
208
|
+
}), l("Variants", () => {
|
|
242
209
|
[
|
|
243
210
|
"primary",
|
|
244
211
|
"primaryInverted",
|
|
@@ -251,41 +218,41 @@ i("Button", () => {
|
|
|
251
218
|
"blurred",
|
|
252
219
|
"blurredInverted"
|
|
253
220
|
].forEach((s) => {
|
|
254
|
-
|
|
255
|
-
|
|
221
|
+
a(`applies ${s} variant class`, () => {
|
|
222
|
+
n(/* @__PURE__ */ o(r, { variant: s, children: "Button" })), e(i.getByRole("button")).toHaveClass(s);
|
|
256
223
|
});
|
|
257
|
-
}),
|
|
258
|
-
|
|
224
|
+
}), a("uses primary variant by default", () => {
|
|
225
|
+
n(/* @__PURE__ */ o(r, { children: "Default" })), e(i.getByRole("button")).toHaveClass("primary");
|
|
259
226
|
});
|
|
260
|
-
}),
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
/* @__PURE__ */
|
|
227
|
+
}), l("Icons", () => {
|
|
228
|
+
a("includes icon when icon prop is provided", () => {
|
|
229
|
+
n(
|
|
230
|
+
/* @__PURE__ */ o(r, { variant: "primary", icon: "arrow-right", children: "Next" })
|
|
264
231
|
), e(document.querySelector(".icon")).toBeInTheDocument(), e(document.querySelector(".icon svg")).toBeInTheDocument();
|
|
265
|
-
}),
|
|
266
|
-
|
|
267
|
-
/* @__PURE__ */
|
|
232
|
+
}), a("places icon on the left when iconAlignment is 'left'", () => {
|
|
233
|
+
n(
|
|
234
|
+
/* @__PURE__ */ o(r, { variant: "primary", icon: "arrow-left", iconAlignment: "left", children: "Back" })
|
|
268
235
|
), e(document.querySelector(".content")).toHaveClass("iconLeft");
|
|
269
|
-
}),
|
|
270
|
-
|
|
271
|
-
/* @__PURE__ */
|
|
236
|
+
}), a("places icon on the right when iconAlignment is 'right'", () => {
|
|
237
|
+
n(
|
|
238
|
+
/* @__PURE__ */ o(r, { variant: "primary", icon: "arrow-right", iconAlignment: "right", children: "Next" })
|
|
272
239
|
), e(document.querySelector(".content")).toHaveClass("iconRight");
|
|
273
|
-
}),
|
|
274
|
-
|
|
275
|
-
/* @__PURE__ */
|
|
240
|
+
}), a("uses right alignment by default", () => {
|
|
241
|
+
n(
|
|
242
|
+
/* @__PURE__ */ o(r, { variant: "primary", icon: "arrow-right", children: "Default Icon" })
|
|
276
243
|
), e(document.querySelector(".content")).toHaveClass("iconRight");
|
|
277
|
-
}),
|
|
278
|
-
|
|
279
|
-
/* @__PURE__ */
|
|
244
|
+
}), a("icon has aria-hidden attribute", () => {
|
|
245
|
+
n(
|
|
246
|
+
/* @__PURE__ */ o(r, { variant: "primary", icon: "settings", children: "Settings" })
|
|
280
247
|
), e(document.querySelector(".icon")).toHaveAttribute(
|
|
281
248
|
"aria-hidden",
|
|
282
249
|
"true"
|
|
283
250
|
);
|
|
284
251
|
});
|
|
285
|
-
}),
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
/* @__PURE__ */
|
|
252
|
+
}), l("Image display", () => {
|
|
253
|
+
a("renders image when displayType is 'image' and imageSrc is provided", () => {
|
|
254
|
+
n(
|
|
255
|
+
/* @__PURE__ */ o(
|
|
289
256
|
r,
|
|
290
257
|
{
|
|
291
258
|
variant: "primary",
|
|
@@ -298,43 +265,43 @@ i("Button", () => {
|
|
|
298
265
|
);
|
|
299
266
|
const t = document.querySelector("img");
|
|
300
267
|
e(t).toHaveAttribute("src", "/logo.png"), e(t).toHaveAttribute("alt", "Company Logo");
|
|
301
|
-
}),
|
|
302
|
-
|
|
303
|
-
/* @__PURE__ */
|
|
268
|
+
}), a("renders ImageComponent when provided", () => {
|
|
269
|
+
n(
|
|
270
|
+
/* @__PURE__ */ o(
|
|
304
271
|
r,
|
|
305
272
|
{
|
|
306
273
|
variant: "primary",
|
|
307
274
|
displayType: "image",
|
|
308
|
-
ImageComponent: /* @__PURE__ */
|
|
275
|
+
ImageComponent: /* @__PURE__ */ o(() => /* @__PURE__ */ o("div", { "data-testid": "custom-image", children: "Custom" }), {}),
|
|
309
276
|
children: "Text"
|
|
310
277
|
}
|
|
311
278
|
)
|
|
312
|
-
), e(
|
|
313
|
-
}),
|
|
314
|
-
|
|
315
|
-
/* @__PURE__ */
|
|
279
|
+
), e(i.getByTestId("custom-image")).toBeInTheDocument();
|
|
280
|
+
}), a("applies image class when displayType is image", () => {
|
|
281
|
+
n(
|
|
282
|
+
/* @__PURE__ */ o(r, { variant: "primary", displayType: "image", imageSrc: "/logo.png", children: "Text" })
|
|
316
283
|
);
|
|
317
|
-
const t =
|
|
284
|
+
const t = i.getByRole("button");
|
|
318
285
|
e(t).toHaveClass("image"), e(t).not.toHaveClass("primary");
|
|
319
286
|
});
|
|
320
|
-
}),
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
/* @__PURE__ */
|
|
287
|
+
}), l("Custom className", () => {
|
|
288
|
+
a("applies custom className", () => {
|
|
289
|
+
n(
|
|
290
|
+
/* @__PURE__ */ o(r, { variant: "primary", className: "custom-button", children: "Custom" })
|
|
324
291
|
);
|
|
325
|
-
const t =
|
|
292
|
+
const t = i.getByRole("button");
|
|
326
293
|
e(t).toHaveClass("custom-button", "button", "primary");
|
|
327
294
|
});
|
|
328
|
-
}),
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
}),
|
|
332
|
-
|
|
333
|
-
/* @__PURE__ */
|
|
334
|
-
), e(
|
|
335
|
-
}),
|
|
336
|
-
|
|
337
|
-
/* @__PURE__ */
|
|
295
|
+
}), l("Accessibility", () => {
|
|
296
|
+
a("has button role for button element", () => {
|
|
297
|
+
n(/* @__PURE__ */ o(r, { variant: "primary", children: "Click" })), e(i.getByRole("button")).toBeInTheDocument();
|
|
298
|
+
}), a("has link role for anchor element", () => {
|
|
299
|
+
n(
|
|
300
|
+
/* @__PURE__ */ o(r, { as: "a", href: "/test", variant: "link", children: "Link" })
|
|
301
|
+
), e(i.getByRole("link")).toBeInTheDocument();
|
|
302
|
+
}), a("supports aria attributes", () => {
|
|
303
|
+
n(
|
|
304
|
+
/* @__PURE__ */ o(
|
|
338
305
|
r,
|
|
339
306
|
{
|
|
340
307
|
variant: "primary",
|
|
@@ -344,19 +311,19 @@ i("Button", () => {
|
|
|
344
311
|
}
|
|
345
312
|
)
|
|
346
313
|
);
|
|
347
|
-
const t =
|
|
314
|
+
const t = i.getByRole("button");
|
|
348
315
|
e(t).toHaveAttribute("aria-label", "Custom Label"), e(t).toHaveAttribute("aria-describedby", "desc");
|
|
349
316
|
});
|
|
350
|
-
}),
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
}),
|
|
354
|
-
|
|
317
|
+
}), l("Edge cases", () => {
|
|
318
|
+
a("handles undefined variant", () => {
|
|
319
|
+
n(/* @__PURE__ */ o(r, { variant: void 0, children: "No Variant" })), e(i.getByRole("button")).toHaveClass("button");
|
|
320
|
+
}), a("handles complex children", () => {
|
|
321
|
+
n(
|
|
355
322
|
/* @__PURE__ */ u(r, { variant: "primary", children: [
|
|
356
|
-
/* @__PURE__ */
|
|
357
|
-
/* @__PURE__ */
|
|
323
|
+
/* @__PURE__ */ o("span", { children: "Complex" }),
|
|
324
|
+
/* @__PURE__ */ o("strong", { children: "Children" })
|
|
358
325
|
] })
|
|
359
|
-
), e(
|
|
326
|
+
), e(i.getByText("Complex")).toBeInTheDocument(), e(i.getByText("Children")).toBeInTheDocument();
|
|
360
327
|
});
|
|
361
328
|
});
|
|
362
329
|
});
|
|
@@ -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:{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
|
+
"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:{formReference:{_id:"form-contact",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={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:{formReference:{_id:"form-contact-2",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))})})});
|
|
@@ -219,23 +219,26 @@ c("Navbar", () => {
|
|
|
219
219
|
ariaLabel: "Contact Us",
|
|
220
220
|
variant: "primary",
|
|
221
221
|
modalPayload: {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
222
|
+
formReference: {
|
|
223
|
+
_id: "form-contact",
|
|
224
|
+
heading: {
|
|
225
|
+
title: [
|
|
226
|
+
{
|
|
227
|
+
_type: "block",
|
|
228
|
+
_key: "cua",
|
|
229
|
+
children: [
|
|
230
|
+
{
|
|
231
|
+
_type: "span",
|
|
232
|
+
_key: "cub",
|
|
233
|
+
text: "Contact Us",
|
|
234
|
+
marks: []
|
|
235
|
+
}
|
|
236
|
+
],
|
|
237
|
+
markDefs: [],
|
|
238
|
+
style: "normal"
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
}
|
|
239
242
|
}
|
|
240
243
|
}
|
|
241
244
|
}
|
|
@@ -245,19 +248,6 @@ c("Navbar", () => {
|
|
|
245
248
|
}), a("calls useModal open with correct payload when modal utility item is clicked", () => {
|
|
246
249
|
v.mockClear();
|
|
247
250
|
const r = {
|
|
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
251
|
formReference: {
|
|
262
252
|
_id: "form-1",
|
|
263
253
|
heading: {
|
|
@@ -301,18 +291,26 @@ c("Navbar", () => {
|
|
|
301
291
|
ariaLabel: "Contact Us",
|
|
302
292
|
variant: "primary",
|
|
303
293
|
modalPayload: {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
294
|
+
formReference: {
|
|
295
|
+
_id: "form-contact-2",
|
|
296
|
+
heading: {
|
|
297
|
+
title: [
|
|
298
|
+
{
|
|
299
|
+
_type: "block",
|
|
300
|
+
_key: "coa",
|
|
301
|
+
children: [
|
|
302
|
+
{
|
|
303
|
+
_type: "span",
|
|
304
|
+
_key: "cob",
|
|
305
|
+
text: "Contact",
|
|
306
|
+
marks: []
|
|
307
|
+
}
|
|
308
|
+
],
|
|
309
|
+
markDefs: [],
|
|
310
|
+
style: "normal"
|
|
311
|
+
}
|
|
312
|
+
]
|
|
313
|
+
}
|
|
316
314
|
}
|
|
317
315
|
}
|
|
318
316
|
}
|
package/dist/core.d.ts
CHANGED
|
@@ -1002,13 +1002,6 @@ declare type ModalForm = {
|
|
|
1002
1002
|
};
|
|
1003
1003
|
|
|
1004
1004
|
declare type ModalPayload = {
|
|
1005
|
-
/** Optional heading shown at the top of the modal */
|
|
1006
|
-
/** heading object matching FormBlock's heading prop shape */
|
|
1007
|
-
heading?: {
|
|
1008
|
-
eyebrow?: unknown[];
|
|
1009
|
-
title?: unknown[];
|
|
1010
|
-
description?: unknown[];
|
|
1011
|
-
};
|
|
1012
1005
|
/** Optional rich text — renders above the form as a description/intro */
|
|
1013
1006
|
modalContent?: PortableTextBlock[];
|
|
1014
1007
|
/** Optional form document — renders a FormBlock inside the modal */
|
package/dist/main.d.ts
CHANGED
|
@@ -1251,13 +1251,6 @@ declare type ModalForm = {
|
|
|
1251
1251
|
};
|
|
1252
1252
|
|
|
1253
1253
|
declare type ModalPayload = {
|
|
1254
|
-
/** Optional heading shown at the top of the modal */
|
|
1255
|
-
/** heading object matching FormBlock's heading prop shape */
|
|
1256
|
-
heading?: {
|
|
1257
|
-
eyebrow?: unknown[];
|
|
1258
|
-
title?: unknown[];
|
|
1259
|
-
description?: unknown[];
|
|
1260
|
-
};
|
|
1261
1254
|
/** Optional rich text — renders above the form as a description/intro */
|
|
1262
1255
|
modalContent?: PortableTextBlock[];
|
|
1263
1256
|
/** Optional form document — renders a FormBlock inside the modal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),U=require("react"),B=require("next/image"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),U=require("react"),B=require("next/image"),z=require("../../../core/components/ButtonGroup/index.cjs"),l=require("../../../index-0SVQqhAg.cjs"),G=require("../../../core/components/Modal/index.cjs"),C=require("../../utils/resolveLinkUrl.cjs"),H=require("../../../core/context/ThemeContext.cjs"),Q=require("../../hooks/useMediaQuery.cjs");function W({items:r,alignment:I,spacing:R,mobileOrientation:M="column",className:O}){const[P,S]=U.useState([]),{mode:t}=H.useTheme(),m=Q.useMediaQuery("(max-width: 767px)");return U.useEffect(()=>{if(!(r!=null&&r.length)||!C.resolveLinkURL)return;async function e(){const o=await Promise.all(r.map(a=>C.resolveLinkURL(a)));S(o)}e()},[r]),r!=null&&r.length?n.jsx(z.ButtonGroup,{className:O,alignment:I,spacing:R,mobileOrientation:M,children:r.slice(0,3).map((e,o)=>{var g,d,p,c,f,h,b,y,v,x,_,k,j,T,A,w,q,L;const a=P[o]??"#",i={};if(i.height="auto",((g=e.image)==null?void 0:g.layout)==="cover")i.objectFit="cover",(d=e.image)!=null&&d.position&&(i.objectPosition=m?"top":(p=e.image)==null?void 0:p.position);else if(((c=e.image)==null?void 0:c.layout)==="contain"){if(i.objectFit="contain",((f=e.image)==null?void 0:f.sizing)==="half"?i.width=m?"100%":"50%":((h=e.image)==null?void 0:h.sizing)==="inset"?(i.width="100%",i.maxWidth=e.image.maxWidth??"unset"):i.width="100%",(b=e.image)!=null&&b.aspectRatio){const[$,F]=(y=e.image)==null?void 0:y.aspectRatio.split(":").map(Number);i.aspectRatio=`${$}/${F}`}}else i.objectFit="none";let s;(v=e.image)!=null&&v.imageUrls&&(s=t==="dark"&&((x=e.image.imageUrls.dark)==null?void 0:x.medium)||e.image.imageUrls.default.medium);let u=((j=(k=(_=e.image)==null?void 0:_[t==="dark"?"darkImage":"defaultImage"])==null?void 0:k.asset)==null?void 0:j.altText)||((w=(A=(T=e.image)==null?void 0:T[t==="dark"?"darkImage":"defaultImage"])==null?void 0:A.asset)==null?void 0:w.description)||"Card image";switch(e.type){case"link":return n.jsx(l.Button,{as:"a",variant:e.variant,href:a,target:((q=e.linkOptions)==null?void 0:q.linkType)==="external"?"_blank":"_self",rel:((L=e.linkOptions)==null?void 0:L.linkType)==="external"?"noopener noreferrer":"","aria-label":e.ariaLabel||e.label,icon:e.icon,iconAlignment:e.iconAlignment??"right",displayType:e.displayType,ImageComponent:n.jsx(B,{src:s??"",alt:u,width:600,height:658,priority:!1,style:i}),children:e.label},o);case"scroll":return n.jsx(l.Button,{as:"scroll",variant:e.variant,scrollTarget:e.scrollTarget??"","aria-label":e.ariaLabel||e.label,icon:e.icon,iconAlignment:e.iconAlignment??"right",displayType:e.displayType,scrollOffset:e.scrollOffset,ImageComponent:n.jsx(B,{src:s??"",alt:u,width:600,height:658,priority:!1,style:i}),children:e.label},o);case"modal":return n.jsx(l.Button,{as:"modal",variant:e.variant??"primary",icon:e.icon,iconAlignment:e.iconAlignment??"right","aria-label":e.ariaLabel||e.label,modalPayload:{formReference:e.formReference,modalContent:e.modalContent},children:e.label??"Open"},o);case"video":return n.jsx(G.Modal,{trigger:n.jsx(l.Button,{as:"button",variant:e.variant??"primary",icon:e.icon,iconAlignment:e.iconAlignment??"right","aria-label":e.ariaLabel||e.label,children:e.label}),content:n.jsx("video",{src:e.videoUrl,controls:!0,autoPlay:!0})},o);case"download":return n.jsx(l.Button,{as:"a",variant:e.variant??"primary",href:a,download:!0,target:"_blank",rel:"noopener noreferrer","aria-label":e.ariaLabel||e.label,icon:e.icon,iconAlignment:e.iconAlignment??"right",children:e.label},o)}})}):null}exports.CallToAction=W;
|
|
@@ -1,51 +1,51 @@
|
|
|
1
1
|
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
-
import { useState as
|
|
3
|
-
import
|
|
4
|
-
import { ButtonGroup as
|
|
2
|
+
import { useState as S, useEffect as W } from "react";
|
|
3
|
+
import j from "next/image";
|
|
4
|
+
import { ButtonGroup as $ } from "../../../core/components/ButtonGroup/index.mjs";
|
|
5
5
|
import { B as o } from "../../../index-aWdsapYP.js";
|
|
6
|
-
import { Modal as
|
|
7
|
-
import { resolveLinkURL as
|
|
8
|
-
import { useTheme as
|
|
9
|
-
import { useMediaQuery as
|
|
10
|
-
function
|
|
6
|
+
import { Modal as E } from "../../../core/components/Modal/index.mjs";
|
|
7
|
+
import { resolveLinkURL as x } from "../../utils/resolveLinkUrl.mjs";
|
|
8
|
+
import { useTheme as G } from "../../../core/context/ThemeContext.mjs";
|
|
9
|
+
import { useMediaQuery as N } from "../../hooks/useMediaQuery.mjs";
|
|
10
|
+
function ee({
|
|
11
11
|
items: l,
|
|
12
|
-
alignment:
|
|
13
|
-
spacing:
|
|
14
|
-
mobileOrientation:
|
|
15
|
-
className:
|
|
12
|
+
alignment: O,
|
|
13
|
+
spacing: P,
|
|
14
|
+
mobileOrientation: B = "column",
|
|
15
|
+
className: F
|
|
16
16
|
}) {
|
|
17
|
-
const [
|
|
18
|
-
return
|
|
19
|
-
if (!(l != null && l.length) || !
|
|
17
|
+
const [M, _] = S([]), { mode: t } = G(), s = N("(max-width: 767px)");
|
|
18
|
+
return W(() => {
|
|
19
|
+
if (!(l != null && l.length) || !x) return;
|
|
20
20
|
async function e() {
|
|
21
21
|
const n = await Promise.all(
|
|
22
|
-
l.map((a) =>
|
|
22
|
+
l.map((a) => x(a))
|
|
23
23
|
);
|
|
24
|
-
|
|
24
|
+
_(n);
|
|
25
25
|
}
|
|
26
26
|
e();
|
|
27
27
|
}, [l]), l != null && l.length ? /* @__PURE__ */ r(
|
|
28
|
-
|
|
28
|
+
$,
|
|
29
29
|
{
|
|
30
|
-
className:
|
|
31
|
-
alignment:
|
|
32
|
-
spacing:
|
|
33
|
-
mobileOrientation:
|
|
30
|
+
className: F,
|
|
31
|
+
alignment: O,
|
|
32
|
+
spacing: P,
|
|
33
|
+
mobileOrientation: B,
|
|
34
34
|
children: l.slice(0, 3).map((e, n) => {
|
|
35
|
-
var d, f,
|
|
36
|
-
const a =
|
|
37
|
-
if (i.height = "auto", ((
|
|
38
|
-
i.objectFit = "cover", (
|
|
35
|
+
var p, d, f, u, h, b, y, c, v, k, A, T, w, I, L, U, C, R;
|
|
36
|
+
const a = M[n] ?? "#", i = {};
|
|
37
|
+
if (i.height = "auto", ((p = e.image) == null ? void 0 : p.layout) === "cover")
|
|
38
|
+
i.objectFit = "cover", (d = e.image) != null && d.position && (i.objectPosition = s ? "top" : (f = e.image) == null ? void 0 : f.position);
|
|
39
39
|
else if (((u = e.image) == null ? void 0 : u.layout) === "contain") {
|
|
40
40
|
if (i.objectFit = "contain", ((h = e.image) == null ? void 0 : h.sizing) === "half" ? i.width = s ? "100%" : "50%" : ((b = e.image) == null ? void 0 : b.sizing) === "inset" ? (i.width = "100%", i.maxWidth = e.image.maxWidth ?? "unset") : i.width = "100%", (y = e.image) != null && y.aspectRatio) {
|
|
41
|
-
const [
|
|
42
|
-
i.aspectRatio = `${
|
|
41
|
+
const [z, H] = (c = e.image) == null ? void 0 : c.aspectRatio.split(":").map(Number);
|
|
42
|
+
i.aspectRatio = `${z}/${H}`;
|
|
43
43
|
}
|
|
44
44
|
} else
|
|
45
45
|
i.objectFit = "none";
|
|
46
46
|
let m;
|
|
47
47
|
(v = e.image) != null && v.imageUrls && (m = t === "dark" && ((k = e.image.imageUrls.dark) == null ? void 0 : k.medium) || e.image.imageUrls.default.medium);
|
|
48
|
-
let g = ((w = (T = (A = e.image) == null ? void 0 : A[t === "dark" ? "darkImage" : "defaultImage"]) == null ? void 0 : T.asset) == null ? void 0 : w.altText) || ((
|
|
48
|
+
let g = ((w = (T = (A = e.image) == null ? void 0 : A[t === "dark" ? "darkImage" : "defaultImage"]) == null ? void 0 : T.asset) == null ? void 0 : w.altText) || ((U = (L = (I = e.image) == null ? void 0 : I[t === "dark" ? "darkImage" : "defaultImage"]) == null ? void 0 : L.asset) == null ? void 0 : U.description) || "Card image";
|
|
49
49
|
switch (e.type) {
|
|
50
50
|
case "link":
|
|
51
51
|
return /* @__PURE__ */ r(
|
|
@@ -54,14 +54,14 @@ function ie({
|
|
|
54
54
|
as: "a",
|
|
55
55
|
variant: e.variant,
|
|
56
56
|
href: a,
|
|
57
|
-
target: ((
|
|
58
|
-
rel: ((
|
|
57
|
+
target: ((C = e.linkOptions) == null ? void 0 : C.linkType) === "external" ? "_blank" : "_self",
|
|
58
|
+
rel: ((R = e.linkOptions) == null ? void 0 : R.linkType) === "external" ? "noopener noreferrer" : "",
|
|
59
59
|
"aria-label": e.ariaLabel || e.label,
|
|
60
60
|
icon: e.icon,
|
|
61
61
|
iconAlignment: e.iconAlignment ?? "right",
|
|
62
62
|
displayType: e.displayType,
|
|
63
63
|
ImageComponent: /* @__PURE__ */ r(
|
|
64
|
-
|
|
64
|
+
j,
|
|
65
65
|
{
|
|
66
66
|
src: m ?? "",
|
|
67
67
|
alt: g,
|
|
@@ -88,7 +88,7 @@ function ie({
|
|
|
88
88
|
displayType: e.displayType,
|
|
89
89
|
scrollOffset: e.scrollOffset,
|
|
90
90
|
ImageComponent: /* @__PURE__ */ r(
|
|
91
|
-
|
|
91
|
+
j,
|
|
92
92
|
{
|
|
93
93
|
src: m ?? "",
|
|
94
94
|
alt: g,
|
|
@@ -112,7 +112,6 @@ function ie({
|
|
|
112
112
|
iconAlignment: e.iconAlignment ?? "right",
|
|
113
113
|
"aria-label": e.ariaLabel || e.label,
|
|
114
114
|
modalPayload: {
|
|
115
|
-
heading: (j = e.formReference) == null ? void 0 : j.heading,
|
|
116
115
|
formReference: e.formReference,
|
|
117
116
|
modalContent: e.modalContent
|
|
118
117
|
},
|
|
@@ -122,7 +121,7 @@ function ie({
|
|
|
122
121
|
);
|
|
123
122
|
case "video":
|
|
124
123
|
return /* @__PURE__ */ r(
|
|
125
|
-
|
|
124
|
+
E,
|
|
126
125
|
{
|
|
127
126
|
trigger: /* @__PURE__ */ r(
|
|
128
127
|
o,
|
|
@@ -162,5 +161,5 @@ function ie({
|
|
|
162
161
|
) : null;
|
|
163
162
|
}
|
|
164
163
|
export {
|
|
165
|
-
|
|
164
|
+
ee as CallToAction
|
|
166
165
|
};
|