quirk-ui 0.1.158 → 0.1.159

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