Skip to content

Commit 2b47fb8

Browse files
authored
feat: new prefix option (#18)
1 parent bd5910b commit 2b47fb8

File tree

3 files changed

+47
-5
lines changed

3 files changed

+47
-5
lines changed

README.md

+14-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ b("element", { a: true, b: false, c: true });
4040
//=> "block__element--a block__element--c"
4141
```
4242

43-
### `elementDelimiter`
43+
### `elementDelimiter = "__"`
4444

4545
```ts
4646
const b = block("block", { elementDelimiter: "_" });
@@ -49,7 +49,7 @@ b("element");
4949
//=> "block_element"
5050
```
5151

52-
### `modifierDelimiter`
52+
### `modifierDelimiter = "--"`
5353

5454
```ts
5555
const b = block("block", { modifierDelimiter: "-" });
@@ -61,6 +61,18 @@ b("element", { a: true });
6161
//=> "block__element-a"
6262
```
6363

64+
### `prefix = ""`
65+
66+
```ts
67+
const b = block("block", { prefix: "pre---" });
68+
69+
b();
70+
//=> "pre---block"
71+
72+
b("element", { a: true, b: true });
73+
//=> "pre---block__element--a pre---block__element--b"
74+
```
75+
6476
## Install
6577

6678
```sh

index.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ type Modifiers = { [key: string]: boolean; };
22

33
export default function bem(
44
block: string,
5-
{ elementDelimiter = "__", modifierDelimiter = "--" } = {},
5+
{ elementDelimiter = "__", modifierDelimiter = "--", prefix = "" } = {},
66
) {
77
return (elementOrModifiers?: string | Modifiers, modifiers?: Modifiers) => {
8+
let base = `${prefix}${block}`;
9+
810
if (!elementOrModifiers) {
9-
return block;
11+
return base;
1012
}
1113

12-
let base = block;
1314
let mods = modifiers;
1415

1516
if (typeof elementOrModifiers === "string") {

test.ts

+29
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,32 @@ describe("`modifierDelimiter` option", () => {
8686
.toBe("block__element-a block__element-c");
8787
});
8888
});
89+
90+
describe("`prefix` option", () => {
91+
const b = block("block", { prefix: "pre---" });
92+
93+
it("returns block", () => {
94+
expect(b()).toBe("pre---block");
95+
});
96+
97+
it("returns block with modifier", () => {
98+
expect(b({ a: true, b: false })).toBe("pre---block--a");
99+
});
100+
101+
it("returns block with multiple modifiers", () => {
102+
expect(b({ a: true, b: false, c: true })).toBe("pre---block--a pre---block--c");
103+
});
104+
105+
it("returns block with element", () => {
106+
expect(b("element")).toBe("pre---block__element");
107+
});
108+
109+
it("returns block with element and modifier", () => {
110+
expect(b("element", { a: true, b: false })).toBe("pre---block__element--a");
111+
});
112+
113+
it("returns block with element and multiple modifiers", () => {
114+
expect(b("element", { a: true, b: false, c: true }))
115+
.toBe("pre---block__element--a pre---block__element--c");
116+
});
117+
});

0 commit comments

Comments
 (0)