feat: add carousel
							parent
							
								
									e6367f26cb
								
							
						
					
					
						commit
						dcf2048231
					
				
							
								
								
									
										3
									
								
								.jest.js
								
								
								
								
							
							
						
						
									
										3
									
								
								.jest.js
								
								
								
								
							| 
						 | 
				
			
			@ -14,7 +14,8 @@ module.exports = {
 | 
			
		|||
    "jsx",
 | 
			
		||||
    "json",
 | 
			
		||||
    "vue",
 | 
			
		||||
    "md"
 | 
			
		||||
    "md",
 | 
			
		||||
    "jpg"
 | 
			
		||||
  ],
 | 
			
		||||
  modulePathIgnorePatterns: [
 | 
			
		||||
    '/_site/',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,318 @@
 | 
			
		|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
 | 
			
		||||
 | 
			
		||||
exports[`renders ./components/carousel/demo/autoplay.md correctly 1`] = `
 | 
			
		||||
<div class="ant-carousel">
 | 
			
		||||
  <div class="slick-slider slick-initialized">
 | 
			
		||||
    <div class="slick-list">
 | 
			
		||||
      <div class="slick-track" style="width: 900%; left: -100%;">
 | 
			
		||||
        <div tabindex="-1" data-index="-1" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="0" class="slick-slide slick-active slick-current" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>1</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="1" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>2</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="2" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>3</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="3" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="4" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>1</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="5" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>2</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="6" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>3</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="7" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <ul class="slick-dots" style="display: block;">
 | 
			
		||||
      <li class="slick-active">
 | 
			
		||||
        <button class="">1</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">2</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">3</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">4</button>
 | 
			
		||||
      </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
exports[`renders ./components/carousel/demo/basic.md correctly 1`] = `
 | 
			
		||||
<div class="ant-carousel">
 | 
			
		||||
  <div class="slick-slider slick-initialized">
 | 
			
		||||
    <div class="slick-list">
 | 
			
		||||
      <div class="slick-track" style="width: 900%; left: -100%;">
 | 
			
		||||
        <div tabindex="-1" data-index="-1" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="0" class="slick-slide slick-active slick-current" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>1</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="1" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>2</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="2" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>3</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="3" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="4" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>1</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="5" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>2</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="6" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>3</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="7" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <ul class="slick-dots" style="display: block;">
 | 
			
		||||
      <li class="slick-active">
 | 
			
		||||
        <button class="">1</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">2</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">3</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">4</button>
 | 
			
		||||
      </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
exports[`renders ./components/carousel/demo/fade.md correctly 1`] = `
 | 
			
		||||
<div class="ant-carousel">
 | 
			
		||||
  <div class="slick-slider slick-initialized">
 | 
			
		||||
    <div class="slick-list">
 | 
			
		||||
      <div class="slick-track" style="width: 900%; left: -100%;">
 | 
			
		||||
        <div tabindex="-1" data-index="0" class="slick-slide slick-active slick-current" style="outline: none; width: 11.11111111111111%; position: relative; left: 0px; opacity: 1;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>1</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="1" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%; position: relative; left: -11px; opacity: 0;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>2</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="2" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%; position: relative; left: -22px; opacity: 0;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>3</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="3" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%; position: relative; left: -33px; opacity: 0;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <ul class="slick-dots" style="display: block;">
 | 
			
		||||
      <li class="slick-active">
 | 
			
		||||
        <button class="">1</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">2</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">3</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">4</button>
 | 
			
		||||
      </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
exports[`renders ./components/carousel/demo/vertical.md correctly 1`] = `
 | 
			
		||||
<div class="ant-carousel ant-carousel-vertical">
 | 
			
		||||
  <div class="slick-slider slick-vertical slick-initialized">
 | 
			
		||||
    <div class="slick-list">
 | 
			
		||||
      <div class="slick-track" style="width: 900%; left: -100%;">
 | 
			
		||||
        <div tabindex="-1" data-index="-1" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="0" class="slick-slide slick-active slick-current" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>1</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="1" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>2</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="2" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>3</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="3" aria-hidden="true" class="slick-slide" style="outline: none; width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="4" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>1</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="5" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>2</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="6" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>3</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div tabindex="-1" data-index="7" aria-hidden="true" class="slick-slide slick-cloned" style="width: 11.11111111111111%;">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div tabindex="-1" class="" style="width: 100%; display: inline-block;">
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <ul class="slick-dots" style="display: block;">
 | 
			
		||||
      <li class="slick-active">
 | 
			
		||||
        <button class="">1</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">2</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">3</button>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li class="">
 | 
			
		||||
        <button class="">4</button>
 | 
			
		||||
      </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
`;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
import demoTest from '../../../tests/shared/demoTest'
 | 
			
		||||
 | 
			
		||||
demoTest('carousel', { skip: ['customPaging.md'] })
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
import { mount } from '@vue/test-utils'
 | 
			
		||||
import { asyncExpect } from '@/tests/utils'
 | 
			
		||||
import Carousel from '..'
 | 
			
		||||
 | 
			
		||||
describe('Carousel', () => {
 | 
			
		||||
  it('should has innerSlider', () => {
 | 
			
		||||
    const props = {
 | 
			
		||||
      slots: {
 | 
			
		||||
        default: '<div />',
 | 
			
		||||
      },
 | 
			
		||||
      sync: true,
 | 
			
		||||
    }
 | 
			
		||||
    const wrapper = mount(Carousel, props)
 | 
			
		||||
    const { innerSlider, $refs } = wrapper.vm
 | 
			
		||||
    const innerSliderFromRefs = $refs.slick.innerSlider
 | 
			
		||||
    expect(innerSlider).toBe(innerSliderFromRefs)
 | 
			
		||||
    expect(typeof innerSlider.slickNext).toBe('function')
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('should has prev, next and go function', async () => {
 | 
			
		||||
    const props = {
 | 
			
		||||
      slots: {
 | 
			
		||||
        default: '<div>1</div><div>2</div><div>3</div>',
 | 
			
		||||
      },
 | 
			
		||||
      sync: true,
 | 
			
		||||
    }
 | 
			
		||||
    const wrapper = mount(Carousel, props)
 | 
			
		||||
    const { prev, next, goTo } = wrapper.vm
 | 
			
		||||
    expect(typeof prev).toBe('function')
 | 
			
		||||
    expect(typeof next).toBe('function')
 | 
			
		||||
    expect(typeof goTo).toBe('function')
 | 
			
		||||
    const slick = wrapper.vm.$refs.slick
 | 
			
		||||
 | 
			
		||||
    expect(slick.innerSlider.currentSlide).toBe(0)
 | 
			
		||||
    wrapper.vm.goTo(2)
 | 
			
		||||
    await asyncExpect(() => {
 | 
			
		||||
      expect(slick.innerSlider.currentSlide).toBe(2)
 | 
			
		||||
    }, 1000)
 | 
			
		||||
    prev()
 | 
			
		||||
    await asyncExpect(() => {
 | 
			
		||||
      expect(slick.innerSlider.currentSlide).toBe(1)
 | 
			
		||||
    }, 1000)
 | 
			
		||||
 | 
			
		||||
    next()
 | 
			
		||||
 | 
			
		||||
    await asyncExpect(() => {
 | 
			
		||||
      expect(slick.innerSlider.currentSlide).toBe(2)
 | 
			
		||||
    }, 1000)
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('should trigger autoPlay after window resize', async () => {
 | 
			
		||||
    const props = {
 | 
			
		||||
      propsData: {
 | 
			
		||||
        autoplay: true,
 | 
			
		||||
      },
 | 
			
		||||
      slots: {
 | 
			
		||||
        default: '<div>1</div><div>2</div><div>3</div>',
 | 
			
		||||
      },
 | 
			
		||||
      sync: true,
 | 
			
		||||
    }
 | 
			
		||||
    const wrapper = mount(Carousel, props)
 | 
			
		||||
    const spy = jest.spyOn(wrapper.vm.$refs.slick.innerSlider, 'handleAutoPlay')
 | 
			
		||||
    window.resizeTo(1000)
 | 
			
		||||
    expect(spy).not.toBeCalled()
 | 
			
		||||
    await new Promise(resolve => setTimeout(resolve, 1000))
 | 
			
		||||
    expect(spy).toBeCalled()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('cancel resize listener when unmount', async () => {
 | 
			
		||||
    const props = {
 | 
			
		||||
      propsData: {
 | 
			
		||||
        autoplay: true,
 | 
			
		||||
      },
 | 
			
		||||
      slots: {
 | 
			
		||||
        default: '<div>1</div><div>2</div><div>3</div>',
 | 
			
		||||
      },
 | 
			
		||||
      sync: true,
 | 
			
		||||
    }
 | 
			
		||||
    const wrapper = mount(Carousel, props)
 | 
			
		||||
    const onWindowResized = wrapper.vm.onWindowResized
 | 
			
		||||
    const spy = jest.spyOn(wrapper.vm.onWindowResized, 'cancel')
 | 
			
		||||
    const spy2 = jest.spyOn(window, 'removeEventListener')
 | 
			
		||||
    wrapper.destroy()
 | 
			
		||||
    expect(spy).toBeCalled()
 | 
			
		||||
    expect(spy2).toBeCalledWith('resize', onWindowResized)
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
<cn>
 | 
			
		||||
#### 自动切换
 | 
			
		||||
定时切换下一张。
 | 
			
		||||
</cn>
 | 
			
		||||
 | 
			
		||||
<us>
 | 
			
		||||
#### Scroll automatically
 | 
			
		||||
Timing of scrolling to the next card/picture.
 | 
			
		||||
</us>
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<template>
 | 
			
		||||
  <a-carousel autoplay>
 | 
			
		||||
    <div><h3>1</h3></div>
 | 
			
		||||
    <div><h3>2</h3></div>
 | 
			
		||||
    <div><h3>3</h3></div>
 | 
			
		||||
    <div><h3>4</h3></div>
 | 
			
		||||
  </a-carousel>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped>
 | 
			
		||||
/* For demo */
 | 
			
		||||
.ant-carousel >>> .slick-slide {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  height: 160px;
 | 
			
		||||
  line-height: 160px;
 | 
			
		||||
  background: #364d79;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ant-carousel >>> .slick-slide h3 {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
<cn>
 | 
			
		||||
#### 基本
 | 
			
		||||
最简单的用法。
 | 
			
		||||
</cn>
 | 
			
		||||
 | 
			
		||||
<us>
 | 
			
		||||
#### Basic
 | 
			
		||||
Basic usage.
 | 
			
		||||
</us>
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<template>
 | 
			
		||||
  <a-carousel :afterChange="onChange">
 | 
			
		||||
    <div><h3>1</h3></div>
 | 
			
		||||
    <div><h3>2</h3></div>
 | 
			
		||||
    <div><h3>3</h3></div>
 | 
			
		||||
    <div><h3>4</h3></div>
 | 
			
		||||
  </a-carousel>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  methods: {
 | 
			
		||||
    onChange (a, b, c) {
 | 
			
		||||
      console.log(a, b, c)
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped>
 | 
			
		||||
/* For demo */
 | 
			
		||||
.ant-carousel >>> .slick-slide {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  height: 160px;
 | 
			
		||||
  line-height: 160px;
 | 
			
		||||
  background: #364d79;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ant-carousel >>> .slick-slide  h3 {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
<cn>
 | 
			
		||||
#### 自定义分页
 | 
			
		||||
自定义分页展示。
 | 
			
		||||
</cn>
 | 
			
		||||
 | 
			
		||||
<us>
 | 
			
		||||
#### Custom Paging
 | 
			
		||||
Custom paging display
 | 
			
		||||
</us>
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<template>
 | 
			
		||||
  <a-carousel arrows dotsClass="slick-dots slick-thumb">
 | 
			
		||||
    <a slot="customPaging" slot-scope="props">
 | 
			
		||||
      <img :src="getImgUrl(props.i)" />
 | 
			
		||||
    </a>
 | 
			
		||||
    <div>
 | 
			
		||||
      <img :src="imgList['abstract01']" />
 | 
			
		||||
    </div>
 | 
			
		||||
    <div>
 | 
			
		||||
      <img :src="imgList['abstract02']" />
 | 
			
		||||
    </div>
 | 
			
		||||
    <div>
 | 
			
		||||
      <img :src="imgList['abstract03']" />
 | 
			
		||||
    </div>
 | 
			
		||||
    <div>
 | 
			
		||||
      <img :src="imgList['abstract04']" />
 | 
			
		||||
    </div>
 | 
			
		||||
  </a-carousel>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import imgList from '../../vc-slick/demo/imglist'
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      imgList,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getImgUrl(i) {
 | 
			
		||||
      return this.imgList[`abstract0${i + 1}`]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped>
 | 
			
		||||
/* For demo */
 | 
			
		||||
.ant-carousel >>> .slick-dots {
 | 
			
		||||
  height: auto
 | 
			
		||||
}
 | 
			
		||||
.ant-carousel >>> .slick-slide img{
 | 
			
		||||
    border: 5px solid #FFF;
 | 
			
		||||
    display: block;
 | 
			
		||||
    margin: auto;
 | 
			
		||||
    max-width: 80%;
 | 
			
		||||
}
 | 
			
		||||
.ant-carousel >>> .slick-thumb {
 | 
			
		||||
  bottom: -45px;
 | 
			
		||||
}
 | 
			
		||||
.ant-carousel >>> .slick-thumb li {
 | 
			
		||||
  width: 60px;
 | 
			
		||||
  height: 45px;
 | 
			
		||||
}
 | 
			
		||||
.ant-carousel >>> .slick-thumb li img {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  filter: grayscale(100%);
 | 
			
		||||
}
 | 
			
		||||
.ant-carousel >>> .slick-thumb li.slick-active img{
 | 
			
		||||
    filter: grayscale(0%);
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
<cn>
 | 
			
		||||
#### 渐显
 | 
			
		||||
切换效果为渐显。
 | 
			
		||||
</cn>
 | 
			
		||||
 | 
			
		||||
<us>
 | 
			
		||||
#### Fade in
 | 
			
		||||
Slides use fade for transition.
 | 
			
		||||
</us>
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<template>
 | 
			
		||||
  <a-carousel effect="fade">
 | 
			
		||||
    <div><h3>1</h3></div>
 | 
			
		||||
    <div><h3>2</h3></div>
 | 
			
		||||
    <div><h3>3</h3></div>
 | 
			
		||||
    <div><h3>4</h3></div>
 | 
			
		||||
  </a-carousel>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped>
 | 
			
		||||
/* For demo */
 | 
			
		||||
.ant-carousel >>> .slick-slide {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  height: 160px;
 | 
			
		||||
  line-height: 160px;
 | 
			
		||||
  background: #364d79;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ant-carousel >>> .slick-slide h3 {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
<script>
 | 
			
		||||
import Basic from './basic'
 | 
			
		||||
import Fade from './fade'
 | 
			
		||||
import Autoplay from './autoplay'
 | 
			
		||||
import Vertical from './vertical'
 | 
			
		||||
import CustomPaging from './customPaging'
 | 
			
		||||
 | 
			
		||||
import CN from '../index.zh-CN.md'
 | 
			
		||||
import US from '../index.en-US.md'
 | 
			
		||||
 | 
			
		||||
import '../style'
 | 
			
		||||
 | 
			
		||||
const md = {
 | 
			
		||||
  cn: `# 旋转木马,一组轮播的区域。
 | 
			
		||||
       ## 何时使用
 | 
			
		||||
 | 
			
		||||
      - 当有一组平级的内容。
 | 
			
		||||
      - 当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。
 | 
			
		||||
      - 常用于一组图片或卡片轮播。
 | 
			
		||||
       ## 代码演示
 | 
			
		||||
        `,
 | 
			
		||||
  us: `# A carousel component. Scales with its container.
 | 
			
		||||
       ## When To Use
 | 
			
		||||
 | 
			
		||||
      - When there is a group of content on the same level.
 | 
			
		||||
      - When there is insufficient content space, it can be used to save space in the form of a revolving door.
 | 
			
		||||
      - Commonly used for a group of pictures/cards.
 | 
			
		||||
       ## Examples
 | 
			
		||||
        `,
 | 
			
		||||
}
 | 
			
		||||
export default {
 | 
			
		||||
  category: 'Components',
 | 
			
		||||
  type: 'Data Display',
 | 
			
		||||
  title: 'Carousel',
 | 
			
		||||
  subtitle: '走马灯',
 | 
			
		||||
  render () {
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <md cn={md.cn} us={md.us} />
 | 
			
		||||
        <Basic />
 | 
			
		||||
        <Vertical />
 | 
			
		||||
        <Fade />
 | 
			
		||||
        <Autoplay />
 | 
			
		||||
        <CustomPaging />
 | 
			
		||||
        <api>
 | 
			
		||||
          <CN slot='cn' />
 | 
			
		||||
          <US />
 | 
			
		||||
        </api>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
<cn>
 | 
			
		||||
#### 垂直
 | 
			
		||||
垂直显示。
 | 
			
		||||
</cn>
 | 
			
		||||
 | 
			
		||||
<us>
 | 
			
		||||
#### Vertical
 | 
			
		||||
Vertical pagination.
 | 
			
		||||
</us>
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<template>
 | 
			
		||||
  <a-carousel vertical>
 | 
			
		||||
    <div><h3>1</h3></div>
 | 
			
		||||
    <div><h3>2</h3></div>
 | 
			
		||||
    <div><h3>3</h3></div>
 | 
			
		||||
    <div><h3>4</h3></div>
 | 
			
		||||
  </a-carousel>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped>
 | 
			
		||||
/* For demo */
 | 
			
		||||
.ant-carousel >>> .slick-slide {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  height: 160px;
 | 
			
		||||
  line-height: 160px;
 | 
			
		||||
  background: #364d79;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ant-carousel >>> .slick-slide h3 {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
## API
 | 
			
		||||
 | 
			
		||||
| Property | Description | Type | Default |
 | 
			
		||||
| -------- | ----------- | ---- | ------- |
 | 
			
		||||
| afterChange | Callback function called after the current index changes | function(current) | - |
 | 
			
		||||
| autoplay | Whether to scroll automatically | boolean | `false` |
 | 
			
		||||
| beforeChange | Callback function called before the current index changes | function(from, to) | - |
 | 
			
		||||
| dots | Whether to show the dots at the bottom of the gallery | boolean | `true` |
 | 
			
		||||
| easing | Transition interpolation function name | string | `linear` |
 | 
			
		||||
| effect | Transition effect | `scrollx` \| `fade` | `scrollx` |
 | 
			
		||||
| vertical | Whether to use a vertical display | boolean | `false` |
 | 
			
		||||
 | 
			
		||||
## Methods
 | 
			
		||||
 | 
			
		||||
| Name | Description |
 | 
			
		||||
| ---- | ----------- |
 | 
			
		||||
| goTo(slideNumber) | Change current slide to given slide number |
 | 
			
		||||
| next() | Change current slide to next slide |
 | 
			
		||||
| prev() | Change current slide to previous slide |
 | 
			
		||||
 | 
			
		||||
For more info on the parameters, refer to the <https://github.com/akiran/react-slick>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,159 @@
 | 
			
		|||
import PropTypes from '../_util/vue-types'
 | 
			
		||||
import debounce from 'lodash/debounce'
 | 
			
		||||
import { initDefaultProps, getComponentFromProp, filterEmpty } from '../_util/props-util'
 | 
			
		||||
 | 
			
		||||
// matchMedia polyfill for
 | 
			
		||||
// https://github.com/WickyNilliams/enquire.js/issues/82
 | 
			
		||||
if (typeof window !== 'undefined') {
 | 
			
		||||
  const matchMediaPolyfill = (mediaQuery) => {
 | 
			
		||||
    return {
 | 
			
		||||
      media: mediaQuery,
 | 
			
		||||
      matches: false,
 | 
			
		||||
      addListener () {
 | 
			
		||||
      },
 | 
			
		||||
      removeListener () {
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  window.matchMedia = window.matchMedia || matchMediaPolyfill
 | 
			
		||||
}
 | 
			
		||||
// Use require over import (will be lifted up)
 | 
			
		||||
// make sure matchMedia polyfill run before require('vc-slick')
 | 
			
		||||
// Fix https://github.com/ant-design/ant-design/issues/6560
 | 
			
		||||
// Fix https://github.com/ant-design/ant-design/issues/3308
 | 
			
		||||
const SlickCarousel = require('../vc-slick/src').default
 | 
			
		||||
 | 
			
		||||
export const CarouselEffect = PropTypes.oneOf(['scrollx', 'fade'])
 | 
			
		||||
// Carousel
 | 
			
		||||
export const CarouselProps = {
 | 
			
		||||
  effect: CarouselEffect,
 | 
			
		||||
  dots: PropTypes.bool,
 | 
			
		||||
  vertical: PropTypes.bool,
 | 
			
		||||
  autoplay: PropTypes.bool,
 | 
			
		||||
  easing: PropTypes.string,
 | 
			
		||||
  beforeChange: PropTypes.func,
 | 
			
		||||
  afterChange: PropTypes.func,
 | 
			
		||||
  // style: PropTypes.React.CSSProperties,
 | 
			
		||||
  prefixCls: PropTypes.string,
 | 
			
		||||
  accessibility: PropTypes.bool,
 | 
			
		||||
  nextArrow: PropTypes.any,
 | 
			
		||||
  prevArrow: PropTypes.any,
 | 
			
		||||
  pauseOnHover: PropTypes.bool,
 | 
			
		||||
  // className: PropTypes.string,
 | 
			
		||||
  adaptiveHeight: PropTypes.bool,
 | 
			
		||||
  arrows: PropTypes.bool,
 | 
			
		||||
  autoplaySpeed: PropTypes.number,
 | 
			
		||||
  centerMode: PropTypes.bool,
 | 
			
		||||
  centerPadding: PropTypes.string,
 | 
			
		||||
  cssEase: PropTypes.string,
 | 
			
		||||
  dotsClass: PropTypes.string,
 | 
			
		||||
  draggable: PropTypes.bool,
 | 
			
		||||
  fade: PropTypes.bool,
 | 
			
		||||
  focusOnSelect: PropTypes.bool,
 | 
			
		||||
  infinite: PropTypes.bool,
 | 
			
		||||
  initialSlide: PropTypes.number,
 | 
			
		||||
  lazyLoad: PropTypes.bool,
 | 
			
		||||
  rtl: PropTypes.bool,
 | 
			
		||||
  slide: PropTypes.string,
 | 
			
		||||
  slidesToShow: PropTypes.number,
 | 
			
		||||
  slidesToScroll: PropTypes.number,
 | 
			
		||||
  speed: PropTypes.number,
 | 
			
		||||
  swipe: PropTypes.bool,
 | 
			
		||||
  swipeToSlide: PropTypes.bool,
 | 
			
		||||
  touchMove: PropTypes.bool,
 | 
			
		||||
  touchThreshold: PropTypes.number,
 | 
			
		||||
  variableWidth: PropTypes.bool,
 | 
			
		||||
  useCSS: PropTypes.bool,
 | 
			
		||||
  slickGoTo: PropTypes.number,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'ACarousel',
 | 
			
		||||
  props: initDefaultProps(CarouselProps, {
 | 
			
		||||
    dots: true,
 | 
			
		||||
    arrows: false,
 | 
			
		||||
    prefixCls: 'ant-carousel',
 | 
			
		||||
    draggable: false,
 | 
			
		||||
  }),
 | 
			
		||||
 | 
			
		||||
  // innerSlider: any;
 | 
			
		||||
 | 
			
		||||
  // private slick: any;
 | 
			
		||||
 | 
			
		||||
  beforeMount () {
 | 
			
		||||
    this.onWindowResized = debounce(this.onWindowResized, 500, {
 | 
			
		||||
      leading: false,
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  mounted () {
 | 
			
		||||
    const { autoplay } = this
 | 
			
		||||
    if (autoplay) {
 | 
			
		||||
      window.addEventListener('resize', this.onWindowResized)
 | 
			
		||||
    }
 | 
			
		||||
    // https://github.com/ant-design/ant-design/issues/7191
 | 
			
		||||
    this.innerSlider = this.$refs.slick && this.$refs.slick.innerSlider
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  beforeDestroy () {
 | 
			
		||||
    const { autoplay } = this
 | 
			
		||||
    if (autoplay) {
 | 
			
		||||
      window.removeEventListener('resize', this.onWindowResized)
 | 
			
		||||
      this.onWindowResized.cancel()
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    onWindowResized () {
 | 
			
		||||
      // Fix https://github.com/ant-design/ant-design/issues/2550
 | 
			
		||||
      const { autoplay } = this
 | 
			
		||||
      if (autoplay && this.$refs.slick && this.$refs.slick.innerSlider && this.$refs.slick.innerSlider.autoPlay) {
 | 
			
		||||
        this.$refs.slick.innerSlider.autoPlay()
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    next () {
 | 
			
		||||
      this.$refs.slick.slickNext()
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    prev () {
 | 
			
		||||
      this.$refs.slick.slickPrev()
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    goTo (slide) {
 | 
			
		||||
      this.$refs.slick.slickGoTo(slide)
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const props = {
 | 
			
		||||
      ...this.$props,
 | 
			
		||||
    }
 | 
			
		||||
    const { $slots, $listeners } = this
 | 
			
		||||
 | 
			
		||||
    if (props.effect === 'fade') {
 | 
			
		||||
      props.fade = true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let className = props.prefixCls
 | 
			
		||||
    if (props.vertical) {
 | 
			
		||||
      className = `${className} ${className}-vertical`
 | 
			
		||||
    }
 | 
			
		||||
    const SlickCarouselProps = {
 | 
			
		||||
      props: {
 | 
			
		||||
        ...props,
 | 
			
		||||
        nextArrow: getComponentFromProp(this, 'nextArrow'),
 | 
			
		||||
        prevArrow: getComponentFromProp(this, 'prevArrow'),
 | 
			
		||||
      },
 | 
			
		||||
      on: $listeners,
 | 
			
		||||
      scopedSlots: this.$scopedSlots,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <div class={className}>
 | 
			
		||||
        <SlickCarousel ref='slick' {...SlickCarouselProps}>
 | 
			
		||||
          {filterEmpty($slots.default)}
 | 
			
		||||
        </SlickCarousel>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
## API
 | 
			
		||||
 | 
			
		||||
| 参数 | 说明 | 类型 | 默认值 |
 | 
			
		||||
| --- | --- | --- | --- |
 | 
			
		||||
| afterChange | 切换面板的回调 | function(current) | 无 |
 | 
			
		||||
| autoplay | 是否自动切换 | boolean | false |
 | 
			
		||||
| beforeChange | 切换面板的回调 | function(from, to) | 无 |
 | 
			
		||||
| dots | 是否显示面板指示点 | boolean | true |
 | 
			
		||||
| easing | 动画效果 | string | linear |
 | 
			
		||||
| effect | 动画效果函数,可取 scrollx, fade | string | scrollx |
 | 
			
		||||
| vertical | 垂直显示 | boolean | false |
 | 
			
		||||
 | 
			
		||||
## 方法
 | 
			
		||||
 | 
			
		||||
| 名称 | 描述 |
 | 
			
		||||
| --- | --- |
 | 
			
		||||
| goTo(slideNumber) | 切换到指定面板 |
 | 
			
		||||
| next() | 切换到下一面板 |
 | 
			
		||||
| prev() | 切换到上一面板 |
 | 
			
		||||
 | 
			
		||||
更多参数可参考:<https://github.com/akiran/react-slick>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
import '../../style/index.less'
 | 
			
		||||
import './index.less'
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,210 @@
 | 
			
		|||
@import "../../style/themes/default";
 | 
			
		||||
@import "../../style/mixins/index";
 | 
			
		||||
 | 
			
		||||
.@{ant-prefix}-carousel {
 | 
			
		||||
  .reset-component;
 | 
			
		||||
 | 
			
		||||
  .slick-slider {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    display: block;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    -webkit-touch-callout: none;
 | 
			
		||||
    -ms-touch-action: pan-y;
 | 
			
		||||
    touch-action: pan-y;
 | 
			
		||||
    -webkit-tap-highlight-color: transparent;
 | 
			
		||||
  }
 | 
			
		||||
  .slick-list {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    display: block;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
 | 
			
		||||
    &:focus {
 | 
			
		||||
      outline: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &.dragging {
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .slick-slider .slick-track,
 | 
			
		||||
  .slick-slider .slick-list {
 | 
			
		||||
    transform: translate3d(0, 0, 0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .slick-track {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    display: block;
 | 
			
		||||
 | 
			
		||||
    &:before,
 | 
			
		||||
    &:after {
 | 
			
		||||
      content: "";
 | 
			
		||||
      display: table;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &:after {
 | 
			
		||||
      clear: both;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .slick-loading & {
 | 
			
		||||
      visibility: hidden;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .slick-slide {
 | 
			
		||||
    float: left;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    min-height: 1px;
 | 
			
		||||
    [dir="rtl"] & {
 | 
			
		||||
      float: right;
 | 
			
		||||
    }
 | 
			
		||||
    img {
 | 
			
		||||
      display: block;
 | 
			
		||||
    }
 | 
			
		||||
    &.slick-loading img {
 | 
			
		||||
      display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    display: none;
 | 
			
		||||
 | 
			
		||||
    &.dragging img {
 | 
			
		||||
      pointer-events: none;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .slick-initialized .slick-slide {
 | 
			
		||||
    display: block;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .slick-loading .slick-slide {
 | 
			
		||||
    visibility: hidden;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .slick-vertical .slick-slide {
 | 
			
		||||
    display: block;
 | 
			
		||||
    height: auto;
 | 
			
		||||
    border: @border-width-base @border-style-base transparent;
 | 
			
		||||
  }
 | 
			
		||||
  .slick-arrow.slick-hidden {
 | 
			
		||||
    display: none;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Arrows
 | 
			
		||||
  .slick-prev,
 | 
			
		||||
  .slick-next {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    display: block;
 | 
			
		||||
    height: 20px;
 | 
			
		||||
    width: 20px;
 | 
			
		||||
    line-height: 0;
 | 
			
		||||
    font-size: 0;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    background: transparent;
 | 
			
		||||
    color: transparent;
 | 
			
		||||
    top: 50%;
 | 
			
		||||
    margin-top: -10px;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    border: 0;
 | 
			
		||||
    outline: none;
 | 
			
		||||
    &:hover,
 | 
			
		||||
    &:focus {
 | 
			
		||||
      outline: none;
 | 
			
		||||
      background: transparent;
 | 
			
		||||
      color: transparent;
 | 
			
		||||
      &:before {
 | 
			
		||||
        opacity: 1;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    &.slick-disabled:before {
 | 
			
		||||
      opacity: 0.25;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .slick-prev {
 | 
			
		||||
    left: -25px;
 | 
			
		||||
    &:before {
 | 
			
		||||
      content: "←";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .slick-next {
 | 
			
		||||
    right: -25px;
 | 
			
		||||
    &:before {
 | 
			
		||||
      content: "→";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Dots
 | 
			
		||||
  .slick-dots {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    bottom: 12px;
 | 
			
		||||
    list-style: none;
 | 
			
		||||
    display: block;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: @carousel-dot-height;
 | 
			
		||||
    li {
 | 
			
		||||
      position: relative;
 | 
			
		||||
      display: inline-block;
 | 
			
		||||
      vertical-align: top;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      margin: 0 2px;
 | 
			
		||||
      padding: 0;
 | 
			
		||||
      button {
 | 
			
		||||
        border: 0;
 | 
			
		||||
        cursor: pointer;
 | 
			
		||||
        background: #fff;
 | 
			
		||||
        opacity: 0.3;
 | 
			
		||||
        display: block;
 | 
			
		||||
        width: @carousel-dot-width;
 | 
			
		||||
        height: @carousel-dot-height;
 | 
			
		||||
        border-radius: 1px;
 | 
			
		||||
        outline: none;
 | 
			
		||||
        font-size: 0;
 | 
			
		||||
        color: transparent;
 | 
			
		||||
        transition: all .5s;
 | 
			
		||||
        padding: 0;
 | 
			
		||||
        &:hover,
 | 
			
		||||
        &:focus {
 | 
			
		||||
          opacity: 0.75;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      &.slick-active button {
 | 
			
		||||
        background: #fff;
 | 
			
		||||
        opacity: 1;
 | 
			
		||||
        width: @carousel-dot-active-width;
 | 
			
		||||
        &:hover,
 | 
			
		||||
        &:focus {
 | 
			
		||||
          opacity: 1;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.@{ant-prefix}-carousel-vertical {
 | 
			
		||||
  .slick-dots {
 | 
			
		||||
    width: @carousel-dot-height;
 | 
			
		||||
    bottom: auto;
 | 
			
		||||
    right: 12px;
 | 
			
		||||
    top: 50%;
 | 
			
		||||
    transform: translateY(-50%);
 | 
			
		||||
    height: auto;
 | 
			
		||||
    li {
 | 
			
		||||
      margin: 0 2px;
 | 
			
		||||
      vertical-align: baseline;
 | 
			
		||||
      button {
 | 
			
		||||
        width: @carousel-dot-height;
 | 
			
		||||
        height: @carousel-dot-width;
 | 
			
		||||
      }
 | 
			
		||||
      &.slick-active button {
 | 
			
		||||
        width: @carousel-dot-height;
 | 
			
		||||
        height: @carousel-dot-active-width;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ import { default as Card } from './card'
 | 
			
		|||
 | 
			
		||||
import { default as Collapse } from './collapse'
 | 
			
		||||
 | 
			
		||||
// import { default as Carousel } from './carousel'
 | 
			
		||||
import { default as Carousel } from './carousel'
 | 
			
		||||
 | 
			
		||||
import { default as Cascader } from './cascader'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -139,6 +139,7 @@ const components = [
 | 
			
		|||
  Card.Grid,
 | 
			
		||||
  Collapse,
 | 
			
		||||
  Collapse.Panel,
 | 
			
		||||
  Carousel,
 | 
			
		||||
  Cascader,
 | 
			
		||||
  Checkbox,
 | 
			
		||||
  Checkbox.Group,
 | 
			
		||||
| 
						 | 
				
			
			@ -241,6 +242,7 @@ export {
 | 
			
		|||
  Calendar,
 | 
			
		||||
  Card,
 | 
			
		||||
  Collapse,
 | 
			
		||||
  Carousel,
 | 
			
		||||
  Cascader,
 | 
			
		||||
  Checkbox,
 | 
			
		||||
  Col,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@ import './dropdown/style'
 | 
			
		|||
import './divider/style'
 | 
			
		||||
import './card/style'
 | 
			
		||||
import './collapse/style'
 | 
			
		||||
import './carousel/style'
 | 
			
		||||
import './notification/style'
 | 
			
		||||
import './message/style'
 | 
			
		||||
import './spin/style'
 | 
			
		||||
| 
						 | 
				
			
			@ -46,4 +47,5 @@ import './layout/style'
 | 
			
		|||
import './form/style'
 | 
			
		||||
import './anchor/style'
 | 
			
		||||
import './list/style'
 | 
			
		||||
import './carousel/style'
 | 
			
		||||
import './tree-select/style'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 4.1 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,116 @@
 | 
			
		|||
 | 
			
		||||
h3 {
 | 
			
		||||
  background: #00558B;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  font-size: 36px;
 | 
			
		||||
  line-height: 100px;
 | 
			
		||||
  margin: 10px;
 | 
			
		||||
  padding: 2%;
 | 
			
		||||
  position: relative;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
.variable-width .slick-slide p {
 | 
			
		||||
  background: #00558B;
 | 
			
		||||
  height: 100px;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  margin: 5px;
 | 
			
		||||
  line-height: 100px;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
.center .slick-center h3 {
 | 
			
		||||
  color: #e67e22;
 | 
			
		||||
  opacity: 1;
 | 
			
		||||
  transform: scale(1.08);
 | 
			
		||||
}
 | 
			
		||||
.center h3{
 | 
			
		||||
  opacity: 0.8;
 | 
			
		||||
  transition: all 300ms ease;
 | 
			
		||||
}
 | 
			
		||||
.content {
 | 
			
		||||
  padding: 20px;
 | 
			
		||||
  margin: auto;
 | 
			
		||||
}
 | 
			
		||||
@media (min-width: 701px) {
 | 
			
		||||
  .content {
 | 
			
		||||
    width: 80%;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@media (max-width: 700px) {
 | 
			
		||||
  .content {
 | 
			
		||||
    width: 70%;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.slick-slide .image {
 | 
			
		||||
  padding: 10px;
 | 
			
		||||
}
 | 
			
		||||
.slick-slide img {
 | 
			
		||||
  border: 5px solid #FFF;
 | 
			
		||||
  display: block;
 | 
			
		||||
  margin: auto;
 | 
			
		||||
  max-width: 80%;
 | 
			
		||||
}
 | 
			
		||||
.slick-slide img.slick-loading {
 | 
			
		||||
  border: 0
 | 
			
		||||
}
 | 
			
		||||
.slick-slider {
 | 
			
		||||
  margin: 30px auto 50px;
 | 
			
		||||
}
 | 
			
		||||
.slick-dots {
 | 
			
		||||
  margin-left: 0;
 | 
			
		||||
}
 | 
			
		||||
.slick-thumb {
 | 
			
		||||
  bottom: -45px;
 | 
			
		||||
}
 | 
			
		||||
.slick-thumb li {
 | 
			
		||||
  width: 60px;
 | 
			
		||||
  height: 45px;
 | 
			
		||||
}
 | 
			
		||||
.slick-thumb li img {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  filter: grayscale(100%);
 | 
			
		||||
}
 | 
			
		||||
.slick-thumb li.slick-active img{
 | 
			
		||||
    filter: grayscale(0%);
 | 
			
		||||
}
 | 
			
		||||
@media (max-width: 768px) {
 | 
			
		||||
  h3 {
 | 
			
		||||
    font-size:24px;
 | 
			
		||||
  }
 | 
			
		||||
  .center {
 | 
			
		||||
    margin-left: -40px;
 | 
			
		||||
    margin-right: -40px;
 | 
			
		||||
  }
 | 
			
		||||
  .center .slick-center h3 {
 | 
			
		||||
    color: #e67e22;
 | 
			
		||||
    opacity: 1;
 | 
			
		||||
    transform: scale(1);
 | 
			
		||||
  }
 | 
			
		||||
  .center h3 {
 | 
			
		||||
    opacity: 0.8;
 | 
			
		||||
    transform: scale(0.95);
 | 
			
		||||
    transition: all 300ms ease;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.slick-vertical .slick-slide {
 | 
			
		||||
  height: 180px;
 | 
			
		||||
}
 | 
			
		||||
.slick-arrow {
 | 
			
		||||
  background-color: grey;
 | 
			
		||||
}
 | 
			
		||||
.slick-arrow:hover {
 | 
			
		||||
  background-color: grey;
 | 
			
		||||
}
 | 
			
		||||
.slick-arrow:focus {
 | 
			
		||||
  background-color: grey;
 | 
			
		||||
}
 | 
			
		||||
.button {
 | 
			
		||||
  background-color: #00558B;
 | 
			
		||||
  padding: 10px 20px;
 | 
			
		||||
  margin: 0px 20px;
 | 
			
		||||
  border: none;
 | 
			
		||||
  color: white;
 | 
			
		||||
  font-size: 20px;
 | 
			
		||||
  border-radius: 5px;
 | 
			
		||||
  min-height: 45px
 | 
			
		||||
}
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
<?xml version="1.0" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg xmlns="http://www.w3.org/2000/svg">
 | 
			
		||||
<metadata>Generated by Fontastic.me</metadata>
 | 
			
		||||
<defs>
 | 
			
		||||
<font id="slick" horiz-adv-x="512">
 | 
			
		||||
<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
 | 
			
		||||
<missing-glyph horiz-adv-x="512" />
 | 
			
		||||
 | 
			
		||||
<glyph unicode="→" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
 | 
			
		||||
<glyph unicode="←" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
 | 
			
		||||
<glyph unicode="•" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
 | 
			
		||||
<glyph unicode="a" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
 | 
			
		||||
</font></defs></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 2.1 KiB  | 
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 26 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 10 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 5.6 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 34 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
@import "./slick";
 | 
			
		||||
@import "./slick-theme";
 | 
			
		||||
@import "./docs";
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,204 @@
 | 
			
		|||
@charset 'UTF-8';
 | 
			
		||||
/* Slider */
 | 
			
		||||
.slick-loading .slick-list
 | 
			
		||||
{
 | 
			
		||||
    background: #fff url('./ajax-loader.gif') center center no-repeat;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Icons */
 | 
			
		||||
// @font-face
 | 
			
		||||
// {
 | 
			
		||||
//     font-family: 'slick';
 | 
			
		||||
//     font-weight: normal;
 | 
			
		||||
//     font-style: normal;
 | 
			
		||||
 | 
			
		||||
//     src: url('./fonts/slick.eot');
 | 
			
		||||
//     src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
 | 
			
		||||
// }
 | 
			
		||||
/* Arrows */
 | 
			
		||||
.slick-prev,
 | 
			
		||||
.slick-next
 | 
			
		||||
{
 | 
			
		||||
    font-size: 0;
 | 
			
		||||
    line-height: 0;
 | 
			
		||||
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 50%;
 | 
			
		||||
 | 
			
		||||
    display: block;
 | 
			
		||||
 | 
			
		||||
    width: 20px;
 | 
			
		||||
    height: 20px;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    -webkit-transform: translate(0, -50%);
 | 
			
		||||
    -ms-transform: translate(0, -50%);
 | 
			
		||||
    transform: translate(0, -50%);
 | 
			
		||||
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
 | 
			
		||||
    color: transparent;
 | 
			
		||||
    border: none;
 | 
			
		||||
    outline: none;
 | 
			
		||||
    background: transparent;
 | 
			
		||||
}
 | 
			
		||||
.slick-prev:hover,
 | 
			
		||||
.slick-prev:focus,
 | 
			
		||||
.slick-next:hover,
 | 
			
		||||
.slick-next:focus
 | 
			
		||||
{
 | 
			
		||||
    color: transparent;
 | 
			
		||||
    outline: none;
 | 
			
		||||
    background: transparent;
 | 
			
		||||
}
 | 
			
		||||
.slick-prev:hover:before,
 | 
			
		||||
.slick-prev:focus:before,
 | 
			
		||||
.slick-next:hover:before,
 | 
			
		||||
.slick-next:focus:before
 | 
			
		||||
{
 | 
			
		||||
    opacity: 1;
 | 
			
		||||
}
 | 
			
		||||
.slick-prev.slick-disabled:before,
 | 
			
		||||
.slick-next.slick-disabled:before
 | 
			
		||||
{
 | 
			
		||||
    opacity: .25;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.slick-prev:before,
 | 
			
		||||
.slick-next:before
 | 
			
		||||
{
 | 
			
		||||
    // font-family: 'slick';
 | 
			
		||||
    font-size: 20px;
 | 
			
		||||
    line-height: 1;
 | 
			
		||||
 | 
			
		||||
    opacity: .75;
 | 
			
		||||
    color: white;
 | 
			
		||||
 | 
			
		||||
    -webkit-font-smoothing: antialiased;
 | 
			
		||||
    -moz-osx-font-smoothing: grayscale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.slick-prev
 | 
			
		||||
{
 | 
			
		||||
    left: -25px;
 | 
			
		||||
}
 | 
			
		||||
[dir='rtl'] .slick-prev
 | 
			
		||||
{
 | 
			
		||||
    right: -25px;
 | 
			
		||||
    left: auto;
 | 
			
		||||
}
 | 
			
		||||
.slick-prev:before
 | 
			
		||||
{
 | 
			
		||||
    content: '←';
 | 
			
		||||
}
 | 
			
		||||
[dir='rtl'] .slick-prev:before
 | 
			
		||||
{
 | 
			
		||||
    content: '→';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.slick-next
 | 
			
		||||
{
 | 
			
		||||
    right: -25px;
 | 
			
		||||
}
 | 
			
		||||
[dir='rtl'] .slick-next
 | 
			
		||||
{
 | 
			
		||||
    right: auto;
 | 
			
		||||
    left: -25px;
 | 
			
		||||
}
 | 
			
		||||
.slick-next:before
 | 
			
		||||
{
 | 
			
		||||
    content: '→';
 | 
			
		||||
}
 | 
			
		||||
[dir='rtl'] .slick-next:before
 | 
			
		||||
{
 | 
			
		||||
    content: '←';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Dots */
 | 
			
		||||
.slick-dotted.slick-slider
 | 
			
		||||
{
 | 
			
		||||
    margin-bottom: 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.slick-dots
 | 
			
		||||
{
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    bottom: -25px;
 | 
			
		||||
 | 
			
		||||
    display: block;
 | 
			
		||||
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
 | 
			
		||||
    list-style: none;
 | 
			
		||||
 | 
			
		||||
    text-align: center;
 | 
			
		||||
}
 | 
			
		||||
.slick-dots li
 | 
			
		||||
{
 | 
			
		||||
    position: relative;
 | 
			
		||||
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
 | 
			
		||||
    width: 20px;
 | 
			
		||||
    height: 20px;
 | 
			
		||||
    margin: 0 5px;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.slick-dots li button
 | 
			
		||||
{
 | 
			
		||||
    font-size: 0;
 | 
			
		||||
    line-height: 0;
 | 
			
		||||
 | 
			
		||||
    display: block;
 | 
			
		||||
 | 
			
		||||
    width: 20px;
 | 
			
		||||
    height: 20px;
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
 | 
			
		||||
    color: transparent;
 | 
			
		||||
    border: 0;
 | 
			
		||||
    outline: none;
 | 
			
		||||
    background: transparent;
 | 
			
		||||
}
 | 
			
		||||
.slick-dots li button:hover,
 | 
			
		||||
.slick-dots li button:focus
 | 
			
		||||
{
 | 
			
		||||
    outline: none;
 | 
			
		||||
}
 | 
			
		||||
.slick-dots li button:hover:before,
 | 
			
		||||
.slick-dots li button:focus:before
 | 
			
		||||
{
 | 
			
		||||
    opacity: 1;
 | 
			
		||||
}
 | 
			
		||||
.slick-dots li button:before
 | 
			
		||||
{
 | 
			
		||||
    // font-family: 'slick';
 | 
			
		||||
    font-size: 40px;
 | 
			
		||||
    line-height: 20px;
 | 
			
		||||
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
 | 
			
		||||
    width: 20px;
 | 
			
		||||
    height: 20px;
 | 
			
		||||
 | 
			
		||||
    content: '•';
 | 
			
		||||
    text-align: center;
 | 
			
		||||
 | 
			
		||||
    opacity: .25;
 | 
			
		||||
    color: black;
 | 
			
		||||
 | 
			
		||||
    -webkit-font-smoothing: antialiased;
 | 
			
		||||
    -moz-osx-font-smoothing: grayscale;
 | 
			
		||||
}
 | 
			
		||||
.slick-dots li.slick-active button:before
 | 
			
		||||
{
 | 
			
		||||
    opacity: .75;
 | 
			
		||||
    color: black;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,119 @@
 | 
			
		|||
/* Slider */
 | 
			
		||||
.slick-slider
 | 
			
		||||
{
 | 
			
		||||
    position: relative;
 | 
			
		||||
 | 
			
		||||
    display: block;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
 | 
			
		||||
    -webkit-user-select: none;
 | 
			
		||||
       -moz-user-select: none;
 | 
			
		||||
        -ms-user-select: none;
 | 
			
		||||
            user-select: none;
 | 
			
		||||
 | 
			
		||||
    -webkit-touch-callout: none;
 | 
			
		||||
    -khtml-user-select: none;
 | 
			
		||||
    -ms-touch-action: pan-y;
 | 
			
		||||
        touch-action: pan-y;
 | 
			
		||||
    -webkit-tap-highlight-color: transparent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.slick-list
 | 
			
		||||
{
 | 
			
		||||
    position: relative;
 | 
			
		||||
 | 
			
		||||
    display: block;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
}
 | 
			
		||||
.slick-list:focus
 | 
			
		||||
{
 | 
			
		||||
    outline: none;
 | 
			
		||||
}
 | 
			
		||||
.slick-list.dragging
 | 
			
		||||
{
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    cursor: hand;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.slick-slider .slick-track,
 | 
			
		||||
.slick-slider .slick-list
 | 
			
		||||
{
 | 
			
		||||
    -webkit-transform: translate3d(0, 0, 0);
 | 
			
		||||
       -moz-transform: translate3d(0, 0, 0);
 | 
			
		||||
        -ms-transform: translate3d(0, 0, 0);
 | 
			
		||||
         -o-transform: translate3d(0, 0, 0);
 | 
			
		||||
            transform: translate3d(0, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.slick-track
 | 
			
		||||
{
 | 
			
		||||
    position: relative;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
 | 
			
		||||
    display: block;
 | 
			
		||||
    margin-left: auto;
 | 
			
		||||
    margin-right: auto;
 | 
			
		||||
}
 | 
			
		||||
.slick-track:before,
 | 
			
		||||
.slick-track:after
 | 
			
		||||
{
 | 
			
		||||
    display: table;
 | 
			
		||||
 | 
			
		||||
    content: '';
 | 
			
		||||
}
 | 
			
		||||
.slick-track:after
 | 
			
		||||
{
 | 
			
		||||
    clear: both;
 | 
			
		||||
}
 | 
			
		||||
.slick-loading .slick-track
 | 
			
		||||
{
 | 
			
		||||
    visibility: hidden;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.slick-slide
 | 
			
		||||
{
 | 
			
		||||
    display: none;
 | 
			
		||||
    float: left;
 | 
			
		||||
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    min-height: 1px;
 | 
			
		||||
}
 | 
			
		||||
[dir='rtl'] .slick-slide
 | 
			
		||||
{
 | 
			
		||||
    float: right;
 | 
			
		||||
}
 | 
			
		||||
.slick-slide img
 | 
			
		||||
{
 | 
			
		||||
    display: block;
 | 
			
		||||
}
 | 
			
		||||
.slick-slide.slick-loading img
 | 
			
		||||
{
 | 
			
		||||
    display: none;
 | 
			
		||||
}
 | 
			
		||||
.slick-slide.dragging img
 | 
			
		||||
{
 | 
			
		||||
    pointer-events: none;
 | 
			
		||||
}
 | 
			
		||||
.slick-initialized .slick-slide
 | 
			
		||||
{
 | 
			
		||||
    display: block;
 | 
			
		||||
}
 | 
			
		||||
.slick-loading .slick-slide
 | 
			
		||||
{
 | 
			
		||||
    visibility: hidden;
 | 
			
		||||
}
 | 
			
		||||
.slick-vertical .slick-slide
 | 
			
		||||
{
 | 
			
		||||
    display: block;
 | 
			
		||||
 | 
			
		||||
    height: auto;
 | 
			
		||||
 | 
			
		||||
    border: 1px solid transparent;
 | 
			
		||||
}
 | 
			
		||||
.slick-arrow.slick-hidden {
 | 
			
		||||
    display: none;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      class: '',
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        adaptiveHeight: true,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Adaptive height</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
            <p>Hello</p>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
            <p>See ....</p>
 | 
			
		||||
            <p>Height is adaptive</p>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render (h) {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
      },
 | 
			
		||||
      scopedSlots: {
 | 
			
		||||
        customPaging: ({ i }) => {
 | 
			
		||||
          return (
 | 
			
		||||
            <div
 | 
			
		||||
              style={{
 | 
			
		||||
                width: '30px',
 | 
			
		||||
                color: 'blue',
 | 
			
		||||
                border: '1px blue solid',
 | 
			
		||||
              }}
 | 
			
		||||
            >
 | 
			
		||||
              {i + 1}
 | 
			
		||||
            </div>
 | 
			
		||||
          )
 | 
			
		||||
        },
 | 
			
		||||
        appendDots: ({ dots }) => {
 | 
			
		||||
          return (
 | 
			
		||||
            <div
 | 
			
		||||
              style={{
 | 
			
		||||
                backgroundColor: '#ddd',
 | 
			
		||||
                borderRadius: '10px',
 | 
			
		||||
                padding: '10px',
 | 
			
		||||
              }}
 | 
			
		||||
            >
 | 
			
		||||
              <ul style={{ margin: '0px' }}> {dots} </ul>
 | 
			
		||||
            </div>
 | 
			
		||||
          )
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Append Dots</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data () {
 | 
			
		||||
    return {
 | 
			
		||||
      nav1: null,
 | 
			
		||||
      nav2: null,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  mounted () {
 | 
			
		||||
    this.nav1 = this.$refs.slider1
 | 
			
		||||
    this.nav2 = this.$refs.slider2
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Slider Syncing (AsNavFor)</h2>
 | 
			
		||||
        <h4>First Slider</h4>
 | 
			
		||||
        <Slider
 | 
			
		||||
          asNavFor={this.nav2}
 | 
			
		||||
          ref='slider1'
 | 
			
		||||
        >
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
        <h4>Second Slider</h4>
 | 
			
		||||
        <Slider
 | 
			
		||||
          asNavFor={this.nav1}
 | 
			
		||||
          ref='slider2'
 | 
			
		||||
          slidesToShow={3}
 | 
			
		||||
          swipeToSlide={true}
 | 
			
		||||
          focusOnSelect={true}
 | 
			
		||||
        >
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        autoplay: true,
 | 
			
		||||
        speed: 2000,
 | 
			
		||||
        autoplaySpeed: 2000,
 | 
			
		||||
        cssEase: 'linear',
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Auto Play</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  methods: {
 | 
			
		||||
    play () {
 | 
			
		||||
      this.$refs.slider.slickPlay()
 | 
			
		||||
    },
 | 
			
		||||
    pause () {
 | 
			
		||||
      this.$refs.slider.slickPause()
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        autoplay: true,
 | 
			
		||||
        autoplaySpeed: 2000,
 | 
			
		||||
      },
 | 
			
		||||
      ref: 'slider',
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Auto Play & Pause with buttons</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
        <div style={{ textAlign: 'center' }}>
 | 
			
		||||
          <button class='button' onClick={this.play}>
 | 
			
		||||
            Play
 | 
			
		||||
          </button>
 | 
			
		||||
          <button class='button' onClick={this.pause}>
 | 
			
		||||
            Pause
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        centerMode: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        centerPadding: '60px',
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
      },
 | 
			
		||||
      class: 'center',
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Center Mode</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,62 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render (h) {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
      },
 | 
			
		||||
      scopedSlots: {
 | 
			
		||||
        nextArrow: (props) => {
 | 
			
		||||
          const { class: className, style, on: { click }} = props
 | 
			
		||||
          return (
 | 
			
		||||
            <div
 | 
			
		||||
              class={className}
 | 
			
		||||
              style={{ ...style, display: 'block', background: 'red' }}
 | 
			
		||||
              onClick={click}
 | 
			
		||||
            />
 | 
			
		||||
          )
 | 
			
		||||
        },
 | 
			
		||||
        prevArrow: (props) => {
 | 
			
		||||
          const { class: className, style, on: { click }} = props
 | 
			
		||||
          return (
 | 
			
		||||
            <div
 | 
			
		||||
              class={className}
 | 
			
		||||
              style={{ ...style, display: 'block', background: 'green' }}
 | 
			
		||||
              onClick={click}
 | 
			
		||||
            />
 | 
			
		||||
          )
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Custom Arrows</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
import imgList from './imglist'
 | 
			
		||||
 | 
			
		||||
const {
 | 
			
		||||
  abstract01, abstract02, abstract03, abstract04,
 | 
			
		||||
} = imgList
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        dotsClass: 'slick-dots slick-thumb',
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
      },
 | 
			
		||||
      scopedSlots: {
 | 
			
		||||
        customPaging: ({ i }) => {
 | 
			
		||||
          return (
 | 
			
		||||
            <a>
 | 
			
		||||
              <img src={imgList[`abstract0${i + 1}`]} />
 | 
			
		||||
            </a>
 | 
			
		||||
          )
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Custom Paging</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract01} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract02} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract03} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract04} />
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
const CustomSlide = {
 | 
			
		||||
  props: ['index'],
 | 
			
		||||
  render () {
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h3>{this.index}</h3>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Custom Slides</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <CustomSlide index={1} />
 | 
			
		||||
          <CustomSlide index={2} />
 | 
			
		||||
          <CustomSlide index={3} />
 | 
			
		||||
          <CustomSlide index={4} />
 | 
			
		||||
          <CustomSlide index={5} />
 | 
			
		||||
          <CustomSlide index={6} />
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data () {
 | 
			
		||||
    return {
 | 
			
		||||
      slides: [1, 2, 3, 4, 5, 6],
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    click () {
 | 
			
		||||
      this.slides = this.slides.length === 6 ? [1, 2, 3, 4, 5, 6, 7, 8, 9] : [1, 2, 3, 4, 5, 6]
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 3,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Dynamic slides</h2>
 | 
			
		||||
        <button class='button' onClick={this.click}>
 | 
			
		||||
          Click to change slide count
 | 
			
		||||
        </button>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          {this.slides.map(function (slide) {
 | 
			
		||||
            return (
 | 
			
		||||
              <div key={slide}>
 | 
			
		||||
                <h3>{slide}</h3>
 | 
			
		||||
              </div>
 | 
			
		||||
            )
 | 
			
		||||
          })}
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
import imgList from './imglist'
 | 
			
		||||
 | 
			
		||||
const {
 | 
			
		||||
  abstract01, abstract02, abstract03, abstract04,
 | 
			
		||||
} = imgList
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        fade: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Fade</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract01} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract02} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract03} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract04} />
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        focusOnSelect: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>FocusOnSelect</h2>
 | 
			
		||||
        <div>Click on any slide to select and make it current slide</div>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
import imgList from './imglist'
 | 
			
		||||
 | 
			
		||||
const {
 | 
			
		||||
  abstract01, abstract02, abstract03, abstract04,
 | 
			
		||||
} = imgList
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        lazyLoad: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        initialSlide: 1,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2> Lazy Load</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract01} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract02} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract03} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract04} />
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 3,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2> Multiple items </h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>7</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>8</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>9</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,74 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        centerMode: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        centerPadding: '60px',
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        rows: 2,
 | 
			
		||||
        slidesPerRow: 2,
 | 
			
		||||
      },
 | 
			
		||||
      class: 'center',
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Multiple Rows</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div style={{ width: '400px' }}>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>7</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>8</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>9</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>10</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>11</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>12</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>13</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>14</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>15</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>16</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        autoplay: true,
 | 
			
		||||
        autoplaySpeed: 2000,
 | 
			
		||||
        pauseOnHover: true,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Pause On Hover</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,58 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  methods: {
 | 
			
		||||
    next () {
 | 
			
		||||
      this.$refs.slider.slickNext()
 | 
			
		||||
    },
 | 
			
		||||
    previous () {
 | 
			
		||||
      this.$refs.slider.slickPrev()
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
      },
 | 
			
		||||
      ref: 'slider',
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Previous and Next methods</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div key={1}>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div key={2}>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div key={3}>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div key={4}>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div key={5}>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div key={6}>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
        <div style={{ textAlign: 'center' }}>
 | 
			
		||||
          <button class='button' onClick={this.previous}>
 | 
			
		||||
            Previous
 | 
			
		||||
          </button>
 | 
			
		||||
          <button class='button' onClick={this.next}>
 | 
			
		||||
            Next
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data () {
 | 
			
		||||
    return {
 | 
			
		||||
      display: true,
 | 
			
		||||
      width: 600,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2> Resizable Collapsible </h2>
 | 
			
		||||
        <button
 | 
			
		||||
          class='button'
 | 
			
		||||
          onClick={
 | 
			
		||||
            () => {
 | 
			
		||||
              this.width = this.width + 100
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        >
 | 
			
		||||
          {' '}
 | 
			
		||||
          increase{' '}
 | 
			
		||||
        </button>
 | 
			
		||||
        <button
 | 
			
		||||
          class='button'
 | 
			
		||||
          onClick={
 | 
			
		||||
            () => {
 | 
			
		||||
              this.width = this.width - 100
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        >
 | 
			
		||||
          {' '}
 | 
			
		||||
          decrease{' '}
 | 
			
		||||
        </button>
 | 
			
		||||
        <button
 | 
			
		||||
          class='button'
 | 
			
		||||
          onClick={
 | 
			
		||||
            () => {
 | 
			
		||||
              this.display = !this.display
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        >
 | 
			
		||||
          {' '}
 | 
			
		||||
          toggle{' '}
 | 
			
		||||
        </button>
 | 
			
		||||
        <div
 | 
			
		||||
          style={{
 | 
			
		||||
            width: this.width + 'px',
 | 
			
		||||
            display: this.display ? 'block' : 'none',
 | 
			
		||||
          }}
 | 
			
		||||
        >
 | 
			
		||||
          <Slider {...settings}>
 | 
			
		||||
            <div>
 | 
			
		||||
              <h3>1</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div>
 | 
			
		||||
              <h3>2</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div>
 | 
			
		||||
              <h3>3</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div>
 | 
			
		||||
              <h3>4</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div>
 | 
			
		||||
              <h3>5</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div>
 | 
			
		||||
              <h3>6</h3>
 | 
			
		||||
            </div>
 | 
			
		||||
          </Slider>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,74 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: false,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 4,
 | 
			
		||||
        slidesToScroll: 4,
 | 
			
		||||
        initialSlide: 0,
 | 
			
		||||
        responsive: [
 | 
			
		||||
          {
 | 
			
		||||
            breakpoint: 1024,
 | 
			
		||||
            settings: {
 | 
			
		||||
              slidesToShow: 3,
 | 
			
		||||
              slidesToScroll: 3,
 | 
			
		||||
              infinite: true,
 | 
			
		||||
              dots: true,
 | 
			
		||||
            },
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            breakpoint: 600,
 | 
			
		||||
            settings: {
 | 
			
		||||
              slidesToShow: 2,
 | 
			
		||||
              slidesToScroll: 2,
 | 
			
		||||
              initialSlide: 2,
 | 
			
		||||
            },
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            breakpoint: 480,
 | 
			
		||||
            settings: {
 | 
			
		||||
              slidesToShow: 1,
 | 
			
		||||
              slidesToScroll: 1,
 | 
			
		||||
            },
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2> Responsive </h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>7</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>8</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        autoplay: true,
 | 
			
		||||
        autoplaySpeed: 2000,
 | 
			
		||||
        rtl: true,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Right to Left</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div style={{ width: '80%', margin: '0 auto' }}>
 | 
			
		||||
        <h2> Single Item</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div onClick={(e) => alert(e)}>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,58 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
import imgList from './imglist'
 | 
			
		||||
 | 
			
		||||
const {
 | 
			
		||||
  abstract01, abstract02, abstract03, abstract04,
 | 
			
		||||
} = imgList
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data () {
 | 
			
		||||
    return {
 | 
			
		||||
      slideIndex: 0,
 | 
			
		||||
      updateCount: 0,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: false,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        afterChange: () => { this.updateCount = this.updateCount + 1 },
 | 
			
		||||
        beforeChange: (current, next) => { this.slideIndex = next },
 | 
			
		||||
      },
 | 
			
		||||
      ref: 'slider',
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Slick Go To</h2>
 | 
			
		||||
        <p>Total updates: {this.updateCount} </p>
 | 
			
		||||
        <input
 | 
			
		||||
          onInput={e => this.$refs.slider.slickGoTo(e.target.value)}
 | 
			
		||||
          value={this.slideIndex}
 | 
			
		||||
          type='range'
 | 
			
		||||
          min={0}
 | 
			
		||||
          max={3}
 | 
			
		||||
        />
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract01} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract02} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract03} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <img src={abstract04} />
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data () {
 | 
			
		||||
    return {
 | 
			
		||||
      activeSlide: 0,
 | 
			
		||||
      activeSlide2: 0,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 1000,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        beforeChange: (current, next) => { this.activeSlide = next },
 | 
			
		||||
        afterChange: current => { this.activeSlide2 = current },
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>beforeChange and afterChange hooks</h2>
 | 
			
		||||
        <p>
 | 
			
		||||
          BeforeChange => activeSlide: <strong>{this.activeSlide}</strong>
 | 
			
		||||
        </p>
 | 
			
		||||
        <p>
 | 
			
		||||
          AfterChange => activeSlide: <strong>{this.activeSlide2}</strong>
 | 
			
		||||
        </p>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        centerPadding: '60px',
 | 
			
		||||
        slidesToShow: 5,
 | 
			
		||||
        swipeToSlide: true,
 | 
			
		||||
        afterChange: function (index) {
 | 
			
		||||
          console.log(
 | 
			
		||||
            `Slider Changed to: ${index + 1}, background: #222; color: #bada55`
 | 
			
		||||
          )
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
      class: 'center',
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Swipe To Slide</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>7</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>8</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>9</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: false,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToScroll: 4,
 | 
			
		||||
        slidesToShow: 4,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Uneven sets (finite)</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        speed: 500,
 | 
			
		||||
        slidesToScroll: 4,
 | 
			
		||||
        slidesToShow: 4,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Uneven sets (infinite)</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      class: 'slider variable-width',
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        centerMode: true,
 | 
			
		||||
        slidesToShow: 1,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        variableWidth: true,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Variable width</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div style={{ width: '100px' }}>
 | 
			
		||||
            <p>100</p>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div style={{ width: '200px' }}>
 | 
			
		||||
            <p>200</p>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div style={{ width: '75px' }}>
 | 
			
		||||
            <p>75</p>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div style={{ width: '300px' }}>
 | 
			
		||||
            <p>300</p>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div style={{ width: '225px' }}>
 | 
			
		||||
            <p>225</p>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div style={{ width: '175px' }}>
 | 
			
		||||
            <p>175</p>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        vertical: true,
 | 
			
		||||
        verticalSwiping: true,
 | 
			
		||||
        beforeChange: function (currentSlide, nextSlide) {
 | 
			
		||||
          console.log('before change', currentSlide, nextSlide)
 | 
			
		||||
        },
 | 
			
		||||
        afterChange: function (currentSlide) {
 | 
			
		||||
          console.log('after change', currentSlide)
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Vertical Mode</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
import '../assets/index.less'
 | 
			
		||||
import Slider from '../src/slider'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    const settings = {
 | 
			
		||||
      props: {
 | 
			
		||||
        dots: true,
 | 
			
		||||
        infinite: true,
 | 
			
		||||
        slidesToShow: 3,
 | 
			
		||||
        slidesToScroll: 1,
 | 
			
		||||
        vertical: true,
 | 
			
		||||
        verticalSwiping: true,
 | 
			
		||||
        swipeToSlide: true,
 | 
			
		||||
        beforeChange: function (currentSlide, nextSlide) {
 | 
			
		||||
          console.log('before change', currentSlide, nextSlide)
 | 
			
		||||
        },
 | 
			
		||||
        afterChange: function (currentSlide) {
 | 
			
		||||
          console.log('after change', currentSlide)
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Vertical Mode with Swipe To Slide</h2>
 | 
			
		||||
        <Slider {...settings}>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>1</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>2</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>3</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>4</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>5</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <h3>6</h3>
 | 
			
		||||
          </div>
 | 
			
		||||
        </Slider>
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
export const baseUrl =
 | 
			
		||||
  process.env.NODE_ENV === 'production'
 | 
			
		||||
    ? 'https://s3.amazonaws.com/static.neostack.com/img/react-slick'
 | 
			
		||||
    : '/img/react-slick'
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
import abstract01 from '../assets/img/react-slick/abstract01.jpg'
 | 
			
		||||
import abstract02 from '../assets/img/react-slick/abstract02.jpg'
 | 
			
		||||
import abstract03 from '../assets/img/react-slick/abstract03.jpg'
 | 
			
		||||
import abstract04 from '../assets/img/react-slick/abstract04.jpg'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  abstract01,
 | 
			
		||||
  abstract02,
 | 
			
		||||
  abstract03,
 | 
			
		||||
  abstract04,
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
import SimpleSlider from './SimpleSlider'
 | 
			
		||||
import SlideChangeHooks from './SlideChangeHooks'
 | 
			
		||||
import MultipleItems from './MultipleItems'
 | 
			
		||||
import MultipleRows from './MultipleRows'
 | 
			
		||||
import Responsive from './Responsive'
 | 
			
		||||
import Resizable from './Resizable'
 | 
			
		||||
import UnevenSetsInfinite from './UnevenSetsInfinite'
 | 
			
		||||
import UnevenSetsFinite from './UnevenSetsFinite'
 | 
			
		||||
import CenterMode from './CenterMode'
 | 
			
		||||
import FocusOnSelect from './FocusOnSelect'
 | 
			
		||||
import AutoPlay from './AutoPlay'
 | 
			
		||||
import AutoPlayMethods from './AutoPlayMethods'
 | 
			
		||||
import PauseOnHover from './PauseOnHover'
 | 
			
		||||
import Rtl from './Rtl'
 | 
			
		||||
import VariableWidth from './VariableWidth'
 | 
			
		||||
import AdaptiveHeight from './AdaptiveHeight'
 | 
			
		||||
import LazyLoad from './LazyLoad'
 | 
			
		||||
import Fade from './Fade'
 | 
			
		||||
import SlickGoTo from './SlickGoTo'
 | 
			
		||||
import CustomArrows from './CustomArrows'
 | 
			
		||||
import PreviousNextMethods from './PreviousNextMethods'
 | 
			
		||||
import DynamicSlides from './DynamicSlides'
 | 
			
		||||
import VerticalMode from './VerticalMode'
 | 
			
		||||
import SwipeToSlide from './SwipeToSlide'
 | 
			
		||||
import VerticalSwipeToSlide from './VerticalSwipeToSlide'
 | 
			
		||||
import CustomPaging from './CustomPaging'
 | 
			
		||||
import CustomSlides from './CustomSlides'
 | 
			
		||||
import AsNavFor from './AsNavFor'
 | 
			
		||||
import AppendDots from './AppendDots'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  render () {
 | 
			
		||||
    return (
 | 
			
		||||
      <div class='content'>
 | 
			
		||||
        <SimpleSlider />
 | 
			
		||||
        <MultipleItems />
 | 
			
		||||
        <MultipleRows />
 | 
			
		||||
        <Responsive />
 | 
			
		||||
        <Resizable />
 | 
			
		||||
        <UnevenSetsInfinite />
 | 
			
		||||
        <UnevenSetsFinite />
 | 
			
		||||
        <CenterMode />
 | 
			
		||||
        <FocusOnSelect />
 | 
			
		||||
        <AutoPlay />
 | 
			
		||||
        <AutoPlayMethods />
 | 
			
		||||
        <PauseOnHover />
 | 
			
		||||
        <Rtl />
 | 
			
		||||
        <VariableWidth />
 | 
			
		||||
        <AdaptiveHeight />
 | 
			
		||||
        <LazyLoad />
 | 
			
		||||
        <Fade />
 | 
			
		||||
        <SlideChangeHooks />
 | 
			
		||||
        <SlickGoTo />
 | 
			
		||||
        <CustomPaging />
 | 
			
		||||
        <CustomArrows />
 | 
			
		||||
        <CustomSlides />
 | 
			
		||||
        <PreviousNextMethods />
 | 
			
		||||
        <DynamicSlides />
 | 
			
		||||
        <VerticalMode />
 | 
			
		||||
        <SwipeToSlide />
 | 
			
		||||
        <VerticalSwipeToSlide />
 | 
			
		||||
        <AsNavFor />
 | 
			
		||||
        <AppendDots />
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,129 @@
 | 
			
		|||
import classnames from 'classnames'
 | 
			
		||||
import { cloneElement } from '../../_util/vnode'
 | 
			
		||||
import { canGoNext } from './utils/innerSliderUtils'
 | 
			
		||||
 | 
			
		||||
function noop () {}
 | 
			
		||||
 | 
			
		||||
export const PrevArrow = {
 | 
			
		||||
  functional: true,
 | 
			
		||||
  clickHandler (options, handle, e) {
 | 
			
		||||
    if (e) {
 | 
			
		||||
      e.preventDefault()
 | 
			
		||||
    }
 | 
			
		||||
    handle(options, e)
 | 
			
		||||
  },
 | 
			
		||||
  render (createElement, context) {
 | 
			
		||||
    const { props } = context
 | 
			
		||||
    const { clickHandler, infinite, currentSlide, slideCount, slidesToShow } = props
 | 
			
		||||
    const prevClasses = { 'slick-arrow': true, 'slick-prev': true }
 | 
			
		||||
    let prevHandler = function (e) {
 | 
			
		||||
      if (e) {
 | 
			
		||||
        e.preventDefault()
 | 
			
		||||
      }
 | 
			
		||||
      clickHandler({ message: 'previous' })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (
 | 
			
		||||
      !infinite && (currentSlide === 0 || slideCount <= slidesToShow)
 | 
			
		||||
    ) {
 | 
			
		||||
      prevClasses['slick-disabled'] = true
 | 
			
		||||
      prevHandler = noop
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const prevArrowProps = {
 | 
			
		||||
      key: '0',
 | 
			
		||||
      domProps: {
 | 
			
		||||
        'data-role': 'none',
 | 
			
		||||
      },
 | 
			
		||||
      class: classnames(prevClasses),
 | 
			
		||||
      style: { display: 'block' },
 | 
			
		||||
      on: {
 | 
			
		||||
        click: prevHandler,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    const customProps = {
 | 
			
		||||
      currentSlide: currentSlide,
 | 
			
		||||
      slideCount: slideCount,
 | 
			
		||||
    }
 | 
			
		||||
    let prevArrow
 | 
			
		||||
 | 
			
		||||
    if (props.prevArrow) {
 | 
			
		||||
      prevArrow = cloneElement(props.prevArrow({
 | 
			
		||||
        ...prevArrowProps,
 | 
			
		||||
        ...{
 | 
			
		||||
          props: customProps,
 | 
			
		||||
        },
 | 
			
		||||
      }), {})
 | 
			
		||||
    } else {
 | 
			
		||||
      prevArrow = (
 | 
			
		||||
        <button key='0' type='button' {...prevArrowProps}>
 | 
			
		||||
          {' '}
 | 
			
		||||
          Previous
 | 
			
		||||
        </button>
 | 
			
		||||
      )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return prevArrow
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const NextArrow = {
 | 
			
		||||
  functional: true,
 | 
			
		||||
  clickHandler (options, handle, e) {
 | 
			
		||||
    if (e) {
 | 
			
		||||
      e.preventDefault()
 | 
			
		||||
    }
 | 
			
		||||
    handle(options, e)
 | 
			
		||||
  },
 | 
			
		||||
  render (createElement, context) {
 | 
			
		||||
    const { props } = context
 | 
			
		||||
    const { clickHandler, currentSlide, slideCount } = props
 | 
			
		||||
 | 
			
		||||
    const nextClasses = { 'slick-arrow': true, 'slick-next': true }
 | 
			
		||||
    let nextHandler = function (e) {
 | 
			
		||||
      if (e) {
 | 
			
		||||
        e.preventDefault()
 | 
			
		||||
      }
 | 
			
		||||
      clickHandler({ message: 'next' })
 | 
			
		||||
    }
 | 
			
		||||
    if (!canGoNext(props)) {
 | 
			
		||||
      nextClasses['slick-disabled'] = true
 | 
			
		||||
      nextHandler = noop
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const nextArrowProps = {
 | 
			
		||||
      key: '1',
 | 
			
		||||
      domProps: {
 | 
			
		||||
        'data-role': 'none',
 | 
			
		||||
      },
 | 
			
		||||
      class: classnames(nextClasses),
 | 
			
		||||
      style: { display: 'block' },
 | 
			
		||||
      on: {
 | 
			
		||||
        click: nextHandler,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
    const customProps = {
 | 
			
		||||
      currentSlide: currentSlide,
 | 
			
		||||
      slideCount: slideCount,
 | 
			
		||||
    }
 | 
			
		||||
    let nextArrow
 | 
			
		||||
 | 
			
		||||
    if (props.nextArrow) {
 | 
			
		||||
      nextArrow = cloneElement(props.nextArrow({
 | 
			
		||||
        ...nextArrowProps,
 | 
			
		||||
        ...{
 | 
			
		||||
          props: customProps,
 | 
			
		||||
        },
 | 
			
		||||
      }), {})
 | 
			
		||||
    } else {
 | 
			
		||||
      nextArrow = (
 | 
			
		||||
        <button key='1' type='button' {...nextArrowProps}>
 | 
			
		||||
          {' '}
 | 
			
		||||
          Next
 | 
			
		||||
        </button>
 | 
			
		||||
      )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return nextArrow
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
import PropTypes from '../../_util/vue-types'
 | 
			
		||||
 | 
			
		||||
const defaultProps = {
 | 
			
		||||
  accessibility: PropTypes.bool.def(true),
 | 
			
		||||
  // 自定义高度
 | 
			
		||||
  adaptiveHeight: PropTypes.bool.def(false),
 | 
			
		||||
  afterChange: PropTypes.any.def(null),
 | 
			
		||||
  // appendDots: PropTypes.func.def((h, { dots }) => {
 | 
			
		||||
  //   return <ul style={{ display: 'block' }}>{dots}</ul>
 | 
			
		||||
  // }),
 | 
			
		||||
  arrows: PropTypes.bool.def(true),
 | 
			
		||||
  autoplay: PropTypes.bool.def(false),
 | 
			
		||||
  autoplaySpeed: PropTypes.number.def(3000),
 | 
			
		||||
  beforeChange: PropTypes.any.def(null),
 | 
			
		||||
  centerMode: PropTypes.bool.def(false),
 | 
			
		||||
  centerPadding: PropTypes.string.def('50px'),
 | 
			
		||||
  // className: '',
 | 
			
		||||
  cssEase: PropTypes.string.def('ease'),
 | 
			
		||||
  // customPaging: PropTypes.func.def((h, { i }) => {
 | 
			
		||||
  //   return <button>{i + 1}</button>
 | 
			
		||||
  // }),
 | 
			
		||||
  dots: PropTypes.bool.def(false),
 | 
			
		||||
  dotsClass: PropTypes.string.def('slick-dots'),
 | 
			
		||||
  draggable: PropTypes.bool.def(true),
 | 
			
		||||
  unslick: PropTypes.bool.def(false),
 | 
			
		||||
  easing: PropTypes.string.def('linear'),
 | 
			
		||||
  edgeFriction: PropTypes.number.def(0.35),
 | 
			
		||||
  fade: PropTypes.bool.def(false),
 | 
			
		||||
  focusOnSelect: PropTypes.bool.def(false),
 | 
			
		||||
  infinite: PropTypes.bool.def(true),
 | 
			
		||||
  initialSlide: PropTypes.number.def(0),
 | 
			
		||||
  lazyLoad: PropTypes.any.def(null),
 | 
			
		||||
  // nextArrow: PropTypes.any.def(null),
 | 
			
		||||
  verticalSwiping: PropTypes.bool.def(false),
 | 
			
		||||
  asNavFor: PropTypes.any.def(null),
 | 
			
		||||
  // onEdge: null,
 | 
			
		||||
  // onInit: null,
 | 
			
		||||
  // onLazyLoadError: null,
 | 
			
		||||
  // onReInit: null,
 | 
			
		||||
  // 圆点hover是否暂停
 | 
			
		||||
  pauseOnDotsHover: PropTypes.bool.def(false),
 | 
			
		||||
  // focus是否暂停
 | 
			
		||||
  pauseOnFocus: PropTypes.bool.def(false),
 | 
			
		||||
  // hover是否暂停
 | 
			
		||||
  pauseOnHover: PropTypes.bool.def(true),
 | 
			
		||||
  // prevArrow: PropTypes.any.def(null),
 | 
			
		||||
  responsive: PropTypes.any.def(null),
 | 
			
		||||
  rows: PropTypes.number.def(1),
 | 
			
		||||
  rtl: PropTypes.bool.def(false),
 | 
			
		||||
  slide: PropTypes.string.def('div'),
 | 
			
		||||
  slidesPerRow: PropTypes.number.def(1),
 | 
			
		||||
  slidesToScroll: PropTypes.number.def(1),
 | 
			
		||||
  slidesToShow: PropTypes.number.def(1),
 | 
			
		||||
  speed: PropTypes.number.def(500),
 | 
			
		||||
  swipe: PropTypes.bool.def(true),
 | 
			
		||||
  swipeEvent: PropTypes.any.def(null),
 | 
			
		||||
  swipeToSlide: PropTypes.bool.def(false),
 | 
			
		||||
  touchMove: PropTypes.bool.def(true),
 | 
			
		||||
  touchThreshold: PropTypes.number.def(5),
 | 
			
		||||
  useCSS: PropTypes.bool.def(true),
 | 
			
		||||
  useTransform: PropTypes.bool.def(true),
 | 
			
		||||
  variableWidth: PropTypes.bool.def(false),
 | 
			
		||||
  vertical: PropTypes.bool.def(false),
 | 
			
		||||
  waitForAnimate: PropTypes.bool.def(true),
 | 
			
		||||
  children: PropTypes.array,
 | 
			
		||||
  __propsSymbol__: PropTypes.any,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default defaultProps
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,84 @@
 | 
			
		|||
import classnames from 'classnames'
 | 
			
		||||
import { cloneElement } from '../../_util/vnode'
 | 
			
		||||
 | 
			
		||||
const getDotCount = function (spec) {
 | 
			
		||||
  let dots
 | 
			
		||||
 | 
			
		||||
  if (spec.infinite) {
 | 
			
		||||
    dots = Math.ceil(spec.slideCount / spec.slidesToScroll)
 | 
			
		||||
  } else {
 | 
			
		||||
    dots =
 | 
			
		||||
      Math.ceil((spec.slideCount - spec.slidesToShow) / spec.slidesToScroll) +
 | 
			
		||||
      1
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return dots
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  functional: true,
 | 
			
		||||
  render (createElement, context) {
 | 
			
		||||
    const { props, listeners } = context
 | 
			
		||||
    const {
 | 
			
		||||
      slideCount, slidesToScroll, slidesToShow,
 | 
			
		||||
      infinite, currentSlide, appendDots,
 | 
			
		||||
      customPaging, clickHandler, dotsClass,
 | 
			
		||||
    } = props
 | 
			
		||||
    const dotCount = getDotCount({
 | 
			
		||||
      slideCount: slideCount,
 | 
			
		||||
      slidesToScroll: slidesToScroll,
 | 
			
		||||
      slidesToShow: slidesToShow,
 | 
			
		||||
      infinite: infinite,
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    // Apply join & split to Array to pre-fill it for IE8
 | 
			
		||||
    //
 | 
			
		||||
    // Credit: http://stackoverflow.com/a/13735425/1849458
 | 
			
		||||
    const { mouseenter, mouseover, mouseleave } = listeners
 | 
			
		||||
    const mouseEvents = { mouseenter, mouseover, mouseleave }
 | 
			
		||||
    const dots = Array.apply(
 | 
			
		||||
      null,
 | 
			
		||||
      Array(dotCount + 1)
 | 
			
		||||
        .join('0')
 | 
			
		||||
        .split('')
 | 
			
		||||
    ).map((x, i) => {
 | 
			
		||||
      const leftBound = i * slidesToScroll
 | 
			
		||||
      const rightBound =
 | 
			
		||||
        i * slidesToScroll + (slidesToScroll - 1)
 | 
			
		||||
      const className = classnames({
 | 
			
		||||
        'slick-active':
 | 
			
		||||
          currentSlide >= leftBound &&
 | 
			
		||||
          currentSlide <= rightBound,
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      const dotOptions = {
 | 
			
		||||
        message: 'dots',
 | 
			
		||||
        index: i,
 | 
			
		||||
        slidesToScroll: slidesToScroll,
 | 
			
		||||
        currentSlide: currentSlide,
 | 
			
		||||
      }
 | 
			
		||||
      function onClick (e) {
 | 
			
		||||
        // In Autoplay the focus stays on clicked button even after transition
 | 
			
		||||
        // to next slide. That only goes away by click somewhere outside
 | 
			
		||||
        if (e) {
 | 
			
		||||
          e.preventDefault()
 | 
			
		||||
        }
 | 
			
		||||
        clickHandler(dotOptions)
 | 
			
		||||
      }
 | 
			
		||||
      return (
 | 
			
		||||
        <li key={i} class={className}>
 | 
			
		||||
          {cloneElement(customPaging({ i }), { on: {
 | 
			
		||||
            click: onClick,
 | 
			
		||||
          }})}
 | 
			
		||||
        </li>
 | 
			
		||||
      )
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    return cloneElement(appendDots({ dots }), {
 | 
			
		||||
      class: dotsClass,
 | 
			
		||||
      on: {
 | 
			
		||||
        ...mouseEvents,
 | 
			
		||||
      },
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
import Slider from './slider'
 | 
			
		||||
 | 
			
		||||
export default Slider
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
const initialState = {
 | 
			
		||||
  animating: false,
 | 
			
		||||
  autoplaying: null,
 | 
			
		||||
  currentDirection: 0,
 | 
			
		||||
  currentLeft: null,
 | 
			
		||||
  currentSlide: 0,
 | 
			
		||||
  direction: 1,
 | 
			
		||||
  dragging: false,
 | 
			
		||||
  edgeDragged: false,
 | 
			
		||||
  initialized: false,
 | 
			
		||||
  lazyLoadedList: [],
 | 
			
		||||
  listHeight: null,
 | 
			
		||||
  listWidth: null,
 | 
			
		||||
  scrolling: false,
 | 
			
		||||
  slideCount: null,
 | 
			
		||||
  slideHeight: null,
 | 
			
		||||
  slideWidth: null,
 | 
			
		||||
  swipeLeft: null,
 | 
			
		||||
  swiped: false, // used by swipeEvent. differentites between touch and swipe.
 | 
			
		||||
  swiping: false,
 | 
			
		||||
  touchObject: { startX: 0, startY: 0, curX: 0, curY: 0 },
 | 
			
		||||
  trackStyle: {},
 | 
			
		||||
  trackWidth: 0,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default initialState
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,851 @@
 | 
			
		|||
import debounce from 'lodash/debounce'
 | 
			
		||||
import classnames from 'classnames'
 | 
			
		||||
import Vue from 'vue'
 | 
			
		||||
import antRefDirective from '../../_util/antRefDirective'
 | 
			
		||||
import { getStyle } from '../../_util/props-util'
 | 
			
		||||
import BaseMixin from '../../_util/BaseMixin'
 | 
			
		||||
import defaultProps from './default-props'
 | 
			
		||||
import initialState from './initial-state'
 | 
			
		||||
import {
 | 
			
		||||
  getOnDemandLazySlides,
 | 
			
		||||
  extractObject,
 | 
			
		||||
  initializedState,
 | 
			
		||||
  getHeight,
 | 
			
		||||
  canGoNext,
 | 
			
		||||
  slideHandler,
 | 
			
		||||
  changeSlide,
 | 
			
		||||
  keyHandler,
 | 
			
		||||
  swipeStart,
 | 
			
		||||
  swipeMove,
 | 
			
		||||
  swipeEnd,
 | 
			
		||||
  getPreClones,
 | 
			
		||||
  getPostClones,
 | 
			
		||||
  getTrackLeft,
 | 
			
		||||
  getTrackCSS,
 | 
			
		||||
} from './utils/innerSliderUtils'
 | 
			
		||||
import Track from './track'
 | 
			
		||||
import Dots from './dots'
 | 
			
		||||
import { PrevArrow, NextArrow } from './arrows'
 | 
			
		||||
import ResizeObserver from 'resize-observer-polyfill'
 | 
			
		||||
 | 
			
		||||
Vue.use(antRefDirective)
 | 
			
		||||
 | 
			
		||||
function noop () {}
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  props: {
 | 
			
		||||
    ...defaultProps,
 | 
			
		||||
  },
 | 
			
		||||
  mixins: [BaseMixin],
 | 
			
		||||
  data () {
 | 
			
		||||
    this.preProps = { ...this.$props }
 | 
			
		||||
    this.list = null
 | 
			
		||||
    this.track = null
 | 
			
		||||
    this.callbackTimers = []
 | 
			
		||||
    this.clickable = true
 | 
			
		||||
    this.debouncedResize = null
 | 
			
		||||
    return {
 | 
			
		||||
      ...initialState,
 | 
			
		||||
      currentSlide: this.initialSlide,
 | 
			
		||||
      slideCount: this.children.length,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    listRefHandler (ref) {
 | 
			
		||||
      this.list = ref && ref.elm
 | 
			
		||||
    },
 | 
			
		||||
    trackRefHandler (ref) {
 | 
			
		||||
      this.track = ref && ref.elm
 | 
			
		||||
    },
 | 
			
		||||
    adaptHeight () {
 | 
			
		||||
      if (this.adaptiveHeight && this.list) {
 | 
			
		||||
        const elem = this.list.querySelector(
 | 
			
		||||
          `[data-index="${this.currentSlide}"]`
 | 
			
		||||
        )
 | 
			
		||||
        this.list.style.height = getHeight(elem) + 'px'
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    onWindowResized (setTrackStyle) {
 | 
			
		||||
      if (this.debouncedResize) this.debouncedResize.cancel()
 | 
			
		||||
      this.debouncedResize = debounce(() => this.resizeWindow(setTrackStyle), 50)
 | 
			
		||||
      this.debouncedResize()
 | 
			
		||||
    },
 | 
			
		||||
    resizeWindow (setTrackStyle = true) {
 | 
			
		||||
      if (!this.track) return
 | 
			
		||||
      const spec = {
 | 
			
		||||
        listRef: this.list,
 | 
			
		||||
        trackRef: this.track,
 | 
			
		||||
        children: this.children,
 | 
			
		||||
        ...this.$props,
 | 
			
		||||
        ...this.$data,
 | 
			
		||||
      }
 | 
			
		||||
      this.updateState(spec, setTrackStyle, () => {
 | 
			
		||||
        if (this.autoplay) {
 | 
			
		||||
          this.handleAutoPlay('update')
 | 
			
		||||
        } else {
 | 
			
		||||
          this.pause('paused')
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      // animating state should be cleared while resizing, otherwise autoplay stops working
 | 
			
		||||
      this.setState({
 | 
			
		||||
        animating: false,
 | 
			
		||||
      })
 | 
			
		||||
      clearTimeout(this.animationEndCallback)
 | 
			
		||||
      delete this.animationEndCallback
 | 
			
		||||
    },
 | 
			
		||||
    updateState (spec, setTrackStyle, callback) {
 | 
			
		||||
      const updatedState = initializedState(spec)
 | 
			
		||||
      spec = { ...spec, ...updatedState, slideIndex: updatedState.currentSlide }
 | 
			
		||||
      const targetLeft = getTrackLeft(spec)
 | 
			
		||||
      spec = { ...spec, left: targetLeft }
 | 
			
		||||
      const trackStyle = getTrackCSS(spec)
 | 
			
		||||
      if (
 | 
			
		||||
        setTrackStyle ||
 | 
			
		||||
        this.children.length !==
 | 
			
		||||
        spec.children.length
 | 
			
		||||
      ) {
 | 
			
		||||
        updatedState['trackStyle'] = trackStyle
 | 
			
		||||
      }
 | 
			
		||||
      this.setState(updatedState, callback)
 | 
			
		||||
    },
 | 
			
		||||
    ssrInit () {
 | 
			
		||||
      const children = this.children
 | 
			
		||||
      if (this.variableWidth) {
 | 
			
		||||
        let trackWidth = 0
 | 
			
		||||
        let trackLeft = 0
 | 
			
		||||
        const childrenWidths = []
 | 
			
		||||
        const preClones = getPreClones({
 | 
			
		||||
          ...this.$props,
 | 
			
		||||
          ...this.$data,
 | 
			
		||||
          slideCount: children.length,
 | 
			
		||||
        })
 | 
			
		||||
        const postClones = getPostClones({
 | 
			
		||||
          ...this.$props,
 | 
			
		||||
          ...this.$data,
 | 
			
		||||
          slideCount: children.length,
 | 
			
		||||
        })
 | 
			
		||||
        children.forEach(child => {
 | 
			
		||||
          const childWidth = getStyle(child).width.split('px')[0]
 | 
			
		||||
          childrenWidths.push(childWidth)
 | 
			
		||||
          trackWidth += childWidth
 | 
			
		||||
        })
 | 
			
		||||
        for (let i = 0; i < preClones; i++) {
 | 
			
		||||
          trackLeft += childrenWidths[childrenWidths.length - 1 - i]
 | 
			
		||||
          trackWidth += childrenWidths[childrenWidths.length - 1 - i]
 | 
			
		||||
        }
 | 
			
		||||
        for (let i = 0; i < postClones; i++) {
 | 
			
		||||
          trackWidth += childrenWidths[i]
 | 
			
		||||
        }
 | 
			
		||||
        for (let i = 0; i < this.currentSlide; i++) {
 | 
			
		||||
          trackLeft += childrenWidths[i]
 | 
			
		||||
        }
 | 
			
		||||
        const trackStyle = {
 | 
			
		||||
          width: trackWidth + 'px',
 | 
			
		||||
          left: -trackLeft + 'px',
 | 
			
		||||
        }
 | 
			
		||||
        if (this.centerMode) {
 | 
			
		||||
          const currentWidth = `${childrenWidths[this.currentSlide]}px`
 | 
			
		||||
          trackStyle.left = `calc(${
 | 
			
		||||
            trackStyle.left
 | 
			
		||||
          } + (100% - ${currentWidth}) / 2 ) `
 | 
			
		||||
        }
 | 
			
		||||
        this.setState({
 | 
			
		||||
          trackStyle,
 | 
			
		||||
        })
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
      const childrenCount = children.length
 | 
			
		||||
      const spec = { ...this.$props, ...this.$data, slideCount: childrenCount }
 | 
			
		||||
      const slideCount = getPreClones(spec) + getPostClones(spec) + childrenCount
 | 
			
		||||
      const trackWidth = 100 / this.slidesToShow * slideCount
 | 
			
		||||
      const slideWidth = 100 / slideCount
 | 
			
		||||
      let trackLeft =
 | 
			
		||||
        -slideWidth *
 | 
			
		||||
        (getPreClones(spec) + this.currentSlide) *
 | 
			
		||||
        trackWidth /
 | 
			
		||||
        100
 | 
			
		||||
      if (this.centerMode) {
 | 
			
		||||
        trackLeft += (100 - slideWidth * trackWidth / 100) / 2
 | 
			
		||||
      }
 | 
			
		||||
      const trackStyle = {
 | 
			
		||||
        width: trackWidth + '%',
 | 
			
		||||
        left: trackLeft + '%',
 | 
			
		||||
      }
 | 
			
		||||
      this.setState({
 | 
			
		||||
        slideWidth: slideWidth + '%',
 | 
			
		||||
        trackStyle: trackStyle,
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    checkImagesLoad () {
 | 
			
		||||
      const images = document.querySelectorAll('.slick-slide img')
 | 
			
		||||
      const imagesCount = images.length
 | 
			
		||||
      let loadedCount = 0
 | 
			
		||||
      Array.prototype.forEach.call(images, image => {
 | 
			
		||||
        const handler = () =>
 | 
			
		||||
          ++loadedCount && loadedCount >= imagesCount && this.onWindowResized()
 | 
			
		||||
        if (!image.onclick) {
 | 
			
		||||
          image.onclick = () => image.parentNode.focus()
 | 
			
		||||
        } else {
 | 
			
		||||
          const prevClickHandler = image.onclick
 | 
			
		||||
          image.onclick = () => {
 | 
			
		||||
            prevClickHandler()
 | 
			
		||||
            image.parentNode.focus()
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        if (!image.onload) {
 | 
			
		||||
          if (this.$props.lazyLoad) {
 | 
			
		||||
            image.onload = () => {
 | 
			
		||||
              this.adaptHeight()
 | 
			
		||||
              this.callbackTimers.push(
 | 
			
		||||
                setTimeout(this.onWindowResized, this.speed)
 | 
			
		||||
              )
 | 
			
		||||
            }
 | 
			
		||||
          } else {
 | 
			
		||||
            image.onload = handler
 | 
			
		||||
            image.onerror = () => {
 | 
			
		||||
              handler()
 | 
			
		||||
              this.$emit('lazyLoadError')
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    progressiveLazyLoad () {
 | 
			
		||||
      const slidesToLoad = []
 | 
			
		||||
      const spec = { ...this.$props, ...this.$data }
 | 
			
		||||
      for (
 | 
			
		||||
        let index = this.currentSlide;
 | 
			
		||||
        index < this.slideCount + getPostClones(spec);
 | 
			
		||||
        index++
 | 
			
		||||
      ) {
 | 
			
		||||
        if (this.lazyLoadedList.indexOf(index) < 0) {
 | 
			
		||||
          slidesToLoad.push(index)
 | 
			
		||||
          break
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      for (
 | 
			
		||||
        let index = this.currentSlide - 1;
 | 
			
		||||
        index >= -getPreClones(spec);
 | 
			
		||||
        index--
 | 
			
		||||
      ) {
 | 
			
		||||
        if (this.lazyLoadedList.indexOf(index) < 0) {
 | 
			
		||||
          slidesToLoad.push(index)
 | 
			
		||||
          break
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      if (slidesToLoad.length > 0) {
 | 
			
		||||
        this.setState(state => ({
 | 
			
		||||
          lazyLoadedList: state.lazyLoadedList.concat(slidesToLoad),
 | 
			
		||||
        }))
 | 
			
		||||
        this.$emit('lazyLoad', slidesToLoad)
 | 
			
		||||
      } else {
 | 
			
		||||
        if (this.lazyLoadTimer) {
 | 
			
		||||
          clearInterval(this.lazyLoadTimer)
 | 
			
		||||
          delete this.lazyLoadTimer
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    slideHandler (index, dontAnimate = false) {
 | 
			
		||||
      const {
 | 
			
		||||
        asNavFor,
 | 
			
		||||
        currentSlide,
 | 
			
		||||
        beforeChange,
 | 
			
		||||
        speed,
 | 
			
		||||
        afterChange,
 | 
			
		||||
      } = this.$props
 | 
			
		||||
      const { state, nextState } = slideHandler({
 | 
			
		||||
        index,
 | 
			
		||||
        ...this.$props,
 | 
			
		||||
        ...this.$data,
 | 
			
		||||
        trackRef: this.track,
 | 
			
		||||
        useCSS: this.useCSS && !dontAnimate,
 | 
			
		||||
      })
 | 
			
		||||
      if (!state) return
 | 
			
		||||
      beforeChange && beforeChange(currentSlide, state.currentSlide)
 | 
			
		||||
      const slidesToLoad = state.lazyLoadedList.filter(
 | 
			
		||||
        value => this.lazyLoadedList.indexOf(value) < 0
 | 
			
		||||
      )
 | 
			
		||||
      if (this.$listeners.lazyLoad && slidesToLoad.length > 0) {
 | 
			
		||||
        this.$emit('lazyLoad', slidesToLoad)
 | 
			
		||||
      }
 | 
			
		||||
      this.setState(state, () => {
 | 
			
		||||
        asNavFor &&
 | 
			
		||||
          asNavFor.innerSlider.currentSlide !== currentSlide &&
 | 
			
		||||
          asNavFor.innerSlider.slideHandler(index)
 | 
			
		||||
        if (!nextState) return
 | 
			
		||||
        this.animationEndCallback = setTimeout(() => {
 | 
			
		||||
          const { animating, ...firstBatch } = nextState
 | 
			
		||||
          this.setState(firstBatch, () => {
 | 
			
		||||
            this.callbackTimers.push(
 | 
			
		||||
              setTimeout(() => this.setState({ animating }), 10)
 | 
			
		||||
            )
 | 
			
		||||
            afterChange && afterChange(state.currentSlide)
 | 
			
		||||
            delete this.animationEndCallback
 | 
			
		||||
          })
 | 
			
		||||
        }, speed)
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    changeSlide (options, dontAnimate = false) {
 | 
			
		||||
      const spec = { ...this.$props, ...this.$data }
 | 
			
		||||
      const targetSlide = changeSlide(spec, options)
 | 
			
		||||
      if (targetSlide !== 0 && !targetSlide) return
 | 
			
		||||
      if (dontAnimate === true) {
 | 
			
		||||
        this.slideHandler(targetSlide, dontAnimate)
 | 
			
		||||
      } else {
 | 
			
		||||
        this.slideHandler(targetSlide)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    clickHandler (e) {
 | 
			
		||||
      if (this.clickable === false) {
 | 
			
		||||
        e.stopPropagation()
 | 
			
		||||
        e.preventDefault()
 | 
			
		||||
      }
 | 
			
		||||
      this.clickable = true
 | 
			
		||||
    },
 | 
			
		||||
    keyHandler (e) {
 | 
			
		||||
      const dir = keyHandler(e, this.accessibility, this.rtl)
 | 
			
		||||
      dir !== '' && this.changeSlide({ message: dir })
 | 
			
		||||
    },
 | 
			
		||||
    selectHandler (options) {
 | 
			
		||||
      this.changeSlide(options)
 | 
			
		||||
    },
 | 
			
		||||
    disableBodyScroll () {
 | 
			
		||||
      const preventDefault = e => {
 | 
			
		||||
        e = e || window.event
 | 
			
		||||
        if (e.preventDefault) e.preventDefault()
 | 
			
		||||
        e.returnValue = false
 | 
			
		||||
      }
 | 
			
		||||
      window.ontouchmove = preventDefault
 | 
			
		||||
    },
 | 
			
		||||
    enableBodyScroll () {
 | 
			
		||||
      window.ontouchmove = null
 | 
			
		||||
    },
 | 
			
		||||
    swipeStart (e) {
 | 
			
		||||
      if (this.verticalSwiping) {
 | 
			
		||||
        this.disableBodyScroll()
 | 
			
		||||
      }
 | 
			
		||||
      const state = swipeStart(e, this.swipe, this.draggable)
 | 
			
		||||
      state !== '' && this.setState(state)
 | 
			
		||||
    },
 | 
			
		||||
    swipeMove (e) {
 | 
			
		||||
      const state = swipeMove(e, {
 | 
			
		||||
        ...this.$props,
 | 
			
		||||
        ...this.$data,
 | 
			
		||||
        trackRef: this.track,
 | 
			
		||||
        listRef: this.list,
 | 
			
		||||
        slideIndex: this.currentSlide,
 | 
			
		||||
      })
 | 
			
		||||
      if (!state) return
 | 
			
		||||
      if (state['swiping']) {
 | 
			
		||||
        this.clickable = false
 | 
			
		||||
      }
 | 
			
		||||
      this.setState(state)
 | 
			
		||||
    },
 | 
			
		||||
    swipeEnd (e) {
 | 
			
		||||
      const state = swipeEnd(e, {
 | 
			
		||||
        ...this.$props,
 | 
			
		||||
        ...this.$data,
 | 
			
		||||
        trackRef: this.track,
 | 
			
		||||
        listRef: this.list,
 | 
			
		||||
        slideIndex: this.currentSlide,
 | 
			
		||||
      })
 | 
			
		||||
      if (!state) return
 | 
			
		||||
      const triggerSlideHandler = state['triggerSlideHandler']
 | 
			
		||||
      delete state['triggerSlideHandler']
 | 
			
		||||
      this.setState(state)
 | 
			
		||||
      if (triggerSlideHandler === undefined) return
 | 
			
		||||
      this.slideHandler(triggerSlideHandler)
 | 
			
		||||
      if (this.$props.verticalSwiping) {
 | 
			
		||||
        this.enableBodyScroll()
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    slickPrev () {
 | 
			
		||||
      // this and fellow methods are wrapped in setTimeout
 | 
			
		||||
      // to make sure initialize setState has happened before
 | 
			
		||||
      // any of such methods are called
 | 
			
		||||
      this.callbackTimers.push(
 | 
			
		||||
        setTimeout(() => this.changeSlide({ message: 'previous' }), 0)
 | 
			
		||||
      )
 | 
			
		||||
    },
 | 
			
		||||
    slickNext () {
 | 
			
		||||
      this.callbackTimers.push(
 | 
			
		||||
        setTimeout(() => this.changeSlide({ message: 'next' }), 0)
 | 
			
		||||
      )
 | 
			
		||||
    },
 | 
			
		||||
    slickGoTo (slide, dontAnimate = false) {
 | 
			
		||||
      slide = Number(slide)
 | 
			
		||||
      if (isNaN(slide)) return ''
 | 
			
		||||
      this.callbackTimers.push(
 | 
			
		||||
        setTimeout(
 | 
			
		||||
          () =>
 | 
			
		||||
            this.changeSlide(
 | 
			
		||||
              {
 | 
			
		||||
                message: 'index',
 | 
			
		||||
                index: slide,
 | 
			
		||||
                currentSlide: this.currentSlide,
 | 
			
		||||
              },
 | 
			
		||||
              dontAnimate
 | 
			
		||||
            ),
 | 
			
		||||
          0
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
    },
 | 
			
		||||
    play () {
 | 
			
		||||
      let nextIndex
 | 
			
		||||
      if (this.rtl) {
 | 
			
		||||
        nextIndex = this.currentSlide - this.slidesToScroll
 | 
			
		||||
      } else {
 | 
			
		||||
        if (canGoNext({ ...this.$props, ...this.$data })) {
 | 
			
		||||
          nextIndex = this.currentSlide + this.slidesToScroll
 | 
			
		||||
        } else {
 | 
			
		||||
          return false
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.slideHandler(nextIndex)
 | 
			
		||||
    },
 | 
			
		||||
    handleAutoPlay (playType) {
 | 
			
		||||
      if (this.autoplayTimer) {
 | 
			
		||||
        clearInterval(this.autoplayTimer)
 | 
			
		||||
      }
 | 
			
		||||
      const autoplaying = this.autoplaying
 | 
			
		||||
      if (playType === 'update') {
 | 
			
		||||
        if (
 | 
			
		||||
          autoplaying === 'hovered' ||
 | 
			
		||||
          autoplaying === 'focused' ||
 | 
			
		||||
          autoplaying === 'paused'
 | 
			
		||||
        ) {
 | 
			
		||||
          return
 | 
			
		||||
        }
 | 
			
		||||
      } else if (playType === 'leave') {
 | 
			
		||||
        if (autoplaying === 'paused' || autoplaying === 'focused') {
 | 
			
		||||
          return
 | 
			
		||||
        }
 | 
			
		||||
      } else if (playType === 'blur') {
 | 
			
		||||
        if (autoplaying === 'paused' || autoplaying === 'hovered') {
 | 
			
		||||
          return
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      this.autoplayTimer = setInterval(this.play, this.autoplaySpeed + 50)
 | 
			
		||||
      this.setState({ autoplaying: 'playing' })
 | 
			
		||||
    },
 | 
			
		||||
    pause (pauseType) {
 | 
			
		||||
      if (this.autoplayTimer) {
 | 
			
		||||
        clearInterval(this.autoplayTimer)
 | 
			
		||||
        this.autoplayTimer = null
 | 
			
		||||
      }
 | 
			
		||||
      const autoplaying = this.autoplaying
 | 
			
		||||
      if (pauseType === 'paused') {
 | 
			
		||||
        this.setState({ autoplaying: 'paused' })
 | 
			
		||||
      } else if (pauseType === 'focused') {
 | 
			
		||||
        if (autoplaying === 'hovered' || autoplaying === 'playing') {
 | 
			
		||||
          this.setState({ autoplaying: 'focused' })
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        // pauseType  is 'hovered'
 | 
			
		||||
        if (autoplaying === 'playing') {
 | 
			
		||||
          this.setState({ autoplaying: 'hovered' })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    onDotsOver () {
 | 
			
		||||
      this.autoplay && this.pause('hovered')
 | 
			
		||||
    },
 | 
			
		||||
    onDotsLeave () {
 | 
			
		||||
      this.autoplay &&
 | 
			
		||||
      this.autoplaying === 'hovered' &&
 | 
			
		||||
      this.handleAutoPlay('leave')
 | 
			
		||||
    },
 | 
			
		||||
    onTrackOver () {
 | 
			
		||||
      this.autoplay && this.pause('hovered')
 | 
			
		||||
    },
 | 
			
		||||
    onTrackLeave () {
 | 
			
		||||
      this.autoplay &&
 | 
			
		||||
      this.autoplaying === 'hovered' &&
 | 
			
		||||
      this.handleAutoPlay('leave')
 | 
			
		||||
    },
 | 
			
		||||
    onSlideFocus () {
 | 
			
		||||
      this.autoplay && this.pause('focused')
 | 
			
		||||
    },
 | 
			
		||||
    onSlideBlur () {
 | 
			
		||||
      this.autoplay &&
 | 
			
		||||
      this.autoplaying === 'focused' &&
 | 
			
		||||
      this.handleAutoPlay('blur')
 | 
			
		||||
    },
 | 
			
		||||
    customPaging ({ i }) {
 | 
			
		||||
      return <button>{i + 1}</button>
 | 
			
		||||
    },
 | 
			
		||||
    appendDots ({ dots }) {
 | 
			
		||||
      return <ul style={{ display: 'block' }}>{dots}</ul>
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  beforeMount () {
 | 
			
		||||
    this.ssrInit()
 | 
			
		||||
    this.$emit('init')
 | 
			
		||||
    if (this.lazyLoad) {
 | 
			
		||||
      const slidesToLoad = getOnDemandLazySlides({
 | 
			
		||||
        ...this.$props,
 | 
			
		||||
        ...this.$data,
 | 
			
		||||
      })
 | 
			
		||||
      if (slidesToLoad.length > 0) {
 | 
			
		||||
        this.setState(prevState => ({
 | 
			
		||||
          lazyLoadedList: prevState.lazyLoadedList.concat(slidesToLoad),
 | 
			
		||||
        }))
 | 
			
		||||
        this.$emit('lazyLoad', slidesToLoad)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted () {
 | 
			
		||||
    this.$nextTick(() => {
 | 
			
		||||
      const spec = {
 | 
			
		||||
        listRef: this.list,
 | 
			
		||||
        trackRef: this.track,
 | 
			
		||||
        children: this.children,
 | 
			
		||||
        ...this.$props,
 | 
			
		||||
      }
 | 
			
		||||
      this.updateState(spec, true, () => {
 | 
			
		||||
        this.adaptHeight()
 | 
			
		||||
        this.autoplay && this.handleAutoPlay('update')
 | 
			
		||||
      })
 | 
			
		||||
      if (this.lazyLoad === 'progressive') {
 | 
			
		||||
        this.lazyLoadTimer = setInterval(this.progressiveLazyLoad, 1000)
 | 
			
		||||
      }
 | 
			
		||||
      this.ro = new ResizeObserver(() => {
 | 
			
		||||
        if (this.animating) {
 | 
			
		||||
          this.onWindowResized(false) // don't set trackStyle hence don't break animation
 | 
			
		||||
          this.callbackTimers.push(
 | 
			
		||||
            setTimeout(() => this.onWindowResized(), this.speed)
 | 
			
		||||
          )
 | 
			
		||||
        } else {
 | 
			
		||||
          this.onWindowResized()
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      this.ro.observe(this.list)
 | 
			
		||||
      Array.prototype.forEach.call(
 | 
			
		||||
        document.querySelectorAll('.slick-slide'),
 | 
			
		||||
        slide => {
 | 
			
		||||
          slide.onfocus = this.$props.pauseOnFocus ? this.onSlideFocus : null
 | 
			
		||||
          slide.onblur = this.$props.pauseOnFocus ? this.onSlideBlur : null
 | 
			
		||||
        }
 | 
			
		||||
      )
 | 
			
		||||
      // To support server-side rendering
 | 
			
		||||
      if (!window) {
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
      if (window.addEventListener) {
 | 
			
		||||
        window.addEventListener('resize', this.onWindowResized)
 | 
			
		||||
      } else {
 | 
			
		||||
        window.attachEvent('onresize', this.onWindowResized)
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy () {
 | 
			
		||||
    if (this.animationEndCallback) {
 | 
			
		||||
      clearTimeout(this.animationEndCallback)
 | 
			
		||||
    }
 | 
			
		||||
    if (this.lazyLoadTimer) {
 | 
			
		||||
      clearInterval(this.lazyLoadTimer)
 | 
			
		||||
    }
 | 
			
		||||
    if (this.callbackTimers.length) {
 | 
			
		||||
      this.callbackTimers.forEach(timer => clearTimeout(timer))
 | 
			
		||||
      this.callbackTimers = []
 | 
			
		||||
    }
 | 
			
		||||
    if (window.addEventListener) {
 | 
			
		||||
      window.removeEventListener('resize', this.onWindowResized)
 | 
			
		||||
    } else {
 | 
			
		||||
      window.detachEvent('onresize', this.onWindowResized)
 | 
			
		||||
    }
 | 
			
		||||
    if (this.autoplayTimer) {
 | 
			
		||||
      clearInterval(this.autoplayTimer)
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  updated () {
 | 
			
		||||
    this.checkImagesLoad()
 | 
			
		||||
    this.$emit('reInit')
 | 
			
		||||
    if (this.lazyLoad) {
 | 
			
		||||
      const slidesToLoad = getOnDemandLazySlides({
 | 
			
		||||
        ...this.$props,
 | 
			
		||||
        ...this.$data,
 | 
			
		||||
      })
 | 
			
		||||
      if (slidesToLoad.length > 0) {
 | 
			
		||||
        this.setState(prevState => ({
 | 
			
		||||
          lazyLoadedList: prevState.lazyLoadedList.concat(slidesToLoad),
 | 
			
		||||
        }))
 | 
			
		||||
        this.$emit('lazyLoad')
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    // if (this.props.onLazyLoad) {
 | 
			
		||||
    //   this.props.onLazyLoad([leftMostSlide])
 | 
			
		||||
    // }
 | 
			
		||||
    this.adaptHeight()
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    __propsSymbol__ () {
 | 
			
		||||
      const nextProps = this.$props
 | 
			
		||||
      const spec = {
 | 
			
		||||
        listRef: this.list,
 | 
			
		||||
        trackRef: this.track,
 | 
			
		||||
        ...nextProps,
 | 
			
		||||
        ...this.$data,
 | 
			
		||||
      }
 | 
			
		||||
      let setTrackStyle = false
 | 
			
		||||
      for (const key of Object.keys(this.preProps)) {
 | 
			
		||||
        if (!nextProps.hasOwnProperty(key)) {
 | 
			
		||||
          setTrackStyle = true
 | 
			
		||||
          break
 | 
			
		||||
        }
 | 
			
		||||
        if (
 | 
			
		||||
          typeof nextProps[key] === 'object' ||
 | 
			
		||||
          typeof nextProps[key] === 'function' ||
 | 
			
		||||
          typeof nextProps[key] === 'symbol'
 | 
			
		||||
        ) {
 | 
			
		||||
          continue
 | 
			
		||||
        }
 | 
			
		||||
        if (nextProps[key] !== this.preProps[key]) {
 | 
			
		||||
          setTrackStyle = true
 | 
			
		||||
          break
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      this.updateState(spec, setTrackStyle, () => {
 | 
			
		||||
        if (this.currentSlide >= nextProps.children.length) {
 | 
			
		||||
          this.changeSlide({
 | 
			
		||||
            message: 'index',
 | 
			
		||||
            index: nextProps.children.length - nextProps.slidesToShow,
 | 
			
		||||
            currentSlide: this.currentSlide,
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
        if (nextProps.autoplay) {
 | 
			
		||||
          this.handleAutoPlay('update')
 | 
			
		||||
        } else {
 | 
			
		||||
          this.pause('paused')
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      this.preProps = { ...nextProps }
 | 
			
		||||
    },
 | 
			
		||||
    // '$props': function (props) {
 | 
			
		||||
    //   const spec = {
 | 
			
		||||
    //     listRef: this.list,
 | 
			
		||||
    //     trackRef: this.track,
 | 
			
		||||
    //     children: this.$slots.default,
 | 
			
		||||
    //     ...props,
 | 
			
		||||
    //     ...this.$data,
 | 
			
		||||
    //   }
 | 
			
		||||
    //   let setTrackStyle = false
 | 
			
		||||
    //   for (const key of Object.keys(this.$props)) {
 | 
			
		||||
    //     if (!props.hasOwnProperty(key)) {
 | 
			
		||||
    //       setTrackStyle = true
 | 
			
		||||
    //       break
 | 
			
		||||
    //     }
 | 
			
		||||
    //     if (
 | 
			
		||||
    //       typeof props[key] === 'object' ||
 | 
			
		||||
    //       typeof props[key] === 'function'
 | 
			
		||||
    //     ) {
 | 
			
		||||
    //       continue
 | 
			
		||||
    //     }
 | 
			
		||||
    //     if (props[key] !== this.$props[key]) {
 | 
			
		||||
    //       setTrackStyle = true
 | 
			
		||||
    //       break
 | 
			
		||||
    //     }
 | 
			
		||||
    //   }
 | 
			
		||||
    //   this.updateState(spec, setTrackStyle, () => {
 | 
			
		||||
    //     const children = this.$slots.default
 | 
			
		||||
    //     if (this.currentSlide >= children.length) {
 | 
			
		||||
    //       this.changeSlide({
 | 
			
		||||
    //         message: 'index',
 | 
			
		||||
    //         index:
 | 
			
		||||
    //         children.length - props.slidesToShow,
 | 
			
		||||
    //         currentSlide: this.currentSlide,
 | 
			
		||||
    //       })
 | 
			
		||||
    //     }
 | 
			
		||||
    //     if (props.autoplay) {
 | 
			
		||||
    //       this.handleAutoPlay('update')
 | 
			
		||||
    //     } else {
 | 
			
		||||
    //       this.pause('paused')
 | 
			
		||||
    //     }
 | 
			
		||||
    //   })
 | 
			
		||||
    // },
 | 
			
		||||
  },
 | 
			
		||||
  render () {
 | 
			
		||||
    const className = classnames('slick-slider', {
 | 
			
		||||
      'slick-vertical': this.vertical,
 | 
			
		||||
      'slick-initialized': true,
 | 
			
		||||
    })
 | 
			
		||||
    const spec = { ...this.$props, ...this.$data }
 | 
			
		||||
    let trackProps = extractObject(spec, [
 | 
			
		||||
      'fade',
 | 
			
		||||
      'cssEase',
 | 
			
		||||
      'speed',
 | 
			
		||||
      'infinite',
 | 
			
		||||
      'centerMode',
 | 
			
		||||
      'focusOnSelect',
 | 
			
		||||
      'currentSlide',
 | 
			
		||||
      'lazyLoad',
 | 
			
		||||
      'lazyLoadedList',
 | 
			
		||||
      'rtl',
 | 
			
		||||
      'slideWidth',
 | 
			
		||||
      'slideHeight',
 | 
			
		||||
      'listHeight',
 | 
			
		||||
      'vertical',
 | 
			
		||||
      'slidesToShow',
 | 
			
		||||
      'slidesToScroll',
 | 
			
		||||
      'slideCount',
 | 
			
		||||
      'trackStyle',
 | 
			
		||||
      'variableWidth',
 | 
			
		||||
      'unslick',
 | 
			
		||||
      'centerPadding',
 | 
			
		||||
    ])
 | 
			
		||||
    const { pauseOnHover } = this.$props
 | 
			
		||||
    trackProps = {
 | 
			
		||||
      props: {
 | 
			
		||||
        ...trackProps,
 | 
			
		||||
        focusOnSelect: this.focusOnSelect ? this.selectHandler : null,
 | 
			
		||||
      },
 | 
			
		||||
      directives: [{
 | 
			
		||||
        name: 'ant-ref',
 | 
			
		||||
        value: this.trackRefHandler,
 | 
			
		||||
      }],
 | 
			
		||||
      on: {
 | 
			
		||||
        mouseenter: pauseOnHover ? this.onTrackOver : noop,
 | 
			
		||||
        mouseleave: pauseOnHover ? this.onTrackLeave : noop,
 | 
			
		||||
        mouseover: pauseOnHover ? this.onTrackOver : noop,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let dots
 | 
			
		||||
    if (
 | 
			
		||||
      this.dots === true &&
 | 
			
		||||
      this.slideCount >= this.slidesToShow
 | 
			
		||||
    ) {
 | 
			
		||||
      let dotProps = extractObject(spec, [
 | 
			
		||||
        'dotsClass',
 | 
			
		||||
        'slideCount',
 | 
			
		||||
        'slidesToShow',
 | 
			
		||||
        'currentSlide',
 | 
			
		||||
        'slidesToScroll',
 | 
			
		||||
        'clickHandler',
 | 
			
		||||
        'children',
 | 
			
		||||
        'infinite',
 | 
			
		||||
        'appendDots',
 | 
			
		||||
      ])
 | 
			
		||||
      dotProps.customPaging = this.customPaging
 | 
			
		||||
      dotProps.appendDots = this.appendDots
 | 
			
		||||
      const { customPaging, appendDots } = this.$scopedSlots
 | 
			
		||||
      if (customPaging) {
 | 
			
		||||
        dotProps.customPaging = customPaging
 | 
			
		||||
      }
 | 
			
		||||
      if (appendDots) {
 | 
			
		||||
        dotProps.appendDots = appendDots
 | 
			
		||||
      }
 | 
			
		||||
      const { pauseOnDotsHover } = this.$props
 | 
			
		||||
      dotProps = {
 | 
			
		||||
        props: {
 | 
			
		||||
          ...dotProps,
 | 
			
		||||
          clickHandler: this.changeSlide,
 | 
			
		||||
        },
 | 
			
		||||
        on: {
 | 
			
		||||
          mouseenter: pauseOnDotsHover ? this.onDotsLeave : noop,
 | 
			
		||||
          mouseover: pauseOnDotsHover ? this.onDotsOver : noop,
 | 
			
		||||
          mouseleave: pauseOnDotsHover ? this.onDotsLeave : noop,
 | 
			
		||||
        },
 | 
			
		||||
      }
 | 
			
		||||
      dots = <Dots {...dotProps} />
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let prevArrow, nextArrow
 | 
			
		||||
    const arrowProps = extractObject(spec, [
 | 
			
		||||
      'infinite',
 | 
			
		||||
      'centerMode',
 | 
			
		||||
      'currentSlide',
 | 
			
		||||
      'slideCount',
 | 
			
		||||
      'slidesToShow',
 | 
			
		||||
    ])
 | 
			
		||||
    arrowProps.clickHandler = this.changeSlide
 | 
			
		||||
    const { prevArrow: prevArrowCustom, nextArrow: nextArrowCustom } = this.$scopedSlots
 | 
			
		||||
    if (prevArrowCustom) {
 | 
			
		||||
      arrowProps.prevArrow = prevArrowCustom
 | 
			
		||||
    }
 | 
			
		||||
    if (nextArrowCustom) {
 | 
			
		||||
      arrowProps.nextArrow = nextArrowCustom
 | 
			
		||||
    }
 | 
			
		||||
    if (this.arrows) {
 | 
			
		||||
      prevArrow = <PrevArrow {...{ props: arrowProps }} />
 | 
			
		||||
      nextArrow = <NextArrow {...{ props: arrowProps }} />
 | 
			
		||||
    }
 | 
			
		||||
    let verticalHeightStyle = null
 | 
			
		||||
 | 
			
		||||
    if (this.vertical) {
 | 
			
		||||
      verticalHeightStyle = {
 | 
			
		||||
        height: typeof this.listHeight === 'number' ? `${this.listHeight}px` : this.listHeight,
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let centerPaddingStyle = null
 | 
			
		||||
 | 
			
		||||
    if (this.vertical === false) {
 | 
			
		||||
      if (this.centerMode === true) {
 | 
			
		||||
        centerPaddingStyle = {
 | 
			
		||||
          padding: '0px ' + this.centerPadding,
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      if (this.centerMode === true) {
 | 
			
		||||
        centerPaddingStyle = {
 | 
			
		||||
          padding: this.centerPadding + ' 0px',
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const listStyle = { ...verticalHeightStyle, ...centerPaddingStyle }
 | 
			
		||||
    const touchMove = this.touchMove
 | 
			
		||||
    let listProps = {
 | 
			
		||||
      directives: [{
 | 
			
		||||
        name: 'ant-ref',
 | 
			
		||||
        value: this.listRefHandler,
 | 
			
		||||
      }],
 | 
			
		||||
      class: 'slick-list',
 | 
			
		||||
      style: listStyle,
 | 
			
		||||
      on: {
 | 
			
		||||
        click: this.clickHandler,
 | 
			
		||||
        mousedown: touchMove ? this.swipeStart : noop,
 | 
			
		||||
        mousemove: this.dragging && touchMove ? this.swipeMove : noop,
 | 
			
		||||
        mouseup: touchMove ? this.swipeEnd : noop,
 | 
			
		||||
        mouseleave: this.dragging && touchMove ? this.swipeEnd : noop,
 | 
			
		||||
        touchstart: touchMove ? this.swipeStart : noop,
 | 
			
		||||
        touchmove: this.dragging && touchMove ? this.swipeMove : noop,
 | 
			
		||||
        touchend: touchMove ? this.swipeEnd : noop,
 | 
			
		||||
        touchcancel: this.dragging && touchMove ? this.swipeEnd : noop,
 | 
			
		||||
        keydown: this.accessibility ? this.keyHandler : noop,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let innerSliderProps = {
 | 
			
		||||
      class: className,
 | 
			
		||||
      props: {
 | 
			
		||||
        dir: 'ltr',
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.unslick) {
 | 
			
		||||
      listProps = {
 | 
			
		||||
        class: 'slick-list',
 | 
			
		||||
        directives: [{
 | 
			
		||||
          name: 'ant-ref',
 | 
			
		||||
          value: this.listRefHandler,
 | 
			
		||||
        }],
 | 
			
		||||
      }
 | 
			
		||||
      innerSliderProps = { class: className }
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div {...innerSliderProps}>
 | 
			
		||||
        {!this.unslick ? prevArrow : ''}
 | 
			
		||||
        <div {...listProps}>
 | 
			
		||||
          <Track {...trackProps}>
 | 
			
		||||
            {this.children}
 | 
			
		||||
          </Track>
 | 
			
		||||
        </div>
 | 
			
		||||
        {!this.unslick ? nextArrow : ''}
 | 
			
		||||
        {!this.unslick ? dots : ''}
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,241 @@
 | 
			
		|||
import json2mq from 'json2mq'
 | 
			
		||||
import Vue from 'vue'
 | 
			
		||||
import antRefDirective from '../../_util/antRefDirective'
 | 
			
		||||
import BaseMixin from '../../_util/BaseMixin'
 | 
			
		||||
import { cloneElement } from '../../_util/vnode'
 | 
			
		||||
import { getStyle } from '../../_util/props-util'
 | 
			
		||||
import InnerSlider from './inner-slider'
 | 
			
		||||
import defaultProps from './default-props'
 | 
			
		||||
import { canUseDOM } from './utils/innerSliderUtils'
 | 
			
		||||
const enquire = canUseDOM() && require('enquire.js')
 | 
			
		||||
 | 
			
		||||
Vue.use(antRefDirective)
 | 
			
		||||
export default {
 | 
			
		||||
  props: {
 | 
			
		||||
    ...defaultProps,
 | 
			
		||||
  },
 | 
			
		||||
  mixins: [BaseMixin],
 | 
			
		||||
  data () {
 | 
			
		||||
    this._responsiveMediaHandlers = []
 | 
			
		||||
    return {
 | 
			
		||||
      breakpoint: null,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    innerSliderRefHandler (ref) {
 | 
			
		||||
      this.innerSlider = ref && ref.componentInstance
 | 
			
		||||
    },
 | 
			
		||||
    media (query, handler) {
 | 
			
		||||
      // javascript handler for  css media query
 | 
			
		||||
      enquire.register(query, handler)
 | 
			
		||||
      this._responsiveMediaHandlers.push({ query, handler })
 | 
			
		||||
    },
 | 
			
		||||
    slickPrev () {
 | 
			
		||||
      this.innerSlider.slickPrev()
 | 
			
		||||
    },
 | 
			
		||||
    slickNext () {
 | 
			
		||||
      this.innerSlider.slickNext()
 | 
			
		||||
    },
 | 
			
		||||
    slickGoTo (slide, dontAnimate = false) {
 | 
			
		||||
      this.innerSlider.slickGoTo(slide, dontAnimate)
 | 
			
		||||
    },
 | 
			
		||||
    slickPause () {
 | 
			
		||||
      this.innerSlider.pause('paused')
 | 
			
		||||
    },
 | 
			
		||||
    slickPlay () {
 | 
			
		||||
      this.innerSlider.handleAutoPlay('play')
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  // handles responsive breakpoints
 | 
			
		||||
  beforeMount () {
 | 
			
		||||
    // performance monitoring
 | 
			
		||||
    // if (process.env.NODE_ENV !== 'production') {
 | 
			
		||||
    // const { whyDidYouUpdate } = require('why-did-you-update')
 | 
			
		||||
    // whyDidYouUpdate(React)
 | 
			
		||||
    // }
 | 
			
		||||
    if (this.responsive) {
 | 
			
		||||
      const breakpoints = this.responsive.map(
 | 
			
		||||
        breakpt => breakpt.breakpoint
 | 
			
		||||
      )
 | 
			
		||||
      // sort them in increasing order of their numerical value
 | 
			
		||||
      breakpoints.sort((x, y) => x - y)
 | 
			
		||||
 | 
			
		||||
      breakpoints.forEach((breakpoint, index) => {
 | 
			
		||||
        // media query for each breakpoint
 | 
			
		||||
        let bQuery
 | 
			
		||||
        if (index === 0) {
 | 
			
		||||
          bQuery = json2mq({ minWidth: 0, maxWidth: breakpoint })
 | 
			
		||||
        } else {
 | 
			
		||||
          bQuery = json2mq({
 | 
			
		||||
            minWidth: breakpoints[index - 1] + 1,
 | 
			
		||||
            maxWidth: breakpoint,
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
        // when not using server side rendering
 | 
			
		||||
        canUseDOM() &&
 | 
			
		||||
          this.media(bQuery, () => {
 | 
			
		||||
            this.setState({ breakpoint: breakpoint })
 | 
			
		||||
          })
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      // Register media query for full screen. Need to support resize from small to large
 | 
			
		||||
      // convert javascript object to media query string
 | 
			
		||||
      const query = json2mq({ minWidth: breakpoints.slice(-1)[0] })
 | 
			
		||||
 | 
			
		||||
      canUseDOM() &&
 | 
			
		||||
        this.media(query, () => {
 | 
			
		||||
          this.setState({ breakpoint: null })
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy () {
 | 
			
		||||
    this._responsiveMediaHandlers.forEach(function (obj) {
 | 
			
		||||
      enquire.unregister(obj.query, obj.handler)
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    let settings
 | 
			
		||||
    let newProps
 | 
			
		||||
    if (this.breakpoint) {
 | 
			
		||||
      newProps = this.responsive.filter(
 | 
			
		||||
        resp => resp.breakpoint === this.breakpoint
 | 
			
		||||
      )
 | 
			
		||||
      settings =
 | 
			
		||||
        newProps[0].settings === 'unslick'
 | 
			
		||||
          ? 'unslick'
 | 
			
		||||
          : { ...this.$props, ...newProps[0].settings }
 | 
			
		||||
    } else {
 | 
			
		||||
      settings = { ...this.$props }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // force scrolling by one if centerMode is on
 | 
			
		||||
    if (settings.centerMode) {
 | 
			
		||||
      if (
 | 
			
		||||
        settings.slidesToScroll > 1 &&
 | 
			
		||||
        process.env.NODE_ENV !== 'production'
 | 
			
		||||
      ) {
 | 
			
		||||
        console.warn(
 | 
			
		||||
          `slidesToScroll should be equal to 1 in centerMode, you are using ${
 | 
			
		||||
            settings.slidesToScroll
 | 
			
		||||
          }`
 | 
			
		||||
        )
 | 
			
		||||
      }
 | 
			
		||||
      settings.slidesToScroll = 1
 | 
			
		||||
    }
 | 
			
		||||
    // force showing one slide and scrolling by one if the fade mode is on
 | 
			
		||||
    if (settings.fade) {
 | 
			
		||||
      if (settings.slidesToShow > 1 && process.env.NODE_ENV !== 'production') {
 | 
			
		||||
        console.warn(
 | 
			
		||||
          `slidesToShow should be equal to 1 when fade is true, you're using ${
 | 
			
		||||
            settings.slidesToShow
 | 
			
		||||
          }`
 | 
			
		||||
        )
 | 
			
		||||
      }
 | 
			
		||||
      if (
 | 
			
		||||
        settings.slidesToScroll > 1 &&
 | 
			
		||||
        process.env.NODE_ENV !== 'production'
 | 
			
		||||
      ) {
 | 
			
		||||
        console.warn(
 | 
			
		||||
          `slidesToScroll should be equal to 1 when fade is true, you're using ${
 | 
			
		||||
            settings.slidesToScroll
 | 
			
		||||
          }`
 | 
			
		||||
        )
 | 
			
		||||
      }
 | 
			
		||||
      settings.slidesToShow = 1
 | 
			
		||||
      settings.slidesToScroll = 1
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // makes sure that children is an array, even when there is only 1 child
 | 
			
		||||
    let children = this.$slots.default || []
 | 
			
		||||
 | 
			
		||||
    // Children may contain false or null, so we should filter them
 | 
			
		||||
    // children may also contain string filled with spaces (in certain cases where we use jsx strings)
 | 
			
		||||
    children = children.filter(child => {
 | 
			
		||||
      if (typeof child === 'string') {
 | 
			
		||||
        return !!child.trim()
 | 
			
		||||
      }
 | 
			
		||||
      return !!child
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    // rows and slidesPerRow logic is handled here
 | 
			
		||||
    if (
 | 
			
		||||
      settings.variableWidth &&
 | 
			
		||||
      (settings.rows > 1 || settings.slidesPerRow > 1)
 | 
			
		||||
    ) {
 | 
			
		||||
      console.warn(
 | 
			
		||||
        `variableWidth is not supported in case of rows > 1 or slidesPerRow > 1`
 | 
			
		||||
      )
 | 
			
		||||
      settings.variableWidth = false
 | 
			
		||||
    }
 | 
			
		||||
    const newChildren = []
 | 
			
		||||
    let currentWidth = null
 | 
			
		||||
    for (
 | 
			
		||||
      let i = 0;
 | 
			
		||||
      i < children.length;
 | 
			
		||||
      i += settings.rows * settings.slidesPerRow
 | 
			
		||||
    ) {
 | 
			
		||||
      const newSlide = []
 | 
			
		||||
      for (
 | 
			
		||||
        let j = i;
 | 
			
		||||
        j < i + settings.rows * settings.slidesPerRow;
 | 
			
		||||
        j += settings.slidesPerRow
 | 
			
		||||
      ) {
 | 
			
		||||
        const row = []
 | 
			
		||||
        for (let k = j; k < j + settings.slidesPerRow; k += 1) {
 | 
			
		||||
          if (settings.variableWidth && getStyle(children[k])) {
 | 
			
		||||
            currentWidth = getStyle(children[k]).width
 | 
			
		||||
          }
 | 
			
		||||
          if (k >= children.length) break
 | 
			
		||||
          row.push(
 | 
			
		||||
            cloneElement(children[k], {
 | 
			
		||||
              key: 100 * i + 10 * j + k,
 | 
			
		||||
              attrs: {
 | 
			
		||||
                tabIndex: -1,
 | 
			
		||||
              },
 | 
			
		||||
              style: {
 | 
			
		||||
                width: `${100 / settings.slidesPerRow}%`,
 | 
			
		||||
                display: 'inline-block',
 | 
			
		||||
              },
 | 
			
		||||
            })
 | 
			
		||||
          )
 | 
			
		||||
        }
 | 
			
		||||
        newSlide.push(<div key={10 * i + j}>{row}</div>)
 | 
			
		||||
      }
 | 
			
		||||
      if (settings.variableWidth) {
 | 
			
		||||
        newChildren.push(
 | 
			
		||||
          <div key={i} style={{ width: currentWidth }}>
 | 
			
		||||
            {newSlide}
 | 
			
		||||
          </div>
 | 
			
		||||
        )
 | 
			
		||||
      } else {
 | 
			
		||||
        newChildren.push(<div key={i}>{newSlide}</div>)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (settings === 'unslick') {
 | 
			
		||||
      const className = 'regular slider ' + (this.className || '')
 | 
			
		||||
      return <div class={className}>{newChildren}</div>
 | 
			
		||||
    } else if (newChildren.length <= settings.slidesToShow) {
 | 
			
		||||
      settings.unslick = true
 | 
			
		||||
    }
 | 
			
		||||
    const sliderProps = {
 | 
			
		||||
      props: {
 | 
			
		||||
        ...settings,
 | 
			
		||||
        children: newChildren,
 | 
			
		||||
        __propsSymbol__: Symbol(),
 | 
			
		||||
      },
 | 
			
		||||
      on: {
 | 
			
		||||
        ...this.$listeners,
 | 
			
		||||
      },
 | 
			
		||||
      directives: [{
 | 
			
		||||
        name: 'ant-ref',
 | 
			
		||||
        value: this.innerSliderRefHandler,
 | 
			
		||||
      }],
 | 
			
		||||
      scopedSlots: this.$scopedSlots,
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <InnerSlider {...sliderProps} />
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,232 @@
 | 
			
		|||
import classnames from 'classnames'
 | 
			
		||||
import { cloneElement } from '../../_util/vnode'
 | 
			
		||||
import { getStyle, getClass } from '../../_util/props-util'
 | 
			
		||||
import {
 | 
			
		||||
  lazyStartIndex,
 | 
			
		||||
  lazyEndIndex,
 | 
			
		||||
  getPreClones,
 | 
			
		||||
} from './utils/innerSliderUtils'
 | 
			
		||||
 | 
			
		||||
// given specifications/props for a slide, fetch all the classes that need to be applied to the slide
 | 
			
		||||
const getSlideClasses = spec => {
 | 
			
		||||
  let slickActive, slickCenter
 | 
			
		||||
  let centerOffset, index
 | 
			
		||||
 | 
			
		||||
  if (spec.rtl) {
 | 
			
		||||
    index = spec.slideCount - 1 - spec.index
 | 
			
		||||
  } else {
 | 
			
		||||
    index = spec.index
 | 
			
		||||
  }
 | 
			
		||||
  const slickCloned = index < 0 || index >= spec.slideCount
 | 
			
		||||
  if (spec.centerMode) {
 | 
			
		||||
    centerOffset = Math.floor(spec.slidesToShow / 2)
 | 
			
		||||
    slickCenter = (index - spec.currentSlide) % spec.slideCount === 0
 | 
			
		||||
    if (
 | 
			
		||||
      index > spec.currentSlide - centerOffset - 1 &&
 | 
			
		||||
      index <= spec.currentSlide + centerOffset
 | 
			
		||||
    ) {
 | 
			
		||||
      slickActive = true
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    slickActive =
 | 
			
		||||
      spec.currentSlide <= index &&
 | 
			
		||||
      index < spec.currentSlide + spec.slidesToShow
 | 
			
		||||
  }
 | 
			
		||||
  const slickCurrent = index === spec.currentSlide
 | 
			
		||||
  return {
 | 
			
		||||
    'slick-slide': true,
 | 
			
		||||
    'slick-active': slickActive,
 | 
			
		||||
    'slick-center': slickCenter,
 | 
			
		||||
    'slick-cloned': slickCloned,
 | 
			
		||||
    'slick-current': slickCurrent, // dubious in case of RTL
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const getSlideStyle = function (spec) {
 | 
			
		||||
  const style = {}
 | 
			
		||||
 | 
			
		||||
  if (spec.variableWidth === undefined || spec.variableWidth === false) {
 | 
			
		||||
    style.width = spec.slideWidth + (typeof spec.slideWidth === 'number' ? 'px' : '')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (spec.fade) {
 | 
			
		||||
    style.position = 'relative'
 | 
			
		||||
    if (spec.vertical) {
 | 
			
		||||
      style.top = -spec.index * parseInt(spec.slideHeight) + 'px'
 | 
			
		||||
    } else {
 | 
			
		||||
      style.left = -spec.index * parseInt(spec.slideWidth) + 'px'
 | 
			
		||||
    }
 | 
			
		||||
    style.opacity = spec.currentSlide === spec.index ? 1 : 0
 | 
			
		||||
    style.transition =
 | 
			
		||||
      'opacity ' +
 | 
			
		||||
      spec.speed +
 | 
			
		||||
      'ms ' +
 | 
			
		||||
      spec.cssEase +
 | 
			
		||||
      ', ' +
 | 
			
		||||
      'visibility ' +
 | 
			
		||||
      spec.speed +
 | 
			
		||||
      'ms ' +
 | 
			
		||||
      spec.cssEase
 | 
			
		||||
    style.WebkitTransition =
 | 
			
		||||
      'opacity ' +
 | 
			
		||||
      spec.speed +
 | 
			
		||||
      'ms ' +
 | 
			
		||||
      spec.cssEase +
 | 
			
		||||
      ', ' +
 | 
			
		||||
      'visibility ' +
 | 
			
		||||
      spec.speed +
 | 
			
		||||
      'ms ' +
 | 
			
		||||
      spec.cssEase
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return style
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const getKey = (child, fallbackKey) => child.key || (child.key === 0 && '0') || fallbackKey
 | 
			
		||||
 | 
			
		||||
const renderSlides = function (spec, children, createElement) {
 | 
			
		||||
  let key
 | 
			
		||||
  const slides = []
 | 
			
		||||
  const preCloneSlides = []
 | 
			
		||||
  const postCloneSlides = []
 | 
			
		||||
  const childrenCount = children.length
 | 
			
		||||
  const startIndex = lazyStartIndex(spec)
 | 
			
		||||
  const endIndex = lazyEndIndex(spec)
 | 
			
		||||
 | 
			
		||||
  children.forEach((elem, index) => {
 | 
			
		||||
    let child
 | 
			
		||||
    const childOnClickOptions = {
 | 
			
		||||
      message: 'children',
 | 
			
		||||
      index: index,
 | 
			
		||||
      slidesToScroll: spec.slidesToScroll,
 | 
			
		||||
      currentSlide: spec.currentSlide,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // in case of lazyLoad, whether or not we want to fetch the slide
 | 
			
		||||
    if (
 | 
			
		||||
      !spec.lazyLoad ||
 | 
			
		||||
      (spec.lazyLoad && spec.lazyLoadedList.indexOf(index) >= 0)
 | 
			
		||||
    ) {
 | 
			
		||||
      child = elem
 | 
			
		||||
    } else {
 | 
			
		||||
      child = createElement('div')
 | 
			
		||||
    }
 | 
			
		||||
    const childStyle = getSlideStyle({ ...spec, index })
 | 
			
		||||
    const slideClass = getClass(child.context) || ''
 | 
			
		||||
    let slideClasses = getSlideClasses({ ...spec, index })
 | 
			
		||||
    // push a cloned element of the desired slide
 | 
			
		||||
    slides.push(
 | 
			
		||||
      cloneElement(child, {
 | 
			
		||||
        key: 'original' + getKey(child, index),
 | 
			
		||||
        attrs: {
 | 
			
		||||
          tabIndex: '-1',
 | 
			
		||||
          'data-index': index,
 | 
			
		||||
          'aria-hidden': !slideClasses['slick-active'],
 | 
			
		||||
        },
 | 
			
		||||
        class: classnames(slideClasses, slideClass),
 | 
			
		||||
        style: { outline: 'none', ...(getStyle(child.context) || {}), ...childStyle },
 | 
			
		||||
        on: {
 | 
			
		||||
          click: e => {
 | 
			
		||||
            // child.props && child.props.onClick && child.props.onClick(e)
 | 
			
		||||
            if (spec.focusOnSelect) {
 | 
			
		||||
              spec.focusOnSelect(childOnClickOptions)
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
      }, true)
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // if slide needs to be precloned or postcloned
 | 
			
		||||
    if (spec.infinite && spec.fade === false) {
 | 
			
		||||
      const preCloneNo = childrenCount - index
 | 
			
		||||
      if (
 | 
			
		||||
        preCloneNo <= getPreClones(spec) &&
 | 
			
		||||
        childrenCount !== spec.slidesToShow
 | 
			
		||||
      ) {
 | 
			
		||||
        key = -preCloneNo
 | 
			
		||||
        if (key >= startIndex) {
 | 
			
		||||
          child = elem
 | 
			
		||||
        }
 | 
			
		||||
        slideClasses = getSlideClasses({ ...spec, index: key })
 | 
			
		||||
        preCloneSlides.push(
 | 
			
		||||
          cloneElement(child, {
 | 
			
		||||
            key: 'precloned' + getKey(child, key),
 | 
			
		||||
            class: classnames(slideClasses, slideClass),
 | 
			
		||||
            attrs: {
 | 
			
		||||
              tabIndex: '-1',
 | 
			
		||||
              'data-index': key,
 | 
			
		||||
              'aria-hidden': !slideClasses['slick-active'],
 | 
			
		||||
            },
 | 
			
		||||
            style: { ...(getStyle(child.context) || {}), ...childStyle },
 | 
			
		||||
            on: {
 | 
			
		||||
              click: e => {
 | 
			
		||||
                // child.props && child.props.onClick && child.props.onClick(e)
 | 
			
		||||
                if (spec.focusOnSelect) {
 | 
			
		||||
                  spec.focusOnSelect(childOnClickOptions)
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
          })
 | 
			
		||||
        )
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (childrenCount !== spec.slidesToShow) {
 | 
			
		||||
        key = childrenCount + index
 | 
			
		||||
        if (key < endIndex) {
 | 
			
		||||
          child = elem
 | 
			
		||||
        }
 | 
			
		||||
        slideClasses = getSlideClasses({ ...spec, index: key })
 | 
			
		||||
        postCloneSlides.push(
 | 
			
		||||
          cloneElement(child, {
 | 
			
		||||
            key: 'postcloned' + getKey(child, key),
 | 
			
		||||
            attrs: {
 | 
			
		||||
              tabIndex: '-1',
 | 
			
		||||
              'data-index': key,
 | 
			
		||||
              'aria-hidden': !slideClasses['slick-active'],
 | 
			
		||||
            },
 | 
			
		||||
            class: classnames(slideClasses, slideClass),
 | 
			
		||||
            style: { ...(getStyle(child.context) || {}), ...childStyle },
 | 
			
		||||
            on: {
 | 
			
		||||
              click: e => {
 | 
			
		||||
                // child.props && child.props.onClick && child.props.onClick(e)
 | 
			
		||||
                if (spec.focusOnSelect) {
 | 
			
		||||
                  spec.focusOnSelect(childOnClickOptions)
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
          })
 | 
			
		||||
        )
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
  if (spec.rtl) {
 | 
			
		||||
    return preCloneSlides.concat(slides, postCloneSlides).reverse()
 | 
			
		||||
  } else {
 | 
			
		||||
    return preCloneSlides.concat(slides, postCloneSlides)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  functional: true,
 | 
			
		||||
  render (createElement, context) {
 | 
			
		||||
    const { props, listeners, children, data } = context
 | 
			
		||||
    const slides = renderSlides(props, children, createElement)
 | 
			
		||||
    const { mouseenter, mouseover, mouseleave } = listeners
 | 
			
		||||
    const mouseEvents = { mouseenter, mouseover, mouseleave }
 | 
			
		||||
    const trackProps = {
 | 
			
		||||
      class: 'slick-track',
 | 
			
		||||
      style: props.trackStyle,
 | 
			
		||||
      on: {
 | 
			
		||||
        ...mouseEvents,
 | 
			
		||||
      },
 | 
			
		||||
      directives: data.directives,
 | 
			
		||||
    }
 | 
			
		||||
    return (
 | 
			
		||||
      <div
 | 
			
		||||
        {...trackProps}
 | 
			
		||||
      >
 | 
			
		||||
        {slides}
 | 
			
		||||
      </div>
 | 
			
		||||
    )
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,819 @@
 | 
			
		|||
export const getOnDemandLazySlides = spec => {
 | 
			
		||||
  const onDemandSlides = []
 | 
			
		||||
  const startIndex = lazyStartIndex(spec)
 | 
			
		||||
  const endIndex = lazyEndIndex(spec)
 | 
			
		||||
  for (let slideIndex = startIndex; slideIndex < endIndex; slideIndex++) {
 | 
			
		||||
    if (spec.lazyLoadedList.indexOf(slideIndex) < 0) {
 | 
			
		||||
      onDemandSlides.push(slideIndex)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return onDemandSlides
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// return list of slides that need to be present
 | 
			
		||||
export const getRequiredLazySlides = spec => {
 | 
			
		||||
  const requiredSlides = []
 | 
			
		||||
  const startIndex = lazyStartIndex(spec)
 | 
			
		||||
  const endIndex = lazyEndIndex(spec)
 | 
			
		||||
  for (let slideIndex = startIndex; slideIndex < endIndex; slideIndex++) {
 | 
			
		||||
    requiredSlides.push(slideIndex)
 | 
			
		||||
  }
 | 
			
		||||
  return requiredSlides
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// startIndex that needs to be present
 | 
			
		||||
export const lazyStartIndex = spec =>
 | 
			
		||||
  spec.currentSlide - lazySlidesOnLeft(spec)
 | 
			
		||||
export const lazyEndIndex = spec => spec.currentSlide + lazySlidesOnRight(spec)
 | 
			
		||||
export const lazySlidesOnLeft = spec =>
 | 
			
		||||
  spec.centerMode
 | 
			
		||||
    ? Math.floor(spec.slidesToShow / 2) +
 | 
			
		||||
      (parseInt(spec.centerPadding) > 0 ? 1 : 0)
 | 
			
		||||
    : 0
 | 
			
		||||
export const lazySlidesOnRight = spec =>
 | 
			
		||||
  spec.centerMode
 | 
			
		||||
    ? Math.floor((spec.slidesToShow - 1) / 2) +
 | 
			
		||||
      1 +
 | 
			
		||||
      (parseInt(spec.centerPadding) > 0 ? 1 : 0)
 | 
			
		||||
    : spec.slidesToShow
 | 
			
		||||
 | 
			
		||||
// get width of an element
 | 
			
		||||
export const getWidth = elem => (elem && elem.offsetWidth) || 0
 | 
			
		||||
export const getHeight = elem => (elem && elem.offsetHeight) || 0
 | 
			
		||||
export const getSwipeDirection = (touchObject, verticalSwiping = false) => {
 | 
			
		||||
  let swipeAngle
 | 
			
		||||
  const xDist = touchObject.startX - touchObject.curX
 | 
			
		||||
  const yDist = touchObject.startY - touchObject.curY
 | 
			
		||||
  const r = Math.atan2(yDist, xDist)
 | 
			
		||||
  swipeAngle = Math.round(r * 180 / Math.PI)
 | 
			
		||||
  if (swipeAngle < 0) {
 | 
			
		||||
    swipeAngle = 360 - Math.abs(swipeAngle)
 | 
			
		||||
  }
 | 
			
		||||
  if (
 | 
			
		||||
    (swipeAngle <= 45 && swipeAngle >= 0) ||
 | 
			
		||||
    (swipeAngle <= 360 && swipeAngle >= 315)
 | 
			
		||||
  ) {
 | 
			
		||||
    return 'left'
 | 
			
		||||
  }
 | 
			
		||||
  if (swipeAngle >= 135 && swipeAngle <= 225) {
 | 
			
		||||
    return 'right'
 | 
			
		||||
  }
 | 
			
		||||
  if (verticalSwiping === true) {
 | 
			
		||||
    if (swipeAngle >= 35 && swipeAngle <= 135) {
 | 
			
		||||
      return 'up'
 | 
			
		||||
    } else {
 | 
			
		||||
      return 'down'
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return 'vertical'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// whether or not we can go next
 | 
			
		||||
export const canGoNext = spec => {
 | 
			
		||||
  let canGo = true
 | 
			
		||||
  if (!spec.infinite) {
 | 
			
		||||
    if (spec.centerMode && spec.currentSlide >= spec.slideCount - 1) {
 | 
			
		||||
      canGo = false
 | 
			
		||||
    } else if (
 | 
			
		||||
      spec.slideCount <= spec.slidesToShow ||
 | 
			
		||||
      spec.currentSlide >= spec.slideCount - spec.slidesToShow
 | 
			
		||||
    ) {
 | 
			
		||||
      canGo = false
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return canGo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// given an object and a list of keys, return new object with given keys
 | 
			
		||||
export const extractObject = (spec, keys) => {
 | 
			
		||||
  const newObject = {}
 | 
			
		||||
  keys.forEach(key => (newObject[key] = spec[key]))
 | 
			
		||||
  return newObject
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// get initialized state
 | 
			
		||||
export const initializedState = spec => {
 | 
			
		||||
  // spec also contains listRef, trackRef
 | 
			
		||||
  const slideCount = spec.children.length
 | 
			
		||||
  const listWidth = Math.ceil(getWidth(spec.listRef))
 | 
			
		||||
  const trackWidth = Math.ceil(getWidth(spec.trackRef))
 | 
			
		||||
  let slideWidth
 | 
			
		||||
  if (!spec.vertical) {
 | 
			
		||||
    let centerPaddingAdj = spec.centerMode && parseInt(spec.centerPadding) * 2
 | 
			
		||||
    if (
 | 
			
		||||
      typeof spec.centerPadding === 'string' &&
 | 
			
		||||
      spec.centerPadding.slice(-1) === '%'
 | 
			
		||||
    ) {
 | 
			
		||||
      centerPaddingAdj *= listWidth / 100
 | 
			
		||||
    }
 | 
			
		||||
    slideWidth = Math.ceil((listWidth - centerPaddingAdj) / spec.slidesToShow)
 | 
			
		||||
  } else {
 | 
			
		||||
    slideWidth = listWidth
 | 
			
		||||
  }
 | 
			
		||||
  const slideHeight =
 | 
			
		||||
    spec.listRef &&
 | 
			
		||||
    getHeight(
 | 
			
		||||
      spec.listRef.querySelector('[data-index="0"]')
 | 
			
		||||
    )
 | 
			
		||||
  const listHeight = slideHeight * spec.slidesToShow
 | 
			
		||||
  let currentSlide =
 | 
			
		||||
    spec.currentSlide === undefined ? spec.initialSlide : spec.currentSlide
 | 
			
		||||
  if (spec.rtl && spec.currentSlide === undefined) {
 | 
			
		||||
    currentSlide = slideCount - 1 - spec.initialSlide
 | 
			
		||||
  }
 | 
			
		||||
  const lazyLoadedList = spec.lazyLoadedList || []
 | 
			
		||||
  const slidesToLoad = getOnDemandLazySlides(
 | 
			
		||||
    { currentSlide, lazyLoadedList },
 | 
			
		||||
    spec
 | 
			
		||||
  )
 | 
			
		||||
  lazyLoadedList.concat(slidesToLoad)
 | 
			
		||||
 | 
			
		||||
  const state = {
 | 
			
		||||
    slideCount,
 | 
			
		||||
    slideWidth,
 | 
			
		||||
    listWidth,
 | 
			
		||||
    trackWidth,
 | 
			
		||||
    currentSlide,
 | 
			
		||||
    slideHeight,
 | 
			
		||||
    listHeight,
 | 
			
		||||
    lazyLoadedList,
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (spec.autoplaying === null && spec.autoplay) {
 | 
			
		||||
    state['autoplaying'] = 'playing'
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return state
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const slideHandler = spec => {
 | 
			
		||||
  const {
 | 
			
		||||
    waitForAnimate,
 | 
			
		||||
    animating,
 | 
			
		||||
    fade,
 | 
			
		||||
    infinite,
 | 
			
		||||
    index,
 | 
			
		||||
    slideCount,
 | 
			
		||||
    lazyLoadedList,
 | 
			
		||||
    lazyLoad,
 | 
			
		||||
    currentSlide,
 | 
			
		||||
    centerMode,
 | 
			
		||||
    slidesToScroll,
 | 
			
		||||
    slidesToShow,
 | 
			
		||||
    useCSS,
 | 
			
		||||
  } = spec
 | 
			
		||||
  if (waitForAnimate && animating) return {}
 | 
			
		||||
  let animationSlide = index
 | 
			
		||||
  let finalSlide
 | 
			
		||||
  let animationLeft
 | 
			
		||||
  let finalLeft
 | 
			
		||||
  let state = {}
 | 
			
		||||
  let nextState = {}
 | 
			
		||||
  if (fade) {
 | 
			
		||||
    if (!infinite && (index < 0 || index >= slideCount)) return {}
 | 
			
		||||
    if (index < 0) {
 | 
			
		||||
      animationSlide = index + slideCount
 | 
			
		||||
    } else if (index >= slideCount) {
 | 
			
		||||
      animationSlide = index - slideCount
 | 
			
		||||
    }
 | 
			
		||||
    if (lazyLoad && lazyLoadedList.indexOf(animationSlide) < 0) {
 | 
			
		||||
      lazyLoadedList.push(animationSlide)
 | 
			
		||||
    }
 | 
			
		||||
    state = {
 | 
			
		||||
      animating: true,
 | 
			
		||||
      currentSlide: animationSlide,
 | 
			
		||||
      lazyLoadedList,
 | 
			
		||||
    }
 | 
			
		||||
    nextState = { animating: false }
 | 
			
		||||
  } else {
 | 
			
		||||
    finalSlide = animationSlide
 | 
			
		||||
    if (animationSlide < 0) {
 | 
			
		||||
      finalSlide = animationSlide + slideCount
 | 
			
		||||
      if (!infinite) finalSlide = 0
 | 
			
		||||
      else if (slideCount % slidesToScroll !== 0) { finalSlide = slideCount - slideCount % slidesToScroll }
 | 
			
		||||
    } else if (!canGoNext(spec) && animationSlide > currentSlide) {
 | 
			
		||||
      animationSlide = finalSlide = currentSlide
 | 
			
		||||
    } else if (centerMode && animationSlide >= slideCount) {
 | 
			
		||||
      animationSlide = infinite ? slideCount : slideCount - 1
 | 
			
		||||
      finalSlide = infinite ? 0 : slideCount - 1
 | 
			
		||||
    } else if (animationSlide >= slideCount) {
 | 
			
		||||
      finalSlide = animationSlide - slideCount
 | 
			
		||||
      if (!infinite) finalSlide = slideCount - slidesToShow
 | 
			
		||||
      else if (slideCount % slidesToScroll !== 0) finalSlide = 0
 | 
			
		||||
    }
 | 
			
		||||
    animationLeft = getTrackLeft({ ...spec, slideIndex: animationSlide })
 | 
			
		||||
    finalLeft = getTrackLeft({ ...spec, slideIndex: finalSlide })
 | 
			
		||||
    if (!infinite) {
 | 
			
		||||
      if (animationLeft === finalLeft) animationSlide = finalSlide
 | 
			
		||||
      animationLeft = finalLeft
 | 
			
		||||
    }
 | 
			
		||||
    lazyLoad &&
 | 
			
		||||
      lazyLoadedList.concat(
 | 
			
		||||
        getOnDemandLazySlides({ ...spec, currentSlide: animationSlide })
 | 
			
		||||
      )
 | 
			
		||||
    if (!useCSS) {
 | 
			
		||||
      state = {
 | 
			
		||||
        currentSlide: finalSlide,
 | 
			
		||||
        trackStyle: getTrackCSS({ ...spec, left: finalLeft }),
 | 
			
		||||
        lazyLoadedList,
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      state = {
 | 
			
		||||
        animating: true,
 | 
			
		||||
        currentSlide: finalSlide,
 | 
			
		||||
        trackStyle: getTrackAnimateCSS({ ...spec, left: animationLeft }),
 | 
			
		||||
        lazyLoadedList,
 | 
			
		||||
      }
 | 
			
		||||
      nextState = {
 | 
			
		||||
        animating: false,
 | 
			
		||||
        currentSlide: finalSlide,
 | 
			
		||||
        trackStyle: getTrackCSS({ ...spec, left: finalLeft }),
 | 
			
		||||
        swipeLeft: null,
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return { state, nextState }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const changeSlide = (spec, options) => {
 | 
			
		||||
  let previousInt, slideOffset, targetSlide
 | 
			
		||||
  const {
 | 
			
		||||
    slidesToScroll,
 | 
			
		||||
    slidesToShow,
 | 
			
		||||
    slideCount,
 | 
			
		||||
    currentSlide,
 | 
			
		||||
    lazyLoad,
 | 
			
		||||
    infinite,
 | 
			
		||||
  } = spec
 | 
			
		||||
  const unevenOffset = slideCount % slidesToScroll !== 0
 | 
			
		||||
  const indexOffset = unevenOffset ? 0 : (slideCount - currentSlide) % slidesToScroll
 | 
			
		||||
 | 
			
		||||
  if (options.message === 'previous') {
 | 
			
		||||
    slideOffset = indexOffset === 0 ? slidesToScroll : slidesToShow - indexOffset
 | 
			
		||||
    targetSlide = currentSlide - slideOffset
 | 
			
		||||
    if (lazyLoad && !infinite) {
 | 
			
		||||
      previousInt = currentSlide - slideOffset
 | 
			
		||||
      targetSlide = previousInt === -1 ? slideCount - 1 : previousInt
 | 
			
		||||
    }
 | 
			
		||||
  } else if (options.message === 'next') {
 | 
			
		||||
    slideOffset = indexOffset === 0 ? slidesToScroll : indexOffset
 | 
			
		||||
    targetSlide = currentSlide + slideOffset
 | 
			
		||||
    if (lazyLoad && !infinite) {
 | 
			
		||||
      targetSlide = (currentSlide + slidesToScroll) % slideCount + indexOffset
 | 
			
		||||
    }
 | 
			
		||||
  } else if (options.message === 'dots') {
 | 
			
		||||
    // Click on dots
 | 
			
		||||
    targetSlide = options.index * options.slidesToScroll
 | 
			
		||||
    if (targetSlide === options.currentSlide) {
 | 
			
		||||
      return null
 | 
			
		||||
    }
 | 
			
		||||
  } else if (options.message === 'children') {
 | 
			
		||||
    // Click on the slides
 | 
			
		||||
    targetSlide = options.index
 | 
			
		||||
    if (targetSlide === options.currentSlide) {
 | 
			
		||||
      return null
 | 
			
		||||
    }
 | 
			
		||||
    if (infinite) {
 | 
			
		||||
      const direction = siblingDirection({ ...spec, targetSlide })
 | 
			
		||||
      if (targetSlide > options.currentSlide && direction === 'left') {
 | 
			
		||||
        targetSlide = targetSlide - slideCount
 | 
			
		||||
      } else if (targetSlide < options.currentSlide && direction === 'right') {
 | 
			
		||||
        targetSlide = targetSlide + slideCount
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  } else if (options.message === 'index') {
 | 
			
		||||
    targetSlide = Number(options.index)
 | 
			
		||||
    if (targetSlide === options.currentSlide) {
 | 
			
		||||
      return null
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return targetSlide
 | 
			
		||||
}
 | 
			
		||||
export const keyHandler = (e, accessibility, rtl) => {
 | 
			
		||||
  if (e.target.tagName.match('TEXTAREA|INPUT|SELECT') || !accessibility) { return '' }
 | 
			
		||||
  if (e.keyCode === 37) return rtl ? 'next' : 'previous'
 | 
			
		||||
  if (e.keyCode === 39) return rtl ? 'previous' : 'next'
 | 
			
		||||
  return ''
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const swipeStart = (e, swipe, draggable) => {
 | 
			
		||||
  e.target.tagName === 'IMG' && e.preventDefault()
 | 
			
		||||
  if (!swipe || (!draggable && e.type.indexOf('mouse') !== -1)) return ''
 | 
			
		||||
  return {
 | 
			
		||||
    dragging: true,
 | 
			
		||||
    touchObject: {
 | 
			
		||||
      startX: e.touches ? e.touches[0].pageX : e.clientX,
 | 
			
		||||
      startY: e.touches ? e.touches[0].pageY : e.clientY,
 | 
			
		||||
      curX: e.touches ? e.touches[0].pageX : e.clientX,
 | 
			
		||||
      curY: e.touches ? e.touches[0].pageY : e.clientY,
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
export const swipeMove = (e, spec) => {
 | 
			
		||||
  // spec also contains, trackRef and slideIndex
 | 
			
		||||
  const {
 | 
			
		||||
    scrolling,
 | 
			
		||||
    animating,
 | 
			
		||||
    vertical,
 | 
			
		||||
    swipeToSlide,
 | 
			
		||||
    verticalSwiping,
 | 
			
		||||
    rtl,
 | 
			
		||||
    currentSlide,
 | 
			
		||||
    edgeFriction,
 | 
			
		||||
    edgeDragged,
 | 
			
		||||
    onEdge,
 | 
			
		||||
    swiped,
 | 
			
		||||
    swiping,
 | 
			
		||||
    slideCount,
 | 
			
		||||
    slidesToScroll,
 | 
			
		||||
    infinite,
 | 
			
		||||
    touchObject,
 | 
			
		||||
    swipeEvent,
 | 
			
		||||
    listHeight,
 | 
			
		||||
    listWidth,
 | 
			
		||||
  } = spec
 | 
			
		||||
  if (scrolling) return
 | 
			
		||||
  if (animating) return e.preventDefault()
 | 
			
		||||
  if (vertical && swipeToSlide && verticalSwiping) e.preventDefault()
 | 
			
		||||
  let swipeLeft
 | 
			
		||||
  let state = {}
 | 
			
		||||
  const curLeft = getTrackLeft(spec)
 | 
			
		||||
  touchObject.curX = e.touches ? e.touches[0].pageX : e.clientX
 | 
			
		||||
  touchObject.curY = e.touches ? e.touches[0].pageY : e.clientY
 | 
			
		||||
  touchObject.swipeLength = Math.round(
 | 
			
		||||
    Math.sqrt(Math.pow(touchObject.curX - touchObject.startX, 2))
 | 
			
		||||
  )
 | 
			
		||||
  const verticalSwipeLength = Math.round(
 | 
			
		||||
    Math.sqrt(Math.pow(touchObject.curY - touchObject.startY, 2))
 | 
			
		||||
  )
 | 
			
		||||
  if (!verticalSwiping && !swiping && verticalSwipeLength > 10) {
 | 
			
		||||
    return { scrolling: true }
 | 
			
		||||
  }
 | 
			
		||||
  if (verticalSwiping) touchObject.swipeLength = verticalSwipeLength
 | 
			
		||||
  let positionOffset =
 | 
			
		||||
    (!rtl ? 1 : -1) * (touchObject.curX > touchObject.startX ? 1 : -1)
 | 
			
		||||
  if (verticalSwiping) { positionOffset = touchObject.curY > touchObject.startY ? 1 : -1 }
 | 
			
		||||
 | 
			
		||||
  const dotCount = Math.ceil(slideCount / slidesToScroll)
 | 
			
		||||
  const swipeDirection = getSwipeDirection(spec.touchObject, verticalSwiping)
 | 
			
		||||
  let touchSwipeLength = touchObject.swipeLength
 | 
			
		||||
  if (!infinite) {
 | 
			
		||||
    if (
 | 
			
		||||
      (currentSlide === 0 && swipeDirection === 'right') ||
 | 
			
		||||
      (currentSlide + 1 >= dotCount && swipeDirection === 'left') ||
 | 
			
		||||
      (!canGoNext(spec) && swipeDirection === 'left')
 | 
			
		||||
    ) {
 | 
			
		||||
      touchSwipeLength = touchObject.swipeLength * edgeFriction
 | 
			
		||||
      if (edgeDragged === false && onEdge) {
 | 
			
		||||
        onEdge(swipeDirection)
 | 
			
		||||
        state['edgeDragged'] = true
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (!swiped && swipeEvent) {
 | 
			
		||||
    swipeEvent(swipeDirection)
 | 
			
		||||
    state['swiped'] = true
 | 
			
		||||
  }
 | 
			
		||||
  if (!vertical) {
 | 
			
		||||
    if (!rtl) {
 | 
			
		||||
      swipeLeft = curLeft + touchSwipeLength * positionOffset
 | 
			
		||||
    } else {
 | 
			
		||||
      swipeLeft = curLeft - touchSwipeLength * positionOffset
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    swipeLeft =
 | 
			
		||||
      curLeft + touchSwipeLength * (listHeight / listWidth) * positionOffset
 | 
			
		||||
  }
 | 
			
		||||
  if (verticalSwiping) {
 | 
			
		||||
    swipeLeft = curLeft + touchSwipeLength * positionOffset
 | 
			
		||||
  }
 | 
			
		||||
  state = {
 | 
			
		||||
    ...state,
 | 
			
		||||
    touchObject,
 | 
			
		||||
    swipeLeft,
 | 
			
		||||
    trackStyle: getTrackCSS({ ...spec, left: swipeLeft }),
 | 
			
		||||
  }
 | 
			
		||||
  if (
 | 
			
		||||
    Math.abs(touchObject.curX - touchObject.startX) <
 | 
			
		||||
    Math.abs(touchObject.curY - touchObject.startY) * 0.8
 | 
			
		||||
  ) {
 | 
			
		||||
    return state
 | 
			
		||||
  }
 | 
			
		||||
  if (touchObject.swipeLength > 10) {
 | 
			
		||||
    state['swiping'] = true
 | 
			
		||||
    e.preventDefault()
 | 
			
		||||
  }
 | 
			
		||||
  return state
 | 
			
		||||
}
 | 
			
		||||
export const swipeEnd = (e, spec) => {
 | 
			
		||||
  const {
 | 
			
		||||
    dragging,
 | 
			
		||||
    swipe,
 | 
			
		||||
    touchObject,
 | 
			
		||||
    listWidth,
 | 
			
		||||
    touchThreshold,
 | 
			
		||||
    verticalSwiping,
 | 
			
		||||
    listHeight,
 | 
			
		||||
    currentSlide,
 | 
			
		||||
    swipeToSlide,
 | 
			
		||||
    scrolling,
 | 
			
		||||
    onSwipe,
 | 
			
		||||
  } = spec
 | 
			
		||||
  if (!dragging) {
 | 
			
		||||
    if (swipe) e.preventDefault()
 | 
			
		||||
    return {}
 | 
			
		||||
  }
 | 
			
		||||
  const minSwipe = verticalSwiping
 | 
			
		||||
    ? listHeight / touchThreshold
 | 
			
		||||
    : listWidth / touchThreshold
 | 
			
		||||
  const swipeDirection = getSwipeDirection(touchObject, verticalSwiping)
 | 
			
		||||
  // reset the state of touch related state variables.
 | 
			
		||||
  const state = {
 | 
			
		||||
    dragging: false,
 | 
			
		||||
    edgeDragged: false,
 | 
			
		||||
    scrolling: false,
 | 
			
		||||
    swiping: false,
 | 
			
		||||
    swiped: false,
 | 
			
		||||
    swipeLeft: null,
 | 
			
		||||
    touchObject: {},
 | 
			
		||||
  }
 | 
			
		||||
  if (scrolling) {
 | 
			
		||||
    return state
 | 
			
		||||
  }
 | 
			
		||||
  if (!touchObject.swipeLength) {
 | 
			
		||||
    return state
 | 
			
		||||
  }
 | 
			
		||||
  if (touchObject.swipeLength > minSwipe) {
 | 
			
		||||
    e.preventDefault()
 | 
			
		||||
    if (onSwipe) {
 | 
			
		||||
      onSwipe(swipeDirection)
 | 
			
		||||
    }
 | 
			
		||||
    let slideCount, newSlide
 | 
			
		||||
    switch (swipeDirection) {
 | 
			
		||||
      case 'left':
 | 
			
		||||
      case 'up':
 | 
			
		||||
        newSlide = currentSlide + getSlideCount(spec)
 | 
			
		||||
        slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide
 | 
			
		||||
        state['currentDirection'] = 0
 | 
			
		||||
        break
 | 
			
		||||
      case 'right':
 | 
			
		||||
      case 'down':
 | 
			
		||||
        newSlide = currentSlide - getSlideCount(spec)
 | 
			
		||||
        slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide
 | 
			
		||||
        state['currentDirection'] = 1
 | 
			
		||||
        break
 | 
			
		||||
      default:
 | 
			
		||||
        slideCount = currentSlide
 | 
			
		||||
    }
 | 
			
		||||
    state['triggerSlideHandler'] = slideCount
 | 
			
		||||
  } else {
 | 
			
		||||
    // Adjust the track back to it's original position.
 | 
			
		||||
    const currentLeft = getTrackLeft(spec)
 | 
			
		||||
    state['trackStyle'] = getTrackAnimateCSS({ ...spec, left: currentLeft })
 | 
			
		||||
  }
 | 
			
		||||
  return state
 | 
			
		||||
}
 | 
			
		||||
export const getNavigableIndexes = spec => {
 | 
			
		||||
  const max = spec.infinite ? spec.slideCount * 2 : spec.slideCount
 | 
			
		||||
  let breakpoint = spec.infinite ? spec.slidesToShow * -1 : 0
 | 
			
		||||
  let counter = spec.infinite ? spec.slidesToShow * -1 : 0
 | 
			
		||||
  const indexes = []
 | 
			
		||||
  while (breakpoint < max) {
 | 
			
		||||
    indexes.push(breakpoint)
 | 
			
		||||
    breakpoint = counter + spec.slidesToScroll
 | 
			
		||||
    counter += Math.min(spec.slidesToScroll, spec.slidesToShow)
 | 
			
		||||
  }
 | 
			
		||||
  return indexes
 | 
			
		||||
}
 | 
			
		||||
export const checkNavigable = (spec, index) => {
 | 
			
		||||
  const navigables = getNavigableIndexes(spec)
 | 
			
		||||
  let prevNavigable = 0
 | 
			
		||||
  if (index > navigables[navigables.length - 1]) {
 | 
			
		||||
    index = navigables[navigables.length - 1]
 | 
			
		||||
  } else {
 | 
			
		||||
    for (const n in navigables) {
 | 
			
		||||
      if (index < navigables[n]) {
 | 
			
		||||
        index = prevNavigable
 | 
			
		||||
        break
 | 
			
		||||
      }
 | 
			
		||||
      prevNavigable = navigables[n]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return index
 | 
			
		||||
}
 | 
			
		||||
export const getSlideCount = spec => {
 | 
			
		||||
  const centerOffset = spec.centerMode
 | 
			
		||||
    ? spec.slideWidth * Math.floor(spec.slidesToShow / 2)
 | 
			
		||||
    : 0
 | 
			
		||||
  if (spec.swipeToSlide) {
 | 
			
		||||
    let swipedSlide
 | 
			
		||||
    const slickList = spec.listRef
 | 
			
		||||
    const slides = slickList.querySelectorAll('.slick-slide')
 | 
			
		||||
    Array.from(slides).every(slide => {
 | 
			
		||||
      if (!spec.vertical) {
 | 
			
		||||
        if (
 | 
			
		||||
          slide.offsetLeft - centerOffset + getWidth(slide) / 2 >
 | 
			
		||||
          spec.swipeLeft * -1
 | 
			
		||||
        ) {
 | 
			
		||||
          swipedSlide = slide
 | 
			
		||||
          return false
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        if (slide.offsetTop + getHeight(slide) / 2 > spec.swipeLeft * -1) {
 | 
			
		||||
          swipedSlide = slide
 | 
			
		||||
          return false
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return true
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    if (!swipedSlide) {
 | 
			
		||||
      return 0
 | 
			
		||||
    }
 | 
			
		||||
    const currentIndex =
 | 
			
		||||
      spec.rtl === true
 | 
			
		||||
        ? spec.slideCount - spec.currentSlide
 | 
			
		||||
        : spec.currentSlide
 | 
			
		||||
    const slidesTraversed =
 | 
			
		||||
      Math.abs(swipedSlide.dataset.index - currentIndex) || 1
 | 
			
		||||
    return slidesTraversed
 | 
			
		||||
  } else {
 | 
			
		||||
    return spec.slidesToScroll
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const checkSpecKeys = (spec, keysArray) =>
 | 
			
		||||
  keysArray.reduce((value, key) => value && spec.hasOwnProperty(key), true)
 | 
			
		||||
    ? null
 | 
			
		||||
    : console.error('Keys Missing:', spec)
 | 
			
		||||
 | 
			
		||||
export const getTrackCSS = spec => {
 | 
			
		||||
  checkSpecKeys(spec, [
 | 
			
		||||
    'left',
 | 
			
		||||
    'variableWidth',
 | 
			
		||||
    'slideCount',
 | 
			
		||||
    'slidesToShow',
 | 
			
		||||
    'slideWidth',
 | 
			
		||||
  ])
 | 
			
		||||
  let trackWidth, trackHeight
 | 
			
		||||
  const trackChildren = spec.slideCount + 2 * spec.slidesToShow
 | 
			
		||||
  if (!spec.vertical) {
 | 
			
		||||
    trackWidth = getTotalSlides(spec) * spec.slideWidth
 | 
			
		||||
  } else {
 | 
			
		||||
    trackHeight = trackChildren * spec.slideHeight
 | 
			
		||||
  }
 | 
			
		||||
  let style = {
 | 
			
		||||
    opacity: 1,
 | 
			
		||||
    transition: '',
 | 
			
		||||
    WebkitTransition: '',
 | 
			
		||||
  }
 | 
			
		||||
  if (spec.useTransform) {
 | 
			
		||||
    const WebkitTransform = !spec.vertical
 | 
			
		||||
      ? 'translate3d(' + spec.left + 'px, 0px, 0px)'
 | 
			
		||||
      : 'translate3d(0px, ' + spec.left + 'px, 0px)'
 | 
			
		||||
    const transform = !spec.vertical
 | 
			
		||||
      ? 'translate3d(' + spec.left + 'px, 0px, 0px)'
 | 
			
		||||
      : 'translate3d(0px, ' + spec.left + 'px, 0px)'
 | 
			
		||||
    const msTransform = !spec.vertical
 | 
			
		||||
      ? 'translateX(' + spec.left + 'px)'
 | 
			
		||||
      : 'translateY(' + spec.left + 'px)'
 | 
			
		||||
    style = {
 | 
			
		||||
      ...style,
 | 
			
		||||
      WebkitTransform,
 | 
			
		||||
      transform,
 | 
			
		||||
      msTransform,
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    if (spec.vertical) {
 | 
			
		||||
      style['top'] = spec.left
 | 
			
		||||
    } else {
 | 
			
		||||
      style['left'] = spec.left
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (spec.fade) style = { opacity: 1 }
 | 
			
		||||
  if (trackWidth) style.width = trackWidth + 'px'
 | 
			
		||||
  if (trackHeight) style.height = trackHeight + 'px'
 | 
			
		||||
 | 
			
		||||
  // Fallback for IE8
 | 
			
		||||
  if (window && !window.addEventListener && window.attachEvent) {
 | 
			
		||||
    if (!spec.vertical) {
 | 
			
		||||
      style.marginLeft = spec.left + 'px'
 | 
			
		||||
    } else {
 | 
			
		||||
      style.marginTop = spec.left + 'px'
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return style
 | 
			
		||||
}
 | 
			
		||||
export const getTrackAnimateCSS = spec => {
 | 
			
		||||
  checkSpecKeys(spec, [
 | 
			
		||||
    'left',
 | 
			
		||||
    'variableWidth',
 | 
			
		||||
    'slideCount',
 | 
			
		||||
    'slidesToShow',
 | 
			
		||||
    'slideWidth',
 | 
			
		||||
    'speed',
 | 
			
		||||
    'cssEase',
 | 
			
		||||
  ])
 | 
			
		||||
  const style = getTrackCSS(spec)
 | 
			
		||||
  // useCSS is true by default so it can be undefined
 | 
			
		||||
  if (spec.useTransform) {
 | 
			
		||||
    style.WebkitTransition =
 | 
			
		||||
      '-webkit-transform ' + spec.speed + 'ms ' + spec.cssEase
 | 
			
		||||
    style.transition = 'transform ' + spec.speed + 'ms ' + spec.cssEase
 | 
			
		||||
  } else {
 | 
			
		||||
    if (spec.vertical) {
 | 
			
		||||
      style.transition = 'top ' + spec.speed + 'ms ' + spec.cssEase
 | 
			
		||||
    } else {
 | 
			
		||||
      style.transition = 'left ' + spec.speed + 'ms ' + spec.cssEase
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return style
 | 
			
		||||
}
 | 
			
		||||
export const getTrackLeft = spec => {
 | 
			
		||||
  if (spec.unslick) {
 | 
			
		||||
    return 0
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  checkSpecKeys(spec, [
 | 
			
		||||
    'slideIndex',
 | 
			
		||||
    'trackRef',
 | 
			
		||||
    'infinite',
 | 
			
		||||
    'centerMode',
 | 
			
		||||
    'slideCount',
 | 
			
		||||
    'slidesToShow',
 | 
			
		||||
    'slidesToScroll',
 | 
			
		||||
    'slideWidth',
 | 
			
		||||
    'listWidth',
 | 
			
		||||
    'variableWidth',
 | 
			
		||||
    'slideHeight',
 | 
			
		||||
  ])
 | 
			
		||||
 | 
			
		||||
  const {
 | 
			
		||||
    slideIndex,
 | 
			
		||||
    trackRef,
 | 
			
		||||
    infinite,
 | 
			
		||||
    centerMode,
 | 
			
		||||
    slideCount,
 | 
			
		||||
    slidesToShow,
 | 
			
		||||
    slidesToScroll,
 | 
			
		||||
    slideWidth,
 | 
			
		||||
    listWidth,
 | 
			
		||||
    variableWidth,
 | 
			
		||||
    slideHeight,
 | 
			
		||||
    fade,
 | 
			
		||||
    vertical,
 | 
			
		||||
  } = spec
 | 
			
		||||
 | 
			
		||||
  let slideOffset = 0
 | 
			
		||||
  let targetLeft
 | 
			
		||||
  let targetSlide
 | 
			
		||||
  let verticalOffset = 0
 | 
			
		||||
 | 
			
		||||
  if (fade || spec.slideCount === 1) {
 | 
			
		||||
    return 0
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  let slidesToOffset = 0
 | 
			
		||||
  if (infinite) {
 | 
			
		||||
    slidesToOffset = -getPreClones(spec) // bring active slide to the beginning of visual area
 | 
			
		||||
    // if next scroll doesn't have enough children, just reach till the end of original slides instead of shifting slidesToScroll children
 | 
			
		||||
    if (
 | 
			
		||||
      slideCount % slidesToScroll !== 0 &&
 | 
			
		||||
      slideIndex + slidesToScroll > slideCount
 | 
			
		||||
    ) {
 | 
			
		||||
      slidesToOffset = -(slideIndex > slideCount
 | 
			
		||||
        ? slidesToShow - (slideIndex - slideCount)
 | 
			
		||||
        : slideCount % slidesToScroll)
 | 
			
		||||
    }
 | 
			
		||||
    // shift current slide to center of the frame
 | 
			
		||||
    if (centerMode) {
 | 
			
		||||
      slidesToOffset += parseInt(slidesToShow / 2)
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    if (
 | 
			
		||||
      slideCount % slidesToScroll !== 0 &&
 | 
			
		||||
      slideIndex + slidesToScroll > slideCount
 | 
			
		||||
    ) {
 | 
			
		||||
      slidesToOffset = slidesToShow - slideCount % slidesToScroll
 | 
			
		||||
    }
 | 
			
		||||
    if (centerMode) {
 | 
			
		||||
      slidesToOffset = parseInt(slidesToShow / 2)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  slideOffset = slidesToOffset * slideWidth
 | 
			
		||||
  verticalOffset = slidesToOffset * slideHeight
 | 
			
		||||
 | 
			
		||||
  if (!vertical) {
 | 
			
		||||
    targetLeft = slideIndex * slideWidth * -1 + slideOffset
 | 
			
		||||
  } else {
 | 
			
		||||
    targetLeft = slideIndex * slideHeight * -1 + verticalOffset
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (variableWidth === true) {
 | 
			
		||||
    let targetSlideIndex
 | 
			
		||||
    const trackElem = trackRef
 | 
			
		||||
    targetSlideIndex = slideIndex + getPreClones(spec)
 | 
			
		||||
    targetSlide = trackElem && trackElem.childNodes[targetSlideIndex]
 | 
			
		||||
    targetLeft = targetSlide ? targetSlide.offsetLeft * -1 : 0
 | 
			
		||||
    if (centerMode === true) {
 | 
			
		||||
      targetSlideIndex = infinite
 | 
			
		||||
        ? slideIndex + getPreClones(spec)
 | 
			
		||||
        : slideIndex
 | 
			
		||||
      targetSlide = trackElem && trackElem.children[targetSlideIndex]
 | 
			
		||||
      targetLeft = 0
 | 
			
		||||
      for (let slide = 0; slide < targetSlideIndex; slide++) {
 | 
			
		||||
        targetLeft -=
 | 
			
		||||
          trackElem &&
 | 
			
		||||
          trackElem.children[slide] &&
 | 
			
		||||
          trackElem.children[slide].offsetWidth
 | 
			
		||||
      }
 | 
			
		||||
      targetLeft -= parseInt(spec.centerPadding)
 | 
			
		||||
      targetLeft += targetSlide && (listWidth - targetSlide.offsetWidth) / 2
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return targetLeft
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const getPreClones = spec => {
 | 
			
		||||
  if (spec.unslick || !spec.infinite) {
 | 
			
		||||
    return 0
 | 
			
		||||
  }
 | 
			
		||||
  if (spec.variableWidth) {
 | 
			
		||||
    return spec.slideCount
 | 
			
		||||
  }
 | 
			
		||||
  return spec.slidesToShow + (spec.centerMode ? 1 : 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const getPostClones = spec => {
 | 
			
		||||
  if (spec.unslick || !spec.infinite) {
 | 
			
		||||
    return 0
 | 
			
		||||
  }
 | 
			
		||||
  return spec.slideCount
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const getTotalSlides = spec =>
 | 
			
		||||
  spec.slideCount === 1
 | 
			
		||||
    ? 1
 | 
			
		||||
    : getPreClones(spec) + spec.slideCount + getPostClones(spec)
 | 
			
		||||
export const siblingDirection = spec => {
 | 
			
		||||
  if (spec.targetSlide > spec.currentSlide) {
 | 
			
		||||
    if (spec.targetSlide > spec.currentSlide + slidesOnRight(spec)) {
 | 
			
		||||
      return 'left'
 | 
			
		||||
    }
 | 
			
		||||
    return 'right'
 | 
			
		||||
  } else {
 | 
			
		||||
    if (spec.targetSlide < spec.currentSlide - slidesOnLeft(spec)) {
 | 
			
		||||
      return 'right'
 | 
			
		||||
    }
 | 
			
		||||
    return 'left'
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const slidesOnRight = ({
 | 
			
		||||
  slidesToShow,
 | 
			
		||||
  centerMode,
 | 
			
		||||
  rtl,
 | 
			
		||||
  centerPadding,
 | 
			
		||||
}) => {
 | 
			
		||||
  // returns no of slides on the right of active slide
 | 
			
		||||
  if (centerMode) {
 | 
			
		||||
    let right = (slidesToShow - 1) / 2 + 1
 | 
			
		||||
    if (parseInt(centerPadding) > 0) right += 1
 | 
			
		||||
    if (rtl && slidesToShow % 2 === 0) right += 1
 | 
			
		||||
    return right
 | 
			
		||||
  }
 | 
			
		||||
  if (rtl) {
 | 
			
		||||
    return 0
 | 
			
		||||
  }
 | 
			
		||||
  return slidesToShow - 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const slidesOnLeft = ({
 | 
			
		||||
  slidesToShow,
 | 
			
		||||
  centerMode,
 | 
			
		||||
  rtl,
 | 
			
		||||
  centerPadding,
 | 
			
		||||
}) => {
 | 
			
		||||
  // returns no of slides on the left of active slide
 | 
			
		||||
  if (centerMode) {
 | 
			
		||||
    let left = (slidesToShow - 1) / 2 + 1
 | 
			
		||||
    if (parseInt(centerPadding) > 0) left += 1
 | 
			
		||||
    if (!rtl && slidesToShow % 2 === 0) left += 1
 | 
			
		||||
    return left
 | 
			
		||||
  }
 | 
			
		||||
  if (rtl) {
 | 
			
		||||
    return slidesToShow - 1
 | 
			
		||||
  }
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const canUseDOM = () =>
 | 
			
		||||
  !!(
 | 
			
		||||
    typeof window !== 'undefined' &&
 | 
			
		||||
    window.document &&
 | 
			
		||||
    window.document.createElement
 | 
			
		||||
  )
 | 
			
		||||
| 
						 | 
				
			
			@ -162,12 +162,14 @@
 | 
			
		|||
        "dom-closest": "^0.2.0",
 | 
			
		||||
        "dom-scroll-into-view": "^1.2.1",
 | 
			
		||||
        "enquire.js": "^2.1.6",
 | 
			
		||||
        "json2mq": "^0.2.0",
 | 
			
		||||
        "is-negative-zero": "^2.0.0",
 | 
			
		||||
        "lodash": "^4.17.5",
 | 
			
		||||
        "moment": "^2.21.0",
 | 
			
		||||
        "omit.js": "^1.0.0",
 | 
			
		||||
        "resize-observer-polyfill": "^1.5.0",
 | 
			
		||||
        "shallow-equal": "^1.0.0",
 | 
			
		||||
        "shallowequal": "^1.0.2",
 | 
			
		||||
        "warning": "^3.0.0"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ import {
 | 
			
		|||
  Calendar,
 | 
			
		||||
  Card,
 | 
			
		||||
  Collapse,
 | 
			
		||||
  // Carousel,
 | 
			
		||||
  Carousel,
 | 
			
		||||
  Cascader,
 | 
			
		||||
  Checkbox,
 | 
			
		||||
  Col,
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +75,7 @@ Vue.component(Card.Meta.name, Card.Meta)
 | 
			
		|||
Vue.component(Card.Grid.name, Card.Grid)
 | 
			
		||||
Vue.component(Collapse.name, Collapse)
 | 
			
		||||
Vue.component(Collapse.Panel.name, Collapse.Panel)
 | 
			
		||||
// Vue.component(Carousel.name, Carousel)
 | 
			
		||||
Vue.component(Carousel.name, Carousel)
 | 
			
		||||
Vue.component(Cascader.name, Cascader)
 | 
			
		||||
Vue.component(Checkbox.name, Checkbox)
 | 
			
		||||
Vue.component(Checkbox.Group.name, Checkbox.Group)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -276,6 +276,12 @@ export default {
 | 
			
		|||
    type: 'Data Entry',
 | 
			
		||||
    title: 'Upload',
 | 
			
		||||
  },
 | 
			
		||||
  carousel: {
 | 
			
		||||
    category: 'Components',
 | 
			
		||||
    type: 'Data Display',
 | 
			
		||||
    title: 'Carousel',
 | 
			
		||||
    subtitle: '走马灯',
 | 
			
		||||
  },
 | 
			
		||||
  tree: {
 | 
			
		||||
    category: 'Components',
 | 
			
		||||
    subtitle: '树形控件',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -399,4 +399,12 @@ export default [
 | 
			
		|||
    path: 'list-cn',
 | 
			
		||||
    component: () => import('../components/list/demo/index.vue'),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    path: 'carousel',
 | 
			
		||||
    component: () => import('../components/carousel/demo/index.vue'),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    path: 'carousel-cn',
 | 
			
		||||
    component: () => import('../components/carousel/demo/index.vue'),
 | 
			
		||||
  },
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ import Api from './components/api'
 | 
			
		|||
import './components'
 | 
			
		||||
import demoBox from './components/demoBox'
 | 
			
		||||
import demoContainer from './components/demoContainer'
 | 
			
		||||
import Test from '../components/upload/demo/index'
 | 
			
		||||
import Test from '../components/carousel/demo/index'
 | 
			
		||||
 | 
			
		||||
Vue.use(VueClipboard)
 | 
			
		||||
Vue.use(VueRouter)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@ Array [
 | 
			
		|||
  "Calendar",
 | 
			
		||||
  "Card",
 | 
			
		||||
  "Collapse",
 | 
			
		||||
  "Carousel",
 | 
			
		||||
  "Cascader",
 | 
			
		||||
  "Checkbox",
 | 
			
		||||
  "Col",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue