ekm-ui 0.3.7 → 0.3.8

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.
@@ -10,7 +10,7 @@ Browserslist: caniuse-lite is outdated. Please run:
10
10
  npx update-browserslist-db@latest
11
11
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
12
12
  DTS Build start
13
- DTS ⚡️ Build success in 38907ms
13
+ DTS ⚡️ Build success in 36426ms
14
14
  DTS dist/index.d.ts 2.38 KB
15
15
  DTS dist/card.d.ts 155.00 B
16
16
  DTS dist/ekm-logo.d.ts 104.00 B
@@ -54,7 +54,7 @@ Browserslist: caniuse-lite is outdated. Please run:
54
54
  DTS dist/pagination/pagination.d.ts 319.00 B
55
55
  DTS dist/sort/sort.d.ts 689.00 B
56
56
  DTS dist/table-header/table-header.d.ts 2.48 KB
57
- DTS dist/search/search.d.ts 47.00 B
57
+ DTS dist/search/search.d.ts 138.00 B
58
58
  DTS dist/select.d.ts 138.00 B
59
59
  DTS dist/textarea.d.ts 142.00 B
60
60
  DTS dist/tooltip/tooltip.d.ts 181.00 B
@@ -66,16 +66,16 @@ Browserslist: caniuse-lite is outdated. Please run:
66
66
  DTS dist/rich-text-editor/index.d.ts 613.00 B
67
67
  "HiArchive", "HiCurrencyDollar", "HiInbox", "HiLogout", "HiOutlineTicket", "HiShoppingBag", "HiUserCircle", "HiUsers" and "HiViewGrid" are imported from external module "react-icons/hi" but never used in "dist/chunk-256SAVHD.mjs".
68
68
  ESM dist/layout/layout.css 121.47 KB
69
- ESM dist/stacked-list-item.css 121.48 KB
70
69
  ESM dist/index.css 121.47 KB
70
+ ESM dist/stacked-list-item.css 121.48 KB
71
71
  ESM dist/card-payment-block.css 121.48 KB
72
72
  ESM dist/layout/layout.css.map 172.38 KB
73
- ESM dist/stacked-list-item.css.map 172.38 KB
74
73
  ESM dist/index.css.map 172.38 KB
74
+ ESM dist/stacked-list-item.css.map 172.38 KB
75
75
  ESM dist/card-payment-block.css.map 172.38 KB
76
76
  ESM dist/chunk-23SJGKDR.mjs 1.34 KB
77
- ESM dist/sidebar/sidebar.mjs 154.00 B
78
77
  ESM dist/sort/sort.mjs 180.00 B
78
+ ESM dist/sidebar/sidebar.mjs 154.00 B
79
79
  ESM dist/table-header/table-header.mjs 195.00 B
80
80
  ESM dist/toast/index.mjs 192.00 B
81
81
  ESM dist/tooltip/tooltip.mjs 154.00 B
@@ -88,9 +88,9 @@ Browserslist: caniuse-lite is outdated. Please run:
88
88
  ESM dist/rich-text-editor/index.mjs 159.00 B
89
89
  ESM dist/search/search.mjs 184.00 B
90
90
  ESM dist/radio.mjs 179.00 B
91
- ESM dist/select.mjs 181.00 B
92
91
  ESM dist/stacked-list-item.mjs 1.65 KB
93
92
  ESM dist/text-row.mjs 153.00 B
93
+ ESM dist/select.mjs 181.00 B
94
94
  ESM dist/textarea.mjs 185.00 B
95
95
  ESM dist/textinput.mjs 187.00 B
96
96
  ESM dist/toggleswitch.mjs 1.20 KB
@@ -119,12 +119,12 @@ Browserslist: caniuse-lite is outdated. Please run:
119
119
  ESM dist/chunk-QWPN2UNV.mjs 2.29 KB
120
120
  ESM dist/chunk-ASCPOK5F.mjs 2.13 KB
121
121
  ESM dist/chunk-FAFXVD4P.mjs 1.75 KB
122
- ESM dist/chunk-V7IF2WCZ.mjs 8.83 KB
122
+ ESM dist/chunk-XXI2PREK.mjs 8.83 KB
123
123
  ESM dist/chunk-A6OC3NNV.mjs 3.77 KB
124
124
  ESM dist/chunk-256SAVHD.mjs 10.39 KB
125
125
  ESM dist/chunk-VPLCWU7T.mjs 6.54 KB
126
126
  ESM dist/chunk-PPMW7YAZ.mjs 5.48 KB
127
- ESM dist/chunk-4LPT34XA.mjs 3.47 KB
127
+ ESM dist/chunk-L7PHIHMH.mjs 3.48 KB
128
128
  ESM dist/chunk-VNNJFI3Y.mjs 761.00 B
129
129
  ESM dist/chunk-VWGASXHS.mjs 1.29 KB
