@ews-admin/global-design-system 1.30.0 → 1.32.0

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 (41) hide show
  1. package/dist/components/LockScreen/LockScreen.d.ts +5 -4
  2. package/dist/components/LockScreen/LockScreen.d.ts.map +1 -1
  3. package/dist/components/LockScreen/LockScreen.types.d.ts +8 -0
  4. package/dist/components/LockScreen/LockScreen.types.d.ts.map +1 -1
  5. package/dist/components/Logo/Logo.d.ts.map +1 -1
  6. package/dist/components/Logo/logoAssets.d.ts +7 -0
  7. package/dist/components/Logo/logoAssets.d.ts.map +1 -0
  8. package/dist/components/PinCodeInput/PinCodeInput.d.ts +11 -0
  9. package/dist/components/PinCodeInput/PinCodeInput.d.ts.map +1 -0
  10. package/dist/components/PinCodeInput/PinCodeInput.types.d.ts +26 -0
  11. package/dist/components/PinCodeInput/PinCodeInput.types.d.ts.map +1 -0
  12. package/dist/components/PinCodeInput/index.d.ts +3 -0
  13. package/dist/components/PinCodeInput/index.d.ts.map +1 -0
  14. package/dist/hooks/index.d.ts +1 -0
  15. package/dist/hooks/index.d.ts.map +1 -1
  16. package/dist/hooks/useMediaQuery.d.ts +7 -0
  17. package/dist/hooks/useMediaQuery.d.ts.map +1 -0
  18. package/dist/index.css +1 -1
  19. package/dist/index.d.ts +55 -6
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.esm.css +1 -1
  22. package/dist/index.esm.js +255 -63
  23. package/dist/index.esm.js.map +1 -1
  24. package/dist/index.js +256 -62
  25. package/dist/index.js.map +1 -1
  26. package/package.json +2 -1
  27. package/src/assets/logo/logo.png +0 -0
  28. package/src/assets/logo/logoFullWhite.png +0 -0
  29. package/src/assets/logo/logoIcon.png +0 -0
  30. package/src/assets/logo/logoWhite.png +0 -0
  31. package/src/components/LockScreen/LockScreen.tsx +215 -89
  32. package/src/components/LockScreen/LockScreen.types.ts +8 -0
  33. package/src/components/Logo/Logo.tsx +17 -25
  34. package/src/components/Logo/logoAssets.ts +16 -0
  35. package/src/components/PinCodeInput/PinCodeInput.tsx +184 -0
  36. package/src/components/PinCodeInput/PinCodeInput.types.ts +25 -0
  37. package/src/components/PinCodeInput/index.ts +2 -0
  38. package/src/hooks/index.ts +1 -0
  39. package/src/hooks/useMediaQuery.ts +31 -0
  40. package/src/index.ts +4 -0
  41. package/src/types/assets.d.ts +5 -0
package/dist/index.js CHANGED
@@ -33083,6 +33083,33 @@ function useDebouncedCallback(callback, delay) {
33083
33083
  return debouncedCallback;
33084
33084
  }
33085
33085
 
33086
+ const matches = (query, fallback) => typeof window !== "undefined" && typeof window.matchMedia === "function"
33087
+ ? window.matchMedia(query).matches
33088
+ : fallback;
33089
+ /**
33090
+ * Whether a CSS media query matches, updated when it changes. Returns
33091
+ * `defaultValue` where `matchMedia` does not exist (server rendering, old
33092
+ * test environments).
33093
+ */
33094
+ const useMediaQuery = (query, defaultValue = false) => {
33095
+ const [value, setValue] = React.useState(() => matches(query, defaultValue));
33096
+ React.useEffect(() => {
33097
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function")
33098
+ return;
33099
+ const list = window.matchMedia(query);
33100
+ const onChange = () => setValue(list.matches);
33101
+ onChange();
33102
+ // Safari < 14 only has addListener.
33103
+ if (list.addEventListener) {
33104
+ list.addEventListener("change", onChange);
33105
+ return () => list.removeEventListener("change", onChange);
33106
+ }
33107
+ list.addListener(onChange);
33108
+ return () => list.removeListener(onChange);
33109
+ }, [query]);
33110
+ return value;
33111
+ };
33112
+
33086
33113
  const DEFAULT_TIMEOUT_MS = 180000;
33087
33114
  const DEFAULT_STORAGE_KEY = "ews-idle-lock";
33088
33115
  const ACTIVITY_WRITE_INTERVAL_MS = 5000;
@@ -34557,31 +34584,33 @@ var Cropper$1 = class Cropper extends React__namespace.Component {
34557
34584
  const isMediaScaledDown = mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight;
34558
34585
  const mediaAspect = naturalWidth / naturalHeight;
34559
34586
  let renderedMediaSize;
34560
- if (isMediaScaledDown) switch (this.state.mediaObjectFit) {
34561
- default:
34562
- case "contain":
34563
- renderedMediaSize = containerAspect > mediaAspect ? {
34564
- width: this.containerRect.height * mediaAspect,
34565
- height: this.containerRect.height
34566
- } : {
34567
- width: this.containerRect.width,
34568
- height: this.containerRect.width / mediaAspect
34569
- };
34570
- break;
34571
- case "horizontal-cover":
34572
- renderedMediaSize = {
34573
- width: this.containerRect.width,
34574
- height: this.containerRect.width / mediaAspect
34575
- };
34576
- break;
34577
- case "vertical-cover":
34578
- renderedMediaSize = {
34579
- width: this.containerRect.height * mediaAspect,
34580
- height: this.containerRect.height
34581
- };
34582
- break;
34583
- }
34584
- else renderedMediaSize = {
34587
+ if (isMediaScaledDown) {
34588
+ var _this$state$mediaObje;
34589
+ switch ((_this$state$mediaObje = this.state.mediaObjectFit) !== null && _this$state$mediaObje !== void 0 ? _this$state$mediaObje : this.getObjectFit()) {
34590
+ default:
34591
+ case "contain":
34592
+ renderedMediaSize = containerAspect > mediaAspect ? {
34593
+ width: this.containerRect.height * mediaAspect,
34594
+ height: this.containerRect.height
34595
+ } : {
34596
+ width: this.containerRect.width,
34597
+ height: this.containerRect.width / mediaAspect
34598
+ };
34599
+ break;
34600
+ case "horizontal-cover":
34601
+ renderedMediaSize = {
34602
+ width: this.containerRect.width,
34603
+ height: this.containerRect.width / mediaAspect
34604
+ };
34605
+ break;
34606
+ case "vertical-cover":
34607
+ renderedMediaSize = {
34608
+ width: this.containerRect.height * mediaAspect,
34609
+ height: this.containerRect.height
34610
+ };
34611
+ break;
34612
+ }
34613
+ } else renderedMediaSize = {
34585
34614
  width: mediaRef.offsetWidth,
34586
34615
  height: mediaRef.offsetHeight
34587
34616
  };
@@ -34931,9 +34960,9 @@ var Cropper$1 = class Cropper extends React__namespace.Component {
34931
34960
  });
34932
34961
  }
