@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,2055 @@
1
+ # @bloomneo/uikit - COMPLETE LLM Usage Guide v2.1
2
+
3
+ ## 🎯 QUICK START (30 SECONDS)
4
+
5
+ ### STEP 1: Required Setup (COPY-PASTE EVERY PROJECT)
6
+ ```jsx
7
+ import { ThemeProvider } from '@bloomneo/uikit/theme-provider';
8
+ import '@bloomneo/uikit/styles'; // ← CRITICAL: Must import this
9
+
10
+ function App() {
11
+ return (
12
+ <ThemeProvider theme="base" mode="light">
13
+ {/* Your app goes here */}
14
+ </ThemeProvider>
15
+ );
16
+ }
17
+ ```
18
+
19
+ ### STEP 2: Component Selection (FOLLOW THIS DECISION TREE)
20
+ ```
21
+ What are you building?
22
+ ├── Dashboard/Admin Panel → AdminLayout
23
+ ├── Company Website → PageLayout
24
+ ├── Login/Signup Page → AuthLayout
25
+ ├── Error/About Page → BlankLayout
26
+ └── Chrome Extension/Popup → PopupLayout
27
+ ```
28
+
29
+ ---
30
+
31
+ ## 🏗️ FBCA PROJECT TEMPLATE (Feature-Based Architecture)
32
+
33
+ ### When to Use FBCA
34
+ Use `--fbca` flag when building applications that need:
35
+ - **Feature isolation** - Each business feature is self-contained
36
+ - **Auto-discovery routing** - Routes generated from file structure
37
+ - **Scalable architecture** - Easy to add new features without touching existing code
38
+ - **Team collaboration** - Multiple developers can work on different features
39
+
40
+ ### Quick FBCA Setup
41
+ ```bash
42
+ npx uikit create myapp --fbca --theme elegant
43
+ cd myapp && npm run dev
44
+ ```
45
+
46
+ ### FBCA File Structure
47
+ ```
48
+ src/
49
+ ├── features/
50
+ │ ├── auth/ # Authentication feature
51
+ │ │ └── pages/
52
+ │ │ ├── login.tsx # Route: /auth/login
53
+ │ │ └── register.tsx # Route: /auth/register
54
+ │ ├── dashboard/ # Dashboard feature
55
+ │ │ └── pages/
56
+ │ │ ├── index.tsx # Route: /dashboard
57
+ │ │ └── settings.tsx # Route: /dashboard/settings
58
+ │ └── main/ # Main feature (special case)
59
+ │ └── pages/
60
+ │ └── index.tsx # Route: / (homepage)
61
+ ├── shared/
62
+ │ ├── components/ # Reusable UI components
63
+ │ └── hooks/ # Custom React hooks (SEO, etc.)
64
+ └── lib/
65
+ └── page-router.tsx # Auto-discovery routing system
66
+ ```
67
+
68
+ ### FBCA Routing Conventions
69
+ ```jsx
70
+ // File-based routing patterns:
71
+ index.tsx → /feature (feature root)
72
+ [param].tsx → /feature/:param (dynamic routes)
73
+ nested/page.tsx → /feature/nested/page
74
+ main/pages/index.tsx → / (homepage - special case)
75
+ ```
76
+
77
+ ### FBCA Features Included
78
+ - **Auto-discovery routing** with Vite glob imports
79
+ - **SEO management** with custom useSEO hook
80
+ - **Lazy loading** with React Suspense
81
+ - **Feature isolation** with clear boundaries
82
+ - **Shared components** for reusable UI
83
+ - **TypeScript support** with full type safety
84
+
85
+ ### Example FBCA Usage
86
+ ```jsx
87
+ // src/features/products/pages/[id].tsx
88
+ import { useSEO } from '@/shared/hooks/useSEO';
89
+ import { ProductCard } from '@/shared/components/ProductCard';
90
+
91
+ export default function ProductDetailsPage() {
92
+ const { id } = useParams(); // Auto-available from React Router
93
+
94
+ useSEO({
95
+ title: `Product ${id}`,
96
+ description: `Details for product ${id}`,
97
+ });
98
+
99
+ return (
100
+ <div>
101
+ <h1>Product {id}</h1>
102
+ <ProductCard productId={id} />
103
+ </div>
104
+ );
105
+ }
106
+ ```
107
+
108
+ ---
109
+
110
+ ## 📋 COMPONENT PATTERNS (ONLY 2 TYPES)
111
+
112
+ ### 🏗️ COMPOUND LAYOUTS (Use Child Components)
113
+ **AdminLayout & PageLayout ONLY**
114
+ ```jsx
115
+ // ✅ CORRECT - Use child components
116
+ <AdminLayout scheme="sidebar" tone="subtle">
117
+ <AdminLayout.Header title="Dashboard" position="sticky" />
118
+ <AdminLayout.Sidebar navigation={nav} />
119
+ <AdminLayout.Content>
120
+ <YourContent />
121
+ </AdminLayout.Content>
122
+ </AdminLayout>
123
+
124
+ // ❌ WRONG - Don't pass direct children
125
+ <AdminLayout>
126
+ <YourContent /> {/* This breaks */}
127
+ </AdminLayout>
128
+ ```
129
+
130
+ ### 📄 SINGLE LAYOUTS (Direct Children)
131
+ **AuthLayout, BlankLayout, PopupLayout**
132
+ ```jsx
133
+ // ✅ CORRECT - Pass content directly
134
+ <AuthLayout scheme="card" tone="clean">
135
+ <LoginForm />
136
+ </AuthLayout>
137
+
138
+ // ❌ WRONG - Don't use child components
139
+ <AuthLayout>
140
+ <AuthLayout.Content>Form</AuthLayout.Content> {/* No such thing */}
141
+ </AuthLayout>
142
+ ```
143
+
144
+ ---
145
+
146
+ ## 🎨 PROPS SYSTEM (3 CORE PROPS EVERYWHERE)
147
+
148
+ ### Standard Props (Same for ALL components)
149
+ ```jsx
150
+ <AnyLayout
151
+ scheme="specific-to-component" // Layout structure
152
+ tone="clean|subtle|brand|contrast" // Visual emphasis
153
+ size="sm|md|lg|xl|full" // Component size
154
+ >
155
+ ```
156
+
157
+ ### Scheme Options by Component
158
+ ```jsx
159
+ AdminLayout: scheme = 'sidebar|compact';
160
+ PageLayout: scheme = 'base|sidebar';
161
+ AuthLayout: scheme = 'simple|card|split|hero';
162
+ BlankLayout: scheme = 'simple|card';
163
+ PopupLayout: scheme = 'modal|drawer|floating';
164
+ ```
165
+
166
+ ### Size Configurations (Exact Measurements)
167
+ ```jsx
168
+ size = 'sm'; // Sidebars: 192px, Content: max-w-2xl, Padding: 16px
169
+ size = 'md'; // Sidebars: 224px, Content: max-w-4xl, Padding: 20px
170
+ size = 'lg'; // Sidebars: 256px, Content: max-w-6xl, Padding: 24px (DEFAULT)
171
+ size = 'xl'; // Sidebars: 288px, Content: max-w-7xl, Padding: 28px
172
+ size = 'full'; // Sidebars: 320px, Content: max-w-full, Padding: 32px
173
+ ```
174
+
175
+ ### Tone Visual Guide
176
+ ```jsx
177
+ tone = 'clean'; // Pure white/light backgrounds (websites, auth)
178
+ tone = 'subtle'; // Light gray backgrounds (admin panels, professional)
179
+ tone = 'brand'; // Primary colored backgrounds (headers, CTAs, emphasis)
180
+ tone = 'contrast'; // Dark/bold backgrounds (footers, high contrast areas)
181
+ ```
182
+
183
+ ---
184
+
185
+ ## 🧩 ALL UI COMPONENTS (37 TOTAL)
186
+
187
+ ### Form & Input Components
188
+ ```jsx
189
+ import { Button } from '@bloomneo/uikit/button';
190
+ import { Input } from '@bloomneo/uikit/input';
191
+ import { Textarea } from '@bloomneo/uikit/textarea';
192
+ import { Label } from '@bloomneo/uikit/label';
193
+ import { Checkbox } from '@bloomneo/uikit/checkbox';
194
+ import { RadioGroup, RadioGroupItem } from '@bloomneo/uikit/radio-group';
195
+ import { Switch } from '@bloomneo/uikit/switch';
196
+ import { Slider } from '@bloomneo/uikit/slider';
197
+ import {
198
+ Select,
199
+ SelectContent,
200
+ SelectItem,
201
+ SelectTrigger,
202
+ SelectValue,
203
+ } from '@bloomneo/uikit/select';
204
+
205
+ // NEW: Enhanced Form Components (Recommended for 90% of use cases)
206
+ import {
207
+ ValidatedInput,
208
+ ValidatedSelect,
209
+ ValidatedCheckbox,
210
+ FormActions,
211
+ } from '@bloomneo/uikit/form';
212
+
213
+ // Advanced React Hook Form Integration (10% of cases)
214
+ import {
215
+ Form,
216
+ FormField,
217
+ FormItem,
218
+ FormLabel,
219
+ FormControl,
220
+ FormMessage,
221
+ } from '@bloomneo/uikit/form';
222
+
223
+ // Usage Examples
224
+ <div className="space-y-4">
225
+ {/* Basic shadcn form components */}
226
+ <Label className="text-foreground">Email</Label>
227
+ <Input placeholder="Enter email" className="bg-background border-border" />
228
+ <Button className="bg-primary text-primary-foreground">Submit</Button>;
229
+
230
+ {/* NEW: Validated form components (recommended) */}
231
+ <ValidatedInput
232
+ type="email"
233
+ required
234
+ label="Email Address"
235
+ value={email}
236
+ onChange={setEmail}
237
+ showPasswordStrength // For password type
238
+ showPasswordToggle // For password type
239
+ />
240
+
241
+ <ValidatedSelect
242
+ required
243
+ label="Country"
244
+ value={country}
245
+ onChange={setCountry}
246
+ options={[
247
+ { label: 'United States', value: 'us' },
248
+ { label: 'Canada', value: 'ca' },
249
+ ]}
250
+ />
251
+
252
+ <ValidatedCheckbox
253
+ required
254
+ label="I agree to terms"
255
+ description="Please read our terms and conditions"
256
+ checked={agreed}
257
+ onChange={setAgreed}
258
+ />
259
+
260
+ <FormActions
261
+ submitText="Create Account"
262
+ showCancel
263
+ loading={isLoading}
264
+ onCancel={() => router.back()}
265
+ />
266
+ </div>;
267
+ ```
268
+
269
+ ### Display & Layout Components
270
+ ```jsx
271
+ import {
272
+ Card,
273
+ CardHeader,
274
+ CardTitle,
275
+ CardContent,
276
+ CardFooter,
277
+ } from '@bloomneo/uikit/card';
278
+ import { Badge } from '@bloomneo/uikit/badge';
279
+ import { Avatar, AvatarImage, AvatarFallback } from '@bloomneo/uikit/avatar';
280
+ import { Separator } from '@bloomneo/uikit/separator';
281
+ import { Progress } from '@bloomneo/uikit/progress';
282
+ import { Skeleton } from '@bloomneo/uikit/skeleton';
283
+ import { Alert, AlertTitle, AlertDescription } from '@bloomneo/uikit/alert';
284
+ import {
285
+ Breadcrumb,
286
+ BreadcrumbList,
287
+ BreadcrumbItem,
288
+ BreadcrumbLink,
289
+ } from '@bloomneo/uikit/breadcrumb';
290
+ import {
291
+ Tabs,
292
+ TabsList,
293
+ TabsTrigger,
294
+ TabsContent,
295
+ } from '@bloomneo/uikit/tabs';
296
+ import {
297
+ Accordion,
298
+ AccordionItem,
299
+ AccordionTrigger,
300
+ AccordionContent,
301
+ } from '@bloomneo/uikit/accordion';
302
+
303
+ // Usage
304
+ <Card className="bg-card border-border">
305
+ <CardHeader>
306
+ <CardTitle className="text-foreground">Title</CardTitle>
307
+ </CardHeader>
308
+ <CardContent className="text-muted-foreground">Content here</CardContent>
309
+ </Card>;
310
+ ```
311
+
312
+ ### Navigation & Menu Components
313
+ ```jsx
314
+ import {
315
+ DropdownMenu,
316
+ DropdownMenuTrigger,
317
+ DropdownMenuContent,
318
+ DropdownMenuItem,
319
+ } from '@bloomneo/uikit/dropdown-menu';
320
+ import {
321
+ Menubar,
322
+ MenubarMenu,
323
+ MenubarTrigger,
324
+ MenubarContent,
325
+ MenubarItem,
326
+ } from '@bloomneo/uikit/menubar';
327
+ import {
328
+ Pagination,
329
+ PaginationContent,
330
+ PaginationItem,
331
+ PaginationLink,
332
+ } from '@bloomneo/uikit/pagination';
333
+ import {
334
+ Command,
335
+ CommandInput,
336
+ CommandList,
337
+ CommandItem,
338
+ } from '@bloomneo/uikit/command';
339
+ import {
340
+ Collapsible,
341
+ CollapsibleTrigger,
342
+ CollapsibleContent,
343
+ } from '@bloomneo/uikit/collapsible';
344
+ import { Toggle } from '@bloomneo/uikit/toggle';
345
+
346
+ // Usage
347
+ <DropdownMenu>
348
+ <DropdownMenuTrigger asChild>
349
+ <Button className="bg-background border-border">Open</Button>
350
+ </DropdownMenuTrigger>
351
+ <DropdownMenuContent className="bg-popover border-border">
352
+ <DropdownMenuItem className="text-foreground">Item 1</DropdownMenuItem>
353
+ </DropdownMenuContent>
354
+ </DropdownMenu>;
355
+ ```
356
+
357
+ ### Overlay & Modal Components
358
+ ```jsx
359
+ import {
360
+ Dialog,
361
+ DialogTrigger,
362
+ DialogContent,
363
+ DialogHeader,
364
+ DialogTitle,
365
+ } from '@bloomneo/uikit/dialog';
366
+ import {
367
+ Sheet,
368
+ SheetTrigger,
369
+ SheetContent,
370
+ SheetHeader,
371
+ SheetTitle,
372
+ } from '@bloomneo/uikit/sheet';
373
+ import {
374
+ Popover,
375
+ PopoverTrigger,
376
+ PopoverContent,
377
+ } from '@bloomneo/uikit/popover';
378
+ import {
379
+ HoverCard,
380
+ HoverCardTrigger,
381
+ HoverCardContent,
382
+ } from '@bloomneo/uikit/hover-card';
383
+ import {
384
+ Tooltip,
385
+ TooltipProvider,
386
+ TooltipTrigger,
387
+ TooltipContent,
388
+ } from '@bloomneo/uikit/tooltip';
389
+
390
+ // Usage
391
+ <Dialog>
392
+ <DialogTrigger asChild>
393
+ <Button className="bg-primary text-primary-foreground">Open Dialog</Button>
394
+ </DialogTrigger>
395
+ <DialogContent className="bg-background border-border">
396
+ <DialogHeader>
397
+ <DialogTitle className="text-foreground">Dialog Title</DialogTitle>
398
+ </DialogHeader>
399
+ <p className="text-muted-foreground">Dialog content</p>
400
+ </DialogContent>
401
+ </Dialog>;
402
+ ```
403
+
404
+ ### Data & Table Components
405
+ ```jsx
406
+ import {
407
+ Table,
408
+ TableHeader,
409
+ TableBody,
410
+ TableRow,
411
+ TableHead,
412
+ TableCell,
413
+ } from '@bloomneo/uikit/table';
414
+ import { DataTable } from '@bloomneo/uikit/data-table';
415
+ import { Calendar } from '@bloomneo/uikit/calendar';
416
+ import { Toaster } from '@bloomneo/uikit/sonner';
417
+
418
+ // Basic Table Usage
419
+ <Table className="bg-background">
420
+ <TableHeader>
421
+ <TableRow className="border-border">
422
+ <TableHead className="text-foreground">Name</TableHead>
423
+ </TableRow>
424
+ </TableHeader>
425
+ <TableBody>
426
+ <TableRow className="border-border">
427
+ <TableCell className="text-foreground">John</TableCell>
428
+ </TableRow>
429
+ </TableBody>
430
+ </Table>;
431
+
432
+ // Enhanced DataTable Usage
433
+ <DataTable
434
+ data={users}
435
+ columns={[
436
+ {
437
+ id: 'name',
438
+ header: 'Name',
439
+ accessorKey: 'name',
440
+ sortable: true,
441
+ filterable: true,
442
+ },
443
+ {
444
+ id: 'email',
445
+ header: 'Email',
446
+ accessorKey: 'email',
447
+ sortable: true,
448
+ filterable: true,
449
+ filterType: 'text',
450
+ },
451
+ {
452
+ id: 'status',
453
+ header: 'Status',
454
+ accessorKey: 'status',
455
+ cell: (value) => <Badge>{value}</Badge>,
456
+ filterable: true,
457
+ filterType: 'select',
458
+ filterOptions: [
459
+ { label: 'Active', value: 'active' },
460
+ { label: 'Inactive', value: 'inactive' },
461
+ ],
462
+ },
463
+ ]}
464
+ searchable
465
+ filterable
466
+ sortable
467
+ pagination
468
+ selectable
469
+ actions={[
470
+ {
471
+ id: 'edit',
472
+ label: 'Edit',
473
+ icon: Edit,
474
+ onClick: (row) => editUser(row),
475
+ },
476
+ {
477
+ id: 'delete',
478
+ label: 'Delete',
479
+ icon: Trash2,
480
+ onClick: (row) => deleteUser(row),
481
+ variant: 'destructive',
482
+ },
483
+ ]}
484
+ />;
485
+ ```
486
+
487
+ ### NEW: Motion & Animation Components
488
+ ```jsx
489
+ import {
490
+ Motion,
491
+ LoadingSpinner,
492
+ Reveal,
493
+ Hover,
494
+ } from '@bloomneo/uikit/motion';
495
+
496
+ // Simple CSS-based animations
497
+ <Motion preset="fadeIn" duration="normal">
498
+ <Card>Fades in immediately</Card>
499
+ </Motion>
500
+
501
+ <Motion preset="slideInUp" duration="slow" delay={200}>
502
+ <div>Slides up after 200ms delay</div>
503
+ </Motion>
504
+
505
+ <Motion preset="scaleIn" trigger="hover">
506
+ <Button>Scales on hover</Button>
507
+ </Motion>
508
+
509
+ // Scroll-triggered animations
510
+ <Reveal preset="slideInUp" duration="normal">
511
+ <div>Animates when scrolled into view</div>
512
+ </Reveal>
513
+
514
+ // Hover effects
515
+ <Hover effect="scale">
516
+ <Card>Scales on hover</Card>
517
+ </Hover>
518
+
519
+ <Hover effect="lift">
520
+ <Button>Lifts on hover with shadow</Button>
521
+ </Hover>
522
+
523
+ // Loading spinner
524
+ <LoadingSpinner size="md" />
525
+ ```
526
+
527
+ ---
528
+
529
+ ## 🧭 NAVIGATION SYSTEM (COMPLETE GUIDE)
530
+
531
+ ### Basic Navigation Structure
532
+ ```jsx
533
+ const navigation = [
534
+ {
535
+ key: 'unique-id', // REQUIRED: Unique identifier
536
+ label: 'Display Text', // REQUIRED: What users see
537
+ href: '/path', // For page navigation
538
+ onClick: () => {}, // For actions/functions
539
+ icon: HomeIcon, // Lucide React icon (optional)
540
+ badge: 'New', // Notification badge (optional)
541
+ isActive: true, // Current page indicator (optional)
542
+ className: 'custom-css', // Additional styling (optional)
543
+ },
544
+ ];
545
+ ```
546
+
547
+ ### Advanced Navigation with Submenus
548
+ ```jsx
549
+ const navigation = [
550
+ {
551
+ key: 'dashboard',
552
+ label: 'Dashboard',
553
+ href: '/admin',
554
+ icon: LayoutDashboard,
555
+ isActive: true,
556
+ },
557
+ {
558
+ key: 'analytics',
559
+ label: 'Analytics',
560
+ icon: BarChart3,
561
+ badge: '5',
562
+ items: [
563
+ // Submenu items (max 2 levels)
564
+ {
565
+ key: 'overview',
566
+ label: 'Overview',
567
+ href: '/admin/analytics/overview',
568
+ },
569
+ {
570
+ key: 'reports',
571
+ label: 'Reports',
572
+ href: '/admin/analytics/reports',
573
+ badge: 'New',
574
+ },
575
+ ],
576
+ },
577
+ ];
578
+ ```
579
+
580
+ ### Navigation Handler Function
581
+ ```jsx
582
+ const handleNavigation = (href, item) => {
583
+ if (item.onClick) {
584
+ item.onClick(); // Execute custom function
585
+ } else if (href) {
586
+ // Handle routing based on your app
587
+ window.location.href = href; // Simple navigation
588
+ // navigate(href); // React Router
589
+ // router.push(href); // Next.js
590
+ }
591
+ };
592
+ ```
593
+
594
+ ---
595
+
596
+ ## 📍 BREADCRUMBS SYSTEM
597
+
598
+ ### AdminLayout.Header Breadcrumbs
599
+ ```jsx
600
+ <AdminLayout.Header
601
+ title="User Management"
602
+ position="sticky"
603
+ breadcrumbs={[
604
+ { label: 'Admin', href: '/admin' },
605
+ { label: 'Users', href: '/admin/users' },
606
+ { label: 'John Doe' }, // Current page - no href
607
+ ]}
608
+ actions={<Button>Edit User</Button>}
609
+ />
610
+ ```
611
+
612
+ ### PageLayout.Content Breadcrumbs
613
+ ```jsx
614
+ <PageLayout.Content
615
+ title="User Profile"
616
+ breadcrumbs={[
617
+ { label: 'Home', href: '/' },
618
+ { label: 'Users', href: '/users' },
619
+ { label: 'John Doe' }, // Current page - no href
620
+ ]}
621
+ onNavigate={(href, item) => navigate(href)}
622
+ >
623
+ <UserProfileContent />
624
+ </PageLayout.Content>
625
+ ```
626
+
627
+ ### Breadcrumb Structure
628
+ ```jsx
629
+ const breadcrumbs = [
630
+ {
631
+ label: 'Home', // REQUIRED: Display text
632
+ href: '/', // OPTIONAL: Link (omit for current page)
633
+ },
634
+ {
635
+ label: 'Products',
636
+ href: '/products',
637
+ },
638
+ {
639
+ label: 'iPhone 15', // Current page - no href
640
+ },
641
+ ];
642
+ ```
643
+
644
+ ---
645
+
646
+ ## 🎨 COLOR SYSTEM (COMPLETE REFERENCE)
647
+
648
+ ### ✅ Semantic Color Classes (ALWAYS USE)
649
+ ```jsx
650
+ // Background Colors
651
+ className = 'bg-background'; // Main page background
652
+ className = 'bg-card'; // Card/panel backgrounds
653
+ className = 'bg-popover'; // Dropdown/modal backgrounds
654
+ className = 'bg-muted'; // Subtle background areas
655
+ className = 'bg-primary'; // Primary buttons/brand elements
656
+ className = 'bg-secondary'; // Secondary buttons/elements
657
+ className = 'bg-destructive'; // Error/danger elements
658
+
659
+ // Text Colors
660
+ className = 'text-foreground'; // Primary text
661
+ className = 'text-muted-foreground'; // Secondary/subtle text
662
+ className = 'text-card-foreground'; // Text on card backgrounds
663
+ className = 'text-primary-foreground'; // Text on primary elements
664
+ className = 'text-secondary-foreground'; // Text on secondary elements
665
+ className = 'text-destructive'; // Error text
666
+
667
+ // Border Colors
668
+ className = 'border-border'; // Standard borders
669
+ className = 'border-input'; // Input field borders
670
+ className = 'border-primary'; // Primary colored borders
671
+ ```
672
+
673
+ ### Semantic Colors and Themes
674
+ Semantic color classes (e.g., `bg-primary`, `text-foreground`) adapt to the selected theme:
675
+ - `base`: Metallic black gradients for `bg-primary`
676
+ - `vivid`: Luxurious purple with slight orange for `bg-primary`
677
+ - `metro`: Nice green gradients for `bg-primary`
678
+ - `elegant`: Professional blue gradients for `bg-primary`
679
+ - `studio`: Black with orange accents for `bg-primary`
680
+
681
+ ### ❌ Hardcoded Colors (NEVER USE)
682
+ ```jsx
683
+ // These break in dark mode and don't match themes
684
+ className = 'bg-white text-black';
685
+ className = 'bg-blue-500 text-white';
686
+ className = 'border-gray-200';
687
+ className = 'bg-red-500';
688
+ className = 'text-green-600';
689
+ ```
690
+
691
+ ---
692
+
693
+ ## 🎯 ENHANCED THEME SYSTEM (ZERO-TOUCH MAGIC)
694
+
695
+ ### 🪄 Automatic Enhancement Features
696
+ The power of `@bloomneo/uikit` is that standard shadcn components automatically become beautiful without changing your code:
697
+ ```jsx
698
+ // ✨ This standard code:
699
+ <Button className="bg-primary text-primary-foreground">Click Me</Button>
700
+
701
+ // 🎨 Automatically becomes (based on theme):
702
+ // base: Metallic black gradient, System UI fonts, professional styling
703
+ // vivid: Luxurious purple and slight orange gradient, Inter font, enhanced shadows
704
+ // metro: Nice green gradient, clean typography, sharp edges
705
+ // elegant: Professional blue gradient, luxury spacing, elegant shadows
706
+ // studio: Black and orange gradient, artistic fonts, bold styling
707
+ ```
708
+
709
+ What happens automatically:
710
+ - **Gradients**: `bg-primary` becomes theme-specific gradients
711
+ - **Typography**: Custom fonts per theme (e.g., Inter, System UI)
712
+ - **Spacing**: Theme-specific padding and margins
713
+ - **Shadows**: Theme-appropriate shadow effects
714
+ - **Borders**: Theme-adjusted rounded corners
715
+
716
+ ### Theme Migration Note
717
+ Previous versions of `@bloomneo/uikit` used themes named `aurora`, `default`, `ruby`, and `neon`. These have been replaced:
718
+ - `aurora` → `vivid` (luxurious purple with slight orange)
719
+ - `default` → `base` (metallic black)
720
+ - `ruby` → `elegant` (professional blue)
721
+ - `neon` → `studio` (black and orange)
722
+ - `metro` remains `metro` (nice green)
723
+ Update your code to use the new theme names to ensure compatibility.
724
+
725
+ ### Level 1: Global Theme (Set Once in ThemeProvider)
726
+ ```jsx
727
+ <ThemeProvider theme="base" mode="dark">
728
+ {/* Affects ALL components globally with enhanced design tokens */}
729
+ </ThemeProvider>
730
+
731
+ // Available Themes with Enhanced Design Tokens:
732
+ theme = 'base'; // Metallic black with System UI fonts
733
+ theme = 'vivid'; // Luxurious purple and slight orange with Inter fonts
734
+ theme = 'metro'; // Nice green with clean typography
735
+ theme = 'elegant'; // Professional blue with enhanced spacing
736
+ theme = 'studio'; // Black and orange with artistic fonts
737
+
738
+ // Available Modes:
739
+ mode = 'light'; // Light color scheme
740
+ mode = 'dark'; // Dark color scheme with enhanced contrast
741
+ ```
742
+
743
+ ### 🎨 Theme Switching (Dynamic Changes)
744
+ ```jsx
745
+ import { useTheme } from '@bloomneo/uikit';
746
+
747
+ function ThemeControls() {
748
+ const { theme, setTheme, mode, setMode } = useTheme();
749
+
750
+ return (
751
+ <div className="flex gap-2">
752
+ <Button onClick={() => setTheme('vivid')}>
753
+ Vivid Theme
754
+ </Button>
755
+ <Button onClick={() => setTheme('metro')}>
756
+ Metro Theme
757
+ </Button>
758
+ <Button onClick={() => setMode(mode === 'light' ? 'dark' : 'light')}>
759
+ Toggle {mode === 'light' ? 'Dark' : 'Light'} Mode
760
+ </Button>
761
+ </div>
762
+ );
763
+ }
764
+ ```
765
+
766
+ ### 🚀 Theme Generation & Bundling CLI
767
+
768
+ #### Generate Custom Themes (Recommended)
769
+ Create complete custom themes automatically:
770
+ ```bash
771
+ # Generate new custom theme with complete color system
772
+ npx uikit generate theme brand
773
+
774
+ # What this creates:
775
+ # - Theme file with 29 semantic colors (light + dark modes)
776
+ # - Auto-detects project structure (SPA/Multi/FBCA)
777
+ # - Updates main.tsx with theme and imports
778
+ # - Ready for bundling and use
779
+ ```
780
+
781
+ #### Bundle Themes to CSS
782
+ Generate optimized CSS for custom themes:
783
+ ```bash
784
+ # Bundle themes from your project directory
785
+ npx uikit bundle
786
+
787
+ # Watch mode for development
788
+ npx uikit bundle --watch
789
+
790
+ # Custom output location
791
+ npx uikit bundle --output=src/styles/themes.css
792
+ ```
793
+
794
+ #### Project Structure Support
795
+ **SPA/Multi projects:**
796
+ - Themes: `src/themes/presets/`
797
+ - CSS output: `src/styles/globals.css`
798
+
799
+ **FBCA projects:**
800
+ - Themes: `src/web/themes/presets/`
801
+ - CSS output: `src/web/styles/globals.css`
802
+
803
+ **Legacy directories also supported:**
804
+ - `src/web/assets/themes/presets/`
805
+ - `themes/presets/`
806
+
807
+ The default presets include `base`, `vivid`, `metro`, `elegant`, and `studio`.
808
+
809
+ ### Level 2: Component Tone (Per Component)
810
+ ```jsx
811
+ <AdminLayout tone="subtle"> // Professional gray backgrounds
812
+ <Header tone="brand"> // Primary colored backgrounds
813
+ <Footer tone="contrast"> // High contrast/dark backgrounds
814
+ <AuthLayout tone="clean"> // Pure white/clean backgrounds
815
+
816
+ // Tone Meanings:
817
+ tone="clean" // Pure, minimal, white/light backgrounds
818
+ tone="subtle" // Muted, professional, gray backgrounds
819
+ tone="brand" // Primary colored, branded elements
820
+ tone="contrast" // High emphasis, dark/bold backgrounds
821
+ ```
822
+
823
+ ---
824
+
825
+ ## 🚀 COMPLETE USAGE EXAMPLES
826
+
827
+ ### 1. Enhanced Login Form (NEW Form Components)
828
+ ```jsx
829
+ import { AuthLayout } from '@bloomneo/uikit/auth';
830
+ import {
831
+ ValidatedInput,
832
+ ValidatedCheckbox,
833
+ FormActions,
834
+ } from '@bloomneo/uikit/form';
835
+ import { ThemeProvider } from '@bloomneo/uikit/theme-provider';
836
+ import { useState } from 'react';
837
+ import '@bloomneo/uikit/styles';
838
+
839
+ function EnhancedLoginPage() {
840
+ const [formData, setFormData] = useState({
841
+ email: '',
842
+ password: '',
843
+ remember: false,
844
+ });
845
+ const [isLoading, setIsLoading] = useState(false);
846
+
847
+ const handleSubmit = async (e) => {
848
+ e.preventDefault();
849
+ setIsLoading(true);
850
+ // Simulate API call
851
+ await new Promise((resolve) => setTimeout(resolve, 2000));
852
+ console.log('Login attempt:', formData);
853
+ setIsLoading(false);
854
+ };
855
+
856
+ return (
857
+ <ThemeProvider theme="base" mode="light">
858
+ <AuthLayout
859
+ scheme="card"
860
+ tone="clean"
861
+ size="md"
862
+ title="Welcome back"
863
+ subtitle="Sign in to your account to continue"
864
+ logo={
865
+ <div className="w-16 h-16 bg-primary rounded-xl flex items-center justify-center">
866
+ <span className="text-2xl font-bold text-primary-foreground">
867
+ L
868
+ </span>
869
+ </div>
870
+ }
871
+ >
872
+ <form onSubmit={handleSubmit} className="space-y-6">
873
+ <ValidatedInput
874
+ type="email"
875
+ required
876
+ label="Email address"
877
+ placeholder="name@example.com"
878
+ value={formData.email}
879
+ onChange={(value) =>
880
+ setFormData((prev) => ({ ...prev, email: value }))
881
+ }
882
+ />
883
+ <ValidatedInput
884
+ type="password"
885
+ required
886
+ minLength={8}
887
+ label="Password"
888
+ placeholder="Enter your password"
889
+ value={formData.password}
890
+ onChange={(value) =>
891
+ setFormData((prev) => ({ ...prev, password: value }))
892
+ }
893
+ showPasswordStrength
894
+ showPasswordToggle
895
+ />
896
+ <ValidatedCheckbox
897
+ label="Remember me for 30 days"
898
+ description="Keep me signed in on this device"
899
+ checked={formData.remember}
900
+ onChange={(value) =>
901
+ setFormData((prev) => ({ ...prev, remember: value }))
902
+ }
903
+ />
904
+ <FormActions
905
+ submitText="Sign in"
906
+ showCancel={false}
907
+ loading={isLoading}
908
+ disabled={!formData.email || !formData.password}
909
+ />
910
+ </form>
911
+ </AuthLayout>
912
+ </ThemeProvider>
913
+ );
914
+ }
915
+ ```
916
+
917
+ ### 2. Interactive Dashboard with Motion (NEW Motion Components)
918
+ ```jsx
919
+ import { AdminLayout } from '@bloomneo/uikit/admin';
920
+ import { Card, CardHeader, CardTitle, CardContent } from '@bloomneo/uikit/card';
921
+ import { Button } from '@bloomneo/uikit/button';
922
+ import { Badge } from '@bloomneo/uikit/badge';
923
+ import { Motion, Reveal, Hover, LoadingSpinner } from '@bloomneo/uikit/motion';
924
+ import { ThemeProvider } from '@bloomneo/uikit/theme-provider';
925
+ import { Home, Users, BarChart3 } from 'lucide-react';
926
+ import { useState } from 'react';
927
+ import '@bloomneo/uikit/styles';
928
+
929
+ const navigation = [
930
+ {
931
+ key: 'dashboard',
932
+ label: 'Dashboard',
933
+ href: '/admin',
934
+ icon: Home,
935
+ isActive: true,
936
+ },
937
+ {
938
+ key: 'users',
939
+ label: 'Users',
940
+ href: '/admin/users',
941
+ icon: Users,
942
+ badge: '12',
943
+ },
944
+ {
945
+ key: 'analytics',
946
+ label: 'Analytics',
947
+ icon: BarChart3,
948
+ items: [
949
+ { key: 'overview', label: 'Overview', href: '/admin/analytics' },
950
+ { key: 'reports', label: 'Reports', href: '/admin/analytics/reports' },
951
+ ],
952
+ },
953
+ ];
954
+
955
+ function AnimatedDashboard() {
956
+ const [loading, setLoading] = useState(false);
957
+
958
+ const stats = [
959
+ { title: 'Total Users', value: '1,234', change: '+12%', delay: 0 },
960
+ { title: 'Revenue', value: '$45,678', change: '+8%', delay: 100 },
961
+ { title: 'Orders', value: '892', change: '+15%', delay: 200 },
962
+ { title: 'Conversion', value: '3.2%', change: '+2%', delay: 300 },
963
+ ];
964
+
965
+ return (
966
+ <ThemeProvider theme="base" mode="light">
967
+ <AdminLayout scheme="sidebar" tone="subtle" size="lg">
968
+ <AdminLayout.Header
969
+ title="Dashboard"
970
+ position="sticky"
971
+ actions={
972
+ <Hover effect="scale">
973
+ <Button
974
+ className="bg-primary text-primary-foreground"
975
+ onClick={() => setLoading(!loading)}
976
+ >
977
+ {loading ? <LoadingSpinner size="sm" /> : 'Refresh Data'}
978
+ </Button>
979
+ </Hover>
980
+ }
981
+ />
982
+ <AdminLayout.Sidebar
983
+ navigation={navigation}
984
+ currentPath="/admin"
985
+ onNavigate={(href) => (window.location.href = href)}
986
+ logo={
987
+ <Motion preset="scaleIn" duration="normal">
988
+ <div className="flex items-center gap-2">
989
+ <div className="w-8 h-8 bg-primary rounded-lg"></div>
990
+ <span className="text-xl font-bold text-foreground">Admin</span>
991
+ </div>
992
+ </Motion>
993
+ }
994
+ />
995
+ <AdminLayout.Content>
996
+ <div className="space-y-6">
997
+ <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
998
+ {stats.map((stat, index) => (
999
+ <Motion
1000
+ key={stat.title}
1001
+ preset="slideInUp"
1002
+ duration="normal"
1003
+ delay={stat.delay}
1004
+ >
1005
+ <Hover effect="lift">
1006
+ <Card className="bg-card text-card-foreground border-border">
1007
+ <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
1008
+ <CardTitle className="text-sm font-medium text-foreground">
1009
+ {stat.title}
1010
+ </CardTitle>
1011
+ <Users className="h-4 w-4 text-muted-foreground" />
1012
+ </CardHeader>
1013
+ <CardContent>
1014
+ <div className="text-2xl font-bold text-foreground">
1015
+ {stat.value}
1016
+ </div>
1017
+ <Badge className="mt-1 bg-green-100 text-green-800">
1018
+ {stat.change} from last month
1019
+ </Badge>
1020
+ </CardContent>
1021
+ </Card>
1022
+ </Hover>
1023
+ </Motion>
1024
+ ))}
1025
+ </div>
1026
+ <Reveal preset="fadeIn" duration="slow">
1027
+ <Card className="bg-card text-card-foreground border-border">
1028
+ <CardHeader>
1029
+ <CardTitle className="text-foreground">
1030
+ Recent Activity
1031
+ </CardTitle>
1032
+ </CardHeader>
1033
+ <CardContent>
1034
+ <div className="space-y-4">
1035
+ {[1, 2, 3].map((item, index) => (
1036
+ <Motion
1037
+ key={item}
1038
+ preset="slideInUp"
1039
+ duration="fast"
1040
+ delay={index * 100}
1041
+ >
1042
+ <div className="flex items-center gap-3 p-3 bg-muted/20 rounded-lg">
1043
+ <div className="w-2 h-2 bg-primary rounded-full"></div>
1044
+ <div className="flex-1">
1045
+ <p className="text-sm text-foreground">
1046
+ Activity {item}
1047
+ </p>
1048
+ <p className="text-xs text-muted-foreground">
1049
+ 2 minutes ago
1050
+ </p>
1051
+ </div>
1052
+ </div>
1053
+ </Motion>
1054
+ ))}
1055
+ </div>
1056
+ </CardContent>
1057
+ </Card>
1058
+ </Reveal>
1059
+ </div>
1060
+ </AdminLayout.Content>
1061
+ </AdminLayout>
1062
+ </ThemeProvider>
1063
+ );
1064
+ }
1065
+ ```
1066
+
1067
+ ### 3. Advanced Data Table with Full Features (NEW DataTable)
1068
+ ```jsx
1069
+ import { PageLayout } from '@bloomneo/uikit/page';
1070
+ import { DataTable } from '@bloomneo/uikit/data-table';
1071
+ import { Badge } from '@bloomneo/uikit/badge';
1072
+ import { Button } from '@bloomneo/uikit/button';
1073
+ import { Avatar, AvatarImage, AvatarFallback } from '@bloomneo/uikit/avatar';
1074
+ import { ThemeProvider } from '@bloomneo/uikit/theme-provider';
1075
+ import { Edit, Trash2, Eye, Download } from 'lucide-react';
1076
+ import { useState } from 'react';
1077
+ import '@bloomneo/uikit/styles';
1078
+
1079
+ function UserManagementPage() {
1080
+ const [users] = useState([
1081
+ {
1082
+ id: '1',
1083
+ name: 'John Doe',
1084
+ email: 'john@example.com',
1085
+ role: 'Admin',
1086
+ status: 'active',
1087
+ lastLogin: '2025-09-11',
1088
+ avatar: 'https://avatar.vercel.sh/john',
1089
+ },
1090
+ {
1091
+ id: '2',
1092
+ name: 'Jane Smith',
1093
+ email: 'jane@example.com',
1094
+ role: 'User',
1095
+ status: 'inactive',
1096
+ lastLogin: '2025-09-10',
1097
+ avatar: 'https://avatar.vercel.sh/jane',
1098
+ },
1099
+ ]);
1100
+
1101
+ const columns = [
1102
+ {
1103
+ id: 'user',
1104
+ header: 'User',
1105
+ accessorKey: 'name',
1106
+ sortable: true,
1107
+ filterable: true,
1108
+ cell: (value, row) => (
1109
+ <div className="flex items-center gap-3">
1110
+ <Avatar className="h-8 w-8">
1111
+ <AvatarImage src={row.avatar} alt={row.name} />
1112
+ <AvatarFallback className="bg-primary text-primary-foreground">
1113
+ {row.name
1114
+ .split(' ')
1115
+ .map((n) => n[0])
1116
+ .join('')}
1117
+ </AvatarFallback>
1118
+ </Avatar>
1119
+ <div>
1120
+ <div className="font-medium text-foreground">{row.name}</div>
1121
+ <div className="text-sm text-muted-foreground">{row.email}</div>
1122
+ </div>
1123
+ </div>
1124
+ ),
1125
+ },
1126
+ {
1127
+ id: 'role',
1128
+ header: 'Role',
1129
+ accessorKey: 'role',
1130
+ sortable: true,
1131
+ filterable: true,
1132
+ filterType: 'select',
1133
+ filterOptions: [
1134
+ { label: 'Admin', value: 'Admin' },
1135
+ { label: 'User', value: 'User' },
1136
+ { label: 'Manager', value: 'Manager' },
1137
+ ],
1138
+ },
1139
+ {
1140
+ id: 'status',
1141
+ header: 'Status',
1142
+ accessorKey: 'status',
1143
+ sortable: true,
1144
+ filterable: true,
1145
+ filterType: 'select',
1146
+ filterOptions: [
1147
+ { label: 'Active', value: 'active' },
1148
+ { label: 'Inactive', value: 'inactive' },
1149
+ ],
1150
+ cell: (value) => (
1151
+ <Badge
1152
+ className={
1153
+ value === 'active'
1154
+ ? 'bg-green-100 text-green-800'
1155
+ : 'bg-red-100 text-red-800'
1156
+ }
1157
+ >
1158
+ {value}
1159
+ </Badge>
1160
+ ),
1161
+ },
1162
+ {
1163
+ id: 'lastLogin',
1164
+ header: 'Last Login',
1165
+ accessorKey: 'lastLogin',
1166
+ sortable: true,
1167
+ filterable: true,
1168
+ filterType: 'date',
1169
+ dataType: 'date',
1170
+ },
1171
+ ];
1172
+
1173
+ const actions = [
1174
+ {
1175
+ id: 'view',
1176
+ label: 'View Profile',
1177
+ icon: Eye,
1178
+ onClick: (user) => console.log('View user:', user.name),
1179
+ },
1180
+ {
1181
+ id: 'edit',
1182
+ label: 'Edit User',
1183
+ icon: Edit,
1184
+ onClick: (user) => console.log('Edit user:', user.name),
1185
+ },
1186
+ {
1187
+ id: 'delete',
1188
+ label: 'Delete User',
1189
+ icon: Trash2,
1190
+ variant: 'destructive',
1191
+ onClick: (user) => console.log('Delete user:', user.name),
1192
+ visible: (user) => user.role !== 'Admin',
1193
+ },
1194
+ ];
1195
+
1196
+ const bulkActions = [
1197
+ {
1198
+ id: 'export',
1199
+ label: 'Export Selected',
1200
+ icon: Download,
1201
+ onClick: (selectedUsers) => console.log('Export:', selectedUsers),
1202
+ },
1203
+ {
1204
+ id: 'deactivate',
1205
+ label: 'Deactivate Selected',
1206
+ variant: 'destructive',
1207
+ onClick: (selectedUsers) => console.log('Deactivate:', selectedUsers),
1208
+ },
1209
+ ];
1210
+
1211
+ return (
1212
+ <ThemeProvider theme="base" mode="light">
1213
+ <PageLayout scheme="base" tone="clean" size="xl">
1214
+ <PageLayout.Header
1215
+ title="User Management"
1216
+ navigation={[
1217
+ { key: 'dashboard', label: 'Dashboard', href: '/' },
1218
+ { key: 'users', label: 'Users', href: '/users', isActive: true },
1219
+ { key: 'settings', label: 'Settings', href: '/settings' },
1220
+ ]}
1221
+ />
1222
+ <PageLayout.Content>
1223
+ <div className="space-y-6">
1224
+ <div className="flex items-center justify-between">
1225
+ <div>
1226
+ <h1 className="text-3xl font-bold text-foreground">Users</h1>
1227
+ <p className="text-muted-foreground">
1228
+ Manage your team members and their permissions
1229
+ </p>
1230
+ </div>
1231
+ <Button className="bg-primary text-primary-foreground">
1232
+ Add User
1233
+ </Button>
1234
+ </div>
1235
+ <DataTable
1236
+ data={users}
1237
+ columns={columns}
1238
+ searchable
1239
+ searchPlaceholder="Search users..."
1240
+ filterable
1241
+ sortable
1242
+ selectable
1243
+ pagination
1244
+ pageSize={10}
1245
+ actions={actions}
1246
+ bulkActions={bulkActions}
1247
+ exportable
1248
+ exportFormats={['csv', 'json', 'excel']}
1249
+ onExport={(format, data) => {
1250
+ console.log(`Exporting ${data.length} users as ${format}`);
1251
+ }}
1252
+ emptyState={
1253
+ <div className="text-center py-12">
1254
+ <div className="text-muted-foreground mb-4">
1255
+ No users found
1256
+ </div>
1257
+ <Button>Add your first user</Button>
1258
+ </div>
1259
+ }
1260
+ className="border border-border rounded-lg"
1261
+ />
1262
+ </div>
1263
+ </PageLayout.Content>
1264
+ <PageLayout.Footer
1265
+ copyright="© 2025 User Management System. All rights reserved."
1266
+ />
1267
+ </PageLayout>
1268
+ </ThemeProvider>
1269
+ );
1270
+ }
1271
+ ```
1272
+
1273
+ ---
1274
+
1275
+ ## 🔧 NEW COMPONENTS INTEGRATION PATTERNS
1276
+
1277
+ ### Form Component Integration
1278
+ ```jsx
1279
+ // ✅ RECOMMENDED: Use ValidatedInput for forms with validation needs
1280
+ const [formData, setFormData] = useState({ email: '', password: '' });
1281
+
1282
+ <ValidatedInput
1283
+ type="email"
1284
+ required
1285
+ label="Email"
1286
+ value={formData.email}
1287
+ onChange={(value) => setFormData((prev) => ({ ...prev, email: value }))}
1288
+ />;
1289
+
1290
+ // ✅ ADVANCED: Use React Hook Form for complex forms
1291
+ import { useForm } from 'react-hook-form';
1292
+ import { Form, FormField, FormItem, FormControl } from '@bloomneo/uikit/form';
1293
+
1294
+ const form = useForm();
1295
+
1296
+ <Form {...form}>
1297
+ <FormField
1298
+ control={form.control}
1299
+ name="email"
1300
+ render={({ field }) => (
1301
+ <FormItem>
1302
+ <FormControl>
1303
+ <ValidatedInput {...field} type="email" required label="Email" />
1304
+ </FormControl>
1305
+ </FormItem>
1306
+ )}
1307
+ />
1308
+ </Form>;
1309
+ ```
1310
+
1311
+ ### Motion Component Integration
1312
+ ```jsx
1313
+ // ✅ Page transitions
1314
+ <Motion preset="fadeIn" duration="normal">
1315
+ <PageContent />
1316
+ </Motion>;
1317
+
1318
+ // ✅ List item animations
1319
+ {items.map((item, index) => (
1320
+ <Motion key={item.id} preset="slideInUp" delay={index * 100}>
1321
+ <ListItem item={item} />
1322
+ </Motion>
1323
+ ))}
1324
+
1325
+ // ✅ Interactive elements
1326
+ <Hover effect="scale">
1327
+ <Card>Interactive card</Card>
1328
+ </Hover>;
1329
+
1330
+ // ✅ Loading states
1331
+ {loading && <LoadingSpinner size="lg" />}
1332
+ ```
1333
+
1334
+ ### DataTable Integration
1335
+ ```jsx
1336
+ // ✅ Basic usage with minimal props
1337
+ <DataTable
1338
+ data={users}
1339
+ columns={basicColumns}
1340
+ searchable
1341
+ pagination
1342
+ />
1343
+
1344
+ // ✅ Advanced usage with all features
1345
+ <DataTable
1346
+ data={users}
1347
+ columns={advancedColumns}
1348
+ searchable
1349
+ filterable
1350
+ sortable
1351
+ selectable
1352
+ pagination
1353
+ actions={rowActions}
1354
+ bulkActions={bulkActions}
1355
+ exportable
1356
+ onExport={handleExport}
1357
+ />
1358
+ ```
1359
+
1360
+ ---
1361
+
1362
+ ## 🏗️ SECTION COMPONENTS (Advanced Usage)
1363
+
1364
+ ### Header Component (Standalone)
1365
+ ```jsx
1366
+ import { Header, HeaderLogo, HeaderNav } from '@bloomneo/uikit/header';
1367
+
1368
+ <Header tone="clean" size="xl" position="sticky">
1369
+ <HeaderLogo>
1370
+ <img src="/logo.png" alt="Logo" className="h-8 w-auto" />
1371
+ </HeaderLogo>
1372
+ <HeaderNav
1373
+ navigation={navigation}
1374
+ currentPath="/current"
1375
+ onNavigate={handleNavigation}
1376
+ />
1377
+ </Header>;
1378
+ ```
1379
+
1380
+ ### Footer Component (Standalone)
1381
+ ```jsx
1382
+ import { Footer } from '@bloomneo/uikit/footer';
1383
+
1384
+ <Footer tone="contrast" size="xl" position="relative">
1385
+ <div className="text-center py-4">
1386
+ <p className="text-sm text-muted-foreground">© 2025 Company</p>
1387
+ </div>
1388
+ </Footer>;
1389
+ ```
1390
+
1391
+ ### Container Component (Content with Sidebar)
1392
+ ```jsx
1393
+ import { Container } from '@bloomneo/uikit/container';
1394
+
1395
+ <Container
1396
+ tone="clean"
1397
+ size="xl"
1398
+ sidebar="left"
1399
+ navigation={sidebarNav}
1400
+ currentPath="/current"
1401
+ onNavigate={handleNavigation}
1402
+ >
1403
+ <MainContent />
1404
+ </Container>;
1405
+ ```
1406
+
1407
+ ---
1408
+
1409
+ ## 📐 COMPOUND COMPONENT PROPS (DETAILED)
1410
+
1411
+ ### AdminLayout Props
1412
+ ```jsx
1413
+ // AdminLayout Root
1414
+ <AdminLayout
1415
+ scheme="sidebar|compact" // Layout structure (base: 'sidebar')
1416
+ tone="clean|subtle|brand|contrast" // Visual emphasis (base: 'subtle')
1417
+ size="sm|md|lg|xl|full" // Layout size (base: 'lg')
1418
+ baseSidebarOpen={true} // Initial sidebar state (base: true)
1419
+ position="relative|sticky|fixed" // Positioning behavior (base: 'relative')
1420
+ >
1421
+
1422
+ // AdminLayout.Header
1423
+ <AdminLayout.Header
1424
+ title="Dashboard" // Page title (optional)
1425
+ position="sticky|fixed|relative" // Header positioning (base: 'sticky')
1426
+ breadcrumbs={[ // Breadcrumb navigation (optional)
1427
+ { label: 'Admin', href: '/admin' },
1428
+ { label: 'Dashboard' }
1429
+ ]}
1430
+ actions={<Button>Action</Button>} // Header actions (optional)
1431
+ />
1432
+
1433
+ // AdminLayout.Sidebar
1434
+ <AdminLayout.Sidebar
1435
+ navigation={navigationItems} // Navigation items (optional)
1436
+ currentPath="/admin" // Current path for active states (optional)
1437
+ onNavigate={handleNavigation} // Navigation handler (optional)
1438
+ logo={<Logo />} // Logo component (optional)
1439
+ footer={<SidebarFooter />} // Footer content (optional)
1440
+ position="relative|sticky|fixed" // Sidebar positioning (optional)
1441
+ />
1442
+
1443
+ // AdminLayout.Content
1444
+ <AdminLayout.Content>
1445
+ {/* Your admin content here */}
1446
+ </AdminLayout.Content>
1447
+ ```
1448
+
1449
+ ### PageLayout Props
1450
+ ```jsx
1451
+ // PageLayout Root
1452
+ <PageLayout
1453
+ scheme="base|sidebar" // Layout structure (base: 'base')
1454
+ tone="clean|subtle|brand|contrast" // Visual emphasis (base: 'clean')
1455
+ size="sm|md|lg|xl|full" // Layout size (base: 'xl')
1456
+ >
1457
+
1458
+ // PageLayout.Header
1459
+ <PageLayout.Header
1460
+ navigation={navigationItems} // Navigation items (optional)
1461
+ currentPath="/" // Current path for active states (optional)
1462
+ onNavigate={handleNavigation} // Navigation handler (optional)
1463
+ logo={<Logo />} // Logo component (optional)
1464
+ title="My Site" // Site title if no logo (optional)
1465
+ actions={<HeaderActions />} // Header actions (optional)
1466
+ position="sticky|fixed|relative" // Header positioning (base: 'sticky')
1467
+ />
1468
+
1469
+ // PageLayout.Content
1470
+ <PageLayout.Content
1471
+ title="Page Title" // Page title above content (optional)
1472
+ breadcrumbs={[ // Page breadcrumbs (optional)
1473
+ { label: "Home", href: "/" },
1474
+ { label: "About" }
1475
+ ]}
1476
+ sidebar="none|left|right" // Sidebar position (base: 'none')
1477
+ navigation={sidebarNav} // Sidebar navigation (optional)
1478
+ sidebarContent={<CustomSidebar />} // Custom sidebar content (optional)
1479
+ onNavigate={handleNavigation} // Navigation handler (optional)
1480
+ sidebarPosition="sticky|fixed|relative" // Sidebar positioning (optional)
1481
+ >
1482
+ {/* Your page content here */}
1483
+ </PageLayout.Content>
1484
+
1485
+ // PageLayout.Footer
1486
+ <PageLayout.Footer
1487
+ navigation={footerNav} // Footer navigation (optional)
1488
+ copyright="© 2025 Company" // Copyright text (optional)
1489
+ position="sticky|fixed|relative" // Footer positioning (base: 'relative')
1490
+ >
1491
+ {/* Custom footer content (optional) */}
1492
+ </PageLayout.Footer>
1493
+ ```
1494
+
1495
+ ---
1496
+
1497
+ ## 🔧 INTEGRATION EXAMPLES
1498
+
1499
+ ### React Router Integration
1500
+ ```jsx
1501
+ import { useNavigate, useLocation } from 'react-router-dom';
1502
+
1503
+ function App() {
1504
+ const navigate = useNavigate();
1505
+ const location = useLocation();
1506
+
1507
+ const handleNavigation = (href, item) => {
1508
+ if (item.onClick) {
1509
+ item.onClick();
1510
+ } else if (href) {
1511
+ navigate(href);
1512
+ }
1513
+ };
1514
+
1515
+ return (
1516
+ <AdminLayout>
1517
+ <AdminLayout.Sidebar
1518
+ navigation={navigation}
1519
+ currentPath={location.pathname}
1520
+ onNavigate={handleNavigation}
1521
+ />
1522
+ </AdminLayout>
1523
+ );
1524
+ }
1525
+ ```
1526
+
1527
+ ### Next.js Integration
1528
+ ```jsx
1529
+ import { useRouter } from 'next/router';
1530
+
1531
+ function App() {
1532
+ const router = useRouter();
1533
+
1534
+ const handleNavigation = (href, item) => {
1535
+ if (item.onClick) {
1536
+ item.onClick();
1537
+ } else if (href) {
1538
+ router.push(href);
1539
+ }
1540
+ };
1541
+
1542
+ return (
1543
+ <PageLayout>
1544
+ <PageLayout.Header
1545
+ navigation={navigation}
1546
+ currentPath={router.pathname}
1547
+ onNavigate={handleNavigation}
1548
+ />
1549
+ </PageLayout>
1550
+ );
1551
+ }
1552
+ ```
1553
+
1554
+ ### State Management Integration
1555
+ ```jsx
1556
+ import { useStore } from '@/store';
1557
+
1558
+ function Dashboard() {
1559
+ const { user, notifications, updateUser } = useStore();
1560
+
1561
+ const navigation = [
1562
+ {
1563
+ key: 'notifications',
1564
+ label: 'Notifications',
1565
+ href: '/notifications',
1566
+ badge: notifications.length.toString(),
1567
+ },
1568
+ ];
1569
+
1570
+ return (
1571
+ <AdminLayout>
1572
+ <AdminLayout.Header
1573
+ title={`Welcome, ${user.name}`}
1574
+ actions={
1575
+ <Button onClick={() => updateUser({ lastSeen: new Date() })}>
1576
+ Update Profile
1577
+ </Button>
1578
+ }
1579
+ />
1580
+ <AdminLayout.Sidebar navigation={navigation} />
1581
+ </AdminLayout>
1582
+ );
1583
+ }
1584
+ ```
1585
+
1586
+ ---
1587
+
1588
+ ## 🆕 NEW COMPONENTS DEEP DIVE
1589
+
1590
+ ### ValidatedInput Advanced Features
1591
+ ```jsx
1592
+ // Email validation with custom pattern
1593
+ <ValidatedInput
1594
+ type="email"
1595
+ required
1596
+ label="Business Email"
1597
+ placeholder="you@company.com"
1598
+ pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
1599
+ value={email}
1600
+ onChange={setEmail}
1601
+ />
1602
+
1603
+ // Password with strength meter
1604
+ <ValidatedInput
1605
+ type="password"
1606
+ required
1607
+ minLength={12}
1608
+ label="Secure Password"
1609
+ placeholder="Create a strong password"
1610
+ value={password}
1611
+ onChange={setPassword}
1612
+ showPasswordStrength
1613
+ showPasswordToggle
1614
+ />
1615
+
1616
+ // Phone number with pattern validation
1617
+ <ValidatedInput
1618
+ type="tel"
1619
+ required
1620
+ label="Phone Number"
1621
+ placeholder="+1 (555) 123-4567"
1622
+ pattern="^\+?[1-9]\d{1,14}$"
1623
+ value={phone}
1624
+ onChange={setPhone}
1625
+ />
1626
+ ```
1627
+
1628
+ ### DataTable Advanced Configuration
1629
+ ```jsx
1630
+ // The `virtualized` prop enables virtualization for large datasets, improving performance by rendering only visible rows. Requires a fixed `height` prop.
1631
+ const advancedColumns = [
1632
+ {
1633
+ id: 'user',
1634
+ header: 'User Information',
1635
+ accessor: (row) => `${row.firstName} ${row.lastName}`,
1636
+ sortable: true,
1637
+ filterable: true,
1638
+ cell: (value, row) => (
1639
+ <div className="flex items-center gap-3">
1640
+ <Avatar>
1641
+ <AvatarImage src={row.avatar} />
1642
+ <AvatarFallback>{row.initials}</AvatarFallback>
1643
+ </Avatar>
1644
+ <div>
1645
+ <div className="font-medium">{value}</div>
1646
+ <div className="text-sm text-muted-foreground">{row.email}</div>
1647
+ <div className="text-xs text-muted-foreground">{row.department}</div>
1648
+ </div>
1649
+ </div>
1650
+ ),
1651
+ width: 300,
1652
+ pinned: 'left',
1653
+ },
1654
+ {
1655
+ id: 'performance',
1656
+ header: 'Performance Score',
1657
+ accessorKey: 'performanceScore',
1658
+ sortable: true,
1659
+ filterable: true,
1660
+ filterType: 'number',
1661
+ dataType: 'number',
1662
+ cell: (value) => (
1663
+ <div className="flex items-center gap-2">
1664
+ <div className="w-16 bg-muted rounded-full h-2">
1665
+ <div
1666
+ className="bg-primary h-2 rounded-full transition-all"
1667
+ style={{ width: `${value}%` }}
1668
+ />
1669
+ </div>
1670
+ <span className="text-sm font-medium">{value}%</span>
1671
+ </div>
1672
+ ),
1673
+ },
1674
+ {
1675
+ id: 'actions',
1676
+ header: 'Quick Actions',
1677
+ cell: (value, row) => (
1678
+ <div className="flex gap-1">
1679
+ <Button size="sm" variant="outline">
1680
+ Edit
1681
+ </Button>
1682
+ <Button size="sm" variant="outline">
1683
+ Message
1684
+ </Button>
1685
+ </div>
1686
+ ),
1687
+ width: 150,
1688
+ },
1689
+ ];
1690
+
1691
+ <DataTable
1692
+ data={employees}
1693
+ columns={advancedColumns}
1694
+ searchable
1695
+ searchPlaceholder="Search employees..."
1696
+ filterable
1697
+ sortable
1698
+ selectable
1699
+ selectionMode="multiple"
1700
+ pagination
1701
+ pageSize={25}
1702
+ height="600px"
1703
+ virtualized
1704
+ density="comfortable"
1705
+ striped
1706
+ hoverable
1707
+ actions={[
1708
+ {
1709
+ id: 'profile',
1710
+ label: 'View Profile',
1711
+ icon: User,
1712
+ onClick: (employee) => viewProfile(employee.id),
1713
+ },
1714
+ {
1715
+ id: 'edit',
1716
+ label: 'Edit Employee',
1717
+ icon: Edit,
1718
+ onClick: (employee) => editEmployee(employee.id),
1719
+ },
1720
+ {
1721
+ id: 'deactivate',
1722
+ label: 'Deactivate',
1723
+ icon: UserX,
1724
+ variant: 'destructive',
1725
+ onClick: (employee) => deactivateEmployee(employee.id),
1726
+ visible: (employee) => employee.status === 'active',
1727
+ },
1728
+ ]}
1729
+ bulkActions={[
1730
+ {
1731
+ id: 'export',
1732
+ label: 'Export Selected',
1733
+ icon: Download,
1734
+ onClick: (selected) => exportEmployees(selected),
1735
+ },
1736
+ {
1737
+ id: 'bulk-edit',
1738
+ label: 'Bulk Edit',
1739
+ icon: Edit,
1740
+ onClick: (selected) => openBulkEdit(selected),
1741
+ },
1742
+ ]}
1743
+ expandable
1744
+ renderExpanded={(employee) => (
1745
+ <div className="p-4 bg-muted/20">
1746
+ <h4 className="font-medium mb-2">Employee Details</h4>
1747
+ <div className="grid grid-cols-2 gap-4 text-sm">
1748
+ <div>Start Date: {employee.startDate}</div>
1749
+ <div>Manager: {employee.manager}</div>
1750
+ <div>Location: {employee.location}</div>
1751
+ <div>Salary: {employee.salary}</div>
1752
+ </div>
1753
+ </div>
1754
+ )}
1755
+ exportable
1756
+ exportFormats={['csv', 'json', 'excel']}
1757
+ onExport={(format, data) => handleExport(format, data)}
1758
+ />;
1759
+ ```
1760
+
1761
+ ### Motion Component Advanced Patterns
1762
+ ```jsx
1763
+ // Page transition animations
1764
+ function PageTransition({ children, pathname }) {
1765
+ return (
1766
+ <Motion
1767
+ key={pathname}
1768
+ preset="fadeIn"
1769
+ duration="normal"
1770
+ className="min-h-screen"
1771
+ >
1772
+ {children}
1773
+ </Motion>
1774
+ );
1775
+ }
1776
+
1777
+ // Staggered list animations
1778
+ function AnimatedList({ items }) {
1779
+ return (
1780
+ <div className="space-y-2">
1781
+ {items.map((item, index) => (
1782
+ <Motion
1783
+ key={item.id}
1784
+ preset="slideInUp"
1785
+ duration="fast"
1786
+ delay={index * 50}
1787
+ >
1788
+ <ListItem item={item} />
1789
+ </Motion>
1790
+ ))}
1791
+ </div>
1792
+ );
1793
+ }
1794
+
1795
+ // Scroll-triggered sections
1796
+ function FeaturesSection() {
1797
+ return (
1798
+ <section className="py-20">
1799
+ <Reveal preset="fadeIn" duration="slow">
1800
+ <h2 className="text-3xl font-bold text-center mb-12">Features</h2>
1801
+ </Reveal>
1802
+ <div className="grid md:grid-cols-3 gap-8">
1803
+ {features.map((feature, index) => (
1804
+ <Reveal
1805
+ key={feature.id}
1806
+ preset="slideInUp"
1807
+ duration="normal"
1808
+ delay={index * 200}
1809
+ >
1810
+ <Hover effect="lift">
1811
+ <Card>
1812
+ <CardContent className="p-6 text-center">
1813
+ <feature.icon className="h-12 w-12 mx-auto mb-4 text-primary" />
1814
+ <h3 className="text-xl font-semibold mb-2">
1815
+ {feature.title}
1816
+ </h3>
1817
+ <p className="text-muted-foreground">{feature.description}</p>
1818
+ </CardContent>
1819
+ </Card>
1820
+ </Hover>
1821
+ </Reveal>
1822
+ ))}
1823
+ </div>
1824
+ </section>
1825
+ );
1826
+ }
1827
+
1828
+ // Interactive button with loading states
1829
+ function SubmitButton({ loading, onSubmit }) {
1830
+ return (
1831
+ <Hover effect="scale">
1832
+ <Button
1833
+ onClick={onSubmit}
1834
+ disabled={loading}
1835
+ className="bg-primary text-primary-foreground min-w-32"
1836
+ >
1837
+ {loading ? (
1838
+ <div className="flex items-center gap-2">
1839
+ <LoadingSpinner size="sm" />
1840
+ Processing...
1841
+ </div>
1842
+ ) : (
1843
+ 'Submit Form'
1844
+ )}
1845
+ </Button>
1846
+ </Hover>
1847
+ );
1848
+ }
1849
+ ```
1850
+
1851
+ ---
1852
+
1853
+ ## ✅❌ DOS AND DON'TS (UPDATED FOR NEW COMPONENTS)
1854
+
1855
+ ### 🎯 **NEW COMPONENT USAGE**
1856
+
1857
+ #### ✅ DO - Enhanced Form Components
1858
+ ```jsx
1859
+ <ValidatedInput
1860
+ type="email"
1861
+ required
1862
+ label="Email"
1863
+ value={email}
1864
+ onChange={setEmail}
1865
+ showPasswordStrength // For passwords
1866
+ />
1867
+
1868
+ <FormActions
1869
+ submitText="Create Account"
1870
+ showCancel
1871
+ loading={isSubmitting}
1872
+ onCancel={() => router.back()}
1873
+ />
1874
+ ```
1875
+
1876
+ #### ❌ DON'T - Wrong Form Patterns
1877
+ ```jsx
1878
+ // Don't use basic Input for validated forms
1879
+ <Input type="email" required /> // No validation feedback
1880
+
1881
+ // Don't create custom form actions
1882
+ <div className="flex gap-2">
1883
+ <button type="submit">Submit</button>
1884
+ </div> // Use FormActions instead
1885
+ ```
1886
+
1887
+ #### ✅ DO - Motion Components
1888
+ ```jsx
1889
+ <Motion preset="fadeIn" duration="normal">
1890
+ <Content />
1891
+ </Motion>
1892
+
1893
+ <Reveal preset="slideInUp">
1894
+ <Section />
1895
+ </Reveal>
1896
+
1897
+ <Hover effect="scale">
1898
+ <Card />
1899
+ </Hover>
1900
+ ```
1901
+
1902
+ #### ❌ DON'T - Complex Animation Libraries
1903
+ ```jsx
1904
+ import { motion } from 'framer-motion' // Use Motion instead
1905
+ import anime from 'animejs' // Use Motion instead
1906
+ className="animate-bounce" // Use Motion presets
1907
+ ```
1908
+
1909
+ #### ✅ DO - DataTable Configuration
1910
+ ```jsx
1911
+ <DataTable
1912
+ data={users}
1913
+ columns={columns}
1914
+ searchable
1915
+ filterable
1916
+ sortable
1917
+ pagination
1918
+ actions={rowActions}
1919
+ />;
1920
+
1921
+ const columns = [
1922
+ {
1923
+ id: 'name',
1924
+ header: 'Name',
1925
+ accessorKey: 'name',
1926
+ sortable: true,
1927
+ filterable: true,
1928
+ filterType: 'text',
1929
+ },
1930
+ ];
1931
+ ```
1932
+
1933
+ #### ❌ DON'T - Basic Table for Complex Data
1934
+ ```jsx
1935
+ <Table>
1936
+ <TableRow>
1937
+ <TableCell>{user.name}</TableCell>
1938
+ </TableRow>
1939
+ </Table> // Missing search, filter, pagination
1940
+
1941
+ <input placeholder="Search..." /> // Use DataTable's built-in search
1942
+ ```
1943
+
1944
+ ### 🔄 **COMPONENT SELECTION UPDATED**
1945
+
1946
+ #### ✅ DO - Choose Right Component for Task
1947
+ ```jsx
1948
+ // Forms with validation → ValidatedInput
1949
+ <ValidatedInput type="email" required label="Email" />
1950
+
1951
+ // Search/filters → Input
1952
+ <Input placeholder="Search products..." />
1953
+
1954
+ // Complex tables → DataTable
1955
+ <DataTable data={users} columns={columns} searchable />
1956
+
1957
+ // Simple tables → Table
1958
+ <Table>
1959
+ <TableBody>
1960
+ <TableRow>...</TableRow>
1961
+ </TableBody>
1962
+ </Table>
1963
+
1964
+ // Page animations → Motion/Reveal
1965
+ <Motion preset="fadeIn"><Page /></Motion>
1966
+
1967
+ // Interactive elements → Hover
1968
+ <Hover effect="scale"><Button /></Hover>
1969
+ ```
1970
+
1971
+ #### ❌ DON'T - Wrong Component Choice
1972
+ ```jsx
1973
+ <Input required /> // Use ValidatedInput for forms
1974
+ <Table> + custom search/filter // Use DataTable for complex data
1975
+ <div className="animate-pulse"> // Use LoadingSpinner
1976
+ // Complex CSS animations // Use Motion components
1977
+ ```
1978
+
1979
+ ---
1980
+
1981
+ ## 🚨 CRITICAL REMINDERS (UPDATED)
1982
+
1983
+ ### 🎯 **Core Rules** (Never Break These)
1984
+ 1. **✅ ALWAYS** import styles: `import '@bloomneo/uikit/styles'`
1985
+ 2. **✅ ALWAYS** wrap in ThemeProvider: `<ThemeProvider theme="base">`
1986
+ 3. **✅ ALWAYS** use semantic colors: `bg-background text-foreground`
1987
+ 4. **✅ ALWAYS** use individual imports: `import { Button } from '@bloomneo/uikit/button'` (avoid barrel imports for tree-shaking)
1988
+ 5. **✅ NEVER** use hardcoded colors: `bg-white text-black`
1989
+ 6. **✅ COMPOUND** layouts need child components: `<AdminLayout><AdminLayout.Header/></AdminLayout>`
1990
+ 7. **✅ SINGLE** layouts take direct children: `<AuthLayout><LoginForm/></AuthLayout>`
1991
+ 8. **✅ FORMS** use ValidatedInput for validation: `<ValidatedInput required />`
1992
+ 9. **✅ ANIMATIONS** use Motion components: `<Motion preset="fadeIn" />`
1993
+ 10. **✅ TABLES** use DataTable for complex data: `<DataTable searchable filterable />`
1994
+
1995
+ ### 🔍 **Quality Checklist** (Every Component)
1996
+ - [ ] File header with description and @module/@file
1997
+ - [ ] Correct component pattern (compound vs single)
1998
+ - [ ] Semantic colors only (no hardcoded colors)
1999
+ - [ ] Standard navigation structure (key + label)
2000
+ - [ ] Appropriate scheme/tone/size props
2001
+ - [ ] Individual imports (not barrel imports)
2002
+ - [ ] ValidatedInput for form validation
2003
+ - [ ] Motion components for animations
2004
+ - [ ] DataTable for complex data operations
2005
+
2006
+ ### ⚡ **Success Factors** (High Quality Code)
2007
+ - **Consistency**: Uniform patterns across files
2008
+ - **Documentation**: Clear headers and comments
2009
+ - **Semantic Colors**: Theme-compatible styling
2010
+ - **Type Safety**: Proper TypeScript usage
2011
+ - **Performance**: Optimized imports for tree-shaking
2012
+ - **Validation**: Built-in form validation
2013
+ - **Animation**: Smooth, performant CSS animations
2014
+ - **Data Management**: Professional table features
2015
+
2016
+ ---
2017
+
2018
+ ## ✅ SUCCESS CHECKLIST (UPDATED)
2019
+
2020
+ ### Required Setup
2021
+ - [ ] `import '@bloomneo/uikit/styles'` in root file
2022
+ - [ ] ThemeProvider setup in `main.tsx` (automatically included in templates)
2023
+ - [ ] Choose correct layout: AdminLayout/PageLayout/AuthLayout/BlankLayout/PopupLayout
2024
+
2025
+ ### Component Patterns
2026
+ - [ ] Use compound pattern for AdminLayout & PageLayout (with .Header, .Content, etc.)
2027
+ - [ ] Use single pattern for AuthLayout, BlankLayout & PopupLayout (direct children)
2028
+ - [ ] Set appropriate scheme, tone, size props on all layouts
2029
+
2030
+ ### NEW: Enhanced Components
2031
+ - [ ] Use ValidatedInput for forms requiring validation
2032
+ - [ ] Use Motion/Reveal/Hover for animations
2033
+ - [ ] Use DataTable for complex data operations
2034
+ - [ ] Use LoadingSpinner for loading states
2035
+ - [ ] Use FormActions for consistent form buttons
2036
+
2037
+ ### Styling
2038
+ - [ ] Use ONLY semantic colors (bg-background, text-foreground, border-border)
2039
+ - [ ] NEVER use hardcoded colors (bg-white, text-black, border-gray-200)
2040
+ - [ ] Apply semantic classes to all UI components
2041
+
2042
+ ### Navigation & Data
2043
+ - [ ] Structure navigation with required key + label properties
2044
+ - [ ] Configure DataTable columns with proper types and features
2045
+ - [ ] Implement onNavigate handler for routing integration
2046
+ - [ ] Use appropriate animation presets for user experience
2047
+
2048
+ ### Integration & Testing
2049
+ - [ ] Connect to your routing system (React Router, Next.js, etc.)
2050
+ - [ ] Test form validation with ValidatedInput components
2051
+ - [ ] Test DataTable sorting, filtering, and pagination
2052
+ - [ ] Test animations and loading states
2053
+ - [ ] Verify responsive behavior on mobile/desktop
2054
+
2055
+ Following this complete guide ensures 100% successful UIKit implementation with all new enhanced components.