@vite-mf-monorepo/ui 0.4.4 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/dist/Avatar/Avatar.d.ts +19 -0
  2. package/dist/Avatar/Avatar.js +62 -0
  3. package/dist/Avatar/Avatar.js.map +1 -0
  4. package/dist/Avatar/index.d.ts +3 -0
  5. package/dist/Avatar/index.js +5 -0
  6. package/dist/Avatar/index.js.map +1 -0
  7. package/dist/Badge/Badge.d.ts +23 -0
  8. package/dist/Badge/Badge.js +48 -0
  9. package/dist/Badge/Badge.js.map +1 -0
  10. package/dist/Badge/index.d.ts +4 -0
  11. package/dist/Badge/index.js +5 -0
  12. package/dist/Badge/index.js.map +1 -0
  13. package/dist/Button/Button.utils.d.ts +23 -0
  14. package/dist/{chunk-IUGKH376.js → Button/Button.utils.js} +8 -7
  15. package/dist/Button/Button.utils.js.map +1 -0
  16. package/dist/Button/index.d.ts +6 -26
  17. package/dist/Button/index.js +4 -5
  18. package/dist/Button/index.js.map +1 -1
  19. package/dist/Card/Card.d.ts +11 -0
  20. package/dist/{chunk-RZU2FFBW.js → Card/Card.js} +7 -8
  21. package/dist/Card/Card.js.map +1 -0
  22. package/dist/Card/index.d.ts +3 -11
  23. package/dist/Card/index.js +4 -2
  24. package/dist/Card/index.js.map +1 -1
  25. package/dist/Carousel/Carousel.d.ts +65 -0
  26. package/dist/Carousel/Carousel.js +268 -0
  27. package/dist/Carousel/Carousel.js.map +1 -0
  28. package/dist/Carousel/CarouselCounter.d.ts +17 -0
  29. package/dist/Carousel/CarouselCounter.js +28 -0
  30. package/dist/Carousel/CarouselCounter.js.map +1 -0
  31. package/dist/Carousel/CarouselError.d.ts +8 -0
  32. package/dist/Carousel/CarouselError.js +18 -0
  33. package/dist/Carousel/CarouselError.js.map +1 -0
  34. package/dist/Carousel/CarouselItem.d.ts +16 -0
  35. package/dist/Carousel/CarouselItem.js +28 -0
  36. package/dist/Carousel/CarouselItem.js.map +1 -0
  37. package/dist/Carousel/CarouselLoading.d.ts +25 -0
  38. package/dist/Carousel/CarouselLoading.js +63 -0
  39. package/dist/Carousel/CarouselLoading.js.map +1 -0
  40. package/dist/Carousel/CarouselNavigation.d.ts +31 -0
  41. package/dist/Carousel/CarouselNavigation.js +97 -0
  42. package/dist/Carousel/CarouselNavigation.js.map +1 -0
  43. package/dist/Carousel/CarouselPagination.d.ts +20 -0
  44. package/dist/Carousel/CarouselPagination.js +29 -0
  45. package/dist/Carousel/CarouselPagination.js.map +1 -0
  46. package/dist/Carousel/index.d.ts +8 -0
  47. package/dist/Carousel/index.js +15 -0
  48. package/dist/Carousel/index.js.map +1 -0
  49. package/dist/HeroImage/HeroImage.d.ts +15 -0
  50. package/dist/HeroImage/HeroImage.js +47 -0
  51. package/dist/HeroImage/HeroImage.js.map +1 -0
  52. package/dist/HeroImage/index.d.ts +2 -0
  53. package/dist/HeroImage/index.js +5 -0
  54. package/dist/HeroImage/index.js.map +1 -0
  55. package/dist/Icon/Icon.d.ts +14 -0
  56. package/dist/Icon/Icon.js +204 -0
  57. package/dist/Icon/Icon.js.map +1 -0
  58. package/dist/Icon/index.d.ts +3 -14
  59. package/dist/Icon/index.js +4 -2
  60. package/dist/Icon/index.js.map +1 -1
  61. package/dist/IconButton/IconButton.d.ts +17 -0
  62. package/dist/IconButton/IconButton.js +44 -0
  63. package/dist/IconButton/IconButton.js.map +1 -0
  64. package/dist/IconButton/index.d.ts +4 -0
  65. package/dist/IconButton/index.js +5 -0
  66. package/dist/IconButton/index.js.map +1 -0
  67. package/dist/{MovieCard.utils-D8i4d7qA.d.ts → Image/Image.d.ts} +1 -28
  68. package/dist/Image/Image.js +125 -0
  69. package/dist/Image/Image.js.map +1 -0
  70. package/dist/Image/index.d.ts +3 -0
  71. package/dist/Image/index.js +5 -0
  72. package/dist/Image/index.js.map +1 -0
  73. package/dist/Modal/Modal.d.ts +20 -0
  74. package/dist/Modal/Modal.js +55 -0
  75. package/dist/Modal/Modal.js.map +1 -0
  76. package/dist/Modal/index.d.ts +3 -0
  77. package/dist/Modal/index.js +5 -0
  78. package/dist/Modal/index.js.map +1 -0
  79. package/dist/MovieCard/MovieCard.utils.d.ts +34 -0
  80. package/dist/MovieCard/MovieCard.utils.js +20 -0
  81. package/dist/MovieCard/MovieCard.utils.js.map +1 -0
  82. package/dist/MovieCard/MovieCardContent.d.ts +18 -0
  83. package/dist/MovieCard/MovieCardContent.js +75 -0
  84. package/dist/MovieCard/MovieCardContent.js.map +1 -0
  85. package/dist/MovieCard/index.d.ts +6 -0
  86. package/dist/MovieCard/index.js +5 -0
  87. package/dist/MovieCard/index.js.map +1 -0
  88. package/dist/Rating/CircleRating.d.ts +20 -0
  89. package/dist/Rating/CircleRating.js +75 -0
  90. package/dist/Rating/CircleRating.js.map +1 -0
  91. package/dist/Rating/Rating.d.ts +23 -0
  92. package/dist/Rating/Rating.js +41 -0
  93. package/dist/Rating/Rating.js.map +1 -0
  94. package/dist/Rating/StarsRating.d.ts +18 -0
  95. package/dist/Rating/StarsRating.js +47 -0
  96. package/dist/Rating/StarsRating.js.map +1 -0
  97. package/dist/Rating/index.d.ts +2 -0
  98. package/dist/Rating/index.js +5 -0
  99. package/dist/Rating/index.js.map +1 -0
  100. package/dist/Skeleton/Skeleton.d.ts +23 -0
  101. package/dist/{chunk-FJZK3PY6.js → Skeleton/Skeleton.js} +6 -7
  102. package/dist/Skeleton/Skeleton.js.map +1 -0
  103. package/dist/Skeleton/index.d.ts +3 -0
  104. package/dist/Skeleton/index.js +5 -0
  105. package/dist/Skeleton/index.js.map +1 -0
  106. package/dist/Spinner/Spinner.d.ts +8 -0
  107. package/dist/Spinner/Spinner.js +20 -0
  108. package/dist/Spinner/Spinner.js.map +1 -0
  109. package/dist/Spinner/index.d.ts +2 -0
  110. package/dist/Spinner/index.js +5 -0
  111. package/dist/Spinner/index.js.map +1 -0
  112. package/dist/Tabs/Tabs.d.ts +34 -0
  113. package/dist/Tabs/Tabs.js +47 -0
  114. package/dist/Tabs/Tabs.js.map +1 -0
  115. package/dist/Tabs/TabsContext.d.ts +21 -0
  116. package/dist/Tabs/TabsContext.js +16 -0
  117. package/dist/Tabs/TabsContext.js.map +1 -0
  118. package/dist/Tabs/TabsList.d.ts +7 -0
  119. package/dist/Tabs/TabsList.js +51 -0
  120. package/dist/Tabs/TabsList.js.map +1 -0
  121. package/dist/Tabs/TabsListContext.d.ts +16 -0
  122. package/dist/Tabs/TabsListContext.js +16 -0
  123. package/dist/Tabs/TabsListContext.js.map +1 -0
  124. package/dist/Tabs/TabsPanel.d.ts +17 -0
  125. package/dist/Tabs/TabsPanel.js +26 -0
  126. package/dist/Tabs/TabsPanel.js.map +1 -0
  127. package/dist/Tabs/TabsTrigger.d.ts +12 -0
  128. package/dist/Tabs/TabsTrigger.js +124 -0
  129. package/dist/Tabs/TabsTrigger.js.map +1 -0
  130. package/dist/Tabs/index.d.ts +6 -0
  131. package/dist/Tabs/index.js +5 -0
  132. package/dist/Tabs/index.js.map +1 -0
  133. package/dist/Talent/Talent.d.ts +19 -0
  134. package/dist/Talent/Talent.js +69 -0
  135. package/dist/Talent/Talent.js.map +1 -0
  136. package/dist/Talent/index.d.ts +4 -0
  137. package/dist/Talent/index.js +5 -0
  138. package/dist/Talent/index.js.map +1 -0
  139. package/dist/TrailerCard/TrailerCard.d.ts +15 -0
  140. package/dist/TrailerCard/TrailerCard.js +86 -0
  141. package/dist/TrailerCard/TrailerCard.js.map +1 -0
  142. package/dist/TrailerCard/index.d.ts +2 -0
  143. package/dist/TrailerCard/index.js +5 -0
  144. package/dist/TrailerCard/index.js.map +1 -0
  145. package/dist/Typography/Typography.d.ts +17 -0
  146. package/dist/Typography/Typography.js +55 -0
  147. package/dist/Typography/Typography.js.map +1 -0
  148. package/dist/Typography/index.d.ts +2 -0
  149. package/dist/Typography/index.js +5 -0
  150. package/dist/Typography/index.js.map +1 -0
  151. package/dist/index.d.ts +31 -372
  152. package/dist/index.js +50 -1099
  153. package/dist/index.js.map +1 -1
  154. package/dist/next/Button/Button.d.ts +9 -0
  155. package/dist/{chunk-ZTQU4GMY.js → next/Button/Button.js} +13 -10
  156. package/dist/next/Button/Button.js.map +1 -0
  157. package/dist/next/Button/Button.types.d.ts +26 -0
  158. package/dist/next/Button/Button.types.js +1 -0
  159. package/dist/next/Button/Button.types.js.map +1 -0
  160. package/dist/next/Button/index.d.ts +6 -0
  161. package/dist/next/Button/index.js +5 -0
  162. package/dist/next/Button/index.js.map +1 -0
  163. package/dist/next/HeroImage/HeroImage.d.ts +11 -0
  164. package/dist/next/HeroImage/HeroImage.js +44 -0
  165. package/dist/next/HeroImage/HeroImage.js.map +1 -0
  166. package/dist/next/HeroImage/index.d.ts +2 -0
  167. package/dist/next/HeroImage/index.js +5 -0
  168. package/dist/next/HeroImage/index.js.map +1 -0
  169. package/dist/next/Image/NextImage.d.ts +8 -0
  170. package/dist/next/Image/NextImage.js +84 -0
  171. package/dist/next/Image/NextImage.js.map +1 -0
  172. package/dist/next/Image/NextImage.types.d.ts +13 -0
  173. package/dist/next/Image/NextImage.types.js +1 -0
  174. package/dist/next/Image/NextImage.types.js.map +1 -0
  175. package/dist/next/Image/index.d.ts +5 -0
  176. package/dist/next/Image/index.js +5 -0
  177. package/dist/next/Image/index.js.map +1 -0
  178. package/dist/next/MovieCard/MovieCard.d.ts +9 -0
  179. package/dist/next/MovieCard/MovieCard.js +44 -0
  180. package/dist/next/MovieCard/MovieCard.js.map +1 -0
  181. package/dist/next/MovieCard/MovieCard.types.d.ts +15 -0
  182. package/dist/next/MovieCard/MovieCard.types.js +1 -0
  183. package/dist/next/MovieCard/MovieCard.types.js.map +1 -0
  184. package/dist/next/MovieCard/MovieCardContent.d.ts +19 -0
  185. package/dist/next/MovieCard/MovieCardContent.js +79 -0
  186. package/dist/next/MovieCard/MovieCardContent.js.map +1 -0
  187. package/dist/next/MovieCard/index.d.ts +6 -0
  188. package/dist/next/MovieCard/index.js +5 -0
  189. package/dist/next/MovieCard/index.js.map +1 -0
  190. package/dist/next/index.d.ts +14 -60
  191. package/dist/next/index.js +10 -270
  192. package/dist/next/index.js.map +1 -1
  193. package/dist/react-router/Button/Button.d.ts +9 -0
  194. package/dist/react-router/Button/Button.js +52 -0
  195. package/dist/react-router/Button/Button.js.map +1 -0
  196. package/dist/react-router/Button/Button.types.d.ts +24 -0
  197. package/dist/react-router/Button/Button.types.js +1 -0
  198. package/dist/react-router/Button/Button.types.js.map +1 -0
  199. package/dist/react-router/Button/index.d.ts +6 -0
  200. package/dist/react-router/Button/index.js +5 -0
  201. package/dist/react-router/Button/index.js.map +1 -0
  202. package/dist/react-router/MovieCard/MovieCard.d.ts +9 -0
  203. package/dist/react-router/MovieCard/MovieCard.js +42 -0
  204. package/dist/react-router/MovieCard/MovieCard.js.map +1 -0
  205. package/dist/react-router/MovieCard/MovieCard.types.d.ts +15 -0
  206. package/dist/react-router/MovieCard/MovieCard.types.js +1 -0
  207. package/dist/react-router/MovieCard/MovieCard.types.js.map +1 -0
  208. package/dist/react-router/MovieCard/index.d.ts +6 -0
  209. package/dist/react-router/MovieCard/index.js +5 -0
  210. package/dist/react-router/MovieCard/index.js.map +1 -0
  211. package/dist/react-router/index.d.ts +8 -17
  212. package/dist/react-router/index.js +6 -7
  213. package/dist/react-router/index.js.map +1 -1
  214. package/package.json +1 -1
  215. package/dist/chunk-6DP3KZQG.js +0 -214
  216. package/dist/chunk-6DP3KZQG.js.map +0 -1
  217. package/dist/chunk-6FBMTGXQ.js +0 -119
  218. package/dist/chunk-6FBMTGXQ.js.map +0 -1
  219. package/dist/chunk-7IAJQE27.js +0 -228
  220. package/dist/chunk-7IAJQE27.js.map +0 -1
  221. package/dist/chunk-DGJI4VNO.js +0 -3
  222. package/dist/chunk-DGJI4VNO.js.map +0 -1
  223. package/dist/chunk-FJZK3PY6.js.map +0 -1
  224. package/dist/chunk-IUGKH376.js.map +0 -1
  225. package/dist/chunk-RZU2FFBW.js.map +0 -1
  226. package/dist/chunk-ZTQU4GMY.js.map +0 -1
  227. package/dist/index.css +0 -1313
  228. package/dist/index.css.map +0 -1