34933
34962
  render() {
34934
- var _this$state$mediaObje;
34963
+ var _this$state$mediaObje2;
34935
34964
  const { image, video, mediaProps, cropperProps, transform, crop: { x, y }, rotation, zoom, cropShape, showGrid, roundCropAreaPixels, style: { containerStyle, cropAreaStyle, mediaStyle }, classes: { containerClassName, cropAreaClassName, mediaClassName } } = this.props;
34936
- const objectFit = (_this$state$mediaObje = this.state.mediaObjectFit) !== null && _this$state$mediaObje !== void 0 ? _this$state$mediaObje : this.getObjectFit();
34965
+ const objectFit = (_this$state$mediaObje2 = this.state.mediaObjectFit) !== null && _this$state$mediaObje2 !== void 0 ? _this$state$mediaObje2 : this.getObjectFit();
34937
34966
  return /* @__PURE__ */ React__namespace.createElement("div", {
34938
34967
  onMouseDown: this.onMouseDown,
34939
34968
  onTouchStart: this.onTouchStart,
@@ -35240,6 +35269,26 @@ const PhoneInput = React.forwardRef(({ countryCode, onCountryCodeChange, onChang
35240
35269
  });
35241
35270
  PhoneInput.displayName = "PhoneInput";
35242
35271
 
35272
+ var img$3 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIcAAACACAMAAAAWPIqAAAAAb1BMVEVMaXEfqJ8eppwfp54fp54ZiIgblZEGhIIfp54fWWwdpJwfp54fp54fpp0fp54fp50eV2sfWWsdVmkgWW0fp50epp0fWGwepp0eWGseV2ofWWweWGofWGsfWWwfWGsgWm0gqJ8hXXEisKchraQgqqGPBCwLAAAAH3RSTlMA6zvb+Q0ZAv38KrjKa5OmTL8l8IFLrVt6NtBkjd+c9z6ozQAAAAlwSFlzAAAM6wAADOsB5dZE0gAACLZJREFUeNrtW+ly4yAM9gmObztOnNsO8P7PuBLYgJO0221j+meZ6UyStuaLjk8SSJ73f/1fay76iztTuea36o1jPGZ/L45jEsevfuMGBCVB35VZludhGOZ5VpVdnxKq/sAFBtiEpkWV+6PgjDHOueD4gnGR+HnZp3R9qeDj46DMI87EmCQRrEQt9XLkjPt5F8RrQpGSCMpQMD7KTZ8X4EEsIu/StZxIiqLIE8ZfYDASkS8SzqKsj9dAAk8kXcg5fuEFAolKgIlMSyiFJZyHRfxuk4XHkc5nIooetSAYE0kEHlNVVQk/WR7KD0Fq4t1IkJ/6EFAkSxDgLyLMyiJIY7MbjVNw6CqPwIoEz3fvUw7sEeR8iQIEA56RdQF5IFRNb2lfhREIqyRvAkK9uIu4jSJB7UdVkZr9LXnMb+H/duhcfv8O3cAj0pzZ1ilR5AXRrqzoNaavWDfeVT6r4h+LBB7W+2yJAnxyZ/aXux0P5/YDX/fSMvKDHwIBAy15YugCXoJCAgMCSaW+nfb1R18Z/4KUfvFT06iWwuAiS3UkQz86Xq5Dc6R/IUBSlT/QDZBGvoCRsHCnwymqpt5v76f6bxEWf7srvg0EYVh+AsKISsNLIIu6Ge7bA/2KO4Bkv+u/4CjhAgYLg5mUUCP1abjfm+MXnfLbrgvSWMAQ3LgfPLTd34fN5mvC+KGJWkpJEhEVtkoO2/tm2Narp17gkRkzQS3iSAFaJ21z32zup+P6GSD1SstTIp6nlk7qLcJoyPrZObCopZSI5XpP0MkFDGNz38cuYKT+aMHIjIV6BHXiBoaHNjqT+QOM9gQG6ggG9Tpjowm3ldJeJYzGDYwgMtIQ4TOME3FSQFJgjlkaYxQ8whi2rQsY1Cu0y0JM6S0TRdsAHLWbcpr4YvaViHV6Txo3Esb94kYpyGBaGhk1ZH5TMBonJb1NHcnoGxr1zsAbaBxH9+JghYFx3G6kOA6OzlrILA5bKxB9T5NWYkfi0BQGBZvlsheEAYGldiWOcHaWiJWWVhAF8rkbGDLOaiMlpnpQLjtsjq5wZDMOizqkr7gVh3baBOOKThGvg7IOZ+Io2CtxHNyKA1bFk2frIJM4XAUWizwWzjKJYzg5QkG93eS0FncghSlxOKNSQ2KQoBtx1FIcgzOnRa/VOKzIsp+stHF2dk5CZR4LK223ShoO1RKMKi9NWPZopU7V0s9q0QF/pnSw1Gvszkz5HOOMt7STNNyRGAUWiyZO10npFFocmocMcso8ePXoLQ7JFEwhVDhs81B5GCw3RYuqaqccKBHGPI6z156oaxxWmq7JFFjM3V3klHxAZR17D+zhqnqyk6DIZrH9L7iLxlGaYlLFWsBxdo+Dd8ZdrsNkp/Uv4DBuS7bOcehCPxl3xm03v4BD+63BUW827vUSKz5NhIVj2LiXxxRffhvHHG9f4zg7xNF9guPgEIeq5pZ2OvvLxSGO4BO/vTnEocq5ROiiYU7W3cZbqg5wE4vXDZ86S5P1GZ2Jc1THOaf5GBQOaCCL6qWZq5fBJZGlERgI5EEmXb/d3Tsu7IuMusgLdTUH9Ys7GLLgh9oyeCYyq55zcDsYoGLsumF2XAAy17eEOBAIXIhBIlTpe2t6ejIQWqx+DQTUDgyScKuuvGgcjapg4NSoXB8HUipI5KmAsQ4eoP4s1geCVGYdB2lGNYrBRDbwqIM7wog9F9qqtJzBaoF5ax6hLs6lzloxhlLjMFzZVuXhFFhqb4e6x6MYMFXrqn3Fo/5FaTlTu3W+jma0MhAQCDZI2SX/8CIZinMWpisDAZcxx/xAZY22EB38Aa3Pw+CtFE9f1HVwnR7rLbWlWgJBxhuj/n1A6NMpsSTVhBePB+zLQ1QQG4eK/F2nRNhMGbw637YPYyyBNKZj3YMeN5aRt4gEHtF19FXlb3OqyQ6tegrkBHCZv3sDEGzcK+nr60K0kMcrB0xD2iUQMZY/FQn8986vXj1E+ox9M7Y3mjHnygqIbPb7/lUE/iepTCB5kSH6qWddOmyGp0RV9UFGQlTpd9t/sTOv8K22iuduOmEfKx9MlLE6DbAvFJtkmQ/K+YZ2sG20zxn/OI+QtjqaJhRqaeZqGB22LgS2cTO/w0/pPxIG7XPxuamj7XDrDre9Gs00dn+2twvBSCJ4XBl8fbRBoiBFDo3v+efxAYHYeQiEGWOrdNHanmFPOcgEmviJGoz5QvMljihA1734a4csxhC7A8SYiOR3SyJoaThQgE385S5+ydJL+qZpl0UQGJSv/T30+iwwLac3C8jFBoKeJ+TcQzIy4Vdy9sTqKTdLxa+gw4mRCLonu/hrXbRpaBIAO/AugUyt9jj8oAY+YA6mCEj8/ECS7roM+uthFiFiEbj7F60JmCo0+ottIIvWPmX6agwDsIw4cOHnMHNQ9LtArr4oygog4G9wDoMlVfB1+oM/K3OTARgg2Pi5OImQSDLBcDRmlMYyChwSGuVACng2VyND8i04l+o+/xe+KyoDhNgSuS4bYRFJUPlcbp3IZnc9LjQNyMhPwIRCnNP5N9pD1fcm4sX7u3bfYXNY0rlsVS8yX0yyNx3484AOKEyE1S7+HvmauTRQ6MUAASN5iLVy4IGgLcL0Es7kKAQIBwwDfCnrdjH9Zlikyzfn7YwEgFzPj19t9s2izEIfDWMUOKfiy0kZ8rZzC3jI8bQQSfv0ZP11SZoGu74Hn0kJffegH+jpNgxGJNtL+/x0Sl9/9M5KA1u2r9il/ICEvqbxt+9vA4kv2xnJRiI5uh2uNEjam4UEBi6ac0tfK2RtJEdAMmgo9/t2P00FvYxua46dtpfr/T4YoYBULucjeSpE2njtqU9yhlEcKZXNBOW+uTa3w7muW1zH+ny5Hep4deXAnQRAgf2lwcol3yDvI6ptszoKTUuU1IfmBHKRS3ozvtie9oeaOBvfngwxbo/nw2Xf4NrvL4fzUVmFU/f5YDPqnlE+zEb/r//rTesP07sXWlzQCRsAAAAASUVORK5CYII=";
35273
+
35274
+ var img$2 = "data:image/png;base64,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";
35275
+
35276
+ var img$1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXgAAADACAMAAAA5rYg4AAAAmVBMVEVMaXH+/v7////6/Pz+/v7////////2+PjC0NDy9/j////////////////Y6enA29z7/f3////////7/f39/v7+/v7+///////////////////////////x+Pj////////+///l8fHH4OG72dr+///0+fnc7O3Q5ub////Z7Ovg7u/v9vbs9fXq9PTl8fHo8vL+///////+//+UCyKNAAAAMXRSTlMA+vwT/f76AgEEvhzZ4woR8JNYJfYyPofQschsT92odn9NMyIr6m9CYl+Bz7+xkqKe/GcyzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAIABJREFUeNrtfQefqkjzNSihMQAqZh1zToPf/8O9p7oJTSOOM9e7z/+dS+/+dh0lHorqqlOhNa0c5ShHOcpRjnKUoxzlKEc5MJhtO5lhsxKUvw05wfzgBxvPwmYl/n8HczuC3F0td4vDYUvjcFj0dksv3gjPpUT/jcMWeDJ3eRjfztPNxg+M+z3EuOuBv9lMT5frdrFy+ZN5/E6U4/uyzkF3O4vjZapztDEqumHRMAzDFN/c78H0fF1w6bdLrf/nss40pq0O1/MmBMKmYem6UakYphD48A7kjYph6HgG/Av/dD2s+OMq5f7nw3GA4Gp72ejA3LJ0wwiLx72iW7qFpxNsLhz7Evqfqxi2Olx8iLoBOY91ytMB2dcr2MG/LTxSOSWMP9Ex7uK2AZi6rpuvgC6GaZqQfDyr6XVZapzvw47p9HCChuH65QXY7/e7LPhQO6HpnxdONDeX41Uls9pOQ7NiPZF1E8INgDGt4l/MueIDzb3Y527eSd/fT9sqXIAS+pdhP05hMepGEexmBbrcKtT6eGCWDttHN+7hdOtxvVWOry0Z77i5myTsZsEEClzpA3yn0/nWP3IPllzZ43HeOp/gXvEdyQzSdSj7rV1aOF+LO3Q7lMxjHYPvgDoJur453Y6LnffoEO5ysb2epz6UvqnTzByed9A3JbjPCBmm7c6GqRfAbhCK5n1zOS46rsbVByN+xo6GRKGxVRdeF5miph6EwW1V2pZPxd27+iFE+gHuQJ1mS/903FUdoZOK+OD4ATB3dbhNAzJIw83W0ZwS4sd42druFBoP5sw7CXslDDfn45K9xkISg8xF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";
35277
+
35278
+ var img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAADACAMAAADV9C9rAAAAhFBMVEVMaXH8/Pz///////+w19Qfp577+/v////////L5eP+/v7////////////////J5uT////////////////////////////+/v7////////////////////////////////+/v4fp54dpZz///8cpJsepZwepp0epp0fp57a7u3///8hr6ahFaQbAAAAKnRSTlMABvfvAf0E/vwCD2Xc5VIMNqUru9OIQFwXx31xJK+TSR3rTpwmeZq10VG02FS/AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR42u1diXKjuhJl0bBjMGYzi3HibEX+//9ed0uABDhxcp2pehNUc+9MjMFOH/W+SNO2ta1tbWtb29rWtra1rX9wMVjwv40Qf53ulmW5lot/gPwuLvgZf9qI8+PLReJ/fHWD4cfWSHzLOzdJnHe7ovBrvyh2XR7HzdmzOIvA+zYU7i95BPX1c9L52eVwDEyjn5Zjhunhkvld3HguZwZ3I9p9dz9Sv8n9Uxs4nOi2Y0zLsQUS4XFfFXHJJsy29d/JrwP5WZnXl6PZA6UHyjuODYv+78DiryE0fdhWXaPDTbq1ke8/Sx8dKKmVXdWGQFra90jyfnXZHAh4Q28eT0WsI3wbI/xH6a9pUV4dQiCvIYj74UIeQRic3rbTS3EGlbBh8H3LUwebpvHbACiLQgeF/ScATMxAEsk8VLmLz9mI+V36x9mRS37nQ9LbQhfQsklK2Six4O9gvwP6b0r5G/IfiJZfwPBxjCubH18ZNDDXzKSQnfEnAqEHvVxE8LwNgy/aP0j/0B7ov9z0XNKovGE7sotAlx0ujAADS9/I+gUBpGvxHukPa7H7bVuQly4YwbG9ZBV6xruu2+12hV9ll/YYkMPGGQLeddht6uArDKCdsxDJZy/obwuHAC+Yx0u9i5Nz6c22t+WVTZLvqv3RECgAH7Q5PHiLVtxEf6YXR6cn22dJf1vY+4esiM8ek8OlYo0C3/WauMgOJjel+vB01jY2uIkBktbonaXfZdskfOCv4LRLSn2IhvIgNZOC1y6FqjkSepkUpxTdCcdOdxsEn5tAWlSHtrMEgNMf1Gpw6s4Rvdf9OCGASHAUonMHICDnnEptM4o+VsFaciAGcFZsH1C95n7H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";
35279
+
35280
+ /**
35281
+ * MED-1629: the Medecine360 logos ship with the package (inlined as data URIs by
35282
+ * @rollup/plugin-image), so consuming apps need no `/image/logo*.png` in their public folder.
35283
+ * Sized to 2x the largest rendered height (Logo xl = 96px, icon xl = 64px).
35284
+ */
35285
+ const logoAssets = {
35286
+ normal: img$2,
35287
+ white: img,
35288
+ fullWhite: img$1,
35289
+ favicon: img$3,
35290
+ };
35291
+
35243
35292
  const Logo = ({ size = "md", showTagline: _showTagline = true, iconOnly = false, variant = "normal", className, onClick, customSrc, alt = "MEDECINE 360 Logo", clickable = false, }) => {
35244
35293
  const sizes = {
35245
35294
  sm: "h-8",
@@ -35253,18 +35302,19 @@ const Logo = ({ size = "md", showTagline: _showTagline = true, iconOnly = false,
35253
35302
  lg: "h-12 w-12",
35254
35303
  xl: "h-16 w-16",
35255
35304
  };
35256
- // Get the appropriate logo image based on variant or custom source
35257
- // For iconOnly, always use favicon.ico unless customSrc is provided
35258
- const logoSrc = customSrc ||
35259
- (iconOnly
35260
- ? "/favicon.ico"
35261
- : variant === "white"
35262
- ? "/image/logoWhite.png"
35263
- : variant === "fullWhite"
35264
- ? "/image/logoFullWhite.png"
35265
- : variant === "favicon"
35266
- ? "/favicon.ico"
35267
- : "/image/logo.png");
35305
+ // Bundled logo per variant (MED-1629); customSrc wins. iconOnly always uses the icon.
35306
+ const logoSrc = customSrc || (iconOnly ? logoAssets.favicon : logoAssets[variant]);
35307
+ const fallbackSrc = iconOnly ? logoAssets.favicon : logoAssets.normal;
35308
+ // On a load error, fall back to the bundled logo once, then hide the image (keeps layout).
35309
+ const handleError = (e) => {
35310
+ const img = e.currentTarget;
35311
+ if (img.getAttribute("src") !== fallbackSrc) {
35312
+ img.src = fallbackSrc;
35313
+ }
35314
+ else {
35315
+ img.style.visibility = "hidden";
35316
+ }
35317
+ };
35268
35318
  const isClickable = clickable || !!onClick;
35269
35319
  if (iconOnly) {
35270
35320
  return (jsxRuntime.jsx("div", { className: cn("flex items-center justify-center", iconSizes[size], isClickable && "cursor-pointer", className), onClick: onClick, role: isClickable ? "button" : undefined, tabIndex: isClickable ? 0 : undefined, onKeyDown: isClickable
@@ -35274,12 +35324,7 @@ const Logo = ({ size = "md", showTagline: _showTagline = true, iconOnly = false,
35274
35324
  onClick?.();
35275
35325
  }
35276
35326
  }
35277
- : undefined, children: jsxRuntime.jsx("img", { src: logoSrc, alt: alt, className: "object-contain w-full h-full", onError: (e) => {
35278
- // Fallback to favicon if image fails to load
35279
- if (logoSrc !== "/favicon.ico") {
35280
- e.target.src = "/favicon.ico";
35281
- }
35282
- } }) }));
35327
+ : undefined, children: jsxRuntime.jsx("img", { src: logoSrc, alt: alt, className: "object-contain w-full h-full", onError: handleError }) }));
35283
35328
  }
35284
35329
  return (jsxRuntime.jsx("div", { className: cn("flex items-center", sizes[size], isClickable && "cursor-pointer", className), onClick: onClick, role: isClickable ? "button" : undefined, tabIndex: isClickable ? 0 : undefined, onKeyDown: isClickable
35285
35330
  ? (e) => {
@@ -35288,12 +35333,7 @@ const Logo = ({ size = "md", showTagline: _showTagline = true, iconOnly = false,
35288
35333
  onClick?.();
35289
35334
  }
35290
35335
  }
35291
- : undefined, children: jsxRuntime.jsx("img", { src: logoSrc, alt: alt, className: "object-contain w-auto h-full", onError: (e) => {
35292
- // Fallback to favicon if image fails to load
35293
- if (logoSrc !== "/favicon.ico") {
35294
- e.target.src = "/favicon.ico";
35295
- }
35296
- } }) }));
35336
+ : undefined, children: jsxRuntime.jsx("img", { src: logoSrc, alt: alt, className: "object-contain w-auto h-full", onError: handleError }) }));
35297
35337
  };
35298
35338
 
35299
35339
  const PROMED_THEME = {
@@ -35502,6 +35542,131 @@ const PinPad = ({ length = 4, onComplete, onChange, disabled = false, invalid =
35502
35542
  : "bg-ews-primary-light", disabled && index < value.length && "animate-pulse") }, index))) }), jsxRuntime.jsx("p", { className: "sr-only", "aria-live": "polite", "aria-atomic": "true", children: progressLabel(value.length, length) }), jsxRuntime.jsxs("div", { dir: "ltr", role: "group", "aria-label": keypadLabel, className: "grid grid-cols-3 gap-x-8 gap-y-4", children: [DIGIT_ROWS.map((digit) => (jsxRuntime.jsx("button", { type: "button", className: keyClass, disabled: disabled, onClick: () => press(digit), children: digit }, digit))), jsxRuntime.jsx("span", { "aria-hidden": "true" }), jsxRuntime.jsx("button", { type: "button", className: keyClass, disabled: disabled, onClick: () => press("0"), children: "0" }), jsxRuntime.jsx("button", { type: "button", className: cn(keyClass, "text-ews-gray-700"), disabled: disabled || value.length === 0, "aria-label": eraseLabel, onClick: erase, children: jsxRuntime.jsx(Delete, { className: "h-7 w-7", strokeWidth: 1.5, "aria-hidden": "true" }) })] })] }));
