@vuepress/plugin-pwa 2.0.0-rc.90 → 2.0.0-rc.92

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.
@@ -0,0 +1,2 @@
1
+ import{useLocaleConfig as r}from"@vuepress/helper/client";import{defineComponent as i,shallowRef as c,computed as d,h as t,onMounted as m,Transition as f}from"vue";import{U as v}from"./icons-DQk7h1-3.js";import"@vuepress/helper/transition/fade-in-scale-up.css";import"./styles/popup.css";import{u as w}from"./usePwaEvent-CUDY9qle.js";const u=o=>{const a=o.waiting;if(!a)return;const s=new MessageChannel;a.postMessage({type:"SKIP_WAITING"},[s.port2])},P=i({name:"PwaReadyPopup",props:{locales:{type:Object,required:!0}},slots:Object,setup(o,{slots:a}){const s=r(o.locales),e=c(),n=d(()=>!!e.value),p=()=>{e.value&&(u(e.value),e.value=void 0)};return m(()=>{w().on("updated",l=>{e.value=l})}),()=>t(f,{name:"fade-in-scale-up"},()=>a.default?.({isReady:n.value,reload:p})??(n.value?t("button",{type:"button",class:"sw-update-popup",tabindex:0,onClick:()=>{p()}},[s.value.update,t("span",{class:"icon-wrapper"},t(v))]):null))}});export{P,u as s};
2
+ //# sourceMappingURL=PwaReadyPopup-B75qeWFS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PwaReadyPopup-B75qeWFS.js","sources":["../../src/client/utils/skipWaiting.ts","../../src/client/components/PwaReadyPopup.ts"],"sourcesContent":["/**\n * Call `skipWaiting()` inside current waiting worker\n *\n * 在当前等待中的 Service Worker 中调用 `skipWaiting()`\n */\nexport const skipWaiting = (registration: ServiceWorkerRegistration): void => {\n // Get the waiting worker\n const worker = registration.waiting\n\n // If there is no waiting worker, return directly\n if (!worker) return\n\n // Post SKIP_WAITING message to the waiting worker\n const channel = new MessageChannel()\n\n worker.postMessage({ type: 'SKIP_WAITING' }, [channel.port2])\n}\n","import { useLocaleConfig } from '@vuepress/helper/client'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport {\n Transition,\n computed,\n defineComponent,\n h,\n onMounted,\n shallowRef,\n} from 'vue'\nimport { usePwaEvent } from '../composables/index.js'\nimport type { PwaPluginLocaleConfig } from '../types.js'\nimport { skipWaiting } from '../utils/index.js'\nimport { UpdateIcon } from './icons.js'\n\nimport '@vuepress/helper/transition/fade-in-scale-up.css'\nimport '../styles/popup.css'\n\nexport const PwaReadyPopup = defineComponent({\n name: 'PwaReadyPopup',\n\n props: {\n /** locale data */\n locales: {\n type: Object as PropType<PwaPluginLocaleConfig>,\n required: true,\n },\n },\n\n slots: Object as SlotsType<{\n default?: (props: {\n isReady: boolean\n reload: () => void\n }) => VNode | VNode[] | null\n }>,\n\n setup(props, { slots }) {\n const locale = useLocaleConfig(props.locales)\n const registration = shallowRef<ServiceWorkerRegistration>()\n\n const isReady = computed(() => Boolean(registration.value))\n\n const reload = (): void => {\n if (registration.value) {\n skipWaiting(registration.value)\n registration.value = undefined\n }\n }\n\n onMounted(() => {\n const event = usePwaEvent()\n\n event.on('updated', (reg) => {\n registration.value = reg\n })\n })\n\n return (): VNode =>\n h(\n Transition,\n { name: 'fade-in-scale-up' },\n () =>\n slots.default?.({\n isReady: isReady.value,\n reload,\n }) ??\n (isReady.value\n ? h(\n 'button',\n {\n type: 'button',\n class: 'sw-update-popup',\n tabindex: 0,\n onClick: () => {\n reload()\n },\n },\n [\n locale.value.update,\n h('span', { class: 'icon-wrapper' }, h(UpdateIcon)),\n ],\n )\n : null),\n )\n },\n})\n"],"names":["skipWaiting","registration","worker","channel","PwaReadyPopup","defineComponent","props","slots","locale","useLocaleConfig","shallowRef","isReady","computed","reload","onMounted","usePwaEvent","reg","h","Transition","UpdateIcon"],"mappings":"8UAKa,MAAAA,EAAeC,GAAkD,CAE5E,MAAMC,EAASD,EAAa,QAG5B,GAAI,CAACC,EAAQ,OAGb,MAAMC,EAAU,IAAI,eAEpBD,EAAO,YAAY,CAAE,KAAM,cAAe,EAAG,CAACC,EAAQ,KAAK,CAAC,CAC9D,ECEaC,EAAgBC,EAAgB,CAC3C,KAAM,gBAEN,MAAO,CAEL,QAAS,CACP,KAAM,OACN,SAAU,EACZ,CACF,EAEA,MAAO,OAOP,MAAMC,EAAO,CAAE,MAAAC,CAAM,EAAG,CACtB,MAAMC,EAASC,EAAgBH,EAAM,OAAO,EACtCL,EAAeS,EAEfC,EAAAA,EAAUC,EAAS,IAAM,EAAQX,EAAa,KAAM,EAEpDY,EAAS,IAAY,CACrBZ,EAAa,QACfD,EAAYC,EAAa,KAAK,EAC9BA,EAAa,MAAQ,OAEzB,EAEA,OAAAa,EAAU,IAAM,CACAC,IAER,GAAG,UAAYC,GAAQ,CAC3Bf,EAAa,MAAQe,CACvB,CAAC,CACH,CAAC,EAEM,IACLC,EACEC,EACA,CAAE,KAAM,kBAAmB,EAC3B,IACEX,EAAM,UAAU,CACd,QAASI,EAAQ,MACjB,OAAAE,CACF,CAAC,IACAF,EAAQ,MACLM,EACE,SACA,CACE,KAAM,SACN,MAAO,kBACP,SAAU,EACV,QAAS,IAAM,CACbJ,EACF,CAAA,CACF,EACA,CACEL,EAAO,MAAM,OACbS,EAAE,OAAQ,CAAE,MAAO,cAAe,EAAGA,EAAEE,CAAU,CAAC,CACpD,CACF,EACA,KACR,CACJ,CACF,CAAC"}
@@ -1,2 +1,2 @@
1
- import{useLocaleConfig as s}from"@vuepress/helper/client";import{defineComponent as l,ref as i,h as o,onMounted as c,Transition as d}from"vue";import{U as f}from"../icons-DQk7h1-3.js";import"../styles/popup.css";import{u as m}from"../usePwaEvent-CUDY9qle.js";const v=l({name:"PwaFoundPopup",props:{locales:{type:Object,required:!0}},slots:Object,setup(a,{slots:r}){const u=s(a.locales),e=i(!1),t=()=>{e.value&&(window.location.reload(!0),e.value=!1)};return c(()=>{const n=m();n.on("updatefound",()=>{navigator.serviceWorker.getRegistration().then(p=>{p?.active&&(e.value=!0)})}),n.on("updated",()=>{e.value=!1})}),()=>o(d,{name:"popup"},()=>r.default?.({found:e.value,refresh:t})??(e.value?o("button",{type:"button",class:"sw-hint-popup",tabindex:0,onClick:()=>{t()}},[u.value.hint,o("span",{class:"icon-wrapper"},o(f))]):null))}});export{v as PwaFoundPopup};
1
+ import{useLocaleConfig as p}from"@vuepress/helper/client";import{defineComponent as l,ref as i,h as o,onMounted as c,Transition as d}from"vue";import{U as f}from"../icons-DQk7h1-3.js";import"@vuepress/helper/transition/fade-in-scale-up.css";import"../styles/popup.css";import{u as m}from"../usePwaEvent-CUDY9qle.js";const v=l({name:"PwaFoundPopup",props:{locales:{type:Object,required:!0}},slots:Object,setup(n,{slots:r}){const u=p(n.locales),e=i(!1),t=()=>{e.value&&(window.location.reload(!0),e.value=!1)};return c(()=>{const a=m();a.on("updatefound",()=>{navigator.serviceWorker.getRegistration().then(s=>{s?.active&&(e.value=!0)})}),a.on("updated",()=>{e.value=!1})}),()=>o(d,{name:"fade-in-scale-up"},()=>r.default?.({found:e.value,refresh:t})??(e.value?o("button",{type:"button",class:"sw-hint-popup",tabindex:0,onClick:()=>{t()}},[u.value.hint,o("span",{class:"icon-wrapper"},o(f))]):null))}});export{v as PwaFoundPopup};
2
2
  //# sourceMappingURL=PwaFoundPopup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PwaFoundPopup.js","sources":["../../../src/client/components/PwaFoundPopup.ts"],"sourcesContent":["import { useLocaleConfig } from '@vuepress/helper/client'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport { Transition, defineComponent, h, onMounted, ref } from 'vue'\nimport { usePwaEvent } from '../composables/index.js'\nimport type { PwaPluginLocaleConfig } from '../types.js'\nimport { UpdateIcon } from './icons.js'\n\nimport '../styles/popup.css'\n\nexport const PwaFoundPopup = defineComponent({\n name: 'PwaFoundPopup',\n\n props: {\n /** locale data */\n locales: {\n type: Object as PropType<PwaPluginLocaleConfig>,\n required: true,\n },\n },\n\n slots: Object as SlotsType<{\n default?: (props: {\n found: boolean\n refresh: () => void\n }) => VNode | VNode[] | null\n }>,\n\n setup(props, { slots }) {\n const locale = useLocaleConfig(props.locales)\n const found = ref(false)\n\n const refresh = (): void => {\n if (found.value) {\n // force refresh\n // @ts-expect-error: A non-standard API\n window.location.reload(true)\n found.value = false\n }\n }\n\n onMounted(() => {\n const event = usePwaEvent()\n\n event.on('updatefound', () => {\n void navigator.serviceWorker.getRegistration().then((registration) => {\n // Check whether a valid service worker is active\n if (registration?.active) found.value = true\n })\n })\n\n event.on('updated', () => {\n found.value = false\n })\n })\n\n return (): VNode =>\n h(\n Transition,\n { name: 'popup' },\n () =>\n slots.default?.({\n found: found.value,\n refresh,\n }) ??\n (found.value\n ? h(\n 'button',\n {\n type: 'button',\n class: 'sw-hint-popup',\n tabindex: 0,\n onClick: () => {\n refresh()\n },\n },\n [\n locale.value.hint,\n h('span', { class: 'icon-wrapper' }, h(UpdateIcon)),\n ],\n )\n : null),\n )\n },\n})\n"],"names":["PwaFoundPopup","defineComponent","props","slots","locale","useLocaleConfig","found","ref","refresh","onMounted","event","usePwaEvent","registration","h","Transition","UpdateIcon"],"mappings":"mQASa,MAAAA,EAAgBC,EAAgB,CAC3C,KAAM,gBAEN,MAAO,CAEL,QAAS,CACP,KAAM,OACN,SAAU,EACZ,CACF,EAEA,MAAO,OAOP,MAAMC,EAAO,CAAE,MAAAC,CAAM,EAAG,CACtB,MAAMC,EAASC,EAAgBH,EAAM,OAAO,EACtCI,EAAQC,EAAI,EAAK,EAEjBC,EAAU,IAAY,CACtBF,EAAM,QAGR,OAAO,SAAS,OAAO,EAAI,EAC3BA,EAAM,MAAQ,GAElB,EAEA,OAAAG,EAAU,IAAM,CACd,MAAMC,EAAQC,EAAY,EAE1BD,EAAM,GAAG,cAAe,IAAM,CACvB,UAAU,cAAc,gBAAA,EAAkB,KAAME,GAAiB,CAEhEA,GAAc,SAAQN,EAAM,MAAQ,GAC1C,CAAC,CACH,CAAC,EAEDI,EAAM,GAAG,UAAW,IAAM,CACxBJ,EAAM,MAAQ,EAChB,CAAC,CACH,CAAC,EAEM,IACLO,EACEC,EACA,CAAE,KAAM,OAAQ,EAChB,IACEX,EAAM,UAAU,CACd,MAAOG,EAAM,MACb,QAAAE,CACF,CAAC,IACAF,EAAM,MACHO,EACE,SACA,CACE,KAAM,SACN,MAAO,gBACP,SAAU,EACV,QAAS,IAAM,CACbL,GACF,CACF,EACA,CACEJ,EAAO,MAAM,KACbS,EAAE,OAAQ,CAAE,MAAO,cAAe,EAAGA,EAAEE,CAAU,CAAC,CACpD,CACF,EACA,KACR,CACJ,CACF,CAAC"}
1
+ {"version":3,"file":"PwaFoundPopup.js","sources":["../../../src/client/components/PwaFoundPopup.ts"],"sourcesContent":["import { useLocaleConfig } from '@vuepress/helper/client'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport { Transition, defineComponent, h, onMounted, ref } from 'vue'\nimport { usePwaEvent } from '../composables/index.js'\nimport type { PwaPluginLocaleConfig } from '../types.js'\nimport { UpdateIcon } from './icons.js'\n\nimport '@vuepress/helper/transition/fade-in-scale-up.css'\nimport '../styles/popup.css'\n\nexport const PwaFoundPopup = defineComponent({\n name: 'PwaFoundPopup',\n\n props: {\n /** locale data */\n locales: {\n type: Object as PropType<PwaPluginLocaleConfig>,\n required: true,\n },\n },\n\n slots: Object as SlotsType<{\n default?: (props: {\n found: boolean\n refresh: () => void\n }) => VNode | VNode[] | null\n }>,\n\n setup(props, { slots }) {\n const locale = useLocaleConfig(props.locales)\n const found = ref(false)\n\n const refresh = (): void => {\n if (found.value) {\n // force refresh\n // @ts-expect-error: A non-standard API\n window.location.reload(true)\n found.value = false\n }\n }\n\n onMounted(() => {\n const event = usePwaEvent()\n\n event.on('updatefound', () => {\n void navigator.serviceWorker.getRegistration().then((registration) => {\n // Check whether a valid service worker is active\n if (registration?.active) found.value = true\n })\n })\n\n event.on('updated', () => {\n found.value = false\n })\n })\n\n return (): VNode =>\n h(\n Transition,\n { name: 'fade-in-scale-up' },\n () =>\n slots.default?.({\n found: found.value,\n refresh,\n }) ??\n (found.value\n ? h(\n 'button',\n {\n type: 'button',\n class: 'sw-hint-popup',\n tabindex: 0,\n onClick: () => {\n refresh()\n },\n },\n [\n locale.value.hint,\n h('span', { class: 'icon-wrapper' }, h(UpdateIcon)),\n ],\n )\n : null),\n )\n },\n})\n"],"names":["PwaFoundPopup","defineComponent","props","slots","locale","useLocaleConfig","found","ref","refresh","onMounted","event","usePwaEvent","registration","h","Transition","UpdateIcon"],"mappings":"4TAUO,MAAMA,EAAgBC,EAAgB,CAC3C,KAAM,gBAEN,MAAO,CAEL,QAAS,CACP,KAAM,OACN,SAAU,EACZ,CACF,EAEA,MAAO,OAOP,MAAMC,EAAO,CAAE,MAAAC,CAAM,EAAG,CACtB,MAAMC,EAASC,EAAgBH,EAAM,OAAO,EACtCI,EAAQC,EAAI,EAAK,EAEjBC,EAAU,IAAY,CACtBF,EAAM,QAGR,OAAO,SAAS,OAAO,EAAI,EAC3BA,EAAM,MAAQ,GAElB,EAEA,OAAAG,EAAU,IAAM,CACd,MAAMC,EAAQC,EAAAA,EAEdD,EAAM,GAAG,cAAe,IAAM,CACvB,UAAU,cAAc,kBAAkB,KAAME,GAAiB,CAEhEA,GAAc,SAAQN,EAAM,MAAQ,GAC1C,CAAC,CACH,CAAC,EAEDI,EAAM,GAAG,UAAW,IAAM,CACxBJ,EAAM,MAAQ,EAChB,CAAC,CACH,CAAC,EAEM,IACLO,EACEC,EACA,CAAE,KAAM,kBAAmB,EAC3B,IACEX,EAAM,UAAU,CACd,MAAOG,EAAM,MACb,QAAAE,CACF,CAAC,IACAF,EAAM,MACHO,EACE,SACA,CACE,KAAM,SACN,MAAO,gBACP,SAAU,EACV,QAAS,IAAM,CACbL,GACF,CACF,EACA,CACEJ,EAAO,MAAM,KACbS,EAAE,OAAQ,CAAE,MAAO,cAAe,EAAGA,EAAEE,CAAU,CAAC,CACpD,CACF,EACA,KACR,CACJ,CACF,CAAC"}
@@ -1,2 +1,2 @@
1
- import"@vuepress/helper/client";import"vue";import"../icons-DQk7h1-3.js";import"../styles/popup.css";import{P}from"../PwaReadyPopup-B5B5_0YO.js";import"../usePwaEvent-CUDY9qle.js";export{P as PwaReadyPopup};
1
+ import"@vuepress/helper/client";import"vue";import"../icons-DQk7h1-3.js";import"@vuepress/helper/transition/fade-in-scale-up.css";import"../styles/popup.css";import{P as e}from"../PwaReadyPopup-B75qeWFS.js";import"../usePwaEvent-CUDY9qle.js";export{e as PwaReadyPopup};
2
2
  //# sourceMappingURL=PwaReadyPopup.js.map
