quirk-ui 0.1.23 → 0.1.24

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.
@@ -172,7 +172,7 @@ const B = [
172
172
  src: r,
173
173
  alt: c,
174
174
  draggable: !1,
175
- style: s === "fill" ? { objectFit: "cover", width: "100%", height: "100%" } : { width: "100%", height: "auto" }
175
+ style: s === "fill" ? { objectFit: "cover", width: "100%", height: "100%" } : { width: "100%", height: "100%" }
176
176
  }
177
177
  );
178
178
  return a ? /* @__PURE__ */ t("div", { className: l.media, children: s === "fill" ? a.render({
@@ -3,4 +3,4 @@
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const y=[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]],x=k.createLucideIcon("pause",y),g="_hero_b3k93_1",j="_container_b3k93_7",w="_heading_b3k93_15",C="_text_b3k93_22",N="_eyebrow_b3k93_37",B="_disclaimer_b3k93_41",V="_articleDetails_b3k93_53",I="_articleType_b3k93_66",E="_articleCategories_b3k93_80",q="_category_b3k93_86",z="_number_b3k93_102",T="_blog_b3k93_129",H="_overlay_b3k93_155",R="_tile_b3k93_225",D="_fullBleed_b3k93_326",F="_media_b3k93_353",P="_splitAlt_b3k93_442",A="_split_b3k93_442",L="_videoControl_b3k93_516",S="_videoBackground_b3k93_559",U="_iframe_b3k93_560",n={hero:g,container:j,heading:w,text:C,eyebrow:N,disclaimer:B,articleDetails:V,articleType:I,articleCategories:E,category:q,number:z,default:"_default_b3k93_125",blog:T,overlay:H,tile:R,fullBleed:D,media:F,splitAlt:P,split:A,videoControl:L,videoBackground:S,iframe:U},v=l.memo(function({isPlaying:e,onToggle:i}){return t.jsx("button",{type:"button",title:e?"Pause the video":"Play the video","aria-label":e?"Pause video":"Play video",className:n.videoControl,onClick:i,children:e?t.jsx(x,{size:18,"aria-hidden":!0}):t.jsx(p.Play,{size:18,"aria-hidden":!0})})}),h=l.memo(function({url:e,provider:i,wrapperClassName:a,iframeClassName:s}){const r=b.buildEmbedSrc(e,i);return t.jsx("div",{className:a,children:t.jsx("iframe",{src:r,className:s,allow:"autoplay; fullscreen",allowFullScreen:!0,title:"Embedded video","aria-label":"Background video"})})}),f=l.memo(l.forwardRef(function({src:e,autoPlay:i,posterUrl:a,wrapperClassName:s,videoClassName:r,isPlaying:c,onToggle:u},m){const d=l.useRef(null);return l.useImperativeHandle(m,()=>({play(){var o;(o=d.current)==null||o.play().catch(()=>{})},pause(){var o;(o=d.current)==null||o.pause()}})),l.useEffect(()=>{const o=d.current;o&&(c?o.play().catch(()=>{}):o.pause())},[c]),t.jsxs("div",{className:s,style:{position:"relative"},children:[t.jsx(v,{isPlaying:c,onToggle:u}),t.jsx("video",{ref:d,src:e,autoPlay:i,loop:!0,muted:!0,playsInline:!0,poster:a,preload:"metadata",className:r,"aria-label":"Background video"})]})})),$=l.memo(function({url:e,autoPlay:i,posterUrl:a,isPlaying:s,onToggle:r,variant:c}){const u=e.includes("vimeo.com"),m=e.includes("youtube.com")||e.includes("youtu.be"),d=u||m,o=u?"vimeo":"youtube";return c==="inline"?d?t.jsx(h,{url:e,provider:o,wrapperClassName:n.media}):t.jsx(f,{src:e,autoPlay:i,posterUrl:a,wrapperClassName:n.media,isPlaying:s,onToggle:r}):d?t.jsx(h,{url:e,provider:o,wrapperClassName:n.videoBackground,iframeClassName:n.iframe}):t.jsx(f,{src:e,autoPlay:i,posterUrl:a,videoClassName:n.videoBackground,isPlaying:s,onToggle:r})}),Y=l.memo(function({image:e,mode:i,variant:a,imageAdapter:s}){const r=b.resolveImageUrl(e,i,"medium");if(!r)return null;const c=b.resolveAltText(e,i),u=t.jsx("img",{fetchPriority:"high",src:r,alt:c,draggable:!1,style:a==="fill"?{objectFit:"cover",width:"100%",height:"100%"}:{width:"100%",height:"auto"}});return s?t.jsx("div",{className:n.media,children:a==="fill"?s.render({src:r,alt:c,fill:!0,priority:!0,fetchPriority:"high",style:{objectFit:"cover"},draggable:!1,sizes:"(max-width: 767px) 600px, 1200px"}):s.render({src:r,alt:c,width:650,height:750,priority:!0,fetchPriority:"high"})}):t.jsx("div",{className:n.media,children:u})});exports.HeroImage=Y;exports.NativeVideo=f;exports.VideoBlock=$;exports.VideoControl=v;exports.VideoEmbed=h;exports.styles=n;
6
+ */const y=[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]],x=k.createLucideIcon("pause",y),g="_hero_b3k93_1",j="_container_b3k93_7",w="_heading_b3k93_15",C="_text_b3k93_22",N="_eyebrow_b3k93_37",B="_disclaimer_b3k93_41",V="_articleDetails_b3k93_53",I="_articleType_b3k93_66",E="_articleCategories_b3k93_80",q="_category_b3k93_86",z="_number_b3k93_102",T="_blog_b3k93_129",H="_overlay_b3k93_155",R="_tile_b3k93_225",D="_fullBleed_b3k93_326",F="_media_b3k93_353",P="_splitAlt_b3k93_442",A="_split_b3k93_442",L="_videoControl_b3k93_516",S="_videoBackground_b3k93_559",U="_iframe_b3k93_560",n={hero:g,container:j,heading:w,text:C,eyebrow:N,disclaimer:B,articleDetails:V,articleType:I,articleCategories:E,category:q,number:z,default:"_default_b3k93_125",blog:T,overlay:H,tile:R,fullBleed:D,media:F,splitAlt:P,split:A,videoControl:L,videoBackground:S,iframe:U},v=l.memo(function({isPlaying:e,onToggle:i}){return t.jsx("button",{type:"button",title:e?"Pause the video":"Play the video","aria-label":e?"Pause video":"Play video",className:n.videoControl,onClick:i,children:e?t.jsx(x,{size:18,"aria-hidden":!0}):t.jsx(p.Play,{size:18,"aria-hidden":!0})})}),h=l.memo(function({url:e,provider:i,wrapperClassName:a,iframeClassName:s}){const r=b.buildEmbedSrc(e,i);return t.jsx("div",{className:a,children:t.jsx("iframe",{src:r,className:s,allow:"autoplay; fullscreen",allowFullScreen:!0,title:"Embedded video","aria-label":"Background video"})})}),f=l.memo(l.forwardRef(function({src:e,autoPlay:i,posterUrl:a,wrapperClassName:s,videoClassName:r,isPlaying:c,onToggle:u},m){const d=l.useRef(null);return l.useImperativeHandle(m,()=>({play(){var o;(o=d.current)==null||o.play().catch(()=>{})},pause(){var o;(o=d.current)==null||o.pause()}})),l.useEffect(()=>{const o=d.current;o&&(c?o.play().catch(()=>{}):o.pause())},[c]),t.jsxs("div",{className:s,style:{position:"relative"},children:[t.jsx(v,{isPlaying:c,onToggle:u}),t.jsx("video",{ref:d,src:e,autoPlay:i,loop:!0,muted:!0,playsInline:!0,poster:a,preload:"metadata",className:r,"aria-label":"Background video"})]})})),$=l.memo(function({url:e,autoPlay:i,posterUrl:a,isPlaying:s,onToggle:r,variant:c}){const u=e.includes("vimeo.com"),m=e.includes("youtube.com")||e.includes("youtu.be"),d=u||m,o=u?"vimeo":"youtube";return c==="inline"?d?t.jsx(h,{url:e,provider:o,wrapperClassName:n.media}):t.jsx(f,{src:e,autoPlay:i,posterUrl:a,wrapperClassName:n.media,isPlaying:s,onToggle:r}):d?t.jsx(h,{url:e,provider:o,wrapperClassName:n.videoBackground,iframeClassName:n.iframe}):t.jsx(f,{src:e,autoPlay:i,posterUrl:a,videoClassName:n.videoBackground,isPlaying:s,onToggle:r})}),Y=l.memo(function({image:e,mode:i,variant:a,imageAdapter:s}){const r=b.resolveImageUrl(e,i,"medium");if(!r)return null;const c=b.resolveAltText(e,i),u=t.jsx("img",{fetchPriority:"high",src:r,alt:c,draggable:!1,style:a==="fill"?{objectFit:"cover",width:"100%",height:"100%"}:{width:"100%",height:"100%"}});return s?t.jsx("div",{className:n.media,children:a==="fill"?s.render({src:r,alt:c,fill:!0,priority:!0,fetchPriority:"high",style:{objectFit:"cover"},draggable:!1,sizes:"(max-width: 767px) 600px, 1200px"}):s.render({src:r,alt:c,width:650,height:750,priority:!0,fetchPriority:"high"})}):t.jsx("div",{className:n.media,children:u})});exports.HeroImage=Y;exports.NativeVideo=f;exports.VideoBlock=$;exports.VideoControl=v;exports.VideoEmbed=h;exports.styles=n;
@@ -1 +1 @@
1
- ._carousel_48j55_1{width:100%;overflow-x:hidden}@media (max-width: 767px){._carousel_48j55_1{padding:0 var(--spacing-lg)}}._carousel_48j55_1:focus{outline:none}._carousel_48j55_1:focus-visible{outline:2px solid var(--color-primary-100);outline-offset:3px;border-radius:var(--radius-sm, 4px)}._noPointerEvents_48j55_21 *{pointer-events:none!important}._trackContainer_48j55_25{overflow:hidden;width:100%}@media (max-width: 767px){._trackContainer_48j55_25{overflow:visible}}._track_48j55_25{display:flex;transition:none;will-change:transform}._track_48j55_25._isMounted_48j55_39{transition:transform .3s ease}._page_48j55_44{display:flex;gap:var(--spacing-md)}@media (max-width: 767px){._page_48j55_44{justify-content:center;padding:0 var(--spacing-sm)}}._controls_48j55_54{display:flex;justify-content:space-between;align-items:center;margin-top:var(--spacing-md);margin-left:auto;margin-right:auto;padding:0 var(--spacing-md);width:100%}._indicators_48j55_65{display:flex;flex-wrap:wrap;max-width:125px;gap:var(--spacing-sm)}._indicator_48j55_65{width:10px;height:10px;border-radius:50%;background-color:var(--color-carousel-button-background);border:1px solid #fff;cursor:pointer;transition:background-color .3s}._indicator_48j55_65._active_48j55_82{background-color:var(--color-carousel-button-text)}._buttons_48j55_86{display:flex;gap:var(--spacing-md)}._prev_48j55_91._disabled_48j55_91,._next_48j55_92._disabled_48j55_91{opacity:.5;pointer-events:none}._buttons_48j55_86 button:not(._disabled_48j55_91):hover{background-color:var(--color-primary-100);color:#fff}._prev_48j55_91,._next_48j55_92{background-color:var(--color-carousel-button-background);color:var(--color-carousel-button-text);border:1px solid #fff;padding:var(--spacing-sm);cursor:pointer;transition:background-color .3s,color .3s;border-radius:50%;width:40px;height:40px;display:flex;justify-content:center;align-items:center}._expandable_48j55_122>*{flex:1 1 0!important;min-width:0!important;width:unset!important;transition:flex .4s ease}._expandable_48j55_122:has(article:hover)>*:has(article:hover){flex:1.4 1 0!important}._expandable_48j55_122:has(article:hover)>*:not(:has(article:hover)){flex:.8 1 0!important}@media (max-width: 768px){._expandable_48j55_122>*{flex:1!important}}
1
+ ._carousel_1v597_1{width:100%;overflow-x:hidden}@media (max-width: 767px){._carousel_1v597_1{padding:0 var(--spacing-lg)}}._carousel_1v597_1:focus{outline:none}._carousel_1v597_1:focus-visible{outline:2px solid var(--color-primary-100);outline-offset:3px;border-radius:var(--radius-sm, 4px)}._noPointerEvents_1v597_21 *{pointer-events:none!important}._trackContainer_1v597_25{overflow:hidden;width:100%}@media (max-width: 767px){._trackContainer_1v597_25{overflow:visible}}._track_1v597_25{display:flex;transition:none;will-change:transform}._track_1v597_25._isMounted_1v597_39{transition:transform .3s ease}._page_1v597_44{display:flex;gap:var(--spacing-md)}@media (max-width: 767px){._page_1v597_44{justify-content:center;padding:0 var(--spacing-sm)}}._controls_1v597_54{display:flex;justify-content:space-between;align-items:center;margin-top:var(--spacing-md);margin-left:auto;margin-right:auto;padding:0 var(--spacing-md);width:100%}._indicators_1v597_65{display:flex;flex-wrap:wrap;max-width:125px;gap:var(--spacing-sm)}._indicator_1v597_65{width:10px;height:10px;border-radius:50%;background-color:var(--color-carousel-button-background);border:1px solid #fff;cursor:pointer;padding:0;transition:background-color .3s,transform .2s}._indicator_1v597_65._active_1v597_87{background-color:var(--color-carousel-button-text)}._indicator_1v597_65:focus{outline:none}._indicator_1v597_65:focus-visible{outline:2px solid var(--color-primary-100);outline-offset:3px}._indicator_1v597_65:not(._active_1v597_87):hover{transform:scale(1.3)}._buttons_1v597_106{display:flex;gap:var(--spacing-md)}._prev_1v597_111._disabled_1v597_111,._next_1v597_112._disabled_1v597_111{opacity:.5;pointer-events:none}._buttons_1v597_106 button:not(._disabled_1v597_111):hover{background-color:var(--color-primary-100);color:#fff}._prev_1v597_111,._next_1v597_112{background-color:var(--color-carousel-button-background);color:var(--color-carousel-button-text);border:1px solid #fff;padding:var(--spacing-sm);cursor:pointer;transition:background-color .3s,color .3s;border-radius:50%;width:40px;height:40px;display:flex;justify-content:center;align-items:center}._expandable_1v597_142>*{flex:1 1 0!important;min-width:0!important;width:unset!important;transition:flex .4s ease}._expandable_1v597_142:has(article:hover)>*:has(article:hover){flex:1.4 1 0!important}._expandable_1v597_142:has(article:hover)>*:not(:has(article:hover)){flex:.8 1 0!important}@media (max-width: 768px){._expandable_1v597_142>*{flex:1!important}}
@@ -1 +1 @@
1
- "use strict";var d=Object.defineProperty;var g=(s,a,i)=>a in s?d(s,a,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[a]=i;var c=(s,a,i)=>g(s,typeof a!="symbol"?a+"":a,i);const o=require("react/jsx-runtime"),e=require("../../../index-DITXfOUM.cjs"),n=require("./index.cjs"),b=require("react");e.vi.mock("lucide-react",()=>({ArrowLeft:({size:s})=>o.jsx("div",{"data-testid":"arrow-left",style:{width:s,height:s},children:"←"}),ArrowRight:({size:s})=>o.jsx("div",{"data-testid":"arrow-right",style:{width:s,height:s},children:"→"})}));class m{constructor(a){c(this,"callback");c(this,"observe",e.vi.fn(a=>{const i={target:a,contentRect:{width:800,height:400,top:0,left:0,bottom:400,right:800,x:0,y:0,toJSON:()=>({})},borderBoxSize:[],contentBoxSize:[],devicePixelContentBoxSize:[]};this.callback([i],this)}));c(this,"unobserve",e.vi.fn());c(this,"disconnect",e.vi.fn());this.callback=a}}global.ResizeObserver=m;e.describe("Carousel",()=>{let s,a;e.beforeEach(()=>{e.vi.useFakeTimers(),a=document.createElement("div"),Object.defineProperty(a,"offsetWidth",{value:800,configurable:!0}),document.body.appendChild(a),s={current:a},HTMLElement.prototype.getBoundingClientRect=e.vi.fn(function(){return{width:this.offsetWidth||800,height:this.offsetHeight||400,top:0,left:0,bottom:this.offsetHeight||400,right:this.offsetWidth||800,x:0,y:0,toJSON:()=>{}}})}),e.afterEach(()=>{e.vi.runOnlyPendingTimers(),e.vi.useRealTimers(),document.body.removeChild(a)});const i=[o.jsx("div",{children:"Item 1"},"1"),o.jsx("div",{children:"Item 2"},"2"),o.jsx("div",{children:"Item 3"},"3"),o.jsx("div",{children:"Item 4"},"4"),o.jsx("div",{children:"Item 5"},"5"),o.jsx("div",{children:"Item 6"},"6")];e.describe("Rendering",()=>{e.it("renders carousel with items",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s})),e.globalExpect(e.screen.getByText("Item 1")).toBeInTheDocument()}),e.it("renders navigation controls for multiple pages",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3})),e.globalExpect(e.screen.getByLabelText("Previous slide")).toBeInTheDocument(),e.globalExpect(e.screen.getByLabelText("Next slide")).toBeInTheDocument()}),e.it("renders indicators for multiple pages",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3}));const t=e.screen.getAllByRole("button").filter(r=>{var l;return(l=r.getAttribute("aria-label"))==null?void 0:l.includes("Go to group")});e.globalExpect(t.length).toBe(2)}),e.it("does not render controls for single page",()=>{e.render(o.jsx(n.Carousel,{items:[i[0]],parentRef:s,itemsPerPage:3})),e.globalExpect(e.screen.queryByLabelText("Previous slide")).not.toBeInTheDocument(),e.globalExpect(e.screen.queryByLabelText("Next slide")).not.toBeInTheDocument()}),e.it("applies custom className",()=>{const{container:t}=e.render(o.jsx(n.Carousel,{items:i,parentRef:s,className:"custom-carousel"}));e.globalExpect(t.querySelector(".custom-carousel")).toBeInTheDocument()})}),e.describe("Navigation",()=>{e.it("enables previous button after navigating forward",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Next slide"),r=e.screen.getByLabelText("Previous slide");e.globalExpect(r).toBeDisabled(),e.act(()=>{e.fireEvent.click(t)}),e.globalExpect(r).not.toBeDisabled()}),e.it("navigates back to first page",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Next slide"),r=e.screen.getByLabelText("Previous slide");e.act(()=>{e.fireEvent.click(t)}),e.globalExpect(r).not.toBeDisabled(),e.act(()=>{e.fireEvent.click(r)}),e.globalExpect(r).toBeDisabled()}),e.it("disables previous button on first page",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Previous slide");e.globalExpect(t).toBeDisabled(),e.globalExpect(t).toHaveClass("disabled")}),e.it("disables next button on last page",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Next slide");e.act(()=>{e.fireEvent.click(t)}),e.globalExpect(t).toHaveClass("disabled")}),e.it("navigates to specific page via indicator",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:2}));const t=e.screen.getAllByRole("button").filter(l=>{var u;return(u=l.getAttribute("aria-label"))==null?void 0:u.includes("Go to group")}),r=e.screen.getByLabelText("Previous slide");e.globalExpect(r).toBeDisabled(),e.act(()=>{e.fireEvent.click(t[2])}),e.globalExpect(r).not.toBeDisabled()})}),e.describe("Items Per Page",()=>{e.it("calculates correct number of pages",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:2}));const t=e.screen.getAllByRole("button").filter(r=>{var l;return(l=r.getAttribute("aria-label"))==null?void 0:l.includes("Go to group")});e.globalExpect(t.length).toBe(3)}),e.it("handles single item per page",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:1}));const t=e.screen.getAllByRole("button").filter(r=>{var l;return(l=r.getAttribute("aria-label"))==null?void 0:l.includes("Go to group")});e.globalExpect(t.length).toBe(6)}),e.it("handles itemsPerPage larger than items length",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:10})),e.globalExpect(e.screen.queryByLabelText("Previous slide")).not.toBeInTheDocument()})}),e.describe("Autoplay",()=>{e.it("does not advance without autoplay enabled",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3,autoplay:!1}));const t=e.screen.getByLabelText("Previous slide");e.act(()=>{e.vi.advanceTimersByTime(5e3)}),e.globalExpect(t).toBeDisabled()}),e.it("stops autoplay on manual navigation",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3,autoplay:!0,autoplayInterval:1}));const t=e.screen.getByLabelText("Next slide");e.act(()=>{e.fireEvent.click(t)}),e.globalExpect(t).toHaveClass("disabled"),e.act(()=>{e.vi.advanceTimersByTime(2e3)}),e.globalExpect(t).toHaveClass("disabled")})}),e.describe("Touch Gestures",()=>{e.it("sets up touch event handlers",()=>{const{container:t}=e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3})),r=t.querySelector('[class*="trackContainer"]');e.globalExpect(r).toBeInTheDocument()}),e.it("ignores small swipe gestures",()=>{const{container:t}=e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3})),r=t.querySelector('[class*="trackContainer"]'),l=e.screen.getByLabelText("Previous slide");e.act(()=>{e.fireEvent.touchStart(r,{touches:[{clientX:200,clientY:100}]}),e.fireEvent.touchEnd(r,{changedTouches:[{clientX:180,clientY:100}]})}),e.globalExpect(l).toBeDisabled()})}),e.describe("Mouse Drag",()=>{e.it("sets up mouse event handlers",()=>{const{container:t}=e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3})),r=t.querySelector('[class*="trackContainer"]');e.globalExpect(r).toBeInTheDocument()}),e.it("resets drag state on mouse leave",()=>{const{container:t}=e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3})),r=t.querySelector('[class*="trackContainer"]'),l=e.screen.getByLabelText("Previous slide");e.act(()=>{e.fireEvent.mouseDown(r,{clientX:200}),e.fireEvent.mouseMove(r,{clientX:150}),e.fireEvent.mouseLeave(r)}),e.globalExpect(l).toBeDisabled()}),e.it("ignores small drag movements",()=>{const{container:t}=e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3})),r=t.querySelector('[class*="trackContainer"]'),l=e.screen.getByLabelText("Previous slide");e.act(()=>{e.fireEvent.mouseDown(r,{clientX:200}),e.fireEvent.mouseMove(r,{clientX:180}),e.fireEvent.mouseUp(r)}),e.globalExpect(l).toBeDisabled()})}),e.describe("Grid Layout",()=>{e.it("uses grid layout for multiple rows",()=>{const{container:t}=e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:6,itemsPerRow:3})),r=t.querySelector('[class*="page"]');e.globalExpect(r).toHaveStyle({display:"grid"})}),e.it("uses flex layout for single row",()=>{const{container:t}=e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3,itemsPerRow:3})),r=t.querySelector('[class*="page"]');e.globalExpect(r).toHaveStyle({display:"flex"})})}),e.describe("Accessibility",()=>{e.it("has proper aria labels on navigation buttons",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3})),e.globalExpect(e.screen.getByLabelText("Previous slide")).toBeInTheDocument(),e.globalExpect(e.screen.getByLabelText("Next slide")).toBeInTheDocument()}),e.it("has proper aria labels on indicators",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3})),e.globalExpect(e.screen.getByLabelText("Go to group 1")).toBeInTheDocument(),e.globalExpect(e.screen.getByLabelText("Go to group 2")).toBeInTheDocument()}),e.it("properly disables navigation buttons",()=>{e.render(o.jsx(n.Carousel,{items:i,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Previous slide"),r=e.screen.getByLabelText("Next slide");e.globalExpect(t).toBeDisabled(),e.globalExpect(r).not.toBeDisabled()})}),e.describe("Split Layout",()=>{e.it("handles split layout with sibling ref",()=>{const t=b.createRef(),r=document.createElement("div");Object.defineProperty(r,"offsetWidth",{value:200,configurable:!0}),t.current=r,e.render(o.jsx(n.Carousel,{items:i,parentRef:s,siblingRef:t,isSplit:!0,itemsPerPage:3})),e.globalExpect(e.screen.getByText("Item 1")).toBeInTheDocument()})})});
1
+ "use strict";var d=Object.defineProperty;var u=(s,n,a)=>n in s?d(s,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):s[n]=a;var c=(s,n,a)=>u(s,typeof n!="symbol"?n+"":n,a);const r=require("react/jsx-runtime"),e=require("../../../index-DITXfOUM.cjs"),i=require("./index.cjs"),g=require("react");e.vi.mock("lucide-react",()=>({ArrowLeft:({size:s})=>r.jsx("div",{"data-testid":"arrow-left",style:{width:s,height:s},children:"←"}),ArrowRight:({size:s})=>r.jsx("div",{"data-testid":"arrow-right",style:{width:s,height:s},children:"→"})}));class b{constructor(n){c(this,"callback");c(this,"observe",e.vi.fn(n=>{const a={target:n,contentRect:{width:800,height:400,top:0,left:0,bottom:400,right:800,x:0,y:0,toJSON:()=>({})},borderBoxSize:[],contentBoxSize:[],devicePixelContentBoxSize:[]};this.callback([a],this)}));c(this,"unobserve",e.vi.fn());c(this,"disconnect",e.vi.fn());this.callback=n}}global.ResizeObserver=b;e.describe("Carousel",()=>{let s,n;e.beforeEach(()=>{e.vi.useFakeTimers(),n=document.createElement("div"),Object.defineProperty(n,"offsetWidth",{value:800,configurable:!0}),document.body.appendChild(n),s={current:n},HTMLElement.prototype.getBoundingClientRect=e.vi.fn(function(){return{width:this.offsetWidth||800,height:this.offsetHeight||400,top:0,left:0,bottom:this.offsetHeight||400,right:this.offsetWidth||800,x:0,y:0,toJSON:()=>{}}})}),e.afterEach(()=>{e.vi.runOnlyPendingTimers(),e.vi.useRealTimers(),document.body.removeChild(n)});const a=[r.jsx("div",{children:"Item 1"},"1"),r.jsx("div",{children:"Item 2"},"2"),r.jsx("div",{children:"Item 3"},"3"),r.jsx("div",{children:"Item 4"},"4"),r.jsx("div",{children:"Item 5"},"5"),r.jsx("div",{children:"Item 6"},"6")];e.describe("Rendering",()=>{e.it("renders carousel with items",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s})),e.globalExpect(e.screen.getByText("Item 1")).toBeInTheDocument()}),e.it("renders navigation controls for multiple pages",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),e.globalExpect(e.screen.getByLabelText("Previous slide")).toBeInTheDocument(),e.globalExpect(e.screen.getByLabelText("Next slide")).toBeInTheDocument()}),e.it("renders indicators for multiple pages",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getAllByRole("tab");e.globalExpect(t.length).toBe(2)}),e.it("does not render controls for single page",()=>{e.render(r.jsx(i.Carousel,{items:[a[0]],parentRef:s,itemsPerPage:3})),e.globalExpect(e.screen.queryByLabelText("Previous slide")).not.toBeInTheDocument(),e.globalExpect(e.screen.queryByLabelText("Next slide")).not.toBeInTheDocument()}),e.it("applies custom className",()=>{const{container:t}=e.render(r.jsx(i.Carousel,{items:a,parentRef:s,className:"custom-carousel"}));e.globalExpect(t.querySelector(".custom-carousel")).toBeInTheDocument()})}),e.describe("Navigation",()=>{e.it("enables previous button after navigating forward",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Next slide"),o=e.screen.getByLabelText("Previous slide");e.globalExpect(o).toBeDisabled(),e.act(()=>{e.fireEvent.click(t)}),e.globalExpect(o).not.toBeDisabled()}),e.it("navigates back to first page",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Next slide"),o=e.screen.getByLabelText("Previous slide");e.act(()=>{e.fireEvent.click(t)}),e.globalExpect(o).not.toBeDisabled(),e.act(()=>{e.fireEvent.click(o)}),e.globalExpect(o).toBeDisabled()}),e.it("disables previous button on first page",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Previous slide");e.globalExpect(t).toBeDisabled(),e.globalExpect(t).toHaveClass("disabled")}),e.it("disables next button on last page",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Next slide");e.act(()=>{e.fireEvent.click(t)}),e.globalExpect(t).toHaveClass("disabled")}),e.it("navigates to specific page via indicator",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:2}));const t=e.screen.getAllByRole("tab"),o=e.screen.getByLabelText("Previous slide");e.globalExpect(o).toBeDisabled(),e.act(()=>{e.fireEvent.click(t[2])}),e.globalExpect(o).not.toBeDisabled()})}),e.describe("Items Per Page",()=>{e.it("calculates correct number of pages",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:2}));const t=e.screen.getAllByRole("tab");e.globalExpect(t.length).toBe(3)}),e.it("handles single item per page",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:1}));const t=e.screen.getAllByRole("tab");e.globalExpect(t.length).toBe(6)}),e.it("handles itemsPerPage larger than items length",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:10})),e.globalExpect(e.screen.queryByLabelText("Previous slide")).not.toBeInTheDocument()})}),e.describe("Autoplay",()=>{e.it("does not advance without autoplay enabled",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3,autoplay:!1}));const t=e.screen.getByLabelText("Previous slide");e.act(()=>{e.vi.advanceTimersByTime(5e3)}),e.globalExpect(t).toBeDisabled()}),e.it("stops autoplay on manual navigation",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3,autoplay:!0,autoplayInterval:1}));const t=e.screen.getByLabelText("Next slide");e.act(()=>{e.fireEvent.click(t)}),e.globalExpect(t).toHaveClass("disabled"),e.act(()=>{e.vi.advanceTimersByTime(2e3)}),e.globalExpect(t).toHaveClass("disabled")})}),e.describe("Touch Gestures",()=>{e.it("sets up touch event handlers",()=>{const{container:t}=e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),o=t.querySelector('[class*="trackContainer"]');e.globalExpect(o).toBeInTheDocument()}),e.it("ignores small swipe gestures",()=>{const{container:t}=e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),o=t.querySelector('[class*="trackContainer"]'),l=e.screen.getByLabelText("Previous slide");e.act(()=>{e.fireEvent.touchStart(o,{touches:[{clientX:200,clientY:100}]}),e.fireEvent.touchEnd(o,{changedTouches:[{clientX:180,clientY:100}]})}),e.globalExpect(l).toBeDisabled()})}),e.describe("Mouse Drag",()=>{e.it("sets up mouse event handlers",()=>{const{container:t}=e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),o=t.querySelector('[class*="trackContainer"]');e.globalExpect(o).toBeInTheDocument()}),e.it("resets drag state on mouse leave",()=>{const{container:t}=e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),o=t.querySelector('[class*="trackContainer"]'),l=e.screen.getByLabelText("Previous slide");e.act(()=>{e.fireEvent.mouseDown(o,{clientX:200}),e.fireEvent.mouseMove(o,{clientX:150}),e.fireEvent.mouseLeave(o)}),e.globalExpect(l).toBeDisabled()}),e.it("ignores small drag movements",()=>{const{container:t}=e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),o=t.querySelector('[class*="trackContainer"]'),l=e.screen.getByLabelText("Previous slide");e.act(()=>{e.fireEvent.mouseDown(o,{clientX:200}),e.fireEvent.mouseMove(o,{clientX:180}),e.fireEvent.mouseUp(o)}),e.globalExpect(l).toBeDisabled()})}),e.describe("Grid Layout",()=>{e.it("uses grid layout for multiple rows",()=>{const{container:t}=e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:6,itemsPerRow:3})),o=t.querySelector('[class*="page"]');e.globalExpect(o).toHaveStyle({display:"grid"})}),e.it("uses flex layout for single row",()=>{const{container:t}=e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3,itemsPerRow:3})),o=t.querySelector('[class*="page"]');e.globalExpect(o).toHaveStyle({display:"flex"})})}),e.describe("Accessibility",()=>{e.it("has proper aria labels on navigation buttons",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),e.globalExpect(e.screen.getByLabelText("Previous slide")).toBeInTheDocument(),e.globalExpect(e.screen.getByLabelText("Next slide")).toBeInTheDocument()}),e.it("has proper aria labels on indicators",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),e.globalExpect(e.screen.getByRole("tab",{name:"Slide 1 of 2"})).toBeInTheDocument(),e.globalExpect(e.screen.getByRole("tab",{name:"Slide 2 of 2"})).toBeInTheDocument()}),e.it("renders indicators as tabs inside a tablist",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),e.globalExpect(e.screen.getByRole("tablist",{name:"Slide indicators"})).toBeInTheDocument();const t=e.screen.getAllByRole("tab");e.globalExpect(t).toHaveLength(2)}),e.it("marks only the active indicator as selected",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getAllByRole("tab");e.globalExpect(t[0]).toHaveAttribute("aria-selected","true"),e.globalExpect(t[1]).toHaveAttribute("aria-selected","false")}),e.it("active tab is focusable, inactive tabs are not in tab order",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getAllByRole("tab");e.globalExpect(t[0]).toHaveAttribute("tabindex","0"),e.globalExpect(t[1]).toHaveAttribute("tabindex","-1")}),e.it("updates aria-selected and tabindex when navigating via indicator click",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getAllByRole("tab");e.act(()=>{e.fireEvent.click(t[1])}),e.globalExpect(t[1]).toHaveAttribute("aria-selected","true"),e.globalExpect(t[1]).toHaveAttribute("tabindex","0"),e.globalExpect(t[0]).toHaveAttribute("aria-selected","false"),e.globalExpect(t[0]).toHaveAttribute("tabindex","-1")}),e.it("tabs have aria-controls pointing to the carousel track",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3})),e.screen.getAllByRole("tab").forEach(o=>{e.globalExpect(o).toHaveAttribute("aria-controls","carousel-track")})}),e.it("navigates indicators with arrow keys",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getAllByRole("tab");e.act(()=>{e.fireEvent.keyDown(t[0],{key:"ArrowRight"})}),e.globalExpect(t[1]).toHaveAttribute("aria-selected","true"),e.act(()=>{e.fireEvent.keyDown(t[1],{key:"ArrowLeft"})}),e.globalExpect(t[0]).toHaveAttribute("aria-selected","true")}),e.it("properly disables navigation buttons",()=>{e.render(r.jsx(i.Carousel,{items:a,parentRef:s,itemsPerPage:3}));const t=e.screen.getByLabelText("Previous slide"),o=e.screen.getByLabelText("Next slide");e.globalExpect(t).toBeDisabled(),e.globalExpect(o).not.toBeDisabled()})}),e.describe("Split Layout",()=>{e.it("handles split layout with sibling ref",()=>{const t=g.createRef(),o=document.createElement("div");Object.defineProperty(o,"offsetWidth",{value:200,configurable:!0}),t.current=o,e.render(r.jsx(i.Carousel,{items:a,parentRef:s,siblingRef:t,isSplit:!0,itemsPerPage:3})),e.globalExpect(e.screen.getByText("Item 1")).toBeInTheDocument()})})});
@@ -1,20 +1,20 @@
1
- var v = Object.defineProperty;
2
- var P = (t, u, a) => u in t ? v(t, u, { enumerable: !0, configurable: !0, writable: !0, value: a }) : t[u] = a;
3
- var h = (t, u, a) => P(t, typeof u != "symbol" ? u + "" : u, a);
4
- import { jsx as i } from "react/jsx-runtime";
5
- import { v as B, d as b, b as y, a as f, i as r, r as l, g as s, s as n, h as g, f as m } from "../../../index-BQV8LRFm.js";
1
+ var B = Object.defineProperty;
2
+ var y = (s, d, i) => d in s ? B(s, d, { enumerable: !0, configurable: !0, writable: !0, value: i }) : s[d] = i;
3
+ var h = (s, d, i) => y(s, typeof d != "symbol" ? d + "" : d, i);
4
+ import { jsx as a } from "react/jsx-runtime";
5
+ import { v as b, d as g, b as P, a as p, i as r, r as l, g as t, s as o, h as m, f as u } from "../../../index-BQV8LRFm.js";
6
6
  import { Carousel as c } from "./index.mjs";
