@vkzstudio/muza-ui 1.5.1 → 1.6.0

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 (170) hide show
  1. package/dist/components/Accordion/Accordion.js +1 -1
  2. package/dist/components/Accordion/index.js +16 -0
  3. package/dist/components/Alert/Alert.js +6 -6
  4. package/dist/components/Alert/index.js +4 -0
  5. package/dist/components/ArticleCard/ArticleCard.js +11 -11
  6. package/dist/components/ArticleCard/index.js +7 -0
  7. package/dist/components/Avatar/index.js +6 -0
  8. package/dist/components/Breadcrumb/Breadcrumb.js +4 -4
  9. package/dist/components/Breadcrumb/index.js +10 -0
  10. package/dist/components/Button/Button.d.ts.map +1 -1
  11. package/dist/components/Button/Button.js +44 -42
  12. package/dist/components/Button/Button.stories.d.ts.map +1 -1
  13. package/dist/components/Button/index.js +6 -0
  14. package/dist/components/ButtonArrow/index.js +5 -0
  15. package/dist/components/Calendar/Calendar.js +6 -6
  16. package/dist/components/Calendar/index.js +10 -0
  17. package/dist/components/Card/Card.js +7 -7
  18. package/dist/components/Card/index.js +5 -0
  19. package/dist/components/CardCheckboxAmount/CardCheckboxAmount.js +8 -8
  20. package/dist/components/CardCheckboxAmount/index.js +4 -0
  21. package/dist/components/Carousel/Carousel.d.ts +99 -2
  22. package/dist/components/Carousel/Carousel.d.ts.map +1 -1
  23. package/dist/components/Carousel/Carousel.js +208 -151
  24. package/dist/components/Carousel/Carousel.stories.d.ts +2 -0
  25. package/dist/components/Carousel/Carousel.stories.d.ts.map +1 -1
  26. package/dist/components/Carousel/index.js +10 -0
  27. package/dist/components/CategoryCard/CategoryCard.js +2 -2
  28. package/dist/components/CategoryCard/index.js +6 -0
  29. package/dist/components/CategoryIcon/index.js +5 -0
  30. package/dist/components/Checkbox/Checkbox.js +1 -1
  31. package/dist/components/Checkbox/index.js +4 -0
  32. package/dist/components/Chip/Chip.js +5 -5
  33. package/dist/components/Chip/index.js +5 -0
  34. package/dist/components/DataTable/index.js +5 -0
  35. package/dist/components/DatePicker/DatePicker.js +18 -18
  36. package/dist/components/DatePicker/index.js +7 -0
  37. package/dist/components/DatePickerButton/DatePickerButton.js +5 -5
  38. package/dist/components/DatePickerButton/index.js +5 -0
  39. package/dist/components/Dialog/Dialog.js +21 -20
  40. package/dist/components/Dialog/index.js +13 -0
  41. package/dist/components/DotDivider/index.js +5 -0
  42. package/dist/components/DropdownMenu/DropdownMenu.d.ts +22 -3
  43. package/dist/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  44. package/dist/components/DropdownMenu/DropdownMenu.js +131 -105
  45. package/dist/components/DropdownMenu/DropdownMenu.stories.d.ts +3 -2
  46. package/dist/components/DropdownMenu/DropdownMenu.stories.d.ts.map +1 -1
  47. package/dist/components/DropdownMenu/index.js +14 -0
  48. package/dist/components/DropdownSearchMenu/DropdownSearchMenu.js +7 -6
  49. package/dist/components/DropdownSearchMenu/index.js +7 -0
  50. package/dist/components/EdgeButton/EdgeButton.js +1 -1
  51. package/dist/components/EdgeButton/index.js +5 -0
  52. package/dist/components/EmptyState/index.js +4 -0
  53. package/dist/components/ExpandableTable/ExpandableTable.js +13 -13
  54. package/dist/components/ExpandableTable/index.js +4 -0
  55. package/dist/components/FileUpload/FileItem.js +1 -1
  56. package/dist/components/FileUpload/FileUpload.js +7 -7
  57. package/dist/components/FileUpload/index.js +4 -0
  58. package/dist/components/Flex/Flex.js +5 -5
  59. package/dist/components/Flex/index.js +7 -0
  60. package/dist/components/FormField/FormField.js +9 -9
  61. package/dist/components/FormField/InputHint.js +4 -4
  62. package/dist/components/FormField/index.js +8 -0
  63. package/dist/components/HeartButton/index.js +5 -0
  64. package/dist/components/Icons/index.js +65 -0
  65. package/dist/components/InfoCard/InfoCard.js +45 -0
  66. package/dist/components/InfoCard/index.js +5 -0
  67. package/dist/components/Input/Input.js +1 -1
  68. package/dist/components/Input/index.js +4 -0
  69. package/dist/components/InputOTP/InputOTP.js +7 -7
  70. package/dist/components/InputOTP/index.js +7 -0
  71. package/dist/components/LanguageSwitcher/LanguageSwitcher.js +9 -9
  72. package/dist/components/LanguageSwitcher/index.js +6 -0
  73. package/dist/components/Lightbox/Lightbox.js +1 -1
  74. package/dist/components/Lightbox/index.js +8 -0
  75. package/dist/components/Loader/index.js +4 -0
  76. package/dist/components/LoginScreen/LoginScreen.js +4 -4
  77. package/dist/components/LoginScreen/index.js +8 -0
  78. package/dist/components/MarketNav/MarketNav.examples.d.ts.map +1 -1
  79. package/dist/components/MultiSelect/MultiSelect.d.ts.map +1 -1
  80. package/dist/components/MultiSelect/MultiSelect.js +40 -41
  81. package/dist/components/MultiSelect/index.js +4 -0
  82. package/dist/components/MuzaUIProvider/MuzaUIProvider.js +5 -5
  83. package/dist/components/MuzaUIProvider/index.js +13 -0
  84. package/dist/components/MuzaUIProvider/theme/ThemeSetterModal.js +17 -17
  85. package/dist/components/OfferCard/OfferCard.js +11 -11
  86. package/dist/components/OfferCard/index.js +7 -0
  87. package/dist/components/PageContainer/index.js +5 -0
  88. package/dist/components/Pagination/Pagination.js +5 -5
  89. package/dist/components/Pagination/index.js +4 -0
  90. package/dist/components/PartnerCard/PartnerCard.js +10 -10
  91. package/dist/components/PartnerCard/index.js +6 -0
  92. package/dist/components/PasswordInput/PasswordInput.js +7 -7
  93. package/dist/components/PasswordInput/index.js +4 -0
  94. package/dist/components/PhoneInput/CountrySelector.js +5 -5
  95. package/dist/components/PhoneInput/PhoneInput.js +8 -8
  96. package/dist/components/PhoneInput/index.js +4 -0
  97. package/dist/components/PinIndicator/index.js +4 -0
  98. package/dist/components/Popover/index.js +7 -0
  99. package/dist/components/Progress/index.js +5 -0
  100. package/dist/components/Radio/index.js +5 -0
  101. package/dist/components/Rating/Rating.js +5 -5
  102. package/dist/components/Rating/index.js +4 -0
  103. package/dist/components/RatingBlock/RatingBlock.js +2 -2
  104. package/dist/components/RatingBlock/index.js +4 -0
  105. package/dist/components/Reorderable/index.js +9 -0
  106. package/dist/components/ReorderableTable/ReorderableTable.js +7 -6
  107. package/dist/components/ReorderableTable/index.js +4 -0
  108. package/dist/components/ResponsiveLayoutTable/ResponsiveLayoutTable.js +5 -5
  109. package/dist/components/ResponsiveLayoutTable/index.js +4 -0
  110. package/dist/components/SearchFilters/SearchFilters.js +11 -11
  111. package/dist/components/SearchFilters/index.js +5 -0
  112. package/dist/components/Searchbar/index.js +4 -0
  113. package/dist/components/SegmentedControl/index.js +5 -0
  114. package/dist/components/SegmentedIconControl/index.js +5 -0
  115. package/dist/components/Select/Select.d.ts.map +1 -1
  116. package/dist/components/Select/Select.js +77 -103
  117. package/dist/components/Select/Select.stories.d.ts.map +1 -1
  118. package/dist/components/Select/SelectTrigger.d.ts +54 -0
  119. package/dist/components/Select/SelectTrigger.d.ts.map +1 -0
  120. package/dist/components/Select/SelectTrigger.js +57 -0
  121. package/dist/components/Select/SelectTrigger.stories.d.ts +11 -0
  122. package/dist/components/Select/SelectTrigger.stories.d.ts.map +1 -0
  123. package/dist/components/Select/index.d.ts +2 -0
  124. package/dist/components/Select/index.d.ts.map +1 -1
  125. package/dist/components/Select/index.js +8 -0
  126. package/dist/components/Select/utils.d.ts +10 -1
  127. package/dist/components/Select/utils.d.ts.map +1 -1
  128. package/dist/components/Select/utils.js +3 -5
  129. package/dist/components/Sheet/Sheet.js +13 -12
  130. package/dist/components/Sheet/index.js +15 -0
  131. package/dist/components/Skeleton/index.js +4 -0
  132. package/dist/components/Slider/index.js +7 -0
  133. package/dist/components/SliderIndicators/index.js +4 -0
  134. package/dist/components/Stepper/Stepper.js +6 -6
  135. package/dist/components/Stepper/index.js +4 -0
  136. package/dist/components/SwipeButton/SwipeButton.js +14 -14
  137. package/dist/components/SwipeButton/index.js +4 -0
  138. package/dist/components/Switch/index.js +4 -0
  139. package/dist/components/Tag/index.js +5 -0
  140. package/dist/components/TextEditor/EditorToolbar.js +15 -15
  141. package/dist/components/TextEditor/LinkBubbleMenu.js +9 -9
  142. package/dist/components/TextEditor/TextEditor.js +12 -12
  143. package/dist/components/TextEditor/index.js +9 -0
  144. package/dist/components/Textarea/Textarea.js +1 -1
  145. package/dist/components/Textarea/index.js +4 -0
  146. package/dist/components/TimePicker/TimePicker.js +4 -4
  147. package/dist/components/TimePicker/index.js +4 -0
  148. package/dist/components/Toast/Toast.js +7 -7
  149. package/dist/components/Toast/index.js +7 -0
  150. package/dist/components/Toggle/index.js +5 -0
  151. package/dist/components/ToggleCheckButton/index.js +5 -0
  152. package/dist/components/ToggleGroup/ToggleGroup.js +4 -4
  153. package/dist/components/ToggleGroup/index.js +5 -0
  154. package/dist/components/Tooltip/Tooltip.js +6 -6
  155. package/dist/components/Tooltip/index.js +7 -0
  156. package/dist/components/TransactionsListView/TransactionsListView.js +2 -2
  157. package/dist/components/TransactionsListView/index.js +5 -0
  158. package/dist/components/Typography/index.js +5 -0
  159. package/dist/components/TypographyLink/index.js +5 -0
  160. package/dist/components/UniversalFooter/UniversalFooter.js +3 -3
  161. package/dist/components/UniversalFooter/index.js +18 -0
  162. package/dist/components/VoucherCard/VoucherCard.js +2 -2
  163. package/dist/components/VoucherCard/index.js +7 -0
  164. package/dist/components/WebCheckoutNav/WebCheckoutNav.examples.d.ts.map +1 -1
  165. package/dist/index.js +434 -429
  166. package/dist/muza-ui.css +1 -1
  167. package/dist/utils/index.js +13 -0
  168. package/llms-full.md +133 -2
  169. package/llms.txt +2 -0
  170. package/package.json +23 -5
