tekivex-ui 2.5.15 → 2.6.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 (395) hide show
  1. package/dist/charts.cjs +1 -1
  2. package/dist/charts.js +22 -553
  3. package/dist/chunk-B3ph66Zb.js +1 -0
  4. package/dist/chunk-Bc16rJT-.js +1 -0
  5. package/dist/chunk-Dike2DLU.js +3 -0
  6. package/dist/chunk-DjxOP8W4.js +1 -0
  7. package/dist/chunk-DkoFTL1O.js +1 -0
  8. package/dist/chunk-DmRB1Blb.js +1 -0
  9. package/dist/chunk-DnCXUUx5.js +1 -0
  10. package/dist/chunk-LWkKqC8d.js +1 -0
  11. package/dist/chunk-PJ50l0JC.js +1 -0
  12. package/dist/headless.cjs +1 -1
  13. package/dist/headless.js +1 -442
  14. package/dist/i18n.cjs +1 -1
  15. package/dist/i18n.js +1 -733
  16. package/dist/index.cjs +1 -152
  17. package/dist/index.d.ts +4 -2
  18. package/dist/index.js +429 -16786
  19. package/dist/quantum.cjs +1 -89
  20. package/dist/quantum.js +74 -2551
  21. package/dist/realtime.cjs +1 -23
  22. package/dist/realtime.js +1 -804
  23. package/dist/src/a11y/index.d.ts +0 -1
  24. package/dist/src/charts/TkxAreaChart.d.ts +0 -5
  25. package/dist/src/charts/TkxBarChart.d.ts +0 -3
  26. package/dist/src/charts/TkxDonutChart.d.ts +0 -5
  27. package/dist/src/charts/TkxLineChart.d.ts +0 -1
  28. package/dist/src/charts/TkxPieChart.d.ts +0 -3
  29. package/dist/src/charts/TkxRadarChart.d.ts +0 -3
  30. package/dist/src/charts/TkxScatterChart.d.ts +0 -2
  31. package/dist/src/charts/index.d.ts +0 -1
  32. package/dist/src/charts/shared.d.ts +0 -3
  33. package/dist/src/components/TkxAIChatBubble.d.ts +0 -9
  34. package/dist/src/components/TkxAIConfidenceBar.d.ts +0 -6
  35. package/dist/src/components/TkxAIThinking.d.ts +0 -6
  36. package/dist/src/components/TkxAccordion.d.ts +0 -1
  37. package/dist/src/components/TkxAffix.d.ts +0 -1
  38. package/dist/src/components/TkxAlert.d.ts +0 -1
  39. package/dist/src/components/TkxAnchor.d.ts +0 -1
  40. package/dist/src/components/TkxAppBar.d.ts +0 -1
  41. package/dist/src/components/TkxAutocomplete.d.ts +0 -1
  42. package/dist/src/components/TkxAvatar.d.ts +0 -1
  43. package/dist/src/components/TkxBadge.d.ts +0 -1
  44. package/dist/src/components/TkxBottomNav.d.ts +0 -1
  45. package/dist/src/components/TkxBreadcrumb.d.ts +0 -1
  46. package/dist/src/components/TkxButton.d.ts +0 -1
  47. package/dist/src/components/TkxCard.d.ts +0 -1
  48. package/dist/src/components/TkxCarousel.d.ts +0 -1
  49. package/dist/src/components/TkxCascader.d.ts +0 -1
  50. package/dist/src/components/TkxChat.d.ts +0 -1
  51. package/dist/src/components/TkxCheckbox.d.ts +0 -1
  52. package/dist/src/components/TkxClock.d.ts +0 -1
  53. package/dist/src/components/TkxColorPicker.d.ts +0 -1
  54. package/dist/src/components/TkxCommand.d.ts +0 -1
  55. package/dist/src/components/TkxConfigProvider.d.ts +0 -30
  56. package/dist/src/components/TkxDataGrid.d.ts +0 -15
  57. package/dist/src/components/TkxDatePicker.d.ts +0 -1
  58. package/dist/src/components/TkxDivider.d.ts +0 -1
  59. package/dist/src/components/TkxDrawer.d.ts +0 -1
  60. package/dist/src/components/TkxDropdown.d.ts +0 -1
  61. package/dist/src/components/TkxEmpty.d.ts +0 -1
  62. package/dist/src/components/TkxFileUpload.d.ts +0 -1
  63. package/dist/src/components/TkxForm.d.ts +0 -35
  64. package/dist/src/components/TkxIcon.d.ts +0 -1
  65. package/dist/src/components/TkxImage.d.ts +0 -1
  66. package/dist/src/components/TkxInput.d.ts +1 -1
  67. package/dist/src/components/TkxLayout.d.ts +0 -22
  68. package/dist/src/components/TkxList.d.ts +0 -1
  69. package/dist/src/components/TkxLiveFeed.d.ts +0 -1
  70. package/dist/src/components/TkxLiveLog.d.ts +0 -1
  71. package/dist/src/components/TkxLiveMetrics.d.ts +0 -1
  72. package/dist/src/components/TkxLogo.d.ts +0 -1
  73. package/dist/src/components/TkxMarkdown.d.ts +0 -10
  74. package/dist/src/components/TkxMasonry.d.ts +0 -1
  75. package/dist/src/components/TkxMentions.d.ts +0 -1
  76. package/dist/src/components/TkxMenu.d.ts +0 -1
  77. package/dist/src/components/TkxModal.d.ts +0 -1
  78. package/dist/src/components/TkxNumberInput.d.ts +0 -1
  79. package/dist/src/components/TkxOTP.d.ts +0 -1
  80. package/dist/src/components/TkxOrgChart.d.ts +32 -0
  81. package/dist/src/components/TkxPagination.d.ts +0 -1
  82. package/dist/src/components/TkxPlayground.d.ts +0 -13
  83. package/dist/src/components/TkxPopover.d.ts +0 -1
  84. package/dist/src/components/TkxProgress.d.ts +0 -1
  85. package/dist/src/components/TkxQRCode.d.ts +0 -1
  86. package/dist/src/components/TkxQuantumForm.d.ts +0 -1
  87. package/dist/src/components/TkxRadio.d.ts +0 -1
  88. package/dist/src/components/TkxRating.d.ts +0 -1
  89. package/dist/src/components/TkxRealTimeChart.d.ts +0 -1
  90. package/dist/src/components/TkxResult.d.ts +0 -1
  91. package/dist/src/components/TkxRichTextDisplay.d.ts +0 -1
  92. package/dist/src/components/TkxSegmented.d.ts +0 -1
  93. package/dist/src/components/TkxSelect.d.ts +0 -3
  94. package/dist/src/components/TkxSkeleton.d.ts +0 -1
  95. package/dist/src/components/TkxSlider.d.ts +0 -1
  96. package/dist/src/components/TkxSnackbar.d.ts +0 -1
  97. package/dist/src/components/TkxSpeedDial.d.ts +0 -1
  98. package/dist/src/components/TkxSpin.d.ts +0 -1
  99. package/dist/src/components/TkxStatistic.d.ts +0 -1
  100. package/dist/src/components/TkxStepper.d.ts +0 -1
  101. package/dist/src/components/TkxTable.d.ts +0 -1
  102. package/dist/src/components/TkxTabs.d.ts +0 -1
  103. package/dist/src/components/TkxTag.d.ts +0 -1
  104. package/dist/src/components/TkxThemeBuilder.d.ts +0 -1
  105. package/dist/src/components/TkxTimeline.d.ts +0 -1
  106. package/dist/src/components/TkxToast.d.ts +0 -1
  107. package/dist/src/components/TkxToggle.d.ts +0 -1
  108. package/dist/src/components/TkxToolbar.d.ts +0 -1
  109. package/dist/src/components/TkxTooltip.d.ts +0 -1
  110. package/dist/src/components/TkxTour.d.ts +0 -1
  111. package/dist/src/components/TkxTransferList.d.ts +0 -1
  112. package/dist/src/components/TkxTreeView.d.ts +0 -1
  113. package/dist/src/components/TkxTypography.d.ts +0 -1
  114. package/dist/src/components/TkxVideoPlayer.d.ts +0 -1
  115. package/dist/src/components/TkxWatermark.d.ts +0 -1
  116. package/dist/src/components/index.d.ts +1 -1
  117. package/dist/src/engine/css.d.ts +0 -1
  118. package/dist/src/engine/index.d.ts +0 -1
  119. package/dist/src/engine/quantum-ai.d.ts +0 -73
  120. package/dist/src/engine/quantum.d.ts +0 -1
  121. package/dist/src/engine/security.d.ts +45 -9
  122. package/dist/src/engine/tkx.d.ts +0 -53
  123. package/dist/src/engine/wcag.d.ts +0 -1
  124. package/dist/src/headless/index.d.ts +0 -1
  125. package/dist/src/headless/useControllable.d.ts +0 -15
  126. package/dist/src/headless/useDebounce.d.ts +0 -12
  127. package/dist/src/headless/useDisclosure.d.ts +0 -13
  128. package/dist/src/headless/useFormState.d.ts +0 -13
  129. package/dist/src/headless/useInfiniteQuery.d.ts +0 -11
  130. package/dist/src/headless/useIntersectionObserver.d.ts +0 -10
  131. package/dist/src/headless/useListSelection.d.ts +0 -9
  132. package/dist/src/headless/useLocalStorage.d.ts +0 -8
  133. package/dist/src/headless/useMediaQuery.d.ts +0 -10
  134. package/dist/src/headless/useRovingTabIndex.d.ts +0 -15
  135. package/dist/src/headless/useSSE.d.ts +0 -9
  136. package/dist/src/headless/useThrottle.d.ts +0 -7
  137. package/dist/src/headless/useWebSocket.d.ts +0 -9
  138. package/dist/src/hooks/index.d.ts +0 -1
  139. package/dist/src/i18n/I18nProvider.d.ts +0 -1
  140. package/dist/src/i18n/index.d.ts +0 -1
  141. package/dist/src/quantum/index.d.ts +0 -1
  142. package/dist/src/realtime/index.d.ts +0 -1
  143. package/dist/src/themes/index.d.ts +0 -1
  144. package/package.json +5 -3
  145. package/dist/TkxForm-BaO4wvXt.js +0 -320
  146. package/dist/TkxForm-M6ttomry.cjs +0 -12
  147. package/dist/chunk-Bmb41Sf3.cjs +0 -1
  148. package/dist/hooks-6pRsPOyG.js +0 -58
  149. package/dist/hooks-mivgRljH.cjs +0 -1
  150. package/dist/index.d.ts.map +0 -1
  151. package/dist/src/a11y/index.d.ts.map +0 -1
  152. package/dist/src/charts/TkxAreaChart.d.ts.map +0 -1
  153. package/dist/src/charts/TkxBarChart.d.ts.map +0 -1
  154. package/dist/src/charts/TkxDonutChart.d.ts.map +0 -1
  155. package/dist/src/charts/TkxLineChart.d.ts.map +0 -1
  156. package/dist/src/charts/TkxPieChart.d.ts.map +0 -1
  157. package/dist/src/charts/TkxRadarChart.d.ts.map +0 -1
  158. package/dist/src/charts/TkxScatterChart.d.ts.map +0 -1
  159. package/dist/src/charts/index.d.ts.map +0 -1
  160. package/dist/src/charts/shared.d.ts.map +0 -1
  161. package/dist/src/components/TkxAIChatBubble.d.ts.map +0 -1
  162. package/dist/src/components/TkxAIConfidenceBar.d.ts.map +0 -1
  163. package/dist/src/components/TkxAIThinking.d.ts.map +0 -1
  164. package/dist/src/components/TkxAccordion.d.ts.map +0 -1
  165. package/dist/src/components/TkxAffix.d.ts.map +0 -1
  166. package/dist/src/components/TkxAlert.d.ts.map +0 -1
  167. package/dist/src/components/TkxAnchor.d.ts.map +0 -1
  168. package/dist/src/components/TkxAppBar.d.ts.map +0 -1
  169. package/dist/src/components/TkxAutocomplete.d.ts.map +0 -1
  170. package/dist/src/components/TkxAvatar.d.ts.map +0 -1
  171. package/dist/src/components/TkxBadge.d.ts.map +0 -1
  172. package/dist/src/components/TkxBottomNav.d.ts.map +0 -1
  173. package/dist/src/components/TkxBreadcrumb.d.ts.map +0 -1
  174. package/dist/src/components/TkxButton.d.ts.map +0 -1
  175. package/dist/src/components/TkxCard.d.ts.map +0 -1
  176. package/dist/src/components/TkxCarousel.d.ts.map +0 -1
  177. package/dist/src/components/TkxCascader.d.ts.map +0 -1
  178. package/dist/src/components/TkxChat.d.ts.map +0 -1
  179. package/dist/src/components/TkxCheckbox.d.ts.map +0 -1
  180. package/dist/src/components/TkxClock.d.ts.map +0 -1
  181. package/dist/src/components/TkxColorPicker.d.ts.map +0 -1
  182. package/dist/src/components/TkxCommand.d.ts.map +0 -1
  183. package/dist/src/components/TkxConfigProvider.d.ts.map +0 -1
  184. package/dist/src/components/TkxDataGrid.d.ts.map +0 -1
  185. package/dist/src/components/TkxDatePicker.d.ts.map +0 -1
  186. package/dist/src/components/TkxDivider.d.ts.map +0 -1
  187. package/dist/src/components/TkxDrawer.d.ts.map +0 -1
  188. package/dist/src/components/TkxDropdown.d.ts.map +0 -1
  189. package/dist/src/components/TkxEmpty.d.ts.map +0 -1
  190. package/dist/src/components/TkxFileUpload.d.ts.map +0 -1
  191. package/dist/src/components/TkxForm.d.ts.map +0 -1
  192. package/dist/src/components/TkxIcon.d.ts.map +0 -1
  193. package/dist/src/components/TkxImage.d.ts.map +0 -1
  194. package/dist/src/components/TkxInput.d.ts.map +0 -1
  195. package/dist/src/components/TkxLayout.d.ts.map +0 -1
  196. package/dist/src/components/TkxList.d.ts.map +0 -1
  197. package/dist/src/components/TkxLiveFeed.d.ts.map +0 -1
  198. package/dist/src/components/TkxLiveLog.d.ts.map +0 -1
  199. package/dist/src/components/TkxLiveMetrics.d.ts.map +0 -1
  200. package/dist/src/components/TkxLogo.d.ts.map +0 -1
  201. package/dist/src/components/TkxMarkdown.d.ts.map +0 -1
  202. package/dist/src/components/TkxMasonry.d.ts.map +0 -1
  203. package/dist/src/components/TkxMentions.d.ts.map +0 -1
  204. package/dist/src/components/TkxMenu.d.ts.map +0 -1
  205. package/dist/src/components/TkxModal.d.ts.map +0 -1
  206. package/dist/src/components/TkxNumberInput.d.ts.map +0 -1
  207. package/dist/src/components/TkxOTP.d.ts.map +0 -1
  208. package/dist/src/components/TkxPagination.d.ts.map +0 -1
  209. package/dist/src/components/TkxPlayground.d.ts.map +0 -1
  210. package/dist/src/components/TkxPopover.d.ts.map +0 -1
  211. package/dist/src/components/TkxProgress.d.ts.map +0 -1
  212. package/dist/src/components/TkxQRCode.d.ts.map +0 -1
  213. package/dist/src/components/TkxQuantumForm.d.ts.map +0 -1
  214. package/dist/src/components/TkxRadio.d.ts.map +0 -1
  215. package/dist/src/components/TkxRating.d.ts.map +0 -1
  216. package/dist/src/components/TkxRealTimeChart.d.ts.map +0 -1
  217. package/dist/src/components/TkxResult.d.ts.map +0 -1
  218. package/dist/src/components/TkxRichTextDisplay.d.ts.map +0 -1
  219. package/dist/src/components/TkxSegmented.d.ts.map +0 -1
  220. package/dist/src/components/TkxSelect.d.ts.map +0 -1
  221. package/dist/src/components/TkxSkeleton.d.ts.map +0 -1
  222. package/dist/src/components/TkxSlider.d.ts.map +0 -1
  223. package/dist/src/components/TkxSnackbar.d.ts.map +0 -1
  224. package/dist/src/components/TkxSpeedDial.d.ts.map +0 -1
  225. package/dist/src/components/TkxSpin.d.ts.map +0 -1
  226. package/dist/src/components/TkxStatistic.d.ts.map +0 -1
  227. package/dist/src/components/TkxStepper.d.ts.map +0 -1
  228. package/dist/src/components/TkxTable.d.ts.map +0 -1
  229. package/dist/src/components/TkxTabs.d.ts.map +0 -1
  230. package/dist/src/components/TkxTag.d.ts.map +0 -1
  231. package/dist/src/components/TkxThemeBuilder.d.ts.map +0 -1
  232. package/dist/src/components/TkxTimeline.d.ts.map +0 -1
  233. package/dist/src/components/TkxToast.d.ts.map +0 -1
  234. package/dist/src/components/TkxToggle.d.ts.map +0 -1
  235. package/dist/src/components/TkxToolbar.d.ts.map +0 -1
  236. package/dist/src/components/TkxTooltip.d.ts.map +0 -1
  237. package/dist/src/components/TkxTour.d.ts.map +0 -1
  238. package/dist/src/components/TkxTransferList.d.ts.map +0 -1
  239. package/dist/src/components/TkxTreeView.d.ts.map +0 -1
  240. package/dist/src/components/TkxTypography.d.ts.map +0 -1
  241. package/dist/src/components/TkxVideoPlayer.d.ts.map +0 -1
  242. package/dist/src/components/TkxWatermark.d.ts.map +0 -1
  243. package/dist/src/components/index.d.ts.map +0 -1
  244. package/dist/src/engine/css.d.ts.map +0 -1
  245. package/dist/src/engine/index.d.ts.map +0 -1
  246. package/dist/src/engine/quantum-ai.d.ts.map +0 -1
  247. package/dist/src/engine/quantum.d.ts.map +0 -1
  248. package/dist/src/engine/security.d.ts.map +0 -1
  249. package/dist/src/engine/tkx.d.ts.map +0 -1
  250. package/dist/src/engine/wcag.d.ts.map +0 -1
  251. package/dist/src/headless/index.d.ts.map +0 -1
  252. package/dist/src/headless/useControllable.d.ts.map +0 -1
  253. package/dist/src/headless/useDebounce.d.ts.map +0 -1
  254. package/dist/src/headless/useDisclosure.d.ts.map +0 -1
  255. package/dist/src/headless/useFormState.d.ts.map +0 -1
  256. package/dist/src/headless/useInfiniteQuery.d.ts.map +0 -1
  257. package/dist/src/headless/useIntersectionObserver.d.ts.map +0 -1
  258. package/dist/src/headless/useListSelection.d.ts.map +0 -1
  259. package/dist/src/headless/useLocalStorage.d.ts.map +0 -1
  260. package/dist/src/headless/useMediaQuery.d.ts.map +0 -1
  261. package/dist/src/headless/useRovingTabIndex.d.ts.map +0 -1
  262. package/dist/src/headless/useSSE.d.ts.map +0 -1
  263. package/dist/src/headless/useThrottle.d.ts.map +0 -1
  264. package/dist/src/headless/useWebSocket.d.ts.map +0 -1
  265. package/dist/src/hooks/index.d.ts.map +0 -1
  266. package/dist/src/i18n/I18nProvider.d.ts.map +0 -1
  267. package/dist/src/i18n/index.d.ts.map +0 -1
  268. package/dist/src/quantum/index.d.ts.map +0 -1
  269. package/dist/src/realtime/index.d.ts.map +0 -1
  270. package/dist/src/themes/index.d.ts.map +0 -1
  271. package/dist/themes-BbJanqiC.js +0 -498
  272. package/dist/themes-CMq2vWXj.cjs +0 -2
  273. package/dist/tkx-BoP5V5zy.cjs +0 -4
  274. package/dist/tkx-mOKMzvUK.js +0 -1174
  275. package/src/a11y/index.tsx +0 -87
  276. package/src/charts/TkxAreaChart.tsx +0 -121
  277. package/src/charts/TkxBarChart.tsx +0 -117
  278. package/src/charts/TkxDonutChart.tsx +0 -164
  279. package/src/charts/TkxLineChart.tsx +0 -137
  280. package/src/charts/TkxPieChart.tsx +0 -103
  281. package/src/charts/TkxRadarChart.tsx +0 -92
  282. package/src/charts/TkxScatterChart.tsx +0 -104
  283. package/src/charts/index.ts +0 -22
  284. package/src/charts/shared.ts +0 -47
  285. package/src/components/TkxAIChatBubble.tsx +0 -256
  286. package/src/components/TkxAIConfidenceBar.tsx +0 -133
  287. package/src/components/TkxAIThinking.tsx +0 -193
  288. package/src/components/TkxAccordion.tsx +0 -590
  289. package/src/components/TkxAffix.tsx +0 -140
  290. package/src/components/TkxAlert.tsx +0 -94
  291. package/src/components/TkxAnchor.tsx +0 -195
  292. package/src/components/TkxAppBar.tsx +0 -262
  293. package/src/components/TkxAutocomplete.tsx +0 -455
  294. package/src/components/TkxAvatar.tsx +0 -103
  295. package/src/components/TkxBadge.tsx +0 -75
  296. package/src/components/TkxBottomNav.tsx +0 -241
  297. package/src/components/TkxBreadcrumb.tsx +0 -324
  298. package/src/components/TkxButton.tsx +0 -155
  299. package/src/components/TkxCard.tsx +0 -96
  300. package/src/components/TkxCarousel.tsx +0 -554
  301. package/src/components/TkxCascader.tsx +0 -278
  302. package/src/components/TkxChat.tsx +0 -356
  303. package/src/components/TkxCheckbox.tsx +0 -220
  304. package/src/components/TkxClock.tsx +0 -603
  305. package/src/components/TkxColorPicker.tsx +0 -635
  306. package/src/components/TkxCommand.tsx +0 -646
  307. package/src/components/TkxConfigProvider.tsx +0 -460
  308. package/src/components/TkxDataGrid.tsx +0 -941
  309. package/src/components/TkxDatePicker.tsx +0 -1625
  310. package/src/components/TkxDivider.tsx +0 -51
  311. package/src/components/TkxDrawer.tsx +0 -236
  312. package/src/components/TkxDropdown.tsx +0 -804
  313. package/src/components/TkxEmpty.tsx +0 -221
  314. package/src/components/TkxFileUpload.tsx +0 -373
  315. package/src/components/TkxForm.tsx +0 -683
  316. package/src/components/TkxIcon.tsx +0 -685
  317. package/src/components/TkxImage.tsx +0 -279
  318. package/src/components/TkxInput.tsx +0 -103
  319. package/src/components/TkxLayout.tsx +0 -649
  320. package/src/components/TkxList.tsx +0 -244
  321. package/src/components/TkxLiveFeed.tsx +0 -331
  322. package/src/components/TkxLiveLog.tsx +0 -472
  323. package/src/components/TkxLiveMetrics.tsx +0 -315
  324. package/src/components/TkxLogo.tsx +0 -299
  325. package/src/components/TkxMarkdown.tsx +0 -855
  326. package/src/components/TkxMasonry.tsx +0 -178
  327. package/src/components/TkxMentions.tsx +0 -212
  328. package/src/components/TkxMenu.tsx +0 -1044
  329. package/src/components/TkxModal.tsx +0 -122
  330. package/src/components/TkxNumberInput.tsx +0 -410
  331. package/src/components/TkxOTP.tsx +0 -297
  332. package/src/components/TkxPagination.tsx +0 -390
  333. package/src/components/TkxPlayground.tsx +0 -845
  334. package/src/components/TkxPopover.tsx +0 -297
  335. package/src/components/TkxProgress.tsx +0 -114
  336. package/src/components/TkxQRCode.tsx +0 -176
  337. package/src/components/TkxQuantumForm.tsx +0 -594
  338. package/src/components/TkxRadio.tsx +0 -286
  339. package/src/components/TkxRating.tsx +0 -288
  340. package/src/components/TkxRealTimeChart.tsx +0 -383
  341. package/src/components/TkxResult.tsx +0 -130
  342. package/src/components/TkxRichTextDisplay.tsx +0 -396
  343. package/src/components/TkxSegmented.tsx +0 -171
  344. package/src/components/TkxSelect.tsx +0 -1130
  345. package/src/components/TkxSkeleton.tsx +0 -107
  346. package/src/components/TkxSlider.tsx +0 -495
  347. package/src/components/TkxSnackbar.tsx +0 -316
  348. package/src/components/TkxSpeedDial.tsx +0 -397
  349. package/src/components/TkxSpin.tsx +0 -263
  350. package/src/components/TkxStatistic.tsx +0 -263
  351. package/src/components/TkxStepper.tsx +0 -487
  352. package/src/components/TkxTable.tsx +0 -424
  353. package/src/components/TkxTabs.tsx +0 -126
  354. package/src/components/TkxTag.tsx +0 -321
  355. package/src/components/TkxThemeBuilder.tsx +0 -687
  356. package/src/components/TkxTimeline.tsx +0 -305
  357. package/src/components/TkxToast.tsx +0 -287
  358. package/src/components/TkxToggle.tsx +0 -95
  359. package/src/components/TkxToolbar.tsx +0 -262
  360. package/src/components/TkxTooltip.tsx +0 -85
  361. package/src/components/TkxTour.tsx +0 -241
  362. package/src/components/TkxTransferList.tsx +0 -489
  363. package/src/components/TkxTreeView.tsx +0 -423
  364. package/src/components/TkxTypography.tsx +0 -267
  365. package/src/components/TkxVideoPlayer.tsx +0 -1015
  366. package/src/components/TkxWatermark.tsx +0 -145
  367. package/src/components/index.ts +0 -80
  368. package/src/engine/css.ts +0 -126
  369. package/src/engine/index.ts +0 -12
  370. package/src/engine/quantum-ai.ts +0 -1045
  371. package/src/engine/quantum.ts +0 -207
  372. package/src/engine/security.ts +0 -232
  373. package/src/engine/tkx.ts +0 -1084
  374. package/src/engine/wcag.ts +0 -276
  375. package/src/headless/index.ts +0 -52
  376. package/src/headless/useControllable.ts +0 -42
  377. package/src/headless/useDebounce.ts +0 -37
  378. package/src/headless/useDisclosure.ts +0 -30
  379. package/src/headless/useFormState.ts +0 -113
  380. package/src/headless/useInfiniteQuery.ts +0 -155
  381. package/src/headless/useIntersectionObserver.ts +0 -53
  382. package/src/headless/useListSelection.ts +0 -103
  383. package/src/headless/useLocalStorage.ts +0 -48
  384. package/src/headless/useMediaQuery.ts +0 -39
  385. package/src/headless/useRovingTabIndex.ts +0 -86
  386. package/src/headless/useSSE.ts +0 -167
  387. package/src/headless/useThrottle.ts +0 -48
  388. package/src/headless/useWebSocket.ts +0 -231
  389. package/src/hooks/index.ts +0 -122
  390. package/src/i18n/I18nProvider.tsx +0 -36
  391. package/src/i18n/index.ts +0 -877
  392. package/src/quantum/index.ts +0 -39
  393. package/src/realtime/index.ts +0 -21
  394. package/src/styles/global.css +0 -167
  395. package/src/themes/index.ts +0 -294
