react-keywords 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -2
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +5 -2
- package/cjs/index.js.map +5 -2
- package/dist/keywords.js +1 -1
- package/dist/keywords.min.js +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/index.js +4 -2
- package/esm/index.js.map +5 -2
- package/package.json +1 -1
- package/src/index.tsx +5 -3
package/README.md
CHANGED
|
@@ -98,6 +98,35 @@ export default function Demo() {
|
|
|
98
98
|
}
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
+
### caseIgnored
|
|
102
|
+
|
|
103
|
+
Case is ignored by default `caseIgnored=true`.
|
|
104
|
+
|
|
105
|
+
```jsx mdx:preview
|
|
106
|
+
import React, { useState, Fragment } from 'react';
|
|
107
|
+
import Keywords from 'react-keywords';
|
|
108
|
+
|
|
109
|
+
export default function Demo() {
|
|
110
|
+
const [value, setValue] = useState('re');
|
|
111
|
+
const text = `caseIgnored={true} Highlight A Keyword In A Piece Of Text And Return A React Element.`
|
|
112
|
+
return (
|
|
113
|
+
<Fragment>
|
|
114
|
+
<input value={value} onChange={(evn) => setValue(evn.target.value)} />
|
|
115
|
+
<br />
|
|
116
|
+
<Keywords value={value} color="red" backgroundColor="">
|
|
117
|
+
{text}
|
|
118
|
+
</Keywords>
|
|
119
|
+
<br />
|
|
120
|
+
<Keywords
|
|
121
|
+
value={value}
|
|
122
|
+
caseIgnored={false}
|
|
123
|
+
children={`caseIgnored={false} Highlight a keyword in a piece of text and return a React element.`}
|
|
124
|
+
/>
|
|
125
|
+
</Fragment>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
101
130
|
## Support bundle
|
|
102
131
|
|
|
103
132
|
```html
|
|
@@ -137,14 +166,16 @@ export default function Demo() {
|
|
|
137
166
|
## API
|
|
138
167
|
|
|
139
168
|
```ts
|
|
169
|
+
import { FC, PropsWithChildren } from 'react';
|
|
140
170
|
export interface KeywordsProps {
|
|
141
171
|
value?: string;
|
|
142
|
-
children?: string;
|
|
143
172
|
color?: string;
|
|
173
|
+
caseIgnored?: boolean;
|
|
144
174
|
backgroundColor?: string;
|
|
145
175
|
render?: (keyword: string, color: string, backgroundColor: string) => JSX.Element;
|
|
146
176
|
}
|
|
147
|
-
|
|
177
|
+
declare const KeywordsInner: FC<PropsWithChildren<KeywordsProps>>;
|
|
178
|
+
export default KeywordsInner;
|
|
148
179
|
```
|
|
149
180
|
|
|
150
181
|
## Contributors
|
package/cjs/index.d.ts
CHANGED
package/cjs/index.js
CHANGED
|
@@ -31,6 +31,8 @@ var Highlight = function Highlight(props) {
|
|
|
31
31
|
|
|
32
32
|
var KeywordsInner = function KeywordsInner(props) {
|
|
33
33
|
var children = props.children,
|
|
34
|
+
_props$caseIgnored = props.caseIgnored,
|
|
35
|
+
caseIgnored = _props$caseIgnored === void 0 ? true : _props$caseIgnored,
|
|
34
36
|
_props$color = props.color,
|
|
35
37
|
color = _props$color === void 0 ? 'inherit' : _props$color,
|
|
36
38
|
_props$backgroundColo = props.backgroundColor,
|
|
@@ -40,13 +42,14 @@ var KeywordsInner = function KeywordsInner(props) {
|
|
|
40
42
|
if (typeof children !== 'string') return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Fragment, {
|
|
41
43
|
children: children
|
|
42
44
|
});
|
|
43
|
-
var splitMatch = new RegExp("".concat(value), 'ig');
|
|
45
|
+
var splitMatch = new RegExp("".concat(value), caseIgnored ? 'ig' : 'g');
|
|
46
|
+
var values = value ? children.match(splitMatch) : [];
|
|
44
47
|
var matched = children.split(splitMatch);
|
|
45
48
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Fragment, {
|
|
46
49
|
children: matched.map(function (item, idx) {
|
|
47
50
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Highlight, {
|
|
48
51
|
color: color,
|
|
49
|
-
value: matched.length > idx + 1 ?
|
|
52
|
+
value: matched.length > idx + 1 ? values[idx] : undefined,
|
|
50
53
|
render: render,
|
|
51
54
|
backgroundColor: backgroundColor,
|
|
52
55
|
children: item
|
package/cjs/index.js.map
CHANGED
|
@@ -11,8 +11,11 @@
|
|
|
11
11
|
"child",
|
|
12
12
|
"useMemo",
|
|
13
13
|
"KeywordsInner",
|
|
14
|
+
"caseIgnored",
|
|
14
15
|
"splitMatch",
|
|
15
16
|
"RegExp",
|
|
17
|
+
"values",
|
|
18
|
+
"match",
|
|
16
19
|
"matched",
|
|
17
20
|
"split",
|
|
18
21
|
"map",
|
|
@@ -25,7 +28,7 @@
|
|
|
25
28
|
"../src/index.tsx"
|
|
26
29
|
],
|
|
27
30
|
"sourcesContent": [
|
|
28
|
-
"import { FC, Fragment, PropsWithChildren, useMemo } from 'react';\n\nexport interface KeywordsProps {\n value?: string;\n color?: string;\n backgroundColor?: string;\n render?: (keyword: string, color: string, backgroundColor: string) => JSX.Element;\n}\n\ninterface HighlightProps extends KeywordsProps {}\nconst Highlight: FC<PropsWithChildren<HighlightProps>> = (props) => {\n const { children, value, color, backgroundColor, render } = props;\n const child = useMemo(\n () => (render ? render(value!, color!, backgroundColor!) : <span style={{ color, backgroundColor }}>{value}</span>),\n [color, backgroundColor, value],\n );\n return (\n <Fragment>\n {children}\n {value && child}\n </Fragment>\n );\n};\n\nconst KeywordsInner: FC<PropsWithChildren<KeywordsProps>> = (props) => {\n const { children, color = 'inherit', backgroundColor = '#ffff00', value, render } = props;\n if (typeof children !== 'string') return <Fragment>{children}</Fragment>;\n const splitMatch = new RegExp(`${value}`, 'ig');\n const matched = children.split(splitMatch);\n return (\n <Fragment>\n {matched.map((item, idx) => {\n return (\n <Highlight\n key={idx}\n color={color}\n value={matched.length > idx + 1 ?
|
|
31
|
+
"import { FC, Fragment, PropsWithChildren, useMemo } from 'react';\n\nexport interface KeywordsProps {\n value?: string;\n color?: string;\n caseIgnored?: boolean;\n backgroundColor?: string;\n render?: (keyword: string, color: string, backgroundColor: string) => JSX.Element;\n}\n\ninterface HighlightProps extends KeywordsProps {}\nconst Highlight: FC<PropsWithChildren<HighlightProps>> = (props) => {\n const { children, value, color, backgroundColor, render } = props;\n const child = useMemo(\n () => (render ? render(value!, color!, backgroundColor!) : <span style={{ color, backgroundColor }}>{value}</span>),\n [color, backgroundColor, value],\n );\n return (\n <Fragment>\n {children}\n {value && child}\n </Fragment>\n );\n};\n\nconst KeywordsInner: FC<PropsWithChildren<KeywordsProps>> = (props) => {\n const { children, caseIgnored = true, color = 'inherit', backgroundColor = '#ffff00', value, render } = props;\n if (typeof children !== 'string') return <Fragment>{children}</Fragment>;\n const splitMatch = new RegExp(`${value}`, caseIgnored ? 'ig' : 'g');\n const values = value ? children.match(splitMatch) : [];\n const matched = children.split(splitMatch);\n return (\n <Fragment>\n {matched.map((item, idx) => {\n return (\n <Highlight\n key={idx}\n color={color}\n value={matched.length > idx + 1 ? (values as string[])[idx] : undefined}\n render={render}\n backgroundColor={backgroundColor}\n >\n {item}\n </Highlight>\n );\n })}\n </Fragment>\n );\n};\n\nexport default KeywordsInner;\n"
|
|
29
32
|
],
|
|
30
|
-
"mappings": ";;;;;;;AAAA;;;;
|
|
33
|
+
"mappings": ";;;;;;;AAAA;;;;AAWA,IAAMA,SAAgD,GAAG,SAAnDA,SAAmD,CAACC,KAAD,EAAW;EAClE,IAAQC,QAAR,GAA4DD,KAA5D,CAAQC,QAAR;EAAA,IAAkBC,KAAlB,GAA4DF,KAA5D,CAAkBE,KAAlB;EAAA,IAAyBC,KAAzB,GAA4DH,KAA5D,CAAyBG,KAAzB;EAAA,IAAgCC,eAAhC,GAA4DJ,KAA5D,CAAgCI,eAAhC;EAAA,IAAiDC,MAAjD,GAA4DL,KAA5D,CAAiDK,MAAjD;EACA,IAAMC,KAAK,GAAG,IAAAC,cAAA,EACZ;IAAA,OAAOF,MAAM,GAAGA,MAAM,CAACH,KAAD,EAASC,KAAT,EAAiBC,eAAjB,CAAT,gBAA8C;MAAM,KAAK,EAAE;QAAED,KAAK,EAALA,KAAF;QAASC,eAAe,EAAfA;MAAT,CAAb;MAAA,UAA0CF;IAA1C,EAA3D;EAAA,CADY,EAEZ,CAACC,KAAD,EAAQC,eAAR,EAAyBF,KAAzB,CAFY,CAAd;EAIA,oBACE,sBAAC,eAAD;IAAA,WACGD,QADH,EAEGC,KAAK,IAAII,KAFZ;EAAA,EADF;AAMD,CAZD;;AAcA,IAAME,aAAmD,GAAG,SAAtDA,aAAsD,CAACR,KAAD,EAAW;EACrE,IAAQC,QAAR,GAAwGD,KAAxG,CAAQC,QAAR;EAAA,yBAAwGD,KAAxG,CAAkBS,WAAlB;EAAA,IAAkBA,WAAlB,mCAAgC,IAAhC;EAAA,mBAAwGT,KAAxG,CAAsCG,KAAtC;EAAA,IAAsCA,KAAtC,6BAA8C,SAA9C;EAAA,4BAAwGH,KAAxG,CAAyDI,eAAzD;EAAA,IAAyDA,eAAzD,sCAA2E,SAA3E;EAAA,IAAsFF,KAAtF,GAAwGF,KAAxG,CAAsFE,KAAtF;EAAA,IAA6FG,MAA7F,GAAwGL,KAAxG,CAA6FK,MAA7F;EACA,IAAI,OAAOJ,QAAP,KAAoB,QAAxB,EAAkC,oBAAO,qBAAC,eAAD;IAAA,UAAWA;EAAX,EAAP;EAClC,IAAMS,UAAU,GAAG,IAAIC,MAAJ,WAAcT,KAAd,GAAuBO,WAAW,GAAG,IAAH,GAAU,GAA5C,CAAnB;EACA,IAAMG,MAAM,GAAGV,KAAK,GAAGD,QAAQ,CAACY,KAAT,CAAeH,UAAf,CAAH,GAAgC,EAApD;EACA,IAAMI,OAAO,GAAGb,QAAQ,CAACc,KAAT,CAAeL,UAAf,CAAhB;EACA,oBACE,qBAAC,eAAD;IAAA,UACGI,OAAO,CAACE,GAAR,CAAY,UAACC,IAAD,EAAOC,GAAP,EAAe;MAC1B,oBACE,qBAAC,SAAD;QAEE,KAAK,EAAEf,KAFT;QAGE,KAAK,EAAEW,OAAO,CAACK,MAAR,GAAiBD,GAAG,GAAG,CAAvB,GAA4BN,MAAD,CAAqBM,GAArB,CAA3B,GAAuDE,SAHhE;QAIE,MAAM,EAAEf,MAJV;QAKE,eAAe,EAAED,eALnB;QAAA,UAOGa;MAPH,GACOC,GADP,CADF;IAWD,CAZA;EADH,EADF;AAiBD,CAvBD;;eAyBeV,a"
|
|
31
34
|
}
|
package/dist/keywords.js
CHANGED
|
@@ -128,7 +128,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
128
128
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(787);
|
|
129
129
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
130
130
|
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(605);
|
|
131
|
-
var Highlight=function Highlight(props){var children=props.children,value=props.value,color=props.color,backgroundColor=props.backgroundColor,render=props.render;var child=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function(){return render?render(value,color,backgroundColor):/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span",{style:{color:color,backgroundColor:backgroundColor},children:value});},[color,backgroundColor,value]);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,{children:[children,value&&child]});};var KeywordsInner=function KeywordsInner(props){var children=props.children,_props$color=props.color,color=_props$color===void 0?'inherit':_props$color,_props$backgroundColo=props.backgroundColor,backgroundColor=_props$backgroundColo===void 0?'#ffff00':_props$backgroundColo,value=props.value,render=props.render;if(typeof children!=='string')return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,{children:children});var splitMatch=new RegExp("".concat(value),'ig');var matched=children.split(splitMatch);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,{children:matched.map(function(item,idx){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Highlight,{color:color,value:matched.length>idx+1?
|
|
131
|
+
var Highlight=function Highlight(props){var children=props.children,value=props.value,color=props.color,backgroundColor=props.backgroundColor,render=props.render;var child=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function(){return render?render(value,color,backgroundColor):/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span",{style:{color:color,backgroundColor:backgroundColor},children:value});},[color,backgroundColor,value]);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,{children:[children,value&&child]});};var KeywordsInner=function KeywordsInner(props){var children=props.children,_props$caseIgnored=props.caseIgnored,caseIgnored=_props$caseIgnored===void 0?true:_props$caseIgnored,_props$color=props.color,color=_props$color===void 0?'inherit':_props$color,_props$backgroundColo=props.backgroundColor,backgroundColor=_props$backgroundColo===void 0?'#ffff00':_props$backgroundColo,value=props.value,render=props.render;if(typeof children!=='string')return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,{children:children});var splitMatch=new RegExp("".concat(value),caseIgnored?'ig':'g');var values=value?children.match(splitMatch):[];var matched=children.split(splitMatch);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,{children:matched.map(function(item,idx){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Highlight,{color:color,value:matched.length>idx+1?values[idx]:undefined,render:render,backgroundColor:backgroundColor,children:item},idx);})});};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (KeywordsInner);
|
|
132
132
|
})();
|
|
133
133
|
|
|
134
134
|
/******/ return __webpack_exports__;
|
package/dist/keywords.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see keywords.min.js.LICENSE.txt */
|
|
2
|
-
!function(e,r){"object"===typeof exports&&"object"===typeof module?module.exports=r(require("react")):"function"===typeof define&&define.amd?define(["react"],r):"object"===typeof exports?exports["react-keywords"]=r(require("react")):e["react-keywords"]=r(e.React)}(self,(e=>(()=>{"use strict";var r={298:(e,r,o)=>{var t=o(787),n=Symbol.for("react.element"),a=Symbol.for("react.fragment"),
|
|
2
|
+
!function(e,r){"object"===typeof exports&&"object"===typeof module?module.exports=r(require("react")):"function"===typeof define&&define.amd?define(["react"],r):"object"===typeof exports?exports["react-keywords"]=r(require("react")):e["react-keywords"]=r(e.React)}(self,(e=>(()=>{"use strict";var r={298:(e,r,o)=>{var t=o(787),n=Symbol.for("react.element"),a=Symbol.for("react.fragment"),c=Object.prototype.hasOwnProperty,l=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,d={key:!0,ref:!0,__self:!0,__source:!0};function i(e,r,o){var t,a={},i=null,u=null;for(t in void 0!==o&&(i=""+o),void 0!==r.key&&(i=""+r.key),void 0!==r.ref&&(u=r.ref),r)c.call(r,t)&&!d.hasOwnProperty(t)&&(a[t]=r[t]);if(e&&e.defaultProps)for(t in r=e.defaultProps)void 0===a[t]&&(a[t]=r[t]);return{$$typeof:n,type:e,key:i,ref:u,props:a,_owner:l.current}}r.jsx=i,r.jsxs=i},605:(e,r,o)=>{e.exports=o(298)},787:r=>{r.exports=e}},o={};function t(e){var n=o[e];if(void 0!==n)return n.exports;var a=o[e]={exports:{}};return r[e](a,a.exports,t),a.exports}t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{t.r(n),t.d(n,{default:()=>a});var e=t(787),r=t(605),o=function(o){var t=o.children,n=o.value,a=o.color,c=o.backgroundColor,l=o.render,d=(0,e.useMemo)((function(){return l?l(n,a,c):(0,r.jsx)("span",{style:{color:a,backgroundColor:c},children:n})}),[a,c,n]);return(0,r.jsxs)(e.Fragment,{children:[t,n&&d]})};const a=function(t){var n=t.children,a=t.caseIgnored,c=void 0===a||a,l=t.color,d=void 0===l?"inherit":l,i=t.backgroundColor,u=void 0===i?"#ffff00":i,f=t.value,s=t.render;if("string"!==typeof n)return(0,r.jsx)(e.Fragment,{children:n});var p=new RegExp("".concat(f),c?"ig":"g"),y=f?n.match(p):[],v=n.split(p);return(0,r.jsx)(e.Fragment,{children:v.map((function(e,t){return(0,r.jsx)(o,{color:d,value:v.length>t+1?y[t]:void 0,render:s,backgroundColor:u,children:e},t)}))})}})(),n})()));
|
package/esm/index.d.ts
CHANGED
package/esm/index.js
CHANGED
|
@@ -25,6 +25,7 @@ var Highlight = props => {
|
|
|
25
25
|
var KeywordsInner = props => {
|
|
26
26
|
var {
|
|
27
27
|
children,
|
|
28
|
+
caseIgnored = true,
|
|
28
29
|
color = 'inherit',
|
|
29
30
|
backgroundColor = '#ffff00',
|
|
30
31
|
value,
|
|
@@ -33,13 +34,14 @@ var KeywordsInner = props => {
|
|
|
33
34
|
if (typeof children !== 'string') return /*#__PURE__*/_jsx(Fragment, {
|
|
34
35
|
children: children
|
|
35
36
|
});
|
|
36
|
-
var splitMatch = new RegExp("" + value, 'ig');
|
|
37
|
+
var splitMatch = new RegExp("" + value, caseIgnored ? 'ig' : 'g');
|
|
38
|
+
var values = value ? children.match(splitMatch) : [];
|
|
37
39
|
var matched = children.split(splitMatch);
|
|
38
40
|
return /*#__PURE__*/_jsx(Fragment, {
|
|
39
41
|
children: matched.map((item, idx) => {
|
|
40
42
|
return /*#__PURE__*/_jsx(Highlight, {
|
|
41
43
|
color: color,
|
|
42
|
-
value: matched.length > idx + 1 ?
|
|
44
|
+
value: matched.length > idx + 1 ? values[idx] : undefined,
|
|
43
45
|
render: render,
|
|
44
46
|
backgroundColor: backgroundColor,
|
|
45
47
|
children: item
|
package/esm/index.js.map
CHANGED
|
@@ -12,8 +12,11 @@
|
|
|
12
12
|
"render",
|
|
13
13
|
"child",
|
|
14
14
|
"KeywordsInner",
|
|
15
|
+
"caseIgnored",
|
|
15
16
|
"splitMatch",
|
|
16
17
|
"RegExp",
|
|
18
|
+
"values",
|
|
19
|
+
"match",
|
|
17
20
|
"matched",
|
|
18
21
|
"split",
|
|
19
22
|
"map",
|
|
@@ -26,7 +29,7 @@
|
|
|
26
29
|
"../src/index.tsx"
|
|
27
30
|
],
|
|
28
31
|
"sourcesContent": [
|
|
29
|
-
"import { FC, Fragment, PropsWithChildren, useMemo } from 'react';\n\nexport interface KeywordsProps {\n value?: string;\n color?: string;\n backgroundColor?: string;\n render?: (keyword: string, color: string, backgroundColor: string) => JSX.Element;\n}\n\ninterface HighlightProps extends KeywordsProps {}\nconst Highlight: FC<PropsWithChildren<HighlightProps>> = (props) => {\n const { children, value, color, backgroundColor, render } = props;\n const child = useMemo(\n () => (render ? render(value!, color!, backgroundColor!) : <span style={{ color, backgroundColor }}>{value}</span>),\n [color, backgroundColor, value],\n );\n return (\n <Fragment>\n {children}\n {value && child}\n </Fragment>\n );\n};\n\nconst KeywordsInner: FC<PropsWithChildren<KeywordsProps>> = (props) => {\n const { children, color = 'inherit', backgroundColor = '#ffff00', value, render } = props;\n if (typeof children !== 'string') return <Fragment>{children}</Fragment>;\n const splitMatch = new RegExp(`${value}`, 'ig');\n const matched = children.split(splitMatch);\n return (\n <Fragment>\n {matched.map((item, idx) => {\n return (\n <Highlight\n key={idx}\n color={color}\n value={matched.length > idx + 1 ?
|
|
32
|
+
"import { FC, Fragment, PropsWithChildren, useMemo } from 'react';\n\nexport interface KeywordsProps {\n value?: string;\n color?: string;\n caseIgnored?: boolean;\n backgroundColor?: string;\n render?: (keyword: string, color: string, backgroundColor: string) => JSX.Element;\n}\n\ninterface HighlightProps extends KeywordsProps {}\nconst Highlight: FC<PropsWithChildren<HighlightProps>> = (props) => {\n const { children, value, color, backgroundColor, render } = props;\n const child = useMemo(\n () => (render ? render(value!, color!, backgroundColor!) : <span style={{ color, backgroundColor }}>{value}</span>),\n [color, backgroundColor, value],\n );\n return (\n <Fragment>\n {children}\n {value && child}\n </Fragment>\n );\n};\n\nconst KeywordsInner: FC<PropsWithChildren<KeywordsProps>> = (props) => {\n const { children, caseIgnored = true, color = 'inherit', backgroundColor = '#ffff00', value, render } = props;\n if (typeof children !== 'string') return <Fragment>{children}</Fragment>;\n const splitMatch = new RegExp(`${value}`, caseIgnored ? 'ig' : 'g');\n const values = value ? children.match(splitMatch) : [];\n const matched = children.split(splitMatch);\n return (\n <Fragment>\n {matched.map((item, idx) => {\n return (\n <Highlight\n key={idx}\n color={color}\n value={matched.length > idx + 1 ? (values as string[])[idx] : undefined}\n render={render}\n backgroundColor={backgroundColor}\n >\n {item}\n </Highlight>\n );\n })}\n </Fragment>\n );\n};\n\nexport default KeywordsInner;\n"
|
|
30
33
|
],
|
|
31
|
-
"mappings": "AAAA,SAAaA,QAAb,EAA0CC,OAA1C,QAAyD,OAAzD;;;;
|
|
34
|
+
"mappings": "AAAA,SAAaA,QAAb,EAA0CC,OAA1C,QAAyD,OAAzD;;;;AAWA,IAAMC,SAAgD,GAAIC,KAAD,IAAW;EAClE,IAAM;IAAEC,QAAF;IAAYC,KAAZ;IAAmBC,KAAnB;IAA0BC,eAA1B;IAA2CC;EAA3C,IAAsDL,KAA5D;EACA,IAAMM,KAAK,GAAGR,OAAO,CACnB,MAAOO,MAAM,GAAGA,MAAM,CAACH,KAAD,EAASC,KAAT,EAAiBC,eAAjB,CAAT,gBAA8C;IAAM,KAAK,EAAE;MAAED,KAAF;MAASC;IAAT,CAAb;IAAA,UAA0CF;EAA1C,EADxC,EAEnB,CAACC,KAAD,EAAQC,eAAR,EAAyBF,KAAzB,CAFmB,CAArB;EAIA,oBACE,MAAC,QAAD;IAAA,WACGD,QADH,EAEGC,KAAK,IAAII,KAFZ;EAAA,EADF;AAMD,CAZD;;AAcA,IAAMC,aAAmD,GAAIP,KAAD,IAAW;EACrE,IAAM;IAAEC,QAAF;IAAYO,WAAW,GAAG,IAA1B;IAAgCL,KAAK,GAAG,SAAxC;IAAmDC,eAAe,GAAG,SAArE;IAAgFF,KAAhF;IAAuFG;EAAvF,IAAkGL,KAAxG;EACA,IAAI,OAAOC,QAAP,KAAoB,QAAxB,EAAkC,oBAAO,KAAC,QAAD;IAAA,UAAWA;EAAX,EAAP;EAClC,IAAMQ,UAAU,GAAG,IAAIC,MAAJ,MAAcR,KAAd,EAAuBM,WAAW,GAAG,IAAH,GAAU,GAA5C,CAAnB;EACA,IAAMG,MAAM,GAAGT,KAAK,GAAGD,QAAQ,CAACW,KAAT,CAAeH,UAAf,CAAH,GAAgC,EAApD;EACA,IAAMI,OAAO,GAAGZ,QAAQ,CAACa,KAAT,CAAeL,UAAf,CAAhB;EACA,oBACE,KAAC,QAAD;IAAA,UACGI,OAAO,CAACE,GAAR,CAAY,CAACC,IAAD,EAAOC,GAAP,KAAe;MAC1B,oBACE,KAAC,SAAD;QAEE,KAAK,EAAEd,KAFT;QAGE,KAAK,EAAEU,OAAO,CAACK,MAAR,GAAiBD,GAAG,GAAG,CAAvB,GAA4BN,MAAD,CAAqBM,GAArB,CAA3B,GAAuDE,SAHhE;QAIE,MAAM,EAAEd,MAJV;QAKE,eAAe,EAAED,eALnB;QAAA,UAOGY;MAPH,GACOC,GADP,CADF;IAWD,CAZA;EADH,EADF;AAiBD,CAvBD;;AAyBA,eAAeV,aAAf"
|
|
32
35
|
}
|
package/package.json
CHANGED
package/src/index.tsx
CHANGED
|
@@ -3,6 +3,7 @@ import { FC, Fragment, PropsWithChildren, useMemo } from 'react';
|
|
|
3
3
|
export interface KeywordsProps {
|
|
4
4
|
value?: string;
|
|
5
5
|
color?: string;
|
|
6
|
+
caseIgnored?: boolean;
|
|
6
7
|
backgroundColor?: string;
|
|
7
8
|
render?: (keyword: string, color: string, backgroundColor: string) => JSX.Element;
|
|
8
9
|
}
|
|
@@ -23,9 +24,10 @@ const Highlight: FC<PropsWithChildren<HighlightProps>> = (props) => {
|
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
const KeywordsInner: FC<PropsWithChildren<KeywordsProps>> = (props) => {
|
|
26
|
-
const { children, color = 'inherit', backgroundColor = '#ffff00', value, render } = props;
|
|
27
|
+
const { children, caseIgnored = true, color = 'inherit', backgroundColor = '#ffff00', value, render } = props;
|
|
27
28
|
if (typeof children !== 'string') return <Fragment>{children}</Fragment>;
|
|
28
|
-
const splitMatch = new RegExp(`${value}`, 'ig');
|
|
29
|
+
const splitMatch = new RegExp(`${value}`, caseIgnored ? 'ig' : 'g');
|
|
30
|
+
const values = value ? children.match(splitMatch) : [];
|
|
29
31
|
const matched = children.split(splitMatch);
|
|
30
32
|
return (
|
|
31
33
|
<Fragment>
|
|
@@ -34,7 +36,7 @@ const KeywordsInner: FC<PropsWithChildren<KeywordsProps>> = (props) => {
|
|
|
34
36
|
<Highlight
|
|
35
37
|
key={idx}
|
|
36
38
|
color={color}
|
|
37
|
-
value={matched.length > idx + 1 ?
|
|
39
|
+
value={matched.length > idx + 1 ? (values as string[])[idx] : undefined}
|
|
38
40
|
render={render}
|
|
39
41
|
backgroundColor={backgroundColor}
|
|
40
42
|
>
|