@anoki/fse-ui 1.0.0-beta1.45.3 → 1.0.0-beta1.45.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.
Files changed (82) hide show
  1. package/dist/components/ui/Table/Table.css +1 -1
  2. package/dist/components/ui/TableMobile/TableMobile.css +1 -1
  3. package/dist/index.cjs314.js +1 -1
  4. package/dist/index.cjs328.js +1 -1
  5. package/dist/index.cjs333.js +1 -1
  6. package/dist/index.cjs344.js +1 -1
  7. package/dist/index.cjs433.js +1 -1
  8. package/dist/{index.cjs494.js → index.cjs488.js} +1 -1
  9. package/dist/{index.cjs494.js.map → index.cjs488.js.map} +1 -1
  10. package/dist/index.cjs529.js +1 -1
  11. package/dist/index.cjs552.js +1 -1
  12. package/dist/index.cjs561.js +1 -1
  13. package/dist/index.cjs563.js +1 -1
  14. package/dist/index.cjs578.js +38 -1
  15. package/dist/index.cjs578.js.map +1 -1
  16. package/dist/index.cjs579.js +1 -1
  17. package/dist/index.cjs579.js.map +1 -1
  18. package/dist/index.cjs580.js +1 -1
  19. package/dist/index.cjs580.js.map +1 -1
  20. package/dist/index.cjs581.js +1 -1
  21. package/dist/index.cjs581.js.map +1 -1
  22. package/dist/index.cjs582.js +1 -38
  23. package/dist/index.cjs582.js.map +1 -1
  24. package/dist/index.cjs583.js +1 -1
  25. package/dist/index.cjs583.js.map +1 -1
  26. package/dist/index.cjs584.js +1 -1
  27. package/dist/index.cjs584.js.map +1 -1
  28. package/dist/index.cjs585.js +1 -1
  29. package/dist/index.cjs585.js.map +1 -1
  30. package/dist/index.cjs586.js +1 -1
  31. package/dist/index.cjs586.js.map +1 -1
  32. package/dist/index.cjs591.js +1 -1
  33. package/dist/index.cjs591.js.map +1 -1
  34. package/dist/index.cjs592.js +1 -1
  35. package/dist/index.cjs592.js.map +1 -1
  36. package/dist/index.cjs593.js +1 -1
  37. package/dist/index.cjs593.js.map +1 -1
  38. package/dist/index.cjs594.js +1 -1
  39. package/dist/index.cjs594.js.map +1 -1
  40. package/dist/index.cjs74.js +1 -1
  41. package/dist/index.cjs74.js.map +1 -1
  42. package/dist/index.es314.js +1 -1
  43. package/dist/index.es328.js +1 -1
  44. package/dist/index.es333.js +1 -1
  45. package/dist/index.es344.js +1 -1
  46. package/dist/index.es433.js +1 -1
  47. package/dist/{index.es494.js → index.es488.js} +1 -1
  48. package/dist/{index.es494.js.map → index.es488.js.map} +1 -1
  49. package/dist/index.es529.js +3 -3
  50. package/dist/index.es552.js +1 -1
  51. package/dist/index.es561.js +1 -1
  52. package/dist/index.es563.js +4 -4
  53. package/dist/index.es578.js +64 -518
  54. package/dist/index.es578.js.map +1 -1
  55. package/dist/index.es579.js +8 -126
  56. package/dist/index.es579.js.map +1 -1
  57. package/dist/index.es580.js +13 -128
  58. package/dist/index.es580.js.map +1 -1
  59. package/dist/index.es581.js +61 -64
  60. package/dist/index.es581.js.map +1 -1
  61. package/dist/index.es582.js +65 -69
  62. package/dist/index.es582.js.map +1 -1
  63. package/dist/index.es583.js +4 -9
  64. package/dist/index.es583.js.map +1 -1
  65. package/dist/index.es584.js +520 -11
  66. package/dist/index.es584.js.map +1 -1
  67. package/dist/index.es585.js +126 -61
  68. package/dist/index.es585.js.map +1 -1
  69. package/dist/index.es586.js +128 -3
  70. package/dist/index.es586.js.map +1 -1
  71. package/dist/index.es591.js +21 -11
  72. package/dist/index.es591.js.map +1 -1
  73. package/dist/index.es592.js +11 -26
  74. package/dist/index.es592.js.map +1 -1
  75. package/dist/index.es593.js +27 -4
  76. package/dist/index.es593.js.map +1 -1
  77. package/dist/index.es594.js +4 -22
  78. package/dist/index.es594.js.map +1 -1
  79. package/dist/index.es74.js +104 -104
  80. package/dist/index.es74.js.map +1 -1
  81. package/package.json +1 -1
  82. /package/dist/components/ui/{DoctorModal/DoctorModalFooter/DoctorModalFooter.css → ConsentModal/ConsentModalFooter/ConsentModalFooter.css} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};exports.getNonce=e;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./index.cjs594.js");function r(){if(!document)return null;var t=document.createElement("style");t.type="text/css";var e=o.getNonce();return e&&t.setAttribute("nonce",e),t}function l(t,e){t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e))}function i(t){var e=document.head||document.getElementsByTagName("head")[0];e.appendChild(t)}var u=function(){var t=0,e=null;return{add:function(n){t==0&&(e=r())&&(l(e,n),i(e)),t++},remove:function(){t--,!t&&e&&(e.parentNode&&e.parentNode.removeChild(e),e=null)}}};exports.stylesheetSingleton=u;
2
2
  //# sourceMappingURL=index.cjs593.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs593.js","sources":["../node_modules/get-nonce/dist/es2015/index.js"],"sourcesContent":["var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n"],"names":["getNonce"],"mappings":"gFAIU,IAACA,EAAW,UAAY,CAI9B,GAAI,OAAO,kBAAsB,IAC7B,OAAO,iBAGf","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.cjs593.js","sources":["../node_modules/react-style-singleton/dist/es2015/singleton.js"],"sourcesContent":["import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n"],"names":["makeStyleTag","tag","nonce","getNonce","injectStyles","css","insertStyleTag","head","stylesheetSingleton","counter","stylesheet","style"],"mappings":"qHACA,SAASA,GAAe,CACpB,GAAI,CAAC,SACD,OAAO,KACX,IAAIC,EAAM,SAAS,cAAc,OAAO,EACxCA,EAAI,KAAO,WACX,IAAIC,EAAQC,EAAAA,SAAU,EACtB,OAAID,GACAD,EAAI,aAAa,QAASC,CAAK,EAE5BD,CACX,CACA,SAASG,EAAaH,EAAKI,EAAK,CAExBJ,EAAI,WAEJA,EAAI,WAAW,QAAUI,EAGzBJ,EAAI,YAAY,SAAS,eAAeI,CAAG,CAAC,CAEpD,CACA,SAASC,EAAeL,EAAK,CACzB,IAAIM,EAAO,SAAS,MAAQ,SAAS,qBAAqB,MAAM,EAAE,CAAC,EACnEA,EAAK,YAAYN,CAAG,CACxB,CACU,IAACO,EAAsB,UAAY,CACzC,IAAIC,EAAU,EACVC,EAAa,KACjB,MAAO,CACH,IAAK,SAAUC,EAAO,CACdF,GAAW,IACNC,EAAaV,OACdI,EAAaM,EAAYC,CAAK,EAC9BL,EAAeI,CAAU,GAGjCD,GACH,EACD,OAAQ,UAAY,CAChBA,IACI,CAACA,GAAWC,IACZA,EAAW,YAAcA,EAAW,WAAW,YAAYA,CAAU,EACrEA,EAAa,KAEpB,CACJ,CACL","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var a={left:0,top:0,right:0,gap:0},r=function(t){return parseInt(t||"",10)||0},o=function(t){var i=window.getComputedStyle(document.body),n=i[t==="padding"?"paddingLeft":"marginLeft"],e=i[t==="padding"?"paddingTop":"marginTop"],d=i[t==="padding"?"paddingRight":"marginRight"];return[r(n),r(e),r(d)]},g=function(t){if(t===void 0&&(t="margin"),typeof window>"u")return a;var i=o(t),n=document.documentElement.clientWidth,e=window.innerWidth;return{left:i[0],top:i[1],right:i[2],gap:Math.max(0,e-n+i[2]-i[0])}};exports.getGapWidth=g;exports.zeroGap=a;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};exports.getNonce=e;