35503
35543
  };
35504
35544
 
35545
+ const MASK = "•";
35546
+ const onlyDigits = (text) => text.replace(/\D/g, "");
35547
+ /**
35548
+ * Row of one-digit boxes for a PIN or a one-time code (desktop keyboards):
35549
+ * typing moves to the next box, Backspace goes back, arrows move, pasting a
35550
+ * code fills the boxes and `onComplete` fires once every box is filled.
35551
+ */
35552
+ const PinCodeInput = ({ length = 4, onComplete, onChange, masked = true, autoComplete = "off", autoFocus = true, disabled = false, invalid = false, resetKey, digitLabel, groupLabel, className, }) => {
35553
+ const empty = React.useCallback(() => Array.from({ length }, () => ""), [length]);
35554
+ const [digits, setDigits] = React.useState(empty);
35555
+ const digitsRef = React.useRef(digits);
35556
+ const inputs = React.useRef([]);
35557
+ const focusBox = (index) => {
35558
+ const input = inputs.current[Math.max(0, Math.min(index, length - 1))];
35559
+ input?.focus();
35560
+ input?.select();
35561
+ };
35562
+ const update = (next) => {
35563
+ digitsRef.current = next;
35564
+ setDigits(next);
35565
+ const value = next.join("");
35566
+ onChange?.(value);
35567
+ if (value.length === length && next.every(Boolean))
35568
+ onComplete(value);
35569
+ };
35570
+ /** Writes `chars` from box `start` on and focuses the box after them. */
35571
+ const fill = (start, chars) => {
35572
+ const next = [...digitsRef.current];
35573
+ const written = chars.slice(0, length - start).split("");
35574
+ written.forEach((char, offset) => {
35575
+ next[start + offset] = char;
35576
+ });
35577
+ focusBox(start + written.length);
35578
+ update(next);
35579
+ };
35580
+ // Clear the boxes when the caller asks for it.
35581
+ React.useEffect(() => {
35582
+ const cleared = empty();
35583
+ digitsRef.current = cleared;
35584
+ setDigits(cleared);
35585
+ }, [resetKey, empty]);
35586
+ // Focus the first empty box on mount, after a reset and once re-enabled.
35587
+ React.useEffect(() => {
35588
+ if (!autoFocus || disabled)
35589
+ return;
35590
+ const firstEmpty = digitsRef.current.findIndex((digit) => !digit);
35591
+ focusBox(firstEmpty === -1 ? length - 1 : firstEmpty);
35592
+ // eslint-disable-next-line react-hooks/exhaustive-deps
35593
+ }, [autoFocus, disabled, resetKey, length]);
35594
+ const handleChange = (index, event) => {
35595
+ if (disabled)
35596
+ return;
35597
+ const { value, selectionStart } = event.target;
35598
+ const typed = onlyDigits(value);
35599
+ if (!typed) {
35600
+ const next = [...digitsRef.current];
35601
+ next[index] = "";
35602
+ update(next);
35603
+ return;
35604
+ }
35605
+ // A digit typed next to the one already in the box: keep the new one.
35606
+ if (digitsRef.current[index] && value.length === 2) {
35607
+ const inserted = value.charAt((selectionStart ?? value.length) - 1);
35608
+ if (/\d/.test(inserted)) {
35609
+ fill(index, inserted);
35610
+ return;
35611
+ }
35612
+ }
35613
+ // One digit, or a whole code (browser autofill of the one-time code).
35614
+ fill(typed.length >= length ? 0 : index, typed);
35615
+ };
35616
+ const handleKeyDown = (index, event) => {
35617
+ if (disabled)
35618
+ return;
35619
+ switch (event.key) {
35620
+ case "Backspace": {
35621
+ event.preventDefault();
35622
+ const next = [...digitsRef.current];
35623
+ const target = next[index] ? index : Math.max(0, index - 1);
35624
+ next[target] = "";
35625
+ focusBox(target);
35626
+ update(next);
35627
+ return;
35628
+ }
35629
+ case "Delete": {
35630
+ event.preventDefault();
35631
+ const next = [...digitsRef.current];
35632
+ next[index] = "";
35633
+ update(next);
35634
+ return;
35635
+ }
35636
+ case "ArrowLeft":
35637
+ event.preventDefault();
35638
+ focusBox(index - 1);
35639
+ return;
35640
+ case "ArrowRight":
35641
+ event.preventDefault();
35642
+ focusBox(index + 1);
35643
+ return;
35644
+ case "Home":
35645
+ event.preventDefault();
35646
+ focusBox(0);
35647
+ return;
35648
+ case "End":
35649
+ event.preventDefault();
35650
+ focusBox(length - 1);
35651
+ return;
35652
+ }
35653
+ };
35654
+ const handlePaste = (index, event) => {
35655
+ event.preventDefault();
35656
+ if (disabled)
35657
+ return;
35658
+ const pasted = onlyDigits(event.clipboardData.getData("text"));
35659
+ if (!pasted)
35660
+ return;
35661
+ fill(pasted.length >= length ? 0 : index, pasted);
35662
+ };
35663
+ return (
35664
+ // Codes stay left-to-right in RTL locales.
35665
+ jsxRuntime.jsx("div", { dir: "ltr", role: "group", "aria-label": groupLabel, "data-testid": "pin-code-input", className: cn("flex justify-center gap-3", invalid && "animate-pin-shake", className), children: digits.map((digit, index) => (jsxRuntime.jsx("input", { ref: (element) => {
35666
+ inputs.current[index] = element;
35667
+ }, type: "text", inputMode: "numeric", pattern: "[0-9]*", autoComplete: index === 0 ? autoComplete : "off", autoCorrect: "off", spellCheck: false, value: digit && masked ? MASK : digit, disabled: disabled, "aria-label": digitLabel(index + 1, length), "aria-invalid": invalid || undefined, "data-filled": !!digit, onChange: (event) => handleChange(index, event), onKeyDown: (event) => handleKeyDown(index, event), onPaste: (event) => handlePaste(index, event), onFocus: (event) => event.target.select(), className: cn("h-14 w-12 rounded-lg border bg-white text-center text-2xl font-medium text-ews-gray-900 outline-none", "transition-colors focus:border-ews-primary focus:ring-2 focus:ring-ews-primary", "disabled:cursor-not-allowed disabled:opacity-60", invalid ? "border-ews-error" : digit ? "border-ews-primary" : "border-ews-gray-300", disabled && digit && "animate-pulse") }, index))) }));
35668
+ };
35669
+
35505
35670
  const FIRST_STEP = {
35506
35671
  create: "new",
35507
35672
  unlock: "unlock",
@@ -35522,14 +35687,19 @@ const titleOf = (mode, step, texts) => {
35522
35687
  return texts.confirmTitle;
35523
35688
  }
35524
35689
  };
