Repository files navigation

Logo

Core

Contains all of my personal customized components using Tailwind CSS and favorite UI library, custom hooks and utilities for rapid frontend development.

If you are interested on using this, please read the following:
  • This is a personal project of mine and I do not recommend using it for your production projects.
  • Whatever you see in the Storybook are all available for use. Just follow the instructions properly on how to use them.

Major Requirements

Your app should have the following:

  • React v19.
  • Tailwind CSS v4.

❓ How to use

You can import components, hooks, and utilities right away using the following methods:

🚀 As Microfrontend (Recommended)

  1. Create your own microfrontend app.
  1. Setup remotes in your Microfrontend project.
  • If you used Jack Herrington's CLI, check if you started your App with Webpack (webpack.config.js) or Rspack (rspack.config.js).
  • Find the plugin ModuleFederationPlugin and add the remoteEntry of this project.
 plugins: [
new ModuleFederationPlugin({
..... other codes
...
remotes: {
"@core":
"core@https://core.thecodebit.online/remoteEntry.js",
},
...
..... other codes
})
],
  1. Hooray! 🎉 You can now use all the components, hooks, and utilities present here. See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@core/components"; // Core Components
import {
Button,
Badge,
} from "@core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@core/lib"; // Core Utilities
import { useIsMobile } from "@core/hooks"; // Core Hooks
import "@core/styles";
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. For Core components, they are all client-side components. For shadcn/ui components, please refer to the shadcn/ui documentation.
  2. Find all components, hooks, and utils in the Storybook.
  3. If you're still unsure what to do, refer to this example repo: https://github.com/jeffreybernadas/microfrontend-cart

📦 As NPM Package

Note: React v19 and Tailwind CSS v4 are required.

  1. Install package.
npm install @bernz322/core
  1. Inside your index.css file, copy and paste the import code below at the top of the file.
@import "tailwindcss";
@import "@bernz322/core/styles/index.css";
  1. Hooray! 🎉 You are now set! See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@bernz322/core/components"; // Core Components
import {
Button,
Badge,
} from "@bernz322/core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@bernz322/core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@bernz322/core/lib"; // Core Utilities
import { useIsMobile } from "@bernz322/core/hooks"; // Core Hooks
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. You can also use both as microfrontend and NPM package. Just make sure to import the the stuffs you need correctly. However, I don't recommend using both at the same time.

Requirements

  • Node.js 20+ and npm

Getting started

Run the following command on your local environment:

git clone https://github.com/jeffreybernadas/core my-project-name
cd my-project-name
npm install

Note: I always update all dependencies whenever I have the time. Then run the storybook in development mode to see components by running:

npm run storybook

Open http://localhost:6006 with your favorite browser to see the storybook.

Adding components

Create a new component file inside "src/components" directory and export it in "src/index.ts". Note: This is not limited to components only, you can add React Hooks, Utility Functions, and more to it.

To check your created component, create a story of it and run storybook.

Tests

You can execute testing by running:

npm run test

Linting

For linting and checking code quality and problems, execute:

npm run lint

To fix errors, execute:

npm run lint:fix

Formatting

For formatting codes, execute:

npm run format

Build

For building your library, execute:

npm run build

This will create a build folder containing index.esm.js, index.cjs.js and typings folder for declarations.

Deployment of storybook

Deployment of Storybook is automated via Github Actions. You can check storybook.yml on how it's done.

Publishing to NPM

Same with Storybook deployment, publishing to NPM is also automated. Just make sure to add NPM_TOKEN in your repositories "Secrets and variables" > "Actions".

About

Personalized library/ microfrontend app that contains custom hooks, custom components, utilities, and more that can be consumed as Module Federation or NPM package

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Logo

Core

Contains all of my personal customized components using Tailwind CSS and favorite UI library, custom hooks and utilities for rapid frontend development.

If you are interested on using this, please read the following:
  • This is a personal project of mine and I do not recommend using it for your production projects.
  • Whatever you see in the Storybook are all available for use. Just follow the instructions properly on how to use them.

Major Requirements

Your app should have the following:

  • React v19.
  • Tailwind CSS v4.

❓ How to use

You can import components, hooks, and utilities right away using the following methods:

🚀 As Microfrontend (Recommended)

  1. Create your own microfrontend app.
  1. Setup remotes in your Microfrontend project.
  • If you used Jack Herrington's CLI, check if you started your App with Webpack (webpack.config.js) or Rspack (rspack.config.js).
  • Find the plugin ModuleFederationPlugin and add the remoteEntry of this project.
 plugins: [
new ModuleFederationPlugin({
..... other codes
...
remotes: {
"@core":
"core@https://core.thecodebit.online/remoteEntry.js",
},
...
..... other codes
})
],
  1. Hooray! 🎉 You can now use all the components, hooks, and utilities present here. See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@core/components"; // Core Components
import {
Button,
Badge,
} from "@core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@core/lib"; // Core Utilities
import { useIsMobile } from "@core/hooks"; // Core Hooks
import "@core/styles";
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. For Core components, they are all client-side components. For shadcn/ui components, please refer to the shadcn/ui documentation.
  2. Find all components, hooks, and utils in the Storybook.
  3. If you're still unsure what to do, refer to this example repo: https://github.com/jeffreybernadas/microfrontend-cart

📦 As NPM Package

Note: React v19 and Tailwind CSS v4 are required.

  1. Install package.
npm install @bernz322/core
  1. Inside your index.css file, copy and paste the import code below at the top of the file.
@import "tailwindcss";
@import "@bernz322/core/styles/index.css";
  1. Hooray! 🎉 You are now set! See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@bernz322/core/components"; // Core Components
import {
Button,
Badge,
} from "@bernz322/core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@bernz322/core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@bernz322/core/lib"; // Core Utilities
import { useIsMobile } from "@bernz322/core/hooks"; // Core Hooks
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. You can also use both as microfrontend and NPM package. Just make sure to import the the stuffs you need correctly. However, I don't recommend using both at the same time.

Requirements

  • Node.js 20+ and npm

Getting started

Run the following command on your local environment:

git clone https://github.com/jeffreybernadas/core my-project-name
cd my-project-name
npm install

Note: I always update all dependencies whenever I have the time. Then run the storybook in development mode to see components by running:

npm run storybook

Open http://localhost:6006 with your favorite browser to see the storybook.

Adding components

Create a new component file inside "src/components" directory and export it in "src/index.ts". Note: This is not limited to components only, you can add React Hooks, Utility Functions, and more to it.

To check your created component, create a story of it and run storybook.

Tests

You can execute testing by running:

npm run test

Linting

For linting and checking code quality and problems, execute:

npm run lint

To fix errors, execute:

npm run lint:fix

Formatting

For formatting codes, execute:

npm run format

Build

For building your library, execute:

npm run build

This will create a build folder containing index.esm.js, index.cjs.js and typings folder for declarations.

Deployment of storybook

Deployment of Storybook is automated via Github Actions. You can check storybook.yml on how it's done.

Publishing to NPM

Same with Storybook deployment, publishing to NPM is also automated. Just make sure to add NPM_TOKEN in your repositories "Secrets and variables" > "Actions".

About

Personalized library/ microfrontend app that contains custom hooks, custom components, utilities, and more that can be consumed as Module Federation or NPM package

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Logo

Core

Contains all of my personal customized components using Tailwind CSS and favorite UI library, custom hooks and utilities for rapid frontend development.

If you are interested on using this, please read the following:
  • This is a personal project of mine and I do not recommend using it for your production projects.
  • Whatever you see in the Storybook are all available for use. Just follow the instructions properly on how to use them.

Major Requirements

Your app should have the following:

  • React v19.
  • Tailwind CSS v4.

❓ How to use

You can import components, hooks, and utilities right away using the following methods:

🚀 As Microfrontend (Recommended)

  1. Create your own microfrontend app.
  1. Setup remotes in your Microfrontend project.
  • If you used Jack Herrington's CLI, check if you started your App with Webpack (webpack.config.js) or Rspack (rspack.config.js).
  • Find the plugin ModuleFederationPlugin and add the remoteEntry of this project.
 plugins: [
new ModuleFederationPlugin({
..... other codes
...
remotes: {
"@core":
"core@https://core.thecodebit.online/remoteEntry.js",
},
...
..... other codes
})
],
  1. Hooray! 🎉 You can now use all the components, hooks, and utilities present here. See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@core/components"; // Core Components
import {
Button,
Badge,
} from "@core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@core/lib"; // Core Utilities
import { useIsMobile } from "@core/hooks"; // Core Hooks
import "@core/styles";
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. For Core components, they are all client-side components. For shadcn/ui components, please refer to the shadcn/ui documentation.
  2. Find all components, hooks, and utils in the Storybook.
  3. If you're still unsure what to do, refer to this example repo: https://github.com/jeffreybernadas/microfrontend-cart

📦 As NPM Package

Note: React v19 and Tailwind CSS v4 are required.

  1. Install package.
npm install @bernz322/core
  1. Inside your index.css file, copy and paste the import code below at the top of the file.
@import "tailwindcss";
@import "@bernz322/core/styles/index.css";
  1. Hooray! 🎉 You are now set! See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@bernz322/core/components"; // Core Components
import {
Button,
Badge,
} from "@bernz322/core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@bernz322/core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@bernz322/core/lib"; // Core Utilities
import { useIsMobile } from "@bernz322/core/hooks"; // Core Hooks
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. You can also use both as microfrontend and NPM package. Just make sure to import the the stuffs you need correctly. However, I don't recommend using both at the same time.

Requirements

  • Node.js 20+ and npm

Getting started

Run the following command on your local environment:

git clone https://github.com/jeffreybernadas/core my-project-name
cd my-project-name
npm install

Note: I always update all dependencies whenever I have the time. Then run the storybook in development mode to see components by running:

npm run storybook

Open http://localhost:6006 with your favorite browser to see the storybook.

Adding components

Create a new component file inside "src/components" directory and export it in "src/index.ts". Note: This is not limited to components only, you can add React Hooks, Utility Functions, and more to it.

To check your created component, create a story of it and run storybook.

Tests

You can execute testing by running:

npm run test

Linting

For linting and checking code quality and problems, execute:

npm run lint

To fix errors, execute:

npm run lint:fix

Formatting

For formatting codes, execute:

npm run format

Build

For building your library, execute:

npm run build

This will create a build folder containing index.esm.js, index.cjs.js and typings folder for declarations.

Deployment of storybook

Deployment of Storybook is automated via Github Actions. You can check storybook.yml on how it's done.

Publishing to NPM

Same with Storybook deployment, publishing to NPM is also automated. Just make sure to add NPM_TOKEN in your repositories "Secrets and variables" > "Actions".

About

Personalized library/ microfrontend app that contains custom hooks, custom components, utilities, and more that can be consumed as Module Federation or NPM package

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Logo

Core

Contains all of my personal customized components using Tailwind CSS and favorite UI library, custom hooks and utilities for rapid frontend development.

If you are interested on using this, please read the following:
  • This is a personal project of mine and I do not recommend using it for your production projects.
  • Whatever you see in the Storybook are all available for use. Just follow the instructions properly on how to use them.

Major Requirements

Your app should have the following:

  • React v19.
  • Tailwind CSS v4.

❓ How to use

You can import components, hooks, and utilities right away using the following methods:

🚀 As Microfrontend (Recommended)

  1. Create your own microfrontend app.
  1. Setup remotes in your Microfrontend project.
  • If you used Jack Herrington's CLI, check if you started your App with Webpack (webpack.config.js) or Rspack (rspack.config.js).
  • Find the plugin ModuleFederationPlugin and add the remoteEntry of this project.
 plugins: [
new ModuleFederationPlugin({
..... other codes
...
remotes: {
"@core":
"core@https://core.thecodebit.online/remoteEntry.js",
},
...
..... other codes
})
],
  1. Hooray! 🎉 You can now use all the components, hooks, and utilities present here. See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@core/components"; // Core Components
import {
Button,
Badge,
} from "@core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@core/lib"; // Core Utilities
import { useIsMobile } from "@core/hooks"; // Core Hooks
import "@core/styles";
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. For Core components, they are all client-side components. For shadcn/ui components, please refer to the shadcn/ui documentation.
  2. Find all components, hooks, and utils in the Storybook.
  3. If you're still unsure what to do, refer to this example repo: https://github.com/jeffreybernadas/microfrontend-cart

📦 As NPM Package

Note: React v19 and Tailwind CSS v4 are required.

  1. Install package.
npm install @bernz322/core
  1. Inside your index.css file, copy and paste the import code below at the top of the file.
@import "tailwindcss";
@import "@bernz322/core/styles/index.css";
  1. Hooray! 🎉 You are now set! See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@bernz322/core/components"; // Core Components
