@bloomneo/uikit 1.5.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 (678) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/LICENSE +21 -0
  3. package/README.md +513 -0
  4. package/bin/commands/build.js +232 -0
  5. package/bin/commands/bundle.js +587 -0
  6. package/bin/commands/create.js +768 -0
  7. package/bin/commands/deploy.js +533 -0
  8. package/bin/commands/generate.js +673 -0
  9. package/bin/commands/optimize.js +198 -0
  10. package/bin/commands/prerender.js +306 -0
  11. package/bin/commands/serve.js +216 -0
  12. package/bin/templates/fbca/README.md.template +130 -0
  13. package/bin/templates/fbca/docs/QUICKSTART_FBCA.md +368 -0
  14. package/bin/templates/fbca/docs/UIKIT_CLI_GUIDE.md +574 -0
  15. package/bin/templates/fbca/docs/UIKIT_COMPOSITE_UI_SYSTEM.md +649 -0
  16. package/bin/templates/fbca/docs/UIKIT_LLM_GUIDE.md +2055 -0
  17. package/bin/templates/fbca/docs/UIKIT_THEME_GUIDE.md +359 -0
  18. package/bin/templates/fbca/package.json.template +41 -0
  19. package/bin/templates/fbca/public/favicon.svg +10 -0
  20. package/bin/templates/fbca/public/hero_fbca.svg +1 -0
  21. package/bin/templates/fbca/src/utils/asset.ts +6 -0
  22. package/bin/templates/fbca/src/web/App.tsx.template +20 -0
  23. package/bin/templates/fbca/src/web/features/auth/pages/index.tsx.template +157 -0
  24. package/bin/templates/fbca/src/web/features/docs/pages/[...slug].tsx.template +83 -0
  25. package/bin/templates/fbca/src/web/features/gallery/hooks/useGallery.ts.template +74 -0
  26. package/bin/templates/fbca/src/web/features/gallery/pages/index.tsx.template +136 -0
  27. package/bin/templates/fbca/src/web/features/main/components/CTASection.tsx.template +43 -0
  28. package/bin/templates/fbca/src/web/features/main/pages/About.tsx.template +374 -0
  29. package/bin/templates/fbca/src/web/features/main/pages/index.tsx.template +214 -0
  30. package/bin/templates/fbca/src/web/index.html.template +15 -0
  31. package/bin/templates/fbca/src/web/lib/page-router.tsx.template +134 -0
  32. package/bin/templates/fbca/src/web/main.tsx.template +14 -0
  33. package/bin/templates/fbca/src/web/shared/components/Footer.tsx.template +57 -0
  34. package/bin/templates/fbca/src/web/shared/components/Header.tsx.template +91 -0
  35. package/bin/templates/fbca/src/web/shared/components/SEO.tsx.template +24 -0
  36. package/bin/templates/fbca/src/web/shared/components/index.ts.template +3 -0
  37. package/bin/templates/fbca/src/web/shared/hooks/useSEO.ts.template +85 -0
  38. package/bin/templates/fbca/src/web/shared/utils/asset.ts +6 -0
  39. package/bin/templates/fbca/src/web/styles/index.css.template +8 -0
  40. package/bin/templates/fbca/src/web/utils/asset.ts +6 -0
  41. package/bin/templates/fbca/tsconfig.json.template +32 -0
  42. package/bin/templates/fbca/tsconfig.node.json.template +10 -0
  43. package/bin/templates/fbca/vite.config.ts.template +38 -0
  44. package/bin/templates/generate/component/component.tsx.template +79 -0
  45. package/bin/templates/generate/component/index.ts.template +2 -0
  46. package/bin/templates/generate/component/types.ts.template +58 -0
  47. package/bin/templates/generate/feature/index.ts.template +14 -0
  48. package/bin/templates/generate/feature/list-page.tsx.template +34 -0
  49. package/bin/templates/generate/feature/main-component.tsx.template +37 -0
  50. package/bin/templates/generate/feature/main-page.tsx.template +30 -0
  51. package/bin/templates/generate/feature/types.ts.template +34 -0
  52. package/bin/templates/generate/hook/hook.ts.template +35 -0
  53. package/bin/templates/generate/index.css.template +10 -0
  54. package/bin/templates/generate/main.tsx.template +10 -0
  55. package/bin/templates/generate/page/index.ts.template +2 -0
  56. package/bin/templates/generate/page/page.tsx.template +86 -0
  57. package/bin/templates/generate/theme/README.md +31 -0
  58. package/bin/templates/generate/theme/theme.js.template +155 -0
  59. package/bin/templates/multi/README.md.template +120 -0
  60. package/bin/templates/multi/docs/QUICKSTART_MULTI.md +334 -0
  61. package/bin/templates/multi/docs/UIKIT_CLI_GUIDE.md +574 -0
  62. package/bin/templates/multi/docs/UIKIT_COMPOSITE_UI_SYSTEM.md +649 -0
  63. package/bin/templates/multi/docs/UIKIT_LLM_GUIDE.md +2055 -0
  64. package/bin/templates/multi/docs/UIKIT_THEME_GUIDE.md +359 -0
  65. package/bin/templates/multi/index.html.template +58 -0
  66. package/bin/templates/multi/package.json.template +35 -0
  67. package/bin/templates/multi/public/favicon.svg +10 -0
  68. package/bin/templates/multi/public/hero_multi.svg +1 -0
  69. package/bin/templates/multi/src/App.tsx.template +92 -0
  70. package/bin/templates/multi/src/components/Footer.tsx.template +58 -0
  71. package/bin/templates/multi/src/components/Header.tsx.template +103 -0
  72. package/bin/templates/multi/src/components/SEO.tsx.template +19 -0
  73. package/bin/templates/multi/src/components/index.ts.template +3 -0
  74. package/bin/templates/multi/src/hooks/useSEO.ts.template +38 -0
  75. package/bin/templates/multi/src/index.css.template +7 -0
  76. package/bin/templates/multi/src/main.tsx.template +14 -0
  77. package/bin/templates/multi/src/pages/About.tsx.template +276 -0
  78. package/bin/templates/multi/src/pages/Components.tsx.template +288 -0
  79. package/bin/templates/multi/src/pages/Contact.tsx.template +348 -0
  80. package/bin/templates/multi/src/pages/Dashboard.tsx.template +306 -0
  81. package/bin/templates/multi/src/pages/ErrorPage.tsx.template +37 -0
  82. package/bin/templates/multi/src/pages/Home.tsx.template +201 -0
  83. package/bin/templates/multi/src/pages/Login.tsx.template +148 -0
  84. package/bin/templates/multi/src/pages/Themes.tsx.template +207 -0
  85. package/bin/templates/multi/src/router.tsx.template +34 -0
  86. package/bin/templates/multi/src/utils/asset.ts +6 -0
  87. package/bin/templates/multi/tsconfig.json.template +30 -0
  88. package/bin/templates/multi/tsconfig.node.json +22 -0
  89. package/bin/templates/multi/vite.config.ts.template +36 -0
  90. package/bin/templates/single/README.md.template +131 -0
  91. package/bin/templates/single/docs/QUICKSTART_SINGLE.md +259 -0
  92. package/bin/templates/single/docs/UIKIT_CLI_GUIDE.md +574 -0
  93. package/bin/templates/single/docs/UIKIT_COMPOSITE_UI_SYSTEM.md +649 -0
  94. package/bin/templates/single/docs/UIKIT_LLM_GUIDE.md +2055 -0
  95. package/bin/templates/single/docs/UIKIT_THEME_GUIDE.md +359 -0
  96. package/bin/templates/single/index.html.template +37 -0
  97. package/bin/templates/single/package.json.template +34 -0
  98. package/bin/templates/single/public/favicon.svg +10 -0
  99. package/bin/templates/single/public/hero.svg +1 -0
  100. package/bin/templates/single/src/App.tsx.template +233 -0
  101. package/bin/templates/single/src/index.css.template +7 -0
  102. package/bin/templates/single/src/main.tsx.template +14 -0
  103. package/bin/templates/single/src/styles/fonts.css +99 -0
  104. package/bin/templates/single/src/utils/asset.ts +6 -0
  105. package/bin/templates/single/tsconfig.json +31 -0
  106. package/bin/templates/single/tsconfig.node.json +22 -0
  107. package/bin/templates/single/vite.config.ts.template +36 -0
  108. package/bin/templates/spa/README.md.template +105 -0
  109. package/bin/templates/spa/components/SEO.tsx.template +19 -0
  110. package/bin/templates/spa/docs/QUICKSTART_SPA.md +300 -0
  111. package/bin/templates/spa/docs/UIKIT_CLI_GUIDE.md +574 -0
  112. package/bin/templates/spa/docs/UIKIT_COMPOSITE_UI_SYSTEM.md +649 -0
  113. package/bin/templates/spa/docs/UIKIT_LLM_GUIDE.md +2055 -0
  114. package/bin/templates/spa/docs/UIKIT_THEME_GUIDE.md +359 -0
  115. package/bin/templates/spa/hooks/useSEO.ts.template +38 -0
  116. package/bin/templates/spa/index.html.template +58 -0
  117. package/bin/templates/spa/package.json.template +35 -0
  118. package/bin/templates/spa/public/favicon.svg +15 -0
  119. package/bin/templates/spa/public/hero_spa.svg +1 -0
  120. package/bin/templates/spa/src/App.tsx.template +659 -0
  121. package/bin/templates/spa/src/index.css.template +7 -0
  122. package/bin/templates/spa/src/main.tsx.template +14 -0
  123. package/bin/templates/spa/src/utils/asset.ts +6 -0
  124. package/bin/templates/spa/tsconfig.json.template +30 -0
  125. package/bin/templates/spa/tsconfig.node.json +22 -0
  126. package/bin/templates/spa/vite.config.ts.template +36 -0
  127. package/bin/uikit.js +133 -0
  128. package/cookbook/README.md +20 -0
  129. package/cookbook/crud-page.tsx +99 -0
  130. package/cookbook/dashboard.tsx +89 -0
  131. package/cookbook/delete-flow.tsx +59 -0
  132. package/cookbook/login.tsx +85 -0
  133. package/cookbook/settings.tsx +113 -0
  134. package/dist/Combination-C0DFrmJW.js +674 -0
  135. package/dist/Combination-C0DFrmJW.js.map +1 -0
  136. package/dist/accordion.js +284 -0
  137. package/dist/accordion.js.map +1 -0
  138. package/dist/admin.js +429 -0
  139. package/dist/admin.js.map +1 -0
  140. package/dist/alert.js +67 -0
  141. package/dist/alert.js.map +1 -0
  142. package/dist/auth.js +178 -0
  143. package/dist/auth.js.map +1 -0
  144. package/dist/avatar.js +249 -0
  145. package/dist/avatar.js.map +1 -0
  146. package/dist/badge.js +40 -0
  147. package/dist/badge.js.map +1 -0
  148. package/dist/blank.js +80 -0
  149. package/dist/blank.js.map +1 -0
  150. package/dist/breadcrumb.js +104 -0
  151. package/dist/breadcrumb.js.map +1 -0
  152. package/dist/button.js +50 -0
  153. package/dist/button.js.map +1 -0
  154. package/dist/calendar.js +2785 -0
  155. package/dist/calendar.js.map +1 -0
  156. package/dist/card.js +91 -0
  157. package/dist/card.js.map +1 -0
  158. package/dist/check-DXouwtzp.js +12 -0
  159. package/dist/check-DXouwtzp.js.map +1 -0
  160. package/dist/checkbox.js +268 -0
  161. package/dist/checkbox.js.map +1 -0
  162. package/dist/chevron-down-BORJtX8F.js +14 -0
  163. package/dist/chevron-down-BORJtX8F.js.map +1 -0
  164. package/dist/chevron-left-C1pkx4AF.js +14 -0
  165. package/dist/chevron-left-C1pkx4AF.js.map +1 -0
  166. package/dist/chevron-right-pz9eCjj-.js +14 -0
  167. package/dist/chevron-right-pz9eCjj-.js.map +1 -0
  168. package/dist/circle-DHOdTDQh.js +14 -0
  169. package/dist/circle-DHOdTDQh.js.map +1 -0
  170. package/dist/collapsible.js +35 -0
  171. package/dist/collapsible.js.map +1 -0
  172. package/dist/command.js +481 -0
  173. package/dist/command.js.map +1 -0
  174. package/dist/confirm-dialog.js +129 -0
  175. package/dist/confirm-dialog.js.map +1 -0
  176. package/dist/container.js +334 -0
  177. package/dist/container.js.map +1 -0
  178. package/dist/createLucideIcon-B45kRl5r.js +80 -0
  179. package/dist/createLucideIcon-B45kRl5r.js.map +1 -0
  180. package/dist/data-table.js +574 -0
  181. package/dist/data-table.js.map +1 -0
  182. package/dist/detail-page.js +454 -0
  183. package/dist/detail-page.js.map +1 -0
  184. package/dist/dialog.js +137 -0
  185. package/dist/dialog.js.map +1 -0
  186. package/dist/dropdown-menu.js +424 -0
  187. package/dist/dropdown-menu.js.map +1 -0
  188. package/dist/ellipsis-BhAoKPVk.js +16 -0
  189. package/dist/ellipsis-BhAoKPVk.js.map +1 -0
  190. package/dist/empty-state.js +54 -0
  191. package/dist/empty-state.js.map +1 -0
  192. package/dist/errors.js +36 -0
  193. package/dist/errors.js.map +1 -0
  194. package/dist/eye-DDKoW0KS.js +46 -0
  195. package/dist/eye-DDKoW0KS.js.map +1 -0
  196. package/dist/fonts/caveat-cyrillic-400-normal.woff +0 -0
  197. package/dist/fonts/caveat-cyrillic-400-normal.woff2 +0 -0
  198. package/dist/fonts/caveat-cyrillic-700-normal.woff +0 -0
  199. package/dist/fonts/caveat-cyrillic-700-normal.woff2 +0 -0
  200. package/dist/fonts/caveat-cyrillic-ext-400-normal.woff +0 -0
  201. package/dist/fonts/caveat-cyrillic-ext-400-normal.woff2 +0 -0
  202. package/dist/fonts/caveat-cyrillic-ext-700-normal.woff +0 -0
  203. package/dist/fonts/caveat-cyrillic-ext-700-normal.woff2 +0 -0
  204. package/dist/fonts/caveat-latin-400-normal.woff +0 -0
  205. package/dist/fonts/caveat-latin-400-normal.woff2 +0 -0
  206. package/dist/fonts/caveat-latin-700-normal.woff +0 -0
  207. package/dist/fonts/caveat-latin-700-normal.woff2 +0 -0
  208. package/dist/fonts/caveat-latin-ext-400-normal.woff +0 -0
  209. package/dist/fonts/caveat-latin-ext-400-normal.woff2 +0 -0
  210. package/dist/fonts/caveat-latin-ext-700-normal.woff +0 -0
  211. package/dist/fonts/caveat-latin-ext-700-normal.woff2 +0 -0
  212. package/dist/fonts/crimson-text-latin-400-normal.woff +0 -0
  213. package/dist/fonts/crimson-text-latin-400-normal.woff2 +0 -0
  214. package/dist/fonts/crimson-text-latin-600-normal.woff +0 -0
  215. package/dist/fonts/crimson-text-latin-600-normal.woff2 +0 -0
  216. package/dist/fonts/crimson-text-latin-700-normal.woff +0 -0
  217. package/dist/fonts/crimson-text-latin-700-normal.woff2 +0 -0
  218. package/dist/fonts/crimson-text-latin-ext-400-normal.woff +0 -0
  219. package/dist/fonts/crimson-text-latin-ext-400-normal.woff2 +0 -0
  220. package/dist/fonts/crimson-text-latin-ext-600-normal.woff +0 -0
  221. package/dist/fonts/crimson-text-latin-ext-600-normal.woff2 +0 -0
  222. package/dist/fonts/crimson-text-latin-ext-700-normal.woff +0 -0
  223. package/dist/fonts/crimson-text-latin-ext-700-normal.woff2 +0 -0
  224. package/dist/fonts/crimson-text-vietnamese-400-normal.woff +0 -0
  225. package/dist/fonts/crimson-text-vietnamese-400-normal.woff2 +0 -0
  226. package/dist/fonts/crimson-text-vietnamese-600-normal.woff +0 -0
  227. package/dist/fonts/crimson-text-vietnamese-600-normal.woff2 +0 -0
  228. package/dist/fonts/crimson-text-vietnamese-700-normal.woff +0 -0
  229. package/dist/fonts/crimson-text-vietnamese-700-normal.woff2 +0 -0
  230. package/dist/fonts/dm-serif-display-latin-400-normal.woff +0 -0
  231. package/dist/fonts/dm-serif-display-latin-400-normal.woff2 +0 -0
  232. package/dist/fonts/dm-serif-display-latin-ext-400-normal.woff +0 -0
  233. package/dist/fonts/dm-serif-display-latin-ext-400-normal.woff2 +0 -0
  234. package/dist/fonts/libre-baskerville-latin-400-normal.woff +0 -0
  235. package/dist/fonts/libre-baskerville-latin-400-normal.woff2 +0 -0
  236. package/dist/fonts/libre-baskerville-latin-700-normal.woff +0 -0
  237. package/dist/fonts/libre-baskerville-latin-700-normal.woff2 +0 -0
  238. package/dist/fonts/libre-baskerville-latin-ext-400-normal.woff +0 -0
  239. package/dist/fonts/libre-baskerville-latin-ext-400-normal.woff2 +0 -0
  240. package/dist/fonts/libre-baskerville-latin-ext-700-normal.woff +0 -0
  241. package/dist/fonts/libre-baskerville-latin-ext-700-normal.woff2 +0 -0
  242. package/dist/fonts/montserrat-cyrillic-400-normal.woff +0 -0
  243. package/dist/fonts/montserrat-cyrillic-400-normal.woff2 +0 -0
  244. package/dist/fonts/montserrat-cyrillic-500-normal.woff +0 -0
  245. package/dist/fonts/montserrat-cyrillic-500-normal.woff2 +0 -0
  246. package/dist/fonts/montserrat-cyrillic-600-normal.woff +0 -0
  247. package/dist/fonts/montserrat-cyrillic-600-normal.woff2 +0 -0
  248. package/dist/fonts/montserrat-cyrillic-ext-400-normal.woff +0 -0
  249. package/dist/fonts/montserrat-cyrillic-ext-400-normal.woff2 +0 -0
  250. package/dist/fonts/montserrat-cyrillic-ext-500-normal.woff +0 -0
  251. package/dist/fonts/montserrat-cyrillic-ext-500-normal.woff2 +0 -0
  252. package/dist/fonts/montserrat-cyrillic-ext-600-normal.woff +0 -0
  253. package/dist/fonts/montserrat-cyrillic-ext-600-normal.woff2 +0 -0
  254. package/dist/fonts/montserrat-latin-400-normal.woff +0 -0
  255. package/dist/fonts/montserrat-latin-400-normal.woff2 +0 -0
  256. package/dist/fonts/montserrat-latin-500-normal.woff +0 -0
  257. package/dist/fonts/montserrat-latin-500-normal.woff2 +0 -0
  258. package/dist/fonts/montserrat-latin-600-normal.woff +0 -0
  259. package/dist/fonts/montserrat-latin-600-normal.woff2 +0 -0
  260. package/dist/fonts/montserrat-latin-ext-400-normal.woff +0 -0
  261. package/dist/fonts/montserrat-latin-ext-400-normal.woff2 +0 -0
  262. package/dist/fonts/montserrat-latin-ext-500-normal.woff +0 -0
  263. package/dist/fonts/montserrat-latin-ext-500-normal.woff2 +0 -0
  264. package/dist/fonts/montserrat-latin-ext-600-normal.woff +0 -0
  265. package/dist/fonts/montserrat-latin-ext-600-normal.woff2 +0 -0
  266. package/dist/fonts/montserrat-vietnamese-400-normal.woff +0 -0
  267. package/dist/fonts/montserrat-vietnamese-400-normal.woff2 +0 -0
  268. package/dist/fonts/montserrat-vietnamese-500-normal.woff +0 -0
  269. package/dist/fonts/montserrat-vietnamese-500-normal.woff2 +0 -0
  270. package/dist/fonts/montserrat-vietnamese-600-normal.woff +0 -0
  271. package/dist/fonts/montserrat-vietnamese-600-normal.woff2 +0 -0
  272. package/dist/fonts/playfair-display-cyrillic-400-normal.woff +0 -0
  273. package/dist/fonts/playfair-display-cyrillic-400-normal.woff2 +0 -0
  274. package/dist/fonts/playfair-display-cyrillic-500-normal.woff +0 -0
  275. package/dist/fonts/playfair-display-cyrillic-500-normal.woff2 +0 -0
  276. package/dist/fonts/playfair-display-latin-400-normal.woff +0 -0
  277. package/dist/fonts/playfair-display-latin-400-normal.woff2 +0 -0
  278. package/dist/fonts/playfair-display-latin-500-normal.woff +0 -0
  279. package/dist/fonts/playfair-display-latin-500-normal.woff2 +0 -0
  280. package/dist/fonts/playfair-display-latin-ext-400-normal.woff +0 -0
  281. package/dist/fonts/playfair-display-latin-ext-400-normal.woff2 +0 -0
  282. package/dist/fonts/playfair-display-latin-ext-500-normal.woff +0 -0
  283. package/dist/fonts/playfair-display-latin-ext-500-normal.woff2 +0 -0
  284. package/dist/fonts/playfair-display-vietnamese-400-normal.woff +0 -0
  285. package/dist/fonts/playfair-display-vietnamese-400-normal.woff2 +0 -0
  286. package/dist/fonts/playfair-display-vietnamese-500-normal.woff +0 -0
  287. package/dist/fonts/playfair-display-vietnamese-500-normal.woff2 +0 -0
  288. package/dist/fonts/poppins-devanagari-400-normal.woff +0 -0
  289. package/dist/fonts/poppins-devanagari-400-normal.woff2 +0 -0
  290. package/dist/fonts/poppins-devanagari-500-normal.woff +0 -0
  291. package/dist/fonts/poppins-devanagari-500-normal.woff2 +0 -0
  292. package/dist/fonts/poppins-devanagari-600-normal.woff +0 -0
  293. package/dist/fonts/poppins-devanagari-600-normal.woff2 +0 -0
  294. package/dist/fonts/poppins-latin-400-normal.woff +0 -0
  295. package/dist/fonts/poppins-latin-400-normal.woff2 +0 -0
  296. package/dist/fonts/poppins-latin-500-normal.woff +0 -0
  297. package/dist/fonts/poppins-latin-500-normal.woff2 +0 -0
  298. package/dist/fonts/poppins-latin-600-normal.woff +0 -0
  299. package/dist/fonts/poppins-latin-600-normal.woff2 +0 -0
  300. package/dist/fonts/poppins-latin-ext-400-normal.woff +0 -0
  301. package/dist/fonts/poppins-latin-ext-400-normal.woff2 +0 -0
  302. package/dist/fonts/poppins-latin-ext-500-normal.woff +0 -0
  303. package/dist/fonts/poppins-latin-ext-500-normal.woff2 +0 -0
  304. package/dist/fonts/poppins-latin-ext-600-normal.woff +0 -0
  305. package/dist/fonts/poppins-latin-ext-600-normal.woff2 +0 -0
  306. package/dist/fonts/rubik-arabic-400-normal.woff +0 -0
  307. package/dist/fonts/rubik-arabic-400-normal.woff2 +0 -0
  308. package/dist/fonts/rubik-arabic-500-normal.woff +0 -0
  309. package/dist/fonts/rubik-arabic-500-normal.woff2 +0 -0
  310. package/dist/fonts/rubik-cyrillic-400-normal.woff +0 -0
  311. package/dist/fonts/rubik-cyrillic-400-normal.woff2 +0 -0
  312. package/dist/fonts/rubik-cyrillic-500-normal.woff +0 -0
  313. package/dist/fonts/rubik-cyrillic-500-normal.woff2 +0 -0
  314. package/dist/fonts/rubik-cyrillic-ext-400-normal.woff +0 -0
  315. package/dist/fonts/rubik-cyrillic-ext-400-normal.woff2 +0 -0
  316. package/dist/fonts/rubik-cyrillic-ext-500-normal.woff +0 -0
  317. package/dist/fonts/rubik-cyrillic-ext-500-normal.woff2 +0 -0
  318. package/dist/fonts/rubik-hebrew-400-normal.woff +0 -0
  319. package/dist/fonts/rubik-hebrew-400-normal.woff2 +0 -0
  320. package/dist/fonts/rubik-hebrew-500-normal.woff +0 -0
  321. package/dist/fonts/rubik-hebrew-500-normal.woff2 +0 -0
  322. package/dist/fonts/rubik-latin-400-normal.woff +0 -0
  323. package/dist/fonts/rubik-latin-400-normal.woff2 +0 -0
  324. package/dist/fonts/rubik-latin-500-normal.woff +0 -0
  325. package/dist/fonts/rubik-latin-500-normal.woff2 +0 -0
  326. package/dist/fonts/rubik-latin-ext-400-normal.woff +0 -0
  327. package/dist/fonts/rubik-latin-ext-400-normal.woff2 +0 -0
  328. package/dist/fonts/rubik-latin-ext-500-normal.woff +0 -0
  329. package/dist/fonts/rubik-latin-ext-500-normal.woff2 +0 -0
  330. package/dist/fonts/source-serif-pro-cyrillic-400-normal.woff +0 -0
  331. package/dist/fonts/source-serif-pro-cyrillic-400-normal.woff2 +0 -0
  332. package/dist/fonts/source-serif-pro-cyrillic-ext-400-normal.woff +0 -0
  333. package/dist/fonts/source-serif-pro-cyrillic-ext-400-normal.woff2 +0 -0
  334. package/dist/fonts/source-serif-pro-greek-400-normal.woff +0 -0
  335. package/dist/fonts/source-serif-pro-greek-400-normal.woff2 +0 -0
  336. package/dist/fonts/source-serif-pro-latin-400-normal.woff +0 -0
  337. package/dist/fonts/source-serif-pro-latin-400-normal.woff2 +0 -0
  338. package/dist/fonts/source-serif-pro-latin-ext-400-normal.woff +0 -0
  339. package/dist/fonts/source-serif-pro-latin-ext-400-normal.woff2 +0 -0
  340. package/dist/fonts/source-serif-pro-vietnamese-400-normal.woff +0 -0
  341. package/dist/fonts/source-serif-pro-vietnamese-400-normal.woff2 +0 -0
  342. package/dist/fonts/space-grotesk-latin-400-normal.woff +0 -0
  343. package/dist/fonts/space-grotesk-latin-400-normal.woff2 +0 -0
  344. package/dist/fonts/space-grotesk-latin-600-normal.woff +0 -0
  345. package/dist/fonts/space-grotesk-latin-600-normal.woff2 +0 -0
  346. package/dist/fonts/space-grotesk-latin-700-normal.woff +0 -0
  347. package/dist/fonts/space-grotesk-latin-700-normal.woff2 +0 -0
  348. package/dist/fonts/space-grotesk-latin-ext-400-normal.woff +0 -0
  349. package/dist/fonts/space-grotesk-latin-ext-400-normal.woff2 +0 -0
  350. package/dist/fonts/space-grotesk-latin-ext-600-normal.woff +0 -0
  351. package/dist/fonts/space-grotesk-latin-ext-600-normal.woff2 +0 -0
  352. package/dist/fonts/space-grotesk-latin-ext-700-normal.woff +0 -0
  353. package/dist/fonts/space-grotesk-latin-ext-700-normal.woff2 +0 -0
  354. package/dist/fonts/space-grotesk-vietnamese-400-normal.woff +0 -0
  355. package/dist/fonts/space-grotesk-vietnamese-400-normal.woff2 +0 -0
  356. package/dist/fonts/space-grotesk-vietnamese-600-normal.woff +0 -0
  357. package/dist/fonts/space-grotesk-vietnamese-600-normal.woff2 +0 -0
  358. package/dist/fonts/space-grotesk-vietnamese-700-normal.woff +0 -0
  359. package/dist/fonts/space-grotesk-vietnamese-700-normal.woff2 +0 -0
  360. package/dist/fonts/work-sans-latin-400-normal.woff +0 -0
  361. package/dist/fonts/work-sans-latin-400-normal.woff2 +0 -0
  362. package/dist/fonts/work-sans-latin-500-normal.woff +0 -0
  363. package/dist/fonts/work-sans-latin-500-normal.woff2 +0 -0
  364. package/dist/fonts/work-sans-latin-ext-400-normal.woff +0 -0
  365. package/dist/fonts/work-sans-latin-ext-400-normal.woff2 +0 -0
  366. package/dist/fonts/work-sans-latin-ext-500-normal.woff +0 -0
  367. package/dist/fonts/work-sans-latin-ext-500-normal.woff2 +0 -0
  368. package/dist/fonts/work-sans-vietnamese-400-normal.woff +0 -0
  369. package/dist/fonts/work-sans-vietnamese-400-normal.woff2 +0 -0
  370. package/dist/fonts/work-sans-vietnamese-500-normal.woff +0 -0
  371. package/dist/fonts/work-sans-vietnamese-500-normal.woff2 +0 -0
  372. package/dist/footer.js +308 -0
  373. package/dist/footer.js.map +1 -0
  374. package/dist/form-field.js +69 -0
  375. package/dist/form-field.js.map +1 -0
  376. package/dist/form.js +732 -0
  377. package/dist/form.js.map +1 -0
  378. package/dist/format.js +112 -0
  379. package/dist/format.js.map +1 -0
  380. package/dist/fouc.js +28 -0
  381. package/dist/fouc.js.map +1 -0
  382. package/dist/header.js +289 -0
  383. package/dist/header.js.map +1 -0
  384. package/dist/hooks.js +13 -0
  385. package/dist/hooks.js.map +1 -0
  386. package/dist/hover-card.js +210 -0
  387. package/dist/hover-card.js.map +1 -0
  388. package/dist/index-0ioNhtNM.js +11 -0
  389. package/dist/index-0ioNhtNM.js.map +1 -0
  390. package/dist/index-1QHKgw6D.js +55 -0
  391. package/dist/index-1QHKgw6D.js.map +1 -0
  392. package/dist/index-B6sSWi7l.js +747 -0
  393. package/dist/index-B6sSWi7l.js.map +1 -0
  394. package/dist/index-BCjJQGh8.js +71 -0
  395. package/dist/index-BCjJQGh8.js.map +1 -0
  396. package/dist/index-BGQepRFJ.js +28 -0
  397. package/dist/index-BGQepRFJ.js.map +1 -0
  398. package/dist/index-BVRIAMfe.js +37 -0
  399. package/dist/index-BVRIAMfe.js.map +1 -0
  400. package/dist/index-BY7PeRJA.js +145 -0
  401. package/dist/index-BY7PeRJA.js.map +1 -0
  402. package/dist/index-BZPx6jYI.js +9 -0
  403. package/dist/index-BZPx6jYI.js.map +1 -0
  404. package/dist/index-Ba4eHUBD.js +243 -0
  405. package/dist/index-Ba4eHUBD.js.map +1 -0
  406. package/dist/index-Bke1qZdk.js +35 -0
  407. package/dist/index-Bke1qZdk.js.map +1 -0
  408. package/dist/index-C0UREtMP.js +60 -0
  409. package/dist/index-C0UREtMP.js.map +1 -0
  410. package/dist/index-CCKe-Mpx.js +7 -0
  411. package/dist/index-CCKe-Mpx.js.map +1 -0
  412. package/dist/index-DFZozV_h.js +69 -0
  413. package/dist/index-DFZozV_h.js.map +1 -0
  414. package/dist/index-DFi6WydO.js +180 -0
  415. package/dist/index-DFi6WydO.js.map +1 -0
  416. package/dist/index-DQH6odE9.js +83 -0
  417. package/dist/index-DQH6odE9.js.map +1 -0
  418. package/dist/index-EO5flKM3.js +119 -0
  419. package/dist/index-EO5flKM3.js.map +1 -0
  420. package/dist/index-Lf7yDOXW.js +615 -0
  421. package/dist/index-Lf7yDOXW.js.map +1 -0
  422. package/dist/index-dhIqEbxW.js +1541 -0
  423. package/dist/index-dhIqEbxW.js.map +1 -0
  424. package/dist/index-pWhlqjff.js +32 -0
  425. package/dist/index-pWhlqjff.js.map +1 -0
  426. package/dist/index-rKs9bXHr.js +7 -0
  427. package/dist/index-rKs9bXHr.js.map +1 -0
  428. package/dist/index-xqkGMOJ8.js +14 -0
  429. package/dist/index-xqkGMOJ8.js.map +1 -0
  430. package/dist/index.js +247 -0
  431. package/dist/index.js.map +1 -0
  432. package/dist/input.js +22 -0
  433. package/dist/input.js.map +1 -0
  434. package/dist/label.js +36 -0
  435. package/dist/label.js.map +1 -0
  436. package/dist/layout-wrapper.js +208 -0
  437. package/dist/layout-wrapper.js.map +1 -0
  438. package/dist/llms.txt +1140 -0
  439. package/dist/menu-DBhEanGo.js +16 -0
  440. package/dist/menu-DBhEanGo.js.map +1 -0
  441. package/dist/menubar.js +565 -0
  442. package/dist/menubar.js.map +1 -0
  443. package/dist/mobile.js +183 -0
  444. package/dist/mobile.js.map +1 -0
  445. package/dist/motion.js +119 -0
  446. package/dist/motion.js.map +1 -0
  447. package/dist/page-header.js +47 -0
  448. package/dist/page-header.js.map +1 -0
  449. package/dist/page.js +214 -0
  450. package/dist/page.js.map +1 -0
  451. package/dist/pagination.js +121 -0
  452. package/dist/pagination.js.map +1 -0
  453. package/dist/platform.js +194 -0
  454. package/dist/platform.js.map +1 -0
  455. package/dist/popover.js +263 -0
  456. package/dist/popover.js.map +1 -0
  457. package/dist/popup.js +335 -0
  458. package/dist/popup.js.map +1 -0
  459. package/dist/progress.js +108 -0
  460. package/dist/progress.js.map +1 -0
  461. package/dist/radio-group.js +272 -0
  462. package/dist/radio-group.js.map +1 -0
  463. package/dist/safe-area.js +42 -0
  464. package/dist/safe-area.js.map +1 -0
  465. package/dist/search-CpUwRnG-.js +15 -0
  466. package/dist/search-CpUwRnG-.js.map +1 -0
  467. package/dist/select.js +985 -0
  468. package/dist/select.js.map +1 -0
  469. package/dist/separator.js +45 -0
  470. package/dist/separator.js.map +1 -0
  471. package/dist/sheet.js +127 -0
  472. package/dist/sheet.js.map +1 -0
  473. package/dist/skeleton.js +16 -0
  474. package/dist/skeleton.js.map +1 -0
  475. package/dist/slider.js +485 -0
  476. package/dist/slider.js.map +1 -0
  477. package/dist/sonner.js +52 -0
  478. package/dist/sonner.js.map +1 -0
  479. package/dist/styles/fonts.css +253 -0
  480. package/dist/styles.css +2 -0
  481. package/dist/switch.js +155 -0
  482. package/dist/switch.js.map +1 -0
  483. package/dist/tab-bar.js +110 -0
  484. package/dist/tab-bar.js.map +1 -0
  485. package/dist/table.js +115 -0
  486. package/dist/table.js.map +1 -0
  487. package/dist/tabs.js +218 -0
  488. package/dist/tabs.js.map +1 -0
  489. package/dist/textarea.js +19 -0
  490. package/dist/textarea.js.map +1 -0
  491. package/dist/theme-provider.js +154 -0
  492. package/dist/theme-provider.js.map +1 -0
  493. package/dist/themes.js +873 -0
  494. package/dist/themes.js.map +1 -0
  495. package/dist/toast.js +63 -0
  496. package/dist/toast.js.map +1 -0
  497. package/dist/toggle.js +70 -0
  498. package/dist/toggle.js.map +1 -0
  499. package/dist/tooltip.js +375 -0
  500. package/dist/tooltip.js.map +1 -0
  501. package/dist/types/App.d.ts +3 -0
  502. package/dist/types/App.d.ts.map +1 -0
  503. package/dist/types/components/layouts/admin.d.ts +117 -0
  504. package/dist/types/components/layouts/admin.d.ts.map +1 -0
  505. package/dist/types/components/layouts/auth.d.ts +17 -0
  506. package/dist/types/components/layouts/auth.d.ts.map +1 -0
  507. package/dist/types/components/layouts/blank.d.ts +63 -0
  508. package/dist/types/components/layouts/blank.d.ts.map +1 -0
  509. package/dist/types/components/layouts/layout-wrapper.d.ts +130 -0
  510. package/dist/types/components/layouts/layout-wrapper.d.ts.map +1 -0
  511. package/dist/types/components/layouts/mobile.d.ts +91 -0
  512. package/dist/types/components/layouts/mobile.d.ts.map +1 -0
  513. package/dist/types/components/layouts/page.d.ts +181 -0
  514. package/dist/types/components/layouts/page.d.ts.map +1 -0
  515. package/dist/types/components/layouts/popup.d.ts +100 -0
  516. package/dist/types/components/layouts/popup.d.ts.map +1 -0
  517. package/dist/types/components/sections/container.d.ts +79 -0
  518. package/dist/types/components/sections/container.d.ts.map +1 -0
  519. package/dist/types/components/sections/footer.d.ts +128 -0
  520. package/dist/types/components/sections/footer.d.ts.map +1 -0
  521. package/dist/types/components/sections/header.d.ts +72 -0
  522. package/dist/types/components/sections/header.d.ts.map +1 -0
  523. package/dist/types/components/sections/safe-area.d.ts +46 -0
  524. package/dist/types/components/sections/safe-area.d.ts.map +1 -0
  525. package/dist/types/components/sections/tab-bar.d.ts +61 -0
  526. package/dist/types/components/sections/tab-bar.d.ts.map +1 -0
  527. package/dist/types/components/ui/accordion.d.ts +8 -0
  528. package/dist/types/components/ui/accordion.d.ts.map +1 -0
  529. package/dist/types/components/ui/alert.d.ts +10 -0
  530. package/dist/types/components/ui/alert.d.ts.map +1 -0
  531. package/dist/types/components/ui/avatar.d.ts +7 -0
  532. package/dist/types/components/ui/avatar.d.ts.map +1 -0
  533. package/dist/types/components/ui/badge.d.ts +10 -0
  534. package/dist/types/components/ui/badge.d.ts.map +1 -0
  535. package/dist/types/components/ui/breadcrumb.d.ts +12 -0
  536. package/dist/types/components/ui/breadcrumb.d.ts.map +1 -0
  537. package/dist/types/components/ui/button.d.ts +11 -0
  538. package/dist/types/components/ui/button.d.ts.map +1 -0
  539. package/dist/types/components/ui/calendar.d.ts +9 -0
  540. package/dist/types/components/ui/calendar.d.ts.map +1 -0
  541. package/dist/types/components/ui/card.d.ts +10 -0
  542. package/dist/types/components/ui/card.d.ts.map +1 -0
  543. package/dist/types/components/ui/checkbox.d.ts +5 -0
  544. package/dist/types/components/ui/checkbox.d.ts.map +1 -0
  545. package/dist/types/components/ui/collapsible.d.ts +6 -0
  546. package/dist/types/components/ui/collapsible.d.ts.map +1 -0
  547. package/dist/types/components/ui/command.d.ts +19 -0
  548. package/dist/types/components/ui/command.d.ts.map +1 -0
  549. package/dist/types/components/ui/confirm-dialog.d.ts +72 -0
  550. package/dist/types/components/ui/confirm-dialog.d.ts.map +1 -0
  551. package/dist/types/components/ui/data-table.d.ts +211 -0
  552. package/dist/types/components/ui/data-table.d.ts.map +1 -0
  553. package/dist/types/components/ui/detail-page.d.ts +119 -0
  554. package/dist/types/components/ui/detail-page.d.ts.map +1 -0
  555. package/dist/types/components/ui/dialog.d.ts +16 -0
  556. package/dist/types/components/ui/dialog.d.ts.map +1 -0
  557. package/dist/types/components/ui/dropdown-menu.d.ts +26 -0
  558. package/dist/types/components/ui/dropdown-menu.d.ts.map +1 -0
  559. package/dist/types/components/ui/empty-state.d.ts +30 -0
  560. package/dist/types/components/ui/empty-state.d.ts.map +1 -0
  561. package/dist/types/components/ui/form-field.d.ts +57 -0
  562. package/dist/types/components/ui/form-field.d.ts.map +1 -0
  563. package/dist/types/components/ui/form.d.ts +185 -0
  564. package/dist/types/components/ui/form.d.ts.map +1 -0
  565. package/dist/types/components/ui/hover-card.d.ts +7 -0
  566. package/dist/types/components/ui/hover-card.d.ts.map +1 -0
  567. package/dist/types/components/ui/input.d.ts +4 -0
  568. package/dist/types/components/ui/input.d.ts.map +1 -0
  569. package/dist/types/components/ui/label.d.ts +5 -0
  570. package/dist/types/components/ui/label.d.ts.map +1 -0
  571. package/dist/types/components/ui/menubar.d.ts +27 -0
  572. package/dist/types/components/ui/menubar.d.ts.map +1 -0
  573. package/dist/types/components/ui/motion.d.ts +130 -0
  574. package/dist/types/components/ui/motion.d.ts.map +1 -0
  575. package/dist/types/components/ui/page-header.d.ts +45 -0
  576. package/dist/types/components/ui/page-header.d.ts.map +1 -0
  577. package/dist/types/components/ui/pagination.d.ts +14 -0
  578. package/dist/types/components/ui/pagination.d.ts.map +1 -0
  579. package/dist/types/components/ui/popover.d.ts +8 -0
  580. package/dist/types/components/ui/popover.d.ts.map +1 -0
  581. package/dist/types/components/ui/progress.d.ts +5 -0
  582. package/dist/types/components/ui/progress.d.ts.map +1 -0
  583. package/dist/types/components/ui/radio-group.d.ts +6 -0
  584. package/dist/types/components/ui/radio-group.d.ts.map +1 -0
  585. package/dist/types/components/ui/select.d.ts +16 -0
  586. package/dist/types/components/ui/select.d.ts.map +1 -0
  587. package/dist/types/components/ui/separator.d.ts +5 -0
  588. package/dist/types/components/ui/separator.d.ts.map +1 -0
  589. package/dist/types/components/ui/sheet.d.ts +14 -0
  590. package/dist/types/components/ui/sheet.d.ts.map +1 -0
  591. package/dist/types/components/ui/skeleton.d.ts +3 -0
  592. package/dist/types/components/ui/skeleton.d.ts.map +1 -0
  593. package/dist/types/components/ui/slider.d.ts +5 -0
  594. package/dist/types/components/ui/slider.d.ts.map +1 -0
  595. package/dist/types/components/ui/sonner.d.ts +4 -0
  596. package/dist/types/components/ui/sonner.d.ts.map +1 -0
  597. package/dist/types/components/ui/switch.d.ts +5 -0
  598. package/dist/types/components/ui/switch.d.ts.map +1 -0
  599. package/dist/types/components/ui/table.d.ts +11 -0
  600. package/dist/types/components/ui/table.d.ts.map +1 -0
  601. package/dist/types/components/ui/tabs.d.ts +8 -0
  602. package/dist/types/components/ui/tabs.d.ts.map +1 -0
  603. package/dist/types/components/ui/textarea.d.ts +4 -0
  604. package/dist/types/components/ui/textarea.d.ts.map +1 -0
  605. package/dist/types/components/ui/toast.d.ts +70 -0
  606. package/dist/types/components/ui/toast.d.ts.map +1 -0
  607. package/dist/types/components/ui/toggle.d.ts +10 -0
  608. package/dist/types/components/ui/toggle.d.ts.map +1 -0
  609. package/dist/types/components/ui/tooltip.d.ts +8 -0
  610. package/dist/types/components/ui/tooltip.d.ts.map +1 -0
  611. package/dist/types/hooks/index.d.ts +14 -0
  612. package/dist/types/hooks/index.d.ts.map +1 -0
  613. package/dist/types/hooks/useApi.d.ts +38 -0
  614. package/dist/types/hooks/useApi.d.ts.map +1 -0
  615. package/dist/types/hooks/useBreakpoint.d.ts +35 -0
  616. package/dist/types/hooks/useBreakpoint.d.ts.map +1 -0
  617. package/dist/types/hooks/useDataTable.d.ts +59 -0
  618. package/dist/types/hooks/useDataTable.d.ts.map +1 -0
  619. package/dist/types/hooks/useMediaQuery.d.ts +12 -0
  620. package/dist/types/hooks/useMediaQuery.d.ts.map +1 -0
  621. package/dist/types/hooks/useStorage.d.ts +35 -0
  622. package/dist/types/hooks/useStorage.d.ts.map +1 -0
  623. package/dist/types/index.d.ts +75 -0
  624. package/dist/types/index.d.ts.map +1 -0
  625. package/dist/types/lib/errors.d.ts +37 -0
  626. package/dist/types/lib/errors.d.ts.map +1 -0
  627. package/dist/types/lib/format.d.ts +80 -0
  628. package/dist/types/lib/format.d.ts.map +1 -0
  629. package/dist/types/lib/fouc.d.ts +64 -0
  630. package/dist/types/lib/fouc.d.ts.map +1 -0
  631. package/dist/types/lib/platform.d.ts +156 -0
  632. package/dist/types/lib/platform.d.ts.map +1 -0
  633. package/dist/types/lib/utils.d.ts +14 -0
  634. package/dist/types/lib/utils.d.ts.map +1 -0
  635. package/dist/types/main.d.ts +2 -0
  636. package/dist/types/main.d.ts.map +1 -0
  637. package/dist/types/themes/index.d.ts +499 -0
  638. package/dist/types/themes/index.d.ts.map +1 -0
  639. package/dist/types/themes/presets/base.d.ts +108 -0
  640. package/dist/types/themes/presets/base.d.ts.map +1 -0
  641. package/dist/types/themes/presets/elegant.d.ts +108 -0
  642. package/dist/types/themes/presets/elegant.d.ts.map +1 -0
  643. package/dist/types/themes/presets/metro.d.ts +114 -0
  644. package/dist/types/themes/presets/metro.d.ts.map +1 -0
  645. package/dist/types/themes/presets/studio.d.ts +115 -0
  646. package/dist/types/themes/presets/studio.d.ts.map +1 -0
  647. package/dist/types/themes/presets/vivid.d.ts +115 -0
  648. package/dist/types/themes/presets/vivid.d.ts.map +1 -0
  649. package/dist/types/themes/theme-provider.d.ts +122 -0
  650. package/dist/types/themes/theme-provider.d.ts.map +1 -0
  651. package/dist/types/types/index.d.ts +813 -0
  652. package/dist/types/types/index.d.ts.map +1 -0
  653. package/dist/uikit.css +1 -0
  654. package/dist/useDataTable-CPiBpEg-.js +254 -0
  655. package/dist/useDataTable-CPiBpEg-.js.map +1 -0
  656. package/dist/utils-CwJPJKOE.js +2278 -0
  657. package/dist/utils-CwJPJKOE.js.map +1 -0
  658. package/dist/utils.js +5 -0
  659. package/dist/utils.js.map +1 -0
  660. package/dist/wrapper.js +13 -0
  661. package/dist/wrapper.js.map +1 -0
  662. package/dist/x-BxwubQiM.js +15 -0
  663. package/dist/x-BxwubQiM.js.map +1 -0
  664. package/examples/README.md +18 -0
  665. package/examples/button.tsx +16 -0
  666. package/examples/confirm-dialog.tsx +44 -0
  667. package/examples/data-table.tsx +35 -0
  668. package/examples/dialog.tsx +34 -0
  669. package/examples/empty-state.tsx +13 -0
  670. package/examples/form-field.tsx +22 -0
  671. package/examples/format.tsx +19 -0
  672. package/examples/page-header.tsx +17 -0
  673. package/examples/skeleton.tsx +12 -0
  674. package/examples/theme-provider.tsx +33 -0
  675. package/examples/toast.tsx +32 -0
  676. package/examples/use-breakpoint.tsx +17 -0
  677. package/llms.txt +1140 -0
  678. package/package.json +430 -0
