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 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
- export default function Keywords(props: KeywordsProps): JSX.Element | undefined;
177
+ declare const KeywordsInner: FC<PropsWithChildren<KeywordsProps>>;
178
+ export default KeywordsInner;
148
179
  ```
149
180
 
150
181
  ## Contributors
package/cjs/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import { FC, PropsWithChildren } from 'react';
2
2
  export interface KeywordsProps {
3
3
  value?: string;
4
4
  color?: string;
5
+ caseIgnored?: boolean;
5
6
  backgroundColor?: string;
6
7
  render?: (keyword: string, color: string, backgroundColor: string) => JSX.Element;
7
8
  }
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 ? value : undefined,
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 ? value : undefined}\n render={render}\n backgroundColor={backgroundColor}\n >\n {item}\n </Highlight>\n );\n })}\n </Fragment>\n );\n};\n\nexport default KeywordsInner;\n"
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;;;;AAUA,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,GAAoFD,KAApF,CAAQC,QAAR;EAAA,mBAAoFD,KAApF,CAAkBG,KAAlB;EAAA,IAAkBA,KAAlB,6BAA0B,SAA1B;EAAA,4BAAoFH,KAApF,CAAqCI,eAArC;EAAA,IAAqCA,eAArC,sCAAuD,SAAvD;EAAA,IAAkEF,KAAlE,GAAoFF,KAApF,CAAkEE,KAAlE;EAAA,IAAyEG,MAAzE,GAAoFL,KAApF,CAAyEK,MAAzE;EACA,IAAI,OAAOJ,QAAP,KAAoB,QAAxB,EAAkC,oBAAO,qBAAC,eAAD;IAAA,UAAWA;EAAX,EAAP;EAClC,IAAMQ,UAAU,GAAG,IAAIC,MAAJ,WAAcR,KAAd,GAAuB,IAAvB,CAAnB;EACA,IAAMS,OAAO,GAAGV,QAAQ,CAACW,KAAT,CAAeH,UAAf,CAAhB;EACA,oBACE,qBAAC,eAAD;IAAA,UACGE,OAAO,CAACE,GAAR,CAAY,UAACC,IAAD,EAAOC,GAAP,EAAe;MAC1B,oBACE,qBAAC,SAAD;QAEE,KAAK,EAAEZ,KAFT;QAGE,KAAK,EAAEQ,OAAO,CAACK,MAAR,GAAiBD,GAAG,GAAG,CAAvB,GAA2Bb,KAA3B,GAAmCe,SAH5C;QAIE,MAAM,EAAEZ,MAJV;QAKE,eAAe,EAAED,eALnB;QAAA,UAOGU;MAPH,GACOC,GADP,CADF;IAWD,CAZA;EADH,EADF;AAiBD,CAtBD;;eAwBeP,a"
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?value:undefined,render:render,backgroundColor:backgroundColor,children:item},idx);})});};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (KeywordsInner);
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__;
@@ -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"),l=Object.prototype.hasOwnProperty,c=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,u={key:!0,ref:!0,__self:!0,__source:!0};function i(e,r,o){var t,a={},i=null,d=null;for(t in void 0!==o&&(i=""+o),void 0!==r.key&&(i=""+r.key),void 0!==r.ref&&(d=r.ref),r)l.call(r,t)&&!u.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:d,props:a,_owner:c.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,l=o.backgroundColor,c=o.render,u=(0,e.useMemo)((function(){return c?c(n,a,l):(0,r.jsx)("span",{style:{color:a,backgroundColor:l},children:n})}),[a,l,n]);return(0,r.jsxs)(e.Fragment,{children:[t,n&&u]})};const a=function(t){var n=t.children,a=t.color,l=void 0===a?"inherit":a,c=t.backgroundColor,u=void 0===c?"#ffff00":c,i=t.value,d=t.render;if("string"!==typeof n)return(0,r.jsx)(e.Fragment,{children:n});var f=new RegExp("".concat(i),"ig"),s=n.split(f);return(0,r.jsx)(e.Fragment,{children:s.map((function(e,t){return(0,r.jsx)(o,{color:l,value:s.length>t+1?i:void 0,render:d,backgroundColor:u,children:e},t)}))})}})(),n})()));
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
@@ -2,6 +2,7 @@ import { FC, PropsWithChildren } from 'react';
2
2
  export interface KeywordsProps {
3
3
  value?: string;
4
4
  color?: string;
5
+ caseIgnored?: boolean;
5
6
  backgroundColor?: string;
6
7
  render?: (keyword: string, color: string, backgroundColor: string) => JSX.Element;
7
8
  }
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 ? value : undefined,
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 ? value : undefined}\n render={render}\n backgroundColor={backgroundColor}\n >\n {item}\n </Highlight>\n );\n })}\n </Fragment>\n );\n};\n\nexport default KeywordsInner;\n"
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;;;;AAUA,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;IAAYE,KAAK,GAAG,SAApB;IAA+BC,eAAe,GAAG,SAAjD;IAA4DF,KAA5D;IAAmEG;EAAnE,IAA8EL,KAApF;EACA,IAAI,OAAOC,QAAP,KAAoB,QAAxB,EAAkC,oBAAO,KAAC,QAAD;IAAA,UAAWA;EAAX,EAAP;EAClC,IAAMO,UAAU,GAAG,IAAIC,MAAJ,MAAcP,KAAd,EAAuB,IAAvB,CAAnB;EACA,IAAMQ,OAAO,GAAGT,QAAQ,CAACU,KAAT,CAAeH,UAAf,CAAhB;EACA,oBACE,KAAC,QAAD;IAAA,UACGE,OAAO,CAACE,GAAR,CAAY,CAACC,IAAD,EAAOC,GAAP,KAAe;MAC1B,oBACE,KAAC,SAAD;QAEE,KAAK,EAAEX,KAFT;QAGE,KAAK,EAAEO,OAAO,CAACK,MAAR,GAAiBD,GAAG,GAAG,CAAvB,GAA2BZ,KAA3B,GAAmCc,SAH5C;QAIE,MAAM,EAAEX,MAJV;QAKE,eAAe,EAAED,eALnB;QAAA,UAOGS;MAPH,GACOC,GADP,CADF;IAWD,CAZA;EADH,EADF;AAiBD,CAtBD;;AAwBA,eAAeP,aAAf"
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-keywords",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "Highlight a keyword in a piece of text and return a React element.",
5
5
  "homepage": "https://uiwjs.github.io/react-keywords/",
6
6
  "author": "kenny wang <wowohoo@qq.com>",
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 ? value : undefined}
39
+ value={matched.length > idx + 1 ? (values as string[])[idx] : undefined}
38
40
  render={render}
39
41
  backgroundColor={backgroundColor}
40
42
  >