2
2
  //# sourceMappingURL=index.cjs594.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs594.js","sources":["../node_modules/react-remove-scroll-bar/dist/es2015/utils.js"],"sourcesContent":["export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n"],"names":["zeroGap","parse","x","getOffset","gapMode","cs","left","top","right","getGapWidth","offsets","documentWidth","windowWidth"],"mappings":"gFAAU,IAACA,EAAU,CACjB,KAAM,EACN,IAAK,EACL,MAAO,EACP,IAAK,CACT,EACIC,EAAQ,SAAUC,EAAG,CAAE,OAAO,SAASA,GAAK,GAAI,EAAE,GAAK,CAAI,EAC3DC,EAAY,SAAUC,EAAS,CAC/B,IAAIC,EAAK,OAAO,iBAAiB,SAAS,IAAI,EAC1CC,EAAOD,EAAGD,IAAY,UAAY,cAAgB,YAAY,EAC9DG,EAAMF,EAAGD,IAAY,UAAY,aAAe,WAAW,EAC3DI,EAAQH,EAAGD,IAAY,UAAY,eAAiB,aAAa,EACrE,MAAO,CAACH,EAAMK,CAAI,EAAGL,EAAMM,CAAG,EAAGN,EAAMO,CAAK,CAAC,CACjD,EACWC,EAAc,SAAUL,EAAS,CAExC,GADIA,IAAY,SAAUA,EAAU,UAChC,OAAO,OAAW,IAClB,OAAOJ,EAEX,IAAIU,EAAUP,EAAUC,CAAO,EAC3BO,EAAgB,SAAS,gBAAgB,YACzCC,EAAc,OAAO,WACzB,MAAO,CACH,KAAMF,EAAQ,CAAC,EACf,IAAKA,EAAQ,CAAC,EACd,MAAOA,EAAQ,CAAC,EAChB,IAAK,KAAK,IAAI,EAAGE,EAAcD,EAAgBD,EAAQ,CAAC,EAAIA,EAAQ,CAAC,CAAC,CACzE,CACL","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.cjs594.js","sources":["../node_modules/get-nonce/dist/es2015/index.js"],"sourcesContent":["var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n"],"names":["getNonce"],"mappings":"gFAIU,IAACA,EAAW,UAAY,CAI9B,GAAI,OAAO,kBAAsB,IAC7B,OAAO,iBAGf","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./components/ui/TableMobile/TableMobile.css');const e=require("./index.cjs241.js"),R=require("./index.cjs243.js");;/* empty css */const V=require("react"),q=require("./index.cjs10.js"),D=require("./index.cjs9.js"),z=require("./index.cjs67.js"),v=require("./index.cjs197.js"),A=require("./index.cjs198.js"),B=require("./index.cjs190.js"),U=require("./index.cjs199.js");function C(t){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const c=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(i,o,c.get?c:{enumerable:!0,get:()=>t[o]})}}return i.default=t,Object.freeze(i)}const F=C(V),G=({data:t,columns:i,pagination:o=!0,resultsPerPage:c=5,totalResults:b,initialCurrentPage:_=1,serverSidePagination:l=!1,totalItems:n,hasNextPage:r,hasPreviousPage:E,onNextPage:x,onPreviousPage:p,onPageChange:m,setCurrentPage:a,sortConfig:u=null,onSortChange:L})=>{const[N,y]=V.useState(_),w=d=>{y(d),a==null||a(d)},f=F.useMemo(()=>u?[...t].sort((d,h)=>{const M=d[u.key],T=h[u.key],I=typeof M=="object"&&"firstLine"in M?M.firstLine:M,$=typeof T=="object"&&"firstLine"in T?T.firstLine:T;return I<$?u.direction==="asc"?-1:1:I>$?u.direction==="asc"?1:-1:0}):t,[t,u]),s=l?0:(N-1)*c,k=l?f.length:Math.min(s+c,f.length),j=f.slice(s,k);return e.jsxRuntimeExports.jsxs(q.Col,{className:"w-full h-full",gap:"x16",children:[j.map((d,h)=>e.jsxRuntimeExports.jsx(O,{columns:i,data:d,sortConfig:u,onSortChange:L},h)),o&&e.jsxRuntimeExports.jsx(g,{currentPage:N,totalResults:b||f.length,resultsPerPage:c,setCurrentPage:w,onPageChange:m,serverSide:l,totalItems:n,hasNextPage:r,hasPreviousPage:E,onNextPage:x,onPreviousPage:p,currentResultsPerPage:l?f.length:c,className:"mt-x16"})]})},H=({data:t})=>t.type==="link"&&t.link?e.jsxRuntimeExports.jsx("a",{href:t.link,"aria-label":t.ariaLabel,children:t.label}):e.jsxRuntimeExports.jsx("button",{onClick:t.action,"aria-label":t.ariaLabel,children:t.label}),O=({columns:t,sortConfig:i,data:o,onSortChange:c})=>{const b=n=>{if(!n)return"";if(typeof n=="object"&&"firstLine"in n){const r=n;return`${r.firstLine}${r.secondLine?` ${r.secondLine}`:""}`}return typeof n=="object"&&"label"in n&&"type"in n?e.jsxRuntimeExports.jsx(H,{data:n}):n},_=n=>{switch(n){case"info":return e.jsxRuntimeExports.jsx(U.Info,{});case"download":return e.jsxRuntimeExports.jsx(B.Download,{});default:return n}},l=n=>{if(!c||!i)return;const r=i.key===n&&i.direction==="asc"?"desc":"asc";c(n,r)};return e.jsxRuntimeExports.jsx("div",{className:R.clsx("ui-card-table shadow br-x4 text-slate-28 fs-custom "),children:t.map((n,r)=>{if(!n.key||n.key==="actionData")return e.jsxRuntimeExports.jsx(D.Row,{p:"x16",className:"ui-table-header",justifyContent:"space-between",children:e.jsxRuntimeExports.jsx(q.Col,{justifyContent:"end",gap:"x4",className:"w-full",children:e.jsxRuntimeExports.jsx(D.Row,{justifyContent:"end",className:"table-mobile-actions",children:b(o.actionData)})})},r);const E=o[n.key],x=n,p=(i==null?void 0:i.key)===n.key,m=p?i.direction:null;return e.jsxRuntimeExports.jsx(D.Row,{p:"x16",className:"ui-table-header",justifyContent:"space-between",children:e.jsxRuntimeExports.jsxs(q.Col,{justifyContent:"center",gap:"x4",className:"w-full",children:[e.jsxRuntimeExports.jsx(z.ActionIconText,{justifyContent:"space-between",alignItems:"center",icon:_(x.icon),noIcon:!_(x.icon),textLabel:x.label,iconPosition:x.iconPosition,popupInfo:x.popupInfo,positionPopUp:"left",classNameText:"fw-bold text-slate-28 fs-custom md-fs-6",children:x.sortable&&e.jsxRuntimeExports.jsxs("span",{className:"sort-indicator",onClick:a=>{a.stopPropagation(),l(n.key)},children:[e.jsxRuntimeExports.jsx(v.TriangleUp,{filled:p&&m==="desc",className:R.clsx("sort-indicator__triangle",{active:p&&m==="desc"})}),e.jsxRuntimeExports.jsx(A.TriangleDown,{filled:p&&m==="asc",className:R.clsx("sort-indicator__triangle",{active:p&&m==="asc"})})]})}),e.jsxRuntimeExports.jsx(D.Row,{children:b(E)})]})},r)})})},g=({currentPage:t=1,totalResults:i=0,resultsPerPage:o,setCurrentPage:c,onPageChange:b,className:_,serverSide:l=!1,totalItems:n,hasNextPage:r,hasPreviousPage:E,onNextPage:x,onPreviousPage:p,currentResultsPerPage:m=o})=>{const a=Math.ceil(l?(n||i)/o:i/o),u=s=>{c==null||c(s),b&&b(s)},L=()=>{const s=t+1;l&&x&&x(),u(s)},N=()=>{const s=t-1;l&&p&&p(),u(s)},y=l?!r:t===a,w=l?!E:t===1,f=()=>{const s=[];if(a<=5)for(let j=1;j<=a;j++)s.push(j);else{s.push(1);let j=Math.max(2,t-1),d=Math.min(a-1,t+1);t<=3?d=4:t>=a-2&&(j=a-3),j>2&&s.push("...");for(let h=j;h<=d;h++)s.push(h);d<a-1&&s.push("..."),s.push(a)}return s};return e.jsxRuntimeExports.jsxs("div",{className:R.clsx("pagination",_),children:[e.jsxRuntimeExports.jsxs("div",{className:"pagination__info",children:["Stai visualizzando"," ",e.jsxRuntimeExports.jsx("span",{className:"pagination__info__resultsPerPage",children:l?m:t===a&&i%o!==0?i%o:o})," ","di ",l&&n||i," risultati"]}),e.jsxRuntimeExports.jsxs("div",{className:"pagination__nav",children:[e.jsxRuntimeExports.jsx("button",{className:R.clsx("pagination__button",w&&"pagination__button--disabled"),onClick:N,disabled:w,"aria-label":"Previous page",children:e.jsxRuntimeExports.jsx("svg",{className:"pagination__button-arrow",viewBox:"0 0 24 24",children:e.jsxRuntimeExports.jsx("path",{d:"M15 18l-6-6 6-6"})})}),f().map((s,k)=>s==="..."?e.jsxRuntimeExports.jsx("span",{className:"pagination__ellipsis",children:"..."},`ellipsis-${k}`):e.jsxRuntimeExports.jsx("button",{className:R.clsx("pagination__button",t===s&&"pagination__button--active"),onClick:()=>u(s),disabled:s===t,children:s},s)),e.jsxRuntimeExports.jsx("button",{className:R.clsx("pagination__button",y&&"pagination__button--disabled"),onClick:L,disabled:y,"aria-label":"Next page",children:e.jsxRuntimeExports.jsx("svg",{className:"pagination__button-arrow",viewBox:"0 0 24 24",children:e.jsxRuntimeExports.jsx("path",{d:"M9 6l6 6-6 6"})})})]})]})};exports.CardTable=O;exports.TableMobile=G;exports.TableMobilePagination=g;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./components/ui/TableMobile/TableMobile.css');const t=require("./index.cjs241.js"),R=require("./index.cjs243.js");;/* empty css */const V=require("react"),q=require("./index.cjs10.js"),D=require("./index.cjs9.js"),z=require("./index.cjs67.js"),v=require("./index.cjs197.js"),A=require("./index.cjs198.js"),B=require("./index.cjs190.js"),U=require("./index.cjs199.js");function C(e){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const l=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(i,o,l.get?l:{enumerable:!0,get:()=>e[o]})}}return i.default=e,Object.freeze(i)}const F=C(V),G=({data:e,columns:i,pagination:o=!0,resultsPerPage:l=5,totalResults:j,initialCurrentPage:_=1,serverSidePagination:c=!1,totalItems:n,hasNextPage:r,hasPreviousPage:E,onNextPage:x,onPreviousPage:p,onPageChange:d,setCurrentPage:a,sortConfig:u=null,onSortChange:L})=>{const[N,y]=V.useState(_),w=m=>{y(m),a==null||a(m)},f=F.useMemo(()=>u?[...e].sort((m,h)=>{const M=m[u.key],T=h[u.key],I=typeof M=="object"&&"firstLine"in M?M.firstLine:M,$=typeof T=="object"&&"firstLine"in T?T.firstLine:T;return I<$?u.direction==="asc"?-1:1:I>$?u.direction==="asc"?1:-1:0}):e,[e,u]),s=c?0:(N-1)*l,k=c?f.length:Math.min(s+l,f.length),b=f.slice(s,k);return t.jsxRuntimeExports.jsxs(q.Col,{className:"w-full h-full",gap:"x16",children:[b.map((m,h)=>t.jsxRuntimeExports.jsx(O,{columns:i,data:m,sortConfig:u,onSortChange:L},h)),o&&t.jsxRuntimeExports.jsx(g,{currentPage:N,totalResults:j||f.length,resultsPerPage:l,setCurrentPage:w,onPageChange:d,serverSide:c,totalItems:n,hasNextPage:r,hasPreviousPage:E,onNextPage:x,onPreviousPage:p,currentResultsPerPage:c?f.length:l,className:"mt-x16"})]})},H=({data:e})=>e.type==="link"&&e.link?t.jsxRuntimeExports.jsx("a",{href:e.link,"aria-label":e.ariaLabel,children:e.label}):t.jsxRuntimeExports.jsx("button",{onClick:e.action,"aria-label":e.ariaLabel,children:e.label}),O=({columns:e,sortConfig:i,data:o,onSortChange:l})=>{const j=n=>{if(!n)return"";if(typeof n=="object"&&"firstLine"in n){const r=n;return`${r.firstLine}${r.secondLine?` ${r.secondLine}`:""}`}return typeof n=="object"&&"label"in n&&"type"in n?t.jsxRuntimeExports.jsx(H,{data:n}):n},_=n=>{switch(n){case"info":return t.jsxRuntimeExports.jsx(U.Info,{});case"download":return t.jsxRuntimeExports.jsx(B.Download,{});default:return n}},c=n=>{if(!l||!i)return;const r=i.key===n&&i.direction==="asc"?"desc":"asc";l(n,r)};return t.jsxRuntimeExports.jsx("div",{className:R.clsx("ui-card-table shadow br-x4 text-slate-28 fs-custom "),children:e.map((n,r)=>{if(!n.key||n.key==="actionData")return t.jsxRuntimeExports.jsx(D.Row,{p:"x16",className:"ui-table-header",justifyContent:"space-between",children:t.jsxRuntimeExports.jsx(q.Col,{justifyContent:"end",gap:"x4",className:"w-full",children:t.jsxRuntimeExports.jsx(D.Row,{justifyContent:"end",className:"table-mobile-actions",children:j(o.actionData)})})},r);const E=o[n.key],x=n,p=(i==null?void 0:i.key)===n.key,d=p?i.direction:null;return t.jsxRuntimeExports.jsx(D.Row,{p:"x16",className:"ui-table-header",justifyContent:"space-between",children:t.jsxRuntimeExports.jsxs(q.Col,{justifyContent:"center",gap:"x4",className:"w-full",children:[t.jsxRuntimeExports.jsx(z.ActionIconText,{justifyContent:"space-between",alignItems:"center",icon:_(x.icon),noIcon:!_(x.icon),textLabel:x.label,iconPosition:x.iconPosition,popupInfo:x.popupInfo,positionPopUp:"left",classNameText:"fw-bold text-slate-28 fs-custom md-fs-6",children:x.sortable&&t.jsxRuntimeExports.jsxs("span",{className:"sort-indicator",onClick:a=>{a.stopPropagation(),c(n.key)},children:[t.jsxRuntimeExports.jsx(v.TriangleUp,{filled:p&&d==="desc",className:R.clsx("sort-indicator__triangle",{active:p&&d==="desc"})}),t.jsxRuntimeExports.jsx(A.TriangleDown,{filled:p&&d==="asc",className:R.clsx("sort-indicator__triangle",{active:p&&d==="asc"})})]})}),t.jsxRuntimeExports.jsx(D.Row,{children:j(E)})]})},r)})})},g=({currentPage:e=1,totalResults:i=0,resultsPerPage:o,setCurrentPage:l,onPageChange:j,className:_,serverSide:c=!1,totalItems:n,hasNextPage:r,hasPreviousPage:E,onNextPage:x,onPreviousPage:p,currentResultsPerPage:d=o})=>{const a=Math.ceil(c?(n||i)/o:i/o),u=s=>{l==null||l(s),j&&j(s)},L=()=>{const s=e+1;c&&x&&x(),u(s)},N=()=>{const s=e-1;c&&p&&p(),u(s)},y=c?!r:e===a,w=c?!E:e===1,f=()=>{const s=[];if(a<=5)for(let b=1;b<=a;b++)s.push(b);else{s.push(1);let b=Math.max(2,e-1),m=Math.min(a-1,e+1);e<=3?m=4:e>=a-2&&(b=a-3),b>2&&s.push("...");for(let h=b;h<=m;h++)s.push(h);m<a-1&&s.push("..."),s.push(a)}return s};return t.jsxRuntimeExports.jsxs("div",{className:R.clsx("pagination-mobile",_),children:[t.jsxRuntimeExports.jsxs("div",{className:"pagination-mobile__info",children:["Stai visualizzando"," ",t.jsxRuntimeExports.jsx("span",{className:"pagination-mobile__info__resultsPerPage",children:c?d:e===a&&i%o!==0?i%o:o})," ","di ",c&&n||i," risultati"]}),t.jsxRuntimeExports.jsxs("div",{className:"pagination-mobile__nav",children:[t.jsxRuntimeExports.jsx("button",{className:R.clsx("pagination-mobile__button",w&&"pagination-mobile__button--disabled"),onClick:N,disabled:w,"aria-label":"Previous page",children:t.jsxRuntimeExports.jsx("svg",{className:"pagination-mobile__button-arrow",viewBox:"0 0 24 24",children:t.jsxRuntimeExports.jsx("path",{d:"M15 18l-6-6 6-6"})})}),f().map((s,k)=>s==="..."?t.jsxRuntimeExports.jsx("span",{className:"pagination-mobile__ellipsis",children:"..."},`ellipsis-${k}`):t.jsxRuntimeExports.jsx("button",{className:R.clsx("pagination-mobile__button",e===s&&"pagination-mobile__button--active"),onClick:()=>u(s),disabled:s===e,children:s},s)),t.jsxRuntimeExports.jsx("button",{className:R.clsx("pagination-mobile__button",y&&"pagination-mobile__button--disabled"),onClick:L,disabled:y,"aria-label":"Next page",children:t.jsxRuntimeExports.jsx("svg",{className:"pagination-mobile__button-arrow",viewBox:"0 0 24 24",children:t.jsxRuntimeExports.jsx("path",{d:"M9 6l6 6-6 6"})})})]})]})};exports.CardTable=O;exports.TableMobile=G;exports.TableMobilePagination=g;
