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