@pwa-platform/react 0.1.0-beta.0 → 0.1.0-beta.2
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/README.md +14 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +3 -0
- package/dist/store.js.map +1 -1
- package/dist/ui.d.ts +33 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +147 -0
- package/dist/ui.js.map +1 -0
- package/dist/update-notice.css +113 -0
- package/package.json +13 -6
package/README.md
CHANGED
|
@@ -4,6 +4,20 @@ React 19 binding for PWA Platform.
|
|
|
4
4
|
|
|
5
5
|
Use `PwaProvider` and `usePwa()` in a React 19 application. Also configure `@pwa-platform/vite` for build artifacts.
|
|
6
6
|
|
|
7
|
+
The current source adds an opt-in update notice (not present in the published `0.1.0-beta.1`):
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { PwaUpdateNotice } from "@pwa-platform/react/ui";
|
|
11
|
+
import "@pwa-platform/react/update-notice.css";
|
|
12
|
+
|
|
13
|
+
<PwaProvider config={config}>
|
|
14
|
+
<App />
|
|
15
|
+
<PwaUpdateNotice />
|
|
16
|
+
</PwaProvider>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The default is a non-modal bottom-right card. `position` also accepts `bottom-center`, `top-right`, and `top-center`; `messages` overrides Chinese copy. Use `colors={{ primaryButtonBackground: "#006e52", primaryButtonText: "#ffffff" }}` for simple brand colors; `surface`, `text`, `mutedText`, and `border` are also available. Inherited `--pwa-update-*` CSS variables control the remaining appearance; `colors` takes precedence for values it sets. `reloadPage` can replace the final reload action when the application must protect unsaved work. Only a click on “刷新页面” calls it. The component does not register the worker; the application still calls `register()` and may configure `updateCheck` for long-lived pages.
|
|
20
|
+
|
|
7
21
|
This is a `0.1.0` prerelease. It provides online use, installation integration, static precaching, a safe offline fallback, and controlled updates. It does not enable runtime business API caching, private data caching, automatic write replay, or Push for applications. Production deployment requires the application and infrastructure checks described in the PWA Platform release runbook.
|
|
8
22
|
|
|
9
23
|
License: MIT.
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAYA,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE1H,MAAM,MAAM,QAAQ,GAAG;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,wGAAwG;IACxG,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,gGAAgG;IAChG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,CAAC;AAIF,eAAO,MAAM,aAAa,EAAE,QAK1B,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAYA,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE1H,MAAM,MAAM,QAAQ,GAAG;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,wGAAwG;IACxG,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,gGAAgG;IAChG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,CAAC;AAIF,eAAO,MAAM,aAAa,EAAE,QAK1B,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,GAAG,QAAQ,CAwBvE;AAED,8FAA8F;AAC9F,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe,GAAG,aAAa,GAAG,QAAQ,GAAG,gBAAgB,CAAC,CAAC;AAErH;;;GAGG;AACH,eAAO,MAAM,sBAAsB,uGAAuG,CAAC;AAM3I;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,UAM3B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,6BAA6B,oJACyG,CAAC;AAEpJ,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG;IAClC,qGAAqG;IACrG,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,WAAW,IAAI,QAAQ,CAAC;IACxB;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,MAAM,IAAI,IAAI,CAAC;CAChB,CAAC;AAEF,wBAAgB,WAAW,IAAI,QAAQ,CAiFtC;AAED,oHAAoH;AACpH,KAAK,iBAAiB,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,SAAS,EAClB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,MAAM,IAAI,CAYZ;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,iBAAiB,GAAG,SAAS,GACzC,SAAS,OAAO,EAAE,CAWpB"}
|
package/dist/store.js
CHANGED
|
@@ -43,6 +43,9 @@ export function reduce(state, event) {
|
|
|
43
43
|
return state.updateWaiting ? state : { ...state, updateWaiting: true };
|
|
44
44
|
case "update-applied":
|
|
45
45
|
return state.updateWaiting ? { ...state, updateWaiting: false } : state;
|
|
46
|
+
case "served-from-cache":
|
|
47
|
+
// Carries no state the bindings expose (ADR-0035): the app subscribes to client-runtime's event directly.
|
|
48
|
+
return state;
|
|
46
49
|
default: {
|
|
47
50
|
// Every member of PwaClientEventType is handled above. Should client-runtime ever add one, this turns into a
|
|
48
51
|
// compile error here rather than a silently ignored event at runtime.
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
export type PwaUpdateNoticePosition = "bottom-right" | "bottom-center" | "top-right" | "top-center";
|
|
3
|
+
export type PwaUpdateNoticeMessages = {
|
|
4
|
+
readonly readyTitle: string;
|
|
5
|
+
readonly readyBody: string;
|
|
6
|
+
readonly update: string;
|
|
7
|
+
readonly later: string;
|
|
8
|
+
readonly updatingTitle: string;
|
|
9
|
+
readonly updatingBody: string;
|
|
10
|
+
readonly reloadTitle: string;
|
|
11
|
+
readonly reloadBody: string;
|
|
12
|
+
readonly reload: string;
|
|
13
|
+
readonly errorTitle: string;
|
|
14
|
+
readonly errorBody: string;
|
|
15
|
+
readonly retry: string;
|
|
16
|
+
};
|
|
17
|
+
export type PwaUpdateNoticeProps = {
|
|
18
|
+
readonly position?: PwaUpdateNoticePosition;
|
|
19
|
+
readonly messages?: Partial<PwaUpdateNoticeMessages>;
|
|
20
|
+
readonly colors?: Partial<PwaUpdateNoticeColors>;
|
|
21
|
+
readonly reloadPage?: () => void;
|
|
22
|
+
};
|
|
23
|
+
export type PwaUpdateNoticeColors = {
|
|
24
|
+
readonly surface: string;
|
|
25
|
+
readonly text: string;
|
|
26
|
+
readonly mutedText: string;
|
|
27
|
+
readonly border: string;
|
|
28
|
+
readonly primaryButtonBackground: string;
|
|
29
|
+
readonly primaryButtonText: string;
|
|
30
|
+
};
|
|
31
|
+
/** Opt-in, non-modal update notice. Import `@pwa-platform/react/update-notice.css` for its default appearance. */
|
|
32
|
+
export declare function PwaUpdateNotice({ position, messages: overrides, colors, reloadPage, }: PwaUpdateNoticeProps): ReactElement | null;
|
|
33
|
+
//# sourceMappingURL=ui.d.ts.map
|
package/dist/ui.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1G,MAAM,MAAM,uBAAuB,GAAG,cAAc,GAAG,eAAe,GAAG,WAAW,GAAG,YAAY,CAAC;AAEpG,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,CAAC;AAsBF,kHAAkH;AAClH,wBAAgB,eAAe,CAAC,EAC9B,QAAyB,EACzB,QAAQ,EAAE,SAAS,EACnB,MAAM,EACN,UAAU,GACX,EAAE,oBAAoB,GAAG,YAAY,GAAG,IAAI,CA6H5C"}
|
package/dist/ui.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { createElement, useEffect, useRef, useState } from "react";
|
|
2
|
+
import { usePwa } from "./index.js";
|
|
3
|
+
const DEFAULT_MESSAGES = {
|
|
4
|
+
readyTitle: "有可用更新",
|
|
5
|
+
readyBody: "新版离线资源已准备好,你可以在合适的时候更新。",
|
|
6
|
+
update: "更新",
|
|
7
|
+
later: "稍后",
|
|
8
|
+
updatingTitle: "正在更新",
|
|
9
|
+
updatingBody: "正在切换离线资源,请稍候。",
|
|
10
|
+
reloadTitle: "更新已完成",
|
|
11
|
+
reloadBody: "需要时刷新页面,以确保使用最新内容。",
|
|
12
|
+
reload: "刷新页面",
|
|
13
|
+
errorTitle: "更新未完成",
|
|
14
|
+
errorBody: "请检查连接后重试。",
|
|
15
|
+
retry: "重试",
|
|
16
|
+
};
|
|
17
|
+
const REMIND_AFTER_MS = 30 * 60_000;
|
|
18
|
+
const STABLE_WAITING_MS = 100;
|
|
19
|
+
/** Opt-in, non-modal update notice. Import `@pwa-platform/react/update-notice.css` for its default appearance. */
|
|
20
|
+
export function PwaUpdateNotice({ position = "bottom-right", messages: overrides, colors, reloadPage, }) {
|
|
21
|
+
const pwa = usePwa();
|
|
22
|
+
const waiting = pwa.state.updateWaiting;
|
|
23
|
+
const [phase, setPhase] = useState("ready");
|
|
24
|
+
const [dismissed, setDismissed] = useState(false);
|
|
25
|
+
const [stableWaiting, setStableWaiting] = useState(false);
|
|
26
|
+
const previousWaiting = useRef(false);
|
|
27
|
+
const stableWaitingRef = useRef(false);
|
|
28
|
+
const takeoverObserved = useRef(false);
|
|
29
|
+
const reminder = useRef(undefined);
|
|
30
|
+
const waitingTimer = useRef(undefined);
|
|
31
|
+
const mounted = useRef(true);
|
|
32
|
+
function clearReminder() {
|
|
33
|
+
if (reminder.current !== undefined)
|
|
34
|
+
clearTimeout(reminder.current);
|
|
35
|
+
reminder.current = undefined;
|
|
36
|
+
}
|
|
37
|
+
function clearWaitingTimer() {
|
|
38
|
+
if (waitingTimer.current !== undefined)
|
|
39
|
+
clearTimeout(waitingTimer.current);
|
|
40
|
+
waitingTimer.current = undefined;
|
|
41
|
+
}
|
|
42
|
+
function markStableWaiting(value) {
|
|
43
|
+
stableWaitingRef.current = value;
|
|
44
|
+
setStableWaiting(value);
|
|
45
|
+
}
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
const wasWaiting = previousWaiting.current;
|
|
48
|
+
previousWaiting.current = waiting;
|
|
49
|
+
if (waiting && !wasWaiting) {
|
|
50
|
+
takeoverObserved.current = false;
|
|
51
|
+
setPhase("ready");
|
|
52
|
+
setDismissed(false);
|
|
53
|
+
markStableWaiting(false);
|
|
54
|
+
clearReminder();
|
|
55
|
+
clearWaitingTimer();
|
|
56
|
+
waitingTimer.current = setTimeout(() => {
|
|
57
|
+
waitingTimer.current = undefined;
|
|
58
|
+
if (previousWaiting.current)
|
|
59
|
+
markStableWaiting(true);
|
|
60
|
+
}, STABLE_WAITING_MS);
|
|
61
|
+
}
|
|
62
|
+
else if (!waiting && wasWaiting) {
|
|
63
|
+
const wasStable = stableWaitingRef.current;
|
|
64
|
+
clearWaitingTimer();
|
|
65
|
+
markStableWaiting(false);
|
|
66
|
+
takeoverObserved.current = wasStable;
|
|
67
|
+
setPhase(wasStable ? "reload" : "ready");
|
|
68
|
+
setDismissed(false);
|
|
69
|
+
clearReminder();
|
|
70
|
+
}
|
|
71
|
+
}, [waiting]);
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
mounted.current = true;
|
|
74
|
+
return () => {
|
|
75
|
+
mounted.current = false;
|
|
76
|
+
clearReminder();
|
|
77
|
+
clearWaitingTimer();
|
|
78
|
+
previousWaiting.current = false;
|
|
79
|
+
};
|
|
80
|
+
}, []);
|
|
81
|
+
function later() {
|
|
82
|
+
setDismissed(true);
|
|
83
|
+
clearReminder();
|
|
84
|
+
reminder.current = setTimeout(() => {
|
|
85
|
+
reminder.current = undefined;
|
|
86
|
+
if (previousWaiting.current)
|
|
87
|
+
setDismissed(false);
|
|
88
|
+
}, REMIND_AFTER_MS);
|
|
89
|
+
}
|
|
90
|
+
async function apply() {
|
|
91
|
+
if (phase === "updating")
|
|
92
|
+
return;
|
|
93
|
+
setPhase("updating");
|
|
94
|
+
try {
|
|
95
|
+
const applied = await pwa.applyUpdate();
|
|
96
|
+
if (!mounted.current)
|
|
97
|
+
return;
|
|
98
|
+
setPhase(applied || takeoverObserved.current ? "reload" : "ready");
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
if (mounted.current)
|
|
102
|
+
setPhase(takeoverObserved.current ? "reload" : "error");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function reload() {
|
|
106
|
+
if (reloadPage !== undefined)
|
|
107
|
+
reloadPage();
|
|
108
|
+
else
|
|
109
|
+
window.location.reload();
|
|
110
|
+
}
|
|
111
|
+
const mode = phase === "ready" ? (waiting && stableWaiting && !dismissed ? "ready" : null) : phase;
|
|
112
|
+
if (mode === null)
|
|
113
|
+
return null;
|
|
114
|
+
const messages = { ...DEFAULT_MESSAGES, ...overrides };
|
|
115
|
+
const title = messages[`${mode}Title`];
|
|
116
|
+
const body = messages[`${mode}Body`];
|
|
117
|
+
const buttons = [];
|
|
118
|
+
if (mode === "ready") {
|
|
119
|
+
buttons.push(createElement("button", { key: "update", type: "button", className: "pwa-update-notice__button pwa-update-notice__button--primary", onClick: () => void apply() }, messages.update));
|
|
120
|
+
buttons.push(createElement("button", { key: "later", type: "button", className: "pwa-update-notice__button", onClick: later }, messages.later));
|
|
121
|
+
}
|
|
122
|
+
else if (mode === "updating") {
|
|
123
|
+
buttons.push(createElement("button", { key: "updating", type: "button", className: "pwa-update-notice__button pwa-update-notice__button--primary", disabled: true }, messages.updatingTitle));
|
|
124
|
+
}
|
|
125
|
+
else if (mode === "reload") {
|
|
126
|
+
buttons.push(createElement("button", { key: "reload", type: "button", className: "pwa-update-notice__button pwa-update-notice__button--primary", onClick: reload }, messages.reload));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
buttons.push(createElement("button", { key: "retry", type: "button", className: "pwa-update-notice__button pwa-update-notice__button--primary", onClick: () => void apply() }, messages.retry));
|
|
130
|
+
}
|
|
131
|
+
return createElement("section", {
|
|
132
|
+
className: "pwa-update-notice",
|
|
133
|
+
"data-position": position,
|
|
134
|
+
style: {
|
|
135
|
+
"--pwa-update-surface": colors?.surface,
|
|
136
|
+
"--pwa-update-text": colors?.text,
|
|
137
|
+
"--pwa-update-muted": colors?.mutedText,
|
|
138
|
+
"--pwa-update-border": colors?.border,
|
|
139
|
+
"--pwa-update-accent": colors?.primaryButtonBackground,
|
|
140
|
+
"--pwa-update-accent-text": colors?.primaryButtonText,
|
|
141
|
+
},
|
|
142
|
+
role: "status",
|
|
143
|
+
"aria-live": "polite",
|
|
144
|
+
"aria-busy": mode === "updating",
|
|
145
|
+
}, createElement("h2", { className: "pwa-update-notice__title" }, title), createElement("p", { className: "pwa-update-notice__body" }, body), createElement("div", { className: "pwa-update-notice__actions" }, buttons));
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
.pwa-update-notice {
|
|
2
|
+
--pwa-update-default-surface: #ffffff;
|
|
3
|
+
--pwa-update-default-text: #1f2328;
|
|
4
|
+
--pwa-update-default-muted: #57616d;
|
|
5
|
+
--pwa-update-default-border: #d0d7de;
|
|
6
|
+
--pwa-update-default-accent: #0b5cd5;
|
|
7
|
+
--pwa-update-default-accent-text: #ffffff;
|
|
8
|
+
position: fixed;
|
|
9
|
+
z-index: var(--pwa-update-z-index, 1200);
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
width: min(24rem, calc(100vw - 2rem));
|
|
12
|
+
padding: 1rem;
|
|
13
|
+
border: 1px solid var(--pwa-update-border, var(--pwa-update-default-border));
|
|
14
|
+
border-radius: var(--pwa-update-radius, 0.5rem);
|
|
15
|
+
background: var(--pwa-update-surface, var(--pwa-update-default-surface));
|
|
16
|
+
color: var(--pwa-update-text, var(--pwa-update-default-text));
|
|
17
|
+
box-shadow: var(--pwa-update-shadow, 0 8px 24px rgb(15 23 42 / 12%));
|
|
18
|
+
font-family: var(--pwa-update-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif);
|
|
19
|
+
font-size: 0.875rem;
|
|
20
|
+
line-height: 1.5;
|
|
21
|
+
overflow-wrap: anywhere;
|
|
22
|
+
color-scheme: light;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.pwa-update-notice[data-position="bottom-right"] {
|
|
26
|
+
inset-block-end: calc(1rem + env(safe-area-inset-bottom));
|
|
27
|
+
inset-inline-end: calc(1rem + env(safe-area-inset-right));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.pwa-update-notice[data-position="bottom-center"] {
|
|
31
|
+
inset-block-end: calc(1rem + env(safe-area-inset-bottom));
|
|
32
|
+
inset-inline-start: 50%;
|
|
33
|
+
transform: translateX(-50%);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.pwa-update-notice[data-position="top-right"] {
|
|
37
|
+
inset-block-start: calc(1rem + env(safe-area-inset-top));
|
|
38
|
+
inset-inline-end: calc(1rem + env(safe-area-inset-right));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.pwa-update-notice[data-position="top-center"] {
|
|
42
|
+
inset-block-start: calc(1rem + env(safe-area-inset-top));
|
|
43
|
+
inset-inline-start: 50%;
|
|
44
|
+
transform: translateX(-50%);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.pwa-update-notice__title {
|
|
48
|
+
margin: 0;
|
|
49
|
+
font-size: 1rem;
|
|
50
|
+
font-weight: 650;
|
|
51
|
+
line-height: 1.4;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.pwa-update-notice__body {
|
|
55
|
+
margin: 0.375rem 0 0;
|
|
56
|
+
color: var(--pwa-update-muted, var(--pwa-update-default-muted));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.pwa-update-notice__actions {
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-wrap: wrap;
|
|
62
|
+
gap: 0.5rem;
|
|
63
|
+
margin-top: 0.875rem;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.pwa-update-notice__button {
|
|
67
|
+
min-height: 44px;
|
|
68
|
+
padding: 0.5rem 0.875rem;
|
|
69
|
+
border: 1px solid var(--pwa-update-border, var(--pwa-update-default-border));
|
|
70
|
+
border-radius: var(--pwa-update-radius, 0.5rem);
|
|
71
|
+
background: var(--pwa-update-surface, var(--pwa-update-default-surface));
|
|
72
|
+
color: var(--pwa-update-text, var(--pwa-update-default-text));
|
|
73
|
+
font: inherit;
|
|
74
|
+
font-weight: 600;
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.pwa-update-notice__button--primary {
|
|
79
|
+
border-color: var(--pwa-update-accent, var(--pwa-update-default-accent));
|
|
80
|
+
background: var(--pwa-update-accent, var(--pwa-update-default-accent));
|
|
81
|
+
color: var(--pwa-update-accent-text, var(--pwa-update-default-accent-text));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.pwa-update-notice__button:disabled {
|
|
85
|
+
cursor: wait;
|
|
86
|
+
opacity: 0.7;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.pwa-update-notice__button:focus-visible {
|
|
90
|
+
outline: 2px solid var(--pwa-update-accent, var(--pwa-update-default-accent));
|
|
91
|
+
outline-offset: 2px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@media (prefers-color-scheme: dark) {
|
|
95
|
+
.pwa-update-notice {
|
|
96
|
+
--pwa-update-default-surface: #161b22;
|
|
97
|
+
--pwa-update-default-text: #e6e9ec;
|
|
98
|
+
--pwa-update-default-muted: #a6b0bd;
|
|
99
|
+
--pwa-update-default-border: #3d4652;
|
|
100
|
+
--pwa-update-default-accent: #4c93ff;
|
|
101
|
+
--pwa-update-default-accent-text: #0b1220;
|
|
102
|
+
color-scheme: dark;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@media (max-width: 480px) {
|
|
107
|
+
.pwa-update-notice[data-position] {
|
|
108
|
+
inset-inline-start: 1rem;
|
|
109
|
+
inset-inline-end: 1rem;
|
|
110
|
+
width: auto;
|
|
111
|
+
transform: none;
|
|
112
|
+
}
|
|
113
|
+
}
|
package/package.json
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pwa-platform/react",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.2",
|
|
4
4
|
"description": "React 19 binding for PWA Platform.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
|
-
"sideEffects":
|
|
7
|
+
"sideEffects": [
|
|
8
|
+
"./dist/update-notice.css"
|
|
9
|
+
],
|
|
8
10
|
"exports": {
|
|
9
11
|
".": {
|
|
10
12
|
"types": "./dist/index.d.ts",
|
|
11
13
|
"import": "./dist/index.js"
|
|
12
|
-
}
|
|
14
|
+
},
|
|
15
|
+
"./ui": {
|
|
16
|
+
"types": "./dist/ui.d.ts",
|
|
17
|
+
"import": "./dist/ui.js"
|
|
18
|
+
},
|
|
19
|
+
"./update-notice.css": "./dist/update-notice.css"
|
|
13
20
|
},
|
|
14
21
|
"types": "./dist/index.d.ts",
|
|
15
22
|
"files": [
|
|
@@ -19,12 +26,12 @@
|
|
|
19
26
|
"react": "^19.2.0"
|
|
20
27
|
},
|
|
21
28
|
"dependencies": {
|
|
22
|
-
"@pwa-platform/client-runtime": "0.1.0-beta.
|
|
29
|
+
"@pwa-platform/client-runtime": "0.1.0-beta.2"
|
|
23
30
|
},
|
|
24
31
|
"devDependencies": {
|
|
25
32
|
"@types/react": "19.3.0",
|
|
26
33
|
"react": "19.3.0",
|
|
27
|
-
"@pwa-platform/vue": "0.1.0-beta.
|
|
34
|
+
"@pwa-platform/vue": "0.1.0-beta.2"
|
|
28
35
|
},
|
|
29
36
|
"engines": {
|
|
30
37
|
"node": ">=22.0.0"
|
|
@@ -35,7 +42,7 @@
|
|
|
35
42
|
"tag": "next"
|
|
36
43
|
},
|
|
37
44
|
"scripts": {
|
|
38
|
-
"build": "tsc --project tsconfig.build.json",
|
|
45
|
+
"build": "tsc --project tsconfig.build.json && node -e \"require('node:fs').copyFileSync('src/update-notice.css', 'dist/update-notice.css')\"",
|
|
39
46
|
"test": "vitest run",
|
|
40
47
|
"typecheck": "tsc --noEmit --project tsconfig.json"
|
|
41
48
|
}
|