@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,659 @@
1
+ import React, { useEffect } from 'react';
2
+ import { BrowserRouter as Router, Routes, Route, Link, useLocation, useNavigate } from 'react-router-dom';
3
+ import { Button } from '@bloomneo/uikit/button';
4
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@bloomneo/uikit/card';
5
+ import { useTheme } from '@bloomneo/uikit/theme-provider';
6
+ import { PageLayout } from '@bloomneo/uikit/page';
7
+ import type { NavigationItem } from '@bloomneo/uikit';
8
+ import { Home, Layout, Palette, BookOpen } from 'lucide-react';
9
+ import { SEO } from './components/SEO';
10
+ import { asset } from './utils/asset';
11
+
12
+ // Page Components
13
+ const HomePage: React.FC = () => {
14
+ const { theme } = useTheme();
15
+
16
+ const themeDescriptions = {
17
+ base: 'Clean default configuration showcasing the base system',
18
+ elegant: 'Fresh sky blue theme with clean design',
19
+ metro: 'Dark teal theme with bright yellow accents',
20
+ studio: 'Sophisticated neutral theme with golden accents',
21
+ vivid: 'Premium cursive theme with sophisticated typography'
22
+ };
23
+
24
+ return (
25
+ <>
26
+ <SEO
27
+ title="UIKit SPA Demo - Beautiful UI Components"
28
+ description="Professional React components with stunning themes, powered by OKLCH color science and cross-platform design"
29
+ />
30
+ <div className="space-y-12">
31
+ {/* Hero Section */}
32
+ <section className="text-center py-16 bg-gradient-to-b from-background to-muted/20 rounded-lg">
33
+ <div className="space-y-6">
34
+ <div className="mb-6">
35
+ <img
36
+ src={asset('/hero_spa.svg')}
37
+ alt="UIKit SPA Hero Illustration"
38
+ className="mx-auto max-w-md w-full h-auto"
39
+ />
40
+ </div>
41
+ <h1 className="voila-heading text-4xl md:text-6xl mb-6 text-accent">
42
+ Beautiful UI Components
43
+ </h1>
44
+ <p className="voila-subheading text-xl md:text-2xl text-muted-foreground max-w-3xl mx-auto leading-relaxed">
45
+ Professional React components with stunning themes, powered by OKLCH color science and cross-platform design
46
+ </p>
47
+ <div className="inline-flex items-center gap-3 text-sm text-muted-foreground bg-muted/50 backdrop-blur px-6 py-3 rounded-full border">
48
+ <div className="w-2 h-2 bg-primary rounded-full animate-pulse"></div>
49
+ {themeDescriptions[theme as keyof typeof themeDescriptions]}
50
+ </div>
51
+ <div className="flex flex-col sm:flex-row gap-4 justify-center mt-8">
52
+ <Button size="lg" asChild>
53
+ <Link to="/components">Explore Components</Link>
54
+ </Button>
55
+ <Button variant="secondary" size="lg" asChild>
56
+ <Link to="/themes">Browse Themes</Link>
57
+ </Button>
58
+ </div>
59
+ </div>
60
+ </section>
61
+
62
+ {/* Features Grid */}
63
+ <section className="space-y-6">
64
+ <div className="text-center">
65
+ <h2 className="text-3xl font-bold mb-4">Why Choose UIKit?</h2>
66
+ <p className="text-muted-foreground max-w-2xl mx-auto">
67
+ Built for modern applications with performance, accessibility, and developer experience in mind
68
+ </p>
69
+ </div>
70
+
71
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
72
+ <Card className="border-2 hover:border-primary/50 transition-all duration-200 hover:shadow-lg">
73
+ <CardHeader>
74
+ <div className="w-12 h-12 bg-primary/10 rounded-lg flex items-center justify-center mb-4">
75
+ 🎨
76
+ </div>
77
+ <CardTitle>5 Beautiful Themes</CardTitle>
78
+ <CardDescription>From elegant to vivid, find the perfect aesthetic for your application</CardDescription>
79
+ </CardHeader>
80
+ <CardContent className="space-y-4">
81
+ <ul className="text-sm space-y-2 text-muted-foreground">
82
+ <li>• Base - Clean default styling</li>
83
+ <li>• Elegant - Sky blue elegance</li>
84
+ <li>• Metro - Bold teal & yellow</li>
85
+ <li>• Studio - Sophisticated neutrals</li>
86
+ <li>• Vivid - Premium typography</li>
87
+ </ul>
88
+ <Button asChild className="w-full">
89
+ <Link to="/themes">Explore Themes</Link>
90
+ </Button>
91
+ </CardContent>
92
+ </Card>
93
+
94
+ <Card className="border-2 hover:border-primary/50 transition-all duration-200 hover:shadow-lg">
95
+ <CardHeader>
96
+ <div className="w-12 h-12 bg-secondary/10 rounded-lg flex items-center justify-center mb-4">
97
+ 🧩
98
+ </div>
99
+ <CardTitle>Rich Component Library</CardTitle>
100
+ <CardDescription>30+ production-ready components with consistent design language</CardDescription>
101
+ </CardHeader>
102
+ <CardContent className="space-y-4">
103
+ <ul className="text-sm space-y-2 text-muted-foreground">
104
+ <li>• Buttons, Cards, Forms</li>
105
+ <li>• Navigation & Layout</li>
106
+ <li>• Data Tables & Charts</li>
107
+ <li>• Dialogs & Overlays</li>
108
+ <li>• Fully accessible</li>
109
+ </ul>
110
+ <Button asChild className="w-full">
111
+ <Link to="/components">View Components</Link>
112
+ </Button>
113
+ </CardContent>
114
+ </Card>
115
+
116
+ <Card className="border-2 hover:border-primary/50 transition-all duration-200 hover:shadow-lg">
117
+ <CardHeader>
118
+ <div className="w-12 h-12 bg-accent/10 rounded-lg flex items-center justify-center mb-4">
119
+ 📚
120
+ </div>
121
+ <CardTitle>Developer Experience</CardTitle>
122
+ <CardDescription>TypeScript-first with excellent documentation and tooling</CardDescription>
123
+ </CardHeader>
124
+ <CardContent className="space-y-4">
125
+ <ul className="text-sm space-y-2 text-muted-foreground">
126
+ <li>• Full TypeScript support</li>
127
+ <li>• CLI for quick setup</li>
128
+ <li>• Storybook integration</li>
129
+ <li>• Tree-shakeable imports</li>
130
+ <li>• Comprehensive docs</li>
131
+ </ul>
132
+ <Button asChild className="w-full">
133
+ <Link to="/docs">Read Documentation</Link>
134
+ </Button>
135
+ </CardContent>
136
+ </Card>
137
+ </div>
138
+ </section>
139
+
140
+ {/* Color Palette Preview */}
141
+ <section className="space-y-6">
142
+ <div className="text-center">
143
+ <h2 className="text-2xl font-bold mb-2">Current Theme Colors</h2>
144
+ <p className="text-muted-foreground">OKLCH-based color system for perfect consistency</p>
145
+ </div>
146
+
147
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-4">
148
+ <div className="bg-primary text-primary-foreground p-6 rounded-lg text-center shadow-lg">
149
+ <div className="text-lg font-bold">Primary</div>
150
+ <div className="text-sm opacity-90 mt-1">Brand color</div>
151
+ </div>
152
+ <div className="bg-secondary text-secondary-foreground p-6 rounded-lg text-center shadow-lg">
153
+ <div className="text-lg font-bold">Secondary</div>
154
+ <div className="text-sm opacity-90 mt-1">Supporting</div>
155
+ </div>
156
+ <div className="bg-accent text-accent-foreground p-6 rounded-lg text-center shadow-lg">
157
+ <div className="text-lg font-bold">Accent</div>
158
+ <div className="text-sm opacity-90 mt-1">Highlights</div>
159
+ </div>
160
+ <div className="bg-muted text-muted-foreground p-6 rounded-lg text-center shadow-lg border">
161
+ <div className="text-lg font-bold">Muted</div>
162
+ <div className="text-sm opacity-90 mt-1">Subtle</div>
163
+ </div>
164
+ </div>
165
+ </section>
166
+
167
+ {/* Quick Start */}
168
+ <section className="bg-muted/30 rounded-lg p-8">
169
+ <div className="text-center space-y-4">
170
+ <h2 className="text-2xl font-bold">Ready to Get Started?</h2>
171
+ <p className="text-muted-foreground max-w-2xl mx-auto">
172
+ Install UIKit in your project and start building beautiful interfaces in minutes
173
+ </p>
174
+ <div className="bg-background border rounded-lg p-4 max-w-md mx-auto">
175
+ <code className="text-sm">npm install @bloomneo/uikit</code>
176
+ </div>
177
+ <div className="flex gap-3 justify-center">
178
+ <Button asChild>
179
+ <Link to="/docs">Installation Guide</Link>
180
+ </Button>
181
+ <Button variant="ghost" asChild>
182
+ <Link to="/components">Browse Components</Link>
183
+ </Button>
184
+ </div>
185
+ </div>
186
+ </section>
187
+ </div>
188
+ </>
189
+ );
190
+ };
191
+
192
+ const ComponentsPage: React.FC = () => {
193
+ return (
194
+ <>
195
+ <SEO
196
+ title="Components - UIKit SPA Demo"
197
+ description="Explore our comprehensive collection of production-ready React components, designed for consistency and accessibility"
198
+ />
199
+ <div className="space-y-8">
200
+ <div className="text-center space-y-4">
201
+ <h1 className="voila-heading text-4xl">Component Library</h1>
202
+ <p className="voila-subheading text-muted-foreground max-w-3xl mx-auto">
203
+ Explore our comprehensive collection of production-ready React components, designed for consistency and accessibility
204
+ </p>
205
+ </div>
206
+
207
+ {/* Buttons */}
208
+ <Card>
209
+ <CardHeader>
210
+ <CardTitle className="flex items-center gap-2">
211
+ <div className="w-8 h-8 bg-primary/10 rounded flex items-center justify-center">
212
+ 🔘
213
+ </div>
214
+ Buttons
215
+ </CardTitle>
216
+ <CardDescription>Interactive elements with multiple variants, sizes, and states</CardDescription>
217
+ </CardHeader>
218
+ <CardContent className="space-y-6">
219
+ <div className="space-y-4">
220
+ <h4 className="text-sm font-medium text-muted-foreground">Variants</h4>
221
+ <div className="flex flex-wrap gap-3">
222
+ <Button size="lg">Primary</Button>
223
+ <Button variant="secondary" size="lg">Secondary</Button>
224
+ <Button variant="outline" size="lg">Outline</Button>
225
+ <Button variant="ghost" size="lg">Ghost</Button>
226
+ <Button variant="destructive" size="lg">Destructive</Button>
227
+ </div>
228
+ </div>
229
+
230
+ <div className="space-y-4">
231
+ <h4 className="text-sm font-medium text-muted-foreground">Sizes</h4>
232
+ <div className="flex flex-wrap items-center gap-3">
233
+ <Button size="sm">Small</Button>
234
+ <Button>Default</Button>
235
+ <Button size="lg">Large</Button>
236
+ </div>
237
+ </div>
238
+
239
+ <div className="space-y-4">
240
+ <h4 className="text-sm font-medium text-muted-foreground">States</h4>
241
+ <div className="flex flex-wrap gap-3">
242
+ <Button>Normal</Button>
243
+ <Button disabled>Disabled</Button>
244
+ <Button className="opacity-50 cursor-not-allowed">Loading...</Button>
245
+ </div>
246
+ </div>
247
+ </CardContent>
248
+ </Card>
249
+
250
+ {/* Cards */}
251
+ <Card>
252
+ <CardHeader>
253
+ <CardTitle className="flex items-center gap-2">
254
+ <div className="w-8 h-8 bg-secondary/10 rounded flex items-center justify-center">
255
+ 📋
256
+ </div>
257
+ Cards
258
+ </CardTitle>
259
+ <CardDescription>Flexible containers for displaying content and actions</CardDescription>
260
+ </CardHeader>
261
+ <CardContent>
262
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
263
+ <Card className="border-2">
264
+ <CardHeader>
265
+ <CardTitle className="text-lg">Simple Card</CardTitle>
266
+ <CardDescription>Basic card with header and content</CardDescription>
267
+ </CardHeader>
268
+ <CardContent>
269
+ <p className="text-sm text-muted-foreground">
270
+ Cards provide a flexible container for content with consistent spacing and styling.
271
+ </p>
272
+ </CardContent>
273
+ </Card>
274
+
275
+ <Card className="border-2 bg-primary/5">
276
+ <CardHeader>
277
+ <CardTitle className="text-lg">Action Card</CardTitle>
278
+ <CardDescription>Card with interactive elements</CardDescription>
279
+ </CardHeader>
280
+ <CardContent className="space-y-3">
281
+ <p className="text-sm text-muted-foreground">
282
+ Enhanced with buttons and other interactive components.
283
+ </p>
284
+ <Button size="sm" className="w-full">Take Action</Button>
285
+ </CardContent>
286
+ </Card>
287
+
288
+ <Card className="border-2 border-dashed">
289
+ <CardHeader>
290
+ <CardTitle className="text-lg">Custom Styled</CardTitle>
291
+ <CardDescription>Customizable appearance</CardDescription>
292
+ </CardHeader>
293
+ <CardContent>
294
+ <p className="text-sm text-muted-foreground">
295
+ Easy to customize with different borders, backgrounds, and layouts.
296
+ </p>
297
+ </CardContent>
298
+ </Card>
299
+ </div>
300
+ </CardContent>
301
+ </Card>
302
+
303
+ {/* Form Elements */}
304
+ <Card>
305
+ <CardHeader>
306
+ <CardTitle className="flex items-center gap-2">
307
+ <div className="w-8 h-8 bg-accent/10 rounded flex items-center justify-center">
308
+ 📝
309
+ </div>
310
+ Form Elements
311
+ </CardTitle>
312
+ <CardDescription>Input fields and form controls with consistent styling and validation</CardDescription>
313
+ </CardHeader>
314
+ <CardContent className="space-y-6">
315
+ <div className="space-y-4">
316
+ <h4 className="text-sm font-medium text-muted-foreground">Text Inputs</h4>
317
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
318
+ <div className="space-y-2">
319
+ <label className="text-sm font-medium">Standard Input</label>
320
+ <input
321
+ type="text"
322
+ placeholder="Enter your text"
323
+ className="w-full p-3 bg-background border border-input rounded-lg focus:outline-none focus:ring-2 focus:ring-ring"
324
+ />
325
+ </div>
326
+ <div className="space-y-2">
327
+ <label className="text-sm font-medium">Email Input</label>
328
+ <input
329
+ type="email"
330
+ placeholder="your@email.com"
331
+ className="w-full p-3 bg-background border border-input rounded-lg focus:outline-none focus:ring-2 focus:ring-ring"
332
+ />
333
+ </div>
334
+ </div>
335
+ </div>
336
+
337
+ <div className="space-y-4">
338
+ <h4 className="text-sm font-medium text-muted-foreground">Selection Controls</h4>
339
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
340
+ <div className="space-y-2">
341
+ <label className="text-sm font-medium">Dropdown Select</label>
342
+ <select className="w-full p-3 bg-background border border-input rounded-lg focus:outline-none focus:ring-2 focus:ring-ring">
343
+ <option>Choose an option</option>
344
+ <option>Option 1</option>
345
+ <option>Option 2</option>
346
+ <option>Option 3</option>
347
+ </select>
348
+ </div>
349
+ <div className="space-y-2">
350
+ <label className="text-sm font-medium">Multi-select</label>
351
+ <select multiple size={3} className="w-full p-3 bg-background border border-input rounded-lg focus:outline-none focus:ring-2 focus:ring-ring">
352
+ <option>Option A</option>
353
+ <option>Option B</option>
354
+ <option>Option C</option>
355
+ </select>
356
+ </div>
357
+ </div>
358
+ </div>
359
+
360
+ <div className="space-y-4">
361
+ <h4 className="text-sm font-medium text-muted-foreground">Text Areas</h4>
362
+ <div className="space-y-2">
363
+ <label className="text-sm font-medium">Message</label>
364
+ <textarea
365
+ placeholder="Enter your message here..."
366
+ rows={4}
367
+ className="w-full p-3 bg-background border border-input rounded-lg focus:outline-none focus:ring-2 focus:ring-ring resize-none"
368
+ />
369
+ </div>
370
+ </div>
371
+ </CardContent>
372
+ </Card>
373
+
374
+ {/* Data Display */}
375
+ <Card>
376
+ <CardHeader>
377
+ <CardTitle className="flex items-center gap-2">
378
+ <div className="w-8 h-8 bg-chart1/10 rounded flex items-center justify-center">
379
+ 📊
380
+ </div>
381
+ Data Display
382
+ </CardTitle>
383
+ <CardDescription>Components for presenting structured information and metrics</CardDescription>
384
+ </CardHeader>
385
+ <CardContent className="space-y-6">
386
+ <div className="space-y-4">
387
+ <h4 className="text-sm font-medium text-muted-foreground">Chart Colors</h4>
388
+ <div className="grid grid-cols-5 gap-3">
389
+ <div className="text-center">
390
+ <div className="w-full h-16 rounded-lg mb-2 bg-chart1 shadow-sm" />
391
+ <div className="text-xs text-muted-foreground font-medium">Chart 1</div>
392
+ </div>
393
+ <div className="text-center">
394
+ <div className="w-full h-16 rounded-lg mb-2 bg-chart2 shadow-sm" />
395
+ <div className="text-xs text-muted-foreground font-medium">Chart 2</div>
396
+ </div>
397
+ <div className="text-center">
398
+ <div className="w-full h-16 rounded-lg mb-2 bg-chart3 shadow-sm" />
399
+ <div className="text-xs text-muted-foreground font-medium">Chart 3</div>
400
+ </div>
401
+ <div className="text-center">
402
+ <div className="w-full h-16 rounded-lg mb-2 bg-chart4 shadow-sm" />
403
+ <div className="text-xs text-muted-foreground font-medium">Chart 4</div>
404
+ </div>
405
+ <div className="text-center">
406
+ <div className="w-full h-16 rounded-lg mb-2 bg-chart5 shadow-sm" />
407
+ <div className="text-xs text-muted-foreground font-medium">Chart 5</div>
408
+ </div>
409
+ </div>
410
+ </div>
411
+
412
+ <div className="space-y-4">
413
+ <h4 className="text-sm font-medium text-muted-foreground">Status Indicators</h4>
414
+ <div className="flex flex-wrap gap-3">
415
+ <div className="inline-flex items-center gap-2 bg-green-100 text-green-800 px-3 py-1 rounded-full text-sm">
416
+ <div className="w-2 h-2 bg-green-600 rounded-full"></div>
417
+ Active
418
+ </div>
419
+ <div className="inline-flex items-center gap-2 bg-yellow-100 text-yellow-800 px-3 py-1 rounded-full text-sm">
420
+ <div className="w-2 h-2 bg-yellow-600 rounded-full"></div>
421
+ Pending
422
+ </div>
423
+ <div className="inline-flex items-center gap-2 bg-red-100 text-red-800 px-3 py-1 rounded-full text-sm">
424
+ <div className="w-2 h-2 bg-red-600 rounded-full"></div>
425
+ Inactive
426
+ </div>
427
+ <div className="inline-flex items-center gap-2 bg-blue-100 text-blue-800 px-3 py-1 rounded-full text-sm">
428
+ <div className="w-2 h-2 bg-blue-600 rounded-full"></div>
429
+ Processing
430
+ </div>
431
+ </div>
432
+ </div>
433
+ </CardContent>
434
+ </Card>
435
+ </div>
436
+ </>
437
+ );
438
+ };
439
+
440
+ const ThemesPage: React.FC = () => {
441
+ const { theme, setTheme, availableThemes } = useTheme();
442
+
443
+ return (
444
+ <>
445
+ <SEO
446
+ title="Themes - UIKit SPA Demo"
447
+ description="Explore 5 professional themes built with OKLCH color science for perfect accessibility and stunning design"
448
+ />
449
+ <div className="space-y-6">
450
+ <h1 className="voila-heading">Themes</h1>
451
+
452
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6">
453
+ <div className="bg-primary text-primary-foreground p-4 rounded-lg text-center">
454
+ <div className="text-sm font-medium">Primary</div>
455
+ </div>
456
+ <div className="bg-secondary text-secondary-foreground p-4 rounded-lg text-center">
457
+ <div className="text-sm font-medium">Secondary</div>
458
+ </div>
459
+ <div className="bg-accent text-accent-foreground p-4 rounded-lg text-center">
460
+ <div className="text-sm font-medium">Accent</div>
461
+ </div>
462
+ <div className="bg-muted text-muted-foreground p-4 rounded-lg text-center">
463
+ <div className="text-sm font-medium">Muted</div>
464
+ </div>
465
+ </div>
466
+
467
+ <Card>
468
+ <CardHeader>
469
+ <CardTitle>Available Themes</CardTitle>
470
+ <CardDescription>Switch between different theme styles</CardDescription>
471
+ </CardHeader>
472
+ <CardContent>
473
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
474
+ {availableThemes.map(themeId => (
475
+ <Card key={themeId} className={theme === themeId ? 'ring-2 ring-primary' : ''}>
476
+ <CardHeader>
477
+ <CardTitle className="text-lg capitalize">{themeId}</CardTitle>
478
+ </CardHeader>
479
+ <CardContent>
480
+ <Button
481
+ onClick={() => setTheme(themeId as any)}
482
+ variant={theme === themeId ? 'default' : 'outline'}
483
+ className="w-full"
484
+ >
485
+ {theme === themeId ? 'Active' : 'Select'}
486
+ </Button>
487
+ </CardContent>
488
+ </Card>
489
+ ))}
490
+ </div>
491
+ </CardContent>
492
+ </Card>
493
+ </div>
494
+ </>
495
+ );
496
+ };
497
+
498
+ const DocsPage: React.FC = () => {
499
+ return (
500
+ <>
501
+ <SEO
502
+ title="Documentation - UIKit SPA Demo"
503
+ description="Complete documentation for UIKit components, themes, and SPA routing patterns"
504
+ />
505
+ <div className="space-y-6">
506
+ <h1 className="voila-heading">Documentation</h1>
507
+
508
+ <Card>
509
+ <CardHeader>
510
+ <CardTitle>Getting Started</CardTitle>
511
+ <CardDescription>How to use @bloomneo/uikit in your project</CardDescription>
512
+ </CardHeader>
513
+ <CardContent className="space-y-4">
514
+ <div>
515
+ <h3 className="font-semibold mb-2">Installation</h3>
516
+ <code className="bg-muted p-2 rounded block">npm install @bloomneo/uikit</code>
517
+ </div>
518
+
519
+ <div>
520
+ <h3 className="font-semibold mb-2">Import Components</h3>
521
+ <code className="bg-muted p-2 rounded block text-sm">
522
+ {`import { Button } from '@bloomneo/uikit/button';
523
+ import { Card } from '@bloomneo/uikit/card';`}
524
+ </code>
525
+ </div>
526
+
527
+ <div>
528
+ <h3 className="font-semibold mb-2">Import Styles</h3>
529
+ <code className="bg-muted p-2 rounded block">import '@bloomneo/uikit/styles';</code>
530
+ </div>
531
+ </CardContent>
532
+ </Card>
533
+
534
+ <Card>
535
+ <CardHeader>
536
+ <CardTitle>Theme Provider</CardTitle>
537
+ <CardDescription>Wrap your app with the theme provider</CardDescription>
538
+ </CardHeader>
539
+ <CardContent>
540
+ <code className="bg-muted p-4 rounded block text-sm">
541
+ {`import { ThemeProvider } from '@bloomneo/uikit/theme-provider';
542
+
543
+ function App() {
544
+ return (
545
+ <ThemeProvider theme="elegant" mode="light">
546
+ <YourApp />
547
+ </ThemeProvider>
548
+ );
549
+ }`}
550
+ </code>
551
+ </CardContent>
552
+ </Card>
553
+ </div>
554
+ </>
555
+ );
556
+ };
557
+
558
+ // Navigation configuration
559
+ const navigationItems: NavigationItem[] = [
560
+ { key: 'home', label: 'Home', href: '/', icon: Home },
561
+ { key: 'components', label: 'Components', href: '/components', icon: Layout },
562
+ { key: 'themes', label: 'Themes', href: '/themes', icon: Palette },
563
+ { key: 'docs', label: 'Docs', href: '/docs', icon: BookOpen },
564
+ ];
565
+
566
+ // Theme actions component
567
+ const ThemeActions: React.FC = () => {
568
+ const { theme, mode, setTheme, availableThemes, toggleMode } = useTheme();
569
+
570
+ return (
571
+ <div className="flex items-center gap-3">
572
+ <select
573
+ value={theme}
574
+ onChange={(e) => setTheme(e.target.value as any)}
575
+ className="bg-background border border-input rounded px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring"
576
+ >
577
+ {availableThemes.map(themeId => (
578
+ <option key={themeId} value={themeId}>
579
+ {themeId.charAt(0).toUpperCase() + themeId.slice(1)}
580
+ </option>
581
+ ))}
582
+ </select>
583
+
584
+ <Button onClick={toggleMode} variant="outline" size="sm">
585
+ {mode === 'dark' ? '☀️' : '🌙'}
586
+ </Button>
587
+ </div>
588
+ );
589
+ };
590
+
591
+ // Logo component
592
+ const Logo: React.FC = () => (
593
+ <div className="flex items-center gap-3">
594
+ <div className="w-8 h-8 bg-primary rounded flex items-center justify-center text-primary-foreground font-bold text-sm">
595
+ UI
596
+ </div>
597
+ <div>
598
+ <h3 className="voila-brand-logo text-xl font-bold">@bloomneo/uikit</h3>
599
+ <p className="text-xs text-muted-foreground">SPA Template</p>
600
+ </div>
601
+ </div>
602
+ );
603
+
604
+ // Component to handle scroll to top on route change
605
+ const ScrollToTop: React.FC = () => {
606
+ const { pathname } = useLocation();
607
+
608
+ useEffect(() => {
609
+ window.scrollTo(0, 0);
610
+ }, [pathname]);
611
+
612
+ return null;
613
+ };
614
+
615
+ const SPAContent: React.FC = () => {
616
+ const location = useLocation();
617
+ const navigate = useNavigate();
618
+
619
+ const handleNavigation = (href: string, item: NavigationItem) => {
620
+ navigate(href);
621
+ };
622
+
623
+ return (
624
+ <PageLayout scheme="default" tone="subtle" size="xl">
625
+ <ScrollToTop />
626
+ <PageLayout.Header
627
+ navigation={navigationItems}
628
+ currentPath={location.pathname}
629
+ onNavigate={handleNavigation}
630
+ logo={<Logo />}
631
+ actions={<ThemeActions />}
632
+ position="sticky"
633
+ />
634
+
635
+ <PageLayout.Content>
636
+ <Routes>
637
+ <Route path="/" element={<HomePage />} />
638
+ <Route path="/components" element={<ComponentsPage />} />
639
+ <Route path="/themes" element={<ThemesPage />} />
640
+ <Route path="/docs" element={<DocsPage />} />
641
+ </Routes>
642
+ </PageLayout.Content>
643
+
644
+ <PageLayout.Footer
645
+ copyright="@bloomneo/uikit SPA Template • React Router Navigation"
646
+ />
647
+ </PageLayout>
648
+ );
649
+ };
650
+
651
+ function App() {
652
+ return (
653
+ <Router basename="/">
654
+ <SPAContent />
655
+ </Router>
656
+ );
657
+ }
658
+
659
+ export default App;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Main Styles Entry Point
3
+ * Tailwind CSS v4+ with UIKit integration
4
+ */
5
+
6
+ /* Tailwind CSS v4+ - REQUIRED */
7
+ @import "tailwindcss";
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+ import { ThemeProvider } from '@bloomneo/uikit/theme-provider';
4
+ import App from './App';
5
+ import './index.css';
6
+ import '@bloomneo/uikit/styles';
7
+
8
+ ReactDOM.createRoot(document.getElementById('root')!).render(
9
+ <React.StrictMode>
10
+ <ThemeProvider theme="base" mode="light" forceConfig={true}>
11
+ <App />
12
+ </ThemeProvider>
13
+ </React.StrictMode>
14
+ );