quirk-ui 0.1.153 → 0.1.155

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.d.ts CHANGED
@@ -1564,12 +1564,18 @@ declare type RangeSize = "sm" | "md" | "lg";
1564
1564
  /**
1565
1565
  * Drop-in `renderCallToAction` prop for all QuirkUI blocks.
1566
1566
  *
1567
+ * All CTA types — including "modal" — are passed directly to CallToAction
1568
+ * so they render inside ButtonGroup and respect alignment, spacing, and styles.
1569
+ * The modal case is handled in CallToAction's switch via Button as="modal",
1570
+ * passing formReference (typed as ModalForm) and modalContent (PortableTextBlock[])
1571
+ * directly into ModalPayload.
1572
+ *
1567
1573
  * @example
1568
1574
  * // Pass directly as a prop value — no wrapper needed
1569
1575
  * <HeroBlock {...section} renderCallToAction={renderCallToAction} />
1570
1576
  * <ContentBlock {...section} renderCallToAction={renderCallToAction} />
1571
1577
  */
1572
- export declare function renderCallToAction({ alignment, spacing, mobileOrientation, items, className, }: RenderCallToActionProps_3): default_2.ReactElement | null;
1578
+ export declare function renderCallToAction({ alignment, spacing, items, className, }: RenderCallToActionProps_3): default_2.ReactElement | null;
1573
1579
 
1574
1580
  export { RenderCallToActionProps }
1575
1581
 
