@inpageedit/core 0.5.2 → 0.5.4
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 +2 -2
- package/dist/Preferences-Bg3J5Ur9.js.map +1 -1
- package/dist/constants/endpoints.d.ts +2 -5
- package/dist/decorators/Preferences.d.ts +1 -1
- package/dist/{index-DXvJqlhL.js → index-BSjnoNn2.js} +3 -3
- package/dist/index-BSjnoNn2.js.map +1 -0
- package/dist/{index-BwVAO_o4.js → index-BedbUMp8.js} +6 -6
- package/dist/index-BedbUMp8.js.map +1 -0
- package/dist/{index-CIzmjtBz.js → index-DNQjqBV-.js} +1211 -1077
- package/dist/index-DNQjqBV-.js.map +1 -0
- package/dist/{index-B0QzYk-q.js → index-DtOC8Ck-.js} +1258 -1297
- package/dist/{index-B0QzYk-q.js.map → index-DtOC8Ck-.js.map} +1 -1
- package/dist/{index-3FdvKxaN.js → index-UyiZ7umI.js} +65 -42
- package/dist/index-UyiZ7umI.js.map +1 -0
- package/dist/{index-6bp2nmez.js → index-e7eyr1FL.js} +2 -2
- package/dist/{index-6bp2nmez.js.map → index-e7eyr1FL.js.map} +1 -1
- package/dist/{index-D1plOuGc.js → index-i-Uf0vuA.js} +63 -63
- package/dist/{index-D1plOuGc.js.map → index-i-Uf0vuA.js.map} +1 -1
- package/dist/{index-DlE7PWxs.js → index-rMDuLpcz.js} +170 -140
- package/dist/index-rMDuLpcz.js.map +1 -0
- package/dist/index-xJ2bdsOD.js +128 -0
- package/dist/index-xJ2bdsOD.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/models/WikiPage/types/PageInfo.d.ts +2 -0
- package/dist/plugins/in-article-links/index.d.ts +6 -8
- package/dist/plugins/preferences/index.d.ts +5 -4
- package/dist/plugins/quick-edit/index.d.ts +8 -4
- package/dist/plugins/toolbox/index.d.ts +12 -2
- package/dist/services/ModalService/IPEModal.d.ts +4 -4
- package/dist/services/ModalService/index.d.ts +6 -14
- package/dist/services/SiteMetadataService.d.ts +3 -2
- package/dist/style.css +1 -1
- package/dist/utils/computeable.d.ts +2 -0
- package/dist/utils/makeCallable.d.ts +3 -0
- package/lib/index.umd.js +28 -28
- package/lib/index.umd.js.map +1 -1
- package/lib/style.css +1 -1
- package/package.json +8 -11
- package/dist/index-3FdvKxaN.js.map +0 -1
- package/dist/index-BwVAO_o4.js.map +0 -1
- package/dist/index-CIzmjtBz.js.map +0 -1
- package/dist/index-DXvJqlhL.js.map +0 -1
- package/dist/index-DlE7PWxs.js.map +0 -1
- package/dist/index-DnpXoEP3.js +0 -142
- package/dist/index-DnpXoEP3.js.map +0 -1
- package/dist/sleep-DpyIipK-.js +0 -5
- package/dist/sleep-DpyIipK-.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-rMDuLpcz.js","sources":["../src/plugins/quick-edit/PluginQuickEditInArticleLinks.tsx","../src/utils/makeCallable.ts","../src/utils/noop.ts","../src/utils/sleep.ts","../src/plugins/quick-edit/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { QuickEditOptions } from '.'\n\n@Inject(['sitemeta', 'quickEdit'])\n@RegisterPreferences(\n Schema.object({\n redLinkEdit: Schema.boolean()\n .description('Show quick edit entry after red links')\n .default(true),\n }).description('In-article quick edit links'),\n {\n redLinkEdit: true,\n }\n)\nexport class PluginQuickEditInArticleLinks extends BasePlugin<{\n wikiBaseUrl: string\n wikiArticlePath: string\n wikiArticleBaseUrl: string\n wikiScriptBaseUrl: string\n linkClassName: string\n}> {\n constructor(ctx: InPageEdit) {\n const mwConfig = ctx.sitemeta.mwConfig\n const wikiArticlePath = mwConfig.wgArticlePath.replace('$1', '')\n const wikiBaseUrl = `${location.protocol}//${mwConfig.wgServer.split('//')[1]}`\n super(\n ctx,\n {\n wikiBaseUrl,\n wikiArticlePath,\n wikiArticleBaseUrl: `${wikiBaseUrl}${wikiArticlePath}`,\n wikiScriptBaseUrl: `${wikiBaseUrl}${mwConfig.wgScriptPath}`,\n linkClassName: 'ipe-quickEdit__in-article-link',\n },\n 'QuickEditInArticleLinks'\n )\n }\n\n protected async start() {\n mw.hook('wikipage.content').add(($content) => {\n const anchorList = $content.find<HTMLAnchorElement>('a[href]').toArray()\n anchorList.forEach((anchor) => {\n const info = this.checkEditAnchor(anchor)\n if (!info || anchor.dataset.ipeQuickEditLink) {\n return\n }\n\n const link = (\n <a\n href={`#/IPE/quickEdit/${info.title}`}\n className={this.config.linkClassName}\n style={{\n userSelect: 'none',\n marginLeft: '0.2em',\n verticalAlign: 'middle',\n }}\n onClick={(e) => {\n e.preventDefault()\n this.ctx.quickEdit.showModal(info)\n }}\n >\n <svg\n style=\"width: 1em; height: 1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-pencil-bolt\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4\" />\n <path d=\"M13.5 6.5l4 4\" />\n <path d=\"M19 16l-2 3h4l-2 3\" />\n </svg>\n </a>\n )\n\n anchor.insertAdjacentElement('afterend', link)\n anchor.dataset.ipeQuickEditLink = 'true'\n })\n })\n }\n\n stop() {\n document.querySelectorAll(`.${this.config.linkClassName}`).forEach((el) => el.remove())\n }\n\n checkEditAnchor(\n anchor: HTMLAnchorElement\n ): Pick<QuickEditOptions, 'title' | 'section' | 'revision' | 'createOnly'> | null {\n if (!(anchor instanceof HTMLAnchorElement)) {\n return null\n }\n\n const href = anchor.href || ''\n if (\n !href.startsWith(this.config.wikiArticleBaseUrl) &&\n !href.startsWith(this.config.wikiScriptBaseUrl)\n ) {\n return null\n }\n const hrefURL = new URL(href)\n const params = hrefURL.searchParams\n const action = params.get('action') || 'view'\n const title =\n params.get('title') ||\n decodeURI(hrefURL.pathname.substring(this.config.wikiArticlePath.length)) ||\n ''\n const section = params.get('section')?.replace(/^T-/, '') || undefined\n const revision = params.get('oldid')\n\n if (\n // 不合法的 title\n !title ||\n title.endsWith('.php') ||\n // 不是 edit 相关操作\n !['edit', 'editsource', 'editredlink', 'submit'].includes(action) ||\n // 暂时未兼容 undo\n params.get('undo') ||\n // 暂时未兼容 preload\n params.get('preload')\n ) {\n return null\n }\n\n let sectionNum: 'new' | number | undefined = undefined\n if (section === 'new') {\n sectionNum = 'new'\n } else if (section && /^\\d+$/.test(section)) {\n sectionNum = parseInt(section, 10)\n }\n\n return {\n title,\n section: sectionNum,\n revision: parseInt('' + revision, 10) || 0,\n createOnly: !!params.get('redlink'),\n }\n }\n}\n","export const CALLABLE_APPLY_SYMBOL = Symbol('@@apply')\nexport const CALLABLE_CTOR_SYMBOL = Symbol('@@ctor')\nexport function makeCallable<C extends object, M extends keyof C>(\n instance: C,\n method: M\n): C &\n ((\n ...args: C[M] extends (...a: infer P) => any ? P : never\n ) => C[M] extends (...a: any[]) => infer R ? R : never) {\n if (typeof instance !== 'object' || instance === null || Array.isArray(instance)) {\n throw new TypeError('instance is not an object')\n }\n\n const apply: any = (...args: any[]) => {\n const fn = (instance as any)[method]\n if (typeof fn !== 'function') {\n throw new TypeError(`Property \"${String(method)}\" is not a function`)\n }\n return fn.apply(instance, args)\n }\n apply[CALLABLE_APPLY_SYMBOL] = apply\n apply[CALLABLE_CTOR_SYMBOL] = instance\n\n const ctorName = (instance as any)?.constructor?.name\n if (ctorName) (apply as any)[Symbol.toStringTag] = ctorName\n\n const proxy = new Proxy(apply, {\n get(_, p, receiver) {\n if (p === 'prototype') return Reflect.get(apply, p, receiver)\n return Reflect.get(instance as any, p, instance)\n },\n set(_, p, v) {\n return Reflect.set(instance as any, p, v)\n },\n has(_, p) {\n return Reflect.has(instance as any, p)\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(instance as any, p)\n },\n ownKeys() {\n return Reflect.ownKeys(instance as any)\n },\n getOwnPropertyDescriptor(_, p) {\n return Object.getOwnPropertyDescriptor(instance as any, p)\n },\n defineProperty(_, p, desc) {\n return Object.defineProperty(instance as any, p, desc)\n },\n })\n\n return proxy as unknown as any\n}\n","export const noop = () => {}\n","export const sleep = (ms: number = 0) =>\n new Promise((resolve) => setTimeout(resolve, ms))\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { WikiPage } from '@/models/WikiPage'\nimport { WatchlistAction } from '@/models/WikiPage/types/WatchlistAction'\nimport { PluginQuickEditInArticleLinks } from './PluginQuickEditInArticleLinks'\nimport { IPEModal } from '@/services/ModalService/IPEModal'\nimport { ReactNode } from 'jsx-dom'\nimport { makeCallable } from '@/utils/makeCallable.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickEdit: PluginQuickEdit & {\n (...args: Parameters<PluginQuickEdit['showModal']>): ReturnType<PluginQuickEdit['showModal']>\n }\n }\n interface Events {\n 'quick-edit/init-options'(payload: Omit<QuickEditInitPayload, 'modal' | 'wikiPage'>): void\n 'quick-edit/show-modal'(payload: Omit<QuickEditInitPayload, 'wikiPage'>): void\n 'quick-edit/wiki-page'(payload: QuickEditInitPayload): void\n 'quick-edit/edit-notice'(payload: QuickEditInitPayload & { editNotices: ReactNode[] }): void\n }\n}\n\nexport interface QuickEditOptions {\n title: string\n pageId: number\n revision: number\n /**\n * - `undefined` for full article edit\n * - `0` for the first section\n * - `\"new\"` for a new section\n */\n section: number | 'new' | undefined\n editMinor: boolean\n editSummary: string\n createOnly: boolean\n reloadAfterSave: boolean\n}\n\nexport interface QuickEditInitPayload {\n ctx: InPageEdit\n options: QuickEditOptions\n modal: IPEModal\n wikiPage: WikiPage\n}\n\nexport interface QuickEditSubmitPayload {\n wikiPage: WikiPage\n text?: string\n summary?: string\n section?: number | 'new' | undefined\n minor?: boolean\n createonly?: boolean\n watchlist?: WatchlistAction\n}\n\n@Inject(['api', 'wikiPage', 'modal', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n editSummary: Schema.string()\n .description('Default edit summary for quick edits')\n .default('[IPE-NEXT] Quick edit'),\n editMinor: Schema.boolean().description('Whether to mark the edit as minor').default(false),\n outSideClose: Schema.boolean().description('Whether to close the modal outside').default(true),\n watchList: Schema.union([\n Schema.const(WatchlistAction.preferences).description('Follow my preferences'),\n Schema.const(WatchlistAction.nochange).description('Keep the current watchlist status'),\n Schema.const(WatchlistAction.watch).description('Add the page to watchlist'),\n Schema.const(WatchlistAction.unwatch).description('Remove the page from watchlist'),\n ])\n .description('Watchlist options')\n .default(WatchlistAction.preferences),\n })\n .description('Quick edit options')\n .extra('category', 'edit')\n)\nexport class PluginQuickEdit extends BasePlugin {\n private readonly DEFAULT_OPTIONS: QuickEditOptions = {\n title: '',\n pageId: 0,\n revision: 0,\n section: undefined,\n editMinor: false,\n editSummary: '',\n createOnly: false,\n reloadAfterSave: true,\n }\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-edit')\n this.ctx.root.set('quickEdit', makeCallable(this, 'showModal'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n ctx.on('dispose', () => {\n this.removeToolbox(ctx)\n })\n })\n\n this.ctx.plugin(PluginQuickEditInArticleLinks)\n }\n\n async showModal(payload?: string | Partial<QuickEditOptions>) {\n if (typeof payload === 'undefined') {\n payload = {}\n } else if (typeof payload === 'string') {\n payload = {\n title: payload,\n } as Partial<QuickEditOptions>\n }\n\n // @ts-expect-error legacy `page` option\n if (payload?.page) {\n // @ts-expect-error\n payload.title = payload.page\n // @ts-expect-error\n delete payload.page\n }\n\n if (!payload.title && !payload.pageId && !payload.revision) {\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\n payload = {\n ...payload,\n title: mw.config.get('wgPageName'),\n pageId: mw.config.get('wgArticleId'),\n revision: mw.config.get('wgRevisionId'),\n }\n }\n\n const outSideClose = (await this.ctx.preferences.get<boolean>('outSideClose'))!\n const watchList = (await this.ctx.preferences.get<WatchlistAction>('watchList'))!\n const editSummary =\n typeof payload.editSummary === 'string'\n ? payload.editSummary\n : (await this.ctx.preferences.get<string>('editSummary'))!\n const editMinor =\n typeof payload.editMinor === 'boolean'\n ? payload.editMinor\n : (await this.ctx.preferences.get<boolean>('editMinor'))!\n\n const options: QuickEditOptions = {\n ...this.DEFAULT_OPTIONS,\n editSummary,\n editMinor,\n ...payload,\n }\n if (!options.editSummary) {\n options.editSummary = (await this.ctx.preferences.get<string>('editSummary')) || ''\n }\n if (!options) this.ctx.emit('quick-edit/init-options', { ctx: this.ctx, options })\n\n const modal = this.ctx.modal\n .createObject({\n className: 'ipe-quickEdit',\n sizeClass: 'large',\n // backdrop: false,\n // draggable: true,\n center: false,\n outSideClose,\n })\n .init()\n modal.setTitle(\n (\n <>\n Loading: <u>{options.title}</u>\n </>\n ) as HTMLElement\n )\n modal.setContent(\n (\n <section\n className=\"ipe-quickEdit-loading\"\n style={{\n height: '70vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <ProgressBar />\n </section>\n ) as HTMLElement\n )\n modal.addButton({\n side: 'right',\n type: 'button',\n className: 'is-danger is-ghost',\n label: 'Cancel',\n method() {\n modal.close()\n },\n })\n modal.show()\n this.ctx.emit('quick-edit/show-modal', { ctx: this.ctx, modal, options })\n\n let wikiPage: WikiPage\n try {\n wikiPage = await this.getWikiPageFromPayload(options)\n if (wikiPage.pageInfo.special) {\n throw new Error('Special page is not editable')\n }\n } catch (e) {\n modal.off(modal.Event.Close)\n modal.close()\n this.ctx.modal.notify('error', {\n content: e instanceof Error ? e.message : String(e),\n })\n return\n }\n modal.setTitle(\n (\n <>\n Quick {wikiPage.pageInfo.pageid === 0 ? 'Create' : 'Edit'}:{' '}\n <u>{wikiPage.pageInfo.title}</u>\n </>\n ) as HTMLElement\n )\n\n const editNotices = [] as ReactNode[]\n // Page not exists\n if (wikiPage.pageInfo.pageid === 0) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"important\">\n <p>This page does not exist.</p>\n </MBox>\n )\n }\n // Edit based on old revision\n if (wikiPage.pageInfo.pageid && wikiPage.pageInfo.lastrevid !== wikiPage.revisions[0]?.revid) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"warning\">\n <p>You are editing a revision that is not the latest.</p>\n </MBox>\n )\n }\n this.ctx.emit('quick-edit/edit-notice', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n editNotices,\n })\n\n const editForm = (\n <form className=\"ipe-quickEdit__form\">\n <div className=\"ipe-quickEdit__notices\">{editNotices}</div>\n <div className=\"ipe-quickEdit__content\">\n <textarea className=\"ipe-quickEdit__textarea\" name=\"text\" id=\"wpTextbox1\">\n {wikiPage.revisions[0]?.content || ''}\n </textarea>\n </div>\n <div\n class=\"ipe-quickEdit__options\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n marginTop: '1rem',\n }}\n >\n <InputBox label=\"Summary\" id=\"summary\" name=\"summary\" value={options.editSummary} />\n <div className=\"ipe-input-box\">\n <label htmlFor=\"watchlist\" style={{ display: 'block' }}>\n Watchlist\n </label>\n <div style={{ display: 'flex', gap: '1rem' }}>\n {[\n WatchlistAction.preferences,\n WatchlistAction.nochange,\n WatchlistAction.watch,\n WatchlistAction.unwatch,\n ].map((action) => (\n <RadioBox\n key={action}\n name=\"watchlist\"\n value={action}\n inputProps={{ checked: watchList === action }}\n >\n {action}\n </RadioBox>\n ))}\n </div>\n </div>\n <div style={{ display: 'flex', gap: '1rem' }}>\n <CheckBox name=\"minor\" id=\"minor\" checked={options.editMinor}>\n Minor edit\n </CheckBox>\n <CheckBox name=\"reloadAfterSave\" id=\"reloadAfterSave\" checked={options.reloadAfterSave}>\n Reload after save\n </CheckBox>\n </div>\n </div>\n {/* Debug Info */}\n {import.meta.env.DEV && (\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\n <details>\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\n </details>\n </div>\n )}\n </form>\n ) as HTMLFormElement\n modal.setContent(editForm)\n // shamefully fix: make sure the submit button is always the first\n modal.addButton(\n {\n side: 'left',\n className: 'is-primary submit-btn',\n label: 'Submit',\n method: () => {\n const formData = new FormData(editForm)\n console.info(wikiPage, editForm, {\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n })\n modal.setLoadingState(true)\n this.handleSubmit({\n wikiPage,\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n section: options.section,\n createonly: wikiPage.pageid === 0,\n watchlist: watchList,\n })\n .then(async () => {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Submission Successful',\n content: 'Your changes have been saved.',\n })\n if (formData.get('reloadAfterSave')) {\n await sleep(500)\n location.reload()\n }\n })\n .catch((error) => {\n this.ctx.modal.notify('error', {\n title: 'Submission Error',\n content: error instanceof Error ? error.message : String(error),\n })\n modal.setLoadingState(false)\n })\n },\n },\n 0\n )\n modal.setOptions({\n beforeClose: () => {\n const oldStr = wikiPage.revisions[0]?.content || ''\n const newStr = editForm.querySelector('textarea')?.value || ''\n if (newStr === oldStr) {\n return true\n } else {\n this.ctx.modal.confirm(\n {\n className: 'is-primary',\n title: 'Unsaved Changes',\n content:\n 'All edit contents will be lost after closing the modal. Are you sure you want to close?',\n center: true,\n okBtn: {\n label: 'Give Up',\n className: 'is-danger is-ghost',\n },\n cancelBtn: {\n label: 'Continue Editing',\n className: 'is-primary is-ghost',\n },\n },\n (confirmed) => {\n if (confirmed) {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n }\n return true\n }\n )\n return false\n }\n },\n })\n this.ctx.emit('quick-edit/wiki-page', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n })\n\n const beforeUnload = (e: BeforeUnloadEvent) => {\n if (editForm.querySelector('textarea')?.value === wikiPage.revisions[0]?.content) {\n return true\n }\n e.preventDefault()\n return 'You have unsaved changes. Are you sure you want to leave?'\n }\n window.addEventListener('beforeunload', beforeUnload)\n modal.on(modal.Event.Close, () => {\n window.removeEventListener('beforeunload', beforeUnload)\n })\n }\n\n async handleSubmit(payload: QuickEditSubmitPayload) {\n const wikiPage = payload.wikiPage\n const summary = payload.summary || ''\n const text = payload.text || ''\n const minor = payload.minor\n const createonly = payload.createonly\n const watchlist = payload.watchlist\n const section = payload.section\n\n return wikiPage.edit(\n {\n summary,\n text,\n watchlist,\n section,\n },\n {\n minor,\n createonly,\n }\n )\n }\n\n async getWikiPageFromPayload(payload: Partial<QuickEditOptions>) {\n if (payload.revision) {\n return this.ctx.wikiPage.newFromRevision(payload.revision, payload.section)\n } else if (payload.pageId) {\n return this.ctx.wikiPage.newFromPageId(payload.pageId, payload.section)\n } else if (payload.title) {\n return this.ctx.wikiPage.newFromTitle(payload.title, false, payload.section)\n }\n throw new Error('Invalid payload')\n }\n\n private injectToolbox(ctx: InPageEdit) {\n ctx.toolbox.addButton({\n id: 'quick-edit',\n group: 'group1',\n index: 0,\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-edit\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1\" />\n <path d=\"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z\" />\n <path d=\"M16 5l3 3\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Edit this page quickly',\n onClick: () =>\n this.showModal({\n revision: mw.config.get('wgRevisionId'),\n }),\n })\n }\n\n protected removeToolbox(ctx: InPageEdit) {\n ctx.toolbox.removeButton('quick-edit')\n }\n}\n"],"names":["_PluginQuickEditInArticleLinks_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickEditInArticleLinks","BasePlugin","ctx","mwConfig","wikiArticlePath","wikiBaseUrl","$content","anchor","info","link","jsx","e","jsxs","el","href","hrefURL","params","action","title","section","revision","sectionNum","__decoratorStart","__decorateElement","__runInitializers","CALLABLE_APPLY_SYMBOL","CALLABLE_CTOR_SYMBOL","makeCallable","instance","method","apply","args","fn","ctorName","_","p","receiver","v","desc","noop","sleep","ms","resolve","_PluginQuickEdit_decorators","WatchlistAction","PluginQuickEdit","payload","outSideClose","watchList","editSummary","editMinor","options","modal","Fragment","ProgressBar","wikiPage","editNotices","MBox","editForm","InputBox","RadioBox","CheckBox","formData","error","oldStr","confirmed","beforeUnload","summary","text","minor","createonly","watchlist"],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { j as l } from "./index-CvhkVj_L.js";
|
|
2
|
+
import { b as D, a as L, S as m } from "./index-DNQjqBV-.js";
|
|
3
|
+
import { R as T } from "./Preferences-Bg3J5Ur9.js";
|
|
4
|
+
var C = Object.create, v = Object.defineProperty, E = Object.getOwnPropertyDescriptor, y = (e, t) => (t = Symbol[e]) ? t : Symbol.for("Symbol." + e), _ = (e) => {
|
|
5
|
+
throw TypeError(e);
|
|
6
|
+
}, q = (e, t, o) => t in e ? v(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o, $ = (e, t) => v(e, "name", { value: t, configurable: !0 }), z = (e) => [, , , C(e?.[y("metadata")] ?? null)], I = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], w = (e) => e !== void 0 && typeof e != "function" ? _("Function expected") : e, j = (e, t, o, n, r) => ({ kind: I[e], name: t, metadata: n, addInitializer: (i) => o._ ? _("Already initialized") : r.push(w(i || null)) }), A = (e, t) => q(t, y("metadata"), e[3]), M = (e, t, o, n) => {
|
|
7
|
+
for (var r = 0, i = e[t >> 1], a = i && i.length; r < a; r++) i[r].call(o);
|
|
8
|
+
return n;
|
|
9
|
+
}, O = (e, t, o, n, r, i) => {
|
|
10
|
+
var a, p, d, u = t & 7, s = !1, c = 0, g = e[c] || (e[c] = []), h = u && (r = r.prototype, u < 5 && (u > 3 || !s) && E(r, o));
|
|
11
|
+
$(r, o);
|
|
12
|
+
for (var b = n.length - 1; b >= 0; b--)
|
|
13
|
+
d = j(u, o, p = {}, e[3], g), a = (0, n[b])(r, d), p._ = 1, w(a) && (r = a);
|
|
14
|
+
return A(e, r), h && v(r, o, h), s ? u ^ 4 ? i : h : r;
|
|
15
|
+
}, S, f, P;
|
|
16
|
+
S = [T(
|
|
17
|
+
m.object({
|
|
18
|
+
toolboxAlwaysShow: m.boolean().description("Make the toolbox opened by default").default(!1)
|
|
19
|
+
}).description("Toolbox preferences")
|
|
20
|
+
), L(["preferences"])];
|
|
21
|
+
class x extends (P = D) {
|
|
22
|
+
constructor(t) {
|
|
23
|
+
super(t, "toolbox", !1), this.ctx = t, this.container = void 0;
|
|
24
|
+
}
|
|
25
|
+
async start() {
|
|
26
|
+
this.container = this.createToolbox(), this.ctx.preferences.get("toolboxAlwaysShow").then((t) => {
|
|
27
|
+
t && this.container.classList.add("is-persistent");
|
|
28
|
+
}), this.setupHoverLogic(), document.body.appendChild(this.container), this.updateButtonDelays();
|
|
29
|
+
}
|
|
30
|
+
stop() {
|
|
31
|
+
this.container?.remove();
|
|
32
|
+
}
|
|
33
|
+
setupHoverLogic() {
|
|
34
|
+
let t = null;
|
|
35
|
+
const o = () => this.container.classList.contains("is-persistent");
|
|
36
|
+
this.container.addEventListener("mouseenter", () => {
|
|
37
|
+
t && (clearTimeout(t), t = null), o() || this.container.classList.add("is-hovered");
|
|
38
|
+
}), this.container.addEventListener("mouseleave", () => {
|
|
39
|
+
o() || (t = window.setTimeout(() => {
|
|
40
|
+
this.container.classList.remove("is-hovered");
|
|
41
|
+
}, 150));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 计算按钮动画延迟
|
|
46
|
+
* @param index 按钮索引(从0开始)
|
|
47
|
+
* @param totalCount 总按钮数量
|
|
48
|
+
* @returns 延迟时间(秒)
|
|
49
|
+
*/
|
|
50
|
+
calculateButtonDelay(t, o) {
|
|
51
|
+
if (o <= 1) return 0;
|
|
52
|
+
const n = 0.15, r = t / (o - 1), i = n * Math.sqrt(r);
|
|
53
|
+
return Math.round(i * 1e3) / 1e3;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 更新按钮组的动画延迟
|
|
57
|
+
*/
|
|
58
|
+
updateButtonDelays() {
|
|
59
|
+
this.container.querySelectorAll(".btn-group").forEach((o) => {
|
|
60
|
+
const n = o.querySelectorAll(".btn-tip-group"), r = n.length;
|
|
61
|
+
n.forEach((i, a) => {
|
|
62
|
+
const p = this.calculateButtonDelay(a, r);
|
|
63
|
+
i.style.setProperty("--transition-delay", `${p}s`), i.style.setProperty("--max-transition-delay", "0.15s");
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
createToolbox() {
|
|
68
|
+
return /* @__PURE__ */ l("div", { id: "ipe-edit-toolbox", children: [
|
|
69
|
+
/* @__PURE__ */ l("ul", { className: "btn-group group1", style: { display: "flex", flexDirection: "column" } }),
|
|
70
|
+
/* @__PURE__ */ l("ul", { className: "btn-group group2", style: { display: "flex", flexDirection: "row" } }),
|
|
71
|
+
/* @__PURE__ */ l(
|
|
72
|
+
"button",
|
|
73
|
+
{
|
|
74
|
+
className: "ipe-toolbox-btn",
|
|
75
|
+
id: "toolbox-toggler",
|
|
76
|
+
onClick: () => {
|
|
77
|
+
const r = !this.container.classList.contains("is-persistent");
|
|
78
|
+
this.container.classList.toggle("is-persistent", r), this.ctx.preferences.set("toolboxAlwaysShow", r);
|
|
79
|
+
},
|
|
80
|
+
children: /* @__PURE__ */ l("svg", { xmlns: "http://www.w3.org/2000/svg", width: "448", height: "512", viewBox: "0 0 448 512", children: [
|
|
81
|
+
/* @__PURE__ */ l("rect", { width: "448", height: "512", fill: "none" }),
|
|
82
|
+
/* @__PURE__ */ l(
|
|
83
|
+
"path",
|
|
84
|
+
{
|
|
85
|
+
fill: "currentColor",
|
|
86
|
+
d: "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32"
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
] })
|
|
90
|
+
}
|
|
91
|
+
)
|
|
92
|
+
] });
|
|
93
|
+
}
|
|
94
|
+
normalizeButtonId(t) {
|
|
95
|
+
return t || (t = Math.random().toString(36).substring(2, 8)), `ipe-toolbox__${t.trim()}`.replace(/\s\.#/g, "-");
|
|
96
|
+
}
|
|
97
|
+
addButton(t) {
|
|
98
|
+
let { id: o, group: n, icon: r, tooltip: i, buttonProps: a, onClick: p, index: d } = t;
|
|
99
|
+
o = this.normalizeButtonId(o);
|
|
100
|
+
const u = this.container.querySelector(`#${o}`);
|
|
101
|
+
u && (this.ctx.logger("toolbox").warn(`Button with id ${o} already exists, replacing it.`), u.remove());
|
|
102
|
+
let s = null;
|
|
103
|
+
if (typeof n > "u" || n === "auto") {
|
|
104
|
+
const g = this.container.querySelector(".btn-group.group1"), h = this.container.querySelector(".btn-group.group2"), b = g?.children.length || 0, B = h?.children.length || 0;
|
|
105
|
+
s = b <= B ? g : h;
|
|
106
|
+
} else
|
|
107
|
+
s = this.container.querySelector(`.btn-group.${n}`);
|
|
108
|
+
if (!s) throw new Error(`Button group ${n} not found`);
|
|
109
|
+
const c = /* @__PURE__ */ l("li", { class: "btn-tip-group", id: o, onClick: p, children: [
|
|
110
|
+
/* @__PURE__ */ l("div", { class: "btn-tip", children: i }),
|
|
111
|
+
/* @__PURE__ */ l("button", { id: `${o}-btn`, class: "ipe-toolbox-btn", ...a, children: r })
|
|
112
|
+
] });
|
|
113
|
+
return typeof d == "number" ? d <= 0 ? s.prepend(c) : d >= s.children.length ? s.appendChild(c) : s.children[d]?.before(c) : s.appendChild(c), this.ctx.emit("toolbox/button-added", {
|
|
114
|
+
ctx: this.ctx,
|
|
115
|
+
button: c
|
|
116
|
+
}), this.updateButtonDelays(), c;
|
|
117
|
+
}
|
|
118
|
+
removeButton(t) {
|
|
119
|
+
this.container.querySelector(`.ipe-toolbox-btn#${t}`)?.remove(), this.ctx.emit("toolbox/button-removed", { ctx: this.ctx, id: t }), this.updateButtonDelays();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
f = z(P);
|
|
123
|
+
x = O(f, 0, "PluginToolbox", S, x);
|
|
124
|
+
M(f, 1, x);
|
|
125
|
+
export {
|
|
126
|
+
x as PluginToolbox
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=index-xJ2bdsOD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-xJ2bdsOD.js","sources":["../src/plugins/toolbox/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\nimport { ReactElement } from 'jsx-dom'\nimport './styles.scss'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n toolbox: PluginToolbox\n }\n interface Events {\n 'toolbox/button-added'(payload: { ctx: InPageEdit; button: HTMLElement }): void\n 'toolbox/button-removed'(payload: { ctx: InPageEdit; id: string }): void\n }\n}\n\n@RegisterPreferences(\n Schema.object({\n toolboxAlwaysShow: Schema.boolean()\n .description('Make the toolbox opened by default')\n .default(false),\n }).description('Toolbox preferences')\n)\n@Inject(['preferences'])\nexport class PluginToolbox extends Service {\n container!: HTMLElement\n\n constructor(public ctx: InPageEdit) {\n super(ctx, 'toolbox', false)\n }\n\n protected async start(): Promise<void> {\n this.container = this.createToolbox()\n this.ctx.preferences.get('toolboxAlwaysShow').then((val) => {\n if (val) {\n this.container.classList.add('is-persistent')\n }\n })\n this.setupHoverLogic()\n document.body.appendChild(this.container)\n\n // 初始化时更新按钮延迟\n this.updateButtonDelays()\n }\n\n protected stop(): void | Promise<void> {\n this.container?.remove()\n }\n\n private setupHoverLogic() {\n let hoverTimeout: number | null = null\n\n // 检查是否处于持久化状态的辅助函数\n const isPersistent = () => {\n return this.container.classList.contains('is-persistent')\n }\n\n // 鼠标进入时暂时展开\n this.container.addEventListener('mouseenter', () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout)\n hoverTimeout = null\n }\n\n // 如果不在持久化状态,则添加hover展开效果\n if (!isPersistent()) {\n this.container.classList.add('is-hovered')\n }\n })\n\n // 鼠标离开时收起(如果不是持久化状态)\n this.container.addEventListener('mouseleave', () => {\n if (!isPersistent()) {\n hoverTimeout = window.setTimeout(() => {\n this.container.classList.remove('is-hovered')\n }, 150) // 延迟150ms收起,避免快速移动鼠标时闪烁\n }\n })\n }\n\n /**\n * 计算按钮动画延迟\n * @param index 按钮索引(从0开始)\n * @param totalCount 总按钮数量\n * @returns 延迟时间(秒)\n */\n private calculateButtonDelay(index: number, totalCount: number): number {\n if (totalCount <= 1) return 0\n\n // 总动画时长150ms = 0.15s\n const totalDuration = 0.15\n // 使用平方根函数创建非线性延迟,差值逐渐缩小\n const normalizedIndex = index / (totalCount - 1)\n const delay = totalDuration * Math.sqrt(normalizedIndex)\n\n return Math.round(delay * 1000) / 1000 // 保留3位小数\n }\n\n /**\n * 更新按钮组的动画延迟\n */\n private updateButtonDelays() {\n const btnGroups = this.container.querySelectorAll('.btn-group')\n\n btnGroups.forEach((group) => {\n const buttons = group.querySelectorAll('.btn-tip-group')\n const totalCount = buttons.length\n\n buttons.forEach((button, index) => {\n const delay = this.calculateButtonDelay(index, totalCount)\n ;(button as HTMLElement).style.setProperty('--transition-delay', `${delay}s`)\n ;(button as HTMLElement).style.setProperty('--max-transition-delay', '0.15s')\n })\n })\n }\n\n private createToolbox() {\n const toggler = (\n <button\n className=\"ipe-toolbox-btn\"\n id=\"toolbox-toggler\"\n onClick={() => {\n const isPersistent = this.container.classList.contains('is-persistent')\n const newPersistent = !isPersistent\n this.container.classList.toggle('is-persistent', newPersistent)\n this.ctx.preferences.set('toolboxAlwaysShow', newPersistent)\n }}\n >\n {/* Font Awesome 5 Solid: Plus */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"448\" height=\"512\" viewBox=\"0 0 448 512\">\n <rect width=\"448\" height=\"512\" fill=\"none\" />\n <path\n fill=\"currentColor\"\n d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32\"\n />\n </svg>\n </button>\n )\n const element = (\n <div id=\"ipe-edit-toolbox\">\n <ul className=\"btn-group group1\" style={{ display: 'flex', flexDirection: 'column' }}></ul>\n <ul className=\"btn-group group2\" style={{ display: 'flex', flexDirection: 'row' }}></ul>\n {toggler}\n </div>\n )\n\n return element as HTMLElement\n }\n\n private normalizeButtonId(id: string) {\n if (!id) {\n id = Math.random().toString(36).substring(2, 8)\n }\n return `ipe-toolbox__${id.trim()}`.replace(/\\s\\.#/g, '-')\n }\n\n addButton(payload: {\n id: string\n group?: 'auto' | 'group1' | 'group2'\n icon: string | HTMLElement | SVGElement | ReactElement\n tooltip?: string | HTMLElement\n buttonProps?: Record<string, any>\n onClick?: (event: MouseEvent) => void\n index?: number\n }) {\n let { id, group, icon, tooltip, buttonProps, onClick, index } = payload\n id = this.normalizeButtonId(id)\n\n const existingButton = this.container.querySelector(`#${id}`)\n if (existingButton) {\n this.ctx.logger('toolbox').warn(`Button with id ${id} already exists, replacing it.`)\n existingButton.remove()\n }\n\n let groupEl: HTMLElement | null = null\n if (typeof group === 'undefined' || group === 'auto') {\n // 选择按钮最少的那一组,一样多就选第一组\n const group1 = this.container.querySelector('.btn-group.group1') as HTMLElement\n const group2 = this.container.querySelector('.btn-group.group2') as HTMLElement\n const group1Count = group1?.children.length || 0\n const group2Count = group2?.children.length || 0\n groupEl = group1Count <= group2Count ? group1 : group2\n } else {\n groupEl = this.container.querySelector(`.btn-group.${group}`)\n }\n if (!groupEl) throw new Error(`Button group ${group} not found`)\n\n const button = (\n <li class=\"btn-tip-group\" id={id} onClick={onClick}>\n <div class=\"btn-tip\">{tooltip}</div>\n <button id={`${id}-btn`} class=\"ipe-toolbox-btn\" {...buttonProps}>\n {icon}\n </button>\n </li>\n )\n\n if (typeof index === 'number') {\n if (index <= 0) {\n groupEl.prepend(button)\n } else if (index >= groupEl.children.length) {\n groupEl.appendChild(button)\n } else {\n groupEl.children[index]?.before(button)\n }\n } else {\n groupEl.appendChild(button)\n }\n\n this.ctx.emit('toolbox/button-added', {\n ctx: this.ctx,\n button: button as HTMLElement,\n })\n\n // 更新按钮延迟\n this.updateButtonDelays()\n\n return button as HTMLElement\n }\n\n removeButton(id: string) {\n const button = this.container.querySelector(`.ipe-toolbox-btn#${id}`)\n button?.remove()\n this.ctx.emit('toolbox/button-removed', { ctx: this.ctx, id })\n\n // 更新按钮延迟\n this.updateButtonDelays()\n }\n}\n"],"names":["_PluginToolbox_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginToolbox","Service","ctx","val","hoverTimeout","isPersistent","index","totalCount","totalDuration","normalizedIndex","delay","group","buttons","button","jsxs","jsx","newPersistent","id","payload","icon","tooltip","buttonProps","onClick","existingButton","groupEl","group1","group2","group1Count","group2Count","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,16 +6,14 @@ declare module '../../InPageEdit' {
|
|
|
6
6
|
}
|
|
7
7
|
export interface InArticleWikiLinkStat {
|
|
8
8
|
$el: HTMLAnchorElement;
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
url: URL;
|
|
10
|
+
query: URLSearchParams;
|
|
11
|
+
hash: string;
|
|
11
12
|
kind: 'normal' | 'mw:File';
|
|
12
|
-
|
|
13
|
+
/** MediaWiki page title */
|
|
13
14
|
title: string;
|
|
15
|
+
external: boolean;
|
|
14
16
|
action: 'view' | 'edit' | 'create' | 'diff' | string;
|
|
15
|
-
section?: number | 'new' | undefined;
|
|
16
|
-
revision?: number;
|
|
17
|
-
redlink?: boolean;
|
|
18
|
-
preload?: string;
|
|
19
17
|
}
|
|
20
18
|
export declare class PluginInArticleLinks extends BasePlugin<{
|
|
21
19
|
wikiBaseUrl: string;
|
|
@@ -27,5 +25,5 @@ export declare class PluginInArticleLinks extends BasePlugin<{
|
|
|
27
25
|
constructor(ctx: InPageEdit);
|
|
28
26
|
protected start(): Promise<void>;
|
|
29
27
|
protected stop(): Promise<void>;
|
|
30
|
-
|
|
28
|
+
parseInArticleLinkInfo(anchor: HTMLAnchorElement): InArticleWikiLinkStat | null;
|
|
31
29
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { InPageEdit, Schema } from '../../InPageEdit';
|
|
2
|
-
import { IPEStorageItem } from '../../services/StorageService';
|
|
1
|
+
import { InPageEdit, Schema } from '../../InPageEdit.js';
|
|
2
|
+
import { IPEStorageItem } from '../../services/StorageService.js';
|
|
3
|
+
import { ComputeAble } from '../../utils/computeable.js';
|
|
3
4
|
declare module '../../InPageEdit' {
|
|
4
5
|
interface InPageEdit {
|
|
5
6
|
preferences: PluginPreferences;
|
|
@@ -25,8 +26,8 @@ export declare class PluginPreferences extends BasePlugin {
|
|
|
25
26
|
private _defaultPreferences;
|
|
26
27
|
constructor(ctx: InPageEdit);
|
|
27
28
|
start(): Promise<void>;
|
|
28
|
-
get<T = any>(key: string, fallback?:
|
|
29
|
-
getDefaultValue(key: string):
|
|
29
|
+
get<T = any>(key: string, fallback?: ComputeAble<T>): Promise<T | null>;
|
|
30
|
+
getDefaultValue(key: string): unknown;
|
|
30
31
|
set<T = any>(key: string, value: T): Promise<IPEStorageItem<T> | void>;
|
|
31
32
|
getAll(): Promise<Record<string, any>>;
|
|
32
33
|
private loadDefaultConfigs;
|
|
@@ -5,7 +5,9 @@ import { IPEModal } from '../../services/ModalService/IPEModal';
|
|
|
5
5
|
import { ReactNode } from 'jsx-dom';
|
|
6
6
|
declare module '../../InPageEdit' {
|
|
7
7
|
interface InPageEdit {
|
|
8
|
-
quickEdit: PluginQuickEdit
|
|
8
|
+
quickEdit: PluginQuickEdit & {
|
|
9
|
+
(...args: Parameters<PluginQuickEdit['showModal']>): ReturnType<PluginQuickEdit['showModal']>;
|
|
10
|
+
};
|
|
9
11
|
}
|
|
10
12
|
interface Events {
|
|
11
13
|
'quick-edit/init-options'(payload: Omit<QuickEditInitPayload, 'modal' | 'wikiPage'>): void;
|
|
@@ -38,8 +40,10 @@ export interface QuickEditInitPayload {
|
|
|
38
40
|
wikiPage: WikiPage;
|
|
39
41
|
}
|
|
40
42
|
export interface QuickEditSubmitPayload {
|
|
43
|
+
wikiPage: WikiPage;
|
|
41
44
|
text?: string;
|
|
42
45
|
summary?: string;
|
|
46
|
+
section?: number | 'new' | undefined;
|
|
43
47
|
minor?: boolean;
|
|
44
48
|
createonly?: boolean;
|
|
45
49
|
watchlist?: WatchlistAction;
|
|
@@ -49,9 +53,9 @@ export declare class PluginQuickEdit extends BasePlugin {
|
|
|
49
53
|
private readonly DEFAULT_OPTIONS;
|
|
50
54
|
constructor(ctx: InPageEdit);
|
|
51
55
|
protected start(): Promise<void> | void;
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
showModal(payload?: string | Partial<QuickEditOptions>): Promise<void>;
|
|
57
|
+
handleSubmit(payload: QuickEditSubmitPayload): Promise<import('fexios').FexiosFinalContext<any>>;
|
|
58
|
+
getWikiPageFromPayload(payload: Partial<QuickEditOptions>): Promise<WikiPage>;
|
|
54
59
|
private injectToolbox;
|
|
55
|
-
private getWikiPageFromPayload;
|
|
56
60
|
protected removeToolbox(ctx: InPageEdit): void;
|
|
57
61
|
}
|
|
@@ -18,12 +18,22 @@ declare module '../../InPageEdit' {
|
|
|
18
18
|
export declare class PluginToolbox extends Service {
|
|
19
19
|
ctx: InPageEdit;
|
|
20
20
|
container: HTMLElement;
|
|
21
|
-
private forceShow;
|
|
22
21
|
constructor(ctx: InPageEdit);
|
|
23
22
|
protected start(): Promise<void>;
|
|
24
23
|
protected stop(): void | Promise<void>;
|
|
24
|
+
private setupHoverLogic;
|
|
25
|
+
/**
|
|
26
|
+
* 计算按钮动画延迟
|
|
27
|
+
* @param index 按钮索引(从0开始)
|
|
28
|
+
* @param totalCount 总按钮数量
|
|
29
|
+
* @returns 延迟时间(秒)
|
|
30
|
+
*/
|
|
31
|
+
private calculateButtonDelay;
|
|
32
|
+
/**
|
|
33
|
+
* 更新按钮组的动画延迟
|
|
34
|
+
*/
|
|
35
|
+
private updateButtonDelays;
|
|
25
36
|
private createToolbox;
|
|
26
|
-
private createIndicatorForNotArticlePage;
|
|
27
37
|
private normalizeButtonId;
|
|
28
38
|
addButton(payload: {
|
|
29
39
|
id: string;
|
|
@@ -102,7 +102,7 @@ export interface IPEModalOptions {
|
|
|
102
102
|
*/
|
|
103
103
|
onClickClose?: boolean | ((modal: IPEModal) => boolean | void);
|
|
104
104
|
}
|
|
105
|
-
export type IPEModalNotifyType = '
|
|
105
|
+
export type IPEModalNotifyType = 'default' | 'info' | 'success' | 'warning' | 'error' | 'confirm' | string;
|
|
106
106
|
export type IPEModalNotifyPosition = 'top right' | 'top left' | 'bottom right' | 'bottom left';
|
|
107
107
|
export declare enum IPEModalEvent {
|
|
108
108
|
Init = "modal.init",
|
|
@@ -194,7 +194,7 @@ export declare class IPEModal {
|
|
|
194
194
|
private applyAnimation;
|
|
195
195
|
private _hooks;
|
|
196
196
|
on(type: IPEModalEvent, listener: IPEModalHook): () => this;
|
|
197
|
-
off(type: IPEModalEvent, listener
|
|
197
|
+
off(type: IPEModalEvent, listener?: IPEModalHook): this;
|
|
198
198
|
once(type: IPEModalEvent, listener: IPEModalHook): () => this;
|
|
199
199
|
private emit;
|
|
200
200
|
private focusFirst;
|
|
@@ -224,9 +224,9 @@ export declare class IPEModal {
|
|
|
224
224
|
okBtn: Pick<IPEModalButtonOptions, 'label' | 'className'>;
|
|
225
225
|
cancelBtn: Pick<IPEModalButtonOptions, 'label' | 'className'>;
|
|
226
226
|
}>, method: (e: MouseEvent, m: IPEModal) => void): IPEModal;
|
|
227
|
-
static
|
|
227
|
+
static getDefaultNotifyIcon(type: IPEModalNotifyType): import('jsx-dom').ReactElement | null;
|
|
228
228
|
static notify(type: IPEModalNotifyType, options: Partial<IPEModalOptions> & Partial<{
|
|
229
|
-
icon: string;
|
|
229
|
+
icon: string | Element;
|
|
230
230
|
okBtn: Pick<IPEModalButtonOptions, 'label' | 'className'>;
|
|
231
231
|
cancelBtn: Pick<IPEModalButtonOptions, 'label' | 'className'>;
|
|
232
232
|
overrideOther: boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InPageEdit } from '../../InPageEdit';
|
|
2
|
-
import { IPEModal,
|
|
2
|
+
import { IPEModal, IPEModalEvent, IPEModalOptions } from './IPEModal.js';
|
|
3
3
|
export * from './IPEModal.js';
|
|
4
4
|
declare module '../../InPageEdit' {
|
|
5
5
|
interface InPageEdit {
|
|
@@ -16,20 +16,12 @@ export declare class ModalService {
|
|
|
16
16
|
constructor(ctx: InPageEdit);
|
|
17
17
|
IPEModal: typeof CustomIPEModal;
|
|
18
18
|
IPEModalEvent: typeof IPEModalEvent;
|
|
19
|
-
show: (
|
|
20
|
-
createObject: (
|
|
19
|
+
show: (...args: Parameters<typeof CustomIPEModal.show>) => CustomIPEModal;
|
|
20
|
+
createObject: (...args: Parameters<typeof CustomIPEModal.createObject>) => CustomIPEModal;
|
|
21
21
|
close: typeof IPEModal.close;
|
|
22
22
|
closeAll: typeof IPEModal.closeAll;
|
|
23
23
|
removeAll: typeof IPEModal.removeAll;
|
|
24
|
-
dialog: (
|
|
25
|
-
confirm: (
|
|
26
|
-
|
|
27
|
-
cancelBtn: Pick<IPEModalButtonOptions, "label" | "className">;
|
|
28
|
-
}>, method: (e: MouseEvent, m: IPEModal) => void) => CustomIPEModal;
|
|
29
|
-
notify: (type: "success" | "error" | "warning" | "info" | "dialog" | "confirm" | string, options: Partial<IPEModalOptions> & Partial<{
|
|
30
|
-
icon: string;
|
|
31
|
-
okBtn: Pick<IPEModalButtonOptions, "label" | "className">;
|
|
32
|
-
cancelBtn: Pick<IPEModalButtonOptions, "label" | "className">;
|
|
33
|
-
overrideOther: boolean;
|
|
34
|
-
}>, callback?: (result: boolean) => void) => CustomIPEModal;
|
|
24
|
+
dialog: (...args: Parameters<typeof CustomIPEModal.dialog>) => CustomIPEModal;
|
|
25
|
+
confirm: (...args: Parameters<typeof CustomIPEModal.confirm>) => CustomIPEModal;
|
|
26
|
+
notify: (...args: Parameters<typeof CustomIPEModal.notify>) => CustomIPEModal;
|
|
35
27
|
}
|
|
@@ -8,19 +8,20 @@ declare module '../InPageEdit' {
|
|
|
8
8
|
export declare class SiteMetadataService extends Service {
|
|
9
9
|
ctx: InPageEdit;
|
|
10
10
|
private _data;
|
|
11
|
-
private siteIdentity?;
|
|
12
11
|
private readonly CACHE_TTL;
|
|
13
12
|
private readonly VERSION;
|
|
14
13
|
private db;
|
|
15
14
|
private queryData;
|
|
16
15
|
constructor(ctx: InPageEdit);
|
|
16
|
+
logger: import('@inpageedit/logger').Logger;
|
|
17
17
|
get api(): import('wiki-saikou/browser').MediaWikiApi;
|
|
18
18
|
get mwConfig(): ReturnType<typeof mw.config.get>;
|
|
19
19
|
protected start(): Promise<void>;
|
|
20
|
-
computeSiteIdentity():
|
|
20
|
+
computeSiteIdentity(): string;
|
|
21
21
|
fetchFromApi(): Promise<any>;
|
|
22
22
|
fetchFromCache(): Promise<SiteMetadata | null>;
|
|
23
23
|
saveToCache(data: SiteMetadata): Promise<import('./StorageService').IPEStorageItem<SiteMetadata>>;
|
|
24
|
+
invalidateCache(): Promise<void>;
|
|
24
25
|
get _raw(): SiteMetadata;
|
|
25
26
|
get siteInfo(): import('../types/SiteMetadata').SiteInfo;
|
|
26
27
|
get specialPageAliases(): import('../types/SiteMetadata').SiteSpecialPageAlias[];
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";._ipe_progress_so6hn_1{position:relative;display:inline-block;width:100%;overflow:hidden;border:1px solid #c5c5c5;border-radius:100vmax;background-color:#fff;height:1em;--progress: 0%}._ipe_progress_so6hn_1[data-indeterminate=true]:before,._ipe_progress_so6hn_1[data-indeterminate=true]:after{content:"";position:absolute;top:0;bottom:0;left:0;background-color:#36c}._ipe_progress_so6hn_1[data-indeterminate=true]:before{animation:_progress-indeterminate-long_so6hn_1 2s linear infinite}._ipe_progress_so6hn_1[data-indeterminate=true]:after{animation:_progress-indeterminate-short_so6hn_1 2s linear infinite}._ipe_progress_so6hn_1[data-indeterminate=false]:before{content:"";position:absolute;top:0;bottom:0;left:0;width:var(--progress);background-color:#36c;transition:width .3s ease-in-out}@keyframes _progress-indeterminate-long_so6hn_1{0%{left:0;width:0}50%{left:30%;width:70%}75%{left:100%;width:0}}@keyframes _progress-indeterminate-short_so6hn_1{0%{left:0;width:0}50%{left:0;width:0}75%{left:0;width:25%}to{left:110%;width:0}}._mbox_5x43w_1{--border-color: #dfdfdf;--title-color: #efefef;--content-color: #ffffff;border-radius:.5rem;border:1px solid var(--title-color);border-left:6px solid var(--border-color);overflow:hidden;margin-bottom:1rem;position:relative}._mbox_5x43w_1 ._title_5x43w_12{background-color:var(--title-color);padding:.5rem 1rem;font-weight:700;font-size:1rem;line-height:1.2}._mbox_5x43w_1 ._content_5x43w_19{background-color:var(--content-color);padding:.5rem 1rem;font-size:1rem;line-height:1.5;max-height:14em;overflow:auto}._mbox_5x43w_1 ._close_5x43w_27{position:absolute;top:.5rem;right:.5rem;font-size:1.25rem;line-height:1rem;color:var(--border-color);cursor:pointer;user-select:none}._mbox_5x43w_1 ._close_5x43w_27:hover{filter:brightness(1.2)}._mbox_5x43w_1 ._close_5x43w_27:active{filter:brightness(.8)}._mbox_5x43w_1.mbox-type-note,._mbox_5x43w_1.mbox-type-info{--border-color: #1f6feb;--title-color: #AFD1FE;--content-color: #f3f9ff}._mbox_5x43w_1.mbox-type-tip,._mbox_5x43w_1.mbox-type-success{--border-color: #238636;--title-color: #E0F1E3;--content-color: #f9f9f9}._mbox_5x43w_1.mbox-type-important,._mbox_5x43w_1.mbox-type-done{--border-color: #8957e5;--title-color: #DDCBFC;--content-color: #f9f9f9}._mbox_5x43w_1.mbox-type-warning{--border-color: #9e6a03;--title-color: #E4CC9D;--content-color: #fff9db}._mbox_5x43w_1.mbox-type-caution,._mbox_5x43w_1.mbox-type-error{--border-color: #da3633;--title-color: #FCB9B6;--content-color: #f9f9f9}._twinSwapInput_1gdgl_9{display:grid;grid-template-columns:1fr auto 1fr;grid-template-areas:"input-left swap-button input-right";gap:1rem;align-items:end}@media (max-width: 768px){._twinSwapInput_1gdgl_9{grid-template-columns:1fr;grid-template-areas:"input-left" "swap-button" "input-right";gap:.75rem}}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23{display:flex;flex-direction:column}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23._inputLeft_1gdgl_27{grid-area:input-left}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23._inputRight_1gdgl_30{grid-area:input-right}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 label{display:block;margin-bottom:.5em;font-weight:500;font-size:.875rem}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 input{width:100%}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 input:disabled{opacity:.75;cursor:not-allowed}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46{grid-area:swap-button;display:flex;align-items:center;justify-content:center}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button{position:relative;display:flex;align-items:center;justify-content:center;padding:0;border-radius:50%;width:2rem;height:2rem;border:none;background:#efefef;cursor:pointer;transition:all .2s ease}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:hover{background:#e0e0e0}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:active{background:#d0d0d0}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:disabled{opacity:.75;cursor:not-allowed}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button svg{transition:all .2s ease;width:1.25rem;height:1.25rem}@media (max-width: 768px){._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button{transform:rotate(90deg)}}._tabview_zlbug_1{font-size:14px}._tabview_zlbug_1 ._labels_container_zlbug_4{font-size:16px;list-style:none;margin:0;white-space:nowrap;overflow-x:auto}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4{flex:auto;padding:0;margin:0;display:inline-block;text-align:center;text-transform:uppercase}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4:not(:first-child){margin-left:.5em}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4 a{display:inline-block;padding:.25em .5em;text-decoration:none;color:#08d;cursor:pointer}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4:hover a{box-shadow:0 -2px #0088dd40 inset}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4._active_zlbug_32 a{box-shadow:0 -2px #08d inset}._tabview_zlbug_1 ._contents_container_zlbug_35{margin-top:1em}:root{--ipe-modal-z: 1000;--ipe-modal-backdrop-bg: rgba(0, 0, 0, .5);--ipe-modal-bg: #ffffff;--ipe-modal-fg: #111827;--ipe-modal-fg--rgb: 17, 24, 39;--ipe-modal-footer-bg: #eaecf0;--ipe-modal-muted: #6b7280;--ipe-modal-accent: #3b82f6;--ipe-modal-accent--rgb: 59, 130, 246;--ipe-modal-danger: #ef4444;--ipe-modal-danger--rgb: 239, 68, 68;--ipe-modal-border-color: #c3c3c3;--ipe-modal-radius: 8px;--ipe-modal-button-radius: 10px;--ipe-modal-shadow: 0 0 40px rgba(128, 128, 128, .5);--ipe-modal-spacing: 12px;--ipe-modal-viewport-gap-y: 20px;--ipe-modal-window-max-w: 96vw;--ipe-modal-anim: none;--ipe-modal-safe-area-top: env(safe-area-inset-top);--ipe-modal-safe-area-bottom: env(safe-area-inset-bottom);--ipe-modal-vh: 100vh}@supports (height: 100dvh){:root{--ipe-modal-vh: 100dvh}}:root{--ipe-modal-window-max-h: calc( var(--ipe-modal-vh) - var(--ipe-modal-safe-area-top) - var(--ipe-modal-safe-area-bottom) - (var(--ipe-modal-viewport-gap-y) * 2) )}html.ipe-modal-no-scroll,body.ipe-modal-no-scroll{overflow:hidden!important;touch-action:none;-webkit-overflow-scrolling:auto}body.ipe-modal-no-scroll{position:fixed;width:100%;left:0;right:0}.ipe-modal-backdrop{position:fixed;inset:0;z-index:var(--ipe-modal-z);background:transparent;transition:background .18s ease;pointer-events:none}.ipe-modal-backdrop.is-open{background:var(--ipe-modal-backdrop-bg);pointer-events:auto}.ipe-modal-modal{position:fixed;inset:0;z-index:calc(var(--ipe-modal-z) + 1);outline:none;display:grid;align-items:start;justify-items:center;overflow:auto;opacity:0;transform:translateY(8px) scale(.98);transition:opacity .18s ease,transform .22s ease;pointer-events:none}.ipe-modal-modal.is-open{opacity:1;transform:none}.ipe-modal-modal.is-centered{display:grid;align-items:center}.ipe-modal-modal.is-centered .ipe-modal-modal__content{max-height:75dvh;overflow:auto}.ipe-modal-modal.is-fullscreen .ipe-modal-modal__window{width:100vw;height:var(--ipe-modal-vh);max-width:none;max-height:none;border-radius:0}.ipe-modal-modal.no-backdrop{position:absolute;inset:auto;display:block;padding:0;overflow:visible}.ipe-modal-modal.is-dragging{transition:none}.ipe-modal-modal.is-dragging .ipe-modal-modal__window{animation:none}.ipe-modal-modal.is-dragging .ipe-modal-modal__header{cursor:grabbing!important}.ipe-modal-modal__window{position:relative;background:var(--ipe-modal-bg);color:var(--ipe-modal-fg);border-radius:var(--ipe-modal-radius);box-shadow:var(--ipe-modal-shadow);max-width:var(--ipe-modal-window-max-w);width:min(92vw,var(--ipe-modal-window-max-w));overflow:hidden;display:block;animation:var(--ipe-modal-anim, none) .22s ease both;pointer-events:auto;overscroll-behavior:contain;margin-top:var(--ipe-modal-viewport-gap-y, 20px);margin-bottom:var(--ipe-modal-viewport-gap-y, 20px)}.size--dialog{max-width:420px}.size--small{max-width:520px}.size--smallToMedium{max-width:640px}.size--medium{max-width:max(64%,860px)}.size--mediumToLarge{max-width:max(72%,1080px)}.size--large{max-width:max(80%,1200px)}.size--full{width:100vw;height:var(--ipe-modal-vh);max-width:none;max-height:none;border-radius:0}.size--auto{max-width:var(--ipe-modal-window-max-w)}.ipe-modal-modal__window.is-fixed-height{height:min(var(--ipe-modal-window-max-h),80vh)}.ipe-modal-modal__header{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:calc(var(--ipe-modal-spacing) * .75) var(--ipe-modal-spacing);border-bottom:1px solid var(--ipe-modal-footer-bg)}.ipe-modal-modal__title{font-size:1.125rem;font-weight:700;line-height:1;margin:0}.ipe-modal-modal__icons{display:inline-flex;gap:6px}.ipe-modal-modal__icon{width:28px;height:28px;border-radius:8px;border:0;background:transparent}.ipe-modal-modal__close{margin-left:6px;width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:var(--ipe-modal-button-radius);background:transparent;font-size:22px;line-height:1;color:var(--ipe-modal-muted);cursor:pointer}.ipe-modal-modal__close:hover{background:#0000000f;color:var(--ipe-modal-fg)}.ipe-modal-modal__content{padding:var(--ipe-modal-spacing);overflow:visible;-webkit-overflow-scrolling:touch}.ipe-modal-modal__footer{background:var(--ipe-modal-footer-bg);display:flex;align-items:center;justify-content:space-between;gap:8px;padding:calc(var(--ipe-modal-spacing) * .75) var(--ipe-modal-spacing);border-top:1px solid var(--ipe-modal-border-color)}.ipe-modal-modal__buttons{display:inline-flex;gap:8px}.ipe-modal-toast-container{position:fixed;z-index:2000;display:flex;flex-direction:column;gap:8px;align-items:flex-end;pointer-events:none}.ipe-modal-toast-container.top{top:16px}.ipe-modal-toast-container.bottom{bottom:16px;flex-direction:column-reverse}.ipe-modal-toast-container.right{right:16px}.ipe-modal-toast-container.left{left:16px}.ipe-modal-modal__window.plugin--toast{width:300px;border-radius:calc(var(--ipe-modal-radius) * .5)}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header{padding:.5em}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__close{width:20px;height:20px;font-size:16px}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__content{padding:1em .5em}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__footer{padding:0 .5em .5em}.ipe-modal-modal__window.plugin--toast .ipe-modal-btn{padding:.5em .75em}.ipe-modal-btn{--accent-color: #fff;--text-color: var(--ipe-modal-fg);--active-color: rgba(0, 0, 0, .1);appearance:none;border:1px solid rgba(0,0,0,.14);background:var(--accent-color);color:var(--text-color);padding:8px 12px;border-radius:var(--ipe-modal-button-radius);cursor:pointer;font:inherit;transition:all .2s}.ipe-modal-btn:hover{background:#0000000a}.ipe-modal-btn:disabled{opacity:.6;cursor:not-allowed}.ipe-modal-btn:active{background:#0000000f;box-shadow:0 0 0 2px var(--active-color)}.ipe-modal-btn:focus{box-shadow:0 0 0 2px var(--active-color)}.ipe-modal-btn.is-primary{--accent-color: var(--ipe-modal-accent);--text-color: #fff;--active-color: rgba(var(--ipe-modal-accent--rgb), .5);border-color:var(--accent-color);background:var(--accent-color)}.ipe-modal-btn.is-danger{--accent-color: var(--ipe-modal-danger);--text-color: #fff;--active-color: rgba(var(--ipe-modal-danger--rgb), .2);border-color:var(--accent-color);background:var(--accent-color);color:var(--text-color)}.ipe-modal-btn.is-ghost,.ipe-modal-btn.is-text{background:transparent}.ipe-modal-btn.is-ghost.is-primary{color:var(--ipe-modal-accent)}.ipe-modal-btn.is-ghost.is-danger{color:var(--ipe-modal-danger)}.ipe-modal-btn.is-text{border:0}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer{padding:0}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__buttons--left,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__buttons--left{display:none}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__buttons--right,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__buttons--right{flex:1;width:100%;display:flex;gap:0}.ipe-modal-modal__window.size--dialog .ipe-modal-btn,.ipe-modal-modal__window.compact-buttons .ipe-modal-btn{flex:1;border:0;margin:0;padding:1rem;border-radius:0}.ipe-modal-modal__window.size--dialog .ipe-modal-btn:not(:first-child),.ipe-modal-modal__window.compact-buttons .ipe-modal-btn:not(:first-child){border-left:1px solid rgba(0,0,0,.06)}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer{background-color:transparent}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.theme-ipe{--color-primary: #36c;--color-primary-hover: #447ff5;--color-primary-active: #2a4b8d;--color-promary--rgb: 51, 102, 204;--color-white: #fff;--color-text-dark: #222;--color-text-medium: #252525;--color-text-hover: #454545;--color-bg-light: #f8f9fa;--color-bg-lighter: #fafafa;--color-bg-lightest: #f8f8f8;--color-bg-gray: #f4f4f4;--color-border-gray: #c8ccd1;--color-border-light: #efefef;--color-border-input: #ccc;--color-border-dark: #72777d;--color-border-disabled: #d6d6d6;--color-danger: #d33;--color-danger-hover: #ff4242;--color-danger-active: #d00;--color-danger--rgb: 211, 51, 51;--color-disabled-bg: #c8ccd1;--color-disabled-dark: #a0a0a0;--font-size-button: 14px;--font-size-label: 1rem;--font-weight-label: 700;--border-width: 1px;--border-width-radio-checked: 6px;--border-radius-button: 6px;--border-radius-input: 4px;--padding-button-y: .5em;--padding-button-x: 1em;--padding-button-dialog: 1em;--padding-input-y: .25em;--padding-input-x: .35em;--size-checkbox: 1.2em;--size-radio: 1.4em;--margin-checkbox-top: .15em;--margin-checkbox-right: .375em;--textarea-height: 50vh;--textarea-min-height: 20em;--line-height-input: 1.5em;--line-height-checkbox: 1.2em;--transition-fast: .1s;--transition-medium: .12s;--transition-slow: .2s;--ipe-modal-accent: var(--color-primary);--ipe-modal-danger: var(--color-danger);--ipe-modal-button-radius: var(--border-radius-button);font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.theme-ipe textarea[name=text]{width:100%;height:var(--textarea-height);min-height:var(--textarea-min-height);resize:vertical;border:var(--border-width) solid var(--color-border-input);border-radius:var(--border-radius-input);transition:border var(--transition-slow);line-height:var(--line-height-input);padding:var(--padding-input-y) var(--padding-input-x);outline:none}.theme-ipe textarea[name=text]:focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 var(--border-width) var(--color-primary)}.theme-ipe textarea[name=text]:disabled{background-color:var(--color-disabled-bg);color:var(--color-white);cursor:not-allowed}.theme-ipe .ipe-input-box label{display:block;font-size:.875rem;margin-bottom:.5em;font-weight:500}.theme-ipe .ipe-input-box input[type=text],.theme-ipe .ipe-input-box input[type=number],.theme-ipe .ipe-input-box input[type=email],.theme-ipe .ipe-input-box input[type=password],.theme-ipe .ipe-input-box input[type=url],.theme-ipe .ipe-input-box input[type=tel],.theme-ipe .ipe-input-box input[type=search]{width:100%}.theme-ipe input{padding:var(--padding-input-y) var(--padding-input-x);border:var(--border-width) solid var(--color-border-input);border-radius:var(--border-radius-input);transition:border var(--transition-slow);line-height:var(--line-height-input);outline:none}.theme-ipe input:focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 var(--border-width) var(--color-primary)}.theme-ipe label input[type=checkbox]+span,.theme-ipe label input[type=radio]+span{user-select:none;line-height:var(--line-height-checkbox)}.theme-ipe label input[type=checkbox]+span:before,.theme-ipe label input[type=radio]+span:before{content:" ";display:inline-block;width:var(--size-checkbox);height:var(--size-checkbox);margin-top:var(--margin-checkbox-top);margin-right:var(--margin-checkbox-right);border-radius:var(--border-radius-input);background-color:var(--color-bg-lightest);border:var(--border-width) solid var(--color-border-dark);cursor:pointer;transition:all var(--transition-medium)}.theme-ipe label input[type=radio]+span:before{border-radius:50%;box-sizing:border-box;vertical-align:text-bottom;width:var(--size-radio);height:var(--size-radio)}.theme-ipe label input[type=checkbox]:checked+span:before{content:" ";background-color:var(--color-primary);background-image:url(data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kOyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYgMTYiPjxnIGlkPSJjaGVja21hcmsiPjxwYXRoIGQ9Ik0xMy43NDkyKzMuNDkwOTVMNS44NjMxMisxMS42MzM3TDIuMjUwNzcrNy45NjA4MkwxLjQ4NzYrOC43NTc3OEw1Ljg2MzEyKzEzLjE5M0wxNC41MTI0KzQuMjg3OUwxMy43NDkyKzMuNDkwOTVaIiBvcGFjaXR5PSIxIiBmaWxsPSIjZmZmZmZmIi8+PC9nPjwvc3ZnPg==);background-repeat:no-repeat}.theme-ipe label input[type=radio]:checked+span:before{border-color:var(--color-primary);border-width:var(--border-width-radio-checked)}.theme-ipe label input[type=checkbox]:checked+span:hover:before{background-color:var(--color-primary-hover)}.theme-ipe label input[type=radio]:checked+span:hover:before{border-color:var(--color-primary-hover)}.theme-ipe label input[type=checkbox]:active+span:before,.theme-ipe label input[type=checkbox]:focus+span:before{box-shadow:0 0 0 2px rgba(var(--color-promary--rgb),.5);border-color:var(--color-primary)}.theme-ipe label input[type=checkbox],.theme-ipe label input[type=radio]{position:absolute;clip:rect(0,0,0,0)}.theme-ipe .cm-panel label input[type=checkbox],.theme-ipe .cm-panel label input[type=radio]{position:initial;clip:initial}.theme-ipe label input[type=checkbox]:disabled+span:before{border-color:var(--color-border-disabled)}.theme-ipe label input[type=radio]:disabled+span:before{background-color:var(--color-disabled-bg);border-color:var(--color-disabled-bg)}.theme-ipe label input[type=checkbox]:disabled:checked+span:before{background-color:var(--color-disabled-dark)}.theme-ipe label input[type=radio]:disabled:checked+span:before{background-color:var(--color-white)}.theme-ipe .ipe-radio-box span,.theme-ipe .ipe-checkbox span{vertical-align:middle}._diff-container_lq0si_2{--primary-text-color: #333;--secondary-text-color: #888;--container-bg-color: #fff;--border-color: #ccc;--del-bg: #fadad7;--del-color: #b30000;--ins-bg: #eaf2c2;--ins-color: #406619;--chunk-header-color: #8a008b;--result-bg: #f5f5f5;background:var(--result-bg);padding:1rem;margin:0;border-radius:3px;font-family:Maple Mono NF CN,Maple Mono NF,Maple Mono,JetBrainsMono Nerd Font,JetBrains Mono NF,JetBrains Mono,Consolas,Courier New,monospace;white-space:pre-wrap;overflow-x:auto;line-height:1.4em;color:var(--secondary-text-color);transition:color .25s ease}._diff-container_lq0si_2:hover{color:var(--primary-text-color)}._diff-container_lq0si_2 del{text-decoration:line-through;color:var(--del-color);background:var(--del-bg)}._diff-container_lq0si_2 ins{background:var(--ins-bg);color:var(--ins-color);text-decoration:underline}._diff-container_lq0si_2 del,._diff-container_lq0si_2 ins{font-weight:700}._diff-container_lq0si_2 ._chunk-header_lq0si_44{color:var(--chunk-header-color);text-decoration:none}#ipe-edit-toolbox{position:fixed;right:32px;bottom:32px;user-select:none;z-index:199}@media print{#ipe-edit-toolbox{display:none}}#ipe-edit-toolbox .ipe-toolbox-btn{color:#fff;background:#bebebe;height:36px;width:36px;font-size:20px;line-height:1;border:0;border-radius:50%;box-shadow:0 0 8px #999;text-shadow:0 0 2px #4c4c4c;padding:0;margin:0;cursor:pointer;display:flex;align-items:center;justify-content:center}#ipe-edit-toolbox .ipe-toolbox-btn svg,#ipe-edit-toolbox .ipe-toolbox-btn img{line-height:1;width:1em;height:1em;vertical-align:middle}#ipe-edit-toolbox #toolbox-toggle{position:absolute;right:0;bottom:0;width:42px;height:42px;background:#3f51b5;font-size:32px;line-height:1;margin:0;transition:all .26s ease-in-out;transform:rotate(0)}#ipe-edit-toolbox #toolbox-toggle.opened{transform:rotate(45deg)}#ipe-edit-toolbox .btn-group.group1 .btn-tip-group{transform:translate3d(0,100%,0)}#ipe-edit-toolbox .btn-group.group2 .btn-tip-group{transform:translate3d(100%,0,0)}#ipe-edit-toolbox .btn-group .btn-tip-group{transition-timing-function:ease-in-out;transition-duration:.3s;opacity:0}#ipe-edit-toolbox .btn-group.opened .btn-tip-group{transform:translateZ(0);opacity:1}#ipe-edit-toolbox .btn-group.opened .btn-tip-group:nth-of-type(1),#ipe-edit-toolbox .btn-group:not(.opened) .btn-tip-group:nth-of-type(3){transition-delay:0s}#ipe-edit-toolbox .btn-group .btn-tip-group:nth-of-type(2){transition-delay:.06s}#ipe-edit-toolbox .btn-group:not(.opened) .btn-tip-group:nth-of-type(1),#ipe-edit-toolbox .btn-group.opened .btn-tip-group:nth-of-type(3){transition-delay:.108s}#ipe-edit-toolbox .btn-group:not(.opened){transform:scaleZ(0);transition-delay:.408s}#ipe-edit-toolbox .btn-group.opened{transform:scaleZ(1)}#ipe-edit-toolbox .ipe-toolbox-btn#toolbox-toggle.click{box-shadow:0 0 4px gray,0 0 10px #444 inset}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-edit-btn{background:#2196f3}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-redirect-btn{background:#00bcd4}#ipe-edit-toolbox .ipe-toolbox-btn#redirectto-btn{background:#009688}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-delete-btn{background:#e91e63}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-move-btn{background:#ff5722}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__preferences-btn{background:#ffc107}#ipe-edit-toolbox .btn-group{position:absolute;display:flex;gap:8px;list-style:none;margin:0}#ipe-edit-toolbox .btn-group.group1{bottom:49px;right:4px;flex-direction:column}#ipe-edit-toolbox .btn-group.group2{bottom:2px;right:49px}#ipe-edit-toolbox .btn-group.opened{visibility:visible}#ipe-edit-toolbox .btn-tip-group .btn-tip{position:absolute;text-align:center;font-size:12px;white-space:nowrap;left:50%;bottom:calc(100% + .5em);transform:translate(-50%);background:#fff;padding:.2em .5em;box-shadow:0 0 .5em #999;border-radius:.5em;pointer-events:none;opacity:0;transition:opacity .2s ease-in-out,bottom .2s ease-in-out}#ipe-edit-toolbox .btn-tip-group:hover .btn-tip{opacity:1;bottom:calc(100% + 1em)}#ipe-edit-toolbox .btn-tip-group .btn-tip:after{content:"";display:block;border:5px solid transparent;border-radius:2px;border-right-color:#fff;border-bottom-color:#fff;position:absolute;bottom:-8px;left:50%;transform:rotate(45deg) translate(-50%)}.tabs[data-v-1f988771]{--border-color: #efefef;--tab-color: #666;--active-color: #3366bb;display:flex;gap:.5em;border-bottom:1px solid #efefef;margin-bottom:1em}.tabs .tab[data-v-1f988771]{padding:.5em 1em;cursor:pointer;user-select:none;color:var(--tab-color);display:inline-block;transition:color .3s ease,box-shadow .3s ease}.tabs .tab.active[data-v-1f988771]{color:var(--active-color);box-shadow:inset 0 -.15em 0 0 var(--active-color)}
|
|
1
|
+
@charset "UTF-8";._ipe_progress_so6hn_1{position:relative;display:inline-block;width:100%;overflow:hidden;border:1px solid #c5c5c5;border-radius:100vmax;background-color:#fff;height:1em;--progress: 0%}._ipe_progress_so6hn_1[data-indeterminate=true]:before,._ipe_progress_so6hn_1[data-indeterminate=true]:after{content:"";position:absolute;top:0;bottom:0;left:0;background-color:#36c}._ipe_progress_so6hn_1[data-indeterminate=true]:before{animation:_progress-indeterminate-long_so6hn_1 2s linear infinite}._ipe_progress_so6hn_1[data-indeterminate=true]:after{animation:_progress-indeterminate-short_so6hn_1 2s linear infinite}._ipe_progress_so6hn_1[data-indeterminate=false]:before{content:"";position:absolute;top:0;bottom:0;left:0;width:var(--progress);background-color:#36c;transition:width .3s ease-in-out}@keyframes _progress-indeterminate-long_so6hn_1{0%{left:0;width:0}50%{left:30%;width:70%}75%{left:100%;width:0}}@keyframes _progress-indeterminate-short_so6hn_1{0%{left:0;width:0}50%{left:0;width:0}75%{left:0;width:25%}to{left:110%;width:0}}._mbox_5x43w_1{--border-color: #dfdfdf;--title-color: #efefef;--content-color: #ffffff;border-radius:.5rem;border:1px solid var(--title-color);border-left:6px solid var(--border-color);overflow:hidden;margin-bottom:1rem;position:relative}._mbox_5x43w_1 ._title_5x43w_12{background-color:var(--title-color);padding:.5rem 1rem;font-weight:700;font-size:1rem;line-height:1.2}._mbox_5x43w_1 ._content_5x43w_19{background-color:var(--content-color);padding:.5rem 1rem;font-size:1rem;line-height:1.5;max-height:14em;overflow:auto}._mbox_5x43w_1 ._close_5x43w_27{position:absolute;top:.5rem;right:.5rem;font-size:1.25rem;line-height:1rem;color:var(--border-color);cursor:pointer;user-select:none}._mbox_5x43w_1 ._close_5x43w_27:hover{filter:brightness(1.2)}._mbox_5x43w_1 ._close_5x43w_27:active{filter:brightness(.8)}._mbox_5x43w_1.mbox-type-note,._mbox_5x43w_1.mbox-type-info{--border-color: #1f6feb;--title-color: #AFD1FE;--content-color: #f3f9ff}._mbox_5x43w_1.mbox-type-tip,._mbox_5x43w_1.mbox-type-success{--border-color: #238636;--title-color: #E0F1E3;--content-color: #f9f9f9}._mbox_5x43w_1.mbox-type-important,._mbox_5x43w_1.mbox-type-done{--border-color: #8957e5;--title-color: #DDCBFC;--content-color: #f9f9f9}._mbox_5x43w_1.mbox-type-warning{--border-color: #9e6a03;--title-color: #E4CC9D;--content-color: #fff9db}._mbox_5x43w_1.mbox-type-caution,._mbox_5x43w_1.mbox-type-error{--border-color: #da3633;--title-color: #FCB9B6;--content-color: #f9f9f9}._twinSwapInput_1gdgl_9{display:grid;grid-template-columns:1fr auto 1fr;grid-template-areas:"input-left swap-button input-right";gap:1rem;align-items:end}@media (max-width: 768px){._twinSwapInput_1gdgl_9{grid-template-columns:1fr;grid-template-areas:"input-left" "swap-button" "input-right";gap:.75rem}}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23{display:flex;flex-direction:column}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23._inputLeft_1gdgl_27{grid-area:input-left}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23._inputRight_1gdgl_30{grid-area:input-right}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 label{display:block;margin-bottom:.5em;font-weight:500;font-size:.875rem}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 input{width:100%}._twinSwapInput_1gdgl_9 ._inputWrapper_1gdgl_23 input:disabled{opacity:.75;cursor:not-allowed}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46{grid-area:swap-button;display:flex;align-items:center;justify-content:center}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button{position:relative;display:flex;align-items:center;justify-content:center;padding:0;border-radius:50%;width:2rem;height:2rem;border:none;background:#efefef;cursor:pointer;transition:all .2s ease}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:hover{background:#e0e0e0}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:active{background:#d0d0d0}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button:disabled{opacity:.75;cursor:not-allowed}._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button svg{transition:all .2s ease;width:1.25rem;height:1.25rem}@media (max-width: 768px){._twinSwapInput_1gdgl_9 ._swapButton_1gdgl_46 button{transform:rotate(90deg)}}._tabview_zlbug_1{font-size:14px}._tabview_zlbug_1 ._labels_container_zlbug_4{font-size:16px;list-style:none;margin:0;white-space:nowrap;overflow-x:auto}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4{flex:auto;padding:0;margin:0;display:inline-block;text-align:center;text-transform:uppercase}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4:not(:first-child){margin-left:.5em}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4 a{display:inline-block;padding:.25em .5em;text-decoration:none;color:#08d;cursor:pointer}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4:hover a{box-shadow:0 -2px #0088dd40 inset}._tabview_zlbug_1 ._labels_container_zlbug_4 ._label_zlbug_4._active_zlbug_32 a{box-shadow:0 -2px #08d inset}._tabview_zlbug_1 ._contents_container_zlbug_35{margin-top:1em}:root{--ipe-modal-z: 1000;--ipe-modal-backdrop-bg: rgba(0, 0, 0, .5);--ipe-modal-bg: #ffffff;--ipe-modal-secondary-bg: #eaecf0;--ipe-modal-text: #111827;--ipe-modal-text--rgb: 17, 24, 39;--ipe-modal-muted: #6b7280;--ipe-modal-accent: #3b82f6;--ipe-modal-accent--rgb: 59, 130, 246;--ipe-modal-success: #10b981;--ipe-modal-info: #3b82f6;--ipe-modal-warning: #f59e0b;--ipe-modal-danger: #ef4444;--ipe-modal-danger--rgb: 239, 68, 68;--ipe-modal-border-color: #eaecf0;--ipe-modal-divider-color: #e5e7eb;--ipe-modal-radius: 8px;--ipe-modal-button-radius: 10px;--ipe-modal-shadow: 0 0 40px rgba(127, 127, 127, .5);--ipe-modal-spacing: 12px;--ipe-modal-viewport-gap-y: 20px;--ipe-modal-window-max-w: 96vw;--ipe-modal-anim: none;--ipe-modal-safe-area-top: env(safe-area-inset-top);--ipe-modal-safe-area-bottom: env(safe-area-inset-bottom);--ipe-modal-vh: 100vh}@supports (height: 100dvh){:root{--ipe-modal-vh: 100dvh}}:root{--ipe-modal-window-max-h: calc( var(--ipe-modal-vh) - var(--ipe-modal-safe-area-top) - var(--ipe-modal-safe-area-bottom) - (var(--ipe-modal-viewport-gap-y) * 2) )}html.ipe-modal-no-scroll,body.ipe-modal-no-scroll{overflow:hidden!important;touch-action:none;-webkit-overflow-scrolling:auto}body.ipe-modal-no-scroll{position:fixed;width:100%;left:0;right:0}.ipe-modal-backdrop{position:fixed;inset:0;z-index:var(--ipe-modal-z);background:transparent;transition:background .18s ease;pointer-events:none}.ipe-modal-backdrop.is-open{background:var(--ipe-modal-backdrop-bg);pointer-events:auto}.ipe-modal-modal{position:fixed;inset:0;z-index:calc(var(--ipe-modal-z) + 1);outline:none;display:grid;align-items:start;justify-items:center;overflow:auto;opacity:0;transform:translateY(8px) scale(.98);transition:opacity .18s ease,transform .22s ease;pointer-events:none}.ipe-modal-modal.is-open{opacity:1;transform:none}.ipe-modal-modal.is-centered{display:grid;align-items:center}.ipe-modal-modal.is-centered .ipe-modal-modal__content{max-height:75dvh;overflow:auto}.ipe-modal-modal.is-fullscreen .ipe-modal-modal__window{width:100vw;height:var(--ipe-modal-vh);max-width:none;max-height:none;border-radius:0}.ipe-modal-modal.no-backdrop{position:absolute;inset:auto;display:block;padding:0;overflow:visible}.ipe-modal-modal.is-dragging{transition:none}.ipe-modal-modal.is-dragging .ipe-modal-modal__window{animation:none}.ipe-modal-modal.is-dragging .ipe-modal-modal__header{cursor:grabbing!important}.ipe-modal-modal__window{position:relative;background:var(--ipe-modal-bg);color:var(--ipe-modal-text);border-radius:var(--ipe-modal-radius);box-shadow:var(--ipe-modal-shadow);max-width:var(--ipe-modal-window-max-w);width:min(92vw,var(--ipe-modal-window-max-w));overflow:hidden;display:block;animation:var(--ipe-modal-anim, none) .22s ease-in-out both;pointer-events:auto;overscroll-behavior:contain;margin-top:var(--ipe-modal-viewport-gap-y, 20px);margin-bottom:var(--ipe-modal-viewport-gap-y, 20px)}.size--dialog{max-width:420px}.size--small{max-width:520px}.size--smallToMedium{max-width:640px}.size--medium{max-width:max(64%,860px)}.size--mediumToLarge{max-width:max(72%,1080px)}.size--large{max-width:max(80%,1200px)}.size--full{width:100vw;height:var(--ipe-modal-vh);max-width:none;max-height:none;border-radius:0}.size--auto{max-width:var(--ipe-modal-window-max-w)}.ipe-modal-modal__window.is-fixed-height{height:min(var(--ipe-modal-window-max-h),80vh)}.ipe-modal-modal__header{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:calc(var(--ipe-modal-spacing) * .75) var(--ipe-modal-spacing);border-bottom:1px solid var(--ipe-modal-divider-color)}.ipe-modal-modal__title{font-size:1.125rem;font-weight:700;line-height:1;margin:0}.ipe-modal-modal__icons{display:inline-flex;gap:6px}.ipe-modal-modal__icon{width:28px;height:28px;border-radius:8px;border:0;background:transparent}.ipe-modal-modal__close{margin-left:6px;width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:var(--ipe-modal-button-radius);background:transparent;font-size:22px;line-height:1;color:var(--ipe-modal-muted);cursor:pointer}.ipe-modal-modal__close:hover{background:#0000000f;color:var(--ipe-modal-text)}.ipe-modal-modal__content{padding:var(--ipe-modal-spacing);overflow:visible;-webkit-overflow-scrolling:touch}.ipe-modal-modal__footer{background:var(--ipe-modal-secondary-bg);display:flex;align-items:center;justify-content:space-between;gap:8px;padding:calc(var(--ipe-modal-spacing) * .75) var(--ipe-modal-spacing);border-top:1px solid var(--ipe-modal-divider-color)}.ipe-modal-modal__buttons{display:inline-flex;gap:8px}.ipe-modal-toast-container{position:fixed;z-index:2000;display:flex;flex-direction:column;gap:8px;align-items:flex-end;pointer-events:none}.ipe-modal-toast-container.top{top:16px}.ipe-modal-toast-container.bottom{bottom:16px;flex-direction:column-reverse}.ipe-modal-toast-container.right{right:16px}.ipe-modal-toast-container.left{left:16px}.ipe-modal-modal__window.plugin--toast{--type-color: var(--ipe-modal-bg);--text-color: var(--ipe-modal-text);width:300px;border-radius:calc(var(--ipe-modal-radius) * .75);margin-top:0;margin-bottom:0;border:0;border-left:calc(var(--ipe-modal-radius) * .75) solid var(--type-color)}.ipe-modal-modal__window.plugin--toast.type-default{--type-color: var(--ipe-modal-secondary-bg)}.ipe-modal-modal__window.plugin--toast.type-info{--type-color: var(--ipe-modal-info);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast.type-success{--type-color: var(--ipe-modal-success);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast.type-warning{--type-color: var(--ipe-modal-warning);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast.type-error{--type-color: var(--ipe-modal-danger);--text-color: #fff;--ipe-modal-muted: #fff}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header{padding:.5em;background-color:var(--type-color);color:var(--text-color);border-bottom:0}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header .ipe-modal-modal__title{display:flex;align-items:center}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__header .ipe-modal-modal__title .ipe-modal-notify-icon{margin-right:.5em;width:20px;height:20px}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__close{width:20px;height:20px;font-size:16px;color:var(--ipe-modal-muted)}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__content{padding:1em .5em}.ipe-modal-modal__window.plugin--toast .ipe-modal-modal__footer{padding:.5em;background-color:transparent;border-top:0}.ipe-modal-modal__window.plugin--toast .ipe-modal-btn{padding:.25em .75em!important}.ipe-modal-btn{--accent-color: #fff;--text-color: var(--ipe-modal-text);--active-color: rgba(0, 0, 0, .1);appearance:none;border:1px solid rgba(0,0,0,.14);background:var(--accent-color);color:var(--text-color);padding:8px 12px;border-radius:var(--ipe-modal-button-radius);cursor:pointer;font:inherit;transition:all .2s}.ipe-modal-btn:hover{background:#0000000a}.ipe-modal-btn:disabled{opacity:.6;cursor:not-allowed}.ipe-modal-btn:active{background:#0000000f;box-shadow:0 0 0 2px var(--active-color)}.ipe-modal-btn:focus{box-shadow:0 0 0 2px var(--active-color)}.ipe-modal-btn.is-primary{--accent-color: var(--ipe-modal-accent);--text-color: #fff;--active-color: rgba(var(--ipe-modal-accent--rgb), .5);border-color:var(--accent-color);background:var(--accent-color)}.ipe-modal-btn.is-danger{--accent-color: var(--ipe-modal-danger);--text-color: #fff;--active-color: rgba(var(--ipe-modal-danger--rgb), .2);border-color:var(--accent-color);background:var(--accent-color);color:var(--text-color)}.ipe-modal-btn.is-ghost,.ipe-modal-btn.is-text{background:transparent}.ipe-modal-btn.is-ghost.is-primary{color:var(--ipe-modal-accent)}.ipe-modal-btn.is-ghost.is-danger{color:var(--ipe-modal-danger)}.ipe-modal-btn.is-text{border:0}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer{padding:0}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__buttons--left,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__buttons--left{display:none}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__buttons--right,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__buttons--right{flex:1;width:100%;display:flex;gap:0}.ipe-modal-modal__window.size--dialog .ipe-modal-btn,.ipe-modal-modal__window.compact-buttons .ipe-modal-btn{flex:1;border:0;margin:0;padding:1rem;border-radius:0}.ipe-modal-modal__window.size--dialog .ipe-modal-btn:not(:first-child),.ipe-modal-modal__window.compact-buttons .ipe-modal-btn:not(:first-child){border-left:1px solid rgba(0,0,0,.06)}.ipe-modal-modal__window.size--dialog .ipe-modal-modal__footer,.ipe-modal-modal__window.compact-buttons .ipe-modal-modal__footer{background-color:transparent}@keyframes ipe-modal-fade-in{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}@keyframes ipe-modal-fade-out{0%{transform:scale(1);opacity:1}to{transform:scale(.85);opacity:0}}.theme-ipe{--color-primary: #36c;--color-primary-hover: #447ff5;--color-primary-active: #2a4b8d;--color-promary--rgb: 51, 102, 204;--color-white: #fff;--color-text-dark: #222;--color-text-medium: #252525;--color-text-hover: #454545;--color-bg-light: #f8f9fa;--color-bg-lighter: #fafafa;--color-bg-lightest: #f8f8f8;--color-bg-gray: #f4f4f4;--color-border-gray: #c8ccd1;--color-border-light: #efefef;--color-border-input: #ccc;--color-border-dark: #72777d;--color-border-disabled: #d6d6d6;--color-danger: #d33;--color-danger-hover: #ff4242;--color-danger-active: #d00;--color-danger--rgb: 211, 51, 51;--color-disabled-bg: #c8ccd1;--color-disabled-dark: #a0a0a0;--font-size-button: 14px;--font-size-label: 1rem;--font-weight-label: 700;--border-width: 1px;--border-width-radio-checked: 6px;--border-radius-button: 6px;--border-radius-input: 4px;--padding-button-y: .5em;--padding-button-x: 1em;--padding-button-dialog: 1em;--padding-input-y: .25em;--padding-input-x: .35em;--size-checkbox: 1.2em;--size-radio: 1.4em;--margin-checkbox-top: .15em;--margin-checkbox-right: .375em;--textarea-height: 50vh;--textarea-min-height: 20em;--line-height-input: 1.5em;--line-height-checkbox: 1.2em;--transition-fast: .1s;--transition-medium: .12s;--transition-slow: .2s;--ipe-modal-accent: var(--color-primary);--ipe-modal-danger: var(--color-danger);--ipe-modal-button-radius: var(--border-radius-button);font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.theme-ipe textarea[name=text]{width:100%;height:var(--textarea-height);min-height:var(--textarea-min-height);resize:vertical;border:var(--border-width) solid var(--color-border-input);border-radius:var(--border-radius-input);transition:border var(--transition-slow);line-height:var(--line-height-input);padding:var(--padding-input-y) var(--padding-input-x);outline:none}.theme-ipe textarea[name=text]:focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 var(--border-width) var(--color-primary)}.theme-ipe textarea[name=text]:disabled{background-color:var(--color-disabled-bg);color:var(--color-white);cursor:not-allowed}.theme-ipe .ipe-input-box label{display:block;font-size:.875rem;margin-bottom:.5em;font-weight:500}.theme-ipe .ipe-input-box input[type=text],.theme-ipe .ipe-input-box input[type=number],.theme-ipe .ipe-input-box input[type=email],.theme-ipe .ipe-input-box input[type=password],.theme-ipe .ipe-input-box input[type=url],.theme-ipe .ipe-input-box input[type=tel],.theme-ipe .ipe-input-box input[type=search]{width:100%}.theme-ipe input{padding:var(--padding-input-y) var(--padding-input-x);border:var(--border-width) solid var(--color-border-input);border-radius:var(--border-radius-input);transition:border var(--transition-slow);line-height:var(--line-height-input);outline:none}.theme-ipe input:focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 var(--border-width) var(--color-primary)}.theme-ipe label input[type=checkbox]+span,.theme-ipe label input[type=radio]+span{user-select:none;line-height:var(--line-height-checkbox)}.theme-ipe label input[type=checkbox]+span:before,.theme-ipe label input[type=radio]+span:before{content:" ";display:inline-block;width:var(--size-checkbox);height:var(--size-checkbox);margin-top:var(--margin-checkbox-top);margin-right:var(--margin-checkbox-right);border-radius:var(--border-radius-input);background-color:var(--color-bg-lightest);border:var(--border-width) solid var(--color-border-dark);cursor:pointer;transition:all var(--transition-medium)}.theme-ipe label input[type=radio]+span:before{border-radius:50%;box-sizing:border-box;vertical-align:text-bottom;width:var(--size-radio);height:var(--size-radio)}.theme-ipe label input[type=checkbox]:checked+span:before{content:" ";background-color:var(--color-primary);background-image:url(data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kOyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYgMTYiPjxnIGlkPSJjaGVja21hcmsiPjxwYXRoIGQ9Ik0xMy43NDkyKzMuNDkwOTVMNS44NjMxMisxMS42MzM3TDIuMjUwNzcrNy45NjA4MkwxLjQ4NzYrOC43NTc3OEw1Ljg2MzEyKzEzLjE5M0wxNC41MTI0KzQuMjg3OUwxMy43NDkyKzMuNDkwOTVaIiBvcGFjaXR5PSIxIiBmaWxsPSIjZmZmZmZmIi8+PC9nPjwvc3ZnPg==);background-repeat:no-repeat}.theme-ipe label input[type=radio]:checked+span:before{border-color:var(--color-primary);border-width:var(--border-width-radio-checked)}.theme-ipe label input[type=checkbox]:checked+span:hover:before{background-color:var(--color-primary-hover)}.theme-ipe label input[type=radio]:checked+span:hover:before{border-color:var(--color-primary-hover)}.theme-ipe label input[type=checkbox]:active+span:before,.theme-ipe label input[type=checkbox]:focus+span:before{box-shadow:0 0 0 2px rgba(var(--color-promary--rgb),.5);border-color:var(--color-primary)}.theme-ipe label input[type=checkbox],.theme-ipe label input[type=radio]{position:absolute;clip:rect(0,0,0,0)}.theme-ipe .cm-panel label input[type=checkbox],.theme-ipe .cm-panel label input[type=radio]{position:initial;clip:initial}.theme-ipe label input[type=checkbox]:disabled+span:before{border-color:var(--color-border-disabled)}.theme-ipe label input[type=radio]:disabled+span:before{background-color:var(--color-disabled-bg);border-color:var(--color-disabled-bg)}.theme-ipe label input[type=checkbox]:disabled:checked+span:before{background-color:var(--color-disabled-dark)}.theme-ipe label input[type=radio]:disabled:checked+span:before{background-color:var(--color-white)}.theme-ipe .ipe-radio-box span,.theme-ipe .ipe-checkbox span{vertical-align:middle}.skin-moeskin #ipe-edit-toolbox{bottom:5rem}._diff-container_lq0si_2{--primary-text-color: #333;--secondary-text-color: #888;--container-bg-color: #fff;--border-color: #ccc;--del-bg: #fadad7;--del-color: #b30000;--ins-bg: #eaf2c2;--ins-color: #406619;--chunk-header-color: #8a008b;--result-bg: #f5f5f5;background:var(--result-bg);padding:1rem;margin:0;border-radius:3px;font-family:Maple Mono NF CN,Maple Mono NF,Maple Mono,JetBrainsMono Nerd Font,JetBrains Mono NF,JetBrains Mono,Consolas,Courier New,monospace;white-space:pre-wrap;overflow-x:auto;line-height:1.4em;color:var(--secondary-text-color);transition:color .25s ease}._diff-container_lq0si_2:hover{color:var(--primary-text-color)}._diff-container_lq0si_2 del{text-decoration:line-through;color:var(--del-color);background:var(--del-bg)}._diff-container_lq0si_2 ins{background:var(--ins-bg);color:var(--ins-color);text-decoration:underline}._diff-container_lq0si_2 del,._diff-container_lq0si_2 ins{font-weight:700}._diff-container_lq0si_2 ._chunk-header_lq0si_44{color:var(--chunk-header-color);text-decoration:none}#ipe-edit-toolbox{font-size:16px;position:fixed;right:2em;bottom:2em;user-select:none;z-index:42}@media print{#ipe-edit-toolbox{display:none}}#ipe-edit-toolbox .ipe-toolbox-btn{color:#fff;background:#bebebe;height:1.5em;width:1.5em;font-size:1.5em;line-height:1;border:0;border-radius:50%;box-shadow:0 0 8px #7f7f7f80;text-shadow:0 0 2px #4c4c4c;padding:0;margin:0;cursor:pointer;display:flex;align-items:center;justify-content:center}#ipe-edit-toolbox .ipe-toolbox-btn svg,#ipe-edit-toolbox .ipe-toolbox-btn img{line-height:1;width:1em;height:1em;vertical-align:middle}#ipe-edit-toolbox #toolbox-toggler{position:absolute;right:0;bottom:0;width:2em;height:2em;background:#3f51b5;font-size:1.5em;line-height:1;margin:0;transition:transform .3s cubic-bezier(.68,-.55,.27,1.55);transform:rotate(0)}#ipe-edit-toolbox.is-persistent #toolbox-toggler{transform:rotate(45deg)}#ipe-edit-toolbox .btn-group.group1 .btn-tip-group{transform:translate3d(0,100%,0)}#ipe-edit-toolbox .btn-group.group2 .btn-tip-group{transform:translate3d(100%,0,0)}#ipe-edit-toolbox .btn-group .btn-tip-group{transition-timing-function:cubic-bezier(.68,-.55,.27,1.55);transition-duration:.3s;transition-delay:var(--transition-delay, 0s);opacity:0}#ipe-edit-toolbox.is-persistent .btn-group .btn-tip-group,#ipe-edit-toolbox.is-hovered .btn-group .btn-tip-group{transform:translateZ(0);opacity:1}#ipe-edit-toolbox:not(.is-persistent):not(.is-hovered) .btn-group .btn-tip-group{transition-delay:calc(var(--max-transition-delay) - var(--transition-delay))}#ipe-edit-toolbox.is-persistent .btn-group,#ipe-edit-toolbox.is-hovered .btn-group{transform:scaleZ(1)}#ipe-edit-toolbox .ipe-toolbox-btn#toolbox-toggler.click{box-shadow:0 0 4px gray,0 0 10px #444 inset}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-edit-btn{background:#2196f3}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-redirect-btn{background:#00bcd4}#ipe-edit-toolbox .ipe-toolbox-btn#redirectto-btn{background:#009688}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-delete-btn{background:#e91e63}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__quick-move-btn{background:#ff5722}#ipe-edit-toolbox .ipe-toolbox-btn#ipe-toolbox__preferences-btn{background:#ffc107}#ipe-edit-toolbox .btn-group{position:absolute;display:flex;gap:.5em;list-style:none;margin:0}#ipe-edit-toolbox .btn-group.group1{bottom:3.5em;right:.375em;flex-direction:column}#ipe-edit-toolbox .btn-group.group2{bottom:.25em;right:3.375em}#ipe-edit-toolbox.is-persistent .btn-group,#ipe-edit-toolbox.is-hovered .btn-group{visibility:visible}#ipe-edit-toolbox .btn-tip-group .btn-tip{position:absolute;text-align:center;font-size:12px;white-space:nowrap;left:50%;bottom:calc(100% + .5em);transform:translate(-50%);background:#fff;color:#252525;padding:.2em .5em;box-shadow:0 0 .5em #7f7f7f80;border-radius:.5em;pointer-events:none;opacity:0;transition:opacity .2s ease-in-out,bottom .2s ease-in-out}#ipe-edit-toolbox .btn-tip-group:hover .btn-tip{opacity:1;bottom:calc(100% + 1em)}#ipe-edit-toolbox .btn-tip-group .btn-tip:after{content:"";display:block;border:5px solid transparent;border-radius:2px;border-right-color:#fff;border-bottom-color:#fff;position:absolute;bottom:-8px;left:50%;transform:rotate(45deg) translate(-50%)}.tabs[data-v-e89c782f]{--border-color: #efefef;--tab-color: #666;--active-color: #3366bb;display:flex;gap:.5em;border-bottom:1px solid #efefef;margin-bottom:1em}.tabs .tab[data-v-e89c782f]{padding:.5em 1em;cursor:pointer;user-select:none;color:var(--tab-color);display:inline-block;transition:color .3s ease,box-shadow .3s ease}.tabs .tab.active[data-v-e89c782f]{color:var(--active-color);box-shadow:inset 0 -.15em 0 0 var(--active-color)}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const CALLABLE_APPLY_SYMBOL: unique symbol;
|
|
2
|
+
export declare const CALLABLE_CTOR_SYMBOL: unique symbol;
|
|
3
|
+
export declare function makeCallable<C extends object, M extends keyof C>(instance: C, method: M): C & ((...args: C[M] extends (...a: infer P) => any ? P : never) => C[M] extends (...a: any[]) => infer R ? R : never);
|