130
130
  ESM dist/chunk-RMX72FR3.mjs 576.00 B
@@ -142,13 +142,13 @@ Browserslist: caniuse-lite is outdated. Please run:
142
142
  ESM dist/chunk-AUAMGVT2.mjs 3.13 KB
143
143
  ESM dist/chunk-ZT7KDTGF.mjs 1.69 KB
144
144
  ESM dist/chunk-WU66HPYP.mjs 793.00 B
145
- ESM dist/chunk-FRIXS4BL.mjs 56.39 KB
146
145
  ESM dist/chunk-LWDFKEBO.mjs 617.00 B
146
+ ESM dist/chunk-FRIXS4BL.mjs 56.39 KB
147
147
  ESM dist/chunk-PJMH47GY.mjs 1004.00 B
148
148
  ESM dist/chunk-KAQJAKQH.mjs 589.00 B
149
- ESM dist/card.mjs 563.00 B
150
149
  ESM dist/checkbox.mjs 185.00 B
151
150
  ESM dist/chunk-44HZW5A3.mjs 906.00 B
151
+ ESM dist/card.mjs 563.00 B
152
152
  ESM dist/color-picker.mjs 161.00 B
153
153
  ESM dist/chunk-YTTLKTRL.mjs 953.00 B
154
154
  ESM dist/dashboard-notification.mjs 181.00 B
@@ -178,8 +178,8 @@ Browserslist: caniuse-lite is outdated. Please run:
178
178
  ESM dist/button.mjs 150.00 B
179
179
  ESM dist/chunk-56NFESMI.mjs 3.44 KB
180
180
  ESM dist/chunk-23SJGKDR.mjs.map 71.00 B
181
- ESM dist/sidebar/sidebar.mjs.map 51.00 B
182
181
  ESM dist/sort/sort.mjs.map 51.00 B
182
+ ESM dist/sidebar/sidebar.mjs.map 51.00 B
183
183
  ESM dist/table-header/table-header.mjs.map 51.00 B
184
184
  ESM dist/toast/index.mjs.map 51.00 B
185
185
  ESM dist/tooltip/tooltip.mjs.map 51.00 B
@@ -192,9 +192,9 @@ Browserslist: caniuse-lite is outdated. Please run:
192
192
  ESM dist/rich-text-editor/index.mjs.map 51.00 B
193
193
  ESM dist/search/search.mjs.map 51.00 B
194
194
  ESM dist/radio.mjs.map 51.00 B
195
- ESM dist/select.mjs.map 51.00 B
196
195
  ESM dist/stacked-list-item.mjs.map 51.00 B
197
196
  ESM dist/text-row.mjs.map 51.00 B
197
+ ESM dist/select.mjs.map 51.00 B
198
198
  ESM dist/textarea.mjs.map 51.00 B
199
199
  ESM dist/textinput.mjs.map 51.00 B
200
200
  ESM dist/toggleswitch.mjs.map 2.02 KB
@@ -222,12 +222,12 @@ Browserslist: caniuse-lite is outdated. Please run:
222
222
  ESM dist/chunk-QWPN2UNV.mjs.map 5.45 KB
223
223
  ESM dist/chunk-ASCPOK5F.mjs.map 4.30 KB
224
224
  ESM dist/chunk-FAFXVD4P.mjs.map 3.37 KB
225
- ESM dist/chunk-V7IF2WCZ.mjs.map 23.01 KB
225
+ ESM dist/chunk-XXI2PREK.mjs.map 23.01 KB
226
226
  ESM dist/chunk-A6OC3NNV.mjs.map 8.15 KB
227
227
  ESM dist/chunk-256SAVHD.mjs.map 24.60 KB
228
228
  ESM dist/chunk-VPLCWU7T.mjs.map 13.60 KB
229
229
  ESM dist/chunk-PPMW7YAZ.mjs.map 14.21 KB
230
- ESM dist/chunk-4LPT34XA.mjs.map 9.42 KB
230
+ ESM dist/chunk-L7PHIHMH.mjs.map 9.45 KB
231
231
  ESM dist/chunk-VNNJFI3Y.mjs.map 1.26 KB
232
232
  ESM dist/chunk-VWGASXHS.mjs.map 2.75 KB
233
233
  ESM dist/chunk-RMX72FR3.mjs.map 1.12 KB
@@ -245,13 +245,13 @@ Browserslist: caniuse-lite is outdated. Please run:
245
245
  ESM dist/chunk-AUAMGVT2.mjs.map 7.59 KB
246
246
  ESM dist/chunk-ZT7KDTGF.mjs.map 2.43 KB
247
247
  ESM dist/chunk-WU66HPYP.mjs.map 1.61 KB
248
- ESM dist/chunk-FRIXS4BL.mjs.map 56.85 KB
249
248
  ESM dist/chunk-LWDFKEBO.mjs.map 1.46 KB
