From 23c869e57459f27cbd6bd91258a0e6c66128a55c Mon Sep 17 00:00:00 2001
From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com>
Date: Mon, 19 Jan 2026 16:04:07 +0700
Subject: [PATCH] feat: add example components and system pages for UI showcase
- Introduced HeaderExample component for header display.
- Created StyleGuideOne, StyleGuideTwo, and StyleGuideThree components showcasing various UI elements and layouts.
- Added system pages: ComingSoon, Forbidden, Maintenance, and NotFound for better user experience during different states.
- Updated index.ts to export new components for easier access.
---
apps/web/src/apps/index.tsx | 7 +-
apps/web/src/apps/modules/index.tsx | 7 +-
.../ui/src/components/{ => button}/button.tsx | 0
.../counter-example.tsx} | 2 +-
.../{ => examples}/date-example.tsx | 2 +-
.../encryption-example.tsx} | 2 +-
.../header-example.tsx} | 4 +-
.../src/components/examples/style-guide-1.tsx | 208 ++++++++++++++
.../src/components/examples/style-guide-2.tsx | 257 ++++++++++++++++++
.../src/components/examples/style-guide-3.tsx | 232 ++++++++++++++++
packages/ui/src/components/index.ts | 19 +-
.../components/system-pages/coming-soon.tsx | 25 ++
.../src/components/system-pages/forbidden.tsx | 33 +++
.../components/system-pages/maintenance.tsx | 26 ++
.../src/components/system-pages/not-found.tsx | 28 ++
15 files changed, 838 insertions(+), 14 deletions(-)
rename packages/ui/src/components/{ => button}/button.tsx (100%)
rename packages/ui/src/components/{counter.tsx => examples/counter-example.tsx} (91%)
rename packages/ui/src/components/{ => examples}/date-example.tsx (99%)
rename packages/ui/src/components/{encryption-demo.tsx => examples/encryption-example.tsx} (99%)
rename packages/ui/src/components/{header.tsx => examples/header-example.tsx} (54%)
create mode 100644 packages/ui/src/components/examples/style-guide-1.tsx
create mode 100644 packages/ui/src/components/examples/style-guide-2.tsx
create mode 100644 packages/ui/src/components/examples/style-guide-3.tsx
create mode 100644 packages/ui/src/components/system-pages/coming-soon.tsx
create mode 100644 packages/ui/src/components/system-pages/forbidden.tsx
create mode 100644 packages/ui/src/components/system-pages/maintenance.tsx
create mode 100644 packages/ui/src/components/system-pages/not-found.tsx
diff --git a/apps/web/src/apps/index.tsx b/apps/web/src/apps/index.tsx
index b2c76be..b02319e 100644
--- a/apps/web/src/apps/index.tsx
+++ b/apps/web/src/apps/index.tsx
@@ -1,5 +1,6 @@
import { lazy, Suspense } from 'react';
import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';
+import { NotFound, Forbidden, Maintenance, ComingSoon } from '@repo/ui';
const AuthModule = lazy(() => import('./auth'));
const AppModule = lazy(() => import('./modules'));
@@ -11,8 +12,10 @@ export default function App() {
} />
} />
- {/* } />
- } /> */}
+ } />
+ } />
+ } />
+ } />
} />
diff --git a/apps/web/src/apps/modules/index.tsx b/apps/web/src/apps/modules/index.tsx
index da0b2d7..d26c094 100644
--- a/apps/web/src/apps/modules/index.tsx
+++ b/apps/web/src/apps/modules/index.tsx
@@ -1,10 +1,13 @@
-import { DateServiceComponent } from '@repo/ui';
+import { DateServiceExample, StyleGuideOne, StyleGuideTree, StyleGuideTwo } from '@repo/ui';
import { Route, Routes } from 'react-router-dom';
export default function AppModule() {
return (
- } />
+ } />
+ } />
+ } />
+ } />
);
}
diff --git a/packages/ui/src/components/button.tsx b/packages/ui/src/components/button/button.tsx
similarity index 100%
rename from packages/ui/src/components/button.tsx
rename to packages/ui/src/components/button/button.tsx
diff --git a/packages/ui/src/components/counter.tsx b/packages/ui/src/components/examples/counter-example.tsx
similarity index 91%
rename from packages/ui/src/components/counter.tsx
rename to packages/ui/src/components/examples/counter-example.tsx
index bde56ff..a710516 100644
--- a/packages/ui/src/components/counter.tsx
+++ b/packages/ui/src/components/examples/counter-example.tsx
@@ -1,6 +1,6 @@
import React, { useState } from 'react';
-export const Counter: React.FC = () => {
+export const CounterExample: React.FC = () => {
const [count, setCount] = useState(0);
return (
diff --git a/packages/ui/src/components/date-example.tsx b/packages/ui/src/components/examples/date-example.tsx
similarity index 99%
rename from packages/ui/src/components/date-example.tsx
rename to packages/ui/src/components/examples/date-example.tsx
index f9a97a1..2b2e22a 100644
--- a/packages/ui/src/components/date-example.tsx
+++ b/packages/ui/src/components/examples/date-example.tsx
@@ -1,7 +1,7 @@
import { DateService } from '@repo/utils';
import React, { useState, useEffect, useMemo } from 'react';
-export const DateServiceComponent: React.FC = () => {
+export const DateServiceExample: React.FC = () => {
// --- 0. TIMEZONE CONFIGURATION (ROOT CONTROL) ---
const [currentZone, setCurrentZone] = useState(DateService.getGlobalTimezone());
diff --git a/packages/ui/src/components/encryption-demo.tsx b/packages/ui/src/components/examples/encryption-example.tsx
similarity index 99%
rename from packages/ui/src/components/encryption-demo.tsx
rename to packages/ui/src/components/examples/encryption-example.tsx
index 3cd1d61..561584f 100644
--- a/packages/ui/src/components/encryption-demo.tsx
+++ b/packages/ui/src/components/examples/encryption-example.tsx
@@ -1,7 +1,7 @@
import { EncryptionService } from '@repo/utils';
import React, { useState } from 'react';
-export const EncryptionDemo: React.FC = () => {
+export const EncryptionExample: React.FC = () => {
// --- 1. SETUP INSTANCE ---
// Kita gunakan Singleton agar hemat memory
const cryptoService = EncryptionService.getInstance();
diff --git a/packages/ui/src/components/header.tsx b/packages/ui/src/components/examples/header-example.tsx
similarity index 54%
rename from packages/ui/src/components/header.tsx
rename to packages/ui/src/components/examples/header-example.tsx
index c142845..8ad8ecf 100644
--- a/packages/ui/src/components/header.tsx
+++ b/packages/ui/src/components/examples/header-example.tsx
@@ -1,10 +1,10 @@
import React from 'react';
-interface HeaderProps {
+interface HeaderExampleProps {
title: string;
}
-export const Header: React.FC = ({ title }) => {
+export const HeaderExample: React.FC = ({ title }) => {
return (