@tokis/react 1.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 (354) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -0
  3. package/dist/cjs/components/accordion/index.js +36 -0
  4. package/dist/cjs/components/alert/index.js +14 -0
  5. package/dist/cjs/components/app-bar/index.js +9 -0
  6. package/dist/cjs/components/avatar/index.js +64 -0
  7. package/dist/cjs/components/badge/index.js +6 -0
  8. package/dist/cjs/components/bottom-nav/index.js +12 -0
  9. package/dist/cjs/components/breadcrumbs/index.js +19 -0
  10. package/dist/cjs/components/button/ButtonIcon.js +9 -0
  11. package/dist/cjs/components/button/ButtonLabel.js +9 -0
  12. package/dist/cjs/components/button/ButtonRoot.js +23 -0
  13. package/dist/cjs/components/button/index.js +11 -0
  14. package/dist/cjs/components/button/useButton.js +14 -0
  15. package/dist/cjs/components/card/index.js +25 -0
  16. package/dist/cjs/components/charts/index.js +214 -0
  17. package/dist/cjs/components/checkbox/index.js +18 -0
  18. package/dist/cjs/components/chip/index.js +6 -0
  19. package/dist/cjs/components/circular-progress/index.js +28 -0
  20. package/dist/cjs/components/codeblock/CodeBlock.js +35 -0
  21. package/dist/cjs/components/codeblock/index.js +5 -0
  22. package/dist/cjs/components/command-palette/index.js +84 -0
  23. package/dist/cjs/components/confirm-dialog/index.js +10 -0
  24. package/dist/cjs/components/context-menu/index.js +82 -0
  25. package/dist/cjs/components/dialog/index.js +43 -0
  26. package/dist/cjs/components/divider/index.js +6 -0
  27. package/dist/cjs/components/drawer/index.js +37 -0
  28. package/dist/cjs/components/dropdown/index.js +104 -0
  29. package/dist/cjs/components/emptystate/index.js +9 -0
  30. package/dist/cjs/components/extended/index.js +329 -0
  31. package/dist/cjs/components/hover-card/index.js +107 -0
  32. package/dist/cjs/components/infinite-scroll/index.js +21 -0
  33. package/dist/cjs/components/input/index.js +27 -0
  34. package/dist/cjs/components/layout/index.js +34 -0
  35. package/dist/cjs/components/link/index.js +7 -0
  36. package/dist/cjs/components/list/index.js +14 -0
  37. package/dist/cjs/components/menu/index.js +120 -0
  38. package/dist/cjs/components/nav-rail/index.js +12 -0
  39. package/dist/cjs/components/pagination/index.js +46 -0
  40. package/dist/cjs/components/popover/index.js +114 -0
  41. package/dist/cjs/components/portal/index.js +10 -0
  42. package/dist/cjs/components/progress/index.js +21 -0
  43. package/dist/cjs/components/radio/index.js +60 -0
  44. package/dist/cjs/components/result/index.js +25 -0
  45. package/dist/cjs/components/search-field/index.js +30 -0
  46. package/dist/cjs/components/select/index.js +88 -0
  47. package/dist/cjs/components/skeleton/index.js +6 -0
  48. package/dist/cjs/components/slider/index.js +73 -0
  49. package/dist/cjs/components/snackbar/index.js +41 -0
  50. package/dist/cjs/components/spinner/index.js +6 -0
  51. package/dist/cjs/components/statistic/index.js +17 -0
  52. package/dist/cjs/components/stepper/index.js +24 -0
  53. package/dist/cjs/components/switch/index.js +19 -0
  54. package/dist/cjs/components/table/index.js +26 -0
  55. package/dist/cjs/components/tabs/index.js +44 -0
  56. package/dist/cjs/components/tag/index.js +6 -0
  57. package/dist/cjs/components/timeline/index.js +12 -0
  58. package/dist/cjs/components/toggle/index.js +32 -0
  59. package/dist/cjs/components/tooltip/index.js +116 -0
  60. package/dist/cjs/components/treeview/index.js +89 -0
  61. package/dist/cjs/components/typography/index.js +20 -0
  62. package/dist/cjs/components/virtual-list/index.js +25 -0
  63. package/dist/cjs/context/ConfigProvider.js +22 -0
  64. package/dist/cjs/context/ThemeContext.js +25 -0
  65. package/dist/cjs/hooks/useControllableState.js +31 -0
  66. package/dist/cjs/hooks/useDialog.js +35 -0
  67. package/dist/cjs/hooks/useId.js +13 -0
  68. package/dist/cjs/hooks/useMenu.js +64 -0
  69. package/dist/cjs/hooks/usePopover.js +32 -0
  70. package/dist/cjs/hooks/useTabs.js +51 -0
  71. package/dist/cjs/index.js +102 -0
  72. package/dist/cjs/package.json +3 -0
  73. package/dist/cjs/utils/cn.js +10 -0
  74. package/dist/components/accordion/index.d.ts +19 -0
  75. package/dist/components/accordion/index.d.ts.map +1 -0
  76. package/dist/components/accordion/index.js +34 -0
  77. package/dist/components/accordion/index.js.map +1 -0
  78. package/dist/components/alert/index.d.ts +11 -0
  79. package/dist/components/alert/index.d.ts.map +1 -0
  80. package/dist/components/alert/index.js +12 -0
  81. package/dist/components/alert/index.js.map +1 -0
  82. package/dist/components/app-bar/index.d.ts +17 -0
  83. package/dist/components/app-bar/index.d.ts.map +1 -0
  84. package/dist/components/app-bar/index.js +7 -0
  85. package/dist/components/app-bar/index.js.map +1 -0
  86. package/dist/components/avatar/index.d.ts +33 -0
  87. package/dist/components/avatar/index.d.ts.map +1 -0
  88. package/dist/components/avatar/index.js +28 -0
  89. package/dist/components/avatar/index.js.map +1 -0
  90. package/dist/components/badge/index.d.ts +3 -0
  91. package/dist/components/badge/index.d.ts.map +1 -0
  92. package/dist/components/badge/index.js +3 -0
  93. package/dist/components/badge/index.js.map +1 -0
  94. package/dist/components/bottom-nav/index.d.ts +18 -0
  95. package/dist/components/bottom-nav/index.d.ts.map +1 -0
  96. package/dist/components/bottom-nav/index.js +10 -0
  97. package/dist/components/bottom-nav/index.js.map +1 -0
  98. package/dist/components/breadcrumbs/index.d.ts +19 -0
  99. package/dist/components/breadcrumbs/index.d.ts.map +1 -0
  100. package/dist/components/breadcrumbs/index.js +17 -0
  101. package/dist/components/breadcrumbs/index.js.map +1 -0
  102. package/dist/components/button/ButtonIcon.d.ts +8 -0
  103. package/dist/components/button/ButtonIcon.d.ts.map +1 -0
  104. package/dist/components/button/ButtonIcon.js +6 -0
  105. package/dist/components/button/ButtonIcon.js.map +1 -0
  106. package/dist/components/button/ButtonLabel.d.ts +6 -0
  107. package/dist/components/button/ButtonLabel.d.ts.map +1 -0
  108. package/dist/components/button/ButtonLabel.js +6 -0
  109. package/dist/components/button/ButtonLabel.js.map +1 -0
  110. package/dist/components/button/ButtonRoot.d.ts +15 -0
  111. package/dist/components/button/ButtonRoot.d.ts.map +1 -0
  112. package/dist/components/button/ButtonRoot.js +21 -0
  113. package/dist/components/button/ButtonRoot.js.map +1 -0
  114. package/dist/components/button/index.d.ts +9 -0
  115. package/dist/components/button/index.d.ts.map +1 -0
  116. package/dist/components/button/index.js +5 -0
  117. package/dist/components/button/index.js.map +1 -0
  118. package/dist/components/button/useButton.d.ts +16 -0
  119. package/dist/components/button/useButton.d.ts.map +1 -0
  120. package/dist/components/button/useButton.js +12 -0
  121. package/dist/components/button/useButton.js.map +1 -0
  122. package/dist/components/card/index.d.ts +17 -0
  123. package/dist/components/card/index.d.ts.map +1 -0
  124. package/dist/components/card/index.js +23 -0
  125. package/dist/components/card/index.js.map +1 -0
  126. package/dist/components/charts/index.d.ts +60 -0
  127. package/dist/components/charts/index.d.ts.map +1 -0
  128. package/dist/components/charts/index.js +209 -0
  129. package/dist/components/charts/index.js.map +1 -0
  130. package/dist/components/checkbox/index.d.ts +17 -0
  131. package/dist/components/checkbox/index.d.ts.map +1 -0
  132. package/dist/components/checkbox/index.js +16 -0
  133. package/dist/components/checkbox/index.js.map +1 -0
  134. package/dist/components/chip/index.d.ts +3 -0
  135. package/dist/components/chip/index.d.ts.map +1 -0
  136. package/dist/components/chip/index.js +3 -0
  137. package/dist/components/chip/index.js.map +1 -0
  138. package/dist/components/circular-progress/index.d.ts +15 -0
  139. package/dist/components/circular-progress/index.d.ts.map +1 -0
  140. package/dist/components/circular-progress/index.js +26 -0
  141. package/dist/components/circular-progress/index.js.map +1 -0
  142. package/dist/components/codeblock/CodeBlock.d.ts +13 -0
  143. package/dist/components/codeblock/CodeBlock.d.ts.map +1 -0
  144. package/dist/components/codeblock/CodeBlock.js +32 -0
  145. package/dist/components/codeblock/CodeBlock.js.map +1 -0
  146. package/dist/components/codeblock/index.d.ts +3 -0
  147. package/dist/components/codeblock/index.d.ts.map +1 -0
  148. package/dist/components/codeblock/index.js +2 -0
  149. package/dist/components/codeblock/index.js.map +1 -0
  150. package/dist/components/command-palette/index.d.ts +22 -0
  151. package/dist/components/command-palette/index.d.ts.map +1 -0
  152. package/dist/components/command-palette/index.js +82 -0
  153. package/dist/components/command-palette/index.js.map +1 -0
  154. package/dist/components/confirm-dialog/index.d.ts +17 -0
  155. package/dist/components/confirm-dialog/index.d.ts.map +1 -0
  156. package/dist/components/confirm-dialog/index.js +8 -0
  157. package/dist/components/confirm-dialog/index.js.map +1 -0
  158. package/dist/components/context-menu/index.d.ts +19 -0
  159. package/dist/components/context-menu/index.d.ts.map +1 -0
  160. package/dist/components/context-menu/index.js +47 -0
  161. package/dist/components/context-menu/index.js.map +1 -0
  162. package/dist/components/dialog/index.d.ts +16 -0
  163. package/dist/components/dialog/index.d.ts.map +1 -0
  164. package/dist/components/dialog/index.js +41 -0
  165. package/dist/components/dialog/index.js.map +1 -0
  166. package/dist/components/divider/index.d.ts +3 -0
  167. package/dist/components/divider/index.d.ts.map +1 -0
  168. package/dist/components/divider/index.js +3 -0
  169. package/dist/components/divider/index.js.map +1 -0
  170. package/dist/components/drawer/index.d.ts +16 -0
  171. package/dist/components/drawer/index.d.ts.map +1 -0
  172. package/dist/components/drawer/index.js +35 -0
  173. package/dist/components/drawer/index.js.map +1 -0
  174. package/dist/components/dropdown/index.d.ts +16 -0
  175. package/dist/components/dropdown/index.d.ts.map +1 -0
  176. package/dist/components/dropdown/index.js +69 -0
  177. package/dist/components/dropdown/index.js.map +1 -0
  178. package/dist/components/emptystate/index.d.ts +13 -0
  179. package/dist/components/emptystate/index.d.ts.map +1 -0
  180. package/dist/components/emptystate/index.js +7 -0
  181. package/dist/components/emptystate/index.js.map +1 -0
  182. package/dist/components/extended/index.d.ts +163 -0
  183. package/dist/components/extended/index.d.ts.map +1 -0
  184. package/dist/components/extended/index.js +267 -0
  185. package/dist/components/extended/index.js.map +1 -0
  186. package/dist/components/hover-card/index.d.ts +14 -0
  187. package/dist/components/hover-card/index.d.ts.map +1 -0
  188. package/dist/components/hover-card/index.js +72 -0
  189. package/dist/components/hover-card/index.js.map +1 -0
  190. package/dist/components/infinite-scroll/index.d.ts +16 -0
  191. package/dist/components/infinite-scroll/index.d.ts.map +1 -0
  192. package/dist/components/infinite-scroll/index.js +19 -0
  193. package/dist/components/infinite-scroll/index.js.map +1 -0
  194. package/dist/components/input/index.d.ts +19 -0
  195. package/dist/components/input/index.d.ts.map +1 -0
  196. package/dist/components/input/index.js +25 -0
  197. package/dist/components/input/index.js.map +1 -0
  198. package/dist/components/layout/index.d.ts +39 -0
  199. package/dist/components/layout/index.d.ts.map +1 -0
  200. package/dist/components/layout/index.js +32 -0
  201. package/dist/components/layout/index.js.map +1 -0
  202. package/dist/components/link/index.d.ts +3 -0
  203. package/dist/components/link/index.d.ts.map +1 -0
  204. package/dist/components/link/index.js +3 -0
  205. package/dist/components/link/index.js.map +1 -0
  206. package/dist/components/list/index.d.ts +13 -0
  207. package/dist/components/list/index.d.ts.map +1 -0
  208. package/dist/components/list/index.js +12 -0
  209. package/dist/components/list/index.js.map +1 -0
  210. package/dist/components/menu/index.d.ts +19 -0
  211. package/dist/components/menu/index.d.ts.map +1 -0
  212. package/dist/components/menu/index.js +85 -0
  213. package/dist/components/menu/index.js.map +1 -0
  214. package/dist/components/nav-rail/index.d.ts +20 -0
  215. package/dist/components/nav-rail/index.d.ts.map +1 -0
  216. package/dist/components/nav-rail/index.js +10 -0
  217. package/dist/components/nav-rail/index.js.map +1 -0
  218. package/dist/components/pagination/index.d.ts +9 -0
  219. package/dist/components/pagination/index.d.ts.map +1 -0
  220. package/dist/components/pagination/index.js +44 -0
  221. package/dist/components/pagination/index.js.map +1 -0
  222. package/dist/components/popover/index.d.ts +16 -0
  223. package/dist/components/popover/index.d.ts.map +1 -0
  224. package/dist/components/popover/index.js +79 -0
  225. package/dist/components/popover/index.js.map +1 -0
  226. package/dist/components/portal/index.d.ts +7 -0
  227. package/dist/components/portal/index.d.ts.map +1 -0
  228. package/dist/components/portal/index.js +8 -0
  229. package/dist/components/portal/index.js.map +1 -0
  230. package/dist/components/progress/index.d.ts +25 -0
  231. package/dist/components/progress/index.d.ts.map +1 -0
  232. package/dist/components/progress/index.js +19 -0
  233. package/dist/components/progress/index.js.map +1 -0
  234. package/dist/components/radio/index.d.ts +25 -0
  235. package/dist/components/radio/index.d.ts.map +1 -0
  236. package/dist/components/radio/index.js +24 -0
  237. package/dist/components/radio/index.js.map +1 -0
  238. package/dist/components/result/index.d.ts +14 -0
  239. package/dist/components/result/index.d.ts.map +1 -0
  240. package/dist/components/result/index.js +23 -0
  241. package/dist/components/result/index.js.map +1 -0
  242. package/dist/components/search-field/index.d.ts +15 -0
  243. package/dist/components/search-field/index.d.ts.map +1 -0
  244. package/dist/components/search-field/index.js +28 -0
  245. package/dist/components/search-field/index.js.map +1 -0
  246. package/dist/components/select/index.d.ts +23 -0
  247. package/dist/components/select/index.d.ts.map +1 -0
  248. package/dist/components/select/index.js +86 -0
  249. package/dist/components/select/index.js.map +1 -0
  250. package/dist/components/skeleton/index.d.ts +3 -0
  251. package/dist/components/skeleton/index.d.ts.map +1 -0
  252. package/dist/components/skeleton/index.js +3 -0
  253. package/dist/components/skeleton/index.js.map +1 -0
  254. package/dist/components/slider/index.d.ts +18 -0
  255. package/dist/components/slider/index.d.ts.map +1 -0
  256. package/dist/components/slider/index.js +71 -0
  257. package/dist/components/slider/index.js.map +1 -0
  258. package/dist/components/snackbar/index.d.ts +27 -0
  259. package/dist/components/snackbar/index.d.ts.map +1 -0
  260. package/dist/components/snackbar/index.js +38 -0
  261. package/dist/components/snackbar/index.js.map +1 -0
  262. package/dist/components/spinner/index.d.ts +3 -0
  263. package/dist/components/spinner/index.d.ts.map +1 -0
  264. package/dist/components/spinner/index.js +3 -0
  265. package/dist/components/spinner/index.js.map +1 -0
  266. package/dist/components/statistic/index.d.ts +13 -0
  267. package/dist/components/statistic/index.d.ts.map +1 -0
  268. package/dist/components/statistic/index.js +15 -0
  269. package/dist/components/statistic/index.js.map +1 -0
  270. package/dist/components/stepper/index.d.ts +17 -0
  271. package/dist/components/stepper/index.d.ts.map +1 -0
  272. package/dist/components/stepper/index.js +22 -0
  273. package/dist/components/stepper/index.js.map +1 -0
  274. package/dist/components/switch/index.d.ts +16 -0
  275. package/dist/components/switch/index.d.ts.map +1 -0
  276. package/dist/components/switch/index.js +17 -0
  277. package/dist/components/switch/index.js.map +1 -0
  278. package/dist/components/table/index.d.ts +17 -0
  279. package/dist/components/table/index.d.ts.map +1 -0
  280. package/dist/components/table/index.js +24 -0
  281. package/dist/components/table/index.js.map +1 -0
  282. package/dist/components/tabs/index.d.ts +19 -0
  283. package/dist/components/tabs/index.d.ts.map +1 -0
  284. package/dist/components/tabs/index.js +42 -0
  285. package/dist/components/tabs/index.js.map +1 -0
  286. package/dist/components/tag/index.d.ts +3 -0
  287. package/dist/components/tag/index.d.ts.map +1 -0
  288. package/dist/components/tag/index.js +3 -0
  289. package/dist/components/tag/index.js.map +1 -0
  290. package/dist/components/timeline/index.d.ts +16 -0
  291. package/dist/components/timeline/index.d.ts.map +1 -0
  292. package/dist/components/timeline/index.js +10 -0
  293. package/dist/components/timeline/index.js.map +1 -0
  294. package/dist/components/toggle/index.d.ts +32 -0
  295. package/dist/components/toggle/index.d.ts.map +1 -0
  296. package/dist/components/toggle/index.js +29 -0
  297. package/dist/components/toggle/index.js.map +1 -0
  298. package/dist/components/tooltip/index.d.ts +11 -0
  299. package/dist/components/tooltip/index.d.ts.map +1 -0
  300. package/dist/components/tooltip/index.js +81 -0
  301. package/dist/components/tooltip/index.js.map +1 -0
  302. package/dist/components/treeview/index.d.ts +19 -0
  303. package/dist/components/treeview/index.d.ts.map +1 -0
  304. package/dist/components/treeview/index.js +87 -0
  305. package/dist/components/treeview/index.js.map +1 -0
  306. package/dist/components/typography/index.d.ts +11 -0
  307. package/dist/components/typography/index.d.ts.map +1 -0
  308. package/dist/components/typography/index.js +18 -0
  309. package/dist/components/typography/index.js.map +1 -0
  310. package/dist/components/virtual-list/index.d.ts +15 -0
  311. package/dist/components/virtual-list/index.d.ts.map +1 -0
  312. package/dist/components/virtual-list/index.js +23 -0
  313. package/dist/components/virtual-list/index.js.map +1 -0
  314. package/dist/context/ConfigProvider.d.ts +12 -0
  315. package/dist/context/ConfigProvider.d.ts.map +1 -0
  316. package/dist/context/ConfigProvider.js +18 -0
  317. package/dist/context/ConfigProvider.js.map +1 -0
  318. package/dist/context/ThemeContext.d.ts +15 -0
  319. package/dist/context/ThemeContext.d.ts.map +1 -0
  320. package/dist/context/ThemeContext.js +21 -0
  321. package/dist/context/ThemeContext.js.map +1 -0
  322. package/dist/hooks/useControllableState.d.ts +10 -0
  323. package/dist/hooks/useControllableState.d.ts.map +1 -0
  324. package/dist/hooks/useControllableState.js +29 -0
  325. package/dist/hooks/useControllableState.js.map +1 -0
  326. package/dist/hooks/useDialog.d.ts +24 -0
  327. package/dist/hooks/useDialog.d.ts.map +1 -0
  328. package/dist/hooks/useDialog.js +33 -0
  329. package/dist/hooks/useDialog.js.map +1 -0
  330. package/dist/hooks/useId.d.ts +7 -0
  331. package/dist/hooks/useId.d.ts.map +1 -0
  332. package/dist/hooks/useId.js +11 -0
  333. package/dist/hooks/useId.js.map +1 -0
  334. package/dist/hooks/useMenu.d.ts +21 -0
  335. package/dist/hooks/useMenu.d.ts.map +1 -0
  336. package/dist/hooks/useMenu.js +62 -0
  337. package/dist/hooks/useMenu.js.map +1 -0
  338. package/dist/hooks/usePopover.d.ts +22 -0
  339. package/dist/hooks/usePopover.d.ts.map +1 -0
  340. package/dist/hooks/usePopover.js +30 -0
  341. package/dist/hooks/usePopover.js.map +1 -0
  342. package/dist/hooks/useTabs.d.ts +22 -0
  343. package/dist/hooks/useTabs.d.ts.map +1 -0
  344. package/dist/hooks/useTabs.js +49 -0
  345. package/dist/hooks/useTabs.js.map +1 -0
  346. package/dist/index.d.ts +65 -0
  347. package/dist/index.d.ts.map +1 -0
  348. package/dist/index.js +85 -0
  349. package/dist/index.js.map +1 -0
  350. package/dist/utils/cn.d.ts +6 -0
  351. package/dist/utils/cn.d.ts.map +1 -0
  352. package/dist/utils/cn.js +8 -0
  353. package/dist/utils/cn.js.map +1 -0
  354. package/package.json +79 -0
