@yongdall/theme 0.6.6 → 0.7.0
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/hooks.d.mts +3 -0
- package/hooks.mjs +1 -1
- package/hooks.mjs.map +1 -1
- package/index.d.mts +14 -0
- package/index.mjs +2 -2
- package/index.mjs.map +1 -1
- package/package.json +4 -4
- package/style.css +1 -203
- package/theme-allSider.css +1 -202
- package/theme-base.css +1 -229
- package/theme-tabs.css +1 -262
- package/yongdall/enumeration.mjs +1 -1
- package/yongdall/enumeration.mjs.map +1 -1
- package/yongdall.assets.json +3 -7
- package/style.css.map +0 -1
- package/style.mjs +0 -0
- package/theme-allSider.css.map +0 -1
- package/theme-allSider.mjs +0 -0
- package/theme-base.css.map +0 -1
- package/theme-base.mjs +0 -0
- package/theme-tabs.css.map +0 -1
- package/theme-tabs.mjs +0 -0
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["prefix","#table","#thead","#createUrl","#renderList","#labelPattern","#fieldsShow","#idFields","#tr","#tbody","#documents","Pagination","#fns","#pagination","filter","header","main","allMenus","currentMenus","ac","prefix","header","sidebar","openedClassName","prefix","closeSidebarWhenMobile","Sider","#disabled","#hide","#shown","#click","sidebar","prefix","#children","Sider","span","#page","#parent","#hidden","#sides","addButton","theme","rootContainer","header","prefix","styleFiles","headerEl","header","sidebar","menuButton","span","openedClassName","tick","spinner","theme","rootContainer","prefix","theme","rootContainer","rootContainer"],"sources":["../../packages/theme/styles/variables.mjs","../../packages/theme/pageManager/index.mjs","../../packages/theme/components/List.mjs","../../packages/theme/components/Pagination.mjs","../../packages/theme/home/index.mjs","../../packages/theme/menu/createNavMenu.mjs","../../packages/theme/workspace/index.mjs","../../packages/theme/user/userAvatar.mjs","../../packages/theme/user/index.mjs","../../packages/theme/logo.mjs","../../packages/theme/error/index.mjs","../../packages/theme/theme-allSider/dom.mjs","../../packages/theme/theme-allSider/Sider.mjs","../../packages/theme/theme-allSider/Group.mjs","../../packages/theme/theme-allSider/sides.mjs","../../packages/theme/theme-allSider/AllSiderPage.mjs","../../packages/theme/menu/createMenu.mjs","../../packages/theme/menu/createMenuButtons.mjs","../../packages/theme/menu/createMenuItem.mjs","../../packages/theme/menu/createMenuButton.mjs","../../packages/theme/theme-allSider/index.mts","../../packages/theme/utils/addButton.mts","../../packages/theme/theme-base/index.mts","../../packages/theme/theme-pure/index.mts","../../packages/theme/theme-tabs/dom.mjs","../../packages/theme/theme-tabs/index.mts"],"sourcesContent":["export const cssPrefix = `YongDallTheme`;\n","import { effect, waitAbortSignal } from '@yongdall/web';\n/** @import { PageHandle, PageManager } from '@yongdall/web' */\nimport { cssPrefix } from '../styles/variables.mjs';\nconst prefix = `${cssPrefix}-activity`;\n\nexport const activityContainer = document.createElement('div');\nactivityContainer.classList.add(prefix);\n\n\n\n/**\n * @typedef {object} ButtonProxy\n * @property {HTMLElement} button\n * @property {HTMLAnchorElement} link\n * @property {ButtonProxy} [last]\n * @property {ButtonProxy} [next]\n */\n\n/** @type {Map<PageHandle, ButtonProxy>} */\nconst buttons = new Map();\n/** @type {ButtonProxy | undefined} */\nlet first;\nlet append = false;\n/**\n * \n * @param {boolean} a \n */\nexport function setMode(a){\n\tappend = a;\n}\n/** @type {PageManager} */\nconst pageManager = (page) => {\n\tconst button = document.createElement('div');\n\tbutton.classList.add(`${prefix}-page`);\n\tconst link = button.appendChild(document.createElement('a'));\n\tlink.classList.add(`${prefix}-title`);\n\tlink.href = page.href;\n\tlink.innerText = page.title;\n\tconst close = button.appendChild(document.createElement('button'));\n\tclose.type = 'button';\n\tclose.classList.add(`${prefix}-close`);\n\tclose.addEventListener('click', () => {\n\t\tpage.destroy();\n\t});\n\t/** @type {ButtonProxy} */\n\tconst btn = {\n\t\tbutton, link,\n\t\tnext: first,\n\t};\n\tif (first) { first.last = btn; }\n\tfirst = btn;\n\tbuttons.set(page, btn);\n\tactivityContainer.insertBefore(button, append ? null : activityContainer.firstChild);\n\n\teffect(() => { link.innerText = page.title; }, page.signal);\n\teffect(() => { link.href = page.href; }, page.signal);\n\n\teffect(() => {\n\t\tif (page.current) {\n\t\t\tbutton.classList.add(`${prefix}-current`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-current`);\n\t\t}\n\t}, page.signal);\n\teffect(() => {\n\t\tif (page.loading) {\n\t\t\tbutton.classList.add(`${prefix}-loading`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-loading`);\n\t\t}\n\t}, page.signal);\n\teffect(() => {\n\t\tif (page.unsaved) {\n\t\t\tbutton.classList.add(`${prefix}-unsaved`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-unsaved`);\n\t\t}\n\t}, page.signal);\n\twaitAbortSignal(page.signal).then(() => {\n\t\tconst { last, next } = btn;\n\t\tif (last) { last.next = next; }\n\t\tif (next) { next.last = last; }\n\t\tif (first === btn) { first = next; }\n\t\tbutton.remove();\n\t});\n};\nexport default pageManager;\n","/** @import { FieldScriptConfiguration, ModelScriptConfiguration } from '@yongdall/web' */\nimport { createShowField, Pattern } from '@yongdall/web';\n\n\nexport default class List {\n\t/** @type {((id: string) => string)?} */\n\t#createUrl;\n\t/** @type {readonly [string, FieldScriptConfiguration][]} */\n\t#fieldsShow;\n\t/** @type {string} */\n\t#labelPattern;\n\t/** @type {string[]} */\n\t#idFields;\n\t/** @type {readonly any[]} */\n\t#documents = [];\n\t#table = document.createElement('table');\n\t#thead = this.#table.appendChild(document.createElement('thead'));\n\t#tr = this.#thead.appendChild(document.createElement('tr'));\n\t#tbody = this.#table.appendChild(document.createElement('tbody'));\n\tget root() { return this.#table }\n\tget createUrl() {\n\t\treturn this.#createUrl;\n\t}\n\tset createUrl(fn) {\n\t\tconst createUrl = typeof fn === 'function' ? fn : null;\n\t\tif (this.#createUrl === createUrl) { return }\n\t\tthis.#createUrl = createUrl;\n\t\tthis.#renderList();\n\t}\n\t/**\n\t * \n\t * @param {(id: string) => string} createUrl \n\t * @param {ModelScriptConfiguration} model \n\t */\n\tconstructor(createUrl, model) {\n\t\tconst fieldsShow = Object.entries(model.fields).filter(([,{type}]) => type && typeof type !== 'object');\n\t\tconst idFields = Object.entries(model.fields).filter(([,v]) => v.primary).map(([v]) => v);\n\t\tconst labelPattern = model.labelPattern || '';\n\t\tthis.#labelPattern = labelPattern;\n\t\tthis.#createUrl = typeof createUrl === 'function' ? createUrl : null;\n\t\tthis.#fieldsShow = fieldsShow;\n\t\tthis.#idFields = idFields;\n\t\tconst tr = this.#tr;\n\t\ttr.innerHTML = '';\n\t\tconst th = tr.appendChild(document.createElement('th'));\n\t\tth.appendChild(document.createTextNode('#'));\n\t\tfor (const [name,field] of fieldsShow) {\n\t\t\tconst th = tr.appendChild(document.createElement('th'));\n\t\t\tth.appendChild(document.createTextNode(field.label || name));\n\t\t}\n\t}\n\t#renderList() {\n\t\tconst tbody = this.#tbody;\n\t\ttbody.innerHTML = '';\n\t\tconst idFields = this.#idFields;\n\t\tconst labelPattern = this.#labelPattern;\n\t\tconst fieldsShow = this.#fieldsShow;\n\t\tconst createUrl = this.#createUrl;\n\t\tfor (const r of this.#documents) {\n\t\t\tconst tr = tbody.appendChild(document.createElement('tr'));\n\t\t\tconst td = tr.appendChild(document.createElement('td'));\n\t\t\tconst label = Pattern.generate(labelPattern, r) || idFields.map(v => r[v]).join('$')\n\t\t\tif (createUrl) {\n\t\t\t\tconst a = td.appendChild(document.createElement('a'));\n\t\t\t\ta.href = createUrl(idFields.map(v => r[v]).join('$'));\n\t\t\t\ta.appendChild(document.createTextNode(label));\n\t\t\t} else {\n\t\t\t\ttd.appendChild(document.createTextNode(label));\n\t\t\t}\n\t\t\tfor (const [name,field] of fieldsShow) {\n\t\t\t\tconst td = tr.appendChild(document.createElement('td'));\n\t\t\t\tconst f = createShowField(name, field, {inline: true}, r);\n\t\t\t\ttd.appendChild(f.root);\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {readonly any[]} list \n\t */\n\tsetData(list) {\n\t\tthis.#documents = list;\n\t\tthis.#renderList();\n\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n","import { Pagination as NlPagination } from '@neeloong/components'\n\nexport default class Pagination {\n\t#fns;\n\t#pagination;\n\tconstructor() {\n\t\tconst pagination = /** @type {NlPagination} */(document.createElement('nl-pagination'));\n\t\tpagination.size = 20;\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"start\";\n\t\tpagination.appendChild(document.createTextNode('-'));\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"end\";\n\t\tpagination.appendChild(document.createTextNode('/'));\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"total\";\n\t\tpagination.appendChild(document.createElement('nl-pagination-prev')).innerText = '上一页';\n\t\tpagination.appendChild(document.createElement('nl-pagination-pager'));\n\t\tpagination.appendChild(document.createElement('nl-pagination-next')).innerText = '下一页';\n\t\tpagination.appendChild(document.createElement('nl-pagination-sizer'));\n\t\tconst fns = new Set();\n\t\t\n\t\tpagination.addEventListener('change', () => {\n\t\t\tfor (const fn of fns) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t})\n\t\tthis.#fns = fns;\n\t\tthis.#pagination = pagination;\n\n\t}\n\tget root() {return this.#pagination; }\n\tget size() { return this.#pagination.size}\n\tset size(v) { this.#pagination.size = v}\n\tget page() { return this.#pagination.page}\n\tset page(v) { this.#pagination.page = v}\n\tget total() { return this.#pagination.total}\n\tset total(v) { this.#pagination.total = v}\n\t/**\n\t * \n\t * @param {(p: Pagination) => void} listen \n\t * @returns {() => void}\n\t */\n\tlisten(listen) {\n\t\tconst fns = this.#fns;\n\t\tconst f = () => listen(this);\n\t\tfns.add(f);\n\t\treturn () => {fns.delete(f)}\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n","/** @import { HomeContext } from '@yongdall/web' */\n/**\n *\n * @param {string} href\n * @param {string} title\n */\nfunction createLink(href, title) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.title = title;\n\ta.style.display = 'block';\n\ta.appendChild(document.createTextNode(title));\n\treturn a;\n}\n\n\n/**\n * @param {HTMLElement} container\n */\nfunction renderHome(container) {\n}\n\n\n/**\n * \n * @param {HomeContext} homeContext \n */\nexport default function home(homeContext) {\n\thomeContext.listen('update', () => {\n\t\tconst { container } = homeContext;\n\t\tcontainer.innerHTML = '';\n\t\treturn renderHome(container);\n\t});\n}\n","import '@neeloong/components';\n/** @import { Menu } from '@yongdall/web' */\n/** @import {Collapse} from '@neeloong/components' */\nimport { Application, createNeverAbortedSignal, Ident, PageIdent, watch } from '@yongdall/web';\n\n\n\n/**\n * \n * @param {string} active \n * @param {Map<string, HTMLElement[]>} menuMap \n * @param {Map<string, [HTMLElement, number: number][]>} pathMenuMap \n * @returns {IterableIterator<HTMLElement[]>}\n */\nfunction* toFindPath(active, menuMap, pathMenuMap) {\n\tif (!active) { return; }\n\tconst index = active.indexOf('?');\n\tconst path = index < 0 ? active : active.slice(0, index);\n\tif (index >= 0 && index + 1 < active.length) {\n\t\tfor (const list = active.slice(index).split('&'); list.length; list.pop()) {\n\n\t\t\tconst menus = menuMap.get(`${path}${list.join('&')}`);\n\t\t\tif (!menus?.length) { continue; }\n\t\t\tyield menus;\n\t\t}\n\n\t}\n\n\tconst menus = menuMap.get(path);\n\tif (menus?.length) { yield menus; }\n\tconst pathMenus = pathMenuMap.get(path);\n\tif (pathMenus?.length) { yield pathMenus.map(v => v[0]); }\n}\n\n\n\n/**\n * \n * @param {string} active \n * @param {Map<string, HTMLElement[]>} menuMap \n * @param {Map<string, [HTMLElement, number: number][]>} pathMenuMap \n * @param {PageIdent?} ident \n * @param {Map<string, HTMLElement[]>} identMap \n * @returns {IterableIterator<HTMLElement[]>}\n */\nfunction* findMenu(active, menuMap, pathMenuMap, ident, identMap) {\n\tyield* toFindPath(active, menuMap, pathMenuMap);\n\tif (!ident) { return; }\n\tfor (const p of [...Ident.stringifyPaths(ident)].reverse()) {\n\t\tconst menus = identMap.get(p);\n\t\tif (!menus?.length) { continue; }\n\t\tyield menus;\n\t}\n}\n\n/**\n * \n * @param {HTMLElement} element \n * @returns {Iterable<Text>}\n */\nfunction* findTextNode(element) {\n\tconst walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);\n\tfor (let node; node = walker.nextNode();) {\n\t\t// @ts-ignore\n\t\tyield node;\n\t}\n}\n/**\n * \n * @param {string[]} texts \n * @param {HTMLElement} element \n * @returns {Range[]}\n */\nfunction filter(texts, element) {\n\tconst ranges = [];\n\n\tconst textNodes = [...findTextNode(element)].filter(n => n.nodeValue?.length);\n\tconst indexes = textNodes.reduce((list, currentValue) => {\n\t\tconst index = list[list.length - 1]?.[1] || 0;\n\t\treturn /** @type {[number, number, Text][]} */([...list, [\n\t\t\tindex,\n\t\t\tindex + (currentValue.nodeValue?.length || 0),\n\t\t\tcurrentValue,\n\t\t]]);\n\t}, /** @type {[number, number, Text][]} */([]));\n\tconst fullText = textNodes.map(n => n.nodeValue).join('');\n\n\tlet startIndex = 0;\n\tfor (const searchText of texts) {\n\t\tconst index = fullText.indexOf(searchText, startIndex);\n\t\tif (index === -1) { return []; }\n\t\tconst endIndex = index + searchText.length;\n\n\t\tconst start = indexes.findLast(([start]) => start <= index);\n\t\tif (!start) { return []; }\n\t\tconst end = indexes.findLast(([, end]) => end >= endIndex);\n\t\tif (!end) { return []; }\n\t\tstartIndex = index + searchText.length;\n\n\n\t\tconst range = new Range();\n\t\trange.setStart(start[2], index - start[0]);\n\t\trange.setEnd(end[2], endIndex - start[0]);\n\t\tranges.push(range);\n\t}\n\treturn ranges;\n}\n/**\n * \n * @param {Element} root \n * @param {(Menu | null)[]} menus \n * @param {object} [options] \n * @param {string | [string | null | undefined, PageIdent | null | undefined]} [options.active] \n * @param {AbortSignal} [options.signal] \n * @param {string} [options.filter] \n */\nexport default function createNavMenu(root, menus, options = {}) {\n\t/** @type {Map<string, [HTMLElement, number: number][]>} */\n\tconst pathMenuMap = new Map();\n\t/** @type {Map<string, HTMLElement[]>} */\n\tconst menuMap = new Map();\n\t/** @type {Map<string, HTMLElement[]>} */\n\tconst identMap = new Map();\n\t/** @type {HTMLElement?} */\n\tlet current = null;\n\t/** @type {HTMLElement[]} */\n\tconst allMenus = [];\n\t/** @type {(() => void)[]} */\n\tconst destroyList = [];\n\n\t/**\n\t * \n\t * @param {Menu | Menu.Button} menu \n\t * @param {HTMLElement} [el] \n\t */\n\tfunction createLink(menu, el) {\n\t\tconst link = document.createElement('a');\n\t\tconst item = link;\n\t\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\tlink.title = menu.title || '';\n\t\tconst { page, path, uri, target } = menu;\n\t\t/** @type {URL?} */\n\t\tlet url = null;\n\t\tconst ident = page && Ident.parse(page);\n\t\tif (ident) {\n\t\t\turl = new URL(PageIdent.stringify(ident, path), Application.root);\n\t\t\tlink.href = url.href;\n\t\t\tif (target && typeof target === 'string') { link.target = target; }\n\n\t\t} else if (uri) {\n\t\t\tlink.href = uri;\n\t\t\ttry {\n\t\t\t\turl = new URL(uri);\n\t\t\t\tif (url.origin !== location.origin) {\n\t\t\t\t\turl = null;\n\t\t\t\t}\n\t\t\t} catch { }\n\t\t\tif (target !== '') { link.target = target ?? '_blank'; }\n\t\t}\n\t\tif (url && (link.target || '_self') === '_self') {\n\t\t\tlink.addEventListener('click', () => {\n\t\t\t\tclickedItem = item;\n\t\t\t\trequestIdleCallback(() => {\n\t\t\t\t\tif (clickedItem !== item) { return; }\n\t\t\t\t\tclickedItem = null;\n\t\t\t\t});\n\t\t\t});\n\t\t\tconst { pathname: pathname, search } = url;\n\t\t\tconst fullPath = `${pathname}${search}`;\n\t\t\tconst list = menuMap.get(fullPath);\n\t\t\tif (list) {\n\t\t\t\tlist.push(item);\n\t\t\t} else {\n\t\t\t\tmenuMap.set(pathname, [item]);\n\t\t\t}\n\t\t\tconst list2 = pathMenuMap.get(fullPath);\n\t\t\tif (list2) {\n\t\t\t\tlist2.push([item, search.length]);\n\t\t\t} else {\n\t\t\t\tpathMenuMap.set(pathname, [[item, search.length]]);\n\t\t\t}\n\t\t\tif (ident && (!path || path[0] === '?' || path[0] === '#')) {\n\t\t\t\tconst key = Ident.stringify(ident);\n\t\t\t\tconst list = identMap.get(key);\n\t\t\t\tif (list) {\n\t\t\t\t\tlist.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tidentMap.set(key, [item]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn link;\n\t}\n\n\t/**\n\t * \n\t * @param {Menu.Button} button \n\t */\n\tfunction createButton(button) {\n\t\tconst link = createLink(button);\n\t\tlink.classList.add('NavMenu-button');\n\t\treturn link;\n\t}\n\t/** @type {HTMLElement?} */\n\tlet clickedItem = null;\n\n\t/**\n\t * \n\t * @param {Menu} menu \n\t * @param {number} level \n\t * @returns {{el: HTMLElement; filter(show: boolean, t?: string[]?): Range[]} | null}\n\t */\n\tfunction renderMenu(menu, level) {\n\t\tconst { children } = menu;\n\t\tif (!children.length) {\n\t\t\tconst item = document.createElement('div');\n\t\t\tconst link = item.appendChild(createLink(menu, item));\n\n\t\t\tfor (const button of menu.buttons || []) {\n\t\t\t\titem.appendChild(createButton(button));\n\t\t\t}\n\t\t\titem.classList.add('NavMenu-item');\n\t\t\tlink.classList.add('NavMenu-item-link');\n\t\t\treturn {\n\t\t\t\tel: item, filter(show, text) {\n\t\t\t\t\tconst list = text ? filter(text, link) : [];\n\t\t\t\t\titem.hidden = Boolean(!show && text && !list.length);\n\t\t\t\t\treturn list;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tconst item = /** @type {Collapse} */(document.createElement('nl-collapse'));\n\t\titem.setAttribute('animation', '');\n\t\titem.setAttribute('menu', '');\n\t\tconst header = item.appendChild(document.createElement('div'));\n\t\theader.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\theader.className = 'NavMenu-label';\n\t\theader.slot = 'label';\n\t\theader.style.flex = '1';\n\t\tfor (const button of menu.buttons || []) {\n\t\t\titem.appendChild(createButton(button)).slot = 'label';\n\t\t}\n\t\tconst childrenMenu = renderChildren(item, children, level + 1);\n\t\tif (!childrenMenu.length) { return null; }\n\t\treturn {\n\t\t\tel: item, filter(show, text) {\n\t\t\t\tif (!text) {\n\t\t\t\t\tfor (const menu of childrenMenu) { menu.filter(show); }\n\t\t\t\t\titem.hidden = false;\n\t\t\t\t\titem.open = false;\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tconst self = filter(text, header);\n\t\t\t\tconst hasSelf = Boolean(show || self.length);\n\n\t\t\t\tconst ranges = childrenMenu.flatMap(v => v.filter(hasSelf, text));\n\t\t\t\titem.open = Boolean(ranges.length);\n\t\t\t\tconst list = [...self, ...ranges];\n\t\t\t\titem.hidden = !show && !list.length;\n\t\t\t\treturn list;\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t * \n\t * @param {Element} parent \n\t * @param {(Menu | null)[]} menus \n\t * @param {number} level \n\t * @returns \n\t */\n\tfunction renderChildren(parent, menus, level) {\n\t\tlet has = false;\n\t\tlet divider = false;\n\t\tlet children = [];\n\t\tfor (const menu of menus) {\n\t\t\tif (!menu) {\n\t\t\t\tif (!has) { continue; }\n\t\t\t\tdivider = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (divider) {\n\t\t\t\tdivider = false;\n\t\t\t\tparent.appendChild(document.createElement('hr'));\n\t\t\t}\n\t\t\tconst item = renderMenu(menu, level);\n\t\t\tif (!item) { continue; }\n\t\t\tchildren.push(item);\n\t\t\thas = true;\n\t\t\tparent.appendChild(item.el);\n\t\t\tallMenus.push(item.el);\n\t\t\titem.el.style.setProperty('--NavMenu-level', String(level));\n\t\t}\n\t\treturn children;\n\t}\n\tconst menuList = renderChildren(root, menus, 0);\n\tlet destroyed = false;\n\tfunction destroy() {\n\t\tif (destroyed) { return; }\n\t\tdestroyed = true;\n\t\tfor (const m of allMenus) {\n\t\t\tm.remove();\n\t\t}\n\t\tfor (const destroy of destroyList) {\n\t\t\tdestroy();\n\t\t}\n\t}\n\tconst signal = options.signal || createNeverAbortedSignal();\n\tif (signal.aborted) {\n\t\tdestroy();\n\t} else {\n\t\tsignal.addEventListener('abort', destroy, { once: true });\n\t}\n\t/** @type {HTMLElement[]} */\n\tlet parents = [];\n\twatch(() => {\n\t\tconst active = options.active;\n\t\tif (!active) { return null; }\n\t\tif (typeof active === 'string') {\n\t\t\treturn active.replace(/#.*/, '') || '';\n\t\t}\n\t\tif (!Array.isArray(active)) { return null; }\n\t\tconst page = active[1] || null;\n\t\tif (!page) {\n\t\t\treturn active[0]?.replace(/#.*/, '') || null;\n\n\t\t}\n\t\t/** @type {[string, PageIdent | null]} */\n\t\tconst result = [active[0]?.replace(/#.*/, '') || '', active[1] || null];\n\t\treturn result;\n\t}, active => {\n\t\tif (!active) { return; }\n\t\tconst path = Array.isArray(active) ? active[0] : '';\n\t\tconst page = Array.isArray(active) ? active[1] : null;\n\t\tfor (const menus of findMenu(path, menuMap, pathMenuMap, page, identMap)) {\n\t\t\tconst clicked = clickedItem && menus.includes(clickedItem) ? clickedItem : null;\n\t\t\tif (clicked) { clickedItem = null; }\n\t\t\tif (!clicked && current && menus.includes(current)) { return; }\n\t\t\tconst menu = clicked || menus[0];\n\t\t\tconst list = [];\n\t\t\tlet parent = menu.parentElement;\n\t\t\tfor (; parent && parent !== root; parent = parent.parentElement) {\n\t\t\t\tlist.push(parent);\n\t\t\t}\n\t\t\tif (parent !== root) { return; }\n\t\t\tparents = list;\n\t\t\tcurrent?.classList.remove('NavMenu-current');\n\t\t\tfor (const item of parents) {\n\t\t\t\titem.setAttribute('open', '');\n\t\t\t}\n\t\t\tcurrent = menu;\n\t\t\tcurrent?.classList.add('NavMenu-current');\n\t\t\treturn;\n\t\t}\n\n\n\t}, { signal, immediate: true });\n\t/**\n\t * \n\t * @param {string} text \n\t * @returns \n\t */\n\treturn text => {\n\t\t/** @type {string[]?} */\n\t\tconst texts = text.toLowerCase().split(/[\\s\\n]+/).filter(Boolean);\n\t\tif (texts.length) {\n\t\t\treturn menuList.flatMap(v => v.filter(false, texts));\n\t\t}\n\t\tmenuList.flatMap(v => v.filter(false));\n\t\tfor (const item of parents) {\n\t\t\titem.setAttribute('open', '');\n\t\t}\n\t\treturn [];\n\t};\n}\n","import { Application, createComputed, createIcon, createState, effect, flatPermission, Menu, PageIdent, toPermissionFilter, User } from '@yongdall/web';\nimport createNavMenu from '../menu/createNavMenu.mjs';\n\n\n\n\nexport const menuContainer = document.createElement('div');\n\n\nmenuContainer.style.display = 'flex';\nmenuContainer.style.flexDirection = 'column';\nconst header = menuContainer.appendChild(document.createElement('header'));\nheader.classList.add('NavMenu-header');\nconst filter = header.appendChild(document.createElement('input'));\nfilter.placeholder = '过滤菜单...';\nfilter.type = 'search';\nconst refreshButton = header.appendChild(document.createElement('button'));\nrefreshButton.appendChild(createIcon('refresh', true));\nrefreshButton.classList.add('icon');\nrefreshButton.title = '刷新';\n\n\nconst main = menuContainer.appendChild(document.createElement('main'));\nmain.style.flex = '1';\nmain.style.overflow = 'auto';\nmain.classList.add('NavMenu');\nlet k = 0;\nlet loaded = false;\n/** @type {ReturnType<typeof createNavMenu>?} */\nlet navMenu = null;\nfunction filterMenu() {\n\tconst list = navMenu?.(filter.value) || [];\n\tconst highlight = new Highlight(...list);\n\tCSS.highlights.set(\"NavMenu-filter-highlight\", highlight);\n}\nfilter.addEventListener('input', filterMenu);\n\nconst allMenus = createComputed(\n\t() => Menu.fromDefine(Application.menus, [])\n);\nconst currentMenus = createComputed(() => {\n\tconst permissions = User.permissions;\n\tconst menus = allMenus.get();\n\tif (permissions.size < 0) { return menus; }\n\n\tconst filter = toPermissionFilter({\n\t\tpermissions,\n\t\torganizationPermissions: User.organizationPermissions,\n\t\tallOrganizationPermissions: User.allOrganizationPermissions,\n\t});\n\treturn Menu.filter(menus, m => {\n\t\tconst permissions = flatPermission(m.permission);\n\t\tif (!permissions.length) { return true; }\n\t\treturn Boolean(permissions.find(filter));\n\t});\n});\nconst currentPath = createState(/** @type {string | [string, PageIdent]} */(''));\n/** @type {AbortController?} */\nlet ac = null;\neffect(() => {\n\tac?.abort();\n\tmain.innerHTML = '';\n\tac = new AbortController();\n\tnavMenu = createNavMenu(main, currentMenus.get(), {\n\t\tsignal: ac.signal,\n\t\tget active() { return currentPath.get(); },\n\t});\n\tfilterMenu();\n});\n/**\n * \n * @param {string} path \n * @param {string} search \n * @param {string} hash \n * @param {(PageIdent & {path: string})?} page \n */\nexport function updatePath(path, search, hash, page) {\n\tif (!page) {\n\t\tcurrentPath.set(`${path}${search}`);\n\t\treturn;\n\t}\n\tcurrentPath.set([`${path}${search}`, page]);\n}\n\nrefreshButton.addEventListener('click', () => Application.loadMenus(true));\n","import { createComputed, createIcon, createNeverAbortedSignal, effect, User } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\n\n\n/**\n * \n * @param {string} avatar \n * @param {AbortSignal} signal\n * @param {boolean} [button] \n */\nfunction createAvatar(avatar, signal, button) {\n\tif (!avatar) {\n\t\tconst svg = createIcon('user', signal);\n\t\tif (!button) { svg.setAttribute('fill-opacity', '0.5'); }\n\t\treturn svg;\n\t}\n\tconst img = document.createElement('img');\n\timg.src = avatar;\n\treturn img;\n\n}\n/**\n * \n * @param {HTMLElement} root \n * @param {boolean} [button] \n * @param {AbortSignal} [signal] \n * @returns \n */\nexport function createUserAvatar(root, button, signal = createNeverAbortedSignal()) {\n\troot.classList.add(`${cssPrefix}-user-avatar`);\n\n\tconst sessionAvatarComputed = createComputed(() => User.single ? null : User.session?.avatar || '');\n\t/** @type {string?} */\n\tlet sessionAvatar = sessionAvatarComputed.get();\n\t/** @type {AbortController?} */\n\tlet sessionAbortController = new AbortController();\n\tconst sessionSignal = AbortSignal.any([sessionAbortController.signal, signal]);\n\tlet sessionAvatarElement = sessionAvatar === null\n\t\t? createIcon('singleUser', sessionSignal)\n\t\t: createAvatar(sessionAvatar, sessionSignal, button);\n\troot.appendChild(sessionAvatarElement);\n\teffect(() => {\n\t\tconst newAvatar = User.single ? null : User.session?.avatar || '';\n\t\tif (newAvatar === sessionAvatar) { return; }\n\t\tsessionAvatar = newAvatar;\n\t\tsessionAbortController?.abort();\n\t\tsessionAbortController = new AbortController();\n\n\t\tconst sessionSignal = AbortSignal.any([sessionAbortController.signal, signal]);\n\t\tconst newAvatarElement = sessionAvatar === null\n\t\t\t? createIcon('singleUser', sessionSignal)\n\t\t\t: createAvatar(sessionAvatar, sessionSignal, button);\n\t\tif (!button && sessionAvatar === null) {\n\t\t\tnewAvatarElement.setAttribute('fill-opacity', '0.5');\n\t\t}\n\t\troot.replaceChild(newAvatarElement, sessionAvatarElement);\n\t\tsessionAvatarElement.remove();\n\t\tsessionAvatarElement = newAvatarElement;\n\t}, signal);\n\n\tconst targetAvatarComputed = createComputed(() => {\n\t\tconst impersonation = User.impersonation;\n\t\tconst session = User.session;\n\t\tif (!impersonation) { return null; }\n\t\tif (impersonation.id === (session?.id || '')) { return null; }\n\t\treturn impersonation.avatar || '';\n\t});\n\t/** @type {string?} */\n\tlet targetAvatar = null;\n\t/** @type {Element?} */\n\tlet targetAvatarElement = null;\n\t/** @type {AbortController?} */\n\tlet targetAbortController = null;\n\teffect(() => {\n\t\tconst newAvatar = targetAvatarComputed.get();\n\t\tif (newAvatar === targetAvatar) { return; }\n\t\ttargetAvatar = newAvatar;\n\t\ttargetAvatarElement?.remove();\n\t\ttargetAvatarElement = null;\n\t\ttargetAbortController?.abort();\n\t\tif (newAvatar === null) { return; }\n\t\ttargetAbortController = new AbortController();\n\t\tconst targetSignal = AbortSignal.any([targetAbortController.signal, signal]);\n\t\ttargetAvatarElement = createAvatar(newAvatar, targetSignal, button);\n\t\troot.insertBefore(targetAvatarElement, sessionAvatarElement);\n\t}, signal);\n\n}\n","import { Application, createComputed, createIcon, effect, Menu, User, watch } from '@yongdall/web';\nimport { createUserAvatar } from './userAvatar.mjs';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport createNavMenu from '../menu/createNavMenu.mjs';\n\nexport const userContainer = document.createElement('div');\nuserContainer.classList.add(`${cssPrefix}-user`);\nexport const userButton = document.createElement('div');\nuserButton.classList.add(`${cssPrefix}-user-button`);\ncreateUserAvatar(userButton, true);\nconst userInfo = userContainer.appendChild(document.createElement('span'));\nuserInfo.classList.add(`${cssPrefix}-user-info`);\nconst avatar = userInfo.appendChild(document.createElement('span'));\ncreateUserAvatar(avatar);\navatar.classList.add('avatar');\nconst username = userInfo.appendChild(document.createElement('span'));\nusername.classList.add('username');\nusername.innerText = '用户名';\nconst btns = userInfo.appendChild(document.createElement('span'));\nbtns.classList.add('btns');\n\n/** @type {ChildNode} */\nlet helpEl = btns.appendChild(document.createComment(''));\nwatch(() => Application.help, (help, _help, onCleanup) => {\n\tif (!help) {\n\t\tconst el = document.createComment('');\n\t\thelpEl.replaceWith(el);\n\t\thelpEl = el;\n\t\treturn;\n\t}\n\tconst el = document.createElement('a');\n\tel.href = help;\n\tel.target = '_blank';\n\tel.appendChild(createIcon('help', onCleanup()));\n\tel.title = '帮助';\n\thelpEl.replaceWith(el);\n\thelpEl = el;\n}, { immediate: true });\n\nconst exitButton = btns.appendChild(document.createElement('div'));\nexitButton.appendChild(createIcon('logout', true));\nexitButton.title = '退出登录';\neffect(() => {\n\texitButton.hidden = !User.operator;\n});\nexitButton.addEventListener('click', () => User.exit(true));\n\neffect(() => {\n\tusername.innerText = User.operator?.name || '';\n});\n\n\nconst allMenus = createComputed(\n\t() => Menu.fromDefine(Application.userMenus, [])\n);\n\n\nconst currentMenus = createComputed(() => {\n\tconst menus = allMenus.get();\n\tif (User.operator) { return menus; }\n\treturn Menu.filter(menus, v => !v.logged);\n});\n\nconst main = userContainer.appendChild(document.createElement('main'));\nmain.style.flex = '1';\nmain.style.overflow = 'auto';\nmain.classList.add('NavMenu');\n\n/** @type {AbortController?} */\nlet ac = null;\neffect(() => {\n\tac?.abort();\n\tmain.innerHTML = '';\n\tac = new AbortController();\n\tcreateNavMenu(main, currentMenus.get(), {\n\t\tsignal: ac.signal,\n\t});\n});\n","\nimport { Application, createIcon, toFileLink, watch } from '@yongdall/web';\nimport { cssPrefix } from './styles/variables.mjs';\n\nconst logoLink = document.createElement('a');\nlogoLink.classList.add(`${cssPrefix}-logo`);\nwatch(() => Application.root, root => {\n\tlogoLink.href = root;\n}, { immediate: true });\nwatch(() => toFileLink(Application.logo), (logo, _logo, onCleanup) => {\n\tconst signal = onCleanup();\n\tlet logoEl;\n\tif (logo) {\n\t\tlogoEl = document.createElement('img');\n\t\tlogoEl.src = logo.href;\n\t} else {\n\t\tlogoEl = createIcon('logo', signal);\n\t}\n\tlogoLink.appendChild(logoEl);\n\tlogoEl.classList.add('logo');\n\tonCleanup(() => { logoEl.remove(); });\n}, { immediate: true });\nexport { logoLink };\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * @typedef {object} PageError\n * @property {string} title\n * @property {string} [description]\n */\n\n/** @type {Record<string, PageError>} */\nexport const errors = {\n\t404: {\n\t\ttitle: '您所请求的页面无法找到',\n\t\tdescription: '服务器无法正常提供信息。\\n目标页面可能已经被更改、删除或移到其他位置,或您所输入页面地址错误。',\n\t}\n};\n\n/**\n * @param {PageContext} ctx\n * @param {unknown} error\n */\nexport default function renderError(ctx, error) {\n\tif ((error ?? '') == '') {\n\t\tctx.container.appendChild(document.createTextNode('空页面'));\n\t\treturn;\n\t}\n\tconst e = (typeof error === 'number' || typeof error === 'string')\n\t\t&& Object.hasOwn(errors, error) && errors[error]\n\t\t|| errors['404'];\n\tconst title = e?.title || 'Error';\n\tconst info = e?.description;\n\tconst errorContainer = document.createElement('div');\n\tconst main = errorContainer.appendChild(document.createElement('div'));\n\tconst titleDiv = main.appendChild(document.createElement('div'));\n\tconst infoDiv = main.appendChild(document.createElement('div'));\n\terrorContainer.style.marginBlock = '8%';\n\terrorContainer.style.marginInline = 'auto';\n\terrorContainer.style.inlineSize = '600px';\n\terrorContainer.style.maxInlineSize = '100%';\n\terrorContainer.style.padding = '20px';\n\ttitleDiv.style.paddingBlock = '20px';\n\ttitleDiv.style.fontSize = '20px';\n\ttitleDiv.style.color = '#8e8e8e';\n\ttitleDiv.style.textAlign = 'center';\n\tinfoDiv.style.fontSize = '13px';\n\tinfoDiv.style.lineHeight = '1.3em';\n\tinfoDiv.style.color = '#b5b5b5';\n\ttitleDiv.appendChild(document.createTextNode(title));\n\tctx.title = title || 'Error';\n\tif (info && typeof info === 'string') {\n\t\tfor (const p of info.split('\\n')) {\n\t\t\tinfoDiv.appendChild(document.createTextNode(p));\n\t\t\tinfoDiv.appendChild(document.createElement('br'));\n\t\t}\n\t}\n\tctx.container.appendChild(errorContainer);\n\tctx.loading = false;\n}\n","import { cssPrefix } from '../styles/variables.mjs';\n\nexport const prefix = `${cssPrefix}-allSider-nav`\n\nexport const header = document.createElement('header');\nheader.className = `${prefix}-header`;\nexport const actions = header.appendChild(document.createElement('div'));\nactions.classList.add(`${prefix}-actions`)\nexport const sidebar = header.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n","import { createState } from '@yongdall/web';\nimport { prefix, sidebar } from './dom.mjs';\nconst openedClassName = `${prefix}-open`;\n/** @type {(() => void)?} */\nlet current = null;\n\nexport function closeSidebarWhenMobile() {\n\tif (window.innerWidth > 800) { return; }\n\tcurrent?.();\n}\n\nexport default class Sider {\n\t/** @readonly @type {HTMLElement} */\n\tbutton;\n\t/** @readonly @type {HTMLElement} */\n\tsider;\n\t/** @type {() => void} */\n\t#hide;\n\n\t#disabled = false;\n\tget disabled() { return this.#disabled; }\n\tset disabled(v) {\n\t\tif (v) {\n\t\t\tthis.disable();\n\t\t} else {\n\t\t\tthis.enable();\n\t\t}\n\t}\n\tdisable() {\n\t\tif (this.#disabled) { return; }\n\t\tthis.#disabled = true;\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t}\n\t\tthis.button.hidden = true;\n\t\tthis.sider.hidden = true;\n\t\t// TODO: 隐藏分组\n\t}\n\tenable() {\n\t\tif (!this.#disabled) { return; }\n\t\tthis.#disabled = false;\n\t\tthis.button.hidden = false;\n\t\t// TODO: 显示分组\n\t}\n\t#click = () => this.toggle();\n\t/**\n\t * \n\t * @param {HTMLElement} [siderContainer] \n\t * @param {HTMLElement} [buttonContainer] \n\t */\n\tconstructor(siderContainer, buttonContainer) {\n\t\tconst button = buttonContainer instanceof HTMLElement\n\t\t\t? buttonContainer\n\t\t\t: document.createElement('div');\n\t\tconst sider = siderContainer instanceof HTMLElement\n\t\t\t? siderContainer\n\t\t\t: document.createElement('div');\n\t\tbutton.tabIndex = 0;\n\t\tbutton.classList.add(`${prefix}-button`);\n\t\tsider.hidden = true;\n\t\tsidebar.appendChild(sider);\n\t\tbutton.classList.add(`${prefix}-selectable`);\n\t\tconst hide = () => {\n\t\t\tcurrent = null;\n\t\t\tdocument.body.classList.remove(openedClassName);\n\t\t\tbutton.classList.remove(`${prefix}-selected`);\n\t\t\tsider.hidden = true;\n\t\tthis.#shown.set(false);\n\t\t};\n\t\tbutton.addEventListener('click', this.#click);\n\t\tthis.#hide = hide;\n\t\tthis.button = button;\n\t\tthis.sider = sider;\n\t}\n\t#shown = createState(false);\n\tget shown() { return this.#shown.get(); }\n\tset shown(p) {\n\t\tif (p) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\tget hidden() { return this.button.hidden; }\n\tset hidden(v) {\n\t\tthis.button.hidden = Boolean(v);\n\t\tif (!v) { return; }\n\t\tthis.hide();\n\t}\n\tget open() { return current === this.#hide; }\n\tset open(p) {\n\t\tif (p) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\tshow() {\n\t\tif (this.hidden) { return; }\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) { return; }\n\t\tcurrent?.();\n\t\tcurrent = hide;\n\t\tdocument.body.classList.add(openedClassName);\n\t\tthis.button.classList.add(`${prefix}-selected`);\n\t\tthis.sider.hidden = false;\n\t\tthis.#shown.set(true);\n\t}\n\ttoggle() {\n\t\tif (this.hidden) { return; }\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t\treturn;\n\t\t}\n\t\tthis.show();\n\t}\n\thide() {\n\t\tif (this.hidden) { return; }\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current !== hide) { return; }\n\t\thide();\n\t}\n\tremove() {\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t}\n\t\tconst { button, sider } = this;\n\t\tbutton.remove();\n\t\tsider.remove();\n\t\tbutton.classList.remove(`${prefix}-button`);\n\t\tbutton.classList.remove(`${prefix}-selectable`);\n\t\tbutton.removeEventListener('click', this.#click);\n\t\tsider.hidden = false;\n\t\t// TODO: ...\n\t\t// TODO: 隐藏分组\n\t}\n}\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tcurrent?.();\n});\n","import Sider, { closeSidebarWhenMobile } from './Sider.mjs';\nimport { prefix } from './dom.mjs';\n\n\n\nexport default class Group {\n\t/** @readonly */\n\troot = document.createElement('div');\n\t/** @type {Set<() => void>} */\n\t#children = new Set()\n\t/**\n\t * \n\t * @param {HTMLElement} parent \n\t */\n\tconstructor(parent) {\n\t\tconst root = this.root;\n\t\tparent.appendChild(root);\n\t\troot.className = `${prefix}-group`;\n\t}\n\tremove() {\n\t\tthis.root.remove();\n\t\tfor (const r of [...this.#children]) {\n\t\t\tr();\n\t\t}\n\t}\n\tcreateGroup() {\n\t\tconst group = new Group(this.root);\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); group. remove(); }\n\t\tchildren.add(remove);\n\t\treturn group;\n\t}\n\t/**\n\t * \n\t * @overload\n\t * @param {true} isLink \n\t * @returns {HTMLAnchorElement}\n\t */\n\t/**\n\t * \n\t * @overload\n\t * @param {boolean} [isLink] \n\t * @returns {HTMLElement}\n\t */\n\t/**\n\t * \n\t * @param {boolean} [isLink] \n\t * @returns {HTMLElement}\n\t */\n\tcreateAction(isLink) {\n\t\tconst btn = document.createElement(isLink ? 'a' : 'div');\n\t\tbtn.tabIndex = 0;\n\t\tbtn.classList.add(`${prefix}-button`);\n\t\tbtn.addEventListener('click', () => { closeSidebarWhenMobile(); });\n\t\tthis.root.appendChild(btn);\n\n\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); btn.remove(); }\n\t\tchildren.add(remove);\n\t\treturn btn;\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} [siderContainer] \n\t * @param {HTMLElement} [buttonContainer] \n\t */\n\tcreateSider(siderContainer, buttonContainer) {\n\t\tconst sider = new Sider(siderContainer, buttonContainer);\n\t\tthis.root.appendChild(sider.button);\n\n\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); sider.remove(); }\n\t\tchildren.add(remove);\n\t\treturn sider;\n\t}\n}\n","import Group from './Group.mjs';\nimport { actions } from './dom.mjs';\nexport const pageSiderContainer = document.createElement('div');\nexport const startGroup = new Group(actions);\nexport const pageGroup = new Group(actions);\nexport const mainGroup = new Group(actions);\nexport const span = actions.appendChild(document.createElement('span'));\nexport const endGroup = new Group(actions);\n\nexport const pageSider = pageGroup.createSider(pageSiderContainer);\npageSider.button.innerText = '页面';\npageSider.disabled = true;\n","import { pageSider, pageSiderContainer } from './sides.mjs';\n\nimport { PageSider, Page } from '@yongdall/web';\n\n\nclass Sider extends PageSider {\n\t#page;\n\t#parent;\n\t/**\n\t * @param {AllSiderPage} page \n\t * @param {ParentNode} parent \n\t * @param {Node?} next \n\t * @param {boolean} inserted \n\t * @param {AbortSignal} signal \n\t * @param {ParentNode} parent \n\t * @returns \n\t */\n\tconstructor(page, parent, next, inserted, signal) {\n\t\tsuper(parent, next, inserted, signal);\n\t\tthis.#page = page;\n\t\tthis.#parent = parent;\n\t\tsignal.addEventListener('abort', () => {\n\t\tthis.#hidden();\n\t\t})\n\t}\n\tinsert() {\n\t\tsuper.insert();\n\n\t\tif (this.#page.show) { pageSider.disabled = false; }\n\t}\n\t#hidden() {\n\t\tif (this.#page.show && !this.#parent.children.length) {\n\t\t\tpageSider.disabled = true;\n\t\t}\n\t}\n\tremove() {\n\t\tsuper.remove();\n\t\tthis.#hidden();\n\t}\n\n}\n\nexport default class AllSiderPage extends Page {\n\t#sides = (() => {\n\t\tconst sides = document.createElement('div');\n\t\tsides.classList.add('Page-sides');\n\t\tpageSiderContainer.appendChild(sides);\n\t\treturn sides;\n\t})();\n\tdestroy() {\n\t\tif (!super.destroy()) { return false; }\n\t\tthis.#sides.remove();\n\t\treturn true;\n\t}\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\ttoggle(show) {\n\t\tsuper.toggle(show);\n\t\t// TODO: 区别区域\n\t\tpageSider.disabled = !(show && this.#sides.children.length);\n\t}\n\tget siderOpen() { return pageSider.open; }\n\tset siderOpen(open) {\n\t\t// TODO: 判断是不是当前的\n\t\tif (open) {\n\t\t\tpageSider.show();\n\t\t} else {\n\t\t\tpageSider.hide();\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageSider}\n\t */\n\tcreateSider(inserted, signal) {\n\t\tif (this.destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tsignal?.throwIfAborted();\n\t\tconst parent = this.#sides;\n\t\treturn new Sider(\n\t\t\tthis,\n\t\t\tparent,\n\t\t\tnull,\n\t\t\tinserted !== false,\n\t\t\tsignal instanceof AbortSignal\n\t\t\t\t? AbortSignal.any([signal, this.signal])\n\t\t\t\t: this.signal\n\t\t);\n\t}\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\tconstructor(show) {\n\t\tsuper(show);\n\t\tif (show) {\n\t\t\tpageSider.disabled = !this.#sides.children.length;\n\t\t}\n\t}\n}\n","import '@neeloong/components';\n/** @import { Menu } from '@yongdall/web' */\n/** @import { Menu as NeeloongMenu } from '@neeloong/components'*/\n\n\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu.RendererOptions} options \n */\nexport default function createMenu(menus, options) {\n\tconst {create} = options;\n\t/** @type {NeeloongMenu} */\n\t// @ts-ignore\n\tconst parent = document.createElement('nl-menu');\n\tlet has = false;\n\tlet divider = false;\n\tconst createDivider = () => {\n\t\thas = true;\n\t\tif (!divider) { return; }\n\t\tdivider = false;\n\t\tparent.appendChild(document.createElement('hr'));\n\t};\n\tfor (const menu of menus) {\n\t\tif (!menu) {\n\t\t\tif (!has) { continue; }\n\t\t\tdivider = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst { children } = menu;\n\t\tif (!children?.length) {\n\t\t\tconst result = create(menu);\n\t\t\tif (!result) { continue; }\n\t\t\tcreateDivider();\n\t\t\tparent.appendChild(result);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = createMenu(children, options);\n\t\tif (!child) { continue; }\n\t\tcreateDivider();\n\n\t\tconst item = parent.appendChild(child);\n\t\tconst header = item.insertBefore(document.createElement('div'), item.firstChild);\n\t\theader.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\theader.slot = 'label';\n\t}\n\tif (!has) { return null; }\n\treturn parent;\n}\n","import '@neeloong/components';\nimport createMenu from './createMenu.mjs';\n/** @import { Menu } from '@yongdall/web' */\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu.RendererOptions} options \n */\nexport default function createMenuButtons(menus, options) {\n\tif (options.signal.aborted) { return null; }\n\tconst {create} = options;\n\tconst root = document.createElement('div');\n\tlet has = false;\n\tlet divider = false;\n\tconst createDivider = () => {\n\t\thas = true;\n\t\tif (!divider) { return; }\n\t\tdivider = false;\n\t\troot.appendChild(document.createElement('hr'));\n\t};\n\tfor (const menu of menus) {\n\t\tif (!menu) {\n\t\t\tif (!has) { continue; }\n\t\t\tdivider = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst { children } = menu;\n\t\tif (!children?.length) {\n\t\t\tconst button = create(menu, { button: true });\n\t\t\tif (!button) { continue; }\n\t\t\tcreateDivider();\n\t\t\troot.appendChild(button);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = createMenu(children, options);\n\t\tif (!child) { continue; }\n\t\tcreateDivider();\n\t\tconst button = root.appendChild(document.createElement('button'));\n\t\tbutton.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\tchild.targetElement = button;\n\t\tbutton.addEventListener('click', () => child.show?.());\n\t\troot.appendChild(child);\n\t}\n\tif (!root.childNodes.length) { return null; }\n\troot.classList.add('MenuButtons');\n\treturn root;\n}\n","import { Application, createComputed, effect, isMac } from '@yongdall/web';\n/** @import { Menu } from '@yongdall/web' */\n\n\n/**\n * \n * @param {Menu.Renderer.Command} item \n */\nfunction getUri(item) {\n\tconst { page } = item;\n\tif (page) {\n\t\tconst { path } = item;\n\t\treturn new URL(path?.[0] === '/' ? `${page}${path}` : `${page}/${path || ''}`, Application.root).href;\n\t}\n\tconst { uri } = item;\n\tif (uri) { return uri; }\n\treturn null;\n}\n/**\n * \n * @param {Menu} menu \n * @param {Menu.Renderer.Options} options \n * @returns {HTMLElement}\n */\nexport default function createMenuItem(menu, options) {\n\tconst { signal, button: isButton } = options;\n\tconst link = document.createElement('a');\n\tconst button = isButton ? document.createElement('button') : null;\n\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\n\tconst { commands } = options;\n\n\tconst disabled = createComputed(() => {\n\t\tif (menu.disabled) { return true; }\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn Boolean(cmd ? cmd.disabled : options.disabled(menu));\n\t});\n\n\tconst href = createComputed(() => {\n\t\tconst href = getUri(menu);\n\t\tif (href) { return href; }\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn cmd ? getUri(cmd) || null : options.uri(menu) || null;\n\t});\n\tfunction click() {\n\t\tconst { click } = menu;\n\t\tif (typeof click === 'function') { return click(); }\n\t\tconst { script } = menu;\n\t\tif (script) {\n\t\t\t// TODO:\n\t\t\treturn;\n\t\t}\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn cmd ? cmd.click?.() : options.click(menu);\n\t}\n\teffect(() => {\n\t\tconst isDisabled = disabled.get();\n\t\t// @ts-ignore\n\t\tlink.disabled = isDisabled;\n\t\tlink.ariaDisabled = isDisabled ? 'true' : 'false';\n\t\tif (isDisabled) {\n\t\t\tlink.removeAttribute('tabindex');\n\t\t\tlink.removeAttribute('href');\n\t\t\tlink.removeAttribute('target');\n\t\t} else {\n\t\t\tlink.tabIndex = 0;\n\t\t\tlet target = '';\n\t\t\tconst hrefValue = href.get();\n\t\t\tif (hrefValue) {\n\t\t\t\tlink.href = hrefValue;\n\t\t\t\ttarget = menu.target || (menu.page ? '_self' : '');\n\t\t\t}\n\t\t\tif (target) {\n\t\t\t\tlink.target = target;\n\t\t\t} else {\n\t\t\t\tlink.removeAttribute('target');\n\t\t\t}\n\t\t}\n\t\tif (button) {\n\t\t\tbutton.disabled = isDisabled;\n\t\t}\n\t}, signal);\n\tlink.addEventListener('click', (e) => {\n\t\tif (!disabled.get()) { return; }\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}, { capture: true });\n\tlink.addEventListener('click', (e) => {\n\t\tif (disabled.get()) { return; }\n\t\tif (e.defaultPrevented) { return; }\n\t\tif (href.get()) {\n\t\t\tif (e.shiftKey) { return; }\n\t\t\tif (isMac ? e.metaKey : e.ctrlKey) { return; }\n\t\t\tif (e.altKey) { return; }\n\t\t}\n\t\tif (click() === false) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\tif (button) {\n\t\tbutton.appendChild(link);\n\t\treturn button;\n\t}\n\treturn link;\n\n}\n","import '@neeloong/components';\nimport createMenu from './createMenu.mjs';\nimport { createIcon } from '@yongdall/web';\n/** @import { Menu } from '@yongdall/web' */\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu?} menu\n * @param {Menu.RendererOptions} options \n */\nexport default function createMenuButton(menus, menu, options) {\n\tconst root = document.createElement('div');\n\tconst child = createMenu(menus, options);\n\tif (!child) { return null; }\n\tconst button = root.appendChild(document.createElement('button'));\n\tconst label = menu?.label || menu?.title || '';\n\tif (label) {\n\t\tbutton.appendChild(document.createTextNode(label));\n\t} else {\n\t\tbutton.appendChild(createIcon(menu?.icon || 'more', options.signal));\n\t}\n\tchild.targetElement = button;\n\tbutton.addEventListener('click', () => child.show());\n\troot.appendChild(child);\n\treturn root;\n}\n","import type { NavButton, Theme } from '@yongdall/web';\nimport { Application, createComputed, createFrame, createIcon, createState, effect, ErrorAlerter, loadNavButtons, root as rootContainer } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport pageManager, { activityContainer, setMode } from '../pageManager/index.mjs';\n\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport { actions, header } from './dom.mjs';\nimport { closeSidebarWhenMobile } from './Sider.mjs';\nimport { endGroup, startGroup } from './sides.mjs';\nimport AllSiderPage from './AllSiderPage.mjs';\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\n\n\nfunction addButton({\n\thidden, title, disabled, createIcon: createButtonIcon,\n\tcreatePanel, href, click,\n}: NavButton, signal: AbortSignal) {\n\tif (signal.aborted) { return; }\n\tconst shown = createState(createState(false));\n\tconst ctx: NavButton.Context = {\n\t\tget shown() { return shown.get().get(); },\n\t\tget signal() { return signal; },\n\t}\n\tlet button: HTMLElement\n\tif (createPanel) {\n\t\tconst sider = startGroup.createSider(createPanel(ctx));\n\t\tbutton = sider.button;\n\t\tshown.set(createComputed(() => sider.shown));\n\t\tsignal.addEventListener('abort', () => { sider.remove(); }, { once: true });\n\t} else if (href) {\n\t\tconst action = startGroup.createAction(true);\n\t\teffect(() => {\n\t\t\tconst url = !disabled?.(ctx) && href(ctx);\n\t\t\tif (url) { action.href = url; }\n\t\t\telse { action.removeAttribute('href'); }\n\t\t}, signal);\n\t\tif (click) {\n\t\t\taction.addEventListener('click', event => {\n\t\t\t\tif (click(ctx) === false) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}, { signal });\n\t\t}\n\t\tbutton = action;\n\t\tsignal.addEventListener('abort', () => { action.remove(); }, { once: true });\n\n\t} else {\n\n\t\tconst action = startGroup.createAction();\n\t\tif (disabled) {\n\t\t\teffect(() => {\n\t\t\t\tif (disabled(ctx)) {\n\n\t\t\t\t\taction.removeAttribute('tabIndex');\n\t\t\t\t} else {\n\t\t\t\t\taction.tabIndex = 0;\n\t\t\t\t}\n\t\t\t}, signal);\n\t\t}\n\t\tif (click) {\n\t\t\taction.addEventListener('click', () => { click(ctx) }, { signal });\n\t\t}\n\t\tbutton = action;\n\t\tsignal.addEventListener('abort', () => { action.remove(); }, { once: true });\n\n\t}\n\tif (hidden) {\n\t\teffect(() => { button.hidden = hidden(ctx); }, signal);\n\t}\n\tif (title) {\n\t\teffect(() => { button.title = title(ctx) }, signal);\n\t}\n\tif (createButtonIcon) {\n\t\tbutton.appendChild(createButtonIcon(ctx));\n\t} else {\n\t\tbutton.appendChild(createIcon(['icon', 'logo'], signal));\n\t}\n}\nconst theme: Theme = {\n\ttitle(p) { return [p.title, Application.title || '拥道YongDall'].filter(Boolean).join(' | ') },\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager,\n\telements: [rootContainer, header],\n\tclassNames: [cssPrefix, `${cssPrefix}-allSider`],\n\tstyleFiles: ['theme-allSider.css'],\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new AllSiderPage(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tasync setup(signal) {\n\t\tsetMode(false);\n\t\tlogoLink.addEventListener('click', () => { closeSidebarWhenMobile(); }, { signal });\n\t\tactions.insertBefore(logoLink, actions.firstElementChild);\n\n\t\tconst workspaceSider = startGroup.createSider(menuContainer);\n\t\tworkspaceSider.button.appendChild(createIcon('menu', signal));\n\t\tworkspaceSider.button.title = '菜单';\n\t\tconst activitySider = startGroup.createSider(activityContainer);\n\t\tactivitySider.button.appendChild(createIcon('activity', signal));\n\t\tactivitySider.button.title = '活动';\n\t\tif (window.innerWidth > 800) {\n\t\t\tworkspaceSider.show();\n\t\t}\n\n\t\tconst userSider = endGroup.createSider(userContainer, userButton);\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\tworkspaceSider.remove();\n\t\t\tactivitySider.remove();\n\t\t\tuserSider.remove();\n\t\t}, { once: true });\n\t\tfor await (const button of loadNavButtons()) {\n\t\t\tif (signal.aborted) { return; }\n\t\t\taddButton(button, signal);\n\t\t}\n\t},\n\n};\n\nexport default theme\n","import { type NavButton, createState, createComputed, effect, createIcon } from '@yongdall/web';\n\nexport function addButton(anchor: Node, container: ParentNode, {\n\thidden, title, disabled, createIcon: createButtonIcon,\n\tcreatePanel, href, click,\n}: NavButton, signal: AbortSignal) {\n\tif (signal.aborted) { return; }\n\tconst parent = anchor.parentNode;\n\tif (!parent) { return; }\n\tconst shown = createState(createState(false));\n\tconst ctx: NavButton.Context = {\n\t\tget shown() { return shown.get().get(); },\n\t\tget signal() { return signal; },\n\t};\n\tlet button;\n\tif (createPanel) {\n\t\tconst btn = document.createElement('div');\n\t\tconst panel = createPanel(ctx);\n\t\tbutton = btn;\n\t\tconst panelShown = createState(true);\n\t\tshown.set(createComputed(() => !shown.get()));\n\n\t\tcontainer.appendChild(panel);\n\t\tbtn.addEventListener('click', () => { panel.showPopover(); }, { signal });\n\t\tpanel.setAttribute('popover', 'auto');\n\t\tpanel.addEventListener('toggle', event => { panelShown.set(event.newState === 'closed'); }, { signal });\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tpanel.removeAttribute('popover');\n\t\t\tpanel.remove();\n\t\t}, { once: true });\n\t} else if (href) {\n\t\tconst action = document.createElement('a');\n\t\tif (click) {\n\t\t\taction.addEventListener('click', event => {\n\t\t\t\tif (click(ctx) === false) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}, { signal });\n\t\t}\n\t\teffect(() => {\n\t\t\tconst url = !disabled?.(ctx) && href(ctx);\n\t\t\tif (url) { action.href = url; }\n\t\t\telse { action.removeAttribute('href'); }\n\t\t}, signal);\n\t\tbutton = action;\n\t} else {\n\t\tconst action = document.createElement('div');\n\t\tif (click) {\n\t\t\taction.addEventListener('click', () => { click(ctx) }, { signal });\n\t\t}\n\t\tif (disabled) {\n\t\t\teffect(() => {\n\t\t\t\tif (disabled(ctx)) {\n\n\t\t\t\t\taction.removeAttribute('tabIndex');\n\t\t\t\t} else {\n\t\t\t\t\taction.tabIndex = 0;\n\t\t\t\t}\n\t\t\t}, signal);\n\t\t}\n\t\tbutton = action;\n\t}\n\tif (hidden) {\n\t\teffect(() => { button.hidden = hidden(ctx); }, signal);\n\t}\n\tif (title) {\n\t\teffect(() => { button.title = title(ctx); }, signal);\n\t}\n\tparent.insertBefore(button, anchor);\n\tif (createButtonIcon) {\n\t\tbutton.appendChild(createButtonIcon(ctx));\n\t} else {\n\t\tbutton.appendChild(createIcon(['icon', 'logo'], signal));\n\t}\n\tsignal.addEventListener('abort', () => { button.remove(); }, { once: true });\n}\n","import type { State, Theme } from '@yongdall/web';\nimport { createFrame, createTick, ErrorAlerter, loadNavButtons, Page, root as rootContainer } from '@yongdall/web';\nimport { Application, createIcon, effect } from '@yongdall/web';\n\nimport { cssPrefix } from '../styles/variables.mjs';\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\nimport { addButton } from '../utils/addButton.mts';\n\n\n\nconst prefix = `${cssPrefix}-base`;\nconst styleFiles = ['theme-base.css'];\n\nconst headerEl = document.createElement('header');\nconst header = headerEl.appendChild(document.createElement('div'));\nheader.classList.add(`${prefix}-header`);\nconst sidebar = headerEl.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n\nconst menuButton = header.appendChild(createIcon('menu', true));\nmenuButton.classList.add(`${prefix}-menu-button`);\n\nconst span = header.appendChild(document.createElement('span'));\n\nconst openedClassName = `${prefix}-menu-open`;\n\nmenuButton.addEventListener('click', () => {\n\tdocument.body.classList.toggle(openedClassName);\n});\n\n\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tdocument.body.classList.remove(openedClassName);\n});\n\n\nlet tick: State<number> | null = null;\nconst spinner = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\n\n\nconst theme: Theme = {\n\ttitle(p) {\n\t\treturn [[\n\t\t\ttick && p.loading ? spinner[tick.get() % spinner.length] : '',\n\t\t\tp.unsaved ? '🔴' : '',\n\t\t\tp.title,\n\t\t].join(''), Application.title || '拥道YongDall'].filter(Boolean).join(' | ')\n\t},\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager(page) {\n\t\tlet shown = false;\n\t\teffect(() => {\n\t\t\tif (!page.current) {\n\t\t\t\tif (shown) { page.destroy(); }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tshown = true;\n\t\t}, page.signal);\n\t},\n\telements: [headerEl, rootContainer],\n\tclassNames: [cssPrefix, prefix],\n\tstyleFiles,\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tasync setup(signal) {\n\t\ttick = createTick(80, signal);\n\t\tlogoLink.addEventListener('click', () => {\n\t\t\tif (window.innerWidth > 800) { return; }\n\t\t\tdocument.body.classList.remove(openedClassName);\n\t\t}, { signal });\n\n\t\tconst titleSpan = document.createElement('div');\n\t\ttitleSpan.classList.add(`${prefix}-header-title`);\n\t\teffect(() => {\n\t\t\ttitleSpan.innerText = Application.title || Application.company || '';\n\t\t}, signal);\n\t\theader.insertBefore(logoLink, span);\n\t\theader.insertBefore(titleSpan, span);\n\n\t\tif (window.innerWidth > 800) {\n\t\t\tdocument.body.classList.add(openedClassName);\n\t\t}\n\n\t\tsidebar.appendChild(menuContainer);\n\n\t\tconst panelContainer = document.createElement('div');\n\t\tpanelContainer.classList.add(`${prefix}-panels`);\n\t\tdocument.body.appendChild(panelContainer);\n\n\t\tpanelContainer.appendChild(userContainer);\n\t\tuserContainer.setAttribute('popover', 'auto');\n\t\tuserButton.addEventListener('click', () => { userContainer.showPopover(); }, { signal });\n\n\n\n\t\tconst actions = header.appendChild(document.createElement('div'));\n\t\tactions.classList.add(`${prefix}-actions`);\n\n\t\tconst anchor = actions.appendChild(document.createElement('span'));\n\t\tactions.appendChild(userButton);\n\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\ttitleSpan.remove();\n\t\t\tmenuContainer.remove();\n\t\t\tpanelContainer.remove();\n\t\t\tuserContainer.removeAttribute('popover');\n\t\t\tuserContainer.remove();\n\t\t\tuserButton.remove();\n\t\t\tanchor.remove();\n\t\t\tactions.remove();\n\t\t}, { once: true });\n\t\tfor await (const button of loadNavButtons()) {\n\t\t\tif (signal.aborted) { return; }\n\t\t\taddButton(anchor, panelContainer, button, signal);\n\t\t}\n\t},\n\n};\nexport default theme;\n","import type { State, Theme } from '@yongdall/web';\nimport { createFrame, createTick, ErrorAlerter, Page, root as rootContainer } from '@yongdall/web';\nimport { Application, effect } from '@yongdall/web';\n\nimport { cssPrefix } from '../styles/variables.mjs';\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { updatePath } from '../workspace/index.mjs';\nimport renderError from '../error/index.mjs';\n\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\n\n\n\nconst prefix = `${cssPrefix}-pure`;\nconst styleFiles = ['theme-pure.css'];\n\n\n\n\nlet tick: State<number> | null = null;\nconst spinner = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\nconst theme: Theme = {\n\ttitle(p) {\n\t\treturn [[\n\t\t\ttick && p.loading ? spinner[tick.get() % spinner.length] : '',\n\t\t\tp.unsaved ? '🔴' : '',\n\t\t\tp.title,\n\t\t].join(''), Application.title || '拥道YongDall'].filter(Boolean).join(' | ')\n\t},\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager(page) {\n\t\tlet shown = false;\n\t\teffect(() => {\n\t\t\tif (!page.current) {\n\t\t\t\tif (shown) { page.destroy(); }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tshown = true;\n\t\t}, page.signal);\n\t},\n\telements: [rootContainer],\n\tclassNames: [cssPrefix, prefix],\n\tstyleFiles,\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tasync setup(signal) {\n\t\ttick = createTick(80, signal);\n\t},\n\n};\nexport default theme;\n","import { createIcon } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\n\nexport const prefix = `${cssPrefix}-tabs`;\n\nexport const headerEl = document.createElement('header');\nexport const header = headerEl.appendChild(document.createElement('div'));\nheader.classList.add(`${prefix}-header`);\nexport const sidebar = headerEl.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n\nconst menuButton = header.appendChild(createIcon('menu', true));\nmenuButton.classList.add(`${prefix}-menu-button`);\n\nexport const span = header.appendChild(document.createElement('span'));\n\n\nexport const openedClassName = `${prefix}-menu-open`;\n\nmenuButton.addEventListener('click', () => {\n\tdocument.body.classList.toggle(openedClassName);\n});\n\n\nexport function closeSidebarWhenMobile() {\n\tif (window.innerWidth > 800) { return; }\n\tdocument.body.classList.remove(openedClassName);\n}\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tdocument.body.classList.remove(openedClassName);\n});\n","import type { Theme } from '@yongdall/web';\nimport { Application, createFrame, effect, ErrorAlerter, loadNavButtons, Page, root as rootContainer } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport pageManager, { activityContainer, setMode } from '../pageManager/index.mjs';\n\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport { header, closeSidebarWhenMobile, openedClassName, prefix, span } from './dom.mjs';\nimport { headerEl, sidebar } from './dom.mjs';\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\nimport { addButton } from '../utils/addButton.mts';\n\n\n\nconst theme: Theme = {\n\ttitle(p) { return [p.title, Application.title || '拥道YongDall'].filter(Boolean).join(' | ') },\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager,\n\telements: [headerEl, rootContainer],\n\tclassNames: [cssPrefix, `${cssPrefix}-tabs`],\n\tstyleFiles: ['theme-tabs.css'],\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error);},\n\tasync setup(signal) {\n\t\tsetMode(true);\n\t\tlogoLink.addEventListener('click', () => { closeSidebarWhenMobile(); }, {signal});\n\n\t\tconst titleSpan = document.createElement('div');\n\t\ttitleSpan.classList.add(`${prefix}-header-title`);\n\t\teffect(() => {\n\t\t\ttitleSpan.innerText = Application.title || Application.company || '';\n\t\t}, signal);\n\t\t\n\t\theader.insertBefore(logoLink, span);\n\t\theader.insertBefore(titleSpan, span);\n\t\theaderEl.appendChild(activityContainer);\n\n\t\tif (window.innerWidth > 800) {\n\t\t\tdocument.body.classList.add(openedClassName);\n\t\t}\n\n\t\tsidebar.appendChild(menuContainer);\n\n\t\tconst panelContainer = document.createElement('div');\n\t\tpanelContainer.classList.add(`${prefix}-panels`);\n\t\tdocument.body.appendChild(panelContainer);\n\n\t\tpanelContainer.appendChild(userContainer);\n\t\tuserContainer.setAttribute('popover', 'auto')\n\t\tuserButton.addEventListener('click', () => { userContainer.showPopover(); }, {signal});\n\n\n\t\tconst actions = header.appendChild(document.createElement('div'));\n\t\tactions.classList.add(`${prefix}-actions`);\n\n\t\tconst anchor = actions.appendChild(document.createElement('span'));\n\t\tactions.appendChild(userButton);\n\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\ttitleSpan.remove();\n\t\t\tactivityContainer.remove();\n\t\t\tmenuContainer.remove();\n\t\t\tuserContainer.removeAttribute('popover')\n\t\t\tuserContainer.remove();\n\t\t\tuserButton.remove();\n\t\t}, {once: true});\n\t\t\t\tfor await (const button of loadNavButtons()) {\n\t\t\t\t\tif (signal.aborted) { return; }\n\t\t\t\t\taddButton(anchor, panelContainer, button, signal);\n\t\t\t\t}\n\t},\n\n};\n\nexport default theme;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["prefix","#table","#thead","#createUrl","#renderList","#labelPattern","#fieldsShow","#idFields","#tr","#tbody","#documents","#fns","#pagination","filter","header","main","allMenus","currentMenus","ac","prefix","header","sidebar","openedClassName","prefix","closeSidebarWhenMobile","Sider","#disabled","#hide","#shown","#click","sidebar","prefix","#children","Sider","span","#page","#parent","#hidden","#sides","addButton","rootContainer","header","prefix","styleFiles","headerEl","header","sidebar","menuButton","span","openedClassName","tick","spinner","theme","rootContainer","prefix","theme","rootContainer","theme","rootContainer"],"sources":["../../packages/theme/styles/variables.mjs","../../packages/theme/pageManager/index.mjs","../../packages/theme/components/List.mjs","../../packages/theme/components/Pagination.mjs","../../packages/theme/home/index.mjs","../../packages/theme/menu/createNavMenu.mts","../../packages/theme/workspace/index.mjs","../../packages/theme/user/userAvatar.mjs","../../packages/theme/user/index.mjs","../../packages/theme/logo.mjs","../../packages/theme/error/index.mjs","../../packages/theme/theme-allSider/dom.mjs","../../packages/theme/theme-allSider/Sider.mjs","../../packages/theme/theme-allSider/Group.mjs","../../packages/theme/theme-allSider/sides.mjs","../../packages/theme/theme-allSider/AllSiderPage.mjs","../../packages/theme/menu/createMenu.mts","../../packages/theme/menu/createMenuButtons.mts","../../packages/theme/menu/createMenuItem.mts","../../packages/theme/menu/createMenuButton.mts","../../packages/theme/theme-allSider/index.mts","../../packages/theme/utils/addButton.mts","../../packages/theme/theme-base/index.mts","../../packages/theme/theme-pure/index.mts","../../packages/theme/theme-tabs/dom.mjs","../../packages/theme/theme-tabs/index.mts"],"sourcesContent":["export const cssPrefix = `YongDallTheme`;\n","import { effect, waitAbortSignal } from '@yongdall/web';\n/** @import { PageHandle, PageManager } from '@yongdall/web' */\nimport { cssPrefix } from '../styles/variables.mjs';\nconst prefix = `${cssPrefix}-activity`;\n\nexport const activityContainer = document.createElement('div');\nactivityContainer.classList.add(prefix);\n\n\n\n/**\n * @typedef {object} ButtonProxy\n * @property {HTMLElement} button\n * @property {HTMLAnchorElement} link\n * @property {ButtonProxy} [last]\n * @property {ButtonProxy} [next]\n */\n\n/** @type {Map<PageHandle, ButtonProxy>} */\nconst buttons = new Map();\n/** @type {ButtonProxy | undefined} */\nlet first;\nlet append = false;\n/**\n * \n * @param {boolean} a \n */\nexport function setMode(a){\n\tappend = a;\n}\n/** @type {PageManager} */\nconst pageManager = (page) => {\n\tconst button = document.createElement('div');\n\tbutton.classList.add(`${prefix}-page`);\n\tconst link = button.appendChild(document.createElement('a'));\n\tlink.classList.add(`${prefix}-title`);\n\tlink.href = page.href;\n\tlink.innerText = page.title;\n\tconst close = button.appendChild(document.createElement('button'));\n\tclose.type = 'button';\n\tclose.classList.add(`${prefix}-close`);\n\tclose.addEventListener('click', () => {\n\t\tpage.destroy();\n\t});\n\t/** @type {ButtonProxy} */\n\tconst btn = {\n\t\tbutton, link,\n\t\tnext: first,\n\t};\n\tif (first) { first.last = btn; }\n\tfirst = btn;\n\tbuttons.set(page, btn);\n\tactivityContainer.insertBefore(button, append ? null : activityContainer.firstChild);\n\n\teffect(() => { link.innerText = page.title; }, page.signal);\n\teffect(() => { link.href = page.href; }, page.signal);\n\n\teffect(() => {\n\t\tif (page.current) {\n\t\t\tbutton.classList.add(`${prefix}-current`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-current`);\n\t\t}\n\t}, page.signal);\n\teffect(() => {\n\t\tif (page.loading) {\n\t\t\tbutton.classList.add(`${prefix}-loading`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-loading`);\n\t\t}\n\t}, page.signal);\n\teffect(() => {\n\t\tif (page.unsaved) {\n\t\t\tbutton.classList.add(`${prefix}-unsaved`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-unsaved`);\n\t\t}\n\t}, page.signal);\n\twaitAbortSignal(page.signal).then(() => {\n\t\tconst { last, next } = btn;\n\t\tif (last) { last.next = next; }\n\t\tif (next) { next.last = last; }\n\t\tif (first === btn) { first = next; }\n\t\tbutton.remove();\n\t});\n};\nexport default pageManager;\n","/** @import { FieldScriptConfiguration, ModelScriptConfiguration } from '@yongdall/web' */\nimport { createShowField, Pattern } from '@yongdall/web';\n\n\nexport default class List {\n\t/** @type {((id: string) => string)?} */\n\t#createUrl;\n\t/** @type {readonly [string, FieldScriptConfiguration][]} */\n\t#fieldsShow;\n\t/** @type {string} */\n\t#labelPattern;\n\t/** @type {string[]} */\n\t#idFields;\n\t/** @type {readonly any[]} */\n\t#documents = [];\n\t#table = document.createElement('table');\n\t#thead = this.#table.appendChild(document.createElement('thead'));\n\t#tr = this.#thead.appendChild(document.createElement('tr'));\n\t#tbody = this.#table.appendChild(document.createElement('tbody'));\n\tget root() { return this.#table }\n\tget createUrl() {\n\t\treturn this.#createUrl;\n\t}\n\tset createUrl(fn) {\n\t\tconst createUrl = typeof fn === 'function' ? fn : null;\n\t\tif (this.#createUrl === createUrl) { return }\n\t\tthis.#createUrl = createUrl;\n\t\tthis.#renderList();\n\t}\n\t/**\n\t * \n\t * @param {(id: string) => string} createUrl \n\t * @param {ModelScriptConfiguration} model \n\t */\n\tconstructor(createUrl, model) {\n\t\tconst fieldsShow = Object.entries(model.fields).filter(([,{type}]) => type && typeof type !== 'object');\n\t\tconst idFields = Object.entries(model.fields).filter(([,v]) => v.primary).map(([v]) => v);\n\t\tconst labelPattern = model.labelPattern || '';\n\t\tthis.#labelPattern = labelPattern;\n\t\tthis.#createUrl = typeof createUrl === 'function' ? createUrl : null;\n\t\tthis.#fieldsShow = fieldsShow;\n\t\tthis.#idFields = idFields;\n\t\tconst tr = this.#tr;\n\t\ttr.innerHTML = '';\n\t\tconst th = tr.appendChild(document.createElement('th'));\n\t\tth.appendChild(document.createTextNode('#'));\n\t\tfor (const [name,field] of fieldsShow) {\n\t\t\tconst th = tr.appendChild(document.createElement('th'));\n\t\t\tth.appendChild(document.createTextNode(field.label || name));\n\t\t}\n\t}\n\t#renderList() {\n\t\tconst tbody = this.#tbody;\n\t\ttbody.innerHTML = '';\n\t\tconst idFields = this.#idFields;\n\t\tconst labelPattern = this.#labelPattern;\n\t\tconst fieldsShow = this.#fieldsShow;\n\t\tconst createUrl = this.#createUrl;\n\t\tfor (const r of this.#documents) {\n\t\t\tconst tr = tbody.appendChild(document.createElement('tr'));\n\t\t\tconst td = tr.appendChild(document.createElement('td'));\n\t\t\tconst label = Pattern.generate(labelPattern, r) || idFields.map(v => r[v]).join('$')\n\t\t\tif (createUrl) {\n\t\t\t\tconst a = td.appendChild(document.createElement('a'));\n\t\t\t\ta.href = createUrl(idFields.map(v => r[v]).join('$'));\n\t\t\t\ta.appendChild(document.createTextNode(label));\n\t\t\t} else {\n\t\t\t\ttd.appendChild(document.createTextNode(label));\n\t\t\t}\n\t\t\tfor (const [name,field] of fieldsShow) {\n\t\t\t\tconst td = tr.appendChild(document.createElement('td'));\n\t\t\t\tconst f = createShowField(name, field, {inline: true}, r);\n\t\t\t\ttd.appendChild(f.root);\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {readonly any[]} list \n\t */\n\tsetData(list) {\n\t\tthis.#documents = list;\n\t\tthis.#renderList();\n\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n","import { Pagination as NlPagination } from '@neeloong/components'\n\nexport default class Pagination {\n\t#fns;\n\t#pagination;\n\tconstructor() {\n\t\tconst pagination = /** @type {NlPagination} */(document.createElement('nl-pagination'));\n\t\tpagination.size = 20;\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"start\";\n\t\tpagination.appendChild(document.createTextNode('-'));\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"end\";\n\t\tpagination.appendChild(document.createTextNode('/'));\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"total\";\n\t\tpagination.appendChild(document.createElement('nl-pagination-prev')).innerText = '上一页';\n\t\tpagination.appendChild(document.createElement('nl-pagination-pager'));\n\t\tpagination.appendChild(document.createElement('nl-pagination-next')).innerText = '下一页';\n\t\tpagination.appendChild(document.createElement('nl-pagination-sizer'));\n\t\tconst fns = new Set();\n\t\t\n\t\tpagination.addEventListener('change', () => {\n\t\t\tfor (const fn of fns) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t})\n\t\tthis.#fns = fns;\n\t\tthis.#pagination = pagination;\n\n\t}\n\tget root() {return this.#pagination; }\n\tget size() { return this.#pagination.size}\n\tset size(v) { this.#pagination.size = v}\n\tget page() { return this.#pagination.page}\n\tset page(v) { this.#pagination.page = v}\n\tget total() { return this.#pagination.total}\n\tset total(v) { this.#pagination.total = v}\n\t/**\n\t * \n\t * @param {(p: Pagination) => void} listen \n\t * @returns {() => void}\n\t */\n\tlisten(listen) {\n\t\tconst fns = this.#fns;\n\t\tconst f = () => listen(this);\n\t\tfns.add(f);\n\t\treturn () => {fns.delete(f)}\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n","/** @import { HomeContext } from '@yongdall/web' */\n/**\n *\n * @param {string} href\n * @param {string} title\n */\nfunction createLink(href, title) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.title = title;\n\ta.style.display = 'block';\n\ta.appendChild(document.createTextNode(title));\n\treturn a;\n}\n\n\n/**\n * @param {HTMLElement} container\n */\nfunction renderHome(container) {\n}\n\n\n/**\n * \n * @param {HomeContext} homeContext \n */\nexport default function home(homeContext) {\n\thomeContext.listen('update', () => {\n\t\tconst { container } = homeContext;\n\t\tcontainer.innerHTML = '';\n\t\treturn renderHome(container);\n\t});\n}\n","import type { Menu } from '@yongdall/web';\nimport type { Collapse } from '@neeloong/components';\nimport '@neeloong/components';\nimport { Application, createNeverAbortedSignal, Ident, PageIdent, watch } from '@yongdall/web';\n\n\n\nfunction* toFindPath(\n\tactive: string,\n\tmenuMap: Map<string, HTMLElement[]>,\n\tpathMenuMap: Map<string, [HTMLElement, number: number][]>,\n): IterableIterator<HTMLElement[]> {\n\tif (!active) { return; }\n\tconst index = active.indexOf('?');\n\tconst path = index < 0 ? active : active.slice(0, index);\n\tif (index >= 0 && index + 1 < active.length) {\n\t\tfor (const list = active.slice(index).split('&'); list.length; list.pop()) {\n\n\t\t\tconst menus = menuMap.get(`${path}${list.join('&')}`);\n\t\t\tif (!menus?.length) { continue; }\n\t\t\tyield menus;\n\t\t}\n\n\t}\n\n\tconst menus = menuMap.get(path);\n\tif (menus?.length) { yield menus; }\n\tconst pathMenus = pathMenuMap.get(path);\n\tif (pathMenus?.length) { yield pathMenus.map(v => v[0]); }\n}\n\n\nfunction* findMenu(\n\tactive: string,\n\tmenuMap: Map<string, HTMLElement[]>,\n\tpathMenuMap: Map<string, [HTMLElement, number: number][]>,\n\tident: PageIdent | null,\n\tidentMap: Map<string, HTMLElement[]>,\n): IterableIterator<HTMLElement[]> {\n\tyield* toFindPath(active, menuMap, pathMenuMap);\n\tif (!ident) { return; }\n\tfor (const p of [...Ident.stringifyPaths(ident)].reverse()) {\n\t\tconst menus = identMap.get(p);\n\t\tif (!menus?.length) { continue; }\n\t\tyield menus;\n\t}\n}\n\n\nfunction* findTextNode(element: HTMLElement): Iterable<Text> {\n\tconst walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);\n\tfor (let node; node = walker.nextNode();) {\n\t\t// @ts-ignore\n\t\tyield node;\n\t}\n}\n\nfunction filter(texts: string[], element: HTMLElement): Range[] {\n\tconst ranges = [];\n\n\tconst textNodes = [...findTextNode(element)].filter(n => n.nodeValue?.length);\n\tconst indexes = textNodes.reduce<[number, number, Text][]>((list, currentValue) => {\n\t\tconst index = list[list.length - 1]?.[1] || 0;\n\t\treturn [...list, [\n\t\t\tindex,\n\t\t\tindex + (currentValue.nodeValue?.length || 0),\n\t\t\tcurrentValue,\n\t\t]];\n\t}, []);\n\tconst fullText = textNodes.map(n => n.nodeValue).join('');\n\n\tlet startIndex = 0;\n\tfor (const searchText of texts) {\n\t\tconst index = fullText.indexOf(searchText, startIndex);\n\t\tif (index === -1) { return []; }\n\t\tconst endIndex = index + searchText.length;\n\n\t\tconst start = indexes.findLast(([start]) => start <= index);\n\t\tif (!start) { return []; }\n\t\tconst end = indexes.findLast(([, end]) => end >= endIndex);\n\t\tif (!end) { return []; }\n\t\tstartIndex = index + searchText.length;\n\n\n\t\tconst range = new Range();\n\t\trange.setStart(start[2], index - start[0]);\n\t\trange.setEnd(end[2], endIndex - start[0]);\n\t\tranges.push(range);\n\t}\n\treturn ranges;\n}\n\nexport default function createNavMenu(\n\troot: Element,\n\tmenus: (Menu | null)[],\n\toptions: {\n\t\tactive?: string | [string | null | undefined, PageIdent | null | undefined];\n\t\tsignal?: AbortSignal;\n\t\tfilter?: string;\n\t} = {},\n) {\n\tconst pathMenuMap: Map<string, [HTMLElement, number: number][]> = new Map();\n\tconst menuMap: Map<string, HTMLElement[]> = new Map();\n\tconst identMap: Map<string, HTMLElement[]> = new Map();\n\tlet current: HTMLElement | null = null;\n\tconst allMenus: HTMLElement[] = [];\n\tconst destroyList: (() => void)[] = [];\n\n\tfunction createLink(menu: Menu | Menu.Button, el?: HTMLElement) {\n\t\tconst link = document.createElement('a');\n\t\tconst item = link;\n\t\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\tlink.title = menu.title || '';\n\t\tconst { page, path, uri, target } = menu;\n\t\tlet url: URL | null = null;\n\t\tconst ident = page && Ident.parse(page);\n\t\tif (ident) {\n\t\t\turl = new URL(PageIdent.stringify(ident, path), Application.root);\n\t\t\tlink.href = url.href;\n\t\t\tif (target && typeof target === 'string') { link.target = target; }\n\n\t\t} else if (uri) {\n\t\t\tlink.href = uri;\n\t\t\ttry {\n\t\t\t\turl = new URL(uri);\n\t\t\t\tif (url.origin !== location.origin) {\n\t\t\t\t\turl = null;\n\t\t\t\t}\n\t\t\t} catch { }\n\t\t\tif (target !== '') { link.target = target ?? '_blank'; }\n\t\t}\n\t\tif (url && (link.target || '_self') === '_self') {\n\t\t\tlink.addEventListener('click', () => {\n\t\t\t\tclickedItem = item;\n\t\t\t\trequestIdleCallback(() => {\n\t\t\t\t\tif (clickedItem !== item) { return; }\n\t\t\t\t\tclickedItem = null;\n\t\t\t\t});\n\t\t\t});\n\t\t\tconst { pathname: pathname, search } = url;\n\t\t\tconst fullPath = `${pathname}${search}`;\n\t\t\tconst list = menuMap.get(fullPath);\n\t\t\tif (list) {\n\t\t\t\tlist.push(item);\n\t\t\t} else {\n\t\t\t\tmenuMap.set(pathname, [item]);\n\t\t\t}\n\t\t\tconst list2 = pathMenuMap.get(fullPath);\n\t\t\tif (list2) {\n\t\t\t\tlist2.push([item, search.length]);\n\t\t\t} else {\n\t\t\t\tpathMenuMap.set(pathname, [[item, search.length]]);\n\t\t\t}\n\t\t\tif (ident && (!path || path[0] === '?' || path[0] === '#')) {\n\t\t\t\tconst key = Ident.stringify(ident);\n\t\t\t\tconst list = identMap.get(key);\n\t\t\t\tif (list) {\n\t\t\t\t\tlist.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tidentMap.set(key, [item]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn link;\n\t}\n\n\tfunction createButton(button: Menu.Button) {\n\t\tconst link = createLink(button);\n\t\tlink.classList.add('NavMenu-button');\n\t\treturn link;\n\t}\n\tlet clickedItem: HTMLElement | null = null;\n\n\n\tfunction renderMenu(\n\t\tmenu: Menu,\n\t\tlevel: number,\n\t): { el: HTMLElement; filter(show: boolean, t?: string[] | null): Range[]; } | null {\n\t\tconst { children } = menu;\n\t\tif (!children.length) {\n\t\t\tconst item = document.createElement('div');\n\t\t\tconst link = item.appendChild(createLink(menu, item));\n\n\t\t\tfor (const button of menu.buttons || []) {\n\t\t\t\titem.appendChild(createButton(button));\n\t\t\t}\n\t\t\titem.classList.add('NavMenu-item');\n\t\t\tlink.classList.add('NavMenu-item-link');\n\t\t\treturn {\n\t\t\t\tel: item, filter(show, text) {\n\t\t\t\t\tconst list = text ? filter(text, link) : [];\n\t\t\t\t\titem.hidden = Boolean(!show && text && !list.length);\n\t\t\t\t\treturn list;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tconst item = document.createElement('nl-collapse') as Collapse;\n\t\titem.setAttribute('animation', '');\n\t\titem.setAttribute('menu', '');\n\t\tconst header = item.appendChild(document.createElement('div'));\n\t\theader.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\theader.className = 'NavMenu-label';\n\t\theader.slot = 'label';\n\t\theader.style.flex = '1';\n\t\tfor (const button of menu.buttons || []) {\n\t\t\titem.appendChild(createButton(button)).slot = 'label';\n\t\t}\n\t\tconst childrenMenu = renderChildren(item, children, level + 1);\n\t\tif (!childrenMenu.length) { return null; }\n\t\treturn {\n\t\t\tel: item, filter(show, text) {\n\t\t\t\tif (!text) {\n\t\t\t\t\tfor (const menu of childrenMenu) { menu.filter(show); }\n\t\t\t\t\titem.hidden = false;\n\t\t\t\t\titem.open = false;\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tconst self = filter(text, header);\n\t\t\t\tconst hasSelf = Boolean(show || self.length);\n\n\t\t\t\tconst ranges = childrenMenu.flatMap(v => v.filter(hasSelf, text));\n\t\t\t\titem.open = Boolean(ranges.length);\n\t\t\t\tconst list = [...self, ...ranges];\n\t\t\t\titem.hidden = !show && !list.length;\n\t\t\t\treturn list;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction renderChildren(\n\t\tparent: Element,\n\t\tmenus: (Menu | null)[],\n\t\tlevel: number,\n\t) {\n\t\tlet has = false;\n\t\tlet divider = false;\n\t\tlet children = [];\n\t\tfor (const menu of menus) {\n\t\t\tif (!menu) {\n\t\t\t\tif (!has) { continue; }\n\t\t\t\tdivider = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (divider) {\n\t\t\t\tdivider = false;\n\t\t\t\tparent.appendChild(document.createElement('hr'));\n\t\t\t}\n\t\t\tconst item = renderMenu(menu, level);\n\t\t\tif (!item) { continue; }\n\t\t\tchildren.push(item);\n\t\t\thas = true;\n\t\t\tparent.appendChild(item.el);\n\t\t\tallMenus.push(item.el);\n\t\t\titem.el.style.setProperty('--NavMenu-level', String(level));\n\t\t}\n\t\treturn children;\n\t}\n\tconst menuList = renderChildren(root, menus, 0);\n\tlet destroyed = false;\n\tfunction destroy() {\n\t\tif (destroyed) { return; }\n\t\tdestroyed = true;\n\t\tfor (const m of allMenus) {\n\t\t\tm.remove();\n\t\t}\n\t\tfor (const destroy of destroyList) {\n\t\t\tdestroy();\n\t\t}\n\t}\n\tconst signal = options.signal || createNeverAbortedSignal();\n\tif (signal.aborted) {\n\t\tdestroy();\n\t} else {\n\t\tsignal.addEventListener('abort', destroy, { once: true });\n\t}\n\tlet parents: HTMLElement[] = [];\n\twatch(() => {\n\t\tconst active = options.active;\n\t\tif (!active) { return null; }\n\t\tif (typeof active === 'string') {\n\t\t\treturn active.replace(/#.*/, '') || '';\n\t\t}\n\t\tif (!Array.isArray(active)) { return null; }\n\t\tconst page = active[1] || null;\n\t\tif (!page) {\n\t\t\treturn active[0]?.replace(/#.*/, '') || null;\n\n\t\t}\n\t\tconst result: [string, PageIdent | null] = [active[0]?.replace(/#.*/, '') || '', active[1] || null];\n\t\treturn result;\n\t}, active => {\n\t\tif (!active) { return; }\n\t\tconst path = Array.isArray(active) ? active[0] : '';\n\t\tconst page = Array.isArray(active) ? active[1] : null;\n\t\tfor (const menus of findMenu(path, menuMap, pathMenuMap, page, identMap)) {\n\t\t\tconst clicked = clickedItem && menus.includes(clickedItem) ? clickedItem : null;\n\t\t\tif (clicked) { clickedItem = null; }\n\t\t\tif (!clicked && current && menus.includes(current)) { return; }\n\t\t\tconst menu = clicked || menus[0];\n\t\t\tconst list = [];\n\t\t\tlet parent = menu.parentElement;\n\t\t\tfor (; parent && parent !== root; parent = parent.parentElement) {\n\t\t\t\tlist.push(parent);\n\t\t\t}\n\t\t\tif (parent !== root) { return; }\n\t\t\tparents = list;\n\t\t\tcurrent?.classList.remove('NavMenu-current');\n\t\t\tfor (const item of parents) {\n\t\t\t\titem.setAttribute('open', '');\n\t\t\t}\n\t\t\tcurrent = menu;\n\t\t\tcurrent?.classList.add('NavMenu-current');\n\t\t\treturn;\n\t\t}\n\n\n\t}, { signal, immediate: true });\n\n\treturn (text: string) => {\n\t\tconst texts: string[] | null = text.toLowerCase().split(/[\\s\\n]+/).filter(Boolean);\n\t\tif (texts.length) {\n\t\t\treturn menuList.flatMap(v => v.filter(false, texts));\n\t\t}\n\t\tmenuList.flatMap(v => v.filter(false));\n\t\tfor (const item of parents) {\n\t\t\titem.setAttribute('open', '');\n\t\t}\n\t\treturn [];\n\t};\n}\n","import { Application, createComputed, createIcon, createState, effect, flatPermission, Menu, PageIdent, toPermissionFilter, User } from '@yongdall/web';\nimport createNavMenu from '../menu/createNavMenu.mts';\n\n\n\n\nexport const menuContainer = document.createElement('div');\n\n\nmenuContainer.style.display = 'flex';\nmenuContainer.style.flexDirection = 'column';\nconst header = menuContainer.appendChild(document.createElement('header'));\nheader.classList.add('NavMenu-header');\nconst filter = header.appendChild(document.createElement('input'));\nfilter.placeholder = '过滤菜单...';\nfilter.type = 'search';\nconst refreshButton = header.appendChild(document.createElement('button'));\nrefreshButton.appendChild(createIcon('refresh', true));\nrefreshButton.classList.add('icon');\nrefreshButton.title = '刷新';\n\n\nconst main = menuContainer.appendChild(document.createElement('main'));\nmain.style.flex = '1';\nmain.style.overflow = 'auto';\nmain.classList.add('NavMenu');\nlet k = 0;\nlet loaded = false;\n/** @type {ReturnType<typeof createNavMenu>?} */\nlet navMenu = null;\nfunction filterMenu() {\n\tconst list = navMenu?.(filter.value) || [];\n\tconst highlight = new Highlight(...list);\n\tCSS.highlights.set(\"NavMenu-filter-highlight\", highlight);\n}\nfilter.addEventListener('input', filterMenu);\n\nconst allMenus = createComputed(\n\t() => Menu.fromDefine(Application.menus, [])\n);\nconst currentMenus = createComputed(() => {\n\tconst permissions = User.permissions;\n\tconst menus = allMenus.get();\n\tif (permissions.size < 0) { return menus; }\n\n\tconst filter = toPermissionFilter({\n\t\tpermissions,\n\t\torganizationPermissions: User.organizationPermissions,\n\t\tallOrganizationPermissions: User.allOrganizationPermissions,\n\t});\n\treturn Menu.filter(menus, m => {\n\t\tconst permissions = flatPermission(m.permission);\n\t\tif (!permissions.length) { return true; }\n\t\treturn Boolean(permissions.find(filter));\n\t});\n});\nconst currentPath = createState(/** @type {string | [string, PageIdent]} */(''));\n/** @type {AbortController?} */\nlet ac = null;\neffect(() => {\n\tac?.abort();\n\tmain.innerHTML = '';\n\tac = new AbortController();\n\tnavMenu = createNavMenu(main, currentMenus.get(), {\n\t\tsignal: ac.signal,\n\t\tget active() { return currentPath.get(); },\n\t});\n\tfilterMenu();\n});\n/**\n * \n * @param {string} path \n * @param {string} search \n * @param {string} hash \n * @param {(PageIdent & {path: string})?} page \n */\nexport function updatePath(path, search, hash, page) {\n\tif (!page) {\n\t\tcurrentPath.set(`${path}${search}`);\n\t\treturn;\n\t}\n\tcurrentPath.set([`${path}${search}`, page]);\n}\n\nrefreshButton.addEventListener('click', () => Application.loadMenus(true));\n","import { createComputed, createIcon, createNeverAbortedSignal, effect, User } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\n\n\n/**\n * \n * @param {string} avatar \n * @param {AbortSignal} signal\n * @param {boolean} [button] \n */\nfunction createAvatar(avatar, signal, button) {\n\tif (!avatar) {\n\t\tconst svg = createIcon('user', signal);\n\t\tif (!button) { svg.setAttribute('fill-opacity', '0.5'); }\n\t\treturn svg;\n\t}\n\tconst img = document.createElement('img');\n\timg.src = avatar;\n\treturn img;\n\n}\n/**\n * \n * @param {HTMLElement} root \n * @param {boolean} [button] \n * @param {AbortSignal} [signal] \n * @returns \n */\nexport function createUserAvatar(root, button, signal = createNeverAbortedSignal()) {\n\troot.classList.add(`${cssPrefix}-user-avatar`);\n\n\tconst sessionAvatarComputed = createComputed(() => User.single ? null : User.session?.avatar || '');\n\t/** @type {string?} */\n\tlet sessionAvatar = sessionAvatarComputed.get();\n\t/** @type {AbortController?} */\n\tlet sessionAbortController = new AbortController();\n\tconst sessionSignal = AbortSignal.any([sessionAbortController.signal, signal]);\n\tlet sessionAvatarElement = sessionAvatar === null\n\t\t? createIcon('singleUser', sessionSignal)\n\t\t: createAvatar(sessionAvatar, sessionSignal, button);\n\troot.appendChild(sessionAvatarElement);\n\teffect(() => {\n\t\tconst newAvatar = User.single ? null : User.session?.avatar || '';\n\t\tif (newAvatar === sessionAvatar) { return; }\n\t\tsessionAvatar = newAvatar;\n\t\tsessionAbortController?.abort();\n\t\tsessionAbortController = new AbortController();\n\n\t\tconst sessionSignal = AbortSignal.any([sessionAbortController.signal, signal]);\n\t\tconst newAvatarElement = sessionAvatar === null\n\t\t\t? createIcon('singleUser', sessionSignal)\n\t\t\t: createAvatar(sessionAvatar, sessionSignal, button);\n\t\tif (!button && sessionAvatar === null) {\n\t\t\tnewAvatarElement.setAttribute('fill-opacity', '0.5');\n\t\t}\n\t\troot.replaceChild(newAvatarElement, sessionAvatarElement);\n\t\tsessionAvatarElement.remove();\n\t\tsessionAvatarElement = newAvatarElement;\n\t}, signal);\n\n\tconst targetAvatarComputed = createComputed(() => {\n\t\tconst impersonation = User.impersonation;\n\t\tconst session = User.session;\n\t\tif (!impersonation) { return null; }\n\t\tif (impersonation.id === (session?.id || '')) { return null; }\n\t\treturn impersonation.avatar || '';\n\t});\n\t/** @type {string?} */\n\tlet targetAvatar = null;\n\t/** @type {Element?} */\n\tlet targetAvatarElement = null;\n\t/** @type {AbortController?} */\n\tlet targetAbortController = null;\n\teffect(() => {\n\t\tconst newAvatar = targetAvatarComputed.get();\n\t\tif (newAvatar === targetAvatar) { return; }\n\t\ttargetAvatar = newAvatar;\n\t\ttargetAvatarElement?.remove();\n\t\ttargetAvatarElement = null;\n\t\ttargetAbortController?.abort();\n\t\tif (newAvatar === null) { return; }\n\t\ttargetAbortController = new AbortController();\n\t\tconst targetSignal = AbortSignal.any([targetAbortController.signal, signal]);\n\t\ttargetAvatarElement = createAvatar(newAvatar, targetSignal, button);\n\t\troot.insertBefore(targetAvatarElement, sessionAvatarElement);\n\t}, signal);\n\n}\n","import { Application, createComputed, createIcon, effect, Menu, User, watch } from '@yongdall/web';\nimport { createUserAvatar } from './userAvatar.mjs';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport createNavMenu from '../menu/createNavMenu.mts';\n\nexport const userContainer = document.createElement('div');\nuserContainer.classList.add(`${cssPrefix}-user`);\nexport const userButton = document.createElement('div');\nuserButton.classList.add(`${cssPrefix}-user-button`);\ncreateUserAvatar(userButton, true);\nconst userInfo = userContainer.appendChild(document.createElement('span'));\nuserInfo.classList.add(`${cssPrefix}-user-info`);\nconst avatar = userInfo.appendChild(document.createElement('span'));\ncreateUserAvatar(avatar);\navatar.classList.add('avatar');\nconst username = userInfo.appendChild(document.createElement('span'));\nusername.classList.add('username');\nusername.innerText = '用户名';\nconst btns = userInfo.appendChild(document.createElement('div'));\n\n/** @type {ChildNode} */\nlet helpEl = btns.appendChild(document.createComment(''));\nwatch(() => Application.help, (help, _help, onCleanup) => {\n\tif (!help) {\n\t\tconst el = document.createComment('');\n\t\thelpEl.replaceWith(el);\n\t\thelpEl = el;\n\t\treturn;\n\t}\n\tconst el = document.createElement('a');\n\tel.href = help;\n\tel.target = '_blank';\n\tel.appendChild(createIcon('help', onCleanup()));\n\tel.title = '帮助';\n\thelpEl.replaceWith(el);\n\thelpEl = el;\n}, { immediate: true });\n\nconst exitButton = btns.appendChild(document.createElement('div'));\nexitButton.appendChild(createIcon('logout', true));\nexitButton.title = '退出登录';\neffect(() => {\n\texitButton.hidden = !User.operator;\n});\nexitButton.addEventListener('click', () => User.exit(true));\n\neffect(() => {\n\tusername.innerText = User.operator?.name || '';\n});\n\n\nconst allMenus = createComputed(\n\t() => Menu.fromDefine(Application.userMenus, [])\n);\n\n\nconst currentMenus = createComputed(() => {\n\tconst menus = allMenus.get();\n\tif (User.operator) { return menus; }\n\treturn Menu.filter(menus, v => !v.logged);\n});\n\nconst main = userContainer.appendChild(document.createElement('main'));\nmain.style.flex = '1';\nmain.style.overflow = 'auto';\nmain.classList.add('NavMenu');\n\n/** @type {AbortController?} */\nlet ac = null;\neffect(() => {\n\tac?.abort();\n\tmain.innerHTML = '';\n\tac = new AbortController();\n\tcreateNavMenu(main, currentMenus.get(), {\n\t\tsignal: ac.signal,\n\t});\n});\n","\nimport { Application, createIcon, toFileLink, watch } from '@yongdall/web';\nimport { cssPrefix } from './styles/variables.mjs';\n\nconst logoLink = document.createElement('a');\nlogoLink.classList.add(`${cssPrefix}-logo`);\nwatch(() => Application.root, root => {\n\tlogoLink.href = root;\n}, { immediate: true });\nwatch(() => toFileLink(Application.logo), (logo, _logo, onCleanup) => {\n\tconst signal = onCleanup();\n\tlet logoEl;\n\tif (logo) {\n\t\tlogoEl = document.createElement('img');\n\t\tlogoEl.src = logo.href;\n\t} else {\n\t\tlogoEl = createIcon('logo', signal);\n\t}\n\tlogoLink.appendChild(logoEl);\n\tlogoEl.classList.add('logo');\n\tonCleanup(() => { logoEl.remove(); });\n}, { immediate: true });\nexport { logoLink };\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * @typedef {object} PageError\n * @property {string} title\n * @property {string} [description]\n */\n\n/** @type {Record<string, PageError>} */\nexport const errors = {\n\t404: {\n\t\ttitle: '您所请求的页面无法找到',\n\t\tdescription: '服务器无法正常提供信息。\\n目标页面可能已经被更改、删除或移到其他位置,或您所输入页面地址错误。',\n\t}\n};\n\n/**\n * @param {PageContext} ctx\n * @param {unknown} error\n */\nexport default function renderError(ctx, error) {\n\tif ((error ?? '') == '') {\n\t\tctx.container.appendChild(document.createTextNode('空页面'));\n\t\treturn;\n\t}\n\tconst e = (typeof error === 'number' || typeof error === 'string')\n\t\t&& Object.hasOwn(errors, error) && errors[error]\n\t\t|| errors['404'];\n\tconst title = e?.title || 'Error';\n\tconst info = e?.description;\n\tconst errorContainer = document.createElement('div');\n\tconst main = errorContainer.appendChild(document.createElement('div'));\n\tconst titleDiv = main.appendChild(document.createElement('div'));\n\tconst infoDiv = main.appendChild(document.createElement('div'));\n\terrorContainer.style.marginBlock = '8%';\n\terrorContainer.style.marginInline = 'auto';\n\terrorContainer.style.inlineSize = '600px';\n\terrorContainer.style.maxInlineSize = '100%';\n\terrorContainer.style.padding = '20px';\n\ttitleDiv.style.paddingBlock = '20px';\n\ttitleDiv.style.fontSize = '20px';\n\ttitleDiv.style.color = '#8e8e8e';\n\ttitleDiv.style.textAlign = 'center';\n\tinfoDiv.style.fontSize = '13px';\n\tinfoDiv.style.lineHeight = '1.3em';\n\tinfoDiv.style.color = '#b5b5b5';\n\ttitleDiv.appendChild(document.createTextNode(title));\n\tctx.title = title || 'Error';\n\tif (info && typeof info === 'string') {\n\t\tfor (const p of info.split('\\n')) {\n\t\t\tinfoDiv.appendChild(document.createTextNode(p));\n\t\t\tinfoDiv.appendChild(document.createElement('br'));\n\t\t}\n\t}\n\tctx.container.appendChild(errorContainer);\n\tctx.loading = false;\n}\n","import { cssPrefix } from '../styles/variables.mjs';\n\nexport const prefix = `${cssPrefix}-allSider-nav`\n\nexport const header = document.createElement('header');\nheader.className = `${prefix}-header`;\nexport const actions = header.appendChild(document.createElement('div'));\nactions.classList.add(`${prefix}-actions`)\nexport const sidebar = header.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n","import { createState } from '@yongdall/web';\nimport { prefix, sidebar } from './dom.mjs';\nconst openedClassName = `${prefix}-open`;\n/** @type {(() => void)?} */\nlet current = null;\n\nexport function closeSidebarWhenMobile() {\n\tif (window.innerWidth > 800) { return; }\n\tcurrent?.();\n}\n\nexport default class Sider {\n\t/** @readonly @type {HTMLElement} */\n\tbutton;\n\t/** @readonly @type {HTMLElement} */\n\tsider;\n\t/** @type {() => void} */\n\t#hide;\n\n\t#disabled = false;\n\tget disabled() { return this.#disabled; }\n\tset disabled(v) {\n\t\tif (v) {\n\t\t\tthis.disable();\n\t\t} else {\n\t\t\tthis.enable();\n\t\t}\n\t}\n\tdisable() {\n\t\tif (this.#disabled) { return; }\n\t\tthis.#disabled = true;\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t}\n\t\tthis.button.hidden = true;\n\t\tthis.sider.hidden = true;\n\t\t// TODO: 隐藏分组\n\t}\n\tenable() {\n\t\tif (!this.#disabled) { return; }\n\t\tthis.#disabled = false;\n\t\tthis.button.hidden = false;\n\t\t// TODO: 显示分组\n\t}\n\t#click = () => this.toggle();\n\t/**\n\t * \n\t * @param {HTMLElement} [siderContainer] \n\t * @param {HTMLElement} [buttonContainer] \n\t */\n\tconstructor(siderContainer, buttonContainer) {\n\t\tconst button = buttonContainer instanceof HTMLElement\n\t\t\t? buttonContainer\n\t\t\t: document.createElement('div');\n\t\tconst sider = siderContainer instanceof HTMLElement\n\t\t\t? siderContainer\n\t\t\t: document.createElement('div');\n\t\tbutton.tabIndex = 0;\n\t\tbutton.classList.add(`${prefix}-button`);\n\t\tsider.hidden = true;\n\t\tsidebar.appendChild(sider);\n\t\tbutton.classList.add(`${prefix}-selectable`);\n\t\tconst hide = () => {\n\t\t\tcurrent = null;\n\t\t\tdocument.body.classList.remove(openedClassName);\n\t\t\tbutton.classList.remove(`${prefix}-selected`);\n\t\t\tsider.hidden = true;\n\t\tthis.#shown.set(false);\n\t\t};\n\t\tbutton.addEventListener('click', this.#click);\n\t\tthis.#hide = hide;\n\t\tthis.button = button;\n\t\tthis.sider = sider;\n\t}\n\t#shown = createState(false);\n\tget shown() { return this.#shown.get(); }\n\tset shown(p) {\n\t\tif (p) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\tget hidden() { return this.button.hidden; }\n\tset hidden(v) {\n\t\tthis.button.hidden = Boolean(v);\n\t\tif (!v) { return; }\n\t\tthis.hide();\n\t}\n\tget open() { return current === this.#hide; }\n\tset open(p) {\n\t\tif (p) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\tshow() {\n\t\tif (this.hidden) { return; }\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) { return; }\n\t\tcurrent?.();\n\t\tcurrent = hide;\n\t\tdocument.body.classList.add(openedClassName);\n\t\tthis.button.classList.add(`${prefix}-selected`);\n\t\tthis.sider.hidden = false;\n\t\tthis.#shown.set(true);\n\t}\n\ttoggle() {\n\t\tif (this.hidden) { return; }\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t\treturn;\n\t\t}\n\t\tthis.show();\n\t}\n\thide() {\n\t\tif (this.hidden) { return; }\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current !== hide) { return; }\n\t\thide();\n\t}\n\tremove() {\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t}\n\t\tconst { button, sider } = this;\n\t\tbutton.remove();\n\t\tsider.remove();\n\t\tbutton.classList.remove(`${prefix}-button`);\n\t\tbutton.classList.remove(`${prefix}-selectable`);\n\t\tbutton.removeEventListener('click', this.#click);\n\t\tsider.hidden = false;\n\t\t// TODO: ...\n\t\t// TODO: 隐藏分组\n\t}\n}\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tcurrent?.();\n});\n","import Sider, { closeSidebarWhenMobile } from './Sider.mjs';\nimport { prefix } from './dom.mjs';\n\n\n\nexport default class Group {\n\t/** @readonly */\n\troot = document.createElement('div');\n\t/** @type {Set<() => void>} */\n\t#children = new Set()\n\t/**\n\t * \n\t * @param {HTMLElement} parent \n\t */\n\tconstructor(parent) {\n\t\tconst root = this.root;\n\t\tparent.appendChild(root);\n\t\troot.className = `${prefix}-group`;\n\t}\n\tremove() {\n\t\tthis.root.remove();\n\t\tfor (const r of [...this.#children]) {\n\t\t\tr();\n\t\t}\n\t}\n\tcreateGroup() {\n\t\tconst group = new Group(this.root);\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); group. remove(); }\n\t\tchildren.add(remove);\n\t\treturn group;\n\t}\n\t/**\n\t * \n\t * @overload\n\t * @param {true} isLink \n\t * @returns {HTMLAnchorElement}\n\t */\n\t/**\n\t * \n\t * @overload\n\t * @param {boolean} [isLink] \n\t * @returns {HTMLElement}\n\t */\n\t/**\n\t * \n\t * @param {boolean} [isLink] \n\t * @returns {HTMLElement}\n\t */\n\tcreateAction(isLink) {\n\t\tconst btn = document.createElement(isLink ? 'a' : 'div');\n\t\tbtn.tabIndex = 0;\n\t\tbtn.classList.add(`${prefix}-button`);\n\t\tbtn.addEventListener('click', () => { closeSidebarWhenMobile(); });\n\t\tthis.root.appendChild(btn);\n\n\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); btn.remove(); }\n\t\tchildren.add(remove);\n\t\treturn btn;\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} [siderContainer] \n\t * @param {HTMLElement} [buttonContainer] \n\t */\n\tcreateSider(siderContainer, buttonContainer) {\n\t\tconst sider = new Sider(siderContainer, buttonContainer);\n\t\tthis.root.appendChild(sider.button);\n\n\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); sider.remove(); }\n\t\tchildren.add(remove);\n\t\treturn sider;\n\t}\n}\n","import Group from './Group.mjs';\nimport { actions } from './dom.mjs';\nexport const pageSiderContainer = document.createElement('div');\nexport const startGroup = new Group(actions);\nexport const pageGroup = new Group(actions);\nexport const mainGroup = new Group(actions);\nexport const span = actions.appendChild(document.createElement('span'));\nexport const endGroup = new Group(actions);\n\nexport const pageSider = pageGroup.createSider(pageSiderContainer);\npageSider.button.innerText = '页面';\npageSider.disabled = true;\n","import { pageSider, pageSiderContainer } from './sides.mjs';\n\nimport { PageSider, Page } from '@yongdall/web';\n\n\nclass Sider extends PageSider {\n\t#page;\n\t#parent;\n\t/**\n\t * @param {AllSiderPage} page \n\t * @param {ParentNode} parent \n\t * @param {Node?} next \n\t * @param {boolean} inserted \n\t * @param {AbortSignal} signal \n\t * @param {ParentNode} parent \n\t * @returns \n\t */\n\tconstructor(page, parent, next, inserted, signal) {\n\t\tsuper(parent, next, inserted, signal);\n\t\tthis.#page = page;\n\t\tthis.#parent = parent;\n\t\tsignal.addEventListener('abort', () => {\n\t\tthis.#hidden();\n\t\t})\n\t}\n\tinsert() {\n\t\tsuper.insert();\n\n\t\tif (this.#page.show) { pageSider.disabled = false; }\n\t}\n\t#hidden() {\n\t\tif (this.#page.show && !this.#parent.children.length) {\n\t\t\tpageSider.disabled = true;\n\t\t}\n\t}\n\tremove() {\n\t\tsuper.remove();\n\t\tthis.#hidden();\n\t}\n\n}\n\nexport default class AllSiderPage extends Page {\n\t#sides = (() => {\n\t\tconst sides = document.createElement('div');\n\t\tsides.classList.add('Page-sides');\n\t\tpageSiderContainer.appendChild(sides);\n\t\treturn sides;\n\t})();\n\tdestroy() {\n\t\tif (!super.destroy()) { return false; }\n\t\tthis.#sides.remove();\n\t\treturn true;\n\t}\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\ttoggle(show) {\n\t\tsuper.toggle(show);\n\t\t// TODO: 区别区域\n\t\tpageSider.disabled = !(show && this.#sides.children.length);\n\t}\n\tget siderOpen() { return pageSider.open; }\n\tset siderOpen(open) {\n\t\t// TODO: 判断是不是当前的\n\t\tif (open) {\n\t\t\tpageSider.show();\n\t\t} else {\n\t\t\tpageSider.hide();\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageSider}\n\t */\n\tcreateSider(inserted, signal) {\n\t\tif (this.destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tsignal?.throwIfAborted();\n\t\tconst parent = this.#sides;\n\t\treturn new Sider(\n\t\t\tthis,\n\t\t\tparent,\n\t\t\tnull,\n\t\t\tinserted !== false,\n\t\t\tsignal instanceof AbortSignal\n\t\t\t\t? AbortSignal.any([signal, this.signal])\n\t\t\t\t: this.signal\n\t\t);\n\t}\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\tconstructor(show) {\n\t\tsuper(show);\n\t\tif (show) {\n\t\t\tpageSider.disabled = !this.#sides.children.length;\n\t\t}\n\t}\n}\n","import '@neeloong/components';\nimport type { Menu, State } from '@yongdall/web';\nimport type { Menu as NeeloongMenu } from '@neeloong/components';\nimport { createComputed, watch } from '@yongdall/web';\n\n\nexport default function createMenu<T extends Node>(\n\tparent: T,\n\tmenus: (Menu | null)[],\n\toptions: Menu.RendererOptions,\n\tbutton: boolean = false,\n\tcreateSub?: (parent: T | NeeloongMenu, child: NeeloongMenu, menu: Menu, hidden: State<boolean>) => void,\n): State<boolean> | null {\n\tif (options.signal.aborted) { return null; }\n\tconst { create, signal } = options;\n\tlet has = false;\n\tlet divider = false;\n\tlet lastHr: HTMLHRElement | null = null;\n\tconst allButtons: State<boolean>[] = [];\n\tlet lastButtons: State<boolean>[] = [];\n\tlet buttons: State<boolean>[] = [];\n\tfunction updateHr() {\n\t\tconst hr = lastHr;\n\t\tif (!hr) { return }\n\t\tconst list = lastButtons;\n\t\twatch(() => list.some(v => v.get()), hidden => {\n\t\t\thr.hidden = hidden\n\t\t}, { signal, immediate: true })\n\t}\n\tconst createDivider = () => {\n\t\thas = true;\n\t\tif (!divider) { return; }\n\t\tdivider = false;\n\t\tupdateHr();\n\t\tconst hr = document.createElement('hr');\n\t\tlastHr = hr;\n\t\tlastButtons = buttons;\n\t\tbuttons = [];\n\t\tparent.appendChild(hr);\n\t};\n\tfunction add(hidden: State<boolean>) {\n\t\tcreateDivider();\n\t\tlastButtons.push(hidden);\n\t\tbuttons.push(hidden);\n\t\tallButtons.push(hidden);\n\t}\n\tfor (const menu of menus) {\n\t\tif (!menu) {\n\t\t\tif (!has) { continue; }\n\t\t\tdivider = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst { children } = menu;\n\t\tif (!children?.length) {\n\t\t\tconst result = create(menu, { button });\n\t\t\tif (!result) { continue; }\n\t\t\tcreateDivider();\n\t\t\tadd(createComputed(() => Boolean(menu.hidden)));\n\t\t\tparent.appendChild(result);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = document.createElement('nl-menu') as NeeloongMenu;\n\t\tconst childHidden = createMenu<NeeloongMenu>(child, menus, options);\n\t\tif (!childHidden) { continue; }\n\t\tconst hidden = createComputed(() => Boolean(menu.hidden || childHidden.get()));\n\t\tadd(hidden);\n\t\tif (createSub) {\n\t\t\tcreateSub(parent, child, menu, hidden);\n\t\t} else {\n\n\t\t\twatch(() => hidden.get(), hidden => { item.hidden = hidden }, { signal, immediate: true })\n\t\t\tconst item = parent.appendChild(child);\n\t\t\tconst header = item.insertBefore(document.createElement('div'), item.firstChild);\n\t\t\theader.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\t\theader.slot = 'label';\n\t\t}\n\n\t}\n\tif (!has) { return null; }\n\tupdateHr();\n\treturn createComputed(() => allButtons.some(v => v.get()));\n}\n","import { watch, type Menu } from '@yongdall/web';\nimport '@neeloong/components';\nimport createMenuList from './createMenu.mts';\n\nexport default function createMenuButtons(\n\tmenus: (Menu | null)[],\n\toptions: Menu.RendererOptions,\n) {\n\tif (options.signal.aborted) { return null; }\n\tconst { create, signal } = options;\n\tconst root = document.createElement('div');\n\tcreateMenuList(root, menus, options, true, (root, child, menu, hidden) => {\n\t\tconst button = root.appendChild(document.createElement('button'));\n\t\tbutton.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\tchild.targetElement = button;\n\t\tbutton.addEventListener('click', () => child.show?.());\n\t\troot.appendChild(child);\n\t\twatch(() => hidden.get(), hidden => {\n\t\t\tbutton.hidden = hidden\n\t\t\tchild.hidden = hidden\n\t\t}, { signal, immediate: true });\n\t});\n\tif (!root.childNodes.length) { return null; }\n\troot.classList.add('MenuButtons');\n\treturn root;\n}\n","import type { Menu } from '@yongdall/web';\nimport { Application, createComputed, effect, isMac, watch } from '@yongdall/web';\n\n\nfunction getUri(item: Menu.Renderer.Command) {\n\tconst { page } = item;\n\tif (page) {\n\t\tconst { path } = item;\n\t\treturn new URL(path?.[0] === '/' ? `${page}${path}` : `${page}/${path || ''}`, Application.root).href;\n\t}\n\tconst { uri } = item;\n\tif (uri) { return uri; }\n\treturn null;\n}\nexport default function createMenuItem(menu: Menu, options: Menu.Renderer.Options): HTMLElement {\n\tconst { signal, button: isButton } = options;\n\tconst link = document.createElement('a');\n\tconst button = isButton ? document.createElement('button') : null;\n\twatch(() => menu.label || menu.title || '', label => {\n\t\tlink.textContent = label;\n\t}, { signal, immediate: true });\n\n\tconst { commands } = options;\n\n\tconst disabled = createComputed(() => {\n\t\tif (menu.disabled) { return true; }\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn Boolean(cmd ? cmd.disabled : options.disabled(menu));\n\t});\n\n\tconst href = createComputed(() => {\n\t\tconst href = getUri(menu);\n\t\tif (href) { return href; }\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn cmd ? getUri(cmd) || null : options.uri(menu) || null;\n\t});\n\tfunction click() {\n\t\tconst { click } = menu;\n\t\tif (typeof click === 'function') { return click(); }\n\t\tconst { script } = menu;\n\t\tif (script) {\n\t\t\t// TODO:\n\t\t\treturn;\n\t\t}\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn cmd ? cmd.click?.() : options.click(menu);\n\t}\n\teffect(() => {\n\t\tconst isDisabled = disabled.get();\n\t\t// @ts-ignore\n\t\tlink.disabled = isDisabled;\n\t\tlink.ariaDisabled = isDisabled ? 'true' : 'false';\n\t\tif (isDisabled) {\n\t\t\tlink.removeAttribute('tabindex');\n\t\t\tlink.removeAttribute('href');\n\t\t\tlink.removeAttribute('target');\n\t\t} else {\n\t\t\tlink.tabIndex = 0;\n\t\t\tlet target = '';\n\t\t\tconst hrefValue = href.get();\n\t\t\tif (hrefValue) {\n\t\t\t\tlink.href = hrefValue;\n\t\t\t\ttarget = menu.target || (menu.page ? '_self' : '');\n\t\t\t}\n\t\t\tif (target) {\n\t\t\t\tlink.target = target;\n\t\t\t} else {\n\t\t\t\tlink.removeAttribute('target');\n\t\t\t}\n\t\t}\n\t\tif (button) {\n\t\t\tbutton.disabled = isDisabled;\n\t\t}\n\t}, signal);\n\tlink.addEventListener('click', (e) => {\n\t\tif (!disabled.get()) { return; }\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}, { capture: true });\n\tlink.addEventListener('click', (e) => {\n\t\tif (disabled.get()) { return; }\n\t\tif (e.defaultPrevented) { return; }\n\t\tif (href.get()) {\n\t\t\tif (e.shiftKey) { return; }\n\t\t\tif (isMac ? e.metaKey : e.ctrlKey) { return; }\n\t\t\tif (e.altKey) { return; }\n\t\t}\n\t\tif (click() === false) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\tif (button) {\n\t\tbutton.appendChild(link);\n\t\treturn button;\n\t}\n\treturn link;\n\n}\n","import type { Menu as NeeloongMenu } from '@neeloong/components';\nimport type { Menu } from '@yongdall/web';\nimport '@neeloong/components';\nimport { createIcon, watch } from '@yongdall/web';\n\nimport createMenu from './createMenu.mts';\n\n\nexport default function createMenuButton(\n\tmenus: (Menu | null)[],\n\tmenu: Menu | null,\n\toptions: Menu.RendererOptions,\n) {\n\tconst root = document.createElement('div');\n\tconst child = document.createElement('nl-menu') as NeeloongMenu;\n\tconst hidden = createMenu(child, menus, options);\n\tif (!hidden) { return hidden; }\n\tconst button = root.appendChild(document.createElement('button'));\n\tconst label = menu?.label || menu?.title || '';\n\tif (label) {\n\t\tbutton.appendChild(document.createTextNode(label));\n\t} else {\n\t\tbutton.appendChild(createIcon(menu?.icon || 'more', options.signal));\n\t}\n\tchild.targetElement = button;\n\tbutton.addEventListener('click', () => child.show());\n\troot.appendChild(child);\n\twatch(() => hidden.get(), hidden => root.hidden = hidden, {\n\t\tsignal: options.signal,\n\t\timmediate: true,\n\t})\n\treturn root;\n}\n","import type { NavButton, Theme } from '@yongdall/web';\nimport { Application, createComputed, createFrame, createIcon, createState, effect, ErrorAlerter, loadNavButtons, root as rootContainer } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport pageManager, { activityContainer, setMode } from '../pageManager/index.mjs';\n\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport { actions, header } from './dom.mjs';\nimport { closeSidebarWhenMobile } from './Sider.mjs';\nimport { endGroup, startGroup } from './sides.mjs';\nimport AllSiderPage from './AllSiderPage.mjs';\nimport createMenuButtons from '../menu/createMenuButtons.mts';\nimport createMenuItem from '../menu/createMenuItem.mts';\nimport createMenuButton from '../menu/createMenuButton.mts';\n\n\nfunction addButton({\n\thidden, title, disabled, createIcon: createButtonIcon,\n\tcreatePanel, href, click,\n}: NavButton, signal: AbortSignal) {\n\tif (signal.aborted) { return; }\n\tconst shown = createState(createState(false));\n\tconst ctx: NavButton.Context = {\n\t\tget shown() { return shown.get().get(); },\n\t\tget signal() { return signal; },\n\t}\n\tlet button: HTMLElement\n\tif (createPanel) {\n\t\tconst sider = startGroup.createSider(createPanel(ctx));\n\t\tbutton = sider.button;\n\t\tshown.set(createComputed(() => sider.shown));\n\t\tsignal.addEventListener('abort', () => { sider.remove(); }, { once: true });\n\t} else if (href) {\n\t\tconst action = startGroup.createAction(true);\n\t\teffect(() => {\n\t\t\tconst url = !disabled?.(ctx) && href(ctx);\n\t\t\tif (url) { action.href = url; }\n\t\t\telse { action.removeAttribute('href'); }\n\t\t}, signal);\n\t\tif (click) {\n\t\t\taction.addEventListener('click', event => {\n\t\t\t\tif (click(ctx) === false) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}, { signal });\n\t\t}\n\t\tbutton = action;\n\t\tsignal.addEventListener('abort', () => { action.remove(); }, { once: true });\n\n\t} else {\n\n\t\tconst action = startGroup.createAction();\n\t\tif (disabled) {\n\t\t\teffect(() => {\n\t\t\t\tif (disabled(ctx)) {\n\n\t\t\t\t\taction.removeAttribute('tabIndex');\n\t\t\t\t} else {\n\t\t\t\t\taction.tabIndex = 0;\n\t\t\t\t}\n\t\t\t}, signal);\n\t\t}\n\t\tif (click) {\n\t\t\taction.addEventListener('click', () => { click(ctx) }, { signal });\n\t\t}\n\t\tbutton = action;\n\t\tsignal.addEventListener('abort', () => { action.remove(); }, { once: true });\n\n\t}\n\tif (hidden) {\n\t\teffect(() => { button.hidden = hidden(ctx); }, signal);\n\t}\n\tif (title) {\n\t\teffect(() => { button.title = title(ctx) }, signal);\n\t}\n\tif (createButtonIcon) {\n\t\tbutton.appendChild(createButtonIcon(ctx));\n\t} else {\n\t\tbutton.appendChild(createIcon(['icon', 'logo'], signal));\n\t}\n}\nconst theme: Theme = {\n\ttitle(p) { return [p.title, Application.title || '拥道YongDall'].filter(Boolean).join(' | ') },\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager,\n\telements: [rootContainer, header],\n\tclassNames: [cssPrefix, `${cssPrefix}-allSider`],\n\tstyleFiles: ['theme-allSider.css'],\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new AllSiderPage(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tasync setup(signal) {\n\t\tsetMode(false);\n\t\tlogoLink.addEventListener('click', () => { closeSidebarWhenMobile(); }, { signal });\n\t\tactions.insertBefore(logoLink, actions.firstElementChild);\n\n\t\tconst workspaceSider = startGroup.createSider(menuContainer);\n\t\tworkspaceSider.button.appendChild(createIcon('menu', signal));\n\t\tworkspaceSider.button.title = '菜单';\n\t\tconst activitySider = startGroup.createSider(activityContainer);\n\t\tactivitySider.button.appendChild(createIcon('activity', signal));\n\t\tactivitySider.button.title = '活动';\n\t\tif (window.innerWidth > 800) {\n\t\t\tworkspaceSider.show();\n\t\t}\n\n\t\tconst userSider = endGroup.createSider(userContainer, userButton);\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\tworkspaceSider.remove();\n\t\t\tactivitySider.remove();\n\t\t\tuserSider.remove();\n\t\t}, { once: true });\n\t\tfor await (const button of loadNavButtons()) {\n\t\t\tif (signal.aborted) { return; }\n\t\t\taddButton(button, signal);\n\t\t}\n\t},\n\n};\n\nexport default theme\n","import { type NavButton, createState, createComputed, effect, createIcon } from '@yongdall/web';\n\nexport function addButton(anchor: Node, container: ParentNode, {\n\thidden, title, disabled, createIcon: createButtonIcon,\n\tcreatePanel, href, click,\n}: NavButton, signal: AbortSignal) {\n\tif (signal.aborted) { return; }\n\tconst parent = anchor.parentNode;\n\tif (!parent) { return; }\n\tconst shown = createState(createState(false));\n\tconst ctx: NavButton.Context = {\n\t\tget shown() { return shown.get().get(); },\n\t\tget signal() { return signal; },\n\t};\n\tlet button;\n\tif (createPanel) {\n\t\tconst btn = document.createElement('div');\n\t\tconst panel = createPanel(ctx);\n\t\tbutton = btn;\n\t\tconst panelShown = createState(true);\n\t\tshown.set(createComputed(() => !shown.get()));\n\n\t\tcontainer.appendChild(panel);\n\t\tbtn.addEventListener('click', () => { panel.showPopover(); }, { signal });\n\t\tpanel.setAttribute('popover', 'auto');\n\t\tpanel.addEventListener('toggle', event => { panelShown.set(event.newState === 'closed'); }, { signal });\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tpanel.removeAttribute('popover');\n\t\t\tpanel.remove();\n\t\t}, { once: true });\n\t} else if (href) {\n\t\tconst action = document.createElement('a');\n\t\tif (click) {\n\t\t\taction.addEventListener('click', event => {\n\t\t\t\tif (click(ctx) === false) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}, { signal });\n\t\t}\n\t\teffect(() => {\n\t\t\tconst url = !disabled?.(ctx) && href(ctx);\n\t\t\tif (url) { action.href = url; }\n\t\t\telse { action.removeAttribute('href'); }\n\t\t}, signal);\n\t\tbutton = action;\n\t} else {\n\t\tconst action = document.createElement('div');\n\t\tif (click) {\n\t\t\taction.addEventListener('click', () => { click(ctx) }, { signal });\n\t\t}\n\t\tif (disabled) {\n\t\t\teffect(() => {\n\t\t\t\tif (disabled(ctx)) {\n\n\t\t\t\t\taction.removeAttribute('tabIndex');\n\t\t\t\t} else {\n\t\t\t\t\taction.tabIndex = 0;\n\t\t\t\t}\n\t\t\t}, signal);\n\t\t}\n\t\tbutton = action;\n\t}\n\tif (hidden) {\n\t\teffect(() => { button.hidden = hidden(ctx); }, signal);\n\t}\n\tif (title) {\n\t\teffect(() => { button.title = title(ctx); }, signal);\n\t}\n\tparent.insertBefore(button, anchor);\n\tif (createButtonIcon) {\n\t\tbutton.appendChild(createButtonIcon(ctx));\n\t} else {\n\t\tbutton.appendChild(createIcon(['icon', 'logo'], signal));\n\t}\n\tsignal.addEventListener('abort', () => { button.remove(); }, { once: true });\n}\n","import type { State, Theme } from '@yongdall/web';\nimport { createFrame, createTick, ErrorAlerter, loadNavButtons, Page, root as rootContainer } from '@yongdall/web';\nimport { Application, createIcon, effect } from '@yongdall/web';\n\nimport { cssPrefix } from '../styles/variables.mjs';\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport createMenuButtons from '../menu/createMenuButtons.mts';\nimport createMenuItem from '../menu/createMenuItem.mts';\nimport createMenuButton from '../menu/createMenuButton.mts';\nimport { addButton } from '../utils/addButton.mts';\n\n\n\nconst prefix = `${cssPrefix}-base`;\nconst styleFiles = ['theme-base.css'];\n\nconst headerEl = document.createElement('header');\nconst header = headerEl.appendChild(document.createElement('div'));\nheader.classList.add(`${prefix}-header`);\nconst sidebar = headerEl.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n\nconst menuButton = header.appendChild(createIcon('menu', true));\nmenuButton.classList.add(`${prefix}-menu-button`);\n\nconst span = header.appendChild(document.createElement('span'));\n\nconst openedClassName = `${prefix}-menu-open`;\n\nmenuButton.addEventListener('click', () => {\n\tdocument.body.classList.toggle(openedClassName);\n});\n\n\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tdocument.body.classList.remove(openedClassName);\n});\n\n\nlet tick: State<number> | null = null;\nconst spinner = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\n\n\nconst theme: Theme = {\n\ttitle(p) {\n\t\treturn [[\n\t\t\ttick && p.loading ? spinner[tick.get() % spinner.length] : '',\n\t\t\tp.unsaved ? '🔴' : '',\n\t\t\tp.title,\n\t\t].join(''), Application.title || '拥道YongDall'].filter(Boolean).join(' | ')\n\t},\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager(page) {\n\t\tlet shown = false;\n\t\teffect(() => {\n\t\t\tif (!page.current) {\n\t\t\t\tif (shown) { page.destroy(); }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tshown = true;\n\t\t}, page.signal);\n\t},\n\telements: [headerEl, rootContainer],\n\tclassNames: [cssPrefix, prefix],\n\tstyleFiles,\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tasync setup(signal) {\n\t\ttick = createTick(80, signal);\n\t\tlogoLink.addEventListener('click', () => {\n\t\t\tif (window.innerWidth > 800) { return; }\n\t\t\tdocument.body.classList.remove(openedClassName);\n\t\t}, { signal });\n\n\t\tconst titleSpan = document.createElement('div');\n\t\ttitleSpan.classList.add(`${prefix}-header-title`);\n\t\teffect(() => {\n\t\t\ttitleSpan.innerText = Application.title || Application.company || '';\n\t\t}, signal);\n\t\theader.insertBefore(logoLink, span);\n\t\theader.insertBefore(titleSpan, span);\n\n\t\tif (window.innerWidth > 800) {\n\t\t\tdocument.body.classList.add(openedClassName);\n\t\t}\n\n\t\tsidebar.appendChild(menuContainer);\n\n\t\tconst panelContainer = document.createElement('div');\n\t\tpanelContainer.classList.add(`${prefix}-panels`);\n\t\tdocument.body.appendChild(panelContainer);\n\n\t\tpanelContainer.appendChild(userContainer);\n\t\tuserContainer.setAttribute('popover', 'auto');\n\t\tuserButton.addEventListener('click', () => { userContainer.showPopover(); }, { signal });\n\n\n\n\t\tconst actions = header.appendChild(document.createElement('div'));\n\t\tactions.classList.add(`${prefix}-actions`);\n\n\t\tconst anchor = actions.appendChild(document.createElement('span'));\n\t\tactions.appendChild(userButton);\n\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\ttitleSpan.remove();\n\t\t\tmenuContainer.remove();\n\t\t\tpanelContainer.remove();\n\t\t\tuserContainer.removeAttribute('popover');\n\t\t\tuserContainer.remove();\n\t\t\tuserButton.remove();\n\t\t\tanchor.remove();\n\t\t\tactions.remove();\n\t\t}, { once: true });\n\t\tfor await (const button of loadNavButtons()) {\n\t\t\tif (signal.aborted) { return; }\n\t\t\taddButton(anchor, panelContainer, button, signal);\n\t\t}\n\t},\n\n};\nexport default theme;\n","import type { State, Theme } from '@yongdall/web';\nimport { createFrame, createTick, ErrorAlerter, Page, root as rootContainer } from '@yongdall/web';\nimport { Application, effect } from '@yongdall/web';\n\nimport { cssPrefix } from '../styles/variables.mjs';\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { updatePath } from '../workspace/index.mjs';\nimport renderError from '../error/index.mjs';\n\nimport createMenuButtons from '../menu/createMenuButtons.mts';\nimport createMenuItem from '../menu/createMenuItem.mts';\nimport createMenuButton from '../menu/createMenuButton.mts';\n\n\n\nconst prefix = `${cssPrefix}-pure`;\nconst styleFiles = ['theme-pure.css'];\n\n\n\n\nlet tick: State<number> | null = null;\nconst spinner = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\nconst theme: Theme = {\n\ttitle(p) {\n\t\treturn [[\n\t\t\ttick && p.loading ? spinner[tick.get() % spinner.length] : '',\n\t\t\tp.unsaved ? '🔴' : '',\n\t\t\tp.title,\n\t\t].join(''), Application.title || '拥道YongDall'].filter(Boolean).join(' | ')\n\t},\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager(page) {\n\t\tlet shown = false;\n\t\teffect(() => {\n\t\t\tif (!page.current) {\n\t\t\t\tif (shown) { page.destroy(); }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tshown = true;\n\t\t}, page.signal);\n\t},\n\telements: [rootContainer],\n\tclassNames: [cssPrefix, prefix],\n\tstyleFiles,\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tasync setup(signal) {\n\t\ttick = createTick(80, signal);\n\t},\n\n};\nexport default theme;\n","import { createIcon } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\n\nexport const prefix = `${cssPrefix}-tabs`;\n\nexport const headerEl = document.createElement('header');\nexport const header = headerEl.appendChild(document.createElement('div'));\nheader.classList.add(`${prefix}-header`);\nexport const sidebar = headerEl.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n\nconst menuButton = header.appendChild(createIcon('menu', true));\nmenuButton.classList.add(`${prefix}-menu-button`);\n\nexport const span = header.appendChild(document.createElement('span'));\n\n\nexport const openedClassName = `${prefix}-menu-open`;\n\nmenuButton.addEventListener('click', () => {\n\tdocument.body.classList.toggle(openedClassName);\n});\n\n\nexport function closeSidebarWhenMobile() {\n\tif (window.innerWidth > 800) { return; }\n\tdocument.body.classList.remove(openedClassName);\n}\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tdocument.body.classList.remove(openedClassName);\n});\n","import type { Theme } from '@yongdall/web';\nimport { Application, createFrame, effect, ErrorAlerter, loadNavButtons, Page, root as rootContainer } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport pageManager, { activityContainer, setMode } from '../pageManager/index.mjs';\n\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport { header, closeSidebarWhenMobile, openedClassName, prefix, span } from './dom.mjs';\nimport { headerEl, sidebar } from './dom.mjs';\nimport createMenuButtons from '../menu/createMenuButtons.mts';\nimport createMenuItem from '../menu/createMenuItem.mts';\nimport createMenuButton from '../menu/createMenuButton.mts';\nimport { addButton } from '../utils/addButton.mts';\n\n\n\nconst theme: Theme = {\n\ttitle(p) { return [p.title, Application.title || '拥道YongDall'].filter(Boolean).join(' | ') },\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager,\n\telements: [headerEl, rootContainer],\n\tclassNames: [cssPrefix, `${cssPrefix}-tabs`],\n\tstyleFiles: ['theme-tabs.css'],\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error);},\n\tasync setup(signal) {\n\t\tsetMode(true);\n\t\tlogoLink.addEventListener('click', () => { closeSidebarWhenMobile(); }, {signal});\n\n\t\tconst titleSpan = document.createElement('div');\n\t\ttitleSpan.classList.add(`${prefix}-header-title`);\n\t\teffect(() => {\n\t\t\ttitleSpan.innerText = Application.title || Application.company || '';\n\t\t}, signal);\n\t\t\n\t\theader.insertBefore(logoLink, span);\n\t\theader.insertBefore(titleSpan, span);\n\t\theaderEl.appendChild(activityContainer);\n\n\t\tif (window.innerWidth > 800) {\n\t\t\tdocument.body.classList.add(openedClassName);\n\t\t}\n\n\t\tsidebar.appendChild(menuContainer);\n\n\t\tconst panelContainer = document.createElement('div');\n\t\tpanelContainer.classList.add(`${prefix}-panels`);\n\t\tdocument.body.appendChild(panelContainer);\n\n\t\tpanelContainer.appendChild(userContainer);\n\t\tuserContainer.setAttribute('popover', 'auto')\n\t\tuserButton.addEventListener('click', () => { userContainer.showPopover(); }, {signal});\n\n\n\t\tconst actions = header.appendChild(document.createElement('div'));\n\t\tactions.classList.add(`${prefix}-actions`);\n\n\t\tconst anchor = actions.appendChild(document.createElement('span'));\n\t\tactions.appendChild(userButton);\n\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\ttitleSpan.remove();\n\t\t\tactivityContainer.remove();\n\t\t\tmenuContainer.remove();\n\t\t\tuserContainer.removeAttribute('popover')\n\t\t\tuserContainer.remove();\n\t\t\tuserButton.remove();\n\t\t}, {once: true});\n\t\t\t\tfor await (const button of loadNavButtons()) {\n\t\t\t\t\tif (signal.aborted) { return; }\n\t\t\t\t\taddButton(anchor, panelContainer, button, signal);\n\t\t\t\t}\n\t},\n\n};\n\nexport default theme;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yongdall/theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"exports": {
|
|
5
5
|
".": "./index.mjs"
|
|
6
6
|
},
|
|
7
7
|
"dependencies": {},
|
|
8
8
|
"devDependencies": {
|
|
9
9
|
"@neeloong/components": "^0.8.0",
|
|
10
|
-
"@yongdall/core": "^0.
|
|
10
|
+
"@yongdall/core": "^0.7.0",
|
|
11
11
|
"@neeloong/table": "^0.1.1",
|
|
12
|
-
"@yongdall/web": "^0.
|
|
12
|
+
"@yongdall/web": "^0.7.0"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
15
|
"@neeloong/components": "^0.8.0",
|
|
16
16
|
"@neeloong/table": "^0.1.1",
|
|
17
|
-
"@yongdall/web": "^0.
|
|
17
|
+
"@yongdall/web": "^0.7.0"
|
|
18
18
|
},
|
|
19
19
|
"main": "./index.mjs",
|
|
20
20
|
"type": "module"
|