@spark-ui/components 10.0.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 (296) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +19 -0
  4. package/dist/DialogTrigger-5SI4dvpK.d.mts +142 -0
  5. package/dist/DialogTrigger-5SI4dvpK.d.ts +142 -0
  6. package/dist/Input-g0LpWuv0.d.mts +17 -0
  7. package/dist/Input-g0LpWuv0.d.ts +17 -0
  8. package/dist/InputGroup-aoaZxCLk.d.mts +28 -0
  9. package/dist/InputGroup-aoaZxCLk.d.ts +28 -0
  10. package/dist/InputTrailingIcon-BBp7sE6D.d.mts +20 -0
  11. package/dist/InputTrailingIcon-ZZx8PoJy.d.ts +20 -0
  12. package/dist/LabelRequiredIndicator-DRnCzHMU.d.mts +19 -0
  13. package/dist/LabelRequiredIndicator-DRnCzHMU.d.ts +19 -0
  14. package/dist/accordion/index.d.mts +85 -0
  15. package/dist/accordion/index.d.ts +85 -0
  16. package/dist/accordion/index.js +461 -0
  17. package/dist/accordion/index.js.map +1 -0
  18. package/dist/accordion/index.mjs +249 -0
  19. package/dist/accordion/index.mjs.map +1 -0
  20. package/dist/alert-dialog/index.d.mts +119 -0
  21. package/dist/alert-dialog/index.d.ts +119 -0
  22. package/dist/alert-dialog/index.js +1451 -0
  23. package/dist/alert-dialog/index.js.map +1 -0
  24. package/dist/alert-dialog/index.mjs +177 -0
  25. package/dist/alert-dialog/index.mjs.map +1 -0
  26. package/dist/badge/index.d.mts +47 -0
  27. package/dist/badge/index.d.ts +47 -0
  28. package/dist/badge/index.js +122 -0
  29. package/dist/badge/index.js.map +1 -0
  30. package/dist/badge/index.mjs +95 -0
  31. package/dist/badge/index.mjs.map +1 -0
  32. package/dist/breadcrumb/index.d.mts +64 -0
  33. package/dist/breadcrumb/index.d.ts +64 -0
  34. package/dist/breadcrumb/index.js +326 -0
  35. package/dist/breadcrumb/index.js.map +1 -0
  36. package/dist/breadcrumb/index.mjs +149 -0
  37. package/dist/breadcrumb/index.mjs.map +1 -0
  38. package/dist/button/index.d.mts +40 -0
  39. package/dist/button/index.d.ts +40 -0
  40. package/dist/button/index.js +877 -0
  41. package/dist/button/index.js.map +1 -0
  42. package/dist/button/index.mjs +10 -0
  43. package/dist/button/index.mjs.map +1 -0
  44. package/dist/carousel/index.d.mts +253 -0
  45. package/dist/carousel/index.d.ts +253 -0
  46. package/dist/carousel/index.js +1678 -0
  47. package/dist/carousel/index.js.map +1 -0
  48. package/dist/carousel/index.mjs +716 -0
  49. package/dist/carousel/index.mjs.map +1 -0
  50. package/dist/checkbox/index.d.mts +120 -0
  51. package/dist/checkbox/index.d.ts +120 -0
  52. package/dist/checkbox/index.js +873 -0
  53. package/dist/checkbox/index.js.map +1 -0
  54. package/dist/checkbox/index.mjs +349 -0
  55. package/dist/checkbox/index.mjs.map +1 -0
  56. package/dist/chip/index.d.mts +97 -0
  57. package/dist/chip/index.d.ts +97 -0
  58. package/dist/chip/index.js +905 -0
  59. package/dist/chip/index.js.map +1 -0
  60. package/dist/chip/index.mjs +793 -0
  61. package/dist/chip/index.mjs.map +1 -0
  62. package/dist/chunk-2KPFQEAA.mjs +52 -0
  63. package/dist/chunk-2KPFQEAA.mjs.map +1 -0
  64. package/dist/chunk-4F5DOL57.mjs +26 -0
  65. package/dist/chunk-4F5DOL57.mjs.map +1 -0
  66. package/dist/chunk-6JOA37TZ.mjs +742 -0
  67. package/dist/chunk-6JOA37TZ.mjs.map +1 -0
  68. package/dist/chunk-7PMPYEHJ.mjs +379 -0
  69. package/dist/chunk-7PMPYEHJ.mjs.map +1 -0
  70. package/dist/chunk-AESXFMCC.mjs +68 -0
  71. package/dist/chunk-AESXFMCC.mjs.map +1 -0
  72. package/dist/chunk-B42LOFIZ.mjs +308 -0
  73. package/dist/chunk-B42LOFIZ.mjs.map +1 -0
  74. package/dist/chunk-FGOZHKBT.mjs +97 -0
  75. package/dist/chunk-FGOZHKBT.mjs.map +1 -0
  76. package/dist/chunk-HLXYG643.mjs +52 -0
  77. package/dist/chunk-HLXYG643.mjs.map +1 -0
  78. package/dist/chunk-JKNBJHD5.mjs +601 -0
  79. package/dist/chunk-JKNBJHD5.mjs.map +1 -0
  80. package/dist/chunk-K7VP7DH3.mjs +66 -0
  81. package/dist/chunk-K7VP7DH3.mjs.map +1 -0
  82. package/dist/chunk-MUNDKRAE.mjs +80 -0
  83. package/dist/chunk-MUNDKRAE.mjs.map +1 -0
  84. package/dist/chunk-NBZKMCHF.mjs +36 -0
  85. package/dist/chunk-NBZKMCHF.mjs.map +1 -0
  86. package/dist/chunk-PZWESKAR.mjs +314 -0
  87. package/dist/chunk-PZWESKAR.mjs.map +1 -0
  88. package/dist/collapsible/index.d.mts +60 -0
  89. package/dist/collapsible/index.d.ts +60 -0
  90. package/dist/collapsible/index.js +140 -0
  91. package/dist/collapsible/index.js.map +1 -0
  92. package/dist/collapsible/index.mjs +8 -0
  93. package/dist/collapsible/index.mjs.map +1 -0
  94. package/dist/combobox/index.d.mts +285 -0
  95. package/dist/combobox/index.d.ts +285 -0
  96. package/dist/combobox/index.js +2920 -0
  97. package/dist/combobox/index.js.map +1 -0
  98. package/dist/combobox/index.mjs +1267 -0
  99. package/dist/combobox/index.mjs.map +1 -0
  100. package/dist/dialog/index.d.mts +33 -0
  101. package/dist/dialog/index.d.ts +33 -0
  102. package/dist/dialog/index.js +1286 -0
  103. package/dist/dialog/index.js.map +1 -0
  104. package/dist/dialog/index.mjs +13 -0
  105. package/dist/dialog/index.mjs.map +1 -0
  106. package/dist/divider/index.d.mts +61 -0
  107. package/dist/divider/index.d.ts +61 -0
  108. package/dist/divider/index.js +223 -0
  109. package/dist/divider/index.js.map +1 -0
  110. package/dist/divider/index.mjs +196 -0
  111. package/dist/divider/index.mjs.map +1 -0
  112. package/dist/drawer/index.d.mts +148 -0
  113. package/dist/drawer/index.d.ts +148 -0
  114. package/dist/drawer/index.js +1266 -0
  115. package/dist/drawer/index.js.map +1 -0
  116. package/dist/drawer/index.mjs +299 -0
  117. package/dist/drawer/index.mjs.map +1 -0
  118. package/dist/dropdown/index.d.mts +233 -0
  119. package/dist/dropdown/index.d.ts +233 -0
  120. package/dist/dropdown/index.js +2402 -0
  121. package/dist/dropdown/index.js.map +1 -0
  122. package/dist/dropdown/index.mjs +741 -0
  123. package/dist/dropdown/index.mjs.map +1 -0
  124. package/dist/form-field/index.d.mts +176 -0
  125. package/dist/form-field/index.d.ts +176 -0
  126. package/dist/form-field/index.js +540 -0
  127. package/dist/form-field/index.js.map +1 -0
  128. package/dist/form-field/index.mjs +13 -0
  129. package/dist/form-field/index.mjs.map +1 -0
  130. package/dist/icon/index.d.mts +28 -0
  131. package/dist/icon/index.d.ts +28 -0
  132. package/dist/icon/index.js +127 -0
  133. package/dist/icon/index.js.map +1 -0
  134. package/dist/icon/index.mjs +9 -0
  135. package/dist/icon/index.mjs.map +1 -0
  136. package/dist/icon-button/index.d.mts +16 -0
  137. package/dist/icon-button/index.d.ts +16 -0
  138. package/dist/icon-button/index.js +921 -0
  139. package/dist/icon-button/index.js.map +1 -0
  140. package/dist/icon-button/index.mjs +11 -0
  141. package/dist/icon-button/index.mjs.map +1 -0
  142. package/dist/input/index.d.mts +78 -0
  143. package/dist/input/index.d.ts +78 -0
  144. package/dist/input/index.js +1119 -0
  145. package/dist/input/index.js.map +1 -0
  146. package/dist/input/index.mjs +16 -0
  147. package/dist/input/index.mjs.map +1 -0
  148. package/dist/kbd/index.d.mts +9 -0
  149. package/dist/kbd/index.d.ts +9 -0
  150. package/dist/kbd/index.js +46 -0
  151. package/dist/kbd/index.js.map +1 -0
  152. package/dist/kbd/index.mjs +19 -0
  153. package/dist/kbd/index.mjs.map +1 -0
  154. package/dist/label/index.d.mts +11 -0
  155. package/dist/label/index.d.ts +11 -0
  156. package/dist/label/index.js +78 -0
  157. package/dist/label/index.js.map +1 -0
  158. package/dist/label/index.mjs +7 -0
  159. package/dist/label/index.mjs.map +1 -0
  160. package/dist/link-box/index.d.mts +34 -0
  161. package/dist/link-box/index.d.ts +34 -0
  162. package/dist/link-box/index.js +92 -0
  163. package/dist/link-box/index.js.map +1 -0
  164. package/dist/link-box/index.mjs +58 -0
  165. package/dist/link-box/index.mjs.map +1 -0
  166. package/dist/pagination/index.d.mts +143 -0
  167. package/dist/pagination/index.d.ts +143 -0
  168. package/dist/pagination/index.js +1303 -0
  169. package/dist/pagination/index.js.map +1 -0
  170. package/dist/pagination/index.mjs +326 -0
  171. package/dist/pagination/index.mjs.map +1 -0
  172. package/dist/popover/index.d.mts +93 -0
  173. package/dist/popover/index.d.ts +93 -0
  174. package/dist/popover/index.js +1280 -0
  175. package/dist/popover/index.js.map +1 -0
  176. package/dist/popover/index.mjs +13 -0
  177. package/dist/popover/index.mjs.map +1 -0
  178. package/dist/portal/index.d.mts +13 -0
  179. package/dist/portal/index.d.ts +13 -0
  180. package/dist/portal/index.js +37 -0
  181. package/dist/portal/index.js.map +1 -0
  182. package/dist/portal/index.mjs +10 -0
  183. package/dist/portal/index.mjs.map +1 -0
  184. package/dist/progress/index.d.mts +48 -0
  185. package/dist/progress/index.d.ts +48 -0
  186. package/dist/progress/index.js +201 -0
  187. package/dist/progress/index.js.map +1 -0
  188. package/dist/progress/index.mjs +174 -0
  189. package/dist/progress/index.mjs.map +1 -0
  190. package/dist/progress-tracker/index.d.mts +81 -0
  191. package/dist/progress-tracker/index.d.ts +81 -0
  192. package/dist/progress-tracker/index.js +834 -0
  193. package/dist/progress-tracker/index.js.map +1 -0
  194. package/dist/progress-tracker/index.mjs +716 -0
  195. package/dist/progress-tracker/index.mjs.map +1 -0
  196. package/dist/radio-group/index.d.mts +100 -0
  197. package/dist/radio-group/index.d.ts +100 -0
  198. package/dist/radio-group/index.js +824 -0
  199. package/dist/radio-group/index.js.map +1 -0
  200. package/dist/radio-group/index.mjs +297 -0
  201. package/dist/radio-group/index.mjs.map +1 -0
  202. package/dist/rating/index.d.mts +78 -0
  203. package/dist/rating/index.d.ts +78 -0
  204. package/dist/rating/index.js +362 -0
  205. package/dist/rating/index.js.map +1 -0
  206. package/dist/rating/index.mjs +247 -0
  207. package/dist/rating/index.mjs.map +1 -0
  208. package/dist/scrolling-list/index.d.mts +105 -0
  209. package/dist/scrolling-list/index.d.ts +105 -0
  210. package/dist/scrolling-list/index.js +1367 -0
  211. package/dist/scrolling-list/index.js.map +1 -0
  212. package/dist/scrolling-list/index.mjs +407 -0
  213. package/dist/scrolling-list/index.mjs.map +1 -0
  214. package/dist/select/index.d.mts +167 -0
  215. package/dist/select/index.d.ts +167 -0
  216. package/dist/select/index.js +991 -0
  217. package/dist/select/index.js.map +1 -0
  218. package/dist/select/index.mjs +470 -0
  219. package/dist/select/index.mjs.map +1 -0
  220. package/dist/skeleton/index.d.mts +67 -0
  221. package/dist/skeleton/index.d.ts +67 -0
  222. package/dist/skeleton/index.js +206 -0
  223. package/dist/skeleton/index.js.map +1 -0
  224. package/dist/skeleton/index.mjs +147 -0
  225. package/dist/skeleton/index.mjs.map +1 -0
  226. package/dist/slider/index.d.mts +97 -0
  227. package/dist/slider/index.d.ts +97 -0
  228. package/dist/slider/index.js +209 -0
  229. package/dist/slider/index.js.map +1 -0
  230. package/dist/slider/index.mjs +182 -0
  231. package/dist/slider/index.mjs.map +1 -0
  232. package/dist/slot/index.d.mts +17 -0
  233. package/dist/slot/index.d.ts +17 -0
  234. package/dist/slot/index.js +51 -0
  235. package/dist/slot/index.js.map +1 -0
  236. package/dist/slot/index.mjs +11 -0
  237. package/dist/slot/index.mjs.map +1 -0
  238. package/dist/snackbar/index.d.mts +158 -0
  239. package/dist/snackbar/index.d.ts +158 -0
  240. package/dist/snackbar/index.js +1693 -0
  241. package/dist/snackbar/index.js.map +1 -0
  242. package/dist/snackbar/index.mjs +733 -0
  243. package/dist/snackbar/index.mjs.map +1 -0
  244. package/dist/spinner/index.d.mts +21 -0
  245. package/dist/spinner/index.d.ts +21 -0
  246. package/dist/spinner/index.js +139 -0
  247. package/dist/spinner/index.js.map +1 -0
  248. package/dist/spinner/index.mjs +9 -0
  249. package/dist/spinner/index.mjs.map +1 -0
  250. package/dist/stepper/index.d.mts +82 -0
  251. package/dist/stepper/index.d.ts +82 -0
  252. package/dist/stepper/index.js +2178 -0
  253. package/dist/stepper/index.js.map +1 -0
  254. package/dist/stepper/index.mjs +229 -0
  255. package/dist/stepper/index.mjs.map +1 -0
  256. package/dist/switch/index.d.mts +64 -0
  257. package/dist/switch/index.d.ts +64 -0
  258. package/dist/switch/index.js +768 -0
  259. package/dist/switch/index.js.map +1 -0
  260. package/dist/switch/index.mjs +245 -0
  261. package/dist/switch/index.mjs.map +1 -0
  262. package/dist/tabs/index.d.mts +103 -0
  263. package/dist/tabs/index.d.ts +103 -0
  264. package/dist/tabs/index.js +1315 -0
  265. package/dist/tabs/index.js.map +1 -0
  266. package/dist/tabs/index.mjs +391 -0
  267. package/dist/tabs/index.mjs.map +1 -0
  268. package/dist/tag/index.d.mts +27 -0
  269. package/dist/tag/index.d.ts +27 -0
  270. package/dist/tag/index.js +269 -0
  271. package/dist/tag/index.js.map +1 -0
  272. package/dist/tag/index.mjs +237 -0
  273. package/dist/tag/index.mjs.map +1 -0
  274. package/dist/text-link/index.d.mts +20 -0
  275. package/dist/text-link/index.d.ts +20 -0
  276. package/dist/text-link/index.js +99 -0
  277. package/dist/text-link/index.js.map +1 -0
  278. package/dist/text-link/index.mjs +8 -0
  279. package/dist/text-link/index.mjs.map +1 -0
  280. package/dist/textarea/index.d.mts +47 -0
  281. package/dist/textarea/index.d.ts +47 -0
  282. package/dist/textarea/index.js +1180 -0
  283. package/dist/textarea/index.js.map +1 -0
  284. package/dist/textarea/index.mjs +77 -0
  285. package/dist/textarea/index.mjs.map +1 -0
  286. package/dist/visually-hidden/index.d.mts +16 -0
  287. package/dist/visually-hidden/index.d.ts +16 -0
  288. package/dist/visually-hidden/index.js +67 -0
  289. package/dist/visually-hidden/index.js.map +1 -0
  290. package/dist/visually-hidden/index.mjs +8 -0
  291. package/dist/visually-hidden/index.mjs.map +1 -0
  292. package/global.d.ts +12 -0
  293. package/package.json +75 -0
  294. package/tsconfig.build.json +9 -0
  295. package/tsconfig.json +9 -0
  296. package/tsup.config.ts +11 -0
