@a-type/ui 3.0.25 → 3.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/colors.stories.js +1 -8
- package/dist/cjs/colors.stories.js.map +1 -1
- package/dist/cjs/components/button/Button.js +3 -3
- package/dist/cjs/components/button/Button.js.map +1 -1
- package/dist/cjs/components/dialog/Dialog.js +30 -5
- package/dist/cjs/components/dialog/Dialog.js.map +1 -1
- package/dist/cjs/components/dialog/Dialog.stories.js +1 -1
- package/dist/cjs/components/dialog/Dialog.stories.js.map +1 -1
- package/dist/cjs/components/icon/Icon.d.ts +2 -1
- package/dist/cjs/components/icon/Icon.js +4 -3
- package/dist/cjs/components/icon/Icon.js.map +1 -1
- package/dist/cjs/components/index.d.ts +2 -0
- package/dist/cjs/components/index.js +2 -0
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/components/lightbox/Lightbox.d.ts +25 -0
- package/dist/cjs/components/lightbox/Lightbox.js +71 -0
- package/dist/cjs/components/lightbox/Lightbox.js.map +1 -0
- package/dist/cjs/components/lightbox/Lightbox.stories.d.ts +24 -0
- package/dist/cjs/components/lightbox/Lightbox.stories.js +21 -0
- package/dist/cjs/components/lightbox/Lightbox.stories.js.map +1 -0
- package/dist/cjs/components/lists/lists.d.ts +6 -0
- package/dist/cjs/components/lists/lists.js +16 -0
- package/dist/cjs/components/lists/lists.js.map +1 -0
- package/dist/cjs/components/lists/lists.stories.d.ts +14 -0
- package/dist/cjs/components/lists/lists.stories.js +25 -0
- package/dist/cjs/components/lists/lists.stories.js.map +1 -0
- package/dist/cjs/components/provider/Provider.d.ts +1 -4
- package/dist/cjs/components/provider/Provider.js +3 -3
- package/dist/cjs/components/provider/Provider.js.map +1 -1
- package/dist/cjs/components/pwaInstall/PlatformIcons.d.ts +5 -0
- package/dist/cjs/components/pwaInstall/PlatformIcons.js +25 -0
- package/dist/cjs/components/pwaInstall/PlatformIcons.js.map +1 -0
- package/dist/cjs/components/pwaInstall/PwaInstallTrigger.d.ts +5 -0
- package/dist/cjs/components/pwaInstall/PwaInstallTrigger.js +74 -0
- package/dist/cjs/components/pwaInstall/PwaInstallTrigger.js.map +1 -0
- package/dist/cjs/components/pwaInstall/PwaInstallTrigger.stories.d.ts +15 -0
- package/dist/cjs/components/pwaInstall/PwaInstallTrigger.stories.js +23 -0
- package/dist/cjs/components/pwaInstall/PwaInstallTrigger.stories.js.map +1 -0
- package/dist/cjs/components/pwaInstall/index.d.ts +3 -0
- package/dist/cjs/components/pwaInstall/index.js +21 -0
- package/dist/cjs/components/pwaInstall/index.js.map +1 -0
- package/dist/cjs/components/pwaInstall/useIsInstallReady.d.ts +3 -0
- package/dist/cjs/components/pwaInstall/useIsInstallReady.js +58 -0
- package/dist/cjs/components/pwaInstall/useIsInstallReady.js.map +1 -0
- package/dist/cjs/components/pwaInstall/useWebManifest.d.ts +2 -0
- package/dist/cjs/components/pwaInstall/useWebManifest.js +45 -0
- package/dist/cjs/components/pwaInstall/useWebManifest.js.map +1 -0
- package/dist/cjs/components/toasts/toasts.d.ts +4 -1
- package/dist/cjs/components/toasts/toasts.js +35 -1
- package/dist/cjs/components/toasts/toasts.js.map +1 -1
- package/dist/cjs/components/toasts/toasts.stories.d.ts +13 -0
- package/dist/cjs/components/toasts/toasts.stories.js +47 -0
- package/dist/cjs/components/toasts/toasts.stories.js.map +1 -0
- package/dist/cjs/platform.d.ts +11 -0
- package/dist/cjs/platform.js +95 -0
- package/dist/cjs/platform.js.map +1 -0
- package/dist/cjs/uno/logic/color.d.ts +0 -12
- package/dist/cjs/uno/logic/color.js +0 -35
- package/dist/cjs/uno/logic/color.js.map +1 -1
- package/dist/cjs/uno/logic/color.test.js +0 -12
- package/dist/cjs/uno/logic/color.test.js.map +1 -1
- package/dist/cjs/uno/theme/index.js +8 -0
- package/dist/cjs/uno/theme/index.js.map +1 -1
- package/dist/css/main.css +6 -5
- package/dist/esm/colors.stories.js +1 -8
- package/dist/esm/colors.stories.js.map +1 -1
- package/dist/esm/components/button/Button.js +3 -3
- package/dist/esm/components/button/Button.js.map +1 -1
- package/dist/esm/components/dialog/Dialog.js +30 -5
- package/dist/esm/components/dialog/Dialog.js.map +1 -1
- package/dist/esm/components/dialog/Dialog.stories.js +1 -1
- package/dist/esm/components/dialog/Dialog.stories.js.map +1 -1
- package/dist/esm/components/icon/Icon.d.ts +2 -1
- package/dist/esm/components/icon/Icon.js +4 -3
- package/dist/esm/components/icon/Icon.js.map +1 -1
- package/dist/esm/components/index.d.ts +2 -0
- package/dist/esm/components/index.js +2 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/components/lightbox/Lightbox.d.ts +25 -0
- package/dist/esm/components/lightbox/Lightbox.js +32 -0
- package/dist/esm/components/lightbox/Lightbox.js.map +1 -0
- package/dist/esm/components/lightbox/Lightbox.stories.d.ts +24 -0
- package/dist/esm/components/lightbox/Lightbox.stories.js +18 -0
- package/dist/esm/components/lightbox/Lightbox.stories.js.map +1 -0
- package/dist/esm/components/lists/lists.d.ts +6 -0
- package/dist/esm/components/lists/lists.js +13 -0
- package/dist/esm/components/lists/lists.js.map +1 -0
- package/dist/esm/components/lists/lists.stories.d.ts +14 -0
- package/dist/esm/components/lists/lists.stories.js +22 -0
- package/dist/esm/components/lists/lists.stories.js.map +1 -0
- package/dist/esm/components/provider/Provider.d.ts +1 -4
- package/dist/esm/components/provider/Provider.js +3 -3
- package/dist/esm/components/provider/Provider.js.map +1 -1
- package/dist/esm/components/pwaInstall/PlatformIcons.d.ts +5 -0
- package/dist/esm/components/pwaInstall/PlatformIcons.js +18 -0
- package/dist/esm/components/pwaInstall/PlatformIcons.js.map +1 -0
- package/dist/esm/components/pwaInstall/PwaInstallTrigger.d.ts +5 -0
- package/dist/esm/components/pwaInstall/PwaInstallTrigger.js +71 -0
- package/dist/esm/components/pwaInstall/PwaInstallTrigger.js.map +1 -0
- package/dist/esm/components/pwaInstall/PwaInstallTrigger.stories.d.ts +15 -0
- package/dist/esm/components/pwaInstall/PwaInstallTrigger.stories.js +20 -0
- package/dist/esm/components/pwaInstall/PwaInstallTrigger.stories.js.map +1 -0
- package/dist/esm/components/pwaInstall/index.d.ts +3 -0
- package/dist/esm/components/pwaInstall/index.js +5 -0
- package/dist/esm/components/pwaInstall/index.js.map +1 -0
- package/dist/esm/components/pwaInstall/useIsInstallReady.d.ts +3 -0
- package/dist/esm/components/pwaInstall/useIsInstallReady.js +53 -0
- package/dist/esm/components/pwaInstall/useIsInstallReady.js.map +1 -0
- package/dist/esm/components/pwaInstall/useWebManifest.d.ts +2 -0
- package/dist/esm/components/pwaInstall/useWebManifest.js +42 -0
- package/dist/esm/components/pwaInstall/useWebManifest.js.map +1 -0
- package/dist/esm/components/toasts/toasts.d.ts +4 -1
- package/dist/esm/components/toasts/toasts.js +32 -1
- package/dist/esm/components/toasts/toasts.js.map +1 -1
- package/dist/esm/components/toasts/toasts.stories.d.ts +13 -0
- package/dist/esm/components/toasts/toasts.stories.js +44 -0
- package/dist/esm/components/toasts/toasts.stories.js.map +1 -0
- package/dist/esm/platform.d.ts +11 -0
- package/dist/esm/platform.js +84 -0
- package/dist/esm/platform.js.map +1 -0
- package/dist/esm/uno/logic/color.d.ts +0 -12
- package/dist/esm/uno/logic/color.js +0 -35
- package/dist/esm/uno/logic/color.js.map +1 -1
- package/dist/esm/uno/logic/color.test.js +0 -12
- package/dist/esm/uno/logic/color.test.js.map +1 -1
- package/dist/esm/uno/theme/index.js +8 -0
- package/dist/esm/uno/theme/index.js.map +1 -1
- package/package.json +5 -7
- package/src/colors.stories.tsx +0 -12
- package/src/components/button/Button.tsx +7 -4
- package/src/components/dialog/Dialog.stories.tsx +20 -6
- package/src/components/dialog/Dialog.tsx +49 -4
- package/src/components/icon/Icon.tsx +10 -2
- package/src/components/index.ts +2 -0
- package/src/components/lightbox/Lightbox.stories.tsx +28 -0
- package/src/components/lightbox/Lightbox.tsx +87 -0
- package/src/components/lists/lists.stories.tsx +38 -0
- package/src/components/lists/lists.tsx +21 -0
- package/src/components/provider/Provider.tsx +2 -9
- package/src/components/pwaInstall/PlatformIcons.tsx +75 -0
- package/src/components/pwaInstall/PwaInstallTrigger.stories.tsx +29 -0
- package/src/components/pwaInstall/PwaInstallTrigger.tsx +227 -0
- package/src/components/pwaInstall/index.ts +3 -0
- package/src/components/pwaInstall/useIsInstallReady.ts +56 -0
- package/src/components/pwaInstall/useWebManifest.ts +55 -0
- package/src/components/toasts/toasts.stories.tsx +83 -0
- package/src/components/toasts/toasts.tsx +72 -1
- package/src/platform.ts +103 -0
- package/src/uno/logic/color.test.ts +0 -27
- package/src/uno/logic/color.ts +0 -56
- package/src/uno/theme/index.ts +8 -0
- package/dist/cjs/uno/logic/oklch.d.ts +0 -3
- package/dist/cjs/uno/logic/oklch.js +0 -96
- package/dist/cjs/uno/logic/oklch.js.map +0 -1
- package/dist/esm/uno/logic/oklch.d.ts +0 -3
- package/dist/esm/uno/logic/oklch.js +0 -90
- package/dist/esm/uno/logic/oklch.js.map +0 -1
- package/src/uno/logic/oklch.ts +0 -120
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// @unocss-include
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
export function SafariShareIcon() {
|
|
4
|
+
return (_jsx("svg", { id: "pwa-share", width: "24", height: "24", viewBox: "0 0 17.695 26.475", className: "v-middle", children: _jsxs("g", { fill: "currentColor", children: [_jsx("path", { d: "M17.334 10.762v9.746c0 2.012-1.025 3.027-3.066 3.027H3.066C1.026 23.535 0 22.52 0 20.508v-9.746C0 8.75 1.025 7.734 3.066 7.734h2.94v1.573h-2.92c-.977 0-1.514.527-1.514 1.543v9.57c0 1.015.537 1.543 1.514 1.543h11.152c.967 0 1.524-.527 1.524-1.543v-9.57c0-1.016-.557-1.543-1.524-1.543h-2.91V7.734h2.94c2.04 0 3.066 1.016 3.066 3.028Z" }), _jsx("path", { d: "M8.662 15.889c.42 0 .781-.352.781-.762V5.097l-.058-1.464.654.693 1.484 1.582a.698.698 0 0 0 .528.235c.4 0 .713-.293.713-.694 0-.205-.088-.361-.235-.508l-3.3-3.183c-.196-.196-.362-.264-.567-.264-.195 0-.361.069-.566.264L4.795 4.94a.681.681 0 0 0-.225.508c0 .4.293.694.703.694.186 0 .4-.079.538-.235l1.474-1.582.664-.693-.058 1.465v10.029c0 .41.351.762.771.762Z" })] }) }));
|
|
5
|
+
}
|
|
6
|
+
export function SafariIcon() {
|
|
7
|
+
return (_jsx("svg", { id: "pwa-safari", viewBox: "0 0 20.283 19.932", width: "25", height: "25", className: "v-middle", children: _jsxs("g", { fill: "currentColor", children: [_jsx("path", { d: "M9.96 19.922c5.45 0 9.962-4.522 9.962-9.961C19.922 4.51 15.4 0 9.952 0 4.511 0 0 4.512 0 9.96c0 5.44 4.521 9.962 9.96 9.962Zm0-1.66A8.26 8.26 0 0 1 1.67 9.96c0-4.61 3.672-8.3 8.281-8.3 4.61 0 8.31 3.69 8.31 8.3 0 4.61-3.69 8.3-8.3 8.3Z" }), _jsx("path", { d: "m5.87 14.883 5.605-2.735a1.47 1.47 0 0 0 .683-.673l2.725-5.596c.312-.664-.166-1.182-.85-.84L8.447 7.764c-.302.136-.508.341-.674.673L5.03 14.043c-.312.645.196 1.152.84.84Zm4.09-3.72A1.19 1.19 0 0 1 8.77 9.97c0-.664.527-1.201 1.19-1.201a1.2 1.2 0 0 1 1.202 1.2c0 .655-.537 1.192-1.201 1.192Z" })] }) }));
|
|
8
|
+
}
|
|
9
|
+
export function SafariPlusSquareIcon() {
|
|
10
|
+
return (_jsx("svg", { id: "pwa-add", width: "24", height: "24", viewBox: "-4 -4 33 33", fill: "currentColor", className: "v-middle", children: _jsx("g", { children: _jsx("path", { d: "m23.40492,1.60784c-1.32504,-1.32504 -3.19052,-1.56912 -5.59644,-1.56912l-10.65243,0c-2.33622,0 -4.2017,0.24408 -5.5267,1.56912c-1.32504,1.34243 -1.56911,3.17306 -1.56911,5.50924l0,10.5827c0,2.40596 0.22665,4.254 1.55165,5.57902c1.34246,1.32501 3.19052,1.5691 5.59647,1.5691l10.60013,0c2.40592,0 4.2714,-0.24408 5.59644,-1.5691c1.325,-1.34245 1.55166,-3.17306 1.55166,-5.57902l0,-10.51293c0,-2.40596 -0.22666,-4.25401 -1.55166,-5.57901zm-0.38355,5.21289l0,11.24518c0,1.51681 -0.20924,2.94643 -1.02865,3.78327c-0.83683,0.83685 -2.30134,1.0635 -3.81815,1.0635l-11.33234,0c-1.51681,0 -2.96386,-0.22665 -3.80073,-1.0635c-0.83683,-0.83684 -1.04607,-2.26646 -1.04607,-3.78327l0,-11.19288c0,-1.5517 0.20924,-3.01617 1.02865,-3.85304c0.83687,-0.83683 2.31876,-1.04607 3.87042,-1.04607l11.28007,0c1.51681,0 2.98132,0.22666 3.81815,1.06353c0.81941,0.81941 1.02865,2.26645 1.02865,3.78327zm-10.53039,12.08205c0.64506,0 1.02861,-0.43586 1.02861,-1.13326l0,-4.34117l4.53294,0c0.66252,0 1.13326,-0.36613 1.13326,-0.99376c0,-0.64506 -0.43586,-1.02861 -1.13326,-1.02861l-4.53294,0l0,-4.53294c0,-0.6974 -0.38355,-1.13326 -1.02861,-1.13326c-0.62763,0 -0.99376,0.45332 -0.99376,1.13326l0,4.53294l-4.51552,0c-0.69737,0 -1.15069,0.38355 -1.15069,1.02861c0,0.62763 0.48817,0.99376 1.15069,0.99376l4.51552,0l0,4.34117c0,0.66252 0.36613,1.13326 0.99376,1.13326z" }) }) }));
|
|
11
|
+
}
|
|
12
|
+
export function SafariAddToDockIcon() {
|
|
13
|
+
return (_jsx("svg", { id: "pwa-add", viewBox: "0 0 23.389 17.979", width: "24", height: "24", className: "v-middle", children: _jsxs("g", { fill: "currentColor", children: [_jsx("path", { d: "M1.045 3.291v1.377h20.937V3.291Zm2.021 14.688h16.895c2.05 0 3.066-1.006 3.066-3.018V3.027C23.027 1.016 22.012 0 19.961 0H3.066C1.026 0 0 1.016 0 3.027v11.934c0 2.012 1.025 3.018 3.066 3.018Zm.02-1.573c-.977 0-1.514-.517-1.514-1.533V3.115c0-1.015.537-1.543 1.514-1.543H19.94c.967 0 1.514.528 1.514 1.543v11.758c0 1.016-.547 1.533-1.514 1.533Z" }), _jsx("path", { d: "M4.2 14.014c0 .508.35.85.868.85h12.92c.518 0 .87-.343.87-.85v-1.465c0-.508-.352-.85-.87-.85H5.068c-.517 0-.869.342-.869.85Z" })] }) }));
|
|
14
|
+
}
|
|
15
|
+
export function AndroidAddToHomeIcon() {
|
|
16
|
+
return (_jsx("svg", { height: "24", viewBox: "0 -960 960 960", width: "24", className: "v-middle", children: _jsx("path", { d: "M320-40q-33 0-56.5-23.5T240-120v-160h80v40h400v-480H320v40h-80v-160q0-33 23.5-56.5T320-920h400q33 0 56.5 23.5T800-840v720q0 33-23.5 56.5T720-40H320Zm0-120v40h400v-40H320ZM176-280l-56-56 224-224H200v-80h280v280h-80v-144L176-280Zm144-520h400v-40H320v40Zm0 0v-40 40Zm0 640v40-40Z" }) }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=PlatformIcons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlatformIcons.js","sourceRoot":"","sources":["../../../../src/components/pwaInstall/PlatformIcons.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,eAAe;IAC9B,OAAO,CACN,cACC,EAAE,EAAC,WAAW,EACd,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,mBAAmB,EAC3B,SAAS,EAAC,UAAU,YAEpB,aAAG,IAAI,EAAC,cAAc,aACrB,eAAM,CAAC,EAAC,6UAA6U,GAAG,EACxV,eAAM,CAAC,EAAC,yWAAyW,GAAG,IACjX,GACC,CACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACzB,OAAO,CACN,cACC,EAAE,EAAC,YAAY,EACf,OAAO,EAAC,mBAAmB,EAC3B,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,SAAS,EAAC,UAAU,YAEpB,aAAG,IAAI,EAAC,cAAc,aACrB,eAAM,CAAC,EAAC,6OAA6O,GAAG,EACxP,eAAM,CAAC,EAAC,mSAAmS,GAAG,IAC3S,GACC,CACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB;IACnC,OAAO,CACN,cACC,EAAE,EAAC,SAAS,EACZ,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,aAAa,EACrB,IAAI,EAAC,cAAc,EACnB,SAAS,EAAC,UAAU,YAEpB,sBACC,eAAM,CAAC,EAAC,0zCAA0zC,GAAG,GACl0C,GACC,CACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IAClC,OAAO,CACN,cACC,EAAE,EAAC,SAAS,EACZ,OAAO,EAAC,mBAAmB,EAC3B,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,SAAS,EAAC,UAAU,YAEpB,aAAG,IAAI,EAAC,cAAc,aACrB,eAAM,CAAC,EAAC,uVAAuV,GAAG,EAClW,eAAM,CAAC,EAAC,6HAA6H,GAAG,IACrI,GACC,CACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB;IACnC,OAAO,CACN,cAAK,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,gBAAgB,EAAC,KAAK,EAAC,IAAI,EAAC,SAAS,EAAC,UAAU,YACxE,eAAM,CAAC,EAAC,sRAAsR,GAAG,GAC5R,CACN,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DialogTriggerProps } from '@radix-ui/react-dialog';
|
|
2
|
+
export interface PwaInstallTriggerProps extends DialogTriggerProps {
|
|
3
|
+
manifestPath?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function PwaInstallTrigger({ children, manifestPath, asChild: _, ...rest }: PwaInstallTriggerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// @unocss-include
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
14
|
+
import { useState } from 'react';
|
|
15
|
+
import { getIsSafari, getOS, getSupportsPWAInstallPrompt, } from '../../platform.js';
|
|
16
|
+
import { Box } from '../box/Box.js';
|
|
17
|
+
import { Button } from '../button/Button.js';
|
|
18
|
+
import { Dialog } from '../dialog/Dialog.js';
|
|
19
|
+
import { Icon } from '../icon/Icon.js';
|
|
20
|
+
import { Lightbox } from '../lightbox/Lightbox.js';
|
|
21
|
+
import { Ol } from '../lists/lists.js';
|
|
22
|
+
import { P } from '../typography/typography.js';
|
|
23
|
+
import { AndroidAddToHomeIcon, SafariAddToDockIcon, SafariIcon, SafariPlusSquareIcon, SafariShareIcon, } from './PlatformIcons.js';
|
|
24
|
+
import { triggerDeferredInstall, useIsInstalled, useIsInstallReady, } from './useIsInstallReady.js';
|
|
25
|
+
import { useWebManifest } from './useWebManifest.js';
|
|
26
|
+
export function PwaInstallTrigger(_a) {
|
|
27
|
+
var _b, _c, _d, _e, _f, _g;
|
|
28
|
+
var { children, manifestPath, asChild: _ } = _a, rest = __rest(_a, ["children", "manifestPath", "asChild"]);
|
|
29
|
+
const installed = useIsInstalled();
|
|
30
|
+
const manifest = useWebManifest(manifestPath);
|
|
31
|
+
const [showInstructions, setShowInstructions] = useState(false);
|
|
32
|
+
if (installed) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const primaryIcon = (_b = manifest === null || manifest === void 0 ? void 0 : manifest.icons) === null || _b === void 0 ? void 0 : _b[0];
|
|
36
|
+
return (_jsxs(Dialog, { children: [_jsx(Dialog.Trigger, Object.assign({}, rest, { asChild: true, children: children !== null && children !== void 0 ? children : (_jsxs(Button, { color: "primary", emphasis: "light", children: [_jsx(Icon, { name: "star" }), " Install"] })) })), _jsxs(Dialog.Content, { className: "flex flex-col gap-xs", children: [_jsxs(Dialog.Title, { className: "flex flex-row gap-md items-center", children: [primaryIcon && (_jsx("img", { src: primaryIcon.src, alt: (_e = (_d = (_c = primaryIcon.label) !== null && _c !== void 0 ? _c : manifest === null || manifest === void 0 ? void 0 : manifest.short_name) !== null && _d !== void 0 ? _d : manifest === null || manifest === void 0 ? void 0 : manifest.name) !== null && _e !== void 0 ? _e : 'App Icon', className: "inline-block w-1em h-1em rounded" })), "Install ", (_g = (_f = manifest === null || manifest === void 0 ? void 0 : manifest.short_name) !== null && _f !== void 0 ? _f : manifest === null || manifest === void 0 ? void 0 : manifest.name) !== null && _g !== void 0 ? _g : 'App'] }), showInstructions ? (_jsxs(_Fragment, { children: [_jsx(Dialog.Description, { children: "Follow the instructions below to install this app on your device." }), _jsx(InstallInstructions, {}), _jsxs(Dialog.Actions, { children: [_jsx(Dialog.Close, { asChild: true, children: _jsx(Button, { emphasis: "ghost", children: "Close" }) }), _jsxs(Button, { onClick: () => setShowInstructions(false), children: [_jsx(Icon, { name: "arrowLeft" }), " Back"] })] })] })) : (_jsxs(_Fragment, { children: [_jsx(Dialog.Description, { children: "This site is also an app. You can install it right now for easier access and more features." }), (manifest === null || manifest === void 0 ? void 0 : manifest.description) && (_jsx(P, { className: "mb-sm", children: manifest.description })), _jsx(ManifestImageGallery, { manifestPath: manifestPath }), _jsxs(Dialog.Actions, { children: [_jsx(Dialog.Close, { asChild: true, children: _jsx(Button, { emphasis: "ghost", children: "Close" }) }), _jsx(InstallDeviceActions, { showInstructions: () => setShowInstructions(true) })] })] }))] })] }));
|
|
37
|
+
}
|
|
38
|
+
const supportsDirectInstall = getSupportsPWAInstallPrompt();
|
|
39
|
+
function InstallInstructions() {
|
|
40
|
+
const os = getOS();
|
|
41
|
+
if (os === 'iOS' || os === 'Mac OS') {
|
|
42
|
+
if (getIsSafari()) {
|
|
43
|
+
if (os === 'iOS') {
|
|
44
|
+
return (_jsxs(Ol, { children: [_jsxs(Ol.Item, { children: [_jsx(SafariShareIcon, {}), " Tap the Share button in the toolbar."] }), _jsxs(Ol.Item, { children: [_jsx(SafariPlusSquareIcon, {}), " Scroll down and tap \"Add to Home Screen\"."] })] }));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return (_jsxs(Ol, { children: [_jsxs(Ol.Item, { children: [_jsx(SafariShareIcon, {}), " Tap the Share button in the toolbar."] }), _jsxs(Ol.Item, { children: [_jsx(SafariAddToDockIcon, {}), " Tap \"Add to Dock\"."] })] }));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
return (_jsxs(_Fragment, { children: [_jsx(Ol, { children: _jsxs(Ol.Item, { children: [_jsx(SafariIcon, {}), " Open this site in Safari to continue."] }) }), _jsx(Box, { surface: true, p: true, children: "Apple does not allow non-Safari browsers to install web apps." })] }));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return (_jsxs(Ol, { children: [_jsxs(Ol.Item, { children: [_jsx(Icon, { name: "dots", className: "rotate-90" }), " Tap the menu button in the toolbar."] }), _jsxs(Ol.Item, { children: [_jsx(AndroidAddToHomeIcon, {}), " Tap \"Add to Home Screen.\""] })] }));
|
|
55
|
+
}
|
|
56
|
+
function ManifestImageGallery({ manifestPath }) {
|
|
57
|
+
var _a, _b;
|
|
58
|
+
const manifest = useWebManifest(manifestPath);
|
|
59
|
+
if (!((_a = manifest === null || manifest === void 0 ? void 0 : manifest.screenshots) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return (_jsx(Box, { overflow: "auto-x", p: "sm", gap: true, className: "h-240px", children: (_b = manifest.screenshots) === null || _b === void 0 ? void 0 : _b.map((screenshot, index) => (_jsxs(Lightbox.Root, { children: [_jsx(Lightbox.Trigger, { asChild: true, children: _jsx(Lightbox.Image, { tabIndex: 0, src: screenshot.src, alt: screenshot.label || `Screenshot ${index + 1}`, className: "border border-default rounded-xs" }, index) }), _jsxs(Lightbox.Portal, { children: [_jsx(Lightbox.Overlay, { className: "z-10000" }), _jsx(Lightbox.Content, { className: "z-10001", children: _jsx(Lightbox.Image, { src: screenshot.src, alt: screenshot.label || `Screenshot ${index + 1}` }) })] })] }, screenshot.src))) }));
|
|
63
|
+
}
|
|
64
|
+
function InstallDeviceActions({ showInstructions, }) {
|
|
65
|
+
const ready = useIsInstallReady();
|
|
66
|
+
if (supportsDirectInstall && ready) {
|
|
67
|
+
return (_jsxs(Button, { onClick: () => triggerDeferredInstall(), emphasis: "primary", children: [_jsx(Icon, { name: "download" }), " Install now"] }));
|
|
68
|
+
}
|
|
69
|
+
return (_jsxs(Button, { onClick: () => showInstructions(), emphasis: "primary", children: [_jsx(Icon, { name: "arrowRight" }), " Add to Home"] }));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=PwaInstallTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PwaInstallTrigger.js","sourceRoot":"","sources":["../../../../src/components/pwaInstall/PwaInstallTrigger.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react';
|
|
2
|
+
import { PwaInstallTrigger } from './PwaInstallTrigger.js';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof PwaInstallTrigger;
|
|
6
|
+
argTypes: {};
|
|
7
|
+
parameters: {
|
|
8
|
+
controls: {
|
|
9
|
+
expanded: boolean;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export default meta;
|
|
14
|
+
type Story = StoryObj<typeof PwaInstallTrigger>;
|
|
15
|
+
export declare const Default: Story;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// @unocss-include
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from '../button/Button.js';
|
|
4
|
+
import { Icon } from '../icon/Icon.js';
|
|
5
|
+
import { PwaInstallTrigger } from './PwaInstallTrigger.js';
|
|
6
|
+
const meta = {
|
|
7
|
+
title: 'Components/PwaInstallTrigger',
|
|
8
|
+
component: PwaInstallTrigger,
|
|
9
|
+
argTypes: {},
|
|
10
|
+
parameters: {
|
|
11
|
+
controls: { expanded: true },
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
export default meta;
|
|
15
|
+
export const Default = {
|
|
16
|
+
render(args) {
|
|
17
|
+
return (_jsx(PwaInstallTrigger, Object.assign({}, args, { asChild: true, children: _jsxs(Button, { color: "primary", emphasis: "light", children: [_jsx(Icon, { name: "star" }), " Install"] }) })));
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=PwaInstallTrigger.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PwaInstallTrigger.stories.js","sourceRoot":"","sources":["../../../../src/components/pwaInstall/PwaInstallTrigger.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,IAAI,GAAG;IACZ,KAAK,EAAE,8BAA8B;IACrC,SAAS,EAAE,iBAAiB;IAC5B,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE;QACX,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC5B;CACwC,CAAC;AAE3C,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU;IAC7B,MAAM,CAAC,IAAI;QACV,OAAO,CACN,KAAC,iBAAiB,oBAAK,IAAI,IAAE,OAAO,kBACnC,MAAC,MAAM,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,aACvC,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,GAAG,gBACZ,IACU,CACpB,CAAC;IACH,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/pwaInstall/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// @unocss-include
|
|
2
|
+
import { proxy, useSnapshot } from 'valtio';
|
|
3
|
+
import { getIsPWAInstalled, PRETEND_INSTALLABLE } from '../../platform.js';
|
|
4
|
+
let deferredPrompt = null;
|
|
5
|
+
const installState = proxy({
|
|
6
|
+
installReady: false,
|
|
7
|
+
installed: getIsPWAInstalled(),
|
|
8
|
+
});
|
|
9
|
+
if (typeof window !== 'undefined') {
|
|
10
|
+
window.addEventListener('beforeinstallprompt', (e) => {
|
|
11
|
+
// Prevent the mini-infobar from appearing on mobile
|
|
12
|
+
e.preventDefault();
|
|
13
|
+
e.stopImmediatePropagation();
|
|
14
|
+
e.stopPropagation();
|
|
15
|
+
// Stash the event so it can be triggered later.
|
|
16
|
+
deferredPrompt = e;
|
|
17
|
+
// Update UI notify the user they can install the PWA
|
|
18
|
+
installState.installReady = true;
|
|
19
|
+
// Optionally, send analytics event that PWA install promo was shown.
|
|
20
|
+
console.log(`Ready to show custom install prompt`);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (PRETEND_INSTALLABLE) {
|
|
24
|
+
installState.installReady = true;
|
|
25
|
+
}
|
|
26
|
+
export function useIsInstallReady() {
|
|
27
|
+
return useSnapshot(installState).installReady;
|
|
28
|
+
}
|
|
29
|
+
export function useIsInstalled() {
|
|
30
|
+
return useSnapshot(installState).installed;
|
|
31
|
+
}
|
|
32
|
+
export function triggerDeferredInstall() {
|
|
33
|
+
if (!deferredPrompt) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
// Show the install prompt
|
|
37
|
+
deferredPrompt.prompt();
|
|
38
|
+
// Wait for the user to respond to the prompt
|
|
39
|
+
deferredPrompt.userChoice.then((choiceResult) => {
|
|
40
|
+
if (choiceResult.outcome === 'accepted') {
|
|
41
|
+
console.log('User accepted the install prompt');
|
|
42
|
+
installState.installed = true;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log('User dismissed the install prompt');
|
|
46
|
+
}
|
|
47
|
+
// Clear the deferredPrompt so it can only be used once.
|
|
48
|
+
deferredPrompt = null;
|
|
49
|
+
installState.installReady = false;
|
|
50
|
+
});
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=useIsInstallReady.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIsInstallReady.js","sourceRoot":"","sources":["../../../../src/components/pwaInstall/useIsInstallReady.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,IAAI,cAAc,GAAoC,IAAI,CAAC;AAC3D,MAAM,YAAY,GAAG,KAAK,CAAC;IAC1B,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,iBAAiB,EAAE;CAC9B,CAAC,CAAC;AAEH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACnC,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE;QACpD,oDAAoD;QACpD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,wBAAwB,EAAE,CAAC;QAC7B,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,gDAAgD;QAChD,cAAc,GAAG,CAAC,CAAC;QACnB,qDAAqD;QACrD,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;QACjC,qEAAqE;QACrE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,IAAI,mBAAmB,EAAE,CAAC;IACzB,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,sBAAsB;IACrC,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,0BAA0B;IAC1B,cAAc,CAAC,MAAM,EAAE,CAAC;IACxB,6CAA6C;IAC7C,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;QAC/C,IAAI,YAAY,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAClD,CAAC;QACD,wDAAwD;QACxD,cAAc,GAAG,IAAI,CAAC;QACtB,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// @unocss-include
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
import { proxy, useSnapshot } from 'valtio';
|
|
4
|
+
async function fetchManifest(manifestPath = '/manifest.json', controller) {
|
|
5
|
+
const response = await fetch(manifestPath, {
|
|
6
|
+
signal: controller === null || controller === void 0 ? void 0 : controller.signal,
|
|
7
|
+
});
|
|
8
|
+
if (!response.ok) {
|
|
9
|
+
console.error(`Failed to fetch web manifest: ${response.status} ${response.statusText}`);
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
const manifest = await response.json();
|
|
13
|
+
return manifest;
|
|
14
|
+
}
|
|
15
|
+
function abortableManifestSync(manifestPath) {
|
|
16
|
+
const controller = new AbortController();
|
|
17
|
+
fetchManifest(manifestPath, controller).then((manifest) => {
|
|
18
|
+
if (manifest) {
|
|
19
|
+
manifestState.value = manifest;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return controller;
|
|
23
|
+
}
|
|
24
|
+
const manifestState = proxy({
|
|
25
|
+
value: {},
|
|
26
|
+
});
|
|
27
|
+
let abortController = null;
|
|
28
|
+
export function useWebManifest(manifestPath = '/manifest.json') {
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (abortController) {
|
|
31
|
+
abortController.abort();
|
|
32
|
+
}
|
|
33
|
+
abortController = abortableManifestSync(manifestPath);
|
|
34
|
+
return () => {
|
|
35
|
+
if (abortController) {
|
|
36
|
+
abortController.abort();
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}, [manifestPath]);
|
|
40
|
+
return useSnapshot(manifestState).value;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=useWebManifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWebManifest.js","sourceRoot":"","sources":["../../../../src/components/pwaInstall/useWebManifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG5C,KAAK,UAAU,aAAa,CAC3B,eAAuB,gBAAgB,EACvC,UAA4B;IAE5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;QAC1C,MAAM,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM;KAC1B,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CACZ,iCAAiC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACzE,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAoB;IAClD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QACzD,IAAI,QAAQ,EAAE,CAAC;YACd,aAAa,CAAC,KAAK,GAAG,QAAQ,CAAC;QAChC,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,aAAa,GAAG,KAAK,CAAC;IAC3B,KAAK,EAAE,EAAoB;CAC3B,CAAC,CAAC;AACH,IAAI,eAAe,GAA2B,IAAI,CAAC;AAEnD,MAAM,UAAU,cAAc,CAC7B,YAAY,GAAG,gBAAgB;IAE/B,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,eAAe,EAAE,CAAC;YACrB,eAAe,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QACD,eAAe,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAEtD,OAAO,GAAG,EAAE;YACX,IAAI,eAAe,EAAE,CAAC;gBACrB,eAAe,CAAC,KAAK,EAAE,CAAC;YACzB,CAAC;QACF,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC,KAAuB,CAAC;AAC3D,CAAC"}
|
|
@@ -1,3 +1,34 @@
|
|
|
1
1
|
// @unocss-include
|
|
2
|
-
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
export { toast } from 'react-hot-toast';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import { AnimatePresence, motion } from 'motion/react';
|
|
6
|
+
import { useToaster } from 'react-hot-toast';
|
|
7
|
+
import { useResolvedColorMode } from '../../colorMode.js';
|
|
8
|
+
import { Icon } from '../icon/Icon.js';
|
|
9
|
+
const toastOptions = {};
|
|
10
|
+
export const Toaster = (props) => {
|
|
11
|
+
const mode = useResolvedColorMode();
|
|
12
|
+
const { toasts, handlers } = useToaster(toastOptions);
|
|
13
|
+
const { startPause, endPause } = handlers;
|
|
14
|
+
const visibleToasts = toasts.filter((t) => t.visible);
|
|
15
|
+
return (_jsx("div", { className: clsx('fixed z-toast flex flex-col items-center gap-xs left-1/2 center-x top-sm max-w-400px', mode === 'dark' ? 'override-light' : 'override-dark', props.className), onMouseEnter: startPause, onMouseLeave: endPause, children: _jsx(AnimatePresence, { children: visibleToasts.map((toast) => {
|
|
16
|
+
const message = typeof toast.message === 'function'
|
|
17
|
+
? toast.message(toast)
|
|
18
|
+
: toast.message;
|
|
19
|
+
return (_jsxs(motion.div, Object.assign({ className: clsx({
|
|
20
|
+
'palette-success': toast.type === 'success',
|
|
21
|
+
'palette-attention': toast.type === 'error',
|
|
22
|
+
'palette-info': toast.type === 'blank',
|
|
23
|
+
}, 'bg-main-wash color-black rounded-md shadow-md px-md py-sm', 'flex flex-row gap-sm') }, toast.ariaProps, { initial: { scale: 0.8, opacity: 0, y: -20 }, exit: { scale: 0.8, opacity: 0, y: -20 }, animate: {
|
|
24
|
+
scale: 1,
|
|
25
|
+
opacity: 1,
|
|
26
|
+
y: 0,
|
|
27
|
+
}, layout: true, children: [_jsx(Icon, { className: "mt-2px", loading: toast.type === 'loading', name: toast.type === 'success'
|
|
28
|
+
? 'check'
|
|
29
|
+
: toast.type === 'error'
|
|
30
|
+
? 'warning'
|
|
31
|
+
: 'info' }), message] }), toast.id));
|
|
32
|
+
}) }) }));
|
|
33
|
+
};
|
|
3
34
|
//# sourceMappingURL=toasts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toasts.js","sourceRoot":"","sources":["../../../../src/components/toasts/toasts.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"toasts.js","sourceRoot":"","sources":["../../../../src/components/toasts/toasts.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAuB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,YAAY,GAAwB,EAAE,CAAC;AAE7C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAA6B,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;IAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEtD,OAAO,CACN,cACC,SAAS,EAAE,IAAI,CACd,sFAAsF,EACtF,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,EACpD,KAAK,CAAC,SAAS,CACf,EACD,YAAY,EAAE,UAAU,EACxB,YAAY,EAAE,QAAQ,YAEtB,KAAC,eAAe,cACd,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5B,MAAM,OAAO,GACZ,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU;oBAClC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;gBAClB,OAAO,CACN,MAAC,MAAM,CAAC,GAAG,kBAEV,SAAS,EAAE,IAAI,CACd;wBACC,iBAAiB,EAAE,KAAK,CAAC,IAAI,KAAK,SAAS;wBAC3C,mBAAmB,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO;wBAC3C,cAAc,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO;qBACtC,EACD,2DAA2D,EAC3D,sBAAsB,CACtB,IACG,KAAK,CAAC,SAAS,IACnB,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAC3C,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACxC,OAAO,EAAE;wBACR,KAAK,EAAE,CAAC;wBACR,OAAO,EAAE,CAAC;wBACV,CAAC,EAAE,CAAC;qBACJ,EACD,MAAM,mBAEN,KAAC,IAAI,IACJ,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,SAAS,EACjC,IAAI,EACH,KAAK,CAAC,IAAI,KAAK,SAAS;gCACvB,CAAC,CAAC,OAAO;gCACT,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;oCACxB,CAAC,CAAC,SAAS;oCACX,CAAC,CAAC,MAAM,GAET,EACD,OAAO,MA/BH,KAAK,CAAC,EAAE,CAgCD,CACb,CAAC;YACH,CAAC,CAAC,GACe,GACb,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react';
|
|
2
|
+
declare const meta: {
|
|
3
|
+
title: string;
|
|
4
|
+
argTypes: {};
|
|
5
|
+
parameters: {
|
|
6
|
+
controls: {
|
|
7
|
+
expanded: boolean;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export default meta;
|
|
12
|
+
type Story = StoryObj;
|
|
13
|
+
export declare const Default: Story;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// @unocss-include
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { toast } from 'react-hot-toast';
|
|
4
|
+
import { Box } from '../box/Box.js';
|
|
5
|
+
import { Button } from '../button/Button.js';
|
|
6
|
+
const meta = {
|
|
7
|
+
title: 'Components/toasts',
|
|
8
|
+
argTypes: {},
|
|
9
|
+
parameters: {
|
|
10
|
+
controls: { expanded: true },
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
export default meta;
|
|
14
|
+
export const Default = {
|
|
15
|
+
render(args) {
|
|
16
|
+
return (_jsxs(Box, { col: true, gap: true, children: [_jsx(Button, { onClick: () => {
|
|
17
|
+
toast('This is a default toast! With a lot of text. Enough to wrap around.', {
|
|
18
|
+
duration: 10000,
|
|
19
|
+
});
|
|
20
|
+
}, children: "Show Default Toast" }), _jsx(Button, { color: "success", onClick: () => {
|
|
21
|
+
toast.success('This is a success toast!', {
|
|
22
|
+
duration: 10000,
|
|
23
|
+
});
|
|
24
|
+
}, children: "Show Success Toast" }), _jsx(Button, { color: "attention", onClick: () => {
|
|
25
|
+
toast.error('This is an error toast!', {
|
|
26
|
+
duration: 10000,
|
|
27
|
+
});
|
|
28
|
+
}, children: "Show Error Toast" }), _jsx(Button, { onClick: () => {
|
|
29
|
+
const id = toast.loading('This is a loading toast!');
|
|
30
|
+
setTimeout(() => {
|
|
31
|
+
toast.success('Loading complete!', { id, duration: 5000 });
|
|
32
|
+
}, 3000);
|
|
33
|
+
}, children: "Show Loading Toast" }), _jsx(Button, { onClick: () => {
|
|
34
|
+
toast.promise((async () => {
|
|
35
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
36
|
+
})(), {
|
|
37
|
+
loading: 'Promise is loading...',
|
|
38
|
+
success: 'Promise resolved!',
|
|
39
|
+
error: 'Promise rejected.',
|
|
40
|
+
});
|
|
41
|
+
}, children: "Show Promise Toast" })] }));
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=toasts.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toasts.stories.js","sourceRoot":"","sources":["../../../../src/components/toasts/toasts.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,IAAI,GAAG;IACZ,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE;QACX,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC5B;CACc,CAAC;AAEjB,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU;IAC7B,MAAM,CAAC,IAAI;QACV,OAAO,CACN,MAAC,GAAG,IAAC,GAAG,QAAC,GAAG,mBACX,KAAC,MAAM,IACN,OAAO,EAAE,GAAG,EAAE;wBACb,KAAK,CACJ,qEAAqE,EACrE;4BACC,QAAQ,EAAE,KAAM;yBAChB,CACD,CAAC;oBACH,CAAC,mCAGO,EACT,KAAC,MAAM,IACN,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,GAAG,EAAE;wBACb,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE;4BACzC,QAAQ,EAAE,KAAM;yBAChB,CAAC,CAAC;oBACJ,CAAC,mCAGO,EACT,KAAC,MAAM,IACN,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,GAAG,EAAE;wBACb,KAAK,CAAC,KAAK,CAAC,yBAAyB,EAAE;4BACtC,QAAQ,EAAE,KAAM;yBAChB,CAAC,CAAC;oBACJ,CAAC,iCAGO,EACT,KAAC,MAAM,IACN,OAAO,EAAE,GAAG,EAAE;wBACb,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;wBACrD,UAAU,CAAC,GAAG,EAAE;4BACf,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC5D,CAAC,EAAE,IAAI,CAAC,CAAC;oBACV,CAAC,mCAGO,EACT,KAAC,MAAM,IACN,OAAO,EAAE,GAAG,EAAE;wBACb,KAAK,CAAC,OAAO,CACZ,CAAC,KAAK,IAAI,EAAE;4BACX,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;wBAC3D,CAAC,CAAC,EAAE,EACJ;4BACC,OAAO,EAAE,uBAAuB;4BAChC,OAAO,EAAE,mBAAmB;4BAC5B,KAAK,EAAE,mBAAmB;yBAC1B,CACD,CAAC;oBACH,CAAC,mCAGO,IACJ,CACN,CAAC;IACH,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const PRETEND_PWA: boolean;
|
|
2
|
+
export declare const PRETEND_INSTALLABLE: boolean;
|
|
3
|
+
export declare const PRETEND_OS: string | null;
|
|
4
|
+
export declare function getIsPWAInstalled(): boolean;
|
|
5
|
+
export declare function getOS(): string;
|
|
6
|
+
export declare function getIsSafari(): boolean;
|
|
7
|
+
export declare function getIsFirefox(): boolean;
|
|
8
|
+
export declare function getIsEdge(): boolean;
|
|
9
|
+
export declare function getIsMobile(): boolean;
|
|
10
|
+
export declare function getSupportsPWAInstallPrompt(): boolean;
|
|
11
|
+
export declare function getIsTouch(): boolean;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// @unocss-include
|
|
2
|
+
export const PRETEND_PWA = (typeof localStorage !== 'undefined' &&
|
|
3
|
+
localStorage.getItem('pretendPWA')) === 'true';
|
|
4
|
+
export const PRETEND_INSTALLABLE = typeof localStorage !== 'undefined' &&
|
|
5
|
+
localStorage.getItem('pretendInstallable') === 'true';
|
|
6
|
+
export const PRETEND_OS = (typeof localStorage !== 'undefined' && localStorage.getItem('pretendOS')) ||
|
|
7
|
+
null;
|
|
8
|
+
export function getIsPWAInstalled() {
|
|
9
|
+
return ((typeof window !== 'undefined' && PRETEND_PWA) ||
|
|
10
|
+
window.matchMedia('(display-mode: standalone)').matches);
|
|
11
|
+
}
|
|
12
|
+
export function getOS() {
|
|
13
|
+
if (PRETEND_OS) {
|
|
14
|
+
return PRETEND_OS;
|
|
15
|
+
}
|
|
16
|
+
if (typeof window === 'undefined') {
|
|
17
|
+
return 'Server';
|
|
18
|
+
}
|
|
19
|
+
const userAgent = window.navigator.userAgent;
|
|
20
|
+
const platform = window.navigator.platform;
|
|
21
|
+
const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];
|
|
22
|
+
const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];
|
|
23
|
+
const iosPlatforms = ['iPhone', 'iPad', 'iPod'];
|
|
24
|
+
if (macosPlatforms.indexOf(platform) !== -1) {
|
|
25
|
+
return 'Mac OS';
|
|
26
|
+
}
|
|
27
|
+
else if (iosPlatforms.indexOf(platform) !== -1) {
|
|
28
|
+
return 'iOS';
|
|
29
|
+
}
|
|
30
|
+
else if (windowsPlatforms.indexOf(platform) !== -1) {
|
|
31
|
+
return 'Windows';
|
|
32
|
+
}
|
|
33
|
+
else if (/Android/.test(userAgent)) {
|
|
34
|
+
return 'Android';
|
|
35
|
+
}
|
|
36
|
+
else if (!platform && /Linux/.test(userAgent)) {
|
|
37
|
+
return 'Linux';
|
|
38
|
+
}
|
|
39
|
+
return 'Other';
|
|
40
|
+
}
|
|
41
|
+
export function getIsSafari() {
|
|
42
|
+
if (typeof window === 'undefined') {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
46
|
+
return !!ua.match(/WebKit/i) && !ua.match(/CriOS/i);
|
|
47
|
+
}
|
|
48
|
+
export function getIsFirefox() {
|
|
49
|
+
if (typeof window === 'undefined') {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
53
|
+
return !!ua.match(/Firefox/i);
|
|
54
|
+
}
|
|
55
|
+
export function getIsEdge() {
|
|
56
|
+
if (typeof window === 'undefined') {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
60
|
+
return !!ua.match(/Edge/i);
|
|
61
|
+
}
|
|
62
|
+
export function getIsMobile() {
|
|
63
|
+
return (typeof window !== 'undefined' &&
|
|
64
|
+
(/Mobi/.test(navigator.userAgent) ||
|
|
65
|
+
/Android/i.test(navigator.userAgent) ||
|
|
66
|
+
/iPhone/i.test(navigator.userAgent) ||
|
|
67
|
+
/iPad/i.test(navigator.userAgent)));
|
|
68
|
+
}
|
|
69
|
+
export function getSupportsPWAInstallPrompt() {
|
|
70
|
+
if (PRETEND_INSTALLABLE) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
return typeof window !== 'undefined' && 'BeforeInstallPromptEvent' in window;
|
|
74
|
+
}
|
|
75
|
+
let isUsingTouch = false;
|
|
76
|
+
if (typeof window !== 'undefined') {
|
|
77
|
+
window.addEventListener('touchstart', () => {
|
|
78
|
+
isUsingTouch = true;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export function getIsTouch() {
|
|
82
|
+
return isUsingTouch;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,18 +39,6 @@ export interface OklchColorEquation {
|
|
|
39
39
|
* OKLCH color string with calculations and references resolved.
|
|
40
40
|
*/
|
|
41
41
|
computeOklch(context: ColorEvaluationContext): string;
|
|
42
|
-
/**
|
|
43
|
-
* Uses the equation and provided context to compute a static
|
|
44
|
-
* sRGB color string with calculations and references resolved.
|
|
45
|
-
* This is not as accurate as computeOklch, as it converts to sRGB gamut.
|
|
46
|
-
*/
|
|
47
|
-
computeSrgb(context: ColorEvaluationContext): string;
|
|
48
|
-
/**
|
|
49
|
-
* Uses the equation and provided context to compute a static
|
|
50
|
-
* HEX color string with calculations and references resolved.
|
|
51
|
-
* This is not as accurate as computeOklch, as it converts to sRGB gamut.
|
|
52
|
-
*/
|
|
53
|
-
computeHex(context: ColorEvaluationContext): string;
|
|
54
42
|
/**
|
|
55
43
|
* Returns the raw computed L, C, H values as numbers with units.
|
|
56
44
|
*/
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
// @unocss-include
|
|
2
|
-
import { ColorSpace, to as convert, OKLCH, serialize, sRGB, toGamut, } from 'colorjs.io/fn';
|
|
3
|
-
ColorSpace.register(sRGB);
|
|
4
|
-
ColorSpace.register(OKLCH);
|
|
5
2
|
export function lighten(base, level) {
|
|
6
3
|
return mod(base, level, 1);
|
|
7
4
|
}
|
|
@@ -223,38 +220,6 @@ export function oklchBuilder(impl) {
|
|
|
223
220
|
const h = printEquation(equations.h, context);
|
|
224
221
|
return `oklch(calc(${l}) calc(${c}) calc(${h}))`;
|
|
225
222
|
},
|
|
226
|
-
computeSrgb(context) {
|
|
227
|
-
const l = computeEquation(equations.l, context);
|
|
228
|
-
const c = computeEquation(equations.c, context);
|
|
229
|
-
const h = computeEquation(equations.h, context);
|
|
230
|
-
const asColor = {
|
|
231
|
-
space: OKLCH,
|
|
232
|
-
alpha: 1,
|
|
233
|
-
coords: [
|
|
234
|
-
resolveComputationResult(l, [0, 1]),
|
|
235
|
-
resolveComputationResult(c, [0, 0.4]),
|
|
236
|
-
resolveComputationResult(h, [0, 360]),
|
|
237
|
-
],
|
|
238
|
-
};
|
|
239
|
-
return serialize(toGamut(convert(asColor, 'srgb'), {}));
|
|
240
|
-
},
|
|
241
|
-
computeHex(context) {
|
|
242
|
-
const l = computeEquation(equations.l, context);
|
|
243
|
-
const c = computeEquation(equations.c, context);
|
|
244
|
-
const h = computeEquation(equations.h, context);
|
|
245
|
-
const asColor = {
|
|
246
|
-
space: OKLCH,
|
|
247
|
-
alpha: 1,
|
|
248
|
-
coords: [
|
|
249
|
-
resolveComputationResult(l, [0, 1]),
|
|
250
|
-
resolveComputationResult(c, [0, 0.4]),
|
|
251
|
-
resolveComputationResult(h, [0, 360]),
|
|
252
|
-
],
|
|
253
|
-
};
|
|
254
|
-
return serialize(toGamut(convert(asColor, 'srgb')), {
|
|
255
|
-
format: 'hex',
|
|
256
|
-
});
|
|
257
|
-
},
|
|
258
223
|
computeOklch(context) {
|
|
259
224
|
const l = computeEquation(equations.l, context);
|
|
260
225
|
const c = computeEquation(equations.c, context);
|