@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,148 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Link } from 'react-router-dom';
|
|
3
|
+
import { Button } from '@bloomneo/uikit/button';
|
|
4
|
+
import { AuthLayout } from '@bloomneo/uikit/auth';
|
|
5
|
+
import { Eye, EyeOff, Mail, Lock, ArrowRight, Github } from 'lucide-react';
|
|
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
|
+
};
|
|
20
|
+
|
|
21
|
+
const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
22
|
+
const { name, value, type, checked } = e.target;
|
|
23
|
+
setFormData(prev => ({
|
|
24
|
+
...prev,
|
|
25
|
+
[name]: type === 'checkbox' ? checked : value
|
|
26
|
+
}));
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<AuthLayout
|
|
31
|
+
scheme="hero"
|
|
32
|
+
tone="clean"
|
|
33
|
+
size="md"
|
|
34
|
+
title="Welcome back"
|
|
35
|
+
subtitle="Sign in to your account to continue"
|
|
36
|
+
imageUrl="https://images.pexels.com/photos/9754/mountains-clouds-forest-fog.jpg"
|
|
37
|
+
imageAlt="Mountains with clouds and forest fog"
|
|
38
|
+
imageOverlay="dark"
|
|
39
|
+
>
|
|
40
|
+
<form onSubmit={handleSubmit} className="space-y-4">
|
|
41
|
+
{/* Email Field */}
|
|
42
|
+
<div className="space-y-2">
|
|
43
|
+
<label htmlFor="email" className="text-sm font-medium">
|
|
44
|
+
Email
|
|
45
|
+
</label>
|
|
46
|
+
<div className="relative">
|
|
47
|
+
<Mail className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
|
48
|
+
<input
|
|
49
|
+
id="email"
|
|
50
|
+
name="email"
|
|
51
|
+
type="email"
|
|
52
|
+
placeholder="Enter your email"
|
|
53
|
+
value={formData.email}
|
|
54
|
+
onChange={handleInputChange}
|
|
55
|
+
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"
|
|
56
|
+
required
|
|
57
|
+
/>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
{/* Password Field */}
|
|
62
|
+
<div className="space-y-2">
|
|
63
|
+
<label htmlFor="password" className="text-sm font-medium">
|
|
64
|
+
Password
|
|
65
|
+
</label>
|
|
66
|
+
<div className="relative">
|
|
67
|
+
<Lock className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
|
68
|
+
<input
|
|
69
|
+
id="password"
|
|
70
|
+
name="password"
|
|
71
|
+
type={showPassword ? 'text' : 'password'}
|
|
72
|
+
placeholder="Enter your password"
|
|
73
|
+
value={formData.password}
|
|
74
|
+
onChange={handleInputChange}
|
|
75
|
+
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"
|
|
76
|
+
required
|
|
77
|
+
/>
|
|
78
|
+
<Button
|
|
79
|
+
type="button"
|
|
80
|
+
variant="ghost"
|
|
81
|
+
size="sm"
|
|
82
|
+
className="absolute right-1 top-1 h-8 w-8 p-0"
|
|
83
|
+
onClick={() => setShowPassword(!showPassword)}
|
|
84
|
+
>
|
|
85
|
+
{showPassword ? <EyeOff className="h-4 w-4" /> : <Eye className="h-4 w-4" />}
|
|
86
|
+
</Button>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
|
|
90
|
+
{/* Remember Me & Forgot Password */}
|
|
91
|
+
<div className="flex items-center justify-between">
|
|
92
|
+
<div className="flex items-center space-x-2">
|
|
93
|
+
<input
|
|
94
|
+
id="rememberMe"
|
|
95
|
+
name="rememberMe"
|
|
96
|
+
type="checkbox"
|
|
97
|
+
checked={formData.rememberMe}
|
|
98
|
+
onChange={handleInputChange}
|
|
99
|
+
className="h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary"
|
|
100
|
+
/>
|
|
101
|
+
<label htmlFor="rememberMe" className="text-sm">
|
|
102
|
+
Remember me
|
|
103
|
+
</label>
|
|
104
|
+
</div>
|
|
105
|
+
<Button variant="link" size="sm" className="px-0">
|
|
106
|
+
Forgot password?
|
|
107
|
+
</Button>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
{/* Submit Button */}
|
|
111
|
+
<Button type="submit" className="w-full">
|
|
112
|
+
Sign in
|
|
113
|
+
<ArrowRight className="ml-2 h-4 w-4" />
|
|
114
|
+
</Button>
|
|
115
|
+
</form>
|
|
116
|
+
|
|
117
|
+
{/* Divider */}
|
|
118
|
+
<div className="relative">
|
|
119
|
+
<div className="absolute inset-0 flex items-center">
|
|
120
|
+
<span className="w-full border-t" />
|
|
121
|
+
</div>
|
|
122
|
+
<div className="relative flex justify-center text-xs uppercase">
|
|
123
|
+
<span className="bg-background px-2 text-muted-foreground">
|
|
124
|
+
Or continue with
|
|
125
|
+
</span>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
{/* Social Login */}
|
|
130
|
+
<Button variant="outline" className="w-full">
|
|
131
|
+
<Github className="mr-2 h-4 w-4" />
|
|
132
|
+
Continue with GitHub
|
|
133
|
+
</Button>
|
|
134
|
+
|
|
135
|
+
{/* Sign Up Link */}
|
|
136
|
+
<div className="text-center">
|
|
137
|
+
<p className="text-sm text-muted-foreground">
|
|
138
|
+
Don't have an account?{' '}
|
|
139
|
+
<Link to="/dashboard" className="font-medium text-primary hover:underline">
|
|
140
|
+
Sign up
|
|
141
|
+
</Link>
|
|
142
|
+
</p>
|
|
143
|
+
</div>
|
|
144
|
+
</AuthLayout>
|
|
145
|
+
);
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
export default LoginPage;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Button } from '@bloomneo/uikit/button';
|
|
3
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@bloomneo/uikit/card';
|
|
4
|
+
import { useTheme } from '@bloomneo/uikit/theme-provider';
|
|
5
|
+
import { Palette, Sun, Moon, Sparkles } from 'lucide-react';
|
|
6
|
+
import { SEO } from '../components';
|
|
7
|
+
|
|
8
|
+
export const ThemesPage: React.FC = () => {
|
|
9
|
+
const { theme, mode, setTheme, availableThemes, toggleMode } = useTheme();
|
|
10
|
+
|
|
11
|
+
const themeDetails = {
|
|
12
|
+
base: {
|
|
13
|
+
description: 'Clean default configuration showcasing the base system with Inter typography',
|
|
14
|
+
features: ['Inter font family', 'Neutral color palette', 'Clean and minimal design', 'Perfect for business apps'],
|
|
15
|
+
color: 'from-gray-400 to-gray-600'
|
|
16
|
+
},
|
|
17
|
+
elegant: {
|
|
18
|
+
description: 'Fresh sky blue theme with clean design and modern aesthetics',
|
|
19
|
+
features: ['Sky blue primary colors', 'Elegant typography', 'Fresh and modern', 'Great for creative projects'],
|
|
20
|
+
color: 'from-sky-400 to-blue-600'
|
|
21
|
+
},
|
|
22
|
+
metro: {
|
|
23
|
+
description: 'Dark teal theme with bright yellow accents for bold interfaces',
|
|
24
|
+
features: ['Dark teal foundation', 'Bright yellow accents', 'High contrast design', 'Perfect for tech platforms'],
|
|
25
|
+
color: 'from-teal-500 to-yellow-500'
|
|
26
|
+
},
|
|
27
|
+
studio: {
|
|
28
|
+
description: 'Sophisticated neutral theme with golden accents for premium feel',
|
|
29
|
+
features: ['Warm neutral tones', 'Golden accent colors', 'Professional appearance', 'Ideal for portfolios'],
|
|
30
|
+
color: 'from-amber-400 to-orange-600'
|
|
31
|
+
},
|
|
32
|
+
vivid: {
|
|
33
|
+
description: 'Premium cursive theme with sophisticated typography for luxury brands',
|
|
34
|
+
features: ['Cursive typography', 'Rich color palette', 'Luxury brand feeling', 'High-end aesthetics'],
|
|
35
|
+
color: 'from-purple-500 to-pink-600'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<>
|
|
41
|
+
<SEO
|
|
42
|
+
title="Themes - UIKit Multi-Page Demo"
|
|
43
|
+
description="Interactive theme switching with OKLCH color science and comprehensive design tokens"
|
|
44
|
+
/>
|
|
45
|
+
<div className="space-y-8">
|
|
46
|
+
<div className="text-center space-y-4">
|
|
47
|
+
<h1 className="voila-heading text-4xl">Theme System</h1>
|
|
48
|
+
<p className="voila-subheading text-muted-foreground max-w-3xl mx-auto">
|
|
49
|
+
Interactive theme switching with OKLCH color science and comprehensive design tokens
|
|
50
|
+
</p>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
{/* Available Themes */}
|
|
55
|
+
<div className="space-y-6">
|
|
56
|
+
<h2 className="text-2xl font-bold text-center">Available Themes</h2>
|
|
57
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-6">
|
|
58
|
+
{availableThemes.map(themeId => {
|
|
59
|
+
const details = themeDetails[themeId as keyof typeof themeDetails];
|
|
60
|
+
const isActive = theme === themeId;
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<Card
|
|
64
|
+
key={themeId}
|
|
65
|
+
className={`border-2 transition-all duration-200 hover:shadow-lg ${
|
|
66
|
+
isActive ? 'ring-2 ring-primary border-primary/50 shadow-lg' : 'hover:border-primary/30'
|
|
67
|
+
}`}
|
|
68
|
+
>
|
|
69
|
+
<CardHeader>
|
|
70
|
+
<div className="flex items-center justify-between">
|
|
71
|
+
<CardTitle className="text-lg capitalize flex items-center gap-2">
|
|
72
|
+
{isActive && <Sparkles className="h-4 w-4 text-primary" />}
|
|
73
|
+
{themeId}
|
|
74
|
+
</CardTitle>
|
|
75
|
+
{isActive && <div className="text-xs bg-primary text-primary-foreground px-2 py-1 rounded-full">Active</div>}
|
|
76
|
+
</div>
|
|
77
|
+
<CardDescription className="text-sm">
|
|
78
|
+
{details?.description}
|
|
79
|
+
</CardDescription>
|
|
80
|
+
</CardHeader>
|
|
81
|
+
<CardContent className="space-y-4">
|
|
82
|
+
{/* Theme preview gradient */}
|
|
83
|
+
<div className={` rounded-lg bg-gradient-to-r ${details?.color} opacity-80`} />
|
|
84
|
+
|
|
85
|
+
{/* Features */}
|
|
86
|
+
<ul className="text-sm space-y-1 text-muted-foreground">
|
|
87
|
+
{details?.features.map((feature, index) => (
|
|
88
|
+
<li key={index}>• {feature}</li>
|
|
89
|
+
))}
|
|
90
|
+
</ul>
|
|
91
|
+
|
|
92
|
+
<Button
|
|
93
|
+
onClick={() => setTheme(themeId as any)}
|
|
94
|
+
variant={isActive ? 'default' : 'outline'}
|
|
95
|
+
className="w-full"
|
|
96
|
+
disabled={isActive}
|
|
97
|
+
>
|
|
98
|
+
{isActive ? 'Currently Active' : 'Apply Theme'}
|
|
99
|
+
</Button>
|
|
100
|
+
</CardContent>
|
|
101
|
+
</Card>
|
|
102
|
+
);
|
|
103
|
+
})}
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
{/* Current Theme Preview */}
|
|
109
|
+
<Card className="border-2 border-primary/20">
|
|
110
|
+
<CardHeader>
|
|
111
|
+
<CardTitle className="flex items-center gap-2">
|
|
112
|
+
<Palette className="h-5 w-5" />
|
|
113
|
+
Current Theme: {theme.charAt(0).toUpperCase() + theme.slice(1)}
|
|
114
|
+
</CardTitle>
|
|
115
|
+
<CardDescription>
|
|
116
|
+
{themeDetails[theme as keyof typeof themeDetails]?.description}
|
|
117
|
+
</CardDescription>
|
|
118
|
+
</CardHeader>
|
|
119
|
+
<CardContent>
|
|
120
|
+
<div className="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6">
|
|
121
|
+
<div className="bg-primary text-primary-foreground p-4 rounded-lg text-center shadow-lg">
|
|
122
|
+
<div className="text-lg font-bold">Primary</div>
|
|
123
|
+
<div className="text-sm opacity-90 mt-1">Brand color</div>
|
|
124
|
+
</div>
|
|
125
|
+
<div className="bg-secondary text-secondary-foreground p-4 rounded-lg text-center shadow-lg">
|
|
126
|
+
<div className="text-lg font-bold">Secondary</div>
|
|
127
|
+
<div className="text-sm opacity-90 mt-1">Supporting</div>
|
|
128
|
+
</div>
|
|
129
|
+
<div className="bg-accent text-accent-foreground p-4 rounded-lg text-center shadow-lg">
|
|
130
|
+
<div className="text-lg font-bold">Accent</div>
|
|
131
|
+
<div className="text-sm opacity-90 mt-1">Highlights</div>
|
|
132
|
+
</div>
|
|
133
|
+
<div className="bg-muted text-muted-foreground p-4 rounded-lg text-center shadow-lg border">
|
|
134
|
+
<div className="text-lg font-bold">Muted</div>
|
|
135
|
+
<div className="text-sm opacity-90 mt-1">Subtle</div>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<div className="flex items-center justify-between p-4 bg-muted/30 rounded-lg">
|
|
140
|
+
<div className="flex items-center gap-3">
|
|
141
|
+
{mode === 'dark' ? <Moon className="h-5 w-5" /> : <Sun className="h-5 w-5" />}
|
|
142
|
+
<span className="font-medium">
|
|
143
|
+
{mode === 'dark' ? 'Dark Mode' : 'Light Mode'}
|
|
144
|
+
</span>
|
|
145
|
+
</div>
|
|
146
|
+
<Button onClick={toggleMode} variant="outline" size="sm">
|
|
147
|
+
{mode === 'dark' ? <Sun className="h-4 w-4 mr-2" /> : <Moon className="h-4 w-4 mr-2" />}
|
|
148
|
+
Switch to {mode === 'dark' ? 'Light' : 'Dark'}
|
|
149
|
+
</Button>
|
|
150
|
+
</div>
|
|
151
|
+
</CardContent>
|
|
152
|
+
</Card>
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
{/* Color Science Information */}
|
|
157
|
+
<Card>
|
|
158
|
+
<CardHeader>
|
|
159
|
+
<CardTitle className="flex items-center gap-2">
|
|
160
|
+
<div className="w-8 h-8 bg-gradient-to-br from-red-400 via-yellow-400 to-blue-400 rounded-full" />
|
|
161
|
+
OKLCH Color Science
|
|
162
|
+
</CardTitle>
|
|
163
|
+
<CardDescription>
|
|
164
|
+
UIKit uses the OKLCH color space for perceptually uniform colors and better accessibility
|
|
165
|
+
</CardDescription>
|
|
166
|
+
</CardHeader>
|
|
167
|
+
<CardContent className="space-y-4">
|
|
168
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 text-sm">
|
|
169
|
+
<div className="p-4 bg-muted/50 rounded-lg">
|
|
170
|
+
<div className="font-semibold mb-2">Perceptual Uniformity</div>
|
|
171
|
+
<div className="text-muted-foreground">
|
|
172
|
+
Colors with the same lightness appear equally bright to the human eye
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
<div className="p-4 bg-muted/50 rounded-lg">
|
|
176
|
+
<div className="font-semibold mb-2">Better Accessibility</div>
|
|
177
|
+
<div className="text-muted-foreground">
|
|
178
|
+
Improved contrast ratios and color differentiation for accessibility
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
<div className="p-4 bg-muted/50 rounded-lg">
|
|
182
|
+
<div className="font-semibold mb-2">Future-Proof</div>
|
|
183
|
+
<div className="text-muted-foreground">
|
|
184
|
+
Native browser support in modern browsers with graceful fallbacks
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
<div className="space-y-4">
|
|
190
|
+
<h4 className="font-semibold">Chart Color Palette</h4>
|
|
191
|
+
<div className="grid grid-cols-5 gap-3">
|
|
192
|
+
{[1, 2, 3, 4, 5].map(i => (
|
|
193
|
+
<div key={i} className="text-center">
|
|
194
|
+
<div className={`w-full h-16 rounded-lg mb-2 bg-chart${i} shadow-sm`} />
|
|
195
|
+
<div className="text-xs text-muted-foreground font-medium">chart{i}</div>
|
|
196
|
+
</div>
|
|
197
|
+
))}
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</CardContent>
|
|
201
|
+
</Card>
|
|
202
|
+
</div>
|
|
203
|
+
</>
|
|
204
|
+
);
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
export default ThemesPage;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Routes, Route } from 'react-router-dom';
|
|
3
|
+
|
|
4
|
+
// Import your pages
|
|
5
|
+
import Home from './pages/Home';
|
|
6
|
+
import Components from './pages/Components';
|
|
7
|
+
import Themes from './pages/Themes';
|
|
8
|
+
import About from './pages/About';
|
|
9
|
+
import Contact from './pages/Contact';
|
|
10
|
+
import Login from './pages/Login';
|
|
11
|
+
import Dashboard from './pages/Dashboard';
|
|
12
|
+
import ErrorPage from './pages/ErrorPage';
|
|
13
|
+
|
|
14
|
+
// Simple route configuration - users can easily add/remove routes here
|
|
15
|
+
export const routes = [
|
|
16
|
+
{ path: '/', component: Home },
|
|
17
|
+
{ path: '/components', component: Components },
|
|
18
|
+
{ path: '/themes', component: Themes },
|
|
19
|
+
{ path: '/about', component: About },
|
|
20
|
+
{ path: '/contact', component: Contact },
|
|
21
|
+
{ path: '/login', component: Login },
|
|
22
|
+
{ path: '/dashboard', component: Dashboard },
|
|
23
|
+
{ path: '/error', component: ErrorPage },
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
// Simple router - just routes, nothing else
|
|
27
|
+
export const AppRouter: React.FC = () => (
|
|
28
|
+
<Routes>
|
|
29
|
+
{routes.map(({ path, component: Component }) => (
|
|
30
|
+
<Route key={path} path={path} element={<Component />} />
|
|
31
|
+
))}
|
|
32
|
+
<Route path="*" element={<ErrorPage />} />
|
|
33
|
+
</Routes>
|
|
34
|
+
);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"useDefineForClassFields": true,
|
|
5
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
|
|
9
|
+
/* Bundler mode */
|
|
10
|
+
"moduleResolution": "bundler",
|
|
11
|
+
"allowImportingTsExtensions": true,
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"noEmit": true,
|
|
15
|
+
"jsx": "react-jsx",
|
|
16
|
+
|
|
17
|
+
/* Linting */
|
|
18
|
+
"strict": true,
|
|
19
|
+
"noUnusedLocals": true,
|
|
20
|
+
"noUnusedParameters": true,
|
|
21
|
+
"noFallthroughCasesInSwitch": true,
|
|
22
|
+
|
|
23
|
+
/* Path mapping */
|
|
24
|
+
"baseUrl": ".",
|
|
25
|
+
"paths": {
|
|
26
|
+
"@/*": ["./src/*"]
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"include": ["src"]
|
|
30
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["ES2023"],
|
|
5
|
+
"module": "ESNext",
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
|
|
8
|
+
/* Bundler mode */
|
|
9
|
+
"moduleResolution": "bundler",
|
|
10
|
+
"allowImportingTsExtensions": true,
|
|
11
|
+
"isolatedModules": true,
|
|
12
|
+
"moduleDetection": "force",
|
|
13
|
+
"noEmit": true,
|
|
14
|
+
|
|
15
|
+
/* Linting */
|
|
16
|
+
"strict": true,
|
|
17
|
+
"noUnusedLocals": true,
|
|
18
|
+
"noUnusedParameters": true,
|
|
19
|
+
"noFallthroughCasesInSwitch": true
|
|
20
|
+
},
|
|
21
|
+
"include": ["vite.config.ts"]
|
|
22
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { defineConfig } from 'vite'
|
|
2
|
+
import react from '@vitejs/plugin-react'
|
|
3
|
+
import path from 'path'
|
|
4
|
+
import tailwindcss from '@tailwindcss/vite'
|
|
5
|
+
import { fileURLToPath } from 'url'
|
|
6
|
+
|
|
7
|
+
// Get __dirname equivalent in ESM
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
9
|
+
const __dirname = path.dirname(__filename)
|
|
10
|
+
|
|
11
|
+
// https://vitejs.dev/config/
|
|
12
|
+
export default defineConfig({
|
|
13
|
+
// base: '/', // Uncomment this line to make the default asset loading to '/' rather than relative paths
|
|
14
|
+
plugins: [react(), tailwindcss()],
|
|
15
|
+
resolve: {
|
|
16
|
+
alias: {
|
|
17
|
+
"@": path.resolve(__dirname, "./src"),
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
server: {
|
|
21
|
+
port: 5173,
|
|
22
|
+
host: true,
|
|
23
|
+
},
|
|
24
|
+
build: {
|
|
25
|
+
outDir: 'dist',
|
|
26
|
+
sourcemap: true,
|
|
27
|
+
rollupOptions: {
|
|
28
|
+
output: {
|
|
29
|
+
manualChunks: {
|
|
30
|
+
vendor: ['react', 'react-dom', 'react-router-dom'],
|
|
31
|
+
uikit: ['@bloomneo/uikit']
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
})
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
**A modern React application built with @bloomneo/uikit**
|
|
4
|
+
|
|
5
|
+
## 🚀 Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Install dependencies
|
|
9
|
+
npm install
|
|
10
|
+
|
|
11
|
+
# Start development server
|
|
12
|
+
npm run dev
|
|
13
|
+
|
|
14
|
+
# Build for production
|
|
15
|
+
npm run build
|
|
16
|
+
|
|
17
|
+
# Preview production build
|
|
18
|
+
npm run preview
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 🎨 UIKit Features
|
|
22
|
+
|
|
23
|
+
This project is built with [@bloomneo/uikit](https://github.com/bloomneo/uikit) - a complete React UI framework with:
|
|
24
|
+
|
|
25
|
+
- **37 UI Components** - Forms, tables, navigation, overlays, and more
|
|
26
|
+
- **5 Professional Themes** - Base, Elegant, Metro, Studio, Vivid
|
|
27
|
+
- **5 Layout Systems** - Admin, Auth, Page, Popup, Blank layouts
|
|
28
|
+
- **ScrollToTop Navigation** - Automatic scroll-to-top on route changes
|
|
29
|
+
- **Theme System** - Light/dark mode with semantic OKLCH colors
|
|
30
|
+
- **TypeScript Support** - Full type safety out of the box
|
|
31
|
+
|
|
32
|
+
## 🏗️ Project Structure
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
{{PROJECT_NAME}}/
|
|
36
|
+
├── src/
|
|
37
|
+
│ ├── App.tsx # Main application component
|
|
38
|
+
│ ├── main.tsx # Application entry point
|
|
39
|
+
│ ├── index.css # Tailwind CSS v4+ and UIKit styles
|
|
40
|
+
│ └── utils/
|
|
41
|
+
│ └── asset.ts # Asset utility for deployment paths
|
|
42
|
+
├── public/ # Static assets
|
|
43
|
+
├── package.json # Dependencies and scripts
|
|
44
|
+
└── README.md # This file
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Single Template Features:**
|
|
48
|
+
- All components in single `App.tsx` file - perfect for demos and prototypes
|
|
49
|
+
- Complete UIKit theme showcase with interactive theme switcher
|
|
50
|
+
- Built-in asset utility for deployment flexibility
|
|
51
|
+
|
|
52
|
+
## 🎯 Development Commands
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm run dev # Start development server (localhost:5173)
|
|
56
|
+
npm run build # Build for production
|
|
57
|
+
npm run preview # Preview production build
|
|
58
|
+
npm run deploy:gh # Deploy to GitHub Pages
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 🎨 Theme Customization
|
|
62
|
+
|
|
63
|
+
Change your theme by updating the ThemeProvider in `src/App.tsx`:
|
|
64
|
+
|
|
65
|
+
```jsx
|
|
66
|
+
<ThemeProvider theme="elegant" mode="light">
|
|
67
|
+
<App />
|
|
68
|
+
</ThemeProvider>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Available themes: `base` | `elegant` | `metro` | `studio` | `vivid`
|
|
72
|
+
Available modes: `light` | `dark`
|
|
73
|
+
|
|
74
|
+
## 📦 Built With
|
|
75
|
+
|
|
76
|
+
- **[React 19](https://react.dev)** - UI library
|
|
77
|
+
- **[TypeScript](https://typescriptlang.org)** - Type safety
|
|
78
|
+
- **[Vite](https://vitejs.dev)** - Build tool and dev server
|
|
79
|
+
- **[Tailwind CSS v4+](https://tailwindcss.com)** - Utility-first CSS framework
|
|
80
|
+
- **[@bloomneo/uikit](https://github.com/bloomneo/uikit)** - UI components and layouts
|
|
81
|
+
- **[Lucide React](https://lucide.dev)** - Icon library
|
|
82
|
+
|
|
83
|
+
## 🎨 Component Usage
|
|
84
|
+
|
|
85
|
+
Import UIKit components individually for optimal tree-shaking:
|
|
86
|
+
|
|
87
|
+
```jsx
|
|
88
|
+
import { Button } from '@bloomneo/uikit/button';
|
|
89
|
+
import { Card, CardContent, CardHeader } from '@bloomneo/uikit/card';
|
|
90
|
+
import { asset } from './utils/asset';
|
|
91
|
+
|
|
92
|
+
function MyComponent() {
|
|
93
|
+
return (
|
|
94
|
+
<Card className="bg-card border-border">
|
|
95
|
+
<CardHeader>
|
|
96
|
+
<h2 className="text-foreground">Welcome</h2>
|
|
97
|
+
</CardHeader>
|
|
98
|
+
<CardContent>
|
|
99
|
+
<img src={asset('/images/logo.png')} alt="Logo" />
|
|
100
|
+
<Button className="bg-primary text-primary-foreground">
|
|
101
|
+
Submit
|
|
102
|
+
</Button>
|
|
103
|
+
</CardContent>
|
|
104
|
+
</Card>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## 🌐 Asset Management
|
|
110
|
+
|
|
111
|
+
Use the included asset utility for deployment-friendly paths:
|
|
112
|
+
|
|
113
|
+
```jsx
|
|
114
|
+
import { asset } from './utils/asset';
|
|
115
|
+
|
|
116
|
+
// Works in both development and production deployments
|
|
117
|
+
<img src={asset('/images/hero.jpg')} alt="Hero" />
|
|
118
|
+
<link rel="icon" href={asset('/favicon.ico')} />
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## 📚 Resources
|
|
122
|
+
|
|
123
|
+
- **[UIKit Documentation](https://docs.anthropic.com/en/docs/claude-code/claude_code_docs_map.md)** - Complete component reference
|
|
124
|
+
- **[UIKit LLM Guide](https://github.com/bloomneo/uikit/blob/main/docs/UIKIT_LLM_GUIDE.md)** - Comprehensive usage guide
|
|
125
|
+
- **[React Documentation](https://react.dev)** - React framework guide
|
|
126
|
+
- **[Vite Documentation](https://vitejs.dev)** - Build tool documentation
|
|
127
|
+
- **[Tailwind CSS v4+](https://tailwindcss.com)** - Utility-first CSS framework
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
**Built with ❤️ using [@bloomneo/uikit](https://github.com/bloomneo/uikit)** ✨
|