249
+ ESM dist/chunk-FRIXS4BL.mjs.map 56.85 KB
250
250
  ESM dist/chunk-PJMH47GY.mjs.map 1.90 KB
251
251
  ESM dist/chunk-KAQJAKQH.mjs.map 1.17 KB
252
- ESM dist/card.mjs.map 950.00 B
253
252
  ESM dist/checkbox.mjs.map 51.00 B
254
253
  ESM dist/chunk-44HZW5A3.mjs.map 1.57 KB
254
+ ESM dist/card.mjs.map 950.00 B
255
255
  ESM dist/color-picker.mjs.map 51.00 B
256
256
  ESM dist/chunk-YTTLKTRL.mjs.map 3.15 KB
257
257
  ESM dist/dashboard-notification.mjs.map 51.00 B
@@ -281,4 +281,4 @@ Browserslist: caniuse-lite is outdated. Please run:
281
281
  ESM dist/button.mjs.map 51.00 B
282
282
  ESM dist/chunk-56NFESMI.mjs.map 6.06 KB
283
283
  ESM dist/chunk-LNK7V5RH.mjs.map 710.92 KB
284
- ESM ⚡️ Build success in 50961ms
284
+ ESM ⚡️ Build success in 47331ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # ekm-ui
2
2
 
3
+ ## 0.3.8
4
+
5
+ ### Patch Changes
6
+
7
+ - 6028481: Fix added for missing forwardRef in the Search component
8
+
3
9
  ## 0.3.7
4
10
 
5
11
  ### Patch Changes
@@ -5,12 +5,12 @@ import './chunk-LNK7V5RH.mjs';
5
5
  import './chunk-QWPN2UNV.mjs';
6
6
  import './chunk-ASCPOK5F.mjs';
7
7
  import './chunk-FAFXVD4P.mjs';
8
- import './chunk-V7IF2WCZ.mjs';
8
+ import './chunk-XXI2PREK.mjs';
9
9
  import './chunk-A6OC3NNV.mjs';
10
10
  import './chunk-256SAVHD.mjs';
11
11
  import './chunk-VPLCWU7T.mjs';
12
12
  import './chunk-PPMW7YAZ.mjs';
13
- import './chunk-4LPT34XA.mjs';
13
+ import './chunk-L7PHIHMH.mjs';
14
14
  import './chunk-VNNJFI3Y.mjs';
15
15
  import './chunk-VWGASXHS.mjs';
16
16
  import './chunk-RMX72FR3.mjs';
@@ -1,10 +1,10 @@
1
1
  import { a } from './chunk-PUJZGK7Y.mjs';
2
2
  import { e, b, a as a$1 } from './chunk-23SJGKDR.mjs';
3
- import { useState, useEffect, useRef, useCallback } from 'react';
3
+ import { forwardRef, useState, useEffect, useRef, useCallback } from 'react';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
 