@@ -0,0 +1,359 @@
1
+ # UIKit Theme Guide
2
+
3
+ **Transform your UIKit applications with beautiful, brand-consistent themes that work seamlessly across all components and layouts.**
4
+
5
+ ## 🎨 Understanding UIKit Theming
6
+
7
+ UIKit is built on **ShadCN components** and **Tailwind CSS v4**, enhanced with a powerful semantic color system that automatically adapts to your brand. Instead of hardcoded colors like `bg-white` or `text-black`, UIKit uses semantic classes like `bg-background`, `text-foreground`, and `border-border` that intelligently change based on your selected theme.
8
+
9
+ **How it works:**
10
+ - **Semantic colors** automatically map to your theme's values
11
+ - **29 color variables** control the entire design system (backgrounds, text, borders, charts, sidebar)
12
+ - **Light/dark modes** are handled automatically with proper contrast ratios
13
+ - **All components** inherit your theme without any code changes
14
+
15
+ **The result:** Change one theme file, transform your entire application instantly.
16
+
17
+ ## 🎯 How Semantic Colors Work
18
+
19
+ ### Primary Color Impact
20
+ When you set `primary: '#3B82F6'` (blue) in your theme, it automatically affects these classes across your entire application:
21
+
22
+ ```jsx
23
+ // Button components
24
+ <Button className="bg-primary text-primary-foreground"> // Blue button with white text
25
+ <Button variant="outline" className="border-primary text-primary"> // Blue outline with blue text
26
+
27
+ // Form elements
28
+ <Input className="focus:ring-primary" /> // Blue focus ring
29
+ <Checkbox className="data-[state=checked]:bg-primary" /> // Blue when checked
30
+
31
+ // Links and accents
32
+ <a className="text-primary hover:text-primary/80">Link</a> // Blue link
33
+ <Badge className="bg-primary text-primary-foreground">New</Badge> // Blue badge
34
+
35
+ // Charts and data visualization
36
+ <BarChart colors={['var(--primary)']} /> // Blue charts
37
+ ```
38
+
39
+ ### Core Color Relationships
40
+
41
+ **Background Colors Hierarchy:**
42
+ ```jsx
43
+ // Page structure
44
+ <div className="bg-background"> // Main page (white/dark)
45
+ <Card className="bg-card"> // Elevated content (white/slightly lighter)
46
+ <div className="bg-muted"> // Subtle sections (light gray/darker)
47
+ <div className="bg-accent"> // Interactive areas (very light/subtle)
48
+ ```
49
+
50
+ **Text Color Hierarchy:**
51
+ ```jsx
52
+ <h1 className="text-foreground"> // Primary headings (dark/light)
53
+ <p className="text-muted-foreground"> // Secondary text (gray)
54
+ <span className="text-primary"> // Brand/link text (your brand color)
55
+ ```
56
+
57
+ **Border System:**
58
+ ```jsx
59
+ <div className="border-border"> // Standard borders (light gray)
60
+ <input className="border-input"> // Form borders (same as border)
61
+ <div className="ring-ring"> // Focus rings (usually primary color)
62
+ ```
63
+
64
+ ## 🎨 Color Selection Guide
65
+
66
+ ### ✅ **Good Color Choices**
67
+
68
+ **Primary Color (Your Brand):**
69
+ - Use your actual brand color
70
+ - Ensure good contrast with white text
71
+ - Test in both light and dark modes
72
+ ```javascript
73
+ // Good examples
74
+ primary: '#1E40AF', // Professional blue
75
+ primary: '#059669', // Trust green
76
+ primary: '#7C3AED', // Creative purple
77
+ ```
78
+
79
+ **Background Colors:**
80
+ - Light mode: Pure white or very light grays
81
+ - Dark mode: True darks, avoid pure black
82
+ ```javascript
83
+ // Light mode
84
+ background: '#FFFFFF', // Pure white
85
+ card: '#FFFFFF', // Same as background for clean look
86
+ muted: '#F8FAFC', // Very light gray for subtle sections
87
+
88
+ // Dark mode
89
+ background: '#0F172A', // Dark blue-gray (not pure black)
90
+ card: '#1E293B', // Slightly lighter than background
91
+ muted: '#334155', // Lighter gray for contrast
92
+ ```
93
+
94
+ ### ❌ **Avoid These Mistakes**
95
+
96
+ **Don't use low-contrast colors:**
97
+ ```javascript
98
+ // ❌ Bad - poor readability
99
+ primary: '#FFEB3B', // Yellow on white background
100
+ foreground: '#9CA3AF', // Light gray text on white
101
+
102
+ // ✅ Good - high contrast
103
+ primary: '#1D4ED8', // Dark blue
104
+ foreground: '#1F2937', // Dark gray/black
105
+ ```
106
+
107
+ **Don't ignore dark mode:**
108
+ ```javascript
109
+ // ❌ Bad - same colors for both modes
110
+ light: { primary: '#1E40AF' },
111
+ dark: { primary: '#1E40AF' }, // Too dark for dark backgrounds
112
+
113
+ // ✅ Good - adjusted for dark mode
114
+ light: { primary: '#1E40AF' },
115
+ dark: { primary: '#60A5FA' }, // Lighter version for dark mode
116
+ ```
117
+
118
+ **Don't use pure black/white in dark mode:**
119
+ ```javascript
120
+ // ❌ Bad - harsh contrast
121
+ dark: {
122
+ background: '#000000', // Pure black is too harsh
123
+ foreground: '#FFFFFF' // Pure white is too bright
124
+ }
125
+
126
+ // ✅ Good - softer contrast
127
+ dark: {
128
+ background: '#0F172A', // Dark blue-gray
129
+ foreground: '#F8FAFC' // Off-white
130
+ }
131
+ ```
132
+
133
+ ## 🚀 Why Custom Themes?
134
+
135
+ Go beyond UIKit's 5 built-in themes and create professional design systems that:
136
+
137
+ - **Match your brand identity** - Use your exact brand colors and design tokens
138
+ - **Work everywhere** - Automatic application across all 40+ components and 5 layouts
139
+ - **Support both modes** - One theme definition, light/dark modes handled automatically
140
+ - **Maintain accessibility** - Built-in contrast and readability optimization
141
+ - **Scale seamlessly** - From simple apps to enterprise applications
142
+
143
+ **Best part?** You can create and deploy a complete custom theme in under 5 minutes.
144
+
145
+ ## 🚀 Quick Start (Recommended)
146
+
147
+ ### Step 1: Generate Your Theme
148
+ ```bash
149
+ # Create a new custom theme automatically
150
+ npx uikit generate theme brand
151
+
152
+ # This automatically:
153
+ # ✅ Creates theme file with all required colors
154
+ # ✅ Updates your main.tsx with the new theme
155
+ # ✅ Adds proper imports and configuration
156
+ # ✅ Works with SPA, Multi, and FBCA projects
157
+ ```
158
+
159
+ ### Step 2: Customize Your Colors
160
+ Edit the generated theme file to match your brand:
161
+
162
+ ```javascript
163
+ // src/themes/presets/theme-brand.js (or src/web/themes/presets/ for FBCA)
164
+ const themeBrand = {
165
+ id: 'brand',
166
+ name: 'Brand Theme',
167
+
168
+ light: {
169
+ // Main brand color - change this to your brand color
170
+ primary: '#3B82F6', // Your brand blue
171
+ primaryForeground: '#FFFFFF',
172
+
173
+ // Backgrounds
174
+ background: '#FFFFFF', // Page background
175
+ card: '#FFFFFF', // Card backgrounds
176
+
177
+ // Text colors
178
+ foreground: '#1F2937', // Main text
179
+ mutedForeground: '#6B7280', // Secondary text
180
+
181
+ // Other colors (can keep as-is initially)
182
+ secondary: '#F3F4F6',
183
+ secondaryForeground: '#374151',
184
+ accent: '#F3F4F6',
185
+ accentForeground: '#374151',
186
+ destructive: '#EF4444',
187
+ destructiveForeground: '#FFFFFF',
188
+ border: '#E5E7EB',
189
+ input: '#E5E7EB',
190
+ ring: '#3B82F6',
191
+
192
+ // ... more colors (see complete reference below)
193
+ },
194
+
195
+ dark: {
196
+ // Dark mode versions of above colors
197
+ primary: '#60A5FA', // Lighter version for dark mode
198
+ primaryForeground: '#1E293B',
199
+ background: '#0F172A',
200
+ foreground: '#F8FAFC',
201
+ // ... complete dark palette
202
+ }
203
+ };
204
+
205
+ export default themeBrand;
206
+ ```
207
+
208
+ ### Step 3: Bundle and Use
209
+ ```bash
210
+ # Generate CSS from your theme
211
+ npx uikit bundle
212
+
213
+ # Your theme is now ready to use!
214
+ # It's already configured in your main.tsx
215
+ ```
216
+
217
+ ---
218
+
219
+ ## 🔧 Development Workflow
220
+
221
+ ### Watch Mode for Live Updates
222
+ ```bash
223
+ # Start theme development with live reload
224
+ npx uikit bundle --watch
225
+
226
+ # In another terminal, start your app
227
+ npm run dev
228
+
229
+ # Now edit your theme file and see changes instantly!
230
+ ```
231
+
232
+ ### Testing Your Theme
233
+ 1. **Switch between light/dark modes** - Ensure both look good
234
+ 2. **Test different layouts** - AdminLayout, PageLayout, AuthLayout
235
+ 3. **Check form components** - Buttons, inputs, alerts
236
+ 4. **Verify accessibility** - Good contrast ratios
237
+
238
+ ---
239
+
240
+ ## 📋 Complete Color Reference
241
+
242
+ ### Core Colors (Required)
243
+ ```javascript
244
+ light: {
245
+ // Backgrounds
246
+ background: '#FFFFFF', // Main page background
247
+ foreground: '#1F2937', // Primary text
248
+ card: '#FFFFFF', // Card backgrounds
249
+ cardForeground: '#1F2937', // Text on cards
250
+ popover: '#FFFFFF', // Dropdown backgrounds
251
+ popoverForeground: '#1F2937', // Text in dropdowns
252
+
253
+ // Brand & Actions
254
+ primary: '#3B82F6', // Your brand color
255
+ primaryForeground: '#FFFFFF', // Text on brand elements
256
+ secondary: '#F3F4F6', // Secondary buttons
257
+ secondaryForeground: '#374151', // Text on secondary elements
258
+ destructive: '#EF4444', // Error/danger actions
259
+ destructiveForeground: '#FFFFFF', // Text on error elements
260
+
261
+ // Supporting Colors
262
+ muted: '#F9FAFB', // Subtle backgrounds
263
+ mutedForeground: '#6B7280', // Secondary text
264
+ accent: '#F3F4F6', // Accent elements
265
+ accentForeground: '#374151', // Text on accents
266
+
267
+ // Borders & Focus
268
+ border: '#E5E7EB', // Standard borders
269
+ input: '#E5E7EB', // Input borders
270
+ ring: '#3B82F6', // Focus rings
271
+
272
+ // Chart Colors (for data visualization)
273
+ chart1: '#3B82F6', // Primary data
274
+ chart2: '#10B981', // Secondary data
275
+ chart3: '#F59E0B', // Tertiary data
276
+ chart4: '#EF4444', // Warning data
277
+ chart5: '#8B5CF6', // Additional data
278
+
279
+ // Sidebar Colors (for AdminLayout)
280
+ sidebar: '#F8FAFC',
281
+ sidebarForeground: '#334155',
282
+ sidebarPrimary: '#3B82F6',
283
+ sidebarPrimaryForeground: '#FFFFFF',
284
+ sidebarAccent: '#F1F5F9',
285
+ sidebarAccentForeground: '#334155',
286
+ sidebarBorder: '#E2E8F0',
287
+ sidebarRing: '#3B82F6',
288
+ }
289
+ ```
290
+
291
+ ### Dark Mode Colors
292
+ ```javascript
293
+ dark: {
294
+ // Invert backgrounds, adjust brand colors for dark mode
295
+ background: '#0F172A',
296
+ foreground: '#F8FAFC',
297
+ primary: '#60A5FA', // Lighter version of brand color
298
+ // ... all other colors adjusted for dark mode
299
+ }
300
+ ```
301
+
302
+ ---
303
+
304
+ ## 💡 Quick Tips
305
+
306
+ ### Color Selection
307
+ - **Start simple**: Focus on primary, background, and foreground colors first
308
+ - **Brand first**: Use your existing brand colors as the foundation
309
+ - **Test contrast**: Ensure text is readable (use tools like [contrast-ratio.com](https://contrast-ratio.com))
310
+ - **Dark mode**: Make colors lighter/softer for dark backgrounds
311
+
312
+ ### Common Patterns
313
+ ```javascript
314
+ // Corporate/Professional
315
+ primary: '#1E40AF', // Professional blue
316
+ secondary: '#F1F5F9', // Light gray
317
+
318
+ // Creative/Modern
319
+ primary: '#8B5CF6', // Purple
320
+ accent: '#F59E0B', // Orange
321
+
322
+ // E-commerce
323
+ primary: '#059669', // Trust green
324
+ destructive: '#DC2626', // Clear red
325
+ ```
326
+
327
+ ### Project Structure
328
+ - **SPA/Multi projects**: `src/themes/presets/theme-{name}.js`
329
+ - **FBCA projects**: `src/web/themes/presets/theme-{name}.js`
330
+ - **CSS output**: Auto-generated in `globals.css`
331
+
332
+ ---
333
+
334
+ ## 🛠️ CLI Commands
335
+
336
+ ```bash
337
+ # Theme Management
338
+ npx uikit generate theme <name> # Create new theme
339
+ npx uikit bundle # Generate CSS
340
+ npx uikit bundle --watch # Development mode
341
+
342
+ # Example Workflow
343
+ npx uikit generate theme brand # 1. Generate
344
+ npx uikit bundle --watch # 2. Start development
345
+ # Edit theme file # 3. Customize colors
346
+ # See changes live in browser # 4. Iterate
347
+ ```
348
+
349
+ ---
350
+
351
+ ## 🎯 Next Steps
352
+
353
+ 1. **Generate your theme**: `npx uikit generate theme brand`
354
+ 2. **Customize primary color**: Edit the `primary` value to match your brand
355
+ 3. **Test in both modes**: Switch between light and dark mode
356
+ 4. **Refine gradually**: Adjust other colors as needed
357
+ 5. **Share and iterate**: Get feedback and refine your theme
358
+
359
+ **Happy theming!** ✨
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc && vite build",
9
+ "preview": "vite preview",
10
+ "bundle": "npx uikit bundle",
11
+ "serve": "npx uikit serve",
12
+ "deploy": "npx uikit deploy",
13
+ "deploy:gh": "npm run build && gh-pages -d dist",
14
+ "prerender": "npx uikit prerender",
15
+ "optimize": "npx uikit optimize",
16
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0"
17
+ },
18
+ "dependencies": {
19
+ "@tailwindcss/vite": "^4.1.13",
20
+ "@bloomneo/uikit": "latest",
21
+ "react": "^19.1.0",
22
+ "react-dom": "^19.1.0",
23
+ "react-router-dom": "^7.0.0",
24
+ "lucide-react": "latest"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^24.0.0",
28
+ "@types/react": "^19.1.0",
29
+ "@types/react-dom": "^19.1.0",
30
+ "@typescript-eslint/eslint-plugin": "^8.22.0",
31
+ "@typescript-eslint/parser": "^8.22.0",
32
+ "@vitejs/plugin-react": "^4.2.1",
33
+ "eslint": "^9.25.0",
34
+ "eslint-plugin-react-hooks": "^5.1.0",
35
+ "eslint-plugin-react-refresh": "^0.4.16",
36
+ "typescript": "^5.8.0",
37
+ "vite": "^7.0.0",
38
+ "tailwindcss": "^4.1.8",
39
+ "gh-pages": "^6.3.0"
40
+ }
41
+ }
@@ -0,0 +1,10 @@
1
+ <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="32" height="32" rx="8" fill="url(#bluePurpleGradient)"/>
3
+ <text x="16" y="20" font-family="Inter, system-ui, sans-serif" font-size="12" font-weight="900" text-anchor="middle" fill="white" letter-spacing="1px">ui</text>
4
+ <defs>
5
+ <linearGradient id="bluePurpleGradient" x1="0%" y1="0%" x2="100%" y2="100%">
6
+ <stop offset="0%" style="stop-color:#3B82F6;stop-opacity:1" />
7
+ <stop offset="100%" style="stop-color:#8B5CF6;stop-opacity:1" />
8
+ </linearGradient>
9
+ </defs>
10
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="848.28391" height="615.2339" viewBox="0 0 848.28391 615.2339" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" artist="Katerina Limpitsouni" source="https://undraw.co/"><path d="M634.89862,256.95766a554.59164,554.59164,0,0,1-5.22832,71.26187c-.1145.82939-.23926,1.65873-.35424,2.488L406.03976,329.46c-.65557-.82369-1.30082-1.65726-1.926-2.50079-2.08453-2.79166-4.03825-5.66267-5.83174-8.6327-8.62038-14.3084-12.56688-31.06069-8.6121-42.61879l.07082-.1796a20.28147,20.28147,0,0,1,3.95842-6.878c9.01681-10.14979,27.24788-8.45788,43.7922-.26533-14.83916-16.24314-26.655-36.73947-27.55279-55.03482-.88028-17.84516,8.45086-30.59321,18.5716-41.42684.33209-.35814.66412-.70633.99615-1.05445.16116-.1791.332-.34819.4927-.52729,7.89635-8.256,17.10212-16.39469,30.42691-15.41018,14.61381,1.08167,30.81618,13.32235,42.1766,27.58606,11.36047,14.2537,18.90977,30.4461,26.56182,46.24911,7.66188,15.79306,15.9514,31.98965,28.24628,45.48855C540.758,253.19161,527.33168,229.2262,522.372,205.91809s-.5948-45.694,14.24655-56.67128a34.71268,34.71268,0,0,1,15.20493-6.13511c.64025-.10641,1.29065-.1928,1.95124-.26913,13.73893-1.56321,30.14281,3.18849,44.09959,14.54662,15.3703,12.50612,26.02665,31.04593,31.32878,48.64583C634.50473,223.63493,635.06974,240.57835,634.89862,256.95766Z" transform="translate(-175.85805 -142.38305)" fill="#f2f2f2"/><path d="M488.81825,329.92255l-4.26947-.02385q-2.03345-1.27134-4.08612-2.51286c-.84712-.53471-1.70412-1.04952-2.56155-1.57434q-21.24279-12.97391-42.75125-24.88928Q413.661,288.997,391.956,278.17057a1.78937,1.78937,0,0,1-1.02862-2.04581.51534.51534,0,0,1,.07115-.14957c.20183-.37889.65291-.5364,1.31127-.21271,1.77484.88994,3.55993,1.77993,5.33466,2.68988q21.76425,11.01171,43.3417,23.12254,21.56257,12.10564,42.87944,25.27995c.29879.18167.598.37335.89681.555C486.11761,328.24746,487.463,329.085,488.81825,329.92255Z" transform="translate(-175.85805 -142.38305)" fill="#fff"/><path d="M543.86768,330.23014l-2.64009-.01475c-.59545-.8333-1.18065-1.6666-1.7761-2.5q-20.98532-29.42769-41.96185-58.85538-34.35146-48.17766-68.68242-96.35523a1.70041,1.70041,0,0,1-.297-.58168c-.19573-.71113.32663-1.1282.99615-1.05445a2.0056,2.0056,0,0,1,1.395.88781q19.25925,27.018,38.50885,54.016,34.17263,47.9367,68.33556,95.86329c1.44865,2.02815,2.89724,4.06624,4.34589,6.09439C542.687,328.56355,543.28249,329.3969,543.86768,330.23014Z" transform="translate(-175.85805 -142.38305)" fill="#fff"/><path d="M602.68425,314.89856c-.13473,4.44933-.42922,8.82776-.81381,13.16564q-.11169,1.24443-.22387,2.48878l-2.77-.01548c.08471-.82949.16943-1.65905.24389-2.48866.58532-6.26685,1.00062-12.60459,1.057-19.11439a266.65605,266.65605,0,0,0-5.24956-53.75014,334.665,334.665,0,0,0-16.25856-55.84172A383.49231,383.49231,0,0,0,552.068,144.09306a1.47569,1.47569,0,0,1-.24452-.98136c.11428-.78941,1.16541-1.02353,1.95124-.26913a2.29258,2.29258,0,0,1,.3971.50222q1.91668,3.29577,3.76342,6.61116a383.2281,383.2281,0,0,1,25.46063,55.44311,333.08069,333.08069,0,0,1,15.15748,55.9256A263.07433,263.07433,0,0,1,602.68425,314.89856Z" transform="translate(-175.85805 -142.38305)" fill="#fff"/><path d="M791.57777,328.85694h-607a8.72766,8.72766,0,0,0-8.71972,8.72v411.32a8.72766,8.72766,0,0,0,8.71972,8.72h607a8.71242,8.71242,0,0,0,6.63037-3.06,2.04307,2.04307,0,0,0,.18994-.24,8.1662,8.1662,0,0,0,1.25-2.11,8.50708,8.50708,0,0,0,.65967-3.31V337.577A8.72954,8.72954,0,0,0,791.57777,328.85694Zm6.24024,420.04a6.17532,6.17532,0,0,1-1.03028,3.42,6.44578,6.44578,0,0,1-2.35986,2.12,6.1843,6.1843,0,0,1-2.8501.69h-607a6.23757,6.23757,0,0,1-6.23-6.23V337.577a6.23757,6.23757,0,0,1,6.23-6.23h607a6.23945,6.23945,0,0,1,6.24024,6.23Z" transform="translate(-175.85805 -142.38305)" fill="#3f3d56"/><rect x="1.24265" y="221.4231" width="621.95676" height="2.49281" fill="#3f3d56"/><circle cx="22.43155" cy="205.16998" r="7.47844" fill="#3f3d56"/><circle cx="43.93206" cy="205.16998" r="7.47844" fill="#3f3d56"/><circle cx="65.43257" cy="205.16998" r="7.47844" fill="#3f3d56"/><path d="M644.17739,421.50889h-312a13,13,0,0,1,0-26h312a13,13,0,0,1,0,26Zm-312-24a11,11,0,0,0,0,22h312a11,11,0,0,0,0-22Z" transform="translate(-175.85805 -142.38305)" fill="#3f3d56"/><path d="M358.08289,574.12671h-120a17.01917,17.01917,0,0,1-17-17v-56a17.01917,17.01917,0,0,1,17-17h120a17.01917,17.01917,0,0,1,17,17v56A17.01917,17.01917,0,0,1,358.08289,574.12671Z" transform="translate(-175.85805 -142.38305)" fill="#38bdf8"/><path d="M548.083,574.12671h-120a17.01919,17.01919,0,0,1-17.00012-17v-56a17.01919,17.01919,0,0,1,17.00012-17h120a17.01917,17.01917,0,0,1,17,17v56A17.01917,17.01917,0,0,1,548.083,574.12671Z" transform="translate(-175.85805 -142.38305)" fill="#38bdf8"/><path d="M738.083,574.12671h-120a17.01917,17.01917,0,0,1-17-17v-56a17.01917,17.01917,0,0,1,17-17h120a17.01917,17.01917,0,0,1,17,17v56A17.01917,17.01917,0,0,1,738.083,574.12671Z" transform="translate(-175.85805 -142.38305)" fill="#38bdf8"/><path d="M358.08289,692.12671h-120a17.01917,17.01917,0,0,1-17-17v-56a17.01917,17.01917,0,0,1,17-17h120a17.01917,17.01917,0,0,1,17,17v56A17.01917,17.01917,0,0,1,358.08289,692.12671Z" transform="translate(-175.85805 -142.38305)" fill="#38bdf8"/><path d="M548.083,692.12671h-120a17.01919,17.01919,0,0,1-17.00012-17v-56a17.01919,17.01919,0,0,1,17.00012-17h120a17.01917,17.01917,0,0,1,17,17v56A17.01917,17.01917,0,0,1,548.083,692.12671Z" transform="translate(-175.85805 -142.38305)" fill="#38bdf8"/><path d="M738.083,692.12671h-120a17.01917,17.01917,0,0,1-17-17v-56a17.01917,17.01917,0,0,1,17-17h120a17.01917,17.01917,0,0,1,17,17v56A17.01917,17.01917,0,0,1,738.083,692.12671Z" transform="translate(-175.85805 -142.38305)" fill="#38bdf8"/><circle cx="697.11462" cy="248.74366" r="33" fill="#2f2e41"/><path d="M790.30093,562.79573a10.7427,10.7427,0,0,1,6.25283-15.23974l41.81616-88.45906,19.12793,13.413-47.11861,82.73471a10.80091,10.80091,0,0,1-20.07831,7.55105Z" transform="translate(-175.85805 -142.38305)" fill="#ffb8b8"/><path d="M826.13287,470.8413a4.81169,4.81169,0,0,1,.55209-3.97272l13.00137-20.38208a13.37737,13.37737,0,0,1,24.45588,10.8499l-6.54916,23.35317a4.81687,4.81687,0,0,1-6.60409,3.09631L828.78041,473.855A4.81141,4.81141,0,0,1,826.13287,470.8413Z" transform="translate(-175.85805 -142.38305)" fill="#38bdf8"/><path d="M931.348,571.56571a10.74268,10.74268,0,0,1-7.44457-14.69442l-39.60233-89.47208,22.65457-5.706,31.80418,89.74234a10.80091,10.80091,0,0,1-7.41185,20.13012Z" transform="translate(-175.85805 -142.38305)" fill="#ffb8b8"/><polygon points="766.285 591.358 754.765 595.553 733.105 553.115 750.107 546.924 766.285 591.358" fill="#ffb8b8"/><path d="M923.47893,735.69332H947.1228a0,0,0,0,1,0,0v14.88687a0,0,0,0,1,0,0H908.59207a0,0,0,0,1,0,0v0A14.88686,14.88686,0,0,1,923.47893,735.69332Z" transform="translate(-374.11248 219.90765) rotate(-20.00652)" fill="#2f2e41"/><path d="M910.69461,706.89767l-43.88711-76.802a4.82207,4.82207,0,0,1,.052-4.86807l19.76235-32.93708a4.81658,4.81658,0,0,1,8.66077.84148l37.36376,103.46818a4.79859,4.79859,0,0,1-2.46853,5.9897l-13.23928,6.27089a4.7736,4.7736,0,0,1-2.04386.4589A4.84031,4.84031,0,0,1,910.69461,706.89767Z" transform="translate(-175.85805 -142.38305)" fill="#2f2e41"/><circle cx="694.11075" cy="260.23901" r="24.56103" fill="#ffb8b8"/><path d="M835.0336,513.87352c-19.34214-42.88856.15732-66.85887,9.43874-75.17337a14.557,14.557,0,0,1,9.73013-3.72135h34.59941a14.576,14.576,0,0,1,13.03753,21.09462l-23.1296,46.25869-43.488,11.95954Z" transform="translate(-175.85805 -142.38305)" fill="#38bdf8"/><path d="M885.65074,483.434a4.8117,4.8117,0,0,1-2.64533-3.01488l-6.92414-23.16293a13.37737,13.37737,0,0,1,24.198-11.41337l13.39047,20.22269a4.81688,4.81688,0,0,1-1.97428,7.02164l-22.03343,10.31357A4.81148,4.81148,0,0,1,885.65074,483.434Z" transform="translate(-175.85805 -142.38305)" fill="#38bdf8"/><polygon points="687.147 602.955 674.887 602.954 669.055 555.666 687.149 555.667 687.147 602.955" fill="#ffb8b8"/><path d="M666.12988,599.45141h23.64387a0,0,0,0,1,0,0v14.88687a0,0,0,0,1,0,0H651.243a0,0,0,0,1,0,0v0A14.88686,14.88686,0,0,1,666.12988,599.45141Z" fill="#2f2e41"/><path d="M857.81014,727.28565l-19.62855-2.26417a4.81784,4.81784,0,0,1-4.22285-5.42l17.51831-131.89992a3.75008,3.75008,0,0,0-.07291-1.37669l-17.60768-72.64473a4.761,4.761,0,0,1,.75368-3.92624c2.73038-3.76421,12.08576-12.53656,39.91435-12.70276h.03006a4.83432,4.83432,0,0,1,4.39715,2.82655l3.7122,8.16606a3.76278,3.76278,0,0,0,1.25282,1.51259c5.10954,3.61682,29.862,23.918,15.32784,68.48852-14.28487,43.80741-32.58717,128.8549-36.11121,145.45881a4.79131,4.79131,0,0,1-4.69769,3.81438A4.92486,4.92486,0,0,1,857.81014,727.28565Z" transform="translate(-175.85805 -142.38305)" fill="#2f2e41"/><path d="M895.77671,387.17325A33.40487,33.40487,0,0,1,876.686,393.0731a20.4708,20.4708,0,0,0,8.11361,3.338,67.35862,67.35862,0,0,1-27.514.15459,17.80737,17.80737,0,0,1-5.75977-1.97823,7.2892,7.2892,0,0,1-3.55521-4.75471c-.60365-3.44851,2.08348-6.58157,4.876-8.69307A35.96732,35.96732,0,0,1,883.07116,375.1c3.37627.87272,6.75853,2.34727,8.9515,5.05866s2.84258,6.8915.75322,9.68353Z" transform="translate(-175.85805 -142.38305)" fill="#2f2e41"/><path d="M879.3779,370.08826c-2.8056-.93408-5.69279-1.91393-7.916-3.86357s-3.63443-5.13865-2.63514-7.92169c.96283-2.6815,3.89625-4.24792,6.73756-4.45882s5.63774.66859,8.35114,1.53748c-1.22708-1.85419-2.49474-5.44908-3.60458-9.24084-2.53233-8.65169,8.02021-16.55262,17.01128-15.90053q.39724.02881.76911.08264c9.066,1.32279,13.769,4.78121,20.10086,11.40309,7.92094,8.28379,12.06335,19.46117,14.83741,30.58174s4.403,22.56415,8.3047,33.341S951.817,426.785,961.8803,432.2706a33.98159,33.98159,0,0,0,35.25973-2.173,30.44213,30.44213,0,0,1-34.97174,34.48426c-12.992-2.09839-23.39954-12.56259-28.9584-24.49133s-7.07657-25.28067-8.47144-38.36692-2.80706-26.434-8.18513-38.44535c-2.1766-4.86121-5.38082-9.809-11.10726-10.58456a6.8902,6.8902,0,0,0-7.38673,3.95869c-2.51776,6.09372,6.09628,11.25411,3.88914,17.06135a6.39293,6.39293,0,0,1-5.69215,3.88711c-4.1636.2738-7.58409-2.11256-10.80631-4.41625C878.85854,368.47208,879.3779,370.08826,879.3779,370.08826Z" transform="translate(-175.85805 -142.38305)" fill="#2f2e41"/><path d="M1023.142,757.617h-230a1,1,0,0,1,0-2h230a1,1,0,0,1,0,2Z" transform="translate(-175.85805 -142.38305)" fill="#3f3d56"/></svg>
@@ -0,0 +1,6 @@
1
+ export const asset = (path: string): string => {
2
+ const base = (import.meta as any).env?.BASE_URL || '/';
3
+ const cleanPath = path.startsWith('/') ? path.slice(1) : path;
4
+ if (base === '/') return `/${cleanPath}`;
5
+ return `${base}${cleanPath}`;
6
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Main App Component - FBCA Architecture
3
+ * Feature-Based Component Architecture with auto-discovery routing
4
+ */
5
+
6
+ import { BrowserRouter as Router } from 'react-router-dom';
7
+ import { ThemeProvider } from '@bloomneo/uikit/theme-provider';
8
+ import { PageRouter } from './lib/page-router';
9
+
10
+ function App() {
11
+ return (
12
+ <ThemeProvider theme="{{DEFAULT_THEME}}" mode="{{DEFAULT_MODE}}" forceConfig={true}>
13
+ <Router basename="/">
14
+ <PageRouter />
15
+ </Router>
16
+ </ThemeProvider>
17
+ );
18
+ }
19
+
20
+ export default App;
@@ -0,0 +1,157 @@
1
+ import React, { useState } from 'react';
2
+ import { Button } from '@bloomneo/uikit/button';
3
+ import { AuthLayout } from '@bloomneo/uikit/auth';
4
+ import { Eye, EyeOff, Mail, Lock, ArrowRight } from 'lucide-react';
5
+ import { SEO } from '../../../shared/components';
6
+
7
+ const LoginPage: React.FC = () => {
8
+ const [showPassword, setShowPassword] = useState(false);
9
+ const [formData, setFormData] = useState({
10
+ email: '',
11
+ password: '',
12
+ rememberMe: false
13
+ });
14
+
15
+ const handleSubmit = (e: React.FormEvent) => {
16
+ e.preventDefault();
17
+ console.log('Login attempt:', formData);
18
+ // Handle login logic here
19
+ alert('Login demo - check console for form data');
20
+ };
21
+
22
+ const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
23
+ const { name, value, type, checked } = e.target;
24
+ setFormData(prev => ({
25
+ ...prev,
26
+ [name]: type === 'checkbox' ? checked : value
27
+ }));
28
+ };
29
+
30
+ return (
31
+ <>
32
+ <SEO
33
+ title="Login - Sign In | UIKit FBCA Demo"
34
+ description="Sign in to your account to access the UIKit FBCA Demo. Experience authentication flow with modern form validation and social login options."
35
+ keywords="login, sign in, authentication, auth form, react auth, fbca, user authentication"
36
+ ogTitle="Login - UIKit FBCA Demo"
37
+ ogDescription="Sign in to access the UIKit Feature-Based Component Architecture demo"
38
+ />
39
+ <AuthLayout
40
+ scheme="hero"
41
+ tone="clean"
42
+ size="md"
43
+ title="Welcome back"
44
+ subtitle="Sign in to your account to continue"
45
+ imageUrl="https://images.pexels.com/photos/9754/mountains-clouds-forest-fog.jpg"
46
+ imageAlt="Mountains with clouds and forest fog"
47
+ imageOverlay="dark"
48
+ >
49
+ <form onSubmit={handleSubmit} className="space-y-4">
50
+ {/* Email Field */}
51
+ <div className="space-y-2">
52
+ <label htmlFor="email" className="text-sm font-medium">
53
+ Email
54
+ </label>
55
+ <div className="relative">
56
+ <Mail className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
57
+ <input
58
+ id="email"
59
+ name="email"
60
+ type="email"
61
+ placeholder="Enter your email"
62
+ value={formData.email}
63
+ onChange={handleInputChange}
64
+ className="w-full pl-10 pr-3 py-2 bg-background border border-input rounded-lg focus:outline-none focus:ring-2 focus:ring-ring"
65
+ required
66
+ />
67
+ </div>
68
+ </div>
69
+
70
+ {/* Password Field */}
71
+ <div className="space-y-2">
72
+ <label htmlFor="password" className="text-sm font-medium">
73
+ Password
74
+ </label>
75
+ <div className="relative">
76
+ <Lock className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
77
+ <input
78
+ id="password"
79
+ name="password"
80
+ type={showPassword ? 'text' : 'password'}
81
+ placeholder="Enter your password"
82
+ value={formData.password}
83
+ onChange={handleInputChange}
84
+ className="w-full pl-10 pr-10 py-2 bg-background border border-input rounded-lg focus:outline-none focus:ring-2 focus:ring-ring"
85
+ required
86
+ />
87
+ <Button
88
+ type="button"
89
+ variant="ghost"
90
+ size="sm"
91
+ className="absolute right-1 top-1 h-8 w-8 p-0"
92
+ onClick={() => setShowPassword(!showPassword)}
93
+ >
94
+ {showPassword ? <EyeOff className="h-4 w-4" /> : <Eye className="h-4 w-4" />}
95
+ </Button>
96
+ </div>
97
+ </div>
98
+
99
+ {/* Remember Me & Forgot Password */}
100
+ <div className="flex items-center justify-between">
101
+ <div className="flex items-center space-x-2">
102
+ <input
103
+ id="rememberMe"
104
+ name="rememberMe"
105
+ type="checkbox"
106
+ checked={formData.rememberMe}
107
+ onChange={handleInputChange}
108
+ className="h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary"
109
+ />
110
+ <label htmlFor="rememberMe" className="text-sm">
111
+ Remember me
112
+ </label>
113
+ </div>
114
+ <Button variant="link" size="sm" className="px-0">
115
+ Forgot password?
116
+ </Button>
117
+ </div>
118
+
119
+ {/* Submit Button */}
120
+ <Button type="submit" className="w-full">
121
+ Sign in
122
+ <ArrowRight className="ml-2 h-4 w-4" />
123
+ </Button>
124
+ </form>
125
+
126
+ {/* Divider */}
127
+ <div className="relative">
128
+ <div className="absolute inset-0 flex items-center">
129
+ <span className="w-full border-t" />
130
+ </div>
131
+ <div className="relative flex justify-center text-xs uppercase">
132
+ <span className="bg-background px-2 text-muted-foreground">
133
+ Or continue with
134
+ </span>
135
+ </div>
136
+ </div>
137
+
138
+ {/* Social Login */}
139
+ <Button variant="outline" className="w-full">
140
+ Continue with GitHub
141
+ </Button>
142
+
143
+ {/* Sign Up Link */}
144
+ <div className="text-center">
145
+ <p className="text-sm text-muted-foreground">
146
+ Don't have an account?{' '}
147
+ <span className="font-medium text-primary hover:underline cursor-pointer">
148
+ Sign up (Demo)
149
+ </span>
150
+ </p>
151
+ </div>
152
+ </AuthLayout>
153
+ </>
154
+ );
155
+ };
156
+
157
+ export default LoginPage;