@yamada-ui/infinite-scroll-area
Version:
Yamada UI infinite scroll area component
1 lines • 7.08 kB
Source Map (JSON)
{"version":3,"sources":["../src/infinite-scroll-area.tsx"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps, ThemeProps } from \"@yamada-ui/core\"\nimport type { UseInfiniteScrollProps } from \"@yamada-ui/use-infinite-scroll\"\nimport type { ReactNode } from \"react\"\nimport {\n forwardRef,\n omitThemeProps,\n ui,\n useComponentMultiStyle,\n} from \"@yamada-ui/core\"\nimport { useInfiniteScroll } from \"@yamada-ui/use-infinite-scroll\"\nimport { createContext, cx, mergeRefs } from \"@yamada-ui/utils\"\nimport { useMemo, useRef } from \"react\"\n\ninterface InfiniteScrollAreaContext {\n [key: string]: CSSUIObject | undefined\n}\n\nconst [InfiniteScrollAreaProvider, useInfiniteScrollAreaContext] =\n createContext<InfiniteScrollAreaContext>({\n name: \"InfiniteScrollAreaContext\",\n errorMessage: `useInfiniteScrollAreaContext returned is 'undefined'. Seems you forgot to wrap the components in \"<InfiniteScrollArea />\"`,\n })\n\ninterface InfiniteScrollAreaOptions {\n /**\n * The infinite scroll area finish to use.\n */\n finish?: ReactNode\n /**\n * The infinite scroll area loading to use.\n */\n loading?: ReactNode\n /**\n * Props for infinite scroll area trigger component.\n */\n triggerProps?: HTMLUIProps\n}\n\nexport interface InfiniteScrollAreaProps\n extends Omit<HTMLUIProps, keyof UseInfiniteScrollProps>,\n UseInfiniteScrollProps,\n ThemeProps<\"InfiniteScrollArea\">,\n InfiniteScrollAreaOptions {}\n\n/**\n * `InfiniteScrollArea` is for providing infinite scroll functionality.\n * This feature provides a smooth scrolling experience by automatically loading and displaying the next dataset when the user reaches the end of the page.\n *\n * @see Docs https://yamada-ui.com/components/data-display/infinite-scroll-area\n */\nexport const InfiniteScrollArea = forwardRef<InfiniteScrollAreaProps, \"div\">(\n ({ orientation: _orientation = \"vertical\", ...props }, ref) => {\n const [styles, mergedProps] = useComponentMultiStyle(\"InfiniteScrollArea\", {\n orientation: _orientation,\n ...props,\n })\n const {\n className,\n children,\n isDisabled,\n disabled = isDisabled,\n finish: finishProp,\n indexRef,\n initialLoad,\n isReverse,\n loading,\n orientation,\n resetRef,\n reverse = isReverse,\n rootMargin,\n rootRef: rootRefProp,\n startIndex,\n threshold,\n triggerProps,\n onLoad,\n ...rest\n } = omitThemeProps(mergedProps)\n const vertical = orientation === \"vertical\"\n const rootRef = useRef<HTMLDivElement>(null)\n const { ref: triggerRef, finish } = useInfiniteScroll({\n disabled,\n indexRef,\n initialLoad,\n isDisabled,\n isReverse,\n orientation,\n resetRef,\n reverse,\n rootMargin,\n rootRef: rootRefProp ?? rootRef,\n startIndex,\n threshold,\n onLoad,\n })\n const css: CSSUIObject = useMemo(\n () => ({\n display: \"flex\",\n flexDirection: vertical ? \"column\" : \"row\",\n gap: \"1rem\",\n w: \"100%\",\n ...styles.container,\n }),\n [vertical, styles],\n )\n const hasFinish = !!finishProp\n const showTrigger = !disabled && (hasFinish || !finish)\n\n return (\n <InfiniteScrollAreaProvider value={styles}>\n <ui.div\n ref={mergeRefs(rootRef, ref)}\n className={cx(\"ui-infinite-scroll-area\", className)}\n aria-busy=\"false\"\n role=\"feed\"\n __css={css}\n {...rest}\n >\n {reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n\n {children}\n\n {!reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n </ui.div>\n </InfiniteScrollAreaProvider>\n )\n },\n)\n\nInfiniteScrollArea.displayName = \"InfiniteScrollArea\"\nInfiniteScrollArea.__ui__ = \"InfiniteScrollArea\"\n\ninterface InfiniteScrollTriggerProps extends HTMLUIProps {}\n\nconst InfiniteScrollTrigger = forwardRef<InfiniteScrollTriggerProps, \"div\">(\n ({ className, ...rest }, ref) => {\n const styles = useInfiniteScrollAreaContext()\n const css: CSSUIObject = useMemo(\n () => ({\n alignItems: \"center\",\n display: \"flex\",\n flex: 1,\n justifyContent: \"center\",\n w: \"100%\",\n ...styles.trigger,\n }),\n [styles],\n )\n\n return (\n <ui.div\n ref={ref}\n className={cx(\"ui-infinite-scroll-area__trigger\", className)}\n __css={css}\n {...rest}\n />\n )\n },\n)\n\nInfiniteScrollTrigger.displayName = \"InfiniteScrollTrigger\"\nInfiniteScrollTrigger.__ui__ = \"InfiniteScrollTrigger\"\n"],"mappings":";;;AAGA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,yBAAyB;AAClC,SAAS,eAAe,IAAI,iBAAiB;AAC7C,SAAS,SAAS,cAAc;AAkGxB,SASI,KATJ;AA5FR,IAAM,CAAC,4BAA4B,4BAA4B,IAC7D,cAAyC;AAAA,EACvC,MAAM;AAAA,EACN,cAAc;AAChB,CAAC;AA6BI,IAAM,qBAAqB;AAAA,EAChC,CAAC,EAAE,aAAa,eAAe,YAAY,GAAG,MAAM,GAAG,QAAQ;AAC7D,UAAM,CAAC,QAAQ,WAAW,IAAI,uBAAuB,sBAAsB;AAAA,MACzE,aAAa;AAAA,MACb,GAAG;AAAA,IACL,CAAC;AACD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI,eAAe,WAAW;AAC9B,UAAM,WAAW,gBAAgB;AACjC,UAAM,UAAU,OAAuB,IAAI;AAC3C,UAAM,EAAE,KAAK,YAAY,OAAO,IAAI,kBAAkB;AAAA,MACpD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,oCAAe;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,UAAM,MAAmB;AAAA,MACvB,OAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe,WAAW,WAAW;AAAA,QACrC,KAAK;AAAA,QACL,GAAG;AAAA,QACH,GAAG,OAAO;AAAA,MACZ;AAAA,MACA,CAAC,UAAU,MAAM;AAAA,IACnB;AACA,UAAM,YAAY,CAAC,CAAC;AACpB,UAAM,cAAc,CAAC,aAAa,aAAa,CAAC;AAEhD,WACE,oBAAC,8BAA2B,OAAO,QACjC;AAAA,MAAC,GAAG;AAAA,MAAH;AAAA,QACC,KAAK,UAAU,SAAS,GAAG;AAAA,QAC3B,WAAW,GAAG,2BAA2B,SAAS;AAAA,QAClD,aAAU;AAAA,QACV,MAAK;AAAA,QACL,OAAO;AAAA,QACN,GAAG;AAAA,QAEH;AAAA,qBAAW,cACV,oBAAC,yBAAsB,KAAK,YAAa,GAAG,cACzC,mBAAS,aAAa,SACzB,IACE;AAAA,UAEH;AAAA,UAEA,CAAC,WAAW,cACX,oBAAC,yBAAsB,KAAK,YAAa,GAAG,cACzC,mBAAS,aAAa,SACzB,IACE;AAAA;AAAA;AAAA,IACN,GACF;AAAA,EAEJ;AACF;AAEA,mBAAmB,cAAc;AACjC,mBAAmB,SAAS;AAI5B,IAAM,wBAAwB;AAAA,EAC5B,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ;AAC/B,UAAM,SAAS,6BAA6B;AAC5C,UAAM,MAAmB;AAAA,MACvB,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,MAAM;AAAA,QACN,gBAAgB;AAAA,QAChB,GAAG;AAAA,QACH,GAAG,OAAO;AAAA,MACZ;AAAA,MACA,CAAC,MAAM;AAAA,IACT;AAEA,WACE;AAAA,MAAC,GAAG;AAAA,MAAH;AAAA,QACC;AAAA,QACA,WAAW,GAAG,oCAAoC,SAAS;AAAA,QAC3D,OAAO;AAAA,QACN,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,sBAAsB,cAAc;AACpC,sBAAsB,SAAS;","names":[]}