@spark-ui/components 10.7.4 → 10.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/alert-dialog/index.js +36 -5
- package/dist/alert-dialog/index.js.map +1 -1
- package/dist/alert-dialog/index.mjs +2 -2
- package/dist/avatar/index.js +3 -0
- package/dist/avatar/index.js.map +1 -1
- package/dist/avatar/index.mjs +3 -1
- package/dist/avatar/index.mjs.map +1 -1
- package/dist/breadcrumb/index.js +1 -0
- package/dist/breadcrumb/index.js.map +1 -1
- package/dist/breadcrumb/index.mjs +1 -1
- package/dist/carousel/index.js +9 -0
- package/dist/carousel/index.js.map +1 -1
- package/dist/carousel/index.mjs +9 -1
- package/dist/carousel/index.mjs.map +1 -1
- package/dist/{chunk-O42QOEJ6.mjs → chunk-ESSJY557.mjs} +2 -2
- package/dist/{chunk-73YYIDSP.mjs → chunk-OQ4ALBBN.mjs} +6 -1
- package/dist/chunk-OQ4ALBBN.mjs.map +1 -0
- package/dist/{chunk-SBJNVOF7.mjs → chunk-QNYSDG6F.mjs} +2 -1
- package/dist/{chunk-SBJNVOF7.mjs.map → chunk-QNYSDG6F.mjs.map} +1 -1
- package/dist/{chunk-TOKVRWXL.mjs → chunk-RKPP7ZOK.mjs} +2 -1
- package/dist/{chunk-TOKVRWXL.mjs.map → chunk-RKPP7ZOK.mjs.map} +1 -1
- package/dist/{chunk-3PRCMWLU.mjs → chunk-T26TYEWV.mjs} +37 -7
- package/dist/chunk-T26TYEWV.mjs.map +1 -0
- package/dist/combobox/index.js +1 -0
- package/dist/combobox/index.js.map +1 -1
- package/dist/combobox/index.mjs +2 -2
- package/dist/dialog/index.js +36 -5
- package/dist/dialog/index.js.map +1 -1
- package/dist/dialog/index.mjs +2 -2
- package/dist/divider/index.js +1 -0
- package/dist/divider/index.js.map +1 -1
- package/dist/divider/index.mjs +1 -0
- package/dist/divider/index.mjs.map +1 -1
- package/dist/drawer/index.js +36 -6
- package/dist/drawer/index.js.map +1 -1
- package/dist/drawer/index.mjs +36 -7
- package/dist/drawer/index.mjs.map +1 -1
- package/dist/dropdown/index.js +1 -0
- package/dist/dropdown/index.js.map +1 -1
- package/dist/dropdown/index.mjs +2 -2
- package/dist/icon-button/index.js +1 -0
- package/dist/icon-button/index.js.map +1 -1
- package/dist/icon-button/index.mjs +1 -1
- package/dist/input/index.js +5 -0
- package/dist/input/index.js.map +1 -1
- package/dist/input/index.mjs +1 -1
- package/dist/kbd/index.js +1 -0
- package/dist/kbd/index.js.map +1 -1
- package/dist/kbd/index.mjs +1 -0
- package/dist/kbd/index.mjs.map +1 -1
- package/dist/pagination/index.js +1 -0
- package/dist/pagination/index.js.map +1 -1
- package/dist/pagination/index.mjs +1 -1
- package/dist/popover/index.js +1 -0
- package/dist/popover/index.js.map +1 -1
- package/dist/popover/index.mjs +2 -2
- package/dist/progress/index.js +23 -2
- package/dist/progress/index.js.map +1 -1
- package/dist/progress/index.mjs +23 -2
- package/dist/progress/index.mjs.map +1 -1
- package/dist/progress-tracker/index.js +1 -0
- package/dist/progress-tracker/index.js.map +1 -1
- package/dist/progress-tracker/index.mjs +1 -0
- package/dist/progress-tracker/index.mjs.map +1 -1
- package/dist/radio-group/index.js +9 -1
- package/dist/radio-group/index.js.map +1 -1
- package/dist/radio-group/index.mjs +9 -1
- package/dist/radio-group/index.mjs.map +1 -1
- package/dist/rating/index.js +1 -0
- package/dist/rating/index.js.map +1 -1
- package/dist/rating/index.mjs +1 -0
- package/dist/rating/index.mjs.map +1 -1
- package/dist/scrolling-list/index.js +14 -1
- package/dist/scrolling-list/index.js.map +1 -1
- package/dist/scrolling-list/index.mjs +14 -2
- package/dist/scrolling-list/index.mjs.map +1 -1
- package/dist/slider/index.js +12 -1
- package/dist/slider/index.js.map +1 -1
- package/dist/slider/index.mjs +12 -1
- package/dist/slider/index.mjs.map +1 -1
- package/dist/snackbar/index.js +4 -0
- package/dist/snackbar/index.js.map +1 -1
- package/dist/snackbar/index.mjs +4 -1
- package/dist/snackbar/index.mjs.map +1 -1
- package/dist/stepper/index.js +8 -2
- package/dist/stepper/index.js.map +1 -1
- package/dist/stepper/index.mjs +4 -4
- package/dist/stepper/index.mjs.map +1 -1
- package/dist/switch/index.js +9 -1
- package/dist/switch/index.js.map +1 -1
- package/dist/switch/index.mjs +9 -1
- package/dist/switch/index.mjs.map +1 -1
- package/dist/tabs/index.js +3 -0
- package/dist/tabs/index.js.map +1 -1
- package/dist/tabs/index.mjs +3 -0
- package/dist/tabs/index.mjs.map +1 -1
- package/dist/text-link/index.js +1 -0
- package/dist/text-link/index.js.map +1 -1
- package/dist/text-link/index.mjs +1 -1
- package/dist/textarea/index.js +5 -0
- package/dist/textarea/index.js.map +1 -1
- package/dist/textarea/index.mjs +1 -1
- package/package.json +5 -5
- package/dist/chunk-3PRCMWLU.mjs.map +0 -1
- package/dist/chunk-73YYIDSP.mjs.map +0 -1
- /package/dist/{chunk-O42QOEJ6.mjs.map → chunk-ESSJY557.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/carousel/Carousel.tsx","../../src/carousel/useCarousel.ts","../../src/carousel/useEvent.ts","../../src/carousel/useIsMounted.ts","../../src/carousel/useScrollEnd.ts","../../src/carousel/useSnapPoints.ts","../../src/carousel/useResizeObserver.ts","../../src/carousel/utils.ts","../../src/carousel/CarouselControls.tsx","../../src/carousel/CarouselNextButton.tsx","../../src/carousel/CarouselPageIndicator.tsx","../../src/carousel/CarouselPagePicker.tsx","../../src/carousel/CarouselPrevButton.tsx","../../src/carousel/CarouselSlide.tsx","../../src/carousel/useIsVisible.ts","../../src/carousel/CarouselSlides.tsx","../../src/carousel/CarouselViewport.tsx","../../src/carousel/index.ts"],"sourcesContent":["import { cx } from 'class-variance-authority'\nimport { createContext, ReactNode, useContext } from 'react'\n\nimport { CarouselAPI, UseCarouselProps } from './types'\nimport { useCarousel } from './useCarousel'\n\ninterface Props extends UseCarouselProps {\n children?: ReactNode\n className?: string\n}\n\nconst CarouselContext = createContext<CarouselAPI | null>(null)\n\nexport const Carousel = ({\n className,\n snapType = 'mandatory',\n snapStop = 'always',\n scrollBehavior = 'smooth',\n slidesPerMove = 'auto',\n slidesPerPage = 1,\n loop = false,\n children,\n gap = 16,\n defaultPage,\n page,\n onPageChange,\n}: Props) => {\n const carouselApi = useCarousel({\n defaultPage,\n slidesPerPage,\n slidesPerMove,\n loop,\n gap,\n scrollBehavior,\n snapStop,\n snapType,\n page,\n onPageChange,\n })\n\n return (\n <CarouselContext.Provider\n value={{\n ...carouselApi,\n scrollBehavior,\n }}\n >\n <div\n className={cx('gap-lg relative box-border flex flex-col', className)}\n {...carouselApi.getRootProps()}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nCarousel.displayName = 'Carousel'\n\nexport const useCarouselContext = () => {\n const context = useContext(CarouselContext)\n\n if (!context) {\n throw Error('useCarouselContext must be used within a Carousel provider')\n }\n\n return context\n}\n","/* eslint-disable max-lines-per-function */\nimport {\n KeyboardEvent,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\n\nimport {\n CarouselAPI,\n ComputedControlProps,\n ComputedIndicatorGroupProps,\n ComputedIndicatorProps,\n ComputedRootProps,\n ComputedSlideGroupProps,\n ComputedSlideProps,\n ComputedTriggerProps,\n UseCarouselProps,\n} from './types'\nimport { useEvent } from './useEvent'\nimport { useIsMounted } from './useIsMounted'\nimport { useScrollEnd } from './useScrollEnd'\nimport { useSnapPoints } from './useSnapPoints'\nimport { getSnapPositions, isSnapPoint } from './utils'\n\nconst DATA_SCOPE = 'carousel' as const\nconst DIRECTION = 'ltr' as const\n\nexport const useCarousel = ({\n defaultPage,\n gap = 16,\n snapType = 'mandatory',\n snapStop = 'always',\n scrollPadding = 0,\n slidesPerPage = 1,\n slidesPerMove = 'auto',\n scrollBehavior = 'smooth',\n loop = false,\n // state control\n page: controlledPage,\n onPageChange: onPageChangeProp,\n}: UseCarouselProps): CarouselAPI => {\n const carouselId = useId()\n const [pageState, setPageState] = useState(defaultPage || controlledPage || 0)\n\n const carouselRef = useRef<HTMLDivElement>(null)\n const pageIndicatorsRefs = useRef<(HTMLElement | null)[]>([])\n const isMountedRef = useIsMounted()\n const isMounted = isMountedRef.current\n const onPageChange = useEvent(onPageChangeProp)\n\n const [pageSnapPoints] = useSnapPoints([], {\n carouselRef,\n slidesPerMove,\n slidesPerPage,\n })\n\n const canScrollPrev = useRef(loop || pageState > 0)\n const canScrollNext = useRef(loop || pageState < pageSnapPoints.length - 1)\n canScrollPrev.current = loop || pageState > 0\n canScrollNext.current = loop || pageState < pageSnapPoints.length - 1\n\n const handlePageChange = useCallback(\n (page: number) => {\n if (page !== pageState) {\n setPageState(page)\n onPageChange?.(page)\n }\n },\n [onPageChange, pageState]\n )\n\n const scrollTo = useCallback(\n (page: number, behavior: 'instant' | 'smooth') => {\n if (carouselRef.current) {\n carouselRef.current.scrollTo({\n left: pageSnapPoints[page],\n behavior: behavior === 'instant' ? 'auto' : 'smooth',\n })\n handlePageChange(page)\n }\n },\n [handlePageChange, pageSnapPoints]\n )\n\n const scrollPrev = useCallback(\n (cb?: (pageIndex: number) => void) => {\n if (canScrollPrev) {\n const targetPage =\n loop && pageState === 0 ? pageSnapPoints.length - 1 : Math.max(pageState - 1, 0)\n\n scrollTo(targetPage, scrollBehavior)\n cb?.(targetPage)\n }\n },\n [loop, pageSnapPoints, pageState, scrollBehavior, scrollTo]\n )\n\n const scrollNext = useCallback(\n (cb?: (pageIndex: number) => void) => {\n if (canScrollNext) {\n const targetPage =\n loop && pageState === pageSnapPoints.length - 1\n ? 0\n : Math.min(pageState + 1, pageSnapPoints.length - 1)\n\n scrollTo(targetPage, scrollBehavior)\n cb?.(targetPage)\n }\n },\n [loop, pageSnapPoints, pageState, scrollBehavior, scrollTo]\n )\n\n useEffect(() => {\n if (controlledPage != null) {\n scrollTo(controlledPage, scrollBehavior)\n }\n }, [controlledPage, scrollBehavior, scrollTo])\n\n /**\n * Set the default scroll position of the carousel based on `defaultPage`.\n * As this operation is done before the snap points are set in the state, we have to get them from the ref directly.\n */\n useLayoutEffect(() => {\n if (defaultPage != null && !isMounted && carouselRef.current) {\n const snapPositions = getSnapPositions({\n container: carouselRef.current,\n slidesPerMove,\n slidesPerPage,\n })\n\n carouselRef.current.scrollTo({\n left: snapPositions[defaultPage],\n behavior: 'instant',\n })\n }\n }, [defaultPage, isMounted, slidesPerMove, slidesPerPage])\n\n /**\n * Monitoring scrollend events inside the scrollable area to sync the carousel active page with current scroll position.\n * Scrollend has been chosen over \"scroll\" for performance reason.\n */\n const syncPageStateWithScrollPosition = useCallback(() => {\n if (!carouselRef.current || pageSnapPoints.length === 0) return\n\n const { scrollLeft } = carouselRef.current\n\n const distances = pageSnapPoints.map(pagePosition => Math.abs(scrollLeft - pagePosition))\n const pageInViewport = distances.indexOf(Math.min(...distances))\n\n if (pageInViewport !== -1) {\n handlePageChange(pageInViewport)\n }\n }, [pageSnapPoints, handlePageChange])\n\n useScrollEnd(carouselRef, syncPageStateWithScrollPosition)\n\n const contextValue: CarouselAPI = {\n ref: carouselRef,\n pageIndicatorsRefs,\n // props\n gap,\n snapType,\n snapStop,\n scrollPadding,\n slidesPerPage,\n slidesPerMove,\n scrollBehavior,\n loop,\n // computed state\n page: pageState,\n pageSnapPoints,\n canScrollNext: canScrollNext.current,\n canScrollPrev: canScrollPrev.current,\n scrollTo,\n scrollPrev,\n scrollNext,\n // anatomy\n getRootProps: (): ComputedRootProps => ({\n id: `carousel::${carouselId}:`,\n role: 'region',\n 'aria-roledescription': 'carousel',\n 'data-scope': DATA_SCOPE,\n 'data-part': 'root',\n 'data-orientation': 'horizontal',\n dir: DIRECTION,\n style: {\n '--slides-per-page': slidesPerPage,\n '--slide-spacing': `${gap}px`,\n '--slide-item-size':\n 'calc(100% / var(--slides-per-page) - var(--slide-spacing) * (var(--slides-per-page) - 1) / var(--slides-per-page))',\n },\n }),\n\n getControlProps: (): ComputedControlProps => ({\n 'data-scope': DATA_SCOPE,\n 'data-part': 'control',\n 'data-orientation': 'horizontal',\n }),\n\n getPrevTriggerProps: (): ComputedTriggerProps<'prev-trigger'> => ({\n id: `carousel::${carouselId}::prev-trigger`,\n 'aria-controls': `carousel::${carouselId}::item-group`,\n 'data-scope': DATA_SCOPE,\n 'data-part': 'prev-trigger',\n 'data-orientation': 'horizontal',\n type: 'button',\n dir: DIRECTION,\n disabled: !canScrollPrev.current,\n onClick: () => scrollPrev(),\n }),\n\n getNextTriggerProps: (): ComputedTriggerProps<'next-trigger'> => ({\n id: `carousel::${carouselId}::next-trigger`,\n 'aria-controls': `carousel::${carouselId}::item-group`,\n 'data-scope': DATA_SCOPE,\n 'data-part': 'next-trigger',\n 'data-orientation': 'horizontal',\n type: 'button',\n dir: DIRECTION,\n disabled: !canScrollNext.current,\n onClick: () => scrollNext(),\n }),\n\n getSlidesContainerProps: (): ComputedSlideGroupProps => ({\n id: `carousel::${carouselId}::item-group`,\n /**\n * The carousel pattern was originally designed for a single slide.\n * When there is more than one slide, the aria-live region is set to off to avoid announcing the whole list of slides.\n * This is not ideal but we keep it for backwards compatibility.\n *\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/carousel/#wai-aria-attributes\n */\n 'aria-live': slidesPerPage > 1 ? 'off' : 'polite',\n 'data-scope': DATA_SCOPE,\n 'data-part': 'item-group',\n 'data-orientation': 'horizontal',\n dir: DIRECTION,\n tabIndex: 0,\n style: {\n display: 'grid',\n gap: 'var(--slide-spacing)',\n scrollSnapType: `x ${snapType}`,\n gridAutoFlow: 'column',\n scrollbarWidth: 'none',\n overscrollBehavior: 'contain',\n gridAutoColumns: 'var(--slide-item-size)',\n overflowX: 'auto',\n },\n ref: carouselRef,\n }),\n\n getSlideProps: ({ index }): ComputedSlideProps => {\n const isStopPoint = isSnapPoint(index, {\n container: carouselRef.current,\n slidesPerMove,\n slidesPerPage,\n })\n\n return {\n id: `carousel::${carouselId}::item:${index}`,\n role: 'group',\n 'aria-roledescription': 'slide',\n 'data-scope': DATA_SCOPE,\n 'data-part': 'item',\n 'data-index': index,\n 'data-orientation': 'horizontal',\n dir: DIRECTION,\n style: {\n ...(isStopPoint && {\n scrollSnapAlign: 'start',\n scrollSnapStop: snapStop,\n }),\n },\n }\n },\n\n getIndicatorGroupProps: (): ComputedIndicatorGroupProps => ({\n role: 'radiogroup',\n id: `carousel::${carouselId}::indicator-group`,\n 'data-scope': DATA_SCOPE,\n 'data-part': 'indicator-group',\n 'data-orientation': 'horizontal',\n dir: DIRECTION,\n }),\n\n getIndicatorProps: ({ index }): ComputedIndicatorProps => {\n const isActivePage = index === pageState\n\n return {\n role: 'radio',\n id: `carousel::${carouselId}::indicator:${index}`,\n 'aria-checked': isActivePage,\n 'data-scope': DATA_SCOPE,\n 'data-part': 'indicator',\n 'data-orientation': 'horizontal',\n 'data-index': index,\n 'data-state': isActivePage ? 'active' : 'inactive',\n tabIndex: isActivePage ? 0 : -1,\n onClick: () => {\n scrollTo(index, scrollBehavior)\n },\n onKeyDown: (event: KeyboardEvent) => {\n const focusActiveIndicator = (page: number) => {\n pageIndicatorsRefs.current[page]?.focus()\n }\n\n if (event.key === 'ArrowRight' && canScrollNext) {\n scrollNext(focusActiveIndicator)\n } else if (event.key === 'ArrowLeft' && canScrollPrev) {\n scrollPrev(focusActiveIndicator)\n }\n },\n }\n },\n }\n\n return contextValue\n}\n","import { useCallback, useLayoutEffect, useRef } from 'react'\n\ntype AnyFunction = (...args: any[]) => any\n\n/**\n * Directly from this gist: https://gist.github.com/diegohaz/695097a06f038a707c3a1b11e4e40195\n * Until React releases a native `useEvent` hook.\n */\nexport function useEvent<T extends AnyFunction>(callback?: T) {\n const ref = useRef<AnyFunction | undefined>(() => {\n throw new Error('Cannot call an event handler while rendering.')\n })\n\n useLayoutEffect(() => {\n ref.current = callback\n })\n\n return useCallback<AnyFunction>((...args) => ref.current?.(...args), []) as T\n}\n","import { useEffect, useRef } from 'react'\n\nexport const useIsMounted = () => {\n const isMounted = useRef(false)\n\n useEffect(() => {\n isMounted.current = true\n\n return () => {\n isMounted.current = false\n }\n }, [])\n\n return isMounted\n}\n","import { useEffect, useRef, RefObject } from 'react'\n\nexport function useScrollEnd(scrollRef: RefObject<HTMLDivElement | null>, callback: () => void) {\n const scrollLeft = useRef(0)\n\n /**\n * Safari (and some smaller browsers) to not yet support the `scrollend` event.\n * For those we must rely on the `scroll` event and and an idle state delay to trigger the \"scroll end\".\n *\n * Caveats:\n * - when using a trackpad or your fingers on a touch device, scrolling then holding the position might trigger the \"scrollend\" callback too early.\n */\n const safariTimeout = useRef<NodeJS.Timeout | null>(null)\n\n useEffect(() => {\n const element = scrollRef.current\n if (!element) return\n\n const supportsScrollend = 'onscrollend' in window\n\n const handleScrollEnd = () => {\n callback()\n }\n\n const handleSafariScroll = () => {\n if (safariTimeout.current) {\n clearTimeout(safariTimeout.current)\n }\n\n if (scrollRef.current) {\n scrollLeft.current = scrollRef.current.scrollLeft\n\n safariTimeout.current = setTimeout(() => {\n if (scrollRef.current) {\n handleScrollEnd()\n }\n }, 150)\n }\n }\n\n if (supportsScrollend) {\n element.addEventListener('scrollend', handleScrollEnd)\n } else {\n element.addEventListener('scroll', handleSafariScroll)\n }\n\n return () => {\n if (safariTimeout.current) {\n clearTimeout(safariTimeout.current)\n }\n\n if (supportsScrollend) {\n element.removeEventListener('scrollend', handleScrollEnd)\n } else {\n element.removeEventListener('scroll', handleSafariScroll)\n }\n }\n }, [callback, scrollRef])\n}\n\nexport default useScrollEnd\n","import { useMemo, useState, RefObject } from 'react'\n\nimport { useResizeObserver } from './useResizeObserver'\nimport { getSnapPositions } from './utils'\n\n/**\n * Get the scroll value of each slides that serves as the start of a page\n * The array is updated when resize event are caught in the carousel.\n */\nexport function useSnapPoints<T extends HTMLDivElement | null>(\n initialSnapPoints: number[] = [],\n {\n carouselRef,\n slidesPerMove,\n slidesPerPage,\n }: {\n carouselRef: RefObject<T>\n slidesPerMove: 'auto' | number\n slidesPerPage: number\n }\n) {\n const [pageSnapPoints, setPageSnapPoints] = useState(initialSnapPoints)\n\n const stableSnapPoints = useMemo(() => pageSnapPoints, [pageSnapPoints])\n\n /**\n * On resize, dimensions of the carousel might changes, which requires to update the snap points positions in the state.\n */\n useResizeObserver(carouselRef, () => {\n const newSnapPoints = getSnapPositions({\n slidesPerMove,\n slidesPerPage,\n container: carouselRef.current,\n })\n\n if (JSON.stringify(pageSnapPoints) !== JSON.stringify(newSnapPoints)) {\n setPageSnapPoints(newSnapPoints)\n }\n })\n\n return [stableSnapPoints, setPageSnapPoints] as const\n}\n","import { useLayoutEffect, RefObject } from 'react'\n\nexport function useResizeObserver<T extends HTMLElement | null>(\n ref: RefObject<T>,\n callback: (width: number) => void\n) {\n useLayoutEffect(() => {\n const element = ref.current\n if (!element) return\n\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n callback(entry.contentRect.width)\n }\n })\n\n observer.observe(element)\n\n return () => observer.disconnect() // Cleanup on unmount\n }, [ref, callback])\n}\n","/**\n * Get the indices of each slides that serves as the start of a page\n * @returns number[] (ex: [0, 2, 4])\n */\nfunction getSnapIndices({\n totalSlides,\n slidesPerMove,\n slidesPerPage,\n}: {\n totalSlides: number\n slidesPerMove: number | 'auto'\n slidesPerPage: number\n}) {\n const slideBy = slidesPerMove === 'auto' ? slidesPerPage : slidesPerMove\n const snapPoints: number[] = []\n\n const lastSnapIndex = Math.floor((totalSlides - slidesPerPage) / slideBy) * slideBy\n\n for (let i = 0; i <= lastSnapIndex; i += slideBy) {\n snapPoints.push(i)\n }\n\n // Adding final snap point if necessary\n if (snapPoints[snapPoints.length - 1] !== totalSlides - slidesPerPage) {\n snapPoints.push(totalSlides - slidesPerPage)\n }\n\n return snapPoints\n}\n\nexport function getSlideElements(container: HTMLDivElement | null): Element[] {\n return container ? Array.from(container.querySelectorAll('[data-part=\"item\"]')) : []\n}\n\nexport function isSnapPoint(\n slideIndex: number,\n {\n container,\n slidesPerMove,\n slidesPerPage,\n }: {\n container: HTMLDivElement | null\n slidesPerMove: number | 'auto'\n slidesPerPage: number\n }\n) {\n return getSnapIndices({\n totalSlides: getSlideElements(container).length,\n slidesPerPage,\n slidesPerMove,\n }).includes(slideIndex)\n}\n\n/**\n * Get the scroll value of each slides that serves as the start of a page\n * @returns number[] (ex for a 400px carousel with no gap: [400, 800, 1200])\n */\nexport function getSnapPositions({\n container,\n slidesPerMove,\n slidesPerPage,\n}: {\n container: HTMLDivElement | null\n slidesPerMove: number | 'auto'\n slidesPerPage: number\n}) {\n if (!container) return []\n\n return getSlideElements(container)\n .filter((_, index) => {\n return isSnapPoint(index, {\n slidesPerMove,\n slidesPerPage,\n container,\n })\n })\n .map(slide => (slide as HTMLElement).offsetLeft)\n}\n","import { cx } from 'class-variance-authority'\nimport { HTMLAttributes, ReactNode } from 'react'\n\nimport { useCarouselContext } from './Carousel'\n\ninterface ControlsProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\nexport const CarouselControls = ({ children, className, ...props }: ControlsProps) => {\n const ctx = useCarouselContext()\n\n return (\n <div\n className={cx(\n 'default:px-lg pointer-events-none absolute inset-0 flex flex-row items-center justify-between',\n className\n )}\n {...ctx.getControlProps()}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nCarouselControls.displayName = 'Carousel.Controls'\n","import { ArrowVerticalRight } from '@spark-ui/icons/ArrowVerticalRight'\n\nimport { Icon } from '../icon'\nimport { IconButton, IconButtonProps } from '../icon-button'\nimport { useCarouselContext } from './Carousel'\n\nexport const CarouselNextButton = ({\n 'aria-label': ariaLabel,\n ...buttonProps\n}: IconButtonProps) => {\n const ctx = useCarouselContext()\n\n return (\n <IconButton\n {...ctx.getNextTriggerProps()}\n intent=\"surface\"\n design=\"filled\"\n className=\"pointer-events-auto cursor-pointer shadow-sm disabled:invisible\"\n aria-label={ariaLabel}\n {...buttonProps}\n >\n <Icon>\n <ArrowVerticalRight />\n </Icon>\n </IconButton>\n )\n}\n\nCarouselNextButton.displayName = 'Carousel.NextButton'\n","import { cx } from 'class-variance-authority'\nimport { ReactNode, useEffect, useRef } from 'react'\n\nimport { useCarouselContext } from './Carousel'\n\ninterface Props {\n children?: ReactNode\n 'aria-label': string\n index: number\n className?: string\n unstyled?: boolean\n}\n\nexport const CarouselPageIndicator = ({\n children,\n unstyled = false,\n index,\n 'aria-label': ariaLabel,\n className,\n}: Props) => {\n const ctx = useCarouselContext()\n\n const ref = useRef<HTMLButtonElement | null>(null)\n\n useEffect(() => {\n if (ctx.pageIndicatorsRefs.current) {\n ctx.pageIndicatorsRefs.current[index] = ref.current\n }\n })\n\n const styles = cx(\n 'group h-sz-16 relative flex',\n 'hover:cursor-pointer',\n 'w-sz-16 data-[state=active]:w-sz-44'\n )\n\n const dotsStyles = cx(\n 'before:rounded-sm before:block before:size-md',\n 'before:absolute before:left-1/2 before:top-1/2 before:-translate-x-1/2 before:-translate-y-1/2',\n 'data-[state=active]:before:w-sz-32 data-[state=active]:before:bg-basic',\n 'data-[state=inactive]:before:bg-on-surface/dim-3'\n )\n\n return (\n <button\n ref={ref}\n key={index}\n {...ctx.getIndicatorProps({ index })}\n aria-label={ariaLabel}\n className={cx(\n {\n [styles]: !unstyled,\n [dotsStyles]: !unstyled,\n },\n className\n )}\n >\n {children}\n </button>\n )\n}\n\nCarouselPageIndicator.displayName = 'Carousel.PageIndicator'\n","import { cx } from 'class-variance-authority'\nimport { ReactNode } from 'react'\n\nimport { useCarouselContext } from './Carousel'\nimport { CarouselAPI } from './types'\n\ninterface RenderProps extends CarouselAPI {\n pages: number[]\n}\n\ninterface Props {\n children: (renderProps: RenderProps) => ReactNode\n className?: string\n}\n\nexport const CarouselPagePicker = ({ children, className }: Props) => {\n const ctx = useCarouselContext()\n\n return (\n <>\n <div\n {...ctx.getIndicatorGroupProps()}\n className={cx(\n 'default:min-h-sz-16 flex w-full flex-wrap items-center justify-center',\n className\n )}\n >\n {ctx.pageSnapPoints.length <= 1\n ? null\n : children({\n ...ctx,\n pages: Array.from({ length: ctx.pageSnapPoints.length }, (_, i) => i),\n })}\n </div>\n </>\n )\n}\n\nCarouselPagePicker.displayName = 'Carousel.PagePicker'\n","import { ArrowVerticalLeft } from '@spark-ui/icons/ArrowVerticalLeft'\n\nimport { Icon } from '../icon'\nimport { IconButton, IconButtonProps } from '../icon-button'\nimport { useCarouselContext } from './Carousel'\n\nexport const CarouselPrevButton = ({\n 'aria-label': ariaLabel,\n ...buttonProps\n}: IconButtonProps) => {\n const ctx = useCarouselContext()\n\n return (\n <IconButton\n {...ctx.getPrevTriggerProps()}\n intent=\"surface\"\n design=\"filled\"\n className=\"pointer-events-auto cursor-pointer shadow-sm disabled:invisible\"\n aria-label={ariaLabel}\n {...buttonProps}\n >\n <Icon>\n <ArrowVerticalLeft />\n </Icon>\n </IconButton>\n )\n}\n\nCarouselPrevButton.displayName = 'Carousel.PrevButton'\n","import { cx } from 'class-variance-authority'\nimport { ComponentProps, ReactNode, useRef } from 'react'\n\nimport { useCarouselContext } from './Carousel'\nimport { useIsVisible } from './useIsVisible'\n\nexport interface CarouselSlideProps extends ComponentProps<'div'> {\n isSnapPoint?: boolean\n children?: ReactNode\n index?: number\n totalSlides?: number\n className?: string\n}\n\nexport const CarouselSlide = ({\n children,\n index = 0,\n totalSlides,\n className = '',\n ...props\n}: CarouselSlideProps) => {\n const itemRef = useRef<HTMLDivElement>(null)\n const ctx = useCarouselContext()\n\n const isVisible = useIsVisible(itemRef, ctx.ref)\n\n return (\n <div\n ref={itemRef}\n {...ctx.getSlideProps({ index, totalSlides: totalSlides as number })}\n className={cx('default:bg-surface relative overflow-hidden', className)}\n aria-hidden={!isVisible}\n inert={!isVisible}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nCarouselSlide.displayName = 'Carousel.Slide'\n","import { useLayoutEffect, useState, RefObject } from 'react'\n\nexport function useIsVisible(\n elementRef: RefObject<HTMLElement | null>,\n parentRef: RefObject<HTMLElement | null>\n) {\n const [isVisible, setIsVisible] = useState(true)\n\n useLayoutEffect(() => {\n const el = elementRef.current\n const parent = parentRef.current\n\n if (!parent || !el) return\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry) {\n setIsVisible(entry.isIntersecting)\n }\n },\n { root: parent, threshold: 0.2 }\n )\n\n observer.observe(el)\n\n return () => observer.disconnect()\n })\n\n return isVisible\n}\n","import { cx } from 'class-variance-authority'\nimport { Children, cloneElement, ComponentProps, isValidElement, ReactNode } from 'react'\n\nimport { useCarouselContext } from './Carousel'\nimport { CarouselSlideProps } from './CarouselSlide'\n\ninterface Props extends ComponentProps<'div'> {\n children?: ReactNode\n className?: string\n}\n\nexport const CarouselSlides = ({ children, className = '' }: Props) => {\n const ctx = useCarouselContext()\n\n const childrenElements = Children.toArray(children)\n\n return (\n <div\n {...ctx.getSlidesContainerProps()}\n className={cx(\n 'focus-visible:u-outline relative w-full',\n '[-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden',\n className\n )}\n >\n {childrenElements.map((child, index) =>\n isValidElement<CarouselSlideProps>(child)\n ? cloneElement(child, {\n index,\n totalSlides: childrenElements.length,\n })\n : child\n )}\n </div>\n )\n}\n\nCarouselSlides.displayName = 'Carousel.Slides'\n","import { ReactNode } from 'react'\n\ninterface Props {\n children: ReactNode\n}\n\nexport const CarouselViewport = ({ children }: Props) => {\n return <div className=\"relative flex items-center justify-around p-0\">{children}</div>\n}\n\nCarouselViewport.displayName = 'Carousel.Viewport'\n","import { Carousel as Root } from './Carousel'\nimport { CarouselControls as Controls } from './CarouselControls'\nimport { CarouselNextButton as NextButton } from './CarouselNextButton'\nimport { CarouselPageIndicator as PageIndicator } from './CarouselPageIndicator'\nimport { CarouselPagePicker as PagePicker } from './CarouselPagePicker'\nimport { CarouselPrevButton as PrevButton } from './CarouselPrevButton'\nimport { CarouselSlide as Slide } from './CarouselSlide'\nimport { CarouselSlides as Slides } from './CarouselSlides'\nimport { CarouselViewport as Viewport } from './CarouselViewport'\n\nexport const Carousel: typeof Root & {\n Controls: typeof Controls\n NextButton: typeof NextButton\n PrevButton: typeof PrevButton\n Slide: typeof Slide\n Slides: typeof Slides\n Viewport: typeof Viewport\n PagePicker: typeof PagePicker\n PageIndicator: typeof PageIndicator\n} = Object.assign(Root, {\n Controls,\n NextButton,\n PrevButton,\n Slide,\n Slides,\n Viewport,\n PagePicker,\n PageIndicator,\n})\n\nCarousel.displayName = 'Carousel'\n"],"mappings":"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","names":["useCallback","useEffect","useLayoutEffect","useRef","useState","useRef","useEffect","useRef","useLayoutEffect","useState","useRef","useCallback","useEffect","useLayoutEffect","cx","jsx","cx","jsx","cx","useEffect","useRef","jsx","useRef","useEffect","cx","cx","jsx","cx","jsx","cx","useRef","useLayoutEffect","useState","jsx","useRef","cx","cx","jsx","cx","jsx","Carousel"]}
|
|
1
|
+
{"version":3,"sources":["../../src/carousel/Carousel.tsx","../../src/carousel/useCarousel.ts","../../src/carousel/useEvent.ts","../../src/carousel/useIsMounted.ts","../../src/carousel/useScrollEnd.ts","../../src/carousel/useSnapPoints.ts","../../src/carousel/useResizeObserver.ts","../../src/carousel/utils.ts","../../src/carousel/CarouselControls.tsx","../../src/carousel/CarouselNextButton.tsx","../../src/carousel/CarouselPageIndicator.tsx","../../src/carousel/CarouselPagePicker.tsx","../../src/carousel/CarouselPrevButton.tsx","../../src/carousel/CarouselSlide.tsx","../../src/carousel/useIsVisible.ts","../../src/carousel/CarouselSlides.tsx","../../src/carousel/CarouselViewport.tsx","../../src/carousel/index.ts"],"sourcesContent":["import { cx } from 'class-variance-authority'\nimport { createContext, ReactNode, useContext } from 'react'\n\nimport { CarouselAPI, UseCarouselProps } from './types'\nimport { useCarousel } from './useCarousel'\n\ninterface Props extends UseCarouselProps {\n children?: ReactNode\n className?: string\n}\n\nconst CarouselContext = createContext<CarouselAPI | null>(null)\n\nexport const Carousel = ({\n className,\n snapType = 'mandatory',\n snapStop = 'always',\n scrollBehavior = 'smooth',\n slidesPerMove = 'auto',\n slidesPerPage = 1,\n loop = false,\n children,\n gap = 16,\n defaultPage,\n page,\n onPageChange,\n}: Props) => {\n const carouselApi = useCarousel({\n defaultPage,\n slidesPerPage,\n slidesPerMove,\n loop,\n gap,\n scrollBehavior,\n snapStop,\n snapType,\n page,\n onPageChange,\n })\n\n return (\n <CarouselContext.Provider\n value={{\n ...carouselApi,\n scrollBehavior,\n }}\n >\n <div\n data-spark-component=\"carousel\"\n className={cx('gap-lg relative box-border flex flex-col', className)}\n {...carouselApi.getRootProps()}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nCarousel.displayName = 'Carousel'\n\nexport const useCarouselContext = () => {\n const context = useContext(CarouselContext)\n\n if (!context) {\n throw Error('useCarouselContext must be used within a Carousel provider')\n }\n\n return context\n}\n","/* eslint-disable max-lines-per-function */\nimport {\n KeyboardEvent,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\n\nimport {\n CarouselAPI,\n ComputedControlProps,\n ComputedIndicatorGroupProps,\n ComputedIndicatorProps,\n ComputedRootProps,\n ComputedSlideGroupProps,\n ComputedSlideProps,\n ComputedTriggerProps,\n UseCarouselProps,\n} from './types'\nimport { useEvent } from './useEvent'\nimport { useIsMounted } from './useIsMounted'\nimport { useScrollEnd } from './useScrollEnd'\nimport { useSnapPoints } from './useSnapPoints'\nimport { getSnapPositions, isSnapPoint } from './utils'\n\nconst DATA_SCOPE = 'carousel' as const\nconst DIRECTION = 'ltr' as const\n\nexport const useCarousel = ({\n defaultPage,\n gap = 16,\n snapType = 'mandatory',\n snapStop = 'always',\n scrollPadding = 0,\n slidesPerPage = 1,\n slidesPerMove = 'auto',\n scrollBehavior = 'smooth',\n loop = false,\n // state control\n page: controlledPage,\n onPageChange: onPageChangeProp,\n}: UseCarouselProps): CarouselAPI => {\n const carouselId = useId()\n const [pageState, setPageState] = useState(defaultPage || controlledPage || 0)\n\n const carouselRef = useRef<HTMLDivElement>(null)\n const pageIndicatorsRefs = useRef<(HTMLElement | null)[]>([])\n const isMountedRef = useIsMounted()\n const isMounted = isMountedRef.current\n const onPageChange = useEvent(onPageChangeProp)\n\n const [pageSnapPoints] = useSnapPoints([], {\n carouselRef,\n slidesPerMove,\n slidesPerPage,\n })\n\n const canScrollPrev = useRef(loop || pageState > 0)\n const canScrollNext = useRef(loop || pageState < pageSnapPoints.length - 1)\n canScrollPrev.current = loop || pageState > 0\n canScrollNext.current = loop || pageState < pageSnapPoints.length - 1\n\n const handlePageChange = useCallback(\n (page: number) => {\n if (page !== pageState) {\n setPageState(page)\n onPageChange?.(page)\n }\n },\n [onPageChange, pageState]\n )\n\n const scrollTo = useCallback(\n (page: number, behavior: 'instant' | 'smooth') => {\n if (carouselRef.current) {\n carouselRef.current.scrollTo({\n left: pageSnapPoints[page],\n behavior: behavior === 'instant' ? 'auto' : 'smooth',\n })\n handlePageChange(page)\n }\n },\n [handlePageChange, pageSnapPoints]\n )\n\n const scrollPrev = useCallback(\n (cb?: (pageIndex: number) => void) => {\n if (canScrollPrev) {\n const targetPage =\n loop && pageState === 0 ? pageSnapPoints.length - 1 : Math.max(pageState - 1, 0)\n\n scrollTo(targetPage, scrollBehavior)\n cb?.(targetPage)\n }\n },\n [loop, pageSnapPoints, pageState, scrollBehavior, scrollTo]\n )\n\n const scrollNext = useCallback(\n (cb?: (pageIndex: number) => void) => {\n if (canScrollNext) {\n const targetPage =\n loop && pageState === pageSnapPoints.length - 1\n ? 0\n : Math.min(pageState + 1, pageSnapPoints.length - 1)\n\n scrollTo(targetPage, scrollBehavior)\n cb?.(targetPage)\n }\n },\n [loop, pageSnapPoints, pageState, scrollBehavior, scrollTo]\n )\n\n useEffect(() => {\n if (controlledPage != null) {\n scrollTo(controlledPage, scrollBehavior)\n }\n }, [controlledPage, scrollBehavior, scrollTo])\n\n /**\n * Set the default scroll position of the carousel based on `defaultPage`.\n * As this operation is done before the snap points are set in the state, we have to get them from the ref directly.\n */\n useLayoutEffect(() => {\n if (defaultPage != null && !isMounted && carouselRef.current) {\n const snapPositions = getSnapPositions({\n container: carouselRef.current,\n slidesPerMove,\n slidesPerPage,\n })\n\n carouselRef.current.scrollTo({\n left: snapPositions[defaultPage],\n behavior: 'instant',\n })\n }\n }, [defaultPage, isMounted, slidesPerMove, slidesPerPage])\n\n /**\n * Monitoring scrollend events inside the scrollable area to sync the carousel active page with current scroll position.\n * Scrollend has been chosen over \"scroll\" for performance reason.\n */\n const syncPageStateWithScrollPosition = useCallback(() => {\n if (!carouselRef.current || pageSnapPoints.length === 0) return\n\n const { scrollLeft } = carouselRef.current\n\n const distances = pageSnapPoints.map(pagePosition => Math.abs(scrollLeft - pagePosition))\n const pageInViewport = distances.indexOf(Math.min(...distances))\n\n if (pageInViewport !== -1) {\n handlePageChange(pageInViewport)\n }\n }, [pageSnapPoints, handlePageChange])\n\n useScrollEnd(carouselRef, syncPageStateWithScrollPosition)\n\n const contextValue: CarouselAPI = {\n ref: carouselRef,\n pageIndicatorsRefs,\n // props\n gap,\n snapType,\n snapStop,\n scrollPadding,\n slidesPerPage,\n slidesPerMove,\n scrollBehavior,\n loop,\n // computed state\n page: pageState,\n pageSnapPoints,\n canScrollNext: canScrollNext.current,\n canScrollPrev: canScrollPrev.current,\n scrollTo,\n scrollPrev,\n scrollNext,\n // anatomy\n getRootProps: (): ComputedRootProps => ({\n id: `carousel::${carouselId}:`,\n role: 'region',\n 'aria-roledescription': 'carousel',\n 'data-scope': DATA_SCOPE,\n 'data-part': 'root',\n 'data-orientation': 'horizontal',\n dir: DIRECTION,\n style: {\n '--slides-per-page': slidesPerPage,\n '--slide-spacing': `${gap}px`,\n '--slide-item-size':\n 'calc(100% / var(--slides-per-page) - var(--slide-spacing) * (var(--slides-per-page) - 1) / var(--slides-per-page))',\n },\n }),\n\n getControlProps: (): ComputedControlProps => ({\n 'data-scope': DATA_SCOPE,\n 'data-part': 'control',\n 'data-orientation': 'horizontal',\n }),\n\n getPrevTriggerProps: (): ComputedTriggerProps<'prev-trigger'> => ({\n id: `carousel::${carouselId}::prev-trigger`,\n 'aria-controls': `carousel::${carouselId}::item-group`,\n 'data-scope': DATA_SCOPE,\n 'data-part': 'prev-trigger',\n 'data-orientation': 'horizontal',\n type: 'button',\n dir: DIRECTION,\n disabled: !canScrollPrev.current,\n onClick: () => scrollPrev(),\n }),\n\n getNextTriggerProps: (): ComputedTriggerProps<'next-trigger'> => ({\n id: `carousel::${carouselId}::next-trigger`,\n 'aria-controls': `carousel::${carouselId}::item-group`,\n 'data-scope': DATA_SCOPE,\n 'data-part': 'next-trigger',\n 'data-orientation': 'horizontal',\n type: 'button',\n dir: DIRECTION,\n disabled: !canScrollNext.current,\n onClick: () => scrollNext(),\n }),\n\n getSlidesContainerProps: (): ComputedSlideGroupProps => ({\n id: `carousel::${carouselId}::item-group`,\n /**\n * The carousel pattern was originally designed for a single slide.\n * When there is more than one slide, the aria-live region is set to off to avoid announcing the whole list of slides.\n * This is not ideal but we keep it for backwards compatibility.\n *\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/carousel/#wai-aria-attributes\n */\n 'aria-live': slidesPerPage > 1 ? 'off' : 'polite',\n 'data-scope': DATA_SCOPE,\n 'data-part': 'item-group',\n 'data-orientation': 'horizontal',\n dir: DIRECTION,\n tabIndex: 0,\n style: {\n display: 'grid',\n gap: 'var(--slide-spacing)',\n scrollSnapType: `x ${snapType}`,\n gridAutoFlow: 'column',\n scrollbarWidth: 'none',\n overscrollBehavior: 'contain',\n gridAutoColumns: 'var(--slide-item-size)',\n overflowX: 'auto',\n },\n ref: carouselRef,\n }),\n\n getSlideProps: ({ index }): ComputedSlideProps => {\n const isStopPoint = isSnapPoint(index, {\n container: carouselRef.current,\n slidesPerMove,\n slidesPerPage,\n })\n\n return {\n id: `carousel::${carouselId}::item:${index}`,\n role: 'group',\n 'aria-roledescription': 'slide',\n 'data-scope': DATA_SCOPE,\n 'data-part': 'item',\n 'data-index': index,\n 'data-orientation': 'horizontal',\n dir: DIRECTION,\n style: {\n ...(isStopPoint && {\n scrollSnapAlign: 'start',\n scrollSnapStop: snapStop,\n }),\n },\n }\n },\n\n getIndicatorGroupProps: (): ComputedIndicatorGroupProps => ({\n role: 'radiogroup',\n id: `carousel::${carouselId}::indicator-group`,\n 'data-scope': DATA_SCOPE,\n 'data-part': 'indicator-group',\n 'data-orientation': 'horizontal',\n dir: DIRECTION,\n }),\n\n getIndicatorProps: ({ index }): ComputedIndicatorProps => {\n const isActivePage = index === pageState\n\n return {\n role: 'radio',\n id: `carousel::${carouselId}::indicator:${index}`,\n 'aria-checked': isActivePage,\n 'data-scope': DATA_SCOPE,\n 'data-part': 'indicator',\n 'data-orientation': 'horizontal',\n 'data-index': index,\n 'data-state': isActivePage ? 'active' : 'inactive',\n tabIndex: isActivePage ? 0 : -1,\n onClick: () => {\n scrollTo(index, scrollBehavior)\n },\n onKeyDown: (event: KeyboardEvent) => {\n const focusActiveIndicator = (page: number) => {\n pageIndicatorsRefs.current[page]?.focus()\n }\n\n if (event.key === 'ArrowRight' && canScrollNext) {\n scrollNext(focusActiveIndicator)\n } else if (event.key === 'ArrowLeft' && canScrollPrev) {\n scrollPrev(focusActiveIndicator)\n }\n },\n }\n },\n }\n\n return contextValue\n}\n","import { useCallback, useLayoutEffect, useRef } from 'react'\n\ntype AnyFunction = (...args: any[]) => any\n\n/**\n * Directly from this gist: https://gist.github.com/diegohaz/695097a06f038a707c3a1b11e4e40195\n * Until React releases a native `useEvent` hook.\n */\nexport function useEvent<T extends AnyFunction>(callback?: T) {\n const ref = useRef<AnyFunction | undefined>(() => {\n throw new Error('Cannot call an event handler while rendering.')\n })\n\n useLayoutEffect(() => {\n ref.current = callback\n })\n\n return useCallback<AnyFunction>((...args) => ref.current?.(...args), []) as T\n}\n","import { useEffect, useRef } from 'react'\n\nexport const useIsMounted = () => {\n const isMounted = useRef(false)\n\n useEffect(() => {\n isMounted.current = true\n\n return () => {\n isMounted.current = false\n }\n }, [])\n\n return isMounted\n}\n","import { useEffect, useRef, RefObject } from 'react'\n\nexport function useScrollEnd(scrollRef: RefObject<HTMLDivElement | null>, callback: () => void) {\n const scrollLeft = useRef(0)\n\n /**\n * Safari (and some smaller browsers) to not yet support the `scrollend` event.\n * For those we must rely on the `scroll` event and and an idle state delay to trigger the \"scroll end\".\n *\n * Caveats:\n * - when using a trackpad or your fingers on a touch device, scrolling then holding the position might trigger the \"scrollend\" callback too early.\n */\n const safariTimeout = useRef<NodeJS.Timeout | null>(null)\n\n useEffect(() => {\n const element = scrollRef.current\n if (!element) return\n\n const supportsScrollend = 'onscrollend' in window\n\n const handleScrollEnd = () => {\n callback()\n }\n\n const handleSafariScroll = () => {\n if (safariTimeout.current) {\n clearTimeout(safariTimeout.current)\n }\n\n if (scrollRef.current) {\n scrollLeft.current = scrollRef.current.scrollLeft\n\n safariTimeout.current = setTimeout(() => {\n if (scrollRef.current) {\n handleScrollEnd()\n }\n }, 150)\n }\n }\n\n if (supportsScrollend) {\n element.addEventListener('scrollend', handleScrollEnd)\n } else {\n element.addEventListener('scroll', handleSafariScroll)\n }\n\n return () => {\n if (safariTimeout.current) {\n clearTimeout(safariTimeout.current)\n }\n\n if (supportsScrollend) {\n element.removeEventListener('scrollend', handleScrollEnd)\n } else {\n element.removeEventListener('scroll', handleSafariScroll)\n }\n }\n }, [callback, scrollRef])\n}\n\nexport default useScrollEnd\n","import { useMemo, useState, RefObject } from 'react'\n\nimport { useResizeObserver } from './useResizeObserver'\nimport { getSnapPositions } from './utils'\n\n/**\n * Get the scroll value of each slides that serves as the start of a page\n * The array is updated when resize event are caught in the carousel.\n */\nexport function useSnapPoints<T extends HTMLDivElement | null>(\n initialSnapPoints: number[] = [],\n {\n carouselRef,\n slidesPerMove,\n slidesPerPage,\n }: {\n carouselRef: RefObject<T>\n slidesPerMove: 'auto' | number\n slidesPerPage: number\n }\n) {\n const [pageSnapPoints, setPageSnapPoints] = useState(initialSnapPoints)\n\n const stableSnapPoints = useMemo(() => pageSnapPoints, [pageSnapPoints])\n\n /**\n * On resize, dimensions of the carousel might changes, which requires to update the snap points positions in the state.\n */\n useResizeObserver(carouselRef, () => {\n const newSnapPoints = getSnapPositions({\n slidesPerMove,\n slidesPerPage,\n container: carouselRef.current,\n })\n\n if (JSON.stringify(pageSnapPoints) !== JSON.stringify(newSnapPoints)) {\n setPageSnapPoints(newSnapPoints)\n }\n })\n\n return [stableSnapPoints, setPageSnapPoints] as const\n}\n","import { useLayoutEffect, RefObject } from 'react'\n\nexport function useResizeObserver<T extends HTMLElement | null>(\n ref: RefObject<T>,\n callback: (width: number) => void\n) {\n useLayoutEffect(() => {\n const element = ref.current\n if (!element) return\n\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n callback(entry.contentRect.width)\n }\n })\n\n observer.observe(element)\n\n return () => observer.disconnect() // Cleanup on unmount\n }, [ref, callback])\n}\n","/**\n * Get the indices of each slides that serves as the start of a page\n * @returns number[] (ex: [0, 2, 4])\n */\nfunction getSnapIndices({\n totalSlides,\n slidesPerMove,\n slidesPerPage,\n}: {\n totalSlides: number\n slidesPerMove: number | 'auto'\n slidesPerPage: number\n}) {\n const slideBy = slidesPerMove === 'auto' ? slidesPerPage : slidesPerMove\n const snapPoints: number[] = []\n\n const lastSnapIndex = Math.floor((totalSlides - slidesPerPage) / slideBy) * slideBy\n\n for (let i = 0; i <= lastSnapIndex; i += slideBy) {\n snapPoints.push(i)\n }\n\n // Adding final snap point if necessary\n if (snapPoints[snapPoints.length - 1] !== totalSlides - slidesPerPage) {\n snapPoints.push(totalSlides - slidesPerPage)\n }\n\n return snapPoints\n}\n\nexport function getSlideElements(container: HTMLDivElement | null): Element[] {\n return container ? Array.from(container.querySelectorAll('[data-part=\"item\"]')) : []\n}\n\nexport function isSnapPoint(\n slideIndex: number,\n {\n container,\n slidesPerMove,\n slidesPerPage,\n }: {\n container: HTMLDivElement | null\n slidesPerMove: number | 'auto'\n slidesPerPage: number\n }\n) {\n return getSnapIndices({\n totalSlides: getSlideElements(container).length,\n slidesPerPage,\n slidesPerMove,\n }).includes(slideIndex)\n}\n\n/**\n * Get the scroll value of each slides that serves as the start of a page\n * @returns number[] (ex for a 400px carousel with no gap: [400, 800, 1200])\n */\nexport function getSnapPositions({\n container,\n slidesPerMove,\n slidesPerPage,\n}: {\n container: HTMLDivElement | null\n slidesPerMove: number | 'auto'\n slidesPerPage: number\n}) {\n if (!container) return []\n\n return getSlideElements(container)\n .filter((_, index) => {\n return isSnapPoint(index, {\n slidesPerMove,\n slidesPerPage,\n container,\n })\n })\n .map(slide => (slide as HTMLElement).offsetLeft)\n}\n","import { cx } from 'class-variance-authority'\nimport { HTMLAttributes, ReactNode } from 'react'\n\nimport { useCarouselContext } from './Carousel'\n\ninterface ControlsProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\nexport const CarouselControls = ({ children, className, ...props }: ControlsProps) => {\n const ctx = useCarouselContext()\n\n return (\n <div\n data-spark-component=\"carousel-controls\"\n className={cx(\n 'default:px-lg pointer-events-none absolute inset-0 flex flex-row items-center justify-between',\n className\n )}\n {...ctx.getControlProps()}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nCarouselControls.displayName = 'Carousel.Controls'\n","import { ArrowVerticalRight } from '@spark-ui/icons/ArrowVerticalRight'\n\nimport { Icon } from '../icon'\nimport { IconButton, IconButtonProps } from '../icon-button'\nimport { useCarouselContext } from './Carousel'\n\nexport const CarouselNextButton = ({\n 'aria-label': ariaLabel,\n ...buttonProps\n}: IconButtonProps) => {\n const ctx = useCarouselContext()\n\n return (\n <IconButton\n data-spark-component=\"carousel-next-button\"\n {...ctx.getNextTriggerProps()}\n intent=\"surface\"\n design=\"filled\"\n className=\"pointer-events-auto cursor-pointer shadow-sm disabled:invisible\"\n aria-label={ariaLabel}\n {...buttonProps}\n >\n <Icon>\n <ArrowVerticalRight />\n </Icon>\n </IconButton>\n )\n}\n\nCarouselNextButton.displayName = 'Carousel.NextButton'\n","import { cx } from 'class-variance-authority'\nimport { ReactNode, useEffect, useRef } from 'react'\n\nimport { useCarouselContext } from './Carousel'\n\ninterface Props {\n children?: ReactNode\n 'aria-label': string\n index: number\n className?: string\n unstyled?: boolean\n}\n\nexport const CarouselPageIndicator = ({\n children,\n unstyled = false,\n index,\n 'aria-label': ariaLabel,\n className,\n}: Props) => {\n const ctx = useCarouselContext()\n\n const ref = useRef<HTMLButtonElement | null>(null)\n\n useEffect(() => {\n if (ctx.pageIndicatorsRefs.current) {\n ctx.pageIndicatorsRefs.current[index] = ref.current\n }\n })\n\n const styles = cx(\n 'group h-sz-16 relative flex',\n 'hover:cursor-pointer',\n 'w-sz-16 data-[state=active]:w-sz-44'\n )\n\n const dotsStyles = cx(\n 'before:rounded-sm before:block before:size-md',\n 'before:absolute before:left-1/2 before:top-1/2 before:-translate-x-1/2 before:-translate-y-1/2',\n 'data-[state=active]:before:w-sz-32 data-[state=active]:before:bg-basic',\n 'data-[state=inactive]:before:bg-on-surface/dim-3'\n )\n\n return (\n <button\n data-spark-component=\"carousel-page-indicator\"\n ref={ref}\n key={index}\n {...ctx.getIndicatorProps({ index })}\n aria-label={ariaLabel}\n className={cx(\n {\n [styles]: !unstyled,\n [dotsStyles]: !unstyled,\n },\n className\n )}\n >\n {children}\n </button>\n )\n}\n\nCarouselPageIndicator.displayName = 'Carousel.PageIndicator'\n","import { cx } from 'class-variance-authority'\nimport { ReactNode } from 'react'\n\nimport { useCarouselContext } from './Carousel'\nimport { CarouselAPI } from './types'\n\ninterface RenderProps extends CarouselAPI {\n pages: number[]\n}\n\ninterface Props {\n children: (renderProps: RenderProps) => ReactNode\n className?: string\n}\n\nexport const CarouselPagePicker = ({ children, className }: Props) => {\n const ctx = useCarouselContext()\n\n return (\n <>\n <div\n data-spark-component=\"carousel-page-picker\"\n {...ctx.getIndicatorGroupProps()}\n className={cx(\n 'default:min-h-sz-16 flex w-full flex-wrap items-center justify-center',\n className\n )}\n >\n {ctx.pageSnapPoints.length <= 1\n ? null\n : children({\n ...ctx,\n pages: Array.from({ length: ctx.pageSnapPoints.length }, (_, i) => i),\n })}\n </div>\n </>\n )\n}\n\nCarouselPagePicker.displayName = 'Carousel.PagePicker'\n","import { ArrowVerticalLeft } from '@spark-ui/icons/ArrowVerticalLeft'\n\nimport { Icon } from '../icon'\nimport { IconButton, IconButtonProps } from '../icon-button'\nimport { useCarouselContext } from './Carousel'\n\nexport const CarouselPrevButton = ({\n 'aria-label': ariaLabel,\n ...buttonProps\n}: IconButtonProps) => {\n const ctx = useCarouselContext()\n\n return (\n <IconButton\n data-spark-component=\"carousel-prev-button\"\n {...ctx.getPrevTriggerProps()}\n intent=\"surface\"\n design=\"filled\"\n className=\"pointer-events-auto cursor-pointer shadow-sm disabled:invisible\"\n aria-label={ariaLabel}\n {...buttonProps}\n >\n <Icon>\n <ArrowVerticalLeft />\n </Icon>\n </IconButton>\n )\n}\n\nCarouselPrevButton.displayName = 'Carousel.PrevButton'\n","import { cx } from 'class-variance-authority'\nimport { ComponentProps, ReactNode, useRef } from 'react'\n\nimport { useCarouselContext } from './Carousel'\nimport { useIsVisible } from './useIsVisible'\n\nexport interface CarouselSlideProps extends ComponentProps<'div'> {\n isSnapPoint?: boolean\n children?: ReactNode\n index?: number\n totalSlides?: number\n className?: string\n}\n\nexport const CarouselSlide = ({\n children,\n index = 0,\n totalSlides,\n className = '',\n ...props\n}: CarouselSlideProps) => {\n const itemRef = useRef<HTMLDivElement>(null)\n const ctx = useCarouselContext()\n\n const isVisible = useIsVisible(itemRef, ctx.ref)\n\n return (\n <div\n data-spark-component=\"carousel-slide\"\n ref={itemRef}\n {...ctx.getSlideProps({ index, totalSlides: totalSlides as number })}\n className={cx('default:bg-surface relative overflow-hidden', className)}\n aria-hidden={!isVisible}\n inert={!isVisible}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nCarouselSlide.displayName = 'Carousel.Slide'\n","import { useLayoutEffect, useState, RefObject } from 'react'\n\nexport function useIsVisible(\n elementRef: RefObject<HTMLElement | null>,\n parentRef: RefObject<HTMLElement | null>\n) {\n const [isVisible, setIsVisible] = useState(true)\n\n useLayoutEffect(() => {\n const el = elementRef.current\n const parent = parentRef.current\n\n if (!parent || !el) return\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry) {\n setIsVisible(entry.isIntersecting)\n }\n },\n { root: parent, threshold: 0.2 }\n )\n\n observer.observe(el)\n\n return () => observer.disconnect()\n })\n\n return isVisible\n}\n","import { cx } from 'class-variance-authority'\nimport { Children, cloneElement, ComponentProps, isValidElement, ReactNode } from 'react'\n\nimport { useCarouselContext } from './Carousel'\nimport { CarouselSlideProps } from './CarouselSlide'\n\ninterface Props extends ComponentProps<'div'> {\n children?: ReactNode\n className?: string\n}\n\nexport const CarouselSlides = ({ children, className = '' }: Props) => {\n const ctx = useCarouselContext()\n\n const childrenElements = Children.toArray(children)\n\n return (\n <div\n data-spark-component=\"carousel-slides\"\n {...ctx.getSlidesContainerProps()}\n className={cx(\n 'focus-visible:u-outline relative w-full',\n '[-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden',\n className\n )}\n >\n {childrenElements.map((child, index) =>\n isValidElement<CarouselSlideProps>(child)\n ? cloneElement(child, {\n index,\n totalSlides: childrenElements.length,\n })\n : child\n )}\n </div>\n )\n}\n\nCarouselSlides.displayName = 'Carousel.Slides'\n","import { ReactNode } from 'react'\n\ninterface Props {\n children: ReactNode\n}\n\nexport const CarouselViewport = ({ children }: Props) => {\n return <div className=\"relative flex items-center justify-around p-0\">{children}</div>\n}\n\nCarouselViewport.displayName = 'Carousel.Viewport'\n","import { Carousel as Root } from './Carousel'\nimport { CarouselControls as Controls } from './CarouselControls'\nimport { CarouselNextButton as NextButton } from './CarouselNextButton'\nimport { CarouselPageIndicator as PageIndicator } from './CarouselPageIndicator'\nimport { CarouselPagePicker as PagePicker } from './CarouselPagePicker'\nimport { CarouselPrevButton as PrevButton } from './CarouselPrevButton'\nimport { CarouselSlide as Slide } from './CarouselSlide'\nimport { CarouselSlides as Slides } from './CarouselSlides'\nimport { CarouselViewport as Viewport } from './CarouselViewport'\n\nexport const Carousel: typeof Root & {\n Controls: typeof Controls\n NextButton: typeof NextButton\n PrevButton: typeof PrevButton\n Slide: typeof Slide\n Slides: typeof Slides\n Viewport: typeof Viewport\n PagePicker: typeof PagePicker\n PageIndicator: typeof PageIndicator\n} = Object.assign(Root, {\n Controls,\n NextButton,\n PrevButton,\n Slide,\n Slides,\n Viewport,\n PagePicker,\n PageIndicator,\n})\n\nCarousel.displayName = 'Carousel'\n"],"mappings":"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","names":["useCallback","useEffect","useLayoutEffect","useRef","useState","useRef","useEffect","useRef","useLayoutEffect","useState","useRef","useCallback","useEffect","useLayoutEffect","cx","jsx","cx","jsx","cx","useEffect","useRef","jsx","useRef","useEffect","cx","cx","jsx","cx","jsx","cx","useRef","useLayoutEffect","useState","jsx","useRef","cx","cx","jsx","cx","jsx","Carousel"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
IconButton
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QNYSDG6F.mjs";
|
|
4
4
|
import {
|
|
5
5
|
Icon
|
|
6
6
|
} from "./chunk-UMUMFMFB.mjs";
|
|
@@ -305,4 +305,4 @@ Trigger.displayName = "Popover.Trigger";
|
|
|
305
305
|
export {
|
|
306
306
|
Popover2 as Popover
|
|
307
307
|
};
|
|
308
|
-
//# sourceMappingURL=chunk-
|
|
308
|
+
//# sourceMappingURL=chunk-ESSJY557.mjs.map
|
|
@@ -40,6 +40,7 @@ var Root = ({
|
|
|
40
40
|
"button",
|
|
41
41
|
{
|
|
42
42
|
ref,
|
|
43
|
+
"data-spark-component": "input-clear-button",
|
|
43
44
|
className: cx(
|
|
44
45
|
className,
|
|
45
46
|
"pointer-events-auto absolute",
|
|
@@ -198,6 +199,7 @@ var InputGroup = ({
|
|
|
198
199
|
return /* @__PURE__ */ jsx2(InputGroupContext.Provider, { value: current, children: /* @__PURE__ */ jsxs(
|
|
199
200
|
"div",
|
|
200
201
|
{
|
|
202
|
+
"data-spark-component": "input-group",
|
|
201
203
|
ref: forwardedRef,
|
|
202
204
|
className: inputGroupStyles({ disabled, readOnly, className }),
|
|
203
205
|
...others,
|
|
@@ -318,6 +320,7 @@ var InputAddon = ({
|
|
|
318
320
|
Component,
|
|
319
321
|
{
|
|
320
322
|
ref,
|
|
323
|
+
"data-spark-component": "input-addon",
|
|
321
324
|
className: inputAddonStyles({
|
|
322
325
|
className,
|
|
323
326
|
intent: state,
|
|
@@ -365,6 +368,7 @@ var InputIcon = ({ className, intent, children, ...others }) => {
|
|
|
365
368
|
return /* @__PURE__ */ jsx5(
|
|
366
369
|
Icon,
|
|
367
370
|
{
|
|
371
|
+
"data-spark-component": "input-icon",
|
|
368
372
|
intent,
|
|
369
373
|
className: cx3(
|
|
370
374
|
className,
|
|
@@ -560,6 +564,7 @@ var Root4 = ({
|
|
|
560
564
|
return /* @__PURE__ */ jsx9(
|
|
561
565
|
Component,
|
|
562
566
|
{
|
|
567
|
+
"data-spark-component": "input",
|
|
563
568
|
ref,
|
|
564
569
|
id,
|
|
565
570
|
name,
|
|
@@ -609,4 +614,4 @@ export {
|
|
|
609
614
|
Input,
|
|
610
615
|
InputGroup2 as InputGroup
|
|
611
616
|
};
|
|
612
|
-
//# sourceMappingURL=chunk-
|
|
617
|
+
//# sourceMappingURL=chunk-OQ4ALBBN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/input/InputClearButton.tsx","../src/input/InputGroupContext.ts","../src/input/InputGroup.tsx","../src/input/InputGroup.styles.ts","../src/input/InputLeadingAddon.tsx","../src/input/InputAddon.tsx","../src/input/InputAddon.styles.ts","../src/input/InputLeadingIcon.tsx","../src/input/InputIcon.tsx","../src/input/InputTrailingAddon.tsx","../src/input/InputTrailingIcon.tsx","../src/input/Input.tsx","../src/input/Input.styles.ts","../src/input/index.ts"],"sourcesContent":["import { DeleteOutline } from '@spark-ui/icons/DeleteOutline'\nimport { cx } from 'class-variance-authority'\nimport { ComponentPropsWithoutRef, MouseEventHandler, Ref } from 'react'\n\nimport { Icon } from '../icon'\nimport { useInputGroup } from './InputGroupContext'\n\nexport interface InputClearButtonProps extends ComponentPropsWithoutRef<'button'> {\n 'aria-label': string\n inline?: boolean\n ref?: Ref<HTMLButtonElement>\n}\n\nconst Root = ({\n className,\n tabIndex = -1,\n onClick,\n inline = false,\n ref,\n ...others\n}: InputClearButtonProps) => {\n const { onClear, hasTrailingIcon } = useInputGroup()\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = event => {\n if (onClick) {\n onClick(event)\n }\n\n if (onClear) {\n onClear()\n }\n }\n\n return (\n <button\n ref={ref}\n data-spark-component=\"input-clear-button\"\n className={cx(\n className,\n 'pointer-events-auto absolute',\n inline ? 'h-sz-44 top-0 -translate-y-0' : 'top-1/2 -translate-y-1/2',\n 'inline-flex h-full items-center justify-center outline-hidden',\n 'text-neutral hover:text-neutral-hovered',\n hasTrailingIcon ? 'right-3xl px-sz-12' : 'pl-md pr-lg right-0'\n )}\n tabIndex={tabIndex}\n onClick={handleClick}\n type=\"button\"\n {...others}\n >\n <Icon size=\"sm\">\n <DeleteOutline />\n </Icon>\n </button>\n )\n}\n\nexport const InputClearButton = Object.assign(Root, {\n id: 'ClearButton',\n})\n\nRoot.displayName = 'InputGroup.ClearButton'\n","import { createContext, useContext } from 'react'\n\nexport interface InputGroupContextValue {\n disabled?: boolean\n readOnly?: boolean\n hasLeadingIcon: boolean\n hasTrailingIcon: boolean\n hasLeadingAddon: boolean\n hasTrailingAddon: boolean\n hasClearButton: boolean\n state: null | undefined | 'error' | 'alert' | 'success'\n isStandalone?: boolean\n onClear: () => void\n}\n\nexport const InputGroupContext = createContext<Partial<InputGroupContextValue> | null>(null)\n\nexport const useInputGroup = () => {\n const context = useContext(InputGroupContext)\n\n return context || { isStandalone: true }\n}\n","/* eslint-disable max-lines-per-function */\n\nimport { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { useCombinedState } from '@spark-ui/hooks/use-combined-state'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport {\n ChangeEventHandler,\n Children,\n cloneElement,\n ComponentPropsWithoutRef,\n DetailedReactHTMLElement,\n FC,\n isValidElement,\n PropsWithChildren,\n ReactElement,\n Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react'\n\nimport { InputProps } from './Input'\nimport { inputGroupStyles, InputGroupStylesProps } from './InputGroup.styles'\nimport { InputGroupContext } from './InputGroupContext'\n\nexport interface InputGroupProps extends ComponentPropsWithoutRef<'div'>, InputGroupStylesProps {\n /**\n * Use `state` prop to assign a specific state to the group, choosing from: `error`, `alert` and `success`. By doing so, the outline styles will be updated.\n */\n state?: 'error' | 'alert' | 'success'\n /**\n * Function handler to be executed after the input has been cleared.\n */\n onClear?: () => void\n ref?: Ref<HTMLDivElement>\n}\n\nexport const InputGroup = ({\n className,\n children: childrenProp,\n state: stateProp,\n disabled: disabledProp,\n readOnly: readOnlyProp,\n onClear,\n ref: forwardedRef,\n ...others\n}: PropsWithChildren<InputGroupProps>) => {\n const getElementId = (element?: ReactElement) => {\n return element ? (element.type as FC & { id?: string }).id : ''\n }\n\n const findElement = (...values: string[]) => {\n return children.find(child => values.includes(getElementId(child) || ''))\n }\n\n const children = Children.toArray(childrenProp).filter(isValidElement)\n const input = findElement('Input') as\n | DetailedReactHTMLElement<InputProps, HTMLInputElement>\n | undefined\n const props = input?.props || {}\n\n const inputRef = useRef<HTMLInputElement>(null!)\n const onClearRef = useRef(onClear)\n const ref = useMergeRefs<HTMLInputElement>(input?.ref, inputRef)\n const [value, onChange] = useCombinedState(\n props.value as string,\n props.defaultValue as string,\n props.onValueChange\n )\n\n // Data derivated from FormField context\n const field = useFormFieldControl()\n const state = field.state ?? stateProp\n const disabled = field.disabled || !!disabledProp\n const readOnly = field.readOnly || !!readOnlyProp\n\n // InputGroup elements (in visual order)\n const leadingAddon = findElement('LeadingAddon')\n const leadingIcon = findElement('LeadingIcon')\n const clearButton = findElement('ClearButton')\n const trailingIcon = findElement('TrailingIcon')\n const trailingAddon = findElement('TrailingAddon')\n\n // Acknowledge which subComponents are used in the compound context\n const hasLeadingAddon = !!leadingAddon\n const hasTrailingAddon = !!trailingAddon\n const hasLeadingIcon = !!leadingIcon\n const hasTrailingIcon = !!trailingIcon\n const hasClearButton = !!value && !!clearButton && !disabled && !readOnly\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = event => {\n if (props.onChange) {\n props.onChange(event)\n }\n\n onChange(event.target.value)\n }\n\n const handleClear = useCallback(() => {\n if (onClearRef.current) {\n onClearRef.current()\n }\n\n onChange('')\n\n inputRef.current.focus()\n }, [onChange])\n\n const current = useMemo(() => {\n return {\n state,\n disabled,\n readOnly,\n hasLeadingIcon,\n hasTrailingIcon,\n hasLeadingAddon,\n hasTrailingAddon,\n hasClearButton,\n onClear: handleClear,\n }\n }, [\n state,\n disabled,\n readOnly,\n hasLeadingIcon,\n hasTrailingIcon,\n hasLeadingAddon,\n hasTrailingAddon,\n hasClearButton,\n handleClear,\n ])\n\n useEffect(() => {\n onClearRef.current = onClear\n }, [onClear])\n\n return (\n <InputGroupContext.Provider value={current}>\n <div\n data-spark-component=\"input-group\"\n ref={forwardedRef}\n className={inputGroupStyles({ disabled, readOnly, className })}\n {...others}\n >\n {hasLeadingAddon && leadingAddon}\n\n <div className=\"relative inline-flex w-full\">\n {input &&\n cloneElement(input, {\n ref,\n defaultValue: undefined,\n value: value ?? '',\n onChange: handleChange,\n })}\n\n {leadingIcon}\n\n {hasClearButton && clearButton}\n\n {trailingIcon}\n </div>\n\n {hasTrailingAddon && trailingAddon}\n </div>\n </InputGroupContext.Provider>\n )\n}\n\nInputGroup.displayName = 'InputGroup'\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const inputGroupStyles = cva(['relative inline-flex w-full'], {\n variants: {\n /**\n * When `true`, prevents the user from interacting.\n */\n disabled: {\n true: [\n 'cursor-not-allowed',\n 'relative',\n 'after:absolute',\n 'after:top-0',\n 'after:h-full',\n 'after:w-full',\n 'after:border-sm after:border-outline',\n 'after:rounded-lg',\n ],\n false: 'after:hidden',\n },\n /**\n * Sets the component as interactive or not.\n */\n readOnly: {\n true: [\n 'relative',\n 'after:absolute',\n 'after:top-0',\n 'after:h-full',\n 'after:w-full',\n 'after:border-sm after:border-outline',\n 'after:rounded-lg',\n ],\n false: 'after:hidden',\n },\n },\n})\n\nexport type InputGroupStylesProps = VariantProps<typeof inputGroupStyles>\n","import { cx } from 'class-variance-authority'\nimport { Ref } from 'react'\n\nimport { InputAddon, InputAddonProps } from './InputAddon'\nimport { useInputGroup } from './InputGroupContext'\n\nexport type InputLeadingAddonProps = InputAddonProps & {\n ref?: Ref<HTMLDivElement>\n}\n\nconst Root = ({ className, ref, ...others }: InputLeadingAddonProps) => {\n const { disabled, readOnly } = useInputGroup()\n const isInactive = disabled || readOnly\n\n return (\n <div className={cx('rounded-l-lg', isInactive ? 'bg-on-surface/dim-5' : null)}>\n <InputAddon\n ref={ref}\n className={cx(className, 'rounded-r-0! mr-[-1px] rounded-l-lg')}\n {...others}\n />\n </div>\n )\n}\n\nexport const InputLeadingAddon = Object.assign(Root, {\n id: 'LeadingAddon',\n})\n\nRoot.displayName = 'InputGroup.LeadingAddon'\n","import { Children, type ComponentPropsWithoutRef, type PropsWithChildren, Ref } from 'react'\n\nimport { Slot } from '../slot'\nimport { inputAddonStyles, type InputAddonStylesProps } from './InputAddon.styles'\nimport { useInputGroup } from './InputGroupContext'\n\nexport interface InputAddonProps\n extends ComponentPropsWithoutRef<'div'>,\n Omit<InputAddonStylesProps, 'intent' | 'disabled'> {\n ref?: Ref<HTMLDivElement>\n}\n\nexport const InputAddon = ({\n asChild: asChildProp,\n className,\n children,\n ref,\n ...others\n}: PropsWithChildren<InputAddonProps>) => {\n const { state, disabled, readOnly } = useInputGroup()\n\n const isRawText = typeof children === 'string'\n const asChild = !!(isRawText ? false : asChildProp)\n const child = isRawText ? children : Children.only(children)\n const Component = asChild && !isRawText ? Slot : 'div'\n\n const getDesign = (): InputAddonStylesProps['design'] => {\n if (isRawText) return 'text'\n\n return asChild ? 'solid' : 'inline'\n }\n\n const design = getDesign()\n\n return (\n <Component\n ref={ref}\n data-spark-component=\"input-addon\"\n className={inputAddonStyles({\n className,\n intent: state,\n disabled,\n readOnly,\n asChild,\n design,\n })}\n {...(disabled && { tabIndex: -1 })}\n {...others}\n >\n {child}\n </Component>\n )\n}\n\nInputAddon.displayName = 'InputGroup.Addon'\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const inputAddonStyles = cva(\n [\n 'overflow-hidden',\n 'border-sm',\n 'shrink-0',\n 'h-full',\n 'focus-visible:relative focus-visible:z-raised',\n 'mx-0',\n ],\n {\n variants: {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild: { false: ['flex', 'items-center', 'px-lg'] },\n intent: {\n neutral: 'border-outline',\n error: 'border-error',\n alert: 'border-alert',\n success: 'border-success',\n },\n /**\n * Disable the input addon, preventing user interaction and adding opacity.\n */\n disabled: {\n true: ['pointer-events-none border-outline!'],\n },\n /**\n * Changes input addon styles based on the read only status from the input.\n */\n readOnly: {\n true: ['pointer-events-none'],\n },\n /**\n * Main style of the input addon.\n */\n design: {\n text: '',\n solid: '',\n inline: '',\n },\n },\n compoundVariants: [\n {\n disabled: false,\n readOnly: false,\n design: 'text',\n class: ['bg-surface', 'text-on-surface'],\n },\n {\n disabled: true,\n design: 'text',\n class: ['text-on-surface/dim-3'],\n },\n {\n disabled: true,\n design: ['solid', 'inline'],\n class: ['opacity-dim-3'],\n },\n ],\n defaultVariants: {\n intent: 'neutral',\n },\n }\n)\n\nexport type InputAddonStylesProps = VariantProps<typeof inputAddonStyles>\n","import { cx } from 'class-variance-authority'\n\nimport { InputIcon, InputIconProps } from './InputIcon'\n\nexport type InputLeadingIconProps = InputIconProps\n\nexport const InputLeadingIcon = ({ className, ...others }: InputLeadingIconProps) => (\n <InputIcon className={cx(className, 'left-lg text-body-1')} {...others} />\n)\n\nInputLeadingIcon.id = 'LeadingIcon'\nInputLeadingIcon.displayName = 'InputGroup.LeadingIcon'\n","import { cx } from 'class-variance-authority'\n\nimport { Icon, type IconProps } from '../icon'\nimport { useInputGroup } from './InputGroupContext'\n\nexport type InputIconProps = IconProps\n\nexport const InputIcon = ({ className, intent, children, ...others }: InputIconProps) => {\n const { disabled, readOnly } = useInputGroup()\n const isInactive = disabled || readOnly\n\n return (\n <Icon\n data-spark-component=\"input-icon\"\n intent={intent}\n className={cx(\n className,\n 'pointer-events-none absolute top-[calc(var(--spacing-sz-44)/2)] -translate-y-1/2',\n intent ? undefined : 'text-neutral peer-focus:text-outline-high',\n isInactive ? 'opacity-dim-3' : undefined\n )}\n {...others}\n >\n {children}\n </Icon>\n )\n}\n\nInputIcon.displayName = 'InputGroup.Icon'\n","import { cx } from 'class-variance-authority'\nimport { Ref } from 'react'\n\nimport { InputAddon, InputAddonProps } from './InputAddon'\nimport { useInputGroup } from './InputGroupContext'\n\nexport type InputTrailingAddonProps = InputAddonProps & {\n ref?: Ref<HTMLDivElement>\n}\n\nconst Root = ({ className, ref, ...others }: InputTrailingAddonProps) => {\n const { disabled, readOnly } = useInputGroup()\n const isInactive = disabled || readOnly\n\n return (\n <div className={cx('rounded-r-lg', isInactive ? 'bg-on-surface/dim-5' : null)}>\n <InputAddon\n ref={ref}\n className={cx(className, 'rounded-l-0! ml-[-1px] rounded-r-lg')}\n {...others}\n />\n </div>\n )\n}\n\nexport const InputTrailingAddon = Object.assign(Root, {\n id: 'TrailingAddon',\n})\n\nRoot.displayName = 'InputGroup.TrailingAddon'\n","import { cx } from 'class-variance-authority'\n\nimport { InputIcon, InputIconProps } from './InputIcon'\n\nexport type InputTrailingIconProps = InputIconProps\n\nexport const InputTrailingIcon = ({ className, ...others }: InputTrailingIconProps) => (\n <InputIcon className={cx(className, 'right-lg text-body-1')} {...others} />\n)\n\nInputTrailingIcon.id = 'TrailingIcon'\nInputTrailingIcon.displayName = 'InputGroup.TrailingIcon'\n","import { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { ChangeEventHandler, ComponentPropsWithoutRef, KeyboardEventHandler, Ref } from 'react'\n\nimport { Slot } from '../slot'\nimport { inputStyles } from './Input.styles'\nimport { useInputGroup } from './InputGroupContext'\n\ntype InputPrimitiveProps = ComponentPropsWithoutRef<'input'>\n\nexport interface InputProps extends InputPrimitiveProps {\n asChild?: boolean\n onValueChange?: (value: string) => void\n ref?: Ref<HTMLInputElement>\n}\n\nconst Root = ({\n className,\n asChild = false,\n onValueChange,\n onChange,\n onKeyDown,\n disabled: disabledProp,\n readOnly: readOnlyProp,\n ref,\n ...others\n}: InputProps) => {\n const field = useFormFieldControl()\n const group = useInputGroup()\n\n const { id, name, isInvalid, isRequired, description } = field\n const {\n hasLeadingAddon,\n hasTrailingAddon,\n hasLeadingIcon,\n hasTrailingIcon,\n hasClearButton,\n onClear,\n } = group\n const Component = asChild ? Slot : 'input'\n const state = field.state || group.state\n const disabled = field.disabled || group.disabled || disabledProp\n const readOnly = field.readOnly || group.readOnly || readOnlyProp\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = event => {\n if (onChange) {\n onChange(event)\n }\n\n if (onValueChange) {\n onValueChange(event.target.value)\n }\n }\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = event => {\n if (onKeyDown) {\n onKeyDown(event)\n }\n\n if (hasClearButton && onClear && event.key === 'Escape') {\n onClear()\n }\n }\n\n return (\n <Component\n data-spark-component=\"input\"\n ref={ref}\n id={id}\n name={name}\n className={inputStyles({\n asChild,\n className,\n intent: state,\n hasLeadingAddon: !!hasLeadingAddon,\n hasTrailingAddon: !!hasTrailingAddon,\n hasLeadingIcon: !!hasLeadingIcon,\n hasTrailingIcon: !!hasTrailingIcon,\n hasClearButton: !!hasClearButton,\n })}\n disabled={disabled}\n readOnly={readOnly}\n required={isRequired}\n aria-describedby={description}\n aria-invalid={isInvalid}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n {...others}\n />\n )\n}\n\nexport const Input = Object.assign(Root, {\n id: 'Input',\n})\n\nRoot.displayName = 'Input'\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const inputStyles = cva(\n [\n 'relative',\n 'border-sm',\n 'peer',\n 'w-full',\n 'appearance-none outline-hidden',\n 'bg-surface',\n 'text-ellipsis text-body-1 text-on-surface',\n 'caret-neutral',\n '[&:-webkit-autofill]:[-webkit-text-fill-color:var(--color-on-surface)]',\n 'autofill:shadow-surface autofill:shadow-[inset_0_0_0px_1000px]',\n 'disabled:cursor-not-allowed disabled:border-outline disabled:bg-on-surface/dim-5 disabled:text-on-surface/dim-3',\n 'read-only:cursor-default read-only:pointer-events-none read-only:bg-on-surface/dim-5',\n 'focus:ring-1 focus:ring-inset',\n ],\n {\n variants: {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild: {\n true: ['min-h-sz-44'],\n false: ['h-sz-44'],\n },\n /**\n * Color scheme of the button.\n */\n intent: {\n neutral: [\n 'border-outline',\n 'hover:border-outline-high',\n 'focus:ring-outline-high focus:border-outline-high',\n ],\n success: ['border-success', 'focus:ring-success'],\n alert: ['border-alert', 'focus:ring-alert'],\n error: ['border-error', 'focus:ring-error'],\n },\n /**\n * Sets if there is an addon before the input text.\n */\n hasLeadingAddon: {\n true: ['rounded-l-0'],\n false: ['rounded-l-lg'],\n },\n /**\n * Sets if there is an addon after the input text.\n */\n hasTrailingAddon: {\n true: ['rounded-r-0'],\n false: ['rounded-r-lg'],\n },\n /**\n * Sets if there is an icon before the input text.\n */\n hasLeadingIcon: {\n true: ['pl-3xl'],\n false: ['pl-lg'],\n },\n /**\n * Sets if there is an icon after the input text.\n */\n hasTrailingIcon: { true: '' },\n /**\n * Sets if there is a button to clear the input text.\n */\n hasClearButton: { true: '' },\n },\n compoundVariants: [\n {\n hasTrailingIcon: false,\n hasClearButton: false,\n class: 'pr-lg',\n },\n {\n hasTrailingIcon: true,\n hasClearButton: false,\n class: 'pr-3xl',\n },\n {\n hasTrailingIcon: false,\n hasClearButton: true,\n class: 'pr-3xl',\n },\n {\n hasTrailingIcon: true,\n hasClearButton: true,\n class: 'pr-[calc(var(--spacing-3xl)*2)]',\n },\n ],\n defaultVariants: {\n intent: 'neutral',\n },\n }\n)\n\nexport type InputStylesProps = VariantProps<typeof inputStyles>\n","import { InputClearButton } from './InputClearButton'\nimport { InputGroup as Root } from './InputGroup'\nimport { InputLeadingAddon } from './InputLeadingAddon'\nimport { InputLeadingIcon } from './InputLeadingIcon'\nimport { InputTrailingAddon } from './InputTrailingAddon'\nimport { InputTrailingIcon } from './InputTrailingIcon'\n\nexport * from './Input'\n\nexport const InputGroup: typeof Root & {\n LeadingAddon: typeof InputLeadingAddon\n TrailingAddon: typeof InputTrailingAddon\n LeadingIcon: typeof InputLeadingIcon\n TrailingIcon: typeof InputTrailingIcon\n ClearButton: typeof InputClearButton\n} = Object.assign(Root, {\n LeadingAddon: InputLeadingAddon,\n TrailingAddon: InputTrailingAddon,\n LeadingIcon: InputLeadingIcon,\n TrailingIcon: InputTrailingIcon,\n ClearButton: InputClearButton,\n})\n\nInputGroup.displayName = 'InputGroup'\nInputLeadingAddon.displayName = 'InputGroup.LeadingAddon'\nInputTrailingAddon.displayName = 'InputGroup.TrailingAddon'\nInputLeadingIcon.displayName = 'InputGroup.LeadingIcon'\nInputTrailingIcon.displayName = 'InputGroup.TrailingIcon'\nInputClearButton.displayName = 'InputGroup.ClearButton'\n\nexport { useInputGroup } from './InputGroupContext'\nexport { type InputGroupProps } from './InputGroup'\nexport { type InputLeadingIconProps } from './InputLeadingIcon'\nexport { type InputTrailingIconProps } from './InputTrailingIcon'\nexport { type InputLeadingAddonProps } from './InputLeadingAddon'\nexport { type InputTrailingAddonProps } from './InputTrailingAddon'\nexport { type InputClearButtonProps } from './InputClearButton'\n"],"mappings":"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","names":["jsx","cx","Children","cva","jsx","Children","jsx","Root","cx","cx","cx","jsx","cx","jsx","cx","cx","jsx","Root","cx","cx","jsx","cx","useFormFieldControl","cva","jsx","Root","useFormFieldControl","InputGroup"]}
|
|
@@ -33,6 +33,7 @@ var IconButton = ({
|
|
|
33
33
|
return /* @__PURE__ */ jsx(
|
|
34
34
|
Button,
|
|
35
35
|
{
|
|
36
|
+
"data-spark-component": "icon-button",
|
|
36
37
|
ref,
|
|
37
38
|
className: iconButtonStyles({ size, className }),
|
|
38
39
|
design,
|
|
@@ -49,4 +50,4 @@ IconButton.displayName = "IconButton";
|
|
|
49
50
|
export {
|
|
50
51
|
IconButton
|
|
51
52
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
53
|
+
//# sourceMappingURL=chunk-QNYSDG6F.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/icon-button/IconButton.styles.tsx","../src/icon-button/IconButton.tsx"],"sourcesContent":["import { makeVariants } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\n// override the Button component's px-lg padding by using a more specific class selector (pl-0 pr-0)\nexport const iconButtonStyles = cva(['pl-0 pr-0'], {\n variants: {\n /**\n * Sets the size of the icon.\n */\n size: makeVariants<'size', ['sm', 'md', 'lg']>({\n sm: ['text-body-1'],\n md: ['text-body-1'],\n lg: ['text-display-3'],\n }),\n },\n})\n\nexport type IconButtonStylesProps = VariantProps<typeof iconButtonStyles>\n","import { Ref } from 'react'\n\nimport { Button, ButtonProps } from '../button'\nimport { iconButtonStyles } from './IconButton.styles'\n\nexport interface IconButtonProps extends Omit<ButtonProps, 'loadingText'> {\n 'aria-label': string\n ref?: Ref<HTMLButtonElement>\n}\n\nexport const IconButton = ({\n design = 'filled',\n disabled = false,\n intent = 'main',\n shape = 'rounded',\n size = 'md',\n className,\n ref,\n ...others\n}: IconButtonProps) => {\n return (\n <Button\n ref={ref}\n className={iconButtonStyles({ size, className })}\n design={design}\n disabled={disabled}\n intent={intent}\n shape={shape}\n size={size}\n {...others}\n />\n )\n}\n\nIconButton.displayName = 'IconButton'\n"],"mappings":";;;;;AAAA,SAAS,oBAAoB;AAC7B,SAAS,WAAyB;AAG3B,IAAM,mBAAmB,IAAI,CAAC,WAAW,GAAG;AAAA,EACjD,UAAU;AAAA;AAAA;AAAA;AAAA,IAIR,MAAM,aAAyC;AAAA,MAC7C,IAAI,CAAC,aAAa;AAAA,MAClB,IAAI,CAAC,aAAa;AAAA,MAClB,IAAI,CAAC,gBAAgB;AAAA,IACvB,CAAC;AAAA,EACH;AACF,CAAC;;;ACMG;AAXG,IAAM,aAAa,CAAC;AAAA,EACzB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuB;AACrB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,WAAW,cAAc;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/icon-button/IconButton.styles.tsx","../src/icon-button/IconButton.tsx"],"sourcesContent":["import { makeVariants } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\n// override the Button component's px-lg padding by using a more specific class selector (pl-0 pr-0)\nexport const iconButtonStyles = cva(['pl-0 pr-0'], {\n variants: {\n /**\n * Sets the size of the icon.\n */\n size: makeVariants<'size', ['sm', 'md', 'lg']>({\n sm: ['text-body-1'],\n md: ['text-body-1'],\n lg: ['text-display-3'],\n }),\n },\n})\n\nexport type IconButtonStylesProps = VariantProps<typeof iconButtonStyles>\n","import { Ref } from 'react'\n\nimport { Button, ButtonProps } from '../button'\nimport { iconButtonStyles } from './IconButton.styles'\n\nexport interface IconButtonProps extends Omit<ButtonProps, 'loadingText'> {\n 'aria-label': string\n ref?: Ref<HTMLButtonElement>\n}\n\nexport const IconButton = ({\n design = 'filled',\n disabled = false,\n intent = 'main',\n shape = 'rounded',\n size = 'md',\n className,\n ref,\n ...others\n}: IconButtonProps) => {\n return (\n <Button\n data-spark-component=\"icon-button\"\n ref={ref}\n className={iconButtonStyles({ size, className })}\n design={design}\n disabled={disabled}\n intent={intent}\n shape={shape}\n size={size}\n {...others}\n />\n )\n}\n\nIconButton.displayName = 'IconButton'\n"],"mappings":";;;;;AAAA,SAAS,oBAAoB;AAC7B,SAAS,WAAyB;AAG3B,IAAM,mBAAmB,IAAI,CAAC,WAAW,GAAG;AAAA,EACjD,UAAU;AAAA;AAAA;AAAA;AAAA,IAIR,MAAM,aAAyC;AAAA,MAC7C,IAAI,CAAC,aAAa;AAAA,MAClB,IAAI,CAAC,aAAa;AAAA,MAClB,IAAI,CAAC,gBAAgB;AAAA,IACvB,CAAC;AAAA,EACH;AACF,CAAC;;;ACMG;AAXG,IAAM,aAAa,CAAC;AAAA,EACzB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuB;AACrB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB;AAAA,MACA,WAAW,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,WAAW,cAAc;","names":[]}
|
|
@@ -52,6 +52,7 @@ var TextLink = ({
|
|
|
52
52
|
return /* @__PURE__ */ jsx(
|
|
53
53
|
Component,
|
|
54
54
|
{
|
|
55
|
+
"data-spark-component": "text-link",
|
|
55
56
|
ref,
|
|
56
57
|
className: textLinkStyles({ className, bold, intent, underline }),
|
|
57
58
|
...props,
|
|
@@ -63,4 +64,4 @@ var TextLink = ({
|
|
|
63
64
|
export {
|
|
64
65
|
TextLink
|
|
65
66
|
};
|
|
66
|
-
//# sourceMappingURL=chunk-
|
|
67
|
+
//# sourceMappingURL=chunk-RKPP7ZOK.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/text-link/TextLink.tsx"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority'\nimport { type ComponentPropsWithRef } from 'react'\n\nimport { Slot } from '../slot'\n\nconst textLinkStyles = cva(['inline-flex items-center focus-visible:u-outline'], {\n variants: {\n intent: {\n current: 'text-current hover:opacity-dim-1',\n main: 'text-main hover:text-main-hovered',\n support: 'text-support hover:text-support-hovered',\n accent: 'text-accent hover:text-accent-hovered',\n basic: 'text-basic hover:text-basic-hovered',\n success: 'text-success hover:text-success-hovered',\n alert: 'text-alert hover:text-alert-hovered',\n danger: 'text-error hover:text-error-hovered',\n info: 'text-info hover:text-info-hovered',\n neutral: 'text-neutral hover:text-neutral-hovered',\n },\n /** By default, TextLink inherits the current font weight. Use `bold` to highlight it. */\n bold: {\n true: 'font-bold',\n },\n /**\n * Underline is enabled by default.\n * You can remove it, but be careful about a11y, as you should make obvious to users what is a link or not.\n */\n underline: {\n true: 'underline',\n false: 'hover:underline focus:underline',\n },\n },\n defaultVariants: {\n intent: 'current',\n bold: false,\n underline: true,\n },\n})\n\nexport type StylesProps = VariantProps<typeof textLinkStyles>\n\nexport type TextLinkProps = ComponentPropsWithRef<'a'> &\n StylesProps & {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild?: boolean\n }\n\nexport const TextLink = ({\n asChild = false,\n bold = false,\n children,\n className,\n intent = 'current',\n underline = true,\n ref,\n ...props\n}: TextLinkProps) => {\n const Component = asChild ? Slot : 'a'\n\n return (\n <Component\n ref={ref}\n className={textLinkStyles({ className, bold, intent, underline })}\n {...props}\n >\n {children}\n </Component>\n )\n}\n"],"mappings":";;;;;AAAA,SAAS,WAAyB;AA8D9B;AAzDJ,IAAM,iBAAiB,IAAI,CAAC,kDAAkD,GAAG;AAAA,EAC/E,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,IACR;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AACF,CAAC;AAYM,IAAM,WAAW,CAAC;AAAA,EACvB,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAqB;AACnB,QAAM,YAAY,UAAU,OAAO;AAEnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,eAAe,EAAE,WAAW,MAAM,QAAQ,UAAU,CAAC;AAAA,MAC/D,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/text-link/TextLink.tsx"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority'\nimport { type ComponentPropsWithRef } from 'react'\n\nimport { Slot } from '../slot'\n\nconst textLinkStyles = cva(['inline-flex items-center focus-visible:u-outline'], {\n variants: {\n intent: {\n current: 'text-current hover:opacity-dim-1',\n main: 'text-main hover:text-main-hovered',\n support: 'text-support hover:text-support-hovered',\n accent: 'text-accent hover:text-accent-hovered',\n basic: 'text-basic hover:text-basic-hovered',\n success: 'text-success hover:text-success-hovered',\n alert: 'text-alert hover:text-alert-hovered',\n danger: 'text-error hover:text-error-hovered',\n info: 'text-info hover:text-info-hovered',\n neutral: 'text-neutral hover:text-neutral-hovered',\n },\n /** By default, TextLink inherits the current font weight. Use `bold` to highlight it. */\n bold: {\n true: 'font-bold',\n },\n /**\n * Underline is enabled by default.\n * You can remove it, but be careful about a11y, as you should make obvious to users what is a link or not.\n */\n underline: {\n true: 'underline',\n false: 'hover:underline focus:underline',\n },\n },\n defaultVariants: {\n intent: 'current',\n bold: false,\n underline: true,\n },\n})\n\nexport type StylesProps = VariantProps<typeof textLinkStyles>\n\nexport type TextLinkProps = ComponentPropsWithRef<'a'> &\n StylesProps & {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild?: boolean\n }\n\nexport const TextLink = ({\n asChild = false,\n bold = false,\n children,\n className,\n intent = 'current',\n underline = true,\n ref,\n ...props\n}: TextLinkProps) => {\n const Component = asChild ? Slot : 'a'\n\n return (\n <Component\n data-spark-component=\"text-link\"\n ref={ref}\n className={textLinkStyles({ className, bold, intent, underline })}\n {...props}\n >\n {children}\n </Component>\n )\n}\n"],"mappings":";;;;;AAAA,SAAS,WAAyB;AA8D9B;AAzDJ,IAAM,iBAAiB,IAAI,CAAC,kDAAkD,GAAG;AAAA,EAC/E,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,IACR;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AACF,CAAC;AAYM,IAAM,WAAW,CAAC;AAAA,EACvB,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAqB;AACnB,QAAM,YAAY,UAAU,OAAO;AAEnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB;AAAA,MACA,WAAW,eAAe,EAAE,WAAW,MAAM,QAAQ,UAAU,CAAC;AAAA,MAC/D,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
IconButton
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QNYSDG6F.mjs";
|
|
4
4
|
import {
|
|
5
5
|
Icon
|
|
6
6
|
} from "./chunk-UMUMFMFB.mjs";
|
|
@@ -77,7 +77,16 @@ var Body = ({
|
|
|
77
77
|
inset = false,
|
|
78
78
|
ref,
|
|
79
79
|
...rest
|
|
80
|
-
}) => /* @__PURE__ */ jsx3(
|
|
80
|
+
}) => /* @__PURE__ */ jsx3(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
"data-spark-component": "dialog-body",
|
|
84
|
+
ref,
|
|
85
|
+
className: dialogBodyStyles({ inset, className }),
|
|
86
|
+
...rest,
|
|
87
|
+
children
|
|
88
|
+
}
|
|
89
|
+
);
|
|
81
90
|
Body.displayName = "Dialog.Body";
|
|
82
91
|
|
|
83
92
|
// src/dialog/DialogClose.tsx
|
|
@@ -103,6 +112,7 @@ var Root = ({
|
|
|
103
112
|
return /* @__PURE__ */ jsx5(
|
|
104
113
|
Close,
|
|
105
114
|
{
|
|
115
|
+
"data-spark-component": "dialog-close-button",
|
|
106
116
|
"data-part": "close",
|
|
107
117
|
ref,
|
|
108
118
|
className: cx(["absolute", "top-md", "right-xl"], className),
|
|
@@ -210,19 +220,37 @@ Content.displayName = "Dialog.Content";
|
|
|
210
220
|
// src/dialog/DialogDescription.tsx
|
|
211
221
|
import { Dialog as RadixDialog4 } from "radix-ui";
|
|
212
222
|
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
213
|
-
var Description = (props) => /* @__PURE__ */ jsx7(RadixDialog4.Description, { ...props });
|
|
223
|
+
var Description = (props) => /* @__PURE__ */ jsx7(RadixDialog4.Description, { "data-spark-component": "dialog-description", ...props });
|
|
214
224
|
Description.displayName = "Dialog.Description";
|
|
215
225
|
|
|
216
226
|
// src/dialog/DialogFooter.tsx
|
|
217
227
|
import { cx as cx2 } from "class-variance-authority";
|
|
218
228
|
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
219
|
-
var Footer = ({ children, className, ref, ...rest }) => /* @__PURE__ */ jsx8(
|
|
229
|
+
var Footer = ({ children, className, ref, ...rest }) => /* @__PURE__ */ jsx8(
|
|
230
|
+
"footer",
|
|
231
|
+
{
|
|
232
|
+
"data-spark-component": "dialog-footer",
|
|
233
|
+
ref,
|
|
234
|
+
className: cx2(className, ["px-xl", "py-lg"]),
|
|
235
|
+
...rest,
|
|
236
|
+
children
|
|
237
|
+
}
|
|
238
|
+
);
|
|
220
239
|
Footer.displayName = "Dialog.Footer";
|
|
221
240
|
|
|
222
241
|
// src/dialog/DialogHeader.tsx
|
|
223
242
|
import { cx as cx3 } from "class-variance-authority";
|
|
224
243
|
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
225
|
-
var Header = ({ children, className, ref, ...rest }) => /* @__PURE__ */ jsx9(
|
|
244
|
+
var Header = ({ children, className, ref, ...rest }) => /* @__PURE__ */ jsx9(
|
|
245
|
+
"header",
|
|
246
|
+
{
|
|
247
|
+
"data-spark-component": "dialog-header",
|
|
248
|
+
ref,
|
|
249
|
+
className: cx3(className, ["px-xl", "py-lg"]),
|
|
250
|
+
...rest,
|
|
251
|
+
children
|
|
252
|
+
}
|
|
253
|
+
);
|
|
226
254
|
Header.displayName = "Dialog.Header";
|
|
227
255
|
|
|
228
256
|
// src/dialog/DialogOverlay.tsx
|
|
@@ -234,6 +262,7 @@ var Overlay = ({ className, ref, ...rest }) => {
|
|
|
234
262
|
return /* @__PURE__ */ jsx10(
|
|
235
263
|
RadixDialog5.Overlay,
|
|
236
264
|
{
|
|
265
|
+
"data-spark-component": "dialog-overlay",
|
|
237
266
|
ref,
|
|
238
267
|
className: cx4(
|
|
239
268
|
isFullScreen ? "hidden" : "fixed",
|
|
@@ -263,6 +292,7 @@ var Title = ({ className, ref, ...others }) => {
|
|
|
263
292
|
return /* @__PURE__ */ jsx12(
|
|
264
293
|
RadixDialog7.Title,
|
|
265
294
|
{
|
|
295
|
+
"data-spark-component": "dialog-title",
|
|
266
296
|
ref,
|
|
267
297
|
className: cx5(
|
|
268
298
|
"text-headline-1 text-on-surface",
|
|
@@ -278,7 +308,7 @@ Title.displayName = "Dialog.Title";
|
|
|
278
308
|
// src/dialog/DialogTrigger.tsx
|
|
279
309
|
import { Dialog as RadixDialog8 } from "radix-ui";
|
|
280
310
|
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
281
|
-
var Trigger = (props) => /* @__PURE__ */ jsx13(RadixDialog8.Trigger, { ...props });
|
|
311
|
+
var Trigger = (props) => /* @__PURE__ */ jsx13(RadixDialog8.Trigger, { "data-spark-component": "dialog-trigger", ...props });
|
|
282
312
|
Trigger.displayName = "Dialog.Trigger";
|
|
283
313
|
|
|
284
314
|
// src/dialog/index.ts
|
|
@@ -311,4 +341,4 @@ Description.displayName = "Dialog.Description";
|
|
|
311
341
|
export {
|
|
312
342
|
Dialog2 as Dialog
|
|
313
343
|
};
|
|
314
|
-
//# sourceMappingURL=chunk-
|
|
344
|
+
//# sourceMappingURL=chunk-T26TYEWV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dialog/Dialog.tsx","../src/dialog/DialogContext.tsx","../src/dialog/DialogBody.styles.ts","../src/dialog/DialogBody.tsx","../src/dialog/DialogClose.tsx","../src/dialog/DialogCloseButton.tsx","../src/dialog/DialogContent.tsx","../src/dialog/DialogContent.styles.tsx","../src/dialog/DialogDescription.tsx","../src/dialog/DialogFooter.tsx","../src/dialog/DialogHeader.tsx","../src/dialog/DialogOverlay.tsx","../src/dialog/DialogPortal.tsx","../src/dialog/DialogTitle.tsx","../src/dialog/DialogTrigger.tsx","../src/dialog/index.ts"],"sourcesContent":["import { Dialog as RadixDialog } from 'radix-ui'\nimport { type ReactElement, useEffect, useRef } from 'react'\n\nimport { DialogProvider } from './DialogContext'\n\nexport interface DialogProps {\n /**\n * Children of the component.\n */\n children?: RadixDialog.DialogProps['children']\n /**\n * Specifies if the dialog is open or not.\n */\n open?: RadixDialog.DialogProps['open']\n /**\n * Default open state.\n */\n defaultOpen?: RadixDialog.DialogProps['defaultOpen']\n /**\n * Handler executen on every dialog open state change.\n */\n onOpenChange?: RadixDialog.DialogProps['onOpenChange']\n /**\n * Specifies if the dialog is a modal.\n */\n modal?: RadixDialog.DialogProps['modal']\n}\n\nexport const Dialog = ({ children, ...rest }: DialogProps): ReactElement => {\n const open = rest.open\n const activeElementRef = useRef<Element>(null)\n\n /**\n * This function captures the active element when the Dialog is opened\n * and sets focus back to it when the Dialog is closed.\n */\n function handleActiveElementFocus() {\n if (open && document.activeElement) {\n activeElementRef.current = document.activeElement\n }\n\n if (!open) {\n setTimeout(() => {\n if (!(activeElementRef.current instanceof HTMLElement)) return\n activeElementRef.current.focus()\n }, 0)\n }\n }\n\n useEffect(handleActiveElementFocus, [open])\n\n return (\n <DialogProvider>\n <RadixDialog.Root {...rest}>{children}</RadixDialog.Root>\n </DialogProvider>\n )\n}\n\nDialog.displayName = 'Dialog.Root'\n","import { createContext, type ReactNode, useContext, useState } from 'react'\n\nexport interface DialogContextState {\n isFullScreen: boolean\n setIsFullScreen: (value: boolean) => void\n}\n\nconst DialogContext = createContext<DialogContextState | null>(null)\n\nexport const DialogProvider = ({ children: childrenProp }: { children: ReactNode }) => {\n const [isFullScreen, setIsFullScreen] = useState(false)\n\n return (\n <DialogContext.Provider\n value={{\n isFullScreen,\n setIsFullScreen,\n }}\n >\n {childrenProp}\n </DialogContext.Provider>\n )\n}\n\nexport const useDialog = () => {\n const context = useContext(DialogContext)\n\n if (!context) {\n throw Error('useDialog must be used within a Dialog provider')\n }\n\n return context\n}\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const dialogBodyStyles = cva(\n ['grow', 'overflow-y-auto', 'outline-hidden', 'focus-visible:u-outline'],\n {\n variants: {\n inset: {\n true: '',\n false: 'px-xl py-lg',\n },\n },\n }\n)\n\nexport type DialogBodyStylesProps = VariantProps<typeof dialogBodyStyles>\n","import { type ReactElement, type ReactNode, Ref } from 'react'\n\nimport { dialogBodyStyles, type DialogBodyStylesProps } from './DialogBody.styles'\nexport interface BodyProps extends DialogBodyStylesProps {\n children: ReactNode\n className?: string\n tabIndex?: number\n ref?: Ref<HTMLDivElement>\n}\n\nexport const Body = ({\n children,\n className,\n inset = false,\n ref,\n ...rest\n}: BodyProps): ReactElement => (\n <div\n data-spark-component=\"dialog-body\"\n ref={ref}\n className={dialogBodyStyles({ inset, className })}\n {...rest}\n >\n {children}\n </div>\n)\n\nBody.displayName = 'Dialog.Body'\n","import { Dialog as RadixDialog } from 'radix-ui'\nimport { Ref } from 'react'\n\nexport type CloseProps = RadixDialog.DialogCloseProps & {\n ref?: Ref<HTMLButtonElement>\n}\n\nexport const Close = (props: CloseProps) => <RadixDialog.Close {...props} />\n\nClose.displayName = 'Dialog.Close'\n","import { Close as CloseSVG } from '@spark-ui/icons/Close'\nimport { cx } from 'class-variance-authority'\n\nimport { Icon } from '../icon'\nimport { IconButton, type IconButtonProps } from '../icon-button'\nimport { Close, CloseProps } from './DialogClose'\n\nexport type CloseButtonProps = CloseProps &\n Pick<IconButtonProps, 'size' | 'intent' | 'design' | 'aria-label'>\n\nconst Root = ({\n 'aria-label': ariaLabel,\n className,\n size = 'md',\n intent = 'neutral',\n design = 'ghost',\n children = <CloseSVG />,\n ref,\n ...rest\n}: CloseButtonProps) => {\n return (\n <Close\n data-spark-component=\"dialog-close-button\"\n data-part=\"close\"\n ref={ref}\n className={cx(['absolute', 'top-md', 'right-xl'], className)}\n asChild\n {...rest}\n >\n <IconButton intent={intent} size={size} design={design} aria-label={ariaLabel}>\n <Icon>{children}</Icon>\n </IconButton>\n </Close>\n )\n}\n\nexport const CloseButton = Object.assign(Root, {\n id: 'CloseButton',\n})\n\nRoot.displayName = 'Dialog.CloseButton'\n","import { Dialog as RadixDialog } from 'radix-ui'\nimport { type ReactElement, Ref, useEffect } from 'react'\n\nimport { dialogContentStyles, type DialogContentStylesProps } from './DialogContent.styles'\nimport { useDialog } from './DialogContext'\n\nexport interface ContentProps extends RadixDialog.DialogContentProps, DialogContentStylesProps {\n /**\n * When set to true, the content will adjust its width to fit the content rather than taking up the full available width.\n */\n isNarrow?: boolean\n ref?: Ref<HTMLDivElement>\n}\n\nexport const Content = ({\n children,\n className,\n isNarrow = false,\n size = 'md',\n onInteractOutside,\n ref,\n ...rest\n}: ContentProps): ReactElement => {\n const { setIsFullScreen } = useDialog()\n\n useEffect(() => {\n if (size === 'fullscreen') setIsFullScreen(true)\n\n return () => setIsFullScreen(false)\n }, [setIsFullScreen, size])\n\n return (\n <RadixDialog.Content\n data-spark-component=\"dialog-content\"\n ref={ref}\n className={dialogContentStyles({\n className,\n isNarrow,\n size,\n })}\n onInteractOutside={e => {\n const isForegroundElement = (e.target as HTMLElement).closest('.z-toast, .z-popover')\n\n /**\n * The focus trap of the dialog applies `pointer-events-none` on the body of the page in the background, but\n * some components with an higher z-index have `pointer-events-auto` applied on them to remain interactive and ignore the focust trap (ex: a Snackbar with actions).\n *\n * Clicking on the snackbar will be considered as an \"outside click\" and close the dialog. We want to prevent this.\n */\n if (isForegroundElement) {\n e.preventDefault()\n }\n\n onInteractOutside?.(e)\n }}\n {...rest}\n >\n {children}\n </RadixDialog.Content>\n )\n}\n\nContent.displayName = 'Dialog.Content'\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const dialogContentStyles = cva(\n [\n 'z-modal flex flex-col bg-surface group',\n 'focus-visible:outline-hidden focus-visible:u-outline',\n '[&:not(:has(footer))]:pb-lg',\n '[&:not(:has(header))]:pt-lg',\n ],\n {\n variants: {\n size: {\n fullscreen: 'fixed size-full top-0 left-0',\n sm: 'max-w-sz-480',\n md: 'max-w-sz-672',\n lg: 'max-w-sz-864',\n },\n isNarrow: {\n true: [],\n false: [],\n },\n },\n compoundVariants: [\n {\n size: ['sm', 'md', 'lg'],\n class: [\n 'fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n 'max-h-[80%]',\n 'shadow-md rounded-lg',\n 'data-[state=open]:animate-fade-in',\n 'data-[state=closed]:animate-fade-out',\n ],\n },\n {\n size: ['sm', 'md', 'lg'],\n isNarrow: false,\n class: ['w-full'],\n },\n ],\n defaultVariants: {\n size: 'md',\n isNarrow: false,\n },\n }\n)\n\nexport type DialogContentStylesProps = VariantProps<typeof dialogContentStyles>\n","import { Dialog as RadixDialog } from 'radix-ui'\nimport { Ref } from 'react'\n\nexport type DescriptionProps = RadixDialog.DialogDescriptionProps & {\n ref?: Ref<HTMLParagraphElement>\n}\n\nexport const Description = (props: DescriptionProps) => (\n <RadixDialog.Description data-spark-component=\"dialog-description\" {...props} />\n)\n\nDescription.displayName = 'Dialog.Description'\n","import { cx } from 'class-variance-authority'\nimport { type ReactElement, type ReactNode, Ref } from 'react'\n\nexport interface FooterProps {\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport const Footer = ({ children, className, ref, ...rest }: FooterProps): ReactElement => (\n <footer\n data-spark-component=\"dialog-footer\"\n ref={ref}\n className={cx(className, ['px-xl', 'py-lg'])}\n {...rest}\n >\n {children}\n </footer>\n)\n\nFooter.displayName = 'Dialog.Footer'\n","import { cx } from 'class-variance-authority'\nimport { type ReactElement, type ReactNode, Ref } from 'react'\n\nexport interface HeaderProps {\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport const Header = ({ children, className, ref, ...rest }: HeaderProps): ReactElement => (\n <header\n data-spark-component=\"dialog-header\"\n ref={ref}\n className={cx(className, ['px-xl', 'py-lg'])}\n {...rest}\n >\n {children}\n </header>\n)\n\nHeader.displayName = 'Dialog.Header'\n","import { cx } from 'class-variance-authority'\nimport { Dialog as RadixDialog } from 'radix-ui'\nimport { type ReactElement, Ref } from 'react'\n\nimport { useDialog } from './DialogContext'\n\nexport type OverlayProps = RadixDialog.DialogOverlayProps & {\n ref?: Ref<HTMLDivElement>\n}\n\nexport const Overlay = ({ className, ref, ...rest }: OverlayProps): ReactElement | null => {\n const { isFullScreen } = useDialog()\n\n return (\n <RadixDialog.Overlay\n data-spark-component=\"dialog-overlay\"\n ref={ref}\n className={cx(\n isFullScreen ? 'hidden' : 'fixed',\n ['top-0', 'left-0', 'w-screen', 'h-screen', 'z-overlay'],\n ['bg-overlay/dim-1'],\n ['data-[state=open]:animate-fade-in'],\n ['data-[state=closed]:animate-fade-out'],\n className\n )}\n {...rest}\n />\n )\n}\n\nOverlay.displayName = 'Dialog.Overlay'\n","import { Dialog as RadixDialog } from 'radix-ui'\nimport { type ReactElement } from 'react'\n\nexport type PortalProps = RadixDialog.DialogPortalProps\n\nexport const Portal = ({ children, ...rest }: PortalProps): ReactElement => (\n <RadixDialog.Portal {...rest}>{children}</RadixDialog.Portal>\n)\n\nPortal.displayName = 'Dialog.Portal'\n","import { cx } from 'class-variance-authority'\nimport { Dialog as RadixDialog } from 'radix-ui'\nimport { Ref } from 'react'\n\nexport type TitleProps = RadixDialog.DialogTitleProps & {\n ref?: Ref<HTMLHeadingElement>\n}\n\nexport const Title = ({ className, ref, ...others }: TitleProps) => {\n return (\n <RadixDialog.Title\n data-spark-component=\"dialog-title\"\n ref={ref}\n className={cx(\n 'text-headline-1 text-on-surface',\n 'group-has-data-[part=close]:pr-3xl',\n className\n )}\n {...others}\n />\n )\n}\n\nTitle.displayName = 'Dialog.Title'\n","import { Dialog as RadixDialog } from 'radix-ui'\nimport { type ReactElement, ReactNode, Ref } from 'react'\n\nexport interface TriggerProps {\n /**\n * Children of the component.\n */\n children?: ReactNode\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild?: RadixDialog.DialogTriggerProps['asChild']\n ref?: Ref<HTMLButtonElement>\n}\n\nexport const Trigger = (props: TriggerProps): ReactElement => (\n <RadixDialog.Trigger data-spark-component=\"dialog-trigger\" {...props} />\n)\n\nTrigger.displayName = 'Dialog.Trigger'\n","import { Dialog as Root } from './Dialog'\nimport { Body } from './DialogBody'\nimport { Close } from './DialogClose'\nimport { CloseButton } from './DialogCloseButton'\nimport { Content } from './DialogContent'\nimport { Description } from './DialogDescription' // aria-describedby\nimport { Footer } from './DialogFooter'\nimport { Header } from './DialogHeader'\nimport { Overlay } from './DialogOverlay'\nimport { Portal } from './DialogPortal'\nimport { Title } from './DialogTitle' // aria-labelledby\nimport { Trigger } from './DialogTrigger'\n\nexport const Dialog: typeof Root & {\n Trigger: typeof Trigger\n Portal: typeof Portal\n Overlay: typeof Overlay\n Content: typeof Content\n Header: typeof Header\n Body: typeof Body\n Footer: typeof Footer\n Close: typeof Close\n CloseButton: typeof CloseButton\n Title: typeof Title\n Description: typeof Description\n} = Object.assign(Root, {\n Trigger,\n Portal,\n Overlay,\n Content,\n Header,\n Body,\n Footer,\n Close,\n CloseButton,\n Title,\n Description,\n})\n\nDialog.displayName = 'Dialog'\nDialog.Trigger.displayName = 'Dialog.Trigger'\nTrigger.displayName = 'Dialog.Trigger'\nPortal.displayName = 'Dialog.Portal'\nOverlay.displayName = 'Dialog.Overlay'\nContent.displayName = 'Dialog.Content'\nHeader.displayName = 'Dialog.Header'\nBody.displayName = 'Dialog.Body'\nFooter.displayName = 'Dialog.Footer'\nCloseButton.displayName = 'Dialog.CloseButton'\nTitle.displayName = 'Dialog.Title'\nDescription.displayName = 'Dialog.Description'\n\nexport { type DialogProps } from './Dialog'\nexport { type ContentProps as DialogContentProps } from './DialogContent'\nexport { type HeaderProps as DialogHeaderProps } from './DialogHeader'\nexport { type BodyProps as DialogBodyProps } from './DialogBody'\nexport { type FooterProps as DialogFooterProps } from './DialogFooter'\nexport { type TriggerProps as DialogTriggerProps } from './DialogTrigger'\nexport { type OverlayProps as DialogOverlayProps } from './DialogOverlay'\nexport { type PortalProps as DialogPortalProps } from './DialogPortal'\nexport { type TitleProps as DialogTitleProps } from './DialogTitle'\nexport { type DescriptionProps as DialogDescriptionProps } from './DialogDescription'\nexport { type CloseProps as DialogCloseProps } from './DialogClose'\nexport { type CloseButtonProps as DialogCloseButtonProps } from './DialogCloseButton'\n"],"mappings":"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","names":["jsx","jsx","RadixDialog","jsx","jsx","RadixDialog","useEffect","cva","jsx","useEffect","RadixDialog","RadixDialog","jsx","cx","jsx","cx","jsx","cx","RadixDialog","jsx","RadixDialog","cx","RadixDialog","jsx","cx","RadixDialog","jsx","RadixDialog","jsx","Dialog"]}
|
package/dist/combobox/index.js
CHANGED