@zestl/zvolv-widgets 0.0.0-stage → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +821 -2
- package/SKILL.md +251 -0
- package/dist/index.cjs +9003 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3070 -0
- package/dist/index.d.ts +3070 -0
- package/dist/index.js +8785 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/ZvolvProvider.tsx","../src/runtime/client.ts","../src/runtime/dateFields.ts","../src/runtime/textUtils.ts","../src/runtime/loggedInUser.ts","../src/runtime/queryGenerator.ts","../src/runtime/constants.ts","../src/runtime/tableFilters.ts","../src/runtime/userLabels.ts","../src/runtime/index.ts","../src/core/dataSource.ts","../src/core/config.ts","../src/core/interactions.ts","../src/core/mockRuntime.ts","../src/theme/tokens.ts","../src/theme/ThemeProvider.tsx","../src/templates/registry.tsx","../src/templates/kpiDefaults.tsx","../src/widgets/WidgetShell.tsx","../src/transforms/postOperations.ts","../src/transforms/dateGaps.ts","../src/react/useWidgetData.ts","../src/react/useWidgetInteractions.ts","../src/widgets/interactive.tsx","../src/transforms/formatters.ts","../src/react/useKpiContents.ts","../src/core/chrome.ts","../src/widgets/KpiWidget.tsx","../src/widgets/ChartWidget.tsx","../src/widgets/charts.tsx","../src/theme/tones.ts","../src/widgets/collections.tsx","../src/widgets/tables.tsx","../src/widgets/temporal.tsx","../src/widgets/display.tsx","../src/forms/normalize.ts","../src/forms/formula.ts","../src/forms/validate.ts","../src/forms/values.ts","../src/forms/rules.ts","../src/forms/api.ts","../src/forms/fieldHooks.ts","../src/forms/useZvolvForm.ts","../src/forms/trialHooks.ts","../src/forms/ZvolvForm.tsx","../src/widgets/specials.tsx","../src/widgets/registry.tsx","../src/core/schemas.ts","../src/core/dashboard.ts","../src/forms/inspect.ts","../src/forms/authoring.ts"],"names":["createContext","useMemo","jsx","useContext","dayjs","utc","weekOfYear","fmt","field","_","raw","pending","text","formatDashboardFilters","filters","fieldMap","getDataType","resolveIsTask","base","jsxs","React","useState","useEffect","useRef","useCallback","Fragment","inputType","args","pivot","el","meta","v","idOf","data","res","fill","rows","pick","has","TASK_DATE_FIELDS"],"mappings":"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","file":"index.cjs","sourcesContent":["import React, { createContext, useContext, useMemo } from \"react\";\n\nexport interface ZvolvRuntime {\n client: any;\n resolveQueryUser?: () => Promise<any>;\n resolveUserLabels?: (ids: any[], kind: string) => Promise<Record<string, string>>;\n prefetchQueryMappings?: (formId: any) => Promise<any>;\n generateQuery?: (...args: any[]) => any;\n formatDashboardFilters?: (cfg: any, dataSource: any, filters: any) => any;\n getUserFieldKind?: (type: any) => string | null;\n /**\n * Optional. Host's column-filter formatter (user name → id, workflow title →\n * id, durations). When absent, a built-in plain-value IN filter is used.\n */\n formatHeaderFilters?: (dataSource: any, columnFilters: Record<string, any[]>) => any[];\n}\n\nconst RuntimeContext = createContext<ZvolvRuntime | null>(null);\n\nexport interface ZvolvProviderProps {\n runtime: ZvolvRuntime;\n children: React.ReactNode;\n}\n\nexport const ZvolvProvider: React.FC<ZvolvProviderProps> = ({ runtime, children }) => {\n const value = useMemo(() => runtime, [runtime]);\n return <RuntimeContext.Provider value={value}>{children}</RuntimeContext.Provider>;\n};\n\nexport function useZvolvRuntime(): ZvolvRuntime {\n const ctx = useContext(RuntimeContext);\n if (!ctx) {\n throw new Error(\n \"@zestl/zvolv-widgets: no ZvolvProvider found. Wrap your app in <ZvolvProvider runtime={...}> \" +\n \"before rendering widgets or calling data hooks.\"\n );\n }\n return ctx;\n}\n\nexport function useZvolvClient(): any {\n return useZvolvRuntime().client;\n}\n","/**\n * The SDK client the ported query path talks to. Set once by createZvolvRuntime;\n * the ported modules call getRuntimeClient() where the host used getZvolvClient().\n */\nlet clientGetter: () => any = () => null;\nlet userReader: () => any = () => null;\n\n/** Stores a getter, so re-creating the SDK client (e.g. a new workspace) is picked up. */\nexport function setRuntimeClient(getClient: () => any, readUser?: () => any): void {\n clientGetter = getClient;\n if (readUser) userReader = readUser;\n}\n\nexport function getRuntimeClient(): any {\n const c = clientGetter();\n if (!c) throw new Error(\"@zestl/zvolv-widgets: runtime client not set — use createZvolvRuntime({ client })\");\n return c;\n}\n\n/**\n * SDK crypto helpers (readUserFromStorage / decryptAuthObject), loaded lazily so the\n * library still imports where the SDK's ESM build can't be loaded (Node tests).\n * Until it resolves, the client's userInstance is used with encrypted values removed.\n */\nlet sdk: any = {};\ntry {\n import(\"@zestl/zvolv-js-sdk\").then((m: any) => { sdk = m ?? {}; }).catch(() => { /* not loadable here */ });\n} catch { /* no dynamic import */ }\n\n/** SDK event fired once its PII key is available and stored user fields can be decrypted. */\nexport const AUTH_CRYPT_READY = \"zvAuthCryptReady\";\n\nconst isEnc = (v: any) => typeof v === \"string\" && v.startsWith(\"enc::\");\nconst hasEnc = (node: any): boolean =>\n Array.isArray(node) ? node.some(hasEnc) : node && typeof node === \"object\" ? Object.values(node).some(hasEnc) : isEnc(node);\n\n/** Drop values that are still \"enc::…\" (ZAI-Dashboard secureStorage.stripUndecrypted). */\nfunction stripUndecrypted(node: any): any {\n if (Array.isArray(node)) return node.map(stripUndecrypted);\n if (node && typeof node === \"object\") {\n const out: Record<string, any> = {};\n for (const [k, v] of Object.entries(node)) {\n if (v && typeof v === \"object\") out[k] = stripUndecrypted(v);\n else if (!isEnc(v)) out[k] = v;\n }\n return out;\n }\n return isEnc(node) ? undefined : node;\n}\n\n/**\n * The logged-in user, decrypted — as ZAI-Dashboard getStoredUser():\n * 1. the host's readUser (createZvolvRuntime({ readUser })), else\n * 2. the SDK's readUserFromStorage() (decrypts enc:: PII once the key is ready), else\n * 3. client.auth.userInstance run through the SDK's decryptAuthObject.\n * Anything still encrypted is removed, so \"enc::…\" never reaches the screen or a submission.\n */\nexport function getStoredUser(): any {\n try {\n let u = userReader() ?? null;\n if (!u) { try { u = sdk.readUserFromStorage?.() ?? null; } catch { u = null; } }\n if (!u) u = clientGetter()?.auth?.userInstance ?? null;\n if (u && hasEnc(u) && typeof sdk.decryptAuthObject === \"function\") {\n try { u = sdk.decryptAuthObject(u); } catch { /* key not ready yet */ }\n }\n return u ? stripUndecrypted(u) : null;\n } catch {\n return null;\n }\n}\n\nexport function isAdminUser(): boolean {\n const u = getStoredUser();\n const role = String(u?.profile?.role_details?.role ?? u?.role ?? \"\").toLowerCase();\n return role === \"admin\";\n}\n\nexport function getUserGroupId(): number | null {\n const u = getStoredUser();\n const n = Number(u?.userGroupId ?? u?.profile?.userGroupId);\n return Number.isFinite(n) && n > 0 ? n : null;\n}\n\n/** GET /api/v1/analytics/mappings/:indexKey — ES field mappings for a form index. */\nexport async function fetchAnalyticsMappings(indexKey: string): Promise<any> {\n return getRuntimeClient().workflow.handleRequest(\n \"get\", `/api/v1/analytics/mappings/${encodeURIComponent(indexKey)}`, undefined, true\n );\n}\n","/**\n * Which fields a dashboard-wide date range (the `cdate` URL param) can land on.\n *\n * Two shapes exist in a widget's DataSource.fields:\n * - form sources carry a real type: DATE_PICKER / DATE_TIME_PICKER;\n * - task sources carry their date columns *untyped* (masterFieldType: null) and\n * are only identifiable by name — startDate, endDate, createdAt, …\n *\n * queryGenerator already range-filters both (see `taskDate` + `dateTypes` there),\n * so recognising them here is all that stands between a task widget and the\n * dashboard date filter.\n */\n\n/** Task/system date columns, as named on the task index. */\nexport const TASK_DATE_FIELDS = [\n 'startDate', 'endDate', 'originalStartDate', 'originalEndDate', 'createdAt',\n 'modifiedAt', 'completedAt', 'startedAt', 'escalatedToL1At', 'escalatedToL2At',\n 'escalatedToL3At', 'submittedOn', 'completeDate',\n];\n\n/** Form field types the query generator treats as dates. */\nexport const DATE_FIELD_TYPES = ['DATE_PICKER', 'DATE_TIME_PICKER', 'INPUT_CREATEDAT', 'INPUT_MODIFIEDAT'];\n\nconst TASK_DATE_SET = new Set(TASK_DATE_FIELDS.map((f) => f.toLowerCase()));\n\nconst fieldName = (field: any): string =>\n String(field?.masterfield ?? field?.header ?? '').toLowerCase();\n\nexport const isTaskDateField = (field: any): boolean => {\n const name = fieldName(field);\n return !!name && TASK_DATE_SET.has(name);\n};\n\n/**\n * True when a date range can be applied to this field. Task date columns only\n * qualify on a task source — a form field literally named \"endDate\" but typed as\n * text must not be range-filtered.\n */\nexport const isDateFilterableField = (field: any, isTask = false): boolean => {\n if (!field) return false;\n if (DATE_FIELD_TYPES.includes(field.masterFieldType)) return true;\n return !!isTask && !field.masterFieldType && isTaskDateField(field);\n};\n\n/**\n * The field a dashboard-wide date range should land on, in preference order:\n * an explicit date column the author put in the data source first, then the task\n * column closest to \"when this record appeared\".\n */\nexport const pickDateField = (fields: any[], isTask = false): any | null => {\n const list = Array.isArray(fields) ? fields : [];\n\n const typed = list.find((f) => DATE_FIELD_TYPES.includes(f?.masterFieldType));\n if (typed) return typed;\n\n if (!isTask) return null;\n\n const byName = (name: string) =>\n list.find((f) => !f?.masterFieldType && fieldName(f) === name);\n\n return (\n byName('createdat') ??\n byName('submittedon') ??\n byName('startdate') ??\n byName('enddate') ??\n list.find((f) => isDateFilterableField(f, true)) ??\n null\n );\n};\n","// Ported verbatim from ZAI-Dashboard src/utils/textUtils.ts (the subset the query path needs).\n// Keep in sync with the host when its filter semantics change.\nimport { isDateFilterableField } from './dateFields';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc.js';\nimport weekOfYear from 'dayjs/plugin/weekOfYear.js';\nimport _ from 'lodash';\n\ndayjs.extend(utc);\ndayjs.extend(weekOfYear);\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\nexport const LOCAL_STORAGE_KEYS = {\n initiationFormSubmissionId: 'initiationFormSubmissionId',\n};\n\nconst taskFields = [\n 'Title','Description','Department','Duration','CurrentEscalationLevel','Delay',\n 'StartDate','EndDate','Status','dStatus','Priority','StageCode','CritPath',\n 'ReworkCount','SubmittedBy','SubmittedOn','SubmissionId','TaskId',\n 'AssigneeUserIds','AssigneeRoleIds','EscalationL1UserIds','EscalationL1RoleIds',\n 'EscalationL2UserIds','EscalationL2RoleIds','EscalationL3UserIds','EscalationL3RoleIds',\n 'WorkflowId','workflowTypeId','completeDate','OriginalStartDate','OriginalEndDate',\n];\n\n// ---------------------------------------------------------------------------\n// Type helpers\n// ---------------------------------------------------------------------------\n// export type any = Record<string, any>;\n\n// ---------------------------------------------------------------------------\n// humanizeDurationToMinutes (replaces HumanizeDurationToMinutesPipe)\n// Accepts strings like \"1h 30m\", \"90m\", \"2h\", etc. → total minutes as number\n// ---------------------------------------------------------------------------\nexport function humanizeDurationToMinutes(value: string): number {\n if (!value) return 0;\n let total = 0;\n const hours = value.match(/(\\d+)\\s*h/i);\n const minutes = value.match(/(\\d+)\\s*m/i);\n if (hours) total += parseInt(hours[1], 10) * 60;\n if (minutes) total += parseInt(minutes[1], 10);\n return total;\n}\n\n// ---------------------------------------------------------------------------\n// getDataType\n// ---------------------------------------------------------------------------\nexport function getDataType(elementType: string): string {\n const arrayTypes = [\n 'FORM_SEARCH','INPUT_TAG','EXTERNAL_API','AUTO_COMPLETE','UPLOAD_FILE_IMAGE',\n 'INPUT_DATE_RANGE','INPUT_SHEET','INPUT_SEARCH','FILE_UPLOAD_V2',\n ];\n const floatTypes = ['INPUT_NUMBER','INPUT_CURRENCY','INPUT_PERCENT','INPUT_FORMULA'];\n const intTypes = [\n 'INPUT_NUMBER','INPUT_CURRENCY','INPUT_PERCENT','RATING_BAR','PROGRESS_BAR',\n 'INPUT_AUTONUMBER','workflowTypeId','WORKFLOW_TYPE_ID','duration','workflowId',\n ];\n\n if (arrayTypes.includes(elementType)) return 'ARRAY';\n if (elementType === 'INPUT_TIMER') return 'OBJECT';\n if (floatTypes.includes(elementType)) return 'FLOAT';\n if (intTypes.includes(elementType)) return 'INT';\n if (elementType === 'CHECK_BOX') return 'BOOLEAN';\n return 'STRING';\n}\n\n// ---------------------------------------------------------------------------\n// getDateRange\n// ---------------------------------------------------------------------------\nexport function getDateRange(ops: string): string[] {\n const values: string[] = [];\n const fmt = 'YYYY-MM-DD';\n const today = dayjs();\n\n switch (ops) {\n case 'TODAY':\n values[0] = today.format(fmt);\n values[1] = today.format(fmt);\n break;\n case 'LAST_SEVEN_DAYS':\n values[0] = today.subtract(7, 'day').format(fmt);\n values[1] = today.add(1, 'day').format(fmt);\n break;\n case 'LAST_THIRTY_DAYS':\n values[0] = today.subtract(30, 'day').format(fmt);\n values[1] = today.add(1, 'day').format(fmt);\n break;\n case 'THIS_WEEK':\n values[0] = today.startOf('week').format(fmt);\n values[1] = today.endOf('week').format(fmt);\n break;\n case 'THIS_MONTH':\n values[0] = today.startOf('month').format(fmt);\n values[1] = today.endOf('month').format(fmt);\n break;\n case 'THIS_YEAR':\n values[0] = today.startOf('year').format(fmt);\n values[1] = today.endOf('year').format(fmt);\n break;\n case 'THIS_FINANCIAL_YEAR': {\n const m = today.month(); // 0-indexed\n const fiscalStart = m < 3\n ? today.subtract(1, 'year').month(3).date(1)\n : today.month(3).date(1);\n const fiscalEnd = m < 3\n ? today.month(2).date(31)\n : today.add(1, 'year').month(2).date(31);\n values[0] = fiscalStart.format(fmt);\n values[1] = fiscalEnd.format(fmt);\n break;\n }\n case 'NEXT_THREE_DAYS':\n values[0] = today.format(fmt);\n values[1] = today.add(4, 'day').format(fmt);\n break;\n case 'NEXT_SEVEN_DAYS':\n values[0] = today.format(fmt);\n values[1] = today.add(8, 'day').format(fmt);\n break;\n case 'NEXT_WEEK':\n values[0] = today.add(1, 'week').startOf('week').format(fmt);\n values[1] = today.add(1, 'week').endOf('week').format(fmt);\n break;\n case 'NEXT_FIFTEEN_DAYS':\n values[0] = today.format(fmt);\n values[1] = today.add(16, 'day').format(fmt);\n break;\n case 'NEXT_THIRTY_DAYS':\n values[0] = today.format(fmt);\n values[1] = today.add(30, 'day').format(fmt);\n break;\n case 'THIS_QUARTER': {\n const m = today.month();\n let qStart: dayjs.Dayjs, qEnd: dayjs.Dayjs;\n if (m <= 2) {\n qStart = today.startOf('year').month(0).date(1);\n qEnd = today.startOf('year').month(2).date(31);\n } else if (m <= 5) {\n qStart = today.startOf('year').month(3).date(1);\n qEnd = today.startOf('year').month(5).date(30);\n } else if (m <= 8) {\n qStart = today.startOf('year').month(6).date(1);\n qEnd = today.startOf('year').month(8).date(30);\n } else {\n qStart = today.startOf('year').month(9).date(1);\n qEnd = today.startOf('year').month(11).date(31);\n }\n values[0] = qStart.format(fmt);\n values[1] = qEnd.format(fmt);\n break;\n }\n default:\n break;\n }\n return values;\n}\n\n// ---------------------------------------------------------------------------\n// isValidDate\n// ---------------------------------------------------------------------------\nexport function isValidDate(val: any): boolean {\n if (typeof val !== 'string') return false;\n if (!isNaN(val as any) && Number(val) === parseInt(val, 10)) return false;\n const date = new Date(val);\n if (isNaN(date.getTime())) return false;\n return val === date.toISOString().split('T')[0];\n}\n\n// ---------------------------------------------------------------------------\n// formatDashboardFilters\n// ---------------------------------------------------------------------------\nexport function formatDashboardFilters(body: any, filters: any): any[] {\n const dashboardFilters: any[] = [];\n\n if (\n filters.filter &&\n Object.keys(filters.filter).length > 0 &&\n body.dataSource?.fields?.length > 0\n ) {\n body.dataSource.fields.forEach((field: any) => {\n const formTitle = field['formtitle'];\n if (filters.filter[formTitle] && Object.keys(filters.filter[formTitle]).length > 0) {\n const header = field['header'];\n const formFilter = filters.filter[formTitle][header];\n if (formFilter) {\n let operator = Object.keys(formFilter)[0];\n let values = formFilter[operator];\n\n if (operator === 'DATE_IS') {\n operator = values[0] === 'TODAY' ? 'EQUALS' : 'BETWEEN';\n values = getDateRange(values[0]);\n }\n\n dashboardFilters.push({\n header,\n masterfield: field['masterfield'],\n masterFieldType: field['masterFieldType'],\n masterFieldDataType: getDataType(field['masterFieldType']),\n filter: { operator, operand: values },\n });\n }\n }\n });\n }\n\n if (filters.cdate?.startdate && body.cdateFilters?.length > 0) {\n const isTaskSource = resolveIsTask(body?.dataSource ?? body);\n const operands: string[] = [\n filters.cdate.startdate,\n filters.cdate.enddate || filters.cdate.startdate,\n ];\n\n body.cdateFilters.forEach((cfilter: any) => {\n // Task sources carry startDate/endDate/… untyped, so a plain\n // masterFieldType check dropped the date filter for every task widget.\n if (!isDateFilterableField(cfilter, cfilter.isTaskField ?? isTaskSource)) return;\n\n let operator = cfilter.operator === 'TODAY' ? 'EQUALS' : 'BETWEEN';\n if (operands[0] && operands[1]) operator = 'BETWEEN';\n\n dashboardFilters.push({\n header: cfilter.header,\n masterfield: cfilter.masterfield,\n masterFieldType: cfilter.masterFieldType,\n masterFieldDataType: getDataType(cfilter.masterFieldType),\n filter: { operator, operand: operands },\n });\n });\n }\n\n return [...dashboardFilters];\n}\n\n// ---------------------------------------------------------------------------\n// formatHeaderFilters\n\nexport const getSubDomain = () => {\n let config = JSON.parse(localStorage.getItem(\"config\") as string)\n if(config){\n return config.domain\n }else{\n return 'ihcltata-uat'\n }\n}\n\nexport const resolveIsTask = (dataSource: any): boolean => {\n if (!dataSource) return false;\n if (dataSource.isTask === true) return true;\n if (dataSource.isTaskField === true) return true;\n const q = dataSource.query;\n if (!q) return false;\n try {\n const parsed = typeof q === \"string\" ? JSON.parse(q) : q;\n return parsed?.isTask === true;\n } catch {\n return false;\n }\n};\n\nexport const resolveFormId = (dataSource: any): string | null => {\n if (!dataSource) return null;\n if (dataSource.formId) return String(dataSource.formId);\n const fromField =\n dataSource.fields?.[0]?.formID ?? dataSource.fields?.[0]?.FormID;\n if (fromField) return String(fromField);\n const q = dataSource.query;\n if (q) {\n try {\n const parsed = typeof q === \"string\" ? JSON.parse(q) : q;\n if (parsed?.formId) return String(parsed.formId);\n } catch {}\n }\n return null;\n};\n\nexport const camelCase = (field: string) => {\n return field\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, chr) => chr.toUpperCase());\n}\n","// Ported from ZAI-Dashboard src/utils/loggedInUser.ts (+ userResolver's group lookup).\nimport { getRuntimeClient, getStoredUser, getUserGroupId, isAdminUser } from \"./client\";\n\nexport interface QueryUser {\n role: string;\n userGroupId: number | null;\n}\n\nlet cachedUser: QueryUser | null = null;\nlet pending: Promise<QueryUser> | null = null;\n\nexport const normalizeUserGroupId = (raw: any): number | null => {\n const n = raw != null && raw !== \"\" ? Number(raw) : NaN;\n return Number.isFinite(n) && n > 0 ? n : null;\n};\n\nexport const getQueryUser = (): QueryUser | null => cachedUser;\n\n/** Forget the cached user — call on login / logout. */\nexport const resetQueryUser = (): void => { cachedUser = null; pending = null; };\n\nasync function lookupGroupId(): Promise<number | null> {\n const u = getStoredUser() ?? {};\n const rawId = u?.userGroupId ?? u?.profile?.userGroupId;\n const name = String(u?.name ?? u?.profile?.name ?? \"\").trim().toLowerCase();\n try {\n const res: any = await getRuntimeClient().workflow.getUserGroupList(JSON.stringify({ searchQuery: \"\" }));\n const roles: any[] = res?.elements ?? res?.data?.elements ?? [];\n const match = rawId != null ? roles.find((r: any) => String(r?.select) === String(rawId)) : undefined;\n if (match?.select != null) return normalizeUserGroupId(match.select);\n const byName = name ? roles.find((r: any) => String(r?.title ?? \"\").trim().toLowerCase() === name) : undefined;\n if (byName?.select != null) return normalizeUserGroupId(byName.select);\n } catch (e) {\n console.warn(\"[@zestl/zvolv-widgets] user group lookup failed\", e);\n }\n return null;\n}\n\nexport const resolveQueryUser = (): Promise<QueryUser> => {\n if (cachedUser) return Promise.resolve(cachedUser);\n if (pending) return pending;\n pending = (async (): Promise<QueryUser> => {\n const role = isAdminUser() ? \"ADMIN\" : \"USER\";\n const groupId = getUserGroupId() ?? (await lookupGroupId());\n const user: QueryUser = { role, userGroupId: groupId };\n if (groupId != null || role === \"ADMIN\") cachedUser = user;\n pending = null;\n return user;\n })();\n return pending;\n};\n","// Ported verbatim from ZAI-Dashboard src/utils/queryGenerator.ts. Do not edit the\n// query logic here without mirroring it in the host — results must match.\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc.js';\nimport { formatDashboardFilters, getDataType, isValidDate } from './textUtils';\nimport { TASK_DATE_FIELDS } from './dateFields';\nimport { getQueryUser, normalizeUserGroupId } from './loggedInUser';\nimport { fetchAnalyticsMappings } from './client';\n\ndayjs.extend(utc);\n\n// Cached per formId/indexKey for the life of the tab — mappings don't change\n// within a session, and generateQuery is re-run on every filter change, so an\n// uncached call would refetch the same mappings repeatedly.\nconst mappingsCache = new Map<string, Promise<any>>();\n\nfunction getCachedAnalyticsMappings(indexKey: string): Promise<any> {\n let pending = mappingsCache.get(indexKey);\n if (!pending) {\n pending = fetchAnalyticsMappings(indexKey).catch((err) => {\n mappingsCache.delete(indexKey);\n console.warn('[getCachedAnalyticsMappings] mappings fetch failed for', indexKey, err);\n return null;\n });\n mappingsCache.set(indexKey, pending);\n }\n return pending;\n}\n\n// FORM_SEARCH fields back onto either a numeric (long) or text form field\n// depending on what's selected as the source form's identifier, so the ES\n// mapping for \"<field>.view\" is 'long' in the numeric case and 'keyword' in\n// the text case. A 'long' sub-field has no .keyword variant, so aggregating/\n// filtering on \"<field>.view.keyword\" 400s — the mapping must be consulted to\n// know which suffix is valid. Returns \"<field>.view\" or \"<field>.view.keyword\".\nfunction resolveFormSearchViewField(masterfield: string): string {\n const viewType = currentMappings?.data?.properties?.[masterfield]?.properties?.view?.type\n ?? currentMappings?.properties?.[masterfield]?.properties?.view?.type;\n return viewType === 'long' ? `${masterfield}.view` : `${masterfield}.view.keyword`;\n}\n\n// Prefetches ES field mappings for the widget's index (formId) so\n// FORM_SEARCH fields can be queried against the correct .view/.view.keyword\n// sub-field. Call this before generateQuery and pass the result in as\n// `mappings` — generateQuery itself stays synchronous (it's a pure builder\n// used across ~25 widget call sites).\nexport function prefetchQueryMappings(formId: any): Promise<any> {\n return formId ? getCachedAnalyticsMappings(String(formId)) : Promise.resolve(null);\n}\n\n// When a dashboard is opened via a drilldown, chart.ts stamps a `dd=1` marker on\n// the URL. Widgets use this to skip the configured row caps (displayRowLimit,\n// per-widget maxItems, and hard-coded fetch limits) so a drilled-into view shows\n// the full underlying data instead of the summary cap.\nexport function isDrilldownView(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return new URLSearchParams(window.location.search).has('dd');\n } catch {\n return false;\n }\n}\n\n// Fetch ceiling used on drilldown for raw-document widgets in place of their\n// default limit. Matches Elasticsearch's default index.max_result_window, so a\n// from/size query stays valid without composite/search_after pagination.\nexport const DRILLDOWN_ROW_LIMIT = 10000;\n\n// ---------------------------------------------------------------------------\n// Constants / lookup tables\n// ---------------------------------------------------------------------------\n// Task fields whose ES mapping is analysed text — aggregating/sorting on them\n// must target the .keyword sub-field. Numeric task fields (duration, delay,\n// taskId, ...) are deliberately absent: they are indexed as numbers, so\n// suffixing .keyword 400s and arithmetic aggs (avg/sum/min/max) work directly.\nexport const taskTextFields: string[] = ['title', 'description', 'status', 'type'];\n\n// Task fields indexed as numbers. Used to override a stale\n// masterFieldDataType:'STRING' saved on older widget configs, which would\n// otherwise force a .keyword suffix and downgrade avg/sum to value_count.\nexport const taskNumericFields: string[] = [\n 'taskId', 'workflowId', 'workflowTypeId', 'submissionId', 'delay', 'duration',\n 'reworkCount', 'currentEscalationLevel', 'critPath',\n];\n\nexport const operatorSymbol: any = {\n ADD: '+', SUB: '-', DIV: '/', MUL: '*', ADD_DAYS: '+', SUB_DAYS: '-',\n};\n\nexport const dateFormulas: string[] = [\n '{@[TODAY]}','{@[3DAYSLATER]}','{@[7DAYSLATER]}','{@[14DAYSLATER]}',\n '{@[15DAYSLATER]}','{@[21DAYSLATER]}','{@[28DAYSLATER]}','{@[30DAYSLATER]}',\n '{@[60DAYSLATER]}','{@[90DAYSLATER]}','{@[180DAYSLATER]}','{@[365DAYSLATER]}',\n '{@[3DAYSAGO]}','{@[7DAYSAGO]}','{@[14DAYSAGO]}','{@[15DAYSAGO]}',\n '{@[21DAYSAGO]}','{@[28DAYSAGO]}','{@[30DAYSAGO]}','{@[60DAYSAGO]}',\n '{@[90DAYSAGO]}','{@[180DAYSAGO]}','{@[365DAYSAGO]}',\n];\n\nexport const dateFormat: any = {\n 'F':'MMM','M-y':'MMM-yy','d-M-Y':'d-MMM-Y','d-m-y':'dd-MM-yy','d-m-Y':'d-M-Y',\n 'm-d-Y':'M-d-Y','h':'hh','H':'HH','m':'mm','h:i a':'hh:mm a','H:i':'HH:mm',\n 'd-M-Y h:i a':'d-MMM-Y hh:mm a','d-M-Y H:i':'d-MMM-Y HH:mm',\n 'd-m-y h:i a':'d-M-yy hh:mm a','d-m-Y h:i a':'d-M-Y hh:mm a',\n 'd-m-y H:i':'d-M-yy HH:mm','d-m-Y H:i':'d-M-Y HH:mm','d.M.Y':'d.MMM.Y',\n 'd.m.y':'d.M.yy','d.m.Y':'d.M.Y','m.d.Y':'M.d.Y','d.m.y h:i a':'d.M.yy hh:mm a',\n 'd.m.Y h:i a':'d.M.Y hh:mm a','d.m.y H:i':'d.M.yy HH:mm','d.m.Y H:i':'d.M.Y HH:mm',\n};\n\nexport const dateFieldPattern: any = {\n 'F':'MMM','M-y':'MMM-YY','d-M-Y':'DD-MMM-YYYY','d-m-y':'DD-MM-YYYY',\n 'd-m-Y':'DD-MM-YYYY','m-d-Y':'MM-DD-YYYY','h':'hh','H':'HH','m':'mm',\n 'h:i a':'hh:mm a','H:i':'HH:mm','d-M-Y h:i a':'DD-MM-YY hh:mm a',\n 'd-M-Y H:i':'DD-MM-YY hh:mm a','d-m-y h:i a':'DD-MM-YY hh:mm a',\n 'd-m-Y h:i a':'DD-MM-YYYY hh:mm a','d-m-y H:i':'DD-MM-YY HH:mm',\n 'd-m-Y H:i':'DD-MM-YYYY HH:mm','d.M.Y':'DD.MMM.YYYY','d.m.y':'DD.MM.YYYY',\n 'd.m.Y':'DD.MM.YYYY','m.d.Y':'MM.DD.YYYY','d.m.y h:i a':'DD.MM.YYYY hh:mm a',\n 'd.m.Y h:i a':'DD.MM.YYYY hh:mm a','d.m.y H:i':'DD.MM.YY HH:mm',\n 'd.m.Y H:i':'DD.MM.YYYY HH:mm',\n};\n\nconst dateTypes = ['DATE_PICKER', 'DATE_TIME_PICKER', 'INPUT_CREATEDAT', 'INPUT_MODIFIEDAT'];\nconst mustOp = ['EQUALS','IN','NOT_EMPTY','STARTS_WITH','LESS_THAN','GREATER_THAN','BETWEEN'];\nconst mustNotOp = ['NOT_IN','EMPTY'];\n\n// Module-level mutable state\nlet filters: any[] = [];\nlet scriptFilters: any[] = [];\nlet fieldMap: Map<any, any> = new Map();\n// ES mappings for the current query's index, set by generateQuery so\n// getFilters/getCompositeAggregations/getSummaryAggregations (called deep\n// within the same synchronous build) can resolve FORM_SEARCH .view types\n// without threading a new param through every helper signature.\nlet currentMappings: any = null;\n\nconst timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n// task date fields (imported constant in original — replicated here)\n// Shared with getCdateFilters/formatDashboardFilters — if the dashboard date\n// picker targets a column this list does not know, the range silently degrades\n// to a numeric comparison, so both sides must read the same list.\nconst taskDate: string[] = TASK_DATE_FIELDS;\n\n// ---------------------------------------------------------------------------\n// Elasticsearch-style date math (e.g. \"now\", \"now-90d/d\", \"now+1M\")\n// ---------------------------------------------------------------------------\nconst dateMathUnit: Record<string, dayjs.ManipulateType> = {\n y: 'year', M: 'month', w: 'week', d: 'day', h: 'hour', H: 'hour', m: 'minute', s: 'second',\n};\nconst dateMathPattern = /^now(?:([+-]\\d+)([yMwdhHms]))?(\\/([yMwdhHms]))?$/;\n\n/** Resolve an ES-style date-math string (e.g. \"now-90d/d\") to a dayjs instant. Returns null if `value` isn't date math. */\nexport function resolveDateMath(value: any): dayjs.Dayjs | null {\n if (typeof value !== 'string') return null;\n const match = dateMathPattern.exec(value.trim());\n if (!match) return null;\n\n let d = dayjs();\n const [, amountStr, amountUnit, , roundUnit] = match;\n if (amountStr && amountUnit) {\n d = d.add(parseInt(amountStr, 10), dateMathUnit[amountUnit]);\n }\n if (roundUnit) {\n d = d.startOf(dateMathUnit[roundUnit]);\n }\n return d;\n}\n\n/** True if `value` is an ES-style date-math string (\"now\", \"now-90d/d\", ...). */\nexport function isDateMath(value: any): boolean {\n return typeof value === 'string' && dateMathPattern.test(value.trim());\n}\n\n// ---------------------------------------------------------------------------\n// getDate\n// ---------------------------------------------------------------------------\nexport function getDate(dateFormula: string): string {\n const fmt = 'YYYY-MM-DDTHH:mm:ssZ';\n const d = dayjs();\n switch (dateFormula) {\n case '{@[TODAY]}': return d.startOf('day').format(fmt);\n case '{@[3DAYSLATER]}': return d.add(3,'day').startOf('day').format(fmt);\n case '{@[7DAYSLATER]}': return d.add(7,'day').startOf('day').format(fmt);\n case '{@[14DAYSLATER]}': return d.add(14,'day').startOf('day').format(fmt);\n case '{@[15DAYSLATER]}': return d.add(15,'day').startOf('day').format(fmt);\n case '{@[21DAYSLATER]}': return d.add(21,'day').startOf('day').format(fmt);\n case '{@[28DAYSLATER]}': return d.add(28,'day').startOf('day').format(fmt);\n case '{@[30DAYSLATER]}': return d.add(30,'day').startOf('day').format(fmt);\n case '{@[60DAYSLATER]}': return d.add(60,'day').startOf('day').format(fmt);\n case '{@[90DAYSLATER]}': return d.add(90,'day').startOf('day').format(fmt);\n case '{@[180DAYSLATER]}': return d.add(180,'day').startOf('day').format(fmt);\n case '{@[365DAYSLATER]}': return d.add(365,'day').startOf('day').format(fmt);\n case '{@[3DAYSAGO]}': return d.subtract(3,'day').startOf('day').format(fmt);\n case '{@[7DAYSAGO]}': return d.subtract(7,'day').startOf('day').format(fmt);\n case '{@[14DAYSAGO]}': return d.subtract(14,'day').startOf('day').format(fmt);\n case '{@[15DAYSAGO]}': return d.subtract(15,'day').startOf('day').format(fmt);\n case '{@[21DAYSAGO]}': return d.subtract(21,'day').startOf('day').format(fmt);\n case '{@[28DAYSAGO]}': return d.subtract(28,'day').startOf('day').format(fmt);\n case '{@[30DAYSAGO]}': return d.subtract(20,'day').startOf('day').format(fmt); // note: original uses 20\n case '{@[60DAYSAGO]}': return d.subtract(60,'day').startOf('day').format(fmt);\n case '{@[90DAYSAGO]}': return d.subtract(90,'day').startOf('day').format(fmt);\n case '{@[180DAYSAGO]}': return d.subtract(180,'day').startOf('day').format(fmt);\n case '{@[365DAYSAGO]}': return d.subtract(365,'day').startOf('day').format(fmt);\n default: return dateFormula;\n }\n}\n\n// ---------------------------------------------------------------------------\n// getFormula\n// ---------------------------------------------------------------------------\nexport function getFormula(formula: any, fMap: Map<any, any>, isFilter = false): any {\n const operands: any[] = [];\n\n if (formula.operands?.length > 0) {\n formula.operands.forEach((operand: any) => {\n if (fMap.get(operand)) {\n operands.push(fMap.get(operand)['masterfield']);\n } else if (dateFormulas.includes(operand)) {\n operands.push(operand);\n } else {\n try { operands.push(parseInt(operand, 10)); }\n catch { operands.push(null); }\n }\n });\n }\n\n const emptyResult = isFilter ? 'false' : `'-'`;\n let script: any = {};\n\n switch (formula.operator) {\n case 'ADD': case 'SUB': case 'MUL': case 'DIV':\n if (typeof operands[1] === 'string') {\n script = { script: `if(doc['${operands[0]}'].size()==0 || doc['${operands[1]}'].size()==0 ) { return ${emptyResult}} else {return (doc['${operands[0]}'].value ${operatorSymbol[formula.operator]} doc['${operands[1]}'].value)}` };\n } else {\n script = { script: `if(doc['${operands[0]}'].size()==0 ) { return ${emptyResult}} else {return (doc['${operands[0]}'].value ${operatorSymbol[formula.operator]} ${operands[1]})}` };\n }\n break;\n\n case 'DAYS_DIFF':\n if (dateFormulas.includes(operands[0])) {\n script = { script: `if(doc['${operands[1]}'].size()==0 ) { return '-'} else { ZonedDateTime startOfFirstDate = ZonedDateTime.parse('${getDate(operands[0])}'); ZonedDateTime startOfSecondDate = ZonedDateTime.parse(doc['${operands[1]}'].value.toString()); long diffInDays = ChronoUnit.DAYS.between(startOfSecondDate.toLocalDate(), startOfFirstDate.toLocalDate()); return diffInDays; }` };\n } else if (dateFormulas.includes(operands[1])) {\n script = { script: `if(doc['${operands[0]}'].size()==0 ) { return '-'} else { ZonedDateTime startOfFirstDate = ZonedDateTime.parse(doc['${operands[0]}'].value.toString()); ZonedDateTime startOfSecondDate = ZonedDateTime.parse('${getDate(operands[1])}'); long diffInDays = ChronoUnit.DAYS.between(startOfSecondDate.toLocalDate(), startOfFirstDate.toLocalDate()); return diffInDays; }` };\n } else {\n script = { script: `if(doc['${operands[0]}'].size()==0 || doc['${operands[1]}'].size()==0 ) { return '-'} else {return (doc['${operands[0]}'].value.millis-doc['${operands[1]}'].value.millis)/ (1000 * 60 * 60 * 24)}` };\n }\n break;\n\n case 'PERCENTAGE':\n break;\n\n case 'ADD_DAYS':\n if (dateFormulas.includes(operands[0])) {\n script = typeof operands[1] === 'string'\n ? { script: `if(doc['${operands[1]}'].size()==0 ) { return '-' } else { ZonedDateTime baseDate = ZonedDateTime.parse('${getDate(operands[0])}'); return baseDate.plusDays(doc['${operands[1]}'].value).toString()}` }\n : { script: `ZonedDateTime baseDate = ZonedDateTime.parse('${getDate(operands[0])}'); return baseDate.plusDays(${operands[1]}).toString();` };\n } else {\n script = typeof operands[1] === 'string'\n ? { script: `if(doc['${operands[0]}'].size()==0 || doc['${operands[1]}'].size()==0 ) { return '-' } else { return (doc['${operands[0]}'].value.plusDays(doc['${operands[1]}'].value).toString())}` }\n : { script: `if(doc['${operands[0]}'].size()==0) { return '-' } else { return (doc['${operands[0]}'].value.plusDays(${operands[1]}).toString())}` };\n }\n break;\n\n case 'SUB_DAYS':\n if (dateFormulas.includes(operands[0])) {\n script = typeof operands[1] === 'string'\n ? { script: `if(doc['${operands[1]}'].size()==0 ) { return '-' } else { ZonedDateTime baseDate = ZonedDateTime.parse('${getDate(operands[0])}'); return baseDate.minusDays(doc['${operands[1]}'].value).toString()}` }\n : { script: `ZonedDateTime baseDate = ZonedDateTime.parse('${getDate(operands[0])}'); return baseDate.minusDays(${operands[1]}).toString()` };\n } else {\n script = typeof operands[1] === 'string'\n ? { script: `if(doc['${operands[0]}'].size()==0 || doc['${operands[1]}'].size()==0 ) { return '-' } else { return (doc['${operands[0]}'].value.minusDays(doc['${operands[1]}'].value).toString())}` }\n : { script: `if(doc['${operands[0]}'].size()==0) { return '-' } else { return (doc['${operands[0]}'].value.minusDays(${operands[1]}).toString())}` };\n }\n break;\n\n case 'MINUTES_DIFF':\n script = { script: `if(doc['${operands[0]}'].size()==0 || doc['${operands[1]}'].size()==0 ) { return '-' } else {return (doc['${operands[0]}'].value.millis-doc['${operands[1]}'].value.millis)/ (1000 * 60)}` };\n break;\n\n case 'FORMAT': {\n let str = '';\n let textFormat = '';\n const textOperands: string[] = [];\n\n formula.operands.forEach((operand: any, i: number) => {\n const f = fMap.get(operand);\n if (f) {\n const suffix = (i + 1) === operands.length ? '' : ' || ';\n if (f['masterFieldDataType'] === 'STRING' && !dateTypes.includes(f['masterFieldType'])) {\n str += `doc['${operands[i]}.keyword'].size()==0${suffix}`;\n textOperands.push(`doc['${f['masterfield']}.keyword'].value`);\n } else {\n str += `doc['${operands[i]}'].size()==0${suffix}`;\n textOperands.push(`doc['${f['masterfield']}'].value`);\n }\n }\n });\n\n formula.format.split('%s').forEach((text: string, i: number) => {\n textFormat += i === 0 ? `'${text}'` : ` + '${text}'`;\n if (textOperands[i]) textFormat += ` + ${textOperands[i]} `;\n });\n\n script = { script: `if( ${str} ) { return '' } else { return ${textFormat}}` };\n break;\n }\n\n case 'FORMAT_DATE':\n script = { script: `if(doc['${operands[0]}'].size()==0) { return '-'} else { return DateTimeFormatter.ofPattern('${dateFormat[formula.outputdateformat]}').withZone(ZoneId.of('${timezone}')).format(Instant.ofEpochMilli(doc['${operands[0]}'].value.millis))}` };\n break;\n\n default:\n script = { script: `doc['${operands[0]}']` };\n }\n\n return script;\n}\n\n// ---------------------------------------------------------------------------\n// getScriptFieldFilter\n// ---------------------------------------------------------------------------\nexport function getScriptFieldFilter(field: any, fMap: Map<any, any>): any {\n const script: any = getFormula(field.formula[0], fMap, true);\n const filterObj: any = {};\n let oprd1 = 0;\n\n switch (field.filter.operator) {\n case 'LESS_THAN':\n try { oprd1 = parseInt(field.filter.operand[0], 10); } catch { oprd1 = 0; }\n filterObj['script'] = { script: script.script.substring(0, script.script.length - 1).concat(` < ${oprd1} }`) };\n break;\n case 'GREATER_THAN':\n try { oprd1 = parseInt(field.filter.operand[0], 10); } catch { oprd1 = 0; }\n filterObj['script'] = { script: script.script.substring(0, script.script.length - 1).concat(` > ${oprd1} }`) };\n break;\n case 'BETWEEN':\n try {\n oprd1 = parseInt(field.filter.operand[0], 10);\n } catch { oprd1 = 0; }\n break;\n }\n return filterObj;\n}\n\nfunction resolveUserGroupOperand(loggedInUser: any): number | null {\n const candidates = [loggedInUser, getQueryUser()];\n for (const user of candidates) {\n if (!user || typeof user !== 'object' || Array.isArray(user)) continue;\n const role = String(\n user.role ?? user.Role ?? user.profile?.role_details?.role ?? ''\n ).toUpperCase();\n if (role === 'ADMIN') return null;\n const groupId = normalizeUserGroupId(\n user.userGroupId ?? user.UserGroupID ?? user.groupId ?? user.profile?.userGroupId\n );\n if (groupId != null) return groupId;\n }\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// getFilters\n// ---------------------------------------------------------------------------\nexport function getFilters(\n field: any,\n type: string,\n loggedInUser: any | null = null,\n isTask = false\n): any {\n let filterResult: any = {};\n let filterObj: any = {};\n\n if (isTask) field = { ...field, isTaskField: true };\n\n // Date format normalisation\n if (\n (field.masterFieldType === 'DATE_TIME_PICKER' || field.masterFieldType === 'DATE_PICKER') &&\n field.fieldFormat\n ) {\n field.filter.operand = field.filter.operand.map((oprd: any) => {\n if (isDateMath(oprd)) return oprd;\n const pattern = dateFieldPattern[field.fieldFormat] ?? field.fieldFormat;\n return dayjs(oprd, pattern).format('YYYY-MM-DD');\n });\n }\n\n if (field['taskfield'] && !field['masterFieldDataType']) {\n field['masterFieldDataType'] = getDataType(field['taskfield']);\n }\n\n switch (field.filter?.operator) {\n case 'EQUALS':\n case 'DATE_IS': {\n filterObj = { bool: { should: [] } };\n if (field['masterFieldType'] === 'FORM_SEARCH' || field['masterFieldType'] === 'INPUT_TAG') {\n filterObj['bool']['should'].push({ match_phrase: { [`${field.masterfield}.view`]: field.filter.operand[0] } });\n } else if (field['masterFieldDataType'] === 'STRING' && !dateTypes.includes(field['masterFieldType']) && field['masterFieldType'] !== 'INPUT_FORMULA' && (!field.isTaskField || !taskDate.includes(field.masterfield))) {\n filterObj['bool']['should'].push({ match_phrase: { [`${field.masterfield}.keyword`]: field.filter.operand[0] } });\n } else if (field['masterFieldDataType'] === 'STRING' && !dateTypes.includes(field['masterFieldType'])) {\n filterObj['bool']['should'].push({ match_phrase: { [`${field.masterfield}`]: field.filter.operand[0] } });\n } else if (field['masterFieldType'] === 'DATE_TIME_PICKER' || field['masterFieldType'] === 'DATE_PICKER') {\n if (!field.filter.operand?.[0]) break;\n try {\n const start = field.filter.operand[0];\n const end = field.filter.operand[1] || field.filter.operand[0];\n const utcDate = resolveDateMath(start)?.toISOString() ?? new Date(start + 'T00:00:00Z').toISOString();\n const utcEndDate = resolveDateMath(end)?.toISOString() ?? new Date(end + 'T23:59:59Z').toISOString();\n filterObj['bool']['must'] = [{ range: { [`${field.masterfield}`]: { gte: utcDate, lte: utcEndDate } } }];\n } catch { break; }\n } else {\n if (field.filter.operand.length > 1) {\n filterObj['bool']['should'].push({ terms: { [`${field.masterfield}`]: field.filter.operand } });\n } else {\n filterObj['bool']['should'].push({ term: { [`${field.masterfield}`]: field.filter.operand[0] } });\n }\n }\n\n filterResult = { bool: { must: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterResult;\n if (filterObj['bool']['should']?.length > 0 || filterObj['bool']['must']?.length) {\n filters.push({ ...filterResult });\n }\n break;\n }\n\n case 'IN': {\n filterObj = { bool: { should: [] } };\n const inOperands = Array.isArray(field.filter.operand) ? field.filter.operand : [field.filter.operand];\n inOperands.forEach((oprd: any) => {\n if (field['masterFieldType'] === 'FORM_SEARCH' || field['masterFieldType'] === 'INPUT_TAG') {\n filterObj['bool']['should'].push({ match_phrase: { [`${field.masterfield}.view`]: oprd } });\n } else if (\n (field['masterFieldDataType'] === 'STRING' && !dateTypes.includes(field['masterFieldType']) && field['masterFieldType'] !== 'INPUT_FORMULA' && !field.isTaskField) ||\n (field['masterFieldDataType'] === 'STRING' && field.isTaskField && !taskDate.includes(field.masterfield))\n ) {\n filterObj['bool']['should'].push({ match_phrase: { [`${field.masterfield}.keyword`]: oprd } });\n } else if (\n (field['masterFieldDataType'] === 'STRING' && !dateTypes.includes(field['masterFieldType']) && !field.isTaskField) ||\n (field['masterFieldDataType'] === 'STRING' && field.isTaskField && !taskDate.includes(field.masterfield))\n ) {\n filterObj['bool']['should'].push({ match_phrase: { [`${field.masterfield}`]: oprd } });\n } else {\n filterObj['bool']['should'].push({ term: { [`${field.masterfield}`]: oprd } });\n }\n });\n\n filterResult = { bool: { must: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterResult;\n if (filterObj['bool']['should'].length > 0) filters.push({ ...filterResult });\n break;\n }\n\n case 'NOT_IN': {\n filterObj = { bool: { should: [] } };\n const notInOperands = Array.isArray(field.filter.operand) ? field.filter.operand : [field.filter.operand];\n notInOperands.forEach((oprd: any) => {\n if (field['masterFieldType'] === 'FORM_SEARCH' || field['masterFieldType'] === 'INPUT_TAG') {\n filterObj['bool']['should'].push({ match_phrase: { [`${field.masterfield}.view`]: oprd } });\n } else if (\n (field['masterFieldDataType'] === 'STRING' && !dateTypes.includes(field['masterFieldType']) && !field.isTaskField) ||\n (field.isTaskField && !taskDate.includes(field.masterfield))\n ) {\n filterObj['bool']['should'].push({ match_phrase: { [`${field.masterfield}`]: oprd } });\n } else {\n filterObj['bool']['should'].push({ term: { [`${field.masterfield}`]: oprd } });\n }\n });\n\n filterResult = { bool: { must_not: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterResult;\n if (filterObj['bool']['should'].length > 0) filters.push({ ...filterResult });\n break;\n }\n\n case 'EMPTY':\n filterObj = { exists: { field: field.masterfield } };\n filterResult = { bool: { must_not: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterResult;\n filters.push({ ...filterResult });\n break;\n\n case 'NOT_EMPTY':\n filterObj = { exists: { field: field.masterfield } };\n filterResult = { bool: { must: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterResult;\n filters.push({ ...filterResult });\n break;\n\n case 'STARTS_WITH': {\n filterObj = { prefix: {} };\n if (field['masterFieldType'] === 'FORM_SEARCH' || field['masterFieldType'] === 'INPUT_TAG') {\n filterObj['prefix'][`${field.masterfield}.view`] = field.filter.operand[0].toLowerCase();\n } else if (\n (field['masterFieldDataType'] === 'STRING' && !dateTypes.includes(field['masterFieldType']) && !field.isTaskField) ||\n (field.isTaskField && !taskDate.includes(field.masterfield))\n ) {\n filterObj['prefix'][`${field.masterfield}.keyword`] = field.filter.operand[0];\n } else {\n filterObj['prefix'][field.masterfield] = field.filter.operand[0];\n }\n\n filterResult = { bool: { must: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterResult;\n filters.push({ ...filterResult });\n break;\n }\n\n case 'LESS_THAN': {\n if (field.masterfield) {\n let oprd1: any = 0;\n try {\n const dateMath = resolveDateMath(field.filter.operand[0]);\n oprd1 = dateMath ? dateMath.toISOString()\n : isValidDate(field.filter.operand[0]) ? field.filter.operand[0]\n : parseInt(field.filter.operand[0], 10);\n }\n catch { oprd1 = 0; }\n filterObj = { range: { [field.masterfield]: { lt: oprd1 } } };\n filterResult = { bool: { must: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterResult;\n filters.push({ ...filterResult });\n } else {\n scriptFilters.push(getScriptFieldFilter(field, fieldMap));\n }\n break;\n }\n\n case 'GREATER_THAN': {\n if (field.masterfield) {\n let oprd1: any = 0;\n try {\n const dateMath = resolveDateMath(field.filter.operand[0]);\n oprd1 = dateMath ? dateMath.toISOString()\n : isValidDate(field.filter.operand[0]) ? field.filter.operand[0]\n : parseInt(field.filter.operand[0], 10);\n }\n catch { oprd1 = 0; }\n filterObj = { range: { [field.masterfield]: { gt: oprd1 } } };\n filterResult = { bool: { must: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterResult;\n filters.push({ ...filterResult });\n } else {\n scriptFilters.push(getScriptFieldFilter(field, fieldMap));\n }\n break;\n }\n\n case 'BETWEEN': {\n let oprd1: any = 0;\n let oprd2: any = 0;\n try {\n const isDateField =\n dateTypes.includes(field['masterFieldType']) ||\n (field.isTaskField && taskDate.includes(field.masterfield));\n if (isDateField) {\n if (field.filter.operand?.[0]) {\n const start = field.filter.operand[0];\n const end = field.filter.operand[1] || field.filter.operand[0];\n oprd1 = resolveDateMath(start)?.toISOString() ?? new Date(start + 'T00:00:00Z').toISOString();\n oprd2 = resolveDateMath(end)?.toISOString() ?? new Date(end + 'T23:59:59Z').toISOString();\n }\n } else if (\n (field['masterFieldDataType'] === 'STRING' && !dateTypes.includes(field['masterFieldType']) && !field.isTaskField) ||\n (field.isTaskField && !taskDate.includes(field.masterfield))\n ) {\n oprd1 = parseInt(field.filter.operand[0], 10);\n oprd2 = parseInt(field.filter.operand[1], 10);\n } else {\n oprd1 = field.filter.operand[0];\n oprd2 = field.filter.operand[1];\n }\n } catch { oprd1 = 0; oprd2 = 0; }\n\n const useDateRange =\n (field['masterFieldDataType'] === 'STRING' && dateTypes.includes(field['masterFieldType']) && !field.isTaskField) ||\n (field.isTaskField && taskDate.includes(field.masterfield));\n\n filterObj = {\n range: {\n [field.masterfield]: useDateRange\n ? { gte: oprd1, lte: oprd2 }\n : { gt: oprd1, lt: oprd2 },\n },\n };\n filterResult = { bool: { must: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterObj;\n filters.push({ ...filterResult });\n break;\n }\n\n case 'IN_UG': {\n const userGroupId = resolveUserGroupOperand(loggedInUser);\n if (userGroupId != null && field.masterfield) {\n filterObj = { bool: { should: [{ term: { [`${field.masterfield}`]: userGroupId } }] } };\n filterResult = { bool: { must: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterResult;\n filters.push({ ...filterResult });\n }\n break;\n }\n\n case '_ALL': {\n let oprd1: any = field.filter.operand;\n if (typeof oprd1 === 'string' && oprd1.includes('/')) oprd1 = oprd1.replace(/\\//g, '\\\\/');\n filterObj = { bool: { should: [{ query_string: { query: `*${oprd1}*` } }] } };\n if (field.filter?.fields) {\n filterObj['bool']['should'][0].query_string['fields'] = field.filter.fields;\n }\n filters.push({ bool: { must: { ...filterObj } } });\n break;\n }\n\n case 'CONTAINS': {\n let oprd1: any = field.filter.operand;\n if (typeof oprd1 === 'string' && oprd1.includes('/')) oprd1 = oprd1.replace(/\\//g, '\\\\/');\n filterObj = { bool: { should: [{ wildcard: { [`${field.masterfield}.keyword`]: { value: `*${oprd1}*`, case_insensitive: true } } }] } };\n filterResult = { bool: { must: { ...filterObj } } };\n if (type === 'PIVOT') return filterObj;\n if (type === 'COLUMN_FILTER') return filterObj;\n filters.push({ ...filterResult });\n break;\n }\n\n case 'MULTIPLE': {\n let oprd1: any = field.filter.operand;\n if (typeof oprd1 === 'string' && oprd1.includes('/')) oprd1 = oprd1.replace(/\\//g, '\\\\/');\n filterObj = { bool: { should: [{ multi_match: { query: `${oprd1}`, type: 'cross_fields', operator: 'and' } }] } };\n filters.push({ bool: { must: { ...filterObj } } });\n break;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// getSort\n// ---------------------------------------------------------------------------\nfunction getSort(field: any): any {\n const sortObj: any = {};\n const order = field.sortOrder.toLowerCase();\n if (field.masterFieldType === 'FORM_SEARCH' || field.masterFieldType === 'INPUT_TAG') {\n sortObj[resolveFormSearchViewField(field.masterfield)] = { order };\n } else if (\n (field.masterFieldDataType === 'STRING' && !dateTypes.includes(field['masterFieldType']) && !field.isTaskField) ||\n (field.isTaskField && field.masterFieldDataType === 'STRING' && !taskDate.includes(field['masterfield']))\n ) {\n sortObj[`${field.masterfield}.keyword`] = { order };\n } else if (\n dateTypes.includes(field['masterFieldType']) ||\n // Numeric task fields must not take the date branch: a numeric mapping\n // rejects `format: strict_date_optional_time_nanos`.\n (field.isTaskField && !taskNumericFields.includes(field.masterfield) && !taskDate.includes(field['masterField']))\n ) {\n sortObj[field.masterfield] = { order, format: 'strict_date_optional_time_nanos' };\n } else {\n sortObj[field.masterfield] = { order };\n }\n return sortObj;\n}\n\nconst taskSortLabelMap: Record<string, string> = {\n Assignee: 'assigneeRoleIds',\n Assignee2: 'escalationL1RoleIds',\n Assignee3: 'escalationL2RoleIds',\n};\n\nconst taskNumericSortFields: string[] = [\n ...taskNumericFields, ...Object.values(taskSortLabelMap),\n];\n\nconst taskTextSortFields: string[] = [\n 'title', 'description', 'department', 'status', 'dStatus', 'priority',\n 'stageCode', 'submittedBy', 'type',\n];\n\nfunction toTaskField(label: string): string {\n const normalized = label.replace(/ID$/, 'Id');\n return normalized.charAt(0).toLowerCase() + normalized.slice(1);\n}\n\nfunction buildTaskSort(masterfield: string, order: string): any | null {\n if (taskDate.includes(masterfield)) {\n return { [masterfield]: { order, format: 'strict_date_optional_time_nanos' } };\n }\n if (taskNumericSortFields.includes(masterfield)) return { [masterfield]: { order } };\n if (taskTextSortFields.includes(masterfield)) return { [`${masterfield}.keyword`]: { order } };\n return null;\n}\n\nfunction getTaskElementSort(dataSource: any, fieldMetaByName: Map<string, any>): any | null {\n if (!Array.isArray(dataSource?.forms)) return null;\n for (const form of dataSource.forms) {\n for (const element of form?.elements || []) {\n if (!element?.sortOrder || element.hide) continue;\n const label = element.label || element.header;\n if (!label) continue;\n const meta = fieldMetaByName.get(label) || fieldMetaByName.get(toTaskField(label));\n const masterfield = taskSortLabelMap[label] || meta?.masterfield || toTaskField(label);\n const sortObj = buildTaskSort(masterfield, String(element.sortOrder).toLowerCase());\n if (sortObj) return sortObj;\n }\n }\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Pivot helpers\n// ---------------------------------------------------------------------------\nfunction getCompositeAggregations(\n pivotBody: any,\n filterMap: Map<string, any>,\n aggDataPoints: any,\n size = 50000,\n scriptFields: any = {},\n loggedInUser: any = null,\n sort: any[] = [],\n fieldMetaByName?: Map<string, any>\n) {\n const composite: any = { size, sources: [] };\n\n pivotBody.rows.forEach((row: any) => {\n const filter = filterMap.get(row.title);\n aggDataPoints['rows'].push(row.title);\n if (filter) {\n const fb = { header: row.title, masterfield: row.masterField, filter: { operator: filter.operator, operand: filter.value } };\n getFilters(fb, 'DATAPOINT', loggedInUser);\n }\n\n let sortOrder: string | null = null;\n if (sort.length > 0) {\n for (const s of sort) {\n if (Object.keys(s).length > 0 && Object.keys(s)[0] === row.masterField) {\n sortOrder = s[row.masterField]['order'];\n break;\n }\n }\n }\n\n // Resolve the field's type from the data-point metadata when the pivot row\n // doesn't carry it. Without this a text group-by is aggregated on its\n // analysed form and Elasticsearch rejects it (\"Fielddata is disabled on\n // [<field>]\") — a terms aggregation must target the .keyword sub-field.\n const meta = fieldMetaByName?.get(row.title) || fieldMetaByName?.get(row.masterField) || {};\n const mfType = row.masterFieldType ?? meta.masterFieldType;\n const mfDataType = row.masterFieldDataType ?? meta.masterFieldDataType ?? (mfType ? getDataType(mfType) : undefined);\n\n const sourceObj: any = {};\n if (mfType === 'FORM_SEARCH' || mfType === 'INPUT_TAG') {\n sourceObj[row.title] = { terms: { field: resolveFormSearchViewField(row.title) } };\n } else if (mfType === 'FILE_UPLOAD_V2') {\n sourceObj[row.title] = { terms: { field: `${row.title}.mediaKey.keyword` } };\n } else if (mfDataType === 'STRING' && !dateTypes.includes(mfType) && !isNumericTaskField(row, fieldMetaByName)) {\n sourceObj[row.title] = { terms: { field: `${row.title}.keyword` } };\n } else if (!mfDataType && Object.keys(scriptFields).length > 0) {\n sourceObj[row.title] = { terms: scriptFields[row.title] };\n } else {\n sourceObj[row.title] = { terms: { field: row.title } };\n if (sortOrder) sourceObj[row.title]['terms']['order'] = sortOrder;\n }\n composite.sources.push(sourceObj);\n });\n\n return { composite, aggDataPoints };\n}\n\nfunction getColumnAggregations(\n pivotBody: any,\n filterMap: Map<string, any>,\n aggDataPoints: any,\n loggedInUser: any = null,\n fMap?: Map<any, any>\n) {\n const colAggs: any = {};\n const colFilters: any[] = [];\n\n pivotBody.columns.forEach((col: any, i: number) => {\n const filter = filterMap.get(col.title);\n aggDataPoints['cols'].push(col.title);\n if (filter) {\n const fb = { header: col.title, masterfield: col.masterField, filter: { operator: filter.operator, operand: filter.value } };\n const colFilter = getFilters(fb, 'PIVOT', loggedInUser);\n if (colFilter) colFilters.push(colFilter);\n }\n colAggs[col.title] = { terms: { field: col.title } };\n if (i === pivotBody.columns.length - 1) {\n const summaryResult = getSummaryAggregations(pivotBody, filterMap, aggDataPoints, loggedInUser, fMap);\n colAggs[col.title]['aggs'] = summaryResult.summaryAggs;\n }\n });\n\n return { colFilters, colAggs, aggDataPoints };\n}\n\n// A pivot entry refers to a numeric task field when its masterField is a known\n// numeric task field AND the widget is task-based — established either by the\n// entry itself or by the matching data-source field carrying isTaskField.\nfunction isNumericTaskField(entry: any, fMap?: Map<any, any>): boolean {\n const masterfield = entry?.masterField ?? entry?.masterfield;\n if (!masterfield || !taskNumericFields.includes(masterfield)) return false;\n if (entry.isTaskField || entry.taskfield) return true;\n if (!fMap) return false;\n for (const [, field] of fMap) {\n if (field?.masterfield === masterfield && (field?.isTaskField || field?.taskfield)) {\n return true;\n }\n }\n return false;\n}\n\nfunction getSummaryAggregations(\n pivotBody: any,\n filterMap: Map<string, any>,\n aggDataPoints: any,\n loggedInUser: any = null,\n fMap?: Map<any, any>\n) {\n const summaryAggs: any = {};\n const sortKeys: any = {};\n\n if (fMap) {\n for (const [, value] of fMap) {\n if (value?.masterfield && value.sortOrder) {\n sortKeys[value.masterfield] = value.sortOrder;\n }\n }\n }\n pivotBody.summary.forEach((sumary: any) => {\n const filter = filterMap.get(sumary.value);\n aggDataPoints['summary'].push(sumary.value);\n summaryAggs[sumary.value] = {};\n\n const addBucketSort = (key: string) => {\n if (sortKeys[key]) {\n summaryAggs[`${sumary.value}_sort`] = { bucket_sort: { sort: [{ [sumary.value]: { order: sortKeys[key] } }] } };\n }\n };\n\n // Resolve the metric aggregation type + field. Text fields have no numeric\n // fielddata, so an arithmetic agg (sum/avg/min/max) over analysed text 500s\n // in ES (\"Fielddata is disabled\") — count occurrences on the .keyword\n // sub-field instead. FORM_SEARCH counts on its .view sub-field, suffixed\n // with .keyword only when the mapping says that sub-field is text, not long.\n // FILE_UPLOAD_V2 stores its indexed value under the .mediaKey.keyword sub-field.\n //\n // Numeric task fields (duration, delay, ...) are exempt: widgets saved before\n // taskTextFields was corrected still carry masterFieldDataType:'STRING' on\n // them, which would suffix .keyword (400s on a numeric mapping) and silently\n // downgrade the requested avg/sum to value_count.\n const isTextField =\n sumary.masterFieldDataType === 'STRING' &&\n !dateTypes.includes(sumary.masterFieldType) &&\n !isNumericTaskField(sumary, fMap);\n let aggType = sumary.type;\n let aggField = sumary.title;\n if (sumary.masterFieldType === 'FORM_SEARCH' && (sumary.type === 'value_count' || sumary.type === 'cardinality')) {\n aggField = resolveFormSearchViewField(sumary.title);\n } else if (sumary.masterFieldType === 'FILE_UPLOAD_V2') {\n aggField = `${sumary.title}.mediaKey.keyword`;\n } else if (isTextField) {\n if (['sum', 'avg', 'min', 'max'].includes(sumary.type)) aggType = 'value_count';\n aggField = `${sumary.title}.keyword`;\n }\n const usesRawField = aggField === sumary.title;\n\n if (filter) {\n const fb = {\n header: sumary.title, masterfield: filter.operand ?? filter.masterField,\n masterFieldDataType: filter.masterFieldDataType, masterFieldType: filter.masterFieldType,\n filter: { operator: filter.operator, operand: filter.value },\n };\n summaryAggs[sumary.value]['filter'] = { bool: {} };\n\n const summaryFilter = getFilters(fb, 'PIVOT', loggedInUser);\n if (summaryFilter && mustOp.includes(filter.operator)) {\n summaryAggs[sumary.value]['filter']['bool']['must'] = [summaryFilter];\n } else if (summaryFilter && mustNotOp.includes(filter.operator)) {\n summaryAggs[sumary.value]['filter']['bool']['must_not'] = [{ ...summaryFilter }];\n }\n\n summaryAggs[sumary.value]['aggs'] = { [sumary.value]: {} };\n summaryAggs[sumary.value]['aggs'][sumary.value][aggType] = { field: aggField };\n if (usesRawField) addBucketSort(sumary.title);\n } else {\n summaryAggs[sumary.value][aggType] = { field: aggField };\n if (usesRawField) addBucketSort(sumary.title);\n }\n });\n\n return { summaryAggs, aggDataPoints };\n}\n\n// ---------------------------------------------------------------------------\n// generateQuery\n// ---------------------------------------------------------------------------\nexport function generateQuery(\n configuration: any,\n dataSource: any,\n formId: any,\n skip: number | null = null,\n limit: number | null = null,\n extraFilters: any[] = [],\n dashboardFilters: any[] = [],\n submissionIds: any[] = [],\n loggedInUser: any = null,\n dashboardSort: any = null,\n searchAfter: any = null,\n isTask = false,\n mappings: any = null\n): string {\n filters = [];\n scriptFilters = [];\n fieldMap = new Map();\n currentMappings = mappings;\n\n let staticQueryClause: any = null;\n const rawDataSourceQuery = dataSource?.query;\n if (rawDataSourceQuery && typeof rawDataSourceQuery === 'string') {\n try {\n const parsed = JSON.parse(rawDataSourceQuery);\n const isPreviouslyGenerated =\n parsed.type === 'aggregation' ||\n parsed.type === 'summary_aggregation' ||\n parsed.type === 'script' ||\n 'aggsDataPoints' in parsed ||\n 'dataPoints' in parsed ||\n 'formId' in parsed ||\n parsed.isTask === true;\n if (!isPreviouslyGenerated && parsed.query) {\n staticQueryClause = parsed.query;\n }\n } catch { /* ignore unparseable */ }\n }\n\n let isFilter = false;\n let isFormula = false;\n let query: any = {};\n const dataPoints: string[] = [];\n const scriptFields: any = {};\n let queryType: string | null = null;\n let aggDataPoints: any = {};\n let aggregations: any = {};\n let sort: any[] = [];\n let isSummaryOnly = false;\n const fieldMetaByName = new Map<string, any>();\n if (dataSource) {\n const columnMap: any = {};\n if (dashboardSort) {\n configuration?.columns.forEach((col: any) => {\n columnMap[col.dataPoint] = col;\n });\n }\n\n dataSource?.fields?.forEach((field: any) => {\n if (isTask) field['isTaskField'] = true;\n fieldMap.set(field.id, field);\n dataPoints.push(field.header);\n\n if (!field.masterfield && (field.taskfield || field.isTaskField)) {\n field.masterfield = field.header.charAt(0).toLowerCase() + field.header.slice(1);\n if (taskTextFields.includes(field.masterfield)) field.masterFieldDataType = 'STRING';\n }\n\n if (field.formula?.length > 0) {\n isFormula = true;\n field.formula.forEach((formula: any) => {\n scriptFields[field.header] = getFormula(formula, fieldMap);\n });\n }\n\n if (field.filter && Object.keys(field.filter).length > 0) {\n isFilter = true;\n getFilters(field, 'DATAPOINT', loggedInUser, isTask);\n }\n\n let sortObj: any | null = null;\n if (field.sortOrder) {\n let skipSort = false;\n if (dataSource?.pivot?.summary instanceof Array && dataSource?.pivot?.summary?.length > 0) {\n const pFields = dataSource?.pivot?.summary.filter((s: any) => s.masterField);\n if (pFields.includes(field.masterfield)) skipSort = true;\n }\n if (!skipSort) sortObj = getSort(field);\n }\n\n if (dashboardSort && columnMap[field.header]) {\n const label = columnMap[field.header]['label'];\n if (dashboardSort[label]) {\n const sb = { masterfield: field.masterfield, masterFieldType: field.masterFieldType, masterFieldDataType: field.masterFieldDataType, sortOrder: dashboardSort[label] };\n sortObj = getSort(sb);\n }\n }\n\n if (sortObj) sort.push(sortObj);\n\n if (field.header) fieldMetaByName.set(field.header, field);\n if (field.masterfield) fieldMetaByName.set(field.masterfield, field);\n });\n\n if (dashboardFilters.length > 0) {\n dashboardFilters.forEach((fb: any) => {\n isFilter = true;\n getFilters(fb, 'DATAPOINT', loggedInUser, isTask);\n });\n }\n\n if (configuration.filters?.length > 0) {\n configuration.filters.forEach((field: any) => {\n if (field.values?.length > 0) {\n isFilter = true;\n const fb: any = { header: '', masterfield: field.fieldLabel, masterFieldType: field.fieldType, masterFieldDataType: getDataType(field.fieldType), filter: { operator: field.operator, operand: field.values } };\n getFilters(fb, 'DATAPOINT', loggedInUser, isTask);\n }\n });\n }\n\n if (\n dataSource?.pivot && Object.keys(dataSource?.pivot).length > 0 &&\n (\n (dataSource?.pivot.rows && dataSource?.pivot.rows.length > 0) ||\n (dataSource?.pivot.columns && dataSource?.pivot.columns.length > 0) ||\n (dataSource?.pivot.summary && dataSource?.pivot.summary.length > 0)\n )\n ) {\n isFormula = false;\n queryType = 'aggregation';\n aggDataPoints = { rows: [], cols: [], summary: [] };\n const filterMap2 = new Map<string, any>();\n let size = 50000;\n\n if (dataSource?.pivot.filters?.length > 0) {\n dataSource?.pivot.filters.forEach((f: any) => filterMap2.set(f.field, f));\n }\n if (!isDrilldownView() && dataSource?.displayRowLimit && dataSource?.displayRowLimit !== '') {\n size = dataSource?.displayRowLimit;\n }\n\n if (dataSource?.pivot.rows && dataSource?.pivot.rows.length > 0) {\n const compositeResult = getCompositeAggregations(dataSource?.pivot, filterMap2, aggDataPoints, size, scriptFields, loggedInUser, sort, fieldMetaByName);\n if (Object.keys(filters).length > 0) isFilter = true;\n\n aggregations['my_buckets'] = { composite: compositeResult.composite, aggs: {} };\n\n const colResult = getColumnAggregations(dataSource?.pivot, filterMap2, aggDataPoints, loggedInUser, fieldMap);\n if (Object.keys(colResult.colAggs).length === 0) {\n const summaryResult = getSummaryAggregations(dataSource?.pivot, filterMap2, aggDataPoints, loggedInUser, fieldMap);\n aggregations['my_buckets']['aggs'] = summaryResult.summaryAggs;\n } else {\n if (colResult.colFilters.length > 0) {\n aggregations['my_buckets']['aggs']['columns'] = { filter: { bool: { filter: colResult.colFilters } } };\n aggregations['my_buckets']['aggs']['columns']['aggs'] = colResult.colAggs;\n } else {\n aggregations['my_buckets']['aggs'] = colResult.colAggs;\n }\n }\n } else {\n if (Object.keys(filters).length > 0) isFilter = true;\n const summaryResult = getSummaryAggregations(dataSource?.pivot, filterMap2, aggDataPoints, loggedInUser, fieldMap);\n const summaryAggs = summaryResult.summaryAggs;\n const hasFilteredSummary = Object.values(summaryAggs).some((agg: any) => agg?.filter);\n if (hasFilteredSummary) {\n aggregations['my_buckets'] = {\n composite: {\n size: 1,\n sources: [{ dummy_row: { terms: { script: \"return 'all';\", value_type: 'string' } } }],\n },\n aggs: summaryAggs,\n };\n } else {\n aggregations = summaryAggs;\n isSummaryOnly = true;\n }\n }\n }\n }\n\n if (extraFilters.length > 0) {\n isFilter = true;\n extraFilters.forEach((fb: any) => getFilters(fb, 'DATAPOINT', loggedInUser, isTask));\n }\n\n query = isTask ? { isTask: true } : { formId };\n\n if (submissionIds.length > 0) {\n const terms: any = {};\n submissionIds.forEach((filt: any) => { terms[filt.field] = filt.value; });\n query['query'] = { query: { terms } };\n }\n\n if (queryType === 'aggregation' && Object.keys(aggregations).length > 0) {\n query['type'] = queryType;\n query['dataPoints'] = dataPoints;\n query['aggsDataPoints'] = aggDataPoints;\n if (!query.query) query['query'] = {};\n query['query'] = { size: 0, aggs: aggregations };\n if (isSummaryOnly) {\n query['type'] = 'summary_aggregation';\n }\n }\n\n if (filters.length > 0 && !isFormula) {\n if (!query.query) {\n query['query'] = { query: { bool: { must: filters } } };\n } else {\n query['query']['query'] = { bool: { must: filters } };\n }\n }\n\n if (isFormula && Object.keys(scriptFields).length > 0) {\n query['type'] = 'script';\n query['dataPoints'] = dataPoints;\n if (!query.query) {\n query['query'] = { script_fields: scriptFields, _source: true };\n } else {\n query['query']['script_fields'] = scriptFields;\n query['query']['_source'] = true;\n }\n if (isFilter && filters.length > 0) query['query']['query'] = { bool: { must: filters } };\n if (scriptFilters.length > 0) {\n if (!query['query']['query']) query['query']['query'] = {};\n if (!query['query']['query']['bool']) {\n query['query']['query'] = { bool: { filter: scriptFilters } };\n } else {\n query['query']['query']['bool']['filter'] = scriptFilters;\n }\n }\n }\n\n if (!queryType && filters.length === 0 && !isFormula && extraFilters.length === 0 && submissionIds.length === 0) {\n if (!query.query) {\n query['query'] = { query: { match_all: {} } };\n } else {\n query['query']['query'] = { match_all: {} };\n }\n }\n\n if (staticQueryClause) {\n if (!query.query) query['query'] = {};\n const existing = query['query']['query'];\n if (existing && !(Object.keys(existing).length === 1 && 'match_all' in existing)) {\n query['query']['query'] = { bool: { must: [existing, staticQueryClause] } };\n } else {\n query['query']['query'] = staticQueryClause;\n }\n }\n\n if (query['query']) {\n query['query']['from'] = skip ?? 0;\n query['query']['size'] = limit ?? 20;\n query['query']['track_total_hits'] = true;\n }\n\n const configuredTaskSort = isTask && sort.length === 0\n ? getTaskElementSort(dataSource, fieldMetaByName)\n : null;\n\n if (sort.length > 0) {\n const hasTaskIdSort = sort.some((s: any) => s && Object.keys(s).includes('taskId'));\n query['query']['sort'] = isTask && !searchAfter && !hasTaskIdSort\n ? [...sort, { taskId: { order: 'desc' } }]\n : sort;\n } else if (isTask && !searchAfter) {\n query['query']['sort'] = [configuredTaskSort || { taskId: { order: 'desc' } }];\n } else {\n const sortKey = isTask ? 'uuid.keyword' : 'id';\n query['query']['sort'] = [{ [sortKey]: { order: isTask ? 'asc' : 'desc' } }];\n }\n\n if (searchAfter) {\n delete query['query']['from'];\n if (sort.length === 0) {\n query['query']['search_after'] = isTask ? [searchAfter['uuid']] : [searchAfter['id']];\n }\n if (configuration.columns.length > 0) {\n const source: string[] = isTask ? ['uuid'] : ['id'];\n configuration.columns.forEach((col: any) => source.push(col.dataPoint));\n if (isTask) {\n if (!source.includes('workflowId')) source.push('workflowId');\n if (!source.includes('workflowTypeId')) source.push('workflowTypeId');\n }\n query['query']['_source'] = source;\n }\n }\n\n return JSON.stringify(query);\n}\n\n// ---------------------------------------------------------------------------\n// getQuery\n// ---------------------------------------------------------------------------\nexport function getQuery(body: any, searchValue: any = null, staticFilters: any[] = []): any {\n filters = [];\n\n let dataType = getDataType(body.fieldType);\n let isTaskField = body.isTaskField;\n\n if (!body.fieldType && body.formTitle === 'Task_Form') {\n dataType = getDataType(body.fieldLabel);\n isTaskField = true;\n }\n\n staticFilters.forEach((sf: any) => {\n const result = getFilters(sf, 'COLUMN_FILTER', null, isTaskField);\n if (result) filters.push(result);\n });\n\n const safeValue = searchValue != null\n ? (typeof searchValue === 'string' ? searchValue : String(searchValue)).trim()\n : '';\n\n if (safeValue.length > 0) {\n const fb: any = { header: '', masterfield: body.fieldLabel, masterFieldType: body.fieldType, masterFieldDataType: dataType, filter: { operator: 'STARTS_WITH', operand: [safeValue] }, isTaskField };\n filters.push(getFilters(fb, 'COLUMN_FILTER', null, isTaskField));\n }\n\n const query: any = { size: 0, aggs: getUniqueValueForField(body) };\n if (filters.length > 0) query['query'] = { bool: { must: filters } };\n return query;\n}\n\n// ---------------------------------------------------------------------------\n// getUniqueValueForField\n// ---------------------------------------------------------------------------\nexport function getUniqueValueForField(body: any): any {\n const aggs: any = {};\n let fieldDataType = getDataType(body.fieldType);\n let field = body.fieldLabel;\n let isTaskField = body.isTaskField;\n\n if (!body.fieldType && body.formTitle === 'Task_Form') {\n fieldDataType = getDataType(body.fieldLabel);\n isTaskField = true;\n }\n\n if ((fieldDataType === 'STRING' && !dateTypes.includes(body.fieldType) && body.fieldType !== 'INPUT_FORMULA' && !isTaskField) || (isTaskField && fieldDataType === 'STRING' && !taskDate.includes(body.fieldLabel))) {\n field = `${body.fieldLabel}.keyword`;\n } else if ((fieldDataType === 'STRING' && !dateTypes.includes(body.fieldType) && !isTaskField) || (isTaskField && taskDate.includes(body.fieldLabel))) {\n field = `${body.fieldLabel}`;\n } else if (fieldDataType === 'ARRAY' && body.fieldType === 'AUTO_COMPLETE') {\n field = `${body.fieldLabel}`;\n } else if (body.fieldType === 'FILE_UPLOAD_V2') {\n field = `${body.fieldLabel}.mediaKey.keyword`;\n } else if (fieldDataType === 'ARRAY' || (fieldDataType === 'STRING' && (body.fieldType === 'FORM_SEARCH' || body.fieldType === 'INPUT_TAG'))) {\n field = `${body.fieldLabel}.view.keyword`;\n }\n\n if (body.summaryType) {\n aggs[body.fieldLabel] = { [body.summaryType]: { field } };\n } else {\n aggs[body.fieldLabel] = { terms: { field, size: 65536, order: { _key: 'asc' } } };\n }\n return aggs;\n}\n\n// ---------------------------------------------------------------------------\n// getQueryForFormSearch\n// ---------------------------------------------------------------------------\nexport function getQueryForFormSearch(\n form: any,\n formFilters: any[],\n fields: any,\n globalOperator = '$and',\n limit = 50\n): any {\n const globalOpKey = globalOperator === '$and' ? 'must' : 'should';\n const query: any = { size: 0 };\n const eleTypeMap: any = {};\n const filterObjList: any[] = [];\n const aggregations: any = {};\n let searchQuery: any = null;\n\n form?.elements.forEach((ele: any) => { eleTypeMap[ele.label] = ele.type; });\n\n formFilters.forEach((filt: any) => {\n const fb: any = {\n header: filt.label, masterfield: filt.label,\n masterFieldType: eleTypeMap[filt.label], masterFieldDataType: getDataType(eleTypeMap[filt.label]),\n filter: { operator: 'EQUALS', operand: [filt.value] },\n };\n if (filt.operator === 'in') { fb['filter']['operator'] = 'IN'; fb['filter']['operand'] = filt.arr_value; }\n if (filt.operator === 'regex') {\n fb['filter']['operator'] = 'CONTAINS';\n searchQuery = getFilters(fb, 'COLUMN_FILTER', null);\n } else {\n filterObjList.push(getFilters(fb, 'COLUMN_FILTER', null));\n }\n });\n\n if (filterObjList.length > 0 && searchQuery) {\n query['query'] = { bool: { must: [{ ...searchQuery }, { bool: { [globalOpKey]: filterObjList } }] } };\n } else if (filterObjList.length > 0) {\n query['query'] = { bool: { [globalOpKey]: filterObjList } };\n } else if (searchQuery) {\n query['query'] = { bool: { must: [{ ...searchQuery }] } };\n }\n\n if (fields.viewLabels.length > 0) {\n const composite: any = { size: limit, sources: [] };\n fields.viewLabels.forEach((f: string) => {\n if (f && f !== fields.selectLabel) {\n const src: any = {};\n if (eleTypeMap[f] === 'FORM_SEARCH' || eleTypeMap[f] === 'INPUT_TAG') {\n src[f] = { terms: { field: `${f}.view.keyword` } };\n } else {\n src[f] = { terms: { field: `${f}.keyword` } };\n }\n composite.sources.push(src);\n }\n });\n\n const summaryAggs: any = { [fields.selectLabel]: {} };\n const selType = eleTypeMap[fields.selectLabel];\n if (selType === 'FORM_SEARCH') {\n summaryAggs[fields.selectLabel]['terms'] = { field: `${fields.selectLabel}.view.keyword`, size: limit, order: { _key: 'asc' } };\n } else if (getDataType(selType) === 'STRING') {\n const f = (selType === 'DATE_PICKER' || selType === 'DATE_TIME_PICKER') ? `${fields.selectLabel}` : `${fields.selectLabel}.keyword`;\n summaryAggs[fields.selectLabel]['terms'] = { field: f, size: limit, order: { _key: 'asc' } };\n } else {\n summaryAggs[fields.selectLabel]['terms'] = { field: `${fields.selectLabel}`, size: limit, order: { _key: 'asc' } };\n }\n\n if (composite.sources.length > 0) {\n aggregations['my_buckets'] = { composite, aggs: summaryAggs };\n query['aggs'] = aggregations;\n } else {\n query['aggs'] = summaryAggs;\n }\n }\n\n return query;\n}\n\n// ---------------------------------------------------------------------------\n// getUsersQuery\n// ---------------------------------------------------------------------------\nexport function getUsersQuery(\n ids: any[],\n domain: string,\n isUser = false,\n size: number | null = null\n): any {\n const field = isUser ? 'userInfo.userID' : 'groupID';\n const mustQuery = ids?.length\n ? [{ bool: { should: [{ terms: { [field]: ids } }] } }]\n : [];\n\n const query: any = {\n query: { bool: { filter: { term: { _routing: domain } } } },\n from: 0,\n size: size ?? (ids ? ids.length : 10),\n track_total_hits: true,\n };\n\n if (mustQuery.length > 0) query.query.bool.must = mustQuery;\n return query;\n}\n\n// ---------------------------------------------------------------------------\n// getInitiationSubmissionsQuery\n// ---------------------------------------------------------------------------\nexport function getInitiationSubmissionsQuery(\n ids: any[],\n domain: string,\n size: number | null = null\n): any {\n const mustQuery = ids?.length\n ? [{ bool: { should: [{ terms: { workflowId: ids } }] } }]\n : [];\n\n const query: any = {\n query: { bool: { filter: { term: { _routing: domain } } } },\n from: 0,\n size: size ?? (ids ? ids.length : 10),\n track_total_hits: true,\n };\n\n if (mustQuery.length > 0) query.query.bool.must = mustQuery;\n return query;\n}\n\n// ---------------------------------------------------------------------------\n// getTasksQuery\n// ---------------------------------------------------------------------------\nexport function getTasksQuery(\n filterBody: any[],\n skip = 0,\n limit = 10000,\n searchText: string | null = null,\n sort: any = {}\n): any {\n const andFilter: any[] = [];\n const escalateFilter: any = { bool: { should: [] } };\n const termFilters: any[] = [];\n\n const query: any = {\n isTask: true,\n skipEscalateToMe: true,\n query: {\n query: { match_all: {} },\n from: skip,\n size: limit,\n track_total_hits: true,\n },\n };\n\n if (Array.isArray(filterBody) && filterBody.length > 0) {\n filterBody.forEach((filt: any) => {\n if (filt.key === 'workflowTypeId') {\n andFilter.push({ terms: { workflowTypeId: filt.value } });\n } else if (filt.key === 'type') {\n andFilter.push({ terms: { 'type.keyword': filt.value } });\n } else if (filt.key === 'startDate' && filt.operator === 'LESS_THAN') {\n andFilter.push({ range: { startDate: { lt: filt.value[0] } } });\n } else if (filt.key === 'escalationL1RoleIds' || filt.key === 'escalationL2RoleIds') {\n query['skipEscalateToMe'] = false;\n escalateFilter['bool']['should'].push({ terms: { [filt.key]: filt.value } });\n } else {\n const fo: any = { terms: {} };\n fo['terms'][filt.dataType === 'STRING' ? `${filt.key}.keyword` : filt.key] = filt.value;\n termFilters.push(fo);\n }\n });\n }\n\n if (termFilters.length > 0 || andFilter.length > 0 || escalateFilter['bool']['should'].length > 0 || searchText) {\n delete query['query']['query']['match_all'];\n query['query']['query']['bool'] = { must: [] };\n\n if (termFilters.length > 0) {\n query['query']['query']['bool']['must'].push({ bool: { should: termFilters } });\n }\n if (escalateFilter['bool']['should'].length > 0) andFilter.push(escalateFilter);\n if (andFilter.length > 0) {\n query['query']['query']['bool']['must'] = [...query['query']['query']['bool']['must'], ...andFilter];\n }\n if (searchText) {\n query['query']['query']['bool']['must'].push({ bool: { must: { query_string: { query: `*${searchText}*` } } } });\n }\n }\n\n if (Object.keys(sort).length > 0) {\n query['query']['sort'] = Object.keys(sort).map(k => ({ [k]: { order: sort[k] } }));\n } else {\n query['query']['sort'] = [{ 'uuid.keyword': { order: 'desc' } }];\n }\n\n return query;\n}\n\nexport const fetchFilterQuery = (dataSource: any, widgetData: any, id: any) => {\n let filterData = dataSource?.fields?.find((field: any) => field.header == id);\n if (!filterData) return null;\n filterData = {\n ...filterData,\n fieldLabel: filterData.header,\n fieldType: filterData.masterFieldType || filterData.header,\n };\n const dashboardFilters = formatDashboardFilters(widgetData, dataSource);\n const staticFilters = [\n ...dashboardFilters,\n ];\n return getQuery(filterData, \"\", staticFilters);\n};\n\ntype QueryObject = Record<string, any>;\n\nexport const updateAssigneeRoleId = (\n query: any,\n fieldName: string,\n newValue: string | number\n): QueryObject => {\n const clonedQuery = JSON.parse(query);\n\n const mustClauses =\n clonedQuery?.query?.query?.bool?.must ||\n clonedQuery?.query?.bool?.must ||\n clonedQuery?.bool?.must;\n\n if (Array.isArray(mustClauses)) {\n for (const must of mustClauses) {\n const nestedMust = must?.bool?.must;\n const shouldArray = nestedMust?.bool?.should;\n\n if (Array.isArray(shouldArray)) {\n for (const condition of shouldArray) {\n if (condition?.term?.[fieldName] !== undefined) {\n condition.term[fieldName] = newValue;\n return clonedQuery;\n }\n }\n }\n }\n }\n\n return clonedQuery;\n};\n\ninterface GenerateQueryParams {\n formId: string;\n dataPoints: string[];\n matchingKeys: string[];\n}\n\nexport function generateSearchQuery({\n formId,\n dataPoints,\n matchingKeys\n}: GenerateQueryParams) {\n if (!formId) throw new Error(\"formId is required\");\n if (!dataPoints || dataPoints.length === 0)\n throw new Error(\"dataPoints are required\");\n\n const dateField = \"Order Creation Date\";\n const mmyyField = \"MMYY\";\n const statusField = \"Logistics Status\";\n const tripIdField = \"Trip ID\";\n const mmyyScript = `if(doc['${dateField}'].size()==0) { return '-' } else { return DateTimeFormatter.ofPattern('MMM-yy').withZone(ZoneId.of('Asia/Calcutta')).format(Instant.ofEpochMilli(doc['${dateField}'].value.millis)) }`;\n\n const statusAggs: Record<string, any> = {};\n matchingKeys.forEach((key) => {\n statusAggs[`${key} Count`] = {\n filter: {\n bool: {\n must: [\n {\n bool: {\n should: [\n {\n match_phrase: {\n [`${statusField}.keyword`]: key\n }\n }\n ]\n }\n }\n ]\n }\n },\n aggs: {\n [`${key} Count`]: {\n value_count: {\n field: `${statusField}.keyword`\n }\n }\n }\n };\n });\n\n // Main query body\n const query = {\n size: 1000,\n aggs: {\n my_buckets: {\n composite: {\n size: 50000,\n sources: [\n {\n [mmyyField]: {\n terms: { script: mmyyScript }\n }\n },\n {\n [statusField]: {\n terms: { field: `${statusField}.keyword` }\n }\n }\n ]\n },\n aggs: {\n [tripIdField]: {\n value_count: {\n field: `${tripIdField}.keyword`\n }\n },\n ...statusAggs\n }\n }\n }\n };\n\n // Final structure\n return {\n formId,\n type: \"aggregation\",\n dataPoints,\n aggsDataPoints: {\n rows: [mmyyField, statusField],\n cols: [],\n summary: [tripIdField, ...matchingKeys.map((k) => `${k} Count`)]\n },\n query,\n from: 0,\n track_total_hits: true,\n sort: [{ id: { order: \"desc\" } }]\n };\n}\n\n\ninterface FormSearchQuery {\n skip: number;\n limit: number;\n sort: Record<string, any>;\n filter: any[];\n filterOperator: string | null;\n}\n\nexport const buildFormSearchQuery = (\n searchText: string,\n limit: number = 100,\n skip: number = 0\n): FormSearchQuery => {\n return {\n skip,\n limit,\n sort: {},\n filter: [\n {\n name: \"type\",\n arr_value: [\"MASTER\", \"WORKFLOW\"],\n operator: \"in\",\n },\n {\n name: \"title\",\n value: searchText,\n operator: \"regex\",\n mode: \"mwm\", // contains match\n },\n ],\n filterOperator: null,\n };\n};","// Subset of ZAI-Dashboard src/utils/constant.ts used by the ported query path.\nexport const LocalStorageKeys = {\n initiationFormSubmissionId: \"initiationFormSubmissionId\",\n};\n\nexport const taskAssignee = [\n \"assigneeUserIds\", \"assigneeRoleIds\", \"escalationL1UserIds\", \"escalationL1RoleIds\",\n \"escalationL2UserIds\", \"escalationL2RoleIds\", \"escalationL3UserIds\", \"escalationL3RoleIds\", \"submittedBy\",\n];\n","// Ported verbatim from ZAI-Dashboard src/services/table/tableFilters.ts.\n\nimport { LocalStorageKeys, taskAssignee } from \"./constants\";\nimport { camelCase, getDataType, getDateRange, humanizeDurationToMinutes, isValidDate, resolveIsTask } from \"./textUtils\";\nimport _ from 'lodash';\n\nconst taskFields = ['Title', 'Description', 'Department', 'Duration', 'CurrentEscalationLevel', 'Delay', 'StartDate', 'EndDate', 'Status', 'dStatus', 'Priority', 'StageCode', 'CritPath', 'ReworkCount', 'SubmittedBy', 'SubmittedOn', 'SubmissionId', 'TaskId', 'AssigneeUserIds', 'AssigneeRoleIds', 'EscalationL1UserIds', 'EscalationL1RoleIds', 'EscalationL2UserIds', 'EscalationL2RoleIds', 'EscalationL3UserIds', 'EscalationL3RoleIds', 'WorkflowId', 'workflowTypeId', 'completeDate']\n\nconst FIELD_IDENTITY_KEYS = ['header', 'masterfield', 'formfield', 'taskfield', 'label', 'fieldLabel'];\n\nconst taskFieldsCamel = taskFields.map((f) => camelCase(f));\n\nconst fieldMatchesLabel = (field: any, fieldLabel: string): boolean => {\n const target = fieldLabel.trim().toLowerCase();\n return FIELD_IDENTITY_KEYS.some((key) => {\n const val = field?.[key];\n return typeof val === 'string' && val.trim().toLowerCase() === target;\n });\n};\n\nconst resolveMasterfield = (field: any): string | undefined => {\n if (field?.masterfield) return field.masterfield;\n const raw = field?.taskfield || field?.formfield || field?.header;\n if (typeof raw !== 'string' || !raw) return undefined;\n if (field?.taskfield || field?.isTaskField) return raw.charAt(0).toLowerCase() + raw.slice(1);\n return raw;\n};\n\nexport const formatDashboardFilters = (body: any, dataSource: any, filters: any) => {\n const dashboardFilters: any = [];\n const fields: any[] = Array.isArray(dataSource?.fields) ? dataSource.fields.filter(Boolean) : [];\n\n if (filters?.filter && Object.keys(filters.filter).length > 0 && fields.length > 0) {\n const isTaskDataSource = !!(dataSource?.isTask || dataSource?.isTaskField);\n const hasTaskFields = isTaskDataSource || fields.some((f) => f.isTaskField || f.taskfield);\n const seen = new Set<string>();\n\n Object.keys(filters.filter).forEach((formTitle) => {\n const fieldFilters = filters.filter[formTitle];\n if (!fieldFilters || typeof fieldFilters !== 'object') return;\n\n const isTaskForm = formTitle === 'Task_Form';\n const formFields = fields.filter((f) => f['formtitle'] === formTitle || f['formTitle'] === formTitle);\n if (formFields.length === 0 && !(isTaskForm && hasTaskFields)) return;\n\n const candidates = formFields.length > 0 ? formFields : fields;\n\n Object.keys(fieldFilters).forEach((fieldLabel) => {\n const formFilter = fieldFilters[fieldLabel];\n if (!formFilter || typeof formFilter !== 'object') return;\n\n let operator = Object.keys(formFilter)[0];\n if (!operator) return;\n let values = formFilter[operator];\n\n const matched = candidates.find((f) => fieldMatchesLabel(f, fieldLabel));\n let masterFieldType = matched?.['masterFieldType'] ?? matched?.['fieldType'];\n\n if (operator === 'DATE_IS') {\n operator = (values?.[0] === 'TODAY') ? 'EQUALS' : 'BETWEEN';\n values = getDateRange(values?.[0]);\n if (!masterFieldType) masterFieldType = 'DATE_PICKER';\n }\n\n let masterfield = matched ? resolveMasterfield(matched) : undefined;\n if (!masterfield) {\n masterfield = (isTaskForm && taskFieldsCamel.includes(camelCase(fieldLabel)))\n ? camelCase(fieldLabel)\n : fieldLabel;\n }\n\n const isTaskField = !!(matched?.['isTaskField'] || matched?.['taskfield'])\n || (!matched && isTaskForm && hasTaskFields);\n\n const dedupeKey = JSON.stringify([masterfield, operator, values]);\n if (seen.has(dedupeKey)) return;\n seen.add(dedupeKey);\n\n const filterBody: any = {\n header: matched?.['header'] ?? fieldLabel,\n masterfield,\n masterFieldType,\n masterFieldDataType: getDataType(masterFieldType),\n filter: { operator, operand: values }\n };\n if (isTaskField) filterBody.isTaskField = true;\n\n dashboardFilters.push(filterBody);\n });\n });\n }\n\n if (filters?.cdate && body?.cdateFilters?.length > 0) {\n const operands = Object.values(filters.cdate);\n\n body.cdateFilters.forEach((cfilter: any) => {\n if (!cfilter) return;\n const operator = cfilter.operator === 'TODAY' ? 'EQUALS' : 'BETWEEN';\n\n const filterBody = {\n header: cfilter.header,\n masterfield: cfilter.masterfield,\n masterFieldType: cfilter.masterFieldType,\n masterFieldDataType: getDataType(cfilter.masterFieldType),\n filter: {operator: operator, operand: operands}\n }\n dashboardFilters.push({...filterBody})\n });\n }\n\n const searchTerm = typeof filters?.search === 'string' ? filters.search.trim() : '';\n if (searchTerm) {\n dashboardFilters.push({ filter: { operator: '_ALL', operand: searchTerm } });\n }\n\n return [ ...dashboardFilters ];\n}\n\nexport const formatHeaderFilters = (dataSource: any, filters: any, userIdMap: any = {}, workflowList: any = {}) => {\n const headerFilters: any = [];\n const fieldMap: any = {};\n\n let userTitleMap = _.invert(userIdMap || {});\n\n const invertedWF: any = {};\n\n for (const [key, value] of Object.entries(workflowList || {})) {\n const workflow: any = value;\n if (workflow?.Title != null) {\n invertedWF[workflow.Title] = Number(key);\n }\n }\n\n // Create a map of fields for efficient lookup\n dataSource?.fields?.forEach((field: any) => {\n if (field?.['header']) {\n fieldMap[field['header']] = field;\n }\n });\n\n const task_fields = taskFields.map(field => camelCase(field));\n const initiationSubField: any = {};\n\n // Helper function to get filter object\n const getFilterObj = (header: any, operator: any, operands: any) => {\n // Guard: header must exist in fieldMap\n const fieldInfo = fieldMap[header];\n if (!fieldInfo) return null;\n\n let fieldType = fieldInfo['masterFieldType'] || fieldInfo['fieldType'];\n let currentHeader = header;\n\n try {\n // Task assignee/escalation columns are user pickers too — Angular only\n // reaches them because its filter popup mutates the shared field def.\n const isUserField = fieldInfo['masterFieldType'] === 'AUTO_COMPLETE'\n || fieldInfo['fieldType'] === 'AUTO_COMPLETE'\n || ((fieldInfo['isTaskField'] || resolveIsTask(dataSource)) && taskAssignee.includes(header));\n if (isUserField) {\n const tmpOperands = Array.isArray(operands) ? [...operands] : [];\n operands = tmpOperands\n // A picked option is a user's display name; fall back to the\n // operand itself for options that were never name-resolved.\n .map(operand => parseInt(userTitleMap[operand] ?? operand))\n .filter((v: number) => !isNaN(v));\n // No id could be resolved — emitting the filter would query a\n // numeric field with a name and error out server-side.\n if (operands.length === 0) return null;\n }\n\n if (Object.keys(invertedWF).length > 0 && fieldInfo['fieldType'] === 'workflowTypeId') {\n const tmpOperands = Array.isArray(operands) ? [...operands] : [];\n operands = tmpOperands\n .map((operand: string) => parseInt(invertedWF[operand]))\n .filter((v: number) => !isNaN(v));\n\n } else if (fieldInfo['isTaskField'] && header === 'duration') {\n const minutes = humanizeDurationToMinutes(operands?.[0]);\n operands = [minutes];\n fieldType = 'duration';\n\n } else if (fieldInfo['isTaskField'] && !task_fields.includes(header)) {\n try {\n const initiationSubmissionStr = localStorage.getItem(LocalStorageKeys.initiationFormSubmissionId);\n const initiationSubmissions = initiationSubmissionStr ? JSON.parse(initiationSubmissionStr) : {};\n Object.keys(initiationSubmissions).forEach((wid: any) => {\n const submission = initiationSubmissions[wid]?.['initiationsubmission'];\n if (submission?.[header]) {\n if (!initiationSubField.hasOwnProperty(header)) {\n initiationSubField[header] = [];\n }\n const safeOperands = Array.isArray(operands) ? operands : [];\n if (safeOperands.includes(submission[header])) {\n initiationSubField[header].push(parseInt(wid));\n }\n }\n });\n } catch (e) {\n // ignore localStorage parse errors\n }\n operands = initiationSubField[header] || [];\n currentHeader = 'workflowId';\n fieldType = 'workflowId';\n }\n } catch (e) {\n // ignore errors in operand mapping\n }\n\n return {\n header: currentHeader,\n masterfield: fieldInfo['masterfield'] || currentHeader,\n masterFieldType: fieldType,\n masterFieldDataType: getDataType(fieldType),\n filter: { operator, operand: operands }\n };\n };\n\n if (filters && !Array.isArray(filters) && Object.keys(filters).length > 0) {\n Object.entries(filters).forEach(([key, value]: [string, unknown]) => {\n if (Array.isArray(value) && value.length > 0) {\n const header = key;\n if (!fieldMap[header]) return; // skip unknown headers\n const operator = value.length > 1 ? 'IN' : 'EQUALS';\n const operands = value;\n const filterObj = getFilterObj(header, operator, operands);\n if (filterObj) headerFilters.push(filterObj);\n }\n });\n }\n\n // Process filters\n if (filters instanceof Array && filters.length > 0) {\n if (filters.includes('=')) {\n const header = filters[0];\n const operand = [filters[2]];\n\n if ((typeof operand[0] === 'string' && operand[0] === '') || operand[0] === undefined) {\n const filterObj = getFilterObj(header, 'EMPTY', operand);\n if (filterObj) headerFilters.push(filterObj);\n } else {\n const filterObj = getFilterObj(header, 'EQUALS', operand);\n if (filterObj) headerFilters.push(filterObj);\n }\n } else if (filters.includes('or')) {\n let header: any = null;\n const operands: any = [];\n filters.forEach((filter, i) => {\n if (i === 0) {\n header = Array.isArray(filter) ? filter[0] : filter;\n }\n if (filter instanceof Array && filter.length > 0) {\n if (filter[2] instanceof Array && 'filterValue' in filter) {\n operands.push(filter['filterValue']);\n header = filter[2][0];\n } else if (header === filter[0]) {\n operands.push(filter[2]);\n }\n }\n });\n\n if (operands.length > 1) {\n const filterObj = getFilterObj(header, 'IN', operands);\n if (filterObj) headerFilters.push(filterObj);\n }\n } else if (filters.includes('and')) {\n filters.forEach((filter) => {\n const operands: any = [];\n if (filter instanceof Array && filter.length > 0) {\n if (filter.includes('=')) {\n const header = filter[0];\n const operand = [filter[2]];\n const filterObj = getFilterObj(header, 'EQUALS', operand);\n if (filterObj) headerFilters.push(filterObj);\n\n } else if (filter.includes('or')) {\n let header: any = null;\n const orOperands: any = [];\n\n filter.forEach((filt: any, i) => {\n if (i === 0) {\n header = Array.isArray(filt) ? filt[0] : filt;\n }\n if (filt instanceof Array && filt.length > 0) {\n if (filt[0] instanceof Array && filt[0].length > 0 && filt.includes('and')) {\n header = filt[0][0];\n if ('filterValue' in filt)\n orOperands.push(filt['filterValue']);\n } else if (header === filt[0]) {\n orOperands.push(filt[2]);\n }\n }\n });\n\n if (orOperands.length > 1) {\n const filterObj = getFilterObj(header, 'IN', orOperands);\n if (filterObj) headerFilters.push(filterObj);\n }\n } else if (filter.includes('and')) {\n let header = filter[0];\n if (filter[0] instanceof Array && filter[0].length > 0 && filter.includes('and')) {\n header = filter[0][0];\n if ('filterValue' in filter)\n operands.push(filter['filterValue']);\n } else if (header === filter[0]) {\n operands.push(filter[2]);\n }\n\n if (operands.length > 1) {\n const filterObj = getFilterObj(header, 'IN', operands);\n if (filterObj) headerFilters.push(filterObj);\n }\n } else {\n const fields = dataSource?.fields;\n if (Array.isArray(fields)) {\n for (let ele of fields) {\n if (!ele) continue;\n if (\n ele.fieldLabel === filter[0] &&\n 'filterValue' in filters &&\n (ele.fieldType === 'DATE_PICKER' || isValidDate(filters['filterValue']))\n ) {\n if (!operands.includes([filters['filterValue']])) {\n let filterValue = filters['filterValue'];\n if (typeof filterValue === 'string' && filterValue.includes('T')) {\n filterValue = filterValue.split('T')[0];\n }\n const operator = (filterValue !== '') ? 'IN' : 'EMPTY';\n const filterObj = getFilterObj(filter[0], operator, [filterValue]);\n if (filterObj) headerFilters.push(filterObj);\n operands.push([filterValue]);\n }\n }\n }\n }\n }\n }\n });\n }\n }\n return headerFilters;\n};\n","// Ported from ZAI-Dashboard src/services/table/{fieldDisplayValues,tableUtils}.ts.\nimport { getRuntimeClient } from \"./client\";\nimport { getUsersQuery } from \"./queryGenerator\";\nimport { getSubDomain } from \"./textUtils\";\n\nconst USER_RESOLVE_CHUNK_SIZE = 500;\nexport const USER_GROUP_FIELD_TYPES = [\"AUTO_COMPLETE\"];\nexport const USER_ID_FIELD_TYPES = [\"INPUT_CREATEDBY\", \"INPUT_MODIFIEDBY\", \"ON_BEHALF_OF\"];\n\nexport const getUserGroups = async (elementVal: any, isUser = false): Promise<Record<string, string>> => {\n const zvolv = getRuntimeClient();\n const payload = { indexType: \"USERGROUPS\", indexKey: \"usergroups\", query: getUsersQuery(elementVal, getSubDomain(), isUser) };\n\n let res: any[] = [];\n try {\n const raw = await zvolv.workflow.elasticSearch(JSON.stringify(payload));\n res = Array.isArray(raw) ? raw : (raw?.elements ?? raw?.data?.elements ?? []);\n } catch (e) {\n console.warn(\"getUserGroups: USERGROUPS search failed\", e);\n }\n\n const users: Record<string, string> = res.reduce((acc: Record<string, string>, obj: any) => {\n const key = isUser ? obj?.userInfo?.userID : obj?.groupID;\n const value = isUser ? obj?.userInfo?.userName : obj?.title;\n if (key != null && value) acc[key] = value;\n return acc;\n }, {});\n\n const ids: any[] = Array.isArray(elementVal) ? elementVal : [elementVal];\n const missing = ids.filter((id) => id != null && users[id] == null);\n if (!isUser && missing.length > 0) {\n try {\n const resp: any = await zvolv.workflow.getUserGroup(JSON.stringify({ UserGroupIDs: missing }));\n const output = resp?.output ?? resp?.data?.output ?? resp?.data?.data?.output;\n const groups = output?.usergroup;\n if (groups && typeof groups === \"object\") {\n Object.keys(groups).forEach((title) => {\n const id = groups[title];\n if (id != null && users[id] == null) users[id] = title;\n });\n }\n } catch (e) {\n console.warn(\"getUserGroups: usergroup lookup failed\", e);\n }\n }\n return users;\n};\n\nasync function resolveChunks(ids: number[], both: boolean): Promise<Record<string, string>> {\n let resolved: Record<string, string> = {};\n for (let i = 0; i < ids.length; i += USER_RESOLVE_CHUNK_SIZE) {\n const chunk = ids.slice(i, i + USER_RESOLVE_CHUNK_SIZE);\n try {\n if (both) {\n const [groupMap, userMap] = await Promise.all([getUserGroups(chunk, false), getUserGroups(chunk, true)]);\n // Group titles win: a User Search field stores user-group ids.\n resolved = { ...resolved, ...(userMap ?? {}), ...(groupMap ?? {}) };\n } else {\n resolved = { ...resolved, ...((await getUserGroups(chunk, true)) ?? {}) };\n }\n } catch (error) {\n console.error(\"Failed to resolve user values\", error);\n }\n }\n return resolved;\n}\n\nexport const getUserFieldKind = (masterFieldType: any): \"group\" | \"user\" | null => {\n if (USER_GROUP_FIELD_TYPES.includes(masterFieldType)) return \"group\";\n if (USER_ID_FIELD_TYPES.includes(masterFieldType)) return \"user\";\n return null;\n};\n\nexport const resolveUserLabels = async (values: any[], kind: string): Promise<Record<string, string>> => {\n const ids: number[] = [];\n values.forEach((value: any) => {\n (Array.isArray(value) ? value : [value]).forEach((entry: any) => {\n if (entry === null || entry === undefined || entry === \"\" || typeof entry === \"object\") return;\n const id = Number(entry);\n if (!Number.isNaN(id) && id > 0 && !ids.includes(id)) ids.push(id);\n });\n });\n if (ids.length === 0) return {};\n return resolveChunks(ids, kind !== \"user\");\n};\n","/**\n * The real-data runtime, built in. Pass an initialised, logged-in\n * @zestl/zvolv-js-sdk client and every widget queries live Zvolv data — no host\n * utilities required. The query path is ported verbatim from ZAI-Dashboard.\n */\nimport type { ZvolvRuntime } from \"../core/ZvolvProvider\";\nimport { setRuntimeClient } from \"./client\";\nimport { generateQuery, prefetchQueryMappings } from \"./queryGenerator\";\nimport { formatDashboardFilters, formatHeaderFilters } from \"./tableFilters\";\nimport { resolveQueryUser, resetQueryUser } from \"./loggedInUser\";\nimport { resolveUserLabels, getUserFieldKind } from \"./userLabels\";\n\nexport interface CreateZvolvRuntimeOptions {\n /** A ZvolvClient after `workspace.init(domain)` and login. A getter works too. */\n client: any | (() => any);\n /** Returns the logged-in user (decrypted). Default: `client.auth.userInstance`. */\n readUser?: () => any;\n}\n\nexport function createZvolvRuntime({ client, readUser }: CreateZvolvRuntimeOptions): ZvolvRuntime {\n const getClient = typeof client === \"function\" ? client : () => client;\n // No readUser: getStoredUser() falls back to the SDK store, then client.auth.userInstance (decrypted).\n setRuntimeClient(getClient, readUser ?? (() => null));\n resetQueryUser();\n return {\n get client() { return getClient(); },\n generateQuery,\n prefetchQueryMappings,\n formatDashboardFilters,\n formatHeaderFilters: (dataSource: any, columnFilters: Record<string, any[]>) =>\n formatHeaderFilters(dataSource, columnFilters),\n resolveQueryUser,\n resolveUserLabels,\n getUserFieldKind,\n };\n}\n\nexport { resetQueryUser };\n","/**\n * DataSource authoring — how a widget says WHERE its data comes from.\n *\n * `configurations` describes how a widget LOOKS and which fields it plots.\n * `dataSource` describes WHAT is queried: the form, its fields, and any pivot\n * (group-by + aggregate). The query generator reads `dataSource`, not `configurations`.\n *\n * Every builder here produces the exact object shape the server and the query\n * generator expect. Prefer them over hand-writing the literals.\n */\n\n/** Zvolv form element types, as `masterFieldType`. */\nexport type MasterFieldType =\n | \"INPUT_TEXT\" | \"INPUT_TEXTAREA\" | \"INPUT_NUMBER\" | \"INPUT_CURRENCY\"\n | \"INPUT_PERCENT\" | \"INPUT_FORMULA\" | \"INPUT_AUTONUMBER\" | \"INPUT_DATE\"\n | \"INPUT_DATE_RANGE\" | \"INPUT_TIME\" | \"INPUT_TIMER\" | \"CHECK_BOX\"\n | \"RADIO_BUTTON\" | \"DROP_DOWN\" | \"INPUT_TAG\" | \"FORM_SEARCH\"\n | \"INPUT_SEARCH\" | \"AUTO_COMPLETE\" | \"EXTERNAL_API\" | \"RATING_BAR\"\n | \"PROGRESS_BAR\" | \"UPLOAD_FILE_IMAGE\" | \"FILE_UPLOAD_V2\" | \"INPUT_SHEET\";\n\n/** Elasticsearch-side data type, derived from the element type. */\nexport type MasterFieldDataType = \"STRING\" | \"INT\" | \"FLOAT\" | \"BOOLEAN\" | \"ARRAY\" | \"OBJECT\";\n\n/**\n * Mirrors the app's getDataType(): maps a form element type to its ES data type.\n * Wrong values here produce empty aggregations, so always derive rather than guess.\n */\nexport function getDataType(elementType: string): MasterFieldDataType {\n const arrayTypes = [\n \"FORM_SEARCH\", \"INPUT_TAG\", \"EXTERNAL_API\", \"AUTO_COMPLETE\", \"UPLOAD_FILE_IMAGE\",\n \"INPUT_DATE_RANGE\", \"INPUT_SHEET\", \"INPUT_SEARCH\", \"FILE_UPLOAD_V2\",\n ];\n const floatTypes = [\"INPUT_NUMBER\", \"INPUT_CURRENCY\", \"INPUT_PERCENT\", \"INPUT_FORMULA\"];\n const intTypes = [\n \"INPUT_NUMBER\", \"INPUT_CURRENCY\", \"INPUT_PERCENT\", \"RATING_BAR\", \"PROGRESS_BAR\",\n \"INPUT_AUTONUMBER\", \"workflowTypeId\", \"WORKFLOW_TYPE_ID\", \"duration\", \"workflowId\",\n ];\n if (arrayTypes.includes(elementType)) return \"ARRAY\";\n if (elementType === \"INPUT_TIMER\") return \"OBJECT\";\n if (floatTypes.includes(elementType)) return \"FLOAT\";\n if (intTypes.includes(elementType)) return \"INT\";\n if (elementType === \"CHECK_BOX\") return \"BOOLEAN\";\n return \"STRING\";\n}\n\nexport type FilterOperator =\n | \"EQUALS\" | \"NOT_IN\" | \"IN\" | \"IN_UG\" | \"CONTAINS\" | \"STARTS_WITH\"\n | \"GREATER_THAN\" | \"LESS_THAN\" | \"BETWEEN\" | \"EMPTY\" | \"NOT_EMPTY\"\n | \"DATE_IS\" | \"MULTIPLE\" | \"_ALL\";\n\nexport interface FieldFilter {\n operator: FilterOperator;\n /** Values. Date fields accept date-math tokens like `{@[TODAY]}`. */\n operand: any[];\n}\n\n/**\n * One queryable field. `header` is the name rows come back under — it is what a\n * series' `valueField` / `argumentField` and a pivot's `title` must match.\n */\nexport interface DataSourceField {\n /** Output name in the returned rows. Series and pivots reference THIS. */\n header: string;\n /** Server-side field name. For task fields, the camelCase form. */\n masterfield?: string;\n masterFieldType?: MasterFieldType | string;\n masterFieldDataType?: MasterFieldDataType;\n /** Form element id, when known. */\n id?: string | number;\n formID?: string | number;\n /** True for built-in task fields (status, priority, assignee…). */\n isTaskField?: boolean;\n taskfield?: string;\n sortOrder?: \"asc\" | \"desc\";\n filter?: FieldFilter;\n formula?: any[];\n}\n\nexport interface PivotRow {\n /** Output column name. Must match the series `argumentField`. */\n title: string;\n masterField: string;\n masterFieldType?: string;\n masterFieldDataType?: MasterFieldDataType;\n}\n\nexport type AggregationType = \"sum\" | \"avg\" | \"min\" | \"max\" | \"count\" | \"value_count\" | \"cardinality\";\n\nexport interface PivotSummary {\n title: string;\n masterField: string;\n masterFieldType?: string;\n masterFieldDataType?: MasterFieldDataType;\n /** Output name of the aggregated value. Must match the series `valueField`. */\n value: string;\n type: AggregationType;\n}\n\nexport interface PivotFilter {\n field: string;\n operand: string;\n masterField: string;\n masterFieldType?: string;\n masterFieldDataType?: MasterFieldDataType;\n operator: FilterOperator;\n value: any[];\n}\n\nexport type PostOperator = \"ADD\" | \"SUB\" | \"MUL\" | \"DIV\" | \"PERCENT\";\n\nexport interface PostOperation {\n /** Output name of the derived value. A series may plot it. */\n title: string;\n operator: PostOperator;\n /** Names of OTHER summary entries, by their `value`. Order matters for SUB/DIV. */\n operands: string[];\n}\n\nexport interface PivotConfig {\n rows?: PivotRow[];\n columns?: PivotRow[];\n summary?: PivotSummary[];\n filters?: PivotFilter[];\n postOperations?: PostOperation[];\n}\n\nexport interface DataSourceDefinition {\n formId?: string | number;\n /** Set for form-backed sources. Omit only for legacy widget-id sources. */\n newFormFramework?: boolean;\n /** True to query the tasks index instead of a form's submissions. */\n isTask?: boolean;\n fields?: DataSourceField[];\n pivot?: PivotConfig;\n /** Max rows for pivot aggregations. */\n displayRowLimit?: number | string;\n automation?: { automationId: string | number; enabled?: boolean };\n [k: string]: any;\n}\n\n// ── Builders ─────────────────────────────────────────────────────────────────\n\n/**\n * Declares a queryable field. `masterFieldDataType` is derived from the element\n * type when not given, which is what aggregations and filters key off.\n */\nexport function field(\n header: string,\n masterFieldType: MasterFieldType | string,\n options: Partial<DataSourceField> = {}\n): DataSourceField {\n return {\n header,\n masterfield: options.masterfield ?? header,\n masterFieldType,\n masterFieldDataType: options.masterFieldDataType ?? getDataType(String(masterFieldType)),\n ...options,\n };\n}\n\n/**\n * A built-in task field. The server expects these camelCased, so `header`\n * \"Status\" becomes masterfield \"status\" automatically.\n */\nexport function taskField(\n header: string,\n masterFieldType: MasterFieldType | string = \"INPUT_TEXT\",\n options: Partial<DataSourceField> = {}\n): DataSourceField {\n const camel = header.charAt(0).toLowerCase() + header.slice(1);\n return {\n header,\n masterfield: options.masterfield ?? camel,\n taskfield: camel,\n isTaskField: true,\n masterFieldType,\n masterFieldDataType: options.masterFieldDataType ?? getDataType(String(masterFieldType)),\n ...options,\n };\n}\n\n/** A group-by dimension. `title` is what a series' `argumentField` must match. */\nexport function groupBy(f: DataSourceField, title = f.header): PivotRow {\n return {\n title,\n masterField: f.masterfield ?? f.taskfield ?? f.header,\n masterFieldType: f.masterFieldType,\n masterFieldDataType: f.masterFieldDataType,\n };\n}\n\n/**\n * An aggregated metric. `outputName` is what a series' `valueField` must match,\n * and what a postOperation references as an operand.\n */\nexport function aggregate(\n f: DataSourceField,\n type: AggregationType = \"sum\",\n outputName = f.header\n): PivotSummary {\n return {\n title: f.header,\n masterField: f.masterfield ?? f.taskfield ?? f.header,\n masterFieldType: f.masterFieldType,\n masterFieldDataType: f.masterFieldDataType,\n value: outputName,\n type,\n };\n}\n\n/**\n * A value derived from other aggregates, computed after the query returns.\n *\n * Operands name OTHER summaries by their `value`. Operand order matters:\n * SUB is left-to-right, and PERCENT is operands[0] / operands[1] * 100.\n */\nexport function derive(title: string, operator: PostOperator, operands: string[]): PostOperation {\n return { title, operator, operands };\n}\n\n/** A filter applied to a field at query time. */\nexport function where(operator: FilterOperator, ...operand: any[]): FieldFilter {\n return { operator, operand };\n}\n\n/**\n * Builds a form-backed data source.\n *\n * Every field a widget plots, groups by, or filters on must be listed in\n * `fields` — the query generator builds its field map from this list, so an\n * omitted field silently returns nothing.\n */\nexport function formSource(\n formId: string | number,\n fields: DataSourceField[],\n options: { pivot?: PivotConfig; displayRowLimit?: number } = {}\n): DataSourceDefinition {\n return {\n formId,\n newFormFramework: true,\n fields: fields.map((f) => ({ ...f, formID: f.formID ?? formId })),\n ...(options.pivot ? { pivot: options.pivot } : {}),\n ...(options.displayRowLimit ? { displayRowLimit: options.displayRowLimit } : {}),\n };\n}\n\n/**\n * Builds a task-backed data source.\n *\n * Task sources query the tasks index and must NOT carry a formId — passing one\n * makes the generator query submissions instead, returning the wrong rows.\n */\nexport function taskSource(\n fields: DataSourceField[],\n options: { pivot?: PivotConfig; displayRowLimit?: number } = {}\n): DataSourceDefinition {\n return {\n isTask: true,\n newFormFramework: true,\n fields: fields.map((f) => ({ ...f, isTaskField: true })),\n ...(options.pivot ? { pivot: options.pivot } : {}),\n ...(options.displayRowLimit ? { displayRowLimit: options.displayRowLimit } : {}),\n };\n}\n\n/** Builds a data source whose rows come from an automation rather than a query. */\nexport function automationSource(\n automationId: string | number,\n fields: DataSourceField[] = []\n): DataSourceDefinition {\n return { automation: { automationId, enabled: true }, fields };\n}\n\n/** Assembles a pivot. Omit `rows` for a single-number (summary-only) result. */\nexport function pivot(config: PivotConfig): PivotConfig {\n return {\n rows: config.rows ?? [],\n columns: config.columns ?? [],\n summary: config.summary ?? [],\n filters: config.filters ?? [],\n postOperations: config.postOperations ?? [],\n };\n}\n","import type { SeriesConfig, WidgetConfigurations, ZvolvDataSource } from \"./types\";\n\n/** Config may arrive as a JSON string from the server — parse defensively. */\nexport function parseConfig(configurations: any): WidgetConfigurations {\n try {\n if (typeof configurations === \"string\") return JSON.parse(configurations) || {};\n return configurations || {};\n } catch {\n return {};\n }\n}\n\nconst DEFAULT_SERIES: SeriesConfig[] = [\n { name: \"Value\", valueField: \"value\", argumentField: \"name\", formatting: [] },\n];\n\n/**\n * The configured series. Stored widgets spell it `series` (React dashboards) or\n * `serieses` (Angular-era dashboards) — both are read, `series` first.\n */\nexport function resolveSeries(config: WidgetConfigurations): SeriesConfig[] {\n if (Array.isArray(config?.series) && config.series.length) return config.series;\n if (config?.series && !Array.isArray(config.series) && (config.series as any).valueField) return [config.series as any];\n if (Array.isArray(config?.serieses) && config.serieses.length) return config.serieses;\n return DEFAULT_SERIES;\n}\n\n/** True when the config declares its own series (not the default fallback). */\nexport function hasDeclaredSeries(config: WidgetConfigurations): boolean {\n return resolveSeries(config) !== DEFAULT_SERIES;\n}\n\nexport function resolveXKey(series: SeriesConfig[]): string {\n return series?.[0]?.argumentField || \"name\";\n}\n\nfunction resolveIsTask(ds: any): boolean {\n return !!(ds?.isTask || ds?.isTaskField);\n}\n\nfunction resolveFormId(ds: any): any {\n return ds?.formId ?? ds?.fields?.[0]?.formID;\n}\n\n/**\n * A null/empty DataSource parses to {} — that is NOT \"configured\". Widgets must\n * show the unconfigured empty state rather than falling back to demo data.\n */\nexport function isDataSourceConfigured(dataSource: any): boolean {\n if (!dataSource) return false;\n if (Array.isArray(dataSource)) return dataSource.length > 0;\n return !!(\n dataSource.automation?.automationId ||\n dataSource.newFormFramework ||\n resolveIsTask(dataSource) ||\n resolveFormId(dataSource) ||\n dataSource.query ||\n dataSource.fields?.length ||\n dataSource.forms?.length ||\n dataSource.pivot\n );\n}\n\nexport function usesFormFramework(dataSource: ZvolvDataSource): boolean {\n return !!(dataSource?.newFormFramework || resolveIsTask(dataSource));\n}\n\nexport { resolveFormId, resolveIsTask };\n","/**\n * Viewer interactions — search, column filters, sort and widget-level filters.\n *\n * These are the runtime choices a person makes while LOOKING at a widget, as\n * opposed to `dataSource` filters an author bakes in. The UI for each one is\n * supplied by the caller (render slots); this module owns what an applied\n * interaction MEANS for the data:\n *\n * remote — translated into query clauses and sent through generateQuery, so\n * the server filters/sorts the full dataset (form-framework sources).\n * local — applied to the rows already loaded (pivot tables, legacy widget-id\n * sources, automation rows), where the server cannot do it.\n *\n * Mirrors ZAI-Dashboard's DashboardTable (search `_ALL`, header filters,\n * `dashboardSort`) and ZFilters (widget filters) so results match production.\n */\nimport dayjs from \"dayjs\";\nimport { getDataType, type FilterOperator } from \"./dataSource\";\nimport { resolveIsTask, usesFormFramework } from \"./config\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\n/** One active sort. `key` is the column key (the row field name). */\nexport interface SortState {\n key: string;\n direction: SortDirection;\n}\n\n/**\n * Column (header) filters: column key → the values the viewer ticked.\n * Include `COLUMN_FILTER_BLANK` (\"\") to match empty cells.\n */\nexport type ColumnFilters = Record<string, any[]>;\n\n/** Value that selects empty cells in a column filter. */\nexport const COLUMN_FILTER_BLANK = \"\";\n\n/** Relative-date tokens accepted by the `DATE_IS` operator. */\nexport type DateToken =\n | \"TODAY\" | \"YESTERDAY\" | \"LAST_SEVEN_DAYS\" | \"LAST_THIRTY_DAYS\"\n | \"THIS_WEEK\" | \"THIS_MONTH\" | \"THIS_YEAR\";\n\n/**\n * One widget-level filter, as the viewer applies it from the widget header.\n *\n * `field` is the field's `header` in `dataSource.fields` (the name rows come\n * back under). Several filters are combined with AND.\n */\nexport interface WidgetFilter {\n field: string;\n operator: FilterOperator | \"DATE_IS\";\n /**\n * Scalar or array. `IN`/`NOT_IN` take a list, `BETWEEN` takes `[from, to]`,\n * `DATE_IS` takes a DateToken, `EMPTY`/`NOT_EMPTY` take nothing.\n * User fields (AUTO_COMPLETE, assignees) take user ids, not names.\n */\n value?: any;\n}\n\n/** Everything a viewer can apply to one widget. */\nexport interface WidgetInteractionState {\n search: string;\n columnFilters: ColumnFilters;\n sort: SortState | null;\n widgetFilters: WidgetFilter[];\n}\n\nexport const EMPTY_INTERACTIONS: WidgetInteractionState = {\n search: \"\",\n columnFilters: {},\n sort: null,\n widgetFilters: [],\n};\n\nexport type InteractionMode = \"remote\" | \"local\";\n\n/** Widget types whose rows are already loaded by a parent — always local. */\nconst ALWAYS_LOCAL_TYPES = new Set([\"CHILD_TABLE\", \"CHILD_DATABASE_TABLE\"]);\n\n/**\n * Where search / column filters / sort run.\n *\n * Remote only for form-framework sources WITHOUT pivot rows: a pivot returns\n * aggregated buckets, so searching or sorting the underlying documents would\n * not change what is shown. Same rule as ZAI-Dashboard's `isRemoteSort`.\n */\nexport function resolveTableMode(\n dataSource: any, widgetType?: string, hasAutomationRows = false\n): InteractionMode {\n if (hasAutomationRows) return \"local\";\n if (widgetType && ALWAYS_LOCAL_TYPES.has(String(widgetType).toUpperCase())) return \"local\";\n if (!usesFormFramework(dataSource)) return \"local\";\n const rows = dataSource?.pivot?.rows;\n return Array.isArray(rows) && rows.length > 0 ? \"local\" : \"remote\";\n}\n\n/**\n * Where widget-level filters run. They are query filters, so any form-framework\n * source (pivot or not) filters server-side; only automation rows and legacy\n * widget-id sources fall back to filtering loaded rows.\n */\nexport function resolveFilterMode(dataSource: any, hasAutomationRows = false): InteractionMode {\n if (hasAutomationRows) return \"local\";\n return usesFormFramework(dataSource) ? \"remote\" : \"local\";\n}\n\nexport function hasActiveInteractions(s: Partial<WidgetInteractionState>): boolean {\n return !!(\n (s.search && s.search.trim()) ||\n (s.sort && s.sort.key) ||\n (s.widgetFilters && s.widgetFilters.length) ||\n (s.columnFilters && Object.values(s.columnFilters).some((v) => Array.isArray(v) && v.length))\n );\n}\n\n// ── Field lookup ─────────────────────────────────────────────────────────────\n\nfunction norm(v: any): string {\n return String(v ?? \"\").trim().toLowerCase();\n}\n\n/** Finds a dataSource field by any of the names a caller might use for it. */\nexport function findField(dataSource: any, name: string): any | undefined {\n const target = norm(name);\n if (!target) return undefined;\n const fields: any[] = Array.isArray(dataSource?.fields) ? dataSource.fields.filter(Boolean) : [];\n return fields.find((f) =>\n [\"header\", \"masterfield\", \"taskfield\", \"label\", \"fieldLabel\"].some((k) => norm(f?.[k]) === target)\n );\n}\n\nfunction clauseFor(field: any, name: string, isTask: boolean, operator: string, operand: any[]) {\n const masterfield =\n field?.masterfield ??\n (isTask || field?.isTaskField ? name.charAt(0).toLowerCase() + name.slice(1) : name);\n const masterFieldType = field?.masterFieldType ?? field?.fieldType;\n const clause: any = {\n header: field?.header ?? name,\n masterfield,\n masterFieldType,\n masterFieldDataType: field?.masterFieldDataType ?? getDataType(String(masterFieldType ?? \"\")),\n filter: { operator, operand },\n };\n if (isTask || field?.isTaskField || field?.taskfield) clause.isTaskField = true;\n return clause;\n}\n\nfunction coerceForField(field: any, values: any[]): any[] {\n const dt = field?.masterFieldDataType;\n if (dt !== \"INT\" && dt !== \"FLOAT\") return values;\n return values.map((v) => {\n const n = Number(v);\n return v !== \"\" && v != null && !isNaN(n) ? n : v;\n });\n}\n\n// ── Dates ────────────────────────────────────────────────────────────────────\n\nconst FMT = \"YYYY-MM-DD\";\n\n/** `[from, to]` (YYYY-MM-DD) for a relative-date token. Mirrors host getDateRange. */\nexport function resolveDateToken(token: string, now = dayjs()): [string, string] | null {\n switch (String(token).toUpperCase()) {\n case \"TODAY\": return [now.format(FMT), now.format(FMT)];\n case \"YESTERDAY\": {\n const d = now.subtract(1, \"day\").format(FMT);\n return [d, d];\n }\n case \"LAST_SEVEN_DAYS\": return [now.subtract(7, \"day\").format(FMT), now.add(1, \"day\").format(FMT)];\n case \"LAST_THIRTY_DAYS\": return [now.subtract(30, \"day\").format(FMT), now.add(1, \"day\").format(FMT)];\n case \"THIS_WEEK\": return [now.startOf(\"week\").format(FMT), now.endOf(\"week\").format(FMT)];\n case \"THIS_MONTH\": return [now.startOf(\"month\").format(FMT), now.endOf(\"month\").format(FMT)];\n case \"THIS_YEAR\": return [now.startOf(\"year\").format(FMT), now.endOf(\"year\").format(FMT)];\n default: return null;\n }\n}\n\nconst SEARCH_DATE_FORMATS = [\"YYYY-MM-DD\", \"DD/MM/YYYY\", \"DD-MM-YYYY\", \"MM/DD/YYYY\"];\n\n/** ISO date if the search text is a full date, else null. */\nfunction searchAsDate(text: string): string | null {\n const t = text.trim();\n if (!/^\\d{1,4}[-/]\\d{1,2}[-/]\\d{1,4}$/.test(t)) return null;\n for (const fmt of SEARCH_DATE_FORMATS) {\n const [y, m, d] = parseStrict(t, fmt);\n if (y) return `${y}-${m}-${d}`;\n }\n return null;\n}\n\nfunction parseStrict(text: string, fmt: string): [string, string, string] | [null, null, null] {\n const sep = fmt.includes(\"/\") ? \"/\" : \"-\";\n const parts = text.split(sep);\n const order = fmt.split(sep);\n if (parts.length !== 3 || order.length !== 3) return [null, null, null];\n const map: Record<string, string> = {};\n order.forEach((k, i) => { map[k] = parts[i]; });\n const y = map.YYYY, m = map.MM, d = map.DD;\n if (!y || y.length !== 4 || !m || !d) return [null, null, null];\n const mm = m.padStart(2, \"0\"), dd = d.padStart(2, \"0\");\n const parsed = dayjs(`${y}-${mm}-${dd}`);\n if (!parsed.isValid() || parsed.format(FMT) !== `${y}-${mm}-${dd}`) return [null, null, null];\n return [y, mm, dd];\n}\n\n// ── Remote: interactions → generateQuery arguments ───────────────────────────\n\n/** Search → the `_ALL` (or `MULTIPLE` for a date) clause DashboardTable sends. */\nexport function buildSearchClause(search: string): any | null {\n const text = (search ?? \"\").trim();\n if (!text) return null;\n const iso = searchAsDate(text);\n return iso\n ? { filter: { operator: \"MULTIPLE\", operand: iso } }\n : { filter: { operator: \"_ALL\", operand: text } };\n}\n\n/**\n * Widget filters → generateQuery filter clauses.\n * Unknown fields are skipped with a console warning rather than silently.\n */\nexport function buildWidgetFilterClauses(dataSource: any, filters: WidgetFilter[] = []): any[] {\n const isTask = resolveIsTask(dataSource);\n const out: any[] = [];\n for (const f of filters) {\n if (!f?.field || !f.operator) continue;\n const field = findField(dataSource, f.field);\n if (!field && !isTask) {\n console.warn(\n `[@zestl/zvolv-widgets] widget filter on \"${f.field}\" ignored — not in dataSource.fields. ` +\n `Add the field to the data source to filter on it.`\n );\n continue;\n }\n let operator: string = f.operator;\n let operand: any[] = f.value == null ? [] : Array.isArray(f.value) ? f.value : [f.value];\n\n if (operator === \"EMPTY\" || operator === \"NOT_EMPTY\") {\n operand = [];\n } else if (operator === \"DATE_IS\") {\n const range = resolveDateToken(String(operand[0] ?? \"\"));\n if (!range) continue;\n operator = String(operand[0]).toUpperCase() === \"TODAY\" ? \"EQUALS\" : \"BETWEEN\";\n operand = range;\n } else {\n if (operand.length === 0) continue;\n operand = coerceForField(field, operand);\n }\n out.push(clauseFor(field, f.field, isTask, operator, operand));\n }\n return out;\n}\n\n/**\n * Column filters → IN clauses (EMPTY when only blanks are ticked).\n *\n * The host's `formatHeaderFilters` also maps user names → ids, workflow titles →\n * ids and humanized durations. Supply it as `runtime.formatHeaderFilters` for\n * full parity; this built-in covers plain values.\n */\nexport function buildColumnFilterClauses(dataSource: any, columnFilters: ColumnFilters = {}): any[] {\n const isTask = resolveIsTask(dataSource);\n const out: any[] = [];\n for (const [key, selected] of Object.entries(columnFilters)) {\n if (!Array.isArray(selected) || selected.length === 0) continue;\n const field = findField(dataSource, key);\n if (!field && !isTask) {\n console.warn(`[@zestl/zvolv-widgets] column filter on \"${key}\" ignored — not in dataSource.fields.`);\n continue;\n }\n const values = selected.filter((v) => v !== COLUMN_FILTER_BLANK && v != null);\n const wantsBlank = values.length !== selected.length;\n if (values.length === 0 && wantsBlank) {\n out.push(clauseFor(field, key, isTask, \"EMPTY\", []));\n } else {\n if (wantsBlank) {\n console.warn(\n `[@zestl/zvolv-widgets] column \"${key}\": blanks + values cannot be OR-ed server-side; blanks ignored.`\n );\n }\n out.push(clauseFor(field, key, isTask, \"IN\", coerceForField(field, values)));\n }\n }\n return out;\n}\n\n/**\n * Sort → generateQuery's `dashboardSort` + the `configuration.columns` it needs.\n *\n * generateQuery matches `configuration.columns[].dataPoint` to a field's header\n * and then reads `dashboardSort[column.label]`; with no `columns` it throws.\n * So columns are synthesized from `dataSource.fields` when the config has none.\n */\nexport function buildRemoteSort(\n config: any, dataSource: any, sort: SortState | null\n): { dashboardSort: Record<string, \"ASC\" | \"DESC\"> | null; config: any } {\n if (!sort?.key) return { dashboardSort: null, config };\n const order = sort.direction === \"desc\" ? \"DESC\" : \"ASC\";\n\n const declared: any[] = Array.isArray(config?.columns) ? config.columns : [];\n const fields: any[] = Array.isArray(dataSource?.fields) ? dataSource.fields : [];\n const columns = declared.length\n ? declared\n : fields.filter((f) => f?.header).map((f) => ({ dataPoint: f.header, label: f.header }));\n\n const target = norm(sort.key);\n const column = columns.find((c: any) =>\n [c?.dataPoint, c?.field, c?.key, c?.label, c?.header].some((k) => norm(k) === target)\n );\n const label = column?.label ?? sort.key;\n const dataPoint = column?.dataPoint ?? findField(dataSource, sort.key)?.header ?? sort.key;\n\n // The column must map dataPoint → label for generateQuery's lookup to hit.\n const hasMapping = columns.some((c: any) => c?.dataPoint === dataPoint && c?.label === label);\n const finalColumns = hasMapping ? columns : [...columns, { dataPoint, label }];\n\n return {\n dashboardSort: { [label]: order },\n config: { ...config, columns: finalColumns },\n };\n}\n\n// ── Local: interactions applied to loaded rows ───────────────────────────────\n\nfunction stripHtml(s: string): string {\n return s.replace(/<[^>]*>/g, \"\");\n}\n\nfunction cellValues(raw: any): string[] {\n const list = Array.isArray(raw) ? raw : [raw];\n return list.map((v) => {\n if (v == null) return \"\";\n if (typeof v === \"object\") return String(v.label ?? v.name ?? v.title ?? v.value ?? \"\").trim();\n return stripHtml(String(v)).trim();\n });\n}\n\nfunction toComparable(v: any): number | null {\n if (v == null || v === \"\") return null;\n if (typeof v === \"number\") return v;\n const n = Number(v);\n if (!isNaN(n)) return n;\n const d = dayjs(v);\n return d.isValid() ? d.valueOf() : null;\n}\n\n/** Case-insensitive substring search across every cell (and its label). */\nexport function applyLocalSearch(rows: any[], search: string, toLabel?: (v: any) => any): any[] {\n const q = norm(search);\n if (!q) return rows;\n return rows.filter((row) =>\n Object.values(row ?? {}).some((val) => {\n if (val == null) return false;\n if (cellValues(val).some((c) => c.toLowerCase().includes(q))) return true;\n if (toLabel) {\n const label = toLabel(val);\n if (label != null && label !== val && String(label).toLowerCase().includes(q)) return true;\n }\n return false;\n })\n );\n}\n\n/** Keeps rows whose cell matches any ticked value, per column (AND across columns). */\nexport function applyLocalColumnFilters(rows: any[], columnFilters: ColumnFilters = {}): any[] {\n const entries = Object.entries(columnFilters).filter(([, v]) => Array.isArray(v) && v.length);\n if (!entries.length) return rows;\n return rows.filter((row) =>\n entries.every(([key, selected]) => {\n const cells = cellValues(row?.[key]);\n const wantsBlank = selected.some((v) => v === COLUMN_FILTER_BLANK || v == null);\n if (cells.every((c) => c === \"\")) return wantsBlank;\n return cells.some((c) => c !== \"\" && selected.some((v) => v != null && String(v).trim() === c));\n })\n );\n}\n\nfunction matchesWidgetFilter(row: any, f: WidgetFilter): boolean {\n const raw = row?.[f.field];\n const cells = cellValues(raw);\n const isBlank = cells.every((c) => c === \"\");\n const values = f.value == null ? [] : Array.isArray(f.value) ? f.value : [f.value];\n const vs = values.map((v) => String(v).trim().toLowerCase());\n const lc = cells.map((c) => c.toLowerCase());\n\n switch (f.operator) {\n case \"EMPTY\": return isBlank;\n case \"NOT_EMPTY\": return !isBlank;\n case \"EQUALS\":\n case \"IN\":\n case \"MULTIPLE\": return lc.some((c) => vs.includes(c));\n case \"NOT_IN\": return !lc.some((c) => vs.includes(c));\n case \"CONTAINS\":\n case \"_ALL\": return lc.some((c) => vs.some((v) => c.includes(v)));\n case \"STARTS_WITH\": return lc.some((c) => vs.some((v) => c.startsWith(v)));\n case \"GREATER_THAN\": {\n const n = toComparable(raw), b = toComparable(values[0]);\n return n != null && b != null && n > b;\n }\n case \"LESS_THAN\": {\n const n = toComparable(raw), b = toComparable(values[0]);\n return n != null && b != null && n < b;\n }\n case \"BETWEEN\": {\n const n = toComparable(raw), lo = toComparable(values[0]), hi = toComparable(values[1]);\n return n != null && lo != null && hi != null && n >= lo && n <= hi;\n }\n case \"DATE_IS\": {\n const range = resolveDateToken(String(values[0] ?? \"\"));\n if (!range || raw == null || raw === \"\") return false;\n const d = dayjs(raw).format(FMT);\n return d >= range[0] && d <= range[1];\n }\n default: return true;\n }\n}\n\n/** Applies widget filters to loaded rows (AND). */\nexport function applyLocalWidgetFilters(rows: any[], filters: WidgetFilter[] = []): any[] {\n const active = filters.filter((f) => f?.field && f.operator);\n if (!active.length) return rows;\n return rows.filter((row) => active.every((f) => matchesWidgetFilter(row, f)));\n}\n\n/** Numeric-aware, blanks-last sort. Returns a new array. */\nexport function applyLocalSort(rows: any[], sort: SortState | null): any[] {\n if (!sort?.key) return rows;\n const dir = sort.direction === \"desc\" ? -1 : 1;\n const key = sort.key;\n return [...rows].sort((a, b) => {\n const av = a?.[key], bv = b?.[key];\n const aBlank = av == null || av === \"\", bBlank = bv == null || bv === \"\";\n if (aBlank || bBlank) return aBlank === bBlank ? 0 : aBlank ? 1 : -1;\n const an = Number(av), bn = Number(bv);\n if (!isNaN(an) && !isNaN(bn)) return (an - bn) * dir;\n return String(av).localeCompare(String(bv), undefined, { numeric: true }) * dir;\n });\n}\n\n/** Distinct values of a column, with counts, for a column-filter dropdown. */\nexport function distinctColumnValues(\n rows: any[], key: string, toLabel?: (v: any) => any\n): { value: any; label: string; count: number }[] {\n const counts = new Map<string, { value: any; label: string; count: number }>();\n for (const row of rows) {\n for (const cell of cellValues(row?.[key])) {\n const entry = counts.get(cell);\n if (entry) entry.count++;\n else {\n const label = cell === \"\" ? \"(Blanks)\" : String(toLabel ? toLabel(cell) ?? cell : cell);\n counts.set(cell, { value: cell, label, count: 1 });\n }\n }\n }\n return [...counts.values()].sort((a, b) =>\n a.value === \"\" ? 1 : b.value === \"\" ? -1 : a.label.localeCompare(b.label, undefined, { numeric: true })\n );\n}\n","/**\n * A fake runtime for local development and design work.\n *\n * Use this to build and preview dashboards without a backend or login. Swap in\n * the real adapter when you want live data — the widget code does not change.\n *\n * The mock honours the filter clauses and sort a real query would carry\n * (dashboard filters, widget filters, column filters, search, sort), applied to\n * its in-memory rows, so interactive controls visibly work in previews.\n * It does NOT aggregate pivots: every widget receives the raw rows.\n */\nimport type { ZvolvRuntime } from \"./ZvolvProvider\";\nimport { applyLocalSearch, applyLocalSort, applyLocalWidgetFilters } from \"./interactions\";\n\nexport interface MockRuntimeOptions {\n /** Rows every widget receives. Default: a small generic sample. */\n rows?: any[];\n /** Artificial latency in ms, to exercise loading states. */\n delay?: number;\n /** Called with every generated mock query — handy for asserting what was sent. */\n onQuery?: (query: MockQuery) => void;\n}\n\n/** What the mock's generateQuery produces and its elasticSearch consumes. */\nexport interface MockQuery {\n filters: any[];\n dashboardSort: Record<string, string> | null;\n columns: any[];\n limit: number | null;\n}\n\nconst SAMPLE_ROWS = [\n { id: 1, region: \"North\", owner: \"Priya\", revenue: 128000, target: 150000, orders: 412, status: \"Completed\", startDate: \"2026-01-05\", endDate: \"2026-01-28\", latitude: 28.61, longitude: 77.21, parentId: null },\n { id: 2, region: \"South\", owner: \"Arjun\", revenue: 96400, target: 90000, orders: 318, status: \"In Progress\", startDate: \"2026-01-12\", endDate: \"2026-02-10\", latitude: 12.97, longitude: 77.59, parentId: 1 },\n { id: 3, region: \"East\", owner: \"Meera\", revenue: 74200, target: 80000, orders: 265, status: \"Pending\", startDate: \"2026-02-01\", endDate: \"2026-02-24\", latitude: 22.57, longitude: 88.36, parentId: 1 },\n { id: 4, region: \"West\", owner: \"Rahul\", revenue: 141800, target: 120000, orders: 501, status: \"Completed\", startDate: \"2026-02-08\", endDate: \"2026-03-04\", latitude: 19.07, longitude: 72.87, parentId: null },\n { id: 5, region: \"Central\", owner: \"Divya\", revenue: 58900, target: 70000, orders: 190, status: \"Overdue\", startDate: \"2026-03-01\", endDate: \"2026-03-20\", latitude: 23.25, longitude: 77.41, parentId: 4 },\n];\n\n/** Host ZFilters body `{ form: { field: { OP: values } } }` → filter clauses. */\nfunction mockFormatDashboardFilters(_cfg: any, _ds: any, filters: any): any[] {\n const out: any[] = [];\n const body = filters?.filter;\n if (body && typeof body === \"object\") {\n for (const form of Object.keys(body)) {\n for (const field of Object.keys(body[form] || {})) {\n const ops = body[form][field] || {};\n const op = Object.keys(ops)[0];\n if (op) out.push({ header: field, filter: { operator: op, operand: ops[op] } });\n }\n }\n }\n const search = typeof filters?.search === \"string\" ? filters.search.trim() : \"\";\n if (search) out.push({ filter: { operator: \"_ALL\", operand: search } });\n return out;\n}\n\nfunction applyMockQuery(rows: any[], q: MockQuery | undefined): any[] {\n if (!q) return rows;\n let out = rows;\n for (const clause of q.filters || []) {\n const op = clause?.filter?.operator;\n const operand = clause?.filter?.operand;\n if (op === \"_ALL\" || (op === \"MULTIPLE\" && !clause.header)) {\n out = applyLocalSearch(out, String(Array.isArray(operand) ? operand[0] : operand ?? \"\"));\n } else if (clause?.header && op) {\n out = applyLocalWidgetFilters(out, [{ field: clause.header, operator: op, value: operand }]);\n }\n }\n if (q.dashboardSort) {\n const [label, order] = Object.entries(q.dashboardSort)[0] ?? [];\n const col = (q.columns || []).find((c: any) => c?.label === label);\n if (label) out = applyLocalSort(out, { key: col?.dataPoint ?? label, direction: order === \"DESC\" ? \"desc\" : \"asc\" });\n }\n return q.limit ? out.slice(0, q.limit) : out;\n}\n\nexport function createMockRuntime(options: MockRuntimeOptions = {}): ZvolvRuntime {\n const rows = options.rows ?? SAMPLE_ROWS;\n const wait = <T,>(value: T): Promise<T> =>\n options.delay ? new Promise((r) => setTimeout(() => r(value), options.delay)) : Promise.resolve(value);\n\n return {\n client: {\n workflow: {\n elasticSearch: (query: any) => wait({ elements: applyMockQuery(rows, query?.__mock) }),\n getDataSource: () => wait({ table: rows }),\n getSingleForm: () => wait({ id: 1 }),\n },\n },\n // Mirrors the real generateQuery's positional signature.\n generateQuery: (\n config: any, _ds: any, _formId: any, _skip: any, limit: any, _extra: any,\n dashboardFilters: any[] = [], _ids: any, _user: any, dashboardSort: any = null,\n ) => {\n const q: MockQuery = {\n filters: dashboardFilters || [], dashboardSort: dashboardSort || null,\n columns: config?.columns || [], limit: limit ?? null,\n };\n options.onQuery?.(q);\n return { __mock: q };\n },\n prefetchQueryMappings: async () => ({}),\n formatDashboardFilters: mockFormatDashboardFilters,\n resolveQueryUser: async () => null,\n resolveUserLabels: async () => ({}),\n getUserFieldKind: () => null,\n };\n}\n\nexport { SAMPLE_ROWS };\n","/**\n * Design tokens. This is the contract Claude's design pass writes to.\n * Every visual decision a widget makes resolves through these values —\n * no colour, font or spacing literal should appear in a template.\n */\nexport interface WidgetChrome {\n appearance: \"shadow\" | \"border\" | \"flat\";\n padding: string;\n borderRadius: string;\n borderWidth: string;\n borderColor: string;\n backgroundColor: string;\n shadow: string;\n hoverLift: boolean;\n gap: string;\n}\n\nexport interface ZvolvTokens {\n fontFamily: string;\n monoFontFamily: string;\n colors: {\n background: string;\n surface: string;\n cardBackground: string;\n textPrimary: string;\n textSecondary: string;\n textTertiary: string;\n primary: string;\n primaryLight: string;\n border: string;\n success: string;\n error: string;\n warning: string;\n info: string;\n onAccent: string;\n charts: {\n palette: string[];\n grid: string;\n axis: string;\n neutral: string;\n };\n };\n typography: {\n title: { fontSize: string; fontWeight: number; letterSpacing: string; color?: string };\n description: { fontSize: string; color?: string };\n kpiValue: { fontSize: string; fontWeight: number; letterSpacing: string };\n kpiLabel: { fontSize: string; fontWeight: number; textTransform: string; letterSpacing: string };\n body: { fontSize: string; lineHeight: string };\n caption: { fontSize: string };\n };\n /** Shared visual language for data-dense widgets. */\n surfaces: {\n /** Zebra / header / hover bands for tables, pivots and grids. */\n table: { headerBg: string; rowBg: string; altRowBg: string; hoverBg: string; borderColor: string };\n /** Pills, chips and status badges. */\n badge: { radius: string; paddingX: string; paddingY: string; fontSize: string; fontWeight: number };\n /** Card-like children inside a widget (list items, gallery tiles, steps). */\n tile: { bg: string; radius: string; padding: string; borderColor: string; gap: string };\n /** Calendar / scheduler / gantt canvases. */\n canvas: { bg: string; gridLine: string; todayBg: string; nowLine: string; eventRadius: string };\n };\n widget: WidgetChrome;\n /** Per-widget-type chrome overrides, keyed by widget type (case-insensitive). */\n overrides?: Record<string, Partial<WidgetChrome>>;\n /**\n * Theme-level default `template` and config per widget type. Layered UNDER a\n * widget's own config, so existing dashboards are never overridden.\n */\n widgetDefaults?: Record<string, { template?: string; [k: string]: any }>;\n}\n\nexport const defaultTokens: ZvolvTokens = {\n fontFamily:\n \"'Hanken Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif\",\n monoFontFamily: \"'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, monospace\",\n colors: {\n background: \"#f4f6fa\",\n surface: \"#ffffff\",\n cardBackground: \"#ffffff\",\n textPrimary: \"#0e1525\",\n textSecondary: \"#5b6478\",\n textTertiary: \"#9aa3b5\",\n primary: \"#4263eb\",\n primaryLight: \"#eef1fe\",\n border: \"#e7eaf0\",\n success: \"#1fa971\",\n error: \"#e5484d\",\n warning: \"#e0972a\",\n info: \"#2563eb\",\n onAccent: \"#ffffff\",\n charts: {\n palette: [\"#4263eb\", \"#1fa971\", \"#e0972a\", \"#e5484d\", \"#7c3aed\", \"#0ea5a4\"],\n grid: \"#eef0f5\",\n axis: \"#9aa3b5\",\n neutral: \"#c7ccd8\",\n },\n },\n typography: {\n title: { fontSize: \"14px\", fontWeight: 600, letterSpacing: \"0\" },\n description: { fontSize: \"12px\" },\n kpiValue: { fontSize: \"30px\", fontWeight: 650, letterSpacing: \"-0.02em\" },\n kpiLabel: { fontSize: \"11px\", fontWeight: 600, textTransform: \"uppercase\", letterSpacing: \"0.06em\" },\n body: { fontSize: \"13px\", lineHeight: \"1.5\" },\n caption: { fontSize: \"11px\" },\n },\n surfaces: {\n table: {\n headerBg: \"#f2f4f7\", rowBg: \"#ffffff\", altRowBg: \"#f7f8fb\",\n hoverBg: \"#eef1fe\", borderColor: \"#e7eaf0\",\n },\n badge: { radius: \"999px\", paddingX: \"10px\", paddingY: \"3px\", fontSize: \"12px\", fontWeight: 600 },\n tile: { bg: \"#ffffff\", radius: \"12px\", padding: \"14px\", borderColor: \"#e7eaf0\", gap: \"10px\" },\n canvas: {\n bg: \"#ffffff\", gridLine: \"#eef0f5\", todayBg: \"#eef1fe\",\n nowLine: \"#e5484d\", eventRadius: \"6px\",\n },\n },\n widget: {\n appearance: \"border\",\n padding: \"18px\",\n borderRadius: \"14px\",\n borderWidth: \"1px\",\n borderColor: \"#e7eaf0\",\n backgroundColor: \"#ffffff\",\n shadow: \"0 1px 2px rgba(14,21,37,0.04)\",\n hoverLift: false,\n gap: \"14px\",\n },\n overrides: {},\n widgetDefaults: {},\n};\n\n/** Deep-merges a partial design spec onto the defaults. Arrays replace wholesale. */\nexport function mergeTokens(base: ZvolvTokens, patch?: DeepPartial<ZvolvTokens>): ZvolvTokens {\n if (!patch) return base;\n const out: any = Array.isArray(base) ? [...(base as any)] : { ...base };\n for (const [k, v] of Object.entries(patch as any)) {\n if (v === undefined) continue;\n if (v && typeof v === \"object\" && !Array.isArray(v) && typeof (out as any)[k] === \"object\" && (out as any)[k] !== null && !Array.isArray((out as any)[k])) {\n out[k] = mergeTokens((out as any)[k], v as any);\n } else {\n out[k] = v;\n }\n }\n return out as ZvolvTokens;\n}\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\n/** Resolves final chrome for a widget: base ← type override ← per-widget config.style. */\nexport function resolveChrome(\n tokens: ZvolvTokens,\n widgetType?: string,\n perWidget?: Partial<WidgetChrome> | null\n): WidgetChrome {\n const overrides = tokens.overrides ?? {};\n const typeOverride =\n (widgetType && (overrides[widgetType] ?? overrides[widgetType.toUpperCase()])) || {};\n return { ...tokens.widget, ...typeOverride, ...(perWidget || {}) };\n}\n\n/** Theme-level default config for a widget type, layered UNDER the widget's own config. */\nexport function resolveWidgetDefaults(\n tokens: ZvolvTokens,\n widgetType: string | undefined,\n config: any\n): any {\n const defaults = tokens.widgetDefaults ?? {};\n const typeDefaults =\n (widgetType && (defaults[widgetType] ?? defaults[widgetType.toUpperCase()])) || {};\n return { ...typeDefaults, ...(config || {}) };\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { defaultTokens, mergeTokens, type DeepPartial, type ZvolvTokens } from \"./tokens\";\n\nconst TokensContext = createContext<ZvolvTokens>(defaultTokens);\n\nexport interface ZvolvThemeProviderProps {\n /** A partial design spec — deep-merged onto the defaults. This is Claude's design output. */\n tokens?: DeepPartial<ZvolvTokens>;\n children: React.ReactNode;\n}\n\nexport const ZvolvThemeProvider: React.FC<ZvolvThemeProviderProps> = ({ tokens, children }) => {\n const value = useMemo(() => mergeTokens(defaultTokens, tokens), [tokens]);\n return <TokensContext.Provider value={value}>{children}</TokensContext.Provider>;\n};\n\nexport function useTokens(): ZvolvTokens {\n return useContext(TokensContext);\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type { KpiTemplateProps } from \"../core/kpiTypes\";\n\n/** Anything Claude can override, keyed by \"WIDGET_TYPE:templateId\". */\nexport type TemplateComponent = React.FC<any>;\nexport type TemplateMap = Record<string, TemplateComponent>;\n\nconst TemplateContext = createContext<TemplateMap>({});\n\nexport interface TemplateProviderProps {\n /**\n * Claude's UI layer. Keys are \"WIDGET_TYPE:templateId\", e.g.\n * { \"KPI_CARD:standard\": MyKpiCard, \"BAR_CHART:standard\": MyBars }\n * Any key not supplied falls back to the package's built-in template.\n */\n templates?: TemplateMap;\n children: React.ReactNode;\n}\n\nexport const TemplateProvider: React.FC<TemplateProviderProps> = ({ templates, children }) => {\n const parent = useContext(TemplateContext);\n const value = useMemo(() => ({ ...parent, ...(templates || {}) }), [parent, templates]);\n return <TemplateContext.Provider value={value}>{children}</TemplateContext.Provider>;\n};\n\nexport function useTemplateOverride(\n widgetType: string,\n templateId: string\n): TemplateComponent | null {\n const map = useContext(TemplateContext);\n return map[`${widgetType}:${templateId}`] ?? map[`${widgetType}:*`] ?? null;\n}\n\nexport type { KpiTemplateProps };\n","import React from \"react\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport type { BadgeTone, KpiTemplateProps } from \"../core/kpiTypes\";\n\nconst Label: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const t = useTokens();\n return (\n <div style={{\n fontSize: t.typography.kpiLabel.fontSize,\n fontWeight: t.typography.kpiLabel.fontWeight,\n textTransform: t.typography.kpiLabel.textTransform as any,\n letterSpacing: t.typography.kpiLabel.letterSpacing,\n color: t.colors.textSecondary,\n }}>{children}</div>\n );\n};\n\nconst Value: React.FC<{ vm: KpiTemplateProps[\"vm\"]; mono?: boolean }> = ({ vm, mono }) => {\n const t = useTokens();\n return (\n <div style={{\n fontSize: t.typography.kpiValue.fontSize,\n fontWeight: t.typography.kpiValue.fontWeight,\n letterSpacing: t.typography.kpiValue.letterSpacing,\n color: vm.valueColor ?? t.colors.textPrimary,\n fontFamily: mono ? t.monoFontFamily : t.fontFamily,\n lineHeight: 1.15,\n }}>\n {vm.prefix ? `${vm.prefix} ` : \"\"}{vm.value}{vm.suffix ? ` ${vm.suffix}` : \"\"}\n </div>\n );\n};\n\nconst Delta: React.FC<{ vm: KpiTemplateProps[\"vm\"] }> = ({ vm }) => {\n const t = useTokens();\n if (!vm.delta) return null;\n const color = vm.delta.isPositive ? t.colors.success : t.colors.error;\n const sign = vm.delta.value >= 0 ? \"+\" : \"\";\n const text = vm.delta.mode === \"percent\"\n ? `${sign}${vm.delta.value.toFixed(1)}%`\n : `${sign}${vm.delta.value}`;\n return (\n <span style={{ color, fontSize: \"12px\", fontWeight: 600 }}>\n {vm.delta.isPositive ? \"▲\" : \"▼\"} {text}\n </span>\n );\n};\n\nconst Sparkline: React.FC<{ series: number[]; color: string; height?: number }> = ({\n series, color, height = 40,\n}) => {\n if (!series?.length) return null;\n const min = Math.min(...series);\n const max = Math.max(...series);\n const span = max - min || 1;\n const w = 100;\n const pts = series.map((v, i) => {\n const x = series.length === 1 ? w / 2 : (i / (series.length - 1)) * w;\n const y = height - ((v - min) / span) * height;\n return `${x.toFixed(2)},${y.toFixed(2)}`;\n }).join(\" \");\n return (\n <svg viewBox={`0 0 ${w} ${height}`} preserveAspectRatio=\"none\"\n style={{ width: \"100%\", height, display: \"block\" }}>\n <polyline points={pts} fill=\"none\" stroke={color} strokeWidth={2}\n vectorEffect=\"non-scaling-stroke\" strokeLinejoin=\"round\" strokeLinecap=\"round\" />\n </svg>\n );\n};\n\nconst Standard: React.FC<KpiTemplateProps> = ({ vm }) => (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n <Label>{vm.title}</Label>\n <Value vm={vm} />\n {vm.subtitle && <div style={{ fontSize: 12, opacity: 0.7 }}>{vm.subtitle}</div>}\n </div>\n);\n\nconst Trend: React.FC<KpiTemplateProps> = ({ vm }) => {\n const t = useTokens();\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n <Label>{vm.title}</Label>\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 10, flexWrap: \"wrap\" }}>\n <Value vm={vm} />\n <Delta vm={vm} />\n </div>\n {vm.series && <Sparkline series={vm.series} color={t.colors.primary} />}\n </div>\n );\n};\n\nconst Progress: React.FC<KpiTemplateProps> = ({ vm }) => {\n const t = useTokens();\n const ratio = vm.progress?.ratio ?? 0;\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <Label>{vm.title}</Label>\n <Value vm={vm} />\n <div style={{ height: 6, borderRadius: 999, background: t.colors.charts.neutral, overflow: \"hidden\" }}>\n <div style={{ width: `${ratio * 100}%`, height: \"100%\", background: t.colors.primary, borderRadius: 999 }} />\n </div>\n </div>\n );\n};\n\nconst Comparison: React.FC<KpiTemplateProps> = ({ vm }) => {\n const t = useTokens();\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <Label>{vm.title}</Label>\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 8 }}>\n <Value vm={vm} />\n {vm.target !== \"\" && (\n <span style={{ fontSize: 13, color: t.colors.textTertiary }}>/ {vm.target}</span>\n )}\n </div>\n <div style={{ height: 6, borderRadius: 999, background: t.colors.charts.neutral, overflow: \"hidden\" }}>\n <div style={{ width: `${(vm.progress?.ratio ?? 0) * 100}%`, height: \"100%\", background: t.colors.primary }} />\n </div>\n </div>\n );\n};\n\nconst Financial: React.FC<KpiTemplateProps> = ({ vm }) => (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n <Label>{vm.title}</Label>\n <Value vm={vm} mono />\n <Delta vm={vm} />\n </div>\n);\n\nconst TONE_KEY: Record<BadgeTone, \"success\" | \"warning\" | \"error\" | \"info\" | \"textTertiary\"> = {\n success: \"success\", warning: \"warning\", error: \"error\", info: \"info\", neutral: \"textTertiary\",\n};\n\nconst Status: React.FC<KpiTemplateProps> = ({ vm }) => {\n const t = useTokens();\n const tone = vm.status?.tone ?? \"neutral\";\n const color = (t.colors as any)[TONE_KEY[tone]] as string;\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <Label>{vm.title}</Label>\n <span style={{\n alignSelf: \"flex-start\", padding: \"4px 10px\", borderRadius: 999,\n fontSize: 12, fontWeight: 600, color,\n background: `color-mix(in srgb, ${color} 12%, transparent)`,\n border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`,\n }}>{vm.status?.label ?? vm.value}</span>\n {vm.status?.description && (\n <div style={{ fontSize: 12, color: t.colors.textTertiary }}>{vm.status.description}</div>\n )}\n </div>\n );\n};\n\nconst Chart: React.FC<KpiTemplateProps> = ({ vm }) => {\n const t = useTokens();\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <Label>{vm.title}</Label>\n <Value vm={vm} />\n {vm.series && <Sparkline series={vm.series} color={t.colors.primary} height={48} />}\n </div>\n );\n};\n\nconst HeroChart: React.FC<KpiTemplateProps> = ({ vm }) => {\n const t = useTokens();\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 10, height: \"100%\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\", gap: 8 }}>\n <Label>{vm.title}</Label>\n <div style={{ textAlign: \"right\" }}>\n <Value vm={vm} />\n <Delta vm={vm} />\n </div>\n </div>\n {vm.series && (\n <div style={{ flex: 1, minHeight: 60 }}>\n <Sparkline series={vm.series} color={t.colors.primary} height={72} />\n </div>\n )}\n </div>\n );\n};\n\nconst Icon: React.FC<KpiTemplateProps> = ({ vm }) => {\n const t = useTokens();\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 14 }}>\n <div style={{\n width: 46, height: 46, borderRadius: 12, flexShrink: 0,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n background: t.colors.primaryLight, color: vm.iconColor,\n fontSize: 20, fontWeight: 700,\n }}>{(vm.title || \"?\").charAt(0).toUpperCase()}</div>\n <div style={{ minWidth: 0 }}>\n <Label>{vm.title}</Label>\n <Value vm={vm} />\n </div>\n </div>\n );\n};\n\nexport const KPI_DEFAULT_TEMPLATES = {\n standard: Standard,\n trend: Trend,\n comparison: Comparison,\n progress: Progress,\n financial: Financial,\n status: Status,\n chart: Chart,\n hero_chart: HeroChart,\n icon: Icon,\n};\n\nexport { Label as KpiLabel, Value as KpiValue, Delta as KpiDelta, Sparkline as KpiSparkline };\n","import React from \"react\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport { resolveChrome } from \"../theme/tokens\";\nimport type { WidgetState } from \"../core/types\";\n\nexport interface WidgetShellProps {\n widgetType?: string;\n title?: string;\n description?: string;\n state: WidgetState;\n error?: Error | null;\n /** Message shown when the widget has no data source configured. */\n unconfiguredMessage?: string;\n /** Message shown when the widget IS wired but returned zero rows. */\n emptyMessage?: string;\n /** Header controls (search, filters, buttons), right-aligned next to the title. */\n actions?: React.ReactNode;\n /** A refetch is in flight while rows stay on screen; the body dims slightly. */\n busy?: boolean;\n /** A search / filter is applied — an empty result then reads \"no matches\". */\n filtered?: boolean;\n style?: React.CSSProperties;\n className?: string;\n children: React.ReactNode;\n}\n\n/** What a host needs to draw a non-ready widget state in its own style. */\nexport interface WidgetStateRenderArgs {\n state: Exclude<WidgetState, \"ready\">;\n widgetType?: string;\n /** The message the library would show (defaults or the widget's overrides). */\n message: string;\n error?: Error | null;\n filtered: boolean;\n}\n\n/**\n * Supply one renderer for loading / unconfigured / empty / error across every\n * widget: `<WidgetStateSlot.Provider value={(a) => <MyState {...a} />}>`.\n * Return `undefined` to fall back to the built-in text.\n */\nexport const WidgetStateSlot = React.createContext<((args: WidgetStateRenderArgs) => React.ReactNode) | null>(null);\n\n/**\n * Chrome + state handling shared by every widget: card frame, header, and the\n * loading / unconfigured / empty / error states.\n *\n * `unconfigured` (no data source wired) and `empty` (wired, zero rows) are\n * deliberately distinct — collapsing them hides real configuration mistakes.\n */\nexport const WidgetShell: React.FC<WidgetShellProps> = ({\n widgetType, title, description, state, error,\n unconfiguredMessage = \"No data source configured\",\n emptyMessage,\n actions, busy = false, filtered = false, style, className, children,\n}) => {\n const t = useTokens();\n const chrome = resolveChrome(t, widgetType);\n const renderState = React.useContext(WidgetStateSlot);\n\n const frame: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: chrome.gap,\n boxSizing: \"border-box\",\n height: \"100%\",\n minWidth: 0,\n fontFamily: t.fontFamily,\n background: chrome.backgroundColor,\n padding: chrome.padding,\n borderRadius: chrome.borderRadius,\n border: chrome.appearance === \"border\" ? `${chrome.borderWidth} solid ${chrome.borderColor}` : \"none\",\n boxShadow: chrome.appearance === \"shadow\" ? chrome.shadow : \"none\",\n ...style,\n };\n\n const centered: React.CSSProperties = {\n flex: 1, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n textAlign: \"center\", color: t.colors.textTertiary,\n fontSize: t.typography.description.fontSize, padding: \"12px\",\n };\n\n return (\n <div style={frame} className={className} data-widget-type={widgetType} data-state={state}>\n {(title || actions || description) && (\n <header style={{ display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\", gap: 8, flexWrap: \"wrap\" }}>\n <div style={{ minWidth: 0 }}>\n {title && (\n <div style={{\n fontSize: t.typography.title.fontSize,\n fontWeight: t.typography.title.fontWeight,\n letterSpacing: t.typography.title.letterSpacing,\n color: t.typography.title.color ?? t.colors.textPrimary,\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n }}>{title}</div>\n )}\n {description && (\n <div style={{\n fontSize: t.typography.description.fontSize,\n color: t.typography.description.color ?? t.colors.textSecondary,\n marginTop: 2,\n }}>{description}</div>\n )}\n </div>\n {actions}\n </header>\n )}\n\n {state !== \"ready\" && (() => {\n const message = state === \"loading\" ? \"Loading…\"\n : state === \"unconfigured\" ? unconfiguredMessage\n : state === \"empty\" ? (emptyMessage ?? (filtered ? \"No results match the current filters\" : \"No data to display\"))\n : (error?.message || \"Something went wrong\");\n const custom = renderState?.({ state, widgetType, message, error, filtered });\n if (custom !== undefined && custom !== null) return custom;\n return <div style={state === \"error\" ? { ...centered, color: t.colors.error } : centered}>{message}</div>;\n })()}\n {state === \"ready\" && (\n <div aria-busy={busy || undefined} style={{\n flex: 1, minHeight: 0, minWidth: 0,\n opacity: busy ? 0.6 : 1, transition: \"opacity 120ms ease\",\n }}>{children}</div>\n )}\n </div>\n );\n};\n","/**\n * Mirrors Angular getResult() for postOperations.\n * Ported verbatim from ZAI-Dashboard src/widgets/kpi/formatters.ts — do not\n * re-derive; the operand semantics here match the server's aggregation output.\n */\nexport function getPostOpResult(row: any, operator: string, operands: any[]): number {\n if (!Array.isArray(operands) || operands.length === 0) return 0;\n switch (operator) {\n case \"ADD\":\n return operands.reduce((sum: number, op: string) => sum + (row[op] || 0), 0);\n case \"SUB\":\n return operands.map((op: string) => row[op] || 0).reduce((a: number, b: number) => a - b);\n case \"MUL\":\n return operands.reduce((mul: number, op: string) => mul * (row[op] || 0), 1);\n case \"DIV\": {\n const vals = operands.map((op: string) => row[op] || 0);\n return vals.reduce((a: number, b: number) => (b !== 0 ? a / b : 0));\n }\n case \"PERCENT\":\n return row[operands[1]] ? ((row[operands[0]] || 0) / row[operands[1]]) * 100 : 0;\n default:\n return 0;\n }\n}\n\n/**\n * Applies pivot `postOperations` to each fetched row, writing the derived value\n * onto `row[op.title]` so it's available for a series' valueField lookup.\n */\nexport function applyPostOperations(rows: any[], postOperations?: any[]): any[] {\n if (!postOperations?.length) return rows;\n return rows.map((row) => {\n const updated = { ...row };\n postOperations.forEach((op: any) => {\n updated[op.title] = getPostOpResult(updated, op.operator, op.operands);\n });\n return updated;\n });\n}\n\n/**\n * The set of every summary field referenced as a postOperation operand. Summary\n * entries in this set are intermediate feeds (e.g. \"Total Status Count\" deriving\n * \"Incomplete = Total − Completed\") and must keep their original agg output name —\n * renaming them to a series valueField breaks the operand lookup in getPostOpResult.\n */\nexport function getPostOpOperandSet(postOperations?: any[]): Set<string> {\n return new Set((postOperations || []).flatMap((op: any) => op.operands || []));\n}\n\n/**\n * Aligns each summary agg's output name with its series valueField so the SDK maps\n * the aggregated value onto the right key. Only `value` (the agg name) is touched —\n * title/masterFieldDataType/masterFieldType/type describe WHICH field is aggregated\n * and HOW, and must stay as the metric field (e.g. Population/FLOAT/sum). Overwriting\n * them turned a sum(Population) into a value_count(State.keyword).\n *\n * Summary entries referenced as postOperations operands are intermediate values with\n * no series of their own — renaming them positionally broke the operand lookup and\n * silently zeroed out the subtraction, so those are left untouched.\n */\nexport function alignSummaryToSeries(dataSource: any, series: any[]): any {\n if (!dataSource?.pivot?.summary?.length) return dataSource;\n const postOpOperands = getPostOpOperandSet(dataSource?.pivot?.postOperations);\n const fixedSummary = dataSource.pivot.summary.map((s: any, i: number) => {\n if (postOpOperands.has(s.value) || postOpOperands.has(s.title)) return s;\n const matchedSeries = series[i] || series[0];\n return { ...s, value: matchedSeries?.valueField ?? s.value };\n });\n return { ...dataSource, pivot: { ...dataSource.pivot, summary: fixedSummary } };\n}\n","import dayjs from \"dayjs\";\n\n/** Heuristic: a plain number in the ~2000–2100 ms-epoch band is a timestamp, not a value. */\nexport function isLikelyTimestamp(v: any): boolean {\n if (typeof v !== \"number\" || !Number.isFinite(v)) return false;\n return v > 9.46e11 && v < 4.1e12;\n}\n\nexport type DateGapUnit = \"day\" | \"week\" | \"month\";\n\nexport interface FillDateGapsArgs {\n rows: any[];\n xKey: string;\n series: { valueField: string }[];\n unit: DateGapUnit;\n range: { start: dayjs.Dayjs; end: dayjs.Dayjs } | null;\n}\n\n/**\n * Inserts zero rows for periods with no data so a time axis reads continuously.\n *\n * Keying by each period's start date (rather than a week/month number) avoids\n * needing dayjs's weekOfYear plugin and stays unambiguous across year boundaries.\n */\nexport function fillDateGaps({ rows, xKey, series, unit, range }: FillDateGapsArgs): any[] {\n if (!range) return rows;\n\n const keyFormat = unit === \"month\" ? \"YYYY-MM\" : \"YYYY-MM-DD\";\n const byPeriod = new Map<string, any>();\n rows.forEach((row) => {\n const d = dayjs(row[xKey]);\n if (d.isValid()) byPeriod.set(d.startOf(unit).format(keyFormat), row);\n });\n\n const filled: any[] = [];\n let cursor = range.start;\n const useTimestamp = isLikelyTimestamp(rows[0]?.[xKey]);\n while (cursor.isBefore(range.end) || cursor.isSame(range.end, unit)) {\n const key = cursor.format(keyFormat);\n const existing = byPeriod.get(key);\n if (existing) {\n filled.push(existing);\n } else {\n const zeroRow: any = {\n [xKey]: useTimestamp ? cursor.valueOf() : cursor.format(\"YYYY-MM-DD\"),\n };\n series.forEach((s) => { zeroRow[s.valueField] = 0; });\n filled.push(zeroRow);\n }\n cursor = cursor.add(1, unit);\n }\n return filled;\n}\n\n/** Coerces every series valueField on a row to a finite number. */\n/** Text fields often hold \"85%\", \"1,200\" or \"₹ 4.5\" — read the number out of them. */\nfunction toNumber(v: any): number {\n if (typeof v === \"number\") return Number.isFinite(v) ? v : 0;\n const n = Number(v);\n if (Number.isFinite(n)) return n;\n const m = typeof v === \"string\" ? v.replace(/,/g, \"\").match(/-?\\d+(\\.\\d+)?/) : null;\n return m ? Number(m[0]) : 0;\n}\n\nexport function coerceSeriesNumbers(rows: any[], series: { valueField: string }[]): any[] {\n return rows.map((row) => {\n const updated = { ...row };\n // Only coerce fields the row has — adding a missing one (e.g. the default\n // \"value\") invents a column of zeros in tables and pivot grids.\n series.forEach((s) => { if (s.valueField in updated) updated[s.valueField] = toNumber(updated[s.valueField]); });\n return updated;\n });\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport dayjs from \"dayjs\";\nimport { useZvolvRuntime } from \"../core/ZvolvProvider\";\nimport {\n isDataSourceConfigured,\n parseConfig,\n resolveSeries,\n resolveXKey,\n usesFormFramework,\n hasDeclaredSeries,\n} from \"../core/config\";\nimport { alignSummaryToSeries, applyPostOperations } from \"../transforms/postOperations\";\nimport { coerceSeriesNumbers, fillDateGaps, type DateGapUnit } from \"../transforms/dateGaps\";\nimport {\n applyLocalColumnFilters, applyLocalSearch, applyLocalSort, applyLocalWidgetFilters,\n buildColumnFilterClauses, buildRemoteSort, buildSearchClause, buildWidgetFilterClauses,\n hasActiveInteractions, resolveFilterMode, resolveTableMode,\n type ColumnFilters, type SortState, type WidgetFilter,\n} from \"../core/interactions\";\nimport type { WidgetDataResult, WidgetState, ZvolvDataSource } from \"../core/types\";\n\nexport interface UseWidgetDataArgs {\n widgetId?: string | number;\n widgetType?: string;\n workflowTypeId?: string | number;\n title?: string;\n dataSource?: ZvolvDataSource;\n configurations?: any;\n /** Dashboard-level filter state (URL params / ZFilters payload). */\n dashFilters?: any;\n /** Dashboard date filters (`cdate`). */\n cdateFilters?: any[];\n /**\n * Raw host-format widget filter state (`{ filter, filter_cond }` from ZFilters).\n * Prefer `widgetFilters`; this exists for migrated host code.\n */\n localFilters?: any;\n rowLimit?: number;\n dateGap?: { unit: DateGapUnit; start?: string; end?: string } | null;\n /** Rows supplied by an automation binding; when provided, no query is issued. */\n automationRows?: any[] | null;\n automationLoading?: boolean;\n\n // ── Viewer interactions (applied values — see useWidgetInteractions) ──\n /** Free-text search across all columns. */\n search?: string;\n /** Column key → ticked values. */\n columnFilters?: ColumnFilters;\n /** Active sort, or null. */\n sort?: SortState | null;\n /** Widget-level filters, AND-ed. */\n widgetFilters?: WidgetFilter[];\n /** Debounce for remote search, ms. Default 400. */\n searchDebounceMs?: number;\n}\n\n/** Widget types whose host component aligns pivot summary names to its series. */\nconst ALIGN_TYPES = new Set([\"BAR\", \"BAR_CHART\", \"PIE\", \"PIE_CHART\", \"DOUGHNUT\", \"DOUGHNUT_CHART\"]);\n\n/** One getSingleForm per client + form, shared by every widget on a dashboard. */\nconst formCache = new WeakMap<object, Map<string, Promise<any>>>();\nfunction getFormOnce(client: any, formId: any): Promise<any> {\n let byForm = formCache.get(client);\n if (!byForm) { byForm = new Map(); formCache.set(client, byForm); }\n const key = String(formId);\n let p = byForm.get(key);\n if (!p) {\n p = Promise.resolve(client.workflow.getSingleForm(formId)).catch((e: any) => { byForm!.delete(key); throw e; });\n byForm.set(key, p);\n }\n return p;\n}\n\nfunction useDebounced<T>(value: T, ms: number, enabled: boolean): T {\n const [v, setV] = useState(value);\n useEffect(() => {\n if (!enabled) { setV(value); return; }\n const id = setTimeout(() => setV(value), ms);\n return () => clearTimeout(id);\n }, [value, ms, enabled]);\n return enabled ? v : value;\n}\n\n/**\n * Merges widget-level and dashboard-level host filter maps. The `filter` body is\n * merged per form so a dashboard filter does not wipe out a widget filter.\n */\nfunction mergeHostFilters(local: any, dash: any): any {\n const merged = { ...(local || {}), ...(dash || {}) };\n for (const key of [\"filters\", \"filter\"]) {\n if (typeof merged[key] === \"string\") {\n try { merged[key] = JSON.parse(merged[key]); } catch { /* keep raw */ }\n }\n }\n const lf = local?.filter, df = dash?.filter;\n if (lf && df && typeof lf === \"object\" && typeof df === \"object\") {\n const out: any = { ...lf };\n for (const form of Object.keys(df)) out[form] = { ...(lf[form] || {}), ...(df[form] || {}) };\n merged.filter = out;\n }\n return merged;\n}\n\n/**\n * Fetches, normalizes and shapes a widget's rows.\n *\n * This owns the whole Zvolv data path — query generation, Elasticsearch, pivot\n * postOperations, summary/series alignment, user-label resolution, date-gap\n * filling, and viewer interactions (search / column filters / sort / widget\n * filters, sent to the server or applied locally per `meta.tableMode` /\n * `meta.filterMode`). It renders nothing: the caller owns the UI.\n */\nexport function useWidgetData(args: UseWidgetDataArgs): WidgetDataResult {\n const {\n widgetId, widgetType, workflowTypeId, dataSource, configurations,\n dashFilters, cdateFilters, localFilters, rowLimit = 1000,\n dateGap = null, automationRows = null, automationLoading = false,\n search = \"\", columnFilters, sort = null, widgetFilters, searchDebounceMs = 400,\n } = args;\n\n const rt = useZvolvRuntime();\n\n const [sourceRows, setSourceRows] = useState<any[]>([]);\n const [userLabels, setUserLabels] = useState<Record<string, string>>({});\n const [initialLoading, setInitialLoading] = useState(true);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [nonce, setNonce] = useState(0);\n\n const requestedUserIds = useRef<Set<string>>(new Set());\n const reqSeq = useRef(0);\n\n const config = useMemo(() => parseConfig(configurations), [configurations]);\n const series = useMemo(() => resolveSeries(config), [config]);\n const xKey = useMemo(() => resolveXKey(series), [series]);\n const configured = useMemo(() => isDataSourceConfigured(dataSource), [dataSource]);\n\n const hasAutomation = !!automationRows;\n const tableMode = resolveTableMode(dataSource, widgetType, hasAutomation);\n const filterMode = resolveFilterMode(dataSource, hasAutomation);\n\n // Only the remote parts of an interaction may trigger a refetch; local parts\n // re-derive `rows` from `sourceRows` without touching the network.\n const debouncedSearch = useDebounced(search, searchDebounceMs, tableMode === \"remote\");\n const remote = useMemo(() => ({\n search: tableMode === \"remote\" ? debouncedSearch : \"\",\n columnFilters: tableMode === \"remote\" ? columnFilters : undefined,\n sort: tableMode === \"remote\" ? sort : null,\n widgetFilters: filterMode === \"remote\" ? widgetFilters : undefined,\n }), [tableMode, filterMode, debouncedSearch, columnFilters, sort, widgetFilters]);\n\n // Object identities change every render upstream; key on content to avoid loops.\n const configKey = JSON.stringify(config ?? {});\n const dashKey = JSON.stringify(dashFilters ?? {});\n const cdateKey = JSON.stringify(cdateFilters ?? []);\n const localKey = JSON.stringify(localFilters ?? {});\n const dsKey = JSON.stringify(dataSource ?? {});\n const remoteKey = JSON.stringify(remote);\n\n const normalize = useCallback((incoming: any[]) => {\n const withPostOps = applyPostOperations(incoming, dataSource?.pivot?.postOperations);\n const numeric = coerceSeriesNumbers(withPostOps, series);\n if (!dateGap) return numeric;\n const range = dateGap.start && dateGap.end\n ? { start: dayjs(dateGap.start).startOf(dateGap.unit), end: dayjs(dateGap.end).startOf(dateGap.unit) }\n : null;\n return fillDateGaps({ rows: numeric, xKey, series, unit: dateGap.unit, range });\n }, [dataSource, series, xKey, dateGap]);\n\n useEffect(() => {\n // Automation-sourced widgets bypass query generation entirely.\n if (automationRows) {\n if (automationLoading) { setLoading(true); return; }\n setSourceRows(normalize(automationRows));\n setInitialLoading(false);\n setLoading(false);\n return;\n }\n\n if (!configured) {\n setSourceRows([]);\n setInitialLoading(false);\n setLoading(false);\n return;\n }\n\n const seq = ++reqSeq.current;\n let cancelled = false;\n setError(null);\n setLoading(true);\n\n (async () => {\n try {\n const ds: any = dataSource || {};\n let fetched: any[] = [];\n\n if (usesFormFramework(ds)) {\n const formId = ds.formId ?? ds.fields?.[0]?.formID;\n const withFormId = formId ? { ...ds, formId } : ds;\n\n const merged = mergeHostFilters(localFilters, dashFilters);\n const cfgWithDates = { ...config, cdateFilters };\n const dashboardFilters: any[] = rt.formatDashboardFilters\n ? [...(rt.formatDashboardFilters(cfgWithDates, withFormId, merged) || [])]\n : [];\n\n // Viewer interactions that the server applies.\n if (remote.widgetFilters?.length) {\n dashboardFilters.push(...buildWidgetFilterClauses(withFormId, remote.widgetFilters));\n }\n if (remote.columnFilters && Object.keys(remote.columnFilters).length) {\n dashboardFilters.push(...(rt.formatHeaderFilters\n ? rt.formatHeaderFilters(withFormId, remote.columnFilters) || []\n : buildColumnFilterClauses(withFormId, remote.columnFilters)));\n }\n const searchClause = buildSearchClause(remote.search);\n if (searchClause) dashboardFilters.push(searchClause);\n\n const { dashboardSort, config: queryConfig } = buildRemoteSort(config, withFormId, remote.sort);\n\n // Access check: an explicit \"no form\" means the viewer can't see it. A\n // failing lookup (some forms 500 on getSingleForm) must not block the\n // query — ZAI-Dashboard never makes this call and those widgets load.\n if (formId && !ds.isTask && rt.client?.workflow?.getSingleForm) {\n const form = await getFormOnce(rt.client, formId).catch((e: any) => {\n console.warn(`[@zestl/zvolv-widgets] form lookup failed for ${formId}; querying anyway`, e);\n return true;\n });\n if (!form) throw new Error(\"You don't have access to this widget's form.\");\n }\n\n // Only the host's bar / pie / doughnut charts rename summary outputs to\n // their series valueFields. Doing it elsewhere (KPI, table, HTML, line)\n // renames e.g. \"Status Count\" → \"value\" and every dataPoint misses.\n const fixedDs = ALIGN_TYPES.has(String(widgetType ?? \"\").toUpperCase()) && hasDeclaredSeries(config)\n ? alignSummaryToSeries(withFormId, series)\n : withFormId;\n const loggedInUser = rt.resolveQueryUser ? await rt.resolveQueryUser() : null;\n const mappings = rt.prefetchQueryMappings\n ? await rt.prefetchQueryMappings(fixedDs.formId)\n : undefined;\n\n if (!rt.generateQuery) throw new Error(\"runtime.generateQuery is not configured\");\n // generateQuery(config, ds, formId, skip, limit, extraFilters,\n // dashboardFilters, submissionIds, user, dashboardSort, searchAfter, isTask, mappings)\n const query = rt.generateQuery(\n queryConfig, fixedDs, fixedDs.formId, 0, rowLimit, [],\n dashboardFilters, [], loggedInUser, dashboardSort, null, fixedDs.isTask, mappings\n );\n const res: any = await rt.client.workflow.elasticSearch(query);\n // The backend may return a bare array or use `data` instead of `elements`.\n fetched = Array.isArray(res) ? res : (res?.elements ?? res?.data ?? []);\n } else {\n // Legacy widget-id source. The widget's own dataConfs.WorkflowTypeID wins\n // over the dashboard's app id (host raw-html / charts do the same).\n const wftype = config?.dataConfs?.WorkflowTypeID ?? workflowTypeId;\n const res: any = await rt.client.workflow.getDataSource(JSON.stringify({ widgetId, wftype }));\n const payload = res?.data && !Array.isArray(res.data) ? res.data : res;\n fetched = payload?.table ?? (Array.isArray(payload) ? payload : []);\n }\n\n if (cancelled || seq !== reqSeq.current) return;\n setSourceRows(normalize(fetched));\n } catch (err: any) {\n if (cancelled || seq !== reqSeq.current) return;\n console.error(`[@zestl/zvolv-widgets] ${widgetType ?? \"widget\"} fetch failed:`, err);\n setError(err instanceof Error ? err : new Error(String(err)));\n setSourceRows([]);\n } finally {\n if (!cancelled && seq === reqSeq.current) {\n setInitialLoading(false);\n setLoading(false);\n }\n }\n })();\n\n return () => { cancelled = true; };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [configKey, dashKey, cdateKey, localKey, dsKey, remoteKey, configured, nonce, automationRows, automationLoading]);\n\n // Resolve opaque user ids on the argument axis into display names.\n const userKind = useMemo(() => {\n if (!rt.getUserFieldKind) return null;\n const field = (dataSource?.fields || []).find(\n (f: any) => f?.masterfield === xKey || f?.header === xKey\n );\n const pivotRow = (dataSource?.pivot?.rows || []).find(\n (r: any) => r?.title === xKey || r?.masterField === xKey\n );\n return rt.getUserFieldKind(field?.masterFieldType ?? pivotRow?.masterFieldType);\n }, [rt, dataSource, xKey]);\n\n useEffect(() => {\n if (!userKind || !rt.resolveUserLabels || sourceRows.length === 0) return;\n const pending = sourceRows\n .flatMap((row: any) => {\n const v = row?.[xKey];\n return Array.isArray(v) ? v : [v];\n })\n .filter((v: any) =>\n v !== null && v !== undefined && v !== \"\" &&\n typeof v !== \"object\" && !requestedUserIds.current.has(String(v))\n );\n if (pending.length === 0) return;\n pending.forEach((v: any) => requestedUserIds.current.add(String(v)));\n\n let cancelled = false;\n (async () => {\n try {\n const labels = await rt.resolveUserLabels!(pending, userKind);\n if (!cancelled && Object.keys(labels).length > 0) {\n setUserLabels((prev) => ({ ...prev, ...labels }));\n }\n } catch (err) {\n pending.forEach((v: any) => requestedUserIds.current.delete(String(v)));\n console.error(\"[@zestl/zvolv-widgets] user label resolution failed:\", err);\n }\n })();\n return () => { cancelled = true; };\n }, [sourceRows, userKind, xKey, rt]);\n\n const toLabel = useCallback((value: any) => {\n if (!userKind || value === null || value === undefined || value === \"\") return value;\n if (Array.isArray(value)) {\n return value.map((v: any) => userLabels[String(v)] ?? v)\n .filter((v: any) => v !== \"\" && v != null).join(\", \");\n }\n return userLabels[String(value)] ?? value;\n }, [userKind, userLabels]);\n\n // Interactions the server could not apply run here, over the loaded rows.\n const rows = useMemo(() => {\n let out = sourceRows;\n if (filterMode === \"local\" && widgetFilters?.length) out = applyLocalWidgetFilters(out, widgetFilters);\n if (tableMode === \"local\") {\n if (columnFilters) out = applyLocalColumnFilters(out, columnFilters);\n if (search) out = applyLocalSearch(out, search, toLabel);\n if (sort) out = applyLocalSort(out, sort);\n }\n return out;\n }, [sourceRows, filterMode, tableMode, widgetFilters, columnFilters, search, sort, toLabel]);\n\n const filtered = hasActiveInteractions({ search, columnFilters, sort: null, widgetFilters });\n\n // Refetches keep the previous rows on screen (no flash to \"Loading…\"), so a\n // search box or filter in the header stays usable while results update.\n const state: WidgetState = !configured\n ? \"unconfigured\"\n : error ? \"error\"\n : (initialLoading || (loading && rows.length === 0)) ? \"loading\"\n : rows.length === 0 ? \"empty\"\n : \"ready\";\n\n return {\n rows,\n sourceRows,\n state,\n loading,\n initialLoading,\n error,\n refresh: useCallback(() => setNonce((n) => n + 1), []),\n meta: {\n xKey, series, template: config?.template || \"standard\", userLabels, toLabel,\n tableMode, filterMode, filtered,\n },\n };\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n EMPTY_INTERACTIONS, hasActiveInteractions,\n type ColumnFilters, type SortDirection, type SortState,\n type WidgetFilter, type WidgetInteractionState,\n} from \"../core/interactions\";\n\n/**\n * Value + change props for each viewer interaction.\n *\n * Every interaction works both ways:\n * - uncontrolled — omit the value; pass `default*` to seed it. The widget owns it.\n * - controlled — pass the value AND its `on*Change`. You own it (URL, store…).\n */\nexport interface InteractionStateProps {\n search?: string;\n defaultSearch?: string;\n onSearchChange?: (search: string) => void;\n\n columnFilters?: ColumnFilters;\n defaultColumnFilters?: ColumnFilters;\n onColumnFiltersChange?: (columnFilters: ColumnFilters) => void;\n\n sort?: SortState | null;\n defaultSort?: SortState | null;\n onSortChange?: (sort: SortState | null) => void;\n\n widgetFilters?: WidgetFilter[];\n defaultWidgetFilters?: WidgetFilter[];\n onWidgetFiltersChange?: (widgetFilters: WidgetFilter[]) => void;\n\n /** Fires after any interaction changes, with the full next state. */\n onInteractionsChange?: (state: WidgetInteractionState) => void;\n}\n\n/** The live interaction state plus every setter a UI slot needs. */\nexport interface WidgetInteractions extends WidgetInteractionState {\n setSearch: (search: string) => void;\n setColumnFilters: (columnFilters: ColumnFilters) => void;\n /** Sets one column's ticked values; an empty array clears that column. */\n setColumnFilter: (key: string, values: any[]) => void;\n setSort: (sort: SortState | null) => void;\n /** Cycles a column: none → asc → desc → none. */\n toggleSort: (key: string) => void;\n sortDirectionFor: (key: string) => SortDirection | null;\n setWidgetFilters: (filters: WidgetFilter[]) => void;\n addWidgetFilter: (filter: WidgetFilter) => void;\n removeWidgetFilter: (index: number) => void;\n /** Clears search, column filters, sort and widget filters. */\n clearAll: () => void;\n /** True when anything is applied. */\n active: boolean;\n}\n\nfunction useControllable<T>(\n controlled: T | undefined, initial: T, onChange: ((v: T) => void) | undefined\n): [T, (v: T) => void] {\n const [inner, setInner] = useState<T>(initial);\n const isControlled = controlled !== undefined;\n const value = isControlled ? (controlled as T) : inner;\n const set = useCallback((v: T) => {\n if (!isControlled) setInner(v);\n onChange?.(v);\n }, [isControlled, onChange]);\n return [value, set];\n}\n\n/**\n * Headless state for search, column filters, sort and widget filters.\n *\n * Feed the returned values to `useWidgetData` (they are the same prop names)\n * and hand the setters to your own controls. Widgets call this internally;\n * use it directly only when building a widget from `useWidgetData`.\n */\nexport function useWidgetInteractions(props: InteractionStateProps = {}): WidgetInteractions {\n const [search, setSearchRaw] = useControllable(\n props.search, props.defaultSearch ?? EMPTY_INTERACTIONS.search, props.onSearchChange\n );\n const [columnFilters, setColumnFiltersRaw] = useControllable(\n props.columnFilters, props.defaultColumnFilters ?? EMPTY_INTERACTIONS.columnFilters, props.onColumnFiltersChange\n );\n const [sort, setSortRaw] = useControllable<SortState | null>(\n props.sort, props.defaultSort ?? EMPTY_INTERACTIONS.sort, props.onSortChange\n );\n const [widgetFilters, setWidgetFiltersRaw] = useControllable(\n props.widgetFilters, props.defaultWidgetFilters ?? EMPTY_INTERACTIONS.widgetFilters, props.onWidgetFiltersChange\n );\n\n // Latest state, so each setter can report the full next state.\n const latest = useRef<WidgetInteractionState>({ search, columnFilters, sort, widgetFilters });\n latest.current = { search, columnFilters, sort, widgetFilters };\n const onAny = props.onInteractionsChange;\n const report = useCallback((patch: Partial<WidgetInteractionState>) => {\n const next = { ...latest.current, ...patch };\n latest.current = next;\n onAny?.(next);\n }, [onAny]);\n\n const setSearch = useCallback((v: string) => { setSearchRaw(v); report({ search: v }); }, [setSearchRaw, report]);\n const setColumnFilters = useCallback((v: ColumnFilters) => {\n setColumnFiltersRaw(v); report({ columnFilters: v });\n }, [setColumnFiltersRaw, report]);\n const setColumnFilter = useCallback((key: string, values: any[]) => {\n const next = { ...latest.current.columnFilters };\n if (values && values.length) next[key] = values; else delete next[key];\n setColumnFilters(next);\n }, [setColumnFilters]);\n const setSort = useCallback((v: SortState | null) => { setSortRaw(v); report({ sort: v }); }, [setSortRaw, report]);\n const toggleSort = useCallback((key: string) => {\n const cur = latest.current.sort;\n if (!cur || cur.key !== key) setSort({ key, direction: \"asc\" });\n else if (cur.direction === \"asc\") setSort({ key, direction: \"desc\" });\n else setSort(null);\n }, [setSort]);\n const setWidgetFilters = useCallback((v: WidgetFilter[]) => {\n setWidgetFiltersRaw(v); report({ widgetFilters: v });\n }, [setWidgetFiltersRaw, report]);\n const addWidgetFilter = useCallback((f: WidgetFilter) => {\n setWidgetFilters([...latest.current.widgetFilters, f]);\n }, [setWidgetFilters]);\n const removeWidgetFilter = useCallback((index: number) => {\n setWidgetFilters(latest.current.widgetFilters.filter((_, i) => i !== index));\n }, [setWidgetFilters]);\n const clearAll = useCallback(() => {\n setSearchRaw(\"\"); setColumnFiltersRaw({}); setSortRaw(null); setWidgetFiltersRaw([]);\n report({ ...EMPTY_INTERACTIONS });\n }, [setSearchRaw, setColumnFiltersRaw, setSortRaw, setWidgetFiltersRaw, report]);\n\n return useMemo(() => ({\n search, columnFilters, sort, widgetFilters,\n setSearch, setColumnFilters, setColumnFilter, setSort, toggleSort,\n sortDirectionFor: (key: string) => (sort && sort.key === key ? sort.direction : null),\n setWidgetFilters, addWidgetFilter, removeWidgetFilter, clearAll,\n active: hasActiveInteractions({ search, columnFilters, sort, widgetFilters }),\n }), [\n search, columnFilters, sort, widgetFilters,\n setSearch, setColumnFilters, setColumnFilter, setSort, toggleSort,\n setWidgetFilters, addWidgetFilter, removeWidgetFilter, clearAll,\n ]);\n}\n","/**\n * Interactive widget layer — wires viewer controls (search, widget filters,\n * column filters, sort) to the data path, with the UI supplied by the caller.\n *\n * Each control has a render slot. Pass your own component and the widget hands\n * it the current value and setters; applying a value re-queries (remote) or\n * re-filters loaded rows (local) automatically. Omit a slot and a minimal,\n * token-styled default is used when that control is enabled.\n */\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useWidgetData, type UseWidgetDataArgs } from \"../react/useWidgetData\";\nimport {\n useWidgetInteractions, type InteractionStateProps, type WidgetInteractions,\n} from \"../react/useWidgetInteractions\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport { resolveWidgetDefaults, type ZvolvTokens } from \"../theme/tokens\";\nimport { parseConfig } from \"../core/config\";\nimport {\n distinctColumnValues, resolveDateToken,\n type SortDirection, type WidgetFilter,\n} from \"../core/interactions\";\nimport type { WidgetDataResult } from \"../core/types\";\n\n// ── Slot contracts ───────────────────────────────────────────────────────────\n\n/** A field the viewer may filter on, derived from `dataSource.fields`. */\nexport interface FilterableField {\n /** Pass this as `WidgetFilter.field`. */\n field: string;\n label: string;\n masterFieldType?: string;\n kind: \"text\" | \"number\" | \"date\" | \"boolean\";\n /** Operators that make sense for this field's type, most useful first. */\n operators: string[];\n}\n\nexport interface SearchSlotArgs {\n value: string;\n setValue: (value: string) => void;\n clear: () => void;\n placeholder: string;\n /** \"remote\" = server-side search (debounced); \"local\" = filters loaded rows. */\n mode: \"remote\" | \"local\";\n loading: boolean;\n tokens: ZvolvTokens;\n}\n\nexport interface WidgetFilterSlotArgs {\n filters: WidgetFilter[];\n setFilters: (filters: WidgetFilter[]) => void;\n addFilter: (filter: WidgetFilter) => void;\n removeFilter: (index: number) => void;\n clear: () => void;\n /** Fields that can be filtered, with valid operators per field. */\n fields: FilterableField[];\n /** The host's declared filter list (`config.filters`), when present. */\n declared: any[];\n mode: \"remote\" | \"local\";\n tokens: ZvolvTokens;\n}\n\nexport interface ColumnFilterSlotArgs {\n column: { key: string; header: string; kind?: string };\n selected: any[];\n setSelected: (values: any[]) => void;\n clear: () => void;\n /** Distinct values seen in this column. `value` is what goes in `selected`. */\n options: { value: any; label: string; count: number }[];\n mode: \"remote\" | \"local\";\n tokens: ZvolvTokens;\n}\n\nexport interface SortSlotArgs {\n column: { key: string; header: string; kind?: string };\n direction: SortDirection | null;\n /** none → asc → desc → none */\n toggle: () => void;\n setDirection: (direction: SortDirection | null) => void;\n tokens: ZvolvTokens;\n}\n\nexport interface ToolbarSlotArgs {\n /** The resolved search control (slot or default), or null when disabled. */\n search: React.ReactNode;\n /** The resolved widget-filter control (slot or default), or null when disabled. */\n widgetFilter: React.ReactNode;\n interactions: WidgetInteractions;\n tokens: ZvolvTokens;\n}\n\n/** UI props shared by every data widget. */\nexport interface InteractionUiProps {\n /** Show the search box. Default: `config.showSearchbar` / `config.styling.showSearchbar`. */\n showSearch?: boolean;\n /** Show the widget-level filter control. Default: `config.showWidgetFilter`, or on when a slot is passed. */\n showWidgetFilter?: boolean;\n /** Tables only. Show per-column filters. Default: `config.showColumnFilter` / `config.styling.showColumnFilter`. */\n showColumnFilter?: boolean;\n /** Tables only. Click a header to sort. Default: true (`config.enableSort === false` turns it off). */\n enableSort?: boolean;\n searchPlaceholder?: string;\n\n renderSearch?: (args: SearchSlotArgs) => React.ReactNode;\n renderWidgetFilter?: (args: WidgetFilterSlotArgs) => React.ReactNode;\n /** Tables only. Rendered in each filterable header cell. */\n renderColumnFilter?: (args: ColumnFilterSlotArgs) => React.ReactNode;\n /** Tables only. Rendered in each sortable header cell. */\n renderSortIndicator?: (args: SortSlotArgs) => React.ReactNode;\n /** Replaces the whole header toolbar; receives the resolved controls to place. */\n renderToolbar?: (args: ToolbarSlotArgs) => React.ReactNode;\n}\n\nexport type InteractionProps = InteractionStateProps & InteractionUiProps;\n\n/** Props every data widget accepts: data args + interaction state + UI slots. */\nexport type InteractiveWidgetProps = UseWidgetDataArgs & InteractionProps;\n\nconst UI_KEYS = [\n \"showSearch\", \"showWidgetFilter\", \"showColumnFilter\", \"enableSort\", \"searchPlaceholder\",\n \"renderSearch\", \"renderWidgetFilter\", \"renderColumnFilter\", \"renderSortIndicator\", \"renderToolbar\",\n \"search\", \"defaultSearch\", \"onSearchChange\",\n \"columnFilters\", \"defaultColumnFilters\", \"onColumnFiltersChange\",\n \"sort\", \"defaultSort\", \"onSortChange\",\n \"widgetFilters\", \"defaultWidgetFilters\", \"onWidgetFiltersChange\", \"onInteractionsChange\",\n] as const;\n\n// ── Field helpers ────────────────────────────────────────────────────────────\n\nconst NUMBER_TYPES = [\"INPUT_NUMBER\", \"INPUT_CURRENCY\", \"INPUT_PERCENT\", \"INPUT_FORMULA\", \"RATING_BAR\", \"PROGRESS_BAR\", \"INPUT_AUTONUMBER\"];\nconst DATE_TYPES = [\"INPUT_DATE\", \"DATE_PICKER\", \"INPUT_DATE_RANGE\", \"DATE\", \"DATETIME\"];\n\nexport function fieldKind(masterFieldType?: string, dataType?: string): FilterableField[\"kind\"] {\n const t = String(masterFieldType ?? \"\").toUpperCase();\n if (DATE_TYPES.includes(t) || /date$/i.test(t)) return \"date\";\n if (t === \"CHECK_BOX\" || dataType === \"BOOLEAN\") return \"boolean\";\n if (NUMBER_TYPES.includes(t) || dataType === \"INT\" || dataType === \"FLOAT\") return \"number\";\n return \"text\";\n}\n\nexport function operatorsForKind(kind: FilterableField[\"kind\"]): string[] {\n switch (kind) {\n case \"number\": return [\"EQUALS\", \"GREATER_THAN\", \"LESS_THAN\", \"BETWEEN\", \"EMPTY\", \"NOT_EMPTY\"];\n case \"date\": return [\"DATE_IS\", \"BETWEEN\", \"GREATER_THAN\", \"LESS_THAN\", \"EMPTY\", \"NOT_EMPTY\"];\n case \"boolean\": return [\"EQUALS\", \"EMPTY\", \"NOT_EMPTY\"];\n default: return [\"IN\", \"NOT_IN\", \"CONTAINS\", \"STARTS_WITH\", \"EMPTY\", \"NOT_EMPTY\"];\n }\n}\n\n/** Every field in `dataSource.fields` as a filterable field. */\nexport function filterableFields(dataSource: any): FilterableField[] {\n const fields: any[] = Array.isArray(dataSource?.fields) ? dataSource.fields : [];\n return fields\n .filter((f) => f?.header)\n .map((f) => {\n const kind = fieldKind(f.masterFieldType ?? f.fieldType, f.masterFieldDataType);\n return {\n field: f.header, label: f.label ?? f.header,\n masterFieldType: f.masterFieldType, kind, operators: operatorsForKind(kind),\n };\n });\n}\n\nconst OPERATOR_LABELS: Record<string, string> = {\n IN: \"is\", NOT_IN: \"is not\", EQUALS: \"=\", CONTAINS: \"contains\", STARTS_WITH: \"starts with\",\n GREATER_THAN: \">\", LESS_THAN: \"<\", BETWEEN: \"between\", EMPTY: \"is empty\",\n NOT_EMPTY: \"is not empty\", DATE_IS: \"is\",\n};\n\nexport function describeWidgetFilter(f: WidgetFilter): string {\n const op = OPERATOR_LABELS[f.operator] ?? f.operator;\n if (f.operator === \"EMPTY\" || f.operator === \"NOT_EMPTY\") return `${f.field} ${op}`;\n const v = Array.isArray(f.value) ? f.value.join(f.operator === \"BETWEEN\" ? \" – \" : \", \") : String(f.value ?? \"\");\n return `${f.field} ${op} ${f.operator === \"DATE_IS\" ? v.toLowerCase().replace(/_/g, \" \") : v}`;\n}\n\n// ── The hook every data widget calls ─────────────────────────────────────────\n\nexport interface InteractiveWidgetData {\n data: WidgetDataResult;\n interactions: WidgetInteractions;\n config: any;\n tokens: ZvolvTokens;\n /** Header toolbar node — pass to `<WidgetShell actions={toolbar}>`. */\n toolbar: React.ReactNode;\n /** Extra WidgetShell props (busy / filtered). Spread onto the shell. */\n shell: { busy: boolean; filtered: boolean };\n flags: { showSearch: boolean; showWidgetFilter: boolean; showColumnFilter: boolean; enableSort: boolean };\n /** Column-filter options: values seen so far plus currently ticked ones. */\n getColumnOptions: (key: string) => { value: any; label: string; count: number }[];\n /** Header controls (sort indicator + column filter) for one column. Tables use this. */\n headerControls: (column: { key: string; header: string; kind?: string }) => React.ReactNode;\n ui: InteractionUiProps;\n}\n\n/**\n * Resolves data + interactions + toolbar for one widget. Widgets call this in\n * place of `useWidgetData`; custom widgets may too.\n */\nexport function useInteractiveWidgetData(\n props: InteractiveWidgetProps & { widgetType: string },\n options: { table?: boolean } = {}\n): InteractiveWidgetData {\n const t = useTokens();\n const interactions = useWidgetInteractions(props);\n\n const dataArgs: UseWidgetDataArgs = useMemo(() => {\n const rest: any = { ...props };\n for (const k of UI_KEYS) delete rest[k];\n return rest;\n }, [props]);\n\n const data = useWidgetData({\n ...dataArgs,\n search: interactions.search,\n columnFilters: interactions.columnFilters,\n sort: interactions.sort,\n widgetFilters: interactions.widgetFilters,\n });\n\n const config = useMemo(\n () => resolveWidgetDefaults(t, props.widgetType, parseConfig(props.configurations)),\n [t, props.widgetType, props.configurations]\n );\n\n const flags = {\n showSearch: props.showSearch ?? !!(config?.showSearchbar ?? config?.styling?.showSearchbar ?? props.renderSearch),\n showWidgetFilter: props.showWidgetFilter ??\n !!(config?.showWidgetFilter ?? config?.styling?.showWidgetFilter ?? props.renderWidgetFilter),\n showColumnFilter: !!options.table && (props.showColumnFilter ??\n !!(config?.showColumnFilter ?? config?.styling?.showColumnFilter ?? props.renderColumnFilter)),\n enableSort: !!options.table && (props.enableSort ?? config?.enableSort !== false),\n };\n\n // Column-filter options accumulate across fetches: in remote mode the server\n // returns only matching rows, and options must not vanish once one is ticked.\n const seen = useRef<{ ds: string; values: Map<string, Map<string, string>> }>({ ds: \"\", values: new Map() });\n const dsKey = JSON.stringify(props.dataSource ?? {});\n if (seen.current.ds !== dsKey) seen.current = { ds: dsKey, values: new Map() };\n\n const getColumnOptions = (key: string) => {\n const current = distinctColumnValues(data.sourceRows, key, data.meta.toLabel);\n let bucket = seen.current.values.get(key);\n if (!bucket) { bucket = new Map(); seen.current.values.set(key, bucket); }\n for (const o of current) bucket.set(String(o.value), o.label);\n const byValue = new Map(current.map((o) => [String(o.value), o]));\n for (const [v, label] of bucket) if (!byValue.has(v)) byValue.set(v, { value: v, label, count: 0 });\n for (const v of interactions.columnFilters[key] ?? []) {\n if (!byValue.has(String(v))) byValue.set(String(v), { value: v, label: v === \"\" ? \"(Blanks)\" : String(v), count: 0 });\n }\n return [...byValue.values()];\n };\n\n const fields = useMemo(() => filterableFields(props.dataSource), [dsKey]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const searchNode = flags.showSearch ? (() => {\n const args: SearchSlotArgs = {\n value: interactions.search, setValue: interactions.setSearch,\n clear: () => interactions.setSearch(\"\"),\n placeholder: props.searchPlaceholder ?? config?.searchPlaceholder ?? \"Search…\",\n mode: data.meta.tableMode, loading: data.loading, tokens: t,\n };\n return props.renderSearch ? props.renderSearch(args) : <DefaultSearch {...args} />;\n })() : null;\n\n // Active filters stay visible (as chips) unless the control is explicitly off,\n // so a viewer can always see and clear what is narrowing the data.\n const widgetFilterVisible = flags.showWidgetFilter ||\n (props.showWidgetFilter !== false && interactions.widgetFilters.length > 0);\n const widgetFilterNode = widgetFilterVisible ? (() => {\n const args: WidgetFilterSlotArgs = {\n filters: interactions.widgetFilters, setFilters: interactions.setWidgetFilters,\n addFilter: interactions.addWidgetFilter, removeFilter: interactions.removeWidgetFilter,\n clear: () => interactions.setWidgetFilters([]), fields,\n declared: Array.isArray(config?.filters) ? config.filters : [],\n mode: data.meta.filterMode, tokens: t,\n };\n return props.renderWidgetFilter ? props.renderWidgetFilter(args) : <DefaultWidgetFilter {...args} />;\n })() : null;\n\n const toolbar = props.renderToolbar\n ? props.renderToolbar({ search: searchNode, widgetFilter: widgetFilterNode, interactions, tokens: t })\n : (searchNode || widgetFilterNode)\n ? <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, flexWrap: \"wrap\", justifyContent: \"flex-end\" }}>\n {widgetFilterNode}{searchNode}\n </div>\n : null;\n\n const headerControls = (column: { key: string; header: string; kind?: string }) => {\n const parts: React.ReactNode[] = [];\n if (flags.enableSort) {\n const args: SortSlotArgs = {\n column, direction: interactions.sortDirectionFor(column.key),\n toggle: () => interactions.toggleSort(column.key),\n setDirection: (d) => interactions.setSort(d ? { key: column.key, direction: d } : null),\n tokens: t,\n };\n parts.push(\n <React.Fragment key=\"sort\">\n {props.renderSortIndicator ? props.renderSortIndicator(args) : <DefaultSortIndicator {...args} />}\n </React.Fragment>\n );\n }\n if (flags.showColumnFilter) {\n const args: ColumnFilterSlotArgs = {\n column, selected: interactions.columnFilters[column.key] ?? [],\n setSelected: (v) => interactions.setColumnFilter(column.key, v),\n clear: () => interactions.setColumnFilter(column.key, []),\n options: getColumnOptions(column.key), mode: data.meta.tableMode, tokens: t,\n };\n parts.push(\n <React.Fragment key=\"filter\">\n {props.renderColumnFilter ? props.renderColumnFilter(args) : <DefaultColumnFilter {...args} />}\n </React.Fragment>\n );\n }\n return parts.length ? <>{parts}</> : null;\n };\n\n return {\n data, interactions, config, tokens: t, toolbar,\n shell: { busy: data.loading && !data.initialLoading, filtered: data.meta.filtered },\n flags, getColumnOptions, headerControls,\n ui: props,\n };\n}\n\n// ── Minimal default controls (replace any of them via the slots) ─────────────\n\nfunction controlStyle(t: ZvolvTokens): React.CSSProperties {\n return {\n padding: \"5px 10px\", borderRadius: 8, fontFamily: t.fontFamily,\n border: `1px solid ${t.colors.border}`, fontSize: t.typography.caption.fontSize,\n color: t.colors.textPrimary, background: t.colors.surface, outline: \"none\",\n };\n}\n\nconst DefaultSearch: React.FC<SearchSlotArgs> = ({ value, setValue, placeholder, tokens: t }) => (\n <input\n type=\"search\" value={value} placeholder={placeholder} aria-label=\"Search\"\n onChange={(e) => setValue(e.target.value)}\n style={{ ...controlStyle(t), width: 160 }}\n />\n);\n\n/** Anchored popover that closes on outside click / Escape. */\nconst Popover: React.FC<{\n trigger: (open: boolean, toggle: () => void) => React.ReactNode;\n children: (close: () => void) => React.ReactNode;\n tokens: ZvolvTokens;\n align?: \"left\" | \"right\";\n}> = ({ trigger, children, tokens: t, align = \"right\" }) => {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLSpanElement>(null);\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); };\n const onKey = (e: KeyboardEvent) => { if (e.key === \"Escape\") setOpen(false); };\n document.addEventListener(\"mousedown\", onDown);\n document.addEventListener(\"keydown\", onKey);\n return () => { document.removeEventListener(\"mousedown\", onDown); document.removeEventListener(\"keydown\", onKey); };\n }, [open]);\n return (\n <span ref={ref} style={{ position: \"relative\", display: \"inline-flex\" }}>\n {trigger(open, () => setOpen((o) => !o))}\n {open && (\n <div role=\"dialog\" style={{\n position: \"absolute\", top: \"calc(100% + 6px)\", [align]: 0, zIndex: 20, minWidth: 220,\n background: t.colors.surface, border: `1px solid ${t.colors.border}`, borderRadius: 10,\n boxShadow: t.widget.shadow, padding: 10, fontFamily: t.fontFamily,\n fontSize: t.typography.caption.fontSize, color: t.colors.textPrimary,\n textTransform: \"none\", letterSpacing: \"normal\", fontWeight: 400, textAlign: \"left\",\n }}>\n {children(() => setOpen(false))}\n </div>\n )}\n </span>\n );\n};\n\nfunction iconButton(t: ZvolvTokens, active: boolean): React.CSSProperties {\n return {\n border: \"none\", background: \"transparent\", cursor: \"pointer\", padding: \"0 3px\",\n color: active ? t.colors.primary : t.colors.textTertiary, fontSize: 10, lineHeight: 1,\n fontFamily: t.fontFamily,\n };\n}\n\nconst DefaultSortIndicator: React.FC<SortSlotArgs> = ({ direction, toggle, column, tokens: t }) => (\n <button\n type=\"button\" onClick={toggle} style={iconButton(t, !!direction)}\n aria-label={`Sort by ${column.header}`}\n title={direction === \"asc\" ? \"Sorted ascending\" : direction === \"desc\" ? \"Sorted descending\" : \"Sort\"}\n >{direction === \"asc\" ? \"▲\" : direction === \"desc\" ? \"▼\" : \"↕\"}</button>\n);\n\nconst DefaultColumnFilter: React.FC<ColumnFilterSlotArgs> = ({ column, selected, setSelected, clear, options, tokens: t }) => {\n const [q, setQ] = useState(\"\");\n const shown = options.filter((o) => !q || o.label.toLowerCase().includes(q.toLowerCase()));\n const isOn = (v: any) => selected.some((s) => String(s) === String(v));\n return (\n <Popover tokens={t} align=\"left\" trigger={(_, toggle) => (\n <button type=\"button\" onClick={toggle} style={iconButton(t, selected.length > 0)}\n aria-label={`Filter ${column.header}`} title=\"Filter\">{selected.length ? `▾${selected.length}` : \"▾\"}</button>\n )}>\n {() => (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n <input value={q} onChange={(e) => setQ(e.target.value)} placeholder=\"Find value…\" style={controlStyle(t)} />\n <div style={{ maxHeight: 200, overflow: \"auto\", display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n {shown.length === 0 && <span style={{ color: t.colors.textTertiary }}>No values</span>}\n {shown.map((o) => (\n <label key={String(o.value)} style={{ display: \"flex\", alignItems: \"center\", gap: 6, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={isOn(o.value)} onChange={() =>\n setSelected(isOn(o.value) ? selected.filter((s) => String(s) !== String(o.value)) : [...selected, o.value])\n } />\n <span style={{ flex: 1 }}>{o.label}</span>\n {o.count > 0 && <span style={{ color: t.colors.textTertiary }}>{o.count}</span>}\n </label>\n ))}\n </div>\n {selected.length > 0 && (\n <button type=\"button\" onClick={clear} style={{ ...controlStyle(t), cursor: \"pointer\" }}>Clear</button>\n )}\n </div>\n )}\n </Popover>\n );\n};\n\nconst DATE_TOKENS = [\"TODAY\", \"YESTERDAY\", \"LAST_SEVEN_DAYS\", \"LAST_THIRTY_DAYS\", \"THIS_WEEK\", \"THIS_MONTH\", \"THIS_YEAR\"];\n\nconst DefaultWidgetFilter: React.FC<WidgetFilterSlotArgs> = ({ filters, addFilter, removeFilter, clear, fields, tokens: t }) => {\n const [field, setField] = useState(\"\");\n const [operator, setOperator] = useState(\"\");\n const [value, setValue] = useState(\"\");\n const [value2, setValue2] = useState(\"\");\n const current = fields.find((f) => f.field === field) ?? fields[0];\n const op = operator && current?.operators.includes(operator) ? operator : current?.operators[0] ?? \"IN\";\n const valueless = op === \"EMPTY\" || op === \"NOT_EMPTY\";\n\n const submit = (close: () => void) => {\n if (!current) return;\n let v: any;\n if (valueless) v = undefined;\n else if (op === \"BETWEEN\") { if (!value || !value2) return; v = [value, value2]; }\n else if (op === \"DATE_IS\") v = value || \"TODAY\";\n else if (op === \"IN\" || op === \"NOT_IN\") {\n v = value.split(\",\").map((s) => s.trim()).filter(Boolean);\n if (!v.length) return;\n } else { if (!value) return; v = value; }\n if (op === \"DATE_IS\" && !resolveDateToken(v)) return;\n addFilter({ field: current.field, operator: op as any, value: v });\n setValue(\"\"); setValue2(\"\"); close();\n };\n\n const inputType = current?.kind === \"number\" ? \"number\" : current?.kind === \"date\" ? \"date\" : \"text\";\n\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, flexWrap: \"wrap\" }}>\n {filters.map((f, i) => (\n <span key={i} style={{\n display: \"inline-flex\", alignItems: \"center\", gap: 4,\n padding: `${t.surfaces.badge.paddingY} ${t.surfaces.badge.paddingX}`,\n borderRadius: t.surfaces.badge.radius, fontSize: t.surfaces.badge.fontSize,\n background: t.colors.primaryLight, color: t.colors.primary, fontFamily: t.fontFamily,\n }}>\n {describeWidgetFilter(f)}\n <button type=\"button\" onClick={() => removeFilter(i)} aria-label=\"Remove filter\"\n style={{ ...iconButton(t, true), fontSize: 11 }}>×</button>\n </span>\n ))}\n {filters.length > 1 && (\n <button type=\"button\" onClick={clear} style={{ ...iconButton(t, false), fontSize: t.typography.caption.fontSize }}>\n Clear\n </button>\n )}\n {fields.length > 0 && (\n <Popover tokens={t} trigger={(_, toggle) => (\n <button type=\"button\" onClick={toggle} style={{ ...controlStyle(t), cursor: \"pointer\" }}>\n Filter{filters.length ? ` (${filters.length})` : \"\"}\n </button>\n )}>\n {(close) => (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n <select value={current?.field ?? \"\"} onChange={(e) => { setField(e.target.value); setOperator(\"\"); }} style={controlStyle(t)}>\n {fields.map((f) => <option key={f.field} value={f.field}>{f.label}</option>)}\n </select>\n <select value={op} onChange={(e) => setOperator(e.target.value)} style={controlStyle(t)}>\n {current?.operators.map((o) => <option key={o} value={o}>{OPERATOR_LABELS[o] ?? o}</option>)}\n </select>\n {op === \"DATE_IS\" ? (\n <select value={value || \"TODAY\"} onChange={(e) => setValue(e.target.value)} style={controlStyle(t)}>\n {DATE_TOKENS.map((d) => <option key={d} value={d}>{d.toLowerCase().replace(/_/g, \" \")}</option>)}\n </select>\n ) : !valueless && (\n <>\n <input value={value} onChange={(e) => setValue(e.target.value)} type={inputType}\n placeholder={op === \"IN\" || op === \"NOT_IN\" ? \"Values, comma separated\" : \"Value\"}\n onKeyDown={(e) => { if (e.key === \"Enter\") submit(close); }} style={controlStyle(t)} />\n {op === \"BETWEEN\" && (\n <input value={value2} onChange={(e) => setValue2(e.target.value)} type={inputType}\n placeholder=\"To\" style={controlStyle(t)} />\n )}\n </>\n )}\n <button type=\"button\" onClick={() => submit(close)} style={{\n ...controlStyle(t), cursor: \"pointer\", background: t.colors.primary,\n color: t.colors.onAccent, borderColor: t.colors.primary,\n }}>Apply</button>\n </div>\n )}\n </Popover>\n )}\n </div>\n );\n};\n","// Pure value/format helpers. Mirror Angular prefixUnits / suffixUnits /\n// formatAmountValue — ported verbatim from ZAI-Dashboard.\n\nexport const PREFIX_UNITS: Record<string, string> = {\n \"US Dollar\": \"USD\", \"Dollar Symbol\": \"$\", \"Indian Rupee\": \"Rs\",\n \"Euro\": \"EUR\", \"Euro Symbol\": \"€\", \"British Pound\": \"GBP\",\n \"Pound Symbol\": \"£\", \"Japanese Yen\": \"JPY\", \"Yen Symbol\": \"¥\",\n \"Canadian Dollar\": \"CAD\", \"Australian Dollar\": \"AUD\",\n};\n\nexport const SUFFIX_UNITS: Record<string, string> = {\n \"Kilogram\": \"kg\", \"Gram\": \"g\", \"Milligram\": \"mg\", \"Meter\": \"m\",\n \"Centimeter\": \"cm\", \"Kilometer\": \"km\", \"Inch\": \"in\", \"Foot\": \"ft\",\n \"Yard\": \"yd\", \"Liter\": \"L\", \"Milliliter\": \"mL\", \"Cubic Meter\": \"m³\",\n \"Gallon\": \"gal\", \"Quart\": \"qt\", \"Pint\": \"pt\", \"Fluid Ounce\": \"fl oz\",\n \"Square Meter\": \"m²\", \"Square Kilometer\": \"km²\", \"Square Centimeter\": \"cm²\",\n \"Square Millimeter\": \"mm²\", \"Hectare\": \"ha\", \"Square Foot\": \"ft²\",\n \"Square Yard\": \"yd²\", \"Acre\": \"acres\", \"Celsius\": \"°C\", \"Fahrenheit\": \"°F\",\n \"Kelvin\": \"K\", \"Second\": \"s\", \"Minute\": \"min\", \"Hour\": \"h\",\n \"Day\": \"days\", \"Week\": \"weeks\", \"Month\": \"months\", \"Year\": \"years\",\n \"Percent\": \"%\", \"Units\": \"units\", \"Pieces\": \"pcs\", \"Items\": \"items\",\n \"Byte\": \"B\", \"Kilobyte\": \"KB\", \"Megabyte\": \"MB\", \"Gigabyte\": \"GB\",\n \"Terabyte\": \"TB\", \"Bits Per Second\": \"bps\", \"Kilobits Per Second\": \"kbps\",\n \"Megabits Per Second\": \"Mbps\", \"Gigabits Per Second\": \"Gbps\",\n \"Degree\": \"°\", \"Radian\": \"rad\", \"Gradian\": \"grad\", \"Watt\": \"W\",\n \"Kilowatt\": \"kW\", \"Megawatt\": \"MW\", \"Joule\": \"J\", \"Kilojoule\": \"kJ\",\n \"Calorie\": \"cal\", \"Kilocalorie\": \"kcal\", \"Per Hour\": \"per h\",\n \"Per Day\": \"per d\", \"Per Week\": \"per wk\", \"Per Month\": \"per mo\",\n \"Per Year\": \"per yr\",\n};\n\n/** Mirrors Angular formatAmountValue() from dashboards.utils */\nexport function formatAmountValue(\n value: number,\n suffix: string = \"Rupees\",\n precision: number = 0\n): string {\n if (value === null || value === undefined || isNaN(value)) return \"\";\n if (!precision && precision !== 0) precision = 0;\n\n let formattedValue: number;\n let unit = \"\";\n switch (suffix) {\n case \"Lakhs\": formattedValue = value / 1e5; unit = \" Lac\"; break;\n case \"Crores\": formattedValue = value / 1e7; unit = \" Cr\"; break;\n case \"Millions\": formattedValue = value / 1e6; unit = \" M\"; break;\n default: formattedValue = value; break;\n }\n return (\n Number(formattedValue.toFixed(precision)).toLocaleString(\"en-IN\", {\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }) + unit\n );\n}\n\nexport function toNum(v: any): number | null {\n if (v === null || v === undefined || v === \"\") return null;\n const n = typeof v === \"number\" ? v : Number(v);\n return Number.isNaN(n) ? null : n;\n}\n\n/** Compact axis/label formatting: 1.2K, 3.4M, 1.1B. */\nexport function formatCompact(value: any): string {\n const n = toNum(value);\n if (n == null) return String(value ?? \"\");\n const abs = Math.abs(n);\n if (abs >= 1e9) return (n / 1e9).toFixed(1).replace(/\\.0$/, \"\") + \"B\";\n if (abs >= 1e6) return (n / 1e6).toFixed(1).replace(/\\.0$/, \"\") + \"M\";\n if (abs >= 1e3) return (n / 1e3).toFixed(1).replace(/\\.0$/, \"\") + \"K\";\n return String(n);\n}\n","import { useMemo } from \"react\";\nimport { PREFIX_UNITS, SUFFIX_UNITS, formatAmountValue, toNum } from \"../transforms/formatters\";\nimport type { BadgeTone, KpiContentVM, KpiTemplateId } from \"../core/kpiTypes\";\n\nconst VALID_TEMPLATES: KpiTemplateId[] = [\n \"standard\", \"trend\", \"comparison\", \"progress\",\n \"financial\", \"status\", \"chart\", \"hero_chart\", \"icon\",\n];\n\nexport interface UseKpiContentsArgs {\n contents: any[];\n rows: any[];\n cardTemplate?: KpiTemplateId;\n /** Externally-fetched series keyed by content index (e.g. a history-form time series). */\n externalSeriesByIndex?: Record<number, number[]>;\n /** Fallback icon colour when a content item does not set one. */\n defaultIconColor?: string;\n dateFormatter?: (value: string, format: string) => string | null;\n}\n\n/**\n * Resolves raw KPI config + fetched rows into per-item view-models.\n *\n * The value/target/format resolution (the \"00\"→0 normalization, AMOUNT/DATE/precision\n * branches, target truthy resolution, prefix/suffix maps) is ported verbatim from the\n * ZAI-Dashboard KPI card so numbers match the Angular original exactly.\n */\nexport function useKpiContents({\n contents, rows, cardTemplate = \"standard\",\n externalSeriesByIndex, defaultIconColor = \"#7b8499\", dateFormatter,\n}: UseKpiContentsArgs): KpiContentVM[] {\n return useMemo(() => {\n if (!contents?.length) return [];\n const row = rows?.[0];\n\n return contents.map((content: any, i: number): KpiContentVM => {\n // ── resolve value ──\n const rawValRaw = row?.[content.dataPoint];\n let value: any =\n (row != null && rawValRaw != null && rawValRaw !== \"\") ? rawValRaw : content.defaultVale;\n\n if (typeof value === \"string\" && value.trim() !== \"\" && !isNaN(Number(value))) {\n value = Number(value);\n }\n\n const rawValue = toNum(value);\n\n if (content.dataFormat === \"AMOUNT\" && typeof value === \"number\" && !isNaN(value)) {\n value = formatAmountValue(value, content.amountSuffix || \"Rupees\", content.precision ?? 2);\n } else if (content.dataFormat === \"DATE\" && value != null && value !== \"\" && dateFormatter) {\n const formatted = dateFormatter(String(value), content.dateFormat || \"dd/MM/yyyy\");\n if (formatted) value = formatted;\n } else if (\n content.precision != null && content.precision !== \"\" &&\n typeof value === \"number\" && !isNaN(value)\n ) {\n value = (Math.round(value * 100) / 100).toFixed(content.precision);\n }\n\n // ── target (verbatim truthy check) ──\n const target: any = (row && row[content.targetPoint]) ? row[content.targetPoint] : \"\";\n const rawTarget = toNum(target);\n\n const prefix = PREFIX_UNITS[content.unit] || \"\";\n const suffix = SUFFIX_UNITS[content.unit] || \"\";\n\n const template: KpiTemplateId = VALID_TEMPLATES.includes(content.template)\n ? content.template\n : (VALID_TEMPLATES.includes(cardTemplate) ? cardTemplate : \"standard\");\n\n // ── delta (trend / financial / hero_chart) ──\n let delta: KpiContentVM[\"delta\"];\n if (template === \"trend\" || template === \"financial\" || template === \"hero_chart\") {\n const deltaSource = content.deltaSource || \"target\";\n let base: number | null =\n deltaSource === \"datapoint\" && content.deltaPoint\n ? toNum(row?.[content.deltaPoint])\n : rawTarget;\n if (rawValue != null && base != null) {\n const mode = content.deltaMode === \"absolute\" ? \"absolute\" : \"percent\";\n const diff = rawValue - base;\n const dv = mode === \"percent\" ? (base !== 0 ? (diff / base) * 100 : 0) : diff;\n const positive = content.invertColors ? diff < 0 : diff >= 0;\n delta = { value: dv, mode, isPositive: positive };\n }\n }\n\n // ── progress (progress / comparison) ──\n let progress: KpiContentVM[\"progress\"];\n if (template === \"progress\" || template === \"comparison\") {\n let max: number | null = null;\n if (template === \"comparison\") max = rawTarget;\n else if (content.maxSource === \"datapoint\" && content.maxPoint) max = toNum(row?.[content.maxPoint]);\n else max = toNum(content.progressMax);\n\n progress = (rawValue != null && max != null && max > 0)\n ? { ratio: Math.max(0, Math.min(1, rawValue / max)), max }\n : { ratio: 0, max: max ?? 0 };\n }\n\n // ── status ──\n let status: KpiContentVM[\"status\"];\n if (template === \"status\") {\n const map = content.statusMap || {};\n const key = String(rawValRaw ?? value ?? \"\");\n const entry = map[key];\n const fallbackTone: BadgeTone = content.statusFallbackTone || \"neutral\";\n status = entry\n ? { label: entry.label || key, tone: (entry.tone as BadgeTone) || fallbackTone, description: entry.description || undefined }\n : { label: key, tone: fallbackTone };\n }\n\n // ── series (chart / trend / hero_chart) ──\n let series: number[] | undefined;\n const externalSeries = externalSeriesByIndex?.[i];\n if (content.seriesSource?.mode === \"timeseries\") {\n // Time-series mode: series comes entirely from the external fetch, never\n // from row fields. Empty => not loaded yet, not \"fall back to fields\".\n series = externalSeries?.length ? externalSeries : undefined;\n } else if (template === \"chart\" || template === \"trend\" || template === \"hero_chart\") {\n if (Array.isArray(content.seriesPoints) && content.seriesPoints.length) {\n series = content.seriesPoints\n .map((p: string) => toNum(row?.[p]))\n .filter((n: number | null): n is number => n != null);\n } else if (content.seriesPoint && Array.isArray(row?.[content.seriesPoint])) {\n series = row[content.seriesPoint]\n .map((p: any) => toNum(p))\n .filter((n: number | null): n is number => n != null);\n }\n if (series && series.length === 0) series = undefined;\n }\n\n return {\n template,\n title: content.title || \"\",\n subtitle: content.subtitle || \"\",\n value, rawValue, prefix, suffix, target, rawTarget,\n valueColor: content.valueColor || undefined,\n icon: content.icon || null,\n iconColor: content.iconColor || defaultIconColor,\n iconSize: content.iconSize || \"48\",\n textAlign: content.textAllignment || \"left\",\n iconAlign: content.iconAllignment || \"right\",\n isLast: i === contents.length - 1,\n delta, progress, status, series,\n raw: row,\n config: content,\n };\n });\n }, [contents, rows, cardTemplate, externalSeriesByIndex, defaultIconColor, dateFormatter]);\n}\n","import type { WidgetStyleOverrides } from \"./types\";\n\n/**\n * The chrome envelope every Zvolv widget config carries, independent of type.\n * Mirrors the keys the ZAI-Dashboard widgets read off `parsedConfig`.\n */\nexport interface WidgetChromeConfig {\n title?: string;\n description?: string;\n hideHeader?: boolean;\n hideTitle?: boolean;\n showTitle?: boolean;\n headerIcon?: string;\n bgColor?: string;\n color?: string;\n outlineColor?: string;\n outlineWidth?: string;\n showHighlight?: boolean;\n /** Text shown when the widget is wired but returned no rows. */\n customMessage?: string;\n enableFullScreen?: boolean;\n enableRefreshButtons?: boolean;\n disableExport?: boolean;\n style?: WidgetStyleOverrides | null;\n template?: string;\n drillDown?: any;\n drilldown?: any;\n /** Show the header search box. */\n showSearchbar?: boolean;\n /** Show the widget-level filter control. */\n showWidgetFilter?: boolean;\n searchPlaceholder?: string;\n /** Older dashboards nest the toggles here; top-level keys win. */\n styling?: { showSearchbar?: boolean; showWidgetFilter?: boolean; showColumnFilter?: boolean; [k: string]: any };\n}\n\nexport interface ResolvedChromeConfig {\n title?: string;\n description?: string;\n showHeader: boolean;\n headerIcon?: string;\n emptyMessage?: string;\n showFullScreen: boolean;\n showRefresh: boolean;\n showExport: boolean;\n bgColor?: string;\n accentColor?: string;\n outlineColor?: string;\n outlineWidth?: string;\n showHighlight: boolean;\n}\n\n/**\n * Normalizes the chrome envelope. `hideHeader`/`hideTitle`/`showTitle` are three\n * spellings of the same idea across different widget generations — an explicit\n * hide always wins, and `showTitle === false` also suppresses the header.\n */\nexport function resolveChromeConfig(config: WidgetChromeConfig = {}): ResolvedChromeConfig {\n const hidden = config.hideHeader === true || config.hideTitle === true || config.showTitle === false;\n return {\n title: config.title,\n description: config.description,\n showHeader: !hidden,\n headerIcon: config.headerIcon,\n emptyMessage: config.customMessage,\n showFullScreen: config.enableFullScreen === true,\n showRefresh: config.enableRefreshButtons === true,\n showExport: config.disableExport !== true,\n bgColor: config.bgColor,\n accentColor: config.color,\n outlineColor: config.outlineColor,\n outlineWidth: config.outlineWidth,\n showHighlight: config.showHighlight === true,\n };\n}\n\n/** Drill-down target, however the config spells it. */\nexport function resolveDrillDown(config: WidgetChromeConfig = {}): any {\n return config.drillDown ?? config.drilldown ?? null;\n}\n","import React, { useMemo } from \"react\";\nimport { useInteractiveWidgetData, type InteractiveWidgetProps } from \"./interactive\";\nimport { useKpiContents } from \"../react/useKpiContents\";\nimport { WidgetShell } from \"./WidgetShell\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport { resolveWidgetDefaults } from \"../theme/tokens\";\nimport { resolveChromeConfig } from \"../core/chrome\";\nimport { useTemplateOverride } from \"../templates/registry\";\nimport { KPI_DEFAULT_TEMPLATES } from \"../templates/kpiDefaults\";\nimport { parseConfig } from \"../core/config\";\nimport type { KpiTemplateId } from \"../core/kpiTypes\";\n\nexport interface KpiWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n title?: string;\n description?: string;\n emptyMessage?: string;\n unconfiguredMessage?: string;\n className?: string;\n style?: React.CSSProperties;\n onItemClick?: (vm: any, index: number) => void;\n}\n\nconst WIDGET_TYPE = \"KPI_CARD\";\n\nexport const KpiWidget: React.FC<KpiWidgetProps> = (props) => {\n const { title, description, emptyMessage, unconfiguredMessage, className, style, onItemClick, ...dataArgs } = props;\n\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType: WIDGET_TYPE });\n const { data, config, tokens: t } = ix;\n\n const chrome = resolveChromeConfig(config);\n\n\n // Platform payloads keep items in cardConfig.contents (KPI_CARD / KPI_CARD_V2);\n // older configs put them at the root.\n const contents = config?.cardConfig?.contents ?? config?.contents ?? [];\n const cardTemplate = (config?.cardConfig?.template ?? config?.template ?? \"standard\") as KpiTemplateId;\n const vms = useKpiContents({ contents, rows: data.rows, cardTemplate });\n\n // A KPI with configured contents but no matching row still has something to\n // render (zeros/defaults), so only treat a truly contentless card as empty.\n const state = data.state === \"empty\" && contents.length > 0 ? \"ready\" : data.state;\n\n return (\n <WidgetShell\n widgetType={WIDGET_TYPE}\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={state}\n error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className}\n style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 14, height: \"100%\" }}>\n {vms.map((vm, i) => (\n <KpiItem key={i} vm={vm} index={i} onClick={onItemClick} />\n ))}\n </div>\n </WidgetShell>\n );\n};\n\nconst KpiItem: React.FC<{ vm: any; index: number; onClick?: (vm: any, i: number) => void }> = ({\n vm, index, onClick,\n}) => {\n const override = useTemplateOverride(WIDGET_TYPE, vm.template);\n const Template = override ?? (KPI_DEFAULT_TEMPLATES as any)[vm.template] ?? KPI_DEFAULT_TEMPLATES.standard;\n return (\n <div\n onClick={onClick ? () => onClick(vm, index) : undefined}\n style={onClick ? { cursor: \"pointer\" } : undefined}\n >\n <Template vm={vm} index={index} />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useInteractiveWidgetData, type InteractiveWidgetProps } from \"./interactive\";\nimport { WidgetShell } from \"./WidgetShell\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport { resolveWidgetDefaults } from \"../theme/tokens\";\nimport { resolveChromeConfig } from \"../core/chrome\";\nimport { useTemplateOverride } from \"../templates/registry\";\nimport { parseConfig } from \"../core/config\";\nimport type { SeriesConfig, WidgetDataResult } from \"../core/types\";\n\nexport interface ChartRenderArgs {\n rows: any[];\n xKey: string;\n series: SeriesConfig[];\n /** Palette colour for series index i, honouring an explicit series.color. */\n colorFor: (index: number, series?: SeriesConfig) => string;\n /** Maps an axis value through resolved user labels. */\n toLabel: (value: any) => any;\n template: string;\n config: any;\n tokens: ReturnType<typeof useTokens>;\n meta: WidgetDataResult[\"meta\"];\n}\n\nexport interface ChartWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n widgetType: string;\n title?: string;\n description?: string;\n emptyMessage?: string;\n unconfiguredMessage?: string;\n className?: string;\n style?: React.CSSProperties;\n /**\n * Claude's UI. Receives fully-resolved rows + axis keys + palette and returns\n * the chart. When omitted, a registered template override is used; if there is\n * none either, the widget renders a minimal built-in fallback.\n */\n render?: (args: ChartRenderArgs) => React.ReactNode;\n children?: (args: ChartRenderArgs) => React.ReactNode;\n}\n\n/**\n * Data-complete chart container. It resolves the Zvolv query, rows, series,\n * axis key, palette and user labels, then hands them to a renderer. It draws\n * no marks itself — the visual layer is entirely the caller's.\n */\nexport const ChartWidget: React.FC<ChartWidgetProps> = (props) => {\n const {\n widgetType, title, description, emptyMessage, unconfiguredMessage,\n className, style, render, children, ...dataArgs\n } = props;\n\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType });\n const { data, config, tokens: t } = ix;\n\n const colorFor = useMemo(() => {\n const palette = t.colors.charts.palette;\n return (index: number, s?: SeriesConfig) => {\n if (s?.color) return s.color;\n // A single-series chart uses the brand accent; multi-series walks the palette.\n if (data.meta.series.length <= 1) return t.colors.primary;\n return palette[index % palette.length];\n };\n }, [t, data.meta.series.length]);\n\n const chrome = resolveChromeConfig(config);\n const override = useTemplateOverride(widgetType, config?.template || \"standard\");\n\n const args: ChartRenderArgs = {\n rows: data.rows,\n xKey: data.meta.xKey,\n series: data.meta.series,\n colorFor,\n toLabel: data.meta.toLabel,\n template: config?.template || \"standard\",\n config,\n tokens: t,\n meta: data.meta,\n };\n\n const renderer = render ?? children;\n let body: React.ReactNode;\n if (renderer) body = renderer(args);\n else if (override) body = React.createElement(override, args as any);\n else body = <FallbackBars {...args} />;\n\n return (\n <WidgetShell\n widgetType={widgetType}\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state}\n error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className}\n style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {body}\n </WidgetShell>\n );\n};\n\n/** Minimal dependency-free bars, so an unstyled widget still shows its data. */\nconst FallbackBars: React.FC<ChartRenderArgs> = ({ rows, xKey, series, colorFor, toLabel, tokens }) => {\n const key = series[0]?.valueField ?? \"value\";\n const max = Math.max(...rows.map((r) => Number(r[key]) || 0), 1);\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8, height: \"100%\", overflow: \"auto\" }}>\n {rows.slice(0, 20).map((row, i) => (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <div style={{\n width: 110, flexShrink: 0, fontSize: 12, color: tokens.colors.textSecondary,\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n }}>{String(toLabel(row[xKey]) ?? \"\")}</div>\n <div style={{ flex: 1, height: 10, background: tokens.colors.charts.grid, borderRadius: 999 }}>\n <div style={{\n width: `${((Number(row[key]) || 0) / max) * 100}%`, height: \"100%\",\n background: colorFor(0, series[0]), borderRadius: 999,\n }} />\n </div>\n <div style={{\n width: 60, textAlign: \"right\", fontSize: 12,\n fontFamily: tokens.monoFontFamily, color: tokens.colors.textPrimary,\n }}>{row[key]}</div>\n </div>\n ))}\n </div>\n );\n};\n\nexport const BarChartWidget: React.FC<Omit<ChartWidgetProps, \"widgetType\">> = (p) => (\n <ChartWidget {...p} widgetType=\"BAR_CHART\" />\n);\nexport const LineChartWidget: React.FC<Omit<ChartWidgetProps, \"widgetType\">> = (p) => (\n <ChartWidget {...p} widgetType=\"LINE_CHART\" />\n);\nexport const PieChartWidget: React.FC<Omit<ChartWidgetProps, \"widgetType\">> = (p) => (\n <ChartWidget {...p} widgetType=\"PIE_CHART\" />\n);\n","import React, { useMemo } from \"react\";\nimport { ChartWidget, type ChartWidgetProps, type ChartRenderArgs } from \"./ChartWidget\";\nimport { useInteractiveWidgetData, type InteractiveWidgetProps } from \"./interactive\";\nimport { WidgetShell } from \"./WidgetShell\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport { resolveWidgetDefaults } from \"../theme/tokens\";\nimport { resolveChromeConfig } from \"../core/chrome\";\nimport { parseConfig } from \"../core/config\";\nimport { toNum } from \"../transforms/formatters\";\nimport { useTemplateOverride } from \"../templates/registry\";\n\ntype ChartProps = Omit<ChartWidgetProps, \"widgetType\">;\n\n/**\n * Cartesian + categorical charts. Each is ChartWidget with its type bound, so a\n * `render` prop or a registered template override supplies all the marks.\n */\nexport const BarChartWidget: React.FC<ChartProps> = (p) => <ChartWidget {...p} widgetType=\"BAR_CHART\" />;\nexport const LineChartWidget: React.FC<ChartProps> = (p) => <ChartWidget {...p} widgetType=\"LINE_CHART\" />;\nexport const AreaChartWidget: React.FC<ChartProps> = (p) => <ChartWidget {...p} widgetType=\"AREA_CHART\" />;\nexport const PieChartWidget: React.FC<ChartProps> = (p) => <ChartWidget {...p} widgetType=\"PIE_CHART\" />;\nexport const DoughnutChartWidget: React.FC<ChartProps> = (p) => <ChartWidget {...p} widgetType=\"DOUGHNUT_CHART\" />;\nexport const ScatterChartWidget: React.FC<ChartProps> = (p) => <ChartWidget {...p} widgetType=\"SCATTER_CHART\" />;\n\n// ── Ranking bar ──────────────────────────────────────────────────────────────\n\nexport interface RankingRow {\n rank: number;\n label: any;\n value: number;\n /** value / max, clamped 0..1 — for bar widths. */\n ratio: number;\n raw: any;\n}\n\nexport interface RankingRenderArgs extends Omit<ChartRenderArgs, \"rows\"> {\n rows: RankingRow[];\n max: number;\n}\n\nexport interface RankingBarWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n title?: string; description?: string;\n emptyMessage?: string; unconfiguredMessage?: string;\n className?: string; style?: React.CSSProperties;\n render?: (args: RankingRenderArgs) => React.ReactNode;\n}\n\n/**\n * Ranked list of categories. Sorting, ranking and ratio math happen here; the\n * caller renders. `config.ranking` supplies { limit, order, labelField, valueField }.\n */\nexport const RankingBarWidget: React.FC<RankingBarWidgetProps> = (props) => {\n const { title, description, emptyMessage, unconfiguredMessage, className, style, render, ...dataArgs } = props;\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType: \"RANKING_BAR\" });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n\n const ranking = config?.ranking ?? {};\n const labelField = ranking.labelField ?? data.meta.xKey;\n const valueField = ranking.valueField ?? data.meta.series[0]?.valueField ?? \"value\";\n const order: \"asc\" | \"desc\" = ranking.order === \"asc\" ? \"asc\" : \"desc\";\n const limit = toNum(ranking.limit) ?? 10;\n\n const { rows, max } = useMemo(() => {\n const mapped = data.rows.map((r) => ({\n label: r[labelField], value: toNum(r[valueField]) ?? 0, raw: r,\n }));\n mapped.sort((a, b) => (order === \"asc\" ? a.value - b.value : b.value - a.value));\n const limited = mapped.slice(0, limit);\n const peak = Math.max(...limited.map((m) => Math.abs(m.value)), 1);\n return {\n max: peak,\n rows: limited.map((m, i) => ({\n ...m, rank: i + 1, ratio: Math.max(0, Math.min(1, Math.abs(m.value) / peak)),\n })),\n };\n }, [data.rows, labelField, valueField, order, limit]);\n\n const colorFor = (i: number) => t.colors.charts.palette[i % t.colors.charts.palette.length];\n const override = useTemplateOverride(\"RANKING_BAR\", config?.template || \"standard\");\n\n const args: RankingRenderArgs = {\n rows, max, xKey: labelField, series: data.meta.series,\n colorFor: (i) => colorFor(i), toLabel: data.meta.toLabel,\n template: config?.template || \"standard\", config, tokens: t, meta: data.meta,\n };\n\n return (\n <WidgetShell\n widgetType=\"RANKING_BAR\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args)\n : override ? React.createElement(override, args as any)\n : <DefaultRanking {...args} />}\n </WidgetShell>\n );\n};\n\nconst DefaultRanking: React.FC<RankingRenderArgs> = ({ rows, toLabel, tokens: t }) => (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 10, height: \"100%\", overflow: \"auto\" }}>\n {rows.map((r) => (\n <div key={r.rank} style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <span style={{ width: 20, fontSize: 12, color: t.colors.textTertiary, fontFamily: t.monoFontFamily }}>\n {r.rank}\n </span>\n <span style={{\n width: 120, fontSize: 12, color: t.colors.textSecondary,\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n }}>{String(toLabel(r.label) ?? \"\")}</span>\n <div style={{ flex: 1, height: 8, background: t.colors.charts.grid, borderRadius: 999 }}>\n <div style={{ width: `${r.ratio * 100}%`, height: \"100%\", background: t.colors.primary, borderRadius: 999 }} />\n </div>\n <span style={{ width: 56, textAlign: \"right\", fontSize: 12, fontFamily: t.monoFontFamily }}>\n {r.value}\n </span>\n </div>\n ))}\n </div>\n);\n\n// ── Gauge meter ──────────────────────────────────────────────────────────────\n\nexport interface GaugeRenderArgs {\n value: number;\n min: number;\n max: number;\n /** (value - min) / (max - min), clamped 0..1. */\n ratio: number;\n /** Themed colour for the band the value falls in. */\n color: string;\n band: \"low\" | \"medium\" | \"high\";\n thresholds: { low: number; medium: number; high: number };\n config: any;\n tokens: ReturnType<typeof useTokens>;\n rows: any[];\n}\n\nexport interface GaugeMeterWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n title?: string; description?: string;\n emptyMessage?: string; unconfiguredMessage?: string;\n className?: string; style?: React.CSSProperties;\n render?: (args: GaugeRenderArgs) => React.ReactNode;\n}\n\n/** Single-value gauge. Band resolution is data logic; the dial is yours. */\nexport const GaugeMeterWidget: React.FC<GaugeMeterWidgetProps> = (props) => {\n const { title, description, emptyMessage, unconfiguredMessage, className, style, render, ...dataArgs } = props;\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType: \"GAUGE_METER\" });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n const gauge = config?.gauge ?? {};\n\n // Platform shape: gauge.header.{current,minimum,maximum} name row fields,\n // gauge.values.{current,minimum,maximum} are static fallbacks, rangeParams[] bands.\n const row0 = data.rows[0];\n const fromRow = (field?: string) => (field ? toNum(row0?.[field]) : null);\n const valueField = gauge.header?.current ?? gauge.valueField ?? data.meta.series[0]?.valueField ?? \"value\";\n const value = toNum(row0?.[valueField]) ?? toNum(gauge.values?.current) ?? 0;\n const min = fromRow(gauge.header?.minimum) ?? toNum(gauge.values?.minimum) ?? toNum(gauge.min) ?? 0;\n const max = fromRow(gauge.header?.maximum) ?? toNum(gauge.values?.maximum) ?? toNum(gauge.max) ?? 100;\n const span = max - min || 1;\n const ratio = Math.max(0, Math.min(1, (value - min) / span));\n\n const bands: any[] = Array.isArray(gauge.rangeParams) ? [...gauge.rangeParams].sort((a, b) => toNum(a.start)! - toNum(b.start)!) : [];\n const thresholds = {\n low: toNum(bands[0]?.end) ?? toNum(gauge.thresholds?.low) ?? min + span * 0.33,\n medium: toNum(bands[1]?.end) ?? toNum(gauge.thresholds?.medium) ?? min + span * 0.66,\n high: toNum(bands[2]?.end) ?? toNum(gauge.thresholds?.high) ?? max,\n };\n const band: \"low\" | \"medium\" | \"high\" =\n value <= thresholds.low ? \"low\" : value <= thresholds.medium ? \"medium\" : \"high\";\n const color = band === \"low\" ? t.colors.error : band === \"medium\" ? t.colors.warning : t.colors.success;\n\n const args: GaugeRenderArgs = { value, min, max, ratio, color, band, thresholds, config, tokens: t, rows: data.rows };\n\n return (\n <WidgetShell\n widgetType=\"GAUGE_METER\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args) : <DefaultGauge {...args} />}\n </WidgetShell>\n );\n};\n\nconst DefaultGauge: React.FC<GaugeRenderArgs> = ({ value, ratio, color, tokens: t }) => {\n const R = 52, C = Math.PI * R; // half-circle arc length\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\" }}>\n <svg viewBox=\"0 0 140 78\" style={{ width: \"100%\", maxWidth: 220 }}>\n <path d=\"M 18 70 A 52 52 0 0 1 122 70\" fill=\"none\"\n stroke={t.colors.charts.grid} strokeWidth={12} strokeLinecap=\"round\" />\n <path d=\"M 18 70 A 52 52 0 0 1 122 70\" fill=\"none\"\n stroke={color} strokeWidth={12} strokeLinecap=\"round\"\n strokeDasharray={`${ratio * C} ${C}`} />\n </svg>\n <div style={{\n fontSize: t.typography.kpiValue.fontSize, fontWeight: t.typography.kpiValue.fontWeight,\n color: t.colors.textPrimary, marginTop: -14,\n }}>{value}</div>\n </div>\n );\n};\n\n// ── Heat map ─────────────────────────────────────────────────────────────────\n\nexport interface HeatCell {\n zone: any;\n count: number;\n /** Themed colour for the cell's threshold band. */\n color: string;\n band: \"low\" | \"medium\" | \"high\";\n breakdown: Record<string, any>;\n raw: any;\n}\n\nexport interface HeatMapRenderArgs {\n cells: HeatCell[];\n grid: { rows: number; cols: number };\n config: any;\n tokens: ReturnType<typeof useTokens>;\n}\n\nexport interface HeatMapWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n title?: string; description?: string;\n emptyMessage?: string; unconfiguredMessage?: string;\n className?: string; style?: React.CSSProperties;\n render?: (args: HeatMapRenderArgs) => React.ReactNode;\n}\n\n/**\n * Zone/count heat grid. Threshold banding is data logic; cell shape is yours.\n * `config.heatMap` supplies { grid, thresholds, dataMapping }.\n */\nexport const HeatMapWidget: React.FC<HeatMapWidgetProps> = (props) => {\n const { title, description, emptyMessage, unconfiguredMessage, className, style, render, ...dataArgs } = props;\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType: \"HEAT_MAP\" });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n const hm = config?.heatMap ?? {};\n const grid = { rows: hm.grid?.rows ?? 4, cols: hm.grid?.cols ?? 3 };\n const map = hm.dataMapping ?? {};\n const zoneField = map.zoneField || data.meta.xKey;\n const countField = map.countField || data.meta.series[0]?.valueField || \"value\";\n const breakdownFields: string[] = map.breakdownFields ?? [];\n\n const thresholds = {\n low: toNum(hm.thresholds?.low?.value) ?? 20,\n medium: toNum(hm.thresholds?.medium?.value) ?? 60,\n high: toNum(hm.thresholds?.high?.value) ?? 100,\n };\n\n const cells: HeatCell[] = useMemo(() => data.rows.map((row) => {\n const count = toNum(row[countField]) ?? 0;\n const band: \"low\" | \"medium\" | \"high\" =\n count <= thresholds.low ? \"low\" : count <= thresholds.medium ? \"medium\" : \"high\";\n // Explicit threshold colours win; otherwise fall back to the themed gauge ramp.\n const configured = hm.thresholds?.[band]?.color;\n const color = configured || (band === \"low\" ? t.colors.success : band === \"medium\" ? t.colors.warning : t.colors.error);\n const breakdown: Record<string, any> = {};\n breakdownFields.forEach((f) => { breakdown[f] = row[f]; });\n return { zone: row[zoneField], count, color, band, breakdown, raw: row };\n }), [data.rows, zoneField, countField, thresholds.low, thresholds.medium, hm.thresholds, breakdownFields, t]);\n\n const args: HeatMapRenderArgs = { cells, grid, config, tokens: t };\n\n return (\n <WidgetShell\n widgetType=\"HEAT_MAP\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args) : <DefaultHeatMap {...args} />}\n </WidgetShell>\n );\n};\n\nconst DefaultHeatMap: React.FC<HeatMapRenderArgs> = ({ cells, grid, tokens: t }) => (\n <div style={{\n display: \"grid\", gap: 8, height: \"100%\",\n gridTemplateColumns: `repeat(${grid.cols}, minmax(0, 1fr))`,\n }}>\n {cells.map((c, i) => (\n <div key={i} style={{\n background: `color-mix(in srgb, ${c.color} 18%, transparent)`,\n border: `1px solid color-mix(in srgb, ${c.color} 40%, transparent)`,\n borderRadius: t.surfaces.tile.radius, padding: 10,\n display: \"flex\", flexDirection: \"column\", justifyContent: \"space-between\", minHeight: 56,\n }}>\n <span style={{ fontSize: 11, color: t.colors.textSecondary }}>{String(c.zone ?? \"\")}</span>\n <span style={{ fontSize: 18, fontWeight: 650, color: c.color }}>{c.count}</span>\n </div>\n ))}\n </div>\n);\n","import type { ZvolvTokens } from \"./tokens\";\n\nexport type Tone = \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\" | \"primary\";\n\n/** Resolves a semantic tone to its themed colour. Never hardcode a status colour. */\nexport function toneColor(tokens: ZvolvTokens, tone: Tone = \"neutral\"): string {\n switch (tone) {\n case \"success\": return tokens.colors.success;\n case \"warning\": return tokens.colors.warning;\n case \"error\": return tokens.colors.error;\n case \"info\": return tokens.colors.info;\n case \"primary\": return tokens.colors.primary;\n default: return tokens.colors.textTertiary;\n }\n}\n\n/** A soft background derived from a tone, for pills and highlight bands. */\nexport function toneSurface(tokens: ZvolvTokens, tone: Tone = \"neutral\", pct = 12): string {\n return `color-mix(in srgb, ${toneColor(tokens, tone)} ${pct}%, transparent)`;\n}\n\n/**\n * Maps a free-text status string onto a tone. Zvolv status vocabularies vary by\n * workspace, so unknown values fall back to neutral rather than guessing.\n */\nexport function statusTone(status: any): Tone {\n const s = String(status ?? \"\").toLowerCase().trim();\n if (!s) return \"neutral\";\n if (/(complete|done|closed|approved|success|paid|active|yes|pass)/.test(s)) return \"success\";\n if (/(pending|progress|review|assigned|open|partial|hold)/.test(s)) return \"warning\";\n if (/(fail|reject|error|overdue|delay|cancel|breach|no)/.test(s)) return \"error\";\n if (/(new|draft|info|scheduled|upcoming)/.test(s)) return \"info\";\n return \"neutral\";\n}\n","import React, { useMemo } from \"react\";\nimport { useInteractiveWidgetData, type InteractiveWidgetProps } from \"./interactive\";\nimport { WidgetShell } from \"./WidgetShell\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport { resolveWidgetDefaults, type ZvolvTokens } from \"../theme/tokens\";\nimport { resolveChromeConfig } from \"../core/chrome\";\nimport { parseConfig } from \"../core/config\";\nimport { statusTone, toneColor, toneSurface } from \"../theme/tones\";\nimport { useTemplateOverride } from \"../templates/registry\";\n\n/**\n * One item in a collection widget, with the configured field mapping already\n * applied. Renderers read these named slots instead of guessing field names.\n */\nexport interface CollectionItem {\n id: string | number;\n title: any;\n subtitle?: any;\n description?: any;\n value?: any;\n image?: string;\n status?: { label: any; tone: ReturnType<typeof statusTone> };\n timestamp?: any;\n /** Extra configured fields, in config order, for detail rows. */\n fields: { label: string; value: any }[];\n raw: any;\n}\n\nexport interface CollectionRenderArgs {\n items: CollectionItem[];\n template: string;\n config: any;\n tokens: ZvolvTokens;\n toLabel: (v: any) => any;\n onItemClick?: (item: CollectionItem, index: number) => void;\n}\n\nexport interface CollectionWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n widgetType: string;\n title?: string;\n description?: string;\n emptyMessage?: string;\n unconfiguredMessage?: string;\n className?: string;\n style?: React.CSSProperties;\n onItemClick?: (item: CollectionItem, index: number) => void;\n render?: (args: CollectionRenderArgs) => React.ReactNode;\n}\n\n/** Reads a field mapping that may be spelled several ways across generations. */\nfunction pick(row: any, ...keys: (string | undefined)[]): any {\n for (const k of keys) {\n if (k && row?.[k] !== undefined && row?.[k] !== null && row?.[k] !== \"\") return row[k];\n }\n return undefined;\n}\n\n/** `{{field}}` substitution for banner title/meta templates. */\nfunction fill(template: string, row: any): string {\n return String(template).replace(/\\{\\{\\s*([^}]+?)\\s*\\}\\}/g, (_, k) => {\n const v = row?.[k];\n return v == null ? \"\" : String(v);\n });\n}\n\n/**\n * The item mapping for a collection widget, from whichever block its platform\n * config uses: CARDLIST `<template>Configuration`, `activityfeed`, `banner`,\n * or a gallery/carousel bound through `series[0]` (image = valueField).\n */\nexport function resolveCollectionMapping(config: any, series?: any[]): any {\n const tpl = String(config?.template ?? \"\").toLowerCase();\n const tplKey = tpl === \"statuslist\" ? \"statusListConfiguration\" : tpl ? `${tpl}Configuration` : \"\";\n const t = tplKey ? config?.[tplKey] : null;\n if (t) {\n return {\n ...t,\n titleField: t.name ?? t.title ?? t.titleField,\n subtitleField: t.subtitle ?? t.schedule,\n descriptionField: t.description ?? t.summaryField ?? t.headline ?? t.businessImpactField,\n valueField: t.value ?? t.metric ?? t.metricField,\n statusField: t.severityField ?? t.badge ?? t.categoryField ?? t.status,\n dateField: t.timestampField ?? t.dateField,\n };\n }\n const block = config?.cardConfiguration ?? config?.activityfeed ?? config?.banner ??\n config?.gallery ?? config?.gridCard ?? config?.carousel ?? config?.mapping;\n const s0 = Array.isArray(series) ? series[0] : null;\n const fromSeries = s0?.valueField && s0.valueField !== \"value\"\n ? { imageField: s0.valueField, titleField: s0.argumentField } : {};\n if (config?.banner) {\n const b = config.banner;\n return { ...b, statusField: b.severityField, dateField: b.timeField };\n }\n return { ...fromSeries, ...(block ?? config ?? {}) };\n}\n\n/**\n * Maps rows to CollectionItems using a config block. Field mapping lives here so\n * every collection widget resolves the same way and renderers stay presentational.\n */\nexport function useCollectionItems(rows: any[], mapping: any): CollectionItem[] {\n return useMemo(() => {\n const m = mapping ?? {};\n const detailFields: any[] = m.fields ?? m.dataConfs ?? [];\n return rows.map((row, i): CollectionItem => {\n const statusRaw = pick(row, m.statusField, m.status);\n return {\n id: row?.id ?? row?.submissionId ?? i,\n title: m.titleTemplate ? fill(m.titleTemplate, row) : pick(row, m.titleField, m.title, m.primaryField),\n subtitle: pick(row, m.subtitleField, m.subtitle, m.secondaryField),\n description: m.metaTemplate ? fill(m.metaTemplate, row)\n : Array.isArray(m.metaFields) && m.metaFields.length ? m.metaFields.map((f: string) => row?.[f]).filter((v: any) => v != null && v !== \"\").join(\" · \")\n : pick(row, m.descriptionField, m.description, m.bodyField),\n value: pick(row, m.valueField, m.value, m.countField),\n image: pick(row, m.imageField, m.image, m.thumbnailField),\n status: statusRaw !== undefined\n ? { label: statusRaw, tone: statusTone(statusRaw) }\n : undefined,\n timestamp: pick(row, m.dateField, m.timestampField, m.date),\n fields: detailFields\n .map((f: any) => {\n const key = f?.field ?? f?.masterfield ?? f?.key ?? f?.header;\n return { label: f?.label ?? f?.title ?? key, value: key ? row?.[key] : undefined };\n })\n .filter((f) => f.value !== undefined),\n raw: row,\n };\n });\n }, [rows, mapping]);\n}\n\n/**\n * Shared container for every list/card/gallery widget. Resolves rows into named\n * item slots; the visual arrangement is entirely the renderer's.\n */\nexport const CollectionWidget: React.FC<CollectionWidgetProps> = (props) => {\n const {\n widgetType, title, description, emptyMessage, unconfiguredMessage,\n className, style, onItemClick, render, ...dataArgs\n } = props;\n\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n\n // Each widget family nests its mapping under a different key; fall back to the\n // config root so a flat config still works.\n const mapping = useMemo(() => resolveCollectionMapping(config, data.meta.series), [config, data.meta.series]);\n\n const items = useCollectionItems(data.rows, mapping);\n const template = config?.template || \"standard\";\n const override = useTemplateOverride(widgetType, template);\n\n const args: CollectionRenderArgs = {\n items, template, config, tokens: t, toLabel: data.meta.toLabel, onItemClick,\n };\n\n return (\n <WidgetShell\n widgetType={widgetType}\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args)\n : override ? React.createElement(override, args as any)\n : <DefaultList {...args} />}\n </WidgetShell>\n );\n};\n\nconst DefaultList: React.FC<CollectionRenderArgs> = ({ items, tokens: t, onItemClick }) => (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: t.surfaces.tile.gap, height: \"100%\", overflow: \"auto\" }}>\n {items.map((item, i) => (\n <div key={item.id}\n onClick={onItemClick ? () => onItemClick(item, i) : undefined}\n style={{\n display: \"flex\", alignItems: \"center\", gap: 12,\n padding: t.surfaces.tile.padding, background: t.surfaces.tile.bg,\n border: `1px solid ${t.surfaces.tile.borderColor}`, borderRadius: t.surfaces.tile.radius,\n cursor: onItemClick ? \"pointer\" : undefined,\n }}>\n {item.image && (\n <img src={item.image} alt=\"\" style={{ width: 40, height: 40, borderRadius: 8, objectFit: \"cover\" }} />\n )}\n <div style={{ minWidth: 0, flex: 1 }}>\n <div style={{\n fontSize: t.typography.body.fontSize, fontWeight: 600, color: t.colors.textPrimary,\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n }}>{String(item.title ?? \"\")}</div>\n {item.subtitle != null && (\n <div style={{ fontSize: t.typography.caption.fontSize, color: t.colors.textSecondary }}>\n {String(item.subtitle)}\n </div>\n )}\n </div>\n {item.status && (\n <span style={{\n padding: `${t.surfaces.badge.paddingY} ${t.surfaces.badge.paddingX}`,\n borderRadius: t.surfaces.badge.radius, fontSize: t.surfaces.badge.fontSize,\n fontWeight: t.surfaces.badge.fontWeight,\n color: toneColor(t, item.status.tone), background: toneSurface(t, item.status.tone),\n }}>{String(item.status.label)}</span>\n )}\n {item.value != null && (\n <span style={{ fontFamily: t.monoFontFamily, fontSize: 13, color: t.colors.textPrimary }}>\n {String(item.value)}\n </span>\n )}\n </div>\n ))}\n </div>\n);\n\ntype Bound = Omit<CollectionWidgetProps, \"widgetType\">;\n\nexport const CardListWidget: React.FC<Bound> = (p) => <CollectionWidget {...p} widgetType=\"CARDLIST\" />;\nexport const ActivityFeedWidget: React.FC<Bound> = (p) => <CollectionWidget {...p} widgetType=\"ACTIVITYFEED\" />;\nexport const EntityGalleryWidget: React.FC<Bound> = (p) => <CollectionWidget {...p} widgetType=\"ENTITY_GALLERY\" />;\nexport const GridCardWidget: React.FC<Bound> = (p) => <CollectionWidget {...p} widgetType=\"GRID_CARD\" />;\nexport const CarouselWidget: React.FC<Bound> = (p) => <CollectionWidget {...p} widgetType=\"CAROUSEL\" />;\nexport const BannerWidget: React.FC<Bound> = (p) => <CollectionWidget {...p} widgetType=\"BANNER\" />;\n","import React, { useMemo } from \"react\";\nimport { WidgetShell } from \"./WidgetShell\";\nimport { type ZvolvTokens } from \"../theme/tokens\";\nimport { resolveChromeConfig } from \"../core/chrome\";\nimport { parseConfig } from \"../core/config\";\nimport { statusTone, toneColor, toneSurface } from \"../theme/tones\";\nimport { useInteractiveWidgetData, type InteractiveWidgetProps } from \"./interactive\";\nimport type { WidgetInteractions } from \"../react/useWidgetInteractions\";\n\nexport interface TableColumn {\n key: string;\n header: string;\n align?: \"left\" | \"right\" | \"center\";\n width?: number | string;\n /** Hint for default cell treatment; a custom renderer may ignore it. */\n kind?: \"text\" | \"number\" | \"date\" | \"status\" | \"user\" | \"html\";\n}\n\nexport interface CellArgs {\n value: any;\n row: any;\n column: TableColumn;\n rowIndex: number;\n tokens: ZvolvTokens;\n toLabel: (v: any) => any;\n}\n\nexport interface TableRenderArgs {\n rows: any[];\n columns: TableColumn[];\n toLabel: (v: any) => any;\n tokens: ZvolvTokens;\n config: any;\n /** Default cell content for a column, so a custom renderer can reuse it. */\n renderCell: (args: CellArgs) => React.ReactNode;\n onRowClick?: (row: any, index: number) => void;\n /** Live search / column filter / sort / widget filter state and setters. */\n interactions: WidgetInteractions;\n /** Sort indicator + column filter for a header cell (slots or defaults). */\n headerControls: (column: TableColumn) => React.ReactNode;\n /** Distinct values for a column-filter dropdown. */\n getColumnOptions: (key: string) => { value: any; label: string; count: number }[];\n /** Whether header sort / column filters are enabled for this table. */\n enableSort: boolean;\n showColumnFilter: boolean;\n /** \"remote\" = server sorts/filters the full dataset; \"local\" = loaded rows only. */\n mode: \"remote\" | \"local\";\n}\n\nexport interface TableWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n widgetType?: string;\n title?: string;\n description?: string;\n columns?: TableColumn[];\n emptyMessage?: string;\n unconfiguredMessage?: string;\n className?: string;\n style?: React.CSSProperties;\n onRowClick?: (row: any, index: number) => void;\n /** Replace a single cell's content, keeping the default table chrome. */\n cell?: (args: CellArgs) => React.ReactNode;\n /** Replace the entire table body. */\n render?: (args: TableRenderArgs) => React.ReactNode;\n}\n\nconst KIND_BY_TYPE: Record<string, TableColumn[\"kind\"]> = {\n NUMERIC: \"number\", FLOAT: \"number\", INTEGER: \"number\", NUMBER: \"number\", CURRENCY: \"number\",\n INPUT_NUMBER: \"number\", INPUT_CURRENCY: \"number\", INPUT_PERCENT: \"number\",\n DATE: \"date\", DATETIME: \"date\",\n TAG: \"status\", STATUS: \"status\",\n USER: \"user\", USERGROUP: \"user\",\n HTML: \"html\", RICHTEXT: \"html\",\n};\n\n/** Derives columns from explicit props, then config, then the first row's shape. */\nexport function useTableColumns(\n explicit: TableColumn[] | undefined, config: any, rows: any[]\n): TableColumn[] {\n return useMemo(() => {\n if (explicit?.length) return explicit;\n const declared = [config?.columns, config?.additionalProperties?.columns, config?.fields, config?.table?.columns]\n .find((d) => Array.isArray(d) && d.length);\n if (Array.isArray(declared) && declared.length) {\n return declared\n .filter((c: any) => c && c.hidden !== true && c.type !== \"DELETE\")\n .map((c: any) => ({\n // Host dashboards store { label, dataPoint, field? }; the submission id\n // column is spelled \"FormSubmissioID\" but arrives as `id`.\n key: c.dataPoint === \"FormSubmissioID\" ? \"id\" : (c.key ?? c.field ?? c.dataPoint ?? c.masterfield ?? c.header),\n header: c.label ?? c.header ?? c.title ?? c.key ?? c.dataPoint,\n align: c.align,\n width: c.width,\n kind: c.kind ?? KIND_BY_TYPE[String(c.masterFieldType ?? c.type ?? \"\").toUpperCase()] ?? \"text\",\n }))\n .filter((c: TableColumn) => !!c.key);\n }\n const first = rows[0];\n return first ? Object.keys(first).map((k) => ({ key: k, header: k, kind: \"text\" as const })) : [];\n }, [explicit, config, rows]);\n}\n\n/**\n * Tabular widgets. Column resolution, field-type mapping and user-label lookup\n * are data logic; the markup is fully replaceable via `cell` or `render`.\n */\nexport const TableWidget: React.FC<TableWidgetProps> = (props) => {\n const {\n widgetType = \"TABLE\", title, description, columns,\n emptyMessage, unconfiguredMessage, className, style,\n onRowClick, cell, render, ...dataArgs\n } = props;\n\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType }, { table: true });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n // Columns come from the unfiltered rows so a search with no hits keeps its headers.\n const resolvedColumns = useTableColumns(columns, config, data.sourceRows);\n\n const renderCell = (args: CellArgs): React.ReactNode => {\n if (cell) {\n const custom = cell(args);\n if (custom !== undefined) return custom;\n }\n return <DefaultCell {...args} />;\n };\n\n const args: TableRenderArgs = {\n rows: data.rows, columns: resolvedColumns, toLabel: data.meta.toLabel,\n tokens: t, config, renderCell, onRowClick,\n interactions: ix.interactions, headerControls: ix.headerControls,\n getColumnOptions: ix.getColumnOptions,\n enableSort: ix.flags.enableSort, showColumnFilter: ix.flags.showColumnFilter,\n mode: data.meta.tableMode,\n };\n\n return (\n <WidgetShell\n widgetType={widgetType}\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args) : <DefaultTable {...args} />}\n </WidgetShell>\n );\n};\n\n/** Display text for FORM_SEARCH / AUTO_COMPLETE objects (host getFormattedData rule). */\nfunction displayText(v: any): string {\n if (v === null || v === undefined) return \"\";\n if (typeof v === \"object\") return String(v.view ?? v.title ?? v.name ?? v.displayName ?? v.groupName ?? v.label ?? v.value ?? \"\");\n return String(v);\n}\n\nconst DefaultCell: React.FC<CellArgs> = ({ value, column, tokens: t, toLabel }) => {\n if (value === null || value === undefined || value === \"\") return null;\n\n if (column.kind === \"status\") {\n value = Array.isArray(value) ? value.map(displayText).join(\", \") : displayText(value);\n const tone = statusTone(value);\n return (\n <span style={{\n padding: `${t.surfaces.badge.paddingY} ${t.surfaces.badge.paddingX}`,\n borderRadius: t.surfaces.badge.radius, fontSize: t.surfaces.badge.fontSize,\n fontWeight: t.surfaces.badge.fontWeight,\n color: toneColor(t, tone), background: toneSurface(t, tone), whiteSpace: \"nowrap\",\n }}>{String(value)}</span>\n );\n }\n if (column.kind === \"user\") return <>{String(toLabel(value) ?? \"\")}</>;\n if (column.kind === \"number\") {\n return <span style={{ fontFamily: t.monoFontFamily }}>{String(value)}</span>;\n }\n // HTML cells are intentionally NOT dangerouslySetInnerHTML here — the host app\n // owns sanitization. Supply a `cell` renderer to render rich text. Markup is\n // stripped so it never shows as literal tags.\n const text = (Array.isArray(value) ? value : [value]).map(displayText).filter(Boolean).join(\", \");\n return <>{String(toLabel(text) ?? text).replace(/<[^>]*>/g, \"\")}</>;\n};\n\nconst DefaultTable: React.FC<TableRenderArgs> = ({\n rows, columns, tokens: t, renderCell, toLabel, onRowClick,\n headerControls, interactions, enableSort,\n}) => (\n <div style={{ overflow: \"auto\", height: \"100%\" }}>\n <table style={{ width: \"100%\", borderCollapse: \"collapse\", fontSize: t.typography.body.fontSize }}>\n <thead>\n <tr>\n {columns.map((c) => (\n <th key={c.key} style={{\n textAlign: c.align ?? (c.kind === \"number\" ? \"right\" : \"left\"),\n width: c.width, padding: \"9px 12px\", position: \"sticky\", top: 0, zIndex: 1,\n background: t.surfaces.table.headerBg, color: t.colors.textSecondary,\n fontSize: t.typography.kpiLabel.fontSize,\n textTransform: t.typography.kpiLabel.textTransform as any,\n letterSpacing: t.typography.kpiLabel.letterSpacing,\n borderBottom: `1px solid ${t.surfaces.table.borderColor}`, whiteSpace: \"nowrap\",\n }} aria-sort={\n interactions.sortDirectionFor(c.key) === \"asc\" ? \"ascending\"\n : interactions.sortDirectionFor(c.key) === \"desc\" ? \"descending\" : undefined\n }>\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 2 }}>\n <span\n onClick={enableSort ? () => interactions.toggleSort(c.key) : undefined}\n style={{ cursor: enableSort ? \"pointer\" : undefined }}\n >{c.header}</span>\n {headerControls(c)}\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, i) => (\n <tr key={i}\n onClick={onRowClick ? () => onRowClick(row, i) : undefined}\n style={{\n background: i % 2 ? t.surfaces.table.altRowBg : t.surfaces.table.rowBg,\n cursor: onRowClick ? \"pointer\" : undefined,\n }}>\n {columns.map((c) => (\n <td key={c.key} style={{\n textAlign: c.align ?? (c.kind === \"number\" ? \"right\" : \"left\"),\n padding: \"9px 12px\", borderBottom: `1px solid ${t.surfaces.table.borderColor}`,\n color: t.colors.textPrimary, verticalAlign: \"middle\",\n }}>\n {renderCell({ value: row[c.key], row, column: c, rowIndex: i, tokens: t, toLabel })}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n);\n\ntype BoundTable = Omit<TableWidgetProps, \"widgetType\">;\n\nexport const DashboardTableWidget: React.FC<BoundTable> = (p) => <TableWidget {...p} widgetType=\"TABLE\" />;\nexport const DatabaseTableWidget: React.FC<BoundTable> = (p) => <TableWidget {...p} widgetType=\"DATABASE_TABLE\" />;\nexport const TaskTrackerTableWidget: React.FC<BoundTable> = (p) => <TableWidget {...p} widgetType=\"TASK_TRACKER_TABLE\" />;\n\n/**\n * Child table. The host is responsible for clamping this to the parent body's\n * visible width — an unclamped child steals the parent's horizontal scroll.\n */\nexport const ChildTableWidget: React.FC<BoundTable> = (p) => (\n <TableWidget {...p} widgetType=\"CHILD_TABLE\" />\n);\n\n// ── Pivot grid ───────────────────────────────────────────────────────────────\n\nexport interface PivotRenderArgs extends TableRenderArgs {\n rowFields: string[];\n columnFields: string[];\n valueFields: string[];\n}\n\nexport interface PivotGridWidgetProps extends Omit<BoundTable, \"render\"> {\n render?: (args: PivotRenderArgs) => React.ReactNode;\n}\n\n/**\n * Pivot grid. The server returns already-pivoted rows, so this resolves the\n * row/column/value field names and renders them as a table.\n */\nexport const PivotGridWidget: React.FC<PivotGridWidgetProps> = (props) => {\n const { render, ...rest } = props;\n const config = parseConfig(rest.configurations);\n const pivot = (rest.dataSource as any)?.pivot ?? config?.pivot ?? {};\n\n const rowFields: string[] = (pivot.rows ?? []).map((r: any) => r?.title ?? r?.masterField).filter(Boolean);\n const columnFields: string[] = (pivot.columns ?? []).map((c: any) => c?.title ?? c?.masterField).filter(Boolean);\n const valueFields: string[] = (pivot.summary ?? []).map((s: any) => s?.value ?? s?.title).filter(Boolean);\n\n return (\n <TableWidget\n {...rest}\n widgetType=\"PIVOTGRID\"\n render={render ? (args) => render({ ...args, rowFields, columnFields, valueFields }) : undefined}\n />\n );\n};\n","import React, { useMemo } from \"react\";\nimport dayjs from \"dayjs\";\nimport { useInteractiveWidgetData, type InteractiveWidgetProps } from \"./interactive\";\nimport { WidgetShell } from \"./WidgetShell\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport { resolveWidgetDefaults, type ZvolvTokens } from \"../theme/tokens\";\nimport { resolveChromeConfig } from \"../core/chrome\";\nimport { parseConfig } from \"../core/config\";\nimport { statusTone, toneColor, toneSurface, type Tone } from \"../theme/tones\";\nimport { useTemplateOverride } from \"../templates/registry\";\n\n/** A scheduled item, normalized from whatever field names the config maps. */\nexport interface TemporalEvent {\n id: string | number;\n title: any;\n group?: any;\n start: Date | null;\n end: Date | null;\n allDay: boolean;\n status?: { label: any; tone: Tone };\n /** 0..1 progress, when the config maps a progress/percent field. */\n progress?: number;\n color?: string;\n raw: any;\n}\n\nexport interface TemporalRenderArgs {\n events: TemporalEvent[];\n /** Overall [min, max] span of the events, for laying out a track. */\n range: { start: Date; end: Date } | null;\n /** Events grouped by their `group` value, preserving first-seen order. */\n lanes: { key: string; label: any; events: TemporalEvent[] }[];\n template: string;\n config: any;\n tokens: ZvolvTokens;\n toLabel: (v: any) => any;\n onEventClick?: (event: TemporalEvent, index: number) => void;\n}\n\nexport interface TemporalWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n widgetType: string;\n title?: string;\n description?: string;\n emptyMessage?: string;\n unconfiguredMessage?: string;\n className?: string;\n style?: React.CSSProperties;\n onEventClick?: (event: TemporalEvent, index: number) => void;\n render?: (args: TemporalRenderArgs) => React.ReactNode;\n}\n\nfunction toDate(v: any): Date | null {\n if (v === null || v === undefined || v === \"\") return null;\n const d = dayjs(v);\n return d.isValid() ? d.toDate() : null;\n}\n\n/**\n * Normalizes rows into events. Field names come from the config and keep the\n * zvolv-web spellings (projectTitle/taskTitle/taskStatus/startDate/endDate) so\n * migrated dashboards map without edits.\n */\nexport function useTemporalEvents(rows: any[], mapping: any): TemporalEvent[] {\n return useMemo(() => {\n const m = mapping ?? {};\n const titleField = m.taskTitle ?? m.titleField ?? m.title ?? m.labelField;\n const groupField = m.projectTitle ?? m.groupField ?? m.group ?? m.resourceField;\n const startField = m.startDate ?? m.startField ?? m.start;\n const endField = m.endDate ?? m.endField ?? m.end;\n const statusField = m.taskStatus ?? m.statusField ?? m.status;\n const progressField = m.progressField ?? m.progress ?? m.percentField;\n const colorField = m.colorField;\n\n return rows.map((row, i): TemporalEvent => {\n const statusRaw = statusField ? row?.[statusField] : undefined;\n const rawProgress = progressField ? Number(row?.[progressField]) : NaN;\n const start = startField ? toDate(row?.[startField]) : null;\n const end = endField ? toDate(row?.[endField]) : null;\n return {\n id: row?.id ?? row?.taskId ?? row?.submissionId ?? i,\n title: titleField ? row?.[titleField] : undefined,\n group: groupField ? row?.[groupField] : undefined,\n start, end,\n // With no time component on either bound, treat it as an all-day span.\n allDay: !!(start && !end) || (!!start && dayjs(start).startOf(\"day\").isSame(start)),\n status: statusRaw !== undefined\n ? { label: statusRaw, tone: statusTone(statusRaw) } : undefined,\n progress: Number.isFinite(rawProgress)\n ? Math.max(0, Math.min(1, rawProgress > 1 ? rawProgress / 100 : rawProgress))\n : undefined,\n color: colorField ? row?.[colorField] : undefined,\n raw: row,\n };\n });\n }, [rows, mapping]);\n}\n\n/**\n * Shared container for timeline / gantt / calendar / scheduler widgets. Event\n * normalization, range and lane grouping are data logic; the canvas is yours.\n */\nexport const TemporalWidget: React.FC<TemporalWidgetProps> = (props) => {\n const {\n widgetType, title, description, emptyMessage, unconfiguredMessage,\n className, style, onEventClick, render, ...dataArgs\n } = props;\n\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n\n const mapping =\n config?.timeline ?? config?.gantt ?? config?.calendar ??\n config?.scheduler ?? config?.mapping ?? config;\n\n const events = useTemporalEvents(data.rows, mapping);\n\n const range = useMemo(() => {\n const stamps = events.flatMap((e) =>\n [e.start, e.end].filter(Boolean).map((d) => (d as Date).getTime()));\n if (!stamps.length) return null;\n return { start: new Date(Math.min(...stamps)), end: new Date(Math.max(...stamps)) };\n }, [events]);\n\n const lanes = useMemo(() => {\n const map = new Map<string, { key: string; label: any; events: TemporalEvent[] }>();\n events.forEach((e) => {\n const key = String(e.group ?? \"\");\n if (!map.has(key)) map.set(key, { key, label: e.group, events: [] });\n map.get(key)!.events.push(e);\n });\n return [...map.values()];\n }, [events]);\n\n const template = config?.template || \"standard\";\n const override = useTemplateOverride(widgetType, template);\n\n const args: TemporalRenderArgs = {\n events, range, lanes, template, config, tokens: t,\n toLabel: data.meta.toLabel, onEventClick,\n };\n\n return (\n <WidgetShell\n widgetType={widgetType}\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args)\n : override ? React.createElement(override, args as any)\n : <DefaultTimeline {...args} />}\n </WidgetShell>\n );\n};\n\nconst DefaultTimeline: React.FC<TemporalRenderArgs> = ({ events, tokens: t, onEventClick }) => (\n <div style={{ display: \"flex\", flexDirection: \"column\", height: \"100%\", overflow: \"auto\" }}>\n {events.map((e, i) => (\n <div key={e.id}\n onClick={onEventClick ? () => onEventClick(e, i) : undefined}\n style={{\n display: \"flex\", gap: 12, padding: \"10px 0\",\n borderBottom: `1px solid ${t.colors.border}`,\n cursor: onEventClick ? \"pointer\" : undefined,\n }}>\n <div style={{\n width: 8, height: 8, borderRadius: 999, marginTop: 6, flexShrink: 0,\n background: e.color ?? (e.status ? toneColor(t, e.status.tone) : t.colors.primary),\n }} />\n <div style={{ minWidth: 0, flex: 1 }}>\n <div style={{ fontSize: t.typography.body.fontSize, color: t.colors.textPrimary, fontWeight: 600 }}>\n {String(e.title ?? \"\")}\n </div>\n <div style={{ fontSize: t.typography.caption.fontSize, color: t.colors.textTertiary }}>\n {e.start ? dayjs(e.start).format(\"DD MMM YYYY\") : \"\"}\n {e.end ? ` → ${dayjs(e.end).format(\"DD MMM YYYY\")}` : \"\"}\n {e.group ? ` · ${String(e.group)}` : \"\"}\n </div>\n </div>\n {e.status && (\n <span style={{\n alignSelf: \"flex-start\",\n padding: `${t.surfaces.badge.paddingY} ${t.surfaces.badge.paddingX}`,\n borderRadius: t.surfaces.badge.radius, fontSize: t.surfaces.badge.fontSize,\n fontWeight: t.surfaces.badge.fontWeight,\n color: toneColor(t, e.status.tone), background: toneSurface(t, e.status.tone),\n }}>{String(e.status.label)}</span>\n )}\n </div>\n ))}\n </div>\n);\n\ntype BoundTemporal = Omit<TemporalWidgetProps, \"widgetType\">;\n\nexport const TimelineWidget: React.FC<BoundTemporal> = (p) => <TemporalWidget {...p} widgetType=\"TIMELINE\" />;\nexport const GanttChartWidget: React.FC<BoundTemporal> = (p) => <TemporalWidget {...p} widgetType=\"GANTT_CHART\" />;\nexport const CalendarWidget: React.FC<BoundTemporal> = (p) => <TemporalWidget {...p} widgetType=\"CALENDAR\" />;\nexport const MeetingSchedulerWidget: React.FC<BoundTemporal> = (p) => (\n <TemporalWidget {...p} widgetType=\"MEETING_SCHEDULER\" />\n);\n\n// ── Stepper ──────────────────────────────────────────────────────────────────\n\nexport interface StepItem {\n index: number;\n label: any;\n description?: any;\n state: \"complete\" | \"current\" | \"upcoming\";\n status?: { label: any; tone: Tone };\n raw: any;\n}\n\nexport interface StepperRenderArgs {\n steps: StepItem[];\n currentIndex: number;\n template: string;\n config: any;\n tokens: ZvolvTokens;\n onStepClick?: (step: StepItem) => void;\n}\n\nexport interface StepperWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n title?: string; description?: string;\n emptyMessage?: string; unconfiguredMessage?: string;\n className?: string; style?: React.CSSProperties;\n onStepClick?: (step: StepItem) => void;\n render?: (args: StepperRenderArgs) => React.ReactNode;\n}\n\n/** Process stepper. Config lives under `config.stepper.*`. */\nexport const StepperWidget: React.FC<StepperWidgetProps> = (props) => {\n const { title, description, emptyMessage, unconfiguredMessage, className, style, onStepClick, render, ...dataArgs } = props;\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType: \"STEPPER\" });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n const stepper = config?.stepper ?? {};\n\n const labelField = stepper.labelField ?? stepper.titleField ?? \"title\";\n const descField = stepper.descriptionField;\n const statusField = stepper.statusField ?? \"status\";\n\n const authored = Array.isArray(stepper.steps) && stepper.steps.length > 0;\n const steps: StepItem[] = useMemo(() => {\n // Authored steps (platform STEPPER): statusField names a ROW field whose value\n // picks the current step by title; otherwise activeIndex. Without authored\n // steps, each row is a step.\n if (authored) {\n const live = stepper.statusField ? String(data.rows[0]?.[stepper.statusField] ?? \"\").trim().toLowerCase() : \"\";\n const liveIdx = live ? stepper.steps.findIndex((s: any) => String(s?.title ?? s?.label ?? \"\").trim().toLowerCase() === live) : -1;\n const activeIdx = liveIdx >= 0 ? liveIdx : (Number.isFinite(Number(stepper.activeIndex ?? stepper.currentIndex)) ? Number(stepper.activeIndex ?? stepper.currentIndex) : 0);\n return stepper.steps.map((s: any, i: number): StepItem => {\n const explicit = s?.status === \"completed\" ? \"complete\" : s?.status === \"current\" ? \"current\" : s?.status === \"pending\" ? \"upcoming\" : null;\n const state = explicit ?? (i < activeIdx ? \"complete\" : i === activeIdx ? \"current\" : \"upcoming\");\n return {\n index: i, label: s?.title ?? s?.label, description: s?.subtitle ?? s?.description, state,\n status: { label: state === \"complete\" ? \"Done\" : state === \"current\" ? \"In progress\" : \"Upcoming\", tone: state === \"complete\" ? \"success\" : state === \"current\" ? \"warning\" : \"neutral\" },\n raw: s,\n } as StepItem;\n });\n }\n const source: any[] = data.rows;\n const explicitCurrent = Number(stepper.currentIndex);\n let current = Number.isFinite(explicitCurrent) ? explicitCurrent : -1;\n\n const mapped = source.map((row, i) => {\n const statusRaw = row?.[statusField] ?? row?.state;\n const tone = statusTone(statusRaw);\n return {\n index: i,\n label: row?.[labelField] ?? row?.label ?? row?.title,\n description: descField ? row?.[descField] : row?.description,\n status: statusRaw !== undefined ? { label: statusRaw, tone } : undefined,\n tone, raw: row,\n };\n });\n\n // With no explicit current step, the first non-complete step is \"current\".\n if (current < 0) {\n const idx = mapped.findIndex((s) => s.tone !== \"success\");\n current = idx === -1 ? mapped.length : idx;\n }\n\n return mapped.map((s, i): StepItem => ({\n index: s.index, label: s.label, description: s.description, status: s.status,\n state: i < current ? \"complete\" : i === current ? \"current\" : \"upcoming\",\n raw: s.raw,\n }));\n }, [data.rows, stepper, labelField, descField, statusField]);\n\n const currentIndex = steps.findIndex((s) => s.state === \"current\");\n const template = config?.template || \"standard\";\n const override = useTemplateOverride(\"STEPPER\", template);\n const args: StepperRenderArgs = { steps, currentIndex, template, config, tokens: t, onStepClick };\n\n return (\n <WidgetShell\n widgetType=\"STEPPER\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args)\n : override ? React.createElement(override, args as any)\n : <DefaultStepper {...args} />}\n </WidgetShell>\n );\n};\n\nconst DefaultStepper: React.FC<StepperRenderArgs> = ({ steps, tokens: t, onStepClick }) => (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 0 }}>\n {steps.map((s, i) => {\n const color = s.state === \"complete\" ? t.colors.success\n : s.state === \"current\" ? t.colors.primary : t.colors.charts.neutral;\n return (\n <div key={s.index}\n onClick={onStepClick ? () => onStepClick(s) : undefined}\n style={{ display: \"flex\", gap: 12, cursor: onStepClick ? \"pointer\" : undefined }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n <div style={{\n width: 22, height: 22, borderRadius: 999, flexShrink: 0,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n fontSize: 11, fontWeight: 700,\n background: s.state === \"upcoming\" ? \"transparent\" : color,\n border: `2px solid ${color}`,\n color: s.state === \"upcoming\" ? color : t.colors.onAccent,\n }}>{s.state === \"complete\" ? \"✓\" : i + 1}</div>\n {i < steps.length - 1 && (\n <div style={{ width: 2, flex: 1, minHeight: 22, background: t.colors.border }} />\n )}\n </div>\n <div style={{ paddingBottom: 18, minWidth: 0 }}>\n <div style={{\n fontSize: t.typography.body.fontSize,\n fontWeight: s.state === \"current\" ? 700 : 500,\n color: s.state === \"upcoming\" ? t.colors.textTertiary : t.colors.textPrimary,\n }}>{String(s.label ?? \"\")}</div>\n {s.description != null && (\n <div style={{ fontSize: t.typography.caption.fontSize, color: t.colors.textSecondary }}>\n {String(s.description)}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n);\n","import React, { useMemo } from \"react\";\nimport { useInteractiveWidgetData, type InteractiveWidgetProps } from \"./interactive\";\nimport { WidgetShell } from \"./WidgetShell\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport { resolveWidgetDefaults, type ZvolvTokens } from \"../theme/tokens\";\nimport { resolveChromeConfig, resolveDrillDown } from \"../core/chrome\";\nimport { parseConfig } from \"../core/config\";\nimport dayjs from \"dayjs\";\nimport { formatAmountValue } from \"../transforms/formatters\";\n\n// ── HTML ─────────────────────────────────────────────────────────────────────\n\nexport interface HtmlRenderArgs {\n /** Template with {{field}} placeholders already substituted from row 0. */\n html: string;\n rows: any[];\n config: any;\n tokens: ZvolvTokens;\n}\n\nexport interface HtmlWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n widgetType?: string;\n title?: string; description?: string;\n emptyMessage?: string; unconfiguredMessage?: string;\n className?: string; style?: React.CSSProperties;\n /**\n * REQUIRED to render markup. The package never calls dangerouslySetInnerHTML —\n * the host owns sanitization (DOMPurify or equivalent). Without this, the raw\n * template is shown as text.\n */\n render?: (args: HtmlRenderArgs) => React.ReactNode;\n}\n\n/** Substitutes {{field}} / {field} placeholders from a row. */\nexport function interpolate(template: string, row: any): string {\n if (!template) return \"\";\n return template.replace(/\\{\\{?\\s*([\\w.]+)\\s*\\}?\\}/g, (whole, key) => {\n const v = key.split(\".\").reduce((acc: any, k: string) => acc?.[k], row);\n return v === undefined || v === null ? whole : String(v);\n });\n}\n\nconst DATE_FORMAT_MAP: Record<string, string> = {\n \"dd/MM/yyyy\": \"DD/MM/YYYY\", \"MM/dd/yyyy\": \"MM/DD/YYYY\", \"yyyy-MM-dd\": \"YYYY-MM-DD\",\n \"dd-MM-yyyy\": \"DD-MM-YYYY\", \"d-M-Y\": \"D-MMM-YYYY\", \"dd-MMM-yyyy\": \"DD-MMM-YYYY\",\n \"MMM d, y\": \"MMM D, YYYY\", \"MMM dd, yyyy\": \"MMM DD, YYYY\",\n};\n\nconst escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * `{{label}}` substitution driven by `config.variables` — ported from the host\n * HTMLWidget.getViewText (Angular raw-html parity). A variable reads\n * rows[0][dataPoint]; a falsy value (0, \"\", null) falls back to defaultValue.\n */\nexport function renderHtmlVariables(template: string, rows: any[], variables: any[]): string {\n let out = template;\n const row = rows?.[0];\n for (const v of variables || []) {\n if (!v?.label) continue;\n let value: any = row && row[v.dataPoint] ? row[v.dataPoint] : v.defaultValue;\n if (v.dataFormat === \"NUMBER\") {\n const n = typeof value === \"number\" ? value : parseFloat(value);\n if (value !== null && value !== undefined && value !== \"\" && !isNaN(n)) value = n.toFixed(v.precision ?? 2);\n } else if (v.dataFormat === \"AMOUNT\" && typeof value === \"number\") {\n value = formatAmountValue(value, v.amountSuffix || \"Rupees\", v.precision ?? 2);\n } else if (v.dataFormat === \"DATE\" && value) {\n const d = dayjs(value);\n if (d.isValid()) value = d.format(DATE_FORMAT_MAP[v.dateFormat] || \"DD/MM/YYYY\");\n }\n let text: string;\n if (Array.isArray(value)) {\n text = value.map((x: any) => (x && typeof x === \"object\" ? x.view ?? x.title ?? x.name ?? \"\" : x)).filter((x: any) => x !== \"\" && x != null).join(\", \");\n } else if (value && typeof value === \"object\") {\n text = String(value.view ?? value.title ?? value.name ?? \"\");\n } else {\n const n = typeof value === \"number\" ? value : Number(value);\n text = (typeof value === \"number\" || (typeof value === \"string\" && value.trim() !== \"\")) && !isNaN(n) && !Number.isInteger(n)\n ? n.toFixed(v.precision ?? 2)\n : String(value ?? \"\");\n }\n out = out.replace(new RegExp(`{{${escapeRe(String(v.label))}}}`, \"gi\"), text);\n }\n return out;\n}\n\nexport const HtmlWidget: React.FC<HtmlWidgetProps> = (props) => {\n const {\n widgetType = \"HTML\", title, description, emptyMessage, unconfiguredMessage,\n className, style, render, ...dataArgs\n } = props;\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n\n // Stored widgets keep markup in media.htmlText (Angular/React host); older\n // configs use html / content / rawHtml.\n const template: string = config?.media?.htmlText ?? config?.html ?? config?.content ?? config?.rawHtml ?? \"\";\n const variables: any[] = Array.isArray(config?.variables) ? config.variables : [];\n const html = useMemo(\n () => (variables.length ? renderHtmlVariables(template, data.rows, variables) : interpolate(template, data.rows[0])),\n [template, data.rows, variables]\n );\n\n // An HTML widget with static markup and no data source is legitimately \"ready\".\n // Markup is content in its own right: with no data source, or zero rows (the\n // variables fall back to their defaults), the widget is still \"ready\".\n const state = template && (data.state === \"unconfigured\" || data.state === \"empty\") ? \"ready\" : data.state;\n const args: HtmlRenderArgs = { html, rows: data.rows, config, tokens: t };\n\n return (\n <WidgetShell\n widgetType={widgetType}\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args) : (\n <div style={{\n fontSize: t.typography.body.fontSize, lineHeight: t.typography.body.lineHeight,\n color: t.colors.textPrimary, whiteSpace: \"pre-wrap\", wordBreak: \"break-word\",\n }}>{html}</div>\n )}\n </WidgetShell>\n );\n};\n\nexport const RawHtmlWidget: React.FC<Omit<HtmlWidgetProps, \"widgetType\">> = (p) => (\n <HtmlWidget {...p} widgetType=\"RAW_HTML\" />\n);\n\n// ── Iframe ───────────────────────────────────────────────────────────────────\n\nexport interface IframeWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n title?: string; description?: string;\n emptyMessage?: string; unconfiguredMessage?: string;\n className?: string; style?: React.CSSProperties;\n render?: (args: { url: string; config: any; tokens: ZvolvTokens }) => React.ReactNode;\n}\n\nexport const IframeWidget: React.FC<IframeWidgetProps> = (props) => {\n const { title, description, emptyMessage, unconfiguredMessage, className, style, render, ...dataArgs } = props;\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType: \"IFRAME\" });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n\n const raw: string = config?.media?.src ?? config?.url ?? config?.src ?? config?.iframe?.url ?? \"\";\n const url = useMemo(() => interpolate(raw, data.rows[0]), [raw, data.rows]);\n const state = url ? \"ready\" : data.state === \"loading\" ? \"loading\" : \"unconfigured\";\n\n return (\n <WidgetShell\n widgetType=\"IFRAME\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={state as any} error={data.error}\n unconfiguredMessage=\"No URL configured\"\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render({ url, config, tokens: t }) : (\n <iframe\n src={url} title={title ?? \"embed\"}\n style={{ width: \"100%\", height: \"100%\", border: \"none\", borderRadius: t.surfaces.tile.radius }}\n sandbox={config?.sandbox ?? \"allow-scripts allow-same-origin allow-forms allow-popups\"}\n />\n )}\n </WidgetShell>\n );\n};\n\n// ── Google map ───────────────────────────────────────────────────────────────\n\nexport interface MapMarker {\n id: string | number;\n lat: number;\n lng: number;\n label?: any;\n raw: any;\n}\n\nexport interface MapRenderArgs {\n markers: MapMarker[];\n center: { lat: number; lng: number } | null;\n zoom: number;\n config: any;\n tokens: ZvolvTokens;\n}\n\nexport interface MapWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n title?: string; description?: string;\n emptyMessage?: string; unconfiguredMessage?: string;\n className?: string; style?: React.CSSProperties;\n /** Required to draw a map — the package does not bundle a maps SDK. */\n render?: (args: MapRenderArgs) => React.ReactNode;\n}\n\n/** Resolves lat/lng markers from rows. Rendering needs a maps SDK you supply. */\nexport const GoogleMapWidget: React.FC<MapWidgetProps> = (props) => {\n const { title, description, emptyMessage, unconfiguredMessage, className, style, render, ...dataArgs } = props;\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType: \"GOOGLE_MAP\" });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n // Platform GOOGLE_MAP: googleMap.latitude / .longitude hold FIELD NAMES,\n // googleMap.center holds numbers, googleMap.title[] builds the marker label.\n const gm = config?.googleMap;\n const m = gm ?? config?.map ?? config ?? {};\n const latField = (gm && typeof gm.latitude === \"string\" ? gm.latitude : null) ?? m.latField ?? \"latitude\";\n const lngField = (gm && typeof gm.longitude === \"string\" ? gm.longitude : null) ?? m.lngField ?? \"longitude\";\n const titleParts: any[] = Array.isArray(gm?.title) ? gm.title : [];\n const labelField = m.labelField ?? m.titleField ?? m.pinDataTitle;\n const centerLat = gm?.center?.latitude ?? m.centerLat;\n const centerLng = gm?.center?.longitude ?? m.centerLng;\n\n const markers: MapMarker[] = useMemo(() => data.rows.flatMap((row, i) => {\n const lat = Number(row?.[latField]);\n const lng = Number(row?.[lngField]);\n if (!Number.isFinite(lat) || !Number.isFinite(lng)) return [];\n const label = titleParts.length\n ? titleParts.map((p: any, k: number) => `${k ? (p.separator ?? \" \") : \"\"}${row?.[p.field] ?? \"\"}`).join(\"\").trim()\n : labelField ? row?.[labelField] : undefined;\n return [{ id: row?.id ?? i, lat, lng, label, raw: row }];\n }), [data.rows, latField, lngField, labelField, titleParts]);\n\n const center = useMemo(() => {\n if (centerLat != null && centerLng != null && Number.isFinite(Number(centerLat))) {\n return { lat: Number(centerLat), lng: Number(centerLng) };\n }\n if (!markers.length) return null;\n return {\n lat: markers.reduce((s, k) => s + k.lat, 0) / markers.length,\n lng: markers.reduce((s, k) => s + k.lng, 0) / markers.length,\n };\n }, [markers, centerLat, centerLng]);\n\n const args: MapRenderArgs = { markers, center, zoom: Number(m.zoom) || 10, config, tokens: t };\n\n return (\n <WidgetShell\n widgetType=\"GOOGLE_MAP\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args) : (\n <div style={{\n height: \"100%\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n color: t.colors.textTertiary, fontSize: t.typography.caption.fontSize, textAlign: \"center\",\n }}>\n {markers.length} location{markers.length === 1 ? \"\" : \"s\"} — supply a `render` prop with your maps SDK\n </div>\n )}\n </WidgetShell>\n );\n};\n\n// ── Action card ──────────────────────────────────────────────────────────────\n\nexport interface ActionItem {\n id: string | number;\n label: any;\n icon?: string;\n actionType?: string;\n disabled?: boolean;\n raw: any;\n}\n\nexport interface ActionRenderArgs {\n actions: ActionItem[];\n config: any;\n tokens: ZvolvTokens;\n onAction?: (action: ActionItem) => void;\n}\n\nexport interface ActionCardWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n title?: string; description?: string;\n emptyMessage?: string; unconfiguredMessage?: string;\n className?: string; style?: React.CSSProperties;\n /** The host performs the action (new submission, popup, external link…). */\n onAction?: (action: ActionItem) => void;\n render?: (args: ActionRenderArgs) => React.ReactNode;\n}\n\nexport const ActionCardWidget: React.FC<ActionCardWidgetProps> = (props) => {\n const { title, description, emptyMessage, unconfiguredMessage, className, style, onAction, render, ...dataArgs } = props;\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType: \"ACTION_CARD\" });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n\n const actions: ActionItem[] = useMemo(() => {\n // Stored action cards carry ONE `action` ({ FormID, FormTitle, style }) with the\n // type in config.actionType; newer configs use an `actions` array.\n const declared: any[] = config?.actions ?? config?.buttons ??\n (config?.action ? [{ ...config.action, actionType: config.actionType, label: config.action.label ?? config.action.FormTitle }] : []);\n return declared.map((a, i) => ({\n id: a?.id ?? a?.FormID ?? i,\n label: a?.label || a?.title || a?.text || a?.FormTitle || title || \"Open\",\n icon: a?.icon ?? a?.style?.icon,\n actionType: a?.actionType ?? a?.type ?? config?.actionType,\n disabled: a?.disabled === true,\n raw: a,\n }));\n }, [config]);\n\n // Actions are config-driven, so a card with actions is ready even with no rows.\n const state = actions.length ? \"ready\" : data.state;\n const args: ActionRenderArgs = { actions, config, tokens: t, onAction };\n\n return (\n <WidgetShell\n widgetType=\"ACTION_CARD\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={state as any} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage ?? \"No actions configured\"}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args) : (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 8 }}>\n {actions.map((a) => (\n <button key={a.id} disabled={a.disabled}\n onClick={onAction ? () => onAction(a) : undefined}\n style={{\n padding: \"8px 14px\", borderRadius: t.surfaces.badge.radius,\n border: `1px solid ${t.colors.border}`, background: t.colors.primary,\n color: t.colors.onAccent, fontSize: t.typography.body.fontSize,\n fontWeight: 600, cursor: a.disabled ? \"not-allowed\" : \"pointer\",\n opacity: a.disabled ? 0.5 : 1, fontFamily: t.fontFamily,\n }}>{String(a.label ?? \"\")}</button>\n ))}\n </div>\n )}\n </WidgetShell>\n );\n};\n\n// ── Tree ─────────────────────────────────────────────────────────────────────\n\nexport interface TreeNode {\n key: string;\n label: any;\n children: TreeNode[];\n depth: number;\n raw: any;\n}\n\nexport interface TreeRenderArgs {\n nodes: TreeNode[];\n config: any;\n tokens: ZvolvTokens;\n onNodeClick?: (node: TreeNode) => void;\n}\n\nexport interface TreeWidgetProps extends Omit<InteractiveWidgetProps, \"widgetType\"> {\n title?: string; description?: string;\n emptyMessage?: string; unconfiguredMessage?: string;\n className?: string; style?: React.CSSProperties;\n onNodeClick?: (node: TreeNode) => void;\n render?: (args: TreeRenderArgs) => React.ReactNode;\n}\n\n/** Builds a tree from flat parent-keyed rows. Orphans are promoted to roots. */\nexport function buildTree(rows: any[], idField: string, parentField: string, labelField: string): TreeNode[] {\n const byId = new Map<string, TreeNode>();\n rows.forEach((row, i) => {\n const key = String(row?.[idField] ?? i);\n byId.set(key, { key, label: row?.[labelField], children: [], depth: 0, raw: row });\n });\n const roots: TreeNode[] = [];\n rows.forEach((row, i) => {\n const key = String(row?.[idField] ?? i);\n const node = byId.get(key)!;\n const parentKey = row?.[parentField] != null ? String(row[parentField]) : null;\n const parent = parentKey ? byId.get(parentKey) : null;\n if (parent && parent !== node) parent.children.push(node);\n else roots.push(node);\n });\n const setDepth = (nodes: TreeNode[], depth: number) => {\n nodes.forEach((n) => { n.depth = depth; setDepth(n.children, depth + 1); });\n };\n setDepth(roots, 0);\n return roots;\n}\n\nexport const TreeWidget: React.FC<TreeWidgetProps> = (props) => {\n const { title, description, emptyMessage, unconfiguredMessage, className, style, onNodeClick, render, ...dataArgs } = props;\n const ix = useInteractiveWidgetData({ ...dataArgs, widgetType: \"TREE\" });\n const { data, config, tokens: t } = ix;\n const chrome = resolveChromeConfig(config);\n const tree = config?.treeConfiguration ?? config?.tree ?? config ?? {};\n\n const nodes = useMemo(() => buildTree(\n data.rows,\n tree.idField ?? \"id\",\n tree.parentField ?? \"parentId\",\n tree.titleField ?? tree.labelField ?? \"title\"\n ), [data.rows, tree.idField, tree.parentField, tree.titleField, tree.labelField]);\n\n const args: TreeRenderArgs = { nodes, config, tokens: t, onNodeClick };\n\n return (\n <WidgetShell\n widgetType=\"TREE\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={data.state} error={data.error}\n emptyMessage={emptyMessage ?? chrome.emptyMessage}\n unconfiguredMessage={unconfiguredMessage}\n className={className} style={style}\n actions={ix.toolbar} {...ix.shell}\n >\n {render ? render(args) : <DefaultTree nodes={nodes} tokens={t} onNodeClick={onNodeClick} />}\n </WidgetShell>\n );\n};\n\nconst DefaultTree: React.FC<{ nodes: TreeNode[]; tokens: ZvolvTokens; onNodeClick?: (n: TreeNode) => void }> = ({\n nodes, tokens: t, onNodeClick,\n}) => (\n <div style={{ height: \"100%\", overflow: \"auto\" }}>\n {flatten(nodes).map((n) => (\n <div key={n.key}\n onClick={onNodeClick ? () => onNodeClick(n) : undefined}\n style={{\n paddingLeft: 12 + n.depth * 18, paddingTop: 5, paddingBottom: 5,\n fontSize: t.typography.body.fontSize,\n color: n.depth === 0 ? t.colors.textPrimary : t.colors.textSecondary,\n fontWeight: n.depth === 0 ? 600 : 400,\n cursor: onNodeClick ? \"pointer\" : undefined,\n }}>\n {n.children.length > 0 ? \"▾ \" : \"• \"}{String(n.label ?? \"\")}\n </div>\n ))}\n </div>\n);\n\nfunction flatten(nodes: TreeNode[]): TreeNode[] {\n return nodes.flatMap((n) => [n, ...flatten(n.children)]);\n}\n\nexport { resolveDrillDown };\n","/**\n * Form definition + submission normalisation. Ported from ZAI-Dashboard\n * `formApi.ts` (normaliseForm / normaliseElement / flattenElements /\n * submissionToValues) so both schema generations land in one shape.\n */\nimport type { FieldKind, FormDefinition, FormElement, FormValues } from \"./types\";\n\nconst idOf = (el: any): string =>\n String(el?.elementId ?? el?.elementID ?? el?.ElementID ?? el?.FormElementID ?? el?.formElementId ?? el?.id ?? \"\");\n\n/**\n * SECTION wrappers are unwrapped and children embedded in containers\n * (ChildElements / Steps / Tabs / tableData) are hoisted, giving one flat list\n * where containers reference their children by elementId.\n */\nfunction flattenElements(rawList: any[]): any[] {\n const seen = new Set<string>();\n const result: any[] = [];\n\n const embeddedChildrenOf = (el: any): any[] => {\n const attrs = el.attributes ?? el.Attributes ?? {};\n const props = el.properties ?? el.Properties ?? {};\n const out: any[] = [];\n const children = attrs.ChildElements ?? attrs.childElements ?? attrs.children ?? [];\n if (Array.isArray(children)) out.push(...children);\n [...(attrs.Steps ?? attrs.steps ?? []), ...(attrs.Tabs ?? attrs.tabs ?? [])].forEach((s: any) => {\n const c = s?.childElements ?? s?.ChildElements ?? [];\n if (Array.isArray(c)) out.push(...c);\n });\n (Array.isArray(props.tableData) ? props.tableData : []).forEach((row: any) => {\n if (Array.isArray(row)) out.push(...row);\n });\n return out.filter((c) => c && typeof c === \"object\" && idOf(c));\n };\n\n const collectTopLevel = (el: any): void => {\n if (!el || typeof el !== \"object\") return;\n if ((el.ElementType === \"SECTION\" || el.elementType === \"SECTION\") && Array.isArray(el.Elements ?? el.elements)) {\n (el.Elements ?? el.elements).forEach(collectTopLevel);\n return;\n }\n const id = idOf(el);\n if (id && seen.has(id)) return;\n if (id) seen.add(id);\n result.push(el);\n };\n const collectEmbedded = (el: any): void => {\n embeddedChildrenOf(el).forEach((child) => {\n const id = idOf(child);\n if (id && !seen.has(id)) {\n seen.add(id);\n result.push(child);\n collectEmbedded(child);\n }\n });\n };\n\n rawList.forEach(collectTopLevel);\n [...result].forEach(collectEmbedded);\n return result;\n}\n\n/** Container child lists hold ids or embedded element objects; reduce to ids. */\nfunction childIdList(raw: any): string[] {\n if (!raw) return [];\n if (typeof raw === \"string\") return raw.split(\",\").map((s) => s.trim()).filter(Boolean);\n if (!Array.isArray(raw)) return [];\n return raw\n .map((c: any) => (typeof c === \"string\" || typeof c === \"number\" ? String(c) : idOf(c)))\n .filter(Boolean);\n}\n\nexport function normaliseElement(el: any): FormElement {\n const attrs = { ...(el.attributes ?? el.Attributes ?? {}) };\n const properties: Record<string, any> = { ...(el.properties ?? el.Properties ?? {}) };\n\n // Width: attributes.Width is a percentage; a root `width` 1–24 is already a span.\n let width = 24;\n const attrW = attrs.Width ?? attrs.width;\n const pct = typeof attrW === \"number\" ? attrW\n : attrW != null && attrW !== \"\" && !isNaN(Number(String(attrW).replace(\"%\", \"\"))) ? Number(String(attrW).replace(\"%\", \"\"))\n : null;\n if (pct != null && pct > 0) width = Math.min(24, Math.max(1, Math.round((pct / 100) * 24)));\n const rootSpan = typeof el.width === \"number\" && el.width >= 1 && el.width <= 24;\n if (rootSpan) width = el.width;\n\n const type: string = el.type ?? el.Type ?? el.ElementType ?? \"EDIT_TEXT\";\n\n // Legacy: root-level Options → properties.options\n if ((el.Options ?? el.options) != null && !(properties.options?.length)) {\n const raw = el.Options ?? el.options;\n properties.options = Array.isArray(raw) ? raw : [];\n }\n // Platform create_form stores a few type props at the element root.\n for (const k of [\"formula\", \"calculateOnLoad\", \"minVal\", \"maxVal\", \"step\", \"prefix\", \"suffix\", \"dataSource\", \"loadOnDependency\", \"maxResults\"]) {\n if (el[k] !== undefined && properties[k] === undefined) properties[k] = el[k];\n }\n if (attrs.subType == null && el.subType) attrs.subType = el.subType;\n\n const showLabel = el.showLabel ?? attrs.showLabel ?? attrs.ShowLabel ?? properties.showLabel ?? el.MetaData?.ShowLabel ?? true;\n const hideLabel = !!(el.hideLabel ?? attrs.hideLabel ?? properties.hideLabel ?? showLabel === false);\n\n if ((type === \"FORM_SEARCH\" || type === \"INPUT_TAG\") && properties.dataSource) {\n const ds = properties.dataSource;\n const meta = (properties.metaData = { ...(properties.metaData ?? {}) });\n for (const k of [\"FormID\", \"ExtraLabels\", \"SearchLabel\", \"SelectLabel\", \"ViewLabel\", \"StaticFilters\", \"MaxResults\", \"DynamicFilters\", \"operator\"]) {\n meta[k] = meta[k] ?? ds[k];\n }\n }\n if (type === \"SPINNER\" && Array.isArray(properties.options) && typeof properties.options[0] === \"string\") {\n properties.options = properties.options.map((o: string) => ({ view: o, select: o }));\n }\n\n if (attrs.ChildElements) attrs.ChildElements = childIdList(attrs.ChildElements);\n if (attrs.childElements) attrs.childElements = childIdList(attrs.childElements);\n for (const key of [\"Steps\", \"steps\", \"Tabs\", \"tabs\"]) {\n if (Array.isArray(attrs[key])) {\n attrs[key] = attrs[key].map((s: any) => ({ ...s, childElements: childIdList(s.childElements ?? s.ChildElements) }));\n }\n }\n\n const meta = el.MetaData ?? {};\n const alias = (target: string, ...keys: string[]) => {\n if (properties[target] != null) return;\n for (const k of keys) if (meta[k] != null) { properties[target] = meta[k]; return; }\n };\n alias(\"actionType\", \"ActionType\", \"actionType\");\n alias(\"triggerID\", \"TriggerID\", \"triggerID\", \"AutomationID\");\n alias(\"successMessage\", \"SuccessMessage\", \"successMessage\");\n alias(\"errorMessage\", \"ErrorMessage\", \"errorMessage\");\n\n const requiredRaw = el.required ?? el.Required;\n return {\n elementId: idOf(el),\n id: el.id != null ? String(el.id) : el.FormElementID != null ? String(el.FormElementID) : undefined,\n label: el.label ?? el.Label ?? el.FieldLabel ?? \"\",\n type,\n defaultValue: el.defaultValue ?? el.DefaultValue ?? el.value ?? el.Value,\n required: requiredRaw === true || requiredRaw === 1 || requiredRaw === \"1\" || requiredRaw === \"true\",\n disabled: !!(el.disabled ?? el.Disabled),\n hidden: !!(el.hidden ?? el.Hidden),\n unique: !!(el.unique ?? el.Unique),\n width,\n widthSpecified: pct != null || rootSpan,\n hideLabel,\n dataType: el.dataType ?? el.DataType,\n properties,\n attributes: attrs,\n validations: el.validations ?? el.Validations,\n dependencies: el.dependencies ?? el.Dependencies,\n };\n}\n\n/** Accepts getSingleForm output, the legacy `{value:{<id>:{…}}}` envelope, or an array. */\nexport function normaliseForm(raw: any, formId?: string): FormDefinition {\n let src: any = raw;\n if (Array.isArray(raw)) src = raw[0];\n else if (Array.isArray(raw?.elements) && raw.elements[0]?.elements) src = raw.elements[0];\n else if (raw?.data?.elements?.[0]?.elements) src = raw.data.elements[0];\n else if (raw?.value && typeof raw.value === \"object\" && !Array.isArray(raw.value) && Object.keys(raw.value).length) {\n src = Object.values(raw.value)[0];\n }\n src = src ?? {};\n const cfg = src.configurations ?? {};\n return {\n uuid: String(formId || src.id || src.formId || src.FormID || src.uuid || \"\"),\n title: src.title ?? src.FormTitle ?? \"\",\n description: src.description ?? src.FormDescription ?? \"\",\n type: src.type ?? src.FormType ?? \"GENERIC\",\n elements: flattenElements(src.elements ?? src.Elements ?? []).map(normaliseElement),\n allowDraft: !!src.allowDraft,\n configurations: cfg,\n hideSubmit: !!cfg.hideSubmit,\n hideFormTitle: !!cfg.hideFormTitle,\n successMsg: cfg.successMsg ?? null,\n warningMsg: src.warningMsg ?? cfg.warningMsg ?? null,\n };\n}\n\n/** Values keyed by elementId from a getSingleSubmission response. */\nexport function submissionToValues(sub: any): FormValues {\n if (!sub) return {};\n let data = sub?.data?.elements ? sub.data : sub;\n const first = data.elements?.[0];\n if (first && (Array.isArray(first.elements) || Array.isArray(first.inputs))) data = first;\n const out: FormValues = {};\n (data.elements ?? data.inputs ?? data.Elements ?? []).forEach((el: any) => {\n const id = idOf(el);\n if (!id) return;\n const type = el.type ?? el.Type;\n if (type === \"TEXT_VIEW\") return;\n let value = el.value ?? el.Value;\n if (type === \"CHECK_BOX\") value = value === true || value === \"true\" || value === \"1\" || value === 1;\n // AUTO_COMPLETE (people / role search) may come back as a JSON \"[..]\" string (ZAI formApi).\n if (type === \"AUTO_COMPLETE\" && typeof value === \"string\" && value.trim().startsWith(\"[\")) {\n try { value = JSON.parse(value); } catch { /* keep */ }\n }\n if ((type === \"FORM_SEARCH\" || type === \"INPUT_TAG\" || type === \"EXTERNAL_API\") && typeof value === \"string\") {\n try { value = JSON.parse(value); } catch { /* keep */ }\n }\n if ((type === \"FORM_SEARCH\" || type === \"INPUT_TAG\") && Array.isArray(value) && value.length === 1) {\n const max = el.properties?.metaData?.MaxResults ?? el.properties?.dataSource?.MaxResults ?? el.properties?.maxResults;\n if (Number(max) === 1) value = value[0];\n }\n out[id] = value;\n });\n return out;\n}\n\n/** The effective type: attributes.subType overrides the stored type for routing. */\nexport function resolveFieldType(el: FormElement): string {\n const sub = String(el.attributes?.subType ?? \"\");\n const t = String(el.type ?? \"\").toUpperCase();\n if (sub === \"HTML_TEXT\") return \"TEXT_VIEW\";\n if (sub === \"TRIGGER_AUTOMATION\") return \"ACTION_BUTTON\";\n if (sub === \"ACTION_DROPDOWN\") return \"CASCADED_ACTIONS\";\n if (sub === \"INPUT_IP\" || sub === \"INPUT_DEVICE_INFO\") return sub;\n if (t === \"GROUP_VIEW\" && [\"COLLAPSE_SECTION\", \"CONTAINER\", \"STEPPER\", \"TAB\", \"MATRIX\", \"COMMENTS\"].includes(sub)) return sub;\n if ([\"SIGNATURE\", \"INPUT_RATE\", \"COMMENTS\"].includes(sub)) return sub;\n // zvolv-web z-form-widgets: any other subType replaces the type (e.g. an element saved\n // as INPUT_SHORT_TEXT with subType INPUT_PERCENT_CORRECT renders the trial widget).\n if (sub && sub !== t && sub in KIND) return sub;\n if (t === \"SCAN\") return \"INPUT_SCAN\";\n if (t === \"TRIGGER_AUTOMATION\") return \"ACTION_BUTTON\";\n if (t === \"ACTION_DROPDOWN\") return \"CASCADED_ACTIONS\";\n return t;\n}\n\nconst KIND: Record<string, FieldKind> = {\n INPUT_SHORT_TEXT: \"text\", EDIT_TEXT: \"textarea\",\n INPUT_EMAIL: \"email\", INPUT_PHONE: \"phone\", INPUT_URL: \"url\",\n INPUT_NUMBER: \"number\", INPUT_CURRENCY: \"currency\", INPUT_PERCENT: \"percent\",\n SPINNER: \"select\", RADIO_GROUP: \"radio\", CHECK_BOX: \"checkbox\",\n FORM_SEARCH: \"lookup\", INPUT_TAG: \"lookup\", EXTERNAL_API: \"lookup\", INPUT_SEARCH: \"lookup\",\n AUTO_COMPLETE: \"user\", ON_BEHALF_OF: \"onbehalf\",\n DATE_PICKER: \"date\", TIME_PICKER: \"time\", DATE_TIME_PICKER: \"datetime\", INPUT_DATE_RANGE: \"daterange\",\n RATING_BAR: \"rating\", INPUT_RATE: \"rating\", PROGRESS_BAR: \"slider\",\n UPLOAD_FILE_IMAGE: \"file\", FILE_UPLOAD_V2: \"file\", MEDIA_UPLOAD: \"file\",\n SIGNATURE: \"signature\", RICH_TEXT_EDITOR: \"richtext\", INPUT_SCAN: \"scan\", INPUT_TIMER: \"timer\", GPS: \"location\",\n INPUT_FORMULA: \"formula\",\n TEXT_VIEW: \"display\",\n INPUT_AUTONUMBER: \"autonumber\", INPUTSHEET_AUTONUMBER: \"autonumber\",\n INPUT_CREATEDAT: \"autonumber\", INPUT_MODIFIEDAT: \"autonumber\", INPUT_CREATEDBY: \"autonumber\", INPUT_MODIFIEDBY: \"autonumber\",\n INPUT_IP: \"system\", INPUT_DEVICE_INFO: \"system\",\n COLLAPSE_SECTION: \"section\", GROUP_VIEW: \"container\", CONTAINER: \"container\",\n TAB: \"tabs\", STEPPER: \"steps\", MATRIX: \"matrix\", TABLE_START: \"table\",\n INPUT_SHEET: \"sheet\", NESTED_FORM: \"sheet\", INPUT_CHILD_WIDGET: \"sheet\", INPUT_SHEET_INVOICE: \"sheet\",\n COMMENTS: \"comments\",\n ACTION_BUTTON: \"action\", INPUT_TRIGGER: \"action\", CASCADED_ACTIONS: \"action\",\n // ABA trial widgets (ZAI TimeSamplingField / PercentCorrectField / TaskAnalysisField, zvolv-web z-input-*).\n INPUT_TIME_SAMPLING: \"trials\", INPUT_PERCENT_CORRECT: \"trials\", INPUT_TASK_ANALYSIS: \"trials\",\n};\n\nexport function fieldKindOf(el: FormElement): FieldKind {\n const t = resolveFieldType(el);\n if (t === \"AUTO_COMPLETE\") {\n // Form-backed autocomplete behaves like a lookup; user/role search stays \"user\".\n const p = el.properties ?? {};\n if (!p.jsonData && (p.dataSource?.FormID || p.metaData?.FormID)) return \"lookup\";\n }\n return KIND[t] ?? \"unknown\";\n}\n\n/** Kinds that hold other fields (their children are not rendered at the root). */\nexport const CONTAINER_KINDS = new Set<FieldKind>([\"section\", \"container\", \"tabs\", \"steps\", \"matrix\", \"table\"]);\n\n/** Child element ids declared by a container, in order. */\nexport function childIdsOf(el: FormElement): string[] {\n const a = el.attributes ?? {};\n const ids = [\n ...childIdList(a.ChildElements ?? a.childElements),\n ...[...(a.Steps ?? a.steps ?? []), ...(a.Tabs ?? a.tabs ?? [])].flatMap((s: any) => childIdList(s.childElements)),\n ...((el.properties?.tableData ?? []) as any[]).flatMap((row) => (Array.isArray(row) ? childIdList(row) : [])),\n ];\n return [...new Set(ids)];\n}\n","/**\n * INPUT_FORMULA evaluation with a small parser — no `eval` / `new Function`.\n *\n * Supports both syntaxes found on the platform:\n * - builder syntax: MUL({Quantity}, {Rate}), IF({Status} == \"Open\", 1, 0), DIVI(a, b)\n * - legacy syntax: Quantity * Rate, SUM(A, B), ROUND(x, 2), CONCAT(First, \" \", Last)\n * Field references are labels (`{Label}`, or bare labels in legacy formulas).\n */\n\ntype Val = number | string | boolean | null;\n\ntype Tok =\n | { t: \"num\"; v: number }\n | { t: \"str\"; v: string }\n | { t: \"ref\"; v: string }\n | { t: \"id\"; v: string }\n | { t: \"op\"; v: string };\n\nfunction tokenize(src: string): Tok[] {\n const out: Tok[] = [];\n let i = 0;\n while (i < src.length) {\n const c = src[i];\n if (/\\s/.test(c)) { i++; continue; }\n if (c === \"{\") {\n const end = src.indexOf(\"}\", i);\n if (end < 0) throw new Error(\"Unclosed {\");\n out.push({ t: \"ref\", v: src.slice(i + 1, end).trim() });\n i = end + 1; continue;\n }\n if (c === '\"' || c === \"'\") {\n let j = i + 1, s = \"\";\n while (j < src.length && src[j] !== c) { s += src[j] === \"\\\\\" ? src[++j] : src[j]; j++; }\n out.push({ t: \"str\", v: s }); i = j + 1; continue;\n }\n if (/[0-9.]/.test(c)) {\n const m = /^\\d*\\.?\\d+(?:e[+-]?\\d+)?/i.exec(src.slice(i));\n if (m) { out.push({ t: \"num\", v: Number(m[0]) }); i += m[0].length; continue; }\n }\n if (/[A-Za-z_]/.test(c)) {\n const m = /^[A-Za-z_][A-Za-z0-9_]*/.exec(src.slice(i))!;\n out.push({ t: \"id\", v: m[0] }); i += m[0].length; continue;\n }\n const two = src.slice(i, i + 2);\n if ([\"==\", \"!=\", \">=\", \"<=\", \"&&\", \"||\"].includes(two)) { out.push({ t: \"op\", v: two }); i += 2; continue; }\n if (\"+-*/%()<>,!=\".includes(c)) { out.push({ t: \"op\", v: c }); i++; continue; }\n throw new Error(`Unexpected \"${c}\"`);\n }\n return out;\n}\n\nconst num = (v: Val): number => {\n if (typeof v === \"number\") return v;\n if (typeof v === \"boolean\") return v ? 1 : 0;\n if (v == null || v === \"\") return 0;\n const n = parseFloat(String(v).replace(/,/g, \"\"));\n return isNaN(n) ? 0 : n;\n};\nconst isNumeric = (v: Val) => typeof v === \"number\" || (typeof v === \"string\" && v.trim() !== \"\" && !isNaN(Number(v)));\nconst truthy = (v: Val) => (typeof v === \"string\" ? v !== \"\" && v !== \"0\" && v.toLowerCase() !== \"false\" : !!v);\nconst eq = (a: Val, b: Val) => (isNumeric(a) && isNumeric(b) ? num(a) === num(b) : String(a ?? \"\") === String(b ?? \"\"));\n\nconst FUNCS: Record<string, (a: Val[]) => Val> = {\n ADD: (a) => a.reduce<number>((s, v) => s + num(v), 0),\n SUM: (a) => a.reduce<number>((s, v) => s + num(v), 0),\n SUB: (a) => (a.length ? a.slice(1).reduce<number>((s, v) => s - num(v), num(a[0])) : 0),\n MUL: (a) => a.reduce<number>((s, v) => s * num(v), 1),\n PRODUCT: (a) => a.reduce<number>((s, v) => s * num(v), 1),\n DIVI: (a) => num(a[0]) / num(a[1]),\n DIV: (a) => num(a[0]) / num(a[1]),\n DIVIDE: (a) => num(a[0]) / num(a[1]),\n AVG: (a) => (a.length ? a.reduce<number>((s, v) => s + num(v), 0) / a.length : 0),\n AVERAGE: (a) => (a.length ? a.reduce<number>((s, v) => s + num(v), 0) / a.length : 0),\n COUNT: (a) => a.filter((v) => isNumeric(v)).length,\n MIN: (a) => Math.min(...a.map(num)),\n MAX: (a) => Math.max(...a.map(num)),\n ROUND: (a) => { const d = Math.max(0, Math.round(num(a[1] ?? 0))); return Number(num(a[0]).toFixed(d)); },\n ABS: (a) => Math.abs(num(a[0])),\n CEIL: (a) => Math.ceil(num(a[0])),\n FLOOR: (a) => Math.floor(num(a[0])),\n SQRT: (a) => Math.sqrt(num(a[0])),\n POW: (a) => Math.pow(num(a[0]), num(a[1])),\n LOG10: (a) => Math.log10(num(a[0])),\n LOG: (a) => (a.length > 1 ? Math.log(num(a[0])) / Math.log(num(a[1])) : Math.log(num(a[0]))),\n IF: (a) => (truthy(a[0]) ? a[1] : a[2] ?? null),\n AND: (a) => a.every(truthy),\n OR: (a) => a.some(truthy),\n NOT: (a) => !truthy(a[0]),\n CONCAT: (a) => a.map((v) => (v == null ? \"\" : String(v))).join(\"\"),\n DATE: () => new Date().toISOString(),\n};\n\nfunction parse(tokens: Tok[], ref: (label: string) => Val): Val {\n let p = 0;\n const peek = () => tokens[p];\n const isOp = (v: string) => peek()?.t === \"op\" && (peek() as any).v === v;\n const expect = (v: string) => { if (!isOp(v)) throw new Error(`Expected ${v}`); p++; };\n\n const primary = (): Val => {\n const tk = tokens[p++];\n if (!tk) throw new Error(\"Unexpected end\");\n if (tk.t === \"num\" || tk.t === \"str\") return tk.v;\n if (tk.t === \"ref\") return ref(tk.v);\n if (tk.t === \"id\") {\n const name = tk.v.toUpperCase();\n if (isOp(\"(\")) {\n p++;\n const args: Val[] = [];\n if (!isOp(\")\")) { do { args.push(or()); } while (isOp(\",\") && ++p); }\n expect(\")\");\n const fn = FUNCS[name];\n if (!fn) throw new Error(`Unknown function ${tk.v}`);\n return fn(args);\n }\n if (name === \"TRUE\") return true;\n if (name === \"FALSE\") return false;\n return ref(tk.v);\n }\n if (tk.v === \"(\") { const v = or(); expect(\")\"); return v; }\n throw new Error(`Unexpected ${tk.v}`);\n };\n const unary = (): Val => {\n if (isOp(\"-\")) { p++; return -num(unary()); }\n if (isOp(\"+\")) { p++; return num(unary()); }\n if (isOp(\"!\")) { p++; return !truthy(unary()); }\n return primary();\n };\n const mul = (): Val => {\n let l = unary();\n while (isOp(\"*\") || isOp(\"/\") || isOp(\"%\")) {\n const op = (tokens[p++] as any).v; const r = unary();\n l = op === \"*\" ? num(l) * num(r) : op === \"/\" ? num(l) / num(r) : num(l) % num(r);\n }\n return l;\n };\n const add = (): Val => {\n let l = mul();\n while (isOp(\"+\") || isOp(\"-\")) {\n const op = (tokens[p++] as any).v; const r = mul();\n if (op === \"+\" && !(isNumeric(l) && isNumeric(r)) && (typeof l === \"string\" || typeof r === \"string\")) {\n l = String(l ?? \"\") + String(r ?? \"\");\n } else {\n l = op === \"+\" ? num(l) + num(r) : num(l) - num(r);\n }\n }\n return l;\n };\n const cmp = (): Val => {\n const l = add();\n for (const op of [\"==\", \"!=\", \">=\", \"<=\", \">\", \"<\", \"=\"]) {\n if (isOp(op)) {\n p++; const r = add();\n switch (op) {\n case \"==\": case \"=\": return eq(l, r);\n case \"!=\": return !eq(l, r);\n case \">=\": return num(l) >= num(r);\n case \"<=\": return num(l) <= num(r);\n case \">\": return num(l) > num(r);\n default: return num(l) < num(r);\n }\n }\n }\n return l;\n };\n const and = (): Val => { let l = cmp(); while (isOp(\"&&\")) { p++; const r = cmp(); l = truthy(l) && truthy(r); } return l; };\n function or(): Val { let l = and(); while (isOp(\"||\")) { p++; const r = and(); l = truthy(l) || truthy(r); } return l; }\n\n const v = or();\n if (p < tokens.length) throw new Error(\"Unexpected trailing input\");\n return v;\n}\n\n/** A field value reduced to what a formula can use. */\nexport function formulaScalar(v: any): Val {\n if (v == null) return null;\n if (Array.isArray(v)) return v.length ? formulaScalar(v[0]) : null;\n if (typeof v === \"object\") return formulaScalar(v.select ?? v.value ?? v.view ?? null);\n if (typeof v === \"number\" || typeof v === \"boolean\") return v;\n return String(v);\n}\n\n/** Legacy formulas reference bare labels — wrap them in {…}, longest first. */\nexport function toBraceFormula(formula: string, labels: string[]): string { return braceLegacyLabels(formula, labels); }\n\nfunction braceLegacyLabels(formula: string, labels: string[]): string {\n if (formula.includes(\"{\")) return formula;\n const sorted = [...labels].filter(Boolean).sort((a, b) => b.length - a.length);\n const esc = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n let out = formula;\n const placeholders: string[] = [];\n sorted.forEach((label) => {\n const re = new RegExp(`(^|[^A-Za-z0-9_{])${esc(label)}(?![A-Za-z0-9_])`, \"g\");\n out = out.replace(re, (_m, pre) => { placeholders.push(label); return `${pre}\\u0000${placeholders.length - 1}\\u0000`; });\n });\n return out.replace(/\\u0000(\\d+)\\u0000/g, (_m, i) => `{${placeholders[Number(i)]}}`);\n}\n\n/**\n * Evaluate `formula` with `valueOf(label)` resolving field references.\n * Returns null when the formula is invalid or the result is not finite.\n */\nexport function evaluateFormula(formula: string, valueOf: (label: string) => any, labels: string[] = []): any {\n if (!formula || !String(formula).trim()) return null;\n try {\n const src = braceLegacyLabels(String(formula), labels);\n const result = parse(tokenize(src), (label) => formulaScalar(valueOf(label)));\n if (result == null) return null;\n if (typeof result === \"boolean\") return result;\n if (typeof result === \"number\") {\n if (!isFinite(result)) return null;\n return Math.round(result * 10000) / 10000;\n }\n return result;\n } catch {\n return null;\n }\n}\n\n/** Labels a formula depends on (for recompute triggers). */\nexport function formulaLabels(formula: string, labels: string[] = []): string[] {\n const src = braceLegacyLabels(String(formula ?? \"\"), labels);\n return [...new Set([...src.matchAll(/\\{([^}]+)\\}/g)].map((m) => m[1].trim()))];\n}\n\n/**\n * True when the platform can evaluate `formula` itself. The submission API\n * re-evaluates INPUT_FORMULA fields and rejects a mismatch (\"Evaluated value\n * \\\"0\\\" and existing value \\\"8000\\\" … do not match\"); it only resolves\n * `{Label}` references — bare labels (`MUL(Qty, Price)`) evaluate to 0 there.\n */\nexport function isServerSafeFormula(formula: string, labels: string[] = []): boolean {\n const f = String(formula ?? \"\");\n if (!f.trim()) return true;\n return braceLegacyLabels(f, labels) === f;\n}\n\n/**\n * Recompute every INPUT_FORMULA cell of one sheet row (references are the\n * child form's labels). Returns a new row; other cells are untouched.\n */\nexport function computeRowFormulas(elements: { elementId: string; label: string; type: string; attributes?: any; properties?: any }[], row: Record<string, any>): Record<string, any> {\n const formulaOf = (e: any) => (e.type === \"INPUT_FORMULA\" || e.attributes?.subType === \"INPUT_FORMULA\") && e.properties?.formula ? String(e.properties.formula) : \"\";\n const cols = elements.filter((e) => formulaOf(e));\n if (!cols.length) return row;\n const labels = elements.map((e) => e.label).filter(Boolean);\n const idOf = new Map(elements.map((e) => [e.label, e.elementId]));\n const out = { ...row };\n // Two passes so a formula may reference another formula column.\n for (let pass = 0; pass < 2; pass++) {\n cols.forEach((c) => {\n const refs = formulaLabels(formulaOf(c), labels);\n const empty = (v: any) => v === null || v === undefined || v === \"\";\n if (refs.length && refs.every((l) => empty(out[idOf.get(l) ?? l]))) { out[c.elementId] = null; return; }\n out[c.elementId] = evaluateFormula(formulaOf(c), (l) => out[idOf.get(l) ?? l], labels);\n });\n }\n return out;\n}\n","/**\n * Field validation. Ported from ZAI-Dashboard `formUtils.ts` (validateField /\n * validateForm / runCustomValidators); expression validators run through the\n * formula parser instead of `new Function`.\n */\nimport type { FormElement, FormValues, FormErrors } from \"./types\";\nimport { resolveFieldType } from \"./normalize\";\nimport { evaluateFormula } from \"./formula\";\n\nconst URL_RE = /^(?:(?:https?|ftp):\\/\\/)?(?:[a-z0-9-]+\\.)+[a-z]{2,}(?::\\d{2,5})?(?:[/?#]\\S*)?$/i;\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n/** Types that are layout, display or actions — never validated. */\nexport const NON_INPUT_TYPES = new Set([\n \"COLLAPSE_SECTION\", \"GROUP_VIEW\", \"CONTAINER\", \"STEPPER\", \"TAB\",\n \"TEXT_VIEW\", \"INPUT_AUTONUMBER\", \"INPUTSHEET_AUTONUMBER\",\n \"INPUT_CREATEDAT\", \"INPUT_MODIFIEDAT\", \"INPUT_CREATEDBY\", \"INPUT_MODIFIEDBY\",\n \"TABLE_START\", \"MATRIX\", \"ACTION_BUTTON\", \"INPUT_TRIGGER\", \"CASCADED_ACTIONS\",\n \"ON_BEHALF_OF\", \"INPUT_FORMULA\", \"INPUT_IP\", \"INPUT_DEVICE_INFO\",\n]);\n\nfunction isValidPhone(value: string, countryCode?: string): boolean {\n const s = String(value).replace(/[\\s\\-()]/g, \"\");\n if (countryCode && s.startsWith(countryCode)) {\n const local = s.slice(countryCode.length);\n return /^\\d{6,14}$/.test(local);\n }\n return /^\\+?[1-9]\\d{6,14}$/.test(s);\n}\n\nconst isEmptyValue = (v: any) =>\n v === null || v === undefined || v === \"\" || (Array.isArray(v) && (v.length === 0 || v.every((x) => x == null || x === \"\")));\n\n/** True when HTML has no text and no media (blank rich-text editor). */\nexport function isBlankHtml(html: string): boolean {\n if (/<(img|video|iframe|table|hr)\\b/i.test(html)) return false;\n return html.replace(/<[^>]*>/g, \"\").replace(/ | |\\u00a0/gi, \"\").trim() === \"\";\n}\n\nexport function validateField(el: FormElement, value: any, required = el.required): string | undefined {\n const t = resolveFieldType(el);\n const name = el.label || el.elementId;\n const comment = el.properties?.comment;\n if (comment?.type === \"error\" && comment?.message) return String(comment.message);\n\n if (t === \"CHECK_BOX\") return required && value !== true ? `${name} is required` : undefined;\n // Rich text: an editor left blank still holds markup (\"<p><br></p>\", \" \"). ZAI normalises that to \"\".\n const blank = isEmptyValue(value) || (t === \"RICH_TEXT_EDITOR\" && typeof value === \"string\" && isBlankHtml(value));\n if (required && blank) return `${name} is required`;\n if (blank) return undefined;\n\n // ABA widgets need a minimum number of recorded trials (zvolv-web z-form.component / ZAI formUtils).\n if ((t === \"INPUT_PERCENT_CORRECT\" || t === \"INPUT_TIME_SAMPLING\") && value && typeof value === \"object\") {\n const min = Number(el.properties?.minimumNumberOfTrials ?? 0);\n const n = Array.isArray(value.buttonResp) ? value.buttonResp.length : 0;\n if (min > 0 && n < min) return `Trials are less than ${min}`;\n }\n if (t === \"INPUT_EMAIL\" && !EMAIL_RE.test(String(value))) return \"Enter a valid email address\";\n if (t === \"INPUT_URL\" && !URL_RE.test(String(value))) return \"Enter a valid URL\";\n if (t === \"INPUT_PHONE\" && !isValidPhone(String(value), el.properties?.countryCode)) return \"Enter a valid phone number\";\n\n const numeric = [\"INPUT_NUMBER\", \"INPUT_CURRENCY\", \"INPUT_PERCENT\", \"RATING_BAR\", \"PROGRESS_BAR\", \"INPUT_RATE\"].includes(t);\n if (numeric) {\n const n = Number(value);\n if (Number.isNaN(n)) return \"Enter a number\";\n if (t === \"INPUT_PERCENT\" && (n < 0 || n > 100)) return \"Value must be between 0 and 100\";\n const p = el.properties ?? {};\n const min = p.minVal ?? p.min;\n const max = p.maxVal ?? p.max;\n if (min !== undefined && min !== null && min !== \"\" && n < Number(min)) return `Minimum value is ${min}`;\n if (max !== undefined && max !== null && max !== \"\" && n > Number(max)) return `Maximum value is ${max}`;\n }\n if (t === \"INPUT_DATE_RANGE\" && Array.isArray(value) && value[0] && value[1] && String(value[0]) > String(value[1])) {\n return \"End date must be after the start date\";\n }\n const maxLen = el.properties?.maxLength ?? (t === \"RICH_TEXT_EDITOR\" ? el.properties?.max ?? el.attributes?.charactersCount : undefined);\n if (maxLen && typeof value === \"string\" && value.replace(/<[^>]+>/g, \"\").length > Number(maxLen)) {\n return `Maximum ${maxLen} characters`;\n }\n // Expression validators run client-side; trigger validators via runRemoteValidators.\n for (const v of el.validations ?? []) {\n const kind = String(v?.type ?? v?.validationType ?? \"\").toLowerCase();\n if (kind === \"expression\" && v.expression) {\n const ok = evaluateFormula(v.expression, (label) => (label === el.label ? value : undefined), [el.label]);\n if (ok === false || ok === 0 || ok === null) return v.errorMessage ?? v.message ?? \"Validation failed\";\n }\n if (kind === \"regex\" && v.pattern) {\n try { if (!new RegExp(v.pattern).test(String(value))) return v.errorMessage ?? v.message ?? \"Invalid format\"; } catch { /* bad pattern */ }\n }\n }\n return undefined;\n}\n\nexport function validateForm(\n elements: FormElement[], values: FormValues,\n state: (el: FormElement) => { hidden: boolean; required: boolean } = (el) => ({ hidden: el.hidden, required: el.required }),\n): FormErrors {\n const errors: FormErrors = {};\n elements.forEach((el) => {\n if (NON_INPUT_TYPES.has(resolveFieldType(el))) return;\n const s = state(el);\n if (s.hidden) return;\n const err = validateField(el, values[el.elementId], s.required);\n if (err) errors[el.elementId] = err;\n });\n return errors;\n}\n\n/** Elements with automation-backed (`type: \"Trigger\"`) validators. */\nexport function remoteValidators(el: FormElement): any[] {\n return (el.validations ?? []).filter((v: any) => String(v?.type ?? v?.validationType ?? \"\").toLowerCase() === \"trigger\");\n}\n\n/**\n * Sheet row validation, as ZAI-Dashboard sheetUtils.validateSheetRows: hidden,\n * disabled and non-input columns are skipped, and saved rows the user hasn't\n * touched aren't re-checked.\n */\nexport function sheetCellChecked(col: FormElement): boolean {\n return !col.hidden && !col.disabled && !NON_INPUT_TYPES.has(resolveFieldType(col));\n}\nexport function sheetRowNeedsCheck(row: any): boolean {\n return !!row && typeof row === \"object\" && row.OperationType !== \"DELETE\" && !(row._submissionId && !row._dirty);\n}\n","/**\n * Value lifecycle: empty values, initial values, and the exact wire format for\n * submissions and automation triggers. Ported from ZAI-Dashboard\n * `formUtils.ts` / `formApi.ts` (serializeElementValue, buildSubmissionElements,\n * buildTriggerBody) — the byte shape the Zvolv backend expects.\n *\n * In-memory value shapes (what `field.value` holds and `setValue` accepts):\n * text / email / phone / url / richtext / signature(data URL) → string\n * number / currency / percent / rating / slider / formula → number | null\n * select / radio → the option value; checkbox → boolean\n * lookup → [{ view, select, extraLabels }] (one object when single-select)\n * user → id string (or string[] when multi)\n * date \"YYYY-MM-DD\" · time \"HH:mm[:ss]\" · datetime ISO / \"YYYY-MM-DDTHH:mm\" · daterange [start, end]\n * file → uploaded records [{ media_name, media_type, media, media_size }]\n * sheet → row objects { _submissionId?, <elementId>: value }\n */\nimport dayjs from \"dayjs\";\nimport type { FormElement, FormValues } from \"./types\";\nimport { resolveFieldType } from \"./normalize\";\nimport { isBlankHtml } from \"./validate\";\n\nexport const RELATIONAL_TYPES = new Set([\"FORM_SEARCH\", \"INPUT_TAG\", \"EXTERNAL_API\"]);\n\n/** Types never sent in a submission body. */\nexport const SUBMISSION_SKIP_TYPES = new Set([\n \"COLLAPSE_SECTION\", \"CONTAINER\", \"STEPPER\", \"TAB\", \"GROUP_VIEW_LAYOUT\",\n \"INPUT_AUTONUMBER\", \"INPUTSHEET_AUTONUMBER\",\n \"INPUT_CREATEDAT\", \"INPUT_MODIFIEDAT\", \"INPUT_CREATEDBY\", \"INPUT_MODIFIEDBY\",\n \"TABLE_START\", \"MATRIX\", \"ACTION_BUTTON\", \"INPUT_TRIGGER\", \"CASCADED_ACTIONS\", \"COMMENTS\",\n]);\n\nexport function getEmptyValue(type: string): any {\n switch (type) {\n case \"CHECK_BOX\": return false;\n case \"INPUT_NUMBER\": case \"INPUT_CURRENCY\": case \"INPUT_PERCENT\": case \"INPUT_FORMULA\":\n case \"RATING_BAR\": case \"PROGRESS_BAR\": case \"INPUT_RATE\": case \"INPUT_TIMER\":\n return null;\n case \"INPUT_DATE_RANGE\": return [null, null];\n case \"INPUT_SHEET\": case \"NESTED_FORM\": case \"INPUT_CHILD_WIDGET\": case \"INPUT_SHEET_INVOICE\":\n case \"COMMENTS\": case \"FILE_UPLOAD_V2\": case \"UPLOAD_FILE_IMAGE\": case \"MEDIA_UPLOAD\":\n return [];\n case \"COLLAPSE_SECTION\": case \"CONTAINER\": case \"GROUP_VIEW\": case \"STEPPER\": case \"TAB\":\n case \"SIGNATURE\": case \"TABLE_START\": case \"MATRIX\":\n case \"INPUT_TIME_SAMPLING\": case \"INPUT_PERCENT_CORRECT\": case \"INPUT_TASK_ANALYSIS\":\n return null;\n default: return \"\";\n }\n}\n\nexport function maxResultsOf(el: FormElement): number {\n const p = el.properties ?? {};\n return Number(p.metaData?.MaxResults ?? p.dataSource?.MaxResults ?? p.maxResults ?? 1) || 1;\n}\n\n/** Single-select relational fields store one object instead of an array. */\nexport function isSingleLookup(el: FormElement): boolean {\n return maxResultsOf(el) === 1;\n}\n\n/** `'a|||b'`, scalars and option objects → the {view, select, extraLabels} shape. */\nexport function toRelational(el: FormElement, raw: any): any {\n if (raw == null || raw === \"\") return raw;\n const out: any[] = [];\n const push = (v: any) => {\n if (v && typeof v === \"object\" && (\"view\" in v || \"select\" in v)) out.push({ extraLabels: [], ...v, view: v.view ?? v.select, select: v.select ?? v.view });\n else out.push({ view: String(v), select: String(v), extraLabels: [] });\n };\n if (typeof raw === \"string\") raw.split(\"|||\").forEach(push);\n else if (Array.isArray(raw)) raw.forEach(push);\n else push(raw);\n return isSingleLookup(el) ? out[0] ?? null : out;\n}\n\nconst has = (v: any) => v !== undefined && v !== null && v !== \"\" && !(Array.isArray(v) && v.length === 0);\n\n/** Prefill from attributes.dynamicDefault (ADD today+offset, CURRENT_USER_ROLE). */\nconst DATE_UNITS: Record<string, dayjs.ManipulateType> = {\n day: \"day\", days: \"day\", week: \"week\", weeks: \"week\", month: \"month\", months: \"month\",\n year: \"year\", years: \"year\", hour: \"hour\", hours: \"hour\", minute: \"minute\", minutes: \"minute\",\n};\n\n/** The id ON_BEHALF_OF stores: the signed-in user's id (ZAI OnBehalfOfField / zvolv-web z-on-behalf-of). */\nexport function currentUserId(user: any): string | undefined {\n const id = user?.userId ?? user?.UserID ?? user?.id;\n return id != null && id !== \"\" && !String(id).startsWith(\"enc::\") ? String(id) : undefined;\n}\n\nfunction dynamicDefault(el: FormElement, user: any): any {\n const dd = el.attributes?.dynamicDefault ?? el.attributes?.DynamicDefault ?? el.properties?.dynamicDefault;\n if (!dd?.operator) return undefined;\n const t = resolveFieldType(el);\n // ZAI DatePickerField / zvolv-web ZFormService: ADD or SUB, any unit key; a bare number means days.\n if ((dd.operator === \"ADD\" || dd.operator === \"SUB\") && (t === \"DATE_PICKER\" || t === \"DATE_TIME_PICKER\")) {\n const sign = dd.operator === \"SUB\" ? -1 : 1;\n let d = dayjs();\n const u = dd.units;\n if (typeof u === \"number\" || (typeof u === \"string\" && u.trim() !== \"\" && !isNaN(Number(u)))) d = d.add(sign * Number(u), \"day\");\n else Object.entries(u ?? {}).forEach(([k, n]) => {\n const unit = DATE_UNITS[k.toLowerCase()];\n if (unit && Number(n)) d = d.add(sign * Number(n), unit);\n });\n return t === \"DATE_PICKER\" ? d.format(\"YYYY-MM-DD\") : d.format(\"YYYY-MM-DDTHH:mm\");\n }\n if (dd.operator === \"CURRENT_USER_ROLE\" && user && t !== \"ON_BEHALF_OF\") {\n // zvolv-web z-auto-search: only when the role search is not pinned to one group.\n const pinned = el.properties?.jsonData?.ExtraParams?.GroupID;\n if (pinned != null && Number(pinned) !== -1) return undefined;\n const id = user.userGroupId ?? user.profile?.userGroupId ?? user.id;\n if (id == null) return undefined;\n return maxResultsOf(el) > 1 ? [String(id)] : String(id);\n }\n return undefined;\n}\n\n/**\n * Initial values: explicit defaults win, then a loaded submission value, then\n * the element's defaultValue / dynamicDefault, then the type's empty value.\n */\nexport function buildInitialValues(\n elements: FormElement[],\n opts: { defaults?: FormValues; submission?: FormValues; user?: any } = {},\n): FormValues {\n const { defaults = {}, submission, user } = opts;\n const values: FormValues = {};\n elements.forEach((el) => {\n const id = el.elementId;\n const t = resolveFieldType(el);\n const shape = (v: any) => (RELATIONAL_TYPES.has(t) ? toRelational(el, v) : v);\n if (has(defaults[id]) || defaults[id] === false || defaults[id] === 0) values[id] = shape(defaults[id]);\n else if (defaults[el.label] !== undefined && has(defaults[el.label])) values[id] = shape(defaults[el.label]);\n else if (submission && id in submission) values[id] = submission[id];\n else if (t === \"TEXT_VIEW\") values[id] = el.defaultValue ?? \"\";\n else if (has(el.defaultValue) || el.defaultValue === 0 || el.defaultValue === false) values[id] = shape(el.defaultValue);\n else {\n // ON_BEHALF_OF always seeds the signed-in user's id (never a role id from dynamicDefault).\n const dyn = submission || t === \"ON_BEHALF_OF\" ? undefined : dynamicDefault(el, user);\n values[id] = dyn !== undefined ? dyn : t === \"ON_BEHALF_OF\" ? currentUserId(user) ?? getEmptyValue(t) : getEmptyValue(t);\n }\n if (t === \"CHECK_BOX\") values[id] = values[id] === true || values[id] === \"true\" || values[id] === \"1\" || values[id] === 1;\n });\n return values;\n}\n\nfunction formatDateish(t: string, value: any): any {\n const isDayjs = (v: any) => v && typeof v === \"object\" && typeof v.isValid === \"function\" && typeof v.format === \"function\";\n const toD = (v: any) => (isDayjs(v) ? v : v instanceof Date ? dayjs(v) : typeof v === \"string\" && v ? dayjs(v) : null);\n if (t === \"DATE_PICKER\") { const d = toD(value); return d?.isValid() ? d.format(\"YYYY-MM-DD\") : value; }\n if (t === \"TIME_PICKER\") {\n if (typeof value === \"string\" && /^\\d{1,2}:\\d{2}(:\\d{2})?$/.test(value)) return value.length <= 5 ? `${value.padStart(5, \"0\")}:00` : value;\n const d = toD(value); return d?.isValid() ? d.format(\"HH:mm:ss\") : value;\n }\n if (t === \"DATE_TIME_PICKER\") { const d = toD(value); return d?.isValid() ? d.toISOString() : value; }\n if (t === \"INPUT_DATE_RANGE\" && Array.isArray(value)) {\n return value.map((v) => { const d = toD(v); return d?.isValid() ? d.toISOString() : v ?? null; });\n }\n return value;\n}\n\nconst FILE_TYPES = new Set([\"UPLOAD_FILE_IMAGE\", \"FILE_UPLOAD_V2\", \"MEDIA_UPLOAD\"]);\n\n/** One element's value in the POST/PUT /api/v1/submissions body. */\nexport function serializeElementValue(el: FormElement, value: any): any {\n const t = resolveFieldType(el);\n if (t === \"ACTION_BUTTON\" || t === \"INPUT_TRIGGER\" || t === \"CASCADED_ACTIONS\") {\n return value === \"\" || value === undefined ? null : value;\n }\n const keepEmpty = new Set([\"PROGRESS_BAR\", \"CHECK_BOX\", \"INPUT_NUMBER\", \"INPUT_FORMULA\", \"INPUT_SHEET\", \"NESTED_FORM\", \"INPUT_CHILD_WIDGET\", \"INPUT_SHEET_INVOICE\", ...FILE_TYPES]);\n if (!keepEmpty.has(t) && !value && value !== 0) return null;\n\n value = formatDateish(t, value);\n if (t === \"INPUT_DATE_RANGE\" && Array.isArray(value) && value.every((v) => v == null)) return null;\n\n if (t === \"RICH_TEXT_EDITOR\" && typeof value === \"string\" && isBlankHtml(value)) return null;\n if ((t === \"SPINNER\" || t === \"RADIO_GROUP\") && value && typeof value === \"object\") value = value.select ?? value.value ?? value.view;\n if (t === \"CHECK_BOX\") return !!value;\n if (t === \"INPUT_NUMBER\") {\n if (value === null || value === undefined || value === \"\") return null;\n const p = el.properties ?? {};\n const decimal = (typeof p.format === \"object\" && p.format?.type === \"Decimal\") || p.precision || String(value).includes(\".\");\n const n = decimal ? parseFloat(String(value)) : parseInt(String(value), 10);\n return Number.isNaN(n) ? null : n;\n }\n if (t === \"INPUT_CURRENCY\" || t === \"INPUT_PERCENT\" || t === \"PROGRESS_BAR\" || t === \"RATING_BAR\" || t === \"INPUT_RATE\") {\n if (value === null || value === undefined || value === \"\") return null;\n const n = parseFloat(String(value));\n return Number.isNaN(n) ? null : n;\n }\n if (FILE_TYPES.has(t)) {\n if (!Array.isArray(value)) return null;\n const out = value\n .filter((f: any) => f && typeof f === \"object\" && !(typeof File !== \"undefined\" && f instanceof File) && !f.uploading)\n .map((f: any) => (f.media_name || f.mediaName || f.mediaKey ? f : { media_name: f.name ?? \"\", media_type: f.type ?? \"\", media: f.url ?? \"\", media_size: f.size ?? 0 }));\n return out.length ? out : null;\n }\n if (RELATIONAL_TYPES.has(t)) {\n if (!has(value)) return null;\n return (Array.isArray(value) ? value : [value]).map((v: any) =>\n v && typeof v === \"object\" ? (\"extraLabels\" in v ? v : { extraLabels: [], ...v }) : { extraLabels: [], select: String(v), view: String(v) });\n }\n if (t === \"AUTO_COMPLETE\") {\n if (!has(value)) return null;\n const arr = (Array.isArray(value) ? value : [value]).map((v: any) => (typeof v === \"object\" ? v?.select ?? v?.value ?? v : v));\n if (el.properties?.searchType === \"ROLE_AUTO_SEARCH\") {\n const key = `auto_parent_${el.elementId}`;\n return { [key]: Object.fromEntries(arr.map((v: any) => [String(v), String(v)])) };\n }\n return arr;\n }\n if (t === \"GROUP_VIEW\" && el.attributes?.subType !== \"INPUT_CARD_CONTAINER\") return value != null ? JSON.stringify(value) : null;\n if (t === \"INPUT_SHEET\") return rowSubmissionIds(value);\n if (t === \"INPUT_CHILD_WIDGET\") return { values: rowSubmissionIds(value), properties: el.properties ?? {}, type: t };\n return value;\n}\n\n/** Sheet rows → their child submission ids. */\nexport function rowSubmissionIds(raw: any): string[] {\n const arr = Array.isArray(raw) ? raw : Array.isArray(raw?.values) ? raw.values : [];\n return arr\n .map((r: any) => (typeof r === \"string\" || typeof r === \"number\" ? String(r) : r?._submissionId ?? r?.formSubmissionId ?? r?.submissionId ?? r?.FormSubmissionID))\n .filter((x: any) => x != null && x !== \"\")\n .map(String);\n}\n\nconst collapseOptions = (el: FormElement) => {\n const p = el.properties;\n if (!p || !Array.isArray(p.options)) return p;\n return { ...p, options: p.options.map((o: any) => (o && typeof o === \"object\" && o.select ? o.select : o)) };\n};\n\n/** `elements[]` for POST/PUT /api/v1/submissions. */\nexport function buildSubmissionElements(elements: FormElement[], values: FormValues): any[] {\n return elements\n .filter((el) => !SUBMISSION_SKIP_TYPES.has(resolveFieldType(el)))\n .map((el) => {\n const t = resolveFieldType(el);\n const out: any = { elementId: el.elementId, value: serializeElementValue(el, values[el.elementId]) };\n if (t !== \"INPUT_SHEET\") out.properties = collapseOptions(el);\n return out;\n });\n}\n\n/**\n * Flat `{ formID, formSubmissionId, <elementId>: value }` body for automation\n * triggers — intentionally looser than the submission format (Angular parity).\n */\nexport function buildTriggerBody(\n elements: FormElement[], values: FormValues,\n opts: { formId?: string; submissionId?: string | null; byLabel?: boolean } = {},\n): Record<string, any> {\n const body: Record<string, any> = { formID: opts.formId ?? \"\", formSubmissionId: opts.submissionId ?? null };\n elements.forEach((el) => {\n const t = resolveFieldType(el);\n const key = opts.byLabel ? el.label || el.elementId : el.elementId;\n let v = values[el.elementId];\n if (t === \"INPUT_SHEET\" || t === \"INPUT_CHILD_WIDGET\") {\n v = (Array.isArray(v) ? v : []).map((row: any) => {\n if (row == null || typeof row !== \"object\") return { formSubmissionId: row == null ? null : String(row) };\n const { _submissionId, _rowKey, _editing, ...cells } = row;\n return { formSubmissionId: _submissionId ?? row.formSubmissionId ?? null, ...cells };\n });\n } else if (v === null || v === undefined || v === \"\") {\n v = [\"PROGRESS_BAR\", \"CHECK_BOX\", \"INPUT_NUMBER\", \"INPUT_FORMULA\"].includes(t) ? v ?? null : null;\n } else {\n v = formatDateish(t, v);\n if (t === \"AUTO_COMPLETE\" || RELATIONAL_TYPES.has(t)) v = Array.isArray(v) ? v : [v];\n else if (t === \"GROUP_VIEW\") v = JSON.stringify(v);\n }\n body[key] = v;\n });\n return body;\n}\n\n/** Human-readable value, for read-only views and summaries. */\nexport function formatFieldValue(el: FormElement, value: any): string {\n if (value === null || value === undefined || value === \"\") return \"\";\n const t = resolveFieldType(el);\n if (t === \"CHECK_BOX\") return value ? \"Yes\" : \"No\";\n if (RELATIONAL_TYPES.has(t)) return (Array.isArray(value) ? value : [value]).map((v: any) => v?.view ?? v?.select ?? String(v)).join(\", \");\n if (t === \"INPUT_DATE_RANGE\" && Array.isArray(value)) return value.filter(Boolean).map((v) => dayjs(v).format(\"D MMM YYYY\")).join(\" – \");\n if (t === \"DATE_PICKER\") return dayjs(value).isValid() ? dayjs(value).format(\"D MMM YYYY\") : String(value);\n if (t === \"DATE_TIME_PICKER\") return dayjs(value).isValid() ? dayjs(value).format(\"D MMM YYYY, HH:mm\") : String(value);\n if (t === \"INPUT_PERCENT\") return `${value}%`;\n if (Array.isArray(value)) return value.map((v: any) => v?.media_name ?? v?.view ?? String(v)).join(\", \");\n return String(value);\n}\n","/**\n * Conditional logic: `dependencies[]` rules live on the DRIVING element and\n * target another field or container. Ported from ZAI-Dashboard\n * ZFormRenderer `applyDependencies` / `depMatches` / `evaluateCondition`.\n */\nimport type { FormElement, FormValues } from \"./types\";\n\nexport interface RuleOverride { isHidden?: boolean; isDisabled?: boolean; isRequired?: boolean }\n\nfunction scalar(v: any): string {\n if (v === null || v === undefined) return \"\";\n if (Array.isArray(v)) return v.map(scalar).join(\",\");\n if (typeof v === \"object\") return String(v.select ?? v.view ?? v.value ?? JSON.stringify(v));\n return String(v);\n}\n\nfunction evaluateCondition(cond: any, values: FormValues): boolean {\n const lhsRaw = values[cond.elementId ?? cond.dependencyElementId];\n const lhs = scalar(lhsRaw);\n const rhs = String(cond.value ?? cond.conditionValue ?? \"\");\n switch (cond.operator ?? cond.conditionOperator ?? \"equals\") {\n case \"equals\": case \"eq\": case \"=\": return lhs === rhs;\n case \"not_equals\": case \"ne\": case \"!=\": return lhs !== rhs;\n case \"contains\": case \"regex\": return lhs.toLowerCase().includes(rhs.toLowerCase());\n case \"not_contains\": return !lhs.toLowerCase().includes(rhs.toLowerCase());\n case \"greater_than\": case \"gt\": return Number(lhs) > Number(rhs);\n case \"less_than\": case \"lt\": return Number(lhs) < Number(rhs);\n case \"is_empty\": return !lhsRaw && lhsRaw !== 0 && lhsRaw !== false;\n case \"is_not_empty\": return !!(lhsRaw || lhsRaw === 0 || lhsRaw === false);\n case \"in_array\": {\n const arr = Array.isArray(lhsRaw) ? lhsRaw.map(scalar) : [lhs];\n const want = Array.isArray(cond.value) ? cond.value.map(String) : [rhs];\n return want.some((w: string) => arr.includes(w));\n }\n default:\n if (Array.isArray(cond.value)) {\n const src = Array.isArray(lhsRaw) ? lhsRaw.map(scalar).sort().join(\",\") : lhs;\n return cond.value.map(String).sort().join(\",\") === src;\n }\n return lhs === rhs;\n }\n}\n\nfunction sameSet(a: string[], b: string[]) {\n return [...a].sort().join(\",\") === [...b].sort().join(\",\");\n}\n\n/** Does `dep` (declared on `src`) match the current values? */\nexport function ruleMatches(src: FormElement, dep: any, values: FormValues): boolean {\n const conditions: any[] = dep.conditions ?? dep.Conditions ?? [];\n if (conditions.length) {\n const op = String(dep.conditionOperator ?? dep.operator ?? \"AND\").toUpperCase();\n const r = conditions.map((c) => evaluateCondition(c, values));\n return op === \"OR\" ? r.some(Boolean) : r.every(Boolean);\n }\n const v = values[src.elementId];\n if (src.type === \"FORM_SEARCH\" || src.type === \"INPUT_TAG\") {\n const sel = (Array.isArray(v) ? v : v ? [v] : []).map(scalar).filter(Boolean);\n if (Array.isArray(dep.value)) return sameSet(dep.value.map(String), sel);\n return sel.length === 1 && sel[0] === String(dep.value ?? \"\");\n }\n if (Array.isArray(dep.value)) {\n // ZAI depMatches: the selected set must equal the rule's set exactly (sorted).\n const arr = Array.isArray(v) ? v.map(scalar) : [scalar(v)];\n return sameSet(dep.value.map(String), arr);\n }\n return valueEquals(v, dep.value);\n}\n\n/** ZAI depValueEquals: typed comparison, string fallback. */\nfunction valueEquals(v: any, want: any): boolean {\n if (v !== null && typeof v === \"object\") return scalar(v) === String(want ?? \"\");\n if (typeof v === \"boolean\" || typeof want === \"boolean\") {\n // Platform rules often store booleans as \"true\"/\"false\" strings.\n const b = (x: any) => (x === true || x === \"true\" ? \"true\" : x === false || x === \"false\" ? \"false\" : String(x ?? \"\"));\n return b(v) === b(want);\n }\n if (typeof v === typeof want) return v === want;\n if (typeof v === \"string\" || typeof want === \"string\") return scalar(v) === String(want ?? \"\");\n return v === want;\n}\n\nexport function rulesOf(el: FormElement): any[] {\n const triage = el.properties?.triage;\n const fromTriage = triage ? (Array.isArray(triage) ? triage : [triage]) : [];\n const deps = el.dependencies ? (Array.isArray(el.dependencies) ? el.dependencies : [el.dependencies]) : [];\n return (fromTriage.length ? fromTriage : deps).filter(Boolean);\n}\n\n/**\n * Hidden / disabled / required overrides per target elementId. A matching rule\n * for a target wins over a non-matching one on the same aspect (Angular's\n * \"perfect match\" semantics).\n */\nexport function applyRules(elements: FormElement[], values: FormValues): Map<string, RuleOverride> {\n const out = new Map<string, RuleOverride>();\n const matched = new Set<string>();\n elements.forEach((el) => {\n rulesOf(el).forEach((dep) => {\n const action = String(dep.dependencyType ?? dep.type ?? \"\");\n const target = String(dep.elementId ?? dep.targetElementId ?? \"\");\n if (!action || !target || action === \"FETCH_OPTIONS_FILTERS\") return;\n const aspect: keyof RuleOverride | null =\n action.startsWith(\"SHOW\") || action.startsWith(\"HIDE\") ? \"isHidden\"\n : action.startsWith(\"MARK\") ? \"isRequired\"\n : action === \"EDITABLE\" || action === \"NON_EDITABLE\" ? \"isDisabled\" : null;\n if (!aspect) return;\n const value =\n action.startsWith(\"SHOW\") ? false : action.startsWith(\"HIDE\") ? true\n : action.startsWith(\"MARK_MANDATORY\") ? true : action.startsWith(\"MARK_NON\") ? false\n : action === \"NON_EDITABLE\";\n const key = `${target}:${aspect}`;\n const cur = out.get(target) ?? {};\n if (ruleMatches(el, dep, values)) {\n out.set(target, { ...cur, [aspect]: value });\n matched.add(key);\n } else if (!matched.has(key) && !(aspect in cur)) {\n // No match: the element's own hidden / disabled / required applies.\n out.set(target, { ...cur });\n }\n });\n });\n return out;\n}\n\nconst LOOKUP_TYPES = new Set([\"FORM_SEARCH\", \"INPUT_TAG\", \"EXTERNAL_API\", \"INPUT_SEARCH\"]);\nconst isLookupEl = (el: FormElement) =>\n LOOKUP_TYPES.has(String(el.type)) || LOOKUP_TYPES.has(String(el.attributes?.subType ?? \"\"));\nconst isOptionFilter = (dep: any) => String(dep?.type ?? dep?.dependencyType ?? \"\") === \"FETCH_OPTIONS_FILTERS\";\nconst masterOf = (dep: any): string | undefined => dep?.masterField ?? dep?.masterFieldLabel ?? dep?.MasterFieldLabel;\n\n/**\n * FETCH_OPTIONS_FILTERS rules that narrow `targetId`'s lookup options:\n * [{ elementId: <source field>, masterField: <label on the lookup's source form> }].\n *\n * Platform shape (zvolv-web ZFormService.listenDependencies, ZAI-Dashboard\n * FormSearchField.buildDependencyFilters): the rule sits ON THE LOOKUP being\n * filtered; `elementId` is the field whose value is the filter, `masterField`\n * the label matched on the lookup's source form.\n *\n * Legacy shape (this library's earlier `cascade()`): the rule sits on a\n * NON-lookup driver and `elementId` is the lookup to filter. The platform never\n * reads FETCH_OPTIONS_FILTERS on a non-lookup, so the two cannot be confused.\n */\nexport function optionFilterRules(elements: FormElement[], targetId: string): { elementId: string; masterField: string }[] {\n const out: { elementId: string; masterField: string }[] = [];\n const target = elements.find((e) => e.elementId === targetId);\n if (target && isLookupEl(target)) {\n rulesOf(target).forEach((dep) => {\n const src = String(dep?.elementId ?? dep?.dependencyElementId ?? \"\");\n const master = masterOf(dep);\n if (isOptionFilter(dep) && src && src !== targetId && master) out.push({ elementId: src, masterField: master });\n });\n }\n elements.forEach((el) => {\n if (el.elementId === targetId || isLookupEl(el)) return;\n rulesOf(el).forEach((dep) => {\n const master = masterOf(dep);\n if (isOptionFilter(dep) && String(dep.elementId) === targetId && master) out.push({ elementId: el.elementId, masterField: master });\n });\n });\n return out;\n}\n","/**\n * Form transport — every network call the form engine makes, against the\n * logged-in @zestl/zvolv-js-sdk client. Endpoints and bodies are ported from\n * ZAI-Dashboard `formApi.ts` / `FormSearchField.tsx` / `FileUploadField.tsx`.\n */\nimport type { FieldOption, FormDefinition, FormElement, FormValues } from \"./types\";\nimport { normaliseForm, submissionToValues } from \"./normalize\";\nimport { buildSubmissionElements, serializeElementValue, maxResultsOf } from \"./values\";\n\nexport const isLegacyId = (id: any): boolean => String(id ?? \"\").length > 0 && !isNaN(Number(id));\n\nconst wfOf = (client: any) => client?.workflow;\nconst businessTag = (client: any): string => wfOf(client)?.workspaceInstance?.businessTagId ?? \"\";\n\nasync function raw(client: any, method: string, url: string, data?: any, v2 = false): Promise<any> {\n const wf = wfOf(client);\n if (!wf?.httpClient) {\n if (wf?.handleRequest) return wf.handleRequest(method, url, data, v2);\n throw new Error(\"Zvolv client has no HTTP transport\");\n }\n const headers = { ...(await wf.getHeaders(v2)) };\n if (typeof FormData !== \"undefined\" && data instanceof FormData) { delete headers[\"Content-Type\"]; delete headers[\"content-type\"]; }\n const res = await wf.httpClient.request({ method, url, data, headers });\n if (!res?.data || res.data.error === true) throw new Error(res?.data?.message ?? \"Request failed\");\n return res.data;\n}\n\n// ── Definitions & submissions ───────────────────────────────────────────────\n\nexport async function fetchForm(client: any, formId: string): Promise<FormDefinition> {\n if (isLegacyId(formId)) {\n const data = await raw(client, \"get\", `/rest/v17/org/${businessTag(client)}/workflow/forms/all/${formId}`);\n return normaliseForm(data?.data ?? data, formId);\n }\n return normaliseForm(await wfOf(client).getSingleForm(formId), formId);\n}\n\n/** EDIT / DISABLED: the submission carries its own element list plus values. */\nexport async function fetchSubmission(client: any, submissionId: string): Promise<{ form: FormDefinition | null; values: FormValues }> {\n const data = await wfOf(client).getSingleSubmission(submissionId);\n let form: FormDefinition | null = null;\n try { const f = normaliseForm(data); if (f.elements.length) form = f; } catch { form = null; }\n return { form, values: submissionToValues(data) };\n}\n\nexport interface SubmitOptions { skipAutomation?: boolean; skipValidations?: boolean; parentSubmissionId?: string }\n\nasync function submitLegacy(client: any, method: \"post\" | \"put\", formId: string, submissionId: string, elements: FormElement[], values: FormValues) {\n const body: Record<string, any> = {};\n elements.forEach((el) => { body[el.id ?? el.elementId] = serializeElementValue(el, values[el.elementId]); });\n return raw(client, method, `/rest/v17/${businessTag(client)}/forms/${formId}/submissions/${submissionId}`, body);\n}\n\n/** Pulls the created submission id out of either API generation's response. */\nexport function submissionIdOf(res: any): string | null {\n const sub = res?.elements?.[0] ?? res?.data?.elements?.[0] ?? res?.data ?? res;\n const id = sub?.id ?? sub?.formSubmissionId ?? sub?.FormSubmissionID ?? sub?._id;\n return id != null && id !== \"\" ? String(id) : null;\n}\n\nexport async function createSubmission(client: any, form: FormDefinition, elements: FormElement[], values: FormValues, opts: SubmitOptions = {}) {\n if (isLegacyId(form.uuid)) return submitLegacy(client, \"post\", form.uuid, \"\", elements, values);\n const body: any = { formId: form.uuid, elements: buildSubmissionElements(elements, values) };\n if (opts.skipAutomation) body.skipAutomation = true;\n if (opts.skipValidations) body.skipValidations = true;\n if (opts.parentSubmissionId) body.parentFormSubmissionId = opts.parentSubmissionId;\n return wfOf(client).handleRequest(\"post\", \"/api/v1/submissions\", body, true);\n}\n\nexport async function updateSubmission(client: any, form: FormDefinition, submissionId: string, elements: FormElement[], values: FormValues, opts: SubmitOptions = {}) {\n if (isLegacyId(submissionId)) return submitLegacy(client, \"put\", form.uuid, submissionId, elements, values);\n const body: any = { formId: form.uuid, elements: buildSubmissionElements(elements, values) };\n if (opts.skipAutomation) body.skipAutomation = true;\n if (opts.skipValidations) body.skipValidations = true;\n return wfOf(client).handleRequest(\"put\", `/api/v1/submissions/${submissionId}`, body, true);\n}\n\n/** Loads sheet rows (child submissions) by id, in the given order. */\nexport async function fetchRows(client: any, childFormId: string, ids: string[]): Promise<Record<string, any>[]> {\n if (!ids.length) return [];\n const res = await wfOf(client).getSubmissionAll(childFormId, 0, 5000, {}, [], [{ name: \"_id\", arr_value: ids, operator: \"in\" }], \"$and\");\n const subs: any[] = res?.elements ?? res?.data?.elements ?? [];\n const order = new Map(ids.map((id, i) => [id, i]));\n return subs\n .map((s) => ({ _submissionId: String(s.id ?? s.formSubmissionId ?? \"\"), ...submissionToValues({ elements: s.elements ?? s.inputs ?? [] }) }))\n .sort((a, b) => (order.get(a._submissionId) ?? 999) - (order.get(b._submissionId) ?? 999));\n}\n\n// ── Automations ─────────────────────────────────────────────────────────────\n\nexport async function invokeTrigger(client: any, triggerId: string | number, body: Record<string, any>): Promise<any> {\n const res = await wfOf(client).invokeTriggers(String(triggerId), body);\n const payload = res?.data?.raw ?? res?.raw;\n if (payload) { try { return typeof payload === \"string\" ? JSON.parse(payload) : payload; } catch { return payload; } }\n return res?.data ?? res;\n}\n\n/** TRIGGER_AUTOMATION with properties.automationType \"ZENO\" (zvolv-web onTriggerZeno → invokeNuclioAutomation). */\nexport async function invokeZeno(client: any, automationUuid: string, body: Record<string, any>): Promise<any> {\n const res = await wfOf(client).invokeNuclioAutomation(String(automationUuid), body);\n const payload = res?.data?.raw ?? res?.raw ?? res?.data ?? res;\n if (typeof payload === \"string\") { try { return JSON.parse(payload); } catch { return payload; } }\n return payload;\n}\n\n/**\n * INVOKE_AGENT.\n * 1. With properties.flowId: POST /api/v1/zwall/agent/invoke/{flowId}/{agentId} — the\n * zvolv-web / ZAI-Dashboard call (legacy agent flows).\n * 2. Without a flowId, or when that server has no such flow (it answers\n * `{ error: true, reply: \"Error: '<flowId>'\" }`): POST\n * /api/v1/zwall/v3/agent_manager/agent_flow/{agentId} — how the platform calls\n * current ZAI agents (zvolv-mcp zagent.call_agent).\n * Called directly, not through the SDK's workflow.invokeAgent, whose handleRequest\n * rejects any reply without `error: false` (\"Error fetching data\").\n */\nexport async function invokeAgent(client: any, body: any, flowId?: string, agentId?: string): Promise<any> {\n const wf = wfOf(client);\n if (!wf?.httpClient) return wf.invokeAgent({ ...body }, flowId, agentId);\n const headers = { ...(await wf.getHeaders(true)) };\n const post = async (url: string, data: any) => {\n try {\n const res = await wf.httpClient.request({ method: \"post\", url, data, headers });\n const d = res?.data;\n return d?.data && (d.data.reply !== undefined || d.data.response !== undefined) ? d.data : d;\n } catch (e: any) {\n const r = e?.response;\n const msg = r?.data?.message ?? r?.data?.error_message ?? r?.data?.detail ?? (typeof r?.data?.error === \"string\" ? r.data.error : null) ?? (typeof r?.data?.reply === \"string\" ? r.data.reply : null);\n throw new Error(r?.status ? `Agent call failed (${r.status})${msg ? `: ${msg}` : \"\"}` : e?.message || \"Agent call failed — check the network tab\");\n }\n };\n const agent = encodeURIComponent(String(agentId ?? \"\"));\n let data: any = null;\n if (flowId) {\n data = await post(`/api/v1/zwall/agent/invoke/${encodeURIComponent(String(flowId))}/${agent}`, { ...body }).catch((e) => ({ error: true, reply: e.message }));\n const unknownFlow = data?.error === true && typeof data?.reply === \"string\" && data.reply.includes(String(flowId));\n if (!unknownFlow && data?.error !== true) return data;\n if (!unknownFlow) throw new Error(typeof data?.reply === \"string\" && data.reply ? data.reply : data?.message ?? \"The agent returned an error\");\n }\n const content = { ...(body?.content ?? {}), file_url: Array.isArray(body?.content?.file_url) ? body.content.file_url : [] };\n data = await post(`/api/v1/zwall/v3/agent_manager/agent_flow/${agent}`, { ...body, content });\n if (data?.error === true) throw new Error(typeof data?.reply === \"string\" && data.reply ? data.reply : data?.message ?? \"The agent returned an error\");\n return data;\n}\n\nconst parseMaybeJson = (v: any): any => {\n if (typeof v !== \"string\") return v;\n const t = v.trim();\n if (!t.startsWith(\"{\") && !t.startsWith(\"[\")) return v;\n try { return JSON.parse(t); } catch { return v; }\n};\n\n/** Field map from an agent reply: `{formData}` or wrapped in `response`, possibly JSON-encoded (ZAI extractAgentFormData). */\nexport function extractAgentFormData(reply: any): Record<string, any> | null {\n let node = parseMaybeJson(reply);\n for (let d = 0; d < 5; d++) {\n if (!node || typeof node !== \"object\" || Array.isArray(node)) return null;\n const fd = parseMaybeJson(node.formData);\n if (fd && typeof fd === \"object\" && !Array.isArray(fd)) return fd;\n if (!(\"response\" in node)) return Object.keys(node).length ? node : null;\n node = parseMaybeJson(node.response);\n }\n return null;\n}\n\n/** `formData` from an automation / agent response, keyed by elementId or label. */\nexport function formDataOf(result: any): Record<string, any> | null {\n let node = result;\n for (let d = 0; d < 4 && node; d++) {\n if (typeof node === \"string\") { try { node = JSON.parse(node); } catch { return null; } }\n const fd = node?.formData ?? node?.data?.formData;\n if (fd && typeof fd === \"object\") return fd;\n node = node?.response;\n }\n return null;\n}\n\nexport async function clientInfo(client: any): Promise<{ ip?: string } | null> {\n try { return (await wfOf(client).getClientInfo?.()) ?? null; } catch { return null; }\n}\n\n// ── Files ───────────────────────────────────────────────────────────────────\n\nexport interface UploadedFile { media_name: string; media_type: string; media: string; media_size: number; mediaKey?: string; [k: string]: any }\n\n/** UPLOAD_FILE_IMAGE with a cardID → dbFileUpload; otherwise the SDK's mediaUpload. */\nexport async function uploadFile(client: any, el: FormElement, file: File, zappId?: string): Promise<UploadedFile> {\n const fd = new FormData();\n fd.append(\"file\", file);\n const cardId = el.properties?.cardID ?? el.properties?.cardId;\n if (el.type === \"UPLOAD_FILE_IMAGE\" && cardId) {\n const bt = businessTag(client);\n const filter = encodeURIComponent(JSON.stringify({ skiptempfile: true }));\n const res = await raw(client, \"post\", `/rest/v17/${bt}/${bt}/fileupload/${parseInt(String(cardId), 10)}?filter=${filter}`, fd);\n const url = res?.data?.file_url?.url ?? res?.data?.url ?? res?.file_url?.url ?? res?.url;\n if (!url) throw new Error(\"Upload failed: no URL in response\");\n return { media_name: file.name, media_type: file.type, media: url, media_size: file.size };\n }\n const res = await wfOf(client).mediaUpload(fd, zappId);\n if (res?.error) throw new Error(res.message || \"Upload failed\");\n const data = res?.data ?? res ?? {};\n return {\n ...data,\n media_name: data.media_name ?? data.mediaName ?? file.name,\n media_type: data.media_type ?? data.mediaType ?? file.type,\n media: data.media ?? data.url ?? \"\",\n media_size: data.media_size ?? data.mediaSize ?? file.size,\n };\n}\n\n// ── Lookups (FORM_SEARCH / INPUT_TAG / form-backed AUTO_COMPLETE) ───────────\n\nexport interface LookupConfig {\n formId: string;\n viewLabel?: string;\n selectLabel?: string;\n searchLabel?: string;\n extraLabels: string[];\n staticFilters: any[];\n dynamicFilters: any[];\n maxResults: number;\n operator: \"$and\" | \"$or\";\n loadOnDependency: boolean;\n colorLabel?: string;\n}\n\nexport function lookupConfigOf(el: FormElement): LookupConfig | null {\n const p = el.properties ?? {};\n const ds = p.dataSource ?? {};\n const meta = p.metaData ?? {};\n const formId = ds.FormID ?? meta.FormID ?? p.formID ?? p.dependancyDetails?.TargetFormID;\n if (!formId) return null;\n const op = String(ds.operator ?? meta.operator ?? \"\").toLowerCase();\n return {\n formId: String(formId),\n viewLabel: ds.ViewLabel ?? meta.ViewLabel,\n selectLabel: ds.SelectLabel ?? meta.SelectLabel,\n searchLabel: ds.SearchLabel ?? meta.SearchLabel,\n extraLabels: ds.ExtraLabels ?? meta.ExtraLabels ?? [],\n staticFilters: ds.StaticFilters ?? meta.StaticFilters ?? [],\n dynamicFilters: ds.DynamicFilters ?? meta.DynamicFilters ?? [],\n maxResults: maxResultsOf(el),\n operator: op === \"or\" || op === \"$or\" ? \"$or\" : \"$and\",\n loadOnDependency: !!(p.loadOnDependency ?? ds.loadOnDependency),\n colorLabel: ds.Color ?? meta.Color,\n };\n}\n\nexport interface LookupFilter { label: string; value: any; arr_value: any[]; operator: \"eq\" | \"in\" | \"regex\"; mode?: string }\n\nconst unwrap = (v: any): string => {\n if (v == null) return \"\";\n if (Array.isArray(v)) return v.map(unwrap).filter(Boolean).join(\"|||\");\n if (typeof v === \"object\") return unwrap(v.view ?? v.select ?? v.label ?? v.name ?? \"\");\n return String(v);\n};\nconst filterScalar = (v: any): any => (v && typeof v === \"object\" ? v.select ?? v.view ?? v : v);\n\n/** Dependent-dropdown filters from DynamicFilters and FETCH_OPTIONS_FILTERS rules. */\nexport function lookupDependencyFilters(\n cfg: LookupConfig,\n rules: { elementId: string; masterField: string }[],\n elements: FormElement[], values: FormValues,\n): { filters: LookupFilter[]; satisfied: boolean } {\n const filters: LookupFilter[] = [];\n const push = (label: string, local: any) => {\n if (local === undefined || local === null || local === \"\") return false;\n const arr = (Array.isArray(local) ? local : [local]).map(filterScalar).filter((x) => x != null && x !== \"\");\n if (!arr.length) return false;\n filters.push(arr.length === 1 ? { label, value: arr[0], arr_value: [], operator: \"eq\" } : { label, value: null, arr_value: arr, operator: \"in\" });\n return true;\n };\n let wanted = 0, got = 0;\n cfg.dynamicFilters.forEach((df: any) => {\n const dep = df.DependencyFieldLabel ?? df.dependencyFieldLabel;\n const master = df.MasterFieldLabel ?? df.masterFieldLabel ?? dep;\n if (!dep || !master) return;\n wanted++;\n const src = elements.find((e) => e.label === dep);\n if (src && push(master, values[src.elementId])) got++;\n });\n rules.forEach((r) => { wanted++; if (push(r.masterField, values[r.elementId])) got++; });\n return { filters, satisfied: got === wanted };\n}\n\nfunction fieldValue(sub: any, label: string): any {\n const f = (sub.elements ?? sub.inputs ?? []).find((e: any) => (e.label ?? e.Label) === label);\n if (!f) return undefined;\n const v = f.value ?? f.Value;\n return Array.isArray(v) ? v.map(filterScalar) : filterScalar(v);\n}\n\nfunction rowToOption(sub: any, cfg: LookupConfig): FieldOption | null {\n let view = \"\", select: any = \"\", color: string | undefined;\n const extra: string[] = [];\n (sub.elements ?? sub.inputs ?? []).forEach((e: any) => {\n const label = e.label ?? e.Label;\n const v = e.value ?? e.Value;\n if (cfg.extraLabels.includes(label)) extra.push(unwrap(v));\n if (label === cfg.selectLabel) select = Array.isArray(v) ? v.map((a: any) => a?.select ?? String(a)).join(\"|||\") : filterScalar(v);\n if (label === cfg.viewLabel) view = unwrap(v);\n if (cfg.colorLabel && label === cfg.colorLabel && v != null) color = String(v);\n });\n if (!view && !select) return null;\n if (!view) view = String(select);\n if (select === \"\" || select == null) select = view;\n return { label: view, value: String(select), extra, color, raw: { view, select, extraLabels: extra } };\n}\n\nconst lookupCache = new Map<string, { at: number; data: Promise<FieldOption[]> }>();\n\n/** Options from the source form (getSubmissionAll) — eq/in filters re-applied client-side. */\nexport function fetchLookupOptions(client: any, cfg: LookupConfig, dependency: LookupFilter[], search = \"\", maxAgeMs = 10000): Promise<FieldOption[]> {\n const key = JSON.stringify([cfg, dependency, search]);\n const hit = lookupCache.get(key);\n if (hit && Date.now() - hit.at < maxAgeMs) return hit.data;\n const data = (async () => {\n const filter: LookupFilter[] = [];\n const byLabel = new Map<string, any[]>();\n cfg.staticFilters.forEach((f: any) => {\n const label = f.FieldLabel ?? f.label;\n const vals = Array.isArray(f.FieldValue ?? f.value) ? f.FieldValue ?? f.value : [f.FieldValue ?? f.value].filter((x) => x != null && x !== \"\");\n if (label && vals.length) byLabel.set(label, [...(byLabel.get(label) ?? []), ...vals]);\n });\n byLabel.forEach((vals, label) => filter.push(vals.length === 1\n ? { label, value: vals[0], arr_value: [], operator: \"eq\" }\n : { label, value: vals.map(String).join(\"|\"), arr_value: [], operator: \"regex\" }));\n filter.push(...dependency);\n const col = cfg.searchLabel ?? cfg.selectLabel;\n if (search && col) filter.push({ mode: \"mwm\", label: col, value: search, arr_value: [], operator: \"regex\" });\n const limit = filter.length || search ? 500 : 50;\n const res = await wfOf(client).getSubmissionAll(cfg.formId, 0, limit, {}, filter, [], cfg.operator);\n let subs: any[] = res?.data?.elements ?? res?.elements ?? [];\n const local = filter.filter((f) => f.operator === \"eq\" || f.operator === \"in\");\n if (local.length) {\n subs = subs.filter((s) => local.every((c) => {\n const fv = fieldValue(s, c.label);\n if (fv == null) return false;\n const have = (Array.isArray(fv) ? fv : [fv]).map(String);\n return (c.operator === \"in\" ? c.arr_value : [c.value]).map(String).some((t) => have.includes(t));\n }));\n }\n if (search) {\n const q = search.toLowerCase();\n subs = subs.filter((s) => unwrap(fieldValue(s, col ?? \"\") ?? \"\").toLowerCase().includes(q) || !col);\n }\n const seen = new Map<string, FieldOption>();\n subs.forEach((s) => { const o = rowToOption(s, cfg); if (o && !seen.has(o.value)) seen.set(o.value, o); });\n return [...seen.values()];\n })();\n lookupCache.set(key, { at: Date.now(), data });\n data.catch(() => lookupCache.delete(key));\n return data;\n}\n\nexport function clearLookupCache() { lookupCache.clear(); }\n\n// ── People search (AUTO_COMPLETE with jsonData) ─────────────────────────────\n\nexport interface PersonOption { select: any; title: string; subtitle?: string; imgurl?: string }\n\nexport async function searchPeople(client: any, el: FormElement, query: string): Promise<FieldOption[]> {\n const p = el.properties ?? {};\n const searchType = p.searchType ?? el.attributes?.searchType;\n const target = p.dependancyDetails?.TargetFormID;\n const bt = businessTag(client);\n const res = searchType === \"GENERIC_FORM_AUTO_SEARCH\" && target\n ? await raw(client, \"post\", `/rest/v17/autosearch/${bt}/forms/${target}/submissions`, { ...(p.jsonData ?? {}), sendAll: true, searchQuery: query })\n : await raw(client, \"post\", `/rest/v17/zvice/interaction/${bt}`, { ...(p.jsonData ?? {}), pagination: { limit: 150, offset: 0 }, sendAll: false, searchQuery: query });\n const els: PersonOption[] = res?.data?.elements ?? res?.elements ?? res?.data?.data?.elements ?? [];\n return (Array.isArray(els) ? els : []).map((o) => ({ label: String(o.title ?? o.select), value: String(o.select), extra: o.subtitle ? [o.subtitle] : [], raw: o }));\n}\n","/**\n * Behaviour hooks for the fields that need more than a value: option lists\n * (static, lookup, people search), file uploads and child sheets. The host's\n * control calls these and only draws.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { FieldOption, FormDefinition } from \"./types\";\nimport type { FormField, ZvolvFormApi } from \"./useZvolvForm\";\nimport { optionFilterRules } from \"./rules\";\nimport {\n fetchForm, fetchLookupOptions, fetchRows, lookupConfigOf, lookupDependencyFilters, searchPeople, uploadFile,\n type UploadedFile,\n} from \"./api\";\nimport { buildInitialValues, formatFieldValue, isSingleLookup, maxResultsOf, toRelational } from \"./values\";\nimport { resolveFieldType } from \"./normalize\";\nimport { sheetCellChecked, sheetRowNeedsCheck, validateField } from \"./validate\";\nimport { computeRowFormulas } from \"./formula\";\n\n// ── Options ─────────────────────────────────────────────────────────────────\n\nexport interface FieldOptionsState {\n options: FieldOption[];\n loading: boolean;\n error: string | null;\n search: string;\n setSearch: (q: string) => void;\n /** Set when a dependency must be filled first, e.g. \"Select Region first\". */\n waitingFor: string | null;\n /** The field's current selection as options (resolves stored ids to labels). */\n selected: FieldOption[];\n /** Commit a pick: stores the right shape for the field type. */\n select: (option: FieldOption | FieldOption[] | null) => void;\n /** Toggle one option in a multi-select (refused once `maxCount` is reached). */\n toggle: (option: FieldOption) => void;\n isSelected: (option: FieldOption) => boolean;\n /**\n * Call when the control gets focus / opens. Remote options (lookups, people\n * search) load on first focus, as in zvolv-web (nzFocus → onFocus) and\n * ZAI-Dashboard (handleFocus). Lookups reload on later focuses (throttled\n * 2 s); people search loads only when it has nothing yet.\n */\n onFocus: () => void;\n /** Force a reload of remote options. */\n refresh: () => void;\n /** Most selections allowed (properties.maxResults). 1 = single select. */\n maxCount: number;\n /** A multi-select already holds `maxCount` items. */\n atLimit: boolean;\n /** INPUT_TAG: add a tag that isn't in the list (ZAI FormSearchField free-text tag). */\n addFreeTag: (text: string) => void;\n}\n\nexport interface FieldOptionsOptions {\n debounceMs?: number;\n /**\n * When remote options load. \"focus\" (default) = on first onFocus(), like\n * zvolv-web and ZAI-Dashboard; \"mount\" = as soon as the control renders.\n * Dependency-filtered lookups always load when their source changes.\n */\n loadOn?: \"focus\" | \"mount\";\n /**\n * Copy a picked row's ExtraLabels into same-labelled fields on this form.\n * Off by default: neither zvolv-web nor ZAI-Dashboard does this — use a\n * FETCH_OPTIONS_FILTERS dependent lookup instead.\n */\n autofillExtraLabels?: boolean;\n}\n\nconst optionKey = (v: any) => String(v && typeof v === \"object\" ? v.select ?? v.value ?? v.view : v ?? \"\");\nconst isFilled = (v: any) => v != null && v !== \"\" && !(Array.isArray(v) && !v.length);\n\nexport function useFieldOptions(form: ZvolvFormApi, field: FormField, opts: FieldOptionsOptions = {}): FieldOptionsState {\n const { debounceMs = 250, loadOn = \"focus\", autofillExtraLabels = false } = opts;\n const el = field.element;\n const cfg = useMemo(() => (field.kind === \"lookup\" ? lookupConfigOf(el) : null), [field.kind, el]);\n const people = field.kind === \"user\" && !!(el.properties?.jsonData || el.properties?.searchType === \"GENERIC_FORM_AUTO_SEARCH\");\n const elements = form.definition?.elements ?? [];\n const rules = useMemo(() => optionFilterRules(elements, field.id), [elements, field.id]);\n const dep = useMemo(() => (cfg ? lookupDependencyFilters(cfg, rules, elements, form.values) : { filters: [], satisfied: true }), [cfg, rules, elements, form.values]);\n const depKey = JSON.stringify(dep.filters);\n const maxCount = cfg ? cfg.maxResults : field.kind === \"user\" ? maxResultsOf(el) : field.multiple ? Infinity : 1;\n const single = maxCount === 1;\n\n const [search, setSearch] = useState(\"\");\n const [q, setQ] = useState(\"\");\n useEffect(() => { const t = setTimeout(() => setQ(search), debounceMs); return () => clearTimeout(t); }, [search, debounceMs]);\n\n const [remote, setRemote] = useState<FieldOption[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [opened, setOpened] = useState(loadOn === \"mount\");\n const [nonce, setNonce] = useState(0);\n const lastFetch = useRef(0);\n const maxAge = useRef(10000);\n\n const waitingFor = useMemo(() => {\n if (!cfg || dep.satisfied || cfg.operator !== \"$and\") return null;\n const missing = rules.find((r) => !isFilled(form.values[r.elementId]));\n const lbl = missing ? form.field(missing.elementId)?.label : cfg.dynamicFilters[0]?.DependencyFieldLabel;\n return lbl ? `Select ${lbl} first` : \"Fill the fields this depends on first\";\n }, [cfg, dep.satisfied, rules, form]);\n\n // Dependency-filtered lookups fetch as soon as their source is set (needed for auto-pick).\n const depDriven = !!cfg && rules.length > 0 && dep.filters.length > 0;\n const active = opened || depDriven || q !== \"\";\n\n useEffect(() => {\n if (!cfg && !people) return;\n if (cfg && (waitingFor || (cfg.loadOnDependency && !dep.filters.length && rules.length))) { setRemote([]); return; }\n if (!active) return;\n let alive = true;\n setLoading(true); setError(null);\n lastFetch.current = Date.now();\n const p = cfg ? fetchLookupOptions(form.client, cfg, dep.filters, q, maxAge.current) : searchPeople(form.client, el, q);\n maxAge.current = 10000;\n p.then((o) => {\n if (!alive) return;\n setRemote(o);\n // ZAI-Dashboard / zvolv-web parity: a dependency-filtered fetch (no typed\n // search) that resolves to exactly one row selects it automatically.\n if (cfg && rules.length && dep.filters.length && !q && o.length === 1) autoPickRef.current(o[0], depKey);\n })\n .catch((e) => { if (alive) setError(e?.message ?? \"Couldn't load options\"); })\n .finally(() => { if (alive) setLoading(false); });\n return () => { alive = false; };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [cfg, people, depKey, q, waitingFor, form.client, active, nonce]);\n\n const refresh = useCallback(() => { maxAge.current = 0; setOpened(true); setNonce((n) => n + 1); }, []);\n const onFocus = useCallback(() => {\n if (!cfg && !people) return;\n if (!opened) { setOpened(true); return; }\n // Lookups reload on focus (stale-safe, throttled 2 s); people search only when empty.\n if (cfg && Date.now() - lastFetch.current > 2000) { maxAge.current = 2000; setNonce((n) => n + 1); }\n else if (people && !remote.length) setNonce((n) => n + 1);\n }, [cfg, people, opened, remote.length]);\n\n // A FETCH_OPTIONS_FILTERS source changed: drop the stale selection (the\n // platform resets it to null); the refetch above re-selects when one row matches.\n const prevDepKey = useRef<string | null>(null);\n useEffect(() => {\n if (!cfg || !rules.length) return;\n if (prevDepKey.current === null) { prevDepKey.current = depKey; return; } // first settle (EDIT keeps its value)\n if (prevDepKey.current === depKey) return;\n prevDepKey.current = depKey;\n if (form.readOnly) return;\n if (isFilled(form.values[field.id])) form.setValue(field.id, single ? null : []);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [depKey]);\n\n const staticFiltered = useMemo(() => {\n if (cfg || people) return remote;\n const needle = search.trim().toLowerCase();\n return needle ? field.options.filter((o) => o.label.toLowerCase().includes(needle)) : field.options;\n }, [cfg, people, remote, field.options, search]);\n\n // Options the user picked, kept so a later search doesn't turn a chosen person back into an id.\n const pickedCache = useRef(new Map<string, FieldOption>());\n\n const current = field.value;\n const selected = useMemo<FieldOption[]>(() => {\n const arr = current == null || current === \"\" ? [] : Array.isArray(current) ? current : [current];\n const pool = [...staticFiltered, ...field.options];\n return arr.map((v: any) => {\n const hit = pool.find((o) => optionKey(o.value) === optionKey(v)) ?? pickedCache.current.get(optionKey(v));\n if (hit) return hit;\n if (v && typeof v === \"object\") return { label: String(v.view ?? v.select ?? \"\"), value: String(v.select ?? v.view ?? \"\"), extra: v.extraLabels, raw: v };\n return { label: String(v), value: v };\n });\n }, [current, staticFiltered, field.options]);\n\n const store = useCallback((picked: FieldOption[]) => {\n picked.forEach((o) => pickedCache.current.set(optionKey(o.value), o));\n const t = field.type;\n if (field.kind === \"lookup\") {\n const rel = picked.map((o) => o.raw ?? { view: o.label, select: o.value, extraLabels: o.extra ?? [] });\n form.setValue(field.id, single ? rel[0] ?? null : rel.slice(0, maxCount));\n if (autofillExtraLabels && cfg && picked.length === 1 && cfg.extraLabels.length) {\n const fill: Record<string, any> = {};\n cfg.extraLabels.forEach((label, i) => {\n const target = (form.definition?.elements ?? []).find((e) => e.label === label && e.elementId !== field.id);\n const v = picked[0].extra?.[i];\n if (target && v !== undefined) fill[target.elementId] = v;\n });\n if (Object.keys(fill).length) form.applyValues(fill);\n }\n return;\n }\n if (field.multiple) form.setValue(field.id, picked.slice(0, maxCount).map((o) => o.value));\n else form.setValue(field.id, picked[0]?.value ?? (t === \"CHECK_BOX\" ? false : \"\"));\n }, [field, form, cfg, single, maxCount, autofillExtraLabels]);\n\n // Auto-pick target for the single-row dependency match (once per filter set, only into an empty field).\n const autoPickRef = useRef<(o: FieldOption, key: string) => void>(() => {});\n const lastAutoKey = useRef<string | null>(null);\n autoPickRef.current = (o, key) => {\n if (form.readOnly || lastAutoKey.current === key) return;\n lastAutoKey.current = key;\n if (isFilled(form.values[field.id])) return;\n store([o]);\n };\n\n const select = useCallback((o: FieldOption | FieldOption[] | null) => store(o == null ? [] : Array.isArray(o) ? o : [o]), [store]);\n const isSelected = useCallback((o: FieldOption) => selected.some((s) => optionKey(s.value) === optionKey(o.value)), [selected]);\n const atLimit = field.multiple && selected.length >= maxCount;\n const toggle = useCallback((o: FieldOption) => {\n const on = isSelected(o);\n if (!on && field.multiple && selected.length >= maxCount) return; // zvolv-web nzMaxMultipleCount\n store(on ? selected.filter((s) => optionKey(s.value) !== optionKey(o.value)) : field.multiple ? [...selected, o] : [o]);\n }, [isSelected, selected, store, field.multiple, maxCount]);\n\n const addFreeTag = useCallback((text: string) => {\n const t = text.trim();\n if (!t || field.type !== \"INPUT_TAG\") return;\n const o: FieldOption = { label: t, value: t, extra: [], raw: { view: t, select: t, extraLabels: [] } };\n if (selected.some((s) => optionKey(s.value) === t)) return;\n if (field.multiple) { if (selected.length < maxCount) store([...selected, o]); } else store([o]);\n setSearch(\"\");\n }, [field.type, field.multiple, selected, maxCount, store]);\n\n return { options: staticFiltered, loading, error, search, setSearch, waitingFor, selected, select, toggle, isSelected,\n onFocus, refresh, maxCount, atLimit, addFreeTag };\n}\n\n// ── Files ───────────────────────────────────────────────────────────────────\n\n/** Extensions the platform refuses (ZAI-Dashboard utils/constant BLOCKED_FILE_EXTENSIONS). */\nexport const BLOCKED_FILE_EXTENSIONS = new Set((\"ade adp app application appref-ms asp aspx asx bas bat bgi cab cer chm cmd cnt com cpl crt csh der \" +\n \"diagcab exe fxp gadget grp hlp hpj hta htc inf ins iso isp its jar jnlp js jse ksh lnk mad maf mag mam maq mar mas mat mau mav maw mcf \" +\n \"mda mdb mde mdt mdw mdz msc msh msh1 msh2 mshxml msh1xml msh2xml msi msp mst msu ops osd pcd pif pl plg prf ps1 ps1xml ps2 ps2xml psc1 \" +\n \"psc2 reg scr scf sln vbs vb vbe ws wsf wsc wsh z bz2 ace ppkg bak tmp ost pst pkg vhd vhdx lock lck cs csproj resx config resources pdb \" +\n \"manifest dot wbk xlt xlm xla pot pps cdb mdn sh php mdf py ldb wps xlsb xlam xll xlw ppam\").split(\" \"));\n\nexport interface FileItem { key: string; name: string; size: number; type: string; url?: string; uploading: boolean; error?: string; record?: UploadedFile }\n\nexport interface FileFieldState {\n items: FileItem[];\n uploading: boolean;\n /** Validates size / count / type, then uploads immediately. */\n add: (files: FileList | File[]) => void;\n remove: (key: string) => void;\n canAdd: boolean;\n rejectReason: string | null;\n}\n\nexport function useFileField(form: ZvolvFormApi, field: FormField, opts: { zappId?: string } = {}): FileFieldState {\n const stored: any[] = Array.isArray(field.value) ? field.value : [];\n const [pending, setPending] = useState<FileItem[]>([]);\n const [reject, setReject] = useState<string | null>(null);\n const storedRef = useRef(stored);\n storedRef.current = stored;\n\n const items: FileItem[] = [\n ...stored.map((r: any, i: number) => ({\n key: `s${i}:${r.media_name ?? r.mediaName ?? r.name}`,\n name: String(r.media_name ?? r.mediaName ?? r.name ?? \"file\"),\n size: Number(r.media_size ?? r.mediaSize ?? r.size ?? 0),\n type: String(r.media_type ?? r.mediaType ?? r.type ?? \"\"),\n url: r.media ?? r.url,\n uploading: false,\n record: r,\n })),\n ...pending,\n ];\n const max = field.maxCount;\n\n const add = useCallback((list: FileList | File[]) => {\n setReject(null);\n const files = Array.from(list);\n const room = max ? Math.max(0, max - storedRef.current.length - pending.filter((p) => p.uploading).length) : files.length;\n if (!room) { setReject(`You can attach up to ${max} file${max === 1 ? \"\" : \"s\"}`); return; }\n files.slice(0, room).forEach((file) => {\n const ext = file.name.includes(\".\") ? file.name.split(\".\").pop()!.toLowerCase() : \"\";\n if (ext && BLOCKED_FILE_EXTENSIONS.has(ext)) { setReject(`Cannot upload files with the extension .${ext}`); return; }\n if (field.maxSizeKB && file.size > field.maxSizeKB * 1024) { setReject(`${file.name} is larger than ${Math.round(field.maxSizeKB / 1024 * 10) / 10 || field.maxSizeKB} ${field.maxSizeKB >= 1024 ? \"MB\" : \"KB\"}`); return; }\n const accept = field.accept?.split(\",\").map((s) => s.trim().toLowerCase()).filter(Boolean);\n if (accept?.length && !accept.some((a) => (a.endsWith(\"/*\") ? file.type.startsWith(a.slice(0, -1)) : a.startsWith(\".\") ? file.name.toLowerCase().endsWith(a) : file.type === a))) {\n setReject(`${file.name} isn't an allowed file type`); return;\n }\n const key = `p${Date.now()}${Math.random()}`;\n setPending((p) => [...p, { key, name: file.name, size: file.size, type: file.type, uploading: true }]);\n uploadFile(form.client, field.element, file, opts.zappId)\n .then((rec) => {\n setPending((p) => p.filter((x) => x.key !== key));\n const next = [...storedRef.current, rec];\n storedRef.current = next;\n form.setValue(field.id, next);\n })\n .catch((e) => setPending((p) => p.map((x) => (x.key === key ? { ...x, uploading: false, error: e?.message ?? \"Upload failed\" } : x))));\n });\n if (files.length > room) setReject(`Only ${room} more file${room === 1 ? \"\" : \"s\"} can be attached`);\n }, [form, field, max, pending, opts.zappId]);\n\n const remove = useCallback((key: string) => {\n if (key.startsWith(\"p\")) { setPending((p) => p.filter((x) => x.key !== key)); return; }\n const idx = items.findIndex((i) => i.key === key);\n if (idx < 0) return;\n const next = storedRef.current.filter((_, i) => i !== idx);\n form.setValue(field.id, next.length ? next : []);\n }, [items, form, field.id]);\n\n return { items, uploading: pending.some((p) => p.uploading), add, remove, canAdd: !field.disabled && (!max || stored.length < max), rejectReason: reject };\n}\n\n// ── Sheets (INPUT_SHEET) ────────────────────────────────────────────────────\n\nexport interface SheetColumn { id: string; label: string; type: string; required: boolean; options: FieldOption[]; element: any }\n\nexport interface SheetFieldState {\n loading: boolean;\n error: string | null;\n columns: SheetColumn[];\n rows: Record<string, any>[];\n addRow: (values?: Record<string, any>) => void;\n updateRow: (index: number, columnId: string, value: any) => void;\n removeRow: (index: number) => void;\n /** Row-level validation errors, keyed `${index}:${columnId}`. */\n rowErrors: Record<string, string>;\n display: (column: SheetColumn, value: any) => string;\n childForm: FormDefinition | null;\n /** properties.allowedAddActions / allowedActions include \"ADD\" (or neither is set), and the row cap isn't reached. */\n canAdd: boolean;\n /** properties.allowedDeleteActions / allowedActions include \"DELETE\" (or neither is set). */\n canDelete: boolean;\n /** properties.maxRows, when set. */\n maxRows?: number;\n /** Set when addRow was refused (row cap). */\n limitMessage: string | null;\n}\n\nfunction sheetAllows(p: any, action: \"ADD\" | \"DELETE\"): boolean {\n const specific = action === \"ADD\" ? p?.allowedAddActions : p?.allowedDeleteActions;\n const list = Array.isArray(specific) && specific.length ? specific : p?.allowedActions;\n if (!Array.isArray(list) || !list.length) return true;\n return list.map((x: any) => String(x).toUpperCase()).includes(action);\n}\n\nexport function useSheetField(form: ZvolvFormApi, field: FormField): SheetFieldState {\n const childId = String(field.element.properties?.formID ?? field.element.properties?.FormID ?? field.element.properties?.nestedFormId ?? field.element.properties?.dataSource?.FormID ?? \"\");\n const [child, setChild] = useState<FormDefinition | null>(null);\n const [loading, setLoading] = useState(!!childId);\n const [error, setError] = useState<string | null>(childId ? null : \"No child form configured\");\n\n useEffect(() => {\n if (!childId) return;\n let alive = true;\n setLoading(true);\n fetchForm(form.client, childId)\n .then(async (def) => {\n if (!alive) return;\n setChild(def);\n form.registerSheet(field.id, def);\n // EDIT: the stored value is row submission ids — hydrate them.\n const raw = Array.isArray(field.value) ? field.value : [];\n const ids = raw.filter((r: any) => typeof r === \"string\" || typeof r === \"number\").map(String);\n if (ids.length) {\n const rows = await fetchRows(form.client, childId, ids);\n // Quiet write: loading saved rows must not mark the form dirty or fire automations.\n if (alive) form.applyValues({ [field.id]: rows });\n }\n })\n .catch((e) => alive && setError(e?.message ?? \"Couldn't load the table\"))\n .finally(() => alive && setLoading(false));\n return () => { alive = false; };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [childId, form.client]);\n\n const columns = useMemo<SheetColumn[]>(() => (child?.elements ?? [])\n .filter((e) => !e.hidden && ![\"COLLAPSE_SECTION\", \"CONTAINER\", \"GROUP_VIEW\", \"TEXT_VIEW\", \"ACTION_BUTTON\"].includes(resolveFieldType(e)))\n .map((e) => ({\n id: e.elementId, label: e.label, type: resolveFieldType(e), required: e.required, element: e,\n options: (Array.isArray(e.properties?.options) ? e.properties.options : []).map((o: any) => (typeof o === \"object\" ? { label: String(o.view ?? o.label ?? o.select), value: o.select ?? o.value } : { label: String(o), value: o })),\n })), [child]);\n\n const rows: Record<string, any>[] = (Array.isArray(field.value) ? field.value : []).filter((r: any) => r && typeof r === \"object\");\n\n const p = field.element.properties ?? {};\n const maxRows = Number(p.maxRows) > 0 ? Number(p.maxRows) : undefined;\n const [limitMessage, setLimitMessage] = useState<string | null>(null);\n const addAllowed = !field.disabled && sheetAllows(p, \"ADD\");\n const canDelete = !field.disabled && sheetAllows(p, \"DELETE\");\n const addRow = useCallback((vals?: Record<string, any>) => {\n if (!addAllowed) return;\n if (maxRows && rows.length >= maxRows) { setLimitMessage(`Maximum number of rows reached (${maxRows})`); return; }\n setLimitMessage(null);\n const blank = child ? computeRowFormulas(child.elements, buildInitialValues(child.elements, { defaults: vals })) : { ...(vals ?? {}) };\n form.setValue(field.id, [...rows, { ...blank, _rowKey: `r${Date.now()}${Math.random()}` }]);\n }, [child, rows, form, field.id, addAllowed, maxRows]);\n // One write: the edited cell plus the row's recalculated formula cells (Amount = MUL({Qty}, {Price})).\n const updateRow = useCallback((i: number, col: string, v: any) => {\n const recalc = (r: Record<string, any>) => (child ? computeRowFormulas(child.elements, r) : r);\n form.setValue(field.id, rows.map((r, j) => (j === i ? recalc({ ...r, [col]: v, _dirty: true }) : r)));\n }, [rows, form, field.id, child]);\n const removeRow = useCallback((i: number) => {\n if (!canDelete) return;\n setLimitMessage(null);\n form.setValue(field.id, rows.filter((_, j) => j !== i));\n }, [rows, form, field.id, canDelete]);\n\n const rowErrors = useMemo(() => {\n const out: Record<string, string> = {};\n if (!form.submitAttempted) return out;\n rows.forEach((r, i) => { if (!sheetRowNeedsCheck(r)) return; columns.forEach((c) => { if (!sheetCellChecked(c.element)) return; const e = validateField(c.element, r[c.id]); if (e) out[`${i}:${c.id}`] = e; }); });\n return out;\n }, [rows, columns, form.submitAttempted]);\n\n return {\n loading, error, columns, rows, addRow, updateRow, removeRow, rowErrors, childForm: child,\n canAdd: addAllowed && (!maxRows || rows.length < maxRows), canDelete, maxRows, limitMessage,\n display: (c, v) => formatFieldValue(c.element, v),\n };\n}\n\nexport { toRelational };\n","/**\n * useZvolvForm — the headless form engine. Zvolv owns loading, values,\n * show/hide/mandatory rules, formulas, validation, field automations, action\n * buttons, child sheets and the submit wire format; the host draws every\n * control from the `FormField` descriptors it returns.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useZvolvRuntime } from \"../core/ZvolvProvider\";\nimport type { FieldKind, FieldOption, FormDefinition, FormElement, FormErrors, FormMode, FormValues } from \"./types\";\nimport { CONTAINER_KINDS, childIdsOf, fieldKindOf, normaliseForm, resolveFieldType } from \"./normalize\";\nimport { buildInitialValues, buildTriggerBody, currentUserId, getEmptyValue, isSingleLookup, rowSubmissionIds } from \"./values\";\nimport { applyRules } from \"./rules\";\nimport { AUTH_CRYPT_READY, getStoredUser } from \"../runtime/client\";\nimport { NON_INPUT_TYPES, remoteValidators, sheetCellChecked, sheetRowNeedsCheck, validateField, validateForm } from \"./validate\";\nimport { computeRowFormulas, evaluateFormula, formulaLabels } from \"./formula\";\nimport {\n clientInfo, createSubmission, extractAgentFormData, fetchForm, fetchRows, fetchSubmission, formDataOf,\n invokeAgent, invokeTrigger, invokeZeno, isLegacyId, submissionIdOf, updateSubmission, uploadFile,\n} from \"./api\";\nimport { BLOCKED_FILE_EXTENSIONS } from \"./fieldHooks\";\n\nexport interface FormField {\n id: string;\n /** Routing type (subType applied), e.g. \"INPUT_CURRENCY\". */\n type: string;\n kind: FieldKind;\n label: string;\n hideLabel: boolean;\n placeholder?: string;\n /** Help text under the field (attributes.helpMsg / infoMsg). */\n help?: string;\n required: boolean;\n disabled: boolean;\n hidden: boolean;\n /** Grid span out of 24. */\n span: number;\n value: any;\n /** Set from the last submit / validate(); cleared when this field's value changes. */\n error?: string;\n touched: boolean;\n /** Static options (SPINNER / RADIO_GROUP / static AUTO_COMPLETE). Lookups use useFieldOptions. */\n options: FieldOption[];\n multiple: boolean;\n allowAddOptions: boolean;\n min?: number;\n max?: number;\n step?: number;\n precision?: number;\n prefix?: string;\n suffix?: string;\n /** For file fields: accept string, max size (KB) and max count. */\n accept?: string;\n maxSizeKB?: number;\n maxCount?: number;\n /** Ids of fields a container holds, in order. */\n childIds: string[];\n /** STEPPER / TAB pages. */\n pages?: { title: string; description?: string; fieldIds: string[] }[];\n /** TEXT_VIEW / HTML_TEXT content (HTML). */\n html?: string;\n /**\n * Visual intent: action buttons (primary / outline); checkbox \"switch\" when\n * attributes.showAsSwitch is set (ZAI CheckboxField / zvolv-web nz-switch).\n */\n variant?: \"primary\" | \"outline\" | \"switch\" | \"dropdown\";\n /** Read-only text to show (ON_BEHALF_OF: the user's name rather than their id). */\n displayText?: string;\n /** DATE_PICKER display format from properties.format (dayjs tokens), default DD/MM/YYYY. */\n dateFormat?: string;\n /** Character limit (properties.maxLength / max, or attributes.charactersCount for rich text). */\n maxLength?: number;\n element: FormElement;\n setValue: (value: any) => void;\n onBlur: () => void;\n}\n\nexport type FormStatus = \"loading\" | \"ready\" | \"error\" | \"submitted\";\n\nexport interface ActionOutcome { ok: boolean; message?: string }\n\nexport interface UseZvolvFormArgs {\n formId?: string;\n mode?: FormMode;\n submissionId?: string | null;\n /** Supply the schema yourself (raw platform JSON or a FormDefinition) to skip the fetch. */\n definition?: any;\n /** Initial values keyed by elementId or label. */\n defaultValues?: FormValues;\n /** Field ids (or labels) never shown. */\n hiddenFields?: string[];\n /** Element types never shown, e.g. [\"COMMENTS\"]. */\n skipTypes?: string[];\n skipAutomation?: boolean;\n skipValidations?: boolean;\n zappId?: string;\n onSubmitted?: (result: { submissionId: string | null; response: any; values: FormValues }) => void;\n /**\n * Action buttons whose effect belongs to the host (open another form, a task,\n * a print preview …). Return an outcome, or undefined when not handled.\n */\n onAction?: (field: FormField, form: ZvolvFormApi) => Promise<ActionOutcome | void> | ActionOutcome | void;\n}\n\nexport interface ZvolvFormApi {\n status: FormStatus;\n error: Error | null;\n definition: FormDefinition | null;\n mode: FormMode;\n readOnly: boolean;\n values: FormValues;\n errors: FormErrors;\n /** Every field, resolved. */\n fields: FormField[];\n /** Visible top-level fields in order (containers hold the rest). */\n rootFields: FormField[];\n field: (id: string) => FormField | undefined;\n childrenOf: (field: FormField | string, visibleOnly?: boolean) => FormField[];\n setValue: (id: string, value: any) => void;\n /** Writes a map keyed by elementId, label or legacy id (automation formData). */\n applyValues: (data: Record<string, any>) => void;\n dirty: boolean;\n submitting: boolean;\n submitAttempted: boolean;\n submitError: string | null;\n submittedId: string | null;\n validate: (ids?: string[]) => boolean;\n submit: () => Promise<{ submissionId: string | null; response: any } | null>;\n reset: () => void;\n /**\n * Run an action button. For ACTION_DROPDOWN pass the picked option's label\n * (field.options) — only that action (or its cascade) runs, as in zvolv-web.\n */\n runAction: (field: FormField, choice?: string) => Promise<ActionOutcome>;\n /** Re-fetch the form (and the saved submission). Used by properties.refreshForm. */\n reload: () => void;\n /** Field ids with an action / automation in flight. */\n busy: Set<string>;\n client: any;\n /** Sheet child definitions register here so submit can post their rows. */\n registerSheet: (fieldId: string, def: FormDefinition) => void;\n /** A registered sheet's child form (after useSheetField loaded it). */\n sheetDefinition: (fieldId: string) => FormDefinition | undefined;\n /** Bumps whenever a sheet definition registers — memo key for inspectors. */\n sheetVersion: number;\n}\n\n/** Elements that go into the POST/PUT /api/v1/submissions body. */\nexport function submitElementsOf(elements: FormElement[]): FormElement[] {\n const always = new Set([\"INPUT_FORMULA\", \"ON_BEHALF_OF\", \"INPUT_IP\", \"INPUT_DEVICE_INFO\"]);\n return elements.filter((el) => { const t = resolveFieldType(el); return !NON_INPUT_TYPES.has(t) || always.has(t); });\n}\n\nconst normalizeOptions = (raw: any): FieldOption[] =>\n (Array.isArray(raw) ? raw : []).map((o: any) => {\n if (o == null) return null;\n if (typeof o !== \"object\") return { label: String(o), value: String(o) };\n const label = o.view ?? o.label ?? o.name ?? o.text ?? o.title ?? o.value ?? o.select;\n const value = o.select ?? o.value ?? o.id ?? o.label ?? o.view ?? o.name;\n return { label: String(label ?? \"\"), value, color: o.color };\n }).filter(Boolean) as FieldOption[];\n\nconst isActionDropdown = (el: FormElement) => el.attributes?.subType === \"ACTION_DROPDOWN\" || String(el.type).toUpperCase() === \"ACTION_DROPDOWN\";\nconst isEncString = (v: any) => typeof v === \"string\" && v.startsWith(\"enc::\");\nconst numOr = (v: any): number | undefined => (v === undefined || v === null || v === \"\" || isNaN(Number(v)) ? undefined : Number(v));\n\n/** Platform date formats are Angular-style (\"dd/MM/yyyy\"); dayjs wants \"DD/MM/YYYY\". */\nfunction toDayjsFormat(fmt: any, withTime: boolean): string {\n const f = typeof fmt === \"string\" && fmt.trim() ? fmt.trim() : withTime ? \"dd/MM/yyyy HH:mm\" : \"dd/MM/yyyy\";\n return f.replace(/yyyy/g, \"YYYY\").replace(/yy/g, \"YY\").replace(/dd/g, \"DD\").replace(/(^|[^D])d(?!d)/g, \"$1D\").replace(/EEE+/g, \"ddd\").replace(/a/g, \"A\");\n}\n\nfunction acceptOf(el: FormElement): string | undefined {\n const a = el.attributes?.allowedFileTypes ?? el.properties?.allowedFileTypes;\n if (!a) return el.type === \"UPLOAD_FILE_IMAGE\" ? \"image/*\" : undefined;\n const list = (Array.isArray(a) ? a : String(a).split(\",\")).map((s) => String(s).trim()).filter((s) => s && s !== \"*\" && s !== \"*/*\");\n if (!list.length) return el.type === \"UPLOAD_FILE_IMAGE\" ? \"image/*\" : undefined;\n return list.map((s) => (s.includes(\"/\") || s.startsWith(\".\") ? s : `.${s}`)).join(\",\");\n}\n\nexport const FormApiContext = React.createContext<ZvolvFormApi | null>(null);\n/** The nearest form's api, for field components rendered inside <ZvolvForm>. */\nexport function useFormApi(): ZvolvFormApi {\n const f = React.useContext(FormApiContext);\n if (!f) throw new Error(\"@zestl/zvolv-widgets: useFormApi must be used inside <ZvolvForm> or FormApiContext\");\n return f;\n}\n\nexport function useZvolvForm(args: UseZvolvFormArgs): ZvolvFormApi {\n const { formId, submissionId = null, definition: suppliedDef, defaultValues, hiddenFields, skipTypes } = args;\n const mode: FormMode = args.mode ?? (submissionId ? \"EDIT\" : \"NEW\");\n const rt = useZvolvRuntime();\n const client = rt.client;\n const argsRef = useRef(args);\n argsRef.current = args;\n\n const [definition, setDefinition] = useState<FormDefinition | null>(null);\n const [status, setStatus] = useState<FormStatus>(\"loading\");\n const [error, setError] = useState<Error | null>(null);\n const [values, setValues] = useState<FormValues>({});\n const [serverErrors, setServerErrors] = useState<FormErrors>({});\n const [touched, setTouched] = useState<Set<string>>(new Set());\n const [submitAttempted, setSubmitAttempted] = useState(false);\n /**\n * Fields whose error is on screen. ZAI-Dashboard parity: errors are captured\n * when the user submits (or calls validate), and a field's error clears as\n * soon as its value changes. A field a rule makes mandatory later is not\n * flagged until the next submit — nothing turns red just because it appeared.\n */\n const [flagged, setFlagged] = useState<Set<string>>(new Set());\n const [submitting, setSubmitting] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [submittedId, setSubmittedId] = useState<string | null>(null);\n const [dirty, setDirty] = useState(false);\n const [busy, setBusy] = useState<Set<string>>(new Set());\n const initialRef = useRef<FormValues>({});\n const valuesRef = useRef<FormValues>({});\n valuesRef.current = values;\n const sheetDefs = useRef(new Map<string, FormDefinition>());\n\n // Decrypted user (ZAI useCurrentUser): re-read when the SDK can decrypt stored PII.\n const [userTick, setUserTick] = useState(0);\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const bump = () => setUserTick((n) => n + 1);\n window.addEventListener(AUTH_CRYPT_READY, bump);\n return () => window.removeEventListener(AUTH_CRYPT_READY, bump);\n }, []);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const user = useMemo(() => getStoredUser() ?? null, [client, userTick]);\n useEffect(() => {\n if (status !== \"ready\" || mode !== \"NEW\") return;\n const uid = currentUserId(user);\n if (!uid) return;\n const fill: FormValues = {};\n (definition?.elements ?? []).forEach((el) => {\n const v = valuesRef.current[el.elementId];\n if (resolveFieldType(el) === \"ON_BEHALF_OF\" && (v == null || v === \"\" || isEncString(v))) fill[el.elementId] = uid;\n });\n if (Object.keys(fill).length) setValues((p) => { const m = { ...p, ...fill }; valuesRef.current = m; return m; });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [user, status]);\n\n // ON_BEHALF_OF shows a name, not the stored id (ZAI OnBehalfOfField; 3122 is the platform's super admin).\n const onBehalfName = useCallback((v: any): string => {\n if (v == null || v === \"\") return \"\";\n if (String(v) === \"3122\") return \"Super Admin\";\n if (isEncString(v)) return \"\";\n if (user && String(v) === currentUserId(user)) {\n const name = user.name ?? user.userName ?? user.fullName ?? user.profile?.name ?? user.email;\n return name ? String(name) : String(v);\n }\n return String(v);\n }, [user]);\n\n // ── Load ──────────────────────────────────────────────────────────────────\n const [reloadTick, setReloadTick] = useState(0);\n const loadKey = JSON.stringify([formId, submissionId, mode, !!suppliedDef, reloadTick]);\n useEffect(() => {\n let alive = true;\n setStatus(\"loading\"); setError(null); setSubmittedId(null); setSubmitAttempted(false);\n (async () => {\n const normalised = Array.isArray(suppliedDef?.elements) && suppliedDef.elements.every((e: any) => \"widthSpecified\" in e);\n let def: FormDefinition | null = suppliedDef\n ? (normalised ? { ...suppliedDef, uuid: suppliedDef.uuid || formId || \"\" } as FormDefinition : normaliseForm(suppliedDef, formId))\n : null;\n let submission: FormValues | undefined;\n if (submissionId && mode !== \"NEW\") {\n const s = await fetchSubmission(client, submissionId);\n submission = s.values;\n if (!def && s.form?.elements.length) def = { ...s.form, uuid: formId || s.form.uuid };\n }\n if (!def) {\n if (!formId) throw new Error(\"No form configured\");\n def = await fetchForm(client, formId);\n }\n // Sheets load their rows lazily (useSheetField); ids stay in the value.\n const init = buildInitialValues(def.elements, { defaults: argsRef.current.defaultValues, submission, user });\n if (def.elements.some((e) => resolveFieldType(e) === \"INPUT_IP\")) {\n const info = await clientInfo(client);\n def.elements.filter((e) => resolveFieldType(e) === \"INPUT_IP\").forEach((e) => { if (!init[e.elementId]) init[e.elementId] = info?.ip ?? \"\"; });\n }\n def.elements.filter((e) => resolveFieldType(e) === \"INPUT_DEVICE_INFO\").forEach((e) => {\n if (!init[e.elementId] && typeof navigator !== \"undefined\") init[e.elementId] = navigator.userAgent;\n });\n if (!alive) return;\n initialRef.current = init;\n setDefinition(def); setValues(init); setTouched(new Set()); setFlagged(new Set()); setServerErrors({}); setDirty(false);\n setStatus(\"ready\");\n })().catch((e) => { if (alive) { setError(e instanceof Error ? e : new Error(String(e))); setStatus(\"error\"); } });\n return () => { alive = false; };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loadKey, client]);\n\n const elements = definition?.elements ?? [];\n const byId = useMemo(() => new Map(elements.map((e) => [e.elementId, e])), [elements]);\n const labels = useMemo(() => elements.map((e) => e.label).filter(Boolean), [elements]);\n const overrides = useMemo(() => applyRules(elements, values), [elements, values]);\n const readOnly = mode === \"DISABLED\" || !!definition?.configurations?.editingLocked;\n\n const hiddenSet = useMemo(() => new Set(hiddenFields ?? []), [hiddenFields]);\n const skipSet = useMemo(() => new Set((skipTypes ?? []).map((s) => s.toUpperCase())), [skipTypes]);\n\n // A container hidden by a rule (or by definition) hides everything inside it.\n const hiddenByParent = useMemo(() => {\n const out = new Set<string>();\n const visit = (el: FormElement) => childIdsOf(el).forEach((id) => {\n if (out.has(id)) return;\n out.add(id);\n const c = byId.get(id);\n if (c) visit(c);\n });\n elements.forEach((el) => {\n if (!CONTAINER_KINDS.has(fieldKindOf(el))) return;\n const o = overrides.get(el.elementId) ?? {};\n if (o.isHidden ?? el.hidden) visit(el);\n });\n return out;\n }, [elements, overrides, byId]);\n\n const stateOf = useCallback((el: FormElement) => {\n const o = overrides.get(el.elementId) ?? {};\n return {\n hidden: hiddenByParent.has(el.elementId) || (o.isHidden ?? el.hidden),\n disabled: readOnly || (o.isDisabled ?? el.disabled),\n required: o.isRequired ?? el.required,\n };\n }, [overrides, readOnly, hiddenByParent]);\n\n // ── Formulas: recompute whenever an input changes ─────────────────────────\n useEffect(() => {\n if (status !== \"ready\") return;\n const formulas = elements.filter((e) => resolveFieldType(e) === \"INPUT_FORMULA\" && e.properties?.formula);\n if (!formulas.length) return;\n const byLabel = new Map(elements.map((e) => [e.label, e.elementId]));\n const next: FormValues = {};\n const empty = (v: any) => v === null || v === undefined || v === \"\" || (Array.isArray(v) && !v.length);\n formulas.forEach((el) => {\n // Nothing to compute from yet → leave the result blank instead of 0.\n const refs = formulaLabels(el.properties.formula, labels);\n if (refs.length && refs.every((l) => empty(values[byLabel.get(l) ?? l]))) {\n if (values[el.elementId] != null && values[el.elementId] !== \"\") next[el.elementId] = null;\n return;\n }\n const r = evaluateFormula(el.properties.formula, (label) => {\n const id = byLabel.get(label) ?? label;\n return id in next ? next[id] : values[id];\n }, labels);\n const v = r === null ? null : r;\n if (String(v ?? \"\") !== String(values[el.elementId] ?? \"\")) next[el.elementId] = v;\n });\n if (Object.keys(next).length) setValues((prev) => ({ ...prev, ...next }));\n }, [values, elements, labels, status]);\n\n // Hiding a field by a rule does NOT clear its value — same as ZAI-Dashboard\n // (applyDependencies only resolves hidden/required/disabled) and zvolv-web\n // (performDependency only toggles isHidden). Hidden fields are skipped by validation.\n\n // ── Writes ────────────────────────────────────────────────────────────────\n const applyValues = useCallback((data: Record<string, any>) => {\n if (!data || typeof data !== \"object\") return;\n const loose = (s: string) => String(s).toLowerCase().replace(/[^a-z0-9]+/g, \"\");\n const index = new Map<string, string>();\n elements.forEach((el) => {\n index.set(el.elementId, el.elementId);\n if (el.id) index.set(String(el.id), el.elementId);\n if (el.label) { index.set(el.label, el.elementId); index.set(loose(el.label), el.elementId); }\n });\n const next: FormValues = {};\n const protectedIds = new Set(elements.filter((el) => resolveFieldType(el) === \"ON_BEHALF_OF\").map((el) => el.elementId));\n Object.entries(data).forEach(([k, v]) => {\n const id = index.get(k) ?? index.get(loose(k));\n if (id && !protectedIds.has(id)) next[id] = v;\n });\n if (Object.keys(next).length) setValues((p) => { const merged = { ...p, ...next }; valuesRef.current = merged; return merged; });\n }, [elements]);\n\n const withBusy = useCallback(async <T,>(id: string, fn: () => Promise<T>): Promise<T> => {\n setBusy((b) => new Set(b).add(id));\n try { return await fn(); } finally { setBusy((b) => { const n = new Set(b); n.delete(id); return n; }); }\n }, []);\n\n const triggerBody = useCallback((vals: FormValues) =>\n buildTriggerBody(elements, vals, { formId: definition?.uuid ?? formId, submissionId: submissionId ?? submittedId }),\n [elements, definition, formId, submissionId, submittedId]);\n\n /** properties.actions[TRIGGER_AUTOMATION] on a changed field → formData written back. */\n const runFieldAutomations = useCallback((el: FormElement, vals: FormValues) => {\n if (argsRef.current.skipAutomation) return;\n const acts = (el.properties?.actions ?? []).filter((a: any) => String(a?.type ?? \"\").toUpperCase() === \"TRIGGER_AUTOMATION\" && (a.triggerID ?? a.triggerId));\n acts.forEach((a: any) => {\n void withBusy(el.elementId, async () => {\n try {\n const res = await invokeTrigger(client, a.triggerID ?? a.triggerId, triggerBody(vals));\n const fd = formDataOf(res);\n if (fd) applyValues(fd);\n if (res?.comment?.type) setServerErrors((e) => ({ ...e, [el.elementId]: res.comment.type === \"error\" ? res.comment.message : undefined }));\n } catch (e) {\n console.warn(`[@zestl/zvolv-widgets] field automation failed for ${el.label}`, e);\n }\n });\n });\n }, [client, triggerBody, applyValues, withBusy]);\n\n const setValue = useCallback((id: string, value: any) => {\n const el = byId.get(id);\n const next = { ...valuesRef.current, [id]: value };\n valuesRef.current = next;\n setValues(next);\n setDirty(true);\n setServerErrors((e) => (e[id] ? { ...e, [id]: undefined } : e));\n setFlagged((f) => { if (!f.has(id)) return f; const n = new Set(f); n.delete(id); return n; });\n if (!el) return;\n runFieldAutomations(el, next);\n elements.forEach((other) => {\n const watch: any[] = other.properties?.triggerOnFieldChange ?? [];\n if (other.elementId !== id && Array.isArray(watch) && watch.map(String).includes(id)) runFieldAutomations(other, next);\n });\n }, [byId, elements, runFieldAutomations]);\n\n const touch = useCallback((id: string) => setTouched((t) => (t.has(id) ? t : new Set(t).add(id))), []);\n\n // ── Validation ────────────────────────────────────────────────────────────\n const clientErrors = useMemo<FormErrors>(() =>\n validateForm(elements, values, (el) => {\n const s = stateOf(el);\n // Children of a hidden container are hidden too.\n return { hidden: s.hidden || hiddenSet.has(el.elementId) || hiddenSet.has(el.label), required: s.required };\n }),\n [elements, values, stateOf, hiddenSet]);\n\n const errors = useMemo<FormErrors>(() => ({ ...clientErrors, ...Object.fromEntries(Object.entries(serverErrors).filter(([, v]) => v)) }), [clientErrors, serverErrors]);\n\n const validate = useCallback((ids?: string[]) => {\n const keys = ids ?? Object.keys(errors);\n if (ids) setTouched((t) => { const n = new Set(t); ids.forEach((i) => n.add(i)); return n; });\n else setSubmitAttempted(true);\n const bad = keys.filter((k) => errors[k]);\n setFlagged((f) => { const n = new Set(ids ? [...f].filter((x) => !ids.includes(x)) : []); bad.forEach((k) => n.add(k)); return n; });\n return !bad.length;\n }, [errors]);\n\n // ── Field descriptors ─────────────────────────────────────────────────────\n const fields = useMemo<FormField[]>(() => elements.map((el) => {\n const t = resolveFieldType(el);\n const kind = fieldKindOf(el);\n const s = stateOf(el);\n const p = el.properties ?? {};\n const a = el.attributes ?? {};\n const pagesRaw: any[] = t === \"STEPPER\" ? a.Steps ?? a.steps ?? [] : t === \"TAB\" ? a.Tabs ?? a.tabs ?? [] : [];\n const showErr = flagged.has(el.elementId) || !!serverErrors[el.elementId];\n const numericKind = kind === \"number\" || kind === \"currency\" || kind === \"percent\" || kind === \"rating\" || kind === \"slider\";\n const format = typeof p.format === \"object\" ? p.format : null;\n const f: FormField = {\n id: el.elementId,\n type: t,\n kind,\n label: el.label,\n hideLabel: el.hideLabel,\n placeholder: p.hint ?? p.placeholder ?? undefined,\n help: a.helpMsg ?? a.infoMsg ?? p.helpMsg ?? undefined,\n required: s.required,\n disabled: s.disabled || kind === \"formula\" || kind === \"autonumber\" || kind === \"onbehalf\",\n hidden: s.hidden || hiddenSet.has(el.elementId) || hiddenSet.has(el.label) || skipSet.has(t) || kind === \"system\",\n span: el.width,\n value: values[el.elementId],\n error: showErr ? errors[el.elementId] : undefined,\n touched: touched.has(el.elementId),\n options: kind === \"action\" && isActionDropdown(el)\n ? ((p.actionEleIds ?? []) as string[]).map((id) => byId.get(String(id))).filter(Boolean).map((o: any) => ({ label: o.label, value: o.label }))\n : normalizeOptions(p.options),\n multiple: kind === \"lookup\" || kind === \"user\" ? !isSingleLookup(el) : false,\n allowAddOptions: !!p.allowAddOptions,\n min: numericKind ? numOr(p.minVal ?? p.min) ?? (t === \"INPUT_PERCENT\" || kind === \"slider\" ? 0 : kind === \"rating\" ? 1 : undefined) : undefined,\n max: numericKind ? numOr(p.maxVal ?? p.max) ?? (t === \"INPUT_PERCENT\" || kind === \"slider\" ? 100 : kind === \"rating\" ? 5 : undefined) : undefined,\n step: numOr(p.step),\n precision: numOr(p.precision) ?? (t === \"INPUT_CURRENCY\" ? 2 : undefined),\n prefix: format?.prefix ?? p.prefix ?? p.currencySymbol ?? (t === \"INPUT_CURRENCY\" ? \"₹\" : undefined),\n suffix: p.suffix ?? (t === \"INPUT_PERCENT\" ? \"%\" : undefined),\n accept: kind === \"file\" ? acceptOf(el) : undefined,\n maxSizeKB: kind === \"file\" ? numOr(a.allowedFileMaxSize ?? p.allowedFileMaxSize) : undefined,\n maxCount: kind === \"file\" ? numOr(a.allowedFileCount ?? p.allowedFileCount ?? a.allowedFileMaxCount ?? p.allowedFileMaxCount ?? p.max) ?? (a.ShowAsProfileImagePicker || a.profilePicker ? 1 : undefined) : undefined,\n childIds: CONTAINER_KINDS.has(kind) ? childIdsOf(el) : [],\n pages: pagesRaw.length ? pagesRaw.map((pg: any, i: number) => ({ title: pg.title ?? pg.label ?? `Step ${i + 1}`, description: pg.description, fieldIds: pg.childElements ?? [] })) : undefined,\n html: kind === \"display\" ? String(values[el.elementId] ?? el.defaultValue ?? p.text ?? \"\") : undefined,\n variant: kind === \"action\" && isActionDropdown(el) ? \"dropdown\" : kind === \"action\" ? (a.outline ? \"outline\" : \"primary\") : kind === \"checkbox\" && (a.showAsSwitch || p.showAsSwitch) ? \"switch\" : undefined,\n displayText: kind === \"onbehalf\" ? onBehalfName(values[el.elementId]) : undefined,\n dateFormat: kind === \"date\" || kind === \"datetime\" ? toDayjsFormat(p.format, kind === \"datetime\") : undefined,\n maxLength: kind === \"text\" || kind === \"textarea\" || kind === \"richtext\"\n ? numOr(p.maxLength ?? p.max ?? (kind === \"richtext\" ? a.charactersCount : undefined)) : undefined,\n element: el,\n setValue: (v: any) => setValue(el.elementId, v),\n onBlur: () => touch(el.elementId),\n };\n return f;\n }), [elements, values, errors, stateOf, touched, flagged, serverErrors, hiddenSet, skipSet, setValue, touch, onBehalfName]);\n\n const fieldMap = useMemo(() => new Map(fields.map((f) => [f.id, f])), [fields]);\n const claimed = useMemo(() => { const s = new Set<string>(); fields.forEach((f) => f.childIds.forEach((c) => s.add(c))); return s; }, [fields]);\n const rootFields = useMemo(() => fields.filter((f) => !claimed.has(f.id) && !f.hidden && f.kind !== \"unknown\"), [fields, claimed]);\n const childrenOf = useCallback((f: FormField | string, visibleOnly = true) => {\n const ff = typeof f === \"string\" ? fieldMap.get(f) : f;\n return (ff?.childIds ?? []).map((id) => fieldMap.get(id)).filter((c): c is FormField => !!c && (!visibleOnly || !c.hidden));\n }, [fieldMap]);\n\n // ── Submit ────────────────────────────────────────────────────────────────\n const runRemoteValidation = useCallback(async (vals: FormValues): Promise<FormErrors> => {\n if (argsRef.current.skipValidations) return {};\n const out: FormErrors = {};\n for (const el of elements) {\n const rules = remoteValidators(el);\n const v = vals[el.elementId];\n if (!rules.length || stateOf(el).hidden || v === null || v === undefined || v === \"\") continue;\n if (JSON.stringify(v) === JSON.stringify(initialRef.current[el.elementId])) continue;\n for (const r of rules) {\n const trig = r.triggerID ?? r.triggerId ?? r.automationId ?? r.id;\n if (!trig) continue;\n try {\n const res = await invokeTrigger(client, trig, { ...triggerBody(vals), formId: definition?.uuid, validateFor: { elementId: el.elementId, isInputSheet: false } });\n if (res?.comment?.type === \"error\") out[el.elementId] = res.comment.message;\n else if (res?.error) out[el.elementId] = res.message ?? r.errorMessage ?? \"Validation failed\";\n } catch { out[el.elementId] = r.errorMessage ?? \"Validation failed\"; }\n }\n }\n return out;\n }, [elements, stateOf, client, triggerBody, definition]);\n\n const postSheetRows = useCallback(async (vals: FormValues, parentId?: string): Promise<FormValues> => {\n const out = { ...vals };\n for (const el of elements) {\n const t = resolveFieldType(el);\n if (t !== \"INPUT_SHEET\" && t !== \"INPUT_CHILD_WIDGET\") continue;\n const child = sheetDefs.current.get(el.elementId);\n const rows: any[] = Array.isArray(vals[el.elementId]) ? vals[el.elementId] : [];\n if (!child || !rows.some((r) => r && typeof r === \"object\")) continue;\n const bad = rows.some((r) => sheetRowNeedsCheck(r) && child.elements.some((c) => sheetCellChecked(c) && validateField(c, r[c.elementId])));\n if (bad) throw new Error(`Complete the highlighted cells in ${el.label || \"the table\"}`);\n const saved: any[] = [];\n for (const row of rows) {\n if (!row || typeof row !== \"object\") { saved.push(row); continue; }\n const { _submissionId, _dirty, _rowKey, ...raw } = row;\n if (_submissionId && !_dirty) { saved.push(row); continue; }\n // The API re-evaluates formula cells and rejects a mismatch — always send fresh results.\n const cells = computeRowFormulas(child.elements, raw);\n const res = _submissionId\n ? await updateSubmission(client, child, _submissionId, child.elements, cells)\n : await createSubmission(client, child, child.elements, cells, { parentSubmissionId: parentId });\n saved.push({ ...cells, _submissionId: _submissionId ?? submissionIdOf(res) });\n }\n out[el.elementId] = saved;\n }\n return out;\n }, [elements, client]);\n\n const submit = useCallback(async () => {\n if (!definition || readOnly) return null;\n setSubmitAttempted(true);\n setSubmitError(null);\n if (!argsRef.current.skipValidations) {\n const bad = Object.keys(clientErrors).filter((k) => clientErrors[k]);\n setFlagged(new Set(bad));\n if (bad.length) return null;\n }\n setSubmitting(true);\n try {\n const remote = await runRemoteValidation(valuesRef.current);\n if (Object.keys(remote).length) { setServerErrors((e) => ({ ...e, ...remote })); return null; }\n if (mode === \"NEW_DO_NOT_SUBMIT\") {\n const result = { submissionId: null, response: valuesRef.current };\n argsRef.current.onSubmitted?.({ ...result, values: valuesRef.current });\n return result;\n }\n const vals = await postSheetRows(valuesRef.current, submissionId ?? undefined);\n const opts = { skipAutomation: argsRef.current.skipAutomation, skipValidations: argsRef.current.skipValidations };\n const submitEls = submitElementsOf(elements);\n const response = submissionId && mode !== \"NEW\"\n ? await updateSubmission(client, definition, submissionId, submitEls, vals, opts)\n : await createSubmission(client, definition, submitEls, vals, opts);\n const newId = submissionId && mode !== \"NEW\" ? submissionId : submissionIdOf(response);\n setValues(vals);\n setSubmittedId(newId);\n setDirty(false);\n if (mode === \"NEW\") setStatus(\"submitted\");\n argsRef.current.onSubmitted?.({ submissionId: newId, response, values: vals });\n return { submissionId: newId, response };\n } catch (e: any) {\n setSubmitError(e?.response?.data?.message ?? e?.message ?? \"Submission failed\");\n return null;\n } finally {\n setSubmitting(false);\n }\n }, [definition, readOnly, clientErrors, runRemoteValidation, mode, postSheetRows, submissionId, elements, client]);\n\n const reset = useCallback(() => {\n setValues(initialRef.current); setTouched(new Set()); setFlagged(new Set()); setServerErrors({});\n setSubmitAttempted(false); setSubmitError(null); setDirty(false);\n if (definition) setStatus(\"ready\");\n }, [definition]);\n\n // ── Action buttons ────────────────────────────────────────────────────────\n const apiRef = useRef<ZvolvFormApi | null>(null);\n /**\n * Action buttons — every actionType ZAI-Dashboard ActionButtonField and\n * zvolv-web ZActionService handle. actionType = properties.actionType ??\n * attributes.subType (when not the element type) ?? properties.subType ?? OPEN_URL.\n * The host's onAction gets first refusal; actions that open other UI\n * (another form, a task, a project) need it — see openFormRequest().\n */\n const runAction = useCallback(async (field: FormField, choice?: string): Promise<ActionOutcome> => {\n const p = field.element.properties ?? {};\n const subType = String(field.element.attributes?.subType ?? \"\");\n const rawType = p.actionType ?? (subType && subType !== field.element.type && subType !== field.type ? subType : \"\") ?? p.subType;\n const actionType = String(rawType || p.subType || \"\").toUpperCase();\n const value = valuesRef.current[field.id] ?? field.value;\n const ok = (fallback?: string) => ({ ok: true, message: p.hideSuccessMessage ? undefined : p.successMessage ?? fallback });\n const fail = (fallback: string) => ({ ok: false, message: p.errorMessage ?? fallback });\n const browser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n\n if (field.type === \"CASCADED_ACTIONS\" && isActionDropdown(field.element)) {\n // ACTION_DROPDOWN (zvolv-web z-cascaded-actions): run only the picked action, or its cascade.\n const pick = choice ?? (typeof value === \"string\" ? value : \"\");\n const target = ((p.actionEleIds ?? []) as string[]).map((id) => fieldMap.get(String(id))).find((f) => f && f.label === pick);\n if (!target) return { ok: false, message: \"No actions found to perform!\" };\n setValue(field.id, pick);\n return runAction(target);\n }\n if (field.type === \"CASCADED_ACTIONS\") {\n for (const id of (p.actionEleIds ?? []) as string[]) {\n const f = fieldMap.get(String(id));\n if (f) { const r = await runAction(f); if (!r.ok) return r; }\n }\n if (p.submit) await submit();\n return { ok: true };\n }\n const handled = await argsRef.current.onAction?.(field, apiRef.current!);\n if (handled) return handled;\n\n const afterAutomation = (res: any) => {\n const fd = formDataOf(res);\n if (fd) applyValues(fd);\n if (p.refreshForm && (submissionId || submittedId)) {\n const delay = Number(p.refreshFormDelay) || 0;\n setTimeout(() => setReloadTick((n) => n + 1), delay);\n }\n };\n\n const trig = p.triggerID ?? p.triggerId ?? p.TriggerID ?? p.actionID ?? p.automationId;\n const isTrigger = actionType === \"TRIGGER_AUTOMATION\" || actionType === \"TRIGGER\"\n || field.type === \"TRIGGER_AUTOMATION\" || field.type === \"INPUT_TRIGGER\" || (!actionType && !!trig);\n if (isTrigger) {\n const zeno = String(p.automationType ?? \"\").toUpperCase() === \"ZENO\";\n if (zeno && !p.automationUuid) return fail(\"Automation ID missing from action\");\n if (!zeno && !trig) return fail(\"Automation ID missing from action\");\n return withBusy(field.id, async () => {\n try {\n const body = triggerBody(valuesRef.current);\n const res = zeno ? await invokeZeno(client, p.automationUuid, body) : await invokeTrigger(client, trig, body);\n const failed = res?.comment?.type === \"error\" || res?.error || res?.code === 500 || res?.code === 400;\n if (failed) { const fd = formDataOf(res); if (fd) applyValues(fd); return fail(res?.comment?.message ?? res?.message ?? `${field.label} failed`); }\n afterAutomation(res);\n return ok(res?.comment?.message ?? res?.message);\n } catch (e: any) {\n return fail(e?.message ?? `${field.label} failed`);\n }\n });\n }\n\n switch (actionType) {\n case \"\":\n case \"OPEN_URL\":\n case \"URL\": {\n const url = p.url ?? p.link ?? (typeof value === \"string\" && value ? value : field.element.defaultValue);\n if (url && typeof url === \"string\" && browser) window.open(url, \"_blank\", \"noopener,noreferrer\");\n return url ? { ok: true } : fail(\"No link configured\");\n }\n case \"SUBMIT\": {\n const r = await submit();\n return { ok: !!r, message: r ? p.successMessage : undefined };\n }\n case \"INVOKE_AGENT\": {\n if (!p.agentId) return fail(\"Agent ID missing from action\");\n return withBusy(field.id, async () => {\n try {\n const body = buildTriggerBody(elements, valuesRef.current, { formId: definition?.uuid ?? formId, submissionId: submissionId ?? submittedId, byLabel: true });\n const res = await invokeAgent(client, { content: { query: JSON.stringify(body), file_url: null } }, p.flowId, p.agentId);\n if (!res) return fail(`${field.label} failed`);\n const fd = extractAgentFormData(res?.reply ?? res?.data?.reply ?? res);\n if (fd) applyValues(fd);\n return p.successMessage ? ok() : { ok: true };\n } catch (e: any) { return fail(e?.message ?? `${field.label} failed`); }\n });\n }\n case \"DOWNLOAD_FILE\": {\n const file = (typeof value === \"string\" && value) || p.url || field.element.defaultValue;\n if (!file) return fail(\"File URL missing from action\");\n if (browser) { const a = document.createElement(\"a\"); a.href = String(file); a.download = p.fileName ?? \"\"; a.target = \"_blank\"; a.rel = \"noopener\"; a.click(); }\n return { ok: true };\n }\n case \"PRINT_PREVIEW\": {\n const file = (typeof value === \"string\" && value) || p.url || field.element.defaultValue;\n if (!file) return fail(\"File URL missing from action\");\n if (!browser) return fail(\"Printing needs a browser\");\n return withBusy(field.id, async () => {\n try {\n const blob = await (await fetch(String(file))).blob();\n const url = URL.createObjectURL(new Blob([blob], { type: \"application/pdf\" }));\n const frame = document.createElement(\"iframe\");\n frame.style.display = \"none\"; frame.src = url;\n document.body.appendChild(frame);\n frame.onload = () => frame.contentWindow?.print();\n return { ok: true };\n } catch { return fail(\"Failed to load file for printing\"); }\n });\n }\n case \"UPLOAD_FILE\": {\n if (!browser) return fail(\"Uploading needs a browser\");\n const file = await new Promise<File | null>((resolve) => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = () => resolve(input.files?.[0] ?? null);\n input.click();\n });\n if (!file) return fail(\"File upload failed\");\n const ext = file.name.includes(\".\") ? file.name.split(\".\").pop()!.toLowerCase() : \"\";\n if (ext && BLOCKED_FILE_EXTENSIONS.has(ext)) return { ok: false, message: `Cannot upload files with the extension .${ext}` };\n const maxKB = Number(field.element.attributes?.allowedFileMaxSize) || 0;\n if (maxKB && file.size / 1024 > maxKB) return { ok: false, message: `File size exceeds maximum limit ${maxKB} KB.` };\n return withBusy(field.id, async () => {\n try {\n const rec = await uploadFile(client, { ...field.element, type: p.cardID || p.cardId ? \"UPLOAD_FILE_IMAGE\" : field.element.type }, file, argsRef.current.zappId);\n setValue(field.id, rec.media);\n return ok(\"File successfully uploaded\");\n } catch (e: any) { return fail(e?.message ?? \"File upload failed\"); }\n });\n }\n case \"CREATE_SUBMISSION\":\n case \"EDIT_SUBMISSION\":\n case \"SAVE_SUBMISSION\":\n case \"OPEN_TASK\":\n case \"OPEN_PROJECT\":\n case \"AGENT\":\n case \"FLOW\":\n return { ok: false, message: `\"${field.label}\" (${actionType}) opens other screens — pass onAction to <ZvolvForm> and use openFormRequest(field, form)` };\n default: {\n // UPDATE / UPDATE_SUBMISSION / UPDATE_OPEN_NEW_FORM / EDIT_OPEN_NEW_FORM and unknown types: mark true, then save.\n setValue(field.id, true);\n const r = await submit();\n return { ok: !!r, message: r ? p.successMessage : undefined };\n }\n }\n }, [fieldMap, submit, client, triggerBody, applyValues, withBusy, setValue, elements, definition, formId, submissionId, submittedId]);\n\n /** Re-fetch the definition and (when saved) the submission — properties.refreshForm. */\n const reload = useCallback(() => setReloadTick((n) => n + 1), []);\n\n const [sheetVersion, setSheetVersion] = useState(0);\n const registerSheet = useCallback((id: string, def: FormDefinition) => {\n if (sheetDefs.current.get(id) === def) return;\n sheetDefs.current.set(id, def);\n setSheetVersion((n) => n + 1);\n }, []);\n const sheetDefinition = useCallback((id: string) => sheetDefs.current.get(id), []);\n\n const api: ZvolvFormApi = {\n status, error, definition, mode, readOnly, values, errors, fields, rootFields,\n field: (id) => fieldMap.get(id), childrenOf, setValue, applyValues,\n dirty, submitting, submitAttempted, submitError, submittedId,\n validate, submit, reset, runAction, reload, busy, client, registerSheet, sheetDefinition, sheetVersion,\n };\n apiRef.current = api;\n return api;\n}\n\n// ── Field-level hooks ───────────────────────────────────────────────────────\n\nexport { rowSubmissionIds, isLegacyId, fetchRows };\n\n/**\n * What an \"open another screen\" action button wants, for the host's onAction —\n * mirrors ZAI-Dashboard ActionButtonField:\n * CREATE_SUBMISSION → NEW on properties.formId\n * EDIT_SUBMISSION / OPEN_TASK → EDIT on the button's value (a submission / task id)\n * SAVE_SUBMISSION → properties.formId, EDIT when the button holds an id, else NEW,\n * prefilled through properties.inputMap (source → destination elementId)\n * OPEN_PROJECT → the button's value is a project WID\n * After the host saves, write the new id back with form.setValue(field.id, id).\n */\nexport interface OpenFormRequest {\n actionType: string;\n formId?: string;\n submissionId?: string;\n projectId?: string;\n mode: \"NEW\" | \"EDIT\";\n defaultValues?: Record<string, any>;\n}\n\nexport function openFormRequest(field: FormField, form: Pick<ZvolvFormApi, \"values\">): OpenFormRequest | null {\n const p = field.element.properties ?? {};\n const t = String(p.actionType ?? p.subType ?? \"\").toUpperCase();\n const value = form.values[field.id] ?? field.value;\n const has = value != null && value !== \"\" && value !== true;\n const formId = p.formId ?? p.formID;\n switch (t) {\n case \"CREATE_SUBMISSION\": return formId ? { actionType: t, formId: String(formId), mode: \"NEW\" } : null;\n case \"EDIT_SUBMISSION\":\n case \"OPEN_TASK\": return has ? { actionType: t, submissionId: String(value), mode: \"EDIT\" } : null;\n case \"OPEN_PROJECT\": return has ? { actionType: t, projectId: String(value), mode: \"EDIT\" } : null;\n case \"SAVE_SUBMISSION\": {\n if (!formId) return null;\n const defaults: Record<string, any> = {};\n (Array.isArray(p.inputMap) ? p.inputMap : []).forEach((m: any) => {\n if (m?.sourceElementId && m?.destinationElementId && form.values[m.sourceElementId] !== undefined) defaults[m.destinationElementId] = form.values[m.sourceElementId];\n });\n return { actionType: t, formId: String(formId), submissionId: has ? String(value) : undefined, mode: has ? \"EDIT\" : \"NEW\", defaultValues: Object.keys(defaults).length ? defaults : undefined };\n }\n default: return null;\n }\n}\n","/**\n * ABA trial widgets — INPUT_PERCENT_CORRECT, INPUT_TIME_SAMPLING, INPUT_TASK_ANALYSIS.\n * Ported from ZAI-Dashboard PercentCorrectField / TimeSamplingField / TaskAnalysisField\n * (value shapes identical) with zvolv-web's convention that the configuration may\n * live on element.properties (ResponseButtons, maximumNumberOfTrials, steps …).\n * The host draws the buttons; this hook owns the state and the stored value.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { FormField, ZvolvFormApi } from \"./useZvolvForm\";\n\nexport interface TrialButton {\n label: string;\n icon?: string;\n color?: string;\n hideLabel?: boolean;\n disabled?: boolean;\n /** Second-level buttons shown after this response is pressed. */\n prompts: { label: string; icon?: string; color?: string; hideLabel?: boolean }[];\n}\n\nexport interface TrialLogEntry { label: string; correct: boolean; detail?: string }\n\nexport interface TrialFieldState {\n type: \"percent\" | \"time\" | \"task\";\n /** Response buttons for the current trial (task analysis: for the current step). */\n buttons: TrialButton[];\n /** Set after a response with prompt buttons is pressed; pick one with prompt(). */\n activeResponse?: string;\n prompts: TrialButton[\"prompts\"];\n respond: (label: string) => void;\n prompt: (label: string) => void;\n cancelPrompt: () => void;\n /** Percent correct / task analysis: undo the last trial. */\n prev: () => void;\n currentTrial: number;\n maxTrials: number;\n complete: boolean;\n /** Share of responses labelled IND / NR / CHECK (ZAI's \"correct\" set), 0–100. */\n percentCorrect: number;\n log: TrialLogEntry[];\n disabled: boolean;\n // Time sampling\n timer: number;\n formattedTimer: string;\n running: boolean;\n start: () => void;\n pause: () => void;\n reset: () => void;\n interval: number;\n intervalCount: number;\n timeLimit: number;\n // Task analysis\n steps: string[];\n currentStep: number;\n stepName: string;\n chain: \"forward\" | \"backward\" | \"whole\";\n}\n\nconst CORRECT = [\"IND\", \"NR\", \"CHECK\"];\nconst isCorrect = (l: string) => CORRECT.includes(String(l).toUpperCase());\nconst fmt = (s: number) => [Math.floor(s / 3600), Math.floor((s % 3600) / 60), s % 60].map((v) => String(v).padStart(2, \"0\")).join(\":\");\nconst toButtons = (rb: any): TrialButton[] => Object.entries(rb ?? {}).map(([label, c]: [string, any]) => ({\n label, icon: c?.icon, color: c?.color, hideLabel: !!c?.hideLabel, disabled: !!c?.isDisabled,\n prompts: Object.entries(c?.PromptButtons ?? {}).map(([pl, pc]: [string, any]) => ({ label: pl, icon: pc?.icon, color: pc?.color, hideLabel: !!pc?.hideLabel })),\n}));\n\nexport function useTrialField(form: ZvolvFormApi, field: FormField): TrialFieldState {\n const t = field.type;\n const type: TrialFieldState[\"type\"] = t === \"INPUT_TIME_SAMPLING\" ? \"time\" : t === \"INPUT_TASK_ANALYSIS\" ? \"task\" : \"percent\";\n const props = field.element.properties ?? {};\n const value = field.value && typeof field.value === \"object\" ? field.value : null;\n // Configuration: the stored value's conf (ZAI) over element.properties (zvolv-web).\n const conf = useMemo(() => ({ ...props, ...(value?.conf ?? {}) }), [props, value?.conf]);\n const disabled = field.disabled || form.readOnly;\n const set = (v: any) => form.setValue(field.id, v);\n const [active, setActive] = useState<string | undefined>();\n\n // ── shared bits ──\n const maxTrials = Number(conf.maximumNumberOfTrials ?? (type === \"task\" ? 5 : 10));\n\n // ── Percent correct ──\n const pcResp: any[] = type === \"percent\" && Array.isArray(value?.buttonResp) ? value!.buttonResp : [];\n const pcTrial = type === \"percent\" ? Number(conf.currentTrial ?? pcResp.length) || pcResp.length : 0;\n const linkedTimer = () => {\n const v = conf.LinkedTimerField ? form.values[conf.LinkedTimerField] : null;\n return v?.lastStatus?.timer ?? (typeof v === \"number\" ? v : 0);\n };\n\n // ── Time sampling ──\n const timeLimit = Number(conf.timeLimit ?? 300);\n const interval = Number(conf.timeInterval ?? 30) || 30;\n const [timer, setTimer] = useState<number>(Number(value?.lastStatus?.timer ?? 0));\n const [running, setRunning] = useState(false);\n const timerRef = useRef(timer); timerRef.current = timer;\n useEffect(() => {\n if (!running) return;\n const id = setInterval(() => setTimer((p) => { const n = p + 1; timerRef.current = n; if (n >= timeLimit) setRunning(false); return n; }), 1000);\n return () => clearInterval(id);\n }, [running, timeLimit]);\n const tsResp: any[] = type === \"time\" && Array.isArray(value?.buttonResp) ? value!.buttonResp : [];\n const bound = (s: number) => { const i = Math.floor(s / interval); return `${i * interval}-${(i + 1) * interval}`; };\n const tsEmit = (resp: any[], at: number) => set({\n conf: value?.conf ?? { timeLimit, timeInterval: interval, ResponseButtons: conf.ResponseButtons ?? {} },\n buttonResp: resp,\n lastStatus: { timer: at, intervalCount: Math.floor(at / interval), formattedTimer: fmt(at), currentIntervalBound: bound(at) },\n });\n\n // ── Task analysis ──\n const steps = useMemo(() => Object.keys(conf.steps ?? {}), [conf.steps]);\n const chain: TrialFieldState[\"chain\"] = conf.type === \"backward\" ? \"backward\" : conf.type === \"whole\" ? \"whole\" : \"forward\";\n const taResp: Record<string, any[]> = type === \"task\" && value?.buttonResp && typeof value.buttonResp === \"object\" && !Array.isArray(value.buttonResp) ? value.buttonResp : {};\n const taTrial = type === \"task\" ? parseInt(String(value?.currentStatus?.currentTrial ?? \"0\").replace(\"Trial \", \"\"), 10) || 0 : 0;\n const firstStep = chain === \"backward\" ? Math.max(0, steps.length - 1) : 0;\n const taStep = type === \"task\" ? Number(value?.currentStatus?.currentStep ?? firstStep) : 0;\n const stepName = steps[taStep] ?? \"\";\n const taEmit = (resp: Record<string, any[]>, trial: number, step: number) => set({\n conf: { ...(value?.conf ?? { type: chain, maximumNumberOfTrials: maxTrials, steps: conf.steps ?? {} }), currentTrial: trial },\n buttonResp: resp,\n currentStatus: { currentStep: step, currentTrial: `Trial ${trial}` },\n });\n\n const currentTrial = type === \"percent\" ? pcTrial : type === \"task\" ? taTrial : tsResp.length;\n const complete = type === \"time\" ? timer >= timeLimit : currentTrial >= maxTrials;\n const rb = type === \"task\" ? conf.steps?.[stepName]?.ResponseButtons : conf.ResponseButtons;\n const buttons = useMemo(() => toButtons(rb), [rb]);\n\n const record = useCallback((response: string, promptLabel?: string) => {\n if (disabled) return;\n if (type === \"percent\") {\n if (pcTrial >= maxTrials) return;\n const entry: any = { sessionTimerValue: linkedTimer(), responseButtonPressed: response, ...(promptLabel ? { promptButtonPressed: promptLabel } : {}) };\n const next = pcTrial + 1;\n set({ conf: { ...(value?.conf ?? { maximumNumberOfTrials: maxTrials, ResponseButtons: conf.ResponseButtons ?? {}, LinkedTimerField: conf.LinkedTimerField }), currentTrial: next }, buttonResp: [...pcResp, entry] });\n } else if (type === \"time\") {\n const at = timerRef.current;\n tsEmit([...tsResp, { sessionTimerValue: at, responseButtonPressed: response, ...(promptLabel ? { promptButtonPressed: promptLabel } : {}), interval: Math.floor(at / interval), intervalBound: bound(at) }], at);\n } else {\n if (taTrial >= maxTrials || !steps.length) return;\n const key = `Trial ${taTrial}`;\n const resp = { ...taResp, [key]: [...(taResp[key] ?? []), { responseButtonPressed: response, ...(promptLabel ? { promptButtonPressed: promptLabel } : {}), stepName }] };\n let step = taStep, trial = taTrial;\n if (chain === \"backward\") { step -= 1; if (step < 0) { step = steps.length - 1; trial += 1; } }\n else { step += 1; if (step >= steps.length) { step = 0; trial += 1; } }\n taEmit(resp, trial, step);\n }\n setActive(undefined);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled, type, pcTrial, maxTrials, pcResp, tsResp, taResp, taTrial, taStep, steps, stepName, chain, value, conf]);\n\n const respond = useCallback((label: string) => {\n const b = buttons.find((x) => x.label === label);\n if (!b || b.disabled) return;\n if (b.prompts.length) setActive(label); else record(label);\n }, [buttons, record]);\n const prompt = useCallback((label: string) => { if (active) record(active, label); }, [active, record]);\n\n const prev = useCallback(() => {\n if (disabled) return;\n if (type === \"percent\" && pcTrial > 0) {\n set({ conf: { ...(value?.conf ?? { maximumNumberOfTrials: maxTrials, ResponseButtons: conf.ResponseButtons ?? {} }), currentTrial: pcTrial - 1 }, buttonResp: pcResp.slice(0, -1) });\n } else if (type === \"task\" && taTrial > 0) {\n const resp = { ...taResp }; delete resp[`Trial ${taTrial}`];\n taEmit(resp, taTrial - 1, firstStep);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled, type, pcTrial, pcResp, taTrial, taResp, firstStep, value, conf, maxTrials]);\n\n const reset = useCallback(() => {\n if (type !== \"time\" || disabled) return;\n setTimer(0); setRunning(false); setActive(undefined);\n tsEmit([], 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [type, disabled, value, conf]);\n\n const allResp: { r: any; trial?: string }[] = type === \"task\"\n ? Object.entries(taResp).flatMap(([trial, arr]) => (Array.isArray(arr) ? arr : []).map((r) => ({ r, trial })))\n : (type === \"time\" ? tsResp : pcResp).map((r) => ({ r }));\n const log: TrialLogEntry[] = allResp.map(({ r, trial }, i) => ({\n label: type === \"task\" ? `${trial} / ${r.stepName ?? \"?\"}: ${r.responseButtonPressed}` : type === \"percent\" ? `Trial ${i + 1}: ${r.responseButtonPressed}` : String(r.responseButtonPressed),\n correct: isCorrect(r.responseButtonPressed),\n detail: [r.promptButtonPressed ? `→ ${r.promptButtonPressed}` : \"\", type === \"time\" ? `@ ${fmt(Number(r.sessionTimerValue) || 0)}` : \"\"].filter(Boolean).join(\" \") || undefined,\n }));\n const percentCorrect = log.length ? Math.round((log.filter((l) => l.correct).length / log.length) * 100) : 0;\n\n return {\n type, buttons, activeResponse: active, prompts: buttons.find((b) => b.label === active)?.prompts ?? [],\n respond, prompt, cancelPrompt: () => setActive(undefined), prev,\n currentTrial, maxTrials, complete, percentCorrect, log, disabled,\n timer, formattedTimer: fmt(timer), running,\n start: () => { if (!disabled && timer < timeLimit) setRunning(true); }, pause: () => setRunning(false), reset,\n interval, intervalCount: Math.floor(timer / interval), timeLimit,\n steps, currentStep: taStep, stepName, chain,\n };\n}\n","/**\n * <ZvolvForm> — renders a Zvolv form with whatever field kit the host\n * supplies. Behaviour comes from useZvolvForm; appearance comes from\n * `FormKitSlot` (or the `kit` prop). The built-in kit is deliberately plain\n * native HTML so a form still works when no kit is provided.\n */\nimport React from \"react\";\nimport { FormApiContext, useZvolvForm, type FormField, type UseZvolvFormArgs, type ZvolvFormApi } from \"./useZvolvForm\";\nimport { useFieldOptions, useFileField, useSheetField } from \"./fieldHooks\";\nimport { useTrialField } from \"./trialHooks\";\nimport { formatFieldValue } from \"./values\";\n\nexport interface FormKit {\n /** Draw one field (any kind, containers included). Return undefined to use the built-in control. */\n field?: (field: FormField, form: ZvolvFormApi) => React.ReactNode | undefined;\n /** Draw the whole form: header, body and footer. Default: <FormFields> + submit bar. */\n form?: (form: ZvolvFormApi, parts: { body: React.ReactNode; title?: string; submitLabel: string }) => React.ReactNode;\n /** Loading / error / submitted screens. Return undefined for the default. */\n status?: (args: { status: \"loading\" | \"error\" | \"submitted\"; form: ZvolvFormApi }) => React.ReactNode | undefined;\n /** Grid wrapper for a list of fields (24-column spans). */\n grid?: (children: React.ReactNode, fields: FormField[]) => React.ReactNode;\n}\n\nexport const FormKitSlot = React.createContext<FormKit | null>(null);\n\nfunction useKit(local?: FormKit): FormKit {\n const ctx = React.useContext(FormKitSlot);\n return React.useMemo(() => ({ ...(ctx ?? {}), ...(local ?? {}) }), [ctx, local]);\n}\n\n/** Renders fields in a 24-column grid with the active kit. Use it inside section / tab renderers. */\nexport const FormFields: React.FC<{ form: ZvolvFormApi; fields: FormField[]; kit?: FormKit }> = ({ form, fields, kit: local }) => {\n const kit = useKit(local);\n const cells = fields.filter((f) => !f.hidden).map((f) => (\n <div key={f.id} data-field={f.id} data-kind={f.kind} data-span={Math.max(1, Math.min(24, f.span))}\n style={{ gridColumn: `span ${Math.max(1, Math.min(24, f.span))}`, minWidth: 0 }}>\n {kit.field?.(f, form) ?? <DefaultField field={f} form={form} />}\n </div>\n ));\n if (kit.grid) return <>{kit.grid(cells, fields)}</>;\n return <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(24, minmax(0, 1fr))\", gap: \"14px 16px\" }}>{cells}</div>;\n};\n\nexport interface ZvolvFormProps extends UseZvolvFormArgs {\n /** Heading above the form; defaults to the form's own title unless hidden in its config. */\n title?: string | false;\n submitLabel?: string;\n kit?: FormKit;\n className?: string;\n style?: React.CSSProperties;\n /** Receive the api (e.g. to put a submit button elsewhere). */\n formRef?: React.MutableRefObject<ZvolvFormApi | null>;\n}\n\nexport const ZvolvForm: React.FC<ZvolvFormProps> = ({ title, submitLabel, kit: local, className, style, formRef, ...args }) => {\n const form = useZvolvForm(args);\n const kit = useKit(local);\n if (formRef) formRef.current = form;\n const label = submitLabel ?? (form.mode === \"EDIT\" ? \"Save changes\" : \"Submit\");\n const heading = title === false || form.definition?.hideFormTitle ? undefined : title ?? form.definition?.title;\n\n let content: React.ReactNode;\n if (form.status !== \"ready\") {\n content = kit.status?.({ status: form.status, form }) ?? (\n <div role={form.status === \"error\" ? \"alert\" : \"status\"} style={{ padding: 16, color: form.status === \"error\" ? \"#c62828\" : \"inherit\" }}>\n {form.status === \"loading\" ? \"Loading form…\"\n : form.status === \"error\" ? (form.error?.message || \"Couldn't load this form\")\n : <>{form.definition?.successMsg || \"Submitted.\"} <button type=\"button\" onClick={form.reset}>Submit another</button></>}\n </div>\n );\n } else {\n const body = <FormFields form={form} fields={form.rootFields} kit={local} />;\n content = kit.form?.(form, { body, title: heading, submitLabel: label }) ?? (\n <form noValidate onSubmit={(e) => { e.preventDefault(); void form.submit(); }} style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n {heading && <h3 style={{ margin: 0 }}>{heading}</h3>}\n {body}\n {form.submitError && <div role=\"alert\" style={{ color: \"#c62828\" }}>{form.submitError}</div>}\n {!form.readOnly && !form.definition?.hideSubmit && (\n <div><button type=\"submit\" disabled={form.submitting}>{form.submitting ? \"Submitting…\" : label}</button></div>\n )}\n </form>\n );\n }\n return <FormApiContext.Provider value={form}><div className={className} style={style}>{content}</div></FormApiContext.Provider>;\n};\n\n// ── Built-in plain controls ─────────────────────────────────────────────────\n\nconst inputType: Record<string, string> = {\n email: \"email\", phone: \"tel\", url: \"url\", number: \"number\", currency: \"number\", percent: \"number\",\n date: \"date\", time: \"time\", datetime: \"datetime-local\", text: \"text\", scan: \"text\",\n};\n\nconst DefaultOptions: React.FC<{ field: FormField; form: ZvolvFormApi }> = ({ field, form }) => {\n const o = useFieldOptions(form, field);\n if (field.kind === \"radio\") {\n return <div role=\"radiogroup\">{o.options.map((opt) => (\n <label key={String(opt.value)} style={{ marginRight: 12 }}>\n <input type=\"radio\" name={field.id} disabled={field.disabled} checked={o.isSelected(opt)} onChange={() => o.select(opt)} /> {opt.label}\n </label>))}</div>;\n }\n return (\n <>\n {(field.kind === \"lookup\" || field.kind === \"user\") && <input placeholder=\"Search…\" value={o.search} onFocus={o.onFocus} onChange={(e) => o.setSearch(e.target.value)} disabled={field.disabled}\n onKeyDown={(e) => { if (e.key === \"Enter\" && field.type === \"INPUT_TAG\" && o.search.trim() && !o.options.length) { e.preventDefault(); o.addFreeTag(o.search); } }} />}\n <select multiple={field.multiple} disabled={field.disabled || !!o.waitingFor} onBlur={field.onBlur} onFocus={o.onFocus} onMouseDown={o.onFocus}\n value={field.multiple ? o.selected.map((s) => String(s.value)) : String(o.selected[0]?.value ?? \"\")}\n onChange={(e) => {\n const picked = Array.from(e.target.selectedOptions).map((x) => o.options.find((opt) => String(opt.value) === x.value)).filter(Boolean) as any[];\n o.select(field.multiple ? picked : picked[0] ?? null);\n }}>\n {!field.multiple && <option value=\"\">{o.waitingFor ?? (o.loading ? \"Loading…\" : field.placeholder ?? \"Select…\")}</option>}\n {[...o.selected.filter((s) => !o.options.some((x) => String(x.value) === String(s.value))), ...o.options].map((opt) => <option key={String(opt.value)} value={String(opt.value)}>{opt.label}</option>)}\n </select>\n </>\n );\n};\n\nconst DefaultFile: React.FC<{ field: FormField; form: ZvolvFormApi }> = ({ field, form }) => {\n const f = useFileField(form, field);\n return (\n <div>\n {f.canAdd && <input type=\"file\" multiple={field.maxCount !== 1} accept={field.accept} onChange={(e) => e.target.files && f.add(e.target.files)} />}\n <ul>{f.items.map((i) => <li key={i.key}>{i.url ? <a href={i.url} target=\"_blank\" rel=\"noreferrer\">{i.name}</a> : i.name}{i.uploading ? \" (uploading…)\" : \"\"}{i.error ? ` — ${i.error}` : \"\"} {!field.disabled && <button type=\"button\" onClick={() => f.remove(i.key)}>×</button>}</li>)}</ul>\n {f.rejectReason && <div role=\"alert\">{f.rejectReason}</div>}\n </div>\n );\n};\n\nconst DefaultSheet: React.FC<{ field: FormField; form: ZvolvFormApi }> = ({ field, form }) => {\n const s = useSheetField(form, field);\n if (s.loading) return <div>Loading table…</div>;\n if (s.error) return <div role=\"alert\">{s.error}</div>;\n return (\n <div>\n <table><thead><tr>{s.columns.map((c) => <th key={c.id}>{c.label}</th>)}<th /></tr></thead>\n <tbody>{s.rows.map((r, i) => (\n <tr key={r._rowKey ?? r._submissionId ?? i}>{s.columns.map((c) => (\n <td key={c.id}><input disabled={field.disabled} value={r[c.id] ?? \"\"} onChange={(e) => s.updateRow(i, c.id, e.target.value)} /></td>))}\n <td>{s.canDelete && <button type=\"button\" onClick={() => s.removeRow(i)}>×</button>}</td></tr>))}</tbody>\n </table>\n {s.canAdd && <button type=\"button\" onClick={() => s.addRow()}>Add row</button>}\n {s.limitMessage && <div role=\"alert\">{s.limitMessage}</div>}\n </div>\n );\n};\n\nconst DefaultTrials: React.FC<{ field: FormField; form: ZvolvFormApi }> = ({ field, form }) => {\n const t = useTrialField(form, field);\n return (\n <div>\n <div>{t.type === \"time\" ? `${t.formattedTimer} · interval ${t.intervalCount + 1}` : `Trial ${t.currentTrial} / ${t.maxTrials}`}{t.type === \"task\" && t.stepName ? ` · ${t.stepName}` : \"\"} · {t.percentCorrect}% correct{t.complete ? \" · complete\" : \"\"}</div>\n {t.type === \"time\" && <span><button type=\"button\" disabled={t.disabled || t.complete} onClick={t.running ? t.pause : t.start}>{t.running ? \"Pause\" : \"Start\"}</button> <button type=\"button\" disabled={t.disabled} onClick={t.reset}>Reset</button></span>}\n {t.type !== \"time\" && <button type=\"button\" disabled={t.disabled || t.currentTrial <= 0} onClick={t.prev}>Undo</button>}\n <div>{(t.activeResponse ? t.prompts : t.buttons).map((b) => (\n <button key={b.label} type=\"button\" disabled={t.disabled || t.complete} onClick={() => (t.activeResponse ? t.prompt(b.label) : t.respond(b.label))}>{b.label}</button>))}\n {t.activeResponse && <button type=\"button\" onClick={t.cancelPrompt}>Cancel</button>}</div>\n <ol>{t.log.map((l, i) => <li key={i} style={{ color: l.correct ? \"#2e7d32\" : \"#c62828\" }}>{l.label}{l.detail ? ` ${l.detail}` : \"\"}</li>)}</ol>\n </div>\n );\n};\n\nexport const DefaultField: React.FC<{ field: FormField; form: ZvolvFormApi }> = ({ field, form }) => {\n const f = field;\n const lbl = !f.hideLabel && f.kind !== \"checkbox\" && f.kind !== \"action\" && f.kind !== \"display\"\n ? <label htmlFor={f.id} style={{ display: \"block\", fontWeight: 600, marginBottom: 4 }}>{f.label}{f.required ? \" *\" : \"\"}</label> : null;\n let control: React.ReactNode;\n switch (f.kind) {\n case \"section\": case \"container\": case \"matrix\": case \"table\":\n return <fieldset><legend>{f.label}</legend><FormFields form={form} fields={form.childrenOf(f)} /></fieldset>;\n case \"tabs\": case \"steps\":\n return <fieldset><legend>{f.label}</legend>{(f.pages ?? []).map((p) => (\n <div key={p.title}><h4>{p.title}</h4><FormFields form={form} fields={p.fieldIds.map((id) => form.field(id)).filter(Boolean) as FormField[]} /></div>))}</fieldset>;\n case \"display\":\n return <div dangerouslySetInnerHTML={{ __html: f.html ?? \"\" }} />;\n case \"action\":\n if (f.variant === \"dropdown\") {\n return <label>{f.label} <select disabled={f.disabled} value={typeof f.value === \"string\" ? f.value : \"\"} onChange={(e) => e.target.value && void form.runAction(f, e.target.value)}>\n <option value=\"\">{f.placeholder ?? \"Choose an action\"}</option>{f.options.map((o) => <option key={String(o.value)} value={String(o.value)}>{o.label}</option>)}</select></label>;\n }\n return <button type=\"button\" disabled={f.disabled || form.busy.has(f.id)} onClick={() => void form.runAction(f)}>{f.label}</button>;\n case \"trials\":\n control = <DefaultTrials field={f} form={form} />;\n break;\n case \"checkbox\":\n control = <label><input id={f.id} type=\"checkbox\" role={f.variant === \"switch\" ? \"switch\" : undefined} disabled={f.disabled} checked={f.value === true} onChange={(e) => f.setValue(e.target.checked)} onBlur={f.onBlur} /> {f.label}{f.required ? \" *\" : \"\"}</label>;\n break;\n case \"onbehalf\":\n control = <input id={f.id} type=\"text\" disabled readOnly value={f.displayText ?? \"\"} />;\n break;\n case \"select\": case \"radio\": case \"lookup\": case \"user\":\n control = <DefaultOptions field={f} form={form} />;\n break;\n case \"file\":\n control = <DefaultFile field={f} form={form} />;\n break;\n case \"sheet\":\n control = <DefaultSheet field={f} form={form} />;\n break;\n case \"textarea\": case \"richtext\":\n control = <textarea id={f.id} disabled={f.disabled} placeholder={f.placeholder} value={f.value ?? \"\"} onChange={(e) => f.setValue(e.target.value)} onBlur={f.onBlur} rows={4} />;\n break;\n case \"rating\": case \"slider\":\n control = <input id={f.id} type=\"range\" min={f.min} max={f.max} step={f.step ?? 1} disabled={f.disabled} value={f.value ?? f.min ?? 0} onChange={(e) => f.setValue(Number(e.target.value))} />;\n break;\n case \"daterange\": {\n const v = Array.isArray(f.value) ? f.value : [null, null];\n control = <span><input type=\"date\" disabled={f.disabled} value={v[0] ?? \"\"} onChange={(e) => f.setValue([e.target.value || null, v[1]])} /> – <input type=\"date\" disabled={f.disabled} value={v[1] ?? \"\"} onChange={(e) => f.setValue([v[0], e.target.value || null])} /></span>;\n break;\n }\n case \"formula\": case \"autonumber\":\n control = <output id={f.id}>{formatFieldValue(f.element, f.value) || \"—\"}</output>;\n break;\n case \"signature\":\n control = f.value ? <img src={f.value} alt=\"Signature\" style={{ maxHeight: 80 }} /> : <em>No signature</em>;\n break;\n default:\n control = <input id={f.id} type={inputType[f.kind] ?? \"text\"} disabled={f.disabled} placeholder={f.placeholder}\n min={f.min} max={f.max} step={f.step ?? (f.precision ? 1 / 10 ** f.precision : undefined)}\n value={f.value ?? \"\"} onBlur={f.onBlur}\n onChange={(e) => f.setValue(inputType[f.kind] === \"number\" ? (e.target.value === \"\" ? null : Number(e.target.value)) : e.target.value)} />;\n }\n return (\n <div>\n {lbl}{control}\n {f.help && <div style={{ fontSize: 12, opacity: 0.7 }}>{f.help}</div>}\n {f.error && <div role=\"alert\" style={{ color: \"#c62828\", fontSize: 12 }}>{f.error}</div>}\n </div>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport { useWidgetData, type UseWidgetDataArgs } from \"../react/useWidgetData\";\nimport { WidgetShell } from \"./WidgetShell\";\nimport { useTokens } from \"../theme/ThemeProvider\";\nimport { resolveWidgetDefaults, type ZvolvTokens } from \"../theme/tokens\";\nimport { resolveChromeConfig } from \"../core/chrome\";\nimport { parseConfig } from \"../core/config\";\nimport { ZvolvForm, type ZvolvFormProps } from \"../forms/ZvolvForm\";\n\n// ── Tab ──────────────────────────────────────────────────────────────────────\n\nexport interface TabItem {\n key: string;\n label: any;\n /** The child widget definition this tab hosts, rendered by the host app. */\n widget: any;\n}\n\nexport interface TabRenderArgs {\n tabs: TabItem[];\n activeKey: string;\n setActiveKey: (key: string) => void;\n tokens: ZvolvTokens;\n config: any;\n}\n\nexport interface TabWidgetProps {\n title?: string;\n description?: string;\n configurations?: any;\n className?: string;\n style?: React.CSSProperties;\n /** Renders one tab's child widget. The host owns widget dispatch. */\n renderChild?: (widget: any, tab: TabItem) => React.ReactNode;\n render?: (args: TabRenderArgs) => React.ReactNode;\n}\n\n/**\n * Tab container. It holds no data of its own — it arranges child widget\n * definitions, which the host renders via `renderChild`.\n */\nexport const TabWidget: React.FC<TabWidgetProps> = ({\n title, description, configurations, className, style, renderChild, render,\n}) => {\n const t = useTokens();\n const config = useMemo(\n () => resolveWidgetDefaults(t, \"TAB\", parseConfig(configurations)),\n [t, configurations]\n );\n const chrome = resolveChromeConfig(config);\n\n const tabs: TabItem[] = useMemo(() => {\n const declared: any[] = config?.tabs ?? config?.childWidget ?? [];\n return declared.map((tab, i) => ({\n key: String(tab?.key ?? tab?.id ?? i),\n label: tab?.header ?? tab?.label ?? tab?.title ?? tab?.Title ?? `Tab ${i + 1}`,\n widget: tab?.widget ?? tab,\n }));\n }, [config]);\n\n const [activeKey, setActiveKey] = useState<string>(\"\");\n const current = activeKey || tabs[0]?.key || \"\";\n const args: TabRenderArgs = { tabs, activeKey: current, setActiveKey, tokens: t, config };\n\n return (\n <WidgetShell\n widgetType=\"TAB\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={tabs.length ? \"ready\" : \"unconfigured\"}\n unconfiguredMessage=\"No tabs configured\"\n className={className} style={style}\n >\n {render ? render(args) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", height: \"100%\", minHeight: 0 }}>\n <div style={{ display: \"flex\", gap: 4, borderBottom: `1px solid ${t.colors.border}` }}>\n {tabs.map((tab) => (\n <button key={tab.key} onClick={() => setActiveKey(tab.key)}\n style={{\n padding: \"8px 14px\", border: \"none\", background: \"transparent\", cursor: \"pointer\",\n fontFamily: t.fontFamily, fontSize: t.typography.body.fontSize,\n fontWeight: tab.key === current ? 700 : 500,\n color: tab.key === current ? t.colors.primary : t.colors.textSecondary,\n borderBottom: `2px solid ${tab.key === current ? t.colors.primary : \"transparent\"}`,\n marginBottom: -1,\n }}>{String(tab.label)}</button>\n ))}\n </div>\n <div style={{ flex: 1, minHeight: 0, paddingTop: 12 }}>\n {(() => {\n const tab = tabs.find((x) => x.key === current);\n return tab && renderChild ? renderChild(tab.widget, tab) : null;\n })()}\n </div>\n </div>\n )}\n </WidgetShell>\n );\n};\n\n// ── Form ─────────────────────────────────────────────────────────────────────\n\nexport interface FormWidgetProps {\n title?: string;\n description?: string;\n configurations?: any;\n dataSource?: any;\n className?: string;\n style?: React.CSSProperties;\n /** Extra <ZvolvForm> props (kit, onSubmitted, onAction, defaultValues …). */\n form?: Partial<ZvolvFormProps>;\n onSubmitted?: ZvolvFormProps[\"onSubmitted\"];\n /**\n * Replace the form body entirely. Without it the widget renders <ZvolvForm>,\n * styled by the nearest FormKitSlot.\n */\n render?: (args: {\n formId: any; submissionId: any; mode: \"NEW\" | \"EDIT\" | \"DISABLED\";\n config: any; tokens: ZvolvTokens;\n }) => React.ReactNode;\n}\n\n/** Resolves the form a FORM / FORM_WIDGET config points at. */\nexport function resolveFormWidget(config: any, dataSource?: any) {\n const formId = config?.formId ?? config?.additionalProperties?.formId ?? config?.body?.formId\n ?? config?.action?.FormID ?? dataSource?.formId ?? dataSource?.tableName ?? dataSource?.fields?.[0]?.formID;\n const submissionId = config?.submissionId ?? null;\n const mode: \"NEW\" | \"EDIT\" | \"DISABLED\" =\n config?.mode === \"EDIT\" || config?.mode === \"DISABLED\" ? config.mode : \"NEW\";\n return { formId: formId ? String(formId) : null, submissionId, mode };\n}\n\n/** Form widget: the headless form engine inside widget chrome. */\nexport const FormWidget: React.FC<FormWidgetProps> = ({\n title, description, configurations, dataSource, className, style, render, form, onSubmitted,\n}) => {\n const t = useTokens();\n const config = useMemo(\n () => resolveWidgetDefaults(t, \"FORM\", parseConfig(configurations)),\n [t, configurations]\n );\n const chrome = resolveChromeConfig(config);\n const { formId, submissionId, mode } = resolveFormWidget(config, dataSource);\n\n return (\n <WidgetShell\n widgetType=\"FORM\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n description={description ?? chrome.description}\n state={formId ? \"ready\" : \"unconfigured\"}\n unconfiguredMessage=\"No form configured\"\n className={className} style={style}\n >\n {render\n ? render({ formId, submissionId, mode, config, tokens: t })\n : formId && (\n <ZvolvForm\n formId={formId} submissionId={submissionId} mode={mode}\n title={false} submitLabel={config?.submitLabel}\n onSubmitted={onSubmitted}\n {...form}\n />\n )}\n </WidgetShell>\n );\n};\n\n// ── Filter panel ─────────────────────────────────────────────────────────────\n\nexport interface FilterControl {\n key: string;\n label: any;\n type: \"text\" | \"select\" | \"multiselect\" | \"date\" | \"daterange\" | \"number\";\n options?: { label: any; value: any }[];\n value?: any;\n}\n\nexport interface FilterPanelRenderArgs {\n controls: FilterControl[];\n values: Record<string, any>;\n setValue: (key: string, value: any) => void;\n apply: () => void;\n reset: () => void;\n tokens: ZvolvTokens;\n config: any;\n}\n\nexport interface FilterPanelWidgetProps {\n title?: string;\n configurations?: any;\n className?: string;\n style?: React.CSSProperties;\n /** Current filter values, owned by the dashboard (URL params). */\n value?: Record<string, any>;\n onChange?: (values: Record<string, any>) => void;\n render?: (args: FilterPanelRenderArgs) => React.ReactNode;\n}\n\n/**\n * In-grid filter panel. Dashboard filters are URL-param driven and owned by the\n * host, so this is a controlled component: it renders controls and reports\n * changes, and never issues queries itself.\n */\nexport const FilterPanelWidget: React.FC<FilterPanelWidgetProps> = ({\n title, configurations, className, style, value, onChange, render,\n}) => {\n const t = useTokens();\n const config = useMemo(\n () => resolveWidgetDefaults(t, \"FILTER_PANEL\", parseConfig(configurations)),\n [t, configurations]\n );\n const chrome = resolveChromeConfig(config);\n\n const controls: FilterControl[] = useMemo(() => {\n const declared: any[] = config?.filters ?? config?.controls ?? [];\n return declared.map((f, i) => ({\n key: String(f?.key ?? f?.field ?? f?.masterfield ?? i),\n label: f?.label ?? f?.title ?? f?.header,\n type: f?.type ?? \"text\",\n options: f?.options,\n }));\n }, [config]);\n\n const [draft, setDraft] = useState<Record<string, any>>({});\n const values = { ...draft, ...(value || {}) };\n\n const setValue = (key: string, v: any) => {\n const next = { ...values, [key]: v };\n setDraft(next);\n // Live-apply so a controlled parent stays the source of truth.\n onChange?.(next);\n };\n const apply = () => onChange?.(values);\n const reset = () => { setDraft({}); onChange?.({}); };\n\n const args: FilterPanelRenderArgs = { controls, values, setValue, apply, reset, tokens: t, config };\n\n return (\n <WidgetShell\n widgetType=\"FILTER_PANEL\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n state={controls.length ? \"ready\" : \"unconfigured\"}\n unconfiguredMessage=\"No filters configured\"\n className={className} style={style}\n >\n {render ? render(args) : (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 10, alignItems: \"flex-end\" }}>\n {controls.map((c) => (\n <label key={c.key} style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <span style={{ fontSize: t.typography.caption.fontSize, color: t.colors.textSecondary }}>\n {String(c.label ?? c.key)}\n </span>\n <input\n value={values[c.key] ?? \"\"}\n onChange={(e) => setValue(c.key, e.target.value)}\n type={c.type === \"number\" ? \"number\" : c.type === \"date\" ? \"date\" : \"text\"}\n style={{\n padding: \"6px 10px\", borderRadius: 8, fontFamily: t.fontFamily,\n border: `1px solid ${t.colors.border}`, fontSize: t.typography.body.fontSize,\n color: t.colors.textPrimary, background: t.colors.surface,\n }}\n />\n </label>\n ))}\n <button onClick={reset} style={{\n padding: \"7px 12px\", borderRadius: 8, cursor: \"pointer\", fontFamily: t.fontFamily,\n border: `1px solid ${t.colors.border}`, background: \"transparent\",\n color: t.colors.textSecondary, fontSize: t.typography.body.fontSize,\n }}>Reset</button>\n </div>\n )}\n </WidgetShell>\n );\n};\n\n// ── Zai chat ─────────────────────────────────────────────────────────────────\n\nexport interface ZaiChatWidgetProps {\n title?: string;\n configurations?: any;\n className?: string;\n style?: React.CSSProperties;\n /**\n * REQUIRED. The chat transport must stay byte-compatible with the existing\n * send body, so the host owns it; this only supplies chrome and tokens.\n */\n render?: (args: { config: any; tokens: ZvolvTokens }) => React.ReactNode;\n}\n\nexport const ZaiChatWidget: React.FC<ZaiChatWidgetProps> = ({\n title, configurations, className, style, render,\n}) => {\n const t = useTokens();\n const config = useMemo(\n () => resolveWidgetDefaults(t, \"ZAI_CHAT\", parseConfig(configurations)),\n [t, configurations]\n );\n const chrome = resolveChromeConfig(config);\n\n return (\n <WidgetShell\n widgetType=\"ZAI_CHAT\"\n title={chrome.showHeader ? (title ?? chrome.title) : undefined}\n state=\"ready\" className={className} style={style}\n >\n {render ? render({ config, tokens: t }) : (\n <div style={{ color: t.colors.textTertiary, fontSize: t.typography.caption.fontSize }}>\n Supply a `render` prop with your chat transport\n </div>\n )}\n </WidgetShell>\n );\n};\n","import React from \"react\";\nimport { KpiWidget } from \"./KpiWidget\";\nimport {\n BarChartWidget, LineChartWidget, AreaChartWidget, PieChartWidget,\n DoughnutChartWidget, ScatterChartWidget, RankingBarWidget,\n GaugeMeterWidget, HeatMapWidget,\n} from \"./charts\";\nimport {\n CardListWidget, ActivityFeedWidget, EntityGalleryWidget,\n GridCardWidget, CarouselWidget, BannerWidget,\n} from \"./collections\";\nimport {\n DashboardTableWidget, DatabaseTableWidget, TaskTrackerTableWidget,\n ChildTableWidget, PivotGridWidget,\n} from \"./tables\";\nimport {\n TimelineWidget, GanttChartWidget, CalendarWidget,\n MeetingSchedulerWidget, StepperWidget,\n} from \"./temporal\";\nimport {\n HtmlWidget, RawHtmlWidget, IframeWidget, GoogleMapWidget,\n ActionCardWidget, TreeWidget,\n} from \"./display\";\nimport {\n TabWidget, FormWidget, FilterPanelWidget, ZaiChatWidget,\n} from \"./specials\";\n\n/**\n * Every Zvolv widget type string → component. Aliases (BAR/BAR_CHART,\n * HTML/RAW_HTML/STATICHTML …) map to the same component, matching how the\n * dashboard config stores them across generations.\n */\nexport const WIDGET_REGISTRY: Record<string, React.FC<any>> = {\n // KPI\n KPI: KpiWidget,\n KPI_CARD: KpiWidget,\n KPI_CARD_V2: KpiWidget,\n\n // Charts\n BAR: BarChartWidget,\n BAR_CHART: BarChartWidget,\n LINE: LineChartWidget,\n LINE_CHART: LineChartWidget,\n AREA_CHART: AreaChartWidget,\n PIE: PieChartWidget,\n PIE_CHART: PieChartWidget,\n DOUGHNUT: DoughnutChartWidget,\n DOUGHNUT_CHART: DoughnutChartWidget,\n SCATTER_CHART: ScatterChartWidget,\n RANKING_BAR: RankingBarWidget,\n GAUGE_METER: GaugeMeterWidget,\n HEAT_MAP: HeatMapWidget,\n\n // Tables\n TABLE: DashboardTableWidget,\n DATABASE_TABLE: DatabaseTableWidget,\n TASK_TRACKER_TABLE: TaskTrackerTableWidget,\n CHILD_TABLE: ChildTableWidget,\n CHILD_DATABASE_TABLE: ChildTableWidget,\n PIVOTGRID: PivotGridWidget,\n\n // Collections\n CARDLIST: CardListWidget,\n ACTIVITYFEED: ActivityFeedWidget,\n ENTITY_GALLERY: EntityGalleryWidget,\n GRID_CARD: GridCardWidget,\n CAROUSEL: CarouselWidget,\n BANNER: BannerWidget,\n\n // Temporal\n TIMELINE: TimelineWidget,\n GANTT: GanttChartWidget,\n GANTT_CHART: GanttChartWidget,\n CALENDAR: CalendarWidget,\n MEETING_SCHEDULER: MeetingSchedulerWidget,\n STEPPER: StepperWidget,\n\n // Display\n HTML: HtmlWidget,\n RAW_HTML: RawHtmlWidget,\n STATICHTML: RawHtmlWidget,\n IFRAME: IframeWidget,\n GOOGLE_MAP: GoogleMapWidget,\n MAP_CHART: GoogleMapWidget,\n TREE: TreeWidget,\n ACTION: ActionCardWidget,\n ACTION_CARD: ActionCardWidget,\n\n // Specials\n TAB: TabWidget,\n FORM: FormWidget,\n FORM_WIDGET: FormWidget,\n FILTER_PANEL: FilterPanelWidget,\n ZAI_CHAT: ZaiChatWidget,\n};\n\n/** Types that never render as a grid widget (filters and data bindings). */\nexport const NON_RENDERING_TYPES = new Set([\n \"DATE_FILTER\", \"FILTER\", \"FILTERS\", \"DASHBOARD_AUTOMATION\",\n]);\n\nexport function resolveWidget(type?: string): React.FC<any> | null {\n if (!type) return null;\n const key = String(type).toUpperCase();\n if (NON_RENDERING_TYPES.has(key)) return null;\n return WIDGET_REGISTRY[key] ?? null;\n}\n\nexport interface ZvolvWidgetProps {\n type: string;\n [key: string]: any;\n}\n\n/** Renders any widget by its Zvolv type string. */\nexport const ZvolvWidget: React.FC<ZvolvWidgetProps> = ({ type, ...props }) => {\n const Component = resolveWidget(type);\n if (!Component) return null;\n return <Component {...props} />;\n};\n","/**\n * Typed config schemas — the authoring surface for writing widget configs in code.\n *\n * These describe the server's shape. Every field is optional because real configs\n * are sparse, and unknown keys are preserved: widen, never narrow, a config you\n * did not author.\n */\nimport type { SeriesConfig, ZvolvDataSource } from \"./types\";\nimport type { WidgetChromeConfig } from \"./chrome\";\nimport type { KpiTemplateId } from \"./kpiTypes\";\n\nexport interface AxisConfig {\n title?: string;\n valueFormat?: string;\n /** Rotate/hide long category labels. */\n labelRotation?: number;\n showLabels?: boolean;\n min?: number;\n max?: number;\n}\n\nexport interface LegendConfig {\n show?: boolean;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n showLabels?: boolean;\n}\n\nexport interface ChartConfig extends WidgetChromeConfig {\n template?: string;\n series?: SeriesConfig[];\n axis?: { argumentAxis?: AxisConfig; valueAxis?: AxisConfig };\n legends?: LegendConfig;\n sortOrder?: \"none\" | \"asc\" | \"desc\";\n stackOrder?: \"none\" | \"asc\" | \"desc\";\n /** Insert zero rows for empty periods so a time axis reads continuously. */\n fillDateGaps?: boolean;\n dateGapUnit?: \"day\" | \"week\" | \"month\";\n}\n\nexport interface KpiContentConfig {\n title?: string;\n subtitle?: string;\n /** Field whose value this item displays. */\n dataPoint?: string;\n targetPoint?: string;\n defaultVale?: any;\n template?: KpiTemplateId;\n dataFormat?: \"AMOUNT\" | \"DATE\" | \"NUMBER\";\n amountSuffix?: \"Rupees\" | \"Lakhs\" | \"Crores\" | \"Millions\";\n dateFormat?: string;\n precision?: number;\n unit?: string;\n icon?: string;\n iconColor?: string;\n valueColor?: string;\n // trend / financial / hero_chart\n deltaSource?: \"target\" | \"datapoint\";\n deltaPoint?: string;\n deltaMode?: \"percent\" | \"absolute\";\n invertColors?: boolean;\n // progress\n maxSource?: \"value\" | \"datapoint\";\n maxPoint?: string;\n progressMax?: number;\n // status\n statusMap?: Record<string, { label?: string; tone?: string; description?: string }>;\n statusFallbackTone?: string;\n // chart\n seriesPoints?: string[];\n seriesPoint?: string;\n seriesSource?: { mode?: \"timeseries\" | \"fields\"; [k: string]: any };\n}\n\nexport interface KpiConfig extends WidgetChromeConfig {\n template?: KpiTemplateId;\n contents?: KpiContentConfig[];\n}\n\nexport interface TableColumnConfig {\n key?: string;\n masterfield?: string;\n field?: string;\n header?: string;\n title?: string;\n align?: \"left\" | \"right\" | \"center\";\n width?: number | string;\n hidden?: boolean;\n masterFieldType?: string;\n kind?: \"text\" | \"number\" | \"date\" | \"status\" | \"user\" | \"html\";\n}\n\nexport interface TableConfig extends WidgetChromeConfig {\n columns?: TableColumnConfig[];\n pageSize?: number;\n /** Per-column value filters in the header. */\n showColumnFilter?: boolean;\n /** Click-to-sort headers. Default true. */\n enableSort?: boolean;\n}\n\nexport interface CollectionMappingConfig {\n titleField?: string;\n subtitleField?: string;\n descriptionField?: string;\n valueField?: string;\n imageField?: string;\n statusField?: string;\n dateField?: string;\n fields?: { field?: string; label?: string }[];\n}\n\nexport interface CollectionConfig extends WidgetChromeConfig {\n template?: string;\n cardConfiguration?: CollectionMappingConfig;\n mapping?: CollectionMappingConfig;\n}\n\nexport interface TemporalMappingConfig {\n /** zvolv-web spellings are preserved so migrated dashboards map unchanged. */\n taskTitle?: string;\n projectTitle?: string;\n taskStatus?: string;\n startDate?: string;\n endDate?: string;\n titleField?: string;\n groupField?: string;\n statusField?: string;\n progressField?: string;\n colorField?: string;\n}\n\nexport interface TemporalConfig extends WidgetChromeConfig {\n template?: string;\n timeline?: TemporalMappingConfig;\n gantt?: TemporalMappingConfig;\n calendar?: TemporalMappingConfig;\n scheduler?: TemporalMappingConfig;\n}\n\nexport interface StepperConfig extends WidgetChromeConfig {\n template?: string;\n stepper?: {\n steps?: any[];\n labelField?: string;\n descriptionField?: string;\n statusField?: string;\n currentIndex?: number;\n };\n}\n\nexport interface GaugeConfig extends WidgetChromeConfig {\n gauge?: {\n valueField?: string;\n min?: number;\n max?: number;\n thresholds?: { low?: number; medium?: number; high?: number };\n };\n}\n\nexport interface HeatMapConfig extends WidgetChromeConfig {\n heatMap?: {\n grid?: { rows?: number; cols?: number };\n thresholds?: {\n low?: { value?: number; color?: string };\n medium?: { value?: number; color?: string };\n high?: { value?: number; color?: string };\n };\n dataMapping?: { zoneField?: string; countField?: string; breakdownFields?: string[] };\n };\n}\n\nexport interface RankingConfig extends WidgetChromeConfig {\n ranking?: {\n labelField?: string;\n valueField?: string;\n order?: \"asc\" | \"desc\";\n limit?: number;\n };\n}\n\nexport interface TreeConfig extends WidgetChromeConfig {\n tree?: { idField?: string; parentField?: string; labelField?: string };\n}\n\nexport interface MapConfig extends WidgetChromeConfig {\n map?: {\n latField?: string;\n lngField?: string;\n labelField?: string;\n centerLat?: number;\n centerLng?: number;\n zoom?: number;\n };\n}\n\nexport interface HtmlConfig extends WidgetChromeConfig {\n /** Supports {{field}} placeholders, substituted from the first row. */\n html?: string;\n content?: string;\n}\n\nexport interface IframeConfig extends WidgetChromeConfig {\n url?: string;\n sandbox?: string;\n}\n\nexport interface ActionConfig extends WidgetChromeConfig {\n actions?: {\n id?: string | number;\n label?: string;\n icon?: string;\n actionType?: string;\n disabled?: boolean;\n [k: string]: any;\n }[];\n}\n\nexport interface TabConfig extends WidgetChromeConfig {\n tabs?: { key?: string; label?: string; widget?: any }[];\n}\n\nexport interface FormConfig extends WidgetChromeConfig {\n formId?: string | number;\n submissionId?: string | number | null;\n mode?: \"NEW\" | \"EDIT\" | \"DISABLED\";\n}\n\nexport interface FilterPanelConfig extends WidgetChromeConfig {\n filters?: {\n key?: string;\n field?: string;\n label?: string;\n type?: \"text\" | \"select\" | \"multiselect\" | \"date\" | \"daterange\" | \"number\";\n options?: { label: any; value: any }[];\n }[];\n}\n\n/** A complete widget definition as a dashboard stores it. */\nexport interface WidgetDefinition<TConfig = any> {\n WidgetID?: string | number;\n Type: string;\n Title?: string;\n DataSource?: ZvolvDataSource | string | null;\n Configurations?: TConfig | string | null;\n WorkflowTypeID?: string | number;\n}\n\n/** Identity helper: gives a config literal its type without widening. */\nexport function defineConfig<T>(config: T): T {\n return config;\n}\n","/**\n * Stored-dashboard helpers — turn what `workflow.getDashboard()` returns into\n * widget props, grid positions and dashboard filter state.\n *\n * Ported from ZAI-Dashboard's Dashboard.tsx / WidgetItem.tsx / dashboardHelpers.ts\n * so a custom shell renders stored dashboards exactly where the host does.\n */\nimport dayjs from \"dayjs\";\nimport { resolveFormId, resolveIsTask } from \"./config\";\nimport { NON_RENDERING_TYPES } from \"../widgets/registry\";\n\n/** JSON-parses until the value is no longer a string (handles double encoding). */\nexport function parseDeep(raw: any): any {\n let val = raw;\n while (typeof val === \"string\") {\n try { val = JSON.parse(val); } catch { break; }\n }\n return val ?? {};\n}\n\n// ── Widgets ──────────────────────────────────────────────────────────────────\n\nexport interface NormalizedWidget {\n id: string;\n type: string;\n title?: string;\n description?: string;\n configurations: any;\n dataSource: any;\n workflowTypeId?: string | number;\n raw: any;\n}\n\n/** A stored widget → the props every @zestl/zvolv-widgets component takes. */\nexport function normalizeWidget(widget: any): NormalizedWidget {\n const configurations = parseDeep(widget?.Configuration);\n const raw = parseDeep(widget?.DataSource);\n // Legacy Angular widgets keep isTask / formId inside dataSource.query.\n const dataSource = raw && Object.keys(raw).length\n ? { ...raw, isTask: resolveIsTask(raw) || !!raw.isTask || resolveQueryIsTask(raw), formId: raw.formId ?? resolveFormId(raw) ?? resolveQueryFormId(raw) }\n : null;\n return {\n id: String(widget?.WidgetID),\n type: String(widget?.Type ?? widget?.type ?? \"\").toUpperCase(),\n title: widget?.Title,\n description: widget?.Description,\n configurations,\n dataSource,\n workflowTypeId: widget?.WorkflowTypeID,\n raw: widget,\n };\n}\n\nfunction parsedQuery(ds: any): any {\n const q = ds?.query;\n if (!q) return null;\n try { return typeof q === \"string\" ? JSON.parse(q) : q; } catch { return null; }\n}\nfunction resolveQueryIsTask(ds: any): boolean { return parsedQuery(ds)?.isTask === true; }\nfunction resolveQueryFormId(ds: any): any { return parsedQuery(ds)?.formId; }\n\nconst FILTER_TYPES = new Set([\"FILTER\", \"FILTERS\"]);\n\n/**\n * Widgets that render as grid tiles: drops filter/automation types and\n * widgets nested inside a TAB's `childWidget` (the tab renders those).\n */\nexport function gridWidgets(widgets: any[]): any[] {\n const nested = new Set<string>();\n widgets.forEach((w) => {\n (parseDeep(w?.Configuration)?.childWidget || []).forEach((c: any) => {\n if (c?.WidgetID != null) nested.add(String(c.WidgetID));\n });\n });\n return widgets.filter((w) => {\n const type = String(w?.Type ?? \"\").toUpperCase();\n return !nested.has(String(w?.WidgetID)) && !NON_RENDERING_TYPES.has(type);\n });\n}\n\n// ── Layout (60-column grid) ──────────────────────────────────────────────────\n\nexport const GRID = {\n COLS: 60,\n /** Row unit in px. A tile's height = h * ROW_HEIGHT + (h - 1) * GAP. */\n ROW_HEIGHT: 5,\n GAP: 16,\n /** Layouts saved before grid v2 used 12 columns. */\n VERSION: 2,\n LEGACY_SCALE: 5,\n} as const;\n\nexport interface GridItem { id: string; x: number; y: number; w: number; h: number }\n\n/**\n * Grid positions from each widget's `Configuration.additionalProperties`, with\n * legacy 12-col layouts scaled up and unset positions packed row by row, then\n * compacted vertically like react-grid-layout (`compactType=\"vertical\"`).\n */\nexport function resolveDashboardLayout(widgets: any[]): GridItem[] {\n const items: GridItem[] = widgets.map((w, index) => {\n const p = parseDeep(w?.Configuration)?.additionalProperties || {};\n const scale = (p.gridV ?? 0) < GRID.VERSION ? GRID.LEGACY_SCALE : 1;\n const width = Math.min(GRID.COLS, Math.max(1, p.w != null ? Number(p.w) * scale : 20));\n return {\n id: String(w?.WidgetID),\n x: p.x != null ? Math.min(GRID.COLS - width, Number(p.x) * scale) : (index * 10) % GRID.COLS,\n y: p.y != null ? Number(p.y) : Infinity,\n w: width,\n h: Math.max(1, p.h != null ? Number(p.h) : 10),\n };\n });\n\n // Pack unset rows after the positioned ones.\n const maxY = items.reduce((m, i) => (Number.isFinite(i.y) ? Math.max(m, i.y + i.h) : m), 0);\n let px = 0, py = maxY, rowH = 0;\n items.forEach((i) => {\n if (Number.isFinite(i.y)) return;\n if (px + i.w > GRID.COLS) { py += rowH; px = 0; rowH = 0; }\n i.x = px; i.y = py; px += i.w; rowH = Math.max(rowH, i.h);\n });\n\n // Vertical compaction: each item moves up until it would collide.\n const sorted = [...items].sort((a, b) => a.y - b.y || a.x - b.x);\n const placed: GridItem[] = [];\n const collides = (a: GridItem, b: GridItem) =>\n a.x < b.x + b.w && a.x + a.w > b.x && a.y < b.y + b.h && a.y + a.h > b.y;\n for (const item of sorted) {\n let y = item.y;\n while (y > 0 && !placed.some((p) => collides({ ...item, y: y - 1 }, p))) y--;\n while (placed.some((p) => collides({ ...item, y }, p))) y++;\n placed.push({ ...item, y });\n }\n const byId = new Map(placed.map((p) => [p.id, p]));\n return items.map((i) => byId.get(i.id)!);\n}\n\n/** Pixel height of a tile `h` rows tall. */\nexport function gridHeight(h: number): number {\n return h * GRID.ROW_HEIGHT + Math.max(0, h - 1) * GRID.GAP;\n}\n\n// ── Dashboard filters ────────────────────────────────────────────────────────\n\n/** One control in the dashboard filter bar (from the FILTER widget's config). */\nexport interface DashboardFilterDef {\n label: string;\n formId?: any;\n formTitle: string;\n fieldLabel: string;\n fieldType?: string;\n}\n\n/** The dashboard's FILTER widget's declared filters, if it has one. */\nexport function dashboardFilterDefs(widgets: any[]): DashboardFilterDef[] {\n const fw = widgets.find((w) => FILTER_TYPES.has(String(w?.Type ?? \"\").toUpperCase()));\n const cfg = parseDeep(fw?.Configuration);\n return (cfg.filters ?? [])\n .filter((f: any) => f?.formTitle && f?.fieldLabel)\n .map((f: any) => ({\n label: f.label ?? f.fieldLabel, formId: f.formId,\n formTitle: f.formTitle, fieldLabel: f.fieldLabel, fieldType: f.fieldType,\n }));\n}\n\nexport interface DashboardFilterValue {\n formTitle: string;\n fieldLabel: string;\n operator: string;\n values: any[];\n}\n\nexport interface DateRange { start: string; end: string }\n\n/**\n * Builds the `dashFilters` object every widget takes — the same shape the host\n * derives from its `filters` / `operator` / `cdate` URL params.\n */\nexport function buildDashFilters(\n values: DashboardFilterValue[] = [], dateRange?: DateRange | null, operator: \"AND\" | \"OR\" = \"AND\"\n): any {\n const out: any = {};\n const body: any = {};\n for (const v of values) {\n const valueless = v.operator === \"EMPTY\" || v.operator === \"NOT_EMPTY\";\n if (!valueless && (!v.values || v.values.length === 0)) continue;\n body[v.formTitle] = body[v.formTitle] ?? {};\n body[v.formTitle][v.fieldLabel] = { [v.operator]: valueless ? [] : v.values };\n }\n if (Object.keys(body).length) { out.filter = body; out.filter_cond = operator; out.operator = operator; }\n if (dateRange?.start) out.cdate = { startdate: dateRange.start, enddate: dateRange.end || dateRange.start };\n return out;\n}\n\nexport type DateRangeToken = \"TODAY\" | \"LAST_7_DAYS\" | \"LAST_30_DAYS\" | \"THIS_MONTH\" | \"LAST_MONTH\" | \"THIS_YEAR\";\n\nexport function dateRangeFor(token: DateRangeToken | string): DateRange {\n const f = (d: dayjs.Dayjs) => d.format(\"YYYY-MM-DD\");\n const now = dayjs();\n switch (token) {\n case \"TODAY\": return { start: f(now), end: f(now) };\n case \"LAST_30_DAYS\": return { start: f(now.subtract(30, \"day\")), end: f(now) };\n case \"THIS_MONTH\": return { start: f(now.startOf(\"month\")), end: f(now.endOf(\"month\")) };\n case \"LAST_MONTH\": {\n const m = now.subtract(1, \"month\");\n return { start: f(m.startOf(\"month\")), end: f(m.endOf(\"month\")) };\n }\n case \"THIS_YEAR\": return { start: f(now.startOf(\"year\")), end: f(now.endOf(\"year\")) };\n default: return { start: f(now.subtract(7, \"day\")), end: f(now) };\n }\n}\n\n/** The DATE_FILTER widget's default range token, if the dashboard has one. */\nexport function dashboardDefaultDateToken(widgets: any[]): string | null {\n const df = widgets.find((w) => String(w?.Type ?? \"\").toUpperCase() === \"DATE_FILTER\");\n if (!df) return null;\n return parseDeep(df.Configuration)?.defaultFilterValue ?? \"LAST_7_DAYS\";\n}\n\nconst DATE_FIELD_TYPES = [\"DATE_PICKER\", \"DATE_TIME_PICKER\", \"INPUT_CREATEDAT\", \"INPUT_MODIFIEDAT\"];\nconst TASK_DATE_FIELDS = [\"createdat\", \"submittedon\", \"startdate\", \"enddate\"];\n\n/**\n * The per-widget `cdateFilters` — which of its fields a dashboard date range\n * lands on. Explicit DATE_FILTER mappings win; otherwise the widget's own date\n * field is picked (task sources by column name).\n */\nexport function cdateFiltersFor(widget: any, allWidgets: any[]): any[] {\n const ds = parseDeep(widget?.DataSource);\n const fields: any[] = ds.fields ?? [];\n const df = allWidgets.find((w) => String(w?.Type ?? \"\").toUpperCase() === \"DATE_FILTER\");\n if (df) {\n const dfConfig = parseDeep(df.Configuration);\n if (dfConfig?.filters?.length) {\n const mine = dfConfig.filters.filter((f: any) => Number(f.widgetId) === Number(widget?.WidgetID));\n return fields\n .filter((field) => mine.some((f: any) => f.dataSource === field.header))\n .map((field) => ({\n header: field.header, masterfield: field.masterfield,\n masterFieldType: field.masterFieldType, masterFieldDataType: field.masterFieldDataType,\n operator: dfConfig.defaultFilterValue,\n }));\n }\n }\n const isTask = resolveIsTask(ds) || resolveQueryIsTask(ds);\n const name = (f: any) => String(f?.masterfield ?? f?.header ?? \"\").toLowerCase();\n const pick = fields.find((f) => DATE_FIELD_TYPES.includes(f?.masterFieldType)) ??\n (isTask ? TASK_DATE_FIELDS.map((n) => fields.find((f) => !f?.masterFieldType && name(f) === n)).find(Boolean) : null);\n return pick ? [{\n header: pick.header, masterfield: pick.masterfield, masterFieldType: pick.masterFieldType,\n masterFieldDataType: pick.masterFieldDataType, operator: \"BETWEEN\", isTaskField: isTask || undefined,\n }] : [];\n}\n\n// ── Dashboard lists ──────────────────────────────────────────────────────────\n\nexport interface DashboardNode {\n id: string;\n title: string;\n raw: any;\n children: DashboardNode[];\n}\n\n/** Strips the `<i class=\"…\"></i>` icon tag some dashboard titles carry. */\nexport function cleanTitle(title: any): string {\n return String(title ?? \"\").replace(/<[^>]*>/g, \"\").trim();\n}\n\n/**\n * `getDashboards()` elements → a sorted tree (ChildReportIDs nest), hiding\n * MobileOnly / HideInMobileApp dashboards from non-admins.\n */\nexport function buildDashboardTree(elements: any[], isAdmin = false): DashboardNode[] {\n const list = Array.isArray(elements) ? elements : [];\n const byId = new Map(list.map((d) => [String(d.ReportID), d]));\n const childIds = new Set<string>();\n list.forEach((d) => (d.ChildReportIDs ?? []).forEach((c: any) => childIds.add(String(c))));\n const seq = (a: any, b: any) => (a?.SequenceID ?? 0) - (b?.SequenceID ?? 0);\n const visible = (d: any) => isAdmin || (d.MobileOnly !== \"YES\" && d.HideInMobileApp !== \"YES\");\n const node = (d: any): DashboardNode => ({\n id: String(d.ReportID), title: cleanTitle(d.Title), raw: d,\n children: (d.ChildReportIDs ?? []).map((c: any) => byId.get(String(c))).filter(Boolean).sort(seq).map(node),\n });\n return list.filter((d) => !childIds.has(String(d.ReportID)) && visible(d)).sort(seq).map(node);\n}\n","/**\n * Form inspector — explains, for the current values, what the library is doing:\n * which dependency/triage rules matched, which lookup filters apply, what each\n * field's validation says, every formula (form-level and sheet rows) with its\n * inputs and whether the platform can re-evaluate it, dynamic defaults, and the\n * exact submission body. Pure: computed from a ZvolvFormApi, no requests.\n */\nimport { useMemo } from \"react\";\nimport type { FormDefinition, FormElement, FormValues } from \"./types\";\nimport type { ZvolvFormApi } from \"./useZvolvForm\";\nimport { submitElementsOf } from \"./useZvolvForm\";\nimport { optionFilterRules, ruleMatches, rulesOf } from \"./rules\";\nimport { computeRowFormulas, evaluateFormula, formulaLabels, isServerSafeFormula, toBraceFormula } from \"./formula\";\nimport { NON_INPUT_TYPES, sheetCellChecked, sheetRowNeedsCheck, validateField } from \"./validate\";\nimport { buildSubmissionElements, formatFieldValue } from \"./values\";\nimport { resolveFieldType } from \"./normalize\";\nimport { lookupConfigOf } from \"./api\";\n\nexport type RuleEffect = \"show\" | \"hide\" | \"required\" | \"optional\" | \"editable\" | \"read-only\";\n\nexport interface RuleInsight {\n sourceId: string; sourceLabel: string; sourceValue: string;\n action: string; effect: RuleEffect;\n targetId: string; targetLabel: string;\n /** What the rule waits for, in words. */\n expected: string;\n matched: boolean;\n /** \"triage\" (properties.triage) or \"dependencies\". */\n origin: \"triage\" | \"dependencies\";\n}\n\nexport interface FilterInsight {\n targetId: string; targetLabel: string; sourceForm: string;\n kind: \"dependent\" | \"dynamic\" | \"static\";\n /** Label on the source form the filter is applied to. */\n masterField: string;\n /** The local field whose value feeds the filter (dependent / dynamic). */\n sourceLabel?: string;\n sourceValue?: string;\n /** Static filters: the configured value. */\n value?: string;\n active: boolean;\n}\n\nexport interface ValidationInsight {\n id: string; label: string; type: string;\n /** e.g. Accessories · row 2 — for sheet cells. */\n scope?: string;\n required: boolean; hidden: boolean;\n checks: string[];\n value: string;\n /** What validateField says right now. */\n error?: string;\n /** What the user currently sees (set on submit, cleared on change). */\n shownError?: string;\n}\n\nexport interface FormulaInsight {\n fieldId: string; label: string;\n scope: \"form\" | \"row\";\n sheetLabel?: string; row?: number;\n formula: string;\n /** The same formula with {Label} references — what the platform understands. */\n serverFormula: string;\n serverSafe: boolean;\n inputs: { label: string; value: any }[];\n /** The library's result for the current inputs. */\n expected: any;\n /** The value that will be submitted. */\n current: any;\n inSync: boolean;\n}\n\nexport interface DefaultInsight { id: string; label: string; source: string; value: string }\n\nexport interface PayloadInsight {\n formId: string;\n elements: any[];\n sheets: { fieldId: string; label: string; formId: string; rows: any[][] }[];\n}\n\nexport interface FormInspection {\n rules: RuleInsight[];\n filters: FilterInsight[];\n validation: ValidationInsight[];\n formulas: FormulaInsight[];\n defaults: DefaultInsight[];\n payload: PayloadInsight | null;\n summary: { rules: number; matched: number; filters: number; activeFilters: number; errors: number; formulas: number; formulaIssues: number };\n}\n\nconst text = (v: any): string => {\n if (v === null || v === undefined || v === \"\") return \"\";\n if (Array.isArray(v)) return v.map(text).filter(Boolean).join(\", \");\n if (typeof v === \"object\") return text(v.view ?? v.select ?? v.label ?? v.value ?? JSON.stringify(v));\n return String(v);\n};\n\nconst effectOf = (action: string): RuleEffect | null =>\n action.startsWith(\"SHOW\") ? \"show\" : action.startsWith(\"HIDE\") ? \"hide\"\n : action.startsWith(\"MARK_MANDATORY\") ? \"required\" : action.startsWith(\"MARK_NON\") ? \"optional\"\n : action === \"EDITABLE\" ? \"editable\" : action === \"NON_EDITABLE\" ? \"read-only\" : null;\n\nfunction expectedOf(dep: any, labelOf: (id: string) => string): string {\n const conds: any[] = dep.conditions ?? dep.Conditions ?? [];\n if (conds.length) {\n const op = String(dep.conditionOperator ?? dep.operator ?? \"AND\").toUpperCase();\n return conds.map((c) => `${labelOf(c.elementId ?? c.dependencyElementId)} ${c.operator ?? c.conditionOperator ?? \"equals\"} ${text(c.value ?? c.conditionValue)}`).join(` ${op} `);\n }\n if (Array.isArray(dep.value)) return `exactly [${dep.value.map(String).join(\", \")}]`;\n return `= ${text(dep.value) || \"(empty)\"}`;\n}\n\nfunction checksOf(el: FormElement, required: boolean): string[] {\n const t = resolveFieldType(el);\n const p = el.properties ?? {};\n const out: string[] = [];\n if (required) out.push(\"required\");\n if (t === \"INPUT_EMAIL\") out.push(\"email\");\n if (t === \"INPUT_URL\") out.push(\"url\");\n if (t === \"INPUT_PHONE\") out.push(\"phone\");\n if (t === \"INPUT_PERCENT\") out.push(\"0–100\");\n const min = p.minVal ?? p.min, max = p.maxVal ?? p.max;\n if (min !== undefined && min !== null && min !== \"\") out.push(`min ${min}`);\n if (max !== undefined && max !== null && max !== \"\") out.push(`max ${max}`);\n const len = p.maxLength ?? (t === \"RICH_TEXT_EDITOR\" ? p.max ?? el.attributes?.charactersCount : undefined);\n if (len) out.push(`≤ ${len} chars`);\n if (p.minimumNumberOfTrials) out.push(`≥ ${p.minimumNumberOfTrials} trials`);\n (el.validations ?? []).forEach((v: any) => {\n const k = String(v?.type ?? v?.validationType ?? \"\").toLowerCase();\n if (k === \"regex\") out.push(\"pattern\");\n else if (k === \"expression\") out.push(\"expression\");\n else if (k) out.push(`${k} (server)`);\n });\n return out;\n}\n\nconst sameNumber = (a: any, b: any) => {\n if ((a === null || a === undefined || a === \"\") && (b === null || b === undefined || b === \"\")) return true;\n const na = Number(a), nb = Number(b);\n return !Number.isNaN(na) && !Number.isNaN(nb) ? Math.abs(na - nb) < 1e-6 : String(a) === String(b);\n};\n\nfunction formulaRows(\n elements: FormElement[], values: FormValues, scope: \"form\" | \"row\",\n extra: { sheetLabel?: string; row?: number; expectedRow?: Record<string, any> } = {},\n): FormulaInsight[] {\n const labels = elements.map((e) => e.label).filter(Boolean);\n const idOf = new Map(elements.map((e) => [e.label, e.elementId]));\n return elements.filter((e) => resolveFieldType(e) === \"INPUT_FORMULA\" && e.properties?.formula).map((e) => {\n const formula = String(e.properties!.formula);\n const refs = formulaLabels(formula, labels);\n const inputs = refs.map((l) => ({ label: l, value: values[idOf.get(l) ?? l] ?? null }));\n const expected = extra.expectedRow\n ? extra.expectedRow[e.elementId]\n : refs.length && inputs.every((i) => i.value === null || i.value === \"\") ? null\n : evaluateFormula(formula, (l) => values[idOf.get(l) ?? l], labels);\n const current = values[e.elementId] ?? null;\n return {\n fieldId: e.elementId, label: e.label, scope, sheetLabel: extra.sheetLabel, row: extra.row,\n formula, serverFormula: toBraceFormula(formula, labels), serverSafe: isServerSafeFormula(formula, labels),\n inputs, expected, current, inSync: sameNumber(expected, current),\n };\n });\n}\n\nexport function inspectForm(form: ZvolvFormApi): FormInspection {\n const def: FormDefinition | null = form.definition;\n if (!def) {\n return { rules: [], filters: [], validation: [], formulas: [], defaults: [], payload: null,\n summary: { rules: 0, matched: 0, filters: 0, activeFilters: 0, errors: 0, formulas: 0, formulaIssues: 0 } };\n }\n const elements = def.elements;\n const values = form.values;\n const byId = new Map(elements.map((e) => [e.elementId, e]));\n const labelOf = (id: string) => byId.get(String(id))?.label ?? String(id ?? \"\");\n\n // ── Rules (dependencies / triage) ──\n const rules: RuleInsight[] = [];\n elements.forEach((el) => {\n const origin: RuleInsight[\"origin\"] = el.properties?.triage ? \"triage\" : \"dependencies\";\n rulesOf(el).forEach((dep) => {\n const action = String(dep.dependencyType ?? dep.type ?? \"\");\n const effect = effectOf(action);\n const target = String(dep.elementId ?? dep.targetElementId ?? \"\");\n if (!effect || !target) return;\n rules.push({\n sourceId: el.elementId, sourceLabel: el.label, sourceValue: text(values[el.elementId]) || \"(empty)\",\n action, effect, targetId: target, targetLabel: labelOf(target),\n expected: expectedOf(dep, labelOf), matched: ruleMatches(el, dep, values), origin,\n });\n });\n });\n\n // ── Lookup filters ──\n const filters: FilterInsight[] = [];\n elements.forEach((el) => {\n const cfg = lookupConfigOf(el);\n if (!cfg) return;\n const base = { targetId: el.elementId, targetLabel: el.label, sourceForm: cfg.formId };\n optionFilterRules(elements, el.elementId).forEach((r) => {\n const v = text(values[r.elementId]);\n filters.push({ ...base, kind: \"dependent\", masterField: r.masterField, sourceLabel: labelOf(r.elementId), sourceValue: v || \"(empty)\", active: !!v });\n });\n cfg.dynamicFilters.forEach((df: any) => {\n const dep = df.DependencyFieldLabel ?? df.dependencyFieldLabel;\n const master = df.MasterFieldLabel ?? df.masterFieldLabel ?? dep;\n if (!dep) return;\n const src = elements.find((e) => e.label === dep);\n const v = src ? text(values[src.elementId]) : \"\";\n filters.push({ ...base, kind: \"dynamic\", masterField: master, sourceLabel: dep, sourceValue: v || \"(empty)\", active: !!v });\n });\n cfg.staticFilters.forEach((sf: any) => {\n const label = sf.label ?? sf.Label ?? sf.MasterFieldLabel ?? sf.field ?? \"?\";\n filters.push({ ...base, kind: \"static\", masterField: String(label), value: text(sf.value ?? sf.Value ?? sf.arr_value), active: true });\n });\n });\n\n // ── Validation ──\n const validation: ValidationInsight[] = [];\n form.fields.forEach((f) => {\n const t = resolveFieldType(f.element);\n if (NON_INPUT_TYPES.has(t) || t === \"INPUT_FORMULA\" || t === \"INPUT_SHEET\") return;\n validation.push({\n id: f.id, label: f.label, type: t, required: f.required, hidden: f.hidden,\n checks: checksOf(f.element, f.required), value: formatFieldValue(f.element, f.value),\n error: f.hidden ? undefined : validateField(f.element, f.value, f.required), shownError: f.error,\n });\n });\n\n // ── Formulas (form level) ──\n const formulas: FormulaInsight[] = formulaRows(elements, values, \"form\");\n\n // ── Sheets: row validation, row formulas, payload ──\n const sheets: PayloadInsight[\"sheets\"] = [];\n elements.forEach((el) => {\n const t = resolveFieldType(el);\n if (t !== \"INPUT_SHEET\" && t !== \"INPUT_CHILD_WIDGET\") return;\n const child = form.sheetDefinition(el.elementId);\n if (!child) return;\n const rows: Record<string, any>[] = (Array.isArray(values[el.elementId]) ? values[el.elementId] : []).filter((r: any) => r && typeof r === \"object\");\n const sheet = { fieldId: el.elementId, label: el.label, formId: child.uuid ?? \"\", rows: [] as any[][] };\n rows.forEach((row, i) => {\n const { _submissionId, _dirty, _rowKey, ...cells } = row;\n const scope = `${el.label} · row ${i + 1}`;\n if (sheetRowNeedsCheck(row)) {\n child.elements.forEach((c) => {\n if (!sheetCellChecked(c) || resolveFieldType(c) === \"INPUT_FORMULA\") return;\n validation.push({\n id: `${el.elementId}:${i}:${c.elementId}`, label: c.label, type: resolveFieldType(c), scope,\n required: !!c.required, hidden: false, checks: checksOf(c, !!c.required), value: formatFieldValue(c, cells[c.elementId]),\n error: validateField(c, cells[c.elementId]),\n });\n });\n }\n const fresh = computeRowFormulas(child.elements, cells);\n formulas.push(...formulaRows(child.elements, cells, \"row\", { sheetLabel: el.label, row: i + 1, expectedRow: fresh }));\n // Submit recomputes row formulas before posting — show what will actually be sent.\n sheet.rows.push(buildSubmissionElements(child.elements, fresh));\n });\n sheets.push(sheet);\n });\n\n // ── Dynamic defaults ──\n const defaults: DefaultInsight[] = [];\n elements.forEach((el) => {\n const dd = el.attributes?.dynamicDefault;\n const ds = el.properties?.dataSource ?? {};\n let source = \"\";\n if (dd && typeof dd === \"object\") {\n const u = dd.units ?? {};\n const parts = Object.entries(u).filter(([, n]) => Number(n)).map(([k, n]) => `${n} ${k}`);\n source = dd.type ? String(dd.type) : `today ${String(dd.operator ?? \"ADD\") === \"SUB\" ? \"−\" : \"+\"} ${parts.join(\" \") || \"0\"}`;\n } else if (typeof dd === \"string\" && dd) source = dd;\n else if (ds.DynamicDefaultSelectLabel || ds.DynamicDefault) source = `current user's ${ds.DynamicDefaultSelectLabel ?? ds.DynamicDefault}`;\n else if (resolveFieldType(el) === \"ON_BEHALF_OF\") source = \"current user\";\n else if (el.defaultValue !== null && el.defaultValue !== undefined && el.defaultValue !== \"\" && resolveFieldType(el) !== \"INPUT_SHEET\") source = `fixed: ${text(el.defaultValue)}`;\n if (source) defaults.push({ id: el.elementId, label: el.label, source, value: formatFieldValue(el, values[el.elementId]) });\n });\n\n // ── Submission body ──\n const submitEls = submitElementsOf(elements);\n const sheetIds = new Set(sheets.map((s) => s.fieldId));\n const shown: FormValues = { ...values };\n sheets.forEach((s) => { shown[s.fieldId] = s.rows.map((_, i) => `‹row ${i + 1} id›`); });\n const parent = buildSubmissionElements(submitEls, shown).map((e) => (sheetIds.has(e.elementId) ? { elementId: e.elementId, value: shown[e.elementId] } : e));\n const payload: PayloadInsight = { formId: def.uuid ?? \"\", elements: parent.map(({ properties, ...rest }) => rest), sheets };\n\n const errors = validation.filter((v) => !v.hidden && v.error).length;\n const formulaIssues = formulas.filter((f) => !f.serverSafe || !f.inSync).length;\n return {\n rules, filters, validation, formulas, defaults, payload,\n summary: {\n rules: rules.length, matched: rules.filter((r) => r.matched).length,\n filters: filters.length, activeFilters: filters.filter((f) => f.active).length,\n errors, formulas: formulas.length, formulaIssues,\n },\n };\n}\n\n/** inspectForm, memoised on the form's values, definition and loaded sheets. */\nexport function useFormInspector(form: ZvolvFormApi): FormInspection {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => inspectForm(form), [form.definition, form.values, form.sheetVersion, form.fields]);\n}\n","/**\n * Authoring helpers: build a platform `create_form` payload and the FORM\n * widget that renders it on a dashboard. Encodes the rules the platform\n * validates silently (see the zvibe KB `form_payload_field_types.md`):\n * - `width` is a percentage (25/50/75/100) and must be at the element root\n * AND in attributes.Width;\n * - SPINNER / RADIO_GROUP options and FORM_SEARCH dataSource sit at the root;\n * - formulas use bare single-word labels with MUL / ADD / SUB / DIVI / IF —\n * AVG is listed by the KB but 502s every write on the live platform;\n * - show / hide / mandatory rules live on the DRIVING element.\n */\n\nexport type Width = 25 | 50 | 75 | 100;\n\nexport interface ElementSpec {\n label: string;\n type: string;\n width?: Width;\n required?: boolean;\n hidden?: boolean;\n disabled?: boolean;\n elementId?: string;\n [k: string]: any;\n}\n\nconst slug = (s: string) => s.toLowerCase().replace(/[^a-z0-9]+/g, \"_\").replace(/^_|_$/g, \"\").slice(0, 32);\n\n/** A stable elementId from a label, e.g. \"Quantity (MT)\" → \"EID_quantity_mt\". */\nexport const eid = (label: string) => `EID_${slug(label)}`;\n\nfunction base(type: string, label: string, o: Partial<ElementSpec> = {}): ElementSpec {\n const width = (o.width ?? 50) as Width;\n const { width: _w, attributes, ...rest } = o as any;\n return {\n elementId: o.elementId ?? eid(label),\n label, type, width,\n required: !!o.required, hidden: !!o.hidden,\n ...rest,\n attributes: { Width: width, ...(attributes ?? {}) },\n };\n}\n\ntype Opt = Partial<ElementSpec>;\n\nexport const el = {\n text: (label: string, o?: Opt) => base(\"INPUT_SHORT_TEXT\", label, o),\n longText: (label: string, o?: Opt) => base(\"EDIT_TEXT\", label, { width: 100, ...o }),\n richText: (label: string, o?: Opt) => base(\"RICH_TEXT_EDITOR\", label, { width: 100, ...o }),\n email: (label: string, o?: Opt) => base(\"INPUT_EMAIL\", label, o),\n phone: (label: string, o?: Opt & { countryCode?: string }) => base(\"INPUT_PHONE\", label, o),\n url: (label: string, o?: Opt) => base(\"INPUT_URL\", label, o),\n number: (label: string, o?: Opt & { minVal?: number; maxVal?: number }) => base(\"INPUT_NUMBER\", label, o),\n currency: (label: string, o?: Opt) => base(\"INPUT_CURRENCY\", label, o),\n percent: (label: string, o?: Opt) => base(\"INPUT_PERCENT\", label, o),\n /** formula uses `{Label}` references: `MUL({Quantity}, {Rate})`. */\n formula: (label: string, formula: string, o?: Opt) => base(\"INPUT_FORMULA\", label, { formula, calculateOnLoad: true, disabled: true, ...o }),\n date: (label: string, o?: Opt & { today?: boolean }) => {\n const { today, ...rest } = o ?? {};\n return base(\"DATE_PICKER\", label, today ? { ...rest, attributes: { dynamicDefault: { operator: \"ADD\", units: { days: 0, months: 0, years: 0 } } } } : rest);\n },\n time: (label: string, o?: Opt) => base(\"TIME_PICKER\", label, o),\n dateTime: (label: string, o?: Opt) => base(\"DATE_TIME_PICKER\", label, o),\n dateRange: (label: string, o?: Opt) => base(\"INPUT_DATE_RANGE\", label, o),\n dropdown: (label: string, options: string[], o?: Opt) => base(\"SPINNER\", label, { options, properties: { allowAddOptions: false }, ...o }),\n radio: (label: string, options: string[], o?: Opt) => base(\"RADIO_GROUP\", label, { options, ...o }),\n checkbox: (label: string, o?: Opt) => base(\"CHECK_BOX\", label, o),\n /** Look up rows of another form; `extra` columns autofill same-labelled fields. */\n lookup: (label: string, src: { formId: string; field: string; extra?: string[]; multiple?: boolean }, o?: Opt) =>\n base(\"FORM_SEARCH\", label, {\n dataSource: { FormID: src.formId, SearchLabel: src.field, SelectLabel: src.field, ViewLabel: src.field, ExtraLabels: src.extra ?? [], StaticFilters: [] },\n ...(src.multiple ? { properties: { maxResults: 100 } } : {}),\n ...o,\n }),\n rating: (label: string, o?: Opt & { maxVal?: number }) => base(\"RATING_BAR\", label, { minVal: 1, maxVal: 5, ...o }),\n progress: (label: string, o?: Opt & { minVal?: number; maxVal?: number; step?: number; suffix?: string }) => base(\"PROGRESS_BAR\", label, { minVal: 0, maxVal: 100, step: 5, suffix: \"%\", ...o }),\n file: (label: string, o?: Opt) => base(\"FILE_UPLOAD_V2\", label, { width: 100, ...o }),\n signature: (label: string, o?: Opt) => base(\"SIGNATURE\", label, o),\n section: (label: string, childIds: string[], o?: Opt) => base(\"GROUP_VIEW\", label, { width: 100, subType: \"COLLAPSE_SECTION\", attributes: { subType: \"COLLAPSE_SECTION\", ChildElements: childIds }, ...o }),\n note: (label: string, html: string, o?: Opt) => base(\"TEXT_VIEW\", label, { width: 100, defaultValue: html, ...o }),\n createdAt: (label = \"Created At\") => ({ label, type: \"INPUT_CREATEDAT\", width: 25 as Width, attributes: { Width: 25 } }),\n createdBy: (label = \"Created By\") => ({ label, type: \"INPUT_CREATEDBY\", width: 25 as Width, attributes: { Width: 25 } }),\n autoNumber: (label: string) => ({ label, type: \"INPUT_AUTONUMBER\", width: 25 as Width, attributes: { Width: 25 } }),\n};\n\n/** Rules go on the driving element: `when(severity, \"Critical\").show(rootCause)`. */\nexport function when(driver: ElementSpec, value: any) {\n const add = (type: string, target: ElementSpec | string) => {\n const elementId = typeof target === \"string\" ? target : target.elementId!;\n driver.dependencies = [...(driver.dependencies ?? []), { type, value, elementId }];\n if (type === \"SHOW_INPUT\" && typeof target !== \"string\") target.hidden = true;\n return api;\n };\n const api = {\n show: (t: ElementSpec | string) => add(\"SHOW_INPUT\", t),\n hide: (t: ElementSpec | string) => add(\"HIDE_INPUT\", t),\n require: (t: ElementSpec | string) => add(\"MARK_MANDATORY\", t),\n };\n return api;\n}\n\n/**\n * Filter `target`'s lookup options by `driver`'s value, matched against\n * `masterField` on the target's source form. Written in the platform shape —\n * the rule sits on the target lookup (zvolv-web / ZAI-Dashboard). When the\n * filter leaves exactly one row the target selects it automatically.\n */\nexport function cascade(driver: ElementSpec, target: ElementSpec, masterField: string) {\n target.dependencies = [...(target.dependencies ?? []), { type: \"FETCH_OPTIONS_FILTERS\", value: null, elementId: driver.elementId, masterField }];\n target.properties = { ...(target.properties ?? {}), loadOnDependency: true };\n}\n\nexport interface FormSpec {\n title: string;\n zappId: string | number;\n /** Zapp name, for the MASTER tag \"<name> <id>\". */\n zappName: string;\n type?: \"MASTER\" | \"WORKFLOW\" | \"NESTED\";\n description?: string;\n elements: ElementSpec[];\n successMsg?: string;\n}\n\n/** The `payload` for the MCP `create_form` tool. */\nexport function defineForm(spec: FormSpec) {\n const type = spec.type ?? \"MASTER\";\n const ids = new Set<string>();\n spec.elements.forEach((e) => {\n if (e.elementId && ids.has(e.elementId)) throw new Error(`Duplicate elementId ${e.elementId}`);\n if (e.elementId) ids.add(e.elementId);\n });\n return {\n title: spec.title,\n type,\n zappId: [String(spec.zappId)],\n tags: type === \"MASTER\" ? [`${spec.zappName} ${spec.zappId}`] : [],\n description: spec.description ?? \"\",\n ...(spec.successMsg ? { configurations: { successMsg: spec.successMsg } } : {}),\n elements: spec.elements,\n };\n}\n\n/**\n * A FORM widget payload for `create_widget`. The host app renders it with\n * <ZvolvForm>; `mode` NEW captures a submission, EDIT/DISABLED show one.\n */\nexport function formWidget(o: {\n formId: string; title: string; description?: string;\n mode?: \"NEW\" | \"EDIT\" | \"DISABLED\"; submissionId?: string;\n submitLabel?: string; layout?: { x: number; y: number; w: number; h: number };\n workflowTypeId?: number;\n}) {\n const l = o.layout ?? { x: 0, y: 0, w: 30, h: 22 };\n return {\n Title: o.title,\n Type: \"FORM\",\n Description: o.description ?? \"\",\n ...(o.workflowTypeId ? { WorkflowTypeID: o.workflowTypeId } : {}),\n DataSource: { version: \"v5\", active: true, formId: o.formId, fields: [] },\n Configuration: {\n version: \"v1\",\n formId: o.formId,\n mode: o.mode ?? \"NEW\",\n ...(o.submissionId ? { submissionId: o.submissionId } : {}),\n ...(o.submitLabel ? { submitLabel: o.submitLabel } : {}),\n additionalProperties: { formId: o.formId, ...l },\n },\n Layout: { x: l.x, y: l.y, cols: l.w, rows: l.h },\n };\n}\n"]}
|