@@ -0,0 +1,79 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React, { useState, useRef, useEffect, useId, useCallback } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ import { Portal } from '../portal/index.js';
5
+ export function Popover({ trigger, content, title, placement = 'bottom-start', open, defaultOpen = false, onOpenChange, closeOnClickOutside = true, closeOnEsc = true, className }) {
6
+ const [internalOpen, setInternalOpen] = useState(defaultOpen);
7
+ const isOpen = open ?? internalOpen;
8
+ const [pos, setPos] = useState({ top: 0, left: 0 });
9
+ const triggerRef = useRef(null);
10
+ const contentRef = useRef(null);
11
+ const popoverId = useId();
12
+ const setOpen = useCallback((val) => {
13
+ if (open === undefined)
14
+ setInternalOpen(val);
15
+ onOpenChange?.(val);
16
+ }, [open, onOpenChange]);
17
+ const updatePosition = useCallback(() => {
18
+ if (!triggerRef.current)
19
+ return;
20
+ const rect = triggerRef.current.getBoundingClientRect();
21
+ const gap = 8;
22
+ let top = 0;
23
+ let left = 0;
24
+ const base = placement.split('-')[0];
25
+ const align = placement.split('-')[1];
26
+ if (base === 'bottom') {
27
+ top = rect.bottom + window.scrollY + gap;
28
+ }
29
+ if (base === 'top') {
30
+ top = rect.top + window.scrollY - gap;
31
+ }
32
+ if (base === 'right') {
33
+ left = rect.right + window.scrollX + gap;
34
+ top = rect.top + window.scrollY;
35
+ }
36
+ if (base === 'left') {
37
+ left = rect.left + window.scrollX - gap;
38
+ top = rect.top + window.scrollY;
39
+ }
40
+ if (!align || align === 'start') {
41
+ left = rect.left + window.scrollX;
42
+ }
43
+ if (align === 'end') {
44
+ left = rect.right + window.scrollX;
45
+ }
46
+ if (align === 'center' || (base === 'top' || base === 'bottom') && !align) {
47
+ left = rect.left + window.scrollX + rect.width / 2;
48
+ }
49
+ setPos({ top, left });
50
+ }, [placement]);
51
+ useEffect(() => {
52
+ if (!isOpen || !closeOnClickOutside)
53
+ return;
54
+ const handle = (e) => {
55
+ if (!triggerRef.current?.contains(e.target) && !contentRef.current?.contains(e.target)) {
56
+ setOpen(false);
57
+ }
58
+ };
59
+ document.addEventListener('mousedown', handle);
60
+ return () => document.removeEventListener('mousedown', handle);
61
+ }, [isOpen, closeOnClickOutside, setOpen]);
62
+ useEffect(() => {
63
+ if (!isOpen || !closeOnEsc)
64
+ return;
65
+ const h = (e) => { if (e.key === 'Escape')
66
+ setOpen(false); };
67
+ document.addEventListener('keydown', h);
68
+ return () => document.removeEventListener('keydown', h);
69
+ }, [isOpen, closeOnEsc, setOpen]);
70
+ const handleToggle = () => { updatePosition(); setOpen(!isOpen); };
71
+ return (_jsxs(_Fragment, { children: [React.cloneElement(trigger, {
72
+ ref: triggerRef,
73
+ 'aria-expanded': isOpen,
74
+ 'aria-haspopup': 'dialog',
75
+ 'aria-controls': isOpen ? popoverId : undefined,
76
+ onClick: (e) => { handleToggle(); trigger.props.onClick?.(e); },
77
+ }), isOpen && (_jsx(Portal, { children: _jsxs("div", { ref: contentRef, id: popoverId, role: "dialog", "aria-modal": "false", tabIndex: -1, className: cn('tokis-popover-content', className), style: { position: 'absolute', top: pos.top, left: pos.left }, children: [title && _jsx("p", { className: "tokis-popover-title", children: title }), _jsx("button", { className: "tokis-popover-close", onClick: () => setOpen(false), "aria-label": "Close", children: _jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M1 1l10 10M11 1L1 11", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) }), content] }) }))] }));
78
+ }
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/popover/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export interface PortalProps {
3
+ children: React.ReactNode;
4
+ container?: Element | null;
5
+ }
6
+ export declare function Portal({ children, container }: PortalProps): React.ReactPortal | null;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/portal/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAIrF"}
@@ -0,0 +1,8 @@
1
+ import { createPortal } from 'react-dom';
2
+ export function Portal({ children, container }) {
3
+ if (typeof document === 'undefined')
4
+ return null;
5
+ const target = container ?? document.body;
6
+ return createPortal(children, target);
7
+ }
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/portal/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAOzC,MAAM,UAAU,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAe;IACzD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC1C,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ export type ProgressVariant = 'default' | 'success' | 'warning' | 'error';
3
+ export interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ value?: number;
5
+ max?: number;
6
+ label?: string;
7
+ showValue?: boolean;
8
+ variant?: ProgressVariant;
9
+ size?: 'sm' | 'md' | 'lg';
10
+ }
11
+ export declare const Progress: React.ForwardRefExoticComponent<ProgressProps & React.RefAttributes<HTMLDivElement>>;
12
+ export interface SkeletonProps extends React.HTMLAttributes<HTMLSpanElement> {
13
+ variant?: 'text' | 'rectangular' | 'circular' | 'wave';
14
+ width?: string | number;
15
+ height?: string | number;
16
+ lines?: number;
17
+ }
18
+ export declare const Skeleton: React.ForwardRefExoticComponent<SkeletonProps & React.RefAttributes<HTMLSpanElement>>;
19
+ export interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {
20
+ size?: 'sm' | 'md' | 'lg' | 'xl';
21
+ variant?: 'default' | 'white';
22
+ label?: string;
23
+ }
24
+ export declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<HTMLSpanElement>>;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/progress/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAI1C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1E,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,QAAQ,sFAiCnB,CAAC;AAIH,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IAC1E,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,uFAgCnB,CAAC;AAIH,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IACzE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,OAAO,sFAalB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ export const Progress = forwardRef(({ value, max = 100, label, showValue = false, variant = 'default', size = 'md', className, ...props }, ref) => {
5
+ const pct = value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : undefined;
6
+ const isIndeterminate = pct === undefined;
7
+ return (_jsxs("div", { ref: ref, className: cn('tokis-progress-root', className), ...props, children: [(label || showValue) && (_jsxs("div", { className: "tokis-progress-label", children: [label && _jsx("span", { className: "tokis-progress-label-text", children: label }), showValue && !isIndeterminate && _jsxs("span", { className: "tokis-progress-label-value", children: [Math.round(pct), "%"] })] })), _jsx("div", { role: "progressbar", "aria-valuenow": isIndeterminate ? undefined : pct, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": label, className: cn('tokis-progress-track', size !== 'md' && `tokis-progress-track--${size}`), children: _jsx("div", { className: cn('tokis-progress-fill', variant !== 'default' && `tokis-progress-fill--${variant}`, isIndeterminate && 'tokis-progress-fill--indeterminate'), style: !isIndeterminate ? { width: `${pct}%` } : undefined }) })] }));
8
+ });
9
+ Progress.displayName = 'Progress';
10
+ export const Skeleton = forwardRef(({ variant = 'rectangular', width, height, lines, className, style, ...props }, ref) => {
11
+ if (lines && lines > 1) {
12
+ return (_jsx("div", { className: className, children: Array.from({ length: lines }).map((_, i) => (_jsx("span", { className: cn('tokis-skeleton tokis-skeleton--text'), style: { width: i === lines - 1 ? '70%' : '100%', marginBottom: i < lines - 1 ? '8px' : 0 } }, i))) }));
13
+ }
14
+ return (_jsx("span", { ref: ref, className: cn('tokis-skeleton', variant === 'text' && 'tokis-skeleton--text', variant === 'circular' && 'tokis-skeleton--circle', variant === 'wave' && 'tokis-skeleton--wave', className), style: { display: 'block', width, height, ...style }, "aria-hidden": "true", ...props }));
15
+ });
16
+ Skeleton.displayName = 'Skeleton';
17
+ export const Spinner = forwardRef(({ size = 'md', variant = 'default', label = 'Loading…', className, ...props }, ref) => (_jsx("span", { ref: ref, role: "status", "aria-label": label, className: cn('tokis-spinner', size !== 'md' && `tokis-spinner--${size}`, variant === 'white' && 'tokis-spinner--white', className), ...props })));
18
+ Spinner.displayName = 'Spinner';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/progress/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ export interface RadioGroupProps {
3
+ value?: string;
4
+ defaultValue?: string;
5
+ onChange?: (value: string) => void;
6
+ name?: string;
7
+ orientation?: 'vertical' | 'horizontal';
8
+ disabled?: boolean;
9
+ children: React.ReactNode;
10
+ className?: string;
11
+ label?: string;
12
+ }
13
+ export interface RadioProps {
14
+ value: string;
15
+ label?: React.ReactNode;
16
+ description?: string;
17
+ disabled?: boolean;
18
+ checked?: boolean;
19
+ name?: string;
20
+ onChange?: (value: string) => void;
21
+ className?: string;
22
+ }
23
+ export declare function Radio({ value, label, description, disabled, checked, name, onChange, className }: RadioProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function RadioGroup({ value, onChange, name, orientation, disabled, children, className, label }: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/radio/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgB,MAAM,OAAO,CAAC;AAGrC,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAgB,EAAE,OAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,UAAU,2CAmC5H;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAwB,EAAE,QAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,eAAe,2CAsB5I"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useId } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ export function Radio({ value, label, description, disabled = false, checked = false, name, onChange, className }) {
5
+ const autoId = useId();
6
+ const radioId = `radio-${autoId}`;
7
+ const descId = description ? `${radioId}-desc` : undefined;
8
+ return (_jsxs("label", { className: cn('tokis-radio-root', className), "data-disabled": disabled || undefined, htmlFor: radioId, children: [_jsx("input", { type: "radio", id: radioId, name: name, value: value, checked: checked, disabled: disabled, onChange: (e) => e.target.checked && onChange?.(value), className: "tokis-radio-native", "aria-describedby": descId }), _jsx("span", { "aria-hidden": "true", className: "tokis-radio-control", "data-checked": checked ? 'true' : undefined }), (label || description) && (_jsxs("div", { children: [label && _jsx("span", { className: "tokis-radio-label", children: label }), description && _jsx("p", { id: descId, className: "tokis-radio-description", children: description })] }))] }));
9
+ }
10
+ export function RadioGroup({ value, onChange, name, orientation = 'vertical', disabled = false, children, className, label }) {
11
+ const groupId = useId();
12
+ return (_jsxs("div", { role: "radiogroup", "aria-labelledby": label ? groupId : undefined, "aria-disabled": disabled, className: cn('tokis-radio-group', orientation === 'horizontal' && 'tokis-radio-group--horizontal', className), children: [label && _jsx("span", { id: groupId, className: "tokis-label", style: { marginBottom: 'var(--tokis-spacing-1)' }, children: label }), React.Children.map(children, (child) => {
13
+ if (!React.isValidElement(child))
14
+ return child;
15
+ const item = child;
16
+ return React.cloneElement(item, {
17
+ name: name ?? groupId,
18
+ checked: value !== undefined ? item.props.value === value : item.props.checked,
19
+ disabled: disabled || item.props.disabled,
20
+ onChange: (v) => onChange?.(v),
21
+ });
22
+ })] }));
23
+ }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/radio/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ export type ResultStatus = 'success' | 'error' | 'warning' | 'info' | 'loading';
3
+ export interface ResultProps {
4
+ status: ResultStatus;
5
+ title: string;
6
+ description?: string;
7
+ extra?: React.ReactNode;
8
+ className?: string;
9
+ }
10
+ export declare function Result({ status, title, description, extra, className }: ResultProps): JSX.Element;
11
+ export declare namespace Result {
12
+ var displayName: string;
13
+ }
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/result/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2CD,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAWjG;yBAXe,MAAM"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '../../utils/cn.js';
3
+ const StatusIcon = ({ status }) => {
4
+ if (status === 'success') {
5
+ return (_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [_jsx("circle", { cx: "24", cy: "24", r: "22", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M14 24l7 7 13-14", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" })] }));
6
+ }
7
+ if (status === 'error') {
8
+ return (_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [_jsx("circle", { cx: "24", cy: "24", r: "22", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M16 16l16 16M32 16L16 32", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })] }));
9
+ }
10
+ if (status === 'warning') {
11
+ return (_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [_jsx("path", { d: "M24 6L42 40H6L24 6z", stroke: "currentColor", strokeWidth: "2", strokeLinejoin: "round" }), _jsx("path", { d: "M24 20v10M24 34v2", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })] }));
12
+ }
13
+ if (status === 'info') {
14
+ return (_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [_jsx("circle", { cx: "24", cy: "24", r: "22", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M24 22v12M24 16v2", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })] }));
15
+ }
16
+ // loading
17
+ return (_jsx("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", className: "tokis-result__spin", children: _jsx("circle", { cx: "24", cy: "24", r: "20", stroke: "currentColor", strokeWidth: "3", strokeDasharray: "31.4 94.2", strokeLinecap: "round" }) }));
18
+ };
19
+ export function Result({ status, title, description, extra, className }) {
20
+ return (_jsxs("div", { className: cn('tokis-result', `tokis-result--${status}`, className), children: [_jsx("div", { className: cn('tokis-result__icon', `tokis-result__icon--${status}`), children: _jsx(StatusIcon, { status: status }) }), _jsx("h3", { className: "tokis-result__title", children: title }), description && _jsx("p", { className: "tokis-result__description", children: description }), extra && _jsx("div", { className: "tokis-result__extra", children: extra })] }));
21
+ }
22
+ Result.displayName = 'Result';
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/result/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface SearchFieldProps {
2
+ value: string;
3
+ onChange: (value: string) => void;
4
+ onSearch?: (value: string) => void;
5
+ placeholder?: string;
6
+ loading?: boolean;
7
+ debounce?: number;
8
+ label?: string;
9
+ className?: string;
10
+ }
11
+ export declare function SearchField({ value, onChange, onSearch, placeholder, loading, debounce, label, className, }: SearchFieldProps): JSX.Element;
12
+ export declare namespace SearchField {
13
+ var displayName: string;
14
+ }
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/search-field/index.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAuB,EACvB,OAAe,EACf,QAAc,EACd,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAoEhC;yBA7Ee,WAAW"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useEffect, useCallback } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ export function SearchField({ value, onChange, onSearch, placeholder = 'Search…', loading = false, debounce = 300, label, className, }) {
5
+ const debounceRef = useRef();
6
+ const handleChange = useCallback((e) => {
7
+ const val = e.target.value;
8
+ onChange(val);
9
+ if (onSearch) {
10
+ clearTimeout(debounceRef.current);
11
+ debounceRef.current = setTimeout(() => onSearch(val), debounce);
12
+ }
13
+ }, [onChange, onSearch, debounce]);
14
+ const handleKeyDown = useCallback((e) => {
15
+ if (e.key === 'Enter' && onSearch) {
16
+ clearTimeout(debounceRef.current);
17
+ onSearch(value);
18
+ }
19
+ if (e.key === 'Escape') {
20
+ onChange('');
21
+ onSearch?.('');
22
+ }
23
+ }, [value, onChange, onSearch]);
24
+ useEffect(() => () => clearTimeout(debounceRef.current), []);
25
+ return (_jsxs("div", { className: cn('tokis-search-field', className), children: [label && _jsx("label", { className: "tokis-search-field__label", children: label }), _jsxs("div", { className: "tokis-search-field__wrap", children: [_jsx("span", { className: "tokis-search-field__icon", "aria-hidden": "true", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: [_jsx("circle", { cx: "6", cy: "6", r: "4", stroke: "currentColor", strokeWidth: "1.4" }), _jsx("path", { d: "M9.5 9.5L12 12", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" })] }) }), _jsx("input", { type: "search", className: "tokis-search-field__input", value: value, onChange: handleChange, onKeyDown: handleKeyDown, placeholder: placeholder, "aria-label": label ?? placeholder }), loading && (_jsx("span", { className: "tokis-search-field__spinner", "aria-label": "Searching\u2026" })), !loading && value && (_jsx("button", { type: "button", className: "tokis-search-field__clear", onClick: () => { onChange(''); onSearch?.(''); }, "aria-label": "Clear search", children: _jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", children: _jsx("path", { d: "M2 2l8 8M10 2l-8 8", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" }) }) }))] })] }));
26
+ }
27
+ SearchField.displayName = 'SearchField';
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/search-field/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface SelectOption {
2
+ value: string;
3
+ label: string;
4
+ disabled?: boolean;
5
+ group?: string;
6
+ }
7
+ export interface SelectProps {
8
+ value?: string;
9
+ defaultValue?: string;
10
+ onChange?: (value: string) => void;
11
+ options: SelectOption[];
12
+ placeholder?: string;
13
+ disabled?: boolean;
14
+ label?: string;
15
+ helperText?: string;
16
+ error?: boolean;
17
+ required?: boolean;
18
+ id?: string;
19
+ className?: string;
20
+ size?: 'sm' | 'md' | 'lg';
21
+ }
22
+ export declare function Select({ value, defaultValue, onChange, options, placeholder, disabled, label, helperText, error, required, id, className, size, }: SelectProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/select/index.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAgC,EACxE,QAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAa,EAAE,QAAQ,EAC5D,EAAE,EAAE,SAAS,EAAE,IAAW,GAC3B,EAAE,WAAW,2CAwHb"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect, useId, useCallback } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ import { Portal } from '../portal/index.js';
5
+ export function Select({ value, defaultValue, onChange, options, placeholder = 'Select an option', disabled = false, label, helperText, error = false, required, id, className, size = 'md', }) {
6
+ const autoId = useId();
7
+ const selectId = id ?? `select-${autoId}`;
8
+ const [open, setOpen] = useState(false);
9
+ const [internalValue, setInternalValue] = useState(defaultValue ?? '');
10
+ const [focusedIndex, setFocusedIndex] = useState(-1);
11
+ const triggerRef = useRef(null);
12
+ const contentRef = useRef(null);
13
+ const [position, setPosition] = useState({ top: 0, left: 0, width: 0 });
14
+ const currentValue = value !== undefined ? value : internalValue;
15
+ const selectedOption = options.find((o) => o.value === currentValue);
16
+ const enabledOptions = options.filter((o) => !o.disabled);
17
+ const updatePosition = useCallback(() => {
18
+ if (!triggerRef.current)
19
+ return;
20
+ const rect = triggerRef.current.getBoundingClientRect();
21
+ setPosition({ top: rect.bottom + window.scrollY + 4, left: rect.left + window.scrollX, width: rect.width });
22
+ }, []);
23
+ const handleSelect = (val) => {
24
+ if (value === undefined)
25
+ setInternalValue(val);
26
+ onChange?.(val);
27
+ setOpen(false);
28
+ triggerRef.current?.focus();
29
+ };
30
+ const handleKeyDown = (e) => {
31
+ if (disabled)
32
+ return;
33
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
34
+ e.preventDefault();
35
+ if (!open) {
36
+ updatePosition();
37
+ setOpen(true);
38
+ setFocusedIndex(0);
39
+ return;
40
+ }
41
+ setFocusedIndex((prev) => {
42
+ const next = e.key === 'ArrowDown' ? (prev + 1) % enabledOptions.length : (prev - 1 + enabledOptions.length) % enabledOptions.length;
43
+ return next;
44
+ });
45
+ }
46
+ if (e.key === 'Enter' || e.key === ' ') {
47
+ e.preventDefault();
48
+ if (!open) {
49
+ updatePosition();
50
+ setOpen(true);
51
+ return;
52
+ }
53
+ if (focusedIndex >= 0)
54
+ handleSelect(enabledOptions[focusedIndex].value);
55
+ }
56
+ if (e.key === 'Escape') {
57
+ setOpen(false);
58
+ triggerRef.current?.focus();
59
+ }
60
+ };
61
+ useEffect(() => {
62
+ if (!open)
63
+ return;
64
+ const handle = (e) => {
65
+ if (!triggerRef.current?.contains(e.target) && !contentRef.current?.contains(e.target)) {
66
+ setOpen(false);
67
+ }
68
+ };
69
+ document.addEventListener('mousedown', handle);
70
+ return () => document.removeEventListener('mousedown', handle);
71
+ }, [open]);
72
+ const helperId = helperText ? `${selectId}-helper` : undefined;
73
+ const groups = [...new Set(options.map((o) => o.group))];
74
+ const hasGroups = groups.some(Boolean);
75
+ return (_jsxs("div", { className: cn('tokis-field', className), children: [label && (_jsx("label", { htmlFor: selectId, className: cn('tokis-label', required && 'tokis-label--required'), children: label })), _jsxs("button", { ref: triggerRef, id: selectId, type: "button", role: "combobox", "aria-expanded": open, "aria-haspopup": "listbox", "aria-describedby": helperId, "aria-invalid": error || undefined, "aria-required": required, "aria-disabled": disabled, className: cn('tokis-select-trigger', size !== 'md' && `tokis-select-trigger--${size}`), "data-open": open || undefined, "data-disabled": disabled || undefined, disabled: disabled, onKeyDown: handleKeyDown, onClick: () => { if (!disabled) {
76
+ updatePosition();
77
+ setOpen((v) => !v);
78
+ } }, children: [_jsx("span", { className: cn(!selectedOption && 'tokis-select-trigger__placeholder'), children: selectedOption ? selectedOption.label : placeholder }), _jsx("svg", { className: "tokis-select-trigger__icon", width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M4 6l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })] }), open && (_jsx(Portal, { children: _jsx("div", { ref: contentRef, role: "listbox", "aria-label": label, className: "tokis-select-content", style: { position: 'absolute', top: position.top, left: position.left, width: position.width }, children: hasGroups
79
+ ? groups.map((group) => (_jsxs("div", { children: [group && _jsx("div", { className: "tokis-select-group-label", children: group }), options.filter((o) => o.group === group).map((opt) => (_jsx(SelectItem, { opt: opt, currentValue: currentValue, onSelect: handleSelect }, opt.value)))] }, group ?? '__default__')))
80
+ : options.map((opt) => (_jsx(SelectItem, { opt: opt, currentValue: currentValue, onSelect: handleSelect }, opt.value))) }) })), helperText && (_jsx("span", { id: helperId, className: cn('tokis-helper-text', error && 'tokis-helper-text--error'), children: helperText }))] }));
81
+ }
82
+ function SelectItem({ opt, currentValue, onSelect }) {
83
+ return (_jsxs("div", { role: "option", "aria-selected": opt.value === currentValue, "aria-disabled": opt.disabled, className: "tokis-select-item", "data-selected": opt.value === currentValue ? 'true' : undefined, "data-disabled": opt.disabled ? 'true' : undefined, onClick: () => { if (!opt.disabled)
84
+ onSelect(opt.value); }, children: [opt.value === currentValue && (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M2 7l3.5 3.5L12 3.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })), opt.label] }));
85
+ }
86
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/select/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { Skeleton } from '../progress/index.js';
2
+ export type { SkeletonProps } from '../progress/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/skeleton/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Re-export Skeleton from progress
2
+ export { Skeleton } from '../progress/index.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/skeleton/index.tsx"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ export interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
3
+ value?: number;
4
+ defaultValue?: number;
5
+ min?: number;
6
+ max?: number;
7
+ step?: number;
8
+ onChange?: (value: number) => void;
9
+ disabled?: boolean;
10
+ label?: string;
11
+ showValue?: boolean;
12
+ marks?: boolean | {
13
+ value: number;
14
+ label?: string;
15
+ }[];
16
+ }
17
+ export declare const Slider: React.ForwardRefExoticComponent<SliderProps & React.RefAttributes<HTMLDivElement>>;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/slider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAGzE,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACzF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD;AAED,eAAO,MAAM,MAAM,oFAsFjB,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef, useCallback, useRef, useState } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ export const Slider = forwardRef(({ value, defaultValue = 0, min = 0, max = 100, step = 1, onChange, disabled = false, label, showValue = false, marks, className, ...props }, ref) => {
5
+ const [internal, setInternal] = useState(defaultValue);
6
+ const current = value ?? internal;
7
+ const trackRef = useRef(null);
8
+ const clamp = (v) => Math.min(max, Math.max(min, Math.round(v / step) * step));
9
+ const pct = ((current - min) / (max - min)) * 100;
10
+ const handleChange = useCallback((newVal) => {
11
+ const clamped = clamp(newVal);
12
+ if (value === undefined)
13
+ setInternal(clamped);
14
+ onChange?.(clamped);
15
+ }, [min, max, step, value, onChange]);
16
+ const handleKeyDown = (e) => {
17
+ if (disabled)
18
+ return;
19
+ if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {
20
+ e.preventDefault();
21
+ handleChange(current + step);
22
+ }
23
+ if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {
24
+ e.preventDefault();
25
+ handleChange(current - step);
26
+ }
27
+ if (e.key === 'Home') {
28
+ e.preventDefault();
29
+ handleChange(min);
30
+ }
31
+ if (e.key === 'End') {
32
+ e.preventDefault();
33
+ handleChange(max);
34
+ }
35
+ if (e.key === 'PageUp') {
36
+ e.preventDefault();
37
+ handleChange(current + step * 10);
38
+ }
39
+ if (e.key === 'PageDown') {
40
+ e.preventDefault();
41
+ handleChange(current - step * 10);
42
+ }
43
+ };
44
+ const handleTrackClick = (e) => {
45
+ if (disabled || !trackRef.current)
46
+ return;
47
+ const rect = trackRef.current.getBoundingClientRect();
48
+ const ratio = (e.clientX - rect.left) / rect.width;
49
+ handleChange(min + ratio * (max - min));
50
+ };
51
+ const markList = Array.isArray(marks)
52
+ ? marks
53
+ : marks
54
+ ? [{ value: min }, { value: max }]
55
+ : [];
56
+ return (_jsxs("div", { className: cn('tokis-slider-root', className), "data-disabled": disabled || undefined, ...props, ref: ref, children: [label && (_jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', marginBottom: '8px' }, children: [_jsx("span", { className: "tokis-label", children: label }), showValue && _jsx("span", { className: "tokis-text--secondary", style: { fontSize: 'var(--tokis-font-size-sm)' }, children: current })] })), _jsxs("div", { className: "tokis-slider-track-wrapper", children: [_jsx("div", { ref: trackRef, className: "tokis-slider-track", onClick: handleTrackClick, children: _jsx("div", { className: "tokis-slider-range", style: { width: `${pct}%` } }) }), _jsx("div", { role: "slider", tabIndex: disabled ? -1 : 0, "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": current, "aria-label": label, "aria-disabled": disabled, className: "tokis-slider-thumb", style: { left: `${pct}%` }, onKeyDown: handleKeyDown, onMouseDown: (e) => {
57
+ if (disabled)
58
+ return;
59
+ e.preventDefault();
60
+ const move = (me) => {
61
+ if (!trackRef.current)
62
+ return;
63
+ const rect = trackRef.current.getBoundingClientRect();
64
+ handleChange(min + ((me.clientX - rect.left) / rect.width) * (max - min));
65
+ };
66
+ document.addEventListener('mousemove', move);
67
+ document.addEventListener('mouseup', () => document.removeEventListener('mousemove', move), { once: true });
68
+ } })] }), markList.length > 0 && (_jsx("div", { className: "tokis-slider-marks", children: markList.map((m) => (_jsx("span", { className: "tokis-slider-mark-label", children: m.label ?? m.value }, m.value))) }))] }));
69
+ });
70
+ Slider.displayName = 'Slider';
71
+ //# sourceMappingURL=index.js.map