6
- var r=e(a());function O(w,n,t){let l=useRef(0),s=useRef(null),u=useCallback(w,t);useEffect(()=>(l.current===0?l.current=1:s.current=setTimeout(()=>{u();},n),()=>{clearTimeout(s.current);}),[u,n]);}var z=forwardRef(function({id:n,categories:t=[],delay:l=1500,placeholder:s="Enter a keyword to search...",callback:u,disabled:S=!1,initialValue:c=""},x){let[o,b$1]=useState({text:null,category:(t==null?void 0:t.length)>0?t[0]:null}),[C,h]=useState(c),[N,y]=useState(!0);useImperativeHandle(x,()=>({clear:()=>{h(""),b$1(b(a$1({},o),{text:""}));},removeFocus:()=>{document.getElementById(`${n}-search-input`).blur();}}));let R=e=>{h(e.target.value),b$1(b(a$1({},o),{text:e.target.value}));},D=(e,d)=>{e.preventDefault(),b$1(b(a$1({},o),{category:d})),y(!0);},E=e=>{(e.charCode||e.keyCode)===13&&e.preventDefault();};O(()=>{u(o);},l,[o.text,o.category]),useEffect(()=>{c!==C&&h(c);},[c]);let p=useRef(null);useEffect(()=>{let e=d=>{p.current&&!p.current.contains(d.target)&&y(!0);};return document.addEventListener("click",e,!0),()=>{document.removeEventListener("click",e,!0);}},[]);let T=()=>jsxs(Fragment,{children:[jsxs("button",{id:`${n}-dropdown-button`,"data-dropdown-toggle":"dropdown",className:"absolute top-0 right-0 p-2.5 flex-shrink-0 z-10 inline-flex items-center py-2.5 px-4 text-sm font-medium text-center text-gray-900 bg-white border border-gray-300 dark:border-gray-700 dark:text-white rounded-r-lg hover:bg-gray-200 focus:ring-4 focus:outline-none focus:ring-gray-300 dark:bg-gray-600 dark:hover:bg-gray-700 dark:focus:ring-gray-800",type:"button",onClick:()=>y(!N),children:[o.category.display,jsx("svg",{className:"w-2.5 h-2.5 ml-2.5","aria-hidden":"true",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 10 6",children:jsx("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"m1 1 4 4 4-4"})})]}),jsx("div",{id:`${n}-dropdown`,ref:p,className:`z-10 ${N?"hidden":""} absolute right-0 bg-white divide-y divide-gray-100 rounded-r-lg shadow w-44 dark:bg-gray-700`,children:jsx("ul",{className:"py-2 text-sm text-gray-700 dark:text-gray-200","aria-labelledby":"dropdown-button",children:(t||[]).map(e=>jsx("li",{children:jsx("a",{href:"#",className:"block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white",onClick:d=>D(d,e),children:e.display})},`gst-${e.display}`))})})]});return jsx("div",{className:"flex",children:jsxs("div",{className:"relative w-full",children:[jsx("input",{ref:x,placeholder:s,value:C,"aria-label":"search","aria-describedby":"Search",onChange:R,onKeyDown:E,disabled:S,id:`${n}-search-input`,className:"block p-2.5 w-full text-sm text-gray-900 rounded-lg bg-gray-50 border-r-gray-300 border-r-2 border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:border-blue-500"}),(t==null?void 0:t.length)>0&&T()]})})});z.propTypes={categories:r.default.arrayOf(r.default.shape({display:r.default.string.isRequired,value:r.default.oneOfType([r.default.string,r.default.number]).isRequired})),delay:r.default.number,placeholder:r.default.string,callback:r.default.func.isRequired,disabled:r.default.bool,initialValue:r.default.string};
6
+ var r=e(a());function z(w,n,t){let l=useRef(0),s=useRef(null),u=useCallback(w,t);useEffect(()=>(l.current===0?l.current=1:s.current=setTimeout(()=>{u();},n),()=>{clearTimeout(s.current);}),[u,n]);}var B=forwardRef(function({id:n,categories:t=[],delay:l=1500,placeholder:s="Enter a keyword to search...",callback:u,disabled:S=!1,initialValue:c=""},x){let[o,b$1]=useState({text:null,category:(t==null?void 0:t.length)>0?t[0]:null}),[C,h]=useState(c),[N,y]=useState(!0);useImperativeHandle(x,()=>({clear:()=>{h(""),b$1(b(a$1({},o),{text:""}));},removeFocus:()=>{document.getElementById(`${n}-search-input`).blur();}}));let R=e=>{h(e.target.value),b$1(b(a$1({},o),{text:e.target.value}));},D=(e,d)=>{e.preventDefault(),b$1(b(a$1({},o),{category:d})),y(!0);},E=e=>{(e.charCode||e.keyCode)===13&&e.preventDefault();};z(()=>{u(o);},l,[o.text,o.category]),useEffect(()=>{c!==C&&h(c);},[c]);let p=useRef(null);useEffect(()=>{let e=d=>{p.current&&!p.current.contains(d.target)&&y(!0);};return document.addEventListener("click",e,!0),()=>{document.removeEventListener("click",e,!0);}},[]);let T=()=>jsxs(Fragment,{children:[jsxs("button",{id:`${n}-dropdown-button`,"data-dropdown-toggle":"dropdown",className:"absolute top-0 right-0 p-2.5 flex-shrink-0 z-10 inline-flex items-center py-2.5 px-4 text-sm font-medium text-center text-gray-900 bg-white border border-gray-300 dark:border-gray-700 dark:text-white rounded-r-lg hover:bg-gray-200 focus:ring-4 focus:outline-none focus:ring-gray-300 dark:bg-gray-600 dark:hover:bg-gray-700 dark:focus:ring-gray-800",type:"button",onClick:()=>y(!N),children:[o.category.display,jsx("svg",{className:"w-2.5 h-2.5 ml-2.5","aria-hidden":"true",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 10 6",children:jsx("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"m1 1 4 4 4-4"})})]}),jsx("div",{id:`${n}-dropdown`,ref:p,className:`z-10 ${N?"hidden":""} absolute right-0 bg-white divide-y divide-gray-100 rounded-r-lg shadow w-44 dark:bg-gray-700`,children:jsx("ul",{className:"py-2 text-sm text-gray-700 dark:text-gray-200","aria-labelledby":"dropdown-button",children:(t||[]).map(e=>jsx("li",{children:jsx("a",{href:"#",className:"block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white",onClick:d=>D(d,e),children:e.display})},`gst-${e.display}`))})})]});return jsx("div",{className:"flex",children:jsxs("div",{className:"relative w-full",children:[jsx("input",{ref:x,placeholder:s,value:C,"aria-label":"search","aria-describedby":"Search",onChange:R,onKeyDown:E,disabled:S,id:`${n}-search-input`,className:"block p-2.5 w-full text-sm text-gray-900 rounded-lg bg-gray-50 border-r-gray-300 border-r-2 border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:border-blue-500"}),(t==null?void 0:t.length)>0&&T()]})})});B.propTypes={categories:r.default.arrayOf(r.default.shape({display:r.default.string.isRequired,value:r.default.oneOfType([r.default.string,r.default.number]).isRequired})),delay:r.default.number,placeholder:r.default.string,callback:r.default.func.isRequired,disabled:r.default.bool,initialValue:r.default.string};
7
7
 
