2
0
mirror of https://github.com/tenrok/BBob.git synced 2026-06-20 20:00:33 +03:00

fix(293): [color] tag doesn't work in React (#294)

* fix: react color preset

* chore: changeset great-beds-shop.md

* fix: tests

* chore: text fixes
This commit is contained in:
Nikolay Kost
2025-10-05 15:38:17 +02:00
committed by GitHub
parent e943184294
commit 40041a0680
5 changed files with 82 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
---
"@bbob/parser": patch
"@bbob/types": patch
"@bbob/cli": patch
"@bbob/core": patch
"@bbob/html": patch
"@bbob/plugin-helper": patch
"@bbob/preset": patch
"@bbob/preset-html5": patch
"@bbob/preset-react": patch
"@bbob/preset-vue": patch
"@bbob/react": patch
"@bbob/vue2": patch
"@bbob/vue3": patch
---
Now `React` preset `@bbob/preset-react` supports `color` tag
```js
import preset from '@bbob/preset-react'
import { render } from '@bbob/react'
const html = render('[color=#ff0000]This text should be red[/color]', preset());
```
+2
View File
@@ -8,6 +8,7 @@
"react" "react"
], ],
"dependencies": { "dependencies": {
"@bbob/plugin-helper": "*",
"@bbob/preset-html5": "*", "@bbob/preset-html5": "*",
"@bbob/types": "*" "@bbob/types": "*"
}, },
@@ -15,6 +16,7 @@
"react": "> 15.0" "react": "> 15.0"
}, },
"devDependencies": { "devDependencies": {
"@bbob/core": "*",
"react": "18.x", "react": "18.x",
"react-dom": "18.x", "react-dom": "18.x",
"@types/react": "18.x" "@types/react": "18.x"
+6
View File
@@ -1,4 +1,5 @@
import presetHTML5 from '@bbob/preset-html5'; import presetHTML5 from '@bbob/preset-html5';
import { getUniqAttr } from "@bbob/plugin-helper";
import type { PresetTagsDefinition } from '@bbob/types'; import type { PresetTagsDefinition } from '@bbob/types';
@@ -30,6 +31,11 @@ const presetReact = presetHTML5.extend<PresetTagsDefinition>((tags) => ({
...tags.s(...args), ...tags.s(...args),
...tagAttr({ textDecoration: 'line-through' }), ...tagAttr({ textDecoration: 'line-through' }),
}), }),
color: (...args) => ({
...tags.color(...args),
...tagAttr({ color: String(getUniqAttr(args[0].attrs)) }),
})
})); }));
export default presetReact; export default presetReact;
@@ -1,7 +1,51 @@
import bbob from '@bbob/core';
import preset from '../src' import preset from '../src'
const instance = bbob(preset())
const createTag = (content: string[], style: Record<string, string>) => {
return {
"attrs": { "style": style },
"content": content,
"tag": "span",
"end": undefined,
"start": undefined,
}
}
describe('@bbob/preset-react', () => { describe('@bbob/preset-react', () => {
test('is a function', () => { test('is a function', () => {
expect(preset).toBeInstanceOf(Function) expect(preset).toBeInstanceOf(Function)
}) })
test('is parses [b] tag correctly', () => {
const res = instance.process('[b]bold[/b]')
const tags = [...res.tree]
expect(tags).toEqual([createTag(["bold"], { fontWeight: 'bold' })]);
});
test('is parses [i] tag correctly', () => {
const res = instance.process('[i]italic[/i]')
const tags = [...res.tree]
expect(tags).toEqual([createTag(["italic"], { fontStyle: 'italic' })]);
});
test('is parses [u] tag correctly', () => {
const res = instance.process('[u]underline[/u]')
const tags = [...res.tree]
expect(tags).toEqual([createTag(["underline"], { textDecoration: 'underline' })]);
});
test('is parses [s] tag correctly', () => {
const res = instance.process('[s]strike[/s]')
const tags = [...res.tree]
expect(tags).toEqual([createTag(["strike"], { textDecoration: 'line-through' })]);
});
test('is parses [color] tag correctly', () => {
const res = instance.process('[color=#ff0000]This text should be red[/color]')
const tags = [...res.tree]
expect(tags).toEqual([createTag(["This", " ", "text", " ", "should", " ", "be", " ", "red"], { color: '#ff0000' })]);
});
}); });
+6
View File
@@ -418,6 +418,9 @@ importers:
packages/bbob-preset-react: packages/bbob-preset-react:
dependencies: dependencies:
'@bbob/plugin-helper':
specifier: '*'
version: link:../bbob-plugin-helper
'@bbob/preset-html5': '@bbob/preset-html5':
specifier: '*' specifier: '*'
version: link:../bbob-preset-html5 version: link:../bbob-preset-html5
@@ -425,6 +428,9 @@ importers:
specifier: '*' specifier: '*'
version: link:../bbob-types version: link:../bbob-types
devDependencies: devDependencies:
'@bbob/core':
specifier: '*'
version: link:../bbob-core
'@types/react': '@types/react':
specifier: 18.x specifier: 18.x
version: 18.3.20 version: 18.3.20