35690
+ /** Same breakpoint as Tailwind's `sm`. */
35691
+ const DESKTOP_QUERY = "(min-width: 640px)";
35692
+ /** Open lock screens, oldest first; only the last one traps focus. */
35693
+ const trapStack = [];
35525
35694
  const FOCUSABLE = 'button:not([disabled]), input:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])';
35526
35695
  /**
35527
35696
  * Blocking PIN screen: creates, checks, changes or resets (with a one-time
35528
- * code) the user's secret code. Full screen on mobile, centered card on a grey
35529
- * backdrop from 640px. Submit handlers return promises: a rejection clears the
35530
- * code and goes back to the first step, the app shows its message in `error`.
35697
+ * code) the user's secret code. Below 640px: full screen with an on-screen
35698
+ * keypad. From 640px: compact dialog on a grey backdrop with one box per digit,
35699
+ * typed on the keyboard. Submit handlers return promises: a rejection clears
35700
+ * the code and goes back to the first step, the app shows its message in `error`.
35531
35701
  */
35532
- const LockScreen = ({ mode, texts, error, busy = false, onCreate, onUnlock, onChangePin, onReset, onForgot, onCancel, pinLength = 4, otpLength = 6, logo, className, }) => {
35702
+ const LockScreen = ({ mode, texts, error, busy = false, onCreate, onUnlock, onChangePin, onReset, onForgot, onCancel, onSignOut, subtitle, pinLength = 4, otpLength = 6, logo, className, }) => {
35533
35703
  const [step, setStep] = React.useState(FIRST_STEP[mode]);
35534
35704
  const [firstValue, setFirstValue] = React.useState(""); // current PIN or one-time code
35535
35705
  const [newPin, setNewPin] = React.useState("");
@@ -35540,6 +35710,7 @@ const LockScreen = ({ mode, texts, error, busy = false, onCreate, onUnlock, onCh
35540
35710
  const [resetKey, setResetKey] = React.useState(0);
35541
35711
  const panelRef = React.useRef(null);
35542
35712
  const mounted = React.useRef(true);
35713
+ const isDesktop = useMediaQuery(DESKTOP_QUERY);
35543
35714
  const restart = React.useCallback((failed) => {
35544
35715
  setStep(FIRST_STEP[mode]);
35545
35716
  setFirstValue("");
@@ -35558,22 +35729,33 @@ const LockScreen = ({ mode, texts, error, busy = false, onCreate, onUnlock, onCh
35558
35729
  mounted.current = false;
35559
35730
  };
35560
35731
  }, []);
35561
- // Block page scroll and keep focus inside the screen.
35732
+ // Block page scroll and keep focus inside the screen. Only the most recently
35733
+ // mounted lock screen traps focus: two traps pulling focus back to their own
35734
+ // panel would loop forever (e.g. a Storybook docs page rendering every story).
35562
35735
  React.useEffect(() => {
35736
+ const token = {};
35737
+ trapStack.push(token);
35563
35738
  const previousOverflow = document.body.style.overflow;
35564
35739
  document.body.style.overflow = "hidden";
35565
35740
  const previousFocus = document.activeElement;
35566
- panelRef.current?.focus();
35741
+ // The desktop code boxes focus themselves first.
35742
+ if (!panelRef.current?.contains(document.activeElement))
35743
+ panelRef.current?.focus();
35567
35744
  const keepFocus = (event) => {
35745
+ if (trapStack[trapStack.length - 1] !== token)
35746
+ return;
35568
35747
  const panel = panelRef.current;
35569
35748
  if (panel && !panel.contains(event.target))
35570
35749
  panel.focus();
35571
35750
  };
35572
35751
  document.addEventListener("focusin", keepFocus);
35573
35752
  return () => {
35753
+ const wasTop = trapStack[trapStack.length - 1] === token;
35754
+ trapStack.splice(trapStack.indexOf(token), 1);
35574
35755
  document.body.style.overflow = previousOverflow;
35575
35756
  document.removeEventListener("focusin", keepFocus);
35576
- previousFocus?.focus?.();
35757
+ if (wasTop)
35758
+ previousFocus?.focus?.();
35577
35759
  };
35578
35760
  }, []);
35579
35761
  const trapTab = (event) => {
@@ -35654,16 +35836,26 @@ const LockScreen = ({ mode, texts, error, busy = false, onCreate, onUnlock, onCh
35654
35836
  setInvalid(false);
35655
35837
  setStep("new");
35656
35838
  };
35839
+ const completeOtp = (code) => {
35840
+ setLocalError(null);
35841
+ setFirstValue(code);
35842
+ setInvalid(false);
35843
+ setStep("new");
35844
+ };
35657
35845
  const isBusy = busy || pending;
35658
35846
  const shownError = localError ?? error;
35659
35847
  const showForgot = !!onForgot &&
35660
35848
  !!texts.forgot &&
35661
35849
  (step === "unlock" || step === "current");
35662
35850
  const title = titleOf(mode, step, texts);
35663
- return (jsxRuntime.jsx("div", { className: cn("fixed inset-0 z-[1000] flex justify-center overflow-y-auto bg-white", "sm:items-center sm:bg-ews-gray-900/50 sm:backdrop-blur-sm", className), "data-testid": "lock-screen", children: jsxRuntime.jsxs("div", { ref: panelRef, role: "dialog", "aria-modal": "true", "aria-label": texts.dialogLabel, "aria-busy": isBusy, tabIndex: -1, onKeyDown: trapTab, className: cn("flex min-h-full w-full flex-col items-center px-6 pb-8 outline-none", "sm:min-h-0 sm:w-auto sm:min-w-[22rem] sm:rounded-2xl sm:bg-white sm:px-10 sm:py-10 sm:shadow-xl"), children: [jsxRuntime.jsx("div", { className: "flex min-h-[33vh] shrink-0 items-center justify-center sm:min-h-0 sm:pb-8", children: logo ?? jsxRuntime.jsx(Logo, { size: "lg", variant: "normal" }) }), title && (jsxRuntime.jsx("h2", { className: "mb-8 text-center text-lg font-normal text-ews-gray-900", children: title })), step === "otp" ? (jsxRuntime.jsxs("form", { onSubmit: submitOtp, className: "flex w-full max-w-xs flex-col items-center gap-4", children: [texts.otpDescription && (jsxRuntime.jsx("p", { className: "text-center text-sm text-ews-gray-600", children: texts.otpDescription })), jsxRuntime.jsx("label", { className: "sr-only", htmlFor: "lock-screen-otp", children: texts.otpLabel }), jsxRuntime.jsx("input", { id: "lock-screen-otp", dir: "ltr", inputMode: "numeric", autoComplete: "one-time-code", maxLength: otpLength, value: otp, disabled: isBusy, "aria-label": texts.otpLabel, "aria-invalid": invalid || undefined, onChange: (event) => {
35664
- setOtp(event.target.value.replace(/\D/g, "").slice(0, otpLength));
35665
- setInvalid(false);
35666
- }, className: cn("w-full rounded-lg border bg-white px-4 py-3 text-center text-2xl tracking-[0.5em]", "focus:border-ews-primary focus:ring-2 focus:ring-ews-primary", invalid ? "border-ews-error" : "border-ews-gray-300") }), jsxRuntime.jsx(Button, { type: "submit", variant: "ews-primary", fullWidth: true, disabled: otp.length !== otpLength || isBusy, children: texts.otpSubmit })] })) : (jsxRuntime.jsx(PinPad, { length: pinLength, onComplete: handlePin, onChange: () => setInvalid(false), disabled: isBusy, invalid: invalid, resetKey: resetKey, eraseLabel: texts.erase, progressLabel: texts.progress, keypadLabel: texts.keypad }, step)), jsxRuntime.jsx("p", { role: "alert", className: "mt-6 min-h-[1.25rem] text-center text-sm text-ews-error", children: shownError }), jsxRuntime.jsxs("div", { className: "mt-auto flex flex-col items-center gap-3 pt-6 sm:mt-4", children: [showForgot && (jsxRuntime.jsx("button", { type: "button", onClick: onForgot, disabled: isBusy, className: "text-base font-medium text-ews-primary hover:underline focus-visible:underline", children: texts.forgot })), onCancel && texts.cancel && (jsxRuntime.jsx("button", { type: "button", onClick: onCancel, disabled: isBusy, className: "text-sm text-ews-gray-600 hover:underline focus-visible:underline", children: texts.cancel }))] })] }) }));
35851
+ const digitLabel = texts.digit ?? texts.progress;
35852
+ const desktopContent = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: "pb-5", children: logo ?? jsxRuntime.jsx(Logo, { size: "sm", variant: "normal" }) }), title && (jsxRuntime.jsx("h2", { className: "text-center text-xl font-semibold text-ews-gray-900", children: title })), subtitle && (jsxRuntime.jsx("p", { className: "mt-1 text-center text-sm text-ews-gray-600", children: subtitle })), step === "otp" && texts.otpDescription && (jsxRuntime.jsx("p", { className: "mt-2 text-center text-sm text-ews-gray-600", children: texts.otpDescription })), jsxRuntime.jsx("div", { className: "mt-6", children: step === "otp" ? (jsxRuntime.jsx(PinCodeInput, { length: otpLength, masked: false, autoComplete: "one-time-code", onComplete: completeOtp, onChange: () => setInvalid(false), disabled: isBusy, invalid: invalid, resetKey: resetKey, digitLabel: digitLabel, groupLabel: texts.otpLabel ?? title }, step)) : (jsxRuntime.jsx(PinCodeInput, { length: pinLength, onComplete: handlePin, onChange: () => setInvalid(false), disabled: isBusy, invalid: invalid, resetKey: resetKey, digitLabel: digitLabel, groupLabel: title }, step)) }), jsxRuntime.jsx("p", { role: "alert", className: "mt-3 min-h-[1.25rem] text-center text-sm text-ews-error", children: shownError }), (showForgot || (onCancel && texts.cancel) || (onSignOut && texts.signOut)) && (jsxRuntime.jsxs("div", { className: "mt-4 flex w-full flex-col items-center gap-2 border-t border-ews-gray-200 pt-4", children: [showForgot && (jsxRuntime.jsx("button", { type: "button", onClick: onForgot, disabled: isBusy, className: "text-sm font-medium text-ews-primary hover:underline focus-visible:underline", children: texts.forgot })), onCancel && texts.cancel && (jsxRuntime.jsx("button", { type: "button", onClick: onCancel, disabled: isBusy, className: "text-sm text-ews-gray-600 hover:underline focus-visible:underline", children: texts.cancel })), onSignOut && texts.signOut && (jsxRuntime.jsx("button", { type: "button", onClick: onSignOut, disabled: isBusy, className: "text-sm text-ews-gray-600 hover:underline focus-visible:underline", children: texts.signOut }))] }))] }));
35853
+ return (jsxRuntime.jsx("div", { className: cn("fixed inset-0 z-[1000] flex justify-center overflow-y-auto bg-white", "sm:items-center sm:bg-ews-gray-900/50 sm:backdrop-blur-sm", isDesktop && "p-4", className), "data-testid": "lock-screen", "data-layout": isDesktop ? "desktop" : "mobile", children: jsxRuntime.jsx("div", { ref: panelRef, role: "dialog", "aria-modal": "true", "aria-label": texts.dialogLabel, "aria-busy": isBusy, tabIndex: -1, onKeyDown: trapTab, className: isDesktop
35854
+ ? "flex w-full max-w-[400px] flex-col items-center rounded-2xl bg-white px-8 py-8 shadow-xl outline-none"
35855
+ : cn("flex min-h-full w-full flex-col items-center px-6 pb-8 outline-none", "sm:min-h-0 sm:w-auto sm:min-w-[22rem] sm:rounded-2xl sm:bg-white sm:px-10 sm:py-10 sm:shadow-xl"), children: isDesktop ? (desktopContent) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: "flex min-h-[33vh] shrink-0 items-center justify-center sm:min-h-0 sm:pb-8", children: logo ?? jsxRuntime.jsx(Logo, { size: "lg", variant: "normal" }) }), title && (jsxRuntime.jsx("h2", { className: "mb-8 text-center text-lg font-normal text-ews-gray-900", children: title })), step === "otp" ? (jsxRuntime.jsxs("form", { onSubmit: submitOtp, className: "flex w-full max-w-xs flex-col items-center gap-4", children: [texts.otpDescription && (jsxRuntime.jsx("p", { className: "text-center text-sm text-ews-gray-600", children: texts.otpDescription })), jsxRuntime.jsx("label", { className: "sr-only", htmlFor: "lock-screen-otp", children: texts.otpLabel }), jsxRuntime.jsx("input", { id: "lock-screen-otp", dir: "ltr", inputMode: "numeric", autoComplete: "one-time-code", maxLength: otpLength, value: otp, disabled: isBusy, "aria-label": texts.otpLabel, "aria-invalid": invalid || undefined, onChange: (event) => {
35856
+ setOtp(event.target.value.replace(/\D/g, "").slice(0, otpLength));
35857
+ setInvalid(false);
35858
+ }, className: cn("w-full rounded-lg border bg-white px-4 py-3 text-center text-2xl tracking-[0.5em]", "focus:border-ews-primary focus:ring-2 focus:ring-ews-primary", invalid ? "border-ews-error" : "border-ews-gray-300") }), jsxRuntime.jsx(Button, { type: "submit", variant: "ews-primary", fullWidth: true, disabled: otp.length !== otpLength || isBusy, children: texts.otpSubmit })] })) : (jsxRuntime.jsx(PinPad, { length: pinLength, onComplete: handlePin, onChange: () => setInvalid(false), disabled: isBusy, invalid: invalid, resetKey: resetKey, eraseLabel: texts.erase, progressLabel: texts.progress, keypadLabel: texts.keypad }, step)), jsxRuntime.jsx("p", { role: "alert", className: "mt-6 min-h-[1.25rem] text-center text-sm text-ews-error", children: shownError }), jsxRuntime.jsxs("div", { className: "mt-auto flex flex-col items-center gap-3 pt-6 sm:mt-4", children: [showForgot && (jsxRuntime.jsx("button", { type: "button", onClick: onForgot, disabled: isBusy, className: "text-base font-medium text-ews-primary hover:underline focus-visible:underline", children: texts.forgot })), onCancel && texts.cancel && (jsxRuntime.jsx("button", { type: "button", onClick: onCancel, disabled: isBusy, className: "text-sm text-ews-gray-600 hover:underline focus-visible:underline", children: texts.cancel }))] })] })) }) }));
35667
35859
  };
