@supos-grid-table/core 0.1.0-alpha.1 → 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"react.mjs","names":["FilterIcon"],"sources":["../src/client.ts","../src/react.tsx"],"sourcesContent":["import { TableError, type Base, type Commit, type Snapshot } from './model';\nimport type { Presence } from './server';\n\nexport type LiveSnapshot = Snapshot & { errors: Record<string, string>; online: Presence[] };\nexport class TableClient {\n constructor(readonly endpoint = '/api/multitable') {}\n private async request(path: string, method = 'GET', body?: unknown): Promise<LiveSnapshot> {\n const response = await fetch(`${this.endpoint.replace(/\\/$/, '')}/${path}`, {\n method, credentials: 'same-origin', cache: 'no-store',\n headers: body === undefined ? {} : { 'Content-Type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n const payload = await response.json();\n if (!response.ok) throw new TableError(payload.error ?? 'request_failed', payload.message ?? '请求失败', response.status, payload.details);\n return payload;\n }\n snapshot() { return this.request('snapshot'); }\n commit(commit: Commit) { return this.request('commits', 'POST', commit); }\n configure(base: Base, expectedVersion: string) { return this.request('base', 'PUT', { base, expectedVersion }); }\n presence(presence: Partial<Presence>) { return this.request('presence', 'POST', presence); }\n subscribe(onInvalidate: () => void, onPresence: (online: Presence[]) => void, onConnection: (connected: boolean) => void) {\n const events = new EventSource(`${this.endpoint.replace(/\\/$/, '')}/events`, { withCredentials: true });\n events.addEventListener('ready', () => { onConnection(true); onInvalidate(); });\n events.addEventListener('invalidate', onInvalidate);\n events.addEventListener('presence', (event) => { onPresence(JSON.parse((event as MessageEvent).data)); });\n events.onerror = () => onConnection(false);\n return () => { events.close(); onConnection(false); };\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState, type FormEvent } from 'react';\nimport { Plus, Search, SlidersHorizontal, ArrowDownUp, Filter as FilterIcon, ChevronDown, Table2, Columns3, CalendarDays, ClipboardList, ChartNoAxesCombined, Undo2, Redo2, Download, X, Link2, Hash, Type, Braces, Trash2, Database, Check, AlertTriangle } from 'lucide-react';\nimport { Grid, CellType, RowControlType, type ICell, type IGridColumn, type CombinedSelection, type IInnerCell } from './grid';\nimport { TableClient, type LiveSnapshot } from './client';\nimport { displayValue, groupRows, queryRows, summarize } from './query';\nimport { copyTemplate, isComputed, TableError, type Base, type CellValue, type Dataset, type Field, type Mutation, type Row, type Table, type Values, type View } from './model';\nimport type { Presence } from './server';\nexport { TableClient } from './client';\n\nconst viewIcons = { grid: Table2, kanban: Columns3, form: ClipboardList, calendar: CalendarDays, dashboard: ChartNoAxesCombined };\nconst viewNames = { grid: '表格', kanban: '看板', form: '填报', calendar: '日历', dashboard: '统计' };\nconst editableValues = (table: Table, values: Values): Values => Object.fromEntries(table.fields.filter((f) => !f.readonly && !isComputed(f)).map((f) => [f.id, values[f.id] ?? null]));\nfunction inverse(mutations: Mutation[], before: Dataset, after: Dataset, base: Base): Mutation[] {\n return mutations.map((mutation): Mutation => {\n const table = base.tables.find((t) => t.id === mutation.tableId)!;\n const previous = before[table.id]?.find((r) => r.id === mutation.id);\n const current = after[table.id]?.find((r) => r.id === mutation.id);\n if (mutation.type === 'create') return { type: 'delete', tableId: table.id, id: mutation.id, expectedVersion: current!.version };\n if (mutation.type === 'delete') return { type: 'create', tableId: table.id, id: mutation.id, values: editableValues(table, previous!.values) };\n return { type: 'update', tableId: table.id, id: mutation.id, expectedVersion: current!.version, values: Object.fromEntries(Object.keys(mutation.values).map((id) => [id, previous!.values[id] ?? null])) };\n });\n}\nconst initialValue = (field: Field): CellValue => field.type === 'multiSelect' || field.type === 'relation' ? [] : field.type === 'boolean' ? false : null;\n\nfunction cell(field: Field, value: CellValue | undefined, readonly: boolean): ICell {\n const common = { readonly: readonly || field.readonly || isComputed(field), displayData: displayValue(value) };\n if (field.type === 'number') return { ...common, type: CellType.Number, data: typeof value === 'number' ? value : null };\n if (field.type === 'boolean') return { ...common, type: CellType.Boolean, data: value === true };\n if (field.type === 'select' || field.type === 'multiSelect') return {\n ...common, displayData: (Array.isArray(value) ? value : value ? [value] : []).map(String), type: CellType.Select, data: (Array.isArray(value) ? value : value ? [value] : []).map(String),\n isMultiple: field.type === 'multiSelect', choiceSorted: (field.options ?? []).map((name) => ({ id: name, name })),\n choiceMap: Object.fromEntries((field.options ?? []).map((name, i) => [name, { id: name, name, color: ['#0f766e', '#1d4ed8', '#9a3412'][i % 3], backgroundColor: ['#ccfbf1', '#dbeafe', '#ffedd5'][i % 3] }])),\n };\n // Date and relation use the typed detail form, never a text-only grid editor.\n return { ...common, readonly: common.readonly || field.type === 'relation' || field.type === 'date', type: CellType.Text, data: displayValue(value), isWrap: field.type === 'textarea' };\n}\nfunction fromCell(field: Field, value: IInnerCell): CellValue {\n const raw = value.data as unknown;\n if (field.type === 'select') return raw === null ? null : typeof raw === 'object' && !Array.isArray(raw) ? String((raw as { title: string }).title) : String(raw);\n if (field.type === 'multiSelect') return Array.isArray(raw) ? raw.map((v) => typeof v === 'string' ? v : String(v.title)) : [];\n return raw as CellValue;\n}\n\nfunction Modal({ title, close, children, error }: { title: string; close: () => void; children: React.ReactNode; error?: string }) {\n const ref = useRef<HTMLDialogElement>(null);\n useEffect(() => { ref.current?.showModal(); return () => ref.current?.close(); }, []);\n return <dialog className=\"sg-modal\" ref={ref} onCancel={(event) => { event.preventDefault(); close(); }}>\n <header><h2>{title}</h2><button type=\"button\" aria-label=\"关闭\" onClick={close}><X size={18} /></button></header>{error && <p className=\"sg-error\" role=\"alert\">{error}</p>}{children}\n </dialog>;\n}\n\nfunction FieldInput({ field, value, set, snapshot }: { field: Field; value: CellValue; set: (v: CellValue) => void; snapshot: LiveSnapshot }) {\n if (isComputed(field) || field.readonly) return <output>{displayValue(value) || '保存后计算'}</output>;\n if (field.type === 'boolean') return <input aria-label={field.name} type=\"checkbox\" checked={value === true} onChange={(e) => set(e.target.checked)} />;\n if (field.type === 'textarea') return <textarea aria-label={field.name} rows={3} value={String(value ?? '')} onChange={(e) => set(e.target.value)} />;\n if (field.type === 'select' || field.type === 'multiSelect' || field.type === 'relation') {\n const multiple = field.type === 'multiSelect' || (field.type === 'relation' && field.relation?.multiple);\n const target = snapshot.base.tables.find((t) => t.id === field.relation?.tableId);\n const options = field.type === 'relation' ? (snapshot.records[target?.id ?? ''] ?? []).map((r) => ({ id: r.id, label: displayValue(r.values[target?.fields[0].id ?? '']) || r.id })) : (field.options ?? []).map((o) => ({ id: o, label: o }));\n return <select aria-label={field.name} multiple={!!multiple} required={field.required} value={multiple ? (Array.isArray(value) ? value.map(String) : []) : Array.isArray(value) ? String(value[0] ?? '') : String(value ?? '')}\n onChange={(e) => set(multiple ? Array.from(e.target.selectedOptions, (o) => o.value) : field.type === 'relation' ? e.target.value ? [e.target.value] : [] : e.target.value || null)}>\n {!multiple && <option value=\"\">请选择</option>}{options.map((o) => <option key={o.id} value={o.id}>{o.label}</option>)}\n </select>;\n }\n return <input aria-label={field.name} type={field.type === 'number' ? 'number' : field.type === 'date' ? 'date' : 'text'} step={field.type === 'number' ? 'any' : undefined} required={field.required}\n value={value === null ? '' : String(value)} onChange={(e) => set(e.target.value === '' ? null : field.type === 'number' ? Number(e.target.value) : e.target.value)} />;\n}\n\nfunction RecordForm({ table, snapshot, row, busy, onSave, onDelete, error }: { table: Table; snapshot: LiveSnapshot; row?: Row; busy: boolean; onSave: (values: Values, related: Mutation[]) => Promise<boolean>; onDelete?: () => void; error?: string }) {\n const [values, setValues] = useState<Values>(() => row ? structuredClone(row.values) : Object.fromEntries(table.fields.map((f) => [f.id, initialValue(f)])));\n const [saved, setSaved] = useState(false);\n const [related, setRelated] = useState<Mutation[]>([]);\n const [relationDraft, setRelationDraft] = useState<Field>();\n const childTable = snapshot.base.tables.find((t) => t.id === relationDraft?.relation?.tableId);\n const draftSnapshot = { ...snapshot, records: structuredClone(snapshot.records) };\n for (const mutation of related) if (mutation.type === 'create') (draftSnapshot.records[mutation.tableId] ??= []).push({ id: mutation.id, version: 'draft', values: mutation.values });\n async function submit(event: FormEvent) {\n event.preventDefault(); setSaved(false);\n if (await onSave(editableValues(table, values), related)) {\n setSaved(true);\n setRelated([]);\n if (!row) setValues(Object.fromEntries(table.fields.map((f) => [f.id, initialValue(f)])));\n }\n }\n return <><form className=\"sg-record-form\" onSubmit={(event) => void submit(event)}>\n <p className=\"sg-muted\">{row ? '修改将校验打开记录时的版本,其他人的更新会提示冲突。' : '按数据模型填写,保存成功后可在所有视图查看。'}</p>\n {error && <p role=\"alert\" className=\"sg-error\">{error}。待提交内容已保留。</p>}\n {table.fields.map((field) => <label key={field.id}><span>{field.name}{field.required && <b className=\"sg-required\"> *</b>}{isComputed(field) && <small> 自动计算</small>}</span>\n <FieldInput field={field} value={values[field.id] ?? null} set={(v) => { setSaved(false); setValues((s) => ({ ...s, [field.id]: v })); }} snapshot={draftSnapshot} />\n {field.type === 'relation' && !field.readonly && <button type=\"button\" disabled={!snapshot.capabilities.atomicBatch || busy} onClick={() => setRelationDraft(field)}><Plus size={13} />新增关联记录(随本次填报保存)</button>}\n </label>)}\n <footer>{onDelete && <button type=\"button\" className=\"sg-danger\" disabled={busy} onClick={onDelete}><Trash2 size={15} />删除记录</button>}\n {saved && <span role=\"status\" className=\"sg-success\"><Check size={15} />已保存</span>}\n <button className=\"sg-primary\" type=\"submit\" disabled={busy || !snapshot.capabilities.write}>{busy ? '保存中…' : '保存记录'}</button></footer>\n </form>{relationDraft && childTable && <Modal title={`新增关联记录 · ${childTable.name}`} close={() => setRelationDraft(undefined)}>\n <RecordForm table={childTable} snapshot={draftSnapshot} busy={false} onSave={async (childValues, children) => {\n const id = crypto.randomUUID();\n setRelated((s) => [...s, ...children, { type: 'create', tableId: childTable.id, id, values: childValues }]);\n setValues((s) => ({ ...s, [relationDraft.id]: relationDraft.relation?.multiple ? [...(Array.isArray(s[relationDraft.id]) ? s[relationDraft.id] as string[] : []), id] : [id] }));\n setRelationDraft(undefined); return true;\n }} />\n </Modal>}</>;\n}\n\nfunction SchemaEditor({ snapshot, table, save, close, error }: { snapshot: LiveSnapshot; table: Table; save: (base: Base) => Promise<boolean>; close: () => void; error?: string }) {\n const [base, setBase] = useState(() => structuredClone(snapshot.base));\n const draft = base.tables.find((t) => t.id === table.id)!;\n function update() { setBase(structuredClone(base)); }\n return <Modal title=\"字段与 UNS 绑定\" close={close} error={error}><form className=\"sg-schema\" onSubmit={async (e) => { e.preventDefault(); if (await save(base)) close(); }}>\n <p className=\"sg-muted\">字段引用使用稳定 ID。绑定仅配置映射,实际读写由已接入的 UNS 适配器执行。</p>\n <label>数据表名称<input required value={draft.name} onChange={(e) => { draft.name = e.target.value; update(); }} /></label>\n <div className=\"sg-schema-fields\">{draft.fields.map((field) => <fieldset key={field.id}>\n <div className=\"sg-field-heading\"><code>{field.id}</code><button type=\"button\" title={`删除字段 ${field.name}`} onClick={() => {\n if (!confirm(`删除字段“${field.name}”的应用配置?关联公式和视图也需要调整。`)) return;\n draft.fields = draft.fields.filter((f) => f.id !== field.id); update();\n }}><Trash2 size={14} /></button></div>\n <label>名称<input required value={field.name} onChange={(e) => { field.name = e.target.value; update(); }} /></label>\n <label>类型<select value={field.type} onChange={(e) => { field.type = e.target.value as Field['type']; if (['select', 'multiSelect'].includes(field.type)) field.options ??= []; update(); }}>\n {(['text', 'textarea', 'number', 'boolean', 'date', 'select', 'multiSelect', 'relation', 'formula', 'lookup', 'rollup'] as const).map((kind) => <option key={kind}>{kind}</option>)}\n </select></label>\n <label className=\"sg-check\"><input type=\"checkbox\" checked={!!field.required} onChange={(e) => { field.required = e.target.checked; update(); }} />必填</label>\n <label className=\"sg-check\"><input type=\"checkbox\" checked={!!field.readonly} onChange={(e) => { field.readonly = e.target.checked; update(); }} />只读</label>\n {(field.type === 'select' || field.type === 'multiSelect') && <label>选项(每行一个)<textarea value={(field.options ?? []).join('\\n')} onChange={(e) => { field.options = e.target.value.split('\\n'); update(); }} /></label>}\n {field.type === 'formula' && <label>公式<textarea placeholder=\"IF({status} = '已过账', {quantity}, 0)\" value={field.formula ?? ''} onChange={(e) => { field.formula = e.target.value; update(); }} /></label>}\n {field.type === 'relation' && <><label>关联表<select value={field.relation?.tableId ?? ''} onChange={(e) => { field.relation = { tableId: e.target.value, multiple: field.relation?.multiple ?? true }; update(); }}><option value=\"\">请选择</option>{base.tables.map((t) => <option value={t.id} key={t.id}>{t.name}</option>)}</select></label>\n <label className=\"sg-check\"><input type=\"checkbox\" checked={field.relation?.multiple ?? true} onChange={(e) => { field.relation = { tableId: field.relation?.tableId ?? '', multiple: e.target.checked }; update(); }} />允许关联多个记录</label></>}\n {(field.type === 'lookup' || field.type === 'rollup') && <><label>关联字段 ID<input value={field.lookup?.relationFieldId ?? ''} onChange={(e) => { field.lookup = { ...field.lookup, targetFieldId: field.lookup?.targetFieldId ?? '', relationFieldId: e.target.value }; update(); }} /></label>\n <label>目标字段 ID<input value={field.lookup?.targetFieldId ?? ''} onChange={(e) => { field.lookup = { ...field.lookup, relationFieldId: field.lookup?.relationFieldId ?? '', targetFieldId: e.target.value }; update(); }} /></label>\n {field.type === 'rollup' && <label>汇总<select value={field.lookup?.aggregate ?? 'sum'} onChange={(e) => { field.lookup = { ...field.lookup!, aggregate: e.target.value as NonNullable<Field['lookup']>['aggregate'] }; update(); }}>{['sum', 'count', 'min', 'max', 'average'].map((s) => <option key={s}>{s}</option>)}</select></label>}</>}\n </fieldset>)}</div>\n <button type=\"button\" onClick={() => { draft.fields.push({ id: `f_${crypto.randomUUID().slice(0, 8)}`, name: '新字段', type: 'text' }); update(); }}><Plus size={16} />新增字段</button>\n <details><summary>UNS 数据绑定</summary><label>UNS alias<input value={draft.binding?.alias ?? ''} onChange={(e) => { draft.binding = { alias: e.target.value, fieldMap: draft.binding?.fieldMap ?? {} }; update(); }} /></label>\n {draft.fields.filter((f) => !isComputed(f)).map((f) => <label key={f.id}>{f.name}<input placeholder=\"UNS 字段名\" value={draft.binding?.fieldMap[f.id] ?? ''} onChange={(e) => { draft.binding ??= { alias: '', fieldMap: {} }; if (e.target.value) draft.binding.fieldMap[f.id] = e.target.value; else delete draft.binding.fieldMap[f.id]; update(); }} /></label>)}\n </details><footer><button type=\"submit\" className=\"sg-primary\">保存配置</button></footer>\n </form></Modal>;\n}\n\nfunction ViewEditor({ view, table, save, close, error }: { view: View; table: Table; save: (view: View) => Promise<boolean>; close: () => void; error?: string }) {\n const [draft, setDraft] = useState(() => structuredClone(view));\n return <Modal title=\"视图设置\" close={close} error={error}><form className=\"sg-view-editor\" onSubmit={async (e) => { e.preventDefault(); if (await save(draft)) close(); }}>\n <label>名称<input required value={draft.name} onChange={(e) => setDraft({ ...draft, name: e.target.value })} /></label>\n <label>视图类型<select value={draft.type} onChange={(e) => setDraft({ ...draft, type: e.target.value as View['type'] })}>{Object.entries(viewNames).map(([id, name]) => <option key={id} value={id}>{name}</option>)}</select></label>\n <label>分组字段<select value={draft.groupBy ?? ''} onChange={(e) => setDraft({ ...draft, groupBy: e.target.value || undefined })}><option value=\"\">不分组</option>{table.fields.map((f) => <option value={f.id} key={f.id}>{f.name}</option>)}</select></label>\n <label>日历日期字段<select value={draft.dateFieldId ?? ''} onChange={(e) => setDraft({ ...draft, dateFieldId: e.target.value || undefined })}><option value=\"\">请选择</option>{table.fields.filter((f) => f.type === 'date').map((f) => <option value={f.id} key={f.id}>{f.name}</option>)}</select></label>\n <label>冻结列数<input type=\"number\" min={0} max={table.fields.length} value={draft.freezeColumns ?? 1} onChange={(e) => setDraft({ ...draft, freezeColumns: Number(e.target.value) })} /></label>\n <fieldset><legend>显示字段</legend>{table.fields.map((f) => <label className=\"sg-check\" key={f.id}><input type=\"checkbox\" checked={!draft.hiddenFields?.includes(f.id)} onChange={(e) => setDraft({ ...draft, hiddenFields: e.target.checked ? (draft.hiddenFields ?? []).filter((id) => id !== f.id) : [...(draft.hiddenFields ?? []), f.id] })} />{f.name}</label>)}</fieldset>\n <fieldset><legend>筛选(同时满足)</legend>{(draft.filters ?? []).map((filter, index) => <div className=\"sg-filter-line\" key={index}>\n <select aria-label=\"筛选字段\" value={filter.fieldId} onChange={(e) => { draft.filters![index].fieldId = e.target.value; setDraft(structuredClone(draft)); }}>{table.fields.map((f) => <option key={f.id} value={f.id}>{f.name}</option>)}</select>\n <select aria-label=\"筛选方式\" value={filter.op} onChange={(e) => { draft.filters![index].op = e.target.value as typeof filter.op; setDraft(structuredClone(draft)); }}>{['eq', 'neq', 'contains', 'gt', 'gte', 'lt', 'lte', 'empty'].map((op) => <option key={op}>{op}</option>)}</select>\n <input aria-label=\"筛选值\" value={displayValue(filter.value)} onChange={(e) => { const f = table.fields.find((f) => f.id === filter.fieldId); draft.filters![index].value = f?.type === 'number' ? Number(e.target.value) : f?.type === 'boolean' ? e.target.value === 'true' : e.target.value; setDraft(structuredClone(draft)); }} />\n <button type=\"button\" aria-label=\"移除筛选\" onClick={() => setDraft({ ...draft, filters: draft.filters!.filter((_, i) => i !== index) })}><X size={15} /></button>\n </div>)}<button type=\"button\" onClick={() => setDraft({ ...draft, filters: [...(draft.filters ?? []), { fieldId: table.fields[0].id, op: 'contains', value: '' }] })}>添加条件</button></fieldset>\n <label>排序字段<select value={draft.sorts?.[0]?.fieldId ?? ''} onChange={(e) => setDraft({ ...draft, sorts: e.target.value ? [{ fieldId: e.target.value, direction: draft.sorts?.[0]?.direction ?? 'asc' }] : [] })}><option value=\"\">默认顺序</option>{table.fields.map((f) => <option value={f.id} key={f.id}>{f.name}</option>)}</select></label>\n <label>方向<select value={draft.sorts?.[0]?.direction ?? 'asc'} onChange={(e) => setDraft({ ...draft, sorts: draft.sorts?.map((s) => ({ ...s, direction: e.target.value as 'asc' | 'desc' })) })}><option value=\"asc\">升序</option><option value=\"desc\">降序</option></select></label>\n <footer><button className=\"sg-primary\" type=\"submit\">保存视图</button></footer>\n </form></Modal>;\n}\n\nfunction CalendarView({ rows, view, table, open }: { rows: Row[]; view: View; table: Table; open: (row: Row) => void }) {\n const [month, setMonth] = useState(() => new Date().toLocaleDateString('sv-SE', { timeZone: 'Asia/Shanghai' }).slice(0, 7));\n const dateField = view.dateFieldId ?? table.fields.find((f) => f.type === 'date')?.id;\n if (!dateField) return <p className=\"sg-empty\">请在视图设置中选择日期字段。</p>;\n const [year, mm] = month.split('-').map(Number);\n const days = new Date(Date.UTC(year, mm, 0)).getUTCDate();\n const padding = new Date(Date.UTC(year, mm - 1, 1)).getUTCDay();\n return <section className=\"sg-calendar\"><label>月份<input aria-label=\"日历月份\" type=\"month\" value={month} onChange={(e) => { if (e.target.value) setMonth(e.target.value); }} /></label>\n <div className=\"sg-calendar-grid\">{['日', '一', '二', '三', '四', '五', '六'].map((d) => <strong key={d}>{d}</strong>)}\n {Array.from({ length: padding }, (_, i) => <div key={`p${i}`} className=\"sg-calendar-padding\" />)}\n {Array.from({ length: days }, (_, i) => { const date = `${month}-${String(i + 1).padStart(2, '0')}`; return <div className=\"sg-calendar-day\" key={date}><span>{i + 1}</span>{rows.filter((r) => r.values[dateField] === date).map((r) => <button key={r.id} onClick={() => open(r)}>{displayValue(r.values[table.fields[0].id]) || r.id}</button>)}</div>; })}\n </div></section>;\n}\n\nexport function MultiTableApp({ endpoint = '/api/multitable', client: suppliedClient }: { endpoint?: string; client?: TableClient }) {\n const client = useMemo(() => suppliedClient ?? new TableClient(endpoint), [endpoint, suppliedClient]);\n const [snapshot, setSnapshot] = useState<LiveSnapshot>();\n const [tableId, setTableId] = useState(''), [viewId, setViewId] = useState('');\n const [search, setSearch] = useState(''), [error, setError] = useState('');\n const [busy, setBusy] = useState(false), [connected, setConnected] = useState(false);\n const [online, setOnline] = useState<Presence[]>([]);\n const [record, setRecord] = useState<Row | 'new'>();\n const [schemaOpen, setSchemaOpen] = useState(false), [viewDraft, setViewDraft] = useState<View>();\n const [pending, setPending] = useState<Mutation[]>();\n const [undo, setUndo] = useState<Mutation[][]>([]), [redo, setRedo] = useState<Mutation[][]>([]);\n const sequence = useRef(0), busyRef = useRef(false), clientId = useRef(crypto.randomUUID());\n const selection = useRef<CombinedSelection | null>(null);\n const snapshotRef = useRef(snapshot); snapshotRef.current = snapshot;\n const refresh = useCallback(async () => {\n const request = ++sequence.current;\n try { const result = await client.snapshot(); if (request === sequence.current) { setSnapshot(result); setOnline(result.online); } }\n catch (e) { if (request === sequence.current) setError(e instanceof Error ? e.message : '加载失败'); }\n }, [client]);\n useEffect(() => {\n void refresh();\n const unsubscribe = client.subscribe(() => { if (!busyRef.current) void refresh(); }, setOnline, setConnected);\n return () => { ++sequence.current; unsubscribe(); };\n }, [client, refresh]);\n const table = snapshot?.base.tables.find((t) => t.id === tableId) ?? snapshot?.base.tables[0];\n const view = table?.views.find((v) => v.id === viewId) ?? table?.views[0];\n useEffect(() => {\n if (!table) return;\n const ping = () => void client.presence({ clientId: clientId.current, tableId: table.id }).catch(() => {});\n ping(); const timer = setInterval(ping, 20000); return () => clearInterval(timer);\n }, [client, table?.id]);\n useEffect(() => { selection.current = null; }, [table?.id, view?.id]);\n async function commit(mutations: Mutation[], history: 'normal' | 'undo' | 'redo' = 'normal'): Promise<boolean> {\n if (!snapshotRef.current || busyRef.current) return false;\n const before = snapshotRef.current;\n busyRef.current = true; setBusy(true); setError(''); ++sequence.current;\n try {\n const result = await client.commit({ id: crypto.randomUUID(), mutations });\n const reversal = inverse(mutations, before.records, result.records, before.base);\n setSnapshot(result); setPending(undefined);\n if (history === 'normal') { setUndo((s) => [...s.slice(-49), reversal]); setRedo([]); }\n else if (history === 'undo') { setUndo((s) => s.slice(0, -1)); setRedo((s) => [...s, reversal]); }\n else { setRedo((s) => s.slice(0, -1)); setUndo((s) => [...s, reversal]); }\n return true;\n } catch (e) {\n setPending(mutations); setError(e instanceof Error ? e.message : '提交失败');\n return false;\n } finally { busyRef.current = false; setBusy(false); }\n }\n async function configure(base: Base) {\n if (!snapshot || busyRef.current) return false;\n busyRef.current = true; setBusy(true); ++sequence.current;\n try { setSnapshot(await client.configure(base, snapshot.base.version)); setError(''); setUndo([]); setRedo([]); return true; }\n catch (e) { setError(e instanceof Error ? e.message : '保存失败'); return false; }\n finally { busyRef.current = false; setBusy(false); }\n }\n if (!snapshot || !table || !view) return <div className=\"sg-app sg-loading\"><Database size={32} /><p>{error || '正在加载多维表格…'}</p>{error && <button onClick={() => void refresh()}>重新加载</button>}</div>;\n const readonly = !snapshot.capabilities.write || !snapshot.capabilities.conditionalWrite;\n const rows = queryRows(snapshot.records[table.id] ?? [], view, search);\n const fields = table.fields.filter((f) => !view.hiddenFields?.includes(f.id)).sort((a, b) => {\n const order = view.fieldOrder ?? table.fields.map((f) => f.id); return order.indexOf(a.id) - order.indexOf(b.id);\n });\n const groups = groupRows(rows, view.groupBy);\n const columns: IGridColumn[] = fields.map((f) => ({ id: f.id, name: f.name, width: view.widths?.[f.id] ?? 170 }));\n const getSelection = (selected: CombinedSelection, rowCount = rows.length) => {\n const expand = (ranges: [number, number][], limit: number) => ranges.flatMap(([a, b]) => Array.from({ length: Math.max(0, Math.min(b, limit - 1) - Math.max(a, 0) + 1) }, (_, i) => i + Math.max(a, 0)));\n if (selected.isNoneSelection) return { columns: [], rows: [] };\n const [first, last] = selected.ranges;\n const x = selected.isCellSelection ? [[Math.min(first[0], last[0]), Math.max(first[0], last[0])] as [number, number]] : selected.isColumnSelection ? selected.ranges : [[0, fields.length - 1] as [number, number]];\n const y = selected.isCellSelection ? [[Math.min(first[1], last[1]), Math.max(first[1], last[1])] as [number, number]] : selected.isRowSelection ? selected.ranges : [[0, rowCount - 1] as [number, number]];\n return { columns: expand(x, fields.length), rows: expand(y, rowCount) };\n };\n const saveView = (next: View) => {\n const base = structuredClone(snapshot.base), target = base.tables.find((t) => t.id === table.id)!;\n const index = target.views.findIndex((v) => v.id === next.id);\n if (index < 0) target.views.push(next); else target.views[index] = next;\n return configure(base);\n };\n const updateRow = (row: Row, values: Values) => commit([{ type: 'update', tableId: table.id, id: row.id, expectedVersion: row.version, values }]);\n function download(name: string, text: string, type: string) {\n const url = URL.createObjectURL(new Blob([text], { type })); const link = document.createElement('a'); link.href = url; link.download = name; link.click(); setTimeout(() => URL.revokeObjectURL(url), 1000);\n }\n function exportCsv() {\n // Neutralize spreadsheet formula injection in exported free text.\n const escape = (s: string) => `\"${(/^[=+\\-@\\t\\r]/.test(s) ? \"'\" + s : s).replaceAll('\"', '\"\"')}\"`;\n download(`${table!.name}.csv`, '\\uFEFF' + [fields.map((f) => escape(f.name)).join(','), ...rows.map((r) => fields.map((f) => escape(displayValue(r.values[f.id]))).join(','))].join('\\r\\n'), 'text/csv;charset=utf-8');\n }\n function board() {\n const grouping = view!.groupBy ?? table!.fields.find((f) => f.type === 'select')?.id;\n const buckets = groupRows(rows, grouping);\n const groupingField = table!.fields.find((f) => f.id === grouping);\n for (const option of groupingField?.options ?? []) if (!buckets.has(option)) buckets.set(option, []);\n return <div className=\"sg-kanban\">{[...buckets].map(([name, records]) => <section key={name} onDragOver={(e) => { if (!readonly && groupingField?.type === 'select') e.preventDefault(); }} onDrop={(e) => {\n e.preventDefault(); const id = e.dataTransfer.getData('text/plain'); const row = rows.find((r) => r.id === id);\n if (row && groupingField?.type === 'select' && groupingField.options?.includes(name)) void updateRow(row, { [groupingField.id]: name });\n }}><h3><i />{name}<small>{records.length}</small></h3>{records.map((row) => <button className=\"sg-card\" draggable={!readonly && groupingField?.type === 'select'} onDragStart={(e) => e.dataTransfer.setData('text/plain', row.id)} key={row.id} onClick={() => setRecord(row)}><strong>{displayValue(row.values[table!.fields[0].id]) || '未命名记录'}</strong>{fields.slice(1, 5).map((f) => <span key={f.id}><small>{f.name}</small>{displayValue(row.values[f.id]) || '—'}</span>)}</button>)}</section>)}</div>;\n }\n function grid(gridRows: Row[], groupName?: string) {\n return <div className=\"sg-grid-section\" key={groupName ?? 'all'}>{groupName && <h3 className=\"sg-group-title\"><ChevronDown size={14} /><span>{groupName}</span><small>{gridRows.length} 条记录</small></h3>}\n <div className=\"sg-grid\" style={{ height: groupName ? Math.min(480, 78 + gridRows.length * 36) : '100%' }}>\n <Grid columns={columns} rowCount={gridRows.length} rowHeight={36} freezeColumnCount={view!.freezeColumns ?? 1}\n collaborators={online.filter((p) => p.clientId !== clientId.current && p.tableId === table!.id && p.fieldId && p.rowId).map((p, index) => ({\n activeCellId: [p.rowId!, p.fieldId!] as [string, string], activeCell: [fields.findIndex((f) => f.id === p.fieldId), gridRows.findIndex((r) => r.id === p.rowId)] as [number, number],\n user: { id: p.userId, name: p.name }, borderColor: ['#e59b44', '#6293cf', '#b575b6'][index % 3], timeStamp: p.expiresAt - 45000,\n })).filter((p) => p.activeCell[0] >= 0 && p.activeCell[1] >= 0)}\n rowControls={[{ type: RowControlType.Expand }]} getCellContent={([col, row]) => !fields[col] || !gridRows[row] ? { type: CellType.Loading } : cell(fields[col], gridRows[row].values[fields[col].id], readonly || busy)}\n onCellEdited={([col, row], value) => void updateRow(gridRows[row], { [fields[col].id]: fromCell(fields[col], value) })}\n onRowExpand={(index) => setRecord(gridRows[index])} onRowAppend={readonly ? undefined : () => setRecord('new')}\n onColumnHeaderMenuClick={() => setSchemaOpen(true)} onColumnHeaderDblClick={() => setSchemaOpen(true)}\n onColumnResize={(_column, width, index) => void saveView({ ...view!, widths: { ...view!.widths, [fields[index].id]: Math.round(width) } })}\n onColumnFreeze={(count) => void saveView({ ...view!, freezeColumns: count })}\n onColumnOrdered={(drag, drop) => {\n const order = fields.map((f) => f.id), moving = order.filter((_, i) => drag.includes(i));\n const rest = order.filter((_, i) => !drag.includes(i)); rest.splice(drop, 0, ...moving); void saveView({ ...view!, fieldOrder: rest });\n }}\n onSelectionChanged={(selected) => {\n selection.current = selected;\n const pos = getSelection(selected, gridRows.length); const row = gridRows[pos.rows[0]], field = fields[pos.columns[0]];\n if (row && field) void client.presence({ clientId: clientId.current, tableId: table!.id, rowId: row.id, fieldId: field.id }).catch(() => {});\n }}\n onUndo={() => { if (undo.length) void commit(undo[undo.length - 1], 'undo'); }} onRedo={() => { if (redo.length) void commit(redo[redo.length - 1], 'redo'); }}\n onCopy={(selected, event) => {\n const pos = getSelection(selected, gridRows.length); event.preventDefault();\n event.clipboardData.setData('text/plain', pos.rows.map((ri) => pos.columns.map((ci) => displayValue(gridRows[ri]?.values[fields[ci].id]).replace(/[\\t\\r\\n]/g, ' ')).join('\\t')).join('\\n'));\n }}\n onPaste={(selected, event) => {\n if (readonly) return; event.preventDefault(); const pos = getSelection(selected, gridRows.length);\n const startCol = pos.columns[0], startRow = pos.rows[0]; if (startCol === undefined || startRow === undefined) return;\n const lines = event.clipboardData.getData('text/plain').replace(/\\r\\n/g, '\\n').replace(/\\n$/, '').split('\\n');\n const mutations: Mutation[] = [];\n try {\n for (let ri = 0; ri < lines.length; ri++) {\n const target = gridRows[startRow + ri]; if (!target) throw new TableError('paste_range', '粘贴范围超过现有记录,请先新增记录');\n const values: Values = {};\n lines[ri].split('\\t').forEach((text, ci) => {\n const field = fields[startCol + ci];\n if (!field || isComputed(field) || field.readonly) throw new TableError('paste_field', '粘贴范围含不存在或只读字段');\n if (field.type === 'relation' || field.type === 'multiSelect') throw new TableError('paste_field', '关联和多选字段请通过记录详情编辑');\n values[field.id] = text === '' ? null : field.type === 'number' ? Number(text) : field.type === 'boolean' ? ['是', 'true', '1'].includes(text) : text;\n });\n mutations.push({ type: 'update', tableId: table!.id, id: target.id, expectedVersion: target.version, values });\n }\n void commit(mutations);\n } catch (e) { setError(e instanceof Error ? e.message : '粘贴失败'); }\n }}\n onDelete={(selected) => {\n if (readonly) return; const pos = getSelection(selected, gridRows.length);\n void commit(pos.rows.map((ri) => ({ type: 'update', tableId: table!.id, id: gridRows[ri].id, expectedVersion: gridRows[ri].version, values: Object.fromEntries(pos.columns.filter((ci) => !isComputed(fields[ci]) && !fields[ci].readonly).map((ci) => [fields[ci].id, initialValue(fields[ci])])) })));\n }}\n theme={{ cellLineColor: '#e6ebef', cellTextColor: '#243542', cellLineColorActived: '#0e8477', fontFamily: '\"Microsoft YaHei\", \"PingFang SC\", sans-serif', columnHeaderBg: '#f8fafb' }}\n />\n </div></div>;\n }\n return <main className=\"sg-app\">\n <aside className=\"sg-sidebar\"><div className=\"sg-brand\"><span className=\"sg-brand-icon\"><Database size={20} /></span><div><strong>{snapshot.base.name}</strong><small>supOS · 多维表格</small></div></div>\n <p className=\"sg-nav-caption\">数据表 <span>{snapshot.base.tables.length}</span></p><nav aria-label=\"数据表\">{snapshot.base.tables.map((t) => <button className={t.id === table.id ? 'active' : ''} key={t.id} onClick={() => { setTableId(t.id); setViewId(''); setSearch(''); setRecord(undefined); }}><Table2 size={16} /><span>{t.name}</span><small>{snapshot.records[t.id]?.length ?? 0}</small></button>)}</nav>\n <button className=\"sg-add-table\" onClick={async () => {\n const name = prompt('新数据表名称'); if (!name?.trim()) return;\n const id = `t_${crypto.randomUUID().slice(0, 8)}`, base = structuredClone(snapshot.base);\n base.tables.push({ id, name, fields: [{ id: 'name', name: '名称', type: 'text', required: true }], views: [{ id: 'grid', name: '全部记录', type: 'grid' }] });\n if (await configure(base)) setTableId(id);\n }}><Plus size={15} />添加数据表</button>\n <div className=\"sg-sidebar-bottom\"><span className={`sg-connection ${connected ? 'connected' : ''}`} />{connected ? '协同已连接' : '正在重连,输入会保留'}<button title=\"导出不含数据和绑定的应用模板\" onClick={() => download(`${snapshot.base.name}.template.json`, JSON.stringify(copyTemplate(snapshot.base), null, 2), 'application/json')}><Download size={15} /></button></div>\n </aside>\n <section className=\"sg-workspace\"><header className=\"sg-topbar\"><div><h1>{table.name}<ChevronDown size={15} /></h1><span className=\"sg-muted\">{snapshot.demo ? '演示数据 · 本次服务重启后重置' : 'UNS 业务数据'}</span></div><div className=\"sg-top-actions\"><div className=\"sg-avatars\" aria-label={`${online.length} 个客户端在线`}>{online.slice(0, 4).map((p) => <span key={`${p.userId}/${p.clientId}`} title={`${p.name}${p.fieldId ? ` · ${p.fieldId}` : ''}`}>{p.name.slice(0, 1)}</span>)}</div><button onClick={() => setSchemaOpen(true)}><SlidersHorizontal size={16} />字段与绑定</button></div></header>\n <nav className=\"sg-view-tabs\" aria-label=\"视图\">{table.views.map((v) => { const Icon = viewIcons[v.type]; return <button key={v.id} className={v.id === view.id ? 'active' : ''} onClick={() => setViewId(v.id)}><Icon size={15} />{v.name}</button>; })}<button aria-label=\"新增视图\" onClick={() => setViewDraft({ id: `v_${crypto.randomUUID().slice(0, 8)}`, name: '新视图', type: 'grid' })}><Plus size={16} /></button></nav>\n <div className=\"sg-toolbar\"><div><button className=\"sg-primary\" disabled={readonly || busy} onClick={() => setRecord('new')}><Plus size={16} />新增记录</button><button onClick={() => setViewDraft(view)}><FilterIcon size={15} />筛选{view.filters?.length ? ` ${view.filters.length}` : ''}</button><button onClick={() => setViewDraft(view)}><ArrowDownUp size={15} />排序</button><button onClick={() => setViewDraft(view)}><SlidersHorizontal size={15} />视图设置</button></div>\n <div><button aria-label=\"撤销\" disabled={!undo.length || busy} onClick={() => void commit(undo[undo.length - 1], 'undo')}><Undo2 size={16} /></button><button aria-label=\"重做\" disabled={!redo.length || busy} onClick={() => void commit(redo[redo.length - 1], 'redo')}><Redo2 size={16} /></button><button aria-label=\"导出 CSV\" onClick={exportCsv}><Download size={16} /></button><label className=\"sg-search\"><Search size={15} /><input placeholder=\"搜索当前表\" value={search} onChange={(e) => setSearch(e.target.value)} /></label></div>\n </div>\n {snapshot.dataError && <div className=\"sg-error\" role=\"alert\"><AlertTriangle size={16} /><span>{snapshot.dataError}</span><button onClick={() => setSchemaOpen(true)}>检查字段与绑定</button><button onClick={() => void refresh()}>重新连接</button></div>}\n {error && <div className=\"sg-error\" role=\"alert\"><AlertTriangle size={16} /><span>{error}{pending && '。待提交内容已保留。'}</span>{pending && <details><summary>查看保留的修改</summary>{pending.map((mutation) => <p key={`${mutation.tableId}/${mutation.id}`}>{snapshot.base.tables.find((t) => t.id === mutation.tableId)?.name} · {mutation.type === 'delete' ? '删除记录' : Object.entries(mutation.values).map(([id, value]) => `${snapshot.base.tables.find((t) => t.id === mutation.tableId)?.fields.find((f) => f.id === id)?.name ?? id}:${displayValue(value)}`).join(';')}</p>)}</details>}<button onClick={() => void refresh()}>刷新数据</button>{pending && <button onClick={() => {\n const latest = snapshotRef.current!;\n if (!confirm('请确认已核对其他人的修改。将把保留的字段值提交到当前最新版本。')) return;\n void commit(pending.map((m) => m.type === 'create' ? m : { ...m, expectedVersion: latest.records[m.tableId]?.find((r) => r.id === m.id)?.version ?? m.expectedVersion }));\n }}>核对后重新提交</button>}<button aria-label=\"关闭错误提示\" onClick={() => setError('')}><X size={15} /></button></div>}\n {Object.keys(snapshot.errors).length > 0 && <div className=\"sg-error\"><Braces size={16} />有 {Object.keys(snapshot.errors).length} 个计算字段错误,请检查公式与引用。<button onClick={() => setSchemaOpen(true)}>检查字段</button></div>}\n <div className={`sg-content sg-content-${view.type}`}>\n {view.type === 'grid' && (view.groupBy ? [...groups].map(([name, records]) => grid(records, name)) : grid(rows))}\n {view.type === 'kanban' && board()}\n {view.type === 'form' && <div className=\"sg-form-page\"><span className=\"sg-eyebrow\">DATA COLLECTION</span><h2>{view.name}</h2><RecordForm key={`${table.id}/${view.id}`} table={table} snapshot={snapshot} busy={busy} error={error} onSave={(values, related) => commit([...related, { type: 'create', tableId: table.id, id: crypto.randomUUID(), values }])} /></div>}\n {view.type === 'calendar' && <CalendarView rows={rows} view={view} table={table} open={setRecord} />}\n {view.type === 'dashboard' && <div className=\"sg-dashboard\"><div className=\"sg-metric\"><small>匹配记录</small><strong>{rows.length}</strong><span>当前筛选的全部记录</span></div>{table.fields.filter((f) => f.type === 'number' || f.type === 'rollup' || f.type === 'formula').map((f) => { const stats = summarize(rows, f.id); return <div className=\"sg-metric\" key={f.id}><small>{f.name} · 合计</small><strong>{stats.sum.toLocaleString('zh-CN')}</strong><span>均值 {stats.average?.toFixed(2) ?? '—'} · {stats.numericCount} 个数值</span><div className=\"sg-bars\">{rows.slice(0, 25).map((r) => <i key={r.id} title={`${displayValue(r.values[table.fields[0].id])}: ${displayValue(r.values[f.id])}`} style={{ height: `${Math.max(2, Math.min(100, Math.abs(Number(r.values[f.id]) || 0) / (Math.max(Math.abs(stats.max ?? 0), Math.abs(stats.min ?? 0)) || 1) * 100))}%` }} />)}</div></div>; })}</div>}\n </div><footer className=\"sg-statusbar\"><span>{rows.length} 条记录 · {fields.length} 个可见字段</span><span>{busy ? '正在提交…' : readonly ? '当前数据源只读' : '更改经服务端校验后保存'}{snapshot.demo && ' · DEMO'}</span></footer>\n </section>\n {record && <Modal title={record === 'new' ? `新增${table.name}记录` : '记录详情'} close={() => setRecord(undefined)}><RecordForm key={record === 'new' ? 'new' : record.id} table={table} row={record === 'new' ? undefined : record} snapshot={snapshot} busy={busy} error={error} onSave={async (values, related) => {\n const success = await commit([...related, record === 'new' ? { type: 'create', tableId: table.id, id: crypto.randomUUID(), values } : { type: 'update', tableId: table.id, id: record.id, expectedVersion: record.version, values }]);\n if (success) setRecord(undefined); return success;\n }} onDelete={record === 'new' ? undefined : () => {\n if (confirm('确认删除此记录?被其他记录引用时会拒绝删除。')) void commit([{ type: 'delete', tableId: table.id, id: record.id, expectedVersion: record.version }]).then((ok) => { if (ok) setRecord(undefined); });\n }} /></Modal>}\n {schemaOpen && <SchemaEditor snapshot={snapshot} table={table} save={configure} close={() => setSchemaOpen(false)} error={error} />}\n {viewDraft && <ViewEditor table={table} view={viewDraft} save={async (next) => { const ok = await saveView(next); if (ok) setViewId(next.id); return ok; }} close={() => setViewDraft(undefined)} error={error} />}\n </main>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"react.mjs","names":["FilterIcon"],"sources":["../src/client.ts","../src/react.tsx"],"sourcesContent":["import { TableError, type Base, type Commit, type Snapshot } from './model';\nimport type { Presence } from './server';\n\nexport type LiveSnapshot = Snapshot & { errors: Record<string, string>; online: Presence[] };\nexport class TableClient {\n constructor(readonly endpoint = '/api/multitable') {}\n private async request(path: string, method = 'GET', body?: unknown): Promise<LiveSnapshot> {\n const response = await fetch(`${this.endpoint.replace(/\\/$/, '')}/${path}`, {\n method, credentials: 'same-origin', cache: 'no-store',\n headers: body === undefined ? {} : { 'Content-Type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n const payload = await response.json();\n if (!response.ok) throw new TableError(payload.error ?? 'request_failed', payload.message ?? '请求失败', response.status, payload.details);\n return payload;\n }\n snapshot() { return this.request('snapshot'); }\n commit(commit: Commit) { return this.request('commits', 'POST', commit); }\n configure(base: Base, expectedVersion: string) { return this.request('base', 'PUT', { base, expectedVersion }); }\n presence(presence: Partial<Presence>) { return this.request('presence', 'POST', presence); }\n subscribe(onInvalidate: () => void, onPresence: (online: Presence[]) => void, onConnection: (connected: boolean) => void) {\n const events = new EventSource(`${this.endpoint.replace(/\\/$/, '')}/events`, { withCredentials: true });\n events.addEventListener('ready', () => { onConnection(true); onInvalidate(); });\n events.addEventListener('invalidate', onInvalidate);\n events.addEventListener('presence', (event) => { onPresence(JSON.parse((event as MessageEvent).data)); });\n events.onerror = () => onConnection(false);\n return () => { events.close(); onConnection(false); };\n }\n}\n","import {\n Button,\n Input,\n Textarea,\n Label,\n NativeSelect,\n NativeSelectOption,\n Checkbox,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogClose,\n Collapsible,\n CollapsibleTrigger,\n CollapsibleContent,\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n Combobox,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxValue,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxEmpty,\n useComboboxAnchor,\n AlertDialog,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogAction,\n AlertDialogCancel,\n Alert,\n Card,\n} from './ui';\nimport { useCallback, useEffect, useMemo, useRef, useState, type FormEvent } from 'react';\nimport {\n Plus,\n Search,\n SlidersHorizontal,\n ArrowDownUp,\n Filter as FilterIcon,\n ChevronDown,\n Table2,\n Columns3,\n CalendarDays,\n ClipboardList,\n ChartNoAxesCombined,\n Undo2,\n Redo2,\n Download,\n X,\n Link2,\n Hash,\n Type,\n Braces,\n Trash2,\n Database,\n Check,\n AlertTriangle,\n} from 'lucide-react';\nimport {\n Grid,\n CellType,\n RowControlType,\n type ICell,\n type IGridColumn,\n type CombinedSelection,\n type IInnerCell,\n} from './grid';\nimport { TableClient, type LiveSnapshot } from './client';\nimport { displayValue, groupRows, queryRows, summarize } from './query';\nimport {\n copyTemplate,\n isComputed,\n TableError,\n type Base,\n type CellValue,\n type Dataset,\n type Field,\n type Mutation,\n type Row,\n type Table,\n type Values,\n type View,\n} from './model';\nimport type { Presence } from './server';\nexport { TableClient } from './client';\n\nconst viewIcons = {\n grid: Table2,\n kanban: Columns3,\n form: ClipboardList,\n calendar: CalendarDays,\n dashboard: ChartNoAxesCombined,\n};\nconst viewNames = { grid: '表格', kanban: '看板', form: '填报', calendar: '日历', dashboard: '统计' };\nconst editableValues = (table: Table, values: Values): Values =>\n Object.fromEntries(\n table.fields.filter((f) => !f.readonly && !isComputed(f)).map((f) => [f.id, values[f.id] ?? null])\n );\nfunction inverse(mutations: Mutation[], before: Dataset, after: Dataset, base: Base): Mutation[] {\n return mutations.map((mutation): Mutation => {\n const table = base.tables.find((t) => t.id === mutation.tableId)!;\n const previous = before[table.id]?.find((r) => r.id === mutation.id);\n const current = after[table.id]?.find((r) => r.id === mutation.id);\n if (mutation.type === 'create')\n return { type: 'delete', tableId: table.id, id: mutation.id, expectedVersion: current!.version };\n if (mutation.type === 'delete')\n return { type: 'create', tableId: table.id, id: mutation.id, values: editableValues(table, previous!.values) };\n return {\n type: 'update',\n tableId: table.id,\n id: mutation.id,\n expectedVersion: current!.version,\n values: Object.fromEntries(Object.keys(mutation.values).map((id) => [id, previous!.values[id] ?? null])),\n };\n });\n}\nconst initialValue = (field: Field): CellValue =>\n field.type === 'multiSelect' || field.type === 'relation' ? [] : field.type === 'boolean' ? false : null;\n\nfunction cell(field: Field, value: CellValue | undefined, readonly: boolean): ICell {\n const common = { readonly: readonly || field.readonly || isComputed(field), displayData: displayValue(value) };\n if (field.type === 'number')\n return { ...common, type: CellType.Number, data: typeof value === 'number' ? value : null };\n if (field.type === 'boolean') return { ...common, type: CellType.Boolean, data: value === true };\n if (field.type === 'select' || field.type === 'multiSelect')\n return {\n ...common,\n displayData: (Array.isArray(value) ? value : value ? [value] : []).map(String),\n type: CellType.Select,\n data: (Array.isArray(value) ? value : value ? [value] : []).map(String),\n isMultiple: field.type === 'multiSelect',\n choiceSorted: (field.options ?? []).map((name) => ({ id: name, name })),\n choiceMap: Object.fromEntries(\n (field.options ?? []).map((name, i) => [\n name,\n {\n id: name,\n name,\n color: ['#0f766e', '#1d4ed8', '#9a3412'][i % 3],\n backgroundColor: ['#ccfbf1', '#dbeafe', '#ffedd5'][i % 3],\n },\n ])\n ),\n };\n // Date and relation use the typed detail form, never a text-only grid editor.\n return {\n ...common,\n readonly: common.readonly || field.type === 'relation' || field.type === 'date',\n type: CellType.Text,\n data: displayValue(value),\n isWrap: field.type === 'textarea',\n };\n}\nfunction fromCell(field: Field, value: IInnerCell): CellValue {\n const raw = value.data as unknown;\n if (field.type === 'select')\n return raw === null\n ? null\n : typeof raw === 'object' && !Array.isArray(raw)\n ? String((raw as { title: string }).title)\n : String(raw);\n if (field.type === 'multiSelect')\n return Array.isArray(raw) ? raw.map((v) => (typeof v === 'string' ? v : String(v.title))) : [];\n return raw as CellValue;\n}\n\nfunction Modal({\n title,\n close,\n children,\n error,\n}: {\n title: string;\n close: () => void;\n children: React.ReactNode;\n error?: string;\n}) {\n return (\n <Dialog\n open\n disablePointerDismissal\n onOpenChange={(open, details) => {\n const target = details.event.target;\n // Closing a picker must not discard the record form that contains it.\n if (!open && details.reason === 'escape-key' && target instanceof Element && target.closest('[role=\"combobox\"]')) {\n details.cancel(); return;\n }\n if (!open) close();\n }}\n >\n <DialogContent className=\"sg-portal sg-modal\" showCloseButton={false}>\n <DialogHeader className=\"sg-modal-header\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"sr-only\">填写并保存本次修改,按 Escape 或关闭按钮返回。</DialogDescription>\n <DialogClose render={<Button variant=\"ghost\" size=\"icon-sm\" aria-label=\"关闭\" />}>\n <X size={18} />\n </DialogClose>\n </DialogHeader>\n {error && (\n <Alert className=\"sg-error\" role=\"alert\">\n {error}\n </Alert>\n )}\n {children}\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction FieldInput({\n field,\n value,\n set,\n snapshot,\n}: {\n field: Field;\n value: CellValue;\n set: (v: CellValue) => void;\n snapshot: LiveSnapshot;\n}) {\n const anchor = useComboboxAnchor();\n if (isComputed(field) || field.readonly) return <output>{displayValue(value) || '保存后计算'}</output>;\n if (field.type === 'boolean')\n return (\n <Checkbox aria-label={field.name} checked={value === true} onCheckedChange={(checked) => set(checked === true)} />\n );\n if (field.type === 'textarea')\n return (\n <Textarea aria-label={field.name} rows={3} value={String(value ?? '')} onChange={(e) => set(e.target.value)} />\n );\n if (field.type === 'select' || field.type === 'multiSelect' || field.type === 'relation') {\n const multiple = field.type === 'multiSelect' || (field.type === 'relation' && field.relation?.multiple);\n const target = snapshot.base.tables.find((t) => t.id === field.relation?.tableId);\n const options =\n field.type === 'relation'\n ? (snapshot.records[target?.id ?? ''] ?? []).map((r) => ({\n id: r.id,\n label: displayValue(r.values[target?.fields[0].id ?? '']) || r.id,\n }))\n : (field.options ?? []).map((o) => ({ id: o, label: o }));\n if (multiple)\n return (\n <Combobox\n multiple\n items={options.map((option) => option.id)}\n value={Array.isArray(value) ? value.map(String) : []}\n onValueChange={(next, details) => {\n // Escape closes search; it must not erase already selected business relations.\n if (details.reason === 'escape-key') { details.cancel(); return; }\n set(next);\n }}\n itemToStringLabel={(id) => options.find((option) => option.id === id)?.label ?? id}\n >\n <ComboboxChips ref={anchor}>\n <ComboboxValue>\n {(selected: string[]) =>\n selected.map((id) => (\n <ComboboxChip key={id} aria-label={`移除 ${options.find((option) => option.id === id)?.label ?? id}`}>\n {options.find((option) => option.id === id)?.label ?? id}\n </ComboboxChip>\n ))\n }\n </ComboboxValue>\n <ComboboxChipsInput aria-label={field.name} placeholder=\"搜索并选择,可多选\" />\n </ComboboxChips>\n <ComboboxContent className=\"sg-portal\" anchor={anchor}>\n <ComboboxEmpty>没有匹配的记录或选项</ComboboxEmpty>\n <ComboboxList>\n {(id: string) => (\n <ComboboxItem key={id} value={id}>\n {options.find((option) => option.id === id)?.label ?? id}\n </ComboboxItem>\n )}\n </ComboboxList>\n </ComboboxContent>\n </Combobox>\n );\n return (\n <NativeSelect\n aria-label={field.name}\n multiple={!!multiple}\n required={field.required}\n value={\n multiple\n ? Array.isArray(value)\n ? value.map(String)\n : []\n : Array.isArray(value)\n ? String(value[0] ?? '')\n : String(value ?? '')\n }\n onChange={(e) =>\n set(\n multiple\n ? Array.from(e.target.selectedOptions, (o) => o.value)\n : field.type === 'relation'\n ? e.target.value\n ? [e.target.value]\n : []\n : e.target.value || null\n )\n }\n >\n {!multiple && <NativeSelectOption value=\"\">请选择</NativeSelectOption>}\n {options.map((o) => (\n <NativeSelectOption key={o.id} value={o.id}>\n {o.label}\n </NativeSelectOption>\n ))}\n </NativeSelect>\n );\n }\n return (\n <Input\n aria-label={field.name}\n type={field.type === 'number' ? 'number' : field.type === 'date' ? 'date' : 'text'}\n step={field.type === 'number' ? 'any' : undefined}\n required={field.required}\n value={value === null ? '' : String(value)}\n onChange={(e) =>\n set(e.target.value === '' ? null : field.type === 'number' ? Number(e.target.value) : e.target.value)\n }\n />\n );\n}\n\nfunction RecordForm({\n table,\n snapshot,\n row,\n busy,\n onSave,\n onDelete,\n error,\n}: {\n table: Table;\n snapshot: LiveSnapshot;\n row?: Row;\n busy: boolean;\n onSave: (values: Values, related: Mutation[]) => Promise<boolean>;\n onDelete?: () => void;\n error?: string;\n}) {\n const [values, setValues] = useState<Values>(() =>\n row ? structuredClone(row.values) : Object.fromEntries(table.fields.map((f) => [f.id, initialValue(f)]))\n );\n const [saved, setSaved] = useState(false);\n const [related, setRelated] = useState<Mutation[]>([]);\n const [relationDraft, setRelationDraft] = useState<Field>();\n const childTable = snapshot.base.tables.find((t) => t.id === relationDraft?.relation?.tableId);\n const draftSnapshot = { ...snapshot, records: structuredClone(snapshot.records) };\n for (const mutation of related)\n if (mutation.type === 'create')\n (draftSnapshot.records[mutation.tableId] ??= []).push({\n id: mutation.id,\n version: 'draft',\n values: mutation.values,\n });\n async function submit(event: FormEvent) {\n event.preventDefault();\n setSaved(false);\n if (await onSave(editableValues(table, values), related)) {\n setSaved(true);\n setRelated([]);\n if (!row) setValues(Object.fromEntries(table.fields.map((f) => [f.id, initialValue(f)])));\n }\n }\n return (\n <>\n <form className=\"sg-record-form\" onSubmit={(event) => void submit(event)}>\n <p className=\"sg-muted\">\n {row\n ? '修改将校验打开记录时的版本,其他人的更新会提示冲突。'\n : '按数据模型填写,保存成功后可在所有视图查看。'}\n </p>\n {error && (\n <Alert role=\"alert\" className=\"sg-error\">\n {error}。待提交内容已保留。\n </Alert>\n )}\n {table.fields.map((field) => (\n <Label key={field.id}>\n <span>\n {field.name}\n {field.required && <b className=\"sg-required\"> *</b>}\n {isComputed(field) && <small> 自动计算</small>}\n </span>\n <FieldInput\n field={field}\n value={values[field.id] ?? null}\n set={(v) => {\n setSaved(false);\n setValues((s) => ({ ...s, [field.id]: v }));\n }}\n snapshot={draftSnapshot}\n />\n {field.type === 'relation' && !field.readonly && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n disabled={!snapshot.capabilities.atomicBatch || busy}\n onClick={() => setRelationDraft(field)}\n >\n <Plus size={13} />\n 新增关联记录(随本次填报保存)\n </Button>\n )}\n </Label>\n ))}\n <footer>\n {onDelete && (\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" className=\"sg-danger\" disabled={busy} onClick={onDelete}>\n <Trash2 size={15} />\n 删除记录\n </Button>\n )}\n {saved && (\n <span role=\"status\" className=\"sg-success\">\n <Check size={15} />\n 已保存\n </span>\n )}\n <Button\n variant=\"default\"\n size=\"sm\"\n className=\"sg-primary\"\n type=\"submit\"\n disabled={busy || !snapshot.capabilities.write}\n >\n {busy ? '保存中…' : '保存记录'}\n </Button>\n </footer>\n </form>\n {relationDraft && childTable && (\n <Modal title={`新增关联记录 · ${childTable.name}`} close={() => setRelationDraft(undefined)}>\n <RecordForm\n table={childTable}\n snapshot={draftSnapshot}\n busy={false}\n onSave={async (childValues, children) => {\n const id = crypto.randomUUID();\n setRelated((s) => [\n ...s,\n ...children,\n { type: 'create', tableId: childTable.id, id, values: childValues },\n ]);\n setValues((s) => ({\n ...s,\n [relationDraft.id]: relationDraft.relation?.multiple\n ? [...(Array.isArray(s[relationDraft.id]) ? (s[relationDraft.id] as string[]) : []), id]\n : [id],\n }));\n setRelationDraft(undefined);\n return true;\n }}\n />\n </Modal>\n )}\n </>\n );\n}\n\nfunction SchemaEditor({\n snapshot,\n table,\n save,\n close,\n error,\n}: {\n snapshot: LiveSnapshot;\n table: Table;\n save: (base: Base) => Promise<boolean>;\n close: () => void;\n error?: string;\n}) {\n const [base, setBase] = useState(() => structuredClone(snapshot.base));\n const [deleteField, setDeleteField] = useState<Field>();\n const draft = base.tables.find((t) => t.id === table.id)!;\n function update() {\n setBase(structuredClone(base));\n }\n return (\n <Modal title=\"字段与 UNS 绑定\" close={close} error={error}>\n <form\n className=\"sg-schema\"\n onSubmit={async (e) => {\n e.preventDefault();\n if (await save(base)) close();\n }}\n >\n <p className=\"sg-muted\">字段引用使用稳定 ID。绑定仅配置映射,实际读写由已接入的 UNS 适配器执行。</p>\n <Label>\n 数据表名称\n <Input\n required\n value={draft.name}\n onChange={(e) => {\n draft.name = e.target.value;\n update();\n }}\n />\n </Label>\n <div className=\"sg-schema-fields\">\n {draft.fields.map((field) => (\n <fieldset key={field.id}>\n <div className=\"sg-field-heading\">\n <code>{field.id}</code>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n title={`删除字段 ${field.name}`}\n onClick={() => setDeleteField(field)}\n >\n <Trash2 size={14} />\n </Button>\n </div>\n <Label>\n 名称\n <Input\n required\n value={field.name}\n onChange={(e) => {\n field.name = e.target.value;\n update();\n }}\n />\n </Label>\n <Label>\n 类型\n <NativeSelect\n value={field.type}\n onChange={(e) => {\n field.type = e.target.value as Field['type'];\n if (['select', 'multiSelect'].includes(field.type)) field.options ??= [];\n update();\n }}\n >\n {(\n [\n 'text',\n 'textarea',\n 'number',\n 'boolean',\n 'date',\n 'select',\n 'multiSelect',\n 'relation',\n 'formula',\n 'lookup',\n 'rollup',\n ] as const\n ).map((kind) => (\n <NativeSelectOption key={kind}>{kind}</NativeSelectOption>\n ))}\n </NativeSelect>\n </Label>\n <Label className=\"sg-check\">\n <Checkbox\n checked={!!field.required}\n onCheckedChange={(checked) => {\n field.required = checked === true;\n update();\n }}\n />\n 必填\n </Label>\n <Label className=\"sg-check\">\n <Checkbox\n checked={!!field.readonly}\n onCheckedChange={(checked) => {\n field.readonly = checked === true;\n update();\n }}\n />\n 只读\n </Label>\n {(field.type === 'select' || field.type === 'multiSelect') && (\n <Label>\n 选项(每行一个)\n <Textarea\n value={(field.options ?? []).join('\\n')}\n onChange={(e) => {\n field.options = e.target.value.split('\\n');\n update();\n }}\n />\n </Label>\n )}\n {field.type === 'formula' && (\n <Label>\n 公式\n <Textarea\n placeholder=\"IF({status} = '已过账', {quantity}, 0)\"\n value={field.formula ?? ''}\n onChange={(e) => {\n field.formula = e.target.value;\n update();\n }}\n />\n </Label>\n )}\n {field.type === 'relation' && (\n <>\n <Label>\n 关联表\n <NativeSelect\n value={field.relation?.tableId ?? ''}\n onChange={(e) => {\n field.relation = { tableId: e.target.value, multiple: field.relation?.multiple ?? true };\n update();\n }}\n >\n <NativeSelectOption value=\"\">请选择</NativeSelectOption>\n {base.tables.map((t) => (\n <NativeSelectOption value={t.id} key={t.id}>\n {t.name}\n </NativeSelectOption>\n ))}\n </NativeSelect>\n </Label>\n <Label className=\"sg-check\">\n <Checkbox\n checked={field.relation?.multiple ?? true}\n onCheckedChange={(checked) => {\n field.relation = { tableId: field.relation?.tableId ?? '', multiple: checked === true };\n update();\n }}\n />\n 允许关联多个记录\n </Label>\n </>\n )}\n {(field.type === 'lookup' || field.type === 'rollup') && (\n <>\n <Label>\n 关联字段 ID\n <Input\n value={field.lookup?.relationFieldId ?? ''}\n onChange={(e) => {\n field.lookup = {\n ...field.lookup,\n targetFieldId: field.lookup?.targetFieldId ?? '',\n relationFieldId: e.target.value,\n };\n update();\n }}\n />\n </Label>\n <Label>\n 目标字段 ID\n <Input\n value={field.lookup?.targetFieldId ?? ''}\n onChange={(e) => {\n field.lookup = {\n ...field.lookup,\n relationFieldId: field.lookup?.relationFieldId ?? '',\n targetFieldId: e.target.value,\n };\n update();\n }}\n />\n </Label>\n {field.type === 'rollup' && (\n <Label>\n 汇总\n <NativeSelect\n value={field.lookup?.aggregate ?? 'sum'}\n onChange={(e) => {\n field.lookup = {\n ...field.lookup!,\n aggregate: e.target.value as NonNullable<Field['lookup']>['aggregate'],\n };\n update();\n }}\n >\n {['sum', 'count', 'min', 'max', 'average'].map((s) => (\n <NativeSelectOption key={s}>{s}</NativeSelectOption>\n ))}\n </NativeSelect>\n </Label>\n )}\n </>\n )}\n </fieldset>\n ))}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={() => {\n draft.fields.push({ id: `f_${crypto.randomUUID().slice(0, 8)}`, name: '新字段', type: 'text' });\n update();\n }}\n >\n <Plus size={16} />\n 新增字段\n </Button>\n <Collapsible>\n <CollapsibleTrigger render={<Button variant=\"ghost\" type=\"button\" />}>UNS 数据绑定</CollapsibleTrigger>\n <CollapsibleContent>\n <Label>\n UNS alias\n <Input\n value={draft.binding?.alias ?? ''}\n onChange={(e) => {\n draft.binding = { alias: e.target.value, fieldMap: draft.binding?.fieldMap ?? {} };\n update();\n }}\n />\n </Label>\n {draft.fields\n .filter((f) => !isComputed(f))\n .map((f) => (\n <Label key={f.id}>\n {f.name}\n <Input\n placeholder=\"UNS 字段名\"\n value={draft.binding?.fieldMap[f.id] ?? ''}\n onChange={(e) => {\n draft.binding ??= { alias: '', fieldMap: {} };\n if (e.target.value) draft.binding.fieldMap[f.id] = e.target.value;\n else delete draft.binding.fieldMap[f.id];\n update();\n }}\n />\n </Label>\n ))}\n </CollapsibleContent>\n </Collapsible>\n <footer>\n <Button variant=\"default\" size=\"sm\" type=\"submit\" className=\"sg-primary\">\n 保存配置\n </Button>\n </footer>\n </form>\n <AlertDialog\n open={!!deleteField}\n onOpenChange={(open) => {\n if (!open) setDeleteField(undefined);\n }}\n >\n <AlertDialogContent className=\"sg-portal\">\n <AlertDialogHeader>\n <AlertDialogTitle>删除字段配置</AlertDialogTitle>\n <AlertDialogDescription>\n 确认删除“{deleteField?.name}”的应用配置?关联公式和视图也需要调整。\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>取消</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => {\n draft.fields = draft.fields.filter((field) => field.id !== deleteField?.id);\n update();\n setDeleteField(undefined);\n }}\n >\n 确认删除\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </Modal>\n );\n}\n\nfunction ViewEditor({\n view,\n table,\n save,\n close,\n error,\n}: {\n view: View;\n table: Table;\n save: (view: View) => Promise<boolean>;\n close: () => void;\n error?: string;\n}) {\n const [draft, setDraft] = useState(() => structuredClone(view));\n return (\n <Modal title=\"视图设置\" close={close} error={error}>\n <form\n className=\"sg-view-editor\"\n onSubmit={async (e) => {\n e.preventDefault();\n if (await save(draft)) close();\n }}\n >\n <Label>\n 名称\n <Input required value={draft.name} onChange={(e) => setDraft({ ...draft, name: e.target.value })} />\n </Label>\n <Label>\n 视图类型\n <NativeSelect\n value={draft.type}\n onChange={(e) => setDraft({ ...draft, type: e.target.value as View['type'] })}\n >\n {Object.entries(viewNames).map(([id, name]) => (\n <NativeSelectOption key={id} value={id}>\n {name}\n </NativeSelectOption>\n ))}\n </NativeSelect>\n </Label>\n <Label>\n 分组字段\n <NativeSelect\n value={draft.groupBy ?? ''}\n onChange={(e) => setDraft({ ...draft, groupBy: e.target.value || undefined })}\n >\n <NativeSelectOption value=\"\">不分组</NativeSelectOption>\n {table.fields.map((f) => (\n <NativeSelectOption value={f.id} key={f.id}>\n {f.name}\n </NativeSelectOption>\n ))}\n </NativeSelect>\n </Label>\n <Label>\n 日历日期字段\n <NativeSelect\n value={draft.dateFieldId ?? ''}\n onChange={(e) => setDraft({ ...draft, dateFieldId: e.target.value || undefined })}\n >\n <NativeSelectOption value=\"\">请选择</NativeSelectOption>\n {table.fields\n .filter((f) => f.type === 'date')\n .map((f) => (\n <NativeSelectOption value={f.id} key={f.id}>\n {f.name}\n </NativeSelectOption>\n ))}\n </NativeSelect>\n </Label>\n <Label>\n 冻结列数\n <Input\n type=\"number\"\n min={0}\n max={table.fields.length}\n value={draft.freezeColumns ?? 1}\n onChange={(e) => setDraft({ ...draft, freezeColumns: Number(e.target.value) })}\n />\n </Label>\n <fieldset>\n <legend>显示字段</legend>\n {table.fields.map((f) => (\n <Label className=\"sg-check\" key={f.id}>\n <Checkbox\n checked={!draft.hiddenFields?.includes(f.id)}\n onCheckedChange={(checked) =>\n setDraft({\n ...draft,\n hiddenFields:\n checked === true\n ? (draft.hiddenFields ?? []).filter((id) => id !== f.id)\n : [...(draft.hiddenFields ?? []), f.id],\n })\n }\n />\n {f.name}\n </Label>\n ))}\n </fieldset>\n <fieldset>\n <legend>筛选(同时满足)</legend>\n {(draft.filters ?? []).map((filter, index) => (\n <div className=\"sg-filter-line\" key={index}>\n <NativeSelect\n aria-label=\"筛选字段\"\n value={filter.fieldId}\n onChange={(e) => {\n draft.filters![index].fieldId = e.target.value;\n setDraft(structuredClone(draft));\n }}\n >\n {table.fields.map((f) => (\n <NativeSelectOption key={f.id} value={f.id}>\n {f.name}\n </NativeSelectOption>\n ))}\n </NativeSelect>\n <NativeSelect\n aria-label=\"筛选方式\"\n value={filter.op}\n onChange={(e) => {\n draft.filters![index].op = e.target.value as typeof filter.op;\n setDraft(structuredClone(draft));\n }}\n >\n {['eq', 'neq', 'contains', 'gt', 'gte', 'lt', 'lte', 'empty'].map((op) => (\n <NativeSelectOption key={op}>{op}</NativeSelectOption>\n ))}\n </NativeSelect>\n <Input\n aria-label=\"筛选值\"\n value={displayValue(filter.value)}\n onChange={(e) => {\n const f = table.fields.find((f) => f.id === filter.fieldId);\n draft.filters![index].value =\n f?.type === 'number'\n ? Number(e.target.value)\n : f?.type === 'boolean'\n ? e.target.value === 'true'\n : e.target.value;\n setDraft(structuredClone(draft));\n }}\n />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n aria-label=\"移除筛选\"\n onClick={() => setDraft({ ...draft, filters: draft.filters!.filter((_, i) => i !== index) })}\n >\n <X size={15} />\n </Button>\n </div>\n ))}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={() =>\n setDraft({\n ...draft,\n filters: [...(draft.filters ?? []), { fieldId: table.fields[0].id, op: 'contains', value: '' }],\n })\n }\n >\n 添加条件\n </Button>\n </fieldset>\n <Label>\n 排序字段\n <NativeSelect\n value={draft.sorts?.[0]?.fieldId ?? ''}\n onChange={(e) =>\n setDraft({\n ...draft,\n sorts: e.target.value\n ? [{ fieldId: e.target.value, direction: draft.sorts?.[0]?.direction ?? 'asc' }]\n : [],\n })\n }\n >\n <NativeSelectOption value=\"\">默认顺序</NativeSelectOption>\n {table.fields.map((f) => (\n <NativeSelectOption value={f.id} key={f.id}>\n {f.name}\n </NativeSelectOption>\n ))}\n </NativeSelect>\n </Label>\n <Label>\n 方向\n <NativeSelect\n value={draft.sorts?.[0]?.direction ?? 'asc'}\n onChange={(e) =>\n setDraft({\n ...draft,\n sorts: draft.sorts?.map((s) => ({ ...s, direction: e.target.value as 'asc' | 'desc' })),\n })\n }\n >\n <NativeSelectOption value=\"asc\">升序</NativeSelectOption>\n <NativeSelectOption value=\"desc\">降序</NativeSelectOption>\n </NativeSelect>\n </Label>\n <footer>\n <Button variant=\"default\" size=\"sm\" className=\"sg-primary\" type=\"submit\">\n 保存视图\n </Button>\n </footer>\n </form>\n </Modal>\n );\n}\n\nfunction CalendarView({\n rows,\n view,\n table,\n open,\n}: {\n rows: Row[];\n view: View;\n table: Table;\n open: (row: Row) => void;\n}) {\n const [month, setMonth] = useState(() =>\n new Date().toLocaleDateString('sv-SE', { timeZone: 'Asia/Shanghai' }).slice(0, 7)\n );\n const dateField = view.dateFieldId ?? table.fields.find((f) => f.type === 'date')?.id;\n if (!dateField) return <p className=\"sg-empty\">请在视图设置中选择日期字段。</p>;\n const [year, mm] = month.split('-').map(Number);\n const days = new Date(Date.UTC(year, mm, 0)).getUTCDate();\n const padding = new Date(Date.UTC(year, mm - 1, 1)).getUTCDay();\n return (\n <section className=\"sg-calendar\">\n <Label>\n 月份\n <Input\n aria-label=\"日历月份\"\n type=\"month\"\n value={month}\n onChange={(e) => {\n if (e.target.value) setMonth(e.target.value);\n }}\n />\n </Label>\n <div className=\"sg-calendar-grid\">\n {['日', '一', '二', '三', '四', '五', '六'].map((d) => (\n <strong key={d}>{d}</strong>\n ))}\n {Array.from({ length: padding }, (_, i) => (\n <div key={`p${i}`} className=\"sg-calendar-padding\" />\n ))}\n {Array.from({ length: days }, (_, i) => {\n const date = `${month}-${String(i + 1).padStart(2, '0')}`;\n return (\n <div className=\"sg-calendar-day\" key={date}>\n <span>{i + 1}</span>\n {rows\n .filter((r) => r.values[dateField] === date)\n .map((r) => (\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" key={r.id} onClick={() => open(r)}>\n {displayValue(r.values[table.fields[0].id]) || r.id}\n </Button>\n ))}\n </div>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport function MultiTableApp({\n endpoint = '/api/multitable',\n client: suppliedClient,\n}: {\n endpoint?: string;\n client?: TableClient;\n}) {\n const client = useMemo(() => suppliedClient ?? new TableClient(endpoint), [endpoint, suppliedClient]);\n const [snapshot, setSnapshot] = useState<LiveSnapshot>();\n const [tableId, setTableId] = useState(''),\n [viewId, setViewId] = useState('');\n const [search, setSearch] = useState(''),\n [error, setError] = useState('');\n const [busy, setBusy] = useState(false),\n [connected, setConnected] = useState(false);\n const [online, setOnline] = useState<Presence[]>([]);\n const [record, setRecord] = useState<Row | 'new'>();\n const [newTable, setNewTable] = useState(false),\n [newTableName, setNewTableName] = useState('');\n const [confirmation, setConfirmation] = useState<{ title: string; description: string; action: () => void }>();\n const [schemaOpen, setSchemaOpen] = useState(false),\n [viewDraft, setViewDraft] = useState<View>();\n const [pending, setPending] = useState<Mutation[]>();\n const [undo, setUndo] = useState<Mutation[][]>([]),\n [redo, setRedo] = useState<Mutation[][]>([]);\n const sequence = useRef(0),\n busyRef = useRef(false),\n clientId = useRef(crypto.randomUUID());\n const selection = useRef<CombinedSelection | null>(null);\n const snapshotRef = useRef(snapshot);\n snapshotRef.current = snapshot;\n const refresh = useCallback(async () => {\n const request = ++sequence.current;\n try {\n const result = await client.snapshot();\n if (request === sequence.current) {\n setSnapshot(result);\n setOnline(result.online);\n }\n } catch (e) {\n if (request === sequence.current) setError(e instanceof Error ? e.message : '加载失败');\n }\n }, [client]);\n useEffect(() => {\n void refresh();\n const unsubscribe = client.subscribe(\n () => {\n if (!busyRef.current) void refresh();\n },\n setOnline,\n setConnected\n );\n return () => {\n ++sequence.current;\n unsubscribe();\n };\n }, [client, refresh]);\n const table = snapshot?.base.tables.find((t) => t.id === tableId) ?? snapshot?.base.tables[0];\n const view = table?.views.find((v) => v.id === viewId) ?? table?.views[0];\n useEffect(() => {\n if (!table) return;\n const ping = () => void client.presence({ clientId: clientId.current, tableId: table.id }).catch(() => {});\n ping();\n const timer = setInterval(ping, 20000);\n return () => clearInterval(timer);\n }, [client, table?.id]);\n useEffect(() => {\n selection.current = null;\n }, [table?.id, view?.id]);\n async function commit(mutations: Mutation[], history: 'normal' | 'undo' | 'redo' = 'normal'): Promise<boolean> {\n if (!snapshotRef.current || busyRef.current) return false;\n const before = snapshotRef.current;\n busyRef.current = true;\n setBusy(true);\n setError('');\n ++sequence.current;\n try {\n const result = await client.commit({ id: crypto.randomUUID(), mutations });\n const reversal = inverse(mutations, before.records, result.records, before.base);\n setSnapshot(result);\n setPending(undefined);\n if (history === 'normal') {\n setUndo((s) => [...s.slice(-49), reversal]);\n setRedo([]);\n } else if (history === 'undo') {\n setUndo((s) => s.slice(0, -1));\n setRedo((s) => [...s, reversal]);\n } else {\n setRedo((s) => s.slice(0, -1));\n setUndo((s) => [...s, reversal]);\n }\n return true;\n } catch (e) {\n setPending(mutations);\n setError(e instanceof Error ? e.message : '提交失败');\n return false;\n } finally {\n busyRef.current = false;\n setBusy(false);\n }\n }\n async function configure(base: Base) {\n if (!snapshot || busyRef.current) return false;\n busyRef.current = true;\n setBusy(true);\n ++sequence.current;\n try {\n setSnapshot(await client.configure(base, snapshot.base.version));\n setError('');\n setUndo([]);\n setRedo([]);\n return true;\n } catch (e) {\n setError(e instanceof Error ? e.message : '保存失败');\n return false;\n } finally {\n busyRef.current = false;\n setBusy(false);\n }\n }\n if (!snapshot || !table || !view)\n return (\n <div className=\"sg-app sg-loading\">\n <Database size={32} />\n <p>{error || '正在加载多维表格…'}</p>\n {error && (\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" onClick={() => void refresh()}>\n 重新加载\n </Button>\n )}\n </div>\n );\n const readonly = !snapshot.capabilities.write || !snapshot.capabilities.conditionalWrite;\n const rows = queryRows(snapshot.records[table.id] ?? [], view, search);\n const fields = table.fields\n .filter((f) => !view.hiddenFields?.includes(f.id))\n .sort((a, b) => {\n const order = view.fieldOrder ?? table.fields.map((f) => f.id);\n return order.indexOf(a.id) - order.indexOf(b.id);\n });\n const groups = groupRows(rows, view.groupBy);\n const columns: IGridColumn[] = fields.map((f) => ({ id: f.id, name: f.name, width: view.widths?.[f.id] ?? 170 }));\n const getSelection = (selected: CombinedSelection, rowCount = rows.length) => {\n const expand = (ranges: [number, number][], limit: number) =>\n ranges.flatMap(([a, b]) =>\n Array.from({ length: Math.max(0, Math.min(b, limit - 1) - Math.max(a, 0) + 1) }, (_, i) => i + Math.max(a, 0))\n );\n if (selected.isNoneSelection) return { columns: [], rows: [] };\n const [first, last] = selected.ranges;\n const x = selected.isCellSelection\n ? [[Math.min(first[0], last[0]), Math.max(first[0], last[0])] as [number, number]]\n : selected.isColumnSelection\n ? selected.ranges\n : [[0, fields.length - 1] as [number, number]];\n const y = selected.isCellSelection\n ? [[Math.min(first[1], last[1]), Math.max(first[1], last[1])] as [number, number]]\n : selected.isRowSelection\n ? selected.ranges\n : [[0, rowCount - 1] as [number, number]];\n return { columns: expand(x, fields.length), rows: expand(y, rowCount) };\n };\n const saveView = (next: View) => {\n const base = structuredClone(snapshot.base),\n target = base.tables.find((t) => t.id === table.id)!;\n const index = target.views.findIndex((v) => v.id === next.id);\n if (index < 0) target.views.push(next);\n else target.views[index] = next;\n return configure(base);\n };\n const updateRow = (row: Row, values: Values) =>\n commit([{ type: 'update', tableId: table.id, id: row.id, expectedVersion: row.version, values }]);\n function download(name: string, text: string, type: string) {\n const url = URL.createObjectURL(new Blob([text], { type }));\n const link = document.createElement('a');\n link.href = url;\n link.download = name;\n link.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n }\n function exportCsv() {\n // Neutralize spreadsheet formula injection in exported free text.\n const escape = (s: string) => `\"${(/^[=+\\-@\\t\\r]/.test(s) ? \"'\" + s : s).replaceAll('\"', '\"\"')}\"`;\n download(\n `${table!.name}.csv`,\n '\\uFEFF' +\n [\n fields.map((f) => escape(f.name)).join(','),\n ...rows.map((r) => fields.map((f) => escape(displayValue(r.values[f.id]))).join(',')),\n ].join('\\r\\n'),\n 'text/csv;charset=utf-8'\n );\n }\n function board() {\n const grouping = view!.groupBy ?? table!.fields.find((f) => f.type === 'select')?.id;\n const buckets = groupRows(rows, grouping);\n const groupingField = table!.fields.find((f) => f.id === grouping);\n for (const option of groupingField?.options ?? []) if (!buckets.has(option)) buckets.set(option, []);\n return (\n <div className=\"sg-kanban\">\n {[...buckets].map(([name, records]) => (\n <section\n key={name}\n onDragOver={(e) => {\n if (!readonly && groupingField?.type === 'select') e.preventDefault();\n }}\n onDrop={(e) => {\n e.preventDefault();\n const id = e.dataTransfer.getData('text/plain');\n const row = rows.find((r) => r.id === id);\n if (row && groupingField?.type === 'select' && groupingField.options?.includes(name))\n void updateRow(row, { [groupingField.id]: name });\n }}\n >\n <h3>\n <i />\n {name}\n <small>{records.length}</small>\n </h3>\n {records.map((row) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n className=\"sg-card\"\n draggable={!readonly && groupingField?.type === 'select'}\n onDragStart={(e) => e.dataTransfer.setData('text/plain', row.id)}\n key={row.id}\n onClick={() => setRecord(row)}\n >\n <strong>{displayValue(row.values[table!.fields[0].id]) || '未命名记录'}</strong>\n {fields.slice(1, 5).map((f) => (\n <span key={f.id}>\n <small>{f.name}</small>\n {displayValue(row.values[f.id]) || '—'}\n </span>\n ))}\n </Button>\n ))}\n </section>\n ))}\n </div>\n );\n }\n function grid(gridRows: Row[], groupName?: string) {\n return (\n <div className=\"sg-grid-section\" key={groupName ?? 'all'}>\n {groupName && (\n <h3 className=\"sg-group-title\">\n <ChevronDown size={14} />\n <span>{groupName}</span>\n <small>{gridRows.length} 条记录</small>\n </h3>\n )}\n <div className=\"sg-grid\" style={{ height: groupName ? Math.min(480, 78 + gridRows.length * 36) : '100%' }}>\n <Grid\n columns={columns}\n rowCount={gridRows.length}\n rowHeight={36}\n freezeColumnCount={view!.freezeColumns ?? 1}\n collaborators={online\n .filter((p) => p.clientId !== clientId.current && p.tableId === table!.id && p.fieldId && p.rowId)\n .map((p, index) => ({\n activeCellId: [p.rowId!, p.fieldId!] as [string, string],\n activeCell: [\n fields.findIndex((f) => f.id === p.fieldId),\n gridRows.findIndex((r) => r.id === p.rowId),\n ] as [number, number],\n user: { id: p.userId, name: p.name },\n borderColor: ['#e59b44', '#6293cf', '#b575b6'][index % 3],\n timeStamp: p.expiresAt - 45000,\n }))\n .filter((p) => p.activeCell[0] >= 0 && p.activeCell[1] >= 0)}\n rowControls={[{ type: RowControlType.Expand }]}\n getCellContent={([col, row]) =>\n !fields[col] || !gridRows[row]\n ? { type: CellType.Loading }\n : cell(fields[col], gridRows[row].values[fields[col].id], readonly || busy)\n }\n onCellEdited={([col, row], value) =>\n void updateRow(gridRows[row], { [fields[col].id]: fromCell(fields[col], value) })\n }\n onRowExpand={(index) => setRecord(gridRows[index])}\n onRowAppend={readonly ? undefined : () => setRecord('new')}\n onColumnHeaderMenuClick={() => setSchemaOpen(true)}\n onColumnHeaderDblClick={() => setSchemaOpen(true)}\n onColumnResize={(_column, width, index) =>\n void saveView({ ...view!, widths: { ...view!.widths, [fields[index].id]: Math.round(width) } })\n }\n onColumnFreeze={(count) => void saveView({ ...view!, freezeColumns: count })}\n onColumnOrdered={(drag, drop) => {\n const order = fields.map((f) => f.id),\n moving = order.filter((_, i) => drag.includes(i));\n const rest = order.filter((_, i) => !drag.includes(i));\n rest.splice(drop, 0, ...moving);\n void saveView({ ...view!, fieldOrder: rest });\n }}\n onSelectionChanged={(selected) => {\n selection.current = selected;\n const pos = getSelection(selected, gridRows.length);\n const row = gridRows[pos.rows[0]],\n field = fields[pos.columns[0]];\n if (row && field)\n void client\n .presence({ clientId: clientId.current, tableId: table!.id, rowId: row.id, fieldId: field.id })\n .catch(() => {});\n }}\n onUndo={() => {\n if (undo.length) void commit(undo[undo.length - 1], 'undo');\n }}\n onRedo={() => {\n if (redo.length) void commit(redo[redo.length - 1], 'redo');\n }}\n onCopy={(selected, event) => {\n const pos = getSelection(selected, gridRows.length);\n event.preventDefault();\n event.clipboardData.setData(\n 'text/plain',\n pos.rows\n .map((ri) =>\n pos.columns\n .map((ci) => displayValue(gridRows[ri]?.values[fields[ci].id]).replace(/[\\t\\r\\n]/g, ' '))\n .join('\\t')\n )\n .join('\\n')\n );\n }}\n onPaste={(selected, event) => {\n if (readonly) return;\n event.preventDefault();\n const pos = getSelection(selected, gridRows.length);\n const startCol = pos.columns[0],\n startRow = pos.rows[0];\n if (startCol === undefined || startRow === undefined) return;\n const lines = event.clipboardData\n .getData('text/plain')\n .replace(/\\r\\n/g, '\\n')\n .replace(/\\n$/, '')\n .split('\\n');\n const mutations: Mutation[] = [];\n try {\n for (let ri = 0; ri < lines.length; ri++) {\n const target = gridRows[startRow + ri];\n if (!target) throw new TableError('paste_range', '粘贴范围超过现有记录,请先新增记录');\n const values: Values = {};\n lines[ri].split('\\t').forEach((text, ci) => {\n const field = fields[startCol + ci];\n if (!field || isComputed(field) || field.readonly)\n throw new TableError('paste_field', '粘贴范围含不存在或只读字段');\n if (field.type === 'relation' || field.type === 'multiSelect')\n throw new TableError('paste_field', '关联和多选字段请通过记录详情编辑');\n values[field.id] =\n text === ''\n ? null\n : field.type === 'number'\n ? Number(text)\n : field.type === 'boolean'\n ? ['是', 'true', '1'].includes(text)\n : text;\n });\n mutations.push({\n type: 'update',\n tableId: table!.id,\n id: target.id,\n expectedVersion: target.version,\n values,\n });\n }\n void commit(mutations);\n } catch (e) {\n setError(e instanceof Error ? e.message : '粘贴失败');\n }\n }}\n onDelete={(selected) => {\n if (readonly) return;\n const pos = getSelection(selected, gridRows.length);\n void commit(\n pos.rows.map((ri) => ({\n type: 'update',\n tableId: table!.id,\n id: gridRows[ri].id,\n expectedVersion: gridRows[ri].version,\n values: Object.fromEntries(\n pos.columns\n .filter((ci) => !isComputed(fields[ci]) && !fields[ci].readonly)\n .map((ci) => [fields[ci].id, initialValue(fields[ci])])\n ),\n }))\n );\n }}\n theme={{\n cellLineColor: '#e6ebef',\n cellTextColor: '#243542',\n cellLineColorActived: '#0e8477',\n fontFamily: '\"Microsoft YaHei\", \"PingFang SC\", sans-serif',\n columnHeaderBg: '#f8fafb',\n }}\n />\n </div>\n </div>\n );\n }\n const confirmationDialog = (\n <AlertDialog\n open={!!confirmation}\n onOpenChange={(open) => {\n if (!open) setConfirmation(undefined);\n }}\n >\n <AlertDialogContent className=\"sg-portal\">\n <AlertDialogHeader>\n <AlertDialogTitle>{confirmation?.title}</AlertDialogTitle>\n <AlertDialogDescription>{confirmation?.description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>取消</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => {\n confirmation?.action();\n setConfirmation(undefined);\n }}\n >\n 确认\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n return (\n <main className=\"sg-app\">\n <aside className=\"sg-sidebar\">\n <div className=\"sg-brand\">\n <span className=\"sg-brand-icon\">\n <Database size={20} />\n </span>\n <div>\n <strong>{snapshot.base.name}</strong>\n <small>supOS · 多维表格</small>\n </div>\n </div>\n <p className=\"sg-nav-caption\">\n 数据表 <span>{snapshot.base.tables.length}</span>\n </p>\n <nav aria-label=\"数据表\">\n {snapshot.base.tables.map((t) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n className={t.id === table.id ? 'active' : ''}\n key={t.id}\n onClick={() => {\n setTableId(t.id);\n setViewId('');\n setSearch('');\n setRecord(undefined);\n }}\n >\n <Table2 size={16} />\n <span>{t.name}</span>\n <small>{snapshot.records[t.id]?.length ?? 0}</small>\n </Button>\n ))}\n </nav>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n className=\"sg-add-table\"\n onClick={() => {\n setNewTableName('');\n setNewTable(true);\n }}\n >\n <Plus size={15} />\n 添加数据表\n </Button>\n <div className=\"sg-sidebar-bottom\">\n <span className={`sg-connection ${connected ? 'connected' : ''}`} />\n {connected ? '协同已连接' : '正在重连,输入会保留'}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n title=\"导出不含数据和绑定的应用模板\"\n onClick={() =>\n download(\n `${snapshot.base.name}.template.json`,\n JSON.stringify(copyTemplate(snapshot.base), null, 2),\n 'application/json'\n )\n }\n >\n <Download size={15} />\n </Button>\n </div>\n </aside>\n <Tabs\n value={view.id}\n onValueChange={(value) => setViewId(String(value))}\n className=\"sg-workspace\"\n render={<section />}\n >\n <header className=\"sg-topbar\">\n <div>\n <h1>\n {table.name}\n <ChevronDown size={15} />\n </h1>\n <span className=\"sg-muted\">{snapshot.demo ? '演示数据 · 本次服务重启后重置' : 'UNS 业务数据'}</span>\n </div>\n <div className=\"sg-top-actions\">\n <div className=\"sg-avatars\" aria-label={`${online.length} 个客户端在线`}>\n {online.slice(0, 4).map((p) => (\n <span key={`${p.userId}/${p.clientId}`} title={`${p.name}${p.fieldId ? ` · ${p.fieldId}` : ''}`}>\n {p.name.slice(0, 1)}\n </span>\n ))}\n </div>\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" onClick={() => setSchemaOpen(true)}>\n <SlidersHorizontal size={16} />\n 字段与绑定\n </Button>\n </div>\n </header>\n <nav className=\"sg-view-tabs\" aria-label=\"视图\">\n <TabsList variant=\"line\" aria-label=\"视图\">\n {table.views.map((v) => {\n const Icon = viewIcons[v.type];\n return (\n <TabsTrigger value={v.id} key={v.id} className={v.id === view.id ? 'active' : ''}>\n <Icon size={15} />\n {v.name}\n </TabsTrigger>\n );\n })}\n </TabsList>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n aria-label=\"新增视图\"\n onClick={() => setViewDraft({ id: `v_${crypto.randomUUID().slice(0, 8)}`, name: '新视图', type: 'grid' })}\n >\n <Plus size={16} />\n </Button>\n </nav>\n <div className=\"sg-toolbar\">\n <div>\n <Button\n variant=\"default\"\n size=\"sm\"\n type=\"button\"\n className=\"sg-primary\"\n disabled={readonly || busy}\n onClick={() => setRecord('new')}\n >\n <Plus size={16} />\n 新增记录\n </Button>\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" onClick={() => setViewDraft(view)}>\n <FilterIcon size={15} />\n 筛选{view.filters?.length ? ` ${view.filters.length}` : ''}\n </Button>\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" onClick={() => setViewDraft(view)}>\n <ArrowDownUp size={15} />\n 排序\n </Button>\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" onClick={() => setViewDraft(view)}>\n <SlidersHorizontal size={15} />\n 视图设置\n </Button>\n </div>\n <div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n aria-label=\"撤销\"\n disabled={!undo.length || busy}\n onClick={() => void commit(undo[undo.length - 1], 'undo')}\n >\n <Undo2 size={16} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n aria-label=\"重做\"\n disabled={!redo.length || busy}\n onClick={() => void commit(redo[redo.length - 1], 'redo')}\n >\n <Redo2 size={16} />\n </Button>\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" aria-label=\"导出 CSV\" onClick={exportCsv}>\n <Download size={16} />\n </Button>\n <Label className=\"sg-search\">\n <Search size={15} />\n <Input placeholder=\"搜索当前表\" value={search} onChange={(e) => setSearch(e.target.value)} />\n </Label>\n </div>\n </div>\n {snapshot.dataError && (\n <Alert className=\"sg-error\" role=\"alert\">\n <AlertTriangle size={16} />\n <span>{snapshot.dataError}</span>\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" onClick={() => setSchemaOpen(true)}>\n 检查字段与绑定\n </Button>\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" onClick={() => void refresh()}>\n 重新连接\n </Button>\n </Alert>\n )}\n {error && (\n <Alert className=\"sg-error\" role=\"alert\">\n <AlertTriangle size={16} />\n <span>\n {error}\n {pending && '。待提交内容已保留。'}\n </span>\n {pending && (\n <Collapsible>\n <CollapsibleTrigger render={<Button variant=\"ghost\" type=\"button\" />}>\n 查看保留的修改\n </CollapsibleTrigger>\n <CollapsibleContent>\n {pending.map((mutation) => (\n <p key={`${mutation.tableId}/${mutation.id}`}>\n {snapshot.base.tables.find((t) => t.id === mutation.tableId)?.name} ·{' '}\n {mutation.type === 'delete'\n ? '删除记录'\n : Object.entries(mutation.values)\n .map(\n ([id, value]) =>\n `${snapshot.base.tables.find((t) => t.id === mutation.tableId)?.fields.find((f) => f.id === id)?.name ?? id}:${displayValue(value)}`\n )\n .join(';')}\n </p>\n ))}\n </CollapsibleContent>\n </Collapsible>\n )}\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" onClick={() => void refresh()}>\n 刷新数据\n </Button>\n {pending && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={() => {\n setConfirmation({\n title: '核对后重新提交',\n description: '请确认已核对其他人的修改。将把保留的字段值提交到当前最新版本。',\n action: () => {\n const latest = snapshotRef.current!;\n void commit(\n pending.map((m) =>\n m.type === 'create'\n ? m\n : {\n ...m,\n expectedVersion:\n latest.records[m.tableId]?.find((r) => r.id === m.id)?.version ?? m.expectedVersion,\n }\n )\n );\n },\n });\n }}\n >\n 核对后重新提交\n </Button>\n )}\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" aria-label=\"关闭错误提示\" onClick={() => setError('')}>\n <X size={15} />\n </Button>\n </Alert>\n )}\n {Object.keys(snapshot.errors).length > 0 && (\n <Alert className=\"sg-error\">\n <Braces size={16} />有 {Object.keys(snapshot.errors).length} 个计算字段错误,请检查公式与引用。\n <Button variant=\"ghost\" size=\"sm\" type=\"button\" onClick={() => setSchemaOpen(true)}>\n 检查字段\n </Button>\n </Alert>\n )}\n <TabsContent value={view.id} className={`sg-content sg-content-${view.type}`}>\n {view.type === 'grid' &&\n (view.groupBy ? [...groups].map(([name, records]) => grid(records, name)) : grid(rows))}\n {view.type === 'kanban' && board()}\n {view.type === 'form' && (\n <Card className=\"sg-form-page\">\n <span className=\"sg-eyebrow\">DATA COLLECTION</span>\n <h2>{view.name}</h2>\n <RecordForm\n key={`${table.id}/${view.id}`}\n table={table}\n snapshot={snapshot}\n busy={busy}\n error={error}\n onSave={(values, related) =>\n commit([...related, { type: 'create', tableId: table.id, id: crypto.randomUUID(), values }])\n }\n />\n </Card>\n )}\n {view.type === 'calendar' && <CalendarView rows={rows} view={view} table={table} open={setRecord} />}\n {view.type === 'dashboard' && (\n <div className=\"sg-dashboard\">\n <Card className=\"sg-metric\">\n <small>匹配记录</small>\n <strong>{rows.length}</strong>\n <span>当前筛选的全部记录</span>\n </Card>\n {table.fields\n .filter((f) => f.type === 'number' || f.type === 'rollup' || f.type === 'formula')\n .map((f) => {\n const stats = summarize(rows, f.id);\n return (\n <Card className=\"sg-metric\" key={f.id}>\n <small>{f.name} · 合计</small>\n <strong>{stats.sum.toLocaleString('zh-CN')}</strong>\n <span>\n 均值 {stats.average?.toFixed(2) ?? '—'} · {stats.numericCount} 个数值\n </span>\n <div className=\"sg-bars\">\n {rows.slice(0, 25).map((r) => (\n <i\n key={r.id}\n title={`${displayValue(r.values[table.fields[0].id])}: ${displayValue(r.values[f.id])}`}\n style={{\n height: `${Math.max(2, Math.min(100, (Math.abs(Number(r.values[f.id]) || 0) / (Math.max(Math.abs(stats.max ?? 0), Math.abs(stats.min ?? 0)) || 1)) * 100))}%`,\n }}\n />\n ))}\n </div>\n </Card>\n );\n })}\n </div>\n )}\n </TabsContent>\n <footer className=\"sg-statusbar\">\n <span>\n {rows.length} 条记录 · {fields.length} 个可见字段\n </span>\n <span>\n {busy ? '正在提交…' : readonly ? '当前数据源只读' : '更改经服务端校验后保存'}\n {snapshot.demo && ' · DEMO'}\n </span>\n </footer>\n </Tabs>\n {newTable && (\n <Modal title=\"新增数据表\" close={() => setNewTable(false)} error={error}>\n <form\n className=\"sg-record-form\"\n onSubmit={async (event) => {\n event.preventDefault();\n if (!newTableName.trim()) return;\n const id = `t_${crypto.randomUUID().slice(0, 8)}`,\n base = structuredClone(snapshot.base);\n base.tables.push({\n id,\n name: newTableName.trim(),\n fields: [{ id: 'name', name: '名称', type: 'text', required: true }],\n views: [{ id: 'grid', name: '全部记录', type: 'grid' }],\n });\n if (await configure(base)) {\n setTableId(id);\n setNewTable(false);\n }\n }}\n >\n <Label>\n 数据表名称\n <Input\n aria-label=\"数据表名称\"\n required\n maxLength={200}\n value={newTableName}\n onChange={(event) => setNewTableName(event.target.value)}\n />\n </Label>\n <footer>\n <Button type=\"submit\" disabled={busy}>\n 创建数据表\n </Button>\n </footer>\n </form>\n </Modal>\n )}\n {!record && confirmationDialog}\n {record && (\n <Modal title={record === 'new' ? `新增${table.name}记录` : '记录详情'} close={() => setRecord(undefined)}>\n <RecordForm\n key={record === 'new' ? 'new' : record.id}\n table={table}\n row={record === 'new' ? undefined : record}\n snapshot={snapshot}\n busy={busy}\n error={error}\n onSave={async (values, related) => {\n const success = await commit([\n ...related,\n record === 'new'\n ? { type: 'create', tableId: table.id, id: crypto.randomUUID(), values }\n : { type: 'update', tableId: table.id, id: record.id, expectedVersion: record.version, values },\n ]);\n if (success) setRecord(undefined);\n return success;\n }}\n onDelete={\n record === 'new'\n ? undefined\n : () => {\n setConfirmation({\n title: '删除记录',\n description: '确认删除此记录?被其他记录引用时会拒绝删除。',\n action: () => {\n void commit([\n { type: 'delete', tableId: table.id, id: record.id, expectedVersion: record.version },\n ]).then((ok) => {\n if (ok) setRecord(undefined);\n });\n },\n });\n }\n }\n />\n {confirmationDialog}\n </Modal>\n )}\n {schemaOpen && (\n <SchemaEditor\n snapshot={snapshot}\n table={table}\n save={configure}\n close={() => setSchemaOpen(false)}\n error={error}\n />\n )}\n {viewDraft && (\n <ViewEditor\n table={table}\n view={viewDraft}\n save={async (next) => {\n const ok = await saveView(next);\n if (ok) setViewId(next.id);\n return ok;\n }}\n close={() => setViewDraft(undefined)}\n error={error}\n />\n )}\n </main>\n );\n}\n"],"mappings":"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"}