import {
Button,
Badge,
} from "@bernz322/core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@bernz322/core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@bernz322/core/lib"; // Core Utilities
import { useIsMobile } from "@bernz322/core/hooks"; // Core Hooks
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. You can also use both as microfrontend and NPM package. Just make sure to import the the stuffs you need correctly. However, I don't recommend using both at the same time.

Requirements

  • Node.js 20+ and npm

Getting started

Run the following command on your local environment:

git clone https://github.com/jeffreybernadas/core my-project-name
cd my-project-name
npm install

Note: I always update all dependencies whenever I have the time. Then run the storybook in development mode to see components by running:

npm run storybook

Open http://localhost:6006 with your favorite browser to see the storybook.

Adding components

Create a new component file inside "src/components" directory and export it in "src/index.ts". Note: This is not limited to components only, you can add React Hooks, Utility Functions, and more to it.

To check your created component, create a story of it and run storybook.

Tests

You can execute testing by running:

npm run test

Linting

For linting and checking code quality and problems, execute:

npm run lint

To fix errors, execute:

npm run lint:fix

Formatting

For formatting codes, execute:

npm run format

Build

For building your library, execute:

npm run build

This will create a build folder containing index.esm.js, index.cjs.js and typings folder for declarations.

Deployment of storybook

Deployment of Storybook is automated via Github Actions. You can check storybook.yml on how it's done.

Publishing to NPM

Same with Storybook deployment, publishing to NPM is also automated. Just make sure to add NPM_TOKEN in your repositories "Secrets and variables" > "Actions".

About

Personalized library/ microfrontend app that contains custom hooks, custom components, utilities, and more that can be consumed as Module Federation or NPM package

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Logo

Core

Contains all of my personal customized components using Tailwind CSS and favorite UI library, custom hooks and utilities for rapid frontend development.

If you are interested on using this, please read the following:
  • This is a personal project of mine and I do not recommend using it for your production projects.
  • Whatever you see in the Storybook are all available for use. Just follow the instructions properly on how to use them.

Major Requirements

Your app should have the following:

  • React v19.
  • Tailwind CSS v4.

❓ How to use

You can import components, hooks, and utilities right away using the following methods:

🚀 As Microfrontend (Recommended)

  1. Create your own microfrontend app.
  1. Setup remotes in your Microfrontend project.
  • If you used Jack Herrington's CLI, check if you started your App with Webpack (webpack.config.js) or Rspack (rspack.config.js).
  • Find the plugin ModuleFederationPlugin and add the remoteEntry of this project.
 plugins: [
new ModuleFederationPlugin({
..... other codes
...
remotes: {
"@core":
"core@https://core.thecodebit.online/remoteEntry.js",
},
...
..... other codes
})
],
  1. Hooray! 🎉 You can now use all the components, hooks, and utilities present here. See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@core/components"; // Core Components
import {
Button,
Badge,
} from "@core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@core/lib"; // Core Utilities
import { useIsMobile } from "@core/hooks"; // Core Hooks
import "@core/styles";
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. For Core components, they are all client-side components. For shadcn/ui components, please refer to the shadcn/ui documentation.
  2. Find all components, hooks, and utils in the Storybook.
  3. If you're still unsure what to do, refer to this example repo: https://github.com/jeffreybernadas/microfrontend-cart

📦 As NPM Package

Note: React v19 and Tailwind CSS v4 are required.

  1. Install package.
npm install @bernz322/core
  1. Inside your index.css file, copy and paste the import code below at the top of the file.
@import "tailwindcss";
@import "@bernz322/core/styles/index.css";
  1. Hooray! 🎉 You are now set! See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@bernz322/core/components"; // Core Components
import {
Button,
Badge,
} from "@bernz322/core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@bernz322/core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@bernz322/core/lib"; // Core Utilities
import { useIsMobile } from "@bernz322/core/hooks"; // Core Hooks
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. You can also use both as microfrontend and NPM package. Just make sure to import the the stuffs you need correctly. However, I don't recommend using both at the same time.

Requirements

  • Node.js 20+ and npm

Getting started

Run the following command on your local environment:

git clone https://github.com/jeffreybernadas/core my-project-name
cd my-project-name
npm install

Note: I always update all dependencies whenever I have the time. Then run the storybook in development mode to see components by running:

npm run storybook

Open http://localhost:6006 with your favorite browser to see the storybook.

Adding components

