ekm-ui 0.3.7 → 0.3.10

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 38895ms
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
@@ -78,7 +78,6 @@ Browserslist: caniuse-lite is outdated. Please run:
78
78
  ESM dist/sort/sort.mjs 180.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
- ESM dist/tooltip/tooltip.mjs 154.00 B
82
81
  ESM dist/video-modal.mjs 159.00 B
83
82
  ESM dist/file-picker/file-listing.mjs 191.00 B
84
83
  ESM dist/file-picker/file-picker.mjs 385.00 B
@@ -100,6 +99,7 @@ Browserslist: caniuse-lite is outdated. Please run:
100
99
  ESM dist/loading-button.mjs 165.00 B
101
100
  ESM dist/love-footer.mjs 190.00 B
102
101
  ESM dist/mini-feature-block.mjs 172.00 B
102
+ ESM dist/tooltip/tooltip.mjs 154.00 B
103
103
  ESM dist/modal.mjs 213.00 B
104
104
  ESM dist/no-results-block.mjs 168.00 B
105
105
  ESM dist/page-header.mjs 159.00 B
@@ -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-5RGQCXOB.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-XFCPRHEY.mjs 3.50 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
@@ -178,11 +178,10 @@ 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
- ESM dist/tooltip/tooltip.mjs.map 51.00 B
186
185
  ESM dist/video-modal.mjs.map 51.00 B
187
186
  ESM dist/file-picker/file-listing.mjs.map 51.00 B
188
187
  ESM dist/file-picker/file-picker.mjs.map 51.00 B
@@ -204,6 +203,7 @@ Browserslist: caniuse-lite is outdated. Please run:
204
203
  ESM dist/loading-button.mjs.map 51.00 B
205
204
  ESM dist/love-footer.mjs.map 51.00 B
206
205
  ESM dist/mini-feature-block.mjs.map 51.00 B
206
+ ESM dist/tooltip/tooltip.mjs.map 51.00 B
207
207
  ESM dist/modal.mjs.map 51.00 B
208
208
  ESM dist/no-results-block.mjs.map 51.00 B
209
209
  ESM dist/page-header.mjs.map 51.00 B
@@ -222,22 +222,22 @@ 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-5RGQCXOB.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
231
230
  ESM dist/chunk-VNNJFI3Y.mjs.map 1.26 KB
231
+ ESM dist/chunk-XFCPRHEY.mjs.map 9.50 KB
232
232
  ESM dist/chunk-VWGASXHS.mjs.map 2.75 KB
233
233
  ESM dist/chunk-RMX72FR3.mjs.map 1.12 KB
234
234
  ESM dist/chunk-PT55MK36.mjs.map 2.76 KB
235
- ESM dist/chunk-GM5CLV6U.mjs.map 7.03 KB
236
235
  ESM dist/chunk-25FJ277C.mjs.map 2.23 KB
236
+ ESM dist/chunk-GM5CLV6U.mjs.map 7.03 KB
237
237
  ESM dist/chunk-BIU2AAPZ.mjs.map 2.19 KB
238
238
  ESM dist/chunk-AP4P6HQV.mjs.map 756.00 B
239
- ESM dist/chunk-3P7HSGCA.mjs.map 4.08 KB
240
239
  ESM dist/chunk-OT256LE6.mjs.map 728.00 B
240
+ ESM dist/chunk-3P7HSGCA.mjs.map 4.08 KB
241
241
  ESM dist/chunk-FJQEJBBY.mjs.map 1.57 KB
242
242
  ESM dist/chunk-BQNNFYYF.mjs.map 6.16 KB
243
243
  ESM dist/chunk-EWNPNF2B.mjs.map 1.07 KB
@@ -245,7 +245,6 @@ 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
250
249
  ESM dist/chunk-PJMH47GY.mjs.map 1.90 KB
251
250
  ESM dist/chunk-KAQJAKQH.mjs.map 1.17 KB