2
2
  //# sourceMappingURL=index.cjs74.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs74.js","sources":["../src/components/ui/TableMobile/index.tsx"],"sourcesContent":["import {\n ActionData,\n ActionIconText,\n Col,\n ColumnConfig,\n DoubleLineData,\n Row,\n TableRowData,\n} from \"@/components\";\nimport clsx from \"clsx\";\nimport \"./TableMobile.scss\";\nimport { Download, Info, TriangleDown, TriangleUp } from \"@/icons\";\nimport { ReactNode } from \"react\";\nimport * as React from \"react\";\nimport { CommonIconsType } from \"@/types/icons.ts\";\nimport { useState } from \"react\";\n\nexport type TableMobileProps = {\n data: TableRowData[];\n columns: ColumnConfig[];\n pagination?: boolean;\n resultsPerPage?: number;\n totalResults?: number;\n initialCurrentPage?: number;\n serverSidePagination?: boolean;\n totalItems?: number;\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n onNextPage?: () => void;\n onPreviousPage?: () => void;\n onPageChange?: (page: number) => void;\n setCurrentPage?: (page: number) => void;\n sortConfig?: { key: string; direction: \"asc\" | \"desc\" } | null;\n onSortChange?: (key: string, direction: \"asc\" | \"desc\") => void;\n};\n\nexport const TableMobile = ({\n data,\n columns,\n pagination = true,\n resultsPerPage = 5,\n totalResults,\n initialCurrentPage = 1,\n serverSidePagination = false,\n totalItems,\n hasNextPage,\n hasPreviousPage,\n onNextPage,\n onPreviousPage,\n onPageChange,\n setCurrentPage: externalSetCurrentPage,\n sortConfig = null,\n onSortChange,\n}: TableMobileProps) => {\n const [currentPage, setInternalCurrentPage] = useState(initialCurrentPage);\n const handleSetCurrentPage = (page: number) => {\n setInternalCurrentPage(page);\n externalSetCurrentPage?.(page);\n };\n\n const sortedData = React.useMemo(() => {\n if (!sortConfig) return data;\n\n return [...data].sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n\n const aText =\n typeof aValue === \"object\" && \"firstLine\" in aValue\n ? aValue.firstLine\n : aValue;\n const bText =\n typeof bValue === \"object\" && \"firstLine\" in bValue\n ? bValue.firstLine\n : bValue;\n\n if (aText < bText) {\n return sortConfig.direction === \"asc\" ? -1 : 1;\n }\n if (aText > bText) {\n return sortConfig.direction === \"asc\" ? 1 : -1;\n }\n return 0;\n });\n }, [data, sortConfig]);\n\n const startIndex = serverSidePagination\n ? 0\n : (currentPage - 1) * resultsPerPage;\n const endIndex = serverSidePagination\n ? sortedData.length\n : Math.min(startIndex + resultsPerPage, sortedData.length);\n const currentPageData = sortedData.slice(startIndex, endIndex);\n\n return (\n <Col className={\"w-full h-full\"} gap={\"x16\"}>\n {currentPageData.map((data, index) => (\n <CardTable\n columns={columns}\n key={index}\n data={data}\n sortConfig={sortConfig}\n onSortChange={onSortChange}\n />\n ))}\n\n {pagination && (\n <TableMobilePagination\n currentPage={currentPage}\n totalResults={totalResults || sortedData.length}\n resultsPerPage={resultsPerPage}\n setCurrentPage={handleSetCurrentPage}\n onPageChange={onPageChange}\n serverSide={serverSidePagination}\n totalItems={totalItems}\n hasNextPage={hasNextPage}\n hasPreviousPage={hasPreviousPage}\n onNextPage={onNextPage}\n onPreviousPage={onPreviousPage}\n currentResultsPerPage={\n serverSidePagination ? sortedData.length : resultsPerPage\n }\n className=\"mt-x16\"\n />\n )}\n </Col>\n );\n};\n\nexport type CardTableProps = {\n columns: ColumnConfig[];\n data: TableRowData;\n sortConfig: { key: string; direction: \"asc\" | \"desc\" } | null;\n onSortChange?: (key: string, direction: \"asc\" | \"desc\") => void;\n};\n\nconst ActionContent: React.FC<{ data: ActionData }> = ({ data }) => {\n if (data.type === \"link\" && data.link) {\n return (\n <a href={data.link} aria-label={data.ariaLabel}>\n {data.label}\n </a>\n );\n }\n return (\n <button onClick={data.action} aria-label={data.ariaLabel}>\n {data.label}\n </button>\n );\n};\n\nexport const CardTable = ({\n columns,\n sortConfig,\n data,\n onSortChange,\n}: CardTableProps) => {\n const renderColumnValue = (value: any): ReactNode => {\n if (!value) return \"\";\n\n if (typeof value === \"object\" && \"firstLine\" in value) {\n const doubleLineValue = value as DoubleLineData;\n return `${doubleLineValue.firstLine}${doubleLineValue.secondLine ? ` ${doubleLineValue.secondLine}` : \"\"}`;\n }\n\n if (typeof value === \"object\" && \"label\" in value && \"type\" in value) {\n return <ActionContent data={value} />;\n }\n\n return value;\n };\n\n const renderIcon = (icon: React.ReactNode | CommonIconsType) => {\n switch (icon) {\n case \"info\":\n return <Info />;\n case \"download\":\n return <Download />;\n default:\n return icon;\n }\n };\n\n const handleSortClick = (key: string) => {\n if (!onSortChange || !sortConfig) return;\n\n const newDirection =\n sortConfig.key === key\n ? sortConfig.direction === \"asc\"\n ? \"desc\"\n : \"asc\"\n : \"asc\";\n\n onSortChange(key, newDirection);\n };\n\n return (\n <div\n className={clsx(\"ui-card-table shadow br-x4 text-slate-28 fs-custom \")}\n >\n {columns.map((column, index) => {\n if (!column.key || column.key === \"actionData\") {\n return (\n <Row\n key={index}\n p={\"x16\"}\n className={\"ui-table-header\"}\n justifyContent={\"space-between\"}\n >\n <Col justifyContent={\"end\"} gap={\"x4\"} className={\"w-full\"}>\n <Row justifyContent={\"end\"} className=\"table-mobile-actions\">\n {renderColumnValue(data.actionData)}\n </Row>\n </Col>\n </Row>\n );\n }\n\n const columnValue = data[column.key];\n const config = column;\n const isSorted = sortConfig?.key === column.key;\n const sortDirection = isSorted ? sortConfig.direction : null;\n\n return (\n <Row\n key={index}\n p={\"x16\"}\n className={\"ui-table-header\"}\n justifyContent={\"space-between\"}\n >\n <Col justifyContent={\"center\"} gap={\"x4\"} className={\"w-full\"}>\n <ActionIconText\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n icon={renderIcon(config.icon)}\n noIcon={!renderIcon(config.icon)}\n textLabel={config.label}\n iconPosition={config.iconPosition}\n popupInfo={config.popupInfo}\n positionPopUp={\"left\"}\n classNameText={\"fw-bold text-slate-28 fs-custom md-fs-6\"}\n >\n {config.sortable && (\n <span\n className=\"sort-indicator\"\n onClick={(e) => {\n e.stopPropagation();\n handleSortClick(column.key!);\n }}\n >\n <TriangleUp\n filled={isSorted && sortDirection === \"desc\"}\n className={clsx(\"sort-indicator__triangle\", {\n active: isSorted && sortDirection === \"desc\",\n })}\n />\n <TriangleDown\n filled={isSorted && sortDirection === \"asc\"}\n className={clsx(\"sort-indicator__triangle\", {\n active: isSorted && sortDirection === \"asc\",\n })}\n />\n </span>\n )}\n </ActionIconText>\n <Row>{renderColumnValue(columnValue)}</Row>\n </Col>\n </Row>\n );\n })}\n </div>\n );\n};\n\nexport type TableMobilePaginationProps = {\n currentPage?: number;\n totalResults?: number;\n resultsPerPage: number;\n setCurrentPage?: (page: number) => void;\n onPageChange?: (page: number) => void;\n className?: string;\n serverSide?: boolean;\n totalItems?: number;\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n onNextPage?: () => void;\n onPreviousPage?: () => void;\n currentResultsPerPage?: number;\n};\n\nexport const TableMobilePagination: React.FC<TableMobilePaginationProps> = ({\n currentPage = 1,\n totalResults = 0,\n resultsPerPage,\n setCurrentPage,\n onPageChange,\n className,\n serverSide = false,\n totalItems,\n hasNextPage,\n hasPreviousPage,\n onNextPage,\n onPreviousPage,\n currentResultsPerPage = resultsPerPage,\n}) => {\n const totalPages = serverSide\n ? Math.ceil((totalItems || totalResults) / resultsPerPage)\n : Math.ceil(totalResults / resultsPerPage);\n\n const handlePageChange = (page: number) => {\n setCurrentPage?.(page);\n if (onPageChange) {\n onPageChange(page);\n }\n };\n\n const handleNextPage = () => {\n const nextPage = currentPage + 1;\n if (serverSide && onNextPage) {\n onNextPage();\n }\n handlePageChange(nextPage);\n };\n\n const handlePreviousPage = () => {\n const prevPage = currentPage - 1;\n if (serverSide && onPreviousPage) {\n onPreviousPage();\n }\n handlePageChange(prevPage);\n };\n\n const isNextDisabled = serverSide ? !hasNextPage : currentPage === totalPages;\n const isPrevDisabled = serverSide ? !hasPreviousPage : currentPage === 1;\n\n const getPageNumbers = () => {\n const pages = [];\n const maxVisiblePages = 5;\n\n if (totalPages <= maxVisiblePages) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n\n let start = Math.max(2, currentPage - 1);\n let end = Math.min(totalPages - 1, currentPage + 1);\n\n if (currentPage <= 3) {\n end = 4;\n } else if (currentPage >= totalPages - 2) {\n start = totalPages - 3;\n }\n\n if (start > 2) {\n pages.push(\"...\");\n }\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n if (end < totalPages - 1) {\n pages.push(\"...\");\n }\n\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n return (\n <div className={clsx(\"pagination\", className)}>\n <div className=\"pagination__info\">\n Stai visualizzando{\" \"}\n <span className=\"pagination__info__resultsPerPage\">\n {serverSide\n ? currentResultsPerPage\n : currentPage === totalPages && totalResults % resultsPerPage !== 0\n ? totalResults % resultsPerPage\n : resultsPerPage}\n </span>{\" \"}\n di {serverSide ? totalItems || totalResults : totalResults} risultati\n </div>\n <div className=\"pagination__nav\">\n <button\n className={clsx(\n \"pagination__button\",\n isPrevDisabled && \"pagination__button--disabled\",\n )}\n onClick={handlePreviousPage}\n disabled={isPrevDisabled}\n aria-label=\"Previous page\"\n >\n <svg className=\"pagination__button-arrow\" viewBox=\"0 0 24 24\">\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n </button>\n\n {getPageNumbers().map((page, index) =>\n page === \"...\" ? (\n <span key={`ellipsis-${index}`} className=\"pagination__ellipsis\">\n ...\n </span>\n ) : (\n <button\n key={page}\n className={clsx(\n \"pagination__button\",\n currentPage === page && \"pagination__button--active\",\n )}\n onClick={() => handlePageChange(page as number)}\n disabled={page === currentPage}\n >\n {page}\n </button>\n ),\n )}\n\n <button\n className={clsx(\n \"pagination__button\",\n isNextDisabled && \"pagination__button--disabled\",\n )}\n onClick={handleNextPage}\n disabled={isNextDisabled}\n aria-label=\"Next page\"\n >\n <svg className=\"pagination__button-arrow\" viewBox=\"0 0 24 24\">\n <path d=\"M9 6l6 6-6 6\" />\n </svg>\n </button>\n </div>\n </div>\n );\n};\n"],"names":["TableMobile","data","columns","pagination","resultsPerPage","totalResults","initialCurrentPage","serverSidePagination","totalItems","hasNextPage","hasPreviousPage","onNextPage","onPreviousPage","onPageChange","externalSetCurrentPage","sortConfig","onSortChange","currentPage","setInternalCurrentPage","useState","handleSetCurrentPage","page","sortedData","React","a","b","aValue","bValue","aText","bText","startIndex","endIndex","currentPageData","jsxs","Col","index","jsx","CardTable","TableMobilePagination","ActionContent","renderColumnValue","value","doubleLineValue","renderIcon","icon","Info","Download","handleSortClick","key","newDirection","clsx","column","Row","columnValue","config","isSorted","sortDirection","ActionIconText","e","TriangleUp","TriangleDown","setCurrentPage","className","serverSide","currentResultsPerPage","totalPages","handlePageChange","handleNextPage","nextPage","handlePreviousPage","prevPage","isNextDisabled","isPrevDisabled","getPageNumbers","pages","i","start","end"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs74.js","sources":["../src/components/ui/TableMobile/index.tsx"],"sourcesContent":["import {\n ActionData,\n ActionIconText,\n Col,\n ColumnConfig,\n DoubleLineData,\n Row,\n TableRowData,\n} from \"@/components\";\nimport clsx from \"clsx\";\nimport \"./TableMobile.scss\";\nimport { Download, Info, TriangleDown, TriangleUp } from \"@/icons\";\nimport { ReactNode } from \"react\";\nimport * as React from \"react\";\nimport { CommonIconsType } from \"@/types/icons.ts\";\nimport { useState } from \"react\";\n\nexport type TableMobileProps = {\n data: TableRowData[];\n columns: ColumnConfig[];\n pagination?: boolean;\n resultsPerPage?: number;\n totalResults?: number;\n initialCurrentPage?: number;\n serverSidePagination?: boolean;\n totalItems?: number;\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n onNextPage?: () => void;\n onPreviousPage?: () => void;\n onPageChange?: (page: number) => void;\n setCurrentPage?: (page: number) => void;\n sortConfig?: { key: string; direction: \"asc\" | \"desc\" } | null;\n onSortChange?: (key: string, direction: \"asc\" | \"desc\") => void;\n};\n\nexport const TableMobile = ({\n data,\n columns,\n pagination = true,\n resultsPerPage = 5,\n totalResults,\n initialCurrentPage = 1,\n serverSidePagination = false,\n totalItems,\n hasNextPage,\n hasPreviousPage,\n onNextPage,\n onPreviousPage,\n onPageChange,\n setCurrentPage: externalSetCurrentPage,\n sortConfig = null,\n onSortChange,\n}: TableMobileProps) => {\n const [currentPage, setInternalCurrentPage] = useState(initialCurrentPage);\n const handleSetCurrentPage = (page: number) => {\n setInternalCurrentPage(page);\n externalSetCurrentPage?.(page);\n };\n\n const sortedData = React.useMemo(() => {\n if (!sortConfig) return data;\n\n return [...data].sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n\n const aText =\n typeof aValue === \"object\" && \"firstLine\" in aValue\n ? aValue.firstLine\n : aValue;\n const bText =\n typeof bValue === \"object\" && \"firstLine\" in bValue\n ? bValue.firstLine\n : bValue;\n\n if (aText < bText) {\n return sortConfig.direction === \"asc\" ? -1 : 1;\n }\n if (aText > bText) {\n return sortConfig.direction === \"asc\" ? 1 : -1;\n }\n return 0;\n });\n }, [data, sortConfig]);\n\n const startIndex = serverSidePagination\n ? 0\n : (currentPage - 1) * resultsPerPage;\n const endIndex = serverSidePagination\n ? sortedData.length\n : Math.min(startIndex + resultsPerPage, sortedData.length);\n const currentPageData = sortedData.slice(startIndex, endIndex);\n\n return (\n <Col className={\"w-full h-full\"} gap={\"x16\"}>\n {currentPageData.map((data, index) => (\n <CardTable\n columns={columns}\n key={index}\n data={data}\n sortConfig={sortConfig}\n onSortChange={onSortChange}\n />\n ))}\n\n {pagination && (\n <TableMobilePagination\n currentPage={currentPage}\n totalResults={totalResults || sortedData.length}\n resultsPerPage={resultsPerPage}\n setCurrentPage={handleSetCurrentPage}\n onPageChange={onPageChange}\n serverSide={serverSidePagination}\n totalItems={totalItems}\n hasNextPage={hasNextPage}\n hasPreviousPage={hasPreviousPage}\n onNextPage={onNextPage}\n onPreviousPage={onPreviousPage}\n currentResultsPerPage={\n serverSidePagination ? sortedData.length : resultsPerPage\n }\n className=\"mt-x16\"\n />\n )}\n </Col>\n );\n};\n\nexport type CardTableProps = {\n columns: ColumnConfig[];\n data: TableRowData;\n sortConfig: { key: string; direction: \"asc\" | \"desc\" } | null;\n onSortChange?: (key: string, direction: \"asc\" | \"desc\") => void;\n};\n\nconst ActionContent: React.FC<{ data: ActionData }> = ({ data }) => {\n if (data.type === \"link\" && data.link) {\n return (\n <a href={data.link} aria-label={data.ariaLabel}>\n {data.label}\n </a>\n );\n }\n return (\n <button onClick={data.action} aria-label={data.ariaLabel}>\n {data.label}\n </button>\n );\n};\n\nexport const CardTable = ({\n columns,\n sortConfig,\n data,\n onSortChange,\n}: CardTableProps) => {\n const renderColumnValue = (value: any): ReactNode => {\n if (!value) return \"\";\n\n if (typeof value === \"object\" && \"firstLine\" in value) {\n const doubleLineValue = value as DoubleLineData;\n return `${doubleLineValue.firstLine}${doubleLineValue.secondLine ? ` ${doubleLineValue.secondLine}` : \"\"}`;\n }\n\n if (typeof value === \"object\" && \"label\" in value && \"type\" in value) {\n return <ActionContent data={value} />;\n }\n\n return value;\n };\n\n const renderIcon = (icon: React.ReactNode | CommonIconsType) => {\n switch (icon) {\n case \"info\":\n return <Info />;\n case \"download\":\n return <Download />;\n default:\n return icon;\n }\n };\n\n const handleSortClick = (key: string) => {\n if (!onSortChange || !sortConfig) return;\n\n const newDirection =\n sortConfig.key === key\n ? sortConfig.direction === \"asc\"\n ? \"desc\"\n : \"asc\"\n : \"asc\";\n\n onSortChange(key, newDirection);\n };\n\n return (\n <div\n className={clsx(\"ui-card-table shadow br-x4 text-slate-28 fs-custom \")}\n >\n {columns.map((column, index) => {\n if (!column.key || column.key === \"actionData\") {\n return (\n <Row\n key={index}\n p={\"x16\"}\n className={\"ui-table-header\"}\n justifyContent={\"space-between\"}\n >\n <Col justifyContent={\"end\"} gap={\"x4\"} className={\"w-full\"}>\n <Row justifyContent={\"end\"} className=\"table-mobile-actions\">\n {renderColumnValue(data.actionData)}\n </Row>\n </Col>\n </Row>\n );\n }\n\n const columnValue = data[column.key];\n const config = column;\n const isSorted = sortConfig?.key === column.key;\n const sortDirection = isSorted ? sortConfig.direction : null;\n\n return (\n <Row\n key={index}\n p={\"x16\"}\n className={\"ui-table-header\"}\n justifyContent={\"space-between\"}\n >\n <Col justifyContent={\"center\"} gap={\"x4\"} className={\"w-full\"}>\n <ActionIconText\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n icon={renderIcon(config.icon)}\n noIcon={!renderIcon(config.icon)}\n textLabel={config.label}\n iconPosition={config.iconPosition}\n popupInfo={config.popupInfo}\n positionPopUp={\"left\"}\n classNameText={\"fw-bold text-slate-28 fs-custom md-fs-6\"}\n >\n {config.sortable && (\n <span\n className=\"sort-indicator\"\n onClick={(e) => {\n e.stopPropagation();\n handleSortClick(column.key!);\n }}\n >\n <TriangleUp\n filled={isSorted && sortDirection === \"desc\"}\n className={clsx(\"sort-indicator__triangle\", {\n active: isSorted && sortDirection === \"desc\",\n })}\n />\n <TriangleDown\n filled={isSorted && sortDirection === \"asc\"}\n className={clsx(\"sort-indicator__triangle\", {\n active: isSorted && sortDirection === \"asc\",\n })}\n />\n </span>\n )}\n </ActionIconText>\n <Row>{renderColumnValue(columnValue)}</Row>\n </Col>\n </Row>\n );\n })}\n </div>\n );\n};\n\nexport type TableMobilePaginationProps = {\n currentPage?: number;\n totalResults?: number;\n resultsPerPage: number;\n setCurrentPage?: (page: number) => void;\n onPageChange?: (page: number) => void;\n className?: string;\n serverSide?: boolean;\n totalItems?: number;\n hasNextPage?: boolean;\n hasPreviousPage?: boolean;\n onNextPage?: () => void;\n onPreviousPage?: () => void;\n currentResultsPerPage?: number;\n};\n\nexport const TableMobilePagination: React.FC<TableMobilePaginationProps> = ({\n currentPage = 1,\n totalResults = 0,\n resultsPerPage,\n setCurrentPage,\n onPageChange,\n className,\n serverSide = false,\n totalItems,\n hasNextPage,\n hasPreviousPage,\n onNextPage,\n onPreviousPage,\n currentResultsPerPage = resultsPerPage,\n}) => {\n const totalPages = serverSide\n ? Math.ceil((totalItems || totalResults) / resultsPerPage)\n : Math.ceil(totalResults / resultsPerPage);\n\n const handlePageChange = (page: number) => {\n setCurrentPage?.(page);\n if (onPageChange) {\n onPageChange(page);\n }\n };\n\n const handleNextPage = () => {\n const nextPage = currentPage + 1;\n if (serverSide && onNextPage) {\n onNextPage();\n }\n handlePageChange(nextPage);\n };\n\n const handlePreviousPage = () => {\n const prevPage = currentPage - 1;\n if (serverSide && onPreviousPage) {\n onPreviousPage();\n }\n handlePageChange(prevPage);\n };\n\n const isNextDisabled = serverSide ? !hasNextPage : currentPage === totalPages;\n const isPrevDisabled = serverSide ? !hasPreviousPage : currentPage === 1;\n\n const getPageNumbers = () => {\n const pages = [];\n const maxVisiblePages = 5;\n\n if (totalPages <= maxVisiblePages) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n\n let start = Math.max(2, currentPage - 1);\n let end = Math.min(totalPages - 1, currentPage + 1);\n\n if (currentPage <= 3) {\n end = 4;\n } else if (currentPage >= totalPages - 2) {\n start = totalPages - 3;\n }\n\n if (start > 2) {\n pages.push(\"...\");\n }\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n if (end < totalPages - 1) {\n pages.push(\"...\");\n }\n\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n return (\n <div className={clsx(\"pagination-mobile\", className)}>\n <div className=\"pagination-mobile__info\">\n Stai visualizzando{\" \"}\n <span className=\"pagination-mobile__info__resultsPerPage\">\n {serverSide\n ? currentResultsPerPage\n : currentPage === totalPages && totalResults % resultsPerPage !== 0\n ? totalResults % resultsPerPage\n : resultsPerPage}\n </span>{\" \"}\n di {serverSide ? totalItems || totalResults : totalResults} risultati\n </div>\n <div className=\"pagination-mobile__nav\">\n <button\n className={clsx(\n \"pagination-mobile__button\",\n isPrevDisabled && \"pagination-mobile__button--disabled\",\n )}\n onClick={handlePreviousPage}\n disabled={isPrevDisabled}\n aria-label=\"Previous page\"\n >\n <svg className=\"pagination-mobile__button-arrow\" viewBox=\"0 0 24 24\">\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n </button>\n\n {getPageNumbers().map((page, index) =>\n page === \"...\" ? (\n <span key={`ellipsis-${index}`} className=\"pagination-mobile__ellipsis\">\n ...\n </span>\n ) : (\n <button\n key={page}\n className={clsx(\n \"pagination-mobile__button\",\n currentPage === page && \"pagination-mobile__button--active\",\n )}\n onClick={() => handlePageChange(page as number)}\n disabled={page === currentPage}\n >\n {page}\n </button>\n ),\n )}\n\n <button\n className={clsx(\n \"pagination-mobile__button\",\n isNextDisabled && \"pagination-mobile__button--disabled\",\n )}\n onClick={handleNextPage}\n disabled={isNextDisabled}\n aria-label=\"Next page\"\n >\n <svg className=\"pagination-mobile__button-arrow\" viewBox=\"0 0 24 24\">\n <path d=\"M9 6l6 6-6 6\" />\n </svg>\n </button>\n </div>\n </div>\n );\n};\n"],"names":["TableMobile","data","columns","pagination","resultsPerPage","totalResults","initialCurrentPage","serverSidePagination","totalItems","hasNextPage","hasPreviousPage","onNextPage","onPreviousPage","onPageChange","externalSetCurrentPage","sortConfig","onSortChange","currentPage","setInternalCurrentPage","useState","handleSetCurrentPage","page","sortedData","React","a","b","aValue","bValue","aText","bText","startIndex","endIndex","currentPageData","jsxs","Col","index","jsx","CardTable","TableMobilePagination","ActionContent","renderColumnValue","value","doubleLineValue","renderIcon","icon","Info","Download","handleSortClick","key","newDirection","clsx","column","Row","columnValue","config","isSorted","sortDirection","ActionIconText","e","TriangleUp","TriangleDown","setCurrentPage","className","serverSide","currentResultsPerPage","totalPages","handlePageChange","handleNextPage","nextPage","handlePreviousPage","prevPage","isNextDisabled","isPrevDisabled","getPageNumbers","pages","i","start","end"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { useCopyToClipboard as c } from "./index.es494.js";
