{"version":3,"sources":["../src/composables/scroller.ts","../src/components/VScroller.tsx"],"names":["_createVNode"],"mappings":";;;;;;;AAyBA,IAAM,aAAqB,GAAA,IAAA;AA0B3B,IAAM,uBAA0B,GAAA;AAAA,EAC9B,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,uBAA0B,GAAA;AAAA,EAC9B,cAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,cAAiB,GAAA,CAAC,GAAG,uBAAA,EAAyB,GAAG,uBAAuB,CAAA;AAE9E,SAAS,kBAAuC,GAAA;AAC9C,EAAO,OAAA,QAAA;AAAA,IACL,MAAA,CAAO,WAAY,CAAA,cAAA,CAAe,GAAI,CAAA,CAAC,SAAS,CAAC,IAAA,EAAM,aAAa,CAAC,CAAC;AAAA,GACxE;AACF;AAEO,SAAS,mBAAmB,OAA6B,EAAA;AAC9D,EAAM,MAAA,MAAA,GAAS,QAAQ,EAAO,KAAA,MAAA;AAC9B,EAAM,MAAA,OAAA,GAAU,SAAS,IAAO,GAAA,MAAA;AAChC,EAAA,MAAM,QAAQ,kBAAmB,EAAA;AACjC,EAAM,MAAA,UAAA,GAAa,IAAwB,IAAI,CAAA;AAC/C,EAAM,MAAA,QAAA,GAAW,IAAI,QAAS,CAAA;AAAA,IAC5B,GAAG,OAAA;AAAA,IACH,EAAI,EAAA;AAAA,GACL,CAAA;AACD,EAAA,QAAA,CAAS,QAAQ,KAAK,CAAA;AAEtB,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,IAAI,UAAa,GAAA;AACf,MAAO,OAAA,UAAA;AAAA,KACT;AAAA,IACA,IAAI,QAAW,GAAA;AACb,MAAO,OAAA,QAAA;AAAA,KACT;AAAA,IACA,IAAI,eAAkB,GAAA;AACpB,MAAA,OAAO,KAAM,CAAA,eAAA;AAAA,KACf;AAAA,IACA,IAAI,cAAiB,GAAA;AACnB,MAAA,OAAO,KAAM,CAAA,cAAA;AAAA,KACf;AAAA,IACA,IAAI,WAAc,GAAA;AAChB,MAAA,OAAO,KAAM,CAAA,WAAA;AAAA,KACf;AAAA,IACA,IAAI,SAAY,GAAA;AACd,MAAA,OAAO,KAAM,CAAA,SAAA;AAAA,KACf;AAAA,IACA,IAAI,OAAU,GAAA;AACZ,MAAA,OAAO,KAAM,CAAA,OAAA;AAAA,KACf;AAAA,IACA,IAAI,SAAY,GAAA;AACd,MAAA,OAAO,KAAM,CAAA,SAAA;AAAA,KACf;AAAA,IACA,IAAI,QAAW,GAAA;AACb,MAAA,OAAO,KAAM,CAAA,QAAA;AAAA,KACf;AAAA,IACA,IAAI,aAAgB,GAAA;AAClB,MAAA,OAAO,KAAM,CAAA,aAAA;AAAA,KACf;AAAA,IACA,IAAI,cAAiB,GAAA;AACnB,MAAA,OAAO,KAAM,CAAA,cAAA;AAAA,KACf;AAAA,IACA,IAAI,cAAiB,GAAA;AACnB,MAAA,OAAO,KAAM,CAAA,cAAA;AAAA,KACf;AAAA,IACA,IAAI,YAAe,GAAA;AACjB,MAAA,OAAO,KAAM,CAAA,YAAA;AAAA,KACf;AAAA,IACA,IAAI,aAAgB,GAAA;AAClB,MAAA,OAAO,KAAM,CAAA,aAAA;AAAA,KACf;AAAA,IACA,IAAI,YAAe,GAAA;AACjB,MAAA,OAAO,KAAM,CAAA,YAAA;AAAA,KACf;AAAA,IACA,IAAI,WAAc,GAAA;AAChB,MAAA,OAAO,KAAM,CAAA,WAAA;AAAA,KACf;AAAA,IACA,IAAI,WAAc,GAAA;AAChB,MAAA,OAAO,KAAM,CAAA,WAAA;AAAA,KACf;AAAA,IACA,IAAI,WAAc,GAAA;AAChB,MAAA,OAAO,KAAM,CAAA,WAAA;AAAA,KACf;AAAA,IACA,IAAI,KAAQ,GAAA;AACV,MAAA,OAAO,KAAM,CAAA,KAAA;AAAA,KACf;AAAA,IACA,IAAI,YAAe,GAAA;AACjB,MAAA,OAAO,KAAM,CAAA,YAAA;AAAA,KACf;AAAA,IACA,IAAI,aAAa,YAAc,EAAA;AAC7B,MAAA,KAAA,CAAM,YAAe,GAAA,YAAA;AAAA,KACvB;AAAA,IACA,IAAI,UAAa,GAAA;AACf,MAAA,OAAO,KAAM,CAAA,UAAA;AAAA,KACf;AAAA,IACA,IAAI,WAAW,UAAY,EAAA;AACzB,MAAA,KAAA,CAAM,UAAa,GAAA,UAAA;AAAA,KACrB;AAAA,IACA,IAAI,WAAc,GAAA;AAChB,MAAA,OAAO,KAAM,CAAA,WAAA;AAAA,KACf;AAAA,IACA,IAAI,YAAY,WAAa,EAAA;AAC3B,MAAA,KAAA,CAAM,WAAc,GAAA,WAAA;AAAA,KACtB;AAAA,IACA,IAAI,SAAY,GAAA;AACd,MAAA,OAAO,KAAM,CAAA,SAAA;AAAA,KACf;AAAA,IACA,IAAI,UAAU,SAAW,EAAA;AACvB,MAAA,KAAA,CAAM,SAAY,GAAA,SAAA;AAAA,KACpB;AAAA,IAEA,KAAQ,GAAA;AACN,MAAA,OAAO,SAAS,KAAM,EAAA;AAAA,KACxB;AAAA,IAEA,OAAU,GAAA;AACR,MAAA,OAAO,UAAW,CAAA,KAAA;AAAA,KACpB;AAAA,IAEA,KAAQ,GAAA;AACN,MAAA,OAAO,SAAS,KAAM,EAAA;AAAA,KACxB;AAAA,IAEA,IAAa,GAAA;AACX,MAAA,OAAO,SAAS,IAAK,EAAA;AAAA,KACvB;AAAA,IAEA,OAAU,GAAA;AACR,MAAA,OAAO,SAAS,OAAQ,EAAA;AAAA,KAC1B;AAAA,IAEA,MAAe,GAAA;AACb,MAAA,OAAO,SAAS,MAAO,EAAA;AAAA,KACzB;AAAA,IAEA,MAAS,GAAA;AACP,MAAA,OAAO,SAAS,MAAO,EAAA;AAAA,KACzB;AAAA,IAEA,QAAmB,GAAA;AACjB,MAAA,OAAO,SAAS,QAAS,EAAA;AAAA,KAC3B;AAAA,IAEA,MAAS,GAAA;AACP,MAAA,OAAO,SAAS,MAAO,EAAA;AAAA,KACzB;AAAA,IAEA,EAAA,CAAG,KAAe,EAAA,KAAA,EAAe,OAAiC,EAAA;AAChE,MAAA,OAAO,QAAS,CAAA,EAAA,CAAG,KAAO,EAAA,KAAA,EAAO,OAAO,CAAA;AAAA,KAC1C;AAAA,IAEA,EAAA,CACE,gBACA,OACA,EAAA;AACA,MAAO,OAAA,QAAA,CAAS,EAAG,CAAA,cAAA,EAAgB,OAAO,CAAA;AAAA,KAC5C;AAAA,IAEA,SAAA,CACE,QACA,OACA,EAAA;AACA,MAAO,OAAA,QAAA,CAAS,SAAU,CAAA,MAAA,EAAQ,OAAO,CAAA;AAAA,KAC3C;AAAA,IAEA,MAAA,CAAO,SAA8B,OAAiC,EAAA;AACpE,MAAO,OAAA,QAAA,CAAS,MAAO,CAAA,OAAA,EAAS,OAAO,CAAA;AAAA,KACzC;AAAA,IAEA,MAAM,OAAiC,EAAA;AACrC,MAAO,OAAA,QAAA,CAAS,MAAM,OAAO,CAAA;AAAA,KAC/B;AAAA,IAEA,QAAQ,OAAiC,EAAA;AACvC,MAAO,OAAA,QAAA,CAAS,QAAQ,OAAO,CAAA;AAAA,KACjC;AAAA,IAEA,SAAS,OAAiC,EAAA;AACxC,MAAO,OAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AAAA,KAClC;AAAA,IAEA,OAAO,OAAiC,EAAA;AACtC,MAAO,OAAA,QAAA,CAAS,OAAO,OAAO,CAAA;AAAA,KAChC;AAAA,IAEA,UAAU,OAAiC,EAAA;AACzC,MAAO,OAAA,QAAA,CAAS,UAAU,OAAO,CAAA;AAAA,KACnC;AAAA,IAEA,aAAa,OAAiC,EAAA;AAC5C,MAAO,OAAA,QAAA,CAAS,aAAa,OAAO,CAAA;AAAA,KACtC;AAAA,IAEA,WAAW,OAAiC,EAAA;AAC1C,MAAO,OAAA,QAAA,CAAS,WAAW,OAAO,CAAA;AAAA,KACpC;AAAA,IAEA,cAAc,OAAiC,EAAA;AAC7C,MAAO,OAAA,QAAA,CAAS,cAAc,OAAO,CAAA;AAAA,KACvC;AAAA,IAEA,kBAAkB,OAAwB,EAAA;AACxC,MAAO,OAAA,QAAA,CAAS,kBAAkB,OAAO,CAAA;AAAA,KAC3C;AAAA,IAEA,oBAAoB,OAAwB,EAAA;AAC1C,MAAO,OAAA,QAAA,CAAS,oBAAoB,OAAO,CAAA;AAAA,KAC7C;AAAA,IAEA,mCACE,MACA,EAAA;AACA,MAAO,OAAA,QAAA,CAAS,mCAAmC,MAAM,CAAA;AAAA,KAC3D;AAAA,IAEA,qCAAwC,GAAA;AACtC,MAAA,OAAO,SAAS,qCAAsC,EAAA;AAAA;AACxD,GACF;AAEA,EAAA,IAAI,MAAQ,EAAA;AAEV,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,KAAK,UAAW,CAAA,KAAA;AACpB,MAAA,IAAI,CAAC,EAAI,EAAA;AACT,MAAI,IAAA,EAAE,cAAc,OAAU,CAAA,EAAA;AAC5B,QAAA,EAAA,GAAM,EAAW,CAAA,GAAA;AAAA;AAEnB,MAAI,IAAA,EAAE,cAAc,OAAU,CAAA,EAAA;AAC9B,MAAA,QAAA,CAAS,WAAW,EAAE,CAAA;AAAA,KACvB,CAAA;AAED,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,SAAA,CAAU,OAAQ,EAAA;AAAA,KACnB,CAAA;AAAA;AAGH,EAAO,OAAA,SAAA;AACT;AAIA,IAAI,iBAAA;AAEG,SAAS,mBAAmC,GAAA;AACjD,EAAA,IAAI,CAAC,iBAAmB,EAAA;AACtB,IAAA,iBAAA,GAAoB,kBAAmB,CAAA,EAAE,EAAI,EAAA,MAAA,EAAQ,CAAA;AAAA;AAEvD,EAAO,OAAA,iBAAA;AACT;ACtTA,IAAM,oBAAuB,GAAA,EAAA;AAC7B,IAAM,UAAa,GAAA,CAAC,KAAO,EAAA,OAAA,EAAS,UAAU,MAAM,CAAA;AAC7C,IAAM,aAAgB,GAAA;AAAA,EAC3B,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,KAAA,EAAO,CAAC,OAAA,EAAS,MAAM,CAAA;AAAA;AAAA;AAAA;AAAA,EAIvB,cAAgB,EAAA;AAClB;AAWO,IAAM,aAAa,eAAgB,CAAA;AAAA,EACxC,IAAM,EAAA,WAAA;AAAA,EACN,KAAO,EAAA,aAAA;AAAA,EACP,KAAA,CAAM,OAAO,GAAK,EAAA;AAChB,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,QAAA,IAAY,EAAC;AACpC,IAAA,MAAM,WAAW,kBAAmB,CAAA;AAAA,MAClC,GAAG,QAAA;AAAA,MACH,EAAA,EAAI,SAAS,EAAM,IAAA;AAAA,KACpB,CAAA;AACD,IAAM,MAAA,cAAA,GAAiB,SAAS,MAAM;AACpC,MAAM,MAAA;AAAA,QACJ;AAAA,OACE,GAAA,KAAA;AACJ,MAAI,IAAA,OAAO,KAAU,KAAA,QAAA,EAAiB,OAAA,KAAA;AACtC,MAAI,IAAA,KAAA,KAAU,MAAa,OAAA,oBAAA;AAC3B,MAAO,OAAA,MAAA;AAAA,KACR,CAAA;AACD,IAAM,MAAA,aAAA,GAAgB,SAAS,MAAM;AACnC,MAAM,MAAA,WAAA,GAAc,eAAe,KAAS,IAAA,oBAAA;AAC5C,MAAM,MAAA;AAAA,QACJ,UAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACE,GAAA,QAAA;AACJ,MAAO,OAAA;AAAA,QACL,MAAM,UAAc,IAAA,WAAA;AAAA,QACpB,OAAO,WAAe,IAAA,WAAA;AAAA,QACtB,KAAK,SAAa,IAAA,WAAA;AAAA,QAClB,QAAQ,YAAgB,IAAA,WAAA;AAAA,QACxB,MAAQ,EAAA;AAAA,UACN,MAAM,UAAa,GAAA,CAAA;AAAA,UACnB,OAAO,WAAc,GAAA,CAAA;AAAA,UACrB,KAAK,SAAY,GAAA,CAAA;AAAA,UACjB,QAAQ,YAAe,GAAA;AAAA;AACzB,OACF;AAAA,KACD,CAAA;AACD,IAAA,MAAM,WAAc,GAAA;AAAA,MAClB,QAAA;AAAA,MACA,IAAI,UAAa,GAAA;AACf,QAAA,OAAO,aAAc,CAAA,KAAA;AAAA;AACvB,KACF;AACA,IAAM,MAAA,SAAA,GAAY,SAAS,MAAM;AAC/B,MAAA,MAAM,cAAc,cAAe,CAAA,KAAA;AACnC,MAAA,IAAI,gBAAgB,MAAW,EAAA;AAC/B,MAAA,MAAM,SAAS,EAAC;AAChB,MAAA,MAAM,aAAa,aAAc,CAAA,KAAA;AACjC,MAAW,UAAA,CAAA,IAAA,IAAQ,MAAO,CAAA,IAAA,CAAK,MAAM,CAAA;AACrC,MAAW,UAAA,CAAA,GAAA,IAAO,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA;AACnC,MAAW,UAAA,CAAA,KAAA,IAAS,MAAO,CAAA,IAAA,CAAK,OAAO,CAAA;AACvC,MAAW,UAAA,CAAA,MAAA,IAAU,MAAO,CAAA,IAAA,CAAK,QAAQ,CAAA;AACzC,MAAO,OAAA,MAAA;AAAA,KACR,CAAA;AACD,IAAA,GAAA,CAAI,OAAO,WAAW,CAAA;AACtB,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,SAAS,SAAU,CAAA,KAAA;AACzB,MAAM,MAAA;AAAA,QACJ;AAAA,OACE,GAAA,KAAA;AACJ,MAAA,MAAM,UAAU,MAAU,IAAA,UAAA,CAAW,GAAI,CAAA,CAAA,IAAA,KAAQA,YAAa,KAAO,EAAA;AAAA,QACnE,OAAA,EAAS,CAAC,mBAAqB,EAAA;AAAA,UAC7B,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAE,GAAG,IAAA;AAAA,UAChC,CAAC,CAAA,yBAAA,CAA2B,GAAG,MAAA,CAAO,SAAS,IAAI;AAAA,SACpD,CAAA;AAAA,QACD,KAAO,EAAA;AAAA,OACT,EAAG,IAAI,CAAC,CAAA;AACR,MAAA,OAAOA,YAAa,KAAO,EAAA;AAAA,QACzB,OAAS,EAAA;AAAA,OACX,EAAG,CAACA,WAAA,CAAa,KAAO,EAAA;AAAA,QACtB,OAAA,EAAS,CAAC,uBAAA,EAAyB,cAAc,CAAA;AAAA,QACjD,OAAO,QAAS,CAAA;AAAA,OAClB,EAAG,CAAC,GAAI,CAAA,KAAA,CAAM,WAAW,CAAC,CAAG,EAAA,OAAO,CAAC,CAAA;AAAA,KACvC;AAAA;AAEJ,CAAC;AACM,IAAM,SAAY,GAAA,oBAAA,CAAqB,UAAU,CAAA,CAAE,OAAQ","file":"vue-scroller.mjs","sourcesContent":["import { onMounted, onBeforeUnmount, reactive, ref } from 'vue';\nimport {\n  Scroller,\n  ScrollerSetting,\n  ScrollerState,\n  ScrollAxis,\n  ScrollDirection,\n  ScrollXDirection,\n  ScrollYDirection,\n  ScrollerScrollOptions,\n  ScrollPosition,\n  ScrollToElementTarget,\n  ScrollerScrollToElementOptions,\n  ScrollToSideTargets,\n  ScrollStopper,\n  ScrollToElementAdditionalOffset,\n} from '@fastkit/scroller';\n\nexport type UseScrollerTarget = 'self' | 'body';\n\nexport interface UseScrollerSetting\n  extends Omit<Partial<ScrollerSetting>, 'el'> {\n  el?: UseScrollerTarget;\n}\n\nconst INITIAL_VALUE: any = null;\n\ntype UseScrollerState = {\n  containerHeight: number;\n  containerWidth: number;\n  isDestroyed: boolean;\n  isPending: boolean;\n  isReady: boolean;\n  isRunning: boolean;\n  lastAxis: ScrollAxis;\n  lastDirection: ScrollDirection;\n  lastXDirection: ScrollXDirection;\n  lastYDirection: ScrollYDirection;\n  nowScrolling: boolean;\n  scrollEnabled: boolean;\n  scrollHeight: number;\n  scrollWidth: number;\n  scrollableX: boolean;\n  scrollableY: boolean;\n  state: ScrollerState;\n  scrollBottom: number;\n  scrollLeft: number;\n  scrollRight: number;\n  scrollTop: number;\n};\n\nconst OBSERVER_READONLY_PROPS = [\n  'containerHeight',\n  'containerWidth',\n  'isDestroyed',\n  'isPending',\n  'isReady',\n  'isRunning',\n  'lastAxis',\n  'lastDirection',\n  'lastXDirection',\n  'lastYDirection',\n  'nowScrolling',\n  'scrollEnabled',\n  'scrollHeight',\n  'scrollWidth',\n  'scrollableX',\n  'scrollableY',\n  'state',\n] as const;\n\nconst OBSERVER_WRITABLE_PROPS = [\n  'scrollBottom',\n  'scrollLeft',\n  'scrollRight',\n  'scrollTop',\n] as const;\n\nconst OBSERVER_PROPS = [...OBSERVER_READONLY_PROPS, ...OBSERVER_WRITABLE_PROPS];\n\nfunction createDefaultState(): UseScrollerState {\n  return reactive(\n    Object.fromEntries(OBSERVER_PROPS.map((prop) => [prop, INITIAL_VALUE])),\n  ) as UseScrollerState;\n}\n\nexport function useScrollerControl(setting: UseScrollerSetting) {\n  const isSelf = setting.el === 'self';\n  const $target = isSelf ? null : undefined;\n  const state = createDefaultState();\n  const elementRef = ref<null | HTMLElement>(null);\n  const scroller = new Scroller({\n    ...setting,\n    el: $target,\n  });\n  scroller.observe(state);\n\n  const _scroller = {\n    get elementRef() {\n      return elementRef;\n    },\n    get scroller() {\n      return scroller;\n    },\n    get containerHeight() {\n      return state.containerHeight;\n    },\n    get containerWidth() {\n      return state.containerWidth;\n    },\n    get isDestroyed() {\n      return state.isDestroyed;\n    },\n    get isPending() {\n      return state.isPending;\n    },\n    get isReady() {\n      return state.isReady;\n    },\n    get isRunning() {\n      return state.isRunning;\n    },\n    get lastAxis() {\n      return state.lastAxis;\n    },\n    get lastDirection() {\n      return state.lastDirection;\n    },\n    get lastXDirection() {\n      return state.lastXDirection;\n    },\n    get lastYDirection() {\n      return state.lastYDirection;\n    },\n    get nowScrolling() {\n      return state.nowScrolling;\n    },\n    get scrollEnabled() {\n      return state.scrollEnabled;\n    },\n    get scrollHeight() {\n      return state.scrollHeight;\n    },\n    get scrollWidth() {\n      return state.scrollWidth;\n    },\n    get scrollableX() {\n      return state.scrollableX;\n    },\n    get scrollableY() {\n      return state.scrollableY;\n    },\n    get state() {\n      return state.state;\n    },\n    get scrollBottom() {\n      return state.scrollBottom;\n    },\n    set scrollBottom(scrollBottom) {\n      state.scrollBottom = scrollBottom;\n    },\n    get scrollLeft() {\n      return state.scrollLeft;\n    },\n    set scrollLeft(scrollLeft) {\n      state.scrollLeft = scrollLeft;\n    },\n    get scrollRight() {\n      return state.scrollRight;\n    },\n    set scrollRight(scrollRight) {\n      state.scrollRight = scrollRight;\n    },\n    get scrollTop() {\n      return state.scrollTop;\n    },\n    set scrollTop(scrollTop) {\n      state.scrollTop = scrollTop;\n    },\n\n    ready() {\n      return scroller.ready();\n    },\n\n    element() {\n      return elementRef.value;\n    },\n\n    start() {\n      return scroller.start();\n    },\n\n    stop(): void {\n      return scroller.stop();\n    },\n\n    destroy() {\n      return scroller.destroy();\n    },\n\n    update(): void {\n      return scroller.update();\n    },\n\n    toJSON() {\n      return scroller.toJSON();\n    },\n\n    toString(): string {\n      return scroller.toString();\n    },\n\n    cancel() {\n      return scroller.cancel();\n    },\n\n    by(diffX: number, diffY: number, options?: ScrollerScrollOptions) {\n      return scroller.by(diffX, diffY, options);\n    },\n\n    to(\n      scrollPosition: Partial<ScrollPosition>,\n      options?: ScrollerScrollOptions,\n    ) {\n      return scroller.to(scrollPosition, options);\n    },\n\n    toElement(\n      target: ScrollToElementTarget,\n      options?: ScrollerScrollToElementOptions,\n    ) {\n      return scroller.toElement(target, options);\n    },\n\n    toSide(targets: ScrollToSideTargets, options?: ScrollerScrollOptions) {\n      return scroller.toSide(targets, options);\n    },\n\n    toTop(options?: ScrollerScrollOptions) {\n      return scroller.toTop(options);\n    },\n\n    toRight(options?: ScrollerScrollOptions) {\n      return scroller.toRight(options);\n    },\n\n    toBottom(options?: ScrollerScrollOptions) {\n      return scroller.toBottom(options);\n    },\n\n    toLeft(options?: ScrollerScrollOptions) {\n      return scroller.toLeft(options);\n    },\n\n    toLeftTop(options?: ScrollerScrollOptions) {\n      return scroller.toLeftTop(options);\n    },\n\n    toLeftBottom(options?: ScrollerScrollOptions) {\n      return scroller.toLeftBottom(options);\n    },\n\n    toRightTop(options?: ScrollerScrollOptions) {\n      return scroller.toRightTop(options);\n    },\n\n    toRightBottom(options?: ScrollerScrollOptions) {\n      return scroller.toRightBottom(options);\n    },\n\n    pushScrollStopper(stopper: ScrollStopper) {\n      return scroller.pushScrollStopper(stopper);\n    },\n\n    removeScrollStopper(stopper: ScrollStopper) {\n      return scroller.removeScrollStopper(stopper);\n    },\n\n    setScrollToElementAdditionalOffset(\n      offset: ScrollToElementAdditionalOffset | undefined,\n    ) {\n      return scroller.setScrollToElementAdditionalOffset(offset);\n    },\n\n    deleteScrollToElementAdditionalOffset() {\n      return scroller.deleteScrollToElementAdditionalOffset();\n    },\n  };\n\n  if (isSelf) {\n    // const selfEl = ref<null | Element | ComponentPublicInstance>(null);\n    onMounted(() => {\n      let el = elementRef.value;\n      if (!el) return;\n      if (!(el instanceof Element)) {\n        el = (el as any).$el;\n      }\n      if (!(el instanceof Element)) return;\n      scroller.setElement(el);\n    });\n\n    onBeforeUnmount(() => {\n      _scroller.destroy();\n    });\n  }\n\n  return _scroller;\n}\n\nexport type UseScroller = ReturnType<typeof useScrollerControl>;\n\nlet _documentScroller: UseScroller | undefined;\n\nexport function getDocumentScroller(): UseScroller {\n  if (!_documentScroller) {\n    _documentScroller = useScrollerControl({ el: 'body' });\n  }\n  return _documentScroller;\n}\n\nexport type ScrollerControl = ReturnType<typeof useScrollerControl>;\n","import { createVNode as _createVNode } from \"vue\";\nimport './VScroller.scss';\nimport { defineComponent, computed } from 'vue';\nimport { defineTypedComponent } from '@fastkit/vue-utils';\nimport { useScrollerControl } from '../composables';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\n\nconst DEFAULT_GUIDE_OFFSET = 20;\nconst GuideTypes = ['top', 'right', 'bottom', 'left'];\nexport const scrollerProps = {\n  settings: {\n    type: Object,\n    default: null\n  },\n  /**\n   * スクロール可能な辺にガイドとして影を表示する場合に設定する\n   */\n  guide: [Boolean, Number],\n  /**\n   * スクロールするコンテナ要素のクラス名\n   */\n  containerClass: String\n};\n\n/** Scrollability in each direction */\n\n/**\n * Combined Scrollability\n *\n * The information immediately below is marked as scrollable to account for the margin of the `guide` prop, so `false` may be marked even if the information is actually scrollable.\n * If you want to check strict scrollability, check the `strict` property.\n */\n\nexport const _ScrollerI = defineComponent({\n  name: 'VScroller',\n  props: scrollerProps,\n  setup(props, ctx) {\n    const settings = props.settings || {};\n    const scroller = useScrollerControl({\n      ...settings,\n      el: settings.el || 'self'\n    });\n    const guideOffsetRef = computed(() => {\n      const {\n        guide\n      } = props;\n      if (typeof guide === 'number') return guide;\n      if (guide === true) return DEFAULT_GUIDE_OFFSET;\n      return undefined;\n    });\n    const scrollability = computed(() => {\n      const guideOffset = guideOffsetRef.value || DEFAULT_GUIDE_OFFSET;\n      const {\n        scrollLeft,\n        scrollTop,\n        scrollRight,\n        scrollBottom\n      } = scroller;\n      return {\n        left: scrollLeft >= guideOffset,\n        right: scrollRight >= guideOffset,\n        top: scrollTop >= guideOffset,\n        bottom: scrollBottom >= guideOffset,\n        strict: {\n          left: scrollLeft > 0,\n          right: scrollRight > 0,\n          top: scrollTop > 0,\n          bottom: scrollBottom > 0\n        }\n      };\n    });\n    const scrollerRef = {\n      scroller,\n      get scrollable() {\n        return scrollability.value;\n      }\n    };\n    const guidesRef = computed(() => {\n      const guideOffset = guideOffsetRef.value;\n      if (guideOffset === undefined) return;\n      const guides = [];\n      const scrollable = scrollability.value;\n      scrollable.left && guides.push('left');\n      scrollable.top && guides.push('top');\n      scrollable.right && guides.push('right');\n      scrollable.bottom && guides.push('bottom');\n      return guides;\n    });\n    ctx.expose(scrollerRef);\n    return () => {\n      const guides = guidesRef.value;\n      const {\n        containerClass\n      } = props;\n      const $guides = guides && GuideTypes.map(type => _createVNode(\"div\", {\n        \"class\": ['v-scroller__guide', {\n          [`v-scroller__guide--${type}`]: true,\n          [`v-scroller__guide--active`]: guides.includes(type)\n        }],\n        \"key\": type\n      }, null));\n      return _createVNode(\"div\", {\n        \"class\": \"v-scroller\"\n      }, [_createVNode(\"div\", {\n        \"class\": ['v-scroller__container', containerClass],\n        \"ref\": scroller.elementRef\n      }, [ctx.slots.default?.()]), $guides]);\n    };\n  }\n});\nexport const VScroller = defineTypedComponent(_ScrollerI).$expose();"]}