@@ -1 +1 @@
1
- "use strict";const o=require("react/jsx-runtime"),e=require("../../../react.esm-C_9Ma9mj.cjs"),n=require("./index.cjs");e.vi.mock("./styles.module.css",()=>({default:new Proxy({},{get:(r,i)=>i})}));e.vi.mock("../../hooks/useMediaQuery",()=>({useMediaQuery:e.vi.fn(()=>!1)}));e.vi.mock("../../context/ThemeContext",()=>({useTheme:()=>({mode:"light"})}));e.vi.mock("../../utils/mediaUtils",()=>({resolveImageUrl:t=>t?"https://cdn.example.com/image.jpg":void 0,resolveAltText:t=>t?"Alt text":""}));e.vi.mock("../../utils/resolveLinkUrl",()=>({resolveLinkURL:t=>(t==null?void 0:t.href)??"/resolved"}));e.vi.mock("../../utils/blockRenderers",()=>({extractText:t=>{var r,i,l;return((l=(i=(r=t==null?void 0:t[0])==null?void 0:r.children)==null?void 0:i[0])==null?void 0:l.text)??""}}));e.vi.mock("../../../core",()=>({Badge:({text:t,className:r})=>o.jsx("span",{"data-testid":"badge",className:r,children:t})}));e.vi.mock("../../../core/components/Modal",()=>({Modal:({trigger:t,content:r,className:i})=>o.jsxs("div",{"data-testid":"modal",className:i,children:[o.jsx("div",{"data-testid":"modal-trigger",children:t}),o.jsx("div",{"data-testid":"modal-content",children:r})]})}));e.vi.mock("lucide-react",()=>({ArrowRight:()=>o.jsx("span",{"data-testid":"arrow-right"}),Play:()=>o.jsx("span",{"data-testid":"play-icon"})}));function s(t){return[{_type:"block",_key:"b1",style:"normal",markDefs:[],children:[{_type:"span",_key:"s1",text:t,marks:[]}]}]}const x=({blocks:t,className:r})=>{var i,l,g;return o.jsx("span",{"data-testid":"rich-text",className:r,children:((g=(l=(i=t==null?void 0:t[0])==null?void 0:i.children)==null?void 0:l[0])==null?void 0:g.text)??""})},c=({src:t,alt:r,className:i})=>o.jsx("img",{"data-testid":"render-image",src:t,alt:r,className:i}),d={asset:{_ref:"image-abc"}};function a(t={}){return{_key:"card-1",_type:"item",variant:"default",rating:0,styleOptions:{},renderRichText:x,...t}}e.beforeEach(async()=>{e.vi.mocked((await Promise.resolve().then(()=>require("../../hooks/useMediaQuery.cjs"))).useMediaQuery).mockReturnValue(!1)});e.describe("1. Image — renderImage render prop; plain <img> fallback",()=>{e.it("renders via renderImage when provided",()=>{e.render(o.jsx(n.BioCard,{...a({image:d,renderImage:c})})),e.globalExpect(e.screen.getByTestId("render-image")).toBeInTheDocument()}),e.it("renders a plain <img> when renderImage is not provided",()=>{var r;const{container:t}=e.render(o.jsx(n.BioCard,{...a({image:d})}));e.globalExpect(t.querySelector("img")).toBeInTheDocument(),e.globalExpect((r=t.querySelector("img"))==null?void 0:r.src).toContain("cdn.example.com")}),e.it("passes resolved src and alt to renderImage",()=>{e.render(o.jsx(n.BioCard,{...a({image:d,renderImage:c})}));const t=e.screen.getByTestId("render-image");e.globalExpect(t.getAttribute("src")).toBe("https://cdn.example.com/image.jpg"),e.globalExpect(t.getAttribute("alt")).toBe("Alt text")})});e.describe("2. Image absent — no image when image prop is omitted",()=>{e.it("renders no img element when image is not provided",()=>{const{container:t}=e.render(o.jsx(n.BioCard,{...a()}));e.globalExpect(t.querySelector("img")).toBeNull(),e.globalExpect(e.screen.queryByTestId("render-image")).toBeNull()})});e.describe("3. Metric — SVG for % value; nothing for non-%",()=>{e.it("renders an SVG when metricValue contains %",()=>{const{container:t}=e.render(o.jsx(n.BioCard,{...a({metricValue:"75%"})}));e.globalExpect(t.querySelector("svg")).toBeInTheDocument()}),e.it("renders the percentage text inside the SVG",()=>{e.render(o.jsx(n.BioCard,{...a({metricValue:"75%"})})),e.globalExpect(e.screen.getByText("75%")).toBeInTheDocument()}),e.it("does not render an SVG when metricValue has no %",()=>{const{container:t}=e.render(o.jsx(n.BioCard,{...a({metricValue:"42"})}));e.globalExpect(t.querySelector("svg")).toBeNull()}),e.it("does not render anything when metricValue is omitted",()=>{const{container:t}=e.render(o.jsx(n.BioCard,{...a()}));e.globalExpect(t.querySelector("svg")).toBeNull()}),e.it("computes correct strokeDashoffset for 50%",()=>{const{container:t}=e.render(o.jsx(n.BioCard,{...a({metricValue:"50%"})})),i=t.querySelectorAll("circle")[1],l=parseFloat(i.getAttribute("r")??"0"),m=2*Math.PI*l*.5;e.globalExpect(parseFloat(i.getAttribute("stroke-dashoffset")??"0")).toBeCloseTo(m,1)})});e.describe("4. Eyebrow — Badge rendered with extracted text",()=>{e.it("renders a Badge when eyebrow is provided",()=>{e.render(o.jsx(n.BioCard,{...a({eyebrow:s("Our Team")})})),e.globalExpect(e.screen.getByTestId("badge")).toBeInTheDocument()}),e.it("shows the extracted plain text in the Badge",()=>{e.render(o.jsx(n.BioCard,{...a({eyebrow:s("Our Team")})})),e.globalExpect(e.screen.getByTestId("badge").textContent).toBe("Our Team")}),e.it("does not render a Badge when eyebrow is omitted",()=>{e.render(o.jsx(n.BioCard,{...a()})),e.globalExpect(e.screen.queryByTestId("badge")).toBeNull()})});e.describe("5. Title — rendered via renderRichText with title class",()=>{e.it("renders the title via renderRichText",()=>{e.render(o.jsx(n.BioCard,{...a({title:s("Jane Doe")})}));const t=e.screen.getAllByTestId("rich-text");e.globalExpect(t.some(r=>r.textContent==="Jane Doe")).toBe(!0)}),e.it("passes the title class to renderRichText",()=>{e.render(o.jsx(n.BioCard,{...a({title:s("Jane Doe")})}));const r=e.screen.getAllByTestId("rich-text").find(i=>i.textContent==="Jane Doe");e.globalExpect(r==null?void 0:r.className).toContain("title")}),e.it("does not render a title node when title is omitted",()=>{e.render(o.jsx(n.BioCard,{...a()})),e.globalExpect(e.screen.queryByTestId("rich-text")).toBeNull()})});e.describe("6. Description — rendered via renderRichText",()=>{e.it("renders the description",()=>{e.render(o.jsx(n.BioCard,{...a({description:s("Bio text here")})}));const t=e.screen.getAllByTestId("rich-text");e.globalExpect(t.some(r=>r.textContent==="Bio text here")).toBe(!0)}),e.it("does not render description when omitted",()=>{e.render(o.jsx(n.BioCard,{...a({title:s("Name")})}));const t=e.screen.getAllByTestId("rich-text");e.globalExpect(t).toHaveLength(1)})});e.describe('7. variant="image" — text block hidden; image still shown',()=>{e.it("hides the content div (metric, eyebrow, title, description)",()=>{e.render(o.jsx(n.BioCard,{...a({variant:"image",title:s("Hidden Title"),image:d,renderImage:c})})),e.globalExpect(e.screen.queryByTestId("rich-text")).toBeNull(),e.globalExpect(e.screen.queryByTestId("badge")).toBeNull()}),e.it("still renders the image in image variant",()=>{e.render(o.jsx(n.BioCard,{...a({variant:"image",image:d,renderImage:c})})),e.globalExpect(e.screen.getByTestId("render-image")).toBeInTheDocument()})});e.describe('8. CardContainer "link" — card wrapped in <a>; ArrowRight shown',()=>{const t={type:"link",href:"/about",label:"Learn more",ariaLabel:"Learn more about us",linkOptions:{linkType:"internal"}};e.it("wraps the card in an <a> element",()=>{const{container:r}=e.render(o.jsx(n.BioCard,{...a({callToAction:t})}));e.globalExpect(r.querySelector("a")).toBeInTheDocument()}),e.it("shows the ArrowRight icon",()=>{e.render(o.jsx(n.BioCard,{...a({callToAction:t})})),e.globalExpect(e.screen.getByTestId("arrow-right")).toBeInTheDocument()}),e.it("sets the href on the anchor",()=>{var i;const{container:r}=e.render(o.jsx(n.BioCard,{...a({callToAction:t})}));e.globalExpect((i=r.querySelector("a"))==null?void 0:i.getAttribute("href")).toBe("/about")}),e.it("shows the CTA label",()=>{e.render(o.jsx(n.BioCard,{...a({callToAction:t})})),e.globalExpect(e.screen.getByText("Learn more")).toBeInTheDocument()})});e.describe('9. CardContainer "link" external — target=_blank, rel=noopener',()=>{const t={type:"link",href:"https://example.com",label:"Visit",linkOptions:{linkType:"external"}};e.it("sets target=_blank",()=>{var i;const{container:r}=e.render(o.jsx(n.BioCard,{...a({callToAction:t})}));e.globalExpect((i=r.querySelector("a"))==null?void 0:i.getAttribute("target")).toBe("_blank")}),e.it("sets rel=noopener noreferrer",()=>{var i;const{container:r}=e.render(o.jsx(n.BioCard,{...a({callToAction:t})}));e.globalExpect((i=r.querySelector("a"))==null?void 0:i.getAttribute("rel")).toBe("noopener noreferrer")})});e.describe('10. CardContainer "link" internal — target=_self',()=>{const t={type:"link",href:"/team",label:"Team",linkOptions:{linkType:"internal"}};e.it("sets target=_self for internal links",()=>{var i;const{container:r}=e.render(o.jsx(n.BioCard,{...a({callToAction:t})}));e.globalExpect((i=r.querySelector("a"))==null?void 0:i.getAttribute("target")).toBe("_self")})});e.describe('11. CardContainer "download" — <a> with download attribute',()=>{const t={type:"download",href:"/file.pdf",label:"Download",linkOptions:{linkType:"external"}};e.it("renders an anchor with the download attribute",()=>{var i;const{container:r}=e.render(o.jsx(n.BioCard,{...a({callToAction:t})}));e.globalExpect((i=r.querySelector("a"))==null?void 0:i.hasAttribute("download")).toBe(!0)}),e.it("sets target=_blank on download links",()=>{var i;const{container:r}=e.render(o.jsx(n.BioCard,{...a({callToAction:t})}));e.globalExpect((i=r.querySelector("a"))==null?void 0:i.getAttribute("target")).toBe("_blank")})});e.describe('12. CardContainer "video" — Modal rendered; Play icon shown',()=>{const t={type:"video",videoUrl:"https://cdn.example.com/video.mp4",label:"Watch"};e.it("renders a Modal",()=>{e.render(o.jsx(n.BioCard,{...a({callToAction:t})})),e.globalExpect(e.screen.getByTestId("modal")).toBeInTheDocument()}),e.it("shows the Play icon",()=>{e.render(o.jsx(n.BioCard,{...a({callToAction:t})})),e.globalExpect(e.screen.getByTestId("play-icon")).toBeInTheDocument()}),e.it("includes a video element in the modal content",()=>{const{container:r}=e.render(o.jsx(n.BioCard,{...a({callToAction:t})}));e.globalExpect(r.querySelector("[data-testid='modal-content'] video")).toBeInTheDocument()})});e.describe('13. CardContainer "modal" — Modal with modalContent',()=>{const t={type:"modal",label:"Read more",modalContent:o.jsx("p",{"data-testid":"modal-inner",children:"Inner content"})};e.it("renders a Modal",()=>{e.render(o.jsx(n.BioCard,{...a({callToAction:t})})),e.globalExpect(e.screen.getByTestId("modal")).toBeInTheDocument()}),e.it("passes modalContent to the Modal",()=>{e.render(o.jsx(n.BioCard,{...a({callToAction:t})})),e.globalExpect(e.screen.getByTestId("modal-inner")).toBeInTheDocument()})});e.describe("14. CardContainer default — no <a> or Modal when no CTA type",()=>{e.it("renders no anchor when callToAction is undefined",()=>{const{container:t}=e.render(o.jsx(n.BioCard,{...a()}));e.globalExpect(t.querySelector("a")).toBeNull()}),e.it("renders no Modal when callToAction is undefined",()=>{e.render(o.jsx(n.BioCard,{...a()})),e.globalExpect(e.screen.queryByTestId("modal")).toBeNull()})});e.describe("15. style prop — image-left/image-top classes applied",()=>{e.it("applies imageLeft class for style='image-left'",()=>{var r;const{container:t}=e.render(o.jsx(n.BioCard,{...a({style:"image-left"})}));e.globalExpect((r=t.querySelector(".card"))==null?void 0:r.className).toContain("imageLeft")}),e.it("applies imageTop class for style='image-top'",()=>{var r;const{container:t}=e.render(o.jsx(n.BioCard,{...a({style:"image-top"})}));e.globalExpect((r=t.querySelector(".card"))==null?void 0:r.className).toContain("imageTop")}),e.it("applies no style class when style is omitted",()=>{var i;const{container:t}=e.render(o.jsx(n.BioCard,{...a()})),r=((i=t.querySelector(".card"))==null?void 0:i.className)??"";e.globalExpect(r).not.toContain("imageLeft"),e.globalExpect(r).not.toContain("imageTop")})});e.describe("16. gridArea — inline style on desktop; ignored on mobile",()=>{e.it("applies gridArea as inline style on desktop",()=>{var r;const{container:t}=e.render(o.jsx(n.BioCard,{...a({gridArea:"feature"})}));e.globalExpect((r=t.querySelector(".card"))==null?void 0:r.style.gridArea).toBe("feature")}),e.it("does not apply gridArea on mobile",async()=>{var i;const{useMediaQuery:t}=await Promise.resolve().then(()=>require("../../hooks/useMediaQuery.cjs"));e.vi.mocked(t).mockReturnValue(!0);const{container:r}=e.render(o.jsx(n.BioCard,{...a({gridArea:"feature"})}));e.globalExpect((i=r.querySelector(".card"))==null?void 0:i.style.gridArea).toBe("")})});e.describe("17. onHover / onLeave — forwarded to wrapper div",()=>{e.it("calls onHover on mouseEnter",()=>{const t=e.vi.fn(),{container:r}=e.render(o.jsx(n.BioCard,{...a({onHover:t})}));e.fireEvent.mouseEnter(r.querySelector(".card")),e.globalExpect(t).toHaveBeenCalledOnce()}),e.it("calls onLeave on mouseLeave",()=>{const t=e.vi.fn(),{container:r}=e.render(o.jsx(n.BioCard,{...a({onLeave:t})}));e.fireEvent.mouseLeave(r.querySelector(".card")),e.globalExpect(t).toHaveBeenCalledOnce()})});
1
+ "use strict";const o=require("react/jsx-runtime"),e=require("../../../react.esm-C_9Ma9mj.cjs"),a=require("./index.cjs");e.vi.mock("./styles.module.css",()=>({default:new Proxy({},{get:(r,n)=>n})}));e.vi.mock("../../hooks/useMediaQuery",()=>({useMediaQuery:e.vi.fn(()=>!1)}));e.vi.mock("../../context/ThemeContext",()=>({useTheme:()=>({mode:"light"})}));e.vi.mock("../../utils/mediaUtils",()=>({resolveImageUrl:t=>t?"https://cdn.example.com/image.jpg":void 0,resolveAltText:t=>t?"Alt text":""}));e.vi.mock("../../utils/resolveLinkUrl",()=>({resolveLinkURL:t=>(t==null?void 0:t.href)??"/resolved"}));e.vi.mock("../../utils/blockRenderers",()=>({extractText:t=>{var r,n,l;return((l=(n=(r=t==null?void 0:t[0])==null?void 0:r.children)==null?void 0:n[0])==null?void 0:l.text)??""}}));e.vi.mock("../../../core",()=>({Badge:({text:t,className:r})=>o.jsx("span",{"data-testid":"badge",className:r,children:t})}));e.vi.mock("../../../core/components/Modal",()=>({Modal:({trigger:t,content:r,className:n})=>o.jsxs("div",{"data-testid":"modal",className:n,children:[o.jsx("div",{"data-testid":"modal-trigger",children:t}),o.jsx("div",{"data-testid":"modal-content",children:r})]})}));e.vi.mock("lucide-react",()=>({ArrowRight:()=>o.jsx("span",{"data-testid":"arrow-right"}),Play:()=>o.jsx("span",{"data-testid":"play-icon"})}));function s(t){return[{_type:"block",_key:"b1",style:"normal",markDefs:[],children:[{_type:"span",_key:"s1",text:t,marks:[]}]}]}const x=({blocks:t,className:r})=>{var n,l,g;return o.jsx("span",{"data-testid":"rich-text",className:r,children:((g=(l=(n=t==null?void 0:t[0])==null?void 0:n.children)==null?void 0:l[0])==null?void 0:g.text)??""})},d=({src:t,alt:r,className:n})=>o.jsx("img",{"data-testid":"render-image",src:t,alt:r,className:n}),c={asset:{_ref:"image-abc"}};function i(t={}){return{_key:"card-1",_type:"item",variant:"default",rating:0,styleOptions:{},renderRichText:x,...t}}e.beforeEach(async()=>{e.vi.mocked((await Promise.resolve().then(()=>require("../../hooks/useMediaQuery.cjs"))).useMediaQuery).mockReturnValue(!1)});e.describe("1. Image — renderImage render prop; plain <img> fallback",()=>{e.it("renders via renderImage when provided",()=>{e.render(o.jsx(a.BioCard,{...i({image:c,renderImage:d})})),e.globalExpect(e.screen.getByTestId("render-image")).toBeInTheDocument()}),e.it("renders a plain <img> when renderImage is not provided",()=>{var r;const{container:t}=e.render(o.jsx(a.BioCard,{...i({image:c})}));e.globalExpect(t.querySelector("img")).toBeInTheDocument(),e.globalExpect((r=t.querySelector("img"))==null?void 0:r.src).toContain("cdn.example.com")}),e.it("passes resolved src and alt to renderImage",()=>{e.render(o.jsx(a.BioCard,{...i({image:c,renderImage:d})}));const t=e.screen.getByTestId("render-image");e.globalExpect(t.getAttribute("src")).toBe("https://cdn.example.com/image.jpg"),e.globalExpect(t.getAttribute("alt")).toBe("Alt text")})});e.describe("2. Image absent — no image when image prop is omitted",()=>{e.it("renders no img element when image is not provided",()=>{const{container:t}=e.render(o.jsx(a.BioCard,{...i()}));e.globalExpect(t.querySelector("img")).toBeNull(),e.globalExpect(e.screen.queryByTestId("render-image")).toBeNull()})});e.describe("3. Metric — SVG for % value; nothing for non-%",()=>{e.it("renders an SVG when metricValue contains %",()=>{const{container:t}=e.render(o.jsx(a.BioCard,{...i({metricValue:"75%"})}));e.globalExpect(t.querySelector("svg")).toBeInTheDocument()}),e.it("renders the percentage text inside the SVG",()=>{e.render(o.jsx(a.BioCard,{...i({metricValue:"75%"})})),e.globalExpect(e.screen.getByText("75%")).toBeInTheDocument()}),e.it("does not render an SVG when metricValue has no %",()=>{const{container:t}=e.render(o.jsx(a.BioCard,{...i({metricValue:"42"})}));e.globalExpect(t.querySelector("svg")).toBeNull()}),e.it("does not render anything when metricValue is omitted",()=>{const{container:t}=e.render(o.jsx(a.BioCard,{...i()}));e.globalExpect(t.querySelector("svg")).toBeNull()}),e.it("computes correct strokeDashoffset for 50%",()=>{const{container:t}=e.render(o.jsx(a.BioCard,{...i({metricValue:"50%"})})),n=t.querySelectorAll("circle")[1],l=parseFloat(n.getAttribute("r")??"0"),m=2*Math.PI*l*.5;e.globalExpect(parseFloat(n.getAttribute("stroke-dashoffset")??"0")).toBeCloseTo(m,1)})});e.describe("4. Eyebrow — Badge rendered with extracted text",()=>{e.it("renders a Badge when eyebrow is provided",()=>{e.render(o.jsx(a.BioCard,{...i({eyebrow:s("Our Team")})})),e.globalExpect(e.screen.getByTestId("badge")).toBeInTheDocument()}),e.it("shows the extracted plain text in the Badge",()=>{e.render(o.jsx(a.BioCard,{...i({eyebrow:s("Our Team")})})),e.globalExpect(e.screen.getByTestId("badge").textContent).toBe("Our Team")}),e.it("does not render a Badge when eyebrow is omitted",()=>{e.render(o.jsx(a.BioCard,{...i()})),e.globalExpect(e.screen.queryByTestId("badge")).toBeNull()})});e.describe("5. Title — rendered via renderRichText with title class",()=>{e.it("renders the title via renderRichText",()=>{e.render(o.jsx(a.BioCard,{...i({title:s("Jane Doe")})}));const t=e.screen.getAllByTestId("rich-text");e.globalExpect(t.some(r=>r.textContent==="Jane Doe")).toBe(!0)}),e.it("passes the title class to renderRichText",()=>{e.render(o.jsx(a.BioCard,{...i({title:s("Jane Doe")})}));const r=e.screen.getAllByTestId("rich-text").find(n=>n.textContent==="Jane Doe");e.globalExpect(r==null?void 0:r.className).toContain("title")}),e.it("does not render a title node when title is omitted",()=>{e.render(o.jsx(a.BioCard,{...i()})),e.globalExpect(e.screen.queryByTestId("rich-text")).toBeNull()})});e.describe("6. Description — rendered via renderRichText",()=>{e.it("renders the description",()=>{e.render(o.jsx(a.BioCard,{...i({description:s("Bio text here")})}));const t=e.screen.getAllByTestId("rich-text");e.globalExpect(t.some(r=>r.textContent==="Bio text here")).toBe(!0)}),e.it("does not render description when omitted",()=>{e.render(o.jsx(a.BioCard,{...i({title:s("Name")})}));const t=e.screen.getAllByTestId("rich-text");e.globalExpect(t).toHaveLength(1)})});e.describe('7. variant="image" — text block hidden; image still shown',()=>{e.it("hides the content div (metric, eyebrow, title, description)",()=>{e.render(o.jsx(a.BioCard,{...i({variant:"image",title:s("Hidden Title"),image:c,renderImage:d})})),e.globalExpect(e.screen.queryByTestId("rich-text")).toBeNull(),e.globalExpect(e.screen.queryByTestId("badge")).toBeNull()}),e.it("still renders the image in image variant",()=>{e.render(o.jsx(a.BioCard,{...i({variant:"image",image:c,renderImage:d})})),e.globalExpect(e.screen.getByTestId("render-image")).toBeInTheDocument()})});e.describe('8. CardContainer "link" — card wrapped in <a>; ArrowRight shown',()=>{const t={type:"link",href:"/about",label:"Learn more",ariaLabel:"Learn more about us",linkOptions:{linkType:"internal"}};e.it("wraps the card in an <a> element",()=>{const{container:r}=e.render(o.jsx(a.BioCard,{...i({callToAction:t})}));e.globalExpect(r.querySelector("a")).toBeInTheDocument()}),e.it("shows the ArrowRight icon",()=>{e.render(o.jsx(a.BioCard,{...i({callToAction:t})})),e.globalExpect(e.screen.getByTestId("arrow-right")).toBeInTheDocument()}),e.it("sets the href on the anchor",()=>{var n;const{container:r}=e.render(o.jsx(a.BioCard,{...i({callToAction:t})}));e.globalExpect((n=r.querySelector("a"))==null?void 0:n.getAttribute("href")).toBe("/about")}),e.it("shows the CTA label",()=>{e.render(o.jsx(a.BioCard,{...i({callToAction:t})})),e.globalExpect(e.screen.getByText("Learn more")).toBeInTheDocument()})});e.describe('9. CardContainer "link" external — target=_blank, rel=noopener',()=>{const t={type:"link",href:"https://example.com",label:"Visit",linkOptions:{linkType:"external"}};e.it("sets target=_blank",()=>{var n;const{container:r}=e.render(o.jsx(a.BioCard,{...i({callToAction:t})}));e.globalExpect((n=r.querySelector("a"))==null?void 0:n.getAttribute("target")).toBe("_blank")}),e.it("sets rel=noopener noreferrer",()=>{var n;const{container:r}=e.render(o.jsx(a.BioCard,{...i({callToAction:t})}));e.globalExpect((n=r.querySelector("a"))==null?void 0:n.getAttribute("rel")).toBe("noopener noreferrer")})});e.describe('10. CardContainer "link" internal — target=_self',()=>{const t={type:"link",href:"/team",label:"Team",linkOptions:{linkType:"internal"}};e.it("sets target=_self for internal links",()=>{var n;const{container:r}=e.render(o.jsx(a.BioCard,{...i({callToAction:t})}));e.globalExpect((n=r.querySelector("a"))==null?void 0:n.getAttribute("target")).toBe("_self")})});e.describe('11. CardContainer "download" — <a> with download attribute',()=>{const t={type:"download",href:"/file.pdf",label:"Download",linkOptions:{linkType:"external"}};e.it("renders an anchor with the download attribute",()=>{var n;const{container:r}=e.render(o.jsx(a.BioCard,{...i({callToAction:t})}));e.globalExpect((n=r.querySelector("a"))==null?void 0:n.hasAttribute("download")).toBe(!0)}),e.it("sets target=_blank on download links",()=>{var n;const{container:r}=e.render(o.jsx(a.BioCard,{...i({callToAction:t})}));e.globalExpect((n=r.querySelector("a"))==null?void 0:n.getAttribute("target")).toBe("_blank")})});e.describe('12. CardContainer "video" — Modal rendered; Play icon shown',()=>{const t={type:"video",videoUrl:"https://cdn.example.com/video.mp4",label:"Watch"};e.it("renders a Modal",()=>{e.render(o.jsx(a.BioCard,{...i({callToAction:t})})),e.globalExpect(e.screen.getByTestId("modal")).toBeInTheDocument()}),e.it("shows the Play icon",()=>{e.render(o.jsx(a.BioCard,{...i({callToAction:t})})),e.globalExpect(e.screen.getByTestId("play-icon")).toBeInTheDocument()}),e.it("includes a video element in the modal content",()=>{const{container:r}=e.render(o.jsx(a.BioCard,{...i({callToAction:t})}));e.globalExpect(r.querySelector("[data-testid='modal-content'] video")).toBeInTheDocument()})});e.describe('13. CardContainer "modal" — Modal rendered; renderRichText used for modalContent',()=>{const r={type:"modal",label:"Read more",modalContent:[{_type:"block",_key:"mc1",style:"normal",markDefs:[],children:[{_type:"span",_key:"s1",text:"Inner content",marks:[]}]}]};e.it("renders a Modal",()=>{e.render(o.jsx(a.BioCard,{...i({callToAction:r})})),e.globalExpect(e.screen.getByTestId("modal")).toBeInTheDocument()}),e.it("renders modalContent via renderRichText inside the Modal",()=>{e.render(o.jsx(a.BioCard,{...i({callToAction:r})}));const n=e.screen.getAllByTestId("rich-text");e.globalExpect(n.some(l=>l.textContent==="Inner content")).toBe(!0)})});e.describe("14. CardContainer default — no <a> or Modal when no CTA type",()=>{e.it("renders no anchor when callToAction is undefined",()=>{const{container:t}=e.render(o.jsx(a.BioCard,{...i()}));e.globalExpect(t.querySelector("a")).toBeNull()}),e.it("renders no Modal when callToAction is undefined",()=>{e.render(o.jsx(a.BioCard,{...i()})),e.globalExpect(e.screen.queryByTestId("modal")).toBeNull()})});e.describe("15. style prop — image-left/image-top classes applied",()=>{e.it("applies imageLeft class for style='image-left'",()=>{var r;const{container:t}=e.render(o.jsx(a.BioCard,{...i({style:"image-left"})}));e.globalExpect((r=t.querySelector(".card"))==null?void 0:r.className).toContain("imageLeft")}),e.it("applies imageTop class for style='image-top'",()=>{var r;const{container:t}=e.render(o.jsx(a.BioCard,{...i({style:"image-top"})}));e.globalExpect((r=t.querySelector(".card"))==null?void 0:r.className).toContain("imageTop")}),e.it("applies no style class when style is omitted",()=>{var n;const{container:t}=e.render(o.jsx(a.BioCard,{...i()})),r=((n=t.querySelector(".card"))==null?void 0:n.className)??"";e.globalExpect(r).not.toContain("imageLeft"),e.globalExpect(r).not.toContain("imageTop")})});e.describe("16. gridArea — inline style on desktop; ignored on mobile",()=>{e.it("applies gridArea as inline style on desktop",()=>{var r;const{container:t}=e.render(o.jsx(a.BioCard,{...i({gridArea:"feature"})}));e.globalExpect((r=t.querySelector(".card"))==null?void 0:r.style.gridArea).toBe("feature")}),e.it("does not apply gridArea on mobile",async()=>{var n;const{useMediaQuery:t}=await Promise.resolve().then(()=>require("../../hooks/useMediaQuery.cjs"));e.vi.mocked(t).mockReturnValue(!0);const{container:r}=e.render(o.jsx(a.BioCard,{...i({gridArea:"feature"})}));e.globalExpect((n=r.querySelector(".card"))==null?void 0:n.style.gridArea).toBe("")})});e.describe("17. onHover / onLeave — forwarded to wrapper div",()=>{e.it("calls onHover on mouseEnter",()=>{const t=e.vi.fn(),{container:r}=e.render(o.jsx(a.BioCard,{...i({onHover:t})}));e.fireEvent.mouseEnter(r.querySelector(".card")),e.globalExpect(t).toHaveBeenCalledOnce()}),e.it("calls onLeave on mouseLeave",()=>{const t=e.vi.fn(),{container:r}=e.render(o.jsx(a.BioCard,{...i({onLeave:t})}));e.fireEvent.mouseLeave(r.querySelector(".card")),e.globalExpect(t).toHaveBeenCalledOnce()})});