Create a new component file inside "src/components" directory and export it in "src/index.ts". Note: This is not limited to components only, you can add React Hooks, Utility Functions, and more to it.

To check your created component, create a story of it and run storybook.

Tests

You can execute testing by running:

npm run test

Linting

For linting and checking code quality and problems, execute:

npm run lint

To fix errors, execute:

npm run lint:fix

Formatting

For formatting codes, execute:

npm run format

Build

For building your library, execute:

npm run build

This will create a build folder containing index.esm.js, index.cjs.js and typings folder for declarations.

Deployment of storybook

Deployment of Storybook is automated via Github Actions. You can check storybook.yml on how it's done.

Publishing to NPM

Same with Storybook deployment, publishing to NPM is also automated. Just make sure to add NPM_TOKEN in your repositories "Secrets and variables" > "Actions".

About

Personalized library/ microfrontend app that contains custom hooks, custom components, utilities, and more that can be consumed as Module Federation or NPM package

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Logo

Core

Contains all of my personal customized components using Tailwind CSS and favorite UI library, custom hooks and utilities for rapid frontend development.

If you are interested on using this, please read the following:
  • This is a personal project of mine and I do not recommend using it for your production projects.
  • Whatever you see in the Storybook are all available for use. Just follow the instructions properly on how to use them.

Major Requirements

Your app should have the following:

  • React v19.
  • Tailwind CSS v4.

❓ How to use

You can import components, hooks, and utilities right away using the following methods:

🚀 As Microfrontend (Recommended)

  1. Create your own microfrontend app.
  1. Setup remotes in your Microfrontend project.
  • If you used Jack Herrington's CLI, check if you started your App with Webpack (webpack.config.js) or Rspack (rspack.config.js).
  • Find the plugin ModuleFederationPlugin and add the remoteEntry of this project.
 plugins: [
new ModuleFederationPlugin({
..... other codes
...
remotes: {
"@core":
"core@https://core.thecodebit.online/remoteEntry.js",
},
...
..... other codes
})
],
  1. Hooray! 🎉 You can now use all the components, hooks, and utilities present here. See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@core/components"; // Core Components
import {
Button,
Badge,
} from "@core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@core/lib"; // Core Utilities
import { useIsMobile } from "@core/hooks"; // Core Hooks
import "@core/styles";
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. For Core components, they are all client-side components. For shadcn/ui components, please refer to the shadcn/ui documentation.
  2. Find all components, hooks, and utils in the Storybook.
  3. If you're still unsure what to do, refer to this example repo: https://github.com/jeffreybernadas/microfrontend-cart

📦 As NPM Package

Note: React v19 and Tailwind CSS v4 are required.

  1. Install package.
npm install @bernz322/core
  1. Inside your index.css file, copy and paste the import code below at the top of the file.
@import "tailwindcss";
@import "@bernz322/core/styles/index.css";
  1. Hooray! 🎉 You are now set! See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@bernz322/core/components"; // Core Components
import {
Button,
Badge,
} from "@bernz322/core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@bernz322/core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@bernz322/core/lib"; // Core Utilities
import { useIsMobile } from "@bernz322/core/hooks"; // Core Hooks
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. You can also use both as microfrontend and NPM package. Just make sure to import the the stuffs you need correctly. However, I don't recommend using both at the same time.

Requirements

  • Node.js 20+ and npm

Getting started

Run the following command on your local environment:

git clone https://github.com/jeffreybernadas/core my-project-name
cd my-project-name
npm install

Note: I always update all dependencies whenever I have the time. Then run the storybook in development mode to see components by running:

npm run storybook

Open http://localhost:6006 with your favorite browser to see the storybook.

Adding components

Create a new component file inside "src/components" directory and export it in "src/index.ts". Note: This is not limited to components only, you can add React Hooks, Utility Functions, and more to it.

To check your created component, create a story of it and run storybook.

Tests

You can execute testing by running:

npm run test

Linting

For linting and checking code quality and problems, execute:

npm run lint

To fix errors, execute:

npm run lint:fix

Formatting

For formatting codes, execute:

npm run format

Build

For building your library, execute:

npm run build

This will create a build folder containing index.esm.js, index.cjs.js and typings folder for declarations.

Deployment of storybook

Deployment of Storybook is automated via Github Actions. You can check storybook.yml on how it's done.

Publishing to NPM

Same with Storybook deployment, publishing to NPM is also automated. Just make sure to add NPM_TOKEN in your repositories "Secrets and variables" > "Actions".

