@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.7 → 0.2.9

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 (462) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/components/ui/accessibility-demo.d.ts +259 -0
  3. package/dist/components/ui/accessibility-demo.esm.js +265 -0
  4. package/dist/components/ui/accessibility-demo.js +265 -0
  5. package/dist/components/ui/advanced-component-architecture-demo.d.ts +718 -0
  6. package/dist/components/ui/advanced-component-architecture-demo.esm.js +860 -0
  7. package/dist/components/ui/advanced-component-architecture-demo.js +860 -0
  8. package/dist/components/ui/advanced-transition-system-demo.d.ts +660 -0
  9. package/dist/components/ui/advanced-transition-system-demo.esm.js +624 -0
  10. package/dist/components/ui/advanced-transition-system-demo.js +624 -0
  11. package/dist/components/ui/advanced-transition-system.d.ts +391 -0
  12. package/dist/components/ui/advanced-transition-system.esm.js +351 -0
  13. package/dist/components/ui/advanced-transition-system.js +351 -0
  14. package/dist/components/ui/animation/animated-container.d.ts +162 -0
  15. package/dist/components/ui/animation/animated-container.esm.js +143 -0
  16. package/dist/components/ui/animation/animated-container.js +143 -0
  17. package/dist/components/ui/animation/index.d.ts +9 -0
  18. package/dist/components/ui/animation/index.esm.js +19 -0
  19. package/dist/components/ui/animation/index.js +19 -0
  20. package/dist/components/ui/animation/staggered-container.d.ts +64 -0
  21. package/dist/components/ui/animation/staggered-container.esm.js +59 -0
  22. package/dist/components/ui/animation/staggered-container.js +59 -0
  23. package/dist/components/ui/animation-demo.d.ts +238 -0
  24. package/dist/components/ui/animation-demo.esm.js +218 -0
  25. package/dist/components/ui/animation-demo.js +218 -0
  26. package/dist/components/ui/badge.d.ts +28 -0
  27. package/dist/components/ui/badge.esm.js +30 -0
  28. package/dist/components/ui/badge.js +30 -0
  29. package/dist/components/ui/battery-conscious-animation-demo.d.ts +561 -0
  30. package/dist/components/ui/battery-conscious-animation-demo.esm.js +533 -0
  31. package/dist/components/ui/battery-conscious-animation-demo.js +533 -0
  32. package/dist/components/ui/border-radius-shadow-demo.d.ts +183 -0
  33. package/dist/components/ui/border-radius-shadow-demo.esm.js +176 -0
  34. package/dist/components/ui/border-radius-shadow-demo.js +176 -0
  35. package/dist/components/ui/button.d.ts +33 -0
  36. package/dist/components/ui/button.esm.js +30 -0
  37. package/dist/components/ui/button.js +30 -0
  38. package/dist/components/ui/card.d.ts +205 -0
  39. package/dist/components/ui/card.esm.js +182 -0
  40. package/dist/components/ui/card.js +182 -0
  41. package/dist/components/ui/checkbox.d.ts +26 -0
  42. package/dist/components/ui/checkbox.esm.js +30 -0
  43. package/dist/components/ui/checkbox.js +30 -0
  44. package/dist/components/ui/color-preview.d.ts +402 -0
  45. package/dist/components/ui/color-preview.esm.js +388 -0
  46. package/dist/components/ui/color-preview.js +388 -0
  47. package/dist/components/ui/data-display/chart.d.ts +646 -0
  48. package/dist/components/ui/data-display/chart.esm.js +625 -0
  49. package/dist/components/ui/data-display/chart.js +625 -0
  50. package/dist/components/ui/data-display/data-grid-simple.d.ts +73 -0
  51. package/dist/components/ui/data-display/data-grid-simple.esm.js +76 -0
  52. package/dist/components/ui/data-display/data-grid-simple.js +76 -0
  53. package/dist/components/ui/data-display/data-grid.d.ts +670 -0
  54. package/dist/components/ui/data-display/data-grid.esm.js +667 -0
  55. package/dist/components/ui/data-display/data-grid.js +667 -0
  56. package/dist/components/ui/data-display/list.d.ts +448 -0
  57. package/dist/components/ui/data-display/list.esm.js +448 -0
  58. package/dist/components/ui/data-display/list.js +448 -0
  59. package/dist/components/ui/data-display/table.d.ts +472 -0
  60. package/dist/components/ui/data-display/table.esm.js +474 -0
  61. package/dist/components/ui/data-display/table.js +474 -0
  62. package/dist/components/ui/data-display/timeline.d.ts +433 -0
  63. package/dist/components/ui/data-display/timeline.esm.js +436 -0
  64. package/dist/components/ui/data-display/timeline.js +436 -0
  65. package/dist/components/ui/data-display/tree.d.ts +594 -0
  66. package/dist/components/ui/data-display/tree.esm.js +570 -0
  67. package/dist/components/ui/data-display/tree.js +570 -0
  68. package/dist/components/ui/data-display/types.d.ts +534 -0
  69. package/dist/components/ui/data-display/types.esm.js +511 -0
  70. package/dist/components/ui/data-display/types.js +511 -0
  71. package/dist/components/ui/enterprise-mobile-experience-demo.d.ts +735 -0
  72. package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +699 -0
  73. package/dist/components/ui/enterprise-mobile-experience-demo.js +699 -0
  74. package/dist/components/ui/enterprise-mobile-experience.d.ts +461 -0
  75. package/dist/components/ui/enterprise-mobile-experience.esm.js +413 -0
  76. package/dist/components/ui/enterprise-mobile-experience.js +413 -0
  77. package/dist/components/ui/feedback/alert.d.ts +154 -0
  78. package/dist/components/ui/feedback/alert.esm.js +150 -0
  79. package/dist/components/ui/feedback/alert.js +150 -0
  80. package/dist/components/ui/feedback/progress.d.ts +288 -0
  81. package/dist/components/ui/feedback/progress.esm.js +269 -0
  82. package/dist/components/ui/feedback/progress.js +269 -0
  83. package/dist/components/ui/feedback/skeleton.d.ts +182 -0
  84. package/dist/components/ui/feedback/skeleton.esm.js +175 -0
  85. package/dist/components/ui/feedback/skeleton.js +175 -0
  86. package/dist/components/ui/feedback/toast.d.ts +277 -0
  87. package/dist/components/ui/feedback/toast.esm.js +256 -0
  88. package/dist/components/ui/feedback/toast.js +256 -0
  89. package/dist/components/ui/feedback/types.d.ts +123 -0
  90. package/dist/components/ui/feedback/types.esm.js +125 -0
  91. package/dist/components/ui/feedback/types.js +125 -0
  92. package/dist/components/ui/font-preview.d.ts +282 -0
  93. package/dist/components/ui/font-preview.esm.js +286 -0
  94. package/dist/components/ui/font-preview.js +286 -0
  95. package/dist/components/ui/form-demo.d.ts +544 -0
  96. package/dist/components/ui/form-demo.esm.js +516 -0
  97. package/dist/components/ui/form-demo.js +516 -0
  98. package/dist/components/ui/hardware-acceleration-demo.d.ts +540 -0
  99. package/dist/components/ui/hardware-acceleration-demo.esm.js +497 -0
  100. package/dist/components/ui/hardware-acceleration-demo.js +497 -0
  101. package/dist/components/ui/input.d.ts +33 -0
  102. package/dist/components/ui/input.esm.js +32 -0
  103. package/dist/components/ui/input.js +32 -0
  104. package/dist/components/ui/label.d.ts +13 -0
  105. package/dist/components/ui/label.esm.js +16 -0
  106. package/dist/components/ui/label.js +16 -0
  107. package/dist/components/ui/layout-demo.d.ts +352 -0
  108. package/dist/components/ui/layout-demo.esm.js +342 -0
  109. package/dist/components/ui/layout-demo.js +342 -0
  110. package/dist/components/ui/layouts/adaptive-layout.d.ts +132 -0
  111. package/dist/components/ui/layouts/adaptive-layout.esm.js +120 -0
  112. package/dist/components/ui/layouts/adaptive-layout.js +120 -0
  113. package/dist/components/ui/layouts/desktop-layout.d.ts +219 -0
  114. package/dist/components/ui/layouts/desktop-layout.esm.js +204 -0
  115. package/dist/components/ui/layouts/desktop-layout.js +204 -0
  116. package/dist/components/ui/layouts/index.d.ts +5 -0
  117. package/dist/components/ui/layouts/index.esm.js +10 -0
  118. package/dist/components/ui/layouts/index.js +10 -0
  119. package/dist/components/ui/layouts/mobile-layout.d.ts +158 -0
  120. package/dist/components/ui/layouts/mobile-layout.esm.js +152 -0
  121. package/dist/components/ui/layouts/mobile-layout.js +152 -0
  122. package/dist/components/ui/layouts/tablet-layout.d.ts +192 -0
  123. package/dist/components/ui/layouts/tablet-layout.esm.js +183 -0
  124. package/dist/components/ui/layouts/tablet-layout.js +183 -0
  125. package/dist/components/ui/mobile-form-validation.d.ts +439 -0
  126. package/dist/components/ui/mobile-form-validation.esm.js +418 -0
  127. package/dist/components/ui/mobile-form-validation.js +418 -0
  128. package/dist/components/ui/mobile-input-demo.d.ts +197 -0
  129. package/dist/components/ui/mobile-input-demo.esm.js +195 -0
  130. package/dist/components/ui/mobile-input-demo.js +195 -0
  131. package/dist/components/ui/mobile-input.d.ts +273 -0
  132. package/dist/components/ui/mobile-input.esm.js +216 -0
  133. package/dist/components/ui/mobile-input.js +216 -0
  134. package/dist/components/ui/mobile-skeleton-loading-demo.d.ts +628 -0
  135. package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +621 -0
  136. package/dist/components/ui/mobile-skeleton-loading-demo.js +621 -0
  137. package/dist/components/ui/navigation/breadcrumb.d.ts +149 -0
  138. package/dist/components/ui/navigation/breadcrumb.esm.js +155 -0
  139. package/dist/components/ui/navigation/breadcrumb.js +155 -0
  140. package/dist/components/ui/navigation/index.d.ts +25 -0
  141. package/dist/components/ui/navigation/index.esm.js +14 -0
  142. package/dist/components/ui/navigation/index.js +14 -0
  143. package/dist/components/ui/navigation/menu.d.ts +366 -0
  144. package/dist/components/ui/navigation/menu.esm.js +360 -0
  145. package/dist/components/ui/navigation/menu.js +360 -0
  146. package/dist/components/ui/navigation/navigation-demo.d.ts +169 -0
  147. package/dist/components/ui/navigation/navigation-demo.esm.js +317 -0
  148. package/dist/components/ui/navigation/navigation-demo.js +317 -0
  149. package/dist/components/ui/navigation/pagination.d.ts +261 -0
  150. package/dist/components/ui/navigation/pagination.esm.js +260 -0
  151. package/dist/components/ui/navigation/pagination.js +260 -0
  152. package/dist/components/ui/navigation/sidebar.d.ts +375 -0
  153. package/dist/components/ui/navigation/sidebar.esm.js +369 -0
  154. package/dist/components/ui/navigation/sidebar.js +369 -0
  155. package/dist/components/ui/navigation/stepper.d.ts +294 -0
  156. package/dist/components/ui/navigation/stepper.esm.js +292 -0
  157. package/dist/components/ui/navigation/stepper.js +292 -0
  158. package/dist/components/ui/navigation/tabs.d.ts +196 -0
  159. package/dist/components/ui/navigation/tabs.esm.js +194 -0
  160. package/dist/components/ui/navigation/tabs.js +194 -0
  161. package/dist/components/ui/navigation/types.d.ts +293 -0
  162. package/dist/components/ui/navigation/types.esm.js +298 -0
  163. package/dist/components/ui/navigation/types.js +298 -0
  164. package/dist/components/ui/overlay/backdrop.d.ts +79 -0
  165. package/dist/components/ui/overlay/backdrop.esm.js +80 -0
  166. package/dist/components/ui/overlay/backdrop.js +80 -0
  167. package/dist/components/ui/overlay/focus-manager.d.ts +141 -0
  168. package/dist/components/ui/overlay/focus-manager.esm.js +141 -0
  169. package/dist/components/ui/overlay/focus-manager.js +141 -0
  170. package/dist/components/ui/overlay/index.d.ts +27 -0
  171. package/dist/components/ui/overlay/index.esm.js +16 -0
  172. package/dist/components/ui/overlay/index.js +16 -0
  173. package/dist/components/ui/overlay/modal.d.ts +262 -0
  174. package/dist/components/ui/overlay/modal.esm.js +266 -0
  175. package/dist/components/ui/overlay/modal.js +266 -0
  176. package/dist/components/ui/overlay/overlay-manager.d.ts +107 -0
  177. package/dist/components/ui/overlay/overlay-manager.esm.js +105 -0
  178. package/dist/components/ui/overlay/overlay-manager.js +105 -0
  179. package/dist/components/ui/overlay/popover.d.ts +450 -0
  180. package/dist/components/ui/overlay/popover.esm.js +446 -0
  181. package/dist/components/ui/overlay/popover.js +446 -0
  182. package/dist/components/ui/overlay/portal.d.ts +75 -0
  183. package/dist/components/ui/overlay/portal.esm.js +79 -0
  184. package/dist/components/ui/overlay/portal.js +79 -0
  185. package/dist/components/ui/overlay/tooltip.d.ts +298 -0
  186. package/dist/components/ui/overlay/tooltip.esm.js +288 -0
  187. package/dist/components/ui/overlay/tooltip.js +288 -0
  188. package/dist/components/ui/overlay/types.d.ts +194 -0
  189. package/dist/components/ui/overlay/types.esm.js +195 -0
  190. package/dist/components/ui/overlay/types.js +195 -0
  191. package/dist/components/ui/performance-demo.d.ts +583 -0
  192. package/dist/components/ui/performance-demo.esm.js +549 -0
  193. package/dist/components/ui/performance-demo.js +549 -0
  194. package/dist/components/ui/semantic-input-system-demo.d.ts +490 -0
  195. package/dist/components/ui/semantic-input-system-demo.esm.js +465 -0
  196. package/dist/components/ui/semantic-input-system-demo.js +465 -0
  197. package/dist/components/ui/theme-customizer.d.ts +378 -0
  198. package/dist/components/ui/theme-customizer.esm.js +354 -0
  199. package/dist/components/ui/theme-customizer.js +354 -0
  200. package/dist/components/ui/theme-preview.d.ts +305 -0
  201. package/dist/components/ui/theme-preview.esm.js +258 -0
  202. package/dist/components/ui/theme-preview.js +258 -0
  203. package/dist/components/ui/theme-switcher.d.ts +259 -0
  204. package/dist/components/ui/theme-switcher.esm.js +238 -0
  205. package/dist/components/ui/theme-switcher.js +238 -0
  206. package/dist/components/ui/theme-toggle.d.ts +34 -0
  207. package/dist/components/ui/theme-toggle.esm.js +38 -0
  208. package/dist/components/ui/theme-toggle.js +38 -0
  209. package/dist/components/ui/token-demo.d.ts +188 -0
  210. package/dist/components/ui/token-demo.esm.js +183 -0
  211. package/dist/components/ui/token-demo.js +183 -0
  212. package/dist/components/ui/touch-demo.d.ts +455 -0
  213. package/dist/components/ui/touch-demo.esm.js +433 -0
  214. package/dist/components/ui/touch-demo.js +433 -0
  215. package/dist/components/ui/touch-friendly-interface-demo.d.ts +512 -0
  216. package/dist/components/ui/touch-friendly-interface-demo.esm.js +481 -0
  217. package/dist/components/ui/touch-friendly-interface-demo.js +481 -0
  218. package/dist/components/ui/touch-friendly-interface.d.ts +292 -0
  219. package/dist/components/ui/touch-friendly-interface.esm.js +272 -0
  220. package/dist/components/ui/touch-friendly-interface.js +272 -0
  221. package/dist/hooks/index.d.ts +161 -0
  222. package/dist/hooks/index.esm.js +190 -0
  223. package/dist/hooks/index.js +190 -0
  224. package/dist/hooks/use-accessibility-support.d.ts +516 -0
  225. package/dist/hooks/use-accessibility-support.esm.js +488 -0
  226. package/dist/hooks/use-accessibility-support.js +488 -0
  227. package/dist/hooks/use-adaptive-layout.d.ts +287 -0
  228. package/dist/hooks/use-adaptive-layout.esm.js +266 -0
  229. package/dist/hooks/use-adaptive-layout.js +266 -0
  230. package/dist/hooks/use-advanced-patterns.d.ts +292 -0
  231. package/dist/hooks/use-advanced-patterns.esm.js +279 -0
  232. package/dist/hooks/use-advanced-patterns.js +279 -0
  233. package/dist/hooks/use-advanced-transition-system.d.ts +390 -0
  234. package/dist/hooks/use-advanced-transition-system.esm.js +352 -0
  235. package/dist/hooks/use-advanced-transition-system.js +352 -0
  236. package/dist/hooks/use-animation-profile.d.ts +285 -0
  237. package/dist/hooks/use-animation-profile.esm.js +259 -0
  238. package/dist/hooks/use-animation-profile.js +259 -0
  239. package/dist/hooks/use-battery-animations.d.ts +382 -0
  240. package/dist/hooks/use-battery-animations.esm.js +359 -0
  241. package/dist/hooks/use-battery-animations.js +359 -0
  242. package/dist/hooks/use-battery-conscious-loading.d.ts +473 -0
  243. package/dist/hooks/use-battery-conscious-loading.esm.js +432 -0
  244. package/dist/hooks/use-battery-conscious-loading.js +432 -0
  245. package/dist/hooks/use-battery-optimization.d.ts +328 -0
  246. package/dist/hooks/use-battery-optimization.esm.js +307 -0
  247. package/dist/hooks/use-battery-optimization.js +307 -0
  248. package/dist/hooks/use-battery-status.d.ts +297 -0
  249. package/dist/hooks/use-battery-status.esm.js +277 -0
  250. package/dist/hooks/use-battery-status.js +277 -0
  251. package/dist/hooks/use-component-performance.d.ts +342 -0
  252. package/dist/hooks/use-component-performance.esm.js +329 -0
  253. package/dist/hooks/use-component-performance.js +329 -0
  254. package/dist/hooks/use-device-loading-states.d.ts +456 -0
  255. package/dist/hooks/use-device-loading-states.esm.js +416 -0
  256. package/dist/hooks/use-device-loading-states.js +416 -0
  257. package/dist/hooks/use-device.d.ts +104 -0
  258. package/dist/hooks/use-device.esm.js +99 -0
  259. package/dist/hooks/use-device.js +99 -0
  260. package/dist/hooks/use-enterprise-mobile-experience.d.ts +486 -0
  261. package/dist/hooks/use-enterprise-mobile-experience.esm.js +439 -0
  262. package/dist/hooks/use-enterprise-mobile-experience.js +439 -0
  263. package/dist/hooks/use-form-feedback.d.ts +401 -0
  264. package/dist/hooks/use-form-feedback.esm.js +360 -0
  265. package/dist/hooks/use-form-feedback.js +360 -0
  266. package/dist/hooks/use-form-performance.d.ts +511 -0
  267. package/dist/hooks/use-form-performance.esm.js +478 -0
  268. package/dist/hooks/use-form-performance.js +478 -0
  269. package/dist/hooks/use-frame-rate.d.ts +249 -0
  270. package/dist/hooks/use-frame-rate.esm.js +232 -0
  271. package/dist/hooks/use-frame-rate.js +232 -0
  272. package/dist/hooks/use-gestures.d.ts +336 -0
  273. package/dist/hooks/use-gestures.esm.js +314 -0
  274. package/dist/hooks/use-gestures.js +314 -0
  275. package/dist/hooks/use-hardware-acceleration.d.ts +339 -0
  276. package/dist/hooks/use-hardware-acceleration.esm.js +313 -0
  277. package/dist/hooks/use-hardware-acceleration.js +313 -0
  278. package/dist/hooks/use-input-accessibility.d.ts +451 -0
  279. package/dist/hooks/use-input-accessibility.esm.js +417 -0
  280. package/dist/hooks/use-input-accessibility.js +417 -0
  281. package/dist/hooks/use-input-performance.d.ts +503 -0
  282. package/dist/hooks/use-input-performance.esm.js +471 -0
  283. package/dist/hooks/use-input-performance.js +471 -0
  284. package/dist/hooks/use-layout-performance.d.ts +317 -0
  285. package/dist/hooks/use-layout-performance.esm.js +298 -0
  286. package/dist/hooks/use-layout-performance.js +298 -0
  287. package/dist/hooks/use-loading-accessibility.d.ts +532 -0
  288. package/dist/hooks/use-loading-accessibility.esm.js +495 -0
  289. package/dist/hooks/use-loading-accessibility.js +495 -0
  290. package/dist/hooks/use-loading-performance.d.ts +471 -0
  291. package/dist/hooks/use-loading-performance.esm.js +449 -0
  292. package/dist/hooks/use-loading-performance.js +449 -0
  293. package/dist/hooks/use-memory-usage.d.ts +285 -0
  294. package/dist/hooks/use-memory-usage.esm.js +268 -0
  295. package/dist/hooks/use-memory-usage.js +268 -0
  296. package/dist/hooks/use-mobile-form-layout.d.ts +462 -0
  297. package/dist/hooks/use-mobile-form-layout.esm.js +427 -0
  298. package/dist/hooks/use-mobile-form-layout.js +427 -0
  299. package/dist/hooks/use-mobile-form-validation.d.ts +516 -0
  300. package/dist/hooks/use-mobile-form-validation.esm.js +451 -0
  301. package/dist/hooks/use-mobile-form-validation.js +451 -0
  302. package/dist/hooks/use-mobile-keyboard-optimization.d.ts +469 -0
  303. package/dist/hooks/use-mobile-keyboard-optimization.esm.js +431 -0
  304. package/dist/hooks/use-mobile-keyboard-optimization.js +431 -0
  305. package/dist/hooks/use-mobile-layout.d.ts +300 -0
  306. package/dist/hooks/use-mobile-layout.esm.js +280 -0
  307. package/dist/hooks/use-mobile-layout.js +280 -0
  308. package/dist/hooks/use-mobile-optimization.d.ts +404 -0
  309. package/dist/hooks/use-mobile-optimization.esm.js +378 -0
  310. package/dist/hooks/use-mobile-optimization.js +378 -0
  311. package/dist/hooks/use-mobile-skeleton.d.ts +399 -0
  312. package/dist/hooks/use-mobile-skeleton.esm.js +369 -0
  313. package/dist/hooks/use-mobile-skeleton.js +369 -0
  314. package/dist/hooks/use-mobile-touch.d.ts +412 -0
  315. package/dist/hooks/use-mobile-touch.esm.js +379 -0
  316. package/dist/hooks/use-mobile-touch.js +379 -0
  317. package/dist/hooks/use-performance-throttling.d.ts +346 -0
  318. package/dist/hooks/use-performance-throttling.esm.js +324 -0
  319. package/dist/hooks/use-performance-throttling.js +324 -0
  320. package/dist/hooks/use-performance.d.ts +314 -0
  321. package/dist/hooks/use-performance.esm.js +278 -0
  322. package/dist/hooks/use-performance.js +278 -0
  323. package/dist/hooks/use-reusable-architecture.d.ts +412 -0
  324. package/dist/hooks/use-reusable-architecture.esm.js +385 -0
  325. package/dist/hooks/use-reusable-architecture.js +385 -0
  326. package/dist/hooks/use-semantic-input-types.d.ts +354 -0
  327. package/dist/hooks/use-semantic-input-types.esm.js +315 -0
  328. package/dist/hooks/use-semantic-input-types.js +315 -0
  329. package/dist/hooks/use-semantic-input.d.ts +563 -0
  330. package/dist/hooks/use-semantic-input.esm.js +513 -0
  331. package/dist/hooks/use-semantic-input.js +513 -0
  332. package/dist/hooks/use-tablet-layout.d.ts +382 -0
  333. package/dist/hooks/use-tablet-layout.esm.js +355 -0
  334. package/dist/hooks/use-tablet-layout.js +355 -0
  335. package/dist/hooks/use-touch-friendly-input.d.ts +520 -0
  336. package/dist/hooks/use-touch-friendly-input.esm.js +480 -0
  337. package/dist/hooks/use-touch-friendly-input.js +480 -0
  338. package/dist/hooks/use-touch-friendly-interface.d.ts +329 -0
  339. package/dist/hooks/use-touch-friendly-interface.esm.js +299 -0
  340. package/dist/hooks/use-touch-friendly-interface.js +299 -0
  341. package/dist/hooks/use-touch-optimization.d.ts +373 -0
  342. package/dist/hooks/use-touch-optimization.esm.js +348 -0
  343. package/dist/hooks/use-touch-optimization.js +348 -0
  344. package/dist/lib/utils.d.ts +3 -0
  345. package/dist/lib/utils.esm.js +6 -0
  346. package/dist/lib/utils.js +6 -0
  347. package/dist/plugins/theme-css-generator.d.ts +345 -0
  348. package/dist/plugins/theme-css-generator.esm.js +305 -0
  349. package/dist/plugins/theme-css-generator.js +305 -0
  350. package/dist/styles.css +1 -1
  351. package/dist/themes/ThemeContext.d.ts +27 -0
  352. package/dist/themes/ThemeContext.esm.js +31 -0
  353. package/dist/themes/ThemeContext.js +31 -0
  354. package/dist/themes/ThemeProvider.d.ts +222 -0
  355. package/dist/themes/ThemeProvider.esm.js +229 -0
  356. package/dist/themes/ThemeProvider.js +229 -0
  357. package/dist/themes/accessibility/index.d.ts +7 -0
  358. package/dist/themes/accessibility/index.esm.js +27 -0
  359. package/dist/themes/accessibility/index.js +27 -0
  360. package/dist/themes/accessibility.d.ts +259 -0
  361. package/dist/themes/accessibility.esm.js +220 -0
  362. package/dist/themes/accessibility.js +220 -0
  363. package/dist/themes/aria-patterns.d.ts +418 -0
  364. package/dist/themes/aria-patterns.esm.js +384 -0
  365. package/dist/themes/aria-patterns.js +384 -0
  366. package/dist/themes/base-themes.d.ts +34 -0
  367. package/dist/themes/base-themes.esm.js +52 -0
  368. package/dist/themes/base-themes.js +52 -0
  369. package/dist/themes/colorManager.d.ts +327 -0
  370. package/dist/themes/colorManager.esm.js +362 -0
  371. package/dist/themes/colorManager.js +362 -0
  372. package/dist/themes/examples/dark-theme.d.ts +139 -0
  373. package/dist/themes/examples/dark-theme.esm.js +124 -0
  374. package/dist/themes/examples/dark-theme.js +124 -0
  375. package/dist/themes/examples/minimal-theme.d.ts +93 -0
  376. package/dist/themes/examples/minimal-theme.esm.js +86 -0
  377. package/dist/themes/examples/minimal-theme.js +86 -0
  378. package/dist/themes/focus-management.d.ts +699 -0
  379. package/dist/themes/focus-management.esm.js +642 -0
  380. package/dist/themes/focus-management.js +642 -0
  381. package/dist/themes/fontLoader.d.ts +163 -0
  382. package/dist/themes/fontLoader.esm.js +192 -0
  383. package/dist/themes/fontLoader.js +192 -0
  384. package/dist/themes/high-contrast.d.ts +619 -0
  385. package/dist/themes/high-contrast.esm.js +573 -0
  386. package/dist/themes/high-contrast.js +573 -0
  387. package/dist/themes/index.d.ts +11 -0
  388. package/dist/themes/index.esm.js +19 -0
  389. package/dist/themes/index.js +19 -0
  390. package/dist/themes/inheritance.d.ts +160 -0
  391. package/dist/themes/inheritance.esm.js +219 -0
  392. package/dist/themes/inheritance.js +219 -0
  393. package/dist/themes/keyboard-navigation.d.ts +550 -0
  394. package/dist/themes/keyboard-navigation.esm.js +521 -0
  395. package/dist/themes/keyboard-navigation.js +521 -0
  396. package/dist/themes/motion-reduction.d.ts +660 -0
  397. package/dist/themes/motion-reduction.esm.js +602 -0
  398. package/dist/themes/motion-reduction.js +602 -0
  399. package/dist/themes/navigation.d.ts +232 -0
  400. package/dist/themes/navigation.esm.js +238 -0
  401. package/dist/themes/navigation.js +238 -0
  402. package/dist/themes/screen-reader.d.ts +645 -0
  403. package/dist/themes/screen-reader.esm.js +580 -0
  404. package/dist/themes/screen-reader.js +580 -0
  405. package/dist/themes/systemThemeDetector.d.ts +148 -0
  406. package/dist/themes/systemThemeDetector.esm.js +174 -0
  407. package/dist/themes/systemThemeDetector.js +174 -0
  408. package/dist/themes/themeCSSUpdater.d.ts +229 -0
  409. package/dist/themes/themeCSSUpdater.esm.js +250 -0
  410. package/dist/themes/themeCSSUpdater.js +250 -0
  411. package/dist/themes/themePersistence.d.ts +192 -0
  412. package/dist/themes/themePersistence.esm.js +217 -0
  413. package/dist/themes/themePersistence.js +217 -0
  414. package/dist/themes/themes/stan-design.d.ts +678 -0
  415. package/dist/themes/themes/stan-design.esm.js +518 -0
  416. package/dist/themes/themes/stan-design.js +518 -0
  417. package/dist/themes/types.d.ts +454 -0
  418. package/dist/themes/types.esm.js +446 -0
  419. package/dist/themes/types.js +446 -0
  420. package/dist/themes/useSystemTheme.d.ts +43 -0
  421. package/dist/themes/useSystemTheme.esm.js +48 -0
  422. package/dist/themes/useSystemTheme.js +48 -0
  423. package/dist/themes/useTheme.d.ts +20 -0
  424. package/dist/themes/useTheme.esm.js +87 -0
  425. package/dist/themes/useTheme.js +87 -0
  426. package/dist/themes/validation.d.ts +406 -0
  427. package/dist/themes/validation.esm.js +411 -0
  428. package/dist/themes/validation.js +411 -0
  429. package/dist/tokens/index.d.ts +25 -0
  430. package/dist/tokens/index.esm.js +23 -0
  431. package/dist/tokens/index.js +23 -0
  432. package/dist/tokens/tokenExporter.d.ts +336 -0
  433. package/dist/tokens/tokenExporter.esm.js +371 -0
  434. package/dist/tokens/tokenExporter.js +371 -0
  435. package/dist/tokens/tokenGenerator.d.ts +250 -0
  436. package/dist/tokens/tokenGenerator.esm.js +267 -0
  437. package/dist/tokens/tokenGenerator.js +267 -0
  438. package/dist/tokens/tokenManager.d.ts +194 -0
  439. package/dist/tokens/tokenManager.esm.js +235 -0
  440. package/dist/tokens/tokenManager.js +235 -0
  441. package/dist/tokens/tokenValidator.d.ts +488 -0
  442. package/dist/tokens/tokenValidator.esm.js +497 -0
  443. package/dist/tokens/tokenValidator.js +497 -0
  444. package/dist/tokens/types.d.ts +78 -0
  445. package/dist/tokens/types.esm.js +64 -0
  446. package/dist/tokens/types.js +64 -0
  447. package/dist/utils/bundle-analyzer.d.ts +260 -0
  448. package/dist/utils/bundle-analyzer.esm.js +242 -0
  449. package/dist/utils/bundle-analyzer.js +242 -0
  450. package/dist/utils/bundle-splitting.d.ts +483 -0
  451. package/dist/utils/bundle-splitting.esm.js +458 -0
  452. package/dist/utils/bundle-splitting.js +458 -0
  453. package/dist/utils/lazy-loading.d.ts +437 -0
  454. package/dist/utils/lazy-loading.esm.js +415 -0
  455. package/dist/utils/lazy-loading.js +415 -0
  456. package/dist/utils/performance-monitor.d.ts +513 -0
  457. package/dist/utils/performance-monitor.esm.js +472 -0
  458. package/dist/utils/performance-monitor.js +472 -0
  459. package/dist/utils/tree-shaking.d.ts +274 -0
  460. package/dist/utils/tree-shaking.esm.js +266 -0
  461. package/dist/utils/tree-shaking.js +266 -0
  462. package/package.json +1 -1
@@ -0,0 +1,87 @@
1
+ import { useContext } from 'react';
2
+ import { ThemeContext, ThemeContextType } from './ThemeContext';
3
+
4
+ /**
5
+ * Hook to access theme context
6
+ * Must be used within a ThemeProvider
7
+ *
8
+ * @returns ThemeContextType - The current theme context
9
+ * @throws Error if used outside of ThemeProvider
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * function MyComponent() {
14
+ * const { currentTheme, setTheme, currentThemeConfig } = useTheme();
15
+ *
16
+ * return (
17
+ * <button onClick={() => setTheme('harvey')}>
18
+ * Switch to Harvey Theme
19
+ * </button>
20
+ * );
21
+ * }
22
+ * ```
23
+ */
24
+ export const useTheme = ()=> {
25
+ const context = useContext(ThemeContext);
26
+
27
+ if (!context) {
28
+ throw new Error('useTheme must be used within ThemeProvider');
29
+ }
30
+
31
+ return context;
32
+ };
33
+
34
+ /**
35
+ * Hook to get a specific theme by name
36
+ * Useful for accessing theme data without switching
37
+ *
38
+ * @param themeName - Name of the theme to retrieve
39
+ * @returns CompleteThemeConfig | null - The requested theme or null if not found
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * function ThemePreview() {
44
+ * const harveyTheme = useThemeByName('harvey');
45
+ *
46
+ * if (!harveyTheme) return <div>Theme not found</div>;
47
+ *
48
+ * return (
49
+ * <div style={{ color] }}>
50
+ * Harvey Theme Preview
51
+ * </div>
52
+ * );
53
+ * }
54
+ * ```
55
+ */
56
+ export const useThemeByName = (themeName) => {
57
+ const { getTheme } = useTheme();
58
+ return getTheme(themeName);
59
+ };
60
+
61
+ /**
62
+ * Hook to check if a specific theme is available
63
+ *
64
+ * @param themeName - Name of the theme to check
65
+ * @returns boolean - True if theme is available
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * function ThemeSwitcher() {
70
+ * const hasHarveyTheme = useThemeAvailable('harvey');
71
+ *
72
+ * return (
73
+ * <div>
74
+ * {hasHarveyTheme && (
75
+ * <button onClick={() => setTheme('harvey')}>
76
+ * Harvey Theme
77
+ * </button>
78
+ * )}
79
+ * </div>
80
+ * );
81
+ * }
82
+ * ```
83
+ */
84
+ export const useThemeAvailable = (themeName)=> {
85
+ const { availableThemes } = useTheme();
86
+ return availableThemes.includes(themeName);
87
+ };
@@ -0,0 +1,406 @@
1
+ // Theme Validation System
2
+ // This file provides comprehensive validation for theme configurations
3
+
4
+ export class ThemeValidator {
5
+ private static readonly REQUIRED_FIELDS = [
6
+ 'fonts.primary.family',
7
+ 'fonts.primary.sizes.md',
8
+ 'colors.primary.500',
9
+ 'colors.semantic.success',
10
+ 'colors.semantic.error',
11
+ 'colors.semantic.warning',
12
+ 'colors.semantic.info',
13
+ 'colors.surface.background',
14
+ 'colors.text.primary',
15
+ 'spacing.scale.md',
16
+ 'shadows.md',
17
+ 'transitions.duration.normal',
18
+ 'transitions.easing.ease',
19
+ 'meta.name',
20
+ 'meta.description',
21
+ 'meta.version'
22
+ ];
23
+
24
+ private static readonly COLOR_FORMATS = {
25
+ hex: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,
26
+ rgb: /^rgb\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\)$/,
27
+ rgba: /^rgba\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*[\d.]+\s*\)$/,
28
+ hsl: /^hsl\(\s*\d+\s*,\s*\d+%\s*,\s*\d+%\s*\)$/,
29
+ hsla: /^hsla\(\s*\d+\s*,\s*\d+%\s*,\s*\d+%\s*,\s*[\d.]+\s*\)$/
30
+ };
31
+
32
+ private static readonly FONT_WEIGHTS = [100, 200, 300, 400, 500, 600, 700, 800, 900];
33
+
34
+ static validateTheme(theme: MultiThemeConfig): ThemeValidationResult {
35
+ const errors: ThemeValidationError[] = [];
36
+ const warnings: ThemeValidationWarning[] = [];
37
+
38
+ // Validate required fields
39
+ this.validateRequiredFields(theme, errors);
40
+
41
+ // Validate color formats
42
+ this.validateColorFormats(theme, errors, warnings);
43
+
44
+ // Validate color contrast
45
+ this.validateColorContrast(theme, warnings);
46
+
47
+ // Validate font configurations
48
+ this.validateFontConfigurations(theme, warnings);
49
+
50
+ // Validate spacing scales
51
+ this.validateSpacingScales(theme, warnings);
52
+
53
+ // Validate navigation configurations
54
+ this.validateNavigationConfigurations(theme, errors, warnings);
55
+
56
+ // Validate metadata
57
+ this.validateMetadata(theme, errors, warnings);
58
+
59
+ // Validate semantic consistency
60
+ this.validateSemanticConsistency(theme, warnings);
61
+
62
+ return {
63
+ isValid: errors.length === 0,
64
+ errors,
65
+ warnings
66
+ };
67
+ }
68
+
69
+ private static validateRequiredFields(theme: MultiThemeConfig, errors: ThemeValidationError[]): void {
70
+ for (const fieldPath of this.REQUIRED_FIELDS) {
71
+ const value = this.getNestedValue(theme, fieldPath);
72
+ if (value === undefined || value === null || value === '') {
73
+ errors.push({
74
+ path: fieldPath,
75
+ message: `Required field '${fieldPath}' is missing or empty`,
76
+ severity: 'error'
77
+ });
78
+ }
79
+ }
80
+ }
81
+
82
+ private static validateColorFormats(theme: MultiThemeConfig, errors: ThemeValidationError[], warnings: ThemeValidationWarning[]): void {
83
+ const colorFields = this.getAllColorFields(theme);
84
+ const formats = new Set<string>();
85
+
86
+ for (const { path, value } of colorFields) {
87
+ if (typeof value === 'string') {
88
+ // Use colorManager for validation
89
+ if (!ColorManager.isValidColor(value)) {
90
+ errors.push({
91
+ path,
92
+ message: `Invalid color format: '${value}'. Expected hex, rgb, hsl, or named color format`,
93
+ severity: 'error'
94
+ });
95
+ } else {
96
+ const format = this.detectColorFormat(value);
97
+ if (format) {
98
+ formats.add(format);
99
+ }
100
+ }
101
+ }
102
+ }
103
+
104
+ // Warn if multiple color formats are used
105
+ if (formats.size > 1) {
106
+ warnings.push({
107
+ path: 'colors',
108
+ message: `Multiple color formats detected: ${Array.from(formats).join(', ')}. Consider using a consistent format for better maintainability`,
109
+ severity: 'warning'
110
+ });
111
+ }
112
+ }
113
+
114
+ private static validateColorContrast(theme: MultiThemeConfig, warnings: ThemeValidationWarning[]): void {
115
+ const textColors = [
116
+ theme.colors?.text?.primary,
117
+ theme.colors?.text?.secondary,
118
+ theme.colors?.text?.muted
119
+ ].filter(Boolean);
120
+
121
+ const backgroundColors = [
122
+ theme.colors?.surface?.background,
123
+ theme.colors?.surface?.surface
124
+ ].filter(Boolean);
125
+
126
+ for (const textColor of textColors) {
127
+ for (const bgColor of backgroundColors) {
128
+ if (textColor && bgColor) {
129
+ // Use colorManager for contrast checking
130
+ const accessibility = ColorManager.checkColorContrast(textColor, bgColor);
131
+
132
+ if (!accessibility.aa) {
133
+ warnings.push({
134
+ path: 'colors',
135
+ message: `Color contrast ratio ${accessibility.contrastRatio.toFixed(2)}:1 between '${textColor}' and '${bgColor}' is below WCAG AA standard (4.5:1)`,
136
+ severity: 'warning'
137
+ });
138
+ } else if (!accessibility.aaa) {
139
+ warnings.push({
140
+ path: 'colors',
141
+ message: `Color contrast ratio ${accessibility.contrastRatio.toFixed(2)}:1 between '${textColor}' and '${bgColor}' is below WCAG AAA standard (7:1)`,
142
+ severity: 'info'
143
+ });
144
+ }
145
+
146
+ // Add accessibility recommendations
147
+ if (accessibility.recommended.length > 0) {
148
+ warnings.push({
149
+ path: 'colors',
150
+ message: `Accessibility recommendations: ${accessibility.recommended.join('; ')}`,
151
+ severity: 'info'
152
+ });
153
+ }
154
+ }
155
+ }
156
+ }
157
+ }
158
+
159
+ private static validateFontConfigurations(theme: MultiThemeConfig, warnings: ThemeValidationWarning[]): void {
160
+ // Validate font weights
161
+ if (theme.fonts?.primary?.weights) {
162
+ for (const weight of theme.fonts.primary.weights) {
163
+ if (!this.FONT_WEIGHTS.includes(weight)) {
164
+ warnings.push({
165
+ path: 'fonts.primary.weights',
166
+ message: `Font weight ${weight} is not a standard CSS font weight. Consider using: ${this.FONT_WEIGHTS.join(', ')}`,
167
+ severity: 'warning'
168
+ });
169
+ }
170
+ }
171
+ }
172
+
173
+ // Validate font size scale
174
+ if (theme.fonts?.primary?.sizes) {
175
+ const sizes = Object.values(theme.fonts.primary.sizes);
176
+ const numericSizes = sizes.map(size => parseFloat(size)).filter(size => !isNaN(size));
177
+
178
+ if (numericSizes.length > 1) {
179
+ for (let i = 1; i < numericSizes.length; i++) {
180
+ if (numericSizes[i] <= numericSizes[i - 1]) {
181
+ warnings.push({
182
+ path: 'fonts.primary.sizes',
183
+ message: `Font sizes should be in ascending order. Found: ${numericSizes[i - 1]} followed by ${numericSizes[i]}`,
184
+ severity: 'warning'
185
+ });
186
+ }
187
+ }
188
+ }
189
+ }
190
+
191
+ // Validate font family fallbacks
192
+ if (theme.fonts?.primary?.family) {
193
+ const family = theme.fonts.primary.family;
194
+ if (!family.includes(',') && !family.includes('"') && !family.includes("'")) {
195
+ warnings.push({
196
+ path: 'fonts.primary.family',
197
+ message: `Font family '${family}' should include fallback fonts for better cross-platform compatibility`,
198
+ severity: 'warning'
199
+ });
200
+ }
201
+ }
202
+ }
203
+
204
+ private static validateSpacingScales(theme: MultiThemeConfig, warnings: ThemeValidationWarning[]): void {
205
+ if (theme.spacing?.scale) {
206
+ const scales = Object.values(theme.spacing.scale);
207
+ const numericScales = scales.map(scale => parseFloat(scale)).filter(scale => !isNaN(scale));
208
+
209
+ if (numericScales.length > 1) {
210
+ // Check if spacing follows a consistent pattern
211
+ const ratios = [];
212
+ for (let i = 1; i < numericScales.length; i++) {
213
+ ratios.push(numericScales[i] / numericScales[i - 1]);
214
+ }
215
+
216
+ const avgRatio = ratios.reduce((sum, ratio) => sum + ratio, 0) / ratios.length;
217
+ const variance = ratios.reduce((sum, ratio) => sum + Math.pow(ratio - avgRatio, 2), 0) / ratios.length;
218
+
219
+ if (variance > 0.1) { // High variance indicates inconsistent spacing
220
+ warnings.push({
221
+ path: 'spacing.scale',
222
+ message: `Spacing scale appears inconsistent. Consider using a mathematical scale (e.g., 1.5x or 2x multiplier) for better visual harmony`,
223
+ severity: 'warning'
224
+ });
225
+ }
226
+ }
227
+ }
228
+ }
229
+
230
+ private static validateNavigationConfigurations(theme: MultiThemeConfig, _errors: ThemeValidationError[], warnings: ThemeValidationWarning[]): void {
231
+ if (theme.navigation) {
232
+ // Validate layout and behavior combinations
233
+ const { layout, behavior } = theme.navigation;
234
+
235
+ if (layout === 'sidebar' && behavior === 'floating') {
236
+ warnings.push({
237
+ path: 'navigation',
238
+ message: 'Sidebar layout with floating behavior may cause usability issues. Consider using static or sticky behavior',
239
+ severity: 'warning'
240
+ });
241
+ }
242
+
243
+ if (layout === 'tabs' && behavior === 'overlay') {
244
+ warnings.push({
245
+ path: 'navigation',
246
+ message: 'Tab layout with overlay behavior is unusual. Consider using static or sticky behavior',
247
+ severity: 'warning'
248
+ });
249
+ }
250
+
251
+ // Validate responsive behavior
252
+ if (theme.navigation.responsive === 'desktop-first' && layout === 'horizontal') {
253
+ warnings.push({
254
+ path: 'navigation',
255
+ message: 'Desktop-first responsive approach with horizontal layout may cause mobile usability issues',
256
+ severity: 'warning'
257
+ });
258
+ }
259
+ }
260
+ }
261
+
262
+ private static validateMetadata(theme: MultiThemeConfig, errors: ThemeValidationError[], warnings: ThemeValidationWarning[]): void {
263
+ if (theme.meta) {
264
+ // Validate version format
265
+ if (theme.meta.version && !/^\d+\.\d+\.\d+/.test(theme.meta.version)) {
266
+ warnings.push({
267
+ path: 'meta.version',
268
+ message: `Version '${theme.meta.version}' should follow semantic versioning (e.g., 1.0.0)`,
269
+ severity: 'warning'
270
+ });
271
+ }
272
+
273
+ // Validate category
274
+ if (theme.meta.category && !['brand', 'enterprise', 'custom', 'accessibility'].includes(theme.meta.category)) {
275
+ errors.push({
276
+ path: 'meta.category',
277
+ message: `Invalid category '${theme.meta.category}'. Must be one of: brand, enterprise, custom, accessibility`,
278
+ severity: 'error'
279
+ });
280
+ }
281
+
282
+ // Validate tags
283
+ if (theme.meta.tags && theme.meta.tags.length > 10) {
284
+ warnings.push({
285
+ path: 'meta.tags',
286
+ message: `Theme has ${theme.meta.tags.length} tags. Consider limiting to 10 tags for better organization`,
287
+ severity: 'warning'
288
+ });
289
+ }
290
+ }
291
+ }
292
+
293
+ private static validateSemanticConsistency(theme: MultiThemeConfig, warnings: ThemeValidationWarning[]): void {
294
+ // Check if semantic colors are distinct from primary colors
295
+ if (theme.colors?.semantic && theme.colors?.primary) {
296
+ const semanticColors = Object.values(theme.colors.semantic);
297
+ const primaryColors = Object.values(theme.colors.primary);
298
+
299
+ for (const semanticColor of semanticColors) {
300
+ for (const primaryColor of primaryColors) {
301
+ if (this.colorsAreSimilar(semanticColor, primaryColor)) {
302
+ warnings.push({
303
+ path: 'colors.semantic',
304
+ message: `Semantic color '${semanticColor}' is too similar to primary color '${primaryColor}'. Consider using more distinct colors for better semantic clarity`,
305
+ severity: 'warning'
306
+ });
307
+ }
308
+ }
309
+ }
310
+ }
311
+ }
312
+
313
+ private static getNestedValue(obj: any, path: string): any {
314
+ return path.split('.').reduce((current, key) => current?.[key], obj);
315
+ }
316
+
317
+ private static getAllColorFields(theme: MultiThemeConfig): Array<{ path: string; value: any }> {
318
+ const fields: Array<{ path: string; value: any }> = [];
319
+
320
+ const traverseColors = (obj: any, path: string) => {
321
+ if (obj && typeof obj === 'object') {
322
+ for (const [key, value] of Object.entries(obj)) {
323
+ const currentPath = path ? `${path}.${key}` : key;
324
+ if (typeof value === 'string' && this.isColorValue(value)) {
325
+ fields.push({ path: currentPath, value });
326
+ } else if (typeof value === 'object') {
327
+ traverseColors(value, currentPath);
328
+ }
329
+ }
330
+ }
331
+ };
332
+
333
+ traverseColors(theme.colors, 'colors');
334
+ return fields;
335
+ }
336
+
337
+ private static detectColorFormat(color: string): string | null {
338
+ for (const [format, regex] of Object.entries(this.COLOR_FORMATS)) {
339
+ if (regex.test(color)) {
340
+ return format;
341
+ }
342
+ }
343
+ return null;
344
+ }
345
+
346
+ private static isColorValue(value: string): boolean {
347
+ // Accept any string that might be a color, let detectColorFormat validate it
348
+ return value.startsWith('#') ||
349
+ value.startsWith('rgb') ||
350
+ value.startsWith('hsl') ||
351
+ value.startsWith('var(--') ||
352
+ value === 'transparent' ||
353
+ value === 'currentColor' ||
354
+ value === 'inherit' ||
355
+ // Also accept any string that might be a color (for validation)
356
+ value.includes('color') ||
357
+ value.includes('invalid');
358
+ }
359
+
360
+ private static calculateColorContrast(color1: string, color2: string): number {
361
+ try {
362
+ const luminance1 = this.getLuminance(color1);
363
+ const luminance2 = this.getLuminance(color2);
364
+
365
+ const lighter = Math.max(luminance1, luminance2);
366
+ const darker = Math.min(luminance1, luminance2);
367
+
368
+ return (lighter + 0.05) / (darker + 0.05);
369
+ } catch {
370
+ return 1; // Default fallback
371
+ }
372
+ }
373
+
374
+ private static getLuminance(color: string): number {
375
+ // Handle CSS variables and other formats
376
+ if (color.startsWith('var(--') || color === 'transparent' || color === 'currentColor' || color === 'inherit') {
377
+ return 0.5; // Default fallback
378
+ }
379
+
380
+ // Convert hex to RGB and calculate luminance
381
+ try {
382
+ const hex = color.replace('#', '');
383
+ const r = parseInt(hex.substr(0, 2), 16) / 255;
384
+ const g = parseInt(hex.substr(2, 2), 16) / 255;
385
+ const b = parseInt(hex.substr(4, 2), 16) / 255;
386
+
387
+ const [rs, gs, bs] = [r, g, b].map(c => {
388
+ if (c <= 0.03928) return c / 12.92;
389
+ return Math.pow((c + 0.055) / 1.055, 2.4);
390
+ });
391
+
392
+ return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;
393
+ } catch {
394
+ return 0.5; // Default fallback
395
+ }
396
+ }
397
+
398
+ private static colorsAreSimilar(color1: string, color2: string): boolean {
399
+ try {
400
+ const contrast = this.calculateColorContrast(color1, color2);
401
+ return contrast < 2.0; // Very low contrast indicates similar colors
402
+ } catch {
403
+ return false;
404
+ }
405
+ }
406
+ }