35668
35860
 
35669
35861
  const SpecialtySearchAutocomplete = ({ selectedSpecialties = [], onSpecialtiesChange, specialties: availableSpecialties, placeholder = "Search and select medical specialties...", className = "", disabled = false, maxSelections, showSelectedCount = true, title = "Medical Specialties", label = "Select Specialties", getSelectedCountText, removeSpecialtyLabel = "Remove specialty", }) => {
@@ -40163,6 +40355,7 @@ exports.PillBottle = PillBottle;
40163
40355
  exports.PillBottleIcon = PillBottle;
40164
40356
  exports.PillIcon = Pill;
40165
40357
  exports.Pin = Pin;
40358
+ exports.PinCodeInput = PinCodeInput;
40166
40359
  exports.PinIcon = Pin;
40167
40360
  exports.PinOff = PinOff;
40168
40361
  exports.PinOffIcon = PinOff;
@@ -41341,6 +41534,7 @@ exports.parseDateSafe = parseDateSafe;
41341
41534
  exports.useDebounce = useDebounce;
41342
41535
  exports.useDebouncedCallback = useDebouncedCallback;
41343
41536
  exports.useIdleLock = useIdleLock;
41537
+ exports.useMediaQuery = useMediaQuery;
41344
41538
  exports.useSelectField = useSelectField;
41345
41539
  exports.useTheme = useTheme;
41346
41540
  //# sourceMappingURL=index.js.map