@@ -253,12 +252,13 @@ Browserslist: caniuse-lite is outdated. Please run:
253
252
  ESM dist/checkbox.mjs.map 51.00 B
254
253
  ESM dist/chunk-44HZW5A3.mjs.map 1.57 KB
255
254
  ESM dist/color-picker.mjs.map 51.00 B
255
+ ESM dist/chunk-FRIXS4BL.mjs.map 56.85 KB
256
256
  ESM dist/chunk-YTTLKTRL.mjs.map 3.15 KB
257
- ESM dist/dashboard-notification.mjs.map 51.00 B
258
257
  ESM dist/chunk-T2OVPC6F.mjs.map 2.62 KB
258
+ ESM dist/dashboard-notification.mjs.map 51.00 B
259
259
  ESM dist/drag-and-drop.mjs.map 51.00 B
260
- ESM dist/chunk-4AISL4YA.mjs.map 11.46 KB
261
260
  ESM dist/draggable-stacked-list-item.mjs.map 51.00 B
261
+ ESM dist/chunk-4AISL4YA.mjs.map 11.46 KB
262
262
  ESM dist/chunk-Y5K3JRRK.mjs.map 2.81 KB
263
263
  ESM dist/drawer.mjs.map 51.00 B
264
264
  ESM dist/chunk-QRNTMHBL.mjs.map 3.58 KB
@@ -278,7 +278,7 @@ Browserslist: caniuse-lite is outdated. Please run:
278
278
  ESM dist/chunk-PUJZGK7Y.mjs.map 62.53 KB
279
279
  ESM dist/button-group-item.mjs.map 51.00 B
280
280
  ESM dist/chunk-SAXGEQRG.mjs.map 1.18 KB
281
- ESM dist/button.mjs.map 51.00 B
282
281
  ESM dist/chunk-56NFESMI.mjs.map 6.06 KB
282
+ ESM dist/button.mjs.map 51.00 B
283
283
  ESM dist/chunk-LNK7V5RH.mjs.map 710.92 KB
284
- ESM ⚡️ Build success in 50961ms
284
+ ESM ⚡️ Build success in 50603ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # ekm-ui
2
2
 
3
+ ## 0.3.10
4
+
5
+ ### Patch Changes
6
+
7
+ - aba492e: Fix for search component - missing useImperativeHandle import
8
+
9
+ ## 0.3.8
10
+
11
+ ### Patch Changes
12
+
13
+ - 6028481: Fix added for missing forwardRef in the Search component
14
+
3
15
  ## 0.3.7
4
16
 
5
17
  ### 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-5RGQCXOB.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-XFCPRHEY.mjs';
14
14
  import './chunk-VNNJFI3Y.mjs';
15
15
  import './chunk-VWGASXHS.mjs';
16
16
  import './chunk-RMX72FR3.mjs';
@@ -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-XFCPRHEY.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-5RGQCXOB.mjs.map
@@ -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, useImperativeHandle, 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 B(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 H=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();};B(()=>{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()]})})});H.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 { H as a };
9
9
  //# sourceMappingURL=out.js.map
10
- //# sourceMappingURL=chunk-4LPT34XA.mjs.map
10
+ //# sourceMappingURL=chunk-XFCPRHEY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/search/search.tsx"],"names":["import_prop_types","useState","useRef","useCallback","useEffect","forwardRef","useImperativeHandle","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, useImperativeHandle } 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,6 +1,6 @@
1
- export { a as FilePicker } from '../chunk-V7IF2WCZ.mjs';
1
+ export { a as FilePicker } from '../chunk-5RGQCXOB.mjs';
2
2
  import '../chunk-A6OC3NNV.mjs';
3
- import '../chunk-4LPT34XA.mjs';
3
+ import '../chunk-XFCPRHEY.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-5RGQCXOB.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-XFCPRHEY.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-5RGQCXOB.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-XFCPRHEY.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-XFCPRHEY.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-5RGQCXOB.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-XFCPRHEY.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.10",
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, useImperativeHandle } 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"]}