@zayne-labs/ui-react 0.11.11 → 0.11.12
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/dist/components/cn-jNZfGhrk.js.map +1 -1
- package/dist/components/common/await/index.d.ts +4 -6
- package/dist/components/common/await/index.js.map +1 -1
- package/dist/components/common/client-gate/index.d.ts +1 -3
- package/dist/components/common/client-gate/index.js.map +1 -1
- package/dist/components/common/error-boundary/index.d.ts +2 -2
- package/dist/components/common/for/index.d.ts +2 -4
- package/dist/components/common/presence/index.d.ts +1 -2
- package/dist/components/common/show/index.d.ts +3 -5
- package/dist/components/common/slot/index.d.ts +2 -4
- package/dist/components/common/suspense-with-boundary/index.d.ts +1 -1
- package/dist/components/common/suspense-with-boundary/index.js.map +1 -1
- package/dist/components/common/switch/index.d.ts +3 -5
- package/dist/components/common/teleport/index.d.ts +1 -2
- package/dist/components/common/teleport/index.js.map +1 -1
- package/dist/components/error-boundary-BOZ3EvMt.js.map +1 -1
- package/dist/components/for-DGTMIS0w.js.map +1 -1
- package/dist/components/{index-BmD5l0L7.d.ts → index-CUmHEGwU.d.ts} +3 -6
- package/dist/components/{index-dmMYkH2c.d.ts → index-Dvg4OLWa.d.ts} +3 -4
- package/dist/components/presence-DDuEcp1q.js.map +1 -1
- package/dist/components/show-CMxdpPiN.js.map +1 -1
- package/dist/components/slot-B2aEs2RU.js.map +1 -1
- package/dist/components/switch-Dwy5Gzsb.js.map +1 -1
- package/dist/components/ui/card/index.d.ts +7 -8
- package/dist/components/ui/card/index.js.map +1 -1
- package/dist/components/ui/carousel/index.d.ts +9 -10
- package/dist/components/ui/carousel/index.js.map +1 -1
- package/dist/components/ui/drag-scroll/index.d.ts +9 -79
- package/dist/components/ui/drag-scroll/index.js.map +1 -1
- package/dist/components/ui/drop-zone/index.d.ts +16 -86
- package/dist/components/ui/drop-zone/index.js.map +1 -1
- package/dist/components/ui/form/index.d.ts +21 -23
- package/dist/components/ui/form/index.js.map +1 -1
- package/dist/style.css +1 -4
- package/package.json +19 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Slot.Root"],"sources":["../../../../src/components/ui/card/card.tsx","../../../../src/components/ui/card/card-parts.ts"],"sourcesContent":["import type { PolymorphicProps } from \"@zayne-labs/toolkit-react/utils\";\nimport { Slot } from \"@/components/common/slot\";\nimport { cnMerge } from \"@/lib/utils/cn\";\n\nexport function CardRoot<TElement extends React.ElementType = \"article\">(\n\tprops: PolymorphicProps<TElement, { asChild?: boolean; className?: string }>\n) {\n\tconst { as: Element = \"article\", asChild, className, ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component\n\t\t\tdata-slot=\"card-root\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"root\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardHeader<TElement extends React.ElementType = \"header\">(\n\tprops: PolymorphicProps<TElement, { asChild?: boolean; className?: string }>\n) {\n\tconst { as: Element = \"header\", asChild, className, ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component\n\t\t\tdata-slot=\"card-header\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"header\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardTitle<TElement extends React.ElementType = \"h3\">(\n\tprops: PolymorphicProps<TElement, { className?: string }>\n) {\n\tconst { as: Element = \"h3\", className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"card-title\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"title\"\n\t\t\tclassName={cnMerge(\"leading-none font-semibold\", className)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardDescription<TElement extends React.ElementType = \"p\">(\n\tprops: PolymorphicProps<TElement, { className?: string }>\n) {\n\tconst { as: Element = \"p\", className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"card-description\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"description\"\n\t\t\tclassName={cnMerge(\"text-sm text-zu-muted-foreground\", className)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardContent<TElement extends React.ElementType = \"div\">(\n\tprops: PolymorphicProps<TElement, { className?: string }>\n) {\n\tconst { as: Element = \"div\", className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"card-content\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"content\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardAction<TElement extends React.ElementType = \"button\">(\n\tprops: PolymorphicProps<TElement, { className?: string }>\n) {\n\tconst { as: Element = \"button\", className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"card-action\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"action\"\n\t\t\ttype=\"button\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardFooter<TElement extends React.ElementType = \"footer\">(\n\tprops: PolymorphicProps<TElement, { asChild?: boolean; className?: string }>\n) {\n\tconst { as: Element = \"footer\", asChild, className, ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component\n\t\t\tdata-slot=\"card-footer\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"footer\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n","export {\n\tCardAction as Action,\n\tCardContent as Content,\n\tCardDescription as Description,\n\tCardFooter as Footer,\n\tCardHeader as Header,\n\tCardRoot as Root,\n\tCardTitle as Title,\n} from \"./card\";\n"],"mappings":";;;;;AAIA,SAAgB,SACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,WAAW,SAAS,WAAW,GAAG,gBAAgB;
|
|
1
|
+
{"version":3,"file":"index.js","names":["Slot.Root"],"sources":["../../../../src/components/ui/card/card.tsx","../../../../src/components/ui/card/card-parts.ts"],"sourcesContent":["import type { PolymorphicProps } from \"@zayne-labs/toolkit-react/utils\";\nimport { Slot } from \"@/components/common/slot\";\nimport { cnMerge } from \"@/lib/utils/cn\";\n\nexport function CardRoot<TElement extends React.ElementType = \"article\">(\n\tprops: PolymorphicProps<TElement, { asChild?: boolean; className?: string }>\n) {\n\tconst { as: Element = \"article\", asChild, className, ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component\n\t\t\tdata-slot=\"card-root\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"root\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardHeader<TElement extends React.ElementType = \"header\">(\n\tprops: PolymorphicProps<TElement, { asChild?: boolean; className?: string }>\n) {\n\tconst { as: Element = \"header\", asChild, className, ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component\n\t\t\tdata-slot=\"card-header\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"header\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardTitle<TElement extends React.ElementType = \"h3\">(\n\tprops: PolymorphicProps<TElement, { className?: string }>\n) {\n\tconst { as: Element = \"h3\", className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"card-title\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"title\"\n\t\t\tclassName={cnMerge(\"leading-none font-semibold\", className)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardDescription<TElement extends React.ElementType = \"p\">(\n\tprops: PolymorphicProps<TElement, { className?: string }>\n) {\n\tconst { as: Element = \"p\", className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"card-description\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"description\"\n\t\t\tclassName={cnMerge(\"text-sm text-zu-muted-foreground\", className)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardContent<TElement extends React.ElementType = \"div\">(\n\tprops: PolymorphicProps<TElement, { className?: string }>\n) {\n\tconst { as: Element = \"div\", className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"card-content\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"content\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardAction<TElement extends React.ElementType = \"button\">(\n\tprops: PolymorphicProps<TElement, { className?: string }>\n) {\n\tconst { as: Element = \"button\", className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"card-action\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"action\"\n\t\t\ttype=\"button\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function CardFooter<TElement extends React.ElementType = \"footer\">(\n\tprops: PolymorphicProps<TElement, { asChild?: boolean; className?: string }>\n) {\n\tconst { as: Element = \"footer\", asChild, className, ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component\n\t\t\tdata-slot=\"card-footer\"\n\t\t\tdata-scope=\"card\"\n\t\t\tdata-part=\"footer\"\n\t\t\tclassName={className}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n","export {\n\tCardAction as Action,\n\tCardContent as Content,\n\tCardDescription as Description,\n\tCardFooter as Footer,\n\tCardHeader as Header,\n\tCardRoot as Root,\n\tCardTitle as Title,\n} from \"./card\";\n"],"mappings":";;;;;AAIA,SAAgB,SACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,WAAW,SAAS,WAAW,GAAG,gBAAgB;CAIxE,OACC,oBAHiB,UAAUA,WAAY,SAGvC;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACC;EACX,GAAI;CACJ,CAAA;AAEH;AAEA,SAAgB,WACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,UAAU,SAAS,WAAW,GAAG,gBAAgB;CAIvE,OACC,oBAHiB,UAAUA,WAAY,SAGvC;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACC;EACX,GAAI;CACJ,CAAA;AAEH;AAEA,SAAgB,UACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,MAAM,WAAW,GAAG,gBAAgB;CAE1D,OACC,oBAAC,SAAD;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACV,WAAW,QAAQ,8BAA8B,SAAS;EAC1D,GAAI;CACJ,CAAA;AAEH;AAEA,SAAgB,gBACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,KAAK,WAAW,GAAG,gBAAgB;CAEzD,OACC,oBAAC,SAAD;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACV,WAAW,QAAQ,oCAAoC,SAAS;EAChE,GAAI;CACJ,CAAA;AAEH;AAEA,SAAgB,YACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,OAAO,WAAW,GAAG,gBAAgB;CAE3D,OACC,oBAAC,SAAD;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACC;EACX,GAAI;CACJ,CAAA;AAEH;AAEA,SAAgB,WACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,UAAU,WAAW,GAAG,gBAAgB;CAE9D,OACC,oBAAC,SAAD;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACV,MAAK;EACM;EACX,GAAI;CACJ,CAAA;AAEH;AAEA,SAAgB,WACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,UAAU,SAAS,WAAW,GAAG,gBAAgB;CAIvE,OACC,oBAHiB,UAAUA,WAAY,SAGvC;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACC;EACX,GAAI;CACJ,CAAA;AAEH"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { InferProps, PolymorphicPropsStrict } from "@zayne-labs/toolkit-react/utils";
|
|
2
2
|
import { UnionDiscriminator } from "@zayne-labs/toolkit-type-helpers";
|
|
3
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
3
|
import { StoreApi } from "@zayne-labs/toolkit-core";
|
|
5
4
|
|
|
6
5
|
//#region src/components/ui/carousel/types.d.ts
|
|
@@ -75,19 +74,19 @@ type CarouselItemProps = OtherCarouselProps & {
|
|
|
75
74
|
};
|
|
76
75
|
//#endregion
|
|
77
76
|
//#region src/components/ui/carousel/carousel.d.ts
|
|
78
|
-
declare function CarouselRoot<TImages extends ImagesType, TElement extends React.ElementType = "div">(props: PolymorphicPropsStrict<TElement, CarouselRootProps<TImages>>):
|
|
79
|
-
declare function CarouselButton(props: CarouselButtonsProps):
|
|
80
|
-
declare function CarouselControls(props: CarouselControlProps):
|
|
81
|
-
declare function CarouselItemList<TArray extends unknown[]>(props: CarouselWrapperProps<TArray[number]>):
|
|
82
|
-
declare function CarouselItem(props: CarouselItemProps):
|
|
77
|
+
declare function CarouselRoot<TImages extends ImagesType, TElement extends React.ElementType = "div">(props: PolymorphicPropsStrict<TElement, CarouselRootProps<TImages>>): import("react/jsx-runtime").JSX.Element;
|
|
78
|
+
declare function CarouselButton(props: CarouselButtonsProps): import("react/jsx-runtime").JSX.Element;
|
|
79
|
+
declare function CarouselControls(props: CarouselControlProps): import("react/jsx-runtime").JSX.Element;
|
|
80
|
+
declare function CarouselItemList<TArray extends unknown[]>(props: CarouselWrapperProps<TArray[number]>): import("react/jsx-runtime").JSX.Element;
|
|
81
|
+
declare function CarouselItem(props: CarouselItemProps): import("react/jsx-runtime").JSX.Element;
|
|
83
82
|
declare function CarouselCaption<TElement extends React.ElementType = "div">(props: PolymorphicPropsStrict<TElement, OtherCarouselProps & {
|
|
84
83
|
placement?: "center" | Exclude<`${"bottom" | "center" | "top"}-${"center" | "left" | "right"}`, "center-center">;
|
|
85
|
-
}>):
|
|
86
|
-
declare function CarouselIndicatorList<TArray extends unknown[]>(props: CarouselWrapperProps<TArray[number]>):
|
|
87
|
-
declare function CarouselIndicator(props: CarouselIndicatorProps):
|
|
84
|
+
}>): import("react/jsx-runtime").JSX.Element;
|
|
85
|
+
declare function CarouselIndicatorList<TArray extends unknown[]>(props: CarouselWrapperProps<TArray[number]>): import("react/jsx-runtime").JSX.Element;
|
|
86
|
+
declare function CarouselIndicator(props: CarouselIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
88
87
|
declare namespace carousel_parts_d_exports {
|
|
89
88
|
export { CarouselButton as Button, CarouselCaption as Caption, CarouselControls as Controls, CarouselIndicator as Indicator, CarouselIndicatorList as IndicatorList, CarouselItem as Item, CarouselItemList as ItemList, CarouselRoot as Root };
|
|
90
89
|
}
|
|
91
90
|
//#endregion
|
|
92
|
-
export { carousel_parts_d_exports as Carousel, CarouselButton, CarouselButtonsProps, CarouselCaption, CarouselControlProps, CarouselControls, CarouselIndicator, CarouselIndicatorList, CarouselIndicatorProps, CarouselItem, CarouselItemList, CarouselItemProps, CarouselRoot, CarouselRootProps, CarouselStore, CarouselStoreApi, CarouselWrapperProps, ImagesType, OtherCarouselProps };
|
|
91
|
+
export { carousel_parts_d_exports as Carousel, CarouselButton, type CarouselButtonsProps, CarouselCaption, type CarouselControlProps, CarouselControls, CarouselIndicator, CarouselIndicatorList, type CarouselIndicatorProps, CarouselItem, CarouselItemList, type CarouselItemProps, CarouselRoot, type CarouselRootProps, type CarouselStore, type CarouselStoreApi, type CarouselWrapperProps, type ImagesType, type OtherCarouselProps };
|
|
93
92
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Show.Root","Show.Content","Show.Fallback"],"sources":["../../../../src/components/ui/carousel/carousel-store-context.ts","../../../../src/components/ui/carousel/icons.tsx","../../../../src/components/ui/carousel/useCarouselOptions.ts","../../../../src/components/ui/carousel/carousel.tsx","../../../../src/components/ui/carousel/carousel-parts.ts"],"sourcesContent":["import { createStore } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef, useStore } from \"@zayne-labs/toolkit-react\";\nimport { createReactStoreContext } from \"@zayne-labs/toolkit-react/zustand\";\nimport type { PrettyOmit } from \"@zayne-labs/toolkit-type-helpers\";\nimport { useMemo } from \"react\";\nimport type { CarouselRootProps, CarouselStore, ImagesType } from \"./types\";\n\nconst [CarouselStoreContextProvider, useCarouselStoreContext] = createReactStoreContext<CarouselStore>({\n\thookName: \"useCarouselStore\",\n\tname: \"CarouselStoreContext\",\n\tproviderName: \"CarouselRoot\",\n});\n\n// CarouselStore Creation\nconst createCarouselStore = <TImages extends ImagesType>(\n\tstoreValues: PrettyOmit<CarouselRootProps<TImages>, \"children\">\n) => {\n\tconst { images, onSlideBtnClick } = storeValues;\n\n\tconst carouselStore = createStore<CarouselStore<TImages>>((set, get) => ({\n\t\tcurrentSlide: 0,\n\t\timages,\n\t\tmaxSlide: images.length - 1,\n\n\t\t/* eslint-disable perfectionist/sort-objects -- actions should be last */\n\t\tactions: {\n\t\t\t/* eslint-enable perfectionist/sort-objects -- actions should be last */\n\n\t\t\tgoToNextSlide: () => {\n\t\t\t\tconst { currentSlide, maxSlide } = get();\n\t\t\t\tconst { goToSlide } = get().actions;\n\n\t\t\t\tif (currentSlide === maxSlide) {\n\t\t\t\t\tgoToSlide(0);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tgoToSlide(currentSlide + 1);\n\t\t\t},\n\n\t\t\tgoToPreviousSlide: () => {\n\t\t\t\tconst { currentSlide, maxSlide } = get();\n\t\t\t\tconst { goToSlide } = get().actions;\n\n\t\t\t\tif (currentSlide === 0) {\n\t\t\t\t\tgoToSlide(maxSlide);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tgoToSlide(currentSlide - 1);\n\t\t\t},\n\n\t\t\tgoToSlide: (newValue) => {\n\t\t\t\tonSlideBtnClick?.();\n\n\t\t\t\tset({ currentSlide: newValue });\n\t\t\t},\n\t\t},\n\t}));\n\n\treturn carouselStore;\n};\n\nconst useCarousel = <TImages extends ImagesType>(props: Omit<CarouselRootProps<TImages>, \"children\">) => {\n\tconst { images, onSlideBtnClick } = props;\n\n\tconst savedOnSlideBtnClick = useCallbackRef(onSlideBtnClick);\n\n\tconst carouselStore = useMemo(\n\t\t() => createCarouselStore({ images, onSlideBtnClick: savedOnSlideBtnClick }),\n\t\t[images, savedOnSlideBtnClick]\n\t);\n\n\tconst useCarouselStore: typeof useCarouselStoreContext = (selector) => {\n\t\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\t\treturn useStore(carouselStore, selector);\n\t};\n\n\tconst savedUseCarouselStore = useCallbackRef(useCarouselStore);\n\n\treturn useMemo(\n\t\t() => ({ carouselStore, useCarouselStore: savedUseCarouselStore }),\n\t\t[carouselStore, savedUseCarouselStore]\n\t);\n};\n\nexport { CarouselStoreContextProvider, useCarousel, useCarouselStoreContext };\n","export const ChevronLeftIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t\t<path d=\"m14 16l-4-4l4-4\" />\n\t\t</g>\n\t</svg>\n);\n","import { useAnimationInterval, useCallbackRef } from \"@zayne-labs/toolkit-react\";\nimport { useState } from \"react\";\nimport type { CarouselStore } from \"./types\";\n\ntype CarouselOptions = {\n\tactions: CarouselStore[\"actions\"];\n\tautoSlideInterval?: number;\n\thasAutoSlide?: boolean;\n\tshouldPauseOnHover?: boolean;\n};\n\nconst useCarouselOptions = (options: CarouselOptions) => {\n\tconst { actions, autoSlideInterval = 5000, hasAutoSlide = false, shouldPauseOnHover = false } = options;\n\n\tconst [isPaused, setIsPaused] = useState(false);\n\n\tconst shouldAutoSlide = hasAutoSlide && !isPaused;\n\n\tuseAnimationInterval({\n\t\tintervalDuration: shouldAutoSlide ? autoSlideInterval : null,\n\t\tonAnimation: actions.goToNextSlide,\n\t});\n\n\tconst pauseAutoSlide = useCallbackRef(() => shouldPauseOnHover && setIsPaused(true));\n\n\tconst resumeAutoSlide = useCallbackRef(() => shouldPauseOnHover && setIsPaused(false));\n\n\treturn { pauseAutoSlide, resumeAutoSlide };\n};\n\nexport { useCarouselOptions };\n","\"use client\";\n\nimport { dataAttr } from \"@zayne-labs/toolkit-core\";\nimport type { CssWithCustomProperties, PolymorphicPropsStrict } from \"@zayne-labs/toolkit-react/utils\";\nimport { isFunction } from \"@zayne-labs/toolkit-type-helpers\";\nimport { For } from \"@/components/common/for\";\nimport { Show } from \"@/components/common/show\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport {\n\tCarouselStoreContextProvider,\n\tuseCarousel,\n\tuseCarouselStoreContext,\n} from \"./carousel-store-context\";\nimport { ChevronLeftIcon } from \"./icons\";\nimport type {\n\tCarouselButtonsProps,\n\tCarouselControlProps,\n\tCarouselIndicatorProps,\n\tCarouselItemProps,\n\tCarouselRootProps,\n\tCarouselWrapperProps,\n\tImagesType,\n\tOtherCarouselProps,\n} from \"./types\";\nimport { useCarouselOptions } from \"./useCarouselOptions\";\n\nexport function CarouselRoot<TImages extends ImagesType, TElement extends React.ElementType = \"div\">(\n\tprops: PolymorphicPropsStrict<TElement, CarouselRootProps<TImages>>\n) {\n\tconst {\n\t\tas: Element = \"div\",\n\t\tautoSlideInterval,\n\t\tchildren,\n\t\tclassNames,\n\t\thasAutoSlide,\n\t\timages,\n\t\tonSlideBtnClick,\n\t\tshouldPauseOnHover,\n\t} = props;\n\n\tconst { carouselStore } = useCarousel({ images, onSlideBtnClick });\n\n\tconst actions = carouselStore.getState().actions;\n\n\tconst { pauseAutoSlide, resumeAutoSlide } = useCarouselOptions({\n\t\tactions,\n\t\tautoSlideInterval,\n\t\thasAutoSlide,\n\t\tshouldPauseOnHover,\n\t});\n\n\treturn (\n\t\t<CarouselStoreContextProvider store={carouselStore}>\n\t\t\t<Element\n\t\t\t\tdata-slot=\"carousel-root\"\n\t\t\t\tdata-scope=\"carousel\"\n\t\t\t\tdata-part=\"root\"\n\t\t\t\tclassName={cnMerge(\"isolate\", classNames?.base)}\n\t\t\t\tonMouseEnter={pauseAutoSlide}\n\t\t\t\tonMouseLeave={resumeAutoSlide}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-scope=\"carousel\"\n\t\t\t\t\tdata-part=\"content\"\n\t\t\t\t\tdata-slot=\"carousel-content\"\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"relative scrollbar-hidden size-full overflow-x-scroll\",\n\t\t\t\t\t\tclassNames?.content\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</Element>\n\t\t</CarouselStoreContextProvider>\n\t);\n}\n\nexport function CarouselButton(props: CarouselButtonsProps) {\n\tconst { classNames, icon, variant } = props;\n\n\tconst { goToNextSlide, goToPreviousSlide } = useCarouselStoreContext((state) => state.actions);\n\n\treturn (\n\t\t<button\n\t\t\tdata-slot={`carousel-${variant}-button`}\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"button\"\n\t\t\ttype=\"button\"\n\t\t\tclassName={cnMerge(\n\t\t\t\t\"absolute inset-y-0 z-20 flex items-center justify-center\",\n\t\t\t\tvariant === \"prev\" && \"left-0\",\n\t\t\t\tvariant === \"next\" && \"right-0\",\n\t\t\t\tclassNames?.base\n\t\t\t)}\n\t\t\tonClick={variant === \"prev\" ? goToPreviousSlide : goToNextSlide}\n\t\t>\n\t\t\t<span className={cnMerge(\"transition-transform active:scale-[1.06]\", classNames?.iconContainer)}>\n\t\t\t\t{icon ?? (\n\t\t\t\t\t<ChevronLeftIcon\n\t\t\t\t\t\tclassName={cnMerge(variant === \"next\" && \"rotate-180\", classNames?.defaultIcon)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t</button>\n\t);\n}\n\nexport function CarouselControls(props: CarouselControlProps) {\n\tconst { classNames, icon } = props;\n\n\treturn (\n\t\t<Show.Root when={icon?.iconType}>\n\t\t\t<Show.Content>\n\t\t\t\t<CarouselButton\n\t\t\t\t\tvariant=\"prev\"\n\t\t\t\t\tclassNames={{\n\t\t\t\t\t\t...classNames,\n\t\t\t\t\t\ticonContainer: cnMerge(\n\t\t\t\t\t\t\ticon?.iconType === \"nextIcon\" && \"rotate-180\",\n\t\t\t\t\t\t\tclassNames?.iconContainer\n\t\t\t\t\t\t),\n\t\t\t\t\t}}\n\t\t\t\t\ticon={icon?.icon}\n\t\t\t\t/>\n\n\t\t\t\t<CarouselButton\n\t\t\t\t\tvariant=\"next\"\n\t\t\t\t\tclassNames={{\n\t\t\t\t\t\t...classNames,\n\t\t\t\t\t\ticonContainer: cnMerge(\n\t\t\t\t\t\t\ticon?.iconType === \"prevIcon\" && \"rotate-180\",\n\t\t\t\t\t\t\tclassNames?.iconContainer\n\t\t\t\t\t\t),\n\t\t\t\t\t}}\n\t\t\t\t\ticon={icon?.icon}\n\t\t\t\t/>\n\t\t\t</Show.Content>\n\n\t\t\t<Show.Fallback>\n\t\t\t\t<CarouselButton variant=\"prev\" classNames={classNames} icon={icon?.prev} />\n\n\t\t\t\t<CarouselButton variant=\"next\" classNames={classNames} icon={icon?.next} />\n\t\t\t</Show.Fallback>\n\t\t</Show.Root>\n\t);\n}\n\nexport function CarouselItemList<TArray extends unknown[]>(props: CarouselWrapperProps<TArray[number]>) {\n\tconst { children, className, each } = props;\n\n\tconst currentSlide = useCarouselStoreContext((state) => state.currentSlide);\n\tconst images = useCarouselStoreContext((state) => each ?? (state.images as TArray));\n\n\treturn (\n\t\t<ul\n\t\t\tdata-slot=\"carousel-item-list\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"item-list\"\n\t\t\tclassName={cnMerge(\n\t\t\t\t`flex size-full transform-[translate3d(var(--translate-distance),0,0)] snap-center\n\t\t\t\ttransition-transform duration-800`,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tstyle={\n\t\t\t\t{\n\t\t\t\t\t\"--translate-distance\": `-${currentSlide * 100}%`,\n\t\t\t\t} satisfies CssWithCustomProperties as CssWithCustomProperties\n\t\t\t}\n\t\t>\n\t\t\t{isFunction(children) ?\n\t\t\t\t<For each={images} renderItem={(image, index, array) => children({ array, image, index })} />\n\t\t\t:\tchildren}\n\t\t</ul>\n\t);\n}\n\nexport function CarouselItem(props: CarouselItemProps) {\n\tconst { children, className, currentIndex, ...restOfProps } = props;\n\n\tconst currentSlide = useCarouselStoreContext((state) => state.currentSlide);\n\n\tconst isActive = currentSlide === currentIndex;\n\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"carousel-item\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"item\"\n\t\t\tdata-active={dataAttr(isActive)}\n\t\t\tclassName={cnMerge(\"relative size-full shrink-0 snap-center overflow-hidden\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</li>\n\t);\n}\n\nexport function CarouselCaption<TElement extends React.ElementType = \"div\">(\n\tprops: PolymorphicPropsStrict<\n\t\tTElement,\n\t\tOtherCarouselProps & {\n\t\t\tplacement?:\n\t\t\t\t| \"center\"\n\t\t\t\t| Exclude<`${\"bottom\" | \"center\" | \"top\"}-${\"center\" | \"left\" | \"right\"}`, \"center-center\">;\n\t\t}\n\t>\n) {\n\tconst { as: Element = \"div\", children, className, placement = \"bottom-left\" } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"carousel-caption\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"caption\"\n\t\t\tclassName={cnMerge(\n\t\t\t\t\"absolute z-10\",\n\t\t\t\tplacement === \"bottom-center\" && \"bottom-0 left-1/2 -translate-x-1/2\",\n\t\t\t\tplacement === \"bottom-left\" && \"bottom-0 left-0\",\n\t\t\t\tplacement === \"bottom-right\" && \"right-0 bottom-0\",\n\t\t\t\tplacement === \"center\" && \"top-1/2 left-1/2 -translate-1/2\",\n\t\t\t\tplacement === \"top-center\" && \"top-0 left-1/2 -translate-x-1/2\",\n\t\t\t\tplacement === \"top-left\" && \"top-0 left-0\",\n\t\t\t\tplacement === \"top-right\" && \"top-0 right-0\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\n\nexport function CarouselIndicatorList<TArray extends unknown[]>(\n\tprops: CarouselWrapperProps<TArray[number]>\n) {\n\tconst { children, className, each } = props;\n\n\tconst images = useCarouselStoreContext((state) => each ?? (state.images as TArray));\n\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"carousel-indicator-list\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"indicator-list\"\n\t\t\tclassName={cnMerge(\n\t\t\t\t\"absolute bottom-6 z-2 flex w-full items-center justify-center gap-4\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{isFunction(children) ?\n\t\t\t\t<For each={images} renderItem={(image, index, array) => children({ array, image, index })} />\n\t\t\t:\tchildren}\n\t\t</div>\n\t);\n}\n\nexport function CarouselIndicator(props: CarouselIndicatorProps) {\n\tconst { className, classNames, currentIndex, ...restOfProps } = props;\n\n\tconst {\n\t\tactions: { goToSlide },\n\t\tcurrentSlide,\n\t} = useCarouselStoreContext((state) => state);\n\n\tconst isActive = currentSlide === currentIndex;\n\n\treturn (\n\t\t<button\n\t\t\tdata-slot=\"carousel-indicator\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"indicator\"\n\t\t\tdata-active={dataAttr(isActive)}\n\t\t\ttype=\"button\"\n\t\t\tonClick={() => goToSlide(currentIndex)}\n\t\t\tclassName={cnMerge(\n\t\t\t\t\"size-1.5 rounded-[50%]\",\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisActive && [\"w-9 rounded-[6px]\", classNames?.isActive]\n\t\t\t)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n","export {\n\tCarouselButton as Button,\n\tCarouselCaption as Caption,\n\tCarouselControls as Controls,\n\tCarouselIndicator as Indicator,\n\tCarouselIndicatorList as IndicatorList,\n\tCarouselItem as Item,\n\tCarouselItemList as ItemList,\n\tCarouselRoot as Root,\n} from \"./carousel\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Show.Root","Show.Content","Show.Fallback"],"sources":["../../../../src/components/ui/carousel/carousel-store-context.ts","../../../../src/components/ui/carousel/icons.tsx","../../../../src/components/ui/carousel/useCarouselOptions.ts","../../../../src/components/ui/carousel/carousel.tsx","../../../../src/components/ui/carousel/carousel-parts.ts"],"sourcesContent":["import { createStore } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef, useStore } from \"@zayne-labs/toolkit-react\";\nimport { createReactStoreContext } from \"@zayne-labs/toolkit-react/zustand\";\nimport type { PrettyOmit } from \"@zayne-labs/toolkit-type-helpers\";\nimport { useMemo } from \"react\";\nimport type { CarouselRootProps, CarouselStore, ImagesType } from \"./types\";\n\nconst [CarouselStoreContextProvider, useCarouselStoreContext] = createReactStoreContext<CarouselStore>({\n\thookName: \"useCarouselStore\",\n\tname: \"CarouselStoreContext\",\n\tproviderName: \"CarouselRoot\",\n});\n\n// CarouselStore Creation\nconst createCarouselStore = <TImages extends ImagesType>(\n\tstoreValues: PrettyOmit<CarouselRootProps<TImages>, \"children\">\n) => {\n\tconst { images, onSlideBtnClick } = storeValues;\n\n\tconst carouselStore = createStore<CarouselStore<TImages>>((set, get) => ({\n\t\tcurrentSlide: 0,\n\t\timages,\n\t\tmaxSlide: images.length - 1,\n\n\t\t/* eslint-disable perfectionist/sort-objects -- actions should be last */\n\t\tactions: {\n\t\t\t/* eslint-enable perfectionist/sort-objects -- actions should be last */\n\n\t\t\tgoToNextSlide: () => {\n\t\t\t\tconst { currentSlide, maxSlide } = get();\n\t\t\t\tconst { goToSlide } = get().actions;\n\n\t\t\t\tif (currentSlide === maxSlide) {\n\t\t\t\t\tgoToSlide(0);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tgoToSlide(currentSlide + 1);\n\t\t\t},\n\n\t\t\tgoToPreviousSlide: () => {\n\t\t\t\tconst { currentSlide, maxSlide } = get();\n\t\t\t\tconst { goToSlide } = get().actions;\n\n\t\t\t\tif (currentSlide === 0) {\n\t\t\t\t\tgoToSlide(maxSlide);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tgoToSlide(currentSlide - 1);\n\t\t\t},\n\n\t\t\tgoToSlide: (newValue) => {\n\t\t\t\tonSlideBtnClick?.();\n\n\t\t\t\tset({ currentSlide: newValue });\n\t\t\t},\n\t\t},\n\t}));\n\n\treturn carouselStore;\n};\n\nconst useCarousel = <TImages extends ImagesType>(props: Omit<CarouselRootProps<TImages>, \"children\">) => {\n\tconst { images, onSlideBtnClick } = props;\n\n\tconst savedOnSlideBtnClick = useCallbackRef(onSlideBtnClick);\n\n\tconst carouselStore = useMemo(\n\t\t() => createCarouselStore({ images, onSlideBtnClick: savedOnSlideBtnClick }),\n\t\t[images, savedOnSlideBtnClick]\n\t);\n\n\tconst useCarouselStore: typeof useCarouselStoreContext = (selector) => {\n\t\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\t\treturn useStore(carouselStore, selector);\n\t};\n\n\tconst savedUseCarouselStore = useCallbackRef(useCarouselStore);\n\n\treturn useMemo(\n\t\t() => ({ carouselStore, useCarouselStore: savedUseCarouselStore }),\n\t\t[carouselStore, savedUseCarouselStore]\n\t);\n};\n\nexport { CarouselStoreContextProvider, useCarousel, useCarouselStoreContext };\n","export const ChevronLeftIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t\t<path d=\"m14 16l-4-4l4-4\" />\n\t\t</g>\n\t</svg>\n);\n","import { useAnimationInterval, useCallbackRef } from \"@zayne-labs/toolkit-react\";\nimport { useState } from \"react\";\nimport type { CarouselStore } from \"./types\";\n\ntype CarouselOptions = {\n\tactions: CarouselStore[\"actions\"];\n\tautoSlideInterval?: number;\n\thasAutoSlide?: boolean;\n\tshouldPauseOnHover?: boolean;\n};\n\nconst useCarouselOptions = (options: CarouselOptions) => {\n\tconst { actions, autoSlideInterval = 5000, hasAutoSlide = false, shouldPauseOnHover = false } = options;\n\n\tconst [isPaused, setIsPaused] = useState(false);\n\n\tconst shouldAutoSlide = hasAutoSlide && !isPaused;\n\n\tuseAnimationInterval({\n\t\tintervalDuration: shouldAutoSlide ? autoSlideInterval : null,\n\t\tonAnimation: actions.goToNextSlide,\n\t});\n\n\tconst pauseAutoSlide = useCallbackRef(() => shouldPauseOnHover && setIsPaused(true));\n\n\tconst resumeAutoSlide = useCallbackRef(() => shouldPauseOnHover && setIsPaused(false));\n\n\treturn { pauseAutoSlide, resumeAutoSlide };\n};\n\nexport { useCarouselOptions };\n","\"use client\";\n\nimport { dataAttr } from \"@zayne-labs/toolkit-core\";\nimport type { CssWithCustomProperties, PolymorphicPropsStrict } from \"@zayne-labs/toolkit-react/utils\";\nimport { isFunction } from \"@zayne-labs/toolkit-type-helpers\";\nimport { For } from \"@/components/common/for\";\nimport { Show } from \"@/components/common/show\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport {\n\tCarouselStoreContextProvider,\n\tuseCarousel,\n\tuseCarouselStoreContext,\n} from \"./carousel-store-context\";\nimport { ChevronLeftIcon } from \"./icons\";\nimport type {\n\tCarouselButtonsProps,\n\tCarouselControlProps,\n\tCarouselIndicatorProps,\n\tCarouselItemProps,\n\tCarouselRootProps,\n\tCarouselWrapperProps,\n\tImagesType,\n\tOtherCarouselProps,\n} from \"./types\";\nimport { useCarouselOptions } from \"./useCarouselOptions\";\n\nexport function CarouselRoot<TImages extends ImagesType, TElement extends React.ElementType = \"div\">(\n\tprops: PolymorphicPropsStrict<TElement, CarouselRootProps<TImages>>\n) {\n\tconst {\n\t\tas: Element = \"div\",\n\t\tautoSlideInterval,\n\t\tchildren,\n\t\tclassNames,\n\t\thasAutoSlide,\n\t\timages,\n\t\tonSlideBtnClick,\n\t\tshouldPauseOnHover,\n\t} = props;\n\n\tconst { carouselStore } = useCarousel({ images, onSlideBtnClick });\n\n\tconst actions = carouselStore.getState().actions;\n\n\tconst { pauseAutoSlide, resumeAutoSlide } = useCarouselOptions({\n\t\tactions,\n\t\tautoSlideInterval,\n\t\thasAutoSlide,\n\t\tshouldPauseOnHover,\n\t});\n\n\treturn (\n\t\t<CarouselStoreContextProvider store={carouselStore}>\n\t\t\t<Element\n\t\t\t\tdata-slot=\"carousel-root\"\n\t\t\t\tdata-scope=\"carousel\"\n\t\t\t\tdata-part=\"root\"\n\t\t\t\tclassName={cnMerge(\"isolate\", classNames?.base)}\n\t\t\t\tonMouseEnter={pauseAutoSlide}\n\t\t\t\tonMouseLeave={resumeAutoSlide}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-scope=\"carousel\"\n\t\t\t\t\tdata-part=\"content\"\n\t\t\t\t\tdata-slot=\"carousel-content\"\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"relative scrollbar-hidden size-full overflow-x-scroll\",\n\t\t\t\t\t\tclassNames?.content\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</Element>\n\t\t</CarouselStoreContextProvider>\n\t);\n}\n\nexport function CarouselButton(props: CarouselButtonsProps) {\n\tconst { classNames, icon, variant } = props;\n\n\tconst { goToNextSlide, goToPreviousSlide } = useCarouselStoreContext((state) => state.actions);\n\n\treturn (\n\t\t<button\n\t\t\tdata-slot={`carousel-${variant}-button`}\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"button\"\n\t\t\ttype=\"button\"\n\t\t\tclassName={cnMerge(\n\t\t\t\t\"absolute inset-y-0 z-20 flex items-center justify-center\",\n\t\t\t\tvariant === \"prev\" && \"left-0\",\n\t\t\t\tvariant === \"next\" && \"right-0\",\n\t\t\t\tclassNames?.base\n\t\t\t)}\n\t\t\tonClick={variant === \"prev\" ? goToPreviousSlide : goToNextSlide}\n\t\t>\n\t\t\t<span className={cnMerge(\"transition-transform active:scale-[1.06]\", classNames?.iconContainer)}>\n\t\t\t\t{icon ?? (\n\t\t\t\t\t<ChevronLeftIcon\n\t\t\t\t\t\tclassName={cnMerge(variant === \"next\" && \"rotate-180\", classNames?.defaultIcon)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t</button>\n\t);\n}\n\nexport function CarouselControls(props: CarouselControlProps) {\n\tconst { classNames, icon } = props;\n\n\treturn (\n\t\t<Show.Root when={icon?.iconType}>\n\t\t\t<Show.Content>\n\t\t\t\t<CarouselButton\n\t\t\t\t\tvariant=\"prev\"\n\t\t\t\t\tclassNames={{\n\t\t\t\t\t\t...classNames,\n\t\t\t\t\t\ticonContainer: cnMerge(\n\t\t\t\t\t\t\ticon?.iconType === \"nextIcon\" && \"rotate-180\",\n\t\t\t\t\t\t\tclassNames?.iconContainer\n\t\t\t\t\t\t),\n\t\t\t\t\t}}\n\t\t\t\t\ticon={icon?.icon}\n\t\t\t\t/>\n\n\t\t\t\t<CarouselButton\n\t\t\t\t\tvariant=\"next\"\n\t\t\t\t\tclassNames={{\n\t\t\t\t\t\t...classNames,\n\t\t\t\t\t\ticonContainer: cnMerge(\n\t\t\t\t\t\t\ticon?.iconType === \"prevIcon\" && \"rotate-180\",\n\t\t\t\t\t\t\tclassNames?.iconContainer\n\t\t\t\t\t\t),\n\t\t\t\t\t}}\n\t\t\t\t\ticon={icon?.icon}\n\t\t\t\t/>\n\t\t\t</Show.Content>\n\n\t\t\t<Show.Fallback>\n\t\t\t\t<CarouselButton variant=\"prev\" classNames={classNames} icon={icon?.prev} />\n\n\t\t\t\t<CarouselButton variant=\"next\" classNames={classNames} icon={icon?.next} />\n\t\t\t</Show.Fallback>\n\t\t</Show.Root>\n\t);\n}\n\nexport function CarouselItemList<TArray extends unknown[]>(props: CarouselWrapperProps<TArray[number]>) {\n\tconst { children, className, each } = props;\n\n\tconst currentSlide = useCarouselStoreContext((state) => state.currentSlide);\n\tconst images = useCarouselStoreContext((state) => each ?? (state.images as TArray));\n\n\treturn (\n\t\t<ul\n\t\t\tdata-slot=\"carousel-item-list\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"item-list\"\n\t\t\tclassName={cnMerge(\n\t\t\t\t`flex size-full transform-[translate3d(var(--translate-distance),0,0)] snap-center\n\t\t\t\ttransition-transform duration-800`,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tstyle={\n\t\t\t\t{\n\t\t\t\t\t\"--translate-distance\": `-${currentSlide * 100}%`,\n\t\t\t\t} satisfies CssWithCustomProperties as CssWithCustomProperties\n\t\t\t}\n\t\t>\n\t\t\t{isFunction(children) ?\n\t\t\t\t<For each={images} renderItem={(image, index, array) => children({ array, image, index })} />\n\t\t\t:\tchildren}\n\t\t</ul>\n\t);\n}\n\nexport function CarouselItem(props: CarouselItemProps) {\n\tconst { children, className, currentIndex, ...restOfProps } = props;\n\n\tconst currentSlide = useCarouselStoreContext((state) => state.currentSlide);\n\n\tconst isActive = currentSlide === currentIndex;\n\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"carousel-item\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"item\"\n\t\t\tdata-active={dataAttr(isActive)}\n\t\t\tclassName={cnMerge(\"relative size-full shrink-0 snap-center overflow-hidden\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</li>\n\t);\n}\n\nexport function CarouselCaption<TElement extends React.ElementType = \"div\">(\n\tprops: PolymorphicPropsStrict<\n\t\tTElement,\n\t\tOtherCarouselProps & {\n\t\t\tplacement?:\n\t\t\t\t| \"center\"\n\t\t\t\t| Exclude<`${\"bottom\" | \"center\" | \"top\"}-${\"center\" | \"left\" | \"right\"}`, \"center-center\">;\n\t\t}\n\t>\n) {\n\tconst { as: Element = \"div\", children, className, placement = \"bottom-left\" } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"carousel-caption\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"caption\"\n\t\t\tclassName={cnMerge(\n\t\t\t\t\"absolute z-10\",\n\t\t\t\tplacement === \"bottom-center\" && \"bottom-0 left-1/2 -translate-x-1/2\",\n\t\t\t\tplacement === \"bottom-left\" && \"bottom-0 left-0\",\n\t\t\t\tplacement === \"bottom-right\" && \"right-0 bottom-0\",\n\t\t\t\tplacement === \"center\" && \"top-1/2 left-1/2 -translate-1/2\",\n\t\t\t\tplacement === \"top-center\" && \"top-0 left-1/2 -translate-x-1/2\",\n\t\t\t\tplacement === \"top-left\" && \"top-0 left-0\",\n\t\t\t\tplacement === \"top-right\" && \"top-0 right-0\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\n\nexport function CarouselIndicatorList<TArray extends unknown[]>(\n\tprops: CarouselWrapperProps<TArray[number]>\n) {\n\tconst { children, className, each } = props;\n\n\tconst images = useCarouselStoreContext((state) => each ?? (state.images as TArray));\n\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"carousel-indicator-list\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"indicator-list\"\n\t\t\tclassName={cnMerge(\n\t\t\t\t\"absolute bottom-6 z-2 flex w-full items-center justify-center gap-4\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{isFunction(children) ?\n\t\t\t\t<For each={images} renderItem={(image, index, array) => children({ array, image, index })} />\n\t\t\t:\tchildren}\n\t\t</div>\n\t);\n}\n\nexport function CarouselIndicator(props: CarouselIndicatorProps) {\n\tconst { className, classNames, currentIndex, ...restOfProps } = props;\n\n\tconst {\n\t\tactions: { goToSlide },\n\t\tcurrentSlide,\n\t} = useCarouselStoreContext((state) => state);\n\n\tconst isActive = currentSlide === currentIndex;\n\n\treturn (\n\t\t<button\n\t\t\tdata-slot=\"carousel-indicator\"\n\t\t\tdata-scope=\"carousel\"\n\t\t\tdata-part=\"indicator\"\n\t\t\tdata-active={dataAttr(isActive)}\n\t\t\ttype=\"button\"\n\t\t\tonClick={() => goToSlide(currentIndex)}\n\t\t\tclassName={cnMerge(\n\t\t\t\t\"size-1.5 rounded-[50%]\",\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisActive && [\"w-9 rounded-[6px]\", classNames?.isActive]\n\t\t\t)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n","export {\n\tCarouselButton as Button,\n\tCarouselCaption as Caption,\n\tCarouselControls as Controls,\n\tCarouselIndicator as Indicator,\n\tCarouselIndicatorList as IndicatorList,\n\tCarouselItem as Item,\n\tCarouselItemList as ItemList,\n\tCarouselRoot as Root,\n} from \"./carousel\";\n"],"mappings":";;;;;;;;;;;;AAOA,MAAM,CAAC,8BAA8B,2BAA2B,wBAAuC;CACtG,UAAU;CACV,MAAM;CACN,cAAc;AACf,CAAC;AAGD,MAAM,uBACL,gBACI;CACJ,MAAM,EAAE,QAAQ,oBAAoB;CA2CpC,OAzCsB,aAAqC,KAAK,SAAS;EACxE,cAAc;EACd;EACA,UAAU,OAAO,SAAS;EAG1B,SAAS;GAGR,qBAAqB;IACpB,MAAM,EAAE,cAAc,aAAa,IAAI;IACvC,MAAM,EAAE,cAAc,IAAI,EAAE;IAE5B,IAAI,iBAAiB,UAAU;KAC9B,UAAU,CAAC;KACX;IACD;IAEA,UAAU,eAAe,CAAC;GAC3B;GAEA,yBAAyB;IACxB,MAAM,EAAE,cAAc,aAAa,IAAI;IACvC,MAAM,EAAE,cAAc,IAAI,EAAE;IAE5B,IAAI,iBAAiB,GAAG;KACvB,UAAU,QAAQ;KAClB;IACD;IAEA,UAAU,eAAe,CAAC;GAC3B;GAEA,YAAY,aAAa;IACxB,kBAAkB;IAElB,IAAI,EAAE,cAAc,SAAS,CAAC;GAC/B;EACD;CACD,EAEmB;AACpB;AAEA,MAAM,eAA2C,UAAwD;CACxG,MAAM,EAAE,QAAQ,oBAAoB;CAEpC,MAAM,uBAAuB,eAAe,eAAe;CAE3D,MAAM,gBAAgB,cACf,oBAAoB;EAAE;EAAQ,iBAAiB;CAAqB,CAAC,GAC3E,CAAC,QAAQ,oBAAoB,CAC9B;CAEA,MAAM,oBAAoD,aAAa;EAEtE,OAAO,SAAS,eAAe,QAAQ;CACxC;CAEA,MAAM,wBAAwB,eAAe,gBAAgB;CAE7D,OAAO,eACC;EAAE;EAAe,kBAAkB;CAAsB,IAChE,CAAC,eAAe,qBAAqB,CACtC;AACD;;;ACpFA,MAAa,mBAAmB,UAC/B,oBAAC,OAAD;CAAK,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WACxF,qBAAC,KAAD;EAAG,MAAK;EAAO,QAAO;EAAe,eAAc;EAAQ,gBAAe;EAAQ,aAAY;YAA9F,CACC,oBAAC,UAAD;GAAQ,IAAG;GAAK,IAAG;GAAK,GAAE;EAAM,CAAA,GAChC,oBAAC,QAAD,EAAM,GAAE,kBAAmB,CAAA,CACzB;;AACC,CAAA;;;ACKN,MAAM,sBAAsB,YAA6B;CACxD,MAAM,EAAE,SAAS,oBAAoB,KAAM,eAAe,OAAO,qBAAqB,UAAU;CAEhG,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAI9C,qBAAqB;EACpB,kBAHuB,gBAAgB,CAAC,WAGJ,oBAAoB;EACxD,aAAa,QAAQ;CACtB,CAAC;CAMD,OAAO;EAAE,gBAJc,qBAAqB,sBAAsB,YAAY,IAAI,CAI5D;EAAG,iBAFD,qBAAqB,sBAAsB,YAAY,KAAK,CAE7C;CAAE;AAC1C;;;ACFA,SAAgB,aACf,OACC;CACD,MAAM,EACL,IAAI,UAAU,OACd,mBACA,UACA,YACA,cACA,QACA,iBACA,uBACG;CAEJ,MAAM,EAAE,kBAAkB,YAAY;EAAE;EAAQ;CAAgB,CAAC;CAEjE,MAAM,UAAU,cAAc,SAAS,EAAE;CAEzC,MAAM,EAAE,gBAAgB,oBAAoB,mBAAmB;EAC9D;EACA;EACA;EACA;CACD,CAAC;CAED,OACC,oBAAC,8BAAD;EAA8B,OAAO;YACpC,oBAAC,SAAD;GACC,aAAU;GACV,cAAW;GACX,aAAU;GACV,WAAW,QAAQ,WAAW,YAAY,IAAI;GAC9C,cAAc;GACd,cAAc;aAEd,oBAAC,OAAD;IACC,cAAW;IACX,aAAU;IACV,aAAU;IACV,WAAW,QACV,yDACA,YAAY,OACb;IAEC;GACG,CAAA;EACG,CAAA;CACoB,CAAA;AAEhC;AAEA,SAAgB,eAAe,OAA6B;CAC3D,MAAM,EAAE,YAAY,MAAM,YAAY;CAEtC,MAAM,EAAE,eAAe,sBAAsB,yBAAyB,UAAU,MAAM,OAAO;CAE7F,OACC,oBAAC,UAAD;EACC,aAAW,YAAY,QAAQ;EAC/B,cAAW;EACX,aAAU;EACV,MAAK;EACL,WAAW,QACV,4DACA,YAAY,UAAU,UACtB,YAAY,UAAU,WACtB,YAAY,IACb;EACA,SAAS,YAAY,SAAS,oBAAoB;YAElD,oBAAC,QAAD;GAAM,WAAW,QAAQ,4CAA4C,YAAY,aAAa;aAC5F,QACA,oBAAC,iBAAD,EACC,WAAW,QAAQ,YAAY,UAAU,cAAc,YAAY,WAAW,EAC9E,CAAA;EAEG,CAAA;CACC,CAAA;AAEV;AAEA,SAAgB,iBAAiB,OAA6B;CAC7D,MAAM,EAAE,YAAY,SAAS;CAE7B,OACC,qBAACA,UAAD;EAAW,MAAM,MAAM;YAAvB,CACC,qBAACC,aAAD,EAAA,UAAA,CACC,oBAAC,gBAAD;GACC,SAAQ;GACR,YAAY;IACX,GAAG;IACH,eAAe,QACd,MAAM,aAAa,cAAc,cACjC,YAAY,aACb;GACD;GACA,MAAM,MAAM;EACZ,CAAA,GAED,oBAAC,gBAAD;GACC,SAAQ;GACR,YAAY;IACX,GAAG;IACH,eAAe,QACd,MAAM,aAAa,cAAc,cACjC,YAAY,aACb;GACD;GACA,MAAM,MAAM;EACZ,CAAA,CACY,EAAA,CAAA,GAEd,qBAACC,cAAD,EAAA,UAAA,CACC,oBAAC,gBAAD;GAAgB,SAAQ;GAAmB;GAAY,MAAM,MAAM;EAAO,CAAA,GAE1E,oBAAC,gBAAD;GAAgB,SAAQ;GAAmB;GAAY,MAAM,MAAM;EAAO,CAAA,CAC5D,EAAA,CAAA,CACL;;AAEb;AAEA,SAAgB,iBAA2C,OAA6C;CACvG,MAAM,EAAE,UAAU,WAAW,SAAS;CAEtC,MAAM,eAAe,yBAAyB,UAAU,MAAM,YAAY;CAC1E,MAAM,SAAS,yBAAyB,UAAU,QAAS,MAAM,MAAiB;CAElF,OACC,oBAAC,MAAD;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACV,WAAW,QACV;wCAEA,SACD;EACA,OACC,EACC,wBAAwB,IAAI,eAAe,IAAI,GAChD;YAGA,WAAW,QAAQ,IACnB,oBAAC,KAAD;GAAK,MAAM;GAAQ,aAAa,OAAO,OAAO,UAAU,SAAS;IAAE;IAAO;IAAO;GAAM,CAAC;EAAI,CAAA,IAC3F;CACC,CAAA;AAEN;AAEA,SAAgB,aAAa,OAA0B;CACtD,MAAM,EAAE,UAAU,WAAW,cAAc,GAAG,gBAAgB;CAM9D,OACC,oBAAC,MAAD;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACV,eAAa,SATM,yBAAyB,UAAU,MAAM,YAElC,MAAM,YAOF;EAC9B,WAAW,QAAQ,2DAA2D,SAAS;EACvF,GAAI;EAEH;CACE,CAAA;AAEN;AAEA,SAAgB,gBACf,OAQC;CACD,MAAM,EAAE,IAAI,UAAU,OAAO,UAAU,WAAW,YAAY,kBAAkB;CAEhF,OACC,oBAAC,SAAD;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACV,WAAW,QACV,iBACA,cAAc,mBAAmB,sCACjC,cAAc,iBAAiB,mBAC/B,cAAc,kBAAkB,oBAChC,cAAc,YAAY,mCAC1B,cAAc,gBAAgB,mCAC9B,cAAc,cAAc,gBAC5B,cAAc,eAAe,iBAC7B,SACD;EAEC;CACO,CAAA;AAEX;AAEA,SAAgB,sBACf,OACC;CACD,MAAM,EAAE,UAAU,WAAW,SAAS;CAEtC,MAAM,SAAS,yBAAyB,UAAU,QAAS,MAAM,MAAiB;CAElF,OACC,oBAAC,OAAD;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACV,WAAW,QACV,uEACA,SACD;YAEC,WAAW,QAAQ,IACnB,oBAAC,KAAD;GAAK,MAAM;GAAQ,aAAa,OAAO,OAAO,UAAU,SAAS;IAAE;IAAO;IAAO;GAAM,CAAC;EAAI,CAAA,IAC3F;CACE,CAAA;AAEP;AAEA,SAAgB,kBAAkB,OAA+B;CAChE,MAAM,EAAE,WAAW,YAAY,cAAc,GAAG,gBAAgB;CAEhE,MAAM,EACL,SAAS,EAAE,aACX,iBACG,yBAAyB,UAAU,KAAK;CAE5C,MAAM,WAAW,iBAAiB;CAElC,OACC,oBAAC,UAAD;EACC,aAAU;EACV,cAAW;EACX,aAAU;EACV,eAAa,SAAS,QAAQ;EAC9B,MAAK;EACL,eAAe,UAAU,YAAY;EACrC,WAAW,QACV,0BACA,WACA,YAAY,MACZ,YAAY,CAAC,qBAAqB,YAAY,QAAQ,CACvD;EACA,GAAI;CACJ,CAAA;AAEH"}
|
|
@@ -1,86 +1,16 @@
|
|
|
1
1
|
import { InferProps, PolymorphicPropsStrict } from "@zayne-labs/toolkit-react/utils";
|
|
2
|
-
import * as _$_zayne_labs_toolkit_type_helpers0 from "@zayne-labs/toolkit-type-helpers";
|
|
3
2
|
import { SelectorFn } from "@zayne-labs/toolkit-type-helpers";
|
|
4
|
-
import * as _$react from "react";
|
|
5
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
6
|
-
import * as _$_zayne_labs_toolkit_core0 from "@zayne-labs/toolkit-core";
|
|
7
3
|
|
|
8
4
|
//#region src/components/ui/drag-scroll/drag-scroll-context.d.ts
|
|
9
5
|
declare const DragScrollStoreContextProvider: (props: {
|
|
10
6
|
children: React.ReactNode;
|
|
11
|
-
store:
|
|
12
|
-
|
|
13
|
-
getListeners: () => Set<(state: DragScrollStore, prevState: DragScrollStore) => void>;
|
|
14
|
-
getState: () => DragScrollStore;
|
|
15
|
-
resetState: () => void;
|
|
16
|
-
setState: {
|
|
17
|
-
(stateUpdate: Partial<DragScrollStore> | ((prevState: DragScrollStore) => Partial<DragScrollStore>), options?: ({
|
|
18
|
-
onNotifySync?: ((previousState: DragScrollStore) => void) | undefined;
|
|
19
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DragScrollStore) => void) | undefined;
|
|
20
|
-
shouldNotifySync?: boolean | undefined;
|
|
21
|
-
} & {
|
|
22
|
-
shouldReplace?: false;
|
|
23
|
-
}) | undefined): void;
|
|
24
|
-
(stateUpdate: DragScrollStore | ((prevState: DragScrollStore) => DragScrollStore), options?: ({
|
|
25
|
-
onNotifySync?: ((previousState: DragScrollStore) => void) | undefined;
|
|
26
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DragScrollStore) => void) | undefined;
|
|
27
|
-
shouldNotifySync?: boolean | undefined;
|
|
28
|
-
} & {
|
|
29
|
-
shouldReplace: true;
|
|
30
|
-
}) | undefined): void;
|
|
31
|
-
};
|
|
32
|
-
subscribe: _$_zayne_labs_toolkit_core0.SubscribeFn<DragScrollStore>;
|
|
33
|
-
};
|
|
34
|
-
}) => _$react.FunctionComponentElement<_$react.ProviderProps<{
|
|
35
|
-
getInitialState: () => DragScrollStore;
|
|
36
|
-
getListeners: () => Set<(state: DragScrollStore, prevState: DragScrollStore) => void>;
|
|
37
|
-
getState: () => DragScrollStore;
|
|
38
|
-
resetState: () => void;
|
|
39
|
-
setState: {
|
|
40
|
-
(stateUpdate: Partial<DragScrollStore> | ((prevState: DragScrollStore) => Partial<DragScrollStore>), options?: ({
|
|
41
|
-
onNotifySync?: ((previousState: DragScrollStore) => void) | undefined;
|
|
42
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DragScrollStore) => void) | undefined;
|
|
43
|
-
shouldNotifySync?: boolean | undefined;
|
|
44
|
-
} & {
|
|
45
|
-
shouldReplace?: false;
|
|
46
|
-
}) | undefined): void;
|
|
47
|
-
(stateUpdate: DragScrollStore | ((prevState: DragScrollStore) => DragScrollStore), options?: ({
|
|
48
|
-
onNotifySync?: ((previousState: DragScrollStore) => void) | undefined;
|
|
49
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DragScrollStore) => void) | undefined;
|
|
50
|
-
shouldNotifySync?: boolean | undefined;
|
|
51
|
-
} & {
|
|
52
|
-
shouldReplace: true;
|
|
53
|
-
}) | undefined): void;
|
|
54
|
-
};
|
|
55
|
-
subscribe: _$_zayne_labs_toolkit_core0.SubscribeFn<DragScrollStore>;
|
|
56
|
-
}>>, useDragScrollStoreContext: <TResult = DragScrollStore>(selector?: _$_zayne_labs_toolkit_type_helpers0.SelectorFn<DragScrollStore, TResult> | undefined) => TResult;
|
|
7
|
+
store: import("@zayne-labs/toolkit-core").StoreApiImpl<DragScrollStore>;
|
|
8
|
+
}) => import("react").FunctionComponentElement<import("react").ProviderProps<import("@zayne-labs/toolkit-core").StoreApiImpl<DragScrollStore>>>, useDragScrollStoreContext: <TResult = DragScrollStore>(selector?: import("@zayne-labs/toolkit-type-helpers").SelectorFn<DragScrollStore, TResult> | undefined) => TResult;
|
|
57
9
|
//#endregion
|
|
58
10
|
//#region src/components/ui/drag-scroll/drag-scroll-store.d.ts
|
|
59
11
|
type RequiredUseDragScrollProps = { [Key in keyof Required<UseDragScrollProps>]: UseDragScrollProps[Key] | undefined };
|
|
60
12
|
type InitStoreValues = Pick<RequiredUseDragScrollProps, "orientation" | "scrollAmount">;
|
|
61
|
-
declare const createDragScrollStore: (initStoreValues: InitStoreValues) =>
|
|
62
|
-
getInitialState: () => DragScrollStore;
|
|
63
|
-
getListeners: () => Set<(state: DragScrollStore, prevState: DragScrollStore) => void>;
|
|
64
|
-
getState: () => DragScrollStore;
|
|
65
|
-
resetState: () => void;
|
|
66
|
-
setState: {
|
|
67
|
-
(stateUpdate: Partial<DragScrollStore> | ((prevState: DragScrollStore) => Partial<DragScrollStore>), options?: ({
|
|
68
|
-
onNotifySync?: ((previousState: DragScrollStore) => void) | undefined;
|
|
69
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DragScrollStore) => void) | undefined;
|
|
70
|
-
shouldNotifySync?: boolean | undefined;
|
|
71
|
-
} & {
|
|
72
|
-
shouldReplace?: false;
|
|
73
|
-
}) | undefined): void;
|
|
74
|
-
(stateUpdate: DragScrollStore | ((prevState: DragScrollStore) => DragScrollStore), options?: ({
|
|
75
|
-
onNotifySync?: ((previousState: DragScrollStore) => void) | undefined;
|
|
76
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DragScrollStore) => void) | undefined;
|
|
77
|
-
shouldNotifySync?: boolean | undefined;
|
|
78
|
-
} & {
|
|
79
|
-
shouldReplace: true;
|
|
80
|
-
}) | undefined): void;
|
|
81
|
-
};
|
|
82
|
-
subscribe: _$_zayne_labs_toolkit_core0.SubscribeFn<DragScrollStore>;
|
|
83
|
-
};
|
|
13
|
+
declare const createDragScrollStore: (initStoreValues: InitStoreValues) => import("@zayne-labs/toolkit-core").StoreApiImpl<DragScrollStore>;
|
|
84
14
|
//#endregion
|
|
85
15
|
//#region src/components/ui/drag-scroll/types.d.ts
|
|
86
16
|
type RecordForDataAttr = Record<`data-${string}`, unknown>;
|
|
@@ -180,28 +110,28 @@ type DragScrollRootProps = UseDragScrollProps & {
|
|
|
180
110
|
asChild?: boolean;
|
|
181
111
|
children: React.ReactNode;
|
|
182
112
|
} & PartInputProps["root"];
|
|
183
|
-
declare function DragScrollRoot(props: DragScrollRootProps):
|
|
113
|
+
declare function DragScrollRoot(props: DragScrollRootProps): import("react/jsx-runtime").JSX.Element;
|
|
184
114
|
type DragScrollContextProps<TSlice> = {
|
|
185
115
|
children: React.ReactNode | ((context: TSlice) => React.ReactNode);
|
|
186
116
|
selector?: SelectorFn<DragScrollStore, TSlice>;
|
|
187
117
|
};
|
|
188
|
-
declare function DragScrollContext<TSlice = DragScrollStore>(props: DragScrollContextProps<TSlice>):
|
|
118
|
+
declare function DragScrollContext<TSlice = DragScrollStore>(props: DragScrollContextProps<TSlice>): import("react").ReactNode;
|
|
189
119
|
type DragScrollListProps = {
|
|
190
120
|
asChild?: boolean;
|
|
191
121
|
} & PartInputProps["list"];
|
|
192
|
-
declare function DragScrollList<TElement extends React.ElementType = "ul">(props: PolymorphicPropsStrict<TElement, DragScrollListProps>):
|
|
122
|
+
declare function DragScrollList<TElement extends React.ElementType = "ul">(props: PolymorphicPropsStrict<TElement, DragScrollListProps>): import("react/jsx-runtime").JSX.Element;
|
|
193
123
|
type DragScrollItemProps = {
|
|
194
124
|
asChild?: boolean;
|
|
195
125
|
} & PartInputProps["item"];
|
|
196
|
-
declare function DragScrollItem<TElement extends React.ElementType = "li">(props: PolymorphicPropsStrict<TElement, DragScrollItemProps>):
|
|
126
|
+
declare function DragScrollItem<TElement extends React.ElementType = "li">(props: PolymorphicPropsStrict<TElement, DragScrollItemProps>): import("react/jsx-runtime").JSX.Element;
|
|
197
127
|
type DragScrollPrevProps = {
|
|
198
128
|
asChild?: boolean;
|
|
199
129
|
} & PartInputProps["prevButton"];
|
|
200
|
-
declare function DragScrollPrev(props: DragScrollPrevProps):
|
|
130
|
+
declare function DragScrollPrev(props: DragScrollPrevProps): import("react/jsx-runtime").JSX.Element;
|
|
201
131
|
type DragScrollNextProps = {
|
|
202
132
|
asChild?: boolean;
|
|
203
133
|
} & PartInputProps["nextButton"];
|
|
204
|
-
declare function DragScrollNext(props: DragScrollNextProps):
|
|
134
|
+
declare function DragScrollNext(props: DragScrollNextProps): import("react/jsx-runtime").JSX.Element;
|
|
205
135
|
declare namespace drag_scroll_parts_d_exports {
|
|
206
136
|
export { DragScrollContext as Context, DragScrollItem as Item, DragScrollList as List, DragScrollNext as Next, DragScrollPrev as Prev, DragScrollRoot as Root };
|
|
207
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Slot.Root"],"sources":["../../../../src/components/ui/drag-scroll/utils.ts","../../../../src/components/ui/drag-scroll/drag-scroll-store.ts","../../../../src/components/ui/drag-scroll/use-drag-scroll.ts","../../../../src/components/ui/drag-scroll/drag-scroll-context.ts","../../../../src/components/ui/drag-scroll/drag-scroll.tsx","../../../../src/components/ui/drag-scroll/drag-scroll-parts.ts"],"sourcesContent":["import { checkIsDeviceMobile } from \"@zayne-labs/toolkit-core\";\n\n/* eslint-disable no-param-reassign -- Mutation is needed here since it's an element */\nexport const updateCursor = <TElement extends HTMLElement>(element: TElement) => {\n\telement.style.cursor = \"grabbing\";\n\telement.style.userSelect = \"none\";\n};\n\nexport const onScrollSnap = <TElement extends HTMLElement>(\n\taction: \"remove\" | \"reset\",\n\telement: TElement\n) => {\n\tif (action === \"remove\") {\n\t\telement.style.scrollSnapType = \"none\";\n\t\treturn;\n\t}\n\n\telement.style.scrollSnapType = \"\";\n};\n\nexport const resetCursor = <TElement extends HTMLElement>(element: TElement) => {\n\telement.style.cursor = \"\";\n\telement.style.userSelect = \"\";\n};\n/* eslint-enable no-param-reassign -- Mutation is needed here since it's an element */\n\nexport const handleScrollSnap = (dragContainer: HTMLElement) => {\n\tconst isMobile = checkIsDeviceMobile();\n\n\tif (!isMobile) {\n\t\tonScrollSnap(\"remove\", dragContainer);\n\t} else {\n\t\tonScrollSnap(\"reset\", dragContainer);\n\t}\n};\n","import { createStore, on, throttleByFrame } from \"@zayne-labs/toolkit-core\";\nimport { isNumber } from \"@zayne-labs/toolkit-type-helpers\";\nimport type { DragScrollStore, UseDragScrollProps } from \"./types\";\nimport { handleScrollSnap, resetCursor, updateCursor } from \"./utils\";\n\ntype RequiredUseDragScrollProps = {\n\t[Key in keyof Required<UseDragScrollProps>]: UseDragScrollProps[Key] | undefined;\n};\n\ntype InitStoreValues = Pick<RequiredUseDragScrollProps, \"orientation\" | \"scrollAmount\">;\n\nexport const createDragScrollStore = (initStoreValues: InitStoreValues) => {\n\tconst { orientation = \"horizontal\", scrollAmount = \"item\" } = initStoreValues;\n\n\tconst listRef: React.RefObject<HTMLElement | null> = {\n\t\tcurrent: null,\n\t};\n\n\tconst positionRef = {\n\t\tcurrent: {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t},\n\t};\n\n\tconst abortControllerRef = {\n\t\tcurrent: {\n\t\t\tmouseLeave: new AbortController(),\n\t\t\tmouseMove: new AbortController(),\n\t\t\tmouseUp: new AbortController(),\n\t\t},\n\t};\n\n\t// == Calculate scroll amount based on orientation and settings\n\tconst getScrollAmount = (container: HTMLElement): number => {\n\t\tif (isNumber(scrollAmount)) {\n\t\t\treturn scrollAmount;\n\t\t}\n\n\t\tconst firstChild = container.children[0] as HTMLElement | undefined;\n\n\t\tif (!firstChild) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn orientation === \"vertical\" || orientation === \"both\" ?\n\t\t\t\tfirstChild.offsetHeight\n\t\t\t:\tfirstChild.offsetWidth;\n\t};\n\n\tconst store = createStore<DragScrollStore>((set, get) => ({\n\t\tcanGoToNext: true,\n\t\tcanGoToPrev: false,\n\t\tisDragging: false,\n\n\t\t// eslint-disable-next-line perfectionist/sort-objects -- actions should be last\n\t\tactions: {\n\t\t\tcleanupDragListeners: () => {\n\t\t\t\tabortControllerRef.current.mouseMove.abort();\n\t\t\t\tabortControllerRef.current.mouseUp.abort();\n\t\t\t\tabortControllerRef.current.mouseLeave.abort();\n\t\t\t},\n\n\t\t\tgoToNext: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tconst { canGoToNext } = get();\n\t\t\t\tif (!canGoToNext) return;\n\n\t\t\t\tconst amount = getScrollAmount(listRef.current);\n\n\t\t\t\tlistRef.current.scrollBy({\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t\tleft: orientation === \"vertical\" ? 0 : amount,\n\t\t\t\t\ttop: orientation === \"vertical\" || orientation === \"both\" ? amount : 0,\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tgoToPrev: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tconst { canGoToPrev } = get();\n\t\t\t\tif (!canGoToPrev) return;\n\n\t\t\t\tconst amount = getScrollAmount(listRef.current);\n\n\t\t\t\tlistRef.current.scrollBy({\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t\tleft: orientation === \"vertical\" ? 0 : -amount,\n\t\t\t\t\ttop: orientation === \"vertical\" || orientation === \"both\" ? -amount : 0,\n\t\t\t\t});\n\t\t\t},\n\n\t\t\thandleMouseDown: (event) => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\t// == Create fresh AbortControllers for each drag session (they cannot be reused after abort)\n\t\t\t\tabortControllerRef.current = {\n\t\t\t\t\tmouseLeave: new AbortController(),\n\t\t\t\t\tmouseMove: new AbortController(),\n\t\t\t\t\tmouseUp: new AbortController(),\n\t\t\t\t};\n\n\t\t\t\t// == Update all initial position properties\n\t\t\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\t\t\tpositionRef.current.x = event.clientX;\n\t\t\t\t\tpositionRef.current.left = listRef.current.scrollLeft;\n\t\t\t\t}\n\n\t\t\t\tif (orientation === \"vertical\" || orientation === \"both\") {\n\t\t\t\t\tpositionRef.current.y = event.clientY;\n\t\t\t\t\tpositionRef.current.top = listRef.current.scrollTop;\n\t\t\t\t}\n\n\t\t\t\tupdateCursor(listRef.current);\n\t\t\t\tset({ isDragging: true });\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\ton(listRef.current, \"mousemove\", actions.handleMouseMove, {\n\t\t\t\t\tsignal: abortControllerRef.current.mouseMove.signal,\n\t\t\t\t});\n\t\t\t\ton(listRef.current, \"mouseup\", actions.handleMouseUpOrLeave, {\n\t\t\t\t\tsignal: abortControllerRef.current.mouseUp.signal,\n\t\t\t\t});\n\t\t\t\ton(listRef.current, \"mouseleave\", actions.handleMouseUpOrLeave, {\n\t\t\t\t\tsignal: abortControllerRef.current.mouseLeave.signal,\n\t\t\t\t});\n\t\t\t\t// == Document-level mouseup fallback for when user releases outside the container\n\t\t\t\ton(document, \"mouseup\", actions.handleMouseUpOrLeave, {\n\t\t\t\t\tonce: true,\n\t\t\t\t\tsignal: abortControllerRef.current.mouseUp.signal,\n\t\t\t\t});\n\t\t\t},\n\n\t\t\thandleMouseMove: (event) => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\t\t\tconst dx = event.clientX - positionRef.current.x;\n\t\t\t\t\tlistRef.current.scrollLeft = positionRef.current.left - dx;\n\t\t\t\t}\n\n\t\t\t\tif (orientation === \"vertical\" || orientation === \"both\") {\n\t\t\t\t\tconst dy = event.clientY - positionRef.current.y;\n\t\t\t\t\tlistRef.current.scrollTop = positionRef.current.top - dy;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\thandleMouseUpOrLeave: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tresetCursor(listRef.current);\n\t\t\t\tset({ isDragging: false });\n\n\t\t\t\tconst { actions } = get();\n\t\t\t\tactions.cleanupDragListeners();\n\t\t\t},\n\n\t\t\thandleScroll: throttleByFrame(() => {\n\t\t\t\tconst { actions } = get();\n\t\t\t\tactions.updateScrollState();\n\t\t\t}),\n\n\t\t\tinitializeResizeObserver: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\t// == Use ResizeObserver to detect when container or children resize\n\t\t\t\tconst resizeObserver = new ResizeObserver(() => actions.updateScrollState());\n\n\t\t\t\tresizeObserver.observe(listRef.current);\n\n\t\t\t\t// == Also observe children for size changes\n\t\t\t\tfor (const child of listRef.current.children) {\n\t\t\t\t\tresizeObserver.observe(child);\n\t\t\t\t}\n\n\t\t\t\tconst cleanup = () => {\n\t\t\t\t\tresizeObserver.disconnect();\n\t\t\t\t};\n\n\t\t\t\treturn cleanup;\n\t\t\t},\n\n\t\t\tsetListRef: (element) => {\n\t\t\t\tlistRef.current = element;\n\n\t\t\t\tif (!element) return;\n\n\t\t\t\thandleScrollSnap(element);\n\n\t\t\t\tconst { actions } = get();\n\t\t\t\tactions.updateScrollState();\n\t\t\t},\n\n\t\t\tupdateScrollState: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\t\t\tconst { clientWidth, scrollLeft, scrollWidth } = listRef.current;\n\n\t\t\t\t\tset({\n\t\t\t\t\t\tcanGoToNext: Math.ceil(scrollLeft + clientWidth) < scrollWidth,\n\t\t\t\t\t\tcanGoToPrev: Math.floor(scrollLeft) > 0,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (orientation === \"vertical\") {\n\t\t\t\t\tconst { clientHeight, scrollHeight, scrollTop } = listRef.current;\n\n\t\t\t\t\tset({\n\t\t\t\t\t\tcanGoToNext: Math.ceil(scrollTop + clientHeight) < scrollHeight,\n\t\t\t\t\t\tcanGoToPrev: Math.floor(scrollTop) > 0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t}));\n\n\treturn store;\n};\n","import { dataAttr, on } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef, useStore } from \"@zayne-labs/toolkit-react\";\nimport { composeRefs, composeTwoEventHandlers } from \"@zayne-labs/toolkit-react/utils\";\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport type { FromCamelToKebabCase } from \"@/lib/utils/type-helpers\";\nimport { createDragScrollStore } from \"./drag-scroll-store\";\nimport type { DragScrollPropGetters, PartProps, UseDragScrollProps, UseDragScrollResult } from \"./types\";\n\nexport const getDragScrollScopeAttrs = (part: FromCamelToKebabCase<keyof PartProps>) => {\n\treturn {\n\t\t/* eslint-disable perfectionist/sort-objects -- I need this order to be maintained */\n\t\t\"data-slot\": `drag-scroll-${part}`,\n\t\t\"data-scope\": \"drag-scroll\",\n\t\t\"data-part\": part,\n\t\t/* eslint-enable perfectionist/sort-objects -- I need this order to be maintained */\n\t} as const;\n};\n\nexport const useDragScroll = <TContainerElement extends HTMLElement = HTMLElement>(\n\tprops?: UseDragScrollProps\n): UseDragScrollResult<TContainerElement> => {\n\tconst {\n\t\tdisableInternalStateSubscription = false,\n\t\torientation = \"horizontal\",\n\t\tscrollAmount = \"item\",\n\t} = props ?? {};\n\n\tconst listRef = useRef<TContainerElement>(null);\n\n\tconst storeApi = useMemo(() => {\n\t\treturn createDragScrollStore({ orientation, scrollAmount });\n\t}, [orientation, scrollAmount]);\n\n\tconst actions = storeApi.getState().actions;\n\n\t/* eslint-disable react-hooks/hooks -- ignore */\n\tconst useDragScrollStore: UseDragScrollResult<TContainerElement>[\"useDragScrollStore\"] = (selector) => {\n\t\treturn useStore(storeApi as never, selector);\n\t};\n\n\tconst canGoToPrev = useDragScrollStore((state) =>\n\t\t!disableInternalStateSubscription ? state.canGoToPrev : null\n\t);\n\n\tconst canGoToNext = useDragScrollStore((state) =>\n\t\t!disableInternalStateSubscription ? state.canGoToNext : null\n\t);\n\n\tconst isDragging = useDragScrollStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isDragging : null\n\t);\n\t/* eslint-enable react-hooks/hooks -- ignore */\n\n\tconst refCallback: React.RefCallback<TContainerElement> = useCallbackRef((node) => {\n\t\tlistRef.current = node;\n\t\tactions.setListRef(node);\n\n\t\tif (!node) return;\n\n\t\tconst cleanupMouseDown = on(node, \"mousedown\", actions.handleMouseDown);\n\t\tconst cleanupScroll = on(node, \"scroll\", actions.handleScroll, { passive: true });\n\n\t\treturn () => {\n\t\t\tcleanupMouseDown();\n\t\t\tcleanupScroll();\n\t\t};\n\t});\n\n\t// == Update scroll state when children might change (e.g., async loaded content)\n\tuseEffect(() => {\n\t\tconst cleanup = actions.initializeResizeObserver();\n\n\t\treturn cleanup;\n\t}, [actions]);\n\n\tconst getRootProps: DragScrollPropGetters<TContainerElement>[\"getRootProps\"] = useCallbackRef(\n\t\t(innerProps) => {\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"root\"),\n\t\t\t\tclassName: cnMerge(\"relative\", innerProps?.className),\n\t\t\t};\n\t\t}\n\t);\n\n\tconst getListProps: DragScrollPropGetters<TContainerElement>[\"getListProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"list\"),\n\t\t\t\t...(!disableInternalStateSubscription && {\n\t\t\t\t\t\"data-dragging\": dataAttr(isDragging),\n\t\t\t\t}),\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t`scrollbar-hidden flex w-full cursor-grab snap-x snap-mandatory overflow-x-scroll overflow-y-hidden`,\n\t\t\t\t\torientation === \"horizontal\" && \"flex-row\",\n\t\t\t\t\torientation === \"vertical\" && \"flex-col\",\n\t\t\t\t\tinnerProps?.className\n\t\t\t\t),\n\t\t\t\tref: composeRefs(\n\t\t\t\t\trefCallback,\n\t\t\t\t\t(innerProps as { ref?: React.Ref<TContainerElement> } | undefined)?.ref\n\t\t\t\t),\n\t\t\t} as never;\n\t\t},\n\t\t[disableInternalStateSubscription, isDragging, orientation, refCallback]\n\t);\n\n\tconst getItemProps: DragScrollPropGetters<TContainerElement>[\"getItemProps\"] = useCallbackRef(\n\t\t(innerProps) => {\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"item\"),\n\t\t\t\tclassName: cnMerge(\"snap-center snap-always\", innerProps?.className),\n\t\t\t};\n\t\t}\n\t);\n\n\tconst getPrevButtonProps: DragScrollPropGetters<TContainerElement>[\"getPrevButtonProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps?.disabled ?? !canGoToPrev;\n\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"prev-button\"),\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(actions.goToPrev, innerProps?.onClick),\n\t\t\t\ttype: \"button\",\n\t\t\t};\n\t\t},\n\t\t[actions.goToPrev, canGoToPrev]\n\t);\n\n\tconst getNextButtonProps: DragScrollPropGetters<TContainerElement>[\"getNextButtonProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps?.disabled ?? !canGoToNext;\n\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"next-button\"),\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(actions.goToNext, innerProps?.onClick),\n\t\t\t\ttype: \"button\",\n\t\t\t};\n\t\t},\n\t\t[actions.goToNext, canGoToNext]\n\t);\n\n\tconst propGetters = useMemo<DragScrollPropGetters<TContainerElement>>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tgetItemProps,\n\t\t\t\tgetListProps,\n\t\t\t\tgetNextButtonProps,\n\t\t\t\tgetPrevButtonProps,\n\t\t\t\tgetRootProps,\n\t\t\t}) satisfies DragScrollPropGetters<TContainerElement>,\n\t\t[getPrevButtonProps, getListProps, getItemProps, getNextButtonProps, getRootProps]\n\t);\n\n\tconst stableUseDragScrollStore = useCallbackRef(useDragScrollStore);\n\n\tconst result = useMemo<UseDragScrollResult<TContainerElement>>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tdisableInternalStateSubscription,\n\t\t\t\tlistRef,\n\t\t\t\tpropGetters,\n\t\t\t\tstoreApi,\n\t\t\t\tuseDragScrollStore: stableUseDragScrollStore,\n\t\t\t}) satisfies UseDragScrollResult<TContainerElement>,\n\t\t[propGetters, disableInternalStateSubscription, storeApi, stableUseDragScrollStore]\n\t);\n\n\treturn result;\n};\n","import { createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport { createReactStoreContext } from \"@zayne-labs/toolkit-react/zustand\";\nimport type { DragScrollStore, UseDragScrollResult } from \"./types\";\n\nconst [DragScrollStoreContextProvider, useDragScrollStoreContext] =\n\tcreateReactStoreContext<DragScrollStore>({\n\t\thookName: \"useDragScrollStoreContext\",\n\t\tname: \"DragScrollStoreContext\",\n\t\tproviderName: \"DragScrollRoot\",\n\t});\n\nexport type DragScrollRootContextType<TElement extends HTMLElement = HTMLElement> = Pick<\n\tUseDragScrollResult<TElement>,\n\t\"disableInternalStateSubscription\" | \"listRef\" | \"propGetters\"\n>;\n\nconst [DragScrollRootContextProvider, useDragScrollRootContext] =\n\tcreateCustomContext<DragScrollRootContextType>({\n\t\thookName: \"useDragScrollRootContext\",\n\t\tname: \"DragScrollRootContext\",\n\t\tproviderName: \"DragScrollRoot\",\n\t});\n\nexport {\n\tDragScrollRootContextProvider,\n\tDragScrollStoreContextProvider,\n\tuseDragScrollRootContext,\n\tuseDragScrollStoreContext,\n};\n","\"use client\";\n\nimport { useCompareSelector } from \"@zayne-labs/toolkit-react\";\nimport type { PolymorphicPropsStrict } from \"@zayne-labs/toolkit-react/utils\";\nimport { isFunction, type SelectorFn } from \"@zayne-labs/toolkit-type-helpers\";\nimport { useMemo } from \"react\";\nimport { Slot } from \"@/components/common/slot\";\nimport {\n\tDragScrollRootContextProvider,\n\tDragScrollStoreContextProvider,\n\tuseDragScrollRootContext,\n\tuseDragScrollStoreContext,\n\ttype DragScrollRootContextType,\n} from \"./drag-scroll-context\";\nimport type { DragScrollStore, PartInputProps, UseDragScrollProps } from \"./types\";\nimport { useDragScroll } from \"./use-drag-scroll\";\n\n/* eslint-disable perfectionist/sort-intersection-types -- I need non-standard props to come first */\n\nexport type DragScrollRootProps = UseDragScrollProps & {\n\tasChild?: boolean;\n\tchildren: React.ReactNode;\n} & PartInputProps[\"root\"];\n\nexport function DragScrollRoot(props: DragScrollRootProps) {\n\tconst { asChild, children, ...restOfProps } = props;\n\n\tconst { disableInternalStateSubscription, listRef, propGetters, storeApi } = useDragScroll(restOfProps);\n\n\tconst rootContextValue = useMemo<DragScrollRootContextType>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tdisableInternalStateSubscription,\n\t\t\t\tlistRef,\n\t\t\t\tpropGetters,\n\t\t\t}) satisfies DragScrollRootContextType,\n\t\t[listRef, disableInternalStateSubscription, propGetters]\n\t);\n\n\tconst Component = asChild ? Slot.Root : \"div\";\n\n\treturn (\n\t\t<DragScrollStoreContextProvider store={storeApi}>\n\t\t\t<DragScrollRootContextProvider value={rootContextValue}>\n\t\t\t\t<Component {...propGetters.getRootProps(restOfProps)}>{children}</Component>\n\t\t\t</DragScrollRootContextProvider>\n\t\t</DragScrollStoreContextProvider>\n\t);\n}\n\nexport type DragScrollContextProps<TSlice> = {\n\tchildren: React.ReactNode | ((context: TSlice) => React.ReactNode);\n\tselector?: SelectorFn<DragScrollStore, TSlice>;\n};\n\nexport function DragScrollContext<TSlice = DragScrollStore>(props: DragScrollContextProps<TSlice>) {\n\tconst { children, selector } = props;\n\n\tconst dragScrollCtx = useDragScrollStoreContext(useCompareSelector(selector));\n\n\tconst resolvedChildren = isFunction(children) ? children(dragScrollCtx) : children;\n\n\treturn resolvedChildren;\n}\n\nexport type DragScrollListProps = {\n\tasChild?: boolean;\n} & PartInputProps[\"list\"];\n\nexport function DragScrollList<TElement extends React.ElementType = \"ul\">(\n\tprops: PolymorphicPropsStrict<TElement, DragScrollListProps>\n) {\n\tconst { as: Element = \"ul\", asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDragScrollRootContext();\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn <Component {...propGetters.getListProps(restOfProps)} />;\n}\n\nexport type DragScrollItemProps = {\n\tasChild?: boolean;\n} & PartInputProps[\"item\"];\n\nexport function DragScrollItem<TElement extends React.ElementType = \"li\">(\n\tprops: PolymorphicPropsStrict<TElement, DragScrollItemProps>\n) {\n\tconst { as: Element = \"li\", asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDragScrollRootContext();\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn <Component {...propGetters.getItemProps(restOfProps)} />;\n}\n\nexport type DragScrollPrevProps = {\n\tasChild?: boolean;\n} & PartInputProps[\"prevButton\"];\n\nexport function DragScrollPrev(props: DragScrollPrevProps) {\n\tconst { asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDragScrollRootContext();\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\treturn <Component {...propGetters.getPrevButtonProps(restOfProps)} />;\n}\n\nexport type DragScrollNextProps = {\n\tasChild?: boolean;\n} & PartInputProps[\"nextButton\"];\n\nexport function DragScrollNext(props: DragScrollNextProps) {\n\tconst { asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDragScrollRootContext();\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\treturn <Component {...propGetters.getNextButtonProps(restOfProps)} />;\n}\n\n/* eslint-enable perfectionist/sort-intersection-types -- I need non-standard props to come first */\n","export {\n\tDragScrollContext as Context,\n\tDragScrollItem as Item,\n\tDragScrollNext as Next,\n\tDragScrollPrev as Prev,\n\tDragScrollRoot as Root,\n\tDragScrollList as List,\n} from \"./drag-scroll\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Slot.Root"],"sources":["../../../../src/components/ui/drag-scroll/utils.ts","../../../../src/components/ui/drag-scroll/drag-scroll-store.ts","../../../../src/components/ui/drag-scroll/use-drag-scroll.ts","../../../../src/components/ui/drag-scroll/drag-scroll-context.ts","../../../../src/components/ui/drag-scroll/drag-scroll.tsx","../../../../src/components/ui/drag-scroll/drag-scroll-parts.ts"],"sourcesContent":["import { checkIsDeviceMobile } from \"@zayne-labs/toolkit-core\";\n\n/* eslint-disable no-param-reassign -- Mutation is needed here since it's an element */\nexport const updateCursor = <TElement extends HTMLElement>(element: TElement) => {\n\telement.style.cursor = \"grabbing\";\n\telement.style.userSelect = \"none\";\n};\n\nexport const onScrollSnap = <TElement extends HTMLElement>(\n\taction: \"remove\" | \"reset\",\n\telement: TElement\n) => {\n\tif (action === \"remove\") {\n\t\telement.style.scrollSnapType = \"none\";\n\t\treturn;\n\t}\n\n\telement.style.scrollSnapType = \"\";\n};\n\nexport const resetCursor = <TElement extends HTMLElement>(element: TElement) => {\n\telement.style.cursor = \"\";\n\telement.style.userSelect = \"\";\n};\n/* eslint-enable no-param-reassign -- Mutation is needed here since it's an element */\n\nexport const handleScrollSnap = (dragContainer: HTMLElement) => {\n\tconst isMobile = checkIsDeviceMobile();\n\n\tif (!isMobile) {\n\t\tonScrollSnap(\"remove\", dragContainer);\n\t} else {\n\t\tonScrollSnap(\"reset\", dragContainer);\n\t}\n};\n","import { createStore, on, throttleByFrame } from \"@zayne-labs/toolkit-core\";\nimport { isNumber } from \"@zayne-labs/toolkit-type-helpers\";\nimport type { DragScrollStore, UseDragScrollProps } from \"./types\";\nimport { handleScrollSnap, resetCursor, updateCursor } from \"./utils\";\n\ntype RequiredUseDragScrollProps = {\n\t[Key in keyof Required<UseDragScrollProps>]: UseDragScrollProps[Key] | undefined;\n};\n\ntype InitStoreValues = Pick<RequiredUseDragScrollProps, \"orientation\" | \"scrollAmount\">;\n\nexport const createDragScrollStore = (initStoreValues: InitStoreValues) => {\n\tconst { orientation = \"horizontal\", scrollAmount = \"item\" } = initStoreValues;\n\n\tconst listRef: React.RefObject<HTMLElement | null> = {\n\t\tcurrent: null,\n\t};\n\n\tconst positionRef = {\n\t\tcurrent: {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t},\n\t};\n\n\tconst abortControllerRef = {\n\t\tcurrent: {\n\t\t\tmouseLeave: new AbortController(),\n\t\t\tmouseMove: new AbortController(),\n\t\t\tmouseUp: new AbortController(),\n\t\t},\n\t};\n\n\t// == Calculate scroll amount based on orientation and settings\n\tconst getScrollAmount = (container: HTMLElement): number => {\n\t\tif (isNumber(scrollAmount)) {\n\t\t\treturn scrollAmount;\n\t\t}\n\n\t\tconst firstChild = container.children[0] as HTMLElement | undefined;\n\n\t\tif (!firstChild) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn orientation === \"vertical\" || orientation === \"both\" ?\n\t\t\t\tfirstChild.offsetHeight\n\t\t\t:\tfirstChild.offsetWidth;\n\t};\n\n\tconst store = createStore<DragScrollStore>((set, get) => ({\n\t\tcanGoToNext: true,\n\t\tcanGoToPrev: false,\n\t\tisDragging: false,\n\n\t\t// eslint-disable-next-line perfectionist/sort-objects -- actions should be last\n\t\tactions: {\n\t\t\tcleanupDragListeners: () => {\n\t\t\t\tabortControllerRef.current.mouseMove.abort();\n\t\t\t\tabortControllerRef.current.mouseUp.abort();\n\t\t\t\tabortControllerRef.current.mouseLeave.abort();\n\t\t\t},\n\n\t\t\tgoToNext: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tconst { canGoToNext } = get();\n\t\t\t\tif (!canGoToNext) return;\n\n\t\t\t\tconst amount = getScrollAmount(listRef.current);\n\n\t\t\t\tlistRef.current.scrollBy({\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t\tleft: orientation === \"vertical\" ? 0 : amount,\n\t\t\t\t\ttop: orientation === \"vertical\" || orientation === \"both\" ? amount : 0,\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tgoToPrev: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tconst { canGoToPrev } = get();\n\t\t\t\tif (!canGoToPrev) return;\n\n\t\t\t\tconst amount = getScrollAmount(listRef.current);\n\n\t\t\t\tlistRef.current.scrollBy({\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t\tleft: orientation === \"vertical\" ? 0 : -amount,\n\t\t\t\t\ttop: orientation === \"vertical\" || orientation === \"both\" ? -amount : 0,\n\t\t\t\t});\n\t\t\t},\n\n\t\t\thandleMouseDown: (event) => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\t// == Create fresh AbortControllers for each drag session (they cannot be reused after abort)\n\t\t\t\tabortControllerRef.current = {\n\t\t\t\t\tmouseLeave: new AbortController(),\n\t\t\t\t\tmouseMove: new AbortController(),\n\t\t\t\t\tmouseUp: new AbortController(),\n\t\t\t\t};\n\n\t\t\t\t// == Update all initial position properties\n\t\t\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\t\t\tpositionRef.current.x = event.clientX;\n\t\t\t\t\tpositionRef.current.left = listRef.current.scrollLeft;\n\t\t\t\t}\n\n\t\t\t\tif (orientation === \"vertical\" || orientation === \"both\") {\n\t\t\t\t\tpositionRef.current.y = event.clientY;\n\t\t\t\t\tpositionRef.current.top = listRef.current.scrollTop;\n\t\t\t\t}\n\n\t\t\t\tupdateCursor(listRef.current);\n\t\t\t\tset({ isDragging: true });\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\ton(listRef.current, \"mousemove\", actions.handleMouseMove, {\n\t\t\t\t\tsignal: abortControllerRef.current.mouseMove.signal,\n\t\t\t\t});\n\t\t\t\ton(listRef.current, \"mouseup\", actions.handleMouseUpOrLeave, {\n\t\t\t\t\tsignal: abortControllerRef.current.mouseUp.signal,\n\t\t\t\t});\n\t\t\t\ton(listRef.current, \"mouseleave\", actions.handleMouseUpOrLeave, {\n\t\t\t\t\tsignal: abortControllerRef.current.mouseLeave.signal,\n\t\t\t\t});\n\t\t\t\t// == Document-level mouseup fallback for when user releases outside the container\n\t\t\t\ton(document, \"mouseup\", actions.handleMouseUpOrLeave, {\n\t\t\t\t\tonce: true,\n\t\t\t\t\tsignal: abortControllerRef.current.mouseUp.signal,\n\t\t\t\t});\n\t\t\t},\n\n\t\t\thandleMouseMove: (event) => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\t\t\tconst dx = event.clientX - positionRef.current.x;\n\t\t\t\t\tlistRef.current.scrollLeft = positionRef.current.left - dx;\n\t\t\t\t}\n\n\t\t\t\tif (orientation === \"vertical\" || orientation === \"both\") {\n\t\t\t\t\tconst dy = event.clientY - positionRef.current.y;\n\t\t\t\t\tlistRef.current.scrollTop = positionRef.current.top - dy;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\thandleMouseUpOrLeave: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tresetCursor(listRef.current);\n\t\t\t\tset({ isDragging: false });\n\n\t\t\t\tconst { actions } = get();\n\t\t\t\tactions.cleanupDragListeners();\n\t\t\t},\n\n\t\t\thandleScroll: throttleByFrame(() => {\n\t\t\t\tconst { actions } = get();\n\t\t\t\tactions.updateScrollState();\n\t\t\t}),\n\n\t\t\tinitializeResizeObserver: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\t// == Use ResizeObserver to detect when container or children resize\n\t\t\t\tconst resizeObserver = new ResizeObserver(() => actions.updateScrollState());\n\n\t\t\t\tresizeObserver.observe(listRef.current);\n\n\t\t\t\t// == Also observe children for size changes\n\t\t\t\tfor (const child of listRef.current.children) {\n\t\t\t\t\tresizeObserver.observe(child);\n\t\t\t\t}\n\n\t\t\t\tconst cleanup = () => {\n\t\t\t\t\tresizeObserver.disconnect();\n\t\t\t\t};\n\n\t\t\t\treturn cleanup;\n\t\t\t},\n\n\t\t\tsetListRef: (element) => {\n\t\t\t\tlistRef.current = element;\n\n\t\t\t\tif (!element) return;\n\n\t\t\t\thandleScrollSnap(element);\n\n\t\t\t\tconst { actions } = get();\n\t\t\t\tactions.updateScrollState();\n\t\t\t},\n\n\t\t\tupdateScrollState: () => {\n\t\t\t\tif (!listRef.current) return;\n\n\t\t\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\t\t\tconst { clientWidth, scrollLeft, scrollWidth } = listRef.current;\n\n\t\t\t\t\tset({\n\t\t\t\t\t\tcanGoToNext: Math.ceil(scrollLeft + clientWidth) < scrollWidth,\n\t\t\t\t\t\tcanGoToPrev: Math.floor(scrollLeft) > 0,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (orientation === \"vertical\") {\n\t\t\t\t\tconst { clientHeight, scrollHeight, scrollTop } = listRef.current;\n\n\t\t\t\t\tset({\n\t\t\t\t\t\tcanGoToNext: Math.ceil(scrollTop + clientHeight) < scrollHeight,\n\t\t\t\t\t\tcanGoToPrev: Math.floor(scrollTop) > 0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t}));\n\n\treturn store;\n};\n","import { dataAttr, on } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef, useStore } from \"@zayne-labs/toolkit-react\";\nimport { composeRefs, composeTwoEventHandlers } from \"@zayne-labs/toolkit-react/utils\";\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport type { FromCamelToKebabCase } from \"@/lib/utils/type-helpers\";\nimport { createDragScrollStore } from \"./drag-scroll-store\";\nimport type { DragScrollPropGetters, PartProps, UseDragScrollProps, UseDragScrollResult } from \"./types\";\n\nexport const getDragScrollScopeAttrs = (part: FromCamelToKebabCase<keyof PartProps>) => {\n\treturn {\n\t\t/* eslint-disable perfectionist/sort-objects -- I need this order to be maintained */\n\t\t\"data-slot\": `drag-scroll-${part}`,\n\t\t\"data-scope\": \"drag-scroll\",\n\t\t\"data-part\": part,\n\t\t/* eslint-enable perfectionist/sort-objects -- I need this order to be maintained */\n\t} as const;\n};\n\nexport const useDragScroll = <TContainerElement extends HTMLElement = HTMLElement>(\n\tprops?: UseDragScrollProps\n): UseDragScrollResult<TContainerElement> => {\n\tconst {\n\t\tdisableInternalStateSubscription = false,\n\t\torientation = \"horizontal\",\n\t\tscrollAmount = \"item\",\n\t} = props ?? {};\n\n\tconst listRef = useRef<TContainerElement>(null);\n\n\tconst storeApi = useMemo(() => {\n\t\treturn createDragScrollStore({ orientation, scrollAmount });\n\t}, [orientation, scrollAmount]);\n\n\tconst actions = storeApi.getState().actions;\n\n\t/* eslint-disable react-hooks/hooks -- ignore */\n\tconst useDragScrollStore: UseDragScrollResult<TContainerElement>[\"useDragScrollStore\"] = (selector) => {\n\t\treturn useStore(storeApi as never, selector);\n\t};\n\n\tconst canGoToPrev = useDragScrollStore((state) =>\n\t\t!disableInternalStateSubscription ? state.canGoToPrev : null\n\t);\n\n\tconst canGoToNext = useDragScrollStore((state) =>\n\t\t!disableInternalStateSubscription ? state.canGoToNext : null\n\t);\n\n\tconst isDragging = useDragScrollStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isDragging : null\n\t);\n\t/* eslint-enable react-hooks/hooks -- ignore */\n\n\tconst refCallback: React.RefCallback<TContainerElement> = useCallbackRef((node) => {\n\t\tlistRef.current = node;\n\t\tactions.setListRef(node);\n\n\t\tif (!node) return;\n\n\t\tconst cleanupMouseDown = on(node, \"mousedown\", actions.handleMouseDown);\n\t\tconst cleanupScroll = on(node, \"scroll\", actions.handleScroll, { passive: true });\n\n\t\treturn () => {\n\t\t\tcleanupMouseDown();\n\t\t\tcleanupScroll();\n\t\t};\n\t});\n\n\t// == Update scroll state when children might change (e.g., async loaded content)\n\tuseEffect(() => {\n\t\tconst cleanup = actions.initializeResizeObserver();\n\n\t\treturn cleanup;\n\t}, [actions]);\n\n\tconst getRootProps: DragScrollPropGetters<TContainerElement>[\"getRootProps\"] = useCallbackRef(\n\t\t(innerProps) => {\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"root\"),\n\t\t\t\tclassName: cnMerge(\"relative\", innerProps?.className),\n\t\t\t};\n\t\t}\n\t);\n\n\tconst getListProps: DragScrollPropGetters<TContainerElement>[\"getListProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"list\"),\n\t\t\t\t...(!disableInternalStateSubscription && {\n\t\t\t\t\t\"data-dragging\": dataAttr(isDragging),\n\t\t\t\t}),\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t`scrollbar-hidden flex w-full cursor-grab snap-x snap-mandatory overflow-x-scroll overflow-y-hidden`,\n\t\t\t\t\torientation === \"horizontal\" && \"flex-row\",\n\t\t\t\t\torientation === \"vertical\" && \"flex-col\",\n\t\t\t\t\tinnerProps?.className\n\t\t\t\t),\n\t\t\t\tref: composeRefs(\n\t\t\t\t\trefCallback,\n\t\t\t\t\t(innerProps as { ref?: React.Ref<TContainerElement> } | undefined)?.ref\n\t\t\t\t),\n\t\t\t} as never;\n\t\t},\n\t\t[disableInternalStateSubscription, isDragging, orientation, refCallback]\n\t);\n\n\tconst getItemProps: DragScrollPropGetters<TContainerElement>[\"getItemProps\"] = useCallbackRef(\n\t\t(innerProps) => {\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"item\"),\n\t\t\t\tclassName: cnMerge(\"snap-center snap-always\", innerProps?.className),\n\t\t\t};\n\t\t}\n\t);\n\n\tconst getPrevButtonProps: DragScrollPropGetters<TContainerElement>[\"getPrevButtonProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps?.disabled ?? !canGoToPrev;\n\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"prev-button\"),\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(actions.goToPrev, innerProps?.onClick),\n\t\t\t\ttype: \"button\",\n\t\t\t};\n\t\t},\n\t\t[actions.goToPrev, canGoToPrev]\n\t);\n\n\tconst getNextButtonProps: DragScrollPropGetters<TContainerElement>[\"getNextButtonProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps?.disabled ?? !canGoToNext;\n\n\t\t\treturn {\n\t\t\t\t...innerProps,\n\t\t\t\t...getDragScrollScopeAttrs(\"next-button\"),\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(actions.goToNext, innerProps?.onClick),\n\t\t\t\ttype: \"button\",\n\t\t\t};\n\t\t},\n\t\t[actions.goToNext, canGoToNext]\n\t);\n\n\tconst propGetters = useMemo<DragScrollPropGetters<TContainerElement>>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tgetItemProps,\n\t\t\t\tgetListProps,\n\t\t\t\tgetNextButtonProps,\n\t\t\t\tgetPrevButtonProps,\n\t\t\t\tgetRootProps,\n\t\t\t}) satisfies DragScrollPropGetters<TContainerElement>,\n\t\t[getPrevButtonProps, getListProps, getItemProps, getNextButtonProps, getRootProps]\n\t);\n\n\tconst stableUseDragScrollStore = useCallbackRef(useDragScrollStore);\n\n\tconst result = useMemo<UseDragScrollResult<TContainerElement>>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tdisableInternalStateSubscription,\n\t\t\t\tlistRef,\n\t\t\t\tpropGetters,\n\t\t\t\tstoreApi,\n\t\t\t\tuseDragScrollStore: stableUseDragScrollStore,\n\t\t\t}) satisfies UseDragScrollResult<TContainerElement>,\n\t\t[propGetters, disableInternalStateSubscription, storeApi, stableUseDragScrollStore]\n\t);\n\n\treturn result;\n};\n","import { createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport { createReactStoreContext } from \"@zayne-labs/toolkit-react/zustand\";\nimport type { DragScrollStore, UseDragScrollResult } from \"./types\";\n\nconst [DragScrollStoreContextProvider, useDragScrollStoreContext] =\n\tcreateReactStoreContext<DragScrollStore>({\n\t\thookName: \"useDragScrollStoreContext\",\n\t\tname: \"DragScrollStoreContext\",\n\t\tproviderName: \"DragScrollRoot\",\n\t});\n\nexport type DragScrollRootContextType<TElement extends HTMLElement = HTMLElement> = Pick<\n\tUseDragScrollResult<TElement>,\n\t\"disableInternalStateSubscription\" | \"listRef\" | \"propGetters\"\n>;\n\nconst [DragScrollRootContextProvider, useDragScrollRootContext] =\n\tcreateCustomContext<DragScrollRootContextType>({\n\t\thookName: \"useDragScrollRootContext\",\n\t\tname: \"DragScrollRootContext\",\n\t\tproviderName: \"DragScrollRoot\",\n\t});\n\nexport {\n\tDragScrollRootContextProvider,\n\tDragScrollStoreContextProvider,\n\tuseDragScrollRootContext,\n\tuseDragScrollStoreContext,\n};\n","\"use client\";\n\nimport { useCompareSelector } from \"@zayne-labs/toolkit-react\";\nimport type { PolymorphicPropsStrict } from \"@zayne-labs/toolkit-react/utils\";\nimport { isFunction, type SelectorFn } from \"@zayne-labs/toolkit-type-helpers\";\nimport { useMemo } from \"react\";\nimport { Slot } from \"@/components/common/slot\";\nimport {\n\tDragScrollRootContextProvider,\n\tDragScrollStoreContextProvider,\n\tuseDragScrollRootContext,\n\tuseDragScrollStoreContext,\n\ttype DragScrollRootContextType,\n} from \"./drag-scroll-context\";\nimport type { DragScrollStore, PartInputProps, UseDragScrollProps } from \"./types\";\nimport { useDragScroll } from \"./use-drag-scroll\";\n\n/* eslint-disable perfectionist/sort-intersection-types -- I need non-standard props to come first */\n\nexport type DragScrollRootProps = UseDragScrollProps & {\n\tasChild?: boolean;\n\tchildren: React.ReactNode;\n} & PartInputProps[\"root\"];\n\nexport function DragScrollRoot(props: DragScrollRootProps) {\n\tconst { asChild, children, ...restOfProps } = props;\n\n\tconst { disableInternalStateSubscription, listRef, propGetters, storeApi } = useDragScroll(restOfProps);\n\n\tconst rootContextValue = useMemo<DragScrollRootContextType>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tdisableInternalStateSubscription,\n\t\t\t\tlistRef,\n\t\t\t\tpropGetters,\n\t\t\t}) satisfies DragScrollRootContextType,\n\t\t[listRef, disableInternalStateSubscription, propGetters]\n\t);\n\n\tconst Component = asChild ? Slot.Root : \"div\";\n\n\treturn (\n\t\t<DragScrollStoreContextProvider store={storeApi}>\n\t\t\t<DragScrollRootContextProvider value={rootContextValue}>\n\t\t\t\t<Component {...propGetters.getRootProps(restOfProps)}>{children}</Component>\n\t\t\t</DragScrollRootContextProvider>\n\t\t</DragScrollStoreContextProvider>\n\t);\n}\n\nexport type DragScrollContextProps<TSlice> = {\n\tchildren: React.ReactNode | ((context: TSlice) => React.ReactNode);\n\tselector?: SelectorFn<DragScrollStore, TSlice>;\n};\n\nexport function DragScrollContext<TSlice = DragScrollStore>(props: DragScrollContextProps<TSlice>) {\n\tconst { children, selector } = props;\n\n\tconst dragScrollCtx = useDragScrollStoreContext(useCompareSelector(selector));\n\n\tconst resolvedChildren = isFunction(children) ? children(dragScrollCtx) : children;\n\n\treturn resolvedChildren;\n}\n\nexport type DragScrollListProps = {\n\tasChild?: boolean;\n} & PartInputProps[\"list\"];\n\nexport function DragScrollList<TElement extends React.ElementType = \"ul\">(\n\tprops: PolymorphicPropsStrict<TElement, DragScrollListProps>\n) {\n\tconst { as: Element = \"ul\", asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDragScrollRootContext();\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn <Component {...propGetters.getListProps(restOfProps)} />;\n}\n\nexport type DragScrollItemProps = {\n\tasChild?: boolean;\n} & PartInputProps[\"item\"];\n\nexport function DragScrollItem<TElement extends React.ElementType = \"li\">(\n\tprops: PolymorphicPropsStrict<TElement, DragScrollItemProps>\n) {\n\tconst { as: Element = \"li\", asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDragScrollRootContext();\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn <Component {...propGetters.getItemProps(restOfProps)} />;\n}\n\nexport type DragScrollPrevProps = {\n\tasChild?: boolean;\n} & PartInputProps[\"prevButton\"];\n\nexport function DragScrollPrev(props: DragScrollPrevProps) {\n\tconst { asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDragScrollRootContext();\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\treturn <Component {...propGetters.getPrevButtonProps(restOfProps)} />;\n}\n\nexport type DragScrollNextProps = {\n\tasChild?: boolean;\n} & PartInputProps[\"nextButton\"];\n\nexport function DragScrollNext(props: DragScrollNextProps) {\n\tconst { asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDragScrollRootContext();\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\treturn <Component {...propGetters.getNextButtonProps(restOfProps)} />;\n}\n\n/* eslint-enable perfectionist/sort-intersection-types -- I need non-standard props to come first */\n","export {\n\tDragScrollContext as Context,\n\tDragScrollItem as Item,\n\tDragScrollNext as Next,\n\tDragScrollPrev as Prev,\n\tDragScrollRoot as Root,\n\tDragScrollList as List,\n} from \"./drag-scroll\";\n"],"mappings":"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"}
|
|
@@ -1,37 +1,11 @@
|
|
|
1
1
|
import { InferProps, PolymorphicPropsStrict } from "@zayne-labs/toolkit-react/utils";
|
|
2
|
-
import * as _$_zayne_labs_toolkit_type_helpers0 from "@zayne-labs/toolkit-type-helpers";
|
|
3
2
|
import { Awaitable, SelectorFn, UnionDiscriminator } from "@zayne-labs/toolkit-type-helpers";
|
|
4
|
-
import * as _$react from "react";
|
|
5
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
6
|
-
import * as _$_zayne_labs_toolkit_core0 from "@zayne-labs/toolkit-core";
|
|
7
3
|
import { FileMeta, FileOrFileMeta, FileValidationErrorContextEach, FileValidationHooksAsync, FileValidationSettingsAsync } from "@zayne-labs/toolkit-core";
|
|
8
4
|
|
|
9
5
|
//#region src/components/ui/drop-zone/drop-zone-store.d.ts
|
|
10
6
|
type RequiredUseDropZoneProps = { [Key in keyof Required<UseDropZoneProps>]: UseDropZoneProps[Key] | undefined };
|
|
11
7
|
type StoreContext = Pick<RequiredUseDropZoneProps, "allowedFileTypes" | "disablePreviewGenForNonImageFiles" | "initialFiles" | "maxFileCount" | "maxFileSize" | "multiple" | "onFilesChange" | "onUpload" | "onValidationError" | "onValidationSuccess" | "rejectDuplicateFiles" | "validator">;
|
|
12
|
-
declare const createDropZoneStore: (storeContext: StoreContext) =>
|
|
13
|
-
getInitialState: () => DropZoneStore;
|
|
14
|
-
getListeners: () => Set<(state: DropZoneStore, prevState: DropZoneStore) => void>;
|
|
15
|
-
getState: () => DropZoneStore;
|
|
16
|
-
resetState: () => void;
|
|
17
|
-
setState: {
|
|
18
|
-
(stateUpdate: Partial<DropZoneStore> | ((prevState: DropZoneStore) => Partial<DropZoneStore>), options?: ({
|
|
19
|
-
onNotifySync?: ((previousState: DropZoneStore) => void) | undefined;
|
|
20
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DropZoneStore) => void) | undefined;
|
|
21
|
-
shouldNotifySync?: boolean | undefined;
|
|
22
|
-
} & {
|
|
23
|
-
shouldReplace?: false;
|
|
24
|
-
}) | undefined): void;
|
|
25
|
-
(stateUpdate: DropZoneStore | ((prevState: DropZoneStore) => DropZoneStore), options?: ({
|
|
26
|
-
onNotifySync?: ((previousState: DropZoneStore) => void) | undefined;
|
|
27
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DropZoneStore) => void) | undefined;
|
|
28
|
-
shouldNotifySync?: boolean | undefined;
|
|
29
|
-
} & {
|
|
30
|
-
shouldReplace: true;
|
|
31
|
-
}) | undefined): void;
|
|
32
|
-
};
|
|
33
|
-
subscribe: _$_zayne_labs_toolkit_core0.SubscribeFn<DropZoneStore>;
|
|
34
|
-
};
|
|
8
|
+
declare const createDropZoneStore: (storeContext: StoreContext) => import("@zayne-labs/toolkit-core").StoreApiImpl<DropZoneStore>;
|
|
35
9
|
//#endregion
|
|
36
10
|
//#region src/components/ui/drop-zone/types.d.ts
|
|
37
11
|
type FileErrorContext = Omit<FileValidationErrorContextEach, "code"> & {
|
|
@@ -241,52 +215,8 @@ interface UseDropZoneProps extends FileValidationSettingsAsync, Pick<SharedInput
|
|
|
241
215
|
//#region src/components/ui/drop-zone/drop-zone-context.d.ts
|
|
242
216
|
declare const DropZoneStoreContextProvider: (props: {
|
|
243
217
|
children: React.ReactNode;
|
|
244
|
-
store:
|
|
245
|
-
|
|
246
|
-
getListeners: () => Set<(state: DropZoneStore, prevState: DropZoneStore) => void>;
|
|
247
|
-
getState: () => DropZoneStore;
|
|
248
|
-
resetState: () => void;
|
|
249
|
-
setState: {
|
|
250
|
-
(stateUpdate: Partial<DropZoneStore> | ((prevState: DropZoneStore) => Partial<DropZoneStore>), options?: ({
|
|
251
|
-
onNotifySync?: ((previousState: DropZoneStore) => void) | undefined;
|
|
252
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DropZoneStore) => void) | undefined;
|
|
253
|
-
shouldNotifySync?: boolean | undefined;
|
|
254
|
-
} & {
|
|
255
|
-
shouldReplace?: false;
|
|
256
|
-
}) | undefined): void;
|
|
257
|
-
(stateUpdate: DropZoneStore | ((prevState: DropZoneStore) => DropZoneStore), options?: ({
|
|
258
|
-
onNotifySync?: ((previousState: DropZoneStore) => void) | undefined;
|
|
259
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DropZoneStore) => void) | undefined;
|
|
260
|
-
shouldNotifySync?: boolean | undefined;
|
|
261
|
-
} & {
|
|
262
|
-
shouldReplace: true;
|
|
263
|
-
}) | undefined): void;
|
|
264
|
-
};
|
|
265
|
-
subscribe: _$_zayne_labs_toolkit_core0.SubscribeFn<DropZoneStore>;
|
|
266
|
-
};
|
|
267
|
-
}) => _$react.FunctionComponentElement<_$react.ProviderProps<{
|
|
268
|
-
getInitialState: () => DropZoneStore;
|
|
269
|
-
getListeners: () => Set<(state: DropZoneStore, prevState: DropZoneStore) => void>;
|
|
270
|
-
getState: () => DropZoneStore;
|
|
271
|
-
resetState: () => void;
|
|
272
|
-
setState: {
|
|
273
|
-
(stateUpdate: Partial<DropZoneStore> | ((prevState: DropZoneStore) => Partial<DropZoneStore>), options?: ({
|
|
274
|
-
onNotifySync?: ((previousState: DropZoneStore) => void) | undefined;
|
|
275
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DropZoneStore) => void) | undefined;
|
|
276
|
-
shouldNotifySync?: boolean | undefined;
|
|
277
|
-
} & {
|
|
278
|
-
shouldReplace?: false;
|
|
279
|
-
}) | undefined): void;
|
|
280
|
-
(stateUpdate: DropZoneStore | ((prevState: DropZoneStore) => DropZoneStore), options?: ({
|
|
281
|
-
onNotifySync?: ((previousState: DropZoneStore) => void) | undefined;
|
|
282
|
-
onNotifyViaBatch?: ((previousStateSnapshot: DropZoneStore) => void) | undefined;
|
|
283
|
-
shouldNotifySync?: boolean | undefined;
|
|
284
|
-
} & {
|
|
285
|
-
shouldReplace: true;
|
|
286
|
-
}) | undefined): void;
|
|
287
|
-
};
|
|
288
|
-
subscribe: _$_zayne_labs_toolkit_core0.SubscribeFn<DropZoneStore>;
|
|
289
|
-
}>>, useDropZoneStoreContext: <TResult = DropZoneStore>(selector?: _$_zayne_labs_toolkit_type_helpers0.SelectorFn<DropZoneStore, TResult> | undefined) => TResult;
|
|
218
|
+
store: import("@zayne-labs/toolkit-core").StoreApiImpl<DropZoneStore>;
|
|
219
|
+
}) => import("react").FunctionComponentElement<import("react").ProviderProps<import("@zayne-labs/toolkit-core").StoreApiImpl<DropZoneStore>>>, useDropZoneStoreContext: <TResult = DropZoneStore>(selector?: import("@zayne-labs/toolkit-type-helpers").SelectorFn<DropZoneStore, TResult> | undefined) => TResult;
|
|
290
220
|
type FileItemContextType = {
|
|
291
221
|
fileState: FileState;
|
|
292
222
|
};
|
|
@@ -295,29 +225,29 @@ type FileItemContextType = {
|
|
|
295
225
|
type DropZoneRootProps = UseDropZoneProps & {
|
|
296
226
|
asChild?: boolean;
|
|
297
227
|
} & PartInputProps["root"];
|
|
298
|
-
declare function DropZoneRoot<TElement extends React.ElementType = "div">(props: PolymorphicPropsStrict<TElement, DropZoneRootProps>):
|
|
228
|
+
declare function DropZoneRoot<TElement extends React.ElementType = "div">(props: PolymorphicPropsStrict<TElement, DropZoneRootProps>): import("react/jsx-runtime").JSX.Element;
|
|
299
229
|
type DropZoneContextProps<TSlice> = {
|
|
300
230
|
children: React.ReactNode | ((context: TSlice) => React.ReactNode);
|
|
301
231
|
selector?: SelectorFn<DropZoneStore, TSlice>;
|
|
302
232
|
};
|
|
303
|
-
declare function DropZoneContext<TSlice = DropZoneStore>(props: DropZoneContextProps<TSlice>):
|
|
233
|
+
declare function DropZoneContext<TSlice = DropZoneStore>(props: DropZoneContextProps<TSlice>): import("react").ReactNode;
|
|
304
234
|
type DropZoneContainerProps = {
|
|
305
235
|
asChild?: boolean;
|
|
306
236
|
} & PartInputProps["container"];
|
|
307
|
-
declare function DropZoneContainer<TElement extends React.ElementType = "div">(props: PolymorphicPropsStrict<TElement, DropZoneContainerProps>):
|
|
237
|
+
declare function DropZoneContainer<TElement extends React.ElementType = "div">(props: PolymorphicPropsStrict<TElement, DropZoneContainerProps>): import("react/jsx-runtime").JSX.Element;
|
|
308
238
|
type DropZoneInputProps = {
|
|
309
239
|
asChild?: boolean;
|
|
310
240
|
} & PartInputProps["input"];
|
|
311
|
-
declare function DropZoneInput(props: DropZoneInputProps):
|
|
241
|
+
declare function DropZoneInput(props: DropZoneInputProps): import("react/jsx-runtime").JSX.Element;
|
|
312
242
|
type DropZoneAreaProps<TSlice = DropZoneStore> = DropZoneContextProps<TSlice> & {
|
|
313
243
|
classNames?: Partial<Record<Extract<keyof PartInputProps, "container" | "input">, string>>;
|
|
314
244
|
extraProps?: Partial<Pick<PartInputProps, "container" | "input">>;
|
|
315
245
|
} & PartInputProps["container"];
|
|
316
|
-
declare function DropZoneArea<TSlice = DropZoneStore>(props: DropZoneAreaProps<TSlice>):
|
|
246
|
+
declare function DropZoneArea<TSlice = DropZoneStore>(props: DropZoneAreaProps<TSlice>): import("react/jsx-runtime").JSX.Element;
|
|
317
247
|
type DropZoneTriggerProps = {
|
|
318
248
|
asChild?: boolean;
|
|
319
249
|
} & PartInputProps["trigger"];
|
|
320
|
-
declare function DropZoneTrigger(props: DropZoneTriggerProps):
|
|
250
|
+
declare function DropZoneTrigger(props: DropZoneTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
321
251
|
type ListPerItemContext = Pick<DropZoneStore, "actions"> & {
|
|
322
252
|
array: DropZoneStore["fileStateArray"];
|
|
323
253
|
fileState: DropZoneStore["fileStateArray"][number];
|
|
@@ -336,15 +266,15 @@ type DropZoneFileListProps = {
|
|
|
336
266
|
asChild?: boolean;
|
|
337
267
|
forceMount?: boolean;
|
|
338
268
|
} & (FileListManualListVariant | FileListPerItemVariant) & Omit<PartInputProps["fileList"], "children">;
|
|
339
|
-
declare function DropZoneFileList<TElement extends React.ElementType = "ul">(props: PolymorphicPropsStrict<TElement, DropZoneFileListProps>):
|
|
269
|
+
declare function DropZoneFileList<TElement extends React.ElementType = "ul">(props: PolymorphicPropsStrict<TElement, DropZoneFileListProps>): import("react/jsx-runtime").JSX.Element;
|
|
340
270
|
type DropZoneFileItemProps = FileItemContextType & {
|
|
341
271
|
asChild?: boolean;
|
|
342
272
|
} & PartInputProps["fileItem"];
|
|
343
|
-
declare function DropZoneFileItem<TElement extends React.ElementType = "li">(props: PolymorphicPropsStrict<TElement, DropZoneFileItemProps>):
|
|
273
|
+
declare function DropZoneFileItem<TElement extends React.ElementType = "li">(props: PolymorphicPropsStrict<TElement, DropZoneFileItemProps>): import("react/jsx-runtime").JSX.Element;
|
|
344
274
|
type DropZoneFileItemDeleteProps = {
|
|
345
275
|
asChild?: boolean;
|
|
346
276
|
} & PartInputProps["fileItemDelete"];
|
|
347
|
-
declare function DropZoneFileItemDelete(props: DropZoneFileItemDeleteProps):
|
|
277
|
+
declare function DropZoneFileItemDelete(props: DropZoneFileItemDeleteProps): import("react/jsx-runtime").JSX.Element;
|
|
348
278
|
type StrictExtract<TUnion, TPick extends TUnion> = Extract<TUnion, TPick>;
|
|
349
279
|
type DropZoneFileItemProgressProps = {
|
|
350
280
|
asChild?: boolean;
|
|
@@ -368,7 +298,7 @@ type DropZoneFileItemProgressProps = {
|
|
|
368
298
|
};
|
|
369
299
|
variant?: StrictExtract<PartInputProps["fileItemProgress"]["variant"], "linear">;
|
|
370
300
|
});
|
|
371
|
-
declare function DropZoneFileItemProgress<TElement extends React.ElementType = "span">(props: PolymorphicPropsStrict<TElement, DropZoneFileItemProgressProps>):
|
|
301
|
+
declare function DropZoneFileItemProgress<TElement extends React.ElementType = "span">(props: PolymorphicPropsStrict<TElement, DropZoneFileItemProgressProps>): import("react/jsx-runtime").JSX.Element | null;
|
|
372
302
|
type NodeCtx<TElement extends React.ElementType> = {
|
|
373
303
|
getProps: (innerProps: Partial<InferProps<TElement>>) => InferProps<TElement>;
|
|
374
304
|
};
|
|
@@ -400,7 +330,7 @@ type DropZoneFileItemPreviewProps = Partial<Pick<FileItemContextType, "fileState
|
|
|
400
330
|
}) => React.ReactNode);
|
|
401
331
|
renderPreview?: boolean | RenderPreview;
|
|
402
332
|
} & Omit<PartInputProps["fileItemPreview"], "children">;
|
|
403
|
-
declare function DropZoneFileItemPreview<TElement extends React.ElementType>(props: PolymorphicPropsStrict<TElement, DropZoneFileItemPreviewProps>):
|
|
333
|
+
declare function DropZoneFileItemPreview<TElement extends React.ElementType>(props: PolymorphicPropsStrict<TElement, DropZoneFileItemPreviewProps>): import("react/jsx-runtime").JSX.Element | null;
|
|
404
334
|
type DropZoneFileItemMetadataProps = Partial<Pick<FileItemContextType, "fileState">> & {
|
|
405
335
|
asChild?: boolean;
|
|
406
336
|
children?: React.ReactNode | ((context: Pick<FileItemContextType, "fileState">) => React.ReactNode);
|
|
@@ -410,12 +340,12 @@ type DropZoneFileItemMetadataProps = Partial<Pick<FileItemContextType, "fileStat
|
|
|
410
340
|
};
|
|
411
341
|
size?: "default" | "sm";
|
|
412
342
|
} & Omit<PartInputProps["fileItemMetadata"], "children">;
|
|
413
|
-
declare function DropZoneFileItemMetadata(props: DropZoneFileItemMetadataProps):
|
|
343
|
+
declare function DropZoneFileItemMetadata(props: DropZoneFileItemMetadataProps): import("react/jsx-runtime").JSX.Element | null;
|
|
414
344
|
type DropZoneFileClearProps = {
|
|
415
345
|
asChild?: boolean;
|
|
416
346
|
forceMount?: boolean;
|
|
417
347
|
} & PartInputProps["fileItemClear"];
|
|
418
|
-
declare function DropZoneFileClear(props: DropZoneFileClearProps):
|
|
348
|
+
declare function DropZoneFileClear(props: DropZoneFileClearProps): import("react/jsx-runtime").JSX.Element | null;
|
|
419
349
|
declare namespace drop_zone_parts_d_exports {
|
|
420
350
|
export { DropZoneArea as Area, DropZoneContainer as Container, DropZoneContext as Context, DropZoneFileClear as FileClear, DropZoneFileItem as FileItem, DropZoneFileItemDelete as FileItemDelete, DropZoneFileItemMetadata as FileItemMetadata, DropZoneFileItemPreview as FileItemPreview, DropZoneFileItemProgress as FileItemProgress, DropZoneFileList as FileList, DropZoneInput as Input, DropZoneRoot as Root, DropZoneTrigger as Trigger };
|
|
421
351
|
}
|