@topwrite/reader 1.0.32 → 1.0.33-alpha.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/dist/107-aac715.js +2 -0
- package/dist/107-aac715.js.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.js +31 -24
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/types/components/article.d.ts +4 -4
- package/types/components/html/heading.d.ts +6 -6
- package/types/components/menu.d.ts +14 -0
- package/types/components/powered-by.d.ts +1 -1
- package/types/lib/use-in-preview.d.ts +0 -3
- package/types/lib/use-window-scroll.d.ts +2 -0
- package/types/typings.d.ts +9 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_topwrite_reader=self.webpackChunk_topwrite_reader||[]).push([[107],{8107:(e,t,n)=>{n.r(t),n.d(t,{default:()=>E});var s={};n.r(s),n.d(s,{book:()=>c,page:()=>u,search:()=>p});var i=n(4246),r=n(7363),a=n(131),o=n(4153);class l extends a.Hn{}const c=new l;var d=n(4942);class h extends a.Hn{constructor(){super(...arguments),(0,d.Z)(this,"initialState",{loading:!1,request:a.WY.create(),config:{}})}subscription(e){let{fetch:t}=e,n=o.m8.location;o.m8.listen((async e=>{let{location:s}=e;n.pathname!==s.pathname&&(t(s.pathname),requestAnimationFrame((()=>{window.scrollTo(0,0)}))),n=s}))}async*fetch(e){yield this.setState((e=>{e.loading=!0}));const{request:t,config:n}=yield*this.getState("page");try{const s=decodeURI(e);let{data:i}=await t.get(s,n);"string"==typeof i&&(i=(0,a.He)(i));const{file:r,lfs:o}=i;yield this.setState((e=>{e.file=new a.$B(r),e.lfs=o}))}catch(e){yield this.setState((t=>{t.error=e}))}finally{yield this.setState((e=>{e.loading=!1}))}}*intercept(e){const{request:t}=yield*this.getState("page");e(t.interceptors)}*updateConfig(e){yield this.setState((t=>{e(t.config)}))}}const u=new h;class f extends a.Hn{constructor(){super(...arguments),(0,d.Z)(this,"initialState",{status:"idle",results:[],query:""})}async*fetch(e){if(e=e.trim()){yield this.setState((t=>{t.query=e,t.status="loading"}));let{handler:t}=yield*this.getState("search");if(!t){const{summary:n}=yield*this.getState("book");t=()=>{const t=[];return n.getArticle((n=>{const s=n.getPath();return n.title.includes(e)&&s&&t.push({title:n.title,path:s}),!1})),t}}try{const n=await t(e);yield this.setState((e=>{e.results=n,e.status="idle"}))}catch{yield this.setState((e=>{e.results=[],e.status="error"}))}}else yield this.setState((t=>{t.query=e,t.status="idle",t.results=[]}))}*setHandler(e){yield this.setState((t=>{t.handler=e}))}}const p=new f;var g,y,m=n(8891),w=n(168);function x(){return(0,i.jsx)(v,{children:(0,i.jsx)(S,{})})}const S=a.zo.div(g||(g=(0,w.Z)(["\n @keyframes spinner-border {\n to {\n transform: rotate(360deg)\n }\n }\n\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: -0.125em;\n border: 0.25em solid #3c60ff;\n border-right-color: transparent;\n border-radius: 50%;\n animation: 0.75s linear infinite spinner-border;\n"]))),v=a.zo.div(y||(y=(0,w.Z)(["\n position: fixed;\n top: 0;\n left: 0;\n height: 100vh;\n width: 100vw;\n display: flex;\n align-items: center;\n justify-content: center;\n"])));var b=n(8926),j=n(3784),k=n(1579),q=n(7092),C=n(2573);function Z(){const{summary:e}=(0,a.CQ)(),t=(0,j.Z)(),n=(0,q.Z)(),s=(0,r.useMemo)((()=>e.getArticle((e=>e.getPath()===n.path))),[e,n]);(0,r.useEffect)((()=>{window.dispatchEvent(new Event("bootstrapped"))}),[]);const o=(0,C.Z)();return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(a.ql,{children:[(0,i.jsx)("title",{children:"".concat(s?"".concat(s.title," - "):"").concat(t)}),(0,i.jsx)("link",{rel:"shortcut icon",href:o,type:"image/png"})]}),(0,i.jsxs)(k.Q3.Provider,{value:s,children:[(0,i.jsx)(a.cu,{role:"app"}),(0,i.jsx)(a.cu,{role:"page"})]})]})}async function H(e){return"en"===e?n.e(7).then(n.t.bind(n,2007,19)):n.e(267).then(n.t.bind(n,3267,19))}function E(){const[e,t]=(0,r.useState)();return(0,a.bd)((async()=>{try{const{location:e}=(0,o.fi)();let n=(0,a.He)();if(!n){n=(await a.WY.get(e.toString())).data}let{id:r,summary:l,file:c,config:d={},options:h={},lfs:u,pluginsCenter:f}=n;d=a.De.createFromObject(d),l=a.ER.create(l);const p=new a.fy(r,d,l),g={page:{config:{params:m.parse(e.search)},file:new a.$B(c),lfs:u},options:h},y=await(0,a.W3)("reader",p,s,g,H,f),w=(0,i.jsx)(y,{children:(0,i.jsx)(C.C,{children:(0,i.jsx)(b.eC,{children:(0,i.jsx)(Z,{})})})});t(w)}catch(n){var e;if(console.error(n),a.WY.isAxiosError(n))t((null===(e=n.response)||void 0===e?void 0:e.data)||n.message);else t(n.message)}}),[]),e||(0,i.jsx)(x,{})}}}]);
|
|
2
|
+
//# sourceMappingURL=107-aac715.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"107-aac715.js","mappings":"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","sources":["webpack://@topwrite/reader/./src/models/book.ts","webpack://@topwrite/reader/./src/models/page.ts","webpack://@topwrite/reader/./src/models/search.ts","webpack://@topwrite/reader/./src/components/page-loader.tsx","webpack://@topwrite/reader/./src/components/page.tsx","webpack://@topwrite/reader/./src/components/app.tsx"],"sourcesContent":["import { Book as BookType, Model } from '@topwrite/common';\r\n\r\nclass Book extends Model<BookType> {\r\n\r\n}\r\n\r\nexport const book = new Book();\r\n","import { ActionsType, File, getPayload, Model, request, RequestConfig, RequestInstance } from '@topwrite/common';\r\nimport { history } from '@/lib/history';\r\n\r\ninterface PageState {\r\n loading: boolean;\r\n error?: Error;\r\n request: RequestInstance;\r\n config: RequestConfig;\r\n file: File;\r\n lfs?: {\r\n url: string\r\n files: {\r\n [index: string]: string\r\n }\r\n };\r\n}\r\n\r\ntype Interceptors = RequestInstance['interceptors']\r\n\r\nclass Page extends Model<PageState> {\r\n\r\n initialState = {\r\n loading: false,\r\n request: request.create(),\r\n config: {},\r\n };\r\n\r\n subscription({ fetch }: ActionsType<Page>) {\r\n let prevLocation = history.location;\r\n history.listen(async ({ location }) => {\r\n if (prevLocation.pathname !== location.pathname) {\r\n fetch(location.pathname);\r\n requestAnimationFrame(() => {\r\n window.scrollTo(0, 0);\r\n });\r\n }\r\n prevLocation = location;\r\n });\r\n }\r\n\r\n async *fetch(pathname: string) {\r\n\r\n yield this.setState(state => {\r\n state.loading = true;\r\n });\r\n\r\n const { request, config } = yield *this.getState('page');\r\n\r\n try {\r\n const url = decodeURI(pathname);\r\n\r\n let { data } = await request.get(url, config);\r\n\r\n if (typeof data === 'string') {\r\n data = getPayload(data);\r\n }\r\n const { file, lfs } = data;\r\n\r\n yield this.setState(state => {\r\n state.file = new File(file);\r\n state.lfs = lfs;\r\n });\r\n } catch (e: any) {\r\n yield this.setState(state => {\r\n state.error = e;\r\n });\r\n } finally {\r\n yield this.setState(state => {\r\n state.loading = false;\r\n });\r\n }\r\n }\r\n\r\n *intercept(handler: (interceptors: Interceptors) => void) {\r\n const { request } = yield *this.getState('page');\r\n\r\n handler(request.interceptors);\r\n }\r\n\r\n *updateConfig(updater: (config: RequestConfig) => void) {\r\n yield this.setState(state => {\r\n updater(state.config);\r\n });\r\n }\r\n}\r\n\r\nexport const page = new Page();\r\n","import { Model } from '@topwrite/common';\r\n\r\nexport interface SearchResult {\r\n title: string\r\n path: string\r\n body?: string\r\n}\r\n\r\nexport type SearchHandler = (keyword: string) => Promise<SearchResult[]> | SearchResult[]\r\n\r\ninterface SearchState {\r\n handler?: SearchHandler\r\n results: SearchResult[]\r\n query: string\r\n status: 'loading' | 'error' | 'idle'\r\n}\r\n\r\nclass Search extends Model<SearchState> {\r\n\r\n initialState: SearchState = {\r\n status: 'idle',\r\n results: [],\r\n query: ''\r\n };\r\n\r\n async *fetch(query: string) {\r\n query = query.trim();\r\n\r\n if (query) {\r\n yield this.setState(state => {\r\n state.query = query;\r\n state.status = 'loading';\r\n });\r\n\r\n let { handler } = yield *this.getState('search');\r\n if (!handler) {\r\n const { summary } = yield *this.getState('book');\r\n\r\n handler = () => {\r\n const results: SearchResult[] = [];\r\n summary.getArticle((article) => {\r\n const path = article.getPath();\r\n if (article.title.includes(query) && path) {\r\n results.push({\r\n title: article.title,\r\n path: path\r\n });\r\n }\r\n return false;\r\n });\r\n return results;\r\n };\r\n }\r\n\r\n try {\r\n const results = await handler(query);\r\n\r\n yield this.setState(state => {\r\n state.results = results;\r\n state.status = 'idle';\r\n });\r\n } catch {\r\n yield this.setState(state => {\r\n state.results = [];\r\n state.status = 'error';\r\n });\r\n }\r\n } else {\r\n yield this.setState(state => {\r\n state.query = query;\r\n state.status = 'idle';\r\n state.results = [];\r\n });\r\n }\r\n\r\n }\r\n\r\n *setHandler(handler?: SearchHandler) {\r\n yield this.setState((state) => {\r\n state.handler = handler;\r\n });\r\n }\r\n\r\n}\r\n\r\nexport const search = new Search();\r\n","import { styled } from '@topwrite/common';\r\n\r\nexport default function PageLoader() {\r\n\r\n return <Container>\r\n <Spinner />\r\n </Container>;\r\n}\r\n\r\nconst Spinner = styled.div`\r\n @keyframes spinner-border {\r\n to {\r\n transform: rotate(360deg)\r\n }\r\n }\r\n\r\n display: inline-block;\r\n width: 2rem;\r\n height: 2rem;\r\n vertical-align: -0.125em;\r\n border: 0.25em solid #3c60ff;\r\n border-right-color: transparent;\r\n border-radius: 50%;\r\n animation: 0.75s linear infinite spinner-border;\r\n`;\r\n\r\nconst Container = styled.div`\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n height: 100vh;\r\n width: 100vw;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n`;\r\n","import { InjectedComponent, useBook, Helmet } from '@topwrite/common';\r\nimport useTitle from '@/lib/use-title';\r\nimport { useEffect, useMemo } from 'react';\r\nimport { ArticleContext } from '@/lib/use-article';\r\nimport useFile from '@/lib/use-file';\r\nimport useLogo from '@/lib/use-logo';\r\n\r\nexport default function Page() {\r\n const { summary } = useBook();\r\n const title = useTitle();\r\n const file = useFile();\r\n\r\n const article = useMemo(() => {\r\n return summary.getArticle(article => article.getPath() === file.path);\r\n }, [summary, file]);\r\n\r\n useEffect(() => {\r\n window.dispatchEvent(new Event('bootstrapped'));\r\n }, []);\r\n\r\n const logo = useLogo();\r\n\r\n return <>\r\n <Helmet>\r\n <title>{`${article ? `${article.title} - ` : ''}${title}`}</title>\r\n <link rel='shortcut icon' href={logo} type='image/png' />\r\n </Helmet>\r\n <ArticleContext.Provider value={article}>\r\n {/* todo 废弃的app */}\r\n <InjectedComponent role='app' />\r\n <InjectedComponent role='page' />\r\n </ArticleContext.Provider>\r\n </>;\r\n}\r\n","import { ReactElement, useState } from 'react';\r\nimport { Book, Config, createApplication, File, getPayload, request, Summary, useAsyncEffect } from '@topwrite/common';\r\nimport { createHistory } from '@/lib/history';\r\nimport * as models from '@/models';\r\nimport queryString from 'query-string';\r\nimport PageLoader from '@/components/page-loader';\r\nimport { CssProvider } from '@/lib/use-css';\r\nimport Page from '@/components/page';\r\nimport { LogoProvider } from '@/lib/use-logo';\r\n\r\nasync function loadLocaleData(locale: string) {\r\n switch (locale) {\r\n case 'en':\r\n return import('../lang/en.json');\r\n default:\r\n return import('../lang/zh-CN.json');\r\n }\r\n}\r\n\r\nexport default function App() {\r\n const [app, setApp] = useState<ReactElement>();\r\n\r\n useAsyncEffect(async () => {\r\n\r\n try {\r\n const { location } = createHistory();\r\n\r\n let payload = getPayload();\r\n\r\n if (!payload) {\r\n //调试时远程获取\r\n const response = await request.get(location.toString());\r\n payload = response.data;\r\n }\r\n\r\n let { id, summary, file, config = {}, options = {}, lfs, pluginsCenter } = payload;\r\n\r\n config = Config.createFromObject(config);\r\n\r\n summary = Summary.create(summary);\r\n\r\n const book = new Book(id, config, summary);\r\n\r\n const initialState = {\r\n page: {\r\n config: {\r\n params: queryString.parse(location.search)\r\n },\r\n file: new File(file),\r\n lfs,\r\n },\r\n options\r\n };\r\n\r\n const Application = await createApplication('reader', book, models, initialState, loadLocaleData, pluginsCenter);\r\n\r\n const app = <Application>\r\n <LogoProvider>\r\n <CssProvider>\r\n <Page />\r\n </CssProvider>\r\n </LogoProvider>\r\n </Application>;\r\n\r\n setApp(app);\r\n } catch (e: any) {\r\n console.error(e);\r\n if (request.isAxiosError(e)) {\r\n setApp(e.response?.data || e.message);\r\n } else {\r\n setApp(e.message);\r\n }\r\n }\r\n }, []);\r\n\r\n if (app) {\r\n return app;\r\n }\r\n return <PageLoader />;\r\n}\r\n"],"names":["Book","book","Page","loading","request","config","subscription","fetch","prevLocation","async","location","pathname","requestAnimationFrame","window","scrollTo","this","setState","state","getState","url","decodeURI","data","get","file","lfs","e","error","handler","interceptors","updater","page","Search","status","results","query","trim","summary","getArticle","article","path","getPath","title","includes","push","search","PageLoader","Container","Spinner","useMemo","useEffect","dispatchEvent","Event","logo","rel","href","type","value","role","loadLocaleData","locale","App","app","setApp","useState","payload","toString","id","options","pluginsCenter","initialState","params","Application","console","response","message"],"sourceRoot":""}
|
package/dist/index.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.rc-tooltip.rc-tooltip-zoom-appear,.rc-tooltip.rc-tooltip-zoom-enter{opacity:0}.rc-tooltip.rc-tooltip-zoom-enter,.rc-tooltip.rc-tooltip-zoom-leave{display:block}.rc-tooltip-zoom-appear,.rc-tooltip-zoom-enter{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused;-webkit-animation-timing-function:cubic-bezier(.18,.89,.32,1.28);animation-timing-function:cubic-bezier(.18,.89,.32,1.28);opacity:0}.rc-tooltip-zoom-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused;-webkit-animation-timing-function:cubic-bezier(.6,-.3,.74,.05);animation-timing-function:cubic-bezier(.6,-.3,.74,.05)}.rc-tooltip-zoom-appear.rc-tooltip-zoom-appear-active,.rc-tooltip-zoom-enter.rc-tooltip-zoom-enter-active{-webkit-animation-name:rcToolTipZoomIn;animation-name:rcToolTipZoomIn;-webkit-animation-play-state:running;animation-play-state:running}.rc-tooltip-zoom-leave.rc-tooltip-zoom-leave-active{-webkit-animation-name:rcToolTipZoomOut;animation-name:rcToolTipZoomOut;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes rcToolTipZoomIn{0%{opacity:0;transform:scale(0);transform-origin:50% 50%}to{opacity:1;transform:scale(1);transform-origin:50% 50%}}@keyframes rcToolTipZoomIn{0%{opacity:0;transform:scale(0);transform-origin:50% 50%}to{opacity:1;transform:scale(1);transform-origin:50% 50%}}@-webkit-keyframes rcToolTipZoomOut{0%{opacity:1;transform:scale(1);transform-origin:50% 50%}to{opacity:0;transform:scale(0);transform-origin:50% 50%}}@keyframes rcToolTipZoomOut{0%{opacity:1;transform:scale(1);transform-origin:50% 50%}to{opacity:0;transform:scale(0);transform-origin:50% 50%}}.rc-tooltip{display:block;font-size:12px;line-height:1.5;opacity:.9;position:absolute;visibility:visible;z-index:1070}.rc-tooltip-hidden{display:none}.rc-tooltip-placement-top,.rc-tooltip-placement-topLeft,.rc-tooltip-placement-topRight{padding:5px 0 9px}.rc-tooltip-placement-right,.rc-tooltip-placement-rightBottom,.rc-tooltip-placement-rightTop{padding:0 5px 0 9px}.rc-tooltip-placement-bottom,.rc-tooltip-placement-bottomLeft,.rc-tooltip-placement-bottomRight{padding:9px 0 5px}.rc-tooltip-placement-left,.rc-tooltip-placement-leftBottom,.rc-tooltip-placement-leftTop{padding:0 9px 0 5px}.rc-tooltip-inner{background-color:#373737;border-radius:6px;box-shadow:0 0 4px rgba(0,0,0,.17);color:#fff;min-height:34px;padding:8px 10px;text-align:left;text-decoration:none}.rc-tooltip-arrow{border-color:transparent;border-style:solid;height:0;position:absolute;width:0}.rc-tooltip-placement-top .rc-tooltip-arrow,.rc-tooltip-placement-topLeft .rc-tooltip-arrow,.rc-tooltip-placement-topRight .rc-tooltip-arrow{border-top-color:#373737;border-width:5px 5px 0;bottom:4px;margin-left:-5px}.rc-tooltip-placement-top .rc-tooltip-arrow{left:50%}.rc-tooltip-placement-topLeft .rc-tooltip-arrow{left:15%}.rc-tooltip-placement-topRight .rc-tooltip-arrow{right:15%}.rc-tooltip-placement-right .rc-tooltip-arrow,.rc-tooltip-placement-rightBottom .rc-tooltip-arrow,.rc-tooltip-placement-rightTop .rc-tooltip-arrow{border-right-color:#373737;border-width:5px 5px 5px 0;left:4px;margin-top:-5px}.rc-tooltip-placement-right .rc-tooltip-arrow{top:50%}.rc-tooltip-placement-rightTop .rc-tooltip-arrow{margin-top:0;top:15%}.rc-tooltip-placement-rightBottom .rc-tooltip-arrow{bottom:15%}.rc-tooltip-placement-left .rc-tooltip-arrow,.rc-tooltip-placement-leftBottom .rc-tooltip-arrow,.rc-tooltip-placement-leftTop .rc-tooltip-arrow{border-left-color:#373737;border-width:5px 0 5px 5px;margin-top:-5px;right:4px}.rc-tooltip-placement-left .rc-tooltip-arrow{top:50%}.rc-tooltip-placement-leftTop .rc-tooltip-arrow{margin-top:0;top:15%}.rc-tooltip-placement-leftBottom .rc-tooltip-arrow{bottom:15%}.rc-tooltip-placement-bottom .rc-tooltip-arrow,.rc-tooltip-placement-bottomLeft .rc-tooltip-arrow,.rc-tooltip-placement-bottomRight .rc-tooltip-arrow{border-bottom-color:#373737;border-width:0 5px 5px;margin-left:-5px;top:4px}.rc-tooltip-placement-bottom .rc-tooltip-arrow{left:50%}.rc-tooltip-placement-bottomLeft .rc-tooltip-arrow{left:15%}.rc-tooltip-placement-bottomRight .rc-tooltip-arrow{right:15%}
|