@@ -0,0 +1,1367 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/scrolling-list/index.ts
21
+ var scrolling_list_exports = {};
22
+ __export(scrolling_list_exports, {
23
+ ScrollingList: () => ScrollingList2
24
+ });
25
+ module.exports = __toCommonJS(scrolling_list_exports);
26
+
27
+ // src/scrolling-list/ScrollingList.tsx
28
+ var import_react2 = require("react");
29
+ var import_react_snap_carousel = require("react-snap-carousel");
30
+
31
+ // src/scrolling-list/useScrollOverflow.ts
32
+ var import_react = require("react");
33
+ function useScrollOverflow(scrollRef) {
34
+ const [overflow, setOverflow] = (0, import_react.useState)({
35
+ left: 0,
36
+ right: 0
37
+ });
38
+ (0, import_react.useEffect)(() => {
39
+ const checkScrollContent = () => {
40
+ const scrollElement2 = scrollRef.current;
41
+ if (scrollElement2) {
42
+ const { scrollLeft, scrollWidth, clientWidth } = scrollElement2;
43
+ setOverflow({
44
+ left: scrollLeft,
45
+ right: scrollWidth - (scrollLeft + clientWidth)
46
+ });
47
+ }
48
+ };
49
+ checkScrollContent();
50
+ const scrollElement = scrollRef.current;
51
+ if (scrollElement) {
52
+ scrollElement.addEventListener("scroll", checkScrollContent);
53
+ window.addEventListener("resize", checkScrollContent);
54
+ }
55
+ return () => {
56
+ if (scrollElement) {
57
+ scrollElement.removeEventListener("scroll", checkScrollContent);
58
+ window.addEventListener("resize", checkScrollContent);
59
+ }
60
+ };
61
+ }, [scrollRef]);
62
+ return overflow;
63
+ }
64
+
65
+ // src/scrolling-list/ScrollingList.tsx
66
+ var import_jsx_runtime = require("react/jsx-runtime");
67
+ var ScrollingListContext = (0, import_react2.createContext)(
68
+ null
69
+ );
70
+ var ScrollingList = ({
71
+ snapType = "none",
72
+ snapStop = "normal",
73
+ scrollBehavior = "smooth",
74
+ loop = false,
75
+ gap = 16,
76
+ widthFade = false,
77
+ // TODO: ask for default value + why it has been removed from specs
78
+ scrollPadding = 0,
79
+ children
80
+ }) => {
81
+ const scrollAreaRef = (0, import_react2.useRef)(null);
82
+ const skipAnchorRef = (0, import_react2.useRef)(null);
83
+ const snapCarouselAPI = (0, import_react_snap_carousel.useSnapCarousel)();
84
+ const overflow = useScrollOverflow(scrollAreaRef);
85
+ const { activePageIndex, pages } = snapCarouselAPI;
86
+ const visibleItems = pages[activePageIndex];
87
+ const visibleItemsRange = visibleItems ? [visibleItems[0] + 1, visibleItems[visibleItems.length - 1] + 1] : [0, 0];
88
+ const skipKeyboardNavigation = () => {
89
+ skipAnchorRef.current?.focus();
90
+ };
91
+ const ctxValue = {
92
+ ...snapCarouselAPI,
93
+ snapType,
94
+ snapStop,
95
+ skipKeyboardNavigation,
96
+ scrollBehavior,
97
+ visibleItemsRange,
98
+ loop,
99
+ gap,
100
+ widthFade,
101
+ scrollPadding,
102
+ scrollAreaRef,
103
+ overflow
104
+ };
105
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(ScrollingListContext.Provider, { value: ctxValue, children: [
106
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "gap-lg group/scrolling-list relative flex w-full flex-col", children }),
107
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { ref: skipAnchorRef, className: "size-0 overflow-hidden", tabIndex: -1 })
108
+ ] });
109
+ };
110
+ ScrollingList.displayName = "ScrollingList";
111
+
112
+ // src/scrolling-list/ScrollingListControls.tsx
113
+ var import_class_variance_authority = require("class-variance-authority");
114
+ var import_jsx_runtime2 = require("react/jsx-runtime");
115
+ var ScrollingListControls = ({
116
+ children,
117
+ visibility = "always",
118
+ className,
119
+ ...rest
120
+ }) => {
121
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
122
+ "div",
123
+ {
124
+ className: (0, import_class_variance_authority.cx)(
125
+ "default:px-md pointer-events-none absolute inset-0 flex flex-row items-center justify-between overflow-hidden",
126
+ className
127
+ ),
128
+ style: {
129
+ "--scrolling-list-controls-opacity": visibility === "hover" ? "0" : "1"
130
+ },
131
+ "data-orientation": "horizontal",
132
+ ...rest,
133
+ children
134
+ }
135
+ );
136
+ };
137
+ ScrollingListControls.displayName = "ScrollingList.Controls";
138
+
139
+ // src/scrolling-list/ScrollingListItem.tsx
140
+ var import_class_variance_authority2 = require("class-variance-authority");
141
+ var import_react5 = require("react");
142
+
143
+ // src/slot/Slot.tsx
144
+ var import_radix_ui = require("radix-ui");
145
+ var import_react3 = require("react");
146
+ var import_jsx_runtime3 = require("react/jsx-runtime");
147
+ var Slottable = import_radix_ui.Slot.Slottable;
148
+ var Slot = ({ ref, ...props }) => {
149
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_radix_ui.Slot.Root, { ref, ...props });
150
+ };
151
+ var wrapPolymorphicSlot = (asChild, children, callback) => {
152
+ if (!asChild) return callback(children);
153
+ return (0, import_react3.isValidElement)(children) ? (0, import_react3.cloneElement)(
154
+ children,
155
+ void 0,
156
+ callback(children.props.children)
157
+ ) : null;
158
+ };
159
+
160
+ // src/scrolling-list/useFocusWithinScroll.tsx
161
+ var import_react4 = require("react");
162
+ function useFocusWithinScroll(ref, scrollRef) {
163
+ const [isFocusWithin, setIsFocusWithin] = (0, import_react4.useState)(false);
164
+ (0, import_react4.useEffect)(() => {
165
+ const handleFocusIn = (event) => {
166
+ setIsFocusWithin(true);
167
+ const focusedElement = event.target;
168
+ const scrollContainer = scrollRef.current;
169
+ if (focusedElement && scrollContainer) {
170
+ const focusRect = focusedElement.getBoundingClientRect();
171
+ const scrollRect = scrollContainer.getBoundingClientRect();
172
+ const isFullyVisible = focusRect.left >= scrollRect.left && focusRect.right <= scrollRect.right && focusRect.top >= scrollRect.top && focusRect.bottom <= scrollRect.bottom;
173
+ if (!isFullyVisible) {
174
+ focusedElement.scrollIntoView({ behavior: "smooth", inline: "center", block: "nearest" });
175
+ }
176
+ }
177
+ };
178
+ const handleFocusOut = (event) => {
179
+ if (ref.current && !ref.current.contains(event.relatedTarget)) {
180
+ setIsFocusWithin(false);
181
+ }
182
+ };
183
+ const node = ref.current;
184
+ if (node) {
185
+ node.addEventListener("focusin", handleFocusIn);
186
+ node.addEventListener("focusout", handleFocusOut);
187
+ }
188
+ return () => {
189
+ if (node) {
190
+ node.removeEventListener("focusin", handleFocusIn);
191
+ node.removeEventListener("focusout", handleFocusOut);
192
+ }
193
+ };
194
+ }, [ref, scrollRef]);
195
+ return isFocusWithin;
196
+ }
197
+
198
+ // src/scrolling-list/ScrollingListItem.tsx
199
+ var import_jsx_runtime4 = require("react/jsx-runtime");
200
+ var ScrollingListItem = ({
201
+ asChild = false,
202
+ children,
203
+ index = 0,
204
+ className = "",
205
+ ...rest
206
+ }) => {
207
+ const ctx = (0, import_react5.useContext)(ScrollingListContext);
208
+ const itemRef = (0, import_react5.useRef)(null);
209
+ const isSnapPoint = ctx.snapPointIndexes.has(index);
210
+ useFocusWithinScroll(itemRef, ctx.scrollAreaRef);
211
+ const Component = asChild ? Slot : "div";
212
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
213
+ Component,
214
+ {
215
+ role: "listitem",
216
+ ref: itemRef,
217
+ className: (0, import_class_variance_authority2.cx)(
218
+ "default:w-auto default:shrink-0",
219
+ {
220
+ "snap-start": isSnapPoint,
221
+ "snap-normal": isSnapPoint && ctx.snapStop === "normal",
222
+ "snap-always": isSnapPoint && ctx.snapStop === "always"
223
+ },
224
+ className
225
+ ),
226
+ ...rest,
227
+ children
228
+ }
229
+ );
230
+ };
231
+ ScrollingListItem.displayName = "ScrollingList.Item";
232
+
233
+ // src/scrolling-list/ScrollingListItems.tsx
234
+ var import_class_variance_authority3 = require("class-variance-authority");
235
+ var import_react6 = require("react");
236
+ var import_jsx_runtime5 = require("react/jsx-runtime");
237
+ function mergeRefs(...refs) {
238
+ return (value) => {
239
+ refs.forEach((ref) => {
240
+ if (typeof ref === "function") {
241
+ ref(value);
242
+ } else if (ref && typeof ref === "object" && "current" in ref) {
243
+ ;
244
+ ref.current = value;
245
+ }
246
+ });
247
+ };
248
+ }
249
+ var ScrollingListItems = ({ children, className = "", ...rest }) => {
250
+ const ctx = (0, import_react6.useContext)(ScrollingListContext);
251
+ const snapConfig = {
252
+ mandatory: "x mandatory",
253
+ proximity: "x proximity",
254
+ none: "none"
255
+ };
256
+ const handleLeftArrow = (event) => {
257
+ if (!ctx.loop && !ctx.hasPrevPage) return;
258
+ event.preventDefault();
259
+ ctx.goTo(ctx.hasPrevPage ? ctx.activePageIndex - 1 : ctx.pages.length - 1, {
260
+ behavior: ctx.scrollBehavior
261
+ });
262
+ };
263
+ const handleRightArrow = (event) => {
264
+ if (!ctx.loop && !ctx.hasNextPage) return;
265
+ event.preventDefault();
266
+ ctx.goTo(ctx.hasNextPage ? ctx.activePageIndex + 1 : 0, { behavior: ctx.scrollBehavior });
267
+ };
268
+ const handleKeyDown = (event) => {
269
+ if (event.key === "ArrowLeft") {
270
+ handleLeftArrow(event);
271
+ }
272
+ if (event.key === "ArrowRight") {
273
+ handleRightArrow(event);
274
+ }
275
+ };
276
+ const inlineStyles = {
277
+ scrollSnapType: snapConfig[ctx.snapType],
278
+ scrollPaddingInline: "var(--scrolling-list-px)",
279
+ "--scrolling-list-px": `${ctx.scrollPadding}px`,
280
+ "--scrolling-list-gap": `${ctx.gap}px`,
281
+ ...ctx.widthFade && {
282
+ maskImage: "linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 1) 44px, rgba(0, 0, 0, 1) calc(100% - 44px), rgba(0, 0, 0, 0))",
283
+ maskSize: `calc(100% + ${ctx.overflow.left ? "0px" : "44px"} + ${ctx.overflow.right ? "0px" : "44px"}) 100%`,
284
+ maskPosition: `${ctx.overflow.left ? "0px" : "-44px"} 0`
285
+ }
286
+ };
287
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
288
+ "div",
289
+ {
290
+ id: "scrolling-list-items",
291
+ role: "list",
292
+ className: (0, import_class_variance_authority3.cx)(
293
+ "relative transition-all duration-300",
294
+ "u-no-scrollbar overflow-x-auto scroll-smooth default:overscroll-contain",
295
+ "w-full gap-(--scrolling-list-gap) default:flex default:flex-row",
296
+ "focus-visible:u-outline",
297
+ className
298
+ ),
299
+ ref: mergeRefs(ctx.scrollAreaRef, ctx.scrollRef),
300
+ style: inlineStyles,
301
+ onKeyDown: handleKeyDown,
302
+ ...rest,
303
+ children: import_react6.Children.map(
304
+ children,
305
+ (child, index) => (0, import_react6.isValidElement)(child) ? (0, import_react6.cloneElement)(child, { index }) : child
306
+ )
307
+ }
308
+ );
309
+ };
310
+ ScrollingListItems.displayName = "ScrollingList.Items";
311
+
312
+ // src/scrolling-list/ScrollingListNextButton.tsx
313
+ var import_ArrowVerticalRight = require("@spark-ui/icons/ArrowVerticalRight");
314
+ var import_class_variance_authority9 = require("class-variance-authority");
315
+ var import_react9 = require("react");
316
+
317
+ // src/icon/Icon.tsx
318
+ var import_react7 = require("react");
319
+
320
+ // src/visually-hidden/VisuallyHidden.tsx
321
+ var import_jsx_runtime6 = require("react/jsx-runtime");
322
+ var VisuallyHidden = ({ asChild = false, ref, ...props }) => {
323
+ const Component = asChild ? Slot : "span";
324
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
325
+ Component,
326
+ {
327
+ ...props,
328
+ ref,
329
+ style: {
330
+ // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss
331
+ position: "absolute",
332
+ border: 0,
333
+ width: 1,
334
+ height: 1,
335
+ padding: 0,
336
+ margin: -1,
337
+ overflow: "hidden",
338
+ clip: "rect(0, 0, 0, 0)",
339
+ whiteSpace: "nowrap",
340
+ wordWrap: "normal",
341
+ ...props.style
342
+ }
343
+ }
344
+ );
345
+ };
346
+ VisuallyHidden.displayName = "VisuallyHidden";
347
+
348
+ // src/icon/Icon.styles.tsx
349
+ var import_internal_utils = require("@spark-ui/internal-utils");
350
+ var import_class_variance_authority4 = require("class-variance-authority");
351
+ var iconStyles = (0, import_class_variance_authority4.cva)(["fill-current shrink-0"], {
352
+ variants: {
353
+ /**
354
+ * Color scheme of the icon.
355
+ */
356
+ intent: (0, import_internal_utils.makeVariants)({
357
+ current: ["text-current"],
358
+ main: ["text-main"],
359
+ support: ["text-support"],
360
+ accent: ["text-accent"],
361
+ basic: ["text-basic"],
362
+ success: ["text-success"],
363
+ alert: ["text-alert"],
364
+ error: ["text-error"],
365
+ info: ["text-info"],
366
+ neutral: ["text-neutral"]
367
+ }),
368
+ /**
369
+ * Sets the size of the icon.
370
+ */
371
+ size: (0, import_internal_utils.makeVariants)({
372
+ current: ["u-current-font-size"],
373
+ sm: ["w-sz-16", "h-sz-16"],
374
+ md: ["w-sz-24", "h-sz-24"],
375
+ lg: ["w-sz-32", "h-sz-32"],
376
+ xl: ["w-sz-40", "h-sz-40"]
377
+ })
378
+ }
379
+ });
380
+
381
+ // src/icon/Icon.tsx
382
+ var import_jsx_runtime7 = require("react/jsx-runtime");
383
+ var Icon = ({
384
+ label,
385
+ className,
386
+ size = "current",
387
+ intent = "current",
388
+ children,
389
+ ...others
390
+ }) => {
391
+ const child = import_react7.Children.only(children);
392
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
393
+ (0, import_react7.cloneElement)(child, {
394
+ className: iconStyles({ className, size, intent }),
395
+ "data-spark-component": "icon",
396
+ "aria-hidden": "true",
397
+ focusable: "false",
398
+ ...others
399
+ }),
400
+ label && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(VisuallyHidden, { children: label })
401
+ ] });
402
+ };
403
+ Icon.displayName = "Icon";
404
+
405
+ // src/button/Button.tsx
406
+ var import_class_variance_authority7 = require("class-variance-authority");
407
+ var import_react8 = require("react");
408
+
409
+ // src/spinner/Spinner.styles.tsx
410
+ var import_internal_utils2 = require("@spark-ui/internal-utils");
411
+ var import_class_variance_authority5 = require("class-variance-authority");
412
+ var defaultVariants = {
413
+ intent: "current",
414
+ size: "current",
415
+ isBackgroundVisible: false
416
+ };
417
+ var spinnerStyles = (0, import_class_variance_authority5.cva)(
418
+ ["inline-block", "border-solid", "rounded-full", "border-md", "animate-spin"],
419
+ {
420
+ variants: {
421
+ /**
422
+ * Use `size` prop to set the size of the spinner. If you want to set the full size for the spinner, don't forget to add a wrapping container with its own size.
423
+ */
424
+ size: {
425
+ current: ["u-current-font-size"],
426
+ sm: ["w-sz-20", "h-sz-20"],
427
+ md: ["w-sz-28", "h-sz-28"],
428
+ full: ["w-full", "h-full"]
429
+ },
430
+ /**
431
+ * Color scheme of the spinner.
432
+ */
433
+ intent: (0, import_internal_utils2.makeVariants)({
434
+ current: ["border-current"],
435
+ main: ["border-main"],
436
+ support: ["border-support"],
437
+ accent: ["border-accent"],
438
+ basic: ["border-basic"],
439
+ success: ["border-success"],
440
+ alert: ["border-alert"],
441
+ error: ["border-error"],
442
+ info: ["border-info"],
443
+ neutral: ["border-neutral"]
444
+ }),
445
+ /**
446
+ * Size of the button.
447
+ */
448
+ isBackgroundVisible: {
449
+ true: ["border-b-neutral-container", "border-l-neutral-container"],
450
+ false: ["border-b-transparent", "border-l-transparent"]
451
+ }
452
+ },
453
+ defaultVariants
454
+ }
455
+ );
456
+
457
+ // src/spinner/Spinner.tsx
458
+ var import_jsx_runtime8 = require("react/jsx-runtime");
459
+ var Spinner = ({
460
+ className,
461
+ size = "current",
462
+ intent = "current",
463
+ label,
464
+ isBackgroundVisible,
465
+ ref,
466
+ ...others
467
+ }) => {
468
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
469
+ "span",
470
+ {
471
+ role: "status",
472
+ "data-spark-component": "spinner",
473
+ ref,
474
+ className: spinnerStyles({ className, size, intent, isBackgroundVisible }),
475
+ ...others,
476
+ children: label && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(VisuallyHidden, { children: label })
477
+ }
478
+ );
479
+ };
480
+
481
+ // src/button/Button.styles.tsx
482
+ var import_internal_utils8 = require("@spark-ui/internal-utils");
483
+ var import_class_variance_authority6 = require("class-variance-authority");
484
+
485
+ // src/button/variants/filled.ts
486
+ var import_internal_utils3 = require("@spark-ui/internal-utils");
487
+ var filledVariants = [
488
+ // Main
489
+ {
490
+ intent: "main",
491
+ design: "filled",
492
+ class: (0, import_internal_utils3.tw)([
493
+ "bg-main",
494
+ "text-on-main",
495
+ "hover:bg-main-hovered",
496
+ "enabled:active:bg-main-hovered",
497
+ "focus-visible:bg-main-hovered"
498
+ ])
499
+ },
500
+ // Support
501
+ {
502
+ intent: "support",
503
+ design: "filled",
504
+ class: (0, import_internal_utils3.tw)([
505
+ "bg-support",
506
+ "text-on-support",
507
+ "hover:bg-support-hovered",
508
+ "enabled:active:bg-support-hovered",
509
+ "focus-visible:bg-support-hovered"
510
+ ])
511
+ },
512
+ // Accent
513
+ {
514
+ intent: "accent",
515
+ design: "filled",
516
+ class: (0, import_internal_utils3.tw)([
517
+ "bg-accent",
518
+ "text-on-accent",
519
+ "hover:bg-accent-hovered",
520
+ "enabled:active:bg-accent-hovered",
521
+ "focus-visible:bg-accent-hovered"
522
+ ])
523
+ },
524
+ // Basic
525
+ {
526
+ intent: "basic",
527
+ design: "filled",
528
+ class: (0, import_internal_utils3.tw)([
529
+ "bg-basic",
530
+ "text-on-basic",
531
+ "hover:bg-basic-hovered",
532
+ "enabled:active:bg-basic-hovered",
533
+ "focus-visible:bg-basic-hovered"
534
+ ])
535
+ },
536
+ // Success
537
+ {
538
+ intent: "success",
539
+ design: "filled",
540
+ class: (0, import_internal_utils3.tw)([
541
+ "bg-success",
542
+ "text-on-success",
543
+ "hover:bg-success-hovered",
544
+ "enabled:active:bg-success-hovered",
545
+ "focus-visible:bg-success-hovered"
546
+ ])
547
+ },
548
+ // Alert
549
+ {
550
+ intent: "alert",
551
+ design: "filled",
552
+ class: (0, import_internal_utils3.tw)([
553
+ "bg-alert",
554
+ "text-on-alert",
555
+ "hover:bg-alert-hovered",
556
+ "enabled:active:bg-alert-hovered",
557
+ "focus-visible:bg-alert-hovered"
558
+ ])
559
+ },
560
+ // Danger
561
+ {
562
+ intent: "danger",
563
+ design: "filled",
564
+ class: (0, import_internal_utils3.tw)([
565
+ "text-on-error bg-error",
566
+ "hover:bg-error-hovered enabled:active:bg-error-hovered",
567
+ "focus-visible:bg-error-hovered"
568
+ ])
569
+ },
570
+ // Info
571
+ {
572
+ intent: "info",
573
+ design: "filled",
574
+ class: (0, import_internal_utils3.tw)([
575
+ "text-on-error bg-info",
576
+ "hover:bg-info-hovered enabled:active:bg-info-hovered",
577
+ "focus-visible:bg-info-hovered"
578
+ ])
579
+ },
580
+ // Neutral
581
+ {
582
+ intent: "neutral",
583
+ design: "filled",
584
+ class: (0, import_internal_utils3.tw)([
585
+ "bg-neutral",
586
+ "text-on-neutral",
587
+ "hover:bg-neutral-hovered",
588
+ "enabled:active:bg-neutral-hovered",
589
+ "focus-visible:bg-neutral-hovered"
590
+ ])
591
+ },
592
+ // Surface
593
+ {
594
+ intent: "surface",
595
+ design: "filled",
596
+ class: (0, import_internal_utils3.tw)([
597
+ "bg-surface",
598
+ "text-on-surface",
599
+ "hover:bg-surface-hovered",
600
+ "enabled:active:bg-surface-hovered",
601
+ "focus-visible:bg-surface-hovered"
602
+ ])
603
+ }
604
+ ];
605
+
606
+ // src/button/variants/ghost.ts
607
+ var import_internal_utils4 = require("@spark-ui/internal-utils");
608
+ var ghostVariants = [
609
+ {
610
+ intent: "main",
611
+ design: "ghost",
612
+ class: (0, import_internal_utils4.tw)([
613
+ "text-main",
614
+ "hover:bg-main/dim-5",
615
+ "enabled:active:bg-main/dim-5",
616
+ "focus-visible:bg-main/dim-5"
617
+ ])
618
+ },
619
+ {
620
+ intent: "support",
621
+ design: "ghost",
622
+ class: (0, import_internal_utils4.tw)([
623
+ "text-support",
624
+ "hover:bg-support/dim-5",
625
+ "enabled:active:bg-support/dim-5",
626
+ "focus-visible:bg-support/dim-5"
627
+ ])
628
+ },
629
+ {
630
+ intent: "accent",
631
+ design: "ghost",
632
+ class: (0, import_internal_utils4.tw)([
633
+ "text-accent",
634
+ "hover:bg-accent/dim-5",
635
+ "enabled:active:bg-accent/dim-5",
636
+ "focus-visible:bg-accent/dim-5"
637
+ ])
638
+ },
639
+ {
640
+ intent: "basic",
641
+ design: "ghost",
642
+ class: (0, import_internal_utils4.tw)([
643
+ "text-basic",
644
+ "hover:bg-basic/dim-5",
645
+ "enabled:active:bg-basic/dim-5",
646
+ "focus-visible:bg-basic/dim-5"
647
+ ])
648
+ },
649
+ {
650
+ intent: "success",
651
+ design: "ghost",
652
+ class: (0, import_internal_utils4.tw)([
653
+ "text-success",
654
+ "hover:bg-success/dim-5",
655
+ "enabled:active:bg-success/dim-5",
656
+ "focus-visible:bg-success/dim-5"
657
+ ])
658
+ },
659
+ {
660
+ intent: "alert",
661
+ design: "ghost",
662
+ class: (0, import_internal_utils4.tw)([
663
+ "text-alert",
664
+ "hover:bg-alert/dim-5",
665
+ "enabled:active:bg-alert/dim-5",
666
+ "focus-visible:bg-alert/dim-5"
667
+ ])
668
+ },
669
+ {
670
+ intent: "danger",
671
+ design: "ghost",
672
+ class: (0, import_internal_utils4.tw)([
673
+ "text-error",
674
+ "hover:bg-error/dim-5",
675
+ "enabled:active:bg-error/dim-5",
676
+ "focus-visible:bg-error/dim-5"
677
+ ])
678
+ },
679
+ {
680
+ intent: "info",
681
+ design: "ghost",
682
+ class: (0, import_internal_utils4.tw)([
683
+ "text-info",
684
+ "hover:bg-info/dim-5",
685
+ "enabled:active:bg-info/dim-5",
686
+ "focus-visible:bg-info/dim-5"
687
+ ])
688
+ },
689
+ {
690
+ intent: "neutral",
691
+ design: "ghost",
692
+ class: (0, import_internal_utils4.tw)([
693
+ "text-neutral",
694
+ "hover:bg-neutral/dim-5",
695
+ "enabled:active:bg-neutral/dim-5",
696
+ "focus-visible:bg-neutral/dim-5"
697
+ ])
698
+ },
699
+ {
700
+ intent: "surface",
701
+ design: "ghost",
702
+ class: (0, import_internal_utils4.tw)([
703
+ "text-surface",
704
+ "hover:bg-surface/dim-5",
705
+ "enabled:active:bg-surface/dim-5",
706
+ "focus-visible:bg-surface/dim-5"
707
+ ])
708
+ }
709
+ ];
710
+
711
+ // src/button/variants/outlined.ts
712
+ var import_internal_utils5 = require("@spark-ui/internal-utils");
713
+ var outlinedVariants = [
714
+ {
715
+ intent: "main",
716
+ design: "outlined",
717
+ class: (0, import_internal_utils5.tw)([
718
+ "hover:bg-main/dim-5",
719
+ "enabled:active:bg-main/dim-5",
720
+ "focus-visible:bg-main/dim-5",
721
+ "text-main"
722
+ ])
723
+ },
724
+ {
725
+ intent: "support",
726
+ design: "outlined",
727
+ class: (0, import_internal_utils5.tw)([
728
+ "hover:bg-support/dim-5",
729
+ "enabled:active:bg-support/dim-5",
730
+ "focus-visible:bg-support/dim-5",
731
+ "text-support"
732
+ ])
733
+ },
734
+ {
735
+ intent: "accent",
736
+ design: "outlined",
737
+ class: (0, import_internal_utils5.tw)([
738
+ "hover:bg-accent/dim-5",
739
+ "enabled:active:bg-accent/dim-5",
740
+ "focus-visible:bg-accent/dim-5",
741
+ "text-accent"
742
+ ])
743
+ },
744
+ {
745
+ intent: "basic",
746
+ design: "outlined",
747
+ class: (0, import_internal_utils5.tw)([
748
+ "hover:bg-basic/dim-5",
749
+ "enabled:active:bg-basic/dim-5",
750
+ "focus-visible:bg-basic/dim-5",
751
+ "text-basic"
752
+ ])
753
+ },
754
+ {
755
+ intent: "success",
756
+ design: "outlined",
757
+ class: (0, import_internal_utils5.tw)([
758
+ "hover:bg-success/dim-5",
759
+ "enabled:active:bg-success/dim-5",
760
+ "focus-visible:bg-success/dim-5",
761
+ "text-success"
762
+ ])
763
+ },
764
+ {
765
+ intent: "alert",
766
+ design: "outlined",
767
+ class: (0, import_internal_utils5.tw)([
768
+ "hover:bg-alert/dim-5",
769
+ "enabled:active:bg-alert/dim-5",
770
+ "focus-visible:bg-alert/dim-5",
771
+ "text-alert"
772
+ ])
773
+ },
774
+ {
775
+ intent: "danger",
776
+ design: "outlined",
777
+ class: (0, import_internal_utils5.tw)([
778
+ "hover:bg-error/dim-5",
779
+ "enabled:active:bg-error/dim-5",
780
+ "focus-visible:bg-error/dim-5",
781
+ "text-error"
782
+ ])
783
+ },
784
+ {
785
+ intent: "info",
786
+ design: "outlined",
787
+ class: (0, import_internal_utils5.tw)([
788
+ "hover:bg-info/dim-5",
789
+ "enabled:active:bg-info/dim-5",
790
+ "focus-visible:bg-info/dim-5",
791
+ "text-info"
792
+ ])
793
+ },
794
+ {
795
+ intent: "neutral",
796
+ design: "outlined",
797
+ class: (0, import_internal_utils5.tw)([
798
+ "hover:bg-neutral/dim-5",
799
+ "enabled:active:bg-neutral/dim-5",
800
+ "focus-visible:bg-neutral/dim-5",
801
+ "text-neutral"
802
+ ])
803
+ },
804
+ {
805
+ intent: "surface",
806
+ design: "outlined",
807
+ class: (0, import_internal_utils5.tw)([
808
+ "hover:bg-surface/dim-5",
809
+ "enabled:active:bg-surface/dim-5",
810
+ "focus-visible:bg-surface/dim-5",
811
+ "text-surface"
812
+ ])
813
+ }
814
+ ];
815
+
816
+ // src/button/variants/tinted.ts
817
+ var import_internal_utils6 = require("@spark-ui/internal-utils");
818
+ var tintedVariants = [
819
+ {
820
+ intent: "main",
821
+ design: "tinted",
822
+ class: (0, import_internal_utils6.tw)([
823
+ "bg-main-container",
824
+ "text-on-main-container",
825
+ "hover:bg-main-container-hovered",
826
+ "enabled:active:bg-main-container-hovered",
827
+ "focus-visible:bg-main-container-hovered"
828
+ ])
829
+ },
830
+ {
831
+ intent: "support",
832
+ design: "tinted",
833
+ class: (0, import_internal_utils6.tw)([
834
+ "bg-support-container",
835
+ "text-on-support-container",
836
+ "hover:bg-support-container-hovered",
837
+ "enabled:active:bg-support-container-hovered",
838
+ "focus-visible:bg-support-container-hovered"
839
+ ])
840
+ },
841
+ {
842
+ intent: "accent",
843
+ design: "tinted",
844
+ class: (0, import_internal_utils6.tw)([
845
+ "bg-accent-container",
846
+ "text-on-accent-container",
847
+ "hover:bg-accent-container-hovered",
848
+ "enabled:active:bg-accent-container-hovered",
849
+ "focus-visible:bg-accent-container-hovered"
850
+ ])
851
+ },
852
+ {
853
+ intent: "basic",
854
+ design: "tinted",
855
+ class: (0, import_internal_utils6.tw)([
856
+ "bg-basic-container",
857
+ "text-on-basic-container",
858
+ "hover:bg-basic-container-hovered",
859
+ "enabled:active:bg-basic-container-hovered",
860
+ "focus-visible:bg-basic-container-hovered"
861
+ ])
862
+ },
863
+ {
864
+ intent: "success",
865
+ design: "tinted",
866
+ class: (0, import_internal_utils6.tw)([
867
+ "bg-success-container",
868
+ "text-on-success-container",
869
+ "hover:bg-success-container-hovered",
870
+ "enabled:active:bg-success-container-hovered",
871
+ "focus-visible:bg-success-container-hovered"
872
+ ])
873
+ },
874
+ {
875
+ intent: "alert",
876
+ design: "tinted",
877
+ class: (0, import_internal_utils6.tw)([
878
+ "bg-alert-container",
879
+ "text-on-alert-container",
880
+ "hover:bg-alert-container-hovered",
881
+ "enabled:active:bg-alert-container-hovered",
882
+ "focus-visible:bg-alert-container-hovered"
883
+ ])
884
+ },
885
+ {
886
+ intent: "danger",
887
+ design: "tinted",
888
+ class: (0, import_internal_utils6.tw)([
889
+ "bg-error-container",
890
+ "text-on-error-container",
891
+ "hover:bg-error-container-hovered",
892
+ "enabled:active:bg-error-container-hovered",
893
+ "focus-visible:bg-error-container-hovered"
894
+ ])
895
+ },
896
+ {
897
+ intent: "info",
898
+ design: "tinted",
899
+ class: (0, import_internal_utils6.tw)([
900
+ "bg-info-container",
901
+ "text-on-info-container",
902
+ "hover:bg-info-container-hovered",
903
+ "enabled:active:bg-info-container-hovered",
904
+ "focus-visible:bg-info-container-hovered"
905
+ ])
906
+ },
907
+ {
908
+ intent: "neutral",
909
+ design: "tinted",
910
+ class: (0, import_internal_utils6.tw)([
911
+ "bg-neutral-container",
912
+ "text-on-neutral-container",
913
+ "hover:bg-neutral-container-hovered",
914
+ "enabled:active:bg-neutral-container-hovered",
915
+ "focus-visible:bg-neutral-container-hovered"
916
+ ])
917
+ },
918
+ {
919
+ intent: "surface",
920
+ design: "tinted",
921
+ class: (0, import_internal_utils6.tw)([
922
+ "bg-surface",
923
+ "text-on-surface",
924
+ "hover:bg-surface-hovered",
925
+ "enabled:active:bg-surface-hovered",
926
+ "focus-visible:bg-surface-hovered"
927
+ ])
928
+ }
929
+ ];
930
+
931
+ // src/button/variants/contrast.ts
932
+ var import_internal_utils7 = require("@spark-ui/internal-utils");
933
+ var contrastVariants = [
934
+ {
935
+ intent: "main",
936
+ design: "contrast",
937
+ class: (0, import_internal_utils7.tw)([
938
+ "text-main",
939
+ "hover:bg-main-container-hovered",
940
+ "enabled:active:bg-main-container-hovered",
941
+ "focus-visible:bg-main-container-hovered"
942
+ ])
943
+ },
944
+ {
945
+ intent: "support",
946
+ design: "contrast",
947
+ class: (0, import_internal_utils7.tw)([
948
+ "text-support",
949
+ "hover:bg-support-container-hovered",
950
+ "enabled:active:bg-support-container-hovered",
951
+ "focus-visible:bg-support-container-hovered"
952
+ ])
953
+ },
954
+ {
955
+ intent: "accent",
956
+ design: "contrast",
957
+ class: (0, import_internal_utils7.tw)([
958
+ "text-accent",
959
+ "hover:bg-accent-container-hovered",
960
+ "enabled:active:bg-accent-container-hovered",
961
+ "focus-visible:bg-accent-container-hovered"
962
+ ])
963
+ },
964
+ {
965
+ intent: "basic",
966
+ design: "contrast",
967
+ class: (0, import_internal_utils7.tw)([
968
+ "text-basic",
969
+ "hover:bg-basic-container-hovered",
970
+ "enabled:active:bg-basic-container-hovered",
971
+ "focus-visible:bg-basic-container-hovered"
972
+ ])
973
+ },
974
+ {
975
+ intent: "success",
976
+ design: "contrast",
977
+ class: (0, import_internal_utils7.tw)([
978
+ "text-success",
979
+ "hover:bg-success-container-hovered",
980
+ "enabled:active:bg-success-container-hovered",
981
+ "focus-visible:bg-success-container-hovered"
982
+ ])
983
+ },
984
+ {
985
+ intent: "alert",
986
+ design: "contrast",
987
+ class: (0, import_internal_utils7.tw)([
988
+ "text-alert",
989
+ "hover:bg-alert-container-hovered",
990
+ "enabled:active:bg-alert-container-hovered",
991
+ "focus-visible:bg-alert-container-hovered"
992
+ ])
993
+ },
994
+ {
995
+ intent: "danger",
996
+ design: "contrast",
997
+ class: (0, import_internal_utils7.tw)([
998
+ "text-error",
999
+ "hover:bg-error-container-hovered",
1000
+ "enabled:active:bg-error-container-hovered",
1001
+ "focus-visible:bg-error-container-hovered"
1002
+ ])
1003
+ },
1004
+ {
1005
+ intent: "info",
1006
+ design: "contrast",
1007
+ class: (0, import_internal_utils7.tw)([
1008
+ "text-info",
1009
+ "hover:bg-info-container-hovered",
1010
+ "enabled:active:bg-info-container-hovered",
1011
+ "focus-visible:bg-info-container-hovered"
1012
+ ])
1013
+ },
1014
+ {
1015
+ intent: "neutral",
1016
+ design: "contrast",
1017
+ class: (0, import_internal_utils7.tw)([
1018
+ "text-neutral",
1019
+ "hover:bg-neutral-container-hovered",
1020
+ "enabled:active:bg-neutral-container-hovered",
1021
+ "focus-visible:bg-neutral-container-hovered"
1022
+ ])
1023
+ },
1024
+ {
1025
+ intent: "surface",
1026
+ design: "contrast",
1027
+ class: (0, import_internal_utils7.tw)([
1028
+ "text-on-surface",
1029
+ "hover:bg-surface-hovered",
1030
+ "enabled:active:bg-surface-hovered",
1031
+ "focus-visible:bg-surface-hovered"
1032
+ ])
1033
+ }
1034
+ ];
1035
+
1036
+ // src/button/Button.styles.tsx
1037
+ var buttonStyles = (0, import_class_variance_authority6.cva)(
1038
+ [
1039
+ "u-shadow-border-transition",
1040
+ "box-border inline-flex items-center justify-center gap-md whitespace-nowrap",
1041
+ "px-lg",
1042
+ "text-body-1 font-bold",
1043
+ "focus-visible:u-outline"
1044
+ ],
1045
+ {
1046
+ variants: {
1047
+ /**
1048
+ * Main style of the button.
1049
+ *
1050
+ * - `filled`: Button will be plain.
1051
+ *
1052
+ * - `outlined`: Button will be transparent with an outline.
1053
+ *
1054
+ * - `tinted`: Button will be filled but using a lighter color scheme.
1055
+ *
1056
+ * - `ghost`: Button will look like a link. No borders, plain text.
1057
+ *
1058
+ * - `contrast`: Button will be surface filled. No borders, plain text.
1059
+ *
1060
+ */
1061
+ design: (0, import_internal_utils8.makeVariants)({
1062
+ filled: [],
1063
+ outlined: ["bg-transparent", "border-sm", "border-current"],
1064
+ tinted: [],
1065
+ ghost: [],
1066
+ contrast: ["bg-surface"]
1067
+ }),
1068
+ /**
1069
+ * Color scheme of the button.
1070
+ */
1071
+ intent: (0, import_internal_utils8.makeVariants)({
1072
+ main: [],
1073
+ support: [],
1074
+ accent: [],
1075
+ basic: [],
1076
+ success: [],
1077
+ alert: [],
1078
+ danger: [],
1079
+ info: [],
1080
+ neutral: [],
1081
+ surface: []
1082
+ }),
1083
+ /**
1084
+ * Size of the button.
1085
+ */
1086
+ size: (0, import_internal_utils8.makeVariants)({
1087
+ sm: ["min-w-sz-32", "h-sz-32"],
1088
+ md: ["min-w-sz-44", "h-sz-44"],
1089
+ lg: ["min-w-sz-56", "h-sz-56"]
1090
+ }),
1091
+ /**
1092
+ * Shape of the button.
1093
+ */
1094
+ shape: (0, import_internal_utils8.makeVariants)({
1095
+ rounded: ["rounded-lg"],
1096
+ square: ["rounded-0"],
1097
+ pill: ["rounded-full"]
1098
+ }),
1099
+ /**
1100
+ * Disable the button, preventing user interaction and adding opacity.
1101
+ */
1102
+ disabled: {
1103
+ true: ["cursor-not-allowed", "opacity-dim-3"],
1104
+ false: ["cursor-pointer"]
1105
+ }
1106
+ },
1107
+ compoundVariants: [
1108
+ ...filledVariants,
1109
+ ...outlinedVariants,
1110
+ ...tintedVariants,
1111
+ ...ghostVariants,
1112
+ ...contrastVariants
1113
+ ],
1114
+ defaultVariants: {
1115
+ design: "filled",
1116
+ intent: "main",
1117
+ size: "md",
1118
+ shape: "rounded"
1119
+ }
1120
+ }
1121
+ );
1122
+
1123
+ // src/button/Button.tsx
1124
+ var import_jsx_runtime9 = require("react/jsx-runtime");
1125
+ var blockedEventHandlers = [
1126
+ "onClick",
1127
+ "onMouseDown",
1128
+ "onMouseUp",
1129
+ "onMouseEnter",
1130
+ "onMouseLeave",
1131
+ "onMouseOver",
1132
+ "onMouseOut",
1133
+ "onKeyDown",
1134
+ "onKeyPress",
1135
+ "onKeyUp",
1136
+ "onSubmit"
1137
+ ];
1138
+ var Button = ({
1139
+ children,
1140
+ design = "filled",
1141
+ disabled = false,
1142
+ intent = "main",
1143
+ isLoading = false,
1144
+ loadingLabel,
1145
+ loadingText,
1146
+ shape = "rounded",
1147
+ size = "md",
1148
+ asChild,
1149
+ className,
1150
+ ref,
1151
+ ...others
1152
+ }) => {
1153
+ const Component = asChild ? Slot : "button";
1154
+ const shouldNotInteract = !!disabled || isLoading;
1155
+ const disabledEventHandlers = (0, import_react8.useMemo)(() => {
1156
+ const result = {};
1157
+ if (shouldNotInteract) {
1158
+ blockedEventHandlers.forEach((eventHandler) => result[eventHandler] = void 0);
1159
+ }
1160
+ return result;
1161
+ }, [shouldNotInteract]);
1162
+ const spinnerProps = {
1163
+ size: "current",
1164
+ className: loadingText ? "inline-block" : "absolute",
1165
+ ...loadingLabel && { "aria-label": loadingLabel }
1166
+ };
1167
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1168
+ Component,
1169
+ {
1170
+ "data-spark-component": "button",
1171
+ ...Component === "button" && { type: "button" },
1172
+ ref,
1173
+ className: buttonStyles({
1174
+ className,
1175
+ design,
1176
+ disabled: shouldNotInteract,
1177
+ intent,
1178
+ shape,
1179
+ size
1180
+ }),
1181
+ disabled: !!disabled,
1182
+ "aria-busy": isLoading,
1183
+ "aria-live": isLoading ? "assertive" : "off",
1184
+ ...others,
1185
+ ...disabledEventHandlers,
1186
+ children: wrapPolymorphicSlot(
1187
+ asChild,
1188
+ children,
1189
+ (slotted) => isLoading ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
1190
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Spinner, { ...spinnerProps }),
1191
+ loadingText && loadingText,
1192
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1193
+ "div",
1194
+ {
1195
+ "aria-hidden": true,
1196
+ className: (0, import_class_variance_authority7.cx)("gap-md", loadingText ? "hidden" : "inline-flex opacity-0"),
1197
+ children: slotted
1198
+ }
1199
+ )
1200
+ ] }) : slotted
1201
+ )
1202
+ }
1203
+ );
1204
+ };
1205
+ Button.displayName = "Button";
1206
+
1207
+ // src/icon-button/IconButton.styles.tsx
1208
+ var import_internal_utils9 = require("@spark-ui/internal-utils");
1209
+ var import_class_variance_authority8 = require("class-variance-authority");
1210
+ var iconButtonStyles = (0, import_class_variance_authority8.cva)(["pl-0 pr-0"], {
1211
+ variants: {
1212
+ /**
1213
+ * Sets the size of the icon.
1214
+ */
1215
+ size: (0, import_internal_utils9.makeVariants)({
1216
+ sm: ["text-body-1"],
1217
+ md: ["text-body-1"],
1218
+ lg: ["text-display-3"]
1219
+ })
1220
+ }
1221
+ });
1222
+
1223
+ // src/icon-button/IconButton.tsx
1224
+ var import_jsx_runtime10 = require("react/jsx-runtime");
1225
+ var IconButton = ({
1226
+ design = "filled",
1227
+ disabled = false,
1228
+ intent = "main",
1229
+ shape = "rounded",
1230
+ size = "md",
1231
+ className,
1232
+ ref,
1233
+ ...others
1234
+ }) => {
1235
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1236
+ Button,
1237
+ {
1238
+ ref,
1239
+ className: iconButtonStyles({ size, className }),
1240
+ design,
1241
+ disabled,
1242
+ intent,
1243
+ shape,
1244
+ size,
1245
+ ...others
1246
+ }
1247
+ );
1248
+ };
1249
+ IconButton.displayName = "IconButton";
1250
+
1251
+ // src/scrolling-list/ScrollingListNextButton.tsx
1252
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1253
+ var ScrollingListNextButton = ({ "aria-label": ariaLabel, ...rest }) => {
1254
+ const ctx = (0, import_react9.useContext)(ScrollingListContext);
1255
+ const handleNextPage = () => {
1256
+ if (ctx.hasNextPage) {
1257
+ ctx.next({ behavior: ctx.scrollBehavior });
1258
+ } else {
1259
+ ctx.goTo(0, { behavior: ctx.scrollBehavior });
1260
+ }
1261
+ };
1262
+ const listHasOverflow = ctx.overflow.left || ctx.overflow.right;
1263
+ const isDisabled = !listHasOverflow || !ctx.loop && !ctx.overflow.right;
1264
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1265
+ IconButton,
1266
+ {
1267
+ size: "sm",
1268
+ intent: "surface",
1269
+ design: "filled",
1270
+ className: (0, import_class_variance_authority9.cx)(
1271
+ "pointer-events-auto opacity-(--scrolling-list-controls-opacity) shadow-sm disabled:invisible",
1272
+ "group-hover/scrolling-list:opacity-none focus-visible:opacity-none"
1273
+ ),
1274
+ onClick: handleNextPage,
1275
+ disabled: isDisabled,
1276
+ "aria-label": ariaLabel,
1277
+ "aria-controls": "scrolling-list-items",
1278
+ ...rest,
1279
+ children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Icon, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_ArrowVerticalRight.ArrowVerticalRight, {}) })
1280
+ }
1281
+ );
1282
+ };
1283
+ ScrollingListNextButton.displayName = "ScrollingList.NextButton";
1284
+
1285
+ // src/scrolling-list/ScrollingListPrevButton.tsx
1286
+ var import_ArrowVerticalLeft = require("@spark-ui/icons/ArrowVerticalLeft");
1287
+ var import_class_variance_authority10 = require("class-variance-authority");
1288
+ var import_react10 = require("react");
1289
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1290
+ var ScrollingListPrevButton = ({
1291
+ "aria-label": ariaLabel,
1292
+ ...rest
1293
+ }) => {
1294
+ const ctx = (0, import_react10.useContext)(ScrollingListContext);
1295
+ const handlePrevPage = () => {
1296
+ const shouldSnapFirstPage = ctx.activePageIndex === 0 && (ctx.scrollAreaRef.current?.scrollLeft || 0) > 0;
1297
+ if (shouldSnapFirstPage) {
1298
+ ctx.goTo(0, { behavior: ctx.scrollBehavior });
1299
+ } else if (ctx.hasPrevPage) {
1300
+ ctx.prev({ behavior: ctx.scrollBehavior });
1301
+ } else {
1302
+ ctx.goTo(ctx.pages.length - 1, { behavior: ctx.scrollBehavior });
1303
+ }
1304
+ };
1305
+ const listHasOverflow = ctx.overflow.left || ctx.overflow.right;
1306
+ const isDisabled = !listHasOverflow || !ctx.loop && !ctx.overflow.left;
1307
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1308
+ IconButton,
1309
+ {
1310
+ size: "sm",
1311
+ intent: "surface",
1312
+ design: "filled",
1313
+ className: (0, import_class_variance_authority10.cx)(
1314
+ "pointer-events-auto opacity-(--scrolling-list-controls-opacity) shadow-sm disabled:invisible",
1315
+ "group-hover/scrolling-list:opacity-none focus-visible:opacity-none"
1316
+ ),
1317
+ onClick: handlePrevPage,
1318
+ disabled: isDisabled,
1319
+ "aria-label": ariaLabel,
1320
+ "aria-controls": "scrolling-list-items",
1321
+ ...rest,
1322
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Icon, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_ArrowVerticalLeft.ArrowVerticalLeft, {}) })
1323
+ }
1324
+ );
1325
+ };
1326
+ ScrollingListPrevButton.displayName = "ScrollingList.PrevButton";
1327
+
1328
+ // src/scrolling-list/ScrollingListSkipButton.tsx
1329
+ var import_class_variance_authority11 = require("class-variance-authority");
1330
+ var import_react11 = require("react");
1331
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1332
+ var ScrollingListSkipButton = ({ children, ...rest }) => {
1333
+ const ctx = (0, import_react11.useContext)(ScrollingListContext);
1334
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1335
+ Button,
1336
+ {
1337
+ type: "button",
1338
+ design: "tinted",
1339
+ intent: "surface",
1340
+ tabIndex: 0,
1341
+ className: (0, import_class_variance_authority11.cx)(
1342
+ "z-raised absolute top-1/2 left-0 -translate-y-1/2",
1343
+ "not-focus-visible:pointer-events-none not-focus-visible:size-0 not-focus-visible:opacity-0"
1344
+ ),
1345
+ onClick: ctx.skipKeyboardNavigation,
1346
+ ...rest,
1347
+ children
1348
+ }
1349
+ );
1350
+ };
1351
+ ScrollingListSkipButton.displayName = "ScrollingList.SkipButton";
1352
+
1353
+ // src/scrolling-list/index.ts
1354
+ var ScrollingList2 = Object.assign(ScrollingList, {
1355
+ Controls: ScrollingListControls,
1356
+ NextButton: ScrollingListNextButton,
1357
+ PrevButton: ScrollingListPrevButton,
1358
+ Item: ScrollingListItem,
1359
+ Items: ScrollingListItems,
1360
+ SkipButton: ScrollingListSkipButton
1361
+ });
1362
+ ScrollingList2.displayName = "ScrollingList";
1363
+ // Annotate the CommonJS export names for ESM import in node:
1364
+ 0 && (module.exports = {
1365
+ ScrollingList
1366
+ });
1367
+ //# sourceMappingURL=index.js.map