About

Personalized library/ microfrontend app that contains custom hooks, custom components, utilities, and more that can be consumed as Module Federation or NPM package

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Logo

Core

Contains all of my personal customized components using Tailwind CSS and favorite UI library, custom hooks and utilities for rapid frontend development.

If you are interested on using this, please read the following:
  • This is a personal project of mine and I do not recommend using it for your production projects.
  • Whatever you see in the Storybook are all available for use. Just follow the instructions properly on how to use them.

Major Requirements

Your app should have the following:

  • React v19.
  • Tailwind CSS v4.

❓ How to use

You can import components, hooks, and utilities right away using the following methods:

🚀 As Microfrontend (Recommended)

  1. Create your own microfrontend app.
  1. Setup remotes in your Microfrontend project.
  • If you used Jack Herrington's CLI, check if you started your App with Webpack (webpack.config.js) or Rspack (rspack.config.js).
  • Find the plugin ModuleFederationPlugin and add the remoteEntry of this project.
 plugins: [
new ModuleFederationPlugin({
..... other codes
...
remotes: {
"@core":
"core@https://core.thecodebit.online/remoteEntry.js",
},
...
..... other codes
})
],
  1. Hooray! 🎉 You can now use all the components, hooks, and utilities present here. See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@core/components"; // Core Components
import {
Button,
Badge,
} from "@core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@core/lib"; // Core Utilities
import { useIsMobile } from "@core/hooks"; // Core Hooks
import "@core/styles";
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. For Core components, they are all client-side components. For shadcn/ui components, please refer to the shadcn/ui documentation.
  2. Find all components, hooks, and utils in the Storybook.
  3. If you're still unsure what to do, refer to this example repo: https://github.com/jeffreybernadas/microfrontend-cart

📦 As NPM Package

Note: React v19 and Tailwind CSS v4 are required.

  1. Install package.
npm install @bernz322/core
  1. Inside your index.css file, copy and paste the import code below at the top of the file.
@import "tailwindcss";
@import "@bernz322/core/styles/index.css";
  1. Hooray! 🎉 You are now set! See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@bernz322/core/components"; // Core Components
import {
Button,
Badge,
} from "@bernz322/core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@bernz322/core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@bernz322/core/lib"; // Core Utilities
import { useIsMobile } from "@bernz322/core/hooks"; // Core Hooks
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. You can also use both as microfrontend and NPM package. Just make sure to import the the stuffs you need correctly. However, I don't recommend using both at the same time.

Requirements

  • Node.js 20+ and npm

Getting started

Run the following command on your local environment:

git clone https://github.com/jeffreybernadas/core my-project-name
cd my-project-name
npm install

Note: I always update all dependencies whenever I have the time. Then run the storybook in development mode to see components by running:

npm run storybook

Open http://localhost:6006 with your favorite browser to see the storybook.

Adding components

Create a new component file inside "src/components" directory and export it in "src/index.ts". Note: This is not limited to components only, you can add React Hooks, Utility Functions, and more to it.

To check your created component, create a story of it and run storybook.

Tests

You can execute testing by running:

npm run test

Linting

For linting and checking code quality and problems, execute:

npm run lint

To fix errors, execute:

npm run lint:fix

Formatting

For formatting codes, execute:

npm run format

Build

For building your library, execute:

npm run build

This will create a build folder containing index.esm.js, index.cjs.js and typings folder for declarations.

Deployment of storybook

Deployment of Storybook is automated via Github Actions. You can check storybook.yml on how it's done.

Publishing to NPM

Same with Storybook deployment, publishing to NPM is also automated. Just make sure to add NPM_TOKEN in your repositories "Secrets and variables" > "Actions".

About

Personalized library/ microfrontend app that contains custom hooks, custom components, utilities, and more that can be consumed as Module Federation or NPM package

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Logo

Core

Contains all of my personal customized components using Tailwind CSS and favorite UI library, custom hooks and utilities for rapid frontend development.

If you are interested on using this, please read the following:
  • This is a personal project of mine and I do not recommend using it for your production projects.
  • Whatever you see in the Storybook are all available for use. Just follow the instructions properly on how to use them.

Major Requirements

Your app should have the following:

  • React v19.
  • Tailwind CSS v4.

❓ How to use

You can import components, hooks, and utilities right away using the following methods:

🚀 As Microfrontend (Recommended)

  1. Create your own microfrontend app.
  1. Setup remotes in your Microfrontend project.
  • If you used Jack Herrington's CLI, check if you started your App with Webpack (webpack.config.js) or Rspack (rspack.config.js).
  • Find the plugin ModuleFederationPlugin and add the remoteEntry of this project.
 plugins: [
new ModuleFederationPlugin({
..... other codes
...
remotes: {
"@core":
"core@https://core.thecodebit.online/remoteEntry.js",
},
...
..... other codes
})
],
  1. Hooray! 🎉 You can now use all the components, hooks, and utilities present here. See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@core/components"; // Core Components
import {
Button,
Badge,
} from "@core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@core/lib"; // Core Utilities
import { useIsMobile } from "@core/hooks"; // Core Hooks
import "@core/styles";
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. For Core components, they are all client-side components. For shadcn/ui components, please refer to the shadcn/ui documentation.
  2. Find all components, hooks, and utils in the Storybook.
  3. If you're still unsure what to do, refer to this example repo: https://github.com/jeffreybernadas/microfrontend-cart

📦 As NPM Package

Note: React v19 and Tailwind CSS v4 are required.

  1. Install package.
npm install @bernz322/core
  1. Inside your index.css file, copy and paste the import code below at the top of the file.
@import "tailwindcss";
@import "@bernz322/core/styles/index.css";
  1. Hooray! 🎉 You are now set! See example consumption below.
import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import {
NeuFollowButton,
DrawOutlineButton,
NeuBrutalism,
AIButton,
} from "@bernz322/core/components"; // Core Components
import {
Button,
Badge,
} from "@bernz322/core/components/shadcn"; // Shadcn Components
import { ThemeProvider, useTheme } from "@bernz322/core/themes/shadcn"; // Shadcn Theme Provider
import { cn } from "@bernz322/core/lib"; // Core Utilities
import { useIsMobile } from "@bernz322/core/hooks"; // Core Hooks
import "./index.css";
const App = () => {
const isMobile = useIsMobile();
return (
<Suspense fallback="Loading..."> // Suspense is required.
<h1 className={cn("text-4xl font-bold", isMobile && "text-2xl")}>
Core Components
</h1>
<NeuFollowButton>Button</NeuFollowButton>
<DrawOutlineButton>Button</DrawOutlineButton>
<NeuBrutalism>Button</NeuBrutalism>
<AIButton>Button</AIButton>
<h1 className="text-4xl font-bold">Shadcn Components</h1>
<ThemeProvider>
<Badge>Hello</Badge>
<Button onClick={() => setTheme("light")}>Light Mode</Button>
<Button onClick={() => setTheme("dark")}>Dark Mode</Button>
</ThemeProvider>
</Suspense>
);
};
const rootElement = document.getElementById("app");
if (!rootElement) throw new Error("Failed to find the root element");
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
  1. You can also use both as microfrontend and NPM package. Just make sure to import the the stuffs you need correctly. However, I don't recommend using both at the same time.

Requirements

  • Node.js 20+ and npm

Getting started

Run the following command on your local environment:

git clone https://github.com/jeffreybernadas/core my-project-name
cd my-project-name
npm install

Note: I always update all dependencies whenever I have the time. Then run the storybook in development mode to see components by running:

npm run storybook

Open http://localhost:6006 with your favorite browser to see the storybook.

Adding components

Create a new component file inside "src/components" directory and export it in "src/index.ts". Note: This is not limited to components only, you can add React Hooks, Utility Functions, and more to it.

To check your created component, create a story of it and run storybook.

Tests

You can execute testing by running:

npm run test

Linting

For linting and checking code quality and problems, execute:

npm run lint

To fix errors, execute:

npm run lint:fix

Formatting

For formatting codes, execute:

npm run format

Build

For building your library, execute:

npm run build

This will create a build folder containing index.esm.js, index.cjs.js and typings folder for declarations.

Deployment of storybook

Deployment of Storybook is automated via Github Actions. You can check storybook.yml on how it's done.

Publishing to NPM

Same with Storybook deployment, publishing to NPM is also automated. Just make sure to add NPM_TOKEN in your repositories "Secrets and variables" > "Actions".

About

Personalized library/ microfrontend app that contains custom hooks, custom components, utilities, and more that can be consumed as Module Federation or NPM package

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages