UNPKG

@fastkit/vue-scroller

Version:

A library for controlling the scrolling state of elements and components in Vue applications.

1 lines 19 kB
{"version":3,"sources":["../src/composables/scroller.ts","../src/components/VScroller.tsx"],"names":["_createVNode"],"mappings":"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","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();"]}