1
+ import { useCopyToClipboard as c } from "./index.es488.js";
2
2
  import { useState as n } from "react";
3
3
  const l = () => {
4
4
  const [e, t] = c(), [p, o] = n(!1);
@@ -1,5 +1,5 @@
1
1
  import { j as t } from "./index.es241.js";
2
- import './components/ui/DoctorModal/DoctorModalFooter/DoctorModalFooter.css';/* empty css */
2
+ import './components/ui/ConsentModal/ConsentModalFooter/ConsentModalFooter.css';/* empty css */
3
3
  const s = ({ children: o }) => /* @__PURE__ */ t.jsx("footer", { className: "ui-consent-modal-footer bg-white shadow", children: o });
4
4
  export {
5
5
  s as ConsentModalFooter
@@ -1,5 +1,5 @@
1
1
  import { j as t } from "./index.es241.js";
2
- import './components/ui/DoctorModal/DoctorModalFooter/DoctorModalFooter.css';/* empty css */
2
+ import './components/ui/ConsentModal/ConsentModalFooter/ConsentModalFooter.css';/* empty css */
3
3
  const s = ({ children: o }) => /* @__PURE__ */ t.jsx("footer", { className: "ui-consent-modal-footer bg-white shadow", children: o });
4
4
  export {
5
5
  s as DoctorModalFooter
@@ -1,5 +1,5 @@
1
1
  import { j as t } from "./index.es241.js";
2
- import './components/ui/DoctorModal/DoctorModalFooter/DoctorModalFooter.css';/* empty css */
2
+ import './components/ui/ConsentModal/ConsentModalFooter/ConsentModalFooter.css';/* empty css */
3
3
  const s = ({
4
4
  children: o
5
5
  }) => /* @__PURE__ */ t.jsx("footer", { className: "ui-consent-modal-footer bg-white shadow", children: o });
@@ -1,5 +1,5 @@
1
1
  import { j as t } from "./index.es241.js";
2
- import './components/ui/DoctorModal/DoctorModalFooter/DoctorModalFooter.css';/* empty css */
2
+ import './components/ui/ConsentModal/ConsentModalFooter/ConsentModalFooter.css';/* empty css */
3
3
  const s = ({
4
4
  children: o
5
5
  }) => /* @__PURE__ */ t.jsx("footer", { className: "ui-consent-modal-footer bg-white shadow", children: o });
@@ -15,4 +15,4 @@ function c() {
15
15
  export {
16
16
  c as useCopyToClipboard
17
17
  };
18
- //# sourceMappingURL=index.es494.js.map
18
+ //# sourceMappingURL=index.es488.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es494.js","sources":["../node_modules/usehooks-ts/dist/index.js"],"sourcesContent":["import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue = false) {\n if (typeof defaultValue !== \"boolean\") {\n throw new Error(\"defaultValue must be `true` or `false`\");\n }\n const [value, setValue] = useState(defaultValue);\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n const savedHandler = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(() => {\n const targetElement = (element == null ? void 0 : element.current) ?? window;\n if (!(targetElement && targetElement.addEventListener))\n return;\n const listener = (event) => {\n savedHandler.current(event);\n };\n targetElement.addEventListener(eventName, listener, options);\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n useEventListener(\"click\", (event) => {\n handler(event);\n });\n}\nfunction useCopyToClipboard() {\n const [copiedText, setCopiedText] = useState(null);\n const copy = useCallback(async (text) => {\n if (!(navigator == null ? void 0 : navigator.clipboard)) {\n console.warn(\"Clipboard not supported\");\n return false;\n }\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n } catch (error) {\n console.warn(\"Copy failed\", error);\n setCopiedText(null);\n return false;\n }\n }, []);\n return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n const [count, setCount] = useState(initialValue ?? 0);\n const increment = useCallback(() => {\n setCount((x) => x + 1);\n }, []);\n const decrement = useCallback(() => {\n setCount((x) => x - 1);\n }, []);\n const reset = useCallback(() => {\n setCount(initialValue ?? 0);\n }, [initialValue]);\n return {\n count,\n increment,\n decrement,\n reset,\n setCount\n };\n}\nfunction useInterval(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (delay === null) {\n return;\n }\n const id = setInterval(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearInterval(id);\n };\n }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n countStart,\n countStop = 0,\n intervalMs = 1e3,\n isIncrement = false\n}) {\n const {\n count,\n increment,\n decrement,\n reset: resetCounter\n } = useCounter(countStart);\n const {\n value: isCountdownRunning,\n setTrue: startCountdown,\n setFalse: stopCountdown\n } = useBoolean(false);\n const resetCountdown = useCallback(() => {\n stopCountdown();\n resetCounter();\n }, [stopCountdown, resetCounter]);\n const countdownCallback = useCallback(() => {\n if (count === countStop) {\n stopCountdown();\n return;\n }\n if (isIncrement) {\n increment();\n } else {\n decrement();\n }\n }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n const ref = useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n return useCallback((...args) => {\n var _a;\n return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n }, [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER) {\n return initialValueToUse;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER) {\n console.warn(\n `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.localStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER) {\n console.warn(\n `Tried removing localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.localStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n defaultValue = false,\n initializeWithValue = true\n} = {}) {\n const getMatches = (query2) => {\n if (IS_SERVER2) {\n return defaultValue;\n }\n return window.matchMedia(query2).matches;\n };\n const [matches, setMatches] = useState(() => {\n if (initializeWithValue) {\n return getMatches(query);\n }\n return defaultValue;\n });\n function handleChange() {\n setMatches(getMatches(query));\n }\n useIsomorphicLayoutEffect(() => {\n const matchMedia = window.matchMedia(query);\n handleChange();\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener(\"change\", handleChange);\n }\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener(\"change\", handleChange);\n }\n };\n }, [query]);\n return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n const {\n defaultValue,\n localStorageKey = LOCAL_STORAGE_KEY,\n initializeWithValue = true\n } = options;\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n initializeWithValue,\n defaultValue\n });\n const [isDarkMode, setDarkMode] = useLocalStorage(\n localStorageKey,\n defaultValue ?? isDarkOS ?? false,\n { initializeWithValue }\n );\n useIsomorphicLayoutEffect(() => {\n if (isDarkOS !== isDarkMode) {\n setDarkMode(isDarkOS);\n }\n }, [isDarkOS]);\n return {\n isDarkMode,\n toggle: () => {\n setDarkMode((prev) => !prev);\n },\n enable: () => {\n setDarkMode(true);\n },\n disable: () => {\n setDarkMode(false);\n },\n set: (value) => {\n setDarkMode(value);\n }\n };\n}\nfunction useUnmount(func) {\n const funcRef = useRef(func);\n funcRef.current = func;\n useEffect(\n () => () => {\n funcRef.current();\n },\n []\n );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n const debouncedFunc = useRef();\n useUnmount(() => {\n if (debouncedFunc.current) {\n debouncedFunc.current.cancel();\n }\n });\n const debounced = useMemo(() => {\n const debouncedFuncInstance = debounce(func, delay, options);\n const wrappedFunc = (...args) => {\n return debouncedFuncInstance(...args);\n };\n wrappedFunc.cancel = () => {\n debouncedFuncInstance.cancel();\n };\n wrappedFunc.isPending = () => {\n return !!debouncedFunc.current;\n };\n wrappedFunc.flush = () => {\n return debouncedFuncInstance.flush();\n };\n return wrappedFunc;\n }, [func, delay, options]);\n useEffect(() => {\n debouncedFunc.current = debounce(func, delay, options);\n }, [func, delay, options]);\n return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n const previousValueRef = useRef(unwrappedInitialValue);\n const updateDebouncedValue = useDebounceCallback(\n setDebouncedValue,\n delay,\n options\n );\n if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n updateDebouncedValue(unwrappedInitialValue);\n previousValueRef.current = unwrappedInitialValue;\n }\n return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n const { preserveTitleOnUnmount = true } = options;\n const defaultTitle = useRef(null);\n useIsomorphicLayoutEffect(() => {\n defaultTitle.current = window.document.title;\n }, []);\n useIsomorphicLayoutEffect(() => {\n window.document.title = title;\n }, [title]);\n useUnmount(() => {\n if (!preserveTitleOnUnmount && defaultTitle.current) {\n window.document.title = defaultTitle.current;\n }\n });\n}\nfunction useHover(elementRef) {\n const [value, setValue] = useState(false);\n const handleMouseEnter = () => {\n setValue(true);\n };\n const handleMouseLeave = () => {\n setValue(false);\n };\n useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n return value;\n}\nfunction useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = useState(null);\n const [state, setState] = useState(() => ({\n isIntersecting: initialIsIntersecting,\n entry: void 0\n }));\n const callbackRef = useRef();\n callbackRef.current = onChange;\n const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n useEffect(() => {\n if (!ref)\n return;\n if (!(\"IntersectionObserver\" in window))\n return;\n if (frozen)\n return;\n let unobserve;\n const observer = new IntersectionObserver(\n (entries) => {\n const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n entries.forEach((entry) => {\n const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n setState({ isIntersecting, entry });\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n });\n },\n { threshold, root, rootMargin }\n );\n observer.observe(ref);\n return () => {\n observer.disconnect();\n };\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible\n ]);\n const prevRef = useRef(null);\n useEffect(() => {\n var _a2;\n if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n const result = [\n setRef,\n !!state.isIntersecting,\n state.entry\n ];\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n return result;\n}\nfunction useIsClient() {\n const [isClient, setClient] = useState(false);\n useEffect(() => {\n setClient(true);\n }, []);\n return isClient;\n}\nfunction useIsMounted() {\n const isMounted = useRef(false);\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n const [map, setMap] = useState(new Map(initialState));\n const actions = {\n set: useCallback((key, value) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.set(key, value);\n return copy;\n });\n }, []),\n setAll: useCallback((entries) => {\n setMap(() => new Map(entries));\n }, []),\n remove: useCallback((key) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.delete(key);\n return copy;\n });\n }, []),\n reset: useCallback(() => {\n setMap(() => /* @__PURE__ */ new Map());\n }, [])\n };\n return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\", eventListenerOptions = {}) {\n useEventListener(\n eventType,\n (event) => {\n const target = event.target;\n if (!target || !target.isConnected) {\n return;\n }\n const isOutside = Array.isArray(ref) ? ref.filter((r) => Boolean(r.current)).every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n if (isOutside) {\n handler(event);\n }\n },\n void 0,\n eventListenerOptions\n );\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER3) {\n initializeWithValue = false;\n }\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return null;\n }\n return parsed;\n },\n [options]\n );\n const readValue = useCallback(() => {\n if (IS_SERVER3) {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : null;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return null;\n }\n }, [key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return void 0;\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return storedValue;\n}\nvar initialSize = {\n width: void 0,\n height: void 0\n};\nfunction useResizeObserver(options) {\n const { ref, box = \"content-box\" } = options;\n const [{ width, height }, setSize] = useState(initialSize);\n const isMounted = useIsMounted();\n const previousSize = useRef({ ...initialSize });\n const onResize = useRef(void 0);\n onResize.current = options.onResize;\n useEffect(() => {\n if (!ref.current)\n return;\n if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n return;\n const observer = new ResizeObserver(([entry]) => {\n const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n const newHeight = extractSize(entry, boxProp, \"blockSize\");\n const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n if (hasChanged) {\n const newSize = { width: newWidth, height: newHeight };\n previousSize.current.width = newWidth;\n previousSize.current.height = newHeight;\n if (onResize.current) {\n onResize.current(newSize);\n } else {\n if (isMounted()) {\n setSize(newSize);\n }\n }\n }\n });\n observer.observe(ref.current, { box });\n return () => {\n observer.disconnect();\n };\n }, [box, ref, isMounted]);\n return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n if (!entry[box]) {\n if (box === \"contentBoxSize\") {\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n return void 0;\n }\n return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n // @ts-ignore Support Firefox's non-standard behavior\n entry[box][sizeType]\n );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER4) {\n initializeWithValue = false;\n }\n const readScreen = () => {\n if (IS_SERVER4) {\n return void 0;\n }\n return window.screen;\n };\n const [screen, setScreen] = useState(() => {\n if (initializeWithValue) {\n return readScreen();\n }\n return void 0;\n });\n const debouncedSetScreen = useDebounceCallback(\n setScreen,\n options.debounceDelay\n );\n function handleSize() {\n const newScreen = readScreen();\n const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n if (newScreen) {\n const {\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n } = newScreen;\n setSize({\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n });\n }\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n const node = document.querySelector(\n `script[src=\"${src}\"]`\n );\n const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n return {\n node,\n status\n };\n}\nfunction useScript(src, options) {\n const [status, setStatus] = useState(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return \"idle\";\n }\n if (typeof window === \"undefined\") {\n return \"loading\";\n }\n return cachedScriptStatuses.get(src) ?? \"loading\";\n });\n useEffect(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return;\n }\n const cachedScriptStatus = cachedScriptStatuses.get(src);\n if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n setStatus(cachedScriptStatus);\n return;\n }\n const script = getScriptNode(src);\n let scriptNode = script.node;\n if (!scriptNode) {\n scriptNode = document.createElement(\"script\");\n scriptNode.src = src;\n scriptNode.async = true;\n if (options == null ? void 0 : options.id) {\n scriptNode.id = options.id;\n }\n scriptNode.setAttribute(\"data-status\", \"loading\");\n document.body.appendChild(scriptNode);\n const setAttributeFromEvent = (event) => {\n const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n };\n scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n } else {\n setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n }\n const setStateFromEvent = (event) => {\n const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n setStatus(newStatus);\n cachedScriptStatuses.set(src, newStatus);\n };\n scriptNode.addEventListener(\"load\", setStateFromEvent);\n scriptNode.addEventListener(\"error\", setStateFromEvent);\n return () => {\n if (scriptNode) {\n scriptNode.removeEventListener(\"load\", setStateFromEvent);\n scriptNode.removeEventListener(\"error\", setStateFromEvent);\n }\n if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n scriptNode.remove();\n cachedScriptStatuses.delete(src);\n }\n };\n }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n const { autoLock = true, lockTarget, widthReflow = true } = options;\n const [isLocked, setIsLocked] = useState(false);\n const target = useRef(null);\n const originalStyle = useRef(null);\n const lock = () => {\n if (target.current) {\n const { overflow, paddingRight } = target.current.style;\n originalStyle.current = { overflow, paddingRight };\n if (widthReflow) {\n const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n }\n target.current.style.overflow = \"hidden\";\n setIsLocked(true);\n }\n };\n const unlock = () => {\n if (target.current && originalStyle.current) {\n target.current.style.overflow = originalStyle.current.overflow;\n if (widthReflow) {\n target.current.style.paddingRight = originalStyle.current.paddingRight;\n }\n }\n setIsLocked(false);\n };\n useIsomorphicLayoutEffect(() => {\n if (IS_SERVER5)\n return;\n if (lockTarget) {\n target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n }\n if (!target.current) {\n target.current = document.body;\n }\n if (autoLock) {\n lock();\n }\n return () => {\n unlock();\n };\n }, [autoLock, lockTarget, widthReflow]);\n return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER6) {\n return initialValueToUse;\n }\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER6) {\n console.warn(\n `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.sessionStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER6) {\n console.warn(\n `Tried removing sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.sessionStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"session-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nfunction useStep(maxStep) {\n const [currentStep, setCurrentStep] = useState(1);\n const canGoToNextStep = currentStep + 1 <= maxStep;\n const canGoToPrevStep = currentStep - 1 > 0;\n const setStep = useCallback(\n (step) => {\n const newStep = step instanceof Function ? step(currentStep) : step;\n if (newStep >= 1 && newStep <= maxStep) {\n setCurrentStep(newStep);\n return;\n }\n throw new Error(\"Step not valid\");\n },\n [maxStep, currentStep]\n );\n const goToNextStep = useCallback(() => {\n if (canGoToNextStep) {\n setCurrentStep((step) => step + 1);\n }\n }, [canGoToNextStep]);\n const goToPrevStep = useCallback(() => {\n if (canGoToPrevStep) {\n setCurrentStep((step) => step - 1);\n }\n }, [canGoToPrevStep]);\n const reset = useCallback(() => {\n setCurrentStep(1);\n }, []);\n return [\n currentStep,\n {\n goToNextStep,\n goToPrevStep,\n canGoToNextStep,\n canGoToPrevStep,\n setStep,\n reset\n }\n ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n defaultValue = \"system\",\n localStorageKey = LOCAL_STORAGE_KEY2,\n initializeWithValue = true\n} = {}) {\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n initializeWithValue\n });\n const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n const toggleTernaryDarkMode = () => {\n const modes = [\"light\", \"system\", \"dark\"];\n setMode((prevMode) => {\n const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n return modes[nextIndex];\n });\n };\n return {\n isDarkMode,\n ternaryDarkMode: mode,\n setTernaryDarkMode: setMode,\n toggleTernaryDarkMode\n };\n}\nfunction useTimeout(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (!delay && delay !== 0) {\n return;\n }\n const id = setTimeout(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n}\nfunction useToggle(defaultValue) {\n const [value, setValue] = useState(!!defaultValue);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER7) {\n initializeWithValue = false;\n }\n const [windowSize, setWindowSize] = useState(() => {\n if (initializeWithValue) {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n return {\n width: void 0,\n height: void 0\n };\n });\n const debouncedSetWindowSize = useDebounceCallback(\n setWindowSize,\n options.debounceDelay\n );\n function handleSize() {\n const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n setSize({\n width: window.innerWidth,\n height: window.innerHeight\n });\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\n"],"names":["useCopyToClipboard","copiedText","setCopiedText","useState","copy","useCallback","text","error"],"mappings":";;AAgDA,SAASA,IAAqB;AAC5B,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAS,IAAI,GAC3CC,IAAOC,EAAY,OAAOC,MAAS;AACvC,QAAI,EAAE,aAAa,QAAgB,UAAU;AAC3C,qBAAQ,KAAK,yBAAyB,GAC/B;AAET,QAAI;AACF,mBAAM,UAAU,UAAU,UAAUA,CAAI,GACxCJ,EAAcI,CAAI,GACX;AAAA,IACR,SAAQC,GAAO;AACd,qBAAQ,KAAK,eAAeA,CAAK,GACjCL,EAAc,IAAI,GACX;AAAA,IACb;AAAA,EACG,GAAE,EAAE;AACL,SAAO,CAACD,GAAYG,CAAI;AAC1B;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.es488.js","sources":["../node_modules/usehooks-ts/dist/index.js"],"sourcesContent":["import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue = false) {\n if (typeof defaultValue !== \"boolean\") {\n throw new Error(\"defaultValue must be `true` or `false`\");\n }\n const [value, setValue] = useState(defaultValue);\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n const savedHandler = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(() => {\n const targetElement = (element == null ? void 0 : element.current) ?? window;\n if (!(targetElement && targetElement.addEventListener))\n return;\n const listener = (event) => {\n savedHandler.current(event);\n };\n targetElement.addEventListener(eventName, listener, options);\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n useEventListener(\"click\", (event) => {\n handler(event);\n });\n}\nfunction useCopyToClipboard() {\n const [copiedText, setCopiedText] = useState(null);\n const copy = useCallback(async (text) => {\n if (!(navigator == null ? void 0 : navigator.clipboard)) {\n console.warn(\"Clipboard not supported\");\n return false;\n }\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n } catch (error) {\n console.warn(\"Copy failed\", error);\n setCopiedText(null);\n return false;\n }\n }, []);\n return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n const [count, setCount] = useState(initialValue ?? 0);\n const increment = useCallback(() => {\n setCount((x) => x + 1);\n }, []);\n const decrement = useCallback(() => {\n setCount((x) => x - 1);\n }, []);\n const reset = useCallback(() => {\n setCount(initialValue ?? 0);\n }, [initialValue]);\n return {\n count,\n increment,\n decrement,\n reset,\n setCount\n };\n}\nfunction useInterval(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (delay === null) {\n return;\n }\n const id = setInterval(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearInterval(id);\n };\n }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n countStart,\n countStop = 0,\n intervalMs = 1e3,\n isIncrement = false\n}) {\n const {\n count,\n increment,\n decrement,\n reset: resetCounter\n } = useCounter(countStart);\n const {\n value: isCountdownRunning,\n setTrue: startCountdown,\n setFalse: stopCountdown\n } = useBoolean(false);\n const resetCountdown = useCallback(() => {\n stopCountdown();\n resetCounter();\n }, [stopCountdown, resetCounter]);\n const countdownCallback = useCallback(() => {\n if (count === countStop) {\n stopCountdown();\n return;\n }\n if (isIncrement) {\n increment();\n } else {\n decrement();\n }\n }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n const ref = useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n return useCallback((...args) => {\n var _a;\n return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n }, [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER) {\n return initialValueToUse;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER) {\n console.warn(\n `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.localStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER) {\n console.warn(\n `Tried removing localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.localStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n defaultValue = false,\n initializeWithValue = true\n} = {}) {\n const getMatches = (query2) => {\n if (IS_SERVER2) {\n return defaultValue;\n }\n return window.matchMedia(query2).matches;\n };\n const [matches, setMatches] = useState(() => {\n if (initializeWithValue) {\n return getMatches(query);\n }\n return defaultValue;\n });\n function handleChange() {\n setMatches(getMatches(query));\n }\n useIsomorphicLayoutEffect(() => {\n const matchMedia = window.matchMedia(query);\n handleChange();\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener(\"change\", handleChange);\n }\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener(\"change\", handleChange);\n }\n };\n }, [query]);\n return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n const {\n defaultValue,\n localStorageKey = LOCAL_STORAGE_KEY,\n initializeWithValue = true\n } = options;\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n initializeWithValue,\n defaultValue\n });\n const [isDarkMode, setDarkMode] = useLocalStorage(\n localStorageKey,\n defaultValue ?? isDarkOS ?? false,\n { initializeWithValue }\n );\n useIsomorphicLayoutEffect(() => {\n if (isDarkOS !== isDarkMode) {\n setDarkMode(isDarkOS);\n }\n }, [isDarkOS]);\n return {\n isDarkMode,\n toggle: () => {\n setDarkMode((prev) => !prev);\n },\n enable: () => {\n setDarkMode(true);\n },\n disable: () => {\n setDarkMode(false);\n },\n set: (value) => {\n setDarkMode(value);\n }\n };\n}\nfunction useUnmount(func) {\n const funcRef = useRef(func);\n funcRef.current = func;\n useEffect(\n () => () => {\n funcRef.current();\n },\n []\n );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n const debouncedFunc = useRef();\n useUnmount(() => {\n if (debouncedFunc.current) {\n debouncedFunc.current.cancel();\n }\n });\n const debounced = useMemo(() => {\n const debouncedFuncInstance = debounce(func, delay, options);\n const wrappedFunc = (...args) => {\n return debouncedFuncInstance(...args);\n };\n wrappedFunc.cancel = () => {\n debouncedFuncInstance.cancel();\n };\n wrappedFunc.isPending = () => {\n return !!debouncedFunc.current;\n };\n wrappedFunc.flush = () => {\n return debouncedFuncInstance.flush();\n };\n return wrappedFunc;\n }, [func, delay, options]);\n useEffect(() => {\n debouncedFunc.current = debounce(func, delay, options);\n }, [func, delay, options]);\n return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n const previousValueRef = useRef(unwrappedInitialValue);\n const updateDebouncedValue = useDebounceCallback(\n setDebouncedValue,\n delay,\n options\n );\n if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n updateDebouncedValue(unwrappedInitialValue);\n previousValueRef.current = unwrappedInitialValue;\n }\n return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n const { preserveTitleOnUnmount = true } = options;\n const defaultTitle = useRef(null);\n useIsomorphicLayoutEffect(() => {\n defaultTitle.current = window.document.title;\n }, []);\n useIsomorphicLayoutEffect(() => {\n window.document.title = title;\n }, [title]);\n useUnmount(() => {\n if (!preserveTitleOnUnmount && defaultTitle.current) {\n window.document.title = defaultTitle.current;\n }\n });\n}\nfunction useHover(elementRef) {\n const [value, setValue] = useState(false);\n const handleMouseEnter = () => {\n setValue(true);\n };\n const handleMouseLeave = () => {\n setValue(false);\n };\n useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n return value;\n}\nfunction useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = useState(null);\n const [state, setState] = useState(() => ({\n isIntersecting: initialIsIntersecting,\n entry: void 0\n }));\n const callbackRef = useRef();\n callbackRef.current = onChange;\n const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n useEffect(() => {\n if (!ref)\n return;\n if (!(\"IntersectionObserver\" in window))\n return;\n if (frozen)\n return;\n let unobserve;\n const observer = new IntersectionObserver(\n (entries) => {\n const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n entries.forEach((entry) => {\n const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n setState({ isIntersecting, entry });\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n });\n },\n { threshold, root, rootMargin }\n );\n observer.observe(ref);\n return () => {\n observer.disconnect();\n };\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible\n ]);\n const prevRef = useRef(null);\n useEffect(() => {\n var _a2;\n if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n const result = [\n setRef,\n !!state.isIntersecting,\n state.entry\n ];\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n return result;\n}\nfunction useIsClient() {\n const [isClient, setClient] = useState(false);\n useEffect(() => {\n setClient(true);\n }, []);\n return isClient;\n}\nfunction useIsMounted() {\n const isMounted = useRef(false);\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n const [map, setMap] = useState(new Map(initialState));\n const actions = {\n set: useCallback((key, value) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.set(key, value);\n return copy;\n });\n }, []),\n setAll: useCallback((entries) => {\n setMap(() => new Map(entries));\n }, []),\n remove: useCallback((key) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.delete(key);\n return copy;\n });\n }, []),\n reset: useCallback(() => {\n setMap(() => /* @__PURE__ */ new Map());\n }, [])\n };\n return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\", eventListenerOptions = {}) {\n useEventListener(\n eventType,\n (event) => {\n const target = event.target;\n if (!target || !target.isConnected) {\n return;\n }\n const isOutside = Array.isArray(ref) ? ref.filter((r) => Boolean(r.current)).every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n if (isOutside) {\n handler(event);\n }\n },\n void 0,\n eventListenerOptions\n );\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER3) {\n initializeWithValue = false;\n }\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return null;\n }\n return parsed;\n },\n [options]\n );\n const readValue = useCallback(() => {\n if (IS_SERVER3) {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : null;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return null;\n }\n }, [key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return void 0;\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return storedValue;\n}\nvar initialSize = {\n width: void 0,\n height: void 0\n};\nfunction useResizeObserver(options) {\n const { ref, box = \"content-box\" } = options;\n const [{ width, height }, setSize] = useState(initialSize);\n const isMounted = useIsMounted();\n const previousSize = useRef({ ...initialSize });\n const onResize = useRef(void 0);\n onResize.current = options.onResize;\n useEffect(() => {\n if (!ref.current)\n return;\n if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n return;\n const observer = new ResizeObserver(([entry]) => {\n const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n const newHeight = extractSize(entry, boxProp, \"blockSize\");\n const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n if (hasChanged) {\n const newSize = { width: newWidth, height: newHeight };\n previousSize.current.width = newWidth;\n previousSize.current.height = newHeight;\n if (onResize.current) {\n onResize.current(newSize);\n } else {\n if (isMounted()) {\n setSize(newSize);\n }\n }\n }\n });\n observer.observe(ref.current, { box });\n return () => {\n observer.disconnect();\n };\n }, [box, ref, isMounted]);\n return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n if (!entry[box]) {\n if (box === \"contentBoxSize\") {\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n return void 0;\n }\n return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n // @ts-ignore Support Firefox's non-standard behavior\n entry[box][sizeType]\n );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER4) {\n initializeWithValue = false;\n }\n const readScreen = () => {\n if (IS_SERVER4) {\n return void 0;\n }\n return window.screen;\n };\n const [screen, setScreen] = useState(() => {\n if (initializeWithValue) {\n return readScreen();\n }\n return void 0;\n });\n const debouncedSetScreen = useDebounceCallback(\n setScreen,\n options.debounceDelay\n );\n function handleSize() {\n const newScreen = readScreen();\n const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n if (newScreen) {\n const {\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n } = newScreen;\n setSize({\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n });\n }\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n const node = document.querySelector(\n `script[src=\"${src}\"]`\n );\n const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n return {\n node,\n status\n };\n}\nfunction useScript(src, options) {\n const [status, setStatus] = useState(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return \"idle\";\n }\n if (typeof window === \"undefined\") {\n return \"loading\";\n }\n return cachedScriptStatuses.get(src) ?? \"loading\";\n });\n useEffect(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return;\n }\n const cachedScriptStatus = cachedScriptStatuses.get(src);\n if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n setStatus(cachedScriptStatus);\n return;\n }\n const script = getScriptNode(src);\n let scriptNode = script.node;\n if (!scriptNode) {\n scriptNode = document.createElement(\"script\");\n scriptNode.src = src;\n scriptNode.async = true;\n if (options == null ? void 0 : options.id) {\n scriptNode.id = options.id;\n }\n scriptNode.setAttribute(\"data-status\", \"loading\");\n document.body.appendChild(scriptNode);\n const setAttributeFromEvent = (event) => {\n const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n };\n scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n } else {\n setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n }\n const setStateFromEvent = (event) => {\n const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n setStatus(newStatus);\n cachedScriptStatuses.set(src, newStatus);\n };\n scriptNode.addEventListener(\"load\", setStateFromEvent);\n scriptNode.addEventListener(\"error\", setStateFromEvent);\n return () => {\n if (scriptNode) {\n scriptNode.removeEventListener(\"load\", setStateFromEvent);\n scriptNode.removeEventListener(\"error\", setStateFromEvent);\n }\n if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n scriptNode.remove();\n cachedScriptStatuses.delete(src);\n }\n };\n }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n const { autoLock = true, lockTarget, widthReflow = true } = options;\n const [isLocked, setIsLocked] = useState(false);\n const target = useRef(null);\n const originalStyle = useRef(null);\n const lock = () => {\n if (target.current) {\n const { overflow, paddingRight } = target.current.style;\n originalStyle.current = { overflow, paddingRight };\n if (widthReflow) {\n const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n }\n target.current.style.overflow = \"hidden\";\n setIsLocked(true);\n }\n };\n const unlock = () => {\n if (target.current && originalStyle.current) {\n target.current.style.overflow = originalStyle.current.overflow;\n if (widthReflow) {\n target.current.style.paddingRight = originalStyle.current.paddingRight;\n }\n }\n setIsLocked(false);\n };\n useIsomorphicLayoutEffect(() => {\n if (IS_SERVER5)\n return;\n if (lockTarget) {\n target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n }\n if (!target.current) {\n target.current = document.body;\n }\n if (autoLock) {\n lock();\n }\n return () => {\n unlock();\n };\n }, [autoLock, lockTarget, widthReflow]);\n return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER6) {\n return initialValueToUse;\n }\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER6) {\n console.warn(\n `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.sessionStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER6) {\n console.warn(\n `Tried removing sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.sessionStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"session-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nfunction useStep(maxStep) {\n const [currentStep, setCurrentStep] = useState(1);\n const canGoToNextStep = currentStep + 1 <= maxStep;\n const canGoToPrevStep = currentStep - 1 > 0;\n const setStep = useCallback(\n (step) => {\n const newStep = step instanceof Function ? step(currentStep) : step;\n if (newStep >= 1 && newStep <= maxStep) {\n setCurrentStep(newStep);\n return;\n }\n throw new Error(\"Step not valid\");\n },\n [maxStep, currentStep]\n );\n const goToNextStep = useCallback(() => {\n if (canGoToNextStep) {\n setCurrentStep((step) => step + 1);\n }\n }, [canGoToNextStep]);\n const goToPrevStep = useCallback(() => {\n if (canGoToPrevStep) {\n setCurrentStep((step) => step - 1);\n }\n }, [canGoToPrevStep]);\n const reset = useCallback(() => {\n setCurrentStep(1);\n }, []);\n return [\n currentStep,\n {\n goToNextStep,\n goToPrevStep,\n canGoToNextStep,\n canGoToPrevStep,\n setStep,\n reset\n }\n ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n defaultValue = \"system\",\n localStorageKey = LOCAL_STORAGE_KEY2,\n initializeWithValue = true\n} = {}) {\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n initializeWithValue\n });\n const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n const toggleTernaryDarkMode = () => {\n const modes = [\"light\", \"system\", \"dark\"];\n setMode((prevMode) => {\n const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n return modes[nextIndex];\n });\n };\n return {\n isDarkMode,\n ternaryDarkMode: mode,\n setTernaryDarkMode: setMode,\n toggleTernaryDarkMode\n };\n}\nfunction useTimeout(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (!delay && delay !== 0) {\n return;\n }\n const id = setTimeout(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n}\nfunction useToggle(defaultValue) {\n const [value, setValue] = useState(!!defaultValue);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER7) {\n initializeWithValue = false;\n }\n const [windowSize, setWindowSize] = useState(() => {\n if (initializeWithValue) {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n return {\n width: void 0,\n height: void 0\n };\n });\n const debouncedSetWindowSize = useDebounceCallback(\n setWindowSize,\n options.debounceDelay\n );\n function handleSize() {\n const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n setSize({\n width: window.innerWidth,\n height: window.innerHeight\n });\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\n"],"names":["useCopyToClipboard","copiedText","setCopiedText","useState","copy","useCallback","text","error"],"mappings":";;AAgDA,SAASA,IAAqB;AAC5B,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAS,IAAI,GAC3CC,IAAOC,EAAY,OAAOC,MAAS;AACvC,QAAI,EAAE,aAAa,QAAgB,UAAU;AAC3C,qBAAQ,KAAK,yBAAyB,GAC/B;AAET,QAAI;AACF,mBAAM,UAAU,UAAU,UAAUA,CAAI,GACxCJ,EAAcI,CAAI,GACX;AAAA,IACR,SAAQC,GAAO;AACd,qBAAQ,KAAK,eAAeA,CAAK,GACjCL,EAAc,IAAI,GACX;AAAA,IACb;AAAA,EACG,GAAE,EAAE;AACL,SAAO,CAACD,GAAYG,CAAI;AAC1B;","x_google_ignoreList":[0]}
@@ -1,6 +1,6 @@
1
- import { offset as ot, shift as st, flip as rt, size as ct, hide as lt, limitShift as ft, computePosition as ut, arrow as ht } from "./index.es578.js";
2
- import { createCoords as m, round as A, max as E, min as V, rectToClientRect as J, floor as D } from "./index.es579.js";
3
- import { isElement as v, getDocumentElement as O, getOverflowAncestors as $, getComputedStyle as R, isHTMLElement as b, getWindow as L, isTopLayer as S, getParentNode as W, isLastTraversableNode as H, isTableElement as at, isContainingBlock as Q, getContainingBlock as dt, getNodeName as M, isOverflowElement as _, getNodeScroll as N, getFrameElement as K, isWebKit as Y } from "./index.es580.js";
1
+ import { offset as ot, shift as st, flip as rt, size as ct, hide as lt, limitShift as ft, computePosition as ut, arrow as ht } from "./index.es584.js";
2
+ import { createCoords as m, round as A, max as E, min as V, rectToClientRect as J, floor as D } from "./index.es585.js";
3
+ import { isElement as v, getDocumentElement as O, getOverflowAncestors as $, getComputedStyle as R, isHTMLElement as b, getWindow as L, isTopLayer as S, getParentNode as W, isLastTraversableNode as H, isTableElement as at, isContainingBlock as Q, getContainingBlock as dt, getNodeName as M, isOverflowElement as _, getNodeScroll as N, getFrameElement as K, isWebKit as Y } from "./index.es586.js";
4
4
  function Z(t) {
5
5
  const e = R(t);
6
6
  let i = parseFloat(e.width) || 0, n = parseFloat(e.height) || 0;
@@ -6,7 +6,7 @@ import { useComposedRefs as T } from "./index.es463.js";
6
6
  import { useCallbackRef as x } from "./index.es519.js";
7
7
  import { useDirection as ce } from "./index.es521.js";
8
8
  import { useLayoutEffect as se } from "./index.es524.js";
9
- import { clamp as ie } from "./index.es586.js";
9
+ import { clamp as ie } from "./index.es583.js";
10
10
  import { composeEventHandlers as C } from "./index.es462.js";
11
11
  import { j as b } from "./index.es241.js";
12
12
  function ae(e, t) {
@@ -1,4 +1,4 @@
1
- import { createSidecarMedium as e } from "./index.es581.js";
1
+ import { createSidecarMedium as e } from "./index.es582.js";
2
2
  var a = e();
3
3
  export {
4
4
  a as effectCar
@@ -1,9 +1,9 @@
1
1
  import { __spreadArray as x } from "./index.es530.js";
2
2
  import * as n from "react";
3
- import { RemoveScrollBar as A } from "./index.es582.js";
4
- import { styleSingleton as I } from "./index.es583.js";
5
- import { nonPassive as s } from "./index.es584.js";
6
- import { locationCouldBeScrolled as T, handleScroll as W } from "./index.es585.js";
3
+ import { RemoveScrollBar as A } from "./index.es578.js";
4
+ import { styleSingleton as I } from "./index.es579.js";
5
+ import { nonPassive as s } from "./index.es580.js";
6
+ import { locationCouldBeScrolled as T, handleScroll as W } from "./index.es581.js";
7
7
  var b = function(t) {
8
8
  return "changedTouches" in t ? [t.changedTouches[0].clientX, t.changedTouches[0].clientY] : [0, 0];
9
9
  }, Y = function(t) {