7
- import x from "react";
8
- B.mock("lucide-react", () => ({
9
- ArrowLeft: ({ size: t }) => /* @__PURE__ */ i("div", { "data-testid": "arrow-left", style: { width: t, height: t }, children: "←" }),
10
- ArrowRight: ({ size: t }) => /* @__PURE__ */ i("div", { "data-testid": "arrow-right", style: { width: t, height: t }, children: "→" })
7
+ import f from "react";
8
+ b.mock("lucide-react", () => ({
9
+ ArrowLeft: ({ size: s }) => /* @__PURE__ */ a("div", { "data-testid": "arrow-left", style: { width: s, height: s }, children: "←" }),
10
+ ArrowRight: ({ size: s }) => /* @__PURE__ */ a("div", { "data-testid": "arrow-right", style: { width: s, height: s }, children: "→" })
11
11
  }));
12
- class T {
13
- constructor(u) {
12
+ class x {
13
+ constructor(d) {
14
14
  h(this, "callback");
15
- h(this, "observe", B.fn((u) => {
16
- const a = {
17
- target: u,
15
+ h(this, "observe", b.fn((d) => {
16
+ const i = {
17
+ target: d,
18
18
  contentRect: {
19
19
  width: 800,
20
20
  height: 400,
@@ -30,21 +30,21 @@ class T {
30
30
  contentBoxSize: [],
31
31
  devicePixelContentBoxSize: []
32
32
  };
33
- this.callback([a], this);
33
+ this.callback([i], this);
34
34
  }));
35
- h(this, "unobserve", B.fn());
36
- h(this, "disconnect", B.fn());
37
- this.callback = u;
35
+ h(this, "unobserve", b.fn());
36
+ h(this, "disconnect", b.fn());
37
+ this.callback = d;
38
38
  }
39
39
  }
40
- global.ResizeObserver = T;
41
- b("Carousel", () => {
42
- let t, u;
43
- y(() => {
44
- B.useFakeTimers(), u = document.createElement("div"), Object.defineProperty(u, "offsetWidth", {
40
+ global.ResizeObserver = x;
41
+ g("Carousel", () => {
42
+ let s, d;
43
+ P(() => {
44
+ b.useFakeTimers(), d = document.createElement("div"), Object.defineProperty(d, "offsetWidth", {
45
45
  value: 800,
46
46
  configurable: !0
47
- }), document.body.appendChild(u), t = { current: u }, HTMLElement.prototype.getBoundingClientRect = B.fn(function() {
47
+ }), document.body.appendChild(d), s = { current: d }, HTMLElement.prototype.getBoundingClientRect = b.fn(function() {
48
48
  return {
49
49
  width: this.offsetWidth || 800,
50
50
  height: this.offsetHeight || 400,
@@ -58,282 +58,310 @@ b("Carousel", () => {
58
58
  }
59
59
  };
60
60
  });
61
- }), f(() => {
62
- B.runOnlyPendingTimers(), B.useRealTimers(), document.body.removeChild(u);
61
+ }), p(() => {
62
+ b.runOnlyPendingTimers(), b.useRealTimers(), document.body.removeChild(d);
63
63
  });
64
- const a = [
65
- /* @__PURE__ */ i("div", { children: "Item 1" }, "1"),
66
- /* @__PURE__ */ i("div", { children: "Item 2" }, "2"),
67
- /* @__PURE__ */ i("div", { children: "Item 3" }, "3"),
68
- /* @__PURE__ */ i("div", { children: "Item 4" }, "4"),
69
- /* @__PURE__ */ i("div", { children: "Item 5" }, "5"),
70
- /* @__PURE__ */ i("div", { children: "Item 6" }, "6")
64
+ const i = [
65
+ /* @__PURE__ */ a("div", { children: "Item 1" }, "1"),
66
+ /* @__PURE__ */ a("div", { children: "Item 2" }, "2"),
67
+ /* @__PURE__ */ a("div", { children: "Item 3" }, "3"),
68
+ /* @__PURE__ */ a("div", { children: "Item 4" }, "4"),
69
+ /* @__PURE__ */ a("div", { children: "Item 5" }, "5"),
70
+ /* @__PURE__ */ a("div", { children: "Item 6" }, "6")
71
71
  ];
72
- b("Rendering", () => {
72
+ g("Rendering", () => {
73
73
  r("renders carousel with items", () => {
74
- l(/* @__PURE__ */ i(c, { items: a, parentRef: t })), s(n.getByText("Item 1")).toBeInTheDocument();
74
+ l(/* @__PURE__ */ a(c, { items: i, parentRef: s })), t(o.getByText("Item 1")).toBeInTheDocument();
75
75
  }), r("renders navigation controls for multiple pages", () => {
76
76
  l(
77
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
78
- ), s(n.getByLabelText("Previous slide")).toBeInTheDocument(), s(n.getByLabelText("Next slide")).toBeInTheDocument();
77
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
78
+ ), t(o.getByLabelText("Previous slide")).toBeInTheDocument(), t(o.getByLabelText("Next slide")).toBeInTheDocument();
79
79
  }), r("renders indicators for multiple pages", () => {
80
80
  l(
81
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
81
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
82
82
  );
83
- const e = n.getAllByRole("button").filter(
84
- (o) => {
85
- var d;
86
- return (d = o.getAttribute("aria-label")) == null ? void 0 : d.includes("Go to group");
87
- }
88
- );
89
- s(e.length).toBe(2);
83
+ const e = o.getAllByRole("tab");
84
+ t(e.length).toBe(2);
90
85
  }), r("does not render controls for single page", () => {
91
86
  l(
92
- /* @__PURE__ */ i(
87
+ /* @__PURE__ */ a(
93
88
  c,
94
89
  {
95
- items: [a[0]],
96
- parentRef: t,
90
+ items: [i[0]],
91
+ parentRef: s,
97
92
  itemsPerPage: 3
98
93
  }
99
94
  )
100
- ), s(n.queryByLabelText("Previous slide")).not.toBeInTheDocument(), s(n.queryByLabelText("Next slide")).not.toBeInTheDocument();
95
+ ), t(o.queryByLabelText("Previous slide")).not.toBeInTheDocument(), t(o.queryByLabelText("Next slide")).not.toBeInTheDocument();
101
96
  }), r("applies custom className", () => {
102
97
  const { container: e } = l(
103
- /* @__PURE__ */ i(
98
+ /* @__PURE__ */ a(
104
99
  c,
105
100
  {
106
- items: a,
107
- parentRef: t,
101
+ items: i,
102
+ parentRef: s,
108
103
  className: "custom-carousel"
109
104
  }
110
105
  )
111
106
  );
112
- s(e.querySelector(".custom-carousel")).toBeInTheDocument();
107
+ t(e.querySelector(".custom-carousel")).toBeInTheDocument();
113
108
  });
114
- }), b("Navigation", () => {
109
+ }), g("Navigation", () => {
115
110
  r("enables previous button after navigating forward", () => {
116
111
  l(
117
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
112
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
118
113
  );
119
- const e = n.getByLabelText("Next slide"), o = n.getByLabelText("Previous slide");
120
- s(o).toBeDisabled(), g(() => {
121
- m.click(e);
122
- }), s(o).not.toBeDisabled();
114
+ const e = o.getByLabelText("Next slide"), n = o.getByLabelText("Previous slide");
115
+ t(n).toBeDisabled(), m(() => {
116
+ u.click(e);
117
+ }), t(n).not.toBeDisabled();
123
118
  }), r("navigates back to first page", () => {
124
119
  l(
125
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
120
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
126
121
  );
127
- const e = n.getByLabelText("Next slide"), o = n.getByLabelText("Previous slide");
128
- g(() => {
129
- m.click(e);
130
- }), s(o).not.toBeDisabled(), g(() => {
131
- m.click(o);
132
- }), s(o).toBeDisabled();
122
+ const e = o.getByLabelText("Next slide"), n = o.getByLabelText("Previous slide");
123
+ m(() => {
124
+ u.click(e);
125
+ }), t(n).not.toBeDisabled(), m(() => {
126
+ u.click(n);
127
+ }), t(n).toBeDisabled();
133
128
  }), r("disables previous button on first page", () => {
134
129
  l(
135
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
130
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
136
131
  );
137
- const e = n.getByLabelText("Previous slide");
138
- s(e).toBeDisabled(), s(e).toHaveClass("disabled");
132
+ const e = o.getByLabelText("Previous slide");
133
+ t(e).toBeDisabled(), t(e).toHaveClass("disabled");
139
134
  }), r("disables next button on last page", () => {
140
135
  l(
141
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
136
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
142
137
  );
143
- const e = n.getByLabelText("Next slide");
144
- g(() => {
145
- m.click(e);
146
- }), s(e).toHaveClass("disabled");
138
+ const e = o.getByLabelText("Next slide");
139
+ m(() => {
140
+ u.click(e);
141
+ }), t(e).toHaveClass("disabled");
147
142
  }), r("navigates to specific page via indicator", () => {
148
143
  l(
149
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 2 })
144
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 2 })
150
145
  );
151
- const e = n.getAllByRole("button").filter(
152
- (d) => {
153
- var p;
154
- return (p = d.getAttribute("aria-label")) == null ? void 0 : p.includes("Go to group");
155
- }
156
- ), o = n.getByLabelText("Previous slide");
157
- s(o).toBeDisabled(), g(() => {
158
- m.click(e[2]);
159
- }), s(o).not.toBeDisabled();
146
+ const e = o.getAllByRole("tab"), n = o.getByLabelText("Previous slide");
147
+ t(n).toBeDisabled(), m(() => {
148
+ u.click(e[2]);
149
+ }), t(n).not.toBeDisabled();
160
150
  });
161
- }), b("Items Per Page", () => {
151
+ }), g("Items Per Page", () => {
162
152
  r("calculates correct number of pages", () => {
163
153
  l(
164
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 2 })
165
- );
166
- const e = n.getAllByRole("button").filter(
167
- (o) => {
168
- var d;
169
- return (d = o.getAttribute("aria-label")) == null ? void 0 : d.includes("Go to group");
170
- }
154
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 2 })
171
155
  );
172
- s(e.length).toBe(3);
156
+ const e = o.getAllByRole("tab");
157
+ t(e.length).toBe(3);
173
158
  }), r("handles single item per page", () => {
174
159
  l(
175
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 1 })
160
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 1 })
176
161
  );
177
- const e = n.getAllByRole("button").filter(
178
- (o) => {
179
- var d;
180
- return (d = o.getAttribute("aria-label")) == null ? void 0 : d.includes("Go to group");
181
- }
182
- );
183
- s(e.length).toBe(6);
162
+ const e = o.getAllByRole("tab");
163
+ t(e.length).toBe(6);
184
164
  }), r("handles itemsPerPage larger than items length", () => {
185
165
  l(
186
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 10 })
187
- ), s(n.queryByLabelText("Previous slide")).not.toBeInTheDocument();
166
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 10 })
167
+ ), t(o.queryByLabelText("Previous slide")).not.toBeInTheDocument();
188
168
  });
189
- }), b("Autoplay", () => {
169
+ }), g("Autoplay", () => {
190
170
  r("does not advance without autoplay enabled", () => {
191
171
  l(
192
- /* @__PURE__ */ i(
172
+ /* @__PURE__ */ a(
193
173
  c,
194
174
  {
195
- items: a,
196
- parentRef: t,
175
+ items: i,
176
+ parentRef: s,
197
177
  itemsPerPage: 3,
198
178
  autoplay: !1
199
179
  }
200
180
  )
201
181
  );
202
- const e = n.getByLabelText("Previous slide");
203
- g(() => {
204
- B.advanceTimersByTime(5e3);
205
- }), s(e).toBeDisabled();
182
+ const e = o.getByLabelText("Previous slide");
183
+ m(() => {
184
+ b.advanceTimersByTime(5e3);
185
+ }), t(e).toBeDisabled();
206
186
  }), r("stops autoplay on manual navigation", () => {
207
187
  l(
208
- /* @__PURE__ */ i(
188
+ /* @__PURE__ */ a(
209
189
  c,
210
190
  {
211
- items: a,
212
- parentRef: t,
191
+ items: i,
192
+ parentRef: s,
213
193
  itemsPerPage: 3,
214
194
  autoplay: !0,
215
195
  autoplayInterval: 1
216
196
  }
217
197
  )
218
198
  );
219
- const e = n.getByLabelText("Next slide");
220
- g(() => {
221
- m.click(e);
222
- }), s(e).toHaveClass("disabled"), g(() => {
223
- B.advanceTimersByTime(2e3);
224
- }), s(e).toHaveClass("disabled");
199
+ const e = o.getByLabelText("Next slide");
200
+ m(() => {
201
+ u.click(e);
202
+ }), t(e).toHaveClass("disabled"), m(() => {
203
+ b.advanceTimersByTime(2e3);
204
+ }), t(e).toHaveClass("disabled");
225
205
  });
226
- }), b("Touch Gestures", () => {
206
+ }), g("Touch Gestures", () => {
227
207
  r("sets up touch event handlers", () => {
228
208
  const { container: e } = l(
229
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
230
- ), o = e.querySelector(
209
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
210
+ ), n = e.querySelector(
231
211
  '[class*="trackContainer"]'
232
212
  );
233
- s(o).toBeInTheDocument();
213
+ t(n).toBeInTheDocument();
234
214
  }), r("ignores small swipe gestures", () => {
235
215
  const { container: e } = l(
236
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
237
- ), o = e.querySelector(
216
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
217
+ ), n = e.querySelector(
238
218
  '[class*="trackContainer"]'
239
- ), d = n.getByLabelText("Previous slide");
240
- g(() => {
241
- m.touchStart(o, {
219
+ ), v = o.getByLabelText("Previous slide");
220
+ m(() => {
221
+ u.touchStart(n, {
242
222
  touches: [{ clientX: 200, clientY: 100 }]
243
- }), m.touchEnd(o, {
223
+ }), u.touchEnd(n, {
244
224
  changedTouches: [{ clientX: 180, clientY: 100 }]
245
225
  });
246
- }), s(d).toBeDisabled();
226
+ }), t(v).toBeDisabled();
247
227
  });
248
- }), b("Mouse Drag", () => {
228
+ }), g("Mouse Drag", () => {
249
229
  r("sets up mouse event handlers", () => {
250
230
  const { container: e } = l(
251
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
252
- ), o = e.querySelector(
231
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
232
+ ), n = e.querySelector(
253
233
  '[class*="trackContainer"]'
254
234
  );
255
- s(o).toBeInTheDocument();
235
+ t(n).toBeInTheDocument();
256
236
  }), r("resets drag state on mouse leave", () => {
257
237
  const { container: e } = l(
258
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
259
- ), o = e.querySelector(
238
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
239
+ ), n = e.querySelector(
260
240
  '[class*="trackContainer"]'
261
- ), d = n.getByLabelText("Previous slide");
262
- g(() => {
263
- m.mouseDown(o, { clientX: 200 }), m.mouseMove(o, { clientX: 150 }), m.mouseLeave(o);
264
- }), s(d).toBeDisabled();
241
+ ), v = o.getByLabelText("Previous slide");
242
+ m(() => {
243
+ u.mouseDown(n, { clientX: 200 }), u.mouseMove(n, { clientX: 150 }), u.mouseLeave(n);
244
+ }), t(v).toBeDisabled();
265
245
  }), r("ignores small drag movements", () => {
266
246
  const { container: e } = l(
267
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
268
- ), o = e.querySelector(
247
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
248
+ ), n = e.querySelector(
269
249
  '[class*="trackContainer"]'
270
- ), d = n.getByLabelText("Previous slide");
271
- g(() => {
272
- m.mouseDown(o, { clientX: 200 }), m.mouseMove(o, { clientX: 180 }), m.mouseUp(o);
273
- }), s(d).toBeDisabled();
250
+ ), v = o.getByLabelText("Previous slide");
251
+ m(() => {
252
+ u.mouseDown(n, { clientX: 200 }), u.mouseMove(n, { clientX: 180 }), u.mouseUp(n);
253
+ }), t(v).toBeDisabled();
274
254
  });
275
- }), b("Grid Layout", () => {
255
+ }), g("Grid Layout", () => {
276
256
  r("uses grid layout for multiple rows", () => {
277
257
  const { container: e } = l(
278
- /* @__PURE__ */ i(
258
+ /* @__PURE__ */ a(
279
259
  c,
280
260
  {
281
- items: a,
282
- parentRef: t,
261
+ items: i,
262
+ parentRef: s,
283
263
  itemsPerPage: 6,
284
264
  itemsPerRow: 3
285
265
  }
286
266
  )
287
- ), o = e.querySelector('[class*="page"]');
288
- s(o).toHaveStyle({ display: "grid" });
267
+ ), n = e.querySelector('[class*="page"]');
268
+ t(n).toHaveStyle({ display: "grid" });
289
269
  }), r("uses flex layout for single row", () => {
290
270
  const { container: e } = l(
291
- /* @__PURE__ */ i(
271
+ /* @__PURE__ */ a(
292
272
  c,
293
273
  {
294
- items: a,
295
- parentRef: t,
274
+ items: i,
275
+ parentRef: s,
296
276
  itemsPerPage: 3,
297
277
  itemsPerRow: 3
298
278
  }
299
279
  )
300
- ), o = e.querySelector('[class*="page"]');
301
- s(o).toHaveStyle({ display: "flex" });
280
+ ), n = e.querySelector('[class*="page"]');
281
+ t(n).toHaveStyle({ display: "flex" });
302
282
  });
303
- }), b("Accessibility", () => {
283
+ }), g("Accessibility", () => {
304
284
  r("has proper aria labels on navigation buttons", () => {
305
285
  l(
306
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
307
- ), s(n.getByLabelText("Previous slide")).toBeInTheDocument(), s(n.getByLabelText("Next slide")).toBeInTheDocument();
286
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
287
+ ), t(o.getByLabelText("Previous slide")).toBeInTheDocument(), t(o.getByLabelText("Next slide")).toBeInTheDocument();
308
288
  }), r("has proper aria labels on indicators", () => {
309
289
  l(
310
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
311
- ), s(n.getByLabelText("Go to group 1")).toBeInTheDocument(), s(n.getByLabelText("Go to group 2")).toBeInTheDocument();
290
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
291
+ ), t(
292
+ o.getByRole("tab", { name: "Slide 1 of 2" })
293
+ ).toBeInTheDocument(), t(
294
+ o.getByRole("tab", { name: "Slide 2 of 2" })
295
+ ).toBeInTheDocument();
296
+ }), r("renders indicators as tabs inside a tablist", () => {
297
+ l(
298
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
299
+ ), t(
300
+ o.getByRole("tablist", { name: "Slide indicators" })
301
+ ).toBeInTheDocument();
302
+ const e = o.getAllByRole("tab");
303
+ t(e).toHaveLength(2);
304
+ }), r("marks only the active indicator as selected", () => {
305
+ l(
306
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
307
+ );
308
+ const e = o.getAllByRole("tab");
309
+ t(e[0]).toHaveAttribute("aria-selected", "true"), t(e[1]).toHaveAttribute("aria-selected", "false");
310
+ }), r("active tab is focusable, inactive tabs are not in tab order", () => {
311
+ l(
312
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
313
+ );
314
+ const e = o.getAllByRole("tab");
315
+ t(e[0]).toHaveAttribute("tabindex", "0"), t(e[1]).toHaveAttribute("tabindex", "-1");
316
+ }), r("updates aria-selected and tabindex when navigating via indicator click", () => {
317
+ l(
318
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
319
+ );
320
+ const e = o.getAllByRole("tab");
321
+ m(() => {
322
+ u.click(e[1]);
323
+ }), t(e[1]).toHaveAttribute("aria-selected", "true"), t(e[1]).toHaveAttribute("tabindex", "0"), t(e[0]).toHaveAttribute("aria-selected", "false"), t(e[0]).toHaveAttribute("tabindex", "-1");
324
+ }), r("tabs have aria-controls pointing to the carousel track", () => {
325
+ l(
326
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
327
+ ), o.getAllByRole("tab").forEach((n) => {
328
+ t(n).toHaveAttribute("aria-controls", "carousel-track");
329
+ });
330
+ }), r("navigates indicators with arrow keys", () => {
331
+ l(
332
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
333
+ );
334
+ const e = o.getAllByRole("tab");
335
+ m(() => {
336
+ u.keyDown(e[0], { key: "ArrowRight" });
337
+ }), t(e[1]).toHaveAttribute("aria-selected", "true"), m(() => {
338
+ u.keyDown(e[1], { key: "ArrowLeft" });
339
+ }), t(e[0]).toHaveAttribute("aria-selected", "true");
312
340
  }), r("properly disables navigation buttons", () => {
313
341
  l(
314
- /* @__PURE__ */ i(c, { items: a, parentRef: t, itemsPerPage: 3 })
342
+ /* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
315
343
  );
316
- const e = n.getByLabelText("Previous slide"), o = n.getByLabelText("Next slide");
317
- s(e).toBeDisabled(), s(o).not.toBeDisabled();
344
+ const e = o.getByLabelText("Previous slide"), n = o.getByLabelText("Next slide");
345
+ t(e).toBeDisabled(), t(n).not.toBeDisabled();
318
346
  });
319
- }), b("Split Layout", () => {
347
+ }), g("Split Layout", () => {
320
348
  r("handles split layout with sibling ref", () => {
321
- const e = x.createRef(), o = document.createElement("div");
322
- Object.defineProperty(o, "offsetWidth", {
349
+ const e = f.createRef(), n = document.createElement("div");
350
+ Object.defineProperty(n, "offsetWidth", {
323
351
  value: 200,
324
352
  configurable: !0
325
- }), e.current = o, l(
326
- /* @__PURE__ */ i(
353
+ }), e.current = n, l(
354
+ /* @__PURE__ */ a(
327
355
  c,
328
356
  {
329
- items: a,
330
- parentRef: t,
357
+ items: i,
358
+ parentRef: s,
331
359
  siblingRef: e,
332
360
  isSplit: !0,
333
361
  itemsPerPage: 3
334
362
  }
335
363
  )
336
- ), s(n.getByText("Item 1")).toBeInTheDocument();
364
+ ), t(o.getByText("Item 1")).toBeInTheDocument();
337
365
  });
338
366
  });
339
367
  });