@@ -1,635 +0,0 @@
1
- 'use client';
2
-
3
- import {
4
- useState,
5
- useEffect,
6
- useRef,
7
- useCallback,
8
- type CSSProperties,
9
- type ChangeEvent,
10
- } from 'react';
11
- import { createPortal } from 'react-dom';
12
- import { useTheme } from '../themes';
13
-
14
- // ── Types ─────────────────────────────────────────────────────────────────────
15
-
16
- export type ColorFormat = 'hex' | 'rgb' | 'hsl';
17
-
18
- export interface TkxColorPickerProps {
19
- value?: string;
20
- defaultValue?: string;
21
- onChange?: (value: string, format: ColorFormat) => void;
22
- format?: ColorFormat;
23
- showAlpha?: boolean;
24
- presets?: string[];
25
- disabled?: boolean;
26
- size?: 'sm' | 'md' | 'lg';
27
- placeholder?: string;
28
- label?: string;
29
- style?: CSSProperties;
30
- className?: string;
31
- }
32
-
33
- // ── Color math ────────────────────────────────────────────────────────────────
34
-
35
- function hexToHsl(hex: string): [number, number, number] {
36
- let r = 0, g = 0, b = 0;
37
- const clean = hex.replace('#', '');
38
- if (clean.length === 3) {
39
- r = parseInt(clean[0] + clean[0], 16);
40
- g = parseInt(clean[1] + clean[1], 16);
41
- b = parseInt(clean[2] + clean[2], 16);
42
- } else if (clean.length >= 6) {
43
- r = parseInt(clean.slice(0, 2), 16);
44
- g = parseInt(clean.slice(2, 4), 16);
45
- b = parseInt(clean.slice(4, 6), 16);
46
- }
47
- r /= 255; g /= 255; b /= 255;
48
- const max = Math.max(r, g, b), min = Math.min(r, g, b);
49
- let h = 0, s = 0;
50
- const l = (max + min) / 2;
51
- if (max !== min) {
52
- const d = max - min;
53
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
54
- switch (max) {
55
- case r: h = ((g - b) / d + (g < b ? 6 : 0)) / 6; break;
56
- case g: h = ((b - r) / d + 2) / 6; break;
57
- case b: h = ((r - g) / d + 4) / 6; break;
58
- }
59
- }
60
- return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)];
61
- }
62
-
63
- function hslToHex(h: number, s: number, l: number): string {
64
- s /= 100; l /= 100;
65
- const a = s * Math.min(l, 1 - l);
66
- const f = (n: number) => {
67
- const k = (n + h / 30) % 12;
68
- const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
69
- return Math.round(255 * color).toString(16).padStart(2, '0');
70
- };
71
- return `#${f(0)}${f(8)}${f(4)}`;
72
- }
73
-
74
- function hexToRgb(hex: string): [number, number, number] {
75
- const clean = hex.replace('#', '');
76
- const r = parseInt(clean.slice(0, 2), 16);
77
- const g = parseInt(clean.slice(2, 4), 16);
78
- const b = parseInt(clean.slice(4, 6), 16);
79
- return [isNaN(r) ? 0 : r, isNaN(g) ? 0 : g, isNaN(b) ? 0 : b];
80
- }
81
-
82
- function rgbToHex(r: number, g: number, b: number): string {
83
- return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
84
- }
85
-
86
- function isValidHex(hex: string): boolean {
87
- return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(hex);
88
- }
89
-
90
- function formatColor(hex: string, alpha: number, format: ColorFormat): string {
91
- if (format === 'hex') return alpha < 1 ? `${hex}${Math.round(alpha * 255).toString(16).padStart(2, '0')}` : hex;
92
- const [r, g, b] = hexToRgb(hex);
93
- if (format === 'rgb') return alpha < 1 ? `rgba(${r}, ${g}, ${b}, ${alpha.toFixed(2)})` : `rgb(${r}, ${g}, ${b})`;
94
- const [h, s, l] = hexToHsl(hex);
95
- if (format === 'hsl') return alpha < 1 ? `hsla(${h}, ${s}%, ${l}%, ${alpha.toFixed(2)})` : `hsl(${h}, ${s}%, ${l}%)`;
96
- return hex;
97
- }
98
-
99
- // ── Default presets ───────────────────────────────────────────────────────────
100
-
101
- const DEFAULT_PRESETS = [
102
- '#ef4444', '#f97316', '#eab308', '#22c55e', '#06b6d4',
103
- '#3b82f6', '#8b5cf6', '#ec4899', '#ffffff', '#94a3b8',
104
- '#475569', '#0f172a',
105
- ];
106
-
107
- // ── Saturation/Brightness picker canvas ──────────────────────────────────────
108
-
109
- function SatBrightPicker({
110
- hue,
111
- sat,
112
- bright,
113
- onChange,
114
- }: {
115
- hue: number;
116
- sat: number;
117
- bright: number;
118
- onChange: (s: number, b: number) => void;
119
- }) {
120
- const canvasRef = useRef<HTMLDivElement>(null);
121
- const dragging = useRef(false);
122
-
123
- const pick = useCallback((e: MouseEvent | React.MouseEvent) => {
124
- const el = canvasRef.current;
125
- if (!el) return;
126
- const rect = el.getBoundingClientRect();
127
- const x = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
128
- const y = Math.max(0, Math.min(1, (e.clientY - rect.top) / rect.height));
129
- onChange(Math.round(x * 100), Math.round((1 - y) * 100));
130
- }, [onChange]);
131
-
132
- useEffect(() => {
133
- const onMove = (e: MouseEvent) => { if (dragging.current) pick(e); };
134
- const onUp = () => { dragging.current = false; };
135
- document.addEventListener('mousemove', onMove);
136
- document.addEventListener('mouseup', onUp);
137
- return () => {
138
- document.removeEventListener('mousemove', onMove);
139
- document.removeEventListener('mouseup', onUp);
140
- };
141
- }, [pick]);
142
-
143
- const thumbX = `${sat}%`;
144
- const thumbY = `${100 - bright}%`;
145
-
146
- return (
147
- <div
148
- ref={canvasRef}
149
- style={{
150
- position: 'relative',
151
- width: '100%',
152
- height: '160px',
153
- borderRadius: '6px',
154
- cursor: 'crosshair',
155
- background: `hsl(${hue}, 100%, 50%)`,
156
- flexShrink: 0,
157
- }}
158
- onMouseDown={(e) => { dragging.current = true; pick(e); }}
159
- >
160
- {/* White gradient left→right */}
161
- <div style={{
162
- position: 'absolute', inset: 0, borderRadius: '6px',
163
- background: 'linear-gradient(to right, #ffffff, transparent)',
164
- }} />
165
- {/* Black gradient top→bottom */}
166
- <div style={{
167
- position: 'absolute', inset: 0, borderRadius: '6px',
168
- background: 'linear-gradient(to bottom, transparent, #000000)',
169
- }} />
170
- {/* Thumb */}
171
- <div style={{
172
- position: 'absolute',
173
- left: thumbX,
174
- top: thumbY,
175
- transform: 'translate(-50%, -50%)',
176
- width: '14px',
177
- height: '14px',
178
- borderRadius: '50%',
179
- border: '2px solid white',
180
- boxShadow: '0 0 0 1px rgba(0,0,0,0.4)',
181
- pointerEvents: 'none',
182
- backgroundColor: hslToHex(hue, sat, bright / 2 + 25),
183
- }} />
184
- </div>
185
- );
186
- }
187
-
188
- // ── Hue slider ────────────────────────────────────────────────────────────────
189
-
190
- function HueSlider({ hue, onChange }: { hue: number; onChange: (h: number) => void }) {
191
- const trackRef = useRef<HTMLDivElement>(null);
192
- const dragging = useRef(false);
193
-
194
- const pick = useCallback((e: MouseEvent | React.MouseEvent) => {
195
- const el = trackRef.current;
196
- if (!el) return;
197
- const rect = el.getBoundingClientRect();
198
- const x = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
199
- onChange(Math.round(x * 360));
200
- }, [onChange]);
201
-
202
- useEffect(() => {
203
- const onMove = (e: MouseEvent) => { if (dragging.current) pick(e); };
204
- const onUp = () => { dragging.current = false; };
205
- document.addEventListener('mousemove', onMove);
206
- document.addEventListener('mouseup', onUp);
207
- return () => {
208
- document.removeEventListener('mousemove', onMove);
209
- document.removeEventListener('mouseup', onUp);
210
- };
211
- }, [pick]);
212
-
213
- return (
214
- <div
215
- ref={trackRef}
216
- style={{
217
- position: 'relative',
218
- height: '12px',
219
- borderRadius: '6px',
220
- cursor: 'pointer',
221
- background: 'linear-gradient(to right, #ff0000, #ffff00, #00ff00, #00ffff, #0000ff, #ff00ff, #ff0000)',
222
- }}
223
- onMouseDown={(e) => { dragging.current = true; pick(e); }}
224
- >
225
- <div style={{
226
- position: 'absolute',
227
- left: `${(hue / 360) * 100}%`,
228
- top: '50%',
229
- transform: 'translate(-50%, -50%)',
230
- width: '16px',
231
- height: '16px',
232
- borderRadius: '50%',
233
- border: '2px solid white',
234
- boxShadow: '0 0 0 1px rgba(0,0,0,0.3)',
235
- backgroundColor: `hsl(${hue}, 100%, 50%)`,
236
- pointerEvents: 'none',
237
- }} />
238
- </div>
239
- );
240
- }
241
-
242
- // ── Alpha slider ──────────────────────────────────────────────────────────────
243
-
244
- function AlphaSlider({ alpha, hex, onChange }: { alpha: number; hex: string; onChange: (a: number) => void }) {
245
- const trackRef = useRef<HTMLDivElement>(null);
246
- const dragging = useRef(false);
247
-
248
- const pick = useCallback((e: MouseEvent | React.MouseEvent) => {
249
- const el = trackRef.current;
250
- if (!el) return;
251
- const rect = el.getBoundingClientRect();
252
- const x = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
253
- onChange(Math.round(x * 100) / 100);
254
- }, [onChange]);
255
-
256
- useEffect(() => {
257
- const onMove = (e: MouseEvent) => { if (dragging.current) pick(e); };
258
- const onUp = () => { dragging.current = false; };
259
- document.addEventListener('mousemove', onMove);
260
- document.addEventListener('mouseup', onUp);
261
- return () => {
262
- document.removeEventListener('mousemove', onMove);
263
- document.removeEventListener('mouseup', onUp);
264
- };
265
- }, [pick]);
266
-
267
- const [r, g, b] = hexToRgb(hex);
268
-
269
- return (
270
- <div style={{ position: 'relative' }}>
271
- {/* Checkerboard background */}
272
- <div style={{
273
- position: 'absolute', inset: 0, borderRadius: '6px',
274
- backgroundImage: 'repeating-conic-gradient(#ccc 0% 25%, white 0% 50%)',
275
- backgroundSize: '8px 8px',
276
- }} />
277
- <div
278
- ref={trackRef}
279
- style={{
280
- position: 'relative',
281
- height: '12px',
282
- borderRadius: '6px',
283
- cursor: 'pointer',
284
- background: `linear-gradient(to right, rgba(${r},${g},${b},0), rgba(${r},${g},${b},1))`,
285
- }}
286
- onMouseDown={(e) => { dragging.current = true; pick(e); }}
287
- >
288
- <div style={{
289
- position: 'absolute',
290
- left: `${alpha * 100}%`,
291
- top: '50%',
292
- transform: 'translate(-50%, -50%)',
293
- width: '16px',
294
- height: '16px',
295
- borderRadius: '50%',
296
- border: '2px solid white',
297
- boxShadow: '0 0 0 1px rgba(0,0,0,0.3)',
298
- backgroundColor: `rgba(${r},${g},${b},${alpha})`,
299
- pointerEvents: 'none',
300
- }} />
301
- </div>
302
- </div>
303
- );
304
- }
305
-
306
- // ── Main component ────────────────────────────────────────────────────────────
307
-
308
- export function TkxColorPicker({
309
- value,
310
- defaultValue = '#3b82f6',
311
- onChange,
312
- format = 'hex',
313
- showAlpha = false,
314
- presets = DEFAULT_PRESETS,
315
- disabled = false,
316
- size = 'md',
317
- placeholder,
318
- label,
319
- style,
320
- }: TkxColorPickerProps) {
321
- const theme = useTheme();
322
- const triggerRef = useRef<HTMLButtonElement>(null);
323
- const popoverRef = useRef<HTMLDivElement>(null);
324
- const [isOpen, setIsOpen] = useState(false);
325
-
326
- const controlled = value !== undefined;
327
- const [internalHex, setInternalHex] = useState<string>(
328
- controlled ? (value || defaultValue) : defaultValue
329
- );
330
- const hex = controlled ? (value || defaultValue) : internalHex;
331
-
332
- const [alpha, setAlpha] = useState(1);
333
- const [hexInput, setHexInput] = useState(hex);
334
- const [popPos, setPopPos] = useState({ top: 0, left: 0 });
335
-
336
- const [hue, sat, light] = hexToHsl(isValidHex(hex) ? hex : defaultValue);
337
- // Convert HSL lightness → brightness for SB picker
338
- // brightness ≈ lightness + saturation * min(lightness, 1-lightness)
339
- const bright = Math.round(light + (sat / 100) * Math.min(light / 100, 1 - light / 100) * 100);
340
-
341
- const updateColor = useCallback((newHex: string, newAlpha = alpha) => {
342
- if (!isValidHex(newHex)) return;
343
- setHexInput(newHex);
344
- if (!controlled) setInternalHex(newHex);
345
- onChange?.(formatColor(newHex, newAlpha, format), format);
346
- }, [alpha, controlled, format, onChange]);
347
-
348
- // Sync hexInput when value changes externally
349
- useEffect(() => {
350
- if (controlled && value && isValidHex(value)) {
351
- setHexInput(value);
352
- }
353
- }, [controlled, value]);
354
-
355
- // Position popover
356
- const openPicker = () => {
357
- if (disabled) return;
358
- const trigger = triggerRef.current;
359
- if (!trigger) return;
360
- const rect = trigger.getBoundingClientRect();
361
- const spaceBelow = window.innerHeight - rect.bottom;
362
- const top = spaceBelow > 320 ? rect.bottom + 6 : rect.top - 326;
363
- setPopPos({ top: top + window.scrollY, left: rect.left + window.scrollX });
364
- setIsOpen(true);
365
- };
366
-
367
- // Close on outside click
368
- useEffect(() => {
369
- if (!isOpen) return;
370
- const handler = (e: MouseEvent) => {
371
- if (
372
- popoverRef.current && !popoverRef.current.contains(e.target as Node) &&
373
- triggerRef.current && !triggerRef.current.contains(e.target as Node)
374
- ) {
375
- setIsOpen(false);
376
- }
377
- };
378
- document.addEventListener('mousedown', handler);
379
- return () => document.removeEventListener('mousedown', handler);
380
- }, [isOpen]);
381
-
382
- // Close on Escape
383
- useEffect(() => {
384
- if (!isOpen) return;
385
- const handler = (e: KeyboardEvent) => { if (e.key === 'Escape') setIsOpen(false); };
386
- document.addEventListener('keydown', handler);
387
- return () => document.removeEventListener('keydown', handler);
388
- }, [isOpen]);
389
-
390
- const handleSatBright = (s: number, b: number) => {
391
- // Convert SB + hue back to hex
392
- // Using HSL approximation: L = B * (1 - S/2/100), S_hsl = (B - L) / min(L, 1-L)
393
- const bNorm = b / 100;
394
- const sNorm = s / 100;
395
- const l = bNorm * (1 - sNorm / 2);
396
- const sHsl = l === 0 || l === 1 ? 0 : (bNorm - l) / Math.min(l, 1 - l);
397
- const newHex = hslToHex(hue, Math.round(sHsl * 100), Math.round(l * 100));
398
- updateColor(newHex);
399
- };
400
-
401
- const handleHue = (newHue: number) => {
402
- const newHex = hslToHex(newHue, sat, light);
403
- updateColor(newHex);
404
- };
405
-
406
- const handleAlpha = (a: number) => {
407
- setAlpha(a);
408
- onChange?.(formatColor(hex, a, format), format);
409
- };
410
-
411
- const handleHexInput = (e: ChangeEvent<HTMLInputElement>) => {
412
- const v = e.target.value;
413
- setHexInput(v);
414
- if (isValidHex(v)) updateColor(v);
415
- };
416
-
417
- const handleRgbInput = (channel: 'r' | 'g' | 'b', v: string) => {
418
- const n = Math.max(0, Math.min(255, parseInt(v) || 0));
419
- const [r, g, b] = hexToRgb(hex);
420
- const newHex = channel === 'r' ? rgbToHex(n, g, b)
421
- : channel === 'g' ? rgbToHex(r, n, b)
422
- : rgbToHex(r, g, n);
423
- updateColor(newHex);
424
- };
425
-
426
- const sizeMap = { sm: 28, md: 34, lg: 40 };
427
- const swatchSize = sizeMap[size];
428
- const [r, g, b] = hexToRgb(isValidHex(hex) ? hex : defaultValue);
429
-
430
- const triggerStyle: CSSProperties = {
431
- display: 'inline-flex',
432
- alignItems: 'center',
433
- gap: '8px',
434
- height: `${swatchSize}px`,
435
- padding: '4px 10px 4px 6px',
436
- borderRadius: '8px',
437
- border: `1px solid ${theme.border}`,
438
- backgroundColor: theme.surface,
439
- cursor: disabled ? 'not-allowed' : 'pointer',
440
- opacity: disabled ? 0.5 : 1,
441
- color: theme.text,
442
- fontSize: '13px',
443
- fontFamily: 'inherit',
444
- transition: 'border-color 0.15s',
445
- ...style,
446
- };
447
-
448
- const swatchStyle: CSSProperties = {
449
- width: `${swatchSize - 8}px`,
450
- height: `${swatchSize - 8}px`,
451
- borderRadius: '4px',
452
- backgroundColor: `rgba(${r},${g},${b},${alpha})`,
453
- border: `1px solid ${theme.border}`,
454
- flexShrink: 0,
455
- };
456
-
457
- const popStyle: CSSProperties = {
458
- position: 'absolute',
459
- top: popPos.top,
460
- left: popPos.left,
461
- zIndex: 9999,
462
- width: '260px',
463
- backgroundColor: theme.surface,
464
- border: `1px solid ${theme.border}`,
465
- borderRadius: '12px',
466
- padding: '16px',
467
- boxShadow: `0 8px 32px rgba(0,0,0,0.24)`,
468
- display: 'flex',
469
- flexDirection: 'column',
470
- gap: '12px',
471
- };
472
-
473
- const inputStyle: CSSProperties = {
474
- width: '100%',
475
- padding: '6px 10px',
476
- borderRadius: '6px',
477
- border: `1px solid ${theme.border}`,
478
- backgroundColor: theme.bg,
479
- color: theme.text,
480
- fontSize: '12px',
481
- fontFamily: 'monospace',
482
- outline: 'none',
483
- };
484
-
485
- const channelInputStyle: CSSProperties = {
486
- flex: 1,
487
- padding: '5px 6px',
488
- borderRadius: '6px',
489
- border: `1px solid ${theme.border}`,
490
- backgroundColor: theme.bg,
491
- color: theme.text,
492
- fontSize: '11px',
493
- textAlign: 'center',
494
- fontFamily: 'monospace',
495
- outline: 'none',
496
- };
497
-
498
- const presetDotStyle = (c: string): CSSProperties => ({
499
- width: '20px',
500
- height: '20px',
501
- borderRadius: '50%',
502
- backgroundColor: c,
503
- border: c.toLowerCase() === hex.toLowerCase()
504
- ? `2px solid ${theme.primary}`
505
- : `1px solid ${theme.border}`,
506
- cursor: 'pointer',
507
- flexShrink: 0,
508
- transition: 'transform 0.1s',
509
- });
510
-
511
- return (
512
- <>
513
- {label && (
514
- <label style={{ display: 'block', fontSize: '13px', color: theme.text, marginBottom: '6px', fontWeight: 500 }}>
515
- {label}
516
- </label>
517
- )}
518
- <button
519
- ref={triggerRef}
520
- type="button"
521
- style={triggerStyle}
522
- onClick={openPicker}
523
- disabled={disabled}
524
- aria-label={`Color picker, current color ${hex}`}
525
- aria-haspopup="dialog"
526
- aria-expanded={isOpen}
527
- >
528
- <div style={swatchStyle} />
529
- <span style={{ fontFamily: 'monospace', fontSize: '12px', color: theme.textMuted }}>
530
- {placeholder ?? formatColor(isValidHex(hex) ? hex : defaultValue, alpha, format)}
531
- </span>
532
- </button>
533
-
534
- {isOpen && createPortal(
535
- <div
536
- ref={popoverRef}
537
- style={popStyle}
538
- role="dialog"
539
- aria-label="Color picker"
540
- >
541
- {/* Saturation/Brightness picker */}
542
- <SatBrightPicker
543
- hue={hue}
544
- sat={sat}
545
- bright={light}
546
- onChange={handleSatBright}
547
- />
548
-
549
- {/* Hue slider */}
550
- <HueSlider hue={hue} onChange={handleHue} />
551
-
552
- {/* Alpha slider */}
553
- {showAlpha && (
554
- <AlphaSlider alpha={alpha} hex={isValidHex(hex) ? hex : defaultValue} onChange={handleAlpha} />
555
- )}
556
-
557
- {/* Hex input + preview swatch */}
558
- <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
559
- <div style={{
560
- width: '28px', height: '28px', borderRadius: '6px', flexShrink: 0,
561
- backgroundColor: `rgba(${r},${g},${b},${alpha})`,
562
- border: `1px solid ${theme.border}`,
563
- }} />
564
- <input
565
- style={inputStyle}
566
- value={hexInput}
567
- onChange={handleHexInput}
568
- maxLength={7}
569
- spellCheck={false}
570
- aria-label="Hex color value"
571
- />
572
- </div>
573
-
574
- {/* RGB inputs */}
575
- <div style={{ display: 'flex', gap: '6px', alignItems: 'center' }}>
576
- {(['r', 'g', 'b'] as const).map((ch) => {
577
- const val = ch === 'r' ? r : ch === 'g' ? g : b;
578
- return (
579
- <div key={ch} style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: '3px', alignItems: 'center' }}>
580
- <input
581
- style={channelInputStyle}
582
- type="number"
583
- min={0}
584
- max={255}
585
- value={val}
586
- onChange={(e) => handleRgbInput(ch, e.target.value)}
587
- aria-label={`${ch.toUpperCase()} channel`}
588
- />
589
- <span style={{ fontSize: '10px', color: theme.textMuted, textTransform: 'uppercase' }}>{ch}</span>
590
- </div>
591
- );
592
- })}
593
- {showAlpha && (
594
- <div style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: '3px', alignItems: 'center' }}>
595
- <input
596
- style={channelInputStyle}
597
- type="number"
598
- min={0}
599
- max={100}
600
- value={Math.round(alpha * 100)}
601
- onChange={(e) => handleAlpha(Math.max(0, Math.min(1, parseInt(e.target.value) / 100 || 0)))}
602
- aria-label="Alpha channel"
603
- />
604
- <span style={{ fontSize: '10px', color: theme.textMuted }}>A%</span>
605
- </div>
606
- )}
607
- </div>
608
-
609
- {/* Presets */}
610
- {presets.length > 0 && (
611
- <div>
612
- <div style={{ fontSize: '11px', color: theme.textMuted, marginBottom: '6px', fontWeight: 500 }}>
613
- Presets
614
- </div>
615
- <div style={{ display: 'flex', flexWrap: 'wrap', gap: '6px' }}>
616
- {presets.map((c) => (
617
- <button
618
- key={c}
619
- type="button"
620
- style={presetDotStyle(c)}
621
- onClick={() => updateColor(c)}
622
- aria-label={`Select color ${c}`}
623
- onMouseEnter={(e) => { (e.currentTarget as HTMLButtonElement).style.transform = 'scale(1.15)'; }}
624
- onMouseLeave={(e) => { (e.currentTarget as HTMLButtonElement).style.transform = 'scale(1)'; }}
625
- />
626
- ))}
627
- </div>
628
- </div>
629
- )}
630
- </div>,
631
- document.body
632
- )}
633
- </>
634
- );
635
- }