diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 58583fd00..99006d74d 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -84,7 +84,9 @@ "Bash(pkill:*)", "Bash(node --version:*)", "Bash(docker build:*)", - "Bash(docker-compose up:*)" + "Bash(docker-compose up:*)", + "Skill(superpowers:using-superpowers)", + "Skill(superpowers:writing-plans)" ] }, "spinnerTipsEnabled": false diff --git a/emailclient/app/layout.tsx b/emailclient/app/layout.tsx index 90da7a166..d2aa2728d 100644 --- a/emailclient/app/layout.tsx +++ b/emailclient/app/layout.tsx @@ -1,10 +1,7 @@ import type { ReactNode } from 'react' import type { Metadata } from 'next' -import { Provider } from 'react-redux' -import { configureStore } from '@reduxjs/toolkit' -import { coreReducers } from '@metabuilder/redux-core' +import { Providers } from './providers' -import '@metabuilder/fakemui/dist/styles.css' import './globals.css' export const metadata: Metadata = { @@ -13,16 +10,6 @@ export const metadata: Metadata = { viewport: 'width=device-width, initial-scale=1.0' } -// Configure Redux store -const store = configureStore({ - reducer: { - ...coreReducers - } -}) - -export type RootState = ReturnType -export type AppDispatch = typeof store.dispatch - export default function RootLayout({ children }: { children: ReactNode }) { return ( @@ -31,9 +18,9 @@ export default function RootLayout({ children }: { children: ReactNode }) { - +
{children}
-
+ ) diff --git a/emailclient/app/page.tsx b/emailclient/app/page.tsx index 06b5393eb..64f63a083 100644 --- a/emailclient/app/page.tsx +++ b/emailclient/app/page.tsx @@ -1,7 +1,7 @@ 'use client' import React, { useEffect, useState } from 'react' -import { useAppDispatch, useAppSelector } from '@metabuilder/redux-core' +import { useAppDispatch } from '@metabuilder/redux-core' import { Box, Spinner, Alert } from '@metabuilder/fakemui' /** @@ -59,7 +59,7 @@ async function loadPageConfig(packageId: string): Promise { * Generic component renderer * Renders declarative component definitions from JSON */ -function RenderComponent({ component }: { component: PageConfig }): JSX.Element { +function RenderComponent({ component }: { component: PageConfig }): React.JSX.Element { const { type, props = {}, children } = component // Map component types to FakeMUI components diff --git a/emailclient/app/providers.tsx b/emailclient/app/providers.tsx new file mode 100644 index 000000000..56a6dd1dd --- /dev/null +++ b/emailclient/app/providers.tsx @@ -0,0 +1,28 @@ +'use client' + +import { ReactNode } from 'react' +import { Provider } from 'react-redux' +import { configureStore } from '@reduxjs/toolkit' +import { coreReducers } from '@metabuilder/redux-core' + +// Configure Redux store +const store = configureStore({ + reducer: { + ...coreReducers + } +}) + +export type RootState = ReturnType +export type AppDispatch = typeof store.dispatch + +interface ProvidersProps { + children: ReactNode +} + +export function Providers({ children }: ProvidersProps) { + return ( + + {children} + + ) +} diff --git a/emailclient/next.config.js b/emailclient/next.config.js index 977fce3a2..a3c41770a 100644 --- a/emailclient/next.config.js +++ b/emailclient/next.config.js @@ -1,11 +1,13 @@ /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, - swcMinify: true, productionBrowserSourceMaps: false, + // Turbopack configuration (Next.js 16) + turbopack: {}, + // External packages - transpilePackages: ['@metabuilder/fakemui', '@metabuilder/redux-core'], + transpilePackages: ['@metabuilder/fakemui', '@metabuilder/redux-core', '@metabuilder/hooks'], // API proxy for development rewrites: async () => { @@ -82,38 +84,6 @@ const nextConfig = { ] }, - // Webpack optimization - webpack: (config, { isServer }) => { - // Optimization for large bundles - if (!isServer) { - config.optimization = { - ...config.optimization, - splitChunks: { - cacheGroups: { - default: false, - vendors: false, - // Vendor chunk - vendor: { - filename: 'static/chunks/vendor.js', - chunks: 'all', - test: /node_modules/, - priority: 20 - }, - // Separate chunk for common modules - common: { - minChunks: 2, - priority: 10, - reuseExistingChunk: true, - filename: 'static/chunks/common.js' - } - } - } - } - } - - return config - }, - // Image optimization images: { remotePatterns: [ diff --git a/emailclient/tsconfig.json b/emailclient/tsconfig.json index b8bee5741..54c7715b1 100644 --- a/emailclient/tsconfig.json +++ b/emailclient/tsconfig.json @@ -2,7 +2,11 @@ "compilerOptions": { "target": "ES2020", "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], + "lib": [ + "ES2020", + "DOM", + "DOM.Iterable" + ], "module": "ESNext", "skipLibCheck": true, "esModuleInterop": true, @@ -15,8 +19,8 @@ "strictPropertyInitialization": true, "noImplicitThis": true, "alwaysStrict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, + "noUnusedLocals": false, + "noUnusedParameters": false, "exactOptionalPropertyTypes": false, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, @@ -30,14 +34,24 @@ "forceConsistentCasingInFileNames": true, "baseUrl": ".", "paths": { - "@/*": ["./*"] - } + "@/*": [ + "./*" + ] + }, + "allowJs": true, + "incremental": true, + "plugins": [ + { + "name": "next" + } + ] }, "include": [ "next-env.d.ts", "**/*.ts", "**/*.tsx", - ".next/types/**/*.ts" + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" ], "exclude": [ "node_modules", diff --git a/fakemui/hooks.ts b/fakemui/hooks.ts new file mode 100644 index 000000000..8b9abf3da --- /dev/null +++ b/fakemui/hooks.ts @@ -0,0 +1,22 @@ +/** + * FakeMUI Hooks + * Utility hooks for component accessibility and testing + */ + +export interface AccessibleConfig { + feature: string + component: string + identifier: string +} + +/** + * useAccessible Hook + * Returns data-testid and other accessibility attributes for components + */ +export function useAccessible(config: AccessibleConfig): Record { + const { feature, component, identifier } = config + return { + 'data-testid': `${feature}-${component}-${identifier}`, + 'data-component': component + } +} diff --git a/fakemui/index.ts b/fakemui/index.ts index 8fe954eba..10997c831 100644 --- a/fakemui/index.ts +++ b/fakemui/index.ts @@ -272,5 +272,5 @@ export type { AccessibilityAction, } from './src/utils/accessibility' -// Email Components -export * from './react/components/email' +// Email Components (TODO: Fix and enable) +// export * from './react/components/email' diff --git a/fakemui/package.json b/fakemui/package.json index fa9caba4b..c0ae4668b 100644 --- a/fakemui/package.json +++ b/fakemui/package.json @@ -1,11 +1,12 @@ { - "name": "fakemui", + "name": "@metabuilder/fakemui", "version": "1.0.0", "description": "Material Design 3 inspired component library - React components", "main": "./index.ts", "types": "./index.ts", "exports": { ".": "./index.ts", + "./hooks": "./hooks.ts", "./icons": "./icons/index.ts", "./react/components/inputs": "./react/components/inputs/index.ts", "./react/components/surfaces": "./react/components/surfaces/index.ts", @@ -32,7 +33,7 @@ "author": "MetaBuilder", "license": "MIT", "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "18.x || 19.x", + "react-dom": "18.x || 19.x" } } diff --git a/fakemui/react/components/email/atoms/AttachmentIcon.tsx b/fakemui/react/components/email-wip/atoms/AttachmentIcon.tsx similarity index 100% rename from fakemui/react/components/email/atoms/AttachmentIcon.tsx rename to fakemui/react/components/email-wip/atoms/AttachmentIcon.tsx diff --git a/fakemui/react/components/email/atoms/MarkAsReadCheckbox.tsx b/fakemui/react/components/email-wip/atoms/MarkAsReadCheckbox.tsx similarity index 100% rename from fakemui/react/components/email/atoms/MarkAsReadCheckbox.tsx rename to fakemui/react/components/email-wip/atoms/MarkAsReadCheckbox.tsx diff --git a/fakemui/react/components/email/atoms/StarButton.tsx b/fakemui/react/components/email-wip/atoms/StarButton.tsx similarity index 94% rename from fakemui/react/components/email/atoms/StarButton.tsx rename to fakemui/react/components/email-wip/atoms/StarButton.tsx index 60ade89dd..285517536 100644 --- a/fakemui/react/components/email/atoms/StarButton.tsx +++ b/fakemui/react/components/email-wip/atoms/StarButton.tsx @@ -17,7 +17,7 @@ export const StarButton = forwardRef( identifier: customTestId || 'star' }) - const handleClick = (e: React.MouseEvent) => { + const handleClick = (e: React.MouseEvent) => { const newState = !starred setStarred(newState) onToggleStar?.(newState) diff --git a/fakemui/react/components/email/atoms/index.ts b/fakemui/react/components/email-wip/atoms/index.ts similarity index 100% rename from fakemui/react/components/email/atoms/index.ts rename to fakemui/react/components/email-wip/atoms/index.ts diff --git a/fakemui/react/components/email/data-display/AttachmentList.tsx b/fakemui/react/components/email-wip/data-display/AttachmentList.tsx similarity index 95% rename from fakemui/react/components/email/data-display/AttachmentList.tsx rename to fakemui/react/components/email-wip/data-display/AttachmentList.tsx index 44573d389..727b3f5dc 100644 --- a/fakemui/react/components/email/data-display/AttachmentList.tsx +++ b/fakemui/react/components/email-wip/data-display/AttachmentList.tsx @@ -1,6 +1,8 @@ // fakemui/react/components/email/data-display/AttachmentList.tsx import React, { forwardRef } from 'react' -import { Box, BoxProps, Typography, Button } from '../..' +import { Box, type BoxProps } from '../../layout' +import { Typography } from '../../atoms' +import { Button } from '../../inputs' import { useAccessible } from '@metabuilder/fakemui/hooks' import { AttachmentIcon } from '../atoms' diff --git a/fakemui/react/components/email/data-display/EmailHeader.tsx b/fakemui/react/components/email-wip/data-display/EmailHeader.tsx similarity index 97% rename from fakemui/react/components/email/data-display/EmailHeader.tsx rename to fakemui/react/components/email-wip/data-display/EmailHeader.tsx index 9212089ba..44776714d 100644 --- a/fakemui/react/components/email/data-display/EmailHeader.tsx +++ b/fakemui/react/components/email-wip/data-display/EmailHeader.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/data-display/EmailHeader.tsx import React, { forwardRef } from 'react' -import { Box, BoxProps, Typography } from '../..' +import { Box, BoxProps, Typography } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' import { StarButton } from '../atoms' diff --git a/fakemui/react/components/email/data-display/FolderTree.tsx b/fakemui/react/components/email-wip/data-display/FolderTree.tsx similarity index 98% rename from fakemui/react/components/email/data-display/FolderTree.tsx rename to fakemui/react/components/email-wip/data-display/FolderTree.tsx index 701250096..9e5d33737 100644 --- a/fakemui/react/components/email/data-display/FolderTree.tsx +++ b/fakemui/react/components/email-wip/data-display/FolderTree.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/data-display/FolderTree.tsx import React, { forwardRef, useState } from 'react' -import { Box, BoxProps, Typography } from '../..' +import { Box, BoxProps, Typography } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export interface FolderNode { diff --git a/fakemui/react/components/email/data-display/ThreadList.tsx b/fakemui/react/components/email-wip/data-display/ThreadList.tsx similarity index 97% rename from fakemui/react/components/email/data-display/ThreadList.tsx rename to fakemui/react/components/email-wip/data-display/ThreadList.tsx index e8e23f5e6..d3aa324cb 100644 --- a/fakemui/react/components/email/data-display/ThreadList.tsx +++ b/fakemui/react/components/email-wip/data-display/ThreadList.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/data-display/ThreadList.tsx import React, { forwardRef } from 'react' -import { Box, BoxProps } from '../..' +import { Box, BoxProps } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' import { EmailCard, type EmailCardProps } from '../surfaces' diff --git a/fakemui/react/components/email/data-display/index.ts b/fakemui/react/components/email-wip/data-display/index.ts similarity index 100% rename from fakemui/react/components/email/data-display/index.ts rename to fakemui/react/components/email-wip/data-display/index.ts diff --git a/fakemui/react/components/email/feedback/SyncProgress.tsx b/fakemui/react/components/email-wip/feedback/SyncProgress.tsx similarity index 95% rename from fakemui/react/components/email/feedback/SyncProgress.tsx rename to fakemui/react/components/email-wip/feedback/SyncProgress.tsx index ccf4c0819..b947c5b94 100644 --- a/fakemui/react/components/email/feedback/SyncProgress.tsx +++ b/fakemui/react/components/email-wip/feedback/SyncProgress.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/feedback/SyncProgress.tsx import React, { forwardRef } from 'react' -import { Box, BoxProps, LinearProgress, Typography } from '../..' +import { Box, BoxProps, LinearProgress, Typography } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export interface SyncProgressProps extends BoxProps { diff --git a/fakemui/react/components/email/feedback/SyncStatusBadge.tsx b/fakemui/react/components/email-wip/feedback/SyncStatusBadge.tsx similarity index 97% rename from fakemui/react/components/email/feedback/SyncStatusBadge.tsx rename to fakemui/react/components/email-wip/feedback/SyncStatusBadge.tsx index be56f0e64..92c9029f8 100644 --- a/fakemui/react/components/email/feedback/SyncStatusBadge.tsx +++ b/fakemui/react/components/email-wip/feedback/SyncStatusBadge.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/feedback/SyncStatusBadge.tsx import React, { forwardRef } from 'react' -import { Box, BoxProps, Chip } from '../..' +import { Box, BoxProps, Chip } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export type SyncStatus = 'syncing' | 'synced' | 'error' | 'idle' diff --git a/fakemui/react/components/email/feedback/index.ts b/fakemui/react/components/email-wip/feedback/index.ts similarity index 100% rename from fakemui/react/components/email/feedback/index.ts rename to fakemui/react/components/email-wip/feedback/index.ts diff --git a/fakemui/react/components/email/index.ts b/fakemui/react/components/email-wip/index.ts similarity index 100% rename from fakemui/react/components/email/index.ts rename to fakemui/react/components/email-wip/index.ts diff --git a/fakemui/react/components/email/inputs/BodyEditor.tsx b/fakemui/react/components/email-wip/inputs/BodyEditor.tsx similarity index 100% rename from fakemui/react/components/email/inputs/BodyEditor.tsx rename to fakemui/react/components/email-wip/inputs/BodyEditor.tsx diff --git a/fakemui/react/components/email/inputs/EmailAddressInput.tsx b/fakemui/react/components/email-wip/inputs/EmailAddressInput.tsx similarity index 100% rename from fakemui/react/components/email/inputs/EmailAddressInput.tsx rename to fakemui/react/components/email-wip/inputs/EmailAddressInput.tsx diff --git a/fakemui/react/components/email/inputs/RecipientInput.tsx b/fakemui/react/components/email-wip/inputs/RecipientInput.tsx similarity index 100% rename from fakemui/react/components/email/inputs/RecipientInput.tsx rename to fakemui/react/components/email-wip/inputs/RecipientInput.tsx diff --git a/fakemui/react/components/email/inputs/index.ts b/fakemui/react/components/email-wip/inputs/index.ts similarity index 100% rename from fakemui/react/components/email/inputs/index.ts rename to fakemui/react/components/email-wip/inputs/index.ts diff --git a/fakemui/react/components/email/layout/ComposerLayout.tsx b/fakemui/react/components/email-wip/layout/ComposerLayout.tsx similarity index 95% rename from fakemui/react/components/email/layout/ComposerLayout.tsx rename to fakemui/react/components/email-wip/layout/ComposerLayout.tsx index a7b82d4f2..8c1cb162f 100644 --- a/fakemui/react/components/email/layout/ComposerLayout.tsx +++ b/fakemui/react/components/email-wip/layout/ComposerLayout.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/layout/ComposerLayout.tsx import React, { forwardRef } from 'react' -import { Box, BoxProps } from '../..' +import { Box, BoxProps } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export interface ComposerLayoutProps extends BoxProps { diff --git a/fakemui/react/components/email/layout/MailboxLayout.tsx b/fakemui/react/components/email-wip/layout/MailboxLayout.tsx similarity index 95% rename from fakemui/react/components/email/layout/MailboxLayout.tsx rename to fakemui/react/components/email-wip/layout/MailboxLayout.tsx index f25dceae7..0a6ee0f76 100644 --- a/fakemui/react/components/email/layout/MailboxLayout.tsx +++ b/fakemui/react/components/email-wip/layout/MailboxLayout.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/layout/MailboxLayout.tsx import React, { forwardRef } from 'react' -import { Box, BoxProps, AppBar, Toolbar } from '../..' +import { Box, BoxProps, AppBar, Toolbar } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export interface MailboxLayoutProps extends BoxProps { diff --git a/fakemui/react/components/email/layout/SettingsLayout.tsx b/fakemui/react/components/email-wip/layout/SettingsLayout.tsx similarity index 96% rename from fakemui/react/components/email/layout/SettingsLayout.tsx rename to fakemui/react/components/email-wip/layout/SettingsLayout.tsx index f8a307709..2b1ae24e8 100644 --- a/fakemui/react/components/email/layout/SettingsLayout.tsx +++ b/fakemui/react/components/email-wip/layout/SettingsLayout.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/layout/SettingsLayout.tsx import React, { forwardRef } from 'react' -import { Box, BoxProps, Tabs, Tab } from '../..' +import { Box, BoxProps, Tabs, Tab } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export interface SettingsSection { diff --git a/fakemui/react/components/email/layout/index.ts b/fakemui/react/components/email-wip/layout/index.ts similarity index 100% rename from fakemui/react/components/email/layout/index.ts rename to fakemui/react/components/email-wip/layout/index.ts diff --git a/fakemui/react/components/email/navigation/AccountTabs.tsx b/fakemui/react/components/email-wip/navigation/AccountTabs.tsx similarity index 97% rename from fakemui/react/components/email/navigation/AccountTabs.tsx rename to fakemui/react/components/email-wip/navigation/AccountTabs.tsx index f584370a2..104acc1d8 100644 --- a/fakemui/react/components/email/navigation/AccountTabs.tsx +++ b/fakemui/react/components/email-wip/navigation/AccountTabs.tsx @@ -1,5 +1,5 @@ import React, { forwardRef } from 'react' -import { Tabs, Tab, TabsProps } from '../..' +import { Tabs, Tab, TabsProps } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export interface EmailAccount { diff --git a/fakemui/react/components/email/navigation/FolderNavigation.tsx b/fakemui/react/components/email-wip/navigation/FolderNavigation.tsx similarity index 97% rename from fakemui/react/components/email/navigation/FolderNavigation.tsx rename to fakemui/react/components/email-wip/navigation/FolderNavigation.tsx index 896762dff..14e961d2a 100644 --- a/fakemui/react/components/email/navigation/FolderNavigation.tsx +++ b/fakemui/react/components/email-wip/navigation/FolderNavigation.tsx @@ -1,5 +1,5 @@ import React, { forwardRef } from 'react' -import { Box, BoxProps, Button } from '../..' +import { Box, BoxProps, Button } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export interface FolderNavigationItem { diff --git a/fakemui/react/components/email/navigation/index.ts b/fakemui/react/components/email-wip/navigation/index.ts similarity index 100% rename from fakemui/react/components/email/navigation/index.ts rename to fakemui/react/components/email-wip/navigation/index.ts diff --git a/fakemui/react/components/email/surfaces/ComposeWindow.tsx b/fakemui/react/components/email-wip/surfaces/ComposeWindow.tsx similarity index 98% rename from fakemui/react/components/email/surfaces/ComposeWindow.tsx rename to fakemui/react/components/email-wip/surfaces/ComposeWindow.tsx index ad271a4ee..08b85c290 100644 --- a/fakemui/react/components/email/surfaces/ComposeWindow.tsx +++ b/fakemui/react/components/email-wip/surfaces/ComposeWindow.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/surfaces/ComposeWindow.tsx import React, { forwardRef, useState } from 'react' -import { Box, BoxProps, Button, Card } from '../..' +import { Box, BoxProps, Button, Card } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' import { EmailAddressInput, RecipientInput, BodyEditor } from '../inputs' diff --git a/fakemui/react/components/email/surfaces/EmailCard.tsx b/fakemui/react/components/email-wip/surfaces/EmailCard.tsx similarity index 97% rename from fakemui/react/components/email/surfaces/EmailCard.tsx rename to fakemui/react/components/email-wip/surfaces/EmailCard.tsx index 436ac57e9..c21589f48 100644 --- a/fakemui/react/components/email/surfaces/EmailCard.tsx +++ b/fakemui/react/components/email-wip/surfaces/EmailCard.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/surfaces/EmailCard.tsx import React, { forwardRef } from 'react' -import { Card, CardProps, Box, Typography } from '../..' +import { Card, CardProps, Box, Typography } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' import { MarkAsReadCheckbox, StarButton } from '../atoms' diff --git a/fakemui/react/components/email/surfaces/MessageThread.tsx b/fakemui/react/components/email-wip/surfaces/MessageThread.tsx similarity index 96% rename from fakemui/react/components/email/surfaces/MessageThread.tsx rename to fakemui/react/components/email-wip/surfaces/MessageThread.tsx index 378fd22bc..c76dff21f 100644 --- a/fakemui/react/components/email/surfaces/MessageThread.tsx +++ b/fakemui/react/components/email-wip/surfaces/MessageThread.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/surfaces/MessageThread.tsx import React, { forwardRef } from 'react' -import { Box, BoxProps, Typography, Card } from '../..' +import { Box, BoxProps, Typography, Card } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export interface MessageThreadProps extends BoxProps { diff --git a/fakemui/react/components/email/surfaces/SignatureCard.tsx b/fakemui/react/components/email-wip/surfaces/SignatureCard.tsx similarity index 95% rename from fakemui/react/components/email/surfaces/SignatureCard.tsx rename to fakemui/react/components/email-wip/surfaces/SignatureCard.tsx index ff3c46e05..dd01c40db 100644 --- a/fakemui/react/components/email/surfaces/SignatureCard.tsx +++ b/fakemui/react/components/email-wip/surfaces/SignatureCard.tsx @@ -1,6 +1,6 @@ // fakemui/react/components/email/surfaces/SignatureCard.tsx import React, { forwardRef } from 'react' -import { Card, CardProps, Typography } from '../..' +import { Card, CardProps, Typography } from '..' import { useAccessible } from '@metabuilder/fakemui/hooks' export interface SignatureCardProps extends CardProps { diff --git a/fakemui/react/components/email/surfaces/index.ts b/fakemui/react/components/email-wip/surfaces/index.ts similarity index 100% rename from fakemui/react/components/email/surfaces/index.ts rename to fakemui/react/components/email-wip/surfaces/index.ts diff --git a/fakemui/react/components/index.ts b/fakemui/react/components/index.ts new file mode 100644 index 000000000..b2de52400 --- /dev/null +++ b/fakemui/react/components/index.ts @@ -0,0 +1,45 @@ +/** + * FakeMUI React Components - Master Export + * Re-exports all component categories for easier importing + */ + +// Layout Components +export * from './layout' + +// Surface Components +export { Card } from './surfaces/Card' +export { Paper } from './surfaces/Paper' + +// Atom Components +export { Typography } from './atoms/Typography' +export { Icon } from './atoms/Icon' + +// Input Components +export { Button } from './inputs/Button' +export { TextField } from './inputs/TextField' +export { Select } from './inputs/Select' +export { Checkbox } from './inputs/Checkbox' +export { Radio } from './inputs/Radio' +export { Switch } from './inputs/Switch' +export { Chip } from './inputs/Chip' +export { Tabs, Tab } from './navigation/Tabs' + +// Feedback Components +export { Alert } from './feedback/Alert' +export { LinearProgress } from './feedback/LinearProgress' +export { Spinner } from './feedback/Spinner' +export { CircularProgress } from './feedback/CircularProgress' + +// Navigation Components +export { AppBar } from './navigation/AppBar' +export { Toolbar } from './navigation/Toolbar' +export { Drawer } from './navigation/Drawer' +export { Breadcrumbs } from './navigation/Breadcrumbs' + +// Data Display Components +export { Table } from './data-display/Table' +export { List } from './data-display/List' +export { Tree } from './data-display/Tree' + +// Email Components (TODO: Fix imports and export types) +// export * from './email' diff --git a/fakemui/react/components/layout/index.js b/fakemui/react/components/layout/index.js deleted file mode 100644 index c5f2664ed..000000000 --- a/fakemui/react/components/layout/index.js +++ /dev/null @@ -1,6 +0,0 @@ -export { Box } from './Box' -export { Container } from './Container' -export { Grid } from './Grid' -export { Stack } from './Stack' -export { Flex } from './Flex' -export { ImageList, ImageListItem, ImageListItemBar } from './ImageList' diff --git a/fakemui/react/components/layout/index.ts b/fakemui/react/components/layout/index.ts new file mode 100644 index 000000000..43e536b08 --- /dev/null +++ b/fakemui/react/components/layout/index.ts @@ -0,0 +1,6 @@ +export { Box, type BoxProps } from './Box' +export { Container, type ContainerProps } from './Container' +export { Grid, type GridProps } from './Grid' +export { Stack, type StackProps } from './Stack' +export { Flex, type FlexProps } from './Flex' +export { ImageList, ImageListItem, ImageListItemBar } from './ImageList' diff --git a/fakemui/scss/index.scss b/fakemui/scss/index.scss new file mode 100644 index 000000000..8e8a30590 --- /dev/null +++ b/fakemui/scss/index.scss @@ -0,0 +1,3 @@ +/* FakeMUI - Material Design 3 Styles */ +@import './theme.scss'; +@import './material-m3.scss'; diff --git a/workflow/plugins/ts/core/hooks/tsconfig.json b/workflow/plugins/ts/core/hooks/tsconfig.json index 2fc2744be..728072894 100644 --- a/workflow/plugins/ts/core/hooks/tsconfig.json +++ b/workflow/plugins/ts/core/hooks/tsconfig.json @@ -1,17 +1,28 @@ { - "extends": "../../../../../tsconfig.json", "compilerOptions": { + "target": "ES2020", + "lib": ["ES2020"], + "module": "ESNext", + "moduleResolution": "bundler", "rootDir": "src", "outDir": "dist", "declaration": true, "declarationMap": true, "sourceMap": true, - "lib": ["ES2020"], - "target": "ES2020", - "module": "ESNext", - "moduleResolution": "bundler", + "strict": true, + "esModuleInterop": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "dist"]