quirk-ui 0.1.22 → 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.
- package/dist/{HeroSubComponents-CN_hjIAI.js → HeroSubComponents-DB8rb5AZ.js} +1 -1
- package/dist/{HeroSubComponents-CVVvQR0b.cjs → HeroSubComponents-LRh-1VyX.cjs} +1 -1
- package/dist/assets/index16.css +1 -1
- package/dist/core/components/Carousel/Carousel.test.cjs +1 -1
- package/dist/core/components/Carousel/Carousel.test.mjs +202 -174
- package/dist/core/components/Carousel/index.cjs +1 -1
- package/dist/core/components/Carousel/index.mjs +183 -167
- package/dist/core/components/NavBar/index.cjs +1 -1
- package/dist/core/components/NavBar/index.mjs +2 -0
- package/dist/core/context/ThemeContext.cjs +1 -1
- package/dist/core/context/ThemeContext.mjs +25 -19
- package/dist/next/blocks/HeroBlock/HeroSubComponents.cjs +1 -1
- package/dist/next/blocks/HeroBlock/HeroSubComponents.mjs +1 -1
- package/dist/next/blocks/HeroBlock/index.cjs +1 -1
- package/dist/next/blocks/HeroBlock/index.mjs +1 -1
- package/dist/styles.css +2 -2
- package/package.json +1 -1
|
@@ -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: "
|
|
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:"
|
|
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;
|
package/dist/assets/index16.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.
|
|
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
|
|
2
|
-
var
|
|
3
|
-
var h = (
|
|
4
|
-
import { jsx as
|
|
5
|
-
import { v as
|
|
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
|
|
8
|
-
|
|
9
|
-
ArrowLeft: ({ size:
|
|
10
|
-
ArrowRight: ({ size:
|
|
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
|
|
13
|
-
constructor(
|
|
12
|
+
class x {
|
|
13
|
+
constructor(d) {
|
|
14
14
|
h(this, "callback");
|
|
15
|
-
h(this, "observe",
|
|
16
|
-
const
|
|
17
|
-
target:
|
|
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([
|
|
33
|
+
this.callback([i], this);
|
|
34
34
|
}));
|
|
35
|
-
h(this, "unobserve",
|
|
36
|
-
h(this, "disconnect",
|
|
37
|
-
this.callback =
|
|
35
|
+
h(this, "unobserve", b.fn());
|
|
36
|
+
h(this, "disconnect", b.fn());
|
|
37
|
+
this.callback = d;
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
global.ResizeObserver =
|
|
41
|
-
|
|
42
|
-
let
|
|
43
|
-
|
|
44
|
-
|
|
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(
|
|
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
|
-
}),
|
|
62
|
-
|
|
61
|
+
}), p(() => {
|
|
62
|
+
b.runOnlyPendingTimers(), b.useRealTimers(), document.body.removeChild(d);
|
|
63
63
|
});
|
|
64
|
-
const
|
|
65
|
-
/* @__PURE__ */
|
|
66
|
-
/* @__PURE__ */
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
-
/* @__PURE__ */
|
|
70
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
72
|
+
g("Rendering", () => {
|
|
73
73
|
r("renders carousel with items", () => {
|
|
74
|
-
l(/* @__PURE__ */
|
|
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__ */
|
|
78
|
-
),
|
|
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__ */
|
|
81
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
82
82
|
);
|
|
83
|
-
const e =
|
|
84
|
-
|
|
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__ */
|
|
87
|
+
/* @__PURE__ */ a(
|
|
93
88
|
c,
|
|
94
89
|
{
|
|
95
|
-
items: [
|
|
96
|
-
parentRef:
|
|
90
|
+
items: [i[0]],
|
|
91
|
+
parentRef: s,
|
|
97
92
|
itemsPerPage: 3
|
|
98
93
|
}
|
|
99
94
|
)
|
|
100
|
-
),
|
|
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__ */
|
|
98
|
+
/* @__PURE__ */ a(
|
|
104
99
|
c,
|
|
105
100
|
{
|
|
106
|
-
items:
|
|
107
|
-
parentRef:
|
|
101
|
+
items: i,
|
|
102
|
+
parentRef: s,
|
|
108
103
|
className: "custom-carousel"
|
|
109
104
|
}
|
|
110
105
|
)
|
|
111
106
|
);
|
|
112
|
-
|
|
107
|
+
t(e.querySelector(".custom-carousel")).toBeInTheDocument();
|
|
113
108
|
});
|
|
114
|
-
}),
|
|
109
|
+
}), g("Navigation", () => {
|
|
115
110
|
r("enables previous button after navigating forward", () => {
|
|
116
111
|
l(
|
|
117
|
-
/* @__PURE__ */
|
|
112
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
118
113
|
);
|
|
119
|
-
const e =
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}),
|
|
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__ */
|
|
120
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
126
121
|
);
|
|
127
|
-
const e =
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}),
|
|
131
|
-
|
|
132
|
-
}),
|
|
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__ */
|
|
130
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
136
131
|
);
|
|
137
|
-
const e =
|
|
138
|
-
|
|
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__ */
|
|
136
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
142
137
|
);
|
|
143
|
-
const e =
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}),
|
|
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__ */
|
|
144
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 2 })
|
|
150
145
|
);
|
|
151
|
-
const e =
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
}),
|
|
151
|
+
}), g("Items Per Page", () => {
|
|
162
152
|
r("calculates correct number of pages", () => {
|
|
163
153
|
l(
|
|
164
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
160
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 1 })
|
|
176
161
|
);
|
|
177
|
-
const e =
|
|
178
|
-
|
|
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__ */
|
|
187
|
-
),
|
|
166
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 10 })
|
|
167
|
+
), t(o.queryByLabelText("Previous slide")).not.toBeInTheDocument();
|
|
188
168
|
});
|
|
189
|
-
}),
|
|
169
|
+
}), g("Autoplay", () => {
|
|
190
170
|
r("does not advance without autoplay enabled", () => {
|
|
191
171
|
l(
|
|
192
|
-
/* @__PURE__ */
|
|
172
|
+
/* @__PURE__ */ a(
|
|
193
173
|
c,
|
|
194
174
|
{
|
|
195
|
-
items:
|
|
196
|
-
parentRef:
|
|
175
|
+
items: i,
|
|
176
|
+
parentRef: s,
|
|
197
177
|
itemsPerPage: 3,
|
|
198
178
|
autoplay: !1
|
|
199
179
|
}
|
|
200
180
|
)
|
|
201
181
|
);
|
|
202
|
-
const e =
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}),
|
|
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__ */
|
|
188
|
+
/* @__PURE__ */ a(
|
|
209
189
|
c,
|
|
210
190
|
{
|
|
211
|
-
items:
|
|
212
|
-
parentRef:
|
|
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 =
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
}),
|
|
223
|
-
|
|
224
|
-
}),
|
|
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
|
-
}),
|
|
206
|
+
}), g("Touch Gestures", () => {
|
|
227
207
|
r("sets up touch event handlers", () => {
|
|
228
208
|
const { container: e } = l(
|
|
229
|
-
/* @__PURE__ */
|
|
230
|
-
),
|
|
209
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
210
|
+
), n = e.querySelector(
|
|
231
211
|
'[class*="trackContainer"]'
|
|
232
212
|
);
|
|
233
|
-
|
|
213
|
+
t(n).toBeInTheDocument();
|
|
234
214
|
}), r("ignores small swipe gestures", () => {
|
|
235
215
|
const { container: e } = l(
|
|
236
|
-
/* @__PURE__ */
|
|
237
|
-
),
|
|
216
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
217
|
+
), n = e.querySelector(
|
|
238
218
|
'[class*="trackContainer"]'
|
|
239
|
-
),
|
|
240
|
-
|
|
241
|
-
|
|
219
|
+
), v = o.getByLabelText("Previous slide");
|
|
220
|
+
m(() => {
|
|
221
|
+
u.touchStart(n, {
|
|
242
222
|
touches: [{ clientX: 200, clientY: 100 }]
|
|
243
|
-
}),
|
|
223
|
+
}), u.touchEnd(n, {
|
|
244
224
|
changedTouches: [{ clientX: 180, clientY: 100 }]
|
|
245
225
|
});
|
|
246
|
-
}),
|
|
226
|
+
}), t(v).toBeDisabled();
|
|
247
227
|
});
|
|
248
|
-
}),
|
|
228
|
+
}), g("Mouse Drag", () => {
|
|
249
229
|
r("sets up mouse event handlers", () => {
|
|
250
230
|
const { container: e } = l(
|
|
251
|
-
/* @__PURE__ */
|
|
252
|
-
),
|
|
231
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
232
|
+
), n = e.querySelector(
|
|
253
233
|
'[class*="trackContainer"]'
|
|
254
234
|
);
|
|
255
|
-
|
|
235
|
+
t(n).toBeInTheDocument();
|
|
256
236
|
}), r("resets drag state on mouse leave", () => {
|
|
257
237
|
const { container: e } = l(
|
|
258
|
-
/* @__PURE__ */
|
|
259
|
-
),
|
|
238
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
239
|
+
), n = e.querySelector(
|
|
260
240
|
'[class*="trackContainer"]'
|
|
261
|
-
),
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
}),
|
|
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__ */
|
|
268
|
-
),
|
|
247
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
248
|
+
), n = e.querySelector(
|
|
269
249
|
'[class*="trackContainer"]'
|
|
270
|
-
),
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}),
|
|
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
|
-
}),
|
|
255
|
+
}), g("Grid Layout", () => {
|
|
276
256
|
r("uses grid layout for multiple rows", () => {
|
|
277
257
|
const { container: e } = l(
|
|
278
|
-
/* @__PURE__ */
|
|
258
|
+
/* @__PURE__ */ a(
|
|
279
259
|
c,
|
|
280
260
|
{
|
|
281
|
-
items:
|
|
282
|
-
parentRef:
|
|
261
|
+
items: i,
|
|
262
|
+
parentRef: s,
|
|
283
263
|
itemsPerPage: 6,
|
|
284
264
|
itemsPerRow: 3
|
|
285
265
|
}
|
|
286
266
|
)
|
|
287
|
-
),
|
|
288
|
-
|
|
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__ */
|
|
271
|
+
/* @__PURE__ */ a(
|
|
292
272
|
c,
|
|
293
273
|
{
|
|
294
|
-
items:
|
|
295
|
-
parentRef:
|
|
274
|
+
items: i,
|
|
275
|
+
parentRef: s,
|
|
296
276
|
itemsPerPage: 3,
|
|
297
277
|
itemsPerRow: 3
|
|
298
278
|
}
|
|
299
279
|
)
|
|
300
|
-
),
|
|
301
|
-
|
|
280
|
+
), n = e.querySelector('[class*="page"]');
|
|
281
|
+
t(n).toHaveStyle({ display: "flex" });
|
|
302
282
|
});
|
|
303
|
-
}),
|
|
283
|
+
}), g("Accessibility", () => {
|
|
304
284
|
r("has proper aria labels on navigation buttons", () => {
|
|
305
285
|
l(
|
|
306
|
-
/* @__PURE__ */
|
|
307
|
-
),
|
|
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__ */
|
|
311
|
-
),
|
|
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__ */
|
|
342
|
+
/* @__PURE__ */ a(c, { items: i, parentRef: s, itemsPerPage: 3 })
|
|
315
343
|
);
|
|
316
|
-
const e =
|
|
317
|
-
|
|
344
|
+
const e = o.getByLabelText("Previous slide"), n = o.getByLabelText("Next slide");
|
|
345
|
+
t(e).toBeDisabled(), t(n).not.toBeDisabled();
|
|
318
346
|
});
|
|
319
|
-
}),
|
|
347
|
+
}), g("Split Layout", () => {
|
|
320
348
|
r("handles split layout with sibling ref", () => {
|
|
321
|
-
const e =
|
|
322
|
-
Object.defineProperty(
|
|
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 =
|
|
326
|
-
/* @__PURE__ */
|
|
353
|
+
}), e.current = n, l(
|
|
354
|
+
/* @__PURE__ */ a(
|
|
327
355
|
c,
|
|
328
356
|
{
|
|
329
|
-
items:
|
|
330
|
-
parentRef:
|
|
357
|
+
items: i,
|
|
358
|
+
parentRef: s,
|
|
331
359
|
siblingRef: e,
|
|
332
360
|
isSplit: !0,
|
|
333
361
|
itemsPerPage: 3
|
|
334
362
|
}
|
|
335
363
|
)
|
|
336
|
-
),
|
|
364
|
+
), t(o.getByText("Item 1")).toBeInTheDocument();
|
|
337
365
|
});
|
|
338
366
|
});
|
|
339
367
|
});
|