@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,58 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>UIKit Multi-Page Template</title>
8
+
9
+ <!-- SEO Optimizations -->
10
+ <meta name="description" content="Professional React UI components with beautiful themes and OKLCH color science. Built with @bloomneo/uikit.">
11
+ <meta name="keywords" content="react, ui components, themes, design system, tailwind css, typescript">
12
+ <meta name="author" content="@bloomneo/uikit">
13
+
14
+ <!-- Open Graph -->
15
+ <meta property="og:type" content="website">
16
+ <meta property="og:title" content="UIKit Multi-Page App">
17
+ <meta property="og:description" content="Professional React UI components with beautiful themes">
18
+ <meta property="og:site_name" content="@bloomneo/uikit">
19
+
20
+ <!-- Twitter Cards -->
21
+ <meta name="twitter:card" content="summary_large_image">
22
+ <meta name="twitter:title" content="UIKit Multi-Page App">
23
+ <meta name="twitter:description" content="Professional React UI components with beautiful themes">
24
+
25
+ <!-- Performance -->
26
+ <meta name="robots" content="index,follow">
27
+ <link rel="preconnect" href="https://fonts.googleapis.com">
28
+ <link rel="dns-prefetch" href="https://fonts.gstatic.com">
29
+
30
+ <!-- Theme color -->
31
+ <meta name="theme-color" content="#3B82F6">
32
+ </head>
33
+ <body>
34
+ <div id="root"></div>
35
+ <script type="module" src="/src/main.tsx"></script>
36
+
37
+ <!-- Structured Data -->
38
+ <script type="application/ld+json">
39
+ {
40
+ "@context": "https://schema.org",
41
+ "@type": "WebApplication",
42
+ "name": "UIKit Multi-Page App",
43
+ "description": "Professional React UI components with beautiful themes",
44
+ "applicationCategory": "DesignApplication",
45
+ "operatingSystem": "Web",
46
+ "offers": {
47
+ "@type": "Offer",
48
+ "price": "0",
49
+ "priceCurrency": "USD"
50
+ },
51
+ "author": {
52
+ "@type": "Organization",
53
+ "name": "@bloomneo/uikit"
54
+ }
55
+ }
56
+ </script>
57
+ </body>
58
+ </html>
@@ -0,0 +1,35 @@
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
+ },
17
+ "dependencies": {
18
+ "@tailwindcss/vite": "^4.1.13",
19
+ "@bloomneo/uikit": "latest",
20
+ "react": "^19.1.0",
21
+ "react-dom": "^19.1.0",
22
+ "react-router-dom": "^7.0.0",
23
+ "lucide-react": "latest"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^24.0.0",
27
+ "@types/react": "^19.1.0",
28
+ "@types/react-dom": "^19.1.0",
29
+ "@vitejs/plugin-react": "^4.2.1",
30
+ "typescript": "^5.8.0",
31
+ "vite": "^7.0.0",
32
+ "tailwindcss": "^4.1.8",
33
+ "gh-pages": "^6.3.0"
34
+ }
35
+ }
@@ -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="800.117" height="533.577" viewBox="0 0 800.117 533.577" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" artist="Katerina Limpitsouni" source="https://undraw.co/"><g transform="translate(-561.1 -255.53)"><path d="M227.085,491.32a20.667,20.667,0,0,1-25.842-6.955c-.56-.819.685-1.728,1.246-.908a19.137,19.137,0,0,0,24.052,6.421c.895-.428,1.434,1.017.544,1.443Z" transform="translate(359.999 46.668)" fill="#fff"/><path d="M213.126,445.381a11.7,11.7,0,0,0,8.27-7.4c.334-.936,1.737-.294,1.4.635a13.109,13.109,0,0,1-9.131,8.212.8.8,0,0,1-.993-.449A.775.775,0,0,1,213.126,445.381Z" transform="translate(359.099 50.233)" fill="#fff"/><path d="M789.88,705.353H429.157A24.746,24.746,0,0,0,404.44,730.07a24.468,24.468,0,0,0,1.783,9.195,24.719,24.719,0,0,0,22.934,15.53H789.88a24.719,24.719,0,0,0,21.332-12.244,23.863,23.863,0,0,0,1.611-3.287,24.468,24.468,0,0,0,1.783-9.195,24.753,24.753,0,0,0-24.725-24.717Z" transform="translate(344.106 29.299)" fill="#ccc"/><rect width="52.545" height="61.763" transform="translate(928.822 509.469)" fill="#ed9da0"/><path d="M421.339,358.755h5.493A10.071,10.071,0,0,1,436.9,368.826H411.268a10.071,10.071,0,0,1,10.071-10.071Z" transform="translate(525.879 110.849)" fill="#ccc"/><circle cx="56.737" cy="56.737" r="56.737" transform="translate(898.509 413.264)" fill="#ed9da0"/><path d="M559.362,356.041c.429-6.516,4.738-13.183,18.427-16.667,0,0,23.494-30.042,55.419-14.288,0,0,15.477-2.663,26.954,13.4,0,0,11.379-6.711,16.179,5.184,0,0,13.345,24.263,8.432,49.012s-7.428,27.837-7.428,27.837,6.262-51.192-29.808-47.642-65.11-9.135-73.279,18.638c-6.783,23.061-5.928,35.038-5.928,35.038s-22.682-23.006-14.97-41.121C557.306,376.162,558.7,366.089,559.362,356.041Z" transform="translate(332.592 59.378)" fill="#090814"/><path d="M461.292,735.055H775.121c-2.1-23.939-3.468-115.447-3.468-121.469,0-26.564-21.736-55.552-21.736-55.552l-7.78-4.3-64.973-20.271L660.349,511.62a18.7,18.7,0,0,0-14.975-7.312l-53.115.4a18.754,18.754,0,0,0-12.6,4.992l-32.891,30.512L498.53,563.247l-.082-.082-.5.375-7.159,5.156-4.6,3.328S474.1,586.518,464.444,629.99C462.991,636.529,461.972,721.17,461.292,735.055Z" transform="translate(339.663 45.013)" fill="#38bdf8"/><path d="M840.492,742.14c-.756.69-1.52,1.372-2.284,2.054q-4.339,3.858-8.8,7.584-6.742,5.62-13.764,10.9H393.169q-12.9-9.688-24.857-20.543Z" transform="translate(346.93 26.424)" fill="#ccc"/><path d="M501.606,687.088H346.3l3.286-15.612h148.73Z" transform="translate(530.957 86.407)" fill="#090814"/><path d="M860.165,674.4H819.753a6.242,6.242,0,0,0-4.791,2.219,9.059,9.059,0,0,0-1.709-.164,9.585,9.585,0,1,0,0,19.17,9.476,9.476,0,0,0,4.173-.969l.675,8.282,2.679,32.737a5.976,5.976,0,0,0,.509,1.175,6.3,6.3,0,0,0,5.53,3.287H853.1a6.323,6.323,0,0,0,5.538-3.287,6.479,6.479,0,0,0,.5-1.175l7.067-53.1a6.319,6.319,0,0,0-6.04-8.176Zm-46.911,18.489a6.849,6.849,0,0,1,0-13.7c.123,0,.238.033.362.041a6.275,6.275,0,0,0,.1,3.344l2.892,9.4a6.737,6.737,0,0,1-3.353.912Z" transform="translate(312.902 31.719)" fill="#090814"/><path d="M743.547,485.931H487.732a8.3,8.3,0,0,0-8.291,8.291V666.846a8.3,8.3,0,0,0,8.291,8.291H743.547a8.3,8.3,0,0,0,8.291-8.291V494.222a8.3,8.3,0,0,0-8.291-8.291Z" transform="translate(338.244 46.449)" fill="#3f3d56"/><path d="M653.095,635.977H593.25a3.193,3.193,0,0,0-3.188,3.2v94.538h66.23V639.173a3.195,3.195,0,0,0-3.2-3.2Zm-29.721,53.715a7.1,7.1,0,0,1-7.067-7.067v-10.9a7.067,7.067,0,0,1,14.133,0v10.9a7.1,7.1,0,0,1-7.067,7.067Z" transform="translate(329.598 34.722)" fill="#090814"/><path d="M589.839,738.717v9.121a1.787,1.787,0,0,0,1.783,1.783H654.7a1.792,1.792,0,0,0,1.783-1.783v-9.121Z" transform="translate(329.615 26.691)" fill="#3f3d56"/><circle cx="4.039" cy="4.039" r="4.039" transform="translate(1072.313 703.414)" fill="#2f2e41"/><path d="M523.347,669.493a1.413,1.413,0,0,0-1.413,1.413v7.272a1.413,1.413,0,1,0,2.827,0v-7.272a1.413,1.413,0,0,0-1.413-1.413Z" transform="translate(334.923 32.102)" fill="#2f2e41"/><path d="M531.672,669.493a1.413,1.413,0,0,0-1.413,1.413v7.272a1.413,1.413,0,1,0,2.827,0v-7.272a1.413,1.413,0,0,0-1.413-1.413Z" transform="translate(334.272 32.102)" fill="#2f2e41"/><path d="M540,669.493a1.413,1.413,0,0,0-1.413,1.413v7.272a1.413,1.413,0,1,0,2.827,0v-7.272A1.413,1.413,0,0,0,540,669.493Z" transform="translate(333.622 32.102)" fill="#2f2e41"/><path d="M548.323,669.493a1.413,1.413,0,0,0-1.413,1.413v7.272a1.413,1.413,0,1,0,2.827,0v-7.272a1.413,1.413,0,0,0-1.413-1.413Z" transform="translate(332.971 32.102)" fill="#2f2e41"/><circle cx="21.364" cy="21.364" r="21.364" transform="translate(866.053 726.657)" fill="#ed9da0"/><circle cx="21.364" cy="21.364" r="21.364" transform="translate(1015.307 730.766)" fill="#ed9da0"/><path d="M951.482,443.834c-2.111-3.492-4.613-7.22-8.531-8.36-4.537-1.32-9.2,1.3-13.151,3.891a383.216,383.216,0,0,0-34.1,25.128l.012.136c8.483-.585,15.524,21.972,24.007,21.387,6.129-.423,13.912-24.045,19.328-26.945,2.055-1.1,4.059-2.57,6.388-2.672,2.894-.127,5.417,1.894,7.4,4.005,11.729,12.49,15.123,31.589,28.281,42.562a417.584,417.584,0,0,0-29.629-59.131Z" transform="translate(367.473 -1.438)" fill="#38bdf8"/><path d="M971.668,473.478q9.281,16.763,19.688,32.86v.008c-.041.378-.1.756-.156,1.134q-1.257-1.923-2.49-3.862-9.343-14.655-17.757-29.869-3.994-7.235-7.79-14.585-2.934-5.694-5.744-11.455c-.534-1.1-1.052-2.2-1.569-3.311-1.216-2.6-2.416-5.21-3.7-7.773-1.463-2.925-3.246-5.982-5.933-7.946A8.094,8.094,0,0,0,942,427.052a11.772,11.772,0,0,0-6.105,1.75,196.482,196.482,0,0,0-38.645,26.648A201.367,201.367,0,0,0,865.865,490.3c-.279.394-.937.016-.657-.386,1.109-1.561,2.227-3.1,3.377-4.626a202.328,202.328,0,0,1,51.645-48.169q5.017-3.254,10.23-6.2c1.75-.994,3.509-1.972,5.3-2.892a12.923,12.923,0,0,1,5.62-1.742c6.82-.107,10.354,7.617,12.778,12.811q1.134,2.453,2.309,4.9,4.425,9.244,9.195,18.341Q968.6,467.936,971.668,473.478Z" transform="translate(369.861 -0.747)" fill="#3f3d56"/><path d="M894.057,452.725c-.4-.442-.79-.883-1.189-1.325-3.144-3.477-6.518-6.914-10.836-8.908a15.72,15.72,0,0,0-6.586-1.527,18.8,18.8,0,0,0-6.839,1.491c-1.03.411-2.036.878-3.028,1.375-1.133.57-2.246,1.178-3.354,1.792q-3.119,1.726-6.157,3.6-6.045,3.736-11.712,8.043-2.937,2.233-5.754,4.613-2.619,2.211-5.133,4.54c-.358.331-.893-.2-.535-.535.442-.411.888-.82,1.335-1.224q1.893-1.711,3.846-3.356,3.562-3.006,7.308-5.779,5.826-4.315,12.052-8.045,3.112-1.862,6.309-3.568c.644-.343,1.295-.679,1.953-1a31.142,31.142,0,0,1,4.643-1.89,16.518,16.518,0,0,1,7.013-.689,18.259,18.259,0,0,1,6.47,2.238c4.24,2.37,7.528,6.034,10.728,9.61C894.915,452.551,894.383,453.089,894.057,452.725Z" transform="translate(372.387 -1.837)" fill="#3f3d56"/><path d="M865.193,469.927a4.882,4.882,0,0,1-3.028-.867c-2.346-1.777-2.285-6.047.188-13.052a14.734,14.734,0,0,1,7.976-8.572,13.653,13.653,0,0,1,11-.065q.455.2.9.424h0a32.385,32.385,0,0,1,5.623,3.989,37.148,37.148,0,0,0,4.683,3.459l.551.323-.522.368C879.245,465.3,870.221,469.927,865.193,469.927Z" transform="translate(370.227 -2.308)" fill="#38bdf8"/><path d="M918.264,410.146a18.9,18.9,0,0,1-18.541-15.236,18.9,18.9,0,1,0,22.292,14.862A18.983,18.983,0,0,1,918.264,410.146Z" transform="translate(368.342 1.705)" fill="#3f3d56"/><circle cx="28.203" cy="28.203" r="28.203" transform="translate(688.196 356.857)" fill="#3f3d56" opacity="0.74"/><circle cx="28.203" cy="28.203" r="28.203" transform="translate(716.399 356.857)" fill="#ff6584" opacity="0.74"/><circle cx="28.203" cy="28.203" r="28.203" transform="translate(702.536 334.379)" fill="#38bdf8" opacity="0.74"/><rect width="75.934" height="1.643" transform="translate(732.045 377.26) rotate(-17.441)" fill="#3f3d56"/><path d="M835.379,229.333h-.468a9.408,9.408,0,0,1,4.2.993h-2.131a8.67,8.67,0,0,0-8.66,8.66v22.943a8.67,8.67,0,0,0,8.66,8.66h1.358a9.418,9.418,0,0,1-3.426.65h.468a9.493,9.493,0,0,0,9.482-9.482V238.815a9.493,9.493,0,0,0-9.482-9.482Z" transform="translate(355.707 47.972)" fill="#ff6584"/><path d="M835.379,229.333h-.468a9.408,9.408,0,0,1,4.2.993h-2.131a8.67,8.67,0,0,0-8.66,8.66v22.943a8.67,8.67,0,0,0,8.66,8.66h1.358a9.418,9.418,0,0,1-3.426.65h.468a9.493,9.493,0,0,0,9.482-9.482V238.815a9.493,9.493,0,0,0-9.482-9.482Z" transform="translate(355.707 47.972)" opacity="0.21"/><path d="M834.887,270.667a8.67,8.67,0,0,1-8.66-8.66V239.064a8.67,8.67,0,0,1,8.66-8.66h2.131a9.409,9.409,0,0,0-4.2-.993H809.877a9.493,9.493,0,0,0-9.482,9.482v22.943a9.493,9.493,0,0,0,9.482,9.482H832.82a9.418,9.418,0,0,0,3.426-.65Z" transform="translate(357.89 47.966)" fill="#38bdf8"/><path d="M834.887,270.667a8.67,8.67,0,0,1-8.66-8.66V239.064a8.67,8.67,0,0,1,8.66-8.66h2.131a9.409,9.409,0,0,0-4.2-.993H809.877a9.493,9.493,0,0,0-9.482,9.482v22.943a9.493,9.493,0,0,0,9.482,9.482H832.82a9.418,9.418,0,0,0,3.426-.65Z" transform="translate(357.89 47.966)" fill="#ff6584"/><circle cx="3.287" cy="3.287" r="3.287" transform="translate(801.662 351.735)" fill="#3f3d56"/><path d="M968.052,541.114c4.815,3.394,9.441,6.853,14.733,9.466-.1.4-.205.813-.3,1.216-.649-.3-1.282-.625-1.915-.953-5.366-2.81-9.984-6.631-15.021-9.951a32.41,32.41,0,0,0-8.1-4.059,26.73,26.73,0,0,0-9.261-1.085c-13.041.641-24.216,8.423-36.336,12.342-5.933,1.923-12.244,2.95-18.431,1.742s-11.685-4.495-17.149-7.469c-5.39-2.942-11.266-5.9-17.56-5.9-5.127.008-10.518,2.062-13.262,6.6a.615.615,0,0,1-1.06-.624,12.93,12.93,0,0,1,2.243-2.8c3.583-3.394,8.85-4.733,13.69-4.339,6.261.509,11.972,3.468,17.387,6.442,5.744,3.155,11.627,6.549,18.267,7.239,6.557.69,13.049-1.027,19.129-3.336,11.775-4.478,23.394-11.939,36.492-11.11C957.772,534.927,963.064,537.605,968.052,541.114Z" transform="translate(371.489 -25.367)" fill="#3f3d56"/><path d="M415.88,283.625v1.668a8.652,8.652,0,0,0-1.676-.164h-8.6v18.456a10.31,10.31,0,0,1-10.3,10.3H382.6v2.843a8.611,8.611,0,0,0,.666,3.32h-1.758a10.121,10.121,0,0,1-.551-3.32v-2.843h-6.985v-1.643h6.985V293.79a10.31,10.31,0,0,1,10.3-10.3h12.7V280.61h1.643v2.876h8.6a10.259,10.259,0,0,1,1.676.14Z" transform="translate(484.274 -14.808)" fill="#38bdf8"/><path d="M394.294,269.467H371.352a10.31,10.31,0,0,0-10.3,10.3v22.942a10.31,10.31,0,0,0,10.3,10.3h22.942a10.31,10.31,0,0,0,10.3-10.3V279.739A10.309,10.309,0,0,0,394.294,269.467Zm8.661,33.246a8.672,8.672,0,0,1-8.661,8.661H371.352a8.672,8.672,0,0,1-8.661-8.661V279.772a8.673,8.673,0,0,1,8.661-8.661h22.942a8.671,8.671,0,0,1,8.661,8.628Z" transform="translate(485.284 -13.938)" fill="#3f3d56"/><path d="M381.55,312.489v1.643h1.643v-1.643Zm0,0v1.643h1.643v-1.643Zm34.923-28.62a10.263,10.263,0,0,0-1.676-.14H391.854a10.31,10.31,0,0,0-10.3,10.3v22.942a10.12,10.12,0,0,0,.551,3.32,10.308,10.308,0,0,0,9.754,6.985H414.8a10.31,10.31,0,0,0,10.3-10.3V294.034A10.3,10.3,0,0,0,416.472,283.869Zm6.985,33.107a8.672,8.672,0,0,1-8.661,8.661H391.854a8.673,8.673,0,0,1-8.661-8.661V294.034a8.672,8.672,0,0,1,8.661-8.661H414.8a8.664,8.664,0,0,1,8.661,8.661Zm-41.907-4.487v1.643h1.643v-1.643Z" transform="translate(483.682 -15.052)" fill="#3f3d56"/><path d="M337.958,547.3h-80.4a2.116,2.116,0,0,0-2.115,2.108v4.766a285.287,285.287,0,0,0,9.619,29.969h72.893a2.106,2.106,0,0,0,2.108-2.108V549.41A2.11,2.11,0,0,0,337.958,547.3Z" transform="translate(350.622 -79.698)" fill="#38bdf8"/><path d="M334.679,609.663H273.737c.725,1.7,1.464,3.389,2.23,5.07h58.711C337.987,614.781,337.953,609.616,334.679,609.663Z" transform="translate(346.241 -94.634)" fill="#e4e4e4"/><path d="M336.344,624.941H280.69q1.22,2.552,2.508,5.071h53.146C339.652,630.059,339.618,624.9,336.344,624.941Z" transform="translate(344.576 -98.294)" fill="#e4e4e4"/><path d="M338.212,640.229H288.489c.908,1.7,1.844,3.389,2.793,5.07h46.93C341.52,645.346,341.486,640.181,338.212,640.229Z" transform="translate(342.708 -101.956)" fill="#e4e4e4"/><path d="M901.341,229.333h-.468a9.409,9.409,0,0,1,4.2.993H902.94a8.67,8.67,0,0,0-8.661,8.66v22.943a8.67,8.67,0,0,0,8.66,8.66H904.3a9.417,9.417,0,0,1-3.426.65h.468a9.493,9.493,0,0,0,9.482-9.482V238.815a9.493,9.493,0,0,0-9.482-9.482Z" transform="translate(228.938 47.972)" fill="#3f3d56"/><path d="M901.341,229.333h-.468a9.409,9.409,0,0,1,4.2.993H902.94a8.67,8.67,0,0,0-8.661,8.66v22.943a8.67,8.67,0,0,0,8.66,8.66H904.3a9.417,9.417,0,0,1-3.426.65h.468a9.493,9.493,0,0,0,9.482-9.482V238.815a9.493,9.493,0,0,0-9.482-9.482Z" transform="translate(228.938 47.972)" opacity="0.21"/><path d="M835.379,229.333h-.468a9.408,9.408,0,0,1,4.2.993h-2.131a8.67,8.67,0,0,0-8.66,8.66v22.943a8.67,8.67,0,0,0,8.66,8.66h1.358a9.418,9.418,0,0,1-3.426.65h.468a9.493,9.493,0,0,0,9.482-9.482V238.815a9.493,9.493,0,0,0-9.482-9.482Z" transform="translate(234.094 47.972)" fill="#38bdf8"/><path d="M835.379,229.333h-.468a9.408,9.408,0,0,1,4.2.993h-2.131a8.67,8.67,0,0,0-8.66,8.66v22.943a8.67,8.67,0,0,0,8.66,8.66h1.358a9.418,9.418,0,0,1-3.426.65h.468a9.493,9.493,0,0,0,9.482-9.482V238.815a9.493,9.493,0,0,0-9.482-9.482Z" transform="translate(234.094 47.972)" opacity="0.21"/><path d="M834.887,270.667a8.67,8.67,0,0,1-8.66-8.66V239.064a8.67,8.67,0,0,1,8.66-8.66h2.131a9.409,9.409,0,0,0-4.2-.993H809.877a9.493,9.493,0,0,0-9.482,9.482v22.943a9.493,9.493,0,0,0,9.482,9.482H832.82a9.418,9.418,0,0,0,3.426-.65Z" transform="translate(236.277 47.966)" fill="#38bdf8"/><path d="M900.849,270.667a8.67,8.67,0,0,1-8.661-8.66V239.064a8.67,8.67,0,0,1,8.661-8.66h2.131a9.408,9.408,0,0,0-4.2-.993H875.839a9.493,9.493,0,0,0-9.482,9.482v22.943a9.493,9.493,0,0,0,9.482,9.482h22.943a9.418,9.418,0,0,0,3.426-.65Z" transform="translate(231.121 47.966)" fill="#3f3d56"/><path d="M899.6,286.038,891.565,274l-5.875-8.8a3.269,3.269,0,0,0-5.842.846L877.374,274l-4.98,15.982a3.275,3.275,0,0,0,4.848,3.755l1.767-1.093a2.453,2.453,0,0,1,3.731,1.865l1.619,17.667a3.28,3.28,0,0,0,3.254,2.975c.1,0,.2-.008.3-.016l2.482-.222a3.268,3.268,0,0,0,2.958-3.558l-1.668-18.242a2.45,2.45,0,0,1,3.468-2.449l.362.164a3.27,3.27,0,0,0,4.084-4.791Z" transform="translate(230.66 45.283)" fill="#ccc"/><path d="M834.887,270.667a8.67,8.67,0,0,1-8.66-8.66V239.064a8.67,8.67,0,0,1,8.66-8.66h2.131a9.409,9.409,0,0,0-4.2-.993H809.877a9.493,9.493,0,0,0-9.482,9.482v22.943a9.493,9.493,0,0,0,9.482,9.482H832.82a9.418,9.418,0,0,0,3.426-.65Z" transform="translate(236.277 47.966)" fill="#38bdf8"/></g></svg>
@@ -0,0 +1,92 @@
1
+ import React, { Suspense, useEffect } from 'react';
2
+ import { BrowserRouter as Router, useLocation } from 'react-router-dom';
3
+ import { PageLayout } from '@bloomneo/uikit/page';
4
+ import { Header, Footer } from './components';
5
+ import { AppRouter } from './router';
6
+
7
+ // Component to handle scroll to top on route change
8
+ const ScrollToTop: React.FC = () => {
9
+ const { pathname } = useLocation();
10
+
11
+ useEffect(() => {
12
+ window.scrollTo(0, 0);
13
+ }, [pathname]);
14
+
15
+ return null;
16
+ };
17
+
18
+ // Loading component
19
+ const LoadingSpinner: React.FC = () => (
20
+ <div className="flex items-center justify-center min-h-[400px]">
21
+ <div className="flex items-center gap-3 text-muted-foreground">
22
+ <div className="w-6 h-6 border-2 border-muted-foreground/30 border-t-muted-foreground rounded-full animate-spin" />
23
+ <span>Loading page...</span>
24
+ </div>
25
+ </div>
26
+ );
27
+
28
+ // Layout wrapper that chooses layout based on current route
29
+ const LayoutWrapper: React.FC = () => {
30
+ const location = useLocation();
31
+
32
+ if (location.pathname === '/login') {
33
+ // Login page handles its own AuthLayout
34
+ return (
35
+ <>
36
+ <ScrollToTop />
37
+ <Suspense fallback={<LoadingSpinner />}>
38
+ <AppRouter />
39
+ </Suspense>
40
+ </>
41
+ );
42
+ }
43
+
44
+
45
+ if (location.pathname === '/dashboard' || location.pathname.startsWith('/dashboard')) {
46
+ // Dashboard uses its own AdminLayout from the page component
47
+ return (
48
+ <>
49
+ <ScrollToTop />
50
+ <Suspense fallback={<LoadingSpinner />}>
51
+ <AppRouter />
52
+ </Suspense>
53
+ </>
54
+ );
55
+ }
56
+
57
+ if (location.pathname === '/error' || location.pathname.startsWith('/error')) {
58
+ // ErrorPage uses its own BlankLayout
59
+ return (
60
+ <>
61
+ <ScrollToTop />
62
+ <Suspense fallback={<LoadingSpinner />}>
63
+ <AppRouter />
64
+ </Suspense>
65
+ </>
66
+ );
67
+ }
68
+
69
+ // Default: PageLayout for all other pages
70
+ return (
71
+ <PageLayout scheme="default" tone="clean" size="xl">
72
+ <ScrollToTop />
73
+ <Header />
74
+ <PageLayout.Content>
75
+ <Suspense fallback={<LoadingSpinner />}>
76
+ <AppRouter />
77
+ </Suspense>
78
+ </PageLayout.Content>
79
+ <Footer />
80
+ </PageLayout>
81
+ );
82
+ };
83
+
84
+ function App() {
85
+ return (
86
+ <Router basename="/">
87
+ <LayoutWrapper />
88
+ </Router>
89
+ );
90
+ }
91
+
92
+ export default App;
@@ -0,0 +1,58 @@
1
+ import React from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import { Footer as UIFooter } from '@bloomneo/uikit/footer';
4
+ import type { NavigationItem } from '@bloomneo/uikit';
5
+
6
+ // Footer navigation
7
+ const footerNavigation: NavigationItem[] = [
8
+ { key: 'home', label: 'Home', href: '/' },
9
+ { key: 'about', label: 'About', href: '/about' },
10
+ { key: 'contact', label: 'Contact', href: '/contact' },
11
+ { key: 'privacy', label: 'Privacy', href: '/privacy' },
12
+ { key: 'terms', label: 'Terms', href: '/terms' },
13
+ ];
14
+
15
+ // Configurable Footer Component using UIKit sections
16
+ export const Footer: React.FC = () => {
17
+ const navigate = useNavigate();
18
+
19
+ const handleNavigation = (href: string) => {
20
+ navigate(href);
21
+ };
22
+
23
+ return (
24
+ <UIFooter tone="subtle" size="xl">
25
+ <div className="flex flex-col space-y-6">
26
+ {/* Footer Navigation */}
27
+ <div className="flex flex-wrap justify-center gap-6">
28
+ {footerNavigation.map((item) => (
29
+ <button
30
+ key={item.key}
31
+ onClick={() => item.href && handleNavigation(item.href)}
32
+ className="text-sm text-muted-foreground hover:text-foreground transition-colors"
33
+ >
34
+ {item.label}
35
+ </button>
36
+ ))}
37
+ </div>
38
+
39
+ {/* Branding Section */}
40
+ <div className="text-center space-y-4">
41
+ <div className="flex items-center justify-center gap-3">
42
+ <div className="w-6 h-6 bg-primary rounded flex items-center justify-center text-primary-foreground font-bold text-xs">
43
+ UI
44
+ </div>
45
+ <span className="font-semibold text-foreground">{{PROJECT_NAME}}</span>
46
+ </div>
47
+
48
+ {/* Copyright */}
49
+ <div className="border-t border-border pt-4">
50
+ <p className="text-sm text-muted-foreground">
51
+ © {{CURRENT_YEAR}} {{PROJECT_NAME}} Multi-Page Template • Built with React Router & Code Splitting
52
+ </p>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ </UIFooter>
57
+ );
58
+ };