@@ -0,0 +1,13 @@
1
+ import { cn as t } from "./cn.js";
2
+ import { disabledLinkProps as e } from "./disabledLinkProps.js";
3
+ import { formatDate as n } from "./formatDate.js";
4
+ import { formatDateRange as p } from "./formatDateRange.js";
5
+ import { getSpacingVariants as s, spacingVariantDefinitions as x } from "./spacing.js";
6
+ export {
7
+ t as cn,
8
+ e as disabledLinkProps,
9
+ n as formatDate,
10
+ p as formatDateRange,
11
+ s as getSpacingVariants,
12
+ x as spacingVariantDefinitions
13
+ };
package/llms-full.md CHANGED
@@ -44,8 +44,8 @@ NEVER create new UI components that duplicate Muza UI functionality. Check avail
44
44
 
45
45
  **Complete Component List (57 components)**
46
46
 
47
- **Form & Input (17)**:
48
- Button, ButtonArrow, Input, PasswordInput, Textarea, Checkbox, Radio, Switch, Toggle, ToggleCheckButton, ToggleGroup, Select, MultiSelect, Searchbar, FileUpload, TextEditor, Slider
47
+ **Form & Input (18)**:
48
+ Button, ButtonArrow, Input, PasswordInput, Textarea, Checkbox, Radio, Switch, Toggle, ToggleCheckButton, ToggleGroup, Select, SelectTrigger, MultiSelect, Searchbar, FileUpload, TextEditor, Slider
49
49
 
50
50
  **Layout & Structure (7)**:
51
51
  Accordion, Card, Flex, Sheet, Typography, Dialog, Skeleton
@@ -176,6 +176,25 @@ import {
176
176
 
177
177
  Sub-components: `DropdownMenu`, `DropdownMenuTrigger`, `DropdownMenuPortal`, `DropdownMenuContent`, `DropdownMenuItem`, `DropdownMenuCheckboxItem`, `DropdownMenuRadioGroup`, `DropdownMenuRadioItem`, `DropdownMenuSeparator`, `DropdownMenuButtonItem`
178
178
 
179
+ **Navigation entries must be links.** Use `asChild` on `DropdownMenuItem` so the item
180
+ renders as a real anchor instead of a div with an `onSelect` handler:
181
+
182
+ ```tsx
183
+ <DropdownMenuItem asChild icon={<HeartBold />}>
184
+ <Link href="/profile/favorite">Favorites</Link>
185
+ </DropdownMenuItem>
186
+ ```
187
+
188
+ This produces a single `<a role="menuitem">` carrying the item styling, with the icon
189
+ inside it. Do NOT use `onSelect={() => router.push('/x')}` for navigation — it throws
190
+ away middle-click, Ctrl+click, "open link in new tab", "copy link address", the hover
191
+ URL preview, link semantics for screen readers and framework prefetching.
192
+
193
+ `icon`, `isActive` and `description` all still render, and keyboard navigation,
194
+ typeahead and `onSelect` are unchanged. `asChild` works the same way on
195
+ `DropdownMenuCheckboxItem` and `DropdownMenuRadioItem`, though a navigating child makes
196
+ little sense for those.
197
+
179
198
  #### Accordion
180
199
 
181
200
  ```tsx
@@ -222,6 +241,69 @@ import { Popover, PopoverContent, PopoverTrigger } from '@vkzstudio/muza-ui'
222
241
  </Popover>
223
242
  ```
224
243
 
244
+ #### Carousel
245
+
246
+ Built on [Embla Carousel](https://www.embla-carousel.com/). `CarouselItem` is full-width by default — override `basis-*` for multi-slide layouts.
247
+
248
+ ```tsx
249
+ import {
250
+ Carousel,
251
+ CarouselContent,
252
+ CarouselDots,
253
+ CarouselItem,
254
+ CarouselNext,
255
+ CarouselPrevious,
256
+ } from '@vkzstudio/muza-ui'
257
+
258
+ ;<Carousel align="start" options={{ loop: true }}>
259
+ <CarouselContent>
260
+ <CarouselItem className="basis-1/2 md:basis-1/3">Slide 1</CarouselItem>
261
+ <CarouselItem className="basis-1/2 md:basis-1/3">Slide 2</CarouselItem>
262
+ </CarouselContent>
263
+ <CarouselPrevious />
264
+ <CarouselNext />
265
+ <CarouselDots />
266
+ </Carousel>
267
+ ```
268
+
269
+ **Autoplay** — set `autoplay` for a self-running carousel. Do NOT install `embla-carousel-autoplay` or hand-roll a timer in your app; the library owns this.
270
+
271
+ ```tsx
272
+ // Advances every 5000ms by default; pair with loop for a seamless wrap
273
+ <Carousel autoplay options={{ loop: true }}>...</Carousel>
274
+
275
+ // Custom interval
276
+ <Carousel autoplay autoplayDelay={3000}>...</Carousel>
277
+ ```
278
+
279
+ - Pauses on hover (mouse only) and while dragging; resumes on mouse leave, once the slide settles, or after a plain tap.
280
+ - Never runs under `prefers-reduced-motion: reduce`, or with a single slide.
281
+ - `autoplay` appends Embla's `Autoplay` plugin to `plugins`, so your own plugins keep working. Passing your own `Autoplay({ ... })` instance via `plugins` takes precedence — `autoplay` steps aside rather than adding a second timer.
282
+
283
+ **Custom controls** — `useCarousel()` exposes the carousel's state and controls to any descendant, so you don't need `setApi` + local state for a counter, progress bar, or bespoke dot strip. It throws outside a `<Carousel>`.
284
+
285
+ ```tsx
286
+ import { useCarousel } from '@vkzstudio/muza-ui'
287
+
288
+ const SlideCounter = () => {
289
+ const { selectedIndex, slidesCount } = useCarousel()
290
+ return (
291
+ <span>
292
+ {selectedIndex + 1} / {slidesCount}
293
+ </span>
294
+ )
295
+ }
296
+
297
+ ;<Carousel>
298
+ <CarouselContent>...</CarouselContent>
299
+ <SlideCounter /> {/* must be inside <Carousel> */}
300
+ </Carousel>
301
+ ```
302
+
303
+ Returns `api`, `carouselRef`, `scrollPrev`, `scrollNext`, `scrollTo(index)`, `canScrollPrev`, `canScrollNext`, `selectedIndex`, `slidesCount`, plus the root's `options` / `orientation` / `plugins`.
304
+
305
+ Other props: `orientation` (`'horizontal' | 'vertical'`), `align`, `options` (Embla options), `plugins` (Embla plugins), `setApi` (imperative Embla API).
306
+
225
307
  ### 5. Complex Component APIs
226
308
 
227
309
  #### DatePicker
@@ -274,6 +356,53 @@ import { Select } from '@vkzstudio/muza-ui'
274
356
  />
275
357
  ```
276
358
 
359
+ #### SelectTrigger (styling a menu trigger)
360
+
361
+ `Select` is a value picker with combobox/listbox semantics. When the design calls for
362
+ the select pill but the control is really a **menu** — an account dropdown, a filter
363
+ menu, a navigation dropdown — use `SelectTrigger`, the exact button `Select` renders,
364
+ exported on its own. Do not hand-copy the `comp-select-*` tokens into your own
365
+ `<button>`; that silently drifts whenever Select is restyled.
366
+
367
+ ```tsx
368
+ import {
369
+ DropdownMenu,
370
+ DropdownMenuContent,
371
+ DropdownMenuItem,
372
+ DropdownMenuTrigger,
373
+ SelectTrigger,
374
+ } from '@vkzstudio/muza-ui'
375
+
376
+ ;<DropdownMenu>
377
+ <DropdownMenuTrigger asChild>
378
+ <SelectTrigger size="sm" className="max-w-comp-market-nav-select-max-w">
379
+ {userName}
380
+ </SelectTrigger>
381
+ </DropdownMenuTrigger>
382
+ <DropdownMenuContent align="end" sideOffset={8}>
383
+ <DropdownMenuItem icon={<UserBold />}>My profile</DropdownMenuItem>
384
+ <DropdownMenuItem icon={<Logout2Outline />}>Log out</DropdownMenuItem>
385
+ </DropdownMenuContent>
386
+ </DropdownMenu>
387
+ ```
388
+
389
+ Key points:
390
+
391
+ - **Stateless — no `open` prop.** The expanded border and the chevron rotation come
392
+ from `data-state="open"`, which Radix sets on the trigger in `Select`,
393
+ `DropdownMenu`, `Popover` and friends. Do not keep a local `menuOpen` state for
394
+ styling.
395
+ - **`asChild` works.** It is a `forwardRef` over a single `<button>` and spreads every
396
+ remaining prop, so Radix's ref, handlers, `aria-expanded`, `aria-haspopup` and
397
+ `data-state` all land on it.
398
+ - **It owns the chevron and truncation.** A `string` or `number` child is rendered in
399
+ the standard truncated label style; pass a node for full control.
400
+ - `className` is merged with `cn`, so `max-w-*` and friends work.
401
+ - Props: `size` (`'xs' | 'sm' | 'base' | 'lg'`), `error`, `disabled`, `prefix`,
402
+ `hasDescription`, plus all native `<button>` attributes.
403
+ - `triggerWrapperVariants` is also exported as an escape hatch for cases that cannot
404
+ use the component, but prefer the component.
405
+
277
406
  #### toast() (imperative API)
278
407
 
279
408
  Toast uses an imperative function, not a declarative component:
@@ -517,6 +646,8 @@ interface CustomButtonProps extends ButtonProps {
517
646
  - Mix different UI libraries (Material-UI, Ant Design, etc.) with Muza UI
518
647
  - Create custom toast/notification systems
519
648
  - Use `<Alert variant="error">` - use `<Alert type="error">` instead
649
+ - Copy `comp-select-*` classes into your own trigger button - use `SelectTrigger`
650
+ - Use `<Select>` for a menu of actions - it is a combobox; use `SelectTrigger` inside `DropdownMenuTrigger asChild`
520
651
 
521
652
  ## DO
522
653
 
package/llms.txt CHANGED
@@ -21,6 +21,8 @@ import '@vkzstudio/muza-ui/styles'
21
21
 
22
22
  See llms-full.md for component APIs, compound component patterns, and react-hook-form integration.
23
23
 
24
+ Some components own behaviour you should not re-implement in an app — e.g. `Carousel` has built-in autoplay (`autoplay` / `autoplayDelay`, with hover/drag pausing and `prefers-reduced-motion` support), so don't install `embla-carousel-autoplay` or hand-roll a timer.
25
+
24
26
  ## Component Categories (57 total)
25
27
 
26
28
  **Form & Input (17)**: Button, ButtonArrow, Input, PasswordInput, Textarea, Checkbox, Radio, Switch, Toggle, ToggleCheckButton, ToggleGroup, Select, MultiSelect, Searchbar, FileUpload, TextEditor, Slider
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkzstudio/muza-ui",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "description": "React component library built with Vite, shadcn/ui, and Tailwind CSS",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -8,27 +8,44 @@
8
8
  "types": "./dist/index.d.ts",
9
9
  "exports": {
10
10
  ".": {
11
+ "types": "./dist/index.d.ts",
11
12
  "import": "./dist/index.js",
12
- "types": "./dist/index.d.ts"
13
+ "default": "./dist/index.js"
13
14
  },
14
15
  "./styles": "./dist/muza-ui.css",
15
16
  "./components/*": {
17
+ "types": "./dist/components/*/index.d.ts",
16
18
  "import": "./dist/components/*/index.js",
17
- "types": "./dist/components/*/index.d.ts"
19
+ "default": "./dist/components/*/index.js"
18
20
  },
19
21
  "./utils": {
22
+ "types": "./dist/utils/index.d.ts",
20
23
  "import": "./dist/utils/index.js",
21
- "types": "./dist/utils/index.d.ts"
24
+ "default": "./dist/utils/index.js"
22
25
  },
23
26
  "./utils/*": {
27
+ "types": "./dist/utils/*.d.ts",
24
28
  "import": "./dist/utils/*.js",
25
- "types": "./dist/utils/*.d.ts"
29
+ "default": "./dist/utils/*.js"
26
30
  },
27
31
  "./styles/*": "./dist/styles/*",
28
32
  "./globals.css": "./dist/globals.css",
29
33
  "./3rd-parties.css": "./dist/styles/3rd-parties.css",
30
34
  "./models/*": "./dist/models/*"
31
35
  },
36
+ "typesVersions": {
37
+ "*": {
38
+ "components/*": [
39
+ "./dist/components/*/index.d.ts"
40
+ ],
41
+ "utils": [
42
+ "./dist/utils/index.d.ts"
43
+ ],
44
+ "utils/*": [
45
+ "./dist/utils/*.d.ts"
46
+ ]
47
+ }
48
+ },
32
49
  "sideEffects": [
33
50
  "**/*.css"
34
51
  ],
@@ -86,6 +103,7 @@
86
103
  "clsx": "^2.1.0",
87
104
  "color": "^5.0.2",
88
105
  "date-fns": "^4.1.0",
106
+ "embla-carousel-autoplay": "^8.6.0",
89
107
  "embla-carousel-react": "^8.6.0",
90
108
  "framer-motion": "^12.29.0",
91
109
  "input-otp": "^1.4.2",