8
- export { z as a };
8
+ export { B as a };
9
9
  //# sourceMappingURL=out.js.map
10
- //# sourceMappingURL=chunk-4LPT34XA.mjs.map
10
+ //# sourceMappingURL=chunk-L7PHIHMH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/search/search.tsx"],"names":["import_prop_types","useState","useRef","useCallback","useEffect","forwardRef","Fragment","jsx","jsxs","useDebounceEffect","effect","delay","deps","instanceRef","handlerRef","callback","Search","id","categories","placeholder","disabled","initialValue","reference","state","setState","currentSearchValue","setCurrentSearchValue","hidden","setHidden","__spreadProps","__spreadValues","handleSearchChange","handleTypeChange","selection","handleKeyDown","ref","handleClickOutside","e","renderDropdown","x","PropTypes"],"mappings":"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","sourcesContent":["//@ts-nocheck\nimport { useState, useRef, useCallback, useEffect, forwardRef } from 'react'\nimport PropTypes from 'prop-types'\n\nfunction useDebounceEffect(effect, delay, deps) {\n const instanceRef = useRef(0)\n const handlerRef = useRef(null)\n const callback = useCallback(effect, deps)\n\n useEffect(() => {\n if (instanceRef.current === 0) {\n instanceRef.current = 1\n } else {\n handlerRef.current = setTimeout(() => {\n callback()\n }, delay)\n }\n return () => {\n clearTimeout(handlerRef.current)\n }\n }, [callback, delay])\n}\n\nexport const Search = forwardRef(function Search(\n { id, categories = [], delay = 1500, placeholder = 'Enter a keyword to search...', callback, disabled = false, initialValue = '' },\n reference,\n) {\n // Create state based on config\n const [state, setState] = useState({\n text: null,\n category: categories?.length > 0 ? categories[0] : null,\n })\n const [currentSearchValue, setCurrentSearchValue] = useState(initialValue)\n const [hidden, setHidden] = useState(true)\n\n useImperativeHandle(reference, () => ({\n clear: () => {\n setCurrentSearchValue('')\n setState({ ...state, text: '' })\n },\n removeFocus: () => {\n document.getElementById(`${id}-search-input`).blur()\n },\n }))\n\n const handleSearchChange = (e) => {\n setCurrentSearchValue(e.target.value)\n setState({ ...state, text: e.target.value })\n }\n\n const handleTypeChange = (e, selection) => {\n e.preventDefault()\n setState({ ...state, category: selection })\n setHidden(true)\n }\n\n const handleKeyDown = (e) => {\n if ((e.charCode || e.keyCode) === 13) {\n e.preventDefault()\n }\n }\n\n useDebounceEffect(\n () => {\n callback(state)\n },\n delay,\n [state.text, state.category],\n )\n useEffect(() => {\n if (initialValue !== currentSearchValue) setCurrentSearchValue(initialValue)\n }, [initialValue])\n\n const ref = useRef(null)\n useEffect(() => {\n const handleClickOutside = (e) => {\n if (ref.current && !ref.current.contains(e.target)) {\n setHidden(true)\n }\n }\n\n document.addEventListener('click', handleClickOutside, true)\n return () => {\n document.removeEventListener('click', handleClickOutside, true)\n }\n }, [])\n\n const renderDropdown = () => (\n <>\n <button\n id={`${id}-dropdown-button`}\n data-dropdown-toggle=\"dropdown\"\n className=\"absolute top-0 right-0 p-2.5 flex-shrink-0 z-10 inline-flex items-center py-2.5 px-4 text-sm font-medium text-center text-gray-900 bg-white border border-gray-300 dark:border-gray-700 dark:text-white rounded-r-lg hover:bg-gray-200 focus:ring-4 focus:outline-none focus:ring-gray-300 dark:bg-gray-600 dark:hover:bg-gray-700 dark:focus:ring-gray-800\"\n type=\"button\"\n onClick={() => setHidden(!hidden)}\n >\n {state.category.display}\n <svg className=\"w-2.5 h-2.5 ml-2.5\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 10 6\">\n <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"m1 1 4 4 4-4\" />\n </svg>\n </button>\n <div\n id={`${id}-dropdown`}\n ref={ref}\n className={`z-10 ${hidden ? 'hidden' : ''} absolute right-0 bg-white divide-y divide-gray-100 rounded-r-lg shadow w-44 dark:bg-gray-700`}\n >\n <ul className=\"py-2 text-sm text-gray-700 dark:text-gray-200\" aria-labelledby=\"dropdown-button\">\n {(categories || []).map((x) => {\n return (\n <li key={`gst-${x.display}`}>\n <a\n href=\"#\"\n className=\"block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white\"\n onClick={(e) => handleTypeChange(e, x)}\n >\n {x.display}\n </a>\n </li>\n )\n })}\n </ul>\n </div>\n </>\n )\n\n return (\n <div className=\"flex\">\n <div className=\"relative w-full\">\n <input\n ref={reference}\n placeholder={placeholder}\n value={currentSearchValue}\n aria-label=\"search\"\n aria-describedby=\"Search\"\n onChange={handleSearchChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n id={`${id}-search-input`}\n className=\"block p-2.5 w-full text-sm text-gray-900 rounded-lg bg-gray-50 border-r-gray-300 border-r-2 border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:border-blue-500\"\n />\n {categories?.length > 0 && renderDropdown()}\n </div>\n </div>\n )\n})\n\nSearch.propTypes = {\n /** Optional List of categories that the search term can be applied to. If supplied\n * the categories appear on the far right of the search input in a drop down list, otherwise it is hidden.\n */\n categories: PropTypes.arrayOf(\n PropTypes.shape({\n /**\n * The text shown to the user in the dropdown.\n */\n display: PropTypes.string.isRequired,\n /**\n * The value set when the item is selected.\n */\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n }),\n ),\n /**\n * The delay between requests made to the server when typing in milliseconds.\n */\n delay: PropTypes.number,\n /**\n * Optional placeholder for the search field.\n */\n placeholder: PropTypes.string,\n /**\n * Callback with the search object for use in the application the format is:\n * { text: '', category: {display:\"\", value:\"\"} }. Note: category is null if no options are provided.\n */\n callback: PropTypes.func.isRequired,\n /**\n * If set to true, the text in the search box cannot be changed\n */\n disabled: PropTypes.bool,\n /**\n * If set, will be the value in the search bar when it first loads.\n * If not set, the search bar will just be empty.\n */\n initialValue: PropTypes.string,\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { a as a$6 } from './chunk-A6OC3NNV.mjs';
2
- import { a as a$4 } from './chunk-4LPT34XA.mjs';
2
+ import { a as a$4 } from './chunk-L7PHIHMH.mjs';
3
3
  import { a as a$2 } from './chunk-4AISL4YA.mjs';
