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 (