@salt-ds/lab 1.0.0-alpha.65 → 1.0.0-alpha.67

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 (150) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/css/salt-lab.css +111 -214
  3. package/dist-cjs/carousel/Carousel.css.js +1 -1
  4. package/dist-cjs/carousel/Carousel.js +30 -87
  5. package/dist-cjs/carousel/Carousel.js.map +1 -1
  6. package/dist-cjs/carousel/CarouselContext.js +62 -0
  7. package/dist-cjs/carousel/CarouselContext.js.map +1 -0
  8. package/dist-cjs/carousel/CarouselControls.css.js +6 -0
  9. package/dist-cjs/carousel/CarouselControls.css.js.map +1 -0
  10. package/dist-cjs/carousel/CarouselControls.js +122 -0
  11. package/dist-cjs/carousel/CarouselControls.js.map +1 -0
  12. package/dist-cjs/carousel/CarouselReducer.js +77 -0
  13. package/dist-cjs/carousel/CarouselReducer.js.map +1 -0
  14. package/dist-cjs/carousel/CarouselSlide.css.js +6 -0
  15. package/dist-cjs/carousel/CarouselSlide.css.js.map +1 -0
  16. package/dist-cjs/carousel/CarouselSlide.js +95 -45
  17. package/dist-cjs/carousel/CarouselSlide.js.map +1 -1
  18. package/dist-cjs/carousel/CarouselSlider.css.js +6 -0
  19. package/dist-cjs/carousel/CarouselSlider.css.js.map +1 -0
  20. package/dist-cjs/carousel/CarouselSlider.js +93 -0
  21. package/dist-cjs/carousel/CarouselSlider.js.map +1 -0
  22. package/dist-cjs/index.js +6 -8
  23. package/dist-cjs/index.js.map +1 -1
  24. package/dist-es/carousel/Carousel.css.js +1 -1
  25. package/dist-es/carousel/Carousel.js +32 -89
  26. package/dist-es/carousel/Carousel.js.map +1 -1
  27. package/dist-es/carousel/CarouselContext.js +58 -0
  28. package/dist-es/carousel/CarouselContext.js.map +1 -0
  29. package/dist-es/carousel/CarouselControls.css.js +4 -0
  30. package/dist-es/carousel/CarouselControls.css.js.map +1 -0
  31. package/dist-es/carousel/CarouselControls.js +120 -0
  32. package/dist-es/carousel/CarouselControls.js.map +1 -0
  33. package/dist-es/carousel/CarouselReducer.js +75 -0
  34. package/dist-es/carousel/CarouselReducer.js.map +1 -0
  35. package/dist-es/carousel/CarouselSlide.css.js +4 -0
  36. package/dist-es/carousel/CarouselSlide.css.js.map +1 -0
  37. package/dist-es/carousel/CarouselSlide.js +96 -46
  38. package/dist-es/carousel/CarouselSlide.js.map +1 -1
  39. package/dist-es/carousel/CarouselSlider.css.js +4 -0
  40. package/dist-es/carousel/CarouselSlider.css.js.map +1 -0
  41. package/dist-es/carousel/CarouselSlider.js +91 -0
  42. package/dist-es/carousel/CarouselSlider.js.map +1 -0
  43. package/dist-es/index.js +3 -4
  44. package/dist-es/index.js.map +1 -1
  45. package/dist-types/carousel/Carousel.d.ts +10 -23
  46. package/dist-types/carousel/CarouselContext.d.ts +11 -0
  47. package/dist-types/carousel/CarouselControls.d.ts +26 -0
  48. package/dist-types/carousel/CarouselReducer.d.ts +30 -0
  49. package/dist-types/carousel/CarouselSlide.d.ts +31 -8
  50. package/dist-types/carousel/CarouselSlider.d.ts +13 -0
  51. package/dist-types/carousel/index.d.ts +2 -0
  52. package/dist-types/index.d.ts +0 -1
  53. package/dist-types/utils/index.d.ts +1 -1
  54. package/package.json +2 -2
  55. package/dist-cjs/stepped-tracker/Step.Connector.css.js +0 -6
  56. package/dist-cjs/stepped-tracker/Step.Connector.css.js.map +0 -1
  57. package/dist-cjs/stepped-tracker/Step.Connector.js +0 -21
  58. package/dist-cjs/stepped-tracker/Step.Connector.js.map +0 -1
  59. package/dist-cjs/stepped-tracker/Step.Description.css.js +0 -6
  60. package/dist-cjs/stepped-tracker/Step.Description.css.js.map +0 -1
  61. package/dist-cjs/stepped-tracker/Step.Description.js +0 -35
  62. package/dist-cjs/stepped-tracker/Step.Description.js.map +0 -1
  63. package/dist-cjs/stepped-tracker/Step.ExpandTrigger.css.js +0 -6
  64. package/dist-cjs/stepped-tracker/Step.ExpandTrigger.css.js.map +0 -1
  65. package/dist-cjs/stepped-tracker/Step.ExpandTrigger.js +0 -38
  66. package/dist-cjs/stepped-tracker/Step.ExpandTrigger.js.map +0 -1
  67. package/dist-cjs/stepped-tracker/Step.Icon.css.js +0 -6
  68. package/dist-cjs/stepped-tracker/Step.Icon.css.js.map +0 -1
  69. package/dist-cjs/stepped-tracker/Step.Icon.js +0 -57
  70. package/dist-cjs/stepped-tracker/Step.Icon.js.map +0 -1
  71. package/dist-cjs/stepped-tracker/Step.Label.css.js +0 -6
  72. package/dist-cjs/stepped-tracker/Step.Label.css.js.map +0 -1
  73. package/dist-cjs/stepped-tracker/Step.Label.js +0 -37
  74. package/dist-cjs/stepped-tracker/Step.Label.js.map +0 -1
  75. package/dist-cjs/stepped-tracker/Step.SROnly.css.js +0 -6
  76. package/dist-cjs/stepped-tracker/Step.SROnly.css.js.map +0 -1
  77. package/dist-cjs/stepped-tracker/Step.SROnly.js +0 -21
  78. package/dist-cjs/stepped-tracker/Step.SROnly.js.map +0 -1
  79. package/dist-cjs/stepped-tracker/Step.css.js +0 -6
  80. package/dist-cjs/stepped-tracker/Step.css.js.map +0 -1
  81. package/dist-cjs/stepped-tracker/Step.js +0 -161
  82. package/dist-cjs/stepped-tracker/Step.js.map +0 -1
  83. package/dist-cjs/stepped-tracker/SteppedTracker.Provider.js +0 -19
  84. package/dist-cjs/stepped-tracker/SteppedTracker.Provider.js.map +0 -1
  85. package/dist-cjs/stepped-tracker/SteppedTracker.css.js +0 -6
  86. package/dist-cjs/stepped-tracker/SteppedTracker.css.js.map +0 -1
  87. package/dist-cjs/stepped-tracker/SteppedTracker.js +0 -36
  88. package/dist-cjs/stepped-tracker/SteppedTracker.js.map +0 -1
  89. package/dist-cjs/stepped-tracker/stepReducer.js +0 -155
  90. package/dist-cjs/stepped-tracker/stepReducer.js.map +0 -1
  91. package/dist-cjs/stepped-tracker/useStepReducer.js +0 -18
  92. package/dist-cjs/stepped-tracker/useStepReducer.js.map +0 -1
  93. package/dist-cjs/stepped-tracker/utils.js +0 -121
  94. package/dist-cjs/stepped-tracker/utils.js.map +0 -1
  95. package/dist-es/stepped-tracker/Step.Connector.css.js +0 -4
  96. package/dist-es/stepped-tracker/Step.Connector.css.js.map +0 -1
  97. package/dist-es/stepped-tracker/Step.Connector.js +0 -19
  98. package/dist-es/stepped-tracker/Step.Connector.js.map +0 -1
  99. package/dist-es/stepped-tracker/Step.Description.css.js +0 -4
  100. package/dist-es/stepped-tracker/Step.Description.css.js.map +0 -1
  101. package/dist-es/stepped-tracker/Step.Description.js +0 -33
  102. package/dist-es/stepped-tracker/Step.Description.js.map +0 -1
  103. package/dist-es/stepped-tracker/Step.ExpandTrigger.css.js +0 -4
  104. package/dist-es/stepped-tracker/Step.ExpandTrigger.css.js.map +0 -1
  105. package/dist-es/stepped-tracker/Step.ExpandTrigger.js +0 -36
  106. package/dist-es/stepped-tracker/Step.ExpandTrigger.js.map +0 -1
  107. package/dist-es/stepped-tracker/Step.Icon.css.js +0 -4
  108. package/dist-es/stepped-tracker/Step.Icon.css.js.map +0 -1
  109. package/dist-es/stepped-tracker/Step.Icon.js +0 -55
  110. package/dist-es/stepped-tracker/Step.Icon.js.map +0 -1
  111. package/dist-es/stepped-tracker/Step.Label.css.js +0 -4
  112. package/dist-es/stepped-tracker/Step.Label.css.js.map +0 -1
  113. package/dist-es/stepped-tracker/Step.Label.js +0 -35
  114. package/dist-es/stepped-tracker/Step.Label.js.map +0 -1
  115. package/dist-es/stepped-tracker/Step.SROnly.css.js +0 -4
  116. package/dist-es/stepped-tracker/Step.SROnly.css.js.map +0 -1
  117. package/dist-es/stepped-tracker/Step.SROnly.js +0 -19
  118. package/dist-es/stepped-tracker/Step.SROnly.js.map +0 -1
  119. package/dist-es/stepped-tracker/Step.css.js +0 -4
  120. package/dist-es/stepped-tracker/Step.css.js.map +0 -1
  121. package/dist-es/stepped-tracker/Step.js +0 -159
  122. package/dist-es/stepped-tracker/Step.js.map +0 -1
  123. package/dist-es/stepped-tracker/SteppedTracker.Provider.js +0 -15
  124. package/dist-es/stepped-tracker/SteppedTracker.Provider.js.map +0 -1
  125. package/dist-es/stepped-tracker/SteppedTracker.css.js +0 -4
  126. package/dist-es/stepped-tracker/SteppedTracker.css.js.map +0 -1
  127. package/dist-es/stepped-tracker/SteppedTracker.js +0 -34
  128. package/dist-es/stepped-tracker/SteppedTracker.js.map +0 -1
  129. package/dist-es/stepped-tracker/stepReducer.js +0 -153
  130. package/dist-es/stepped-tracker/stepReducer.js.map +0 -1
  131. package/dist-es/stepped-tracker/useStepReducer.js +0 -16
  132. package/dist-es/stepped-tracker/useStepReducer.js.map +0 -1
  133. package/dist-es/stepped-tracker/utils.js +0 -114
  134. package/dist-es/stepped-tracker/utils.js.map +0 -1
  135. package/dist-types/stepped-tracker/Step.Connector.d.ts +0 -1
  136. package/dist-types/stepped-tracker/Step.Description.d.ts +0 -4
  137. package/dist-types/stepped-tracker/Step.ExpandTrigger.d.ts +0 -5
  138. package/dist-types/stepped-tracker/Step.Icon.d.ts +0 -8
  139. package/dist-types/stepped-tracker/Step.Label.d.ts +0 -4
  140. package/dist-types/stepped-tracker/Step.SROnly.d.ts +0 -5
  141. package/dist-types/stepped-tracker/Step.d.ts +0 -2
  142. package/dist-types/stepped-tracker/Step.types.d.ts +0 -19
  143. package/dist-types/stepped-tracker/SteppedTracker.Provider.d.ts +0 -9
  144. package/dist-types/stepped-tracker/SteppedTracker.d.ts +0 -2
  145. package/dist-types/stepped-tracker/SteppedTracker.types.d.ts +0 -6
  146. package/dist-types/stepped-tracker/index.d.ts +0 -6
  147. package/dist-types/stepped-tracker/stepReducer.d.ts +0 -2
  148. package/dist-types/stepped-tracker/stepReducer.types.d.ts +0 -27
  149. package/dist-types/stepped-tracker/useStepReducer.d.ts +0 -3
  150. package/dist-types/stepped-tracker/utils.d.ts +0 -10