4
4
  import { a as a$1 } from './chunk-QRNTMHBL.mjs';
5
5
  import { a as a$5 } from './chunk-TWLN46WO.mjs';
@@ -15,4 +15,4 @@ var S=e$1(a());var j="/admin/api/common/directoryinformation/",e=Object.freeze({
15
15
 
16
16
  export { fe as a };
17
17
  //# sourceMappingURL=out.js.map
18
- //# sourceMappingURL=chunk-V7IF2WCZ.mjs.map
18
+ //# sourceMappingURL=chunk-XXI2PREK.mjs.map
@@ -1,6 +1,6 @@
1
- export { a as FilePicker } from '../chunk-V7IF2WCZ.mjs';
1
+ export { a as FilePicker } from '../chunk-XXI2PREK.mjs';
2
2
  import '../chunk-A6OC3NNV.mjs';
3
- import '../chunk-4LPT34XA.mjs';
3
+ import '../chunk-L7PHIHMH.mjs';
4
4
  import '../chunk-4AISL4YA.mjs';
5
5
  import '../chunk-QRNTMHBL.mjs';
6
6
  import '../chunk-TWLN46WO.mjs';
package/dist/index.mjs CHANGED
@@ -5,12 +5,12 @@ export { a as TableHeader } from './chunk-LNK7V5RH.mjs';
5
5
  export { b as ToastProvider, c as useToast } from './chunk-QWPN2UNV.mjs';
6
6
  export { a as ToolTip } from './chunk-ASCPOK5F.mjs';
7
7
  export { a as VideoModal } from './chunk-FAFXVD4P.mjs';
8
- export { a as FilePicker } from './chunk-V7IF2WCZ.mjs';
8
+ export { a as FilePicker } from './chunk-XXI2PREK.mjs';
9
9
  import './chunk-A6OC3NNV.mjs';
10
10
  export { a as Navbar } from './chunk-256SAVHD.mjs';
11
11
  export { a as Pagination } from './chunk-VPLCWU7T.mjs';
12
12
  export { a as RichTextEditor } from './chunk-PPMW7YAZ.mjs';
13
- export { a as Search } from './chunk-4LPT34XA.mjs';
13
+ export { a as Search } from './chunk-L7PHIHMH.mjs';
14
14
  export { a as Radio } from './chunk-VNNJFI3Y.mjs';
15
15
  export { a as Select } from './chunk-VWGASXHS.mjs';
16
16
  export { a as TextRow } from './chunk-RMX72FR3.mjs';
@@ -5,12 +5,12 @@ import '../chunk-LNK7V5RH.mjs';
5
5
  import '../chunk-QWPN2UNV.mjs';
6
6
  import '../chunk-ASCPOK5F.mjs';
7
7
  import '../chunk-FAFXVD4P.mjs';
8
- import '../chunk-V7IF2WCZ.mjs';
8
+ import '../chunk-XXI2PREK.mjs';
9
9
  import '../chunk-A6OC3NNV.mjs';
10
10
  import '../chunk-256SAVHD.mjs';
11
11
  import '../chunk-VPLCWU7T.mjs';
12
12
  import '../chunk-PPMW7YAZ.mjs';
13
- import '../chunk-4LPT34XA.mjs';
13
+ import '../chunk-L7PHIHMH.mjs';
14
14
  import '../chunk-VNNJFI3Y.mjs';
15
15
  import '../chunk-VWGASXHS.mjs';
16
16
  import '../chunk-RMX72FR3.mjs';
@@ -1,3 +1,5 @@
1
- declare const Search: any;
1
+ import * as react from 'react';
2
+
3
+ declare const Search: react.ForwardRefExoticComponent<react.RefAttributes<unknown>>;
2
4
 
3
5
  export { Search };
@@ -1,4 +1,4 @@
1
- export { a as Search } from '../chunk-4LPT34XA.mjs';
1
+ export { a as Search } from '../chunk-L7PHIHMH.mjs';
2
2
  import '../chunk-PUJZGK7Y.mjs';
3
3
  import '../chunk-23SJGKDR.mjs';
4
4
  //# sourceMappingURL=out.js.map
@@ -5,12 +5,12 @@ import './chunk-LNK7V5RH.mjs';
5
5
  import './chunk-QWPN2UNV.mjs';
6
6
  import './chunk-ASCPOK5F.mjs';
7
7
  import './chunk-FAFXVD4P.mjs';
8
- import './chunk-V7IF2WCZ.mjs';
8
+ import './chunk-XXI2PREK.mjs';
9
9
  import './chunk-A6OC3NNV.mjs';
10
10
  import './chunk-256SAVHD.mjs';
11
11
  import './chunk-VPLCWU7T.mjs';
12
12
  import './chunk-PPMW7YAZ.mjs';
13
- import './chunk-4LPT34XA.mjs';
13
+ import './chunk-L7PHIHMH.mjs';
14
14
  import './chunk-VNNJFI3Y.mjs';
15
15
  import './chunk-VWGASXHS.mjs';
16
16
  import './chunk-RMX72FR3.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ekm-ui",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "sideEffects": [
5
5
  "**/*.css"
6
6
  ],
@@ -1,5 +1,5 @@
1
1
  //@ts-nocheck
2
- import { useState, useRef, useCallback, useEffect } from 'react'
2
+ import { useState, useRef, useCallback, useEffect, forwardRef } from 'react'
3
3
  import PropTypes from 'prop-types'
4
4
 
5
5
  function useDebounceEffect(effect, delay, deps) {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/search/search.tsx"],"names":["import_prop_types","useState","useRef","useCallback","useEffect","Fragment","jsx","jsxs","useDebounceEffect","effect","delay","deps","instanceRef","handlerRef","callback","Search","id","categories","placeholder","disabled","initialValue","reference","state","setState","currentSearchValue","setCurrentSearchValue","hidden","setHidden","__spreadProps","__spreadValues","handleSearchChange","handleTypeChange","selection","handleKeyDown","ref","handleClickOutside","e","renderDropdown","x","PropTypes"],"mappings":"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","sourcesContent":["//@ts-nocheck\nimport { useState, useRef, useCallback, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nfunction useDebounceEffect(effect, delay, deps) {\n const instanceRef = useRef(0)\n const handlerRef = useRef(null)\n const callback = useCallback(effect, deps)\n\n useEffect(() => {\n if (instanceRef.current === 0) {\n instanceRef.current = 1\n } else {\n handlerRef.current = setTimeout(() => {\n callback()\n }, delay)\n }\n return () => {\n clearTimeout(handlerRef.current)\n }\n }, [callback, delay])\n}\n\nexport const Search = forwardRef(function Search(\n { id, categories = [], delay = 1500, placeholder = 'Enter a keyword to search...', callback, disabled = false, initialValue = '' },\n reference,\n) {\n // Create state based on config\n const [state, setState] = useState({\n text: null,\n category: categories?.length > 0 ? categories[0] : null,\n })\n const [currentSearchValue, setCurrentSearchValue] = useState(initialValue)\n const [hidden, setHidden] = useState(true)\n\n useImperativeHandle(reference, () => ({\n clear: () => {\n setCurrentSearchValue('')\n setState({ ...state, text: '' })\n },\n removeFocus: () => {\n document.getElementById(`${id}-search-input`).blur()\n },\n }))\n\n const handleSearchChange = (e) => {\n setCurrentSearchValue(e.target.value)\n setState({ ...state, text: e.target.value })\n }\n\n const handleTypeChange = (e, selection) => {\n e.preventDefault()\n setState({ ...state, category: selection })\n setHidden(true)\n }\n\n const handleKeyDown = (e) => {\n if ((e.charCode || e.keyCode) === 13) {\n e.preventDefault()\n }\n }\n\n useDebounceEffect(\n () => {\n callback(state)\n },\n delay,\n [state.text, state.category],\n )\n useEffect(() => {\n if (initialValue !== currentSearchValue) setCurrentSearchValue(initialValue)\n }, [initialValue])\n\n const ref = useRef(null)\n useEffect(() => {\n const handleClickOutside = (e) => {\n if (ref.current && !ref.current.contains(e.target)) {\n setHidden(true)\n }\n }\n\n document.addEventListener('click', handleClickOutside, true)\n return () => {\n document.removeEventListener('click', handleClickOutside, true)\n }\n }, [])\n\n const renderDropdown = () => (\n <>\n <button\n id={`${id}-dropdown-button`}\n data-dropdown-toggle=\"dropdown\"\n className=\"absolute top-0 right-0 p-2.5 flex-shrink-0 z-10 inline-flex items-center py-2.5 px-4 text-sm font-medium text-center text-gray-900 bg-white border border-gray-300 dark:border-gray-700 dark:text-white rounded-r-lg hover:bg-gray-200 focus:ring-4 focus:outline-none focus:ring-gray-300 dark:bg-gray-600 dark:hover:bg-gray-700 dark:focus:ring-gray-800\"\n type=\"button\"\n onClick={() => setHidden(!hidden)}\n >\n {state.category.display}\n <svg className=\"w-2.5 h-2.5 ml-2.5\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 10 6\">\n <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"m1 1 4 4 4-4\" />\n </svg>\n </button>\n <div\n id={`${id}-dropdown`}\n ref={ref}\n className={`z-10 ${hidden ? 'hidden' : ''} absolute right-0 bg-white divide-y divide-gray-100 rounded-r-lg shadow w-44 dark:bg-gray-700`}\n >\n <ul className=\"py-2 text-sm text-gray-700 dark:text-gray-200\" aria-labelledby=\"dropdown-button\">\n {(categories || []).map((x) => {\n return (\n <li key={`gst-${x.display}`}>\n <a\n href=\"#\"\n className=\"block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white\"\n onClick={(e) => handleTypeChange(e, x)}\n >\n {x.display}\n </a>\n </li>\n )\n })}\n </ul>\n </div>\n </>\n )\n\n return (\n <div className=\"flex\">\n <div className=\"relative w-full\">\n <input\n ref={reference}\n placeholder={placeholder}\n value={currentSearchValue}\n aria-label=\"search\"\n aria-describedby=\"Search\"\n onChange={handleSearchChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n id={`${id}-search-input`}\n className=\"block p-2.5 w-full text-sm text-gray-900 rounded-lg bg-gray-50 border-r-gray-300 border-r-2 border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:border-blue-500\"\n />\n {categories?.length > 0 && renderDropdown()}\n </div>\n </div>\n )\n})\n\nSearch.propTypes = {\n /** Optional List of categories that the search term can be applied to. If supplied\n * the categories appear on the far right of the search input in a drop down list, otherwise it is hidden.\n */\n categories: PropTypes.arrayOf(\n PropTypes.shape({\n /**\n * The text shown to the user in the dropdown.\n */\n display: PropTypes.string.isRequired,\n /**\n * The value set when the item is selected.\n */\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n }),\n ),\n /**\n * The delay between requests made to the server when typing in milliseconds.\n */\n delay: PropTypes.number,\n /**\n * Optional placeholder for the search field.\n */\n placeholder: PropTypes.string,\n /**\n * Callback with the search object for use in the application the format is:\n * { text: '', category: {display:\"\", value:\"\"} }. Note: category is null if no options are provided.\n */\n callback: PropTypes.func.isRequired,\n /**\n * If set to true, the text in the search box cannot be changed\n */\n disabled: PropTypes.bool,\n /**\n * If set, will be the value in the search bar when it first loads.\n * If not set, the search bar will just be empty.\n */\n initialValue: PropTypes.string,\n}\n"]}