@salt-ds/embla-carousel 0.0.0-snapshot-20250627090641

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.
Files changed (102) hide show
  1. package/CHANGELOG.md +161 -0
  2. package/README.md +3 -0
  3. package/css/salt-embla-carousel.css +155 -0
  4. package/dist-cjs/Carousel.css.js +6 -0
  5. package/dist-cjs/Carousel.css.js.map +1 -0
  6. package/dist-cjs/Carousel.js +53 -0
  7. package/dist-cjs/Carousel.js.map +1 -0
  8. package/dist-cjs/CarouselAnnouncementPlugin.js +55 -0
  9. package/dist-cjs/CarouselAnnouncementPlugin.js.map +1 -0
  10. package/dist-cjs/CarouselAutoplayIndicator.css.js +6 -0
  11. package/dist-cjs/CarouselAutoplayIndicator.css.js.map +1 -0
  12. package/dist-cjs/CarouselAutoplayIndicator.js +82 -0
  13. package/dist-cjs/CarouselAutoplayIndicator.js.map +1 -0
  14. package/dist-cjs/CarouselAutoplayIndicatorSVG.js +54 -0
  15. package/dist-cjs/CarouselAutoplayIndicatorSVG.js.map +1 -0
  16. package/dist-cjs/CarouselCard.css.js +6 -0
  17. package/dist-cjs/CarouselCard.css.js.map +1 -0
  18. package/dist-cjs/CarouselCard.js +50 -0
  19. package/dist-cjs/CarouselCard.js.map +1 -0
  20. package/dist-cjs/CarouselContext.js +22 -0
  21. package/dist-cjs/CarouselContext.js.map +1 -0
  22. package/dist-cjs/CarouselNextButton.js +35 -0
  23. package/dist-cjs/CarouselNextButton.js.map +1 -0
  24. package/dist-cjs/CarouselPreviousButton.js +35 -0
  25. package/dist-cjs/CarouselPreviousButton.js.map +1 -0
  26. package/dist-cjs/CarouselProgressLabel.css.js +6 -0
  27. package/dist-cjs/CarouselProgressLabel.css.js.map +1 -0
  28. package/dist-cjs/CarouselProgressLabel.js +65 -0
  29. package/dist-cjs/CarouselProgressLabel.js.map +1 -0
  30. package/dist-cjs/CarouselSlides.css.js +6 -0
  31. package/dist-cjs/CarouselSlides.css.js.map +1 -0
  32. package/dist-cjs/CarouselSlides.js +55 -0
  33. package/dist-cjs/CarouselSlides.js.map +1 -0
  34. package/dist-cjs/CarouselTab.css.js +6 -0
  35. package/dist-cjs/CarouselTab.css.js.map +1 -0
  36. package/dist-cjs/CarouselTab.js +71 -0
  37. package/dist-cjs/CarouselTab.js.map +1 -0
  38. package/dist-cjs/CarouselTabList.css.js +6 -0
  39. package/dist-cjs/CarouselTabList.css.js.map +1 -0
  40. package/dist-cjs/CarouselTabList.js +94 -0
  41. package/dist-cjs/CarouselTabList.js.map +1 -0
  42. package/dist-cjs/index.js +31 -0
  43. package/dist-cjs/index.js.map +1 -0
  44. package/dist-cjs/usePrevNextButtons.js +41 -0
  45. package/dist-cjs/usePrevNextButtons.js.map +1 -0
  46. package/dist-es/Carousel.css.js +4 -0
  47. package/dist-es/Carousel.css.js.map +1 -0
  48. package/dist-es/Carousel.js +51 -0
  49. package/dist-es/Carousel.js.map +1 -0
  50. package/dist-es/CarouselAnnouncementPlugin.js +52 -0
  51. package/dist-es/CarouselAnnouncementPlugin.js.map +1 -0
  52. package/dist-es/CarouselAutoplayIndicator.css.js +4 -0
  53. package/dist-es/CarouselAutoplayIndicator.css.js.map +1 -0
  54. package/dist-es/CarouselAutoplayIndicator.js +80 -0
  55. package/dist-es/CarouselAutoplayIndicator.js.map +1 -0
  56. package/dist-es/CarouselAutoplayIndicatorSVG.js +52 -0
  57. package/dist-es/CarouselAutoplayIndicatorSVG.js.map +1 -0
  58. package/dist-es/CarouselCard.css.js +4 -0
  59. package/dist-es/CarouselCard.css.js.map +1 -0
  60. package/dist-es/CarouselCard.js +48 -0
  61. package/dist-es/CarouselCard.js.map +1 -0
  62. package/dist-es/CarouselContext.js +19 -0
  63. package/dist-es/CarouselContext.js.map +1 -0
  64. package/dist-es/CarouselNextButton.js +33 -0
  65. package/dist-es/CarouselNextButton.js.map +1 -0
  66. package/dist-es/CarouselPreviousButton.js +33 -0
  67. package/dist-es/CarouselPreviousButton.js.map +1 -0
  68. package/dist-es/CarouselProgressLabel.css.js +4 -0
  69. package/dist-es/CarouselProgressLabel.css.js.map +1 -0
  70. package/dist-es/CarouselProgressLabel.js +63 -0
  71. package/dist-es/CarouselProgressLabel.js.map +1 -0
  72. package/dist-es/CarouselSlides.css.js +4 -0
  73. package/dist-es/CarouselSlides.css.js.map +1 -0
  74. package/dist-es/CarouselSlides.js +53 -0
  75. package/dist-es/CarouselSlides.js.map +1 -0
  76. package/dist-es/CarouselTab.css.js +4 -0
  77. package/dist-es/CarouselTab.css.js.map +1 -0
  78. package/dist-es/CarouselTab.js +68 -0
  79. package/dist-es/CarouselTab.js.map +1 -0
  80. package/dist-es/CarouselTabList.css.js +4 -0
  81. package/dist-es/CarouselTabList.css.js.map +1 -0
  82. package/dist-es/CarouselTabList.js +92 -0
  83. package/dist-es/CarouselTabList.js.map +1 -0
  84. package/dist-es/index.js +12 -0
  85. package/dist-es/index.js.map +1 -0
  86. package/dist-es/usePrevNextButtons.js +39 -0
  87. package/dist-es/usePrevNextButtons.js.map +1 -0
  88. package/dist-types/Carousel.d.ts +27 -0
  89. package/dist-types/CarouselAnnouncementPlugin.d.ts +34 -0
  90. package/dist-types/CarouselAutoplayIndicator.d.ts +16 -0
  91. package/dist-types/CarouselAutoplayIndicatorSVG.d.ts +24 -0
  92. package/dist-types/CarouselCard.d.ts +33 -0
  93. package/dist-types/CarouselContext.d.ts +20 -0
  94. package/dist-types/CarouselNextButton.d.ts +7 -0
  95. package/dist-types/CarouselPreviousButton.d.ts +7 -0
  96. package/dist-types/CarouselProgressLabel.d.ts +7 -0
  97. package/dist-types/CarouselSlides.d.ts +7 -0
  98. package/dist-types/CarouselTab.d.ts +34 -0
  99. package/dist-types/CarouselTabList.d.ts +12 -0
  100. package/dist-types/index.d.ts +11 -0
  101. package/dist-types/usePrevNextButtons.d.ts +20 -0
  102. package/package.json +54 -0
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var CarouselCard$1 = require('./CarouselCard.css.js');
10
+
11
+ const withBaseName = core.makePrefixer("saltCarouselCard");
12
+ const CarouselCard = react.forwardRef(
13
+ function CarouselCard2({ actions, appearance, children, className, header, media, ...rest }, ref) {
14
+ const targetWindow = window.useWindow();
15
+ styles.useComponentCssInjection({
16
+ testId: "salt-carousel-slide",
17
+ css: CarouselCard$1,
18
+ window: targetWindow
19
+ });
20
+ return /* @__PURE__ */ jsxRuntime.jsx(
21
+ "div",
22
+ {
23
+ role: "tabpanel",
24
+ "aria-roledescription": "slide",
25
+ className: clsx.clsx(withBaseName(), className),
26
+ ...rest,
27
+ ref,
28
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
29
+ "div",
30
+ {
31
+ className: clsx.clsx(withBaseName("content"), {
32
+ [withBaseName("bordered")]: appearance === "bordered"
33
+ }),
34
+ children: [
35
+ media,
36
+ children && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: withBaseName("body"), children: [
37
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: header }),
38
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children }),
39
+ actions
40
+ ] })
41
+ ]
42
+ }
43
+ )
44
+ }
45
+ );
46
+ }
47
+ );
48
+
49
+ exports.CarouselCard = CarouselCard;
50
+ //# sourceMappingURL=CarouselCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselCard.js","sources":["../src/CarouselCard.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentProps, type ReactNode, forwardRef } from \"react\";\nimport saltCarouselCardCss from \"./CarouselCard.css\";\n\nconst withBaseName = makePrefixer(\"saltCarouselCard\");\n\n/**\n * Props for the CarouselCard component.\n */\nexport interface CarouselCardProps extends ComponentProps<\"div\"> {\n /**\n * Actions to be displayed in the content footer.\n * This can include buttons or any other interactive elements.\n */\n actions?: ReactNode;\n\n /**\n * Media content to be displayed inside the slide.\n * This could include images, videos, etc., that are visually prominent.\n * It differs from children in that media is intended to be the main visual element of the slide.\n */\n media?: ReactNode;\n\n /**\n * The appearance of the slide. Options are 'bordered', and 'transparent'.\n * 'transparent' is the default value.\n **/\n appearance?: \"bordered\" | \"transparent\";\n\n /**\n * Header content to be displayed at the top of the slide.\n * This can be text or any other React node.\n */\n header?: ReactNode;\n\n /**\n * Carousel slide id.\n * This can be used to uniquely identify the slide.\n */\n id?: string;\n}\n\nexport const CarouselCard = forwardRef<HTMLDivElement, CarouselCardProps>(\n function CarouselCard(\n { actions, appearance, children, className, header, media, ...rest },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-carousel-slide\",\n css: saltCarouselCardCss,\n window: targetWindow,\n });\n\n return (\n <div\n role=\"tabpanel\"\n aria-roledescription=\"slide\"\n className={clsx(withBaseName(), className)}\n {...rest}\n ref={ref}\n >\n <div\n className={clsx(withBaseName(\"content\"), {\n [withBaseName(\"bordered\")]: appearance === \"bordered\",\n })}\n >\n {media}\n {children && (\n <div className={withBaseName(\"body\")}>\n <div>{header}</div>\n <div>{children}</div>\n {actions}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","CarouselCard","useWindow","useComponentCssInjection","saltCarouselCardCss","jsx","clsx","jsxs"],"mappings":";;;;;;;;;;AAOA,MAAM,YAAA,GAAeA,kBAAa,kBAAkB,CAAA;AAsC7C,MAAM,YAAe,GAAAC,gBAAA;AAAA,EAC1B,SAASC,aAAAA,CACP,EAAE,OAAA,EAAS,UAAY,EAAA,QAAA,EAAU,SAAW,EAAA,MAAA,EAAQ,KAAO,EAAA,GAAG,IAAK,EAAA,EACnE,GACA,EAAA;AACA,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,qBAAA;AAAA,MACR,GAAK,EAAAC,cAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IACE,uBAAAC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,UAAA;AAAA,QACL,sBAAqB,EAAA,OAAA;AAAA,QACrB,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACxC,GAAG,IAAA;AAAA,QACJ,GAAA;AAAA,QAEA,QAAA,kBAAAC,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAAD,SAAA,CAAK,YAAa,CAAA,SAAS,CAAG,EAAA;AAAA,cACvC,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,UAAe,KAAA;AAAA,aAC5C,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,cAAA,KAAA;AAAA,cACA,4BACEC,eAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,CAAa,MAAM,CACjC,EAAA,QAAA,EAAA;AAAA,gCAAAF,cAAA,CAAC,SAAK,QAAO,EAAA,MAAA,EAAA,CAAA;AAAA,gCACbA,cAAA,CAAC,SAAK,QAAS,EAAA,CAAA;AAAA,gBACd;AAAA,eACH,EAAA;AAAA;AAAA;AAAA;AAEJ;AAAA,KACF;AAAA;AAGN;;;;"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ var core = require('@salt-ds/core');
4
+ var react = require('react');
5
+
6
+ const CarouselContext = core.createContext(
7
+ "CarouselContext",
8
+ void 0
9
+ );
10
+ const useCarouselContext = () => {
11
+ const context = react.useContext(CarouselContext);
12
+ if (!context) {
13
+ throw new Error(
14
+ "useCarouselContext must be used within a CarouselProvider"
15
+ );
16
+ }
17
+ return context;
18
+ };
19
+
20
+ exports.CarouselContext = CarouselContext;
21
+ exports.useCarouselContext = useCarouselContext;
22
+ //# sourceMappingURL=CarouselContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselContext.js","sources":["../src/CarouselContext.tsx"],"sourcesContent":["import { createContext } from \"@salt-ds/core\";\nimport { useContext } from \"react\";\nimport type { CarouselEmblaApiType, CarouselEmblaRefType } from \"./Carousel\";\n\n/**\n * Type definition for the Carousel context.\n * Provides access to the Embla Carousel API and reference.\n */\ninterface CarouselContextType {\n /**\n * The API instance of the Embla Carousel.\n * Provides methods to control the carousel programmatically.\n */\n emblaApi?: CarouselEmblaApiType;\n\n /**\n * The reference to the Embla Carousel viewport.\n * Used to directly interact with the carousel DOM element.\n */\n emblaRef?: CarouselEmblaRefType;\n}\n\nexport const CarouselContext = createContext<CarouselContextType | undefined>(\n \"CarouselContext\",\n undefined,\n);\n\nexport const useCarouselContext = (): CarouselContextType => {\n const context = useContext(CarouselContext);\n if (!context) {\n throw new Error(\n \"useCarouselContext must be used within a CarouselProvider\",\n );\n }\n return context;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;;AAsBO,MAAM,eAAkB,GAAAA,kBAAA;AAAA,EAC7B,iBAAA;AAAA,EACA;AACF;AAEO,MAAM,qBAAqB,MAA2B;AAC3D,EAAM,MAAA,OAAA,GAAUC,iBAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA;AAEF,EAAO,OAAA,OAAA;AACT;;;;;"}
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var react = require('react');
6
+ var usePrevNextButtons = require('./usePrevNextButtons.js');
7
+
8
+ const CarouselNextButton = react.forwardRef(function CarouselNextButton2({ className, onClick, ...rest }, ref) {
9
+ const { NextIcon } = core.useIcon();
10
+ const { nextBtnDisabled, onNextButtonClick } = usePrevNextButtons.usePrevNextButtons();
11
+ const handleClick = react.useCallback(
12
+ (event) => {
13
+ onNextButtonClick();
14
+ onClick == null ? void 0 : onClick(event);
15
+ },
16
+ [onNextButtonClick, onClick]
17
+ );
18
+ return /* @__PURE__ */ jsxRuntime.jsx(
19
+ core.Button,
20
+ {
21
+ onClick: handleClick,
22
+ disabled: nextBtnDisabled,
23
+ focusableWhenDisabled: true,
24
+ appearance: "bordered",
25
+ sentiment: "neutral",
26
+ "aria-label": "Next slide",
27
+ ref,
28
+ ...rest,
29
+ children: /* @__PURE__ */ jsxRuntime.jsx(NextIcon, { "aria-hidden": true })
30
+ }
31
+ );
32
+ });
33
+
34
+ exports.CarouselNextButton = CarouselNextButton;
35
+ //# sourceMappingURL=CarouselNextButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselNextButton.js","sources":["../src/CarouselNextButton.tsx"],"sourcesContent":["import { Button, type ButtonProps, useIcon } from \"@salt-ds/core\";\nimport { type MouseEventHandler, forwardRef, useCallback } from \"react\";\nimport { usePrevNextButtons } from \"./usePrevNextButtons\";\n\n/**\n * Props for the CarouselNextButton component.\n */\nexport interface CarouselNextButtonProps extends ButtonProps {}\n\nexport const CarouselNextButton = forwardRef<\n HTMLButtonElement,\n CarouselNextButtonProps\n>(function CarouselNextButton({ className, onClick, ...rest }, ref) {\n const { NextIcon } = useIcon();\n const { nextBtnDisabled, onNextButtonClick } = usePrevNextButtons();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n onNextButtonClick();\n onClick?.(event);\n },\n [onNextButtonClick, onClick],\n );\n\n return (\n <Button\n onClick={handleClick}\n disabled={nextBtnDisabled}\n focusableWhenDisabled\n appearance=\"bordered\"\n sentiment=\"neutral\"\n aria-label=\"Next slide\"\n ref={ref}\n {...rest}\n >\n <NextIcon aria-hidden />\n </Button>\n );\n});\n"],"names":["forwardRef","CarouselNextButton","useIcon","usePrevNextButtons","useCallback","jsx","Button"],"mappings":";;;;;;;AASa,MAAA,kBAAA,GAAqBA,gBAGhC,CAAA,SAASC,mBAAmB,CAAA,EAAE,WAAW,OAAS,EAAA,GAAG,IAAK,EAAA,EAAG,GAAK,EAAA;AAClE,EAAM,MAAA,EAAE,QAAS,EAAA,GAAIC,YAAQ,EAAA;AAC7B,EAAA,MAAM,EAAE,eAAA,EAAiB,iBAAkB,EAAA,GAAIC,qCAAmB,EAAA;AAElE,EAAA,MAAM,WAAoD,GAAAC,iBAAA;AAAA,IACxD,CAAC,KAAU,KAAA;AACT,MAAkB,iBAAA,EAAA;AAClB,MAAU,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,KAAA,CAAA;AAAA,KACZ;AAAA,IACA,CAAC,mBAAmB,OAAO;AAAA,GAC7B;AAEA,EACE,uBAAAC,cAAA;AAAA,IAACC,WAAA;AAAA,IAAA;AAAA,MACC,OAAS,EAAA,WAAA;AAAA,MACT,QAAU,EAAA,eAAA;AAAA,MACV,qBAAqB,EAAA,IAAA;AAAA,MACrB,UAAW,EAAA,UAAA;AAAA,MACX,SAAU,EAAA,SAAA;AAAA,MACV,YAAW,EAAA,YAAA;AAAA,MACX,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAAD,cAAA,CAAC,QAAS,EAAA,EAAA,aAAA,EAAW,IAAC,EAAA;AAAA;AAAA,GACxB;AAEJ,CAAC;;;;"}
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var react = require('react');
6
+ var usePrevNextButtons = require('./usePrevNextButtons.js');
7
+
8
+ const CarouselPreviousButton = react.forwardRef(function CarouselPreviousButton2({ className, onClick, ...rest }, ref) {
9
+ const { PreviousIcon } = core.useIcon();
10
+ const { prevBtnDisabled, onPrevButtonClick } = usePrevNextButtons.usePrevNextButtons();
11
+ const handleClick = react.useCallback(
12
+ (event) => {
13
+ onPrevButtonClick();
14
+ onClick == null ? void 0 : onClick(event);
15
+ },
16
+ [onPrevButtonClick, onClick]
17
+ );
18
+ return /* @__PURE__ */ jsxRuntime.jsx(
19
+ core.Button,
20
+ {
21
+ onClick: handleClick,
22
+ disabled: prevBtnDisabled,
23
+ focusableWhenDisabled: true,
24
+ appearance: "bordered",
25
+ sentiment: "neutral",
26
+ "aria-label": "Previous slide",
27
+ ref,
28
+ ...rest,
29
+ children: /* @__PURE__ */ jsxRuntime.jsx(PreviousIcon, { "aria-hidden": true })
30
+ }
31
+ );
32
+ });
33
+
34
+ exports.CarouselPreviousButton = CarouselPreviousButton;
35
+ //# sourceMappingURL=CarouselPreviousButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselPreviousButton.js","sources":["../src/CarouselPreviousButton.tsx"],"sourcesContent":["import { Button, type ButtonProps, useIcon } from \"@salt-ds/core\";\nimport { type MouseEventHandler, forwardRef, useCallback } from \"react\";\nimport { usePrevNextButtons } from \"./usePrevNextButtons\";\n\n/**\n * Props for the CarouselPreviousButton component.\n */\nexport interface CarouselPreviousButtonProps extends ButtonProps {}\n\nexport const CarouselPreviousButton = forwardRef<\n HTMLButtonElement,\n CarouselPreviousButtonProps\n>(function CarouselPreviousButton({ className, onClick, ...rest }, ref) {\n const { PreviousIcon } = useIcon();\n const { prevBtnDisabled, onPrevButtonClick } = usePrevNextButtons();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n onPrevButtonClick();\n onClick?.(event);\n },\n [onPrevButtonClick, onClick],\n );\n\n return (\n <Button\n onClick={handleClick}\n disabled={prevBtnDisabled}\n focusableWhenDisabled\n appearance=\"bordered\"\n sentiment=\"neutral\"\n aria-label=\"Previous slide\"\n ref={ref}\n {...rest}\n >\n <PreviousIcon aria-hidden />\n </Button>\n );\n});\n"],"names":["forwardRef","CarouselPreviousButton","useIcon","usePrevNextButtons","useCallback","jsx","Button"],"mappings":";;;;;;;AASa,MAAA,sBAAA,GAAyBA,gBAGpC,CAAA,SAASC,uBAAuB,CAAA,EAAE,WAAW,OAAS,EAAA,GAAG,IAAK,EAAA,EAAG,GAAK,EAAA;AACtE,EAAM,MAAA,EAAE,YAAa,EAAA,GAAIC,YAAQ,EAAA;AACjC,EAAA,MAAM,EAAE,eAAA,EAAiB,iBAAkB,EAAA,GAAIC,qCAAmB,EAAA;AAElE,EAAA,MAAM,WAAoD,GAAAC,iBAAA;AAAA,IACxD,CAAC,KAAU,KAAA;AACT,MAAkB,iBAAA,EAAA;AAClB,MAAU,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,KAAA,CAAA;AAAA,KACZ;AAAA,IACA,CAAC,mBAAmB,OAAO;AAAA,GAC7B;AAEA,EACE,uBAAAC,cAAA;AAAA,IAACC,WAAA;AAAA,IAAA;AAAA,MACC,OAAS,EAAA,WAAA;AAAA,MACT,QAAU,EAAA,eAAA;AAAA,MACV,qBAAqB,EAAA,IAAA;AAAA,MACrB,UAAW,EAAA,UAAA;AAAA,MACX,SAAU,EAAA,SAAA;AAAA,MACV,YAAW,EAAA,gBAAA;AAAA,MACX,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAAD,cAAA,CAAC,YAAa,EAAA,EAAA,aAAA,EAAW,IAAC,EAAA;AAAA;AAAA,GAC5B;AAEJ,CAAC;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltCarouselTabList.saltText {\n font-weight: var(--salt-palette-text-body-fontWeight-strong);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=CarouselProgressLabel.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselProgressLabel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var CarouselContext = require('./CarouselContext.js');
10
+ var CarouselProgressLabel$1 = require('./CarouselProgressLabel.css.js');
11
+
12
+ const withBaseName = core.makePrefixer("saltCarouselTabList");
13
+ function CarouselProgressLabel({
14
+ className,
15
+ styleAs = "label",
16
+ children,
17
+ ...props
18
+ }) {
19
+ const targetWindow = window.useWindow();
20
+ styles.useComponentCssInjection({
21
+ testId: "salt-carousel-progress-label",
22
+ css: CarouselProgressLabel$1,
23
+ window: targetWindow
24
+ });
25
+ const { emblaApi } = CarouselContext.useCarouselContext();
26
+ const [currentSlide, setCurrentSlide] = react.useState("");
27
+ const [totalSlides, setTotalSlides] = react.useState(0);
28
+ const handleSettle = react.useCallback((emblaApi2) => {
29
+ const slideIndexInView = (emblaApi2 == null ? void 0 : emblaApi2.selectedScrollSnap()) ?? 0;
30
+ const numberOfSlides = (emblaApi2 == null ? void 0 : emblaApi2.slideNodes().length) ?? 0;
31
+ const scrollSnaps = (emblaApi2 == null ? void 0 : emblaApi2.scrollSnapList()) ?? [];
32
+ const slidesPerTransition = numberOfSlides ? Math.ceil(numberOfSlides / scrollSnaps.length) : 0;
33
+ const startSlideNumber = Math.min(
34
+ slideIndexInView * slidesPerTransition + 1,
35
+ numberOfSlides - (slidesPerTransition - 1)
36
+ );
37
+ const endSlideNumber = Math.min(
38
+ startSlideNumber + slidesPerTransition - 1,
39
+ numberOfSlides
40
+ );
41
+ if (startSlideNumber === endSlideNumber) {
42
+ setCurrentSlide(startSlideNumber.toString(10));
43
+ } else {
44
+ setCurrentSlide(`${startSlideNumber}-${endSlideNumber}`);
45
+ }
46
+ setTotalSlides(numberOfSlides);
47
+ }, []);
48
+ react.useEffect(() => {
49
+ if (!emblaApi) return;
50
+ emblaApi.on("init", handleSettle).on("reInit", handleSettle).on("settle", handleSettle);
51
+ handleSettle(emblaApi);
52
+ return () => {
53
+ emblaApi.off("init", handleSettle).off("reInit", handleSettle).off("settle", handleSettle);
54
+ };
55
+ }, [emblaApi, handleSettle]);
56
+ return /* @__PURE__ */ jsxRuntime.jsxs(core.Text, { className: clsx.clsx(withBaseName(), className), ...props, children: [
57
+ "Slide ",
58
+ currentSlide,
59
+ " of ",
60
+ totalSlides
61
+ ] });
62
+ }
63
+
64
+ exports.CarouselProgressLabel = CarouselProgressLabel;
65
+ //# sourceMappingURL=CarouselProgressLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselProgressLabel.js","sources":["../src/CarouselProgressLabel.tsx"],"sourcesContent":["import { Text, type TextProps, makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport type { EmblaCarouselType } from \"embla-carousel\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useCarouselContext } from \"./CarouselContext\";\nimport carouselProgressLabelCss from \"./CarouselProgressLabel.css\";\n\n/**\n * Props for the CarouselProgressLabel component.\n */\nexport interface CarouselProgressLabelProps extends TextProps<\"div\"> {}\n\nconst withBaseName = makePrefixer(\"saltCarouselTabList\");\n\nexport function CarouselProgressLabel({\n className,\n styleAs = \"label\",\n children,\n ...props\n}: CarouselProgressLabelProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-carousel-progress-label\",\n css: carouselProgressLabelCss,\n window: targetWindow,\n });\n\n const { emblaApi } = useCarouselContext();\n\n const [currentSlide, setCurrentSlide] = useState(\"\");\n const [totalSlides, setTotalSlides] = useState(0);\n\n const handleSettle = useCallback((emblaApi: EmblaCarouselType) => {\n const slideIndexInView = emblaApi?.selectedScrollSnap() ?? 0;\n const numberOfSlides = emblaApi?.slideNodes().length ?? 0;\n const scrollSnaps = emblaApi?.scrollSnapList() ?? [];\n const slidesPerTransition = numberOfSlides\n ? Math.ceil(numberOfSlides / scrollSnaps.length)\n : 0;\n const startSlideNumber = Math.min(\n slideIndexInView * slidesPerTransition + 1,\n numberOfSlides - (slidesPerTransition - 1),\n );\n const endSlideNumber = Math.min(\n startSlideNumber + slidesPerTransition - 1,\n numberOfSlides,\n );\n\n if (startSlideNumber === endSlideNumber) {\n setCurrentSlide(startSlideNumber.toString(10));\n } else {\n setCurrentSlide(`${startSlideNumber}-${endSlideNumber}`);\n }\n setTotalSlides(numberOfSlides);\n }, []);\n\n useEffect(() => {\n if (!emblaApi) return;\n emblaApi\n .on(\"init\", handleSettle)\n .on(\"reInit\", handleSettle)\n .on(\"settle\", handleSettle);\n handleSettle(emblaApi);\n // Cleanup listener on component unmount\n return () => {\n emblaApi\n .off(\"init\", handleSettle)\n .off(\"reInit\", handleSettle)\n .off(\"settle\", handleSettle);\n };\n }, [emblaApi, handleSettle]);\n\n return (\n <Text className={clsx(withBaseName(), className)} {...props}>\n Slide {currentSlide} of {totalSlides}\n </Text>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","carouselProgressLabelCss","useCarouselContext","useState","useCallback","emblaApi","useEffect","jsxs","Text","clsx"],"mappings":";;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,qBAAqB,CAAA;AAEhD,SAAS,qBAAsB,CAAA;AAAA,EACpC,SAAA;AAAA,EACA,OAAU,GAAA,OAAA;AAAA,EACV,QAAA;AAAA,EACA,GAAG;AACL,CAA+B,EAAA;AAC7B,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,8BAAA;AAAA,IACR,GAAK,EAAAC,uBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,QAAS,EAAA,GAAIC,kCAAmB,EAAA;AAExC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,eAAS,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,CAAC,CAAA;AAEhD,EAAM,MAAA,YAAA,GAAeC,iBAAY,CAAA,CAACC,SAAgC,KAAA;AAChE,IAAA,MAAM,gBAAmBA,GAAAA,CAAAA,SAAAA,IAAA,IAAAA,GAAAA,MAAAA,GAAAA,SAAAA,CAAU,kBAAwB,EAAA,KAAA,CAAA;AAC3D,IAAA,MAAM,cAAiBA,GAAAA,CAAAA,SAAAA,IAAA,IAAAA,GAAAA,MAAAA,GAAAA,SAAAA,CAAU,aAAa,MAAU,KAAA,CAAA;AACxD,IAAA,MAAM,WAAcA,GAAAA,CAAAA,SAAAA,IAAA,IAAAA,GAAAA,MAAAA,GAAAA,SAAAA,CAAU,qBAAoB,EAAC;AACnD,IAAA,MAAM,sBAAsB,cACxB,GAAA,IAAA,CAAK,KAAK,cAAiB,GAAA,WAAA,CAAY,MAAM,CAC7C,GAAA,CAAA;AACJ,IAAA,MAAM,mBAAmB,IAAK,CAAA,GAAA;AAAA,MAC5B,mBAAmB,mBAAsB,GAAA,CAAA;AAAA,MACzC,kBAAkB,mBAAsB,GAAA,CAAA;AAAA,KAC1C;AACA,IAAA,MAAM,iBAAiB,IAAK,CAAA,GAAA;AAAA,MAC1B,mBAAmB,mBAAsB,GAAA,CAAA;AAAA,MACzC;AAAA,KACF;AAEA,IAAA,IAAI,qBAAqB,cAAgB,EAAA;AACvC,MAAgB,eAAA,CAAA,gBAAA,CAAiB,QAAS,CAAA,EAAE,CAAC,CAAA;AAAA,KACxC,MAAA;AACL,MAAA,eAAA,CAAgB,CAAG,EAAA,gBAAgB,CAAI,CAAA,EAAA,cAAc,CAAE,CAAA,CAAA;AAAA;AAEzD,IAAA,cAAA,CAAe,cAAc,CAAA;AAAA,GAC/B,EAAG,EAAE,CAAA;AAEL,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAU,EAAA;AACf,IACG,QAAA,CAAA,EAAA,CAAG,MAAQ,EAAA,YAAY,CACvB,CAAA,EAAA,CAAG,UAAU,YAAY,CAAA,CACzB,EAAG,CAAA,QAAA,EAAU,YAAY,CAAA;AAC5B,IAAA,YAAA,CAAa,QAAQ,CAAA;AAErB,IAAA,OAAO,MAAM;AACX,MACG,QAAA,CAAA,GAAA,CAAI,MAAQ,EAAA,YAAY,CACxB,CAAA,GAAA,CAAI,UAAU,YAAY,CAAA,CAC1B,GAAI,CAAA,QAAA,EAAU,YAAY,CAAA;AAAA,KAC/B;AAAA,GACC,EAAA,CAAC,QAAU,EAAA,YAAY,CAAC,CAAA;AAE3B,EACE,uBAAAC,eAAA,CAACC,aAAK,SAAW,EAAAC,SAAA,CAAK,cAAgB,EAAA,SAAS,CAAI,EAAA,GAAG,KAAO,EAAA,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACpD,YAAA;AAAA,IAAa,MAAA;AAAA,IAAK;AAAA,GAC3B,EAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltCarouselSlides {\n overflow: hidden;\n}\n.saltCarouselSlides-container {\n display: flex;\n touch-action: pan-y pinch-zoom;\n margin-left: calc(var(--saltCarousel-slide-spacing) * -1);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=CarouselSlides.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselSlides.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var CarouselContext = require('./CarouselContext.js');
10
+ var CarouselSlides$1 = require('./CarouselSlides.css.js');
11
+
12
+ const withBaseName = core.makePrefixer("saltCarouselSlides");
13
+ const CarouselSlides = react.forwardRef(
14
+ function CarouselSlides2({ children, className, onKeyDown, ...rest }, propRef) {
15
+ const targetWindow = window.useWindow();
16
+ styles.useComponentCssInjection({
17
+ testId: "salt-carousel-slides",
18
+ css: CarouselSlides$1,
19
+ window: targetWindow
20
+ });
21
+ const { emblaApi, emblaRef } = CarouselContext.useCarouselContext();
22
+ const ref = core.useForkRef(propRef, emblaRef);
23
+ const handleKeyDown = (event) => {
24
+ if (event.repeat) {
25
+ return;
26
+ }
27
+ switch (event.key) {
28
+ case "ArrowLeft": {
29
+ event.preventDefault();
30
+ emblaApi == null ? void 0 : emblaApi.scrollPrev();
31
+ break;
32
+ }
33
+ case "ArrowRight": {
34
+ event.preventDefault();
35
+ emblaApi == null ? void 0 : emblaApi.scrollNext();
36
+ break;
37
+ }
38
+ }
39
+ onKeyDown == null ? void 0 : onKeyDown(event);
40
+ };
41
+ return /* @__PURE__ */ jsxRuntime.jsx(
42
+ "div",
43
+ {
44
+ onKeyDown: handleKeyDown,
45
+ ref,
46
+ className: clsx.clsx(withBaseName(), className),
47
+ ...rest,
48
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: withBaseName("container"), children })
49
+ }
50
+ );
51
+ }
52
+ );
53
+
54
+ exports.CarouselSlides = CarouselSlides;
55
+ //# sourceMappingURL=CarouselSlides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselSlides.js","sources":["../src/CarouselSlides.tsx"],"sourcesContent":["import { makePrefixer, useForkRef } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type Ref,\n forwardRef,\n} from \"react\";\nimport { useCarouselContext } from \"./CarouselContext\";\nimport carouselSlidesCss from \"./CarouselSlides.css\";\n\n/**\n * Props for the CarouselSlides component.\n */\nexport interface CarouselSlidesProps extends ComponentPropsWithoutRef<\"div\"> {}\n\nconst withBaseName = makePrefixer(\"saltCarouselSlides\");\n\nexport const CarouselSlides = forwardRef<HTMLDivElement, CarouselSlidesProps>(\n function CarouselSlides(\n { children, className, onKeyDown, ...rest },\n propRef,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-carousel-slides\",\n css: carouselSlidesCss,\n window: targetWindow,\n });\n const { emblaApi, emblaRef } = useCarouselContext();\n\n const ref = useForkRef(propRef, emblaRef) as Ref<HTMLDivElement>;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.repeat) {\n return;\n }\n switch (event.key) {\n case \"ArrowLeft\": {\n event.preventDefault();\n emblaApi?.scrollPrev();\n break;\n }\n case \"ArrowRight\": {\n event.preventDefault();\n emblaApi?.scrollNext();\n break;\n }\n }\n onKeyDown?.(event);\n };\n\n return (\n <div\n onKeyDown={handleKeyDown}\n ref={ref}\n className={clsx(withBaseName(), className)}\n {...rest}\n >\n <div className={withBaseName(\"container\")}>{children}</div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","CarouselSlides","useWindow","useComponentCssInjection","carouselSlidesCss","useCarouselContext","useForkRef","jsx","clsx"],"mappings":";;;;;;;;;;;AAkBA,MAAM,YAAA,GAAeA,kBAAa,oBAAoB,CAAA;AAE/C,MAAM,cAAiB,GAAAC,gBAAA;AAAA,EAC5B,SAASC,gBACP,EAAE,QAAA,EAAU,WAAW,SAAW,EAAA,GAAG,IAAK,EAAA,EAC1C,OACA,EAAA;AACA,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,sBAAA;AAAA,MACR,GAAK,EAAAC,gBAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AACD,IAAA,MAAM,EAAE,QAAA,EAAU,QAAS,EAAA,GAAIC,kCAAmB,EAAA;AAElD,IAAM,MAAA,GAAA,GAAMC,eAAW,CAAA,OAAA,EAAS,QAAQ,CAAA;AAExC,IAAM,MAAA,aAAA,GAAgB,CAAC,KAAyC,KAAA;AAC9D,MAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,QAAA;AAAA;AAEF,MAAA,QAAQ,MAAM,GAAK;AAAA,QACjB,KAAK,WAAa,EAAA;AAChB,UAAA,KAAA,CAAM,cAAe,EAAA;AACrB,UAAU,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,UAAA,EAAA;AACV,UAAA;AAAA;AACF,QACA,KAAK,YAAc,EAAA;AACjB,UAAA,KAAA,CAAM,cAAe,EAAA;AACrB,UAAU,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,UAAA,EAAA;AACV,UAAA;AAAA;AACF;AAEF,MAAY,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAA,KAAA,CAAA;AAAA,KACd;AAEA,IACE,uBAAAC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,aAAA;AAAA,QACX,GAAA;AAAA,QACA,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACxC,GAAG,IAAA;AAAA,QAEJ,yCAAC,KAAI,EAAA,EAAA,SAAA,EAAW,YAAa,CAAA,WAAW,GAAI,QAAS,EAAA;AAAA;AAAA,KACvD;AAAA;AAGN;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltCarouselTab {\n position: relative;\n width: var(--salt-size-selectable);\n height: var(--salt-size-selectable);\n border: none;\n box-shadow: inset 0 0 0 var(--salt-size-border) var(--salt-selectable-borderColor);\n -webkit-tap-highlight-color: var(--salt-selectable-borderColor-hover);\n -webkit-appearance: none;\n appearance: none;\n background-color: transparent;\n touch-action: manipulation;\n display: inline-flex;\n text-decoration: none;\n cursor: pointer;\n padding: 0;\n margin: 0;\n align-items: center;\n justify-content: center;\n border-radius: var(--salt-palette-corner-strongest);\n transition: box-shadow var(--salt-duration-perceptible) ease-in-out;\n}\n\n.saltCarouselTab:after {\n content: \"\";\n position: absolute;\n width: var(--salt-size-selectable);\n height: var(--salt-size-selectable);\n border-radius: 50%;\n background-color: transparent;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n}\n\n.saltCarouselTab:focus-visible {\n outline-style: var(--salt-focused-outlineStyle);\n outline-width: var(--salt-focused-outlineWidth);\n outline-color: var(--salt-focused-outlineColor);\n outline-offset: var(--salt-focused-outlineOffset);\n background: var(--salt-selectable-background-hover);\n border-color: var(--salt-selectable-borderColor-hover);\n}\n\n.saltCarouselTab-selected {\n box-shadow: inset 0 0 0 var(--salt-size-selectable) var(--salt-selectable-borderColor-selected);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=CarouselTab.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselTab.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var CarouselTab$1 = require('./CarouselTab.css.js');
10
+
11
+ const withBaseName = core.makePrefixer("saltCarouselTab");
12
+ const useCarouselTab = (emblaApi) => {
13
+ const [selectedIndex, setSelectedIndex] = react.useState(0);
14
+ const [scrollSnaps, setScrollSnaps] = react.useState([]);
15
+ const handleClick = react.useCallback(
16
+ (index) => {
17
+ if (!emblaApi) return;
18
+ emblaApi.scrollTo(index);
19
+ },
20
+ [emblaApi]
21
+ );
22
+ const handleInit = react.useCallback((emblaApi2) => {
23
+ setScrollSnaps(emblaApi2.scrollSnapList());
24
+ }, []);
25
+ const handleSelect = react.useCallback((emblaApi2) => {
26
+ setSelectedIndex(emblaApi2.selectedScrollSnap());
27
+ }, []);
28
+ react.useEffect(() => {
29
+ if (!emblaApi) return;
30
+ handleInit(emblaApi);
31
+ handleSelect(emblaApi);
32
+ emblaApi.on("init", handleInit).on("reInit", handleInit).on("select", handleSelect);
33
+ return () => {
34
+ emblaApi.off("init", handleInit);
35
+ emblaApi.off("reInit", handleInit);
36
+ emblaApi.off("settle", handleSelect);
37
+ };
38
+ }, [emblaApi, handleInit, handleSelect]);
39
+ return {
40
+ selectedIndex,
41
+ scrollSnaps,
42
+ onClick: handleClick
43
+ };
44
+ };
45
+ const CarouselTab = react.forwardRef(
46
+ function CarouselTab2({ children, className, selected = false, ...rest }, ref) {
47
+ const targetWindow = window.useWindow();
48
+ styles.useComponentCssInjection({
49
+ testId: "salt-carousel-tab",
50
+ css: CarouselTab$1,
51
+ window: targetWindow
52
+ });
53
+ return /* @__PURE__ */ jsxRuntime.jsx(
54
+ "button",
55
+ {
56
+ className: clsx.clsx(
57
+ withBaseName(),
58
+ { [withBaseName("selected")]: selected },
59
+ className
60
+ ),
61
+ ref,
62
+ ...rest,
63
+ children
64
+ }
65
+ );
66
+ }
67
+ );
68
+
69
+ exports.CarouselTab = CarouselTab;
70
+ exports.useCarouselTab = useCarouselTab;
71
+ //# sourceMappingURL=CarouselTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselTab.js","sources":["../src/CarouselTab.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport type { EmblaCarouselType } from \"embla-carousel\";\nimport {\n type ComponentPropsWithRef,\n forwardRef,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport carouselTabCss from \"./CarouselTab.css\";\n\n/**\n * Type definition for the UseCarouselTab hook.\n * Provides state and handlers for tablist navigation in a carousel.\n */\ntype UseCarouselTabProps = {\n /**\n * The index of the currently selected slide.\n */\n selectedIndex: number;\n\n /**\n * An array of scroll snap positions for the carousel slides.\n */\n scrollSnaps: number[];\n\n /**\n * Handler function for clicking a tab button to navigate to a specific slide.\n *\n * @param index - The index of the slide to navigate to.\n */\n onClick: (index: number) => void;\n};\n\nconst withBaseName = makePrefixer(\"saltCarouselTab\");\n\nexport const useCarouselTab = (\n emblaApi: EmblaCarouselType | undefined,\n): UseCarouselTabProps => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [scrollSnaps, setScrollSnaps] = useState<number[]>([]);\n\n const handleClick = useCallback(\n (index: number) => {\n if (!emblaApi) return;\n emblaApi.scrollTo(index);\n },\n [emblaApi],\n );\n\n const handleInit = useCallback((emblaApi: EmblaCarouselType) => {\n setScrollSnaps(emblaApi.scrollSnapList());\n }, []);\n\n const handleSelect = useCallback((emblaApi: EmblaCarouselType) => {\n setSelectedIndex(emblaApi.selectedScrollSnap());\n }, []);\n\n useEffect(() => {\n if (!emblaApi) return;\n\n handleInit(emblaApi);\n handleSelect(emblaApi);\n emblaApi\n .on(\"init\", handleInit)\n .on(\"reInit\", handleInit)\n .on(\"select\", handleSelect);\n // Cleanup listener on component unmount\n return () => {\n emblaApi.off(\"init\", handleInit);\n emblaApi.off(\"reInit\", handleInit);\n emblaApi.off(\"settle\", handleSelect);\n };\n }, [emblaApi, handleInit, handleSelect]);\n\n return {\n selectedIndex,\n scrollSnaps,\n onClick: handleClick,\n };\n};\n\n/**\n * Props for the CarouselTab component.\n */\nexport interface CarouselTabProps extends ComponentPropsWithRef<\"button\"> {\n /**\n * Is the selected slide\n */\n selected?: boolean;\n}\n\nexport const CarouselTab = forwardRef<HTMLButtonElement, CarouselTabProps>(\n function CarouselTab(\n { children, className, selected = false, ...rest },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-carousel-tab\",\n css: carouselTabCss,\n window: targetWindow,\n });\n\n return (\n <button\n className={clsx(\n withBaseName(),\n { [withBaseName(\"selected\")]: selected },\n className,\n )}\n ref={ref}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n"],"names":["makePrefixer","useState","useCallback","emblaApi","useEffect","forwardRef","CarouselTab","useWindow","useComponentCssInjection","carouselTabCss","jsx","clsx"],"mappings":";;;;;;;;;;AAqCA,MAAM,YAAA,GAAeA,kBAAa,iBAAiB,CAAA;AAEtC,MAAA,cAAA,GAAiB,CAC5B,QACwB,KAAA;AACxB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,eAAS,CAAC,CAAA;AACpD,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAI,GAAAA,cAAA,CAAmB,EAAE,CAAA;AAE3D,EAAA,MAAM,WAAc,GAAAC,iBAAA;AAAA,IAClB,CAAC,KAAkB,KAAA;AACjB,MAAA,IAAI,CAAC,QAAU,EAAA;AACf,MAAA,QAAA,CAAS,SAAS,KAAK,CAAA;AAAA,KACzB;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAM,MAAA,UAAA,GAAaA,iBAAY,CAAA,CAACC,SAAgC,KAAA;AAC9D,IAAeA,cAAAA,CAAAA,SAAAA,CAAS,gBAAgB,CAAA;AAAA,GAC1C,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA,YAAA,GAAeD,iBAAY,CAAA,CAACC,SAAgC,KAAA;AAChE,IAAiBA,gBAAAA,CAAAA,SAAAA,CAAS,oBAAoB,CAAA;AAAA,GAChD,EAAG,EAAE,CAAA;AAEL,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAU,EAAA;AAEf,IAAA,UAAA,CAAW,QAAQ,CAAA;AACnB,IAAA,YAAA,CAAa,QAAQ,CAAA;AACrB,IACG,QAAA,CAAA,EAAA,CAAG,MAAQ,EAAA,UAAU,CACrB,CAAA,EAAA,CAAG,UAAU,UAAU,CAAA,CACvB,EAAG,CAAA,QAAA,EAAU,YAAY,CAAA;AAE5B,IAAA,OAAO,MAAM;AACX,MAAS,QAAA,CAAA,GAAA,CAAI,QAAQ,UAAU,CAAA;AAC/B,MAAS,QAAA,CAAA,GAAA,CAAI,UAAU,UAAU,CAAA;AACjC,MAAS,QAAA,CAAA,GAAA,CAAI,UAAU,YAAY,CAAA;AAAA,KACrC;AAAA,GACC,EAAA,CAAC,QAAU,EAAA,UAAA,EAAY,YAAY,CAAC,CAAA;AAEvC,EAAO,OAAA;AAAA,IACL,aAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAS,EAAA;AAAA,GACX;AACF;AAYO,MAAM,WAAc,GAAAC,gBAAA;AAAA,EACzB,SAASC,YACP,CAAA,EAAE,QAAU,EAAA,SAAA,EAAW,WAAW,KAAO,EAAA,GAAG,IAAK,EAAA,EACjD,GACA,EAAA;AACA,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,mBAAA;AAAA,MACR,GAAK,EAAAC,aAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IACE,uBAAAC,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAAC,SAAA;AAAA,UACT,YAAa,EAAA;AAAA,UACb,EAAE,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,QAAS,EAAA;AAAA,UACvC;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA;AAGN;;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltCarouselTabList {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--salt-spacing-200);\n}\n\n.saltCarouselTabList:focus-visible {\n outline-style: var(--salt-focused-outlineStyle);\n outline-width: var(--salt-focused-outlineWidth);\n outline-offset: var(--salt-focused-outlineOffset);\n outline-color: var(--salt-focused-outlineColor);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=CarouselTabList.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselTabList.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,94 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var CarouselContext = require('./CarouselContext.js');
10
+ var CarouselTab = require('./CarouselTab.js');
11
+ var CarouselTabList$1 = require('./CarouselTabList.css.js');
12
+
13
+ const withBaseName = core.makePrefixer("saltCarouselTabList");
14
+ const CarouselTabRenderer = react.forwardRef((props, ref) => {
15
+ return core.renderProps(CarouselTab.CarouselTab, { ...props, ref });
16
+ });
17
+ const CarouselTabList = react.forwardRef(
18
+ function CarouselTabList2({ className, render, onKeyDown, ...rest }, ref) {
19
+ const targetWindow = window.useWindow();
20
+ styles.useComponentCssInjection({
21
+ testId: "salt-carousel-controls",
22
+ css: CarouselTabList$1,
23
+ window: targetWindow
24
+ });
25
+ const { emblaApi } = CarouselContext.useCarouselContext();
26
+ const { selectedIndex, scrollSnaps, onClick } = CarouselTab.useCarouselTab(emblaApi);
27
+ const slideNodes = emblaApi == null ? void 0 : emblaApi.slideNodes();
28
+ const numberOfSlides = (slideNodes == null ? void 0 : slideNodes.length) ?? 0;
29
+ const slidesPerTransition = numberOfSlides ? Math.ceil(numberOfSlides / scrollSnaps.length) : 0;
30
+ const buttonRefs = react.useRef([]);
31
+ const handleKeyDown = (event) => {
32
+ var _a;
33
+ let newIndex = selectedIndex;
34
+ if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
35
+ const direction = event.key === "ArrowLeft" ? -1 : 1;
36
+ newIndex = (selectedIndex + direction + scrollSnaps.length) % scrollSnaps.length;
37
+ } else if (event.key === "Home") {
38
+ newIndex = 0;
39
+ } else if (event.key === "End") {
40
+ newIndex = scrollSnaps.length - 1;
41
+ }
42
+ if (newIndex !== selectedIndex) {
43
+ onClick(newIndex);
44
+ (_a = buttonRefs.current[newIndex]) == null ? void 0 : _a.focus();
45
+ event.preventDefault();
46
+ event.stopPropagation();
47
+ }
48
+ onKeyDown == null ? void 0 : onKeyDown(event);
49
+ };
50
+ return /* @__PURE__ */ jsxRuntime.jsx(
51
+ "div",
52
+ {
53
+ role: "tablist",
54
+ "aria-label": "Choose slide",
55
+ tabIndex: 0,
56
+ className: clsx.clsx(withBaseName(), className),
57
+ onKeyDown: handleKeyDown,
58
+ ref,
59
+ ...rest,
60
+ children: scrollSnaps.map((_, tabIndex) => {
61
+ const startSlideNumber = tabIndex * slidesPerTransition + 1;
62
+ const endSlideNumber = Math.min(
63
+ startSlideNumber + slidesPerTransition - 1,
64
+ numberOfSlides
65
+ );
66
+ const label = startSlideNumber === endSlideNumber ? `Slide ${startSlideNumber}` : `Slides ${startSlideNumber}-${endSlideNumber} of ${numberOfSlides}`;
67
+ const selected = selectedIndex === tabIndex;
68
+ const ariaControls = (slideNodes == null ? void 0 : slideNodes.length) ? slideNodes[startSlideNumber - 1].id : void 0;
69
+ return /* @__PURE__ */ jsxRuntime.jsx(
70
+ CarouselTabRenderer,
71
+ {
72
+ ref: (element) => {
73
+ buttonRefs.current[tabIndex] = element;
74
+ },
75
+ render,
76
+ role: "tab",
77
+ onClick: () => onClick(tabIndex),
78
+ "aria-selected": selected,
79
+ selected,
80
+ tabIndex: selected ? 0 : -1,
81
+ "aria-label": label,
82
+ "aria-labelledby": ariaControls,
83
+ "aria-controls": ariaControls
84
+ },
85
+ `carouselTab-${tabIndex}}`
86
+ );
87
+ })
88
+ }
89
+ );
90
+ }
91
+ );
92
+
93
+ exports.CarouselTabList = CarouselTabList;
94
+ //# sourceMappingURL=CarouselTabList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselTabList.js","sources":["../src/CarouselTabList.tsx"],"sourcesContent":["import { type RenderPropsType, makePrefixer, renderProps } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type HTMLAttributes, forwardRef, useRef } from \"react\";\nimport { useCarouselContext } from \"./CarouselContext\";\nimport {\n CarouselTab,\n type CarouselTabProps,\n useCarouselTab,\n} from \"./CarouselTab\";\nimport carouselControlsCss from \"./CarouselTabList.css\";\n\nconst withBaseName = makePrefixer(\"saltCarouselTabList\");\n\n/**\n * Props for the CarouselTabList component.\n */\nexport interface CarouselTabListProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Render prop to enable customisation of tab button.\n */\n render?: RenderPropsType[\"render\"];\n}\n\nconst CarouselTabRenderer = forwardRef<\n HTMLButtonElement,\n CarouselTabProps & { render?: CarouselTabListProps[\"render\"] }\n>((props, ref) => {\n return renderProps(CarouselTab, { ...props, ref });\n});\n\nexport const CarouselTabList = forwardRef<HTMLDivElement, CarouselTabListProps>(\n function CarouselTabList({ className, render, onKeyDown, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-carousel-controls\",\n css: carouselControlsCss,\n window: targetWindow,\n });\n\n const { emblaApi } = useCarouselContext();\n const { selectedIndex, scrollSnaps, onClick } = useCarouselTab(emblaApi);\n\n const slideNodes = emblaApi?.slideNodes();\n const numberOfSlides = slideNodes?.length ?? 0;\n const slidesPerTransition = numberOfSlides\n ? Math.ceil(numberOfSlides / scrollSnaps.length)\n : 0;\n\n const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (\n event,\n ) => {\n let newIndex = selectedIndex;\n\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\n const direction = event.key === \"ArrowLeft\" ? -1 : 1;\n newIndex =\n (selectedIndex + direction + scrollSnaps.length) % scrollSnaps.length;\n } else if (event.key === \"Home\") {\n newIndex = 0;\n } else if (event.key === \"End\") {\n newIndex = scrollSnaps.length - 1;\n }\n\n if (newIndex !== selectedIndex) {\n onClick(newIndex);\n buttonRefs.current[newIndex]?.focus();\n event.preventDefault();\n event.stopPropagation();\n }\n onKeyDown?.(event);\n };\n\n return (\n <div\n role=\"tablist\"\n aria-label=\"Choose slide\"\n tabIndex={0}\n className={clsx(withBaseName(), className)}\n onKeyDown={handleKeyDown}\n ref={ref}\n {...rest}\n >\n {scrollSnaps.map((_, tabIndex) => {\n const startSlideNumber = tabIndex * slidesPerTransition + 1;\n const endSlideNumber = Math.min(\n startSlideNumber + slidesPerTransition - 1,\n numberOfSlides,\n );\n const label =\n startSlideNumber === endSlideNumber\n ? `Slide ${startSlideNumber}`\n : `Slides ${startSlideNumber}-${endSlideNumber} of ${numberOfSlides}`;\n\n const selected = selectedIndex === tabIndex;\n\n const ariaControls = slideNodes?.length\n ? slideNodes[startSlideNumber - 1].id\n : undefined;\n return (\n <CarouselTabRenderer\n key={`carouselTab-${tabIndex}}`}\n ref={(element: HTMLButtonElement) => {\n buttonRefs.current[tabIndex] = element;\n }}\n render={render}\n role={\"tab\"}\n onClick={() => onClick(tabIndex)}\n aria-selected={selected}\n selected={selected}\n tabIndex={selected ? 0 : -1}\n aria-label={label}\n aria-labelledby={ariaControls}\n aria-controls={ariaControls}\n />\n );\n })}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","renderProps","CarouselTab","CarouselTabList","useWindow","useComponentCssInjection","carouselControlsCss","useCarouselContext","useCarouselTab","useRef","jsx","clsx"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ var Carousel = require('./Carousel.js');
4
+ var CarouselAnnouncementPlugin = require('./CarouselAnnouncementPlugin.js');
5
+ var CarouselCard = require('./CarouselCard.js');
6
+ var CarouselContext = require('./CarouselContext.js');
7
+ var CarouselTab = require('./CarouselTab.js');
8
+ var CarouselTabList = require('./CarouselTabList.js');
9
+ var CarouselAutoplayIndicator = require('./CarouselAutoplayIndicator.js');
10
+ var CarouselPreviousButton = require('./CarouselPreviousButton.js');
11
+ var CarouselNextButton = require('./CarouselNextButton.js');
12
+ var CarouselSlides = require('./CarouselSlides.js');
13
+ var CarouselProgressLabel = require('./CarouselProgressLabel.js');
14
+
15
+
16
+
17
+ exports.Carousel = Carousel.Carousel;
18
+ exports.CarouselAnnouncement = CarouselAnnouncementPlugin.CarouselAnnouncement;
19
+ exports.getSlideLabel = CarouselAnnouncementPlugin.getSlideLabel;
20
+ exports.CarouselCard = CarouselCard.CarouselCard;
21
+ exports.CarouselContext = CarouselContext.CarouselContext;
22
+ exports.useCarouselContext = CarouselContext.useCarouselContext;
23
+ exports.CarouselTab = CarouselTab.CarouselTab;
24
+ exports.useCarouselTab = CarouselTab.useCarouselTab;
25
+ exports.CarouselTabList = CarouselTabList.CarouselTabList;
26
+ exports.CarouselAutoplayIndicator = CarouselAutoplayIndicator.CarouselAutoplayIndicator;
27
+ exports.CarouselPreviousButton = CarouselPreviousButton.CarouselPreviousButton;
28
+ exports.CarouselNextButton = CarouselNextButton.CarouselNextButton;
29
+ exports.CarouselSlides = CarouselSlides.CarouselSlides;
30
+ exports.CarouselProgressLabel = CarouselProgressLabel.CarouselProgressLabel;
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}