package/CHANGELOG.md CHANGED
@@ -1,5 +1,70 @@
1
1
  # @salt-ds/lab
2
2
 
3
+ ## 1.0.0-alpha.67
4
+
5
+ ### Minor Changes
6
+
7
+ - c664e97: - Moved `SteppedTracker` component from labs to core, renamed as `Stepper`.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [c664e97]
12
+ - Updated dependencies [06232b0]
13
+ - @salt-ds/core@1.45.0
14
+
15
+ ## 1.0.0-alpha.66
16
+
17
+ ### Minor Changes
18
+
19
+ - 799cf41: Updated `Carousel` component
20
+
21
+ - Renamed `initialIndex` to `defaultActiveSlideIndex`
22
+ - Added controlled `activeSlideIndex`
23
+ - Added `visibleSlides` to control how many slides can be visible at a time.
24
+ - Added `CarouselSlider` and extracted the controls to its own component, `CarouselControls` to improve composition.
25
+ - Added appearance in `CarouselSlide` to allow for border items.
26
+ - Added keyboard navigation.
27
+ - Removed usage of `DeckLayout`.
28
+
29
+ before:
30
+
31
+ ```tsx
32
+ <Carousel>
33
+ {items.map((item, index) => (
34
+ <CarouselSlide
35
+ key={index}
36
+ ButtonBar={<Button variant="cta">Learn more</Button>}
37
+ description="Lorem ipsum"
38
+ title="Carousel slide title"
39
+ />
40
+ ))}
41
+ </Carousel>
42
+ ```
43
+
44
+ after:
45
+
46
+ ```tsx
47
+ <Carousel>
48
+ <CarouselControls />
49
+ <CarouselSlider>
50
+ {items.map((slide) => (
51
+ <CarouselSlide
52
+ key={slide.title}
53
+ header={<H3>{slide.title}</H3>}
54
+ actions={<Link href="#">{slide.link}</Link>}
55
+ >
56
+ <Text>{slide.content}</Text>
57
+ </CarouselSlide>
58
+ ))}
59
+ </CarouselSlider>
60
+ </Carousel>
61
+ ```
62
+
63
+ ### Patch Changes
64
+
65
+ - Updated dependencies [851b2eb]
66
+ - @salt-ds/core@1.44.1
67
+
3
68
  ## 1.0.0-alpha.65
