@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,81 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useState, useRef, useEffect, useCallback, useId } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ import { Portal } from '../portal/index.js';
5
+ export function Tooltip({ content, children, placement = 'top', delay = 300, disabled = false }) {
6
+ const [state, setState] = useState({ visible: false, top: 0, left: 0, placement });
7
+ const triggerRef = useRef(null);
8
+ const timerRef = useRef();
9
+ const tooltipId = useId();
10
+ // When placement prop changes and tooltip is visible, recompute
11
+ useEffect(() => {
12
+ if (state.visible && triggerRef.current) {
13
+ const rect = triggerRef.current.getBoundingClientRect();
14
+ const { top, left } = computePosition(rect, placement);
15
+ setState((prev) => ({ ...prev, top, left, placement }));
16
+ }
17
+ // eslint-disable-next-line react-hooks/exhaustive-deps
18
+ }, [placement]);
19
+ const show = useCallback(() => {
20
+ timerRef.current = setTimeout(() => {
21
+ if (!triggerRef.current)
22
+ return;
23
+ const rect = triggerRef.current.getBoundingClientRect();
24
+ const { top, left } = computePosition(rect, placement);
25
+ // Single atomic state update — position + visible at once
26
+ setState({ visible: true, top, left, placement });
27
+ }, delay);
28
+ }, [delay, placement]);
29
+ const hide = useCallback(() => {
30
+ clearTimeout(timerRef.current);
31
+ setState((prev) => ({ ...prev, visible: false }));
32
+ }, []);
33
+ useEffect(() => () => clearTimeout(timerRef.current), []);
34
+ const transformMap = {
35
+ top: 'translateX(-50%) translateY(-100%)',
36
+ bottom: 'translateX(-50%)',
37
+ left: 'translateX(-100%) translateY(-50%)',
38
+ right: 'translateY(-50%)',
39
+ };
40
+ return (_jsxs(_Fragment, { children: [React.cloneElement(children, {
41
+ ref: triggerRef,
42
+ 'aria-describedby': state.visible ? tooltipId : undefined,
43
+ onMouseEnter: (...args) => {
44
+ if (!disabled)
45
+ show();
46
+ children.props.onMouseEnter?.(...args);
47
+ },
48
+ onMouseLeave: (...args) => {
49
+ hide();
50
+ children.props.onMouseLeave?.(...args);
51
+ },
52
+ onFocus: (...args) => {
53
+ if (!disabled)
54
+ show();
55
+ children.props.onFocus?.(...args);
56
+ },
57
+ onBlur: (...args) => {
58
+ hide();
59
+ children.props.onBlur?.(...args);
60
+ },
61
+ }), state.visible && !disabled && (_jsx(Portal, { children: _jsx("div", { id: tooltipId, role: "tooltip", className: cn('tokis-tooltip-content', `tokis-tooltip-content--${state.placement}`), style: {
62
+ position: 'fixed',
63
+ top: state.top,
64
+ left: state.left,
65
+ transform: transformMap[state.placement],
66
+ }, children: content }) }))] }));
67
+ }
68
+ function computePosition(rect, placement) {
69
+ const gap = 8;
70
+ switch (placement) {
71
+ case 'top':
72
+ return { top: rect.top - gap, left: rect.left + rect.width / 2 };
73
+ case 'bottom':
74
+ return { top: rect.bottom + gap, left: rect.left + rect.width / 2 };
75
+ case 'left':
76
+ return { top: rect.top + rect.height / 2, left: rect.left - gap };
77
+ case 'right':
78
+ return { top: rect.top + rect.height / 2, left: rect.right + gap };
79
+ }
80
+ }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/tooltip/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ export interface TreeNode {
3
+ id: string;
4
+ label: string;
5
+ children?: TreeNode[];
6
+ icon?: React.ReactNode;
7
+ disabled?: boolean;
8
+ }
9
+ export interface TreeViewProps {
10
+ data: TreeNode[];
11
+ selected?: string[];
12
+ onSelect?: (id: string) => void;
13
+ expanded?: string[];
14
+ onExpand?: (id: string) => void;
15
+ multiSelect?: boolean;
16
+ className?: string;
17
+ }
18
+ export declare function TreeView({ data, selected, onSelect, expanded, onExpand, multiSelect, className, }: TreeViewProps): JSX.Element;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/treeview/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0ID,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,QAAa,EACb,QAAQ,EACR,QAAa,EACb,QAAQ,EACR,WAAmB,EACnB,SAAS,GACV,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAkD7B"}
@@ -0,0 +1,87 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useRef } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ function flattenVisible(nodes, expanded) {
5
+ const result = [];
6
+ function walk(items) {
7
+ for (const node of items) {
8
+ result.push(node);
9
+ if (node.children && expanded.includes(node.id)) {
10
+ walk(node.children);
11
+ }
12
+ }
13
+ }
14
+ walk(nodes);
15
+ return result;
16
+ }
17
+ function TreeItem({ node, level, selected, expanded, onSelect, onExpand, multiSelect, allNodes, onKeyNav, }) {
18
+ const hasChildren = Boolean(node.children && node.children.length > 0);
19
+ const isExpanded = expanded.includes(node.id);
20
+ const isSelected = selected.includes(node.id);
21
+ const handleKeyDown = (e) => {
22
+ switch (e.key) {
23
+ case 'ArrowRight':
24
+ e.preventDefault();
25
+ if (hasChildren && !isExpanded)
26
+ onExpand(node.id);
27
+ else if (hasChildren && isExpanded)
28
+ onKeyNav(node.id, 'down');
29
+ break;
30
+ case 'ArrowLeft':
31
+ e.preventDefault();
32
+ if (hasChildren && isExpanded)
33
+ onExpand(node.id);
34
+ else
35
+ onKeyNav(node.id, 'up');
36
+ break;
37
+ case 'ArrowDown':
38
+ e.preventDefault();
39
+ onKeyNav(node.id, 'down');
40
+ break;
41
+ case 'ArrowUp':
42
+ e.preventDefault();
43
+ onKeyNav(node.id, 'up');
44
+ break;
45
+ case 'Enter':
46
+ case ' ':
47
+ e.preventDefault();
48
+ if (!node.disabled)
49
+ onSelect(node.id);
50
+ break;
51
+ }
52
+ };
53
+ return (_jsxs("li", { role: "none", children: [_jsxs("div", { role: "treeitem", "aria-expanded": hasChildren ? isExpanded : undefined, "aria-selected": isSelected, "aria-disabled": node.disabled, "aria-level": level, tabIndex: node.disabled ? -1 : 0, className: cn('tokis-treeview__item', isSelected && 'tokis-treeview__item--selected', node.disabled && 'tokis-treeview__item--disabled'), style: { paddingLeft: `calc(${(level - 1) * 20}px + var(--tokis-spacing-2))` }, onClick: () => {
54
+ if (node.disabled)
55
+ return;
56
+ if (hasChildren)
57
+ onExpand(node.id);
58
+ onSelect(node.id);
59
+ }, onKeyDown: handleKeyDown, "data-id": node.id, children: [hasChildren ? (_jsx("span", { className: cn('tokis-treeview__chevron', isExpanded && 'tokis-treeview__chevron--open'), "aria-hidden": "true", children: _jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", children: _jsx("path", { d: "M4 3l4 3-4 3", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })) : (_jsx("span", { className: "tokis-treeview__leaf-spacer", "aria-hidden": "true" })), node.icon && (_jsx("span", { className: "tokis-treeview__icon", "aria-hidden": "true", children: node.icon })), _jsx("span", { className: "tokis-treeview__label", children: node.label })] }), hasChildren && isExpanded && (_jsx("ul", { role: "group", className: "tokis-treeview__group", "aria-label": node.label, children: node.children.map((child) => (_jsx(TreeItem, { node: child, level: level + 1, selected: selected, expanded: expanded, onSelect: onSelect, onExpand: onExpand, multiSelect: multiSelect, allNodes: allNodes, onKeyNav: onKeyNav }, child.id))) }))] }));
60
+ }
61
+ export function TreeView({ data, selected = [], onSelect, expanded = [], onExpand, multiSelect = false, className, }) {
62
+ const treeRef = useRef(null);
63
+ const handleSelect = useCallback((id) => {
64
+ onSelect?.(id);
65
+ }, [onSelect]);
66
+ const handleExpand = useCallback((id) => {
67
+ onExpand?.(id);
68
+ }, [onExpand]);
69
+ const handleKeyNav = useCallback((currentId, direction) => {
70
+ const visible = flattenVisible(data, expanded);
71
+ const currentIndex = visible.findIndex((n) => n.id === currentId);
72
+ if (currentIndex === -1)
73
+ return;
74
+ let targetIndex;
75
+ if (direction === 'down')
76
+ targetIndex = Math.min(currentIndex + 1, visible.length - 1);
77
+ if (direction === 'up')
78
+ targetIndex = Math.max(currentIndex - 1, 0);
79
+ if (targetIndex !== undefined && targetIndex !== currentIndex) {
80
+ const targetId = visible[targetIndex].id;
81
+ const el = treeRef.current?.querySelector(`[data-id="${targetId}"]`);
82
+ el?.focus();
83
+ }
84
+ }, [data, expanded]);
85
+ return (_jsx("ul", { ref: treeRef, role: "tree", "aria-multiselectable": multiSelect, className: cn('tokis-treeview', className), children: data.map((node) => (_jsx(TreeItem, { node: node, level: 1, selected: selected, expanded: expanded, onSelect: handleSelect, onExpand: handleExpand, multiSelect: multiSelect, allNodes: data, onKeyNav: handleKeyNav }, node.id))) }));
86
+ }
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/treeview/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface TypographyProps extends React.HTMLAttributes<HTMLElement> {
3
+ as?: React.ElementType;
4
+ variant?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'body1' | 'body2' | 'caption' | 'label' | 'code' | 'overline';
5
+ color?: 'primary' | 'secondary' | 'tertiary' | 'error' | 'success' | 'warning' | 'inherit';
6
+ truncate?: boolean;
7
+ weight?: 'regular' | 'medium' | 'semibold' | 'bold';
8
+ align?: 'left' | 'center' | 'right';
9
+ }
10
+ export declare const Typography: React.ForwardRefExoticComponent<TypographyProps & React.RefAttributes<HTMLElement>>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/typography/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IACxE,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACvB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IAClH,KAAK,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACrC;AAaD,eAAO,MAAM,UAAU,qFA4BrB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ const variantElementMap = {
5
+ h1: 'h1', h2: 'h2', h3: 'h3', h4: 'h4', h5: 'h5', h6: 'h6',
6
+ body1: 'p', body2: 'p', caption: 'span', label: 'label', code: 'code', overline: 'span',
7
+ };
8
+ const variantClassMap = {
9
+ h1: 'tokis-h1', h2: 'tokis-h2', h3: 'tokis-h3', h4: 'tokis-h4', h5: 'tokis-h5', h6: 'tokis-h6',
10
+ body1: 'tokis-text', body2: 'tokis-text', caption: 'tokis-text', label: 'tokis-text',
11
+ code: 'tokis-code', overline: 'tokis-text',
12
+ };
13
+ export const Typography = forwardRef(({ as, variant = 'body1', color, truncate, weight, align, className, children, ...props }, ref) => {
14
+ const Component = as ?? variantElementMap[variant] ?? 'p';
15
+ return (_jsx(Component, { ref: ref, className: cn(variantClassMap[variant], color && color !== 'inherit' && `tokis-text--${color}`, truncate && 'tokis-text--truncate', weight && `tokis-text--weight-${weight}`, align && `tokis-text--align-${align}`, className), ...props, children: children }));
16
+ });
17
+ Typography.displayName = 'Typography';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/typography/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAWvC,MAAM,iBAAiB,GAAsC;IAC3D,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI;IAC1D,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CACxF,CAAC;AAEF,MAAM,eAAe,GAA2B;IAC9C,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU;IAC9F,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY;IACpF,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAA+B,CAAC,EAClE,EAAE,EACF,OAAO,GAAG,OAAO,EACjB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,GAAG,EAAE,EAAE;IACR,MAAM,SAAS,GAAG,EAAE,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;IAC1D,OAAO,CACL,KAAC,SAAS,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,eAAe,CAAC,OAAO,CAAC,EACxB,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,eAAe,KAAK,EAAE,EACtD,QAAQ,IAAI,sBAAsB,EAClC,MAAM,IAAI,sBAAsB,MAAM,EAAE,EACxC,KAAK,IAAI,qBAAqB,KAAK,EAAE,EACrC,SAAS,CACV,KACG,KAAK,YAER,QAAQ,GACC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export interface VirtualizedListProps<T> {
3
+ items: T[];
4
+ itemHeight: number;
5
+ height: number;
6
+ renderItem: (item: T, index: number) => React.ReactNode;
7
+ overscan?: number;
8
+ className?: string;
9
+ getItemKey?: (item: T, index: number) => string | number;
10
+ }
11
+ export declare function VirtualizedList<T>({ items, itemHeight, height, renderItem, overscan, className, getItemKey, }: VirtualizedListProps<T>): JSX.Element;
12
+ export declare namespace VirtualizedList {
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/virtual-list/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;CAC1D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,EACjC,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAY,EACZ,SAAS,EACT,UAAU,GACX,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAsCvC;yBA9Ce,eAAe"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useRef, useCallback } from 'react';
3
+ import { cn } from '../../utils/cn.js';
4
+ export function VirtualizedList({ items, itemHeight, height, renderItem, overscan = 3, className, getItemKey, }) {
5
+ const [scrollTop, setScrollTop] = useState(0);
6
+ const containerRef = useRef(null);
7
+ const totalHeight = items.length * itemHeight;
8
+ const visibleCount = Math.ceil(height / itemHeight);
9
+ const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);
10
+ const endIndex = Math.min(items.length - 1, startIndex + visibleCount + overscan * 2);
11
+ const paddingTop = startIndex * itemHeight;
12
+ const handleScroll = useCallback(() => {
13
+ if (containerRef.current)
14
+ setScrollTop(containerRef.current.scrollTop);
15
+ }, []);
16
+ return (_jsx("div", { ref: containerRef, className: cn('tokis-virtual-list', className), style: { height, overflow: 'auto' }, onScroll: handleScroll, children: _jsx("div", { style: { height: totalHeight, position: 'relative' }, children: _jsx("div", { style: { position: 'absolute', top: paddingTop, left: 0, right: 0 }, children: items.slice(startIndex, endIndex + 1).map((item, offset) => {
17
+ const index = startIndex + offset;
18
+ const key = getItemKey ? getItemKey(item, index) : index;
19
+ return (_jsx("div", { style: { height: itemHeight }, children: renderItem(item, index) }, key));
20
+ }) }) }) }));
21
+ }
22
+ VirtualizedList.displayName = 'VirtualizedList';
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/virtual-list/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAa,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAYvC,MAAM,UAAU,eAAe,CAAI,EACjC,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,GAAG,CAAC,EACZ,SAAS,EACT,UAAU,GACc;IACxB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IAEtF,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAE3C,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,IAAI,YAAY,CAAC,OAAO;YAAE,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,cACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,EAAE,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EACnC,QAAQ,EAAE,YAAY,YAEtB,cAAK,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,YACvD,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YACrE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;oBAC1D,MAAM,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;oBAClC,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBACzD,OAAO,CACL,cAAe,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,YACzC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IADhB,GAAG,CAEP,CACP,CAAC;gBACJ,CAAC,CAAC,GACE,GACF,GACF,CACP,CAAC;AACJ,CAAC;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { lightTheme } from '@tokis/tokens';
3
+ export type Config = {
4
+ tokens: typeof lightTheme;
5
+ };
6
+ export interface ConfigProviderProps {
7
+ children: ReactNode;
8
+ config?: Partial<Config>;
9
+ }
10
+ export declare const ConfigProvider: React.FC<ConfigProviderProps>;
11
+ export declare function useConfig(): Config;
12
+ //# sourceMappingURL=ConfigProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigProvider.d.ts","sourceRoot":"","sources":["../../src/context/ConfigProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,EAAE,OAAO,UAAU,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B;AAQD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAMxD,CAAC;AAEF,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ import { lightTheme } from '@tokis/tokens';
4
+ const defaultConfig = {
5
+ tokens: lightTheme,
6
+ };
7
+ const ConfigContext = createContext(defaultConfig);
8
+ export const ConfigProvider = ({ children, config }) => {
9
+ const resolved = {
10
+ ...defaultConfig,
11
+ ...config,
12
+ };
13
+ return _jsx(ConfigContext.Provider, { value: resolved, children: children });
14
+ };
15
+ export function useConfig() {
16
+ return useContext(ConfigContext);
17
+ }
18
+ //# sourceMappingURL=ConfigProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigProvider.js","sourceRoot":"","sources":["../../src/context/ConfigProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAa,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAW3C,MAAM,aAAa,GAAW;IAC5B,MAAM,EAAE,UAAU;CACnB,CAAC;AAEF,MAAM,aAAa,GAAG,aAAa,CAAS,aAAa,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;IACpF,MAAM,QAAQ,GAAW;QACvB,GAAG,aAAa;QAChB,GAAG,MAAM;KACV,CAAC;IACF,OAAO,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,YAAG,QAAQ,GAA0B,CAAC;AACtF,CAAC,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import React, { ReactNode } from 'react';
2
+ export type ThemeMode = 'light' | 'dark';
3
+ interface ThemeContextValue {
4
+ mode: ThemeMode;
5
+ toggle: () => void;
6
+ setMode: (mode: ThemeMode) => void;
7
+ }
8
+ export interface ThemeProviderProps {
9
+ children: ReactNode;
10
+ initialMode?: ThemeMode;
11
+ }
12
+ export declare const ThemeProvider: React.FC<ThemeProviderProps>;
13
+ export declare function useTheme(): ThemeContextValue;
14
+ export {};
15
+ //# sourceMappingURL=ThemeContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../src/context/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkD,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzF,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,UAAU,iBAAiB;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAiBtD,CAAC;AAEF,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useState, useEffect } from 'react';
3
+ const ThemeContext = createContext(undefined);
4
+ export const ThemeProvider = ({ children, initialMode = 'light' }) => {
5
+ const [mode, setMode] = useState(initialMode);
6
+ useEffect(() => {
7
+ document.documentElement.setAttribute('data-theme', mode);
8
+ return () => {
9
+ document.documentElement.removeAttribute('data-theme');
10
+ };
11
+ }, [mode]);
12
+ const toggle = () => setMode((prev) => (prev === 'light' ? 'dark' : 'light'));
13
+ return (_jsx(ThemeContext.Provider, { value: { mode, toggle, setMode }, children: children }));
14
+ };
15
+ export function useTheme() {
16
+ const ctx = useContext(ThemeContext);
17
+ if (!ctx)
18
+ throw new Error('useTheme must be used within ThemeProvider');
19
+ return ctx;
20
+ }
21
+ //# sourceMappingURL=ThemeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeContext.js","sourceRoot":"","sources":["../../src/context/ThemeContext.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAUzF,MAAM,YAAY,GAAG,aAAa,CAAgC,SAAS,CAAC,CAAC;AAO7E,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,EAAE,EAAE,EAAE;IACjG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAY,WAAW,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC1D,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9E,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YACpD,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACxE,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A React hook for managing controllable state — supporting both
3
+ * controlled (externally managed) and uncontrolled (internally managed) modes.
4
+ *
5
+ * @param controlled - The externally controlled value (undefined = uncontrolled)
6
+ * @param defaultValue - The initial value for uncontrolled mode
7
+ * @param onChange - Optional callback invoked when internal state changes
8
+ */
9
+ export declare function useControllableState<T>(controlled: T | undefined, defaultValue: T, onChange?: (value: T) => void): [T, (value: T | ((prev: T) => T)) => void];
10
+ //# sourceMappingURL=useControllableState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControllableState.d.ts","sourceRoot":"","sources":["../../src/hooks/useControllableState.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,UAAU,EAAE,CAAC,GAAG,SAAS,EACzB,YAAY,EAAE,CAAC,EACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAC5B,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAyB5C"}
@@ -0,0 +1,29 @@
1
+ import { useState, useCallback, useRef } from 'react';
2
+ import { isControlled } from '@tokis/core';
3
+ /**
4
+ * A React hook for managing controllable state — supporting both
5
+ * controlled (externally managed) and uncontrolled (internally managed) modes.
6
+ *
7
+ * @param controlled - The externally controlled value (undefined = uncontrolled)
8
+ * @param defaultValue - The initial value for uncontrolled mode
9
+ * @param onChange - Optional callback invoked when internal state changes
10
+ */
11
+ export function useControllableState(controlled, defaultValue, onChange) {
12
+ const [internalState, setInternalState] = useState(defaultValue);
13
+ const controlled_ = isControlled(controlled);
14
+ const value = controlled_ ? controlled : internalState;
15
+ // Keep a stable ref to onChange to avoid stale closures
16
+ const onChangeRef = useRef(onChange);
17
+ onChangeRef.current = onChange;
18
+ const setValue = useCallback((next) => {
19
+ const nextValue = typeof next === 'function'
20
+ ? next(value)
21
+ : next;
22
+ if (!controlled_) {
23
+ setInternalState(nextValue);
24
+ }
25
+ onChangeRef.current?.(nextValue);
26
+ }, [controlled_, value]);
27
+ return [value, setValue];
28
+ }
29
+ //# sourceMappingURL=useControllableState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControllableState.js","sourceRoot":"","sources":["../../src/hooks/useControllableState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAyB,EACzB,YAAe,EACf,QAA6B;IAE7B,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAI,YAAY,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;IAEvD,wDAAwD;IACxD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,IAA0B,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,OAAO,IAAI,KAAK,UAAU;YAC1C,CAAC,CAAE,IAAuB,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QACD,WAAW,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,CAAC,CACrB,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface UseDialogReturn {
2
+ isOpen: boolean;
3
+ open: () => void;
4
+ close: () => void;
5
+ toggle: () => void;
6
+ dialogProps: {
7
+ open: boolean;
8
+ onClose: () => void;
9
+ 'aria-modal': true;
10
+ role: 'dialog';
11
+ 'aria-labelledby'?: string;
12
+ 'aria-describedby'?: string;
13
+ };
14
+ triggerProps: {
15
+ onClick: () => void;
16
+ 'aria-haspopup': 'dialog';
17
+ 'aria-expanded': boolean;
18
+ 'aria-controls': string;
19
+ };
20
+ titleId: string;
21
+ descriptionId: string;
22
+ }
23
+ export declare function useDialog(defaultOpen?: boolean): UseDialogReturn;
24
+ //# sourceMappingURL=useDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDialog.d.ts","sourceRoot":"","sources":["../../src/hooks/useDialog.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,EAAE;QACX,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,YAAY,EAAE,IAAI,CAAC;QACnB,IAAI,EAAE,QAAQ,CAAC;QACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,eAAe,EAAE,QAAQ,CAAC;QAC1B,eAAe,EAAE,OAAO,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,WAAW,UAAQ,GAAG,eAAe,CAgC9D"}
@@ -0,0 +1,33 @@
1
+ import { useState, useCallback, useId } from 'react';
2
+ export function useDialog(defaultOpen = false) {
3
+ const [isOpen, setIsOpen] = useState(defaultOpen);
4
+ const dialogId = useId();
5
+ const titleId = `${dialogId}-title`;
6
+ const descriptionId = `${dialogId}-desc`;
7
+ const open = useCallback(() => setIsOpen(true), []);
8
+ const close = useCallback(() => setIsOpen(false), []);
9
+ const toggle = useCallback(() => setIsOpen((v) => !v), []);
10
+ return {
11
+ isOpen,
12
+ open,
13
+ close,
14
+ toggle,
15
+ dialogProps: {
16
+ open: isOpen,
17
+ onClose: close,
18
+ 'aria-modal': true,
19
+ role: 'dialog',
20
+ 'aria-labelledby': titleId,
21
+ 'aria-describedby': descriptionId,
22
+ },
23
+ triggerProps: {
24
+ onClick: open,
25
+ 'aria-haspopup': 'dialog',
26
+ 'aria-expanded': isOpen,
27
+ 'aria-controls': dialogId,
28
+ },
29
+ titleId,
30
+ descriptionId,
31
+ };
32
+ }
33
+ //# sourceMappingURL=useDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDialog.js","sourceRoot":"","sources":["../../src/hooks/useDialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAyBrD,MAAM,UAAU,SAAS,CAAC,WAAW,GAAG,KAAK;IAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,GAAG,QAAQ,QAAQ,CAAC;IACpC,MAAM,aAAa,GAAG,GAAG,QAAQ,OAAO,CAAC;IAEzC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3D,OAAO;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,MAAM;QACN,WAAW,EAAE;YACX,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,QAAQ;YACd,iBAAiB,EAAE,OAAO;YAC1B,kBAAkB,EAAE,aAAa;SAClC;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,QAAQ;YACzB,eAAe,EAAE,MAAM;YACvB,eAAe,EAAE,QAAQ;SAC1B;QACD,OAAO;QACP,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Returns a stable, unique ID for the lifetime of the component.
3
+ * Prefer React 18's built-in `useId` for SSR-safe IDs.
4
+ * Use this hook only when a custom prefix is needed.
5
+ */
6
+ export declare function useId(prefix?: string): string;
7
+ //# sourceMappingURL=useId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useId.d.ts","sourceRoot":"","sources":["../../src/hooks/useId.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,MAAM,SAAU,GAAG,MAAM,CAE9C"}
@@ -0,0 +1,11 @@
1
+ import { useRef } from 'react';
2
+ import { generateId } from '@tokis/core';
3
+ /**
4
+ * Returns a stable, unique ID for the lifetime of the component.
5
+ * Prefer React 18's built-in `useId` for SSR-safe IDs.
6
+ * Use this hook only when a custom prefix is needed.
7
+ */
8
+ export function useId(prefix = 'tokis') {
9
+ return useRef(generateId(prefix)).current;
10
+ }
11
+ //# sourceMappingURL=useId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useId.js","sourceRoot":"","sources":["../../src/hooks/useId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,MAAM,GAAG,OAAO;IACpC,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface UseMenuReturn {
2
+ isOpen: boolean;
3
+ open: () => void;
4
+ close: () => void;
5
+ activeIndex: number;
6
+ setActiveIndex: (index: number) => void;
7
+ getMenuProps: () => {
8
+ id: string;
9
+ role: 'menu';
10
+ 'aria-orientation': 'vertical';
11
+ onKeyDown: (e: React.KeyboardEvent) => void;
12
+ };
13
+ getItemProps: (index: number) => {
14
+ role: 'menuitem';
15
+ tabIndex: number;
16
+ 'aria-selected': boolean;
17
+ onMouseEnter: () => void;
18
+ };
19
+ }
20
+ export declare function useMenu(itemCount?: number): UseMenuReturn;
21
+ //# sourceMappingURL=useMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../src/hooks/useMenu.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,kBAAkB,EAAE,UAAU,CAAC;QAC/B,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;KAC7C,CAAC;IACF,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;QAC/B,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,MAAM,IAAI,CAAC;KAC1B,CAAC;CACH;AAED,wBAAgB,OAAO,CAAC,SAAS,SAAI,GAAG,aAAa,CAyEpD"}