@yongdall/web 0.6.1 → 0.6.3
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/index.d.mts +309 -52
- package/index.mjs +53 -51
- package/index.mjs.map +1 -1
- package/package.json +11 -5
- package/plugin.d.mts +1 -1
- package/yongdall.assets.json +18 -1
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["Signal","parse","stringify","parse","toTime","toDate","parse","parse","parseDate","list","defaultGenerators","#config","#hooks","#stringTag","#keys","#handlers","#do","DotRequest","pathRoots","path","require","enumerations","load","configuration.applicationId","configuration.path","root","title","pages","exec","Search.exec","Pattern.generate","ArrayStore","Search.parse","Search.fill","createState","Search.exec","modelService","ArrayStore","ObjectStore","renderStore","encode","renderStoreForm","Store","#waitDestroy","#signal","#destroyed","#container","#root","List","#table","#thead","#createUrl","#renderList","#labelPattern","#fieldsShow","#idFields","#tr","#tbody","#documents","Pattern.generate","FormList","#pagination","#container","#buttons","#destroyMenu","#menu","#root","#dialog","#body","#ac","#cancelable","#bodyMain","#headerAbortController","#header","#footAbortController","#footer","#store","#state","#root","#promiseWithResolvers","#index","#cancelable","#title","#pages","#currentPage","#prevPage","#nextPage","#completable","#resolve","#ac","#reject","#promise","pages","Search.parse","pages","currentPage","rootContainer","loadingContainer","triggerLoading","stringify","parse","parse","Ident.decode","Ident.parse","Ident.stringify","Ident.encode","Code128.encode","#print","#unsaved","#root","#path","#search","#hash","#pageId","#abortController","#define","#ident","#pageHandler","#open","#setRootPath","#onToggle","#onHide","#bootLoading","#href","#title","#icon","#printDeeply","#guarded","#loading","routerParser.stringify","#rootPath","#destroyDelayed","#root","#container","#root","#container","#destroyMenu","#menu","#root","#container","#inserted","#placeholder","#parent","#root","#header","#body","#container","#inserted","#updateParentUnprintable","#parent","#title","#menuAbortController","#placeholder","#buttons","#signal","#root","#main","#body","#destroyed","#container","#mode","#abortController","#headerAbortController","#header","#headerRoot","#footAbortController","#footer","#footerRoot","#sides","root","#state","#abortController","#pageUI","#container","#destroyDelayed","routerParser.stringify","parse","parse","Pattern.generate","request","pathRoots","currentPage"],"sources":["../../packages/web/signal.mts","../../packages/common/Search/util.mjs","../../packages/common/Search/exec.mjs","../../packages/common/Search/fill.mjs","../../packages/common/Search/parse.mjs","../../packages/common/Search/merge.mjs","../../packages/common/Search/stringify.mjs","../../packages/common/Search/toWhere.mjs","../../packages/common/Search/index.mjs","../../packages/common/Datetime.mjs","../../packages/common/Pattern/parse.mjs","../../packages/common/Pattern/toGenerate.mjs","../../packages/common/Pattern/generators.mjs","../../packages/common/Pattern/generate.mjs","../../packages/common/Pattern/index.mjs","../../packages/common/transformError.mjs","../../packages/common/Hook.mjs","../../packages/common/ErrorHandler.mjs","../../packages/common/LazyPromise.mjs","../../packages/common/model.mjs","../../packages/common/yieldPermissionConstraintFields.mjs","../../packages/common/index.mjs","../../packages/web/allHooks.mjs","../../packages/web/form/field.mjs","../../packages/web/paths.mjs","../../packages/web/utils/date.mjs","../../packages/web/request.mjs","../../packages/web/configuration.mjs","../../packages/web/utils/state.mjs","../../packages/web/user.mjs","../../packages/web/permission.mjs","../../packages/web/form/toSchema.mjs","../../packages/web/importmap.mjs","../../packages/web/import.mjs","../../packages/web/ResponseError.mjs","../../packages/web/services/createPromisesAndStates.mjs","../../packages/web/services/toPromiseInterface.mjs","../../packages/web/services/model.mjs","../../packages/web/services/enumeration.mjs","../../packages/web/services/formLayout.mjs","../../packages/web/services/permissions.mjs","../../packages/web/services/application.mts","../../packages/web/DataSource/modelFilter.mjs","../../packages/web/DataSource/createExec.mjs","../../packages/web/DataSource/filterList.mjs","../../packages/web/DataSource/build.mjs","../../packages/web/enumerations.mjs","../../packages/web/DataSource/loadValues.mjs","../../packages/web/DataSource/loadArray.mjs","../../packages/web/DataSource/flat.mjs","../../packages/web/DataSource/index.mjs","../../packages/web/form/createStoreField.mjs","../../packages/web/form/renderStoreForm.mjs","../../packages/web/utils/createNeverAbortedSignal.mts","../../packages/web/utils/toUrl.mjs","../../packages/web/utils/isPluginId.mjs","../../packages/web/utils/waitAbortSignal.mjs","../../packages/web/utils/code128.mjs","../../packages/web/form/renderForm.mjs","../../packages/web/form/createStore.mjs","../../packages/web/form/createShowField.mjs","../../packages/web/form/createQuickFilters.mjs","../../packages/web/form/createFilter.mjs","../../packages/web/form/createFieldFilter.mjs","../../packages/web/form/createFilters.mjs","../../packages/web/dom/root.mjs","../../packages/web/dom/setIcon.mjs","../../packages/web/GeneralContext.mjs","../../packages/web/dom/ModalFooter.mjs","../../packages/web/form/List.mjs","../../packages/web/components.mjs","../../packages/web/Menu.mjs","../../packages/web/dom/ModalHeader.mjs","../../packages/web/dom/Modal.mjs","../../packages/web/dom/createModal.mjs","../../packages/web/dom/createProgressModal.mjs","../../packages/web/dom/Guide.mjs","../../packages/web/dom/index.mjs","../../packages/web/form/showFilterDialog.mjs","../../packages/web/form/showSortDialog.mjs","../../packages/web/script/index.mjs","../../packages/web/services/page.mjs","../../packages/web/route/load.mjs","../../packages/web/route/pageManager.mjs","../../packages/web/route/renderHome.mjs","../../packages/web/route/loadingContainer.mjs","../../packages/web/route/home.mjs","../../packages/web/Ident.mjs","../../packages/web/route/route.mjs","../../packages/web/print.mjs","../../packages/web/route/PageHandle.mjs","../../packages/web/route/renderError.mjs","../../packages/web/route/PageFooter.mjs","../../packages/web/route/PageHeader.mjs","../../packages/web/route/PageSection.mjs","../../packages/web/route/PageSider.mjs","../../packages/web/route/Page.mjs","../../packages/web/route/createPage.mjs","../../packages/web/route/PageContext.mjs","../../packages/web/route/createPageFrame.mjs","../../packages/web/route/showPage.mjs","../../packages/web/route/setHistoryUrl.mjs","../../packages/web/route/parse.mjs","../../packages/web/route/setUrl.mjs","../../packages/web/route/index.mjs","../../packages/web/model/createModelDefault.mjs","../../packages/web/model/createDocumentInModal.mjs","../../packages/web/model/showDocumentInModal.mjs","../../packages/web/model/index.mjs","../../packages/web/Command.mjs","../../packages/web/icons/index.mjs","../../packages/web/file.mjs","../../packages/web/buildPlugin.mjs","../../packages/web/start.mjs","../../packages/web/files/zip.mts"],"sourcesContent":["import { Signal } from 'signal-polyfill';\n\n/**\n * @template T\n */\nexport interface State<T> {\n\tget(): T;\n\tset(newValue: T): void;\n}\n\n/**\n * 相应式执行\n * @param fn 执行函数\n * @param signal 可选的中断信号\n */\nexport function effect(fn: () => void, signal?: AbortSignal): void {\n\tlet needsEnqueue = true;\n\tif (signal?.aborted) { return; }\n\tconst w = new Signal.subtle.Watcher(() => {\n\t\tif (!needsEnqueue) { return; }\n\t\tneedsEnqueue = false;\n\t\tqueueMicrotask(() => {\n\t\t\tneedsEnqueue = true;\n\t\t\tfor (const s of w.getPending()) {\n\t\t\t\ts.get();\n\t\t\t}\n\t\t\tw.watch();\n\t\t});\n\t});\n\tconst computed = new Signal.Computed(fn);\n\n\tw.watch(computed);\n\tcomputed.get();\n\tsignal?.addEventListener('abort', () => {\n\t\tw.unwatch(computed);\n\t}, { once: true });\n}\n\n/**\n * 创建可赋值计算值\n * @template T\n * @param getter 取值方法或取值方法数组\n * @param callback 回调函数,接收当前值和旧值\n * @param options 配置选项\n * @param options.immediate 是否立即执行一次\n * @param options.signal 中断信号\n */\nexport function watch<T>(\n\tgetter: (() => T)[],\n\tcallback: (\n\t\tvalue: T[],\n\t\toldValue: T[] | undefined,\n\t\tonCleanup: ((() => AbortSignal) & ((cleanupFn: () => void) => void)),\n\t) => void,\n\toptions?: { immediate?: boolean; signal?: AbortSignal },\n): void;\n\n/**\n * 创建可赋值计算值\n * @template T\n * @param getter 取值方法或取值方法数组\n * @param callback 回调函数,接收当前值和旧值\n * @param options 配置选项\n * @param options.immediate 是否立即执行一次\n * @param options.signal 中断信号\n */\nexport function watch<T>(\n\tgetter: (() => any)[],\n\tcallback: (\n\t\tvalue: any[],\n\t\toldValue: any[] | undefined,\n\t\tonCleanup: ((() => AbortSignal) & ((cleanupFn: () => void) => void)),\n\t) => void,\n\toptions?: { immediate?: boolean; signal?: AbortSignal },\n): void;\n\n/**\n * 创建可赋值计算值\n * @template T\n * @param getter 取值方法或取值方法数组\n * @param callback 回调函数,接收当前值和旧值\n * @param options 配置选项\n * @param options.immediate 是否立即执行一次\n * @param options.signal 中断信号\n */\nexport function watch<T>(\n\tgetter: () => T,\n\tcallback: (\n\t\tvalue: T,\n\t\toldValue: T | undefined,\n\t\tonCleanup: ((() => AbortSignal) & ((cleanupFn: () => void) => void))\n\t) => void,\n\toptions?: { immediate?: boolean; signal?: AbortSignal },\n): void;\n\n/**\n * 创建可赋值计算值\n * @template T\n * @param getter 取值方法或取值方法数组\n * @param callback 回调函数,接收当前值和旧值\n * @param options 配置选项\n * @param options.immediate 是否立即执行一次\n * @param options.signal 中断信号\n */\nexport function watch<T>(\n\tgetter: (() => T) | (() => T)[],\n\tcallback: (\n\t\tvalue: T | T[],\n\t\toldValue: T | T[] | undefined,\n\t\tonCleanup: ((() => AbortSignal) & ((cleanupFn: () => void) => void)),\n\t) => void,\n\t{ immediate, signal }: { immediate?: boolean; signal?: AbortSignal } = {},\n): void {\n\tconst isArray = Array.isArray(getter);\n\tconst getters = isArray ? getter : [getter];\n\tlet value: T[] | null = null;\n\tlet ac: AbortController | null = null;\n\teffect(() => {\n\t\tconst val = getters.map(v => v());\n\t\tconst oldValue = value;\n\t\tvalue = val;\n\t\tif (oldValue) {\n\t\t\tif (oldValue.findIndex((v, i) => !Object.is(v, val[i])) < 0) { return; }\n\t\t} else {\n\t\t\tif (!immediate) { return; }\n\t\t}\n\t\tac?.abort();\n\t\tac = new AbortController();\n\t\tconst cbSignal = signal ? AbortSignal.any([signal, ac.signal]) : ac.signal;\n\t\tfunction onCleanup(): AbortSignal;\n\t\tfunction onCleanup(fn: () => void): void;\n\t\tfunction onCleanup(fn?: () => void): AbortSignal | void {\n\t\t\tif (!fn) { return cbSignal; }\n\t\t\tcbSignal.addEventListener('abort', () => fn(), { once: true });\n\t\t}\n\t\tcallback(\n\t\t\tisArray ? [...val] : val[0],\n\t\t\toldValue ? isArray ? [...oldValue] : oldValue[0] : undefined,\n\t\t\tonCleanup,\n\t\t);\n\t}, signal);\n}\n\n/**\n * 创建响应式状态\n * @template T\n * @param initValue 初始值\n * @returns 一个响应式状态对象\n */\nexport function createState<T>(initValue: T): State<T>;\n\n/**\n * 创建响应式状态\n * @template T\n * @param initValue 初始值\n * @returns 一个响应式状态对象\n */\nexport function createState<T>(initValue?: T): State<T | undefined>;\n\n/**\n * 创建响应式状态\n * @template T\n * @param initValue 初始值\n * @returns 一个响应式状态对象\n */\nexport function createState<T>(initValue?: T): State<T | undefined> {\n\treturn new Signal.State(initValue);\n}\n\n/**\n * 创建计算状态\n * @template T\n * @param get 获取函数\n * @param set 设置函数(可选)\n * @returns 一个响应式状态对象\n */\nexport function createComputed<T>(get: () => T, set?: (newValue: T) => void): State<T> {\n\tconst s = new Signal.Computed(get);\n\treturn {\n\t\tget() { return s.get(); },\n\t\tset: typeof set === 'function' ? set : () => {},\n\t};\n}\n\n/**\n * 创建安全计算状态,防止递归更新\n * @template T\n * @param initialValue 初始值\n * @param get 获取函数\n * @param set 设置函数(可选)\n * @returns 一个响应式状态对象\n */\nexport function createSafeComputed<T>(initialValue: T, get: () => T, set?: (newValue: T) => void): State<T> {\n\tconst s = new Signal.Computed(get);\n\tlet running = false;\n\tlet value = initialValue;\n\treturn {\n\t\tget() {\n\t\t\tif (running) { return value; }\n\t\t\ttry {\n\t\t\t\trunning = true;\n\t\t\t\tvalue = s.get();\n\t\t\t\treturn value;\n\t\t\t} finally {\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t},\n\t\tset: typeof set === 'function' ? set : () => {},\n\t};\n}\n\n/**\n * 创建深层响应式状态\n * @template T\n * @param state 父状态\n * @param struct 结构定义\n * @returns 具有深层响应式属性的对象\n */\nexport function createDeeply<T extends Record<string, any>>(state: State<T>, struct: Record<string, any>): T {\n\tconst descriptorMap: [string, PropertyDescriptor][] = Object.entries(struct).map(([k, v]) => {\n\t\tconst computed = createComputed(\n\t\t\t() => state.get()?.[k],\n\t\t\t(v) => state.set({ ...state.get(), [k]: v })\n\t\t);\n\t\tlet get = () => computed.get();\n\t\tlet set = (v: any) => computed.set(v);\n\t\tif (v && typeof v === 'object' && !Array.isArray(v)) {\n\t\t\tlet children: any = null;\n\t\t\tget = () => children ||= createDeeply(computed as State<any>, v);\n\t\t\tset = v => computed.set(structuredClone(v));\n\t\t}\n\t\treturn [k, {\n\t\t\tget, set, enumerable: true,\n\t\t\tconfigurable: true,\n\t\t}];\n\t});\n\t// @ts-ignore\n\treturn Object.defineProperties({}, Object.fromEntries(descriptorMap));\n}\n\ninterface TickItem {\n\ttick: State<number>;\n\tcount: number;\n\tstop(): void;\n}\n\nconst ticks = new Map<number, TickItem>();\n\n/**\n * 创建响应式计时器\n * @param interval 间隔时间(毫秒)\n * @param signal 可选的中断信号\n * @returns 表示计时次数的响应式状态\n */\nexport function createTick(interval: number, signal?: AbortSignal): State<number> {\n\tif (signal?.aborted) { return createComputed(() => 0); }\n\tlet item = ticks.get(interval);\n\tif (!item) {\n\t\tconst tick = createState(0);\n\t\tconst start = performance.now();\n\t\tlet timerId = setTimeout(function step() {\n\t\t\tconst allTimes = performance.now() - start;\n\t\t\tconst n = Math.floor(allTimes / interval);\n\t\t\ttick.set(n);\n\t\t\tconst delay = (n + 1) * interval - allTimes;\n\t\t\ttimerId = setTimeout(step, Math.max(0, delay));\n\t\t}, interval);\n\t\titem = {\n\t\t\ttick: createComputed(() => tick.get()), \n\t\t\tcount: 0, \n\t\t\tstop() {\n\t\t\t\tclearTimeout(timerId);\n\t\t\t\tif (ticks.get(interval) !== item) { return; }\n\t\t\t\tticks.delete(interval);\n\t\t\t}\n\t\t};\n\t\tticks.set(interval, item);\n\t}\n\titem.count++;\n\tsignal?.addEventListener('abort', () => {\n\t\titem.count--;\n\t\tif (item.count) { return; }\n\t\titem.stop();\n\t}, { once: true });\n\treturn item.tick;\n}\n","\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => TNext} run \n * @param {TNext} def \n */\nexport function runGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = run(result.value);\n\t}\n}\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => PromiseLike<TNext> | TNext} run \n * @param {TNext} def \n */\nexport async function asyncRunGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = await run(result.value);\n\t}\n}\n","/** @import { Children, Field, Match, Or } from './types.mjs' */\nimport { asyncRunGenerator, runGenerator } from './util.mjs';\n\n\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} fields \n * @returns {any[]}\n */\nfunction select(data, fields) {\n\tlet list = data;\n\tfor (let item of fields) {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\n\t\tif (!list.length) { continue; }\n\t\t/** @type {any[]} */\n\t\tconst subList = [];\n\t\tit: for (const item of list) {\n\t\t\tif (!item || typeof item !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\t\tlet value = item[field];\n\t\t\tfor (const index of sub) {\n\t\t\t\tif (!Array.isArray(value)) { continue it; }\n\t\t\t\tvalue = value[index];\n\t\t\t}\n\t\t\tsubList.push(value);\n\t\t}\n\t\tlist = subList.flat(Infinity).filter(v => v && typeof v === 'object');\n\t}\n\treturn list;\n\n}\n\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {string} field \n * @returns {any[]}\n */\nfunction selectValue(list, field) {\n\t/** @type {any[]} */\n\tconst subList = [];\n\tfor (const item of list) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tsubList.push(item[field]);\n\t}\n\treturn subList;\n\n}\n/**\n * @typedef {object} ExecParam\n * @property {Field[]} fields\n * @property {string} operator\n * @property {string?} [sign]\n * @property {any} value\n * @property {any[]} values\n * @property {string} [field]\n */\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} parentFields \n * @param {Match} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execMatch(data, parentFields, match) {\n\tconst fields = [...match[0]];\n\tconst currentFields = [...parentFields, ...fields];\n\tconst last = fields.pop();\n\tif (!last) { return null; }\n\tconst lastField = typeof last === 'string' ? last : last[0];\n\tconst records = select(data, fields);\n\tif (!records.length) { return false; }\n\tconst [, value, operator, sign] = match;\n\tif (operator === null) {\n\t\tconst values = selectValue(records, lastField);\n\t\treturn sign ? values.find(v => v === null) : values.find(v => v !== null);\n\t}\n\tif (typeof value !== 'object' || !value || Array.isArray(value)) {\n\n\t\tconst values = selectValue(records, lastField);\n\t\tif (!values.length) { return false; }\n\n\t\treturn yield ({ fields: currentFields, operator, sign, value, values });\n\t}\n\n\tif (value.filter || value.table || value.placeholder) { return null; }\n\tconst field = value.field;\n\tif (!field) { return null; }\n\n\t/** @type {boolean?} */\n\tlet defResult = false;\n\tfor (const item of records) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tif (!Object.hasOwn(item, lastField)) { continue; }\n\t\tdefResult = null;\n\t\tconst result = yield ({ fields: currentFields, operator, sign, value: item[field], field, values: [item[lastField]] });\n\t\tif (result === null) { continue; }\n\t\treturn result;\n\t}\n\treturn defResult;\n\n}\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} parentFields \n * @param {Match | Children | Or} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execItem(data, parentFields, match) {\n\tif (!Array.isArray(match)) {\n\t\tconst { and, or } = match;\n\t\treturn yield* execOr(data, parentFields, and, or);\n\t}\n\tif (match.length !== 2) {\n\t\treturn yield* execMatch(data, parentFields, match);\n\n\t}\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tconst values = select(data, match[0]);\n\tif (!values.length) { return false; }\n\tconst fields = [...parentFields, ...match[0]];\n\tfor (const item of match[1]) {\n\t\tconst result = yield* execItem(values, fields, item);\n\t\tif (result === null) { continue; }\n\t\tif (!result) { return false; }\n\t\tdefResult = true;\n\t}\n\treturn defResult;\n}\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {Field[]} parentFields \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execOr(list, parentFields, and, or) {\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tif (Array.isArray(and)) {\n\t\tfor (const item of and) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (!result) { return false; }\n\t\t\tdefResult = true;\n\t\t}\n\t}\n\tif (Array.isArray(or)) {\n\t\tfor (const item of or) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (result) { return true; }\n\t\t\tdefResult = false;\n\t\t}\n\t}\n\treturn defResult;\n\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport function exec(data, exec, and, or) {\n\treturn runGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => PromiseLike<boolean?> | boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport async function asyncExec(data, exec, and, or) {\n\treturn asyncRunGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n","/** @import { Value } from './types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or } from './types.mjs' */\n\nimport { runGenerator } from './util.mjs';\n\n\n\n\n\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value, T[]?, Value | null>}\n */\nfunction* fillList(match) {\n\t/** @type {T[]} */\n\tlet list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T} match \n * @returns {Generator<Value, T?, Value | null>}\n */\nfunction* fillMatch(match) {\n\tif (!Array.isArray(match)) {\n\t\tconst and = match.and && (yield* fillMatches(match.and));\n\t\tconst or = match.or && (yield* fillMatches(match.or));\n\t\tif (!and && !or) { return null; }\n\t\t/** @type {Or} */\n\t\tconst item = { and: and || match.and, or: or || match.or };\n\t\treturn /** @type {T} */(item);\n\t}\n\tif (match.length === 2) {\n\t\tlet children = yield* fillMatches(match[1]);\n\t\tif (!children) { return null; }\n\t\t/** @type {Children} */\n\t\tconst item = [match[0], match[1]];\n\t\treturn /** @type {T} */(item);\n\t}\n\tconst value = yield match[1];\n\tif (value === null) { return null; }\n\t/** @type {Match} */\n\tconst item = [match[0], value, match[2], match[3]];\n\treturn /** @type {T} */(item);\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value, T[]?, Value | null>}\n */\nexport function* fillMatches(match) {\n\t/** @type {T[]} */\n\tconst list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[] | null | undefined} match \n * @param {(placeholder: string) => Value | null} getPlaceholder \n * @returns {T[]}\n */\nexport function fill(match, getPlaceholder) {\n\tif (!match) { return []; }\n\t/**\n\t * \n\t * @template {Value} T \n\t * @param {T} match \n\t * @returns {Value | null}\n\t */\n\tfunction fillValue(match) {\n\t\tif (!match || typeof match !== 'object') { return null; }\n\t\tif (Array.isArray(match)) { return null; }\n\t\tconst placeholder = match.placeholder;\n\t\tif (!placeholder || typeof placeholder !== 'string') { return null; }\n\t\treturn getPlaceholder(placeholder);\n\t}\n\treturn runGenerator(fillList(match), fillValue, null) || match;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, Match, Or, Param, Value } from './types.mjs' */\n\n\n\n/**\n * @typedef {object} Parse.Field\n * @property {string} field\n * @property {string?} [group]\n * @property {number[]} sub\n */\n/**\n * @typedef {object} Parse.Match\n * @property {null} [children]\n * @property {Parse.Field[]} fields\n * @property {string?} operator\n * @property {string} [sign]\n * @property {Value} value\n */\n\n\n/**\n * @typedef {object} Parse.Children\n * @property {Parse.Field[]} fields\n * @property {(Parse.Match | Parse.Children)[]} children\n */\n\n/**\n * \n * @param {Parse.Field[]} fields \n * @returns {Field[]}\n */\nfunction compressFields(fields) {\n\treturn fields.map(\n\t\t({ field, sub }) => sub.length ? [field, ...sub] : field\n\t);\n}\n\n/**\n * \n * @param {Parse.Match | Parse.Children} v \n * @returns {Match | Children}\n */\nfunction compressAndItem(v) {\n\tif (v.children) {\n\treturn [compressFields(v.fields), v.children.map(compressAndItem)];\n\n\t}\n\tconst { fields, operator, value, sign } = v;\n\treturn [compressFields(fields), value, operator, sign];\n}\n\nconst fieldParserRegex = /^([-_\\d\\p{L}]+)((?:\\[-?\\d+\\])*)$/u;\n/**\n * \n * @param {string} l \n */\nfunction parseFields(l) {\n\t/** @type {Parse.Field[]} */\n\tconst fields = [];\n\tfor (const v of l.split('.')) {\n\t\tif (!v || v[0] === '?') { return null; }\n\t\tconst index = v.indexOf('?');\n\t\tconst r = fieldParserRegex.exec(index > 0 ? v.slice(0, index) : v);\n\t\tif (!r) { return null; }\n\t\tconst sub = r[2]?.split(/\\[|\\]/).filter(Boolean).map(v => parseInt(v) || 0) || [];\n\t\tconst group = index > 0 ? v.slice(index) : undefined;\n\t\tfields.push({ field: r[1], group, sub });\n\t}\n\treturn fields;\n\n}\n\n\n/** @param {string} v */\nconst decodeValue = v => decodeURIComponent(v.replaceAll('+', ' '));\n/**\n * \n * @param {string} s \n * @returns {string | RecursiveArray<string>?}\n */\nfunction parseArrayValue(s) {\n\t/** @type {(string | RecursiveArray<string>)[]} */\n\tconst root = [];\n\t/** @type {(string | RecursiveArray<string>)[][]} */\n\tconst stack = [];\n\tlet current = root;\n\t/** @type {string[]} */\n\tlet strings = [];\n\tlet end = false;\n\tlet must = true;\n\tfunction add() {\n\t\tcurrent.push(decodeValue(strings.join()));\n\t\tstrings = [];\n\t}\n\n\tfor (const c of s) {\n\t\tif (c === ',') {\n\t\t\tif (end) {\n\t\t\t\tend = false;\n\t\t\t} else {\n\t\t\t\tadd();\n\t\t\t}\n\t\t\tmust = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === ')') {\n\t\t\tif (must || strings.length) {\n\t\t\t\tadd();\n\t\t\t\tmust = false;\n\t\t\t}\n\t\t\tconst last = stack.pop();\n\t\t\tif (!last) { return null; }\n\t\t\tlast.push(current);\n\t\t\tcurrent = last;\n\t\t\tend = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (end) { return null; }\n\t\tmust = false;\n\t\tif (c !== '(') {\n\t\t\tstrings.push(c);\n\t\t\tcontinue;\n\t\t}\n\t\tif (strings.length) { return null; }\n\t\tstack.push(current);\n\t\tcurrent = [];\n\t}\n\tif (must || strings.length) {\n\t\tadd();\n\t}\n\tif (stack.length) { return null; }\n\treturn root.length === 1 ? root[0] : root;\n}\n\nconst valueQRegex = /^([-_\\d\\p{L}]+)@([-_\\d\\p{L}]+)/u;\n\n\n/**\n * \n * @param {string?} v \n * @returns {Value | true}\n */\nfunction parseValue(v) {\n\tif (v === null) { return true; }\n\tif (v[0] === '?') {\n\t\treturn { placeholder: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === ':') {\n\t\treturn { field: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === '@') {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tconst vq = valueQRegex.test(v);\n\tif (vq) {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tif (v.includes('(') || v.includes(')')) {\n\t\tconst list = parseArrayValue(v);\n\t\tif (list) { return list; }\n\t}\n\tif (v.includes(',')) {\n\t\treturn v.split(',').map(v => decodeValue(v.replaceAll('+', ' ')));\n\t}\n\treturn decodeValue(v);\n}\n/**\n * \n * @param {(Parse.Match | Parse.Children)[]} list \n * @returns {Iterable<Match | Children>}\n */\nfunction* toAnd(list) {\n\t/** @type {[(Parse.Match | Parse.Children), Parse.Field[], Parse.Field[]][]} */\n\tconst values = list.map(v => {\n\t\tconst fields = v.fields;\n\t\tconst index = fields.findLastIndex(v => v.group);\n\t\tif (index < 0 || index >= fields.length - 1) {\n\t\t\treturn [v, [], []];\n\t\t}\n\t\tconst field = fields[index];\n\t\tif (!field) { return [v, [], []]; }\n\t\treturn [{ ...v, fields: fields.slice(index + 1) }, fields.slice(0, index + 1), [...fields.slice(0, index), { ...field, group: undefined }]];\n\t});\n\tconst map = Object.groupBy(values, v => JSON.stringify(v[1]));\n\tyield* map['[]']?.map(v => compressAndItem(v[0])) || [];\n\tdelete map['[]'];\n\t/** @type {Parse.Children[]} */\n\tconst result = Object.values(map).filter(Boolean).map((list = []) => {\n\t\tif (!list?.length) { return { fields: [], children: [] }; }\n\t\treturn { fields: list[0][2] || [], children: list.map(v => v[0]) };\n\t}).filter(v => v.fields.length);\n\tif (!result.length) { return; }\n\n\tyield* toAnd(result);\n}\n\n/**\n * \n * @param {(Parse.Match & {groups: string[]})[]} list \n * @returns {Or}\n */\nfunction toOr(list) {\n\tconst map = Map.groupBy(list, v => v.groups.shift() ?? null);\n\tconst and = map.get(null) || [];\n\tconst baseOr = map.get('') || [];\n\tmap.delete(null);\n\tmap.delete('');\n\n\treturn {\n\t\tor: [\n\t\t\t...baseOr.map(v => compressAndItem(v)),\n\t\t\t...[...map.values()].map(v => toOr(v)),\n\t\t],\n\t\tand: [...toAnd(and)],\n\t};\n}\n/**\n * \n * @param {string} search \n * @returns {Param & {others: Record<string, string[]>}}\n */\nexport function parse(search, split = '&') {\n\t/** @type {string[]} */\n\tconst values = [];\n\t/** @type {string[]} */\n\tconst select = [];\n\t/** @type {string[]} */\n\tconst primary = [];\n\t/** @type {Record<string, string[]>} */\n\tconst others = {};\n\t/** @type {[field: string, desc?: boolean][]} */\n\tconst sorts = [];\n\tlet limit = 0;\n\tlet offset = 0;\n\tlet page = 0;\n\tlet total = false;\n\t/** @type {Record<string, string>} */\n\tconst placeholders = {};\n\n\n\t/** @type {(Parse.Match & {groups: string[]})[]} */\n\tconst allMatches = [];\n\n\tfor (const s of typeof search === 'string' ? search.split(split) : []) {\n\t\tif (s[0] === '=') {\n\t\t\tvalues.push(s.slice(1));\n\t\t\tcontinue;\n\t\t}\n\t\tconst index = s.indexOf('=');\n\t\tconst key = index < 0 ? s : s.slice(0, index);\n\t\tconst val = index < 0 ? null : s.slice(index + 1);\n\t\tif (index <= 0) { continue; }\n\t\tif (`.!@^*<>{}[]()+|;,\"'\\`\\\\/`.includes(key[0])) { continue; }\n\t\tif (key[0] === '?') {\n\t\t\tplaceholders[decodeValue(key.slice(1))] = decodeValue(val || '');\n\t\t\tcontinue;\n\t\t}\n\t\tif (key[0] === ':') {\n\t\t\tconst name = key.slice(1);\n\t\t\tif (!val) { continue; }\n\t\t\tif (name === 'sort') {\n\t\t\t\tsorts.push(...val.split(',').filter(Boolean).map(v => {\n\t\t\t\t\tconst desc = v[0] === '-';\n\t\t\t\t\tconst name = desc ? v.slice(1) : v;\n\t\t\t\t\treturn /** @type {[field: string, desc?: boolean]} */([decodeValue(name), desc]);\n\t\t\t\t}).filter(Boolean));\n\t\t\t} else if (name === 'select') {\n\t\t\t\tselect.push(...val.split(',').map(decodeValue).filter(Boolean));\n\t\t\t} else if (name === 'primary') {\n\t\t\t\tprimary.push(...val.split(',').map(decodeValue).filter(Boolean));\n\t\t\t} else if (name === 'limit') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { limit = parseInt(val); }\n\t\t\t} else if (name === 'offset') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { offset = parseInt(val); }\n\t\t\t} else if (name === 'page') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { page = parseInt(val); }\n\t\t\t} else if (name === 'total') {\n\t\t\t\tif (val) { total = true; }\n\t\t\t} else {\n\t\t\t\tif (Object.hasOwn(others, name)) {\n\t\t\t\t\tothers[name].push(val);\n\t\t\t\t} else {\n\t\t\t\t\tothers[name] = [val];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst sg = key.split('~');\n\t\tlet field = sg.pop() || '';\n\t\tlet sign = '';\n\t\tif ('!'.includes(field[field.length - 1])) {\n\t\t\tsign = '!';\n\t\t\tfield = field.slice(0, -1);\n\t\t}\n\n\t\tconst l = field.split(':', 3);\n\t\tif (l.length > 2) { continue; }\n\t\tconst fields = parseFields(l[0]);\n\t\tif (!fields) { continue; }\n\t\tconst value = parseValue(val);\n\t\tif (value === null) { continue; }\n\n\t\tconst operator = decodeValue(l[1] || '');\n\t\tconst groupIndex = sg.indexOf('');\n\t\tconst groups = groupIndex < 0 ? sg : sg.slice(0, groupIndex + 1);\n\t\tallMatches.push({\n\t\t\tgroups,\n\t\t\tfields,\n\t\t\toperator: !operator && value === true ? null : operator,\n\t\t\tsign,\n\t\t\tvalue: value === true ? null : value\n\t\t});\n\t}\n\n\tconst { and, or } = toOr(allMatches);\n\n\t/** @type {Param & {others: Record<string, string[]>}} */\n\tconst result = {others};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (total) {\n\t\tresult.total = total;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (primary?.length) {\n\t\tresult.primary = primary;\n\t}\n\tif (sorts?.length) {\n\t\tresult.sort = sorts;\n\t}\n\tconst where = and;\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tconst orWhere = or;\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (Array.isArray(placeholders) && placeholders.length) {\n\t\tresult.placeholders = placeholders;\n\t}\n\n\n\treturn result\n}\n","/** @import { Param } from './types.mjs' */\n\n/**\n * \n * @param {Partial<Param>} a \n * @param {Partial<Param>} b \n * @returns {Param}\n */\nexport function merge(a, b) {\n\tconst limit = b.limit || a.limit || 0;\n\tconst page = b.page ?? a.page;\n\tconst primary = [a.primary || [], b.primary || []].flat().filter(Boolean);\n\tconst offset = \n\tb.offset ?? (b.limit && (b.page || b.page === 0) ? (Math.floor(Math.max(b.page || 0, 1)) - 1) * b.limit : null)\n\t?? a.offset ?? (a.limit && (a.page || a.page === 0) ? (Math.floor(Math.max(a.page || 0, 1)) - 1) * a.limit : null)\n\t?? (Math.floor(Math.max(page || 0, 1)) - 1) * (limit || 10);\n\n\tconst values = [...a.values || [], ...b.values || []]\n\tconst sort = [...a.sort || [], ...b.sort || []]\n\tconst select = [...a.select || [], ...b.select || []]\n\tconst where = [...a.where || [], ...b.where || []]\n\tconst orWhere = [...a.orWhere || [], ...b.orWhere || []]\n\tconst or = [...a.or || [], ...b.or || []]\n\n\t/** @type {Param} */\n\tconst result = {};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (a.total || b.total) {\n\t\tresult.total = true;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (sort?.length) {\n\t\tresult.sort = sort;\n\t}\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (or?.length) {\n\t\tresult.or = or;\n\t}\n\tif (primary.length) {\n\t\tresult.primary = primary;\n\t}\n\n\treturn result;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or, Param } from './types.mjs' */\n\n/** @param {string} v */\nconst encodeValue = v => encodeURIComponent(v).replaceAll('%20', '+');\n\n/**\n * \n * @param {string | boolean | number | RecursiveArray<string> | FieldValue} value \n */\nfunction stringifyValue(value) {\n\tif (Array.isArray(value)) {\n\t\t/**\n\t\t * \n\t\t * @param {string | RecursiveArray<string>} v \n\t\t * @returns {string}\n\t\t */\n\t\tfunction s(v) {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\treturn `(${v.map(s).join(',')})`;\n\t\t\t}\n\t\t\treturn encodeValue(v);\n\t\t}\n\t\tconst val = value.map(s).join(',');\n\t\tif (value.length > 1) { return val; }\n\t\treturn `(${val})`;\n\t}\n\tif (typeof value === 'number') {\n\t\treturn `${value}`;\n\t}\n\tif (typeof value === 'boolean') {\n\t\treturn value ? '1' : 0;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn encodeValue(value);\n\t}\n\tconst { field, placeholder } = value;\n\tif (placeholder) {\n\t\treturn `?${encodeValue(placeholder)}`;\n\t}\n\tif (field) {\n\t\treturn `:${encodeValue(field)}`;\n\t}\n\t// TODO:\n\treturn '';\n}\n\n/**\n * \n * @param {Field[]} fields \n */\nfunction stringifyFields(fields) {\n\treturn fields.map(item => {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\t\treturn `${encodeValue(field)}${sub.map(() => `[k]`).join('')}`;\n\t}\n\t).join('.');\n}\n/**\n * \n * @param {Match} define \n */\nfunction stringifyDefine([fields, value, operator, sign]) {\n\tconst key = operator\n\t\t? `${stringifyFields(fields)}:${encodeValue(operator)}${sign || ''}`\n\t\t: `${stringifyFields(fields)}${sign || ''}`;\n\tif (operator === null) { return key; }\n\tif (value === null) { return ''; }\n\tif (typeof value === 'function') { return ''; }\n\treturn `${key}=${stringifyValue(value)}`;\n}\n/**\n * \n * @param {(Match | Children)[]} list \n * @returns {string[]}\n */\nfunction stringifyAnd(list) {\n\tlet index = 0;\n\treturn list.flatMap(v => {\n\t\tif (v.length !== 2) {\n\t\t\treturn stringifyDefine(v);\n\t\t}\n\t\tconst list = stringifyAnd(v[1]);\n\t\tif (!list.length) { return []; }\n\t\tlet key = stringifyFields(v[0]);\n\t\tif (list.length > 1) {\n\t\t\tkey += `?${(index++).toString(36)}`;\n\t\t}\n\t\treturn list.map(v => `${key}.${v}`);\n\t}).filter(Boolean);\n}\n\n/**\n * \n * @param {(Match | Children | Or)[]} list \n * @returns {string[]}\n */\nfunction stringifyOr(list) {\n\tlet index = 0;\n\treturn list.map(v => {\n\t\tif (Array.isArray(v)) {\n\t\t\treturn stringifyAnd([v]);\n\n\t\t}\n\t\treturn [\n\t\t\t...stringifyAnd(v.and || []),\n\t\t\t...stringifyOr(v.or || []),\n\t\t];\n\t}).flatMap(list => {\n\t\tif (!list) { return []; }\n\t\tconst key = list.length === 1 ? `~` : `${(index++).toString(36)}~`;\n\t\treturn list.map(v => `${key}${v}`);\n\t});\n}\n/**\n * \n * @param {Partial<Param>} query \n * @param {boolean} [usePage] \n */\nexport function stringify({\n\tvalues,\n\twhere,\n\torWhere,\n\tsort,\n\tselect, primary,\n\tlimit, offset, page, total,\n\tplaceholders,\n}, usePage) {\n\t/** @type {string[]} */\n\tlet queries = [];\n\tfor (const v of values || []) {\n\t\tif (!v) { continue; }\n\t\tqueries.push(`=${encodeValue(v)}`);\n\t}\n\tif (limit && limit > 0) {\n\t\tqueries.push(`:limit=${limit}`);\n\t}\n\tif (total) {\n\t\tqueries.push(`:total=${total}`);\n\n\t}\n\tif (usePage) {\n\t\tif (page && page > 0) {\n\t\t\tqueries.push(`:page=${page}`);\n\t\t}\n\t} else {\n\t\tif (offset && offset > 0) {\n\t\t\tqueries.push(`:offset=${offset}`);\n\t\t}\n\t}\n\tconst selectVal = select?.filter(Boolean).map(encodeValue).join(',');\n\tif (selectVal) {\n\t\tqueries.push(`:select=${selectVal}`);\n\t}\n\tconst primaryVal = primary?.filter(Boolean).map(encodeValue).join(',');\n\tif (primaryVal) {\n\t\tqueries.push(`:primary=${primaryVal}`);\n\t}\n\tif (sort) {\n\t\tconst val = sort.filter(Boolean).map(v => {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\tconst [field, desc] = v;\n\t\t\t\tif (field) {\n\t\t\t\t\treturn `${desc ? '-' : ''}${encodeValue(field)}`;\n\t\t\t\t}\n\t\t\t} else if (v) {\n\t\t\t\treturn encodeValue(v);\n\t\t\t}\n\t\t\treturn '';\n\t\t}).filter(Boolean).join(',');\n\t\tif (val) {\n\t\t\tqueries.push(`:sort=${val}`);\n\t\t}\n\t}\n\tif (placeholders && typeof placeholders === 'object' && !Array.isArray(placeholders)) {\n\t\tfor (const [k, v] of Object.entries(placeholders)) {\n\t\t\tqueries.push(`?${encodeValue(k)}=${encodeValue(v)}`);\n\n\t\t}\n\t}\n\tfor (const v of stringifyAnd(where || [])) {\n\t\tqueries.push(v);\n\t}\n\tfor (const v of stringifyOr(orWhere || [])) {\n\t\tqueries.push(v);\n\t}\n\treturn queries.join('&');\n}\n","import { Search } from '@yongdall/common';\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @typedef {object} Where\n * @property {(where: TWhere) => boolean?} [value]\n * @property {(list: TWhere[]) => TWhere?} or\n * @property {(list: TWhere[]) => TWhere?} and\n * @property {ItemToWhere<TField, TParam, TWhere>} build\n */\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @callback ToWhere\n * @param {TField} fields \n * @param {Search.AndList} [and] \n * @param {...Search.OrList | null | undefined} orList\n * @returns {Generator<TParam, TWhere?, TWhere?>}\n */\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @callback ItemToWhere\n * @param {ToWhere<TField, TParam, TWhere>} toWhere \n * @param {TField} fields \n * @param {Search.Match | Search.Children} and\n * @returns {Generator<TParam, TWhere?, TWhere?>}\n */\n\n\n\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @param {Where<TField, TParam, TWhere>} where \n * @param {TField} fields \n * @param {Search.AndList} [and] \n * @param {...Search.OrList | null | undefined} orList\n * @returns {Generator<TParam, TWhere?, TWhere?>}\n */\nexport function toWhere(where, fields, and, ...orList) {\n\t/**\n\t * \n\t * @param {TField} fields \n\t * @param {Search.AndList} [and] \n\t * @param {...Search.OrList | null | undefined} orList\n\t * @returns {Generator<TParam, TWhere?, TWhere?>}\n\t */\n\tfunction* toWhere(fields, and, ...orList) {\n\n\t\t/** @type {TWhere[]} */\n\t\tconst list = [];\n\t\tif (and) {\n\t\t\tfor (const item of and) {\n\t\t\t\tconst w = yield* where.build(toWhere, fields, item);\n\t\t\t\tif (w == null) { continue; }\n\t\t\t\tif (where.value?.(w) === false) { return w; }\n\t\t\t\tlist.push(w);\n\t\t\t}\n\t\t}\n\t\torFor: for (const or of orList) {\n\t\t\tif (!or) { continue; }\n\t\t\t/** @type {TWhere[]} */\n\t\t\tconst orList = [];\n\t\t\tfor (const item of or) {\n\t\t\t\tconst w = Array.isArray(item)\n\t\t\t\t\t? yield* where.build(toWhere, fields, item)\n\t\t\t\t\t: yield* toWhere(fields, item.and, item.or);\n\t\t\t\tif (w == null) { continue; }\n\t\t\t\tif (where.value?.(w) === true) {\n\t\t\t\t\tlist.push(w);\n\t\t\t\t\tcontinue orFor;\n\t\t\t\t}\n\t\t\t\torList.push(w);\n\t\t\t}\n\t\t\tconst w = orList.length ? where.or(orList) : null;\n\t\t\tif (w == null) { continue; }\n\t\t\tif (where.value?.(w) === false) { return w; }\n\t\t\tlist.push(w);\n\t\t}\n\t\tif (!list.length) { return null; }\n\t\treturn where.and(list);\n\t}\n\treturn toWhere(fields, and, ...orList);\n}\n","export * from './exec.mjs';\nexport * from './fill.mjs';\nexport { parse } from './parse.mjs';\nexport * from './merge.mjs';\nexport * from './stringify.mjs';\nexport * from './types.mjs';\nexport * from './util.mjs';\nexport * from './toWhere.mjs';\n","export const CST = Intl.DateTimeFormat().resolvedOptions().timeZone === 'Asia/Shanghai';\nexport const TZO = new Date().getTimezoneOffset();\nfunction getTimeZone() {\n\tlet tzo = TZO;\n\tif (!tzo) { return 'Z'; }\n\tconst s = tzo < 0 ? '+' : '-';\n\ttzo = Math.abs(tzo);\n\treturn s + [Math.floor(tzo / 60), tzo % 60].map(v => `${v}`.padStart(2, '0')).join(':');\n}\nexport const TZ = getTimeZone();\n\n\n\nconst dateRegex1 = /^(?:(?<Y>\\d+)-(?<M>\\d+)-(?<D>\\d+)[t| ])?(?<h>2[0-3]|[01]?\\d):(?<m>[0-5]?\\d)(?::(?<s>[0-5]?\\d)(?:(?:\\.(?<ms>\\d{1,3})?)?))?(?<tz>z|[+-]\\d\\d(:?\\d\\d)?)?$/i;\nconst dateRegex2 = /^(?<Y>\\d+)-(?<M>\\d+)-(?<D>\\d+)(?:[t| ](?<h>2[0-3]|[01]?\\d):(?<m>[0-5]?\\d)(?::(?<s>[0-5]?\\d)(?:(?:\\.(?<ms>\\d{1,3})?)?))?(?<tz>z|[+-]\\d\\d(:?\\d\\d)?)?)?$/i;\n\n\n/**\n * \n * @param {string | null} [val] \n * @returns \n */\nexport function parseTimeZone(val) {\n\tif (val === 'z' || val === 'Z') { return 'Z'; }\n\tif (!val || typeof val !== 'string') { return TZ; }\n\tif (val.includes(':')) { return val; }\n\treturn `${val}:00`;\n}\n\n\n/**\n * \n * @param {any} value \n * @returns \n */\nexport function parse(value) {\n\tif (value instanceof Date) { return value.valueOf() ? new Date(value) : null; }\n\tif (typeof value === 'number') {\n\t\tconst date = new Date(value);\n\t\treturn date.valueOf() ? date : null;\n\t}\n\tif (typeof value !== 'string') { return null; }\n\tconst ss = dateRegex1.exec(value)?.groups || dateRegex2.exec(value)?.groups;\n\tif (!ss) { return null; }\n\tconst { Y, M, D, h, m, s, ms, tz = '' } = ss;\n\tconst str = [\n\t\t`${Y || 2000}`.padStart(4, '0'),\n\t\t`-`,\n\t\t`${M || 1}`.padStart(2, '0'),\n\t\t`-`,\n\t\t`${D || 1}`.padStart(2, '0'),\n\t\t`T`,\n\t\t`${h || 0}`.padStart(2, '0'),\n\t\t`:`,\n\t\t`${m || 0}`.padStart(2, '0'),\n\t\t`:`,\n\t\t`${s || 0}`.padStart(2, '0'),\n\t\t`.`,\n\t\t`${ms || 0}`.padEnd(3, '0'),\n\t\t`${parseTimeZone(tz)}`\n\t].join('');\n\tconst date = new Date(str);\n\treturn date.valueOf() ? date : null;\n\n}\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTime(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\treturn [\n\t\td.getUTCHours(),\n\t\td.getUTCMinutes(),\n\t\td.getUTCSeconds(),\n\t].map(v => `${v}`.padStart(2, '0')).join(':');\n\n}\n\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTimeTz(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\n\tconst h = `${d.getUTCHours()}`.padStart(2, '0');\n\tconst m = `${d.getUTCMinutes()}`.padStart(2, '0');\n\tconst s = `${d.getUTCSeconds()}`.padStart(2, '0');\n\tconst ms = `${d.getUTCMilliseconds()}`.padStart(3, '0');\n\n\treturn `${h}:${m}:${s}.${ms}${TZ}`;\n}\n\n\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDatetimeTz(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\n\tconst Y = `${d.getUTCFullYear()}`.padStart(4, '0');\n\tconst M = `${d.getUTCMonth() + 1}`.padStart(2, '0');\n\tconst D = `${d.getUTCDate()}`.padStart(2, '0');\n\tconst h = `${d.getUTCHours()}`.padStart(2, '0');\n\tconst m = `${d.getUTCMinutes()}`.padStart(2, '0');\n\tconst s = `${d.getUTCSeconds()}`.padStart(2, '0');\n\tconst ms = `${d.getUTCMilliseconds()}`.padStart(3, '0');\n\n\treturn `${Y}-${M}-${D}T${h}:${m}:${s}.${ms}${TZ}`;\n}\n\n\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDatetime(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\n\tconst Y = `${d.getUTCFullYear()}`.padStart(4, '0');\n\tconst M = `${d.getUTCMonth() + 1}`.padStart(2, '0');\n\tconst D = `${d.getUTCDate()}`.padStart(2, '0');\n\tconst h = `${d.getUTCHours()}`.padStart(2, '0');\n\tconst m = `${d.getUTCMinutes()}`.padStart(2, '0');\n\tconst s = `${d.getUTCSeconds()}`.padStart(2, '0');\n\n\treturn `${Y}-${M}-${D}T${h}:${m}:${s}`;\n}\n\n\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDate(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\treturn [\n\t\td.getUTCFullYear(),\n\t\td.getUTCMonth() + 1,\n\t\td.getUTCDate(),\n\t].map(v => `${v}`.padStart(2, '0')).join('-');\n}\n","const unitRegex = /^(.*)\\{(.*)\\}(.*)$/;\nconst sequenceRegex = /^\\{(?<seq>#*(?<min>0*))\\}$/;\n\n/**\n * 表示一个正则匹配配置项,用于描述如何从字符串中提取特定结构(如日期)。\n * \n * @typedef {Object} Filler\n * @property {string} name - 该配置的名称,用于标识或调试。\n * @property {[name: string, param: string][]} pipes\n * @property {boolean} optional - 是否为可选匹配。若为 true,则即使未匹配也不报错。\n * @property {string} prefix - 匹配内容前必须存在的前缀字符串(字面量,非正则)。\n * @property {string} suffix - 匹配内容后必须存在的后缀字符串(字面量,非正则)。\n */\n/**\n * 表示一个正则匹配配置项,用于描述如何从字符串中提取特定结构(如日期)。\n * \n * @typedef {Object} Sequence\n * @property {null} [name]\n * @property {number} min\n * @property {number} max\n */\n\n/**\n * \n * @param {string} unit \n * @returns {Filler | Sequence}\n */\nfunction parseUnit(unit) {\n\tconst sequenceResult = sequenceRegex.exec(unit)?.groups;\n\tif (sequenceResult) {\n\t\tconst {seq, min} = sequenceResult;\n\t\treturn {name: null, max: seq.length, min: min.length};\n\t}\n\tconst unitResult = unitRegex.exec(unit);\n\tlet main = unit;\n\tlet optional = false;\n\tlet prefix = '';\n\tlet suffix = '';\n\tif (unitResult) {\n\t\t[, prefix, main, suffix] = unitResult;\n\t\toptional = true;\n\t}\n\tconst [name, ...pipes] = main.split('|');\n\tpipes.filter(Boolean).map(format => {\n\t\tconst index = format.indexOf(':');\n\t\tif (index < 0) { return [format, '']; }\n\t\tconst type = format.slice(0, index);\n\t\tconst param = format.slice(index + 1);\n\t\treturn [type, param];\n\t});\n\treturn {\n\t\tname, pipes: pipes.filter(Boolean).map(format => {\n\t\t\tconst index = format.indexOf(':');\n\t\t\tif (index < 0) { return [format, '']; }\n\t\t\tconst type = format.slice(0, index);\n\t\t\tconst param = format.slice(index + 1);\n\t\t\treturn [type, param];\n\t\t}), optional, prefix, suffix\n\t};\n}\n/**\n * \n * @param {string | null} [pattern] \n */\nexport function parse(pattern) {\n\tif (typeof pattern !== 'string') { return []; }\n\tconst parseRegex = /\\{([^{}]*\\{[^{}]+\\}[^{}]*|[^{}]+)\\}/g;\n\tlet lastIndex = 0;\n\t/** @type {(string | Filler | Sequence)[]} */\n\tconst list = [];\n\tfor (let r = parseRegex.exec(pattern); r; r = parseRegex.exec(pattern)) {\n\t\tconst index = r.index;\n\t\tconst [text, res] = r;\n\t\tif (index > lastIndex) {\n\t\t\tlist.push(pattern.slice(lastIndex, index));\n\t\t}\n\t\tlastIndex = index + text.length;\n\t\tlist.push(parseUnit(res));\n\t}\n\tif (pattern.length > lastIndex) {\n\t\tlist.push(pattern.slice(lastIndex));\n\t}\n\treturn list;\n}\n","import { parse } from \"./parse.mjs\";\n/** @import { Filler, Sequence } from \"./parse.mjs\" */\n\n\n/**\n * \n * @param {*} value \n * @param {boolean} optional \n * @returns {string}\n */\nfunction baseGenerate(value, optional) {\n\tif ((value ?? null) === null) { return ''; }\n\tif (typeof value === 'string') { return value; }\n\tif (typeof value === 'bigint') { return String(value); }\n\tif (typeof value === 'boolean') { return value ? '1' : '0'; }\n\tif (typeof value === 'number') {\n\t\tif (!Number.isFinite(value)) { return ''; }\n\t\tconst text = value.toPrecision(100);\n\t\tif (!text.includes('.')) { return text; }\n\t\tconst index = text.indexOf('.');\n\t\treturn text.slice(0, index + 5).replace(/\\.?0+$/, '');\n\t}\n\tif (!(value instanceof Date)) { return `${value}`; }\n\tconst date = value;\n\tif (!date?.valueOf()) { return ''; }\n\t/** @type {Record<string, number>} */\n\tconst data = {\n\t\tY: date.getFullYear(),\n\t\tM: date.getMonth() + 1,\n\t\td: date.getDate(),\n\t\th: date.getHours(),\n\t\tm: date.getMinutes(),\n\t\ts: date.getSeconds(),\n\t};\n\treturn `YYYY-MM-DD hh:mm:ss`.replace(/([a-zA-Z])\\1*/g, (v, key) => {\n\t\tlet val = `${Object.hasOwn(data, key) ? data[key] : 0}`;\n\t\tconst length = v.length;\n\t\treturn `${val}`.padStart(length, '0').slice(-length);\n\t});\n}\n\n/**\n * \n * @param {Record<string, Generator<any>>} generators \n * @param {string} t \n * @param {string} p \n * @param {boolean} optional \n * @returns {function(any): any}\n */\nfunction buildPipe(generators, t, p, optional) {\n\tconst renderer = Object.hasOwn(generators, t) && generators[t];\n\tif (!renderer) { return () => { }; }\n\tconst params = renderer.parseParam(p);\n\treturn data => renderer.generate(data, params, { optional });\n\n}\n/**\n * @template T\n * @typedef {object} Generator\n * @property {(param: string) => T} parseParam\n * @property {(data: any, param: T, options: {optional: boolean}) => any} generate\n */\n\n/**\n * \n * @param {(string | Filler | Sequence)[] | string | null} [pattern] \n * @param {Record<string, Generator<any>>} [generators] \n * @returns {(data?: Record<string, any>?, sequence?: number?) => string}\n */\nexport function toGenerate(pattern, generators) {\n\tconst list = (Array.isArray(pattern) ? pattern : parse(pattern))\n\t\t.map(v => {\n\t\t\tif (!v || typeof v !== 'object') { return v; }\n\t\t\tif (v.name == null) { return { ...v, name: null }; }\n\t\t\tif (!generators) { return { ...v, pipes: [] }; }\n\t\t\treturn {\n\t\t\t\t...v,\n\t\t\t\tpipes: v.pipes.map(([t, p]) => buildPipe(generators, t, p, v.optional)),\n\t\t\t};\n\t\t});\n\tif (!list.length) { return () => ''; }\n\n\treturn (data, sequence) => {\n\t\tconst doc = typeof data === 'object' && data || {};\n\t\t/** @type {string[]} */\n\t\tconst results = [];\n\t\tfor (const v of list) {\n\t\t\tif (!v || typeof v !== 'object') {\n\t\t\t\tresults.push(v);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (v.name === null) {\n\t\t\t\tconst { min, max } = v;\n\t\t\t\tconst seq = (Math.floor(sequence || 0) || 0)\n\t\t\t\t\t.toPrecision(100).replace(/\\.\\d*$/, '')\n\t\t\t\t\t.padStart(min, '0')\n\t\t\t\t\t.slice(-max);\n\t\t\t\tresults.push(seq);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst { name, prefix, suffix, optional, pipes } = v;\n\t\t\tlet val = Object.hasOwn(doc, name) ? doc[name] ?? null : null;\n\t\t\tfor (const pipe of pipes) {\n\t\t\t\tval = pipe(val);\n\t\t\t}\n\t\t\tconst text = baseGenerate(val, optional);\n\t\t\tif (!text) { continue; }\n\t\t\tresults.push(prefix, text, suffix);\n\t\t}\n\t\treturn results.join('');\n\n\t};\n}\n","/** @import { Generator } from \"./toGenerate.mjs\" */\nimport { parse as parseDate } from \"../Datetime.mjs\";\n\n/**\n * 表示一个正则匹配配置项,用于描述如何从字符串中提取特定结构(如日期)。\n * \n * @typedef {Object} Item\n * @property {string} name - 该配置的名称,用于标识或调试。\n * @property {boolean} optional - 是否为可选匹配。若为 true,则即使未匹配也不报错。\n * @property {string} prefix - 匹配内容前必须存在的前缀字符串(字面量,非正则)。\n * @property {string} suffix - 匹配内容后必须存在的后缀字符串(字面量,非正则)。\n * @property {(value: any) => string} generate\n*/\n\n/**\n * \n * @param {any} value \n * @param {string} param \n * @param {object} options \n * @param {boolean} options.optional \n * @returns {string}\n */\nfunction generateDate(value, param, { optional }) {\n\n\tif (!param) { return ''; }\n\tconst date = parseDate(value) || (optional ? null : new Date);\n\tif (!date?.valueOf()) { return ''; }\n\t/** @type {Record<string, number>} */\n\tconst data = {\n\t\tY: date.getFullYear(),\n\t\tM: date.getMonth() + 1,\n\t\tD: date.getDate(),\n\t\th: date.getHours(),\n\t\tm: date.getMinutes(),\n\t\ts: date.getSeconds(),\n\t};\n\treturn param.replace(/#*([a-zA-Z])\\1*/g, (v, key) => {\n\t\tlet val = `${Object.hasOwn(data, key) ? data[key] : 0}`;\n\t\tconst max = v.length;\n\t\tconst min = v.replaceAll('#', '').length;\n\t\treturn `${val}`.padStart(min, '0').slice(-max);\n\t});\n}\n\n/**\n * \n * @param {string} type \n * @param {string} param \n * @returns {[intMin: number, intMax: number, fractionalMin: number, fractionalMax: number]}\n */\nfunction paramNumber(type, param) {\n\tif (!param) {\n\t\tparam = type === 'int' ? '#############0' : type === 'float' ? '#############0.0###' : '#############0.####';\n\t}\n\tconst [intPart, fractionalPart = ''] = param.split('.');\n\tconst intMax = intPart.length || 1;\n\tconst intMin = intPart.replaceAll('#', '').length || 1;\n\tconst fractionalMax = type === 'int' ? 0 : fractionalPart.length;\n\tconst fractionalMin = type === 'int' ? 0 : fractionalPart.replaceAll('#', '').length;\n\n\treturn [intMin, intMax, fractionalMin, fractionalMax];\n\n}\n/**\n * \n * @param {any} value \n * @param {[intMin: number, intMax: number, fractionalMin: number, fractionalMax: number]} param \n * @param {object} options \n * @param {boolean} options.optional \n * @returns {string}\n */\nfunction generateNumber(value, [intMin, intMax, fractionalMin, fractionalMax], { optional }) {\n\tlet intPart = '';\n\tlet fractionalPart = '';\n\tif (typeof value === 'bigint') {\n\t\tintPart = String(value);\n\t} else if (typeof value === 'number') {\n\t\tif (Number.isFinite(value)) {\n\t\t\t[intPart, fractionalPart = ''] = value.toPrecision(100).split('.');\n\t\t}\n\t} else if (typeof value === 'string') {\n\t\tif (/^\\s*[+-]?\\s*(\\d_)*\\.?(\\d_)*/.test(value)) {\n\t\t\t[intPart, fractionalPart = ''] = value.replace(/[^\\d.-]/g, '').split('.');\n\t\t}\n\t}\n\tif (!intPart && !fractionalPart && optional) { return ''; }\n\tintPart = intPart.padStart(intMin, '0').slice(-intMax);\n\tfractionalPart = fractionalPart.replace(/0+$/, '').padEnd(fractionalMin, '0').slice(0, fractionalMax);\n\tif (!fractionalPart) { return intPart; }\n\treturn `${intPart}.${fractionalPart}`;\n}\n/** @type {Generator<string>} */\nexport const date = {\n\tparseParam: v => v || 'YYYY-MM-DD',\n\tgenerate: generateDate,\n};\n/** @type {Generator<string>} */\nexport const time = {\n\tparseParam: v => v || 'hh:mm:ss',\n\tgenerate: generateDate,\n};\n/** @type {Generator<string>} */\nexport const datetime = {\n\tparseParam: v => v || 'YYYY-MM-DD hh:mm:ss',\n\tgenerate: generateDate,\n};\n/** @type {Generator<[intMin: number, intMax: number, fractionalMin: number, fractionalMax: number]>} */\nexport const number = {\n\tparseParam: v => paramNumber('number', v),\n\tgenerate: generateNumber,\n};\n/** @type {Generator<[intMin: number, intMax: number, fractionalMin: number, fractionalMax: number]>} */\nexport const float = {\n\tparseParam: v => paramNumber('float', v),\n\tgenerate: generateNumber,\n};\n/** @type {Generator<[intMin: number, intMax: number, fractionalMin: number, fractionalMax: number]>} */\nexport const int = {\n\tparseParam: v => paramNumber('int', v),\n\tgenerate: generateNumber,\n};\n/** @type {Generator<string[]>} */\nexport const list = {\n\tparseParam(param) {\n\t\treturn param.split(';');\n\t},\n\tgenerate(value, list, { optional }) {\n\t\tlet index = -1;\n\t\tif (typeof value === 'bigint') {\n\t\t\tindex = Number(value);\n\t\t} else if (typeof value === 'number') {\n\t\t\tindex = Math.floor(value);\n\t\t} else if (typeof value === 'boolean') {\n\t\t\tindex = value ? 1 : 0;\n\t\t} else if (typeof value === 'string') {\n\t\t\tif (!/^\\s*[+-]\\s*(\\d_)*/.test(value)) { return ''; }\n\t\t\tindex = Number.parseInt(value.replace(/[^\\d.+-]/g, ''));\n\t\t}\n\t\tif (index < 0 || index >= list.length) { return optional ? '' : list[0]; }\n\t\treturn list[index];\n\t},\n};\n/** @type {Generator<Record<string, string>>} */\nexport const map = {\n\tparseParam: param => Object.fromEntries(param.split(';').map(v => {\n\t\tconst index = v.indexOf('=');\n\t\tif (index < 0) { return [v, v]; }\n\t\treturn [v.slice(0, index), v.slice(index + 1)];\n\t})),\n\tgenerate(value, map, { optional }) {\n\t\tlet key = '';\n\t\tif (typeof value === 'bigint') {\n\t\t\tkey = String(value);\n\t\t} else if (typeof value === 'number') {\n\t\t\tkey = String(value);\n\t\t} else if (typeof value === 'boolean') {\n\t\t\tkey = value ? '1' : '0';\n\t\t} else if (typeof value === 'string') {\n\t\t\tkey = value;\n\t\t}\n\t\treturn Object.hasOwn(map, key) ? map[key] : optional ? '' : Object.values(map)[0];\n\t},\n};\n","/** @import { Filler, Sequence } from \"./parse.mjs\" */\n/** @import { Generator } from \"./toGenerate.mjs\" */\nimport { toGenerate } from \"./toGenerate.mjs\"\nimport * as defaultGenerators from './generators.mjs';\n\n/**\n * \n * @overload\n * @param {(string | Filler | Sequence)[] | string | null} [pattern] \n * @param {Record<string, any>?} [data] \n * @param {number?} [sequence] \n * @param {Record<string, Generator<any>>} [generators] \n * @returns {string}\n */\n/**\n * \n * @overload\n * @param {(string | Filler | Sequence)[] | string | null} [pattern] \n * @param {Record<string, any>?} [data] \n * @param {number?} [sequence] \n * @param {Record<string, Generator<any>>} [generators] \n * @returns {string}\n */\n/**\n * @overload\n * @param {(string | Filler | Sequence)[] | string | null} [pattern] \n * @param {Record<string, any>?} [data] \n * @param {number | Record<string, Generator<any>> | null} [sequence] \n * @param {Record<string, Generator<any>>?} [generators] \n * @returns {string}\n */\n/**\n * \n * @param {(string | Filler | Sequence)[] | string | null} [pattern] \n * @param {Record<string, any>?} [data] \n * @param {number | Record<string, Generator<any>> | null} [sequence] \n * @param {Record<string, Generator<any>>?} [generators] \n * @returns {string}\n */\nexport function generate(pattern, data, sequence, generators) {\n\tconst seq = typeof sequence === 'number' ? sequence : 0;\n\tconst allGenerators = [sequence, generators]\n\t\t.filter(Boolean)\n\t\t.find(v => typeof v === 'object') || defaultGenerators;\n\tconst generate = toGenerate(pattern, allGenerators);\n\treturn generate(data, seq);\n}\n","export * from './parse.mjs';\nexport * from './generate.mjs';\nexport * from './toGenerate.mjs';\nexport * as generators from './generators.mjs';\n","\nconst prototype = Error.prototype;\n/**\n * @template T\n * @template {Error} E\n * @param {Map<any, (error: E) => T>} transforms \n * @param {E} error \n */\nexport function transformError(transforms, error) {\n\tif (!(error instanceof Error)) { throw error; }\n\tfor (let p = Object.getPrototypeOf(error); p; p = Object.getPrototypeOf(p)) {\n\t\tconst fn = transforms.get(p);\n\t\tif (typeof fn === 'function') { return fn(error); }\n\t\tif (p === prototype) { break; }\n\t}\n\tthrow error;\n}\n","/**\n * @template T\n * @typedef {T | readonly T[]} Hook.MaybeArray\n */\n/**\n * @template T\n * @typedef {T extends readonly any[] ? Readonly<T>\n * : T extends Record<string, any> ? Hook.MaybeArray<Hook.Define<T> | T>\n * : T extends object ? Hook.MaybeArray<Hook.Define<T> | T>\n * : Hook.MaybeArray<T>\n * } Hook.Item\n */\n/**\n * @template T\n * @typedef {T extends Record<string, any> ? { [k in keyof T]?: Hook.Item<T[k]> } : T} Hook.Define\n*/\n\n\n\n\n/** @type {*} */\nconst noopFilter = () => true;\n\n\n\n\n/**\n * \n * @param {Record<string, any>} plugin \n * @param {string[]} name \n * @returns {*[]}\n */\nfunction findHook(plugin, name) {\n\tlet list = [plugin].flat();\n\tfor (const k of name.filter(Boolean)) {\n\t\tconst values = [];\n\t\tfor (const it of list) {\n\t\t\tif (!it || typeof it !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(it, k)) { continue; }\n\t\t\tvalues.push(it[k]);\n\t\t}\n\t\tif (!values.length) { return []; }\n\t\tlist = values.flat();\n\t}\n\treturn list;\n}\n\n/**\n * \n * @template T\n * @param {any} plugin \n * @param {string[]} names \n * @returns {T | void}\n */\nfunction first(plugin, names) {\n\tif (!names.length) { return plugin; }\n\tif (!plugin || typeof plugin !== 'object') { return; }\n\tconst [name, ...keys] = names;\n\tfor (const v of [plugin].flat()) {\n\t\tconst val = first(v[name], keys);\n\t\tif (val !== undefined) { return val; }\n\t}\n}\n\n/**\n * \n * @template T\n * @param {Record<string, any>} hooks \n * @param {string[]} name \n * @returns {IterableIterator<T>}\n */\nfunction* values(hooks, name) {\n\tfor (const it of Object.values(hooks)) {\n\t\tfor (const value of findHook(it, name)) {\n\t\t\tyield value;\n\t\t}\n\t}\n}\n\n\n\n\n/**\n * @template T\n */\nexport class Hook {\n\t/**\n\t * @template {object} T\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t * @return {Hook<T>}\n\t */\n\tstatic build(options) {\n\t\tconst hook = new Hook();\n\t\treturn Hook.update(hook, options);\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t */\n\tstatic update(hook, options) {\n\t\tlet updated = false;\n\t\tif (typeof options === 'function') {\n\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget() {\n\t\t\t\t\tconst r = options();\n\t\t\t\t\treturn typeof r === 'object' && r || {};\n\t\t\t\t},\n\t\t\t});\n\t\t\tupdated = true;\n\t\t} else {\n\t\t\tif (options && typeof options === 'object') {\n\t\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tvalue: options,\n\t\t\t\t});\n\t\t\t\tupdated = true;\n\t\t\t}\n\t\t}\n\t\tif (updated) {\n\t\t\tHook.reset(hook);\n\t\t}\n\t\treturn hook;\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t */\n\tstatic reset(hook) {\n\t\tconst hooks = hook.#hooks;\n\t\tconst resetFn = hook.#config.resetFn;\n\t\tresetFn.sort(([, a], [, b]) => a - b);\n\t\tconst before = resetFn.filter(([, p]) => p <= 0);\n\t\tconst after = resetFn.filter(([, p]) => p > 0);\n\t\tfor (const [fn] of before) { fn(); }\n\t\tfor (const fn of values(hooks, ['reset'])) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn();\n\t\t}\n\t\tfor (const [fn] of after) { fn(); }\n\t}\n\n\t/** @type {{hooks: any; resetFn: [fn: () => void, hysteresis: number][]}} */\n\t#config = { hooks: Object.create(null), resetFn: [] };\n\t/** @type {string[]} */\n\t#keys = [];\n\t#stringTag = 'Hook';\n\t[Symbol.iterator]() { return this.entries(); }\n\t[Symbol.toStringTag]() { return this.#stringTag; }\n\t/** @param {string} hint */\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === 'number') { return NaN; }\n\t\treturn `[${this[Symbol.toStringTag]()}]`;\n\t}\n\n\tget #hooks() { return this.#config.hooks; };\n\t/**\n\t * @template {T extends readonly any[] ? never : T extends object ? string & keyof T : never} K\n\t * @param {K} key \n\t * @returns {Hook<Exclude<T extends readonly any[] ? never : T extends object ? T[K] :never, void | undefined>>}\n\t */\n\tget(key) {\n\t\tconst keys = [...this.#keys, key];\n\t\tconst hook = new Hook();\n\t\thook.#config = this.#config;\n\t\thook.#keys = keys;\n\t\thook.#stringTag = `Hook(${keys.join('.')})`;\n\t\treturn hook;\n\t}\n\t/**\n\t * @param {T extends (...args: infer A) => any ? A : []} args \n\t * @returns \n\t */\n\tcall(...args) {\n\t\tfor (const fn of this.values()) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn(...args);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {T | void}\n\t */\n\tfirst(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\treturn first(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\t*plugin(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\tyield* findHook(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\tvalues() { return values(this.#hooks, this.#keys); }\n\n\t/**\n\t * \n\t * @returns {IterableIterator<[string, T extends readonly (infer V)[] ? V : T]>}\n\t */\n\t*entries() {\n\t\tconst hooks = this.#hooks;\n\t\tconst name = this.#keys;\n\t\tfor (const [plugin, it] of Object.entries(hooks)) {\n\t\t\tfor (const value of findHook(it, name)) {\n\t\t\t\tyield [plugin, value];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * \n\t * @template [TX=(T extends Record<string, infer TT>? TT extends readonly (infer V)[] ? V : TT : never)]\n\t * @param {(v: *)=>v is TX} filter \n\t * @returns {IterableIterator<[plugin: string, key: string, value: TX]>}\n\t */\n\t*entriesObject(filter = noopFilter) {\n\t\tfor (const [plugin, hooksMap] of this.entries()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tyield [plugin, k, v];\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * @template [TT=(T extends Record<string, infer TT> ? TT : never)]\n\t * @param {(v: *)=>v is TT} [filter] \n\t * @returns {Record<string, TT>}\n\t */\n\tnamed(filter = noopFilter) {\n\t\t/** @type {Record<string, TT>} */\n\t\tconst result = Object.create(null);\n\t\tfor (const hooksMap of this.values()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tresult[k] = v;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * \n\t * @param {() => void} fn \n\t * @param {number} [hysteresis] \n\t * @returns \n\t */\n\tlisten(fn, hysteresis) {\n\t\tif (typeof fn !== 'function') { return () => { }; }\n\t\tconst resetFn = this.#config.resetFn;\n\t\t/** @type {[() => void, number]} */\n\t\tconst it = [fn, Number.isFinite(hysteresis) && hysteresis || 0];\n\t\tresetFn.push(it);\n\t\tresetFn.sort(([, a], [, b]) => b - a);\n\t\treturn () => {\n\t\t\tconst index = resetFn.findIndex(v => v === it);\n\t\t\tif (index >= 0) {\n\t\t\t\tresetFn.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n}\n","const errorPrototype = Error.prototype;\n/**\n * @template T\n */\nexport class ErrorHandler {\n\t/** \n\t * 使用 WeakMap 存储 错误原型 -> 处理函数\n\t * \n\t * 键是 Error 的 prototype 对象,值是对应的处理函数\n\t * \n\t * @type {WeakMap<Error, (error: any) => PromiseLike<T?> | T?>}\n\t */\n\t#handlers = new WeakMap();\n\n\t/**\n\t * 注册错误处理函数\n\t * @template {Error} C\n\t * @param {{new(...p: any): C; prototype: C}} ErrorClass - 错误类的构造函数\n\t * @param {(error: C) => PromiseLike<T?> | T?} handler - 处理函数\n\t */\n\tregister(ErrorClass, handler) {\n\t\tif (typeof handler !== 'function') {\n\t\t\tthrow new TypeError('Handler must be a function');\n\t\t}\n\t\tif (typeof ErrorClass !== 'function') {\n\t\t\tthrow new TypeError('Registered error class must be a subclass of Error');\n\t\t}\n\t\tconst prototype = ErrorClass.prototype;\n\t\tif (!(prototype instanceof Error)) {\n\t\t\tthrow new TypeError('Registered error class must be a subclass of Error');\n\t\t}\n\t\tthis.#handlers.set(prototype, handler);\n\t}\n\n\t/**\n\t * 将错误对象转换为友好的文本信息\n\t * @param {any} error - 需要处理的错误对象\n\t * @returns {Promise<T?>} - 处理后的文本信息\n\t */\n\tasync convert(error) {\n\t\tif (!(error instanceof Error)) { throw error; }\n\t\tconst handlers = this.#handlers;\n\t\tfor (\n\t\t\tlet prototype = Object.getPrototypeOf(error);\n\t\t\tprototype && prototype !== errorPrototype;\n\t\t\tprototype = Object.getPrototypeOf(prototype)\n\t\t) {\n\t\t\tconst handler = handlers.get(prototype);\n\t\t\tif (!handler) { continue; }\n\t\t\tconst res = await handler(error) ?? null;\n\t\t\tif (res !== null) { return res; }\n\t\t}\n\t\tconst handler = handlers.get(errorPrototype);\n\t\treturn handler ? await handler(error) ?? null : null;\n\t}\n}\n","/**\n * @template T\n * @extends {Promise<T>}\n */\nexport class LazyPromise extends Promise {\n\tstatic get [Symbol.species]() { return Promise; }\n\t/** @type {() => void} */\n\t#do;\n\t/**\n\t * \n\t * @param {(resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void} executor \n\t */\n\tconstructor(executor) {\n\t\t/** @type {(() => void) | null} */\n\t\tlet run = null;\n\t\tsuper((resolve, reject) => {\n\t\t\trun = () => {\n\t\t\t\ttry {\n\t\t\t\t\texecutor(resolve, reject);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treject(e);\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t\tthis.#do = () => {\n\t\t\tconst r = run;\n\t\t\trun = null;\n\t\t\tif (r) { r(); }\n\t\t};\n\t}\n\n\t/**\n\t * @template [TResult1=T]\n\t * @template [TResult2=never]\n\t * @param {((value: T) => TResult1 | PromiseLike<TResult1>)?} [onfulfilled] \n\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected] \n\t * @returns {Promise<TResult1 | TResult2>}\n\t */\n\tthen(onfulfilled, onrejected) {\n\t\tthis.#do();\n\t\treturn super.then(onfulfilled, onrejected);\n\t}\n\t/**\n\t * @template [TResult1=T]\n\t * @template [TResult2=never]\n\t * @param {((value: T) => TResult1 | PromiseLike<TResult1>)?} [onfulfilled] \n\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected] \n\t * @returns {LazyPromise<TResult1 | TResult2>}\n\t */\n\tlazyThen(onfulfilled, onrejected) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\t// 这里调用原生的 .then() 来监听当前 Promise 的状态\n\t\t\t// 但我们将结果传递给新 LazyPromise 的 resolve/reject\n\t\t\tthis.then(\n\t\t\t\t(value) => {\n\t\t\t\t\tif (typeof onfulfilled === 'function') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresolve(onfulfilled(value));\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tresolve(value);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t(reason) => {\n\t\t\t\t\tif (typeof onrejected === 'function') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresolve(onrejected(reason));\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(reason);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t}\n\t/**\n\t * @template [TResult=never]\n\t * @param {((reason: any) => TResult | PromiseLike<TResult>)?} [onrejected] \n\t * @returns {LazyPromise<T | TResult>}\n\t */\n\tlazyCatch(onrejected) {\n\t\t// Promise.prototype.catch 本质上就是 then(undefined, onRejected)\n\t\t// 调用 lazyThen 确保返回的是 LazyPromise\n\t\tthis.finally\n\t\treturn this.lazyThen(undefined, onrejected);\n\t}\n\n\t/**\n\t * @param {(() => PromiseLike<void> | void)?} [onfinally] \n\t * @returns {LazyPromise<T>}\n\t */\n\tlazyFinally(onfinally) {\n\t\tif (typeof onfinally !== 'function') { return this; }\n\n\t\treturn this.lazyThen(\n\t\t\tasync (value) => {\n\t\t\t\tawait onfinally();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tasync (reason) => {\n\t\t\t\tawait onfinally();\n\t\t\t\tthrow reason;\n\t\t\t}\n\t\t);\n\t}\n\t/**\n\t * 创建一个已解决的 LazyPromise。\n\t * @overload\n\t * @returns {LazyPromise<void>}\n\t */\n\t/**\n\t * 创建一个已解决的 LazyPromise。\n\t * @template T\n\t * @overload\n\t * @param {T} value - 用于解决 Promise 的值。\n\t * @returns {LazyPromise<Awaited<T>>}\n\t */\n\t/**\n\t * 创建一个已解决的 LazyPromise。\n\t * @template T\n\t * @overload\n\t * @param {T | PromiseLike<T>} value - 用于解决 Promise 的值。\n\t * @returns {LazyPromise<Awaited<T>>}\n\t */\n\t/**\n\t * 创建一个已解决的 LazyPromise。\n\t * @template T\n\t * @param {T | PromiseLike<T>} [value] - 用于解决 Promise 的值。\n\t * @returns {LazyPromise<Awaited<T>>}\n\t */\n\tstatic resolve(value) {\n\t\treturn new LazyPromise((resolve) => {\n\t\t\t// @ts-ignore\n\t\t\tresolve(value);\n\t\t});\n\t}\n\n\t/**\n\t * 创建一个已拒绝的 LazyPromise。\n\t * @template T\n\t * @param {any} reason - 拒绝 Promise 的原因。\n\t * @returns {LazyPromise<T>}\n\t */\n\tstatic reject(reason) {\n\t\treturn new LazyPromise((_, reject) => {\n\t\t\treject(reason);\n\t\t});\n\t}\n\n\t/**\n\t * 等待所有传入的 Promise 成功,或其中一个失败。\n\t * @template {readonly unknown[] | []} T\n\t * @param {T} iterable - 一个可迭代对象,如数组。\n\t * @returns {LazyPromise<{ -readonly [P in keyof T]: Awaited<T[P]> }>}\n\t */\n\tstatic all(iterable) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\tPromise.all(iterable).then(resolve, reject);\n\t\t});\n\t}\n\n\t/**\n\t * 等待所有传入的 Promise 完成(无论成功或失败)。\n\t * @template {readonly unknown[] | []} T\n\t * @param {T} iterable - 一个可迭代对象,如数组。\n\t * @returns {LazyPromise<{ -readonly [P in keyof T]: PromiseSettledResult<Awaited<T[P]>> }>}\n\t */\n\tstatic allSettled(iterable) {\n\t\treturn new LazyPromise((resolve) => {\n\t\t\tPromise.allSettled(iterable).then(resolve);\n\t\t});\n\t}\n\n\t/**\n\t * 等待其中一个 Promise 成功,或所有 Promise 都失败。\n\t * @template {readonly unknown[] | []} T\n\t * @param {T} iterable - 一个可迭代对象,如数组。\n\t * @returns {LazyPromise<Awaited<T[number]>>}\n\t */\n\tstatic any(iterable) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\tPromise.any(iterable).then(resolve, reject);\n\t\t});\n\t}\n\n\t/**\n\t * 等待其中一个 Promise 完成(无论成功或失败)。\n\t * @template {readonly unknown[] | []} T\n\t * @param {T} iterable - 一个可迭代对象,如数组。\n\t * @returns {LazyPromise<Awaited<T[number]>>}\n\t */\n\tstatic race(iterable) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\tPromise.race(iterable).then(resolve, reject);\n\t\t});\n\t}\n\t/**\n\t * 创建一个惰性执行的 Promise,该 Promise 会执行传入的回调函数。\n\t * 与原生 Promise.try() 立即执行不同,LazyPromise.try() 是惰性的。\n\t * @template T\n\t * @template {unknown[]} U\n\t * @param {(...args: U) => T | PromiseLike<T>} callbackFn - 要执行的回调函数。\n\t * @param {U} args - 传递给回调函数的参数。\n\t * @returns {LazyPromise<Awaited<T>>}\n\t */\n\tstatic try(callbackFn, ...args) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\t// @ts-ignore\n\t\t\t\tresolve(callbackFn(...args));\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t}\n\tstatic withResolvers() {\n\t\treturn Promise.withResolvers();\n\t}\n}\n","import * as Pattern from './Pattern/index.mjs';\nconst regex = /\\{([^}{}]+)\\}/g\n/**\n * \n * @param {string?} [pattern] \n */\nexport function getPatternFields(pattern) {\n\tif (!pattern || typeof pattern !== 'string') { return []; }\n\t/** @type {string[]} */\n\tconst fields = [];\n\tfor(let result = regex.exec(pattern); result; result = regex.exec(pattern)) {\n\t\tfields.push(result[1]);\n\t}\n\treturn fields;\n}\n","/** @import { Permission } from '@yongdall/types' */\n\n\n\n\n\n/**\n *\n * @param {Permission} permission\n * @returns {Iterable<string>}\n */\nexport default function* yieldPermissionConstraintFields({ constraints, organizationField }) {\n\tif (organizationField) { yield organizationField; }\n\tif (!constraints) { return; }\n\tfor (const [field, constraint] of Object.entries(constraints)) {\n\t\tif (!constraint) { continue; }\n\t\tconst { value, values, user } = constraint;\n\t\tif (value !== undefined) {\n\t\t\tyield field;\n\t\t} else if (Array.isArray(values) && values.length) {\n\t\t\tyield field;\n\t\t} else if (values instanceof Set && values.size) {\n\t\t\tyield field;\n\t\t} else if (user) {\n\t\t\tyield field;\n\t\t}\n\t}\n}\n","export * as Search from './Search/index.mjs';\nexport * as Datetime from './Datetime.mjs';\nexport * as Pattern from './Pattern/index.mjs';\nexport { transformError } from './transformError.mjs';\nexport { Hook } from './Hook.mjs';\nexport { ErrorHandler } from './ErrorHandler.mjs';\nexport { LazyPromise } from './LazyPromise.mjs';\nexport * from './model.mjs';\nexport { default as yieldPermissionConstraintFields } from './yieldPermissionConstraintFields.mjs';\n\n\nexport const pluginIdRegex = /^(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+)$/;\nexport const findPluginIdRegex = /^(?<pluginId>(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+))(?:\\/(?<path>[^#]*))?(?:#(?<hash>.*))?$/;\n\n/**\n * @typedef {object} Plugin\n * @property {string} [version]\n * @property {Record<string, string>} [assets]\n * @property {string} [hooks]\n * @property {string[]} [styles]\n */\n/**\n * @typedef {object} BootConfiguration\n * @property {string} [id] \n * @property {string} [route] 路由管理器\n * @property {string} [theme] 界面主题\n * @property {string} [authenticator] 登陆器\n * @property {boolean} [authRequired] 是否强制登陆\n * @property {string} [skin]\n * @property {string} [path] \n * @property {Record<string, string>} [pages]\n * @property {Record<string, string>} [continuations]\n */\n/**\n * @typedef {object} Importmap\n * @property {Record<string, string>} imports\n * @property {Record<string, Record<string, string>>} scopes\n */\n/**\n * @typedef {object} Indicator\n * @property {string} color\n * @property {string} label\n * @property {unknown} [filters]\n */\n\n/**\n *\n * @param {*} v\n * @returns {v is (...p: any[]) => any}\n */\nexport function isFunction(v) {\n\treturn typeof v === 'function';\n}\n","/** @import { Hooks } from './typesDefine.mjs' */\n/** @import { PageRenderer } from './route/index.mjs' */\nimport { Hook } from '@yongdall/common';\nimport { createState } from './signal.mts';\nconst hookState = createState(/** @type {Record<string, Hook.Define<Hooks>>} */({}));\n/** @type {Hook<Hooks>} */\n// @ts-ignore\nexport const allHooks = Hook.build(() => hookState.get());\n/** @typedef {Object.<'main' | 'details' | 'setting' | 'input' | 'edit', string | PageRenderer>} ContinuationDefine */\n\n/**\n * \n * @param {Record<string, Hook.Define<Hooks>>} hooks \n */\nexport function updateHooks(hooks) {\n\thookState.set(hooks);\n\tHook.reset(allHooks);\n}\n","/** @import { FieldFilterComponent, FieldComponent, FieldFilterFns, FieldFilter } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n\nimport { allHooks } from '../allHooks.mjs';\nimport { createComputed } from '../signal.mts';\n/**\n * @typedef {Object} FieldFilterOptions\n * @property {FieldFilterComponent} component - 过滤器组件\n * @property {string} [label] - 标签文本\n */\n/**\n* @typedef {Object} FilterFns\n* @property {FieldFilter.Value[]} value\n* @property {FieldFilter.Value[]} notValue\n* @property {FieldFilter.Named[]} named\n* @property {FieldFilter.Named[]} notNamed\n* @property {FieldFilter.Field[]} field\n* @property {FieldFilter.Field[]} notField\n*/\n\n/**\n * \n * @param {string} type\n * @param {string | boolean} [renderer] \n * @param {boolean} [array] \n * @returns \n */\nfunction getSetKey(type, renderer, array) {\n\tconst rendererName = typeof renderer === 'string' ? renderer : '';\n\tconst arrayKey = renderer === true || array === true ? '[]' : '';\n\tif (!type || type === '.') {\n\t\tif (!rendererName) { return; }\n\t\treturn `:${rendererName}${arrayKey}`;\n\t}\n\tif (!rendererName) { return `${type}${arrayKey}`; }\n\treturn `${type}:${rendererName}${arrayKey}`;\n}\n\n\n\n/**\n * \n * @param {boolean?} where \n */\nfunction toNot(where) {\n\treturn typeof where === 'boolean' ? !where : where;\n}\nconst inputState = createComputed(() => {\n\t/** @type {Map<string, FieldComponent>} */\n\tconst allInputs = new Map();\n\tfor (const field of allHooks.get('formFields').values()) {\n\t\tconst { type, array, renderer, input } = field;\n\t\tconst key = getSetKey(\n\t\t\ttypeof type === 'string' ? type : '',\n\t\t\ttypeof renderer === 'string' ? renderer : '',\n\t\t\tBoolean(array),\n\t\t);\n\t\tif (!key) { continue; }\n\t\tif (typeof input === 'function') {\n\t\t\tallInputs.set(key, input);\n\t\t}\n\t}\n\treturn allInputs;\n});\nconst filterFnState = createComputed(() => {\n\t/** @type {Record<string, Record<string, FilterFns>>} */\n\tconst allFilters = {};\n\t/** @type {Record<string, Record<string, FilterFns>>} */\n\tconst allNotFilters = {};\n\t/**\n\t * \n\t * @param {Record<string, FilterFns>} filterMap \n\t * @param {Record<string, FilterFns>} notFilterMap \n\t * @param {FieldFilterFns} param2 \n\t * @param {string} [operator] \n\t */\n\tfunction setFilterFns(\n\t\tfilterMap,\n\t\tnotFilterMap,\n\t\t{ not, value, notValue, named, notNamed, field, notField },\n\t\toperator = '',\n\t) {\n\t\tif (not) {\n\t\t\tif (typeof value === 'function' && typeof typeof notValue !== 'function') {\n\t\t\t\tnotValue = (...p) => toNot(value(...p));\n\t\t\t}\n\t\t\tif (typeof field === 'function' && typeof typeof notField !== 'function') {\n\t\t\t\tnotField = (...p) => toNot(field(...p));\n\t\t\t}\n\t\t\tif (typeof named === 'function' && typeof typeof notNamed !== 'function') {\n\t\t\t\tnotNamed = (...p) => toNot(named(...p));\n\t\t\t}\n\t\t}\n\n\t\tconst typeFilter = Object.hasOwn(filterMap, operator)\n\t\t\t&& filterMap[operator]\n\t\t\t|| { value: [], named: [], field: [], notValue: [], notNamed: [], notField: [] };\n\t\tfilterMap[operator] = typeFilter;\n\t\tif (typeof value === 'function') { typeFilter.value.push(value); }\n\t\tif (typeof notValue === 'function') { typeFilter.notValue.push(notValue); }\n\t\tif (typeof named === 'function') { typeFilter.named.push(named); }\n\t\tif (typeof notNamed === 'function') { typeFilter.notNamed.push(notNamed); }\n\t\tif (typeof field === 'function') { typeFilter.field.push(field); }\n\t\tif (typeof notField === 'function') { typeFilter.notField.push(notField); }\n\t\tconst notOp = typeof not === 'string' && not || '';\n\t\tif (!notOp) { return; }\n\n\t\tconst notTypeFilter = Object.hasOwn(notFilterMap, notOp)\n\t\t\t&& notFilterMap[notOp]\n\t\t\t|| { value: [], named: [], field: [], notValue: [], notNamed: [], notField: [] };\n\t\tnotFilterMap[notOp] = typeFilter;\n\n\t\tif (typeof value === 'function') { notTypeFilter.notValue.push(value); }\n\t\tif (typeof notValue === 'function') { notTypeFilter.value.push(notValue); }\n\t\tif (typeof named === 'function') { notTypeFilter.notNamed.push(named); }\n\t\tif (typeof notNamed === 'function') { notTypeFilter.named.push(notNamed); }\n\t\tif (typeof field === 'function') { notTypeFilter.notField.push(field); }\n\t\tif (typeof notField === 'function') { notTypeFilter.field.push(notField); }\n\n\t}\n\tfor (const field of allHooks.get('formFields').values()) {\n\t\tconst { type, array, renderer, filters } = field;\n\t\tconst key = getSetKey(\n\t\t\ttypeof type === 'string' ? type : '',\n\t\t\ttypeof renderer === 'string' ? renderer : '',\n\t\t\tBoolean(array),\n\t\t) || (array ? '[]' : '');\n\t\t/** @type {Record<string, FilterFns>} */\n\t\tconst filterMap = Object.hasOwn(allFilters, key) && allFilters[key] || {};\n\t\t/** @type {Record<string, FilterFns>} */\n\t\tconst notFilterMap = Object.hasOwn(allNotFilters, key) && allNotFilters[key] || {};\n\t\tsetFilterFns(filterMap, notFilterMap, field);\n\n\t\tfor (const [operator, fieldFilter] of Object.entries(filters || {})) {\n\t\t\tif (!fieldFilter || Array.isArray(fieldFilter) || typeof fieldFilter !== 'object') { continue; }\n\t\t\tsetFilterFns(filterMap, notFilterMap, fieldFilter, operator);\n\t\t}\n\t\tallFilters[key] = filterMap;\n\t\tallNotFilters[key] = notFilterMap;\n\t}\n\tfor (const type of Object.keys({ ...allFilters, ...allNotFilters })) {\n\t\tconst notTypeFilters = Object.hasOwn(allNotFilters, type) && allNotFilters[type];\n\t\tif (!notTypeFilters) { continue; }\n\t\t/** @type {Record<string, FilterFns>} */\n\t\tconst typeFilters = Object.hasOwn(allFilters, type) && allFilters[type] || {};\n\t\tallFilters[type] = typeFilters;\n\n\t\tfor (const op of Object.keys({ ...typeFilters, ...notTypeFilters })) {\n\t\t\tconst notOpFilters = Object.hasOwn(notTypeFilters, op) && notTypeFilters[op];\n\t\t\tif (!notOpFilters) { continue; }\n\t\t\t/** @type {FilterFns} */\n\t\t\tconst opFilters = Object.hasOwn(typeFilters, op) && typeFilters[op] || { value: [], named: [], field: [], notValue: [], notNamed: [], notField: [] };\n\t\t\ttypeFilters[op] = opFilters;\n\t\t\tif (!notOpFilters) { continue; }\n\t\t\tfor (const fn of notOpFilters.value) { opFilters.value.push(fn); }\n\t\t\tfor (const fn of notOpFilters.notValue) { opFilters.notValue.push(fn); }\n\t\t\tfor (const fn of notOpFilters.named) { opFilters.named.push(fn); }\n\t\t\tfor (const fn of notOpFilters.notNamed) { opFilters.notNamed.push(fn); }\n\t\t\tfor (const fn of notOpFilters.field) { opFilters.field.push(fn); }\n\t\t\tfor (const fn of notOpFilters.notField) { opFilters.notField.push(fn); }\n\t\t}\n\t}\n\treturn allFilters;\n});\nconst filterState = createComputed(() => {\n\t/** @type {Map<string, Map<string, {component: FieldFilterComponent; label?: string}>>} */\n\tconst allFilters = new Map();\n\tfor (const field of allHooks.get('formFields').values()) {\n\t\tconst { type, array, renderer, filter, filters } = field;\n\t\tconst key = getSetKey(\n\t\t\ttypeof type === 'string' ? type : '',\n\t\t\ttypeof renderer === 'string' ? renderer : '',\n\t\t\tBoolean(array),\n\t\t);\n\t\tif (!key) { continue; }\n\t\t/** @type {Map<string, {component: FieldFilterComponent; label?: string}>} */\n\t\tconst filterMap = allFilters.get(key) || new Map();\n\t\tif (typeof filter === 'function') {\n\t\t\tconst item = filterMap.get('');\n\t\t\tif (!item) {\n\t\t\t\tfilterMap.set('', { component: filter, label: '=' });\n\t\t\t} else {\n\t\t\t\titem.component = filter;\n\t\t\t}\n\t\t}\n\t\tfor (const [operator, fieldFilter] of Object.entries(filters || {})) {\n\t\t\tif (!fieldFilter) { continue; }\n\t\t\tconst filter = Array.isArray(fieldFilter) ? fieldFilter[0]\n\t\t\t\t: typeof fieldFilter === 'function' ? fieldFilter\n\t\t\t\t\t: fieldFilter.filter;\n\t\t\tif (typeof filter !== 'function') { continue; }\n\t\t\tconst label = Array.isArray(fieldFilter) ? fieldFilter[1]\n\t\t\t\t: typeof fieldFilter === 'object' ? fieldFilter.label : null;\n\t\t\tconst item = filterMap.get(operator);\n\t\t\tif (!item) {\n\t\t\t\tfilterMap.set(operator, { component: filter, label: typeof label === 'string' ? label : '' });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\titem.component = filter;\n\t\t\tif (typeof label === 'string') { item.label = label; }\n\t\t}\n\t\tif (filterMap.size) {\n\t\t\tallFilters.set(key, filterMap);\n\t\t}\n\t}\n\treturn allFilters;\n});\n\nexport function getAllFilterFns() {\n\treturn filterFnState.get();\n}\n/**\n * \n * @param {string | {component: string; [k: string]: any} | (string | {component: string; [k: string]: any})[]} [def] \n * @returns {Iterable<[renderer: string, options?: object]>}\n */\nfunction* getRenderer(def) {\n\tif (!def) { return; }\n\tfor (const s of Array.isArray(def) ? def : [def]) {\n\t\tif (!s) { continue; }\n\t\tif (typeof s === 'string') {\n\t\t\tyield [s];\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof s !== 'object') { continue; }\n\t\tconst component = s.component;\n\t\tif (!component || typeof component !== 'string') { continue; }\n\t\tyield [component, s];\n\t}\n}\n/**\n * \n * @param {string | FieldScriptConfiguration} field \n * @returns {Iterable<[renderer: string, options?: object]>}\n */\nfunction* getKey(field) {\n\tif (!field) { return; }\n\tconst type = typeof field === 'string' ? field : field.type;\n\tconst renderers = typeof field === 'string' ? '' : field.renderer;\n\tconst array = typeof field === 'string' ? '' : field.array ? '[]' : '';\n\tif (!type) {\n\t\tfor (const [renderer, options] of getRenderer(renderers)) {\n\t\t\tyield [`:${renderer}${array}`, options];\n\t\t\tyield [`${renderer}${array}`, options];\n\t\t}\n\t\treturn;\n\t}\n\tif (typeof type === 'object') {\n\t\tfor (const [renderer, options] of getRenderer(renderers)) {\n\t\t\tyield [`submodel:${renderer}${array}`, options];\n\t\t\tyield [`${renderer}${array}`, options];\n\t\t}\n\t\tyield [`submodel${array}`];\n\t\treturn;\n\t}\n\tfor (const [renderer, options] of getRenderer(renderers)) {\n\t\tyield [`${type}:${renderer}${array}`, options];\n\t\tyield [`:${renderer}${array}`, options];\n\t\tyield [`${renderer}${array}`, options];\n\t}\n\tyield [`${type}${array}`];\n}\n\n/**\n * @overload\n * @param {FieldScriptConfiguration} field \n * @param {false} [skip]\n * @returns {FieldComponent}\n */\n/**\n * \n * @overload\n * @param {FieldScriptConfiguration} field \n * @param {true} skip\n * @returns {FieldComponent?}\n */\n/**\n * \n * @overload\n * @param {FieldScriptConfiguration} field \n * @param {boolean} [skip]\n * @returns {FieldComponent?}\n */\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @param {boolean} [skip]\n * @returns {FieldComponent?}\n */\nexport function getField(field, skip) {\n\tconst inputs = inputState.get();\n\tfor (const [k, options] of getKey(field)) {\n\t\tconst v = inputs.get(k);\n\t\tif (v) { return ctx => v(ctx, options); }\n\t}\n\tif (skip) { return null; }\n\tconst type = typeof field === 'string' ? field : field.type;\n\treturn () => document.createElement('div');\n}\n\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @returns {boolean}\n */\nexport function hasField(field) {\n\tconst inputs = inputState.get();\n\tfor (const [k] of getKey(field)) {\n\t\tconst v = inputs.get(k);\n\t\tif (v) { return true; }\n\t}\n\tconst type = typeof field === 'string' ? field : field.type;\n\treturn false;\n}\n\n\n\n/** @type {FieldFilterComponent} */\nconst defaultFieldFilter = () => document.createElement('div');\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @param {string} operator \n * @returns {FieldFilterComponent}\n */\nexport function getFieldFilter(field, operator) {\n\tconst filters = filterState.get();\n\tfor (const [k, options] of getKey(field)) {\n\t\tconst filter = filters.get(k)?.get(operator);\n\t\tif (!filter) { continue; }\n\t\tconst component = filter.component;\n\t\treturn ctx => component(ctx, options);\n\t}\n\treturn defaultFieldFilter;\n}\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @returns {Record<string, string>}\n */\nexport function getFieldFilterOperators(field) {\n\tconst filters = filterState.get();\n\tconst operators = Object.create(null);\n\tfor (const [k] of getKey(field)) {\n\t\tconst filter = filters.get(k);\n\t\tif (!filter) { continue; }\n\t\tfor (const [operator, { label }] of filter) {\n\t\t\tif (operators[operator]) { continue; }\n\t\t\toperators[operator] = label;\n\t\t}\n\t}\n\treturn operators;\n}\n\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @param {string} operator \n * @returns {boolean}\n */\n\nexport function hasFieldFilter(field, operator) {\n\tconst filters = filterState.get();\n\tfor (const [k] of getKey(field)) {\n\t\tconst v = filters.get(k);\n\t\tif (v?.has(operator)) { return true; }\n\t}\n\treturn false;\n}\n\n/**\n * \n * @param {FieldScriptConfiguration | boolean} field \n * @param {string} operator \n */\nexport function* getFilterFns(field, operator) {\n\tconst filters = filterFnState.get();\n\tfor (const [k] of typeof field === 'boolean' ? field ? [['[]'], ['']] : [['']] : getKey(field)) {\n\t\tconst v = Object.hasOwn(filters, k) && filters[k];\n\t\tif (!v) { continue; }\n\t\tconst op = Object.hasOwn(v, operator) && v[operator];\n\t\tif (!op) { continue; }\n\t\tyield op;\n\t}\n\tconst k = '';\n\tconst v = Object.hasOwn(filters, k) && filters[k];\n\tif (!v) { return; }\n\tconst op = Object.hasOwn(v, operator) && v[operator];\n\tif (!op) { return; }\n\tyield op;\n}\n","export const pathRoots = {\n\tapi: '/api',\n\tfile: 'fileCabinets',\n};\nexport default pathRoots;\n","const regex = /^((?<Y>\\d+)-(?<M>\\d+)-(?<D>\\d+)[t| ])?(?<h>2[0-3]|[01]\\d):(?<m>[0-5]\\d)(?::(?<s>[0-5]\\d(?:(\\.\\d{1,3})?)))?(?<tz>z|[+-]\\d\\d(:?\\d\\d)?)?$/i;\n\nexport function toTimeZone(date = new Date) {\n\tlet tzo = date.getTimezoneOffset();\n\tif (!tzo) { return 'Z'; }\n\tconst s = tzo < 0 ? '+' : '-';\n\ttzo = Math.abs(tzo);\n\treturn s + [Math.floor(tzo / 60), tzo % 60].map(v => `${v}`.padStart(2, '0')).join(':');\n}\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTime(date) {\n\treturn [\n\t\tdate.getHours(),\n\t\tdate.getMinutes(),\n\t\tdate.getSeconds(),\n\t].map(v => `${v}`.padStart(2, '0')).join(':');\n}\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDate(date) {\n\treturn [\n\t\t`${date.getFullYear()}`.padStart(4, '0'),\n\t\t`${date.getMonth() + 1}`.padStart(2, '0'),\n\t\t`${date.getDate()}`.padStart(2, '0'),\n\t].join('-');\n}\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTimetz(date) {\n\treturn toTime(date) + `.${date.getMilliseconds()}`.padStart(3, '0') + toTimeZone(date);\n}\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDatetime(date) {\n\treturn toDate(date) + ' ' + toTime(date);\n}\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTimestamp(date) {\n\treturn toDate(date) + 'T' + toTimetz(date);\n}\n\n/**\n * \n * @param {string | Date | null | number} [val] \n * @returns \n */\nexport function parseDate(val) {\n\tif (!val) { return null; }\n\tif (val instanceof Date) { return val.valueOf() ? val : null; }\n\tif (typeof val === 'number') { return new Date(val); }\n\tif (typeof val !== 'string') { return null; }\n\tconst groups = regex.exec(val)?.groups;\n\tif (!groups) { return null; }\n\tconst currentDate = new Date;\n\tconst { Y, M,D, h, m, s, tz } = groups\n\tconst tzx = tz === 'z' || tz === 'Z' || tz.includes(':') ? tz : tz ? `${tz}:00` : toTimeZone(currentDate);\n\treturn new Date(`${Y || currentDate.getFullYear()}-${M || currentDate.getMonth() + 1}-${D || currentDate.getDate()}T${h}:${m}:${s || '00'}${tzx}`);\n}\n","import DotRequest from 'dot-request';\nimport pathRoots from './paths.mjs';\nimport { toTimestamp } from './utils/date.mjs';\n\nclass ARequest extends DotRequest {\n\tbuild() {\n\t\treturn new ARequest();\n\t}\n\t/**\n\t * \n\t * @param {string} method \n\t * @param {string} [path] \n\t * @returns \n\t */\n\tmethod(method, path) {\n\t\treturn super.method('POST', path).header('X-Method', method);\n\t}\n}\n\n/**\n * \n * @param {Response} response \n * @returns \n */\nexport async function errorHandler(response) {\n\tconst contentType = response.headers.get(\"content-type\")\n\t\t?.split(';')[0].replace(/\\s+/g, '').toLowerCase() || '';\n\tif (contentType === 'application/json' || contentType === 'text/json') {\n\t\treturn await response.json().then(v => Promise.reject(v?.error), v => Promise.reject(null));\n\t}\n\tif (contentType === \"text/plain\") {\n\t\treturn await response.text().then(v => Promise.reject(v));\n\t}\n\treturn Promise.reject(response);\n}\n/**\n * \n * @param {Response} r \n * @returns \n */\nexport function userErrorHandler(r) {\n\tif (r.status === 401) {\n\t\t// logout();\n\t}\n\treturn errorHandler(r);\n\n}\n/**\n * @callback ErrorAlerter\n * @param {*} error \n * @returns {PromiseLike<void> | void}\n */\n/**\n * @param {*} error \n * @returns {PromiseLike<void> | void}\n */\nexport function ErrorAlerter(error) {\n\tif (!error || error instanceof Response) { return alert('未知'); }\n\tif (typeof error === 'string') { return alert(error); }\n\tif (typeof error !== 'object') { return; }\n\tlet { message, code } = error;\n\tif (typeof message !== 'string') { message = ''; }\n\tif (typeof code !== 'string') { code = ''; }\n\tif (!message && !code) { return; }\n\talert([\n\t\tmessage || '未知错误',\n\t\tcode ? `[${code}]` : '',\n\t].filter(Boolean).join(' '));\n}\n/** @type {ErrorAlerter} */\nlet alertError = ErrorAlerter;\n/**\n * \n * @param {Response} r \n * @returns \n */\nexport function errorShowHandler(r) {\n\treturn userErrorHandler(r).catch(async error => {\n\t\tawait alertError(error);\n\t\treturn Promise.reject(error);\n\t});\n}\n\nexport const baseRequest = new ARequest().get().prefix(`${pathRoots.api}/client`).stringifyJSON(v => {\n\treturn JSON.stringify(v, (key, value) => {\n\t\tif (value instanceof Date) { return toTimestamp(value); }\n\t\tif (typeof value === 'bigint') { return String(value); }\n\t\tif (value instanceof Set) { return [...value]; }\n\t\treturn value;\n\t});\n}).errorHandler(errorHandler);\nconst request = baseRequest.clone().errorHandler(errorShowHandler);\nexport default request;\n/**\n * \n * @param {ErrorAlerter?} [fn] \n */\nexport function setErrorAlerter(fn) {\n\tif (typeof fn === 'function') { alertError = fn; }\n}\n","import { baseRequest } from './request.mjs';\n/** @import { Plugin } from '@yongdall/common' */\n/** @import { AppConfiguration } from '@yongdall/types' */\n\n/** @type {AppConfiguration} */\nexport const configuration = await baseRequest.clone().get`application`.query({\n\tdomain: location.hostname,\n\tport: location.port,\n\tpath: location.pathname,\n}).json();\n\n/** @type {Record<string, Plugin>} */\n// @ts-ignore\nexport const plugins = window.yongdallPlugins;\n\nexport const applicationId = configuration.id;\nexport const path = configuration.path;\n\nexport const boot = {\n\tget theme() { return configuration.theme; },\n\tget route() { return configuration.route; },\n\tget authenticator() { return configuration.authenticator; },\n\tget type() { return configuration.type; },\n\tget skin() { return configuration.skin; },\n\n};\n\nexport default configuration;\n","\n/**\n * @template {(...args: any) => any} T\n * @param {T} fn \n * @param {(...p: Parameters<T>) => string} getKey \n * @param {(...p: Parameters<T>) => boolean} [isForce] \n * @returns {T}\n */\nexport function createStates(fn, getKey, isForce) {\n\t/** @type {Record<string, ReturnType<T>>} */\n\tconst data = {};\n\t/**\n\t * @param {Parameters<T>} params\n\t * @returns {ReturnType<T>}\n\t */\n\t function run(...params) {\n\t\tconst key = getKey(...params);\n\t\tif (Object.hasOwn(data, key) && !isForce?.(...params)) {\n\t\t\treturn data[key];\n\t\t}\n\t\tconst result = fn(...params);\n\t\tdata[key] = result;\n\t\treturn result;\n\t};\n\treturn /** @type {T} */(run);\n}\n","/** @import { Permissions } from '@yongdall/types' */\n/** @import { State } from './signal.mts' */\nimport { configuration } from './configuration.mjs';\nimport { createStates } from './utils/state.mjs';\nimport { baseRequest } from './request.mjs';\nimport { allHooks } from './allHooks.mjs';\nimport { createComputed, createState } from './signal.mts';\nconst { authRequired, multiUser } = configuration;\n\nconst userType = createState(configuration.userType);\nconst visitor = createComputed(() => userType?.get() === 'visitor');\n/**\n * 用户类型定义\n * @typedef {Object} User\n * @property {string} id - 用户ID\n * @property {string} name - 显示名称\n * @property {string} [avatar] - 用户头像\n * @property {string[]} [permissions]\n * @property {Record<string, string[]>} [organizationPermissions]\n * @property {Record<string, string[]>} [organizationRoles]\n * @property {Record<string, string[]>} [organizationRolePermissions]\n * @property {Record<string, Record<string, any>>} [plugins] \n */\n\n/** @type {State<User?>} */\nconst sessionUserState = createState(/** @type {User?} */(null));\n/** @type {State<User?>} */\nconst visitorState = createState(/** @type {User?} */(null));\n/** @type {State<User?>} */\nconst targetUserState = createState(/** @type {User?} */(null));\nconst currentUserState = createComputed(() => targetUserState.get() || sessionUserState.get());\n\n\n/** @type {<T extends Record<string, any>>(pluginId: string) => { readonly session: T?; readonly target: T?; readonly current: T?}} */\nconst userPlugin = createStates((pluginId) => {\n\t/** @type {State<any?>} */\n\tconst session = createComputed(() => !visitor.get() && sessionUserState.get()?.plugins?.[pluginId] || null);\n\t/** @type {State<any?>} */\n\tconst target = createComputed(() => !visitor.get() && targetUserState.get()?.plugins?.[pluginId] || null);\n\t/** @type {State<any?>} */\n\tconst current = createComputed(() => !visitor.get() && currentUserState.get()?.plugins?.[pluginId] || null);\n\treturn {\n\t\tget session() { return session.get(); },\n\t\tget target() { return target.get(); },\n\t\tget current() { return current.get(); },\n\t};\n}, pluginId => pluginId || '');\n\nconst single = createState(false);\nconst needLogin = createState(false);\nconst waitLogin = createComputed(() => {\n\tif (needLogin.get()) { return true; }\n\tif (!authRequired) { return false; }\n\tif (single.get()) { return false; }\n\tif (sessionUserState.get()) { return false; }\n\treturn true;\n});\n\n\n/**\n * @param {string[]} permissions \n * @returns {Set<string>}\n */\nfunction toPermissions(permissions) {\n\treturn new Set(permissions.filter(v => v && typeof v === 'string'));\n\n}\n/**\n * \n * @param {User} user \n * @returns {Set<string>}\n */\nfunction getPermissions(user) {\n\tconst plugins = user.plugins;\n\tif (plugins && typeof plugins === 'object') {\n\t\tfor (const [pluginId, get] of allHooks.get('user').get('permissions')) {\n\t\t\tif (typeof get !== 'function') { continue; }\n\t\t\tif (!Object.hasOwn(plugins, pluginId)) { continue; }\n\t\t\tconst plugin = plugins[pluginId];\n\t\t\tif (!plugin || typeof plugin !== 'object') { continue; }\n\t\t\tconst p = get(plugin, user);\n\t\t\tif (!(p instanceof Set)) { continue; }\n\t\t\treturn p;\n\t\t}\n\t}\n\tconst permissions = user.permissions;\n\tif (!Array.isArray(permissions)) { return new Set(); }\n\treturn toPermissions(permissions);\n}\n/**\n * \n * @param {User} user \n * @returns {Record<string, Set<string>>?}\n */\nfunction getOrganizationPermissions(user) {\n\tconst plugins = user.plugins;\n\tif (plugins && typeof plugins === 'object') {\n\t\tfor (const [pluginId, get] of allHooks.get('user').get('organizationPermissions')) {\n\t\t\tif (typeof get !== 'function') { continue; }\n\t\t\tif (!Object.hasOwn(plugins, pluginId)) { continue; }\n\t\t\tconst plugin = plugins[pluginId];\n\t\t\tif (!plugin || typeof plugin !== 'object') { continue; }\n\t\t\tconst p = get(plugin, user);\n\t\t\tif (!p) { continue; }\n\t\t\treturn Object.assign(Object.create(null), p);\n\t\t}\n\t}\n\tconst permissions = user.organizationPermissions;\n\tif (permissions && typeof permissions === 'object' && !Array.isArray(permissions)) {\n\t\tconst list = Object.entries(permissions).filter(v => Array.isArray(v[1]));\n\t\tif (list.length) {\n\t\t\treturn Object.assign(\n\t\t\t\tObject.create(null),\n\t\t\t\tObject.fromEntries(list.map(([k, v]) => [k, toPermissions(v)])),\n\t\t\t);\n\t\t}\n\t}\n\tconst { organizationRolePermissions: rolePermissions, organizationRoles: roles } = user;\n\tif (!roles || typeof roles !== 'object' || Array.isArray(roles)) {\n\t\treturn null;\n\t}\n\tif (!rolePermissions || typeof rolePermissions !== 'object' || Array.isArray(rolePermissions)) {\n\t\treturn null;\n\t}\n\treturn Object.assign(\n\t\tObject.create(null),\n\t\tObject.fromEntries(Object.entries(roles).map(([k, v]) => {\n\t\t\tconst permissions = v.flatMap(roleId => Object.hasOwn(rolePermissions, roleId) && rolePermissions[roleId] || []);\n\t\t\treturn [k, toPermissions(permissions)];\n\t\t})),\n\t);\n}\n/** @type {State<Set<string>?>} */\nconst permissions = createComputed(() => {\n\tconst user = currentUserState.get();\n\tif (!user) { return null; }\n\treturn getPermissions(user);\n});\n/** @type {State<Record<string, Set<string>>?>} */\nconst organizationPermissions = createComputed(() => {\n\tconst user = currentUserState.get();\n\tif (!user) { return null; }\n\treturn getOrganizationPermissions(user);\n});\n\nconst allOrganizationPermissions = createComputed(() => {\n\tconst all = organizationPermissions.get();\n\tif (!all) { return null; }\n\treturn new Set(Object.values(all).flatMap(v => [...v]));\n});\n\n/** @returns {Permissions} */\nfunction createPermissions() {\n\tif (single.get()) {\n\t\treturn { has: () => true, get size() { return -1; } };\n\t}\n\treturn new Set();\n}\nexport const User = {\n\tget isVisitor() { return visitor.get(); },\n\tget visitor() { return visitor.get() ? visitorState.get() : null; },\n\tget multi() { return visitor.get() || Boolean(multiUser); },\n\tget single() { return single.get(); },\n\t/** 登陆用户 */\n\tget session() { return visitor.get() ? null : sessionUserState.get(); },\n\t/** 切换用户 */\n\tget target() { return visitor.get() ? null : targetUserState.get(); },\n\t/** 当前用户 */\n\tget current() { return visitor.get() ? null : currentUserState.get(); },\n\t/** 操作用户 */\n\tget operator() { return visitor.get() ? visitorState.get() : currentUserState.get(); },\n\t/** @param {string} permission */\n\thasPermission(permission) {\n\t\tif (visitor.get()) { return false; }\n\t\treturn permissions.get()?.has(permission) ?? single.get();\n\t},\n\t/** @param {string} permission @param {string} [organization] */\n\thasOrganizationPermission(permission, organization) {\n\t\tif (visitor.get()) { return false; }\n\t\tif (typeof organization !== 'string') {\n\t\t\treturn allOrganizationPermissions.get()?.has(permission) ?? single.get();\n\t\t}\n\n\t\tconst organizations = organizationPermissions.get();\n\t\tif (!organizations) { return single.get(); }\n\t\tif (!Object.hasOwn(organizations, organization)) { return false; }\n\t\treturn organizations[organization]?.has(permission) ?? false;\n\t},\n\t/** @returns {Permissions} */\n\tget permissions() {\n\t\tif (visitor.get()) { return new Set(); }\n\t\treturn permissions.get() || createPermissions();\n\t},\n\t/** @returns {Record<string, Permissions | undefined>} */\n\tget organizationPermissions() {\n\t\tif (visitor.get()) { return Object.create(null); }\n\t\treturn organizationPermissions.get() || new Proxy({}, {\n\t\t\tget() { return createPermissions(); }\n\t\t});\n\t},\n\t/** @returns {Permissions} */\n\tget allOrganizationPermissions() {\n\t\tif (visitor.get()) { return new Set(); }\n\t\treturn allOrganizationPermissions.get() || createPermissions();\n\t},\n\tget waitLogin() { return waitLogin.get(); },\n\t/**\n\t * @template {Record<string, any>} T\n\t * @param {string} pluginId \n\t * @returns {{ readonly session: T?; readonly target: T?; readonly current: T?}}\n\t */\n\tplugin(pluginId) { return userPlugin(pluginId); },\n\tasync load() {\n\t\tif (visitor.get()) {\n\t\t\tconst { visitor } = await baseRequest.clone().get`visitor`.json().then(v => v || {}, () => ({}));\n\t\t\tsingle.set(false);\n\t\t\tvisitorState.set(visitor || null);\n\t\t\tif (visitor) { needLogin.set(false); }\n\t\t\treturn Boolean(visitor);\n\t\t}\n\t\tconst { session, target } = await baseRequest.clone().get`user`.json().then(v => v || {}, () => ({}));\n\t\ttargetUserState.set(target || null);\n\t\tif (session === true) {\n\t\t\tsingle.set(true);\n\t\t\tsessionUserState.set(null);\n\t\t} else {\n\t\t\tsingle.set(false);\n\t\t\tsessionUserState.set(session || null);\n\t\t}\n\t\tif (session) { needLogin.set(false); }\n\t\treturn Boolean(session);\n\t},\n\texit() {\n\t\tif (visitor.get()) {\n\t\t\tvisitorState.set(null);\n\t\t\tbaseRequest.clone().delete`visitor`.done();\n\t\t\treturn;\n\t\t}\n\t\ttargetUserState.set(null);\n\t\tsessionUserState.set(null);\n\t\tbaseRequest.clone().delete`user`.done();\n\t},\n\tlogin(login = true) {\n\t\tneedLogin.set(Boolean(login));\n\t},\n};\n","/** @import { FieldScriptConfiguration, ModelConfiguration, ModelScriptConfiguration } from './types.mjs' */\n\n/**\n * \n * @param {string | string[] | null | void} permission \n */\n\nexport function flatPermission(permission) {\n\tif (!permission) { return []; }\n\tconst list = typeof permission === 'string' ? permission.split('\\n') : permission;\n\tif (!Array.isArray(list)) { return []; }\n\treturn list.filter(v => v && typeof v === 'string');\n\n}\n\n/**\n * \n * @param {object} [options] \n * @param {{has(permission: string): boolean}} [options.permissions] \n * @param {{has(permission: string): boolean}} [options.allOrganizationPermissions] \n * @param {Record<string, {has(permission: string): boolean} | null | undefined>} [options.organizationPermissions] \n * @param {{has(authorization: string): boolean}?} [options.authorizations] \n * @returns {(p: string) => boolean}\n */\nexport function toPermissionFilter({\n\tpermissions,\n\torganizationPermissions,\n\tallOrganizationPermissions,\n\tauthorizations,\n} = {}) {\n\treturn permission => {\n\t\tif (permission[0] === '#') { return authorizations?.has(permission.slice(1)) || false; }\n\t\tconst index = permission.indexOf('&');\n\t\tif (index < 0) { return permissions?.has(permission) || false; }\n\t\tconst orgPerm = permission.slice(0, index);\n\t\tif (!orgPerm) { return false; }\n\t\tconst organization = permission.slice(index + 1);\n\t\tif (!organization) { return allOrganizationPermissions?.has(orgPerm) || false; }\n\t\treturn organizationPermissions?.[organization]?.has(orgPerm) || false;\n\t};\n}\n\n/**\n * \n * @param {string | string[] | null | void} permission \n * @param {{has(permission: string): boolean}} permissions \n * @param {{has(authorization: string): boolean}?} [authorizations] \n */\nexport function filterPermission(permission, permissions, authorizations) {\n\tif (!permission) { return true; }\n\tconst array = flatPermission(permission);\n\tif (!array.length) { return true; }\n\tconst filter = toPermissionFilter({ permissions, authorizations });\n\treturn Boolean(array.find(filter));\n}\n/** @import { Field, Permission } from '@yongdall/types' */\n\nimport { User } from './user.mjs';\n\n/**\n * \n * @param {Permission['constraints']} constraints \n * @param {Record<string, any>?} [data] \n */\nexport function testPermissionConstraints(constraints, data) {\n\tif (!constraints || !data || typeof data !== 'object') { return true; }\n\tfor (const [field, constraint] of Object.entries(constraints)) {\n\t\tif (!constraint) { continue; }\n\t\tconst { value, values, user } = constraint;\n\t\tconst val = data[field];\n\t\tif (value !== undefined) {\n\t\t\tif (val !== value) { return false; }\n\t\t} else if (Array.isArray(values) && values.length) {\n\t\t\tif (!values.includes(val)) { return false; }\n\t\t} else if (values instanceof Set && values.size) {\n\t\t\tif (!values.has(val)) { return false; }\n\t\t} else if (user) {\n\t\t\tif (!User.single && val !== User.current?.id) { return false; }\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * \n * @param {Permission} permission \n * @param {Record<string, any>?} [data] \n * @param {boolean} [isNew] \n * @param {string} [fieldName] \n */\nexport function testPermission({ permission, organizationField, constraints }, data, isNew, fieldName) {\n\tif (!testPermissionConstraints(constraints, data)) { return false; }\n\tif (!permission) { return true; }\n\tif (!organizationField) {\n\t\treturn User.hasPermission(permission);\n\t}\n\tif (organizationField === '_') {\n\t\tif (isNew) {\n\t\t\tif (User.hasOrganizationPermission(permission)) { return true; }\n\t\t}\n\t\treturn false;\n\t}\n\tif (isNew) { return true; }\n\tif (organizationField === fieldName) { return true; }\n\tconst val = String(data?.[organizationField] || '');\n\tif ((!isNew || val)) {\n\t\tif (User.hasOrganizationPermission(permission, val || '')) { return true; }\n\t}\n\treturn true;\n}\n\n/**\n * \n * @param {Permission[]} permissionList \n * @param {Record<string, any>?} [data] \n * @param {boolean} [isNew] \n */\nexport function getAuthorizations(permissionList, data, isNew) {\n\tconst list = permissionList.filter(({ authorizations }) => {\n\t\tif (authorizations instanceof Set) { return true; }\n\t\tif (Array.isArray(authorizations)) { return true; }\n\t}).filter(permission => testPermission(permission, data, isNew))\n\t\t.flatMap(({ authorizations }) => authorizations ? [...authorizations] : []);\n\treturn new Set(list);\n}\n\n\n/**\n * \n * @param {string} authorization \n * @param {Permission[]} permissions \n * @param {Record<string, any>} [data] \n * @param {boolean} [isNew] \n * @param {string} [fieldName] \n */\nexport function testPermissions(authorization, permissions, data, isNew, fieldName) {\n\tconst list = permissions.filter(({ authorizations }) => {\n\t\tif (authorizations instanceof Set) { return authorizations.has(authorization); }\n\t\tif (Array.isArray(authorizations)) { return authorizations.includes(authorization); }\n\t});\n\treturn Boolean(list.find(permission => testPermission(permission, data, isNew, fieldName)));\n}\n/**\n * \n * @param {string} authorization \n * @param {Permission[]} permissions \n * @param {ModelConfiguration | ModelScriptConfiguration} model \n * @returns {Set<string>}\n */\nexport function getPermissionFields(authorization, permissions, model) {\n\tconst userPermissions = permissions.filter(({ authorizations }) => {\n\t\tif (authorizations instanceof Set) { return authorizations.has(authorization); }\n\t\tif (Array.isArray(authorizations)) { return authorizations.includes(authorization); }\n\t}).filter(({ permission, organizationField }) => {\n\t\tif (!permission) { return true; }\n\t\tif (!organizationField) {\n\t\t\treturn User.hasPermission(permission);\n\t\t}\n\n\t\treturn User.hasOrganizationPermission(permission);\n\t});\n\tif (!userPermissions?.length) { return new Set(); }\n\tconst groups = new Set(userPermissions.flatMap(v => v.group || ''));\n\tconst fieldsAuth = new Set(userPermissions.flatMap(v => v.fields || ''));\n\tgroups.delete('');\n\tfieldsAuth.delete('');\n\tif (!(groups.size + fieldsAuth.size)) { return new Set(); }\n\n\t/**\n\t *\n\t * @param {[string, (Field | FieldScriptConfiguration) & {group?: string}][]} fields\n\t * @param {string[]} parent\n\t * @returns {Iterable<string>}\n\t */\n\tfunction* filter(fields, parent) {\n\t\tfor (const [name, field] of fields) {\n\t\t\tif (!field) { continue; }\n\t\t\tconst fieldNames = [...parent, name];\n\t\t\tconst key = fieldNames.join('.');\n\t\t\tif (!field.primary && !groups.has(field.group || '') && !fieldsAuth.has(key) && !fieldsAuth.has('*')) { continue; }\n\t\t\tyield key;\n\t\t\tconst { type } = field;\n\t\t\tif (!type || typeof type !== 'object') { continue; }\n\t\t\tyield* filter(Object.entries(type), fieldNames);\n\t\t}\n\n\t}\n\treturn new Set(filter(Object.entries(model.fields), []));\n\n}\n","/** @import { Schema, Store, StoreLayout } from '@neeloong/form' */\n/** @import { Permission } from '@yongdall/types' */\n/** @import { FieldComponents } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n\nimport { testPermissions } from '../permission.mjs';\nimport { User } from '../user.mjs';\n\n/**\n * \n * @param {Store} store \n */\nfunction createStoreValueProxy(store) {\n\treturn new Proxy({}, {\n\t\tget(target, p, receiver) {\n\t\t\treturn store.value?.[p];\n\t\t},\n\t\tset() { return false; },\n\t});\n}\n/**\n * \n * @param {string} fieldName\n * @param {boolean?} [def] \n * @param {Permission[]} [permissions]\n * @param {((store: Store) => boolean)?} [script] \n * @returns {boolean | ((store: Store) => boolean) | null}\n */\nfunction createReadOnlyValue(fieldName, def, permissions, script) {\n\t/** @type {((store: Store) => boolean)?} */\n\tconst f = permissions?.length ? (s) => {\n\t\tconst root = s.root;\n\t\tconst isNew = root.new;\n\t\tconst authorization = isNew ? 'create' : 'update';\n\t\treturn !testPermissions(authorization, permissions, createStoreValueProxy(root), isNew, fieldName);\n\t} : null;\n\tif (typeof script === 'function' && f) {\n\t\treturn (s) => f(s) || Boolean(script(s));\n\t}\n\tif (f) { return f; }\n\tif (typeof script === 'function') {\n\t\treturn (s) => Boolean(script(s));\n\t}\n\treturn typeof def === 'boolean' ? def : null;\n}\n/**\n * \n * @param {string} fieldName\n * @param {FieldScriptConfiguration} field\n * @param {boolean?} [def] \n * @param {Permission[]} [permissions]\n * @param {((store: Store) => boolean)?} [script] \n * @returns {boolean | ((store: Store) => boolean) | null}\n */\nfunction createHiddenValue(fieldName, field, def, permissions, script) {\n\t/** @type {((store: Store) => boolean)[]} */\n\tconst fns = [];\n\tif (typeof script === 'function') {\n\t\tfns.push(script);\n\t} else if (def === true) {\n\t\treturn true;\n\t}\n\tif (field.uncreatable) {\n\t\tfns.push(store => store.root.new);\n\t}\n\tif (permissions) {\n\t\tfns.push(permissions.length ? (s) => {\n\t\t\tconst root = s.root;\n\t\t\tconst isNew = root.new;\n\t\t\treturn !testPermissions('read', permissions, createStoreValueProxy(root), isNew, fieldName);\n\t\t} : () => !User.single);\n\t}\n\tif (!fns.length) { return null; }\n\treturn (s) => {\n\t\tfor (const f of fns) {\n\t\t\tif (f(s)) { return true; }\n\t\t}\n\t\treturn false;\n\t};\n}\n/**\n * \n * @param {boolean?} [def] \n * @param {((store: Store) => boolean)?} [script] \n * @returns {boolean | ((store: Store) => boolean) | null}\n */\nfunction createBoolValue(def, script) {\n\tif (typeof script === 'function') {\n\t\treturn (s) => Boolean(script(s));\n\t}\n\treturn typeof def === 'boolean' ? def : null;\n}\n/**\n * \n * @param {string?} [def] \n * @param {((store: Store) => string)?} [script] \n * @returns {string | ((store: Store) => string) | null}\n */\nfunction createStringValue(def, script) {\n\tif (typeof script === 'function') {\n\t\treturn (s) => {\n\t\t\tconst v = script(s);\n\t\t\treturn typeof v === 'string' && v || def || '';\n\t\t};\n\t}\n\treturn typeof def === 'string' && def || '';\n}\n/**\n * \n * @param {FieldScriptConfiguration} field\n * @param {string} name\n * @param {Permission[]?} [permissions] \n * @returns {Schema.Attr}\n */\nfunction createAttr(field, name, permissions) {\n\tconst fieldGroup = field.group || '';\n\tconst script = field.script || {};\n\tconst fieldPermission = permissions?.filter(({ group, fields }) => {\n\t\tif (group === fieldGroup) { return true; }\n\t\tif (Array.isArray(group) && group.includes(fieldGroup)) { return true; }\n\t\tif (fields === name || fields === '*') { return true; }\n\t\tif (!Array.isArray(fields)) { return false; }\n\t\tif (fields.includes(name) || fields.includes('*')) { return true; }\n\t});\n\treturn {\n\t\tmeta: field,\n\t\thidden: createHiddenValue(name, field, field.layout?.hidden, fieldPermission, script?.hidden),\n\t\treadonly: createReadOnlyValue(name, field.readonly, fieldPermission, script.readonly),\n\t\trequired: createBoolValue(field.required, script.required),\n\t\tclearable: createBoolValue(field.clearable, script.clearable),\n\t\tdisabled: createBoolValue(field.disabled, script.disabled),\n\t\tcreatable: !field.uncreatable,\n\t\timmutable: field.immutable,\n\t\tlabel: createStringValue(field.label || name, script.label),\n\t\tdescription: createStringValue(field.description, script.description),\n\t\tplaceholder: createStringValue(field.placeholder, script.placeholder),\n\t\tstep: field.step,\n\t\tmax: field.max,\n\t\tmin: field.min,\n\t\tdefault: script.default || field.default,\n\t\tvalidator: script.validator,\n\n\t\tevents: {\n\t\t\tinput: script.input,\n\t\t\tchange: script.change,\n\t\t\tclick: script.click,\n\t\t\tfocus: script.focus,\n\t\t\tblur: script.blur,\n\t\t},\n\t};\n}\n/**\n * \n * @param {Record<string, FieldScriptConfiguration>} fields \n * @param {FieldComponents} components \n * @param {Permission[]?} [permissions] \n */\nexport default function toSchema(fields, components, permissions) {\n\t/** @type {Schema} */\n\tlet schema = Object.create(null);\n\tfor (const [name, field] of Object.entries(fields)) {\n\t\tconst component = components[name];\n\t\tconst type = field.type;\n\t\tconst layout = field.layout || {};\n\t\tif (typeof type !== 'object' || !type) {\n\t\t\tschema[name] = {\n\t\t\t\t...createAttr(field, name, permissions),\n\t\t\t\ttype,\n\t\t\t\tarray: Boolean(field.array),\n\t\t\t\tcomponent: [component, field?.component, field.script?.component].find(v => typeof v === 'function'),\n\t\t\t\tlayout: {\n\t\t\t\t\tfield: name,\n\t\t\t\t\tcolStart: layout.colStart,\n\t\t\t\t\tcolSpan: layout.colSpan,\n\t\t\t\t\tcolEnd: layout.colEnd,\n\t\t\t\t\trowStart: layout.rowStart,\n\t\t\t\t\trowSpan: layout.rowSpan,\n\t\t\t\t\trowEnd: layout.rowEnd,\n\t\t\t\t},\n\t\t\t};\n\t\t\tcontinue;\n\n\t\t}\n\t\tconst fields = Object.entries(type).filter(\n\t\t\t/** @type {(v: [string, any]) => v is [string, FieldScriptConfiguration]} */(([, v]) => Boolean(v))\n\t\t);\n\t\tconst levelKey = layout.levelKey || '';\n\t\t/** @type {StoreLayout.Column<any>[]} */\n\t\tconst columns = [];\n\t\tif (levelKey) {\n\t\t\tif (Array.isArray(layout.columns)) {\n\t\t\t\tfor (const { action, actions, field, placeholder, width } of layout.columns) {\n\t\t\t\t\tif (field || width || placeholder) {\n\t\t\t\t\t\tif (field || width) {\n\t\t\t\t\t\t\tcolumns.push({ field, width });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (placeholder && !width) {\n\t\t\t\t\t\t\tcolumns.push({ placeholder });\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst allActions = [action, actions].flat().filter(Boolean);\n\t\t\t\t\t\tif (allActions) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tcolumns.push({ actions: allActions });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!columns.length) {\n\t\t\t\tcolumns.push({ actions: ['collapse', 'move'] });\n\t\t\t\tconst list = fields.filter(([, v]) => v.layout?.head)\n\t\t\t\t\t.sort(([, a], [, b]) => (a.layout?.head || 0) - (b.layout?.head || 0))\n\t\t\t\t\t.map(([field, define]) => field);\n\t\t\t\tfor (const c of list) {\n\t\t\t\t\tcolumns.push({ field: c });\n\t\t\t\t}\n\t\t\t\tcolumns.push({ placeholder: 1 });\n\t\t\t\tcolumns.push({ actions: ['add', 'remove'] });\n\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (Array.isArray(layout.columns)) {\n\t\t\t\tfor (const { action, actions, field } of layout.columns) {\n\t\t\t\t\tif (field) {\n\t\t\t\t\t\tcolumns.push({ field });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst allActions = [action, actions].flat().filter(Boolean);\n\t\t\t\t\t\tif (allActions) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tcolumns.push({ actions: allActions });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!columns.length) {\n\t\t\t\tcolumns.push({ actions: ['add', 'trigger', 'move', 'remove', 'serial'] });\n\t\t\t\tconst list = fields.filter(([, v]) => v.layout?.head)\n\t\t\t\t\t.sort(([, a], [, b]) => (a.layout?.head || 0) - (b.layout?.head || 0))\n\t\t\t\t\t.map(([field, define]) => field);\n\t\t\t\tfor (const c of list) {\n\t\t\t\t\tcolumns.push({ field: c });\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = toSchema(type, typeof component !== 'function' && component || {}, permissions);\n\n\t\tschema[name] = {\n\t\t\t...createAttr(field, name, permissions),\n\t\t\tlayout: {\n\t\t\t\tfield: name,\n\t\t\t\tfields: Object.entries(children)\n\t\t\t\t\t.sort(([a], [b]) => (type[a]?.layoutOrder || 0) - (type[b]?.layoutOrder || 0))\n\t\t\t\t\t.map(([field, s]) => ({ ...s.layout, field })),\n\t\t\t\tcolumns,\n\t\t\t\tarrayStyle: levelKey ? 'tree' : 'table',\n\t\t\t\tlevelKey,\n\t\t\t\tcolStart: layout.colStart,\n\t\t\t\tcolSpan: layout.colSpan,\n\t\t\t\tcolEnd: layout.colEnd,\n\t\t\t\trowStart: layout.rowStart,\n\t\t\t\trowSpan: layout.rowSpan,\n\t\t\t\trowEnd: layout.rowEnd,\n\t\t\t},\n\t\t\ttype: children,\n\t\t\tarray: Boolean(field.array),\n\t\t\tcomponent: [component, field?.component, field.script?.component].find(v => typeof v === 'function'),\n\t\t};\n\t}\n\treturn schema;\n}\n","/** @import { Importmap } from '@yongdall/common' */\n\n\n/** @type {Importmap} */\nexport let importmap = {imports: {}, scopes: {}};\ntry {\n\tconst {imports = {}, scopes = {}} = JSON.parse(document.querySelector('script[type=importmap]')?.textContent || '');\n\timportmap = {imports, scopes}\n} catch {\n\n}\n\nexport { importmap as default }\n","import { findPluginIdRegex } from '@yongdall/common';\nimport { plugins } from './configuration.mjs';\nimport importmap from './importmap.mjs';\n\n/**\n * @template T\n * @overload\n * @param {string} [id] \n * @param {(f: string) => Promise<object>} [importFile] \n * @returns {Promise<T | undefined>}\n */\n/**\n * @template T\n * @overload\n * @param {string} [id] \n * @param {string} [pluginId] \n * @param {(f: string) => Promise<object>} [importFile] \n * @returns {Promise<T | undefined>}\n */\n/**\n * @template T\n * @param {string} [id] \n * @param {((f: string) => Promise<object>) | string} [pluginId] \n * @param {(f: string) => Promise<object>} [importFile] \n * @returns {Promise<T | undefined>}\n */\nexport async function importWidget(id, pluginId, importFile) {\n\tif (!id) { return; }\n\tif (id[0] === ':') {\n\t\t// TODO: 表示数据库内脚本\n\t}\n\tconst index = id.indexOf('#');\n\tlet file = index < 0 ? id : id.slice(0, index);\n\tif (pluginId && typeof pluginId === 'string') {\n\t\tif (!file || file === '@') {\n\t\t\tfile = pluginId;\n\t\t} else if (file.startsWith('@/')) {\n\t\t\tfile = pluginId + file.slice(1);\n\t\t}\n\t}\n\tconst importFn = [pluginId, importFile].find(\n\t\t/** @type {(v: any) => v is ((f: string) => Promise<object>)} */(\n\t\t\tv => typeof v === 'function'\n\t\t)\n\t) || ((f) => import(f));\n\n\t/** @type {any} */\n\tconst mod = await importFn(file).catch((e) => { console.error(e); });\n\tif (index < 0) { return mod; }\n\tconst key = id.slice(index + 1);\n\tif (!key) { return mod.default; }\n\tlet val = mod;\n\tfor (const k of key.split('.')) {\n\t\tif (!val || typeof val !== 'object') { return; }\n\t\tval = val[k];\n\t}\n\treturn val;\n}\n/**\n * \n * @param {string} path \n * @param {Record<string, string>?} [scope] \n */\nfunction findImport(path, scope) {\n\tif (!scope) { return null; }\n\tconst p = scope[path];\n\tif (p) { return p; }\n\tlet length = 0;\n\t/** @type {string} */\n\tlet base = '';\n\tfor (const item of Object.entries(scope)) {\n\t\tconst [key, target] = item;\n\t\tif (key[key.length - 1] !== '/') { continue; }\n\t\tif (path.startsWith(key) && key.length > length) {\n\t\t\tlength = key.length;\n\t\t\tbase = target;\n\t\t}\n\t}\n\tif (!length) { return null; }\n\tif (base[base.length - 1] !== '/') {\n\t\tbase += '/';\n\t}\n\n\treturn base + path.slice(length);\n\n}\n/**\n * \n * @param {string} path \n * @param {string} root \n */\nfunction importMap(path, root) {\n\tlet bestScopeMatch = '';\n\t/** @type {Record<string, string>?} */\n\tlet scope = null;\n\tfor (const [scopeName, scopeMap] of Object.entries(importmap.scopes)) {\n\t\tif (root.startsWith(scopeName) && scopeName.length > bestScopeMatch.length) {\n\t\t\tbestScopeMatch = scopeName;\n\t\t\tscope = scopeMap;\n\t\t}\n\t}\n\treturn findImport(path, scope) || findImport(path, importmap.imports);\n}\n\n/**\n * 加载样式\n * @param {string} url \n * @param {string} [plugin] \n * @param {boolean} [pluginOnly] \n * @returns {string}\n */\nfunction importURL(url, plugin, pluginOnly) {\n\tconst s = !(pluginOnly && plugin) && findPluginIdRegex.exec(url)?.groups;\n\tif (s) {\n\t\tconst { pluginId, path } = s;\n\t\tconst pluginDefine = Object.hasOwn(plugins, pluginId) && plugins[pluginId] || {};\n\t\tconst VERSION = pluginDefine.version || 'VERSION';\n\t\tconst root = `/assets/plugins/${pluginId}/${VERSION}/`;\n\t\tconst base = location.origin + root;\n\t\tconst u = pluginDefine.assets?.[path] || importMap(url, root);\n\t\tif (u) { return new URL(u, base).href; }\n\n\n\t}\n\n\tconst pluginDefine = plugin && plugins[plugin] || {};\n\tconst VERSION = pluginDefine.version || 'VERSION';\n\tconst root = plugin ? `/assets/plugins/${plugin}/${VERSION}/` : '';\n\t// TODO: 路径处理\n\tconst base = plugin ? location.origin + root : location.href;\n\tif (plugin && url[0] !== '.' && url[0] !== '/') {\n\t\t// TODO: 路径转换\n\t}\n\tconst u = pluginDefine.assets?.[url] || root && importMap(url, root) || url;\n\treturn new URL(u, base).href;\n\n}\n/** @type {Record<string, Promise<HTMLLinkElement>>} */\nconst importCSSMap = Object.create(null);\n/**\n * 加载样式\n * @param {string} url \n * @param {string} [plugin] \n * @param {boolean} [pluginOnly] \n * @returns {Promise<HTMLLinkElement>}\n */\nexport function importStyle(url, plugin, pluginOnly) {\n\tconst href = importURL(url, plugin, pluginOnly);\n\tconst p = importCSSMap[href];\n\tif (p) { return p; }\n\tconst promise = new Promise((resolve, reject) => {\n\t\tconst link = document.createElement('link');\n\t\tlink.addEventListener('load', () => resolve(link));\n\t\tlink.addEventListener('error', (e) => reject(e.error));\n\t\tlink.href = href;\n\t\tlink.rel = \"stylesheet\";\n\t\tdocument.head.appendChild(link);\n\t});\n\timportCSSMap[href] = promise;\n\tpromise.catch(() => {\n\t\tif (promise !== importCSSMap[href]) { return; }\n\t\tdelete importCSSMap[href];\n\t});\n\treturn promise;\n}\n\n/** @type {Record<string, Promise<void> | undefined>} */\nconst importScriptPromises = Object.create(null);\n/**\n * \n * @param {string} src \n * @returns {Promise<void>}\n */\nexport function importScript(src) {\n\tconst url = new URL(src, location.href);\n\turl.hash = '';\n\tconst href = url.href;\n\tconst p = importScriptPromises[href];\n\tif (p) { return p; }\n\n\n\t/** @type {Promise<void>} */\n\tconst promise = new Promise((resolve, reject) => {\n\t\tconst script = document.createElement('script');\n\t\tscript.type = 'text/javascript';\n\t\tscript.addEventListener('load', () => resolve());\n\t\tscript.addEventListener('error', (e) => reject(e.error));\n\t\tscript.src = href;\n\t\tdocument.head.appendChild(script);\n\t});\n\timportScriptPromises[href] = promise;\n\tpromise.catch(() => {\n\t\tif (promise !== importScriptPromises[href]) { return; }\n\t\tdelete importScriptPromises[href];\n\t});\n\treturn promise;\n}\n\n/**\n * \n * @param {string} src \n * @param {string | string[]} [name] \n * @param {string} [type] \n */\nexport async function require(src, name, type) {\n\n\t/** @type {any} */\n\tlet exports;\n\tswitch (type?.toLowerCase()) {\n\t\tcase 'umd':\n\t\tcase 'iife':\n\t\tdefault: {\n\t\t\tawait importScript(src);\n\t\t\texports = globalThis;\n\t\t\tfor (const k of Array.isArray(name) ? name : name?.split('.') || []) {\n\t\t\t\tif (!exports || typeof exports !== 'object') { break; }\n\t\t\t\texports = exports[k];\n\t\t\t}\n\t\t}\n\n\t}\n\treturn exports;\n}\n","export class ResponseError extends Error {\n\t/**\n\t * \n\t * @param {number} status \n\t */\n\tconstructor(status) {\n\t\tsuper(`${status}`)\n\t\tthis.status = status;\n\t}\n}\n","/** @import { State } from '../signal.mts' */\nimport { createState } from '../signal.mts';\n\n/**\n * @template T\n * @template D\n * @typedef {object} PromisesAndStates\n * @property {(force?: boolean) => Promise<T>} load\n * @property {() => T | D} get\n * @property {() => void} destroy\n */\n/**\n * @template T\n * @template {unknown[]} A\n * @template D\n * @typedef {object} PromisesAndStatesApi\n * @property {(key: string | string[], ...args: A) => PromisesAndStates<T, D>} create\n * @property {(listener: (key: string) => void) => void} listen\n * @property {(key: string | string[], ...args: A) => Promise<T>} load\n * @property {(key: string | string[], ...args: A) => Promise<T>} forceLoad\n * @property {(key: string | string[], ...args: A) => T | D} get\n */\n/**\n * @template T\n * @template {unknown[]} A\n * @template D\n * @param {(...a: A) => Promise<T>} run \n * @param {D} def \n * @param {...PromisesAndStatesApi<unknown, any[], unknown>} dependents \n * @returns {PromisesAndStatesApi<T, A, D>}\n */\nexport default function createPromisesAndStates(run, def, ...dependents) {\n\n\t/** @type {Record<string, Promise<T>>} */\n\tconst promises = Object.create(null);\n\t/** @type {Set<string>} */\n\tconst reload = new Set();\n\t/** @type {Record<string, State<T | D> | undefined>} */\n\tconst states = Object.create(null);\n\n\n\t/** @type {Record<string, A | undefined>} */\n\tconst allArgs = Object.create(null);\n\n\t/** @type {((key: string) => void)[]} */\n\tconst listeners = [];\n\t/** @type {Set<string>} */\n\tconst wait = new Set();\n\t/**\n\t * \n\t * @param {string} key \n\t * @param {A} args \n\t */\n\tfunction update(key, args) {\n\t\tconst result = run(...args);\n\t\tpromises[key] = result;\n\t\tresult.then(v => {\n\t\t\tconst state = states[key];\n\t\t\tif (state) { return state.set(v); }\n\t\t\tstates[key] = createState(/** @type {T | D} */(v));\n\t\t\tfor (const l of listeners) {\n\t\t\t\tl(key);\n\t\t\t}\n\t\t}, () => {\n\t\t\tif (promises[key] !== result) { return; }\n\t\t\tdelete promises[key];\n\t\t});\n\t\treturn result;\n\t}\n\t/**\n\t * \n\t * @param {string} key \n\t */\n\tfunction refresh(key) {\n\t\tif (wait.has(key)) { return; }\n\t\twait.add(key);\n\t\trequestIdleCallback(() => {\n\t\t\tif (!wait.has(key)) { return; }\n\t\t\twait.delete(key);\n\t\t\tconst args = allArgs[key];\n\t\t\tif (!args) { return; }\n\t\t\tupdate(key, args);\n\t\t});\n\t}\n\tfor (const d of dependents) {\n\t\td.listen(refresh);\n\t}\n\n\t/**\n\t * \n\t * @param {string | string[]} keys \n\t * @param {A} args \n\t * @returns {PromisesAndStates<T, D>}\n\t */\n\tfunction create(keys, ...args) {\n\t\tconst key = Array.isArray(keys) ? keys.join('\\n') : keys;\n\t\tallArgs[key] = args;\n\t\t/**\n\t\t * \n\t\t * @param {boolean} [force] \n\t\t */\n\t\tfunction load(force) {\n\t\t\tconst promise = !force && Object.hasOwn(promises, key) && promises[key];\n\t\t\tif (promise) { return promise; }\n\t\t\treturn update(key, args);\n\t\t}\n\t\tfunction get() {\n\t\t\tif (!Object.hasOwn(promises, key) || !promises[key] || reload.has(key)) {\n\t\t\t\tupdate(key, args);\n\t\t\t\treload.delete(key);\n\t\t\t}\n\t\t\tlet state = states[key];\n\t\t\tif (!state) {\n\t\t\t\tstate = createState(/** @type {T | D} */(def));\n\t\t\t\tstates[key] = state;\n\n\t\t\t}\n\t\t\treturn state.get();\n\t\t}\n\t\tfunction destroy() {\n\t\t\tif (allArgs[key] !== args) { return; }\n\t\t\tdelete allArgs[key];\n\t\t\tdelete states[key];\n\t\t\tdelete promises[key];\n\t\t}\n\t\treturn { get, load, destroy };\n\n\t}\n\t/**\n\t * \n\t * @param {string | string[]} keys \n\t * @param {A} args \n\t * @returns {Promise<T>}\n\t */\n\tfunction forceLoad(keys, ...args) {\n\t\tconst key = Array.isArray(keys) ? keys.join('\\n') : keys;\n\t\tallArgs[key] = args;\n\t\treturn update(key, args);\n\n\t}\n\t/**\n\t * \n\t * @param {string | string[]} keys \n\t * @param {A} args \n\t * @returns {Promise<T>}\n\t */\n\tfunction load(keys, ...args) {\n\t\tconst key = Array.isArray(keys) ? keys.join('\\n') : keys;\n\t\tallArgs[key] = args;\n\t\tconst promise = Object.hasOwn(promises, key) && promises[key];\n\t\tif (promise) { return promise; }\n\t\treturn update(key, args);\n\n\t}\n\t/**\n\t * \n\t * @param {string | string[]} keys \n\t * @param {A} args \n\t * @returns {T | D}\n\t */\n\tfunction get(keys, ...args) {\n\t\tconst key = Array.isArray(keys) ? keys.join('\\n') : keys;\n\t\tallArgs[key] = args;\n\t\tif (!Object.hasOwn(promises, key) || !promises[key] || reload.has(key)) {\n\t\t\tupdate(key, args);\n\t\t\treload.delete(key);\n\t\t}\n\t\tlet state = states[key];\n\t\tif (!state) {\n\t\t\tstate = createState(/** @type {T | D} */(def));\n\t\t\tstates[key] = state;\n\n\t\t}\n\t\treturn state.get();\n\n\t}\n\t/**\n\t * \n\t * @param {(key: string) => void} listener \n\t */\n\tfunction listen(listener) {\n\t\tlisteners.push(listener);\n\t}\n\treturn { create, listen, load, forceLoad, get };\n}\n","/**\n * @template T\n * @param {() => Promise<T>} load \n * @returns \n */\nexport default function toPromiseInterface(load) {\n\treturn {\n\t\t/**\n\t\t * @template [TResult1=T]\n\t\t * @template [TResult2=never]\n\t\t * @param {((value: T) => TResult1 | PromiseLike<TResult1>)?} [onfulfilled]\n\t\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected]\n\t\t * @returns {Promise<TResult1 | TResult2>};\n\t\t */\n\t\tthen(onfulfilled, onrejected) { return load().then(onfulfilled, onrejected); },\n\t\t/**\n\t\t * @template [TResult2=never]\n\t\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected]\n\t\t * @returns {Promise<T | TResult2>};\n\t\t */\n\t\tcatch(onrejected) { return load().catch(onrejected); },\n\t\t/**\n\t\t * @param {(() => void)?} [onfinally]\n\t\t * @returns {Promise<T>};\n\t\t */\n\t\tfinally(onfinally) { return load().finally(onfinally); },\n\t};\n\n}\n","/** @import { Field, Permission } from '@yongdall/types' */\n/** @import { Search } from '@yongdall/common' */\n/** @import DotRequest from 'dot-request' */\n/** @import { PageConfiguration } from './page.mjs' */\n/** @import { FieldComponent } from '../typesDefine.mjs' */\n\nimport { importWidget } from '../import.mjs';\nimport request, { userErrorHandler } from '../request.mjs';\nimport { ResponseError } from '../ResponseError.mjs';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport toPromiseInterface from './toPromiseInterface.mjs';\n/** @import { Schema, Store, StoreLayout } from '@neeloong/form' */\n/**\n * @typedef {object} ModelConfiguration\n * @property {string} [id] \n * @property {string} [label] \n * @property {Record<string, Field>} fields 字段配置\n * @property {string?} [iconField] 图标字段\n * @property {string?} [imageField] 图像字段\n * @property {string?} [labelField] 标签字段\n * @property {string?} [labelPattern] 标签命名规则\n * @property {Permission[]} [permissions] 权限配置\n * @property {Record<string, unknown>?} [options] 模型选项,关联前端脚本可读取\n * @property {(string | [string, object])[] | null} [scripts] 关联前端脚本\n * @property {Record<string, string | object | null> | null} [pages] 关联默认页面\n * // TODO: 查询配置\n * // TODO: 前端按钮配置\n * // TODO: 是否可销毁、可创建、更新、保存、upsert\n * // TODO: 列表内操作按钮\n * // TODO: 编辑内按钮\n * // TODO: 操作事件\n * // TODO: 是否分页\n */\n\n\n/** @typedef {Omit<Field, 'scripts' | 'type'> & { component?: FieldComponent; script?: Omit<FieldScript, 'subFields'>; type: string | Record<string, FieldScriptConfiguration>;}} FieldScriptConfiguration */\n\n/** @typedef {Omit<ModelConfiguration, 'scripts' | 'fields'> & { script?: Omit<ModelScript, 'fields'>; fields: Record<string, FieldScriptConfiguration>;}} ModelScriptConfiguration */\n\n/**\n * @typedef {object} ListScriptParameter\n * @property {ModelScriptConfiguration} model\n * @property {Record<string, any>[]} [checkedDocuments]\n * @property {Record<string, any>[]} [documents]\n */\n/**\n * @typedef {object} DocumentScriptParameter\n * @property {ModelScriptConfiguration} model\n * @property {Record<string, any>} [document]\n * @property {Store} [store]\n */\n/**\n * @typedef {object} ModelScript\n * @property {Record<string, FieldScript>} [fields] 字段配置\n * @property {((document: any, ...fields: (string | number)[]) => void)?} [input]\n * @property {((document: any, ...fields: (string | number)[]) => void)?} [change]\n * @property {((document: any) => void)?} [beforeCreate]\n * @property {((document: any) => void)?} [beforeUpdate]\n * @property {((document: any) => void)?} [beforeSave]\n * @property {((document: any) => void)?} [beforeDestroy]\n * @property {((document: any) => void)?} [beforeUpsert]\n * @property {Record<string, (params: ListScriptParameter) => void>} [listScripts]\n * @property {Record<string, (params: DocumentScriptParameter) => void>} [documentScripts]\n */\n/**\n * @typedef {object} FieldScript\n * @property {Record<string, FieldScript>} [subFields] 子字段配置\n * @property {FieldComponent} [component]\n * @property {((value: InputEvent, store: Store) => void | boolean | null)?} [input]\n * @property {((value: InputEvent, store: Store) => void | boolean | null)?} [change]\n * @property {((value: Event, store: Store) => void | boolean | null)?} [click]\n * @property {((value: Event, store: Store) => void | boolean | null)?} [focus]\n * @property {((value: Event, store: Store) => void | boolean | null)?} [blur]\n * \n * @property {((document: any, field: string, ...fields: (string | number)[]) => void | object)?} [add]\n * @property {((value: any[], document: any, field: string, ...fields: (string | number)[]) => void)?} [remove]\n * @property {((from: number[], to: number, document: any, field: string, ...fields: (string | number)[]) => void)?} [move]\n * \n * @property {((store: Store) => boolean)?} [readonly]\n * @property {((store: Store) => boolean)?} [hidden]\n * @property {((store: Store) => boolean)?} [required]\n * @property {((store: Store) => boolean)?} [clearable]\n * @property {((store: Store) => boolean)?} [disabled]\n * @property {((store: Store) => any)?} [default]\n * \n * @property {((store: Store) => string)?} [label]\n * @property {((store: Store) => string)?} [description]\n * @property {((store: Store) => string)?} [placeholder]\n * @property {Schema.Validator | Schema.Validator[] | null} [validator]\n * \n * @property {((store?: Store?) => Iterable<Record<string, any>>)?} [source]\n * @property {((item: Record<string, any>, store?: Store?) => boolean)?} [filter]\n * \n */\n\n/**\n * \n * @param {(string | [string, object])[] | null} [scripts] \n */\n\nfunction loadScripts(scripts) {\n\treturn Promise.all(Array.isArray(scripts) ? scripts.map(async (s) => {\n\t\tconst path = typeof s === 'string' ? s : s[0];\n\t\tif (!path || typeof path !== 'string') { return; }\n\t\tconst script = await importWidget(path);\n\t\tif (typeof script !== 'function') { return script; }\n\t\tconst options = typeof s === 'string' ? null : s[1];\n\t\treturn script(typeof options == 'object' && options || {});\n\t}) : []);\n}\n/**\n * \n * @param {Field} field \n * @param {any[]} parentScripts \n * @returns {Promise<FieldScriptConfiguration>}\n */\nasync function setFieldScript({ type, scripts, ...field }, parentScripts) {\n\tconst subScripts = Object.create(null);\n\t/** @type {Record<string, any[] | undefined>} */\n\tconst selfScripts = Object.create(null);\n\tfor (const script of [await loadScripts(scripts), parentScripts].flat()) {\n\t\tif (!script || typeof script !== 'object') { continue; }\n\t\tconst { subFields, ...others } = script;\n\t\tfor (const [k, v] of Object.entries(others)) {\n\t\t\tconst list = selfScripts[k];\n\t\t\tif (!list) {\n\t\t\t\tselfScripts[k] = [v];\n\t\t\t} else {\n\t\t\t\tlist.push(v);\n\t\t\t}\n\t\t}\n\t\tif (!subFields) { continue; }\n\t\tfor (const [k, v] of Object.entries(subFields)) {\n\t\t\tconst list = subScripts[k];\n\t\t\tif (!list) {\n\t\t\t\tsubScripts[k] = [v];\n\t\t\t} else {\n\t\t\t\tlist.push(v);\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\t...field,\n\t\tscript: margeFieldScript(selfScripts),\n\t\ttype: typeof type === 'object' && type ? await setFieldsScript(type, subScripts) : type,\n\t};\n}\n/**\n * \n * @param {Record<string, Field>} fields \n * @param {*} scripts \n * @returns \n */\nasync function setFieldsScript(fields, scripts) {\n\tconst list = Object.entries(fields).map(([k, f]) => Promise.all([k, setFieldScript(f, scripts[k])]));\n\treturn Object.fromEntries(await Promise.all(list));\n}\n\n/**\n * \n * @param {any[]} [list] \n * @param {boolean} [a] \n * @returns {((...p: any) => any)?}\n */\nfunction margeFunc(list, a) {\n\tif (!list) { return null; }\n\tconst fn = list.filter(v => typeof v === 'function');\n\tif (!fn.length) { return null; }\n\tif (a) {\n\t\treturn (...p) => {\n\t\t\tfor (const f of fn) {\n\t\t\t\tf(...p);\n\t\t\t}\n\t\t};\n\t}\n\treturn async (...p) => {\n\t\tfor (const f of fn) {\n\t\t\tawait f(...p);\n\t\t}\n\t};\n}\n/**\n * \n * @param {((store: Store) => any)[] | null | undefined} list \n * @param {boolean | ((value: any) => boolean)} judgment \n * @param {any} [defaultValue] \n * @returns {((store: Store) => any)?}\n */\nfunction margeStoreFunc(list, judgment, defaultValue) {\n\tif (!list) { return null; }\n\tconst fn = list.filter(v => typeof v === 'function');\n\tif (!fn.length) { return null; }\n\treturn (...p) => {\n\t\tfor (const f of fn) {\n\t\t\tconst res = f(...p);\n\t\t\tif (res === judgment) { return res; }\n\t\t\tif (typeof judgment === 'function' && judgment(res)) { return res; }\n\t\t}\n\t\treturn defaultValue;\n\t};\n}\n/**\n * @template T\n * @param {((store?: Store?) => Iterable<T>)[] | null | undefined} list \n * @returns {((store?: Store?) => Iterable<T>)?}\n */\nfunction margeIterableFunc(list) {\n\tif (!list) { return null; }\n\tconst fn = list.filter(v => typeof v === 'function');\n\tif (!fn.length) { return null; }\n\treturn function *(...p) {\n\t\tfor (const f of fn) {\n\t\t\tyield * f(...p);\n\t\t}\n\t};\n}\n\n/**\n * \n * @param {((item: Record<string, any>, store?: Store?) => any)[] | null | undefined} list \n * @returns {((item: Record<string, any>, store?: Store?) => boolean)?}\n */\nfunction margeFilterFunc(list) {\n\tif (!list) { return null; }\n\tconst fn = list.filter(v => typeof v === 'function');\n\tif (!fn.length) { return null; }\n\treturn (...p) => {\n\t\tfor (const f of fn) {\n\t\t\tconst res = f(...p);\n\t\t\tif (res === false) { return res; }\n\t\t}\n\t\treturn false;\n\t};\n}\n/**\n * \n * @param {Record<string, any[] | undefined>} scripts \n * @returns {Omit<FieldScript, 'subFields'>}\n */\nfunction margeFieldScript(scripts) {\n\treturn {\n\t\tcomponent: scripts.component?.find(v => typeof v === 'function'),\n\t\tinput: margeFunc(scripts.input),\n\t\tchange: margeFunc(scripts.change),\n\t\tclick: margeFunc(scripts.click),\n\t\tfocus: margeFunc(scripts.focus),\n\t\tblur: margeFunc(scripts.blur),\n\t\tadd: scripts.add?.find(v => typeof v === 'function'),\n\t\tremove: margeFunc(scripts.remove),\n\t\tmove: margeFunc(scripts.move),\n\t\treadonly: margeStoreFunc(scripts.readonly, true, false),\n\t\thidden: margeStoreFunc(scripts.hidden, true, false),\n\t\trequired: margeStoreFunc(scripts.required, true, false),\n\t\tclearable: margeStoreFunc(scripts.clearable, true, false),\n\t\tdisabled: margeStoreFunc(scripts.disabled, true, false),\n\t\tdefault: margeStoreFunc(scripts.default, (v = null) => v !== null, null),\n\t\tlabel: margeStoreFunc(scripts.label, v => v && typeof v === 'string', ''),\n\t\tdescription: margeStoreFunc(scripts.description, v => v && typeof v === 'string', ''),\n\t\tplaceholder: margeStoreFunc(scripts.clearable, v => v && typeof v === 'string', ''),\n\t\tvalidator: [scripts.validator].flat().filter(Boolean),\n\t\tsource: margeIterableFunc(scripts.source),\n\t\tfilter: margeFilterFunc(scripts.disabled),\n\t};\n\n}\n/**\n * \n * @param {Record<string, any[]>} scripts \n * @returns {Omit<ModelScript, 'subFields'>}\n */\nfunction margeModelScript({\n\tlistScripts,\n\tdocumentScripts,\n\t...scripts\n}) {\n\treturn {\n\t\tinput: margeFunc(scripts.input),\n\t\tchange: margeFunc(scripts.change),\n\t\tbeforeCreate: margeFunc(scripts.beforeCreate),\n\t\tbeforeUpdate: margeFunc(scripts.beforeUpdate),\n\t\tbeforeSave: margeFunc(scripts.beforeSave),\n\t\tbeforeDestroy: margeFunc(scripts.beforeDestroy),\n\t\tbeforeUpsert: margeFunc(scripts.beforeUpsert),\n\t\tlistScripts: listScripts ? Object.assign({}, ...listScripts) : {},\n\t\tdocumentScripts: documentScripts ? Object.assign({}, ...documentScripts) : {},\n\t};\n}\n/**\n * \n * @param {ModelConfiguration} model \n * @returns {Promise<ModelScriptConfiguration>}\n */\nasync function setScript({ fields, scripts: scripts, ...model }) {\n\t/** @type {Record<string, any[]>} */\n\tconst fieldsScripts = Object.create(null);\n\t/** @type {Record<string, any[]>} */\n\tconst selfScripts = Object.create(null);\n\tfor (const script of await loadScripts(scripts)) {\n\t\tif (!script || typeof script !== 'object') { continue; }\n\t\tconst { fields, ...others } = script;\n\t\tfor (const [k, v] of Object.entries(others)) {\n\t\t\tconst list = selfScripts[k];\n\t\t\tif (!list) {\n\t\t\t\tselfScripts[k] = [v];\n\t\t\t} else {\n\t\t\t\tlist.push(v);\n\t\t\t}\n\t\t}\n\t\tif (!fields) { continue; }\n\t\tfor (const [k, v] of Object.entries(fields)) {\n\t\t\tconst list = fieldsScripts[k];\n\t\t\tif (!list) {\n\t\t\t\tfieldsScripts[k] = [v];\n\t\t\t} else {\n\t\t\t\tlist.push(v);\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\t...model,\n\t\tscript: margeModelScript(selfScripts),\n\t\tfields: await setFieldsScript(fields, fieldsScripts),\n\t};\n}\n\n\nconst modelOptions = createPromisesAndStates((\n\t/** @type {DotRequest} */req\n) => {\n\t/** @type {Promise<Record<string, any>[]>} */\n\tconst result = req.clone().body({}).json().then(v => v.options);\n\treturn result;\n}, /** @type {Record<string, any>[]} */([]));\n\n\n/**\n * \n * @param {DotRequest} baseReq \n * @param {string} key\n * @returns \n */\nfunction service(baseReq, key) {\n\tconst documentsReq = baseReq.clone().append(`/documents`);\n\tconst optionsReq = baseReq.clone().append(`/options`);\n\tconst { get: getOptions, load: loadOptions } = modelOptions.create(key, optionsReq);\n\n\n\treturn {\n\t\t/**\n\t\t * @param {Search.Param} [options]\n\t\t * @returns {Promise<{documents: any[]; total: number}>}\n\t\t */\n\t\tasync query({ values, where, orWhere, sort, limit = 20, page, offset, select, total, primary } = {}) {\n\t\t\treturn documentsReq.clone().body({ values, where, orWhere, sort, limit, page, offset, select, total, primary }).json();\n\t\t},\n\t\tgetOptions() { return getOptions(); },\n\t\t/**\n\t\t * @overload\n\t\t * @param {boolean} [options]\n\t\t * @returns {Promise<Record<string, any>[]>}\n\t\t */\n\t\t/**\n\t\t * @overload\n\t\t * @param {Search.Param} options\n\t\t * @returns {Promise<{options: Record<string, any>[]; total: number}>}\n\t\t */\n\t\t/**\n\t\t * @param {Search.Param | boolean} [options]\n\t\t * @returns {Promise<Record<string, any>[] | {options: Record<string, any>[]; total: number}>}\n\t\t */\n\t\tasync options(options) {\n\t\t\tif (!options || typeof options === 'boolean') {\n\t\t\t\treturn loadOptions(options);\n\t\t\t}\n\t\t\tconst { values, where, orWhere, sort, limit = 20, page, offset, select, total, primary } = options;\n\t\t\t// TODO:\n\t\t\treturn optionsReq.clone().body({\n\t\t\t\tvalues, where, orWhere, sort, limit, page, offset, select, total, primary,\n\t\t\t}).json();\n\t\t},\n\t\t/**\n\t\t * \n\t\t * @param {string | number} id\n\t\t */\n\t\tasync option(id) {\n\t\t\t// TODO:\n\t\t\treturn optionsReq.clone().append(`/${encodeURIComponent(id)}`).get().errorHandler(userErrorHandler).json();\n\t\t},\n\t\t/**\n\t\t * \n\t\t * @param {Record<string, any>} data\n\t\t * @returns \n\t\t */\n\t\tasync create(data) {\n\t\t\t// TODO:\n\t\t\treturn documentsReq.clone().post().body({ document: data }).json();\n\t\t},\n\t\t/**\n\t\t * \n\t\t * @param {string | number} id\n\t\t */\n\t\tdocument(id) {\n\t\t\tconst idReq = documentsReq.clone().append(`/${encodeURIComponent(id)}`);\n\t\t\t/**\n\t\t\t * \n\t\t\t * @returns {Promise<Record<string, any>>}\n\t\t\t */\n\t\t\tasync function get() {\n\t\t\t\treturn idReq.get().json().then(v => v.document);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tget,\n\t\t\t\t/**\n\t\t\t\t * @param {Record<string, any>} data\n\t\t\t\t * @returns \n\t\t\t\t */\n\t\t\t\tasync update(data) {\n\t\t\t\t\t// TODO:\n\t\t\t\t\treturn idReq.clone().put().body({ document: data }).json();\n\t\t\t\t},\n\t\t\t\tasync delete() {\n\t\t\t\t\t// TODO:\n\t\t\t\t\treturn idReq.delete().done();\n\t\t\t\t},\n\t\t\t\t/** @param {string} field */\n\t\t\t\tfield(field) {\n\t\t\t\t\tconst fieldReq = idReq.clone().append`fields/${field}`;\n\t\t\t\t\t/**\n\t\t\t\t\t * \n\t\t\t\t\t * @returns {Promise<any>}\n\t\t\t\t\t */\n\t\t\t\t\tasync function get() {\n\t\t\t\t\t\treturn fieldReq.get().json().then(v => v.value);\n\t\t\t\t\t}\n\t\t\t\t\treturn { get, ...toPromiseInterface(get) };\n\t\t\t\t},\n\t\t\t\t...toPromiseInterface(get),\n\t\t\t};\n\t\t},\n\t};\n}\nconst models = createPromisesAndStates((\n\t/** @type {DotRequest} */req\n) => {\n\t/** @type {Promise<ModelConfiguration?>} */\n\tconst result = req.result().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\treturn result;\n}, null);\nconst modelScripts = createPromisesAndStates((\n\t/** @type {() => Promise<ModelConfiguration?>} */load\n) => {\n\treturn load().then(async v => v && setScript(v));\n}, null, models);\n\n/**\n * \n * @param {string} model \n * @returns \n */\nexport function modelService(model) {\n\tconst modelReq = request.clone().path`models/${model || ''}`;\n\tconst { get: getModel, load: loadModel } = models.create(model, modelReq);\n\tconst { get: getScript, load: loadScript } = modelScripts.create(model, loadModel);\n\n\treturn {\n\t\tloadModel,\n\t\tloadScript,\n\t\tgetModel,\n\t\tgetScript,\n\t\t...service(modelReq, [model, ''].join('\\n')),\n\t\t...toPromiseInterface(loadModel),\n\t};\n}\n","/** @import DotRequest from 'dot-request' */\nimport request from '../request.mjs';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport toPromiseInterface from './toPromiseInterface.mjs';\n\nconst enumerations = createPromisesAndStates((\n\t/** @type {DotRequest} */req\n) => {\n\t/** @type {Promise<Record<string, any>[]>} */\n\tconst result = req.json().then(\n\t\tv => typeof v === 'object' && v.values || [],\n\t\t() => /** @type {Record<string, any>[]} */([])\n\t);\n\treturn result;\n}, /** @type {Record<string, any>[]} */([]));\n\n/**\n * \n * @param {string} enumeration \n * @returns \n */\nexport function enumerationsService(enumeration) {\n\tconst modelReq = request.clone().path`enumerations/${enumeration || ''}`;\n\tconst { get: get, load: load } = enumerations.create(enumeration, modelReq);\n\treturn { load, get, ...toPromiseInterface(load) };\n}\n","/** @import DotRequest from 'dot-request' */\n/** @import { FormLayout } from '@yongdall/types' */\nimport request from '../request.mjs';\nimport { ResponseError } from '../ResponseError.mjs';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport toPromiseInterface from './toPromiseInterface.mjs';\n\nconst layouts = createPromisesAndStates((\n\t/** @type {DotRequest} */req\n) => {\n\t/** @type {Promise<FormLayout?>} */\n\tconst result = req.result().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\treturn result;\n}, null);\n\n/**\n * \n * @param {string} layout \n * @returns \n */\nexport function formLayoutsService(layout) {\n\tconst layoutReq = request.clone().path`formLayouts/${layout || ''}`;\n\tconst { get: get, load: load } = layouts.create(layout, layoutReq);\n\treturn { load, get, ...toPromiseInterface(load) };\n}\n","import request from '../request.mjs';\nimport { createState } from '../signal.mts';\nimport toPromiseInterface from './toPromiseInterface.mjs';\n\n\nconst permissionsReq = request.clone().path`permissions`;\n\n/**\n * @typedef {({children: {value: string; label: string}[]; label: string;})} Permission\n */\n/** @type {Promise<Permission[]>?} */\nlet promise = null;\n/** @type {boolean} */\nlet reloaded = false;\nconst state = createState(/** @type {Permission[]} */([]));\n\nfunction update() {\n\t/** @type {Promise<Permission[]>} */\n\tconst result = permissionsReq.json().then(\n\t\tv => Array.isArray(v) && v || [],\n\t);\n\tpromise = result;\n\tresult.then(v => {\n\t\treturn state.set(v);\n\t}, () => {\n\t\tif (promise !== result) { return; }\n\t\tpromise = null;\n\t});\n\treturn result;\n}\n\n\n/**\n * \n * @param {boolean} [force] \n */\nfunction load(force) {\n\tif (!force && promise) { return promise; }\n\treturn update();\n}\nfunction get() {\n\tif (!promise || reloaded) {\n\t\tupdate();\n\t\treloaded = false;\n\t}\n\treturn state.get();\n}\n\nexport default { load, get, ...toPromiseInterface(load) };\n","import request from '../request.mjs';\nimport { ResponseError } from '../ResponseError.mjs';\nimport * as configuration from '../configuration.mjs';\nimport { createComputed, createState } from '../signal.mts';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport { importWidget } from '../import.mjs';\nimport type { Menu } from '../Menu.mjs';\n\nconst id = createState(configuration.applicationId || '');\n\nconst appPath = createState(configuration.path || '');\nconst webRoot = createComputed(() => {\n\tconst paths = appPath.get().replace(/[?#].*/, '').split('/').filter(Boolean);\n\tif (!paths.length) { paths.push('workbench'); }\n\tconst webRoot = new URL(['', ...paths, ''].join('/'), location.origin);\n\treturn webRoot;\n});\nconst root = createComputed(() => webRoot.get().href);\nconst path = createComputed(() => webRoot.get().pathname);\nconst authRoot = createComputed(() => root.get().slice(0, -1));\nconst authPath = createComputed(() => path.get().slice(0, -1));\n\ninterface ApplicationConfiguration {\n\tlogo?: string;\n\ttitle?: string;\n\tcompany?: string;\n\t/** 帮助链接 */\n\thelp?: string;\n}\nconst applications = createPromisesAndStates(async (applicationId: string) => {\n\tconst application = await request.clone().get`applications`.append(`${applicationId}`).json<ApplicationConfiguration | null>();\n\tif (typeof application !== 'object') { return null; }\n\treturn application;\n}, null);\nconst application = createComputed(() => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return null; }\n\treturn applications.get(applicationId, applicationId);\n});\nconst loadApplication = async (force?: boolean) => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return null; }\n\tif (force) { applications.forceLoad(applicationId, applicationId); }\n\treturn applications.load(applicationId, applicationId);\n};\nconst logo = createComputed(() => application.get()?.logo || '');\nconst title = createComputed(() => application.get()?.title || '');\nconst company = createComputed(() => application.get()?.company || '');\nconst help = createComputed(() => application.get()?.help || '');\n\n\nconst menus = createPromisesAndStates(async (applicationId: string) => {\n\tconst result = await request.clone().path`applications/${applicationId}/menus`.result<{menus?: Menu.Define[]}>().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\tif (!result || typeof result !== 'object') { return []; }\n\treturn result?.menus || [];\n}, []);\nconst applicationMenus = createComputed(() => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return []; }\n\treturn menus.get(applicationId, applicationId);\n});\nconst loadMenus = async (force?: boolean) => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return []; }\n\tif (force) { menus.forceLoad(applicationId, applicationId); }\n\treturn menus.load(applicationId, applicationId);\n};\n\n\nconst userMenus = createPromisesAndStates(async (applicationId: string) => {\n\tconst result = await request.clone().path`applications/${applicationId}/userMenus`.result<{userMenus?: Menu.Define[]}>().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\tif (!result || typeof result !== 'object') { return []; }\n\treturn result?.userMenus || [];\n}, []);\nconst applicationUserMenus = createComputed(() => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return []; }\n\treturn userMenus.get(applicationId, applicationId);\n});\nconst loadUserMenus = async (force?: boolean) => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return []; }\n\tif (force) { userMenus.forceLoad(applicationId, applicationId); }\n\treturn userMenus.load(applicationId, applicationId);\n};\n\nconst pages = createPromisesAndStates((\n\tapplicationId: string,\n\tpage: string,\n) => request.clone()\n\t.path`applications/${applicationId}/pages/${page}`\n\t.result<{ widget?: string; } | null>()\n\t.catch(() => null), null);\nconst continuations = createPromisesAndStates((\n\tapplicationId: string,\n\tpage: string,\n) => request.clone()\n\t\t.path`applications/${applicationId}/continuations/${page}`\n\t\t.result<{ widget?: string; } | null>()\n\t\t.catch(() => null), null);\n\n\nexport const Application = {\n\tget id() { return id.get(); },\n\tget root() { return root.get(); },\n\tget path() { return path.get(); },\n\tget authRoot() { return authRoot.get(); },\n\tget authPath() { return authPath.get(); },\n\tget logo() { return logo.get(); },\n\tget title() { return title.get(); },\n\tget company() { return company.get(); },\n\tget help() { return help.get(); },\n\trefresh() { loadApplication(); },\n\tget menus() { return applicationMenus.get(); },\n\tloadMenus(force?: boolean) { return loadMenus(force); },\n\tget userMenus() { return applicationUserMenus.get(); },\n\tloadUserMenus(force?: boolean) { return loadUserMenus(force); },\n\tasync loadPage(page: string) {\n\t\tconst applicationId = id.get();\n\t\tif (!applicationId) { return null; }\n\t\treturn pages.load([applicationId, page], applicationId, page).then(v => {\n\t\t\tconst widget = v?.widget;\n\t\t\tif (!widget || typeof widget !== 'string') { return null; }\n\t\t\treturn () => importWidget(widget);\n\t\t}, () => null);\n\t},\n\tasync loadContinuation(page: string) {\n\t\tconst applicationId = id.get();\n\t\tif (!applicationId) { return null; }\n\t\treturn continuations.load([applicationId, page], applicationId, page).then(v => {\n\t\t\tconst widget = v?.widget;\n\t\t\tif (!widget || typeof widget !== 'string') { return null; }\n\t\t\treturn () => importWidget(widget);\n\t\t}, () => null);\n\t},\n};\n","/** @import { Field } from '@yongdall/types' */\nimport { Search } from '@yongdall/common';\nimport { getFilterFns } from '../index.mjs';\n\n/**\n * \n * @param {Record<string, Field>} fields 字段配置\n * @param {Search.ExecParam} param \n * @returns \n */\nexport function modelFilter(fields, param) {\n\tlet fieldsMap = fields;\n\tconst fieldNames = param.fields.map(v => Array.isArray(v) ? v[0] : v);\n\tif (!fieldNames.length) { return null; }\n\tconst last = fieldNames.pop() || '';\n\tfor (const f of fieldNames) {\n\t\tconst type = Object.hasOwn(fieldsMap, f) && fieldsMap[f]?.type;\n\t\tif (!type || typeof type !== 'object') { return null; }\n\t\tfieldsMap = type;\n\t}\n\tconst field = Object.hasOwn(fieldsMap, last) && fieldsMap[last];\n\tif (!field) { return null; }\n\tconst eqFieldName = param.field;\n\tconst eqField = eqFieldName && Object.hasOwn(fieldsMap, eqFieldName) && fieldsMap[eqFieldName] || null;\n\tconst not = Boolean(param.sign);\n\tconst { value, values } = param;\n\n\tfor (const fns of getFilterFns(field, param.operator)) {\n\t\tif (eqField) {\n\t\t\tfor (const fn of not ? fns.notField : fns.field) {\n\t\t\t\tconst w = fn(values, value, field, eqField);\n\t\t\t\tif (typeof w === 'boolean') { return w; }\n\t\t\t}\n\t\t\tif (not) {\n\t\t\t\tfor (const fn of fns.field) {\n\t\t\t\t\tconst w = fn(values, value, field, eqField);\n\t\t\t\t\tif (typeof w === 'boolean') { return !w; }\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const fn of not ? fns.notValue : fns.value) {\n\t\t\t\tconst w = fn(values, value, field);\n\t\t\t\tif (typeof w === 'boolean') { return w; }\n\t\t\t}\n\t\t\tif (not) {\n\t\t\t\tfor (const fn of fns.value) {\n\t\t\t\t\tconst w = fn(values, value, field);\n\t\t\t\t\tif (typeof w === 'boolean') { return !w; }\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\treturn null;\n}\n","import { modelService } from '../services/index.mjs';\nimport { Search } from '@yongdall/common';\nimport { getFilterFns } from '../index.mjs';\nimport { modelFilter } from './modelFilter.mjs';\n\n\n\n/**\n * \n * @param {Search.ExecParam} value \n * @returns \n */\nfunction run({ operator, sign, value, values }) {\n\tconst not = Boolean(sign);\n\tfor (const fns of getFilterFns(!values.find(v => !Array.isArray(v)), operator)) {\n\t\tfor (const fn of not ? fns.notValue : fns.value) {\n\t\t\tconst w = fn(values, value);\n\t\t\tif (typeof w === 'boolean') { return w; }\n\t\t}\n\t\tif (not) {\n\t\t\tfor (const fn of fns.value) {\n\t\t\t\tconst w = fn(values, value);\n\t\t\t\tif (typeof w === 'boolean') { return !w; }\n\t\t\t}\n\t\t}\n\t}\n\tif (!operator) {\n\t\tfor (const v of values) {\n\t\t\tif (v == value) { return !not; }\n\t\t}\n\t\treturn not;\n\t}\n\n\treturn null;\n}\n\n\n/**\n * \n * @param {((value: Search.ExecParam) => boolean?)?} [exec]\n * @param {string?} [type] \n * @param {string?} [name] \n * @returns {(value: Search.ExecParam) => boolean?}\n */\nexport function createExec(exec, type, name) {\n\tif (typeof exec === 'function') { return exec; }\n\tif (type !== 'model') { return run; }\n\tif (!name) { return run; }\n\tconst s = modelService(name);\n\treturn value => {\n\t\tconst model = s.getModel();\n\t\tif (!model) { return run(value); }\n\t\treturn modelFilter(model.fields, value);\n\t};\n}\n","/** @import { DataSource } from './index.mjs' */\nimport { Search } from '@yongdall/common';\n\n\n\n\n/**\n * \n * @param {DataSource.Option[]} list \n * @param {(value: Search.ExecParam) => boolean?} exec \n * @param {(Search.Match | Search.Children)[]} where \n * @param {(Search.Match | Search.Children | Search.Or)[]} orWhere \n */\nexport function filterByWhere(list, exec, where, orWhere) {\n\t/** @type {DataSource.Option[]} */\n\tconst result = [];\n\tfor (const data of list) {\n\t\tconst children = filterByWhere(data.children, exec, where, orWhere);\n\t\tconst disabled = data.disabled || !(Search.exec(data.data, exec, where, orWhere) ?? true);\n\t\tif (!children.length && disabled) { continue; }\n\t\tresult.push({ ...data, children, disabled });\n\t}\n\treturn result;\n\n}\n/**\n * \n * @param {DataSource.Option[]} list \n * @param {(item: Record<string, any>) => boolean} filter \n */\nexport function filterByFn(list, filter) {\n\t/** @type {DataSource.Option[]} */\n\tconst result = [];\n\tfor (const data of list) {\n\t\tconst children = filterByFn(data.children, filter);\n\t\tconst disabled = !data.data || !filter(data.data);\n\t\tif (!children.length && disabled) { continue; }\n\t\tresult.push({ ...data, children, disabled });\n\t}\n\treturn result;\n\n}\n","/** @import { Field } from '@yongdall/types' */\n/** @import { DataSource } from './index.mjs' */\nimport { Pattern } from '@yongdall/common';\nimport { createComputed } from '../signal.mts';\n\n/**\n * \n * @param {{get(): Record<string, any>[]}} list \n * @param {Field.Source} options\n */\nexport function build(list, {\n\n\tid,\n\tlabel,\n\tvalue,\n\tparent,\n\tchildren,\n\tsequence,\n\tdisabled,\n} = {}) {\n\tconst idPattern = id || '{id}';\n\tconst valuePattern = value || '{value}';\n\tconst labelPattern = label || '{label}';\n\tconst disabledKey = disabled;\n\tif (parent) {\n\t\tconst parentPattern = parent.includes('{') ? parent : `{${parent}}`;\n\t\treturn createComputed(() => {\n\t\t\t/** @type {DataSource.Option[]} */\n\t\t\tconst data = list.get().map(data => {\n\t\t\t\tconst id = typeof data === 'object' && data ? Pattern.generate(idPattern, data) : data;\n\t\t\t\tconst value = typeof data === 'object' && data ? Pattern.generate(valuePattern, data) : data;\n\t\t\t\tconst label = String(typeof data === 'object' && data && Pattern.generate(labelPattern, data) || value);\n\t\t\t\tconst disabled = Boolean(typeof data === 'object' && disabledKey && data?.[disabledKey]);\n\t\t\t\tconst parentId = typeof data === 'object' && data ? Pattern.generate(parentPattern, data) : '';\n\t\t\t\treturn { id, value, label, data, parentId, disabled, children: [] };\n\t\t\t});\n\t\t\tconst values = new Set(data.map(v => String(v.value)));\n\t\t\tconst groups = Object.groupBy(data, d => d.parentId ?? '');\n\t\t\tconst rootKeys = Object.keys(groups).filter(v => !values.has(v));\n\t\t\tconst root = rootKeys.flatMap(v => groups[v] || []);\n\t\t\tfor (const key of rootKeys) {\n\t\t\t\tdelete groups[key];\n\t\t\t}\n\t\t\tconst queue = [...root];\n\t\t\tfor (let item; item = queue.shift();) {\n\t\t\t\tconst children = groups[item.id];\n\t\t\t\tdelete groups[item.id];\n\t\t\t\tif (!children?.length) { continue; }\n\t\t\t\titem.children = children;\n\t\t\t\tfor (const c of children) {\n\t\t\t\t\tqueue.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let keys = Object.keys(groups); keys.length; keys = Object.keys(groups)) {\n\t\t\t\tconst key = keys[0];\n\t\t\t\tconst children = groups[key];\n\t\t\t\tdelete groups[key];\n\t\t\t\tif (!children?.length) { continue; }\n\t\t\t\tfor (const c of children) {\n\t\t\t\t\troot.push(c);\n\t\t\t\t\tqueue.push(c);\n\t\t\t\t}\n\t\t\t\tfor (let item; item = queue.shift();) {\n\t\t\t\t\tconst children = groups[item.id];\n\t\t\t\t\tdelete groups[item.id];\n\t\t\t\t\tif (!children?.length) { continue; }\n\t\t\t\t\titem.children = children;\n\t\t\t\t\tfor (const c of children) {\n\t\t\t\t\t\tqueue.push(c);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TODO: 排序\n\t\t\treturn root;\n\n\n\t\t});\n\t}\n\tconst childrenKey = children;\n\t/**\n\t * \n\t * @param {*[]} data \n\t * @returns {DataSource.Option[]}\n\t */\n\tfunction buildItems(data) {\n\t\tconst result = data.map(data => {\n\t\t\tif (typeof data !== 'object' || !data) {\n\t\t\t\treturn { id: data, value: data, label: String(data), data, children: [] };\n\t\t\t}\n\t\t\tconst id = Pattern.generate(idPattern, data);\n\t\t\tconst value = Pattern.generate(valuePattern, data);\n\t\t\tconst label = String(Pattern.generate(labelPattern, data) || value);\n\t\t\tconst disabled = Boolean(disabledKey && data[disabledKey]);\n\t\t\tif (!childrenKey) {\n\t\t\t\treturn { id, value, label, data, disabled, children: [] };\n\t\t\t}\n\t\t\tconst children = data[childrenKey];\n\t\t\treturn {\n\t\t\t\tid, value, label, data, disabled, children: buildItems(children)\n\t\t\t};\n\t\t});\n\t\t// TODO: 排序\n\t\treturn result;\n\t}\n\treturn createComputed(() => buildItems(list.get()));\n\n}\n","import { allHooks } from './allHooks.mjs';\nimport { createStates } from './utils/state.mjs';\nimport { createComputed } from './signal.mts';\n\n\n\nconst enumerations = createStates((/** @type {string} */name) => {\n\treturn createComputed(() => {\n\t\t/** @type {Record<string, any>[]} */\n\t\tconst list = [];\n\t\tfor (const [plugin, value] of allHooks.get('enumerations').get(name)) {\n\t\t\tfor (const val of typeof value === 'function' ? value() : [value]) {\n\t\t\t\tlist.push({...val, plugin});\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t});\n}, name => name);\n/**\n * \n * @param {string} name \n * @returns {Record<string, any>[]}\n */\nexport function getEnumeration(name) {\n\treturn enumerations(name).get();\n}\n","import { enumerationsService, modelService } from '../services/index.mjs';\nimport { getEnumeration } from '../enumerations.mjs';\nimport { createStates } from '../utils/state.mjs';\nimport { createComputed } from '../signal.mts';\n\n\nexport const loadValues = createStates((/** @type {string} */type, /** @type {string} */name) => {\n\tif (!name) { return createComputed(() => /** @type {Record<string, any>[]} */([])); }\n\tif (type === 'model') {\n\t\tconst s = modelService(name);\n\t\treturn createComputed(() => s.getOptions());\n\t}\n\tif (type === 'serverEnumeration') {\n\t\tconst s = enumerationsService(name);\n\t\treturn createComputed(() => s.get());\n\t}\n\tif (type === 'webEnumeration') {\n\t\treturn createComputed(() => getEnumeration(name));\n\t}\n\tif (type === 'enumeration') {\n\t\tconst s = enumerationsService(name);\n\t\tconst serverEnumeration = createComputed(() => s.get());\n\t\tconst webEnumeration = createComputed(() => getEnumeration(name));\n\t\treturn createComputed(() => [\n\t\t\t...serverEnumeration.get(),\n\t\t\t...webEnumeration.get(),\n\t\t]);\n\t}\n\treturn createComputed(() => /** @type {Record<string, any>[]} */([]));\n}, (type, name) => name ? [type, name].join('\\n') : '');\n","/** @import { State } from '../signal.mts' */\nimport { createComputed } from '../signal.mts';\n\n/**\n * \n * @param {*} values \n * @returns {State<Record<string, any>[]>}\n */\nexport function loadArray(values) {\n\tif (!Array.isArray(values)) {\n\t\treturn createComputed(() => /** @type {Record<string, any>[]} */([]));\n\t}\n\treturn createComputed(() => values);\n}\n","/** @import { State } from '../signal.mts' */\nimport { createComputed } from '../signal.mts';\n/**\n * \n * @param {State<Record<string, any>[]>} data \n * @param {*} parent \n * @param {*} children \n */\nexport function flat(data, parent, children) {\n\tif (parent || !children) { return data; }\n\treturn createComputed(() => {\n\t\tconst childrenKey = children;\n\t\t/** @param {*[]} list @returns {Iterable<Record<string, any>>} */\n\t\tfunction* buildItems(list) {\n\t\t\tif (!Array.isArray(list)) { return; }\n\t\t\tfor (const data of list) {\n\t\t\t\tif (typeof data !== 'object' || !data) {\n\t\t\t\t\tyield data;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (childrenKey) { yield* buildItems(data[childrenKey]); };\n\t\t\t\tyield data;\n\t\t\t}\n\t\t}\n\t\treturn [...buildItems(data.get())];\n\t});\n\n}\n","/** @import { Store } from '@neeloong/form' */\n/** @import { Field } from '@yongdall/types' */\n/** @import { State } from '../signal.mts' */\nimport { Search } from '@yongdall/common';\nimport { ArrayStore, createState, modelService } from '@yongdall/web';\n\nimport { createComputed } from '../signal.mts';\nimport { createExec } from './createExec.mjs';\nimport { filterByFn, filterByWhere } from './filterList.mjs';\nimport { build } from './build.mjs';\nimport { loadValues } from './loadValues.mjs';\nimport { loadArray } from './loadArray.mjs';\nimport { flat } from './flat.mjs';\n\n\n/**\n * @typedef {object} DataSource.Option\n * @property {string | number} id\n * @property {string | number} value\n * @property {string} label\n * @property {any} data\n * @property {string | number} [parentId]\n * @property {boolean} [disabled]\n * @property {DataSource.Option[]} children\n */\n/**\n * @typedef {object} DataSource\n * \n * @property {string?} [id] id字段(或模式)\n * @property {string?} [label] 标签字段(或模式)\n * @property {string?} [value] 值字段(或模式)\n * @property {string?} [parent] 父节点字段(或模式)\n * \n * @property {string?} [children] 子列表\n * @property {string?} [sequence] 序列字段\n * @property {string?} [disabled] 禁用字段\n * \n * \n * @property {Field.Show[]?} [fields] 显示字段\n * @property {{ field: string; label?: string; operator: string; }[]?} [queryFilters] 快速过滤字段\n * \n * \n * \n * @property {any} configurator 字段配置信息\n * @property {Object.<string, string>} labels\n * @property {DataSource.Option[]} options\n * @property {(DataSource.Option & { level: number; })[]} levelTree\n * @property {Record<string, any>} map\n * @property {string?} [model]\n * @property {ReturnType<typeof modelService>?} [service] \n * @property {(Search.Match | Search.Children)[]} where\n * @property {(Search.Match | Search.Children | Search.Or)[]} orWhere\n * @property {[field: string, desc?: boolean | undefined][]} sort\n * @property {number} limit\n */\n/**\n * \n * @param {string?} [id] \n */\nfunction toPattern(id) {\n\tif (!id || typeof id !== 'string') { return null; }\n\treturn id.includes('{') ? id : `{${id}}`;\n\n}\n/**\n * \n * @param {Field.Source} source\n */\nfunction setPattern(source) {\n\tconst {\n\t\tid, value, label\n\t} = Array.isArray(source) ? {} : source || {};\n\tconst isModel = source.type === 'model' && source.name;\n\treturn {\n\t\t...source,\n\t\tid: toPattern(isModel ? id : id || 'id'),\n\t\tvalue: toPattern(isModel ? value : value || 'value'),\n\t\tlabel: toPattern(isModel ? label : label || 'label'),\n\t};\n}\n/**\n * \n * @param {any[] | Field.Source | null} [source] \n * @param {string | null} [model] \n * @returns {Field.Source}\n */\nfunction init(source, model) {\n\tif (Array.isArray(source)) { return setPattern({ values: source }); };\n\tif (!source) { return model ? { type: 'model', name: model } : {}; }\n\tif (source.type && source.name) { return setPattern(source); }\n\tif ((source.type === 'model' || !source.type) && !source.name && model) { return setPattern({ ...source, type: 'model', name: model }); }\n\tif (Array.isArray(source.values)) { return setPattern(source); }\n\tif (!source.type && !source.name && model) { return setPattern({ ...source, name: model }); }\n\treturn setPattern(source);\n}\n\n/**\n * \n * @param {State<DataSource.Option[]>} options \n */\nfunction toLabels(options) {\n\treturn createComputed(() => {\n\t\tconst queue = [...options.get()];\n\t\t/** @type {Record<string, string>} */\n\t\tconst labels = Object.create(null);\n\t\tfor (let item; item = queue.shift();) {\n\t\t\tconst children = item.children;\n\t\t\tlabels[item.value] = item.label;\n\t\t\tfor (const c of children) {\n\t\t\t\tqueue.push(c);\n\t\t\t}\n\t\t}\n\t\treturn labels;\n\t});\n}\n\n/**\n * \n * @param {Store?} [store] \n * @returns {Store?}\n */\nfunction findParentState(store) {\n\tlet state = store?.parent;\n\tif (!state) { return null; }\n\tif (state instanceof ArrayStore) { state = state.parent; }\n\tif (!state) { return null; }\n\treturn state;\n}\n\n/**\n * \n * @param {State<DataSource.Option[]>} options \n */\nfunction toValueMap(options) {\n\treturn createComputed(() => {\n\t\tconst queue = [...options.get()];\n\t\t/** @type {Record<string, any>} */\n\t\tconst values = Object.create(null);\n\t\tfor (let item; item = queue.shift();) {\n\t\t\tconst children = item.children;\n\t\t\tvalues[item.value] = item.data;\n\t\t\tfor (const c of children) {\n\t\t\t\tqueue.push(c);\n\t\t\t}\n\t\t}\n\t\treturn values;\n\t});\n}\n\n/**\n * \n * @param {State<DataSource.Option[]>} options \n */\nfunction toLevelTree(options) {\n\treturn createComputed(() => {\n\t\t/** @type {[level: number, option: DataSource.Option][]} */\n\t\tconst queue = options.get().map(v => [0, v]);\n\t\t/** @type {(DataSource.Option & {level: number})[]} */\n\t\tconst list = [];\n\t\tfor (let item; item = queue.shift();) {\n\t\t\tconst [level, option] = item;\n\t\t\tlist.push({ ...option, level });\n\t\t\tfor (const c of option.children) {\n\t\t\t\tqueue.push([level + 1, c]);\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t});\n}\n/**\n * \n * @param {Store} store \n * @param {string} placeholder \n */\nfunction getModelPlaceholder(store, placeholder) {\n\tlet currentState = store;\n\tlet k = 0;\n\twhile (placeholder[k] === '?') {\n\t\tk++;\n\t\tlet parent = currentState.parent;\n\t\tif (!parent) { break; }\n\t\tif (parent instanceof ArrayStore) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t\tif (!parent) { break; }\n\t\tcurrentState = parent;\n\t}\n\twhile (placeholder[k] === '?') { k++; }\n\tconst name = placeholder.slice(k);\n\tconst field = currentState.child(name);\n\tif (!field) { return null; }\n\treturn field.value;\n\n}\n/**\n * \n * @param {any[] | Field.Source | null} [source] \n * @param {string | null} [model] \n * @param {Store | null} [store] \n * @param {((store?: Store?) => Iterable<Record<string, any>>)?} [sourceFn]\n * @param {((item: Record<string, any>, store?: Store?) => boolean)?} [filter]\n * @returns {DataSource}\n */\nexport default function buildDataSource(source, model, store, sourceFn, filter) {\n\tconst sourceDefine = init(source, model);\n\tconst { type, name, parent, children, id, label, value, sequence, disabled, fields, queryFilters } = sourceDefine;\n\tconst configuratorKey = sourceDefine.configurator || 'configurator';\n\n\tconst data = typeof sourceFn ==='function' ? createComputed(() => [...sourceFn(store)])\n\t: type ? loadValues(type, name || '') : loadArray(sourceDefine.values);\n\tconst list = build(data, sourceDefine);\n\tconst labels = toLabels(list);\n\n\tconst searchText = sourceDefine.search;\n\tconst search = searchText && typeof searchText === 'string' ? Search.parse(searchText) : null;\n\tconst where = search?.where?.length ? search.where : null;\n\tconst orWhere = search?.orWhere?.length ? search.orWhere : null;\n\tconst limit = search?.limit || 100;\n\tconst sort = search?.sort || [];\n\tconst baseStore = findParentState(store);\n\tconst getPlaceholder = baseStore ? getModelPlaceholder.bind(null, baseStore) : null;\n\t/** @typedef {[(Search.Match | Search.Children)[], (Search.Match | Search.Children | Search.Or)[]]} SearchState */\n\tconst searchState = getPlaceholder\n\t\t? createComputed(() => /** @type {SearchState} */([\n\t\t\tSearch.fill(where, getPlaceholder),\n\t\t\tSearch.fill(orWhere, getPlaceholder),\n\t\t])) : where || orWhere\n\t\t? createState(/** @type {SearchState} */([where, orWhere]))\n\t\t: null;\n\n\tconst execFn = createComputed(() => createExec(null, type, name));\n\tconst listFiltered = typeof filter === 'function' ? createComputed(() => {\n\t\treturn filterByFn(list.get(), it => filter(it, store));\n\t}) : list;\n\tconst options = searchState ? createComputed(() => {\n\t\tconst [where, orWhere] = searchState.get();\n\t\treturn filterByWhere(listFiltered.get(), execFn.get(), where, orWhere);\n\t}) : listFiltered;\n\tconst levelTree = toLevelTree(options);\n\tconst valueMap = toValueMap(options);\n\n\tconst flatted = flat(data, parent, children);\n\tconst flattedFiltered = typeof filter === 'function' ? createComputed(() => {\n\t\treturn flatted.get().filter(d => d && filter(d, store));\n\t}) : flatted;\n\tconst configurator = searchState ? createComputed(() => {\n\t\tconst [where, orWhere] = searchState.get();\n\t\tfor (const data of flattedFiltered.get()) {\n\t\t\tif (!data) { continue; }\n\t\t\tconst disabled = !(Search.exec(data, execFn.get(), where, orWhere) ?? true);\n\t\t\tif (disabled) { continue; }\n\t\t\treturn data?.[configuratorKey];\n\t\t}\n\t\treturn null;\n\t}) : createComputed(() => flattedFiltered.get()[0]?.[configuratorKey]);\n\n\tconst service = type === 'model' && model ? modelService(model) : null;\n\treturn {\n\t\tparent, children, id, label, value, sequence, disabled, fields, queryFilters,\n\t\tget where() { return searchState ? searchState.get()[0] : []; },\n\t\tget orWhere() { return searchState ? searchState.get()[1] : []; },\n\t\tget limit() { return limit; },\n\t\tget sort() { return sort; },\n\t\tmodel: type === 'model' && model || '',\n\t\tservice,\n\t\tget labels() { return labels.get(); },\n\t\tget options() { return options.get(); },\n\t\tget configurator() { return configurator.get(); },\n\t\tget levelTree() { return levelTree.get(); },\n\t\tget map() { return valueMap.get(); },\n\t};\n}\n","/** @import { Store, StoreLayout } from '@neeloong/form' */\n/** @import { Field } from '@yongdall/types' */\n/** @import { FieldComponent, FieldStyle, FieldComponentEvent } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\nimport { ArrayStore, ObjectStore } from '@neeloong/form';\nimport { createState } from '../signal.mts';\nimport { getField } from './field.mjs';\nimport buildDataSource from '../DataSource/index.mjs';\n\n/**\n *\n * @param {Store} store\n * @param {any} [renderer] \n * @returns {FieldComponent?}\n */\nfunction getFieldComponent(store, renderer) {\n\tif (typeof renderer === 'function') { return renderer; }\n\tlet storeComponent = store.component;\n\tif (typeof storeComponent === 'function') { return storeComponent; }\n\tconst meta = store.meta;\n\tconst component = getField({\n\t\ttype: store.type,\n\t\tarray: store instanceof ArrayStore,\n\t\trenderer: [renderer, meta?.renderer, store.component].flat(),\n\t}, true);\n\tif (component) { return component; }\n\tif (store instanceof ObjectStore) { return null; }\n\tif (store instanceof ArrayStore && typeof store.type === 'object') {\n\t\treturn null;\n\t}\n\treturn () => document.createElement('div');\n\n}\n\n/**\n * \n * @param {Store} store \n * @param {Field.Bind?} [bind] \n * @returns {((data: any) => void) | null}\n */\nexport function createBind(store, bind) {\n\tif (!bind || typeof bind !== 'object') { return null; }\n\tconst parent = store.parent;\n\tif (!(parent instanceof ObjectStore)) { return null; }\n\tconst list = Array.isArray(bind) ? bind\n\t\t: Object.entries(bind).map(([field, source]) => {\n\t\t\treturn typeof source === 'string' ? { source, field } : { ...source, field };\n\t\t});\n\tif (!list.length) { return null; }\n\n\treturn data => {\n\t\tfor (const { field, source, clear, fixed, reset, set } of list) {\n\t\t\tconst current = parent.child(field);\n\t\t\tif (!current) { continue; }\n\t\t\tif (!source || typeof source !== 'string') { continue; }\n\t\t\tif (!data) {\n\t\t\t\tif (clear) { current.value = reset; }\n\t\t\t} else if (fixed){\n\t\t\t\tcurrent.value = set;\n\t\t\t} else if (source && typeof source === 'string') {\n\t\t\t\tcurrent.value = data[source];\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n *\n * @param {Store<any, Field?, any>} store\n * @param {FieldStyle} style \n * @param {any} [renderer] \n * @param {StoreLayout.Options?} [options]\n * @returns {Element?}\n */\nexport default function createStoreField(store, style, renderer, options) {\n\tconst component = getFieldComponent(store, renderer);\n\tif (!component) { return null; }\n\tconst { relate } = options || {};\n\t/** @type {FieldScriptConfiguration} */\n\tconst field = store.meta || { type: '' };\n\tlet destroyedState = createState(false);\n\tlet destroyed = false;\n\t/** @type {Map<string, Set<any>>} */\n\tconst events = new Map();\n\tconst bind = createBind(store, field?.bind);\n\n\n\t/**\n\t * @param {string} k \n\t * @param {any} p \n\t */\n\tfunction emitHandler(k, p) {\n\t\t// @ts-ignore\n\t\tstore.emit(k, p);\n\t}\n\tconst stopEffects = new Set();\n\tconst ac = new AbortController();\n\tconst signal = ac.signal;\n\tconst editable = options?.editable || false;\n\tconst nullable = Boolean(field.nullable);\n\tconst source = buildDataSource(field.source, field.model, store, field.script?.source, field.script?.filter);\n\n\tconst root = component({\n\t\tfield, style: { ...style }, store,\n\t\tget editable() { return editable; },\n\t\tget name() { return store.index; },\n\t\tget current() { return (store.parent || store.root).value; },\n\t\tget required() { return store.required; },\n\t\tget hidden() { return store.hidden; },\n\t\tget readonly() { return store.readonly; },\n\n\t\tget label() { return store.label || ''; },\n\t\tget placeholder() { return store.placeholder || ''; },\n\t\tget description() { return store.description || ''; },\n\t\tget source() { return source; },\n\t\tsignal,\n\t\tlisten(event, listen) {\n\t\t\tconst fn = listen.bind(this);\n\t\t\tlet set = events.get(event);\n\t\t\tif (!set) {\n\t\t\t\tset = new Set();\n\t\t\t\tevents.set(event, set);\n\t\t\t}\n\t\t\tset.add(fn);\n\t\t\treturn () => { set?.delete(fn); };\n\t\t},\n\t\temit(event, e) { emitHandler(event, e); },\n\t\tget value() { return store.value; },\n\t\tset value(v) {\n\t\t\tif (destroyed) { return; }\n\t\t\tstore.value = v;\n\t\t},\n\t\tget destroyed() { return destroyedState.get(); },\n\t\tget nullable() { return nullable; },\n\t\tget disabled() { return store.disabled; },\n\t\tget clearable() { return store.clearable; },\n\t\tbind,\n\t});\n\t/**\n\t * @template {keyof FieldComponentEvent} K\n\t * @param {K} k \n\t * @param {Parameters<FieldComponentEvent[K]>} p \n\t */\n\tfunction emit(k, ...p) {\n\t\tfor (const fn of [...events.get(k) || []]) {\n\t\t\tfn(...p);\n\t\t}\n\t}\n\tconst related = relate?.(store, {\n\t\tfocus() { emit('focus'); },\n\t\tscrollIntoView() { emit('scrollIntoView'); },\n\t\troot,\n\t});\n\toptions?.signal?.addEventListener('abort', () => {\n\t\tdestroyed = true;\n\t\tdestroyedState.set(true);\n\t\tfor (const stop of stopEffects) { stop(); }\n\t\trelated?.();\n\t}, { once: true });\n\treturn root;\n}\n","/** @import { Store } from '@neeloong/form' */\n/** @import { FromRenderer } from '../typesDefine.mjs' */\nimport { renderStore } from '@neeloong/form';\nimport createStoreField from './createStoreField.mjs';\nimport DOMPurify from 'dompurify';\nconst formAttrs = new Set([\n\t'nl-form-field',\n\t'nl-form-remove',\n\t'nl-form-move',\n\t'nl-form-add',\n\t'nl-form-event',\n]);\nconst formTags = new Map([\n\t['nl-form-field', new Set(['name', 'mode', 'renderer', 'placeholder'])],\n\t['nl-form-button', new Set(['click'])],\n]);\n/**\n * \n * @param {string} html \n */\nfunction sanitizeHtml(html) {\n\treturn DOMPurify.sanitize(html, {\n\t\tADD_TAGS: Object.keys(formTags),\n\t\tADD_ATTR: (attributeName, tagName) => {\n\t\t\tconst attr = attributeName.toLowerCase();\n\t\t\tif (formAttrs.has(attr)) { return true; }\n\t\t\tconst tagAttrs = formTags.get(tagName.toLowerCase());\n\t\t\tif (tagAttrs?.has(attr)) { return true; }\n\t\t\treturn false;\n\t\t}\n\t});\n}\n/**\n * \n * @param {Store<any, any>} store \n * @param {HTMLElement} root \n * @param {Partial<FromRenderer.Options>} [options] \n */\nexport default function (store, root, { enableLink, design, layout, editable, signal } = {}) {\n\tconst style = { enableLink, design };\n\treturn renderStore(\n\t\tstore,\n\t\t(store, renderer, options) => createStoreField(store, style, renderer, options),\n\t\troot,\n\t\tlayout || {},\n\t\t{ editable: editable || false, signal, sanitizeHtml },\n\t);\n}\n","export function createNeverAbortedSignal() {\n\treturn new AbortController().signal;\n}\n","import { Application } from '../services/index.mjs';\n\n/**\n * \n * @param {...string} paths \n * @returns \n */\nexport default function toUrl(...paths) {\n\tlet url = '/'\n\tfor (const path of paths) {\n\t\tconst a = url.lastIndexOf('?');\n\t\tif (a >= 0 && url.lastIndexOf('#') < a) {\n\t\t\turl += '#'\n\t\t}\n\t\turl += '/' + path;\n\t}\n\turl = url.split('#').map(s => {\n\t\tconst index = s.indexOf('?');\n\t\tconst path = index >= 0 ? s.slice(0, index) : s;\n\t\tconst search = index >= 0 ? s.slice(index) : '';\n\t\tconst p = path.split('/');\n\t\tconst first = p.shift() || '';\n\t\t/** @type {string[]} */\n\t\tconst list = [];\n\t\tfor (const k of p) {\n\t\t\tif (!k) { continue; }\n\t\t\tif (k === '.') { continue; }\n\t\t\tif (k === '..'){\n\t\t\t\tlist.pop();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlist.push(k);\n\t\t}\n\t\tlist.unshift(first);\n\t\treturn `${list.join('/')}${search}`;\n\t}).join('#');\n\tconst root = Application.path;\n\tif (url.startsWith(root)) { return url }\n\tconst k1 = url.indexOf('?');\n\tconst k2 = url.indexOf('#');\n\tconst k = k1 < 0 ? k2 : k2 < 0 ? k1 : Math.min(k1,k2);\n\tconst path = k < 0 ? url : url.slice(0, k);\n\tif (path.length !== root.length - 1) { return url}\n\tif (!root.startsWith(path)) { return url; }\n\tif (k < 0) { return root};\n\treturn root + url.slice(k);\n}\n","import { pluginIdRegex } from '@yongdall/common';\n\n/**\n * \n * @param {string} n \n * @returns {boolean}\n */\nexport default function isPluginId(n) {\n\tif (!n || typeof n !== 'string') { return false}\n\treturn pluginIdRegex.test(n);\n}\n","\n/**\n * \n * @overload\n * @param {AbortSignal | null | undefined} signal \n * @param {true} useReject \n * @returns {Promise<never>}\n */\n\n/**\n * \n * @overload\n * @param {AbortSignal?} [signal] \n * @param {boolean?} [useReject] \n * @returns {Promise<void | never>}\n */\n\n/**\n * \n * @param {AbortSignal?} [signal] \n * @param {boolean?} [useReject] \n * @returns {Promise<void | never>}\n */\nexport default function waitAbortSignal(signal, useReject) {\n\t/** @type {PromiseWithResolvers<void | never>} */\n\tconst { promise, resolve, reject } = Promise.withResolvers();\n\tif (!(signal instanceof AbortSignal)) { return promise; }\n\tif (signal.aborted) {\n\t\tif (useReject) {\n\t\t\treject(signal.reason);\n\t\t} else {\n\t\t\tresolve();\n\t\t}\n\t} else {\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tif (useReject) {\n\t\t\t\treject(signal.reason);\n\t\t\t} else {\n\t\t\t\tresolve();\n\t\t\t}\n\t\t}, { once: true });\n\t}\n\treturn promise;\n}\n","/** @type {(0|1)[][]} */\nconst bars = [\n\t[1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0],\n\t[1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0],\n\t[1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0],\n\t[1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0],\n\t[1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0],\n\t[1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0],\n\t[1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0],\n\t[1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0],\n\t[1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0],\n\t[1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0],\n\t[1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0],\n\t[1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0],\n\t[1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0],\n\t[1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0],\n\t[1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0],\n\t[1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0],\n\t[1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0],\n\t[1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0],\n\t[1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0],\n\t[1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0],\n\t[1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0],\n\t[1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0],\n\t[1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0],\n\t[1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0],\n\t[1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0],\n\t[1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0],\n\t[1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0],\n\t[1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0],\n\t[1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0],\n\t[1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0],\n\t[1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0],\n\t[1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0],\n\t[1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0],\n\t[1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0],\n\t[1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0],\n\t[1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0],\n\t[1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0],\n\t[1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0],\n\t[1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0],\n\t[1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0],\n\t[1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0],\n\t[1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n\t[1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0],\n\t[1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0],\n\t[1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0],\n\t[1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0],\n\t[1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0],\n\t[1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0],\n\t[1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0],\n\t[1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0],\n\t[1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0],\n\t[1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0],\n\t[1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0],\n\t[1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0],\n\t[1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0],\n\t[1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0],\n\t[1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0],\n\t[1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0],\n\t[1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0],\n\t[1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0],\n\t[1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0],\n\t[1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0],\n\t[1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0],\n\t[1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0],\n\t[1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0],\n\t[1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0],\n\t[1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0],\n\t[1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0],\n\t[1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1]\n];\n/**\n * @template T\n * @param {T[]} array \n * @param {T} val \n * @param {number} start \n * @param {number} end \n */\nfunction fillArray(array, val, start, end) {\n\tfor (let i = start; i < end; i++) {\n\t\tarray[i] = val;\n\t}\n}\n/**\n * @template T\n * @param {T[]} array \n * @param {(value: T) => unknown} predicate \n * @param {number} fromIndex \n */\nfunction findIndex(array, predicate, fromIndex) {\n\tfor (let i = fromIndex; i < array.length; i++) {\n\t\tif (predicate(array[i])) { return i; }\n\t}\n\treturn -1;\n\n}\nlet char0 = '0'.charCodeAt(0) || 0;\nlet char9 = '9'.charCodeAt(0) || 0;\n/**\n * \n * @param {string} text \n */\nexport function encode(text) {\n\tconst chars = [...text].map(v => typeof v === 'number' ? v : v.charCodeAt(0) || 0);\n\t/** @type {(1 | 2 | 3 | 0)[]} */\n\tconst modes = chars.map(v => {\n\t\tif (v < 32) { return 1; }\n\t\tif (v > 96) { return 2; }\n\t\treturn 0;\n\t});\n\n\tfor (let end = 0; end >= 0;) {\n\t\tlet start = findIndex(chars, c => c >= char0 && c <= char9, end);\n\t\tif (start < 0) { break; }\n\t\tend = findIndex(chars, c => c < char0 || c > char9, start + 1);\n\t\tlet count = (end < 0 ? chars.length : end) - start;\n\t\tif (count < 4) { continue; }\n\t\tif (count % 2) {\n\t\t\tcount -= 1;\n\t\t\tif (start && end < 0) { start += 1; }\n\t\t}\n\t\tfillArray(modes, 3, start, start + count);\n\t}\n\n\tfor (let end = 0; end >= 0;) {\n\t\tconst start = modes.indexOf(0, end);\n\t\tif (start < 0) { break; }\n\t\tend = findIndex(modes, Boolean, start + 1);\n\n\t\tconst mode1 = modes[start - 1] || 0;\n\t\tconst mode2 = modes[end] || 0;\n\t\tconst endModes = [mode1, mode2];\n\t\tconst mode = endModes.includes(1) && !endModes.includes(2) ? 1 : 2;\n\t\tfillArray(modes, mode, start, end < 0 ? chars.length : end);\n\t}\n\tconst codes = [];\n\t/** @type {1 | 2 | 3 | 0} */\n\tlet mode = 0;\n\tfor (let i = 0; i < chars.length; i++) {\n\t\tlet currentMode = modes[i] || 2;\n\t\tconst nextMode = modes[i + 1] || 2;\n\t\tlet char = chars[i];\n\t\tif (currentMode === 3) {\n\t\t\tif (nextMode !== 3) {\n\t\t\t\tcurrentMode = nextMode;\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t\tchar = ((char - char0) || 0) * 10 + ((chars[i] - char0) || 0);\n\n\t\t\t}\n\t\t}\n\t\tif (currentMode === 2) {\n\t\t\tchar -= 32;\n\t\t} else if (currentMode === 1) {\n\t\t\tchar = (char + 64) % 96;\n\t\t}\n\t\tif (mode !== currentMode) {\n\n\t\t\tif (mode === nextMode && mode !== 3 && currentMode !== 3) {\n\t\t\t\tcodes.push(98);\n\t\t\t} else {\n\t\t\t\tcodes.push(mode ? 102 - currentMode : 102 + currentMode);\n\t\t\t\tmode = currentMode;\n\t\t\t}\n\t\t}\n\t\tcodes.push(char);\n\t}\n\tcodes.push(codes.reduce((s, v, i) => (s + v * i), codes[0]) % 103);\n\tcodes.push(106);\n\treturn codes.flatMap(v => bars[v] || []);\n\n}\n","/** @import { Store } from '@neeloong/form' */\n/** @import { FromRenderer } from '../typesDefine.mjs' */\nimport { allHooks } from '../allHooks.mjs';\nimport renderStoreForm from './renderStoreForm.mjs';\nimport { createComputed } from '../signal.mts';\nimport { createNeverAbortedSignal } from '../utils/index.mjs';\n\nconst rendererState = createComputed(() => allHooks.get('formRenderers').named());\n\n\n/**\n * \n * @param {string?} [type] \n * @returns {FromRenderer['render']?}\n */\nfunction getRender(type) {\n\tif (!type) { return null; }\n\tconst renderers = rendererState.get();\n\tif (!Object.hasOwn(renderers, type)) { return null; }\n\tconst renderer = renderers[type];\n\tif (!renderer) { return null; }\n\tconst render = renderer.render;\n\tif (typeof render !== 'function') { return null; }\n\treturn render;\n}\n/**\n * \n * @param {Store<any, any>} store \n * @param {HTMLElement} root \n * @param {Partial<FromRenderer.Options> & {type?: string}} [options] \n * @returns {void}\n */\nexport default function (store, root, options) {\n\tconst {type, editable, signal, model, layout, enableLink, design, ...others } = options || {};\n\tconst render = getRender(type) || renderStoreForm;\n\trender(store, root, {\n\t\tmodel: model || null,\n\t\tlayout: layout || null,\n\t\teditable: Boolean(editable),\n\t\tsignal: signal || createNeverAbortedSignal(),\n\t\tenableLink: Boolean(enableLink),\n\t\tdesign: Boolean(design),\n\t\t...others,\n\t});\n}\n","/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\n/** @import { FieldComponents } from '../typesDefine.mjs' */\nimport { Store } from '@neeloong/form';\nimport toSchema from './toSchema.mjs';\n\n/**\n * \n * @param {ModelScriptConfiguration} define \n * @param {FieldComponents?} [fieldComponents] \n */\nexport default function createStore(define, fieldComponents) {\n\tconst components = typeof fieldComponents === 'object' && fieldComponents || {};\n\tconst schema = toSchema(define.fields, components, define.permissions);\n\tconst store = Store.create(schema);\n\treturn store;\n}\n","/** @import { FieldShowHandle, FieldStyle } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\nimport { createState } from '../signal.mts';\nimport buildDataSource from '../DataSource/index.mjs';\nimport { getField } from './field.mjs';\n\n/**\n *\n * @param {string} name\n * @param {FieldScriptConfiguration} field\n * @param {FieldStyle} style\n * @param {any} data\n * @returns {FieldShowHandle}\n */\nexport default function createShowField(name, field, style, data) {\n\tlet destroyedState = createState(false);\n\tlet destroyed = false;\n\t/** @type {Map<string, Set<any>>} */\n\tconst events = new Map();\n\t/** @type {any} */\n\tconst value = createState(data[name]);\n\tconst component = getField(field);\n\tconst source = buildDataSource(field.source, field.model, null, field.script?.source);\n\n\tconst ac = new AbortController();\n\tconst signal = ac.signal;\n\tconst root = component({\n\t\tfield, style: { ...style },\n\t\tget editable() { return false; },\n\t\tget name() { return name; },\n\t\tget current() { return data; },\n\t\tget required() { return false; },\n\t\tget hidden() { return false; },\n\t\tget readonly() { return true; },\n\n\t\tget label() { return ''; },\n\t\tget placeholder() { return ''; },\n\t\tget description() { return ''; },\n\t\tget source() { return source; },\n\t\tsignal,\n\t\tlisten(event, listen) {\n\t\t\tconst fn = listen.bind(this);\n\t\t\tlet set = events.get(event);\n\t\t\tif (!set) {\n\t\t\t\tset = new Set();\n\t\t\t\tevents.set(event, set);\n\t\t\t}\n\t\t\tset.add(fn);\n\t\t\treturn () => { set?.delete(fn); };\n\t\t},\n\t\temit() { },\n\t\tget value() { return value.get(); },\n\t\tset value(v) { },\n\t\tget destroyed() { return destroyedState.get(); },\n\t\tget nullable() { return true; },\n\t\tget disabled() { return false; },\n\t\tget clearable() { return false; },\n\n\t});\n\n\treturn {\n\t\troot,\n\t\tdestroy() {\n\t\t\tif (destroyed) { return; }\n\t\t\tdestroyed = true;\n\t\t\tdestroyedState.set(true);\n\t\t\tac.abort();\n\t\t},\n\t\tget value() {\n\t\t\treturn value;\n\t\t},\n\t\tset value(v) {\n\t\t\tif (destroyed) { return; }\n\t\t\tvalue.set(v);\n\t\t},\n\t};\n\n}\n","/** @import { Search } from '@yongdall/common' */\n/** @import { FieldFilterStyle } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n\nimport { getFieldFilter } from './field.mjs';\nimport { createComputed, createState } from '../signal.mts';\nimport buildDataSource from '../DataSource/index.mjs';\nimport { createNeverAbortedSignal } from '../utils/index.mjs';\n\n\n\n/**\n * @typedef {object} Handle\n * @property {any} value\n * @property {(value: any, operator: string) => void} update\n * @property {HTMLElement} root\n * @property {() => void} destroy\n */\n\n\n\n/**\n * \n * @param {{get(): Search.AndList, set(v: Search.AndList): void}} andList \n * @param {string} prop \n * @param {string?} [operator] \n * @param {boolean} [sign] \n */\nexport function createFilterState(andList, prop, operator, sign) {\n\tconst props = prop.split('.');\n\tconst not = Boolean(sign);\n\tconst op = typeof operator === 'string' ? operator : '';\n\t/**\n\t * \n\t * @param {Search.Match | Search.Children} v \n\t * @returns {v is Search.Match}\n\t */\n\tfunction finder(v) {\n\t\tif (!Array.isArray(v)) { return false; }\n\t\tif (v.length === 2) { return false; }\n\t\tif (Boolean(v[3]) !== not) { return false; }\n\t\tif (v[2] !== op) { return false; }\n\t\tconst fields = v[0];\n\t\tif (fields.length !== props.length) { return false; }\n\t\tfor (const [index, field] of fields.entries()) {\n\t\t\tif ((typeof field === 'string' ? field : field[0]) !== props[index]) { return false; }\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * \n\t * @param {any} val \n\t */\n\tfunction set(val) {\n\t\tconst list = andList.get();\n\t\tconst index = list.findIndex(finder);\n\t\tif (index < 0) {\n\t\t\tif (val != null) {\n\t\t\t\tandList.set([...list, [props, val, op, sign ? '!' : '']]);\n\t\t\t}\n\t\t\treturn;\n\n\t\t}\n\t\tif (val !== null) {\n\t\t\t/** @type {Search.Match | Search.Children} */\n\t\t\tconst item = [...list[index]];\n\t\t\titem[1] = val;\n\t\t\tandList.set([\n\t\t\t\t...list.slice(0, index),\n\t\t\t\titem,\n\t\t\t\t...list.slice(index + 1),\n\t\t\t]);\n\t\t} else {\n\t\t\tandList.set([\n\t\t\t\t...list.slice(0, index),\n\t\t\t\t...list.slice(index + 1),\n\t\t\t]);\n\t\t}\n\n\t}\n\tfunction get() {\n\t\treturn andList.get().find(finder)?.[1];\n\t}\n\tconst state = createComputed(get);\n\treturn {\n\t\tget() { return state.get(); },\n\t\tset,\n\t};\n\n}\n\n/**\n *\n * @param {{get(): Search.AndList, set(v: Search.AndList): void}} andList \n * @param {string} name\n * @param {FieldScriptConfiguration} field\n * @param {string} operator\n * @param {FieldFilterStyle} style\n * @param {AbortSignal} [signal]\n * @returns {HTMLElement}\n */\n\nfunction createQuickFilter(andList, name, field, operator, style, signal) {\n\tconst state = createFilterState(andList, name, operator);\n\tconst component = getFieldFilter(field, operator);\n\tconst destroyed = createState(false);\n\tconst source = buildDataSource(field.source, field.model, null, field.script?.source);\n\n\tconst root = component({\n\t\tfield, style: { ...style, quick: true },\n\t\tget operator() { return operator; },\n\t\tget value() { return state.get(); },\n\t\tset value(val) {\n\t\t\tif (destroyed.get()) { return; }\n\t\t\tstate.set(val);\n\t\t},\n\t\tget source() { return source; },\n\t\tsignal: signal || createNeverAbortedSignal(),\n\t\tget destroyed() { return destroyed.get(); },\n\t});\n\tif (signal?.aborted) {\n\t\tdestroyed.set(true);\n\t} else {\n\t\tsignal?.addEventListener('abort', () => { destroyed.set(true); }, { once: true });\n\t}\n\treturn root;\n}\n\n/**\n * @typedef {object} Match\n * @property {string} field\n * @property {string} [operator]\n * @property {any} value\n */\n/**\n * \n * @param {{get(): Search.AndList, set(v: Search.AndList): void}} andList \n * @param {HTMLElement} root \n * @param {{field: string; label?: string; operator: string}[]} filters \n * @param {object} options \n * @param {Record<string, FieldScriptConfiguration>} options.fields \n * @param {boolean} [options.inline] \n * @param {boolean} [options.showLabel]\n * @param {AbortSignal} [options.signal]\n */\nexport default function createQuickFilters(andList, root, filters, {\n\tfields, showLabel, inline, signal,\n}) {\n\tif (signal?.aborted) { return; }\n\tconst style = { showLabel, inline };\n\tfor (const { field, operator } of filters) {\n\t\tconst fieldDefine = Object.hasOwn(fields, field) && fields[field];\n\t\tif (!fieldDefine) { continue; }\n\t\tconst type = fieldDefine.type;\n\t\tif (!type || typeof type === 'object') { continue; }\n\t\tconst r = createQuickFilter(andList, field, fieldDefine, operator, style, signal);\n\t\troot.appendChild(r);\n\t\tsignal?.addEventListener('abort', () => { r.remove(); }, { once: true });\n\t}\n}\n","/** @import { FieldFilterComponent, FieldFilterStyle } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n/** @import { State } from '../signal.mts' */\n\nimport { createState } from '../signal.mts';\nimport buildDataSource from '../DataSource/index.mjs';\n\n/**\n * @typedef {object} Handle\n * @property {HTMLElement} root\n */\n\n/**\n *\n * @param {FieldFilterComponent} component\n * @param {FieldScriptConfiguration} field\n * @param {State<any>} valState\n * @param {State<any>} opState\n * @param {FieldFilterStyle} style\n * @param {AbortSignal} signal\n * @returns {HTMLElement}\n */\nexport default function createFilter(component, field, valState, opState, style, signal) {\n\tconst destroyed = createState(false);\n\tconst state = valState;\n\tconst operatorState = opState;\n\tconst source = buildDataSource(field.source, field.model, null, field.script?.source);\n\n\tsignal.addEventListener('abort', () => {\n\t\tdestroyed.set(true);\n\t}, { once: true });\n\t// TODO: 选项、过滤条件\n\treturn component({\n\t\tfield, style,\n\t\tget operator() { return operatorState.get(); },\n\t\tget value() { return state.get(); },\n\t\tset value(val) {\n\t\t\tif (destroyed.get()) { return; }\n\t\t\tconst value = state.get();\n\t\t\tstate.set(val);\n\t\t\tif (Object.is(value, val)) { return; }\n\t\t},\n\t\tget source() { return source; },\n\t\tsignal,\n\t\tget destroyed() { return destroyed.get(); },\n\t});\n}\n","/** @import { FieldFilterStyle } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n/** @import { State } from '../signal.mts' */\n\nimport createFilter from './createFilter.mjs';\nimport { getFieldFilterOperators } from './field.mjs';\nimport { getFieldFilter } from './field.mjs';\n\n\n\n/**\n *\n * @param {FieldScriptConfiguration} field\n * @param {FieldFilterStyle} userStyle\n * @param {State<any>} valState\n * @param {State<any>} opState\n * @param {AbortSignal?} signal\n */\n\nexport default function createFieldFilter(field, valState, opState, userStyle, signal) {\n\t/** @type {FieldFilterStyle} */\n\tconst style = { ...userStyle };\n\tdelete style.quick;\n\tdelete style.showLabel;\n\tlet destroyed = signal?.aborted || false;\n\tsignal?.addEventListener('abort', () => { destroyed = true; }, { once: true });\n\tconst operators = getFieldFilterOperators(field);\n\n\tconst root = document.createElement('span');\n\troot.classList.add(`FieldFilter-main`);\n\tconst operatorSelector = root.appendChild(document.createElement('select'));\n\n\toperatorSelector.classList.add(`FieldFilter-operator`);\n\tfor (const [value, label] of Object.entries(operators)) {\n\t\tconst option = document.createElement('option');\n\t\toption.value = value;\n\t\toption.label = label || value;\n\t\toperatorSelector.appendChild(option);\n\t}\n\n\tlet currentComponent = getFieldFilter(field, opState.get());\n\tlet handleAbortController = new AbortController();\n\tlet currentHandle = createFilter(currentComponent, field, valState, opState, style, signal ? AbortSignal.any([handleAbortController.signal, signal]) : handleAbortController.signal);\n\tlet handleRoot = root.appendChild(currentHandle);\n\n\thandleRoot.classList.add(`FieldFilter-value`);\n\n\t/** @param {string?} [operator] */\n\tfunction setOperator(operator) {\n\t\tif (destroyed) { return; }\n\t\tif (typeof operator !== 'string' || operator === opState.get()) { return; }\n\t\tif (!(operator in operators)) {\n\t\t\t// TODO: 不存在此操作符\n\t\t}\n\t\toperatorSelector.value = operator;\n\t\tconst component = getFieldFilter(field, operator);\n\t\tif (component === currentComponent) {\n\t\t\topState.set(operator);\n\t\t\treturn;\n\t\t}\n\t\thandleAbortController.abort();\n\t\thandleRoot.remove();\n\t\tcurrentComponent = component;\n\t\topState.set(operator);\n\n\t\thandleAbortController = new AbortController();\n\t\tcurrentHandle = createFilter(currentComponent, field, valState, opState, style, signal ? AbortSignal.any([handleAbortController.signal, signal]) : handleAbortController.signal);\n\t\thandleRoot = root.appendChild(currentHandle);\n\t\thandleRoot.classList.add(`FieldFilter-value`);\n\t}\n\toperatorSelector.addEventListener('input', () => setOperator(operatorSelector.value));\n\tsetOperator(operatorSelector.value);\n\treturn root\n}\n","/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n/** @import { Search } from '@yongdall/common' */\nimport { createState, effect } from '../signal.mts';\nimport createFieldFilter from './createFieldFilter.mjs';\n/**\n * @typedef {object} Filters\n * @property {HTMLElement} root\n * @property {() => void} add\n * @property {() => (Search.AndItem | null)[]} destroy\n */\n\n/**\n * \n * @param {HTMLElement} root \n * @param {Record<string, FieldScriptConfiguration>} fields \n * @param {(Search.AndItem | null)[]?} [value] \n * @returns {Filters}\n */\nexport default function createFilters(root, fields, value) {\n\troot.classList.add(`FieldFilter-filters`);\n\tconst ac = new AbortController();\n\tconst signal = ac.signal;\n\tlet values = Array.isArray(value) ? structuredClone(value) : [];\n\n\n\tconst fieldsMap = new Map(Object.entries(fields).filter(([, f]) => {\n\n\t\tconst type = f.type;\n\t\tif (!type || typeof type === 'object') { return false; }\n\t\treturn true;\n\t}));\n\n\tconst style = { quick: false, showLabel: false, inline: true };\n\n\t/**\n\t * \n\t * @param {Search.AndItem?} [v] \n\t * @returns \n\t */\n\tfunction createLine(v) {\n\t\tconst line = root.appendChild(document.createElement('div'));\n\t\tline.classList.add(`FieldFilter-field`);\n\n\t\tconst fieldSelect = document.createElement('select');\n\t\tfieldSelect.classList.add(`FieldFilter-fieldName`);\n\t\tline.appendChild(fieldSelect);\n\t\tconst removeButton = document.createElement('button');\n\t\tremoveButton.classList.add(`FieldFilter-remove`);\n\t\tremoveButton.type = 'button';\n\t\tline.appendChild(removeButton);\n\t\tfieldSelect.appendChild(document.createElement('option'));\n\t\tfor (const [name, f] of fieldsMap) {\n\t\t\tconst type = f.type;\n\t\t\tif (!type || typeof type === 'object') { continue; }\n\t\t\tconst option = document.createElement('option');\n\t\t\toption.value = name;\n\t\t\toption.label = f.label || name;\n\t\t\tfieldSelect.appendChild(option);\n\t\t}\n\t\t/** @type {{name: string; abort(): void}?} */\n\t\tlet fieldFilter = null;\n\t\tremoveButton.appendChild(document.createTextNode('移除'));\n\t\tremoveButton.addEventListener('click', () => {\n\t\t\tfieldFilter?.abort();\n\t\t\tconst index = [...root.children].indexOf(line);\n\t\t\tif (index < 0) { return; }\n\t\t\tline.remove();\n\t\t\tvalues.splice(index, 1);\n\t\t});\n\t\tconst state = createState();\n\t\tconst operatorState = createState('');\n\t\tfunction updateLine() {\n\t\t\tconst index = [...root.children].indexOf(line);\n\t\t\tif (index < 0) { return; }\n\t\t\tconst f = values[index];\n\t\t\tconst value = state.get();\n\t\t\tconst operator = operatorState.get();\n\t\t\tif (f && f.length !== 2) {\n\t\t\t\tconst fields = f[0];\n\t\t\t\tconst fieldItem = fields.length === 1 && fields[0];\n\t\t\t\tconst field = typeof fieldItem === 'string' ? fieldItem : Array.isArray(fieldItem) && fieldItem.length === 1 ? fieldItem[0] : '';\n\n\t\t\t\tif (!field && !fieldFilter) { return; }\n\t\t\t\tif (f && fieldFilter && field === fieldFilter.name && f[2] === operator && f[1] === value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tvalues.splice(index, 1, fieldFilter ? [[fieldFilter.name], value, operator] : null);\n\t\t}\n\t\tfieldSelect.addEventListener('change', () => {\n\t\t\tconst name = fieldSelect.value;\n\t\t\tconst field = fieldsMap.get(name);\n\t\t\tif (!fieldFilter && !field) { return; }\n\t\t\tif (fieldFilter?.name === name) { return; }\n\t\t\tfieldFilter?.abort();\n\t\t\tif (!field) {\n\t\t\t\tfieldFilter = null;\n\t\t\t\tupdateLine();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst filterAbortController = new AbortController();\n\t\t\tconst ffSignal = AbortSignal.any([filterAbortController.signal, signal]);\n\n\t\t\tstate.set(undefined);\n\t\t\toperatorState.set('');\n\t\t\tconst filterRoot = createFieldFilter(field, state, operatorState, style, ffSignal)\n\t\t\tfieldFilter = { name, abort() {filterAbortController.abort()} };\n\t\t\t// TODO: 内容进行匹配\n\t\t\tline.insertBefore(filterRoot, removeButton);\n\t\t\tffSignal.addEventListener('abort', () => {\n\t\t\t\tfilterRoot.remove();\n\t\t\t});\n\t\t\teffect(updateLine, ffSignal);\n\t\t});\n\t\tif (!v) { return; }\n\n\t\tconst fields = v[0];\n\t\tconst fieldItem = fields.length === 1 && fields[0];\n\t\tconst fieldName = typeof fieldItem === 'string' ? fieldItem : Array.isArray(fieldItem) && fieldItem.length === 1 ? fieldItem[0] : '';\n\n\t\tfieldSelect.value = fieldName;\n\t\tif (!fieldSelect.value) { return; }\n\t\tconst currentField = fieldSelect.value;\n\t\tconst field = fieldsMap.get(currentField);\n\t\tif (!field) { return; }\n\t\tconst filterAbortController = new AbortController();\n\t\tconst ffSignal = AbortSignal.any([filterAbortController.signal, signal]);\n\n\t\tif (currentField === fieldName) {\n\t\t\tstate.set(v[1]);\n\t\t\toperatorState.set(v[2] || '');\n\t\t} else {\n\t\t\tstate.set(undefined);\n\t\t\toperatorState.set('');\n\t\t}\n\t\tconst filterRoot = createFieldFilter(field, state, operatorState, style, ffSignal);\n\t\tfieldFilter = { name: currentField, abort() {filterAbortController.abort()} }\n\t\tline.insertBefore(filterRoot, removeButton);\n\t\tffSignal.addEventListener('abort', () => {\n\t\t\tfilterRoot.remove();\n\t\t});\n\t\teffect(updateLine, ffSignal);\n\t}\n\n\n\tfunction reset() {\n\t\tfor (const v of values) {\n\t\t\tcreateLine(v);\n\t\t}\n\t}\n\treset();\n\tlet destroyed = false;\n\treturn {\n\t\troot,\n\t\tadd: () => createLine(),\n\t\tdestroy() {\n\t\t\tif (destroyed) { return values; }\n\t\t\tdestroyed = true;\n\t\t\troot.innerHTML = '';\n\t\t\tac.abort();\n\t\t\treturn values;\n\t\t}\n\t};\n}\n","export const root = document.createElement('div');\n","const head = /** @type {HTMLHeadElement} */(document.querySelector('head'));\nconst oldIconLink = /** @type {HTMLLinkElement?} */(document.querySelector('link[rel=icon]'));\nconst iconLink = oldIconLink || document.createElement('link');\niconLink.rel = 'icon';\nconst defaultIcon = iconLink.href;\nlet currentIcon = defaultIcon;\n/**\n * \n * @param {string?} icon \n */\nexport function setIcon(icon) {\n\tconst newIcon = icon || defaultIcon;\n\tif (newIcon === currentIcon) { return }\n\tcurrentIcon = newIcon;\n\tif (!newIcon) {\n\t\ticonLink.remove();\n\t\treturn;\n\t}\n\ticonLink.href = newIcon;\n\thead.appendChild(iconLink);\n}\n","import { createState } from './signal.mts';\nimport { createNeverAbortedSignal } from './utils/index.mjs';\n\n\nexport default class GeneralContext {\n\t#destroyed = createState(false);\n\t#waitDestroy;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t */\n\tconstructor(signal) {\n\t\t/*** @type {PromiseWithResolvers<never>} */\n\t\tconst { promise, reject } = Promise.withResolvers();\n\t\tthis.#waitDestroy = promise;\n\t\tif (signal instanceof AbortSignal) {\n\t\t\tthis.#signal = signal;\n\t\t\tif (signal.aborted) {\n\t\t\t\tthis.#destroyed.set(true);\n\t\t\t} else {\n\t\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\t\tthis.#destroyed.set(true);\n\t\t\t\t}, { once: true });\n\t\t\t}\n\t\t} else {\n\t\t\tthis.#signal = createNeverAbortedSignal();\n\t\t}\n\t}\n\t/**\n\t * @overload\n\t * @param {false} [useReject]\n\t * @returns {Promise<void>}\n\t */\n\t/**\n\t * @overload\n\t * @param {true} useReject\n\t * @returns {Promise<never>}\n\t */\n\t/**\n\t * @overload\n\t * @param {boolean} [useReject] \n\t * @returns {Promise<void | never>}\n\t */\n\t/**\n\t * \n\t * @param {boolean} [useReject] \n\t * @returns \n\t */\n\twaitDestroy(useReject) {\n\t\tif (useReject) { return this.#waitDestroy; }\n\t\treturn this.#waitDestroy.catch((() => { }));\n\t}\n\tget destroyed() { return this.#destroyed.get(); }\n\t/** @type {AbortSignal} */\n\t#signal;\n\tget signal() { return this.#signal; }\n}\n","import GeneralContext from '../GeneralContext.mjs';\n\n\n\nexport class ModalFooter extends GeneralContext {\n\t#root;\n\t#container = document.createElement('div');\n\tget container() { return this.#container; }\n\t/**\n\t * \n\t * @param {HTMLElement} root \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tconstructor(root, signal) {\n\t\tsuper(signal);\n\t\tthis.#root = root;\n\t\tconst container = root.appendChild(this.#container);\n\t\troot.className = 'Modal-footer';\n\t\tcontainer.className = 'Modal-footer-main';\n\t}\n}\n","/** @import { FieldScriptConfiguration, ModelScriptConfiguration } from '../services/model.mjs' */\nimport { Pattern } from '@yongdall/common';\nimport createShowField from './createShowField.mjs';\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, {}, 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 { Menu } from './Menu.mjs' */\n/** @import { Components } from './typesDefine.mts' */\nimport FormList from './form/List.mjs';\n/** @type {Components['List']} */\nexport let List = FormList;\n/** @type {Components['Pagination']} */\nexport let Pagination = class {\n\t#pagination = document.createElement('div');\n\tget root() {return this.#pagination; }\n\tget size() { return 5}\n\tset size(v) { }\n\tget page() { return 1}\n\tset page(v) { }\n\tget total() { return 0}\n\tset total(v) { }\n\t/**\n\t * \n\t * @param {(p: Pagination) => void} listen \n\t * @returns {() => void}\n\t */\n\tlisten(listen) {\n\t\treturn () => {}\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n;\n\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu.RendererOptions} options \n * @returns {Element?}\n */\nexport let createMenuButtons = (menus, options) => null;\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu?} button \n * @param {Menu.RendererOptions} options \n * @returns {Element?}\n */\nexport let createMenuButton = (menus, button, options) => null;\n\n\n/** @type {Menu.Renderer} */\nexport let createMenuItem = () => null;\n\n/**\n * \n * @param {Partial<Components>} components \n */\nexport default function setComponents(components = {}) {\n\tList = components.list || components.List || List;\n\tPagination = components.pagination || components.Pagination || Pagination;\n\tconst menuButtons = components.createMenuButtons || components.menuButtons;\n\tconst menuButton = components.createMenuButton || components.menuButton;\n\tconst menuItem = components.createMenuItem || components.menuItem;\n\tif (typeof menuButtons === 'function') {\n\t\tcreateMenuButtons = menuButtons;\n\t}\n\tif (typeof menuButton === 'function') {\n\t\tcreateMenuButton = menuButton;\n\t}\n\tif (typeof menuItem === 'function') {\n\t\tcreateMenuItem = menuItem;\n\t}\n}\n","/**\n * @typedef {object} Menu\n * 菜单显示\n * @property {string} [label] 外观:标签\n * @property {string} [icon] 外观:图标\n * @property {string} [image] 外观:图片\n * @property {string} [color] 外观:颜色\n * @property {string} [title] 外观:标题\n * @property {string} [description] 外观:描述\n * \n * @property {string} [refType] 引用类型:分组(group)、模块(module)、内置(builtin)\n * @property {string} [refId] 引用ID\n * @property {string} [refMode] 引用模式:展开/子菜单\n * \n * 菜单操作\n * @property {string} [page] 页面\n * @property {string} [path] 页面路径\n * @property {string} [uri] URI\n * @property {string} [target] URI打开目标窗口\n * @property {string} [command] 指令\n * @property {string} [script] 脚本\n * @property {() => boolean | void} [click] 点击事件\n * @property {boolean} [disabled] 点击事件\n * @property {boolean} [logged]\n * \n * 三方扩展\n * @property {boolean} [autoLogin] 自动登录\n * @property {string} [appId] 关联应用\n * \n * @property {(Menu | null)[]} children\n * @property {Menu.Button[]} buttons\n * \n * @property {string} [permission] 权限\n * \n * @property {boolean} [collapsed] 折叠\n * \n */\n\nimport { createMenuButton, createMenuButtons, createMenuItem } from './components.mjs';\nimport { createNeverAbortedSignal } from './utils/index.mjs';\n\n\n/**\n * @typedef {object} Menu.Button\n * \n * @property {string} [label] 外观:标签\n * @property {string} [icon] 外观:图标\n * @property {string} [image] 外观:图片\n * @property {string} [color] 外观:颜色\n * @property {string} [title] 外观:标题\n * @property {string} [description] 外观:描述\n * \n * @property {string} [refType] 引用类型:分组(group)、模块(module)、内置(builtin)\n * @property {string} [refId] 引用ID\n * @property {string} [refMode] 引用模式:展开/子菜单\n * \n * 菜单操作\n * @property {string} [page] 页面\n * @property {string} [path] 页面路径\n * @property {string} [uri] URI\n * @property {string} [target] URI打开目标窗口\n * @property {string} [command] 指令\n * @property {string} [script] 脚本\n * @property {() => void} [click] 点击事件\n * @property {boolean} [disabled] 点击事件\n * \n * 三方扩展\n * @property {boolean} [autoLogin] 自动登录\n * @property {string} [appId] 关联应用\n * \n * @property {string} [permission] 权限\n * \n */\n\n/**\n * @typedef {object} Menu.Define\n * @property {string} [groupType]\n * @property {string} [group]\n * @property {number} [no]\n * @property {'' | 'button' | 'divider'} type\n * @property {number} level\n * \n * 菜单显示\n * @property {string} [label] 外观:标签\n * @property {string} [icon] 外观:图标\n * @property {string} [image] 外观:图片\n * @property {string} [color] 外观:颜色\n * @property {string} [title] 外观:标题\n * @property {string} [description] 外观:描述\n * \n * @property {string} [refType] 连接:引用类型:分组(group)、模块(module)、内置(builtin)\n * @property {string} [refId] 连接:引用ID\n * @property {string} [refMode] 连接:引用模式:展开/子菜单\n * \n * 菜单操\n * @property {string} [page] 连接:页面\n * @property {string} [path] 连接:页面路径\n * @property {string} [uri] 连接:URI\n * @property {string} [target] 连接:URI打开目标窗口\n * @property {string} [command]\n * @property {string} [script]\n * @property {() => void} [click] 点击事件\n * @property {boolean} [disabled] 点击事件\n * \n * \n * @property {boolean} [autoLogin] 三方扩展:自动登录\n * @property {string} [appId] 三方扩展:关联应用\n * \n * @property {string} [permission] 权限\n * \n * @property {boolean} [collapsed] 折叠\n * \n */\n/**\n * @typedef {object} Menu.Renderer.Command\n * @property {string?} [page] \n * @property {string?} [path] \n * @property {string?} [uri] \n * @property {boolean?} [disabled] \n * @property {(() => boolean | void)?} [click] \n */\n/**\n * @typedef {object} Menu.Renderer.Options\n * @property {AbortSignal} signal\n * @property {boolean} button \n * @property {(menu: Menu) => boolean} disabled \n * @property {(menu: Menu) => boolean | void} click \n * @property {(menu: Menu) => string | null} uri \n * @property {Record<string, Menu.Renderer.Command>} commands \n */\n/**\n * @typedef {(menu: Menu, options: Menu.Renderer.Options) => HTMLElement?} Menu.Renderer\n */\n/**\n * @typedef {object} Menu.RendererOptions\n * @property {AbortSignal} signal\n * @property {(menu: Menu, options?: Partial<Menu.Renderer.Options>) => HTMLElement?} create \n * @property {(menu: Menu) => boolean} disabled \n * @property {(menu: Menu) => boolean | void} click \n * @property {(menu: Menu) => string | null} uri \n * @property {Record<string, Menu.Renderer.Command>} commands \n */\n\n/**\n * @typedef {object} Menu.Options\n * @property {AbortSignal} signal\n * @property {(menu: Menu, options: Menu.Renderer.Options) => HTMLElement?} create \n * @property {(menu: Menu) => boolean} disabled \n * @property {(menu: Menu) => boolean | void} click \n * @property {(menu: Menu) => string | null} uri \n * @property {Record<string, Menu.Renderer.Command>} commands \n */\n\nconst actionProps = [\n\t'uri', 'target', 'page', 'path', 'command', 'script', 'click',\n];\n\n\n/**\n * \n * @param {Record<string, any>} data\n * @param {string[]} actionProps \n */\nfunction clear(data, actionProps) {\n\tfor (const k of actionProps) {\n\t\tdelete data[k];\n\n\t}\n\treturn data;\n}\n/**\n * @param {Menu.Define[]} list \n * @param {Menu.Button[]} [rootButtons] \n * @returns {(Menu | null)[]}\n */\nfunction fromDefine(list, rootButtons = []) {\n\t/** @type {(Menu | null)[]} */\n\tconst rootMenus = [];\n\t/** @type {(Menu | null)[]} */\n\tconst parents = [];\n\tfor (const { level: levelX, type, ...item } of list) {\n\t\tconst level = Math.max(0, Math.floor(levelX)) || 0;\n\t\tparents.length = level;\n\t\tconst parent = parents.findLast(Boolean);\n\t\tif (type === 'button') {\n\t\t\t/** @type {Menu.Button} */\n\t\t\tconst button = item;\n\t\t\tif (parent) {\n\t\t\t\tparent.buttons.push(button);\n\t\t\t} else {\n\t\t\t\trootButtons.push(button);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\t/** @type {Menu?} */\n\t\tconst menu = type === 'divider' ? null : { ...item, buttons: [], children: [] };\n\t\tif (parent) {\n\t\t\tparent.children.push(menu);\n\t\t} else {\n\t\t\trootMenus.push(menu);\n\t\t}\n\t\tparents[level] = menu;\n\t}\n\treturn rootMenus;\n}\n\n\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {(menu: Menu) => boolean} [filter] \n * @param {boolean?} [expandSingle] \n */\nfunction filterMenu(menus, filter, expandSingle) {\n\t/** @type {(Menu | null)[]} */\n\tconst result = [];\n\tfor (const menu of menus) {\n\t\tif (!menu) {\n\t\t\tresult.push(menu);\n\t\t\tcontinue;\n\t\t}\n\t\tconst { children } = menu;\n\t\tif (filter && !filter(menu)) { continue; }\n\t\tif (!children?.length) {\n\t\t\tresult.push(menu);\n\t\t\tcontinue;\n\t\t}\n\t\tconst list = filterMenu(children, filter, expandSingle).filter((m, i, s) => {\n\t\t\tif (m) { return true; }\n\t\t\tif (i === 0) { return true; }\n\t\t\tif (s[i - 1]) { return true; }\n\t\t\treturn false;\n\t\t});\n\t\tif (!list.length) { continue; }\n\t\tif (expandSingle && list.filter(Boolean).length <= 1) {\n\t\t\tresult.push(...list);\n\t\t} else {\n\t\t\tif (!list[list.length - 1]) { list.pop(); }\n\t\t\tif (!list[0]) { list.shift(); }\n\t\t\tresult.push({ ...menu, children: list });\n\t\t}\n\t}\n\tif (expandSingle && result.length === 1) {\n\t\tconst [item] = result;\n\t\tif (item?.children?.length) {\n\t\t\treturn item.children;\n\t\t}\n\t}\n\treturn result;\n}\n/**\n * @template T\n * @overload\n * @param {Map<string, Map<string, T>>} map \n * @param {T} value \n * @param {string} key1\n * @param {string} key2\n * @returns {void}\n */\n/**\n * \n * @param {Map<any, any>} map \n * @param {*} value \n * @param {...any} keys \n */\nfunction setMapValue(map, value, ...keys) {\n\tlet m = map;\n\tconst last = keys.pop();\n\tfor (const key of keys) {\n\t\tlet map = m.get(key);\n\t\tif (!map) {\n\t\t\tmap = new Map();\n\t\t\tm.set(key, map);\n\t\t}\n\t\tm = map;\n\t}\n\tm.set(last, value);\n}\n\n/**\n * \n * @param {Menu.Define[]} menus \n * @param {string} groupType \n * @param {string} group \n * @param {Menu.Button[]} [buttons]\n * @returns {(Menu | null)[]}\n */\nfunction buildMenu(menus, groupType, group, buttons) {\n\t/** @type {Map<string, Map<string, (Menu | null)[]>>} */\n\tconst menuGroups = new Map();\n\t/** @type {Map<string, Map<string, Menu.Button[]>>} */\n\tconst buttonGroups = new Map();\n\tfor (const [groupType, v] of Map.groupBy(menus, m => m.groupType || '').entries()) {\n\t\tfor (const [group, list] of Map.groupBy(v, m => m.group || '').entries()) {\n\t\t\t/** @type {Menu.Button[]} */\n\t\t\tconst buttons = [];\n\t\t\tconst menu = fromDefine(list, buttons);\n\t\t\tsetMapValue(buttonGroups, buttons, groupType, group);\n\t\t\tsetMapValue(menuGroups, menu, groupType, group);\n\t\t}\n\t}\n\t/** @type {Map<string, Map<string, (Menu | null)[]>>} */\n\tconst allMenuTypes = new Map();\n\t/** @type {Map<string, Map<string, Menu.Button[]>>} */\n\tconst allButtonTypes = new Map();\n\t/**\n\t * \n\t * @param {Menu.Button[]} buttons \n\t */\n\tfunction runButton(buttons) {\n\t\tfor (let i = buttons.length - 1; i >= 0; i--) {\n\t\t\tconst menu = buttons[i];\n\t\t\tconst { refType, refId } = menu;\n\t\t\tif (!refType || !refId) { continue; }\n\t\t\tclear(menu, actionProps);\n\t\t\tconst subButtons = allButtonTypes.get(refType)?.get(refId);\n\t\t\tbuttons.splice(i, 1, ...subButtons || []);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t */\n\tfunction runMenu(menus) {\n\t\tfor (let i = menus.length - 1; i >= 0; i--) {\n\t\t\tconst menu = menus[i];\n\t\t\tif (!menu) { continue; }\n\t\t\tif (menu.children?.length) {\n\t\t\t\trunMenu(menu.children);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst { refType, refId, refMode } = menu;\n\t\t\tif (!refType || !refId) { continue; }\n\t\t\tclear(menu, actionProps);\n\t\t\tconst subMenus = allMenuTypes.get(refType)?.get(refId);\n\t\t\tconst subButtons = allButtonTypes.get(refType)?.get(refId);\n\t\t\tif (!subMenus?.length && !subButtons?.length) {\n\t\t\t\tmenus.splice(i, 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (refMode === 'replace') {\n\t\t\t\tmenus.splice(i, 1, ...subMenus || []);\n\t\t\t} else {\n\t\t\t\tmenu.children = subMenus || [];\n\t\t\t\tmenu.buttons = subButtons || [];\n\t\t\t}\n\t\t}\n\t}\n\tconst types = ['builtin', 'module', 'group'];\n\tfor (const type of types) {\n\t\tconst menus = menuGroups.get(type);\n\t\tif (menus) {\n\t\t\tfor (const list of menus.values()) {\n\t\t\t\trunMenu(list);\n\t\t\t}\n\t\t\tallMenuTypes.set(type, menus);\n\t\t}\n\t\tconst buttons = buttonGroups.get(type);\n\t\tif (buttons) {\n\t\t\tfor (const list of buttons.values()) {\n\t\t\t\trunButton(list);\n\t\t\t}\n\t\t\tallButtonTypes.set(type, buttons);\n\t\t}\n\t\tmenuGroups.delete(type);\n\t\tbuttonGroups.delete(type);\n\t}\n\tfor (const t of menuGroups.values()) {\n\t\tfor (const menus of t.values()) {\n\t\t\trunMenu(menus);\n\t\t}\n\t}\n\tfor (const t of buttonGroups.values()) {\n\t\tfor (const list of t.values()) {\n\t\t\trunButton(list);\n\t\t}\n\t}\n\tfor (const [k, v] of buttonGroups.entries()) {\n\t\tallButtonTypes.set(k, v);\n\t}\n\tfor (const [k, v] of menuGroups.entries()) {\n\t\tallMenuTypes.set(k, v);\n\t}\n\tif (buttons) {\n\t\tfor (const button of allButtonTypes.get(groupType)?.get(group) || []) {\n\t\t\tbuttons.push(button);\n\t\t}\n\t}\n\treturn allMenuTypes.get(groupType)?.get(group) || [];\n}\n\n\nexport const Menu = {\n\t/**\n\t * @param {Menu.Define[]} list \n\t * @param {Menu.Button[]} [buttons] \n\t * @returns {(Menu | null)[]}\n\t */\n\tfromDefine(list, buttons) { return fromDefine(list, buttons); },\n\t/**\n\t * \n\t * @param {Menu.Define[]} menus \n\t * @param {string} groupType \n\t * @param {string} group \n\t * @param {Menu.Button[]} [buttons]\n\t * @returns {(Menu | null)[]}\n\t */\n\tbuild(menus, groupType, group, buttons) {\n\t\treturn buildMenu(menus, groupType, group, buttons);\n\t},\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t * @param {(menu: Menu) => boolean} [filter] \n\t * @param {boolean?} [expandSingle] \n\t */\n\tfilter(menus, filter, expandSingle) {\n\t\tconst result = filterMenu(menus, filter, expandSingle);\n\t\t/** @type {(Menu | null)[]} */\n\t\tconst list = [];\n\t\tlet divider = false;\n\t\tfor (const r of result) {\n\t\t\tif (r) {\n\t\t\t\tif (divider) {\n\t\t\t\t\tlist.push(null);\n\t\t\t\t}\n\t\t\t\tdivider = false;\n\t\t\t\tlist.push(r);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!list.length) { continue; }\n\t\t\tdivider = true;\n\t\t}\n\t\treturn list;\n\t},\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t * @param {Menu?} button \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns {Element?}\n\t */\n\tcreateButton(menus, button, options) {\n\t\tconst create = options?.create || createMenuItem;\n\t\tconst signal = options?.signal || createNeverAbortedSignal();\n\t\tconst disabled = options?.disabled || (() => false);\n\t\tconst click = options?.click || (() => { });\n\t\tconst uri = options?.uri || (() => null);\n\t\tconst commands = options?.commands || {};\n\t\treturn createMenuButton(menus, button, {\n\t\t\tsignal, disabled, click, uri, commands,\n\t\t\tcreate: (menu, {signal: mSignal, ...options} = {}) => create(menu, {\n\t\t\t\tsignal: mSignal ? AbortSignal.any([mSignal, signal]) : signal,\n\t\t\t\tbutton: Boolean(options?.button),\n\t\t\t\tdisabled: options?.disabled || disabled,\n\t\t\t\tclick: options?.click || click,\n\t\t\t\turi: options?.uri || uri,\n\t\t\t\tcommands: options?.commands || commands,\n\t\t\t}),\n\t\t});\n\t},\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns {Element?}\n\t */\n\tcreateButtons(menus, options) {\n\t\tconst create = options?.create || createMenuItem;\n\t\tconst signal = options?.signal || createNeverAbortedSignal();\n\t\tconst disabled = options?.disabled || (() => false);\n\t\tconst click = options?.click || (() => { });\n\t\tconst uri = options?.uri || (() => null);\n\t\tconst commands = options?.commands || {};\n\t\treturn createMenuButtons(menus, {\n\t\t\tsignal, disabled, click, uri, commands,\n\t\t\tcreate: (menu, {signal: mSignal, ...options} = {}) => create(menu, {\n\t\t\t\tsignal: mSignal ? AbortSignal.any([mSignal, signal]) : signal,\n\t\t\t\tbutton: Boolean(options?.button),\n\t\t\t\tdisabled: options?.disabled || disabled,\n\t\t\t\tclick: options?.click || click,\n\t\t\t\turi: options?.uri || uri,\n\t\t\t\tcommands: options?.commands || commands,\n\t\t\t}),\n\t\t});\n\t},\n\t/**\n\t * \n\t * @param {Menu} menu \n\t * @param {{[k in keyof Menu.Renderer.Options]?: Menu.Renderer.Options[k] | null}?} [options] \n\t */\n\tcreateItem(menu, options) {\n\t\treturn createMenuItem(menu, {\n\t\t\tsignal: options?.signal || createNeverAbortedSignal(),\n\t\t\tbutton: Boolean(options?.button),\n\t\t\tdisabled: options?.disabled || (() => false),\n\t\t\tclick: options?.click || (() => { }),\n\t\t\turi: options?.uri || (() => null),\n\t\t\tcommands: options?.commands || {},\n\t\t});\n\t},\n};\n","import GeneralContext from '../GeneralContext.mjs';\nimport { Menu } from '../Menu.mjs';\n\n\n\nexport class ModalHeader extends GeneralContext {\n\t#root;\n\t#container = document.createElement('div');\n\t#menu = document.createElement('div');\n\t#buttons = document.createElement('div');\n\tget container() { return this.#container; }\n\tget buttons() { return this.#buttons; }\n\t#destroyMenu = () => { };\n\t/**\n\t * \n\t * @param {*} menus \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns \n\t */\n\tsetMenu(menus, options) {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#destroyMenu();\n\t\tconst menuContainer = this.#menu;\n\t\tconst ac = new AbortController();\n\t\tconst menu = Menu.createButtons(menus, {\n\t\t\t...options,\n\t\t\tsignal: AbortSignal.any([ac.signal, this.signal]),\n\t\t});\n\t\tif (menu) { menuContainer.appendChild(menu); }\n\t\tthis.#destroyMenu = () => { ac.abort(); menu?.remove(); this.#destroyMenu = () => { }; };\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} root \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tconstructor(root, signal) {\n\t\tsuper(signal);\n\t\tthis.#root = root;\n\t\tconst container = root.appendChild(this.#container);\n\t\tconst menu = root.appendChild(this.#menu);\n\t\tconst buttons = root.appendChild(this.#buttons);\n\t\troot.className = 'Modal-header';\n\t\tcontainer.className = 'Modal-header-main';\n\t\tmenu.className = 'Modal-header-menu';\n\t\tbuttons.className = 'Modal-header-buttons';\n\t}\n}\n","import GeneralContext from '../GeneralContext.mjs';\nimport { ModalFooter } from './ModalFooter.mjs';\nimport { ModalHeader } from './ModalHeader.mjs';\nexport class Modal extends GeneralContext {\n\t#dialog = document.createElement('dialog');\n\tget returnValue() { return this.#dialog.returnValue; }\n\t#ac;\n\t#body = this.#dialog.appendChild(document.createElement('div'));\n\t#bodyMain = this.#body.appendChild(document.createElement('div'));\n\t/** @type {boolean | (() => boolean)} */\n\t#cancelable = true;\n\t/**\n\t * @param {object} [options] \n\t * @param {AbortSignal?} [options.signal] \n\t * @param {HTMLElement} [options.parent] \n\t * @param {boolean} [options.wide] \n\t * @param {boolean} [options.inlineContainer] \n\t * @param {boolean | (() => boolean)} [options.cancelable] \n\t */\n\tconstructor(options) {\n\t\tconst { signal, parent, wide, inlineContainer, cancelable } = options || {};\n\t\tconst ac = new AbortController();\n\t\tsuper(\n\t\t\tsignal instanceof AbortSignal\n\t\t\t\t? AbortSignal.any([signal, ac.signal])\n\t\t\t\t: ac.signal,\n\t\t);\n\t\tconst dialog = (parent || document.body).appendChild(this.#dialog);\n\t\tthis.#ac = ac;\n\t\tdialog.addEventListener('cancel', e => {\n\t\t\tif (e.defaultPrevented) { return; }\n\t\t\tconst cancelable = this.#cancelable;\n\t\t\tif (cancelable === true || typeof cancelable === 'function' && cancelable()) { return; }\n\t\t\te.preventDefault();\n\t\t});\n\t\tdialog.addEventListener('close', () => { ac.abort(); dialog.remove(); }, { once: true });\n\t\tthis.signal.addEventListener('abort', () => { dialog.close(); }, { once: true });\n\t\tdialog.className = 'Modal';\n\t\tthis.#body.className = 'Modal-body';\n\t\tthis.#bodyMain.className = 'Modal-body-main';\n\t\tdialog.showModal();\n\t\tif (wide) { this.wide = true; }\n\t\tif (inlineContainer) { this.inlineContainer = true; }\n\t\tif (cancelable || typeof cancelable === 'boolean') { this.cancelable = cancelable; }\n\t}\n\tget wide() { return this.#dialog.classList.contains('modal-size-wide'); }\n\tset wide(wide) {\n\t\tif (wide) {\n\t\t\tthis.#dialog.classList.add('modal-size-wide');\n\t\t} else {\n\t\t\tthis.#dialog.classList.remove('modal-size-wide');\n\t\t}\n\t}\n\tget inlineContainer() { return this.#bodyMain.classList.contains('modal-container'); }\n\tset inlineContainer(inlineContainer) {\n\t\tif (inlineContainer) {\n\t\t\tthis.#bodyMain.classList.add('modal-container');\n\t\t} else {\n\t\t\tthis.#bodyMain.classList.remove('modal-container');\n\t\t}\n\t}\n\tget cancelable() { return this.#cancelable; }\n\tset cancelable(cancelable) { this.#cancelable = cancelable; }\n\tget size() { return this.#dialog.style.inlineSize; }\n\tset size(size) { this.#dialog.style.inlineSize = size; }\n\tget maxSize() { return this.#dialog.style.maxInlineSize; }\n\tset maxSize(size) { this.#dialog.style.maxInlineSize = size; }\n\tget minSize() { return this.#dialog.style.minInlineSize; }\n\tset minSize(size) { this.#dialog.style.minInlineSize = size; }\n\tget container() { return this.#bodyMain; }\n\tclose() { this.#ac.abort(); }\n\t/**\n\t * @template T\n\t * @param {(dialog: this) => PromiseLike<T> | T} exec\n\t * @returns {Promise<T>}\n\t */\n\tasync do(exec) {\n\t\tthis.signal.throwIfAborted();\n\t\ttry {\n\t\t\treturn await Promise.race([\n\t\t\t\texec(this),\n\t\t\t\tthis.waitDestroy(true),\n\t\t\t]);\n\t\t} finally {\n\t\t\tthis.#ac.abort();\n\t\t}\n\t}\n\n\t/** @type {ModalHeader?} */\n\t#header = null;\n\t/** @type {AbortController?} */\n\t#headerAbortController = null;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateHeader(signal) {\n\t\tthis.signal.throwIfAborted();\n\t\tif (signal?.aborted) {\n\t\t\tconst headerAbortController = this.#headerAbortController;\n\t\t\tif (headerAbortController) {\n\t\t\t\theaderAbortController.abort(signal.reason);\n\t\t\t}\n\t\t\tsignal.throwIfAborted();\n\t\t}\n\t\tif (this.#header) { return this.#header; }\n\t\tconst root = document.createElement('div');\n\t\tconst abortController = new AbortController();\n\t\tthis.#dialog.insertBefore(root, this.#body);\n\t\tthis.#headerAbortController = abortController;\n\t\tconst header = new ModalHeader(root, AbortSignal.any([\n\t\t\tthis.signal,\n\t\t\tabortController.signal,\n\t\t\t...signal ? [signal] : [],\n\t\t]));\n\t\tthis.#header = header;\n\t\theader.signal.addEventListener('abort', () => {\n\t\t\tthis.#headerAbortController = null;\n\t\t\tthis.#header = null;\n\t\t\troot.remove();\n\t\t}, { once: true });\n\t\treturn this.#header;\n\t}\n\t/** @type {ModalFooter?} */\n\t#footer = null;\n\t/** @type {AbortController?} */\n\t#footAbortController = null;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateFooter(signal) {\n\t\tthis.signal.throwIfAborted();\n\t\tif (signal?.aborted) {\n\t\t\tconst footAbortController = this.#footAbortController;\n\t\t\tif (footAbortController) {\n\t\t\t\tfootAbortController.abort(signal.reason);\n\t\t\t}\n\t\t\tsignal.throwIfAborted();\n\t\t}\n\t\tif (this.#footer) { return this.#footer; }\n\t\tconst root = document.createElement('div');\n\t\tconst abortController = new AbortController();\n\t\tthis.#dialog.appendChild(root);\n\t\tthis.#footAbortController = abortController;\n\t\tconst footer = new ModalFooter(root, AbortSignal.any([\n\t\t\tthis.signal,\n\t\t\tabortController.signal,\n\t\t\t...signal ? [signal] : [],\n\t\t]));\n\t\tthis.#footer = footer;\n\n\t\tfooter.signal.addEventListener('abort', () => {\n\t\t\tthis.#footAbortController = null;\n\t\t\tthis.#footer = null;\n\t\t\troot.remove();\n\t\t}, { once: true });\n\t\treturn this.#footer;\n\t}\n}\n","import { Modal } from './Modal.mjs';\n\n/**\n * @template T\n * @overload\n * @param {(modal: Modal) => PromiseLike<T> | T} exec\n * @param {object} [options] \n * @param {AbortSignal} [options.signal] \n * @param {HTMLElement} [options.parent] \n * @returns {Promise<T>}\n */\n/**\n * @overload\n * @param {object} [options] \n * @param {AbortSignal} [options.signal] \n * @param {HTMLElement} [options.parent] \n * @returns {Modal}\n */\n\n\n/**\n * \n * @template T\n * @param {any} [p1]\n * @param {any} [p2] \n */\nexport function createModal(p1, p2) {\n\tconst options = [p1, p2].find(v => v && typeof v === 'object');\n\tconst modal = new Modal(options);\n\t/** @type {((modal: Modal) => PromiseLike<T> | T)?} */\n\tconst exec = [p1, p2].find(v => typeof v === 'function') || null;\n\tif (typeof exec !== 'function') { return modal; }\n\treturn modal.do(exec);\n}\n","import { Modal } from './Modal.mjs';\n\n/**\n * @template T\n * @template R\n * @param {T[]} list \n * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n * @param {object} [options] \n * @param {AbortSignal} [options.signal] \n * @param {HTMLElement} [options.parent] \n * @param {boolean} [options.abortable] \n * @param {string} [options.label] \n * @param {string} [options.title] \n */\nexport async function createProgressModal(list, exec, options) {\n\tconst modal = new Modal(options);\n\tconst abortable = Boolean(options?.abortable);\n\tmodal.cancelable = abortable;\n\tconst container = modal.container;\n\tconst progressContainer = container.appendChild(document.createElement('div'));\n\tconst progress = progressContainer.appendChild(document.createElement('progress'));\n\tprogress.max = list.length;\n\tconst span = progressContainer.appendChild(document.createElement('span'));\n\tspan.style.paddingInline = '8px';\n\tconst signal = modal.signal;\n\tif (abortable) {\n\t\tconst button = container.appendChild(document.createElement('button'));\n\t\tbutton.appendChild(document.createTextNode(options?.label || '中止'));\n\t\tbutton.addEventListener('click', () => modal.close());\n\t\tbutton.style.inlineSize = '100%';\n\t}\n\tprogress.value = 0;\n\tspan.innerText = `${progress.value}/${progress.max}`;\n\tconst title = options?.title;\n\tif (title) {\n\t\tmodal.createHeader().container.appendChild(document.createTextNode(title));\n\t}\n\t/** @type {PromiseSettledResult<R>[]} */\n\tconst results = [];\n\tfor (const s of list) {\n\t\tif (signal.aborted) { break; }\n\t\tresults.push(await Promise.resolve().then(() => exec(s, signal)).then(\n\t\t\tvalue => ({ status: 'fulfilled', value }),\n\t\t\treason => ({ status: 'rejected', reason }),\n\t\t));\n\t\tprogress.value++;\n\t\tspan.innerText = `${progress.value}/${progress.max}`;\n\t}\n\tmodal.close();\n\treturn results;\n}\n","/** @import { Store, StoreLayout } from '@neeloong/form' */\n/** @import { State } from '../signal.mts' */\n/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\n/** @import { Modal } from './Modal.mjs' */\n\nimport { renderForm } from '../form/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { createComputed, createState } from '../signal.mts';\nimport { effect } from '../signal.mts';\n\n\n/**\n * @template [T=unknown]\n * @typedef {object} Guide.PageForm\n * @property {''?} [type]\n * @property {string | ((store: Store, state: State<T | undefined>) => string)} label\n * @property {(store: Store, state: State<T | undefined>) => boolean} [hidden]\n * @property {(store: Store, state: State<T | undefined>) => boolean} [disabled]\n * @property {StoreLayout<any>?} [layout] 表单布局\n * @property {boolean} [editable]\n * @property {boolean} [enableLink]\n * @property {string} [layoutType]\n */\n\n/**\n * \n * @template T\n * @param {Store} store \n * @param {HTMLElement} el \n * @param {Guide.PageForm<T>} page \n * @param {AbortSignal} signal\n * @param {ModelScriptConfiguration?} [model] \n */\nfunction renderPage(store, el, page, signal, model) {\n\trenderForm(store, el, {\n\t\tsignal,\n\t\tmodel,\n\t\ttype: page.layoutType,\n\t\tlayout: page.layout,\n\t\teditable: page.editable,\n\t\tenableLink: page.enableLink,\n\t});\n\n}\n\n/**\n * @typedef {object} Guide.Page\n * @property {string} label\n * @property {boolean} disabled\n * @property {boolean} hidden\n * @property {boolean} current\n * @property {number} index\n * @property {(force?: boolean) => void} switch\n */\n/**\n * @template T\n */\nexport class Guide extends GeneralContext {\n\t#store;\n\tget store() { return this.#store; }\n\t/** @type {State<T|undefined>} */\n\t#state = createState();\n\tget state() { return this.#state; }\n\t#root = document.createElement('div');\n\tget content() { return this.#root; }\n\t/** @type {PromiseWithResolvers<void>} */\n\t#promiseWithResolvers = Promise.withResolvers();\n\t#promise = this.#promiseWithResolvers.promise;\n\t#resolve = this.#promiseWithResolvers.resolve;\n\t#reject = this.#promiseWithResolvers.reject;\n\n\t#ac;\n\t#index = createState(-1);\n\tget index() { return this.#index.get(); }\n\t/** @type {State<boolean>?} */\n\t#cancelable;\n\tget cancelable() {\n\t\tconst cancelable = this.#cancelable;\n\t\tif (!cancelable) { return null; }\n\t\treturn cancelable.get();\n\t}\n\t#title;\n\tget title() {\n\t\tconst title = this.#title;\n\t\tif (!title) { return null; }\n\t\treturn title.get();\n\t}\n\t/** @type {Guide.Page[]} */\n\t#pages = [];\n\tget pages() { return [...this.#pages]; }\n\n\t#currentPage = createComputed(() => this.#pages[this.#index.get()] || null);\n\tget current() { return this.#currentPage.get(); }\n\t#prevPage = createComputed(() => {\n\t\tconst pages = this.#pages;\n\t\tfor (let index = this.#index.get() - 1; index >= 0; index--) {\n\t\t\tconst page = pages[index];\n\t\t\tif (!page.hidden && !page.disabled) { return page; }\n\t\t}\n\t\treturn null;\n\t});\n\tget prev() { return this.#prevPage.get(); }\n\t#nextPage = createComputed(() => {\n\t\tconst pages = this.#pages;\n\t\tfor (let index = this.#index.get() + 1; index < pages.length; index++) {\n\t\t\tconst page = pages[index];\n\t\t\tif (!page.hidden && !page.disabled) { return page; }\n\t\t}\n\t\treturn null;\n\t});\n\tget next() { return this.#nextPage.get(); }\n\t/** @type {State<boolean>} */\n\t#completable;\n\tget completable() { return this.#completable.get(); }\n\n\n\tcomplete() {\n\t\tif (!this.#completable.get()) { return; }\n\t\tthis.#resolve();\n\t}\n\n\tcancel() {\n\t\tif (!this.#cancelable?.get()) { return; }\n\t\tthis.#ac.abort();\n\t}\n\t/**\n\t * @param {Store} store \n\t * @param {(Guide.PageForm<T>)[]} pages\n\t * @param {object} options \n\t * @param {((store: Store, state: State<T | undefined>) =>string) | string} [options.title] \n\t * @param {ModelScriptConfiguration?} [options.model] \n\t * @param {AbortSignal?} [options.signal] \n\t * @param {((store: Store, state: State<T | undefined>) => boolean) | boolean} [options.cancelable] \n\t * @param {(store: Store, state: State<T | undefined>) => boolean} [options.completable] \n\t */\n\tconstructor(store, pages, { model, cancelable, completable, title, signal: _signal }) {\n\t\tconst ac = new AbortController();\n\t\tsuper(_signal instanceof AbortSignal ? AbortSignal.any([\n\t\t\tac.signal, _signal,\n\t\t]) : ac.signal);\n\t\tthis.#ac = ac;\n\t\tconst signal = this.signal;\n\t\tif (signal.aborted) {\n\t\t\tthis.#reject(signal.reason);\n\t\t} else {\n\t\t\tsignal.addEventListener('abort', () => this.#reject(signal.reason), { once: true });\n\t\t}\n\n\t\tthis.#store = store;\n\t\tconst state = this.#state;\n\t\tthis.#title = typeof title === 'function'\n\t\t\t? createComputed(() => title(store, state))\n\t\t\t: typeof title === 'string' && title\n\t\t\t\t? createComputed(() => title)\n\t\t\t\t: null;\n\n\t\tthis.#cancelable = cancelable === true\n\t\t\t? createComputed(() => true)\n\t\t\t: typeof cancelable === 'function'\n\t\t\t\t? createComputed(() => cancelable(store, state))\n\t\t\t\t: null;\n\t\tthis.#completable = typeof completable === 'function'\n\t\t\t? createComputed(() => completable(store, state))\n\t\t\t: createComputed(() => true);\n\n\n\t\tconst currentIndex = this.#index;\n\t\tconst handlers = this.#pages;\n\t\tconst contentArea = this.#root;\n\t\tcontentArea.classList.add('Guide-content');\n\t\tlet hideCurrentPage = () => { };\n\t\tfor (const [index, page] of pages.entries()) {\n\t\t\tconst comment = document.createComment('');\n\t\t\tcontentArea.appendChild(comment);\n\t\t\tconst { hidden: hiddenFn, disabled: disabledFn, label: labelDef } = page;\n\t\t\tconst hidden = typeof hiddenFn === 'function'\n\t\t\t\t? createComputed(() => Boolean(hiddenFn(store, state)))\n\t\t\t\t: createComputed(() => false);\n\t\t\tconst disabled = typeof disabledFn === 'function'\n\t\t\t\t? createComputed(() => Boolean(disabledFn(store, state)))\n\t\t\t\t: createComputed(() => false);\n\t\t\tconst label = typeof labelDef === 'function'\n\t\t\t\t? createComputed(() => String(labelDef(store, state) ?? ''))\n\t\t\t\t: createComputed(() => String(labelDef ?? ''));\n\t\t\tconst current = createComputed(() => currentIndex.get() === index);\n\t\t\t/** @type {HTMLElement?} */\n\t\t\tlet container = null;\n\t\t\tfunction getContainer() {\n\t\t\t\tif (container) { return container; }\n\t\t\t\tconst el = document.createElement('div');\n\t\t\t\tcontainer = el;\n\t\t\t\tcomment.replaceWith(el);\n\t\t\t\trenderPage(store, el, page, signal, model);\n\t\t\t\treturn el;\n\t\t\t}\n\t\t\thandlers.push({\n\t\t\t\tget label() { return label.get(); },\n\t\t\t\tget hidden() { return hidden.get(); },\n\t\t\t\tget disabled() { return disabled.get(); },\n\t\t\t\tget index() { return index; },\n\t\t\t\tget current() { return current.get(); },\n\t\t\t\tswitch(force = false) {\n\t\t\t\t\tif (currentIndex.get() === index) { return; }\n\t\t\t\t\tif (!force && (hidden.get() || disabled.get())) { return; }\n\t\t\t\t\thideCurrentPage();\n\t\t\t\t\tcurrentIndex.set(index);\n\t\t\t\t\tconst el = getContainer();\n\t\t\t\t\tel.hidden = false;\n\t\t\t\t\thideCurrentPage = () => { el.hidden = true; };\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tconst page = handlers.find(v => !v.hidden && !v.disabled) || handlers.find(v => !v.hidden) || handlers[0];\n\t\tpage?.switch();\n\t}\n\t/**\n\t * @template [TResult1=void]\n\t * @template [TResult2=never]\n\t * @param {((value: void) => TResult1 | PromiseLike<TResult1>)?} [onfulfilled]\n\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected]\n\t * @returns {Promise<TResult1 | TResult2>};\n\t */\n\tthen(onfulfilled, onrejected) { return this.#promise.then(onfulfilled, onrejected); }\n\t/**\n\t * @template [TResult2=never]\n\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected]\n\t * @returns {Promise<void | TResult2>};\n\t */\n\tcatch(onrejected) { return this.#promise.catch(onrejected); }\n\t/**\n\t * @param {(() => void)?} [onfinally]\n\t * @returns {Promise<void>};\n\t */\n\tfinally(onfinally) { return this.#promise.finally(onfinally); }\n\t/**\n\t * @param {Modal} modal \n\t * @param {Store} store \n\t * @param {Guide.PageForm[]} pages \n\t * @param {object} [options]\n\t * @param {string} [options.title] \n\t * @param {ModelScriptConfiguration?} [options.model] \n\t * @param {((store: Store) => boolean) | boolean} [options.cancelable] \n\t * @param {(store: Store) => boolean} [options.completable] \n\t */\n\tstatic modal(modal, store, pages, options) {\n\t\tconst { signal } = modal;\n\t\tconst guide = new Guide(store, pages, { ...options, signal });\n\t\tmodal.cancelable = () => Boolean(guide.cancelable);\n\t\tmodal.wide = true;\n\t\tmodal.inlineContainer = true;\n\t\tif (guide.title !== null) {\n\t\t\tconst header = modal.createHeader();\n\t\t\tconst container = header.container;\n\t\t\teffect(() => container.textContent = guide.title || '', signal);\n\t\t}\n\n\t\tmodal.container.appendChild(guide.content).classList.add('Guide-content');\n\n\t\tconst buttonGroup = modal.createFooter().container;\n\t\tbuttonGroup.classList.add('Guide-buttons');\n\t\tbuttonGroup.appendChild(document.createElement('div')).style.flex = '1';\n\n\t\tif (guide.cancelable !== null) {\n\t\t\tconst cancelBtn = buttonGroup.appendChild(document.createElement('button'));\n\t\t\tcancelBtn.textContent = '取消';\n\t\t\tcancelBtn.classList.add('Guide-cancel');\n\t\t\tcancelBtn.addEventListener('click', () => { guide.cancel(); });\n\t\t\teffect(() => cancelBtn.disabled = !guide.cancelable, signal);\n\t\t}\n\n\t\tconst prevBtn = buttonGroup.appendChild(document.createElement('button'));\n\t\tprevBtn.textContent = '上一步';\n\t\tprevBtn.classList.add('Guide-prev');\n\t\tprevBtn.addEventListener('click', () => { guide.prev?.switch(); });\n\t\teffect(() => prevBtn.disabled = !guide.prev, signal);\n\n\t\tconst nextBtn = buttonGroup.appendChild(document.createElement('button'));\n\t\tnextBtn.textContent = '下一步';\n\t\tnextBtn.classList.add('Guide-next');\n\t\tnextBtn.addEventListener('click', () => { guide.next?.switch(); });\n\t\teffect(() => nextBtn.disabled = !guide.next, signal);\n\n\t\tconst completeBtn = buttonGroup.appendChild(document.createElement('button'));\n\t\tcompleteBtn.textContent = '完成';\n\t\tcompleteBtn.classList.add('Guide-complete');\n\t\tcompleteBtn.addEventListener('click', () => { guide.complete(); });\n\t\teffect(() => completeBtn.disabled = !guide.completable, signal);\n\t\treturn guide;\n\t}\n}\n","export { root } from './root.mjs';\nexport { setIcon } from './setIcon.mjs';\nexport { createModal } from './createModal.mjs';\nexport { createProgressModal } from './createProgressModal.mjs';\nexport { Modal } from './Modal.mjs';\nexport { ModalFooter } from './ModalFooter.mjs';\nexport { ModalHeader } from './ModalHeader.mjs';\nexport { Guide } from './Guide.mjs';\n\n\nexport const isMac = (() => {\n\t// @ts-ignore\n\tconst userAgentData = navigator.userAgentData;\n if (userAgentData?.platform) { return userAgentData.platform === 'macOS'; }\n const isMacUA = /macintosh|mac os x/i.test(navigator.userAgent.toLowerCase());\n\tif (isMacUA) { return true; }\n return navigator.platform.toLowerCase().includes('mac');\n})();\n","/** @import { Search } from '@yongdall/common' */\n/** @import { FieldScriptConfiguration, ModelScriptConfiguration } from '../services/model.mjs' */\n/** @import { FieldFilterStyle } from '../typesDefine.mjs' */\n\nimport { Modal } from '../dom/index.mjs';\nimport { createState, effect } from '../signal.mts';\nimport createFilter from './createFilter.mjs';\nimport { getFieldFilterOperators } from './field.mjs';\nimport { getFieldFilter } from './field.mjs';\n\n/**\n * \n * @param {Modal} modal \n * @param {ModelScriptConfiguration} modelDefine \n * @param {Search.AndItem[]?} [value] \n * @returns {Promise<Search.AndItem[]>}\n */\nexport async function showFilterDialog(modal, modelDefine, value) {\n\tconst signal = modal.signal;\n\tif (signal.aborted) { return Promise.reject(signal.reason); }\n\tconst { resolve, reject, promise } = Promise.withResolvers();\n\tconst fields = modelDefine.fields;\n\tconst values = Array.isArray(value) ? structuredClone(value) : [];\n\tconst fieldsMap = new Map(Object.entries(fields).filter(([, f]) => {\n\t\tconst type = f.type;\n\t\tif (!type || typeof type === 'object') { return false; }\n\t\treturn true;\n\t}));\n\tconst list = modal.container;\n\tconst footer = modal.createFooter().container;\n\tconst addItem = footer.appendChild(document.createElement('select'));\n\tconst okButton = footer.appendChild(document.createElement('button'));\n\tconst cancelButton = footer.appendChild(document.createElement('button'));\n\n\tfooter.classList.add(`MenuButtons`);\n\tfooter.style.display = 'flex';\n\n\n\tlist.classList.add(`FieldFilter-filters`);\n\tokButton.value = 'ok';\n\tokButton.appendChild(document.createTextNode('确认'));\n\tcancelButton.appendChild(document.createTextNode('取消'));\n\tokButton.addEventListener('click', () => resolve(values.filter(\n\t\t/** @type {(v: Search.AndItem?) => v is Search.AndItem} */(/** @type {any} */(Boolean)),\n\t)));\n\tcancelButton.addEventListener('click', () => reject());\n\n\n\n\n\tconst v = addItem.appendChild(document.createElement('option'));\n\tv.label = '<添加>';\n\tfor (const [name, f] of fieldsMap) {\n\t\tconst type = f.type;\n\t\tif (!type || typeof type === 'object') { continue; }\n\t\tconst option = document.createElement('option');\n\t\toption.value = name;\n\t\toption.label = f.label || name;\n\t\taddItem.appendChild(option);\n\t}\n\n\t/**\n\t * \n\t * @param {Search.AndItem} v\n\t * @param {string} fieldName\n\t * @param {FieldScriptConfiguration} field\n\t * @param {Search.Field[]} fields\n\t * @returns \n\t */\n\tfunction createLine(v, fieldName, field, fields) {\n\t\tconst ac = new AbortController();\n\t\tconst lineSignal = AbortSignal.any([signal, ac.signal]);\n\t\tconst line = list.appendChild(document.createElement('div'));\n\t\tline.classList.add(`FieldFilter-field`);\n\n\t\tconst fieldNameSelect = document.createElement('span');\n\t\tfieldNameSelect.classList.add(`FieldFilter-fieldName`);\n\t\tline.appendChild(fieldNameSelect);\n\t\tfieldNameSelect.appendChild(document.createTextNode(field.label || fieldName));\n\n\n\n\t\t/** @type {FieldFilterStyle} */\n\t\tconst style = { inline: true };\n\t\tconst operators = getFieldFilterOperators(field);\n\t\tconst root = document.createElement('span');\n\t\troot.classList.add(`FieldFilter-main`);\n\t\tconst operatorSelector = line.appendChild(document.createElement('select'));\n\t\toperatorSelector.classList.add(`FieldFilter-operator`);\n\n\t\tfor (const [value, label] of Object.entries(operators)) {\n\t\t\tconst option = document.createElement('option');\n\t\t\toption.value = value;\n\t\t\toption.label = label || value;\n\t\t\toperatorSelector.appendChild(option);\n\t\t}\n\n\t\tconst removeButton = document.createElement('button');\n\t\tremoveButton.classList.add(`FieldFilter-remove`);\n\t\tremoveButton.type = 'button';\n\t\tline.appendChild(removeButton);\n\t\tremoveButton.appendChild(document.createTextNode('移除'));\n\t\tremoveButton.addEventListener('click', () => {\n\t\t\tac.abort();\n\t\t\tconst index = [...list.children].indexOf(line);\n\t\t\tif (index < 0) { return; }\n\t\t\tline.remove();\n\t\t\tvalues.splice(index, 1);\n\n\t\t});\n\t\t/**\n\t\t * \n\t\t * @param {*} value \n\t\t * @param {string} operator \n\t\t * @returns \n\t\t */\n\t\tfunction find(value, operator) {\n\t\t\tconst index = [...list.children].indexOf(line);\n\t\t\tif (index < 0) { return -1; }\n\t\t\tconst item = values[index];\n\t\t\tif (!item) { return index; }\n\t\t\tif (Object.is(value, item[1])) { return index; }\n\t\t\tif (Object.is(operator, item[2])) { return index; }\n\t\t\treturn -1;\n\n\t\t}\n\n\n\t\tlet operator = v[2] || '';\n\t\toperatorSelector.value = operator;\n\t\t/** @type {any} */\n\t\tlet newValue = v[1];\n\t\tif (operatorSelector.value != operator) {\n\t\t\toperator = operatorSelector.value;\n\t\t\tnewValue = null;\n\t\t}\n\t\tconst state = createState(newValue);\n\t\tconst operatorState = createState(operator);\n\t\teffect(() => {\n\t\t\tconst value = state.get();\n\t\t\tconst operator = operatorState.get();\n\t\t\tconst index = find(value, operator);\n\t\t\tif (index < 0) { return; }\n\t\t\tvalues.splice(index, 1, [fields, value, operator]);\n\t\t}, lineSignal);\n\n\t\tlet currentComponent = getFieldFilter(field, operatorState.get());\n\n\t\tlet handleAbortController = new AbortController();\n\t\tlet currentHandle = createFilter(currentComponent, field, state, operatorState, style, AbortSignal.any([handleAbortController.signal, lineSignal]));\n\t\toperatorSelector.value = operatorState.get();\n\t\tlet handleRoot = line.insertBefore(currentHandle, removeButton);\n\t\thandleRoot.classList.add(`FieldFilter-value`);\n\n\n\t\toperatorSelector.addEventListener('input', () => {\n\t\t\tconst newOperator = operatorSelector.value;\n\t\t\tif (!(newOperator in operators)) {\n\t\t\t\t// TODO: 不存在此操作符\n\t\t\t}\n\t\t\tif (typeof newOperator !== 'string') { return; }\n\t\t\tconst component = getFieldFilter(field, newOperator);\n\t\t\tif (component === currentComponent) {\n\t\t\t\toperatorState.set(newOperator);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandleAbortController.abort();\n\t\t\thandleRoot.remove();\n\t\t\tcurrentComponent = component;\n\t\t\toperatorState.set(newOperator);\n\t\t\thandleAbortController = new AbortController();\n\t\t\tcurrentHandle = createFilter(currentComponent, field, state, operatorState, style, AbortSignal.any([handleAbortController.signal, lineSignal]));\n\t\t\thandleRoot = line.insertBefore(currentHandle, removeButton);\n\t\t\thandleRoot.classList.add(`FieldFilter-value`);\n\t\t});\n\t}\n\tfor (const v of values) {\n\n\t\tconst fields = v[0];\n\t\tconst fieldItem = fields.length === 1 && fields[0];\n\t\tconst fieldName = typeof fieldItem === 'string' ? fieldItem : Array.isArray(fieldItem) && fieldItem.length === 1 ? fieldItem[0] : '';\n\n\t\tconst field = fieldsMap.get(fieldName);\n\t\tif (!field) {\n\t\t\t// TODO: 添加占位符\n\t\t\tcontinue;\n\t\t}\n\t\tcreateLine(v, fieldName, field, fields);\n\t}\n\n\n\n\taddItem.addEventListener('change', () => {\n\t\tconst name = addItem.value;\n\t\taddItem.value = '';\n\t\tconst field = fieldsMap.get(name);\n\t\tif (!field) { return; }\n\t\tcreateLine([[name], '', ''], name, field, [[name]]);\n\t});\n\n\n\treturn modal.do(() => promise);\n\n\n}\n/**\n * \n * @param {ModelScriptConfiguration} modelDefine \n * @param {Search.AndItem[]?} [value] \n * @param {HTMLElement} [parent] \n * @param {AbortSignal} [signal] \n * @returns {Promise<Search.AndItem[]>}\n */\nexport default async function (modelDefine, value, parent, signal) {\n\treturn new Modal({ parent, signal }).do(modal => showFilterDialog(modal, modelDefine, value));\n}\n","/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\n\nimport { Modal } from '../dom/index.mjs';\nimport { createIcon } from '../index.mjs';\n\n/**\n * \n * @param {HTMLElement} root \n * @param {PointerEvent} event \n */\nfunction pointerdown(root, { pointerId }) {\n\troot.draggable = true;\n\t/** @param {PointerEvent} event */\n\tfunction pointerup(event) {\n\t\tif (event.pointerId !== pointerId) { return; }\n\t\tif (!root) { return; }\n\t\troot.draggable = false;\n\t\twindow.removeEventListener('pointerup', pointerup, { capture: true });\n\t\twindow.removeEventListener('pointercancel', pointerup, { capture: true });\n\t}\n\twindow.addEventListener('pointerup', pointerup, { capture: true });\n\twindow.addEventListener('pointercancel', pointerup, { capture: true });\n\n}\n\n\n/**\n * \n * @param {Modal} modal \n * @param {ModelScriptConfiguration} modelDefine \n * @param {[field: string, desc?: boolean][]?} [value] \n * @returns {Promise<[field: string, desc?: boolean][]>}\n */\nexport default async function showSortDialog(modal, modelDefine, value) {\n\tconst signal = modal.signal;\n\tif (signal.aborted) { return Promise.reject(signal.reason); }\n\t/** @typedef {{field: string, desc: boolean, el: HTMLElement}} Item */\n\n\t/** @type {Item[]} */\n\tconst values = [];\n\tconst list = modal.container;\n\tlist.classList.add(`FieldSorter`);\n\tconst footer = modal.createFooter().container;\n\tfooter.classList.add(`MenuButtons`);\n\tconst addItem = footer.appendChild(document.createElement('select'));\n\tfooter.style.display = 'flex';\n\n\n\n\n\n\tconst fieldsMap = new Map(Object.entries(modelDefine.fields).filter(([, f]) => {\n\t\tconst type = f.type;\n\t\tif (!type || typeof type === 'object') { return false; }\n\t\treturn true;\n\t}).map(([k, v]) => [k, v.label || k]));\n\n\tfunction updateSelectOptions() {\n\t\taddItem.innerHTML = '';\n\t\tconst v = addItem.appendChild(document.createElement('option'));\n\t\tv.label = '<添加>';\n\t\tconst added = new Set(values.map(v => v.field));\n\t\tfor (const [name, label] of fieldsMap) {\n\t\t\tif (added.has(name)) { continue; }\n\t\t\tconst option = document.createElement('option');\n\t\t\toption.value = name;\n\t\t\toption.label = label || name;\n\t\t\taddItem.appendChild(option);\n\t\t}\n\t}\n\n\t/** @type {Item?} */\n\tlet drag = null;\n\t/**\n\t * \n\t * @param {number | Item} from \n\t * @param {number | Item} to \n\t */\n\tfunction move(from, to) {\n\t\tconst source = typeof from === 'number' ? from : values.indexOf(from);\n\t\tif (source < 0) { return; }\n\t\tconst target = typeof to === 'number' ?\n\t\t\ttypeof from === 'number' ? to : source + to\n\t\t\t: values.indexOf(to);\n\t\tif (target < 0 || target >= values.length) { return; }\n\t\tif (source === target) { return; }\n\n\t\tconst sourceEl = typeof from === 'number' ? values[source]?.el : from.el;\n\t\tconst targetEl = typeof to === 'number' ? values[target]?.el : to.el;\n\t\tif (!sourceEl || !targetEl) { return; }\n\n\t\tvalues.splice(target, 0, ...values.splice(source, 1));\n\t\tlist.insertBefore(sourceEl, target < source ? targetEl : targetEl.nextSibling);\n\t}\n\tfunction dragend() {\n\t\tdrag = null;\n\t}\n\t/**\n\t * \n\t * @param {string} field \n\t * @param {boolean?} [desc] \n\t */\n\tfunction add(field, desc) {\n\t\tconst label = fieldsMap.get(field)\n\t\tif (!label) { return; }\n\t\tif (values.find(v => v.field === field)) { return; }\n\t\tconst el = document.createElement('div');\n\t\t/** @type {Item} */\n\t\tconst item = { field, desc: Boolean(desc), el };\n\t\tvalues.push(item);\n\t\tlist.appendChild(el);\n\n\t\tel.addEventListener('dragenter', () => {\n\t\t\tif (!drag) { return; }\n\t\t\tmove(drag, item);\n\t\t});\n\t\tel.addEventListener('dragstart', (event) => {\n\t\t\tif (event.target !== event.currentTarget) { return; }\n\t\t\tdrag = item;\n\t\t});\n\t\tel.addEventListener('dragend', dragend);\n\n\n\n\t\tconst del = el.appendChild(document.createElement('button'));\n\t\tdel.addEventListener('click', () => {\n\t\t\tconst index = values.indexOf(item);\n\t\t\tif (index < 0) { return; }\n\t\t\tvalues.splice(index, 1);\n\t\t\titem.el.remove();\n\t\t\tupdateSelectOptions();\n\t\t});\n\t\tdel.title = '移除';\n\t\tdel.appendChild(createIcon('delete'));\n\n\n\t\tconst moveUp = el.appendChild(document.createElement('button'));\n\t\tmoveUp.addEventListener('click', () => { move(item, -1); });\n\t\tmoveUp.title = '上移';\n\t\tmoveUp.appendChild(createIcon('up'));\n\t\tconst moveDown = el.appendChild(document.createElement('button'));\n\t\tmoveDown.addEventListener('click', () => { move(item, 1); });\n\t\tmoveDown.title = '下移';\n\t\tmoveDown.appendChild(createIcon('down'));\n\t\tdel.classList.add('icon');\n\t\tmoveUp.classList.add('icon');\n\t\tmoveDown.classList.add('icon');\n\n\n\n\t\tconst span = el.appendChild(document.createElement('span'));\n\t\tspan.textContent = label;\n\t\tspan.classList.add('FieldSorter-label');\n\t\tspan.addEventListener('pointerdown', e => pointerdown(el, e));\n\n\n\t\tconst sort = el.appendChild(document.createElement('button'));\n\t\tfunction updateSortIcon() {\n\t\t\tsort.innerHTML = '';\n\t\t\tsort.appendChild(createIcon(item.desc ? 'sortDesc' : 'sortAsc'));\n\t\t}\n\t\tsort.addEventListener('click', () => {\n\t\t\titem.desc = !item.desc;\n\t\t\tupdateSortIcon();\n\t\t});\n\t\tupdateSortIcon();\n\t\tsort.title = '排序';\n\n\t}\n\n\n\n\n\tfor (const v of value || []) {\n\t\tif (!v) { continue; }\n\t\tadd(v[0], v[1]);\n\t}\n\tupdateSelectOptions();\n\n\n\n\taddItem.addEventListener('change', () => {\n\t\tconst name = addItem.value;\n\t\taddItem.value = '';\n\t\tadd(name, false);\n\t\tupdateSelectOptions();\n\t});\n\n\n\t/** @type {PromiseWithResolvers<[field: string, desc?: boolean][]>} */\n\tconst { resolve, reject, promise } = Promise.withResolvers();\n\tconst okButton = footer.appendChild(document.createElement('button'));\n\tconst cancelButton = footer.appendChild(document.createElement('button'));\n\tokButton.value = 'ok';\n\tokButton.appendChild(document.createTextNode('确认'));\n\tcancelButton.appendChild(document.createTextNode('取消'));\n\tokButton.addEventListener('click', () => resolve(values.map(v => [v.field, v.desc])));\n\tcancelButton.addEventListener('click', () => reject());\n\treturn promise;\n\n}\n","\n/**\n * \n * @param {string?} script \n * @param {Record<string, unknown>} scope \n * @returns {unknown}\n */\nexport function execScript(script, scope) {\n\t\tif (!script || typeof script !== 'string') { return null }\n\t\tconst s = script.slice(0,2);\n\t\tlet type = '';\n\t\tif (s === '#!' || s === '#?') {\n\t\t\tconst index = s.indexOf('\\n');\n\t\t\tif (index < 0) { return null }\n\t\t\ttype = script.slice(0, index);\n\t\t\tscript = script.slice(index + 1);\n\t\t}\n\t\t// TODO: 根据类型执行\n\t\treturn null\n}\n","/** @import DotRequest from 'dot-request' */\n/** @import { Field, PageForm } from '@yongdall/types' */\nimport { Search } from '@yongdall/common';\nimport { Menu } from '../Menu.mjs';\nimport request from '../request.mjs';\nimport { ResponseError } from '../ResponseError.mjs';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport toPromiseInterface from './toPromiseInterface.mjs';\nimport { Application } from './application.mts';\n\n/**\n * @typedef {object} PageConfiguration\n * @property {string} [id]\n * @property {string} [model]\n * @property {string} [user]\n * @property {string} [organization]\n * @property {string} [workspace]\n * @property {string} [page]\n * @property {string} [url]\n * @property {string} [hiddenFilter]\n * @property {string?} [widget]\n * \n * @property {string} [title]\n * @property {string} [titlePattern]\n * @property {Record<string, any>} [config]\n * @property {Field.Show[]} [fields]\n * @property {{widget: string; options: string}[]} [sides]\n * @property {Menu.Button[]} [menuButtons]\n * @property {(Menu | null)[]} [menus]\n * @property {Record<string, PageForm?>} [forms]\n * @property {Search.AndList} [where]\n * @property {Search.OrList} [orWhere]\n * @property {[field: string, desc?: boolean][]} [sort]\n * @property {number} [limit]\n * @property {string} [defaultQuery]\n * @property {{ field: string; label?: string; operator: string; }[]} [filters]\n * \n * \n * // TODO: 是否分页\n * \n */\n\n/**\n * @typedef {object} PageParam\n * @property {string?} [model]\n * @property {string?} [organization] \n * @property {string?} [user] \n * @property {string?} [workspace]\n * @property {string} type \n */\n\nconst pages = createPromisesAndStates(async (\n\t/** @type {DotRequest} */req\n) => {\n\tconst result = await req.result().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\tif (!result || typeof result !== 'object') { return null; }\n\n\t/** @type {Menu.Button[]} */\n\tconst menuButtons = [];\n\tconst menus = Menu.fromDefine(result.menus || [], menuButtons);\n\tconst { where, orWhere, sort, limit } = Search.parse(result.hiddenFilter || '');\n\t/** @type {PageConfiguration} */\n\tconst page = {\n\t\t...result,\n\t\twhere,\n\t\torWhere,\n\t\tsort,\n\t\tlimit,\n\t\tmenuButtons,\n\t\tmenus,\n\t\tforms: Object.fromEntries(result.forms?.map((/** @type {{ type: any; }} */ v) => [v.type, v]) || []),\n\t};\n\treturn page;\n}, null);\n/**\n * \n * @param {PageParam} page \n * @returns \n */\nexport function pageService({\n\tmodel, organization, user, workspace, type,\n}) {\n\tlet pageReq = request.clone().path`page`;\n\tif (model) { pageReq = pageReq.query({ model }); }\n\tif (organization) { pageReq = pageReq.query({ organization }); }\n\tif (user) { pageReq = pageReq.query({ user }); }\n\tif (workspace) { pageReq = pageReq.query({ workspace }); }\n\tconst applicationId = Application.id;\n\tif (applicationId) { pageReq = pageReq.query({ application: applicationId }); }\n\tpageReq = pageReq.query({ type });\n\tconst key = [\n\t\tmodel,\n\t\torganization,\n\t\tuser,\n\t\tworkspace,\n\t\ttype,\n\t\tapplicationId,\n\t].map(v => v || '').join('\\n');\n\tconst { get: getPage, load: loadPage } = pages.create(key, pageReq);\n\n\n\treturn {\n\t\tloadPage,\n\t\tgetPage,\n\t\tloadConfiguration() {\n\t\t\treturn loadPage().then((v) => typeof v === 'object' && v?.config);\n\t\t},\n\t\t...toPromiseInterface(loadPage),\n\t};\n\n}\n","/** @import { PageConfiguration } from '../services/page.mjs' */\n/** @import { PageRenderer } from './index.mjs' */\n/** @import { PageIdent } from './route.mjs' */\n\nimport { allHooks } from '../allHooks.mjs';\nimport { importWidget } from '../import.mjs';\nimport { ResponseError } from '../ResponseError.mjs';\nimport { Application, modelService } from '../services/index.mjs';\nimport { pageService } from '../services/page.mjs';\nimport { createComputed } from '../signal.mts';\n\n/** @typedef {() => PageRenderer | null | undefined | PromiseLike<PageRenderer | null | undefined>} PageRendererLoader */\n\nconst uriConverters = createComputed(() => allHooks.get('uriConverters').named());\n/**\n * \n * @param {string} uri \n */\nasync function convertURI(uri) {\n\tif (uri[0] === '.') { return uri; }\n\tconst u = uri.slice(0, 6).toLowerCase();\n\tif (u.startsWith('http:') || u.startsWith('https:')) { return uri; }\n\tconst type = uri.split(':', 1)[0].split('+', 1)[0];\n\tconst converters = uriConverters.get();\n\tconst converter = Object.hasOwn(converters, type) && converters[type];\n\tif (typeof converter !== 'function') { return uri; }\n\tconst url = await converter(uri);\n\treturn typeof url === 'string' && url || uri;\n}\n/**\n * \n * @param {PageIdent.Model} modelIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent.Model; page: PageConfiguration? }>}\n */\nasync function getModel(modelIdent) {\n\tconst { model, id, workspace, setting, edit, input, continuation } = modelIdent;\n\tif (continuation) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\tif (setting) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\t/** @type {PageIdent.Model} */\n\tconst ident = {\n\t\ttype: 'model',\n\t\tmodel,\n\t\tworkspace,\n\t\tid: '',\n\t\tinput: '',\n\t\tedit: false,\n\t};\n\t/** @type {'model' | 'modelCopy' | 'modelEdit' | 'modelDetails' | 'modelInput'} */\n\tlet type = 'model';\n\tif (id) {\n\t\tident.id = id;\n\t\tif (input) {\n\t\t\tident.input = input;\n\t\t\ttype = 'modelCopy';\n\t\t} else if (edit) {\n\t\t\tident.edit = true;\n\t\t\ttype = 'modelEdit';\n\t\t} else {\n\t\t\ttype = 'modelDetails';\n\t\t}\n\t} else if (input) {\n\t\tident.input = input;\n\t\ttype = 'modelInput';\n\t}\n\tlet pageInfo = await pageService({ ...ident, type });\n\tif (!pageInfo && !workspace) {\n\t\tconst info = await modelService(model)\n\t\t\t.catch(e => e instanceof ResponseError ? e.status : Promise.reject(e));\n\t\tif (!info || typeof info !== 'object') { return null; }\n\t\tconst pages = info.pages;\n\t\tconst pageDefine = pages && Object.hasOwn(pages, type) && pages[type];\n\t\tif (pageDefine === '') { return null; }\n\t\tpageInfo = typeof pageDefine === 'string'\n\t\t\t? { widget: pageDefine }\n\t\t\t: typeof pageDefine === 'object' && pageDefine || {};\n\t}\n\tif (typeof pageInfo !== 'object') { return pageInfo; }\n\tconst url = pageInfo?.url;\n\tif (url && typeof url === 'string') { return { ident, widget: await convertURI(url), page: pageInfo || null }; }\n\n\tconst widgetId = pageInfo?.widget;\n\tif (widgetId === '') { return null; }\n\tconst widget = typeof widgetId === 'string'\n\t\t? () => importWidget(widgetId)\n\t\t: !workspace && await Application.loadPage(type) || null;\n\tif (!widget) { return null; }\n\treturn { ident, widget, page: pageInfo || null };\n}\n\n/**\n * \n * @param {PageIdent.Workspace} workspaceIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent.Workspace; page: PageConfiguration? }>}\n */\nasync function getWorkspace(workspaceIdent) {\n\tconst { id, edit, input, workspace, setting, continuation } = workspaceIdent;\n\tif (continuation) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\tif (setting) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\t/** @type {PageIdent.Workspace} */\n\tconst ident = {\n\t\ttype: 'workspace',\n\t\tworkspace,\n\t\tid: '',\n\t\tinput: '',\n\t\tedit: false,\n\t};\n\n\t/** @type {'workspace' | 'workspaceCopy' | 'workspaceEdit' | 'workspaceDetails' | 'workspaceInput'} */\n\tlet type = 'workspace';\n\tif (id) {\n\t\tident.id = id;\n\t\tif (input) {\n\t\t\tident.input = input;\n\t\t\ttype = 'workspaceCopy';\n\t\t} else if (edit) {\n\t\t\tident.edit = true;\n\t\t\ttype = 'workspaceEdit';\n\t\t} else {\n\t\t\ttype = 'workspaceDetails';\n\t\t}\n\t} else if (input) {\n\t\tident.input = input;\n\t\ttype = 'workspaceInput';\n\t}\n\tconst pageInfo = await pageService({ ...ident, type });\n\n\tif (typeof pageInfo !== 'object') { return pageInfo; }\n\tconst url = pageInfo?.url;\n\tif (url && typeof url === 'string') { return { ident, widget: await convertURI(url), page: pageInfo || null }; }\n\n\tconst widgetId = pageInfo?.widget;\n\tif (widgetId === '') { return null; }\n\tconst widget = typeof widgetId === 'string'\n\t\t? () => importWidget(widgetId)\n\t\t: !workspace && await Application.loadPage(type) || null;\n\tif (!widget) { return null; }\n\treturn { ident, widget, page: pageInfo || null };\n}\n\n/**\n * \n * @param {PageIdent.Organization} organizationIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent.Organization; page: PageConfiguration? }>}\n */\nasync function getOrganization(organizationIdent) {\n\tconst { id, organization, edit, input, workspace, setting, continuation } = organizationIdent;\n\tif (continuation) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\tif (setting) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\t/** @type {PageIdent.Organization} */\n\tconst ident = {\n\t\ttype: 'organization',\n\t\torganization,\n\t\tworkspace,\n\t\tid: '',\n\t\tinput: '',\n\t\tedit: false,\n\t};\n\n\t/** @type {'organization' | 'organizationCopy' | 'organizationEdit' | 'organizationDetails' | 'organizationInput'} */\n\tlet type = 'organization';\n\tif (id) {\n\t\tident.id = id;\n\t\tif (input) {\n\t\t\tident.input = input;\n\t\ttype = 'organizationCopy';\n\t\t} else if (edit) {\n\t\t\tident.edit = true;\n\t\ttype = 'organizationEdit';\n\t\t} else {\n\t\ttype = 'organizationDetails';\n\t\t}\n\t} else if (input) {\n\t\tident.input = input;\n\t\ttype = 'organizationInput';\n\t}\n\tconst pageInfo = await pageService({ ...ident, type })\n\t\t.catch(e => e instanceof ResponseError ? e.status : Promise.reject(e));\n\n\tif (typeof pageInfo !== 'object') { return null; }\n\tconst url = pageInfo?.url;\n\tif (url && typeof url === 'string') { return { ident, widget: await convertURI(url), page: pageInfo || null }; }\n\n\tconst widgetId = pageInfo?.widget;\n\tif (widgetId === '') { return null; }\n\tconst widget = typeof widgetId === 'string'\n\t\t? () => importWidget(widgetId)\n\t\t: !workspace && await Application.loadPage(type) || null;\n\tif (!widget) { return null; }\n\treturn { ident, widget, page: pageInfo || null };\n}\n/**\n * \n * @param {PageIdent.User} userIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent.User; page: PageConfiguration? }>}\n */\nasync function getUser(userIdent) {\n\tconst { id, user, edit, input, workspace, setting, continuation } = userIdent;\n\tif (continuation) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\tif (setting) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\t/** @type {PageIdent.User} */\n\tconst ident = {\n\t\ttype: 'user',\n\t\tuser,\n\t\tworkspace,\n\t\tid: '',\n\t\tinput: '',\n\t\tedit: false,\n\t};\n\n\t/** @type {'user' | 'userCopy' | 'userEdit' | 'userDetails' | 'userInput'} */\n\tlet type = 'user';\n\tif (id) {\n\t\tident.id = id;\n\t\tif (input) {\n\t\t\tident.input = input;\n\t\t\ttype = 'userCopy';\n\t\t} else if (edit) {\n\t\t\tident.edit = true;\n\t\t\ttype = 'userEdit';\n\t\t} else {\n\t\t\ttype = 'userDetails';\n\t\t}\n\t} else if (input) {\n\t\tident.input = input;\n\t\ttype = 'userInput';\n\t}\n\tconst pageInfo = await pageService({ ...ident, type })\n\t\t.catch(e => e instanceof ResponseError ? e.status : Promise.reject(e));\n\n\tif (typeof pageInfo !== 'object') { return null; }\n\tconst url = pageInfo?.url;\n\tif (url && typeof url === 'string') { return { ident, widget: await convertURI(url), page: pageInfo || null }; }\n\n\tconst widgetId = pageInfo?.widget;\n\tif (widgetId === '') { return null; }\n\tconst widget = typeof widgetId === 'string'\n\t\t? () => importWidget(widgetId)\n\t\t: !workspace && await Application.loadPage(type) || null;\n\tif (!widget) { return null; }\n\treturn { ident, widget, page: pageInfo || null };\n}\n\n\n/**\n * @param {PageIdent} pageIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent; page: PageConfiguration? }>}\n */\nexport default async function load(pageIdent) {\n\tconst { type } = pageIdent;\n\n\tif (type === 'model') {\n\t\treturn getModel(pageIdent);\n\t}\n\tif (type === 'workspace') {\n\t\treturn getWorkspace(pageIdent);\n\t}\n\tif (type === 'organization') {\n\t\treturn getOrganization(pageIdent);\n\t}\n\tif (type === 'user') {\n\t\treturn getUser(pageIdent);\n\t}\n\tif (type === 'configuration') {\n\t\tconst { continuation } = pageIdent;\n\t\tconst widget = await Application.loadContinuation(continuation);\n\t\tif (widget) { return { widget, ident: pageIdent, page: null }; }\n\t\treturn null;\n\t}\n\tconst widget = await Application.loadPage(type);\n\tif (widget) { return { widget, ident: pageIdent, page: null }; }\n\treturn null;\n}\n","/** @import { CurrentPage, GlobalPage } from '../typesDefine.mjs' */\n/** @import { PageInfo } from './home.mjs' */\n/** @import { PageHandle } from './PageHandle.mjs' */\nimport { User } from '../user.mjs';\nimport setUrl from './setUrl.mjs';\nimport { createComputed, createState } from '../signal.mts';\nimport { Application } from '../services/index.mjs';\n\n\n/**\n * 页面管理器\n * @callback PageManager\n * @param {PageHandle} page\n * @returns {void}\n */\n/** @type {Map<symbol, PageManager>} */\nconst managers = new Map();\n\n/**\n * \n * @param {PageManager} manager \n * @returns \n */\nexport function addManager(manager) {\n\tconst symbol = Symbol();\n\tmanagers.set(symbol, manager);\n\treturn () => { managers.delete(symbol); };\n}\n\n/** @type {Map<PageInfo, PageHandle>} */\nconst pageMap = new Map();\nconst pages = createState([...pageMap.values()]);\n/** @type {PageHandle[]} */\nlet list = [];\nconst currentState = createState(/** @type {PageHandle | null} */(null));\n/**\n * \n * @param {PageInfo} [page] \n * @returns \n */\nexport function switchTo(page) {\n\tconst button = page && pageMap.get(page);\n\tconst current = currentState.get();\n\tif (current === button) { return; }\n\tcurrentState.set(button || null);\n\tif (button) {\n\t\tconst index = list.indexOf(button);\n\t\tif (index > 0) {\n\t\t\tlist.splice(index, 1);\n\t\t}\n\t\tif (index) {\n\t\t\tlist.push(button);\n\t\t}\n\t}\n\n}\nexport function getPages() {\n\treturn [...pages.get()];\n}\n/**\n * \n * @param {PageInfo} pageRoot \n * @param {PageHandle} state \n * @returns \n */\nexport function createButton(pageRoot, state) {\n\tpageMap.set(pageRoot, state);\n\tpages.set([...pageMap.values()]);\n\tcurrentState.set(state);\n\tfor (const manager of [...managers.values()]) {\n\t\tmanager(state);\n\t}\n}\n/**\n * \n * @param {PageInfo} node \n * @returns \n */\nexport function remove(node) {\n\tconst page = pageMap.get(node);\n\tpageMap.delete(node);\n\tpages.set([...pageMap.values()]);\n\tif (!page) { return; }\n\tconst index = list.indexOf(page);\n\tif (index >= 0) { list.splice(index, 1); }\n\tif (currentState.get() !== page) { return; }\n\tcurrentState.set(null);\n\tif (User.waitLogin) { return; }\n\tconst newPage = list[0];\n\tsetUrl(newPage?.href || Application.path, false, true);\n}\nexport function closeAll() {\n\tfor (const page of pages.get()) {\n\t\tpage.destroy();\n\t}\n}\n\nconst title = createComputed(() => currentState.get()?.title || '');\nconst icon = createComputed(() => currentState.get()?.icon || '');\nconst print = createComputed(() => currentState.get()?.print || {});\nconst loading = createComputed(() => currentState.get()?.loading || false);\nconst unsaved = createComputed(() => currentState.get()?.unsaved || false);\nconst guarded = createComputed(() => currentState.get()?.guarded || false);\n/** @type {CurrentPage} */\nexport const currentPage = {\n\tget title() { return title.get(); },\n\tget icon() { return icon.get(); },\n\tget print() { return structuredClone(print.get()); },\n\tget unsaved() { return unsaved.get(); },\n\tget guarded() { return guarded.get(); },\n\tget loading() { return loading.get(); },\n};\n\nconst globalGuarded = createComputed(() => Boolean(pages.get().find(p => p.guarded)));\n/** @type {GlobalPage} */\nexport const globalPage = {\n\tget guarded() { return globalGuarded.get(); },\n};\nwindow.addEventListener('beforeunload', event => {\n\tif (!globalPage.guarded) { return; }\n\tevent.preventDefault();\n\tevent.returnValue = \"\";\n});\n","\n/**\n * @param {HTMLElement} container\n */\nexport default function renderHome(container) {\n\tcontainer.appendChild(document.createTextNode('主页'));\n\n}\n","const loadingDiv = document.createElement('div');\nconst shadow = loadingDiv.attachShadow({\"mode\": \"closed\"});\nshadow.innerHTML = `<style>\ndiv::after, div::before {\ncontent: '';\nheight: 100px;\nwidth: 100px;\nposition: absolute;\nmargin: auto;\ninset: 0;\nborder-radius: 100%;\nbackground-color: #000;\nanimation: animation infinite linear 1.5s;\ntransform: scale(0);\n}\ndiv::before {\nanimation-delay: -0.75s;\n}\n@keyframes animation {\n0% {\ntransform: scale(0);\nopacity: .8;\nz-index: 0;\n}\n100% {\ntransform: scale(1);\nopacity: 0;\nz-index: 1;\n}\n}\n</style><div></div>`\n\n\nconst container = document.createElement('div');\n\tcontainer.appendChild(loadingDiv);\nexport default container;\n/**\n * \n * @param {boolean} show \n */\nexport function toggle(show) {\n\tcontainer.hidden = !show;\n}\n","import { root as rootContainer } from '../dom/index.mjs';\nimport { toUrl } from '../utils/index.mjs';\nimport { switchTo } from './pageManager.mjs';\nimport { openUrl } from './setUrl.mjs';\nimport renderHome from './renderHome.mjs';\nimport loadingContainer, { toggle as triggerLoading } from './loadingContainer.mjs';\nimport { createState } from '../signal.mts';\nimport { Application } from '../services/index.mjs';\n\n\nrootContainer.appendChild(loadingContainer);\n\n/**\n * @callback Trigger\n * @param {boolean} show \n * @returns {void} \n */\n\n/** \n * @typedef {object} PageInfo\n * @property {Trigger} toggle\n * @property {() => void} hide\n */\n\n/** @type {Trigger} */\nlet currentDom = triggerLoading;\n\n\n\nexport const currentDomPage = createState(/** @type {PageInfo | undefined} */(undefined));\nexport const currentPage = createState(/** @type {PageInfo?} */(null));\n\n\n/**\n * \n * @param {Trigger} dom\n * @param {PageInfo} [domPage]\n * @returns {void}\n */\nfunction setDom(dom, domPage) {\n\tif (currentDom === dom) { return; }\n\tif (currentDom) {\n\t\tcurrentDom(false);\n\t}\n\tconst old = currentDomPage.get();\n\tcurrentDom = dom;\n\tcurrentDomPage.set(domPage);\n\told?.hide();\n\tif (!dom) { return; }\n\tdom(true);\n}\n\nconst homeContainer = document.createElement('div');\nhomeContainer.hidden = true;\n/**\n * \n * @param {boolean} show \n */\nfunction triggerHome(show) {\n\thomeContainer.hidden = !show;\n}\n\nrootContainer.appendChild(homeContainer);\nconst search = createState('?')\nconst hash = createState('#')\n/** @type {Map<string, Set<any>>} */\nconst events = new Map();\n\nevents.set('update', new Set([() => {\n\thomeContainer.innerHTML = '';\n\t\treturn renderHome(homeContainer);\n}]));\n\n/**\n * \n * @param {'update' | 'destroy'} e \n */\nfunction runEvent(e) {\n\tfor (const f of [...events.get(e) || []]) {\n\t\tf();\n\t}\n}\nexport class HomeContext {\n\tget container() { return homeContainer; }\n\tget current() { return currentDom === triggerHome; }\n\tget home() { return true; }\n\tget search() { return search.get(); }\n\tget hash() { return hash.get(); }\n\t/**\n\t * \n\t * @param {string} url \n\t * @param {boolean} replace \n\t */\n\topen(url, replace) {\n\t\topenUrl(url[0] === '/' ? url : toUrl(Application.path, url), replace);\n\t}\n\t/**\n\t * \n\t * @param {'update' | 'destroy'} event \n\t * @param {() => void} listen \n\t * @returns {() => void}\n\t */\n\tlisten(event, listen) {\n\t\tconst fn = listen.bind(this);\n\t\tlet set = events.get(event);\n\t\tif (!set) {\n\t\t\tset = new Set();\n\t\t\tevents.set(event, set);\n\t\t}\n\t\tset.add(fn);\n\t\treturn () => { set?.delete(fn); };\n\t}\n}\n/**\n * @param {(ctx: HomeContext) => void} [renderer]\n */\nexport function switchHome(renderer) {\n\tif (typeof renderer !== 'function') { return false; }\n\trunEvent('destroy');\n\thomeContainer.innerHTML = '';\n\tevents.clear();\n\trenderer(new HomeContext());\n\treturn true;\n}\n\n\nfunction toShowHome() {\n\tconst oldPage = currentPage.get()\n\tif (oldPage) {\n\t\tcurrentPage.set(null);\n\t\toldPage.hide();\n\t}\n\tsetDom(triggerHome);\n\tswitchTo();\n\trunEvent('update');\n}\n/**\n * \n * @param {string} s \n * @param {string} h \n */\nexport function showHome(s, h) {\n\tsearch.set(s || '?');\n\thash.set(h || '#');\n\ttoShowHome();\n}\n\n/**\n * @type {string | number | NodeJS.Timeout | null}\n */\nlet timeoutId = null;\n\nexport function showEmpty() {\n\tif (timeoutId !== null) {\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = null;\n\t}\n\ttoShowHome();\n}\n\n/**\n * \n * @param {boolean} v \n */\nexport function setLoading(v) {\n\tconst page = currentPage.get();\n\tif (!page) { return; }\n\tif (!v) {\n\t\tif (timeoutId !== null) {\n\t\t\tclearTimeout(timeoutId);\n\t\t\ttimeoutId = null;\n\t\t}\n\t\tsetDom(page.toggle, page);\n\t\treturn;\n\t}\n\tif (timeoutId !== null) { return; }\n\ttimeoutId = setTimeout(() => {\n\t\ttimeoutId = null;\n\t\tsetDom(triggerLoading);\n\t\tswitchTo();\n\t}, 300);\n}\n\n/**\n * \n * @param {PageInfo} page \n * @param {boolean} loading \n */\nexport function switchPage(page, loading) {\n\tconst oldPage = currentPage.get();\n\tif (oldPage === page) {\n\t\tsetLoading(loading);\n\t\tswitchTo(oldPage);\n\t\treturn;\n\t}\n\tconst old = oldPage;\n\tif (!oldPage) {\n\t\trunEvent('update');\n\t}\n\tconst newPage = page;\n\tcurrentPage.set(newPage);\n\told?.hide();\n\tsetLoading(loading);\n\tswitchTo(newPage);\n}\n","/** @import { PageIdent } from './route/route.mjs' */\n\n/**\n * @param {string} t \n * @returns {string}\n */\nexport function decode(t) {\n\treturn decodeURIComponent(t.replace(/\\+/g, '%20'));\n}\n/**\n * @param {string | PageIdent} t \n * @returns {string}\n */\nexport function encode(t) {\n\treturn encodeURIComponent(typeof t === 'string' ? t : stringify(t))\n\t\t.replace(/%20/g, '+')\n\t\t.replace(/%3A/g, ':')\n\t\t.replace(/%3D/g, '=')\n\t\t.replace(/%26/g, '&')\n\t\t.replace(/%24/g, '$')\n\t\t.replace(/%40/g, '@');\n}\n\n\n/**\n * @param {string} ident\n * @returns {PageIdent}\n */\nexport function parse(ident) {\n\tif (!ident) { return { type: 'home' }; }\n\tswitch (ident) {\n\t\t// 代办\n\t\tcase '!': case '!': return { type: 'todo' };\n\t\t// 设置\n\t\tcase '-': case '-': return { type: 'settings' };\n\t\t// 搜索\n\t\tcase '=': case '=': return { type: 'search' };\n\t\t// 状态管理\n\t\tcase ':': case ':': return { type: 'status' };\n\t\t// 开发工具\n\t\tcase '+': case '+': return { type: 'devtools' };\n\t\tcase '&': // TODO: ?组织列表\n\t\tcase '@': // TODO: ?用户列表\n\t\tcase '~': // TODO: ?\n\t\tcase '_': // TODO: ?\n\t\tcase '*': // TODO: ?个人资料编辑\n\t}\n\t/**\n\t * \n\t * @param {RegExp} regex \n\t * @param {string} [def] \n\t */\n\tfunction get(regex, def) {\n\t\tconst { index } = regex.exec(ident) || { index: -1 };\n\t\tif (index < 0) { return; }\n\t\tconst value = ident.substring(index + 1) || def;\n\t\tident = ident.substring(0, index);\n\t\treturn value;\n\t}\n\tconst id = get(/[==]/);\n\n\tident = ident\n\t\t.replaceAll(/[~~]+/g, '~')\n\t\t.replaceAll(/[!!]+/g, '!')\n\t\t.replaceAll(/[@@]+/g, '@')\n\t\t.replaceAll(/[&&]+/g, '&')\n\t\t.replaceAll(/[**]/g, '*')\n\t\t.replaceAll(/[::]+/g, ':')\n\t\t.replaceAll(/[((]+/g, '(')\n\t\t.replaceAll(/[))]+/g, ')');\n\tconst edit = id ? Boolean(get(/(?<!\\*)\\*$/, '*')) : undefined;\n\tconst input = edit ? undefined : get(/\\*.*/, '*')?.replace(/[~!@&()].*/, '');\n\tconst setting = Boolean(get(/!$/, input || id ? undefined : '!'));\n\tconst regex = /(?=[~!@&])/;\n\t/** @type {Map<string, string[]>} */\n\tlet map = new Map([['&', []], ['@', []], ['~', []], ['!', []], ['*', []]]);\n\t/** @type {string[]} */\n\tlet base = [];\n\tfor (const v of ident.split(regex)) {\n\t\t(map.get(v[0]) || base).push(v);\n\t}\n\tconst continuation = map.get('!')?.join('').slice(1) || '';\n\tconst workspace = map.get('~')?.join('').slice(1) || '';\n\tconst organization = map.get('&')?.join('').slice(1) || '';\n\tconst user = map.get('@')?.join('').slice(1) || '';\n\tconst model = base.join('');\n\tif (model) {\n\t\treturn { type: 'model', model, workspace, continuation, setting, edit, input, id };\n\t}\n\tif (organization) {\n\t\treturn { type: 'organization', organization, workspace, continuation, setting, edit, input, id };\n\t}\n\tif (user) {\n\t\treturn { type: 'user', user, workspace, continuation, setting, edit, input, id };\n\t}\n\tif (workspace) {\n\t\treturn { type: 'workspace', workspace, continuation, setting, edit, input, id };\n\t}\n\tif (continuation) {\n\t\treturn { type: 'configuration', continuation, setting, edit, input, id };\n\t}\n\treturn { type: 'home' };\n}\n\n\n\n/**\n * \n * @param {PageIdent} a \n * @returns {string}\n */\nexport function stringify(a) {\n\tswitch (a.type) {\n\t\tcase 'home': return '/';\n\t\tcase 'settings': return '-';\n\t\tcase 'todo': return '!';\n\t\tcase 'search': return '=';\n\t\tcase 'status': return ':';\n\t\tcase 'devtools': return '+';\n\t}\n\tconst { model, user, organization, workspace, continuation, setting, input, edit, id } = a;\n\tlet ident = '';\n\tif (model) {\n\t\tident = model;\n\t} else if (organization) {\n\t\tident += `&${organization}`;\n\t} else if (user) {\n\t\tident += `@${user}`;\n\t}\n\tif (workspace) {\n\t\tident += `~${workspace}`;\n\t}\n\tif (continuation) {\n\t\tident += `!${continuation}`;\n\t}\n\tif (setting) {\n\t\tident += `!`;\n\t\treturn ident;\n\t}\n\tif (id) {\n\t\tif (input) {\n\t\t\tident += `*${input}`;\n\t\t} else if (edit) {\n\t\t\tident += `*`;\n\t\t}\n\t\tident += `=${id}`;\n\t\treturn ident;\n\t}\n\tif (input) {\n\t\tident += `*`;\n\t\tif (input !== '*') {\n\t\t\tident += `${input}`;\n\t\t}\n\t\treturn ident;\n\t}\n\treturn ident;\n}\n\n/**\n * \n * @param {PageIdent} a \n * @returns {Iterable<string>}\n */\nexport function* stringifyPaths(a) {\n\tswitch (a.type) {\n\t\tcase 'home': return yield '/';\n\t\tcase 'settings': return yield '-';\n\t\tcase 'todo': return yield '!';\n\t\tcase 'search': return yield '=';\n\t\tcase 'status': return yield ':';\n\t\tcase 'devtools': return yield '+';\n\t}\n\tconst { model, user, organization, workspace, continuation, setting, input, edit, id } = a;\n\tlet ident = '';\n\tif (model) {\n\t\tident = model;\n\t} else if (organization) {\n\t\tident += `&${organization}`;\n\t} else if (user) {\n\t\tident += `@${user}`;\n\t}\n\tif (ident) { yield ident; }\n\tif (workspace) {\n\t\tident += `~${workspace}`;\n\t\tyield ident;\n\t}\n\tif (continuation) {\n\t\tident += `!${continuation}`;\n\t\tyield ident;\n\t}\n\tif (setting) {\n\t\tident += `!`;\n\t\treturn yield ident;\n\t}\n\tif (id) {\n\t\tif (input) {\n\t\t\tyield ident + `*`;\n\t\t\tident += `*${input}`;\n\t\t} else if (edit) {\n\t\t\tyield ident + `=${id}`;\n\t\t\tident += `*`;\n\t\t}\n\t\tident += `=${id}`;\n\t\treturn yield ident;\n\t}\n\tif (input) {\n\t\tident += `*`;\n\t\tyield ident;\n\t\tif (input !== '*') {\n\t\t\tident += `${input}`;\n\t\t\tyield ident;\n\t\t}\n\t}\n}\n","import * as Ident from '../Ident.mjs';\nimport { Application } from '../services/index.mjs';\nimport { toUrl } from '../utils/index.mjs';\n/**\n * @typedef {PageIdent.Model | PageIdent.Organization | PageIdent.User | PageIdent.Workspace | PageIdent.Page | PageIdent.Configuration} PageIdent\n */\n/**\n * @typedef {object} PageIdent.Model\n * @property {'model'} type\n * @property {string} model\n * @property {null} [organization]\n * @property {null} [user]\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {string?} [workspace]\n * @property {string} [continuation]\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n/**\n * @typedef {object} PageIdent.Organization\n * @property {'organization'} type\n * @property {null} [model]\n * @property {string} organization\n * @property {null} [user]\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {string?} [workspace]\n * @property {string} [continuation]\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n\n/**\n * @typedef {object} PageIdent.User\n * @property {'user'} type\n * @property {null} [model]\n * @property {null} [organization]\n * @property {string} user\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {string?} [workspace]\n * @property {string} [continuation]\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n\n/**\n * @typedef {object} PageIdent.Workspace\n * @property {'workspace'} type\n * @property {null} [model]\n * @property {null} [organization]\n * @property {null} [user]\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {string} workspace\n * @property {string} [continuation]\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n/**\n * @typedef {object} PageIdent.Configuration\n * @property {'configuration'} type\n * @property {null} [model]\n * @property {null} [organization]\n * @property {null} [user]\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {null} [workspace]\n * @property {string} continuation\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n\n/**\n * @typedef {object} PageIdent.Page\n * @property {'todo' | 'settings' | 'search' | 'status' | 'devtools' | 'home'} type\n * @property {null} [continuation]\n */\n\n// TODO: 用户页面\n// TODO: 组织页面\n// TODO: 全局工作区\n\n\n\n\n/**\n * @typedef {object} PageIdent.Route\n * @property {PageIdent} page\n * @property {string} pageRoot\n * @property {string} path\n * @property {boolean} redirect\n */\n\n/**\n * @callback PageIdent.Stringify\n * @param {PageIdent} pageIdent \n * @returns {string}\n */\n/**\n * @callback PageIdent.Parser\n * @param {string} path\n * @returns {PageIdent.Route}\n */\n\n/** @type {PageIdent.Parser} */\nexport let parse = (subPath) => {\n\tconst index = subPath.indexOf('/');\n\tconst pathIdent = Ident.decode(index < 0 ? subPath : subPath.slice(0, index));\n\tconst path = index < 0 ? '/' : subPath.slice(index);\n\tconst page = Ident.parse(pathIdent);\n\tconst pageId = Ident.stringify(page);\n\tconst pageRoot = Ident.encode(pageId);\n\treturn { page, pageRoot, path, redirect: pageRoot !== pathIdent };\n};\n/** @type {PageIdent.Stringify} */\nlet stringifyIdent = (page) => Ident.encode(Ident.stringify(page));\n/**\n * @param {PageIdent} page \n * @param {...string | null | undefined} paths \n * @returns {string}\n */\nexport function stringify(page, ...paths) {\n\tconst root = stringifyIdent(page);\n\tconst path = paths.filter(Boolean).join('');\n\tif (!path) { return root; }\n\tif (['/', '?', '#'].includes(path[0])) { return `${root}${path}`}\n\treturn `${root}/${path}`;\n};\n/**\n * @param {PageIdent} page \n * @param {...string | null | undefined} paths \n * @returns {string}\n */\nexport function toHref(page, ...paths) {\n\treturn toUrl(\n\t\tApplication.path,\n\t\tstringifyIdent(page),\n\t\tpaths.filter(Boolean).join(''),\n\t);\n}\n/**\n * @typedef {object} PageIdent.Router\n * @property {PageIdent.Stringify} stringify\n * @property {PageIdent.Parser} parse\n */\n/**\n * \n * @param {PageIdent.Router} options \n */\nexport function setRouter(options) {\n\tparse = options.parse;\n\tstringifyIdent = options.stringify;\n}\n\nexport const PageIdent = {\n\tget parse() { return parse },\n\tget stringify() { return stringify },\n\tget toHref() { return toHref },\n}\n","import { Code128 } from './utils/index.mjs';\n/**\n * @typedef {Object} Print.MarginBox\n * @property {Print.Context[] | Print.Context} [content]\n * @property {string} [fontFamily] - 字体族\n * @property {string|number} [fontSize] - 字体大小\n * @property {boolean} [bold]\n * @property {boolean} [italic]\n * @property {string} [color] - 文字颜色\n * @property {'ltr'|'rtl'} [direction] - 文本方向\n * @property {number|string} [lineHeight] - 行高\n * @property {number} [zIndex] - 层叠顺序\n * @property {'left'|'right'|'center'|'justify'|'start'|'end'} [textAlign] - 文本对齐\n * @property {'baseline'|'sub'|'super'|'top'|'text-top'|'middle'|'bottom'|'text-bottom'|number} [verticalAlign] - 垂直对齐\n * @property {Record<'top' | 'right' | 'bottom' | 'left', string|number>} [padding] - 内边距属性对象\n * @property {Print.Border} [border] \n */\n/**\n * @typedef {string | Print.Newline | Print.Image | Print.Barcode | Print.Counter} Print.Context\n */\n/**\n * @typedef {object} Print.Newline\n * @property {'newline'} type\n */\n/**\n * @typedef {object} Print.Counter\n * @property {'page' | 'pages'} type\n */\n/**\n * @typedef {object} Print.Image\n * @property {'image'} type\n * @property {string} url\n * @property {string} [alt]\n * @property {string | number} [width]\n * @property {string | number} [height]\n */\n/**\n * @typedef {object} Print.Barcode\n * @property {'barcode' | 'code128'} type\n * @property {string} text\n * @property {string | number} [width]\n * @property {string | number} [height]\n */\n\n\n\n/**\n * @typedef {Object} Print.Border\n * @property {string|number} [width] - 边框宽度复合属性\n * @property {string} [color] - 边框颜色复合属性\n * @property {'dotted'|'dashed'|'solid'|'double'|'groove'|'ridge'|'inset'|'outset'} [style] - 边框样式复合属性\n */\n/**\n * @typedef {Object} Print.Page\n * @property {'A3'|'B4'|'A4'|'B5'|'A5'|{width?: string; height?: string}} [size] 页面尺寸\n * @property {'portrait'|'landscape'|'auto'} [orientation] 页面方向\n * @property {string|[string, string?, string?, string?]} [margin] 页边距\n * @property {Print.MarginBox} [topLeft] \n * @property {Print.MarginBox} [topCenter] \n * @property {Print.MarginBox} [topRight] \n * @property {Print.MarginBox} [bottomLeft] \n * @property {Print.MarginBox} [bottomCenter] \n * @property {Print.MarginBox} [bottomRight] \n * \n * @property {Print.MarginBox} [leftTop] \n * @property {Print.MarginBox} [leftMiddle] \n * @property {Print.MarginBox} [leftBottom] \n * @property {Print.MarginBox} [rightTop] \n * @property {Print.MarginBox} [rightMiddle] \n * @property {Print.MarginBox} [rightBottom] \n * \n * @property {Print.MarginBox} [topLeftCorner] \n * @property {Print.MarginBox} [topRightCorner] \n * @property {Print.MarginBox} [bottomLeftCorner] \n * @property {Print.MarginBox} [bottomRightCorner] \n * \n * @property {Print.Border} [topBorder] \n * @property {Print.Border} [bottomBorder] \n * @property {Print.Border} [leftBorder] \n * @property {Print.Border} [rightBorder] \n * \n * \n */\n\n/**\n * @typedef {Object} Print.Pages\n * @property {Print.Page} [left] 左侧页面/节点\n * @property {Print.Page} [right] 右侧页面/节点\n * @property {Print.Page} [first] 首页页面/节点\n * @property {Print.Page} [blank] 空白页面/节点\n */\n\n\n/**\n * @typedef {Print.Page & Print.Pages} Print\n */\n\n\n/**\n * 将字符串转换为 Base64\n * @param {string} str \n */\nfunction toSvgURI(str) {\n\treturn `data:image/svg+xml;charset=utf-8,${encodeURIComponent(str)}`;;\n}\n/**\n * \n * @param {string} val \n * @returns \n */\nfunction stringifyContentText(val) {\n\tconst text = typeof val === 'bigint' || typeof val === 'number' ? String(val) : val;\n\tif (!text || typeof text !== 'string') { return ''; }\n\n\treturn `\"${text\n\t\t.replace(/\\\\/g, '\\\\\\\\')\n\t\t.replace(/\"/g, '\\\\\"')\n\t\t.replace(/'/g, \"\\\\'\")\n\t\t.replace(/\\n/g, '\\\\A').replace(/\\r/g, '\\\\D')}\"`;\n}\n/**\n * \n * @param {string} url \n * @returns \n */\nfunction toUrlContent(url) {\n\tif (!url) { return ''; }\n\treturn `url(${stringifyContentText(url)})`;\n}\n\n/**\n * 解析尺寸,统一转换为带单位的字符串 (默认为 em)\n * @param {string | number} [val] \n */\nfunction parseDimension(val, defaultUnit = 'em') {\n\tif (!val) return null;\n\tif (typeof val === 'number') return `${val}${defaultUnit}`;\n\tif (typeof val !== 'string') { return null; }\n\tconst t = val.replace(/^\\s+|\\s+$/gs, '');\n\tif (/^\\d+(\\.\\d*)?|\\.\\d+$/.test(t)) { return `${t}${defaultUnit}`; }\n\treturn t; // 其他情况原样返回\n}\n\n/**\n * 生成图片的 SVG Data URL\n * @param {Print.Image} item \n */\nfunction imageToContent(item) {\n\tconst { url } = item;\n\tif (!url) { return ''; }\n\tconst width = parseDimension(item.width) || '';\n\tconst height = parseDimension(item.height) || '';\n\tif (!width && !height) { toUrlContent(url); }\n\tconst svgContent = `\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\">\n\t\t\t\t\t<image href=\"${item.url}\" width=\"100%\" height=\"100%\" />\n\t\t\t</svg>\n\t\t`.trim();\n\treturn toUrlContent(toSvgURI(svgContent.replace(/\\s+/g, ' ')));\n}\n\n/**\n * 生成条码的 SVG Data URL\n * @param {Print.Barcode} item \n * @param {boolean} [rotation] \n */\nfunction barcodeToContent(item, rotation) {\n\tconst bits = Code128.encode(item.text);\n\tif (!bits?.length) { return ''; }\n\n\n\n\tconst paths = [];\n\tfor (let i = 0; i < bits.length; i++) {\n\t\tif (!bits[i]) { continue; }\n\t\tconst start = i - bits.length / 2;\n\t\tlet len = 1;\n\n\t\twhile (bits[i + 1]) {\n\t\t\tlen++;\n\t\t\ti++;\n\t\t}\n\n\t\tpaths.push(rotation ? `M-0.5 ${start}v${len}h1v-${len}Z` : `M${start} -0.5h${len}v1h-${len}Z`);\n\t}\n\tif (!paths.length) { return ''; }\n\n\n\tlet height = parseDimension(item.height) || '1em';\n\tlet width = parseDimension(item.width) || `${(bits.length + 20) * 0.06}em`;\n\tlet vbWidth = bits.length + 20;\n\tlet vbHeight = 1;\n\tif (rotation) {\n\t\t[vbWidth, vbHeight] = [vbHeight, vbWidth];\n\t\t[width, height] = [height, width]\n\t}\n\n\tconst svgContent = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"${width}\" height=\"${height}\"\n viewBox=\"${-vbWidth / 2} ${-vbHeight / 2} ${vbWidth} ${vbHeight}\"\n\t\t\tpreserveAspectRatio=\"none\">\n\t\t<path d=\"${paths.join(\" \")}\" fill=\"black\"\n\t\t />\n\t</svg>\n\t`.trim();\n\n\tconst minifiedSvg = svgContent.replace(/\\s+/g, ' ');\n\treturn `url(${toSvgURI(minifiedSvg)})`;\n}\n/**\n * 主函数:将 Print.Context | Print.Context[] 转换为 CSS content 属性值\n * @param {Print.Context | Print.Context[]} [input] \n * @param {boolean} [rotation] \n * @returns {string} CSS content 属性的值部分 (不含分号)\n */\nfunction toContent(input, rotation) {\n\tif (input === '') { return '\"\"'; }\n\tif (!input) { return ''; }\n\n\tconst items = Array.isArray(input) ? input : [input];\n\treturn items.map(item => {\n\t\tif (!item) { return ''; }\n\t\tif (typeof item === 'string') { return stringifyContentText(item); }\n\t\tconst type = item.type;\n\t\tif (type === 'newline') { return '\"\\\\A\"'; }\n\t\tif (type === 'image') { return imageToContent(item); }\n\t\tif (type === 'barcode' || type === 'code128') { return barcodeToContent(item, rotation); }\n\t\tif (type === 'page') { return `counter(page)`; }\n\t\tif (type === 'pages') { return `counter(pages)`; }\n\t\treturn ''; // 未知类型\n\t}).filter(Boolean).join(' ');\n\n}\n/**\n * 辅助函数:将配置对象应用到具体的 CSSPageRule 上\n * 完全不拼接字符串,直接操作 style 对象\n * @param {\"top\" | \"left\" | \"right\" | \"bottom\" | ''} borderArea\n * @param {CSSStyleDeclaration?} [style] \n * @param {Print.MarginBox} [config] \n * @param {boolean} [base] \n * @param {boolean} [rotation] \n * @returns \n */\nfunction applyMarginRule(borderArea, style, config, base, rotation) {\n\tif (!style) { return; }\n\tconst {\n\t\tcontent, fontFamily, fontSize, bold, italic, color, direction, lineHeight,\n\t\tzIndex, textAlign, verticalAlign, padding, border,\n\t} = config || {};\n\n\tstyle.content = toContent(content, rotation) || (base ? '\"\"' : '');\n\tstyle.fontFamily = fontFamily || '';\n\tstyle.fontSize = parseDimension(fontSize, 'px') || '';\n\tstyle.fontWeight = typeof bold === 'boolean' ? bold ? 'bold' : 'normal' : '';\n\tstyle.fontStyle = typeof italic === 'boolean' ? italic ? 'italic' : 'normal' : '';\n\tstyle.color = color || '';\n\tstyle.direction = direction || '';\n\tstyle.lineHeight = parseDimension(lineHeight, 'em') || '';\n\tstyle.zIndex = zIndex ? String(zIndex) : '';\n\tstyle.textAlign = textAlign || '';\n\tstyle.verticalAlign = parseDimension(verticalAlign, '%') || '';\n\tstyle.direction = direction || 'inherit';\n\tstyle.whiteSpace = 'pre-wrap';\n\tconst { top, right, bottom, left } = padding || {};\n\tstyle.paddingTop = parseDimension(top, 'px') || '';\n\tstyle.paddingRight = parseDimension(right, 'px') || '';\n\tstyle.paddingBottom = parseDimension(bottom, 'px') || '';\n\tstyle.paddingLeft = parseDimension(left, 'px') || '';\n\tif (borderArea) {\n\t\tapplyBorderRule(borderArea, style, border, base);\n\t}\n}\n\n/**\n * 辅助函数:将配置对象应用到具体的 CSSPageRule 上\n * 完全不拼接字符串,直接操作 style 对象\n * @param {CSSStyleDeclaration?} [styleDeclaration] \n * @param {Print.Border} [border] \n * @param {'top' | 'left' | 'right' | 'bottom'} [area] \n * @param {boolean} [base] \n * @returns \n */\nfunction applyBorderRule(area, styleDeclaration, border, base) {\n\tif (!styleDeclaration) { return; }\n\tconst { width, color, style } = border || {};\n\tif (width || width === 0 || base) {\n\t\tstyleDeclaration.setProperty(`border-${area}-width`, typeof width === 'number' ? `${width || 0}px` : width || '1px');\n\t} else {\n\t\tstyleDeclaration.removeProperty(`border-${area}-width`);\n\t}\n\tif (color || base) {\n\t\tstyleDeclaration.setProperty(`border-${area}-color`, color || 'currentColor');\n\t} else {\n\t\tstyleDeclaration.removeProperty(`border-${area}-color`);\n\t}\n\tif (style || base) {\n\t\tstyleDeclaration.setProperty(`border-${area}-style`, style || 'none');\n\t} else {\n\t\tstyleDeclaration.removeProperty(`border-${area}-style`);\n\t}\n}\n/**\n * 辅助函数:将配置对象应用到具体的 CSSPageRule 上\n * 完全不拼接字符串,直接操作 style 对象\n * @param {ReturnType<createPageRule>} rule \n * @param {Print.Page} [config] \n * @param {boolean} [base] \n * @returns \n */\nfunction applyPageRule(rule, config, base) {\n\tif (!rule) { return; }\n\tconst style = rule.page;\n\n\tapplyMarginRule('bottom', rule.topLeft, config?.topLeft, base);\n\tapplyMarginRule('bottom', rule.topCenter, config?.topCenter, base);\n\tapplyMarginRule('bottom', rule.topRight, config?.topRight, base);\n\tapplyMarginRule('top', rule.bottomLeft, config?.bottomLeft, base);\n\tapplyMarginRule('top', rule.bottomCenter, config?.bottomCenter, base);\n\tapplyMarginRule('top', rule.bottomRight, config?.bottomRight, base);\n\n\tapplyMarginRule('right', rule.leftTop, config?.leftTop, base, true);\n\tapplyMarginRule('right', rule.leftMiddle, config?.leftMiddle, base, true);\n\tapplyMarginRule('right', rule.leftBottom, config?.leftBottom, base, true);\n\tapplyMarginRule('left', rule.rightTop, config?.rightTop, base, true);\n\tapplyMarginRule('left', rule.rightMiddle, config?.rightMiddle, base, true);\n\tapplyMarginRule('left', rule.rightBottom, config?.rightBottom, base, true);\n\n\tapplyMarginRule('', rule.topLeftCorner, config?.topLeftCorner, base);\n\tapplyMarginRule('', rule.topRightCorner, config?.topRightCorner, base);\n\tapplyMarginRule('', rule.bottomLeftCorner, config?.bottomLeftCorner, base);\n\tapplyMarginRule('', rule.bottomRightCorner, config?.bottomRightCorner, base);\n\n\n\tapplyBorderRule('top', style, config?.topBorder, base);\n\tapplyBorderRule('bottom', style, config?.bottomBorder, base);\n\tapplyBorderRule('left', style, config?.leftBorder, base);\n\tapplyBorderRule('right', style, config?.rightBorder, base);\n\n\n\n\n\tconst { size, orientation, margin } = config || {};\n\n\tlet sizeValue = '';\n\tif (typeof size === 'object' && size !== null) {\n\t\tsizeValue = `${size.width} ${size.height}`;\n\t} else if (typeof size === 'string') {\n\t\tsizeValue = size;\n\t}\n\tif (orientation) {\n\t\tsizeValue = `${sizeValue} ${orientation}`;\n\t}\n\tif (sizeValue) {\n\t\tstyle.setProperty('size', sizeValue);\n\t} else {\n\t\tstyle.removeProperty('size');\n\t}\n\n\n\tlet marginValue = '';\n\tif (typeof margin === 'string') {\n\t\tmarginValue = margin;\n\t} else if (Array.isArray(margin)) {\n\t\tmarginValue = margin.filter(v => v !== undefined).join(' ');\n\t}\n\tif (marginValue) {\n\t\tstyle.setProperty('margin', marginValue);\n\t} else {\n\t\tstyle.removeProperty('margin');\n\n\t}\n}\n\nconst sheet = new CSSStyleSheet();\ndocument.adoptedStyleSheets.push(sheet);\n\n\n/**\n * \n * @param {CSSPageRule} page \n * @param {string} selector \n * @param {boolean} [fitWidth] \n * @param {boolean} [fitHeight] \n * @returns {CSSStyleDeclaration | null}\n */\nfunction createMarginRule(page, selector, fitWidth, fitHeight) {\n\ttry {\n\t\tconst ruleIndex = page.insertRule(`${selector} {}`, page.cssRules.length);\n\n\t\tconst rule = page.cssRules[ruleIndex];\n\t\t// @ts-ignore\n\t\tif (!(rule instanceof CSSMarginRule)) { return null; }\n\t\t/** @type {CSSStyleDeclaration} */\n\t\t// @ts-ignore\n\t\tconst style = rule.style;\n\t\tif (fitWidth) {\n\t\t\tstyle.width = 'fit-content';\n\t\t}\n\t\tif (fitHeight) {\n\t\t\tstyle.height = 'fit-content';\n\t\t}\n\t\treturn style;\n\t} catch (e) {\n\t}\n\treturn null;\n\n}\n/**\n * \n * @param {CSSStyleSheet} sheet\n * @param {string} [selector] \n */\nfunction createPageRule(sheet, selector) {\n\ttry {\n\t\tconst ruleIndex = sheet.insertRule(`@page ${selector || ''} {}`, sheet.cssRules.length);\n\n\t\tconst rule = sheet.cssRules[ruleIndex];\n\t\tif (!(rule instanceof CSSPageRule)) { return null; }\n\t\treturn {\n\t\t\tpage: rule.style,\n\t\t\ttopLeft: createMarginRule(rule, '@top-left', true),\n\t\t\ttopCenter: createMarginRule(rule, '@top-center'),\n\t\t\ttopRight: createMarginRule(rule, '@top-right', true),\n\t\t\tbottomLeft: createMarginRule(rule, '@bottom-left', true),\n\t\t\tbottomCenter: createMarginRule(rule, '@bottom-center'),\n\t\t\tbottomRight: createMarginRule(rule, '@bottom-right', true),\n\n\t\t\tleftTop: createMarginRule(rule, '@left-top', false, true),\n\t\t\tleftMiddle: createMarginRule(rule, '@left-middle'),\n\t\t\tleftBottom: createMarginRule(rule, '@left-bottom', false, true),\n\t\t\trightTop: createMarginRule(rule, '@right-top', false, true),\n\t\t\trightMiddle: createMarginRule(rule, '@right-middle'),\n\t\t\trightBottom: createMarginRule(rule, '@right-bottom', false, true),\n\n\t\t\ttopLeftCorner: createMarginRule(rule, '@top-left-corner'),\n\t\t\ttopRightCorner: createMarginRule(rule, '@top-right-corner'),\n\t\t\tbottomLeftCorner: createMarginRule(rule, '@bottom-left-corner'),\n\t\t\tbottomRightCorner: createMarginRule(rule, '@bottom-right-corner'),\n\t\t};\n\t} catch (e) {\n\t}\n\treturn null;\n}\nconst commonPage = createPageRule(sheet);\nconst firstPage = createPageRule(sheet, ':first');\nconst leftPage = createPageRule(sheet, ':left');\nconst rightPage = createPageRule(sheet, ':right');\nconst blankPage = createPageRule(sheet, ':blank');\n/**\n * 核心函数:使用 CSSOM 操作,无字符串拼接\n * @param {Print} print \n */\nexport function updatePrintStyle(print) {\n\tapplyPageRule(commonPage, print, true);\n\tapplyPageRule(firstPage, print.first);\n\tapplyPageRule(leftPage, print.left);\n\tapplyPageRule(rightPage, print.right);\n\tapplyPageRule(blankPage, print.blank);\n}\n\n/**\n * @type {Print.Border}\n */\nconst BorderDefine = {\n\twidth: '2px',\n\tcolor: '#0066cc',\n\tstyle: 'solid'\n};\n/**\n * @type {Print.MarginBox}\n */\nconst MarginBoxDefine = {\n\tcontent: [],\n\tfontFamily: 'Arial, sans-serif',\n\tfontSize: '18px',\n\titalic: false,\n\tbold: true,\n\tcolor: '#333333',\n\ttextAlign: 'center',\n\tlineHeight: '1.5',\n\tdirection: 'ltr',\n\tverticalAlign: 'baseline',\n\tpadding: { top: '10px', right: '5px', bottom: '10px', left: '5px' },\n\tzIndex: 1,\n\tborder: BorderDefine,\n};\n/**\n * @type {Print.Page}\n */\nconst PrintPageDefine = {\n\tsize: 'A4',\n\torientation: 'auto',\n\tmargin: ['20px', '30px', '25px', '30px'],\n\n\ttopLeft: MarginBoxDefine,\n\ttopCenter: MarginBoxDefine,\n\ttopRight: MarginBoxDefine,\n\n\tbottomLeft: MarginBoxDefine,\n\tbottomCenter: MarginBoxDefine,\n\tbottomRight: MarginBoxDefine,\n\n\tleftTop: MarginBoxDefine,\n\tleftMiddle: MarginBoxDefine,\n\tleftBottom: MarginBoxDefine,\n\n\trightTop: MarginBoxDefine,\n\trightMiddle: MarginBoxDefine,\n\trightBottom: MarginBoxDefine,\n\n\n\ttopLeftCorner: MarginBoxDefine,\n\ttopRightCorner: MarginBoxDefine,\n\tbottomLeftCorner: MarginBoxDefine,\n\tbottomRightCorner: MarginBoxDefine,\n\n\ttopBorder: BorderDefine,\n\tbottomBorder: BorderDefine,\n\tleftBorder: BorderDefine,\n\trightBorder: BorderDefine,\n};\n\n\n/**\n * @type {Print}\n */\nexport const PrintDefine = {\n\t...PrintPageDefine,\n\tleft: PrintPageDefine,\n\tright: PrintPageDefine,\n\tfirst: PrintPageDefine,\n\tblank: PrintPageDefine,\n\n};\n","/** @import { PageConfiguration } from '../services/page.mjs' */\n/** @import { Print } from '../print.mjs' */\n/** @import { PageInfo } from './home.mjs' */\n/** @import { PageIdent } from './route.mjs' */\nimport { PrintDefine } from '../print.mjs';\nimport { toUrl } from '../utils/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { createButton, remove } from './pageManager.mjs';\nimport { setLoading, switchPage, currentDomPage, currentPage } from './home.mjs';\nimport * as routerParser from './route.mjs';\nimport { createComputed, createDeeply, createState } from '../signal.mts';\nimport { Application } from '../services/index.mjs';\n\n\n\n/**\n * @typedef {object} RootPageExt\n * @property {() => { path: string; search: string; hash: string; }} get\n * @property {(path: string,search: string, hash: string) => void} update\n */\n\nexport class PageHandle extends GeneralContext {\n\t/** @readonly */\n\t#title = createState(createState(''));\n\t/** @readonly */\n\t#icon = createState(createState(''));\n\t/** @readonly */\n\t#print = createState(/** @type {Print} */({}));\n\t/** @readonly */\n\t#printDeeply = createDeeply(this.#print, PrintDefine);\n\t/** @readonly */\n\t#loading = createState(true);\n\t/** @readonly */\n\t#unsaved = createState(createState(false));\n\t/** @readonly */\n\t#guarded = createState(createComputed(() => this.#unsaved.get().get()));\n\t/** @readonly */\n\t#destroyDelayed = createState(false);\n\t/** @readonly */\n\t#bootLoading = createState(true);\n\n\t#onHide = () => { };\n\t/** @readonly @type {string} */\n\t#pageId;\n\n\n\t/** @readonly @type {string} */\n\t#root;\n\t/** @readonly */\n\t#path = createState('');\n\t/** @readonly */\n\t#search = createState('');\n\t/** @readonly */\n\t#hash = createState('');\n\n\t/** @readonly */\n\t#href = createComputed(() => {\n\t\treturn toUrl(this.#root, `${this.#path.get()}${this.#search.get()}${this.#hash.get()}`);\n\t});\n\t/** @readonly */\n\t#rootPath = createComputed(() => `${this.#pageId}/${this.#path.get()}${this.#search.get()}${this.#hash.get()}`);\n\t/** @readonly @type {PageConfiguration?} */\n\t#define;\n\t/** @readonly @type {PageIdent} */\n\t#ident;\n\n\t/** @readonly @type {PageInfo & RootPageExt} */\n\t#pageHandler;\n\t/** @readonly @type {(url: string, replace?: boolean) => void} */\n\t#open;\n\t/** @readonly @type {(p: string, replace?: boolean) => void} */\n\t#setRootPath;\n\t#abortController;\n\t/**\n\t * \n\t * @param {Object} options \n\t * @param {string} options.pageId\n\t * @param {PageConfiguration?} options.define\n\t * @param {PageIdent} options.ident\n\t * @param {string} options.root\n\t * @param {string} options.path\n\t * @param {string} options.search\n\t * @param {string} options.hash\n\t * @param {PageInfo & RootPageExt} options.pageHandler\n\t * @param {(url: string, replace?: boolean) => void} options.open\n\t * @param {(p: string, replace?: boolean) => void} options.setRootPath\n\t */\n\tconstructor({\n\t\tpageId, define, ident, root, path, search, hash, pageHandler, open, setRootPath,\n\t}) {\n\n\t\tconst ac = new AbortController();\n\t\tsuper(ac.signal);\n\t\tthis.#abortController = ac;\n\t\tthis.#root = root;\n\t\tthis.#path.set(path);\n\t\tthis.#search.set(search);\n\t\tthis.#hash.set(hash);\n\n\t\tthis.#define = define;\n\t\tthis.#ident = ident;\n\n\t\tthis.#pageId = pageId;\n\n\t\tthis.#pageHandler = pageHandler;\n\t\tthis.#open = open;\n\t\tthis.#setRootPath = setRootPath;\n\n\t\tconst list = this.#onToggle;\n\t\tpageHandler.toggle = (show) => {\n\t\t\tfor (const fn of [...list]) { fn(show); }\n\t\t};\n\t\tpageHandler.hide = () => { this.#onHide(); };\n\t\tpageHandler.get = () => ({\n\t\t\tpath: this.#path.get(),\n\t\t\tsearch: this.#search.get(),\n\t\t\thash: this.#hash.get(),\n\t\t});\n\t\tpageHandler.update = (p, s, h) => {\n\t\t\tthis.#path.set(p);\n\t\t\tthis.#search.set(s);\n\t\t\tthis.#hash.set(h);\n\t\t\tswitchPage(pageHandler, this.#bootLoading.get());\n\t\t};\n\t\tconst title = define?.title;\n\t\tif (title) { this.title = title; }\n\t\tcreateButton(pageHandler, this);\n\t}\n\n\t/** @type {Set<(show: boolean) => void>} */\n\t#onToggle = new Set();\n\t/**\n\t * \n\t * @param {(show: boolean) => void} fn \n\t * @param {AbortSignal} signal \n\t */\n\tonToggle(fn, signal) {\n\t\tif (signal?.aborted) { return; }\n\t\tconst list = this.#onToggle;\n\t\tlist.add(fn);\n\t\tsignal.addEventListener('abort', () => { list.delete(fn); }, { once: true });\n\t}\n\tget bootLoading() { return this.#bootLoading.get(); }\n\tget define() { return this.#define; }\n\tget ident() { return this.#ident; }\n\tget root() { return this.#root; }\n\tget path() { return this.#path.get(); }\n\tget search() { return this.#search.get(); }\n\tget hash() { return this.#hash.get(); }\n\tget href() { return this.#href.get(); }\n\tget current() { return this.#pageHandler === currentPage.get(); }\n\tget shown() { return this.#pageHandler === currentDomPage.get(); }\n\t/** @returns {string} */\n\tget title() { return String(this.#title.get().get() ?? ''); }\n\t/** @param {string | (() => string)} title */\n\tset title(title) { this.#title.set(typeof title === 'function' ? createComputed(title) : createState(title)); }\n\t/** @returns {string} */\n\tget icon() { return String(this.#icon.get().get() ?? ''); }\n\t/** @param {string | (() => string)} icon */\n\tset icon(icon) { this.#icon.set(typeof icon === 'function' ? createComputed(icon) : createState(icon)); }\n\tget print() { return this.#printDeeply; }\n\tset print(print) { this.#print.set(structuredClone(print)); }\n\t/** @returns {boolean} */\n\tget unsaved() { return Boolean(this.#unsaved.get().get()); }\n\t/** @param {boolean | (() => boolean)} unsaved */\n\tset unsaved(unsaved) { this.#unsaved.set(typeof unsaved === 'function' ? createComputed(unsaved) : createState(unsaved)); }\n\t/** @returns {boolean} */\n\tget guarded() { return Boolean(this.#guarded.get().get()); }\n\t/** @param {boolean | (() => boolean)} guarded */\n\tset guarded(guarded) { this.#guarded.set(typeof guarded === 'function' ? createComputed(guarded) : createState(guarded)); }\n\tget loading() { return this.#loading.get(); }\n\tset loading(loading) {\n\t\tthis.#loading.set(loading);\n\t\tif (!loading) { this.#bootLoading.set(false); }\n\t\tif (this.#pageHandler !== currentPage.get()) { return; }\n\t\tif (this.#bootLoading.get()) { return; }\n\t\tsetLoading(false);\n\t}\n\n\t/**\n\t * @param {string} url\n\t * @param {string | PageIdent} [page] \n\t * @returns {string}\n\t */\n\ttoUrl(url, page) {\n\t\tif (page) {\n\t\t\tif (typeof page === 'string') {\n\t\t\t\treturn toUrl(Application.path, page, url);\n\t\t\t} else if (typeof page === 'object') {\n\t\t\t\treturn toUrl(Application.path, routerParser.stringify(page), url);\n\t\t\t}\n\t\t}\n\t\treturn url[0] === '/' ? url : toUrl(this.#root, url);\n\t}\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {boolean | string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @param {string} url\n\t * @param {boolean | string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\topen(url, page, replace) {\n\t\tthis.#open(\n\t\t\tthis.toUrl(url, typeof page === 'boolean' ? '' : page),\n\t\t\ttypeof page === 'boolean' ? page : replace,\n\t\t);\n\t}\n\t/**\n\t * \n\t * @param {string} p \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\tsetPath(p, replace) {\n\t\tconst hashIndex = p.indexOf('#');\n\t\tthis.#hash.set(hashIndex >= 0 ? p.slice(hashIndex) : '');\n\t\tif (hashIndex >= 0) { p = p.slice(0, hashIndex); }\n\t\tif (p) {\n\t\t\tconst searchIndex = p.indexOf('?');\n\t\t\tthis.#search.set(searchIndex >= 0 ? p.slice(searchIndex) : '');\n\t\t\tif (searchIndex >= 0) { p = p.slice(0, searchIndex); }\n\t\t}\n\t\tif (p) { this.#path.set(p); }\n\t\tif (this.#pageHandler !== currentPage.get()) { return; }\n\t\tthis.#setRootPath(this.#rootPath.get(), replace);\n\t}\n\t/**\n\t * \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\tshow(replace) {\n\t\tif (this.#pageHandler === currentPage.get()) { return; }\n\t\tthis.#setRootPath(this.#rootPath.get(), replace);\n\t}\n\tget destroyDeferred() { return !this.destroyed && this.#destroyDelayed.get(); }\n\t/**\n\t * @param {boolean} [defer]\n\t * @returns {boolean}\n\t */\n\tdestroy(defer) {\n\t\tconst destroyPage = () => {\n\t\t\tthis.#onHide = () => { };\n\t\t\tconst abortController = this.#abortController;\n\t\t\tif (abortController.signal.aborted) { return false; }\n\t\t\tabortController.abort();\n\t\t\tremove(this.#pageHandler);\n\t\t\treturn true;\n\t\t};\n\t\tif (!defer) {\n\t\t\treturn destroyPage();\n\t\t}\n\t\tif (this.#destroyDelayed.get() || this.destroyed) { return false; }\n\t\tthis.#destroyDelayed.set(true);\n\t\tif (currentDomPage.get() !== this.#pageHandler) {\n\t\t\treturn destroyPage();\n\t\t}\n\t\tthis.#onHide = destroyPage;\n\t\treturn true;\n\t}\n}\n","/** @import { PageContext } from './PageContext.mjs' */\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 * @param {PageContext} ctx\n * @param {unknown} error\n * @returns {void}\n */\nexport let renderError = function renderError(ctx, error) {\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\n/**\n * @param {typeof renderError} [renderer]\n */\nexport function switchRenderError(renderer) {\n\tif (typeof renderer !== 'function') { return false; }\n\trenderError = renderer;\n}\n","import { createModal, createProgressModal, Modal } from '../dom/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\n\n\n\nexport class PageFooter extends GeneralContext {\n\t#root;\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\tget sticky() { return this.#root.classList.contains('Page-sticky'); }\n\tset sticky(sticky) {\n\t\tif (sticky) {\n\t\t\tthis.#root.classList.add('Page-sticky');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-sticky');\n\t\t}\n\t}\n\tget panel() { return this.#root.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#root.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-panel');\n\t\t}\n\t}\n\t#container = document.createElement('div');\n\tget container() { return this.#container; }\n\t/**\n\t * \n\t * @param {HTMLElement} root \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tconstructor(root, signal) {\n\t\tsuper(signal);\n\t\tthis.#root = root;\n\t\tconst container = root.appendChild(this.#container);\n\t\troot.className = 'Page-footer';\n\t\tcontainer.className = 'Page-footer-main';\n\t}\n\tget unprintable() { return this.#root.classList.contains('unprintable'); }\n\tset unprintable(unprintable) {\n\t\tif (unprintable) {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t}\n\t}\n}\n","import { createModal, createProgressModal, Modal } from '../dom/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { Menu } from '../Menu.mjs';\n\n\n\nexport class PageHeader extends GeneralContext {\n\t#root;\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\tget sticky() { return this.#root.classList.contains('Page-sticky'); }\n\tset sticky(sticky) {\n\t\tif (sticky) {\n\t\t\tthis.#root.classList.add('Page-sticky');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-sticky');\n\t\t}\n\t}\n\tget panel() { return this.#root.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#root.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-panel');\n\t\t}\n\t}\n\t#container = document.createElement('div');\n\t#menu = document.createElement('div');\n\tget container() { return this.#container; }\n\t#destroyMenu = () => { };\n\t/**\n\t * \n\t * @param {*} menus \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns \n\t */\n\tsetMenu(menus, options) {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#destroyMenu();\n\t\tconst menuContainer = this.#menu;\n\t\tconst ac = new AbortController();\n\t\tconst menu = Menu.createButtons(menus, {\n\t\t\t...options,\n\t\t\tsignal: AbortSignal.any([ac.signal, this.signal]),\n\t\t});\n\t\tif (menu) { menuContainer.appendChild(menu); }\n\t\tthis.#destroyMenu = () => { ac.abort(); menu?.remove(); this.#destroyMenu = () => { }; };\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} root \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tconstructor(root, signal) {\n\t\tsuper(signal);\n\t\tthis.#root = root;\n\t\tconst container = root.appendChild(this.#container);\n\t\tconst menu = root.appendChild(this.#menu);\n\t\troot.className = 'Page-header';\n\t\tcontainer.className = 'Page-header-main';\n\t\tmenu.className = 'Page-header-menu';\n\t}\n\tget unprintable() { return this.#root.classList.contains('unprintable'); }\n\tset unprintable(unprintable) {\n\t\tif (unprintable) {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t}\n\t}\n}\n","import { createModal, createProgressModal, Modal } from '../dom/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { createState } from '../signal.mts';\n\nexport class PageSection extends GeneralContext {\n\t#root = document.createElement('div');\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\t#container = this.#root.appendChild(document.createElement('div'));\n\tget container() { return this.#container; }\n\tget unprintable() { return this.#root.classList.contains('unprintable'); }\n\tset unprintable(unprintable) {\n\t\tif (unprintable) {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t}\n\t}\n\n\tget panel() { return this.#root.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#root.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-panel');\n\t\t}\n\t}\n\t/** @readonly @type {ParentNode} */\n\t#parent;\n\t/** @readonly @type {Node} */\n\t#placeholder;\n\t#inserted = createState(false);\n\tget inserted() { return this.#inserted.get(); }\n\tinsert() {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#inserted.set(true);\n\t\tif (this.#root.nextSibling === this.#placeholder) { return; }\n\t\tthis.#parent.insertBefore(this.#root, this.#placeholder);\n\t}\n\tremove() { this.#root.remove(); this.#inserted.set(false); }\n\t/**\n\t * \n\t * @param {ParentNode} parent \n\t * @param {Node?} next \n\t * @param {boolean} inserted \n\t * @param {AbortSignal} signal \n\t * @returns \n\t */\n\tconstructor(parent, next, inserted, signal) {\n\t\tsuper(signal);\n\t\tconst placeholder = parent.insertBefore(document.createComment(''), next);\n\t\tthis.#parent = parent;\n\t\tthis.#placeholder = placeholder;\n\n\n\t\tconst root = this.#root;\n\t\tconst container = this.#container;\n\n\t\troot.className = 'Page-section';\n\t\tcontainer.className = 'Page-section-main';\n\n\t\tif (inserted) {\n\t\t\tparent.insertBefore(root, placeholder);\n\t\t}\n\t\tthis.signal.addEventListener('abort', () => {\n\t\t\troot.remove();\n\t\t\tplaceholder.remove();\n\t\t\tthis.#inserted.set(false);\n\t\t}, { once: true });\n\t}\n}\n","import { createModal, createProgressModal, Modal } from '../dom/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { Menu } from '../Menu.mjs';\nimport { createState } from '../signal.mts';\n\nexport class PageSider extends GeneralContext {\n\t#root = document.createElement('div');\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\t#header = this.#root.appendChild(document.createElement('div'));\n\t#body = this.#root.appendChild(document.createElement('div'));\n\t#title = this.#header.appendChild(document.createElement('div'));\n\t#buttons = this.#header.appendChild(document.createElement('div'));\n\t#container = this.#body.appendChild(document.createElement('div'));\n\tget container() { return this.#container; }\n\tget unprintable() { return this.#root.classList.contains('unprintable'); }\n\tset unprintable(unprintable) {\n\t\tif (unprintable) {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t}\n\t\tif (!this.#inserted.get()) { return; }\n\t\tthis.#updateParentUnprintable();\n\t}\n\t#updateParentUnprintable() {\n\t\tconst parent = this.#parent;\n\t\tif ([...parent.children].find(v => !v.classList.contains('unprintable'))) {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t}\n\n\t}\n\tget panel() { return this.#body.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#body.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#body.classList.remove('Page-panel');\n\t\t}\n\t}\n\tget title() { return this.#title.textContent || ''; }\n\tset title(t) { this.#title.textContent = t; }\n\t/** @type {AbortController?} */\n\t#menuAbortController = null;\n\t/** @readonly @type {ParentNode} */\n\t#parent;\n\t/** @readonly @type {Node} */\n\t#placeholder;\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t * @param {Menu?} button \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns \n\t */\n\tsetMenu(menus, button, options) {\n\t\tif (this.signal.aborted) { return; }\n\t\tthis.#menuAbortController?.abort();\n\t\tconst menuAbortController = new AbortController();\n\t\tthis.#menuAbortController = menuAbortController;\n\t\tconst menuSignal = AbortSignal.any([menuAbortController.signal, this.signal]);\n\t\tconst menu = Menu.createButton(menus, button, {\n\t\t\t...options,\n\t\t\tsignal: menuSignal,\n\t\t});\n\t\tif (!menu) { return; }\n\t\tthis.#header.appendChild(menu);\n\t\tmenuSignal.addEventListener('abort', () => {\n\t\t\tmenu.remove();\n\t\t}, { once: true });\n\t}\n\t#inserted = createState(false);\n\tget inserted() { return this.#inserted.get(); }\n\tinsert() {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#inserted.set(true);\n\t\tif (this.#root.nextSibling === this.#placeholder) { return; }\n\t\tthis.#parent.insertBefore(this.#root, this.#placeholder);\n\t\tthis.#updateParentUnprintable();\n\t}\n\tremove() {\n\t\tthis.#root.remove();\n\t\tthis.#inserted.set(false);\n\t\tthis.#updateParentUnprintable();\n\t}\n\t/**\n\t * \n\t * @param {ParentNode} parent \n\t * @param {Node?} next \n\t * @param {boolean} inserted \n\t * @param {AbortSignal} signal \n\t * @returns \n\t */\n\tconstructor(parent, next, inserted, signal) {\n\t\tsuper(signal);\n\t\tconst placeholder = parent.insertBefore(document.createComment(''), next);\n\t\tthis.#parent = parent;\n\t\tthis.#placeholder = placeholder;\n\t\tconst root = this.#root;\n\t\tconst header = this.#header;\n\t\tconst body = this.#body;\n\t\tconst title = this.#title;\n\t\tconst buttons = this.#buttons;\n\t\tconst container = this.#container;\n\t\troot.className = 'Page-sider';\n\t\theader.className = 'Page-sider-header';\n\t\tbody.className = 'Page-sider-body';\n\t\tcontainer.className = 'Page-sider-body-main';\n\t\ttitle.className = 'Page-sider-title';\n\t\tbuttons.className = 'Page-sider-buttons';\n\t\tif (inserted) {\n\t\t\tparent.insertBefore(root, placeholder);\n\t\t}\n\t\tthis.signal.addEventListener('abort', () => {\n\t\t\troot.remove();\n\t\t\tplaceholder.remove();\n\t\t\tthis.#inserted.set(false);\n\t\t\tthis.#updateParentUnprintable();\n\n\t\t}, { once: true });\n\t}\n}\n","import { createModal, createProgressModal, Modal, root as rootContainer } from '../dom/index.mjs';\nimport { PageFooter } from './PageFooter.mjs';\nimport { PageHeader } from './PageHeader.mjs';\nimport { PageSection } from './PageSection.mjs';\nimport { PageSider } from './PageSider.mjs';\n\n\n\n/**\n * \n * @param {ParentNode} parent \n * @param {Node?} next \n * @param {boolean} inserted \n * @param {AbortSignal} signal \n * @returns \n */\nexport function createSider(parent, next, inserted, signal) {\n\treturn new PageSider(parent, next, inserted, signal);\n}\nexport class Page {\n\t#root = document.createElement('div');\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.#signal]) : this.#signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.#signal]) : this.#signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\t#sides = this.#root.appendChild(document.createElement('div'));\n\t#main = this.#root.appendChild(document.createElement('div'));\n\t#body = this.#main.appendChild(document.createElement('div'));\n\t#container = this.#body.appendChild(document.createElement('div'));\n\t#destroyed = false;\n\t/** @type {PageHeader?} */\n\t#header = null;\n\t/** @type {PageFooter?} */\n\t#footer = null;\n\t/** @type {'scroll' | 'flex'} */\n\t#mode = 'scroll';\n\tget destroyed() { return this.#destroyed; }\n\tget container() { return this.#container; }\n\tget mode() { return this.#mode; }\n\tset mode(mode) {\n\t\tconst root = this.#root;\n\t\troot.classList.remove(`Page-mode-${this.#mode}`);\n\t\tthis.#mode = mode;\n\t\troot.classList.add(`Page-mode-${mode}`);\n\t}\n\tget panel() { return this.#body.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#body.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#body.classList.remove('Page-panel');\n\t\t}\n\t}\n\tget show() { return !this.#root.hidden; }\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\ttoggle(show) {\n\t\tthis.#root.hidden = !show;\n\t}\n\tdestroy() {\n\t\tif (this.#destroyed) { return false; }\n\t\tthis.#destroyed = true;\n\t\tthis.#root.remove();\n\t\tthis.#abortController.abort();\n\t\treturn true;\n\t}\n\t/** @type {HTMLElement?} */\n\t#headerRoot = null;\n\t/** @type {AbortController?} */\n\t#headerAbortController = null;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateHeader(signal) {\n\t\tif (this.#destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tif (signal?.aborted) {\n\t\t\tconst headerAbortController = this.#headerAbortController;\n\t\t\tif (headerAbortController) {\n\t\t\t\theaderAbortController.abort(signal.reason);\n\t\t\t}\n\t\t\tsignal.throwIfAborted();\n\t\t}\n\t\tif (this.#header) { return this.#header; }\n\t\tconst root = document.createElement('div');\n\t\tconst abortController = new AbortController();\n\t\tthis.#main.insertBefore(root, this.#main.firstChild);\n\t\tthis.#headerRoot = root;\n\t\tthis.#headerAbortController = abortController;\n\t\tconst header = new PageHeader(root, AbortSignal.any([\n\t\t\tthis.signal,\n\t\t\tabortController.signal,\n\t\t\t...signal ? [signal] : [],\n\t\t]));\n\t\tthis.#header = header;\n\t\theader.signal.addEventListener('abort', () => {\n\t\t\tthis.#headerAbortController = null;\n\t\t\tthis.#header = null;\n\t\t\tthis.#headerRoot = null;\n\t\t\troot.remove();\n\t\t}, { once: true });\n\t\treturn this.#header;\n\t}\n\t/** @type {HTMLDivElement?} */\n\t#footerRoot = null;\n\t/** @type {AbortController?} */\n\t#footAbortController = null;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateFooter(signal) {\n\t\tif (this.#destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tif (signal?.aborted) {\n\t\t\tconst footAbortController = this.#footAbortController;\n\t\t\tif (footAbortController) {\n\t\t\t\tfootAbortController.abort(signal.reason);\n\t\t\t}\n\t\t\tsignal.throwIfAborted();\n\t\t}\n\t\tif (this.#footer) { return this.#footer; }\n\t\tconst root = document.createElement('div');\n\t\tconst abortController = new AbortController();\n\t\tthis.#main.appendChild(root);\n\t\tthis.#footerRoot = root;\n\t\tthis.#footAbortController = abortController;\n\t\tconst footer = new PageFooter(root, AbortSignal.any([\n\t\t\tthis.signal,\n\t\t\tabortController.signal,\n\t\t\t...signal ? [signal] : [],\n\t\t]));\n\t\tthis.#footer = footer;\n\n\t\tfooter.signal.addEventListener('abort', () => {\n\t\t\tthis.#footAbortController = null;\n\t\t\tthis.#footer = null;\n\t\t\tthis.#footerRoot = null;\n\t\t\troot.remove();\n\t\t}, { once: true });\n\t\treturn this.#footer;\n\t}\n\t/**\n\t * \n\t * @param {'start' | 'end' | 'before' | 'after'} position \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageSection}\n\t */\n\tcreateSection(position, inserted, signal) {\n\t\tif (this.#destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tsignal?.throwIfAborted();\n\t\tconst parent = this.#main;\n\t\tlet next = null;\n\t\tswitch (position) {\n\t\t\tcase 'start': next = this.#headerRoot || parent.firstChild; break;\n\t\t\tcase 'before': next = this.#container; break;\n\t\t\tdefault:\n\t\t\tcase 'after': next = this.#container.nextSibling; break;\n\t\t\tcase 'end': next = this.#footerRoot; break;\n\t\t}\n\t\treturn new PageSection(\n\t\t\tparent,\n\t\t\tnext,\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#abortController = new AbortController();\n\t#signal = this.#abortController.signal;\n\tget signal() { return this.#signal; }\n\tget siderOpen() { return !this.#sides.hidden; }\n\tset siderOpen(open) { this.#sides.hidden = !open; }\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 createSider(\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\tthis.#main.className = 'Page-main';\n\t\tthis.#body.className = 'Page-body';\n\t\tthis.#container.className = 'Page-body-main';\n\t\tthis.#sides.className = 'Page-sides';\n\t\tconst root = this.#root;\n\t\troot.className = 'Page';\n\t\troot.hidden = !show;\n\t\trootContainer.appendChild(root);\n\t}\n}\n","/** @import { PageFrame } from '../typesDefine.mjs' */\nimport { root } from '../dom/index.mjs';\nimport { Page } from './Page.mjs';\n\n/**\n * @param {boolean} show\n */\nexport let createPage = (show) => new Page(show);\n\n/**\n * @param {PageFrame.Context} ctx\n * @returns {PageFrame}\n */\nexport let createFrame = (ctx) => {\n\tconst iframe = document.createElement('iframe')\n\tiframe.classList.add('Page-frame');\n\tctx.loading = false;\n\tiframe.hidden = !ctx.show;\n\tiframe.src = ctx.url;\n\troot.appendChild(iframe);\n\treturn {\n\t\t/**\n\t\t * \n\t\t * @param {boolean} show \n\t\t */\n\t\ttoggle(show) {\n\t\t\tiframe.hidden = !show;\n\t\t},\n\t\tdestroy() {\n\t\t\tiframe.remove();\n\t\t}\n\t};\n};\n\n/**\n * @param {(show: boolean) => Page} [renderer]\n * @param {(ctx: PageFrame.Context) => PageFrame} [frame]\n */\nexport function switchCreatePage(renderer, frame) {\n\tif (typeof renderer === 'function') {\n\t\tcreatePage = renderer;\n\t}\n\tif (typeof frame === 'function') {\n\t\tcreateFrame = frame;\n\t}\n}\n","/** @import { PageConfiguration } from '../services/page.mjs' */\n/** @import { PageSectionParam } from '../typesDefine.mjs' */\n/** @import { Page } from './Page.mjs' */\n/** @import { PageIdent } from './route.mjs' */\n/** @import { PageHandle } from './PageHandle.mjs' */\n/** @import { PageSection } from './PageSection.mjs' */\n/** @import { PageHeader } from './PageHeader.mjs' */\n/** @import { PageFooter } from './PageFooter.mjs' */\nimport GeneralContext from '../GeneralContext.mjs';\nimport { importWidget } from '../import.mjs';\nimport { renderError } from './renderError.mjs';\nimport { createPage } from './createPage.mjs';\nimport { createState } from '../signal.mts';\n/** @import { Modal } from '../dom/index.mjs' */\n\n\n\n\nexport class PageContext extends GeneralContext {\n\t/** @readonly */\n\t#destroyDelayed = createState(false);\n\t/** @readonly @type {Page} */\n\t#pageUI;\n\t/** @readonly @type {HTMLElement} */\n\t#container;\n\t/** @readonly @type {AbortController} */\n\t#abortController;\n\t/** @readonly @type {PageHandle} */\n\t#state;\n\t/**\n\t * \n\t * @param {PageHandle} state \n\t */\n\tconstructor(state) {\n\n\t\tconst ac = new AbortController();\n\t\tsuper(AbortSignal.any([ac.signal, state.signal]));\n\t\tthis.#state = state;\n\t\tthis.#abortController = ac;\n\n\t\tconst pageUI = createPage(state.current && !state.bootLoading);\n\t\tthis.#pageUI = pageUI;\n\t\tthis.#container = pageUI.container;\n\t\tif (this.signal.aborted) {\n\t\t\tpageUI.destroy?.();\n\t\t\treturn;\n\t\t}\n\t\tthis.signal.addEventListener('abort', () => {\n\t\t\tpageUI.destroy?.();\n\t\t}, { once: true });\n\t\tstate.onToggle((show) => { pageUI.toggle(show && !state.bootLoading); }, this.signal);\n\n\t}\n\t/**\n\t * \n\t * @param {unknown} [err] \n\t * @returns \n\t */\n\tsetError(err) {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#abortController.abort();\n\t\tconst ctx = new PageContext(this.#state);\n\t\trenderError(ctx, err);\n\t}\n\n\tget bootLoading() { return this.#state.bootLoading; }\n\tget define() { return this.#state.define; }\n\tget ident() { return this.#state.ident; }\n\tget root() { return this.#state.root; }\n\tget path() { return this.#state.path; }\n\tget search() { return this.#state.search; }\n\tget hash() { return this.#state.hash; }\n\tget href() { return this.#state.href; }\n\tget current() { return this.#state.current; }\n\tget shown() { return this.#state.shown; }\n\t/** @returns {string} */\n\tget title() { return this.#state.title; }\n\t/** @param {string | (() => string)} title */\n\tset title(title) { this.#state.title = title; }\n\t/** @returns {string} */\n\tget icon() { return this.#state.icon; }\n\t/** @param {string | (() => string)} icon */\n\tset icon(icon) { this.#state.icon = icon; }\n\tget print() { return this.#state.print; }\n\tset print(print) { this.#state.print = print; }\n\t/** @returns {boolean} */\n\tget unsaved() { return this.#state.unsaved; }\n\t/** @param {boolean | (() => boolean)} unsaved */\n\tset unsaved(unsaved) { this.#state.unsaved = unsaved; }\n\t/** @returns {boolean} */\n\tget guarded() { return this.#state.guarded; }\n\t/** @param {boolean | (() => boolean)} guarded */\n\tset guarded(guarded) { this.#state.guarded = guarded; }\n\tget loading() { return this.#state.loading; }\n\tset loading(loading) { this.#state.loading = loading; }\n\n\tget container() { return this.#container; }\n\tget panel() { return this.#pageUI.panel; }\n\tset panel(panel) { this.#pageUI.panel = Boolean(panel); }\n\tget mode() { return this.#pageUI.mode; }\n\tset mode(mode) {\n\t\tif (!['scroll', 'flex'].includes(mode)) { return; }\n\t\tthis.#pageUI.mode = mode;\n\t}\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) { return this.#pageUI.createModal(p1, p2); }\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\treturn this.#pageUI.createProgressModal(list, exec, options);\n\t}\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageHeader}\n\t */\n\tcreateHeader(signal) { return this.#pageUI.createHeader(signal); }\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageFooter}\n\t */\n\tcreateFooter(signal) { return this.#pageUI.createFooter(signal); }\n\t/**\n\t * \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateSider(inserted, signal) {\n\t\treturn this.#pageUI.createSider(inserted, signal);\n\t}\n\t/**\n\t * \n\t * @param {'start' | 'end' | 'before' | 'after'} position \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageSection}\n\t */\n\tcreateSection(position, inserted, signal) {\n\t\treturn this.#pageUI.createSection(position, inserted, signal);\n\t}\n\t/**\n\t * \n\t * @param {{widget: string; options: string}[]} sides \n\t * @param {PageSectionParam} param \n\t */\n\trenderSides(sides, param) {\n\t\tfor (const def of sides) {\n\t\t\tconst { widget } = def;\n\t\t\tif (!widget) { continue; }\n\t\t\tconst ac = new AbortController();\n\t\t\tconst sider = this.#pageUI.createSider(false, ac.signal);\n\t\t\tif (!sider) { continue; }\n\t\t\timportWidget(widget).then(fn => {\n\t\t\t\tif (typeof fn !== 'function') {\n\t\t\t\t\tac.abort();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsider.insert();\n\t\t\t\tfn(sider, def, param);\n\t\t\t});\n\t\t}\n\n\t}\n\t/**\n\t * @param {string} url\n\t * @param {string | PageIdent} [page] \n\t * @returns {string}\n\t */\n\ttoUrl(url, page) { return this.#state.toUrl(url, page); }\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {boolean | string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @param {string} url\n\t * @param {boolean | string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\topen(url, page, replace) { return this.#state.open(url, page, replace); }\n\t/**\n\t * \n\t * @param {string} p \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\tsetPath(p, replace) { return this.#state.setPath(p, replace); }\n\t/**\n\t * \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\tshow(replace) { return this.#state.show(replace); }\n\tget destroyDeferred() { return !this.destroyed && this.#destroyDelayed.get(); }\n\t/**\n\t * @param {boolean} [defer]\n\t * @returns {boolean}\n\t */\n\tdestroy(defer) { return this.#state.destroy(defer); }\n}\n","/** @import { PageHandle } from './PageHandle.mjs' */\nimport { createFrame } from './createPage.mjs';\n\n\n/**\n * \n * @param {PageHandle} state \n * @param {string} url \n * @param {string} [title] \n */\nexport function createPageFrame(state, url, title = '') {\n\tif (title) { state.title = title; }\n\tconst signal = state.signal;\n\n\tif (signal.aborted) { return; }\n\tconst pageUI = createFrame({\n\t\tget url() { return url;},\n\t\tget show() { return state.current && !state.bootLoading;},\n\t\tget title() { return state.title; },\n\t\tset title(title) { if (signal.aborted) { return; } state.title = title; },\n\t\tget icon() { return state.icon; },\n\t\tset icon(icon) { if (signal.aborted) { return; } state.icon = icon; },\n\t\tget loading() { return state.loading; },\n\t\tset loading(loading) { if (signal.aborted) { return; } state.loading = loading; },\n\t});\n\tsignal.addEventListener('abort', () => {\n\t\tpageUI.destroy?.();\n\t}, { once: true });\n\tstate.onToggle((show) => { pageUI.toggle(show && !state.bootLoading); }, signal);\n\n}\n","/** @import { PageInfo } from './home.mjs' */\n/** @import { PageIdent } from './route.mjs' */\n/** @import { RootPageExt } from './PageHandle.mjs' */\nimport load from './load.mjs';\nimport { switchPage, currentPage } from './home.mjs';\nimport * as routerParser from './route.mjs';\nimport { PageHandle } from './PageHandle.mjs';\nimport { PageContext } from './PageContext.mjs';\nimport { createPageFrame } from './createPageFrame.mjs';\n\n/** @type {Map<string, PageInfo & RootPageExt>} */\nconst pages = new Map();\n\n/**\n * \n * @param {string} pageRoot \n * @returns \n */\nexport function find(pageRoot) {\n\treturn pages.get(pageRoot)?.get();\n}\n/**\n * \n * @param {(url: string, replace?: boolean) => void} open \n * @param {PageIdent} pageIdent \n * @param {string} parentRoot \n * @param {string} pageRoot \n * @param {string} path \n * @param {string} search \n * @param {string} hash \n * @param {(p: string, replace?: boolean) => void} setRootPath \n * @returns \n */\nexport default async function showPage(\n\topen,\n\tpageIdent,\n\tparentRoot,\n\tpageRoot,\n\tpath,\n\tsearch,\n\thash,\n\tsetRootPath,\n) {\n\tlet pageId = pageRoot;\n\tlet old = pages.get(pageId);\n\tif (old) {\n\t\told.update(path, search, hash);\n\t\treturn;\n\t}\n\t/** @type {PageInfo & RootPageExt} */\n\tconst pageHandler = {\n\t\ttoggle() { },\n\t\thide() { },\n\t\tget() { return { path, search, hash }; },\n\t\tupdate(p, s, h) {\n\t\t\tpath = p;\n\t\t\tsearch = s;\n\t\t\thash = h;\n\t\t\tswitchPage(pageHandler, true);\n\t\t},\n\t};\n\tpages.set(pageId, pageHandler);\n\tswitchPage(pageHandler, true);\n\tconst data = await load(pageIdent).catch(() => null);\n\tif (pageHandler !== currentPage.get()) {\n\t\t// 请求完数据前已经切换了,那就移除\n\t\tpages.delete(pageId);\n\t\treturn;\n\t}\n\tif (!data) {\n\t\tconst state = new PageHandle({\n\t\t\troot: `${parentRoot}${pageId}`,\n\t\t\tdefine: null,\n\t\t\tident: pageIdent,\n\t\t\tpageId: pageId,\n\t\t\tpath, search, hash,\n\t\t\tpageHandler,\n\t\t\topen,\n\t\t\tsetRootPath,\n\t\t});\n\t\tstate.signal.addEventListener('abort', () => {\n\t\t\tpages.delete(pageId);\n\t\t}, { once: true });\n\t\t// 出现错误,显示错误\n\t\tnew PageContext(state).setError(404);\n\t\treturn;\n\t}\n\tconst newPage = data.ident;\n\t// TODO: 获取新页面的 pageRoot\n\tconst newPageRoot = routerParser.stringify(newPage);\n\tif (pageId !== newPageRoot) {\n\t\tpageIdent = newPage;\n\t\t// 原始页面不存在,需要跳转为其他页面\n\t\tif (pages.get(pageId) !== pageHandler) { return; }\n\t\tpages.delete(pageId);\n\t\tconst targetPage = pages.get(newPageRoot);\n\t\tif (targetPage) {\n\t\t\t// 目标页面已存在,则单纯切换\n\t\t\tsetRootPath(`${newPageRoot}/${path}${search}${hash}`, true);\n\t\t\treturn;\n\t\t}\n\t\tpageId = newPageRoot;\n\t\tpages.set(pageId, pageHandler);\n\t\tsetRootPath(`${newPageRoot}/${path}${search}${hash}`, true);\n\t}\n\tconst widget = data.widget;\n\tif (typeof widget === 'string') {\n\t\tconst state = new PageHandle({\n\t\t\troot: `${parentRoot}${pageId}`,\n\t\t\tdefine: data.page || null,\n\t\t\tident: pageIdent,\n\t\t\tpageId: pageId,\n\t\t\tpath, search, hash,\n\t\t\tpageHandler,\n\t\t\topen,\n\t\t\tsetRootPath,\n\t\t});\n\t\tstate.signal.addEventListener('abort', () => {\n\t\t\tpages.delete(pageId);\n\t\t}, { once: true });\n\t\tcreatePageFrame(state, widget);\n\t\treturn;\n\t}\n\n\n\tconst renderer = await widget();\n\tif (pageHandler !== currentPage.get()) {\n\t\t// 页面已切换\n\t\tpages.delete(pageId);\n\t\treturn;\n\t}\n\tconst state = new PageHandle({\n\t\troot: `${parentRoot}${pageId}`,\n\t\tdefine: data.page || null,\n\t\tident: pageIdent,\n\t\tpageId: pageId,\n\t\tpath, search, hash,\n\t\tpageHandler,\n\t\topen,\n\t\tsetRootPath,\n\t});\n\tstate.signal.addEventListener('abort', () => {\n\t\tpages.delete(pageId);\n\t}, { once: true });\n\tconst pc = new PageContext(state);\n\tif (typeof renderer !== 'function') {\n\t\tpc.setError();\n\t\treturn;\n\t}\n\ttry {\n\t\tawait renderer(pc);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\tpc.setError(e);\n\t}\n}\n","/**\n *\n * @param {string} url\n * @param {boolean} [replace]\n * @returns\n */\nexport default function setHistoryUrl(url, replace) {\n\tconst {href} = location;\n\tconst u = new URL(url, href);\n\tif (u.href === href) { return; }\n\tif (replace) {\n\t\thistory.replaceState({}, '', url);\n\t} else {\n\t\thistory.pushState({}, '', url);\n\t}\n}\n","import { toUrl } from '../utils/index.mjs';\nimport showPage, { find } from './showPage.mjs';\nimport { showHome } from './home.mjs';\nimport { openUrl } from './setUrl.mjs';\nimport setHistoryUrl from './setHistoryUrl.mjs';\nimport { PageIdent } from './route.mjs';\nimport { Application } from '../services/index.mjs';\n\n\n/**\n * 页面管理器\n * @callback PathListener\n * @param {string} path\n * @param {string} search\n * @param {string} hash\n * @param {(PageIdent & {path: string})?} page \n * @returns {void}\n */\n/** @type {Map<symbol, PathListener>} */\nconst listeners = new Map();\n\n/**\n * \n * @param {PathListener} listener \n * @returns \n */\nexport function listenPath(listener) {\n\tconst symbol = Symbol();\n\tlisteners.set(symbol, listener);\n\treturn () => { listeners.delete(symbol); };\n}\n/**\n * \n * @param {(PageIdent & {path: string})?} page \n */\nexport function updatePath(page) {\n\tconst {\n\t\tpathname, search, hash,\n\t} = new URL(location.href);\n\tfor (const updatePath of [...listeners.values()]) {\n\t\tupdatePath(pathname, search, hash, page ? { ...page } : null);\n\t}\n}\n\n/**\n * \n * @param {string} path \n * @param {boolean} [replace] \n * @returns \n */\nfunction setRoot(path, replace) {\n\tsetHistoryUrl(toUrl(Application.path, path), replace);\n\tparse();\n}\n/**\n * \n * @param {URL | Location} u \n * @param {boolean} [replace] \n * @param {boolean} [inLink] \n * @returns \n */\nexport function parseFormUrl({ pathname, search, hash }, replace = true, inLink) {\n\tconst root = Application.path;\n\tlet subPath = pathname.replace(/(^|[\\\\\\/])[\\\\\\/]*/, '/');\n\tif (!subPath || subPath === '/' || subPath === root || subPath + '/' === root) {\n\t\tsetHistoryUrl(`${root}${search}${hash}`, replace);\n\t\tupdatePath(null);\n\t\tshowHome(search, hash);\n\t\treturn;\n\t}\n\tsubPath = subPath.slice(subPath.startsWith(`${root}`) ? root.length : 1);\n\tlet { path, page, pageRoot } = PageIdent.parse(subPath);\n\tif (inLink && (path || '/') === '/' && (search || '?') === '?' && (hash || '#') === '#') {\n\t\tconst page = find(pageRoot);\n\t\tif (page) { ({ path, search, search } = page); }\n\t}\n\tsetHistoryUrl(`${root}${pageRoot}${path}${search}${hash}`, replace);\n\tupdatePath({ ...page, path });\n\tshowPage(openUrl, page, root, pageRoot, path, search, hash, setRoot);\n}\n\nexport default function parse() {\n\tparseFormUrl(location)\n}\n","import { Application } from '../services/index.mjs';\nimport { parseFormUrl } from './parse.mjs';\n\n/**\n * \n * @param {string} url \n * @param {boolean} [replace] \n * @returns \n */\nexport function openUrl(url, replace) {\n\tif (setUrl(url, replace)) { return; }\n\tlocation.href = url;\n}\n\n/** @type {Set<(url: URL) => boolean>} */\nconst urlGuard = new Set();\n/**\n * \n * @param {(url: URL) => boolean} fn \n */\nexport function addUrlGuard(fn) {\n\tconst f = fn.bind(null);\n\turlGuard.add(f);\n\treturn () => { urlGuard.delete(f); };\n\n}\n/**\n * \n * @param {string} url \n * @param {boolean} [replace] \n * @param {boolean} [skipGuard] \n * @param {boolean} [inLink] \n * @returns \n */\nexport default function setUrl(url, replace, skipGuard, inLink) {\n\tconst u = new URL(url, location.href);\n\tif (u.origin !== location.origin) { return false; }\n\tif (!skipGuard) {\n\t\tfor (const fn of [...urlGuard]) {\n\t\t\tif (fn(u) === false) { return false; }\n\t\t}\n\t}\n\tif (u.origin !== location.origin) { return false; }\n\tconst path = u.pathname;\n\tif (!path.startsWith(Application.path)) { return false; }\n\tparseFormUrl(u, Boolean(replace), inLink);\n\treturn true;\n}\n","/** @import { MaybePromise } from '@yongdall/types' */\n/** @import { PageContext } from './PageContext.mjs' */\nimport setUrl from './setUrl.mjs';\nimport parse from './parse.mjs';\nimport { closeAll } from './pageManager.mjs';\nimport { isMac } from '../dom/index.mjs';\n\n/**\n * @callback PageRenderer\n * @param {PageContext} ctx\n * @returns {MaybePromise<void>}\n */\n\n/**\n * \n * @param {PointerEvent} e \n * @returns \n */\nfunction clickEventListener(e) {\n\tif (e.shiftKey) { return; }\n\tif (isMac ? e.metaKey : e.ctrlKey) { return; }\n\tif (e.defaultPrevented) { return; }\n\tfor (const a of e.composedPath()) {\n\t\tif (!(a instanceof HTMLAnchorElement)) { continue; }\n\t\tconst url = a.href;\n\t\tif (!url) { continue; }\n\t\tif ((a.target || '_self') !== '_self') { return; }\n\t\tif (setUrl(url, Boolean(a.getAttribute('replace')), false, true)) {\n\t\t\te.preventDefault();\n\t\t}\n\t\treturn;\n\t}\n}\nexport function initRouter() {\n\twindow.addEventListener('click', clickEventListener);\n\twindow.addEventListener('popstate', parse);\n\tparse();\n}\nexport function stopRouter() {\n\twindow.removeEventListener('click', clickEventListener);\n\twindow.removeEventListener('popstate', parse);\n\tcloseAll();\n}\n\nexport { addUrlGuard } from './setUrl.mjs';\nexport { switchHome } from './home.mjs';\nexport { switchCreatePage } from './createPage.mjs';\nexport { switchRenderError } from './renderError.mjs';\nexport { PageIdent, setRouter } from './route.mjs';\n\nexport { addManager, getPages, currentPage } from './pageManager.mjs';\nexport { Page } from './Page.mjs';\nexport { PageSider } from './PageSider.mjs';\nexport { PageSection } from './PageSection.mjs';\nexport { PageHeader } from './PageHeader.mjs';\nexport { PageFooter } from './PageFooter.mjs';\nexport { listenPath } from './parse.mjs';\nexport { createFrame } from './createPage.mjs';\n","/** @import { ModelConfiguration, ModelScriptConfiguration } from '../services/model.mjs' */\n\n/**\n * \n * @param {ModelScriptConfiguration | ModelConfiguration} model \n * @param {Record<string, any> | [key: string, value: any][]} params \n * @param {Record<string, any>} [defaultValue] \n * @returns \n */\nexport const createModelDefault = (model, params, defaultValue) => {\n\tconst fields = model.fields;\n\treturn (Array.isArray(params) ? params : Object.entries(params)).reduceRight((r, [k, v]) => {\n\t\tconst field = Object.hasOwn(fields, k) && fields[k];\n\t\tif (!field) { return r; }\n\t\tconst type = field?.type;\n\t\tif (!type || typeof type !== 'string') { return r; }\n\t\tif (!v && field.array) { return r; }\n\t\tif (!v && field.nullable) {\n\t\t\tr[k] = null;\n\t\t\treturn r;\n\t\t}\n\t\tif (typeof v !== 'string') {\n\t\t\tr[k] = v;\n\t\t\treturn r;\n\t\t}\n\t\tswitch (type) {\n\t\t\tcase 'i16':\n\t\t\tcase 'i32':\n\t\t\t\tif (/^[+-]?\\d+$/.test(v)) { r[k] = Number.parseInt(v); }\n\t\t\t\treturn r;\n\t\t\tcase 'i64':\n\t\t\t\tif (/^[+-]?\\d+$/.test(v)) { r[k] = v; }\n\t\t\t\treturn r;\n\t\t\tcase 'f32':\n\t\t\tcase 'f64':\n\t\t\t\tif (/^[+-]?\\d+(\\.\\d*)?([eE][+-]?\\d*)$/.test(v)) { r[k] = Number.parseFloat(v); }\n\t\t\t\treturn r;\n\t\t\tcase 'decimal':\n\t\t\tcase 'numeric':\n\t\t\tcase 'money':\n\t\t\t\tif (/^[+-]?\\d+(\\.\\d*)?([eE][+-]?\\d*)$/.test(v)) { r[k] = v; }\n\t\t\t\treturn r;\n\t\t\tcase 'bool':\n\t\t\t\tswitch (v.toLowerCase()) {\n\t\t\t\t\tcase '0': case 'n': case 'no': case 'f': case 'false':\n\t\t\t\t\t\tr[k] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '1': case 'y': case 'yes': case 't': case 'true':\n\t\t\t\t\t\tr[k] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn r;\n\t\t\tdefault:\n\t\t\t\tr[k] = v;\n\t\t\t\treturn r;\n\t\t}\n\t}, defaultValue || {});\n};\n","/** @import { FormLayout } from '@yongdall/types' */\n\nimport { createStore, renderForm } from '../form/index.mjs';\nimport { createModelDefault } from './createModelDefault.mjs';\n\n/** @import { Modal } from '../dom/index.mjs' */\n/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\nimport { modelService } from '../services/model.mjs';\n\n/**\n * \n * @param {Modal} modal \n * @param {ModelScriptConfiguration} model \n * @param {ReturnType<typeof modelService> | string} currentModel \n * @param {FormLayout?} [layout] \n * @param {Record<string, any> | [key: string, value: any][] | null} [newParams] \n */\nexport async function createDocumentInModal(modal, model, currentModel, layout, newParams) {\n\tconst header = modal.createHeader();\n\tconst store = createStore(model);\n\tstore.new = true;\n\tmodal.wide = true;\n\tmodal.inlineContainer = true;\n\n\trenderForm(store, modal.container.appendChild(document.createElement('div')), {\n\t\tmodel, editable: true,\n\t\tsignal: modal.signal,\n\t\tenableLink: Boolean(layout?.enableLinkEditable ?? layout?.enableLink),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\tstore.reset(createModelDefault(model, newParams || [], store.createDefault()));\n\n\n\tconst label = model?.label || model.id || '';\n\tconst titleArea = header.container;\n\ttitleArea.classList.add('Modal-title');\n\ttitleArea.innerText = label ? `新建:${label}` : '新建';\n\n\tconst { promise, resolve } = Promise.withResolvers();\n\n\tconst buttons = header.buttons;\n\tbuttons.classList.add('MenuButtons');\n\n\tlet creating = false;\n\tconst createButton = buttons.appendChild(document.createElement('button'));\n\tcreateButton.innerText = '创建';\n\tbuttons.appendChild(document.createElement('hr'));\n\tconst closeButton = buttons.appendChild(document.createElement('button'));\n\tcloseButton.innerText = '取消';\n\tcreateButton.addEventListener('click', async () => {\n\t\tif (creating) { return; }\n\t\tcreating = true;\n\t\tcloseButton.disabled = true;\n\t\tcreateButton.disabled = true;\n\t\ttry {\n\t\t\tconst created = await (typeof currentModel === 'string' ? modelService(currentModel) : currentModel).create(store.value);\n\t\t\talert('创建完成');\n\t\t\tresolve(created);\n\t\t} finally {\n\t\t\tcloseButton.disabled = false;\n\t\t\tcreateButton.disabled = false;\n\t\t\tcreating = false;\n\t\t}\n\t});\n\tcloseButton.addEventListener('click', () => {\n\t\tif (creating) { return; }\n\t\tresolve(null);\n\t});\n\treturn promise;\n}\n","/** @import { FormLayout } from '@yongdall/types' */\n\nimport { Pattern } from '@yongdall/common';\nimport { isMac } from '../dom/index.mjs';\nimport { createStore, renderForm } from '../form/index.mjs';\nimport { createComputed, createState, effect } from '../signal.mts';\nimport { testPermissions } from '../permission.mjs';\n/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\nimport { modelService } from '../services/model.mjs';\n\n/** @import { Modal } from '../dom/index.mjs' */\n\n/**\n * \n * @param {Modal} modal \n * @param {ModelScriptConfiguration} model \n * @param {ReturnType<typeof modelService>} currentModel \n * @param {string} id \n * @param {FormLayout?} [layout] \n * @param {object} [options] \n * @param {string} [options.href] \n * @param {boolean} [options.editable] \n * @param {boolean} [options.destroyable] \n */\nexport async function showDocumentInModal(modal, model, currentModel, id, layout, options) {\n\tconst header = modal.createHeader();\n\tconst currentDocument = (typeof currentModel === 'string' ? modelService(currentModel) : currentModel).document(id);\n\n\tconst label = model?.label || model.id || '';\n\tconst titleArea = header.container;\n\ttitleArea.classList.add('Modal-title');\n\tconst title = label ? `详情:${label}` : '详情';\n\ttitleArea.innerText = title;\n\n\tconst doc = await currentDocument.get();\n\tif (modal.destroyed) { return; }\n\ttitleArea.innerText = Pattern.generate(model?.labelPattern, doc) || title;\n\tconst store = createStore(model);\n\tconst { editable, destroyable } = options || {};\n\tstore.readonly = !editable;\n\tmodal.wide = true;\n\tmodal.inlineContainer = true;\n\trenderForm(store, modal.container.appendChild(document.createElement('div')), {\n\t\tmodel, editable,\n\t\tsignal: modal.signal,\n\t\tenableLink: Boolean(editable ? layout?.enableLinkEditable ?? layout?.enableLink : layout?.enableLink),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\tstore.reset(doc);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t/** @type {PromiseWithResolvers<void>} */\n\tconst { promise, resolve } = Promise.withResolvers();\n\n\tconst buttons = header.buttons;\n\tbuttons.classList.add('MenuButtons');\n\n\n\tconst running = createState(false);\n\tif (destroyable) {\n\t\tconst destroyable = createComputed(() => {\n\t\t\treturn testPermissions('destroy', model.permissions || [], store.value);\n\t\t});\n\t\tconst destroyButton = buttons.appendChild(document.createElement('button'));\n\t\tdestroyButton.innerText = '删除';\n\t\tbuttons.appendChild(document.createElement('hr'));\n\t\teffect(() => destroyButton.disabled = running.get() || !destroyable.get(), modal.signal);\n\t\tdestroyButton.addEventListener('click', async () => {\n\t\t\tif (!destroyable?.get()) { return; }\n\t\t\tif (modal.destroyed) { return; }\n\t\t\tif (running.get()) { return; }\n\t\t\tif (!confirm('确定要删除此文档吗?')) { return; }\n\t\t\trunning.set(true);\n\t\t\ttry {\n\t\t\t\tawait currentDocument.delete();\n\t\t\t\tresolve();\n\t\t\t} finally {\n\t\t\t\trunning.set(false);\n\t\t\t}\n\t\t});\n\t}\n\tif (editable) {\n\t\tconst createButton = buttons.appendChild(document.createElement('button'));\n\t\tcreateButton.innerText = '保存';\n\t\tbuttons.appendChild(document.createElement('hr'));\n\t\teffect(() => createButton.disabled = running.get(), modal.signal);\n\t\tcreateButton.addEventListener('click', async () => {\n\t\t\tif (modal.destroyed) { return; }\n\t\t\tif (running.get()) { return; }\n\t\t\trunning.set(true);\n\t\t\ttry {\n\t\t\t\tconst data = await currentDocument.update(store.value);\n\t\t\t\tresolve();\n\t\t\t} finally {\n\t\t\t\trunning.set(false);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tconst { href } = options || {};\n\t\tif (href) {\n\t\t\tconst openButton = buttons.appendChild(document.createElement('button'));\n\t\t\tconst a = openButton.appendChild(document.createElement('a'));\n\t\t\ta.innerText = '打开';\n\t\t\ta.href = href;\n\t\t\tbuttons.appendChild(document.createElement('hr'));\n\t\t\teffect(() => openButton.disabled = running.get(), modal.signal);\n\t\t\ta.addEventListener('click', event => {\n\t\t\t\tif (event.shiftKey) { return; }\n\t\t\t\tif (isMac ? event.metaKey : event.ctrlKey) { return; }\n\t\t\t\tif (event.altKey) { return; }\n\t\t\t\tif (modal.destroyed) { return; }\n\t\t\t\tif (running.get()) { return; }\n\t\t\t\tresolve();\n\t\t\t});\n\t\t}\n\t}\n\tconst closeButton = buttons.appendChild(document.createElement('button'));\n\tcloseButton.innerText = '关闭';\n\teffect(() => closeButton.disabled = running.get(), modal.signal);\n\tcloseButton.addEventListener('click', () => {\n\t\tif (running.get()) { return; }\n\t\tresolve();\n\t});\n\treturn promise;\n}\n","/** @import { ModelConfiguration, ModelScriptConfiguration } from '../services/model.mjs' */\nconst regex = /\\{([^}{}]+)\\}/g\n\n/**\n *\n * @param {ModelConfiguration | ModelScriptConfiguration} model\n * @returns\n */\nexport function getPrimaryFields(model) {\n\treturn Object.entries(model.fields)\n\t\t.filter(v => v[1].primary)\n\t\t.sort(([,{primary: a}],[,{primary: b}]) => (a || 0) - (b || 0))\n\t\t.map(([v]) => v);\n}\n/**\n *\n * @param {ModelConfiguration | ModelScriptConfiguration | string[]} model\n * @param {Record<string, any>} document\n * @returns\n */\nexport function toId(document, model) {\n\treturn (Array.isArray(model) ? model :getPrimaryFields(model)).map(v => document[v]).join('$');\n}\nexport { createModelDefault } from './createModelDefault.mjs'\nexport { createDocumentInModal } from './createDocumentInModal.mjs'\nexport { showDocumentInModal } from './showDocumentInModal.mjs'\n","/** @import { Menu } from './Menu.mjs' */\n/** @import { ModelScriptConfiguration } from './services/model.mjs' */\n/** @import { PageIdent } from './route/route.mjs' */\n/** @import { Store } from '@neeloong/form' */\n\nimport { allHooks } from './allHooks.mjs';\nimport { createComputed } from './signal.mts';\n\n/**\n * 命令选项\n * @typedef {Object} Command.Options\n * @property {'documents' | 'document' | 'createDocument' | 'editDocument'} type \n * @property {ModelScriptConfiguration} [model]\n * @property {PageIdent} [pageIdent]\n * @property {Record<string, any>} [document]\n * @property {Array<Record<string, any>>} [documents]\n * @property {Array<Record<string, any>>} [checkedDocuments]\n * @property {Store} [store]\n */\n\n/**\n * 命令接口\n * @typedef {Object} Command\n * @property {(options: Command.Options, menu: Menu, command: string) => boolean} disabled\n * @property {(options: Command.Options, menu: Menu, command: string) => string} toHref\n * @property {(options: Command.Options, menu: Menu, command: string) => void} exec\n */\n/**\n * @type {Partial<Command>}\n */\nconst scriptCommand = {\n\texec(options, menu, command) {\n\t\tconst { model } = options;\n\t\tif (!model) { return; }\n\t\tconst index = command.indexOf(':');\n\t\tif (index < 0) { return; }\n\t\tconst name = command.slice(index + 1);\n\t\tswitch (options.type) {\n\t\t\tcase 'documents': {\n\t\t\t\tconst scripts = model.script?.listScripts || {};\n\t\t\t\tconst script = scripts[name];\n\t\t\t\tif (typeof script !== 'function') { return; }\n\t\t\t\treturn script({\n\t\t\t\t\tmodel,\n\t\t\t\t\tget checkedDocuments() { return options.checkedDocuments; },\n\t\t\t\t\tget documents() { return options.documents; },\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase 'document':\n\t\t\tcase 'editDocument': {\n\t\t\t\tconst { store } = options;\n\t\t\t\tif (!store) { return; }\n\t\t\t\tconst scripts = model.script?.documentScripts || {};\n\t\t\t\tconst script = scripts[name];\n\t\t\t\tif (typeof script !== 'function') { return; }\n\t\t\t\treturn script({\n\t\t\t\t\tmodel,\n\t\t\t\t\tget document() { return options.document; },\n\t\t\t\t\tget store() { return store; },\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n};\nconst commandStore = createComputed(() => {\n\t/** @type {Record<string, Partial<Command>>} */\n\tconst commands = {\n\t\tscript: scriptCommand,\n\t\t...allHooks.get('commands').named(),\n\t};\n\treturn commands;\n});\n\n/**\n * @template {keyof Command} K\n * @param {K} name \n * @param {Command.Options} options \n * @param {Menu} menu \n * @returns {ReturnType<Command[K]> | void}\n */\nfunction runCommand(name, options, menu) {\n\tconst command = menu.command;\n\tif (!command) { return; }\n\tconst index = command.indexOf(':');\n\tif (index < 0) { return; }\n\tconst type = command.slice(0, index);\n\tif (!type) { return; }\n\tconst commands = commandStore.get();\n\tconst cmd = Object.hasOwn(commands, type) && commands[type];\n\tif (!cmd) { return; }\n\tconst fn = Object.hasOwn(cmd, name) && cmd[name];\n\tif (typeof fn !== 'function') { return; }\n\tconst result = fn(options, menu, command);\n\t// @ts-ignore\n\treturn result;\n}\nexport const Command = {\n\t/**\n\t * \n\t * @param {Command.Options} options \n\t * @param {Menu} menu \n\t * @returns {boolean}\n\t */\n\tdisabled(options, menu) {\n\t\treturn runCommand('disabled', options, menu) || false;\n\t},\n\n\t/**\n\t * \n\t * @param {Command.Options} options \n\t * @param {Menu} menu \n\t * @returns {string}\n\t */\n\ttoHref(options, menu) {\n\t\treturn runCommand('toHref', options, menu) || '';\n\n\t},\n\t/**\n\t * \n\t * @param {Command.Options} options \n\t * @param {Menu} menu \n\t * @returns {void}\n\t */\n\texec(options, menu) {\n\t\treturn runCommand('exec', options, menu);\n\n\t}\n\n};\n","/** @import { IconDefine } from '../typesDefine.mjs' */\nimport { allHooks } from '../allHooks.mjs';\nimport { createComputed, watch } from '../signal.mts';\nimport { createNeverAbortedSignal } from '../utils/index.mjs';\nconst logoPath = `\nM 0.29739625333333336 0.04334391666666666 M 0.06325983999999997 0.34186114333333334 H 0.08357982999999995 V 0.27435362333333335 L 0.1393469133333333 0.18517144333333335 H 0.1169949233333333 L 0.07500027666666663 0.25606563000000004 H 0.07364560999999996 L 0.03142518666666665 0.18517144333333332 H 0.007944309999999984 L 0.06325983999999997 0.2745794 Z M 0.29739625333333336 0.04334391666666666 M 0.21046684333333332 0.34411892 C 0.24659127 0.34411892 0.26668548233333333 0.32944337333333334 0.26668548233333333 0.28090117333333336 C 0.26668548233333333 0.2323589766666667 0.24659127 0.21768343000000004 0.21046684333333332 0.21768343000000004 C 0.17434241666666667 0.21768343000000004 0.15402242666666668 0.2323589766666667 0.15402242666666668 0.28090117333333336 C 0.15402242666666668 0.32944337333333334 0.17434241666666667 0.34411892 0.21046684333333332 0.34411892 Z M 0.21046684333333332 0.32763715000000004 C 0.18405085666666665 0.32763715000000004 0.17479397333333332 0.31657404666666666 0.17479397333333332 0.28090117333333336 C 0.17479397333333332 0.24545408000000002 0.18314774666666667 0.23393942 0.21046684333333332 0.23393942 C 0.23710860666666667 0.23393942 0.24613971333333332 0.24545408000000002 0.24613971333333332 0.28090117333333336 C 0.24613971333333332 0.3165740466666667 0.2382374966666667 0.32763715000000004 0.21046684333333332 0.32763715000000004 Z M 0.29739625333333336 0.04334391666666666 M 0.3592538966666667 0.21768342999999998 C 0.34435257 0.21768342999999998 0.3274192466666667 0.22152165 0.32019436133333334 0.23732608666666666 V 0.21994120666666667 H 0.30077748233333335 V 0.34186114333333334 H 0.3201943613333333 V 0.2594522966666667 C 0.32674191366666666 0.2380034166666667 0.3418690166666667 0.23506831000000003 0.35722189666666665 0.23506831000000003 C 0.37641300000000005 0.23506831000000003 0.3804769966666667 0.2459056366666667 0.3804769966666667 0.26464518333333337 V 0.34186114333333334 H 0.4001196533333333 V 0.2574202966666667 C 0.4001196533333333 0.2341651966666667 0.39108854666666665 0.21768343000000004 0.3592538966666667 0.21768343000000004 Z M 0.5233938433333333 0.21994120666666667 V 0.24274475 C 0.5186525133333334 0.22829498000000004 0.50849252 0.21768342999999998 0.48388275333333336 0.21768342999999998 C 0.4432427733333333 0.21768342999999998 0.43330855666666673 0.24613141333333333 0.43330855666666673 0.2797722866666667 C 0.43330855666666673 0.31679982333333334 0.4432427733333333 0.3418611433333334 0.48388275333333336 0.3418611433333334 C 0.5073636300000001 0.3418611433333334 0.5182009566666667 0.3335073700000001 0.5233938433333333 0.31905760000000005 V 0.3312495933333333 C 0.5233938433333333 0.35924602333333333 0.5105245166666667 0.37030913 0.4834311966666667 0.37030913 C 0.47281964666666665 0.37030913 0.46288543 0.36940602 0.4536285466666667 0.3675997966666667 V 0.38408158333333337 C 0.4615307633333333 0.3856620166666667 0.47259386999999997 0.38701668333333333 0.48320541999999994 0.38701668333333333 C 0.5245227333333333 0.38701668333333333 0.5428107233333334 0.36692246333333334 0.5428107233333334 0.33328159333333335 V 0.21994120666666667 Z M 0.48659208666666665 0.32560515333333334 C 0.45769254333333337 0.32560515333333334 0.45408010000000004 0.3050593833333333 0.45408010000000004 0.2797722866666667 C 0.45408010000000004 0.25606563 0.45701521 0.23393942 0.48659208666666665 0.23393942 C 0.51616896 0.23393942 0.5240711766666667 0.2517758566666667 0.5240711766666667 0.2797722866666667 C 0.5240711766666667 0.3088976033333333 0.51616896 0.32560515333333334 0.48659208666666665 0.32560515333333334 Z M 0.29739625333333336 0.04334391666666666 M 0.5841279533333333 0.18517144333333332 V 0.34186114333333334 H 0.6292834866666667 C 0.6742132533333334 0.34186114333333334 0.7049190200000001 0.32402471 0.7049190200000001 0.2635162933333333 C 0.7049190200000001 0.19826654999999999 0.6742132533333334 0.1851714433333333 0.6292834866666667 0.1851714433333333 Z M 0.6044479433333334 0.32402471000000005 V 0.20278210333333335 H 0.6288319333333333 C 0.6604408199999999 0.20278210333333335 0.6839216866666666 0.21361943000000003 0.6839216866666666 0.2635162933333334 C 0.6839216866666666 0.31070382666666674 0.6615696866666667 0.32402471000000005 0.6288319333333333 0.32402471000000005 Z M 0.7900370533333333 0.21768342999999998 C 0.78123172 0.21768342999999998 0.7712974866666666 0.21836076000000001 0.7622663866666667 0.21948964999999998 V 0.23664875333333335 C 0.77107172 0.23484252999999997 0.7810059533333333 0.23393942 0.7891339533333334 0.23393942 C 0.8137436866666667 0.23393942 0.8191623533333334 0.24409941666666665 0.8191623533333334 0.25877496333333333 V 0.26893495666666667 H 0.7819090533333334 C 0.75300952 0.26893495666666667 0.7335926199999999 0.27886917666666666 0.7335926199999999 0.30776871666666666 C 0.7335926199999999 0.33102381666666664 0.7464619533333333 0.34411892 0.7755872866666667 0.34411892 C 0.7941010533333333 0.34411892 0.8119374866666667 0.33644248000000004 0.8191623533333333 0.3233473766666667 L 0.8220974866666666 0.34186114333333334 H 0.8385792533333333 V 0.2553883 C 0.8385792533333333 0.23348786666666665 0.8286450200000001 0.21768342999999998 0.7900370533333333 0.21768342999999998 Z M 0.7773934866666666 0.32786293000000005 C 0.7602343866666667 0.32786293000000005 0.7536868533333334 0.32108960000000003 0.7536868533333334 0.30754294000000004 C 0.7536868533333334 0.2885776166666667 0.76316952 0.2845136166666667 0.7832637200000001 0.2845136166666667 H 0.8191623533333334 V 0.30460783 C 0.8128405866666667 0.31905760000000005 0.7979392533333334 0.32786293000000005 0.7773934866666666 0.32786293000000005 Z M 0.9069897533333334 0.34321581 C 0.9124084200000001 0.34321581 0.9162466533333335 0.3427642533333333 0.9198590866666666 0.34186114333333334 V 0.32583092999999996 C 0.9164724200000001 0.32673404 0.9133115200000002 0.3269598166666667 0.9106021866666667 0.3269598166666667 C 0.9026999866666667 0.3269598166666667 0.8993133200000001 0.32470203999999997 0.8993133200000001 0.31228427 V 0.17027012 H 0.8798964533333333 V 0.31725137999999997 C 0.8798964533333333 0.33553936999999995 0.8889275533333334 0.34321580999999995 0.9069897533333334 0.34321580999999995 Z M 0.9715620200000001 0.34321581 C 0.9769806533333334 0.34321581 0.9808188866666668 0.3427642533333333 0.98443132 0.34186114333333334 V 0.32583092999999996 C 0.9810446533333335 0.32673404 0.9778837866666668 0.3269598166666667 0.9751744533333333 0.3269598166666667 C 0.9672722200000001 0.3269598166666667 0.9638855533333334 0.32470203999999997 0.9638855533333334 0.31228427 V 0.17027012 H 0.9444686866666666 V 0.31725137999999997 C 0.9444686866666666 0.33553936999999995 0.9534997866666667 0.34321580999999995 0.9715620200000001 0.34321580999999995 Z M 0.29739625333333336 0.04334391666666666 M 0.20087005 0.5902171833333334 L 0.1977091533333333 0.5730580500000001 C 0.18867801999999997 0.57802515 0.17513132 0.5838954166666667 0.1575206133333333 0.5911203166666668 V 0.5143556833333334 H 0.20087004999999997 V 0.4827467166666667 H 0.1575206133333333 V 0.4005634166666667 L 0.1263632033333333 0.39920871666666674 V 0.4827467166666667 H 0.07940130999999999 V 0.5143556833333334 H 0.12636320333333334 V 0.6037638833333334 C 0.10514004 0.6118919166666668 0.08572310333333333 0.6186652499999999 0.06811239666666666 0.62408395 L 0.07578885666666665 0.6574991500000001 C 0.09249645333333331 0.6516288833333335 0.10965560666666664 0.6453071166666667 0.1263632033333333 0.6385337500000001 V 0.7432948833333335 C 0.1263632033333333 0.7581962833333334 0.12004140999999997 0.7636149500000001 0.10152758666666664 0.7654211833333334 L 0.08211064999999997 0.7676789500000002 L 0.09294800999999996 0.8001910500000001 L 0.11010716333333329 0.7979332500000001 C 0.1466832533333333 0.7934176833333335 0.15752061333333328 0.7875474500000001 0.15752061333333328 0.7541322500000002 V 0.6258901833333335 L 0.20357938999999997 0.6060216833333334 Z M 0.21757764666666665 0.60105455 C 0.21667453333333334 0.7058156833333333 0.21125585333333333 0.7306513166666667 0.17603443333333332 0.7929661166666667 L 0.20538561666666666 0.8069643833333334 C 0.21848075999999997 0.7848381166666667 0.22796344999999998 0.7631633833333334 0.2347368 0.7423917833333333 C 0.24151014999999998 0.7216201833333333 0.24557416 0.6976876833333334 0.24783194333333333 0.6705942833333334 H 0.3173716663333333 V 0.7934176833333334 H 0.3485290766666667 V 0.6705942833333335 H 0.4185203566666667 V 0.7383277833333335 C 0.4185203566666667 0.7590993833333335 0.4149079033333333 0.7604540500000001 0.39323318333333335 0.7631633833333334 L 0.37336469 0.7649696166666667 L 0.3846536066666667 0.7974816833333335 L 0.4036189866666667 0.7952239166666668 C 0.43929196333333337 0.7907083500000002 0.45058088 0.7830318833333334 0.45058088 0.7482620166666668 V 0.42404435000000007 H 0.21757764666666665 Z M 0.24963817 0.53241795 V 0.4565564166666667 H 0.3173716663333333 V 0.5324179500000001 Z M 0.34852907666666666 0.4565564166666667 H 0.4185203566666667 V 0.53241795 H 0.3485290766666667 Z M 0.24918661333333333 0.63853375 C 0.24963817 0.6331150833333334 0.24963817 0.6249870500000001 0.24963817 0.61369815 V 0.5640269166666667 H 0.3173716663333333 V 0.63853375 Z M 0.4185203566666667 0.5640269166666667 V 0.63853375 H 0.3485290766666667 V 0.5640269166666667 Z M 0.6610059533333333 0.5107432166666667 V 0.7184592833333333 H 0.8745922533333332 V 0.5107432166666667 H 0.7720888866666666 C 0.7761528866666666 0.49900274999999994 0.7797653533333333 0.4868107166666666 0.7829262533333332 0.4737155833333333 H 0.9116198866666666 V 0.4448159499999999 H 0.8262756866666666 C 0.8384677199999999 0.4299145833333333 0.8493050533333332 0.41501321666666663 0.8587877533333332 0.40011184999999994 L 0.8294365866666666 0.38430734999999994 C 0.8253725533333333 0.39198381666666665 0.81859922 0.4019180833333333 0.8100196533333334 0.41365854999999996 C 0.8014400533333333 0.4253990166666666 0.7937635866666666 0.4357848166666666 0.78608712 0.4448159499999999 H 0.7305456533333333 L 0.74047992 0.43804261666666666 C 0.7373190199999999 0.43126924999999994 0.7319003533333334 0.4222381166666666 0.7251269866666666 0.4114007499999999 C 0.7183536533333332 0.40011184999999994 0.7129349533333332 0.3919838166666666 0.7084193866666666 0.38611358333333323 L 0.6826806533333333 0.4014665166666666 C 0.6899055533333333 0.41049764999999994 0.7011944866666665 0.42901148333333333 0.7088709533333333 0.4448159499999999 H 0.6307516533333333 V 0.4737155833333333 H 0.7481563866666666 C 0.7440923533333332 0.4886169499999999 0.7404799199999998 0.5012605499999999 0.7368674533333333 0.5107432166666667 Z M 0.6199142900000001 0.48861695 C 0.6140440533333333 0.47732801666666663 0.6045613633333333 0.46242665 0.59146622 0.44436438333333333 C 0.5788226333333334 0.42585058333333337 0.5679852733333334 0.4118523166666667 0.5594056966666667 0.40236961666666665 L 0.5318607433333333 0.42178655 C 0.5413434300000001 0.43262391666666666 0.5517292333333335 0.44707375 0.5639212633333334 0.46558755 C 0.5761132933333333 0.48410138333333336 0.5851444266666667 0.4994543166666666 0.5910146633333333 0.51254945 Z M 0.6939695866666667 0.53648195 H 0.84162862 V 0.5712518166666667 H 0.6939695866666667 Z M 0.8027947200000001 0.7586478166666666 C 0.77073422 0.7586478166666666 0.7418345866666667 0.7581962833333333 0.7169989533333333 0.7568415833333333 C 0.6573934866666666 0.75322915 0.63617032 0.74781045 0.6045613633333333 0.7008485833333333 V 0.5473193166666667 H 0.5205718266666667 V 0.58118605 H 0.5729523966666666 V 0.7017516833333334 L 0.5169593733333333 0.7609056166666668 L 0.5354731966666667 0.7911599166666667 C 0.5571479133333334 0.7708398500000001 0.57521018 0.7518744833333335 0.5896599933333334 0.7347153166666668 C 0.6262360833333334 0.7803225500000001 0.6483623533333335 0.7857412166666669 0.7120318533333334 0.7884505500000001 C 0.7368674533333334 0.78980525 0.7657670866666667 0.7902567833333334 0.7978276200000001 0.7902567833333334 C 0.8253725533333334 0.7902567833333334 0.8651095533333334 0.7893536833333334 0.9170385533333335 0.78754745 L 0.9224572533333333 0.7559384833333334 C 0.87052822 0.7577447166666667 0.8307912533333335 0.7586478166666667 0.8027947200000001 0.7586478166666667 Z M 0.84162862 0.6317604166666667 H 0.6939695866666667 V 0.59699055 H 0.84162862 Z M 0.84162862 0.6570475833333334 V 0.69272055 H 0.6939695866666667 V 0.6570475833333334 Z\n`;\nconst defaultIcons = {\n\tuser: `\nM 0.4 0.65\nA 0.3 0.3 0 1 1 0.6 0.65\nA 0.3 0.3 0 0 1 0.4 0.65\n\nM 0.1 0.8\nA 0.4 0.18 0 0 1 0.9 0.8\nA 0.4 0.10 0 0 1 0.1 0.8\n`,\n\n\tsingleUser: `\nM 0.05 0.25\nL 0.40 0.25\n\nL 0.5 0.35\n\nL 0.6 0.25\nL 0.95 0.25\n\nL 0.80 0.4\nL 0.55 0.4\n\nL 0.5 0.35\n\nL 0.45 0.4\nL0.20 0.4\n\n\nZ\n\nM 0.12530012009609615 0.36\nA 0.4 0.4 0 1 0 0.8746998799039039 0.36\nL 0.8588523373199624 0.375\nA 0.38 0.38 0 1 1 0.14114766268003764 0.375\nZ\n\n\nM 0.20487290873252584 0.23\nA 0.4 0.4 0 0 1 0.7951270912674742 0.23\nL 0.7673948391424188 0.23\nA 0.38 0.38 0 0 0 0.2326051608575812 0.23\nZ\n`\n};\nconst iconsState = createComputed(() => {\n\t/** @type {Record<string, IconDefine>} */\n\tconst icons = {\n\t\t...defaultIcons,\n\t\t...allHooks.get('icons').named(),\n\t\tlogo: logoPath,\n\t};\n\treturn icons;\n});\n/**\n * \n * @param {string | string[]} key \n * @param {AbortSignal | boolean} [signal] \n */\nexport function createIcon(key, signal) {\n\tconst root = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\troot.setAttribute('fill', `currentColor`);\n\troot.classList.add('icon');\n\tconst keys = [key].flat().filter(Boolean);\n\tconst iconState = createComputed(keys.length ? () => {\n\t\tconst icons = iconsState.get();\n\t\tfor (const key of keys) {\n\t\t\tconst icon = Object.hasOwn(icons, key) && icons[key];\n\t\t\tif (icon) { return icon; }\n\t\t}\n\t\treturn null;\n\t} : () => null);\n\tif (signal instanceof AbortSignal && signal.aborted) { return root; }\n\tconst abortSignal = signal instanceof AbortSignal ? signal : createNeverAbortedSignal();\n\t/**\n\t * \n\t * @param {IconDefine?} icon \n\t * @returns \n\t */\n\tfunction run(icon) {\n\t\tif (Array.isArray(icon) && icon.length <= 2) {\n\t\t\tconst [iconPath, viewBox] = icon;\n\t\t\troot.setAttribute('viewBox', viewBox || '0 0 1 1');\n\t\t\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\t\t\troot.appendChild(path);\n\t\t\tpath.setAttribute('d', iconPath);\n\t\t\treturn;\n\t\t}\n\t\troot.setAttribute('viewBox', '0 0 1 1');\n\t\tif (!icon) { return; }\n\t\tif (typeof icon === 'string') {\n\t\t\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\t\t\troot.appendChild(path);\n\t\t\tpath.setAttribute('d', icon);\n\t\t\treturn;\n\t\t}\n\t\tif (typeof icon !== 'function') { return; }\n\t\ticon({ root }, abortSignal);\n\t}\n\tif (!signal) {\n\t\trun(iconState.get());\n\t} else {\n\t\twatch(() => iconState.get(), run, {\n\t\t\tsignal: abortSignal,\n\t\t\timmediate: true,\n\t\t});\n\t}\n\n\treturn root;\n\n}\n","import { pathRoots } from './paths.mjs';\n\n/**\n * @param {object} [options]\n * @param {FileSystemHandleQueryOptions['types']} [options.types]\n * @param {boolean} [options.excludeAcceptAllOption]\n * @returns {Promise<File?>}\n */\nexport async function selectFile({ types, excludeAcceptAllOption } = {}) {\n\tif ('showOpenFilePicker' in window && typeof showOpenFilePicker === 'function') {\n\t\tconst [file] = await showOpenFilePicker({\n\t\t\ttypes,\n\t\t\texcludeAcceptAllOption: Boolean(excludeAcceptAllOption && Array.isArray(types) && types.length),\n\t\t});\n\t\tif (!file) { return null; }\n\t\treturn file.getFile();\n\t}\n\tconst input = document.createElement('input');\n\tinput.type = 'file';\n\tconst accepted = Array.isArray(types) && types.map(v => Object.entries(v.accept)).flat(3) || '';\n\tif (accepted) {\n\t\tinput.accept = accepted.join(',');\n\t}\n\n\t// 如果 excludeAcceptAllOption 为 true,且没有设置 accept,则禁用所有文件选项(通过 accept 强制限制)\n\t// 但实际上 input 无法完全移除 \"All Files\",只能尽量限制\n\tif (excludeAcceptAllOption && accepted) {\n\t\t// 没有指定类型时,可以设为 '*' 来允许所有?但逻辑上 exclude 应该表示只允许明确类型\n\t\t// 所以这里我们不做特殊处理,由调用者传入 types 控制\n\t}\n\treturn new Promise((resolve, reject) => {\n\t\tinput.addEventListener('change', () => { resolve(input.files?.[0] || null); });\n\t\tinput.addEventListener('error', (e) => { reject(e.error); });\n\t\tinput.click();\n\t});\n}\n\nconst filePrefix = `+file://`\n/**\n * \n * @param {object} file \n * @param {string} file.domain \n * @param {string} file.path\n * @param {string} [name]\n */\nexport function toFileURL(file, name) {\n\tlet path = file.path;\n\tif (path[0] === '/') { path = path.slice(1); }\n\tconst d = `${filePrefix}${file.domain}/${path}`;\n\treturn name ? `${d}#${name}` : d;\n}\n\n/**\n * \n * @param {string} [uri] \n * @returns \n */\nexport function toFileLink(uri) {\n\tif (!uri || typeof uri !== 'string') { return null; }\n\tconst index = uri.indexOf('#');\n\tconst name = decodeURIComponent(\n\t\t(index >= 0 ? uri.slice(index + 1) : '')\n\t\t|| uri.replace(/[#?].*/, '').split('/').filter(Boolean).pop()\n\t\t|| '',\n\t);\n\tif (uri.slice(0, filePrefix.length).toLowerCase() === filePrefix) {\n\t\tconst [hostname, ...pathname] = uri.slice(filePrefix.length).replace(/[?#].*$/, '').split('/');\n\t\tconst filePath = pathname.filter(Boolean).join('/');\n\t\tif (!filePath) { return null; }\n\t\treturn { name, href: `${pathRoots.api}/${pathRoots.file}/${hostname || '_'}/files/${filePath}` };\n\t}\n\treturn { name, href: uri };\n}\n","import { importStyle, importWidget } from './import.mjs';\nimport pathRoots from './paths.mjs';\nimport request from './request.mjs';\nimport { User } from './user.mjs';\nimport isPluginId from './utils/isPluginId.mjs';\n\n\n/**\n * \n * @param {string} pluginId \n */\nexport default function buildPlugin(pluginId) {\n\tif (!isPluginId(pluginId)) {\n\t\tthrow new Error(`无效的 plugin: ${pluginId}`);\n\t}\n\treturn {\n\t\t/**\n\t\t * \n\t\t * @param {string} url \n\t\t * @returns \n\t\t */\n\t\timportStyle(url) { return importStyle(url, pluginId, true); },\n\t\t/**\n\t\t * \n\t\t * @param {string} url \n\t\t * @returns \n\t\t */\n\t\timport(url) { return importWidget(url, pluginId); },\n\t\trequest: request.clone().prefix(`${pathRoots.api}/client/plugins/${pluginId}`),\n\t\tuser: User.plugin(pluginId),\n\t};\n}\n","/** @import { MaybePromise } from '@yongdall/types' */\n/** @import { Authenticator, Theme } from './typesDefine.mjs' */\n/** @import { PageIdent } from './route/route.mjs' */\nimport { addManager, initRouter, stopRouter, switchCreatePage, switchRenderError, switchHome, setRouter, listenPath, currentPage } from './route/index.mjs';\nimport { importStyle, importWidget } from './import.mjs';\nimport { root } from './dom/index.mjs';\nimport setComponents from './components.mjs';\nimport { plugins } from './configuration.mjs';\nimport { allHooks, updateHooks } from './allHooks.mjs';\nimport { User } from './user.mjs';\nimport { watch } from './signal.mts';\nimport { updatePrintStyle } from './print.mjs';\nimport { setErrorAlerter } from './request.mjs';\nimport { Application } from './services/index.mjs';\n\n/**\n * @template T\n * @param {() => MaybePromise<T>} fn \n * @returns {() => Promise<T>}\n */\nfunction onceFn(fn) {\n\t/** @type {Promise<T>} */\n\tlet result;\n\treturn () => result ||= Promise.resolve().then(() => fn());\n\n}\nasync function initHooks() {\n\t/** @type {[string, any][]} */\n\tconst promises = Object.entries(plugins).map(([plugin, { hooks: hookPath }]) => {\n\t\tif (typeof hookPath !== 'string') { return ['', '']; }\n\t\tif (!hookPath) {\n\t\t\treturn [plugin, importWidget(`${plugin}`)];\n\t\t}\n\t\tif ('/#?'.includes(hookPath[0])) {\n\t\t\treturn [plugin, importWidget(`${plugin}${hookPath}`)];\n\t\t}\n\t\treturn [plugin, importWidget(`${plugin}/${hookPath}`)];\n\t});\n\tconst stylesPromises =\n\t\tObject.entries(plugins).flatMap(([plugin, { styles }]) => [styles].flat().map(path => {\n\t\t\tif (!path || typeof path !== 'string') { return; }\n\t\t\treturn importStyle(path, plugin, true);\n\t\t}));\n\tconst loaded = await Promise.all(\n\t\tpromises.filter(([plugin]) => plugin).map(v => Promise.all(v)),\n\t).then(l => l.filter(([, hook]) => hook && typeof hook === 'object'));\n\tawait Promise.all(stylesPromises);\n\tupdateHooks(Object.fromEntries(loaded));\n}\n/** @typedef {[file: string, plugin: string]} uiStyle */\n/**\n * \n * @param {uiStyle[]} [uiStyles] \n */\nasync function addStyles(uiStyles) {\n\tconst promises = [];\n\tfor (const [file, plugin] of uiStyles || []) {\n\t\tpromises.push(importStyle(file, plugin, true));\n\t}\n\tfor (const [plugin, style] of allHooks.get('styles')) {\n\t\tif (typeof style === 'string') {\n\t\t\tpromises.push(importStyle(style, plugin, true));\n\t\t}\n\t}\n\tawait Promise.all(promises);\n}\n\n/** @type {() => MaybePromise<Partial<Omit<Authenticator, \"styleFiles\"> & Record<\"styleFiles\", uiStyle[]>>>} */\nlet loadAuthenticator = () => ({});\n/** @typedef {Omit<Theme, \"styleFiles\"> & Record<\"styleFiles\", uiStyle[]>} WorkbenchTheme */\n/** @type {() => MaybePromise<Partial<WorkbenchTheme>>} */\nlet loadTheme = () => ({});\n\nlet clearPage = () => { };\nlet isWorkbench = false;\nasync function toWorkbench() {\n\tif (isWorkbench) { return; }\n\tisWorkbench = true;\n\tclearPage();\n\tlet stopped = false;\n\tclearPage = () => { stopped = true; isWorkbench = false; };\n\tconst { classNames, elements, rootClassName, setup, pageManager, updatePath, title, icon } = await loadTheme();\n\tif (stopped) { return; }\n\t/** @type {(() => void)[]} */\n\tconst destroyList = [];\n\tfor (const cn of [classNames, allHooks.get('className').values()].flat()) {\n\t\tif (cn && typeof cn === 'string') {\n\t\t\tdocument.body.classList.add(cn);\n\t\t}\n\t}\n\tif (rootClassName && typeof rootClassName === 'string') {\n\t\troot.classList.add(rootClassName);\n\t}\n\tfor (const el of [elements, allHooks.get('elements').values()].flat()) {\n\t\tif (el instanceof Element) {\n\t\t\tdocument.body.appendChild(el);\n\t\t}\n\t}\n\tif (typeof pageManager === 'function') {\n\t\tdestroyList.push(addManager(pageManager));\n\t}\n\tif (typeof updatePath === 'function') {\n\t\tdestroyList.push(listenPath(updatePath));\n\t}\n\tfor (const pageManager of allHooks.get('pageManager').values()) {\n\t\tif (!pageManager) { continue; }\n\t\tdestroyList.push(addManager(pageManager));\n\t}\n\n\tinitRouter();\n\tconst ac = new AbortController();\n\tconst signal = ac.signal;\n\n\twatch(() => title?.(currentPage) || Application.title || '拥道YongDall', title => {\n\t\tdocument.title = title;\n\t}, { signal, immediate: true });\n\twatch(() => currentPage.print, print => { updatePrintStyle(print); }, { signal, immediate: true });\n\n\tclearPage = () => {\n\t\tclearPage = () => { };\n\t\tac.abort();\n\t\tisWorkbench = false;\n\t\tstopRouter();\n\t\tfor (const destroy of destroyList) { destroy(); }\n\t\tfor (const el of [elements, allHooks.get('elements').values()].flat()) {\n\t\t\tif (el instanceof Element) {\n\t\t\t\tel.remove();\n\t\t\t}\n\t\t}\n\t\tif (rootClassName && typeof rootClassName === 'string') {\n\t\t\troot.classList.remove(rootClassName);\n\t\t}\n\t\tfor (const cn of [classNames, allHooks.get('className').values()].flat()) {\n\t\t\tif (cn && typeof cn === 'string') {\n\t\t\t\tdocument.body.classList.remove(cn);\n\t\t\t}\n\t\t}\n\t};\n\tsetup?.(signal);\n}\n/**\n * \n * @param {boolean} onlyAuthenticator \n * @returns \n */\nasync function toLogin(onlyAuthenticator) {\n\tclearPage();\n\tlet stopped = false;\n\tclearPage = () => { stopped = true; };\n\tconst authenticator = await loadAuthenticator();\n\tif (stopped) { return; }\n\tconst { classNames, elements, rootClassName } = authenticator;\n\n\tfor (const cn of [classNames].flat()) {\n\t\tif (cn && typeof cn === 'string') {\n\t\t\tdocument.body.classList.add(cn);\n\t\t}\n\t}\n\tif (rootClassName && typeof rootClassName === 'string') {\n\t\troot.classList.add(rootClassName);\n\t}\n\tfor (const el of [elements].flat()) {\n\t\tif (el instanceof Element) {\n\t\t\tdocument.body.appendChild(el);\n\t\t}\n\t}\n\tconst ac = new AbortController();\n\tclearPage = () => {\n\t\tclearPage = () => { };\n\t\tac.abort();\n\t\tfor (const el of [elements].flat()) {\n\t\t\tif (el instanceof Element) {\n\t\t\t\tel.remove();\n\t\t\t}\n\t\t}\n\t\tif (rootClassName && typeof rootClassName === 'string') {\n\t\t\troot.classList.remove(rootClassName);\n\t\t}\n\t\tfor (const cn of [classNames].flat()) {\n\t\t\tif (cn && typeof cn === 'string') {\n\t\t\t\tdocument.body.classList.remove(cn);\n\t\t\t}\n\t\t}\n\t};\n\tawait authenticator.login?.(ac.signal);\n\tif (ac.signal.aborted) { return; }\n\tawait User.load();\n}\nlet started = false;\n/**\n * \n * @param {typeof loadAuthenticator} _loadAuthenticator \n * @param {() => MaybePromise<Partial<WorkbenchTheme>>} _loadTheme \n * @param {() => MaybePromise<PageIdent.Router?>} [_loadRoute] \n * @returns \n */\nexport default async function start(_loadAuthenticator, _loadTheme, _loadRoute) {\n\tif (started) { return; }\n\tstarted = true;\n\tloadAuthenticator = onceFn(async () => {\n\t\tconst authenticator = await _loadAuthenticator();\n\t\tconst { styleFiles } = authenticator;\n\t\tawait addStyles(styleFiles);\n\t\treturn authenticator;\n\t});\n\tloadTheme = onceFn(async () => {\n\t\tconst [theme, router] = await Promise.all([\n\t\t\t_loadTheme(),\n\t\t\t_loadRoute?.(),\n\t\t]);\n\t\tif (router) { setRouter(router); }\n\n\t\tconst {\n\t\t\thome, components, styleFiles,\n\t\t\tcreatePage, createFrame, renderError,\n\t\t\talertError,\n\t\t} = theme;\n\t\tawait addStyles(styleFiles);\n\t\tswitchHome(home);\n\t\tsetComponents(components);\n\t\tsetErrorAlerter(alertError);\n\t\tswitchCreatePage(createPage, createFrame);\n\t\tswitchRenderError(renderError);\n\t\treturn theme;\n\t});\n\tawait initHooks();\n\tif (location.pathname === Application.authPath && location.search.length > 1) {\n\t\tUser.login();\n\t} else {\n\t\tawait User.load();\n\t}\n\twatch(() => User.waitLogin, waitLogin => {\n\t\tif (waitLogin) {\n\t\t\ttoLogin(false);\n\t\t} else {\n\t\t\ttoWorkbench();\n\t\t}\n\t}, {\n\t\timmediate: true\n\t});\n\n}\n","type JSZip = import('jszip');\n\nasync function importJSZip() {\n\t// @ts-ignore\n\tconst JSZip: new () => JSZip = await import('jszip').then(v => v.default);\n\treturn JSZip;\n}\n\nexport const MIME: { [key: string]: readonly string[] } = {\n\t'application/zip': ['.zip'],\n};\n\n/**\n * 解析 ZIP 文件并返回包含文件名和对应 Blob 内容的记录对象\n * @param file - ZIP 文件的 Blob、ArrayBuffer 或 ArrayBufferView 对象\n * @returns Promise 对象,解析成功后返回 Record<string, Blob | null>\n */\nexport async function parse(\n\tfile: Blob | ArrayBuffer | ArrayBufferView<ArrayBuffer>\n): Promise<Record<string, Blob | null>> {\n\tconst JSZip = await importJSZip();\n\tconst zip = new JSZip();\n\tif (file instanceof Blob) {\n\t\tawait zip.loadAsync(file);\n\t} else if (ArrayBuffer.isView(file)) {\n\t\tawait zip.loadAsync(new Uint8Array(file.buffer, file.byteOffset, file.byteLength));\n\t} else {\n\t\tawait zip.loadAsync(file);\n\t}\n\n\tconst result: Record<string, Blob | null> = {};\n\n\tfor (const [fileName, fileEntry] of Object.entries(zip.files)) {\n\t\tresult[fileName] = fileEntry.dir ? null : await fileEntry.async('blob');\n\t}\n\treturn result;\n}\n\nexport async function create(\n\tfiles: Record<string, string | Blob | ArrayBuffer | ArrayBufferView<ArrayBuffer> | null>,\n\tname?: string,\n) {\n\tconst JSZip = await importJSZip();\n\tconst zip = new JSZip();\n\tfile: for (const [path, file] of Object.entries(files)) {\n\t\tconst paths = path.split('/').filter(Boolean);\n\t\tif (!paths.length) { continue; }\n\t\tconst isDir = path.endsWith('/') || file == null;\n\t\tconst name = isDir ? '' : paths.pop();\n\t\ttry {\n\t\t\tlet dir = zip;\n\t\t\tfor (const p of paths) {\n\t\t\t\tconst folder = dir.folder(p);\n\t\t\t\tif (!folder) { continue file; }\n\t\t\t\tdir = folder;\n\t\t\t}\n\t\t\tif (!name) { continue; }\n\t\t\tif (typeof file === 'string' || file instanceof Blob || file instanceof ArrayBuffer) {\n\t\t\t\tdir.file(name, file);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ArrayBuffer.isView(file)) {\n\t\t\t\tdir.file(name, new Uint8Array(file.buffer, file.byteOffset, file.byteLength));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t} catch {\n\n\t\t}\n\t}\n\tconst blob = await zip.generateAsync({ type: 'blob' });\n\treturn new File(\n\t\t[blob],\n\t\t`${name || 'out'}.zip`,\n\t\t{ type: 'application/zip' },\n\t);\n}\n"],"mappings":"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EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["Signal","set","fill","parse","stringify","parse","toTime","toDate","parse","parseDate","date","list","parse","defaultPipelines","values","#config","#hooks","#stringTag","#keys","#handlers","#do","build","DotRequest","pathRoots","path","require","SExpr.fns","SExpr.build","enumerations","load","configuration.applicationId","configuration.path","root","title","pages","exec","Search.exec","Pattern.generate","ArrayStore","Search.parse","Search.fill","Search.exec","modelService","ArrayStore","ObjectStore","encode","encode","decode","Media.createVideoDialog","renderStore","renderStoreForm","Store","#waitDestroy","#signal","#destroyed","#container","#root","List","#table","#thead","#createUrl","#renderList","#labelPattern","#fieldsShow","#idFields","#tr","#tbody","#documents","Pattern.generate","FormList","#pagination","#container","#buttons","#destroyMenu","#menu","#root","#dialog","#body","#ac","#cancelable","#bodyMain","#headerAbortController","#header","#footAbortController","#footer","#store","#state","#root","#promiseWithResolvers","#index","#cancelable","#title","#pages","#currentPage","#prevPage","#nextPage","#completable","#resolve","#ac","#reject","#promise","pages","Search.parse","load","pages","currentPage","rootContainer","loadingContainer","triggerLoading","stringify","parse","parse","Ident.decode","Ident.parse","Ident.stringify","Ident.encode","Code128.encode","#print","#unsaved","#root","#path","#search","#hash","#pageId","#abortController","#define","#ident","#pageHandler","#open","#setRootPath","#onToggle","#onHide","#bootLoading","#href","#title","#icon","#printDeeply","#guarded","#loading","routerParser.stringify","#rootPath","#destroyDelayed","errors","#root","#container","#root","#container","#destroyMenu","#menu","#root","#container","#inserted","#placeholder","#parent","#root","#header","#body","#container","#inserted","#updateParentUnprintable","#parent","#title","#menuAbortController","#placeholder","#buttons","#signal","#root","#main","#body","#destroyed","#container","#mode","#abortController","#headerAbortController","#header","#headerRoot","#footAbortController","#footer","#footerRoot","#sides","root","#state","#abortController","#pageUI","#container","#destroyDelayed","load","routerParser.stringify","parse","parse","Pattern.generate","request","pathRoots","currentPage","MIME"],"sources":["../../packages/web/data/signal.mts","../../packages/web/data/GlobalState.mts","../../packages/web/data/EnvState.mts","../../packages/web/data/DataBus.mts","../../packages/common/Search/util.mjs","../../packages/common/Search/exec.mjs","../../packages/common/Search/fill.mjs","../../packages/common/Search/parse.mjs","../../packages/common/Search/merge.mjs","../../packages/common/Search/stringify.mjs","../../packages/common/Search/toWhere.mjs","../../packages/common/Search/index.mjs","../../packages/common/Datetime.mjs","../../packages/common/Pattern/parse.mts","../../packages/common/Pattern/pipelines.mts","../../packages/common/Pattern/toGenerator.mts","../../packages/common/Pattern/generate.mts","../../packages/common/Pattern/toGenerate.mts","../../packages/common/Pattern/index.mts","../../packages/common/transformError.mjs","../../packages/common/Hook.mjs","../../packages/common/ErrorHandler.mjs","../../packages/common/LazyPromise.mjs","../../packages/common/SExpr/SError.mts","../../packages/common/SExpr/compile.mts","../../packages/common/SExpr/fns.mts","../../packages/common/SExpr/index.mts","../../packages/common/model.mjs","../../packages/common/utils/pathVerify.mts","../../packages/common/yieldPermissionConstraintFields.mjs","../../packages/common/index.mjs","../../packages/web/paths.mjs","../../packages/web/utils/date.mjs","../../packages/web/request.mts","../../packages/web/configuration.mjs","../../packages/web/importmap.mjs","../../packages/web/import.mjs","../../packages/web/allHooks.mts","../../packages/web/form/field.mjs","../../packages/web/utils/state.mjs","../../packages/web/user.mjs","../../packages/web/permission.mjs","../../packages/web/form/toSchema.mts","../../packages/web/ResponseError.mjs","../../packages/web/services/createPromisesAndStates.mjs","../../packages/web/services/toPromiseInterface.mjs","../../packages/web/services/model.mjs","../../packages/web/services/enumeration.mjs","../../packages/web/services/formLayout.mjs","../../packages/web/services/permissions.mjs","../../packages/web/services/application.mts","../../packages/web/DataSource/modelFilter.mjs","../../packages/web/DataSource/createExec.mjs","../../packages/web/DataSource/filterList.mjs","../../packages/web/DataSource/build.mjs","../../packages/web/enumerations.mjs","../../packages/web/DataSource/loadValues.mjs","../../packages/web/DataSource/loadArray.mjs","../../packages/web/DataSource/flat.mjs","../../packages/web/DataSource/index.mjs","../../packages/web/form/createStoreField.mjs","../../packages/web/utils/createNeverAbortedSignal.mts","../../packages/web/utils/toUrl.mjs","../../packages/web/utils/isPluginId.mjs","../../packages/web/utils/waitAbortSignal.mjs","../../packages/web/utils/image2data.mts","../../packages/web/utils/code128.mjs","../../packages/web/utils/Media.mts","../../packages/web/utils/Qrcode.mts","../../packages/web/icons/index.mjs","../../packages/web/form/renderStoreForm.mjs","../../packages/web/form/renderForm.mjs","../../packages/web/form/createStore.mjs","../../packages/web/form/createShowField.mjs","../../packages/web/form/createQuickFilters.mjs","../../packages/web/form/createFilter.mjs","../../packages/web/form/createFieldFilter.mjs","../../packages/web/form/createFilters.mjs","../../packages/web/dom/root.mjs","../../packages/web/dom/setIcon.mjs","../../packages/web/GeneralContext.mjs","../../packages/web/dom/ModalFooter.mjs","../../packages/web/form/List.mjs","../../packages/web/components.mjs","../../packages/web/Menu.mjs","../../packages/web/dom/ModalHeader.mjs","../../packages/web/dom/Modal.mjs","../../packages/web/dom/createModal.mjs","../../packages/web/dom/createProgressModal.mjs","../../packages/web/dom/Guide.mjs","../../packages/web/dom/index.mjs","../../packages/web/form/showFilterDialog.mjs","../../packages/web/form/showSortDialog.mjs","../../packages/web/script/index.mjs","../../packages/web/services/page.mjs","../../packages/web/route/load.mjs","../../packages/web/route/pageManager.mjs","../../packages/web/route/renderHome.mjs","../../packages/web/route/loadingContainer.mjs","../../packages/web/route/home.mjs","../../packages/web/Ident.mjs","../../packages/web/route/route.mjs","../../packages/web/print.mjs","../../packages/web/route/PageHandle.mjs","../../packages/web/route/renderError.mjs","../../packages/web/route/PageFooter.mjs","../../packages/web/route/PageHeader.mjs","../../packages/web/route/PageSection.mjs","../../packages/web/route/PageSider.mjs","../../packages/web/route/Page.mjs","../../packages/web/route/createPage.mjs","../../packages/web/route/PageContext.mjs","../../packages/web/route/createPageFrame.mjs","../../packages/web/route/showPage.mjs","../../packages/web/route/setHistoryUrl.mjs","../../packages/web/route/parse.mjs","../../packages/web/route/setUrl.mjs","../../packages/web/route/index.mjs","../../packages/web/model/createModelDefault.mjs","../../packages/web/model/createDocumentInModal.mjs","../../packages/web/model/showDocumentInModal.mjs","../../packages/web/model/index.mjs","../../packages/web/Command.mjs","../../packages/web/file.mjs","../../packages/web/buildPlugin.mjs","../../packages/web/start.mjs","../../packages/web/files/zip.mts","../../packages/web/files/Sheet.mts"],"sourcesContent":["import { Signal } from 'signal-polyfill';\n\n/**\n * @template T\n */\nexport interface State<T> {\n\tget(): T;\n\tset(newValue: T): void;\n}\n\n/**\n * 相应式执行\n * @param fn 执行函数\n * @param signal 可选的中断信号\n */\nexport function effect(fn: () => void, signal?: AbortSignal): void {\n\tlet needsEnqueue = true;\n\tif (signal?.aborted) { return; }\n\tconst w = new Signal.subtle.Watcher(() => {\n\t\tif (!needsEnqueue) { return; }\n\t\tneedsEnqueue = false;\n\t\tqueueMicrotask(() => {\n\t\t\tneedsEnqueue = true;\n\t\t\tfor (const s of w.getPending()) {\n\t\t\t\ts.get();\n\t\t\t}\n\t\t\tw.watch();\n\t\t});\n\t});\n\tconst computed = new Signal.Computed(fn);\n\n\tw.watch(computed);\n\tcomputed.get();\n\tsignal?.addEventListener('abort', () => {\n\t\tw.unwatch(computed);\n\t}, { once: true });\n}\n\n/**\n * 创建可赋值计算值\n * @template T\n * @param getter 取值方法或取值方法数组\n * @param callback 回调函数,接收当前值和旧值\n * @param options 配置选项\n * @param options.immediate 是否立即执行一次\n * @param options.signal 中断信号\n */\nexport function watch<T>(\n\tgetter: (() => T)[],\n\tcallback: (\n\t\tvalue: T[],\n\t\toldValue: T[] | undefined,\n\t\tonCleanup: ((() => AbortSignal) & ((cleanupFn: () => void) => void)),\n\t) => void,\n\toptions?: { immediate?: boolean; signal?: AbortSignal },\n): void;\n\n/**\n * 创建可赋值计算值\n * @template T\n * @param getter 取值方法或取值方法数组\n * @param callback 回调函数,接收当前值和旧值\n * @param options 配置选项\n * @param options.immediate 是否立即执行一次\n * @param options.signal 中断信号\n */\nexport function watch<T>(\n\tgetter: (() => any)[],\n\tcallback: (\n\t\tvalue: any[],\n\t\toldValue: any[] | undefined,\n\t\tonCleanup: ((() => AbortSignal) & ((cleanupFn: () => void) => void)),\n\t) => void,\n\toptions?: { immediate?: boolean; signal?: AbortSignal },\n): void;\n\n/**\n * 创建可赋值计算值\n * @template T\n * @param getter 取值方法或取值方法数组\n * @param callback 回调函数,接收当前值和旧值\n * @param options 配置选项\n * @param options.immediate 是否立即执行一次\n * @param options.signal 中断信号\n */\nexport function watch<T>(\n\tgetter: () => T,\n\tcallback: (\n\t\tvalue: T,\n\t\toldValue: T | undefined,\n\t\tonCleanup: ((() => AbortSignal) & ((cleanupFn: () => void) => void))\n\t) => void,\n\toptions?: { immediate?: boolean; signal?: AbortSignal },\n): void;\n\n/**\n * 创建可赋值计算值\n * @template T\n * @param getter 取值方法或取值方法数组\n * @param callback 回调函数,接收当前值和旧值\n * @param options 配置选项\n * @param options.immediate 是否立即执行一次\n * @param options.signal 中断信号\n */\nexport function watch<T>(\n\tgetter: (() => T) | (() => T)[],\n\tcallback: (\n\t\tvalue: T | T[],\n\t\toldValue: T | T[] | undefined,\n\t\tonCleanup: ((() => AbortSignal) & ((cleanupFn: () => void) => void)),\n\t) => void,\n\t{ immediate, signal }: { immediate?: boolean; signal?: AbortSignal } = {},\n): void {\n\tconst isArray = Array.isArray(getter);\n\tconst getters = isArray ? getter : [getter];\n\tlet value: T[] | null = null;\n\tlet ac: AbortController | null = null;\n\teffect(() => {\n\t\tconst val = getters.map(v => v());\n\t\tconst oldValue = value;\n\t\tvalue = val;\n\t\tif (oldValue) {\n\t\t\tif (oldValue.findIndex((v, i) => !Object.is(v, val[i])) < 0) { return; }\n\t\t} else {\n\t\t\tif (!immediate) { return; }\n\t\t}\n\t\tac?.abort();\n\t\tac = new AbortController();\n\t\tconst cbSignal = signal ? AbortSignal.any([signal, ac.signal]) : ac.signal;\n\t\tfunction onCleanup(): AbortSignal;\n\t\tfunction onCleanup(fn: () => void): void;\n\t\tfunction onCleanup(fn?: () => void): AbortSignal | void {\n\t\t\tif (!fn) { return cbSignal; }\n\t\t\tcbSignal.addEventListener('abort', () => fn(), { once: true });\n\t\t}\n\t\tcallback(\n\t\t\tisArray ? [...val] : val[0],\n\t\t\toldValue ? isArray ? [...oldValue] : oldValue[0] : undefined,\n\t\t\tonCleanup,\n\t\t);\n\t}, signal);\n}\n\n/**\n * 创建响应式状态\n * @template T\n * @param initValue 初始值\n * @returns 一个响应式状态对象\n */\nexport function createState<T>(initValue: T): State<T>;\n\n/**\n * 创建响应式状态\n * @template T\n * @param initValue 初始值\n * @returns 一个响应式状态对象\n */\nexport function createState<T>(initValue?: T): State<T | undefined>;\n\n/**\n * 创建响应式状态\n * @template T\n * @param initValue 初始值\n * @returns 一个响应式状态对象\n */\nexport function createState<T>(initValue?: T): State<T | undefined> {\n\treturn new Signal.State(initValue);\n}\n\n/**\n * 创建计算状态\n * @template T\n * @param get 获取函数\n * @param set 设置函数(可选)\n * @returns 一个响应式状态对象\n */\nexport function createComputed<T>(get: () => T, set?: (newValue: T) => void): State<T> {\n\tconst s = new Signal.Computed(get);\n\treturn {\n\t\tget() { return s.get(); },\n\t\tset: typeof set === 'function' ? set : () => {},\n\t};\n}\n\n/**\n * 创建安全计算状态,防止递归更新\n * @template T\n * @param initialValue 初始值\n * @param get 获取函数\n * @param set 设置函数(可选)\n * @returns 一个响应式状态对象\n */\nexport function createSafeComputed<T>(initialValue: T, get: () => T, set?: (newValue: T) => void): State<T> {\n\tconst s = new Signal.Computed(get);\n\tlet running = false;\n\tlet value = initialValue;\n\treturn {\n\t\tget() {\n\t\t\tif (running) { return value; }\n\t\t\ttry {\n\t\t\t\trunning = true;\n\t\t\t\tvalue = s.get();\n\t\t\t\treturn value;\n\t\t\t} finally {\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t},\n\t\tset: typeof set === 'function' ? set : () => {},\n\t};\n}\n\n/**\n * 创建深层响应式状态\n * @template T\n * @param state 父状态\n * @param struct 结构定义\n * @returns 具有深层响应式属性的对象\n */\nexport function createDeeply<T extends Record<string, any>>(state: State<T>, struct: Record<string, any>): T {\n\tconst descriptorMap: [string, PropertyDescriptor][] = Object.entries(struct).map(([k, v]) => {\n\t\tconst computed = createComputed(\n\t\t\t() => state.get()?.[k],\n\t\t\t(v) => state.set({ ...state.get(), [k]: v })\n\t\t);\n\t\tlet get = () => computed.get();\n\t\tlet set = (v: any) => computed.set(v);\n\t\tif (v && typeof v === 'object' && !Array.isArray(v)) {\n\t\t\tlet children: any = null;\n\t\t\tget = () => children ||= createDeeply(computed as State<any>, v);\n\t\t\tset = v => computed.set(structuredClone(v));\n\t\t}\n\t\treturn [k, {\n\t\t\tget, set, enumerable: true,\n\t\t\tconfigurable: true,\n\t\t}];\n\t});\n\t// @ts-ignore\n\treturn Object.defineProperties({}, Object.fromEntries(descriptorMap));\n}\n\ninterface TickItem {\n\ttick: State<number>;\n\tcount: number;\n\tstop(): void;\n}\n\nconst ticks = new Map<number, TickItem>();\n\n/**\n * 创建响应式计时器\n * @param interval 间隔时间(毫秒)\n * @param signal 可选的中断信号\n * @returns 表示计时次数的响应式状态\n */\nexport function createTick(interval: number, signal?: AbortSignal): State<number> {\n\tif (signal?.aborted) { return createComputed(() => 0); }\n\tlet item = ticks.get(interval);\n\tif (!item) {\n\t\tconst tick = createState(0);\n\t\tconst start = performance.now();\n\t\tlet timerId = setTimeout(function step() {\n\t\t\tconst allTimes = performance.now() - start;\n\t\t\tconst n = Math.floor(allTimes / interval);\n\t\t\ttick.set(n);\n\t\t\tconst delay = (n + 1) * interval - allTimes;\n\t\t\ttimerId = setTimeout(step, Math.max(0, delay));\n\t\t}, interval);\n\t\titem = {\n\t\t\ttick: createComputed(() => tick.get()), \n\t\t\tcount: 0, \n\t\t\tstop() {\n\t\t\t\tclearTimeout(timerId);\n\t\t\t\tif (ticks.get(interval) !== item) { return; }\n\t\t\t\tticks.delete(interval);\n\t\t\t}\n\t\t};\n\t\tticks.set(interval, item);\n\t}\n\titem.count++;\n\tsignal?.addEventListener('abort', () => {\n\t\titem.count--;\n\t\tif (item.count) { return; }\n\t\titem.stop();\n\t}, { once: true });\n\treturn item.tick;\n}\n","import { createState } from './signal.mts';\n\nexport interface GlobalState {\n\t[key: string | symbol]: any;\n}\nexport const GlobalState: Partial<GlobalState> = new Proxy(Object.create(null), {\n\tget(target: GlobalState, key: string | symbol) {\n\t\tif (!Reflect.has(target, key)) {\n\t\t\tconst state = createState();\n\t\t\tReflect.defineProperty(target, key, {\n\t\t\t\tget: () => state.get(),\n\t\t\t\tset: (newValue) => state.set(newValue),\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: false\n\t\t\t});\n\t\t}\n\t\treturn target[key];\n\t},\n\tset(target: GlobalState, key: string | symbol, value: any) {\n\t\tif (Reflect.has(target, key)) {\n\t\t\ttarget[key] = value;\n\t\t\treturn true;\n\t\t}\n\t\tconst state = createState(value);\n\t\treturn Reflect.defineProperty(target, key, {\n\t\t\tget: () => state.get(),\n\t\t\tset: (newValue) => state.set(newValue),\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false\n\t\t});\n\t},\n\thas(target: GlobalState, key: string | symbol) {\n\t\treturn Reflect.has(target, key);\n\t},\n\tdeleteProperty(target: GlobalState, key: string | symbol) {\n\t\treturn false\n\t},\n\townKeys(target: GlobalState) {\n\t\treturn Reflect.ownKeys(target);\n\t},\n\tdefineProperty(target: GlobalState, key: string | symbol, descriptor: PropertyDescriptor) {\n\t\treturn false;\n\t},\n\n\tgetOwnPropertyDescriptor(target: GlobalState, key: string | symbol) {\n\t\treturn Reflect.getOwnPropertyDescriptor(target, key);\n\t},\n\n\tsetPrototypeOf(target: GlobalState, proto: object | null) {\n\t\treturn false;\n\t},\n\tgetPrototypeOf(target: GlobalState) { return null; },\n\tpreventExtensions(target: GlobalState) { return false; },\n\tisExtensible(target: GlobalState) { return true; },\n});\n","import type { State } from './signal.mts';\nimport { createComputed, createState } from './signal.mts';\nexport interface EnvState {\n\tuser: string;\n\tvisitor: string;\n\torganization: string;\n\tapplication: string;\n\t[key: string | symbol]: any;\n}\nconst envStates: Partial<Record<string | symbol, State<State<any>>>> = Object.create(null);\nconst envState = Object.create(null);\n\nexport const EnvState: Partial<EnvState> = new Proxy(envState, {\n\tget(target: EnvState, key: string | symbol) {\n\t\tif (!Reflect.has(target, key)) {\n\t\t\tconst state = envStates[key] || createState(createComputed(() => {}, () => {}));\n\t\t\tenvStates[key] = state;\n\t\t\tReflect.defineProperty(target, key, {\n\t\t\t\tget: () => state.get().get(),\n\t\t\t\tset: v => state.get().set(v),\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: false\n\t\t\t});\n\t\t}\n\t\treturn target[key];\n\t},\n\tset(target: EnvState, key: string | symbol, value: any) {\n\t\treturn false;\n\t},\n\thas(target: EnvState, key: string | symbol) {\n\t\treturn Reflect.has(target, key);\n\t},\n\tdeleteProperty(target: EnvState, key: string | symbol) {\n\t\treturn false\n\t},\n\townKeys(target: EnvState) {\n\t\treturn Reflect.ownKeys(target);\n\t},\n\tdefineProperty(target: EnvState, key: string | symbol, descriptor: PropertyDescriptor) {\n\t\treturn false;\n\t},\n\n\tgetOwnPropertyDescriptor(target: EnvState, key: string | symbol) {\n\t\treturn Reflect.getOwnPropertyDescriptor(target, key);\n\t},\n\n\tsetPrototypeOf(target: EnvState, proto: object | null) {\n\t\treturn false;\n\t},\n\tgetPrototypeOf(target: EnvState) { return null; },\n\tpreventExtensions(target: EnvState) { return false; },\n\tisExtensible(target: EnvState) { return true; },\n});\n/**\n * 设置环境变量(唯一合法的写入方式)\n * @param key 环境变量的键名\n * @param state 响应式 State 对象\n */\nexport function setEnvState<K extends string | symbol>(key: K, state: State<EnvState[K]>): void {\n\tconst st = envStates[key];\n\tif (st) {\n\t\tst.set(state);\n\t\treturn;\n\t}\n\tconst newState = createState(state);\n\tenvStates[key] = newState\n\n\tObject.defineProperty(envState, key, {\n\t\tget: () => newState.get().get(),\n\t\t\t\tset: v => newState.get().set(v),\n\t\tenumerable: true,\n\t\tconfigurable: false\n\t});\n}\n","\nexport interface DataBus {\n\t[key: string | symbol]: any;\n}\nfunction set(target: DataBus, key: string | symbol, value: any) {\n\tconst data = structuredClone(value);\n\tlet timeout: any = null;\n\tconst get = () => {\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(() => {\n\t\t\tif (Reflect.getOwnPropertyDescriptor(target, key)?.get !== get) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tReflect.deleteProperty(target, key);\n\t\t}, 10 * 1000);\n\t\treturn structuredClone(data);\n\t}\n\treturn Reflect.defineProperty(target, key, {\n\t\tget,\n\t\tset: (newValue) => set(target, key, newValue),\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n}\nexport const DataBus: Partial<DataBus> = new Proxy(Object.create(null), {\n\tget(target: DataBus, key: string | symbol) {\n\t\treturn target[key];\n\t},\n\tset(target: DataBus, key: string | symbol, value: any) {\n\t\treturn set(target, key, value);\n\t},\n\thas(target: DataBus, key: string | symbol) {\n\t\treturn Reflect.has(target, key);\n\t},\n\tdeleteProperty(target: DataBus, key: string | symbol) {\n\t\treturn Reflect.deleteProperty(target, key);\n\t},\n\townKeys(target: DataBus) {\n\t\treturn Reflect.ownKeys(target);\n\t},\n\tdefineProperty(target: DataBus, key: string | symbol, descriptor: PropertyDescriptor) {\n\t\treturn false;\n\t},\n\n\tgetOwnPropertyDescriptor(target: DataBus, key: string | symbol) {\n\t\treturn Reflect.getOwnPropertyDescriptor(target, key);\n\t},\n\n\tsetPrototypeOf(target: DataBus, proto: object | null) {\n\t\treturn false;\n\t},\n\tgetPrototypeOf(target: DataBus) { return null; },\n\tpreventExtensions(target: DataBus) { return false; },\n\tisExtensible(target: DataBus) { return true; },\n});\n","\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => TNext} run \n * @param {TNext} def \n */\nexport function runGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = run(result.value);\n\t}\n}\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => PromiseLike<TNext> | TNext} run \n * @param {TNext} def \n */\nexport async function asyncRunGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = await run(result.value);\n\t}\n}\n","/** @import { Children, Field, Match, Or } from './types.mjs' */\nimport { asyncRunGenerator, runGenerator } from './util.mjs';\n\n\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} fields \n * @returns {any[]}\n */\nfunction select(data, fields) {\n\tlet list = data;\n\tfor (let item of fields) {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\n\t\tif (!list.length) { continue; }\n\t\t/** @type {any[]} */\n\t\tconst subList = [];\n\t\tit: for (const item of list) {\n\t\t\tif (!item || typeof item !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\t\tlet value = item[field];\n\t\t\tfor (const index of sub) {\n\t\t\t\tif (!Array.isArray(value)) { continue it; }\n\t\t\t\tvalue = value[index];\n\t\t\t}\n\t\t\tsubList.push(value);\n\t\t}\n\t\tlist = subList.flat(Infinity).filter(v => v && typeof v === 'object');\n\t}\n\treturn list;\n\n}\n\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {string} field \n * @returns {any[]}\n */\nfunction selectValue(list, field) {\n\t/** @type {any[]} */\n\tconst subList = [];\n\tfor (const item of list) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tsubList.push(item[field]);\n\t}\n\treturn subList;\n\n}\n/**\n * @typedef {object} ExecParam\n * @property {Field[]} fields\n * @property {string} operator\n * @property {string?} [sign]\n * @property {any} value\n * @property {any[]} values\n * @property {string} [field]\n */\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} parentFields \n * @param {Match} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execMatch(data, parentFields, match) {\n\tconst fields = [...match[0]];\n\tconst currentFields = [...parentFields, ...fields];\n\tconst last = fields.pop();\n\tif (!last) { return null; }\n\tconst lastField = typeof last === 'string' ? last : last[0];\n\tconst records = select(data, fields);\n\tif (!records.length) { return false; }\n\tconst [, value, operator, sign] = match;\n\tif (operator === null) {\n\t\tconst values = selectValue(records, lastField);\n\t\treturn sign ? values.find(v => v === null) : values.find(v => v !== null);\n\t}\n\tif (typeof value !== 'object' || !value || Array.isArray(value)) {\n\n\t\tconst values = selectValue(records, lastField);\n\t\tif (!values.length) { return false; }\n\n\t\treturn yield ({ fields: currentFields, operator, sign, value, values });\n\t}\n\n\tif (value.filter || value.table || value.placeholder) { return null; }\n\tconst field = value.field;\n\tif (!field) { return null; }\n\n\t/** @type {boolean?} */\n\tlet defResult = false;\n\tfor (const item of records) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tif (!Object.hasOwn(item, lastField)) { continue; }\n\t\tdefResult = null;\n\t\tconst result = yield ({ fields: currentFields, operator, sign, value: item[field], field, values: [item[lastField]] });\n\t\tif (result === null) { continue; }\n\t\treturn result;\n\t}\n\treturn defResult;\n\n}\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} parentFields \n * @param {Match | Children | Or} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execItem(data, parentFields, match) {\n\tif (!Array.isArray(match)) {\n\t\tconst { and, or } = match;\n\t\treturn yield* execOr(data, parentFields, and, or);\n\t}\n\tif (match.length !== 2) {\n\t\treturn yield* execMatch(data, parentFields, match);\n\n\t}\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tconst values = select(data, match[0]);\n\tif (!values.length) { return false; }\n\tconst fields = [...parentFields, ...match[0]];\n\tfor (const item of match[1]) {\n\t\tconst result = yield* execItem(values, fields, item);\n\t\tif (result === null) { continue; }\n\t\tif (!result) { return false; }\n\t\tdefResult = true;\n\t}\n\treturn defResult;\n}\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {Field[]} parentFields \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execOr(list, parentFields, and, or) {\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tif (Array.isArray(and)) {\n\t\tfor (const item of and) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (!result) { return false; }\n\t\t\tdefResult = true;\n\t\t}\n\t}\n\tif (Array.isArray(or)) {\n\t\tfor (const item of or) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (result) { return true; }\n\t\t\tdefResult = false;\n\t\t}\n\t}\n\treturn defResult;\n\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport function exec(data, exec, and, or) {\n\treturn runGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => PromiseLike<boolean?> | boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport async function asyncExec(data, exec, and, or) {\n\treturn asyncRunGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n","/** @import { Value } from './types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or } from './types.mjs' */\n\nimport { runGenerator } from './util.mjs';\n\n\n\n\n\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value, T[]?, Value | null>}\n */\nfunction* fillList(match) {\n\t/** @type {T[]} */\n\tlet list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T} match \n * @returns {Generator<Value, T?, Value | null>}\n */\nfunction* fillMatch(match) {\n\tif (!Array.isArray(match)) {\n\t\tconst and = match.and && (yield* fillMatches(match.and));\n\t\tconst or = match.or && (yield* fillMatches(match.or));\n\t\tif (!and && !or) { return null; }\n\t\t/** @type {Or} */\n\t\tconst item = { and: and || match.and, or: or || match.or };\n\t\treturn /** @type {T} */(item);\n\t}\n\tif (match.length === 2) {\n\t\tlet children = yield* fillMatches(match[1]);\n\t\tif (!children) { return null; }\n\t\t/** @type {Children} */\n\t\tconst item = [match[0], match[1]];\n\t\treturn /** @type {T} */(item);\n\t}\n\tconst value = yield match[1];\n\tif (value === null) { return null; }\n\t/** @type {Match} */\n\tconst item = [match[0], value, match[2], match[3]];\n\treturn /** @type {T} */(item);\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value, T[]?, Value | null>}\n */\nexport function* fillMatches(match) {\n\t/** @type {T[]} */\n\tconst list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[] | null | undefined} match \n * @param {(placeholder: string) => Value | null} getPlaceholder \n * @returns {T[]}\n */\nexport function fill(match, getPlaceholder) {\n\tif (!match) { return []; }\n\t/**\n\t * \n\t * @template {Value} T \n\t * @param {T} match \n\t * @returns {Value | null}\n\t */\n\tfunction fillValue(match) {\n\t\tif (!match || typeof match !== 'object') { return null; }\n\t\tif (Array.isArray(match)) { return null; }\n\t\tconst placeholder = match.placeholder;\n\t\tif (!placeholder || typeof placeholder !== 'string') { return null; }\n\t\treturn getPlaceholder(placeholder);\n\t}\n\treturn runGenerator(fillList(match), fillValue, null) || match;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, Match, Or, Param, Value } from './types.mjs' */\n\n\n\n/**\n * @typedef {object} Parse.Field\n * @property {string} field\n * @property {string?} [group]\n * @property {number[]} sub\n */\n/**\n * @typedef {object} Parse.Match\n * @property {null} [children]\n * @property {Parse.Field[]} fields\n * @property {string?} operator\n * @property {string} [sign]\n * @property {Value} value\n */\n\n\n/**\n * @typedef {object} Parse.Children\n * @property {Parse.Field[]} fields\n * @property {(Parse.Match | Parse.Children)[]} children\n */\n\n/**\n * \n * @param {Parse.Field[]} fields \n * @returns {Field[]}\n */\nfunction compressFields(fields) {\n\treturn fields.map(\n\t\t({ field, sub }) => sub.length ? [field, ...sub] : field\n\t);\n}\n\n/**\n * \n * @param {Parse.Match | Parse.Children} v \n * @returns {Match | Children}\n */\nfunction compressAndItem(v) {\n\tif (v.children) {\n\treturn [compressFields(v.fields), v.children.map(compressAndItem)];\n\n\t}\n\tconst { fields, operator, value, sign } = v;\n\treturn [compressFields(fields), value, operator, sign];\n}\n\nconst fieldParserRegex = /^([-_\\d\\p{L}]+)((?:\\[-?\\d+\\])*)$/u;\n/**\n * \n * @param {string} l \n */\nfunction parseFields(l) {\n\t/** @type {Parse.Field[]} */\n\tconst fields = [];\n\tfor (const v of l.split('.')) {\n\t\tif (!v || v[0] === '?') { return null; }\n\t\tconst index = v.indexOf('?');\n\t\tconst r = fieldParserRegex.exec(index > 0 ? v.slice(0, index) : v);\n\t\tif (!r) { return null; }\n\t\tconst sub = r[2]?.split(/\\[|\\]/).filter(Boolean).map(v => parseInt(v) || 0) || [];\n\t\tconst group = index > 0 ? v.slice(index) : undefined;\n\t\tfields.push({ field: r[1], group, sub });\n\t}\n\treturn fields;\n\n}\n\n\n/** @param {string} v */\nconst decodeValue = v => decodeURIComponent(v.replaceAll('+', ' '));\n/**\n * \n * @param {string} s \n * @returns {string | RecursiveArray<string>?}\n */\nfunction parseArrayValue(s) {\n\t/** @type {(string | RecursiveArray<string>)[]} */\n\tconst root = [];\n\t/** @type {(string | RecursiveArray<string>)[][]} */\n\tconst stack = [];\n\tlet current = root;\n\t/** @type {string[]} */\n\tlet strings = [];\n\tlet end = false;\n\tlet must = true;\n\tfunction add() {\n\t\tcurrent.push(decodeValue(strings.join()));\n\t\tstrings = [];\n\t}\n\n\tfor (const c of s) {\n\t\tif (c === ',') {\n\t\t\tif (end) {\n\t\t\t\tend = false;\n\t\t\t} else {\n\t\t\t\tadd();\n\t\t\t}\n\t\t\tmust = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === ')') {\n\t\t\tif (must || strings.length) {\n\t\t\t\tadd();\n\t\t\t\tmust = false;\n\t\t\t}\n\t\t\tconst last = stack.pop();\n\t\t\tif (!last) { return null; }\n\t\t\tlast.push(current);\n\t\t\tcurrent = last;\n\t\t\tend = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (end) { return null; }\n\t\tmust = false;\n\t\tif (c !== '(') {\n\t\t\tstrings.push(c);\n\t\t\tcontinue;\n\t\t}\n\t\tif (strings.length) { return null; }\n\t\tstack.push(current);\n\t\tcurrent = [];\n\t}\n\tif (must || strings.length) {\n\t\tadd();\n\t}\n\tif (stack.length) { return null; }\n\treturn root.length === 1 ? root[0] : root;\n}\n\nconst valueQRegex = /^([-_\\d\\p{L}]+)@([-_\\d\\p{L}]+)/u;\n\n\n/**\n * \n * @param {string?} v \n * @returns {Value | true}\n */\nfunction parseValue(v) {\n\tif (v === null) { return true; }\n\tif (v[0] === '?') {\n\t\treturn { placeholder: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === ':') {\n\t\treturn { field: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === '@') {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tconst vq = valueQRegex.test(v);\n\tif (vq) {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tif (v.includes('(') || v.includes(')')) {\n\t\tconst list = parseArrayValue(v);\n\t\tif (list) { return list; }\n\t}\n\tif (v.includes(',')) {\n\t\treturn v.split(',').map(v => decodeValue(v.replaceAll('+', ' ')));\n\t}\n\treturn decodeValue(v);\n}\n/**\n * \n * @param {(Parse.Match | Parse.Children)[]} list \n * @returns {Iterable<Match | Children>}\n */\nfunction* toAnd(list) {\n\t/** @type {[(Parse.Match | Parse.Children), Parse.Field[], Parse.Field[]][]} */\n\tconst values = list.map(v => {\n\t\tconst fields = v.fields;\n\t\tconst index = fields.findLastIndex(v => v.group);\n\t\tif (index < 0 || index >= fields.length - 1) {\n\t\t\treturn [v, [], []];\n\t\t}\n\t\tconst field = fields[index];\n\t\tif (!field) { return [v, [], []]; }\n\t\treturn [{ ...v, fields: fields.slice(index + 1) }, fields.slice(0, index + 1), [...fields.slice(0, index), { ...field, group: undefined }]];\n\t});\n\tconst map = Object.groupBy(values, v => JSON.stringify(v[1]));\n\tyield* map['[]']?.map(v => compressAndItem(v[0])) || [];\n\tdelete map['[]'];\n\t/** @type {Parse.Children[]} */\n\tconst result = Object.values(map).filter(Boolean).map((list = []) => {\n\t\tif (!list?.length) { return { fields: [], children: [] }; }\n\t\treturn { fields: list[0][2] || [], children: list.map(v => v[0]) };\n\t}).filter(v => v.fields.length);\n\tif (!result.length) { return; }\n\n\tyield* toAnd(result);\n}\n\n/**\n * \n * @param {(Parse.Match & {groups: string[]})[]} list \n * @returns {Or}\n */\nfunction toOr(list) {\n\tconst map = Map.groupBy(list, v => v.groups.shift() ?? null);\n\tconst and = map.get(null) || [];\n\tconst baseOr = map.get('') || [];\n\tmap.delete(null);\n\tmap.delete('');\n\n\treturn {\n\t\tor: [\n\t\t\t...baseOr.map(v => compressAndItem(v)),\n\t\t\t...[...map.values()].map(v => toOr(v)),\n\t\t],\n\t\tand: [...toAnd(and)],\n\t};\n}\n/**\n * \n * @param {string} search \n * @returns {Param & {others: Record<string, string[]>}}\n */\nexport function parse(search, split = '&') {\n\t/** @type {string[]} */\n\tconst values = [];\n\t/** @type {string[]} */\n\tconst select = [];\n\t/** @type {string[]} */\n\tconst primary = [];\n\t/** @type {Record<string, string[]>} */\n\tconst others = {};\n\t/** @type {[field: string, desc?: boolean][]} */\n\tconst sorts = [];\n\tlet limit = 0;\n\tlet offset = 0;\n\tlet page = 0;\n\tlet total = false;\n\t/** @type {Record<string, string>} */\n\tconst placeholders = {};\n\n\n\t/** @type {(Parse.Match & {groups: string[]})[]} */\n\tconst allMatches = [];\n\n\tfor (const s of typeof search === 'string' ? search.split(split) : []) {\n\t\tif (s[0] === '=') {\n\t\t\tvalues.push(s.slice(1));\n\t\t\tcontinue;\n\t\t}\n\t\tconst index = s.indexOf('=');\n\t\tconst key = index < 0 ? s : s.slice(0, index);\n\t\tconst val = index < 0 ? null : s.slice(index + 1);\n\t\tif (`.!@^*<>{}[]()+|;,\"'\\`\\\\/`.includes(key[0])) { continue; }\n\t\tif (key[0] === '?') {\n\t\t\tplaceholders[decodeValue(key.slice(1))] = decodeValue(val || '');\n\t\t\tcontinue;\n\t\t}\n\t\tif (key[0] === ':') {\n\t\t\tconst name = key.slice(1);\n\t\t\tif (!val) { continue; }\n\t\t\tif (name === 'sort') {\n\t\t\t\tsorts.push(...val.split(',').filter(Boolean).map(v => {\n\t\t\t\t\tconst desc = v[0] === '-';\n\t\t\t\t\tconst name = desc ? v.slice(1) : v;\n\t\t\t\t\treturn /** @type {[field: string, desc?: boolean]} */([decodeValue(name), desc]);\n\t\t\t\t}).filter(Boolean));\n\t\t\t} else if (name === 'select') {\n\t\t\t\tselect.push(...val.split(',').map(decodeValue).filter(Boolean));\n\t\t\t} else if (name === 'primary') {\n\t\t\t\tprimary.push(...val.split(',').map(decodeValue).filter(Boolean));\n\t\t\t} else if (name === 'limit') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { limit = parseInt(val); }\n\t\t\t} else if (name === 'offset') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { offset = parseInt(val); }\n\t\t\t} else if (name === 'page') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { page = parseInt(val); }\n\t\t\t} else if (name === 'total') {\n\t\t\t\tif (val) { total = true; }\n\t\t\t} else {\n\t\t\t\tif (Object.hasOwn(others, name)) {\n\t\t\t\t\tothers[name].push(val);\n\t\t\t\t} else {\n\t\t\t\t\tothers[name] = [val];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst sg = key.split('~');\n\t\tlet field = sg.pop() || '';\n\t\tlet sign = '';\n\t\tif ('!'.includes(field[field.length - 1])) {\n\t\t\tsign = '!';\n\t\t\tfield = field.slice(0, -1);\n\t\t}\n\n\t\tconst l = field.split(':', 3);\n\t\tif (l.length > 2) { continue; }\n\t\tconst fields = parseFields(l[0]);\n\t\tif (!fields) { continue; }\n\t\tconst value = parseValue(val);\n\t\tif (value === null) { continue; }\n\n\t\tconst operator = decodeValue(l[1] || '');\n\t\tconst groupIndex = sg.indexOf('');\n\t\tconst groups = groupIndex < 0 ? sg : sg.slice(0, groupIndex + 1);\n\t\tallMatches.push({\n\t\t\tgroups,\n\t\t\tfields,\n\t\t\toperator: !operator && value === true ? null : operator,\n\t\t\tsign,\n\t\t\tvalue: value === true ? null : value\n\t\t});\n\t}\n\n\tconst { and, or } = toOr(allMatches);\n\n\t/** @type {Param & {others: Record<string, string[]>}} */\n\tconst result = {others};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (total) {\n\t\tresult.total = total;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (primary?.length) {\n\t\tresult.primary = primary;\n\t}\n\tif (sorts?.length) {\n\t\tresult.sort = sorts;\n\t}\n\tconst where = and;\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tconst orWhere = or;\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (Array.isArray(placeholders) && placeholders.length) {\n\t\tresult.placeholders = placeholders;\n\t}\n\n\n\treturn result\n}\n","/** @import { Param } from './types.mjs' */\n\n/**\n * \n * @param {Partial<Param>} a \n * @param {Partial<Param>} b \n * @returns {Param}\n */\nexport function merge(a, b) {\n\tconst limit = b.limit || a.limit || 0;\n\tconst page = b.page ?? a.page;\n\tconst primary = [a.primary || [], b.primary || []].flat().filter(Boolean);\n\tconst offset = \n\tb.offset ?? (b.limit && (b.page || b.page === 0) ? (Math.floor(Math.max(b.page || 0, 1)) - 1) * b.limit : null)\n\t?? a.offset ?? (a.limit && (a.page || a.page === 0) ? (Math.floor(Math.max(a.page || 0, 1)) - 1) * a.limit : null)\n\t?? (Math.floor(Math.max(page || 0, 1)) - 1) * (limit || 10);\n\n\tconst values = [...a.values || [], ...b.values || []]\n\tconst sort = [...a.sort || [], ...b.sort || []]\n\tconst select = [...a.select || [], ...b.select || []]\n\tconst where = [...a.where || [], ...b.where || []]\n\tconst orWhere = [...a.orWhere || [], ...b.orWhere || []]\n\tconst or = [...a.or || [], ...b.or || []]\n\n\t/** @type {Param} */\n\tconst result = {};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (a.total || b.total) {\n\t\tresult.total = true;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (sort?.length) {\n\t\tresult.sort = sort;\n\t}\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (or?.length) {\n\t\tresult.or = or;\n\t}\n\tif (primary.length) {\n\t\tresult.primary = primary;\n\t}\n\n\treturn result;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or, Param } from './types.mjs' */\n\n/** @param {string} v */\nconst encodeValue = v => encodeURIComponent(v).replaceAll('%20', '+');\n\n/**\n * \n * @param {string | boolean | number | RecursiveArray<string> | FieldValue} value \n */\nfunction stringifyValue(value) {\n\tif (Array.isArray(value)) {\n\t\t/**\n\t\t * \n\t\t * @param {string | RecursiveArray<string>} v \n\t\t * @returns {string}\n\t\t */\n\t\tfunction s(v) {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\treturn `(${v.map(s).join(',')})`;\n\t\t\t}\n\t\t\treturn encodeValue(v);\n\t\t}\n\t\tconst val = value.map(s).join(',');\n\t\tif (value.length > 1) { return val; }\n\t\treturn `(${val})`;\n\t}\n\tif (typeof value === 'number') {\n\t\treturn `${value}`;\n\t}\n\tif (typeof value === 'boolean') {\n\t\treturn value ? '1' : 0;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn encodeValue(value);\n\t}\n\tconst { field, placeholder } = value;\n\tif (placeholder) {\n\t\treturn `?${encodeValue(placeholder)}`;\n\t}\n\tif (field) {\n\t\treturn `:${encodeValue(field)}`;\n\t}\n\t// TODO:\n\treturn '';\n}\n\n/**\n * \n * @param {Field[]} fields \n */\nfunction stringifyFields(fields) {\n\treturn fields.map(item => {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\t\treturn `${encodeValue(field)}${sub.map(() => `[k]`).join('')}`;\n\t}\n\t).join('.');\n}\n/**\n * \n * @param {Match} define \n */\nfunction stringifyDefine([fields, value, operator, sign]) {\n\tconst key = operator\n\t\t? `${stringifyFields(fields)}:${encodeValue(operator)}${sign || ''}`\n\t\t: `${stringifyFields(fields)}${sign || ''}`;\n\tif (operator === null) { return key; }\n\tif (value === null) { return ''; }\n\tif (typeof value === 'function') { return ''; }\n\treturn `${key}=${stringifyValue(value)}`;\n}\n/**\n * \n * @param {(Match | Children)[]} list \n * @returns {string[]}\n */\nfunction stringifyAnd(list) {\n\tlet index = 0;\n\treturn list.flatMap(v => {\n\t\tif (v.length !== 2) {\n\t\t\treturn stringifyDefine(v);\n\t\t}\n\t\tconst list = stringifyAnd(v[1]);\n\t\tif (!list.length) { return []; }\n\t\tlet key = stringifyFields(v[0]);\n\t\tif (list.length > 1) {\n\t\t\tkey += `?${(index++).toString(36)}`;\n\t\t}\n\t\treturn list.map(v => `${key}.${v}`);\n\t}).filter(Boolean);\n}\n\n/**\n * \n * @param {(Match | Children | Or)[]} list \n * @returns {string[]}\n */\nfunction stringifyOr(list) {\n\tlet index = 0;\n\treturn list.map(v => {\n\t\tif (Array.isArray(v)) {\n\t\t\treturn stringifyAnd([v]);\n\n\t\t}\n\t\treturn [\n\t\t\t...stringifyAnd(v.and || []),\n\t\t\t...stringifyOr(v.or || []),\n\t\t];\n\t}).flatMap(list => {\n\t\tif (!list) { return []; }\n\t\tconst key = list.length === 1 ? `~` : `${(index++).toString(36)}~`;\n\t\treturn list.map(v => `${key}${v}`);\n\t});\n}\n/**\n * \n * @param {Partial<Param>} query \n * @param {boolean} [usePage] \n */\nexport function stringify({\n\tvalues,\n\twhere,\n\torWhere,\n\tsort,\n\tselect, primary,\n\tlimit, offset, page, total,\n\tplaceholders,\n}, usePage) {\n\t/** @type {string[]} */\n\tlet queries = [];\n\tfor (const v of values || []) {\n\t\tif (!v) { continue; }\n\t\tqueries.push(`=${encodeValue(v)}`);\n\t}\n\tif (limit && limit > 0) {\n\t\tqueries.push(`:limit=${limit}`);\n\t}\n\tif (total) {\n\t\tqueries.push(`:total=${total}`);\n\n\t}\n\tif (usePage) {\n\t\tif (page && page > 0) {\n\t\t\tqueries.push(`:page=${page}`);\n\t\t}\n\t} else {\n\t\tif (offset && offset > 0) {\n\t\t\tqueries.push(`:offset=${offset}`);\n\t\t}\n\t}\n\tconst selectVal = select?.filter(Boolean).map(encodeValue).join(',');\n\tif (selectVal) {\n\t\tqueries.push(`:select=${selectVal}`);\n\t}\n\tconst primaryVal = primary?.filter(Boolean).map(encodeValue).join(',');\n\tif (primaryVal) {\n\t\tqueries.push(`:primary=${primaryVal}`);\n\t}\n\tif (sort) {\n\t\tconst val = sort.filter(Boolean).map(v => {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\tconst [field, desc] = v;\n\t\t\t\tif (field) {\n\t\t\t\t\treturn `${desc ? '-' : ''}${encodeValue(field)}`;\n\t\t\t\t}\n\t\t\t} else if (v) {\n\t\t\t\treturn encodeValue(v);\n\t\t\t}\n\t\t\treturn '';\n\t\t}).filter(Boolean).join(',');\n\t\tif (val) {\n\t\t\tqueries.push(`:sort=${val}`);\n\t\t}\n\t}\n\tif (placeholders && typeof placeholders === 'object' && !Array.isArray(placeholders)) {\n\t\tfor (const [k, v] of Object.entries(placeholders)) {\n\t\t\tqueries.push(`?${encodeValue(k)}=${encodeValue(v)}`);\n\n\t\t}\n\t}\n\tfor (const v of stringifyAnd(where || [])) {\n\t\tqueries.push(v);\n\t}\n\tfor (const v of stringifyOr(orWhere || [])) {\n\t\tqueries.push(v);\n\t}\n\treturn queries.join('&');\n}\n","import { Search } from '@yongdall/common';\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @typedef {object} Where\n * @property {(where: TWhere) => boolean?} [value]\n * @property {(list: TWhere[]) => TWhere?} or\n * @property {(list: TWhere[]) => TWhere?} and\n * @property {ItemToWhere<TField, TParam, TWhere>} build\n */\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @callback ToWhere\n * @param {TField} fields \n * @param {Search.AndList} [and] \n * @param {...Search.OrList | null | undefined} orList\n * @returns {Generator<TParam, TWhere?, TWhere?>}\n */\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @callback ItemToWhere\n * @param {ToWhere<TField, TParam, TWhere>} toWhere \n * @param {TField} fields \n * @param {Search.Match | Search.Children} and\n * @returns {Generator<TParam, TWhere?, TWhere?>}\n */\n\n\n\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @param {Where<TField, TParam, TWhere>} where \n * @param {TField} fields \n * @param {Search.AndList} [and] \n * @param {...Search.OrList | null | undefined} orList\n * @returns {Generator<TParam, TWhere?, TWhere?>}\n */\nexport function toWhere(where, fields, and, ...orList) {\n\t/**\n\t * \n\t * @param {TField} fields \n\t * @param {Search.AndList} [and] \n\t * @param {...Search.OrList | null | undefined} orList\n\t * @returns {Generator<TParam, TWhere?, TWhere?>}\n\t */\n\tfunction* toWhere(fields, and, ...orList) {\n\n\t\t/** @type {TWhere[]} */\n\t\tconst list = [];\n\t\tif (and) {\n\t\t\tfor (const item of and) {\n\t\t\t\tconst w = yield* where.build(toWhere, fields, item);\n\t\t\t\tif (w == null) { continue; }\n\t\t\t\tif (where.value?.(w) === false) { return w; }\n\t\t\t\tlist.push(w);\n\t\t\t}\n\t\t}\n\t\torFor: for (const or of orList) {\n\t\t\tif (!or) { continue; }\n\t\t\t/** @type {TWhere[]} */\n\t\t\tconst orList = [];\n\t\t\tfor (const item of or) {\n\t\t\t\tconst w = Array.isArray(item)\n\t\t\t\t\t? yield* where.build(toWhere, fields, item)\n\t\t\t\t\t: yield* toWhere(fields, item.and, item.or);\n\t\t\t\tif (w == null) { continue; }\n\t\t\t\tif (where.value?.(w) === true) {\n\t\t\t\t\tlist.push(w);\n\t\t\t\t\tcontinue orFor;\n\t\t\t\t}\n\t\t\t\torList.push(w);\n\t\t\t}\n\t\t\tconst w = orList.length ? where.or(orList) : null;\n\t\t\tif (w == null) { continue; }\n\t\t\tif (where.value?.(w) === false) { return w; }\n\t\t\tlist.push(w);\n\t\t}\n\t\tif (!list.length) { return null; }\n\t\treturn where.and(list);\n\t}\n\treturn toWhere(fields, and, ...orList);\n}\n","export * from './exec.mjs';\nexport * from './fill.mjs';\nexport { parse } from './parse.mjs';\nexport * from './merge.mjs';\nexport * from './stringify.mjs';\nexport * from './types.mjs';\nexport * from './util.mjs';\nexport * from './toWhere.mjs';\n","export const CST = Intl.DateTimeFormat().resolvedOptions().timeZone === 'Asia/Shanghai';\nexport const TZO = new Date().getTimezoneOffset();\nfunction getTimeZone() {\n\tlet tzo = TZO;\n\tif (!tzo) { return 'Z'; }\n\tconst s = tzo < 0 ? '+' : '-';\n\ttzo = Math.abs(tzo);\n\treturn s + [Math.floor(tzo / 60), tzo % 60].map(v => `${v}`.padStart(2, '0')).join(':');\n}\nexport const TZ = getTimeZone();\n\n\n\nconst dateRegex1 = /^(?:(?<Y>\\d+)-(?<M>\\d+)-(?<D>\\d+)[t| ])?(?<h>2[0-3]|[01]?\\d):(?<m>[0-5]?\\d)(?::(?<s>[0-5]?\\d)(?:(?:\\.(?<ms>\\d{1,3})?)?))?(?<tz>z|[+-]\\d\\d(:?\\d\\d)?)?$/i;\nconst dateRegex2 = /^(?<Y>\\d+)-(?<M>\\d+)-(?<D>\\d+)(?:[t| ](?<h>2[0-3]|[01]?\\d):(?<m>[0-5]?\\d)(?::(?<s>[0-5]?\\d)(?:(?:\\.(?<ms>\\d{1,3})?)?))?(?<tz>z|[+-]\\d\\d(:?\\d\\d)?)?)?$/i;\n\n\n/**\n * \n * @param {string | null} [val] \n * @returns \n */\nexport function parseTimeZone(val) {\n\tif (val === 'z' || val === 'Z') { return 'Z'; }\n\tif (!val || typeof val !== 'string') { return TZ; }\n\tif (val.includes(':')) { return val; }\n\treturn `${val}:00`;\n}\n\n\n/**\n * \n * @param {any} value \n * @returns \n */\nexport function parse(value) {\n\tif (value instanceof Date) { return value.valueOf() ? new Date(value) : null; }\n\tif (typeof value === 'number') {\n\t\tconst date = new Date(value);\n\t\treturn date.valueOf() ? date : null;\n\t}\n\tif (typeof value !== 'string') { return null; }\n\tconst ss = dateRegex1.exec(value)?.groups || dateRegex2.exec(value)?.groups;\n\tif (!ss) { return null; }\n\tconst { Y, M, D, h, m, s, ms, tz = '' } = ss;\n\tconst str = [\n\t\t`${Y || 2000}`.padStart(4, '0'),\n\t\t`-`,\n\t\t`${M || 1}`.padStart(2, '0'),\n\t\t`-`,\n\t\t`${D || 1}`.padStart(2, '0'),\n\t\t`T`,\n\t\t`${h || 0}`.padStart(2, '0'),\n\t\t`:`,\n\t\t`${m || 0}`.padStart(2, '0'),\n\t\t`:`,\n\t\t`${s || 0}`.padStart(2, '0'),\n\t\t`.`,\n\t\t`${ms || 0}`.padEnd(3, '0'),\n\t\t`${parseTimeZone(tz)}`\n\t].join('');\n\tconst date = new Date(str);\n\treturn date.valueOf() ? date : null;\n\n}\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTime(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\treturn [\n\t\td.getUTCHours(),\n\t\td.getUTCMinutes(),\n\t\td.getUTCSeconds(),\n\t].map(v => `${v}`.padStart(2, '0')).join(':');\n\n}\n\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTimeTz(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\n\tconst h = `${d.getUTCHours()}`.padStart(2, '0');\n\tconst m = `${d.getUTCMinutes()}`.padStart(2, '0');\n\tconst s = `${d.getUTCSeconds()}`.padStart(2, '0');\n\tconst ms = `${d.getUTCMilliseconds()}`.padStart(3, '0');\n\n\treturn `${h}:${m}:${s}.${ms}${TZ}`;\n}\n\n\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDatetimeTz(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\n\tconst Y = `${d.getUTCFullYear()}`.padStart(4, '0');\n\tconst M = `${d.getUTCMonth() + 1}`.padStart(2, '0');\n\tconst D = `${d.getUTCDate()}`.padStart(2, '0');\n\tconst h = `${d.getUTCHours()}`.padStart(2, '0');\n\tconst m = `${d.getUTCMinutes()}`.padStart(2, '0');\n\tconst s = `${d.getUTCSeconds()}`.padStart(2, '0');\n\tconst ms = `${d.getUTCMilliseconds()}`.padStart(3, '0');\n\n\treturn `${Y}-${M}-${D}T${h}:${m}:${s}.${ms}${TZ}`;\n}\n\n\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDatetime(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\n\tconst Y = `${d.getUTCFullYear()}`.padStart(4, '0');\n\tconst M = `${d.getUTCMonth() + 1}`.padStart(2, '0');\n\tconst D = `${d.getUTCDate()}`.padStart(2, '0');\n\tconst h = `${d.getUTCHours()}`.padStart(2, '0');\n\tconst m = `${d.getUTCMinutes()}`.padStart(2, '0');\n\tconst s = `${d.getUTCSeconds()}`.padStart(2, '0');\n\n\treturn `${Y}-${M}-${D}T${h}:${m}:${s}`;\n}\n\n\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDate(date) {\n\tconst d = new Date(date.valueOf() - TZO * 60000);\n\treturn [\n\t\td.getUTCFullYear(),\n\t\td.getUTCMonth() + 1,\n\t\td.getUTCDate(),\n\t].map(v => `${v}`.padStart(2, '0')).join('-');\n}\n","const sequenceRegex = /^(?<seq>#*(?<min>0*))$/;\n\n/**\n * 表示一个正则匹配配置项,用于描述如何从字符串中提取特定结构(如日期)。\n */\nexport interface Filler {\n\ttype?: null;\n\t/** 该配置的名称,用于标识或调试。 */\n\tname: string;\n\t/** 管道配置列表,每项包含名称和参数。 */\n\tpipes: [name: string, param: string][];\n\t/** @deprecated 是否为可选匹配。若为 true,则即使未匹配也不报错。 */\n\toptional: boolean;\n\t/** @deprecated 匹配内容前必须存在的前缀字符串(字面量,非正则)。 */\n\tprefix: string | (Style | Placeholder | string)[];\n\t/** @deprecated 匹配内容后必须存在的后缀字符串(字面量,非正则)。 */\n\tsuffix: string | (Style | Placeholder | string)[];\n}\n\nexport interface Style {\n\ttype: 'style';\n\tvalues: string[];\n}\nexport interface Placeholder {\n\ttype: 'placeholder';\n\tplaceholder: string;\n}\n/**\n * 表示一个序列配置项。\n */\nexport interface Sequence {\n\ttype: 'sequence';\n\t/** 最小匹配次数。 */\n\tmin: number;\n\t/** 最大匹配次数。 */\n\tmax: number;\n\t/** @deprecated */\n\toptional?: false;\n\t/** @deprecated */\n\tprefix?: null;\n\t/** @deprecated */\n\tsuffix?: null;\n}\nexport type Pattern = (string | Filler | Sequence | Style | Placeholder | (string | Filler | Sequence | Style | Placeholder)[])[];\n\n\nfunction parseStyle(text: string): string[] {\n\tlet t = 0;\n\tconst result = [];\n\tlet style = [];\n\tfor (const k of text) {\n\t\tif ('{[('.includes(k)) {\n\t\t\tt += 1;\n\t\t\tstyle.push(k);\n\t\t\tcontinue;\n\t\t}\n\t\tif ('}])'.includes(k) && t > 0) {\n\t\t\tt -= 1;\n\t\t\tstyle.push(k);\n\t\t\tcontinue;\n\t\t}\n\t\tif (t > 0 || k !== ' ') {\n\t\t\tstyle.push(k);\n\t\t\tcontinue;\n\t\t}\n\t\tif (style.length) {\n\t\t\tresult.push(style.join(''));\n\t\t\tstyle = [];\n\t\t}\n\t}\n\tif (style.length) {\n\t\tresult.push(style.join(''));\n\t}\n\treturn result;\n}\n\nfunction getLast(v: string) {\n\tlet s = '';\n\tfor (let i = 0; i < v.length; i++) {\n\t\tconst c = v[i];\n\t\tif (c !== '\\\\') {\n\t\t\ts = c;\n\t\t\tcontinue;\n\t\t}\n\t\ts = v.slice(i, i + 2);\n\t\ti += 1;\n\t}\n\treturn s;\n}\nfunction replaceText(text: string, keepSpace = false): string {\n\treturn text.replace(keepSpace ? /\\\\(.)/g : /[\\s\\n]|\\\\(.)/g, (_, c) => {\n\t\tif (!c) { return ''; }\n\t\tswitch (c) {\n\t\t\tcase 's': return ' ';\n\t\t\tcase 'n': return '\\n';\n\t\t\tcase 't': return '\\t';\n\t\t\tcase 'r': return '\\r';\n\t\t\tcase 'f': return '\\f';\n\t\t\tcase 'v': return '\\v';\n\t\t\tcase 'a': return '\\x07';\n\t\t\tcase 'b': return '\\b';\n\t\t\tcase '\\n': return '';\n\t\t\tcase '\\\\': return '\\\\';\n\t\t\tcase '{': case '}':\n\t\t\tcase '[': case ']':\n\t\t\tcase '(': case ')':\n\t\t\tcase '<': case '>':\n\t\t\tcase '\"': case \"'\": case '`':\n\n\t\t\tcase '~': case '!': case '@': case '#':\n\t\t\tcase '%': case '^': case '&': case '*':\n\t\t\tcase '=': case '|': case '+': case '-':\n\t\t\tcase ':': case ';': case '?':\n\t\t\t\treturn c;\n\t\t\tdefault: throw new SyntaxError(`unexpected '\\\\${c}'`);\n\t\t}\n\t});\n\n}\n/**\n * @deprecated\n * @param list \n * @returns \n */\nfunction zip(list: (string | Filler | Sequence | Style | Placeholder)[]): null | Filler {\n\tlet filler = null;\n\tconst prefix: (Style | Placeholder | string)[] = [];\n\tconst suffix: (Style | Placeholder | string)[] = [];\n\n\tfor (const item of list) {\n\t\tif (!item) { continue; }\n\t\tif (typeof item !== 'string') {\n\t\t\tif (item.type === 'sequence') { return null; }\n\t\t\tif (!item.type) {\n\t\t\t\tif (filler) { return null; }\n\t\t\t\tfiller = item;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\t(filler ? suffix : prefix).push(item);\n\t}\n\tif (!filler) { return null; }\n\treturn { ...filler, optional: true, prefix, suffix }\n}\nfunction parseItem(text: string, index: number): Filler | Sequence | Style | Placeholder {\n\tconst sequenceResult = sequenceRegex.exec(text)?.groups;\n\tif (sequenceResult) {\n\t\tconst { seq, min } = sequenceResult;\n\t\treturn { type: 'sequence', max: seq.length, min: min.length };\n\t}\n\tconst s = text[0];\n\tconst unit = replaceText(text, true);\n\tif (text[0] === '(') {\n\t\tconst last = getLast(text);\n\t\tif (last !== ')') { throw new SyntaxError(`unexpected '${last}' at ${index + text.length - last.length}`); }\n\t\treturn { type: 'placeholder', placeholder: unit.slice(1, -1) };\n\t}\n\tif (text[0] === '[') {\n\t\tconst last = getLast(text);\n\t\tif (last !== ']') { throw new SyntaxError(`unexpected '${last}' at ${index + text.length - last.length}`); }\n\t\treturn { type: 'style', values: parseStyle(unit.slice(1, -1)) };\n\t}\n\tif (`\\`\\\\~!@#%^&*()_+-={}[]|:;'\"<>?,/`.includes(s)) { throw new SyntaxError(`unexpected 's' at ${index}`); }\n\tconst [name, ...pipes] = unit.split('|');\n\treturn {\n\t\tname, pipes: pipes.filter(Boolean).map(format => {\n\t\t\tconst index = format.indexOf(':');\n\t\t\tif (index < 0) { return [format, '']; }\n\t\t\tconst type = format.slice(0, index);\n\t\t\tconst param = format.slice(index + 1);\n\t\t\treturn [type, param];\n\t\t}), optional: false, prefix: '', suffix: ''\n\t};\n}\nexport function parse(pattern?: string | null) {\n\tif (typeof pattern !== 'string') { return []; }\n\tlet nextIndex = 0;\n\tconst result: Pattern = [];\n\tconst queue: number[] = [];\n\tlet subList: (string | Placeholder | Style | Filler | Sequence)[] = [];\n\tfor (const { [0]: c, index } of pattern.matchAll(/\\\\.|\\{|\\}/g)) {\n\t\tif (c === '{') {\n\t\t\tif (queue.length >= 2) { throw new SyntaxError(`unexpected '{' at ${index}`); }\n\t\t\t(queue.length ? subList : result).push(\n\t\t\t\treplaceText(pattern.slice(nextIndex, index)),\n\t\t\t);\n\t\t\tnextIndex = index + 1;\n\t\t\tqueue.push(index);\n\t\t\tcontinue;\n\t\t} else if (c !== '}') {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!queue.length) { throw new SyntaxError(`unexpected '}' at ${index}`); }\n\t\tconst startIndex = queue.pop() || 0;\n\t\tif (!queue.length && subList.length) {\n\t\t\tsubList.push(\n\t\t\t\treplaceText(pattern.slice(nextIndex, index)),\n\t\t\t);\n\t\t\tnextIndex = index + 1;\n\t\t\tresult.push(zip(subList) || subList.filter(Boolean));\n\t\t\tsubList = [];\n\t\t\tcontinue;\n\t\t}\n\t\t(queue.length ? subList : result).push(parseItem(\n\t\t\tpattern.slice(nextIndex, index),\n\t\t\tstartIndex,\n\t\t));\n\t\tnextIndex = index + 1;\n\t}\n\tif (queue.length) { throw new SyntaxError(`unexpected end of input, expect '}'`) }\n\tresult.push(replaceText(pattern.slice(nextIndex)));\n\treturn result.filter(Boolean);\n}\n","import type { Pipeline } from \"./toGenerator.mts\"\nimport { parse as parseDate } from \"../Datetime.mjs\";\n\n\n\nfunction generateDate(value: any, param: string, { optional }: { optional: boolean}): string {\n\tif (!param) { return ''; }\n\tconst date = parseDate(value) || (optional ? null : new Date);\n\tif (!date?.valueOf()) { return ''; }\n\tconst data: Record<string, number> = {\n\t\tY: date.getFullYear(),\n\t\tM: date.getMonth() + 1,\n\t\tD: date.getDate(),\n\t\th: date.getHours(),\n\t\tm: date.getMinutes(),\n\t\ts: date.getSeconds(),\n\t};\n\treturn param.replace(/#*([a-zA-Z])\\1*/g, (v, key) => {\n\t\tlet val = `${Object.hasOwn(data, key) ? data[key] : 0}`;\n\t\tconst max = v.length;\n\t\tconst min = v.replaceAll('#', '').length;\n\t\treturn `${val}`.padStart(min, '0').slice(-max);\n\t});\n}\n\nfunction paramNumber(type: string, param: string): [intMin: number, intMax: number, fractionalMin: number, fractionalMax: number] {\n\tif (!param) {\n\t\tparam = type === 'int' ? '#############0' : type === 'float' ? '#############0.0###' : '#############0.####';\n\t}\n\tconst [intPart, fractionalPart = ''] = param.split('.');\n\tconst intMax = intPart.length || 1;\n\tconst intMin = intPart.replaceAll('#', '').length || 0;\n\tconst fractionalMax = type === 'int' ? 0 : fractionalPart.length;\n\tconst fractionalMin = type === 'int' ? 0 : fractionalPart.replaceAll('#', '').length;\n\n\treturn [intMin, intMax, fractionalMin, fractionalMax];\n\n}\n\nfunction generateNumber(\n\tvalue: any,\n\t[intMin, intMax, fractionalMin, fractionalMax]: [intMin: number, intMax: number, fractionalMin: number, fractionalMax: number],\n\t{ optional }: { optional: boolean },\n): string {\n\tlet intPart = '';\n\tlet fractionalPart = '';\n\tif (typeof value === 'bigint') {\n\t\tintPart = String(value);\n\t} else if (typeof value === 'number') {\n\t\tif (Number.isFinite(value)) {\n\t\t\t[intPart, fractionalPart = ''] = value.toPrecision(100).split('.');\n\t\t}\n\t} else if (typeof value === 'string') {\n\t\tif (/^\\s*[+-]?\\s*(\\d_)*\\.?(\\d_)*/.test(value)) {\n\t\t\t[intPart, fractionalPart = ''] = value.replace(/[^\\d.-]/g, '').split('.');\n\t\t}\n\t}\n\tif (!intPart && !fractionalPart && optional) { return ''; }\n\tintPart = intPart.replace(/^0+/, '').padStart(intMin, '0').slice(-intMax);\n\tfractionalPart = fractionalPart.replace(/0+$/, '').padEnd(fractionalMin, '0').slice(0, fractionalMax);\n\tif (!fractionalPart) { return intPart; }\n\treturn `${intPart}.${fractionalPart}`;\n}\n\nexport const date: Pipeline<string> = {\n\tparseParam: v => v || 'YYYY-MM-DD',\n\tgenerate: generateDate,\n};\n/** @type {Pipeline<string>} */\nexport const time: Pipeline<string> = {\n\tparseParam: v => v || 'hh:mm:ss',\n\tgenerate: generateDate,\n};\n\nexport const datetime: Pipeline<string> = {\n\tparseParam: v => v || 'YYYY-MM-DD hh:mm:ss',\n\tgenerate: generateDate,\n};\nexport const number: Pipeline<[intMin: number, intMax: number, fractionalMin: number, fractionalMax: number]> = {\n\tparseParam: v => paramNumber('number', v),\n\tgenerate: generateNumber,\n};\nexport const float: Pipeline<[intMin: number, intMax: number, fractionalMin: number, fractionalMax: number]> = {\n\tparseParam: v => paramNumber('float', v),\n\tgenerate: generateNumber,\n};\nexport const int: Pipeline<[intMin: number, intMax: number, fractionalMin: number, fractionalMax: number]> = {\n\tparseParam: v => paramNumber('int', v),\n\tgenerate: generateNumber,\n};\nexport const list: Pipeline<string[]> = {\n\tparseParam(param) {\n\t\treturn param.split(';');\n\t},\n\tgenerate(value, list, { optional }) {\n\t\tlet index = -1;\n\t\tif (typeof value === 'bigint') {\n\t\t\tindex = Number(value);\n\t\t} else if (typeof value === 'number') {\n\t\t\tindex = Math.floor(value);\n\t\t} else if (typeof value === 'boolean') {\n\t\t\tindex = value ? 1 : 0;\n\t\t} else if (typeof value === 'string') {\n\t\t\tif (!/^\\s*[+-]\\s*(\\d_)*/.test(value)) { return ''; }\n\t\t\tindex = Number.parseInt(value.replace(/[^\\d.+-]/g, ''));\n\t\t}\n\t\tif (index < 0 || index >= list.length) { return optional ? '' : list[0]; }\n\t\treturn list[index];\n\t},\n};\nexport const map: Pipeline<Record<string, string>> = {\n\tparseParam: param => Object.fromEntries(param.split(';').map(v => {\n\t\tconst index = v.indexOf('=');\n\t\tif (index < 0) { return [v, v]; }\n\t\treturn [v.slice(0, index), v.slice(index + 1)];\n\t})),\n\tgenerate(value, map, { optional }) {\n\t\tlet key = '';\n\t\tif (typeof value === 'bigint') {\n\t\t\tkey = String(value);\n\t\t} else if (typeof value === 'number') {\n\t\t\tkey = String(value);\n\t\t} else if (typeof value === 'boolean') {\n\t\t\tkey = value ? '1' : '0';\n\t\t} else if (typeof value === 'string') {\n\t\t\tkey = value;\n\t\t}\n\t\treturn Object.hasOwn(map, key) ? map[key] : optional ? '' : Object.values(map)[0];\n\t},\n};\n","import type { Filler, Pattern, Placeholder, Sequence, Style } from \"./parse.mts\";\nimport { parse } from \"./parse.mts\";\n\n\nfunction baseGenerate(value: any, optional: boolean): string {\n\tif ((value ?? null) === null) { return ''; }\n\tif (typeof value === 'string') { return value; }\n\tif (typeof value === 'bigint') { return String(value); }\n\tif (typeof value === 'boolean') { return value ? '1' : '0'; }\n\tif (typeof value === 'number') {\n\t\tif (!Number.isFinite(value)) { return ''; }\n\t\tconst text = value.toPrecision(100);\n\t\tif (!text.includes('.')) { return text; }\n\t\tconst index = text.indexOf('.');\n\t\treturn text.slice(0, index + 5).replace(/\\.?0+$/, '');\n\t}\n\tif (!(value instanceof Date)) { return `${value}`; }\n\tconst date = value;\n\tif (!date?.valueOf()) { return ''; }\n\tconst data: Record<string, number> = {\n\t\tY: date.getFullYear(),\n\t\tM: date.getMonth() + 1,\n\t\tD: date.getDate(),\n\t\th: date.getHours(),\n\t\tm: date.getMinutes(),\n\t\ts: date.getSeconds(),\n\t};\n\treturn `YYYY-MM-DD hh:mm:ss`.replace(/([a-zA-Z])\\1*/g, (v, key) => {\n\t\tlet val = `${Object.hasOwn(data, key) ? data[key] : 0}`;\n\t\tconst length = v.length;\n\t\treturn `${val}`.padStart(length, '0').slice(-length);\n\t});\n}\n\n\n/** 生成器配置 */\nexport interface Pipeline<T> {\n\t/** 解析参数字符串 */\n\tparseParam(param: string): T;\n\t/** 根据解析后的参数生成内容 */\n\tgenerate(data: any, param: T, options: { optional: boolean }): any;\n}\n\nfunction toText(\n\titem: Filler | Sequence,\n\tdoc: Record<string, any>,\n\tsequence: number,\n\tgenerators?: Record<string, Pipeline<any>>,\n\toptional = false\n) {\n\tif (item.type === 'sequence') {\n\t\tconst { min, max } = item;\n\t\treturn (Math.floor(sequence || 0) || 0)\n\t\t\t.toPrecision(100).replace(/\\.\\d*$/, '')\n\t\t\t.padStart(min, '0')\n\t\t\t.slice(-max);\n\t}\n\tconst { name, pipes } = item;\n\tlet val = Object.hasOwn(doc, name) ? doc[name] ?? null : null;\n\tif (generators) {\n\t\tfor (const [t, p] of pipes) {\n\t\t\tconst renderer = Object.hasOwn(generators, t) && generators[t];\n\t\t\tif (!renderer) { continue; }\n\t\t\tconst params = renderer.parseParam(p);\n\t\t\tval = renderer.generate(val, params, { optional });\n\t\t}\n\t}\n\treturn baseGenerate(val, true);\n}\nexport function toGenerator(\n\tpattern?: Pattern | string | null,\n\tgenerators?: Record<string, Pipeline<any>>\n) {\n\tconst list = (Array.isArray(pattern) ? pattern : parse(pattern));\n\tif (!list.length) { return null; }\n\n\treturn function* (data?: Record<string, any> | null, sequence?: number | null): Iterable<string | Placeholder | Style> {\n\t\tconst doc = typeof data === 'object' && data || {};\n\t\tfor (const v of list) {\n\t\t\tif (!v || typeof v !== 'object') {\n\t\t\t\tyield v;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!Array.isArray(v)) {\n\t\t\t\tif (v.type === 'placeholder' || v.type === 'style') { yield v; continue; }\n\t\t\t\tconst text = toText(v, doc, sequence || 0, generators, v.optional);\n\n\t\t\t\tif (!text && v.optional) { continue; }\n\t\t\t\tconst { prefix, suffix } = v;\n\t\t\t\tif (Array.isArray(prefix)) {\n\t\t\t\t\tyield* prefix;\n\t\t\t\t} else if (prefix) {\n\t\t\t\t\tyield prefix;\n\t\t\t\t}\n\t\t\t\tyield text;\n\t\t\t\tif (Array.isArray(suffix)) {\n\t\t\t\t\tyield* suffix;\n\t\t\t\t} else if (suffix) {\n\t\t\t\t\tyield suffix;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet prefix = [];\n\t\t\tfor (let i = 0; i < v.length; i++) {\n\t\t\t\tconst item = v[i];\n\t\t\t\tif (typeof item !== 'object' || item.type === 'placeholder' || item.type === 'style') { prefix.push(item); continue; }\n\t\t\t\tconst text = toText(item, doc, sequence || 0, generators, true);\n\t\t\t\tif (!text) { prefix = []; continue; }\n\t\t\t\tyield* prefix;\n\t\t\t\tprefix = [];\n\t\t\t\tyield text;\n\t\t\t\tfor (i++; i < v.length; i++) {\n\t\t\t\t\tconst item = v[i];\n\t\t\t\t\tif (typeof item !== 'object' || item.type === 'placeholder' || item.type === 'style') { yield item; continue; }\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t};\n}\n","import type { Pattern } from \"./parse.mts\"\nimport type { Pipeline } from \"./toGenerator.mts\"\nimport * as defaultPipelines from './pipelines.mts';\nimport { toGenerator } from './toGenerator.mts';\n\nexport function generate(\n\tpattern?: Pattern | string | null,\n\tdata?: Record<string, any>,\n\tsequence?: number,\n\tpipelines?: Record<string, Pipeline<any>>\n): string;\nexport function generate(\n\tpattern?: Pattern | string | null,\n\tdata?: Record<string, any>,\n\tpipelines?: Record<string, Pipeline<any>>\n): string;\n\nexport function generate(\n\tpattern?: Pattern | string | null,\n\tdata?: Record<string, any>,\n\tsequence?: number | Record<string, Pipeline<any>> | null,\n\tpipelines?: Record<string, Pipeline<any>>\n): string;\nexport function generate(\n\tpattern?: Pattern | string | null,\n\tdata?: Record<string, any>,\n\tsequence?: number | Record<string, Pipeline<any>> | null,\n\tpipelines?: Record<string, Pipeline<any>>\n): string {\n\tconst seq = typeof sequence === 'number' ? sequence : 0;\n\tconst allPipelines = [sequence, pipelines]\n\t\t.filter(Boolean)\n\t\t.find(v => typeof v === 'object') || defaultPipelines;\n\n\tconst iterable = toGenerator(pattern, allPipelines);\n\tif (!iterable) { return ''; }\n\n\tconst results: string[] = [];\n\tfor (const s of iterable(data, seq)) {\n\t\tif (typeof s !== 'string') { continue; }\n\t\tresults.push(s);\n\t}\n\treturn results.join('');\n}\n","import type { Pattern } from \"./parse.mts\";\nimport type { Pipeline } from './toGenerator.mts';\nimport { toGenerator } from './toGenerator.mts';\n\n\n/**\n * @deprecated\n * @returns \n */\nexport function toGenerate(\n\tpattern?: Pattern | string | null,\n\tpipelines?: Record<string, Pipeline<any>>\n): (data?: Record<string, any> | null, sequence?: number | null) => string {\n\tconst iterable = toGenerator(pattern, pipelines);\n\tif (!iterable) { return () => ''; }\n\n\treturn (data?: Record<string, any> | null, sequence?: number | null): string => {\n\t\tconst results: string[] = [];\n\t\tfor (const s of iterable(data, sequence)) {\n\t\t\tif (typeof s !== 'string') { continue; }\n\t\t\tresults.push(s);\n\t\t}\n\t\treturn results.join('');\n\n\t};\n}\n","export * from './parse.mts';\nexport * from './generate.mts';\nexport * from './toGenerate.mts';\nexport * as pipelines from './pipelines.mts';\n/** @deprecated */\nexport * as generators from './pipelines.mts';\n","\nconst prototype = Error.prototype;\n/**\n * @template T\n * @template {Error} E\n * @param {Map<any, (error: E) => T>} transforms \n * @param {E} error \n */\nexport function transformError(transforms, error) {\n\tif (!(error instanceof Error)) { throw error; }\n\tfor (let p = Object.getPrototypeOf(error); p; p = Object.getPrototypeOf(p)) {\n\t\tconst fn = transforms.get(p);\n\t\tif (typeof fn === 'function') { return fn(error); }\n\t\tif (p === prototype) { break; }\n\t}\n\tthrow error;\n}\n","/**\n * @template T\n * @typedef {T | readonly T[]} Hook.MaybeArray\n */\n/**\n * @template T\n * @typedef {T extends readonly any[] ? Readonly<T>\n * : T extends Record<string, any> ? Hook.MaybeArray<Hook.Define<T> | T>\n * : T extends object ? Hook.MaybeArray<Hook.Define<T> | T>\n * : Hook.MaybeArray<T>\n * } Hook.Item\n */\n/**\n * @template T\n * @typedef {T extends Record<string, any> ? { [k in keyof T]?: Hook.Item<T[k]> } : T} Hook.Define\n*/\n\n\n\n\n/** @type {*} */\nconst noopFilter = () => true;\n\n\n\n\n/**\n * \n * @param {Record<string, any>} plugin \n * @param {string[]} name \n * @returns {*[]}\n */\nfunction findHook(plugin, name) {\n\tlet list = [plugin].flat();\n\tfor (const k of name.filter(Boolean)) {\n\t\tconst values = [];\n\t\tfor (const it of list) {\n\t\t\tif (!it || typeof it !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(it, k)) { continue; }\n\t\t\tvalues.push(it[k]);\n\t\t}\n\t\tif (!values.length) { return []; }\n\t\tlist = values.flat();\n\t}\n\treturn list;\n}\n\n/**\n * \n * @template T\n * @param {any} plugin \n * @param {string[]} names \n * @returns {T | void}\n */\nfunction first(plugin, names) {\n\tif (!names.length) { return plugin; }\n\tif (!plugin || typeof plugin !== 'object') { return; }\n\tconst [name, ...keys] = names;\n\tfor (const v of [plugin].flat()) {\n\t\tconst val = first(v[name], keys);\n\t\tif (val !== undefined) { return val; }\n\t}\n}\n\n/**\n * \n * @template T\n * @param {Record<string, any>} hooks \n * @param {string[]} name \n * @returns {IterableIterator<T>}\n */\nfunction* values(hooks, name) {\n\tfor (const it of Object.values(hooks)) {\n\t\tfor (const value of findHook(it, name)) {\n\t\t\tyield value;\n\t\t}\n\t}\n}\n\n\n\n\n/**\n * @template T\n */\nexport class Hook {\n\t/**\n\t * @template {object} T\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t * @return {Hook<T>}\n\t */\n\tstatic build(options) {\n\t\tconst hook = new Hook();\n\t\treturn Hook.update(hook, options);\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t */\n\tstatic update(hook, options) {\n\t\tlet updated = false;\n\t\tif (typeof options === 'function') {\n\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget() {\n\t\t\t\t\tconst r = options();\n\t\t\t\t\treturn typeof r === 'object' && r || {};\n\t\t\t\t},\n\t\t\t});\n\t\t\tupdated = true;\n\t\t} else {\n\t\t\tif (options && typeof options === 'object') {\n\t\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tvalue: options,\n\t\t\t\t});\n\t\t\t\tupdated = true;\n\t\t\t}\n\t\t}\n\t\tif (updated) {\n\t\t\tHook.reset(hook);\n\t\t}\n\t\treturn hook;\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t */\n\tstatic reset(hook) {\n\t\tconst hooks = hook.#hooks;\n\t\tconst resetFn = hook.#config.resetFn;\n\t\tresetFn.sort(([, a], [, b]) => a - b);\n\t\tconst before = resetFn.filter(([, p]) => p <= 0);\n\t\tconst after = resetFn.filter(([, p]) => p > 0);\n\t\tfor (const [fn] of before) { fn(); }\n\t\tfor (const fn of values(hooks, ['reset'])) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn();\n\t\t}\n\t\tfor (const [fn] of after) { fn(); }\n\t}\n\n\t/** @type {{hooks: any; resetFn: [fn: () => void, hysteresis: number][]}} */\n\t#config = { hooks: Object.create(null), resetFn: [] };\n\t/** @type {string[]} */\n\t#keys = [];\n\t#stringTag = 'Hook';\n\t[Symbol.iterator]() { return this.entries(); }\n\t[Symbol.toStringTag]() { return this.#stringTag; }\n\t/** @param {string} hint */\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === 'number') { return NaN; }\n\t\treturn `[${this[Symbol.toStringTag]()}]`;\n\t}\n\n\tget #hooks() { return this.#config.hooks; };\n\t/**\n\t * @template {T extends readonly any[] ? never : T extends object ? string & keyof T : never} K\n\t * @param {K} key \n\t * @returns {Hook<Exclude<T extends readonly any[] ? never : T extends object ? T[K] :never, void | undefined>>}\n\t */\n\tget(key) {\n\t\tconst keys = [...this.#keys, key];\n\t\tconst hook = new Hook();\n\t\thook.#config = this.#config;\n\t\thook.#keys = keys;\n\t\thook.#stringTag = `Hook(${keys.join('.')})`;\n\t\treturn hook;\n\t}\n\t/**\n\t * @param {T extends (...args: infer A) => any ? A : []} args \n\t * @returns \n\t */\n\tcall(...args) {\n\t\tfor (const fn of this.values()) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn(...args);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {T | void}\n\t */\n\tfirst(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\treturn first(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\t*plugin(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\tyield* findHook(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\tvalues() { return values(this.#hooks, this.#keys); }\n\n\t/**\n\t * \n\t * @returns {IterableIterator<[string, T extends readonly (infer V)[] ? V : T]>}\n\t */\n\t*entries() {\n\t\tconst hooks = this.#hooks;\n\t\tconst name = this.#keys;\n\t\tfor (const [plugin, it] of Object.entries(hooks)) {\n\t\t\tfor (const value of findHook(it, name)) {\n\t\t\t\tyield [plugin, value];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * \n\t * @template [TX=(T extends Record<string, infer TT>? TT extends readonly (infer V)[] ? V : TT : never)]\n\t * @param {(v: *)=>v is TX} filter \n\t * @returns {IterableIterator<[plugin: string, key: string, value: TX]>}\n\t */\n\t*entriesObject(filter = noopFilter) {\n\t\tfor (const [plugin, hooksMap] of this.entries()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tyield [plugin, k, v];\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * @template [TT=(T extends Record<string, infer TT> ? TT : never)]\n\t * @param {(v: *)=>v is TT} [filter] \n\t * @returns {Record<string, TT>}\n\t */\n\tnamed(filter = noopFilter) {\n\t\t/** @type {Record<string, TT>} */\n\t\tconst result = Object.create(null);\n\t\tfor (const hooksMap of this.values()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tresult[k] = v;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * \n\t * @param {() => void} fn \n\t * @param {number} [hysteresis] \n\t * @returns \n\t */\n\tlisten(fn, hysteresis) {\n\t\tif (typeof fn !== 'function') { return () => { }; }\n\t\tconst resetFn = this.#config.resetFn;\n\t\t/** @type {[() => void, number]} */\n\t\tconst it = [fn, Number.isFinite(hysteresis) && hysteresis || 0];\n\t\tresetFn.push(it);\n\t\tresetFn.sort(([, a], [, b]) => b - a);\n\t\treturn () => {\n\t\t\tconst index = resetFn.findIndex(v => v === it);\n\t\t\tif (index >= 0) {\n\t\t\t\tresetFn.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n}\n","const errorPrototype = Error.prototype;\n/**\n * @template T\n */\nexport class ErrorHandler {\n\t/** \n\t * 使用 WeakMap 存储 错误原型 -> 处理函数\n\t * \n\t * 键是 Error 的 prototype 对象,值是对应的处理函数\n\t * \n\t * @type {WeakMap<Error, (error: any) => PromiseLike<T?> | T?>}\n\t */\n\t#handlers = new WeakMap();\n\n\t/**\n\t * 注册错误处理函数\n\t * @template {Error} C\n\t * @param {{new(...p: any): C; prototype: C}} ErrorClass - 错误类的构造函数\n\t * @param {(error: C) => PromiseLike<T?> | T?} handler - 处理函数\n\t */\n\tregister(ErrorClass, handler) {\n\t\tif (typeof handler !== 'function') {\n\t\t\tthrow new TypeError('Handler must be a function');\n\t\t}\n\t\tif (typeof ErrorClass !== 'function') {\n\t\t\tthrow new TypeError('Registered error class must be a subclass of Error');\n\t\t}\n\t\tconst prototype = ErrorClass.prototype;\n\t\tif (!(prototype instanceof Error)) {\n\t\t\tthrow new TypeError('Registered error class must be a subclass of Error');\n\t\t}\n\t\tthis.#handlers.set(prototype, handler);\n\t}\n\n\t/**\n\t * 将错误对象转换为友好的文本信息\n\t * @param {any} error - 需要处理的错误对象\n\t * @returns {Promise<T?>} - 处理后的文本信息\n\t */\n\tasync convert(error) {\n\t\tif (!(error instanceof Error)) { throw error; }\n\t\tconst handlers = this.#handlers;\n\t\tfor (\n\t\t\tlet prototype = Object.getPrototypeOf(error);\n\t\t\tprototype && prototype !== errorPrototype;\n\t\t\tprototype = Object.getPrototypeOf(prototype)\n\t\t) {\n\t\t\tconst handler = handlers.get(prototype);\n\t\t\tif (!handler) { continue; }\n\t\t\tconst res = await handler(error) ?? null;\n\t\t\tif (res !== null) { return res; }\n\t\t}\n\t\tconst handler = handlers.get(errorPrototype);\n\t\treturn handler ? await handler(error) ?? null : null;\n\t}\n}\n","/**\n * @template T\n * @extends {Promise<T>}\n */\nexport class LazyPromise extends Promise {\n\tstatic get [Symbol.species]() { return Promise; }\n\t/** @type {() => void} */\n\t#do;\n\t/**\n\t * \n\t * @param {(resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void} executor \n\t */\n\tconstructor(executor) {\n\t\t/** @type {(() => void) | null} */\n\t\tlet run = null;\n\t\tsuper((resolve, reject) => {\n\t\t\trun = () => {\n\t\t\t\ttry {\n\t\t\t\t\texecutor(resolve, reject);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treject(e);\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t\tthis.#do = () => {\n\t\t\tconst r = run;\n\t\t\trun = null;\n\t\t\tif (r) { r(); }\n\t\t};\n\t}\n\n\t/**\n\t * @template [TResult1=T]\n\t * @template [TResult2=never]\n\t * @param {((value: T) => TResult1 | PromiseLike<TResult1>)?} [onfulfilled] \n\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected] \n\t * @returns {Promise<TResult1 | TResult2>}\n\t */\n\tthen(onfulfilled, onrejected) {\n\t\tthis.#do();\n\t\treturn super.then(onfulfilled, onrejected);\n\t}\n\t/**\n\t * @template [TResult1=T]\n\t * @template [TResult2=never]\n\t * @param {((value: T) => TResult1 | PromiseLike<TResult1>)?} [onfulfilled] \n\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected] \n\t * @returns {LazyPromise<TResult1 | TResult2>}\n\t */\n\tlazyThen(onfulfilled, onrejected) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\t// 这里调用原生的 .then() 来监听当前 Promise 的状态\n\t\t\t// 但我们将结果传递给新 LazyPromise 的 resolve/reject\n\t\t\tthis.then(\n\t\t\t\t(value) => {\n\t\t\t\t\tif (typeof onfulfilled === 'function') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresolve(onfulfilled(value));\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tresolve(value);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t(reason) => {\n\t\t\t\t\tif (typeof onrejected === 'function') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresolve(onrejected(reason));\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(reason);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t}\n\t/**\n\t * @template [TResult=never]\n\t * @param {((reason: any) => TResult | PromiseLike<TResult>)?} [onrejected] \n\t * @returns {LazyPromise<T | TResult>}\n\t */\n\tlazyCatch(onrejected) {\n\t\t// Promise.prototype.catch 本质上就是 then(undefined, onRejected)\n\t\t// 调用 lazyThen 确保返回的是 LazyPromise\n\t\tthis.finally\n\t\treturn this.lazyThen(undefined, onrejected);\n\t}\n\n\t/**\n\t * @param {(() => PromiseLike<void> | void)?} [onfinally] \n\t * @returns {LazyPromise<T>}\n\t */\n\tlazyFinally(onfinally) {\n\t\tif (typeof onfinally !== 'function') { return this; }\n\n\t\treturn this.lazyThen(\n\t\t\tasync (value) => {\n\t\t\t\tawait onfinally();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tasync (reason) => {\n\t\t\t\tawait onfinally();\n\t\t\t\tthrow reason;\n\t\t\t}\n\t\t);\n\t}\n\t/**\n\t * 创建一个已解决的 LazyPromise。\n\t * @overload\n\t * @returns {LazyPromise<void>}\n\t */\n\t/**\n\t * 创建一个已解决的 LazyPromise。\n\t * @template T\n\t * @overload\n\t * @param {T} value - 用于解决 Promise 的值。\n\t * @returns {LazyPromise<Awaited<T>>}\n\t */\n\t/**\n\t * 创建一个已解决的 LazyPromise。\n\t * @template T\n\t * @overload\n\t * @param {T | PromiseLike<T>} value - 用于解决 Promise 的值。\n\t * @returns {LazyPromise<Awaited<T>>}\n\t */\n\t/**\n\t * 创建一个已解决的 LazyPromise。\n\t * @template T\n\t * @param {T | PromiseLike<T>} [value] - 用于解决 Promise 的值。\n\t * @returns {LazyPromise<Awaited<T>>}\n\t */\n\tstatic resolve(value) {\n\t\treturn new LazyPromise((resolve) => {\n\t\t\t// @ts-ignore\n\t\t\tresolve(value);\n\t\t});\n\t}\n\n\t/**\n\t * 创建一个已拒绝的 LazyPromise。\n\t * @template T\n\t * @param {any} reason - 拒绝 Promise 的原因。\n\t * @returns {LazyPromise<T>}\n\t */\n\tstatic reject(reason) {\n\t\treturn new LazyPromise((_, reject) => {\n\t\t\treject(reason);\n\t\t});\n\t}\n\n\t/**\n\t * 等待所有传入的 Promise 成功,或其中一个失败。\n\t * @template {readonly unknown[] | []} T\n\t * @param {T} iterable - 一个可迭代对象,如数组。\n\t * @returns {LazyPromise<{ -readonly [P in keyof T]: Awaited<T[P]> }>}\n\t */\n\tstatic all(iterable) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\tPromise.all(iterable).then(resolve, reject);\n\t\t});\n\t}\n\n\t/**\n\t * 等待所有传入的 Promise 完成(无论成功或失败)。\n\t * @template {readonly unknown[] | []} T\n\t * @param {T} iterable - 一个可迭代对象,如数组。\n\t * @returns {LazyPromise<{ -readonly [P in keyof T]: PromiseSettledResult<Awaited<T[P]>> }>}\n\t */\n\tstatic allSettled(iterable) {\n\t\treturn new LazyPromise((resolve) => {\n\t\t\tPromise.allSettled(iterable).then(resolve);\n\t\t});\n\t}\n\n\t/**\n\t * 等待其中一个 Promise 成功,或所有 Promise 都失败。\n\t * @template {readonly unknown[] | []} T\n\t * @param {T} iterable - 一个可迭代对象,如数组。\n\t * @returns {LazyPromise<Awaited<T[number]>>}\n\t */\n\tstatic any(iterable) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\tPromise.any(iterable).then(resolve, reject);\n\t\t});\n\t}\n\n\t/**\n\t * 等待其中一个 Promise 完成(无论成功或失败)。\n\t * @template {readonly unknown[] | []} T\n\t * @param {T} iterable - 一个可迭代对象,如数组。\n\t * @returns {LazyPromise<Awaited<T[number]>>}\n\t */\n\tstatic race(iterable) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\tPromise.race(iterable).then(resolve, reject);\n\t\t});\n\t}\n\t/**\n\t * 创建一个惰性执行的 Promise,该 Promise 会执行传入的回调函数。\n\t * 与原生 Promise.try() 立即执行不同,LazyPromise.try() 是惰性的。\n\t * @template T\n\t * @template {unknown[]} U\n\t * @param {(...args: U) => T | PromiseLike<T>} callbackFn - 要执行的回调函数。\n\t * @param {U} args - 传递给回调函数的参数。\n\t * @returns {LazyPromise<Awaited<T>>}\n\t */\n\tstatic try(callbackFn, ...args) {\n\t\treturn new LazyPromise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\t// @ts-ignore\n\t\t\t\tresolve(callbackFn(...args));\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t}\n\tstatic withResolvers() {\n\t\treturn Promise.withResolvers();\n\t}\n}\n","export class SError extends Error {\n\terror;\n\tconstructor(error: any) {\n\t\tsuper(String(error));\n\t\tthis.error = error;\n\t}\n}\n","import type { Context, Type, Scope, Fn } from './types.mts';\nimport { SError } from './SError.mts';\n\n\nfunction buildArray(params: (() => any)[]): any {\n\treturn params.map(f => f());\n}\nfunction buildObject(params: (() => any)[]): any {\n\tconst obj: any = {};\n\tfor (let i = 0; i < params.length; i += 2) {\n\t\tconst key = params[i];\n\t\tconst value = params[i + 1];\n\t\tobj[key()] = value?.();\n\t}\n\treturn obj;\n}\nfunction findFn<T>(fns: Record<string, Fn<T>>, name: string): Fn<T> {\n\tif (Object.hasOwn(fns, name)) {\n\t\tconst fn = fns[name];\n\t\tif (typeof fn === 'function') { return fn; }\n\t}\n\tif (name === '{...}') { return buildObject; }\n\tif (name === '[...]') { return buildArray; }\n\tthrow new Error(`Unknown function: ${name}`);\n}\n\nexport function compile<T>(fns: Record<string, Fn<T>>, exp: any): (value: T) => any {\n\tconst syntax: Record<string, (node: Type) => (ctx: Context<T>) => any> = {\n\t\t$(node) {\n\t\t\tif (node.length === 2) {\n\t\t\t\tconst value = node[1];\n\t\t\t\treturn () => value;\n\t\t\t}\n\t\t\tconst sentences = node.slice(1).map(compile);\n\t\t\treturn ctx => {\n\t\t\t\tlet result;\n\t\t\t\tfor (const _ of ctx.scope()) {\n\t\t\t\t\tfor (const sentence of sentences) {\n\t\t\t\t\t\tresult = sentence(ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t};\n\t\t},\n\t\t'$.$'(node) {\n\t\t\tif (node.length < 2) { throw new Error('Invalid member expression'); }\n\t\t\tconst compiledArgs = node.slice(1).map(compile);\n\t\t\treturn ctx => {\n\t\t\t\tconst [obj, ...keys] = compiledArgs\n\t\t\t\tlet val = obj(ctx);\n\t\t\t\tfor (const key of keys) {\n\t\t\t\t\tif (typeof val !== 'object' || val === null) { return }\n\t\t\t\t\tconst k = key(ctx);\n\t\t\t\t\tif (Array.isArray(val) && typeof k === 'number') {\n\t\t\t\t\t\tval = val[k < 0 ? val.length + k : k];\n\t\t\t\t\t} else if (Object.hasOwn(val, k)) {\n\t\t\t\t\t\tval = val[k];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn val;\n\t\t\t};\n\t\t},\n\t\t'$=$'(node) {\n\t\t\tif (node.length !== 2 && node.length !== 3 && node.length !== 4) { throw new Error('Invalid assignment expression'); }\n\t\t\tconst name = node[1];\n\t\t\tif (!name || typeof name !== 'string') { throw new Error('Invalid assignment expression'); }\n\t\t\tif (node.length === 2) { return ctx => ctx.get(name); }\n\t\t\tconst value = compile(node[2]);\n\t\t\tconst define = Boolean(node[3]);\n\t\t\treturn ctx => ctx.set(name, value(ctx), define);\n\t\t},\n\t\t'$!$'(node) {\n\t\t\tif (node.length !== 2) { throw new Error('Invalid error expression'); }\n\t\t\tconst value = compile(node[1]);\n\t\t\treturn ctx => { throw new SError(value(ctx)); };\n\t\t},\n\t\t'$[]$'(node) {\n\t\t\tif (node.length !== 2) { throw new Error('Invalid array expression'); }\n\t\t\tconst array = node[1];\n\t\t\tif (!Array.isArray(array)) { throw new Error('Invalid array expression'); }\n\t\t\tconst compiledArgs = array.map(compile);\n\t\t\treturn ctx => compiledArgs.map(argFn => argFn(ctx));\n\t\t},\n\t\t'${}$'(node) {\n\t\t\tif (node.length !== 2) { throw new Error('Invalid object expression'); }\n\t\t\tconst obj = node[1];\n\t\t\tif (typeof obj !== 'object') { throw new Error('Invalid object expression'); }\n\t\t\tif (obj === null) { return () => null; }\n\t\t\tconst compiledArgs = Object.entries(obj).map(([k, v]) => [k, compile(v)] as const);\n\t\t\treturn ctx => Object.fromEntries(compiledArgs.map(([k, v]) => [k, v(ctx)]));\n\t\t},\n\t};\n\tfunction compile(node: any): (ctx: Context<T>) => any {\n\t\tif (!Array.isArray(node) || !node.length) { return () => node; }\n\t\tconst head = node[0];\n\t\tif (typeof head !== 'string' || head[0] !== '$') {\n\t\t\treturn () => node;\n\t\t}\n\t\tconst s = Object.hasOwn(syntax, head) ? syntax[head] : undefined;\n\t\tif (s) { return s(node as Type); }\n\t\tlet fnName: string | undefined;\n\t\tlet args: any[] | undefined;\n\t\tconst fn = findFn(fns, fnName || head.slice(1));\n\t\tconst compiledArgs = (args || node.slice(1)).map(compile);\n\t\treturn ctx => fn(compiledArgs.map(argFn => () => argFn(ctx)), ctx);\n\t}\n\treturn value => {\n\t\tconst compiled = compile(exp);\n\t\tconst root: Scope = { variables: {} };\n\t\tlet current: Scope = root;\n\n\t\tconst scopes = [current];\n\t\tfunction* scope<T>(): Generator<Scope, T, T> {\n\t\t\tconst parent = current;\n\t\t\tconst scope: Scope = {\n\t\t\t\tget parent() { return parent; },\n\t\t\t\tvariables: {},\n\t\t\t};\n\t\t\tcurrent = scope;\n\t\t\tscopes.push(scope);\n\t\t\ttry {\n\t\t\t\treturn (yield scope);\n\t\t\t} finally {\n\t\t\t\tscopes.pop();\n\t\t\t\tcurrent = parent;\n\t\t\t}\n\t\t}\n\t\tfunction get(name: string) {\n\t\t\tfor (let i = scopes.length - 1; i >= 0; i--) {\n\t\t\t\tconst variables = scopes[i].variables;\n\t\t\t\tif (Object.hasOwn(variables, name)) { return variables[name]; }\n\t\t\t}\n\t\t}\n\t\tfunction set(name: string, value: any, define = false) {\n\t\t\tif (define) {\n\t\t\t\tcurrent.variables[name] = value;\n\t\t\t}\n\t\t\tfor (let i = scopes.length - 1; i >= 0; i--) {\n\t\t\t\tconst variables = scopes[i].variables;\n\t\t\t\tif (Object.hasOwn(variables, name)) { return variables[name] = value; }\n\t\t\t}\n\t\t\troot.variables[name] = value;\n\t\t}\n\n\t\treturn compiled({ value, scope, get, set });\n\t};\n}\n","// ================= 数学与数字 (Math & Number) =================\nexport const add = (params: (() => number)[]) => params.reduce((r, f) => r + f(), 0);\nexport const sub = (params: (() => number)[]) => params.slice(1).reduce((r, f) => r - f(), params[0]());\nexport const mul = (params: (() => number)[]) => params.reduce((r, f) => r * f(), 1);\nexport const div = (params: (() => number)[]) => params.slice(1).reduce((r, f) => r / f(), params[0]());\nexport const mod = (params: (() => number)[]) => params[0]() % params[1]();\nexport const pow = (params: (() => number)[]) => params[0]() ** params[1]();\n\nexport const abs = (params: (() => number)[]) => Math.abs(params[0]());\nexport const max = (params: (() => number)[]) => Math.max(...params.map(f => f()));\nexport const min = (params: (() => number)[]) => Math.min(...params.map(f => f()));\nexport const ceil = (params: (() => number)[]) => Math.ceil(params[0]());\nexport const floor = (params: (() => number)[]) => Math.floor(params[0]());\nexport const round = (params: (() => number)[]) => Math.round(params[0]());\nexport const fixed = (params: (() => number)[]) => Number(params[0]().toFixed(params[1]?.() ?? 0));\nexport const toNum = (params: (() => any)[]) => Number(params[0]());\n\n// ================= 字符串 (String) =================\nexport const concat = (params: (() => string)[]) => params.map(f => f()).join('');\nexport const length = (params: (() => any)[]) => params[0]()?.length ?? 0;\nexport const includes = (params: (() => any)[]) => params[0]().includes(params[1]());\nexport const toUpper = (params: (() => string)[]) => params[0]().toUpperCase();\nexport const toLower = (params: (() => string)[]) => params[0]().toLowerCase();\nexport const trim = (params: (() => string)[]) => params[0]().trim();\nexport const slice = (params: (() => any)[]) => params[0]().slice(params[1](), params[2]?.());\nexport const indexOf = (params: (() => any)[]) => params[0]().indexOf(params[1](), params[2]?.());\nexport const startsWith = (params: (() => string)[]) => params[0]().startsWith(params[1]());\nexport const endsWith = (params: (() => string)[]) => params[0]().endsWith(params[1]());\nexport const padStart = (params: (() => any)[]) => params[0]().padStart(params[1](), params[2]?.());\nexport const padEnd = (params: (() => any)[]) => params[0]().padEnd(params[1](), params[2]?.());\nexport const toStr = (params: (() => any)[]) => String(params[0]());\n\n// ================= 逻辑与比较 (Logic & Comparison) =================\nexport const and = (params: (() => any)[]) => {\n\tlet result: any = true;\n\tfor (const fn of params) {\n\t\tresult = fn();\n\t\tif (!result) return result;\n\t}\n\treturn result;\n};\n\nexport const or = (params: (() => any)[]) => {\n\tlet result: any = false;\n\tfor (const fn of params) {\n\t\tresult = fn();\n\t\tif (result) return result;\n\t}\n\treturn result;\n};\n\nexport const bool_and = (params: (() => any)[]) => !params.find(f => !f());\nexport const bool_or = (params: (() => any)[]) => Boolean(params.find(f => f()));\nexport const bool = (params: (() => boolean)[]) => Boolean(params[0]());\nexport const not = (params: (() => boolean)[]) => !params[0]();\n\nexport const eq = (params: (() => any)[]) => params[0]() === params[1]();\nexport const neq = (params: (() => any)[]) => params[0]() !== params[1]();\nexport const gt = (params: (() => number)[]) => params[0]() > params[1]();\nexport const gte = (params: (() => number)[]) => params[0]() >= params[1]();\nexport const lt = (params: (() => number)[]) => params[0]() < params[1]();\nexport const lte = (params: (() => number)[]) => params[0]() <= params[1]();\n\n// ================= 数组 (Array) =================\nexport const has = (params: (() => any)[]) => Object.hasOwn(params[0](), params[1]());\nexport const keys = (params: (() => Record<string, any>)[]) => Object.keys(params[0]() ?? {});\nexport const values = (params: (() => Record<string, any>)[]) => Object.values(params[0]() ?? {});\nexport const entries = (params: (() => Record<string, any>)[]) => Object.entries(params[0]() ?? {});\nexport const push = (params: (() => any)[]) => [...params[0](), ...params.slice(1).map(f => f())];\nexport const pop = (params: (() => any[])[]) => params[0]().slice(0, -1);\nexport const shift = (params: (() => any[])[]) => params[0]().slice(1);\nexport const unshift = (params: (() => any)[]) => [...params.slice(1).map(f => f()), ...params[0]()];\nexport const reverse = (params: (() => any[])[]) => [...params[0]()].reverse();\nexport const sort = (params: (() => any[])[]) => [...params[0]()].sort();\nexport const flatten = (params: (() => any)[]) => params[0]().flat(params[1]?.() ?? 1);\nexport const join = (params: (() => any)[]) => params[0]().join(params[1]?.() ?? ',');\n\n// ================= 对象 (Object) =================\nexport const assign = (params: (() => Record<string, any>)[]) => Object.assign({}, ...params.map(f => f()));\nexport const set = (params: (() => any)[]) => {\n\tconst target = params[0]();\n\n\tif (!target || typeof target !== 'object') return target;\n\tconst key = params[1]();\n\tconst value = params[2]();\n\n\tif (Array.isArray(target)) {\n\t\tconst arr = [...target];\n\t\tarr[key] = value;\n\t\treturn arr;\n\t}\n\treturn { ...target, [key]: value };\n};\n\nexport const omit = (params: (() => any)[]) => {\n\tconst obj = params[0]();\n\tconst keys = params[1]();\n\tif (!obj || !keys) return obj;\n\treturn Object.keys(obj).reduce((acc, key) => { if (!keys.includes(key)) acc[key] = obj[key]; return acc; }, {} as any);\n};\n\n// ================= 日期与时间 (Date & Time) =================\nexport const now = () => Date.now();\nexport const date = (params: (() => any)[]) => new Date(params[0]()).getTime();\nexport const year = (params: (() => any)[]) => new Date(params[0]()).getFullYear();\nexport const month = (params: (() => any)[]) => new Date(params[0]()).getMonth() + 1;\nexport const day = (params: (() => any)[]) => new Date(params[0]()).getDate();\nexport const hour = (params: (() => any)[]) => new Date(params[0]()).getHours();\nexport const minute = (params: (() => any)[]) => new Date(params[0]()).getMinutes();\nexport const second = (params: (() => any)[]) => new Date(params[0]()).getSeconds();\nexport const timestamp = (params: (() => any)[]) => new Date(params[0]()).getTime();\nexport const formatDate = (params: (() => any)[]) => {\n\tconst d = new Date(params[0]());\n\tconst fmt = params[1]?.() || 'YYYY-MM-DD';\n\tconst pad = (n: number) => String(n).padStart(2, '0');\n\treturn fmt\n\t\t.replace('YYYY', String(d.getFullYear()))\n\t\t.replace('MM', pad(d.getMonth() + 1))\n\t\t.replace('DD', pad(d.getDate()))\n\t\t.replace('hh', pad(d.getHours()))\n\t\t.replace('mm', pad(d.getMinutes()))\n\t\t.replace('ss', pad(d.getSeconds()));\n};\nexport const dateDiff = (params: (() => any)[]) => {\n\treturn new Date(params[0]()).getTime() - new Date(params[1]()).getTime();\n};\n\n// ================= 控制流与类型判断 =================\nconst _if = (params: (() => any)[]) => params[0]() ? params[1]() : params[2]?.();\nexport const coalesce = (params: (() => any)[]) => {\n\tfor (const fn of params) {\n\t\tconst val = fn();\n\t\tif (val !== null && val !== undefined) return val;\n\t}\n};\n\nexport const isNull = (params: (() => any)[]) => params[0]() == null;\nexport const isArray = (params: (() => any)[]) => Array.isArray(params[0]());\nexport const isObj = (params: (() => any)[]) => typeof params[0]() === 'object' && params[0]() !== null && !Array.isArray(params[0]());\nexport const isStr = (params: (() => any)[]) => typeof params[0]() === 'string';\nexport const isNum = (params: (() => any)[]) => typeof params[0]() === 'number' && !isNaN(params[0]());\n\n// ================= 运算符别名导出 =================\nexport {\n\tadd as '+',\n\tsub as '-',\n\tmul as '*',\n\tdiv as '/',\n\tmod as '%',\n\tpow as '**',\n\teq as '==',\n\tneq as '!=',\n\tgt as '>',\n\tgte as '>=',\n\tlt as '<',\n\tlte as '<=',\n\t_if as if,\n};\n\n// ================= 正则表达式支持 (RegExp Support) =================\n\n/**\n * 测试字符串是否匹配正则表达式\n * 语法: ['test', strFn, regexFn]\n * 返回: boolean\n */\nexport const regex_test = (params: (() => any)[]) => {\n\tconst regex = params[0]();\n\tconst str = params[1]();\n\tif (typeof str !== 'string' || !(regex instanceof RegExp)) return false;\n\treturn regex.test(str);\n};\n\n/**\n * 使用正则表达式匹配字符串\n * 语法: ['match', strFn, regexFn]\n * 返回: 匹配结果数组或 null\n */\nexport const match = (params: (() => any)[]) => {\n\tconst str = params[0]();\n\tconst regex = params[1]();\n\tif (typeof str !== 'string' || !(typeof regex === 'string' || regex instanceof RegExp)) return null;\n\treturn str.match(regex);\n};\n\n/**\n * 使用正则表达式替换字符串\n * 语法: ['replace', strFn, regexFn, replacementFn]\n * 返回: 替换后的新字符串\n */\nexport const replace = (params: (() => any)[]) => {\n\tconst str = params[0]();\n\tconst regex = params[1]();\n\tconst replacement = params[2]();\n\tif (typeof str !== 'string' || !(typeof regex === 'string' || regex instanceof RegExp)) return str;\n\treturn str.replace(regex, replacement);\n};\n\n/**\n * 使用正则表达式分割字符串\n * 语法: ['split', strFn, regexFn, limitFn?]\n * 返回: 分割后的字符串数组\n */\nexport const split = (params: (() => any)[]) => {\n\tconst str = params[0]();\n\tconst regex = params[1]();\n\tconst limit = params[2]?.();\n\tif (typeof str !== 'string' || !(typeof regex === 'string' || regex instanceof RegExp)) return [str];\n\treturn str.split(regex, limit);\n};\n\n/**\n * 创建正则表达式对象\n * 语法: ['regex', patternFn, flagsFn?]\n * 返回: RegExp 对象\n */\nexport const Regex = (params: (() => any)[]) => {\n\tconst pattern = params[0]();\n\tconst flags = params[1]?.();\n\tif (typeof pattern !== 'string' && !(pattern instanceof RegExp)) return null;\n\treturn new RegExp(pattern, flags);\n};\n\n/**\n * 检查值是否为正则表达式\n * 语法: ['isRegex', valueFn]\n * 返回: boolean\n */\nexport const isRegex = (params: (() => any)[]) => {\n\treturn params[0]() instanceof RegExp;\n};\n\n\n/**\n * 动态创建 Date 对象\n * 语法: ['date', valueFn?]\n * 参数: 支持时间戳、日期字符串或无参(当前时间)\n * 返回: Date 对象,若解析失败返回 Invalid Date\n */\nexport const _Date = (params: (() => any)[]) => {\n\tconst value = params[0]?.();\n\tif (value === undefined) return new Date();\n\treturn new Date(value);\n};\nexport {_Date as Date};\n\n/**\n * 检查值是否为有效的 Date 对象\n * 语法: ['isDate', valueFn]\n * 返回: boolean\n */\nexport const isDate = (params: (() => any)[]) => {\n\tconst val = params[0]();\n\treturn val instanceof Date && !isNaN(val.getTime());\n};\n","import type { Type, Context, Fn } from './types.mts';\nimport { compile } from './compile.mts';\n\nexport type { Type, Context, Fn, Scope } from './types.mts';\nexport { SError as Error } from './SError.mts';\nexport * as fns from './fns.mts';\n\n\n\nexport function build<T>(\n\tfns: Record<string, Fn<T>>\n): {\n\t(exp: any): (value: T) => any;\n\t(exp: any, value: T): any;\n\t(exp: any, ...params: [T?]): any;\n};\nexport function build<T>(\n\tfns: Record<string, Fn<T>>,\n\texp: any,\n): (ctx?: T) => any;\nexport function build<T>(\n\tfns: Record<string, Fn<T>>,\n\texp: any,\n\tvalue: T,\n): any;\nexport function build<T>(\n\tfns: Record<string, Fn<T>>,\n\texp?: any,\n\tctx?: T,\n): any;\nexport function build<T>(fns: Record<string, Fn<T>>, ...params: [exp?: any, ctx?: T]) {\n\tif (params.length) {\n\t\tconst executor = compile(fns, params[0]);\n\t\treturn params.length < 2 ? executor : executor(params[1] as T);\n\t}\n\tfunction r(exp: any): (value: T) => any\n\tfunction r(exp: any, value?: T): any\n\tfunction r(exp: any, ...params: [T?]) {\n\t\tconst executor = compile(fns, exp);\n\t\treturn params.length ? executor(params[0] as T) : executor;\n\t};\n\treturn r;\n}\n\n\nexport function value(val: any): any {\n\tif (!Array.isArray(val) || !val.length) { return val; }\n\tconst head = val[0]\n\tif (typeof head !== 'string' || head[0] !== '$') { return val; }\n\treturn ['$', val];\n}\n\nexport function fn(fn: string, ...args: any[]): Type {\n\treturn ['$' + fn, ...args];\n}\n\nexport function call(fn: string): (...args: any[]) => Type {\n\tconst name = '$' + fn;\n\treturn (...args) => [name, ...args];\n}\n\nexport function array(array: any[]): Type {\n\tif (!Array.isArray(array)) { throw new Error('Invalid array'); }\n\treturn ['$[]', array];\n}\nexport function object(obj: Record<string, any>): Type {\n\tif (typeof obj !== 'object') { throw new Error('Invalid object'); }\n\treturn ['${}', obj];\n}\n","const regex = /\\{([^}{}]+)\\}/g\n/**\n * \n * @param {string?} [pattern] \n */\nexport function getPatternFields(pattern) {\n\tif (!pattern || typeof pattern !== 'string') { return []; }\n\t/** @type {string[]} */\n\tconst fields = [];\n\tfor(let result = regex.exec(pattern); result; result = regex.exec(pattern)) {\n\t\tfields.push(result[1]);\n\t}\n\treturn fields;\n}\n","function extractSegments(str: string, p: string): string[] {\n\tconst result: string[] = [];\n\tlet current = '';\n\tfor (const c of str) {\n\t\tif (p.includes(c)) {\n\t\t\tresult.push(current);\n\t\t\tcurrent = '';\n\t\t\tresult.push(c);\n\t\t} else {\n\n\t\t\tcurrent += c\n\t\t}\n\t}\n\tresult.push(current);\n\treturn result;\n}\n\nexport function pathVerify(pattern: string | string[], str: string, p = '/'): boolean {\n\tif ( typeof str !== 'string') { return false; }\n\tconst strSegments = extractSegments(str, p);\n\tfor (const ptn of [pattern].flat()) {\n\tif (typeof ptn !== 'string') { continue; }\n\t\tconst patternSegments = extractSegments(ptn, p);\n\t\tconst memo: Set<string> = new Set();\n\n\t\tfunction match(pi: number, si: number): boolean {\n\t\t\tif (pi > patternSegments.length || si > strSegments.length) { return false; }\n\t\t\tconst key = `${pi},${si}`;\n\t\t\tif (memo.has(key)) { return false; }\n\n\t\t\tif (pi === patternSegments.length) { return si === strSegments.length; }\n\n\t\t\tif (si === strSegments.length) {\n\t\t\t\tmemo.add(key);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst currentPattern = patternSegments[pi];\n\t\t\tif (currentPattern === '*') {\n\t\t\t\tfor (let consume = 1; consume <= strSegments.length - si; consume += 2) {\n\t\t\t\t\tif (match(pi + 1, si + consume)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (currentPattern === '?' || currentPattern === strSegments[si]) {\n\t\t\t\tif (match(pi + 1, si + 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo.add(key);\n\t\t\treturn false;\n\t\t}\n\t\tif (match(0, 0)) { return true }\n\t}\n\treturn false;\n}\n","/** @import { Permission } from '@yongdall/types' */\n\n\n\n\n\n/**\n *\n * @param {Permission} permission\n * @returns {Iterable<string>}\n */\nexport default function* yieldPermissionConstraintFields({ constraints, organizationField }) {\n\tif (organizationField) { yield organizationField; }\n\tif (!constraints) { return; }\n\tfor (const [field, constraint] of Object.entries(constraints)) {\n\t\tif (!constraint) { continue; }\n\t\tconst { value, values, user } = constraint;\n\t\tif (value !== undefined) {\n\t\t\tyield field;\n\t\t} else if (Array.isArray(values) && values.length) {\n\t\t\tyield field;\n\t\t} else if (values instanceof Set && values.size) {\n\t\t\tyield field;\n\t\t} else if (user) {\n\t\t\tyield field;\n\t\t}\n\t}\n}\n","export * as Search from './Search/index.mjs';\nexport * as Datetime from './Datetime.mjs';\nexport * as Pattern from './Pattern/index.mts';\nexport { transformError } from './transformError.mjs';\nexport { Hook } from './Hook.mjs';\nexport { ErrorHandler } from './ErrorHandler.mjs';\nexport { LazyPromise } from './LazyPromise.mjs';\nexport * as SExpr from './SExpr/index.mts';\nexport * from './model.mjs';\nexport * from './utils/index.mts';\nexport { default as yieldPermissionConstraintFields } from './yieldPermissionConstraintFields.mjs';\n\n\nexport const pluginIdRegex = /^(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+)$/;\nexport const findPluginIdRegex = /^(?<pluginId>(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+))(?:\\/(?<path>[^#]*))?(?:#(?<hash>.*))?$/;\n\n/**\n * @typedef {object} Plugin\n * @property {string} [version]\n * @property {Record<string, string>} [assets]\n * @property {string} [hooks]\n * @property {string[]} [styles]\n */\n/**\n * @typedef {object} BootConfiguration\n * @property {string} [id] \n * @property {string} [route] 路由管理器\n * @property {string} [theme] 界面主题\n * @property {string} [authenticator] 登陆器\n * @property {boolean} [authRequired] 是否强制登陆\n * @property {string} [skin]\n * @property {string} [path] \n * @property {Record<string, string>} [pages]\n * @property {Record<string, string>} [continuations]\n */\n/**\n * @typedef {object} Importmap\n * @property {Record<string, string>} imports\n * @property {Record<string, Record<string, string>>} scopes\n */\n/**\n * @typedef {object} Indicator\n * @property {string} color\n * @property {string} label\n * @property {unknown} [filters]\n */\n\n/**\n *\n * @param {*} v\n * @returns {v is (...p: any[]) => any}\n */\nexport function isFunction(v) {\n\treturn typeof v === 'function';\n}\n","export const pathRoots = {\n\tapi: '/api',\n\tfile: 'fileCabinets',\n};\nexport default pathRoots;\n","const regex = /^((?<Y>\\d+)-(?<M>\\d+)-(?<D>\\d+)[t| ])?(?<h>2[0-3]|[01]\\d):(?<m>[0-5]\\d)(?::(?<s>[0-5]\\d(?:(\\.\\d{1,3})?)))?(?<tz>z|[+-]\\d\\d(:?\\d\\d)?)?$/i;\n\nexport function toTimeZone(date = new Date) {\n\tlet tzo = date.getTimezoneOffset();\n\tif (!tzo) { return 'Z'; }\n\tconst s = tzo < 0 ? '+' : '-';\n\ttzo = Math.abs(tzo);\n\treturn s + [Math.floor(tzo / 60), tzo % 60].map(v => `${v}`.padStart(2, '0')).join(':');\n}\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTime(date) {\n\treturn [\n\t\tdate.getHours(),\n\t\tdate.getMinutes(),\n\t\tdate.getSeconds(),\n\t].map(v => `${v}`.padStart(2, '0')).join(':');\n}\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDate(date) {\n\treturn [\n\t\t`${date.getFullYear()}`.padStart(4, '0'),\n\t\t`${date.getMonth() + 1}`.padStart(2, '0'),\n\t\t`${date.getDate()}`.padStart(2, '0'),\n\t].join('-');\n}\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTimetz(date) {\n\treturn toTime(date) + `.${date.getMilliseconds()}`.padStart(3, '0') + toTimeZone(date);\n}\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toDatetime(date) {\n\treturn toDate(date) + ' ' + toTime(date);\n}\n\n/**\n * \n * @param {Date} date \n * @returns \n */\nexport function toTimestamp(date) {\n\treturn toDate(date) + 'T' + toTimetz(date);\n}\n\n/**\n * \n * @param {string | Date | null | number} [val] \n * @returns \n */\nexport function parseDate(val) {\n\tif (!val) { return null; }\n\tif (val instanceof Date) { return val.valueOf() ? val : null; }\n\tif (typeof val === 'number') { return new Date(val); }\n\tif (typeof val !== 'string') { return null; }\n\tconst groups = regex.exec(val)?.groups;\n\tif (!groups) { return null; }\n\tconst currentDate = new Date;\n\tconst { Y, M,D, h, m, s, tz } = groups\n\tconst tzx = tz === 'z' || tz === 'Z' || tz.includes(':') ? tz : tz ? `${tz}:00` : toTimeZone(currentDate);\n\treturn new Date(`${Y || currentDate.getFullYear()}-${M || currentDate.getMonth() + 1}-${D || currentDate.getDate()}T${h}:${m}:${s || '00'}${tzx}`);\n}\n","import DotRequest from 'dot-request';\nimport pathRoots from './paths.mjs';\nimport { toTimestamp } from './utils/date.mjs';\n\nclass ARequest extends DotRequest {\n\tbuild() {\n\t\treturn new ARequest();\n\t}\n\n\tmethod(method: string, path?: string) {\n\t\treturn super.method('POST', path).header('X-Method', method);\n\t}\n}\n\n\nexport async function errorHandler(response: Response) {\n\tconst contentType = response.headers.get(\"content-type\")\n\t\t?.split(';')[0].replace(/\\s+/g, '').toLowerCase() || '';\n\tif (contentType === 'application/json' || contentType === 'text/json') {\n\t\treturn await response.json().then(v => Promise.reject(v?.error), v => Promise.reject(null));\n\t}\n\tif (contentType === \"text/plain\") {\n\t\treturn await response.text().then(v => Promise.reject(v));\n\t}\n\treturn Promise.reject(response);\n}\n\nexport function userErrorHandler(r: Response) {\n\tif (r.status === 401) {\n\t\t// logout();\n\t}\n\treturn errorHandler(r);\n\n}\nexport type ErrorAlerter = (error: any) => PromiseLike<void> | void;\n\n\nexport function ErrorAlerter(error: any): PromiseLike<void> | void {\n\tif (!error) { return alert('未知错误'); }\n\tif (error instanceof Response) { return alert('服务器错误,请联系管理员'); }\n\tif (typeof error === 'string') { return alert(error); }\n\tif (typeof error !== 'object') { return; }\n\tlet { message, code } = error;\n\tif (typeof message !== 'string') { message = ''; }\n\tif (typeof code !== 'string') { code = ''; }\n\tif (!message && !code) { return; }\n\talert([\n\t\tmessage || '未知错误',\n\t\tcode ? `[${code}]` : '',\n\t].filter(Boolean).join(' '));\n}\nlet alertError: ErrorAlerter = ErrorAlerter;\n/**\n * \n * @param {Response} r \n * @returns \n */\nexport function errorShowHandler(r: Response) {\n\treturn userErrorHandler(r).catch(async error => {\n\t\tawait alertError(error);\n\t\treturn Promise.reject(error);\n\t});\n}\nconst allHeaders = new Set<() => Record<string, string> | PromiseLike<Record<string, string>>>();\nconst headerRunner = new Set<(headers: Headers) => void | PromiseLike<void>>();\n\nexport function addHeader(fn: () => Record<string, string> | PromiseLike<Record<string, string>>) {\n\tallHeaders.add(fn);\n\treturn () => {\n\t\tallHeaders.delete(fn);\n\t}\n}\nexport function addHeaderRunner(fn: (headers: Headers) => void | PromiseLike<void>) {\n\theaderRunner.add(fn);\n\treturn () => {\n\t\theaderRunner.delete(fn);\n\t}\n}\n\nasync function headers() {\n\tconst list = await Promise.all([...allHeaders].map(v => v()))\n\treturn Object.fromEntries(list.flatMap(v => Object.entries(v)));\n}\nasync function runHeaders(headers: Headers) {\n\tawait Promise.all([...headerRunner].map(v => v(headers)));\n}\nexport const baseRequest = new ARequest().fetch(async (a, fetch) => {\n\tconst req = new Request(a, { headers: {\n\t\t...Object.fromEntries(a.headers.entries()),\n\t\t...await headers(),\n\t} });\n\tconst res = await fetch(req);\n\tawait runHeaders(res.headers);\n\treturn res;\n}).get().prefix(`${pathRoots.api}/client`).stringifyJSON(v => {\n\treturn JSON.stringify(v, (key, value) => {\n\t\tif (value instanceof Date) { return toTimestamp(value); }\n\t\tif (typeof value === 'bigint') { return String(value); }\n\t\tif (value instanceof Set) { return [...value]; }\n\t\treturn value;\n\t});\n}).errorHandler(errorHandler);\nconst request = baseRequest.clone().errorHandler(errorShowHandler);\nexport default request;\n\nexport function setErrorAlerter(fn?: ErrorAlerter | null) {\n\tif (typeof fn === 'function') { alertError = fn; }\n}\n","import { baseRequest } from './request.mts';\n/** @import { Plugin } from '@yongdall/common' */\n/** @import { AppConfiguration } from '@yongdall/types' */\n\n/** @type {AppConfiguration} */\nexport const configuration = await baseRequest.clone().get`application`.query({\n\tdomain: location.hostname,\n\tport: location.port,\n\tpath: location.pathname,\n}).json();\n\n/** @type {Record<string, Plugin>} */\n// @ts-ignore\nexport const plugins = window.yongdallPlugins;\n\nexport const applicationId = configuration.id;\nexport const path = configuration.path;\n\nexport const boot = {\n\tget theme() { return configuration.theme; },\n\tget route() { return configuration.route; },\n\tget authenticator() { return configuration.authenticator; },\n\tget type() { return configuration.type; },\n\tget skin() { return configuration.skin; },\n\n};\n\nexport default configuration;\n","/** @import { Importmap } from '@yongdall/common' */\n\n\n/** @type {Importmap} */\nexport let importmap = {imports: {}, scopes: {}};\ntry {\n\tconst {imports = {}, scopes = {}} = JSON.parse(document.querySelector('script[type=importmap]')?.textContent || '');\n\timportmap = {imports, scopes}\n} catch {\n\n}\n\nexport { importmap as default }\n","import { findPluginIdRegex } from '@yongdall/common';\nimport { plugins } from './configuration.mjs';\nimport importmap from './importmap.mjs';\n\n/**\n * @template T\n * @overload\n * @param {string} [id] \n * @param {(f: string) => Promise<object>} [importFile] \n * @returns {Promise<T | undefined>}\n */\n/**\n * @template T\n * @overload\n * @param {string} [id] \n * @param {string} [pluginId] \n * @param {(f: string) => Promise<object>} [importFile] \n * @returns {Promise<T | undefined>}\n */\n/**\n * @template T\n * @param {string} [id] \n * @param {((f: string) => Promise<object>) | string} [pluginId] \n * @param {(f: string) => Promise<object>} [importFile] \n * @returns {Promise<T | undefined>}\n */\nexport async function importWidget(id, pluginId, importFile) {\n\tif (!id) { return; }\n\tif (id[0] === ':') {\n\t\t// TODO: 表示数据库内脚本\n\t}\n\tconst index = id.indexOf('#');\n\tlet file = index < 0 ? id : id.slice(0, index);\n\tif (pluginId && typeof pluginId === 'string') {\n\t\tif (!file || file === '@') {\n\t\t\tfile = pluginId;\n\t\t} else if (file.startsWith('@/')) {\n\t\t\tfile = pluginId + file.slice(1);\n\t\t}\n\t}\n\tconst importFn = [pluginId, importFile].find(\n\t\t/** @type {(v: any) => v is ((f: string) => Promise<object>)} */(\n\t\t\tv => typeof v === 'function'\n\t\t)\n\t) || ((f) => import(f));\n\n\t/** @type {any} */\n\tconst mod = await importFn(file).catch((e) => { console.error(e); });\n\tif (index < 0) { return mod; }\n\tconst key = id.slice(index + 1);\n\tif (!key) { return mod.default; }\n\tlet val = mod;\n\tfor (const k of key.split('.')) {\n\t\tif (!val || typeof val !== 'object') { return; }\n\t\tval = val[k];\n\t}\n\treturn val;\n}\n/**\n * \n * @param {string} path \n * @param {Record<string, string>?} [scope] \n */\nfunction findImport(path, scope) {\n\tif (!scope) { return null; }\n\tconst p = scope[path];\n\tif (p) { return p; }\n\tlet length = 0;\n\t/** @type {string} */\n\tlet base = '';\n\tfor (const item of Object.entries(scope)) {\n\t\tconst [key, target] = item;\n\t\tif (key[key.length - 1] !== '/') { continue; }\n\t\tif (path.startsWith(key) && key.length > length) {\n\t\t\tlength = key.length;\n\t\t\tbase = target;\n\t\t}\n\t}\n\tif (!length) { return null; }\n\tif (base[base.length - 1] !== '/') {\n\t\tbase += '/';\n\t}\n\n\treturn base + path.slice(length);\n\n}\n/**\n * \n * @param {string} path \n * @param {string} root \n */\nfunction importMap(path, root) {\n\tlet bestScopeMatch = '';\n\t/** @type {Record<string, string>?} */\n\tlet scope = null;\n\tfor (const [scopeName, scopeMap] of Object.entries(importmap.scopes)) {\n\t\tif (root.startsWith(scopeName) && scopeName.length > bestScopeMatch.length) {\n\t\t\tbestScopeMatch = scopeName;\n\t\t\tscope = scopeMap;\n\t\t}\n\t}\n\treturn findImport(path, scope) || findImport(path, importmap.imports);\n}\n\n/**\n * 加载样式\n * @param {string} url \n * @param {string} [plugin] \n * @param {boolean} [pluginOnly] \n * @returns {string}\n */\nfunction importURL(url, plugin, pluginOnly) {\n\tconst s = !(pluginOnly && plugin) && findPluginIdRegex.exec(url)?.groups;\n\tif (s) {\n\t\tconst { pluginId, path } = s;\n\t\tconst pluginDefine = Object.hasOwn(plugins, pluginId) && plugins[pluginId] || {};\n\t\tconst VERSION = pluginDefine.version || 'VERSION';\n\t\tconst root = `/assets/plugins/${pluginId}/${VERSION}/`;\n\t\tconst base = location.origin + root;\n\t\tconst u = pluginDefine.assets?.[path] || importMap(url, root);\n\t\tif (u) { return new URL(u, base).href; }\n\n\n\t}\n\n\tconst pluginDefine = plugin && plugins[plugin] || {};\n\tconst VERSION = pluginDefine.version || 'VERSION';\n\tconst root = plugin ? `/assets/plugins/${plugin}/${VERSION}/` : '';\n\t// TODO: 路径处理\n\tconst base = plugin ? location.origin + root : location.href;\n\tif (plugin && url[0] !== '.' && url[0] !== '/') {\n\t\t// TODO: 路径转换\n\t}\n\tconst u = pluginDefine.assets?.[url] || root && importMap(url, root) || url;\n\treturn new URL(u, base).href;\n\n}\n/** @type {Record<string, Promise<HTMLLinkElement>>} */\nconst importCSSMap = Object.create(null);\n/**\n * 加载样式\n * @param {string} url \n * @param {string} [plugin] \n * @param {boolean} [pluginOnly] \n * @returns {Promise<HTMLLinkElement>}\n */\nexport function importStyle(url, plugin, pluginOnly) {\n\tconst href = importURL(url, plugin, pluginOnly);\n\tconst p = importCSSMap[href];\n\tif (p) { return p; }\n\tconst promise = new Promise((resolve, reject) => {\n\t\tconst link = document.createElement('link');\n\t\tlink.addEventListener('load', () => resolve(link));\n\t\tlink.addEventListener('error', (e) => reject(e.error));\n\t\tlink.href = href;\n\t\tlink.rel = \"stylesheet\";\n\t\tdocument.head.appendChild(link);\n\t});\n\timportCSSMap[href] = promise;\n\tpromise.catch(() => {\n\t\tif (promise !== importCSSMap[href]) { return; }\n\t\tdelete importCSSMap[href];\n\t});\n\treturn promise;\n}\n\n/** @type {Record<string, Promise<void> | undefined>} */\nconst importScriptPromises = Object.create(null);\n/**\n * \n * @param {string} src \n * @returns {Promise<void>}\n */\nexport function importScript(src) {\n\tconst url = new URL(src, location.href);\n\turl.hash = '';\n\tconst href = url.href;\n\tconst p = importScriptPromises[href];\n\tif (p) { return p; }\n\n\n\t/** @type {Promise<void>} */\n\tconst promise = new Promise((resolve, reject) => {\n\t\tconst script = document.createElement('script');\n\t\tscript.type = 'text/javascript';\n\t\tscript.addEventListener('load', () => resolve());\n\t\tscript.addEventListener('error', (e) => reject(e.error));\n\t\tscript.src = href;\n\t\tdocument.head.appendChild(script);\n\t});\n\timportScriptPromises[href] = promise;\n\tpromise.catch(() => {\n\t\tif (promise !== importScriptPromises[href]) { return; }\n\t\tdelete importScriptPromises[href];\n\t});\n\treturn promise;\n}\n\n/**\n * \n * @param {string} src \n * @param {string | string[]} [name] \n * @param {string} [type] \n */\nexport async function require(src, name, type) {\n\n\t/** @type {any} */\n\tlet exports;\n\tswitch (type?.toLowerCase()) {\n\t\tcase 'umd':\n\t\tcase 'iife':\n\t\tdefault: {\n\t\t\tawait importScript(src);\n\t\t\texports = globalThis;\n\t\t\tfor (const k of Array.isArray(name) ? name : name?.split('.') || []) {\n\t\t\t\tif (!exports || typeof exports !== 'object') { break; }\n\t\t\t\texports = exports[k];\n\t\t\t}\n\t\t}\n\n\t}\n\treturn exports;\n}\n","import type { Hooks, NavButton } from './typesDefine.mjs';\nimport type { PageRenderer } from './route/index.mjs';\nimport { Hook } from '@yongdall/common';\nimport { createState } from './data/index.mts';\nimport { importWidget } from './import.mjs';\nconst hookState = createState({} as Record<string, Hook.Define<Hooks>>);\n// @ts-ignore\nexport const allHooks: Hook<Hooks> = Hook.build(() => hookState.get());\nexport type ContinuationDefine = Record<'main' | 'details' | 'setting' | 'input' | 'edit', string | PageRenderer>;\n\nexport function updateHooks(hooks: Record<string, Hook.Define<Hooks>>) {\n\thookState.set(hooks);\n\tHook.reset(allHooks);\n}\n\nexport async function* loadNavButtons(): AsyncIterableIterator<NavButton> {\n\tlet n = 0;\n\tconst list: (null | NavButton | NavButton[])[] = [];\n\tlet resolveNext: ((next: null | NavButton | NavButton[]) => void) | null = null\n\n\tfor (const button of [...allHooks.get('navButton').values(), ...allHooks.get('navButtons').values()]) {\n\t\tif (!button) { continue; }\n\t\tif (typeof button === 'object') {\n\t\t\tyield button;\n\t\t\tcontinue;\n\t\t}\n\t\tn++;\n\t\tPromise.resolve().then<NavButton | NavButton[] | undefined | null>(() => {\n\t\t\tif (typeof button === 'function') {\n\t\t\t\treturn button();\n\t\t\t}\n\t\t\treturn importWidget<NavButton | NavButton[]>(button);\n\t\t}).catch(() => null).then(v => {\n\t\t\tif (resolveNext) {\n\t\t\t\tresolveNext(v || null);\n\t\t\t\tresolveNext = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlist.push(v || null);\n\t\t});\n\t}\n\tfor (; n > 0; n--) {\n\t\tconst item = list.length ? list.shift() : await new Promise<null | NavButton | NavButton[]>(resolve => resolveNext = resolve);\n\t\tif (!item) { continue; }\n\t\tif (typeof item !== 'object') { continue; }\n\t\tif (!Array.isArray(item)) {\n\t\t\tyield item;\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const i of item) {\n\t\t\tif (!i || typeof i !== 'object') { continue; }\n\t\t\tyield i;\n\t\t}\n\t}\n\n\n\n\n}\n","/** @import { FieldFilterComponent, FieldComponent, FieldFilterFns, FieldFilter } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n\nimport { allHooks } from '../allHooks.mts';\nimport { createComputed } from '../data/index.mts';\n/**\n * @typedef {Object} FieldFilterOptions\n * @property {FieldFilterComponent} component - 过滤器组件\n * @property {string} [label] - 标签文本\n */\n/**\n* @typedef {Object} FilterFns\n* @property {FieldFilter.Value[]} value\n* @property {FieldFilter.Value[]} notValue\n* @property {FieldFilter.Named[]} named\n* @property {FieldFilter.Named[]} notNamed\n* @property {FieldFilter.Field[]} field\n* @property {FieldFilter.Field[]} notField\n*/\n\n/**\n * \n * @param {string} type\n * @param {string | boolean} [renderer] \n * @param {boolean} [array] \n * @returns \n */\nfunction getSetKey(type, renderer, array) {\n\tconst rendererName = typeof renderer === 'string' ? renderer : '';\n\tconst arrayKey = renderer === true || array === true ? '[]' : '';\n\tif (!type || type === '.') {\n\t\tif (!rendererName) { return; }\n\t\treturn `:${rendererName}${arrayKey}`;\n\t}\n\tif (!rendererName) { return `${type}${arrayKey}`; }\n\treturn `${type}:${rendererName}${arrayKey}`;\n}\n\n\n\n/**\n * \n * @param {boolean?} where \n */\nfunction toNot(where) {\n\treturn typeof where === 'boolean' ? !where : where;\n}\nconst inputState = createComputed(() => {\n\t/** @type {Map<string, FieldComponent>} */\n\tconst allInputs = new Map();\n\tfor (const field of allHooks.get('formFields').values()) {\n\t\tconst { type, array, renderer, input } = field;\n\t\tconst key = getSetKey(\n\t\t\ttypeof type === 'string' ? type : '',\n\t\t\ttypeof renderer === 'string' ? renderer : '',\n\t\t\tBoolean(array),\n\t\t);\n\t\tif (!key) { continue; }\n\t\tif (typeof input === 'function') {\n\t\t\tallInputs.set(key, input);\n\t\t}\n\t}\n\treturn allInputs;\n});\nconst filterFnState = createComputed(() => {\n\t/** @type {Record<string, Record<string, FilterFns>>} */\n\tconst allFilters = {};\n\t/** @type {Record<string, Record<string, FilterFns>>} */\n\tconst allNotFilters = {};\n\t/**\n\t * \n\t * @param {Record<string, FilterFns>} filterMap \n\t * @param {Record<string, FilterFns>} notFilterMap \n\t * @param {FieldFilterFns} param2 \n\t * @param {string} [operator] \n\t */\n\tfunction setFilterFns(\n\t\tfilterMap,\n\t\tnotFilterMap,\n\t\t{ not, value, notValue, named, notNamed, field, notField },\n\t\toperator = '',\n\t) {\n\t\tif (not) {\n\t\t\tif (typeof value === 'function' && typeof typeof notValue !== 'function') {\n\t\t\t\tnotValue = (...p) => toNot(value(...p));\n\t\t\t}\n\t\t\tif (typeof field === 'function' && typeof typeof notField !== 'function') {\n\t\t\t\tnotField = (...p) => toNot(field(...p));\n\t\t\t}\n\t\t\tif (typeof named === 'function' && typeof typeof notNamed !== 'function') {\n\t\t\t\tnotNamed = (...p) => toNot(named(...p));\n\t\t\t}\n\t\t}\n\n\t\tconst typeFilter = Object.hasOwn(filterMap, operator)\n\t\t\t&& filterMap[operator]\n\t\t\t|| { value: [], named: [], field: [], notValue: [], notNamed: [], notField: [] };\n\t\tfilterMap[operator] = typeFilter;\n\t\tif (typeof value === 'function') { typeFilter.value.push(value); }\n\t\tif (typeof notValue === 'function') { typeFilter.notValue.push(notValue); }\n\t\tif (typeof named === 'function') { typeFilter.named.push(named); }\n\t\tif (typeof notNamed === 'function') { typeFilter.notNamed.push(notNamed); }\n\t\tif (typeof field === 'function') { typeFilter.field.push(field); }\n\t\tif (typeof notField === 'function') { typeFilter.notField.push(notField); }\n\t\tconst notOp = typeof not === 'string' && not || '';\n\t\tif (!notOp) { return; }\n\n\t\tconst notTypeFilter = Object.hasOwn(notFilterMap, notOp)\n\t\t\t&& notFilterMap[notOp]\n\t\t\t|| { value: [], named: [], field: [], notValue: [], notNamed: [], notField: [] };\n\t\tnotFilterMap[notOp] = typeFilter;\n\n\t\tif (typeof value === 'function') { notTypeFilter.notValue.push(value); }\n\t\tif (typeof notValue === 'function') { notTypeFilter.value.push(notValue); }\n\t\tif (typeof named === 'function') { notTypeFilter.notNamed.push(named); }\n\t\tif (typeof notNamed === 'function') { notTypeFilter.named.push(notNamed); }\n\t\tif (typeof field === 'function') { notTypeFilter.notField.push(field); }\n\t\tif (typeof notField === 'function') { notTypeFilter.field.push(notField); }\n\n\t}\n\tfor (const field of allHooks.get('formFields').values()) {\n\t\tconst { type, array, renderer, filters } = field;\n\t\tconst key = getSetKey(\n\t\t\ttypeof type === 'string' ? type : '',\n\t\t\ttypeof renderer === 'string' ? renderer : '',\n\t\t\tBoolean(array),\n\t\t) || (array ? '[]' : '');\n\t\t/** @type {Record<string, FilterFns>} */\n\t\tconst filterMap = Object.hasOwn(allFilters, key) && allFilters[key] || {};\n\t\t/** @type {Record<string, FilterFns>} */\n\t\tconst notFilterMap = Object.hasOwn(allNotFilters, key) && allNotFilters[key] || {};\n\t\tsetFilterFns(filterMap, notFilterMap, field);\n\n\t\tfor (const [operator, fieldFilter] of Object.entries(filters || {})) {\n\t\t\tif (!fieldFilter || Array.isArray(fieldFilter) || typeof fieldFilter !== 'object') { continue; }\n\t\t\tsetFilterFns(filterMap, notFilterMap, fieldFilter, operator);\n\t\t}\n\t\tallFilters[key] = filterMap;\n\t\tallNotFilters[key] = notFilterMap;\n\t}\n\tfor (const type of Object.keys({ ...allFilters, ...allNotFilters })) {\n\t\tconst notTypeFilters = Object.hasOwn(allNotFilters, type) && allNotFilters[type];\n\t\tif (!notTypeFilters) { continue; }\n\t\t/** @type {Record<string, FilterFns>} */\n\t\tconst typeFilters = Object.hasOwn(allFilters, type) && allFilters[type] || {};\n\t\tallFilters[type] = typeFilters;\n\n\t\tfor (const op of Object.keys({ ...typeFilters, ...notTypeFilters })) {\n\t\t\tconst notOpFilters = Object.hasOwn(notTypeFilters, op) && notTypeFilters[op];\n\t\t\tif (!notOpFilters) { continue; }\n\t\t\t/** @type {FilterFns} */\n\t\t\tconst opFilters = Object.hasOwn(typeFilters, op) && typeFilters[op] || { value: [], named: [], field: [], notValue: [], notNamed: [], notField: [] };\n\t\t\ttypeFilters[op] = opFilters;\n\t\t\tif (!notOpFilters) { continue; }\n\t\t\tfor (const fn of notOpFilters.value) { opFilters.value.push(fn); }\n\t\t\tfor (const fn of notOpFilters.notValue) { opFilters.notValue.push(fn); }\n\t\t\tfor (const fn of notOpFilters.named) { opFilters.named.push(fn); }\n\t\t\tfor (const fn of notOpFilters.notNamed) { opFilters.notNamed.push(fn); }\n\t\t\tfor (const fn of notOpFilters.field) { opFilters.field.push(fn); }\n\t\t\tfor (const fn of notOpFilters.notField) { opFilters.notField.push(fn); }\n\t\t}\n\t}\n\treturn allFilters;\n});\nconst filterState = createComputed(() => {\n\t/** @type {Map<string, Map<string, {component: FieldFilterComponent; label?: string}>>} */\n\tconst allFilters = new Map();\n\tfor (const field of allHooks.get('formFields').values()) {\n\t\tconst { type, array, renderer, filter, filters } = field;\n\t\tconst key = getSetKey(\n\t\t\ttypeof type === 'string' ? type : '',\n\t\t\ttypeof renderer === 'string' ? renderer : '',\n\t\t\tBoolean(array),\n\t\t);\n\t\tif (!key) { continue; }\n\t\t/** @type {Map<string, {component: FieldFilterComponent; label?: string}>} */\n\t\tconst filterMap = allFilters.get(key) || new Map();\n\t\tif (typeof filter === 'function') {\n\t\t\tconst item = filterMap.get('');\n\t\t\tif (!item) {\n\t\t\t\tfilterMap.set('', { component: filter, label: '=' });\n\t\t\t} else {\n\t\t\t\titem.component = filter;\n\t\t\t}\n\t\t}\n\t\tfor (const [operator, fieldFilter] of Object.entries(filters || {})) {\n\t\t\tif (!fieldFilter) { continue; }\n\t\t\tconst filter = Array.isArray(fieldFilter) ? fieldFilter[0]\n\t\t\t\t: typeof fieldFilter === 'function' ? fieldFilter\n\t\t\t\t\t: fieldFilter.filter;\n\t\t\tif (typeof filter !== 'function') { continue; }\n\t\t\tconst label = Array.isArray(fieldFilter) ? fieldFilter[1]\n\t\t\t\t: typeof fieldFilter === 'object' ? fieldFilter.label : null;\n\t\t\tconst item = filterMap.get(operator);\n\t\t\tif (!item) {\n\t\t\t\tfilterMap.set(operator, { component: filter, label: typeof label === 'string' ? label : '' });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\titem.component = filter;\n\t\t\tif (typeof label === 'string') { item.label = label; }\n\t\t}\n\t\tif (filterMap.size) {\n\t\t\tallFilters.set(key, filterMap);\n\t\t}\n\t}\n\treturn allFilters;\n});\n\nexport function getAllFilterFns() {\n\treturn filterFnState.get();\n}\n/**\n * \n * @param {string | {component: string; [k: string]: any} | (string | {component: string; [k: string]: any})[]} [def] \n * @returns {Iterable<[renderer: string, options?: object]>}\n */\nfunction* getRenderer(def) {\n\tif (!def) { return; }\n\tfor (const s of Array.isArray(def) ? def : [def]) {\n\t\tif (!s) { continue; }\n\t\tif (typeof s === 'string') {\n\t\t\tyield [s];\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof s !== 'object') { continue; }\n\t\tconst component = s.component;\n\t\tif (!component || typeof component !== 'string') { continue; }\n\t\tyield [component, s];\n\t}\n}\n/**\n * \n * @param {string | FieldScriptConfiguration} field \n * @returns {Iterable<[renderer: string, options?: object]>}\n */\nfunction* getKey(field) {\n\tif (!field) { return; }\n\tconst type = typeof field === 'string' ? field : field.type;\n\tconst renderers = typeof field === 'string' ? '' : field.renderer;\n\tconst array = typeof field === 'string' ? '' : field.array ? '[]' : '';\n\tif (!type) {\n\t\tfor (const [renderer, options] of getRenderer(renderers)) {\n\t\t\tyield [`:${renderer}${array}`, options];\n\t\t\tyield [`${renderer}${array}`, options];\n\t\t}\n\t\treturn;\n\t}\n\tif (typeof type === 'object') {\n\t\tfor (const [renderer, options] of getRenderer(renderers)) {\n\t\t\tyield [`submodel:${renderer}${array}`, options];\n\t\t\tyield [`${renderer}${array}`, options];\n\t\t}\n\t\tyield [`submodel${array}`];\n\t\treturn;\n\t}\n\tfor (const [renderer, options] of getRenderer(renderers)) {\n\t\tyield [`${type}:${renderer}${array}`, options];\n\t\tyield [`:${renderer}${array}`, options];\n\t\tyield [`${renderer}${array}`, options];\n\t}\n\tyield [`${type}${array}`];\n}\n\n/**\n * @overload\n * @param {FieldScriptConfiguration} field \n * @param {false} [skip]\n * @returns {FieldComponent}\n */\n/**\n * \n * @overload\n * @param {FieldScriptConfiguration} field \n * @param {true} skip\n * @returns {FieldComponent?}\n */\n/**\n * \n * @overload\n * @param {FieldScriptConfiguration} field \n * @param {boolean} [skip]\n * @returns {FieldComponent?}\n */\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @param {boolean} [skip]\n * @returns {FieldComponent?}\n */\nexport function getField(field, skip) {\n\tconst inputs = inputState.get();\n\tfor (const [k, options] of getKey(field)) {\n\t\tconst v = inputs.get(k);\n\t\tif (v) { return ctx => v(ctx, options); }\n\t}\n\tif (skip) { return null; }\n\tconst type = typeof field === 'string' ? field : field.type;\n\treturn () => document.createElement('div');\n}\n\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @returns {boolean}\n */\nexport function hasField(field) {\n\tconst inputs = inputState.get();\n\tfor (const [k] of getKey(field)) {\n\t\tconst v = inputs.get(k);\n\t\tif (v) { return true; }\n\t}\n\tconst type = typeof field === 'string' ? field : field.type;\n\treturn false;\n}\n\n\n\n/** @type {FieldFilterComponent} */\nconst defaultFieldFilter = () => document.createElement('div');\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @param {string} operator \n * @returns {FieldFilterComponent}\n */\nexport function getFieldFilter(field, operator) {\n\tconst filters = filterState.get();\n\tfor (const [k, options] of getKey(field)) {\n\t\tconst filter = filters.get(k)?.get(operator);\n\t\tif (!filter) { continue; }\n\t\tconst component = filter.component;\n\t\treturn ctx => component(ctx, options);\n\t}\n\treturn defaultFieldFilter;\n}\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @returns {Record<string, string>}\n */\nexport function getFieldFilterOperators(field) {\n\tconst filters = filterState.get();\n\tconst operators = Object.create(null);\n\tfor (const [k] of getKey(field)) {\n\t\tconst filter = filters.get(k);\n\t\tif (!filter) { continue; }\n\t\tfor (const [operator, { label }] of filter) {\n\t\t\tif (operators[operator]) { continue; }\n\t\t\toperators[operator] = label;\n\t\t}\n\t}\n\treturn operators;\n}\n\n/**\n * \n * @param {FieldScriptConfiguration} field \n * @param {string} operator \n * @returns {boolean}\n */\n\nexport function hasFieldFilter(field, operator) {\n\tconst filters = filterState.get();\n\tfor (const [k] of getKey(field)) {\n\t\tconst v = filters.get(k);\n\t\tif (v?.has(operator)) { return true; }\n\t}\n\treturn false;\n}\n\n/**\n * \n * @param {FieldScriptConfiguration | boolean} field \n * @param {string} operator \n */\nexport function* getFilterFns(field, operator) {\n\tconst filters = filterFnState.get();\n\tfor (const [k] of typeof field === 'boolean' ? field ? [['[]'], ['']] : [['']] : getKey(field)) {\n\t\tconst v = Object.hasOwn(filters, k) && filters[k];\n\t\tif (!v) { continue; }\n\t\tconst op = Object.hasOwn(v, operator) && v[operator];\n\t\tif (!op) { continue; }\n\t\tyield op;\n\t}\n\tconst k = '';\n\tconst v = Object.hasOwn(filters, k) && filters[k];\n\tif (!v) { return; }\n\tconst op = Object.hasOwn(v, operator) && v[operator];\n\tif (!op) { return; }\n\tyield op;\n}\n","\n/**\n * @template {(...args: any) => any} T\n * @param {T} fn \n * @param {(...p: Parameters<T>) => string} getKey \n * @param {(...p: Parameters<T>) => boolean} [isForce] \n * @returns {T}\n */\nexport function createStates(fn, getKey, isForce) {\n\t/** @type {Record<string, ReturnType<T>>} */\n\tconst data = {};\n\t/**\n\t * @param {Parameters<T>} params\n\t * @returns {ReturnType<T>}\n\t */\n\t function run(...params) {\n\t\tconst key = getKey(...params);\n\t\tif (Object.hasOwn(data, key) && !isForce?.(...params)) {\n\t\t\treturn data[key];\n\t\t}\n\t\tconst result = fn(...params);\n\t\tdata[key] = result;\n\t\treturn result;\n\t};\n\treturn /** @type {T} */(run);\n}\n","/** @import { Permissions } from '@yongdall/types' */\n/** @import { State } from './data/index.mts' */\nimport { configuration } from './configuration.mjs';\nimport { createStates } from './utils/state.mjs';\nimport { baseRequest } from './request.mts';\nimport { allHooks } from './allHooks.mts';\nimport { createComputed, createState, setEnvState } from './data/index.mts';\nconst { authRequired, multiUser } = configuration;\n\nconst userType = createState(configuration.userType);\nconst visitor = createComputed(() => userType?.get() === 'visitor');\n/**\n * 用户类型定义\n * @typedef {Object} User\n * @property {string} id - 用户ID\n * @property {string} name - 显示名称\n * @property {string} [avatar] - 用户头像\n * @property {string[]} [permissions]\n * @property {Record<string, string[]>} [organizationPermissions]\n * @property {Record<string, string[]>} [organizationRoles]\n * @property {Record<string, string[]>} [organizationRolePermissions]\n * @property {Record<string, Record<string, any>>} [plugins] \n */\n\n/** @type {State<User?>} */\nconst sessionUserState = createState(/** @type {User?} */(null));\n/** @type {State<User?>} */\nconst visitorState = createState(/** @type {User?} */(null));\n/** @type {State<User?>} */\nconst targetUserState = createState(/** @type {User?} */(null));\nconst currentUserState = createComputed(() => targetUserState.get() || sessionUserState.get());\n\n\n/** @type {<T extends Record<string, any>>(pluginId: string) => { readonly session: T?; readonly target: T?; readonly current: T?}} */\nconst userPlugin = createStates((pluginId) => {\n\t/** @type {State<any?>} */\n\tconst session = createComputed(() => !visitor.get() && sessionUserState.get()?.plugins?.[pluginId] || null);\n\t/** @type {State<any?>} */\n\tconst target = createComputed(() => !visitor.get() && targetUserState.get()?.plugins?.[pluginId] || null);\n\t/** @type {State<any?>} */\n\tconst current = createComputed(() => !visitor.get() && currentUserState.get()?.plugins?.[pluginId] || null);\n\treturn {\n\t\tget session() { return session.get(); },\n\t\tget target() { return target.get(); },\n\t\tget current() { return current.get(); },\n\t};\n}, pluginId => pluginId || '');\n\nconst single = createState(false);\nconst needLogin = createState(false);\nconst waitLogin = createComputed(() => {\n\tif (needLogin.get()) { return true; }\n\tif (!authRequired) { return false; }\n\tif (single.get()) { return false; }\n\tif (sessionUserState.get()) { return false; }\n\treturn true;\n});\n\n\n/**\n * @param {string[]} permissions \n * @returns {Set<string>}\n */\nfunction toPermissions(permissions) {\n\treturn new Set(permissions.filter(v => v && typeof v === 'string'));\n\n}\n/**\n * \n * @param {User} user \n * @returns {Set<string>}\n */\nfunction getPermissions(user) {\n\tconst plugins = user.plugins;\n\tif (plugins && typeof plugins === 'object') {\n\t\tfor (const [pluginId, get] of allHooks.get('user').get('permissions')) {\n\t\t\tif (typeof get !== 'function') { continue; }\n\t\t\tif (!Object.hasOwn(plugins, pluginId)) { continue; }\n\t\t\tconst plugin = plugins[pluginId];\n\t\t\tif (!plugin || typeof plugin !== 'object') { continue; }\n\t\t\tconst p = get(plugin, user);\n\t\t\tif (!(p instanceof Set)) { continue; }\n\t\t\treturn p;\n\t\t}\n\t}\n\tconst permissions = user.permissions;\n\tif (!Array.isArray(permissions)) { return new Set(); }\n\treturn toPermissions(permissions);\n}\n/**\n * \n * @param {User} user \n * @returns {Record<string, Set<string>>?}\n */\nfunction getOrganizationPermissions(user) {\n\tconst plugins = user.plugins;\n\tif (plugins && typeof plugins === 'object') {\n\t\tfor (const [pluginId, get] of allHooks.get('user').get('organizationPermissions')) {\n\t\t\tif (typeof get !== 'function') { continue; }\n\t\t\tif (!Object.hasOwn(plugins, pluginId)) { continue; }\n\t\t\tconst plugin = plugins[pluginId];\n\t\t\tif (!plugin || typeof plugin !== 'object') { continue; }\n\t\t\tconst p = get(plugin, user);\n\t\t\tif (!p) { continue; }\n\t\t\treturn Object.assign(Object.create(null), p);\n\t\t}\n\t}\n\tconst permissions = user.organizationPermissions;\n\tif (permissions && typeof permissions === 'object' && !Array.isArray(permissions)) {\n\t\tconst list = Object.entries(permissions).filter(v => Array.isArray(v[1]));\n\t\tif (list.length) {\n\t\t\treturn Object.assign(\n\t\t\t\tObject.create(null),\n\t\t\t\tObject.fromEntries(list.map(([k, v]) => [k, toPermissions(v)])),\n\t\t\t);\n\t\t}\n\t}\n\tconst { organizationRolePermissions: rolePermissions, organizationRoles: roles } = user;\n\tif (!roles || typeof roles !== 'object' || Array.isArray(roles)) {\n\t\treturn null;\n\t}\n\tif (!rolePermissions || typeof rolePermissions !== 'object' || Array.isArray(rolePermissions)) {\n\t\treturn null;\n\t}\n\treturn Object.assign(\n\t\tObject.create(null),\n\t\tObject.fromEntries(Object.entries(roles).map(([k, v]) => {\n\t\t\tconst permissions = v.flatMap(roleId => Object.hasOwn(rolePermissions, roleId) && rolePermissions[roleId] || []);\n\t\t\treturn [k, toPermissions(permissions)];\n\t\t})),\n\t);\n}\n/** @type {State<Set<string>?>} */\nconst permissions = createComputed(() => {\n\tconst user = currentUserState.get();\n\tif (!user) { return null; }\n\treturn getPermissions(user);\n});\n/** @type {State<Record<string, Set<string>>?>} */\nconst organizationPermissions = createComputed(() => {\n\tconst user = currentUserState.get();\n\tif (!user) { return null; }\n\treturn getOrganizationPermissions(user);\n});\n\nconst allOrganizationPermissions = createComputed(() => {\n\tconst all = organizationPermissions.get();\n\tif (!all) { return null; }\n\treturn new Set(Object.values(all).flatMap(v => [...v]));\n});\n\n/** @returns {Permissions} */\nfunction createPermissions() {\n\tif (single.get()) {\n\t\treturn { has: () => true, get size() { return -1; } };\n\t}\n\treturn new Set();\n}\nexport const User = {\n\tget isVisitor() { return visitor.get(); },\n\tget visitor() { return visitor.get() ? visitorState.get() : null; },\n\tget multi() { return visitor.get() || Boolean(multiUser); },\n\tget single() { return single.get(); },\n\t/** 登陆用户 */\n\tget session() { return visitor.get() ? null : sessionUserState.get(); },\n\t/** 切换用户 */\n\tget target() { return visitor.get() ? null : targetUserState.get(); },\n\t/** 当前用户 */\n\tget current() { return visitor.get() ? null : currentUserState.get(); },\n\t/** 操作用户 */\n\tget operator() { return visitor.get() ? visitorState.get() : currentUserState.get(); },\n\t/** @param {string} permission */\n\thasPermission(permission) {\n\t\tif (visitor.get()) { return false; }\n\t\treturn permissions.get()?.has(permission) ?? single.get();\n\t},\n\t/** @param {string} permission @param {string} [organization] */\n\thasOrganizationPermission(permission, organization) {\n\t\tif (visitor.get()) { return false; }\n\t\tif (typeof organization !== 'string') {\n\t\t\treturn allOrganizationPermissions.get()?.has(permission) ?? single.get();\n\t\t}\n\n\t\tconst organizations = organizationPermissions.get();\n\t\tif (!organizations) { return single.get(); }\n\t\tif (!Object.hasOwn(organizations, organization)) { return false; }\n\t\treturn organizations[organization]?.has(permission) ?? false;\n\t},\n\t/** @returns {Permissions} */\n\tget permissions() {\n\t\tif (visitor.get()) { return new Set(); }\n\t\treturn permissions.get() || createPermissions();\n\t},\n\t/** @returns {Record<string, Permissions | undefined>} */\n\tget organizationPermissions() {\n\t\tif (visitor.get()) { return Object.create(null); }\n\t\treturn organizationPermissions.get() || new Proxy({}, {\n\t\t\tget() { return createPermissions(); }\n\t\t});\n\t},\n\t/** @returns {Permissions} */\n\tget allOrganizationPermissions() {\n\t\tif (visitor.get()) { return new Set(); }\n\t\treturn allOrganizationPermissions.get() || createPermissions();\n\t},\n\tget waitLogin() { return waitLogin.get(); },\n\t/**\n\t * @template {Record<string, any>} T\n\t * @param {string} pluginId \n\t * @returns {{ readonly session: T?; readonly target: T?; readonly current: T?}}\n\t */\n\tplugin(pluginId) { return userPlugin(pluginId); },\n\tasync load() {\n\t\tif (visitor.get()) {\n\t\t\tconst { visitor } = await baseRequest.clone().get`visitor`.json().then(v => v || {}, () => ({}));\n\t\t\tsingle.set(false);\n\t\t\tvisitorState.set(visitor || null);\n\t\t\tif (visitor) { needLogin.set(false); }\n\t\t\treturn Boolean(visitor);\n\t\t}\n\t\tconst { session, target } = await baseRequest.clone().get`user`.json().then(v => v || {}, () => ({}));\n\t\ttargetUserState.set(target || null);\n\t\tif (session === true) {\n\t\t\tsingle.set(true);\n\t\t\tsessionUserState.set(null);\n\t\t} else {\n\t\t\tsingle.set(false);\n\t\t\tsessionUserState.set(session || null);\n\t\t}\n\t\tif (session) { needLogin.set(false); }\n\t\treturn Boolean(session);\n\t},\n\texit() {\n\t\tif (visitor.get()) {\n\t\t\tvisitorState.set(null);\n\t\t\tbaseRequest.clone().delete`visitor`.done();\n\t\t\treturn;\n\t\t}\n\t\ttargetUserState.set(null);\n\t\tsessionUserState.set(null);\n\t\tbaseRequest.clone().delete`user`.done();\n\t},\n\tlogin(login = true) {\n\t\tneedLogin.set(Boolean(login));\n\t},\n};\nsetEnvState('visitor', createComputed(() => visitor.get() && visitorState.get()?.id || ''));\nsetEnvState('user', createComputed(() => !visitor.get() && currentUserState.get()?.id || ''));\n","/** @import { FieldScriptConfiguration, ModelConfiguration, ModelScriptConfiguration } from './types.mjs' */\n\n/**\n * \n * @param {string | string[] | null | void} permission \n */\n\nexport function flatPermission(permission) {\n\tif (!permission) { return []; }\n\tconst list = typeof permission === 'string' ? permission.split('\\n') : permission;\n\tif (!Array.isArray(list)) { return []; }\n\treturn list.filter(v => v && typeof v === 'string');\n\n}\n\n/**\n * \n * @param {object} [options] \n * @param {{has(permission: string): boolean}} [options.permissions] \n * @param {{has(permission: string): boolean}} [options.allOrganizationPermissions] \n * @param {Record<string, {has(permission: string): boolean} | null | undefined>} [options.organizationPermissions] \n * @param {{has(authorization: string): boolean}?} [options.authorizations] \n * @returns {(p: string) => boolean}\n */\nexport function toPermissionFilter({\n\tpermissions,\n\torganizationPermissions,\n\tallOrganizationPermissions,\n\tauthorizations,\n} = {}) {\n\treturn permission => {\n\t\tif (permission[0] === '#') { return authorizations?.has(permission.slice(1)) || false; }\n\t\tconst index = permission.indexOf('&');\n\t\tif (index < 0) { return permissions?.has(permission) || false; }\n\t\tconst orgPerm = permission.slice(0, index);\n\t\tif (!orgPerm) { return false; }\n\t\tconst organization = permission.slice(index + 1);\n\t\tif (!organization) { return allOrganizationPermissions?.has(orgPerm) || false; }\n\t\treturn organizationPermissions?.[organization]?.has(orgPerm) || false;\n\t};\n}\n\n/**\n * \n * @param {string | string[] | null | void} permission \n * @param {{has(permission: string): boolean}} permissions \n * @param {{has(authorization: string): boolean}?} [authorizations] \n */\nexport function filterPermission(permission, permissions, authorizations) {\n\tif (!permission) { return true; }\n\tconst array = flatPermission(permission);\n\tif (!array.length) { return true; }\n\tconst filter = toPermissionFilter({ permissions, authorizations });\n\treturn Boolean(array.find(filter));\n}\n/** @import { Field, Permission } from '@yongdall/types' */\n\nimport { User } from './user.mjs';\n\n/**\n * \n * @param {Permission['constraints']} constraints \n * @param {Record<string, any>?} [data] \n */\nexport function testPermissionConstraints(constraints, data) {\n\tif (!constraints || !data || typeof data !== 'object') { return true; }\n\tfor (const [field, constraint] of Object.entries(constraints)) {\n\t\tif (!constraint) { continue; }\n\t\tconst { value, values, user } = constraint;\n\t\tconst val = data[field];\n\t\tif (value !== undefined) {\n\t\t\tif (val !== value) { return false; }\n\t\t} else if (Array.isArray(values) && values.length) {\n\t\t\tif (!values.includes(val)) { return false; }\n\t\t} else if (values instanceof Set && values.size) {\n\t\t\tif (!values.has(val)) { return false; }\n\t\t} else if (user) {\n\t\t\tif (!User.single && val !== User.current?.id) { return false; }\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * \n * @param {Permission} permission \n * @param {Record<string, any>?} [data] \n * @param {boolean} [isNew] \n * @param {string} [fieldName] \n */\nexport function testPermission({ permission, organizationField, constraints }, data, isNew, fieldName) {\n\tif (!testPermissionConstraints(constraints, data)) { return false; }\n\tif (!permission) { return true; }\n\tif (!organizationField) {\n\t\treturn User.hasPermission(permission);\n\t}\n\tif (organizationField === '_') {\n\t\tif (isNew) {\n\t\t\tif (User.hasOrganizationPermission(permission)) { return true; }\n\t\t}\n\t\treturn false;\n\t}\n\tif (isNew) { return true; }\n\tif (organizationField === fieldName) { return true; }\n\tconst val = String(data?.[organizationField] || '');\n\tif ((!isNew || val)) {\n\t\tif (User.hasOrganizationPermission(permission, val || '')) { return true; }\n\t}\n\treturn true;\n}\n\n/**\n * \n * @param {Permission[]} permissionList \n * @param {Record<string, any>?} [data] \n * @param {boolean} [isNew] \n */\nexport function getAuthorizations(permissionList, data, isNew) {\n\tconst list = permissionList.filter(({ authorizations }) => {\n\t\tif (authorizations instanceof Set) { return true; }\n\t\tif (Array.isArray(authorizations)) { return true; }\n\t}).filter(permission => testPermission(permission, data, isNew))\n\t\t.flatMap(({ authorizations }) => authorizations ? [...authorizations] : []);\n\treturn new Set(list);\n}\n\n\n/**\n * \n * @param {string} authorization \n * @param {Permission[]} permissions \n * @param {Record<string, any>} [data] \n * @param {boolean} [isNew] \n * @param {string} [fieldName] \n */\nexport function testPermissions(authorization, permissions, data, isNew, fieldName) {\n\tconst list = permissions.filter(({ authorizations }) => {\n\t\tif (authorizations instanceof Set) { return authorizations.has(authorization); }\n\t\tif (Array.isArray(authorizations)) { return authorizations.includes(authorization); }\n\t});\n\treturn Boolean(list.find(permission => testPermission(permission, data, isNew, fieldName)));\n}\n/**\n * \n * @param {string} authorization \n * @param {Permission[]} permissions \n * @param {ModelConfiguration | ModelScriptConfiguration} model \n * @returns {Set<string>}\n */\nexport function getPermissionFields(authorization, permissions, model) {\n\tconst userPermissions = permissions.filter(({ authorizations }) => {\n\t\tif (authorizations instanceof Set) { return authorizations.has(authorization); }\n\t\tif (Array.isArray(authorizations)) { return authorizations.includes(authorization); }\n\t}).filter(({ permission, organizationField }) => {\n\t\tif (!permission) { return true; }\n\t\tif (!organizationField) {\n\t\t\treturn User.hasPermission(permission);\n\t\t}\n\n\t\treturn User.hasOrganizationPermission(permission);\n\t});\n\tif (!userPermissions?.length) { return new Set(); }\n\tconst groups = new Set(userPermissions.flatMap(v => v.group || ''));\n\tconst fieldsAuth = new Set(userPermissions.flatMap(v => v.fields || ''));\n\tgroups.delete('');\n\tfieldsAuth.delete('');\n\tif (!(groups.size + fieldsAuth.size)) { return new Set(); }\n\n\t/**\n\t *\n\t * @param {[string, (Field | FieldScriptConfiguration) & {group?: string}][]} fields\n\t * @param {string[]} parent\n\t * @returns {Iterable<string>}\n\t */\n\tfunction* filter(fields, parent) {\n\t\tfor (const [name, field] of fields) {\n\t\t\tif (!field) { continue; }\n\t\t\tconst fieldNames = [...parent, name];\n\t\t\tconst key = fieldNames.join('.');\n\t\t\tif (!field.primary && !groups.has(field.group || '') && !fieldsAuth.has(key) && !fieldsAuth.has('*')) { continue; }\n\t\t\tyield key;\n\t\t\tconst { type } = field;\n\t\t\tif (!type || typeof type !== 'object') { continue; }\n\t\t\tyield* filter(Object.entries(type), fieldNames);\n\t\t}\n\n\t}\n\treturn new Set(filter(Object.entries(model.fields), []));\n\n}\n","import type { Schema, Store, StoreLayout } from '@neeloong/form'\nimport type { Permission } from '@yongdall/types'\nimport type { FieldComponents } from '../typesDefine.mjs'\nimport type { FieldScriptConfiguration } from '../services/model.mjs'\n\nimport { SExpr } from '@yongdall/common';\nimport { testPermissions } from '../permission.mjs';\nimport { User } from '../user.mjs';\n\nfunction createStoreValueProxy(store: Store) {\n\treturn new Proxy({}, {\n\t\tget(target, p, receiver) {\n\t\t\treturn store.value?.[p];\n\t\t},\n\t\tset() { return false; },\n\t});\n}\n\nconst sFns: Record<string, SExpr.Fn<Store>> = {\n\t...SExpr.fns,\n\tstore: (p, s) => {\n\t\tconst type = p[0];\n\t\tlet store: Store | undefined | null = s.value;\n\t\tif (!type) {\n\t\t\treturn store.value;\n\t\t}\n\t\tconst t = type();\n\t\tif (t === 'root') { return store.root.value; }\n\t\tif (t === 'parent') { return store.parent?.value; }\n\t\tif (typeof t === 'number') {\n\t\t\tconst n = Math.floor(t);\n\t\t\tif (n > 0) {\n\t\t\t\tfor (let i = 0; i < n; i++) {\n\t\t\t\t\tstore = store?.parent;\n\t\t\t\t\tif (!store) { return null; }\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn store?.value ?? null;\n\t},\n}\n\nfunction createReadOnlyValue(\n\tfieldName: string,\n\tdef?: boolean | SExpr.Type,\n\tpermissions?: Permission[],\n\tscript?: ((store: Store) => boolean) | null,\n): boolean | ((store: Store) => boolean) | null {\n\tif (def === true) { return true; }\n\tconst fns: ((store: Store) => boolean)[] = [];\n\tif (permissions?.length) {\n\t\tfns.push((s) => {\n\t\t\tconst root = s.root;\n\t\t\tconst isNew = root.new;\n\t\t\tconst authorization = isNew ? 'create' : 'update';\n\t\t\treturn !testPermissions(authorization, permissions, createStoreValueProxy(root), isNew, fieldName);\n\t\t});\n\t}\n\tif (typeof script === 'function') { fns.push(s => script(s)); }\n\tif (Array.isArray(def)) { fns.push(SExpr.build(sFns, def)); }\n\tif (!fns.length) { return typeof def === 'boolean' ? false : null; }\n\treturn s => {\n\t\tfor (const f of fns) {\n\t\t\tif (f(s)) { return true; }\n\t\t}\n\t\treturn false;\n\t};\n}\n\nfunction createHiddenValue(\n\tfieldName: string,\n\tfield: FieldScriptConfiguration,\n\tdef?: boolean | SExpr.Type,\n\tpermissions?: Permission[],\n\tscript?: ((store: Store) => boolean) | null,\n): boolean | ((store: Store) => boolean) | null {\n\tif (def === true) { return true; }\n\tconst fns: ((store: Store) => boolean)[] = [];\n\tif (field.uncreatable) { fns.push(store => store.root.new); }\n\tif (typeof script === 'function') { fns.push(script); }\n\tif (permissions) {\n\t\tfns.push(permissions.length ? (s) => {\n\t\t\tconst root = s.root;\n\t\t\tconst isNew = root.new;\n\t\t\treturn !testPermissions('read', permissions, createStoreValueProxy(root), isNew, fieldName);\n\t\t} : () => !User.single);\n\t}\n\tif (!fns.length) { return typeof def === 'boolean' ? false : null; }\n\treturn (s) => {\n\t\tfor (const f of fns) {\n\t\t\tif (f(s)) { return true; }\n\t\t}\n\t\treturn false;\n\t};\n}\nfunction createBoolValue(\n\tdef?: boolean | SExpr.Type | null,\n\tscript?: ((store: Store) => boolean) | null,\n): boolean | ((store: Store) => boolean) | null {\n\tif (def === true) { return true; }\n\tconst fns: ((store: Store) => boolean)[] = [];\n\tif (typeof script === 'function') { fns.push(s => script(s)); }\n\tif (Array.isArray(def)) { fns.push(SExpr.build(sFns, def)); }\n\tif (!fns.length) { return typeof def === 'boolean' ? false : null; }\n\treturn s => {\n\t\tfor (const f of fns) {\n\t\t\tif (f(s)) { return true; }\n\t\t}\n\t\treturn false;\n\t};\n}\n\nfunction createStringValue(\n\tdef?: string | null,\n\tscript?: ((store: Store) => string) | null,\n): string | ((store: Store) => string) | null {\n\tif (typeof script === 'function') {\n\t\treturn (s) => {\n\t\t\tconst v = script(s);\n\t\t\treturn typeof v === 'string' && v || def || '';\n\t\t};\n\t}\n\treturn typeof def === 'string' && def || '';\n}\n\nfunction createAttr(\n\tfield: FieldScriptConfiguration,\n\tname: string,\n\tpermissions?: Permission[] | null,\n): Schema.Attr {\n\tconst fieldGroup = field.group || '';\n\tconst script = field.script || {};\n\tconst fieldPermission = permissions?.filter(({ group, fields }) => {\n\t\tif (group === fieldGroup) { return true; }\n\t\tif (Array.isArray(group) && group.includes(fieldGroup)) { return true; }\n\t\tif (fields === name || fields === '*') { return true; }\n\t\tif (!Array.isArray(fields)) { return false; }\n\t\tif (fields.includes(name) || fields.includes('*')) { return true; }\n\t});\n\treturn {\n\t\tmeta: field,\n\t\thidden: createHiddenValue(name, field, field.layout?.hidden, fieldPermission, script?.hidden),\n\t\treadonly: createReadOnlyValue(name, field.readonly, fieldPermission, script.readonly),\n\t\trequired: createBoolValue(field.required, script.required),\n\t\tclearable: createBoolValue(field.clearable, script.clearable),\n\t\tdisabled: createBoolValue(field.disabled, script.disabled),\n\t\tcreatable: !field.uncreatable,\n\t\timmutable: field.immutable,\n\t\tlabel: createStringValue(field.label || name, script.label),\n\t\tdescription: createStringValue(field.description, script.description),\n\t\tplaceholder: createStringValue(field.placeholder, script.placeholder),\n\t\tstep: field.step,\n\t\tmax: field.max,\n\t\tmin: field.min,\n\t\tdefault: script.default || field.default,\n\t\tvalidator: script.validator,\n\n\t\tevents: {\n\t\t\tinput: script.input,\n\t\t\tchange: script.change,\n\t\t\tclick: script.click,\n\t\t\tfocus: script.focus,\n\t\t\tblur: script.blur,\n\t\t},\n\t};\n}\n\nexport default function toSchema(\n\tfields: Record<string, FieldScriptConfiguration>,\n\tcomponents: FieldComponents,\n\tpermissions?: Permission[] | null,\n) {\n\tlet schema: Schema = Object.create(null);\n\tfor (const [name, field] of Object.entries(fields)) {\n\t\tconst component = components[name];\n\t\tconst type = field.type;\n\t\tconst layout = field.layout || {};\n\t\tif (typeof type !== 'object' || !type) {\n\t\t\tschema[name] = {\n\t\t\t\t...createAttr(field, name, permissions),\n\t\t\t\ttype,\n\t\t\t\tarray: Boolean(field.array),\n\t\t\t\tcomponent: [component, field?.component, field.script?.component].find(v => typeof v === 'function'),\n\t\t\t\tlayout: {\n\t\t\t\t\tfield: name,\n\t\t\t\t\tcolStart: layout.colStart,\n\t\t\t\t\tcolSpan: layout.colSpan,\n\t\t\t\t\tcolEnd: layout.colEnd,\n\t\t\t\t\trowStart: layout.rowStart,\n\t\t\t\t\trowSpan: layout.rowSpan,\n\t\t\t\t\trowEnd: layout.rowEnd,\n\t\t\t\t},\n\t\t\t};\n\t\t\tcontinue;\n\n\t\t}\n\t\tconst fields = Object.entries(type).filter(\n\t\t\t(v: [string, any]): v is [string, FieldScriptConfiguration] => Boolean(v[1]),\n\t\t);\n\t\tconst levelKey = layout.levelKey || '';\n\t\tconst columns: StoreLayout.Column<any>[] = [];\n\t\tif (levelKey) {\n\t\t\tif (Array.isArray(layout.columns)) {\n\t\t\t\tfor (const { action, actions, field, placeholder, width } of layout.columns) {\n\t\t\t\t\tif (field || width || placeholder) {\n\t\t\t\t\t\tif (field || width) {\n\t\t\t\t\t\t\tcolumns.push({ field, width });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (placeholder && !width) {\n\t\t\t\t\t\t\tcolumns.push({ placeholder });\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst allActions = [action, actions].flat().filter(Boolean);\n\t\t\t\t\t\tif (allActions) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tcolumns.push({ actions: allActions });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!columns.length) {\n\t\t\t\tcolumns.push({ actions: ['collapse', 'move'] });\n\t\t\t\tconst list = fields.filter(([, v]) => v.layout?.head)\n\t\t\t\t\t.sort(([, a], [, b]) => (a.layout?.head || 0) - (b.layout?.head || 0))\n\t\t\t\t\t.map(([field, define]) => field);\n\t\t\t\tfor (const c of list) {\n\t\t\t\t\tcolumns.push({ field: c });\n\t\t\t\t}\n\t\t\t\tcolumns.push({ placeholder: 1 });\n\t\t\t\tcolumns.push({ actions: ['add', 'remove'] });\n\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (Array.isArray(layout.columns)) {\n\t\t\t\tfor (const { action, actions, field } of layout.columns) {\n\t\t\t\t\tif (field) {\n\t\t\t\t\t\tcolumns.push({ field });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst allActions = [action, actions].flat().filter(Boolean);\n\t\t\t\t\t\tif (allActions) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tcolumns.push({ actions: allActions });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!columns.length) {\n\t\t\t\tcolumns.push({ actions: ['add', 'trigger', 'move', 'remove', 'serial'] });\n\t\t\t\tconst list = fields.filter(([, v]) => v.layout?.head)\n\t\t\t\t\t.sort(([, a], [, b]) => (a.layout?.head || 0) - (b.layout?.head || 0))\n\t\t\t\t\t.map(([field, define]) => field);\n\t\t\t\tfor (const c of list) {\n\t\t\t\t\tcolumns.push({ field: c });\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = toSchema(type, typeof component !== 'function' && component || {}, permissions);\n\n\t\tschema[name] = {\n\t\t\t...createAttr(field, name, permissions),\n\t\t\tlayout: {\n\t\t\t\tfield: name,\n\t\t\t\tfields: Object.entries(children)\n\t\t\t\t\t.sort(([a], [b]) => (type[a]?.layoutOrder || 0) - (type[b]?.layoutOrder || 0))\n\t\t\t\t\t.map(([field, s]) => ({ ...s.layout, field })),\n\t\t\t\tcolumns,\n\t\t\t\tarrayStyle: levelKey ? 'tree' : 'table',\n\t\t\t\tlevelKey,\n\t\t\t\tcolStart: layout.colStart,\n\t\t\t\tcolSpan: layout.colSpan,\n\t\t\t\tcolEnd: layout.colEnd,\n\t\t\t\trowStart: layout.rowStart,\n\t\t\t\trowSpan: layout.rowSpan,\n\t\t\t\trowEnd: layout.rowEnd,\n\t\t\t},\n\t\t\ttype: children,\n\t\t\tarray: Boolean(field.array),\n\t\t\tcomponent: [component, field?.component, field.script?.component].find(v => typeof v === 'function'),\n\t\t};\n\t}\n\treturn schema;\n}\n","export class ResponseError extends Error {\n\t/**\n\t * \n\t * @param {number} status \n\t */\n\tconstructor(status) {\n\t\tsuper(`${status}`)\n\t\tthis.status = status;\n\t}\n}\n","/** @import { State } from '../data/index.mts' */\nimport { createState } from '../data/index.mts';\n\n/**\n * @template T\n * @template D\n * @typedef {object} PromisesAndStates\n * @property {(force?: boolean) => Promise<T>} load\n * @property {() => T | D} get\n * @property {() => void} destroy\n */\n/**\n * @template T\n * @template {unknown[]} A\n * @template D\n * @typedef {object} PromisesAndStatesApi\n * @property {(key: string | string[], ...args: A) => PromisesAndStates<T, D>} create\n * @property {(listener: (key: string) => void) => void} listen\n * @property {(key: string | string[], ...args: A) => Promise<T>} load\n * @property {(key: string | string[], ...args: A) => Promise<T>} forceLoad\n * @property {(key: string | string[], ...args: A) => T | D} get\n */\n/**\n * @template T\n * @template {unknown[]} A\n * @template D\n * @param {(...a: A) => Promise<T>} run \n * @param {D} def \n * @param {...PromisesAndStatesApi<unknown, any[], unknown>} dependents \n * @returns {PromisesAndStatesApi<T, A, D>}\n */\nexport default function createPromisesAndStates(run, def, ...dependents) {\n\n\t/** @type {Record<string, Promise<T>>} */\n\tconst promises = Object.create(null);\n\t/** @type {Set<string>} */\n\tconst reload = new Set();\n\t/** @type {Record<string, State<T | D> | undefined>} */\n\tconst states = Object.create(null);\n\n\n\t/** @type {Record<string, A | undefined>} */\n\tconst allArgs = Object.create(null);\n\n\t/** @type {((key: string) => void)[]} */\n\tconst listeners = [];\n\t/** @type {Set<string>} */\n\tconst wait = new Set();\n\t/**\n\t * \n\t * @param {string} key \n\t * @param {A} args \n\t */\n\tfunction update(key, args) {\n\t\tconst result = run(...args);\n\t\tpromises[key] = result;\n\t\tresult.then(v => {\n\t\t\tconst state = states[key];\n\t\t\tif (state) { return state.set(v); }\n\t\t\tstates[key] = createState(/** @type {T | D} */(v));\n\t\t\tfor (const l of listeners) {\n\t\t\t\tl(key);\n\t\t\t}\n\t\t}, () => {\n\t\t\tif (promises[key] !== result) { return; }\n\t\t\tdelete promises[key];\n\t\t});\n\t\treturn result;\n\t}\n\t/**\n\t * \n\t * @param {string} key \n\t */\n\tfunction refresh(key) {\n\t\tif (wait.has(key)) { return; }\n\t\twait.add(key);\n\t\trequestIdleCallback(() => {\n\t\t\tif (!wait.has(key)) { return; }\n\t\t\twait.delete(key);\n\t\t\tconst args = allArgs[key];\n\t\t\tif (!args) { return; }\n\t\t\tupdate(key, args);\n\t\t});\n\t}\n\tfor (const d of dependents) {\n\t\td.listen(refresh);\n\t}\n\n\t/**\n\t * \n\t * @param {string | string[]} keys \n\t * @param {A} args \n\t * @returns {PromisesAndStates<T, D>}\n\t */\n\tfunction create(keys, ...args) {\n\t\tconst key = Array.isArray(keys) ? keys.join('\\n') : keys;\n\t\tallArgs[key] = args;\n\t\t/**\n\t\t * \n\t\t * @param {boolean} [force] \n\t\t */\n\t\tfunction load(force) {\n\t\t\tconst promise = !force && Object.hasOwn(promises, key) && promises[key];\n\t\t\tif (promise) { return promise; }\n\t\t\treturn update(key, args);\n\t\t}\n\t\tfunction get() {\n\t\t\tif (!Object.hasOwn(promises, key) || !promises[key] || reload.has(key)) {\n\t\t\t\tupdate(key, args);\n\t\t\t\treload.delete(key);\n\t\t\t}\n\t\t\tlet state = states[key];\n\t\t\tif (!state) {\n\t\t\t\tstate = createState(/** @type {T | D} */(def));\n\t\t\t\tstates[key] = state;\n\n\t\t\t}\n\t\t\treturn state.get();\n\t\t}\n\t\tfunction destroy() {\n\t\t\tif (allArgs[key] !== args) { return; }\n\t\t\tdelete allArgs[key];\n\t\t\tdelete states[key];\n\t\t\tdelete promises[key];\n\t\t}\n\t\treturn { get, load, destroy };\n\n\t}\n\t/**\n\t * \n\t * @param {string | string[]} keys \n\t * @param {A} args \n\t * @returns {Promise<T>}\n\t */\n\tfunction forceLoad(keys, ...args) {\n\t\tconst key = Array.isArray(keys) ? keys.join('\\n') : keys;\n\t\tallArgs[key] = args;\n\t\treturn update(key, args);\n\n\t}\n\t/**\n\t * \n\t * @param {string | string[]} keys \n\t * @param {A} args \n\t * @returns {Promise<T>}\n\t */\n\tfunction load(keys, ...args) {\n\t\tconst key = Array.isArray(keys) ? keys.join('\\n') : keys;\n\t\tallArgs[key] = args;\n\t\tconst promise = Object.hasOwn(promises, key) && promises[key];\n\t\tif (promise) { return promise; }\n\t\treturn update(key, args);\n\n\t}\n\t/**\n\t * \n\t * @param {string | string[]} keys \n\t * @param {A} args \n\t * @returns {T | D}\n\t */\n\tfunction get(keys, ...args) {\n\t\tconst key = Array.isArray(keys) ? keys.join('\\n') : keys;\n\t\tallArgs[key] = args;\n\t\tif (!Object.hasOwn(promises, key) || !promises[key] || reload.has(key)) {\n\t\t\tupdate(key, args);\n\t\t\treload.delete(key);\n\t\t}\n\t\tlet state = states[key];\n\t\tif (!state) {\n\t\t\tstate = createState(/** @type {T | D} */(def));\n\t\t\tstates[key] = state;\n\n\t\t}\n\t\treturn state.get();\n\n\t}\n\t/**\n\t * \n\t * @param {(key: string) => void} listener \n\t */\n\tfunction listen(listener) {\n\t\tlisteners.push(listener);\n\t}\n\treturn { create, listen, load, forceLoad, get };\n}\n","/**\n * @template T\n * @param {() => Promise<T>} load \n * @returns \n */\nexport default function toPromiseInterface(load) {\n\treturn {\n\t\t/**\n\t\t * @template [TResult1=T]\n\t\t * @template [TResult2=never]\n\t\t * @param {((value: T) => TResult1 | PromiseLike<TResult1>)?} [onfulfilled]\n\t\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected]\n\t\t * @returns {Promise<TResult1 | TResult2>};\n\t\t */\n\t\tthen(onfulfilled, onrejected) { return load().then(onfulfilled, onrejected); },\n\t\t/**\n\t\t * @template [TResult2=never]\n\t\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected]\n\t\t * @returns {Promise<T | TResult2>};\n\t\t */\n\t\tcatch(onrejected) { return load().catch(onrejected); },\n\t\t/**\n\t\t * @param {(() => void)?} [onfinally]\n\t\t * @returns {Promise<T>};\n\t\t */\n\t\tfinally(onfinally) { return load().finally(onfinally); },\n\t};\n\n}\n","/** @import { Field, Permission } from '@yongdall/types' */\n/** @import { Search } from '@yongdall/common' */\n/** @import DotRequest from 'dot-request' */\n/** @import { PageConfiguration } from './page.mjs' */\n/** @import { FieldComponent } from '../typesDefine.mjs' */\n\nimport { importWidget } from '../import.mjs';\nimport request, { userErrorHandler } from '../request.mts';\nimport { ResponseError } from '../ResponseError.mjs';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport toPromiseInterface from './toPromiseInterface.mjs';\n/** @import { Schema, Store, StoreLayout } from '@neeloong/form' */\n/**\n * @typedef {object} ModelConfiguration\n * @property {string} [id] \n * @property {string} [label] \n * @property {Record<string, Field>} fields 字段配置\n * @property {string?} [iconField] 图标字段\n * @property {string?} [imageField] 图像字段\n * @property {string?} [labelField] 标签字段\n * @property {string?} [labelPattern] 标签命名规则\n * @property {Permission[]} [permissions] 权限配置\n * @property {Record<string, unknown>?} [options] 模型选项,关联前端脚本可读取\n * @property {(string | [string, object])[] | null} [scripts] 关联前端脚本\n * @property {Record<string, string | object | null> | null} [pages] 关联默认页面\n * // TODO: 查询配置\n * // TODO: 前端按钮配置\n * // TODO: 是否可销毁、可创建、更新、保存、upsert\n * // TODO: 列表内操作按钮\n * // TODO: 编辑内按钮\n * // TODO: 操作事件\n * // TODO: 是否分页\n */\n\n\n/** @typedef {Omit<Field, 'scripts' | 'type'> & { component?: FieldComponent; script?: Omit<FieldScript, 'subFields'>; type: string | Record<string, FieldScriptConfiguration>;}} FieldScriptConfiguration */\n\n/** @typedef {Omit<ModelConfiguration, 'scripts' | 'fields'> & { script?: Omit<ModelScript, 'fields'>; fields: Record<string, FieldScriptConfiguration>;}} ModelScriptConfiguration */\n\n/**\n * @typedef {object} ListScriptParameter\n * @property {ModelScriptConfiguration} model\n * @property {Record<string, any>[]} [checkedDocuments]\n * @property {Record<string, any>[]} [documents]\n */\n/**\n * @typedef {object} DocumentScriptParameter\n * @property {ModelScriptConfiguration} model\n * @property {Record<string, any>} [document]\n * @property {Store} [store]\n */\n/**\n * @typedef {object} ModelScript\n * @property {Record<string, FieldScript>} [fields] 字段配置\n * @property {((document: any, ...fields: (string | number)[]) => void)?} [input]\n * @property {((document: any, ...fields: (string | number)[]) => void)?} [change]\n * @property {((document: any) => void)?} [beforeCreate]\n * @property {((document: any) => void)?} [beforeUpdate]\n * @property {((document: any) => void)?} [beforeSave]\n * @property {((document: any) => void)?} [beforeDestroy]\n * @property {((document: any) => void)?} [beforeUpsert]\n * @property {Record<string, (params: ListScriptParameter) => void>} [listScripts]\n * @property {Record<string, (params: DocumentScriptParameter) => void>} [documentScripts]\n */\n/**\n * @typedef {object} FieldScript\n * @property {Record<string, FieldScript>} [subFields] 子字段配置\n * @property {FieldComponent} [component]\n * @property {((value: InputEvent, store: Store) => void | boolean | null)?} [input]\n * @property {((value: InputEvent, store: Store) => void | boolean | null)?} [change]\n * @property {((value: Event, store: Store) => void | boolean | null)?} [click]\n * @property {((value: Event, store: Store) => void | boolean | null)?} [focus]\n * @property {((value: Event, store: Store) => void | boolean | null)?} [blur]\n * \n * @property {((document: any, field: string, ...fields: (string | number)[]) => void | object)?} [add]\n * @property {((value: any[], document: any, field: string, ...fields: (string | number)[]) => void)?} [remove]\n * @property {((from: number[], to: number, document: any, field: string, ...fields: (string | number)[]) => void)?} [move]\n * \n * @property {((store: Store) => boolean)?} [readonly]\n * @property {((store: Store) => boolean)?} [hidden]\n * @property {((store: Store) => boolean)?} [required]\n * @property {((store: Store) => boolean)?} [clearable]\n * @property {((store: Store) => boolean)?} [disabled]\n * @property {((store: Store) => any)?} [default]\n * \n * @property {((store: Store) => string)?} [label]\n * @property {((store: Store) => string)?} [description]\n * @property {((store: Store) => string)?} [placeholder]\n * @property {Schema.Validator | Schema.Validator[] | null} [validator]\n * \n * @property {((store?: Store?) => Iterable<Record<string, any>>)?} [source]\n * @property {((item: Record<string, any>, store?: Store?) => boolean)?} [filter]\n * \n */\n\n/**\n * \n * @param {(string | [string, object])[] | null} [scripts] \n */\n\nfunction loadScripts(scripts) {\n\treturn Promise.all(Array.isArray(scripts) ? scripts.map(async (s) => {\n\t\tconst path = typeof s === 'string' ? s : s[0];\n\t\tif (!path || typeof path !== 'string') { return; }\n\t\tconst script = await importWidget(path);\n\t\tif (typeof script !== 'function') { return script; }\n\t\tconst options = typeof s === 'string' ? null : s[1];\n\t\treturn script(typeof options == 'object' && options || {});\n\t}) : []);\n}\n/**\n * \n * @param {Field} field \n * @param {any[]} parentScripts \n * @returns {Promise<FieldScriptConfiguration>}\n */\nasync function setFieldScript({ type, scripts, ...field }, parentScripts) {\n\tconst subScripts = Object.create(null);\n\t/** @type {Record<string, any[] | undefined>} */\n\tconst selfScripts = Object.create(null);\n\tfor (const script of [await loadScripts(scripts), parentScripts].flat()) {\n\t\tif (!script || typeof script !== 'object') { continue; }\n\t\tconst { subFields, ...others } = script;\n\t\tfor (const [k, v] of Object.entries(others)) {\n\t\t\tconst list = selfScripts[k];\n\t\t\tif (!list) {\n\t\t\t\tselfScripts[k] = [v];\n\t\t\t} else {\n\t\t\t\tlist.push(v);\n\t\t\t}\n\t\t}\n\t\tif (!subFields) { continue; }\n\t\tfor (const [k, v] of Object.entries(subFields)) {\n\t\t\tconst list = subScripts[k];\n\t\t\tif (!list) {\n\t\t\t\tsubScripts[k] = [v];\n\t\t\t} else {\n\t\t\t\tlist.push(v);\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\t...field,\n\t\tscript: margeFieldScript(selfScripts),\n\t\ttype: typeof type === 'object' && type ? await setFieldsScript(type, subScripts) : type,\n\t};\n}\n/**\n * \n * @param {Record<string, Field>} fields \n * @param {*} scripts \n * @returns \n */\nasync function setFieldsScript(fields, scripts) {\n\tconst list = Object.entries(fields).map(([k, f]) => Promise.all([k, setFieldScript(f, scripts[k])]));\n\treturn Object.fromEntries(await Promise.all(list));\n}\n\n/**\n * \n * @param {any[]} [list] \n * @param {boolean} [a] \n * @returns {((...p: any) => any)?}\n */\nfunction margeFunc(list, a) {\n\tif (!list) { return null; }\n\tconst fn = list.filter(v => typeof v === 'function');\n\tif (!fn.length) { return null; }\n\tif (a) {\n\t\treturn (...p) => {\n\t\t\tfor (const f of fn) {\n\t\t\t\tf(...p);\n\t\t\t}\n\t\t};\n\t}\n\treturn async (...p) => {\n\t\tfor (const f of fn) {\n\t\t\tawait f(...p);\n\t\t}\n\t};\n}\n/**\n * \n * @param {((store: Store) => any)[] | null | undefined} list \n * @param {boolean | ((value: any) => boolean)} judgment \n * @param {any} [defaultValue] \n * @returns {((store: Store) => any)?}\n */\nfunction margeStoreFunc(list, judgment, defaultValue) {\n\tif (!list) { return null; }\n\tconst fn = list.filter(v => typeof v === 'function');\n\tif (!fn.length) { return null; }\n\treturn (...p) => {\n\t\tfor (const f of fn) {\n\t\t\tconst res = f(...p);\n\t\t\tif (res === judgment) { return res; }\n\t\t\tif (typeof judgment === 'function' && judgment(res)) { return res; }\n\t\t}\n\t\treturn defaultValue;\n\t};\n}\n/**\n * @template T\n * @param {((store?: Store?) => Iterable<T>)[] | null | undefined} list \n * @returns {((store?: Store?) => Iterable<T>)?}\n */\nfunction margeIterableFunc(list) {\n\tif (!list) { return null; }\n\tconst fn = list.filter(v => typeof v === 'function');\n\tif (!fn.length) { return null; }\n\treturn function *(...p) {\n\t\tfor (const f of fn) {\n\t\t\tyield * f(...p);\n\t\t}\n\t};\n}\n\n/**\n * \n * @param {((item: Record<string, any>, store?: Store?) => any)[] | null | undefined} list \n * @returns {((item: Record<string, any>, store?: Store?) => boolean)?}\n */\nfunction margeFilterFunc(list) {\n\tif (!list) { return null; }\n\tconst fn = list.filter(v => typeof v === 'function');\n\tif (!fn.length) { return null; }\n\treturn (...p) => {\n\t\tfor (const f of fn) {\n\t\t\tconst res = f(...p);\n\t\t\tif (res === false) { return res; }\n\t\t}\n\t\treturn false;\n\t};\n}\n/**\n * \n * @param {Record<string, any[] | undefined>} scripts \n * @returns {Omit<FieldScript, 'subFields'>}\n */\nfunction margeFieldScript(scripts) {\n\treturn {\n\t\tcomponent: scripts.component?.find(v => typeof v === 'function'),\n\t\tinput: margeFunc(scripts.input),\n\t\tchange: margeFunc(scripts.change),\n\t\tclick: margeFunc(scripts.click),\n\t\tfocus: margeFunc(scripts.focus),\n\t\tblur: margeFunc(scripts.blur),\n\t\tadd: scripts.add?.find(v => typeof v === 'function'),\n\t\tremove: margeFunc(scripts.remove),\n\t\tmove: margeFunc(scripts.move),\n\t\treadonly: margeStoreFunc(scripts.readonly, true, false),\n\t\thidden: margeStoreFunc(scripts.hidden, true, false),\n\t\trequired: margeStoreFunc(scripts.required, true, false),\n\t\tclearable: margeStoreFunc(scripts.clearable, true, false),\n\t\tdisabled: margeStoreFunc(scripts.disabled, true, false),\n\t\tdefault: margeStoreFunc(scripts.default, (v = null) => v !== null, null),\n\t\tlabel: margeStoreFunc(scripts.label, v => v && typeof v === 'string', ''),\n\t\tdescription: margeStoreFunc(scripts.description, v => v && typeof v === 'string', ''),\n\t\tplaceholder: margeStoreFunc(scripts.clearable, v => v && typeof v === 'string', ''),\n\t\tvalidator: [scripts.validator].flat().filter(Boolean),\n\t\tsource: margeIterableFunc(scripts.source),\n\t\tfilter: margeFilterFunc(scripts.disabled),\n\t};\n\n}\n/**\n * \n * @param {Record<string, any[]>} scripts \n * @returns {Omit<ModelScript, 'subFields'>}\n */\nfunction margeModelScript({\n\tlistScripts,\n\tdocumentScripts,\n\t...scripts\n}) {\n\treturn {\n\t\tinput: margeFunc(scripts.input),\n\t\tchange: margeFunc(scripts.change),\n\t\tbeforeCreate: margeFunc(scripts.beforeCreate),\n\t\tbeforeUpdate: margeFunc(scripts.beforeUpdate),\n\t\tbeforeSave: margeFunc(scripts.beforeSave),\n\t\tbeforeDestroy: margeFunc(scripts.beforeDestroy),\n\t\tbeforeUpsert: margeFunc(scripts.beforeUpsert),\n\t\tlistScripts: listScripts ? Object.assign({}, ...listScripts) : {},\n\t\tdocumentScripts: documentScripts ? Object.assign({}, ...documentScripts) : {},\n\t};\n}\n/**\n * \n * @param {ModelConfiguration} model \n * @returns {Promise<ModelScriptConfiguration>}\n */\nasync function setScript({ fields, scripts: scripts, ...model }) {\n\t/** @type {Record<string, any[]>} */\n\tconst fieldsScripts = Object.create(null);\n\t/** @type {Record<string, any[]>} */\n\tconst selfScripts = Object.create(null);\n\tfor (const script of await loadScripts(scripts)) {\n\t\tif (!script || typeof script !== 'object') { continue; }\n\t\tconst { fields, ...others } = script;\n\t\tfor (const [k, v] of Object.entries(others)) {\n\t\t\tconst list = selfScripts[k];\n\t\t\tif (!list) {\n\t\t\t\tselfScripts[k] = [v];\n\t\t\t} else {\n\t\t\t\tlist.push(v);\n\t\t\t}\n\t\t}\n\t\tif (!fields) { continue; }\n\t\tfor (const [k, v] of Object.entries(fields)) {\n\t\t\tconst list = fieldsScripts[k];\n\t\t\tif (!list) {\n\t\t\t\tfieldsScripts[k] = [v];\n\t\t\t} else {\n\t\t\t\tlist.push(v);\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\t...model,\n\t\tscript: margeModelScript(selfScripts),\n\t\tfields: await setFieldsScript(fields, fieldsScripts),\n\t};\n}\n\n\nconst modelOptions = createPromisesAndStates((\n\t/** @type {DotRequest} */req\n) => {\n\t/** @type {Promise<Record<string, any>[]>} */\n\tconst result = req.clone().body({}).json().then(v => v.options);\n\treturn result;\n}, /** @type {Record<string, any>[]} */([]));\n\n\n/**\n * \n * @param {DotRequest} baseReq \n * @param {string} key\n * @returns \n */\nfunction service(baseReq, key) {\n\tconst documentsReq = baseReq.clone().append(`/documents`);\n\tconst optionsReq = baseReq.clone().append(`/options`);\n\tconst { get: getOptions, load: loadOptions } = modelOptions.create(key, optionsReq);\n\n\n\treturn {\n\t\t/**\n\t\t * @param {Search.Param} [options]\n\t\t * @returns {Promise<{documents: any[]; total: number}>}\n\t\t */\n\t\tasync query({ values, where, orWhere, sort, limit = 20, page, offset, select, total, primary } = {}) {\n\t\t\treturn documentsReq.clone().body({ values, where, orWhere, sort, limit, page, offset, select, total, primary }).json();\n\t\t},\n\t\tgetOptions() { return getOptions(); },\n\t\t/**\n\t\t * @overload\n\t\t * @param {boolean} [options]\n\t\t * @returns {Promise<Record<string, any>[]>}\n\t\t */\n\t\t/**\n\t\t * @overload\n\t\t * @param {Search.Param} options\n\t\t * @returns {Promise<{options: Record<string, any>[]; total: number}>}\n\t\t */\n\t\t/**\n\t\t * @param {Search.Param | boolean} [options]\n\t\t * @returns {Promise<Record<string, any>[] | {options: Record<string, any>[]; total: number}>}\n\t\t */\n\t\tasync options(options) {\n\t\t\tif (!options || typeof options === 'boolean') {\n\t\t\t\treturn loadOptions(options);\n\t\t\t}\n\t\t\tconst { values, where, orWhere, sort, limit = 20, page, offset, select, total, primary } = options;\n\t\t\t// TODO:\n\t\t\treturn optionsReq.clone().body({\n\t\t\t\tvalues, where, orWhere, sort, limit, page, offset, select, total, primary,\n\t\t\t}).json();\n\t\t},\n\t\t/**\n\t\t * \n\t\t * @param {string | number} id\n\t\t */\n\t\tasync option(id) {\n\t\t\t// TODO:\n\t\t\treturn optionsReq.clone().append(`/${encodeURIComponent(id)}`).get().errorHandler(userErrorHandler).json();\n\t\t},\n\t\t/**\n\t\t * \n\t\t * @param {Record<string, any>} data\n\t\t * @param {DotRequest.Signal} [signal]\n\t\t * @returns \n\t\t */\n\t\tasync create(data, signal) {\n\t\t\t// TODO:\n\t\t\treturn documentsReq.clone().post().body({ document: data }).signal(signal).json();\n\t\t},\n\t\t/**\n\t\t * \n\t\t * @param {string | number} id\n\t\t */\n\t\tdocument(id) {\n\t\t\tconst idReq = documentsReq.clone().append(`/${encodeURIComponent(id)}`);\n\t\t\t/**\n\t\t\t * \n\t\t\t * @returns {Promise<Record<string, any>>}\n\t\t\t */\n\t\t\tasync function get() {\n\t\t\t\treturn idReq.get().json().then(v => v.document);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tget,\n\t\t\t\t/**\n\t\t\t\t * @param {Record<string, any>} data\n\t\t\t\t * @returns \n\t\t\t\t */\n\t\t\t\tasync update(data) {\n\t\t\t\t\t// TODO:\n\t\t\t\t\treturn idReq.clone().put().body({ document: data }).json();\n\t\t\t\t},\n\t\t\t\tasync delete() {\n\t\t\t\t\t// TODO:\n\t\t\t\t\treturn idReq.delete().done();\n\t\t\t\t},\n\t\t\t\t/** @param {string} field */\n\t\t\t\tfield(field) {\n\t\t\t\t\tconst fieldReq = idReq.clone().append`fields/${field}`;\n\t\t\t\t\t/**\n\t\t\t\t\t * \n\t\t\t\t\t * @returns {Promise<any>}\n\t\t\t\t\t */\n\t\t\t\t\tasync function get() {\n\t\t\t\t\t\treturn fieldReq.get().json().then(v => v.value);\n\t\t\t\t\t}\n\t\t\t\t\treturn { get, ...toPromiseInterface(get) };\n\t\t\t\t},\n\t\t\t\t...toPromiseInterface(get),\n\t\t\t};\n\t\t},\n\t};\n}\nconst models = createPromisesAndStates((\n\t/** @type {DotRequest} */req\n) => {\n\t/** @type {Promise<ModelConfiguration?>} */\n\tconst result = req.result().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\treturn result;\n}, null);\nconst modelScripts = createPromisesAndStates((\n\t/** @type {() => Promise<ModelConfiguration?>} */load\n) => {\n\treturn load().then(async v => v && setScript(v));\n}, null, models);\n\n/**\n * \n * @param {string} model \n * @returns \n */\nexport function modelService(model) {\n\tconst modelReq = request.clone().path`models/${model || ''}`;\n\tconst { get: getModel, load: loadModel } = models.create(model, modelReq);\n\tconst { get: getScript, load: loadScript } = modelScripts.create(model, loadModel);\n\n\treturn {\n\t\tloadModel,\n\t\tloadScript,\n\t\tgetModel,\n\t\tgetScript,\n\t\t...service(modelReq, [model, ''].join('\\n')),\n\t\t...toPromiseInterface(loadModel),\n\t};\n}\n","/** @import DotRequest from 'dot-request' */\nimport request from '../request.mts';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport toPromiseInterface from './toPromiseInterface.mjs';\n\nconst enumerations = createPromisesAndStates((\n\t/** @type {DotRequest} */req\n) => {\n\t/** @type {Promise<Record<string, any>[]>} */\n\tconst result = req.json().then(\n\t\tv => typeof v === 'object' && v.values || [],\n\t\t() => /** @type {Record<string, any>[]} */([])\n\t);\n\treturn result;\n}, /** @type {Record<string, any>[]} */([]));\n\n/**\n * \n * @param {string} enumeration \n * @returns \n */\nexport function enumerationsService(enumeration) {\n\tconst modelReq = request.clone().path`enumerations/${enumeration || ''}`;\n\tconst { get: get, load: load } = enumerations.create(enumeration, modelReq);\n\treturn { load, get, ...toPromiseInterface(load) };\n}\n","/** @import DotRequest from 'dot-request' */\n/** @import { FormLayout } from '@yongdall/types' */\nimport request from '../request.mts';\nimport { ResponseError } from '../ResponseError.mjs';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport toPromiseInterface from './toPromiseInterface.mjs';\n\nconst layouts = createPromisesAndStates((\n\t/** @type {DotRequest} */req\n) => {\n\t/** @type {Promise<FormLayout?>} */\n\tconst result = req.result().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\treturn result;\n}, null);\n\n/**\n * \n * @param {string} layout \n * @returns \n */\nexport function formLayoutsService(layout) {\n\tconst layoutReq = request.clone().path`formLayouts/${layout || ''}`;\n\tconst { get: get, load: load } = layouts.create(layout, layoutReq);\n\treturn { load, get, ...toPromiseInterface(load) };\n}\n","import request from '../request.mts';\nimport { createState } from '../data/index.mts';\nimport toPromiseInterface from './toPromiseInterface.mjs';\n\n\nconst permissionsReq = request.clone().path`permissions`;\n\n/**\n * @typedef {({children: {value: string; label: string}[]; label: string;})} Permission\n */\n/** @type {Promise<Permission[]>?} */\nlet promise = null;\n/** @type {boolean} */\nlet reloaded = false;\nconst state = createState(/** @type {Permission[]} */([]));\n\nfunction update() {\n\t/** @type {Promise<Permission[]>} */\n\tconst result = permissionsReq.json().then(\n\t\tv => Array.isArray(v) && v || [],\n\t);\n\tpromise = result;\n\tresult.then(v => {\n\t\treturn state.set(v);\n\t}, () => {\n\t\tif (promise !== result) { return; }\n\t\tpromise = null;\n\t});\n\treturn result;\n}\n\n\n/**\n * \n * @param {boolean} [force] \n */\nfunction load(force) {\n\tif (!force && promise) { return promise; }\n\treturn update();\n}\nfunction get() {\n\tif (!promise || reloaded) {\n\t\tupdate();\n\t\treloaded = false;\n\t}\n\treturn state.get();\n}\n\nexport default { load, get, ...toPromiseInterface(load) };\n","import request from '../request.mts';\nimport { ResponseError } from '../ResponseError.mjs';\nimport * as configuration from '../configuration.mjs';\nimport { createComputed, createState, setEnvState } from '../data/index.mts';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport { importWidget } from '../import.mjs';\nimport type { Menu } from '../Menu.mjs';\n\nconst id = createState(configuration.applicationId || '');\nsetEnvState('application', createComputed(() => id.get()));\n\nconst appPath = createState(configuration.path || '');\nconst webRoot = createComputed(() => {\n\tconst paths = appPath.get().replace(/[?#].*/, '').split('/').filter(Boolean);\n\tif (!paths.length) { paths.push('workbench'); }\n\tconst webRoot = new URL(['', ...paths, ''].join('/'), location.origin);\n\treturn webRoot;\n});\nconst root = createComputed(() => webRoot.get().href);\nconst path = createComputed(() => webRoot.get().pathname);\nconst authRoot = createComputed(() => root.get().slice(0, -1));\nconst authPath = createComputed(() => path.get().slice(0, -1));\n\ninterface ApplicationConfiguration {\n\tlogo?: string;\n\ttitle?: string;\n\tcompany?: string;\n\t/** 帮助链接 */\n\thelp?: string;\n}\nconst applications = createPromisesAndStates(async (applicationId: string) => {\n\tconst application = await request.clone().get`applications`.append(`${applicationId}`).json<ApplicationConfiguration | null>();\n\tif (typeof application !== 'object') { return null; }\n\treturn application;\n}, null);\nconst application = createComputed(() => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return null; }\n\treturn applications.get(applicationId, applicationId);\n});\nconst loadApplication = async (force?: boolean) => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return null; }\n\tif (force) { applications.forceLoad(applicationId, applicationId); }\n\treturn applications.load(applicationId, applicationId);\n};\nconst logo = createComputed(() => application.get()?.logo || '');\nconst title = createComputed(() => application.get()?.title || '');\nconst company = createComputed(() => application.get()?.company || '');\nconst help = createComputed(() => application.get()?.help || '');\n\n\nconst menus = createPromisesAndStates(async (applicationId: string) => {\n\tconst result = await request.clone().path`applications/${applicationId}/menus`.result<{ menus?: Menu.Define[] }>().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\tif (!result || typeof result !== 'object') { return []; }\n\treturn result?.menus || [];\n}, []);\nconst applicationMenus = createComputed(() => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return []; }\n\treturn menus.get(applicationId, applicationId);\n});\nconst loadMenus = async (force?: boolean) => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return []; }\n\tif (force) { menus.forceLoad(applicationId, applicationId); }\n\treturn menus.load(applicationId, applicationId);\n};\n\n\nconst userMenus = createPromisesAndStates(async (applicationId: string) => {\n\tconst result = await request.clone().path`applications/${applicationId}/userMenus`.result<{ userMenus?: Menu.Define[] }>().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\tif (!result || typeof result !== 'object') { return []; }\n\treturn result?.userMenus || [];\n}, []);\nconst applicationUserMenus = createComputed(() => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return []; }\n\treturn userMenus.get(applicationId, applicationId);\n});\nconst loadUserMenus = async (force?: boolean) => {\n\tconst applicationId = id.get();\n\tif (!applicationId) { return []; }\n\tif (force) { userMenus.forceLoad(applicationId, applicationId); }\n\treturn userMenus.load(applicationId, applicationId);\n};\n\nconst pages = createPromisesAndStates((\n\tapplicationId: string,\n\tpage: string,\n) => request.clone()\n\t.path`applications/${applicationId}/pages/${page}`\n\t.result<{ widget?: string; } | null>()\n\t.catch(() => null), null);\nconst continuations = createPromisesAndStates((\n\tapplicationId: string,\n\tpage: string,\n) => request.clone()\n\t.path`applications/${applicationId}/continuations/${page}`\n\t.result<{ widget?: string; } | null>()\n\t.catch(() => null), null);\n\n\nexport const Application = {\n\tget id() { return id.get(); },\n\tget root() { return root.get(); },\n\tget path() { return path.get(); },\n\tget authRoot() { return authRoot.get(); },\n\tget authPath() { return authPath.get(); },\n\tget logo() { return logo.get(); },\n\tget title() { return title.get(); },\n\tget company() { return company.get(); },\n\tget help() { return help.get(); },\n\trefresh() { loadApplication(); },\n\tget menus() { return applicationMenus.get(); },\n\tloadMenus(force?: boolean) { return loadMenus(force); },\n\tget userMenus() { return applicationUserMenus.get(); },\n\tloadUserMenus(force?: boolean) { return loadUserMenus(force); },\n\tasync loadPage(page: string) {\n\t\tconst applicationId = id.get();\n\t\tif (!applicationId) { return null; }\n\t\treturn pages.load([applicationId, page], applicationId, page).then(v => {\n\t\t\tconst widget = v?.widget;\n\t\t\tif (!widget || typeof widget !== 'string') { return null; }\n\t\t\treturn async () => {\n\t\t\t\tconst r: any = await importWidget(widget);\n\t\t\t\tif (!r || typeof r !== 'object') { return r; }\n\t\t\t\treturn r[page];\n\t\t\t};\n\t\t}, () => null);\n\t},\n\tasync loadContinuation(page: string) {\n\t\tconst applicationId = id.get();\n\t\tif (!applicationId) { return null; }\n\t\treturn continuations.load([applicationId, page], applicationId, page).then(v => {\n\t\t\tconst widget = v?.widget;\n\t\t\tif (!widget || typeof widget !== 'string') { return null; }\n\t\t\treturn async () => {\n\t\t\t\tconst r: any = await importWidget(widget);\n\t\t\t\tif (!r || typeof r !== 'object') { return r; }\n\t\t\t\treturn r.continuation;\n\t\t\t};\n\t\t}, () => null);\n\t},\n};\n","/** @import { Field } from '@yongdall/types' */\nimport { Search } from '@yongdall/common';\nimport { getFilterFns } from '../index.mjs';\n\n/**\n * \n * @param {Record<string, Field>} fields 字段配置\n * @param {Search.ExecParam} param \n * @returns \n */\nexport function modelFilter(fields, param) {\n\tlet fieldsMap = fields;\n\tconst fieldNames = param.fields.map(v => Array.isArray(v) ? v[0] : v);\n\tif (!fieldNames.length) { return null; }\n\tconst last = fieldNames.pop() || '';\n\tfor (const f of fieldNames) {\n\t\tconst type = Object.hasOwn(fieldsMap, f) && fieldsMap[f]?.type;\n\t\tif (!type || typeof type !== 'object') { return null; }\n\t\tfieldsMap = type;\n\t}\n\tconst field = Object.hasOwn(fieldsMap, last) && fieldsMap[last];\n\tif (!field) { return null; }\n\tconst eqFieldName = param.field;\n\tconst eqField = eqFieldName && Object.hasOwn(fieldsMap, eqFieldName) && fieldsMap[eqFieldName] || null;\n\tconst not = Boolean(param.sign);\n\tconst { value, values } = param;\n\n\tfor (const fns of getFilterFns(field, param.operator)) {\n\t\tif (eqField) {\n\t\t\tfor (const fn of not ? fns.notField : fns.field) {\n\t\t\t\tconst w = fn(values, value, field, eqField);\n\t\t\t\tif (typeof w === 'boolean') { return w; }\n\t\t\t}\n\t\t\tif (not) {\n\t\t\t\tfor (const fn of fns.field) {\n\t\t\t\t\tconst w = fn(values, value, field, eqField);\n\t\t\t\t\tif (typeof w === 'boolean') { return !w; }\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const fn of not ? fns.notValue : fns.value) {\n\t\t\t\tconst w = fn(values, value, field);\n\t\t\t\tif (typeof w === 'boolean') { return w; }\n\t\t\t}\n\t\t\tif (not) {\n\t\t\t\tfor (const fn of fns.value) {\n\t\t\t\t\tconst w = fn(values, value, field);\n\t\t\t\t\tif (typeof w === 'boolean') { return !w; }\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\treturn null;\n}\n","import { modelService } from '../services/index.mjs';\nimport { Search } from '@yongdall/common';\nimport { getFilterFns } from '../index.mjs';\nimport { modelFilter } from './modelFilter.mjs';\n\n\n\n/**\n * \n * @param {Search.ExecParam} value \n * @returns \n */\nfunction run({ operator, sign, value, values }) {\n\tconst not = Boolean(sign);\n\tfor (const fns of getFilterFns(!values.find(v => !Array.isArray(v)), operator)) {\n\t\tfor (const fn of not ? fns.notValue : fns.value) {\n\t\t\tconst w = fn(values, value);\n\t\t\tif (typeof w === 'boolean') { return w; }\n\t\t}\n\t\tif (not) {\n\t\t\tfor (const fn of fns.value) {\n\t\t\t\tconst w = fn(values, value);\n\t\t\t\tif (typeof w === 'boolean') { return !w; }\n\t\t\t}\n\t\t}\n\t}\n\tif (!operator) {\n\t\tfor (const v of values) {\n\t\t\tif (v == value) { return !not; }\n\t\t}\n\t\treturn not;\n\t}\n\n\treturn null;\n}\n\n\n/**\n * \n * @param {((value: Search.ExecParam) => boolean?)?} [exec]\n * @param {string?} [type] \n * @param {string?} [name] \n * @returns {(value: Search.ExecParam) => boolean?}\n */\nexport function createExec(exec, type, name) {\n\tif (typeof exec === 'function') { return exec; }\n\tif (type !== 'model') { return run; }\n\tif (!name) { return run; }\n\tconst s = modelService(name);\n\treturn value => {\n\t\tconst model = s.getModel();\n\t\tif (!model) { return run(value); }\n\t\treturn modelFilter(model.fields, value);\n\t};\n}\n","/** @import { DataSource } from './index.mjs' */\nimport { Search } from '@yongdall/common';\n\n\n\n\n/**\n * \n * @param {DataSource.Option[]} list \n * @param {(value: Search.ExecParam) => boolean?} exec \n * @param {(Search.Match | Search.Children)[]} where \n * @param {(Search.Match | Search.Children | Search.Or)[]} orWhere \n */\nexport function filterByWhere(list, exec, where, orWhere) {\n\t/** @type {DataSource.Option[]} */\n\tconst result = [];\n\tfor (const data of list) {\n\t\tconst children = filterByWhere(data.children, exec, where, orWhere);\n\t\tconst disabled = data.disabled || !(Search.exec(data.data, exec, where, orWhere) ?? true);\n\t\tif (!children.length && disabled) { continue; }\n\t\tresult.push({ ...data, children, disabled });\n\t}\n\treturn result;\n\n}\n/**\n * \n * @param {DataSource.Option[]} list \n * @param {(item: Record<string, any>) => boolean} filter \n */\nexport function filterByFn(list, filter) {\n\t/** @type {DataSource.Option[]} */\n\tconst result = [];\n\tfor (const data of list) {\n\t\tconst children = filterByFn(data.children, filter);\n\t\tconst disabled = !data.data || !filter(data.data);\n\t\tif (!children.length && disabled) { continue; }\n\t\tresult.push({ ...data, children, disabled });\n\t}\n\treturn result;\n\n}\n","/** @import { Field } from '@yongdall/types' */\n/** @import { DataSource } from './index.mjs' */\nimport { Pattern } from '@yongdall/common';\nimport { createComputed } from '../data/index.mts';\n\n/**\n * \n * @param {{get(): Record<string, any>[]}} list \n * @param {Field.Source} options\n */\nexport function build(list, {\n\n\tid,\n\tlabel,\n\tvalue,\n\tparent,\n\tchildren,\n\tsequence,\n\tdisabled,\n} = {}) {\n\tconst idPattern = id || '{id}';\n\tconst valuePattern = value || '{value}';\n\tconst labelPattern = label || '{label}';\n\tconst disabledKey = disabled;\n\tif (parent) {\n\t\tconst parentPattern = parent.includes('{') ? parent : `{${parent}}`;\n\t\treturn createComputed(() => {\n\t\t\t/** @type {DataSource.Option[]} */\n\t\t\tconst data = list.get().map(data => {\n\t\t\t\tconst id = typeof data === 'object' && data ? Pattern.generate(idPattern, data) : data;\n\t\t\t\tconst value = typeof data === 'object' && data ? Pattern.generate(valuePattern, data) : data;\n\t\t\t\tconst label = String(typeof data === 'object' && data && Pattern.generate(labelPattern, data) || value);\n\t\t\t\tconst disabled = Boolean(typeof data === 'object' && disabledKey && data?.[disabledKey]);\n\t\t\t\tconst parentId = typeof data === 'object' && data ? Pattern.generate(parentPattern, data) : '';\n\t\t\t\treturn { id, value, label, data, parentId, disabled, children: [] };\n\t\t\t});\n\t\t\tconst values = new Set(data.map(v => String(v.value)));\n\t\t\tconst groups = Object.groupBy(data, d => d.parentId ?? '');\n\t\t\tconst rootKeys = Object.keys(groups).filter(v => !values.has(v));\n\t\t\tconst root = rootKeys.flatMap(v => groups[v] || []);\n\t\t\tfor (const key of rootKeys) {\n\t\t\t\tdelete groups[key];\n\t\t\t}\n\t\t\tconst queue = [...root];\n\t\t\tfor (let item; item = queue.shift();) {\n\t\t\t\tconst children = groups[item.id];\n\t\t\t\tdelete groups[item.id];\n\t\t\t\tif (!children?.length) { continue; }\n\t\t\t\titem.children = children;\n\t\t\t\tfor (const c of children) {\n\t\t\t\t\tqueue.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let keys = Object.keys(groups); keys.length; keys = Object.keys(groups)) {\n\t\t\t\tconst key = keys[0];\n\t\t\t\tconst children = groups[key];\n\t\t\t\tdelete groups[key];\n\t\t\t\tif (!children?.length) { continue; }\n\t\t\t\tfor (const c of children) {\n\t\t\t\t\troot.push(c);\n\t\t\t\t\tqueue.push(c);\n\t\t\t\t}\n\t\t\t\tfor (let item; item = queue.shift();) {\n\t\t\t\t\tconst children = groups[item.id];\n\t\t\t\t\tdelete groups[item.id];\n\t\t\t\t\tif (!children?.length) { continue; }\n\t\t\t\t\titem.children = children;\n\t\t\t\t\tfor (const c of children) {\n\t\t\t\t\t\tqueue.push(c);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TODO: 排序\n\t\t\treturn root;\n\n\n\t\t});\n\t}\n\tconst childrenKey = children;\n\t/**\n\t * \n\t * @param {*[]} data \n\t * @returns {DataSource.Option[]}\n\t */\n\tfunction buildItems(data) {\n\t\tconst result = data.map(data => {\n\t\t\tif (typeof data !== 'object' || !data) {\n\t\t\t\treturn { id: data, value: data, label: String(data), data, children: [] };\n\t\t\t}\n\t\t\tconst id = Pattern.generate(idPattern, data);\n\t\t\tconst value = Pattern.generate(valuePattern, data);\n\t\t\tconst label = String(Pattern.generate(labelPattern, data) || value);\n\t\t\tconst disabled = Boolean(disabledKey && data[disabledKey]);\n\t\t\tif (!childrenKey) {\n\t\t\t\treturn { id, value, label, data, disabled, children: [] };\n\t\t\t}\n\t\t\tconst children = data[childrenKey];\n\t\t\treturn {\n\t\t\t\tid, value, label, data, disabled, children: buildItems(children)\n\t\t\t};\n\t\t});\n\t\t// TODO: 排序\n\t\treturn result;\n\t}\n\treturn createComputed(() => buildItems(list.get()));\n\n}\n","import { allHooks } from './allHooks.mts';\nimport { createStates } from './utils/state.mjs';\nimport { createComputed } from './data/index.mts';\n\n\n\nconst enumerations = createStates((/** @type {string} */name) => {\n\treturn createComputed(() => {\n\t\t/** @type {Record<string, any>[]} */\n\t\tconst list = [];\n\t\tfor (const [plugin, value] of allHooks.get('enumerations').get(name)) {\n\t\t\tfor (const val of typeof value === 'function' ? value() : [value]) {\n\t\t\t\tlist.push({...val, plugin});\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t});\n}, name => name);\n/**\n * \n * @param {string} name \n * @returns {Record<string, any>[]}\n */\nexport function getEnumeration(name) {\n\treturn enumerations(name).get();\n}\n","import { enumerationsService, modelService } from '../services/index.mjs';\nimport { getEnumeration } from '../enumerations.mjs';\nimport { createStates } from '../utils/state.mjs';\nimport { createComputed } from '../data/index.mts';\n\n\nexport const loadValues = createStates((/** @type {string} */type, /** @type {string} */name) => {\n\tif (!name) { return createComputed(() => /** @type {Record<string, any>[]} */([])); }\n\tif (type === 'model') {\n\t\tconst s = modelService(name);\n\t\treturn createComputed(() => s.getOptions());\n\t}\n\tif (type === 'serverEnumeration') {\n\t\tconst s = enumerationsService(name);\n\t\treturn createComputed(() => s.get());\n\t}\n\tif (type === 'webEnumeration') {\n\t\treturn createComputed(() => getEnumeration(name));\n\t}\n\tif (type === 'enumeration') {\n\t\tconst s = enumerationsService(name);\n\t\tconst serverEnumeration = createComputed(() => s.get());\n\t\tconst webEnumeration = createComputed(() => getEnumeration(name));\n\t\treturn createComputed(() => [\n\t\t\t...serverEnumeration.get(),\n\t\t\t...webEnumeration.get(),\n\t\t]);\n\t}\n\treturn createComputed(() => /** @type {Record<string, any>[]} */([]));\n}, (type, name) => name ? [type, name].join('\\n') : '');\n","/** @import { State } from '../data/index.mts' */\nimport { createComputed } from '../data/index.mts';\n\n/**\n * \n * @param {*} values \n * @returns {State<Record<string, any>[]>}\n */\nexport function loadArray(values) {\n\tif (!Array.isArray(values)) {\n\t\treturn createComputed(() => /** @type {Record<string, any>[]} */([]));\n\t}\n\treturn createComputed(() => values);\n}\n","/** @import { State } from '../data/index.mts' */\nimport { createComputed } from '../data/index.mts';\n/**\n * \n * @param {State<Record<string, any>[]>} data \n * @param {*} parent \n * @param {*} children \n */\nexport function flat(data, parent, children) {\n\tif (parent || !children) { return data; }\n\treturn createComputed(() => {\n\t\tconst childrenKey = children;\n\t\t/** @param {*[]} list @returns {Iterable<Record<string, any>>} */\n\t\tfunction* buildItems(list) {\n\t\t\tif (!Array.isArray(list)) { return; }\n\t\t\tfor (const data of list) {\n\t\t\t\tif (typeof data !== 'object' || !data) {\n\t\t\t\t\tyield data;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (childrenKey) { yield* buildItems(data[childrenKey]); };\n\t\t\t\tyield data;\n\t\t\t}\n\t\t}\n\t\treturn [...buildItems(data.get())];\n\t});\n\n}\n","/** @import { Store } from '@neeloong/form' */\n/** @import { Field } from '@yongdall/types' */\n/** @import { State } from '../data/index.mts' */\nimport { Search } from '@yongdall/common';\nimport { ArrayStore, createState, modelService } from '@yongdall/web';\n\nimport { createComputed, EnvState, GlobalState } from '../data/index.mts';\nimport { createExec } from './createExec.mjs';\nimport { filterByFn, filterByWhere } from './filterList.mjs';\nimport { build } from './build.mjs';\nimport { loadValues } from './loadValues.mjs';\nimport { loadArray } from './loadArray.mjs';\nimport { flat } from './flat.mjs';\n\n\n/**\n * @typedef {object} DataSource.Option\n * @property {string | number} id\n * @property {string | number} value\n * @property {string} label\n * @property {any} data\n * @property {string | number} [parentId]\n * @property {boolean} [disabled]\n * @property {DataSource.Option[]} children\n */\n/**\n * @typedef {object} DataSource\n * \n * @property {string?} [id] id字段(或模式)\n * @property {string?} [label] 标签字段(或模式)\n * @property {string?} [value] 值字段(或模式)\n * @property {string?} [parent] 父节点字段(或模式)\n * \n * @property {string?} [children] 子列表\n * @property {string?} [sequence] 序列字段\n * @property {string?} [disabled] 禁用字段\n * \n * \n * @property {Field.Show[]?} [fields] 显示字段\n * @property {{ field: string; label?: string; operator: string; }[]?} [queryFilters] 快速过滤字段\n * \n * \n * \n * @property {any} configurator 字段配置信息\n * @property {Object.<string, string>} labels\n * @property {DataSource.Option[]} options\n * @property {(DataSource.Option & { level: number; })[]} levelTree\n * @property {Record<string, any>} map\n * @property {string?} [model]\n * @property {ReturnType<typeof modelService>?} [service] \n * @property {(Search.Match | Search.Children)[]} where\n * @property {(Search.Match | Search.Children | Search.Or)[]} orWhere\n * @property {[field: string, desc?: boolean | undefined][]} sort\n * @property {number} limit\n */\n/**\n * \n * @param {string?} [id] \n */\nfunction toPattern(id) {\n\tif (!id || typeof id !== 'string') { return null; }\n\treturn id.includes('{') ? id : `{${id}}`;\n\n}\n/**\n * \n * @param {Field.Source} source\n */\nfunction setPattern(source) {\n\tconst {\n\t\tid, value, label\n\t} = Array.isArray(source) ? {} : source || {};\n\tconst isModel = source.type === 'model' && source.name;\n\treturn {\n\t\t...source,\n\t\tid: toPattern(isModel ? id : id || 'id'),\n\t\tvalue: toPattern(isModel ? value : value || 'value'),\n\t\tlabel: toPattern(isModel ? label : label || 'label'),\n\t};\n}\n/**\n * \n * @param {any[] | Field.Source | null} [source] \n * @param {string | null} [model] \n * @returns {Field.Source}\n */\nfunction init(source, model) {\n\tif (Array.isArray(source)) { return setPattern({ values: source }); };\n\tif (!source) { return model ? { type: 'model', name: model } : {}; }\n\tif (source.type && source.name) { return setPattern(source); }\n\tif ((source.type === 'model' || !source.type) && !source.name && model) { return setPattern({ ...source, type: 'model', name: model }); }\n\tif (Array.isArray(source.values)) { return setPattern(source); }\n\tif (!source.type && !source.name && model) { return setPattern({ ...source, name: model }); }\n\treturn setPattern(source);\n}\n\n/**\n * \n * @param {State<DataSource.Option[]>} options \n */\nfunction toLabels(options) {\n\treturn createComputed(() => {\n\t\tconst queue = [...options.get()];\n\t\t/** @type {Record<string, string>} */\n\t\tconst labels = Object.create(null);\n\t\tfor (let item; item = queue.shift();) {\n\t\t\tconst children = item.children;\n\t\t\tlabels[item.value] = item.label;\n\t\t\tfor (const c of children) {\n\t\t\t\tqueue.push(c);\n\t\t\t}\n\t\t}\n\t\treturn labels;\n\t});\n}\n\n/**\n * \n * @param {Store?} [store] \n * @returns {Store?}\n */\nfunction findParentState(store) {\n\tlet state = store?.parent;\n\tif (!state) { return null; }\n\tif (state instanceof ArrayStore) { state = state.parent; }\n\tif (!state) { return null; }\n\treturn state;\n}\n\n/**\n * \n * @param {State<DataSource.Option[]>} options \n */\nfunction toValueMap(options) {\n\treturn createComputed(() => {\n\t\tconst queue = [...options.get()];\n\t\t/** @type {Record<string, any>} */\n\t\tconst values = Object.create(null);\n\t\tfor (let item; item = queue.shift();) {\n\t\t\tconst children = item.children;\n\t\t\tvalues[item.value] = item.data;\n\t\t\tfor (const c of children) {\n\t\t\t\tqueue.push(c);\n\t\t\t}\n\t\t}\n\t\treturn values;\n\t});\n}\n\n/**\n * \n * @param {State<DataSource.Option[]>} options \n */\nfunction toLevelTree(options) {\n\treturn createComputed(() => {\n\t\t/** @type {[level: number, option: DataSource.Option][]} */\n\t\tconst queue = options.get().map(v => [0, v]);\n\t\t/** @type {(DataSource.Option & {level: number})[]} */\n\t\tconst list = [];\n\t\tfor (let item; item = queue.shift();) {\n\t\t\tconst [level, option] = item;\n\t\t\tlist.push({ ...option, level });\n\t\t\tfor (const c of option.children) {\n\t\t\t\tqueue.push([level + 1, c]);\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t});\n}\n/**\n * \n * @param {Store | null} store \n * @param {string} placeholder \n */\nfunction getModelPlaceholder(store, placeholder) {\n\tswitch (placeholder[0]) {\n\t\tcase ':': return GlobalState[placeholder.slice(1)];\n\t\tcase '@': return EnvState[placeholder.slice(1)];\n\t}\n\tif (!store) { return null; }\n\tlet currentState = store;\n\tlet k = 0;\n\twhile (placeholder[k] === '?') {\n\t\tk++;\n\t\tlet parent = currentState.parent;\n\t\tif (!parent) { break; }\n\t\tif (parent instanceof ArrayStore) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t\tif (!parent) { break; }\n\t\tcurrentState = parent;\n\t}\n\twhile (placeholder[k] === '?') { k++; }\n\tconst name = placeholder.slice(k);\n\tconst field = currentState.child(name);\n\tif (!field) { return null; }\n\treturn field.value;\n\n}\n/**\n * \n * @param {any[] | Field.Source | null} [source] \n * @param {string | null} [model] \n * @param {Store | null} [store] \n * @param {((store?: Store?) => Iterable<Record<string, any>>)?} [sourceFn]\n * @param {((item: Record<string, any>, store?: Store?) => boolean)?} [filter]\n * @returns {DataSource}\n */\nexport default function buildDataSource(source, model, store, sourceFn, filter) {\n\tconst sourceDefine = init(source, model);\n\tconst { type, name, parent, children, id, label, value, sequence, disabled, fields, queryFilters } = sourceDefine;\n\tconst configuratorKey = sourceDefine.configurator || 'configurator';\n\n\tconst data = typeof sourceFn === 'function' ? createComputed(() => [...sourceFn(store)])\n\t\t: type ? loadValues(type, name || '') : loadArray(sourceDefine.values);\n\tconst list = build(data, sourceDefine);\n\tconst labels = toLabels(list);\n\n\tconst searchText = sourceDefine.search;\n\tconst search = searchText && typeof searchText === 'string' ? Search.parse(searchText) : null;\n\tconst where = search?.where?.length ? search.where : null;\n\tconst orWhere = search?.orWhere?.length ? search.orWhere : null;\n\tconst limit = search?.limit || 100;\n\tconst sort = search?.sort || [];\n\tconst baseStore = findParentState(store) || null;\n\tconst getPlaceholder = getModelPlaceholder.bind(null, baseStore);\n\t/** @typedef {[(Search.Match | Search.Children)[], (Search.Match | Search.Children | Search.Or)[]]} SearchState */\n\tconst searchState = where || orWhere\n\t\t? createComputed(() => /** @type {SearchState} */([\n\t\t\tSearch.fill(where, getPlaceholder),\n\t\t\tSearch.fill(orWhere, getPlaceholder),\n\t\t])) : null;\n\n\tconst execFn = createComputed(() => createExec(null, type, name));\n\tconst listFiltered = typeof filter === 'function' ? createComputed(() => {\n\t\treturn filterByFn(list.get(), it => filter(it, store));\n\t}) : list;\n\tconst options = searchState ? createComputed(() => {\n\t\tconst [where, orWhere] = searchState.get();\n\t\treturn filterByWhere(listFiltered.get(), execFn.get(), where, orWhere);\n\t}) : listFiltered;\n\tconst levelTree = toLevelTree(options);\n\tconst valueMap = toValueMap(options);\n\n\tconst flatted = flat(data, parent, children);\n\tconst flattedFiltered = typeof filter === 'function' ? createComputed(() => {\n\t\treturn flatted.get().filter(d => d && filter(d, store));\n\t}) : flatted;\n\tconst configurator = searchState ? createComputed(() => {\n\t\tconst [where, orWhere] = searchState.get();\n\t\tfor (const data of flattedFiltered.get()) {\n\t\t\tif (!data) { continue; }\n\t\t\tconst disabled = !(Search.exec(data, execFn.get(), where, orWhere) ?? true);\n\t\t\tif (disabled) { continue; }\n\t\t\treturn data?.[configuratorKey];\n\t\t}\n\t\treturn null;\n\t}) : createComputed(() => flattedFiltered.get()[0]?.[configuratorKey]);\n\n\tconst service = type === 'model' && model ? modelService(model) : null;\n\treturn {\n\t\tparent, children, id, label, value, sequence, disabled, fields, queryFilters,\n\t\tget where() { return searchState ? searchState.get()[0] : []; },\n\t\tget orWhere() { return searchState ? searchState.get()[1] : []; },\n\t\tget limit() { return limit; },\n\t\tget sort() { return sort; },\n\t\tmodel: type === 'model' && model || '',\n\t\tservice,\n\t\tget labels() { return labels.get(); },\n\t\tget options() { return options.get(); },\n\t\tget configurator() { return configurator.get(); },\n\t\tget levelTree() { return levelTree.get(); },\n\t\tget map() { return valueMap.get(); },\n\t};\n}\n","/** @import { Store, StoreLayout } from '@neeloong/form' */\n/** @import { Field } from '@yongdall/types' */\n/** @import { FieldComponent, FieldStyle, FieldComponentEvent } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\nimport { ArrayStore, ObjectStore } from '@neeloong/form';\nimport { createState } from '../data/index.mts';\nimport { getField } from './field.mjs';\nimport buildDataSource from '../DataSource/index.mjs';\n\n/**\n *\n * @param {Store} store\n * @param {any} [renderer] \n * @returns {FieldComponent?}\n */\nfunction getFieldComponent(store, renderer) {\n\tif (typeof renderer === 'function') { return renderer; }\n\tlet storeComponent = store.component;\n\tif (typeof storeComponent === 'function') { return storeComponent; }\n\tconst meta = store.meta;\n\tconst component = getField({\n\t\ttype: store.type,\n\t\tarray: store instanceof ArrayStore,\n\t\trenderer: [renderer, meta?.renderer, store.component].flat(),\n\t}, true);\n\tif (component) { return component; }\n\tif (store instanceof ObjectStore) { return null; }\n\tif (store instanceof ArrayStore && typeof store.type === 'object') {\n\t\treturn null;\n\t}\n\treturn () => document.createElement('div');\n\n}\n\n/**\n * \n * @param {Store} store \n * @param {Field.Bind?} [bind] \n * @returns {((data: any) => void) | null}\n */\nexport function createBind(store, bind) {\n\tif (!bind || typeof bind !== 'object') { return null; }\n\tconst parent = store.parent;\n\tif (!(parent instanceof ObjectStore)) { return null; }\n\tconst list = Array.isArray(bind) ? bind\n\t\t: Object.entries(bind).map(([field, source]) => {\n\t\t\treturn typeof source === 'string' ? { source, field } : { ...source, field };\n\t\t});\n\tif (!list.length) { return null; }\n\n\treturn data => {\n\t\tfor (const { field, source, clear, fixed, reset, set } of list) {\n\t\t\tconst current = parent.child(field);\n\t\t\tif (!current) { continue; }\n\t\t\tif (!source || typeof source !== 'string') { continue; }\n\t\t\tif (!data) {\n\t\t\t\tif (clear) { current.value = reset; }\n\t\t\t} else if (fixed){\n\t\t\t\tcurrent.value = set;\n\t\t\t} else if (source && typeof source === 'string') {\n\t\t\t\tcurrent.value = data[source];\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n *\n * @param {Store<any, Field?, any>} store\n * @param {FieldStyle} style \n * @param {any} [renderer] \n * @param {StoreLayout.Options?} [options]\n * @returns {Element?}\n */\nexport default function createStoreField(store, style, renderer, options) {\n\tconst component = getFieldComponent(store, renderer);\n\tif (!component) { return null; }\n\tconst { relate } = options || {};\n\t/** @type {FieldScriptConfiguration} */\n\tconst field = store.meta || { type: '' };\n\tlet destroyedState = createState(false);\n\tlet destroyed = false;\n\t/** @type {Map<string, Set<any>>} */\n\tconst events = new Map();\n\tconst bind = createBind(store, field?.bind);\n\n\n\t/**\n\t * @param {string} k \n\t * @param {any} p \n\t */\n\tfunction emitHandler(k, p) {\n\t\t// @ts-ignore\n\t\tstore.emit(k, p);\n\t}\n\tconst stopEffects = new Set();\n\tconst ac = new AbortController();\n\tconst signal = ac.signal;\n\tconst editable = options?.editable || false;\n\tconst nullable = Boolean(field.nullable);\n\tconst source = buildDataSource(field.source, field.model, store, field.script?.source, field.script?.filter);\n\n\tconst root = component({\n\t\tfield, style: { ...style }, store,\n\t\tget editable() { return editable; },\n\t\tget name() { return store.index; },\n\t\tget current() { return (store.parent || store.root).value; },\n\t\tget required() { return store.required; },\n\t\tget hidden() { return store.hidden; },\n\t\tget readonly() { return store.readonly; },\n\n\t\tget label() { return store.label || ''; },\n\t\tget placeholder() { return store.placeholder || ''; },\n\t\tget description() { return store.description || ''; },\n\t\tget source() { return source; },\n\t\tsignal,\n\t\tlisten(event, listen) {\n\t\t\tconst fn = listen.bind(this);\n\t\t\tlet set = events.get(event);\n\t\t\tif (!set) {\n\t\t\t\tset = new Set();\n\t\t\t\tevents.set(event, set);\n\t\t\t}\n\t\t\tset.add(fn);\n\t\t\treturn () => { set?.delete(fn); };\n\t\t},\n\t\temit(event, e) { emitHandler(event, e); },\n\t\tget value() { return store.value; },\n\t\tset value(v) {\n\t\t\tif (destroyed) { return; }\n\t\t\tstore.value = v;\n\t\t},\n\t\tget destroyed() { return destroyedState.get(); },\n\t\tget nullable() { return nullable; },\n\t\tget disabled() { return store.disabled; },\n\t\tget clearable() { return store.clearable; },\n\t\tbind,\n\t});\n\t/**\n\t * @template {keyof FieldComponentEvent} K\n\t * @param {K} k \n\t * @param {Parameters<FieldComponentEvent[K]>} p \n\t */\n\tfunction emit(k, ...p) {\n\t\tfor (const fn of [...events.get(k) || []]) {\n\t\t\tfn(...p);\n\t\t}\n\t}\n\tconst related = relate?.(store, {\n\t\tfocus() { emit('focus'); },\n\t\tscrollIntoView() { emit('scrollIntoView'); },\n\t\troot,\n\t});\n\toptions?.signal?.addEventListener('abort', () => {\n\t\tdestroyed = true;\n\t\tdestroyedState.set(true);\n\t\tfor (const stop of stopEffects) { stop(); }\n\t\trelated?.();\n\t}, { once: true });\n\treturn root;\n}\n","export function createNeverAbortedSignal() {\n\treturn new AbortController().signal;\n}\n","import { Application } from '../services/index.mjs';\n\n/**\n * \n * @param {...string} paths \n * @returns \n */\nexport default function toUrl(...paths) {\n\tlet url = '/'\n\tfor (const path of paths) {\n\t\tconst a = url.lastIndexOf('?');\n\t\tif (a >= 0 && url.lastIndexOf('#') < a) {\n\t\t\turl += '#'\n\t\t}\n\t\turl += '/' + path;\n\t}\n\turl = url.split('#').map(s => {\n\t\tconst index = s.indexOf('?');\n\t\tconst path = index >= 0 ? s.slice(0, index) : s;\n\t\tconst search = index >= 0 ? s.slice(index) : '';\n\t\tconst p = path.split('/');\n\t\tconst first = p.shift() || '';\n\t\t/** @type {string[]} */\n\t\tconst list = [];\n\t\tfor (const k of p) {\n\t\t\tif (!k) { continue; }\n\t\t\tif (k === '.') { continue; }\n\t\t\tif (k === '..'){\n\t\t\t\tlist.pop();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlist.push(k);\n\t\t}\n\t\tlist.unshift(first);\n\t\treturn `${list.join('/')}${search}`;\n\t}).join('#');\n\tconst root = Application.path;\n\tif (url.startsWith(root)) { return url }\n\tconst k1 = url.indexOf('?');\n\tconst k2 = url.indexOf('#');\n\tconst k = k1 < 0 ? k2 : k2 < 0 ? k1 : Math.min(k1,k2);\n\tconst path = k < 0 ? url : url.slice(0, k);\n\tif (path.length !== root.length - 1) { return url}\n\tif (!root.startsWith(path)) { return url; }\n\tif (k < 0) { return root};\n\treturn root + url.slice(k);\n}\n","import { pluginIdRegex } from '@yongdall/common';\n\n/**\n * \n * @param {string} n \n * @returns {boolean}\n */\nexport default function isPluginId(n) {\n\tif (!n || typeof n !== 'string') { return false}\n\treturn pluginIdRegex.test(n);\n}\n","\n/**\n * \n * @overload\n * @param {AbortSignal | null | undefined} signal \n * @param {true} useReject \n * @returns {Promise<never>}\n */\n\n/**\n * \n * @overload\n * @param {AbortSignal?} [signal] \n * @param {boolean?} [useReject] \n * @returns {Promise<void | never>}\n */\n\n/**\n * \n * @param {AbortSignal?} [signal] \n * @param {boolean?} [useReject] \n * @returns {Promise<void | never>}\n */\nexport default function waitAbortSignal(signal, useReject) {\n\t/** @type {PromiseWithResolvers<void | never>} */\n\tconst { promise, resolve, reject } = Promise.withResolvers();\n\tif (!(signal instanceof AbortSignal)) { return promise; }\n\tif (signal.aborted) {\n\t\tif (useReject) {\n\t\t\treject(signal.reason);\n\t\t} else {\n\t\t\tresolve();\n\t\t}\n\t} else {\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tif (useReject) {\n\t\t\t\treject(signal.reason);\n\t\t\t} else {\n\t\t\t\tresolve();\n\t\t\t}\n\t\t}, { once: true });\n\t}\n\treturn promise;\n}\n","\nexport default async function image2data(\n\timage: HTMLOrSVGImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas | VideoFrame | ImageData,\n): Promise<ImageData | null> {\n\tif (image instanceof ImageData) {\n\t\tif (!image.width || !image.height) { return null; }\n\t\treturn image;\n\t}\n\tif (image instanceof HTMLCanvasElement || image instanceof OffscreenCanvas) {\n\t\tif (!image.width || !image.height) { return null; }\n\t\tconst ctx = image.getContext('2d');\n\t\tif (!ctx) { return null; }\n\t\treturn ctx.getImageData(0, 0, image.width, image.height);\n\t}\n\n\tlet width = 0;\n\tlet height = 0;\n\tif (image instanceof HTMLImageElement) {\n\t\tawait image.decode();\n\t\twidth = image.naturalWidth\n\t\theight = image.naturalHeight\n\t} else if (image instanceof SVGImageElement) {\n\t\twidth = image.clientWidth\n\t\theight = image.clientWidth\n\t} else if (image instanceof HTMLVideoElement) {\n\t\twidth = image.videoWidth;\n\t\theight = image.videoHeight;\n\t} else if (image instanceof ImageBitmap) {\n\t\twidth = image.width;\n\t\theight = image.height;\n\t} else if (image instanceof VideoFrame) {\n\t\twidth = image.displayWidth;\n\t\theight = image.displayHeight;\n\t}\n\tif (!width || !height) { return null; }\n\tconst canvas = new OffscreenCanvas(width, height);\n\tconst ctx = canvas.getContext('2d');\n\tif (!ctx) { return null; }\n\tctx.drawImage(image, 0, 0, width, height);\n\treturn ctx.getImageData(0, 0, width, height);\n}\n","/** @type {(0|1)[][]} */\nconst bars = [\n\t[1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0],\n\t[1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0],\n\t[1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0],\n\t[1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0],\n\t[1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0],\n\t[1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0],\n\t[1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0],\n\t[1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0],\n\t[1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0],\n\t[1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0],\n\t[1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0],\n\t[1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0],\n\t[1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0],\n\t[1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0],\n\t[1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0],\n\t[1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0],\n\t[1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0],\n\t[1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0],\n\t[1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0],\n\t[1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0],\n\t[1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0],\n\t[1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0],\n\t[1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0],\n\t[1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0],\n\t[1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0],\n\t[1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0],\n\t[1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0],\n\t[1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0],\n\t[1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0],\n\t[1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0],\n\t[1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0],\n\t[1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0],\n\t[1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0],\n\t[1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0],\n\t[1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0],\n\t[1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0],\n\t[1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0],\n\t[1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0],\n\t[1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0],\n\t[1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0],\n\t[1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0],\n\t[1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0],\n\t[1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n\t[1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0],\n\t[1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0],\n\t[1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0],\n\t[1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0],\n\t[1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0],\n\t[1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0],\n\t[1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0],\n\t[1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0],\n\t[1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0],\n\t[1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0],\n\t[1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0],\n\t[1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0],\n\t[1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0],\n\t[1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0],\n\t[1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0],\n\t[1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0],\n\t[1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0],\n\t[1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0],\n\t[1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0],\n\t[1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0],\n\t[1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0],\n\t[1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0],\n\t[1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0],\n\t[1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0],\n\t[1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0],\n\t[1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0],\n\t[1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0],\n\t[1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0],\n\t[1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0],\n\t[1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0],\n\t[1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0],\n\t[1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0],\n\t[1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0],\n\t[1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1]\n];\n/**\n * @template T\n * @param {T[]} array \n * @param {T} val \n * @param {number} start \n * @param {number} end \n */\nfunction fillArray(array, val, start, end) {\n\tfor (let i = start; i < end; i++) {\n\t\tarray[i] = val;\n\t}\n}\n/**\n * @template T\n * @param {T[]} array \n * @param {(value: T) => unknown} predicate \n * @param {number} fromIndex \n */\nfunction findIndex(array, predicate, fromIndex) {\n\tfor (let i = fromIndex; i < array.length; i++) {\n\t\tif (predicate(array[i])) { return i; }\n\t}\n\treturn -1;\n\n}\nlet char0 = '0'.charCodeAt(0) || 0;\nlet char9 = '9'.charCodeAt(0) || 0;\n/**\n * \n * @param {string} text \n */\nexport function encode(text) {\n\tconst chars = [...text].map(v => typeof v === 'number' ? v : v.charCodeAt(0) || 0);\n\t/** @type {(1 | 2 | 3 | 0)[]} */\n\tconst modes = chars.map(v => {\n\t\tif (v < 32) { return 1; }\n\t\tif (v > 96) { return 2; }\n\t\treturn 0;\n\t});\n\n\tfor (let end = 0; end >= 0;) {\n\t\tlet start = findIndex(chars, c => c >= char0 && c <= char9, end);\n\t\tif (start < 0) { break; }\n\t\tend = findIndex(chars, c => c < char0 || c > char9, start + 1);\n\t\tlet count = (end < 0 ? chars.length : end) - start;\n\t\tif (count < 4) { continue; }\n\t\tif (count % 2) {\n\t\t\tcount -= 1;\n\t\t\tif (start && end < 0) { start += 1; }\n\t\t}\n\t\tfillArray(modes, 3, start, start + count);\n\t}\n\n\tfor (let end = 0; end >= 0;) {\n\t\tconst start = modes.indexOf(0, end);\n\t\tif (start < 0) { break; }\n\t\tend = findIndex(modes, Boolean, start + 1);\n\n\t\tconst mode1 = modes[start - 1] || 0;\n\t\tconst mode2 = modes[end] || 0;\n\t\tconst endModes = [mode1, mode2];\n\t\tconst mode = endModes.includes(1) && !endModes.includes(2) ? 1 : 2;\n\t\tfillArray(modes, mode, start, end < 0 ? chars.length : end);\n\t}\n\tconst codes = [];\n\t/** @type {1 | 2 | 3 | 0} */\n\tlet mode = 0;\n\tfor (let i = 0; i < chars.length; i++) {\n\t\tlet currentMode = modes[i] || 2;\n\t\tconst nextMode = modes[i + 1] || 2;\n\t\tlet char = chars[i];\n\t\tif (currentMode === 3) {\n\t\t\tif (nextMode !== 3) {\n\t\t\t\tcurrentMode = nextMode;\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t\tchar = ((char - char0) || 0) * 10 + ((chars[i] - char0) || 0);\n\n\t\t\t}\n\t\t}\n\t\tif (currentMode === 2) {\n\t\t\tchar -= 32;\n\t\t} else if (currentMode === 1) {\n\t\t\tchar = (char + 64) % 96;\n\t\t}\n\t\tif (mode !== currentMode) {\n\n\t\t\tif (mode === nextMode && mode !== 3 && currentMode !== 3) {\n\t\t\t\tcodes.push(98);\n\t\t\t} else {\n\t\t\t\tcodes.push(mode ? 102 - currentMode : 102 + currentMode);\n\t\t\t\tmode = currentMode;\n\t\t\t}\n\t\t}\n\t\tcodes.push(char);\n\t}\n\tcodes.push(codes.reduce((s, v, i) => (s + v * i), codes[0]) % 103);\n\tcodes.push(106);\n\treturn codes.flatMap(v => bars[v] || []);\n\n}\n","import image2data from './image2data.mts';\n\nexport function stop(stream: MediaStream) {\n\tstream.getTracks().forEach(track => track.stop());\n}\n\nexport async function createVideoStream(signal?: AbortSignal) {\n\tif (signal?.aborted) { throw signal.reason; }\n\tif (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n\t\tthrow new Error('getUserMedia is not supported by your browser.');\n\t}\n\tconst stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } });\n\n\tif (signal?.aborted) {\n\t\tstop(stream)\n\t\tthrow signal.reason;\n\t}\n\tsignal?.addEventListener('abort', () => { stop(stream); }, { once: true });\n\treturn stream;\n}\n\nfunction wait(ms = 1000) {\n\treturn new Promise(r => setTimeout(r, ms));\n}\n\n\n\nlet shown = false;\nexport function createVideoDialog(signal?: AbortSignal) {\n\tconst dialog = document.createElement('dialog');\n\tconst form = dialog.appendChild(document.createElement('form'));\n\tform.style.display = 'inline';\n\n\tdialog.style.padding = '0';\n\tdialog.style.border = '0';\n\tdialog.style.margin = '0';\n\tdialog.style.padding = '0';\n\tdialog.style.background = '#000';\n\tdialog.style.maxInlineSize = 'unset';\n\tdialog.style.maxBlockSize = 'unset';\n\tdialog.style.inlineSize = '100%';\n\tdialog.style.blockSize = '100%';\n\tdialog.style.overflow = 'hidden';\n\n\tform.method = 'dialog';\n\tconst video = form.appendChild(document.createElement('video'));\n\tvideo.id = 'video';\n\tvideo.playsInline = true;\n\tvideo.style.inlineSize = '100%';\n\tvideo.style.blockSize = '100%';\n\n\tconst button = form.appendChild(document.createElement('button'));\n\tbutton.innerText = '取消'\n\tbutton.type = 'submit';\n\n\tbutton.style.position = 'absolute';\n\tbutton.style.insetBlockEnd = '20px';\n\tbutton.style.insetInline = '0';\n\tbutton.style.marginInline = 'auto';\n\tbutton.style.inlineSize = 'min-content';\n\n\treturn {\n\t\tasync *[Symbol.asyncIterator]() {\n\t\t\tif (shown) { throw new Error('视频窗口尚未关闭') }\n\t\t\tshown = true\n\n\n\t\t\tsignal?.throwIfAborted();\n\n\t\t\tconst ac = new AbortController();\n\t\t\tdialog.addEventListener('close', () => ac.abort(), { once: true });\n\t\t\tdocument.body.appendChild(dialog);\n\t\t\tdialog.showModal();\n\t\t\ttry {\n\t\t\t\tconst currentSignal = signal ? AbortSignal.any([ac.signal, signal]) : ac.signal;\n\t\t\t\tif (currentSignal.aborted) { return }\n\t\t\t\ttry {\n\t\t\t\t\tconst stream = await createVideoStream(ac.signal);\n\t\t\t\t\tvideo.srcObject = stream\n\t\t\t\t} catch (e) {\n\t\t\t\t\talert('用户未授权或设备无摄像头')\n\t\t\t\t\tthrow e\n\t\t\t\t}\n\t\t\t\tif (currentSignal.aborted) { return }\n\t\t\t\tvideo.play();\n\t\t\t\tawait wait();\n\t\t\t\tif (currentSignal.aborted) { return }\n\t\t\t\tfor (; ;) {\n\t\t\t\t\tconst image = await image2data(video);\n\t\t\t\t\tconst p = wait();\n\t\t\t\t\tif (image) { yield image }\n\t\t\t\t\tif (currentSignal.aborted) { return }\n\t\t\t\t\tawait p\n\t\t\t\t\tif (currentSignal.aborted) { return }\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tvideo.srcObject = null\n\t\t\t\tshown = false;\n\t\t\t\tac.abort();\n\t\t\t\tdialog.remove();\n\t\t\t}\n\t\t}\n\t}\n}\n","import * as Media from './Media.mts';\n\nexport async function encode(text: string, level: 'L' | 'M' | 'Q' | 'H' = 'M') {\n\tconst qrcode: typeof import('qrcode-generator') =\n\t\tawait import('qrcode-generator')\n\t\t\t// @ts-ignore\n\t\t\t.then(v => v.qrcode);\n\tconst qr = qrcode(0, level);\n\tqr.addData(text);\n\tqr.make();\n\tconst count = qr.getModuleCount();\n\n\tconst list = [];\n\tfor (let row = 0; row < count; row++) {\n\t\tfor (let col = 0; col < count; col++) {\n\t\t\tlist.push(qr.isDark(row, col) ? 1 : 0)\n\t\t}\n\t}\n\treturn list;\n}\n\nexport async function decode(image: ImageData) {\n\tconst { default: jsQR } = await import('jsqr');\n\tconst code = jsQR(image.data, image.width, image.height);\n\tconst text = code?.data;\n\tif (typeof text === 'string') { return { text }; }\n\treturn null;\n}\n\n\nexport async function scan(signal?: AbortSignal) {\n\tfor await (const image of Media.createVideoDialog(signal)) {\n\t\ttry {\n\t\t\tconst data = await decode(image);\n\t\t\tif (!data) { continue; }\n\t\t\treturn data.text;\n\t\t} catch (error) {\n\t\t\tconsole.error('Barcode detection error:', error);\n\t\t\tthrow new Error('Error detecting barcode. Please try again.');\n\t\t}\n\t}\n}\n","/** @import { IconDefine } from '../typesDefine.mjs' */\n/** @import { State } from '../data/index.mts' */\nimport { allHooks } from '../allHooks.mts';\nimport { createComputed, watch } from '../data/index.mts';\nimport { createNeverAbortedSignal } from '../utils/index.mts';\nconst logoPath = `\nM 0.29739625333333336 0.04334391666666666 M 0.06325983999999997 0.34186114333333334 H 0.08357982999999995 V 0.27435362333333335 L 0.1393469133333333 0.18517144333333335 H 0.1169949233333333 L 0.07500027666666663 0.25606563000000004 H 0.07364560999999996 L 0.03142518666666665 0.18517144333333332 H 0.007944309999999984 L 0.06325983999999997 0.2745794 Z M 0.29739625333333336 0.04334391666666666 M 0.21046684333333332 0.34411892 C 0.24659127 0.34411892 0.26668548233333333 0.32944337333333334 0.26668548233333333 0.28090117333333336 C 0.26668548233333333 0.2323589766666667 0.24659127 0.21768343000000004 0.21046684333333332 0.21768343000000004 C 0.17434241666666667 0.21768343000000004 0.15402242666666668 0.2323589766666667 0.15402242666666668 0.28090117333333336 C 0.15402242666666668 0.32944337333333334 0.17434241666666667 0.34411892 0.21046684333333332 0.34411892 Z M 0.21046684333333332 0.32763715000000004 C 0.18405085666666665 0.32763715000000004 0.17479397333333332 0.31657404666666666 0.17479397333333332 0.28090117333333336 C 0.17479397333333332 0.24545408000000002 0.18314774666666667 0.23393942 0.21046684333333332 0.23393942 C 0.23710860666666667 0.23393942 0.24613971333333332 0.24545408000000002 0.24613971333333332 0.28090117333333336 C 0.24613971333333332 0.3165740466666667 0.2382374966666667 0.32763715000000004 0.21046684333333332 0.32763715000000004 Z M 0.29739625333333336 0.04334391666666666 M 0.3592538966666667 0.21768342999999998 C 0.34435257 0.21768342999999998 0.3274192466666667 0.22152165 0.32019436133333334 0.23732608666666666 V 0.21994120666666667 H 0.30077748233333335 V 0.34186114333333334 H 0.3201943613333333 V 0.2594522966666667 C 0.32674191366666666 0.2380034166666667 0.3418690166666667 0.23506831000000003 0.35722189666666665 0.23506831000000003 C 0.37641300000000005 0.23506831000000003 0.3804769966666667 0.2459056366666667 0.3804769966666667 0.26464518333333337 V 0.34186114333333334 H 0.4001196533333333 V 0.2574202966666667 C 0.4001196533333333 0.2341651966666667 0.39108854666666665 0.21768343000000004 0.3592538966666667 0.21768343000000004 Z M 0.5233938433333333 0.21994120666666667 V 0.24274475 C 0.5186525133333334 0.22829498000000004 0.50849252 0.21768342999999998 0.48388275333333336 0.21768342999999998 C 0.4432427733333333 0.21768342999999998 0.43330855666666673 0.24613141333333333 0.43330855666666673 0.2797722866666667 C 0.43330855666666673 0.31679982333333334 0.4432427733333333 0.3418611433333334 0.48388275333333336 0.3418611433333334 C 0.5073636300000001 0.3418611433333334 0.5182009566666667 0.3335073700000001 0.5233938433333333 0.31905760000000005 V 0.3312495933333333 C 0.5233938433333333 0.35924602333333333 0.5105245166666667 0.37030913 0.4834311966666667 0.37030913 C 0.47281964666666665 0.37030913 0.46288543 0.36940602 0.4536285466666667 0.3675997966666667 V 0.38408158333333337 C 0.4615307633333333 0.3856620166666667 0.47259386999999997 0.38701668333333333 0.48320541999999994 0.38701668333333333 C 0.5245227333333333 0.38701668333333333 0.5428107233333334 0.36692246333333334 0.5428107233333334 0.33328159333333335 V 0.21994120666666667 Z M 0.48659208666666665 0.32560515333333334 C 0.45769254333333337 0.32560515333333334 0.45408010000000004 0.3050593833333333 0.45408010000000004 0.2797722866666667 C 0.45408010000000004 0.25606563 0.45701521 0.23393942 0.48659208666666665 0.23393942 C 0.51616896 0.23393942 0.5240711766666667 0.2517758566666667 0.5240711766666667 0.2797722866666667 C 0.5240711766666667 0.3088976033333333 0.51616896 0.32560515333333334 0.48659208666666665 0.32560515333333334 Z M 0.29739625333333336 0.04334391666666666 M 0.5841279533333333 0.18517144333333332 V 0.34186114333333334 H 0.6292834866666667 C 0.6742132533333334 0.34186114333333334 0.7049190200000001 0.32402471 0.7049190200000001 0.2635162933333333 C 0.7049190200000001 0.19826654999999999 0.6742132533333334 0.1851714433333333 0.6292834866666667 0.1851714433333333 Z M 0.6044479433333334 0.32402471000000005 V 0.20278210333333335 H 0.6288319333333333 C 0.6604408199999999 0.20278210333333335 0.6839216866666666 0.21361943000000003 0.6839216866666666 0.2635162933333334 C 0.6839216866666666 0.31070382666666674 0.6615696866666667 0.32402471000000005 0.6288319333333333 0.32402471000000005 Z M 0.7900370533333333 0.21768342999999998 C 0.78123172 0.21768342999999998 0.7712974866666666 0.21836076000000001 0.7622663866666667 0.21948964999999998 V 0.23664875333333335 C 0.77107172 0.23484252999999997 0.7810059533333333 0.23393942 0.7891339533333334 0.23393942 C 0.8137436866666667 0.23393942 0.8191623533333334 0.24409941666666665 0.8191623533333334 0.25877496333333333 V 0.26893495666666667 H 0.7819090533333334 C 0.75300952 0.26893495666666667 0.7335926199999999 0.27886917666666666 0.7335926199999999 0.30776871666666666 C 0.7335926199999999 0.33102381666666664 0.7464619533333333 0.34411892 0.7755872866666667 0.34411892 C 0.7941010533333333 0.34411892 0.8119374866666667 0.33644248000000004 0.8191623533333333 0.3233473766666667 L 0.8220974866666666 0.34186114333333334 H 0.8385792533333333 V 0.2553883 C 0.8385792533333333 0.23348786666666665 0.8286450200000001 0.21768342999999998 0.7900370533333333 0.21768342999999998 Z M 0.7773934866666666 0.32786293000000005 C 0.7602343866666667 0.32786293000000005 0.7536868533333334 0.32108960000000003 0.7536868533333334 0.30754294000000004 C 0.7536868533333334 0.2885776166666667 0.76316952 0.2845136166666667 0.7832637200000001 0.2845136166666667 H 0.8191623533333334 V 0.30460783 C 0.8128405866666667 0.31905760000000005 0.7979392533333334 0.32786293000000005 0.7773934866666666 0.32786293000000005 Z M 0.9069897533333334 0.34321581 C 0.9124084200000001 0.34321581 0.9162466533333335 0.3427642533333333 0.9198590866666666 0.34186114333333334 V 0.32583092999999996 C 0.9164724200000001 0.32673404 0.9133115200000002 0.3269598166666667 0.9106021866666667 0.3269598166666667 C 0.9026999866666667 0.3269598166666667 0.8993133200000001 0.32470203999999997 0.8993133200000001 0.31228427 V 0.17027012 H 0.8798964533333333 V 0.31725137999999997 C 0.8798964533333333 0.33553936999999995 0.8889275533333334 0.34321580999999995 0.9069897533333334 0.34321580999999995 Z M 0.9715620200000001 0.34321581 C 0.9769806533333334 0.34321581 0.9808188866666668 0.3427642533333333 0.98443132 0.34186114333333334 V 0.32583092999999996 C 0.9810446533333335 0.32673404 0.9778837866666668 0.3269598166666667 0.9751744533333333 0.3269598166666667 C 0.9672722200000001 0.3269598166666667 0.9638855533333334 0.32470203999999997 0.9638855533333334 0.31228427 V 0.17027012 H 0.9444686866666666 V 0.31725137999999997 C 0.9444686866666666 0.33553936999999995 0.9534997866666667 0.34321580999999995 0.9715620200000001 0.34321580999999995 Z M 0.29739625333333336 0.04334391666666666 M 0.20087005 0.5902171833333334 L 0.1977091533333333 0.5730580500000001 C 0.18867801999999997 0.57802515 0.17513132 0.5838954166666667 0.1575206133333333 0.5911203166666668 V 0.5143556833333334 H 0.20087004999999997 V 0.4827467166666667 H 0.1575206133333333 V 0.4005634166666667 L 0.1263632033333333 0.39920871666666674 V 0.4827467166666667 H 0.07940130999999999 V 0.5143556833333334 H 0.12636320333333334 V 0.6037638833333334 C 0.10514004 0.6118919166666668 0.08572310333333333 0.6186652499999999 0.06811239666666666 0.62408395 L 0.07578885666666665 0.6574991500000001 C 0.09249645333333331 0.6516288833333335 0.10965560666666664 0.6453071166666667 0.1263632033333333 0.6385337500000001 V 0.7432948833333335 C 0.1263632033333333 0.7581962833333334 0.12004140999999997 0.7636149500000001 0.10152758666666664 0.7654211833333334 L 0.08211064999999997 0.7676789500000002 L 0.09294800999999996 0.8001910500000001 L 0.11010716333333329 0.7979332500000001 C 0.1466832533333333 0.7934176833333335 0.15752061333333328 0.7875474500000001 0.15752061333333328 0.7541322500000002 V 0.6258901833333335 L 0.20357938999999997 0.6060216833333334 Z M 0.21757764666666665 0.60105455 C 0.21667453333333334 0.7058156833333333 0.21125585333333333 0.7306513166666667 0.17603443333333332 0.7929661166666667 L 0.20538561666666666 0.8069643833333334 C 0.21848075999999997 0.7848381166666667 0.22796344999999998 0.7631633833333334 0.2347368 0.7423917833333333 C 0.24151014999999998 0.7216201833333333 0.24557416 0.6976876833333334 0.24783194333333333 0.6705942833333334 H 0.3173716663333333 V 0.7934176833333334 H 0.3485290766666667 V 0.6705942833333335 H 0.4185203566666667 V 0.7383277833333335 C 0.4185203566666667 0.7590993833333335 0.4149079033333333 0.7604540500000001 0.39323318333333335 0.7631633833333334 L 0.37336469 0.7649696166666667 L 0.3846536066666667 0.7974816833333335 L 0.4036189866666667 0.7952239166666668 C 0.43929196333333337 0.7907083500000002 0.45058088 0.7830318833333334 0.45058088 0.7482620166666668 V 0.42404435000000007 H 0.21757764666666665 Z M 0.24963817 0.53241795 V 0.4565564166666667 H 0.3173716663333333 V 0.5324179500000001 Z M 0.34852907666666666 0.4565564166666667 H 0.4185203566666667 V 0.53241795 H 0.3485290766666667 Z M 0.24918661333333333 0.63853375 C 0.24963817 0.6331150833333334 0.24963817 0.6249870500000001 0.24963817 0.61369815 V 0.5640269166666667 H 0.3173716663333333 V 0.63853375 Z M 0.4185203566666667 0.5640269166666667 V 0.63853375 H 0.3485290766666667 V 0.5640269166666667 Z M 0.6610059533333333 0.5107432166666667 V 0.7184592833333333 H 0.8745922533333332 V 0.5107432166666667 H 0.7720888866666666 C 0.7761528866666666 0.49900274999999994 0.7797653533333333 0.4868107166666666 0.7829262533333332 0.4737155833333333 H 0.9116198866666666 V 0.4448159499999999 H 0.8262756866666666 C 0.8384677199999999 0.4299145833333333 0.8493050533333332 0.41501321666666663 0.8587877533333332 0.40011184999999994 L 0.8294365866666666 0.38430734999999994 C 0.8253725533333333 0.39198381666666665 0.81859922 0.4019180833333333 0.8100196533333334 0.41365854999999996 C 0.8014400533333333 0.4253990166666666 0.7937635866666666 0.4357848166666666 0.78608712 0.4448159499999999 H 0.7305456533333333 L 0.74047992 0.43804261666666666 C 0.7373190199999999 0.43126924999999994 0.7319003533333334 0.4222381166666666 0.7251269866666666 0.4114007499999999 C 0.7183536533333332 0.40011184999999994 0.7129349533333332 0.3919838166666666 0.7084193866666666 0.38611358333333323 L 0.6826806533333333 0.4014665166666666 C 0.6899055533333333 0.41049764999999994 0.7011944866666665 0.42901148333333333 0.7088709533333333 0.4448159499999999 H 0.6307516533333333 V 0.4737155833333333 H 0.7481563866666666 C 0.7440923533333332 0.4886169499999999 0.7404799199999998 0.5012605499999999 0.7368674533333333 0.5107432166666667 Z M 0.6199142900000001 0.48861695 C 0.6140440533333333 0.47732801666666663 0.6045613633333333 0.46242665 0.59146622 0.44436438333333333 C 0.5788226333333334 0.42585058333333337 0.5679852733333334 0.4118523166666667 0.5594056966666667 0.40236961666666665 L 0.5318607433333333 0.42178655 C 0.5413434300000001 0.43262391666666666 0.5517292333333335 0.44707375 0.5639212633333334 0.46558755 C 0.5761132933333333 0.48410138333333336 0.5851444266666667 0.4994543166666666 0.5910146633333333 0.51254945 Z M 0.6939695866666667 0.53648195 H 0.84162862 V 0.5712518166666667 H 0.6939695866666667 Z M 0.8027947200000001 0.7586478166666666 C 0.77073422 0.7586478166666666 0.7418345866666667 0.7581962833333333 0.7169989533333333 0.7568415833333333 C 0.6573934866666666 0.75322915 0.63617032 0.74781045 0.6045613633333333 0.7008485833333333 V 0.5473193166666667 H 0.5205718266666667 V 0.58118605 H 0.5729523966666666 V 0.7017516833333334 L 0.5169593733333333 0.7609056166666668 L 0.5354731966666667 0.7911599166666667 C 0.5571479133333334 0.7708398500000001 0.57521018 0.7518744833333335 0.5896599933333334 0.7347153166666668 C 0.6262360833333334 0.7803225500000001 0.6483623533333335 0.7857412166666669 0.7120318533333334 0.7884505500000001 C 0.7368674533333334 0.78980525 0.7657670866666667 0.7902567833333334 0.7978276200000001 0.7902567833333334 C 0.8253725533333334 0.7902567833333334 0.8651095533333334 0.7893536833333334 0.9170385533333335 0.78754745 L 0.9224572533333333 0.7559384833333334 C 0.87052822 0.7577447166666667 0.8307912533333335 0.7586478166666667 0.8027947200000001 0.7586478166666667 Z M 0.84162862 0.6317604166666667 H 0.6939695866666667 V 0.59699055 H 0.84162862 Z M 0.84162862 0.6570475833333334 V 0.69272055 H 0.6939695866666667 V 0.6570475833333334 Z\n`;\nconst defaultIcons = {\n\tuser: `\nM 0.4 0.65\nA 0.3 0.3 0 1 1 0.6 0.65\nA 0.3 0.3 0 0 1 0.4 0.65\n\nM 0.1 0.8\nA 0.4 0.18 0 0 1 0.9 0.8\nA 0.4 0.10 0 0 1 0.1 0.8\n`,\n\n\tsingleUser: `\nM 0.05 0.25\nL 0.40 0.25\n\nL 0.5 0.35\n\nL 0.6 0.25\nL 0.95 0.25\n\nL 0.80 0.4\nL 0.55 0.4\n\nL 0.5 0.35\n\nL 0.45 0.4\nL0.20 0.4\n\n\nZ\n\nM 0.12530012009609615 0.36\nA 0.4 0.4 0 1 0 0.8746998799039039 0.36\nL 0.8588523373199624 0.375\nA 0.38 0.38 0 1 1 0.14114766268003764 0.375\nZ\n\n\nM 0.20487290873252584 0.23\nA 0.4 0.4 0 0 1 0.7951270912674742 0.23\nL 0.7673948391424188 0.23\nA 0.38 0.38 0 0 0 0.2326051608575812 0.23\nZ\n`\n};\nconst iconsState = createComputed(() => {\n\t/** @type {Record<string, IconDefine>} */\n\tconst icons = {\n\t\t...defaultIcons,\n\t\t...allHooks.get('icons').named(),\n\t\tlogo: logoPath,\n\t};\n\treturn icons;\n});\n/**\n * \n * @param {string | string[] | State<string | string[]>} key \n * @param {AbortSignal | boolean} [signal] \n */\nexport function createIcon(key, signal) {\n\tconst root = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\troot.setAttribute('fill', `currentColor`);\n\troot.classList.add('icon');\n\tconst iconKeys = createComputed(() => {\n\t\treturn [key].flat().filter(Boolean)\n\t\t\t.flatMap(key => key && typeof key === 'object' ? key.get?.() : key)\n\t\t\t.filter(v => v && typeof v === 'string');\n\t});\n\tconst iconState = createComputed(() => {\n\t\tconst keys = iconKeys.get();\n\t\tconst icons = iconsState.get();\n\t\tfor (const key of keys) {\n\t\t\tconst icon = Object.hasOwn(icons, key) && icons[key];\n\t\t\tif (icon) { return icon; }\n\t\t}\n\t\treturn null;\n\t});\n\tif (signal instanceof AbortSignal && signal.aborted) { return root; }\n\tconst abortSignal = signal instanceof AbortSignal ? signal : createNeverAbortedSignal();\n\t/**\n\t * \n\t * @param {IconDefine?} icon \n\t * @returns \n\t */\n\tfunction run(icon) {\n\t\troot.innerHTML = '';\n\t\tif (Array.isArray(icon) && icon.length <= 2) {\n\t\t\tconst [iconPath, viewBox] = icon;\n\t\t\troot.setAttribute('viewBox', viewBox || '0 0 1 1');\n\t\t\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\t\t\troot.appendChild(path);\n\t\t\tpath.setAttribute('d', iconPath);\n\t\t\treturn;\n\t\t}\n\t\troot.setAttribute('viewBox', '0 0 1 1');\n\t\tif (!icon) { return; }\n\t\tif (typeof icon === 'string') {\n\t\t\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\t\t\troot.appendChild(path);\n\t\t\tpath.setAttribute('d', icon);\n\t\t\treturn;\n\t\t}\n\t\tif (typeof icon !== 'function') { return; }\n\t\ticon({ root }, abortSignal);\n\t}\n\tif (!signal) {\n\t\trun(iconState.get());\n\t} else {\n\t\twatch(() => iconState.get(), run, {\n\t\t\tsignal: abortSignal,\n\t\t\timmediate: true,\n\t\t});\n\t}\n\n\treturn root;\n\n}\n","/** @import { Store } from '@neeloong/form' */\n/** @import { FromRenderer } from '../typesDefine.mjs' */\nimport { effect, renderStore } from '@neeloong/form';\nimport createStoreField from './createStoreField.mjs';\nimport { createIcon } from '../icons/index.mjs';\nimport { createComputed, createState } from '../data/index.mts';\nimport DOMPurify from 'dompurify';\nconst formAttrs = new Set([\n\t'nl-form-field',\n\t'nl-form-remove',\n\t'nl-form-move',\n\t'nl-form-add',\n\t'nl-form-event',\n]);\nconst formTags = new Map([\n\t['nl-form-field', new Set(['name', 'mode', 'renderer', 'placeholder'])],\n\t['nl-form-button', new Set(['click'])],\n]);\n/**\n * \n * @param {string} html \n */\nfunction sanitizeHtml(html) {\n\treturn DOMPurify.sanitize(html, {\n\t\tADD_TAGS: Object.keys(formTags),\n\t\tADD_ATTR: (attributeName, tagName) => {\n\t\t\tconst attr = attributeName.toLowerCase();\n\t\t\tif (formAttrs.has(attr)) { return true; }\n\t\t\tconst tagAttrs = formTags.get(tagName.toLowerCase());\n\t\t\tif (tagAttrs?.has(attr)) { return true; }\n\t\t\treturn false;\n\t\t}\n\t});\n}\n/**\n * \n * @param {Store<any, any>} store \n * @param {HTMLElement} root \n * @param {Partial<FromRenderer.Options>} [options] \n */\nexport default function (store, root, { enableLink, design, layout, editable, signal } = {}) {\n\tconst style = { enableLink, design };\n\treturn renderStore(\n\t\tstore,\n\t\t(store, renderer, options) => createStoreField(store, style, renderer, options),\n\t\troot,\n\t\tlayout || {},\n\t\t{\n\t\t\teditable: editable || false, signal, sanitizeHtml, operation(options) {\n\t\t\t\tconst button = document.createElement('button');\n\t\t\t\tbutton.classList.add(`NeeloongForm-operation`);\n\n\t\t\t\teffect(() => button.disabled = options.disabled, options.signal);\n\t\t\t\tconst component = options.component;\n\t\t\t\tconst type = options.type;\n\t\t\t\tif (component === 'tree' && type === 'collapse') {\n\t\t\t\t\tconst icon = createComputed(() => options.collapsed ? 'right' : 'down');\n\t\t\t\t\tbutton.appendChild(createIcon(icon, options.signal));\n\t\t\t\t\tbutton.classList.add(`hidden-when-disabled`);\n\t\t\t\t} else if (component === 'table' && type === 'trigger') {\n\t\t\t\t\tconst icon = createComputed(() => options.shown ? 'down' : 'right');\n\t\t\t\t\tbutton.appendChild(createIcon(icon, options.signal));\n\t\t\t\t} else if (type === 'headAdd' || type === 'footAdd' || type === 'add') {\n\t\t\t\t\tbutton.appendChild(createIcon('plusCircle', options.signal));\n\t\t\t\t\tbutton.title = '添加';\n\t\t\t\t} else if (type === 'move') {\n\t\t\t\t\tbutton.appendChild(createIcon('move', options.signal));\n\t\t\t\t\tbutton.title = '拖动';\n\t\t\t\t} else if (type === 'remove') {\n\t\t\t\t\tbutton.appendChild(createIcon('minusCircle', options.signal));\n\t\t\t\t\tbutton.title = '删除';\n\t\t\t\t} else if (type === 'removeTree') {\n\t\t\t\t\tbutton.appendChild(createIcon('delete', options.signal));\n\t\t\t\t\tbutton.title = '删除此项及子项';\n\t\t\t\t} else if (type === 'copy') {\n\t\t\t\t\tbutton.appendChild(createIcon('copy', options.signal));\n\t\t\t\t\tbutton.title = '复制';\n\t\t\t\t} else if (type === 'copyTree') {\n\t\t\t\t\tbutton.appendChild(createIcon('copy', options.signal));\n\t\t\t\t\tbutton.title = '复制此项及子项';\n\t\t\t\t} else {\n\t\t\t\t\tbutton.classList.add(`NeeloongForm-${options.component}-${type.replace(/([A-Z])/g, '-$1').toLowerCase()}`);\n\t\t\t\t}\n\t\t\t\treturn button;\n\t\t\t}\n\t\t},\n\t);\n}\n","/** @import { Store } from '@neeloong/form' */\n/** @import { FromRenderer } from '../typesDefine.mjs' */\nimport { allHooks } from '../allHooks.mts';\nimport renderStoreForm from './renderStoreForm.mjs';\nimport { createComputed } from '../data/index.mts';\nimport { createNeverAbortedSignal } from '../utils/index.mts';\n\nconst rendererState = createComputed(() => allHooks.get('formRenderers').named());\n\n\n/**\n * \n * @param {string?} [type] \n * @returns {FromRenderer['render']?}\n */\nfunction getRender(type) {\n\tif (!type) { return null; }\n\tconst renderers = rendererState.get();\n\tif (!Object.hasOwn(renderers, type)) { return null; }\n\tconst renderer = renderers[type];\n\tif (!renderer) { return null; }\n\tconst render = renderer.render;\n\tif (typeof render !== 'function') { return null; }\n\treturn render;\n}\n/**\n * \n * @param {Store<any, any>} store \n * @param {HTMLElement} root \n * @param {Partial<FromRenderer.Options> & {type?: string}} [options] \n * @returns {void}\n */\nexport default function (store, root, options) {\n\tconst {type, editable, signal, model, layout, enableLink, design, ...others } = options || {};\n\tconst render = getRender(type) || renderStoreForm;\n\trender(store, root, {\n\t\tmodel: model || null,\n\t\tlayout: layout || null,\n\t\teditable: Boolean(editable),\n\t\tsignal: signal || createNeverAbortedSignal(),\n\t\tenableLink: Boolean(enableLink),\n\t\tdesign: Boolean(design),\n\t\t...others,\n\t});\n}\n","/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\n/** @import { FieldComponents } from '../typesDefine.mjs' */\nimport { Store } from '@neeloong/form';\nimport toSchema from './toSchema.mts';\n\n/**\n * \n * @param {ModelScriptConfiguration} define \n * @param {FieldComponents?} [fieldComponents] \n */\nexport default function createStore(define, fieldComponents) {\n\tconst components = typeof fieldComponents === 'object' && fieldComponents || {};\n\tconst schema = toSchema(define.fields, components, define.permissions);\n\tconst store = Store.create(schema);\n\treturn store;\n}\n","/** @import { FieldShowHandle, FieldStyle } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\nimport { createState } from '../data/index.mts';\nimport buildDataSource from '../DataSource/index.mjs';\nimport { getField } from './field.mjs';\n\n/**\n *\n * @param {string} name\n * @param {FieldScriptConfiguration} field\n * @param {FieldStyle} style\n * @param {any} data\n * @returns {FieldShowHandle}\n */\nexport default function createShowField(name, field, style, data) {\n\tlet destroyedState = createState(false);\n\tlet destroyed = false;\n\t/** @type {Map<string, Set<any>>} */\n\tconst events = new Map();\n\t/** @type {any} */\n\tconst value = createState(data[name]);\n\tconst component = getField(field);\n\tconst source = buildDataSource(field.source, field.model, null, field.script?.source);\n\n\tconst ac = new AbortController();\n\tconst signal = ac.signal;\n\tconst root = component({\n\t\tfield, style: { ...style },\n\t\tget editable() { return false; },\n\t\tget name() { return name; },\n\t\tget current() { return data; },\n\t\tget required() { return false; },\n\t\tget hidden() { return false; },\n\t\tget readonly() { return true; },\n\n\t\tget label() { return ''; },\n\t\tget placeholder() { return ''; },\n\t\tget description() { return ''; },\n\t\tget source() { return source; },\n\t\tsignal,\n\t\tlisten(event, listen) {\n\t\t\tconst fn = listen.bind(this);\n\t\t\tlet set = events.get(event);\n\t\t\tif (!set) {\n\t\t\t\tset = new Set();\n\t\t\t\tevents.set(event, set);\n\t\t\t}\n\t\t\tset.add(fn);\n\t\t\treturn () => { set?.delete(fn); };\n\t\t},\n\t\temit() { },\n\t\tget value() { return value.get(); },\n\t\tset value(v) { },\n\t\tget destroyed() { return destroyedState.get(); },\n\t\tget nullable() { return true; },\n\t\tget disabled() { return false; },\n\t\tget clearable() { return false; },\n\n\t});\n\n\treturn {\n\t\troot,\n\t\tdestroy() {\n\t\t\tif (destroyed) { return; }\n\t\t\tdestroyed = true;\n\t\t\tdestroyedState.set(true);\n\t\t\tac.abort();\n\t\t},\n\t\tget value() {\n\t\t\treturn value;\n\t\t},\n\t\tset value(v) {\n\t\t\tif (destroyed) { return; }\n\t\t\tvalue.set(v);\n\t\t},\n\t};\n\n}\n","/** @import { Search } from '@yongdall/common' */\n/** @import { FieldFilterStyle } from '../typesDefine.mjs' */\n/** @import { State } from '../data/index.mts' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n\nimport { getFieldFilter } from './field.mjs';\nimport { createComputed, createState, effect, GlobalState } from '../data/index.mts';\nimport buildDataSource from '../DataSource/index.mjs';\nimport { createNeverAbortedSignal } from '../utils/index.mts';\n\n\n\n/**\n * @typedef {object} Handle\n * @property {any} value\n * @property {(value: any, operator: string) => void} update\n * @property {HTMLElement} root\n * @property {() => void} destroy\n */\n\n\n\n/**\n * \n * @param {{get(): Search.AndList, set(v: Search.AndList): void}} andList \n * @param {{field: string; label?: string; operator: string; state?: string; sign?: boolean}} filter\n * @param {(state: {state: State<any>; fields: string[]; operator: string; sign?: boolean; }) => void} setState\n */\nexport function createFilterState(andList, filter, setState) {\n\tconst { field: prop, operator, state: stateName, sign } = filter;\n\tconst props = prop.split('.');\n\tconst op = typeof operator === 'string' ? operator : '';\n\tif (stateName) {\n\t\tconst state = createComputed(() => GlobalState[stateName], v => { GlobalState[stateName] = v; });\n\t\tsetState({ fields: props, state, operator: op, sign });\n\t\treturn state;\n\t}\n\tconst not = Boolean(sign);\n\t/**\n\t * \n\t * @param {Search.Match | Search.Children} v \n\t * @returns {v is Search.Match}\n\t */\n\tfunction finder(v) {\n\t\tif (!Array.isArray(v)) { return false; }\n\t\tif (v.length === 2) { return false; }\n\t\tif (Boolean(v[3]) !== not) { return false; }\n\t\tif (v[2] !== op) { return false; }\n\t\tconst value = v[1];\n\t\tif (value && typeof value === 'object' && !Array.isArray(value)) { return false; }\n\t\tconst fields = v[0];\n\t\tif (fields.length !== props.length) { return false; }\n\t\tfor (const [index, field] of fields.entries()) {\n\t\t\tif ((typeof field === 'string' ? field : field[0]) !== props[index]) { return false; }\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * \n\t * @param {any} val \n\t */\n\tfunction set(val) {\n\t\tconst list = andList.get();\n\t\tconst index = list.findIndex(finder);\n\t\tif (index < 0) {\n\t\t\tif (val != null) {\n\t\t\t\tandList.set([...list, [props, val, op, sign ? '!' : '']]);\n\t\t\t}\n\t\t\treturn;\n\n\t\t}\n\t\tif (val !== null) {\n\t\t\t/** @type {Search.Match | Search.Children} */\n\t\t\tconst item = [...list[index]];\n\t\t\titem[1] = val;\n\t\t\tandList.set([\n\t\t\t\t...list.slice(0, index),\n\t\t\t\titem,\n\t\t\t\t...list.slice(index + 1),\n\t\t\t]);\n\t\t} else {\n\t\t\tandList.set([\n\t\t\t\t...list.slice(0, index),\n\t\t\t\t...list.slice(index + 1),\n\t\t\t]);\n\t\t}\n\n\t}\n\tfunction get() {\n\t\treturn andList.get().find(finder)?.[1];\n\t}\n\tconst state = createComputed(get);\n\treturn {\n\t\tget() { return state.get(); },\n\t\tset,\n\t};\n\n}\n\n/**\n *\n * @param {{get(): Search.AndList, set(v: Search.AndList): void}} andList \n * @param {{field: string; label?: string; operator: string; state?: string; sign?: boolean}} filter\n * @param {(state: {state: State<any>; fields: string[]; operator: string; sign?: boolean; }) => void} setState\n * @param {FieldScriptConfiguration} field\n * @param {FieldFilterStyle} style\n * @param {AbortSignal} [signal]\n * @returns {HTMLElement}\n */\n\nfunction createQuickFilter(andList, filter, setState, field, style, signal) {\n\tconst { operator } = filter;\n\tconst state = createFilterState(andList, filter, setState);\n\tconst component = getFieldFilter(field, operator);\n\tconst destroyed = createState(false);\n\tconst source = buildDataSource(field.source, field.model, null, field.script?.source);\n\n\tconst root = component({\n\t\tfield, style: { ...style, quick: true },\n\t\tget operator() { return operator; },\n\t\tget value() { return state.get(); },\n\t\tset value(val) {\n\t\t\tif (destroyed.get()) { return; }\n\t\t\tstate.set(val);\n\t\t},\n\t\tget source() { return source; },\n\t\tsignal: signal || createNeverAbortedSignal(),\n\t\tget destroyed() { return destroyed.get(); },\n\t});\n\tif (signal?.aborted) {\n\t\tdestroyed.set(true);\n\t} else {\n\t\tsignal?.addEventListener('abort', () => { destroyed.set(true); }, { once: true });\n\t}\n\treturn root;\n}\n\n/**\n * @typedef {object} Match\n * @property {string} field\n * @property {string} [operator]\n * @property {any} value\n */\n/**\n * \n * @param {{get(): Search.AndList, set(v: Search.AndList): void; update(v: Search.AndList | null): void}} andList \n * @param {HTMLElement} root \n * @param {{field: string; label?: string; operator: string; state?: string; sign?: boolean}[]} filters \n * @param {object} options \n * @param {Record<string, FieldScriptConfiguration>} options.fields \n * @param {boolean} [options.inline] \n * @param {boolean} [options.showLabel]\n * @param {AbortSignal} [options.signal]\n */\nexport default function createQuickFilters(andList, root, filters, {\n\tfields, showLabel, inline, signal,\n}) {\n\tif (signal?.aborted) { return; }\n\t/** @type {{state: State<any>; fields: string[]; operator: string; sign?: boolean; }[]} */\n\tconst states = [];\n\tconst style = { showLabel, inline };\n\tfor (const filter of filters) {\n\t\tconst { field } = filter;\n\t\tconst fieldDefine = Object.hasOwn(fields, field) && fields[field];\n\t\tif (!fieldDefine) { continue; }\n\t\tconst type = fieldDefine.type;\n\t\tif (!type || typeof type === 'object') { continue; }\n\t\tconst r = createQuickFilter(andList, filter, s => states.push(s), fieldDefine, style, signal);\n\t\troot.appendChild(r);\n\t\tsignal?.addEventListener('abort', () => { r.remove(); }, { once: true });\n\t}\n\tif (!states.length) { return; }\n\teffect(() => {\n\t\t/** @type {Search.AndList} */\n\t\tconst list = [];\n\t\tfor (const { fields, state, operator, sign } of states) {\n\t\t\tconst value = state.get();\n\t\t\tif (value == null) { continue; }\n\t\t\tlist.push([fields, value, operator, sign ? '!' : '']);\n\t\t}\n\t\tandList.update(list.length ? list : null);\n\t}, signal);\n}\n","/** @import { FieldFilterComponent, FieldFilterStyle } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n/** @import { State } from '../data/index.mts' */\n\nimport { createState } from '../data/index.mts';\nimport buildDataSource from '../DataSource/index.mjs';\n\n/**\n * @typedef {object} Handle\n * @property {HTMLElement} root\n */\n\n/**\n *\n * @param {FieldFilterComponent} component\n * @param {FieldScriptConfiguration} field\n * @param {State<any>} valState\n * @param {State<any>} opState\n * @param {FieldFilterStyle} style\n * @param {AbortSignal} signal\n * @returns {HTMLElement}\n */\nexport default function createFilter(component, field, valState, opState, style, signal) {\n\tconst destroyed = createState(false);\n\tconst state = valState;\n\tconst operatorState = opState;\n\tconst source = buildDataSource(field.source, field.model, null, field.script?.source);\n\n\tsignal.addEventListener('abort', () => {\n\t\tdestroyed.set(true);\n\t}, { once: true });\n\t// TODO: 选项、过滤条件\n\treturn component({\n\t\tfield, style,\n\t\tget operator() { return operatorState.get(); },\n\t\tget value() { return state.get(); },\n\t\tset value(val) {\n\t\t\tif (destroyed.get()) { return; }\n\t\t\tconst value = state.get();\n\t\t\tstate.set(val);\n\t\t\tif (Object.is(value, val)) { return; }\n\t\t},\n\t\tget source() { return source; },\n\t\tsignal,\n\t\tget destroyed() { return destroyed.get(); },\n\t});\n}\n","/** @import { FieldFilterStyle } from '../typesDefine.mjs' */\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n/** @import { State } from '../data/index.mts' */\n\nimport createFilter from './createFilter.mjs';\nimport { getFieldFilterOperators } from './field.mjs';\nimport { getFieldFilter } from './field.mjs';\n\n\n\n/**\n *\n * @param {FieldScriptConfiguration} field\n * @param {FieldFilterStyle} userStyle\n * @param {State<any>} valState\n * @param {State<any>} opState\n * @param {AbortSignal?} signal\n */\n\nexport default function createFieldFilter(field, valState, opState, userStyle, signal) {\n\t/** @type {FieldFilterStyle} */\n\tconst style = { ...userStyle };\n\tdelete style.quick;\n\tdelete style.showLabel;\n\tlet destroyed = signal?.aborted || false;\n\tsignal?.addEventListener('abort', () => { destroyed = true; }, { once: true });\n\tconst operators = getFieldFilterOperators(field);\n\n\tconst root = document.createElement('span');\n\troot.classList.add(`FieldFilter-main`);\n\tconst operatorSelector = root.appendChild(document.createElement('select'));\n\n\toperatorSelector.classList.add(`FieldFilter-operator`);\n\tfor (const [value, label] of Object.entries(operators)) {\n\t\tconst option = document.createElement('option');\n\t\toption.value = value;\n\t\toption.label = label || value;\n\t\toperatorSelector.appendChild(option);\n\t}\n\n\tlet currentComponent = getFieldFilter(field, opState.get());\n\tlet handleAbortController = new AbortController();\n\tlet currentHandle = createFilter(currentComponent, field, valState, opState, style, signal ? AbortSignal.any([handleAbortController.signal, signal]) : handleAbortController.signal);\n\tlet handleRoot = root.appendChild(currentHandle);\n\n\thandleRoot.classList.add(`FieldFilter-value`);\n\n\t/** @param {string?} [operator] */\n\tfunction setOperator(operator) {\n\t\tif (destroyed) { return; }\n\t\tif (typeof operator !== 'string' || operator === opState.get()) { return; }\n\t\tif (!(operator in operators)) {\n\t\t\t// TODO: 不存在此操作符\n\t\t}\n\t\toperatorSelector.value = operator;\n\t\tconst component = getFieldFilter(field, operator);\n\t\tif (component === currentComponent) {\n\t\t\topState.set(operator);\n\t\t\treturn;\n\t\t}\n\t\thandleAbortController.abort();\n\t\thandleRoot.remove();\n\t\tcurrentComponent = component;\n\t\topState.set(operator);\n\n\t\thandleAbortController = new AbortController();\n\t\tcurrentHandle = createFilter(currentComponent, field, valState, opState, style, signal ? AbortSignal.any([handleAbortController.signal, signal]) : handleAbortController.signal);\n\t\thandleRoot = root.appendChild(currentHandle);\n\t\thandleRoot.classList.add(`FieldFilter-value`);\n\t}\n\toperatorSelector.addEventListener('input', () => setOperator(operatorSelector.value));\n\tsetOperator(operatorSelector.value);\n\treturn root\n}\n","/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n/** @import { Search } from '@yongdall/common' */\nimport { createState, effect } from '../data/index.mts';\nimport createFieldFilter from './createFieldFilter.mjs';\n/**\n * @typedef {object} Filters\n * @property {HTMLElement} root\n * @property {() => void} add\n * @property {() => (Search.AndItem | null)[]} destroy\n */\n\n/**\n * \n * @param {HTMLElement} root \n * @param {Record<string, FieldScriptConfiguration>} fields \n * @param {(Search.AndItem | null)[]?} [value] \n * @returns {Filters}\n */\nexport default function createFilters(root, fields, value) {\n\troot.classList.add(`FieldFilter-filters`);\n\tconst ac = new AbortController();\n\tconst signal = ac.signal;\n\tlet values = Array.isArray(value) ? structuredClone(value) : [];\n\n\n\tconst fieldsMap = new Map(Object.entries(fields).filter(([, f]) => {\n\n\t\tconst type = f.type;\n\t\tif (!type || typeof type === 'object') { return false; }\n\t\treturn true;\n\t}));\n\n\tconst style = { quick: false, showLabel: false, inline: true };\n\n\t/**\n\t * \n\t * @param {Search.AndItem?} [v] \n\t * @returns \n\t */\n\tfunction createLine(v) {\n\t\tconst line = root.appendChild(document.createElement('div'));\n\t\tline.classList.add(`FieldFilter-field`);\n\n\t\tconst fieldSelect = document.createElement('select');\n\t\tfieldSelect.classList.add(`FieldFilter-fieldName`);\n\t\tline.appendChild(fieldSelect);\n\t\tconst removeButton = document.createElement('button');\n\t\tremoveButton.classList.add(`FieldFilter-remove`);\n\t\tremoveButton.type = 'button';\n\t\tline.appendChild(removeButton);\n\t\tfieldSelect.appendChild(document.createElement('option'));\n\t\tfor (const [name, f] of fieldsMap) {\n\t\t\tconst type = f.type;\n\t\t\tif (!type || typeof type === 'object') { continue; }\n\t\t\tconst option = document.createElement('option');\n\t\t\toption.value = name;\n\t\t\toption.label = f.label || name;\n\t\t\tfieldSelect.appendChild(option);\n\t\t}\n\t\t/** @type {{name: string; abort(): void}?} */\n\t\tlet fieldFilter = null;\n\t\tremoveButton.appendChild(document.createTextNode('移除'));\n\t\tremoveButton.addEventListener('click', () => {\n\t\t\tfieldFilter?.abort();\n\t\t\tconst index = [...root.children].indexOf(line);\n\t\t\tif (index < 0) { return; }\n\t\t\tline.remove();\n\t\t\tvalues.splice(index, 1);\n\t\t});\n\t\tconst state = createState();\n\t\tconst operatorState = createState('');\n\t\tfunction updateLine() {\n\t\t\tconst index = [...root.children].indexOf(line);\n\t\t\tif (index < 0) { return; }\n\t\t\tconst f = values[index];\n\t\t\tconst value = state.get();\n\t\t\tconst operator = operatorState.get();\n\t\t\tif (f && f.length !== 2) {\n\t\t\t\tconst fields = f[0];\n\t\t\t\tconst fieldItem = fields.length === 1 && fields[0];\n\t\t\t\tconst field = typeof fieldItem === 'string' ? fieldItem : Array.isArray(fieldItem) && fieldItem.length === 1 ? fieldItem[0] : '';\n\n\t\t\t\tif (!field && !fieldFilter) { return; }\n\t\t\t\tif (f && fieldFilter && field === fieldFilter.name && f[2] === operator && f[1] === value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tvalues.splice(index, 1, fieldFilter ? [[fieldFilter.name], value, operator] : null);\n\t\t}\n\t\tfieldSelect.addEventListener('change', () => {\n\t\t\tconst name = fieldSelect.value;\n\t\t\tconst field = fieldsMap.get(name);\n\t\t\tif (!fieldFilter && !field) { return; }\n\t\t\tif (fieldFilter?.name === name) { return; }\n\t\t\tfieldFilter?.abort();\n\t\t\tif (!field) {\n\t\t\t\tfieldFilter = null;\n\t\t\t\tupdateLine();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst filterAbortController = new AbortController();\n\t\t\tconst ffSignal = AbortSignal.any([filterAbortController.signal, signal]);\n\n\t\t\tstate.set(undefined);\n\t\t\toperatorState.set('');\n\t\t\tconst filterRoot = createFieldFilter(field, state, operatorState, style, ffSignal)\n\t\t\tfieldFilter = { name, abort() {filterAbortController.abort()} };\n\t\t\t// TODO: 内容进行匹配\n\t\t\tline.insertBefore(filterRoot, removeButton);\n\t\t\tffSignal.addEventListener('abort', () => {\n\t\t\t\tfilterRoot.remove();\n\t\t\t});\n\t\t\teffect(updateLine, ffSignal);\n\t\t});\n\t\tif (!v) { return; }\n\n\t\tconst fields = v[0];\n\t\tconst fieldItem = fields.length === 1 && fields[0];\n\t\tconst fieldName = typeof fieldItem === 'string' ? fieldItem : Array.isArray(fieldItem) && fieldItem.length === 1 ? fieldItem[0] : '';\n\n\t\tfieldSelect.value = fieldName;\n\t\tif (!fieldSelect.value) { return; }\n\t\tconst currentField = fieldSelect.value;\n\t\tconst field = fieldsMap.get(currentField);\n\t\tif (!field) { return; }\n\t\tconst filterAbortController = new AbortController();\n\t\tconst ffSignal = AbortSignal.any([filterAbortController.signal, signal]);\n\n\t\tif (currentField === fieldName) {\n\t\t\tstate.set(v[1]);\n\t\t\toperatorState.set(v[2] || '');\n\t\t} else {\n\t\t\tstate.set(undefined);\n\t\t\toperatorState.set('');\n\t\t}\n\t\tconst filterRoot = createFieldFilter(field, state, operatorState, style, ffSignal);\n\t\tfieldFilter = { name: currentField, abort() {filterAbortController.abort()} }\n\t\tline.insertBefore(filterRoot, removeButton);\n\t\tffSignal.addEventListener('abort', () => {\n\t\t\tfilterRoot.remove();\n\t\t});\n\t\teffect(updateLine, ffSignal);\n\t}\n\n\n\tfunction reset() {\n\t\tfor (const v of values) {\n\t\t\tcreateLine(v);\n\t\t}\n\t}\n\treset();\n\tlet destroyed = false;\n\treturn {\n\t\troot,\n\t\tadd: () => createLine(),\n\t\tdestroy() {\n\t\t\tif (destroyed) { return values; }\n\t\t\tdestroyed = true;\n\t\t\troot.innerHTML = '';\n\t\t\tac.abort();\n\t\t\treturn values;\n\t\t}\n\t};\n}\n","export const root = document.createElement('div');\n","const head = /** @type {HTMLHeadElement} */(document.querySelector('head'));\nconst oldIconLink = /** @type {HTMLLinkElement?} */(document.querySelector('link[rel=icon]'));\nconst iconLink = oldIconLink || document.createElement('link');\niconLink.rel = 'icon';\nconst defaultIcon = iconLink.href;\nlet currentIcon = defaultIcon;\n/**\n * \n * @param {string?} icon \n */\nexport function setIcon(icon) {\n\tconst newIcon = icon || defaultIcon;\n\tif (newIcon === currentIcon) { return }\n\tcurrentIcon = newIcon;\n\tif (!newIcon) {\n\t\ticonLink.remove();\n\t\treturn;\n\t}\n\ticonLink.href = newIcon;\n\thead.appendChild(iconLink);\n}\n","import { createState } from './data/index.mts';\nimport { createNeverAbortedSignal } from './utils/index.mts';\n\n\nexport default class GeneralContext {\n\t#destroyed = createState(false);\n\t#waitDestroy;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t */\n\tconstructor(signal) {\n\t\t/*** @type {PromiseWithResolvers<never>} */\n\t\tconst { promise, reject } = Promise.withResolvers();\n\t\tthis.#waitDestroy = promise;\n\t\tif (signal instanceof AbortSignal) {\n\t\t\tthis.#signal = signal;\n\t\t\tif (signal.aborted) {\n\t\t\t\tthis.#destroyed.set(true);\n\t\t\t} else {\n\t\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\t\tthis.#destroyed.set(true);\n\t\t\t\t}, { once: true });\n\t\t\t}\n\t\t} else {\n\t\t\tthis.#signal = createNeverAbortedSignal();\n\t\t}\n\t}\n\t/**\n\t * @overload\n\t * @param {false} [useReject]\n\t * @returns {Promise<void>}\n\t */\n\t/**\n\t * @overload\n\t * @param {true} useReject\n\t * @returns {Promise<never>}\n\t */\n\t/**\n\t * @overload\n\t * @param {boolean} [useReject] \n\t * @returns {Promise<void | never>}\n\t */\n\t/**\n\t * \n\t * @param {boolean} [useReject] \n\t * @returns \n\t */\n\twaitDestroy(useReject) {\n\t\tif (useReject) { return this.#waitDestroy; }\n\t\treturn this.#waitDestroy.catch((() => { }));\n\t}\n\tget destroyed() { return this.#destroyed.get(); }\n\t/** @type {AbortSignal} */\n\t#signal;\n\tget signal() { return this.#signal; }\n}\n","import GeneralContext from '../GeneralContext.mjs';\n\n\n\nexport class ModalFooter extends GeneralContext {\n\t#root;\n\t#container = document.createElement('div');\n\tget container() { return this.#container; }\n\t/**\n\t * \n\t * @param {HTMLElement} root \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tconstructor(root, signal) {\n\t\tsuper(signal);\n\t\tthis.#root = root;\n\t\tconst container = root.appendChild(this.#container);\n\t\troot.className = 'Modal-footer';\n\t\tcontainer.className = 'Modal-footer-main';\n\t}\n}\n","/** @import { FieldScriptConfiguration, ModelScriptConfiguration } from '../services/model.mjs' */\nimport { Pattern } from '@yongdall/common';\nimport createShowField from './createShowField.mjs';\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, {}, 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 { Menu } from './Menu.mjs' */\n/** @import { Components } from './typesDefine.mts' */\nimport FormList from './form/List.mjs';\n/** @type {Components['List']} */\nexport let List = FormList;\n/** @type {Components['Pagination']} */\nexport let Pagination = class {\n\t#pagination = document.createElement('div');\n\tget root() {return this.#pagination; }\n\tget size() { return 5}\n\tset size(v) { }\n\tget page() { return 1}\n\tset page(v) { }\n\tget total() { return 0}\n\tset total(v) { }\n\t/**\n\t * \n\t * @param {(p: Pagination) => void} listen \n\t * @returns {() => void}\n\t */\n\tlisten(listen) {\n\t\treturn () => {}\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n;\n\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu.RendererOptions} options \n * @returns {Element?}\n */\nexport let createMenuButtons = (menus, options) => null;\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu?} button \n * @param {Menu.RendererOptions} options \n * @returns {Element?}\n */\nexport let createMenuButton = (menus, button, options) => null;\n\n\n/** @type {Menu.Renderer} */\nexport let createMenuItem = () => null;\n\n/**\n * \n * @param {Partial<Components>} components \n */\nexport default function setComponents(components = {}) {\n\tList = components.list || components.List || List;\n\tPagination = components.pagination || components.Pagination || Pagination;\n\tconst menuButtons = components.createMenuButtons || components.menuButtons;\n\tconst menuButton = components.createMenuButton || components.menuButton;\n\tconst menuItem = components.createMenuItem || components.menuItem;\n\tif (typeof menuButtons === 'function') {\n\t\tcreateMenuButtons = menuButtons;\n\t}\n\tif (typeof menuButton === 'function') {\n\t\tcreateMenuButton = menuButton;\n\t}\n\tif (typeof menuItem === 'function') {\n\t\tcreateMenuItem = menuItem;\n\t}\n}\n","/**\n * @typedef {object} Menu\n * 菜单显示\n * @property {string} [label] 外观:标签\n * @property {string} [icon] 外观:图标\n * @property {string} [image] 外观:图片\n * @property {string} [color] 外观:颜色\n * @property {string} [title] 外观:标题\n * @property {string} [description] 外观:描述\n * \n * @property {string} [refType] 引用类型:分组(group)、模块(module)、内置(builtin)\n * @property {string} [refId] 引用ID\n * @property {string} [refMode] 引用模式:展开/子菜单\n * \n * 菜单操作\n * @property {string} [page] 页面\n * @property {string} [path] 页面路径\n * @property {string} [uri] URI\n * @property {string} [target] URI打开目标窗口\n * @property {string} [command] 指令\n * @property {string} [script] 脚本\n * @property {() => boolean | void} [click] 点击事件\n * @property {boolean} [disabled] 点击事件\n * @property {boolean} [logged]\n * \n * 三方扩展\n * @property {boolean} [autoLogin] 自动登录\n * @property {string} [appId] 关联应用\n * \n * @property {(Menu | null)[]} children\n * @property {Menu.Button[]} buttons\n * \n * @property {string} [permission] 权限\n * \n * @property {boolean} [collapsed] 折叠\n * \n */\n\nimport { createMenuButton, createMenuButtons, createMenuItem } from './components.mjs';\nimport { createNeverAbortedSignal } from './utils/index.mts';\n\n\n/**\n * @typedef {object} Menu.Button\n * \n * @property {string} [label] 外观:标签\n * @property {string} [icon] 外观:图标\n * @property {string} [image] 外观:图片\n * @property {string} [color] 外观:颜色\n * @property {string} [title] 外观:标题\n * @property {string} [description] 外观:描述\n * \n * @property {string} [refType] 引用类型:分组(group)、模块(module)、内置(builtin)\n * @property {string} [refId] 引用ID\n * @property {string} [refMode] 引用模式:展开/子菜单\n * \n * 菜单操作\n * @property {string} [page] 页面\n * @property {string} [path] 页面路径\n * @property {string} [uri] URI\n * @property {string} [target] URI打开目标窗口\n * @property {string} [command] 指令\n * @property {string} [script] 脚本\n * @property {() => void} [click] 点击事件\n * @property {boolean} [disabled] 点击事件\n * \n * 三方扩展\n * @property {boolean} [autoLogin] 自动登录\n * @property {string} [appId] 关联应用\n * \n * @property {string} [permission] 权限\n * \n */\n\n/**\n * @typedef {object} Menu.Define\n * @property {string} [groupType]\n * @property {string} [group]\n * @property {number} [no]\n * @property {'' | 'button' | 'divider'} type\n * @property {number} level\n * \n * 菜单显示\n * @property {string} [label] 外观:标签\n * @property {string} [icon] 外观:图标\n * @property {string} [image] 外观:图片\n * @property {string} [color] 外观:颜色\n * @property {string} [title] 外观:标题\n * @property {string} [description] 外观:描述\n * \n * @property {string} [refType] 连接:引用类型:分组(group)、模块(module)、内置(builtin)\n * @property {string} [refId] 连接:引用ID\n * @property {string} [refMode] 连接:引用模式:展开/子菜单\n * \n * 菜单操\n * @property {string} [page] 连接:页面\n * @property {string} [path] 连接:页面路径\n * @property {string} [uri] 连接:URI\n * @property {string} [target] 连接:URI打开目标窗口\n * @property {string} [command]\n * @property {string} [script]\n * @property {() => void} [click] 点击事件\n * @property {boolean} [disabled] 点击事件\n * \n * \n * @property {boolean} [autoLogin] 三方扩展:自动登录\n * @property {string} [appId] 三方扩展:关联应用\n * \n * @property {string} [permission] 权限\n * \n * @property {boolean} [collapsed] 折叠\n * \n */\n/**\n * @typedef {object} Menu.Renderer.Command\n * @property {string?} [page] \n * @property {string?} [path] \n * @property {string?} [uri] \n * @property {boolean?} [disabled] \n * @property {(() => boolean | void)?} [click] \n */\n/**\n * @typedef {object} Menu.Renderer.Options\n * @property {AbortSignal} signal\n * @property {boolean} button \n * @property {(menu: Menu) => boolean} disabled \n * @property {(menu: Menu) => boolean | void} click \n * @property {(menu: Menu) => string | null} uri \n * @property {Record<string, Menu.Renderer.Command>} commands \n */\n/**\n * @typedef {(menu: Menu, options: Menu.Renderer.Options) => HTMLElement?} Menu.Renderer\n */\n/**\n * @typedef {object} Menu.RendererOptions\n * @property {AbortSignal} signal\n * @property {(menu: Menu, options?: Partial<Menu.Renderer.Options>) => HTMLElement?} create \n * @property {(menu: Menu) => boolean} disabled \n * @property {(menu: Menu) => boolean | void} click \n * @property {(menu: Menu) => string | null} uri \n * @property {Record<string, Menu.Renderer.Command>} commands \n */\n\n/**\n * @typedef {object} Menu.Options\n * @property {AbortSignal} signal\n * @property {(menu: Menu, options: Menu.Renderer.Options) => HTMLElement?} create \n * @property {(menu: Menu) => boolean} disabled \n * @property {(menu: Menu) => boolean | void} click \n * @property {(menu: Menu) => string | null} uri \n * @property {Record<string, Menu.Renderer.Command>} commands \n */\n\nconst actionProps = [\n\t'uri', 'target', 'page', 'path', 'command', 'script', 'click',\n];\n\n\n/**\n * \n * @param {Record<string, any>} data\n * @param {string[]} actionProps \n */\nfunction clear(data, actionProps) {\n\tfor (const k of actionProps) {\n\t\tdelete data[k];\n\n\t}\n\treturn data;\n}\n/**\n * @param {Menu.Define[]} list \n * @param {Menu.Button[]} [rootButtons] \n * @returns {(Menu | null)[]}\n */\nfunction fromDefine(list, rootButtons = []) {\n\t/** @type {(Menu | null)[]} */\n\tconst rootMenus = [];\n\t/** @type {(Menu | null)[]} */\n\tconst parents = [];\n\tfor (const { level: levelX, type, ...item } of list) {\n\t\tconst level = Math.max(0, Math.floor(levelX)) || 0;\n\t\tparents.length = level;\n\t\tconst parent = parents.findLast(Boolean);\n\t\tif (type === 'button') {\n\t\t\t/** @type {Menu.Button} */\n\t\t\tconst button = item;\n\t\t\tif (parent) {\n\t\t\t\tparent.buttons.push(button);\n\t\t\t} else {\n\t\t\t\trootButtons.push(button);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\t/** @type {Menu?} */\n\t\tconst menu = type === 'divider' ? null : { ...item, buttons: [], children: [] };\n\t\tif (parent) {\n\t\t\tparent.children.push(menu);\n\t\t} else {\n\t\t\trootMenus.push(menu);\n\t\t}\n\t\tparents[level] = menu;\n\t}\n\treturn rootMenus;\n}\n\n\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {(menu: Menu) => boolean} [filter] \n * @param {boolean?} [expandSingle] \n */\nfunction filterMenu(menus, filter, expandSingle) {\n\t/** @type {(Menu | null)[]} */\n\tconst result = [];\n\tfor (const menu of menus) {\n\t\tif (!menu) {\n\t\t\tresult.push(menu);\n\t\t\tcontinue;\n\t\t}\n\t\tconst { children } = menu;\n\t\tif (filter && !filter(menu)) { continue; }\n\t\tif (!children?.length) {\n\t\t\tresult.push(menu);\n\t\t\tcontinue;\n\t\t}\n\t\tconst list = filterMenu(children, filter, expandSingle).filter((m, i, s) => {\n\t\t\tif (m) { return true; }\n\t\t\tif (i === 0) { return true; }\n\t\t\tif (s[i - 1]) { return true; }\n\t\t\treturn false;\n\t\t});\n\t\tif (!list.length) { continue; }\n\t\tif (expandSingle && list.filter(Boolean).length <= 1) {\n\t\t\tresult.push(...list);\n\t\t} else {\n\t\t\tif (!list[list.length - 1]) { list.pop(); }\n\t\t\tif (!list[0]) { list.shift(); }\n\t\t\tresult.push({ ...menu, children: list });\n\t\t}\n\t}\n\tif (expandSingle && result.length === 1) {\n\t\tconst [item] = result;\n\t\tif (item?.children?.length) {\n\t\t\treturn item.children;\n\t\t}\n\t}\n\treturn result;\n}\n/**\n * @template T\n * @overload\n * @param {Map<string, Map<string, T>>} map \n * @param {T} value \n * @param {string} key1\n * @param {string} key2\n * @returns {void}\n */\n/**\n * \n * @param {Map<any, any>} map \n * @param {*} value \n * @param {...any} keys \n */\nfunction setMapValue(map, value, ...keys) {\n\tlet m = map;\n\tconst last = keys.pop();\n\tfor (const key of keys) {\n\t\tlet map = m.get(key);\n\t\tif (!map) {\n\t\t\tmap = new Map();\n\t\t\tm.set(key, map);\n\t\t}\n\t\tm = map;\n\t}\n\tm.set(last, value);\n}\n\n/**\n * \n * @param {Menu.Define[]} menus \n * @param {string} groupType \n * @param {string} group \n * @param {Menu.Button[]} [buttons]\n * @returns {(Menu | null)[]}\n */\nfunction buildMenu(menus, groupType, group, buttons) {\n\t/** @type {Map<string, Map<string, (Menu | null)[]>>} */\n\tconst menuGroups = new Map();\n\t/** @type {Map<string, Map<string, Menu.Button[]>>} */\n\tconst buttonGroups = new Map();\n\tfor (const [groupType, v] of Map.groupBy(menus, m => m.groupType || '').entries()) {\n\t\tfor (const [group, list] of Map.groupBy(v, m => m.group || '').entries()) {\n\t\t\t/** @type {Menu.Button[]} */\n\t\t\tconst buttons = [];\n\t\t\tconst menu = fromDefine(list, buttons);\n\t\t\tsetMapValue(buttonGroups, buttons, groupType, group);\n\t\t\tsetMapValue(menuGroups, menu, groupType, group);\n\t\t}\n\t}\n\t/** @type {Map<string, Map<string, (Menu | null)[]>>} */\n\tconst allMenuTypes = new Map();\n\t/** @type {Map<string, Map<string, Menu.Button[]>>} */\n\tconst allButtonTypes = new Map();\n\t/**\n\t * \n\t * @param {Menu.Button[]} buttons \n\t */\n\tfunction runButton(buttons) {\n\t\tfor (let i = buttons.length - 1; i >= 0; i--) {\n\t\t\tconst menu = buttons[i];\n\t\t\tconst { refType, refId } = menu;\n\t\t\tif (!refType || !refId) { continue; }\n\t\t\tclear(menu, actionProps);\n\t\t\tconst subButtons = allButtonTypes.get(refType)?.get(refId);\n\t\t\tbuttons.splice(i, 1, ...subButtons || []);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t */\n\tfunction runMenu(menus) {\n\t\tfor (let i = menus.length - 1; i >= 0; i--) {\n\t\t\tconst menu = menus[i];\n\t\t\tif (!menu) { continue; }\n\t\t\tif (menu.children?.length) {\n\t\t\t\trunMenu(menu.children);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst { refType, refId, refMode } = menu;\n\t\t\tif (!refType || !refId) { continue; }\n\t\t\tclear(menu, actionProps);\n\t\t\tconst subMenus = allMenuTypes.get(refType)?.get(refId);\n\t\t\tconst subButtons = allButtonTypes.get(refType)?.get(refId);\n\t\t\tif (!subMenus?.length && !subButtons?.length) {\n\t\t\t\tmenus.splice(i, 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (refMode === 'replace') {\n\t\t\t\tmenus.splice(i, 1, ...subMenus || []);\n\t\t\t} else {\n\t\t\t\tmenu.children = subMenus || [];\n\t\t\t\tmenu.buttons = subButtons || [];\n\t\t\t}\n\t\t}\n\t}\n\tconst types = ['builtin', 'module', 'group'];\n\tfor (const type of types) {\n\t\tconst menus = menuGroups.get(type);\n\t\tif (menus) {\n\t\t\tfor (const list of menus.values()) {\n\t\t\t\trunMenu(list);\n\t\t\t}\n\t\t\tallMenuTypes.set(type, menus);\n\t\t}\n\t\tconst buttons = buttonGroups.get(type);\n\t\tif (buttons) {\n\t\t\tfor (const list of buttons.values()) {\n\t\t\t\trunButton(list);\n\t\t\t}\n\t\t\tallButtonTypes.set(type, buttons);\n\t\t}\n\t\tmenuGroups.delete(type);\n\t\tbuttonGroups.delete(type);\n\t}\n\tfor (const t of menuGroups.values()) {\n\t\tfor (const menus of t.values()) {\n\t\t\trunMenu(menus);\n\t\t}\n\t}\n\tfor (const t of buttonGroups.values()) {\n\t\tfor (const list of t.values()) {\n\t\t\trunButton(list);\n\t\t}\n\t}\n\tfor (const [k, v] of buttonGroups.entries()) {\n\t\tallButtonTypes.set(k, v);\n\t}\n\tfor (const [k, v] of menuGroups.entries()) {\n\t\tallMenuTypes.set(k, v);\n\t}\n\tif (buttons) {\n\t\tfor (const button of allButtonTypes.get(groupType)?.get(group) || []) {\n\t\t\tbuttons.push(button);\n\t\t}\n\t}\n\treturn allMenuTypes.get(groupType)?.get(group) || [];\n}\n\n\nexport const Menu = {\n\t/**\n\t * @param {Menu.Define[]} list \n\t * @param {Menu.Button[]} [buttons] \n\t * @returns {(Menu | null)[]}\n\t */\n\tfromDefine(list, buttons) { return fromDefine(list, buttons); },\n\t/**\n\t * \n\t * @param {Menu.Define[]} menus \n\t * @param {string} groupType \n\t * @param {string} group \n\t * @param {Menu.Button[]} [buttons]\n\t * @returns {(Menu | null)[]}\n\t */\n\tbuild(menus, groupType, group, buttons) {\n\t\treturn buildMenu(menus, groupType, group, buttons);\n\t},\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t * @param {(menu: Menu) => boolean} [filter] \n\t * @param {boolean?} [expandSingle] \n\t */\n\tfilter(menus, filter, expandSingle) {\n\t\tconst result = filterMenu(menus, filter, expandSingle);\n\t\t/** @type {(Menu | null)[]} */\n\t\tconst list = [];\n\t\tlet divider = false;\n\t\tfor (const r of result) {\n\t\t\tif (r) {\n\t\t\t\tif (divider) {\n\t\t\t\t\tlist.push(null);\n\t\t\t\t}\n\t\t\t\tdivider = false;\n\t\t\t\tlist.push(r);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!list.length) { continue; }\n\t\t\tdivider = true;\n\t\t}\n\t\treturn list;\n\t},\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t * @param {Menu?} button \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns {Element?}\n\t */\n\tcreateButton(menus, button, options) {\n\t\tconst create = options?.create || createMenuItem;\n\t\tconst signal = options?.signal || createNeverAbortedSignal();\n\t\tconst disabled = options?.disabled || (() => false);\n\t\tconst click = options?.click || (() => { });\n\t\tconst uri = options?.uri || (() => null);\n\t\tconst commands = options?.commands || {};\n\t\treturn createMenuButton(menus, button, {\n\t\t\tsignal, disabled, click, uri, commands,\n\t\t\tcreate: (menu, {signal: mSignal, ...options} = {}) => create(menu, {\n\t\t\t\tsignal: mSignal ? AbortSignal.any([mSignal, signal]) : signal,\n\t\t\t\tbutton: Boolean(options?.button),\n\t\t\t\tdisabled: options?.disabled || disabled,\n\t\t\t\tclick: options?.click || click,\n\t\t\t\turi: options?.uri || uri,\n\t\t\t\tcommands: options?.commands || commands,\n\t\t\t}),\n\t\t});\n\t},\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns {Element?}\n\t */\n\tcreateButtons(menus, options) {\n\t\tconst create = options?.create || createMenuItem;\n\t\tconst signal = options?.signal || createNeverAbortedSignal();\n\t\tconst disabled = options?.disabled || (() => false);\n\t\tconst click = options?.click || (() => { });\n\t\tconst uri = options?.uri || (() => null);\n\t\tconst commands = options?.commands || {};\n\t\treturn createMenuButtons(menus, {\n\t\t\tsignal, disabled, click, uri, commands,\n\t\t\tcreate: (menu, {signal: mSignal, ...options} = {}) => create(menu, {\n\t\t\t\tsignal: mSignal ? AbortSignal.any([mSignal, signal]) : signal,\n\t\t\t\tbutton: Boolean(options?.button),\n\t\t\t\tdisabled: options?.disabled || disabled,\n\t\t\t\tclick: options?.click || click,\n\t\t\t\turi: options?.uri || uri,\n\t\t\t\tcommands: options?.commands || commands,\n\t\t\t}),\n\t\t});\n\t},\n\t/**\n\t * \n\t * @param {Menu} menu \n\t * @param {{[k in keyof Menu.Renderer.Options]?: Menu.Renderer.Options[k] | null}?} [options] \n\t */\n\tcreateItem(menu, options) {\n\t\treturn createMenuItem(menu, {\n\t\t\tsignal: options?.signal || createNeverAbortedSignal(),\n\t\t\tbutton: Boolean(options?.button),\n\t\t\tdisabled: options?.disabled || (() => false),\n\t\t\tclick: options?.click || (() => { }),\n\t\t\turi: options?.uri || (() => null),\n\t\t\tcommands: options?.commands || {},\n\t\t});\n\t},\n};\n","import GeneralContext from '../GeneralContext.mjs';\nimport { Menu } from '../Menu.mjs';\n\n\n\nexport class ModalHeader extends GeneralContext {\n\t#root;\n\t#container = document.createElement('div');\n\t#menu = document.createElement('div');\n\t#buttons = document.createElement('div');\n\tget container() { return this.#container; }\n\tget buttons() { return this.#buttons; }\n\t#destroyMenu = () => { };\n\t/**\n\t * \n\t * @param {*} menus \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns \n\t */\n\tsetMenu(menus, options) {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#destroyMenu();\n\t\tconst menuContainer = this.#menu;\n\t\tconst ac = new AbortController();\n\t\tconst menu = Menu.createButtons(menus, {\n\t\t\t...options,\n\t\t\tsignal: AbortSignal.any([ac.signal, this.signal]),\n\t\t});\n\t\tif (menu) { menuContainer.appendChild(menu); }\n\t\tthis.#destroyMenu = () => { ac.abort(); menu?.remove(); this.#destroyMenu = () => { }; };\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} root \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tconstructor(root, signal) {\n\t\tsuper(signal);\n\t\tthis.#root = root;\n\t\tconst container = root.appendChild(this.#container);\n\t\tconst menu = root.appendChild(this.#menu);\n\t\tconst buttons = root.appendChild(this.#buttons);\n\t\troot.className = 'Modal-header';\n\t\tcontainer.className = 'Modal-header-main';\n\t\tmenu.className = 'Modal-header-menu';\n\t\tbuttons.className = 'Modal-header-buttons';\n\t}\n}\n","import GeneralContext from '../GeneralContext.mjs';\nimport { ModalFooter } from './ModalFooter.mjs';\nimport { ModalHeader } from './ModalHeader.mjs';\nexport class Modal extends GeneralContext {\n\t#dialog = document.createElement('dialog');\n\tget returnValue() { return this.#dialog.returnValue; }\n\t#ac;\n\t#body = this.#dialog.appendChild(document.createElement('div'));\n\t#bodyMain = this.#body.appendChild(document.createElement('div'));\n\t/** @type {boolean | (() => boolean)} */\n\t#cancelable = true;\n\t/**\n\t * @param {object} [options] \n\t * @param {AbortSignal?} [options.signal] \n\t * @param {HTMLElement} [options.parent] \n\t * @param {boolean} [options.wide] \n\t * @param {boolean} [options.inlineContainer] \n\t * @param {boolean | (() => boolean)} [options.cancelable] \n\t */\n\tconstructor(options) {\n\t\tconst { signal, parent, wide, inlineContainer, cancelable } = options || {};\n\t\tconst ac = new AbortController();\n\t\tsuper(\n\t\t\tsignal instanceof AbortSignal\n\t\t\t\t? AbortSignal.any([signal, ac.signal])\n\t\t\t\t: ac.signal,\n\t\t);\n\t\tconst dialog = (parent || document.body).appendChild(this.#dialog);\n\t\tthis.#ac = ac;\n\t\tdialog.addEventListener('cancel', e => {\n\t\t\tif (e.defaultPrevented) { return; }\n\t\t\tconst cancelable = this.#cancelable;\n\t\t\tif (cancelable === true || typeof cancelable === 'function' && cancelable()) { return; }\n\t\t\te.preventDefault();\n\t\t});\n\t\tdialog.addEventListener('close', () => { ac.abort(); dialog.remove(); }, { once: true });\n\t\tthis.signal.addEventListener('abort', () => { dialog.close(); }, { once: true });\n\t\tdialog.className = 'Modal';\n\t\tthis.#body.className = 'Modal-body';\n\t\tthis.#bodyMain.className = 'Modal-body-main';\n\t\tdialog.showModal();\n\t\tif (wide) { this.wide = true; }\n\t\tif (inlineContainer) { this.inlineContainer = true; }\n\t\tif (cancelable || typeof cancelable === 'boolean') { this.cancelable = cancelable; }\n\t}\n\tget wide() { return this.#dialog.classList.contains('modal-size-wide'); }\n\tset wide(wide) {\n\t\tif (wide) {\n\t\t\tthis.#dialog.classList.add('modal-size-wide');\n\t\t} else {\n\t\t\tthis.#dialog.classList.remove('modal-size-wide');\n\t\t}\n\t}\n\tget inlineContainer() { return this.#bodyMain.classList.contains('modal-container'); }\n\tset inlineContainer(inlineContainer) {\n\t\tif (inlineContainer) {\n\t\t\tthis.#bodyMain.classList.add('modal-container');\n\t\t} else {\n\t\t\tthis.#bodyMain.classList.remove('modal-container');\n\t\t}\n\t}\n\tget cancelable() { return this.#cancelable; }\n\tset cancelable(cancelable) { this.#cancelable = cancelable; }\n\tget size() { return this.#dialog.style.inlineSize; }\n\tset size(size) { this.#dialog.style.inlineSize = size; }\n\tget maxSize() { return this.#dialog.style.maxInlineSize; }\n\tset maxSize(size) { this.#dialog.style.maxInlineSize = size; }\n\tget minSize() { return this.#dialog.style.minInlineSize; }\n\tset minSize(size) { this.#dialog.style.minInlineSize = size; }\n\tget container() { return this.#bodyMain; }\n\tclose() { this.#ac.abort(); }\n\t/**\n\t * @template T\n\t * @param {(dialog: this) => PromiseLike<T> | T} exec\n\t * @returns {Promise<T>}\n\t */\n\tasync do(exec) {\n\t\tthis.signal.throwIfAborted();\n\t\ttry {\n\t\t\treturn await Promise.race([\n\t\t\t\texec(this),\n\t\t\t\tthis.waitDestroy(true),\n\t\t\t]);\n\t\t} finally {\n\t\t\tthis.#ac.abort();\n\t\t}\n\t}\n\n\t/** @type {ModalHeader?} */\n\t#header = null;\n\t/** @type {AbortController?} */\n\t#headerAbortController = null;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateHeader(signal) {\n\t\tthis.signal.throwIfAborted();\n\t\tif (signal?.aborted) {\n\t\t\tconst headerAbortController = this.#headerAbortController;\n\t\t\tif (headerAbortController) {\n\t\t\t\theaderAbortController.abort(signal.reason);\n\t\t\t}\n\t\t\tsignal.throwIfAborted();\n\t\t}\n\t\tif (this.#header) { return this.#header; }\n\t\tconst root = document.createElement('div');\n\t\tconst abortController = new AbortController();\n\t\tthis.#dialog.insertBefore(root, this.#body);\n\t\tthis.#headerAbortController = abortController;\n\t\tconst header = new ModalHeader(root, AbortSignal.any([\n\t\t\tthis.signal,\n\t\t\tabortController.signal,\n\t\t\t...signal ? [signal] : [],\n\t\t]));\n\t\tthis.#header = header;\n\t\theader.signal.addEventListener('abort', () => {\n\t\t\tthis.#headerAbortController = null;\n\t\t\tthis.#header = null;\n\t\t\troot.remove();\n\t\t}, { once: true });\n\t\treturn this.#header;\n\t}\n\t/** @type {ModalFooter?} */\n\t#footer = null;\n\t/** @type {AbortController?} */\n\t#footAbortController = null;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateFooter(signal) {\n\t\tthis.signal.throwIfAborted();\n\t\tif (signal?.aborted) {\n\t\t\tconst footAbortController = this.#footAbortController;\n\t\t\tif (footAbortController) {\n\t\t\t\tfootAbortController.abort(signal.reason);\n\t\t\t}\n\t\t\tsignal.throwIfAborted();\n\t\t}\n\t\tif (this.#footer) { return this.#footer; }\n\t\tconst root = document.createElement('div');\n\t\tconst abortController = new AbortController();\n\t\tthis.#dialog.appendChild(root);\n\t\tthis.#footAbortController = abortController;\n\t\tconst footer = new ModalFooter(root, AbortSignal.any([\n\t\t\tthis.signal,\n\t\t\tabortController.signal,\n\t\t\t...signal ? [signal] : [],\n\t\t]));\n\t\tthis.#footer = footer;\n\n\t\tfooter.signal.addEventListener('abort', () => {\n\t\t\tthis.#footAbortController = null;\n\t\t\tthis.#footer = null;\n\t\t\troot.remove();\n\t\t}, { once: true });\n\t\treturn this.#footer;\n\t}\n}\n","import { Modal } from './Modal.mjs';\n\n/**\n * @template T\n * @overload\n * @param {(modal: Modal) => PromiseLike<T> | T} exec\n * @param {object} [options] \n * @param {AbortSignal} [options.signal] \n * @param {HTMLElement} [options.parent] \n * @returns {Promise<T>}\n */\n/**\n * @overload\n * @param {object} [options] \n * @param {AbortSignal} [options.signal] \n * @param {HTMLElement} [options.parent] \n * @returns {Modal}\n */\n\n\n/**\n * \n * @template T\n * @param {any} [p1]\n * @param {any} [p2] \n */\nexport function createModal(p1, p2) {\n\tconst options = [p1, p2].find(v => v && typeof v === 'object');\n\tconst modal = new Modal(options);\n\t/** @type {((modal: Modal) => PromiseLike<T> | T)?} */\n\tconst exec = [p1, p2].find(v => typeof v === 'function') || null;\n\tif (typeof exec !== 'function') { return modal; }\n\treturn modal.do(exec);\n}\n","import { Modal } from './Modal.mjs';\n\n/**\n * @template T\n * @template R\n * @param {T[]} list \n * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n * @param {object} [options] \n * @param {AbortSignal} [options.signal] \n * @param {HTMLElement} [options.parent] \n * @param {boolean} [options.abortable] \n * @param {string} [options.label] \n * @param {string} [options.title] \n */\nexport async function createProgressModal(list, exec, options) {\n\tconst modal = new Modal(options);\n\tconst abortable = Boolean(options?.abortable);\n\tmodal.cancelable = abortable;\n\tconst container = modal.container;\n\tconst progressContainer = container.appendChild(document.createElement('div'));\n\tconst progress = progressContainer.appendChild(document.createElement('progress'));\n\tprogress.max = list.length;\n\tconst span = progressContainer.appendChild(document.createElement('span'));\n\tspan.style.paddingInline = '8px';\n\tconst signal = modal.signal;\n\tif (abortable) {\n\t\tconst button = container.appendChild(document.createElement('button'));\n\t\tbutton.appendChild(document.createTextNode(options?.label || '中止'));\n\t\tbutton.addEventListener('click', () => modal.close());\n\t\tbutton.style.inlineSize = '100%';\n\t}\n\tprogress.value = 0;\n\tspan.innerText = `${progress.value}/${progress.max}`;\n\tconst title = options?.title;\n\tif (title) {\n\t\tmodal.createHeader().container.appendChild(document.createTextNode(title));\n\t}\n\t/** @type {PromiseSettledResult<R>[]} */\n\tconst results = [];\n\tfor (const s of list) {\n\t\tif (signal.aborted) { break; }\n\t\tresults.push(await Promise.resolve().then(() => exec(s, signal)).then(\n\t\t\tvalue => ({ status: 'fulfilled', value }),\n\t\t\treason => ({ status: 'rejected', reason }),\n\t\t));\n\t\tprogress.value++;\n\t\tspan.innerText = `${progress.value}/${progress.max}`;\n\t}\n\tmodal.close();\n\treturn results;\n}\n","/** @import { Store, StoreLayout } from '@neeloong/form' */\n/** @import { State } from '../data/index.mts' */\n/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\n/** @import { Modal } from './Modal.mjs' */\n\nimport { renderForm } from '../form/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { createComputed, createState } from '../data/index.mts';\nimport { effect } from '../data/index.mts';\n\n\n/**\n * @template [T=unknown]\n * @typedef {object} Guide.PageForm\n * @property {''?} [type]\n * @property {string | ((store: Store, state: State<T | undefined>) => string)} label\n * @property {(store: Store, state: State<T | undefined>) => boolean} [hidden]\n * @property {(store: Store, state: State<T | undefined>) => boolean} [disabled]\n * @property {StoreLayout<any>?} [layout] 表单布局\n * @property {boolean} [editable]\n * @property {boolean} [enableLink]\n * @property {string} [layoutType]\n */\n\n/**\n * \n * @template T\n * @param {Store} store \n * @param {HTMLElement} el \n * @param {Guide.PageForm<T>} page \n * @param {AbortSignal} signal\n * @param {ModelScriptConfiguration?} [model] \n */\nfunction renderPage(store, el, page, signal, model) {\n\trenderForm(store, el, {\n\t\tsignal,\n\t\tmodel,\n\t\ttype: page.layoutType,\n\t\tlayout: page.layout,\n\t\teditable: page.editable,\n\t\tenableLink: page.enableLink,\n\t});\n\n}\n\n/**\n * @typedef {object} Guide.Page\n * @property {string} label\n * @property {boolean} disabled\n * @property {boolean} hidden\n * @property {boolean} current\n * @property {number} index\n * @property {(force?: boolean) => void} switch\n */\n/**\n * @template T\n */\nexport class Guide extends GeneralContext {\n\t#store;\n\tget store() { return this.#store; }\n\t/** @type {State<T|undefined>} */\n\t#state = createState();\n\tget state() { return this.#state; }\n\t#root = document.createElement('div');\n\tget content() { return this.#root; }\n\t/** @type {PromiseWithResolvers<void>} */\n\t#promiseWithResolvers = Promise.withResolvers();\n\t#promise = this.#promiseWithResolvers.promise;\n\t#resolve = this.#promiseWithResolvers.resolve;\n\t#reject = this.#promiseWithResolvers.reject;\n\n\t#ac;\n\t#index = createState(-1);\n\tget index() { return this.#index.get(); }\n\t/** @type {State<boolean>?} */\n\t#cancelable;\n\tget cancelable() {\n\t\tconst cancelable = this.#cancelable;\n\t\tif (!cancelable) { return null; }\n\t\treturn cancelable.get();\n\t}\n\t#title;\n\tget title() {\n\t\tconst title = this.#title;\n\t\tif (!title) { return null; }\n\t\treturn title.get();\n\t}\n\t/** @type {Guide.Page[]} */\n\t#pages = [];\n\tget pages() { return [...this.#pages]; }\n\n\t#currentPage = createComputed(() => this.#pages[this.#index.get()] || null);\n\tget current() { return this.#currentPage.get(); }\n\t#prevPage = createComputed(() => {\n\t\tconst pages = this.#pages;\n\t\tfor (let index = this.#index.get() - 1; index >= 0; index--) {\n\t\t\tconst page = pages[index];\n\t\t\tif (!page.hidden && !page.disabled) { return page; }\n\t\t}\n\t\treturn null;\n\t});\n\tget prev() { return this.#prevPage.get(); }\n\t#nextPage = createComputed(() => {\n\t\tconst pages = this.#pages;\n\t\tfor (let index = this.#index.get() + 1; index < pages.length; index++) {\n\t\t\tconst page = pages[index];\n\t\t\tif (!page.hidden && !page.disabled) { return page; }\n\t\t}\n\t\treturn null;\n\t});\n\tget next() { return this.#nextPage.get(); }\n\t/** @type {State<boolean>} */\n\t#completable;\n\tget completable() { return this.#completable.get(); }\n\n\n\tcomplete() {\n\t\tif (!this.#completable.get()) { return; }\n\t\tthis.#resolve();\n\t}\n\n\tcancel() {\n\t\tif (!this.#cancelable?.get()) { return; }\n\t\tthis.#ac.abort();\n\t}\n\t/**\n\t * @param {Store} store \n\t * @param {(Guide.PageForm<T>)[]} pages\n\t * @param {object} options \n\t * @param {((store: Store, state: State<T | undefined>) =>string) | string} [options.title] \n\t * @param {ModelScriptConfiguration?} [options.model] \n\t * @param {AbortSignal?} [options.signal] \n\t * @param {((store: Store, state: State<T | undefined>) => boolean) | boolean} [options.cancelable] \n\t * @param {(store: Store, state: State<T | undefined>) => boolean} [options.completable] \n\t */\n\tconstructor(store, pages, { model, cancelable, completable, title, signal: _signal }) {\n\t\tconst ac = new AbortController();\n\t\tsuper(_signal instanceof AbortSignal ? AbortSignal.any([\n\t\t\tac.signal, _signal,\n\t\t]) : ac.signal);\n\t\tthis.#ac = ac;\n\t\tconst signal = this.signal;\n\t\tif (signal.aborted) {\n\t\t\tthis.#reject(signal.reason);\n\t\t} else {\n\t\t\tsignal.addEventListener('abort', () => this.#reject(signal.reason), { once: true });\n\t\t}\n\n\t\tthis.#store = store;\n\t\tconst state = this.#state;\n\t\tthis.#title = typeof title === 'function'\n\t\t\t? createComputed(() => title(store, state))\n\t\t\t: typeof title === 'string' && title\n\t\t\t\t? createComputed(() => title)\n\t\t\t\t: null;\n\n\t\tthis.#cancelable = cancelable === true\n\t\t\t? createComputed(() => true)\n\t\t\t: typeof cancelable === 'function'\n\t\t\t\t? createComputed(() => cancelable(store, state))\n\t\t\t\t: null;\n\t\tthis.#completable = typeof completable === 'function'\n\t\t\t? createComputed(() => completable(store, state))\n\t\t\t: createComputed(() => true);\n\n\n\t\tconst currentIndex = this.#index;\n\t\tconst handlers = this.#pages;\n\t\tconst contentArea = this.#root;\n\t\tcontentArea.classList.add('Guide-content');\n\t\tlet hideCurrentPage = () => { };\n\t\tfor (const [index, page] of pages.entries()) {\n\t\t\tconst comment = document.createComment('');\n\t\t\tcontentArea.appendChild(comment);\n\t\t\tconst { hidden: hiddenFn, disabled: disabledFn, label: labelDef } = page;\n\t\t\tconst hidden = typeof hiddenFn === 'function'\n\t\t\t\t? createComputed(() => Boolean(hiddenFn(store, state)))\n\t\t\t\t: createComputed(() => false);\n\t\t\tconst disabled = typeof disabledFn === 'function'\n\t\t\t\t? createComputed(() => Boolean(disabledFn(store, state)))\n\t\t\t\t: createComputed(() => false);\n\t\t\tconst label = typeof labelDef === 'function'\n\t\t\t\t? createComputed(() => String(labelDef(store, state) ?? ''))\n\t\t\t\t: createComputed(() => String(labelDef ?? ''));\n\t\t\tconst current = createComputed(() => currentIndex.get() === index);\n\t\t\t/** @type {HTMLElement?} */\n\t\t\tlet container = null;\n\t\t\tfunction getContainer() {\n\t\t\t\tif (container) { return container; }\n\t\t\t\tconst el = document.createElement('div');\n\t\t\t\tcontainer = el;\n\t\t\t\tcomment.replaceWith(el);\n\t\t\t\trenderPage(store, el, page, signal, model);\n\t\t\t\treturn el;\n\t\t\t}\n\t\t\thandlers.push({\n\t\t\t\tget label() { return label.get(); },\n\t\t\t\tget hidden() { return hidden.get(); },\n\t\t\t\tget disabled() { return disabled.get(); },\n\t\t\t\tget index() { return index; },\n\t\t\t\tget current() { return current.get(); },\n\t\t\t\tswitch(force = false) {\n\t\t\t\t\tif (currentIndex.get() === index) { return; }\n\t\t\t\t\tif (!force && (hidden.get() || disabled.get())) { return; }\n\t\t\t\t\thideCurrentPage();\n\t\t\t\t\tcurrentIndex.set(index);\n\t\t\t\t\tconst el = getContainer();\n\t\t\t\t\tel.hidden = false;\n\t\t\t\t\thideCurrentPage = () => { el.hidden = true; };\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tconst page = handlers.find(v => !v.hidden && !v.disabled) || handlers.find(v => !v.hidden) || handlers[0];\n\t\tpage?.switch();\n\t}\n\t/**\n\t * @template [TResult1=void]\n\t * @template [TResult2=never]\n\t * @param {((value: void) => TResult1 | PromiseLike<TResult1>)?} [onfulfilled]\n\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected]\n\t * @returns {Promise<TResult1 | TResult2>};\n\t */\n\tthen(onfulfilled, onrejected) { return this.#promise.then(onfulfilled, onrejected); }\n\t/**\n\t * @template [TResult2=never]\n\t * @param {((reason: any) => TResult2 | PromiseLike<TResult2>)?} [onrejected]\n\t * @returns {Promise<void | TResult2>};\n\t */\n\tcatch(onrejected) { return this.#promise.catch(onrejected); }\n\t/**\n\t * @param {(() => void)?} [onfinally]\n\t * @returns {Promise<void>};\n\t */\n\tfinally(onfinally) { return this.#promise.finally(onfinally); }\n\t/**\n\t * @param {Modal} modal \n\t * @param {Store} store \n\t * @param {Guide.PageForm[]} pages \n\t * @param {object} [options]\n\t * @param {string} [options.title] \n\t * @param {ModelScriptConfiguration?} [options.model] \n\t * @param {((store: Store) => boolean) | boolean} [options.cancelable] \n\t * @param {(store: Store) => boolean} [options.completable] \n\t */\n\tstatic modal(modal, store, pages, options) {\n\t\tconst { signal } = modal;\n\t\tconst guide = new Guide(store, pages, { ...options, signal });\n\t\tmodal.cancelable = () => Boolean(guide.cancelable);\n\t\tmodal.wide = true;\n\t\tmodal.inlineContainer = true;\n\t\tif (guide.title !== null) {\n\t\t\tconst header = modal.createHeader();\n\t\t\tconst container = header.container;\n\t\t\teffect(() => container.textContent = guide.title || '', signal);\n\t\t}\n\n\t\tmodal.container.appendChild(guide.content).classList.add('Guide-content');\n\n\t\tconst buttonGroup = modal.createFooter().container;\n\t\tbuttonGroup.classList.add('Guide-buttons');\n\t\tbuttonGroup.appendChild(document.createElement('div')).style.flex = '1';\n\n\t\tif (guide.cancelable !== null) {\n\t\t\tconst cancelBtn = buttonGroup.appendChild(document.createElement('button'));\n\t\t\tcancelBtn.textContent = '取消';\n\t\t\tcancelBtn.classList.add('Guide-cancel');\n\t\t\tcancelBtn.addEventListener('click', () => { guide.cancel(); });\n\t\t\teffect(() => cancelBtn.disabled = !guide.cancelable, signal);\n\t\t}\n\n\t\tconst prevBtn = buttonGroup.appendChild(document.createElement('button'));\n\t\tprevBtn.textContent = '上一步';\n\t\tprevBtn.classList.add('Guide-prev');\n\t\tprevBtn.addEventListener('click', () => { guide.prev?.switch(); });\n\t\teffect(() => prevBtn.disabled = !guide.prev, signal);\n\n\t\tconst nextBtn = buttonGroup.appendChild(document.createElement('button'));\n\t\tnextBtn.textContent = '下一步';\n\t\tnextBtn.classList.add('Guide-next');\n\t\tnextBtn.addEventListener('click', () => { guide.next?.switch(); });\n\t\teffect(() => nextBtn.disabled = !guide.next, signal);\n\n\t\tconst completeBtn = buttonGroup.appendChild(document.createElement('button'));\n\t\tcompleteBtn.textContent = '完成';\n\t\tcompleteBtn.classList.add('Guide-complete');\n\t\tcompleteBtn.addEventListener('click', () => { guide.complete(); });\n\t\teffect(() => completeBtn.disabled = !guide.completable, signal);\n\t\treturn guide;\n\t}\n}\n","export { root } from './root.mjs';\nexport { setIcon } from './setIcon.mjs';\nexport { createModal } from './createModal.mjs';\nexport { createProgressModal } from './createProgressModal.mjs';\nexport { Modal } from './Modal.mjs';\nexport { ModalFooter } from './ModalFooter.mjs';\nexport { ModalHeader } from './ModalHeader.mjs';\nexport { Guide } from './Guide.mjs';\n\n\nexport const isMac = (() => {\n\t// @ts-ignore\n\tconst userAgentData = navigator.userAgentData;\n if (userAgentData?.platform) { return userAgentData.platform === 'macOS'; }\n const isMacUA = /macintosh|mac os x/i.test(navigator.userAgent.toLowerCase());\n\tif (isMacUA) { return true; }\n return navigator.platform.toLowerCase().includes('mac');\n})();\n","/** @import { Search } from '@yongdall/common' */\n/** @import { FieldScriptConfiguration, ModelScriptConfiguration } from '../services/model.mjs' */\n/** @import { FieldFilterStyle } from '../typesDefine.mjs' */\n\nimport { Modal } from '../dom/index.mjs';\nimport { createState, effect } from '../data/index.mts';\nimport createFilter from './createFilter.mjs';\nimport { getFieldFilterOperators } from './field.mjs';\nimport { getFieldFilter } from './field.mjs';\n\n/**\n * \n * @param {Modal} modal \n * @param {ModelScriptConfiguration} modelDefine \n * @param {Search.AndItem[]?} [value] \n * @returns {Promise<Search.AndItem[]>}\n */\nexport async function showFilterDialog(modal, modelDefine, value) {\n\tconst signal = modal.signal;\n\tif (signal.aborted) { return Promise.reject(signal.reason); }\n\tconst { resolve, reject, promise } = Promise.withResolvers();\n\tconst fields = modelDefine.fields;\n\tconst values = Array.isArray(value) ? structuredClone(value) : [];\n\tconst fieldsMap = new Map(Object.entries(fields).filter(([, f]) => {\n\t\tconst type = f.type;\n\t\tif (!type || typeof type === 'object') { return false; }\n\t\treturn true;\n\t}));\n\tconst list = modal.container;\n\tconst footer = modal.createFooter().container;\n\tconst addItem = footer.appendChild(document.createElement('select'));\n\tconst okButton = footer.appendChild(document.createElement('button'));\n\tconst cancelButton = footer.appendChild(document.createElement('button'));\n\n\tfooter.classList.add(`MenuButtons`);\n\tfooter.style.display = 'flex';\n\n\n\tlist.classList.add(`FieldFilter-filters`);\n\tokButton.value = 'ok';\n\tokButton.appendChild(document.createTextNode('确认'));\n\tcancelButton.appendChild(document.createTextNode('取消'));\n\tokButton.addEventListener('click', () => resolve(values.filter(\n\t\t/** @type {(v: Search.AndItem?) => v is Search.AndItem} */(/** @type {any} */(Boolean)),\n\t)));\n\tcancelButton.addEventListener('click', () => reject());\n\n\n\n\n\tconst v = addItem.appendChild(document.createElement('option'));\n\tv.label = '<添加>';\n\tfor (const [name, f] of fieldsMap) {\n\t\tconst type = f.type;\n\t\tif (!type || typeof type === 'object') { continue; }\n\t\tconst option = document.createElement('option');\n\t\toption.value = name;\n\t\toption.label = f.label || name;\n\t\taddItem.appendChild(option);\n\t}\n\n\t/**\n\t * \n\t * @param {Search.AndItem} v\n\t * @param {string} fieldName\n\t * @param {FieldScriptConfiguration} field\n\t * @param {Search.Field[]} fields\n\t * @returns \n\t */\n\tfunction createLine(v, fieldName, field, fields) {\n\t\tconst ac = new AbortController();\n\t\tconst lineSignal = AbortSignal.any([signal, ac.signal]);\n\t\tconst line = list.appendChild(document.createElement('div'));\n\t\tline.classList.add(`FieldFilter-field`);\n\n\t\tconst fieldNameSelect = document.createElement('span');\n\t\tfieldNameSelect.classList.add(`FieldFilter-fieldName`);\n\t\tline.appendChild(fieldNameSelect);\n\t\tfieldNameSelect.appendChild(document.createTextNode(field.label || fieldName));\n\n\n\n\t\t/** @type {FieldFilterStyle} */\n\t\tconst style = { inline: true };\n\t\tconst operators = getFieldFilterOperators(field);\n\t\tconst root = document.createElement('span');\n\t\troot.classList.add(`FieldFilter-main`);\n\t\tconst operatorSelector = line.appendChild(document.createElement('select'));\n\t\toperatorSelector.classList.add(`FieldFilter-operator`);\n\n\t\tfor (const [value, label] of Object.entries(operators)) {\n\t\t\tconst option = document.createElement('option');\n\t\t\toption.value = value;\n\t\t\toption.label = label || value;\n\t\t\toperatorSelector.appendChild(option);\n\t\t}\n\n\t\tconst removeButton = document.createElement('button');\n\t\tremoveButton.classList.add(`FieldFilter-remove`);\n\t\tremoveButton.type = 'button';\n\t\tline.appendChild(removeButton);\n\t\tremoveButton.appendChild(document.createTextNode('移除'));\n\t\tremoveButton.addEventListener('click', () => {\n\t\t\tac.abort();\n\t\t\tconst index = [...list.children].indexOf(line);\n\t\t\tif (index < 0) { return; }\n\t\t\tline.remove();\n\t\t\tvalues.splice(index, 1);\n\n\t\t});\n\t\t/**\n\t\t * \n\t\t * @param {*} value \n\t\t * @param {string} operator \n\t\t * @returns \n\t\t */\n\t\tfunction find(value, operator) {\n\t\t\tconst index = [...list.children].indexOf(line);\n\t\t\tif (index < 0) { return -1; }\n\t\t\tconst item = values[index];\n\t\t\tif (!item) { return index; }\n\t\t\tif (Object.is(value, item[1])) { return index; }\n\t\t\tif (Object.is(operator, item[2])) { return index; }\n\t\t\treturn -1;\n\n\t\t}\n\n\n\t\tlet operator = v[2] || '';\n\t\toperatorSelector.value = operator;\n\t\t/** @type {any} */\n\t\tlet newValue = v[1];\n\t\tif (operatorSelector.value != operator) {\n\t\t\toperator = operatorSelector.value;\n\t\t\tnewValue = null;\n\t\t}\n\t\tconst state = createState(newValue);\n\t\tconst operatorState = createState(operator);\n\t\teffect(() => {\n\t\t\tconst value = state.get();\n\t\t\tconst operator = operatorState.get();\n\t\t\tconst index = find(value, operator);\n\t\t\tif (index < 0) { return; }\n\t\t\tvalues.splice(index, 1, [fields, value, operator]);\n\t\t}, lineSignal);\n\n\t\tlet currentComponent = getFieldFilter(field, operatorState.get());\n\n\t\tlet handleAbortController = new AbortController();\n\t\tlet currentHandle = createFilter(currentComponent, field, state, operatorState, style, AbortSignal.any([handleAbortController.signal, lineSignal]));\n\t\toperatorSelector.value = operatorState.get();\n\t\tlet handleRoot = line.insertBefore(currentHandle, removeButton);\n\t\thandleRoot.classList.add(`FieldFilter-value`);\n\n\n\t\toperatorSelector.addEventListener('input', () => {\n\t\t\tconst newOperator = operatorSelector.value;\n\t\t\tif (!(newOperator in operators)) {\n\t\t\t\t// TODO: 不存在此操作符\n\t\t\t}\n\t\t\tif (typeof newOperator !== 'string') { return; }\n\t\t\tconst component = getFieldFilter(field, newOperator);\n\t\t\tif (component === currentComponent) {\n\t\t\t\toperatorState.set(newOperator);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandleAbortController.abort();\n\t\t\thandleRoot.remove();\n\t\t\tcurrentComponent = component;\n\t\t\toperatorState.set(newOperator);\n\t\t\thandleAbortController = new AbortController();\n\t\t\tcurrentHandle = createFilter(currentComponent, field, state, operatorState, style, AbortSignal.any([handleAbortController.signal, lineSignal]));\n\t\t\thandleRoot = line.insertBefore(currentHandle, removeButton);\n\t\t\thandleRoot.classList.add(`FieldFilter-value`);\n\t\t});\n\t}\n\tfor (const v of values) {\n\t\tif (v.length < 3) { continue; }\n\t\tconst value = v[1];\n\t\tif (value && typeof value === 'object' && !Array.isArray(value)) { continue } \n\n\t\tconst fields = v[0];\n\t\tconst fieldItem = fields.length === 1 && fields[0];\n\t\tconst fieldName = typeof fieldItem === 'string' ? fieldItem : Array.isArray(fieldItem) && fieldItem.length === 1 ? fieldItem[0] : '';\n\n\t\tconst field = fieldsMap.get(fieldName);\n\t\tif (!field) {\n\t\t\t// TODO: 添加占位符\n\t\t\tcontinue;\n\t\t}\n\t\tcreateLine(v, fieldName, field, fields);\n\t}\n\n\n\n\taddItem.addEventListener('change', () => {\n\t\tconst name = addItem.value;\n\t\taddItem.value = '';\n\t\tconst field = fieldsMap.get(name);\n\t\tif (!field) { return; }\n\t\tcreateLine([[name], '', ''], name, field, [[name]]);\n\t});\n\n\n\treturn modal.do(() => promise);\n\n\n}\n/**\n * \n * @param {ModelScriptConfiguration} modelDefine \n * @param {Search.AndItem[]?} [value] \n * @param {HTMLElement} [parent] \n * @param {AbortSignal} [signal] \n * @returns {Promise<Search.AndItem[]>}\n */\nexport default async function (modelDefine, value, parent, signal) {\n\treturn new Modal({ parent, signal }).do(modal => showFilterDialog(modal, modelDefine, value));\n}\n","/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\n\nimport { Modal } from '../dom/index.mjs';\nimport { createIcon } from '../index.mjs';\n\n/**\n * \n * @param {HTMLElement} root \n * @param {PointerEvent} event \n */\nfunction pointerdown(root, { pointerId }) {\n\troot.draggable = true;\n\t/** @param {PointerEvent} event */\n\tfunction pointerup(event) {\n\t\tif (event.pointerId !== pointerId) { return; }\n\t\tif (!root) { return; }\n\t\troot.draggable = false;\n\t\twindow.removeEventListener('pointerup', pointerup, { capture: true });\n\t\twindow.removeEventListener('pointercancel', pointerup, { capture: true });\n\t}\n\twindow.addEventListener('pointerup', pointerup, { capture: true });\n\twindow.addEventListener('pointercancel', pointerup, { capture: true });\n\n}\n\n\n/**\n * \n * @param {Modal} modal \n * @param {ModelScriptConfiguration} modelDefine \n * @param {[field: string, desc?: boolean][]?} [value] \n * @returns {Promise<[field: string, desc?: boolean][]>}\n */\nexport default async function showSortDialog(modal, modelDefine, value) {\n\tconst signal = modal.signal;\n\tif (signal.aborted) { return Promise.reject(signal.reason); }\n\t/** @typedef {{field: string, desc: boolean, el: HTMLElement}} Item */\n\n\t/** @type {Item[]} */\n\tconst values = [];\n\tconst list = modal.container;\n\tlist.classList.add(`FieldSorter`);\n\tconst footer = modal.createFooter().container;\n\tfooter.classList.add(`MenuButtons`);\n\tconst addItem = footer.appendChild(document.createElement('select'));\n\tfooter.style.display = 'flex';\n\n\n\n\n\n\tconst fieldsMap = new Map(Object.entries(modelDefine.fields).filter(([, f]) => {\n\t\tconst type = f.type;\n\t\tif (!type || typeof type === 'object') { return false; }\n\t\treturn true;\n\t}).map(([k, v]) => [k, v.label || k]));\n\n\tfunction updateSelectOptions() {\n\t\taddItem.innerHTML = '';\n\t\tconst v = addItem.appendChild(document.createElement('option'));\n\t\tv.label = '<添加>';\n\t\tconst added = new Set(values.map(v => v.field));\n\t\tfor (const [name, label] of fieldsMap) {\n\t\t\tif (added.has(name)) { continue; }\n\t\t\tconst option = document.createElement('option');\n\t\t\toption.value = name;\n\t\t\toption.label = label || name;\n\t\t\taddItem.appendChild(option);\n\t\t}\n\t}\n\n\t/** @type {Item?} */\n\tlet drag = null;\n\t/**\n\t * \n\t * @param {number | Item} from \n\t * @param {number | Item} to \n\t */\n\tfunction move(from, to) {\n\t\tconst source = typeof from === 'number' ? from : values.indexOf(from);\n\t\tif (source < 0) { return; }\n\t\tconst target = typeof to === 'number' ?\n\t\t\ttypeof from === 'number' ? to : source + to\n\t\t\t: values.indexOf(to);\n\t\tif (target < 0 || target >= values.length) { return; }\n\t\tif (source === target) { return; }\n\n\t\tconst sourceEl = typeof from === 'number' ? values[source]?.el : from.el;\n\t\tconst targetEl = typeof to === 'number' ? values[target]?.el : to.el;\n\t\tif (!sourceEl || !targetEl) { return; }\n\n\t\tvalues.splice(target, 0, ...values.splice(source, 1));\n\t\tlist.insertBefore(sourceEl, target < source ? targetEl : targetEl.nextSibling);\n\t}\n\tfunction dragend() {\n\t\tdrag = null;\n\t}\n\t/**\n\t * \n\t * @param {string} field \n\t * @param {boolean?} [desc] \n\t */\n\tfunction add(field, desc) {\n\t\tconst label = fieldsMap.get(field)\n\t\tif (!label) { return; }\n\t\tif (values.find(v => v.field === field)) { return; }\n\t\tconst el = document.createElement('div');\n\t\t/** @type {Item} */\n\t\tconst item = { field, desc: Boolean(desc), el };\n\t\tvalues.push(item);\n\t\tlist.appendChild(el);\n\n\t\tel.addEventListener('dragenter', () => {\n\t\t\tif (!drag) { return; }\n\t\t\tmove(drag, item);\n\t\t});\n\t\tel.addEventListener('dragstart', (event) => {\n\t\t\tif (event.target !== event.currentTarget) { return; }\n\t\t\tdrag = item;\n\t\t});\n\t\tel.addEventListener('dragend', dragend);\n\n\n\n\t\tconst del = el.appendChild(document.createElement('button'));\n\t\tdel.addEventListener('click', () => {\n\t\t\tconst index = values.indexOf(item);\n\t\t\tif (index < 0) { return; }\n\t\t\tvalues.splice(index, 1);\n\t\t\titem.el.remove();\n\t\t\tupdateSelectOptions();\n\t\t});\n\t\tdel.title = '移除';\n\t\tdel.appendChild(createIcon('delete'));\n\n\n\t\tconst moveUp = el.appendChild(document.createElement('button'));\n\t\tmoveUp.addEventListener('click', () => { move(item, -1); });\n\t\tmoveUp.title = '上移';\n\t\tmoveUp.appendChild(createIcon('up'));\n\t\tconst moveDown = el.appendChild(document.createElement('button'));\n\t\tmoveDown.addEventListener('click', () => { move(item, 1); });\n\t\tmoveDown.title = '下移';\n\t\tmoveDown.appendChild(createIcon('down'));\n\t\tdel.classList.add('icon');\n\t\tmoveUp.classList.add('icon');\n\t\tmoveDown.classList.add('icon');\n\n\n\n\t\tconst span = el.appendChild(document.createElement('span'));\n\t\tspan.textContent = label;\n\t\tspan.classList.add('FieldSorter-label');\n\t\tspan.addEventListener('pointerdown', e => pointerdown(el, e));\n\n\n\t\tconst sort = el.appendChild(document.createElement('button'));\n\t\tfunction updateSortIcon() {\n\t\t\tsort.innerHTML = '';\n\t\t\tsort.appendChild(createIcon(item.desc ? 'sortDesc' : 'sortAsc'));\n\t\t}\n\t\tsort.addEventListener('click', () => {\n\t\t\titem.desc = !item.desc;\n\t\t\tupdateSortIcon();\n\t\t});\n\t\tupdateSortIcon();\n\t\tsort.title = '排序';\n\n\t}\n\n\n\n\n\tfor (const v of value || []) {\n\t\tif (!v) { continue; }\n\t\tadd(v[0], v[1]);\n\t}\n\tupdateSelectOptions();\n\n\n\n\taddItem.addEventListener('change', () => {\n\t\tconst name = addItem.value;\n\t\taddItem.value = '';\n\t\tadd(name, false);\n\t\tupdateSelectOptions();\n\t});\n\n\n\t/** @type {PromiseWithResolvers<[field: string, desc?: boolean][]>} */\n\tconst { resolve, reject, promise } = Promise.withResolvers();\n\tconst okButton = footer.appendChild(document.createElement('button'));\n\tconst cancelButton = footer.appendChild(document.createElement('button'));\n\tokButton.value = 'ok';\n\tokButton.appendChild(document.createTextNode('确认'));\n\tcancelButton.appendChild(document.createTextNode('取消'));\n\tokButton.addEventListener('click', () => resolve(values.map(v => [v.field, v.desc])));\n\tcancelButton.addEventListener('click', () => reject());\n\treturn promise;\n\n}\n","\n/**\n * \n * @param {string?} script \n * @param {Record<string, unknown>} scope \n * @returns {unknown}\n */\nexport function execScript(script, scope) {\n\t\tif (!script || typeof script !== 'string') { return null }\n\t\tconst s = script.slice(0,2);\n\t\tlet type = '';\n\t\tif (s === '#!' || s === '#?') {\n\t\t\tconst index = s.indexOf('\\n');\n\t\t\tif (index < 0) { return null }\n\t\t\ttype = script.slice(0, index);\n\t\t\tscript = script.slice(index + 1);\n\t\t}\n\t\t// TODO: 根据类型执行\n\t\treturn null\n}\n","/** @import DotRequest from 'dot-request' */\n/** @import { Field, PageForm } from '@yongdall/types' */\nimport { Search } from '@yongdall/common';\nimport { Menu } from '../Menu.mjs';\nimport request from '../request.mts';\nimport { ResponseError } from '../ResponseError.mjs';\nimport createPromisesAndStates from './createPromisesAndStates.mjs';\nimport toPromiseInterface from './toPromiseInterface.mjs';\nimport { Application } from './application.mts';\n\n/**\n * @typedef {object} PageConfiguration\n * @property {string} [id]\n * @property {string} [model]\n * @property {string} [user]\n * @property {string} [organization]\n * @property {string} [workspace]\n * @property {string} [page]\n * @property {string} [url]\n * @property {string} [hiddenFilter]\n * @property {string?} [widget]\n * \n * @property {string} [title]\n * @property {string} [titlePattern]\n * @property {Record<string, any>} [config]\n * @property {Field.Show[]} [fields]\n * @property {{widget: string; options: string}[]} [sides]\n * @property {Menu.Button[]} [menuButtons]\n * @property {(Menu | null)[]} [menus]\n * @property {Record<string, PageForm?>} [forms]\n * @property {Search.AndList} [where]\n * @property {Search.OrList} [orWhere]\n * @property {[field: string, desc?: boolean][]} [sort]\n * @property {number} [limit]\n * @property {string} [defaultQuery]\n * @property {{ field: string; label?: string; operator: string; state?: string }[]} [filters]\n * \n * \n * // TODO: 是否分页\n * \n */\n\n/**\n * @typedef {object} PageParam\n * @property {string?} [model]\n * @property {string?} [organization] \n * @property {string?} [user] \n * @property {string?} [workspace]\n * @property {string} type \n */\n\nconst pages = createPromisesAndStates(async (\n\t/** @type {DotRequest} */req\n) => {\n\tconst result = await req.result().then(\n\t\tv => typeof v === 'object' && v || null,\n\t\te => Promise.reject(new ResponseError(e instanceof Response ? e.status : 100)),\n\t);\n\tif (!result || typeof result !== 'object') { return null; }\n\n\t/** @type {Menu.Button[]} */\n\tconst menuButtons = [];\n\tconst menus = Menu.fromDefine(result.menus || [], menuButtons);\n\tconst { where, orWhere, sort, limit } = Search.parse(result.hiddenFilter || '');\n\t/** @type {PageConfiguration} */\n\tconst page = {\n\t\t...result,\n\t\twhere,\n\t\torWhere,\n\t\tsort,\n\t\tlimit,\n\t\tmenuButtons,\n\t\tmenus,\n\t\tforms: Object.fromEntries(result.forms?.map((/** @type {{ type: any; }} */ v) => [v.type, v]) || []),\n\t};\n\treturn page;\n}, null);\n/**\n * \n * @param {PageParam} page \n * @returns \n */\nexport function pageService({\n\tmodel, organization, user, workspace, type,\n}) {\n\tlet pageReq = request.clone().path`page`;\n\tif (model) { pageReq = pageReq.query({ model }); }\n\tif (organization) { pageReq = pageReq.query({ organization }); }\n\tif (user) { pageReq = pageReq.query({ user }); }\n\tif (workspace) { pageReq = pageReq.query({ workspace }); }\n\tconst applicationId = Application.id;\n\tif (applicationId) { pageReq = pageReq.query({ application: applicationId }); }\n\tpageReq = pageReq.query({ type });\n\tconst key = [\n\t\tmodel,\n\t\torganization,\n\t\tuser,\n\t\tworkspace,\n\t\ttype,\n\t\tapplicationId,\n\t].map(v => v || '').join('\\n');\n\tconst { get: getPage, load: loadPage } = pages.create(key, pageReq);\n\n\n\treturn {\n\t\tloadPage,\n\t\tgetPage,\n\t\tloadConfiguration() {\n\t\t\treturn loadPage().then((v) => typeof v === 'object' && v?.config);\n\t\t},\n\t\t...toPromiseInterface(loadPage),\n\t};\n\n}\n","/** @import { PageConfiguration } from '../services/page.mjs' */\n/** @import { PageRenderer } from './index.mjs' */\n/** @import { PageIdent } from './route.mjs' */\n\nimport { allHooks } from '../allHooks.mts';\nimport { importWidget } from '../import.mjs';\nimport { ResponseError } from '../ResponseError.mjs';\nimport { Application, modelService } from '../services/index.mjs';\nimport { pageService } from '../services/page.mjs';\nimport { createComputed } from '../data/index.mts';\n\n/** @typedef {() => PageRenderer | null | undefined | PromiseLike<PageRenderer | null | undefined>} PageRendererLoader */\n\n/**\n * \n * @param {string} widgetId \n * @param {string} type \n */\nfunction loadPage(widgetId, type) {\n\treturn async () => {\n\t\t/** @type {*} */\n\t\tconst r = await importWidget(widgetId);\n\t\tif (!r || typeof r !== 'object') { return r; }\n\t\treturn r[type];\n\t};\n}\nconst uriConverters = createComputed(() => allHooks.get('uriConverters').named());\n/**\n * \n * @param {string} uri \n */\nasync function convertURI(uri) {\n\tif (uri[0] === '.') { return uri; }\n\tconst u = uri.slice(0, 6).toLowerCase();\n\tif (u.startsWith('http:') || u.startsWith('https:')) { return uri; }\n\tconst type = uri.split(':', 1)[0].split('+', 1)[0];\n\tconst converters = uriConverters.get();\n\tconst converter = Object.hasOwn(converters, type) && converters[type];\n\tif (typeof converter !== 'function') { return uri; }\n\tconst url = await converter(uri);\n\treturn typeof url === 'string' && url || uri;\n}\n/**\n * \n * @param {PageIdent.Model} modelIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent.Model; page: PageConfiguration? }>}\n */\nasync function getModel(modelIdent) {\n\tconst { model, id, workspace, setting, edit, input, continuation } = modelIdent;\n\tif (continuation) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\tif (setting) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\t/** @type {PageIdent.Model} */\n\tconst ident = {\n\t\ttype: 'model',\n\t\tmodel,\n\t\tworkspace,\n\t\tid: '',\n\t\tinput: '',\n\t\tedit: false,\n\t};\n\t/** @type {'model' | 'modelCopy' | 'modelEdit' | 'modelDetails' | 'modelInput'} */\n\tlet type = 'model';\n\tif (id) {\n\t\tident.id = id;\n\t\tif (input) {\n\t\t\tident.input = input;\n\t\t\ttype = 'modelCopy';\n\t\t} else if (edit) {\n\t\t\tident.edit = true;\n\t\t\ttype = 'modelEdit';\n\t\t} else {\n\t\t\ttype = 'modelDetails';\n\t\t}\n\t} else if (input) {\n\t\tident.input = input;\n\t\ttype = 'modelInput';\n\t}\n\tlet pageInfo = await pageService({ ...ident, type });\n\tif (typeof pageInfo !== 'object') { return pageInfo; }\n\tif (!pageInfo) {\n\t\tconst info = await modelService(model)\n\t\t\t.catch(e => e instanceof ResponseError ? e.status : Promise.reject(e));\n\t\tif (!info || typeof info !== 'object') { return null; }\n\t\tconst pages = info.pages;\n\t\tconst pageDefine = pages && Object.hasOwn(pages, type) && pages[type];\n\t\tif (pageDefine === '') { return null; }\n\t\tpageInfo = typeof pageDefine === 'string'\n\t\t\t? { widget: pageDefine }\n\t\t\t: typeof pageDefine === 'object' && pageDefine || {};\n\t}\n\tconst url = pageInfo?.url;\n\tif (url && typeof url === 'string') { return { ident, widget: await convertURI(url), page: pageInfo || null }; }\n\n\tconst widgetId = pageInfo?.widget;\n\tif (widgetId === '') { return null; }\n\tconst widget = typeof widgetId === 'string'\n\t\t? loadPage(widgetId, type)\n\t\t: await Application.loadPage(type) || null;\n\tif (!widget) { return null; }\n\treturn { ident, widget, page: pageInfo || null };\n}\n\n/**\n * \n * @param {PageIdent.Workspace} workspaceIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent.Workspace; page: PageConfiguration? }>}\n */\nasync function getWorkspace(workspaceIdent) {\n\tconst { id, edit, input, workspace, setting, continuation } = workspaceIdent;\n\tif (continuation) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\tif (setting) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\t/** @type {PageIdent.Workspace} */\n\tconst ident = {\n\t\ttype: 'workspace',\n\t\tworkspace,\n\t\tid: '',\n\t\tinput: '',\n\t\tedit: false,\n\t};\n\n\t/** @type {'workspace' | 'workspaceCopy' | 'workspaceEdit' | 'workspaceDetails' | 'workspaceInput'} */\n\tlet type = 'workspace';\n\tif (id) {\n\t\tident.id = id;\n\t\tif (input) {\n\t\t\tident.input = input;\n\t\t\ttype = 'workspaceCopy';\n\t\t} else if (edit) {\n\t\t\tident.edit = true;\n\t\t\ttype = 'workspaceEdit';\n\t\t} else {\n\t\t\ttype = 'workspaceDetails';\n\t\t}\n\t} else if (input) {\n\t\tident.input = input;\n\t\ttype = 'workspaceInput';\n\t}\n\tconst pageInfo = await pageService({ ...ident, type });\n\n\tif (typeof pageInfo !== 'object') { return pageInfo; }\n\tconst url = pageInfo?.url;\n\tif (url && typeof url === 'string') { return { ident, widget: await convertURI(url), page: pageInfo || null }; }\n\n\tconst widgetId = pageInfo?.widget;\n\tif (widgetId === '') { return null; }\n\tconst widget = typeof widgetId === 'string'\n\t\t? loadPage(widgetId, type)\n\t\t: await Application.loadPage(type) || null;\n\tif (!widget) { return null; }\n\treturn { ident, widget, page: pageInfo || null };\n}\n\n/**\n * \n * @param {PageIdent.Organization} organizationIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent.Organization; page: PageConfiguration? }>}\n */\nasync function getOrganization(organizationIdent) {\n\tconst { id, organization, edit, input, workspace, setting, continuation } = organizationIdent;\n\tif (continuation) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\tif (setting) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\t/** @type {PageIdent.Organization} */\n\tconst ident = {\n\t\ttype: 'organization',\n\t\torganization,\n\t\tworkspace,\n\t\tid: '',\n\t\tinput: '',\n\t\tedit: false,\n\t};\n\n\t/** @type {'organization' | 'organizationCopy' | 'organizationEdit' | 'organizationDetails' | 'organizationInput'} */\n\tlet type = 'organization';\n\tif (id) {\n\t\tident.id = id;\n\t\tif (input) {\n\t\t\tident.input = input;\n\t\t\ttype = 'organizationCopy';\n\t\t} else if (edit) {\n\t\t\tident.edit = true;\n\t\t\ttype = 'organizationEdit';\n\t\t} else {\n\t\t\ttype = 'organizationDetails';\n\t\t}\n\t} else if (input) {\n\t\tident.input = input;\n\t\ttype = 'organizationInput';\n\t}\n\tconst pageInfo = await pageService({ ...ident, type })\n\t\t.catch(e => e instanceof ResponseError ? e.status : Promise.reject(e));\n\n\tif (typeof pageInfo !== 'object') { return null; }\n\tconst url = pageInfo?.url;\n\tif (url && typeof url === 'string') { return { ident, widget: await convertURI(url), page: pageInfo || null }; }\n\n\tconst widgetId = pageInfo?.widget;\n\tif (widgetId === '') { return null; }\n\tconst widget = typeof widgetId === 'string'\n\t\t? loadPage(widgetId, type)\n\t\t: await Application.loadPage(type) || null;\n\tif (!widget) { return null; }\n\treturn { ident, widget, page: pageInfo || null };\n}\n/**\n * \n * @param {PageIdent.User} userIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent.User; page: PageConfiguration? }>}\n */\nasync function getUser(userIdent) {\n\tconst { id, user, edit, input, workspace, setting, continuation } = userIdent;\n\tif (continuation) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\tif (setting) {\n\t\t// TODO:\n\t\treturn null;\n\t}\n\t/** @type {PageIdent.User} */\n\tconst ident = {\n\t\ttype: 'user',\n\t\tuser,\n\t\tworkspace,\n\t\tid: '',\n\t\tinput: '',\n\t\tedit: false,\n\t};\n\n\t/** @type {'user' | 'userCopy' | 'userEdit' | 'userDetails' | 'userInput'} */\n\tlet type = 'user';\n\tif (id) {\n\t\tident.id = id;\n\t\tif (input) {\n\t\t\tident.input = input;\n\t\t\ttype = 'userCopy';\n\t\t} else if (edit) {\n\t\t\tident.edit = true;\n\t\t\ttype = 'userEdit';\n\t\t} else {\n\t\t\ttype = 'userDetails';\n\t\t}\n\t} else if (input) {\n\t\tident.input = input;\n\t\ttype = 'userInput';\n\t}\n\tconst pageInfo = await pageService({ ...ident, type })\n\t\t.catch(e => e instanceof ResponseError ? e.status : Promise.reject(e));\n\n\tif (typeof pageInfo !== 'object') { return null; }\n\tconst url = pageInfo?.url;\n\tif (url && typeof url === 'string') { return { ident, widget: await convertURI(url), page: pageInfo || null }; }\n\n\tconst widgetId = pageInfo?.widget;\n\tif (widgetId === '') { return null; }\n\tconst widget = typeof widgetId === 'string'\n\t\t? loadPage(widgetId, type)\n\t\t: await Application.loadPage(type) || null;\n\tif (!widget) { return null; }\n\treturn { ident, widget, page: pageInfo || null };\n}\n\n\n/**\n * @param {PageIdent} pageIdent \n * @returns {Promise<null | { widget: PageRendererLoader | string; ident: PageIdent; page: PageConfiguration? }>}\n */\nexport default async function load(pageIdent) {\n\tconst { type } = pageIdent;\n\n\tif (type === 'model') {\n\t\treturn getModel(pageIdent);\n\t}\n\tif (type === 'workspace') {\n\t\treturn getWorkspace(pageIdent);\n\t}\n\tif (type === 'organization') {\n\t\treturn getOrganization(pageIdent);\n\t}\n\tif (type === 'user') {\n\t\treturn getUser(pageIdent);\n\t}\n\tif (type === 'configuration') {\n\t\tconst { continuation } = pageIdent;\n\t\tconst widget = await Application.loadContinuation(continuation);\n\t\tif (widget) { return { widget, ident: pageIdent, page: null }; }\n\t\treturn null;\n\t}\n\tconst widget = await Application.loadPage(type);\n\tif (widget) { return { widget, ident: pageIdent, page: null }; }\n\treturn null;\n}\n","/** @import { CurrentPage, GlobalPage } from '../typesDefine.mjs' */\n/** @import { PageInfo } from './home.mjs' */\n/** @import { PageHandle } from './PageHandle.mjs' */\nimport { User } from '../user.mjs';\nimport setUrl from './setUrl.mjs';\nimport { createComputed, createState } from '../data/index.mts';\nimport { Application } from '../services/index.mjs';\n\n\n/**\n * 页面管理器\n * @callback PageManager\n * @param {PageHandle} page\n * @returns {void}\n */\n/** @type {Map<symbol, PageManager>} */\nconst managers = new Map();\n\n/**\n * \n * @param {PageManager} manager \n * @returns \n */\nexport function addManager(manager) {\n\tconst symbol = Symbol();\n\tmanagers.set(symbol, manager);\n\treturn () => { managers.delete(symbol); };\n}\n\n/** @type {Map<PageInfo, PageHandle>} */\nconst pageMap = new Map();\nconst pages = createState([...pageMap.values()]);\n/** @type {PageHandle[]} */\nlet list = [];\nconst currentState = createState(/** @type {PageHandle | null} */(null));\n/**\n * \n * @param {PageInfo} [page] \n * @returns \n */\nexport function switchTo(page) {\n\tconst button = page && pageMap.get(page);\n\tconst current = currentState.get();\n\tif (current === button) { return; }\n\tcurrentState.set(button || null);\n\tif (button) {\n\t\tconst index = list.indexOf(button);\n\t\tif (index > 0) {\n\t\t\tlist.splice(index, 1);\n\t\t}\n\t\tif (index) {\n\t\t\tlist.push(button);\n\t\t}\n\t}\n\n}\nexport function getPages() {\n\treturn [...pages.get()];\n}\n/**\n * \n * @param {PageInfo} pageRoot \n * @param {PageHandle} state \n * @returns \n */\nexport function createButton(pageRoot, state) {\n\tpageMap.set(pageRoot, state);\n\tpages.set([...pageMap.values()]);\n\tcurrentState.set(state);\n\tfor (const manager of [...managers.values()]) {\n\t\tmanager(state);\n\t}\n}\n/**\n * \n * @param {PageInfo} node \n * @returns \n */\nexport function remove(node) {\n\tconst page = pageMap.get(node);\n\tpageMap.delete(node);\n\tpages.set([...pageMap.values()]);\n\tif (!page) { return; }\n\tconst index = list.indexOf(page);\n\tif (index >= 0) { list.splice(index, 1); }\n\tif (currentState.get() !== page) { return; }\n\tcurrentState.set(null);\n\tif (User.waitLogin) { return; }\n\tconst newPage = list[0];\n\tsetUrl(newPage?.href || Application.path, false, true);\n}\nexport function closeAll() {\n\tfor (const page of pages.get()) {\n\t\tpage.destroy();\n\t}\n}\n\nconst title = createComputed(() => currentState.get()?.title || '');\nconst icon = createComputed(() => currentState.get()?.icon || '');\nconst print = createComputed(() => currentState.get()?.print || {});\nconst loading = createComputed(() => currentState.get()?.loading || false);\nconst unsaved = createComputed(() => currentState.get()?.unsaved || false);\nconst guarded = createComputed(() => currentState.get()?.guarded || false);\n/** @type {CurrentPage} */\nexport const currentPage = {\n\tget title() { return title.get(); },\n\tget icon() { return icon.get(); },\n\tget print() { return structuredClone(print.get()); },\n\tget unsaved() { return unsaved.get(); },\n\tget guarded() { return guarded.get(); },\n\tget loading() { return loading.get(); },\n};\n\nconst globalGuarded = createComputed(() => Boolean(pages.get().find(p => p.guarded)));\n/** @type {GlobalPage} */\nexport const globalPage = {\n\tget guarded() { return globalGuarded.get(); },\n};\nwindow.addEventListener('beforeunload', event => {\n\tif (!globalPage.guarded) { return; }\n\tevent.preventDefault();\n\tevent.returnValue = \"\";\n});\n","\n/**\n * @param {HTMLElement} container\n */\nexport default function renderHome(container) {\n\tcontainer.appendChild(document.createTextNode('主页'));\n\n}\n","const loadingDiv = document.createElement('div');\nconst shadow = loadingDiv.attachShadow({\"mode\": \"closed\"});\nshadow.innerHTML = `<style>\ndiv::after, div::before {\ncontent: '';\nheight: 100px;\nwidth: 100px;\nposition: absolute;\nmargin: auto;\ninset: 0;\nborder-radius: 100%;\nbackground-color: #000;\nanimation: animation infinite linear 1.5s;\ntransform: scale(0);\n}\ndiv::before {\nanimation-delay: -0.75s;\n}\n@keyframes animation {\n0% {\ntransform: scale(0);\nopacity: .8;\nz-index: 0;\n}\n100% {\ntransform: scale(1);\nopacity: 0;\nz-index: 1;\n}\n}\n</style><div></div>`\n\n\nconst container = document.createElement('div');\n\tcontainer.appendChild(loadingDiv);\nexport default container;\n/**\n * \n * @param {boolean} show \n */\nexport function toggle(show) {\n\tcontainer.hidden = !show;\n}\n","import { root as rootContainer } from '../dom/index.mjs';\nimport { toUrl } from '../utils/index.mts';\nimport { switchTo } from './pageManager.mjs';\nimport { openUrl } from './setUrl.mjs';\nimport renderHome from './renderHome.mjs';\nimport loadingContainer, { toggle as triggerLoading } from './loadingContainer.mjs';\nimport { createState } from '../data/index.mts';\nimport { Application } from '../services/index.mjs';\n\n\nrootContainer.appendChild(loadingContainer);\n\n/**\n * @callback Trigger\n * @param {boolean} show \n * @returns {void} \n */\n\n/** \n * @typedef {object} PageInfo\n * @property {Trigger} toggle\n * @property {() => void} hide\n */\n\n/** @type {Trigger} */\nlet currentDom = triggerLoading;\n\n\n\nexport const currentDomPage = createState(/** @type {PageInfo | undefined} */(undefined));\nexport const currentPage = createState(/** @type {PageInfo?} */(null));\n\n\n/**\n * \n * @param {Trigger} dom\n * @param {PageInfo} [domPage]\n * @returns {void}\n */\nfunction setDom(dom, domPage) {\n\tif (currentDom === dom) { return; }\n\tif (currentDom) {\n\t\tcurrentDom(false);\n\t}\n\tconst old = currentDomPage.get();\n\tcurrentDom = dom;\n\tcurrentDomPage.set(domPage);\n\told?.hide();\n\tif (!dom) { return; }\n\tdom(true);\n}\n\nconst homeContainer = document.createElement('div');\nhomeContainer.hidden = true;\n/**\n * \n * @param {boolean} show \n */\nfunction triggerHome(show) {\n\thomeContainer.hidden = !show;\n}\n\nrootContainer.appendChild(homeContainer);\nconst search = createState('?')\nconst hash = createState('#')\n/** @type {Map<string, Set<any>>} */\nconst events = new Map();\n\nevents.set('update', new Set([() => {\n\thomeContainer.innerHTML = '';\n\t\treturn renderHome(homeContainer);\n}]));\n\n/**\n * \n * @param {'update' | 'destroy'} e \n */\nfunction runEvent(e) {\n\tfor (const f of [...events.get(e) || []]) {\n\t\tf();\n\t}\n}\nexport class HomeContext {\n\tget container() { return homeContainer; }\n\tget current() { return currentDom === triggerHome; }\n\tget home() { return true; }\n\tget search() { return search.get(); }\n\tget hash() { return hash.get(); }\n\t/**\n\t * \n\t * @param {string} url \n\t * @param {boolean} replace \n\t */\n\topen(url, replace) {\n\t\topenUrl(url[0] === '/' ? url : toUrl(Application.path, url), replace);\n\t}\n\t/**\n\t * \n\t * @param {'update' | 'destroy'} event \n\t * @param {() => void} listen \n\t * @returns {() => void}\n\t */\n\tlisten(event, listen) {\n\t\tconst fn = listen.bind(this);\n\t\tlet set = events.get(event);\n\t\tif (!set) {\n\t\t\tset = new Set();\n\t\t\tevents.set(event, set);\n\t\t}\n\t\tset.add(fn);\n\t\treturn () => { set?.delete(fn); };\n\t}\n}\n/**\n * @param {(ctx: HomeContext) => void} [renderer]\n */\nexport function switchHome(renderer) {\n\tif (typeof renderer !== 'function') { return false; }\n\trunEvent('destroy');\n\thomeContainer.innerHTML = '';\n\tevents.clear();\n\trenderer(new HomeContext());\n\treturn true;\n}\n\n\nfunction toShowHome() {\n\tconst oldPage = currentPage.get()\n\tif (oldPage) {\n\t\tcurrentPage.set(null);\n\t\toldPage.hide();\n\t}\n\tsetDom(triggerHome);\n\tswitchTo();\n\trunEvent('update');\n}\n/**\n * \n * @param {string} s \n * @param {string} h \n */\nexport function showHome(s, h) {\n\tsearch.set(s || '?');\n\thash.set(h || '#');\n\ttoShowHome();\n}\n\n/**\n * @type {string | number | NodeJS.Timeout | null}\n */\nlet timeoutId = null;\n\nexport function showEmpty() {\n\tif (timeoutId !== null) {\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = null;\n\t}\n\ttoShowHome();\n}\n\n/**\n * \n * @param {boolean} v \n */\nexport function setLoading(v) {\n\tconst page = currentPage.get();\n\tif (!page) { return; }\n\tif (!v) {\n\t\tif (timeoutId !== null) {\n\t\t\tclearTimeout(timeoutId);\n\t\t\ttimeoutId = null;\n\t\t}\n\t\tsetDom(page.toggle, page);\n\t\treturn;\n\t}\n\tif (timeoutId !== null) { return; }\n\ttimeoutId = setTimeout(() => {\n\t\ttimeoutId = null;\n\t\tsetDom(triggerLoading);\n\t\tswitchTo();\n\t}, 300);\n}\n\n/**\n * \n * @param {PageInfo} page \n * @param {boolean} loading \n */\nexport function switchPage(page, loading) {\n\tconst oldPage = currentPage.get();\n\tif (oldPage === page) {\n\t\tsetLoading(loading);\n\t\tswitchTo(oldPage);\n\t\treturn;\n\t}\n\tconst old = oldPage;\n\tif (!oldPage) {\n\t\trunEvent('update');\n\t}\n\tconst newPage = page;\n\tcurrentPage.set(newPage);\n\told?.hide();\n\tsetLoading(loading);\n\tswitchTo(newPage);\n}\n","/** @import { PageIdent } from './route/route.mjs' */\n\n/**\n * @param {string} t \n * @returns {string}\n */\nexport function decode(t) {\n\treturn decodeURIComponent(t.replace(/\\+/g, '%20'));\n}\n/**\n * @param {string | PageIdent} t \n * @returns {string}\n */\nexport function encode(t) {\n\treturn encodeURIComponent(typeof t === 'string' ? t : stringify(t))\n\t\t.replace(/%20/g, '+')\n\t\t.replace(/%3A/g, ':')\n\t\t.replace(/%3D/g, '=')\n\t\t.replace(/%26/g, '&')\n\t\t.replace(/%24/g, '$')\n\t\t.replace(/%40/g, '@');\n}\n\n\n/**\n * @param {string} ident\n * @returns {PageIdent}\n */\nexport function parse(ident) {\n\tif (!ident) { return { type: 'home' }; }\n\tswitch (ident) {\n\t\t// 代办\n\t\tcase '!': case '!': return { type: 'todo' };\n\t\t// 设置\n\t\tcase '-': case '-': return { type: 'settings' };\n\t\t// 搜索\n\t\tcase '=': case '=': return { type: 'search' };\n\t\t// 状态管理\n\t\tcase ':': case ':': return { type: 'status' };\n\t\t// 开发工具\n\t\tcase '+': case '+': return { type: 'devtools' };\n\t\tcase '&': // TODO: ?组织列表\n\t\tcase '@': // TODO: ?用户列表\n\t\tcase '~': // TODO: ?\n\t\tcase '_': // TODO: ?\n\t\tcase '*': // TODO: ?个人资料编辑\n\t}\n\t/**\n\t * \n\t * @param {RegExp} regex \n\t * @param {string} [def] \n\t */\n\tfunction get(regex, def) {\n\t\tconst { index } = regex.exec(ident) || { index: -1 };\n\t\tif (index < 0) { return; }\n\t\tconst value = ident.substring(index + 1) || def;\n\t\tident = ident.substring(0, index);\n\t\treturn value;\n\t}\n\tconst id = get(/[==]/);\n\n\tident = ident\n\t\t.replaceAll(/[~~]+/g, '~')\n\t\t.replaceAll(/[!!]+/g, '!')\n\t\t.replaceAll(/[@@]+/g, '@')\n\t\t.replaceAll(/[&&]+/g, '&')\n\t\t.replaceAll(/[**]/g, '*')\n\t\t.replaceAll(/[::]+/g, ':')\n\t\t.replaceAll(/[((]+/g, '(')\n\t\t.replaceAll(/[))]+/g, ')');\n\tconst edit = id ? Boolean(get(/(?<!\\*)\\*$/, '*')) : undefined;\n\tconst input = edit ? undefined : get(/\\*.*/, '*')?.replace(/[~!@&()].*/, '');\n\tconst setting = Boolean(get(/!$/, input || id ? undefined : '!'));\n\tconst regex = /(?=[~!@&])/;\n\t/** @type {Map<string, string[]>} */\n\tlet map = new Map([['&', []], ['@', []], ['~', []], ['!', []], ['*', []]]);\n\t/** @type {string[]} */\n\tlet base = [];\n\tfor (const v of ident.split(regex)) {\n\t\t(map.get(v[0]) || base).push(v);\n\t}\n\tconst continuation = map.get('!')?.join('').slice(1) || '';\n\tconst workspace = map.get('~')?.join('').slice(1) || '';\n\tconst organization = map.get('&')?.join('').slice(1) || '';\n\tconst user = map.get('@')?.join('').slice(1) || '';\n\tconst model = base.join('');\n\tif (model) {\n\t\treturn { type: 'model', model, workspace, continuation, setting, edit, input, id };\n\t}\n\tif (organization) {\n\t\treturn { type: 'organization', organization, workspace, continuation, setting, edit, input, id };\n\t}\n\tif (user) {\n\t\treturn { type: 'user', user, workspace, continuation, setting, edit, input, id };\n\t}\n\tif (workspace) {\n\t\treturn { type: 'workspace', workspace, continuation, setting, edit, input, id };\n\t}\n\tif (continuation) {\n\t\treturn { type: 'configuration', continuation, setting, edit, input, id };\n\t}\n\treturn { type: 'home' };\n}\n\n\n\n/**\n * \n * @param {PageIdent} a \n * @returns {string}\n */\nexport function stringify(a) {\n\tswitch (a.type) {\n\t\tcase 'home': return '/';\n\t\tcase 'settings': return '-';\n\t\tcase 'todo': return '!';\n\t\tcase 'search': return '=';\n\t\tcase 'status': return ':';\n\t\tcase 'devtools': return '+';\n\t}\n\tconst { model, user, organization, workspace, continuation, setting, input, edit, id } = a;\n\tlet ident = '';\n\tif (model) {\n\t\tident = model;\n\t} else if (organization) {\n\t\tident += `&${organization}`;\n\t} else if (user) {\n\t\tident += `@${user}`;\n\t}\n\tif (workspace) {\n\t\tident += `~${workspace}`;\n\t}\n\tif (continuation) {\n\t\tident += `!${continuation}`;\n\t}\n\tif (setting) {\n\t\tident += `!`;\n\t\treturn ident;\n\t}\n\tif (id) {\n\t\tif (input) {\n\t\t\tident += `*${input}`;\n\t\t} else if (edit) {\n\t\t\tident += `*`;\n\t\t}\n\t\tident += `=${id}`;\n\t\treturn ident;\n\t}\n\tif (input) {\n\t\tident += `*`;\n\t\tif (input !== '*') {\n\t\t\tident += `${input}`;\n\t\t}\n\t\treturn ident;\n\t}\n\treturn ident;\n}\n\n/**\n * \n * @param {PageIdent} a \n * @returns {Iterable<string>}\n */\nexport function* stringifyPaths(a) {\n\tswitch (a.type) {\n\t\tcase 'home': return yield '/';\n\t\tcase 'settings': return yield '-';\n\t\tcase 'todo': return yield '!';\n\t\tcase 'search': return yield '=';\n\t\tcase 'status': return yield ':';\n\t\tcase 'devtools': return yield '+';\n\t}\n\tconst { model, user, organization, workspace, continuation, setting, input, edit, id } = a;\n\tlet ident = '';\n\tif (model) {\n\t\tident = model;\n\t} else if (organization) {\n\t\tident += `&${organization}`;\n\t} else if (user) {\n\t\tident += `@${user}`;\n\t}\n\tif (ident) { yield ident; }\n\tif (workspace) {\n\t\tident += `~${workspace}`;\n\t\tyield ident;\n\t}\n\tif (continuation) {\n\t\tident += `!${continuation}`;\n\t\tyield ident;\n\t}\n\tif (setting) {\n\t\tident += `!`;\n\t\treturn yield ident;\n\t}\n\tif (id) {\n\t\tif (input) {\n\t\t\tyield ident + `*`;\n\t\t\tident += `*${input}`;\n\t\t} else if (edit) {\n\t\t\tyield ident + `=${id}`;\n\t\t\tident += `*`;\n\t\t}\n\t\tident += `=${id}`;\n\t\treturn yield ident;\n\t}\n\tif (input) {\n\t\tident += `*`;\n\t\tyield ident;\n\t\tif (input !== '*') {\n\t\t\tident += `${input}`;\n\t\t\tyield ident;\n\t\t}\n\t}\n}\n","import * as Ident from '../Ident.mjs';\nimport { Application } from '../services/index.mjs';\nimport { toUrl } from '../utils/index.mts';\n/**\n * @typedef {PageIdent.Model | PageIdent.Organization | PageIdent.User | PageIdent.Workspace | PageIdent.Page | PageIdent.Configuration} PageIdent\n */\n/**\n * @typedef {object} PageIdent.Model\n * @property {'model'} type\n * @property {string} model\n * @property {null} [organization]\n * @property {null} [user]\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {string?} [workspace]\n * @property {string} [continuation]\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n/**\n * @typedef {object} PageIdent.Organization\n * @property {'organization'} type\n * @property {null} [model]\n * @property {string} organization\n * @property {null} [user]\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {string?} [workspace]\n * @property {string} [continuation]\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n\n/**\n * @typedef {object} PageIdent.User\n * @property {'user'} type\n * @property {null} [model]\n * @property {null} [organization]\n * @property {string} user\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {string?} [workspace]\n * @property {string} [continuation]\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n\n/**\n * @typedef {object} PageIdent.Workspace\n * @property {'workspace'} type\n * @property {null} [model]\n * @property {null} [organization]\n * @property {null} [user]\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {string} workspace\n * @property {string} [continuation]\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n/**\n * @typedef {object} PageIdent.Configuration\n * @property {'configuration'} type\n * @property {null} [model]\n * @property {null} [organization]\n * @property {null} [user]\n * \n * @property {null} [error]\n * @property {null} [page]\n * @property {null} [workspace]\n * @property {string} continuation\n * @property {boolean} [setting]\n * @property {boolean} [edit]\n * @property {string} [id]\n * @property {string} [input]\n */\n\n/**\n * @typedef {object} PageIdent.Page\n * @property {'todo' | 'settings' | 'search' | 'status' | 'devtools' | 'home'} type\n * @property {null} [continuation]\n */\n\n// TODO: 用户页面\n// TODO: 组织页面\n// TODO: 全局工作区\n\n\n\n\n/**\n * @typedef {object} PageIdent.Route\n * @property {PageIdent} page\n * @property {string} pageRoot\n * @property {string} path\n * @property {boolean} redirect\n */\n\n/**\n * @callback PageIdent.Stringify\n * @param {PageIdent} pageIdent \n * @returns {string}\n */\n/**\n * @callback PageIdent.Parser\n * @param {string} path\n * @returns {PageIdent.Route}\n */\n\n/** @type {PageIdent.Parser} */\nexport let parse = (subPath) => {\n\tconst index = subPath.indexOf('/');\n\tconst pathIdent = Ident.decode(index < 0 ? subPath : subPath.slice(0, index));\n\tconst path = index < 0 ? '/' : subPath.slice(index);\n\tconst page = Ident.parse(pathIdent);\n\tconst pageId = Ident.stringify(page);\n\tconst pageRoot = Ident.encode(pageId);\n\treturn { page, pageRoot, path, redirect: pageRoot !== pathIdent };\n};\n/** @type {PageIdent.Stringify} */\nlet stringifyIdent = (page) => Ident.encode(Ident.stringify(page));\n/**\n * @param {PageIdent} page \n * @param {...string | null | undefined} paths \n * @returns {string}\n */\nexport function stringify(page, ...paths) {\n\tconst root = stringifyIdent(page);\n\tconst path = paths.filter(Boolean).join('');\n\tif (!path) { return root; }\n\tif (['/', '?', '#'].includes(path[0])) { return `${root}${path}`}\n\treturn `${root}/${path}`;\n};\n/**\n * @param {PageIdent} page \n * @param {...string | null | undefined} paths \n * @returns {string}\n */\nexport function toHref(page, ...paths) {\n\treturn toUrl(\n\t\tApplication.path,\n\t\tstringifyIdent(page),\n\t\tpaths.filter(Boolean).join(''),\n\t);\n}\n/**\n * @typedef {object} PageIdent.Router\n * @property {PageIdent.Stringify} stringify\n * @property {PageIdent.Parser} parse\n */\n/**\n * \n * @param {PageIdent.Router} options \n */\nexport function setRouter(options) {\n\tparse = options.parse;\n\tstringifyIdent = options.stringify;\n}\n\nexport const PageIdent = {\n\tget parse() { return parse },\n\tget stringify() { return stringify },\n\tget toHref() { return toHref },\n}\n","import { Code128 } from './utils/index.mts';\n/**\n * @typedef {Object} Print.MarginBox\n * @property {Print.Context[] | Print.Context} [content]\n * @property {string} [fontFamily] - 字体族\n * @property {string|number} [fontSize] - 字体大小\n * @property {boolean} [bold]\n * @property {boolean} [italic]\n * @property {string} [color] - 文字颜色\n * @property {'ltr'|'rtl'} [direction] - 文本方向\n * @property {number|string} [lineHeight] - 行高\n * @property {number} [zIndex] - 层叠顺序\n * @property {'left'|'right'|'center'|'justify'|'start'|'end'} [textAlign] - 文本对齐\n * @property {'baseline'|'sub'|'super'|'top'|'text-top'|'middle'|'bottom'|'text-bottom'|number} [verticalAlign] - 垂直对齐\n * @property {Record<'top' | 'right' | 'bottom' | 'left', string|number>} [padding] - 内边距属性对象\n * @property {Print.Border} [border] \n */\n/**\n * @typedef {string | Print.Newline | Print.Image | Print.Barcode | Print.Counter} Print.Context\n */\n/**\n * @typedef {object} Print.Newline\n * @property {'newline'} type\n */\n/**\n * @typedef {object} Print.Counter\n * @property {'page' | 'pages'} type\n */\n/**\n * @typedef {object} Print.Image\n * @property {'image'} type\n * @property {string} url\n * @property {string} [alt]\n * @property {string | number} [width]\n * @property {string | number} [height]\n */\n/**\n * @typedef {object} Print.Barcode\n * @property {'barcode' | 'code128'} type\n * @property {string} text\n * @property {string | number} [width]\n * @property {string | number} [height]\n */\n\n\n\n/**\n * @typedef {Object} Print.Border\n * @property {string|number} [width] - 边框宽度复合属性\n * @property {string} [color] - 边框颜色复合属性\n * @property {'dotted'|'dashed'|'solid'|'double'|'groove'|'ridge'|'inset'|'outset'} [style] - 边框样式复合属性\n */\n/**\n * @typedef {Object} Print.Page\n * @property {'A3'|'B4'|'A4'|'B5'|'A5'|{width?: string; height?: string}} [size] 页面尺寸\n * @property {'portrait'|'landscape'|'auto'} [orientation] 页面方向\n * @property {string|[string, string?, string?, string?]} [margin] 页边距\n * @property {Print.MarginBox} [topLeft] \n * @property {Print.MarginBox} [topCenter] \n * @property {Print.MarginBox} [topRight] \n * @property {Print.MarginBox} [bottomLeft] \n * @property {Print.MarginBox} [bottomCenter] \n * @property {Print.MarginBox} [bottomRight] \n * \n * @property {Print.MarginBox} [leftTop] \n * @property {Print.MarginBox} [leftMiddle] \n * @property {Print.MarginBox} [leftBottom] \n * @property {Print.MarginBox} [rightTop] \n * @property {Print.MarginBox} [rightMiddle] \n * @property {Print.MarginBox} [rightBottom] \n * \n * @property {Print.MarginBox} [topLeftCorner] \n * @property {Print.MarginBox} [topRightCorner] \n * @property {Print.MarginBox} [bottomLeftCorner] \n * @property {Print.MarginBox} [bottomRightCorner] \n * \n * @property {Print.Border} [topBorder] \n * @property {Print.Border} [bottomBorder] \n * @property {Print.Border} [leftBorder] \n * @property {Print.Border} [rightBorder] \n * \n * \n */\n\n/**\n * @typedef {Object} Print.Pages\n * @property {Print.Page} [left] 左侧页面/节点\n * @property {Print.Page} [right] 右侧页面/节点\n * @property {Print.Page} [first] 首页页面/节点\n * @property {Print.Page} [blank] 空白页面/节点\n */\n\n\n/**\n * @typedef {Print.Page & Print.Pages} Print\n */\n\n\n/**\n * 将字符串转换为 Base64\n * @param {string} str \n */\nfunction toSvgURI(str) {\n\treturn `data:image/svg+xml;charset=utf-8,${encodeURIComponent(str)}`;;\n}\n/**\n * \n * @param {string} val \n * @returns \n */\nfunction stringifyContentText(val) {\n\tconst text = typeof val === 'bigint' || typeof val === 'number' ? String(val) : val;\n\tif (!text || typeof text !== 'string') { return ''; }\n\n\treturn `\"${text\n\t\t.replace(/\\\\/g, '\\\\\\\\')\n\t\t.replace(/\"/g, '\\\\\"')\n\t\t.replace(/'/g, \"\\\\'\")\n\t\t.replace(/\\n/g, '\\\\A').replace(/\\r/g, '\\\\D')}\"`;\n}\n/**\n * \n * @param {string} url \n * @returns \n */\nfunction toUrlContent(url) {\n\tif (!url) { return ''; }\n\treturn `url(${stringifyContentText(url)})`;\n}\n\n/**\n * 解析尺寸,统一转换为带单位的字符串 (默认为 em)\n * @param {string | number} [val] \n */\nfunction parseDimension(val, defaultUnit = 'em') {\n\tif (!val) return null;\n\tif (typeof val === 'number') return `${val}${defaultUnit}`;\n\tif (typeof val !== 'string') { return null; }\n\tconst t = val.replace(/^\\s+|\\s+$/gs, '');\n\tif (/^\\d+(\\.\\d*)?|\\.\\d+$/.test(t)) { return `${t}${defaultUnit}`; }\n\treturn t; // 其他情况原样返回\n}\n\n/**\n * 生成图片的 SVG Data URL\n * @param {Print.Image} item \n */\nfunction imageToContent(item) {\n\tconst { url } = item;\n\tif (!url) { return ''; }\n\tconst width = parseDimension(item.width) || '';\n\tconst height = parseDimension(item.height) || '';\n\tif (!width && !height) { toUrlContent(url); }\n\tconst svgContent = `\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\">\n\t\t\t\t\t<image href=\"${item.url}\" width=\"100%\" height=\"100%\" />\n\t\t\t</svg>\n\t\t`.trim();\n\treturn toUrlContent(toSvgURI(svgContent.replace(/\\s+/g, ' ')));\n}\n\n/**\n * 生成条码的 SVG Data URL\n * @param {Print.Barcode} item \n * @param {boolean} [rotation] \n */\nfunction barcodeToContent(item, rotation) {\n\tconst bits = Code128.encode(item.text);\n\tif (!bits?.length) { return ''; }\n\n\n\n\tconst paths = [];\n\tfor (let i = 0; i < bits.length; i++) {\n\t\tif (!bits[i]) { continue; }\n\t\tconst start = i - bits.length / 2;\n\t\tlet len = 1;\n\n\t\twhile (bits[i + 1]) {\n\t\t\tlen++;\n\t\t\ti++;\n\t\t}\n\n\t\tpaths.push(rotation ? `M-0.5 ${start}v${len}h1v-${len}Z` : `M${start} -0.5h${len}v1h-${len}Z`);\n\t}\n\tif (!paths.length) { return ''; }\n\n\n\tlet height = parseDimension(item.height) || '1em';\n\tlet width = parseDimension(item.width) || `${(bits.length + 20) * 0.06}em`;\n\tlet vbWidth = bits.length + 20;\n\tlet vbHeight = 1;\n\tif (rotation) {\n\t\t[vbWidth, vbHeight] = [vbHeight, vbWidth];\n\t\t[width, height] = [height, width]\n\t}\n\n\tconst svgContent = `\n\t<svg xmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"${width}\" height=\"${height}\"\n viewBox=\"${-vbWidth / 2} ${-vbHeight / 2} ${vbWidth} ${vbHeight}\"\n\t\t\tpreserveAspectRatio=\"none\">\n\t\t<path d=\"${paths.join(\" \")}\" fill=\"black\"\n\t\t />\n\t</svg>\n\t`.trim();\n\n\tconst minifiedSvg = svgContent.replace(/\\s+/g, ' ');\n\treturn `url(${toSvgURI(minifiedSvg)})`;\n}\n/**\n * 主函数:将 Print.Context | Print.Context[] 转换为 CSS content 属性值\n * @param {Print.Context | Print.Context[]} [input] \n * @param {boolean} [rotation] \n * @returns {string} CSS content 属性的值部分 (不含分号)\n */\nfunction toContent(input, rotation) {\n\tif (input === '') { return '\"\"'; }\n\tif (!input) { return ''; }\n\n\tconst items = Array.isArray(input) ? input : [input];\n\treturn items.map(item => {\n\t\tif (!item) { return ''; }\n\t\tif (typeof item === 'string') { return stringifyContentText(item); }\n\t\tconst type = item.type;\n\t\tif (type === 'newline') { return '\"\\\\A\"'; }\n\t\tif (type === 'image') { return imageToContent(item); }\n\t\tif (type === 'barcode' || type === 'code128') { return barcodeToContent(item, rotation); }\n\t\tif (type === 'page') { return `counter(page)`; }\n\t\tif (type === 'pages') { return `counter(pages)`; }\n\t\treturn ''; // 未知类型\n\t}).filter(Boolean).join(' ');\n\n}\n/**\n * 辅助函数:将配置对象应用到具体的 CSSPageRule 上\n * 完全不拼接字符串,直接操作 style 对象\n * @param {\"top\" | \"left\" | \"right\" | \"bottom\" | ''} borderArea\n * @param {CSSStyleDeclaration?} [style] \n * @param {Print.MarginBox} [config] \n * @param {boolean} [base] \n * @param {boolean} [rotation] \n * @returns \n */\nfunction applyMarginRule(borderArea, style, config, base, rotation) {\n\tif (!style) { return; }\n\tconst {\n\t\tcontent, fontFamily, fontSize, bold, italic, color, direction, lineHeight,\n\t\tzIndex, textAlign, verticalAlign, padding, border,\n\t} = config || {};\n\n\tstyle.content = toContent(content, rotation) || (base ? '\"\"' : '');\n\tstyle.fontFamily = fontFamily || '';\n\tstyle.fontSize = parseDimension(fontSize, 'px') || '';\n\tstyle.fontWeight = typeof bold === 'boolean' ? bold ? 'bold' : 'normal' : '';\n\tstyle.fontStyle = typeof italic === 'boolean' ? italic ? 'italic' : 'normal' : '';\n\tstyle.color = color || '';\n\tstyle.direction = direction || '';\n\tstyle.lineHeight = parseDimension(lineHeight, 'em') || '';\n\tstyle.zIndex = zIndex ? String(zIndex) : '';\n\tstyle.textAlign = textAlign || '';\n\tstyle.verticalAlign = parseDimension(verticalAlign, '%') || '';\n\tstyle.direction = direction || 'inherit';\n\tstyle.whiteSpace = 'pre-wrap';\n\tconst { top, right, bottom, left } = padding || {};\n\tstyle.paddingTop = parseDimension(top, 'px') || '';\n\tstyle.paddingRight = parseDimension(right, 'px') || '';\n\tstyle.paddingBottom = parseDimension(bottom, 'px') || '';\n\tstyle.paddingLeft = parseDimension(left, 'px') || '';\n\tif (borderArea) {\n\t\tapplyBorderRule(borderArea, style, border, base);\n\t}\n}\n\n/**\n * 辅助函数:将配置对象应用到具体的 CSSPageRule 上\n * 完全不拼接字符串,直接操作 style 对象\n * @param {CSSStyleDeclaration?} [styleDeclaration] \n * @param {Print.Border} [border] \n * @param {'top' | 'left' | 'right' | 'bottom'} [area] \n * @param {boolean} [base] \n * @returns \n */\nfunction applyBorderRule(area, styleDeclaration, border, base) {\n\tif (!styleDeclaration) { return; }\n\tconst { width, color, style } = border || {};\n\tif (width || width === 0 || base) {\n\t\tstyleDeclaration.setProperty(`border-${area}-width`, typeof width === 'number' ? `${width || 0}px` : width || '1px');\n\t} else {\n\t\tstyleDeclaration.removeProperty(`border-${area}-width`);\n\t}\n\tif (color || base) {\n\t\tstyleDeclaration.setProperty(`border-${area}-color`, color || 'currentColor');\n\t} else {\n\t\tstyleDeclaration.removeProperty(`border-${area}-color`);\n\t}\n\tif (style || base) {\n\t\tstyleDeclaration.setProperty(`border-${area}-style`, style || 'none');\n\t} else {\n\t\tstyleDeclaration.removeProperty(`border-${area}-style`);\n\t}\n}\n/**\n * 辅助函数:将配置对象应用到具体的 CSSPageRule 上\n * 完全不拼接字符串,直接操作 style 对象\n * @param {ReturnType<createPageRule>} rule \n * @param {Print.Page} [config] \n * @param {boolean} [base] \n * @returns \n */\nfunction applyPageRule(rule, config, base) {\n\tif (!rule) { return; }\n\tconst style = rule.page;\n\n\tapplyMarginRule('bottom', rule.topLeft, config?.topLeft, base);\n\tapplyMarginRule('bottom', rule.topCenter, config?.topCenter, base);\n\tapplyMarginRule('bottom', rule.topRight, config?.topRight, base);\n\tapplyMarginRule('top', rule.bottomLeft, config?.bottomLeft, base);\n\tapplyMarginRule('top', rule.bottomCenter, config?.bottomCenter, base);\n\tapplyMarginRule('top', rule.bottomRight, config?.bottomRight, base);\n\n\tapplyMarginRule('right', rule.leftTop, config?.leftTop, base, true);\n\tapplyMarginRule('right', rule.leftMiddle, config?.leftMiddle, base, true);\n\tapplyMarginRule('right', rule.leftBottom, config?.leftBottom, base, true);\n\tapplyMarginRule('left', rule.rightTop, config?.rightTop, base, true);\n\tapplyMarginRule('left', rule.rightMiddle, config?.rightMiddle, base, true);\n\tapplyMarginRule('left', rule.rightBottom, config?.rightBottom, base, true);\n\n\tapplyMarginRule('', rule.topLeftCorner, config?.topLeftCorner, base);\n\tapplyMarginRule('', rule.topRightCorner, config?.topRightCorner, base);\n\tapplyMarginRule('', rule.bottomLeftCorner, config?.bottomLeftCorner, base);\n\tapplyMarginRule('', rule.bottomRightCorner, config?.bottomRightCorner, base);\n\n\n\tapplyBorderRule('top', style, config?.topBorder, base);\n\tapplyBorderRule('bottom', style, config?.bottomBorder, base);\n\tapplyBorderRule('left', style, config?.leftBorder, base);\n\tapplyBorderRule('right', style, config?.rightBorder, base);\n\n\n\n\n\tconst { size, orientation, margin } = config || {};\n\n\tlet sizeValue = '';\n\tif (typeof size === 'object' && size !== null) {\n\t\tsizeValue = `${size.width} ${size.height}`;\n\t} else if (typeof size === 'string') {\n\t\tsizeValue = size;\n\t}\n\tif (orientation) {\n\t\tsizeValue = `${sizeValue} ${orientation}`;\n\t}\n\tif (sizeValue) {\n\t\tstyle.setProperty('size', sizeValue);\n\t} else {\n\t\tstyle.removeProperty('size');\n\t}\n\n\n\tlet marginValue = '';\n\tif (typeof margin === 'string') {\n\t\tmarginValue = margin;\n\t} else if (Array.isArray(margin)) {\n\t\tmarginValue = margin.filter(v => v !== undefined).join(' ');\n\t}\n\tif (marginValue) {\n\t\tstyle.setProperty('margin', marginValue);\n\t} else {\n\t\tstyle.removeProperty('margin');\n\n\t}\n}\n\nconst sheet = new CSSStyleSheet();\ndocument.adoptedStyleSheets.push(sheet);\n\n\n/**\n * \n * @param {CSSPageRule} page \n * @param {string} selector \n * @param {boolean} [fitWidth] \n * @param {boolean} [fitHeight] \n * @returns {CSSStyleDeclaration | null}\n */\nfunction createMarginRule(page, selector, fitWidth, fitHeight) {\n\ttry {\n\t\tconst ruleIndex = page.insertRule(`${selector} {}`, page.cssRules.length);\n\n\t\tconst rule = page.cssRules[ruleIndex];\n\t\t// @ts-ignore\n\t\tif (!(rule instanceof CSSMarginRule)) { return null; }\n\t\t/** @type {CSSStyleDeclaration} */\n\t\t// @ts-ignore\n\t\tconst style = rule.style;\n\t\tif (fitWidth) {\n\t\t\tstyle.width = 'fit-content';\n\t\t}\n\t\tif (fitHeight) {\n\t\t\tstyle.height = 'fit-content';\n\t\t}\n\t\treturn style;\n\t} catch (e) {\n\t}\n\treturn null;\n\n}\n/**\n * \n * @param {CSSStyleSheet} sheet\n * @param {string} [selector] \n */\nfunction createPageRule(sheet, selector) {\n\ttry {\n\t\tconst ruleIndex = sheet.insertRule(`@page ${selector || ''} {}`, sheet.cssRules.length);\n\n\t\tconst rule = sheet.cssRules[ruleIndex];\n\t\tif (!(rule instanceof CSSPageRule)) { return null; }\n\t\treturn {\n\t\t\tpage: rule.style,\n\t\t\ttopLeft: createMarginRule(rule, '@top-left', true),\n\t\t\ttopCenter: createMarginRule(rule, '@top-center'),\n\t\t\ttopRight: createMarginRule(rule, '@top-right', true),\n\t\t\tbottomLeft: createMarginRule(rule, '@bottom-left', true),\n\t\t\tbottomCenter: createMarginRule(rule, '@bottom-center'),\n\t\t\tbottomRight: createMarginRule(rule, '@bottom-right', true),\n\n\t\t\tleftTop: createMarginRule(rule, '@left-top', false, true),\n\t\t\tleftMiddle: createMarginRule(rule, '@left-middle'),\n\t\t\tleftBottom: createMarginRule(rule, '@left-bottom', false, true),\n\t\t\trightTop: createMarginRule(rule, '@right-top', false, true),\n\t\t\trightMiddle: createMarginRule(rule, '@right-middle'),\n\t\t\trightBottom: createMarginRule(rule, '@right-bottom', false, true),\n\n\t\t\ttopLeftCorner: createMarginRule(rule, '@top-left-corner'),\n\t\t\ttopRightCorner: createMarginRule(rule, '@top-right-corner'),\n\t\t\tbottomLeftCorner: createMarginRule(rule, '@bottom-left-corner'),\n\t\t\tbottomRightCorner: createMarginRule(rule, '@bottom-right-corner'),\n\t\t};\n\t} catch (e) {\n\t}\n\treturn null;\n}\nconst commonPage = createPageRule(sheet);\nconst firstPage = createPageRule(sheet, ':first');\nconst leftPage = createPageRule(sheet, ':left');\nconst rightPage = createPageRule(sheet, ':right');\nconst blankPage = createPageRule(sheet, ':blank');\n/**\n * 核心函数:使用 CSSOM 操作,无字符串拼接\n * @param {Print} print \n */\nexport function updatePrintStyle(print) {\n\tapplyPageRule(commonPage, print, true);\n\tapplyPageRule(firstPage, print.first);\n\tapplyPageRule(leftPage, print.left);\n\tapplyPageRule(rightPage, print.right);\n\tapplyPageRule(blankPage, print.blank);\n}\n\n/**\n * @type {Print.Border}\n */\nconst BorderDefine = {\n\twidth: '2px',\n\tcolor: '#0066cc',\n\tstyle: 'solid'\n};\n/**\n * @type {Print.MarginBox}\n */\nconst MarginBoxDefine = {\n\tcontent: [],\n\tfontFamily: 'Arial, sans-serif',\n\tfontSize: '18px',\n\titalic: false,\n\tbold: true,\n\tcolor: '#333333',\n\ttextAlign: 'center',\n\tlineHeight: '1.5',\n\tdirection: 'ltr',\n\tverticalAlign: 'baseline',\n\tpadding: { top: '10px', right: '5px', bottom: '10px', left: '5px' },\n\tzIndex: 1,\n\tborder: BorderDefine,\n};\n/**\n * @type {Print.Page}\n */\nconst PrintPageDefine = {\n\tsize: 'A4',\n\torientation: 'auto',\n\tmargin: ['20px', '30px', '25px', '30px'],\n\n\ttopLeft: MarginBoxDefine,\n\ttopCenter: MarginBoxDefine,\n\ttopRight: MarginBoxDefine,\n\n\tbottomLeft: MarginBoxDefine,\n\tbottomCenter: MarginBoxDefine,\n\tbottomRight: MarginBoxDefine,\n\n\tleftTop: MarginBoxDefine,\n\tleftMiddle: MarginBoxDefine,\n\tleftBottom: MarginBoxDefine,\n\n\trightTop: MarginBoxDefine,\n\trightMiddle: MarginBoxDefine,\n\trightBottom: MarginBoxDefine,\n\n\n\ttopLeftCorner: MarginBoxDefine,\n\ttopRightCorner: MarginBoxDefine,\n\tbottomLeftCorner: MarginBoxDefine,\n\tbottomRightCorner: MarginBoxDefine,\n\n\ttopBorder: BorderDefine,\n\tbottomBorder: BorderDefine,\n\tleftBorder: BorderDefine,\n\trightBorder: BorderDefine,\n};\n\n\n/**\n * @type {Print}\n */\nexport const PrintDefine = {\n\t...PrintPageDefine,\n\tleft: PrintPageDefine,\n\tright: PrintPageDefine,\n\tfirst: PrintPageDefine,\n\tblank: PrintPageDefine,\n\n};\n","/** @import { PageConfiguration } from '../services/page.mjs' */\n/** @import { Print } from '../print.mjs' */\n/** @import { PageInfo } from './home.mjs' */\n/** @import { PageIdent } from './route.mjs' */\nimport { PrintDefine } from '../print.mjs';\nimport { toUrl } from '../utils/index.mts';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { createButton, remove } from './pageManager.mjs';\nimport { setLoading, switchPage, currentDomPage, currentPage } from './home.mjs';\nimport * as routerParser from './route.mjs';\nimport { createComputed, createDeeply, createState } from '../data/index.mts';\nimport { Application } from '../services/index.mjs';\n\n\n\n/**\n * @typedef {object} RootPageExt\n * @property {() => { path: string; search: string; hash: string; }} get\n * @property {(path: string,search: string, hash: string) => void} update\n */\n\nexport class PageHandle extends GeneralContext {\n\t/** @readonly */\n\t#title = createState(createState(''));\n\t/** @readonly */\n\t#icon = createState(createState(''));\n\t/** @readonly */\n\t#print = createState(/** @type {Print} */({}));\n\t/** @readonly */\n\t#printDeeply = createDeeply(this.#print, PrintDefine);\n\t/** @readonly */\n\t#loading = createState(true);\n\t/** @readonly */\n\t#unsaved = createState(createState(false));\n\t/** @readonly */\n\t#guarded = createState(createComputed(() => this.#unsaved.get().get()));\n\t/** @readonly */\n\t#destroyDelayed = createState(false);\n\t/** @readonly */\n\t#bootLoading = createState(true);\n\n\t#onHide = () => { };\n\t/** @readonly @type {string} */\n\t#pageId;\n\n\n\t/** @readonly @type {string} */\n\t#root;\n\t/** @readonly */\n\t#path = createState('');\n\t/** @readonly */\n\t#search = createState('');\n\t/** @readonly */\n\t#hash = createState('');\n\n\t/** @readonly */\n\t#href = createComputed(() => {\n\t\treturn toUrl(this.#root, `${this.#path.get()}${this.#search.get()}${this.#hash.get()}`);\n\t});\n\t/** @readonly */\n\t#rootPath = createComputed(() => `${this.#pageId}/${this.#path.get()}${this.#search.get()}${this.#hash.get()}`);\n\t/** @readonly @type {PageConfiguration?} */\n\t#define;\n\t/** @readonly @type {PageIdent} */\n\t#ident;\n\n\t/** @readonly @type {PageInfo & RootPageExt} */\n\t#pageHandler;\n\t/** @readonly @type {(url: string, replace?: boolean) => void} */\n\t#open;\n\t/** @readonly @type {(p: string, replace?: boolean) => void} */\n\t#setRootPath;\n\t#abortController;\n\t/**\n\t * \n\t * @param {Object} options \n\t * @param {string} options.pageId\n\t * @param {PageConfiguration?} options.define\n\t * @param {PageIdent} options.ident\n\t * @param {string} options.root\n\t * @param {string} options.path\n\t * @param {string} options.search\n\t * @param {string} options.hash\n\t * @param {PageInfo & RootPageExt} options.pageHandler\n\t * @param {(url: string, replace?: boolean) => void} options.open\n\t * @param {(p: string, replace?: boolean) => void} options.setRootPath\n\t */\n\tconstructor({\n\t\tpageId, define, ident, root, path, search, hash, pageHandler, open, setRootPath,\n\t}) {\n\n\t\tconst ac = new AbortController();\n\t\tsuper(ac.signal);\n\t\tthis.#abortController = ac;\n\t\tthis.#root = root;\n\t\tthis.#path.set(path);\n\t\tthis.#search.set(search);\n\t\tthis.#hash.set(hash);\n\n\t\tthis.#define = define;\n\t\tthis.#ident = ident;\n\n\t\tthis.#pageId = pageId;\n\n\t\tthis.#pageHandler = pageHandler;\n\t\tthis.#open = open;\n\t\tthis.#setRootPath = setRootPath;\n\n\t\tconst list = this.#onToggle;\n\t\tpageHandler.toggle = (show) => {\n\t\t\tfor (const fn of [...list]) { fn(show); }\n\t\t};\n\t\tpageHandler.hide = () => { this.#onHide(); };\n\t\tpageHandler.get = () => ({\n\t\t\tpath: this.#path.get(),\n\t\t\tsearch: this.#search.get(),\n\t\t\thash: this.#hash.get(),\n\t\t});\n\t\tpageHandler.update = (p, s, h) => {\n\t\t\tthis.#path.set(p);\n\t\t\tthis.#search.set(s);\n\t\t\tthis.#hash.set(h);\n\t\t\tswitchPage(pageHandler, this.#bootLoading.get());\n\t\t};\n\t\tconst title = define?.title;\n\t\tif (title) { this.title = title; }\n\t\tcreateButton(pageHandler, this);\n\t}\n\n\t/** @type {Set<(show: boolean) => void>} */\n\t#onToggle = new Set();\n\t/**\n\t * \n\t * @param {(show: boolean) => void} fn \n\t * @param {AbortSignal} signal \n\t */\n\tonToggle(fn, signal) {\n\t\tif (signal?.aborted) { return; }\n\t\tconst list = this.#onToggle;\n\t\tlist.add(fn);\n\t\tsignal.addEventListener('abort', () => { list.delete(fn); }, { once: true });\n\t}\n\tget bootLoading() { return this.#bootLoading.get(); }\n\tget define() { return this.#define; }\n\tget ident() { return this.#ident; }\n\tget root() { return this.#root; }\n\tget path() { return this.#path.get(); }\n\tget search() { return this.#search.get(); }\n\tget hash() { return this.#hash.get(); }\n\tget href() { return this.#href.get(); }\n\tget current() { return this.#pageHandler === currentPage.get(); }\n\tget shown() { return this.#pageHandler === currentDomPage.get(); }\n\t/** @returns {string} */\n\tget title() { return String(this.#title.get().get() ?? ''); }\n\t/** @param {string | (() => string)} title */\n\tset title(title) { this.#title.set(typeof title === 'function' ? createComputed(title) : createState(title)); }\n\t/** @returns {string} */\n\tget icon() { return String(this.#icon.get().get() ?? ''); }\n\t/** @param {string | (() => string)} icon */\n\tset icon(icon) { this.#icon.set(typeof icon === 'function' ? createComputed(icon) : createState(icon)); }\n\tget print() { return this.#printDeeply; }\n\tset print(print) { this.#print.set(structuredClone(print)); }\n\t/** @returns {boolean} */\n\tget unsaved() { return Boolean(this.#unsaved.get().get()); }\n\t/** @param {boolean | (() => boolean)} unsaved */\n\tset unsaved(unsaved) { this.#unsaved.set(typeof unsaved === 'function' ? createComputed(unsaved) : createState(unsaved)); }\n\t/** @returns {boolean} */\n\tget guarded() { return Boolean(this.#guarded.get().get()); }\n\t/** @param {boolean | (() => boolean)} guarded */\n\tset guarded(guarded) { this.#guarded.set(typeof guarded === 'function' ? createComputed(guarded) : createState(guarded)); }\n\tget loading() { return this.#loading.get(); }\n\tset loading(loading) {\n\t\tthis.#loading.set(loading);\n\t\tif (!loading) { this.#bootLoading.set(false); }\n\t\tif (this.#pageHandler !== currentPage.get()) { return; }\n\t\tif (this.#bootLoading.get()) { return; }\n\t\tsetLoading(false);\n\t}\n\n\t/**\n\t * @param {string} url\n\t * @param {string | PageIdent} [page] \n\t * @returns {string}\n\t */\n\ttoUrl(url, page) {\n\t\tif (page) {\n\t\t\tif (typeof page === 'string') {\n\t\t\t\treturn toUrl(Application.path, page, url);\n\t\t\t} else if (typeof page === 'object') {\n\t\t\t\treturn toUrl(Application.path, routerParser.stringify(page), url);\n\t\t\t}\n\t\t}\n\t\treturn url[0] === '/' ? url : toUrl(this.#root, url);\n\t}\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {boolean | string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @param {string} url\n\t * @param {boolean | string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\topen(url, page, replace) {\n\t\tthis.#open(\n\t\t\tthis.toUrl(url, typeof page === 'boolean' ? '' : page),\n\t\t\ttypeof page === 'boolean' ? page : replace,\n\t\t);\n\t}\n\t/**\n\t * \n\t * @param {string} p \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\tsetPath(p, replace) {\n\t\tconst hashIndex = p.indexOf('#');\n\t\tthis.#hash.set(hashIndex >= 0 ? p.slice(hashIndex) : '');\n\t\tif (hashIndex >= 0) { p = p.slice(0, hashIndex); }\n\t\tif (p) {\n\t\t\tconst searchIndex = p.indexOf('?');\n\t\t\tthis.#search.set(searchIndex >= 0 ? p.slice(searchIndex) : '');\n\t\t\tif (searchIndex >= 0) { p = p.slice(0, searchIndex); }\n\t\t}\n\t\tif (p) { this.#path.set(p); }\n\t\tif (this.#pageHandler !== currentPage.get()) { return; }\n\t\tthis.#setRootPath(this.#rootPath.get(), replace);\n\t}\n\t/**\n\t * \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\tshow(replace) {\n\t\tif (this.#pageHandler === currentPage.get()) { return; }\n\t\tthis.#setRootPath(this.#rootPath.get(), replace);\n\t}\n\tget destroyDeferred() { return !this.destroyed && this.#destroyDelayed.get(); }\n\t/**\n\t * @param {boolean} [defer]\n\t * @returns {boolean}\n\t */\n\tdestroy(defer) {\n\t\tconst destroyPage = () => {\n\t\t\tthis.#onHide = () => { };\n\t\t\tconst abortController = this.#abortController;\n\t\t\tif (abortController.signal.aborted) { return false; }\n\t\t\tabortController.abort();\n\t\t\tremove(this.#pageHandler);\n\t\t\treturn true;\n\t\t};\n\t\tif (!defer) {\n\t\t\treturn destroyPage();\n\t\t}\n\t\tif (this.#destroyDelayed.get() || this.destroyed) { return false; }\n\t\tthis.#destroyDelayed.set(true);\n\t\tif (currentDomPage.get() !== this.#pageHandler) {\n\t\t\treturn destroyPage();\n\t\t}\n\t\tthis.#onHide = destroyPage;\n\t\treturn true;\n\t}\n}\n","/** @import { PageContext } from './PageContext.mjs' */\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 * @param {PageContext} ctx\n * @param {unknown} error\n * @returns {void}\n */\nexport let renderError = function renderError(ctx, error) {\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\n/**\n * @param {typeof renderError} [renderer]\n */\nexport function switchRenderError(renderer) {\n\tif (typeof renderer !== 'function') { return false; }\n\trenderError = renderer;\n}\n","import { createModal, createProgressModal, Modal } from '../dom/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\n\n\n\nexport class PageFooter extends GeneralContext {\n\t#root;\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\tget sticky() { return this.#root.classList.contains('Page-sticky'); }\n\tset sticky(sticky) {\n\t\tif (sticky) {\n\t\t\tthis.#root.classList.add('Page-sticky');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-sticky');\n\t\t}\n\t}\n\tget panel() { return this.#root.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#root.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-panel');\n\t\t}\n\t}\n\t#container = document.createElement('div');\n\tget container() { return this.#container; }\n\t/**\n\t * \n\t * @param {HTMLElement} root \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tconstructor(root, signal) {\n\t\tsuper(signal);\n\t\tthis.#root = root;\n\t\tconst container = root.appendChild(this.#container);\n\t\troot.className = 'Page-footer';\n\t\tcontainer.className = 'Page-footer-main';\n\t}\n\tget unprintable() { return this.#root.classList.contains('unprintable'); }\n\tset unprintable(unprintable) {\n\t\tif (unprintable) {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t}\n\t}\n}\n","import { createModal, createProgressModal, Modal } from '../dom/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { Menu } from '../Menu.mjs';\n\n\n\nexport class PageHeader extends GeneralContext {\n\t#root;\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\tget sticky() { return this.#root.classList.contains('Page-sticky'); }\n\tset sticky(sticky) {\n\t\tif (sticky) {\n\t\t\tthis.#root.classList.add('Page-sticky');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-sticky');\n\t\t}\n\t}\n\tget panel() { return this.#root.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#root.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-panel');\n\t\t}\n\t}\n\t#container = document.createElement('div');\n\t#menu = document.createElement('div');\n\tget container() { return this.#container; }\n\t#destroyMenu = () => { };\n\t/**\n\t * \n\t * @param {*} menus \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns \n\t */\n\tsetMenu(menus, options) {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#destroyMenu();\n\t\tconst menuContainer = this.#menu;\n\t\tconst ac = new AbortController();\n\t\tconst menu = Menu.createButtons(menus, {\n\t\t\t...options,\n\t\t\tsignal: AbortSignal.any([ac.signal, this.signal]),\n\t\t});\n\t\tif (menu) { menuContainer.appendChild(menu); }\n\t\tthis.#destroyMenu = () => { ac.abort(); menu?.remove(); this.#destroyMenu = () => { }; };\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} root \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tconstructor(root, signal) {\n\t\tsuper(signal);\n\t\tthis.#root = root;\n\t\tconst container = root.appendChild(this.#container);\n\t\tconst menu = root.appendChild(this.#menu);\n\t\troot.className = 'Page-header';\n\t\tcontainer.className = 'Page-header-main';\n\t\tmenu.className = 'Page-header-menu';\n\t}\n\tget unprintable() { return this.#root.classList.contains('unprintable'); }\n\tset unprintable(unprintable) {\n\t\tif (unprintable) {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t}\n\t}\n}\n","import { createModal, createProgressModal, Modal } from '../dom/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { createState } from '../data/index.mts';\n\nexport class PageSection extends GeneralContext {\n\t#root = document.createElement('div');\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\t#container = this.#root.appendChild(document.createElement('div'));\n\tget container() { return this.#container; }\n\tget unprintable() { return this.#root.classList.contains('unprintable'); }\n\tset unprintable(unprintable) {\n\t\tif (unprintable) {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t}\n\t}\n\n\tget panel() { return this.#root.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#root.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('Page-panel');\n\t\t}\n\t}\n\t/** @readonly @type {ParentNode} */\n\t#parent;\n\t/** @readonly @type {Node} */\n\t#placeholder;\n\t#inserted = createState(false);\n\tget inserted() { return this.#inserted.get(); }\n\tinsert() {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#inserted.set(true);\n\t\tif (this.#root.nextSibling === this.#placeholder) { return; }\n\t\tthis.#parent.insertBefore(this.#root, this.#placeholder);\n\t}\n\tremove() { this.#root.remove(); this.#inserted.set(false); }\n\t/**\n\t * \n\t * @param {ParentNode} parent \n\t * @param {Node?} next \n\t * @param {boolean} inserted \n\t * @param {AbortSignal} signal \n\t * @returns \n\t */\n\tconstructor(parent, next, inserted, signal) {\n\t\tsuper(signal);\n\t\tconst placeholder = parent.insertBefore(document.createComment(''), next);\n\t\tthis.#parent = parent;\n\t\tthis.#placeholder = placeholder;\n\n\n\t\tconst root = this.#root;\n\t\tconst container = this.#container;\n\n\t\troot.className = 'Page-section';\n\t\tcontainer.className = 'Page-section-main';\n\n\t\tif (inserted) {\n\t\t\tparent.insertBefore(root, placeholder);\n\t\t}\n\t\tthis.signal.addEventListener('abort', () => {\n\t\t\troot.remove();\n\t\t\tplaceholder.remove();\n\t\t\tthis.#inserted.set(false);\n\t\t}, { once: true });\n\t}\n}\n","import { createModal, createProgressModal, Modal } from '../dom/index.mjs';\nimport GeneralContext from '../GeneralContext.mjs';\nimport { Menu } from '../Menu.mjs';\nimport { createState } from '../data/index.mts';\n\nexport class PageSider extends GeneralContext {\n\t#root = document.createElement('div');\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.signal]) : this.signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\t#header = this.#root.appendChild(document.createElement('div'));\n\t#body = this.#root.appendChild(document.createElement('div'));\n\t#title = this.#header.appendChild(document.createElement('div'));\n\t#buttons = this.#header.appendChild(document.createElement('div'));\n\t#container = this.#body.appendChild(document.createElement('div'));\n\tget container() { return this.#container; }\n\tget unprintable() { return this.#root.classList.contains('unprintable'); }\n\tset unprintable(unprintable) {\n\t\tif (unprintable) {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t}\n\t\tif (!this.#inserted.get()) { return; }\n\t\tthis.#updateParentUnprintable();\n\t}\n\t#updateParentUnprintable() {\n\t\tconst parent = this.#parent;\n\t\tif ([...parent.children].find(v => !v.classList.contains('unprintable'))) {\n\t\t\tthis.#root.classList.remove('unprintable');\n\t\t} else {\n\t\t\tthis.#root.classList.add('unprintable');\n\t\t}\n\n\t}\n\tget panel() { return this.#body.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#body.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#body.classList.remove('Page-panel');\n\t\t}\n\t}\n\tget title() { return this.#title.textContent || ''; }\n\tset title(t) { this.#title.textContent = t; }\n\t/** @type {AbortController?} */\n\t#menuAbortController = null;\n\t/** @readonly @type {ParentNode} */\n\t#parent;\n\t/** @readonly @type {Node} */\n\t#placeholder;\n\t/**\n\t * \n\t * @param {(Menu | null)[]} menus \n\t * @param {Menu?} button \n\t * @param {{[k in keyof Menu.Options]?: Menu.Options[k] | null}?} [options] \n\t * @returns \n\t */\n\tsetMenu(menus, button, options) {\n\t\tif (this.signal.aborted) { return; }\n\t\tthis.#menuAbortController?.abort();\n\t\tconst menuAbortController = new AbortController();\n\t\tthis.#menuAbortController = menuAbortController;\n\t\tconst menuSignal = AbortSignal.any([menuAbortController.signal, this.signal]);\n\t\tconst menu = Menu.createButton(menus, button, {\n\t\t\t...options,\n\t\t\tsignal: menuSignal,\n\t\t});\n\t\tif (!menu) { return; }\n\t\tthis.#header.appendChild(menu);\n\t\tmenuSignal.addEventListener('abort', () => {\n\t\t\tmenu.remove();\n\t\t}, { once: true });\n\t}\n\t#inserted = createState(false);\n\tget inserted() { return this.#inserted.get(); }\n\tinsert() {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#inserted.set(true);\n\t\tif (this.#root.nextSibling === this.#placeholder) { return; }\n\t\tthis.#parent.insertBefore(this.#root, this.#placeholder);\n\t\tthis.#updateParentUnprintable();\n\t}\n\tremove() {\n\t\tthis.#root.remove();\n\t\tthis.#inserted.set(false);\n\t\tthis.#updateParentUnprintable();\n\t}\n\t/**\n\t * \n\t * @param {ParentNode} parent \n\t * @param {Node?} next \n\t * @param {boolean} inserted \n\t * @param {AbortSignal} signal \n\t * @returns \n\t */\n\tconstructor(parent, next, inserted, signal) {\n\t\tsuper(signal);\n\t\tconst placeholder = parent.insertBefore(document.createComment(''), next);\n\t\tthis.#parent = parent;\n\t\tthis.#placeholder = placeholder;\n\t\tconst root = this.#root;\n\t\tconst header = this.#header;\n\t\tconst body = this.#body;\n\t\tconst title = this.#title;\n\t\tconst buttons = this.#buttons;\n\t\tconst container = this.#container;\n\t\troot.className = 'Page-sider';\n\t\theader.className = 'Page-sider-header';\n\t\tbody.className = 'Page-sider-body';\n\t\tcontainer.className = 'Page-sider-body-main';\n\t\ttitle.className = 'Page-sider-title';\n\t\tbuttons.className = 'Page-sider-buttons';\n\t\tif (inserted) {\n\t\t\tparent.insertBefore(root, placeholder);\n\t\t}\n\t\tthis.signal.addEventListener('abort', () => {\n\t\t\troot.remove();\n\t\t\tplaceholder.remove();\n\t\t\tthis.#inserted.set(false);\n\t\t\tthis.#updateParentUnprintable();\n\n\t\t}, { once: true });\n\t}\n}\n","import { createModal, createProgressModal, Modal, root as rootContainer } from '../dom/index.mjs';\nimport { PageFooter } from './PageFooter.mjs';\nimport { PageHeader } from './PageHeader.mjs';\nimport { PageSection } from './PageSection.mjs';\nimport { PageSider } from './PageSider.mjs';\n\n\n\n/**\n * \n * @param {ParentNode} parent \n * @param {Node?} next \n * @param {boolean} inserted \n * @param {AbortSignal} signal \n * @returns \n */\nexport function createSider(parent, next, inserted, signal) {\n\treturn new PageSider(parent, next, inserted, signal);\n}\nexport class Page {\n\t#root = document.createElement('div');\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) {\n\t\tconst signal = [p1, p2].find(v => v instanceof AbortSignal);\n\t\tconst options = {\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.#signal]) : this.#signal,\n\t\t\tparent: this.#root,\n\t\t};\n\t\treturn typeof p1 === 'function' ? createModal(p1, options) : createModal(options);\n\t}\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\tconst signal = options?.signal;\n\t\treturn createProgressModal(list, exec, {\n\t\t\t...options,\n\t\t\tsignal: signal ? AbortSignal.any([signal, this.#signal]) : this.#signal,\n\t\t\tparent: this.#root,\n\t\t});\n\t}\n\t#sides = this.#root.appendChild(document.createElement('div'));\n\t#main = this.#root.appendChild(document.createElement('div'));\n\t#body = this.#main.appendChild(document.createElement('div'));\n\t#container = this.#body.appendChild(document.createElement('div'));\n\t#destroyed = false;\n\t/** @type {PageHeader?} */\n\t#header = null;\n\t/** @type {PageFooter?} */\n\t#footer = null;\n\t/** @type {'scroll' | 'flex'} */\n\t#mode = 'scroll';\n\tget destroyed() { return this.#destroyed; }\n\tget container() { return this.#container; }\n\tget mode() { return this.#mode; }\n\tset mode(mode) {\n\t\tconst root = this.#root;\n\t\troot.classList.remove(`Page-mode-${this.#mode}`);\n\t\tthis.#mode = mode;\n\t\troot.classList.add(`Page-mode-${mode}`);\n\t}\n\tget panel() { return this.#body.classList.contains('Page-panel'); }\n\tset panel(panel) {\n\t\tif (panel) {\n\t\t\tthis.#body.classList.add('Page-panel');\n\t\t} else {\n\t\t\tthis.#body.classList.remove('Page-panel');\n\t\t}\n\t}\n\tget show() { return !this.#root.hidden; }\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\ttoggle(show) {\n\t\tthis.#root.hidden = !show;\n\t}\n\tdestroy() {\n\t\tif (this.#destroyed) { return false; }\n\t\tthis.#destroyed = true;\n\t\tthis.#root.remove();\n\t\tthis.#abortController.abort();\n\t\treturn true;\n\t}\n\t/** @type {HTMLElement?} */\n\t#headerRoot = null;\n\t/** @type {AbortController?} */\n\t#headerAbortController = null;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateHeader(signal) {\n\t\tif (this.#destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tif (signal?.aborted) {\n\t\t\tconst headerAbortController = this.#headerAbortController;\n\t\t\tif (headerAbortController) {\n\t\t\t\theaderAbortController.abort(signal.reason);\n\t\t\t}\n\t\t\tsignal.throwIfAborted();\n\t\t}\n\t\tif (this.#header) { return this.#header; }\n\t\tconst root = document.createElement('div');\n\t\tconst abortController = new AbortController();\n\t\tthis.#main.insertBefore(root, this.#main.firstChild);\n\t\tthis.#headerRoot = root;\n\t\tthis.#headerAbortController = abortController;\n\t\tconst header = new PageHeader(root, AbortSignal.any([\n\t\t\tthis.signal,\n\t\t\tabortController.signal,\n\t\t\t...signal ? [signal] : [],\n\t\t]));\n\t\tthis.#header = header;\n\t\theader.signal.addEventListener('abort', () => {\n\t\t\tthis.#headerAbortController = null;\n\t\t\tthis.#header = null;\n\t\t\tthis.#headerRoot = null;\n\t\t\troot.remove();\n\t\t}, { once: true });\n\t\treturn this.#header;\n\t}\n\t/** @type {HTMLDivElement?} */\n\t#footerRoot = null;\n\t/** @type {AbortController?} */\n\t#footAbortController = null;\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateFooter(signal) {\n\t\tif (this.#destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tif (signal?.aborted) {\n\t\t\tconst footAbortController = this.#footAbortController;\n\t\t\tif (footAbortController) {\n\t\t\t\tfootAbortController.abort(signal.reason);\n\t\t\t}\n\t\t\tsignal.throwIfAborted();\n\t\t}\n\t\tif (this.#footer) { return this.#footer; }\n\t\tconst root = document.createElement('div');\n\t\tconst abortController = new AbortController();\n\t\tthis.#main.appendChild(root);\n\t\tthis.#footerRoot = root;\n\t\tthis.#footAbortController = abortController;\n\t\tconst footer = new PageFooter(root, AbortSignal.any([\n\t\t\tthis.signal,\n\t\t\tabortController.signal,\n\t\t\t...signal ? [signal] : [],\n\t\t]));\n\t\tthis.#footer = footer;\n\n\t\tfooter.signal.addEventListener('abort', () => {\n\t\t\tthis.#footAbortController = null;\n\t\t\tthis.#footer = null;\n\t\t\tthis.#footerRoot = null;\n\t\t\troot.remove();\n\t\t}, { once: true });\n\t\treturn this.#footer;\n\t}\n\t/**\n\t * \n\t * @param {'start' | 'end' | 'before' | 'after'} position \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageSection}\n\t */\n\tcreateSection(position, inserted, signal) {\n\t\tif (this.#destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tsignal?.throwIfAborted();\n\t\tconst parent = this.#main;\n\t\tlet next = null;\n\t\tswitch (position) {\n\t\t\tcase 'start': next = this.#headerRoot || parent.firstChild; break;\n\t\t\tcase 'before': next = this.#container; break;\n\t\t\tdefault:\n\t\t\tcase 'after': next = this.#container.nextSibling; break;\n\t\t\tcase 'end': next = this.#footerRoot; break;\n\t\t}\n\t\treturn new PageSection(\n\t\t\tparent,\n\t\t\tnext,\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#abortController = new AbortController();\n\t#signal = this.#abortController.signal;\n\tget signal() { return this.#signal; }\n\tget siderOpen() { return !this.#sides.hidden; }\n\tset siderOpen(open) { this.#sides.hidden = !open; }\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 createSider(\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\tthis.#main.className = 'Page-main';\n\t\tthis.#body.className = 'Page-body';\n\t\tthis.#container.className = 'Page-body-main';\n\t\tthis.#sides.className = 'Page-sides';\n\t\tconst root = this.#root;\n\t\troot.className = 'Page';\n\t\troot.hidden = !show;\n\t\trootContainer.appendChild(root);\n\t}\n}\n","/** @import { PageFrame } from '../typesDefine.mjs' */\nimport { root } from '../dom/index.mjs';\nimport { Page } from './Page.mjs';\n\n/**\n * @param {boolean} show\n */\nexport let createPage = (show) => new Page(show);\n\n/**\n * @param {PageFrame.Context} ctx\n * @returns {PageFrame}\n */\nexport let createFrame = (ctx) => {\n\tconst iframe = document.createElement('iframe')\n\tiframe.classList.add('Page-frame');\n\tctx.loading = false;\n\tiframe.hidden = !ctx.show;\n\tiframe.src = ctx.url;\n\troot.appendChild(iframe);\n\treturn {\n\t\t/**\n\t\t * \n\t\t * @param {boolean} show \n\t\t */\n\t\ttoggle(show) {\n\t\t\tiframe.hidden = !show;\n\t\t},\n\t\tdestroy() {\n\t\t\tiframe.remove();\n\t\t}\n\t};\n};\n\n/**\n * @param {(show: boolean) => Page} [renderer]\n * @param {(ctx: PageFrame.Context) => PageFrame} [frame]\n */\nexport function switchCreatePage(renderer, frame) {\n\tif (typeof renderer === 'function') {\n\t\tcreatePage = renderer;\n\t}\n\tif (typeof frame === 'function') {\n\t\tcreateFrame = frame;\n\t}\n}\n","/** @import { PageConfiguration } from '../services/page.mjs' */\n/** @import { PageSectionParam } from '../typesDefine.mjs' */\n/** @import { Page } from './Page.mjs' */\n/** @import { PageIdent } from './route.mjs' */\n/** @import { PageHandle } from './PageHandle.mjs' */\n/** @import { PageSection } from './PageSection.mjs' */\n/** @import { PageHeader } from './PageHeader.mjs' */\n/** @import { PageFooter } from './PageFooter.mjs' */\nimport GeneralContext from '../GeneralContext.mjs';\nimport { importWidget } from '../import.mjs';\nimport { renderError } from './renderError.mjs';\nimport { createPage } from './createPage.mjs';\nimport { createState } from '../data/index.mts';\n/** @import { Modal } from '../dom/index.mjs' */\n\n\n\n\nexport class PageContext extends GeneralContext {\n\t/** @readonly */\n\t#destroyDelayed = createState(false);\n\t/** @readonly @type {Page} */\n\t#pageUI;\n\t/** @readonly @type {HTMLElement} */\n\t#container;\n\t/** @readonly @type {AbortController} */\n\t#abortController;\n\t/** @readonly @type {PageHandle} */\n\t#state;\n\t/**\n\t * \n\t * @param {PageHandle} state \n\t */\n\tconstructor(state) {\n\n\t\tconst ac = new AbortController();\n\t\tsuper(AbortSignal.any([ac.signal, state.signal]));\n\t\tthis.#state = state;\n\t\tthis.#abortController = ac;\n\n\t\tconst pageUI = createPage(state.current && !state.bootLoading);\n\t\tthis.#pageUI = pageUI;\n\t\tthis.#container = pageUI.container;\n\t\tif (this.signal.aborted) {\n\t\t\tpageUI.destroy?.();\n\t\t\treturn;\n\t\t}\n\t\tthis.signal.addEventListener('abort', () => {\n\t\t\tpageUI.destroy?.();\n\t\t}, { once: true });\n\t\tstate.onToggle((show) => { pageUI.toggle(show && !state.bootLoading); }, this.signal);\n\n\t}\n\t/**\n\t * \n\t * @param {unknown} [err] \n\t * @returns \n\t */\n\tsetError(err) {\n\t\tif (this.destroyed) { return; }\n\t\tthis.#abortController.abort();\n\t\tconst ctx = new PageContext(this.#state);\n\t\trenderError(ctx, err);\n\t}\n\n\tget bootLoading() { return this.#state.bootLoading; }\n\tget define() { return this.#state.define; }\n\tget ident() { return this.#state.ident; }\n\tget root() { return this.#state.root; }\n\tget path() { return this.#state.path; }\n\tget search() { return this.#state.search; }\n\tget hash() { return this.#state.hash; }\n\tget href() { return this.#state.href; }\n\tget current() { return this.#state.current; }\n\tget shown() { return this.#state.shown; }\n\t/** @returns {string} */\n\tget title() { return this.#state.title; }\n\t/** @param {string | (() => string)} title */\n\tset title(title) { this.#state.title = title; }\n\t/** @returns {string} */\n\tget icon() { return this.#state.icon; }\n\t/** @param {string | (() => string)} icon */\n\tset icon(icon) { this.#state.icon = icon; }\n\tget print() { return this.#state.print; }\n\tset print(print) { this.#state.print = print; }\n\t/** @returns {boolean} */\n\tget unsaved() { return this.#state.unsaved; }\n\t/** @param {boolean | (() => boolean)} unsaved */\n\tset unsaved(unsaved) { this.#state.unsaved = unsaved; }\n\t/** @returns {boolean} */\n\tget guarded() { return this.#state.guarded; }\n\t/** @param {boolean | (() => boolean)} guarded */\n\tset guarded(guarded) { this.#state.guarded = guarded; }\n\tget loading() { return this.#state.loading; }\n\tset loading(loading) { this.#state.loading = loading; }\n\n\tget container() { return this.#container; }\n\tget panel() { return this.#pageUI.panel; }\n\tset panel(panel) { this.#pageUI.panel = Boolean(panel); }\n\tget mode() { return this.#pageUI.mode; }\n\tset mode(mode) {\n\t\tif (!['scroll', 'flex'].includes(mode)) { return; }\n\t\tthis.#pageUI.mode = mode;\n\t}\n\t/**\n\t * @template T\n\t * @overload\n\t * @param {(modal: Modal) => PromiseLike<T> | T} exec\n\t * @param {AbortSignal} [signal] \n\t * @returns {Promise<T>}\n\t */\n\t/**\n\t * @overload\n\t * @param {AbortSignal} [signal] \n\t * @returns {Modal}\n\t */\n\t/**\n\t * \n\t * @template T\n\t * @param {any} [p1]\n\t * @param {any} [p2] \n\t * @returns {any}\n\t */\n\tcreateModal(p1, p2) { return this.#pageUI.createModal(p1, p2); }\n\t/**\n\t * @template T\n\t * @template R\n\t * @param {T[]} list \n\t * @param {(item: T, signal: AbortSignal) => PromiseLike<R> | R} exec \n\t * @param {object} [options] \n\t * @param {AbortSignal} [options.signal] \n\t * @param {boolean} [options.abortable] \n\t * @param {string} [options.label] \n\t * @param {string} [options.title] \n\t */\n\tcreateProgressModal(list, exec, options) {\n\t\treturn this.#pageUI.createProgressModal(list, exec, options);\n\t}\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageHeader}\n\t */\n\tcreateHeader(signal) { return this.#pageUI.createHeader(signal); }\n\t/**\n\t * \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageFooter}\n\t */\n\tcreateFooter(signal) { return this.#pageUI.createFooter(signal); }\n\t/**\n\t * \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns \n\t */\n\tcreateSider(inserted, signal) {\n\t\treturn this.#pageUI.createSider(inserted, signal);\n\t}\n\t/**\n\t * \n\t * @param {'start' | 'end' | 'before' | 'after'} position \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageSection}\n\t */\n\tcreateSection(position, inserted, signal) {\n\t\treturn this.#pageUI.createSection(position, inserted, signal);\n\t}\n\t/**\n\t * \n\t * @param {{widget: string; options: string}[]} sides \n\t * @param {PageSectionParam} param \n\t */\n\trenderSides(sides, param) {\n\t\tfor (const def of sides) {\n\t\t\tconst { widget } = def;\n\t\t\tif (!widget) { continue; }\n\t\t\tconst ac = new AbortController();\n\t\t\tconst sider = this.#pageUI.createSider(false, ac.signal);\n\t\t\tif (!sider) { continue; }\n\t\t\timportWidget(widget).then(fn => {\n\t\t\t\tif (typeof fn !== 'function') {\n\t\t\t\t\tac.abort();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsider.insert();\n\t\t\t\tfn(sider, def, param);\n\t\t\t});\n\t\t}\n\n\t}\n\t/**\n\t * @param {string} url\n\t * @param {string | PageIdent} [page] \n\t * @returns {string}\n\t */\n\ttoUrl(url, page) { return this.#state.toUrl(url, page); }\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @overload\n\t * @param {string} url\n\t * @param {boolean | string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\t/**\n\t * @param {string} url\n\t * @param {boolean | string | PageIdent} [page] \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\topen(url, page, replace) { return this.#state.open(url, page, replace); }\n\t/**\n\t * \n\t * @param {string} p \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\tsetPath(p, replace) { return this.#state.setPath(p, replace); }\n\t/**\n\t * \n\t * @param {boolean} [replace] \n\t * @returns {void}\n\t */\n\tshow(replace) { return this.#state.show(replace); }\n\tget destroyDeferred() { return !this.destroyed && this.#destroyDelayed.get(); }\n\t/**\n\t * @param {boolean} [defer]\n\t * @returns {boolean}\n\t */\n\tdestroy(defer) { return this.#state.destroy(defer); }\n}\n","/** @import { PageHandle } from './PageHandle.mjs' */\nimport { createFrame } from './createPage.mjs';\n\n\n/**\n * \n * @param {PageHandle} state \n * @param {string} url \n * @param {string} [title] \n */\nexport function createPageFrame(state, url, title = '') {\n\tif (title) { state.title = title; }\n\tconst signal = state.signal;\n\n\tif (signal.aborted) { return; }\n\tconst pageUI = createFrame({\n\t\tget url() { return url;},\n\t\tget show() { return state.current && !state.bootLoading;},\n\t\tget title() { return state.title; },\n\t\tset title(title) { if (signal.aborted) { return; } state.title = title; },\n\t\tget icon() { return state.icon; },\n\t\tset icon(icon) { if (signal.aborted) { return; } state.icon = icon; },\n\t\tget loading() { return state.loading; },\n\t\tset loading(loading) { if (signal.aborted) { return; } state.loading = loading; },\n\t});\n\tsignal.addEventListener('abort', () => {\n\t\tpageUI.destroy?.();\n\t}, { once: true });\n\tstate.onToggle((show) => { pageUI.toggle(show && !state.bootLoading); }, signal);\n\n}\n","/** @import { PageInfo } from './home.mjs' */\n/** @import { PageIdent } from './route.mjs' */\n/** @import { RootPageExt } from './PageHandle.mjs' */\nimport load from './load.mjs';\nimport { switchPage, currentPage } from './home.mjs';\nimport * as routerParser from './route.mjs';\nimport { PageHandle } from './PageHandle.mjs';\nimport { PageContext } from './PageContext.mjs';\nimport { createPageFrame } from './createPageFrame.mjs';\n\n/** @type {Map<string, PageInfo & RootPageExt>} */\nconst pages = new Map();\n\n/**\n * \n * @param {string} pageRoot \n * @returns \n */\nexport function find(pageRoot) {\n\treturn pages.get(pageRoot)?.get();\n}\n/**\n * \n * @param {(url: string, replace?: boolean) => void} open \n * @param {PageIdent} pageIdent \n * @param {string} parentRoot \n * @param {string} pageRoot \n * @param {string} path \n * @param {string} search \n * @param {string} hash \n * @param {(p: string, replace?: boolean) => void} setRootPath \n * @returns \n */\nexport default async function showPage(\n\topen,\n\tpageIdent,\n\tparentRoot,\n\tpageRoot,\n\tpath,\n\tsearch,\n\thash,\n\tsetRootPath,\n) {\n\tlet pageId = pageRoot;\n\tlet old = pages.get(pageId);\n\tif (old) {\n\t\told.update(path, search, hash);\n\t\treturn;\n\t}\n\t/** @type {PageInfo & RootPageExt} */\n\tconst pageHandler = {\n\t\ttoggle() { },\n\t\thide() { },\n\t\tget() { return { path, search, hash }; },\n\t\tupdate(p, s, h) {\n\t\t\tpath = p;\n\t\t\tsearch = s;\n\t\t\thash = h;\n\t\t\tswitchPage(pageHandler, true);\n\t\t},\n\t};\n\tpages.set(pageId, pageHandler);\n\tswitchPage(pageHandler, true);\n\tconst data = await load(pageIdent).catch(() => null);\n\tif (pageHandler !== currentPage.get()) {\n\t\t// 请求完数据前已经切换了,那就移除\n\t\tpages.delete(pageId);\n\t\treturn;\n\t}\n\tif (!data) {\n\t\tconst state = new PageHandle({\n\t\t\troot: `${parentRoot}${pageId}`,\n\t\t\tdefine: null,\n\t\t\tident: pageIdent,\n\t\t\tpageId: pageId,\n\t\t\tpath, search, hash,\n\t\t\tpageHandler,\n\t\t\topen,\n\t\t\tsetRootPath,\n\t\t});\n\t\tstate.signal.addEventListener('abort', () => {\n\t\t\tpages.delete(pageId);\n\t\t}, { once: true });\n\t\t// 出现错误,显示错误\n\t\tnew PageContext(state).setError(404);\n\t\treturn;\n\t}\n\tconst newPage = data.ident;\n\t// TODO: 获取新页面的 pageRoot\n\tconst newPageRoot = routerParser.stringify(newPage);\n\tif (pageId !== newPageRoot) {\n\t\tpageIdent = newPage;\n\t\t// 原始页面不存在,需要跳转为其他页面\n\t\tif (pages.get(pageId) !== pageHandler) { return; }\n\t\tpages.delete(pageId);\n\t\tconst targetPage = pages.get(newPageRoot);\n\t\tif (targetPage) {\n\t\t\t// 目标页面已存在,则单纯切换\n\t\t\tsetRootPath(`${newPageRoot}/${path}${search}${hash}`, true);\n\t\t\treturn;\n\t\t}\n\t\tpageId = newPageRoot;\n\t\tpages.set(pageId, pageHandler);\n\t\tsetRootPath(`${newPageRoot}/${path}${search}${hash}`, true);\n\t}\n\tconst widget = data.widget;\n\tif (typeof widget === 'string') {\n\t\tconst state = new PageHandle({\n\t\t\troot: `${parentRoot}${pageId}`,\n\t\t\tdefine: data.page || null,\n\t\t\tident: pageIdent,\n\t\t\tpageId: pageId,\n\t\t\tpath, search, hash,\n\t\t\tpageHandler,\n\t\t\topen,\n\t\t\tsetRootPath,\n\t\t});\n\t\tstate.signal.addEventListener('abort', () => {\n\t\t\tpages.delete(pageId);\n\t\t}, { once: true });\n\t\tcreatePageFrame(state, widget);\n\t\treturn;\n\t}\n\n\n\tconst renderer = await widget();\n\tif (pageHandler !== currentPage.get()) {\n\t\t// 页面已切换\n\t\tpages.delete(pageId);\n\t\treturn;\n\t}\n\tconst state = new PageHandle({\n\t\troot: `${parentRoot}${pageId}`,\n\t\tdefine: data.page || null,\n\t\tident: pageIdent,\n\t\tpageId: pageId,\n\t\tpath, search, hash,\n\t\tpageHandler,\n\t\topen,\n\t\tsetRootPath,\n\t});\n\tstate.signal.addEventListener('abort', () => {\n\t\tpages.delete(pageId);\n\t}, { once: true });\n\tconst pc = new PageContext(state);\n\tif (typeof renderer !== 'function') {\n\t\tpc.setError();\n\t\treturn;\n\t}\n\ttry {\n\t\tawait renderer(pc);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\tpc.setError(e);\n\t}\n}\n","/**\n *\n * @param {string} url\n * @param {boolean} [replace]\n * @returns\n */\nexport default function setHistoryUrl(url, replace) {\n\tconst {href} = location;\n\tconst u = new URL(url, href);\n\tif (u.href === href) { return; }\n\tif (replace) {\n\t\thistory.replaceState({}, '', url);\n\t} else {\n\t\thistory.pushState({}, '', url);\n\t}\n}\n","import { toUrl } from '../utils/index.mts';\nimport showPage, { find } from './showPage.mjs';\nimport { showHome } from './home.mjs';\nimport { openUrl } from './setUrl.mjs';\nimport setHistoryUrl from './setHistoryUrl.mjs';\nimport { PageIdent } from './route.mjs';\nimport { Application } from '../services/index.mjs';\n\n\n/**\n * 页面管理器\n * @callback PathListener\n * @param {string} path\n * @param {string} search\n * @param {string} hash\n * @param {(PageIdent & {path: string})?} page \n * @returns {void}\n */\n/** @type {Map<symbol, PathListener>} */\nconst listeners = new Map();\n\n/**\n * \n * @param {PathListener} listener \n * @returns \n */\nexport function listenPath(listener) {\n\tconst symbol = Symbol();\n\tlisteners.set(symbol, listener);\n\treturn () => { listeners.delete(symbol); };\n}\n/**\n * \n * @param {(PageIdent & {path: string})?} page \n */\nexport function updatePath(page) {\n\tconst {\n\t\tpathname, search, hash,\n\t} = new URL(location.href);\n\tfor (const updatePath of [...listeners.values()]) {\n\t\tupdatePath(pathname, search, hash, page ? { ...page } : null);\n\t}\n}\n\n/**\n * \n * @param {string} path \n * @param {boolean} [replace] \n * @returns \n */\nfunction setRoot(path, replace) {\n\tsetHistoryUrl(toUrl(Application.path, path), replace);\n\tparse();\n}\n/**\n * \n * @param {URL | Location} u \n * @param {boolean} [replace] \n * @param {boolean} [inLink] \n * @returns \n */\nexport function parseFormUrl({ pathname, search, hash }, replace = true, inLink) {\n\tconst root = Application.path;\n\tlet subPath = pathname.replace(/(^|[\\\\\\/])[\\\\\\/]*/, '/');\n\tif (!subPath || subPath === '/' || subPath === root || subPath + '/' === root) {\n\t\tsetHistoryUrl(`${root}${search}${hash}`, replace);\n\t\tupdatePath(null);\n\t\tshowHome(search, hash);\n\t\treturn;\n\t}\n\tsubPath = subPath.slice(subPath.startsWith(`${root}`) ? root.length : 1);\n\tlet { path, page, pageRoot } = PageIdent.parse(subPath);\n\tif (inLink && (path || '/') === '/' && !search && !hash) {\n\t\tconst page = find(pageRoot);\n\t\tif (page) { ({ path, search, search } = page); }\n\t}\n\tsetHistoryUrl(`${root}${pageRoot}${path}${search}${hash}`, replace);\n\tupdatePath({ ...page, path });\n\tshowPage(openUrl, page, root, pageRoot, path, search, hash, setRoot);\n}\n\nexport default function parse() {\n\tparseFormUrl(location)\n}\n","import { Application } from '../services/index.mjs';\nimport { parseFormUrl } from './parse.mjs';\n\n/**\n * \n * @param {string} url \n * @param {boolean} [replace] \n * @returns \n */\nexport function openUrl(url, replace) {\n\tif (setUrl(url, replace)) { return; }\n\tlocation.href = url;\n}\n\n/** @type {Set<(url: URL) => boolean>} */\nconst urlGuard = new Set();\n/**\n * \n * @param {(url: URL) => boolean} fn \n */\nexport function addUrlGuard(fn) {\n\tconst f = fn.bind(null);\n\turlGuard.add(f);\n\treturn () => { urlGuard.delete(f); };\n\n}\n/**\n * \n * @param {string} url \n * @param {boolean} [replace] \n * @param {boolean} [skipGuard] \n * @param {boolean} [inLink] \n * @returns \n */\nexport default function setUrl(url, replace, skipGuard, inLink) {\n\tconst u = new URL(url, location.href);\n\tif (u.origin !== location.origin) { return false; }\n\tif (!skipGuard) {\n\t\tfor (const fn of [...urlGuard]) {\n\t\t\tif (fn(u) === false) { return false; }\n\t\t}\n\t}\n\tif (u.origin !== location.origin) { return false; }\n\tconst path = u.pathname;\n\tif (!path.startsWith(Application.path)) { return false; }\n\tparseFormUrl(u, Boolean(replace), inLink);\n\treturn true;\n}\n","/** @import { MaybePromise } from '@yongdall/types' */\n/** @import { PageContext } from './PageContext.mjs' */\nimport setUrl from './setUrl.mjs';\nimport parse from './parse.mjs';\nimport { closeAll } from './pageManager.mjs';\nimport { isMac } from '../dom/index.mjs';\n\n/**\n * @callback PageRenderer\n * @param {PageContext} ctx\n * @returns {MaybePromise<void>}\n */\n\n/**\n * \n * @param {PointerEvent} e \n * @returns \n */\nfunction clickEventListener(e) {\n\tif (e.shiftKey) { return; }\n\tif (isMac ? e.metaKey : e.ctrlKey) { return; }\n\tif (e.defaultPrevented) { return; }\n\tfor (const a of e.composedPath()) {\n\t\tif (!(a instanceof HTMLAnchorElement)) { continue; }\n\t\tconst url = a.href;\n\t\tif (!url) { continue; }\n\t\tif ((a.target || '_self') !== '_self') { return; }\n\t\tif (setUrl(url, Boolean(a.getAttribute('replace')), false, true)) {\n\t\t\te.preventDefault();\n\t\t}\n\t\treturn;\n\t}\n}\nexport function initRouter() {\n\twindow.addEventListener('click', clickEventListener);\n\twindow.addEventListener('popstate', parse);\n\tparse();\n}\nexport function stopRouter() {\n\twindow.removeEventListener('click', clickEventListener);\n\twindow.removeEventListener('popstate', parse);\n\tcloseAll();\n}\n\nexport { addUrlGuard } from './setUrl.mjs';\nexport { switchHome } from './home.mjs';\nexport { switchCreatePage } from './createPage.mjs';\nexport { switchRenderError } from './renderError.mjs';\nexport { PageIdent, setRouter } from './route.mjs';\n\nexport { addManager, getPages, currentPage } from './pageManager.mjs';\nexport { Page } from './Page.mjs';\nexport { PageSider } from './PageSider.mjs';\nexport { PageSection } from './PageSection.mjs';\nexport { PageHeader } from './PageHeader.mjs';\nexport { PageFooter } from './PageFooter.mjs';\nexport { listenPath } from './parse.mjs';\nexport { createFrame } from './createPage.mjs';\n","/** @import { ModelConfiguration, ModelScriptConfiguration } from '../services/model.mjs' */\n\n/**\n * \n * @param {ModelScriptConfiguration | ModelConfiguration} model \n * @param {Record<string, any> | [key: string, value: any][]} params \n * @param {Record<string, any>} [defaultValue] \n * @returns \n */\nexport const createModelDefault = (model, params, defaultValue) => {\n\tconst fields = model.fields;\n\treturn (Array.isArray(params) ? params : Object.entries(params)).reduceRight((r, [k, v]) => {\n\t\tconst field = Object.hasOwn(fields, k) && fields[k];\n\t\tif (!field) { return r; }\n\t\tconst type = field?.type;\n\t\tif (!type || typeof type !== 'string') { return r; }\n\t\tif (!v && field.array) { return r; }\n\t\tif (!v && field.nullable) {\n\t\t\tr[k] = null;\n\t\t\treturn r;\n\t\t}\n\t\tif (typeof v !== 'string') {\n\t\t\tr[k] = v;\n\t\t\treturn r;\n\t\t}\n\t\tswitch (type) {\n\t\t\tcase 'i16':\n\t\t\tcase 'i32':\n\t\t\t\tif (/^[+-]?\\d+$/.test(v)) { r[k] = Number.parseInt(v); }\n\t\t\t\treturn r;\n\t\t\tcase 'i64':\n\t\t\t\tif (/^[+-]?\\d+$/.test(v)) { r[k] = v; }\n\t\t\t\treturn r;\n\t\t\tcase 'f32':\n\t\t\tcase 'f64':\n\t\t\t\tif (/^[+-]?\\d+(\\.\\d*)?([eE][+-]?\\d*)$/.test(v)) { r[k] = Number.parseFloat(v); }\n\t\t\t\treturn r;\n\t\t\tcase 'decimal':\n\t\t\tcase 'numeric':\n\t\t\tcase 'money':\n\t\t\t\tif (/^[+-]?\\d+(\\.\\d*)?([eE][+-]?\\d*)$/.test(v)) { r[k] = v; }\n\t\t\t\treturn r;\n\t\t\tcase 'bool':\n\t\t\t\tswitch (v.toLowerCase()) {\n\t\t\t\t\tcase '0': case 'n': case 'no': case 'f': case 'false':\n\t\t\t\t\t\tr[k] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '1': case 'y': case 'yes': case 't': case 'true':\n\t\t\t\t\t\tr[k] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn r;\n\t\t\tdefault:\n\t\t\t\tr[k] = v;\n\t\t\t\treturn r;\n\t\t}\n\t}, defaultValue || {});\n};\n","/** @import { FormLayout } from '@yongdall/types' */\n\nimport { createStore, renderForm } from '../form/index.mjs';\nimport { createModelDefault } from './createModelDefault.mjs';\n\n/** @import { Modal } from '../dom/index.mjs' */\n/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\nimport { modelService } from '../services/model.mjs';\n\n/**\n * \n * @param {Modal} modal \n * @param {ModelScriptConfiguration} model \n * @param {ReturnType<typeof modelService> | string} currentModel \n * @param {FormLayout?} [layout] \n * @param {Record<string, any> | [key: string, value: any][] | null} [newParams] \n */\nexport async function createDocumentInModal(modal, model, currentModel, layout, newParams) {\n\tconst header = modal.createHeader();\n\tconst store = createStore(model);\n\tstore.new = true;\n\tmodal.wide = true;\n\tmodal.inlineContainer = true;\n\n\trenderForm(store, modal.container.appendChild(document.createElement('div')), {\n\t\tmodel, editable: true,\n\t\tsignal: modal.signal,\n\t\tenableLink: Boolean(layout?.enableLinkEditable ?? layout?.enableLink),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\tstore.reset(createModelDefault(model, newParams || [], store.createDefault()));\n\n\n\tconst label = model?.label || model.id || '';\n\tconst titleArea = header.container;\n\ttitleArea.classList.add('Modal-title');\n\ttitleArea.innerText = label ? `新建:${label}` : '新建';\n\n\tconst { promise, resolve } = Promise.withResolvers();\n\n\tconst buttons = header.buttons;\n\tbuttons.classList.add('MenuButtons');\n\n\tlet creating = false;\n\tconst createButton = buttons.appendChild(document.createElement('button'));\n\tcreateButton.innerText = '创建';\n\tbuttons.appendChild(document.createElement('hr'));\n\tconst closeButton = buttons.appendChild(document.createElement('button'));\n\tcloseButton.innerText = '取消';\n\tcreateButton.addEventListener('click', async () => {\n\t\tif (creating) { return; }\n\t\tcreating = true;\n\t\tcloseButton.disabled = true;\n\t\tcreateButton.disabled = true;\n\t\ttry {\n\t\t\tconst created = await (typeof currentModel === 'string' ? modelService(currentModel) : currentModel).create(store.value);\n\t\t\talert('创建完成');\n\t\t\tresolve(created);\n\t\t} finally {\n\t\t\tcloseButton.disabled = false;\n\t\t\tcreateButton.disabled = false;\n\t\t\tcreating = false;\n\t\t}\n\t});\n\tcloseButton.addEventListener('click', () => {\n\t\tif (creating) { return; }\n\t\tresolve(null);\n\t});\n\treturn promise;\n}\n","/** @import { FormLayout } from '@yongdall/types' */\n\nimport { Pattern } from '@yongdall/common';\nimport { isMac } from '../dom/index.mjs';\nimport { createStore, renderForm } from '../form/index.mjs';\nimport { createComputed, createState, effect } from '../data/index.mts';\nimport { testPermissions } from '../permission.mjs';\n/** @import { ModelScriptConfiguration } from '../services/model.mjs' */\nimport { modelService } from '../services/model.mjs';\n\n/** @import { Modal } from '../dom/index.mjs' */\n\n/**\n * \n * @param {Modal} modal \n * @param {ModelScriptConfiguration} model \n * @param {ReturnType<typeof modelService>} currentModel \n * @param {string} id \n * @param {FormLayout?} [layout] \n * @param {object} [options] \n * @param {string} [options.href] \n * @param {boolean} [options.editable] \n * @param {boolean} [options.destroyable] \n */\nexport async function showDocumentInModal(modal, model, currentModel, id, layout, options) {\n\tconst header = modal.createHeader();\n\tconst currentDocument = (typeof currentModel === 'string' ? modelService(currentModel) : currentModel).document(id);\n\n\tconst label = model?.label || model.id || '';\n\tconst titleArea = header.container;\n\ttitleArea.classList.add('Modal-title');\n\tconst title = label ? `详情:${label}` : '详情';\n\ttitleArea.innerText = title;\n\n\tconst doc = await currentDocument.get();\n\tif (modal.destroyed) { return; }\n\ttitleArea.innerText = Pattern.generate(model?.labelPattern, doc) || title;\n\tconst store = createStore(model);\n\tconst { editable, destroyable } = options || {};\n\tstore.readonly = !editable;\n\tmodal.wide = true;\n\tmodal.inlineContainer = true;\n\trenderForm(store, modal.container.appendChild(document.createElement('div')), {\n\t\tmodel, editable,\n\t\tsignal: modal.signal,\n\t\tenableLink: Boolean(editable ? layout?.enableLinkEditable ?? layout?.enableLink : layout?.enableLink),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\tstore.reset(doc);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t/** @type {PromiseWithResolvers<void>} */\n\tconst { promise, resolve } = Promise.withResolvers();\n\n\tconst buttons = header.buttons;\n\tbuttons.classList.add('MenuButtons');\n\n\n\tconst running = createState(false);\n\tif (destroyable) {\n\t\tconst destroyable = createComputed(() => {\n\t\t\treturn testPermissions('destroy', model.permissions || [], store.value);\n\t\t});\n\t\tconst destroyButton = buttons.appendChild(document.createElement('button'));\n\t\tdestroyButton.innerText = '删除';\n\t\tbuttons.appendChild(document.createElement('hr'));\n\t\teffect(() => destroyButton.disabled = running.get() || !destroyable.get(), modal.signal);\n\t\tdestroyButton.addEventListener('click', async () => {\n\t\t\tif (!destroyable?.get()) { return; }\n\t\t\tif (modal.destroyed) { return; }\n\t\t\tif (running.get()) { return; }\n\t\t\tif (!confirm('确定要删除此文档吗?')) { return; }\n\t\t\trunning.set(true);\n\t\t\ttry {\n\t\t\t\tawait currentDocument.delete();\n\t\t\t\tresolve();\n\t\t\t} finally {\n\t\t\t\trunning.set(false);\n\t\t\t}\n\t\t});\n\t}\n\tif (editable) {\n\t\tconst createButton = buttons.appendChild(document.createElement('button'));\n\t\tcreateButton.innerText = '保存';\n\t\tbuttons.appendChild(document.createElement('hr'));\n\t\teffect(() => createButton.disabled = running.get(), modal.signal);\n\t\tcreateButton.addEventListener('click', async () => {\n\t\t\tif (modal.destroyed) { return; }\n\t\t\tif (running.get()) { return; }\n\t\t\trunning.set(true);\n\t\t\ttry {\n\t\t\t\tconst data = await currentDocument.update(store.value);\n\t\t\t\tresolve();\n\t\t\t} finally {\n\t\t\t\trunning.set(false);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tconst { href } = options || {};\n\t\tif (href) {\n\t\t\tconst openButton = buttons.appendChild(document.createElement('button'));\n\t\t\tconst a = openButton.appendChild(document.createElement('a'));\n\t\t\ta.innerText = '打开';\n\t\t\ta.href = href;\n\t\t\tbuttons.appendChild(document.createElement('hr'));\n\t\t\teffect(() => openButton.disabled = running.get(), modal.signal);\n\t\t\ta.addEventListener('click', event => {\n\t\t\t\tif (event.shiftKey) { return; }\n\t\t\t\tif (isMac ? event.metaKey : event.ctrlKey) { return; }\n\t\t\t\tif (event.altKey) { return; }\n\t\t\t\tif (modal.destroyed) { return; }\n\t\t\t\tif (running.get()) { return; }\n\t\t\t\tresolve();\n\t\t\t});\n\t\t}\n\t}\n\tconst closeButton = buttons.appendChild(document.createElement('button'));\n\tcloseButton.innerText = '关闭';\n\teffect(() => closeButton.disabled = running.get(), modal.signal);\n\tcloseButton.addEventListener('click', () => {\n\t\tif (running.get()) { return; }\n\t\tresolve();\n\t});\n\treturn promise;\n}\n","/** @import { ModelConfiguration, ModelScriptConfiguration } from '../services/model.mjs' */\nconst regex = /\\{([^}{}]+)\\}/g\n\n/**\n *\n * @param {ModelConfiguration | ModelScriptConfiguration} model\n * @returns\n */\nexport function getPrimaryFields(model) {\n\treturn Object.entries(model.fields)\n\t\t.filter(v => v[1].primary)\n\t\t.sort(([,{primary: a}],[,{primary: b}]) => (a || 0) - (b || 0))\n\t\t.map(([v]) => v);\n}\n/**\n *\n * @param {ModelConfiguration | ModelScriptConfiguration | string[]} model\n * @param {Record<string, any>} document\n * @returns\n */\nexport function toId(document, model) {\n\treturn (Array.isArray(model) ? model :getPrimaryFields(model)).map(v => document[v]).join('$');\n}\nexport { createModelDefault } from './createModelDefault.mjs'\nexport { createDocumentInModal } from './createDocumentInModal.mjs'\nexport { showDocumentInModal } from './showDocumentInModal.mjs'\n","/** @import { Menu } from './Menu.mjs' */\n/** @import { ModelScriptConfiguration } from './services/model.mjs' */\n/** @import { PageIdent } from './route/route.mjs' */\n/** @import { Store } from '@neeloong/form' */\n\nimport { allHooks } from './allHooks.mts';\nimport { createComputed } from './data/index.mts';\n\n/**\n * 命令选项\n * @typedef {Object} Command.Options\n * @property {'documents' | 'document' | 'createDocument' | 'editDocument'} type \n * @property {ModelScriptConfiguration} [model]\n * @property {PageIdent} [pageIdent]\n * @property {Record<string, any>} [document]\n * @property {Array<Record<string, any>>} [documents]\n * @property {Array<Record<string, any>>} [checkedDocuments]\n * @property {Store} [store]\n */\n\n/**\n * 命令接口\n * @typedef {Object} Command\n * @property {(options: Command.Options, menu: Menu, command: string) => boolean} disabled\n * @property {(options: Command.Options, menu: Menu, command: string) => string} toHref\n * @property {(options: Command.Options, menu: Menu, command: string) => void} exec\n */\n/**\n * @type {Partial<Command>}\n */\nconst scriptCommand = {\n\texec(options, menu, command) {\n\t\tconst { model } = options;\n\t\tif (!model) { return; }\n\t\tconst index = command.indexOf(':');\n\t\tif (index < 0) { return; }\n\t\tconst name = command.slice(index + 1);\n\t\tswitch (options.type) {\n\t\t\tcase 'documents': {\n\t\t\t\tconst scripts = model.script?.listScripts || {};\n\t\t\t\tconst script = scripts[name];\n\t\t\t\tif (typeof script !== 'function') { return; }\n\t\t\t\treturn script({\n\t\t\t\t\tmodel,\n\t\t\t\t\tget checkedDocuments() { return options.checkedDocuments; },\n\t\t\t\t\tget documents() { return options.documents; },\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase 'document':\n\t\t\tcase 'editDocument': {\n\t\t\t\tconst { store } = options;\n\t\t\t\tif (!store) { return; }\n\t\t\t\tconst scripts = model.script?.documentScripts || {};\n\t\t\t\tconst script = scripts[name];\n\t\t\t\tif (typeof script !== 'function') { return; }\n\t\t\t\treturn script({\n\t\t\t\t\tmodel,\n\t\t\t\t\tget document() { return options.document; },\n\t\t\t\t\tget store() { return store; },\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n};\nconst commandStore = createComputed(() => {\n\t/** @type {Record<string, Partial<Command>>} */\n\tconst commands = {\n\t\tscript: scriptCommand,\n\t\t...allHooks.get('commands').named(),\n\t};\n\treturn commands;\n});\n\n/**\n * @template {keyof Command} K\n * @param {K} name \n * @param {Command.Options} options \n * @param {Menu} menu \n * @returns {ReturnType<Command[K]> | void}\n */\nfunction runCommand(name, options, menu) {\n\tconst command = menu.command;\n\tif (!command) { return; }\n\tconst index = command.indexOf(':');\n\tif (index < 0) { return; }\n\tconst type = command.slice(0, index);\n\tif (!type) { return; }\n\tconst commands = commandStore.get();\n\tconst cmd = Object.hasOwn(commands, type) && commands[type];\n\tif (!cmd) { return; }\n\tconst fn = Object.hasOwn(cmd, name) && cmd[name];\n\tif (typeof fn !== 'function') { return; }\n\tconst result = fn(options, menu, command);\n\t// @ts-ignore\n\treturn result;\n}\nexport const Command = {\n\t/**\n\t * \n\t * @param {Command.Options} options \n\t * @param {Menu} menu \n\t * @returns {boolean}\n\t */\n\tdisabled(options, menu) {\n\t\treturn runCommand('disabled', options, menu) || false;\n\t},\n\n\t/**\n\t * \n\t * @param {Command.Options} options \n\t * @param {Menu} menu \n\t * @returns {string}\n\t */\n\ttoHref(options, menu) {\n\t\treturn runCommand('toHref', options, menu) || '';\n\n\t},\n\t/**\n\t * \n\t * @param {Command.Options} options \n\t * @param {Menu} menu \n\t * @returns {void}\n\t */\n\texec(options, menu) {\n\t\treturn runCommand('exec', options, menu);\n\n\t}\n\n};\n","import { pathRoots } from './paths.mjs';\n\n/**\n * @param {object} [options]\n * @param {FileSystemHandleQueryOptions['types']} [options.types]\n * @param {boolean} [options.excludeAcceptAllOption]\n * @returns {Promise<File?>}\n */\nexport async function selectFile({ types, excludeAcceptAllOption } = {}) {\n\tif ('showOpenFilePicker' in window && typeof showOpenFilePicker === 'function') {\n\t\tconst [file] = await showOpenFilePicker({\n\t\t\ttypes,\n\t\t\texcludeAcceptAllOption: Boolean(excludeAcceptAllOption && Array.isArray(types) && types.length),\n\t\t});\n\t\tif (!file) { return null; }\n\t\treturn file.getFile();\n\t}\n\tconst input = document.createElement('input');\n\tinput.type = 'file';\n\tconst accepted = Array.isArray(types) && types.map(v => Object.entries(v.accept)).flat(3) || '';\n\tif (accepted) {\n\t\tinput.accept = accepted.join(',');\n\t}\n\n\t// 如果 excludeAcceptAllOption 为 true,且没有设置 accept,则禁用所有文件选项(通过 accept 强制限制)\n\t// 但实际上 input 无法完全移除 \"All Files\",只能尽量限制\n\tif (excludeAcceptAllOption && accepted) {\n\t\t// 没有指定类型时,可以设为 '*' 来允许所有?但逻辑上 exclude 应该表示只允许明确类型\n\t\t// 所以这里我们不做特殊处理,由调用者传入 types 控制\n\t}\n\treturn new Promise((resolve, reject) => {\n\t\tinput.addEventListener('change', () => { resolve(input.files?.[0] || null); });\n\t\tinput.addEventListener('error', (e) => { reject(e.error); });\n\t\tinput.click();\n\t});\n}\n\nconst filePrefix = `+file://`\n/**\n * \n * @param {object} file \n * @param {string} file.domain \n * @param {string} file.path\n * @param {string} [name]\n */\nexport function toFileURL(file, name) {\n\tlet path = file.path;\n\tif (path[0] === '/') { path = path.slice(1); }\n\tconst d = `${filePrefix}${file.domain}/${path}`;\n\treturn name ? `${d}#${name}` : d;\n}\n\n/**\n * \n * @param {string} [uri] \n * @returns \n */\nexport function toFileLink(uri) {\n\tif (!uri || typeof uri !== 'string') { return null; }\n\tconst index = uri.indexOf('#');\n\tconst name = decodeURIComponent(\n\t\t(index >= 0 ? uri.slice(index + 1) : '')\n\t\t|| uri.replace(/[#?].*/, '').split('/').filter(Boolean).pop()\n\t\t|| '',\n\t);\n\tif (uri.slice(0, filePrefix.length).toLowerCase() === filePrefix) {\n\t\tconst [hostname, ...pathname] = uri.slice(filePrefix.length).replace(/[?#].*$/, '').split('/');\n\t\tconst filePath = pathname.filter(Boolean).join('/');\n\t\tif (!filePath) { return null; }\n\t\treturn { name, href: `${pathRoots.api}/${pathRoots.file}/${hostname || '_'}/files/${filePath}` };\n\t}\n\treturn { name, href: uri };\n}\n","import { importStyle, importWidget } from './import.mjs';\nimport pathRoots from './paths.mjs';\nimport request from './request.mts';\nimport { User } from './user.mjs';\nimport isPluginId from './utils/isPluginId.mjs';\n\n\n/**\n * \n * @param {string} pluginId \n */\nexport default function buildPlugin(pluginId) {\n\tif (!isPluginId(pluginId)) {\n\t\tthrow new Error(`无效的 plugin: ${pluginId}`);\n\t}\n\treturn {\n\t\t/**\n\t\t * \n\t\t * @param {string} url \n\t\t * @returns \n\t\t */\n\t\timportStyle(url) { return importStyle(url, pluginId, true); },\n\t\t/**\n\t\t * \n\t\t * @param {string} url \n\t\t * @returns \n\t\t */\n\t\timport(url) { return importWidget(url, pluginId); },\n\t\trequest: request.clone().prefix(`${pathRoots.api}/client/plugins/${pluginId}`),\n\t\tuser: User.plugin(pluginId),\n\t};\n}\n","/** @import { MaybePromise } from '@yongdall/types' */\n/** @import { Authenticator, Theme } from './typesDefine.mjs' */\n/** @import { PageIdent } from './route/route.mjs' */\nimport { addManager, initRouter, stopRouter, switchCreatePage, switchRenderError, switchHome, setRouter, listenPath, currentPage } from './route/index.mjs';\nimport { importStyle, importWidget } from './import.mjs';\nimport { root } from './dom/index.mjs';\nimport setComponents from './components.mjs';\nimport { plugins } from './configuration.mjs';\nimport { allHooks, updateHooks } from './allHooks.mts';\nimport { User } from './user.mjs';\nimport { watch } from './data/index.mts';\nimport { updatePrintStyle } from './print.mjs';\nimport { addHeader, addHeaderRunner, setErrorAlerter } from './request.mts';\nimport { Application } from './services/index.mjs';\n\n/**\n * @template T\n * @param {() => MaybePromise<T>} fn \n * @returns {() => Promise<T>}\n */\nfunction onceFn(fn) {\n\t/** @type {Promise<T>} */\n\tlet result;\n\treturn () => result ||= Promise.resolve().then(() => fn());\n\n}\nasync function initHooks() {\n\t/** @type {[string, any][]} */\n\tconst promises = Object.entries(plugins).map(([plugin, { hooks: hookPath }]) => {\n\t\tif (typeof hookPath !== 'string') { return ['', '']; }\n\t\tif (!hookPath) {\n\t\t\treturn [plugin, importWidget(`${plugin}`)];\n\t\t}\n\t\tif ('/#?'.includes(hookPath[0])) {\n\t\t\treturn [plugin, importWidget(`${plugin}${hookPath}`)];\n\t\t}\n\t\treturn [plugin, importWidget(`${plugin}/${hookPath}`)];\n\t});\n\tconst stylesPromises =\n\t\tObject.entries(plugins).flatMap(([plugin, { styles }]) => [styles].flat().map(path => {\n\t\t\tif (!path || typeof path !== 'string') { return; }\n\t\t\treturn importStyle(path, plugin, true);\n\t\t}));\n\tconst loaded = await Promise.all(\n\t\tpromises.filter(([plugin]) => plugin).map(v => Promise.all(v)),\n\t).then(l => l.filter(([, hook]) => hook && typeof hook === 'object'));\n\tawait Promise.all(stylesPromises);\n\tupdateHooks(Object.fromEntries(loaded));\n}\n/** @typedef {[file: string, plugin: string]} uiStyle */\n/**\n * \n * @param {uiStyle[]} [uiStyles] \n */\nasync function addStyles(uiStyles) {\n\tconst promises = [];\n\tfor (const [file, plugin] of uiStyles || []) {\n\t\tpromises.push(importStyle(file, plugin, true));\n\t}\n\tfor (const [plugin, style] of allHooks.get('styles')) {\n\t\tif (typeof style === 'string') {\n\t\t\tpromises.push(importStyle(style, plugin, true));\n\t\t}\n\t}\n\tawait Promise.all(promises);\n}\n\n/** @type {() => MaybePromise<Partial<Omit<Authenticator, \"styleFiles\"> & Record<\"styleFiles\", uiStyle[]>>>} */\nlet loadAuthenticator = () => ({});\n/** @typedef {Omit<Theme, \"styleFiles\"> & Record<\"styleFiles\", uiStyle[]>} WorkbenchTheme */\n/** @type {() => MaybePromise<Partial<WorkbenchTheme>>} */\nlet loadTheme = () => ({});\n\nlet clearPage = () => { };\nlet isWorkbench = false;\nasync function toWorkbench() {\n\tif (isWorkbench) { return; }\n\tisWorkbench = true;\n\tclearPage();\n\tlet stopped = false;\n\tclearPage = () => { stopped = true; isWorkbench = false; };\n\tconst { classNames, elements, rootClassName, setup, pageManager, updatePath, title, icon } = await loadTheme();\n\tif (stopped) { return; }\n\t/** @type {(() => void)[]} */\n\tconst destroyList = [];\n\tfor (const cn of [classNames, allHooks.get('className').values()].flat()) {\n\t\tif (cn && typeof cn === 'string') {\n\t\t\tdocument.body.classList.add(cn);\n\t\t}\n\t}\n\tif (rootClassName && typeof rootClassName === 'string') {\n\t\troot.classList.add(rootClassName);\n\t}\n\tfor (const el of [elements, allHooks.get('elements').values()].flat()) {\n\t\tif (el instanceof Element) {\n\t\t\tdocument.body.appendChild(el);\n\t\t}\n\t}\n\tif (typeof pageManager === 'function') {\n\t\tdestroyList.push(addManager(pageManager));\n\t}\n\tif (typeof updatePath === 'function') {\n\t\tdestroyList.push(listenPath(updatePath));\n\t}\n\tfor (const pageManager of allHooks.get('pageManager').values()) {\n\t\tif (!pageManager) { continue; }\n\t\tdestroyList.push(addManager(pageManager));\n\t}\n\n\tinitRouter();\n\tconst ac = new AbortController();\n\tconst signal = ac.signal;\n\n\twatch(() => title?.(currentPage) || Application.title || '拥道YongDall', title => {\n\t\tdocument.title = title;\n\t}, { signal, immediate: true });\n\twatch(() => currentPage.print, print => { updatePrintStyle(print); }, { signal, immediate: true });\n\n\tclearPage = () => {\n\t\tclearPage = () => { };\n\t\tac.abort();\n\t\tisWorkbench = false;\n\t\tstopRouter();\n\t\tfor (const destroy of destroyList) { destroy(); }\n\t\tfor (const el of [elements, allHooks.get('elements').values()].flat()) {\n\t\t\tif (el instanceof Element) {\n\t\t\t\tel.remove();\n\t\t\t}\n\t\t}\n\t\tif (rootClassName && typeof rootClassName === 'string') {\n\t\t\troot.classList.remove(rootClassName);\n\t\t}\n\t\tfor (const cn of [classNames, allHooks.get('className').values()].flat()) {\n\t\t\tif (cn && typeof cn === 'string') {\n\t\t\t\tdocument.body.classList.remove(cn);\n\t\t\t}\n\t\t}\n\t};\n\tsetup?.(signal);\n}\n/**\n * \n * @param {boolean} onlyAuthenticator \n * @returns \n */\nasync function toLogin(onlyAuthenticator) {\n\tclearPage();\n\tlet stopped = false;\n\tclearPage = () => { stopped = true; };\n\tconst authenticator = await loadAuthenticator();\n\tif (stopped) { return; }\n\tconst { classNames, elements, rootClassName } = authenticator;\n\n\tfor (const cn of [classNames].flat()) {\n\t\tif (cn && typeof cn === 'string') {\n\t\t\tdocument.body.classList.add(cn);\n\t\t}\n\t}\n\tif (rootClassName && typeof rootClassName === 'string') {\n\t\troot.classList.add(rootClassName);\n\t}\n\tfor (const el of [elements].flat()) {\n\t\tif (el instanceof Element) {\n\t\t\tdocument.body.appendChild(el);\n\t\t}\n\t}\n\tconst ac = new AbortController();\n\tclearPage = () => {\n\t\tclearPage = () => { };\n\t\tac.abort();\n\t\tfor (const el of [elements].flat()) {\n\t\t\tif (el instanceof Element) {\n\t\t\t\tel.remove();\n\t\t\t}\n\t\t}\n\t\tif (rootClassName && typeof rootClassName === 'string') {\n\t\t\troot.classList.remove(rootClassName);\n\t\t}\n\t\tfor (const cn of [classNames].flat()) {\n\t\t\tif (cn && typeof cn === 'string') {\n\t\t\t\tdocument.body.classList.remove(cn);\n\t\t\t}\n\t\t}\n\t};\n\tawait authenticator.login?.(ac.signal);\n\tif (ac.signal.aborted) { return; }\n\tawait User.load();\n}\nlet started = false;\n/**\n * \n * @param {typeof loadAuthenticator} _loadAuthenticator \n * @param {() => MaybePromise<Partial<WorkbenchTheme>>} _loadTheme \n * @param {() => MaybePromise<PageIdent.Router?>} [_loadRoute] \n * @returns \n */\nexport default async function start(_loadAuthenticator, _loadTheme, _loadRoute) {\n\tif (started) { return; }\n\tstarted = true;\n\tconst _authenticator = _loadAuthenticator();\n\tloadAuthenticator = onceFn(async () => {\n\t\tconst authenticator = await _authenticator;\n\t\tconst { styleFiles } = authenticator;\n\t\tawait addStyles(styleFiles);\n\t\treturn authenticator;\n\t});\n\tloadTheme = onceFn(async () => {\n\t\tconst [theme, router] = await Promise.all([\n\t\t\t_loadTheme(),\n\t\t\t_loadRoute?.(),\n\t\t]);\n\t\tif (router) { setRouter(router); }\n\n\t\tconst {\n\t\t\thome, components, styleFiles,\n\t\t\tcreatePage, createFrame, renderError,\n\t\t\talertError,\n\t\t} = theme;\n\t\tawait addStyles(styleFiles);\n\t\tswitchHome(home);\n\t\tsetComponents(components);\n\t\tsetErrorAlerter(alertError);\n\t\tswitchCreatePage(createPage, createFrame);\n\t\tswitchRenderError(renderError);\n\t\treturn theme;\n\t});\n\tawait initHooks();\n\tconst {header, runHeader, required} = await _authenticator;\n\tif (typeof header === 'function') { addHeader(header); }\n\tif (typeof runHeader === 'function') { addHeaderRunner(runHeader); }\n\tif (required || location.pathname === Application.authPath && location.search.length > 1) {\n\t\tUser.login();\n\t} else {\n\t\tawait User.load();\n\t}\n\twatch(() => User.waitLogin, waitLogin => {\n\t\tif (waitLogin) {\n\t\t\ttoLogin(false);\n\t\t} else {\n\t\t\ttoWorkbench();\n\t\t}\n\t}, {\n\t\timmediate: true\n\t});\n\n}\n","type JSZip = import('jszip');\n\nasync function importJSZip() {\n\t// @ts-ignore\n\tconst JSZip: new () => JSZip = await import('jszip').then(v => v.default);\n\treturn JSZip;\n}\n\nexport const MIME: { [key: string]: readonly string[] } = {\n\t'application/zip': ['.zip'],\n};\n\n/**\n * 解析 ZIP 文件并返回包含文件名和对应 Blob 内容的记录对象\n * @param file - ZIP 文件的 Blob、ArrayBuffer 或 ArrayBufferView 对象\n * @returns Promise 对象,解析成功后返回 Record<string, Blob | null>\n */\nexport async function parse(\n\tfile: Blob | ArrayBuffer | ArrayBufferView<ArrayBuffer>\n): Promise<Record<string, Blob | null>> {\n\tconst JSZip = await importJSZip();\n\tconst zip = new JSZip();\n\tif (file instanceof Blob) {\n\t\tawait zip.loadAsync(file);\n\t} else if (ArrayBuffer.isView(file)) {\n\t\tawait zip.loadAsync(new Uint8Array(file.buffer, file.byteOffset, file.byteLength));\n\t} else {\n\t\tawait zip.loadAsync(file);\n\t}\n\n\tconst result: Record<string, Blob | null> = {};\n\n\tfor (const [fileName, fileEntry] of Object.entries(zip.files)) {\n\t\tresult[fileName] = fileEntry.dir ? null : await fileEntry.async('blob');\n\t}\n\treturn result;\n}\n\nexport async function create(\n\tfiles: Record<string, string | Blob | ArrayBuffer | ArrayBufferView<ArrayBuffer> | null>,\n\tname?: string,\n) {\n\tconst JSZip = await importJSZip();\n\tconst zip = new JSZip();\n\tfile: for (const [path, file] of Object.entries(files)) {\n\t\tconst paths = path.split('/').filter(Boolean);\n\t\tif (!paths.length) { continue; }\n\t\tconst isDir = path.endsWith('/') || file == null;\n\t\tconst name = isDir ? '' : paths.pop();\n\t\ttry {\n\t\t\tlet dir = zip;\n\t\t\tfor (const p of paths) {\n\t\t\t\tconst folder = dir.folder(p);\n\t\t\t\tif (!folder) { continue file; }\n\t\t\t\tdir = folder;\n\t\t\t}\n\t\t\tif (!name) { continue; }\n\t\t\tif (typeof file === 'string' || file instanceof Blob || file instanceof ArrayBuffer) {\n\t\t\t\tdir.file(name, file);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ArrayBuffer.isView(file)) {\n\t\t\t\tdir.file(name, new Uint8Array(file.buffer, file.byteOffset, file.byteLength));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t} catch {\n\n\t\t}\n\t}\n\tconst blob = await zip.generateAsync({ type: 'blob' });\n\treturn new File(\n\t\t[blob],\n\t\t`${name || 'out'}.zip`,\n\t\t{ type: 'application/zip' },\n\t);\n}\n","import type { CellValue, Cell, Color, Workbook, Worksheet } from 'exceljs';\n\n\n/**\n * 富文本元素描述\n */\nexport interface RichTextDefine {\n\t/** 文本内容 */\n\ttext: string;\n\t/** XLSX 内的富文本格式,暂不考虑渲染 */\n\tfont?: Partial<Font>;\n}\n\n/**\n * 单元格对象描述\n */\nexport interface CellDefine {\n\t/** 单元格内的公式,不包含最前面的等号 */\n\tformula?: string;\n\t/** 单元格内的值,除非有错误,如果有公式,则为计算后的公式 */\n\tvalue:\n\t\t| null\n\t\t| number\n\t\t| string\n\t\t| boolean\n\t\t| Date\n\t\t| { richText: RichTextDefine[] }\n\t\t| Error;\n\t/** 数字格式化字符串 */\n\tnumFmt?: string;\n\t/** XLSX 单元格超链接,暂不考虑渲染 */\n\thyperlink?: string;\n\t/** XLSX 单元格样式提示信息,暂不考虑渲染 */\n\ttooltip?: string;\n\t/** XLSX 单元格字体样式,暂不考虑渲染 */\n\tfont?: Partial<Font>;\n\t/** XLSX 单元格对齐方式,暂不考虑渲染 */\n\talignment?: Partial<Alignment>;\n\t/** XLSX 单元格边框样式,暂不考虑渲染 */\n\tborder?: Partial<Borders>;\n\t/** XLSX 单元格填充样式,暂不考虑渲染 */\n\tfill?: Fill;\n\t/** 是否只读 */\n\treadonly?: boolean;\n}\n\nexport type BorderStyle =\n\t| 'none'\n\t| 'double'\n\t| 'thin'\n\t| 'dotted'\n\t| 'hair'\n\t| 'medium'\n\t| 'thick'\n\t| 'dashed'\n\t| 'dashDot'\n\t| 'dashDotDot'\n\t| 'slantDashDot'\n\t| 'mediumDashed'\n\t| 'mediumDashDotDot'\n\t| 'mediumDashDot';\n\n\nexport interface Border {\n\tstyle: BorderStyle;\n\tcolor: string;\n}\n\nexport interface Borders {\n\ttop?: Partial<Border>;\n\tleft?: Partial<Border>;\n\tbottom?: Partial<Border>;\n\tright?: Partial<Border>;\n}\n\nexport type FillPatterns =\n\t| 'none'\n\t| 'solid'\n\t| 'darkVertical'\n\t| 'darkHorizontal'\n\t| 'darkGrid'\n\t| 'darkTrellis'\n\t| 'darkDown'\n\t| 'darkUp'\n\t| 'lightVertical'\n\t| 'lightHorizontal'\n\t| 'lightGrid'\n\t| 'lightTrellis'\n\t| 'lightDown'\n\t| 'lightUp'\n\t| 'darkGray'\n\t| 'mediumGray'\n\t| 'lightGray'\n\t| 'gray125'\n\t| 'gray0625';\n\nexport interface FillPattern {\n\ttype: 'pattern';\n\tpattern: FillPatterns;\n\tfgColor?: string;\n\tbgColor?: string;\n}\n\nexport type Fill = FillPattern;\n\n/**\n * 定义单元格文本对齐方式的配置对象。\n */\nexport interface Alignment {\n\t/** 水平对齐方式 */\n\thorizontal: 'left' | 'center' | 'right' | 'fill' | 'justify' | 'centerContinuous' | 'distributed';\n\t/** 垂直对齐方式 */\n\tvertical: 'top' | 'middle' | 'bottom' | 'distributed' | 'justify';\n\t/** 是否自动换行 */\n\twrapText: boolean;\n\t/** 是否缩小字体以适应单元格宽度 */\n\tshrinkToFit: boolean;\n\t/** 文本缩进级别(以字符为单位) */\n\tindent: number;\n\t/** 阅读顺序(从右到左或从左到右) */\n\treadingOrder: 'rtl' | 'ltr';\n\t/** 文本旋转角度(数字,单位为度)或 'vertical' 表示垂直堆叠 */\n\ttextRotation: number | 'vertical';\n}\n\nexport interface Font {\n\t/** 字体名称 */\n\tname: string;\n\t/** 字体大小(通常以磅为单位) */\n\tsize: number;\n\t/** 字体族编号(如 1 表示 Roman,2 表示 Swiss 等) */\n\tfamily: number;\n\t/** 字体方案类型 */\n\tscheme: 'minor' | 'major' | 'none';\n\t/** 字符集编码(如 0 表示 ANSI,134 表示 GB2312 等) */\n\tcharset: number;\n\t/** 字体颜色,仅包含 Color 接口的部分属性 */\n\tcolor: string;\n\t/** 是否为粗体 */\n\tbold: boolean;\n\t/** 是否为斜体 */\n\titalic: boolean;\n\t/** 下划线样式 */\n\tunderline: boolean | 'none' | 'single' | 'double' | 'singleAccounting' | 'doubleAccounting';\n\t/** 垂直对齐方式,可为上标或下标 */\n\tvertAlign: 'superscript' | 'subscript';\n\t/** 是否添加删除线 */\n\tstrike: boolean;\n\t/** 是否使用轮廓字体 */\n\toutline: boolean;\n}\n\n/**\n * 行/列对象描述\n */\nexport interface RowColDefine {\n\thidden: boolean;\n\tsize: number;\n\t/** 数字格式化字符串 */\n\tnumFmt?: string;\n\t/** XLSX 单元格超链接,暂不考虑渲染 */\n\thyperlink?: string;\n\t/** XLSX 单元格样式提示信息,暂不考虑渲染 */\n\ttooltip?: string;\n\t/** XLSX 单元格字体样式,暂不考虑渲染 */\n\tfont?: Partial<Font>;\n\t/** XLSX 单元格对齐方式,暂不考虑渲染 */\n\talignment?: Partial<Alignment>;\n\t/** XLSX 单元格边框样式,暂不考虑渲染 */\n\tborder?: Partial<Borders>;\n\t/** XLSX 单元格填充样式,暂不考虑渲染 */\n\tfill?: Fill;\n}\n\n/**\n * 工作表对象描述\n */\nexport interface SheetDefine {\n\trows: RowColDefine[];\n\tcols: RowColDefine[];\n\tcells: CellDefine[][];\n\tfrozen: string;\n\tmerges: string[];\n}\n\n\n\nexport const errors = {\n\tnil: new Error('#NULL!'),\n\tdiv0: new Error('#DIV/0!'),\n\tvalue: new Error('#VALUE!'),\n\tref: new Error('#REF!'),\n\tname: new Error('#NAME?'),\n\tnum: new Error('#NUM!'),\n\tna: new Error('#N/A'),\n\terror: new Error('#ERROR!'),\n};\n\nexport function toError(text: string): Error {\n\tconst e = `${text}`.toUpperCase();\n\tfor (const error of Object.values(errors)) {\n\t\tif (e === error.message) { return error; }\n\t}\n\treturn new Error(e);\n}\n\n\n\nexport const MIME: {[key: string]: readonly string[]} = {\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx', '.xltx', '.xlsm'],\n};\n\nexport async function load(xlsx: Blob): Promise<Workbook> {\n\t// @ts-ignore\n\tconst ExcelJS = await import('exceljs').then(v => v.default);\n\tconst workbook = new ExcelJS.Workbook();\n\t// @ts-ignore\n\tawait workbook.xlsx.load(xlsx);\n\treturn workbook;\n}\n\nexport function getCellValue(cell?: Cell) {\n\tif (!cell) { return; }\n\tconst value = cell.value;\n\tif (!value || typeof value !== 'object') {\n\t\treturn value\n\t}\n\n\tconst result = value instanceof Date\n\t\t? value\n\t\t// @ts-ignore\n\t\t: value.result\n\tif (result instanceof Date) {\n\t\treturn new Date(result.getTime() + new Date().getTimezoneOffset() * 60000);\n\t}\n\treturn result;\n}\nexport function setCellValue(cell?: Cell, value?: any) {\n\tif (!cell) { return; }\n\tcell.value = value instanceof Date ? new Date(value.getTime() - new Date().getTimezoneOffset() * 60000) : value;\n}\n\nexport function findActiveSheet(workbook?: Workbook | null) {\n\tif (!workbook) { return null }\n\tconst activeTabIndex = workbook.views[0]?.activeTab || 0;\n\tconst sheet = workbook.worksheets[activeTabIndex];\n\treturn sheet || null;\n}\n/**\n * 将数组数据转换为工作表内容\n */\nexport async function array2sheet(\n\tsheet: Worksheet,\n\tdata: any[],\n\tcolumns: { name: string; label?: string | null }[],\n\toptions?: { rowOffset?: number; colOffset?: number }\n) {\n\ttable2sheet(sheet, [\n\t\tcolumns.map(({ name, label }) => label || name),\n\t\t...data.map(v => columns.map(({ name }) => v[name] ?? '')),\n\t], options);\n}\n\n/**\n * 将二维表格数据写入工作表\n */\nexport async function table2sheet(\n\tsheet: Worksheet,\n\ttable: any[][],\n\t{ rowOffset, colOffset }: { rowOffset?: number; colOffset?: number } = {}\n) {\n\tconst ro = (rowOffset || 0) + 1;\n\tconst co = (colOffset || 0) + 1;\n\tfor (const [R, v] of table.entries()) {\n\t\tfor (const [C, value] of v.entries()) {\n\t\t\tsetCellValue(sheet.getCell(R + ro, C + co), value);\n\t\t}\n\t}\n}\n\n/**\n * 将工作表内容转换为二维数组\n */\nexport async function sheet2array(sheet?: Worksheet | null): Promise<any[][] | null> {\n\tif (!sheet) { return null; }\n\tconst data: any[][] = [];\n\tsheet.eachRow((row, rowNumber) => {\n\t\tconst rowData: any[] = [];\n\t\trow.eachCell({ includeEmpty: true }, (cell) => {\n\t\t\trowData.push(getCellValue(cell));\n\t\t});\n\t\tdata.push(rowData);\n\t});\n\treturn data;\n}\n\n/**\n * 读取工作簿中指定单元格的值\n */\nexport function readCell(workbook: Workbook, sheet: string, cell: string): any {\n\tif (!cell) { return null; }\n\tconst worksheet = sheet ? workbook.getWorksheet(sheet) : findActiveSheet(workbook);\n\tif (!worksheet) { return null; }\n\treturn getCellValue(worksheet.getCell(cell));\n}\n\n/**\n * 生成器:按字段读取工作簿中的单元格\n */\nexport function* read(\n\tworkbook: Workbook,\n\tfields: { cell?: string; sheet: string; [key: string]: any }[]\n): Iterable<[any, any]> {\n\tfor (const item of fields || []) {\n\t\tconst { cell } = item;\n\t\tyield [item, cell ? readCell(workbook, item.sheet, cell) : null];\n\t}\n}\n\n/**\n * 批量填充工作簿中的单元格\n */\nexport function fill(\n\tworkbook: Workbook,\n\tvalues: { sheet: string; cell: string; value: any }[]\n) {\n\tfor (const { sheet, cell, value } of values) {\n\t\tsetCellValue(workbook.getWorksheet(sheet)?.getCell(cell), value);\n\t}\n}\n\n/**\n * 将工作簿转换为 Blob 文件\n */\nexport async function toBlob(workbook: Workbook, name?: string): Promise<File> {\n\tconst buffer = await workbook.xlsx.writeBuffer();\n\treturn new File(\n\t\t[buffer],\n\t\t`${name || 'out'}.xlsx`,\n\t\t{ type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' },\n\t);\n}\n\nconst ACode = 'A'.charCodeAt(0);\n\n/**\n * 将列字母转换为索引\n */\nexport function colLetterToIndex(colLetter: string): number {\n\tconst s = colLetter.toUpperCase().replace(/^[ \\t]+/, '');\n\tlet index = 0;\n\tfor (const char of colLetter) {\n\t\tif (char < 'A' || char > 'Z') { break; }\n\t\tindex = index * 26 + (char.charCodeAt(0) - ACode + 1);\n\t}\n\treturn index;\n}\n\n/**\n * 将 exceljs 的 CellValue 转换为自定义的 CellDefine['value']\n */\nfunction toCellValue(value: CellValue): CellDefine['value'] {\n\tlet cellValue = null;\n\tif (value && typeof value === 'object') {\n\t\tconst { error, richText, text, hyperlink, tooltip, formula, result } = value as any;\n\t\tif (error) { return toError(error); }\n\t\tif (Array.isArray(richText)) { return {richText}}\n\t\tif (typeof text === 'string') { return text; }\n\t\tif (result !== undefined) { cellValue = result }\n\t} else {\n\t\tcellValue = value;\n\t}\n\tif (cellValue instanceof Date) {\n\t\treturn new Date(cellValue.getTime() + new Date().getTimezoneOffset() * 60000);\n\t}\n\treturn cellValue;\n}\n\nconst parseColorRegex1 = /^#?(?<a>[0-9a-f])(?<r>[0-9a-f])(?<g>[0-9a-f])(?<b>[0-9a-f])$/i;\nconst parseColorRegex2 = /^#?(?<a>[0-9a-f]{2})(?<r>[0-9a-f]{2})(?<g>[0-9a-f]{2})(?<b>[0-9a-f]{2})$/i;\n\n/**\n * 将 exceljs 的颜色对象转换为十六进制颜色字符串\n */\nfunction toColorDefine(color?: Partial<Color> | null): string | undefined {\n\tif (!color) { return }\n\tconst {argb, theme} = color;\n\tconst argbC = argb && (parseColorRegex1.exec(argb) || parseColorRegex2.exec(argb))?.groups;\n\tif (argbC) {\n\t\treturn `#${[argbC.r,argbC.g,argbC.b,argbC.a || ''].map(v => `${v}${v}`.slice(2)).join('')}`;\n\t}\n\t// if (typeof theme === 'number' && Number.isSafeInteger(theme) && theme >= 0) { return theme; }\n\n}\n\n/**\n * 将 exceljs 单元格转换为自定义的 CellDefine 对象\n */\nfunction toCellDefine(sheet: Worksheet, row: number, col: number): CellDefine {\n\tconst cell = sheet.getCell(row + 1, col + 1);\n\n\treturn {\n\t\tvalue: toCellValue(cell.value),\n\t\tformula: cell.formula,\n\t\thyperlink: cell.hyperlink,\n\t\t// tooltip,\n\t\tfont: {\n\t\t\t...cell.style.font,\n\t\t\tcolor: toColorDefine(cell.style.font?.color),\n\t\t},\n\t\talignment: cell.style.alignment,\n\t\t// border: {\n\t\t// \t...cell.style.border,\n\t\t// \ttop: {...cell.style.border?.top },\n\t\t// \tleft: {...cell.style.border?.left },\n\t\t// \tbottom: {...cell.style.border?.bottom },\n\t\t// \tright: {...cell.style.border?.right },\n\t\t// },\n\t\tborder: {\n\t\t\ttop: { ...cell.style.border?.top, color: toColorDefine(cell.style.border?.top?.color) },\n\t\t\tleft: { ...cell.style.border?.left, color: toColorDefine(cell.style.border?.left?.color) },\n\t\t\tbottom: { ...cell.style.border?.bottom, color: toColorDefine(cell.style.border?.bottom?.color) },\n\t\t\tright: { ...cell.style.border?.right, color: toColorDefine(cell.style.border?.right?.color) },\n\t\t},\n\t\t// @ts-ignore\n\t\tfill: {\n\t\t\t...cell.style?.fill,\n\t\t\t// @ts-ignore\n\t\t\tfgColor: toColorDefine(cell.style?.fill?.fgColor),\n\t\t\t// @ts-ignore\n\t\t\tbgColor: toColorDefine(cell.style?.fill?.bgColor),\n\t\t},\n\t\tnumFmt: cell.numFmt,\n\t};\n}\n\n/**\n * 将 exceljs 工作表转换为自定义的 SheetDefine 对象\n */\nexport function toSheetDefine(sheet: Worksheet): SheetDefine {\n\tconst rowCount = sheet.rowCount;\n\tconst colCount = sheet.columnCount;\n\n\tconst cells = Array(rowCount).fill(null).map((_, r) => Array(colCount).fill(null).map((_, c) => toCellDefine(sheet, r, c)))\n\n\tconst rows: RowColDefine[] = Array(rowCount).fill(null).map((_, r) => {\n\t\tconst row = sheet.getRow(r + 1);\n\t\treturn {\n\t\t\thidden: row.hidden,\n\t\t\tsize: (row.height || 15) * 4 / 3,\n\t\t};\n\t});\n\n\tconst cols: RowColDefine[] = Array(colCount).fill(null).map((_, r) => {\n\t\tconst col = sheet.getColumn(r + 1);\n\t\treturn {\n\t\t\thidden: col.hidden,\n\t\t\tsize: (col.width || 8.38) * 7 + 5,\n\t\t}\n\t});\n\n\tconst view = sheet.views[0];\n\treturn {\n\t\tcells, rows, cols,\n\t\tfrozen: view.state === 'frozen' && view.topLeftCell || 'A1',\n\t\tmerges: sheet.model.merges,\n\t};\n}\n"],"mappings":"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C,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACvC,CAQD,SAAS,GAAU,EAAO,EAAK,EAAO,EAAK,CAC1C,IAAK,IAAI,EAAI,EAAO,EAAI,EAAK,IAC5B,EAAM,GAAK,EASb,SAAS,GAAU,EAAO,EAAW,EAAW,CAC/C,IAAK,IAAI,EAAI,EAAW,EAAI,EAAM,OAAQ,IACzC,GAAI,EAAU,EAAM,GAAG,CAAI,OAAO,EAEnC,MAAO,GASR,SAAgBC,GAAO,EAAM,CAC5B,IAAM,EAAQ,CAAC,GAAG,EAAK,CAAC,IAAI,GAAK,OAAO,GAAM,SAAW,EAAI,EAAE,WAAW,EAAE,EAAI,EAAE,CAE5E,EAAQ,EAAM,IAAI,GACnB,EAAI,GAAa,EACjB,EAAI,GAAa,EACd,EACN,CAEF,IAAK,IAAI,EAAM,EAAG,GAAO,GAAI,CAC5B,IAAI,EAAQ,GAAU,EAAO,GAAK,GAAK,IAAS,GAAK,GAAO,EAAI,CAChE,GAAI,EAAQ,EAAK,MACjB,EAAM,GAAU,EAAO,GAAK,EAAI,IAAS,EAAI,GAAO,EAAQ,EAAE,CAC9D,IAAI,GAAS,EAAM,EAAI,EAAM,OAAS,GAAO,EACzC,EAAQ,IACR,EAAQ,IACX,IACI,GAAS,EAAM,IAAK,GAAS,IAElC,GAAU,EAAO,EAAG,EAAO,EAAQ,EAAM,EAG1C,IAAK,IAAI,EAAM,EAAG,GAAO,GAAI,CAC5B,IAAM,EAAQ,EAAM,QAAQ,EAAG,EAAI,CACnC,GAAI,EAAQ,EAAK,MACjB,EAAM,GAAU,EAAO,QAAS,EAAQ,EAAE,CAI1C,IAAM,EAAW,CAFH,EAAM,EAAQ,IAAM,EACpB,EAAM,IAAQ,EACG,CAE/B,GAAU,EADG,EAAS,SAAS,EAAE,EAAI,CAAC,EAAS,SAAS,EAAE,CAAG,EAAI,EAC1C,EAAO,EAAM,EAAI,EAAM,OAAS,EAAI,CAE5D,IAAM,EAAQ,EAAE,CAEZ,EAAO,EACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACtC,IAAI,EAAc,EAAM,IAAM,EACxB,EAAW,EAAM,EAAI,IAAM,EAC7B,EAAO,EAAM,GACb,IAAgB,IACf,IAAa,GAGhB,IACA,GAAS,EAAO,IAAU,GAAK,IAAO,EAAM,GAAK,IAAU,IAH3D,EAAc,GAOZ,IAAgB,EACnB,GAAQ,GACE,IAAgB,IAC1B,GAAQ,EAAO,IAAM,IAElB,IAAS,IAER,IAAS,GAAY,IAAS,GAAK,IAAgB,EACtD,EAAM,KAAK,GAAG,EAEd,EAAM,KAAK,EAAO,IAAM,EAAc,IAAM,EAAY,CACxD,EAAO,IAGT,EAAM,KAAK,EAAK,CAIjB,OAFA,EAAM,KAAK,EAAM,QAAQ,EAAG,EAAG,IAAO,EAAI,EAAI,EAAI,EAAM,GAAG,CAAG,IAAI,CAClE,EAAM,KAAK,IAAI,CACR,EAAM,QAAQ,GAAK,GAAK,IAAM,EAAE,CAAC,2EC9MzC,SAAgB,GAAK,EAAqB,CACzC,EAAO,WAAW,CAAC,QAAQ,GAAS,EAAM,MAAM,CAAC,CAGlD,eAAsB,GAAkB,EAAsB,CAC7D,GAAI,GAAQ,QAAW,MAAM,EAAO,OACpC,GAAI,CAAC,UAAU,cAAgB,CAAC,UAAU,aAAa,aACtD,MAAU,MAAM,iDAAiD,CAElE,IAAM,EAAS,MAAM,UAAU,aAAa,aAAa,CAAE,MAAO,CAAE,WAAY,cAAe,CAAE,CAAC,CAElG,GAAI,GAAQ,QAEX,MADA,GAAK,EAAO,CACN,EAAO,OAGd,OADA,GAAQ,iBAAiB,YAAe,CAAE,GAAK,EAAO,EAAK,CAAE,KAAM,GAAM,CAAC,CACnE,EAGR,SAAS,GAAK,EAAK,IAAM,CACxB,OAAO,IAAI,QAAQ,GAAK,WAAW,EAAG,EAAG,CAAC,CAK3C,IAAI,GAAQ,GACZ,SAAgB,GAAkB,EAAsB,CACvD,IAAM,EAAS,SAAS,cAAc,SAAS,CACzC,EAAO,EAAO,YAAY,SAAS,cAAc,OAAO,CAAC,CAC/D,EAAK,MAAM,QAAU,SAErB,EAAO,MAAM,QAAU,IACvB,EAAO,MAAM,OAAS,IACtB,EAAO,MAAM,OAAS,IACtB,EAAO,MAAM,QAAU,IACvB,EAAO,MAAM,WAAa,OAC1B,EAAO,MAAM,cAAgB,QAC7B,EAAO,MAAM,aAAe,QAC5B,EAAO,MAAM,WAAa,OAC1B,EAAO,MAAM,UAAY,OACzB,EAAO,MAAM,SAAW,SAExB,EAAK,OAAS,SACd,IAAM,EAAQ,EAAK,YAAY,SAAS,cAAc,QAAQ,CAAC,CAC/D,EAAM,GAAK,QACX,EAAM,YAAc,GACpB,EAAM,MAAM,WAAa,OACzB,EAAM,MAAM,UAAY,OAExB,IAAM,EAAS,EAAK,YAAY,SAAS,cAAc,SAAS,CAAC,CAUjE,MATA,GAAO,UAAY,KACnB,EAAO,KAAO,SAEd,EAAO,MAAM,SAAW,WACxB,EAAO,MAAM,cAAgB,OAC7B,EAAO,MAAM,YAAc,IAC3B,EAAO,MAAM,aAAe,OAC5B,EAAO,MAAM,WAAa,cAEnB,CACN,OAAQ,OAAO,gBAAiB,CAC/B,GAAI,GAAS,MAAU,MAAM,WAAW,CACxC,GAAQ,GAGR,GAAQ,gBAAgB,CAExB,IAAM,EAAK,IAAI,gBACf,EAAO,iBAAiB,YAAe,EAAG,OAAO,CAAE,CAAE,KAAM,GAAM,CAAC,CAClE,SAAS,KAAK,YAAY,EAAO,CACjC,EAAO,WAAW,CAClB,GAAI,CACH,IAAM,EAAgB,EAAS,YAAY,IAAI,CAAC,EAAG,OAAQ,EAAO,CAAC,CAAG,EAAG,OACzE,GAAI,EAAc,QAAW,OAC7B,GAAI,CAEH,EAAM,UADS,MAAM,GAAkB,EAAG,OAAO,OAEzC,EAAG,CAEX,MADA,MAAM,eAAe,CACf,EAKP,GAHI,EAAc,UAClB,EAAM,MAAM,CACZ,MAAM,IAAM,CACR,EAAc,SAAW,OAC7B,OAAU,CACT,IAAM,EAAQ,MAAM,GAAW,EAAM,CAC/B,EAAI,IAAM,CAIhB,GAHI,IAAS,MAAM,GACf,EAAc,UAClB,MAAM,EACF,EAAc,SAAW,eAErB,CACT,EAAM,UAAY,KAClB,GAAQ,GACR,EAAG,OAAO,CACV,EAAO,QAAQ,GAGjB,qDCpGF,eAAsBC,GAAO,EAAc,EAA+B,IAAK,CAK9E,IAAM,GAHL,MAAM,OAAO,oBAEX,KAAK,GAAK,EAAE,OAAO,EACJ,EAAG,EAAM,CAC3B,EAAG,QAAQ,EAAK,CAChB,EAAG,MAAM,CACT,IAAM,EAAQ,EAAG,gBAAgB,CAE3B,EAAO,EAAE,CACf,IAAK,IAAI,EAAM,EAAG,EAAM,EAAO,IAC9B,IAAK,IAAI,EAAM,EAAG,EAAM,EAAO,IAC9B,EAAK,KAAK,EAAG,OAAO,EAAK,EAAI,CAAG,EAAI,EAAE,CAGxC,OAAO,EAGR,eAAsBC,GAAO,EAAkB,CAC9C,GAAM,CAAE,QAAS,GAAS,MAAM,OAAO,QAEjC,EADO,EAAK,EAAM,KAAM,EAAM,MAAO,EAAM,OAAO,EACrC,KAEnB,OADI,OAAO,GAAS,SAAmB,CAAE,OAAM,CACxC,KAIR,eAAsB,GAAK,EAAsB,CAChD,UAAW,IAAM,KAASC,GAAwB,EAAO,CACxD,GAAI,CACH,IAAM,EAAO,MAAMD,GAAO,EAAM,CAChC,GAAI,CAAC,EAAQ,SACb,OAAO,EAAK,WACJ,EAAO,CAEf,MADA,QAAQ,MAAM,2BAA4B,EAAM,CACtC,MAAM,6CAA6C,ECjChE,MAGM,GAAe,CACpB,KAAM;;;;;;;;EAUN,WAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCZ,CACK,GAAa,OAEJ,CACb,GAAG,GACH,GAAG,EAAS,IAAI,QAAQ,CAAC,OAAO,CAChC,KAAM;;EACN,EAEA,CAMF,SAAgB,EAAW,EAAK,EAAQ,CACvC,IAAM,EAAO,SAAS,gBAAgB,6BAA8B,MAAM,CAC1E,EAAK,aAAa,OAAQ,eAAe,CACzC,EAAK,UAAU,IAAI,OAAO,CAC1B,IAAM,EAAW,MACT,CAAC,EAAI,CAAC,MAAM,CAAC,OAAO,QAAQ,CACjC,QAAQ,GAAO,GAAO,OAAO,GAAQ,SAAW,EAAI,OAAO,CAAG,EAAI,CAClE,OAAO,GAAK,GAAK,OAAO,GAAM,SAAS,CACxC,CACI,EAAY,MAAqB,CACtC,IAAM,EAAO,EAAS,KAAK,CACrB,EAAQ,GAAW,KAAK,CAC9B,IAAK,IAAM,KAAO,EAAM,CACvB,IAAM,EAAO,OAAO,OAAO,EAAO,EAAI,EAAI,EAAM,GAChD,GAAI,EAAQ,OAAO,EAEpB,OAAO,MACN,CACF,GAAI,aAAkB,aAAe,EAAO,QAAW,OAAO,EAC9D,IAAM,EAAc,aAAkB,YAAc,EAAS,IAA0B,CAMvF,SAAS,EAAI,EAAM,CAElB,GADA,EAAK,UAAY,GACb,MAAM,QAAQ,EAAK,EAAI,EAAK,QAAU,EAAG,CAC5C,GAAM,CAAC,EAAU,GAAW,EAC5B,EAAK,aAAa,UAAW,GAAW,UAAU,CAClD,IAAM,EAAO,SAAS,gBAAgB,6BAA8B,OAAO,CAC3E,EAAK,YAAY,EAAK,CACtB,EAAK,aAAa,IAAK,EAAS,CAChC,OAED,KAAK,aAAa,UAAW,UAAU,CAClC,EACL,IAAI,OAAO,GAAS,SAAU,CAC7B,IAAM,EAAO,SAAS,gBAAgB,6BAA8B,OAAO,CAC3E,EAAK,YAAY,EAAK,CACtB,EAAK,aAAa,IAAK,EAAK,CAC5B,OAEG,OAAO,GAAS,YACpB,EAAK,CAAE,OAAM,CAAE,EAAY,EAW5B,OATK,EAGJ,MAAY,EAAU,KAAK,CAAE,EAAK,CACjC,OAAQ,EACR,UAAW,GACX,CAAC,CALF,EAAI,EAAU,KAAK,CAAC,CAQd,ECnHR,MAAM,GAAY,IAAI,IAAI,CACzB,gBACA,iBACA,eACA,cACA,gBACA,CAAC,CACI,GAAW,IAAI,IAAI,CACxB,CAAC,gBAAiB,IAAI,IAAI,CAAC,OAAQ,OAAQ,WAAY,cAAc,CAAC,CAAC,CACvE,CAAC,iBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CACtC,CAAC,CAKF,SAAS,GAAa,EAAM,CAC3B,OAAO,EAAU,SAAS,EAAM,CAC/B,SAAU,OAAO,KAAK,GAAS,CAC/B,UAAW,EAAe,IAAY,CACrC,IAAM,EAAO,EAAc,aAAa,CAIxC,MADA,GAFI,GAAU,IAAI,EAAK,EACN,GAAS,IAAI,EAAQ,aAAa,CAAC,EACtC,IAAI,EAAK,GAGxB,CAAC,CAQH,SAAA,GAAyB,EAAO,EAAM,CAAE,aAAY,SAAQ,SAAQ,WAAU,UAAW,EAAE,CAAE,CAC5F,IAAM,EAAQ,CAAE,aAAY,SAAQ,CACpC,OAAOE,EACN,GACC,EAAO,EAAU,IAAY,GAAiB,EAAO,EAAO,EAAU,EAAQ,CAC/E,EACA,GAAU,EAAE,CACZ,CACC,SAAU,GAAY,GAAO,SAAQ,gBAAc,UAAU,EAAS,CACrE,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,UAAU,IAAI,yBAAyB,CAE9C,MAAa,EAAO,SAAW,EAAQ,SAAU,EAAQ,OAAO,CAChE,IAAM,EAAY,EAAQ,UACpB,EAAO,EAAQ,KACrB,GAAI,IAAc,QAAU,IAAS,WAAY,CAChD,IAAM,EAAO,MAAqB,EAAQ,UAAY,QAAU,OAAO,CACvE,EAAO,YAAY,EAAW,EAAM,EAAQ,OAAO,CAAC,CACpD,EAAO,UAAU,IAAI,uBAAuB,SAClC,IAAc,SAAW,IAAS,UAAW,CACvD,IAAM,EAAO,MAAqB,EAAQ,MAAQ,OAAS,QAAQ,CACnE,EAAO,YAAY,EAAW,EAAM,EAAQ,OAAO,CAAC,MAC1C,IAAS,WAAa,IAAS,WAAa,IAAS,OAC/D,EAAO,YAAY,EAAW,aAAc,EAAQ,OAAO,CAAC,CAC5D,EAAO,MAAQ,MACL,IAAS,QACnB,EAAO,YAAY,EAAW,OAAQ,EAAQ,OAAO,CAAC,CACtD,EAAO,MAAQ,MACL,IAAS,UACnB,EAAO,YAAY,EAAW,cAAe,EAAQ,OAAO,CAAC,CAC7D,EAAO,MAAQ,MACL,IAAS,cACnB,EAAO,YAAY,EAAW,SAAU,EAAQ,OAAO,CAAC,CACxD,EAAO,MAAQ,WACL,IAAS,QACnB,EAAO,YAAY,EAAW,OAAQ,EAAQ,OAAO,CAAC,CACtD,EAAO,MAAQ,MACL,IAAS,YACnB,EAAO,YAAY,EAAW,OAAQ,EAAQ,OAAO,CAAC,CACtD,EAAO,MAAQ,WAEf,EAAO,UAAU,IAAI,gBAAgB,EAAQ,UAAU,GAAG,EAAK,QAAQ,WAAY,MAAM,CAAC,aAAa,GAAG,CAE3G,OAAO,GAER,CACD,CC/EF,MAAM,GAAgB,MAAqB,EAAS,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAQjF,SAAS,GAAU,EAAM,CACxB,GAAI,CAAC,EAAQ,OAAO,KACpB,IAAM,EAAY,GAAc,KAAK,CACrC,GAAI,CAAC,OAAO,OAAO,EAAW,EAAK,CAAI,OAAO,KAC9C,IAAM,EAAW,EAAU,GAC3B,GAAI,CAAC,EAAY,OAAO,KACxB,IAAM,EAAS,EAAS,OAExB,OADI,OAAO,GAAW,WACf,EADoC,KAU5C,SAAA,GAAyB,EAAO,EAAM,EAAS,CAC9C,GAAM,CAAC,OAAM,WAAU,SAAQ,QAAO,SAAQ,aAAY,SAAS,GAAG,GAAW,GAAW,EAAE,EAC/E,GAAU,EAAK,EAAIC,IAC3B,EAAO,EAAM,CACnB,MAAO,GAAS,KAChB,OAAQ,GAAU,KAClB,SAAU,EAAQ,EAClB,OAAQ,GAAU,IAA0B,CAC5C,WAAY,EAAQ,EACpB,OAAQ,EAAQ,EAChB,GAAG,EACH,CAAC,CCjCH,SAAwB,GAAY,EAAQ,EAAiB,CAC5D,IAAM,EAAa,OAAO,GAAoB,UAAY,GAAmB,EAAE,CACzE,EAAS,GAAS,EAAO,OAAQ,EAAY,EAAO,YAAY,CAEtE,OADcC,EAAM,OAAO,EAAO,CCCnC,SAAwB,GAAgB,EAAM,EAAO,EAAO,EAAM,CACjE,IAAI,EAAiB,EAAY,GAAM,CACnC,EAAY,GAEV,EAAS,IAAI,IAEb,EAAQ,EAAY,EAAK,GAAM,CAC/B,EAAY,GAAS,EAAM,CAC3B,EAAS,GAAgB,EAAM,OAAQ,EAAM,MAAO,KAAM,EAAM,QAAQ,OAAO,CAE/E,EAAK,IAAI,gBACT,EAAS,EAAG,OAmClB,MAAO,CACN,KAnCY,EAAU,CACtB,QAAO,MAAO,CAAE,GAAG,EAAO,CAC1B,IAAI,UAAW,CAAE,MAAO,IACxB,IAAI,MAAO,CAAE,OAAO,GACpB,IAAI,SAAU,CAAE,OAAO,GACvB,IAAI,UAAW,CAAE,MAAO,IACxB,IAAI,QAAS,CAAE,MAAO,IACtB,IAAI,UAAW,CAAE,MAAO,IAExB,IAAI,OAAQ,CAAE,MAAO,IACrB,IAAI,aAAc,CAAE,MAAO,IAC3B,IAAI,aAAc,CAAE,MAAO,IAC3B,IAAI,QAAS,CAAE,OAAO,GACtB,SACA,OAAO,EAAO,EAAQ,CACrB,IAAM,EAAK,EAAO,KAAK,KAAK,CACxB,EAAM,EAAO,IAAI,EAAM,CAM3B,OALK,IACJ,EAAM,IAAI,IACV,EAAO,IAAI,EAAO,EAAI,EAEvB,EAAI,IAAI,EAAG,KACE,CAAE,GAAK,OAAO,EAAG,GAE/B,MAAO,GACP,IAAI,OAAQ,CAAE,OAAO,EAAM,KAAK,EAChC,IAAI,MAAM,EAAG,GACb,IAAI,WAAY,CAAE,OAAO,EAAe,KAAK,EAC7C,IAAI,UAAW,CAAE,MAAO,IACxB,IAAI,UAAW,CAAE,MAAO,IACxB,IAAI,WAAY,CAAE,MAAO,IAEzB,CAAC,CAID,SAAU,CACL,IACJ,EAAY,GACZ,EAAe,IAAI,GAAK,CACxB,EAAG,OAAO,GAEX,IAAI,OAAQ,CACX,OAAO,GAER,IAAI,MAAM,EAAG,CACR,GACJ,EAAM,IAAI,EAAE,EAEb,CC/CF,SAAgB,GAAkB,EAAS,EAAQ,EAAU,CAC5D,GAAM,CAAE,MAAO,EAAM,WAAU,MAAO,EAAW,QAAS,EACpD,EAAQ,EAAK,MAAM,IAAI,CACvB,EAAK,OAAO,GAAa,SAAW,EAAW,GACrD,GAAI,EAAW,CACd,IAAM,EAAQ,MAAqB,GAAY,GAAY,GAAK,CAAE,GAAY,GAAa,GAAK,CAEhG,OADA,EAAS,CAAE,OAAQ,EAAO,QAAO,SAAU,EAAI,OAAM,CAAC,CAC/C,EAER,IAAM,EAAM,EAAQ,EAMpB,SAAS,EAAO,EAAG,CAIlB,GAHI,CAAC,MAAM,QAAQ,EAAE,EACjB,EAAE,SAAW,GACb,EAAQ,EAAE,KAAQ,GAClB,EAAE,KAAO,EAAM,MAAO,GAC1B,IAAM,EAAQ,EAAE,GAChB,GAAI,GAAS,OAAO,GAAU,UAAY,CAAC,MAAM,QAAQ,EAAM,CAAI,MAAO,GAC1E,IAAM,EAAS,EAAE,GACjB,GAAI,EAAO,SAAW,EAAM,OAAU,MAAO,GAC7C,IAAK,GAAM,CAAC,EAAO,KAAU,EAAO,SAAS,CAC5C,IAAK,OAAO,GAAU,SAAW,EAAQ,EAAM,MAAQ,EAAM,GAAU,MAAO,GAE/E,MAAO,GAOR,SAAS,EAAI,EAAK,CACjB,IAAM,EAAO,EAAQ,KAAK,CACpB,EAAQ,EAAK,UAAU,EAAO,CACpC,GAAI,EAAQ,EAAG,CACV,GAAO,MACV,EAAQ,IAAI,CAAC,GAAG,EAAM,CAAC,EAAO,EAAK,EAAI,EAAO,IAAM,GAAG,CAAC,CAAC,CAE1D,OAGD,GAAI,IAAQ,KAAM,CAEjB,IAAM,EAAO,CAAC,GAAG,EAAK,GAAO,CAC7B,EAAK,GAAK,EACV,EAAQ,IAAI,CACX,GAAG,EAAK,MAAM,EAAG,EAAM,CACvB,EACA,GAAG,EAAK,MAAM,EAAQ,EAAE,CACxB,CAAC,MAEF,EAAQ,IAAI,CACX,GAAG,EAAK,MAAM,EAAG,EAAM,CACvB,GAAG,EAAK,MAAM,EAAQ,EAAE,CACxB,CAAC,CAIJ,SAAS,GAAM,CACd,OAAO,EAAQ,KAAK,CAAC,KAAK,EAAO,GAAG,GAErC,IAAM,EAAQ,EAAe,EAAI,CACjC,MAAO,CACN,KAAM,CAAE,OAAO,EAAM,KAAK,EAC1B,MACA,CAeF,SAAS,GAAkB,EAAS,EAAQ,EAAU,EAAO,EAAO,EAAQ,CAC3E,GAAM,CAAE,YAAa,EACf,EAAQ,GAAkB,EAAS,EAAQ,EAAS,CACpD,EAAY,GAAe,EAAO,EAAS,CAC3C,EAAY,EAAY,GAAM,CAC9B,EAAS,GAAgB,EAAM,OAAQ,EAAM,MAAO,KAAM,EAAM,QAAQ,OAAO,CAE/E,EAAO,EAAU,CACtB,QAAO,MAAO,CAAE,GAAG,EAAO,MAAO,GAAM,CACvC,IAAI,UAAW,CAAE,OAAO,GACxB,IAAI,OAAQ,CAAE,OAAO,EAAM,KAAK,EAChC,IAAI,MAAM,EAAK,CACV,EAAU,KAAK,EACnB,EAAM,IAAI,EAAI,EAEf,IAAI,QAAS,CAAE,OAAO,GACtB,OAAQ,GAAU,IAA0B,CAC5C,IAAI,WAAY,CAAE,OAAO,EAAU,KAAK,EACxC,CAAC,CAMF,OALI,GAAQ,QACX,EAAU,IAAI,GAAK,CAEnB,GAAQ,iBAAiB,YAAe,CAAE,EAAU,IAAI,GAAK,EAAK,CAAE,KAAM,GAAM,CAAC,CAE3E,EAoBR,SAAwB,GAAmB,EAAS,EAAM,EAAS,CAClE,SAAQ,YAAW,SAAQ,UACzB,CACF,GAAI,GAAQ,QAAW,OAEvB,IAAM,EAAS,EAAE,CACX,EAAQ,CAAE,YAAW,SAAQ,CACnC,IAAK,IAAM,KAAU,EAAS,CAC7B,GAAM,CAAE,SAAU,EACZ,EAAc,OAAO,OAAO,EAAQ,EAAM,EAAI,EAAO,GAC3D,GAAI,CAAC,EAAe,SACpB,IAAM,EAAO,EAAY,KACzB,GAAI,CAAC,GAAQ,OAAO,GAAS,SAAY,SACzC,IAAM,EAAI,GAAkB,EAAS,EAAQ,GAAK,EAAO,KAAK,EAAE,CAAE,EAAa,EAAO,EAAO,CAC7F,EAAK,YAAY,EAAE,CACnB,GAAQ,iBAAiB,YAAe,CAAE,EAAE,QAAQ,EAAK,CAAE,KAAM,GAAM,CAAC,CAEpE,EAAO,QACZ,MAAa,CAEZ,IAAM,EAAO,EAAE,CACf,IAAK,GAAM,CAAE,SAAQ,QAAO,WAAU,UAAU,EAAQ,CACvD,IAAM,EAAQ,EAAM,KAAK,CACrB,GAAS,MACb,EAAK,KAAK,CAAC,EAAQ,EAAO,EAAU,EAAO,IAAM,GAAG,CAAC,CAEtD,EAAQ,OAAO,EAAK,OAAS,EAAO,KAAK,EACvC,EAAO,CChKX,SAAwB,GAAa,EAAW,EAAO,EAAU,EAAS,EAAO,EAAQ,CACxF,IAAM,EAAY,EAAY,GAAM,CAC9B,EAAQ,EACR,EAAgB,EAChB,EAAS,GAAgB,EAAM,OAAQ,EAAM,MAAO,KAAM,EAAM,QAAQ,OAAO,CAMrF,OAJA,EAAO,iBAAiB,YAAe,CACtC,EAAU,IAAI,GAAK,EACjB,CAAE,KAAM,GAAM,CAAC,CAEX,EAAU,CAChB,QAAO,QACP,IAAI,UAAW,CAAE,OAAO,EAAc,KAAK,EAC3C,IAAI,OAAQ,CAAE,OAAO,EAAM,KAAK,EAChC,IAAI,MAAM,EAAK,CACV,EAAU,KAAK,GACL,EAAM,KAAK,CACzB,EAAM,IAAI,EAAI,GAGf,IAAI,QAAS,CAAE,OAAO,GACtB,SACA,IAAI,WAAY,CAAE,OAAO,EAAU,KAAK,EACxC,CAAC,CC1BH,SAAwB,GAAkB,EAAO,EAAU,EAAS,EAAW,EAAQ,CAEtF,IAAM,EAAQ,CAAE,GAAG,EAAW,CAC9B,OAAO,EAAM,MACb,OAAO,EAAM,UACb,IAAI,EAAY,GAAQ,SAAW,GACnC,GAAQ,iBAAiB,YAAe,CAAE,EAAY,IAAS,CAAE,KAAM,GAAM,CAAC,CAC9E,IAAM,EAAY,GAAwB,EAAM,CAE1C,EAAO,SAAS,cAAc,OAAO,CAC3C,EAAK,UAAU,IAAI,mBAAmB,CACtC,IAAM,EAAmB,EAAK,YAAY,SAAS,cAAc,SAAS,CAAC,CAE3E,EAAiB,UAAU,IAAI,uBAAuB,CACtD,IAAK,GAAM,CAAC,EAAO,KAAU,OAAO,QAAQ,EAAU,CAAE,CACvD,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,MAAQ,EACf,EAAO,MAAQ,GAAS,EACxB,EAAiB,YAAY,EAAO,CAGrC,IAAI,EAAmB,GAAe,EAAO,EAAQ,KAAK,CAAC,CACvD,EAAwB,IAAI,gBAC5B,EAAgB,GAAa,EAAkB,EAAO,EAAU,EAAS,EAAO,EAAS,YAAY,IAAI,CAAC,EAAsB,OAAQ,EAAO,CAAC,CAAG,EAAsB,OAAO,CAChL,EAAa,EAAK,YAAY,EAAc,CAEhD,EAAW,UAAU,IAAI,oBAAoB,CAG7C,SAAS,EAAY,EAAU,CAE9B,GADI,GACA,OAAO,GAAa,UAAY,IAAa,EAAQ,KAAK,CAAI,OAC5D,KAAY,EAGlB,EAAiB,MAAQ,EACzB,IAAM,EAAY,GAAe,EAAO,EAAS,CACjD,GAAI,IAAc,EAAkB,CACnC,EAAQ,IAAI,EAAS,CACrB,OAED,EAAsB,OAAO,CAC7B,EAAW,QAAQ,CACnB,EAAmB,EACnB,EAAQ,IAAI,EAAS,CAErB,EAAwB,IAAI,gBAC5B,EAAgB,GAAa,EAAkB,EAAO,EAAU,EAAS,EAAO,EAAS,YAAY,IAAI,CAAC,EAAsB,OAAQ,EAAO,CAAC,CAAG,EAAsB,OAAO,CAChL,EAAa,EAAK,YAAY,EAAc,CAC5C,EAAW,UAAU,IAAI,oBAAoB,CAI9C,OAFA,EAAiB,iBAAiB,YAAe,EAAY,EAAiB,MAAM,CAAC,CACrF,EAAY,EAAiB,MAAM,CAC5B,ECtDR,SAAwB,GAAc,EAAM,EAAQ,EAAO,CAC1D,EAAK,UAAU,IAAI,sBAAsB,CACzC,IAAM,EAAK,IAAI,gBACT,EAAS,EAAG,OACd,EAAS,MAAM,QAAQ,EAAM,CAAG,gBAAgB,EAAM,CAAG,EAAE,CAGzD,EAAY,IAAI,IAAI,OAAO,QAAQ,EAAO,CAAC,QAAQ,EAAG,KAAO,CAElE,IAAM,EAAO,EAAE,KAEf,MADA,EAAI,CAAC,GAAQ,OAAO,GAAS,WAE5B,CAAC,CAEG,EAAQ,CAAE,MAAO,GAAO,UAAW,GAAO,OAAQ,GAAM,CAO9D,SAAS,EAAW,EAAG,CACtB,IAAM,EAAO,EAAK,YAAY,SAAS,cAAc,MAAM,CAAC,CAC5D,EAAK,UAAU,IAAI,oBAAoB,CAEvC,IAAM,EAAc,SAAS,cAAc,SAAS,CACpD,EAAY,UAAU,IAAI,wBAAwB,CAClD,EAAK,YAAY,EAAY,CAC7B,IAAM,EAAe,SAAS,cAAc,SAAS,CACrD,EAAa,UAAU,IAAI,qBAAqB,CAChD,EAAa,KAAO,SACpB,EAAK,YAAY,EAAa,CAC9B,EAAY,YAAY,SAAS,cAAc,SAAS,CAAC,CACzD,IAAK,GAAM,CAAC,EAAM,KAAM,EAAW,CAClC,IAAM,EAAO,EAAE,KACf,GAAI,CAAC,GAAQ,OAAO,GAAS,SAAY,SACzC,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,MAAQ,EACf,EAAO,MAAQ,EAAE,OAAS,EAC1B,EAAY,YAAY,EAAO,CAGhC,IAAI,EAAc,KAClB,EAAa,YAAY,SAAS,eAAe,KAAK,CAAC,CACvD,EAAa,iBAAiB,YAAe,CAC5C,GAAa,OAAO,CACpB,IAAM,EAAQ,CAAC,GAAG,EAAK,SAAS,CAAC,QAAQ,EAAK,CAC1C,EAAQ,IACZ,EAAK,QAAQ,CACb,EAAO,OAAO,EAAO,EAAE,GACtB,CACF,IAAM,EAAQ,GAAa,CACrB,EAAgB,EAAY,GAAG,CACrC,SAAS,GAAa,CACrB,IAAM,EAAQ,CAAC,GAAG,EAAK,SAAS,CAAC,QAAQ,EAAK,CAC9C,GAAI,EAAQ,EAAK,OACjB,IAAM,EAAI,EAAO,GACX,EAAQ,EAAM,KAAK,CACnB,EAAW,EAAc,KAAK,CACpC,GAAI,GAAK,EAAE,SAAW,EAAG,CACxB,IAAM,EAAS,EAAE,GACX,EAAY,EAAO,SAAW,GAAK,EAAO,GAC1C,EAAQ,OAAO,GAAc,SAAW,EAAY,MAAM,QAAQ,EAAU,EAAI,EAAU,SAAW,EAAI,EAAU,GAAK,GAG9H,GADI,CAAC,GAAS,CAAC,GACX,GAAK,GAAe,IAAU,EAAY,MAAQ,EAAE,KAAO,GAAY,EAAE,KAAO,EACnF,OAIF,EAAO,OAAO,EAAO,EAAG,EAAc,CAAC,CAAC,EAAY,KAAK,CAAE,EAAO,EAAS,CAAG,KAAK,CA2BpF,GAzBA,EAAY,iBAAiB,aAAgB,CAC5C,IAAM,EAAO,EAAY,MACnB,EAAQ,EAAU,IAAI,EAAK,CAEjC,GADI,CAAC,GAAe,CAAC,GACjB,GAAa,OAAS,EAAQ,OAElC,GADA,GAAa,OAAO,CAChB,CAAC,EAAO,CACX,EAAc,KACd,GAAY,CACZ,OAED,IAAM,EAAwB,IAAI,gBAC5B,EAAW,YAAY,IAAI,CAAC,EAAsB,OAAQ,EAAO,CAAC,CAExE,EAAM,IAAI,IAAA,GAAU,CACpB,EAAc,IAAI,GAAG,CACrB,IAAM,EAAa,GAAkB,EAAO,EAAO,EAAe,EAAO,EAAS,CAClF,EAAc,CAAE,OAAM,OAAQ,CAAC,EAAsB,OAAO,EAAG,CAE/D,EAAK,aAAa,EAAY,EAAa,CAC3C,EAAS,iBAAiB,YAAe,CACxC,EAAW,QAAQ,EAClB,CACF,EAAO,EAAY,EAAS,EAC3B,CACE,CAAC,EAAK,OAEV,IAAM,EAAS,EAAE,GACX,EAAY,EAAO,SAAW,GAAK,EAAO,GAC1C,EAAY,OAAO,GAAc,SAAW,EAAY,MAAM,QAAQ,EAAU,EAAI,EAAU,SAAW,EAAI,EAAU,GAAK,GAGlI,GADA,EAAY,MAAQ,EAChB,CAAC,EAAY,MAAS,OAC1B,IAAM,EAAe,EAAY,MAC3B,EAAQ,EAAU,IAAI,EAAa,CACzC,GAAI,CAAC,EAAS,OACd,IAAM,EAAwB,IAAI,gBAC5B,EAAW,YAAY,IAAI,CAAC,EAAsB,OAAQ,EAAO,CAAC,CAEpE,IAAiB,GACpB,EAAM,IAAI,EAAE,GAAG,CACf,EAAc,IAAI,EAAE,IAAM,GAAG,GAE7B,EAAM,IAAI,IAAA,GAAU,CACpB,EAAc,IAAI,GAAG,EAEtB,IAAM,EAAa,GAAkB,EAAO,EAAO,EAAe,EAAO,EAAS,CAClF,EAAc,CAAE,KAAM,EAAc,OAAQ,CAAC,EAAsB,OAAO,EAAG,CAC7E,EAAK,aAAa,EAAY,EAAa,CAC3C,EAAS,iBAAiB,YAAe,CACxC,EAAW,QAAQ,EAClB,CACF,EAAO,EAAY,EAAS,CAI7B,SAAS,GAAQ,CAChB,IAAK,IAAM,KAAK,EACf,EAAW,EAAE,CAGf,GAAO,CACP,IAAI,EAAY,GAChB,MAAO,CACN,OACA,QAAW,GAAY,CACvB,SAAU,CAKT,OAJI,EAAoB,GACxB,EAAY,GACZ,EAAK,UAAY,GACjB,EAAG,OAAO,CACH,IAER,CCnKF,MAAa,EAAO,SAAS,cAAc,MAAM,CCA3C,GAAsC,SAAS,cAAc,OAAO,CAEpE,GAD8C,SAAS,cAAc,iBAAiB,EAC5D,SAAS,cAAc,OAAO,CAC9D,GAAS,IAAM,OACf,MAAM,GAAc,GAAS,KAC7B,IAAI,GAAc,GAKlB,SAAgB,GAAQ,EAAM,CAC7B,IAAM,EAAU,GAAQ,GACpB,OAAY,GAEhB,IADA,GAAc,EACV,CAAC,EAAS,CACb,GAAS,QAAQ,CACjB,OAED,GAAS,KAAO,EAChB,GAAK,YAAY,GAAS,ECf3B,IAAqB,EAArB,KAAoC,CACnC,GAAa,EAAY,GAAM,CAC/B,GAKA,YAAY,EAAQ,CAEnB,GAAM,CAAE,UAAS,UAAW,QAAQ,eAAe,CACnD,MAAA,EAAoB,EAChB,aAAkB,aACrB,MAAA,EAAe,EACX,EAAO,QACV,MAAA,EAAgB,IAAI,GAAK,CAEzB,EAAO,iBAAiB,YAAe,CACtC,MAAA,EAAgB,IAAI,GAAK,EACvB,CAAE,KAAM,GAAM,CAAC,EAGnB,MAAA,EAAe,IAA0B,CAuB3C,YAAY,EAAW,CAEtB,OADI,EAAoB,MAAA,EACjB,MAAA,EAAkB,WAAa,IAAK,CAE5C,IAAI,WAAY,CAAE,OAAO,MAAA,EAAgB,KAAK,CAE9C,GACA,IAAI,QAAS,CAAE,OAAO,MAAA,ICnDV,GAAb,cAAiC,CAAe,CAC/C,GACA,GAAa,SAAS,cAAc,MAAM,CAC1C,IAAI,WAAY,CAAE,OAAO,MAAA,EAOzB,YAAY,EAAM,EAAQ,CACzB,MAAM,EAAO,CACb,MAAA,EAAa,EACb,IAAM,EAAY,EAAK,YAAY,MAAA,EAAgB,CACnD,EAAK,UAAY,eACjB,EAAU,UAAY,sBEfxB,IAAW,GDAX,KAA0B,CAEzB,GAEA,GAEA,GAEA,GAEA,GAAa,EAAE,CACf,GAAS,SAAS,cAAc,QAAQ,CACxC,GAAS,MAAA,EAAY,YAAY,SAAS,cAAc,QAAQ,CAAC,CACjE,GAAM,MAAA,EAAY,YAAY,SAAS,cAAc,KAAK,CAAC,CAC3D,GAAS,MAAA,EAAY,YAAY,SAAS,cAAc,QAAQ,CAAC,CACjE,IAAI,MAAO,CAAE,OAAO,MAAA,EACpB,IAAI,WAAY,CACf,OAAO,MAAA,EAER,IAAI,UAAU,EAAI,CACjB,IAAM,EAAY,OAAO,GAAO,WAAa,EAAK,KAC9C,MAAA,IAAoB,IACxB,MAAA,EAAkB,EAClB,MAAA,GAAkB,EAOnB,YAAY,EAAW,EAAO,CAC7B,IAAM,EAAa,OAAO,QAAQ,EAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAQ,OAAO,GAAS,SAAS,CACjG,EAAW,OAAO,QAAQ,EAAM,OAAO,CAAC,QAAQ,EAAE,KAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAO,EAAE,CAEzF,MAAA,EADqB,EAAM,cAAgB,GAE3C,MAAA,EAAkB,OAAO,GAAc,WAAa,EAAY,KAChE,MAAA,EAAmB,EACnB,MAAA,EAAiB,EACjB,IAAM,EAAK,MAAA,EACX,EAAG,UAAY,GACJ,EAAG,YAAY,SAAS,cAAc,KAAK,CAAC,CACpD,YAAY,SAAS,eAAe,IAAI,CAAC,CAC5C,IAAK,GAAM,CAAC,EAAK,KAAU,EACf,EAAG,YAAY,SAAS,cAAc,KAAK,CAAC,CACpD,YAAY,SAAS,eAAe,EAAM,OAAS,EAAK,CAAC,CAG9D,IAAc,CACb,IAAM,EAAQ,MAAA,EACd,EAAM,UAAY,GAClB,IAAM,EAAW,MAAA,EACX,EAAe,MAAA,EACf,EAAa,MAAA,EACb,EAAY,MAAA,EAClB,IAAK,IAAM,KAAK,MAAA,EAAiB,CAChC,IAAM,EAAK,EAAM,YAAY,SAAS,cAAc,KAAK,CAAC,CACpD,EAAK,EAAG,YAAY,SAAS,cAAc,KAAK,CAAC,CACjD,EAAQiB,EAAiB,EAAc,EAAE,EAAI,EAAS,IAAI,GAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CACpF,GAAI,EAAW,CACd,IAAM,EAAI,EAAG,YAAY,SAAS,cAAc,IAAI,CAAC,CACrD,EAAE,KAAO,EAAU,EAAS,IAAI,GAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CACrD,EAAE,YAAY,SAAS,eAAe,EAAM,CAAC,MAE7C,EAAG,YAAY,SAAS,eAAe,EAAM,CAAC,CAE/C,IAAK,GAAM,CAAC,EAAK,KAAU,EAAY,CACtC,IAAM,EAAK,EAAG,YAAY,SAAS,cAAc,KAAK,CAAC,CACjD,EAAI,GAAgB,EAAM,EAAO,EAAE,CAAE,EAAE,CAC7C,EAAG,YAAY,EAAE,KAAK,GAQzB,QAAQ,EAAM,CACb,MAAA,EAAkB,EAClB,MAAA,GAAkB,CAGnB,SAAU,IC/EA,GAAa,KAAM,CAC7B,GAAc,SAAS,cAAc,MAAM,CAC3C,IAAI,MAAO,CAAC,OAAO,MAAA,EACnB,IAAI,MAAO,CAAE,MAAO,GACpB,IAAI,KAAK,EAAG,EACZ,IAAI,MAAO,CAAE,MAAO,GACpB,IAAI,KAAK,EAAG,EACZ,IAAI,OAAQ,CAAE,MAAO,GACrB,IAAI,MAAM,EAAG,EAMb,OAAO,EAAQ,CACd,UAAa,GAEd,SAAU,IAYA,IAAqB,EAAO,IAAY,KAQxC,IAAoB,EAAO,EAAQ,IAAY,KAI/C,OAAuB,KAMlC,SAAwB,GAAc,EAAa,EAAE,CAAE,CACtD,GAAO,EAAW,MAAQ,EAAW,MAAQ,GAC7C,GAAa,EAAW,YAAc,EAAW,YAAc,GAC/D,IAAM,EAAc,EAAW,mBAAqB,EAAW,YACzD,EAAa,EAAW,kBAAoB,EAAW,WACvD,EAAW,EAAW,gBAAkB,EAAW,SACrD,OAAO,GAAgB,aAC1B,GAAoB,GAEjB,OAAO,GAAe,aACzB,GAAmB,GAEhB,OAAO,GAAa,aACvB,GAAiB,GCuFnB,MAAM,GAAc,CACnB,MAAO,SAAU,OAAQ,OAAQ,UAAW,SAAU,QACtD,CAQD,SAAS,GAAM,EAAM,EAAa,CACjC,IAAK,IAAM,KAAK,EACf,OAAO,EAAK,GAGb,OAAO,EAOR,SAAS,GAAW,EAAM,EAAc,EAAE,CAAE,CAE3C,IAAM,EAAY,EAAE,CAEd,EAAU,EAAE,CAClB,IAAK,GAAM,CAAE,MAAO,EAAQ,OAAM,GAAG,KAAU,EAAM,CACpD,IAAM,EAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,EAAO,CAAC,EAAI,EACjD,EAAQ,OAAS,EACjB,IAAM,EAAS,EAAQ,SAAS,QAAQ,CACxC,GAAI,IAAS,SAAU,CAEtB,IAAM,EAAS,EACX,EACH,EAAO,QAAQ,KAAK,EAAO,CAE3B,EAAY,KAAK,EAAO,CAEzB,SAGD,IAAM,EAAO,IAAS,UAAY,KAAO,CAAE,GAAG,EAAM,QAAS,EAAE,CAAE,SAAU,EAAE,CAAE,CAC3E,EACH,EAAO,SAAS,KAAK,EAAK,CAE1B,EAAU,KAAK,EAAK,CAErB,EAAQ,GAAS,EAElB,OAAO,EAUR,SAAS,GAAW,EAAO,EAAQ,EAAc,CAEhD,IAAM,EAAS,EAAE,CACjB,IAAK,IAAM,KAAQ,EAAO,CACzB,GAAI,CAAC,EAAM,CACV,EAAO,KAAK,EAAK,CACjB,SAED,GAAM,CAAE,YAAa,EACrB,GAAI,GAAU,CAAC,EAAO,EAAK,CAAI,SAC/B,GAAI,CAAC,GAAU,OAAQ,CACtB,EAAO,KAAK,EAAK,CACjB,SAED,IAAM,EAAO,GAAW,EAAU,EAAQ,EAAa,CAAC,QAAQ,EAAG,EAAG,IAGrE,GAFI,GACA,IAAM,GACN,EAAE,EAAI,IAET,CACG,EAAK,SACN,GAAgB,EAAK,OAAO,QAAQ,CAAC,QAAU,EAClD,EAAO,KAAK,GAAG,EAAK,EAEf,EAAK,EAAK,OAAS,IAAM,EAAK,KAAK,CACnC,EAAK,IAAM,EAAK,OAAO,CAC5B,EAAO,KAAK,CAAE,GAAG,EAAM,SAAU,EAAM,CAAC,GAG1C,GAAI,GAAgB,EAAO,SAAW,EAAG,CACxC,GAAM,CAAC,GAAQ,EACf,GAAI,GAAM,UAAU,OACnB,OAAO,EAAK,SAGd,OAAO,EAiBR,SAAS,GAAY,EAAK,EAAO,GAAG,EAAM,CACzC,IAAI,EAAI,EACF,EAAO,EAAK,KAAK,CACvB,IAAK,IAAM,KAAO,EAAM,CACvB,IAAI,EAAM,EAAE,IAAI,EAAI,CACf,IACJ,EAAM,IAAI,IACV,EAAE,IAAI,EAAK,EAAI,EAEhB,EAAI,EAEL,EAAE,IAAI,EAAM,EAAM,CAWnB,SAAS,GAAU,EAAO,EAAW,EAAO,EAAS,CAEpD,IAAM,EAAa,IAAI,IAEjB,EAAe,IAAI,IACzB,IAAK,GAAM,CAAC,EAAW,KAAM,IAAI,QAAQ,EAAO,GAAK,EAAE,WAAa,GAAG,CAAC,SAAS,CAChF,IAAK,GAAM,CAAC,EAAO,KAAS,IAAI,QAAQ,EAAG,GAAK,EAAE,OAAS,GAAG,CAAC,SAAS,CAAE,CAEzE,IAAM,EAAU,EAAE,CACZ,EAAO,GAAW,EAAM,EAAQ,CACtC,GAAY,EAAc,EAAS,EAAW,EAAM,CACpD,GAAY,EAAY,EAAM,EAAW,EAAM,CAIjD,IAAM,EAAe,IAAI,IAEnB,EAAiB,IAAI,IAK3B,SAAS,EAAU,EAAS,CAC3B,IAAK,IAAI,EAAI,EAAQ,OAAS,EAAG,GAAK,EAAG,IAAK,CAC7C,IAAM,EAAO,EAAQ,GACf,CAAE,UAAS,SAAU,EAC3B,GAAI,CAAC,GAAW,CAAC,EAAS,SAC1B,GAAM,EAAM,GAAY,CACxB,IAAM,EAAa,EAAe,IAAI,EAAQ,EAAE,IAAI,EAAM,CAC1D,EAAQ,OAAO,EAAG,EAAG,GAAG,GAAc,EAAE,CAAC,EAO3C,SAAS,EAAQ,EAAO,CACvB,IAAK,IAAI,EAAI,EAAM,OAAS,EAAG,GAAK,EAAG,IAAK,CAC3C,IAAM,EAAO,EAAM,GACnB,GAAI,CAAC,EAAQ,SACb,GAAI,EAAK,UAAU,OAAQ,CAC1B,EAAQ,EAAK,SAAS,CACtB,SAED,GAAM,CAAE,UAAS,QAAO,WAAY,EACpC,GAAI,CAAC,GAAW,CAAC,EAAS,SAC1B,GAAM,EAAM,GAAY,CACxB,IAAM,EAAW,EAAa,IAAI,EAAQ,EAAE,IAAI,EAAM,CAChD,EAAa,EAAe,IAAI,EAAQ,EAAE,IAAI,EAAM,CAC1D,GAAI,CAAC,GAAU,QAAU,CAAC,GAAY,OAAQ,CAC7C,EAAM,OAAO,EAAG,EAAE,CAClB,SAEG,IAAY,UACf,EAAM,OAAO,EAAG,EAAG,GAAG,GAAY,EAAE,CAAC,EAErC,EAAK,SAAW,GAAY,EAAE,CAC9B,EAAK,QAAU,GAAc,EAAE,GAKlC,IAAK,IAAM,IADG,CAAC,UAAW,SAAU,QAAQ,CAClB,CACzB,IAAM,EAAQ,EAAW,IAAI,EAAK,CAClC,GAAI,EAAO,CACV,IAAK,IAAM,KAAQ,EAAM,QAAQ,CAChC,EAAQ,EAAK,CAEd,EAAa,IAAI,EAAM,EAAM,CAE9B,IAAM,EAAU,EAAa,IAAI,EAAK,CACtC,GAAI,EAAS,CACZ,IAAK,IAAM,KAAQ,EAAQ,QAAQ,CAClC,EAAU,EAAK,CAEhB,EAAe,IAAI,EAAM,EAAQ,CAElC,EAAW,OAAO,EAAK,CACvB,EAAa,OAAO,EAAK,CAE1B,IAAK,IAAM,KAAK,EAAW,QAAQ,CAClC,IAAK,IAAM,KAAS,EAAE,QAAQ,CAC7B,EAAQ,EAAM,CAGhB,IAAK,IAAM,KAAK,EAAa,QAAQ,CACpC,IAAK,IAAM,KAAQ,EAAE,QAAQ,CAC5B,EAAU,EAAK,CAGjB,IAAK,GAAM,CAAC,EAAG,KAAM,EAAa,SAAS,CAC1C,EAAe,IAAI,EAAG,EAAE,CAEzB,IAAK,GAAM,CAAC,EAAG,KAAM,EAAW,SAAS,CACxC,EAAa,IAAI,EAAG,EAAE,CAEvB,GAAI,EACH,IAAK,IAAM,KAAU,EAAe,IAAI,EAAU,EAAE,IAAI,EAAM,EAAI,EAAE,CACnE,EAAQ,KAAK,EAAO,CAGtB,OAAO,EAAa,IAAI,EAAU,EAAE,IAAI,EAAM,EAAI,EAAE,CAIrD,MAAa,GAAO,CAMnB,WAAW,EAAM,EAAS,CAAE,OAAO,GAAW,EAAM,EAAQ,EAS5D,MAAM,EAAO,EAAW,EAAO,EAAS,CACvC,OAAO,GAAU,EAAO,EAAW,EAAO,EAAQ,EAQnD,OAAO,EAAO,EAAQ,EAAc,CACnC,IAAM,EAAS,GAAW,EAAO,EAAQ,EAAa,CAEhD,EAAO,EAAE,CACX,EAAU,GACd,IAAK,IAAM,KAAK,EAAQ,CACvB,GAAI,EAAG,CACF,GACH,EAAK,KAAK,KAAK,CAEhB,EAAU,GACV,EAAK,KAAK,EAAE,CACZ,SAEI,EAAK,SACV,EAAU,IAEX,OAAO,GASR,aAAa,EAAO,EAAQ,EAAS,CACpC,IAAM,EAAS,GAAS,QAAU,GAC5B,EAAS,GAAS,QAAU,IAA0B,CACtD,EAAW,GAAS,eAAmB,IACvC,EAAQ,GAAS,YAAgB,IACjC,EAAM,GAAS,UAAc,MAC7B,EAAW,GAAS,UAAY,EAAE,CACxC,OAAO,GAAiB,EAAO,EAAQ,CACtC,SAAQ,WAAU,QAAO,MAAK,WAC9B,QAAS,EAAM,CAAC,OAAQ,EAAS,GAAG,GAAW,EAAE,GAAK,EAAO,EAAM,CAClE,OAAQ,EAAU,YAAY,IAAI,CAAC,EAAS,EAAO,CAAC,CAAG,EACvD,OAAQ,EAAQ,GAAS,OACzB,SAAU,GAAS,UAAY,EAC/B,MAAO,GAAS,OAAS,EACzB,IAAK,GAAS,KAAO,EACrB,SAAU,GAAS,UAAY,EAC/B,CAAC,CACF,CAAC,EAQH,cAAc,EAAO,EAAS,CAC7B,IAAM,EAAS,GAAS,QAAU,GAC5B,EAAS,GAAS,QAAU,IAA0B,CACtD,EAAW,GAAS,eAAmB,IACvC,EAAQ,GAAS,YAAgB,IACjC,EAAM,GAAS,UAAc,MAC7B,EAAW,GAAS,UAAY,EAAE,CACxC,OAAO,GAAkB,EAAO,CAC/B,SAAQ,WAAU,QAAO,MAAK,WAC9B,QAAS,EAAM,CAAC,OAAQ,EAAS,GAAG,GAAW,EAAE,GAAK,EAAO,EAAM,CAClE,OAAQ,EAAU,YAAY,IAAI,CAAC,EAAS,EAAO,CAAC,CAAG,EACvD,OAAQ,EAAQ,GAAS,OACzB,SAAU,GAAS,UAAY,EAC/B,MAAO,GAAS,OAAS,EACzB,IAAK,GAAS,KAAO,EACrB,SAAU,GAAS,UAAY,EAC/B,CAAC,CACF,CAAC,EAOH,WAAW,EAAM,EAAS,CACzB,OAAO,GAAe,EAAM,CAC3B,OAAQ,GAAS,QAAU,IAA0B,CACrD,OAAQ,EAAQ,GAAS,OACzB,SAAU,GAAS,eAAmB,IACtC,MAAO,GAAS,YAAgB,IAChC,IAAK,GAAS,UAAc,MAC5B,SAAU,GAAS,UAAY,EAAE,CACjC,CAAC,EAEH,CChfD,IAAa,GAAb,cAAiC,CAAe,CAC/C,GACA,GAAa,SAAS,cAAc,MAAM,CAC1C,GAAQ,SAAS,cAAc,MAAM,CACrC,GAAW,SAAS,cAAc,MAAM,CACxC,IAAI,WAAY,CAAE,OAAO,MAAA,EACzB,IAAI,SAAU,CAAE,OAAO,MAAA,EACvB,OAAqB,GAOrB,QAAQ,EAAO,EAAS,CACvB,GAAI,KAAK,UAAa,OACtB,MAAA,GAAmB,CACnB,IAAM,EAAgB,MAAA,EAChB,EAAK,IAAI,gBACT,EAAO,GAAK,cAAc,EAAO,CACtC,GAAG,EACH,OAAQ,YAAY,IAAI,CAAC,EAAG,OAAQ,KAAK,OAAO,CAAC,CACjD,CAAC,CACE,GAAQ,EAAc,YAAY,EAAK,CAC3C,MAAA,MAA0B,CAAE,EAAG,OAAO,CAAE,GAAM,QAAQ,CAAE,MAAA,MAA0B,IAQnF,YAAY,EAAM,EAAQ,CACzB,MAAM,EAAO,CACb,MAAA,EAAa,EACb,IAAM,EAAY,EAAK,YAAY,MAAA,EAAgB,CAC7C,EAAO,EAAK,YAAY,MAAA,EAAW,CACnC,EAAU,EAAK,YAAY,MAAA,EAAc,CAC/C,EAAK,UAAY,eACjB,EAAU,UAAY,oBACtB,EAAK,UAAY,oBACjB,EAAQ,UAAY,yBC3CT,GAAb,cAA2B,CAAe,CACzC,GAAU,SAAS,cAAc,SAAS,CAC1C,IAAI,aAAc,CAAE,OAAO,MAAA,EAAa,YACxC,GACA,GAAQ,MAAA,EAAa,YAAY,SAAS,cAAc,MAAM,CAAC,CAC/D,GAAY,MAAA,EAAW,YAAY,SAAS,cAAc,MAAM,CAAC,CAEjE,GAAc,GASd,YAAY,EAAS,CACpB,GAAM,CAAE,SAAQ,SAAQ,OAAM,kBAAiB,cAAe,GAAW,EAAE,CACrE,EAAK,IAAI,gBACf,MACC,aAAkB,YACf,YAAY,IAAI,CAAC,EAAQ,EAAG,OAAO,CAAC,CACpC,EAAG,OACN,CACD,IAAM,GAAU,GAAU,SAAS,MAAM,YAAY,MAAA,EAAa,CAClE,MAAA,EAAW,EACX,EAAO,iBAAiB,SAAU,GAAK,CACtC,GAAI,EAAE,iBAAoB,OAC1B,IAAM,EAAa,MAAA,EACf,IAAe,IAAQ,OAAO,GAAe,YAAc,GAAY,EAC3E,EAAE,gBAAgB,EACjB,CACF,EAAO,iBAAiB,YAAe,CAAE,EAAG,OAAO,CAAE,EAAO,QAAQ,EAAK,CAAE,KAAM,GAAM,CAAC,CACxF,KAAK,OAAO,iBAAiB,YAAe,CAAE,EAAO,OAAO,EAAK,CAAE,KAAM,GAAM,CAAC,CAChF,EAAO,UAAY,QACnB,MAAA,EAAW,UAAY,aACvB,MAAA,EAAe,UAAY,kBAC3B,EAAO,WAAW,CACd,IAAQ,KAAK,KAAO,IACpB,IAAmB,KAAK,gBAAkB,KAC1C,GAAc,OAAO,GAAe,aAAa,KAAK,WAAa,GAExE,IAAI,MAAO,CAAE,OAAO,MAAA,EAAa,UAAU,SAAS,kBAAkB,CACtE,IAAI,KAAK,EAAM,CACV,EACH,MAAA,EAAa,UAAU,IAAI,kBAAkB,CAE7C,MAAA,EAAa,UAAU,OAAO,kBAAkB,CAGlD,IAAI,iBAAkB,CAAE,OAAO,MAAA,EAAe,UAAU,SAAS,kBAAkB,CACnF,IAAI,gBAAgB,EAAiB,CAChC,EACH,MAAA,EAAe,UAAU,IAAI,kBAAkB,CAE/C,MAAA,EAAe,UAAU,OAAO,kBAAkB,CAGpD,IAAI,YAAa,CAAE,OAAO,MAAA,EAC1B,IAAI,WAAW,EAAY,CAAE,MAAA,EAAmB,EAChD,IAAI,MAAO,CAAE,OAAO,MAAA,EAAa,MAAM,WACvC,IAAI,KAAK,EAAM,CAAE,MAAA,EAAa,MAAM,WAAa,EACjD,IAAI,SAAU,CAAE,OAAO,MAAA,EAAa,MAAM,cAC1C,IAAI,QAAQ,EAAM,CAAE,MAAA,EAAa,MAAM,cAAgB,EACvD,IAAI,SAAU,CAAE,OAAO,MAAA,EAAa,MAAM,cAC1C,IAAI,QAAQ,EAAM,CAAE,MAAA,EAAa,MAAM,cAAgB,EACvD,IAAI,WAAY,CAAE,OAAO,MAAA,EACzB,OAAQ,CAAE,MAAA,EAAS,OAAO,CAM1B,MAAM,GAAG,EAAM,CACd,KAAK,OAAO,gBAAgB,CAC5B,GAAI,CACH,OAAO,MAAM,QAAQ,KAAK,CACzB,EAAK,KAAK,CACV,KAAK,YAAY,GAAK,CACtB,CAAC,QACO,CACT,MAAA,EAAS,OAAO,EAKlB,GAAU,KAEV,GAAyB,KAMzB,aAAa,EAAQ,CAEpB,GADA,KAAK,OAAO,gBAAgB,CACxB,GAAQ,QAAS,CACpB,IAAM,EAAwB,MAAA,EAC1B,GACH,EAAsB,MAAM,EAAO,OAAO,CAE3C,EAAO,gBAAgB,CAExB,GAAI,MAAA,EAAgB,OAAO,MAAA,EAC3B,IAAM,EAAO,SAAS,cAAc,MAAM,CACpC,EAAkB,IAAI,gBAC5B,MAAA,EAAa,aAAa,EAAM,MAAA,EAAW,CAC3C,MAAA,EAA8B,EAC9B,IAAM,EAAS,IAAI,GAAY,EAAM,YAAY,IAAI,CACpD,KAAK,OACL,EAAgB,OAChB,GAAG,EAAS,CAAC,EAAO,CAAG,EAAE,CACzB,CAAC,CAAC,CAOH,MANA,OAAA,EAAe,EACf,EAAO,OAAO,iBAAiB,YAAe,CAC7C,MAAA,EAA8B,KAC9B,MAAA,EAAe,KACf,EAAK,QAAQ,EACX,CAAE,KAAM,GAAM,CAAC,CACX,MAAA,EAGR,GAAU,KAEV,GAAuB,KAMvB,aAAa,EAAQ,CAEpB,GADA,KAAK,OAAO,gBAAgB,CACxB,GAAQ,QAAS,CACpB,IAAM,EAAsB,MAAA,EACxB,GACH,EAAoB,MAAM,EAAO,OAAO,CAEzC,EAAO,gBAAgB,CAExB,GAAI,MAAA,EAAgB,OAAO,MAAA,EAC3B,IAAM,EAAO,SAAS,cAAc,MAAM,CACpC,EAAkB,IAAI,gBAC5B,MAAA,EAAa,YAAY,EAAK,CAC9B,MAAA,EAA4B,EAC5B,IAAM,EAAS,IAAI,GAAY,EAAM,YAAY,IAAI,CACpD,KAAK,OACL,EAAgB,OAChB,GAAG,EAAS,CAAC,EAAO,CAAG,EAAE,CACzB,CAAC,CAAC,CAQH,MAPA,OAAA,EAAe,EAEf,EAAO,OAAO,iBAAiB,YAAe,CAC7C,MAAA,EAA4B,KAC5B,MAAA,EAAe,KACf,EAAK,QAAQ,EACX,CAAE,KAAM,GAAM,CAAC,CACX,MAAA,ICrIT,SAAgB,EAAY,EAAI,EAAI,CAEnC,IAAM,EAAQ,IAAI,GADF,CAAC,EAAI,EAAG,CAAC,KAAK,GAAK,GAAK,OAAO,GAAM,SAAS,CAC9B,CAE1B,EAAO,CAAC,EAAI,EAAG,CAAC,KAAK,GAAK,OAAO,GAAM,WAAW,EAAI,KAE5D,OADI,OAAO,GAAS,WACb,EAAM,GAAG,EAAK,CADoB,ECjB1C,eAAsB,GAAoB,EAAM,EAAM,EAAS,CAC9D,IAAM,EAAQ,IAAI,GAAM,EAAQ,CAC1B,EAAY,EAAQ,GAAS,UACnC,EAAM,WAAa,EACnB,IAAM,EAAY,EAAM,UAClB,EAAoB,EAAU,YAAY,SAAS,cAAc,MAAM,CAAC,CACxE,EAAW,EAAkB,YAAY,SAAS,cAAc,WAAW,CAAC,CAClF,EAAS,IAAM,EAAK,OACpB,IAAM,EAAO,EAAkB,YAAY,SAAS,cAAc,OAAO,CAAC,CAC1E,EAAK,MAAM,cAAgB,MAC3B,IAAM,EAAS,EAAM,OACrB,GAAI,EAAW,CACd,IAAM,EAAS,EAAU,YAAY,SAAS,cAAc,SAAS,CAAC,CACtE,EAAO,YAAY,SAAS,eAAe,GAAS,OAAS,KAAK,CAAC,CACnE,EAAO,iBAAiB,YAAe,EAAM,OAAO,CAAC,CACrD,EAAO,MAAM,WAAa,OAE3B,EAAS,MAAQ,EACjB,EAAK,UAAY,GAAG,EAAS,MAAM,GAAG,EAAS,MAC/C,IAAM,EAAQ,GAAS,MACnB,GACH,EAAM,cAAc,CAAC,UAAU,YAAY,SAAS,eAAe,EAAM,CAAC,CAG3E,IAAM,EAAU,EAAE,CAClB,IAAK,IAAM,KAAK,EAAM,CACrB,GAAI,EAAO,QAAW,MACtB,EAAQ,KAAK,MAAM,QAAQ,SAAS,CAAC,SAAW,EAAK,EAAG,EAAO,CAAC,CAAC,KAChE,IAAU,CAAE,OAAQ,YAAa,QAAO,EACxC,IAAW,CAAE,OAAQ,WAAY,SAAQ,EACzC,CAAC,CACF,EAAS,QACT,EAAK,UAAY,GAAG,EAAS,MAAM,GAAG,EAAS,MAGhD,OADA,EAAM,OAAO,CACN,EChBR,SAAS,GAAW,EAAO,EAAI,EAAM,EAAQ,EAAO,CACnD,GAAW,EAAO,EAAI,CACrB,SACA,QACA,KAAM,EAAK,WACX,OAAQ,EAAK,OACb,SAAU,EAAK,SACf,WAAY,EAAK,WACjB,CAAC,CAgBH,IAAa,GAAb,MAAa,UAAc,CAAe,CACzC,GACA,IAAI,OAAQ,CAAE,OAAO,MAAA,EAErB,GAAS,GAAa,CACtB,IAAI,OAAQ,CAAE,OAAO,MAAA,EACrB,GAAQ,SAAS,cAAc,MAAM,CACrC,IAAI,SAAU,CAAE,OAAO,MAAA,EAEvB,GAAwB,QAAQ,eAAe,CAC/C,GAAW,MAAA,EAA2B,QACtC,GAAW,MAAA,EAA2B,QACtC,GAAU,MAAA,EAA2B,OAErC,GACA,GAAS,EAAY,GAAG,CACxB,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAY,KAAK,CAEtC,GACA,IAAI,YAAa,CAChB,IAAM,EAAa,MAAA,EAEnB,OADK,EACE,EAAW,KAAK,CADG,KAG3B,GACA,IAAI,OAAQ,CACX,IAAM,EAAQ,MAAA,EAEd,OADK,EACE,EAAM,KAAK,CADG,KAItB,GAAS,EAAE,CACX,IAAI,OAAQ,CAAE,MAAO,CAAC,GAAG,MAAA,EAAY,CAErC,GAAe,MAAqB,MAAA,EAAY,MAAA,EAAY,KAAK,GAAK,KAAK,CAC3E,IAAI,SAAU,CAAE,OAAO,MAAA,EAAkB,KAAK,CAC9C,GAAY,MAAqB,CAChC,IAAM,EAAQ,MAAA,EACd,IAAK,IAAI,EAAQ,MAAA,EAAY,KAAK,CAAG,EAAG,GAAS,EAAG,IAAS,CAC5D,IAAM,EAAO,EAAM,GACnB,GAAI,CAAC,EAAK,QAAU,CAAC,EAAK,SAAY,OAAO,EAE9C,OAAO,MACN,CACF,IAAI,MAAO,CAAE,OAAO,MAAA,EAAe,KAAK,CACxC,GAAY,MAAqB,CAChC,IAAM,EAAQ,MAAA,EACd,IAAK,IAAI,EAAQ,MAAA,EAAY,KAAK,CAAG,EAAG,EAAQ,EAAM,OAAQ,IAAS,CACtE,IAAM,EAAO,EAAM,GACnB,GAAI,CAAC,EAAK,QAAU,CAAC,EAAK,SAAY,OAAO,EAE9C,OAAO,MACN,CACF,IAAI,MAAO,CAAE,OAAO,MAAA,EAAe,KAAK,CAExC,GACA,IAAI,aAAc,CAAE,OAAO,MAAA,EAAkB,KAAK,CAGlD,UAAW,CACL,MAAA,EAAkB,KAAK,EAC5B,MAAA,GAAe,CAGhB,QAAS,CACH,MAAA,GAAkB,KAAK,EAC5B,MAAA,EAAS,OAAO,CAYjB,YAAY,EAAO,EAAO,CAAE,QAAO,aAAY,cAAa,QAAO,OAAQ,GAAW,CACrF,IAAM,EAAK,IAAI,gBACf,MAAM,aAAmB,YAAc,YAAY,IAAI,CACtD,EAAG,OAAQ,EACX,CAAC,CAAG,EAAG,OAAO,CACf,MAAA,EAAW,EACX,IAAM,EAAS,KAAK,OAChB,EAAO,QACV,MAAA,EAAa,EAAO,OAAO,CAE3B,EAAO,iBAAiB,YAAe,MAAA,EAAa,EAAO,OAAO,CAAE,CAAE,KAAM,GAAM,CAAC,CAGpF,MAAA,EAAc,EACd,IAAM,EAAQ,MAAA,EACd,MAAA,EAAc,OAAO,GAAU,WAC5B,MAAqB,EAAM,EAAO,EAAM,CAAC,CACzC,OAAO,GAAU,UAAY,EAC5B,MAAqB,EAAM,CAC3B,KAEJ,MAAA,EAAmB,IAAe,GAC/B,MAAqB,GAAK,CAC1B,OAAO,GAAe,WACrB,MAAqB,EAAW,EAAO,EAAM,CAAC,CAC9C,KACJ,MAAA,EACG,EADiB,OAAO,GAAgB,eACnB,EAAY,EAAO,EAAM,KACzB,GAAK,CAG7B,IAAM,EAAe,MAAA,EACf,EAAW,MAAA,EACX,EAAc,MAAA,EACpB,EAAY,UAAU,IAAI,gBAAgB,CAC1C,IAAI,MAAwB,GAC5B,IAAK,GAAM,CAAC,EAAO,KAAS,EAAM,SAAS,CAAE,CAC5C,IAAM,EAAU,SAAS,cAAc,GAAG,CAC1C,EAAY,YAAY,EAAQ,CAChC,GAAM,CAAE,OAAQ,EAAU,SAAU,EAAY,MAAO,GAAa,EAC9D,EACH,EADY,OAAO,GAAa,eACX,EAAQ,EAAS,EAAO,EAAM,KAC9B,GAAM,CACxB,EACH,EADc,OAAO,GAAe,eACf,EAAQ,EAAW,EAAO,EAAM,KAChC,GAAM,CACxB,EACH,EADW,OAAO,GAAa,eACV,OAAO,EAAS,EAAO,EAAM,EAAI,GAAG,KACpC,OAAO,GAAY,GAAG,CAAC,CACzC,EAAU,MAAqB,EAAa,KAAK,GAAK,EAAM,CAE9D,EAAY,KAChB,SAAS,GAAe,CACvB,GAAI,EAAa,OAAO,EACxB,IAAM,EAAK,SAAS,cAAc,MAAM,CAIxC,MAHA,GAAY,EACZ,EAAQ,YAAY,EAAG,CACvB,GAAW,EAAO,EAAI,EAAM,EAAQ,EAAM,CACnC,EAER,EAAS,KAAK,CACb,IAAI,OAAQ,CAAE,OAAO,EAAM,KAAK,EAChC,IAAI,QAAS,CAAE,OAAO,EAAO,KAAK,EAClC,IAAI,UAAW,CAAE,OAAO,EAAS,KAAK,EACtC,IAAI,OAAQ,CAAE,OAAO,GACrB,IAAI,SAAU,CAAE,OAAO,EAAQ,KAAK,EACpC,OAAO,EAAQ,GAAO,CAErB,GADI,EAAa,KAAK,GAAK,GACvB,CAAC,IAAU,EAAO,KAAK,EAAI,EAAS,KAAK,EAAK,OAClD,GAAiB,CACjB,EAAa,IAAI,EAAM,CACvB,IAAM,EAAK,GAAc,CACzB,EAAG,OAAS,GACZ,MAAwB,CAAE,EAAG,OAAS,KAEvC,CAAC,EAEU,EAAS,KAAK,GAAK,CAAC,EAAE,QAAU,CAAC,EAAE,SAAS,EAAI,EAAS,KAAK,GAAK,CAAC,EAAE,OAAO,EAAI,EAAS,KACjG,QAAQ,CASf,KAAK,EAAa,EAAY,CAAE,OAAO,MAAA,EAAc,KAAK,EAAa,EAAW,CAMlF,MAAM,EAAY,CAAE,OAAO,MAAA,EAAc,MAAM,EAAW,CAK1D,QAAQ,EAAW,CAAE,OAAO,MAAA,EAAc,QAAQ,EAAU,CAW5D,OAAO,MAAM,EAAO,EAAO,EAAO,EAAS,CAC1C,GAAM,CAAE,UAAW,EACb,EAAQ,IAAI,EAAM,EAAO,EAAO,CAAE,GAAG,EAAS,SAAQ,CAAC,CAI7D,GAHA,EAAM,eAAmB,EAAQ,EAAM,WACvC,EAAM,KAAO,GACb,EAAM,gBAAkB,GACpB,EAAM,QAAU,KAAM,CAEzB,IAAM,EADS,EAAM,cAAc,CACV,UACzB,MAAa,EAAU,YAAc,EAAM,OAAS,GAAI,EAAO,CAGhE,EAAM,UAAU,YAAY,EAAM,QAAQ,CAAC,UAAU,IAAI,gBAAgB,CAEzE,IAAM,EAAc,EAAM,cAAc,CAAC,UAIzC,GAHA,EAAY,UAAU,IAAI,gBAAgB,CAC1C,EAAY,YAAY,SAAS,cAAc,MAAM,CAAC,CAAC,MAAM,KAAO,IAEhE,EAAM,aAAe,KAAM,CAC9B,IAAM,EAAY,EAAY,YAAY,SAAS,cAAc,SAAS,CAAC,CAC3E,EAAU,YAAc,KACxB,EAAU,UAAU,IAAI,eAAe,CACvC,EAAU,iBAAiB,YAAe,CAAE,EAAM,QAAQ,EAAI,CAC9D,MAAa,EAAU,SAAW,CAAC,EAAM,WAAY,EAAO,CAG7D,IAAM,EAAU,EAAY,YAAY,SAAS,cAAc,SAAS,CAAC,CACzE,EAAQ,YAAc,MACtB,EAAQ,UAAU,IAAI,aAAa,CACnC,EAAQ,iBAAiB,YAAe,CAAE,EAAM,MAAM,QAAQ,EAAI,CAClE,MAAa,EAAQ,SAAW,CAAC,EAAM,KAAM,EAAO,CAEpD,IAAM,EAAU,EAAY,YAAY,SAAS,cAAc,SAAS,CAAC,CACzE,EAAQ,YAAc,MACtB,EAAQ,UAAU,IAAI,aAAa,CACnC,EAAQ,iBAAiB,YAAe,CAAE,EAAM,MAAM,QAAQ,EAAI,CAClE,MAAa,EAAQ,SAAW,CAAC,EAAM,KAAM,EAAO,CAEpD,IAAM,EAAc,EAAY,YAAY,SAAS,cAAc,SAAS,CAAC,CAK7E,MAJA,GAAY,YAAc,KAC1B,EAAY,UAAU,IAAI,iBAAiB,CAC3C,EAAY,iBAAiB,YAAe,CAAE,EAAM,UAAU,EAAI,CAClE,MAAa,EAAY,SAAW,CAAC,EAAM,YAAa,EAAO,CACxD,ICrRT,MAAa,QAAe,CAE3B,IAAM,EAAgB,UAAU,cAI/B,OAHI,GAAe,SAAmB,EAAc,WAAa,QACjD,sBAAsB,KAAK,UAAU,UAAU,aAAa,CAAC,CACxD,GACd,UAAU,SAAS,aAAa,CAAC,SAAS,MAAM,IACrD,CCAJ,eAAsB,GAAiB,EAAO,EAAa,EAAO,CACjE,IAAM,EAAS,EAAM,OACrB,GAAI,EAAO,QAAW,OAAO,QAAQ,OAAO,EAAO,OAAO,CAC1D,GAAM,CAAE,UAAS,SAAQ,WAAY,QAAQ,eAAe,CACtD,EAAS,EAAY,OACrB,EAAS,MAAM,QAAQ,EAAM,CAAG,gBAAgB,EAAM,CAAG,EAAE,CAC3D,EAAY,IAAI,IAAI,OAAO,QAAQ,EAAO,CAAC,QAAQ,EAAG,KAAO,CAClE,IAAM,EAAO,EAAE,KAEf,MADA,EAAI,CAAC,GAAQ,OAAO,GAAS,WAE5B,CAAC,CACG,EAAO,EAAM,UACb,EAAS,EAAM,cAAc,CAAC,UAC9B,EAAU,EAAO,YAAY,SAAS,cAAc,SAAS,CAAC,CAC9D,EAAW,EAAO,YAAY,SAAS,cAAc,SAAS,CAAC,CAC/D,EAAe,EAAO,YAAY,SAAS,cAAc,SAAS,CAAC,CAEzE,EAAO,UAAU,IAAI,cAAc,CACnC,EAAO,MAAM,QAAU,OAGvB,EAAK,UAAU,IAAI,sBAAsB,CACzC,EAAS,MAAQ,KACjB,EAAS,YAAY,SAAS,eAAe,KAAK,CAAC,CACnD,EAAa,YAAY,SAAS,eAAe,KAAK,CAAC,CACvD,EAAS,iBAAiB,YAAe,EAAQ,EAAO,OACuB,QAC9E,CAAC,CAAC,CACH,EAAa,iBAAiB,YAAe,GAAQ,CAAC,CAKtD,IAAM,EAAI,EAAQ,YAAY,SAAS,cAAc,SAAS,CAAC,CAC/D,EAAE,MAAQ,OACV,IAAK,GAAM,CAAC,EAAM,KAAM,EAAW,CAClC,IAAM,EAAO,EAAE,KACf,GAAI,CAAC,GAAQ,OAAO,GAAS,SAAY,SACzC,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,MAAQ,EACf,EAAO,MAAQ,EAAE,OAAS,EAC1B,EAAQ,YAAY,EAAO,CAW5B,SAAS,EAAW,EAAG,EAAW,EAAO,EAAQ,CAChD,IAAM,EAAK,IAAI,gBACT,EAAa,YAAY,IAAI,CAAC,EAAQ,EAAG,OAAO,CAAC,CACjD,EAAO,EAAK,YAAY,SAAS,cAAc,MAAM,CAAC,CAC5D,EAAK,UAAU,IAAI,oBAAoB,CAEvC,IAAM,EAAkB,SAAS,cAAc,OAAO,CACtD,EAAgB,UAAU,IAAI,wBAAwB,CACtD,EAAK,YAAY,EAAgB,CACjC,EAAgB,YAAY,SAAS,eAAe,EAAM,OAAS,EAAU,CAAC,CAK9E,IAAM,EAAQ,CAAE,OAAQ,GAAM,CACxB,EAAY,GAAwB,EAAM,CACnC,SAAS,cAAc,OAAO,CACtC,UAAU,IAAI,mBAAmB,CACtC,IAAM,EAAmB,EAAK,YAAY,SAAS,cAAc,SAAS,CAAC,CAC3E,EAAiB,UAAU,IAAI,uBAAuB,CAEtD,IAAK,GAAM,CAAC,EAAO,KAAU,OAAO,QAAQ,EAAU,CAAE,CACvD,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,MAAQ,EACf,EAAO,MAAQ,GAAS,EACxB,EAAiB,YAAY,EAAO,CAGrC,IAAM,EAAe,SAAS,cAAc,SAAS,CACrD,EAAa,UAAU,IAAI,qBAAqB,CAChD,EAAa,KAAO,SACpB,EAAK,YAAY,EAAa,CAC9B,EAAa,YAAY,SAAS,eAAe,KAAK,CAAC,CACvD,EAAa,iBAAiB,YAAe,CAC5C,EAAG,OAAO,CACV,IAAM,EAAQ,CAAC,GAAG,EAAK,SAAS,CAAC,QAAQ,EAAK,CAC1C,EAAQ,IACZ,EAAK,QAAQ,CACb,EAAO,OAAO,EAAO,EAAE,GAEtB,CAOF,SAAS,EAAK,EAAO,EAAU,CAC9B,IAAM,EAAQ,CAAC,GAAG,EAAK,SAAS,CAAC,QAAQ,EAAK,CAC9C,GAAI,EAAQ,EAAK,MAAO,GACxB,IAAM,EAAO,EAAO,GAIpB,MAHI,CAAC,GACD,OAAO,GAAG,EAAO,EAAK,GAAG,EACzB,OAAO,GAAG,EAAU,EAAK,GAAG,CAAW,EACpC,GAKR,IAAI,EAAW,EAAE,IAAM,GACvB,EAAiB,MAAQ,EAEzB,IAAI,EAAW,EAAE,GACb,EAAiB,OAAS,IAC7B,EAAW,EAAiB,MAC5B,EAAW,MAEZ,IAAM,EAAQ,EAAY,EAAS,CAC7B,EAAgB,EAAY,EAAS,CAC3C,MAAa,CACZ,IAAM,EAAQ,EAAM,KAAK,CACnB,EAAW,EAAc,KAAK,CAC9B,EAAQ,EAAK,EAAO,EAAS,CAC/B,EAAQ,GACZ,EAAO,OAAO,EAAO,EAAG,CAAC,EAAQ,EAAO,EAAS,CAAC,EAChD,EAAW,CAEd,IAAI,EAAmB,GAAe,EAAO,EAAc,KAAK,CAAC,CAE7D,EAAwB,IAAI,gBAC5B,EAAgB,GAAa,EAAkB,EAAO,EAAO,EAAe,EAAO,YAAY,IAAI,CAAC,EAAsB,OAAQ,EAAW,CAAC,CAAC,CACnJ,EAAiB,MAAQ,EAAc,KAAK,CAC5C,IAAI,EAAa,EAAK,aAAa,EAAe,EAAa,CAC/D,EAAW,UAAU,IAAI,oBAAoB,CAG7C,EAAiB,iBAAiB,YAAe,CAChD,IAAM,EAAc,EAAiB,MAIrC,GAHM,KAAe,EAGjB,OAAO,GAAgB,SAAY,OACvC,IAAM,EAAY,GAAe,EAAO,EAAY,CACpD,GAAI,IAAc,EAAkB,CACnC,EAAc,IAAI,EAAY,CAC9B,OAED,EAAsB,OAAO,CAC7B,EAAW,QAAQ,CACnB,EAAmB,EACnB,EAAc,IAAI,EAAY,CAC9B,EAAwB,IAAI,gBAC5B,EAAgB,GAAa,EAAkB,EAAO,EAAO,EAAe,EAAO,YAAY,IAAI,CAAC,EAAsB,OAAQ,EAAW,CAAC,CAAC,CAC/I,EAAa,EAAK,aAAa,EAAe,EAAa,CAC3D,EAAW,UAAU,IAAI,oBAAoB,EAC5C,CAEH,IAAK,IAAM,KAAK,EAAQ,CACvB,GAAI,EAAE,OAAS,EAAK,SACpB,IAAM,EAAQ,EAAE,GAChB,GAAI,GAAS,OAAO,GAAU,UAAY,CAAC,MAAM,QAAQ,EAAM,CAAI,SAEnE,IAAM,EAAS,EAAE,GACX,EAAY,EAAO,SAAW,GAAK,EAAO,GAC1C,EAAY,OAAO,GAAc,SAAW,EAAY,MAAM,QAAQ,EAAU,EAAI,EAAU,SAAW,EAAI,EAAU,GAAK,GAE5H,EAAQ,EAAU,IAAI,EAAU,CACjC,GAIL,EAAW,EAAG,EAAW,EAAO,EAAO,CAcxC,OATA,EAAQ,iBAAiB,aAAgB,CACxC,IAAM,EAAO,EAAQ,MACrB,EAAQ,MAAQ,GAChB,IAAM,EAAQ,EAAU,IAAI,EAAK,CAC5B,GACL,EAAW,CAAC,CAAC,EAAK,CAAE,GAAI,GAAG,CAAE,EAAM,EAAO,CAAC,CAAC,EAAK,CAAC,CAAC,EAClD,CAGK,EAAM,OAAS,EAAQ,CAY/B,eAAA,GAA+B,EAAa,EAAO,EAAQ,EAAQ,CAClE,OAAO,IAAI,GAAM,CAAE,SAAQ,SAAQ,CAAC,CAAC,GAAG,GAAS,GAAiB,EAAO,EAAa,EAAM,CAAC,CC/M9F,SAAS,GAAY,EAAM,CAAE,aAAa,CACzC,EAAK,UAAY,GAEjB,SAAS,EAAU,EAAO,CACrB,EAAM,YAAc,GACnB,IACL,EAAK,UAAY,GACjB,OAAO,oBAAoB,YAAa,EAAW,CAAE,QAAS,GAAM,CAAC,CACrE,OAAO,oBAAoB,gBAAiB,EAAW,CAAE,QAAS,GAAM,CAAC,EAE1E,OAAO,iBAAiB,YAAa,EAAW,CAAE,QAAS,GAAM,CAAC,CAClE,OAAO,iBAAiB,gBAAiB,EAAW,CAAE,QAAS,GAAM,CAAC,CAYvE,eAA8B,GAAe,EAAO,EAAa,EAAO,CACvE,IAAM,EAAS,EAAM,OACrB,GAAI,EAAO,QAAW,OAAO,QAAQ,OAAO,EAAO,OAAO,CAI1D,IAAM,EAAS,EAAE,CACX,EAAO,EAAM,UACnB,EAAK,UAAU,IAAI,cAAc,CACjC,IAAM,EAAS,EAAM,cAAc,CAAC,UACpC,EAAO,UAAU,IAAI,cAAc,CACnC,IAAM,EAAU,EAAO,YAAY,SAAS,cAAc,SAAS,CAAC,CACpE,EAAO,MAAM,QAAU,OAMvB,IAAM,EAAY,IAAI,IAAI,OAAO,QAAQ,EAAY,OAAO,CAAC,QAAQ,EAAG,KAAO,CAC9E,IAAM,EAAO,EAAE,KAEf,MADA,EAAI,CAAC,GAAQ,OAAO,GAAS,WAE5B,CAAC,KAAK,CAAC,EAAG,KAAO,CAAC,EAAG,EAAE,OAAS,EAAE,CAAC,CAAC,CAEtC,SAAS,GAAsB,CAC9B,EAAQ,UAAY,GACpB,IAAM,EAAI,EAAQ,YAAY,SAAS,cAAc,SAAS,CAAC,CAC/D,EAAE,MAAQ,OACV,IAAM,EAAQ,IAAI,IAAI,EAAO,IAAI,GAAK,EAAE,MAAM,CAAC,CAC/C,IAAK,GAAM,CAAC,EAAM,KAAU,EAAW,CACtC,GAAI,EAAM,IAAI,EAAK,CAAI,SACvB,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,MAAQ,EACf,EAAO,MAAQ,GAAS,EACxB,EAAQ,YAAY,EAAO,EAK7B,IAAI,EAAO,KAMX,SAAS,EAAK,EAAM,EAAI,CACvB,IAAM,EAAS,OAAO,GAAS,SAAW,EAAO,EAAO,QAAQ,EAAK,CACrE,GAAI,EAAS,EAAK,OAClB,IAAM,EAAS,OAAO,GAAO,SAC5B,OAAO,GAAS,SAAW,EAAK,EAAS,EACvC,EAAO,QAAQ,EAAG,CAErB,GADI,EAAS,GAAK,GAAU,EAAO,QAC/B,IAAW,EAAU,OAEzB,IAAM,EAAW,OAAO,GAAS,SAAW,EAAO,IAAS,GAAK,EAAK,GAChE,EAAW,OAAO,GAAO,SAAW,EAAO,IAAS,GAAK,EAAG,GAC9D,CAAC,GAAY,CAAC,IAElB,EAAO,OAAO,EAAQ,EAAG,GAAG,EAAO,OAAO,EAAQ,EAAE,CAAC,CACrD,EAAK,aAAa,EAAU,EAAS,EAAS,EAAW,EAAS,YAAY,EAE/E,SAAS,GAAU,CAClB,EAAO,KAOR,SAAS,EAAI,EAAO,EAAM,CACzB,IAAM,EAAQ,EAAU,IAAI,EAAM,CAElC,GADI,CAAC,GACD,EAAO,KAAK,GAAK,EAAE,QAAU,EAAM,CAAI,OAC3C,IAAM,EAAK,SAAS,cAAc,MAAM,CAElC,EAAO,CAAE,QAAO,KAAM,EAAQ,EAAO,KAAI,CAC/C,EAAO,KAAK,EAAK,CACjB,EAAK,YAAY,EAAG,CAEpB,EAAG,iBAAiB,gBAAmB,CACjC,GACL,EAAK,EAAM,EAAK,EACf,CACF,EAAG,iBAAiB,YAAc,GAAU,CACvC,EAAM,SAAW,EAAM,gBAC3B,EAAO,IACN,CACF,EAAG,iBAAiB,UAAW,EAAQ,CAIvC,IAAM,EAAM,EAAG,YAAY,SAAS,cAAc,SAAS,CAAC,CAC5D,EAAI,iBAAiB,YAAe,CACnC,IAAM,EAAQ,EAAO,QAAQ,EAAK,CAC9B,EAAQ,IACZ,EAAO,OAAO,EAAO,EAAE,CACvB,EAAK,GAAG,QAAQ,CAChB,GAAqB,GACpB,CACF,EAAI,MAAQ,KACZ,EAAI,YAAY,EAAW,SAAS,CAAC,CAGrC,IAAM,EAAS,EAAG,YAAY,SAAS,cAAc,SAAS,CAAC,CAC/D,EAAO,iBAAiB,YAAe,CAAE,EAAK,EAAM,GAAG,EAAI,CAC3D,EAAO,MAAQ,KACf,EAAO,YAAY,EAAW,KAAK,CAAC,CACpC,IAAM,EAAW,EAAG,YAAY,SAAS,cAAc,SAAS,CAAC,CACjE,EAAS,iBAAiB,YAAe,CAAE,EAAK,EAAM,EAAE,EAAI,CAC5D,EAAS,MAAQ,KACjB,EAAS,YAAY,EAAW,OAAO,CAAC,CACxC,EAAI,UAAU,IAAI,OAAO,CACzB,EAAO,UAAU,IAAI,OAAO,CAC5B,EAAS,UAAU,IAAI,OAAO,CAI9B,IAAM,EAAO,EAAG,YAAY,SAAS,cAAc,OAAO,CAAC,CAC3D,EAAK,YAAc,EACnB,EAAK,UAAU,IAAI,oBAAoB,CACvC,EAAK,iBAAiB,cAAe,GAAK,GAAY,EAAI,EAAE,CAAC,CAG7D,IAAM,EAAO,EAAG,YAAY,SAAS,cAAc,SAAS,CAAC,CAC7D,SAAS,GAAiB,CACzB,EAAK,UAAY,GACjB,EAAK,YAAY,EAAW,EAAK,KAAO,WAAa,UAAU,CAAC,CAEjE,EAAK,iBAAiB,YAAe,CACpC,EAAK,KAAO,CAAC,EAAK,KAClB,GAAgB,EACf,CACF,GAAgB,CAChB,EAAK,MAAQ,KAOd,IAAK,IAAM,KAAK,GAAS,EAAE,CACrB,GACL,EAAI,EAAE,GAAI,EAAE,GAAG,CAEhB,GAAqB,CAIrB,EAAQ,iBAAiB,aAAgB,CACxC,IAAM,EAAO,EAAQ,MACrB,EAAQ,MAAQ,GAChB,EAAI,EAAM,GAAM,CAChB,GAAqB,EACpB,CAIF,GAAM,CAAE,UAAS,SAAQ,WAAY,QAAQ,eAAe,CACtD,EAAW,EAAO,YAAY,SAAS,cAAc,SAAS,CAAC,CAC/D,EAAe,EAAO,YAAY,SAAS,cAAc,SAAS,CAAC,CAMzE,MALA,GAAS,MAAQ,KACjB,EAAS,YAAY,SAAS,eAAe,KAAK,CAAC,CACnD,EAAa,YAAY,SAAS,eAAe,KAAK,CAAC,CACvD,EAAS,iBAAiB,YAAe,EAAQ,EAAO,IAAI,GAAK,CAAC,EAAE,MAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CACrF,EAAa,iBAAiB,YAAe,GAAQ,CAAC,CAC/C,EC/LR,SAAgB,GAAW,EAAQ,EAAO,CACxC,GAAI,CAAC,GAAU,OAAO,GAAW,SAAY,OAAO,KACpD,IAAM,EAAI,EAAO,MAAM,EAAE,EAAE,CAE3B,GAAI,IAAM,MAAQ,IAAM,KAAM,CAC7B,IAAM,EAAQ,EAAE,QAAQ;EAAK,CAC7B,GAAI,EAAQ,EAAK,OAAO,KACjB,EAAO,MAAM,EAAG,EAAM,CAC7B,EAAS,EAAO,MAAM,EAAQ,EAAE,CAGjC,OAAO,KCiCT,MAAMiC,GAAQ,EAAwB,KACZ,IACrB,CACJ,IAAM,EAAS,MAAM,EAAI,QAAQ,CAAC,KACjC,GAAK,OAAO,GAAM,UAAY,GAAK,KACnC,GAAK,QAAQ,OAAO,IAAI,EAAc,aAAa,SAAW,EAAE,OAAS,IAAI,CAAC,CAC9E,CACD,GAAI,CAAC,GAAU,OAAO,GAAW,SAAY,OAAO,KAGpD,IAAM,EAAc,EAAE,CAChB,EAAQ,GAAK,WAAW,EAAO,OAAS,EAAE,CAAE,EAAY,CACxD,CAAE,QAAO,UAAS,OAAM,SAAUC,GAAa,EAAO,cAAgB,GAAG,CAY/E,MAVa,CACZ,GAAG,EACH,QACA,UACA,OACA,QACA,cACA,QACA,MAAO,OAAO,YAAY,EAAO,OAAO,IAAmC,GAAM,CAAC,EAAE,KAAM,EAAE,CAAC,EAAI,EAAE,CAAC,CACpG,EAEC,KAAK,CAMR,SAAgB,GAAY,CAC3B,QAAO,eAAc,OAAM,YAAW,QACpC,CACF,IAAI,EAAU,EAAQ,OAAO,CAAC,IAAI,OAC9B,IAAS,EAAU,EAAQ,MAAM,CAAE,QAAO,CAAC,EAC3C,IAAgB,EAAU,EAAQ,MAAM,CAAE,eAAc,CAAC,EACzD,IAAQ,EAAU,EAAQ,MAAM,CAAE,OAAM,CAAC,EACzC,IAAa,EAAU,EAAQ,MAAM,CAAE,YAAW,CAAC,EACvD,IAAM,EAAgB,EAAY,GAC9B,IAAiB,EAAU,EAAQ,MAAM,CAAE,YAAa,EAAe,CAAC,EAC5E,EAAU,EAAQ,MAAM,CAAE,OAAM,CAAC,CACjC,IAAM,EAAM,CACX,EACA,EACA,EACA,EACA,EACA,EACA,CAAC,IAAI,GAAK,GAAK,GAAG,CAAC,KAAK;EAAK,CACxB,CAAE,IAAK,EAAS,KAAM,GAAaD,GAAM,OAAO,EAAK,EAAQ,CAGnE,MAAO,CACN,WACA,UACA,mBAAoB,CACnB,OAAO,GAAU,CAAC,KAAM,GAAM,OAAO,GAAM,UAAY,GAAG,OAAO,EAElE,GAAG,GAAmB,EAAS,CAC/B,CC7FF,SAAS,GAAS,EAAU,EAAM,CACjC,OAAO,SAAY,CAElB,IAAM,EAAI,MAAM,EAAa,EAAS,CAEtC,MADI,CAAC,GAAK,OAAO,GAAM,SAAmB,EACnC,EAAE,IAGX,MAAM,GAAgB,MAAqB,EAAS,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAKjF,eAAe,GAAW,EAAK,CAC9B,GAAI,EAAI,KAAO,IAAO,OAAO,EAC7B,IAAM,EAAI,EAAI,MAAM,EAAG,EAAE,CAAC,aAAa,CACvC,GAAI,EAAE,WAAW,QAAQ,EAAI,EAAE,WAAW,SAAS,CAAI,OAAO,EAC9D,IAAM,EAAO,EAAI,MAAM,IAAK,EAAE,CAAC,GAAG,MAAM,IAAK,EAAE,CAAC,GAC1C,EAAa,GAAc,KAAK,CAChC,EAAY,OAAO,OAAO,EAAY,EAAK,EAAI,EAAW,GAChE,GAAI,OAAO,GAAc,WAAc,OAAO,EAC9C,IAAM,EAAM,MAAM,EAAU,EAAI,CAChC,OAAO,OAAO,GAAQ,UAAY,GAAO,EAO1C,eAAe,GAAS,EAAY,CACnC,GAAM,CAAE,QAAO,KAAI,YAAW,UAAS,OAAM,QAAO,gBAAiB,EAKrE,GAJI,GAIA,EAEH,OAAO,KAGR,IAAM,EAAQ,CACb,KAAM,QACN,QACA,YACA,GAAI,GACJ,MAAO,GACP,KAAM,GACN,CAEG,EAAO,QACP,GACH,EAAM,GAAK,EACP,GACH,EAAM,MAAQ,EACd,EAAO,aACG,GACV,EAAM,KAAO,GACb,EAAO,aAEP,EAAO,gBAEE,IACV,EAAM,MAAQ,EACd,EAAO,cAER,IAAI,EAAW,MAAM,GAAY,CAAE,GAAG,EAAO,OAAM,CAAC,CACpD,GAAI,OAAO,GAAa,SAAY,OAAO,EAC3C,GAAI,CAAC,EAAU,CACd,IAAM,EAAO,MAAM,GAAa,EAAM,CACpC,MAAM,GAAK,aAAa,EAAgB,EAAE,OAAS,QAAQ,OAAO,EAAE,CAAC,CACvE,GAAI,CAAC,GAAQ,OAAO,GAAS,SAAY,OAAO,KAChD,IAAM,EAAQ,EAAK,MACb,EAAa,GAAS,OAAO,OAAO,EAAO,EAAK,EAAI,EAAM,GAChE,GAAI,IAAe,GAAM,OAAO,KAChC,EAAW,OAAO,GAAe,SAC9B,CAAE,OAAQ,EAAY,CACtB,OAAO,GAAe,UAAY,GAAc,EAAE,CAEtD,IAAM,EAAM,GAAU,IACtB,GAAI,GAAO,OAAO,GAAQ,SAAY,MAAO,CAAE,QAAO,OAAQ,MAAM,GAAW,EAAI,CAAE,KAAM,GAAY,KAAM,CAE7G,IAAM,EAAW,GAAU,OAC3B,GAAI,IAAa,GAAM,OAAO,KAC9B,IAAM,EAAS,OAAO,GAAa,SAChC,GAAS,EAAU,EAAK,CACxB,MAAM,EAAY,SAAS,EAAK,EAAI,KAEvC,OADK,EACE,CAAE,QAAO,SAAQ,KAAM,GAAY,KAAM,CAD1B,KASvB,eAAe,GAAa,EAAgB,CAC3C,GAAM,CAAE,KAAI,OAAM,QAAO,YAAW,UAAS,gBAAiB,EAK9D,GAJI,GAIA,EAEH,OAAO,KAGR,IAAM,EAAQ,CACb,KAAM,YACN,YACA,GAAI,GACJ,MAAO,GACP,KAAM,GACN,CAGG,EAAO,YACP,GACH,EAAM,GAAK,EACP,GACH,EAAM,MAAQ,EACd,EAAO,iBACG,GACV,EAAM,KAAO,GACb,EAAO,iBAEP,EAAO,oBAEE,IACV,EAAM,MAAQ,EACd,EAAO,kBAER,IAAM,EAAW,MAAM,GAAY,CAAE,GAAG,EAAO,OAAM,CAAC,CAEtD,GAAI,OAAO,GAAa,SAAY,OAAO,EAC3C,IAAM,EAAM,GAAU,IACtB,GAAI,GAAO,OAAO,GAAQ,SAAY,MAAO,CAAE,QAAO,OAAQ,MAAM,GAAW,EAAI,CAAE,KAAM,GAAY,KAAM,CAE7G,IAAM,EAAW,GAAU,OAC3B,GAAI,IAAa,GAAM,OAAO,KAC9B,IAAM,EAAS,OAAO,GAAa,SAChC,GAAS,EAAU,EAAK,CACxB,MAAM,EAAY,SAAS,EAAK,EAAI,KAEvC,OADK,EACE,CAAE,QAAO,SAAQ,KAAM,GAAY,KAAM,CAD1B,KASvB,eAAe,GAAgB,EAAmB,CACjD,GAAM,CAAE,KAAI,eAAc,OAAM,QAAO,YAAW,UAAS,gBAAiB,EAK5E,GAJI,GAIA,EAEH,OAAO,KAGR,IAAM,EAAQ,CACb,KAAM,eACN,eACA,YACA,GAAI,GACJ,MAAO,GACP,KAAM,GACN,CAGG,EAAO,eACP,GACH,EAAM,GAAK,EACP,GACH,EAAM,MAAQ,EACd,EAAO,oBACG,GACV,EAAM,KAAO,GACb,EAAO,oBAEP,EAAO,uBAEE,IACV,EAAM,MAAQ,EACd,EAAO,qBAER,IAAM,EAAW,MAAM,GAAY,CAAE,GAAG,EAAO,OAAM,CAAC,CACpD,MAAM,GAAK,aAAa,EAAgB,EAAE,OAAS,QAAQ,OAAO,EAAE,CAAC,CAEvE,GAAI,OAAO,GAAa,SAAY,OAAO,KAC3C,IAAM,EAAM,GAAU,IACtB,GAAI,GAAO,OAAO,GAAQ,SAAY,MAAO,CAAE,QAAO,OAAQ,MAAM,GAAW,EAAI,CAAE,KAAM,GAAY,KAAM,CAE7G,IAAM,EAAW,GAAU,OAC3B,GAAI,IAAa,GAAM,OAAO,KAC9B,IAAM,EAAS,OAAO,GAAa,SAChC,GAAS,EAAU,EAAK,CACxB,MAAM,EAAY,SAAS,EAAK,EAAI,KAEvC,OADK,EACE,CAAE,QAAO,SAAQ,KAAM,GAAY,KAAM,CAD1B,KAQvB,eAAe,GAAQ,EAAW,CACjC,GAAM,CAAE,KAAI,OAAM,OAAM,QAAO,YAAW,UAAS,gBAAiB,EAKpE,GAJI,GAIA,EAEH,OAAO,KAGR,IAAM,EAAQ,CACb,KAAM,OACN,OACA,YACA,GAAI,GACJ,MAAO,GACP,KAAM,GACN,CAGG,EAAO,OACP,GACH,EAAM,GAAK,EACP,GACH,EAAM,MAAQ,EACd,EAAO,YACG,GACV,EAAM,KAAO,GACb,EAAO,YAEP,EAAO,eAEE,IACV,EAAM,MAAQ,EACd,EAAO,aAER,IAAM,EAAW,MAAM,GAAY,CAAE,GAAG,EAAO,OAAM,CAAC,CACpD,MAAM,GAAK,aAAa,EAAgB,EAAE,OAAS,QAAQ,OAAO,EAAE,CAAC,CAEvE,GAAI,OAAO,GAAa,SAAY,OAAO,KAC3C,IAAM,EAAM,GAAU,IACtB,GAAI,GAAO,OAAO,GAAQ,SAAY,MAAO,CAAE,QAAO,OAAQ,MAAM,GAAW,EAAI,CAAE,KAAM,GAAY,KAAM,CAE7G,IAAM,EAAW,GAAU,OAC3B,GAAI,IAAa,GAAM,OAAO,KAC9B,IAAM,EAAS,OAAO,GAAa,SAChC,GAAS,EAAU,EAAK,CACxB,MAAM,EAAY,SAAS,EAAK,EAAI,KAEvC,OADK,EACE,CAAE,QAAO,SAAQ,KAAM,GAAY,KAAM,CAD1B,KASvB,eAA8BE,GAAK,EAAW,CAC7C,GAAM,CAAE,QAAS,EAEjB,GAAI,IAAS,QACZ,OAAO,GAAS,EAAU,CAE3B,GAAI,IAAS,YACZ,OAAO,GAAa,EAAU,CAE/B,GAAI,IAAS,eACZ,OAAO,GAAgB,EAAU,CAElC,GAAI,IAAS,OACZ,OAAO,GAAQ,EAAU,CAE1B,GAAI,IAAS,gBAAiB,CAC7B,GAAM,CAAE,gBAAiB,EACnB,EAAS,MAAM,EAAY,iBAAiB,EAAa,CAE/D,OADI,EAAiB,CAAE,SAAQ,MAAO,EAAW,KAAM,KAAM,CACtD,KAER,IAAM,EAAS,MAAM,EAAY,SAAS,EAAK,CAE/C,OADI,EAAiB,CAAE,SAAQ,MAAO,EAAW,KAAM,KAAM,CACtD,KCnSR,MAAM,GAAW,IAAI,IAOrB,SAAgB,GAAW,EAAS,CACnC,IAAM,EAAS,QAAQ,CAEvB,OADA,GAAS,IAAI,EAAQ,EAAQ,KAChB,CAAE,GAAS,OAAO,EAAO,EAIvC,MAAM,GAAU,IAAI,IACdC,GAAQ,EAAY,CAAC,GAAG,GAAQ,QAAQ,CAAC,CAAC,CAEhD,IAAI,GAAO,EAAE,CACb,MAAM,EAAe,EAA6C,KAAM,CAMxE,SAAgB,GAAS,EAAM,CAC9B,IAAM,EAAS,GAAQ,GAAQ,IAAI,EAAK,CACxB,KAAa,KAAK,GAClB,IAChB,EAAa,IAAI,GAAU,KAAK,CAC5B,GAAQ,CACX,IAAM,EAAQ,GAAK,QAAQ,EAAO,CAC9B,EAAQ,GACX,GAAK,OAAO,EAAO,EAAE,CAElB,GACH,GAAK,KAAK,EAAO,EAKpB,SAAgB,IAAW,CAC1B,MAAO,CAAC,GAAGA,GAAM,KAAK,CAAC,CAQxB,SAAgB,GAAa,EAAU,EAAO,CAC7C,GAAQ,IAAI,EAAU,EAAM,CAC5B,GAAM,IAAI,CAAC,GAAG,GAAQ,QAAQ,CAAC,CAAC,CAChC,EAAa,IAAI,EAAM,CACvB,IAAK,IAAM,IAAW,CAAC,GAAG,GAAS,QAAQ,CAAC,CAC3C,EAAQ,EAAM,CAQhB,SAAgB,GAAO,EAAM,CAC5B,IAAM,EAAO,GAAQ,IAAI,EAAK,CAG9B,GAFA,GAAQ,OAAO,EAAK,CACpB,GAAM,IAAI,CAAC,GAAG,GAAQ,QAAQ,CAAC,CAAC,CAC5B,CAAC,EAAQ,OACb,IAAM,EAAQ,GAAK,QAAQ,EAAK,CAIhC,GAHI,GAAS,GAAK,GAAK,OAAO,EAAO,EAAE,CACnC,EAAa,KAAK,GAAK,IAC3B,EAAa,IAAI,KAAK,CAClB,EAAK,WAAa,OACtB,IAAM,EAAU,GAAK,GACrB,GAAO,GAAS,MAAQ,EAAY,KAAM,GAAO,GAAK,CAEvD,SAAgB,IAAW,CAC1B,IAAK,IAAM,KAAQA,GAAM,KAAK,CAC7B,EAAK,SAAS,CAIhB,MAAM,GAAQ,MAAqB,EAAa,KAAK,EAAE,OAAS,GAAG,CAC7D,GAAO,MAAqB,EAAa,KAAK,EAAE,MAAQ,GAAG,CAC3D,GAAQ,MAAqB,EAAa,KAAK,EAAE,OAAS,EAAE,CAAC,CAC7D,GAAU,MAAqB,EAAa,KAAK,EAAE,SAAW,GAAM,CACpE,GAAU,MAAqB,EAAa,KAAK,EAAE,SAAW,GAAM,CACpE,GAAU,MAAqB,EAAa,KAAK,EAAE,SAAW,GAAM,CAE7DC,GAAc,CAC1B,IAAI,OAAQ,CAAE,OAAO,GAAM,KAAK,EAChC,IAAI,MAAO,CAAE,OAAO,GAAK,KAAK,EAC9B,IAAI,OAAQ,CAAE,OAAO,gBAAgB,GAAM,KAAK,CAAC,EACjD,IAAI,SAAU,CAAE,OAAO,GAAQ,KAAK,EACpC,IAAI,SAAU,CAAE,OAAO,GAAQ,KAAK,EACpC,IAAI,SAAU,CAAE,OAAO,GAAQ,KAAK,EACpC,CAEK,GAAgB,MAAqB,EAAQD,GAAM,KAAK,CAAC,KAAK,GAAK,EAAE,QAAQ,CAAE,CAExE,GAAa,CACzB,IAAI,SAAU,CAAE,OAAO,GAAc,KAAK,EAC1C,CACD,OAAO,iBAAiB,eAAgB,GAAS,CAC3C,GAAW,UAChB,EAAM,gBAAgB,CACtB,EAAM,YAAc,KACnB,CCtHF,SAAwB,GAAW,EAAW,CAC7C,EAAU,YAAY,SAAS,eAAe,KAAK,CAAC,CCLrD,MAAM,GAAa,SAAS,cAAc,MAAM,CAC1C,GAAS,GAAW,aAAa,CAAC,KAAQ,SAAS,CAAC,CAC1D,GAAO,UAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA+BnB,MAAM,GAAY,SAAS,cAAc,MAAM,CAC9C,GAAU,YAAY,GAAW,CAClC,IAAA,GAAe,GAKf,SAAgB,GAAO,EAAM,CAC5B,GAAU,OAAS,CAAC,EC/BrBE,EAAc,YAAYC,GAAiB,CAe3C,IAAI,GAAaC,GAIjB,MAAa,GAAiB,EAAgD,IAAA,GAAW,CAC5E,EAAc,EAAqC,KAAM,CAStE,SAAS,GAAO,EAAK,EAAS,CAC7B,GAAI,KAAe,EAAO,OACtB,IACH,GAAW,GAAM,CAElB,IAAM,EAAM,GAAe,KAAK,CAChC,GAAa,EACb,GAAe,IAAI,EAAQ,CAC3B,GAAK,MAAM,CACN,GACL,EAAI,GAAK,CAGV,MAAM,GAAgB,SAAS,cAAc,MAAM,CACnD,GAAc,OAAS,GAKvB,SAAS,GAAY,EAAM,CAC1B,GAAc,OAAS,CAAC,EAGzBF,EAAc,YAAY,GAAc,CACxC,MAAM,GAAS,EAAY,IAAI,CACzB,GAAO,EAAY,IAAI,CAEvB,GAAS,IAAI,IAEnB,GAAO,IAAI,SAAU,IAAI,IAAI,MAC5B,GAAc,UAAY,GAClB,GAAW,GAAc,EAChC,CAAC,CAAC,CAMJ,SAAS,GAAS,EAAG,CACpB,IAAK,IAAM,IAAK,CAAC,GAAG,GAAO,IAAI,EAAE,EAAI,EAAE,CAAC,CACvC,GAAG,CAGL,IAAa,GAAb,KAAyB,CACxB,IAAI,WAAY,CAAE,OAAO,GACzB,IAAI,SAAU,CAAE,OAAO,KAAe,GACtC,IAAI,MAAO,CAAE,MAAO,GACpB,IAAI,QAAS,CAAE,OAAO,GAAO,KAAK,CAClC,IAAI,MAAO,CAAE,OAAO,GAAK,KAAK,CAM9B,KAAK,EAAK,EAAS,CAClB,GAAQ,EAAI,KAAO,IAAM,EAAM,GAAM,EAAY,KAAM,EAAI,CAAE,EAAQ,CAQtE,OAAO,EAAO,EAAQ,CACrB,IAAM,EAAK,EAAO,KAAK,KAAK,CACxB,EAAM,GAAO,IAAI,EAAM,CAM3B,OALK,IACJ,EAAM,IAAI,IACV,GAAO,IAAI,EAAO,EAAI,EAEvB,EAAI,IAAI,EAAG,KACE,CAAE,GAAK,OAAO,EAAG,IAMhC,SAAgB,GAAW,EAAU,CAMpC,OALI,OAAO,GAAa,YACxB,GAAS,UAAU,CACnB,GAAc,UAAY,GAC1B,GAAO,OAAO,CACd,EAAS,IAAI,GAAc,CACpB,IALsC,GAS9C,SAAS,IAAa,CACrB,IAAM,EAAU,EAAY,KAAK,CAC7B,IACH,EAAY,IAAI,KAAK,CACrB,EAAQ,MAAM,EAEf,GAAO,GAAY,CACnB,IAAU,CACV,GAAS,SAAS,CAOnB,SAAgB,GAAS,EAAG,EAAG,CAC9B,GAAO,IAAI,GAAK,IAAI,CACpB,GAAK,IAAI,GAAK,IAAI,CAClB,IAAY,CAMb,IAAI,GAAY,KAchB,SAAgB,GAAW,EAAG,CAC7B,IAAM,EAAO,EAAY,KAAK,CACzB,KACL,IAAI,CAAC,EAAG,CACH,KAAc,OACjB,aAAa,GAAU,CACvB,GAAY,MAEb,GAAO,EAAK,OAAQ,EAAK,CACzB,OAEG,KAAc,OAClB,GAAY,eAAiB,CAC5B,GAAY,KACZ,GAAOE,GAAe,CACtB,IAAU,EACR,IAAI,GAQR,SAAgB,GAAW,EAAM,EAAS,CACzC,IAAM,EAAU,EAAY,KAAK,CACjC,GAAI,IAAY,EAAM,CACrB,GAAW,EAAQ,CACnB,GAAS,EAAQ,CACjB,OAED,IAAM,EAAM,EACP,GACJ,GAAS,SAAS,CAEnB,IAAM,EAAU,EAChB,EAAY,IAAI,EAAQ,CACxB,GAAK,MAAM,CACX,GAAW,EAAQ,CACnB,GAAS,EAAQ,6FCrMlB,SAAgB,GAAO,EAAG,CACzB,OAAO,mBAAmB,EAAE,QAAQ,MAAO,MAAM,CAAC,CAMnD,SAAgB,GAAO,EAAG,CACzB,OAAO,mBAAmB,OAAO,GAAM,SAAW,EAAIC,GAAU,EAAE,CAAC,CACjE,QAAQ,OAAQ,IAAI,CACpB,QAAQ,OAAQ,IAAI,CACpB,QAAQ,OAAQ,IAAI,CACpB,QAAQ,OAAQ,IAAI,CACpB,QAAQ,OAAQ,IAAI,CACpB,QAAQ,OAAQ,IAAI,CAQvB,SAAgBC,GAAM,EAAO,CAC5B,GAAI,CAAC,EAAS,MAAO,CAAE,KAAM,OAAQ,CACrC,OAAQ,EAAR,CAEC,IAAK,IAAK,IAAK,IAAK,MAAO,CAAE,KAAM,OAAQ,CAE3C,IAAK,IAAK,IAAK,IAAK,MAAO,CAAE,KAAM,WAAY,CAE/C,IAAK,IAAK,IAAK,IAAK,MAAO,CAAE,KAAM,SAAU,CAE7C,IAAK,IAAK,IAAK,IAAK,MAAO,CAAE,KAAM,SAAU,CAE7C,IAAK,IAAK,IAAK,IAAK,MAAO,CAAE,KAAM,WAAY,CAC/C,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAON,SAAS,EAAI,EAAO,EAAK,CACxB,GAAM,CAAE,SAAU,EAAM,KAAK,EAAM,EAAI,CAAE,MAAO,GAAI,CACpD,GAAI,EAAQ,EAAK,OACjB,IAAM,EAAQ,EAAM,UAAU,EAAQ,EAAE,EAAI,EAE5C,MADA,GAAQ,EAAM,UAAU,EAAG,EAAM,CAC1B,EAER,IAAM,EAAK,EAAI,OAAO,CAEtB,EAAQ,EACN,WAAW,SAAU,IAAI,CACzB,WAAW,SAAU,IAAI,CACzB,WAAW,SAAU,IAAI,CACzB,WAAW,SAAU,IAAI,CACzB,WAAW,QAAS,IAAI,CACxB,WAAW,SAAU,IAAI,CACzB,WAAW,SAAU,IAAI,CACzB,WAAW,SAAU,IAAI,CAC3B,IAAM,EAAO,EAAK,EAAQ,EAAI,aAAc,IAAI,CAAI,IAAA,GAC9C,EAAQ,EAAO,IAAA,GAAY,EAAI,OAAQ,IAAI,EAAE,QAAQ,aAAc,GAAG,CACtE,EAAU,EAAQ,EAAI,KAAM,GAAS,EAAK,IAAA,GAAY,IAAI,CAC1D,EAAQ,aAEV,EAAM,IAAI,IAAI,CAAC,CAAC,IAAK,EAAE,CAAC,CAAE,CAAC,IAAK,EAAE,CAAC,CAAE,CAAC,IAAK,EAAE,CAAC,CAAE,CAAC,IAAK,EAAE,CAAC,CAAE,CAAC,IAAK,EAAE,CAAC,CAAC,CAAC,CAEtE,EAAO,EAAE,CACb,IAAK,IAAM,KAAK,EAAM,MAAM,EAAM,EAChC,EAAI,IAAI,EAAE,GAAG,EAAI,GAAM,KAAK,EAAE,CAEhC,IAAM,EAAe,EAAI,IAAI,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,EAAI,GAClD,EAAY,EAAI,IAAI,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,EAAI,GAC/C,EAAe,EAAI,IAAI,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,EAAI,GAClD,EAAO,EAAI,IAAI,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,EAAI,GAC1C,EAAQ,EAAK,KAAK,GAAG,CAgB3B,OAfI,EACI,CAAE,KAAM,QAAS,QAAO,YAAW,eAAc,UAAS,OAAM,QAAO,KAAI,CAE/E,EACI,CAAE,KAAM,eAAgB,eAAc,YAAW,eAAc,UAAS,OAAM,QAAO,KAAI,CAE7F,EACI,CAAE,KAAM,OAAQ,OAAM,YAAW,eAAc,UAAS,OAAM,QAAO,KAAI,CAE7E,EACI,CAAE,KAAM,YAAa,YAAW,eAAc,UAAS,OAAM,QAAO,KAAI,CAE5E,EACI,CAAE,KAAM,gBAAiB,eAAc,UAAS,OAAM,QAAO,KAAI,CAElE,CAAE,KAAM,OAAQ,CAUxB,SAAgBD,GAAU,EAAG,CAC5B,OAAQ,EAAE,KAAV,CACC,IAAK,OAAQ,MAAO,IACpB,IAAK,WAAY,MAAO,IACxB,IAAK,OAAQ,MAAO,IACpB,IAAK,SAAU,MAAO,IACtB,IAAK,SAAU,MAAO,IACtB,IAAK,WAAY,MAAO,IAEzB,GAAM,CAAE,QAAO,OAAM,eAAc,YAAW,eAAc,UAAS,QAAO,OAAM,MAAO,EACrF,EAAQ,GAkCZ,OAjCI,EACH,EAAQ,EACE,EACV,GAAS,IAAI,IACH,IACV,GAAS,IAAI,KAEV,IACH,GAAS,IAAI,KAEV,IACH,GAAS,IAAI,KAEV,GACH,GAAS,IACF,GAEJ,GACC,EACH,GAAS,IAAI,IACH,IACV,GAAS,KAEV,GAAS,IAAI,IACN,GAEJ,GACH,GAAS,IACL,IAAU,MACb,GAAS,GAAG,KAEN,GAED,EAQR,SAAiB,GAAe,EAAG,CAClC,OAAQ,EAAE,KAAV,CACC,IAAK,OAAQ,OAAO,KAAM,IAC1B,IAAK,WAAY,OAAO,KAAM,IAC9B,IAAK,OAAQ,OAAO,KAAM,IAC1B,IAAK,SAAU,OAAO,KAAM,IAC5B,IAAK,SAAU,OAAO,KAAM,IAC5B,IAAK,WAAY,OAAO,KAAM,IAE/B,GAAM,CAAE,QAAO,OAAM,eAAc,YAAW,eAAc,UAAS,QAAO,OAAM,MAAO,EACrF,EAAQ,GAiBZ,GAhBI,EACH,EAAQ,EACE,EACV,GAAS,IAAI,IACH,IACV,GAAS,IAAI,KAEV,IAAS,MAAM,GACf,IACH,GAAS,IAAI,IACb,MAAM,GAEH,IACH,GAAS,IAAI,IACb,MAAM,GAEH,EAEH,MADA,IAAS,IACF,MAAM,EAEd,GAAI,EASH,OARI,GACH,MAAM,EAAQ,IACd,GAAS,IAAI,KACH,IACV,MAAM,EAAQ,IAAI,IAClB,GAAS,KAEV,GAAS,IAAI,IACN,MAAM,EAEV,IACH,GAAS,IACT,MAAM,EACF,IAAU,MACb,GAAS,GAAG,IACZ,MAAM,ICxFT,IAAWE,GAAS,GAAY,CAC/B,IAAM,EAAQ,EAAQ,QAAQ,IAAI,CAC5B,EAAYC,GAAa,EAAQ,EAAI,EAAU,EAAQ,MAAM,EAAG,EAAM,CAAC,CACvE,EAAO,EAAQ,EAAI,IAAM,EAAQ,MAAM,EAAM,CAC7C,EAAOC,GAAY,EAAU,CAE7B,EAAWE,GADFD,GAAgB,EAAK,CACC,CACrC,MAAO,CAAE,OAAM,WAAU,OAAM,SAAU,IAAa,EAAW,EAG9D,GAAkB,GAASC,GAAaD,GAAgB,EAAK,CAAC,CAMlE,SAAgB,GAAU,EAAM,GAAG,EAAO,CACzC,IAAM,EAAO,GAAe,EAAK,CAC3B,EAAO,EAAM,OAAO,QAAQ,CAAC,KAAK,GAAG,CAG3C,OAFK,EACD,CAAC,IAAK,IAAK,IAAI,CAAC,SAAS,EAAK,GAAG,CAAW,GAAG,IAAO,IACnD,GAAG,EAAK,GAAG,IAFE,EASrB,SAAgB,GAAO,EAAM,GAAG,EAAO,CACtC,OAAO,GACN,EAAY,KACZ,GAAe,EAAK,CACpB,EAAM,OAAO,QAAQ,CAAC,KAAK,GAAG,CAC9B,CAWF,SAAgB,GAAU,EAAS,CAClC,GAAQ,EAAQ,MAChB,GAAiB,EAAQ,UAG1B,MAAa,GAAY,CACxB,IAAI,OAAQ,CAAE,OAAOH,IACrB,IAAI,WAAY,CAAE,OAAO,IACzB,IAAI,QAAS,CAAE,OAAO,IACtB,CCzED,SAAS,GAAS,EAAK,CACtB,MAAO,oCAAoC,mBAAmB,EAAI,GAOnE,SAAS,GAAqB,EAAK,CAClC,IAAM,EAAO,OAAO,GAAQ,UAAY,OAAO,GAAQ,SAAW,OAAO,EAAI,CAAG,EAGhF,MAFI,CAAC,GAAQ,OAAO,GAAS,SAAmB,GAEzC,IAAI,EACT,QAAQ,MAAO,OAAO,CACtB,QAAQ,KAAM,MAAM,CACpB,QAAQ,KAAM,MAAM,CACpB,QAAQ,MAAO,MAAM,CAAC,QAAQ,MAAO,MAAM,CAAC,GAO/C,SAAS,GAAa,EAAK,CAE1B,OADK,EACE,OAAO,GAAqB,EAAI,CAAC,GADrB,GAQpB,SAAS,EAAe,EAAK,EAAc,KAAM,CAChD,GAAI,CAAC,EAAK,OAAO,KACjB,GAAI,OAAO,GAAQ,SAAU,MAAO,GAAG,IAAM,IAC7C,GAAI,OAAO,GAAQ,SAAY,OAAO,KACtC,IAAM,EAAI,EAAI,QAAQ,cAAe,GAAG,CAExC,MADI,sBAAsB,KAAK,EAAE,CAAW,GAAG,IAAI,IAC5C,EAOR,SAAS,GAAe,EAAM,CAC7B,GAAM,CAAE,OAAQ,EAChB,GAAI,CAAC,EAAO,MAAO,GACnB,IAAM,EAAQ,EAAe,EAAK,MAAM,EAAI,GACtC,EAAS,EAAe,EAAK,OAAO,EAAI,GAO9C,MANI,CAAC,GAAS,CAAC,GAAU,GAAa,EAAI,CAMnC,GAAa,GALD;oDACgC,EAAM,YAAY,EAAO;oBACzD,EAAK,IAAI;;IAEzB,MAAM,CAC+B,QAAQ,OAAQ,IAAI,CAAC,CAAC,CAQ/D,SAAS,GAAiB,EAAM,EAAU,CACzC,IAAM,EAAOK,GAAe,EAAK,KAAK,CACtC,GAAI,CAAC,GAAM,OAAU,MAAO,GAI5B,IAAM,EAAQ,EAAE,CAChB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACrC,GAAI,CAAC,EAAK,GAAM,SAChB,IAAM,EAAQ,EAAI,EAAK,OAAS,EAC5B,EAAM,EAEV,KAAO,EAAK,EAAI,IACf,IACA,IAGD,EAAM,KAAK,EAAW,SAAS,EAAM,GAAG,EAAI,MAAM,EAAI,GAAK,IAAI,EAAM,QAAQ,EAAI,MAAM,EAAI,GAAG,CAE/F,GAAI,CAAC,EAAM,OAAU,MAAO,GAG5B,IAAI,EAAS,EAAe,EAAK,OAAO,EAAI,MACxC,EAAQ,EAAe,EAAK,MAAM,EAAI,IAAI,EAAK,OAAS,IAAM,IAAK,IACnE,EAAU,EAAK,OAAS,GACxB,EAAW,EAiBf,OAhBI,IACH,CAAC,EAAS,GAAY,CAAC,EAAU,EAAQ,CACzC,CAAC,EAAO,GAAU,CAAC,EAAQ,EAAM,EAc3B,OAAO,GAXK;;YAER,EAAM,YAAY,EAAO;gBACrB,CAAC,EAAU,EAAE,GAAG,CAAC,EAAW,EAAE,GAAG,EAAQ,GAAG,EAAS;;aAExD,EAAM,KAAK,IAAI,CAAC;;;GAG1B,MAAM,CAEuB,QAAQ,OAAQ,IAAI,CAChB,CAAC,GAQrC,SAAS,GAAU,EAAO,EAAU,CAKnC,OAJI,IAAU,GAAa,KACtB,GAES,MAAM,QAAQ,EAAM,CAAG,EAAQ,CAAC,EAAM,EACvC,IAAI,GAAQ,CACxB,GAAI,CAAC,EAAQ,MAAO,GACpB,GAAI,OAAO,GAAS,SAAY,OAAO,GAAqB,EAAK,CACjE,IAAM,EAAO,EAAK,KAMlB,OALI,IAAS,UAAoB,QAC7B,IAAS,QAAkB,GAAe,EAAK,CAC/C,IAAS,WAAa,IAAS,UAAoB,GAAiB,EAAM,EAAS,CACnF,IAAS,OAAiB,gBAC1B,IAAS,QAAkB,iBACxB,IACN,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,CAbP,GA0BtB,SAAS,EAAgB,EAAY,EAAO,EAAQ,EAAM,EAAU,CACnE,GAAI,CAAC,EAAS,OACd,GAAM,CACL,UAAS,aAAY,WAAU,OAAM,SAAQ,QAAO,YAAW,aAC/D,SAAQ,YAAW,gBAAe,UAAS,UACxC,GAAU,EAAE,CAEhB,EAAM,QAAU,GAAU,EAAS,EAAS,GAAK,EAAO,KAAO,IAC/D,EAAM,WAAa,GAAc,GACjC,EAAM,SAAW,EAAe,EAAU,KAAK,EAAI,GACnD,EAAM,WAAa,OAAO,GAAS,UAAY,EAAO,OAAS,SAAW,GAC1E,EAAM,UAAY,OAAO,GAAW,UAAY,EAAS,SAAW,SAAW,GAC/E,EAAM,MAAQ,GAAS,GACvB,EAAM,UAAY,GAAa,GAC/B,EAAM,WAAa,EAAe,EAAY,KAAK,EAAI,GACvD,EAAM,OAAS,EAAS,OAAO,EAAO,CAAG,GACzC,EAAM,UAAY,GAAa,GAC/B,EAAM,cAAgB,EAAe,EAAe,IAAI,EAAI,GAC5D,EAAM,UAAY,GAAa,UAC/B,EAAM,WAAa,WACnB,GAAM,CAAE,MAAK,QAAO,SAAQ,QAAS,GAAW,EAAE,CAClD,EAAM,WAAa,EAAe,EAAK,KAAK,EAAI,GAChD,EAAM,aAAe,EAAe,EAAO,KAAK,EAAI,GACpD,EAAM,cAAgB,EAAe,EAAQ,KAAK,EAAI,GACtD,EAAM,YAAc,EAAe,EAAM,KAAK,EAAI,GAC9C,GACH,GAAgB,EAAY,EAAO,EAAQ,EAAK,CAalD,SAAS,GAAgB,EAAM,EAAkB,EAAQ,EAAM,CAC9D,GAAI,CAAC,EAAoB,OACzB,GAAM,CAAE,QAAO,QAAO,SAAU,GAAU,EAAE,CACxC,GAAS,IAAU,GAAK,EAC3B,EAAiB,YAAY,UAAU,EAAK,QAAS,OAAO,GAAU,SAAW,GAAG,GAAS,EAAE,IAAM,GAAS,MAAM,CAEpH,EAAiB,eAAe,UAAU,EAAK,QAAQ,CAEpD,GAAS,EACZ,EAAiB,YAAY,UAAU,EAAK,QAAS,GAAS,eAAe,CAE7E,EAAiB,eAAe,UAAU,EAAK,QAAQ,CAEpD,GAAS,EACZ,EAAiB,YAAY,UAAU,EAAK,QAAS,GAAS,OAAO,CAErE,EAAiB,eAAe,UAAU,EAAK,QAAQ,CAWzD,SAAS,GAAc,EAAM,EAAQ,EAAM,CAC1C,GAAI,CAAC,EAAQ,OACb,IAAM,EAAQ,EAAK,KAEnB,EAAgB,SAAU,EAAK,QAAS,GAAQ,QAAS,EAAK,CAC9D,EAAgB,SAAU,EAAK,UAAW,GAAQ,UAAW,EAAK,CAClE,EAAgB,SAAU,EAAK,SAAU,GAAQ,SAAU,EAAK,CAChE,EAAgB,MAAO,EAAK,WAAY,GAAQ,WAAY,EAAK,CACjE,EAAgB,MAAO,EAAK,aAAc,GAAQ,aAAc,EAAK,CACrE,EAAgB,MAAO,EAAK,YAAa,GAAQ,YAAa,EAAK,CAEnE,EAAgB,QAAS,EAAK,QAAS,GAAQ,QAAS,EAAM,GAAK,CACnE,EAAgB,QAAS,EAAK,WAAY,GAAQ,WAAY,EAAM,GAAK,CACzE,EAAgB,QAAS,EAAK,WAAY,GAAQ,WAAY,EAAM,GAAK,CACzE,EAAgB,OAAQ,EAAK,SAAU,GAAQ,SAAU,EAAM,GAAK,CACpE,EAAgB,OAAQ,EAAK,YAAa,GAAQ,YAAa,EAAM,GAAK,CAC1E,EAAgB,OAAQ,EAAK,YAAa,GAAQ,YAAa,EAAM,GAAK,CAE1E,EAAgB,GAAI,EAAK,cAAe,GAAQ,cAAe,EAAK,CACpE,EAAgB,GAAI,EAAK,eAAgB,GAAQ,eAAgB,EAAK,CACtE,EAAgB,GAAI,EAAK,iBAAkB,GAAQ,iBAAkB,EAAK,CAC1E,EAAgB,GAAI,EAAK,kBAAmB,GAAQ,kBAAmB,EAAK,CAG5E,GAAgB,MAAO,EAAO,GAAQ,UAAW,EAAK,CACtD,GAAgB,SAAU,EAAO,GAAQ,aAAc,EAAK,CAC5D,GAAgB,OAAQ,EAAO,GAAQ,WAAY,EAAK,CACxD,GAAgB,QAAS,EAAO,GAAQ,YAAa,EAAK,CAK1D,GAAM,CAAE,OAAM,cAAa,UAAW,GAAU,EAAE,CAE9C,EAAY,GACZ,OAAO,GAAS,UAAY,EAC/B,EAAY,GAAG,EAAK,MAAM,GAAG,EAAK,SACxB,OAAO,GAAS,WAC1B,EAAY,GAET,IACH,EAAY,GAAG,EAAU,GAAG,KAEzB,EACH,EAAM,YAAY,OAAQ,EAAU,CAEpC,EAAM,eAAe,OAAO,CAI7B,IAAI,EAAc,GACd,OAAO,GAAW,SACrB,EAAc,EACJ,MAAM,QAAQ,EAAO,GAC/B,EAAc,EAAO,OAAO,GAAK,IAAM,IAAA,GAAU,CAAC,KAAK,IAAI,EAExD,EACH,EAAM,YAAY,SAAU,EAAY,CAExC,EAAM,eAAe,SAAS,CAKhC,MAAM,GAAQ,IAAI,cAClB,SAAS,mBAAmB,KAAK,GAAM,CAWvC,SAAS,EAAiB,EAAM,EAAU,EAAU,EAAW,CAC9D,GAAI,CACH,IAAM,EAAY,EAAK,WAAW,GAAG,EAAS,KAAM,EAAK,SAAS,OAAO,CAEnE,EAAO,EAAK,SAAS,GAE3B,GAAI,EAAE,aAAgB,eAAkB,OAAO,KAG/C,IAAM,EAAQ,EAAK,MAOnB,OANI,IACH,EAAM,MAAQ,eAEX,IACH,EAAM,OAAS,eAET,OACI,EAEZ,OAAO,KAQR,SAAS,GAAe,EAAO,EAAU,CACxC,GAAI,CACH,IAAM,EAAY,EAAM,WAAW,SAAS,GAAY,GAAG,KAAM,EAAM,SAAS,OAAO,CAEjF,EAAO,EAAM,SAAS,GAE5B,OADM,aAAgB,YACf,CACN,KAAM,EAAK,MACX,QAAS,EAAiB,EAAM,YAAa,GAAK,CAClD,UAAW,EAAiB,EAAM,cAAc,CAChD,SAAU,EAAiB,EAAM,aAAc,GAAK,CACpD,WAAY,EAAiB,EAAM,eAAgB,GAAK,CACxD,aAAc,EAAiB,EAAM,iBAAiB,CACtD,YAAa,EAAiB,EAAM,gBAAiB,GAAK,CAE1D,QAAS,EAAiB,EAAM,YAAa,GAAO,GAAK,CACzD,WAAY,EAAiB,EAAM,eAAe,CAClD,WAAY,EAAiB,EAAM,eAAgB,GAAO,GAAK,CAC/D,SAAU,EAAiB,EAAM,aAAc,GAAO,GAAK,CAC3D,YAAa,EAAiB,EAAM,gBAAgB,CACpD,YAAa,EAAiB,EAAM,gBAAiB,GAAO,GAAK,CAEjE,cAAe,EAAiB,EAAM,mBAAmB,CACzD,eAAgB,EAAiB,EAAM,oBAAoB,CAC3D,iBAAkB,EAAiB,EAAM,sBAAsB,CAC/D,kBAAmB,EAAiB,EAAM,uBAAuB,CACjE,CArB4C,UAsBlC,EAEZ,OAAO,KAER,MAAM,GAAa,GAAe,GAAM,CAClC,GAAY,GAAe,GAAO,SAAS,CAC3C,GAAW,GAAe,GAAO,QAAQ,CACzC,GAAY,GAAe,GAAO,SAAS,CAC3C,GAAY,GAAe,GAAO,SAAS,CAKjD,SAAgB,GAAiB,EAAO,CACvC,GAAc,GAAY,EAAO,GAAK,CACtC,GAAc,GAAW,EAAM,MAAM,CACrC,GAAc,GAAU,EAAM,KAAK,CACnC,GAAc,GAAW,EAAM,MAAM,CACrC,GAAc,GAAW,EAAM,MAAM,CAMtC,MAAM,GAAe,CACpB,MAAO,MACP,MAAO,UACP,MAAO,QACP,CAIK,EAAkB,CACvB,QAAS,EAAE,CACX,WAAY,oBACZ,SAAU,OACV,OAAQ,GACR,KAAM,GACN,MAAO,UACP,UAAW,SACX,WAAY,MACZ,UAAW,MACX,cAAe,WACf,QAAS,CAAE,IAAK,OAAQ,MAAO,MAAO,OAAQ,OAAQ,KAAM,MAAO,CACnE,OAAQ,EACR,OAAQ,GACR,CAIK,GAAkB,CACvB,KAAM,KACN,YAAa,OACb,OAAQ,CAAC,OAAQ,OAAQ,OAAQ,OAAO,CAExC,QAAS,EACT,UAAW,EACX,SAAU,EAEV,WAAY,EACZ,aAAc,EACd,YAAa,EAEb,QAAS,EACT,WAAY,EACZ,WAAY,EAEZ,SAAU,EACV,YAAa,EACb,YAAa,EAGb,cAAe,EACf,eAAgB,EAChB,iBAAkB,EAClB,kBAAmB,EAEnB,UAAW,GACX,aAAc,GACd,WAAY,GACZ,YAAa,GACb,CAMY,GAAc,CAC1B,GAAG,GACH,KAAM,GACN,MAAO,GACP,MAAO,GACP,MAAO,GAEP,CCjgBD,IAAa,GAAb,cAAgC,CAAe,CAE9C,GAAS,EAAY,EAAY,GAAG,CAAC,CAErC,GAAQ,EAAY,EAAY,GAAG,CAAC,CAEpC,GAAS,EAAiC,EAAE,CAAE,CAE9C,GAAe,EAAa,MAAA,EAAa,GAAY,CAErD,GAAW,EAAY,GAAK,CAE5B,GAAW,EAAY,EAAY,GAAM,CAAC,CAE1C,GAAW,EAAY,MAAqB,MAAA,EAAc,KAAK,CAAC,KAAK,CAAC,CAAC,CAEvE,GAAkB,EAAY,GAAM,CAEpC,GAAe,EAAY,GAAK,CAEhC,OAAgB,GAEhB,GAIA,GAEA,GAAQ,EAAY,GAAG,CAEvB,GAAU,EAAY,GAAG,CAEzB,GAAQ,EAAY,GAAG,CAGvB,GAAQ,MACA,GAAM,MAAA,EAAY,GAAG,MAAA,EAAW,KAAK,GAAG,MAAA,EAAa,KAAK,GAAG,MAAA,EAAW,KAAK,GAAG,CACtF,CAEF,GAAY,MAAqB,GAAG,MAAA,EAAa,GAAG,MAAA,EAAW,KAAK,GAAG,MAAA,EAAa,KAAK,GAAG,MAAA,EAAW,KAAK,GAAG,CAE/G,GAEA,GAGA,GAEA,GAEA,GACA,GAeA,YAAY,CACX,SAAQ,SAAQ,QAAO,OAAM,OAAM,SAAQ,OAAM,cAAa,OAAM,eAClE,CAEF,IAAM,EAAK,IAAI,gBACf,MAAM,EAAG,OAAO,CAChB,MAAA,EAAwB,EACxB,MAAA,EAAa,EACb,MAAA,EAAW,IAAI,EAAK,CACpB,MAAA,EAAa,IAAI,EAAO,CACxB,MAAA,EAAW,IAAI,EAAK,CAEpB,MAAA,EAAe,EACf,MAAA,EAAc,EAEd,MAAA,EAAe,EAEf,MAAA,EAAoB,EACpB,MAAA,EAAa,EACb,MAAA,EAAoB,EAEpB,IAAM,EAAO,MAAA,EACb,EAAY,OAAU,GAAS,CAC9B,IAAK,IAAM,IAAM,CAAC,GAAG,EAAK,CAAI,EAAG,EAAK,EAEvC,EAAY,SAAa,CAAE,MAAA,GAAc,EACzC,EAAY,SAAa,CACxB,KAAM,MAAA,EAAW,KAAK,CACtB,OAAQ,MAAA,EAAa,KAAK,CAC1B,KAAM,MAAA,EAAW,KAAK,CACtB,EACD,EAAY,QAAU,EAAG,EAAG,IAAM,CACjC,MAAA,EAAW,IAAI,EAAE,CACjB,MAAA,EAAa,IAAI,EAAE,CACnB,MAAA,EAAW,IAAI,EAAE,CACjB,GAAW,EAAa,MAAA,EAAkB,KAAK,CAAC,EAEjD,IAAM,EAAQ,GAAQ,MAClB,IAAS,KAAK,MAAQ,GAC1B,GAAa,EAAa,KAAK,CAIhC,GAAY,IAAI,IAMhB,SAAS,EAAI,EAAQ,CACpB,GAAI,GAAQ,QAAW,OACvB,IAAM,EAAO,MAAA,EACb,EAAK,IAAI,EAAG,CACZ,EAAO,iBAAiB,YAAe,CAAE,EAAK,OAAO,EAAG,EAAK,CAAE,KAAM,GAAM,CAAC,CAE7E,IAAI,aAAc,CAAE,OAAO,MAAA,EAAkB,KAAK,CAClD,IAAI,QAAS,CAAE,OAAO,MAAA,EACtB,IAAI,OAAQ,CAAE,OAAO,MAAA,EACrB,IAAI,MAAO,CAAE,OAAO,MAAA,EACpB,IAAI,MAAO,CAAE,OAAO,MAAA,EAAW,KAAK,CACpC,IAAI,QAAS,CAAE,OAAO,MAAA,EAAa,KAAK,CACxC,IAAI,MAAO,CAAE,OAAO,MAAA,EAAW,KAAK,CACpC,IAAI,MAAO,CAAE,OAAO,MAAA,EAAW,KAAK,CACpC,IAAI,SAAU,CAAE,OAAO,MAAA,IAAsB,EAAY,KAAK,CAC9D,IAAI,OAAQ,CAAE,OAAO,MAAA,IAAsB,GAAe,KAAK,CAE/D,IAAI,OAAQ,CAAE,OAAO,OAAO,MAAA,EAAY,KAAK,CAAC,KAAK,EAAI,GAAG,CAE1D,IAAI,MAAM,EAAO,CAAE,MAAA,EAAY,IAAI,OAAO,GAAU,WAAa,EAAe,EAAM,CAAG,EAAY,EAAM,CAAC,CAE5G,IAAI,MAAO,CAAE,OAAO,OAAO,MAAA,EAAW,KAAK,CAAC,KAAK,EAAI,GAAG,CAExD,IAAI,KAAK,EAAM,CAAE,MAAA,EAAW,IAAI,OAAO,GAAS,WAAa,EAAe,EAAK,CAAG,EAAY,EAAK,CAAC,CACtG,IAAI,OAAQ,CAAE,OAAO,MAAA,EACrB,IAAI,MAAM,EAAO,CAAE,MAAA,EAAY,IAAI,gBAAgB,EAAM,CAAC,CAE1D,IAAI,SAAU,CAAE,MAAO,EAAQ,MAAA,EAAc,KAAK,CAAC,KAAK,CAExD,IAAI,QAAQ,EAAS,CAAE,MAAA,EAAc,IAAI,OAAO,GAAY,WAAa,EAAe,EAAQ,CAAG,EAAY,EAAQ,CAAC,CAExH,IAAI,SAAU,CAAE,MAAO,EAAQ,MAAA,EAAc,KAAK,CAAC,KAAK,CAExD,IAAI,QAAQ,EAAS,CAAE,MAAA,EAAc,IAAI,OAAO,GAAY,WAAa,EAAe,EAAQ,CAAG,EAAY,EAAQ,CAAC,CACxH,IAAI,SAAU,CAAE,OAAO,MAAA,EAAc,KAAK,CAC1C,IAAI,QAAQ,EAAS,CACpB,MAAA,EAAc,IAAI,EAAQ,CACrB,GAAW,MAAA,EAAkB,IAAI,GAAM,CACxC,MAAA,IAAsB,EAAY,KAAK,GACvC,MAAA,EAAkB,KAAK,EAC3B,GAAW,GAAM,EAQlB,MAAM,EAAK,EAAM,CAChB,GAAI,EACH,IAAI,OAAO,GAAS,SACnB,OAAO,GAAM,EAAY,KAAM,EAAM,EAAI,IAC/B,OAAO,GAAS,SAC1B,OAAO,GAAM,EAAY,KAAMuB,GAAuB,EAAK,CAAE,EAAI,CAGnE,OAAO,EAAI,KAAO,IAAM,EAAM,GAAM,MAAA,EAAY,EAAI,CA4BrD,KAAK,EAAK,EAAM,EAAS,CACxB,MAAA,EACC,KAAK,MAAM,EAAK,OAAO,GAAS,UAAY,GAAK,EAAK,CACtD,OAAO,GAAS,UAAY,EAAO,EACnC,CAQF,QAAQ,EAAG,EAAS,CACnB,IAAM,EAAY,EAAE,QAAQ,IAAI,CAGhC,GAFA,MAAA,EAAW,IAAI,GAAa,EAAI,EAAE,MAAM,EAAU,CAAG,GAAG,CACpD,GAAa,IAAK,EAAI,EAAE,MAAM,EAAG,EAAU,EAC3C,EAAG,CACN,IAAM,EAAc,EAAE,QAAQ,IAAI,CAClC,MAAA,EAAa,IAAI,GAAe,EAAI,EAAE,MAAM,EAAY,CAAG,GAAG,CAC1D,GAAe,IAAK,EAAI,EAAE,MAAM,EAAG,EAAY,EAEhD,GAAK,MAAA,EAAW,IAAI,EAAE,CACtB,MAAA,IAAsB,EAAY,KAAK,EAC3C,MAAA,EAAkB,MAAA,EAAe,KAAK,CAAE,EAAQ,CAOjD,KAAK,EAAS,CACT,MAAA,IAAsB,EAAY,KAAK,EAC3C,MAAA,EAAkB,MAAA,EAAe,KAAK,CAAE,EAAQ,CAEjD,IAAI,iBAAkB,CAAE,MAAO,CAAC,KAAK,WAAa,MAAA,EAAqB,KAAK,CAK5E,QAAQ,EAAO,CACd,IAAM,MAAoB,CACzB,MAAA,MAAqB,GACrB,IAAM,EAAkB,MAAA,EAIxB,OAHI,EAAgB,OAAO,QAAkB,IAC7C,EAAgB,OAAO,CACvB,GAAO,MAAA,EAAkB,CAClB,KAWR,OATK,EAGD,MAAA,EAAqB,KAAK,EAAI,KAAK,UAAoB,IAC3D,MAAA,EAAqB,IAAI,GAAK,CAC1B,GAAe,KAAK,GAAK,MAAA,GAG7B,MAAA,EAAe,EACR,IAHC,GAAa,EALb,GAAa,GCpQvB,MAAaG,GAAS,CACrB,IAAK,CACJ,MAAO,cACP,YAAa;oCACb,CACD,CAMD,IAAW,GAAc,SAAqB,EAAK,EAAO,CACzD,IAAM,GAAK,OAAO,GAAU,UAAY,OAAO,GAAU,WACrD,OAAO,OAAOA,GAAQ,EAAM,EAAIA,GAAO,IACvCA,GAAO,KACL,EAAQ,GAAG,OAAS,QACpB,EAAO,GAAG,YACV,EAAiB,SAAS,cAAc,MAAM,CAC9C,EAAO,EAAe,YAAY,SAAS,cAAc,MAAM,CAAC,CAChE,EAAW,EAAK,YAAY,SAAS,cAAc,MAAM,CAAC,CAC1D,EAAU,EAAK,YAAY,SAAS,cAAc,MAAM,CAAC,CAe/D,GAdA,EAAe,MAAM,YAAc,KACnC,EAAe,MAAM,aAAe,OACpC,EAAe,MAAM,WAAa,QAClC,EAAe,MAAM,cAAgB,OACrC,EAAe,MAAM,QAAU,OAC/B,EAAS,MAAM,aAAe,OAC9B,EAAS,MAAM,SAAW,OAC1B,EAAS,MAAM,MAAQ,UACvB,EAAS,MAAM,UAAY,SAC3B,EAAQ,MAAM,SAAW,OACzB,EAAQ,MAAM,WAAa,QAC3B,EAAQ,MAAM,MAAQ,UACtB,EAAS,YAAY,SAAS,eAAe,EAAM,CAAC,CACpD,EAAI,MAAQ,GAAS,QACjB,GAAQ,OAAO,GAAS,SAC3B,IAAK,IAAM,KAAK,EAAK,MAAM;EAAK,CAC/B,EAAQ,YAAY,SAAS,eAAe,EAAE,CAAC,CAC/C,EAAQ,YAAY,SAAS,cAAc,KAAK,CAAC,CAGnD,EAAI,UAAU,YAAY,EAAe,CACzC,EAAI,QAAU,IAMf,SAAgB,GAAkB,EAAU,CAC3C,GAAI,OAAO,GAAa,WAAc,MAAO,GAC7C,GAAc,ECtDf,IAAa,GAAb,cAAgC,CAAe,CAC9C,GAoBA,YAAY,EAAI,EAAI,CACnB,IAAM,EAAS,CAAC,EAAI,EAAG,CAAC,KAAK,GAAK,aAAa,YAAY,CACrD,EAAU,CACf,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,KAAK,OAAO,CAAC,CAAG,KAAK,OAC/D,OAAQ,MAAA,EACR,CACD,OAAO,OAAO,GAAO,WAAa,EAAY,EAAI,EAAQ,CAAG,EAAY,EAAQ,CAalF,oBAAoB,EAAM,EAAM,EAAS,CACxC,IAAM,EAAS,GAAS,OACxB,OAAO,GAAoB,EAAM,EAAM,CACtC,GAAG,EACH,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,KAAK,OAAO,CAAC,CAAG,KAAK,OAC/D,OAAQ,MAAA,EACR,CAAC,CAEH,IAAI,QAAS,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,cAAc,CAClE,IAAI,OAAO,EAAQ,CACd,EACH,MAAA,EAAW,UAAU,IAAI,cAAc,CAEvC,MAAA,EAAW,UAAU,OAAO,cAAc,CAG5C,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,aAAa,CAChE,IAAI,MAAM,EAAO,CACZ,EACH,MAAA,EAAW,UAAU,IAAI,aAAa,CAEtC,MAAA,EAAW,UAAU,OAAO,aAAa,CAG3C,GAAa,SAAS,cAAc,MAAM,CAC1C,IAAI,WAAY,CAAE,OAAO,MAAA,EAOzB,YAAY,EAAM,EAAQ,CACzB,MAAM,EAAO,CACb,MAAA,EAAa,EACb,IAAM,EAAY,EAAK,YAAY,MAAA,EAAgB,CACnD,EAAK,UAAY,cACjB,EAAU,UAAY,mBAEvB,IAAI,aAAc,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,cAAc,CACvE,IAAI,YAAY,EAAa,CACxB,EACH,MAAA,EAAW,UAAU,IAAI,cAAc,CAEvC,MAAA,EAAW,UAAU,OAAO,cAAc,GCnFhC,GAAb,cAAgC,CAAe,CAC9C,GAoBA,YAAY,EAAI,EAAI,CACnB,IAAM,EAAS,CAAC,EAAI,EAAG,CAAC,KAAK,GAAK,aAAa,YAAY,CACrD,EAAU,CACf,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,KAAK,OAAO,CAAC,CAAG,KAAK,OAC/D,OAAQ,MAAA,EACR,CACD,OAAO,OAAO,GAAO,WAAa,EAAY,EAAI,EAAQ,CAAG,EAAY,EAAQ,CAalF,oBAAoB,EAAM,EAAM,EAAS,CACxC,IAAM,EAAS,GAAS,OACxB,OAAO,GAAoB,EAAM,EAAM,CACtC,GAAG,EACH,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,KAAK,OAAO,CAAC,CAAG,KAAK,OAC/D,OAAQ,MAAA,EACR,CAAC,CAEH,IAAI,QAAS,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,cAAc,CAClE,IAAI,OAAO,EAAQ,CACd,EACH,MAAA,EAAW,UAAU,IAAI,cAAc,CAEvC,MAAA,EAAW,UAAU,OAAO,cAAc,CAG5C,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,aAAa,CAChE,IAAI,MAAM,EAAO,CACZ,EACH,MAAA,EAAW,UAAU,IAAI,aAAa,CAEtC,MAAA,EAAW,UAAU,OAAO,aAAa,CAG3C,GAAa,SAAS,cAAc,MAAM,CAC1C,GAAQ,SAAS,cAAc,MAAM,CACrC,IAAI,WAAY,CAAE,OAAO,MAAA,EACzB,OAAqB,GAOrB,QAAQ,EAAO,EAAS,CACvB,GAAI,KAAK,UAAa,OACtB,MAAA,GAAmB,CACnB,IAAM,EAAgB,MAAA,EAChB,EAAK,IAAI,gBACT,EAAO,GAAK,cAAc,EAAO,CACtC,GAAG,EACH,OAAQ,YAAY,IAAI,CAAC,EAAG,OAAQ,KAAK,OAAO,CAAC,CACjD,CAAC,CACE,GAAQ,EAAc,YAAY,EAAK,CAC3C,MAAA,MAA0B,CAAE,EAAG,OAAO,CAAE,GAAM,QAAQ,CAAE,MAAA,MAA0B,IAQnF,YAAY,EAAM,EAAQ,CACzB,MAAM,EAAO,CACb,MAAA,EAAa,EACb,IAAM,EAAY,EAAK,YAAY,MAAA,EAAgB,CAC7C,EAAO,EAAK,YAAY,MAAA,EAAW,CACzC,EAAK,UAAY,cACjB,EAAU,UAAY,mBACtB,EAAK,UAAY,mBAElB,IAAI,aAAc,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,cAAc,CACvE,IAAI,YAAY,EAAa,CACxB,EACH,MAAA,EAAW,UAAU,IAAI,cAAc,CAEvC,MAAA,EAAW,UAAU,OAAO,cAAc,GC5GhC,GAAb,cAAiC,CAAe,CAC/C,GAAQ,SAAS,cAAc,MAAM,CAoBrC,YAAY,EAAI,EAAI,CACnB,IAAM,EAAS,CAAC,EAAI,EAAG,CAAC,KAAK,GAAK,aAAa,YAAY,CACrD,EAAU,CACf,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,KAAK,OAAO,CAAC,CAAG,KAAK,OAC/D,OAAQ,MAAA,EACR,CACD,OAAO,OAAO,GAAO,WAAa,EAAY,EAAI,EAAQ,CAAG,EAAY,EAAQ,CAalF,oBAAoB,EAAM,EAAM,EAAS,CACxC,IAAM,EAAS,GAAS,OACxB,OAAO,GAAoB,EAAM,EAAM,CACtC,GAAG,EACH,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,KAAK,OAAO,CAAC,CAAG,KAAK,OAC/D,OAAQ,MAAA,EACR,CAAC,CAEH,GAAa,MAAA,EAAW,YAAY,SAAS,cAAc,MAAM,CAAC,CAClE,IAAI,WAAY,CAAE,OAAO,MAAA,EACzB,IAAI,aAAc,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,cAAc,CACvE,IAAI,YAAY,EAAa,CACxB,EACH,MAAA,EAAW,UAAU,IAAI,cAAc,CAEvC,MAAA,EAAW,UAAU,OAAO,cAAc,CAI5C,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,aAAa,CAChE,IAAI,MAAM,EAAO,CACZ,EACH,MAAA,EAAW,UAAU,IAAI,aAAa,CAEtC,MAAA,EAAW,UAAU,OAAO,aAAa,CAI3C,GAEA,GACA,GAAY,EAAY,GAAM,CAC9B,IAAI,UAAW,CAAE,OAAO,MAAA,EAAe,KAAK,CAC5C,QAAS,CACJ,KAAK,YACT,MAAA,EAAe,IAAI,GAAK,CACpB,MAAA,EAAW,cAAgB,MAAA,GAC/B,MAAA,EAAa,aAAa,MAAA,EAAY,MAAA,EAAkB,EAEzD,QAAS,CAAE,MAAA,EAAW,QAAQ,CAAE,MAAA,EAAe,IAAI,GAAM,CASzD,YAAY,EAAQ,EAAM,EAAU,EAAQ,CAC3C,MAAM,EAAO,CACb,IAAM,EAAc,EAAO,aAAa,SAAS,cAAc,GAAG,CAAE,EAAK,CACzE,MAAA,EAAe,EACf,MAAA,EAAoB,EAGpB,IAAM,EAAO,MAAA,EACP,EAAY,MAAA,EAElB,EAAK,UAAY,eACjB,EAAU,UAAY,oBAElB,GACH,EAAO,aAAa,EAAM,EAAY,CAEvC,KAAK,OAAO,iBAAiB,YAAe,CAC3C,EAAK,QAAQ,CACb,EAAY,QAAQ,CACpB,MAAA,EAAe,IAAI,GAAM,EACvB,CAAE,KAAM,GAAM,CAAC,GC3GP,GAAb,cAA+B,CAAe,CAC7C,GAAQ,SAAS,cAAc,MAAM,CAoBrC,YAAY,EAAI,EAAI,CACnB,IAAM,EAAS,CAAC,EAAI,EAAG,CAAC,KAAK,GAAK,aAAa,YAAY,CACrD,EAAU,CACf,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,KAAK,OAAO,CAAC,CAAG,KAAK,OAC/D,OAAQ,MAAA,EACR,CACD,OAAO,OAAO,GAAO,WAAa,EAAY,EAAI,EAAQ,CAAG,EAAY,EAAQ,CAalF,oBAAoB,EAAM,EAAM,EAAS,CACxC,IAAM,EAAS,GAAS,OACxB,OAAO,GAAoB,EAAM,EAAM,CACtC,GAAG,EACH,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,KAAK,OAAO,CAAC,CAAG,KAAK,OAC/D,OAAQ,MAAA,EACR,CAAC,CAEH,GAAU,MAAA,EAAW,YAAY,SAAS,cAAc,MAAM,CAAC,CAC/D,GAAQ,MAAA,EAAW,YAAY,SAAS,cAAc,MAAM,CAAC,CAC7D,GAAS,MAAA,EAAa,YAAY,SAAS,cAAc,MAAM,CAAC,CAChE,GAAW,MAAA,EAAa,YAAY,SAAS,cAAc,MAAM,CAAC,CAClE,GAAa,MAAA,EAAW,YAAY,SAAS,cAAc,MAAM,CAAC,CAClE,IAAI,WAAY,CAAE,OAAO,MAAA,EACzB,IAAI,aAAc,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,cAAc,CACvE,IAAI,YAAY,EAAa,CACxB,EACH,MAAA,EAAW,UAAU,IAAI,cAAc,CAEvC,MAAA,EAAW,UAAU,OAAO,cAAc,CAEtC,MAAA,EAAe,KAAK,EACzB,MAAA,GAA+B,CAEhC,IAA2B,CAEtB,CAAC,GADU,MAAA,EACA,SAAS,CAAC,KAAK,GAAK,CAAC,EAAE,UAAU,SAAS,cAAc,CAAC,CACvE,MAAA,EAAW,UAAU,OAAO,cAAc,CAE1C,MAAA,EAAW,UAAU,IAAI,cAAc,CAIzC,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,aAAa,CAChE,IAAI,MAAM,EAAO,CACZ,EACH,MAAA,EAAW,UAAU,IAAI,aAAa,CAEtC,MAAA,EAAW,UAAU,OAAO,aAAa,CAG3C,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAY,aAAe,GAChD,IAAI,MAAM,EAAG,CAAE,MAAA,EAAY,YAAc,EAEzC,GAAuB,KAEvB,GAEA,GAQA,QAAQ,EAAO,EAAQ,EAAS,CAC/B,GAAI,KAAK,OAAO,QAAW,OAC3B,MAAA,GAA2B,OAAO,CAClC,IAAM,EAAsB,IAAI,gBAChC,MAAA,EAA4B,EAC5B,IAAM,EAAa,YAAY,IAAI,CAAC,EAAoB,OAAQ,KAAK,OAAO,CAAC,CACvE,EAAO,GAAK,aAAa,EAAO,EAAQ,CAC7C,GAAG,EACH,OAAQ,EACR,CAAC,CACG,IACL,MAAA,EAAa,YAAY,EAAK,CAC9B,EAAW,iBAAiB,YAAe,CAC1C,EAAK,QAAQ,EACX,CAAE,KAAM,GAAM,CAAC,EAEnB,GAAY,EAAY,GAAM,CAC9B,IAAI,UAAW,CAAE,OAAO,MAAA,EAAe,KAAK,CAC5C,QAAS,CACJ,KAAK,YACT,MAAA,EAAe,IAAI,GAAK,CACpB,MAAA,EAAW,cAAgB,MAAA,IAC/B,MAAA,EAAa,aAAa,MAAA,EAAY,MAAA,EAAkB,CACxD,MAAA,GAA+B,GAEhC,QAAS,CACR,MAAA,EAAW,QAAQ,CACnB,MAAA,EAAe,IAAI,GAAM,CACzB,MAAA,GAA+B,CAUhC,YAAY,EAAQ,EAAM,EAAU,EAAQ,CAC3C,MAAM,EAAO,CACb,IAAM,EAAc,EAAO,aAAa,SAAS,cAAc,GAAG,CAAE,EAAK,CACzE,MAAA,EAAe,EACf,MAAA,EAAoB,EACpB,IAAM,EAAO,MAAA,EACP,EAAS,MAAA,EACT,EAAO,MAAA,EACP,EAAQ,MAAA,EACR,EAAU,MAAA,EACV,EAAY,MAAA,EAClB,EAAK,UAAY,aACjB,EAAO,UAAY,oBACnB,EAAK,UAAY,kBACjB,EAAU,UAAY,uBACtB,EAAM,UAAY,mBAClB,EAAQ,UAAY,qBAChB,GACH,EAAO,aAAa,EAAM,EAAY,CAEvC,KAAK,OAAO,iBAAiB,YAAe,CAC3C,EAAK,QAAQ,CACb,EAAY,QAAQ,CACpB,MAAA,EAAe,IAAI,GAAM,CACzB,MAAA,GAA+B,EAE7B,CAAE,KAAM,GAAM,CAAC,GCrJpB,SAAgB,GAAY,EAAQ,EAAM,EAAU,EAAQ,CAC3D,OAAO,IAAI,GAAU,EAAQ,EAAM,EAAU,EAAO,CAErD,IAAa,GAAb,KAAkB,CACjB,GAAQ,SAAS,cAAc,MAAM,CAoBrC,YAAY,EAAI,EAAI,CACnB,IAAM,EAAS,CAAC,EAAI,EAAG,CAAC,KAAK,GAAK,aAAa,YAAY,CACrD,EAAU,CACf,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,MAAA,EAAa,CAAC,CAAG,MAAA,EAC3D,OAAQ,MAAA,EACR,CACD,OAAO,OAAO,GAAO,WAAa,EAAY,EAAI,EAAQ,CAAG,EAAY,EAAQ,CAalF,oBAAoB,EAAM,EAAM,EAAS,CACxC,IAAM,EAAS,GAAS,OACxB,OAAO,GAAoB,EAAM,EAAM,CACtC,GAAG,EACH,OAAQ,EAAS,YAAY,IAAI,CAAC,EAAQ,MAAA,EAAa,CAAC,CAAG,MAAA,EAC3D,OAAQ,MAAA,EACR,CAAC,CAEH,GAAS,MAAA,EAAW,YAAY,SAAS,cAAc,MAAM,CAAC,CAC9D,GAAQ,MAAA,EAAW,YAAY,SAAS,cAAc,MAAM,CAAC,CAC7D,GAAQ,MAAA,EAAW,YAAY,SAAS,cAAc,MAAM,CAAC,CAC7D,GAAa,MAAA,EAAW,YAAY,SAAS,cAAc,MAAM,CAAC,CAClE,GAAa,GAEb,GAAU,KAEV,GAAU,KAEV,GAAQ,SACR,IAAI,WAAY,CAAE,OAAO,MAAA,EACzB,IAAI,WAAY,CAAE,OAAO,MAAA,EACzB,IAAI,MAAO,CAAE,OAAO,MAAA,EACpB,IAAI,KAAK,EAAM,CACd,IAAM,EAAO,MAAA,EACb,EAAK,UAAU,OAAO,aAAa,MAAA,IAAa,CAChD,MAAA,EAAa,EACb,EAAK,UAAU,IAAI,aAAa,IAAO,CAExC,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAW,UAAU,SAAS,aAAa,CAChE,IAAI,MAAM,EAAO,CACZ,EACH,MAAA,EAAW,UAAU,IAAI,aAAa,CAEtC,MAAA,EAAW,UAAU,OAAO,aAAa,CAG3C,IAAI,MAAO,CAAE,MAAO,CAAC,MAAA,EAAW,OAKhC,OAAO,EAAM,CACZ,MAAA,EAAW,OAAS,CAAC,EAEtB,SAAU,CAKT,OAJI,MAAA,EAA0B,IAC9B,MAAA,EAAkB,GAClB,MAAA,EAAW,QAAQ,CACnB,MAAA,EAAsB,OAAO,CACtB,IAGR,GAAc,KAEd,GAAyB,KAMzB,aAAa,EAAQ,CACpB,GAAI,MAAA,EAAmB,MAAU,MAAM,WAAW,CAClD,GAAI,GAAQ,QAAS,CACpB,IAAM,EAAwB,MAAA,EAC1B,GACH,EAAsB,MAAM,EAAO,OAAO,CAE3C,EAAO,gBAAgB,CAExB,GAAI,MAAA,EAAgB,OAAO,MAAA,EAC3B,IAAM,EAAO,SAAS,cAAc,MAAM,CACpC,EAAkB,IAAI,gBAC5B,MAAA,EAAW,aAAa,EAAM,MAAA,EAAW,WAAW,CACpD,MAAA,EAAmB,EACnB,MAAA,EAA8B,EAC9B,IAAM,EAAS,IAAI,GAAW,EAAM,YAAY,IAAI,CACnD,KAAK,OACL,EAAgB,OAChB,GAAG,EAAS,CAAC,EAAO,CAAG,EAAE,CACzB,CAAC,CAAC,CAQH,MAPA,OAAA,EAAe,EACf,EAAO,OAAO,iBAAiB,YAAe,CAC7C,MAAA,EAA8B,KAC9B,MAAA,EAAe,KACf,MAAA,EAAmB,KACnB,EAAK,QAAQ,EACX,CAAE,KAAM,GAAM,CAAC,CACX,MAAA,EAGR,GAAc,KAEd,GAAuB,KAMvB,aAAa,EAAQ,CACpB,GAAI,MAAA,EAAmB,MAAU,MAAM,WAAW,CAClD,GAAI,GAAQ,QAAS,CACpB,IAAM,EAAsB,MAAA,EACxB,GACH,EAAoB,MAAM,EAAO,OAAO,CAEzC,EAAO,gBAAgB,CAExB,GAAI,MAAA,EAAgB,OAAO,MAAA,EAC3B,IAAM,EAAO,SAAS,cAAc,MAAM,CACpC,EAAkB,IAAI,gBAC5B,MAAA,EAAW,YAAY,EAAK,CAC5B,MAAA,EAAmB,EACnB,MAAA,EAA4B,EAC5B,IAAM,EAAS,IAAI,GAAW,EAAM,YAAY,IAAI,CACnD,KAAK,OACL,EAAgB,OAChB,GAAG,EAAS,CAAC,EAAO,CAAG,EAAE,CACzB,CAAC,CAAC,CASH,MARA,OAAA,EAAe,EAEf,EAAO,OAAO,iBAAiB,YAAe,CAC7C,MAAA,EAA4B,KAC5B,MAAA,EAAe,KACf,MAAA,EAAmB,KACnB,EAAK,QAAQ,EACX,CAAE,KAAM,GAAM,CAAC,CACX,MAAA,EASR,cAAc,EAAU,EAAU,EAAQ,CACzC,GAAI,MAAA,EAAmB,MAAU,MAAM,WAAW,CAClD,GAAQ,gBAAgB,CACxB,IAAM,EAAS,MAAA,EACX,EAAO,KACX,OAAQ,EAAR,CACC,IAAK,QAAS,EAAO,MAAA,GAAoB,EAAO,WAAY,MAC5D,IAAK,SAAU,EAAO,MAAA,EAAiB,MACvC,QACA,IAAK,QAAS,EAAO,MAAA,EAAgB,YAAa,MAClD,IAAK,MAAO,EAAO,MAAA,EAAkB,MAEtC,OAAO,IAAI,GACV,EACA,EACA,IAAa,GACb,aAAkB,YACf,YAAY,IAAI,CAAC,EAAQ,MAAA,EAAa,CAAC,CACvC,MAAA,EACH,CAEF,GAAmB,IAAI,gBACvB,GAAU,MAAA,EAAsB,OAChC,IAAI,QAAS,CAAE,OAAO,MAAA,EACtB,IAAI,WAAY,CAAE,MAAO,CAAC,MAAA,EAAY,OACtC,IAAI,UAAU,EAAM,CAAE,MAAA,EAAY,OAAS,CAAC,EAO5C,YAAY,EAAU,EAAQ,CAC7B,GAAI,MAAA,EAAmB,MAAU,MAAM,WAAW,CAClD,GAAQ,gBAAgB,CACxB,IAAM,EAAS,MAAA,EACf,OAAO,GACN,EACA,KACA,IAAa,GACb,aAAkB,YACf,YAAY,IAAI,CAAC,EAAQ,MAAA,EAAa,CAAC,CACvC,MAAA,EACH,CAMF,YAAY,EAAM,CACjB,MAAA,EAAW,UAAY,YACvB,MAAA,EAAW,UAAY,YACvB,MAAA,EAAgB,UAAY,iBAC5B,MAAA,EAAY,UAAY,aACxB,IAAMsC,EAAO,MAAA,EACb,EAAK,UAAY,OACjB,EAAK,OAAS,CAAC,EACf,EAAc,YAAYA,EAAK,GCpPjC,IAAW,GAAc,GAAS,IAAI,GAAK,EAAK,CAMrC,GAAe,GAAQ,CACjC,IAAM,EAAS,SAAS,cAAc,SAAS,CAM/C,OALA,EAAO,UAAU,IAAI,aAAa,CAClC,EAAI,QAAU,GACd,EAAO,OAAS,CAAC,EAAI,KACrB,EAAO,IAAM,EAAI,IACjB,EAAK,YAAY,EAAO,CACjB,CAKN,OAAO,EAAM,CACZ,EAAO,OAAS,CAAC,GAElB,SAAU,CACT,EAAO,QAAQ,EAEhB,EAOF,SAAgB,GAAiB,EAAU,EAAO,CAC7C,OAAO,GAAa,aACvB,GAAa,GAEV,OAAO,GAAU,aACpB,GAAc,GCzBhB,IAAa,GAAb,MAAa,UAAoB,CAAe,CAE/C,GAAkB,EAAY,GAAM,CAEpC,GAEA,GAEA,GAEA,GAKA,YAAY,EAAO,CAElB,IAAM,EAAK,IAAI,gBACf,MAAM,YAAY,IAAI,CAAC,EAAG,OAAQ,EAAM,OAAO,CAAC,CAAC,CACjD,MAAA,EAAc,EACd,MAAA,EAAwB,EAExB,IAAM,EAAS,GAAW,EAAM,SAAW,CAAC,EAAM,YAAY,CAG9D,GAFA,MAAA,EAAe,EACf,MAAA,EAAkB,EAAO,UACrB,KAAK,OAAO,QAAS,CACxB,EAAO,WAAW,CAClB,OAED,KAAK,OAAO,iBAAiB,YAAe,CAC3C,EAAO,WAAW,EAChB,CAAE,KAAM,GAAM,CAAC,CAClB,EAAM,SAAU,GAAS,CAAE,EAAO,OAAO,GAAQ,CAAC,EAAM,YAAY,EAAK,KAAK,OAAO,CAQtF,SAAS,EAAK,CACT,KAAK,YACT,MAAA,EAAsB,OAAO,CAE7B,GADY,IAAI,EAAY,MAAA,EAAY,CACvB,EAAI,EAGtB,IAAI,aAAc,CAAE,OAAO,MAAA,EAAY,YACvC,IAAI,QAAS,CAAE,OAAO,MAAA,EAAY,OAClC,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAY,MACjC,IAAI,MAAO,CAAE,OAAO,MAAA,EAAY,KAChC,IAAI,MAAO,CAAE,OAAO,MAAA,EAAY,KAChC,IAAI,QAAS,CAAE,OAAO,MAAA,EAAY,OAClC,IAAI,MAAO,CAAE,OAAO,MAAA,EAAY,KAChC,IAAI,MAAO,CAAE,OAAO,MAAA,EAAY,KAChC,IAAI,SAAU,CAAE,OAAO,MAAA,EAAY,QACnC,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAY,MAEjC,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAY,MAEjC,IAAI,MAAM,EAAO,CAAE,MAAA,EAAY,MAAQ,EAEvC,IAAI,MAAO,CAAE,OAAO,MAAA,EAAY,KAEhC,IAAI,KAAK,EAAM,CAAE,MAAA,EAAY,KAAO,EACpC,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAY,MACjC,IAAI,MAAM,EAAO,CAAE,MAAA,EAAY,MAAQ,EAEvC,IAAI,SAAU,CAAE,OAAO,MAAA,EAAY,QAEnC,IAAI,QAAQ,EAAS,CAAE,MAAA,EAAY,QAAU,EAE7C,IAAI,SAAU,CAAE,OAAO,MAAA,EAAY,QAEnC,IAAI,QAAQ,EAAS,CAAE,MAAA,EAAY,QAAU,EAC7C,IAAI,SAAU,CAAE,OAAO,MAAA,EAAY,QACnC,IAAI,QAAQ,EAAS,CAAE,MAAA,EAAY,QAAU,EAE7C,IAAI,WAAY,CAAE,OAAO,MAAA,EACzB,IAAI,OAAQ,CAAE,OAAO,MAAA,EAAa,MAClC,IAAI,MAAM,EAAO,CAAE,MAAA,EAAa,MAAQ,EAAQ,EAChD,IAAI,MAAO,CAAE,OAAO,MAAA,EAAa,KACjC,IAAI,KAAK,EAAM,CACT,CAAC,SAAU,OAAO,CAAC,SAAS,EAAK,GACtC,MAAA,EAAa,KAAO,GAqBrB,YAAY,EAAI,EAAI,CAAE,OAAO,MAAA,EAAa,YAAY,EAAI,EAAG,CAY7D,oBAAoB,EAAM,EAAM,EAAS,CACxC,OAAO,MAAA,EAAa,oBAAoB,EAAM,EAAM,EAAQ,CAO7D,aAAa,EAAQ,CAAE,OAAO,MAAA,EAAa,aAAa,EAAO,CAM/D,aAAa,EAAQ,CAAE,OAAO,MAAA,EAAa,aAAa,EAAO,CAO/D,YAAY,EAAU,EAAQ,CAC7B,OAAO,MAAA,EAAa,YAAY,EAAU,EAAO,CASlD,cAAc,EAAU,EAAU,EAAQ,CACzC,OAAO,MAAA,EAAa,cAAc,EAAU,EAAU,EAAO,CAO9D,YAAY,EAAO,EAAO,CACzB,IAAK,IAAM,KAAO,EAAO,CACxB,GAAM,CAAE,UAAW,EACnB,GAAI,CAAC,EAAU,SACf,IAAM,EAAK,IAAI,gBACT,EAAQ,MAAA,EAAa,YAAY,GAAO,EAAG,OAAO,CACnD,GACL,EAAa,EAAO,CAAC,KAAK,GAAM,CAC/B,GAAI,OAAO,GAAO,WAAY,CAC7B,EAAG,OAAO,CACV,OAED,EAAM,QAAQ,CACd,EAAG,EAAO,EAAK,EAAM,EACpB,EASJ,MAAM,EAAK,EAAM,CAAE,OAAO,MAAA,EAAY,MAAM,EAAK,EAAK,CA2BtD,KAAK,EAAK,EAAM,EAAS,CAAE,OAAO,MAAA,EAAY,KAAK,EAAK,EAAM,EAAQ,CAOtE,QAAQ,EAAG,EAAS,CAAE,OAAO,MAAA,EAAY,QAAQ,EAAG,EAAQ,CAM5D,KAAK,EAAS,CAAE,OAAO,MAAA,EAAY,KAAK,EAAQ,CAChD,IAAI,iBAAkB,CAAE,MAAO,CAAC,KAAK,WAAa,MAAA,EAAqB,KAAK,CAK5E,QAAQ,EAAO,CAAE,OAAO,MAAA,EAAY,QAAQ,EAAM,GCzOnD,SAAgB,GAAgB,EAAO,EAAK,EAAQ,GAAI,CACnD,IAAS,EAAM,MAAQ,GAC3B,IAAM,EAAS,EAAM,OAErB,GAAI,EAAO,QAAW,OACtB,IAAM,EAAS,GAAY,CAC1B,IAAI,KAAM,CAAE,OAAO,GACnB,IAAI,MAAO,CAAE,OAAO,EAAM,SAAW,CAAC,EAAM,aAC5C,IAAI,OAAQ,CAAE,OAAO,EAAM,OAC3B,IAAI,MAAM,EAAO,CAAM,EAAO,UAAqB,EAAM,MAAQ,IACjE,IAAI,MAAO,CAAE,OAAO,EAAM,MAC1B,IAAI,KAAK,EAAM,CAAM,EAAO,UAAqB,EAAM,KAAO,IAC9D,IAAI,SAAU,CAAE,OAAO,EAAM,SAC7B,IAAI,QAAQ,EAAS,CAAM,EAAO,UAAqB,EAAM,QAAU,IACvE,CAAC,CACF,EAAO,iBAAiB,YAAe,CACtC,EAAO,WAAW,EAChB,CAAE,KAAM,GAAM,CAAC,CAClB,EAAM,SAAU,GAAS,CAAE,EAAO,OAAO,GAAQ,CAAC,EAAM,YAAY,EAAK,EAAO,CCjBjF,MAAM,EAAQ,IAAI,IAOlB,SAAgB,GAAK,EAAU,CAC9B,OAAO,EAAM,IAAI,EAAS,EAAE,KAAK,CAclC,eAA8B,GAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACC,CACD,IAAI,EAAS,EACT,EAAM,EAAM,IAAI,EAAO,CAC3B,GAAI,EAAK,CACR,EAAI,OAAO,EAAM,EAAQ,EAAK,CAC9B,OAGD,IAAM,EAAc,CACnB,QAAS,GACT,MAAO,GACP,KAAM,CAAE,MAAO,CAAE,OAAM,SAAQ,OAAM,EACrC,OAAO,EAAG,EAAG,EAAG,CACf,EAAO,EACP,EAAS,EACT,EAAO,EACP,GAAW,EAAa,GAAK,EAE9B,CACD,EAAM,IAAI,EAAQ,EAAY,CAC9B,GAAW,EAAa,GAAK,CAC7B,IAAM,EAAO,MAAMM,GAAK,EAAU,CAAC,UAAY,KAAK,CACpD,GAAI,IAAgB,EAAY,KAAK,CAAE,CAEtC,EAAM,OAAO,EAAO,CACpB,OAED,GAAI,CAAC,EAAM,CACV,IAAM,EAAQ,IAAI,GAAW,CAC5B,KAAM,GAAG,IAAa,IACtB,OAAQ,KACR,MAAO,EACC,SACR,OAAM,SAAQ,OACd,cACA,OACA,cACA,CAAC,CACF,EAAM,OAAO,iBAAiB,YAAe,CAC5C,EAAM,OAAO,EAAO,EAClB,CAAE,KAAM,GAAM,CAAC,CAElB,IAAI,GAAY,EAAM,CAAC,SAAS,IAAI,CACpC,OAED,IAAM,EAAU,EAAK,MAEf,EAAcC,GAAuB,EAAQ,CACnD,GAAI,IAAW,EAAa,CAG3B,GAFA,EAAY,EAER,EAAM,IAAI,EAAO,GAAK,EAAe,OAGzC,GAFA,EAAM,OAAO,EAAO,CACD,EAAM,IAAI,EAAY,CACzB,CAEf,EAAY,GAAG,EAAY,GAAG,IAAO,IAAS,IAAQ,GAAK,CAC3D,OAED,EAAS,EACT,EAAM,IAAI,EAAQ,EAAY,CAC9B,EAAY,GAAG,EAAY,GAAG,IAAO,IAAS,IAAQ,GAAK,CAE5D,IAAM,EAAS,EAAK,OACpB,GAAI,OAAO,GAAW,SAAU,CAC/B,IAAM,EAAQ,IAAI,GAAW,CAC5B,KAAM,GAAG,IAAa,IACtB,OAAQ,EAAK,MAAQ,KACrB,MAAO,EACC,SACR,OAAM,SAAQ,OACd,cACA,OACA,cACA,CAAC,CACF,EAAM,OAAO,iBAAiB,YAAe,CAC5C,EAAM,OAAO,EAAO,EAClB,CAAE,KAAM,GAAM,CAAC,CAClB,GAAgB,EAAO,EAAO,CAC9B,OAID,IAAM,EAAW,MAAM,GAAQ,CAC/B,GAAI,IAAgB,EAAY,KAAK,CAAE,CAEtC,EAAM,OAAO,EAAO,CACpB,OAED,IAAM,EAAQ,IAAI,GAAW,CAC5B,KAAM,GAAG,IAAa,IACtB,OAAQ,EAAK,MAAQ,KACrB,MAAO,EACC,SACR,OAAM,SAAQ,OACd,cACA,OACA,cACA,CAAC,CACF,EAAM,OAAO,iBAAiB,YAAe,CAC5C,EAAM,OAAO,EAAO,EAClB,CAAE,KAAM,GAAM,CAAC,CAClB,IAAM,EAAK,IAAI,GAAY,EAAM,CACjC,GAAI,OAAO,GAAa,WAAY,CACnC,EAAG,UAAU,CACb,OAED,GAAI,CACH,MAAM,EAAS,EAAG,OACV,EAAG,CACX,QAAQ,MAAM,EAAE,CAChB,EAAG,SAAS,EAAE,ECnJhB,SAAwB,GAAc,EAAK,EAAS,CACnD,GAAM,CAAC,QAAQ,SACL,IAAI,IAAI,EAAK,EAAK,CACtB,OAAS,IACX,EACH,QAAQ,aAAa,EAAE,CAAE,GAAI,EAAI,CAEjC,QAAQ,UAAU,EAAE,CAAE,GAAI,EAAI,ECMhC,MAAM,GAAY,IAAI,IAOtB,SAAgB,GAAW,EAAU,CACpC,IAAM,EAAS,QAAQ,CAEvB,OADA,GAAU,IAAI,EAAQ,EAAS,KAClB,CAAE,GAAU,OAAO,EAAO,EAMxC,SAAgB,GAAW,EAAM,CAChC,GAAM,CACL,WAAU,SAAQ,QACf,IAAI,IAAI,SAAS,KAAK,CAC1B,IAAK,IAAM,IAAc,CAAC,GAAG,GAAU,QAAQ,CAAC,CAC/C,EAAW,EAAU,EAAQ,EAAM,EAAO,CAAE,GAAG,EAAM,CAAG,KAAK,CAU/D,SAAS,GAAQ,EAAM,EAAS,CAC/B,GAAc,GAAM,EAAY,KAAM,EAAK,CAAE,EAAQ,CACrD,IAAO,CASR,SAAgB,GAAa,CAAE,WAAU,SAAQ,QAAQ,EAAU,GAAM,EAAQ,CAChF,IAAM,EAAO,EAAY,KACrB,EAAU,EAAS,QAAQ,oBAAqB,IAAI,CACxD,GAAI,CAAC,GAAW,IAAY,KAAO,IAAY,GAAQ,EAAU,MAAQ,EAAM,CAC9E,GAAc,GAAG,IAAO,IAAS,IAAQ,EAAQ,CACjD,GAAW,KAAK,CAChB,GAAS,EAAQ,EAAK,CACtB,OAED,EAAU,EAAQ,MAAM,EAAQ,WAAW,GAAG,IAAO,CAAG,EAAK,OAAS,EAAE,CACxE,GAAI,CAAE,OAAM,OAAM,YAAa,GAAU,MAAM,EAAQ,CACvD,GAAI,IAAW,GAAQ,OAAS,KAAO,CAAC,GAAU,CAAC,EAAM,CACxD,IAAM,EAAO,GAAK,EAAS,CACvB,IAAS,2BAA2B,GAEzC,GAAc,GAAG,IAAO,IAAW,IAAO,IAAS,IAAQ,EAAQ,CACnE,GAAW,CAAE,GAAG,EAAM,OAAM,CAAC,CAC7B,GAAS,GAAS,EAAM,EAAM,EAAU,EAAM,EAAQ,EAAM,GAAQ,CAGrE,SAAwBC,IAAQ,CAC/B,GAAa,SAAS,CCzEvB,SAAgB,GAAQ,EAAK,EAAS,CACjC,GAAO,EAAK,EAAQ,GACxB,SAAS,KAAO,GAIjB,MAAM,GAAW,IAAI,IAmBrB,SAAwB,GAAO,EAAK,EAAS,EAAW,EAAQ,CAC/D,IAAM,EAAI,IAAI,IAAI,EAAK,SAAS,KAAK,CACrC,GAAI,EAAE,SAAW,SAAS,OAAU,MAAO,GAC3C,GAAI,CAAC,OACC,IAAM,IAAM,CAAC,GAAG,GAAS,CAC7B,GAAI,EAAG,EAAE,GAAK,GAAS,MAAO,GAOhC,OAJI,EAAE,SAAW,SAAS,QAEtB,CADS,EAAE,SACL,WAAW,EAAY,KAAK,CAAW,IACjD,GAAa,EAAG,EAAQ,EAAU,EAAO,CAClC,IC5BR,SAAS,GAAmB,EAAG,CAC1B,MAAE,UACF,KAAQ,EAAE,QAAU,EAAE,UACtB,GAAE,iBACN,IAAK,IAAM,KAAK,EAAE,cAAc,CAAE,CACjC,GAAI,EAAE,aAAa,mBAAsB,SACzC,IAAM,EAAM,EAAE,KACT,KACL,KAAK,EAAE,QAAU,WAAa,QAAW,OACrC,GAAO,EAAK,EAAQ,EAAE,aAAa,UAAU,CAAG,GAAO,GAAK,EAC/D,EAAE,gBAAgB,CAEnB,SAGF,SAAgB,IAAa,CAC5B,OAAO,iBAAiB,QAAS,GAAmB,CACpD,OAAO,iBAAiB,WAAYC,GAAM,CAC1C,IAAO,CAER,SAAgB,IAAa,CAC5B,OAAO,oBAAoB,QAAS,GAAmB,CACvD,OAAO,oBAAoB,WAAYA,GAAM,CAC7C,IAAU,CChCX,MAAa,IAAsB,EAAO,EAAQ,IAAiB,CAClE,IAAM,EAAS,EAAM,OACrB,OAAQ,MAAM,QAAQ,EAAO,CAAG,EAAS,OAAO,QAAQ,EAAO,EAAE,aAAa,EAAG,CAAC,EAAG,KAAO,CAC3F,IAAM,EAAQ,OAAO,OAAO,EAAQ,EAAE,EAAI,EAAO,GACjD,GAAI,CAAC,EAAS,OAAO,EACrB,IAAM,EAAO,GAAO,KAEpB,GADI,CAAC,GAAQ,OAAO,GAAS,UACzB,CAAC,GAAK,EAAM,MAAS,OAAO,EAChC,GAAI,CAAC,GAAK,EAAM,SAEf,MADA,GAAE,GAAK,KACA,EAER,GAAI,OAAO,GAAM,SAEhB,MADA,GAAE,GAAK,EACA,EAER,OAAQ,EAAR,CACC,IAAK,MACL,IAAK,MAEJ,MADI,aAAa,KAAK,EAAE,GAAI,EAAE,GAAK,OAAO,SAAS,EAAE,EAC9C,EACR,IAAK,MAEJ,MADI,aAAa,KAAK,EAAE,GAAI,EAAE,GAAK,GAC5B,EACR,IAAK,MACL,IAAK,MAEJ,MADI,mCAAmC,KAAK,EAAE,GAAI,EAAE,GAAK,OAAO,WAAW,EAAE,EACtE,EACR,IAAK,UACL,IAAK,UACL,IAAK,QAEJ,MADI,mCAAmC,KAAK,EAAE,GAAI,EAAE,GAAK,GAClD,EACR,IAAK,OACJ,OAAQ,EAAE,aAAa,CAAvB,CACC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,QAC7C,EAAE,GAAK,GACP,MACD,IAAK,IAAK,IAAK,IAAK,IAAK,MAAO,IAAK,IAAK,IAAK,OAC9C,EAAE,GAAK,GACP,MAEF,OAAO,EACR,QAEC,MADA,GAAE,GAAK,EACA,IAEP,GAAgB,EAAE,CAAC,ECvCvB,eAAsB,GAAsB,EAAO,EAAO,EAAc,EAAQ,EAAW,CAC1F,IAAM,EAAS,EAAM,cAAc,CAC7B,EAAQ,GAAY,EAAM,CAChC,EAAM,IAAM,GACZ,EAAM,KAAO,GACb,EAAM,gBAAkB,GAExB,GAAW,EAAO,EAAM,UAAU,YAAY,SAAS,cAAc,MAAM,CAAC,CAAE,CAC7E,QAAO,SAAU,GACjB,OAAQ,EAAM,OACd,WAAY,GAAQ,GAAQ,oBAAsB,GAAQ,YAC1D,OAAQ,GAAQ,OAChB,KAAM,GAAQ,KACd,CAAC,CACF,EAAM,MAAM,GAAmB,EAAO,GAAa,EAAE,CAAE,EAAM,eAAe,CAAC,CAAC,CAG9E,IAAM,EAAQ,GAAO,OAAS,EAAM,IAAM,GACpC,EAAY,EAAO,UACzB,EAAU,UAAU,IAAI,cAAc,CACtC,EAAU,UAAY,EAAQ,MAAM,IAAU,KAE9C,GAAM,CAAE,UAAS,WAAY,QAAQ,eAAe,CAE9C,EAAU,EAAO,QACvB,EAAQ,UAAU,IAAI,cAAc,CAEpC,IAAI,EAAW,GACT,EAAe,EAAQ,YAAY,SAAS,cAAc,SAAS,CAAC,CAC1E,EAAa,UAAY,KACzB,EAAQ,YAAY,SAAS,cAAc,KAAK,CAAC,CACjD,IAAM,EAAc,EAAQ,YAAY,SAAS,cAAc,SAAS,CAAC,CAqBzE,MApBA,GAAY,UAAY,KACxB,EAAa,iBAAiB,QAAS,SAAY,CAC9C,MAGJ,CAFA,EAAW,GACX,EAAY,SAAW,GACvB,EAAa,SAAW,GACxB,GAAI,CACH,IAAM,EAAU,MAAO,OAAO,GAAiB,SAAW,GAAa,EAAa,CAAG,GAAc,OAAO,EAAM,MAAM,CACxH,MAAM,OAAO,CACb,EAAQ,EAAQ,QACP,CACT,EAAY,SAAW,GACvB,EAAa,SAAW,GACxB,EAAW,MAEX,CACF,EAAY,iBAAiB,YAAe,CACvC,GACJ,EAAQ,KAAK,EACZ,CACK,EC7CR,eAAsB,GAAoB,EAAO,EAAO,EAAc,EAAI,EAAQ,EAAS,CAC1F,IAAM,EAAS,EAAM,cAAc,CAC7B,GAAmB,OAAO,GAAiB,SAAW,GAAa,EAAa,CAAG,GAAc,SAAS,EAAG,CAE7G,EAAQ,GAAO,OAAS,EAAM,IAAM,GACpC,EAAY,EAAO,UACzB,EAAU,UAAU,IAAI,cAAc,CACtC,IAAM,EAAQ,EAAQ,MAAM,IAAU,KACtC,EAAU,UAAY,EAEtB,IAAM,EAAM,MAAM,EAAgB,KAAK,CACvC,GAAI,EAAM,UAAa,OACvB,EAAU,UAAYC,EAAiB,GAAO,aAAc,EAAI,EAAI,EACpE,IAAM,EAAQ,GAAY,EAAM,CAC1B,CAAE,WAAU,eAAgB,GAAW,EAAE,CAC/C,EAAM,SAAW,CAAC,EAClB,EAAM,KAAO,GACb,EAAM,gBAAkB,GACxB,GAAW,EAAO,EAAM,UAAU,YAAY,SAAS,cAAc,MAAM,CAAC,CAAE,CAC7E,QAAO,WACP,OAAQ,EAAM,OACd,WAAY,GAAQ,EAAW,GAAQ,oBAAsB,GAAQ,WAAa,GAAQ,YAC1F,OAAQ,GAAQ,OAChB,KAAM,GAAQ,KACd,CAAC,CACF,EAAM,MAAM,EAAI,CAehB,GAAM,CAAE,UAAS,WAAY,QAAQ,eAAe,CAE9C,EAAU,EAAO,QACvB,EAAQ,UAAU,IAAI,cAAc,CAGpC,IAAM,EAAU,EAAY,GAAM,CAClC,GAAI,EAAa,CAChB,IAAM,EAAc,MACZ,GAAgB,UAAW,EAAM,aAAe,EAAE,CAAE,EAAM,MAAM,CACtE,CACI,EAAgB,EAAQ,YAAY,SAAS,cAAc,SAAS,CAAC,CAC3E,EAAc,UAAY,KAC1B,EAAQ,YAAY,SAAS,cAAc,KAAK,CAAC,CACjD,MAAa,EAAc,SAAW,EAAQ,KAAK,EAAI,CAAC,EAAY,KAAK,CAAE,EAAM,OAAO,CACxF,EAAc,iBAAiB,QAAS,SAAY,CAC9C,MAAa,KAAK,EACnB,GAAM,WACN,GAAQ,KAAK,EACZ,QAAQ,aAAa,CAC1B,GAAQ,IAAI,GAAK,CACjB,GAAI,CACH,MAAM,EAAgB,QAAQ,CAC9B,GAAS,QACA,CACT,EAAQ,IAAI,GAAM,IAElB,CAEH,GAAI,EAAU,CACb,IAAM,EAAe,EAAQ,YAAY,SAAS,cAAc,SAAS,CAAC,CAC1E,EAAa,UAAY,KACzB,EAAQ,YAAY,SAAS,cAAc,KAAK,CAAC,CACjD,MAAa,EAAa,SAAW,EAAQ,KAAK,CAAE,EAAM,OAAO,CACjE,EAAa,iBAAiB,QAAS,SAAY,CAC9C,MAAM,WACN,GAAQ,KAAK,CACjB,GAAQ,IAAI,GAAK,CACjB,GAAI,CACU,MAAM,EAAgB,OAAO,EAAM,MAAM,CACtD,GAAS,QACA,CACT,EAAQ,IAAI,GAAM,IAElB,KACI,CACN,GAAM,CAAE,QAAS,GAAW,EAAE,CAC9B,GAAI,EAAM,CACT,IAAM,EAAa,EAAQ,YAAY,SAAS,cAAc,SAAS,CAAC,CAClE,EAAI,EAAW,YAAY,SAAS,cAAc,IAAI,CAAC,CAC7D,EAAE,UAAY,KACd,EAAE,KAAO,EACT,EAAQ,YAAY,SAAS,cAAc,KAAK,CAAC,CACjD,MAAa,EAAW,SAAW,EAAQ,KAAK,CAAE,EAAM,OAAO,CAC/D,EAAE,iBAAiB,QAAS,GAAS,CAChC,EAAM,WACN,GAAQ,EAAM,QAAU,EAAM,UAC9B,EAAM,QACN,EAAM,WACN,EAAQ,KAAK,EACjB,GAAS,EACR,EAGJ,IAAM,EAAc,EAAQ,YAAY,SAAS,cAAc,SAAS,CAAC,CAOzE,MANA,GAAY,UAAY,KACxB,MAAa,EAAY,SAAW,EAAQ,KAAK,CAAE,EAAM,OAAO,CAChE,EAAY,iBAAiB,YAAe,CACvC,EAAQ,KAAK,EACjB,GAAS,EACR,CACK,EC/HR,SAAgB,GAAiB,EAAO,CACvC,OAAO,OAAO,QAAQ,EAAM,OAAO,CACjC,OAAO,GAAK,EAAE,GAAG,QAAQ,CACzB,MAAM,EAAE,CAAC,QAAS,IAAI,EAAE,CAAC,QAAS,OAAS,GAAK,IAAM,GAAK,GAAG,CAC9D,KAAK,CAAC,KAAO,EAAE,CAQlB,SAAgB,GAAK,EAAU,EAAO,CACrC,OAAQ,MAAM,QAAQ,EAAM,CAAG,EAAO,GAAiB,EAAM,EAAE,IAAI,GAAK,EAAS,GAAG,CAAC,KAAK,IAAI,CCS/F,MAAM,GAAgB,CACrB,KAAK,EAAS,EAAM,EAAS,CAC5B,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,EAAS,OACd,IAAM,EAAQ,EAAQ,QAAQ,IAAI,CAClC,GAAI,EAAQ,EAAK,OACjB,IAAM,EAAO,EAAQ,MAAM,EAAQ,EAAE,CACrC,OAAQ,EAAQ,KAAhB,CACC,IAAK,YAAa,CAEjB,IAAM,GADU,EAAM,QAAQ,aAAe,EAAE,EACxB,GAEvB,OADI,OAAO,GAAW,WACf,EAAO,CACb,QACA,IAAI,kBAAmB,CAAE,OAAO,EAAQ,kBACxC,IAAI,WAAY,CAAE,OAAO,EAAQ,WACjC,CAAC,CALkC,OAOrC,IAAK,WACL,IAAK,eAAgB,CACpB,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,EAAS,OAEd,IAAM,GADU,EAAM,QAAQ,iBAAmB,EAAE,EAC5B,GAEvB,OADI,OAAO,GAAW,WACf,EAAO,CACb,QACA,IAAI,UAAW,CAAE,OAAO,EAAQ,UAChC,IAAI,OAAQ,CAAE,OAAO,GACrB,CAAC,CALkC,UASvC,CACK,GAAe,OAEH,CAChB,OAAQ,GACR,GAAG,EAAS,IAAI,WAAW,CAAC,OAAO,CACnC,EAEA,CASF,SAAS,GAAW,EAAM,EAAS,EAAM,CACxC,IAAM,EAAU,EAAK,QACrB,GAAI,CAAC,EAAW,OAChB,IAAM,EAAQ,EAAQ,QAAQ,IAAI,CAClC,GAAI,EAAQ,EAAK,OACjB,IAAM,EAAO,EAAQ,MAAM,EAAG,EAAM,CACpC,GAAI,CAAC,EAAQ,OACb,IAAM,EAAW,GAAa,KAAK,CAC7B,EAAM,OAAO,OAAO,EAAU,EAAK,EAAI,EAAS,GACtD,GAAI,CAAC,EAAO,OACZ,IAAM,EAAK,OAAO,OAAO,EAAK,EAAK,EAAI,EAAI,GACvC,UAAO,GAAO,WAGlB,OAFe,EAAG,EAAS,EAAM,EAAQ,CAI1C,MAAa,GAAU,CAOtB,SAAS,EAAS,EAAM,CACvB,OAAO,GAAW,WAAY,EAAS,EAAK,EAAI,IASjD,OAAO,EAAS,EAAM,CACrB,OAAO,GAAW,SAAU,EAAS,EAAK,EAAI,IAS/C,KAAK,EAAS,EAAM,CACnB,OAAO,GAAW,OAAQ,EAAS,EAAK,EAIzC,CCxHD,eAAsB,GAAW,CAAE,QAAO,0BAA2B,EAAE,CAAE,CACxE,GAAI,uBAAwB,QAAU,OAAO,oBAAuB,WAAY,CAC/E,GAAM,CAAC,GAAQ,MAAM,mBAAmB,CACvC,QACA,uBAAwB,GAAQ,GAA0B,MAAM,QAAQ,EAAM,EAAI,EAAM,QACxF,CAAC,CAEF,OADK,EACE,EAAK,SAAS,CADD,KAGrB,IAAM,EAAQ,SAAS,cAAc,QAAQ,CAC7C,EAAM,KAAO,OACb,IAAM,EAAW,MAAM,QAAQ,EAAM,EAAI,EAAM,IAAI,GAAK,OAAO,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAI,GAW7F,OAVI,IACH,EAAM,OAAS,EAAS,KAAK,IAAI,EAS3B,IAAI,SAAS,EAAS,IAAW,CACvC,EAAM,iBAAiB,aAAgB,CAAE,EAAQ,EAAM,QAAQ,IAAM,KAAK,EAAI,CAC9E,EAAM,iBAAiB,QAAU,GAAM,CAAE,EAAO,EAAE,MAAM,EAAI,CAC5D,EAAM,OAAO,EACZ,CAGH,MAAM,GAAa,WAQnB,SAAgB,GAAU,EAAM,EAAM,CACrC,IAAI,EAAO,EAAK,KACZ,EAAK,KAAO,MAAO,EAAO,EAAK,MAAM,EAAE,EAC3C,IAAM,EAAI,GAAG,KAAa,EAAK,OAAO,GAAG,IACzC,OAAO,EAAO,GAAG,EAAE,GAAG,IAAS,EAQhC,SAAgB,GAAW,EAAK,CAC/B,GAAI,CAAC,GAAO,OAAO,GAAQ,SAAY,OAAO,KAC9C,IAAM,EAAQ,EAAI,QAAQ,IAAI,CACxB,EAAO,oBACX,GAAS,EAAI,EAAI,MAAM,EAAQ,EAAE,CAAG,KAClC,EAAI,QAAQ,SAAU,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,QAAQ,CAAC,KAAK,EAC1D,GACH,CACD,GAAI,EAAI,MAAM,EAAG,EAAkB,CAAC,aAAa,GAAK,GAAY,CACjE,GAAM,CAAC,EAAU,GAAG,GAAY,EAAI,MAAM,EAAkB,CAAC,QAAQ,UAAW,GAAG,CAAC,MAAM,IAAI,CACxF,EAAW,EAAS,OAAO,QAAQ,CAAC,KAAK,IAAI,CAEnD,OADK,EACE,CAAE,OAAM,KAAM,GAAG,GAAU,IAAI,GAAG,GAAU,KAAK,GAAG,GAAY,IAAI,SAAS,IAAY,CADxE,KAGzB,MAAO,CAAE,OAAM,KAAM,EAAK,CC5D3B,SAAwB,GAAY,EAAU,CAC7C,GAAI,CAAC,GAAW,EAAS,CACxB,MAAU,MAAM,eAAe,IAAW,CAE3C,MAAO,CAMN,YAAY,EAAK,CAAE,OAAO,GAAY,EAAK,EAAU,GAAK,EAM1D,OAAO,EAAK,CAAE,OAAO,EAAa,EAAK,EAAS,EAChD,QAASC,EAAQ,OAAO,CAAC,OAAO,GAAGC,GAAU,IAAI,kBAAkB,IAAW,CAC9E,KAAM,EAAK,OAAO,EAAS,CAC3B,CCVF,SAAS,GAAO,EAAI,CAEnB,IAAI,EACJ,UAAa,IAAW,QAAQ,SAAS,CAAC,SAAW,GAAI,CAAC,CAG3D,eAAe,IAAY,CAE1B,IAAM,EAAW,OAAO,QAAQ,GAAQ,CAAC,KAAK,CAAC,EAAQ,CAAE,MAAO,MAC3D,OAAO,GAAa,SACnB,EAGD,MAAM,SAAS,EAAS,GAAG,CACvB,CAAC,EAAQ,EAAa,GAAG,IAAS,IAAW,CAAC,CAE/C,CAAC,EAAQ,EAAa,GAAG,EAAO,GAAG,IAAW,CAAC,CAL9C,CAAC,EAAQ,EAAa,GAAG,IAAS,CAAC,CAFA,CAAC,GAAI,GAAG,CAQlD,CACI,EACL,OAAO,QAAQ,GAAQ,CAAC,SAAS,CAAC,EAAQ,CAAE,aAAc,CAAC,EAAO,CAAC,MAAM,CAAC,IAAI,GAAQ,CACjF,MAAC,GAAQ,OAAO,GAAS,UAC7B,OAAO,GAAY,EAAM,EAAQ,GAAK,EACrC,CAAC,CACE,EAAS,MAAM,QAAQ,IAC5B,EAAS,QAAQ,CAAC,KAAY,EAAO,CAAC,IAAI,GAAK,QAAQ,IAAI,EAAE,CAAC,CAC9D,CAAC,KAAK,GAAK,EAAE,QAAQ,EAAG,KAAU,GAAQ,OAAO,GAAS,SAAS,CAAC,CACrE,MAAM,QAAQ,IAAI,EAAe,CACjC,GAAY,OAAO,YAAY,EAAO,CAAC,CAOxC,eAAe,GAAU,EAAU,CAClC,IAAM,EAAW,EAAE,CACnB,IAAK,GAAM,CAAC,EAAM,KAAW,GAAY,EAAE,CAC1C,EAAS,KAAK,GAAY,EAAM,EAAQ,GAAK,CAAC,CAE/C,IAAK,GAAM,CAAC,EAAQ,KAAU,EAAS,IAAI,SAAS,CAC/C,OAAO,GAAU,UACpB,EAAS,KAAK,GAAY,EAAO,EAAQ,GAAK,CAAC,CAGjD,MAAM,QAAQ,IAAI,EAAS,CAI5B,IAAI,QAA2B,EAAE,EAG7B,QAAmB,EAAE,EAErB,OAAkB,GAClB,GAAc,GAClB,eAAe,IAAc,CAC5B,GAAI,GAAe,OACnB,GAAc,GACd,IAAW,CACX,IAAI,EAAU,GACd,OAAkB,CAAE,EAAU,GAAM,GAAc,IAClD,GAAM,CAAE,aAAY,WAAU,gBAAe,QAAO,cAAa,aAAY,QAAO,QAAS,MAAM,IAAW,CAC9G,GAAI,EAAW,OAEf,IAAM,EAAc,EAAE,CACtB,IAAK,IAAM,IAAM,CAAC,EAAY,EAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,MAAM,CACnE,GAAM,OAAO,GAAO,UACvB,SAAS,KAAK,UAAU,IAAI,EAAG,CAG7B,GAAiB,OAAO,GAAkB,UAC7C,EAAK,UAAU,IAAI,EAAc,CAElC,IAAK,IAAM,IAAM,CAAC,EAAU,EAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAChE,aAAc,SACjB,SAAS,KAAK,YAAY,EAAG,CAG3B,OAAO,GAAgB,YAC1B,EAAY,KAAK,GAAW,EAAY,CAAC,CAEtC,OAAO,GAAe,YACzB,EAAY,KAAK,GAAW,EAAW,CAAC,CAEzC,IAAK,IAAM,KAAe,EAAS,IAAI,cAAc,CAAC,QAAQ,CACxD,GACL,EAAY,KAAK,GAAW,EAAY,CAAC,CAG1C,IAAY,CACZ,IAAM,EAAK,IAAI,gBACT,EAAS,EAAG,OAElB,MAAY,IAAQC,GAAY,EAAI,EAAY,OAAS,aAAc,GAAS,CAC/E,SAAS,MAAQ,GACf,CAAE,SAAQ,UAAW,GAAM,CAAC,CAC/B,MAAYA,GAAY,MAAO,GAAS,CAAE,GAAiB,EAAM,EAAK,CAAE,SAAQ,UAAW,GAAM,CAAC,CAElG,OAAkB,CACjB,OAAkB,GAClB,EAAG,OAAO,CACV,GAAc,GACd,IAAY,CACZ,IAAK,IAAM,KAAW,EAAe,GAAS,CAC9C,IAAK,IAAM,IAAM,CAAC,EAAU,EAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAChE,aAAc,SACjB,EAAG,QAAQ,CAGT,GAAiB,OAAO,GAAkB,UAC7C,EAAK,UAAU,OAAO,EAAc,CAErC,IAAK,IAAM,IAAM,CAAC,EAAY,EAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,MAAM,CACnE,GAAM,OAAO,GAAO,UACvB,SAAS,KAAK,UAAU,OAAO,EAAG,EAIrC,IAAQ,EAAO,CAOhB,eAAe,GAAQ,EAAmB,CACzC,IAAW,CACX,IAAI,EAAU,GACd,OAAkB,CAAE,EAAU,IAC9B,IAAM,EAAgB,MAAM,IAAmB,CAC/C,GAAI,EAAW,OACf,GAAM,CAAE,aAAY,WAAU,iBAAkB,EAEhD,IAAK,IAAM,IAAM,CAAC,EAAW,CAAC,MAAM,CAC/B,GAAM,OAAO,GAAO,UACvB,SAAS,KAAK,UAAU,IAAI,EAAG,CAG7B,GAAiB,OAAO,GAAkB,UAC7C,EAAK,UAAU,IAAI,EAAc,CAElC,IAAK,IAAM,IAAM,CAAC,EAAS,CAAC,MAAM,CAC7B,aAAc,SACjB,SAAS,KAAK,YAAY,EAAG,CAG/B,IAAM,EAAK,IAAI,gBACf,OAAkB,CACjB,OAAkB,GAClB,EAAG,OAAO,CACV,IAAK,IAAM,IAAM,CAAC,EAAS,CAAC,MAAM,CAC7B,aAAc,SACjB,EAAG,QAAQ,CAGT,GAAiB,OAAO,GAAkB,UAC7C,EAAK,UAAU,OAAO,EAAc,CAErC,IAAK,IAAM,IAAM,CAAC,EAAW,CAAC,MAAM,CAC/B,GAAM,OAAO,GAAO,UACvB,SAAS,KAAK,UAAU,OAAO,EAAG,EAIrC,MAAM,EAAc,QAAQ,EAAG,OAAO,CAClC,GAAG,OAAO,SACd,MAAM,EAAK,MAAM,CAElB,IAAI,GAAU,GAQd,eAA8B,GAAM,EAAoB,EAAY,EAAY,CAC/E,GAAI,GAAW,OACf,GAAU,GACV,IAAM,EAAiB,GAAoB,CAC3C,GAAoB,GAAO,SAAY,CACtC,IAAM,EAAgB,MAAM,EACtB,CAAE,cAAe,EAEvB,OADA,MAAM,GAAU,EAAW,CACpB,GACN,CACF,GAAY,GAAO,SAAY,CAC9B,GAAM,CAAC,EAAO,GAAU,MAAM,QAAQ,IAAI,CACzC,GAAY,CACZ,KAAc,CACd,CAAC,CACE,GAAU,GAAU,EAAO,CAE/B,GAAM,CACL,OAAM,aAAY,aAClB,aAAY,cAAa,cACzB,cACG,EAOJ,OANA,MAAM,GAAU,EAAW,CAC3B,GAAW,EAAK,CAChB,GAAc,EAAW,CACzB,GAAgB,EAAW,CAC3B,GAAiB,EAAY,EAAY,CACzC,GAAkB,EAAY,CACvB,GACN,CACF,MAAM,IAAW,CACjB,GAAM,CAAC,SAAQ,YAAW,YAAY,MAAM,EACxC,OAAO,GAAW,YAAc,GAAU,EAAO,CACjD,OAAO,GAAc,YAAc,GAAgB,EAAU,CAC7D,GAAY,SAAS,WAAa,EAAY,UAAY,SAAS,OAAO,OAAS,EACtF,EAAK,OAAO,CAEZ,MAAM,EAAK,MAAM,CAElB,MAAY,EAAK,UAAW,GAAa,CACpC,EACH,GAAQ,GAAM,CAEd,IAAa,EAEZ,CACF,UAAW,GACX,CAAC,oDCjPH,eAAe,IAAc,CAG5B,OAD+B,MAAM,OAAO,SAAS,KAAK,GAAK,EAAE,QAAQ,CAI1E,MAAaC,GAA6C,CACzD,kBAAmB,CAAC,OAAO,CAC3B,CAOD,eAAsB,GACrB,EACuC,CAEvC,IAAM,EAAM,IADE,MAAM,IAAa,GAE7B,aAAgB,KACnB,MAAM,EAAI,UAAU,EAAK,CACf,YAAY,OAAO,EAAK,CAClC,MAAM,EAAI,UAAU,IAAI,WAAW,EAAK,OAAQ,EAAK,WAAY,EAAK,WAAW,CAAC,CAElF,MAAM,EAAI,UAAU,EAAK,CAG1B,IAAM,EAAsC,EAAE,CAE9C,IAAK,GAAM,CAAC,EAAU,KAAc,OAAO,QAAQ,EAAI,MAAM,CAC5D,EAAO,GAAY,EAAU,IAAM,KAAO,MAAM,EAAU,MAAM,OAAO,CAExE,OAAO,EAGR,eAAsB,GACrB,EACA,EACC,CAED,IAAM,EAAM,IADE,MAAM,IAAa,GAEjC,KAAM,IAAK,GAAM,CAAC,EAAM,KAAS,OAAO,QAAQ,EAAM,CAAE,CACvD,IAAM,EAAQ,EAAK,MAAM,IAAI,CAAC,OAAO,QAAQ,CAC7C,GAAI,CAAC,EAAM,OAAU,SAErB,IAAM,EADQ,EAAK,SAAS,IAAI,EAAI,GAAQ,KACvB,GAAK,EAAM,KAAK,CACrC,GAAI,CACH,IAAI,EAAM,EACV,IAAK,IAAM,KAAK,EAAO,CACtB,IAAM,EAAS,EAAI,OAAO,EAAE,CAC5B,GAAI,CAAC,EAAU,SAAS,KACxB,EAAM,EAEP,GAAI,CAAC,EAAQ,SACb,GAAI,OAAO,GAAS,UAAY,aAAgB,MAAQ,aAAgB,YAAa,CACpF,EAAI,KAAK,EAAM,EAAK,CACpB,SAED,GAAI,YAAY,OAAO,EAAK,CAAE,CAC7B,EAAI,KAAK,EAAM,IAAI,WAAW,EAAK,OAAQ,EAAK,WAAY,EAAK,WAAW,CAAC,CAC7E,eAEM,GAIT,IAAM,EAAO,MAAM,EAAI,cAAc,CAAE,KAAM,OAAQ,CAAC,CACtD,OAAO,IAAI,KACV,CAAC,EAAK,CACN,GAAG,GAAQ,MAAM,MACjB,CAAE,KAAM,kBAAmB,CAC3B,6RCiHF,MAAa,GAAS,CACrB,IAAS,MAAM,SAAS,CACxB,KAAU,MAAM,UAAU,CAC1B,MAAW,MAAM,UAAU,CAC3B,IAAS,MAAM,QAAQ,CACvB,KAAU,MAAM,SAAS,CACzB,IAAS,MAAM,QAAQ,CACvB,GAAQ,MAAM,OAAO,CACrB,MAAW,MAAM,UAAU,CAC3B,CAED,SAAgB,GAAQ,EAAqB,CAC5C,IAAM,EAAI,GAAG,IAAO,aAAa,CACjC,IAAK,IAAM,KAAS,OAAO,OAAO,GAAO,CACxC,GAAI,IAAM,EAAM,QAAW,OAAO,EAEnC,OAAW,MAAM,EAAE,CAKpB,MAAa,GAA2C,CACvD,oEAAqE,CAAC,QAAS,QAAS,QAAQ,CAChG,CAED,eAAsB,GAAK,EAA+B,CAGzD,IAAM,EAAW,IADD,MAAM,OAAO,WAAW,KAAK,GAAK,EAAE,QAAQ,GAC/B,SAG7B,OADA,MAAM,EAAS,KAAK,KAAK,EAAK,CACvB,EAGR,SAAgB,GAAa,EAAa,CACzC,GAAI,CAAC,EAAQ,OACb,IAAM,EAAQ,EAAK,MACnB,GAAI,CAAC,GAAS,OAAO,GAAU,SAC9B,OAAO,EAGR,IAAM,EAAS,aAAiB,KAC7B,EAEA,EAAM,OAIT,OAHI,aAAkB,KACd,IAAI,KAAK,EAAO,SAAS,CAAG,IAAI,MAAM,CAAC,mBAAmB,CAAG,IAAM,CAEpE,EAER,SAAgB,GAAa,EAAa,EAAa,CACjD,IACL,EAAK,MAAQ,aAAiB,KAAO,IAAI,KAAK,EAAM,SAAS,CAAG,IAAI,MAAM,CAAC,mBAAmB,CAAG,IAAM,CAAG,GAG3G,SAAgB,GAAgB,EAA4B,CAC3D,GAAI,CAAC,EAAY,OAAO,KACxB,IAAM,EAAiB,EAAS,MAAM,IAAI,WAAa,EAEvD,OADc,EAAS,WAAW,IAClB,KAKjB,eAAsB,GACrB,EACA,EACA,EACA,EACC,CACD,GAAY,EAAO,CAClB,EAAQ,KAAK,CAAE,OAAM,WAAY,GAAS,EAAK,CAC/C,GAAG,EAAK,IAAI,GAAK,EAAQ,KAAK,CAAE,UAAW,EAAE,IAAS,GAAG,CAAC,CAC1D,CAAE,EAAQ,CAMZ,eAAsB,GACrB,EACA,EACA,CAAE,YAAW,aAA0D,EAAE,CACxE,CACD,IAAM,GAAM,GAAa,GAAK,EACxB,GAAM,GAAa,GAAK,EAC9B,IAAK,GAAM,CAAC,EAAG,KAAM,EAAM,SAAS,CACnC,IAAK,GAAM,CAAC,EAAG,KAAU,EAAE,SAAS,CACnC,GAAa,EAAM,QAAQ,EAAI,EAAI,EAAI,EAAG,CAAE,EAAM,CAQrD,eAAsB,GAAY,EAAmD,CACpF,GAAI,CAAC,EAAS,OAAO,KACrB,IAAM,EAAgB,EAAE,CAQxB,OAPA,EAAM,SAAS,EAAK,IAAc,CACjC,IAAM,EAAiB,EAAE,CACzB,EAAI,SAAS,CAAE,aAAc,GAAM,CAAG,GAAS,CAC9C,EAAQ,KAAK,GAAa,EAAK,CAAC,EAC/B,CACF,EAAK,KAAK,EAAQ,EACjB,CACK,EAMR,SAAgB,GAAS,EAAoB,EAAe,EAAmB,CAC9E,GAAI,CAAC,EAAQ,OAAO,KACpB,IAAM,EAAY,EAAQ,EAAS,aAAa,EAAM,CAAG,GAAgB,EAAS,CAElF,OADK,EACE,GAAa,EAAU,QAAQ,EAAK,CAAC,CADnB,KAO1B,SAAiB,GAChB,EACA,EACuB,CACvB,IAAK,IAAM,KAAQ,GAAU,EAAE,CAAE,CAChC,GAAM,CAAE,QAAS,EACjB,KAAM,CAAC,EAAM,EAAO,GAAS,EAAU,EAAK,MAAO,EAAK,CAAG,KAAK,EAOlE,SAAgB,GACf,EACA,EACC,CACD,IAAK,GAAM,CAAE,QAAO,OAAM,WAAW,EACpC,GAAa,EAAS,aAAa,EAAM,EAAE,QAAQ,EAAK,CAAE,EAAM,CAOlE,eAAsB,GAAO,EAAoB,EAA8B,CAC9E,IAAM,EAAS,MAAM,EAAS,KAAK,aAAa,CAChD,OAAO,IAAI,KACV,CAAC,EAAO,CACR,GAAG,GAAQ,MAAM,OACjB,CAAE,KAAM,oEAAqE,CAC7E,CAQF,SAAgB,GAAiB,EAA2B,CACjD,EAAU,aAAa,CAAC,QAAQ,UAAW,GAAG,CACxD,IAAI,EAAQ,EACZ,IAAK,IAAM,KAAQ,EAAW,CAC7B,GAAI,EAAO,KAAO,EAAO,IAAO,MAChC,EAAQ,EAAQ,IAAM,EAAK,WAAW,EAAE,CAAG,GAAQ,GAEpD,OAAO,EAMR,SAAS,GAAY,EAAuC,CAC3D,IAAI,EAAY,KAChB,GAAI,GAAS,OAAO,GAAU,SAAU,CACvC,GAAM,CAAE,QAAO,WAAU,OAAM,YAAW,UAAS,UAAS,UAAW,EACvE,GAAI,EAAS,OAAO,GAAQ,EAAM,CAClC,GAAI,MAAM,QAAQ,EAAS,CAAI,MAAO,CAAC,WAAS,CAChD,GAAI,OAAO,GAAS,SAAY,OAAO,EACnC,IAAW,IAAA,KAAa,EAAY,QAExC,EAAY,EAKb,OAHI,aAAqB,KACjB,IAAI,KAAK,EAAU,SAAS,CAAG,IAAI,MAAM,CAAC,mBAAmB,CAAG,IAAM,CAEvE,EAGR,MAAM,GAAmB,gEACnB,GAAmB,4EAKzB,SAAS,GAAc,EAAmD,CACzE,GAAI,CAAC,EAAS,OACd,GAAM,CAAC,OAAM,SAAS,EAChB,EAAQ,IAAS,GAAiB,KAAK,EAAK,EAAI,GAAiB,KAAK,EAAK,GAAG,OACpF,GAAI,EACH,MAAO,IAAI,CAAC,EAAM,EAAE,EAAM,EAAE,EAAM,EAAE,EAAM,GAAK,GAAG,CAAC,IAAI,GAAK,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG,GAS3F,SAAS,GAAa,EAAkB,EAAa,EAAyB,CAC7E,IAAM,EAAO,EAAM,QAAQ,EAAM,EAAG,EAAM,EAAE,CAE5C,MAAO,CACN,MAAO,GAAY,EAAK,MAAM,CAC9B,QAAS,EAAK,QACd,UAAW,EAAK,UAEhB,KAAM,CACL,GAAG,EAAK,MAAM,KACd,MAAO,GAAc,EAAK,MAAM,MAAM,MAAM,CAC5C,CACD,UAAW,EAAK,MAAM,UAQtB,OAAQ,CACP,IAAK,CAAE,GAAG,EAAK,MAAM,QAAQ,IAAK,MAAO,GAAc,EAAK,MAAM,QAAQ,KAAK,MAAM,CAAE,CACvF,KAAM,CAAE,GAAG,EAAK,MAAM,QAAQ,KAAM,MAAO,GAAc,EAAK,MAAM,QAAQ,MAAM,MAAM,CAAE,CAC1F,OAAQ,CAAE,GAAG,EAAK,MAAM,QAAQ,OAAQ,MAAO,GAAc,EAAK,MAAM,QAAQ,QAAQ,MAAM,CAAE,CAChG,MAAO,CAAE,GAAG,EAAK,MAAM,QAAQ,MAAO,MAAO,GAAc,EAAK,MAAM,QAAQ,OAAO,MAAM,CAAE,CAC7F,CAED,KAAM,CACL,GAAG,EAAK,OAAO,KAEf,QAAS,GAAc,EAAK,OAAO,MAAM,QAAQ,CAEjD,QAAS,GAAc,EAAK,OAAO,MAAM,QAAQ,CACjD,CACD,OAAQ,EAAK,OACb,CAMF,SAAgB,GAAc,EAA+B,CAC5D,IAAM,EAAW,EAAM,SACjB,EAAW,EAAM,YAEjB,EAAQ,MAAM,EAAS,CAAC,KAAK,KAAK,CAAC,KAAK,EAAG,IAAM,MAAM,EAAS,CAAC,KAAK,KAAK,CAAC,KAAK,EAAG,IAAM,GAAa,EAAO,EAAG,EAAE,CAAC,CAAC,CAErH,EAAuB,MAAM,EAAS,CAAC,KAAK,KAAK,CAAC,KAAK,EAAG,IAAM,CACrE,IAAM,EAAM,EAAM,OAAO,EAAI,EAAE,CAC/B,MAAO,CACN,OAAQ,EAAI,OACZ,MAAO,EAAI,QAAU,IAAM,EAAI,EAC/B,EACA,CAEI,EAAuB,MAAM,EAAS,CAAC,KAAK,KAAK,CAAC,KAAK,EAAG,IAAM,CACrE,IAAM,EAAM,EAAM,UAAU,EAAI,EAAE,CAClC,MAAO,CACN,OAAQ,EAAI,OACZ,MAAO,EAAI,OAAS,MAAQ,EAAI,EAChC,EACA,CAEI,EAAO,EAAM,MAAM,GACzB,MAAO,CACN,QAAO,OAAM,OACb,OAAQ,EAAK,QAAU,UAAY,EAAK,aAAe,KACvD,OAAQ,EAAM,MAAM,OACpB"}
|