@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,120 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Menu = Menu;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const react_1 = __importStar(require("react"));
39
+ const cn_js_1 = require("../../utils/cn");
40
+ const index_js_1 = require("../portal/index");
41
+ function Menu({ trigger, items, placement = 'bottom-start', className }) {
42
+ const [open, setOpen] = (0, react_1.useState)(false);
43
+ const [pos, setPos] = (0, react_1.useState)({ top: 0, left: 0 });
44
+ const [focusedIndex, setFocusedIndex] = (0, react_1.useState)(-1);
45
+ const triggerRef = (0, react_1.useRef)(null);
46
+ const contentRef = (0, react_1.useRef)(null);
47
+ const menuId = (0, react_1.useId)();
48
+ const updatePosition = (0, react_1.useCallback)(() => {
49
+ if (!triggerRef.current)
50
+ return;
51
+ const rect = triggerRef.current.getBoundingClientRect();
52
+ const isBottom = placement.startsWith('bottom');
53
+ const isStart = placement.endsWith('start');
54
+ setPos({
55
+ top: isBottom ? rect.bottom + window.scrollY + 4 : rect.top + window.scrollY - 4,
56
+ left: isStart ? rect.left + window.scrollX : rect.right + window.scrollX,
57
+ });
58
+ }, [placement]);
59
+ const clickableItems = items.filter((i) => i.type !== 'separator' && i.type !== 'label' && !i.disabled);
60
+ (0, react_1.useEffect)(() => {
61
+ if (!open)
62
+ return;
63
+ const handle = (e) => {
64
+ if (!triggerRef.current?.contains(e.target) && !contentRef.current?.contains(e.target))
65
+ setOpen(false);
66
+ };
67
+ const handleKey = (e) => {
68
+ if (e.key === 'Escape') {
69
+ setOpen(false);
70
+ triggerRef.current?.focus();
71
+ }
72
+ };
73
+ document.addEventListener('mousedown', handle);
74
+ document.addEventListener('keydown', handleKey);
75
+ return () => { document.removeEventListener('mousedown', handle); document.removeEventListener('keydown', handleKey); };
76
+ }, [open]);
77
+ const handleTriggerKeyDown = (e) => {
78
+ if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {
79
+ e.preventDefault();
80
+ updatePosition();
81
+ setOpen(true);
82
+ setFocusedIndex(0);
83
+ }
84
+ };
85
+ const handleMenuKeyDown = (e) => {
86
+ if (e.key === 'ArrowDown') {
87
+ e.preventDefault();
88
+ setFocusedIndex((p) => (p + 1) % clickableItems.length);
89
+ }
90
+ if (e.key === 'ArrowUp') {
91
+ e.preventDefault();
92
+ setFocusedIndex((p) => (p - 1 + clickableItems.length) % clickableItems.length);
93
+ }
94
+ if (e.key === 'Enter' && focusedIndex >= 0) {
95
+ clickableItems[focusedIndex].onClick?.();
96
+ setOpen(false);
97
+ }
98
+ };
99
+ let clickableIdx = -1;
100
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [react_1.default.cloneElement(trigger, {
101
+ ref: triggerRef,
102
+ 'aria-haspopup': 'menu',
103
+ 'aria-expanded': open,
104
+ 'aria-controls': open ? menuId : undefined,
105
+ onClick: (e) => { updatePosition(); setOpen((v) => !v); trigger.props.onClick?.(e); },
106
+ onKeyDown: handleTriggerKeyDown,
107
+ }), open && ((0, jsx_runtime_1.jsx)(index_js_1.Portal, { children: (0, jsx_runtime_1.jsx)("div", { ref: contentRef, id: menuId, role: "menu", tabIndex: -1, className: (0, cn_js_1.cn)('tokis-menu-content', className), style: { position: 'absolute', top: pos.top, left: pos.left, ...(placement.endsWith('end') && { transform: 'translateX(-100%)' }) }, onKeyDown: handleMenuKeyDown, children: items.map((item, i) => {
108
+ if (item.type === 'separator')
109
+ return (0, jsx_runtime_1.jsx)("div", { className: "tokis-menu-separator", role: "separator" }, i);
110
+ if (item.type === 'label')
111
+ return (0, jsx_runtime_1.jsx)("div", { className: "tokis-menu-group-label", children: item.label }, i);
112
+ clickableIdx++;
113
+ const isFocused = clickableIdx === focusedIndex;
114
+ const idx = clickableIdx;
115
+ return ((0, jsx_runtime_1.jsxs)("button", { role: "menuitem", className: (0, cn_js_1.cn)('tokis-menu-item', item.destructive && 'tokis-menu-item--destructive'), "data-focused": isFocused ? 'true' : undefined, "data-disabled": item.disabled ? 'true' : undefined, "aria-disabled": item.disabled, disabled: item.disabled, tabIndex: isFocused ? 0 : -1, onClick: () => { if (!item.disabled) {
116
+ item.onClick?.();
117
+ setOpen(false);
118
+ } }, onMouseEnter: () => setFocusedIndex(idx), children: [item.icon && (0, jsx_runtime_1.jsx)("span", { className: "tokis-menu-item__icon", "aria-hidden": "true", children: item.icon }), (0, jsx_runtime_1.jsx)("span", { className: "tokis-menu-item__label", children: item.label }), item.shortcut && (0, jsx_runtime_1.jsx)("span", { className: "tokis-menu-item__shortcut", "aria-label": `keyboard shortcut: ${item.shortcut}`, children: item.shortcut })] }, i));
119
+ }) }) }))] }));
120
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NavigationRail = NavigationRail;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const cn_js_1 = require("../../utils/cn");
6
+ function NavigationRail({ items, value, onChange, header, footer, className }) {
7
+ return ((0, jsx_runtime_1.jsxs)("nav", { className: (0, cn_js_1.cn)('tokis-nav-rail', className), "aria-label": "Navigation rail", children: [header && (0, jsx_runtime_1.jsx)("div", { className: "tokis-nav-rail__header", children: header }), (0, jsx_runtime_1.jsx)("div", { className: "tokis-nav-rail__items", children: items.map((item) => {
8
+ const isActive = item.value === value;
9
+ return ((0, jsx_runtime_1.jsxs)("button", { className: (0, cn_js_1.cn)('tokis-nav-rail__item', isActive && 'tokis-nav-rail__item--active'), onClick: () => onChange(item.value), "aria-current": isActive ? 'page' : undefined, "aria-label": item.label, children: [(0, jsx_runtime_1.jsxs)("span", { className: "tokis-nav-rail__icon", children: [item.badge !== undefined && ((0, jsx_runtime_1.jsx)("span", { className: "tokis-nav-rail__badge", "aria-label": `${item.badge} notifications`, children: item.badge })), item.icon] }), (0, jsx_runtime_1.jsx)("span", { className: "tokis-nav-rail__label", children: item.label })] }, item.value));
10
+ }) }), footer && (0, jsx_runtime_1.jsx)("div", { className: "tokis-nav-rail__footer", children: footer })] }));
11
+ }
12
+ NavigationRail.displayName = 'NavigationRail';
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Pagination = Pagination;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const cn_js_1 = require("../../utils/cn");
7
+ function range(start, end) {
8
+ const length = end - start + 1;
9
+ return Array.from({ length }, (_, i) => start + i);
10
+ }
11
+ function usePaginationItems(page, totalPages, siblingCount) {
12
+ return (0, react_1.useMemo)(() => {
13
+ const totalPageNumbers = siblingCount * 2 + 5; // siblings + first + last + current + 2 ellipsis
14
+ if (totalPages <= totalPageNumbers) {
15
+ return range(1, totalPages);
16
+ }
17
+ const leftSiblingIndex = Math.max(page - siblingCount, 1);
18
+ const rightSiblingIndex = Math.min(page + siblingCount, totalPages);
19
+ const showLeftEllipsis = leftSiblingIndex > 2;
20
+ const showRightEllipsis = rightSiblingIndex < totalPages - 1;
21
+ if (!showLeftEllipsis && showRightEllipsis) {
22
+ const leftRange = range(1, 3 + siblingCount * 2);
23
+ return [...leftRange, 'ellipsis-end', totalPages];
24
+ }
25
+ if (showLeftEllipsis && !showRightEllipsis) {
26
+ const rightRange = range(totalPages - (2 + siblingCount * 2), totalPages);
27
+ return [1, 'ellipsis-start', ...rightRange];
28
+ }
29
+ const middleRange = range(leftSiblingIndex, rightSiblingIndex);
30
+ return [1, 'ellipsis-start', ...middleRange, 'ellipsis-end', totalPages];
31
+ }, [page, totalPages, siblingCount]);
32
+ }
33
+ function Pagination({ page, totalPages, onChange, siblingCount = 1, className, }) {
34
+ const items = usePaginationItems(page, totalPages, siblingCount);
35
+ const handlePrev = () => { if (page > 1)
36
+ onChange(page - 1); };
37
+ const handleNext = () => { if (page < totalPages)
38
+ onChange(page + 1); };
39
+ return ((0, jsx_runtime_1.jsxs)("nav", { className: (0, cn_js_1.cn)('tokis-pagination', className), "aria-label": "Pagination navigation", role: "navigation", children: [(0, jsx_runtime_1.jsx)("button", { className: (0, cn_js_1.cn)('tokis-pagination__item', 'tokis-pagination__prev', page === 1 && 'tokis-pagination__item--disabled'), onClick: handlePrev, disabled: page === 1, "aria-label": "Go to previous page", "aria-disabled": page === 1, children: (0, jsx_runtime_1.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M10 12L6 8l4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) }), items.map((item, index) => {
40
+ if (item === 'ellipsis-start' || item === 'ellipsis-end') {
41
+ return ((0, jsx_runtime_1.jsx)("span", { className: "tokis-pagination__ellipsis", "aria-hidden": "true", children: "\u2026" }, item));
42
+ }
43
+ const isActive = item === page;
44
+ return ((0, jsx_runtime_1.jsx)("button", { className: (0, cn_js_1.cn)('tokis-pagination__item', isActive && 'tokis-pagination__item--active'), onClick: () => onChange(item), "aria-label": `Go to page ${item}`, "aria-current": isActive ? 'page' : undefined, disabled: isActive, children: item }, `${item}-${index}`));
45
+ }), (0, jsx_runtime_1.jsx)("button", { className: (0, cn_js_1.cn)('tokis-pagination__item', 'tokis-pagination__next', page === totalPages && 'tokis-pagination__item--disabled'), onClick: handleNext, disabled: page === totalPages, "aria-label": "Go to next page", "aria-disabled": page === totalPages, children: (0, jsx_runtime_1.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M6 4l4 4-4 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }));
46
+ }
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Popover = Popover;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const react_1 = __importStar(require("react"));
39
+ const cn_js_1 = require("../../utils/cn");
40
+ const index_js_1 = require("../portal/index");
41
+ function Popover({ trigger, content, title, placement = 'bottom-start', open, defaultOpen = false, onOpenChange, closeOnClickOutside = true, closeOnEsc = true, className }) {
42
+ const [internalOpen, setInternalOpen] = (0, react_1.useState)(defaultOpen);
43
+ const isOpen = open ?? internalOpen;
44
+ const [pos, setPos] = (0, react_1.useState)({ top: 0, left: 0 });
45
+ const triggerRef = (0, react_1.useRef)(null);
46
+ const contentRef = (0, react_1.useRef)(null);
47
+ const popoverId = (0, react_1.useId)();
48
+ const setOpen = (0, react_1.useCallback)((val) => {
49
+ if (open === undefined)
50
+ setInternalOpen(val);
51
+ onOpenChange?.(val);
52
+ }, [open, onOpenChange]);
53
+ const updatePosition = (0, react_1.useCallback)(() => {
54
+ if (!triggerRef.current)
55
+ return;
56
+ const rect = triggerRef.current.getBoundingClientRect();
57
+ const gap = 8;
58
+ let top = 0;
59
+ let left = 0;
60
+ const base = placement.split('-')[0];
61
+ const align = placement.split('-')[1];
62
+ if (base === 'bottom') {
63
+ top = rect.bottom + window.scrollY + gap;
64
+ }
65
+ if (base === 'top') {
66
+ top = rect.top + window.scrollY - gap;
67
+ }
68
+ if (base === 'right') {
69
+ left = rect.right + window.scrollX + gap;
70
+ top = rect.top + window.scrollY;
71
+ }
72
+ if (base === 'left') {
73
+ left = rect.left + window.scrollX - gap;
74
+ top = rect.top + window.scrollY;
75
+ }
76
+ if (!align || align === 'start') {
77
+ left = rect.left + window.scrollX;
78
+ }
79
+ if (align === 'end') {
80
+ left = rect.right + window.scrollX;
81
+ }
82
+ if (align === 'center' || (base === 'top' || base === 'bottom') && !align) {
83
+ left = rect.left + window.scrollX + rect.width / 2;
84
+ }
85
+ setPos({ top, left });
86
+ }, [placement]);
87
+ (0, react_1.useEffect)(() => {
88
+ if (!isOpen || !closeOnClickOutside)
89
+ return;
90
+ const handle = (e) => {
91
+ if (!triggerRef.current?.contains(e.target) && !contentRef.current?.contains(e.target)) {
92
+ setOpen(false);
93
+ }
94
+ };
95
+ document.addEventListener('mousedown', handle);
96
+ return () => document.removeEventListener('mousedown', handle);
97
+ }, [isOpen, closeOnClickOutside, setOpen]);
98
+ (0, react_1.useEffect)(() => {
99
+ if (!isOpen || !closeOnEsc)
100
+ return;
101
+ const h = (e) => { if (e.key === 'Escape')
102
+ setOpen(false); };
103
+ document.addEventListener('keydown', h);
104
+ return () => document.removeEventListener('keydown', h);
105
+ }, [isOpen, closeOnEsc, setOpen]);
106
+ const handleToggle = () => { updatePosition(); setOpen(!isOpen); };
107
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [react_1.default.cloneElement(trigger, {
108
+ ref: triggerRef,
109
+ 'aria-expanded': isOpen,
110
+ 'aria-haspopup': 'dialog',
111
+ 'aria-controls': isOpen ? popoverId : undefined,
112
+ onClick: (e) => { handleToggle(); trigger.props.onClick?.(e); },
113
+ }), isOpen && ((0, jsx_runtime_1.jsx)(index_js_1.Portal, { children: (0, jsx_runtime_1.jsxs)("div", { ref: contentRef, id: popoverId, role: "dialog", "aria-modal": "false", tabIndex: -1, className: (0, cn_js_1.cn)('tokis-popover-content', className), style: { position: 'absolute', top: pos.top, left: pos.left }, children: [title && (0, jsx_runtime_1.jsx)("p", { className: "tokis-popover-title", children: title }), (0, jsx_runtime_1.jsx)("button", { className: "tokis-popover-close", onClick: () => setOpen(false), "aria-label": "Close", children: (0, jsx_runtime_1.jsx)("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M1 1l10 10M11 1L1 11", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) }), content] }) }))] }));
114
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Portal = Portal;
4
+ const react_dom_1 = require("react-dom");
5
+ function Portal({ children, container }) {
6
+ if (typeof document === 'undefined')
7
+ return null;
8
+ const target = container ?? document.body;
9
+ return (0, react_dom_1.createPortal)(children, target);
10
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Spinner = exports.Skeleton = exports.Progress = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const cn_js_1 = require("../../utils/cn");
7
+ exports.Progress = (0, react_1.forwardRef)(({ value, max = 100, label, showValue = false, variant = 'default', size = 'md', className, ...props }, ref) => {
8
+ const pct = value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : undefined;
9
+ const isIndeterminate = pct === undefined;
10
+ return ((0, jsx_runtime_1.jsxs)("div", { ref: ref, className: (0, cn_js_1.cn)('tokis-progress-root', className), ...props, children: [(label || showValue) && ((0, jsx_runtime_1.jsxs)("div", { className: "tokis-progress-label", children: [label && (0, jsx_runtime_1.jsx)("span", { className: "tokis-progress-label-text", children: label }), showValue && !isIndeterminate && (0, jsx_runtime_1.jsxs)("span", { className: "tokis-progress-label-value", children: [Math.round(pct), "%"] })] })), (0, jsx_runtime_1.jsx)("div", { role: "progressbar", "aria-valuenow": isIndeterminate ? undefined : pct, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": label, className: (0, cn_js_1.cn)('tokis-progress-track', size !== 'md' && `tokis-progress-track--${size}`), children: (0, jsx_runtime_1.jsx)("div", { className: (0, cn_js_1.cn)('tokis-progress-fill', variant !== 'default' && `tokis-progress-fill--${variant}`, isIndeterminate && 'tokis-progress-fill--indeterminate'), style: !isIndeterminate ? { width: `${pct}%` } : undefined }) })] }));
11
+ });
12
+ exports.Progress.displayName = 'Progress';
13
+ exports.Skeleton = (0, react_1.forwardRef)(({ variant = 'rectangular', width, height, lines, className, style, ...props }, ref) => {
14
+ if (lines && lines > 1) {
15
+ return ((0, jsx_runtime_1.jsx)("div", { className: className, children: Array.from({ length: lines }).map((_, i) => ((0, jsx_runtime_1.jsx)("span", { className: (0, cn_js_1.cn)('tokis-skeleton tokis-skeleton--text'), style: { width: i === lines - 1 ? '70%' : '100%', marginBottom: i < lines - 1 ? '8px' : 0 } }, i))) }));
16
+ }
17
+ return ((0, jsx_runtime_1.jsx)("span", { ref: ref, className: (0, cn_js_1.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 }));
18
+ });
19
+ exports.Skeleton.displayName = 'Skeleton';
20
+ exports.Spinner = (0, react_1.forwardRef)(({ size = 'md', variant = 'default', label = 'Loading…', className, ...props }, ref) => ((0, jsx_runtime_1.jsx)("span", { ref: ref, role: "status", "aria-label": label, className: (0, cn_js_1.cn)('tokis-spinner', size !== 'md' && `tokis-spinner--${size}`, variant === 'white' && 'tokis-spinner--white', className), ...props })));
21
+ exports.Spinner.displayName = 'Spinner';
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Radio = Radio;
37
+ exports.RadioGroup = RadioGroup;
38
+ const jsx_runtime_1 = require("react/jsx-runtime");
39
+ const react_1 = __importStar(require("react"));
40
+ const cn_js_1 = require("../../utils/cn");
41
+ function Radio({ value, label, description, disabled = false, checked = false, name, onChange, className }) {
42
+ const autoId = (0, react_1.useId)();
43
+ const radioId = `radio-${autoId}`;
44
+ const descId = description ? `${radioId}-desc` : undefined;
45
+ return ((0, jsx_runtime_1.jsxs)("label", { className: (0, cn_js_1.cn)('tokis-radio-root', className), "data-disabled": disabled || undefined, htmlFor: radioId, children: [(0, jsx_runtime_1.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 }), (0, jsx_runtime_1.jsx)("span", { "aria-hidden": "true", className: "tokis-radio-control", "data-checked": checked ? 'true' : undefined }), (label || description) && ((0, jsx_runtime_1.jsxs)("div", { children: [label && (0, jsx_runtime_1.jsx)("span", { className: "tokis-radio-label", children: label }), description && (0, jsx_runtime_1.jsx)("p", { id: descId, className: "tokis-radio-description", children: description })] }))] }));
46
+ }
47
+ function RadioGroup({ value, onChange, name, orientation = 'vertical', disabled = false, children, className, label }) {
48
+ const groupId = (0, react_1.useId)();
49
+ return ((0, jsx_runtime_1.jsxs)("div", { role: "radiogroup", "aria-labelledby": label ? groupId : undefined, "aria-disabled": disabled, className: (0, cn_js_1.cn)('tokis-radio-group', orientation === 'horizontal' && 'tokis-radio-group--horizontal', className), children: [label && (0, jsx_runtime_1.jsx)("span", { id: groupId, className: "tokis-label", style: { marginBottom: 'var(--tokis-spacing-1)' }, children: label }), react_1.default.Children.map(children, (child) => {
50
+ if (!react_1.default.isValidElement(child))
51
+ return child;
52
+ const item = child;
53
+ return react_1.default.cloneElement(item, {
54
+ name: name ?? groupId,
55
+ checked: value !== undefined ? item.props.value === value : item.props.checked,
56
+ disabled: disabled || item.props.disabled,
57
+ onChange: (v) => onChange?.(v),
58
+ });
59
+ })] }));
60
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Result = Result;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const cn_js_1 = require("../../utils/cn");
6
+ const StatusIcon = ({ status }) => {
7
+ if (status === 'success') {
8
+ return ((0, jsx_runtime_1.jsxs)("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "24", cy: "24", r: "22", stroke: "currentColor", strokeWidth: "2" }), (0, jsx_runtime_1.jsx)("path", { d: "M14 24l7 7 13-14", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" })] }));
9
+ }
10
+ if (status === 'error') {
11
+ return ((0, jsx_runtime_1.jsxs)("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "24", cy: "24", r: "22", stroke: "currentColor", strokeWidth: "2" }), (0, jsx_runtime_1.jsx)("path", { d: "M16 16l16 16M32 16L16 32", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })] }));
12
+ }
13
+ if (status === 'warning') {
14
+ return ((0, jsx_runtime_1.jsxs)("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)("path", { d: "M24 6L42 40H6L24 6z", stroke: "currentColor", strokeWidth: "2", strokeLinejoin: "round" }), (0, jsx_runtime_1.jsx)("path", { d: "M24 20v10M24 34v2", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })] }));
15
+ }
16
+ if (status === 'info') {
17
+ return ((0, jsx_runtime_1.jsxs)("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "24", cy: "24", r: "22", stroke: "currentColor", strokeWidth: "2" }), (0, jsx_runtime_1.jsx)("path", { d: "M24 22v12M24 16v2", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })] }));
18
+ }
19
+ // loading
20
+ return ((0, jsx_runtime_1.jsx)("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", className: "tokis-result__spin", children: (0, jsx_runtime_1.jsx)("circle", { cx: "24", cy: "24", r: "20", stroke: "currentColor", strokeWidth: "3", strokeDasharray: "31.4 94.2", strokeLinecap: "round" }) }));
21
+ };
22
+ function Result({ status, title, description, extra, className }) {
23
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-result', `tokis-result--${status}`, className), children: [(0, jsx_runtime_1.jsx)("div", { className: (0, cn_js_1.cn)('tokis-result__icon', `tokis-result__icon--${status}`), children: (0, jsx_runtime_1.jsx)(StatusIcon, { status: status }) }), (0, jsx_runtime_1.jsx)("h3", { className: "tokis-result__title", children: title }), description && (0, jsx_runtime_1.jsx)("p", { className: "tokis-result__description", children: description }), extra && (0, jsx_runtime_1.jsx)("div", { className: "tokis-result__extra", children: extra })] }));
24
+ }
25
+ Result.displayName = 'Result';
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SearchField = SearchField;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const cn_js_1 = require("../../utils/cn");
7
+ function SearchField({ value, onChange, onSearch, placeholder = 'Search…', loading = false, debounce = 300, label, className, }) {
8
+ const debounceRef = (0, react_1.useRef)();
9
+ const handleChange = (0, react_1.useCallback)((e) => {
10
+ const val = e.target.value;
11
+ onChange(val);
12
+ if (onSearch) {
13
+ clearTimeout(debounceRef.current);
14
+ debounceRef.current = setTimeout(() => onSearch(val), debounce);
15
+ }
16
+ }, [onChange, onSearch, debounce]);
17
+ const handleKeyDown = (0, react_1.useCallback)((e) => {
18
+ if (e.key === 'Enter' && onSearch) {
19
+ clearTimeout(debounceRef.current);
20
+ onSearch(value);
21
+ }
22
+ if (e.key === 'Escape') {
23
+ onChange('');
24
+ onSearch?.('');
25
+ }
26
+ }, [value, onChange, onSearch]);
27
+ (0, react_1.useEffect)(() => () => clearTimeout(debounceRef.current), []);
28
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-search-field', className), children: [label && (0, jsx_runtime_1.jsx)("label", { className: "tokis-search-field__label", children: label }), (0, jsx_runtime_1.jsxs)("div", { className: "tokis-search-field__wrap", children: [(0, jsx_runtime_1.jsx)("span", { className: "tokis-search-field__icon", "aria-hidden": "true", children: (0, jsx_runtime_1.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "6", cy: "6", r: "4", stroke: "currentColor", strokeWidth: "1.4" }), (0, jsx_runtime_1.jsx)("path", { d: "M9.5 9.5L12 12", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" })] }) }), (0, jsx_runtime_1.jsx)("input", { type: "search", className: "tokis-search-field__input", value: value, onChange: handleChange, onKeyDown: handleKeyDown, placeholder: placeholder, "aria-label": label ?? placeholder }), loading && ((0, jsx_runtime_1.jsx)("span", { className: "tokis-search-field__spinner", "aria-label": "Searching\u2026" })), !loading && value && ((0, jsx_runtime_1.jsx)("button", { type: "button", className: "tokis-search-field__clear", onClick: () => { onChange(''); onSearch?.(''); }, "aria-label": "Clear search", children: (0, jsx_runtime_1.jsx)("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", children: (0, jsx_runtime_1.jsx)("path", { d: "M2 2l8 8M10 2l-8 8", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" }) }) }))] })] }));
29
+ }
30
+ SearchField.displayName = 'SearchField';
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Select = Select;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const cn_js_1 = require("../../utils/cn");
7
+ const index_js_1 = require("../portal/index");
8
+ function Select({ value, defaultValue, onChange, options, placeholder = 'Select an option', disabled = false, label, helperText, error = false, required, id, className, size = 'md', }) {
9
+ const autoId = (0, react_1.useId)();
10
+ const selectId = id ?? `select-${autoId}`;
11
+ const [open, setOpen] = (0, react_1.useState)(false);
12
+ const [internalValue, setInternalValue] = (0, react_1.useState)(defaultValue ?? '');
13
+ const [focusedIndex, setFocusedIndex] = (0, react_1.useState)(-1);
14
+ const triggerRef = (0, react_1.useRef)(null);
15
+ const contentRef = (0, react_1.useRef)(null);
16
+ const [position, setPosition] = (0, react_1.useState)({ top: 0, left: 0, width: 0 });
17
+ const currentValue = value !== undefined ? value : internalValue;
18
+ const selectedOption = options.find((o) => o.value === currentValue);
19
+ const enabledOptions = options.filter((o) => !o.disabled);
20
+ const updatePosition = (0, react_1.useCallback)(() => {
21
+ if (!triggerRef.current)
22
+ return;
23
+ const rect = triggerRef.current.getBoundingClientRect();
24
+ setPosition({ top: rect.bottom + window.scrollY + 4, left: rect.left + window.scrollX, width: rect.width });
25
+ }, []);
26
+ const handleSelect = (val) => {
27
+ if (value === undefined)
28
+ setInternalValue(val);
29
+ onChange?.(val);
30
+ setOpen(false);
31
+ triggerRef.current?.focus();
32
+ };
33
+ const handleKeyDown = (e) => {
34
+ if (disabled)
35
+ return;
36
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
37
+ e.preventDefault();
38
+ if (!open) {
39
+ updatePosition();
40
+ setOpen(true);
41
+ setFocusedIndex(0);
42
+ return;
43
+ }
44
+ setFocusedIndex((prev) => {
45
+ const next = e.key === 'ArrowDown' ? (prev + 1) % enabledOptions.length : (prev - 1 + enabledOptions.length) % enabledOptions.length;
46
+ return next;
47
+ });
48
+ }
49
+ if (e.key === 'Enter' || e.key === ' ') {
50
+ e.preventDefault();
51
+ if (!open) {
52
+ updatePosition();
53
+ setOpen(true);
54
+ return;
55
+ }
56
+ if (focusedIndex >= 0)
57
+ handleSelect(enabledOptions[focusedIndex].value);
58
+ }
59
+ if (e.key === 'Escape') {
60
+ setOpen(false);
61
+ triggerRef.current?.focus();
62
+ }
63
+ };
64
+ (0, react_1.useEffect)(() => {
65
+ if (!open)
66
+ return;
67
+ const handle = (e) => {
68
+ if (!triggerRef.current?.contains(e.target) && !contentRef.current?.contains(e.target)) {
69
+ setOpen(false);
70
+ }
71
+ };
72
+ document.addEventListener('mousedown', handle);
73
+ return () => document.removeEventListener('mousedown', handle);
74
+ }, [open]);
75
+ const helperId = helperText ? `${selectId}-helper` : undefined;
76
+ const groups = [...new Set(options.map((o) => o.group))];
77
+ const hasGroups = groups.some(Boolean);
78
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-field', className), children: [label && ((0, jsx_runtime_1.jsx)("label", { htmlFor: selectId, className: (0, cn_js_1.cn)('tokis-label', required && 'tokis-label--required'), children: label })), (0, jsx_runtime_1.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: (0, cn_js_1.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) {
79
+ updatePosition();
80
+ setOpen((v) => !v);
81
+ } }, children: [(0, jsx_runtime_1.jsx)("span", { className: (0, cn_js_1.cn)(!selectedOption && 'tokis-select-trigger__placeholder'), children: selectedOption ? selectedOption.label : placeholder }), (0, jsx_runtime_1.jsx)("svg", { className: "tokis-select-trigger__icon", width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M4 6l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })] }), open && ((0, jsx_runtime_1.jsx)(index_js_1.Portal, { children: (0, jsx_runtime_1.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
82
+ ? groups.map((group) => ((0, jsx_runtime_1.jsxs)("div", { children: [group && (0, jsx_runtime_1.jsx)("div", { className: "tokis-select-group-label", children: group }), options.filter((o) => o.group === group).map((opt) => ((0, jsx_runtime_1.jsx)(SelectItem, { opt: opt, currentValue: currentValue, onSelect: handleSelect }, opt.value)))] }, group ?? '__default__')))
83
+ : options.map((opt) => ((0, jsx_runtime_1.jsx)(SelectItem, { opt: opt, currentValue: currentValue, onSelect: handleSelect }, opt.value))) }) })), helperText && ((0, jsx_runtime_1.jsx)("span", { id: helperId, className: (0, cn_js_1.cn)('tokis-helper-text', error && 'tokis-helper-text--error'), children: helperText }))] }));
84
+ }
85
+ function SelectItem({ opt, currentValue, onSelect }) {
86
+ return ((0, jsx_runtime_1.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)
87
+ onSelect(opt.value); }, children: [opt.value === currentValue && ((0, jsx_runtime_1.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M2 7l3.5 3.5L12 3.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })), opt.label] }));
88
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Skeleton = void 0;
4
+ // Re-export Skeleton from progress
5
+ var index_js_1 = require("../progress/index");
6
+ Object.defineProperty(exports, "Skeleton", { enumerable: true, get: function () { return index_js_1.Skeleton; } });
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Slider = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const cn_js_1 = require("../../utils/cn");
7
+ exports.Slider = (0, react_1.forwardRef)(({ value, defaultValue = 0, min = 0, max = 100, step = 1, onChange, disabled = false, label, showValue = false, marks, className, ...props }, ref) => {
8
+ const [internal, setInternal] = (0, react_1.useState)(defaultValue);
9
+ const current = value ?? internal;
10
+ const trackRef = (0, react_1.useRef)(null);
11
+ const clamp = (v) => Math.min(max, Math.max(min, Math.round(v / step) * step));
12
+ const pct = ((current - min) / (max - min)) * 100;
13
+ const handleChange = (0, react_1.useCallback)((newVal) => {
14
+ const clamped = clamp(newVal);
15
+ if (value === undefined)
16
+ setInternal(clamped);
17
+ onChange?.(clamped);
18
+ }, [min, max, step, value, onChange]);
19
+ const handleKeyDown = (e) => {
20
+ if (disabled)
21
+ return;
22
+ if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {
23
+ e.preventDefault();
24
+ handleChange(current + step);
25
+ }
26
+ if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {
27
+ e.preventDefault();
28
+ handleChange(current - step);
29
+ }
30
+ if (e.key === 'Home') {
31
+ e.preventDefault();
32
+ handleChange(min);
33
+ }
34
+ if (e.key === 'End') {
35
+ e.preventDefault();
36
+ handleChange(max);
37
+ }
38
+ if (e.key === 'PageUp') {
39
+ e.preventDefault();
40
+ handleChange(current + step * 10);
41
+ }
42
+ if (e.key === 'PageDown') {
43
+ e.preventDefault();
44
+ handleChange(current - step * 10);
45
+ }
46
+ };
47
+ const handleTrackClick = (e) => {
48
+ if (disabled || !trackRef.current)
49
+ return;
50
+ const rect = trackRef.current.getBoundingClientRect();
51
+ const ratio = (e.clientX - rect.left) / rect.width;
52
+ handleChange(min + ratio * (max - min));
53
+ };
54
+ const markList = Array.isArray(marks)
55
+ ? marks
56
+ : marks
57
+ ? [{ value: min }, { value: max }]
58
+ : [];
59
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-slider-root', className), "data-disabled": disabled || undefined, ...props, ref: ref, children: [label && ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', justifyContent: 'space-between', marginBottom: '8px' }, children: [(0, jsx_runtime_1.jsx)("span", { className: "tokis-label", children: label }), showValue && (0, jsx_runtime_1.jsx)("span", { className: "tokis-text--secondary", style: { fontSize: 'var(--tokis-font-size-sm)' }, children: current })] })), (0, jsx_runtime_1.jsxs)("div", { className: "tokis-slider-track-wrapper", children: [(0, jsx_runtime_1.jsx)("div", { ref: trackRef, className: "tokis-slider-track", onClick: handleTrackClick, children: (0, jsx_runtime_1.jsx)("div", { className: "tokis-slider-range", style: { width: `${pct}%` } }) }), (0, jsx_runtime_1.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) => {
60
+ if (disabled)
61
+ return;
62
+ e.preventDefault();
63
+ const move = (me) => {
64
+ if (!trackRef.current)
65
+ return;
66
+ const rect = trackRef.current.getBoundingClientRect();
67
+ handleChange(min + ((me.clientX - rect.left) / rect.width) * (max - min));
68
+ };
69
+ document.addEventListener('mousemove', move);
70
+ document.addEventListener('mouseup', () => document.removeEventListener('mousemove', move), { once: true });
71
+ } })] }), markList.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "tokis-slider-marks", children: markList.map((m) => ((0, jsx_runtime_1.jsx)("span", { className: "tokis-slider-mark-label", children: m.label ?? m.value }, m.value))) }))] }));
72
+ });
73
+ exports.Slider.displayName = 'Slider';