Skip to content

Commit 5c1c4f6

Browse files
committed
Setup BBCode preview app with React, Tailwind, TS, i18n and tests
0 parents  commit 5c1c4f6

29 files changed

+6520
-0
lines changed

.gitignore

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist
12+
dist-ssr
13+
*.local
14+
coverage
15+
16+
# Editor directories and files
17+
.vscode/*
18+
!.vscode/extensions.json
19+
.idea
20+
.DS_Store
21+
*.suo
22+
*.ntvs*
23+
*.njsproj
24+
*.sln
25+
*.sw?

README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# BBCode Preview (React + Vite + Tailwind + TS)
2+
3+
Vista previa de BBCode en tiempo real usando React 18, Tailwind 3 y Vite. Listo para desplegar en GitHub Pages.
4+
5+
## Requisitos
6+
- Node 18+
7+
- npm
8+
9+
## Instalación
10+
```bash
11+
npm install
12+
```
13+
14+
## Desarrollo
15+
```bash
16+
npm run dev
17+
```
18+
Abrir la URL que imprime Vite (ej. `http://localhost:5173`).
19+
20+
## Build
21+
```bash
22+
npm run build
23+
```
24+
El resultado queda en `dist/`.
25+
26+
## Despliegue en GitHub Pages
27+
1. Ajusta `base` en `vite.config.js` si el nombre del repo no es `bbcode-preview`.
28+
2. Ejecuta `npm run build`.
29+
3. Publica el contenido de `dist/` en Pages (rama `gh-pages` o flujo de tu preferencia).
30+
31+
## Funcionalidad
32+
- Código en TypeScript.
33+
- Editor de BBCode con chips para insertar etiquetas rápidas.
34+
- Vista previa segura (escape de HTML), validación de URLs (`http`, `https`, `mailto`).
35+
- Soporte para [b], [i], [u], [s], [color], [size], [align], [url], [img], [quote], [code], [list] con [*].
36+
- Selector de idioma (ES/EN) vía `react-i18next`.

eslint.config.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import js from '@eslint/js'
2+
import globals from 'globals'
3+
import reactHooks from 'eslint-plugin-react-hooks'
4+
import reactRefresh from 'eslint-plugin-react-refresh'
5+
import { defineConfig, globalIgnores } from 'eslint/config'
6+
import tseslint from '@typescript-eslint/eslint-plugin'
7+
import tsParser from '@typescript-eslint/parser'
8+
9+
export default defineConfig([
10+
globalIgnores(['dist']),
11+
...tseslint.configs['flat/recommended'],
12+
{
13+
files: ['**/*.{js,jsx,ts,tsx}'],
14+
languageOptions: {
15+
ecmaVersion: 2020,
16+
globals: globals.browser,
17+
parser: tsParser,
18+
parserOptions: {
19+
ecmaVersion: 'latest',
20+
ecmaFeatures: { jsx: true },
21+
sourceType: 'module',
22+
},
23+
},
24+
plugins: {
25+
'react-hooks': reactHooks,
26+
'react-refresh': reactRefresh,
27+
},
28+
rules: {
29+
...js.configs.recommended.rules,
30+
...reactHooks.configs.flat.recommended.rules,
31+
...reactRefresh.configs.vite.rules,
32+
'no-unused-vars': 'off',
33+
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^[A-Z_]' }],
34+
},
35+
},
36+
])

index.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7+
<title>BBCode Preview</title>
8+
</head>
9+
<body>
10+
<div id="root"></div>
11+
<script type="module" src="/src/main.tsx"></script>
12+
</body>
13+
</html>

0 commit comments

Comments
 (0)