@@ -0,0 +1,41 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import CircleRating from "./CircleRating";
4
+ import StarsRating from "./StarsRating";
5
+ function Rating({
6
+ value,
7
+ max = 10,
8
+ variant = "circle",
9
+ size = "md",
10
+ showValue = true,
11
+ trackClassName,
12
+ className
13
+ }) {
14
+ const clampedValue = Math.max(0, Math.min(value, max));
15
+ const percent = clampedValue / max * 100;
16
+ return /* @__PURE__ */ jsx("div", { className: clsx("ui:inline-flex", className), children: variant === "circle" ? /* @__PURE__ */ jsx(
17
+ CircleRating,
18
+ {
19
+ percent,
20
+ size,
21
+ showValue,
22
+ value: clampedValue,
23
+ max,
24
+ trackClassName
25
+ }
26
+ ) : /* @__PURE__ */ jsx(
27
+ StarsRating,
28
+ {
29
+ percent,
30
+ size,
31
+ showValue,
32
+ value: clampedValue,
33
+ max
34
+ }
35
+ ) });
36
+ }
37
+ var Rating_default = Rating;
38
+ export {
39
+ Rating_default as default
40
+ };
41
+ //# sourceMappingURL=Rating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Rating/Rating.tsx"],"sourcesContent":["import clsx from 'clsx'\n\nimport CircleRating from './CircleRating'\nimport StarsRating from './StarsRating'\n\nexport type RatingVariant = 'circle' | 'stars'\nexport type RatingSize = 'sm' | 'md' | 'lg'\n\nexport interface RatingProps {\n /** Rating value (0-10 by default, or 0-100 if max=100) */\n value: number\n /** Maximum value (default: 10 for TMDB scores) */\n max?: number\n /** Visual variant */\n variant?: RatingVariant\n /** Size of the rating */\n size?: RatingSize\n /** Show the numeric value */\n showValue?: boolean\n /** Custom class for the background track circle (circle variant only) */\n trackClassName?: string\n /** Additional class name */\n className?: string\n}\n\nfunction Rating({\n value,\n max = 10,\n variant = 'circle',\n size = 'md',\n showValue = true,\n trackClassName,\n className,\n}: Readonly<RatingProps>) {\n const clampedValue = Math.max(0, Math.min(value, max))\n const percent = (clampedValue / max) * 100\n\n return (\n <div className={clsx('ui:inline-flex', className)}>\n {variant === 'circle' ? (\n <CircleRating\n percent={percent}\n size={size}\n showValue={showValue}\n value={clampedValue}\n max={max}\n trackClassName={trackClassName}\n />\n ) : (\n <StarsRating\n percent={percent}\n size={size}\n showValue={showValue}\n value={clampedValue}\n max={max}\n />\n )}\n </div>\n )\n}\n\nexport default Rating\n"],"mappings":"AAwCQ;AAxCR,OAAO,UAAU;AAEjB,OAAO,kBAAkB;AACzB,OAAO,iBAAiB;AAsBxB,SAAS,OAAO;AAAA,EACd;AAAA,EACA,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,eAAe,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,GAAG,CAAC;AACrD,QAAM,UAAW,eAAe,MAAO;AAEvC,SACE,oBAAC,SAAI,WAAW,KAAK,kBAAkB,SAAS,GAC7C,sBAAY,WACX;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA;AAAA,EACF,IAEA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA;AAAA,EACF,GAEJ;AAEJ;AAEA,IAAO,iBAAQ;","names":[]}
@@ -0,0 +1,18 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { RatingSize } from './Rating.js';
3
+
4
+ interface StarsRatingProps {
5
+ /** Percentage value (0-100) for the star fill */
6
+ percent: number;
7
+ /** Size of the stars */
8
+ size: RatingSize;
9
+ /** Whether to display the numeric value next to stars */
10
+ showValue: boolean;
11
+ /** The actual rating value (used for display) */
12
+ value: number;
13
+ /** Maximum rating value (used for display formatting) */
14
+ max: number;
15
+ }
16
+ declare function StarsRating({ percent, size, showValue, value, max, }: Readonly<StarsRatingProps>): react_jsx_runtime.JSX.Element;
17
+
18
+ export { type StarsRatingProps, StarsRating as default };
@@ -0,0 +1,47 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import { Icon } from "../Icon";
4
+ const starsSizeMap = {
5
+ sm: 16,
6
+ md: 20,
7
+ lg: 24
8
+ };
9
+ function StarsRating({
10
+ percent,
11
+ size,
12
+ showValue,
13
+ value,
14
+ max
15
+ }) {
16
+ const iconSize = starsSizeMap[size];
17
+ return /* @__PURE__ */ jsxs("div", { className: "ui:inline-flex ui:items-center ui:gap-1", children: [
18
+ /* @__PURE__ */ jsxs("div", { className: "ui:relative", children: [
19
+ /* @__PURE__ */ jsx("div", { className: "ui:flex ui:text-gray-300", children: [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ jsx(Icon, { name: "Star", size: iconSize }, i)) }),
20
+ /* @__PURE__ */ jsx(
21
+ "div",
22
+ {
23
+ className: "ui:absolute ui:inset-0 ui:flex ui:text-yellow-400",
24
+ style: { clipPath: `inset(0 ${String(100 - percent)}% 0 0)` },
25
+ children: [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ jsx(Icon, { name: "Star", size: iconSize }, i))
26
+ }
27
+ )
28
+ ] }),
29
+ showValue && /* @__PURE__ */ jsx(
30
+ "span",
31
+ {
32
+ className: clsx(
33
+ "ui:font-medium ui:text-muted-foreground",
34
+ size === "sm" && "ui:text-xs",
35
+ size === "md" && "ui:text-sm",
36
+ size === "lg" && "ui:text-base"
37
+ ),
38
+ children: max === 100 ? (value / 10).toFixed(1) : value.toFixed(1)
39
+ }
40
+ )
41
+ ] });
42
+ }
43
+ var StarsRating_default = StarsRating;
44
+ export {
45
+ StarsRating_default as default
46
+ };
47
+ //# sourceMappingURL=StarsRating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Rating/StarsRating.tsx"],"sourcesContent":["import clsx from 'clsx'\n\nimport { Icon } from '../Icon'\n\nimport type { IconSize } from '../Icon'\nimport type { RatingSize } from './Rating'\n\nconst starsSizeMap: Record<RatingSize, IconSize> = {\n sm: 16,\n md: 20,\n lg: 24,\n}\n\nexport interface StarsRatingProps {\n /** Percentage value (0-100) for the star fill */\n percent: number\n /** Size of the stars */\n size: RatingSize\n /** Whether to display the numeric value next to stars */\n showValue: boolean\n /** The actual rating value (used for display) */\n value: number\n /** Maximum rating value (used for display formatting) */\n max: number\n}\n\nfunction StarsRating({\n percent,\n size,\n showValue,\n value,\n max,\n}: Readonly<StarsRatingProps>) {\n const iconSize = starsSizeMap[size]\n\n return (\n <div className=\"ui:inline-flex ui:items-center ui:gap-1\">\n <div className=\"ui:relative\">\n {/* Empty stars */}\n <div className=\"ui:flex ui:text-gray-300\">\n {[1, 2, 3, 4, 5].map((i) => (\n <Icon key={i} name=\"Star\" size={iconSize} />\n ))}\n </div>\n {/* Filled stars with clip */}\n <div\n className=\"ui:absolute ui:inset-0 ui:flex ui:text-yellow-400\"\n style={{ clipPath: `inset(0 ${String(100 - percent)}% 0 0)` }}\n >\n {[1, 2, 3, 4, 5].map((i) => (\n <Icon key={i} name=\"Star\" size={iconSize} />\n ))}\n </div>\n </div>\n {showValue && (\n <span\n className={clsx(\n 'ui:font-medium ui:text-muted-foreground',\n size === 'sm' && 'ui:text-xs',\n size === 'md' && 'ui:text-sm',\n size === 'lg' && 'ui:text-base'\n )}\n >\n {max === 100 ? (value / 10).toFixed(1) : value.toFixed(1)}\n </span>\n )}\n </div>\n )\n}\n\nexport default StarsRating\n"],"mappings":"AAqCM,SAIM,KAJN;AArCN,OAAO,UAAU;AAEjB,SAAS,YAAY;AAKrB,MAAM,eAA6C;AAAA,EACjD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAeA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,WAAW,aAAa,IAAI;AAElC,SACE,qBAAC,SAAI,WAAU,2CACb;AAAA,yBAAC,SAAI,WAAU,eAEb;AAAA,0BAAC,SAAI,WAAU,4BACZ,WAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MACpB,oBAAC,QAAa,MAAK,QAAO,MAAM,YAArB,CAA+B,CAC3C,GACH;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,UAAU,WAAW,OAAO,MAAM,OAAO,CAAC,SAAS;AAAA,UAE3D,WAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MACpB,oBAAC,QAAa,MAAK,QAAO,MAAM,YAArB,CAA+B,CAC3C;AAAA;AAAA,MACH;AAAA,OACF;AAAA,IACC,aACC;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,SAAS,QAAQ;AAAA,UACjB,SAAS,QAAQ;AAAA,UACjB,SAAS,QAAQ;AAAA,QACnB;AAAA,QAEC,kBAAQ,OAAO,QAAQ,IAAI,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC;AAAA;AAAA,IAC1D;AAAA,KAEJ;AAEJ;AAEA,IAAO,sBAAQ;","names":[]}
@@ -0,0 +1,2 @@
1
+ export { default as Rating, RatingProps, RatingSize, RatingVariant } from './Rating.js';
2
+ import 'react/jsx-runtime';
@@ -0,0 +1,5 @@
1
+ import { default as default2 } from "./Rating";
2
+ export {
3
+ default2 as Rating
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Rating/index.ts"],"sourcesContent":["export { default as Rating } from './Rating'\nexport type { RatingProps, RatingSize, RatingVariant } from './Rating'\n"],"mappings":"AAAA,SAAoB,WAAXA,gBAAyB;","names":["default"]}
@@ -0,0 +1,23 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ComponentProps } from 'react';
3
+
4
+ interface SkeletonProps extends ComponentProps<'div'> {
5
+ /** Shape variant */
6
+ variant?: 'rectangle' | 'circle' | 'line';
7
+ /** Width (Tailwind class or custom value) */
8
+ width?: string;
9
+ /** Height (Tailwind class or custom value) */
10
+ height?: string;
11
+ /** Aspect ratio (e.g., "2/3", "16/9", "1/1") */
12
+ aspectRatio?: string;
13
+ /** Apply rounded corners (default: true for rectangle/line, always true for circle) */
14
+ rounded?: boolean;
15
+ }
16
+ /**
17
+ * Skeleton - Atomic loading placeholder component
18
+ *
19
+ * Composable primitive for building loading states with shimmer effect.
20
+ */
21
+ declare function Skeleton({ variant, width, height, aspectRatio, rounded, className, ...rest }: Readonly<SkeletonProps>): react_jsx_runtime.JSX.Element;
22
+
23
+ export { type SkeletonProps, Skeleton as default };
@@ -1,6 +1,5 @@
1
- import clsx from 'clsx';
2
- import { jsx } from 'react/jsx-runtime';
3
-
1
+ import { jsx } from "react/jsx-runtime";
2
+ import clsx from "clsx";
4
3
  function Skeleton({
5
4
  variant = "rectangle",
6
5
  width,
@@ -31,7 +30,7 @@ function Skeleton({
31
30
  );
32
31
  }
33
32
  var Skeleton_default = Skeleton;
34
-
35
- export { Skeleton_default };
36
- //# sourceMappingURL=chunk-FJZK3PY6.js.map
37
- //# sourceMappingURL=chunk-FJZK3PY6.js.map
33
+ export {
34
+ Skeleton_default as default
35
+ };
36
+ //# sourceMappingURL=Skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Skeleton/Skeleton.tsx"],"sourcesContent":["import clsx from 'clsx'\n\nimport type { ComponentProps } from 'react'\n\nexport interface SkeletonProps extends ComponentProps<'div'> {\n /** Shape variant */\n variant?: 'rectangle' | 'circle' | 'line'\n /** Width (Tailwind class or custom value) */\n width?: string\n /** Height (Tailwind class or custom value) */\n height?: string\n /** Aspect ratio (e.g., \"2/3\", \"16/9\", \"1/1\") */\n aspectRatio?: string\n /** Apply rounded corners (default: true for rectangle/line, always true for circle) */\n rounded?: boolean\n}\n\n/**\n * Skeleton - Atomic loading placeholder component\n *\n * Composable primitive for building loading states with shimmer effect.\n */\nfunction Skeleton({\n variant = 'rectangle',\n width,\n height,\n aspectRatio,\n rounded = true,\n className,\n ...rest\n}: Readonly<SkeletonProps>) {\n return (\n <div\n className={clsx(\n 'ui:relative ui:overflow-hidden ui:bg-muted',\n 'ui-skeleton-shimmer',\n {\n 'ui:rounded-lg': variant === 'rectangle' && rounded,\n 'ui:rounded-full': variant === 'circle',\n 'ui:rounded': variant === 'line' && rounded,\n },\n width,\n height,\n className\n )}\n style={aspectRatio ? { aspectRatio } : undefined}\n {...rest}\n />\n )\n}\n\nexport default Skeleton\n"],"mappings":"AAgCI;AAhCJ,OAAO,UAAU;AAsBjB,SAAS,SAAS;AAAA,EAChB,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,GAA4B;AAC1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,UACE,iBAAiB,YAAY,eAAe;AAAA,UAC5C,mBAAmB,YAAY;AAAA,UAC/B,cAAc,YAAY,UAAU;AAAA,QACtC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,cAAc,EAAE,YAAY,IAAI;AAAA,MACtC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,IAAO,mBAAQ;","names":[]}
@@ -0,0 +1,3 @@
1
+ export { default as Skeleton, SkeletonProps } from './Skeleton.js';
2
+ import 'react/jsx-runtime';
3
+ import 'react';
@@ -0,0 +1,5 @@
1
+ import { default as default2 } from "./Skeleton";
2
+ export {
3
+ default2 as Skeleton
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Skeleton/index.ts"],"sourcesContent":["export { default as Skeleton } from './Skeleton'\nexport type { SkeletonProps } from './Skeleton'\n"],"mappings":"AAAA,SAAoB,WAAXA,gBAA2B;","names":["default"]}
@@ -0,0 +1,8 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface SpinnerProps {
4
+ className?: string;
5
+ }
6
+ declare function Spinner({ className }: Readonly<SpinnerProps>): react_jsx_runtime.JSX.Element;
7
+
8
+ export { type SpinnerProps, Spinner as default };
@@ -0,0 +1,20 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ function Spinner({ className }) {
4
+ return /* @__PURE__ */ jsx(
5
+ "div",
6
+ {
7
+ role: "status",
8
+ "aria-label": "Loading",
9
+ className: clsx(
10
+ "ui:size-12 ui:rounded-full ui:border-4 ui:border-white/20 ui:border-t-white ui:animate-spin",
11
+ className
12
+ )
13
+ }
14
+ );
15
+ }
16
+ var Spinner_default = Spinner;
17
+ export {
18
+ Spinner_default as default
19
+ };
20
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Spinner/Spinner.tsx"],"sourcesContent":["import clsx from 'clsx'\n\nexport interface SpinnerProps {\n className?: string\n}\n\nfunction Spinner({ className }: Readonly<SpinnerProps>) {\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className={clsx(\n 'ui:size-12 ui:rounded-full ui:border-4 ui:border-white/20 ui:border-t-white ui:animate-spin',\n className\n )}\n />\n )\n}\n\nexport default Spinner\n"],"mappings":"AAQI;AARJ,OAAO,UAAU;AAMjB,SAAS,QAAQ,EAAE,UAAU,GAA2B;AACtD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,kBAAQ;","names":[]}
@@ -0,0 +1,2 @@
1
+ export { default as Spinner, SpinnerProps } from './Spinner.js';
2
+ import 'react/jsx-runtime';
@@ -0,0 +1,5 @@
1
+ import { default as default2 } from "./Spinner";
2
+ export {
3
+ default2 as Spinner
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Spinner/index.ts"],"sourcesContent":["export { default as Spinner } from './Spinner'\nexport type { SpinnerProps } from './Spinner'\n"],"mappings":"AAAA,SAAoB,WAAXA,gBAA0B;","names":["default"]}
@@ -0,0 +1,34 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import TabsList from './TabsList.js';
3
+ import TabsPanel from './TabsPanel.js';
4
+ import TabsTrigger from './TabsTrigger.js';
5
+ import { HTMLAttributes } from 'react';
6
+
7
+ /** Tabs visual variant */
8
+ type TabsVariant = 'underline' | 'pills';
9
+ interface TabsProps extends HTMLAttributes<HTMLDivElement> {
10
+ /** Default active tab value (uncontrolled) */
11
+ defaultValue?: string;
12
+ /** Controlled active tab value */
13
+ value?: string;
14
+ /** Callback when tab changes */
15
+ onValueChange?: (value: string) => void;
16
+ /** Visual variant */
17
+ variant?: TabsVariant;
18
+ /** Optional prefix for ID generation (e.g., "popular" generates ids: popular-{value}) */
19
+ prefix?: string;
20
+ }
21
+ /**
22
+ * Tabs component for navigation between content sections.
23
+ * Implements ARIA tabs pattern for accessibility.
24
+ * Supports underline and pills variants.
25
+ * Uses Compound Component pattern.
26
+ */
27
+ declare function Tabs({ defaultValue, value, onValueChange, variant, prefix, className, children, ...rest }: Readonly<TabsProps>): react_jsx_runtime.JSX.Element;
28
+ declare namespace Tabs {
29
+ var List: typeof TabsList;
30
+ var Trigger: typeof TabsTrigger;
31
+ var Panel: typeof TabsPanel;
32
+ }
33
+
34
+ export { type TabsProps, type TabsVariant, Tabs as default };
@@ -0,0 +1,47 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import { useState } from "react";
4
+ import { TabsContext } from "./TabsContext";
5
+ import TabsList from "./TabsList";
6
+ import TabsPanel from "./TabsPanel";
7
+ import TabsTrigger from "./TabsTrigger";
8
+ function Tabs({
9
+ defaultValue = "",
10
+ value,
11
+ onValueChange,
12
+ variant = "underline",
13
+ prefix,
14
+ className,
15
+ children,
16
+ ...rest
17
+ }) {
18
+ const [internalValue, setInternalValue] = useState(defaultValue);
19
+ const activeValue = value ?? internalValue;
20
+ const isControlled = value !== void 0;
21
+ const handleValueChange = (newValue) => {
22
+ if (!isControlled) {
23
+ setInternalValue(newValue);
24
+ }
25
+ onValueChange?.(newValue);
26
+ };
27
+ return /* @__PURE__ */ jsx(
28
+ TabsContext.Provider,
29
+ {
30
+ value: {
31
+ value: activeValue,
32
+ onValueChange: handleValueChange,
33
+ variant,
34
+ prefix
35
+ },
36
+ children: /* @__PURE__ */ jsx("div", { className: clsx("ui:w-full", className), ...rest, children })
37
+ }
38
+ );
39
+ }
40
+ Tabs.List = TabsList;
41
+ Tabs.Trigger = TabsTrigger;
42
+ Tabs.Panel = TabsPanel;
43
+ var Tabs_default = Tabs;
44
+ export {
45
+ Tabs_default as default
46
+ };
47
+ //# sourceMappingURL=Tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Tabs/Tabs.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useState } from 'react'\n\nimport { TabsContext } from './TabsContext'\nimport TabsList from './TabsList'\nimport TabsPanel from './TabsPanel'\nimport TabsTrigger from './TabsTrigger'\n\nimport type { HTMLAttributes } from 'react'\n\n/** Tabs visual variant */\nexport type TabsVariant = 'underline' | 'pills'\n\nexport interface TabsProps extends HTMLAttributes<HTMLDivElement> {\n /** Default active tab value (uncontrolled) */\n defaultValue?: string\n /** Controlled active tab value */\n value?: string\n /** Callback when tab changes */\n onValueChange?: (value: string) => void\n /** Visual variant */\n variant?: TabsVariant\n /** Optional prefix for ID generation (e.g., \"popular\" generates ids: popular-{value}) */\n prefix?: string\n}\n\n/**\n * Tabs component for navigation between content sections.\n * Implements ARIA tabs pattern for accessibility.\n * Supports underline and pills variants.\n * Uses Compound Component pattern.\n */\nfunction Tabs({\n defaultValue = '',\n value,\n onValueChange,\n variant = 'underline',\n prefix,\n className,\n children,\n ...rest\n}: Readonly<TabsProps>) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n\n const activeValue = value ?? internalValue\n const isControlled = value !== undefined\n\n const handleValueChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onValueChange?.(newValue)\n }\n\n return (\n <TabsContext.Provider\n value={{\n value: activeValue,\n onValueChange: handleValueChange,\n variant,\n prefix,\n }}\n >\n <div className={clsx('ui:w-full', className)} {...rest}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n}\n\nTabs.List = TabsList\nTabs.Trigger = TabsTrigger\nTabs.Panel = TabsPanel\n\nexport default Tabs\n"],"mappings":"AA+DM;AA/DN,OAAO,UAAU;AACjB,SAAS,gBAAgB;AAEzB,SAAS,mBAAmB;AAC5B,OAAO,cAAc;AACrB,OAAO,eAAe;AACtB,OAAO,iBAAiB;AA0BxB,SAAS,KAAK;AAAA,EACZ,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,YAAY;AAE/D,QAAM,cAAc,SAAS;AAC7B,QAAM,eAAe,UAAU;AAE/B,QAAM,oBAAoB,CAAC,aAAqB;AAC9C,QAAI,CAAC,cAAc;AACjB,uBAAiB,QAAQ;AAAA,IAC3B;AACA,oBAAgB,QAAQ;AAAA,EAC1B;AAEA,SACE;AAAA,IAAC,YAAY;AAAA,IAAZ;AAAA,MACC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,eAAe;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,MAEA,8BAAC,SAAI,WAAW,KAAK,aAAa,SAAS,GAAI,GAAG,MAC/C,UACH;AAAA;AAAA,EACF;AAEJ;AAEA,KAAK,OAAO;AACZ,KAAK,UAAU;AACf,KAAK,QAAQ;AAEb,IAAO,eAAQ;","names":[]}
@@ -0,0 +1,21 @@
1
+ import * as react from 'react';
2
+ import { TabsVariant } from './Tabs.js';
3
+ import 'react/jsx-runtime';
4
+ import './TabsList.js';
5
+ import './TabsPanel.js';
6
+ import './TabsTrigger.js';
7
+
8
+ interface TabsContextValue {
9
+ /** Currently active tab value */
10
+ value: string;
11
+ /** Change active tab */
12
+ onValueChange: (value: string) => void;
13
+ /** Visual variant */
14
+ variant: TabsVariant;
15
+ /** Optional prefix for ID generation */
16
+ prefix?: string;
17
+ }
18
+ declare const TabsContext: react.Context<TabsContextValue | undefined>;
19
+ declare const useTabsContext: () => TabsContextValue;
20
+
21
+ export { TabsContext, useTabsContext };
@@ -0,0 +1,16 @@
1
+ import { createContext, useContext } from "react";
2
+ const TabsContext = createContext(
3
+ void 0
4
+ );
5
+ const useTabsContext = () => {
6
+ const context = useContext(TabsContext);
7
+ if (!context) {
8
+ throw new Error("Tabs compound components must be used within <Tabs>");
9
+ }
10
+ return context;
11
+ };
12
+ export {
13
+ TabsContext,
14
+ useTabsContext
15
+ };
16
+ //# sourceMappingURL=TabsContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Tabs/TabsContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nimport type { TabsVariant } from './Tabs'\n\ninterface TabsContextValue {\n /** Currently active tab value */\n value: string\n /** Change active tab */\n onValueChange: (value: string) => void\n /** Visual variant */\n variant: TabsVariant\n /** Optional prefix for ID generation */\n prefix?: string\n}\n\nexport const TabsContext = createContext<TabsContextValue | undefined>(\n undefined\n)\n\nexport const useTabsContext = () => {\n const context = useContext(TabsContext)\n if (!context) {\n throw new Error('Tabs compound components must be used within <Tabs>')\n }\n return context\n}\n"],"mappings":"AAAA,SAAS,eAAe,kBAAkB;AAenC,MAAM,cAAc;AAAA,EACzB;AACF;AAEO,MAAM,iBAAiB,MAAM;AAClC,QAAM,UAAU,WAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,7 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ type TabsListProps = HTMLAttributes<HTMLDivElement>;
5
+ declare function TabsList({ className, children, ...rest }: Readonly<TabsListProps>): react_jsx_runtime.JSX.Element;
6
+
7
+ export { type TabsListProps, TabsList as default };
@@ -0,0 +1,51 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import { useRef } from "react";
4
+ import { useTabsContext } from "./TabsContext";
5
+ import { TabsListContext } from "./TabsListContext";
6
+ function TabsList({ className, children, ...rest }) {
7
+ const { variant } = useTabsContext();
8
+ const triggersRef = useRef([]);
9
+ const disabledRef = useRef(/* @__PURE__ */ new Set());
10
+ const registerTrigger = (value, disabled) => {
11
+ if (!triggersRef.current.includes(value)) {
12
+ triggersRef.current.push(value);
13
+ }
14
+ if (disabled) {
15
+ disabledRef.current.add(value);
16
+ } else {
17
+ disabledRef.current.delete(value);
18
+ }
19
+ };
20
+ const unregisterTrigger = (value) => {
21
+ triggersRef.current = triggersRef.current.filter((v) => v !== value);
22
+ disabledRef.current.delete(value);
23
+ };
24
+ const getTriggers = () => triggersRef.current;
25
+ const isDisabled = (value) => disabledRef.current.has(value);
26
+ return /* @__PURE__ */ jsx(
27
+ TabsListContext.Provider,
28
+ {
29
+ value: { registerTrigger, unregisterTrigger, getTriggers, isDisabled },
30
+ children: /* @__PURE__ */ jsx(
31
+ "div",
32
+ {
33
+ className: clsx(
34
+ "ui:flex ui:gap-1",
35
+ variant === "underline" && "ui:border-b ui:border-border",
36
+ variant === "pills" && "ui:[.media-section:nth-of-type(odd)_&]:bg-white ui:bg-muted ui:p-1 ui:rounded-lg ui:w-fit",
37
+ className
38
+ ),
39
+ role: "tablist",
40
+ ...rest,
41
+ children
42
+ }
43
+ )
44
+ }
45
+ );
46
+ }
47
+ var TabsList_default = TabsList;
48
+ export {
49
+ TabsList_default as default
50
+ };
51
+ //# sourceMappingURL=TabsList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Tabs/TabsList.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useRef } from 'react'\n\nimport { useTabsContext } from './TabsContext'\nimport { TabsListContext } from './TabsListContext'\n\nimport type { HTMLAttributes } from 'react'\n\nexport type TabsListProps = HTMLAttributes<HTMLDivElement>\n\nfunction TabsList({ className, children, ...rest }: Readonly<TabsListProps>) {\n const { variant } = useTabsContext()\n const triggersRef = useRef<string[]>([])\n const disabledRef = useRef<Set<string>>(new Set())\n\n const registerTrigger = (value: string, disabled?: boolean) => {\n if (!triggersRef.current.includes(value)) {\n triggersRef.current.push(value)\n }\n if (disabled) {\n disabledRef.current.add(value)\n } else {\n disabledRef.current.delete(value)\n }\n }\n\n const unregisterTrigger = (value: string) => {\n triggersRef.current = triggersRef.current.filter((v) => v !== value)\n disabledRef.current.delete(value)\n }\n\n const getTriggers = () => triggersRef.current\n const isDisabled = (value: string) => disabledRef.current.has(value)\n\n return (\n <TabsListContext.Provider\n value={{ registerTrigger, unregisterTrigger, getTriggers, isDisabled }}\n >\n <div\n className={clsx(\n 'ui:flex ui:gap-1',\n variant === 'underline' && 'ui:border-b ui:border-border',\n variant === 'pills' &&\n 'ui:[.media-section:nth-of-type(odd)_&]:bg-white ui:bg-muted ui:p-1 ui:rounded-lg ui:w-fit',\n className\n )}\n role=\"tablist\"\n {...rest}\n >\n {children}\n </div>\n </TabsListContext.Provider>\n )\n}\n\nexport default TabsList\n"],"mappings":"AAsCM;AAtCN,OAAO,UAAU;AACjB,SAAS,cAAc;AAEvB,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAMhC,SAAS,SAAS,EAAE,WAAW,UAAU,GAAG,KAAK,GAA4B;AAC3E,QAAM,EAAE,QAAQ,IAAI,eAAe;AACnC,QAAM,cAAc,OAAiB,CAAC,CAAC;AACvC,QAAM,cAAc,OAAoB,oBAAI,IAAI,CAAC;AAEjD,QAAM,kBAAkB,CAAC,OAAe,aAAuB;AAC7D,QAAI,CAAC,YAAY,QAAQ,SAAS,KAAK,GAAG;AACxC,kBAAY,QAAQ,KAAK,KAAK;AAAA,IAChC;AACA,QAAI,UAAU;AACZ,kBAAY,QAAQ,IAAI,KAAK;AAAA,IAC/B,OAAO;AACL,kBAAY,QAAQ,OAAO,KAAK;AAAA,IAClC;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,UAAkB;AAC3C,gBAAY,UAAU,YAAY,QAAQ,OAAO,CAAC,MAAM,MAAM,KAAK;AACnE,gBAAY,QAAQ,OAAO,KAAK;AAAA,EAClC;AAEA,QAAM,cAAc,MAAM,YAAY;AACtC,QAAM,aAAa,CAAC,UAAkB,YAAY,QAAQ,IAAI,KAAK;AAEnE,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,OAAO,EAAE,iBAAiB,mBAAmB,aAAa,WAAW;AAAA,MAErE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,YAAY,eAAe;AAAA,YAC3B,YAAY,WACV;AAAA,YACF;AAAA,UACF;AAAA,UACA,MAAK;AAAA,UACJ,GAAG;AAAA,UAEH;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,mBAAQ;","names":[]}
@@ -0,0 +1,16 @@
1
+ import * as react from 'react';
2
+
3
+ interface TabsListContextValue {
4
+ /** Register a trigger with its value and disabled state */
5
+ registerTrigger: (value: string, disabled?: boolean) => void;
6
+ /** Unregister a trigger */
7
+ unregisterTrigger: (value: string) => void;
8
+ /** Get all registered trigger values */
9
+ getTriggers: () => string[];
10
+ /** Check if a trigger is disabled */
11
+ isDisabled: (value: string) => boolean;
12
+ }
13
+ declare const TabsListContext: react.Context<TabsListContextValue | undefined>;
14
+ declare const useTabsListContext: () => TabsListContextValue;
15
+
16
+ export { TabsListContext, useTabsListContext };
@@ -0,0 +1,16 @@
1
+ import { createContext, useContext } from "react";
2
+ const TabsListContext = createContext(
3
+ void 0
4
+ );
5
+ const useTabsListContext = () => {
6
+ const context = useContext(TabsListContext);
7
+ if (!context) {
8
+ throw new Error("TabsTrigger must be used within <Tabs.List>");
9
+ }
10
+ return context;
11
+ };
12
+ export {
13
+ TabsListContext,
14
+ useTabsListContext
15
+ };
16
+ //# sourceMappingURL=TabsListContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Tabs/TabsListContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\n\ninterface TabsListContextValue {\n /** Register a trigger with its value and disabled state */\n registerTrigger: (value: string, disabled?: boolean) => void\n /** Unregister a trigger */\n unregisterTrigger: (value: string) => void\n /** Get all registered trigger values */\n getTriggers: () => string[]\n /** Check if a trigger is disabled */\n isDisabled: (value: string) => boolean\n}\n\nexport const TabsListContext = createContext<TabsListContextValue | undefined>(\n undefined\n)\n\nexport const useTabsListContext = () => {\n const context = useContext(TabsListContext)\n if (!context) {\n throw new Error('TabsTrigger must be used within <Tabs.List>')\n }\n return context\n}\n"],"mappings":"AAAA,SAAS,eAAe,kBAAkB;AAanC,MAAM,kBAAkB;AAAA,EAC7B;AACF;AAEO,MAAM,qBAAqB,MAAM;AACtC,QAAM,UAAU,WAAW,eAAe;AAC1C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,17 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ interface TabsPanelProps extends HTMLAttributes<HTMLDivElement> {
5
+ /** Value that identifies this panel (must match a Tabs.Trigger value) */
6
+ value: string;
7
+ /** Panel content */
8
+ children: ReactNode;
9
+ }
10
+ /**
11
+ * Tabpanel for Tabs component.
12
+ * Automatically hidden/shown based on active tab value.
13
+ * Provides proper ARIA attributes for accessibility.
14
+ */
15
+ declare function TabsPanel({ value, children, ...rest }: Readonly<TabsPanelProps>): react_jsx_runtime.JSX.Element;
16
+
17
+ export { type TabsPanelProps, TabsPanel as default };
@@ -0,0 +1,26 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import { useTabsContext } from "./TabsContext";
4
+ function TabsPanel({ value, children, ...rest }) {
5
+ const { value: activeValue, prefix } = useTabsContext();
6
+ const isActive = value === activeValue;
7
+ const getTabId = (val) => prefix ? `tab-${prefix}-${val}` : `tab-${val}`;
8
+ const getTabPanelId = (val) => prefix ? `tabpanel-${prefix}-${val}` : `tabpanel-${val}`;
9
+ return /* @__PURE__ */ jsx(
10
+ "div",
11
+ {
12
+ role: "tabpanel",
13
+ id: getTabPanelId(value),
14
+ "aria-labelledby": getTabId(value),
15
+ hidden: !isActive,
16
+ ...rest,
17
+ className: clsx("ui:mt-4", rest.className),
18
+ children
19
+ }
20
+ );
21
+ }
22
+ var TabsPanel_default = TabsPanel;
23
+ export {
24
+ TabsPanel_default as default
25
+ };
26
+ //# sourceMappingURL=TabsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Tabs/TabsPanel.tsx"],"sourcesContent":["import clsx from 'clsx'\n\nimport { useTabsContext } from './TabsContext'\n\nimport type { HTMLAttributes, ReactNode } from 'react'\n\nexport interface TabsPanelProps extends HTMLAttributes<HTMLDivElement> {\n /** Value that identifies this panel (must match a Tabs.Trigger value) */\n value: string\n /** Panel content */\n children: ReactNode\n}\n\n/**\n * Tabpanel for Tabs component.\n * Automatically hidden/shown based on active tab value.\n * Provides proper ARIA attributes for accessibility.\n */\nfunction TabsPanel({ value, children, ...rest }: Readonly<TabsPanelProps>) {\n const { value: activeValue, prefix } = useTabsContext()\n const isActive = value === activeValue\n\n const getTabId = (val: string) =>\n prefix ? `tab-${prefix}-${val}` : `tab-${val}`\n const getTabPanelId = (val: string) =>\n prefix ? `tabpanel-${prefix}-${val}` : `tabpanel-${val}`\n\n return (\n <div\n role=\"tabpanel\"\n id={getTabPanelId(value)}\n aria-labelledby={getTabId(value)}\n hidden={!isActive}\n {...rest}\n className={clsx('ui:mt-4', rest.className)}\n >\n {children}\n </div>\n )\n}\n\nexport default TabsPanel\n"],"mappings":"AA4BI;AA5BJ,OAAO,UAAU;AAEjB,SAAS,sBAAsB;AAgB/B,SAAS,UAAU,EAAE,OAAO,UAAU,GAAG,KAAK,GAA6B;AACzE,QAAM,EAAE,OAAO,aAAa,OAAO,IAAI,eAAe;AACtD,QAAM,WAAW,UAAU;AAE3B,QAAM,WAAW,CAAC,QAChB,SAAS,OAAO,MAAM,IAAI,GAAG,KAAK,OAAO,GAAG;AAC9C,QAAM,gBAAgB,CAAC,QACrB,SAAS,YAAY,MAAM,IAAI,GAAG,KAAK,YAAY,GAAG;AAExD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,IAAI,cAAc,KAAK;AAAA,MACvB,mBAAiB,SAAS,KAAK;AAAA,MAC/B,QAAQ,CAAC;AAAA,MACR,GAAG;AAAA,MACJ,WAAW,KAAK,WAAW,KAAK,SAAS;AAAA,MAExC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,oBAAQ;","names":[]}
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ButtonHTMLAttributes, ReactNode } from 'react';
3
+
4
+ interface TabsTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
5
+ /** Value that identifies this tab */
6
+ value: string;
7
+ /** Optional icon component */
8
+ icon?: ReactNode;
9
+ }
10
+ declare function TabsTrigger({ value, icon, disabled, className, children, ...rest }: Readonly<TabsTriggerProps>): react_jsx_runtime.JSX.Element;
11
+
12
+ export { type TabsTriggerProps, TabsTrigger as default };