4
69
 
5
70
  ### Minor Changes
package/css/salt-lab.css CHANGED
@@ -252,27 +252,122 @@
252
252
  }
253
253
 
254
254
  /* src/carousel/Carousel.css */
255
- .saltGridLayout.saltCarousel {
256
- grid-template-columns: min-content auto min-content;
257
- grid-template-areas: "prev-button slider next-button" "dots dots dots";
255
+ .saltCarousel {
256
+ display: grid;
257
+ grid-row-gap: var(--salt-spacing-100);
258
+ grid-template-areas: "controls" "slider";
259
+ grid-template-rows: auto 1fr;
258
260
  }
259
- .saltCarousel.saltCarousel-compact {
260
- grid-template-areas: "slider slider slider" "prev-button dots next-button";
261
+ .saltCarousel.saltCarousel-bottom {
262
+ grid-template-areas: "slider" "controls";
263
+ grid-template-rows: 1fr auto;
261
264
  }
262
- .saltCarousel-prev-button {
263
- grid-area: prev-button;
264
- height: 100%;
265
+
266
+ /* src/carousel/CarouselControls.css */
267
+ .saltCarouselControls {
268
+ display: flex;
269
+ gap: var(--salt-spacing-100);
270
+ align-items: center;
271
+ grid-area: controls;
265
272
  }
266
- .saltCarousel-next-button {
267
- grid-area: next-button;
268
- height: 100%;
273
+ .saltCarouselControls-container {
274
+ display: flex;
275
+ flex-flow: wrap;
276
+ align-items: center;
277
+ gap: var(--salt-spacing-100);
278
+ justify-content: space-between;
279
+ }
280
+ .saltCarouselControls-container:last-child {
281
+ margin-left: auto;
282
+ }
283
+ .saltCarouselControls-container h2 {
284
+ margin: 0;
285
+ }
286
+ .saltCarouselControls-sr-only {
287
+ display: none;
288
+ }
289
+ .saltCarouselControls:focus-within .saltCarouselControls-sr-only {
290
+ display: block;
291
+ position: fixed;
292
+ top: 0;
293
+ left: 0;
294
+ transform: translate(-100%, -100%);
269
295
  }
270
- .saltCarousel-slider {
296
+
297
+ /* src/carousel/CarouselSlide.css */
298
+ .saltCarouselSlide {
299
+ scroll-snap-align: start;
300
+ display: flex;
301
+ flex-direction: column;
302
+ flex: 0 0 auto;
303
+ box-sizing: border-box;
304
+ width: var(--carousel-slide-width, 100%);
305
+ gap: var(--salt-spacing-200);
306
+ }
307
+ .saltCarouselSlide:focus-visible {
308
+ outline: var(--salt-focused-outline);
309
+ outline-offset: calc(0px - var(--salt-focused-outlineWidth));
310
+ }
311
+ .saltCarouselSlide-actions {
312
+ display: none;
313
+ }
314
+ .saltCarouselSlide-sr-only {
315
+ position: fixed;
316
+ top: 0;
317
+ left: 0;
318
+ transform: translate(-100%, -100%);
319
+ }
320
+ .saltCarouselSlide-actions.saltCarouselSlide-visible {
321
+ display: flex;
322
+ }
323
+ .saltCarouselSlide-container {
324
+ display: flex;
325
+ flex-direction: column;
326
+ box-sizing: border-box;
327
+ gap: var(--salt-spacing-200);
328
+ padding-left: var(--salt-spacing-25);
329
+ padding-bottom: var(--salt-spacing-25);
330
+ flex-grow: 1;
331
+ }
332
+ .saltCarouselSlide-content {
333
+ display: flex;
334
+ flex-direction: column;
335
+ flex-grow: 1;
336
+ gap: var(--salt-spacing-100);
337
+ }
338
+ .saltCarouselSlide-card {
339
+ padding: var(--salt-spacing-200);
340
+ padding-top: 0;
341
+ }
342
+ .saltCarouselSlide-content h2,
343
+ .saltCarouselSlide-content h3 {
344
+ margin: 0;
345
+ }
346
+ .saltCarouselSlide-bordered {
347
+ border: var(--salt-size-border) var(--salt-container-borderStyle) var(--salt-container-primary-borderColor);
348
+ border-radius: var(--salt-palette-corner, 0);
349
+ overflow: hidden;
350
+ }
351
+
352
+ /* src/carousel/CarouselSlider.css */
353
+ .saltCarouselSlider {
354
+ display: flex;
355
+ scroll-snap-type: x mandatory;
356
+ overflow-x: auto;
357
+ scroll-behavior: smooth;
358
+ width: 100%;
359
+ gap: var(--salt-spacing-100);
271
360
  grid-area: slider;
272
361
  }
273
- .saltCarousel-dots {
274
- grid-area: dots;
275
- justify-self: center;
362
+ @supports (scrollbar-width: none) {
363
+ .saltCarouselSlider {
364
+ scrollbar-width: none;
365
+ }
366
+ }
367
+ @supports not (scrollbar-width: none) {
368
+ .saltCarouselSlider::-webkit-scrollbar {
369
+ display: none;
370
+ }
276
371
  }
277
372
 
278
373
  /* src/cascading-menu/CascadingMenuItem.css */
@@ -2892,204 +2987,6 @@
2892
2987
  letter-spacing: var(--salt-text-letterSpacing);
2893
2988
  }
2894
2989
 
2895
- /* src/stepped-tracker/Step.Connector.css */
2896
- .saltStepConnector {
2897
- grid-area: connector;
2898
- transition-duration: inherit;
2899
- transition-timing-function: inherit;
2900
- transition-property: opacity, min-height;
2901
- }
2902
- .saltSteppedTracker-horizontal .saltStepConnector {
2903
- position: absolute;
2904
- transform: translateY(-100%);
2905
- top: calc(var(--step-icon-size) / 2);
2906
- left: calc(50% + calc(var(--step-icon-size) / 2 + var(--salt-spacing-100)));
2907
- right: calc(-50% + calc(var(--step-icon-size) / 2 + var(--salt-spacing-100)));
2908
- border-top-width: var(--salt-size-border-strong);
2909
- border-top-style: var(--salt-track-borderStyle-incomplete);
2910
- border-top-color: var(--salt-track-borderColor);
2911
- }
2912
- .saltSteppedTracker-horizontal .saltStep-stage-completed > .saltStepConnector,
2913
- .saltSteppedTracker-horizontal .saltStep-stage-inprogress > .saltStepConnector {
2914
- border-top-style: var(--salt-track-borderStyle-complete);
2915
- }
2916
- .saltSteppedTracker-vertical .saltStepConnector {
2917
- min-height: var(--salt-size-base);
2918
- align-self: stretch;
2919
- justify-self: center;
2920
- border-left-width: var(--salt-size-border-strong);
2921
- border-left-style: var(--salt-track-borderStyle-incomplete);
2922
- border-left-color: var(--salt-track-borderColor);
2923
- }
2924
- .saltSteppedTracker-vertical .saltStep-stage-completed > .saltStepConnector,
2925
- .saltSteppedTracker-vertical .saltStep-stage-inprogress > .saltStepConnector {
2926
- border-left-style: var(--salt-track-borderStyle-complete);
2927
- }
2928
- .saltStep-depth-0.saltStep:not(.saltStep-expanded):last-child > .saltStepConnector {
2929
- opacity: 0;
2930
- min-height: 0;
2931
- }
2932
- .saltStep-depth-0.saltStep-expanded:last-child .saltStep:not(.saltStep-expanded):last-child .saltStepConnector {
2933
- opacity: 0;
2934
- min-height: 0;
2935
- }
2936
-
2937
- /* src/stepped-tracker/Step.Description.css */
2938
- .saltStepDescription {
2939
- grid-area: description;
2940
- }
2941
- .saltSteppedTracker-vertical .saltStepDescription {
2942
- padding-bottom: var(--salt-spacing-300);
2943
- padding-left: calc((var(--step-depth)) * var(--salt-spacing-100));
2944
- }
2945
- .saltStep-status-warning > .saltStepDescription {
2946
- color: var(--salt-status-warning-foreground-informative);
2947
- }
2948
- .saltStep-status-error > .saltStepDescription {
2949
- color: var(--salt-status-error-foreground-informative);
2950
- }
2951
-
2952
- /* src/stepped-tracker/Step.ExpandTrigger.css */
2953
- .saltStepExpandTrigger {
2954
- grid-area: expand;
2955
- }
2956
- .saltButton.saltStepExpandTrigger:focus-visible {
2957
- outline-offset: calc(-1 * var(--salt-focused-outlineWidth));
2958
- }
2959
-
2960
- /* src/stepped-tracker/Step.Icon.css */
2961
- .saltStepIcon {
2962
- grid-area: icon;
2963
- display: flex;
2964
- justify-content: center;
2965
- align-items: center;
2966
- justify-self: center;
2967
- }
2968
- .saltSteppedTracker-vertical .saltStepIcon {
2969
- height: var(--salt-size-base);
2970
- }
2971
- .saltStep-stage-pending > .saltStepIcon {
2972
- --saltIcon-color: var(--salt-status-static-foreground);
2973
- }
2974
- .saltStep-stage-locked > .saltStepIcon {
2975
- --saltIcon-color: var(--salt-status-static-foreground);
2976
- }
2977
- .saltStep-stage-inprogress > .saltStepIcon {
2978
- --saltIcon-color: var(--salt-status-info-foreground-decorative);
2979
- }
2980
- .saltStep-stage-active > .saltStepIcon {
2981
- --saltIcon-color: var(--salt-status-info-foreground-decorative);
2982
- }
2983
- .saltStep-stage-completed > .saltStepIcon {
2984
- --saltIcon-color: var(--salt-status-success-foreground-decorative);
2985
- }
2986
- .saltStep-status-warning > .saltStepIcon {
2987
- --saltIcon-color: var(--salt-status-warning-foreground-decorative);
2988
- }
2989
- .saltStep-status-error > .saltStepIcon {
2990
- --saltIcon-color: var(--salt-status-error-foreground-decorative);
2991
- }
2992
-
2993
- /* src/stepped-tracker/Step.Label.css */
2994
- .saltStepLabel {
2995
- grid-area: label;
2996
- }
2997
- .saltSteppedTracker-horizontal .saltStepLabel {
2998
- margin-top: var(--salt-spacing-50);
2999
- }
3000
- .saltSteppedTracker-vertical .saltStepLabel {
3001
- padding-top: calc((var(--salt-size-base) - var(--salt-text-label-lineHeight)) / 2);
3002
- padding-bottom: calc((var(--salt-size-base) - var(--salt-text-label-lineHeight)) / 2);
3003
- padding-left: calc((var(--step-depth)) * var(--salt-spacing-100));
3004
- }
3005
- .saltStep-depth-0 > .saltText.saltStepLabel {
3006
- font-weight: var(--salt-text-fontWeight-strong);
3007
- }
3008
-
3009
- /* src/stepped-tracker/Step.SROnly.css */
3010
- .saltStepSROnly {
3011
- position: fixed;
3012
- top: 0;
3013
- left: 0;
3014
- transform: translate(-100%, -100%);
3015
- }
3016
-
3017
- /* src/stepped-tracker/Step.css */
3018
- .saltStep {
3019
- --step-icon-base-size: var(--salt-size-icon, 12px);
3020
- --step-icon-size-multiplier: var(--saltIcon-size-multiplier, 1.5);
3021
- --step-icon-size: calc(var(--step-icon-base-size) * var(--step-icon-size-multiplier));
3022
- --step-depth: var(--saltStep-depth, 0);
3023
- }
3024
- .saltSteppedTracker-horizontal .saltStep {
3025
- position: relative;
3026
- display: grid;
3027
- grid-template-columns: 1fr;
3028
- grid-template-rows: repeat(3, min-content);
3029
- grid-template-areas: "icon" "label" "description";
3030
- justify-items: center;
3031
- align-items: center;
3032
- text-align: center;
3033
- flex: 1;
3034
- padding: 0 var(--salt-spacing-25);
3035
- }
3036
- .saltSteppedTracker-vertical .saltStep {
3037
- display: grid;
3038
- grid-template-columns: var(--step-icon-size) 1fr min-content;
3039
- grid-template-areas: "icon label expand" "connector description ." "stepped-tracker stepped-tracker stepped-tracker";
3040
- justify-items: start;
3041
- align-items: start;
3042
- gap: 0 var(--salt-spacing-100);
3043
- width: 100%;
3044
- transition-duration: inherit;
3045
- transition-timing-function: inherit;
3046
- transition-property: grid-template-rows;
3047
- }
3048
- .saltSteppedTracker-vertical .saltStep-terminal {
3049
- grid-template-areas: "icon label label" "connector description description" "stepped-tracker stepped-tracker stepped-tracker";
3050
- }
3051
- .saltSteppedTracker-vertical > .saltStep.saltStep-expanded {
3052
- grid-template-rows: var(--salt-size-base) min-content 1fr;
3053
- }
3054
- .saltSteppedTracker-vertical > .saltStep.saltStep-collapsed {
3055
- grid-template-rows: var(--salt-size-base) min-content 0fr;
3056
- }
3057
-
3058
- /* src/stepped-tracker/SteppedTracker.css */
3059
- .saltSteppedTracker {
3060
- grid-area: stepped-tracker;
3061
- width: 100%;
3062
- height: 100%;
3063
- margin: 0;
3064
- padding: 0;
3065
- list-style-type: none;
3066
- transition-duration: var(--salt-duration-perceptible);
3067
- transition-timing-function: ease-in-out;
3068
- transition-property: opacity, visibility;
3069
- }
3070
- @media (prefers-reduced-motion) {
3071
- .saltSteppedTracker {
3072
- transition-duration: var(--salt-duration-instant);
3073
- }
3074
- }
3075
- .saltSteppedTracker-horizontal {
3076
- display: flex;
3077
- flex-direction: row;
3078
- }
3079
- .saltSteppedTracker-vertical {
3080
- display: flex;
3081
- flex-direction: column;
3082
- overflow: hidden;
3083
- }
3084
- .saltSteppedTracker-vertical > .saltStep.saltStep-expanded > .saltSteppedTracker {
3085
- opacity: 1;
3086
- visibility: visible;
3087
- }
3088
- .saltSteppedTracker-vertical > .saltStep.saltStep-collapsed > .saltSteppedTracker {
3089
- opacity: 0;
3090
- visibility: hidden;
3091
- }
3092
-
3093
2990
  /* src/system-status/SystemStatus.css */
3094
2991
  .saltSystemStatus {
3095
2992
  background: var(--saltSystemStatus-background, var(--systemStatus-background));
@@ -4597,4 +4494,4 @@
4597
4494
  margin: calc(var(--salt-size-unit) / 2) 0;
4598
4495
  }
4599
4496
 
4600
- /* src/5896d85c-5f80-4171-bcd0-176a25d4d17f.css */
4497
+ /* src/c73aefdf-62ff-4b8b-8ac0-ab77a4c4d85e.css */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltGridLayout.saltCarousel {\n grid-template-columns: min-content auto min-content;\n grid-template-areas: \"prev-button slider next-button\" \"dots dots dots\";\n}\n\n.saltCarousel.saltCarousel-compact {\n grid-template-areas: \"slider slider slider\" \"prev-button dots next-button\";\n}\n\n.saltCarousel-prev-button {\n grid-area: prev-button;\n height: 100%;\n}\n\n.saltCarousel-next-button {\n grid-area: next-button;\n height: 100%;\n}\n\n.saltCarousel-slider {\n grid-area: slider;\n}\n\n.saltCarousel-dots {\n grid-area: dots;\n justify-self: center;\n}\n";
3
+ var css_248z = ".saltCarousel {\n display: grid;\n grid-row-gap: var(--salt-spacing-100);\n grid-template-areas: \"controls\" \"slider\";\n grid-template-rows: auto 1fr;\n}\n\n.saltCarousel.saltCarousel-bottom {\n grid-template-areas: \"slider\" \"controls\";\n grid-template-rows: 1fr auto;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Carousel.css.js.map
@@ -1,24 +1,22 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var react = require('react');
5
4
  var core = require('@salt-ds/core');
6
5
  var styles = require('@salt-ds/styles');
7
6
  var window = require('@salt-ds/window');
8
7
  var clsx = require('clsx');
9
- var DeckLayout = require('../deck-layout/DeckLayout.js');
10
- var useSlideSelection = require('../utils/useSlideSelection.js');
8
+ var react = require('react');
11
9
  var Carousel$1 = require('./Carousel.css.js');
10
+ var CarouselContext = require('./CarouselContext.js');
12
11
 
13
12
  const withBaseName = core.makePrefixer("saltCarousel");
14
13
  const Carousel = react.forwardRef(
15
14
  function Carousel2({
16
- initialIndex,
17
- animation = "slide",
18
- carouselDescription,
15
+ defaultActiveSlideIndex = 0,
16
+ activeSlideIndex,
17
+ visibleSlides: visibleSlidesProp = 1,
19
18
  children,
20
- className,
21
- compact,
19
+ controlsPlacement = "top",
22
20
  id: idProp,
23
21
  ...rest
24
22
  }, ref) {
@@ -28,88 +26,33 @@ const Carousel = react.forwardRef(
28
26
  css: Carousel$1,
29
27
  window: targetWindow
30
28
  });
31
- const { NextIcon, PreviousIcon } = core.useIcon();
29
+ const { matchedBreakpoints } = core.useBreakpoint();
30
+ const visibleSlides = core.resolveResponsiveValue(
31
+ visibleSlidesProp,
32
+ matchedBreakpoints
33
+ );
32
34
  const id = core.useId(idProp);
33
- const slidesCount = react.Children.count(children);
34
- const [_, selectedSlide, handleSlideSelection] = useSlideSelection.useSlideSelection(initialIndex);
35
- const moveSlide = (direction) => {
36
- const moveLeft = selectedSlide === 0 ? slidesCount - 1 : selectedSlide - 1;
37
- const moveRight = selectedSlide === slidesCount - 1 ? 0 : selectedSlide + 1;
38
- const newSelection = direction === "left" ? moveLeft : moveRight;
39
- const newTransition = direction === "left" ? "decrease" : "increase";
40
- handleSlideSelection(newSelection, newTransition);
41
- };
42
- const handleRadioChange = ({
43
- target: { value }
44
- }) => {
45
- handleSlideSelection(Number(value));
46
- };
47
- react.useEffect(() => {
48
- if (process.env.NODE_ENV !== "production") {
49
- if (slidesCount < 1) {
50
- console.warn(
51
- "Carousel component requires more than one children to render. At least two elements should be provided."
52
- );
53
- }
54
- }
55
- }, [slidesCount]);
56
- return /* @__PURE__ */ jsxRuntime.jsxs(
57
- core.GridLayout,
35
+ return /* @__PURE__ */ jsxRuntime.jsx(
36
+ CarouselContext.CarouselProvider,
58
37
  {
59
- "aria-label": carouselDescription,
60
- "aria-roledescription": "carousel",
38
+ defaultActiveSlideIndex,
39
+ activeSlideIndex,
40
+ visibleSlides,
61
41
  id,
62
- role: "region",
63
- ref,
64
- gap: 0,
65
- columns: 3,
66
- className: clsx.clsx(
67
- withBaseName(),
68
- compact && withBaseName("compact"),
69
- className
70
- ),
71
- ...rest,
72
- children: [
73
- /* @__PURE__ */ jsxRuntime.jsx(
74
- core.Button,
75
- {
76
- variant: "secondary",
77
- className: withBaseName("prev-button"),
78
- onClick: () => moveSlide("left"),
79
- children: /* @__PURE__ */ jsxRuntime.jsx(PreviousIcon, { size: 2 })
80
- }
81
- ),
82
- /* @__PURE__ */ jsxRuntime.jsx(
83
- DeckLayout.DeckLayout,
84
- {
85
- activeIndex: selectedSlide,
86
- animation,
87
- className: withBaseName("slider"),
88
- children
89
- }
90
- ),
91
- /* @__PURE__ */ jsxRuntime.jsx(
92
- core.Button,
93
- {
94
- variant: "secondary",
95
- className: withBaseName("next-button"),
96
- onClick: () => moveSlide("right"),
97
- children: /* @__PURE__ */ jsxRuntime.jsx(NextIcon, { size: 2 })
98
- }
99
- ),
100
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: withBaseName("dots"), children: /* @__PURE__ */ jsxRuntime.jsx(
101
- core.RadioButtonGroup,
102
- {
103
- "aria-label": "Carousel buttons",
104
- onChange: handleRadioChange,
105
- value: `${selectedSlide}`,
106
- direction: "horizontal",
107
- children: Array.from({ length: slidesCount }, (_2, index) => ({
108
- value: `${index}`
109
- })).map((radio) => /* @__PURE__ */ react.createElement(core.RadioButton, { ...radio, key: radio.value }))
110
- }
111
- ) })
112
- ]
42
+ children: /* @__PURE__ */ jsxRuntime.jsx(
43
+ "section",
44
+ {
45
+ role: "region",
46
+ className: clsx.clsx(withBaseName(), {
47
+ [withBaseName(controlsPlacement)]: controlsPlacement === "bottom"
48
+ }),
49
+ "aria-roledescription": "carousel",
50
+ id,
51
+ ref,
52
+ ...rest,
53
+ children
54
+ }
55
+ )
113
56
  }
114
57
  );
115
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Carousel.js","sources":["../src/carousel/Carousel.tsx"],"sourcesContent":["import {\n Button,\n GridLayout,\n RadioButton,\n RadioButtonGroup,\n makePrefixer,\n useIcon,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n Children,\n type HTMLAttributes,\n type ReactElement,\n forwardRef,\n useEffect,\n} from \"react\";\nimport { DeckLayout } from \"../deck-layout\";\nimport { useSlideSelection } from \"../utils\";\nimport type { CarouselSlideProps } from \"./CarouselSlide\";\n\nimport carouselCss from \"./Carousel.css\";\n\nconst withBaseName = makePrefixer(\"saltCarousel\");\n\nexport interface CarouselProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The initial Index enables you to select the active slide in the carousel.\n * Optional, default 0.\n **/\n initialIndex?: number;\n /**\n * The animation when the slides are shown.\n * Optional. Defaults to `slide`\n **/\n animation?: \"slide\" | \"fade\";\n /**\n * If this props is passed it will set the aria-label with value to the carousel container.\n * Optional. Defaults to undefined\n */\n carouselDescription?: string;\n /**\n * Collection of slides to render\n * Component must implement CarouselSlideProps. Mandatory.\n */\n children: Array<ReactElement<CarouselSlideProps>>;\n /**\n * This prop will enable compact / reduced width mode.\n * The navigation buttons would be part of indicators\n * Optional. Defaults to false\n **/\n compact?: boolean;\n /**\n * It sets the id for the Carousel Container.\n * String. Optional\n */\n id?: string;\n}\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(\n function Carousel(\n {\n initialIndex,\n animation = \"slide\",\n carouselDescription,\n children,\n className,\n compact,\n id: idProp,\n ...rest\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-carousel\",\n css: carouselCss,\n window: targetWindow,\n });\n const { NextIcon, PreviousIcon } = useIcon();\n const id = useId(idProp);\n const slidesCount = Children.count(children);\n\n const [_, selectedSlide, handleSlideSelection] =\n useSlideSelection(initialIndex);\n\n const moveSlide = (direction: \"left\" | \"right\") => {\n const moveLeft =\n selectedSlide === 0 ? slidesCount - 1 : selectedSlide - 1;\n const moveRight =\n selectedSlide === slidesCount - 1 ? 0 : selectedSlide + 1;\n const newSelection = direction === \"left\" ? moveLeft : moveRight;\n const newTransition = direction === \"left\" ? \"decrease\" : \"increase\";\n handleSlideSelection(newSelection, newTransition);\n };\n\n const handleRadioChange: ChangeEventHandler<HTMLInputElement> = ({\n target: { value },\n }) => {\n handleSlideSelection(Number(value));\n };\n\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n if (slidesCount < 1) {\n console.warn(\n \"Carousel component requires more than one children to render. At least two elements should be provided.\",\n );\n }\n }\n }, [slidesCount]);\n\n return (\n <GridLayout\n aria-label={carouselDescription}\n aria-roledescription=\"carousel\"\n id={id}\n role=\"region\"\n ref={ref}\n gap={0}\n columns={3}\n className={clsx(\n withBaseName(),\n compact && withBaseName(\"compact\"),\n className,\n )}\n {...rest}\n >\n <Button\n variant=\"secondary\"\n className={withBaseName(\"prev-button\")}\n onClick={() => moveSlide(\"left\")}\n >\n <PreviousIcon size={2} />\n </Button>\n <DeckLayout\n activeIndex={selectedSlide}\n animation={animation}\n className={withBaseName(\"slider\")}\n >\n {children}\n </DeckLayout>\n <Button\n variant=\"secondary\"\n className={withBaseName(\"next-button\")}\n onClick={() => moveSlide(\"right\")}\n >\n <NextIcon size={2} />\n </Button>\n <div className={withBaseName(\"dots\")}>\n <RadioButtonGroup\n aria-label=\"Carousel buttons\"\n onChange={handleRadioChange}\n value={`${selectedSlide}`}\n direction={\"horizontal\"}\n >\n {Array.from({ length: slidesCount }, (_, index) => ({\n value: `${index}`,\n })).map((radio) => (\n <RadioButton {...radio} key={radio.value} />\n ))}\n </RadioButtonGroup>\n </div>\n </GridLayout>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Carousel","useWindow","useComponentCssInjection","carouselCss","useIcon","useId","Children","useSlideSelection","useEffect","jsxs","GridLayout","clsx","jsx","Button","DeckLayout","RadioButtonGroup","_","createElement","RadioButton"],"mappings":"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"}
1
+ {"version":3,"file":"Carousel.js","sources":["../src/carousel/Carousel.tsx"],"sourcesContent":["import {\n type ResponsiveProp,\n makePrefixer,\n resolveResponsiveValue,\n useBreakpoint,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type HTMLAttributes, forwardRef } from \"react\";\nimport carouselCss from \"./Carousel.css\";\nimport { CarouselProvider } from \"./CarouselContext\";\n\nconst withBaseName = makePrefixer(\"saltCarousel\");\n\nexport interface CarouselProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The initial Index enables you to select the active slide in the carousel.\n * Optional, default 0.\n **/\n defaultActiveSlideIndex?: number;\n /**\n * Controlled index of active slide in the carousel.\n **/\n activeSlideIndex?: number;\n /**\n * Set the placement of the CarouselControls relative to the CarouselSlider element. Defaults to `top`.\n */\n controlsPlacement?: \"top\" | \"bottom\";\n /**\n * Number of slides visible at a time.\n * Optional, default 1.\n **/\n visibleSlides?: ResponsiveProp<number>;\n}\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(\n function Carousel(\n {\n defaultActiveSlideIndex = 0,\n activeSlideIndex,\n visibleSlides: visibleSlidesProp = 1,\n children,\n controlsPlacement = \"top\",\n id: idProp,\n ...rest\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-carousel\",\n css: carouselCss,\n window: targetWindow,\n });\n const { matchedBreakpoints } = useBreakpoint();\n\n const visibleSlides = resolveResponsiveValue(\n visibleSlidesProp,\n matchedBreakpoints,\n );\n const id = useId(idProp);\n return (\n <CarouselProvider\n defaultActiveSlideIndex={defaultActiveSlideIndex}\n activeSlideIndex={activeSlideIndex}\n visibleSlides={visibleSlides}\n id={id}\n >\n <section\n role=\"region\"\n className={clsx(withBaseName(), {\n [withBaseName(controlsPlacement)]: controlsPlacement === \"bottom\",\n })}\n aria-roledescription=\"carousel\"\n id={id}\n ref={ref}\n {...rest}\n >\n {children}\n </section>\n </CarouselProvider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Carousel","useWindow","useComponentCssInjection","carouselCss","useBreakpoint","resolveResponsiveValue","useId","jsx","CarouselProvider","clsx"],"mappings":";;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAuBzC,MAAM,QAAW,GAAAC,gBAAA;AAAA,EACtB,SAASC,SACP,CAAA;AAAA,IACE,uBAA0B,GAAA,CAAA;AAAA,IAC1B,gBAAA;AAAA,IACA,eAAe,iBAAoB,GAAA,CAAA;AAAA,IACnC,QAAA;AAAA,IACA,iBAAoB,GAAA,KAAA;AAAA,IACpB,EAAI,EAAA,MAAA;AAAA,IACJ,GAAG;AAAA,KAEL,GACA,EAAA;AACA,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,UAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AACD,IAAM,MAAA,EAAE,kBAAmB,EAAA,GAAIC,kBAAc,EAAA;AAE7C,IAAA,MAAM,aAAgB,GAAAC,2BAAA;AAAA,MACpB,iBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAM,MAAA,EAAA,GAAKC,WAAM,MAAM,CAAA;AACvB,IACE,uBAAAC,cAAA;AAAA,MAACC,gCAAA;AAAA,MAAA;AAAA,QACC,uBAAA;AAAA,QACA,gBAAA;AAAA,QACA,aAAA;AAAA,QACA,EAAA;AAAA,QAEA,QAAA,kBAAAD,cAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,QAAA;AAAA,YACL,SAAA,EAAWE,SAAK,CAAA,YAAA,EAAgB,EAAA;AAAA,cAC9B,CAAC,YAAA,CAAa,iBAAiB,CAAC,GAAG,iBAAsB,KAAA;AAAA,aAC1D,CAAA;AAAA,YACD,sBAAqB,EAAA,UAAA;AAAA,YACrB,EAAA;AAAA,YACA,GAAA;AAAA,YACC,GAAG,IAAA;AAAA,YAEH;AAAA;AAAA;AACH;AAAA,KACF;AAAA;AAGN;;;;"}
@@ -0,0 +1,62 @@
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 CarouselReducer = require('./CarouselReducer.js');
7
+
8
+ const CarouselStateContext = core.createContext(
9
+ "CarouselStateContext",
10
+ {
11
+ slides: /* @__PURE__ */ new Map(),
12
+ activeSlideIndex: 0,
13
+ visibleSlides: 1,
14
+ focusedSlideIndex: 0,
15
+ carouselId: void 0
16
+ }
17
+ );
18
+ const CarouselDispatchContext = core.createContext(
19
+ "CarouselDispatchContext",
20
+ () => {
21
+ return;
22
+ }
23
+ );
24
+ function CarouselProvider({
25
+ children,
26
+ activeSlideIndex: activeSlideIndexProp,
27
+ defaultActiveSlideIndex = 0,
28
+ visibleSlides = 1,
29
+ id
30
+ }) {
31
+ const [activeSlideIndex, setActiveSlideIndex] = core.useControlled({
32
+ controlled: activeSlideIndexProp,
33
+ default: defaultActiveSlideIndex,
34
+ name: "Carousel",
35
+ state: "activeSlideIndex"
36
+ });
37
+ const [state, dispatch] = react.useReducer(CarouselReducer.carouselReducer, {
38
+ slides: /* @__PURE__ */ new Map(),
39
+ focusedSlideIndex: activeSlideIndex,
40
+ activeSlideIndex,
41
+ visibleSlides,
42
+ carouselId: id
43
+ });
44
+ react.useEffect(() => {
45
+ dispatch({
46
+ type: "updateSlideCount",
47
+ payload: visibleSlides
48
+ });
49
+ }, [visibleSlides]);
50
+ react.useEffect(() => {
51
+ dispatch({
52
+ type: "moveToIndex",
53
+ payload: activeSlideIndex
54
+ });
55
+ }, [activeSlideIndex]);
56
+ return /* @__PURE__ */ jsxRuntime.jsx(CarouselStateContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(CarouselDispatchContext.Provider, { value: dispatch, children }) });
57
+ }
58
+
59
+ exports.CarouselDispatchContext = CarouselDispatchContext;
60
+ exports.CarouselProvider = CarouselProvider;
61
+ exports.CarouselStateContext = CarouselStateContext;
62
+ //# sourceMappingURL=CarouselContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CarouselContext.js","sources":["../src/carousel/CarouselContext.tsx"],"sourcesContent":["import { createContext, useControlled } from \"@salt-ds/core\";\nimport { type ReactNode, useEffect, useReducer } from \"react\";\nimport {\n type CarouselReducerDispatch,\n type CarouselReducerState,\n carouselReducer,\n} from \"./CarouselReducer\";\n\nexport const CarouselStateContext = createContext<CarouselReducerState>(\n \"CarouselStateContext\",\n {\n slides: new Map(),\n activeSlideIndex: 0,\n visibleSlides: 1,\n focusedSlideIndex: 0,\n carouselId: undefined,\n },\n);\nexport const CarouselDispatchContext = createContext<CarouselReducerDispatch>(\n \"CarouselDispatchContext\",\n () => {\n return;\n },\n);\n\nexport function CarouselProvider({\n children,\n activeSlideIndex: activeSlideIndexProp,\n defaultActiveSlideIndex = 0,\n visibleSlides = 1,\n id,\n}: {\n children: ReactNode;\n activeSlideIndex?: number;\n defaultActiveSlideIndex?: number;\n visibleSlides?: number;\n id?: string;\n}) {\n const [activeSlideIndex, setActiveSlideIndex] = useControlled({\n controlled: activeSlideIndexProp,\n default: defaultActiveSlideIndex,\n name: \"Carousel\",\n state: \"activeSlideIndex\",\n });\n const [state, dispatch] = useReducer(carouselReducer, {\n slides: new Map(),\n focusedSlideIndex: activeSlideIndex,\n activeSlideIndex,\n visibleSlides,\n carouselId: id,\n });\n\n useEffect(() => {\n dispatch({\n type: \"updateSlideCount\",\n payload: visibleSlides,\n });\n }, [visibleSlides]);\n\n useEffect(() => {\n dispatch({\n type: \"moveToIndex\",\n payload: activeSlideIndex,\n });\n }, [activeSlideIndex]);\n\n return (\n <CarouselStateContext.Provider value={state}>\n <CarouselDispatchContext.Provider value={dispatch}>\n {children}\n </CarouselDispatchContext.Provider>\n </CarouselStateContext.Provider>\n );\n}\n"],"names":["createContext","useControlled","useReducer","carouselReducer","useEffect","jsx"],"mappings":";;;;;;;AAQO,MAAM,oBAAuB,GAAAA,kBAAA;AAAA,EAClC,sBAAA;AAAA,EACA;AAAA,IACE,MAAA,sBAAY,GAAI,EAAA;AAAA,IAChB,gBAAkB,EAAA,CAAA;AAAA,IAClB,aAAe,EAAA,CAAA;AAAA,IACf,iBAAmB,EAAA,CAAA;AAAA,IACnB,UAAY,EAAA,KAAA;AAAA;AAEhB;AACO,MAAM,uBAA0B,GAAAA,kBAAA;AAAA,EACrC,yBAAA;AAAA,EACA,MAAM;AACJ,IAAA;AAAA;AAEJ;AAEO,SAAS,gBAAiB,CAAA;AAAA,EAC/B,QAAA;AAAA,EACA,gBAAkB,EAAA,oBAAA;AAAA,EAClB,uBAA0B,GAAA,CAAA;AAAA,EAC1B,aAAgB,GAAA,CAAA;AAAA,EAChB;AACF,CAMG,EAAA;AACD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIC,kBAAc,CAAA;AAAA,IAC5D,UAAY,EAAA,oBAAA;AAAA,IACZ,OAAS,EAAA,uBAAA;AAAA,IACT,IAAM,EAAA,UAAA;AAAA,IACN,KAAO,EAAA;AAAA,GACR,CAAA;AACD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,iBAAWC,+BAAiB,EAAA;AAAA,IACpD,MAAA,sBAAY,GAAI,EAAA;AAAA,IAChB,iBAAmB,EAAA,gBAAA;AAAA,IACnB,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAY,EAAA;AAAA,GACb,CAAA;AAED,EAAAC,eAAA,CAAU,MAAM;AACd,IAAS,QAAA,CAAA;AAAA,MACP,IAAM,EAAA,kBAAA;AAAA,MACN,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,GACH,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAAA,eAAA,CAAU,MAAM;AACd,IAAS,QAAA,CAAA;AAAA,MACP,IAAM,EAAA,aAAA;AAAA,MACN,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,GACH,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,uBACGC,cAAA,CAAA,oBAAA,CAAqB,QAArB,EAAA,EAA8B,KAAO,EAAA,KAAA,EACpC,QAAC,kBAAAA,cAAA,CAAA,uBAAA,CAAwB,QAAxB,EAAA,EAAiC,KAAO,EAAA,QAAA,EACtC,UACH,CACF,EAAA,CAAA;AAEJ;;;;;;"}