@baishuyun/ai-feat-utils 2.0.49 → 2.0.51

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ai-feat-utils.js","sources":["../src/text-part.ts","../src/part.ts","../src/dom.ts","../src/shadow-styles.ts","../src/value-normalizer.ts","../src/form-structure.ts","../src/field-json.ts","../src/constants.ts","../src/attachment.ts","../src/condition.ts","../src/date.ts","../src/array.ts","../src/iconfont.ts","../src/prompt-parser.ts","../src/fields-json-rebuild/rebuild-text.ts","../src/fields-json-rebuild/build-widget-name.ts","../src/fields-json-rebuild/rebuild-number.ts","../src/fields-json-rebuild/rebuild-select.ts","../src/fields-json-rebuild/rebuild-radio-group.ts","../src/fields-json-rebuild/rebuild-date-time.ts","../src/fields-json-rebuild/default-builder.ts","../src/fields-json-rebuild/rebuild-dept-group.ts","../src/fields-json-rebuild/rebuild-sn.ts","../src/fields-json-rebuild/rebuild-dept.ts","../src/fields-json-rebuild/rebuild-user-group.ts","../src/fields-json-rebuild/rebuild-data-linker.ts","../src/fields-json-rebuild/rebuild-data-loader.ts","../src/fields-json-rebuild/rebuild-user.ts","../src/fields-json-rebuild/rebuild-signature.ts","../src/fields-json-rebuild/rebuild-image.ts","../src/fields-json-rebuild/rebuild-upload.ts","../src/fields-json-rebuild/rebuild-checkbox-group.ts","../src/fields-json-rebuild/rebuild-line.ts","../src/fields-json-rebuild/rebuild-combo-checker.ts","../src/fields-json-rebuild/rebuild-location.ts","../src/fields-json-rebuild/rebuild-textarea.ts","../src/fields-json-rebuild/rebuild-button.ts","../src/fields-json-rebuild/rebuild-address.ts","../src/fields-json-rebuild/rebuild-subform.ts","../src/fields-json-rebuild/rebuild-data-query.ts","../src/fields-json-rebuild/index.ts","../src/chat.ts"],"sourcesContent":["export const extractTextPartMeta = (part: any) => {\n if (part?.type !== 'text') {\n return null;\n }\n\n if (!part.providerMetadata) {\n return null;\n }\n\n if (!part.providerMetadata.raw || !part.providerMetadata.raw.data) {\n return null;\n }\n\n if (typeof part.providerMetadata.raw.data !== 'string') {\n return part.providerMetadata.raw.data;\n }\n\n let payload;\n try {\n payload = JSON.parse(part.providerMetadata.raw.data);\n } catch (e) {\n console.error('invalid raw data');\n }\n\n return payload || part.providerMetadata.raw.data;\n};\n","import { IQueryResult } from '@baishuyun/types';\nimport { extractTextPartMeta } from './text-part';\n\nexport const IsErrorPart = (part: any): boolean => {\n if (part?.type === 'error') {\n return true;\n }\n\n const payload = extractTextPartMeta(part);\n return payload?.type === 'agent-error';\n};\n\nexport const IsFakeMsgPart = (part: any): boolean => {\n const payload = extractTextPartMeta(part);\n return payload?.type === 'agent-fake-msg';\n};\n\nexport const IsFilePart = (part: any): boolean => {\n return part?.type === 'file';\n};\n\nexport const IsQueryResultPart = (part: any): boolean => {\n const payload = extractTextPartMeta(part);\n return payload?.type === 'query-stream-parsed-info';\n};\n\nexport const GetQueryResult = (part: any): IQueryResult | null => {\n const payload = extractTextPartMeta(part);\n if (payload?.type !== 'query-stream-parsed-info') {\n return null;\n }\n\n const result = payload.result;\n console.log('query result raw data:', result);\n try {\n return JSON.parse(result);\n } catch (e) {\n console.error('invalid query result data');\n return null;\n }\n};\n\nexport const IsFileGroupPart = (part: any) => {\n if (!Array.isArray(part)) {\n return false;\n }\n\n // any one is file part\n for (const p of part) {\n if (p?.type === 'file') {\n return true;\n }\n }\n\n return false;\n};\n\nexport const IsLoadingPart = (part: any): boolean => {\n const payload = extractTextPartMeta(part);\n return payload?.type === 'agent-loading';\n};\n\nexport const GetLoadingMsg = (part: any): string => {\n const payload = extractTextPartMeta(part);\n if (payload?.type !== 'agent-loading') {\n return '';\n }\n\n return payload?.label || '加载中';\n};\n\nexport const GetPartErrMsg = (part: any): string => {\n if (!IsErrorPart(part)) {\n return '';\n }\n\n if (part?.errorText) {\n return part.errorText;\n }\n\n const payload = extractTextPartMeta(part);\n return payload?.error || '未知错误';\n};\n\nexport const getMetaErrorMsg = (part: any): string => {\n if (part?.errorText) {\n return part.errorText;\n }\n\n const payload = extractTextPartMeta(part);\n return payload?.error || '未知错误';\n};\n","const STYLE_INJECTED_ATTR = 'data-shadow-slot-injected';\n\n/**\n * 克隆进 shadow root 的宿主样式统一降级到该 cascade layer。\n *\n * 背景:SDK 的 tailwind 产物全部包裹在 @layer(theme/base/components/utilities) 中,\n * 而 unlayered 样式在级联中恒优先于任何 layered 样式(与顺序、特异性无关)。\n * 宿主全局样式(如 `button { background: transparent }`)若原样进入 shadow root,\n * 会压过 SDK 的工具类。将宿主样式整体包进最先声明的 host-clone 层后,\n * SDK 样式恢复正常优先级;宿主主动传入的 styleString / 渲染器 style 仍为 unlayered,\n * 追加在最后,保留其覆盖能力。\n */\nconst HOST_CLONE_LAYER = 'host-clone';\n\n/**\n * 将一段宿主 CSS 文本降级包装:\n * - 顶层 @font-face / @keyframes / @property / @import 提升到层外\n * (它们不参与层叠;@import 还必须位于样式表最前,不能嵌进 @layer 块);\n * - 已有的 @layer 块保持原样(避免祖先 shadow 中已降层的样式被重复嵌套);\n * - 其余规则包进 @layer host-clone。\n * 解析失败时回退为整体包装。\n */\nconst wrapHostStyleText = (cssText: string): string => {\n try {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(cssText);\n\n const imports: string[] = [];\n const hoisted: string[] = [];\n const segments: string[] = [];\n let plainBuffer: string[] = [];\n\n const flushPlain = () => {\n if (plainBuffer.length) {\n segments.push(`@layer ${HOST_CLONE_LAYER} {\\n${plainBuffer.join('\\n')}\\n}`);\n plainBuffer = [];\n }\n };\n\n for (const rule of Array.from(sheet.cssRules)) {\n if (rule instanceof CSSImportRule) {\n imports.push(rule.cssText);\n } else if (\n rule instanceof CSSFontFaceRule ||\n rule instanceof CSSKeyframesRule ||\n (typeof CSSPropertyRule !== 'undefined' && rule instanceof CSSPropertyRule)\n ) {\n hoisted.push(rule.cssText);\n } else if (rule instanceof CSSLayerBlockRule) {\n flushPlain();\n segments.push(rule.cssText);\n } else {\n plainBuffer.push(rule.cssText);\n }\n }\n flushPlain();\n\n return [...imports, ...hoisted, ...segments].join('\\n');\n } catch {\n return `@layer ${HOST_CLONE_LAYER} {\\n${cssText}\\n}`;\n }\n};\n\nexport const injectHostStylesIntoShadow = (shadowRoot: ShadowRoot, hostElement: HTMLElement) => {\n if (shadowRoot.querySelector(`[${STYLE_INJECTED_ATTR}]`)) return;\n\n const importLines: string[] = [];\n const styleTexts: string[] = [];\n\n const collect = (el: Element) => {\n if (el instanceof HTMLLinkElement) {\n // link 的 innerHTML 恒为空,且克隆的 link 无法降级到 layer;\n // 转为 @import layer()(与 link 一样不要求 CORS),并保留 media 条件。\n const layerImport = `@import url(\"${el.href}\") layer(${HOST_CLONE_LAYER})`;\n importLines.push(el.media ? `${layerImport} ${el.media};` : `${layerImport};`);\n } else if (el instanceof HTMLStyleElement) {\n styleTexts.push(wrapHostStyleText(el.textContent || ''));\n }\n };\n\n // Collect <style> and <link rel=\"stylesheet\"> from document.head\n document.head.querySelectorAll('style').forEach(collect);\n document.head.querySelectorAll('link[rel=\"stylesheet\"]').forEach(collect);\n\n // Walk up through ancestor shadow roots and collect their <style> and <link> elements\n let node: Node | null = hostElement.parentNode;\n while (node) {\n if (node instanceof ShadowRoot) {\n node.querySelectorAll('style').forEach(collect);\n node.querySelectorAll('link[rel=\"stylesheet\"]').forEach(collect);\n }\n node = node.parentNode;\n }\n\n // 单个注入节点:层声明置首,保证 host-clone 恒为最低层;@import 须在其余规则之前。\n const styleEl = document.createElement('style');\n styleEl.setAttribute(STYLE_INJECTED_ATTR, '');\n styleEl.textContent = [\n `@layer ${HOST_CLONE_LAYER};`,\n ...importLines,\n ...styleTexts,\n ].join('\\n');\n shadowRoot.appendChild(styleEl);\n};\n","type StyleSource = Document | ShadowRoot;\ntype StyleSnapshot = { source: Node | CSSStyleSheet; css?: string; href?: string; media: string; nonce: string; classes?: string };\n\nconst MANAGED_STYLE = 'data-bs-host-style';\nconst watchers = new WeakMap<StyleSource, { subscribe: (listener: () => void) => () => void; read: () => StyleSnapshot[]; refresh: () => void }>();\n\nconst rebaseUrls = (css: string, base: string) => css.replace(\n /url\\(\\s*(?:\"([^\"\\n]*)\"|'([^'\\n]*)'|([^\\s)]*))\\s*\\)/gi,\n (match, double, single, bare) => {\n const url = double ?? single ?? bare;\n if (!url || /^(?:data:|blob:|#|var\\()/i.test(url)) return match;\n try { return `url(${JSON.stringify(new URL(url, base).href)})`; } catch { return match; }\n },\n);\n\nconst hostSelector = (selector: string) => selector\n .replace(/(^|,\\s*)(?::root|html)(?=$|[\\s>.:#\\[])/g, '$1:host')\n .replace(/:host\\s+(?:>\\s*)?body(?=$|[\\s>.:#\\[])/g, ':host > [data-bs-shadow-content]')\n .replace(/(^|,\\s*)body(?=$|[\\s>.:#\\[])/g, '$1[data-bs-shadow-content]');\n\nconst serializeRules = (rules: CSSRuleList, base: string): string => Array.from(rules).map(rule => {\n if (rule.type === 1) {\n const styleRule = rule as CSSStyleRule;\n const body = rule.cssText.slice(rule.cssText.indexOf('{'));\n return hostSelector(styleRule.selectorText) + rebaseUrls(body, base);\n }\n if ('cssRules' in rule && rule.type !== 7) {\n return rule.cssText.slice(0, rule.cssText.indexOf('{') + 1)\n + serializeRules((rule as CSSGroupingRule).cssRules, base) + '}';\n }\n return rebaseUrls(rule.cssText, base);\n}).join('\\n');\n\nconst snapshotStyles = (root: StyleSource): StyleSnapshot[] => {\n const doc = root.nodeType === 9 ? root as Document : (root as ShadowRoot).ownerDocument;\n const snapshots: StyleSnapshot[] = [];\n if (root.nodeType === 9 && doc.body) {\n const computed = doc.defaultView!.getComputedStyle(doc.body);\n const properties = ['font', 'color', 'line-height', 'letter-spacing', 'text-align', 'text-transform', 'direction', 'color-scheme'];\n const vars = Array.from(computed).filter(name => name.startsWith('--'));\n const css = [...properties, ...vars].map(name => `${name}:${computed.getPropertyValue(name)};`).join('');\n snapshots.push({ source: doc, css: `:host {display:contents;${css}}`, media: '', nonce: '', classes: `${doc.documentElement.className} ${doc.body.className}` });\n }\n for (const node of Array.from(root.querySelectorAll<HTMLStyleElement | HTMLLinkElement>('style,link[rel~=\"stylesheet\"]'))) {\n if (node.hasAttribute(MANAGED_STYLE) || node.hasAttribute('data-bs-sdk-styles') || node.hasAttribute('data-shadow-slot-injected')) continue;\n if (node.disabled || node.sheet?.disabled) continue;\n const media = node.media || '';\n const nonce = node.nonce || '';\n try {\n if (node.sheet) {\n snapshots.push({ source: node, css: serializeRules(node.sheet.cssRules, node.sheet.href || node.baseURI), media, nonce });\n continue;\n }\n } catch {\n if (node.tagName === 'LINK') {\n snapshots.push({ source: node, href: (node as HTMLLinkElement).href, media, nonce });\n continue;\n }\n }\n if (node.tagName === 'LINK') snapshots.push({ source: node, href: (node as HTMLLinkElement).href, media, nonce });\n else snapshots.push({ source: node, css: rebaseUrls(node.textContent || '', node.baseURI), media, nonce });\n }\n for (const sheet of Array.from(root.adoptedStyleSheets || [])) {\n if (!sheet.disabled) snapshots.push({ source: sheet, css: serializeRules(sheet.cssRules, doc.baseURI), media: sheet.media.mediaText, nonce: '' });\n }\n if (snapshots[0]?.source === doc) snapshots.push(snapshots.shift()!);\n return snapshots;\n};\n\nconst watchStyles = (root: StyleSource) => {\n const existing = watchers.get(root);\n if (existing) return existing;\n const doc = root.nodeType === 9 ? root as Document : (root as ShadowRoot).ownerDocument;\n let snapshots = snapshotStyles(root);\n let queued = false;\n const listeners = new Set<() => void>();\n const refresh = () => {\n queued = false;\n const next = snapshotStyles(root);\n if (next.length === snapshots.length && next.every((s, i) => s.source === snapshots[i].source && s.css === snapshots[i].css && s.href === snapshots[i].href && s.media === snapshots[i].media && s.nonce === snapshots[i].nonce && s.classes === snapshots[i].classes)) return;\n snapshots = next;\n listeners.forEach(listener => listener());\n };\n const schedule = () => {\n if (queued) return;\n queued = true;\n queueMicrotask(() => { if (listeners.size) refresh(); });\n };\n const observer = new MutationObserver(records => {\n if (records.some(record => {\n const target = record.target.nodeType === 1 ? record.target as Element : record.target.parentElement;\n if (target?.closest(`style[${MANAGED_STYLE}],style[data-bs-sdk-styles]`)) return false;\n if (target === doc.documentElement || target === doc.body) {\n if (record.type === 'attributes') return true;\n }\n if (target?.matches('style,link[rel~=\"stylesheet\"]')) return true;\n return [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(node =>\n node.nodeType === 1 && ((node as Element).matches('style,link[rel~=\"stylesheet\"]') || (node as Element).querySelector('style,link[rel~=\"stylesheet\"]')),\n );\n })) schedule();\n });\n observer.observe(root, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ['href', 'rel', 'media', 'disabled', 'class', 'style'] });\n root.addEventListener('load', schedule, true);\n const timer = doc.defaultView!.setInterval(refresh, 1000);\n const watcher = {\n read: () => snapshots,\n refresh: schedule,\n subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (listeners.size) return;\n observer.disconnect();\n root.removeEventListener('load', schedule, true);\n doc.defaultView!.clearInterval(timer);\n watchers.delete(root);\n };\n },\n };\n watchers.set(root, watcher);\n return watcher;\n};\n\nexport const syncHostStylesIntoShadow = (shadowRoot: ShadowRoot, host: HTMLElement) => {\n const sources: StyleSource[] = [host.ownerDocument];\n let root = host.getRootNode();\n while (root.nodeType === 11 && 'host' in root) {\n const parent = root as ShadowRoot;\n if (parent.host.getAttribute('data-bs-style-mode') !== 'sdk') sources.splice(1, 0, parent);\n root = parent.host.getRootNode();\n }\n const entries = sources.map(watchStyles);\n const marker = host.ownerDocument.createComment('host styles');\n shadowRoot.prepend(marker);\n const nodes = new Map<Node | CSSStyleSheet, HTMLStyleElement | HTMLLinkElement>();\n const sync = () => {\n const snapshots = entries.reduce<StyleSnapshot[]>((all, entry) => all.concat(entry.read()), []);\n const mount = shadowRoot.querySelector<HTMLElement>('[data-bs-shadow-content]');\n const classes = `${host.ownerDocument.documentElement.className} ${host.ownerDocument.body?.className || ''}`;\n if (mount && mount.className !== classes) mount.className = classes;\n const active = new Set(snapshots.map(snapshot => snapshot.source));\n for (const [source, node] of nodes) if (!active.has(source)) { node.remove(); nodes.delete(source); }\n let previous: ChildNode = marker;\n for (const snapshot of snapshots) {\n let node = nodes.get(snapshot.source);\n const tag = snapshot.href ? 'LINK' : 'STYLE';\n if (node && node.tagName !== tag) { node.remove(); nodes.delete(snapshot.source); node = undefined; }\n if (!node) {\n node = host.ownerDocument.createElement(snapshot.href ? 'link' : 'style');\n node.setAttribute(MANAGED_STYLE, '');\n nodes.set(snapshot.source, node);\n }\n node.media = snapshot.media;\n node.nonce = snapshot.nonce;\n if (snapshot.href) {\n const link = node as HTMLLinkElement;\n link.rel = 'stylesheet';\n if (link.href !== snapshot.href) link.href = snapshot.href;\n } else if (node.textContent !== snapshot.css) node.textContent = snapshot.css || '';\n if (previous.nextSibling !== node) previous.after(node);\n previous = node;\n }\n };\n const unsubscribe = entries.map(entry => entry.subscribe(sync));\n sync();\n const contentObserver = new MutationObserver(records => {\n if (records.some(record => {\n const target = record.target.nodeType === 1 ? record.target as Element : record.target.parentElement;\n return target && !target.closest('style,link');\n })) entries.forEach(entry => entry.refresh());\n });\n contentObserver.observe(shadowRoot, { subtree: true, childList: true, characterData: true, attributes: true, attributeFilter: ['class'] });\n return () => {\n contentObserver.disconnect();\n unsubscribe.forEach(dispose => dispose());\n nodes.forEach(node => node.remove());\n marker.remove();\n };\n};\n\nconst FONT_FACES_ATTR = 'data-bs-font-faces';\nconst CSS_FONT_FACE_RULE = 5; // CSSRule.FONT_FACE_RULE\n\n/**\n * 仅把宿主文档里的 @font-face 规则注入当前 shadow(幂等)。\n *\n * 背景:部分移动端 WebView 不把「文档级 @font-face」应用到 shadow 内文本,\n * 导致 shadow 里的字体图标(finex / sdk-icon-font)字形落回默认字体显示成豆腐块。\n * @font-face 不参与级联,注入无副作用,可安全用于 mode=\"sdk\" 的 shadow。\n */\nexport const injectHostFontFacesIntoShadow = (shadowRoot: ShadowRoot, host: HTMLElement) => {\n if (shadowRoot.querySelector(`[${FONT_FACES_ATTR}]`)) return;\n\n const doc = host.ownerDocument;\n const fontFaces: string[] = [];\n\n for (const sheet of Array.from(doc.styleSheets)) {\n let rules: CSSRuleList;\n try {\n rules = sheet.cssRules;\n } catch {\n // 跨域样式表 cssRules 不可读,跳过\n continue;\n }\n const base = sheet.href || doc.baseURI;\n for (const rule of Array.from(rules)) {\n if (rule.type === CSS_FONT_FACE_RULE) {\n fontFaces.push(rebaseUrls(rule.cssText, base));\n }\n }\n }\n\n if (!fontFaces.length) return;\n\n const style = doc.createElement('style');\n style.setAttribute(FONT_FACES_ATTR, '');\n style.textContent = fontFaces.join('\\n');\n shadowRoot.prepend(style);\n};\n","function isStringArray(value: unknown): value is string[] {\n if (!Array.isArray(value)) {\n return false;\n }\n\n return value.every((item) => typeof item === 'string');\n}\n\nfunction isOptionArray(value: unknown): value is Array<{ label: string; value: string }> {\n if (!Array.isArray(value)) {\n return false;\n }\n\n return value.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n 'label' in item &&\n 'value' in item &&\n typeof (item as any).label === 'string' &&\n typeof (item as any).value === 'string'\n );\n}\n\nexport const valueNormalizer = (value: string | string[]): string => {\n if (isStringArray(value)) {\n return value.join(', ');\n }\n\n if (isOptionArray(value)) {\n const values = value.map((item) => item.value);\n return values.join(', ');\n }\n\n return value;\n};\n","import { FieldType, IField } from '@baishuyun/types';\n\nexport const WHITE_LIST_FIELDS_SET = new Set<FieldType>([\n 'password',\n 'textarea',\n 'datetime',\n 'text',\n 'radiogroup',\n 'radio',\n 'combo',\n 'combocheck',\n 'checkboxgroup',\n 'number',\n]);\n\nexport const GetSafeFormStructure = (formStructure: Array<IField>) => {\n if (!Array.isArray(formStructure)) {\n return [];\n }\n\n return formStructure.filter((f) => {\n if (!f.widget) {\n return false;\n }\n\n return WHITE_LIST_FIELDS_SET.has(f.widget.type);\n });\n};\n","import {\n IBsUIAutomationService,\n IField,\n IFilledField,\n IFormAttachment,\n MsgPartCompProps,\n} from '@baishuyun/types';\nimport { extractTextPartMeta } from './text-part';\n\nexport const createPartTypeChecker =\n (type: string) =>\n (part: any): boolean => {\n const payload = extractTextPartMeta(part);\n return payload?.type === type;\n };\n\nexport const createPayloadTypeChecker = (type: string) => (payload: unknown) => {\n const specialPayload = payload as MsgPartCompProps;\n const part = specialPayload?.part;\n const checker = createPartTypeChecker(type);\n\n return checker(part);\n};\n\nexport const createGetFieldJsonInfo =\n (type: string) =>\n (part: any): IFilledField | null => {\n const payload = extractTextPartMeta(part);\n if (payload?.type !== type) {\n return null;\n }\n return payload?.field || null;\n };\n\nexport const createFieldPartsExtractor =\n (isTarget: (part: any) => boolean) =>\n (part: any): any[] => {\n if (Array.isArray(part) && part.length > 0) return part.filter(isTarget);\n if (isTarget(part)) return [part];\n return [];\n };\n\nexport const safeParseJson = (jsonString: string): any | null => {\n if (typeof jsonString !== 'string') {\n return jsonString;\n }\n\n try {\n return JSON.parse(jsonString);\n } catch (e) {\n console.info('[safeParseJson] Failed to parse JSON:', e);\n return null;\n }\n};\n\n/** 附件记录(IFormAttachment)基础校验:有 qnKey 才是平台真实记录 */\nconst isAttachmentRecord = (value: unknown): boolean =>\n Boolean(value && typeof value === 'object' && (value as IFormAttachment).qnKey);\n\n/**\n * 判断字段的填写值是否合法(用于过滤模型输出的无效填写项):\n * - null / undefined / 空字符串 / 空数组 / 空对象一律不合法;\n * - 数字 NaN 不合法;\n * - 附件类字段(upload / image)必须是平台附件记录数组(防模型编造);\n * - signature 为单条附件记录。\n */\nexport const hasValidFieldValue = (field: IField): boolean => {\n const value = field?.widget?.value;\n const type = field?.widget?.type;\n\n if (value === undefined || value === null || value === '') {\n return false;\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n\n if (typeof value === 'number' && Number.isNaN(value)) {\n return false;\n }\n\n if (typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length === 0) {\n return false;\n }\n\n if (type === 'signature') {\n return isAttachmentRecord(value);\n }\n\n if (type === 'upload' || type === 'image') {\n return Array.isArray(value) && value.length > 0 && value.every(isAttachmentRecord);\n }\n\n return true;\n};\n\nexport const generateWidgetName = (prefix = '_widget_') => {\n const now = Date.now();\n const timeStr = String(now);\n const totalLen = timeStr.length; // 通常为 13\n const fixedPart = timeStr.slice(0, totalLen - 5); // 保留前 N-5 位\n const randomPart = String(Math.floor(Math.random() * 100000)).padStart(5, '0');\n return `${prefix}${fixedPart}${randomPart}`;\n};\n\nexport const field2config = (field: IField, autoService: IBsUIAutomationService) => {\n return {\n field,\n onLoaded: () => {\n autoService.fillWidget({\n checked: true,\n field,\n });\n },\n onChange: (checked: boolean, instance: IField, parentFieldName: string, rowIndex: number) => {\n const detail = {\n field: instance,\n checked,\n parentFieldName,\n rowIndex,\n };\n\n autoService.fillWidget(detail);\n },\n };\n};\n","export const DATA_COUNT_PER_BATCH = 10;\n","export const imageUrlToBase64 = (url: string, mediaType = 'image/png'): Promise<string> =>\n new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n const canvas = document.createElement('canvas');\n canvas.width = img.naturalWidth;\n canvas.height = img.naturalHeight;\n canvas.getContext('2d')!.drawImage(img, 0, 0);\n resolve(canvas.toDataURL(mediaType));\n };\n img.onerror = () => resolve(url);\n img.src = url;\n });\n","import type {\n FieldType,\n IAgentHelper,\n IFormValues,\n IConditionItem,\n relationalOperator,\n ICondition,\n IBsCondition,\n IBsCondItem,\n ICtxDetail,\n} from '@baishuyun/types';\n\nexport const OPERATOR_LABEL_MAP: Record<relationalOperator, string> = {\n eq: '等于',\n neq: '不等于',\n gt: '大于',\n lt: '小于',\n gte: '大于等于',\n lte: '小于等于',\n contains: '包含',\n not_contains: '不包含',\n in: '等于任意',\n nin: '不等于任意',\n all: '同时包含',\n empty: '为空',\n not_empty: '不为空',\n range: '选择范围',\n like: '模糊匹配',\n unlike: '模糊不匹配',\n};\n\n/**\n * 字段类型 → 操作符描述覆盖\n *\n * 同一操作符在不同字段类型下文案不同(参考报表筛选 FilterTypeRelationMap 机制):\n * 多值字段(部门多选/成员多选/多选框组)的 in 语义是「包含任意一个」而非「等于任意」,\n * 地址/定位的 in/nin 语义是「属于/不属于」「包含/不包含」。\n * 未覆盖的类型与操作符回退到 OPERATOR_LABEL_MAP。\n */\nexport const FIELD_TYPE_OPERATOR_LABEL_OVERRIDES: Partial<\n Record<FieldType, Partial<Record<relationalOperator, string>>>\n> = {\n usergroup: { in: '包含任意一个' },\n deptgroup: { in: '包含任意一个' },\n checkboxgroup: { in: '包含任意一个' },\n combocheck: { in: '包含任意一个' },\n address: { in: '属于', nin: '不属于' },\n location: { in: '包含', nin: '不包含' },\n};\n\n/**\n * 获取操作符描述:优先字段类型覆盖,回退默认文案\n */\nexport function getOperatorLabel(operator: relationalOperator, fieldType?: FieldType): string {\n const overrides = fieldType ? FIELD_TYPE_OPERATOR_LABEL_OVERRIDES[fieldType] : undefined;\n return overrides?.[operator] ?? OPERATOR_LABEL_MAP[operator] ?? operator;\n}\n\nexport const FIELD_TYPE_OPERATOR_MAP: Record<FieldType, relationalOperator[]> = {\n // Text-like: equality, fuzzy, empty checks\n text: ['eq', 'neq', 'in', 'nin', 'contains', 'not_contains', 'empty', 'not_empty'],\n password: ['eq', 'neq', 'contains', 'not_contains', 'empty', 'not_empty'],\n radiogroup: ['eq', 'neq', 'in', 'nin', 'empty', 'not_empty'],\n radio: ['eq', 'neq', 'empty', 'not_empty'],\n combo: ['eq', 'neq', 'in', 'nin', 'like', 'unlike', 'empty', 'not_empty'],\n sn: ['eq', 'neq', 'in', 'nin', 'contains', 'not_contains', 'empty', 'not_empty'],\n\n // Textarea: fuzzy matching\n textarea: ['eq', 'neq', 'contains', 'not_contains', 'empty', 'not_empty'],\n\n // Number: comparison operators\n number: ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'range', 'empty', 'not_empty'],\n\n // DateTime: comparison operators\n datetime: ['eq', 'neq', 'gte', 'lte', 'range', 'empty', 'not_empty'],\n\n // Multi-select: membership, intersection\n checkboxgroup: ['in', 'all', 'eq', 'empty', 'not_empty'],\n combocheck: ['in', 'all', 'eq', 'empty', 'not_empty'],\n\n // User/Dept: equality and membership\n user: ['eq', 'neq', 'in', 'nin', 'empty', 'not_empty'],\n dept: ['eq', 'neq', 'in', 'nin', 'empty', 'not_empty'],\n\n // Groups: membership, intersection, empty\n usergroup: ['in', 'all', 'eq', 'empty', 'not_empty'],\n deptgroup: ['in', 'all', 'eq', 'empty', 'not_empty'],\n\n // Address/Location: intersection\n address: ['in', 'nin', 'empty', 'not_empty'],\n location: ['in', 'nin', 'empty', 'not_empty'],\n\n // Files: empty checks\n upload: ['empty', 'not_empty'],\n image: ['empty', 'not_empty'],\n signature: ['empty', 'not_empty'],\n\n // Flow state\n flowState: ['eq', 'neq', 'empty'],\n flowstate: ['eq', 'neq', 'empty'],\n\n // Link data: combo-like\n linkdata: ['eq', 'neq', 'in', 'nin', 'like', 'unlike', 'empty', 'not_empty'],\n linkquery: ['eq', 'neq', 'in', 'nin', 'like', 'unlike', 'empty', 'not_empty'],\n dataload: ['eq', 'neq', 'in', 'nin', 'like', 'unlike', 'empty', 'not_empty'],\n\n // Formula\n formula: ['eq', 'neq', 'empty', 'not_empty'],\n\n // Display-only: no meaningful operators\n separator: [],\n button: [],\n subform: [],\n unknown: [],\n};\n\nconst DEFAULT_OPERATOR_MAP: Partial<Record<FieldType, relationalOperator>> = {\n text: 'eq',\n password: 'eq',\n radiogroup: 'eq',\n radio: 'eq',\n combo: 'eq',\n sn: 'eq',\n textarea: 'contains',\n number: 'range',\n datetime: 'range',\n checkboxgroup: 'all',\n combocheck: 'all',\n user: 'eq',\n dept: 'eq',\n usergroup: 'all',\n deptgroup: 'all',\n address: 'all',\n location: 'all',\n upload: 'not_empty',\n image: 'not_empty',\n signature: 'not_empty',\n flowState: 'eq',\n flowstate: 'eq',\n linkdata: 'eq',\n linkquery: 'eq',\n dataload: 'eq',\n formula: 'eq',\n};\n\nexport function getAvailableOperators(fieldType?: FieldType): relationalOperator[] {\n if (!fieldType) return [];\n return FIELD_TYPE_OPERATOR_MAP[fieldType] ?? [];\n}\n\nexport function getDefaultOperator(fieldType?: FieldType): relationalOperator {\n if (!fieldType) return 'eq';\n return DEFAULT_OPERATOR_MAP[fieldType] ?? 'eq';\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return isRecord(value) ? value : null;\n}\n\nfunction isEmpty(value: unknown): boolean {\n if (value === null || value === undefined) return true;\n if (value === '' || value === '{}') return true;\n if (Array.isArray(value) && value.length === 0) return true;\n return false;\n}\n\nfunction isEqual(a: unknown, b: unknown): boolean {\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n const sa = a.map(String).sort();\n const sb = b.map(String).sort();\n return sa.every((v, i) => v === sb[i]);\n }\n if (isRecord(a) && isRecord(b)) {\n const ka = Object.keys(a);\n const kb = Object.keys(b);\n if (ka.length !== kb.length) return false;\n return ka.every((k) => String(a[k]) === String(b[k]));\n }\n return String(a) === String(b);\n}\n\n/**\n * 提取日期值中的「天」部分(YYYY-MM-DD),用于日期字段判等。\n * 兼容:ISO 字符串(2026-09-14T00:00:00Z)、纯日期(2026-09-14)、\n * Date 对象、毫秒时间戳。无法识别为日期时返回 null。\n */\nfunction toDayKey(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n\n let s: string | null = null;\n if (value instanceof Date) {\n s = value.toISOString();\n } else if (typeof value === 'number' && Number.isFinite(value)) {\n // 时间戳按本地时区取日期,与控件展示的本地日期一致\n const d = new Date(value);\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n } else {\n s = String(value).trim();\n }\n\n const m = /^(\\d{4})-(\\d{1,2})-(\\d{1,2})/.exec(s);\n if (!m) return null;\n return `${m[1]}-${m[2].padStart(2, '0')}-${m[3].padStart(2, '0')}`;\n}\n\n/**\n * 日期字段判等:双方都能归一化为「天」则按同一天比较,否则回退字符串严格判等。\n * 场景:控件值 2026-09-14T00:00:00Z 与目标值 2026-09-14 应视为相等。\n */\nfunction dateEqual(formValue: unknown, condValue: unknown): boolean {\n const a = toDayKey(formValue);\n const b = toDayKey(condValue);\n if (a !== null && b !== null) return a === b;\n return isEqual(formValue, condValue);\n}\n\nfunction evaluateIn(formValue: unknown, condValue: unknown): boolean {\n if (isRecord(condValue)) {\n const fv = asRecord(formValue);\n if (!fv) return false;\n if (condValue.province !== undefined && String(fv.province) !== String(condValue.province))\n return false;\n if (condValue.city !== undefined && String(fv.city) !== String(condValue.city)) return false;\n if (condValue.district !== undefined && String(fv.district) !== String(condValue.district))\n return false;\n return true;\n }\n const cv = Array.isArray(condValue) ? condValue.map(String) : [];\n if (Array.isArray(formValue)) {\n return formValue.some((v) => cv.includes(String(v)));\n }\n return cv.includes(String(formValue));\n}\n\nfunction evaluateAll(formValue: unknown, condValue: unknown): boolean {\n const cv = Array.isArray(condValue) ? condValue.map(String) : [];\n if (cv.length === 0) return false;\n const fv = Array.isArray(formValue) ? formValue.map(String) : [];\n return cv.every((v) => fv.includes(v));\n}\n\nfunction evaluateRange(formValue: unknown, condValue: unknown): boolean {\n const range = asRecord(condValue);\n if (!range) return false;\n const fv = Number(formValue);\n if (isNaN(fv)) return false;\n if (range.min !== undefined && range.min !== null && fv < Number(range.min)) return false;\n if (range.max !== undefined && range.max !== null && fv > Number(range.max)) return false;\n return true;\n}\n\n// ── Item evaluator ─────────────────────────────────────────────────────────\n\nconst formValueFormatter = (originValue: unknown, fieldType: FieldType) => {\n if (fieldType === 'user') {\n return (originValue as { _id: string } | undefined)?._id;\n }\n\n return originValue;\n};\n\n/**\n * 子表单行内字段值的包装形态(提交事件载荷):{ data, widgetType }。\n * 编辑/查看/流程事件中子字段为拍平裸值,无需解包。\n */\nfunction isWrappedCellValue(value: unknown): value is { data: unknown } {\n return isRecord(value) && 'data' in value && 'widgetType' in value;\n}\n\n/** 从子表单数据行数组中提取指定子字段的各行值(自动解包包装形态) */\nfunction collectSubformCellValues(rows: unknown[], childWidgetName: string): unknown[] {\n const values: unknown[] = [];\n for (const row of rows) {\n if (!isRecord(row)) continue;\n if (childWidgetName in row) {\n const cell = row[childWidgetName];\n values.push(isWrappedCellValue(cell) ? cell.data : cell);\n }\n }\n return values;\n}\n\n/**\n * 解析条件字段在 formValues 中的候选值列表。\n *\n * formValues 顶层仅有主表字段,子表单字段的值嵌套在子表单字段值(数据行数组)中:\n * - widgetName 为 subWidget.childWidget 形式:定位到对应子表单逐行提取;\n * - 主表字段:直接取顶层值(单元素列表);\n * - 兜底:widgetName 未命中顶层时,在各子表单数据行中查找该子字段。\n *\n * 返回空列表表示字段无任何值(按 undefined 参与求值)。\n */\nfunction resolveConditionFormValues(widgetName: string, formValues: IFormValues): unknown[] {\n // 子表单内字段:widgetName 形如 subWidget.childWidget\n if (widgetName.includes('.')) {\n const [parentWidgetName, childWidgetName] = widgetName.split('.');\n const subformValue = formValues[parentWidgetName];\n if (!Array.isArray(subformValue)) return [];\n return collectSubformCellValues(subformValue, childWidgetName);\n }\n\n // 主表字段直接命中\n if (widgetName in formValues) {\n return [formValues[widgetName]];\n }\n\n // 兜底:字段为子表单内字段(条件中仅有子字段 widgetName)\n for (const value of Object.values(formValues)) {\n if (!Array.isArray(value)) continue;\n const cells = collectSubformCellValues(value, widgetName);\n if (cells.length > 0) return cells;\n }\n\n return [];\n}\n\n/** 对单个字段值执行条件求值 */\nfunction evaluateSingleValue(originFormValue: unknown, item: IConditionItem): boolean {\n const widgetType = item.field.widget?.type as FieldType;\n const formValue = formValueFormatter(originFormValue, widgetType);\n const { operator, value: condValue } = item;\n // 日期字段:判等(eq/neq)按「同一天」归一化比较\n const isDateField = widgetType === 'datetime';\n\n switch (operator) {\n case 'empty':\n return isEmpty(formValue);\n case 'not_empty':\n return !isEmpty(formValue);\n case 'eq':\n return isDateField ? dateEqual(formValue, condValue) : isEqual(formValue, condValue);\n case 'neq':\n return isDateField ? !dateEqual(formValue, condValue) : !isEqual(formValue, condValue);\n case 'contains':\n case 'like':\n return String(formValue).includes(String(condValue));\n case 'not_contains':\n case 'unlike':\n return !String(formValue).includes(String(condValue));\n case 'gt':\n return Number(formValue) > Number(condValue);\n case 'gte':\n return Number(formValue) >= Number(condValue);\n case 'lt':\n return Number(formValue) < Number(condValue);\n case 'lte':\n return Number(formValue) <= Number(condValue);\n case 'in':\n return evaluateIn(formValue, condValue);\n case 'nin':\n return !evaluateIn(formValue, condValue);\n case 'all':\n return evaluateAll(formValue, condValue);\n case 'range':\n return evaluateRange(formValue, condValue);\n default:\n return false;\n }\n}\n\nfunction evaluateConditionItem(item: IConditionItem, formValues: IFormValues): boolean {\n const widgetName = item.field.widget?.widgetName;\n if (!widgetName) return false;\n\n const candidates = resolveConditionFormValues(widgetName, formValues);\n\n // 字段无任何值(含子表单无数据行):按 undefined 求值,empty 成立、not_empty 不成立\n if (candidates.length === 0) {\n return evaluateSingleValue(undefined, item);\n }\n\n // 主表字段只有一个候选值,some 等价于直接求值;\n // 子表单字段为存在语义:任意一行的该子字段值满足条件即成立\n return candidates.some((value) => evaluateSingleValue(value, item));\n}\n\n/**\n * 计算助手表单编辑字段偏好是否满足\n */\nexport function isHelperPrefMet(helper: IAgentHelper, editFields?: string[]): boolean {\n // 编辑任意字段或编辑指定字段,都要求编辑过字段,如果编辑字段数组为空,不需要进一步判定,直接不满足编辑偏好\n if (!editFields || !editFields?.length) {\n return false;\n }\n\n const editPref = helper.formFieldEditPreference ?? 'edit_any_field';\n // 如果偏好是编辑任意字段,那么只需检查数组长度即可\n if (editPref === 'edit_any_field') {\n return !!editFields?.length;\n }\n\n // 检查编辑过的字段是否包含指定字段\n const dirtyFields = new Set(editFields);\n return editPref.fields.some((field) => dirtyFields.has(field?.widget?.widgetName));\n}\n\n// ── Public API ─────────────────────────────────────────────────────────────\n\nexport function isHelperCondMet(helper: IAgentHelper, formValues: IFormValues): boolean {\n if (!helper.enabled) {\n return false;\n }\n\n const condition = helper.triggerCondition;\n if (!condition) return true;\n\n const { items, quantifier } = condition;\n if (!items || items.length === 0) return true;\n\n const results = items.map((item) => evaluateConditionItem(item, formValues));\n\n return quantifier === 'any' ? results.some((r) => r) : results.every((r) => r);\n}\n\nexport const isCtxMatch = (helper: IAgentHelper | null, ctx: ICtxDetail | null): boolean => {\n if (helper === null) {\n return false;\n }\n\n if (ctx === null) {\n return false;\n }\n\n if (helper.formId) {\n return ctx.type === 'form' && ctx.params.formId === helper.formId;\n }\n\n if (helper.appId) {\n return (ctx.type === 'app' || ctx.type === 'form') && ctx.params.appId === helper.appId;\n }\n\n // 没有表单 id、应用 id 视为通用,即任意上下文可用\n\n return ctx.type === 'global' || ctx.type === 'app' || ctx.type === 'form';\n};\n\n// ── Operator ↔ Bsy method maps ──────────────────────────────────────────────\n\nconst OPERATOR_TO_BS_METHOD: Record<string, string> = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'gte',\n lt: 'lt',\n lte: 'lte',\n contains: 'like',\n not_contains: 'unlike',\n like: 'like',\n unlike: 'unlike',\n in: 'in',\n nin: 'nin',\n all: 'all',\n empty: 'empty',\n not_empty: 'not_empty',\n range: 'range',\n};\n\nconst BS_METHOD_TO_OPERATOR: Record<string, relationalOperator> = {\n eq: 'eq',\n ne: 'neq',\n gt: 'gt',\n gte: 'gte',\n lt: 'lt',\n lte: 'lte',\n like: 'like',\n unlike: 'unlike',\n contains: 'like',\n not_contains: 'unlike',\n in: 'in',\n nin: 'nin',\n all: 'all',\n empty: 'empty',\n not_empty: 'not_empty',\n range: 'range',\n};\n\n// ── Public serialization API ────────────────────────────────────────────────\n\nexport function conditionStringify2bsCondition(cond: ICondition): string {\n const rel = cond.quantifier === 'any' ? 'or' : 'and';\n const bsCondItems: IBsCondItem[] = cond.items.map((item) => {\n const method = OPERATOR_TO_BS_METHOD[item.operator] ?? 'eq';\n let value: unknown[];\n if (item.operator === 'range' && isRecord(item.value)) {\n value = [item.value.min, item.value.max];\n } else if (Array.isArray(item.value)) {\n value = item.value;\n } else {\n value = [item.value];\n }\n return {\n field: item.field?.widget?.widgetName ?? '',\n method,\n value,\n type: item.field?.widget?.type,\n };\n });\n return JSON.stringify({ rel, cond: bsCondItems });\n}\n\nexport function bsConditionParse2Condition(str: string): ICondition {\n const bsCond: IBsCondition = JSON.parse(str);\n const quantifier: ICondition['quantifier'] = bsCond.rel === 'or' ? 'any' : 'all';\n const items: IConditionItem[] = bsCond.cond.map((bsItem, index) => {\n const operator = BS_METHOD_TO_OPERATOR[bsItem.method] ?? 'eq';\n let value: unknown = bsItem.value;\n if (operator === 'range') {\n value = { min: bsItem.value[0], max: bsItem.value[1] };\n } else if (\n ['eq', 'neq', 'contains', 'not_contains', 'gt', 'gte', 'lt', 'lte'].includes(operator)\n ) {\n value = bsItem.value[0];\n }\n return {\n id: `${bsItem.field}_${index}`,\n field: {\n label: bsItem.field,\n widget: {\n widgetName: bsItem.field,\n type: (bsItem.type as FieldType) ?? 'unknown',\n value: undefined,\n },\n },\n operator,\n value,\n };\n });\n return { targetName: '', quantifier, items };\n}\n","export function formatLocalDate(date: Date) {\n const pad = (n: string | number) => String(n).padStart(2, '0');\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;\n}\n","export function mergeConsecutiveTargets<T>(\n arr: T[],\n isTarget: (item: T) => boolean,\n minWidth = 1\n): (T | T[])[] {\n // 存储最终结果\n const result: (T | T[])[] = [];\n // 临时收集连续的目标元素\n const temp: T[] = [];\n\n // 遍历原始数组\n for (const item of arr) {\n if (isTarget(item)) {\n // 是目标元素,加入临时数组\n temp.push(item);\n } else {\n // 不是目标元素:先处理临时数组(内联原辅助函数逻辑)\n if (temp.length > 0) {\n // 连续≥ minWidth 个目标元素 → 合并为子数组\n result.push(temp.length >= minWidth ? [...temp] : temp[0]);\n temp.length = 0; // 清空临时数组\n }\n // 将当前非目标元素加入结果\n result.push(item);\n }\n }\n\n // 处理遍历结束后剩余的临时数组(末尾可能全是目标元素)\n if (temp.length > 0) {\n result.push(temp.length >= 2 ? [...temp] : temp[0]);\n }\n\n return result;\n}\n\nexport function flatArr(arr: Array<unknown>): Array<unknown> {\n const result: Array<unknown> = [];\n for (const item of arr) {\n if (Array.isArray(item)) {\n // 递归展开子数组,并把展开后的元素合并到结果中\n result.push(...flatArr(item));\n } else {\n result.push(item);\n }\n }\n return result;\n}\n","/**\n * Mapping from icon font_class name to unicode hex string.\n * Generated from apps/web/public/iconfont.json\n */\nexport const ICON_UNICODE_MAP: Record<string, string> = {\n projectdevelopment: 'e914',\n resourcelibrary: 'e915',\n Plugin2: 'e90e',\n Plugin: 'e90f',\n JSON: 'e910',\n Dropdown: 'e911',\n Batchprocessing: 'e912',\n 'Image-text': 'e916',\n Newaddition: 'e917',\n reportforms: 'e918',\n AddFola: 'e919',\n delete: 'e91a',\n AddImage: 'e91b',\n Send: 'e91c',\n text: 'e91d',\n image: 'e91e',\n Star1: 'e91f',\n Ellipse: 'e920',\n 'Ellipse-Copy': 'e921',\n Shape: 'e922',\n 'Shape-Copy': 'e923',\n 'right-line': 'e924',\n 'right-arrow': 'e925',\n 'double-right-arrow': 'e926',\n ellipse: 'e927',\n Rectangle: 'e928',\n 'Rectangle-Copy': 'e929',\n 'Rectangle-Copy-2': 'e92a',\n CombinedShape: 'e92b',\n Line: 'e92c',\n time: 'e92d',\n calendar: 'e92e',\n richsinglelinetext: 'e92f',\n singlelinetext: 'e930',\n multilinetext: 'e931',\n number: 'e932',\n RichText: 'e933',\n image1: 'e934',\n Attachment: 'e935',\n Phone: 'e936',\n Email: 'e937',\n date: 'e938',\n 'Multiple-choice': 'e939',\n Checkbox: 'e93a',\n 'Drop-down': 'e93b',\n positioning: 'e93c',\n Description: 'e93d',\n AutoNumber: 'e93e',\n Address: 'e93f',\n Staff: 'e940',\n Department: 'e941',\n Switch: 'e942',\n Slider: 'e943',\n Currentdate: 'e944',\n Grade: 'e945',\n Barcode: 'e946',\n Subtable: 'e947',\n associatedtable: 'e948',\n Associatedapplication: 'e949',\n Referencefield: 'e94a',\n Uppercasing: 'e94b',\n nodata: 'e94c',\n 'X-mark': 'e94d',\n Copy: 'e94e',\n Correct: 'e94f',\n Save: 'e950',\n Printer: 'e951',\n search: 'e952',\n filter: 'e953',\n Export: 'e954',\n Import: 'e955',\n Customprint: 'e956',\n refresh: 'e957',\n Helpcenter: 'e958',\n Tutorial: 'e959',\n Release: 'e95a',\n more: 'e95b',\n Setup: 'e95c',\n sort: 'e95d',\n Back: 'e95e',\n show: 'e95f',\n hide: 'e960',\n Preview: 'e961',\n Click: 'e962',\n Allcheck: 'e963',\n Cancelcheck: 'e964',\n Likespot: 'e965',\n Favoritespot: 'e966',\n Followspot: 'e967',\n Commentspot: 'e968',\n At: 'e969',\n Pin: 'e96a',\n edit: 'e96b',\n Top: 'e96c',\n Movein: 'e96d',\n Moveout: 'e96e',\n Forward: 'e96f',\n Revoke: 'e970',\n Return: 'e971',\n Link: 'e972',\n Unlink: 'e973',\n Download: 'e974',\n Upload: 'e975',\n Download2: 'e976',\n Upload2: 'e977',\n Comment: 'e978',\n Remind: 'e979',\n Notice: 'e97a',\n Permission: 'e97b',\n SMS: 'e97c',\n QRcode: 'e97d',\n Website: 'e97e',\n Monitoring: 'e97f',\n Api: 'e980',\n Webhook: 'e981',\n Synchronous: 'e982',\n Automation: 'e983',\n Trigger: 'e984',\n Condition: 'e985',\n Success: 'e986',\n Failure: 'e987',\n countdown: 'e988',\n Waiting: 'e989',\n Flow: 'e98a',\n Connection: 'e98b',\n Dashboard: 'e98c',\n chart: 'e98d',\n Piechart: 'e98e',\n BarChart: 'e98f',\n DoubleBarChart: 'e991',\n StackedBarChart: 'e992',\n PercentageStackedBarChart: 'e993',\n LineChart: 'e994',\n areachart: 'e990',\n combinationchart: 'e995',\n Scatterplot: 'e996',\n FunnelChart: 'e997',\n wordcloud: 'e998',\n RadarChart: 'e999',\n PivotTable: 'e99a',\n NumberChart: 'e99b',\n map: 'e99c',\n Timeline: 'e99d',\n Album: 'e99e',\n Kanban: 'e99f',\n Ganttchart: 'e9a0',\n Circle: 'e9a8',\n linesurface: 'e9a1',\n IconStyle: 'e9a2',\n Backgroundcolor: 'e9a3',\n DeleteDe: 'e9a4',\n AlignLeft: 'e9a5',\n AlignCenter: 'e9a6',\n AlignRight: 'e9a7',\n Column: 'e9a9',\n Component: 'e9aa',\n Customcomponent: 'e9ab',\n Title: 'e9ac',\n RichText1: 'e9ad',\n Carousel: 'e9ae',\n PageTab: 'e9af',\n Buriedpoint: 'e9b0',\n Container: 'e9b1',\n QuickStart: 'e9b2',\n Group: 'e9b3',\n Ungroup: 'e9b4',\n Front: 'e9b5',\n Back1: 'e9b6',\n Lock: 'e9b7',\n Unlock: 'e9b8',\n Association: 'e9b9',\n CancelAssociation: 'e9ba',\n Quotation: 'e9bb',\n ViewSet: 'e9bc',\n AutoScale: 'e9bd',\n waterfall: 'e9be',\n watermark: 'e9bf',\n history: 'e9c0',\n Setting: 'e9c1',\n Draftbox: 'e9c2',\n SQL: 'e9c3',\n Workflow: 'e9c4',\n Workflow2: 'e9c5',\n Addone: 'e9c6',\n Formula: 'e9c7',\n Dictionary: 'e9c8',\n statistical: 'e9c9',\n Recycle: 'e9ca',\n Mistake: 'e9cb',\n Tag: 'e9cc',\n Pendingapproval: 'e9cd',\n MyApplication: 'e9ce',\n ApplicationApproval: 'e9cf',\n Initiatedbyme: 'e9d0',\n Copiedtome: 'e9d1',\n Approvalnode: 'e9d2',\n Fillnode: 'e9d3',\n cc: 'e9d4',\n Image1: 'e9d5',\n Open: 'e9d6',\n Color: 'e9d7',\n Right: 'e9d8',\n Backward: 'e9d9',\n dataanalysis: 'e9da',\n Filter2: 'e9db',\n Freefilter: 'e9dc',\n Conditionfilter: 'e9dd',\n Quickfilter: 'e9de',\n Export1: 'e9df',\n Attachmentpreview: 'e9e0',\n BulkEdit: 'e9e1',\n Calculationrows: 'e9e2',\n SingleSelect: 'e9e3',\n dataview: 'e9e4',\n Dataid: 'e9e5',\n Divide: 'e9e6',\n Progress: 'e9e7',\n Star: 'e9e8',\n Contacts: 'e9e9',\n Activity: 'e9ea',\n Minus: 'e9eb',\n Plussign: 'e9ec',\n 'Plussign-Copy': 'e9ed',\n Increased: 'e9ee',\n Decline: 'e9ef',\n indeterminate: 'e9f0',\n Decline1: 'e9f1',\n personal: 'e9f2',\n Warning: 'e9f3',\n Warning2: 'e9f4',\n Prompt: 'e9f5',\n info: 'e9f6',\n Cancel: 'e9f7',\n question1: 'e9f8',\n Question: 'e9f9',\n exclamation: 'e9fa',\n Warning1: 'e9fb',\n True: 'e9fc',\n Suspended: 'e9fd',\n Suspended1: 'e9fe',\n Suspended2: 'e9ff',\n Error: 'ea00',\n CombinedShape2: 'ea01',\n Delete1: 'ea02',\n Circle1: 'ea03',\n Decline2: 'ea04',\n Decline3: 'ea05',\n add: 'ea06',\n Addto: 'ea07',\n Reduce: 'ea08',\n Subtract: 'ea09',\n Addition: 'ea0a',\n Multiplication: 'ea0b',\n Division: 'ea0c',\n Bracket: 'ea0d',\n Reduce1: 'ea0e',\n Search: 'ea0f',\n Favorites: 'ea10',\n Annotation: 'ea11',\n Application: 'ea12',\n Application2: 'ea13',\n Applicationsview: 'ea14',\n Publish: 'ea15',\n Deploy: 'ea16',\n Sidetoplowerside: 'ea17',\n Narrow: 'ea18',\n Backtothenavigation: 'ea19',\n Forwardtothenavigation: 'ea1a',\n Return1: 'ea1b',\n Transfer: 'ea1c',\n Log: 'ea1d',\n table: 'ea1e',\n Form: 'ea1f',\n Openfield: 'ea20',\n Closefield: 'ea21',\n Receive: 'ea22',\n Fill: 'ea23',\n Fill1: 'ea24',\n fillet: 'ea25',\n rightangle: 'ea26',\n round: 'ea27',\n Send1: 'ea28',\n Map: 'ea29',\n Upward: 'ea2a',\n Move: 'ea2b',\n Downward: 'ea2c',\n drag: 'ea2d',\n TextIcon: 'ea2e',\n Narrow1: 'ea2f',\n Enlarge: 'ea30',\n Enlarge2: 'ea31',\n Cancel1: 'ea32',\n Retract: 'ea33',\n Expand: 'ea34',\n Retract1: 'ea35',\n Expand1: 'ea36',\n Retract2: 'ea37',\n Expand2: 'ea38',\n Switch1: 'ea39',\n Fullscreen: 'ea3a',\n Offscreen: 'ea3b',\n Notvisible: 'ea3c',\n Visible: 'ea3d',\n Adjust: 'ea3e',\n PC: 'ea3f',\n Mobile: 'ea40',\n Pad: 'ea41',\n Scanthecode: 'ea42',\n Scan: 'ea43',\n Screenshot: 'ea44',\n Rotation: 'ea45',\n voice: 'ea46',\n Video: 'ea47',\n Location: 'ea48',\n Clock: 'ea49',\n Print: 'ea4a',\n Member: 'ea4b',\n WorkWeChat: 'ea4c',\n DingTalk: 'ea4d',\n EnterpriseWeChat2: 'ea4e',\n Groupmanagement: 'ea4f',\n Feishu: 'ea50',\n Stationletter: 'ea51',\n Email1: 'ea52',\n WeChat: 'ea53',\n ServiceAccount: 'ea54',\n Subscribed: 'ea55',\n Dingtalk: 'ea56',\n Information: 'ea57',\n Assistant: 'ea58',\n ai: 'ea59',\n Inquireabout: 'ea5a',\n IFrame: 'ea5b',\n Integratio: 'ea5c',\n close: 'ea5d',\n Close: 'ea5e',\n Addgroup: 'ea5f',\n deletegroup: 'ea60',\n Relateddata: 'ea61',\n Enlarge1: 'ea62',\n Narrow2: 'ea63',\n 'map-search': 'ea64',\n Corner: 'ea65',\n text1: 'ea66',\n Onlinemap: 'ea67',\n Maptile: 'ea68',\n Dataexport: 'ea69',\n // 文件类型图标(码位对齐 baishu font-icon.less 的 icon-bsy-* 文件图标,\n // 渲染时需使用 icon-bsy-form 字体类,见 ai-design/font-icon.tsx 的 fontCls)\n 'bsy-ppt': 'e8c8',\n 'bsy-pptx': 'e8cf',\n 'bsy-doc': 'e8ca',\n 'bsy-docx': 'e8c7',\n 'bsy-xls': 'e8d0',\n 'bsy-xlsx': 'e8c5',\n 'bsy-zip': 'e8cb',\n 'bsy-rar': 'e8d3',\n 'bsy-csv': 'e8cc',\n 'bsy-txt': 'e8cd',\n 'bsy-pdf': 'e8ce',\n 'bsy-mp4': 'e8c6',\n 'bsy-webm': 'e8d1',\n 'bsy-ogg': 'e8d2',\n 'bsy-mov': 'e983',\n 'bsy-gif': 'e8fd',\n 'bsy-jpg': 'e8fe',\n 'bsy-jpeg': 'e8ff',\n 'bsy-png': 'e900',\n 'bsy-other': 'e8c9',\n richtext: 'ea73',\n Onlinemap1: 'ea74',\n Maptile1: 'ea75',\n Ai2: 'ea76',\n Guide: 'ea77',\n Button: 'ea78',\n Menus: 'ea79',\n 'richtext-Copy': 'ea7a',\n 'richtext-Copy-2': 'ea7b',\n 'richtext-Copy-3': 'ea7c',\n 'richtext-Copy-4': 'ea7d',\n Split: 'ea7e',\n AI: 'ea7f',\n Form1: 'ea80',\n Fields: 'ea81',\n Project: 'ea82',\n More1: 'ea83',\n Notstarted: 'ea84',\n Inprocess: 'ea85',\n Completed: 'ea86',\n Completed1: 'ea87',\n More2: 'ea88',\n AIoffice: 'ea89',\n statistics: 'ea8a',\n Expand3: 'ea8b',\n list: 'ea8c',\n 'list-Copy': 'ea8d',\n Grid: 'ea8e',\n Calendar: 'ea8f',\n Schedule: 'ea90',\n tableview: 'ea91',\n Gallery: 'ea92',\n Copy1: 'ea93',\n Mailbox: 'ea94',\n Automation1: 'ea95',\n Avatar: 'ea96',\n};\n\n/**\n * Look up the unicode hex string for an icon by its font_class name.\n * Returns undefined if the icon name is not found.\n *\n * @param name - The icon font_class name (e.g. \"search\", \"edit\", \"ai\")\n * @returns The unicode hex string (e.g. \"e952\"), or undefined\n *\n * @example\n * getIconUnicode(\"search\") // \"e952\"\n * getIconUnicode(\"ai\") // \"ea59\"\n */\nexport function getIconUnicode(name: string): string | undefined {\n const code = ICON_UNICODE_MAP[name];\n return code ? `&#x${code};` : undefined;\n}\n\n/**\n * 数字表单图标(icon-bsy-form-N / icon-new-bsy-form-N)→ unicode 码位。\n * 与 PC aiOffice/const 的 .icon-bsy-form-N:before content 对齐。\n * 用于「文本内码」渲染(把 unicode 字符直接放进元素文本 + finex 字体),\n * 规避部分环境(shadow DOM / WebView):before content 无法生成的问题。\n */\nexport const FORM_ICON_UNICODE_MAP: Record<number, string> = {0: 'e7b5', 1: 'e7c7', 2: 'e7b3', 3: 'e7c9', 4: 'e7bc', 5: 'e7be', 6: 'e7b8', 7: 'e7c8', 8: 'e7c1', 9: 'e7bb', 10: 'e7ca', 11: 'e7c4', 12: 'e7b4', 13: 'e7ba', 14: 'e7b6', 15: 'e7c5', 16: 'e7bf', 17: 'e7c3', 18: 'e7c2', 19: 'e7c6', 20: 'e7bd', 21: 'e7c0', 22: 'e7cb', 23: 'e7b7', 24: 'e7b9', 25: 'e814', 26: 'e81d', 27: 'e81c', 28: 'e81a', 29: 'e813', 30: 'e81b', 31: 'e818', 32: 'e819', 33: 'e817', 34: 'e816', 35: 'e810', 36: 'e815', 37: 'e812', 38: 'e811', 39: 'e80e', 40: 'e80f', 41: 'e80d', 42: 'e807', 43: 'e80b', 44: 'e80a', 45: 'e81d', 46: 'e809', 47: 'e808', 48: 'e805', 49: 'e7ff', 50: 'e803', 51: 'e806', 52: 'e802', 53: 'e800', 54: 'e804', 55: 'e801', 56: 'e7fe', 57: 'e7fc', 58: 'e7fd', 59: 'e7fb', 60: 'e7fa'};\n","import { IField, IValueFormHuman } from '@baishuyun/types';\nimport { flatArr } from './array';\n\n// input eg: '${_widget_1782471976291} ${_widget_1782471978145} ahahah'\n// output: '供应商名称 备注 ahahah'\nexport const promptParser = (\n originStrWithFieldNameTpl: string,\n formStructure: Array<IField>,\n widgetValueGetter: (name: string, isVirtual?: boolean) => IValueFormHuman\n): IValueFormHuman => {\n if (!widgetValueGetter) {\n return {\n translated: '',\n };\n }\n\n const widgetMap = new Map(formStructure.map((f) => [f.widget.widgetName, f.label]));\n\n for (const field of formStructure) {\n if (field.widget.type === 'subform' && field.widget.items) {\n for (const item of field.widget.items) {\n if ('widget' in item && !('options' in item)) {\n const key = `${field.widget.widgetName}.${item.widget.widgetName}`;\n widgetMap.set(key, item.label);\n }\n }\n }\n }\n\n const metaPart: Array<unknown> = [];\n\n const stringPart = originStrWithFieldNameTpl.replace(\n /\\$\\{(virtual\\.)?(_widget_\\d+(?:\\._widget_\\d+)?)\\}/g,\n (_, virtualPrefix, widgetName) => {\n const isVirtual = !!virtualPrefix;\n const { translated, meta } = widgetValueGetter(widgetName, isVirtual);\n\n if (meta) {\n metaPart.push(meta);\n }\n\n return translated;\n }\n );\n\n return {\n meta: metaPart.length ? flatArr(metaPart) : null,\n translated: (stringPart ?? '').trim(),\n };\n};\n","const REG_EX_MAP: Record<string, string> = {\n 手机号码: \"^((\\\\(\\\\d{2,3}\\\\))|(\\\\d{3}\\\\-))?1\\\\d{10}$\",\n 电话号码: \"^(0[0-9]{2,3}\\\\-)?([2-9][0-9]{6,7})+(\\\\-[0-9]{1,4})?$\",\n 邮政编码: \"^\\\\d{6}$\",\n 身份证号码: \"(^\\\\d{15}$)|(^\\\\d{18}$)|(^\\\\d{17}(\\\\d|X|x)$)\",\n 邮箱: \"^([a-zA-Z0-9_\\\\.\\\\-])+\\\\@(([a-zA-Z0-9\\\\-])+\\\\.)+([a-zA-Z0-9]{2,4})+$\",\n 时分: \"(^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}$)\",\n 时分秒:\n \"(^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$)\",\n 图片链接: \"imageurl\",\n 二维码图片: \"qrcode\",\n 条形码图片: \"barcode\",\n 自定义: \"custom\",\n};\n\nexport const rebuildText = (truncatedJson: unknown) => {\n const { widget, labelStyle, label, ...rest } = (truncatedJson as any) || {};\n\n const regex = REG_EX_MAP[labelStyle] || \"\";\n return {\n widget: {\n widgetName: `_widget_${Date.now()}`,\n widgetNameAlias: \"\",\n // triggerEvent: 0,\n customCls: null,\n height: 34,\n width: 350,\n text: null,\n value: \"\", //默认值 没有默认值的话 整个value不存在\n enable: true,\n visible: true,\n // hint: placeholder,\n allowBlank: true,\n rely: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n // regex, //格式 ^((\\(\\d{2,3}\\))|(\\d{3}\\-))?1\\d{10}$ 手机号码 ^(0[0-9]{2,3}\\-)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?$ 电话号码 ^\\d{6}$ 邮政编码 (^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$) 身份证号码 ^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$ 邮箱 (^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}$) 时分 (^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$) 时分秒 imageurl 图片链接 qrcode 二维码图片 barcode 条形码图片 custom 自定义\n noRepeat: true,\n scan: null,\n // textMode,\n generateQR: false,\n eventAlert: true,\n alertinfo: {\n icon: \"error\",\n // tip: placeholder,\n // msg: placeholder,\n },\n enterClearText: true,\n ...widget,\n regex,\n type: \"text\",\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","export const buildWidgetName: (prefix?: string, index?: number) => string = (\n prefix: string = \"_widget\",\n index?: number,\n) => {\n const baseName = `${prefix}_${Date.now()}`;\n\n if (index === undefined) {\n return baseName;\n }\n\n const idxLength = index.toString().length;\n const slicedBaseName = baseName.slice(0, -idxLength);\n\n return `${slicedBaseName}${index}`;\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildNumber = (value: unknown): unknown => {\n const { widget, label, ...rest } = (value as any) || {};\n return {\n widget: {\n type: \"number\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n triggerEvent: false,\n customCls: null,\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n // regex,\n // hint: placeholder,\n noRepeat: false,\n alertinfo: {\n icon: \"success\",\n tip: \"请设置提示内容\",\n },\n allowDecimals: true, //允许小数,默认值 true,已废弃\n allowNegative: true, //允许负数,默认值 true ,已废弃\n // maxNumber: max, //限定数值范围 最大值\n // minNumber: min, //限定数值范围 最小值\n displayMode: \"percent\", // 新的格式, percent 百分比 number 数值\n precision: null, //保留小数位数\n thousandsSeparator: false, //显示千分符\n notround: true, //不四舍五入\n format: \"\", //旧的格式,新的由多个属性来控制,前端代码会用其他几个参数拼接出正确的这个值。 其中结尾有% 代表百分比 ,没有%代表数字 ,然后小数点后面的0的个数代表 保留的小数位数,如果小数点后面没有0代表(如0.%),代表没有设置 保留小数位数,保留用户输入的所有小数\n afterSuffix: {\n //单位\n zh_cn: \"\", //中文的\n en_us: \"\", //英文的\n zh_tw: \"\", //繁体的\n },\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","export const rebuildSelect = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"combo\",\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n mode: 1,\n allowAddLinkData: false,\n // items: options,\n widgetName: `_widget_${Date.now()}`,\n widgetNameAlias: \"\",\n customCls: null,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n colorEnable: true, //颜色 是否开启颜色\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","export const rebuildRadioGroup = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n // items: options,\n layout: \"vertical\",\n stopCancel: false,\n widgetName: `_widget_${Date.now()}`,\n widgetNameAlias: \"\",\n customCls: null,\n value: null,\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n colorEnable: true, //颜色 是否开启颜色\n ...widget,\n type: \"radiogroup\",\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n labelStyle: label,\n };\n};\n","export const rebuildDatetime = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n type: \"datetime\",\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n widgetName: `_widget_${Date.now()}`,\n\n widgetNameAlias: \"\",\n customCls: null,\n value: \"today\", //默认值, today 填写当前时间 ,如果是数字,如 1762957800000 ,是自定义的时间,为所选时间的时间戳的毫秒级,\n rely: null,\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n hint: \"\",\n dateLimit: {\n //日期范围\n week: {\n //可选择星期\n enable: false, //是否开启可选择星期\n value: [\n //星期 星期一到天,用1-7代表\n 1, 2, 6,\n ],\n },\n start: {\n //最早可选时间\n enable: false, //是否开启最早可选时间\n mode: \"dynamic\", //模式: dynamic 动态 static 固定值 fieldValue 字段值\n value: \"yesterday\", //限定的值: today 今天 yesterday 昨天 tomorrow 明天 7day_before 七天前 7day_after 七天后 30day_before 30天前 30day_after 30天后\n },\n end: {\n //最晚可选时间\n enable: false, //是否开启最晚可选时间\n mode: \"static\", //模式: dynamic 动态 static 固定值 fieldValue 字段值\n value: 1762093800000, //限定的值:这种数字的为 选择的固定值,时间的时间戳,毫秒级别 ,如果为 _widget_1762154537014 这种,为字段的值,这个字段需要也是日期字段,和当前这个字段是同一个 format的\n },\n },\n\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","export const defaultBuilder = (truncatedJson: unknown) => {\n return truncatedJson;\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildDeptGroup = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n type: \"deptgroup\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: \"34\",\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n limit: {},\n valueOption: 0,\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildSn = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: 'sn',\n widgetName: buildWidgetName(),\n widgetNameAlias: '',\n triggerEvent: 0,\n customCls: null,\n width: 350,\n enable: true,\n visible: true,\n // rules: rules,\n importMode: 1, //导入模式 1 excel末尾递增 2 excel最大值递增 3 excel/表单最大值比较递增\n ...widget,\n rules: [\n {\n chars: 'sn-',\n type: 'fixedChars',\n },\n {\n digitsNum: 5,\n fixedLength: true,\n resetDuration: 'none',\n startValue: 1,\n type: 'incNumber',\n },\n ],\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildDept = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"dept\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: \"34\",\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n limit: {},\n valueOption: 0,\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildUserGroup = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"usergroup\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: \"34\",\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n limit: {},\n limitWidget: null, //可选范围 由部门字段确定,如果有值 是 _widget_1762226067008 这种,另一个部门字段的id。和limit互斥,limit将为[]\n valueOption: 0,\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildDataLinker = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n rely: {\n widgets: [],\n },\n linkFilter: {},\n allowAdd: true, //允许新增关联表数据\n refType: \"form\", //关联表的类型,只能是form\n ...widget,\n linkFields: [],\n labelStyle: label,\n type: \"linkdata\",\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nconst tmpMapFields2Fields = (mapFieldsFromTruncatedJson: unknown[]) => {\n if (!mapFieldsFromTruncatedJson || !mapFieldsFromTruncatedJson.length) {\n return mapFieldsFromTruncatedJson;\n }\n\n return mapFieldsFromTruncatedJson.map((mf: any, index: number) => {\n return {\n id: index,\n\n // name: \"_widget_1761976674767\",\n // form: \"a2f34ef882158a3e97da4ef7\",\n // tag: buildWidgetName(\"f_\", index),\n\n title: mf.field,\n text: mf.field,\n icon: `icon-widget-${mf.type}`,\n type: mf.type,\n isEditable: true,\n group: \"dimension,filter,select\",\n formula: \"\",\n };\n });\n};\n\nconst tmpMapFields2MapFields = (mapFieldsFromTruncatedJson: unknown[]) => {\n if (!mapFieldsFromTruncatedJson || !mapFieldsFromTruncatedJson.length) {\n return mapFieldsFromTruncatedJson;\n }\n\n return mapFieldsFromTruncatedJson.map((mf: any) => {\n return {\n mode: \"depend\",\n ...mf,\n };\n });\n};\n\nexport const rebuildDataLoader = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"dataload\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n width: 350,\n text: label,\n enable: true,\n visible: true,\n allowBlank: true,\n allowAddData: true, // 允许新增数据源数据\n ...widget,\n mode: \"list\", //一直是 list 应该是废弃的\n loaddataconfig: {\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n },\n dataloadmode: [\"add\", \"cover\"],\n filter: {\n cond: [],\n rel: \"and\",\n },\n defaultSort: [],\n treeFields: {},\n mode: \"list\",\n selectFields: [],\n triggerControl: null,\n triggerWidget: null,\n triggerFieldMode: \"none\",\n triggerField: null,\n forms: widget?.loaddataconfig?.forms,\n selectArg: [],\n selectRel: \"and\",\n fields: tmpMapFields2Fields(widget?.loaddataconfig?.mapFields),\n mapFields: tmpMapFields2MapFields(widget?.loaddataconfig?.mapFields),\n },\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildUser = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"user\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: \"34\",\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n limit: {},\n limitWidget: null, //可选范围 由部门字段确定,如果有值 是 _widget_1762226067008 这种,另一个部门字段的id。和limit互斥,limit将为[]\n valueOption: 0,\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildSignature = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"signature\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n rely: null,\n ...widget,\n labelStyle: label,\n },\n description: null,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildImage = (truncatedJson: unknown) => {\n const { widget, label, ...rest }: any = (truncatedJson as any) || {};\n\n return {\n widget: {\n type: \"image\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: 100,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n download: true, //打包下载\n is_file_down: true, //操作权限 可下载\n check_image_exif: true, //照片支持查看EXIF扩展信息\n online_edit: false,\n online_edit_record: false,\n fileType: [\n //支持上传的类型,默认,不可以设置\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"gif\",\n \"bmp\",\n \"tif\",\n ],\n compressed: true, //三方图片压缩\n wxOriginalComponent: true, //微信/企业微信原生拍照模式\n onlyCamera: false, //仅允许拍照上传\n preview: true, //是否可以预览 默认 不可以设置\n watermarkSwitch: true, //水印属性\n watermarkPosition: \"center\", //水印位置\n watermarkFieldTitle: true, //是否显示水印字段标题\n watermarkSize: \"14\", //水印字体大小 不可以设置\n watermarkFixedField: {},\n previewWidth: 450, //预览的宽 默认 不可以设置\n previewHeight: 450, //预览的高 默认 不可以设置\n browserCompress: true, //浏览器图片压缩\n quality: 0.7, //压缩图片比例,开启 浏览器图片压缩 后才能设置\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildUploader = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"upload\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n maxFileCount: 50, //允许多文件上传 1为不可以 50为可以\n download: true, //打包下载\n is_file_down: true, //操作权限 可下载\n check_image_exif: true, //照片支持查看EXIF扩展信息\n online_edit: true, //允许文档在线编辑\n online_edit_record: true, //是否查看协作记录\n fileSizeLimit: 10485760, //设置单个文件大小上限,单位是字节,范围 1M-20M\n // fileType,\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildCheckboxGroup = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"checkboxgroup\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n colorEnable: true, //颜色 是否开启颜色\n layout: \"vertical\",\n allowAddOptions: false, //允许成员填写时添加新选项\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildLine = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"separator\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 12,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildComboChecker = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"combocheck\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n colorEnable: true, //颜色 是否开启颜色\n mode: \"\",\n allowAddOptions: false, //允许成员填写时添加新选项\n allowAddLinkData: false,\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildLocation = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n type: \"location\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n adjustable: true, //允许移动端微调\n lnglatVisible: true, //显示经纬度坐标\n autoLocation: true, //移动端自动触发定位\n enablePcLocation: true, //允许PC端定位并选择位置\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildTextarea = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"textarea\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n triggerEvent: false,\n customCls: null,\n height: 140,\n width: 734,\n value: \"\",\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n alertinfo: {\n icon: \"success\",\n tip: \"请设置提示内容\",\n },\n autoHeight: true, //根据内容自适应高度\n maxLength: 5000, //限制输入最大字符数 不限制的话,整个maxLength不存在\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildButton = (truncatedJson: unknown = {}) => {\n const { widget, label, ...rest } = truncatedJson as any;\n\n return {\n widget: {\n type: \"button\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n triggerEvent: 0,\n customCls: null,\n height: 36,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: false,\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n funMode: \"popupreport\",\n },\n background: {\n //颜色\n mode: \"color\",\n position: \"center\",\n },\n mode: \"all\", //模式 all 扩展 popupreport 弹出报表 popupform 弹出表单 print 页面打印 popuppage 弹出外部网页\n theme: \"default\", //风格 default 默认,有边框有底色 style1 有边框无底色 none 无边框无底色\n eventAlert: false, //是否显示提醒框\n alertinfo: {\n icon: \"success\",\n tip: \"请设置提示内容\",\n },\n\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildAddress = (truncatedJson: unknown = {}) => {\n const { widget, label, ...rest } = truncatedJson as any;\n\n return {\n widget: {\n type: \"address\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n width: 720,\n enable: true,\n visible: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n needDetail: true,\n eventMode: 1, //公式联动触发模式 1 默认,省市县/详细地址内容改变都触发 2 只有省市县改变才触发 3 只有详细地址改变才触发\n seleceMapAddress: true, //开启经纬度定位\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { rebuildFieldsJsonStructure } from \".\";\nimport { buildWidgetName } from './build-widget-name';\n\nexport const rebuildSubform = (originObj: unknown = {}) => {\n const { widget, label, ...rest } = originObj as any;\n return {\n widget: {\n type: \"subform\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n labelStyle: label,\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n items: (widget.items || []).map((item: any, index: number) => {\n const result = rebuildFieldsJsonStructure(item, true);\n\n result.widget.widgetName = buildWidgetName(\"_widget\", index);\n\n return result;\n }),\n sortable: true, //启用子表单数据排序\n allowImportV2: false, //从excel导入数据\n sticky_column: {\n //PC端冻结前 n 列\n limit: 2, //多少列 范围 1-3\n enable: true, //是否开启\n },\n sticky_column_mobile: {\n //移动端冻结前 n 列\n limit: 1, //多少列 范围 1-3\n enable: true, //是否开启\n },\n mobileStyle: \"table\", //移动端显示样式 list 纵向展开 table 横向表格\n subform_create: true, //可新增记录\n subform_insert: true, //可插入记录\n subform_edit: true, //可编辑已有记录\n subform_delete: true, //可删除已有记录\n subform_fill: true, //允许填报数据\n subform_import: true, //允许导入数据\n subform_dataload: true, //允许数据加载\n loaddataconfig: {\n //数据加载设置\n mode: \"tree\",\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n },\n },\n allowLoadData: false, //是否开启数据加载\n allowAddData: true, //允许新增数据源数据\n subformloaddataTitle: \"数据加载\", //数据加载显示的标题\n subFieldShowRules: [], //子字段显隐规则\n quick_fill: true, //从excel填报数据\n },\n description: null,\n label,\n lineWidth: 12,\n tab: null,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildDataQuery = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n linkFilter: {},\n rely: {\n widgets: [],\n },\n showMode: \"one\", //显示数据条数 one 一条 many 多条\n allowAdd: true, //允许新增关联表数据,只有 refType 为 form才可以选择true\n refType: \"form\", //关联表的类型,根据 linkForm 表的类型决定的。 form 表单 etl_table 视图 aggregate_table 聚合表\n showType: \"none\", //数据显示模式 none 默认 label 标题\n addExtendSet: [],\n ...widget,\n linkFields: [],\n labelStyle: label,\n type: \"linkquery\",\n },\n description: null,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { IField, type FieldType } from '@baishuyun/types';\nimport { rebuildText } from './rebuild-text';\nimport { rebuildNumber } from './rebuild-number';\nimport { rebuildSelect } from './rebuild-select';\nimport { rebuildRadioGroup } from './rebuild-radio-group';\nimport { rebuildDatetime } from './rebuild-date-time';\nimport { defaultBuilder } from './default-builder';\nimport { rebuildDeptGroup } from './rebuild-dept-group';\nimport { rebuildSn } from './rebuild-sn';\nimport { rebuildDept } from './rebuild-dept';\nimport { rebuildUserGroup } from './rebuild-user-group';\nimport { rebuildDataLinker } from './rebuild-data-linker';\nimport { rebuildDataLoader } from './rebuild-data-loader';\nimport { rebuildUser } from './rebuild-user';\nimport { rebuildSignature } from './rebuild-signature';\nimport { rebuildImage } from './rebuild-image';\nimport { rebuildUploader } from './rebuild-upload';\nimport { rebuildCheckboxGroup } from './rebuild-checkbox-group';\nimport { rebuildLine } from './rebuild-line';\nimport { rebuildComboChecker } from './rebuild-combo-checker';\nimport { rebuildLocation } from './rebuild-location';\nimport { rebuildTextarea } from './rebuild-textarea';\nimport { rebuildButton } from './rebuild-button';\nimport { rebuildAddress } from './rebuild-address';\nimport { rebuildSubform } from './rebuild-subform';\nimport { rebuildDataQuery } from './rebuild-data-query';\nimport { generateWidgetName } from '../field-json';\n\n/**\n * 字段类型重建工具映射\n */\nconst RebuilderMap: Record<FieldType, (origin: unknown) => unknown> = {\n address: rebuildAddress,\n button: rebuildButton,\n textarea: rebuildTextarea,\n datetime: rebuildDatetime,\n text: rebuildText,\n password: rebuildText,\n location: rebuildLocation,\n radiogroup: rebuildRadioGroup,\n radio: rebuildRadioGroup,\n combo: rebuildSelect,\n combocheck: rebuildComboChecker,\n separator: rebuildLine,\n checkboxgroup: rebuildCheckboxGroup,\n upload: rebuildUploader,\n number: rebuildNumber,\n image: rebuildImage,\n signature: rebuildSignature,\n user: rebuildUser,\n dataload: rebuildDataLoader,\n linkdata: rebuildDataLinker,\n linkquery: rebuildDataQuery,\n usergroup: rebuildUserGroup,\n subform: rebuildSubform,\n dept: rebuildDept,\n sn: rebuildSn,\n deptgroup: rebuildDeptGroup,\n flowState: defaultBuilder,\n flowstate: defaultBuilder,\n formula: defaultBuilder,\n unknown: defaultBuilder,\n};\n\n/**\n * 补全字段表示的 json 结构\n */\nexport const rebuildFieldsJsonStructure = (\n truncatedJson: Partial<IField>,\n subItemsOnly = false\n) => {\n // 校验基础结构\n if (!truncatedJson || !truncatedJson.widget || !truncatedJson.widget.type) {\n return truncatedJson;\n }\n\n // 根据字段类型选择对应的重建器\n const fieldType = (truncatedJson.widget.type as FieldType) || 'unknown';\n\n // 防止子表单内出现子表单字段,导致无限递归\n if (subItemsOnly && fieldType === 'subform') {\n return defaultBuilder(truncatedJson);\n }\n\n // 名称校验\n const isValidWidgetName = (truncatedJson?.widget?.widgetName ?? '').startsWith('_widget_');\n if (!isValidWidgetName) {\n // truncatedJson.widget.widgetName = `_widget_${Date.now()}`;\n truncatedJson.widget.widgetName = generateWidgetName();\n }\n\n const rebuilder = RebuilderMap[fieldType] || defaultBuilder;\n\n // 执行重建\n return rebuilder(truncatedJson);\n};\n","import { IChatCtx, IMcpCtx } from '@baishuyun/types';\n\nexport const getChatCtxForHuman = (ctx: IChatCtx) => {\n if (!ctx) {\n return '';\n }\n\n if (!ctx.corp?.name) {\n return '';\n }\n\n if (!ctx.user?.nickname) {\n return '';\n }\n\n return `${ctx.corp?.name} ${ctx.user?.nickname}(${ctx.user?.username}) ${ctx.appName ?? ''} ${ctx.entryName ?? ''} ${ctx.agentName ?? ''}`;\n};\n\nexport const getChatCtxForMcp = (ctx: IChatCtx) => {\n if (!ctx) {\n return '';\n }\n\n const mcpCtx: IMcpCtx = {\n corpId: ctx.corp?.id,\n userId: ctx.user._id,\n\n appName: ctx.appName,\n appId: ctx.appId,\n\n entryName: ctx.entryName,\n entryId: ctx.entryId,\n\n agentName: ctx.agentName,\n };\n\n try {\n return JSON.stringify(mcpCtx);\n } catch (e) {\n console.warn('getChatCtxForMcp error', e);\n return '';\n }\n};\n"],"names":["extractTextPartMeta","part","payload","e","IsErrorPart","IsFakeMsgPart","IsFilePart","IsQueryResultPart","GetQueryResult","result","IsFileGroupPart","p","IsLoadingPart","GetLoadingMsg","GetPartErrMsg","getMetaErrorMsg","STYLE_INJECTED_ATTR","HOST_CLONE_LAYER","wrapHostStyleText","cssText","sheet","imports","hoisted","segments","plainBuffer","flushPlain","rule","injectHostStylesIntoShadow","shadowRoot","hostElement","importLines","styleTexts","collect","el","layerImport","node","styleEl","MANAGED_STYLE","watchers","rebaseUrls","css","base","match","double","single","bare","_a","url","hostSelector","selector","serializeRules","rules","styleRule","body","snapshotStyles","root","_b","doc","snapshots","computed","properties","vars","name","media","nonce","watchStyles","existing","queued","listeners","refresh","next","s","i","listener","schedule","observer","records","record","target","timer","watcher","syncHostStylesIntoShadow","host","sources","parent","entries","marker","nodes","sync","all","entry","mount","classes","active","snapshot","source","previous","tag","link","unsubscribe","contentObserver","dispose","FONT_FACES_ATTR","CSS_FONT_FACE_RULE","injectHostFontFacesIntoShadow","fontFaces","style","isStringArray","value","item","isOptionArray","valueNormalizer","WHITE_LIST_FIELDS_SET","GetSafeFormStructure","formStructure","f","createPartTypeChecker","type","createPayloadTypeChecker","specialPayload","createGetFieldJsonInfo","createFieldPartsExtractor","isTarget","safeParseJson","jsonString","isAttachmentRecord","hasValidFieldValue","field","generateWidgetName","prefix","now","timeStr","totalLen","fixedPart","randomPart","field2config","autoService","checked","instance","parentFieldName","rowIndex","detail","DATA_COUNT_PER_BATCH","imageUrlToBase64","mediaType","resolve","img","canvas","OPERATOR_LABEL_MAP","FIELD_TYPE_OPERATOR_LABEL_OVERRIDES","getOperatorLabel","operator","fieldType","overrides","FIELD_TYPE_OPERATOR_MAP","DEFAULT_OPERATOR_MAP","getAvailableOperators","getDefaultOperator","isRecord","asRecord","isEmpty","isEqual","a","b","sa","sb","v","ka","kb","k","toDayKey","d","y","m","day","dateEqual","formValue","condValue","evaluateIn","fv","cv","evaluateAll","evaluateRange","range","formValueFormatter","originValue","isWrappedCellValue","collectSubformCellValues","rows","childWidgetName","values","row","cell","resolveConditionFormValues","widgetName","formValues","parentWidgetName","subformValue","cells","evaluateSingleValue","originFormValue","widgetType","isDateField","evaluateConditionItem","candidates","isHelperPrefMet","helper","editFields","editPref","dirtyFields","isHelperCondMet","condition","items","quantifier","results","r","isCtxMatch","ctx","OPERATOR_TO_BS_METHOD","BS_METHOD_TO_OPERATOR","conditionStringify2bsCondition","cond","rel","bsCondItems","_c","_d","_e","_f","method","bsConditionParse2Condition","str","bsCond","bsItem","index","formatLocalDate","date","pad","mergeConsecutiveTargets","arr","minWidth","temp","flatArr","ICON_UNICODE_MAP","getIconUnicode","code","FORM_ICON_UNICODE_MAP","promptParser","originStrWithFieldNameTpl","widgetValueGetter","widgetMap","key","metaPart","stringPart","_","virtualPrefix","isVirtual","translated","meta","REG_EX_MAP","rebuildText","truncatedJson","widget","labelStyle","label","rest","regex","buildWidgetName","baseName","idxLength","rebuildNumber","rebuildSelect","rebuildRadioGroup","rebuildDatetime","defaultBuilder","rebuildDeptGroup","rebuildSn","rebuildDept","rebuildUserGroup","rebuildDataLinker","tmpMapFields2Fields","mapFieldsFromTruncatedJson","mf","tmpMapFields2MapFields","rebuildDataLoader","rebuildUser","rebuildSignature","rebuildImage","rebuildUploader","rebuildCheckboxGroup","rebuildLine","rebuildComboChecker","rebuildLocation","rebuildTextarea","rebuildButton","rebuildAddress","rebuildSubform","originObj","rebuildFieldsJsonStructure","rebuildDataQuery","RebuilderMap","subItemsOnly","getChatCtxForHuman","_g","_h","getChatCtxForMcp","mcpCtx"],"mappings":"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"}
1
+ {"version":3,"file":"ai-feat-utils.js","sources":["../src/text-part.ts","../src/part.ts","../src/dom.ts","../src/shadow-styles.ts","../src/value-normalizer.ts","../src/batch-subform.ts","../src/form-structure.ts","../src/field-json.ts","../src/constants.ts","../src/attachment.ts","../src/condition.ts","../src/date.ts","../src/array.ts","../src/iconfont.ts","../src/prompt-parser.ts","../src/fields-json-rebuild/rebuild-text.ts","../src/fields-json-rebuild/build-widget-name.ts","../src/fields-json-rebuild/rebuild-number.ts","../src/fields-json-rebuild/rebuild-select.ts","../src/fields-json-rebuild/rebuild-radio-group.ts","../src/fields-json-rebuild/rebuild-date-time.ts","../src/fields-json-rebuild/default-builder.ts","../src/fields-json-rebuild/rebuild-dept-group.ts","../src/fields-json-rebuild/rebuild-sn.ts","../src/fields-json-rebuild/rebuild-dept.ts","../src/fields-json-rebuild/rebuild-user-group.ts","../src/fields-json-rebuild/rebuild-data-linker.ts","../src/fields-json-rebuild/rebuild-data-loader.ts","../src/fields-json-rebuild/rebuild-user.ts","../src/fields-json-rebuild/rebuild-signature.ts","../src/fields-json-rebuild/rebuild-image.ts","../src/fields-json-rebuild/rebuild-upload.ts","../src/fields-json-rebuild/rebuild-checkbox-group.ts","../src/fields-json-rebuild/rebuild-line.ts","../src/fields-json-rebuild/rebuild-combo-checker.ts","../src/fields-json-rebuild/rebuild-location.ts","../src/fields-json-rebuild/rebuild-textarea.ts","../src/fields-json-rebuild/rebuild-button.ts","../src/fields-json-rebuild/rebuild-address.ts","../src/fields-json-rebuild/rebuild-subform.ts","../src/fields-json-rebuild/rebuild-data-query.ts","../src/fields-json-rebuild/index.ts","../src/chat.ts"],"sourcesContent":["export const extractTextPartMeta = (part: any) => {\n if (part?.type !== 'text') {\n return null;\n }\n\n if (!part.providerMetadata) {\n return null;\n }\n\n if (!part.providerMetadata.raw || !part.providerMetadata.raw.data) {\n return null;\n }\n\n if (typeof part.providerMetadata.raw.data !== 'string') {\n return part.providerMetadata.raw.data;\n }\n\n let payload;\n try {\n payload = JSON.parse(part.providerMetadata.raw.data);\n } catch (e) {\n console.error('invalid raw data');\n }\n\n return payload || part.providerMetadata.raw.data;\n};\n","import { IQueryResult } from '@baishuyun/types';\nimport { extractTextPartMeta } from './text-part';\n\nexport const IsErrorPart = (part: any): boolean => {\n if (part?.type === 'error') {\n return true;\n }\n\n const payload = extractTextPartMeta(part);\n return payload?.type === 'agent-error';\n};\n\nexport const IsFakeMsgPart = (part: any): boolean => {\n const payload = extractTextPartMeta(part);\n return payload?.type === 'agent-fake-msg';\n};\n\nexport const IsFilePart = (part: any): boolean => {\n return part?.type === 'file';\n};\n\nexport const IsQueryResultPart = (part: any): boolean => {\n const payload = extractTextPartMeta(part);\n return payload?.type === 'query-stream-parsed-info';\n};\n\nexport const GetQueryResult = (part: any): IQueryResult | null => {\n const payload = extractTextPartMeta(part);\n if (payload?.type !== 'query-stream-parsed-info') {\n return null;\n }\n\n const result = payload.result;\n console.log('query result raw data:', result);\n try {\n return JSON.parse(result);\n } catch (e) {\n console.error('invalid query result data');\n return null;\n }\n};\n\nexport const IsFileGroupPart = (part: any) => {\n if (!Array.isArray(part)) {\n return false;\n }\n\n // any one is file part\n for (const p of part) {\n if (p?.type === 'file') {\n return true;\n }\n }\n\n return false;\n};\n\nexport const IsLoadingPart = (part: any): boolean => {\n const payload = extractTextPartMeta(part);\n return payload?.type === 'agent-loading';\n};\n\nexport const GetLoadingMsg = (part: any): string => {\n const payload = extractTextPartMeta(part);\n if (payload?.type !== 'agent-loading') {\n return '';\n }\n\n return payload?.label || '加载中';\n};\n\nexport const GetPartErrMsg = (part: any): string => {\n if (!IsErrorPart(part)) {\n return '';\n }\n\n if (part?.errorText) {\n return part.errorText;\n }\n\n const payload = extractTextPartMeta(part);\n return payload?.error || '未知错误';\n};\n\nexport const getMetaErrorMsg = (part: any): string => {\n if (part?.errorText) {\n return part.errorText;\n }\n\n const payload = extractTextPartMeta(part);\n return payload?.error || '未知错误';\n};\n","const STYLE_INJECTED_ATTR = 'data-shadow-slot-injected';\n\n/**\n * 克隆进 shadow root 的宿主样式统一降级到该 cascade layer。\n *\n * 背景:SDK 的 tailwind 产物全部包裹在 @layer(theme/base/components/utilities) 中,\n * 而 unlayered 样式在级联中恒优先于任何 layered 样式(与顺序、特异性无关)。\n * 宿主全局样式(如 `button { background: transparent }`)若原样进入 shadow root,\n * 会压过 SDK 的工具类。将宿主样式整体包进最先声明的 host-clone 层后,\n * SDK 样式恢复正常优先级;宿主主动传入的 styleString / 渲染器 style 仍为 unlayered,\n * 追加在最后,保留其覆盖能力。\n */\nconst HOST_CLONE_LAYER = 'host-clone';\n\n/**\n * 将一段宿主 CSS 文本降级包装:\n * - 顶层 @font-face / @keyframes / @property / @import 提升到层外\n * (它们不参与层叠;@import 还必须位于样式表最前,不能嵌进 @layer 块);\n * - 已有的 @layer 块保持原样(避免祖先 shadow 中已降层的样式被重复嵌套);\n * - 其余规则包进 @layer host-clone。\n * 解析失败时回退为整体包装。\n */\nconst wrapHostStyleText = (cssText: string): string => {\n try {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(cssText);\n\n const imports: string[] = [];\n const hoisted: string[] = [];\n const segments: string[] = [];\n let plainBuffer: string[] = [];\n\n const flushPlain = () => {\n if (plainBuffer.length) {\n segments.push(`@layer ${HOST_CLONE_LAYER} {\\n${plainBuffer.join('\\n')}\\n}`);\n plainBuffer = [];\n }\n };\n\n for (const rule of Array.from(sheet.cssRules)) {\n if (rule instanceof CSSImportRule) {\n imports.push(rule.cssText);\n } else if (\n rule instanceof CSSFontFaceRule ||\n rule instanceof CSSKeyframesRule ||\n (typeof CSSPropertyRule !== 'undefined' && rule instanceof CSSPropertyRule)\n ) {\n hoisted.push(rule.cssText);\n } else if (rule instanceof CSSLayerBlockRule) {\n flushPlain();\n segments.push(rule.cssText);\n } else {\n plainBuffer.push(rule.cssText);\n }\n }\n flushPlain();\n\n return [...imports, ...hoisted, ...segments].join('\\n');\n } catch {\n return `@layer ${HOST_CLONE_LAYER} {\\n${cssText}\\n}`;\n }\n};\n\nexport const injectHostStylesIntoShadow = (shadowRoot: ShadowRoot, hostElement: HTMLElement) => {\n if (shadowRoot.querySelector(`[${STYLE_INJECTED_ATTR}]`)) return;\n\n const importLines: string[] = [];\n const styleTexts: string[] = [];\n\n const collect = (el: Element) => {\n if (el instanceof HTMLLinkElement) {\n // link 的 innerHTML 恒为空,且克隆的 link 无法降级到 layer;\n // 转为 @import layer()(与 link 一样不要求 CORS),并保留 media 条件。\n const layerImport = `@import url(\"${el.href}\") layer(${HOST_CLONE_LAYER})`;\n importLines.push(el.media ? `${layerImport} ${el.media};` : `${layerImport};`);\n } else if (el instanceof HTMLStyleElement) {\n styleTexts.push(wrapHostStyleText(el.textContent || ''));\n }\n };\n\n // Collect <style> and <link rel=\"stylesheet\"> from document.head\n document.head.querySelectorAll('style').forEach(collect);\n document.head.querySelectorAll('link[rel=\"stylesheet\"]').forEach(collect);\n\n // Walk up through ancestor shadow roots and collect their <style> and <link> elements\n let node: Node | null = hostElement.parentNode;\n while (node) {\n if (node instanceof ShadowRoot) {\n node.querySelectorAll('style').forEach(collect);\n node.querySelectorAll('link[rel=\"stylesheet\"]').forEach(collect);\n }\n node = node.parentNode;\n }\n\n // 单个注入节点:层声明置首,保证 host-clone 恒为最低层;@import 须在其余规则之前。\n const styleEl = document.createElement('style');\n styleEl.setAttribute(STYLE_INJECTED_ATTR, '');\n styleEl.textContent = [\n `@layer ${HOST_CLONE_LAYER};`,\n ...importLines,\n ...styleTexts,\n ].join('\\n');\n shadowRoot.appendChild(styleEl);\n};\n","type StyleSource = Document | ShadowRoot;\ntype StyleSnapshot = { source: Node | CSSStyleSheet; css?: string; href?: string; media: string; nonce: string; classes?: string };\n\nconst MANAGED_STYLE = 'data-bs-host-style';\nconst watchers = new WeakMap<StyleSource, { subscribe: (listener: () => void) => () => void; read: () => StyleSnapshot[]; refresh: () => void }>();\n\nconst rebaseUrls = (css: string, base: string) => css.replace(\n /url\\(\\s*(?:\"([^\"\\n]*)\"|'([^'\\n]*)'|([^\\s)]*))\\s*\\)/gi,\n (match, double, single, bare) => {\n const url = double ?? single ?? bare;\n if (!url || /^(?:data:|blob:|#|var\\()/i.test(url)) return match;\n try { return `url(${JSON.stringify(new URL(url, base).href)})`; } catch { return match; }\n },\n);\n\nconst hostSelector = (selector: string) => selector\n .replace(/(^|,\\s*)(?::root|html)(?=$|[\\s>.:#\\[])/g, '$1:host')\n .replace(/:host\\s+(?:>\\s*)?body(?=$|[\\s>.:#\\[])/g, ':host > [data-bs-shadow-content]')\n .replace(/(^|,\\s*)body(?=$|[\\s>.:#\\[])/g, '$1[data-bs-shadow-content]');\n\nconst serializeRules = (rules: CSSRuleList, base: string): string => Array.from(rules).map(rule => {\n if (rule.type === 1) {\n const styleRule = rule as CSSStyleRule;\n const body = rule.cssText.slice(rule.cssText.indexOf('{'));\n return hostSelector(styleRule.selectorText) + rebaseUrls(body, base);\n }\n if ('cssRules' in rule && rule.type !== 7) {\n return rule.cssText.slice(0, rule.cssText.indexOf('{') + 1)\n + serializeRules((rule as CSSGroupingRule).cssRules, base) + '}';\n }\n return rebaseUrls(rule.cssText, base);\n}).join('\\n');\n\nconst snapshotStyles = (root: StyleSource): StyleSnapshot[] => {\n const doc = root.nodeType === 9 ? root as Document : (root as ShadowRoot).ownerDocument;\n const snapshots: StyleSnapshot[] = [];\n if (root.nodeType === 9 && doc.body) {\n const computed = doc.defaultView!.getComputedStyle(doc.body);\n const properties = ['font', 'color', 'line-height', 'letter-spacing', 'text-align', 'text-transform', 'direction', 'color-scheme'];\n const vars = Array.from(computed).filter(name => name.startsWith('--'));\n const css = [...properties, ...vars].map(name => `${name}:${computed.getPropertyValue(name)};`).join('');\n snapshots.push({ source: doc, css: `:host {display:contents;${css}}`, media: '', nonce: '', classes: `${doc.documentElement.className} ${doc.body.className}` });\n }\n for (const node of Array.from(root.querySelectorAll<HTMLStyleElement | HTMLLinkElement>('style,link[rel~=\"stylesheet\"]'))) {\n if (node.hasAttribute(MANAGED_STYLE) || node.hasAttribute('data-bs-sdk-styles') || node.hasAttribute('data-shadow-slot-injected')) continue;\n if (node.disabled || node.sheet?.disabled) continue;\n const media = node.media || '';\n const nonce = node.nonce || '';\n try {\n if (node.sheet) {\n snapshots.push({ source: node, css: serializeRules(node.sheet.cssRules, node.sheet.href || node.baseURI), media, nonce });\n continue;\n }\n } catch {\n if (node.tagName === 'LINK') {\n snapshots.push({ source: node, href: (node as HTMLLinkElement).href, media, nonce });\n continue;\n }\n }\n if (node.tagName === 'LINK') snapshots.push({ source: node, href: (node as HTMLLinkElement).href, media, nonce });\n else snapshots.push({ source: node, css: rebaseUrls(node.textContent || '', node.baseURI), media, nonce });\n }\n for (const sheet of Array.from(root.adoptedStyleSheets || [])) {\n if (!sheet.disabled) snapshots.push({ source: sheet, css: serializeRules(sheet.cssRules, doc.baseURI), media: sheet.media.mediaText, nonce: '' });\n }\n if (snapshots[0]?.source === doc) snapshots.push(snapshots.shift()!);\n return snapshots;\n};\n\nconst watchStyles = (root: StyleSource) => {\n const existing = watchers.get(root);\n if (existing) return existing;\n const doc = root.nodeType === 9 ? root as Document : (root as ShadowRoot).ownerDocument;\n let snapshots = snapshotStyles(root);\n let queued = false;\n const listeners = new Set<() => void>();\n const refresh = () => {\n queued = false;\n const next = snapshotStyles(root);\n if (next.length === snapshots.length && next.every((s, i) => s.source === snapshots[i].source && s.css === snapshots[i].css && s.href === snapshots[i].href && s.media === snapshots[i].media && s.nonce === snapshots[i].nonce && s.classes === snapshots[i].classes)) return;\n snapshots = next;\n listeners.forEach(listener => listener());\n };\n const schedule = () => {\n if (queued) return;\n queued = true;\n queueMicrotask(() => { if (listeners.size) refresh(); });\n };\n const observer = new MutationObserver(records => {\n if (records.some(record => {\n const target = record.target.nodeType === 1 ? record.target as Element : record.target.parentElement;\n if (target?.closest(`style[${MANAGED_STYLE}],style[data-bs-sdk-styles]`)) return false;\n if (target === doc.documentElement || target === doc.body) {\n if (record.type === 'attributes') return true;\n }\n if (target?.matches('style,link[rel~=\"stylesheet\"]')) return true;\n return [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(node =>\n node.nodeType === 1 && ((node as Element).matches('style,link[rel~=\"stylesheet\"]') || (node as Element).querySelector('style,link[rel~=\"stylesheet\"]')),\n );\n })) schedule();\n });\n observer.observe(root, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ['href', 'rel', 'media', 'disabled', 'class', 'style'] });\n root.addEventListener('load', schedule, true);\n const timer = doc.defaultView!.setInterval(refresh, 1000);\n const watcher = {\n read: () => snapshots,\n refresh: schedule,\n subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (listeners.size) return;\n observer.disconnect();\n root.removeEventListener('load', schedule, true);\n doc.defaultView!.clearInterval(timer);\n watchers.delete(root);\n };\n },\n };\n watchers.set(root, watcher);\n return watcher;\n};\n\nexport const syncHostStylesIntoShadow = (shadowRoot: ShadowRoot, host: HTMLElement) => {\n const sources: StyleSource[] = [host.ownerDocument];\n let root = host.getRootNode();\n while (root.nodeType === 11 && 'host' in root) {\n const parent = root as ShadowRoot;\n if (parent.host.getAttribute('data-bs-style-mode') !== 'sdk') sources.splice(1, 0, parent);\n root = parent.host.getRootNode();\n }\n const entries = sources.map(watchStyles);\n const marker = host.ownerDocument.createComment('host styles');\n shadowRoot.prepend(marker);\n const nodes = new Map<Node | CSSStyleSheet, HTMLStyleElement | HTMLLinkElement>();\n const sync = () => {\n const snapshots = entries.reduce<StyleSnapshot[]>((all, entry) => all.concat(entry.read()), []);\n const mount = shadowRoot.querySelector<HTMLElement>('[data-bs-shadow-content]');\n const classes = `${host.ownerDocument.documentElement.className} ${host.ownerDocument.body?.className || ''}`;\n if (mount && mount.className !== classes) mount.className = classes;\n const active = new Set(snapshots.map(snapshot => snapshot.source));\n for (const [source, node] of nodes) if (!active.has(source)) { node.remove(); nodes.delete(source); }\n let previous: ChildNode = marker;\n for (const snapshot of snapshots) {\n let node = nodes.get(snapshot.source);\n const tag = snapshot.href ? 'LINK' : 'STYLE';\n if (node && node.tagName !== tag) { node.remove(); nodes.delete(snapshot.source); node = undefined; }\n if (!node) {\n node = host.ownerDocument.createElement(snapshot.href ? 'link' : 'style');\n node.setAttribute(MANAGED_STYLE, '');\n nodes.set(snapshot.source, node);\n }\n node.media = snapshot.media;\n node.nonce = snapshot.nonce;\n if (snapshot.href) {\n const link = node as HTMLLinkElement;\n link.rel = 'stylesheet';\n if (link.href !== snapshot.href) link.href = snapshot.href;\n } else if (node.textContent !== snapshot.css) node.textContent = snapshot.css || '';\n if (previous.nextSibling !== node) previous.after(node);\n previous = node;\n }\n };\n const unsubscribe = entries.map(entry => entry.subscribe(sync));\n sync();\n const contentObserver = new MutationObserver(records => {\n if (records.some(record => {\n const target = record.target.nodeType === 1 ? record.target as Element : record.target.parentElement;\n return target && !target.closest('style,link');\n })) entries.forEach(entry => entry.refresh());\n });\n contentObserver.observe(shadowRoot, { subtree: true, childList: true, characterData: true, attributes: true, attributeFilter: ['class'] });\n return () => {\n contentObserver.disconnect();\n unsubscribe.forEach(dispose => dispose());\n nodes.forEach(node => node.remove());\n marker.remove();\n };\n};\n\nconst FONT_FACES_ATTR = 'data-bs-font-faces';\nconst CSS_FONT_FACE_RULE = 5; // CSSRule.FONT_FACE_RULE\n\n/**\n * 仅把宿主文档里的 @font-face 规则注入当前 shadow(幂等)。\n *\n * 背景:部分移动端 WebView 不把「文档级 @font-face」应用到 shadow 内文本,\n * 导致 shadow 里的字体图标(finex / sdk-icon-font)字形落回默认字体显示成豆腐块。\n * @font-face 不参与级联,注入无副作用,可安全用于 mode=\"sdk\" 的 shadow。\n */\nexport const injectHostFontFacesIntoShadow = (shadowRoot: ShadowRoot, host: HTMLElement) => {\n if (shadowRoot.querySelector(`[${FONT_FACES_ATTR}]`)) return;\n\n const doc = host.ownerDocument;\n const fontFaces: string[] = [];\n\n for (const sheet of Array.from(doc.styleSheets)) {\n let rules: CSSRuleList;\n try {\n rules = sheet.cssRules;\n } catch {\n // 跨域样式表 cssRules 不可读,跳过\n continue;\n }\n const base = sheet.href || doc.baseURI;\n for (const rule of Array.from(rules)) {\n if (rule.type === CSS_FONT_FACE_RULE) {\n fontFaces.push(rebaseUrls(rule.cssText, base));\n }\n }\n }\n\n if (!fontFaces.length) return;\n\n const style = doc.createElement('style');\n style.setAttribute(FONT_FACES_ATTR, '');\n style.textContent = fontFaces.join('\\n');\n shadowRoot.prepend(style);\n};\n","function isStringArray(value: unknown): value is string[] {\n if (!Array.isArray(value)) {\n return false;\n }\n\n return value.every((item) => typeof item === 'string');\n}\n\nfunction isOptionArray(value: unknown): value is Array<{ label: string; value: string }> {\n if (!Array.isArray(value)) {\n return false;\n }\n\n return value.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n 'label' in item &&\n 'value' in item &&\n typeof (item as any).label === 'string' &&\n typeof (item as any).value === 'string'\n );\n}\n\nexport const valueNormalizer = (value: string | string[]): string => {\n if (isStringArray(value)) {\n return value.join(', ');\n }\n\n if (isOptionArray(value)) {\n const values = value.map((item) => item.value);\n return values.join(', ');\n }\n\n return value;\n};\n","import type { IField } from '@baishuyun/types';\nimport { valueNormalizer } from './value-normalizer';\n\n/** 批量填写流中的单个字段(模型输出) */\nexport interface BatchStreamField {\n label?: string;\n fieldName: string;\n fieldType: string;\n value: unknown;\n row?: number;\n}\n\n/** 推给宿主 syncWidgetUpdateDetail 通道的字段更新 */\nexport interface BatchFieldUpdate {\n label: string;\n fieldName: string;\n fieldType: string;\n value: unknown;\n row: number;\n}\n\ninterface SubformMeta {\n label: string;\n columns: Set<string>;\n labelToColumn: Map<string, string>;\n}\n\ntype SubformRow = Record<string, unknown>;\n\nconst buildSubformIndex = (formStructure: IField[] | undefined) => {\n const subforms = new Map<string, SubformMeta>();\n const columnToSubform = new Map<string, string>();\n\n for (const field of Array.isArray(formStructure) ? formStructure : []) {\n const widget = field?.widget as IField['widget'] & { items?: IField[] };\n if (widget?.type !== 'subform' || !widget.widgetName) continue;\n\n const meta: SubformMeta = {\n label: field.label,\n columns: new Set(),\n labelToColumn: new Map(),\n };\n for (const item of widget.items ?? []) {\n const name = item?.widget?.widgetName;\n if (!name) continue;\n meta.columns.add(name);\n if (item.label) meta.labelToColumn.set(item.label, name);\n columnToSubform.set(name, widget.widgetName);\n }\n subforms.set(widget.widgetName, meta);\n }\n\n return { subforms, columnToSubform };\n};\n\n/**\n * 批量填写的子表单数据组装器。\n *\n * 宿主(PC/移动端 useFilledFields)与标准动作(useBatchRowsEmitter)约定:\n * 子表单以「整字段」更新推送,值为行对象数组 [{ 列 widgetName: 值 }],且每条记录只推一次\n * ——宿主按「同一 fieldName 的推送序号」对齐记录行。\n *\n * 但批量填写模型输出与该约定不符:\n * - 拍平格式:子表单列作为带 row 的顶层字段逐个输出,且常把某列误标为子表单自身的 fieldName;\n * - 嵌套格式:后端解析器先逐个吐出单元格,再吐出 value 为 [[单元格]] 的整个子表单对象。\n * 直接透传会让子表单键收到文本值(提交接口报「字段的数据不符合格式要求」)、列变成多余顶层键、\n * 预览表格读不到单元格。此处按记录行缓冲子表单数据,行切换或 flush 时按约定格式一次性推送;\n * 非子表单字段保持原样立即透传。\n */\nexport const createBatchSubformAssembler = (\n formStructure: IField[] | undefined,\n emit: (update: BatchFieldUpdate) => void\n) => {\n const { subforms, columnToSubform } = buildSubformIndex(formStructure);\n\n let currentRow: number | undefined;\n // 当前记录行内待推送的子表单:widgetName → 行对象数组\n let pending = new Map<string, SubformRow[]>();\n\n const resolveColumn = (subformName: string, fieldName?: string, label?: string) => {\n const meta = subforms.get(subformName);\n if (!meta) return fieldName;\n if (fieldName && meta.columns.has(fieldName)) return fieldName;\n return label ? meta.labelToColumn.get(label) : undefined;\n };\n\n const toRowObject = (subformName: string, row: unknown): SubformRow | null => {\n if (!Array.isArray(row)) {\n return row && typeof row === 'object' ? (row as SubformRow) : null;\n }\n const rowObject: SubformRow = {};\n for (const cell of row as Array<Partial<BatchStreamField>>) {\n const column = resolveColumn(subformName, cell?.fieldName, cell?.label);\n if (column) rowObject[column] = valueNormalizer(cell.value as string | string[]);\n }\n return rowObject;\n };\n\n const setCell = (subformName: string, column: string, value: unknown) => {\n const rows = pending.get(subformName) ?? [{}];\n rows[0] = { ...rows[0], [column]: valueNormalizer(value as string | string[]) };\n pending.set(subformName, rows);\n };\n\n const flush = () => {\n const toEmit = pending;\n pending = new Map();\n toEmit.forEach((rows, subformName) => {\n const nonEmpty = rows.filter((r) => Object.keys(r).length > 0);\n if (!nonEmpty.length) return;\n emit({\n label: subforms.get(subformName)?.label ?? subformName,\n fieldName: subformName,\n fieldType: 'subform',\n value: nonEmpty,\n row: currentRow ?? 0,\n });\n });\n };\n\n const push = (field: BatchStreamField) => {\n if (!field?.fieldName) return;\n\n const row = field.row ?? currentRow ?? 0;\n if (currentRow !== undefined && row !== currentRow) flush();\n currentRow = row;\n\n const { fieldName, fieldType, label } = field;\n\n if (fieldType === 'subform') {\n if (!Array.isArray(field.value)) return;\n const rows = field.value\n .map((r) => toRowObject(fieldName, r))\n .filter((r): r is SubformRow => r !== null);\n // 整对象包含完整行,覆盖先前逐个缓冲的单元格\n pending.set(fieldName, rows);\n return;\n }\n\n const owner = columnToSubform.get(fieldName);\n if (owner) {\n setCell(owner, fieldName, field.value);\n return;\n }\n\n if (subforms.has(fieldName)) {\n // 模型把某列误标为子表单自身的 fieldName:按标签找回列,找不到则丢弃\n const column = resolveColumn(fieldName, undefined, label);\n if (column) setCell(fieldName, column, field.value);\n return;\n }\n\n emit({ ...field, label: label ?? '', row } as BatchFieldUpdate);\n };\n\n return { push, flush };\n};\n","import { FieldType, IField } from '@baishuyun/types';\n\nexport const WHITE_LIST_FIELDS_SET = new Set<FieldType>([\n 'password',\n 'textarea',\n 'datetime',\n 'text',\n 'radiogroup',\n 'radio',\n 'combo',\n 'combocheck',\n 'checkboxgroup',\n 'number',\n]);\n\nexport const GetSafeFormStructure = (formStructure: Array<IField>) => {\n if (!Array.isArray(formStructure)) {\n return [];\n }\n\n return formStructure.filter((f) => {\n if (!f.widget) {\n return false;\n }\n\n return WHITE_LIST_FIELDS_SET.has(f.widget.type);\n });\n};\n","import {\n IBsUIAutomationService,\n IField,\n IFilledField,\n IFormAttachment,\n MsgPartCompProps,\n} from '@baishuyun/types';\nimport { extractTextPartMeta } from './text-part';\n\nexport const createPartTypeChecker =\n (type: string) =>\n (part: any): boolean => {\n const payload = extractTextPartMeta(part);\n return payload?.type === type;\n };\n\nexport const createPayloadTypeChecker = (type: string) => (payload: unknown) => {\n const specialPayload = payload as MsgPartCompProps;\n const part = specialPayload?.part;\n const checker = createPartTypeChecker(type);\n\n return checker(part);\n};\n\nexport const createGetFieldJsonInfo =\n (type: string) =>\n (part: any): IFilledField | null => {\n const payload = extractTextPartMeta(part);\n if (payload?.type !== type) {\n return null;\n }\n return payload?.field || null;\n };\n\nexport const createFieldPartsExtractor =\n (isTarget: (part: any) => boolean) =>\n (part: any): any[] => {\n if (Array.isArray(part) && part.length > 0) return part.filter(isTarget);\n if (isTarget(part)) return [part];\n return [];\n };\n\nexport const safeParseJson = (jsonString: string): any | null => {\n if (typeof jsonString !== 'string') {\n return jsonString;\n }\n\n try {\n return JSON.parse(jsonString);\n } catch (e) {\n console.info('[safeParseJson] Failed to parse JSON:', e);\n return null;\n }\n};\n\n/** 附件记录(IFormAttachment)基础校验:有 qnKey 才是平台真实记录 */\nconst isAttachmentRecord = (value: unknown): boolean =>\n Boolean(value && typeof value === 'object' && (value as IFormAttachment).qnKey);\n\n/**\n * 判断字段的填写值是否合法(用于过滤模型输出的无效填写项):\n * - null / undefined / 空字符串 / 空数组 / 空对象一律不合法;\n * - 数字 NaN 不合法;\n * - 附件类字段(upload / image)必须是平台附件记录数组(防模型编造);\n * - signature 为单条附件记录。\n */\nexport const hasValidFieldValue = (field: IField): boolean => {\n const value = field?.widget?.value;\n const type = field?.widget?.type;\n\n if (value === undefined || value === null || value === '') {\n return false;\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n\n if (typeof value === 'number' && Number.isNaN(value)) {\n return false;\n }\n\n if (typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length === 0) {\n return false;\n }\n\n if (type === 'signature') {\n return isAttachmentRecord(value);\n }\n\n if (type === 'upload' || type === 'image') {\n return Array.isArray(value) && value.length > 0 && value.every(isAttachmentRecord);\n }\n\n return true;\n};\n\nexport const generateWidgetName = (prefix = '_widget_') => {\n const now = Date.now();\n const timeStr = String(now);\n const totalLen = timeStr.length; // 通常为 13\n const fixedPart = timeStr.slice(0, totalLen - 5); // 保留前 N-5 位\n const randomPart = String(Math.floor(Math.random() * 100000)).padStart(5, '0');\n return `${prefix}${fixedPart}${randomPart}`;\n};\n\nexport const field2config = (field: IField, autoService: IBsUIAutomationService) => {\n return {\n field,\n onLoaded: () => {\n autoService.fillWidget({\n checked: true,\n field,\n });\n },\n onChange: (checked: boolean, instance: IField, parentFieldName: string, rowIndex: number) => {\n const detail = {\n field: instance,\n checked,\n parentFieldName,\n rowIndex,\n };\n\n autoService.fillWidget(detail);\n },\n };\n};\n","export const DATA_COUNT_PER_BATCH = 10;\n","export const imageUrlToBase64 = (url: string, mediaType = 'image/png'): Promise<string> =>\n new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n const canvas = document.createElement('canvas');\n canvas.width = img.naturalWidth;\n canvas.height = img.naturalHeight;\n canvas.getContext('2d')!.drawImage(img, 0, 0);\n resolve(canvas.toDataURL(mediaType));\n };\n img.onerror = () => resolve(url);\n img.src = url;\n });\n","import type {\n FieldType,\n IAgentHelper,\n IFormValues,\n IConditionItem,\n relationalOperator,\n ICondition,\n IBsCondition,\n IBsCondItem,\n ICtxDetail,\n} from '@baishuyun/types';\n\nexport const OPERATOR_LABEL_MAP: Record<relationalOperator, string> = {\n eq: '等于',\n neq: '不等于',\n gt: '大于',\n lt: '小于',\n gte: '大于等于',\n lte: '小于等于',\n contains: '包含',\n not_contains: '不包含',\n in: '等于任意',\n nin: '不等于任意',\n all: '同时包含',\n empty: '为空',\n not_empty: '不为空',\n range: '选择范围',\n like: '模糊匹配',\n unlike: '模糊不匹配',\n};\n\n/**\n * 字段类型 → 操作符描述覆盖\n *\n * 同一操作符在不同字段类型下文案不同(参考报表筛选 FilterTypeRelationMap 机制):\n * 多值字段(部门多选/成员多选/多选框组)的 in 语义是「包含任意一个」而非「等于任意」,\n * 地址/定位的 in/nin 语义是「属于/不属于」「包含/不包含」。\n * 未覆盖的类型与操作符回退到 OPERATOR_LABEL_MAP。\n */\nexport const FIELD_TYPE_OPERATOR_LABEL_OVERRIDES: Partial<\n Record<FieldType, Partial<Record<relationalOperator, string>>>\n> = {\n usergroup: { in: '包含任意一个' },\n deptgroup: { in: '包含任意一个' },\n checkboxgroup: { in: '包含任意一个' },\n combocheck: { in: '包含任意一个' },\n address: { in: '属于', nin: '不属于' },\n location: { in: '包含', nin: '不包含' },\n};\n\n/**\n * 获取操作符描述:优先字段类型覆盖,回退默认文案\n */\nexport function getOperatorLabel(operator: relationalOperator, fieldType?: FieldType): string {\n const overrides = fieldType ? FIELD_TYPE_OPERATOR_LABEL_OVERRIDES[fieldType] : undefined;\n return overrides?.[operator] ?? OPERATOR_LABEL_MAP[operator] ?? operator;\n}\n\nexport const FIELD_TYPE_OPERATOR_MAP: Record<FieldType, relationalOperator[]> = {\n // Text-like: equality, fuzzy, empty checks\n text: ['eq', 'neq', 'in', 'nin', 'contains', 'not_contains', 'empty', 'not_empty'],\n password: ['eq', 'neq', 'contains', 'not_contains', 'empty', 'not_empty'],\n radiogroup: ['eq', 'neq', 'in', 'nin', 'empty', 'not_empty'],\n radio: ['eq', 'neq', 'empty', 'not_empty'],\n combo: ['eq', 'neq', 'in', 'nin', 'like', 'unlike', 'empty', 'not_empty'],\n sn: ['eq', 'neq', 'in', 'nin', 'contains', 'not_contains', 'empty', 'not_empty'],\n\n // Textarea: fuzzy matching\n textarea: ['eq', 'neq', 'contains', 'not_contains', 'empty', 'not_empty'],\n\n // Number: comparison operators\n number: ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'range', 'empty', 'not_empty'],\n\n // DateTime: comparison operators\n datetime: ['eq', 'neq', 'gte', 'lte', 'range', 'empty', 'not_empty'],\n\n // Multi-select: membership, intersection\n checkboxgroup: ['in', 'all', 'eq', 'empty', 'not_empty'],\n combocheck: ['in', 'all', 'eq', 'empty', 'not_empty'],\n\n // User/Dept: equality and membership\n user: ['eq', 'neq', 'in', 'nin', 'empty', 'not_empty'],\n dept: ['eq', 'neq', 'in', 'nin', 'empty', 'not_empty'],\n\n // Groups: membership, intersection, empty\n usergroup: ['in', 'all', 'eq', 'empty', 'not_empty'],\n deptgroup: ['in', 'all', 'eq', 'empty', 'not_empty'],\n\n // Address/Location: intersection\n address: ['in', 'nin', 'empty', 'not_empty'],\n location: ['in', 'nin', 'empty', 'not_empty'],\n\n // Files: empty checks\n upload: ['empty', 'not_empty'],\n image: ['empty', 'not_empty'],\n signature: ['empty', 'not_empty'],\n\n // Flow state\n flowState: ['eq', 'neq', 'empty'],\n flowstate: ['eq', 'neq', 'empty'],\n\n // Link data: combo-like\n linkdata: ['eq', 'neq', 'in', 'nin', 'like', 'unlike', 'empty', 'not_empty'],\n linkquery: ['eq', 'neq', 'in', 'nin', 'like', 'unlike', 'empty', 'not_empty'],\n dataload: ['eq', 'neq', 'in', 'nin', 'like', 'unlike', 'empty', 'not_empty'],\n\n // Formula\n formula: ['eq', 'neq', 'empty', 'not_empty'],\n\n // Display-only: no meaningful operators\n separator: [],\n button: [],\n subform: [],\n unknown: [],\n};\n\nconst DEFAULT_OPERATOR_MAP: Partial<Record<FieldType, relationalOperator>> = {\n text: 'eq',\n password: 'eq',\n radiogroup: 'eq',\n radio: 'eq',\n combo: 'eq',\n sn: 'eq',\n textarea: 'contains',\n number: 'range',\n datetime: 'range',\n checkboxgroup: 'all',\n combocheck: 'all',\n user: 'eq',\n dept: 'eq',\n usergroup: 'all',\n deptgroup: 'all',\n address: 'all',\n location: 'all',\n upload: 'not_empty',\n image: 'not_empty',\n signature: 'not_empty',\n flowState: 'eq',\n flowstate: 'eq',\n linkdata: 'eq',\n linkquery: 'eq',\n dataload: 'eq',\n formula: 'eq',\n};\n\nexport function getAvailableOperators(fieldType?: FieldType): relationalOperator[] {\n if (!fieldType) return [];\n return FIELD_TYPE_OPERATOR_MAP[fieldType] ?? [];\n}\n\nexport function getDefaultOperator(fieldType?: FieldType): relationalOperator {\n if (!fieldType) return 'eq';\n return DEFAULT_OPERATOR_MAP[fieldType] ?? 'eq';\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return isRecord(value) ? value : null;\n}\n\nfunction isEmpty(value: unknown): boolean {\n if (value === null || value === undefined) return true;\n if (value === '' || value === '{}') return true;\n if (Array.isArray(value) && value.length === 0) return true;\n return false;\n}\n\nfunction isEqual(a: unknown, b: unknown): boolean {\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n const sa = a.map(String).sort();\n const sb = b.map(String).sort();\n return sa.every((v, i) => v === sb[i]);\n }\n if (isRecord(a) && isRecord(b)) {\n const ka = Object.keys(a);\n const kb = Object.keys(b);\n if (ka.length !== kb.length) return false;\n return ka.every((k) => String(a[k]) === String(b[k]));\n }\n return String(a) === String(b);\n}\n\n/**\n * 提取日期值中的「天」部分(YYYY-MM-DD),用于日期字段判等。\n * 兼容:ISO 字符串(2026-09-14T00:00:00Z)、纯日期(2026-09-14)、\n * Date 对象、毫秒时间戳。无法识别为日期时返回 null。\n */\nfunction toDayKey(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n\n let s: string | null = null;\n if (value instanceof Date) {\n s = value.toISOString();\n } else if (typeof value === 'number' && Number.isFinite(value)) {\n // 时间戳按本地时区取日期,与控件展示的本地日期一致\n const d = new Date(value);\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n } else {\n s = String(value).trim();\n }\n\n const m = /^(\\d{4})-(\\d{1,2})-(\\d{1,2})/.exec(s);\n if (!m) return null;\n return `${m[1]}-${m[2].padStart(2, '0')}-${m[3].padStart(2, '0')}`;\n}\n\n/**\n * 日期字段判等:双方都能归一化为「天」则按同一天比较,否则回退字符串严格判等。\n * 场景:控件值 2026-09-14T00:00:00Z 与目标值 2026-09-14 应视为相等。\n */\nfunction dateEqual(formValue: unknown, condValue: unknown): boolean {\n const a = toDayKey(formValue);\n const b = toDayKey(condValue);\n if (a !== null && b !== null) return a === b;\n return isEqual(formValue, condValue);\n}\n\nfunction evaluateIn(formValue: unknown, condValue: unknown): boolean {\n if (isRecord(condValue)) {\n const fv = asRecord(formValue);\n if (!fv) return false;\n if (condValue.province !== undefined && String(fv.province) !== String(condValue.province))\n return false;\n if (condValue.city !== undefined && String(fv.city) !== String(condValue.city)) return false;\n if (condValue.district !== undefined && String(fv.district) !== String(condValue.district))\n return false;\n return true;\n }\n const cv = Array.isArray(condValue) ? condValue.map(String) : [];\n if (Array.isArray(formValue)) {\n return formValue.some((v) => cv.includes(String(v)));\n }\n return cv.includes(String(formValue));\n}\n\nfunction evaluateAll(formValue: unknown, condValue: unknown): boolean {\n const cv = Array.isArray(condValue) ? condValue.map(String) : [];\n if (cv.length === 0) return false;\n const fv = Array.isArray(formValue) ? formValue.map(String) : [];\n return cv.every((v) => fv.includes(v));\n}\n\nfunction evaluateRange(formValue: unknown, condValue: unknown): boolean {\n const range = asRecord(condValue);\n if (!range) return false;\n const fv = Number(formValue);\n if (isNaN(fv)) return false;\n if (range.min !== undefined && range.min !== null && fv < Number(range.min)) return false;\n if (range.max !== undefined && range.max !== null && fv > Number(range.max)) return false;\n return true;\n}\n\n// ── Item evaluator ─────────────────────────────────────────────────────────\n\nconst formValueFormatter = (originValue: unknown, fieldType: FieldType) => {\n if (fieldType === 'user') {\n return (originValue as { _id: string } | undefined)?._id;\n }\n\n return originValue;\n};\n\n/**\n * 子表单行内字段值的包装形态(提交事件载荷):{ data, widgetType }。\n * 编辑/查看/流程事件中子字段为拍平裸值,无需解包。\n */\nfunction isWrappedCellValue(value: unknown): value is { data: unknown } {\n return isRecord(value) && 'data' in value && 'widgetType' in value;\n}\n\n/** 从子表单数据行数组中提取指定子字段的各行值(自动解包包装形态) */\nfunction collectSubformCellValues(rows: unknown[], childWidgetName: string): unknown[] {\n const values: unknown[] = [];\n for (const row of rows) {\n if (!isRecord(row)) continue;\n if (childWidgetName in row) {\n const cell = row[childWidgetName];\n values.push(isWrappedCellValue(cell) ? cell.data : cell);\n }\n }\n return values;\n}\n\n/**\n * 解析条件字段在 formValues 中的候选值列表。\n *\n * formValues 顶层仅有主表字段,子表单字段的值嵌套在子表单字段值(数据行数组)中:\n * - widgetName 为 subWidget.childWidget 形式:定位到对应子表单逐行提取;\n * - 主表字段:直接取顶层值(单元素列表);\n * - 兜底:widgetName 未命中顶层时,在各子表单数据行中查找该子字段。\n *\n * 返回空列表表示字段无任何值(按 undefined 参与求值)。\n */\nfunction resolveConditionFormValues(widgetName: string, formValues: IFormValues): unknown[] {\n // 子表单内字段:widgetName 形如 subWidget.childWidget\n if (widgetName.includes('.')) {\n const [parentWidgetName, childWidgetName] = widgetName.split('.');\n const subformValue = formValues[parentWidgetName];\n if (!Array.isArray(subformValue)) return [];\n return collectSubformCellValues(subformValue, childWidgetName);\n }\n\n // 主表字段直接命中\n if (widgetName in formValues) {\n return [formValues[widgetName]];\n }\n\n // 兜底:字段为子表单内字段(条件中仅有子字段 widgetName)\n for (const value of Object.values(formValues)) {\n if (!Array.isArray(value)) continue;\n const cells = collectSubformCellValues(value, widgetName);\n if (cells.length > 0) return cells;\n }\n\n return [];\n}\n\n/** 对单个字段值执行条件求值 */\nfunction evaluateSingleValue(originFormValue: unknown, item: IConditionItem): boolean {\n const widgetType = item.field.widget?.type as FieldType;\n const formValue = formValueFormatter(originFormValue, widgetType);\n const { operator, value: condValue } = item;\n // 日期字段:判等(eq/neq)按「同一天」归一化比较\n const isDateField = widgetType === 'datetime';\n\n switch (operator) {\n case 'empty':\n return isEmpty(formValue);\n case 'not_empty':\n return !isEmpty(formValue);\n case 'eq':\n return isDateField ? dateEqual(formValue, condValue) : isEqual(formValue, condValue);\n case 'neq':\n return isDateField ? !dateEqual(formValue, condValue) : !isEqual(formValue, condValue);\n case 'contains':\n case 'like':\n return String(formValue).includes(String(condValue));\n case 'not_contains':\n case 'unlike':\n return !String(formValue).includes(String(condValue));\n case 'gt':\n return Number(formValue) > Number(condValue);\n case 'gte':\n return Number(formValue) >= Number(condValue);\n case 'lt':\n return Number(formValue) < Number(condValue);\n case 'lte':\n return Number(formValue) <= Number(condValue);\n case 'in':\n return evaluateIn(formValue, condValue);\n case 'nin':\n return !evaluateIn(formValue, condValue);\n case 'all':\n return evaluateAll(formValue, condValue);\n case 'range':\n return evaluateRange(formValue, condValue);\n default:\n return false;\n }\n}\n\nfunction evaluateConditionItem(item: IConditionItem, formValues: IFormValues): boolean {\n const widgetName = item.field.widget?.widgetName;\n if (!widgetName) return false;\n\n const candidates = resolveConditionFormValues(widgetName, formValues);\n\n // 字段无任何值(含子表单无数据行):按 undefined 求值,empty 成立、not_empty 不成立\n if (candidates.length === 0) {\n return evaluateSingleValue(undefined, item);\n }\n\n // 主表字段只有一个候选值,some 等价于直接求值;\n // 子表单字段为存在语义:任意一行的该子字段值满足条件即成立\n return candidates.some((value) => evaluateSingleValue(value, item));\n}\n\n/**\n * 计算助手表单编辑字段偏好是否满足\n */\nexport function isHelperPrefMet(helper: IAgentHelper, editFields?: string[]): boolean {\n // 编辑任意字段或编辑指定字段,都要求编辑过字段,如果编辑字段数组为空,不需要进一步判定,直接不满足编辑偏好\n if (!editFields || !editFields?.length) {\n return false;\n }\n\n const editPref = helper.formFieldEditPreference ?? 'edit_any_field';\n // 如果偏好是编辑任意字段,那么只需检查数组长度即可\n if (editPref === 'edit_any_field') {\n return !!editFields?.length;\n }\n\n // 检查编辑过的字段是否包含指定字段\n const dirtyFields = new Set(editFields);\n return editPref.fields.some((field) => dirtyFields.has(field?.widget?.widgetName));\n}\n\n// ── Public API ─────────────────────────────────────────────────────────────\n\nexport function isHelperCondMet(helper: IAgentHelper, formValues: IFormValues): boolean {\n if (!helper.enabled) {\n return false;\n }\n\n const condition = helper.triggerCondition;\n if (!condition) return true;\n\n const { items, quantifier } = condition;\n if (!items || items.length === 0) return true;\n\n const results = items.map((item) => evaluateConditionItem(item, formValues));\n\n return quantifier === 'any' ? results.some((r) => r) : results.every((r) => r);\n}\n\nexport const isCtxMatch = (helper: IAgentHelper | null, ctx: ICtxDetail | null): boolean => {\n if (helper === null) {\n return false;\n }\n\n if (ctx === null) {\n return false;\n }\n\n if (helper.formId) {\n return ctx.type === 'form' && ctx.params.formId === helper.formId;\n }\n\n if (helper.appId) {\n return (ctx.type === 'app' || ctx.type === 'form') && ctx.params.appId === helper.appId;\n }\n\n // 没有表单 id、应用 id 视为通用,即任意上下文可用\n\n return ctx.type === 'global' || ctx.type === 'app' || ctx.type === 'form';\n};\n\n// ── Operator ↔ Bsy method maps ──────────────────────────────────────────────\n\nconst OPERATOR_TO_BS_METHOD: Record<string, string> = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'gte',\n lt: 'lt',\n lte: 'lte',\n contains: 'like',\n not_contains: 'unlike',\n like: 'like',\n unlike: 'unlike',\n in: 'in',\n nin: 'nin',\n all: 'all',\n empty: 'empty',\n not_empty: 'not_empty',\n range: 'range',\n};\n\nconst BS_METHOD_TO_OPERATOR: Record<string, relationalOperator> = {\n eq: 'eq',\n ne: 'neq',\n gt: 'gt',\n gte: 'gte',\n lt: 'lt',\n lte: 'lte',\n like: 'like',\n unlike: 'unlike',\n contains: 'like',\n not_contains: 'unlike',\n in: 'in',\n nin: 'nin',\n all: 'all',\n empty: 'empty',\n not_empty: 'not_empty',\n range: 'range',\n};\n\n// ── Public serialization API ────────────────────────────────────────────────\n\nexport function conditionStringify2bsCondition(cond: ICondition): string {\n const rel = cond.quantifier === 'any' ? 'or' : 'and';\n const bsCondItems: IBsCondItem[] = cond.items.map((item) => {\n const method = OPERATOR_TO_BS_METHOD[item.operator] ?? 'eq';\n let value: unknown[];\n if (item.operator === 'range' && isRecord(item.value)) {\n value = [item.value.min, item.value.max];\n } else if (Array.isArray(item.value)) {\n value = item.value;\n } else {\n value = [item.value];\n }\n return {\n field: item.field?.widget?.widgetName ?? '',\n method,\n value,\n type: item.field?.widget?.type,\n };\n });\n return JSON.stringify({ rel, cond: bsCondItems });\n}\n\nexport function bsConditionParse2Condition(str: string): ICondition {\n const bsCond: IBsCondition = JSON.parse(str);\n const quantifier: ICondition['quantifier'] = bsCond.rel === 'or' ? 'any' : 'all';\n const items: IConditionItem[] = bsCond.cond.map((bsItem, index) => {\n const operator = BS_METHOD_TO_OPERATOR[bsItem.method] ?? 'eq';\n let value: unknown = bsItem.value;\n if (operator === 'range') {\n value = { min: bsItem.value[0], max: bsItem.value[1] };\n } else if (\n ['eq', 'neq', 'contains', 'not_contains', 'gt', 'gte', 'lt', 'lte'].includes(operator)\n ) {\n value = bsItem.value[0];\n }\n return {\n id: `${bsItem.field}_${index}`,\n field: {\n label: bsItem.field,\n widget: {\n widgetName: bsItem.field,\n type: (bsItem.type as FieldType) ?? 'unknown',\n value: undefined,\n },\n },\n operator,\n value,\n };\n });\n return { targetName: '', quantifier, items };\n}\n","export function formatLocalDate(date: Date) {\n const pad = (n: string | number) => String(n).padStart(2, '0');\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;\n}\n","export function mergeConsecutiveTargets<T>(\n arr: T[],\n isTarget: (item: T) => boolean,\n minWidth = 1\n): (T | T[])[] {\n // 存储最终结果\n const result: (T | T[])[] = [];\n // 临时收集连续的目标元素\n const temp: T[] = [];\n\n // 遍历原始数组\n for (const item of arr) {\n if (isTarget(item)) {\n // 是目标元素,加入临时数组\n temp.push(item);\n } else {\n // 不是目标元素:先处理临时数组(内联原辅助函数逻辑)\n if (temp.length > 0) {\n // 连续≥ minWidth 个目标元素 → 合并为子数组\n result.push(temp.length >= minWidth ? [...temp] : temp[0]);\n temp.length = 0; // 清空临时数组\n }\n // 将当前非目标元素加入结果\n result.push(item);\n }\n }\n\n // 处理遍历结束后剩余的临时数组(末尾可能全是目标元素)\n if (temp.length > 0) {\n result.push(temp.length >= 2 ? [...temp] : temp[0]);\n }\n\n return result;\n}\n\nexport function flatArr(arr: Array<unknown>): Array<unknown> {\n const result: Array<unknown> = [];\n for (const item of arr) {\n if (Array.isArray(item)) {\n // 递归展开子数组,并把展开后的元素合并到结果中\n result.push(...flatArr(item));\n } else {\n result.push(item);\n }\n }\n return result;\n}\n","/**\n * Mapping from icon font_class name to unicode hex string.\n * Generated from apps/web/public/iconfont.json\n */\nexport const ICON_UNICODE_MAP: Record<string, string> = {\n projectdevelopment: 'e914',\n resourcelibrary: 'e915',\n Plugin2: 'e90e',\n Plugin: 'e90f',\n JSON: 'e910',\n Dropdown: 'e911',\n Batchprocessing: 'e912',\n 'Image-text': 'e916',\n Newaddition: 'e917',\n reportforms: 'e918',\n AddFola: 'e919',\n delete: 'e91a',\n AddImage: 'e91b',\n Send: 'e91c',\n text: 'e91d',\n image: 'e91e',\n Star1: 'e91f',\n Ellipse: 'e920',\n 'Ellipse-Copy': 'e921',\n Shape: 'e922',\n 'Shape-Copy': 'e923',\n 'right-line': 'e924',\n 'right-arrow': 'e925',\n 'double-right-arrow': 'e926',\n ellipse: 'e927',\n Rectangle: 'e928',\n 'Rectangle-Copy': 'e929',\n 'Rectangle-Copy-2': 'e92a',\n CombinedShape: 'e92b',\n Line: 'e92c',\n time: 'e92d',\n calendar: 'e92e',\n richsinglelinetext: 'e92f',\n singlelinetext: 'e930',\n multilinetext: 'e931',\n number: 'e932',\n RichText: 'e933',\n image1: 'e934',\n Attachment: 'e935',\n Phone: 'e936',\n Email: 'e937',\n date: 'e938',\n 'Multiple-choice': 'e939',\n Checkbox: 'e93a',\n 'Drop-down': 'e93b',\n positioning: 'e93c',\n Description: 'e93d',\n AutoNumber: 'e93e',\n Address: 'e93f',\n Staff: 'e940',\n Department: 'e941',\n Switch: 'e942',\n Slider: 'e943',\n Currentdate: 'e944',\n Grade: 'e945',\n Barcode: 'e946',\n Subtable: 'e947',\n associatedtable: 'e948',\n Associatedapplication: 'e949',\n Referencefield: 'e94a',\n Uppercasing: 'e94b',\n nodata: 'e94c',\n 'X-mark': 'e94d',\n Copy: 'e94e',\n Correct: 'e94f',\n Save: 'e950',\n Printer: 'e951',\n search: 'e952',\n filter: 'e953',\n Export: 'e954',\n Import: 'e955',\n Customprint: 'e956',\n refresh: 'e957',\n Helpcenter: 'e958',\n Tutorial: 'e959',\n Release: 'e95a',\n more: 'e95b',\n Setup: 'e95c',\n sort: 'e95d',\n Back: 'e95e',\n show: 'e95f',\n hide: 'e960',\n Preview: 'e961',\n Click: 'e962',\n Allcheck: 'e963',\n Cancelcheck: 'e964',\n Likespot: 'e965',\n Favoritespot: 'e966',\n Followspot: 'e967',\n Commentspot: 'e968',\n At: 'e969',\n Pin: 'e96a',\n edit: 'e96b',\n Top: 'e96c',\n Movein: 'e96d',\n Moveout: 'e96e',\n Forward: 'e96f',\n Revoke: 'e970',\n Return: 'e971',\n Link: 'e972',\n Unlink: 'e973',\n Download: 'e974',\n Upload: 'e975',\n Download2: 'e976',\n Upload2: 'e977',\n Comment: 'e978',\n Remind: 'e979',\n Notice: 'e97a',\n Permission: 'e97b',\n SMS: 'e97c',\n QRcode: 'e97d',\n Website: 'e97e',\n Monitoring: 'e97f',\n Api: 'e980',\n Webhook: 'e981',\n Synchronous: 'e982',\n Automation: 'e983',\n Trigger: 'e984',\n Condition: 'e985',\n Success: 'e986',\n Failure: 'e987',\n countdown: 'e988',\n Waiting: 'e989',\n Flow: 'e98a',\n Connection: 'e98b',\n Dashboard: 'e98c',\n chart: 'e98d',\n Piechart: 'e98e',\n BarChart: 'e98f',\n DoubleBarChart: 'e991',\n StackedBarChart: 'e992',\n PercentageStackedBarChart: 'e993',\n LineChart: 'e994',\n areachart: 'e990',\n combinationchart: 'e995',\n Scatterplot: 'e996',\n FunnelChart: 'e997',\n wordcloud: 'e998',\n RadarChart: 'e999',\n PivotTable: 'e99a',\n NumberChart: 'e99b',\n map: 'e99c',\n Timeline: 'e99d',\n Album: 'e99e',\n Kanban: 'e99f',\n Ganttchart: 'e9a0',\n Circle: 'e9a8',\n linesurface: 'e9a1',\n IconStyle: 'e9a2',\n Backgroundcolor: 'e9a3',\n DeleteDe: 'e9a4',\n AlignLeft: 'e9a5',\n AlignCenter: 'e9a6',\n AlignRight: 'e9a7',\n Column: 'e9a9',\n Component: 'e9aa',\n Customcomponent: 'e9ab',\n Title: 'e9ac',\n RichText1: 'e9ad',\n Carousel: 'e9ae',\n PageTab: 'e9af',\n Buriedpoint: 'e9b0',\n Container: 'e9b1',\n QuickStart: 'e9b2',\n Group: 'e9b3',\n Ungroup: 'e9b4',\n Front: 'e9b5',\n Back1: 'e9b6',\n Lock: 'e9b7',\n Unlock: 'e9b8',\n Association: 'e9b9',\n CancelAssociation: 'e9ba',\n Quotation: 'e9bb',\n ViewSet: 'e9bc',\n AutoScale: 'e9bd',\n waterfall: 'e9be',\n watermark: 'e9bf',\n history: 'e9c0',\n Setting: 'e9c1',\n Draftbox: 'e9c2',\n SQL: 'e9c3',\n Workflow: 'e9c4',\n Workflow2: 'e9c5',\n Addone: 'e9c6',\n Formula: 'e9c7',\n Dictionary: 'e9c8',\n statistical: 'e9c9',\n Recycle: 'e9ca',\n Mistake: 'e9cb',\n Tag: 'e9cc',\n Pendingapproval: 'e9cd',\n MyApplication: 'e9ce',\n ApplicationApproval: 'e9cf',\n Initiatedbyme: 'e9d0',\n Copiedtome: 'e9d1',\n Approvalnode: 'e9d2',\n Fillnode: 'e9d3',\n cc: 'e9d4',\n Image1: 'e9d5',\n Open: 'e9d6',\n Color: 'e9d7',\n Right: 'e9d8',\n Backward: 'e9d9',\n dataanalysis: 'e9da',\n Filter2: 'e9db',\n Freefilter: 'e9dc',\n Conditionfilter: 'e9dd',\n Quickfilter: 'e9de',\n Export1: 'e9df',\n Attachmentpreview: 'e9e0',\n BulkEdit: 'e9e1',\n Calculationrows: 'e9e2',\n SingleSelect: 'e9e3',\n dataview: 'e9e4',\n Dataid: 'e9e5',\n Divide: 'e9e6',\n Progress: 'e9e7',\n Star: 'e9e8',\n Contacts: 'e9e9',\n Activity: 'e9ea',\n Minus: 'e9eb',\n Plussign: 'e9ec',\n 'Plussign-Copy': 'e9ed',\n Increased: 'e9ee',\n Decline: 'e9ef',\n indeterminate: 'e9f0',\n Decline1: 'e9f1',\n personal: 'e9f2',\n Warning: 'e9f3',\n Warning2: 'e9f4',\n Prompt: 'e9f5',\n info: 'e9f6',\n Cancel: 'e9f7',\n question1: 'e9f8',\n Question: 'e9f9',\n exclamation: 'e9fa',\n Warning1: 'e9fb',\n True: 'e9fc',\n Suspended: 'e9fd',\n Suspended1: 'e9fe',\n Suspended2: 'e9ff',\n Error: 'ea00',\n CombinedShape2: 'ea01',\n Delete1: 'ea02',\n Circle1: 'ea03',\n Decline2: 'ea04',\n Decline3: 'ea05',\n add: 'ea06',\n Addto: 'ea07',\n Reduce: 'ea08',\n Subtract: 'ea09',\n Addition: 'ea0a',\n Multiplication: 'ea0b',\n Division: 'ea0c',\n Bracket: 'ea0d',\n Reduce1: 'ea0e',\n Search: 'ea0f',\n Favorites: 'ea10',\n Annotation: 'ea11',\n Application: 'ea12',\n Application2: 'ea13',\n Applicationsview: 'ea14',\n Publish: 'ea15',\n Deploy: 'ea16',\n Sidetoplowerside: 'ea17',\n Narrow: 'ea18',\n Backtothenavigation: 'ea19',\n Forwardtothenavigation: 'ea1a',\n Return1: 'ea1b',\n Transfer: 'ea1c',\n Log: 'ea1d',\n table: 'ea1e',\n Form: 'ea1f',\n Openfield: 'ea20',\n Closefield: 'ea21',\n Receive: 'ea22',\n Fill: 'ea23',\n Fill1: 'ea24',\n fillet: 'ea25',\n rightangle: 'ea26',\n round: 'ea27',\n Send1: 'ea28',\n Map: 'ea29',\n Upward: 'ea2a',\n Move: 'ea2b',\n Downward: 'ea2c',\n drag: 'ea2d',\n TextIcon: 'ea2e',\n Narrow1: 'ea2f',\n Enlarge: 'ea30',\n Enlarge2: 'ea31',\n Cancel1: 'ea32',\n Retract: 'ea33',\n Expand: 'ea34',\n Retract1: 'ea35',\n Expand1: 'ea36',\n Retract2: 'ea37',\n Expand2: 'ea38',\n Switch1: 'ea39',\n Fullscreen: 'ea3a',\n Offscreen: 'ea3b',\n Notvisible: 'ea3c',\n Visible: 'ea3d',\n Adjust: 'ea3e',\n PC: 'ea3f',\n Mobile: 'ea40',\n Pad: 'ea41',\n Scanthecode: 'ea42',\n Scan: 'ea43',\n Screenshot: 'ea44',\n Rotation: 'ea45',\n voice: 'ea46',\n Video: 'ea47',\n Location: 'ea48',\n Clock: 'ea49',\n Print: 'ea4a',\n Member: 'ea4b',\n WorkWeChat: 'ea4c',\n DingTalk: 'ea4d',\n EnterpriseWeChat2: 'ea4e',\n Groupmanagement: 'ea4f',\n Feishu: 'ea50',\n Stationletter: 'ea51',\n Email1: 'ea52',\n WeChat: 'ea53',\n ServiceAccount: 'ea54',\n Subscribed: 'ea55',\n Dingtalk: 'ea56',\n Information: 'ea57',\n Assistant: 'ea58',\n ai: 'ea59',\n Inquireabout: 'ea5a',\n IFrame: 'ea5b',\n Integratio: 'ea5c',\n close: 'ea5d',\n Close: 'ea5e',\n Addgroup: 'ea5f',\n deletegroup: 'ea60',\n Relateddata: 'ea61',\n Enlarge1: 'ea62',\n Narrow2: 'ea63',\n 'map-search': 'ea64',\n Corner: 'ea65',\n text1: 'ea66',\n Onlinemap: 'ea67',\n Maptile: 'ea68',\n Dataexport: 'ea69',\n // 文件类型图标(码位对齐 baishu font-icon.less 的 icon-bsy-* 文件图标,\n // 渲染时需使用 icon-bsy-form 字体类,见 ai-design/font-icon.tsx 的 fontCls)\n 'bsy-ppt': 'e8c8',\n 'bsy-pptx': 'e8cf',\n 'bsy-doc': 'e8ca',\n 'bsy-docx': 'e8c7',\n 'bsy-xls': 'e8d0',\n 'bsy-xlsx': 'e8c5',\n 'bsy-zip': 'e8cb',\n 'bsy-rar': 'e8d3',\n 'bsy-csv': 'e8cc',\n 'bsy-txt': 'e8cd',\n 'bsy-pdf': 'e8ce',\n 'bsy-mp4': 'e8c6',\n 'bsy-webm': 'e8d1',\n 'bsy-ogg': 'e8d2',\n 'bsy-mov': 'e983',\n 'bsy-gif': 'e8fd',\n 'bsy-jpg': 'e8fe',\n 'bsy-jpeg': 'e8ff',\n 'bsy-png': 'e900',\n 'bsy-other': 'e8c9',\n richtext: 'ea73',\n Onlinemap1: 'ea74',\n Maptile1: 'ea75',\n Ai2: 'ea76',\n Guide: 'ea77',\n Button: 'ea78',\n Menus: 'ea79',\n 'richtext-Copy': 'ea7a',\n 'richtext-Copy-2': 'ea7b',\n 'richtext-Copy-3': 'ea7c',\n 'richtext-Copy-4': 'ea7d',\n Split: 'ea7e',\n AI: 'ea7f',\n Form1: 'ea80',\n Fields: 'ea81',\n Project: 'ea82',\n More1: 'ea83',\n Notstarted: 'ea84',\n Inprocess: 'ea85',\n Completed: 'ea86',\n Completed1: 'ea87',\n More2: 'ea88',\n AIoffice: 'ea89',\n statistics: 'ea8a',\n Expand3: 'ea8b',\n list: 'ea8c',\n 'list-Copy': 'ea8d',\n Grid: 'ea8e',\n Calendar: 'ea8f',\n Schedule: 'ea90',\n tableview: 'ea91',\n Gallery: 'ea92',\n Copy1: 'ea93',\n Mailbox: 'ea94',\n Automation1: 'ea95',\n Avatar: 'ea96',\n};\n\n/**\n * Look up the unicode hex string for an icon by its font_class name.\n * Returns undefined if the icon name is not found.\n *\n * @param name - The icon font_class name (e.g. \"search\", \"edit\", \"ai\")\n * @returns The unicode hex string (e.g. \"e952\"), or undefined\n *\n * @example\n * getIconUnicode(\"search\") // \"e952\"\n * getIconUnicode(\"ai\") // \"ea59\"\n */\nexport function getIconUnicode(name: string): string | undefined {\n const code = ICON_UNICODE_MAP[name];\n return code ? `&#x${code};` : undefined;\n}\n\n/**\n * 数字表单图标(icon-bsy-form-N / icon-new-bsy-form-N)→ unicode 码位。\n * 与 PC aiOffice/const 的 .icon-bsy-form-N:before content 对齐。\n * 用于「文本内码」渲染(把 unicode 字符直接放进元素文本 + finex 字体),\n * 规避部分环境(shadow DOM / WebView):before content 无法生成的问题。\n */\nexport const FORM_ICON_UNICODE_MAP: Record<number, string> = {0: 'e7b5', 1: 'e7c7', 2: 'e7b3', 3: 'e7c9', 4: 'e7bc', 5: 'e7be', 6: 'e7b8', 7: 'e7c8', 8: 'e7c1', 9: 'e7bb', 10: 'e7ca', 11: 'e7c4', 12: 'e7b4', 13: 'e7ba', 14: 'e7b6', 15: 'e7c5', 16: 'e7bf', 17: 'e7c3', 18: 'e7c2', 19: 'e7c6', 20: 'e7bd', 21: 'e7c0', 22: 'e7cb', 23: 'e7b7', 24: 'e7b9', 25: 'e814', 26: 'e81d', 27: 'e81c', 28: 'e81a', 29: 'e813', 30: 'e81b', 31: 'e818', 32: 'e819', 33: 'e817', 34: 'e816', 35: 'e810', 36: 'e815', 37: 'e812', 38: 'e811', 39: 'e80e', 40: 'e80f', 41: 'e80d', 42: 'e807', 43: 'e80b', 44: 'e80a', 45: 'e81d', 46: 'e809', 47: 'e808', 48: 'e805', 49: 'e7ff', 50: 'e803', 51: 'e806', 52: 'e802', 53: 'e800', 54: 'e804', 55: 'e801', 56: 'e7fe', 57: 'e7fc', 58: 'e7fd', 59: 'e7fb', 60: 'e7fa'};\n","import { IField, IValueFormHuman } from '@baishuyun/types';\nimport { flatArr } from './array';\n\n// input eg: '${_widget_1782471976291} ${_widget_1782471978145} ahahah'\n// output: '供应商名称 备注 ahahah'\nexport const promptParser = (\n originStrWithFieldNameTpl: string,\n formStructure: Array<IField>,\n widgetValueGetter: (name: string, isVirtual?: boolean) => IValueFormHuman\n): IValueFormHuman => {\n if (!widgetValueGetter) {\n return {\n translated: '',\n };\n }\n\n const widgetMap = new Map(formStructure.map((f) => [f.widget.widgetName, f.label]));\n\n for (const field of formStructure) {\n if (field.widget.type === 'subform' && field.widget.items) {\n for (const item of field.widget.items) {\n if ('widget' in item && !('options' in item)) {\n const key = `${field.widget.widgetName}.${item.widget.widgetName}`;\n widgetMap.set(key, item.label);\n }\n }\n }\n }\n\n const metaPart: Array<unknown> = [];\n\n const stringPart = originStrWithFieldNameTpl.replace(\n /\\$\\{(virtual\\.)?(_widget_\\d+(?:\\._widget_\\d+)?)\\}/g,\n (_, virtualPrefix, widgetName) => {\n const isVirtual = !!virtualPrefix;\n const { translated, meta } = widgetValueGetter(widgetName, isVirtual);\n\n if (meta) {\n metaPart.push(meta);\n }\n\n return translated;\n }\n );\n\n return {\n meta: metaPart.length ? flatArr(metaPart) : null,\n translated: (stringPart ?? '').trim(),\n };\n};\n","const REG_EX_MAP: Record<string, string> = {\n 手机号码: \"^((\\\\(\\\\d{2,3}\\\\))|(\\\\d{3}\\\\-))?1\\\\d{10}$\",\n 电话号码: \"^(0[0-9]{2,3}\\\\-)?([2-9][0-9]{6,7})+(\\\\-[0-9]{1,4})?$\",\n 邮政编码: \"^\\\\d{6}$\",\n 身份证号码: \"(^\\\\d{15}$)|(^\\\\d{18}$)|(^\\\\d{17}(\\\\d|X|x)$)\",\n 邮箱: \"^([a-zA-Z0-9_\\\\.\\\\-])+\\\\@(([a-zA-Z0-9\\\\-])+\\\\.)+([a-zA-Z0-9]{2,4})+$\",\n 时分: \"(^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}$)\",\n 时分秒:\n \"(^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$)\",\n 图片链接: \"imageurl\",\n 二维码图片: \"qrcode\",\n 条形码图片: \"barcode\",\n 自定义: \"custom\",\n};\n\nexport const rebuildText = (truncatedJson: unknown) => {\n const { widget, labelStyle, label, ...rest } = (truncatedJson as any) || {};\n\n const regex = REG_EX_MAP[labelStyle] || \"\";\n return {\n widget: {\n widgetName: `_widget_${Date.now()}`,\n widgetNameAlias: \"\",\n // triggerEvent: 0,\n customCls: null,\n height: 34,\n width: 350,\n text: null,\n value: \"\", //默认值 没有默认值的话 整个value不存在\n enable: true,\n visible: true,\n // hint: placeholder,\n allowBlank: true,\n rely: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n // regex, //格式 ^((\\(\\d{2,3}\\))|(\\d{3}\\-))?1\\d{10}$ 手机号码 ^(0[0-9]{2,3}\\-)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?$ 电话号码 ^\\d{6}$ 邮政编码 (^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$) 身份证号码 ^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$ 邮箱 (^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}$) 时分 (^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$) 时分秒 imageurl 图片链接 qrcode 二维码图片 barcode 条形码图片 custom 自定义\n noRepeat: true,\n scan: null,\n // textMode,\n generateQR: false,\n eventAlert: true,\n alertinfo: {\n icon: \"error\",\n // tip: placeholder,\n // msg: placeholder,\n },\n enterClearText: true,\n ...widget,\n regex,\n type: \"text\",\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","export const buildWidgetName: (prefix?: string, index?: number) => string = (\n prefix: string = \"_widget\",\n index?: number,\n) => {\n const baseName = `${prefix}_${Date.now()}`;\n\n if (index === undefined) {\n return baseName;\n }\n\n const idxLength = index.toString().length;\n const slicedBaseName = baseName.slice(0, -idxLength);\n\n return `${slicedBaseName}${index}`;\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildNumber = (value: unknown): unknown => {\n const { widget, label, ...rest } = (value as any) || {};\n return {\n widget: {\n type: \"number\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n triggerEvent: false,\n customCls: null,\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n // regex,\n // hint: placeholder,\n noRepeat: false,\n alertinfo: {\n icon: \"success\",\n tip: \"请设置提示内容\",\n },\n allowDecimals: true, //允许小数,默认值 true,已废弃\n allowNegative: true, //允许负数,默认值 true ,已废弃\n // maxNumber: max, //限定数值范围 最大值\n // minNumber: min, //限定数值范围 最小值\n displayMode: \"percent\", // 新的格式, percent 百分比 number 数值\n precision: null, //保留小数位数\n thousandsSeparator: false, //显示千分符\n notround: true, //不四舍五入\n format: \"\", //旧的格式,新的由多个属性来控制,前端代码会用其他几个参数拼接出正确的这个值。 其中结尾有% 代表百分比 ,没有%代表数字 ,然后小数点后面的0的个数代表 保留的小数位数,如果小数点后面没有0代表(如0.%),代表没有设置 保留小数位数,保留用户输入的所有小数\n afterSuffix: {\n //单位\n zh_cn: \"\", //中文的\n en_us: \"\", //英文的\n zh_tw: \"\", //繁体的\n },\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","export const rebuildSelect = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"combo\",\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n mode: 1,\n allowAddLinkData: false,\n // items: options,\n widgetName: `_widget_${Date.now()}`,\n widgetNameAlias: \"\",\n customCls: null,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n colorEnable: true, //颜色 是否开启颜色\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","export const rebuildRadioGroup = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n // items: options,\n layout: \"vertical\",\n stopCancel: false,\n widgetName: `_widget_${Date.now()}`,\n widgetNameAlias: \"\",\n customCls: null,\n value: null,\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n colorEnable: true, //颜色 是否开启颜色\n ...widget,\n type: \"radiogroup\",\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n labelStyle: label,\n };\n};\n","export const rebuildDatetime = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n type: \"datetime\",\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n widgetName: `_widget_${Date.now()}`,\n\n widgetNameAlias: \"\",\n customCls: null,\n value: \"today\", //默认值, today 填写当前时间 ,如果是数字,如 1762957800000 ,是自定义的时间,为所选时间的时间戳的毫秒级,\n rely: null,\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n hint: \"\",\n dateLimit: {\n //日期范围\n week: {\n //可选择星期\n enable: false, //是否开启可选择星期\n value: [\n //星期 星期一到天,用1-7代表\n 1, 2, 6,\n ],\n },\n start: {\n //最早可选时间\n enable: false, //是否开启最早可选时间\n mode: \"dynamic\", //模式: dynamic 动态 static 固定值 fieldValue 字段值\n value: \"yesterday\", //限定的值: today 今天 yesterday 昨天 tomorrow 明天 7day_before 七天前 7day_after 七天后 30day_before 30天前 30day_after 30天后\n },\n end: {\n //最晚可选时间\n enable: false, //是否开启最晚可选时间\n mode: \"static\", //模式: dynamic 动态 static 固定值 fieldValue 字段值\n value: 1762093800000, //限定的值:这种数字的为 选择的固定值,时间的时间戳,毫秒级别 ,如果为 _widget_1762154537014 这种,为字段的值,这个字段需要也是日期字段,和当前这个字段是同一个 format的\n },\n },\n\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","export const defaultBuilder = (truncatedJson: unknown) => {\n return truncatedJson;\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildDeptGroup = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n type: \"deptgroup\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: \"34\",\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n limit: {},\n valueOption: 0,\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildSn = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: 'sn',\n widgetName: buildWidgetName(),\n widgetNameAlias: '',\n triggerEvent: 0,\n customCls: null,\n width: 350,\n enable: true,\n visible: true,\n // rules: rules,\n importMode: 1, //导入模式 1 excel末尾递增 2 excel最大值递增 3 excel/表单最大值比较递增\n ...widget,\n rules: [\n {\n chars: 'sn-',\n type: 'fixedChars',\n },\n {\n digitsNum: 5,\n fixedLength: true,\n resetDuration: 'none',\n startValue: 1,\n type: 'incNumber',\n },\n ],\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildDept = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"dept\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: \"34\",\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n limit: {},\n valueOption: 0,\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildUserGroup = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"usergroup\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: \"34\",\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n limit: {},\n limitWidget: null, //可选范围 由部门字段确定,如果有值 是 _widget_1762226067008 这种,另一个部门字段的id。和limit互斥,limit将为[]\n valueOption: 0,\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildDataLinker = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n rely: {\n widgets: [],\n },\n linkFilter: {},\n allowAdd: true, //允许新增关联表数据\n refType: \"form\", //关联表的类型,只能是form\n ...widget,\n linkFields: [],\n labelStyle: label,\n type: \"linkdata\",\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nconst tmpMapFields2Fields = (mapFieldsFromTruncatedJson: unknown[]) => {\n if (!mapFieldsFromTruncatedJson || !mapFieldsFromTruncatedJson.length) {\n return mapFieldsFromTruncatedJson;\n }\n\n return mapFieldsFromTruncatedJson.map((mf: any, index: number) => {\n return {\n id: index,\n\n // name: \"_widget_1761976674767\",\n // form: \"a2f34ef882158a3e97da4ef7\",\n // tag: buildWidgetName(\"f_\", index),\n\n title: mf.field,\n text: mf.field,\n icon: `icon-widget-${mf.type}`,\n type: mf.type,\n isEditable: true,\n group: \"dimension,filter,select\",\n formula: \"\",\n };\n });\n};\n\nconst tmpMapFields2MapFields = (mapFieldsFromTruncatedJson: unknown[]) => {\n if (!mapFieldsFromTruncatedJson || !mapFieldsFromTruncatedJson.length) {\n return mapFieldsFromTruncatedJson;\n }\n\n return mapFieldsFromTruncatedJson.map((mf: any) => {\n return {\n mode: \"depend\",\n ...mf,\n };\n });\n};\n\nexport const rebuildDataLoader = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"dataload\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n width: 350,\n text: label,\n enable: true,\n visible: true,\n allowBlank: true,\n allowAddData: true, // 允许新增数据源数据\n ...widget,\n mode: \"list\", //一直是 list 应该是废弃的\n loaddataconfig: {\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n },\n dataloadmode: [\"add\", \"cover\"],\n filter: {\n cond: [],\n rel: \"and\",\n },\n defaultSort: [],\n treeFields: {},\n mode: \"list\",\n selectFields: [],\n triggerControl: null,\n triggerWidget: null,\n triggerFieldMode: \"none\",\n triggerField: null,\n forms: widget?.loaddataconfig?.forms,\n selectArg: [],\n selectRel: \"and\",\n fields: tmpMapFields2Fields(widget?.loaddataconfig?.mapFields),\n mapFields: tmpMapFields2MapFields(widget?.loaddataconfig?.mapFields),\n },\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildUser = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"user\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: \"34\",\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n limit: {},\n limitWidget: null, //可选范围 由部门字段确定,如果有值 是 _widget_1762226067008 这种,另一个部门字段的id。和limit互斥,limit将为[]\n valueOption: 0,\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildSignature = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"signature\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n rely: null,\n ...widget,\n labelStyle: label,\n },\n description: null,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildImage = (truncatedJson: unknown) => {\n const { widget, label, ...rest }: any = (truncatedJson as any) || {};\n\n return {\n widget: {\n type: \"image\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: 100,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n download: true, //打包下载\n is_file_down: true, //操作权限 可下载\n check_image_exif: true, //照片支持查看EXIF扩展信息\n online_edit: false,\n online_edit_record: false,\n fileType: [\n //支持上传的类型,默认,不可以设置\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"gif\",\n \"bmp\",\n \"tif\",\n ],\n compressed: true, //三方图片压缩\n wxOriginalComponent: true, //微信/企业微信原生拍照模式\n onlyCamera: false, //仅允许拍照上传\n preview: true, //是否可以预览 默认 不可以设置\n watermarkSwitch: true, //水印属性\n watermarkPosition: \"center\", //水印位置\n watermarkFieldTitle: true, //是否显示水印字段标题\n watermarkSize: \"14\", //水印字体大小 不可以设置\n watermarkFixedField: {},\n previewWidth: 450, //预览的宽 默认 不可以设置\n previewHeight: 450, //预览的高 默认 不可以设置\n browserCompress: true, //浏览器图片压缩\n quality: 0.7, //压缩图片比例,开启 浏览器图片压缩 后才能设置\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildUploader = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"upload\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n maxFileCount: 50, //允许多文件上传 1为不可以 50为可以\n download: true, //打包下载\n is_file_down: true, //操作权限 可下载\n check_image_exif: true, //照片支持查看EXIF扩展信息\n online_edit: true, //允许文档在线编辑\n online_edit_record: true, //是否查看协作记录\n fileSizeLimit: 10485760, //设置单个文件大小上限,单位是字节,范围 1M-20M\n // fileType,\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildCheckboxGroup = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"checkboxgroup\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n colorEnable: true, //颜色 是否开启颜色\n layout: \"vertical\",\n allowAddOptions: false, //允许成员填写时添加新选项\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildLine = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"separator\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 12,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildComboChecker = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"combocheck\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n height: 34,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n colorEnable: true, //颜色 是否开启颜色\n mode: \"\",\n allowAddOptions: false, //允许成员填写时添加新选项\n allowAddLinkData: false,\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildLocation = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n type: \"location\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n adjustable: true, //允许移动端微调\n lnglatVisible: true, //显示经纬度坐标\n autoLocation: true, //移动端自动触发定位\n enablePcLocation: true, //允许PC端定位并选择位置\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildTextarea = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n return {\n widget: {\n type: \"textarea\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n triggerEvent: false,\n customCls: null,\n height: 140,\n width: 734,\n value: \"\",\n enable: true,\n visible: true,\n allowBlank: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n noRepeat: false,\n alertinfo: {\n icon: \"success\",\n tip: \"请设置提示内容\",\n },\n autoHeight: true, //根据内容自适应高度\n maxLength: 5000, //限制输入最大字符数 不限制的话,整个maxLength不存在\n ...widget,\n labelStyle: label,\n },\n // description,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildButton = (truncatedJson: unknown = {}) => {\n const { widget, label, ...rest } = truncatedJson as any;\n\n return {\n widget: {\n type: \"button\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n triggerEvent: 0,\n customCls: null,\n height: 36,\n width: 350,\n enable: true,\n visible: true,\n allowBlank: false,\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n funMode: \"popupreport\",\n },\n background: {\n //颜色\n mode: \"color\",\n position: \"center\",\n },\n mode: \"all\", //模式 all 扩展 popupreport 弹出报表 popupform 弹出表单 print 页面打印 popuppage 弹出外部网页\n theme: \"default\", //风格 default 默认,有边框有底色 style1 有边框无底色 none 无边框无底色\n eventAlert: false, //是否显示提醒框\n alertinfo: {\n icon: \"success\",\n tip: \"请设置提示内容\",\n },\n\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildAddress = (truncatedJson: unknown = {}) => {\n const { widget, label, ...rest } = truncatedJson as any;\n\n return {\n widget: {\n type: \"address\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n width: 720,\n enable: true,\n visible: true,\n funMode: \"module\",\n module: null,\n libs: [],\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n needDetail: true,\n eventMode: 1, //公式联动触发模式 1 默认,省市县/详细地址内容改变都触发 2 只有省市县改变才触发 3 只有详细地址改变才触发\n seleceMapAddress: true, //开启经纬度定位\n ...widget,\n labelStyle: label,\n },\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { rebuildFieldsJsonStructure } from \".\";\nimport { buildWidgetName } from './build-widget-name';\n\nexport const rebuildSubform = (originObj: unknown = {}) => {\n const { widget, label, ...rest } = originObj as any;\n return {\n widget: {\n type: \"subform\",\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n labelStyle: label,\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n version: 1,\n },\n items: (widget.items || []).map((item: any, index: number) => {\n const result = rebuildFieldsJsonStructure(item, true);\n\n result.widget.widgetName = buildWidgetName(\"_widget\", index);\n\n return result;\n }),\n sortable: true, //启用子表单数据排序\n allowImportV2: false, //从excel导入数据\n sticky_column: {\n //PC端冻结前 n 列\n limit: 2, //多少列 范围 1-3\n enable: true, //是否开启\n },\n sticky_column_mobile: {\n //移动端冻结前 n 列\n limit: 1, //多少列 范围 1-3\n enable: true, //是否开启\n },\n mobileStyle: \"table\", //移动端显示样式 list 纵向展开 table 横向表格\n subform_create: true, //可新增记录\n subform_insert: true, //可插入记录\n subform_edit: true, //可编辑已有记录\n subform_delete: true, //可删除已有记录\n subform_fill: true, //允许填报数据\n subform_import: true, //允许导入数据\n subform_dataload: true, //允许数据加载\n loaddataconfig: {\n //数据加载设置\n mode: \"tree\",\n extendSet: {\n sort: [\"datahelp\", \"module\", \"formEvent\"],\n status: true,\n triggerField: \"\",\n triggerFieldMode: \"none\",\n },\n },\n allowLoadData: false, //是否开启数据加载\n allowAddData: true, //允许新增数据源数据\n subformloaddataTitle: \"数据加载\", //数据加载显示的标题\n subFieldShowRules: [], //子字段显隐规则\n quick_fill: true, //从excel填报数据\n },\n description: null,\n label,\n lineWidth: 12,\n tab: null,\n };\n};\n","import { buildWidgetName } from './build-widget-name';\n\nexport const rebuildDataQuery = (truncatedJson: unknown) => {\n const { widget, label, ...rest } = (truncatedJson as any) || {};\n\n return {\n widget: {\n widgetName: buildWidgetName(),\n widgetNameAlias: \"\",\n customCls: null,\n enable: true,\n visible: true,\n allowBlank: true,\n linkFilter: {},\n rely: {\n widgets: [],\n },\n showMode: \"one\", //显示数据条数 one 一条 many 多条\n allowAdd: true, //允许新增关联表数据,只有 refType 为 form才可以选择true\n refType: \"form\", //关联表的类型,根据 linkForm 表的类型决定的。 form 表单 etl_table 视图 aggregate_table 聚合表\n showType: \"none\", //数据显示模式 none 默认 label 标题\n addExtendSet: [],\n ...widget,\n linkFields: [],\n labelStyle: label,\n type: \"linkquery\",\n },\n description: null,\n label,\n lineWidth: 6,\n tab: null,\n ...rest,\n };\n};\n","import { IField, type FieldType } from '@baishuyun/types';\nimport { rebuildText } from './rebuild-text';\nimport { rebuildNumber } from './rebuild-number';\nimport { rebuildSelect } from './rebuild-select';\nimport { rebuildRadioGroup } from './rebuild-radio-group';\nimport { rebuildDatetime } from './rebuild-date-time';\nimport { defaultBuilder } from './default-builder';\nimport { rebuildDeptGroup } from './rebuild-dept-group';\nimport { rebuildSn } from './rebuild-sn';\nimport { rebuildDept } from './rebuild-dept';\nimport { rebuildUserGroup } from './rebuild-user-group';\nimport { rebuildDataLinker } from './rebuild-data-linker';\nimport { rebuildDataLoader } from './rebuild-data-loader';\nimport { rebuildUser } from './rebuild-user';\nimport { rebuildSignature } from './rebuild-signature';\nimport { rebuildImage } from './rebuild-image';\nimport { rebuildUploader } from './rebuild-upload';\nimport { rebuildCheckboxGroup } from './rebuild-checkbox-group';\nimport { rebuildLine } from './rebuild-line';\nimport { rebuildComboChecker } from './rebuild-combo-checker';\nimport { rebuildLocation } from './rebuild-location';\nimport { rebuildTextarea } from './rebuild-textarea';\nimport { rebuildButton } from './rebuild-button';\nimport { rebuildAddress } from './rebuild-address';\nimport { rebuildSubform } from './rebuild-subform';\nimport { rebuildDataQuery } from './rebuild-data-query';\nimport { generateWidgetName } from '../field-json';\n\n/**\n * 字段类型重建工具映射\n */\nconst RebuilderMap: Record<FieldType, (origin: unknown) => unknown> = {\n address: rebuildAddress,\n button: rebuildButton,\n textarea: rebuildTextarea,\n datetime: rebuildDatetime,\n text: rebuildText,\n password: rebuildText,\n location: rebuildLocation,\n radiogroup: rebuildRadioGroup,\n radio: rebuildRadioGroup,\n combo: rebuildSelect,\n combocheck: rebuildComboChecker,\n separator: rebuildLine,\n checkboxgroup: rebuildCheckboxGroup,\n upload: rebuildUploader,\n number: rebuildNumber,\n image: rebuildImage,\n signature: rebuildSignature,\n user: rebuildUser,\n dataload: rebuildDataLoader,\n linkdata: rebuildDataLinker,\n linkquery: rebuildDataQuery,\n usergroup: rebuildUserGroup,\n subform: rebuildSubform,\n dept: rebuildDept,\n sn: rebuildSn,\n deptgroup: rebuildDeptGroup,\n flowState: defaultBuilder,\n flowstate: defaultBuilder,\n formula: defaultBuilder,\n unknown: defaultBuilder,\n};\n\n/**\n * 补全字段表示的 json 结构\n */\nexport const rebuildFieldsJsonStructure = (\n truncatedJson: Partial<IField>,\n subItemsOnly = false\n) => {\n // 校验基础结构\n if (!truncatedJson || !truncatedJson.widget || !truncatedJson.widget.type) {\n return truncatedJson;\n }\n\n // 根据字段类型选择对应的重建器\n const fieldType = (truncatedJson.widget.type as FieldType) || 'unknown';\n\n // 防止子表单内出现子表单字段,导致无限递归\n if (subItemsOnly && fieldType === 'subform') {\n return defaultBuilder(truncatedJson);\n }\n\n // 名称校验\n const isValidWidgetName = (truncatedJson?.widget?.widgetName ?? '').startsWith('_widget_');\n if (!isValidWidgetName) {\n // truncatedJson.widget.widgetName = `_widget_${Date.now()}`;\n truncatedJson.widget.widgetName = generateWidgetName();\n }\n\n const rebuilder = RebuilderMap[fieldType] || defaultBuilder;\n\n // 执行重建\n return rebuilder(truncatedJson);\n};\n","import { IChatCtx, IMcpCtx } from '@baishuyun/types';\n\nexport const getChatCtxForHuman = (ctx: IChatCtx) => {\n if (!ctx) {\n return '';\n }\n\n if (!ctx.corp?.name) {\n return '';\n }\n\n if (!ctx.user?.nickname) {\n return '';\n }\n\n return `${ctx.corp?.name} ${ctx.user?.nickname}(${ctx.user?.username}) ${ctx.appName ?? ''} ${ctx.entryName ?? ''} ${ctx.agentName ?? ''}`;\n};\n\nexport const getChatCtxForMcp = (ctx: IChatCtx) => {\n if (!ctx) {\n return '';\n }\n\n const mcpCtx: IMcpCtx = {\n corpId: ctx.corp?.id,\n userId: ctx.user._id,\n\n appName: ctx.appName,\n appId: ctx.appId,\n\n entryName: ctx.entryName,\n entryId: ctx.entryId,\n\n agentName: ctx.agentName,\n };\n\n try {\n return JSON.stringify(mcpCtx);\n } catch (e) {\n console.warn('getChatCtxForMcp error', e);\n return '';\n }\n};\n"],"names":["extractTextPartMeta","part","payload","e","IsErrorPart","IsFakeMsgPart","IsFilePart","IsQueryResultPart","GetQueryResult","result","IsFileGroupPart","p","IsLoadingPart","GetLoadingMsg","GetPartErrMsg","getMetaErrorMsg","STYLE_INJECTED_ATTR","HOST_CLONE_LAYER","wrapHostStyleText","cssText","sheet","imports","hoisted","segments","plainBuffer","flushPlain","rule","injectHostStylesIntoShadow","shadowRoot","hostElement","importLines","styleTexts","collect","el","layerImport","node","styleEl","MANAGED_STYLE","watchers","rebaseUrls","css","base","match","double","single","bare","_a","url","hostSelector","selector","serializeRules","rules","styleRule","body","snapshotStyles","root","_b","doc","snapshots","computed","properties","vars","name","media","nonce","watchStyles","existing","queued","listeners","refresh","next","s","i","listener","schedule","observer","records","record","target","timer","watcher","syncHostStylesIntoShadow","host","sources","parent","entries","marker","nodes","sync","all","entry","mount","classes","active","snapshot","source","previous","tag","link","unsubscribe","contentObserver","dispose","FONT_FACES_ATTR","CSS_FONT_FACE_RULE","injectHostFontFacesIntoShadow","fontFaces","style","isStringArray","value","item","isOptionArray","valueNormalizer","buildSubformIndex","formStructure","subforms","columnToSubform","field","widget","meta","createBatchSubformAssembler","emit","currentRow","pending","resolveColumn","subformName","fieldName","label","toRowObject","row","rowObject","cell","column","setCell","rows","flush","toEmit","nonEmpty","r","fieldType","owner","WHITE_LIST_FIELDS_SET","GetSafeFormStructure","f","createPartTypeChecker","type","createPayloadTypeChecker","specialPayload","createGetFieldJsonInfo","createFieldPartsExtractor","isTarget","safeParseJson","jsonString","isAttachmentRecord","hasValidFieldValue","generateWidgetName","prefix","now","timeStr","totalLen","fixedPart","randomPart","field2config","autoService","checked","instance","parentFieldName","rowIndex","detail","DATA_COUNT_PER_BATCH","imageUrlToBase64","mediaType","resolve","img","canvas","OPERATOR_LABEL_MAP","FIELD_TYPE_OPERATOR_LABEL_OVERRIDES","getOperatorLabel","operator","overrides","FIELD_TYPE_OPERATOR_MAP","DEFAULT_OPERATOR_MAP","getAvailableOperators","getDefaultOperator","isRecord","asRecord","isEmpty","isEqual","a","b","sa","sb","v","ka","kb","k","toDayKey","d","y","m","day","dateEqual","formValue","condValue","evaluateIn","fv","cv","evaluateAll","evaluateRange","range","formValueFormatter","originValue","isWrappedCellValue","collectSubformCellValues","childWidgetName","values","resolveConditionFormValues","widgetName","formValues","parentWidgetName","subformValue","cells","evaluateSingleValue","originFormValue","widgetType","isDateField","evaluateConditionItem","candidates","isHelperPrefMet","helper","editFields","editPref","dirtyFields","isHelperCondMet","condition","items","quantifier","results","isCtxMatch","ctx","OPERATOR_TO_BS_METHOD","BS_METHOD_TO_OPERATOR","conditionStringify2bsCondition","cond","rel","bsCondItems","_c","_d","_e","_f","method","bsConditionParse2Condition","str","bsCond","bsItem","index","formatLocalDate","date","pad","mergeConsecutiveTargets","arr","minWidth","temp","flatArr","ICON_UNICODE_MAP","getIconUnicode","code","FORM_ICON_UNICODE_MAP","promptParser","originStrWithFieldNameTpl","widgetValueGetter","widgetMap","key","metaPart","stringPart","_","virtualPrefix","isVirtual","translated","REG_EX_MAP","rebuildText","truncatedJson","labelStyle","rest","regex","buildWidgetName","baseName","idxLength","rebuildNumber","rebuildSelect","rebuildRadioGroup","rebuildDatetime","defaultBuilder","rebuildDeptGroup","rebuildSn","rebuildDept","rebuildUserGroup","rebuildDataLinker","tmpMapFields2Fields","mapFieldsFromTruncatedJson","mf","tmpMapFields2MapFields","rebuildDataLoader","rebuildUser","rebuildSignature","rebuildImage","rebuildUploader","rebuildCheckboxGroup","rebuildLine","rebuildComboChecker","rebuildLocation","rebuildTextarea","rebuildButton","rebuildAddress","rebuildSubform","originObj","rebuildFieldsJsonStructure","rebuildDataQuery","RebuilderMap","subItemsOnly","getChatCtxForHuman","_g","_h","getChatCtxForMcp","mcpCtx"],"mappings":"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"}