@@ -1,2 +1,2 @@
1
- import{PwaInstall as c}from"./components/PwaInstall.js";import{PwaFoundPopup as l}from"./components/PwaFoundPopup.js";import{P as W,s as v}from"./PwaReadyPopup-B5B5_0YO.js";import{f as d,r as h,s as k,a as S,u as R}from"./index-DYf0Bvv5.js";import{p as A,u as E}from"./usePwaEvent-CUDY9qle.js";import"@vuepress/helper/client";import"@vueuse/core";import"vue";import"vuepress/client";import"./icons-DQk7h1-3.js";import"./styles/modal.css";import"./styles/popup.css";import"mitt";const t=()=>navigator.serviceWorker.getRegistration().then(e=>e?e.unregister().then(r=>(r&&console.log("[PWA] Current service worker unregistered"),r)):!1).catch(e=>(console.log("[PWA] Unregister current service worker failed with error:",e),!1));export{l as PwaFoundPopup,c as PwaInstall,W as PwaReadyPopup,d as forceUpdate,A as pwaEventSymbol,h as registerSW,k as setupPwa,S as setupViewPoint,v as skipWaiting,t as unregisterSW,E as usePwaEvent,R as useRegisterSW};
1
+ import{PwaInstall as f}from"./components/PwaInstall.js";import{PwaFoundPopup as w}from"./components/PwaFoundPopup.js";import{P as v,s as x}from"./PwaReadyPopup-B75qeWFS.js";import{f as h,r as k,s as S,a as R,u as y}from"./index-DYf0Bvv5.js";import{p as E,u as U}from"./usePwaEvent-CUDY9qle.js";import"@vuepress/helper/client";import"@vueuse/core";import"vue";import"vuepress/client";import"./icons-DQk7h1-3.js";import"./styles/modal.css";import"@vuepress/helper/transition/fade-in-scale-up.css";import"./styles/popup.css";import"mitt";const t=()=>navigator.serviceWorker.getRegistration().then(r=>r?r.unregister().then(e=>(e&&console.log("[PWA] Current service worker unregistered"),e)):!1).catch(r=>(console.log("[PWA] Unregister current service worker failed with error:",r),!1));export{w as PwaFoundPopup,f as PwaInstall,v as PwaReadyPopup,h as forceUpdate,E as pwaEventSymbol,k as registerSW,S as setupPwa,R as setupViewPoint,x as skipWaiting,t as unregisterSW,U as usePwaEvent,y as useRegisterSW};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/client/utils/unregisterSW.ts"],"sourcesContent":["/* eslint-disable no-console */\n/**\n * Call `unregister()` inside current active worker\n *\n * @returns `true` if unregister success, `false` if unregister failed\n *\n * 在当前激活的 Service Worker 中调用 `unregister()`\n *\n * @returns `true` 表示注销成功,`false` 表示注销失败\n */\nexport const unregisterSW = (): Promise<boolean> =>\n navigator.serviceWorker\n .getRegistration()\n .then((registration) => {\n if (registration)\n return registration.unregister().then((found) => {\n if (found) console.log('[PWA] Current service worker unregistered')\n\n return found\n })\n\n return false\n })\n .catch((error: unknown) => {\n console.log(\n '[PWA] Unregister current service worker failed with error:',\n error,\n )\n\n return false\n })\n"],"names":["unregisterSW","registration","found","error"],"mappings":"8dAUO,MAAMA,EAAe,IAC1B,UAAU,cACP,gBAAgB,EAChB,KAAMC,GACDA,EACKA,EAAa,WAAW,EAAE,KAAMC,IACjCA,GAAO,QAAQ,IAAI,2CAA2C,EAE3DA,EACR,EAEI,EACR,EACA,MAAOC,IACN,QAAQ,IACN,6DACAA,CACF,EAEO,GACR"}
1
+ {"version":3,"file":"index.js","sources":["../../src/client/utils/unregisterSW.ts"],"sourcesContent":["/* eslint-disable no-console */\n/**\n * Call `unregister()` inside current active worker\n *\n * @returns `true` if unregister success, `false` if unregister failed\n *\n * 在当前激活的 Service Worker 中调用 `unregister()`\n *\n * @returns `true` 表示注销成功,`false` 表示注销失败\n */\nexport const unregisterSW = (): Promise<boolean> =>\n navigator.serviceWorker\n .getRegistration()\n .then((registration) => {\n if (registration)\n return registration.unregister().then((found) => {\n if (found) console.log('[PWA] Current service worker unregistered')\n\n return found\n })\n\n return false\n })\n .catch((error: unknown) => {\n console.log(\n '[PWA] Unregister current service worker failed with error:',\n error,\n )\n\n return false\n })\n"],"names":["unregisterSW","registration","found","error"],"mappings":"uhBAUO,MAAMA,EAAe,IAC1B,UAAU,cACP,gBAAgB,EAChB,KAAMC,GACDA,EACKA,EAAa,WAAW,EAAE,KAAMC,IACjCA,GAAO,QAAQ,IAAI,2CAA2C,EAE3DA,EACR,EAEI,EACR,EACA,MAAOC,IACN,QAAQ,IACN,6DACAA,CACF,EAEO,GACR"}
@@ -1 +1 @@
1
- @keyframes rotate{0%{transform:rotate(0deg)}50%{transform:rotate(360deg)}100%{transform:rotate(360deg)}}.popup-enter-active,.popup-leave-active{transition:opacity .3s,transform .3s}.popup-enter-from,.popup-leave-to{opacity:0;transform:translate(0, 50%) scale(0.5)}.sw-hint-popup,.sw-update-popup{position:fixed;inset-inline-end:1rem;bottom:1rem;z-index:var(--pwa-z-index);padding:.5rem .75rem;border-width:0;border-radius:.5rem;background:var(--pwa-c-bg);color:var(--pwa-c-text);box-shadow:0 2px 12px 0 var(--pwa-c-shadow);font-size:1rem;line-height:1.5;cursor:pointer}@media print{.sw-hint-popup,.sw-update-popup{display:none}}.sw-hint-popup .icon-wrapper,.sw-update-popup .icon-wrapper{display:inline-block;vertical-align:middle;width:1.5rem;height:1.5rem;margin-inline-start:.4rem;border-radius:.75rem;background:var(--pwa-c-accent-bg)}.sw-hint-popup .icon-wrapper:hover,.sw-update-popup .icon-wrapper:hover{background:var(--pwa-c-accent-hover)}.sw-hint-popup .icon-wrapper svg,.sw-update-popup .icon-wrapper svg{width:1.2rem;height:1.2rem;margin:.15rem;color:var(--pwa-c-accent-text);animation:rotate 3s ease infinite}/*# sourceMappingURL=popup.css.map */
1
+ @keyframes rotate{0%{transform:rotate(0deg)}50%{transform:rotate(360deg)}100%{transform:rotate(360deg)}}.sw-hint-popup,.sw-update-popup{position:fixed;inset-inline-end:1rem;bottom:1rem;z-index:var(--pwa-z-index);padding:.5rem .75rem;border-width:0;border-radius:.5rem;background:var(--pwa-c-bg);color:var(--pwa-c-text);box-shadow:0 2px 12px 0 var(--pwa-c-shadow);font-size:1rem;line-height:1.5;cursor:pointer}@media print{.sw-hint-popup,.sw-update-popup{display:none}}.sw-hint-popup .icon-wrapper,.sw-update-popup .icon-wrapper{display:inline-block;vertical-align:middle;width:1.5rem;height:1.5rem;margin-inline-start:.4rem;border-radius:.75rem;background:var(--pwa-c-accent-bg)}.sw-hint-popup .icon-wrapper:hover,.sw-update-popup .icon-wrapper:hover{background:var(--pwa-c-accent-hover)}.sw-hint-popup .icon-wrapper svg,.sw-update-popup .icon-wrapper svg{width:1.2rem;height:1.2rem;margin:.15rem;color:var(--pwa-c-accent-text);animation:rotate 3s ease infinite}/*# sourceMappingURL=popup.css.map */
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../../src/client/styles/popup.scss"],"names":[],"mappings":"AAAA,kBACE,GACE,uBAGF,IACE,yBAGF,KACE,0BAIJ,wCAEE,WACE,0BAIJ,kCAEE,UACA,uCAGF,gCAEE,eACA,sBACA,YACA,2BAEA,qBACA,eACA,oBAEA,2BACA,wBACA,4CAEA,eACA,gBAEA,eAEA,aApBF,gCAqBI,cAGF,4DACE,qBACA,sBAEA,aACA,cACA,0BACA,qBAEA,kCAEA,wEACE,qCAGF,oEACE,aACA,cACA,cAEA,+BAEA","file":"popup.css","sourcesContent":["@keyframes rotate {\n 0% {\n transform: rotate(0deg);\n }\n\n 50% {\n transform: rotate(360deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.popup-enter-active,\n.popup-leave-active {\n transition:\n opacity 0.3s,\n transform 0.3s;\n}\n\n.popup-enter-from,\n.popup-leave-to {\n opacity: 0;\n transform: translate(0, 50%) scale(0.5);\n}\n\n.sw-hint-popup,\n.sw-update-popup {\n position: fixed;\n inset-inline-end: 1rem;\n bottom: 1rem;\n z-index: var(--pwa-z-index);\n\n padding: 0.5rem 0.75rem;\n border-width: 0;\n border-radius: 0.5rem;\n\n background: var(--pwa-c-bg);\n color: var(--pwa-c-text);\n box-shadow: 0 2px 12px 0 var(--pwa-c-shadow);\n\n font-size: 1rem;\n line-height: 1.5;\n\n cursor: pointer;\n\n @media print {\n display: none;\n }\n\n .icon-wrapper {\n display: inline-block;\n vertical-align: middle;\n\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-start: 0.4rem;\n border-radius: 0.75rem;\n\n background: var(--pwa-c-accent-bg);\n\n &:hover {\n background: var(--pwa-c-accent-hover);\n }\n\n svg {\n width: 1.2rem;\n height: 1.2rem;\n margin: 0.15rem;\n\n color: var(--pwa-c-accent-text);\n\n animation: rotate 3s ease infinite;\n }\n }\n}\n"]}
1
+ {"version":3,"sourceRoot":"","sources":["../../../src/client/styles/popup.scss"],"names":[],"mappings":"AAAA,kBACE,GACE,uBAGF,IACE,yBAGF,KACE,0BAIJ,gCAEE,eACA,sBACA,YACA,2BAEA,qBACA,eACA,oBAEA,2BACA,wBACA,4CAEA,eACA,gBAEA,eAEA,aApBF,gCAqBI,cAGF,4DACE,qBACA,sBAEA,aACA,cACA,0BACA,qBAEA,kCAEA,wEACE,qCAGF,oEACE,aACA,cACA,cAEA,+BAEA","file":"popup.css","sourcesContent":["@keyframes rotate {\n 0% {\n transform: rotate(0deg);\n }\n\n 50% {\n transform: rotate(360deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.sw-hint-popup,\n.sw-update-popup {\n position: fixed;\n inset-inline-end: 1rem;\n bottom: 1rem;\n z-index: var(--pwa-z-index);\n\n padding: 0.5rem 0.75rem;\n border-width: 0;\n border-radius: 0.5rem;\n\n background: var(--pwa-c-bg);\n color: var(--pwa-c-text);\n box-shadow: 0 2px 12px 0 var(--pwa-c-shadow);\n\n font-size: 1rem;\n line-height: 1.5;\n\n cursor: pointer;\n\n @media print {\n display: none;\n }\n\n .icon-wrapper {\n display: inline-block;\n vertical-align: middle;\n\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-start: 0.4rem;\n border-radius: 0.75rem;\n\n background: var(--pwa-c-accent-bg);\n\n &:hover {\n background: var(--pwa-c-accent-hover);\n }\n\n svg {\n width: 1.2rem;\n height: 1.2rem;\n margin: 0.15rem;\n\n color: var(--pwa-c-accent-text);\n\n animation: rotate 3s ease infinite;\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vuepress/plugin-pwa",
3
- "version": "2.0.0-rc.90",
3
+ "version": "2.0.0-rc.92",
4
4
  "description": "VuePress plugin - progressive web application",
5
5
  "keywords": [
6
6
  "vuepress-plugin",
@@ -36,7 +36,7 @@
36
36
  "lib"
37
37
  ],
38
38
  "dependencies": {
39
- "@vuepress/helper": "2.0.0-rc.90",
39
+ "@vuepress/helper": "2.0.0-rc.92",
40
40
  "@vueuse/core": "^13.0.0",
41
41
  "mitt": "^3.0.1",
42
42
  "register-service-worker": "^1.7.2",
@@ -50,7 +50,7 @@
50
50
  "access": "public"
51
51
  },
52
52
  "devDependencies": {
53
- "rollup": "^4.36.0"
53
+ "rollup": "^4.39.0"
54
54
  },
55
- "gitHead": "3e99edabb613d73cee8bc02d600809a514837306"
55
+ "gitHead": "01f3e805d0cd6ae4220fcc9daad20744d82523e2"
56
56
  }
@@ -1,2 +0,0 @@
1
- import{useLocaleConfig as r}from"@vuepress/helper/client";import{defineComponent as i,shallowRef as c,computed as d,h as t,onMounted as m,Transition as v}from"vue";import{U as f}from"./icons-DQk7h1-3.js";import"./styles/popup.css";import{u as w}from"./usePwaEvent-CUDY9qle.js";const u=a=>{const o=a.waiting;if(!o)return;const s=new MessageChannel;o.postMessage({type:"SKIP_WAITING"},[s.port2])},P=i({name:"PwaReadyPopup",props:{locales:{type:Object,required:!0}},slots:Object,setup(a,{slots:o}){const s=r(a.locales),e=c(),p=d(()=>!!e.value),n=()=>{e.value&&(u(e.value),e.value=void 0)};return m(()=>{w().on("updated",l=>{e.value=l})}),()=>t(v,{name:"popup"},()=>o.default?.({isReady:p.value,reload:n})??(p.value?t("button",{type:"button",class:"sw-update-popup",tabindex:0,onClick:()=>{n()}},[s.value.update,t("span",{class:"icon-wrapper"},t(f))]):null))}});export{P,u as s};
2
- //# sourceMappingURL=PwaReadyPopup-B5B5_0YO.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PwaReadyPopup-B5B5_0YO.js","sources":["../../src/client/utils/skipWaiting.ts","../../src/client/components/PwaReadyPopup.ts"],"sourcesContent":["/**\n * Call `skipWaiting()` inside current waiting worker\n *\n * 在当前等待中的 Service Worker 中调用 `skipWaiting()`\n */\nexport const skipWaiting = (registration: ServiceWorkerRegistration): void => {\n // Get the waiting worker\n const worker = registration.waiting\n\n // If there is no waiting worker, return directly\n if (!worker) return\n\n // Post SKIP_WAITING message to the waiting worker\n const channel = new MessageChannel()\n\n worker.postMessage({ type: 'SKIP_WAITING' }, [channel.port2])\n}\n","import { useLocaleConfig } from '@vuepress/helper/client'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport {\n Transition,\n computed,\n defineComponent,\n h,\n onMounted,\n shallowRef,\n} from 'vue'\nimport { usePwaEvent } from '../composables/index.js'\nimport type { PwaPluginLocaleConfig } from '../types.js'\nimport { skipWaiting } from '../utils/index.js'\nimport { UpdateIcon } from './icons.js'\n\nimport '../styles/popup.css'\n\nexport const PwaReadyPopup = defineComponent({\n name: 'PwaReadyPopup',\n\n props: {\n /** locale data */\n locales: {\n type: Object as PropType<PwaPluginLocaleConfig>,\n required: true,\n },\n },\n\n slots: Object as SlotsType<{\n default?: (props: {\n isReady: boolean\n reload: () => void\n }) => VNode | VNode[] | null\n }>,\n\n setup(props, { slots }) {\n const locale = useLocaleConfig(props.locales)\n const registration = shallowRef<ServiceWorkerRegistration>()\n\n const isReady = computed(() => Boolean(registration.value))\n\n const reload = (): void => {\n if (registration.value) {\n skipWaiting(registration.value)\n registration.value = undefined\n }\n }\n\n onMounted(() => {\n const event = usePwaEvent()\n\n event.on('updated', (reg) => {\n registration.value = reg\n })\n })\n\n return (): VNode =>\n h(\n Transition,\n { name: 'popup' },\n () =>\n slots.default?.({\n isReady: isReady.value,\n reload,\n }) ??\n (isReady.value\n ? h(\n 'button',\n {\n type: 'button',\n class: 'sw-update-popup',\n tabindex: 0,\n onClick: () => {\n reload()\n },\n },\n [\n locale.value.update,\n h('span', { class: 'icon-wrapper' }, h(UpdateIcon)),\n ],\n )\n : null),\n )\n },\n})\n"],"names":["skipWaiting","registration","worker","channel","PwaReadyPopup","defineComponent","props","slots","locale","useLocaleConfig","shallowRef","isReady","computed","reload","onMounted","usePwaEvent","reg","h","Transition","UpdateIcon"],"mappings":"qRAKa,MAAAA,EAAeC,GAAkD,CAE5E,MAAMC,EAASD,EAAa,QAG5B,GAAI,CAACC,EAAQ,OAGb,MAAMC,EAAU,IAAI,eAEpBD,EAAO,YAAY,CAAE,KAAM,cAAe,EAAG,CAACC,EAAQ,KAAK,CAAC,CAC9D,ECCaC,EAAgBC,EAAgB,CAC3C,KAAM,gBAEN,MAAO,CAEL,QAAS,CACP,KAAM,OACN,SAAU,EACZ,CACF,EAEA,MAAO,OAOP,MAAMC,EAAO,CAAE,MAAAC,CAAM,EAAG,CACtB,MAAMC,EAASC,EAAgBH,EAAM,OAAO,EACtCL,EAAeS,EAAsC,EAErDC,EAAUC,EAAS,IAAM,CAAQX,CAAAA,EAAa,KAAM,EAEpDY,EAAS,IAAY,CACrBZ,EAAa,QACfD,EAAYC,EAAa,KAAK,EAC9BA,EAAa,MAAQ,OAEzB,EAEA,OAAAa,EAAU,IAAM,CACAC,EAAAA,EAER,GAAG,UAAYC,GAAQ,CAC3Bf,EAAa,MAAQe,CACvB,CAAC,CACH,CAAC,EAEM,IACLC,EACEC,EACA,CAAE,KAAM,OAAQ,EAChB,IACEX,EAAM,UAAU,CACd,QAASI,EAAQ,MACjB,OAAAE,CACF,CAAC,IACAF,EAAQ,MACLM,EACE,SACA,CACE,KAAM,SACN,MAAO,kBACP,SAAU,EACV,QAAS,IAAM,CACbJ,EACF,CAAA,CACF,EACA,CACEL,EAAO,MAAM,OACbS,EAAE,OAAQ,CAAE,MAAO,cAAe,EAAGA,EAAEE,CAAU,CAAC,CACpD,CACF,EACA,KACR,CACJ,CACF,CAAC"}