@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,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CircularProgress = CircularProgress;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const cn_js_1 = require("../../utils/cn");
6
+ const sizeMap = {
7
+ sm: 32,
8
+ md: 48,
9
+ lg: 64,
10
+ xl: 80,
11
+ };
12
+ const strokeWidthMap = {
13
+ sm: 3,
14
+ md: 4,
15
+ lg: 5,
16
+ xl: 6,
17
+ };
18
+ function CircularProgress({ value, size = 'md', strokeWidth, label, variant = 'default', className, }) {
19
+ const svgSize = sizeMap[size];
20
+ const sw = strokeWidth ?? strokeWidthMap[size];
21
+ const radius = (svgSize - sw) / 2;
22
+ const circumference = 2 * Math.PI * radius;
23
+ const isIndeterminate = value === undefined;
24
+ const clampedValue = Math.min(100, Math.max(0, value ?? 0));
25
+ const offset = circumference * (1 - clampedValue / 100);
26
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-circular-progress', `tokis-circular-progress--${size}`, `tokis-circular-progress--${variant}`, isIndeterminate && 'tokis-circular-progress--indeterminate', className), role: "progressbar", "aria-valuenow": isIndeterminate ? undefined : clampedValue, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": isIndeterminate ? 'Loading…' : `${clampedValue}%`, children: [(0, jsx_runtime_1.jsxs)("svg", { width: svgSize, height: svgSize, viewBox: `0 0 ${svgSize} ${svgSize}`, fill: "none", children: [(0, jsx_runtime_1.jsx)("circle", { className: "tokis-circular-progress__track", cx: svgSize / 2, cy: svgSize / 2, r: radius, strokeWidth: sw }), (0, jsx_runtime_1.jsx)("circle", { className: "tokis-circular-progress__fill", cx: svgSize / 2, cy: svgSize / 2, r: radius, strokeWidth: sw, strokeDasharray: circumference, strokeDashoffset: isIndeterminate ? circumference * 0.75 : offset, strokeLinecap: "round", transform: `rotate(-90 ${svgSize / 2} ${svgSize / 2})` })] }), label && (0, jsx_runtime_1.jsx)("div", { className: "tokis-circular-progress__label", children: label })] }));
27
+ }
28
+ CircularProgress.displayName = 'CircularProgress';
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CodeBlock = 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
+ const CopyIcon = () => ((0, jsx_runtime_1.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)("rect", { x: "4", y: "4", width: "8", height: "8", rx: "1.5", stroke: "currentColor", strokeWidth: "1.5" }), (0, jsx_runtime_1.jsx)("path", { d: "M10 4V2.5A1.5 1.5 0 0 0 8.5 1h-6A1.5 1.5 0 0 0 1 2.5v6A1.5 1.5 0 0 0 2.5 10H4", stroke: "currentColor", strokeWidth: "1.5" })] }));
8
+ const CheckIcon = () => ((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 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
9
+ const CodeBlock = ({ code, language, filename, highlightedHtml, showLineNumbers = false, theme = 'auto', className, }) => {
10
+ const [copied, setCopied] = (0, react_1.useState)(false);
11
+ const handleCopy = (0, react_1.useCallback)(async () => {
12
+ try {
13
+ await navigator.clipboard.writeText(code);
14
+ setCopied(true);
15
+ setTimeout(() => setCopied(false), 2000);
16
+ }
17
+ catch {
18
+ // Fallback for browsers without clipboard API
19
+ const textarea = document.createElement('textarea');
20
+ textarea.value = code;
21
+ textarea.style.position = 'fixed';
22
+ textarea.style.opacity = '0';
23
+ document.body.appendChild(textarea);
24
+ textarea.select();
25
+ document.execCommand('copy');
26
+ document.body.removeChild(textarea);
27
+ setCopied(true);
28
+ setTimeout(() => setCopied(false), 2000);
29
+ }
30
+ }, [code]);
31
+ const lines = code.split('\n');
32
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-codeblock', className), "data-codeblock-theme": theme !== 'auto' ? theme : undefined, children: [(0, jsx_runtime_1.jsxs)("div", { className: "tokis-codeblock__header", children: [(0, jsx_runtime_1.jsx)("span", { className: "tokis-codeblock__lang", children: filename ?? language ?? 'code' }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: (0, cn_js_1.cn)('tokis-codeblock__copy', copied && 'tokis-codeblock__copy--copied'), onClick: handleCopy, "aria-label": copied ? 'Copied!' : 'Copy code', children: [copied ? (0, jsx_runtime_1.jsx)(CheckIcon, {}) : (0, jsx_runtime_1.jsx)(CopyIcon, {}), (0, jsx_runtime_1.jsx)("span", { children: copied ? 'Copied!' : 'Copy' })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "tokis-codeblock__body", children: [showLineNumbers && ((0, jsx_runtime_1.jsx)("div", { className: "tokis-codeblock__lines", "aria-hidden": "true", children: lines.map((_, i) => ((0, jsx_runtime_1.jsx)("span", { className: "tokis-codeblock__line-num", children: i + 1 }, i))) })), (0, jsx_runtime_1.jsx)("pre", { className: "tokis-codeblock__pre", children: highlightedHtml ? ((0, jsx_runtime_1.jsx)("code", { className: (0, cn_js_1.cn)('tokis-codeblock__code', language && `language-${language}`), dangerouslySetInnerHTML: { __html: highlightedHtml } })) : ((0, jsx_runtime_1.jsx)("code", { className: (0, cn_js_1.cn)('tokis-codeblock__code', language && `language-${language}`), children: code })) })] })] }));
33
+ };
34
+ exports.CodeBlock = CodeBlock;
35
+ exports.CodeBlock.displayName = 'CodeBlock';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CodeBlock = void 0;
4
+ var CodeBlock_js_1 = require("./CodeBlock");
5
+ Object.defineProperty(exports, "CodeBlock", { enumerable: true, get: function () { return CodeBlock_js_1.CodeBlock; } });
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommandPalette = CommandPalette;
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
+ const core_1 = require("@tokis/core");
9
+ function CommandPalette({ open, onClose, items, placeholder = 'Search commands…', className, }) {
10
+ const [query, setQuery] = (0, react_1.useState)('');
11
+ const [activeIndex, setActiveIndex] = (0, react_1.useState)(0);
12
+ const containerRef = (0, react_1.useRef)(null);
13
+ const inputRef = (0, react_1.useRef)(null);
14
+ const filtered = (0, react_1.useMemo)(() => {
15
+ const q = query.trim().toLowerCase();
16
+ if (!q)
17
+ return items;
18
+ return items.filter((item) => item.label.toLowerCase().includes(q) ||
19
+ item.description?.toLowerCase().includes(q) ||
20
+ item.category?.toLowerCase().includes(q));
21
+ }, [query, items]);
22
+ const grouped = (0, react_1.useMemo)(() => {
23
+ const map = new Map();
24
+ for (const item of filtered) {
25
+ const cat = item.category ?? '';
26
+ if (!map.has(cat))
27
+ map.set(cat, []);
28
+ map.get(cat).push(item);
29
+ }
30
+ return map;
31
+ }, [filtered]);
32
+ const flatFiltered = filtered;
33
+ const handleSelect = (0, react_1.useCallback)((item) => {
34
+ item.onSelect();
35
+ onClose();
36
+ setQuery('');
37
+ setActiveIndex(0);
38
+ }, [onClose]);
39
+ (0, react_1.useEffect)(() => {
40
+ if (!open) {
41
+ setQuery('');
42
+ setActiveIndex(0);
43
+ return;
44
+ }
45
+ const cleanup = containerRef.current ? (0, core_1.trapFocus)(containerRef.current) : undefined;
46
+ inputRef.current?.focus();
47
+ return () => cleanup?.();
48
+ }, [open]);
49
+ (0, react_1.useEffect)(() => {
50
+ if (!open)
51
+ return;
52
+ const onKey = (e) => {
53
+ if (e.key === 'Escape') {
54
+ onClose();
55
+ return;
56
+ }
57
+ if (e.key === 'ArrowDown') {
58
+ e.preventDefault();
59
+ setActiveIndex((i) => Math.min(i + 1, flatFiltered.length - 1));
60
+ }
61
+ else if (e.key === 'ArrowUp') {
62
+ e.preventDefault();
63
+ setActiveIndex((i) => Math.max(i - 1, 0));
64
+ }
65
+ else if (e.key === 'Enter') {
66
+ const item = flatFiltered[activeIndex];
67
+ if (item)
68
+ handleSelect(item);
69
+ }
70
+ };
71
+ document.addEventListener('keydown', onKey);
72
+ return () => document.removeEventListener('keydown', onKey);
73
+ }, [open, flatFiltered, activeIndex, handleSelect, onClose]);
74
+ (0, react_1.useEffect)(() => { setActiveIndex(0); }, [query]);
75
+ if (!open)
76
+ return null;
77
+ let globalIndex = 0;
78
+ return ((0, jsx_runtime_1.jsxs)(index_js_1.Portal, { children: [(0, jsx_runtime_1.jsx)("div", { className: "tokis-command-palette-backdrop", "aria-hidden": "true", onClick: onClose }), (0, jsx_runtime_1.jsxs)("div", { ref: containerRef, className: (0, cn_js_1.cn)('tokis-command-palette', className), role: "dialog", "aria-label": "Command palette", "aria-modal": "true", children: [(0, jsx_runtime_1.jsxs)("div", { className: "tokis-command-palette__search", children: [(0, jsx_runtime_1.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", className: "tokis-command-palette__search-icon", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "7", cy: "7", r: "4.5", stroke: "currentColor", strokeWidth: "1.5" }), (0, jsx_runtime_1.jsx)("path", { d: "M11 11l3 3", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })] }), (0, jsx_runtime_1.jsx)("input", { ref: inputRef, type: "text", className: "tokis-command-palette__input", placeholder: placeholder, value: query, onChange: (e) => setQuery(e.target.value), "aria-label": placeholder, autoComplete: "off", spellCheck: false })] }), (0, jsx_runtime_1.jsx)("div", { className: "tokis-command-palette__list", role: "listbox", children: filtered.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "tokis-command-palette__empty", children: "No commands found" })) : (Array.from(grouped.entries()).map(([category, categoryItems]) => ((0, jsx_runtime_1.jsxs)("div", { className: "tokis-command-palette__group", children: [category && ((0, jsx_runtime_1.jsx)("div", { className: "tokis-command-palette__group-label", children: category })), categoryItems.map((item) => {
79
+ const idx = globalIndex++;
80
+ const isActive = activeIndex === idx;
81
+ return ((0, jsx_runtime_1.jsxs)("button", { role: "option", "aria-selected": isActive, className: (0, cn_js_1.cn)('tokis-command-palette__item', isActive && 'tokis-command-palette__item--active'), onClick: () => handleSelect(item), onMouseEnter: () => setActiveIndex(idx), children: [item.icon && ((0, jsx_runtime_1.jsx)("span", { className: "tokis-command-palette__item-icon", "aria-hidden": "true", children: item.icon })), (0, jsx_runtime_1.jsxs)("span", { className: "tokis-command-palette__item-content", children: [(0, jsx_runtime_1.jsx)("span", { className: "tokis-command-palette__item-label", children: item.label }), item.description && ((0, jsx_runtime_1.jsx)("span", { className: "tokis-command-palette__item-desc", children: item.description }))] }), item.shortcut && ((0, jsx_runtime_1.jsx)("span", { className: "tokis-command-palette__shortcut", "aria-label": `Shortcut: ${item.shortcut.join('+')}`, children: item.shortcut.map((k, ki) => ((0, jsx_runtime_1.jsx)("kbd", { className: "tokis-command-palette__kbd", children: k }, ki))) }))] }, item.id));
82
+ })] }, category)))) })] })] }));
83
+ }
84
+ CommandPalette.displayName = 'CommandPalette';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfirmDialog = ConfirmDialog;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const index_js_1 = require("../dialog/index");
6
+ const cn_js_1 = require("../../utils/cn");
7
+ function ConfirmDialog({ open, onClose, onConfirm, title, description, confirmLabel = 'Confirm', cancelLabel = 'Cancel', destructive = false, loading = false, className, }) {
8
+ return ((0, jsx_runtime_1.jsx)(index_js_1.Dialog, { open: open, onClose: onClose, title: title, description: description, size: "sm", className: (0, cn_js_1.cn)('tokis-confirm-dialog', className), footer: (0, jsx_runtime_1.jsxs)("div", { className: "tokis-confirm-dialog__actions", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: "tokis-confirm-dialog__cancel", onClick: onClose, disabled: loading, children: cancelLabel }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: (0, cn_js_1.cn)('tokis-confirm-dialog__confirm', destructive && 'tokis-confirm-dialog__confirm--destructive'), onClick: onConfirm, disabled: loading, "aria-busy": loading, children: [loading ? ((0, jsx_runtime_1.jsx)("span", { className: "tokis-confirm-dialog__spinner", "aria-hidden": "true" })) : null, confirmLabel] })] }) }));
9
+ }
10
+ ConfirmDialog.displayName = 'ConfirmDialog';
@@ -0,0 +1,82 @@
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.ContextMenu = ContextMenu;
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 ContextMenu({ items, children, className }) {
42
+ const [visible, setVisible] = (0, react_1.useState)(false);
43
+ const [pos, setPos] = (0, react_1.useState)({ x: 0, y: 0 });
44
+ const menuRef = (0, react_1.useRef)(null);
45
+ const close = (0, react_1.useCallback)(() => setVisible(false), []);
46
+ const handleContextMenu = (0, react_1.useCallback)((e) => {
47
+ e.preventDefault();
48
+ setPos({ x: e.clientX, y: e.clientY });
49
+ setVisible(true);
50
+ }, []);
51
+ (0, react_1.useEffect)(() => {
52
+ if (!visible)
53
+ return;
54
+ const onKey = (e) => { if (e.key === 'Escape')
55
+ close(); };
56
+ const onClick = (e) => {
57
+ if (menuRef.current && !menuRef.current.contains(e.target))
58
+ close();
59
+ };
60
+ document.addEventListener('keydown', onKey);
61
+ document.addEventListener('mousedown', onClick);
62
+ return () => {
63
+ document.removeEventListener('keydown', onKey);
64
+ document.removeEventListener('mousedown', onClick);
65
+ };
66
+ }, [visible, close]);
67
+ (0, react_1.useEffect)(() => {
68
+ if (!visible || !menuRef.current)
69
+ return;
70
+ menuRef.current.focus();
71
+ }, [visible]);
72
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [react_1.default.cloneElement(children, { onContextMenu: handleContextMenu }), visible && ((0, jsx_runtime_1.jsx)(index_js_1.Portal, { children: (0, jsx_runtime_1.jsx)("div", { ref: menuRef, className: (0, cn_js_1.cn)('tokis-context-menu', className), role: "menu", tabIndex: -1, style: { position: 'fixed', top: pos.y, left: pos.x }, children: items.map((item, i) => {
73
+ if (item.type === 'separator') {
74
+ return (0, jsx_runtime_1.jsx)("div", { className: "tokis-context-menu__separator", role: "separator" }, i);
75
+ }
76
+ if (item.type === 'label') {
77
+ return (0, jsx_runtime_1.jsx)("div", { className: "tokis-context-menu__label", children: item.label }, i);
78
+ }
79
+ return ((0, jsx_runtime_1.jsxs)("button", { role: "menuitem", className: (0, cn_js_1.cn)('tokis-context-menu__item', item.destructive && 'tokis-context-menu__item--destructive', item.disabled && 'tokis-context-menu__item--disabled'), disabled: item.disabled, onClick: () => { item.onClick?.(); close(); }, children: [item.icon && (0, jsx_runtime_1.jsx)("span", { className: "tokis-context-menu__icon", "aria-hidden": "true", children: item.icon }), item.label] }, i));
80
+ }) }) }))] }));
81
+ }
82
+ ContextMenu.displayName = 'ContextMenu';
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Dialog = Dialog;
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
+ const core_1 = require("@tokis/core");
9
+ function Dialog({ open, onClose, title, description, children, footer, size = 'md', closeOnBackdrop = true, closeOnEsc = true, className, 'aria-label': ariaLabel, }) {
10
+ const contentRef = (0, react_1.useRef)(null);
11
+ const uid = (0, react_1.useId)();
12
+ const titleId = title ? `dialog-title-${uid}` : undefined;
13
+ const descId = description ? `dialog-desc-${uid}` : undefined;
14
+ (0, react_1.useEffect)(() => {
15
+ if (!open)
16
+ return;
17
+ const cleanup = contentRef.current ? (0, core_1.trapFocus)(contentRef.current) : undefined;
18
+ const prev = document.activeElement;
19
+ contentRef.current?.focus();
20
+ return () => {
21
+ cleanup?.();
22
+ prev?.focus();
23
+ };
24
+ }, [open]);
25
+ (0, react_1.useEffect)(() => {
26
+ if (!open || !closeOnEsc)
27
+ return;
28
+ const handle = (e) => { if (e.key === 'Escape')
29
+ onClose(); };
30
+ document.addEventListener('keydown', handle);
31
+ return () => document.removeEventListener('keydown', handle);
32
+ }, [open, closeOnEsc, onClose]);
33
+ (0, react_1.useEffect)(() => {
34
+ if (open) {
35
+ const prev = document.body.style.overflow;
36
+ document.body.style.overflow = 'hidden';
37
+ return () => { document.body.style.overflow = prev; };
38
+ }
39
+ }, [open]);
40
+ if (!open)
41
+ return null;
42
+ return ((0, jsx_runtime_1.jsx)(index_js_1.Portal, { children: (0, jsx_runtime_1.jsx)("div", { className: "tokis-dialog-backdrop", "aria-hidden": "true", onClick: closeOnBackdrop ? onClose : undefined, children: (0, jsx_runtime_1.jsxs)("div", { ref: contentRef, role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": descId, "aria-label": !title ? ariaLabel : undefined, tabIndex: -1, className: (0, cn_js_1.cn)('tokis-dialog-content', size !== 'md' && `tokis-dialog-content--${size}`, className), onClick: (e) => e.stopPropagation(), children: [(title || description) && ((0, jsx_runtime_1.jsxs)("div", { className: "tokis-dialog-header", children: [(0, jsx_runtime_1.jsxs)("div", { children: [title && (0, jsx_runtime_1.jsx)("h2", { id: titleId, className: "tokis-dialog-title", children: title }), description && (0, jsx_runtime_1.jsx)("p", { id: descId, className: "tokis-dialog-description", children: description })] }), (0, jsx_runtime_1.jsx)("button", { className: "tokis-dialog-close", onClick: onClose, "aria-label": "Close dialog", 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: "M3 3l10 10M13 3L3 13", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) })] })), children && (0, jsx_runtime_1.jsx)("div", { className: "tokis-dialog-body", children: children }), footer && (0, jsx_runtime_1.jsx)("div", { className: "tokis-dialog-footer", children: footer })] }) }) }));
43
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Divider = void 0;
4
+ // Re-export Divider from card
5
+ var index_js_1 = require("../card/index");
6
+ Object.defineProperty(exports, "Divider", { enumerable: true, get: function () { return index_js_1.Divider; } });
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Drawer = Drawer;
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
+ const core_1 = require("@tokis/core");
9
+ function Drawer({ open, onClose, side = 'right', title, description, children, footer, closeOnBackdrop = true, closeOnEsc = true, className }) {
10
+ const contentRef = (0, react_1.useRef)(null);
11
+ (0, react_1.useEffect)(() => {
12
+ if (!open)
13
+ return;
14
+ const cleanup = contentRef.current ? (0, core_1.trapFocus)(contentRef.current) : undefined;
15
+ const prev = document.activeElement;
16
+ contentRef.current?.focus();
17
+ return () => { cleanup?.(); prev?.focus(); };
18
+ }, [open]);
19
+ (0, react_1.useEffect)(() => {
20
+ if (!open || !closeOnEsc)
21
+ return;
22
+ const h = (e) => { if (e.key === 'Escape')
23
+ onClose(); };
24
+ document.addEventListener('keydown', h);
25
+ return () => document.removeEventListener('keydown', h);
26
+ }, [open, closeOnEsc, onClose]);
27
+ (0, react_1.useEffect)(() => {
28
+ if (open) {
29
+ const prev = document.body.style.overflow;
30
+ document.body.style.overflow = 'hidden';
31
+ return () => { document.body.style.overflow = prev; };
32
+ }
33
+ }, [open]);
34
+ if (!open)
35
+ return null;
36
+ return ((0, jsx_runtime_1.jsxs)(index_js_1.Portal, { children: [(0, jsx_runtime_1.jsx)("div", { className: "tokis-drawer-backdrop", "aria-hidden": "true", onClick: closeOnBackdrop ? onClose : undefined }), (0, jsx_runtime_1.jsxs)("div", { ref: contentRef, role: "dialog", "aria-modal": "true", tabIndex: -1, className: (0, cn_js_1.cn)(`tokis-drawer-content tokis-drawer-content--${side}`, className), onClick: (e) => e.stopPropagation(), children: [(title || description) && ((0, jsx_runtime_1.jsxs)("div", { className: "tokis-drawer-header", children: [title && (0, jsx_runtime_1.jsx)("h2", { className: "tokis-drawer-title", children: title }), description && (0, jsx_runtime_1.jsx)("p", { className: "tokis-drawer-description", children: description }), (0, jsx_runtime_1.jsx)("button", { className: "tokis-drawer-close", onClick: onClose, "aria-label": "Close drawer", 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: "M3 3l10 10M13 3L3 13", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) })] })), (0, jsx_runtime_1.jsx)("div", { className: "tokis-drawer-body", children: children }), footer && (0, jsx_runtime_1.jsx)("div", { className: "tokis-drawer-footer", children: footer })] })] }));
37
+ }
@@ -0,0 +1,104 @@
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.Dropdown = Dropdown;
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 computeDropdownPos(anchor, placement) {
42
+ const gap = 4;
43
+ switch (placement) {
44
+ case 'bottom-start': return { top: anchor.bottom + gap, left: anchor.left };
45
+ case 'bottom-end': return { top: anchor.bottom + gap, left: anchor.right };
46
+ case 'top-start': return { top: anchor.top - gap, left: anchor.left };
47
+ case 'top-end': return { top: anchor.top - gap, left: anchor.right };
48
+ }
49
+ }
50
+ const transformMap = {
51
+ 'bottom-start': 'none',
52
+ 'bottom-end': 'translateX(-100%)',
53
+ 'top-start': 'translateY(-100%)',
54
+ 'top-end': 'translate(-100%, -100%)',
55
+ };
56
+ function Dropdown({ trigger, children, placement = 'bottom-start', open: controlledOpen, defaultOpen = false, onOpenChange, className, }) {
57
+ const [internalOpen, setInternalOpen] = (0, react_1.useState)(defaultOpen);
58
+ const isControlled = controlledOpen !== undefined;
59
+ const isOpen = isControlled ? controlledOpen : internalOpen;
60
+ const [pos, setPos] = (0, react_1.useState)({ top: 0, left: 0 });
61
+ const anchorRef = (0, react_1.useRef)(null);
62
+ const menuRef = (0, react_1.useRef)(null);
63
+ const setOpen = (0, react_1.useCallback)((v) => {
64
+ if (!isControlled)
65
+ setInternalOpen(v);
66
+ onOpenChange?.(v);
67
+ }, [isControlled, onOpenChange]);
68
+ const toggle = (0, react_1.useCallback)(() => {
69
+ const next = !isOpen;
70
+ if (next && anchorRef.current) {
71
+ const rect = anchorRef.current.getBoundingClientRect();
72
+ setPos(computeDropdownPos(rect, placement));
73
+ }
74
+ setOpen(next);
75
+ }, [isOpen, placement, setOpen]);
76
+ (0, react_1.useEffect)(() => {
77
+ if (!isOpen)
78
+ return;
79
+ const onKey = (e) => { if (e.key === 'Escape')
80
+ setOpen(false); };
81
+ const onMouse = (e) => {
82
+ if (menuRef.current && !menuRef.current.contains(e.target) &&
83
+ anchorRef.current && !anchorRef.current.contains(e.target)) {
84
+ setOpen(false);
85
+ }
86
+ };
87
+ document.addEventListener('keydown', onKey);
88
+ document.addEventListener('mousedown', onMouse);
89
+ return () => {
90
+ document.removeEventListener('keydown', onKey);
91
+ document.removeEventListener('mousedown', onMouse);
92
+ };
93
+ }, [isOpen, setOpen]);
94
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [react_1.default.cloneElement(trigger, {
95
+ ref: anchorRef,
96
+ onClick: (...args) => {
97
+ toggle();
98
+ trigger.props.onClick?.(...args);
99
+ },
100
+ 'aria-expanded': isOpen,
101
+ 'aria-haspopup': 'true',
102
+ }), isOpen && ((0, jsx_runtime_1.jsx)(index_js_1.Portal, { children: (0, jsx_runtime_1.jsx)("div", { ref: menuRef, className: (0, cn_js_1.cn)('tokis-dropdown', `tokis-dropdown--${placement}`, className), style: { position: 'fixed', top: pos.top, left: pos.left, transform: transformMap[placement] }, children: children }) }))] }));
103
+ }
104
+ Dropdown.displayName = 'Dropdown';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmptyState = EmptyState;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const cn_js_1 = require("../../utils/cn");
6
+ function EmptyState({ icon, title, description, action, className }) {
7
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-empty-state', className), role: "status", children: [icon && (0, jsx_runtime_1.jsx)("div", { className: "tokis-empty-state__icon", "aria-hidden": "true", children: icon }), (0, jsx_runtime_1.jsx)("h3", { className: "tokis-empty-state__title", children: title }), description && (0, jsx_runtime_1.jsx)("p", { className: "tokis-empty-state__description", children: description }), action && (0, jsx_runtime_1.jsx)("div", { className: "tokis-empty-state__action", children: action })] }));
8
+ }
9
+ EmptyState.displayName = 'EmptyState';