@praxisui/list 3.0.0-beta.7 → 3.0.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"praxisui-list.mjs","sources":["../../../projects/praxis-list/src/lib/utils/template-evaluator.ts","../../../projects/praxis-list/src/lib/utils/selection-adapter.ts","../../../projects/praxis-list/src/lib/services/list-data.service.ts","../../../projects/praxis-list/src/lib/services/list-skin.service.ts","../../../projects/praxis-list/src/lib/components/executive/executive-badge.component.ts","../../../projects/praxis-list/src/lib/components/executive/executive-alerts.component.ts","../../../projects/praxis-list/src/lib/components/executive/executive-owner.component.ts","../../../projects/praxis-list/src/lib/components/list-skin-preview.component.ts","../../../projects/praxis-list/src/lib/components/list-skin-preview.component.html","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-text.component.ts","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-text.component.html","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-chip.component.ts","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-chip.component.html","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-rating.component.ts","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-rating.component.html","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-currency.component.ts","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-currency.component.html","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-date.component.ts","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-date.component.html","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-icon.component.ts","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-icon.component.html","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-image.component.ts","../../../projects/praxis-list/src/lib/editors/meta-editors/meta-editor-image.component.html","../../../projects/praxis-list/src/lib/utils/templating-inference.ts","../../../projects/praxis-list/src/lib/components/list-runtime-component.registry.ts","../../../projects/praxis-list/src/lib/list-editor-capability.ts","../../../projects/praxis-list/src/lib/editors/json-config-editor.component.ts","../../../projects/praxis-list/src/lib/editors/list-config-editor.component.ts","../../../projects/praxis-list/src/lib/editors/list-config-editor.component.html","../../../projects/praxis-list/src/lib/ai/list-ai-capabilities.ts","../../../projects/praxis-list/src/lib/ai/list-ai.adapter.ts","../../../projects/praxis-list/src/lib/i18n/list.en.ts","../../../projects/praxis-list/src/lib/i18n/list.pt.ts","../../../projects/praxis-list/src/lib/i18n/list.i18n.ts","../../../projects/praxis-list/src/lib/components/praxis-list-metric.component.ts","../../../projects/praxis-list/src/lib/components/executive/executive-account-identity.component.ts","../../../projects/praxis-list/src/lib/components/executive/executive-alert-summary.component.ts","../../../projects/praxis-list/src/lib/components/executive/executive-owner-summary.component.ts","../../../projects/praxis-list/src/lib/components/praxis-list-runtime-component.component.ts","../../../projects/praxis-list/src/lib/components/praxis-list-compose.component.ts","../../../projects/praxis-list/src/lib/components/praxis-list.component.ts","../../../projects/praxis-list/src/lib/components/praxis-list.component.html","../../../projects/praxis-list/src/lib/praxis-list.metadata.ts","../../../projects/praxis-list/src/lib/examples/praxis-list-doc-page.component.ts","../../../projects/praxis-list/src/lib/examples/praxis-list-doc-page.component.html","../../../projects/praxis-list/src/public-api.ts","../../../projects/praxis-list/src/praxisui-list.ts"],"sourcesContent":["import { formatDate } from '@angular/common';\nimport {\n resolveValuePresentation,\n ValuePresentationStyle,\n ValuePresentationType,\n} from '@praxisui/core';\nimport {\n PraxisListI18nConfig,\n TemplateDef,\n} from '../models/list-config.model';\n\nexport interface TemplateEvaluatorOptions {\n i18n?: PraxisListI18nConfig | null;\n appLocale?: string | null;\n}\n\n/**\n * Very small template evaluator that supports `${item.foo}` expressions.\n * For security, only string concatenation is supported; no arbitrary code.\n */\nexport function evalExpr(\n expr: string,\n ctx: any,\n options?: TemplateEvaluatorOptions,\n): string {\n if (!expr) return '';\n // Replace ${...} with values from context (item), supporting simple pipes inside placeholders\n return expr.replace(/\\$\\{([^}]+)\\}/g, (_, raw: string) => {\n try {\n const { baseExpr, pipe } = splitFirstPipe(raw);\n const value = baseExpr\n .split('.')\n .reduce((acc: any, k: string) => (acc == null ? undefined : acc[k]), ctx);\n let out = value == null ? '' : String(value);\n if (pipe) {\n const { name, args } = parsePipe(pipe);\n if (name === 'bool') {\n const [trueLabel, falseLabel] = parseTwoArgs(args);\n const truthy = toBoolean(value);\n out = truthy ? (trueLabel ?? 'Sim') : (falseLabel ?? 'Não');\n }\n if (name === 'date') {\n const [localeArg, styleArg] = parseTwoArgs(args);\n const dt = value ? new Date(value) : null;\n if (dt && !isNaN(dt.getTime())) {\n const presentation = resolveTemplatePresentation(\n 'date',\n {\n localeArg,\n styleArg,\n options,\n },\n );\n out = formatDate(\n dt,\n presentation.format || 'shortDate',\n presentation.locale,\n );\n } else {\n out = '';\n }\n }\n if (name === 'map') {\n const map = parseMap(args);\n const key = String(value ?? '').trim();\n out = map[key] ?? map[key.toLowerCase?.()] ?? map[key.toUpperCase?.()] ?? out;\n }\n if (name === 'number') {\n const [localeArg, styleArg] = parseTwoArgs(args);\n const num = Number(value);\n if (isFinite(num)) {\n const presentation = resolveTemplatePresentation(\n 'number',\n {\n localeArg,\n styleArg,\n options,\n },\n );\n const opt: Intl.NumberFormatOptions = {};\n if ((styleArg || '').toLowerCase() === 'compact') opt.notation = 'compact';\n applyNumberPrecision(opt, presentation.format);\n out = new Intl.NumberFormat(presentation.locale || undefined, opt).format(num);\n }\n }\n if (name === 'currency') {\n const [currencyArg, localeArg] = parseTwoArgs(args);\n const num = Number(value);\n if (isFinite(num)) {\n const presentation = resolveTemplatePresentation(\n 'currency',\n {\n localeArg,\n currencyArg,\n options,\n },\n );\n const opt: Intl.NumberFormatOptions = {\n style: 'currency',\n currency: presentation.currency || 'USD',\n };\n applyCurrencyPrecision(opt, presentation.format);\n out = new Intl.NumberFormat(presentation.locale || undefined, opt).format(num);\n }\n }\n }\n return out;\n } catch {\n return '';\n }\n });\n}\n\n/**\n * Evaluate a template definition with basic pipe support.\n * Supported pipes:\n * - bool:TrueLabel:FalseLabel (maps truthy/falsey values to provided labels)\n */\nexport function evaluateTemplate(\n def: TemplateDef | undefined,\n item: any,\n options?: TemplateEvaluatorOptions,\n): { type: string; value: string; class?: string; style?: string; color?: string; variant?: 'filled'|'outlined'; badge?: { value: string; color?: string; variant?: 'filled'|'outlined' } } | null {\n if (!def) return null;\n if (def.type === 'currency') {\n return evaluateCurrencyTemplate(def, item, options);\n }\n if (def.type === 'date') {\n return evaluateDateTemplate(def, item, options);\n }\n // Support a top-level pipe outside of template placeholders,\n // e.g.: \"${item.active}|bool:Ativo:Inativo\".\n const { baseExpr, pipe } = splitFirstTopLevelPipe(def.expr || '');\n let value = evalExpr(baseExpr, { item }, options);\n\n if (pipe) {\n const { name, args } = parsePipe(pipe);\n if (name === 'bool') {\n const [trueLabel, falseLabel] = parseTwoArgs(args);\n const truthy = toBoolean(value);\n value = truthy ? (trueLabel ?? 'Sim') : (falseLabel ?? 'Não');\n }\n }\n\n const out: any = { type: def.type, value, class: def.class, style: def.style, color: (def as any).color, variant: (def as any).variant, props: (def as any).props, imageAlt: (def as any).imageAlt };\n if (def.badge?.expr) {\n const { baseExpr: b2, pipe: p2 } = splitFirstTopLevelPipe(def.badge.expr);\n let badgeVal = evalExpr(b2, { item }, options);\n if (p2) {\n const { name, args } = parsePipe(p2);\n if (name === 'bool') {\n const [trueLabel, falseLabel] = parseTwoArgs(args);\n const truthy = toBoolean(badgeVal);\n badgeVal = truthy ? (trueLabel ?? 'Sim') : (falseLabel ?? 'Não');\n }\n }\n out.badge = {\n value: badgeVal,\n color: def.badge.color,\n variant: def.badge.variant,\n };\n }\n return out;\n}\n\nfunction evaluateCurrencyTemplate(\n def: TemplateDef,\n item: any,\n options?: TemplateEvaluatorOptions,\n): { type: string; value: string; class?: string; style?: string } {\n const { baseExpr, pipe } = splitFirstTopLevelPipe(def.expr || '');\n const [currencyArg, localeArg] = parseTwoArgs(pipe);\n const raw = Number(evalExpr(baseExpr, { item }, options));\n const presentation = resolveTemplatePresentation(\n 'currency',\n {\n localeArg,\n currencyArg,\n options,\n },\n );\n const intlOptions: Intl.NumberFormatOptions = {\n style: 'currency',\n currency: presentation.currency || 'USD',\n };\n applyCurrencyPrecision(intlOptions, presentation.format);\n return {\n type: def.type,\n value: isFinite(raw)\n ? new Intl.NumberFormat(\n presentation.locale || undefined,\n intlOptions,\n ).format(raw)\n : '',\n class: def.class,\n style: def.style,\n };\n}\n\nfunction evaluateDateTemplate(\n def: TemplateDef,\n item: any,\n options?: TemplateEvaluatorOptions,\n): { type: string; value: string; class?: string; style?: string } {\n const { baseExpr, pipe } = splitFirstTopLevelPipe(def.expr || '');\n const [localeArg, styleArg] = parseTwoArgs(pipe);\n const raw = evalExpr(baseExpr, { item }, options);\n const dt = raw ? new Date(raw) : null;\n const presentation = resolveTemplatePresentation(\n 'date',\n {\n localeArg,\n styleArg,\n options,\n },\n );\n return {\n type: def.type,\n value:\n dt && !isNaN(dt.getTime())\n ? formatDate(\n dt,\n presentation.format || 'shortDate',\n presentation.locale,\n )\n : '',\n class: def.class,\n style: def.style,\n };\n}\n\nfunction splitFirstPipe(expr: string): { baseExpr: string; pipe?: string } {\n const idx = expr.indexOf('|');\n if (idx === -1) return { baseExpr: expr.trim() };\n return { baseExpr: expr.slice(0, idx).trim(), pipe: expr.slice(idx + 1).trim() };\n}\n\n// Find first '|' that is NOT inside a \"${...}\" placeholder\nfunction splitFirstTopLevelPipe(expr: string): { baseExpr: string; pipe?: string } {\n let inTpl = 0;\n for (let i = 0; i < expr.length; i++) {\n const c = expr[i];\n if (c === '$' && expr[i + 1] === '{') { inTpl++; i++; continue; }\n if (c === '}' && inTpl > 0) { inTpl--; continue; }\n if (c === '|' && inTpl === 0) {\n return { baseExpr: expr.slice(0, i).trim(), pipe: expr.slice(i + 1).trim() };\n }\n }\n return { baseExpr: expr.trim() };\n}\n\nfunction parsePipe(pipeSpec: string): { name: string; args?: string } {\n const idx = pipeSpec.indexOf(':');\n if (idx === -1) return { name: pipeSpec.trim() };\n return { name: pipeSpec.slice(0, idx).trim(), args: pipeSpec.slice(idx + 1).trim() };\n}\n\nfunction parseTwoArgs(argSpec?: string): [string | undefined, string | undefined] {\n if (!argSpec) return [undefined, undefined];\n const parts = argSpec.split(':');\n const first = parts[0]?.trim();\n const second = parts[1]?.trim();\n return [first || undefined, second || undefined];\n}\n\nfunction toBoolean(val: any): boolean {\n if (typeof val === 'boolean') return val;\n const s = String(val).trim().toLowerCase();\n return s === 'true' || s === '1' || s === 'yes' || s === 'sim' || s === 'on';\n}\n\nfunction mapDateStyle(style?: string): Intl.DateTimeFormatOptions {\n switch ((style || '').toLowerCase()) {\n case 'short':\n return { dateStyle: 'short' } as Intl.DateTimeFormatOptions;\n case 'long':\n return { dateStyle: 'long' } as Intl.DateTimeFormatOptions;\n case 'full':\n return { dateStyle: 'full' } as Intl.DateTimeFormatOptions;\n case 'medium':\n default:\n return { dateStyle: 'medium' } as Intl.DateTimeFormatOptions;\n }\n}\n\nfunction parseMap(spec?: string): Record<string, string> {\n const out: Record<string, string> = {};\n if (!spec) return out;\n const entries = spec.split(/[,;|]/g).map(s => s.trim()).filter(Boolean);\n for (const e of entries) {\n const idx = e.indexOf('=');\n if (idx === -1) continue;\n const k = e.slice(0, idx).trim();\n const v = e.slice(idx + 1).trim();\n if (k) out[k] = v;\n }\n return out;\n}\n\nfunction resolveTemplatePresentation(\n type: ValuePresentationType,\n params: {\n localeArg?: string;\n currencyArg?: string;\n styleArg?: string;\n options?: TemplateEvaluatorOptions;\n },\n): {\n locale: string;\n format?: string;\n currency?: string;\n} {\n const listI18n = params.options?.i18n;\n const localization =\n listI18n?.localization ||\n (listI18n?.locale || listI18n?.currency\n ? {\n locale: listI18n.locale || undefined,\n direction: 'ltr' as const,\n currency: listI18n.currency\n ? { code: listI18n.currency }\n : undefined,\n }\n : undefined);\n\n const presentation = resolveValuePresentation(\n {\n type,\n style: mapValuePresentationStyle(params.styleArg),\n currency: params.currencyArg\n ? {\n code: params.currencyArg,\n }\n : undefined,\n },\n {\n valueLocale: params.localeArg || undefined,\n localization: localization as any,\n surfaceLocale: listI18n?.locale || undefined,\n appLocale: params.options?.appLocale || undefined,\n },\n );\n\n return {\n locale: presentation.locale,\n format: presentation.format,\n currency: presentation.currency?.code,\n };\n}\n\nfunction mapValuePresentationStyle(\n style?: string,\n): ValuePresentationStyle | undefined {\n switch ((style || '').toLowerCase()) {\n case 'short':\n return 'short';\n case 'medium':\n return 'medium';\n case 'long':\n return 'long';\n case 'full':\n return 'full';\n case 'compact':\n return 'compact';\n default:\n return undefined;\n }\n}\n\nfunction applyNumberPrecision(\n options: Intl.NumberFormatOptions,\n format?: string,\n): void {\n const digits = parseDigitsFormat(format);\n if (!digits) return;\n options.minimumIntegerDigits = digits.minimumIntegerDigits;\n options.minimumFractionDigits = digits.minimumFractionDigits;\n options.maximumFractionDigits = digits.maximumFractionDigits;\n}\n\nfunction applyCurrencyPrecision(\n options: Intl.NumberFormatOptions,\n format?: string,\n): void {\n if (!format) return;\n const parts = format.split('|').filter(Boolean);\n const precision = Number(parts[2]);\n if (Number.isFinite(precision)) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n }\n if ((parts[1] || '').trim() === 'code') {\n options.currencyDisplay = 'code';\n }\n}\n\nfunction parseDigitsFormat(format?: string): {\n minimumIntegerDigits: number;\n minimumFractionDigits: number;\n maximumFractionDigits: number;\n} | null {\n if (!format) return null;\n const match = /^(\\d+)\\.(\\d+)-(\\d+)$/.exec(format.trim());\n if (!match) return null;\n return {\n minimumIntegerDigits: Number(match[1]),\n minimumFractionDigits: Number(match[2]),\n maximumFractionDigits: Number(match[3]),\n };\n}\n","import { ListSelectionEvent, PraxisListConfig } from '../models/list-config.model';\n\nexport function adaptSelection(\n config: PraxisListConfig | undefined,\n items: any[],\n): ListSelectionEvent {\n const mode = (config?.selection?.mode ?? 'none') as 'single' | 'multiple';\n const compareBy = config?.selection?.compareBy;\n const ret = config?.selection?.return ?? 'value';\n const value = mode === 'single' ? items[0] ?? null : items;\n const ids = compareBy ? items.map((it) => it?.[compareBy]) : undefined;\n let out: any = value;\n if (ret === 'id') out = mode === 'single' ? ids?.[0] ?? null : ids;\n else if (ret === 'item') out = value;\n else if (ret === 'value') out = mode === 'single' ? value : items;\n\n return {\n mode,\n value: out,\n items,\n ids,\n };\n}\n\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, combineLatest, of } from 'rxjs';\nimport {\n auditTime,\n catchError,\n finalize,\n map,\n shareReplay,\n switchMap,\n} from 'rxjs/operators';\nimport { PraxisListConfig } from '../models/list-config.model';\nimport {\n GenericCrudService,\n LoggerContext,\n LoggerLogOptions,\n LoggerService,\n} from '@praxisui/core';\n\nexport interface ListSection<T = any> {\n key: string | undefined;\n items: T[];\n}\n\n@Injectable()\nexport class ListDataService<T = any> {\n private readonly DEBUG =\n typeof window !== 'undefined' &&\n Boolean((window as any)['__PRAXIS_DEBUG__']);\n private config$ = new BehaviorSubject<PraxisListConfig | null>(null);\n private refresh$ = new BehaviorSubject<void>(undefined);\n private pageable$ = new BehaviorSubject<{\n pageNumber: number;\n pageSize: number;\n sort?: string[];\n }>({ pageNumber: 0, pageSize: 10 });\n private query$ = new BehaviorSubject<Record<string, any>>({});\n readonly loading$ = new BehaviorSubject<boolean>(false);\n readonly total$ = new BehaviorSubject<number>(0);\n readonly pageState$ = this.pageable$.asObservable();\n private lastSig = '';\n private nextObjectId = 1;\n private readonly objectIds = new WeakMap<object, number>();\n private readonly logger = inject(LoggerService);\n private readonly logContext: LoggerContext = {\n lib: 'praxis-list',\n component: 'ListDataService',\n };\n\n private readonly crud = inject(GenericCrudService as any, {\n optional: true,\n }) as GenericCrudService<T> | null;\n\n setConfig(config: PraxisListConfig): void {\n const sig = this.buildConfigSignature(config);\n const changed = sig !== this.lastSig;\n this.lastSig = sig;\n if (changed) {\n this.config$.next(config);\n const ps = config.layout?.pageSize ?? 10;\n this.pageable$.next({\n ...this.pageable$.value,\n pageNumber: 0,\n pageSize: ps,\n sort: config.dataSource?.sort,\n });\n this.query$.next(config.dataSource?.query || {});\n }\n }\n\n refresh(): void {\n this.refresh$.next();\n }\n\n private _stream$?: Observable<T[]>;\n\n stream(): Observable<T[]> {\n if (!this._stream$) {\n this._stream$ = combineLatest([\n this.config$,\n this.pageable$,\n this.query$,\n this.refresh$,\n ]).pipe(\n auditTime(0),\n switchMap(([cfg, pageable, query]) => {\n if (!cfg) return of([]);\n const ds = cfg.dataSource;\n if (ds?.data) {\n this.loading$.next(false);\n this.total$.next((ds.data as T[]).length);\n return of(ds.data as T[]);\n }\n if (ds?.resourcePath && this.crud) {\n try {\n const resourcePath = ds.resourcePath;\n const req: any = {\n pageNumber: pageable.pageNumber,\n pageSize: pageable.pageSize,\n };\n if (pageable.sort && pageable.sort.length)\n req.sort = pageable.sort;\n this.crud.configure(resourcePath);\n if (this.DEBUG) {\n this.logger.debug(\n '[PraxisList] fetching via /filter',\n this.buildLogOptions(\n { resourcePath, query, pageable: req },\n {\n throttleKey: `praxis-list:filter-request:${resourcePath}`,\n },\n ),\n );\n }\n this.loading$.next(true);\n const obs = (this.crud as any).filter(query || {}, req).pipe(\n map((page: any) => {\n const content = (page?.content ?? page ?? []) as T[];\n const total =\n typeof page?.totalElements === 'number'\n ? page.totalElements\n : content.length;\n this.total$.next(total);\n return content;\n }),\n // Fallback: if backend doesn't support /filter for this resource, try GET all\n catchError((err) => {\n this.warnFilterFallbackOnce(resourcePath, err);\n return (this.crud as any).getAll().pipe(\n map((arr: T[]) => {\n const content = arr || [];\n this.total$.next(content.length);\n return content;\n }),\n );\n }),\n finalize(() => this.loading$.next(false)),\n );\n return obs as unknown as Observable<T[]>;\n } catch {\n this.loading$.next(false);\n return of([]);\n }\n }\n this.loading$.next(false);\n return of([]);\n }),\n shareReplay(1),\n );\n }\n return this._stream$;\n }\n\n nextPage(): void {\n const p = this.pageable$.value;\n this.pageable$.next({ ...p, pageNumber: p.pageNumber + 1 });\n }\n prevPage(): void {\n const p = this.pageable$.value;\n this.pageable$.next({ ...p, pageNumber: Math.max(0, p.pageNumber - 1) });\n }\n setPageSize(size: number): void {\n const p = this.pageable$.value;\n this.pageable$.next({ ...p, pageSize: Math.max(1, size), pageNumber: 0 });\n }\n setSort(sort: string[]): void {\n const p = this.pageable$.value;\n this.pageable$.next({ ...p, sort, pageNumber: 0 });\n }\n setQuery(q: Record<string, any>): void {\n this.query$.next(q || {});\n // Reset to first page when query changes\n const p = this.pageable$.value;\n this.pageable$.next({ ...p, pageNumber: 0 });\n }\n\n groupedStream(): Observable<ListSection<T>[]> {\n return this.stream().pipe(\n switchMap((items) =>\n this.config$.pipe(\n map((cfg) => cfg?.layout?.groupBy),\n map((groupBy) => {\n if (!groupBy) return [{ key: undefined, items }];\n const groups = new Map<string, T[]>();\n for (const it of items) {\n const key = (it as any)?.[groupBy];\n const skey = key == null ? '' : String(key);\n if (!groups.has(skey)) groups.set(skey, []);\n groups.get(skey)!.push(it);\n }\n return Array.from(groups.entries()).map(([key, arr]) => ({\n key,\n items: arr,\n }));\n }),\n ),\n ),\n );\n }\n\n private buildConfigSignature(config: PraxisListConfig): string {\n const dataSource = config?.dataSource;\n const layout = config?.layout;\n return this.safeSerialize({\n resourcePath: dataSource?.resourcePath || '',\n sort: dataSource?.sort || [],\n pageSize: layout?.pageSize ?? 10,\n groupBy: layout?.groupBy || '',\n query: dataSource?.query || {},\n localData: this.buildLocalDataSignature(dataSource?.data),\n });\n }\n\n private buildLocalDataSignature(data: unknown): string {\n if (!Array.isArray(data)) return 'none';\n const objectId = this.ensureObjectId(data);\n const head = data.slice(0, 3);\n const tail = data.length > 3 ? data.slice(-2) : [];\n return this.safeSerialize({\n objectId,\n length: data.length,\n head,\n tail,\n });\n }\n\n private ensureObjectId(value: object): number {\n const current = this.objectIds.get(value);\n if (current) return current;\n const next = this.nextObjectId++;\n this.objectIds.set(value, next);\n return next;\n }\n\n private safeSerialize(value: unknown): string {\n try {\n return stableSerialize(value);\n } catch {\n return String(value);\n }\n }\n\n private warnFilterFallbackOnce(resourcePath: string, error: unknown): void {\n this.logger.warnOnce(\n '[PraxisList] /filter failed, falling back to GET all',\n this.buildLogOptions(\n { resourcePath, error },\n {\n dedupeKey: `praxis-list:filter-fallback:${resourcePath}`,\n throttleKey: 'praxis-list:filter-fallback',\n },\n ),\n );\n }\n\n private buildLogOptions(\n data?: unknown,\n options: Partial<LoggerLogOptions> = {},\n ): LoggerLogOptions {\n return {\n ...options,\n context: {\n ...this.logContext,\n ...(options.context ?? {}),\n },\n data,\n };\n }\n}\n\nfunction stableSerialize(value: unknown): string {\n if (value === null || value === undefined) return String(value);\n if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'bigint'\n ) {\n return String(value);\n }\n if (typeof value === 'string') return JSON.stringify(value);\n if (value instanceof Date) return JSON.stringify(value.toISOString());\n if (Array.isArray(value))\n return `[${value.map((entry) => stableSerialize(entry)).join(',')}]`;\n if (typeof value === 'object') {\n const keys = Object.keys(value as Record<string, unknown>).sort();\n const entries = keys.map(\n (key) =>\n `${JSON.stringify(key)}:${stableSerialize((value as Record<string, unknown>)[key])}`,\n );\n return `{${entries.join(',')}}`;\n }\n return JSON.stringify(String(value));\n}\n","import { Injectable } from '@angular/core';\nimport { PraxisListConfig } from '../models/list-config.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ListSkinService {\n toHostClasses(config?: PraxisListConfig): string[] {\n const skin = config?.skin?.type || 'elevated';\n const density = config?.layout?.density || 'default';\n const itemSpacing = config?.layout?.itemSpacing || 'default';\n const model = config?.layout?.model || 'standard';\n const lines = config?.layout?.lines || 2;\n const classes = [\n `skin-${skin}`,\n `density-${density}`,\n `item-spacing-${itemSpacing}`,\n `model-${model}`,\n `lines-${lines}`,\n config?.skin?.class || '',\n ].filter(Boolean);\n return classes;\n }\n\n toCssVars(config?: PraxisListConfig): Record<string, string> {\n const s = config?.skin;\n if (!s) return {};\n const vars: Record<string, string> = {};\n if (s.radius) vars['--p-list-radius'] = s.radius;\n if (s.shadow) vars['--p-list-shadow'] = s.shadow;\n if (s.border) {\n vars['--p-list-border'] = s.border;\n vars['--p-list-item-border'] = s.border;\n }\n if (s.backdropBlur) vars['--p-list-blur'] = s.backdropBlur;\n if (s.gradient?.from) vars['--p-list-grad-from'] = s.gradient.from;\n if (s.gradient?.to) vars['--p-list-grad-to'] = s.gradient.to;\n if (s.gradient?.angle != null)\n vars['--p-list-grad-angle'] = `${s.gradient.angle}deg`;\n const gradientForeground = resolveGradientForeground(\n s.gradient?.from,\n s.gradient?.to,\n );\n if (gradientForeground) {\n vars['--p-list-grad-foreground'] = gradientForeground;\n vars['--p-list-grad-foreground-muted'] = gradientForeground;\n }\n return vars;\n }\n\n toInlineStyle(\n config?: PraxisListConfig,\n rootSelector = ':host',\n includeVars = true,\n ): string {\n const s = config?.skin;\n if (!s) return '';\n const vars = this.toCssVars(config);\n const varEntries = Object.entries(vars).map(\n ([key, value]) => `${key}: ${value}`,\n );\n const base =\n includeVars && varEntries.length\n ? `${rootSelector}{${varEntries.join(';')}}`\n : '';\n const extra = normalizeInlineCss(\n sanitizeCss((s.inlineStyle || '').trim()),\n rootSelector,\n );\n if (base && extra) return `${base}\\n${extra}`;\n return base || extra;\n }\n}\n\nfunction sanitizeCss(css: string): string {\n // Remove padrões e funções de alto risco\n const banned = /(url\\s*\\(|@import|expression\\s*\\(|behavior\\s*:)/gi;\n return stripCssComments(css).replace(banned, '').trim();\n}\n\nfunction normalizeInlineCss(css: string, rootSelector: string): string {\n if (!css) return '';\n if (!css.includes('{')) return `${rootSelector}{${css}}`;\n return scopeCssBlock(css, rootSelector);\n}\n\nfunction stripCssComments(css: string): string {\n return css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n}\n\nfunction scopeCssBlock(css: string, rootSelector: string): string {\n const scopedRules: string[] = [];\n let cursor = 0;\n\n while (cursor < css.length) {\n const openIndex = css.indexOf('{', cursor);\n if (openIndex === -1) break;\n\n const rawSelector = css.slice(cursor, openIndex).trim();\n const block = readCssBlock(css, openIndex);\n if (!block) break;\n\n if (rawSelector) {\n const atRule = rawSelector.toLowerCase();\n if (atRule.startsWith('@media') || atRule.startsWith('@supports')) {\n const nested = scopeCssBlock(block.content, rootSelector);\n if (nested) scopedRules.push(`${rawSelector}{${nested}}`);\n } else if (!atRule.startsWith('@')) {\n const scopedSelector = scopeSelectorList(rawSelector, rootSelector);\n if (scopedSelector && block.content.trim()) {\n scopedRules.push(`${scopedSelector}{${block.content.trim()}}`);\n }\n }\n }\n\n cursor = block.nextIndex;\n }\n\n return scopedRules.join('\\n');\n}\n\nfunction readCssBlock(\n css: string,\n openIndex: number,\n): { content: string; nextIndex: number } | null {\n let depth = 0;\n for (let i = openIndex; i < css.length; i++) {\n const ch = css[i];\n if (ch === '{') {\n depth++;\n continue;\n }\n if (ch !== '}') continue;\n depth--;\n if (depth === 0) {\n return {\n content: css.slice(openIndex + 1, i).trim(),\n nextIndex: i + 1,\n };\n }\n }\n return null;\n}\n\nfunction scopeSelectorList(selectorList: string, rootSelector: string): string {\n return selectorList\n .split(',')\n .map((selector) => scopeSingleSelector(selector.trim(), rootSelector))\n .filter(Boolean)\n .join(', ');\n}\n\nfunction scopeSingleSelector(selector: string, rootSelector: string): string {\n if (!selector) return '';\n\n const hostScoped = selector.replace(/:host\\b/g, rootSelector).trim();\n if (!hostScoped) {\n return rootSelector;\n }\n const rootNormalized = hostScoped\n .replace(/^(:root|html|body)\\b/, rootSelector)\n .trim();\n if (!rootNormalized) return rootSelector;\n if (rootNormalized.startsWith('&'))\n return `${rootSelector}${rootNormalized.slice(1)}`;\n if (\n rootNormalized === rootSelector ||\n rootNormalized.startsWith(`${rootSelector} `) ||\n rootNormalized.startsWith(`${rootSelector}.`) ||\n rootNormalized.startsWith(`${rootSelector}#`) ||\n rootNormalized.startsWith(`${rootSelector}[`) ||\n rootNormalized.startsWith(`${rootSelector}:`)\n ) {\n return rootNormalized;\n }\n return `${rootSelector} ${rootNormalized}`;\n}\n\ntype RgbColor = { r: number; g: number; b: number };\n\nfunction resolveGradientForeground(from?: string, to?: string): string | null {\n const start = parseCssColor(from || '');\n const end = parseCssColor(to || '') ?? start;\n const base = start ?? end;\n if (!base) return null;\n const sample = end ? averageColor(base, end) : base;\n const lightContrast = contrastRatio(sample, { r: 255, g: 255, b: 255 });\n const darkContrast = contrastRatio(sample, { r: 17, g: 17, b: 17 });\n return lightContrast >= darkContrast ? '#ffffff' : '#111111';\n}\n\nfunction parseCssColor(value: string): RgbColor | null {\n const normalized = value.trim().toLowerCase();\n if (!normalized || normalized.startsWith('var(')) return null;\n if (normalized.startsWith('#')) return parseHexColor(normalized);\n if (normalized.startsWith('rgb(') || normalized.startsWith('rgba('))\n return parseRgbColor(normalized);\n return null;\n}\n\nfunction parseHexColor(value: string): RgbColor | null {\n const hex = value.replace('#', '');\n if (hex.length === 3 || hex.length === 4) {\n const [r, g, b] = hex\n .slice(0, 3)\n .split('')\n .map((c) => parseInt(c + c, 16));\n return { r, g, b };\n }\n if (hex.length === 6 || hex.length === 8) {\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return { r, g, b };\n }\n return null;\n}\n\nfunction parseRgbColor(value: string): RgbColor | null {\n const match = value.match(/rgba?\\(([^)]+)\\)/i);\n if (!match) return null;\n const parts = match[1].split(',').map((part) => part.trim());\n if (parts.length < 3) return null;\n const r = parseRgbChannel(parts[0]);\n const g = parseRgbChannel(parts[1]);\n const b = parseRgbChannel(parts[2]);\n if ([r, g, b].some((channel) => channel == null)) return null;\n return { r: r!, g: g!, b: b! };\n}\n\nfunction parseRgbChannel(value: string): number | null {\n if (value.endsWith('%')) {\n const pct = Number(value.slice(0, -1));\n if (!Number.isFinite(pct)) return null;\n return clamp(Math.round((pct / 100) * 255), 0, 255);\n }\n const n = Number(value);\n if (!Number.isFinite(n)) return null;\n return clamp(Math.round(n), 0, 255);\n}\n\nfunction averageColor(a: RgbColor, b: RgbColor): RgbColor {\n return {\n r: Math.round((a.r + b.r) / 2),\n g: Math.round((a.g + b.g) / 2),\n b: Math.round((a.b + b.b) / 2),\n };\n}\n\nfunction contrastRatio(a: RgbColor, b: RgbColor): number {\n const la = relativeLuminance(a);\n const lb = relativeLuminance(b);\n const [lighter, darker] = la >= lb ? [la, lb] : [lb, la];\n return (lighter + 0.05) / (darker + 0.05);\n}\n\nfunction relativeLuminance(color: RgbColor): number {\n const linear = [color.r, color.g, color.b].map((channel) => {\n const c = channel / 255;\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n });\n return 0.2126 * linear[0] + 0.7152 * linear[1] + 0.0722 * linear[2];\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n/**\n * Executive badge component for displaying account segment classification.\n *\n * This component replaces legacy HTML string-based badges with a type-safe,\n * encapsulated solution that bypasses Angular's DomSanitizer restrictions.\n *\n * @remarks\n * - Fully WCAG 2.1 AA compliant with proper ARIA attributes\n * - Uses OnPush change detection for optimal performance\n * - Supports three segment variants: enterprise, corporate, middle\n * - Colors follow corporate branding guidelines\n * - Input validation prevents invalid runtime values\n *\n * @example Basic usage\n * ```html\n * <praxis-executive-badge variant=\"enterprise\">\n * Enterprise\n * </praxis-executive-badge>\n * ```\n *\n * @example Dynamic variant with custom label\n * ```html\n * <praxis-executive-badge\n * [variant]=\"account.segmentType\"\n * [ariaLabel]=\"'Account segment: ' + account.segmentLabel\">\n * {{ account.segmentLabel }}\n * </praxis-executive-badge>\n * ```\n *\n * @see {@link ExecutiveAlertsComponent} for related alert component\n * @see WCAG 2.1 Level AA - Guideline 4.1.2 (Name, Role, Value)\n *\n * @public\n */\n@Component({\n selector: 'praxis-executive-badge',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n class=\"badge\"\n [class]=\"variantClass\"\n role=\"status\"\n [attr.aria-label]=\"computedAriaLabel\"\n >\n <ng-content></ng-content>\n </span>\n `,\n styles: [`\n .badge {\n display: inline-flex;\n align-items: center;\n padding: 0 11px;\n border-radius: 999px;\n font-size: 0.69rem;\n font-weight: 700;\n min-height: 21px;\n }\n\n .badge-enterprise {\n background: #eaf4f7;\n color: #1d769b;\n border: 1px solid #d6e8f0;\n }\n\n .badge-corporate {\n background: #f4efe7;\n color: #9f8a58;\n border: 1px solid #e7dbc4;\n }\n\n .badge-middle {\n background: #ece8e1;\n color: #635745;\n border: 1px solid #ddd5ca;\n }\n `]\n})\nexport class ExecutiveBadgeComponent {\n /**\n * Custom ARIA label for screen readers.\n * If not provided, defaults to \"Segment badge: {variant}\"\n */\n @Input() ariaLabel?: string;\n\n private _variant: 'enterprise' | 'corporate' | 'middle' = 'enterprise';\n\n /**\n * Badge variant type with runtime validation.\n * Valid values: 'enterprise', 'corporate', 'middle'\n * Invalid values will default to 'enterprise' with console warning.\n */\n @Input()\n set variant(value: 'enterprise' | 'corporate' | 'middle') {\n const validVariants = ['enterprise', 'corporate', 'middle'] as const;\n if (!validVariants.includes(value)) {\n console.warn(\n `[ExecutiveBadgeComponent] Invalid variant: \"${value}\". Using default \"enterprise\". Valid values: ${validVariants.join(', ')}`\n );\n this._variant = 'enterprise';\n return;\n }\n this._variant = value;\n }\n\n get variant(): 'enterprise' | 'corporate' | 'middle' {\n return this._variant;\n }\n\n get variantClass(): string {\n return `badge-${this._variant}`;\n }\n\n /**\n * Computed ARIA label for accessibility.\n * Uses custom ariaLabel if provided, otherwise generates default.\n */\n get computedAriaLabel(): string {\n if (this.ariaLabel) {\n return this.ariaLabel;\n }\n\n const labels: Record<typeof this._variant, string> = {\n enterprise: 'Enterprise segment',\n corporate: 'Corporate segment',\n middle: 'Middle Market segment'\n };\n\n return labels[this._variant];\n }\n}\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Alert data interface for executive alerts component.\n *\n * @property type - Alert severity level (warning or critical)\n * @property count - Number of alerts of this type (must be >= 0)\n */\nexport interface ExecutiveAlert {\n type: 'warning' | 'critical';\n count: number;\n}\n\n/**\n * Executive alerts component for displaying warning and critical account flags.\n *\n * This component replaces legacy HTML string-based alerts with a fully\n * accessible, WCAG 2.1 AA compliant solution.\n *\n * @remarks\n * **Accessibility Features:**\n * - WCAG 1.3.1: Semantic structure with proper roles\n * - WCAG 1.4.1: Does not rely on color alone (uses icons + text)\n * - WCAG 4.1.3: Status messages properly announced to screen readers\n * - aria-live regions for dynamic updates\n * - Screen-reader only text for full context\n *\n * **Performance:**\n * - OnPush change detection strategy\n * - Input validation prevents invalid data\n * - Optimized trackBy function\n *\n * @example Basic usage\n * ```html\n * <praxis-executive-alerts [alerts]=\"[\n * { type: 'warning', count: 1 },\n * { type: 'critical', count: 2 }\n * ]\"></praxis-executive-alerts>\n * ```\n *\n * @example Empty state (renders nothing)\n * ```html\n * <praxis-executive-alerts [alerts]=\"[]\"></praxis-executive-alerts>\n * ```\n *\n * @see WCAG 2.1 Level AA - Guidelines 1.3.1, 1.4.1, 4.1.3\n * @public\n */\n@Component({\n selector: 'praxis-executive-alerts',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (validAlerts.length > 0) {\n <div\n class=\"alerts-container\"\n role=\"group\"\n aria-label=\"Account alerts\"\n >\n @for (alert of validAlerts; track trackByAlert($index, alert)) {\n <span\n class=\"alert\"\n [class]=\"'alert-' + alert.type\"\n [attr.role]=\"alert.type === 'critical' ? 'alert' : 'status'\"\n [attr.aria-live]=\"alert.type === 'critical' ? 'assertive' : 'polite'\"\n [attr.aria-label]=\"getAlertAriaLabel(alert)\"\n tabindex=\"0\"\n >\n <span class=\"alert-icon\" aria-hidden=\"true\">\n {{ alert.type === 'warning' ? '△' : '●' }}\n </span>\n <span class=\"alert-count\" aria-hidden=\"true\">\n {{ alert.count }}\n </span>\n <span class=\"sr-only\">{{ getAlertDescription(alert) }}</span>\n </span>\n }\n </div>\n }\n `,\n styles: [`\n .alerts-container {\n display: inline-flex;\n gap: 6px;\n }\n\n .alert {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 0 7px;\n border-radius: 999px;\n font-size: 0.72rem;\n font-weight: 700;\n min-width: 28px;\n height: 20px;\n justify-content: center;\n cursor: help;\n transition: all 0.2s ease;\n }\n\n .alert:hover,\n .alert:focus {\n transform: scale(1.05);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n outline: 2px solid currentColor;\n outline-offset: 2px;\n }\n\n .alert-warning {\n background: #fff7e8;\n color: #bf8422;\n border: 1px solid #f3ddaf;\n }\n\n .alert-critical {\n background: #fff1f1;\n color: #c65857;\n border: 1px solid #f3c9c7;\n }\n\n .alert-icon {\n line-height: 1;\n }\n\n .alert-count {\n line-height: 1;\n }\n\n /**\n * Screen-reader only class for accessibility.\n * Visually hides content but keeps it available to assistive technologies.\n */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `]\n})\nexport class ExecutiveAlertsComponent implements OnChanges {\n @Input() alerts: ExecutiveAlert[] = [];\n\n /**\n * Validated and filtered alerts.\n * Only valid alerts (correct type and count >= 0) are included.\n */\n validAlerts: ExecutiveAlert[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['alerts']) {\n this.validateAndFilterAlerts();\n }\n }\n\n /**\n * Validates alerts array and filters out invalid entries.\n * Logs warnings for invalid data in development mode.\n */\n private validateAndFilterAlerts(): void {\n if (!Array.isArray(this.alerts)) {\n console.warn(\n '[ExecutiveAlertsComponent] Invalid alerts input: expected array, got',\n typeof this.alerts\n );\n this.validAlerts = [];\n return;\n }\n\n this.validAlerts = this.alerts.filter((alert, index) => {\n // Validate type\n if (!alert.type || !['warning', 'critical'].includes(alert.type)) {\n console.warn(\n `[ExecutiveAlertsComponent] Invalid alert type at index ${index}:`,\n alert.type,\n 'Valid types: \"warning\", \"critical\"'\n );\n return false;\n }\n\n // Validate count\n if (typeof alert.count !== 'number' || alert.count < 0) {\n console.warn(\n `[ExecutiveAlertsComponent] Invalid alert count at index ${index}:`,\n alert.count,\n 'Count must be a non-negative number'\n );\n return false;\n }\n\n // Filter out alerts with zero count\n if (alert.count === 0) {\n return false;\n }\n\n return true;\n });\n }\n\n /**\n * TrackBy function for optimal rendering performance.\n * Uses combination of type and count for unique identification.\n */\n trackByAlert(index: number, alert: ExecutiveAlert): string {\n return `${alert.type}-${alert.count}`;\n }\n\n /**\n * Generates ARIA label for alert badge.\n * Provides concise description for screen readers.\n */\n getAlertAriaLabel(alert: ExecutiveAlert): string {\n const plural = alert.count === 1 ? 'alert' : 'alerts';\n return `${alert.count} ${alert.type} ${plural}`;\n }\n\n /**\n * Generates detailed description for screen readers.\n * Provides full context including severity and actionability.\n */\n getAlertDescription(alert: ExecutiveAlert): string {\n const severity = alert.type === 'critical' ? 'Critical' : 'Warning';\n const plural = alert.count === 1 ? 'issue' : 'issues';\n const action = alert.type === 'critical'\n ? 'requiring immediate attention'\n : 'requiring attention';\n\n return `${severity}: ${alert.count} ${plural} ${action}`;\n }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n/**\n * Executive owner component displaying account owner with accessible avatar.\n *\n * This component replaces legacy HTML string-based owner displays with a\n * fully accessible, WCAG 2.1 AA compliant solution featuring an inline SVG avatar.\n *\n * @remarks\n * **Accessibility Features:**\n * - WCAG 1.1.1: Non-text content has text alternative (SVG with role and aria-label)\n * - SVG includes <title> element for tooltips\n * - Handles empty/undefined names gracefully\n * - Screen reader announces owner information clearly\n *\n * **Performance:**\n * - OnPush change detection strategy\n * - Input validation for name\n * - Lightweight inline SVG (no external dependencies)\n *\n * @example Basic usage\n * ```html\n * <praxis-executive-owner name=\"Ana Carolina\"></praxis-executive-owner>\n * ```\n *\n * @example With empty name (shows fallback)\n * ```html\n * <praxis-executive-owner name=\"\"></praxis-executive-owner>\n * <!-- Displays: \"Unassigned\" -->\n * ```\n *\n * @see WCAG 2.1 Level AA - Guideline 1.1.1 (Non-text Content)\n * @public\n */\n@Component({\n selector: 'praxis-executive-owner',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"owner\">\n <svg\n class=\"avatar\"\n width=\"26\"\n height=\"26\"\n viewBox=\"0 0 26 26\"\n role=\"img\"\n [attr.aria-label]=\"avatarAriaLabel\"\n >\n <title>{{ avatarTitle }}</title>\n <circle cx=\"13\" cy=\"13\" r=\"13\" fill=\"#eef2f6\" stroke=\"#dfe6ed\" stroke-width=\"1.5\"/>\n <circle cx=\"13\" cy=\"9\" r=\"3.5\" fill=\"#8a9fb5\"/>\n <circle cx=\"13\" cy=\"20\" r=\"5.5\" fill=\"#8a9fb5\"/>\n </svg>\n <span class=\"name\">{{ displayName }}</span>\n </div>\n `,\n styles: [`\n .owner {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 0.82rem;\n color: #5f7289;\n font-weight: 500;\n }\n\n .avatar {\n flex-shrink: 0;\n }\n\n .name {\n white-space: nowrap;\n }\n `]\n})\nexport class ExecutiveOwnerComponent {\n private _name = '';\n\n /**\n * Owner name with automatic validation and sanitization.\n * - Empty strings default to \"Unassigned\"\n * - Trimmed and limited to 50 characters\n * - Null/undefined converted to empty string\n */\n @Input()\n set name(value: string) {\n // Handle null/undefined\n if (value == null) {\n this._name = '';\n return;\n }\n\n // Trim and limit length for safety\n const sanitized = String(value).trim().substring(0, 50);\n this._name = sanitized;\n }\n\n get name(): string {\n return this._name;\n }\n\n /**\n * Display name with fallback for empty values.\n * Returns \"Unassigned\" if name is empty.\n */\n get displayName(): string {\n return this._name || 'Unassigned';\n }\n\n /**\n * ARIA label for SVG avatar.\n * Provides context for screen readers.\n */\n get avatarAriaLabel(): string {\n return this._name\n ? `Avatar for ${this._name}`\n : 'Unassigned user avatar';\n }\n\n /**\n * SVG title element content for tooltip.\n * Shows on hover in most browsers.\n */\n get avatarTitle(): string {\n return this._name\n ? `${this._name}'s avatar`\n : 'User avatar';\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, CSP_NONCE, inject, LOCALE_ID } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatListModule } from '@angular/material/list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { PraxisListConfig } from '../models/list-config.model';\nimport { ListSkinService } from '../services/list-skin.service';\nimport { evaluateTemplate } from '../utils/template-evaluator';\nimport { PraxisIconDirective } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-list-skin-preview',\n standalone: true,\n imports: [CommonModule, MatListModule, MatIconModule, MatChipsModule, PraxisIconDirective],\n templateUrl: './list-skin-preview.component.html',\n styleUrls: ['./list-skin-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisListSkinPreviewComponent {\n private static nextSkinScopeId = 0;\n private readonly hostLocale = inject(LOCALE_ID, { optional: true }) ?? 'en-US';\n\n @Input() config!: PraxisListConfig;\n @Input() items: any[] = [];\n @Input() theme: 'light'|'dark'|'grid' = 'light';\n readonly skinScopeId = `praxis-list-preview-scope-${PraxisListSkinPreviewComponent.nextSkinScopeId++}`;\n readonly cspNonce = inject(CSP_NONCE, { optional: true }) ?? null;\n\n constructor(private skin: ListSkinService) {}\n\n get skinClasses(): string {\n const base = this.skin.toHostClasses(this.config);\n return [this.themeClass(), ...base].join(' ');\n }\n get inlineCss(): string {\n const selector = `.preview-root[data-skin-scope=\"${this.skinScopeId}\"]`;\n return this.skin.toInlineStyle(this.config, selector, true);\n }\n\n themeClass(): string {\n switch (this.theme) {\n case 'dark': return 'preview-dark';\n case 'grid': return 'preview-grid';\n default: return 'preview-light';\n }\n }\n\n isList(): boolean {\n return (this.config?.layout?.variant || 'list') === 'list';\n }\n isTiles(): boolean {\n return (this.config?.layout?.variant || 'list') === 'tiles';\n }\n metaPrefixIcon(): string | undefined {\n return (this.config as any)?.templating?.metaPrefixIcon;\n }\n statusPosition(): 'inline' | 'top-right' {\n return (((this.config as any)?.templating?.statusPosition) || 'inline') as any;\n }\n\n leading = (item: any) => this.evalSlot('leading', item);\n primary = (item: any) => this.evalSlot('primary', item);\n secondary = (item: any) => this.evalSlot('secondary', item);\n meta = (item: any) => this.evalSlot('meta', item);\n trailing = (item: any) => this.evalSlot('trailing', item);\n featureLabel(item: any, expr?: string): string {\n // simple replacement using the same evaluator used internally\n return String(expr || '').replace(/\\$\\{([^}]+)\\}/g, (_, path) => {\n try {\n const value = path.split('.').reduce((acc: any, k: string) => (acc == null ? undefined : acc[k]), { item });\n return value == null ? '' : String(value);\n } catch {\n return '';\n }\n });\n }\n featuresVisible(): boolean {\n const t = this.config?.templating as any;\n const has = (t?.features?.length || 0) > 0;\n const visible = t?.featuresVisible !== false;\n return has && visible;\n }\n featuresMode(): 'icons+labels'|'icons-only'|'labels-only' {\n return ((this.config?.templating as any)?.featuresMode as any) || 'icons+labels';\n }\n\n starIcon(index: number, ratingValue: string | number): string {\n const r = typeof ratingValue === 'number' ? ratingValue : parseFloat(ratingValue || '0');\n const pos = index + 1; // 1..5\n if (r >= pos) return 'star';\n if (r >= pos - 0.5) return 'star_half';\n return 'star_border';\n }\n\n private evalSlot(\n slot: 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing',\n item: any,\n ) {\n const def = this.config?.templating?.[slot];\n if (!def) return null;\n const out = evaluateTemplate(def, item, this.templateEvaluatorOptions()) as any;\n return this.applyMaps(out, item);\n }\n\n private applyMaps(out: any, item: any): any {\n if (!out) return out;\n if (out.type === 'chip') {\n let value = out.value;\n let color = out.color as string | undefined;\n try {\n const map = (this.config?.templating as any)?.chipColorMap as Record<string, string> | undefined;\n if (map && typeof value === 'string') {\n const key = String(value).toLowerCase();\n const found = map[key] ?? map[value];\n if (found) color = found;\n }\n } catch { }\n try {\n const lmap = (this.config?.templating as any)?.chipLabelMap as Record<string, string> | undefined;\n if (lmap && typeof value === 'string') {\n const key = String(value).toLowerCase();\n const lbl = lmap[key] ?? lmap[value];\n if (lbl) value = lbl;\n } else if (typeof value === 'string') {\n value = this.prettyLabel(value);\n }\n } catch { }\n return { ...out, value, color };\n }\n if (out.type === 'icon') {\n try {\n const map = (this.config?.templating as any)?.iconColorMap as Record<string, string> | undefined;\n if (map) {\n const status = String(item?.status ?? '').trim();\n const icon = String(out?.value ?? '').trim();\n const tryKeys = [\n status,\n status.toLowerCase?.(),\n icon,\n icon.toLowerCase?.(),\n ].filter(Boolean) as string[];\n for (const k of tryKeys) {\n const found = (map as any)[k];\n if (found) { out.color = found; break; }\n }\n }\n } catch { }\n return out;\n }\n return out;\n }\n\n private prettyLabel(v: string): string {\n try {\n const t = String(v ?? '')\n .replace(/[\\s_\\-]+/g, ' ')\n .trim()\n .toLowerCase();\n if (!t) return '';\n return t.replace(/\\b\\w/g, (m) => m.toUpperCase());\n } catch { return String(v ?? ''); }\n }\n\n private splitPipe(expr: string): { baseExpr: string; param?: string } {\n const idx = expr.indexOf('|');\n if (idx === -1) return { baseExpr: expr.trim() };\n return { baseExpr: expr.slice(0, idx).trim(), param: expr.slice(idx + 1).trim() };\n }\n\n private evalString(expr: string, ctx: any): string {\n const res = evaluateTemplate(\n { type: 'text', expr } as any,\n ctx?.item ?? ctx,\n this.templateEvaluatorOptions(),\n );\n return res?.value ?? '';\n }\n\n private templateEvaluatorOptions() {\n return {\n i18n: this.config?.i18n,\n appLocale: this.hostLocale,\n };\n }\n\n isThemeColor(color?: string): boolean {\n return color === 'primary' || color === 'accent' || color === 'warn';\n }\n chipStyle(color?: string, variant?: 'filled' | 'outlined'): string {\n if (!color || this.isThemeColor(color)) return '';\n if (variant === 'outlined') {\n return `color:${color}; border-color:${color}; background: transparent;`;\n }\n return `background:${color}; color: var(--md-sys-color-on-primary);`;\n }\n iconStyle(color?: string): string {\n if (!color || this.isThemeColor(color)) return '';\n return `color:${color};`;\n }\n ratingMax(def?: any): number {\n const max = Number(def?.props?.rating?.max ?? 5);\n if (!Number.isFinite(max)) return 5;\n return Math.min(10, Math.max(1, Math.round(max)));\n }\n ratingThemeColor(def?: any): string | undefined {\n const c = def?.props?.rating?.color;\n return this.isThemeColor(c) ? c : undefined;\n }\n ratingIconStyle(def?: any): string {\n const parts: string[] = [];\n const c = def?.props?.rating?.color;\n const size = Number(def?.props?.rating?.size ?? 0);\n if (c && !this.isThemeColor(c)) parts.push(`color:${c};`);\n if (Number.isFinite(size) && size > 0) {\n parts.push(`font-size:${size}px; width:${size}px; height:${size}px; line-height:${size}px;`);\n }\n return parts.join(' ');\n }\n ratingRange(def?: any): number[] {\n const max = this.ratingMax(def);\n return Array.from({ length: max }, (_, i) => i);\n }\n\n // trackBy for preview lists\n trackByIndex = (i: number) => i;\n}\n","<div class=\"preview-root\" [ngClass]=\"skinClasses\" [attr.data-skin-scope]=\"skinScopeId\">\n @if (inlineCss) { <style [attr.nonce]=\"cspNonce || null\" [textContent]=\"inlineCss\"></style> }\n\n @if (isList()) {\n <mat-list>\n @for (item of items; track trackByIndex($index)) {\n <mat-list-item>\n <div class=\"list-item-content\">\n @if (leading(item); as lead) {\n @switch (lead.type) {\n @case ('icon') { <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\" [color]=\"isThemeColor(lead.color) ? lead.color : undefined\" [style.cssText]=\"(lead.style ? lead.style + ';' : '') + iconStyle(lead.color)\"></mat-icon> }\n @case ('image') {\n <div class=\"lead-image\" [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">\n <img [src]=\"lead.value\" [alt]=\"config.templating?.leading?.imageAlt || ''\" />\n @if (lead.badge?.value) { <mat-chip class=\"lead-badge\"\n [color]=\"isThemeColor(lead.badge?.color) ? lead.badge?.color : undefined\"\n [ngClass]=\"(((lead.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(lead.badge?.color, lead.badge?.variant)\">{{ lead.badge?.value }}</mat-chip> }\n </div>\n }\n @case ('text') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n @case ('chip') { <mat-chip [color]=\"isThemeColor(lead.color) ? lead.color : undefined\" [ngClass]=\"((lead.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(lead.color, lead.variant)\">{{ lead.value }}</mat-chip> }\n @case ('rating') { @for (_ of ratingRange(lead); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx, lead.value)\" [color]=\"ratingThemeColor(lead)\" [style.cssText]=\"ratingIconStyle(lead)\"></mat-icon> } }\n @case ('html') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\" [innerHTML]=\"lead.value\"></span> }\n @default { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n }\n }\n <div>\n <div class=\"primary\" [ngClass]=\"primary(item)?.class\" [style.cssText]=\"primary(item)?.style\">{{ primary(item)?.value }}</div>\n @if ((config.layout?.lines || 1) > 1) { <div class=\"secondary\" [ngClass]=\"secondary(item)?.class\" [style.cssText]=\"secondary(item)?.style\">{{ secondary(item)?.value }}</div> }\n @if (featuresVisible()) {\n @for (f of (config.templating?.features || []); track $index; let fi = $index) {\n <span class=\"feature\">\n @if (f.icon && featuresMode() !== 'labels-only') { <mat-icon [praxisIcon]=\"f.icon\"></mat-icon> }\n @if (featuresMode() !== 'icons-only') { <span [ngClass]=\"f.class\" [style.cssText]=\"f.style\">{{ featureLabel(item, f.expr) }}</span> }\n </span>\n }\n }\n </div>\n @if (meta(item); as m) {\n <div class=\"meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (metaPrefixIcon(); as mpi) { <mat-icon [praxisIcon]=\"mpi\"></mat-icon> }\n @switch (m.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(m.color) ? m.color : undefined\" [ngClass]=\"((m.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(m.color, m.variant)\">{{ m.value }}</mat-chip> }\n @case ('rating') { @for (_ of ratingRange(m); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx, m.value)\" [color]=\"ratingThemeColor(m)\" [style.cssText]=\"ratingIconStyle(m)\"></mat-icon> } }\n @case ('icon') { <mat-icon [praxisIcon]=\"m.value\" [color]=\"isThemeColor(m.color) ? m.color : undefined\" [style.cssText]=\"iconStyle(m.color)\"></mat-icon> }\n @case ('image') { <span class=\"inline-image\"><img [src]=\"m.value\" [alt]=\"m.imageAlt || ''\" /></span> }\n @case ('html') { <span [innerHTML]=\"m.value\"></span> }\n @default { <span>{{ m.value }}</span> }\n }\n </div>\n }\n @if (trailing(item); as tr) {\n <div class=\"trailing\" [ngClass]=\"tr.class\" [style.cssText]=\"tr.style\">\n @switch (tr.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(tr.color) ? tr.color : undefined\" [ngClass]=\"((tr.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(tr.color, tr.variant)\">{{ tr.value }}</mat-chip> }\n @case ('icon') { <mat-icon [praxisIcon]=\"tr.value\" [color]=\"isThemeColor(tr.color) ? tr.color : undefined\" [style.cssText]=\"iconStyle(tr.color)\"></mat-icon> }\n @case ('image') { <span class=\"inline-image\"><img [src]=\"tr.value\" [alt]=\"tr.imageAlt || ''\" /></span> }\n @case ('rating') { @for (_ of ratingRange(tr); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx, tr.value)\" [color]=\"ratingThemeColor(tr)\" [style.cssText]=\"ratingIconStyle(tr)\"></mat-icon> } }\n @case ('html') { <span [innerHTML]=\"tr.value\"></span> }\n @default { <span>{{ tr.value }}</span> }\n }\n </div>\n }\n </div>\n </mat-list-item>\n }\n </mat-list>\n } @else if (isTiles()) {\n <div class=\"tiles-grid\">\n @for (it of items; track trackByIndex($index)) {\n <div class=\"item-tile\">\n <div class=\"tile-media\">\n @if (leading(it); as lead) {\n @switch (lead.type) {\n @case ('image') {\n <img [src]=\"lead.value\" [alt]=\"config.templating?.leading?.imageAlt || ''\" />\n }\n @case ('icon') { <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\" [color]=\"isThemeColor(lead.color) ? lead.color : undefined\" [style.cssText]=\"(lead.style ? lead.style + ';' : '') + iconStyle(lead.color)\"></mat-icon> }\n @case ('text') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n @case ('chip') { <mat-chip [color]=\"isThemeColor(lead.color) ? lead.color : undefined\" [ngClass]=\"((lead.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(lead.color, lead.variant)\">{{ lead.value }}</mat-chip> }\n @case ('rating') { @for (_ of ratingRange(lead); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx, lead.value)\" [color]=\"ratingThemeColor(lead)\" [style.cssText]=\"ratingIconStyle(lead)\"></mat-icon> } }\n @case ('html') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\" [innerHTML]=\"lead.value\"></span> }\n @default { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n }\n }\n </div>\n @if (trailing(it); as tr) {\n @if (statusPosition() === 'top-right' && (tr?.type === 'chip' || tr?.type === 'icon')) {\n <div class=\"tile-status\">\n @if (tr?.type === 'chip') { <mat-chip [color]=\"isThemeColor(tr.color) ? tr.color : undefined\" [ngClass]=\"((tr.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(tr.color, tr.variant)\">{{ tr.value }}</mat-chip> }\n @if (tr?.type === 'icon') { <mat-icon [praxisIcon]=\"tr.value\" [color]=\"isThemeColor(tr.color) ? tr.color : undefined\" [style.cssText]=\"iconStyle(tr.color)\"></mat-icon> }\n </div>\n }\n }\n <div class=\"tile-body\">\n <div class=\"primary\" [ngClass]=\"primary(it)?.class\" [style.cssText]=\"primary(it)?.style\">{{ primary(it)?.value }}</div>\n @if ((config.layout?.lines || 1) > 1) { <div class=\"secondary\" [ngClass]=\"secondary(it)?.class\" [style.cssText]=\"secondary(it)?.style\">{{ secondary(it)?.value }}</div> }\n @if (meta(it); as m) {\n <div class=\"meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (metaPrefixIcon(); as mpi) { <mat-icon [praxisIcon]=\"mpi\"></mat-icon> }\n @switch (m.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(m.color) ? m.color : undefined\" [ngClass]=\"((m.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(m.color, m.variant)\">{{ m.value }}</mat-chip> }\n @case ('rating') { @for (_ of ratingRange(m); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx, m.value)\" [color]=\"ratingThemeColor(m)\" [style.cssText]=\"ratingIconStyle(m)\"></mat-icon> } }\n @case ('icon') { <mat-icon [praxisIcon]=\"m.value\" [color]=\"isThemeColor(m.color) ? m.color : undefined\" [style.cssText]=\"iconStyle(m.color)\"></mat-icon> }\n @case ('image') { <span class=\"inline-image\"><img [src]=\"m.value\" [alt]=\"m.imageAlt || ''\" /></span> }\n @case ('html') { <span [innerHTML]=\"m.value\"></span> }\n @default { <span>{{ m.value }}</span> }\n }\n </div>\n }\n @if (featuresVisible()) {\n <div class=\"features\">\n @for (f of (config.templating?.features || []); track $index; let fi = $index) {\n <span class=\"feature\">\n @if (f.icon && featuresMode() !== 'labels-only') { <mat-icon [praxisIcon]=\"f.icon\"></mat-icon> }\n @if (featuresMode() !== 'icons-only') { <span [ngClass]=\"f.class\" [style.cssText]=\"f.style\">{{ featureLabel(it, f.expr) }}</span> }\n </span>\n }\n </div>\n }\n @if (trailing(it); as tr2) {\n @if (!(statusPosition() === 'top-right' && (tr2?.type === 'chip' || tr2?.type === 'icon'))) {\n <div class=\"meta\" [ngClass]=\"tr2.class\" [style.cssText]=\"tr2.style\">\n @switch (tr2.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(tr2.color) ? tr2.color : undefined\" [ngClass]=\"((tr2.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(tr2.color, tr2.variant)\">{{ tr2.value }}</mat-chip> }\n @case ('rating') { @for (_ of ratingRange(tr2); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx, tr2.value)\" [color]=\"ratingThemeColor(tr2)\" [style.cssText]=\"ratingIconStyle(tr2)\"></mat-icon> } }\n @case ('image') { <span class=\"inline-image\"><img [src]=\"tr2.value\" [alt]=\"tr2.imageAlt || ''\" /></span> }\n @case ('html') { <span [innerHTML]=\"tr2.value\"></span> }\n @default { <span>{{ tr2.value }}</span> }\n }\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"cards-grid\">\n @for (it of items; track trackByIndex($index)) {\n <div class=\"item-card\">\n <div class=\"list-item-content\">\n @if (leading(it); as lead) {\n @switch (lead.type) {\n @case ('icon') { <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\" [color]=\"isThemeColor(lead.color) ? lead.color : undefined\" [style.cssText]=\"(lead.style ? lead.style + ';' : '') + iconStyle(lead.color)\"></mat-icon> }\n @case ('image') {\n <div class=\"lead-image\" [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">\n <img [src]=\"lead.value\" [alt]=\"config.templating?.leading?.imageAlt || ''\" />\n @if (lead.badge?.value) { <mat-chip class=\"lead-badge\"\n [color]=\"isThemeColor(lead.badge?.color) ? lead.badge?.color : undefined\"\n [ngClass]=\"(((lead.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(lead.badge?.color, lead.badge?.variant)\">{{ lead.badge?.value }}</mat-chip> }\n </div>\n }\n @case ('text') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n @case ('chip') { <mat-chip [color]=\"isThemeColor(lead.color) ? lead.color : undefined\" [ngClass]=\"((lead.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(lead.color, lead.variant)\">{{ lead.value }}</mat-chip> }\n @case ('rating') { @for (_ of ratingRange(lead); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx, lead.value)\" [color]=\"ratingThemeColor(lead)\" [style.cssText]=\"ratingIconStyle(lead)\"></mat-icon> } }\n @case ('html') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\" [innerHTML]=\"lead.value\"></span> }\n @default { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n }\n }\n <div>\n <div class=\"primary\" [ngClass]=\"primary(it)?.class\" [style.cssText]=\"primary(it)?.style\">{{ primary(it)?.value }}</div>\n @if ((config.layout?.lines || 1) > 1) { <div class=\"secondary\" [ngClass]=\"secondary(it)?.class\" [style.cssText]=\"secondary(it)?.style\">{{ secondary(it)?.value }}</div> }\n @if (featuresVisible()) {\n @for (f of (config.templating?.features || []); track $index; let fi = $index) {\n <span class=\"feature\">\n @if (f.icon && featuresMode() !== 'labels-only') { <mat-icon [praxisIcon]=\"f.icon\"></mat-icon> }\n @if (featuresMode() !== 'icons-only') { <span [ngClass]=\"f.class\" [style.cssText]=\"f.style\">{{ featureLabel(it, f.expr) }}</span> }\n </span>\n }\n }\n </div>\n @if (meta(it); as m) {\n <div class=\"meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (metaPrefixIcon(); as mpi) { <mat-icon [praxisIcon]=\"mpi\"></mat-icon> }\n @switch (m.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(m.color) ? m.color : undefined\" [ngClass]=\"((m.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(m.color, m.variant)\">{{ m.value }}</mat-chip> }\n @case ('rating') { @for (_ of ratingRange(m); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx, m.value)\" [color]=\"ratingThemeColor(m)\" [style.cssText]=\"ratingIconStyle(m)\"></mat-icon> } }\n @case ('icon') { <mat-icon [praxisIcon]=\"m.value\" [color]=\"isThemeColor(m.color) ? m.color : undefined\" [style.cssText]=\"iconStyle(m.color)\"></mat-icon> }\n @case ('image') { <span class=\"inline-image\"><img [src]=\"m.value\" [alt]=\"m.imageAlt || ''\" /></span> }\n @case ('html') { <span [innerHTML]=\"m.value\"></span> }\n @default { <span>{{ m.value }}</span> }\n }\n </div>\n }\n @if (trailing(it); as tr) {\n <div class=\"trailing\" [ngClass]=\"tr.class\" [style.cssText]=\"tr.style\">\n @switch (tr.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(tr.color) ? tr.color : undefined\" [ngClass]=\"((tr.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\" [style.cssText]=\"chipStyle(tr.color, tr.variant)\">{{ tr.value }}</mat-chip> }\n @case ('icon') { <mat-icon [praxisIcon]=\"tr.value\" [color]=\"isThemeColor(tr.color) ? tr.color : undefined\" [style.cssText]=\"iconStyle(tr.color)\"></mat-icon> }\n @case ('image') { <span class=\"inline-image\"><img [src]=\"tr.value\" [alt]=\"tr.imageAlt || ''\" /></span> }\n @case ('rating') { @for (_ of ratingRange(tr); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx, tr.value)\" [color]=\"ratingThemeColor(tr)\" [style.cssText]=\"ratingIconStyle(tr)\"></mat-icon> } }\n @case ('html') { <span [innerHTML]=\"tr.value\"></span> }\n @default { <span>{{ tr.value }}</span> }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@Component({\n selector: 'praxis-meta-editor-text',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule, MatIconModule, MatMenuModule],\n templateUrl: './meta-editor-text.component.html',\n})\nexport class PraxisMetaEditorTextComponent {\n @Input() model: any;\n @Input() setPipe?: (slot: any, pipe: string) => void;\n @Output() change = new EventEmitter<void>();\n\n onPipe(pipe: string): void {\n if (!this.model) return;\n this.setPipe?.(this.model, pipe);\n this.change.emit();\n }\n}\n","<div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Pipes / Formato</mat-label>\n <input matInput [(ngModel)]=\"model.extraPipe\" (ngModelChange)=\"change.emit()\" />\n <button mat-icon-button matSuffix [matMenuTriggerFor]=\"pipeMenu\"><mat-icon>build</mat-icon></button>\n </mat-form-field>\n <mat-menu #pipeMenu=\"matMenu\">\n <button mat-menu-item (click)=\"onPipe('map:KEY=VALUE')\"><mat-icon>tune</mat-icon>Map</button>\n </mat-menu>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PdxColorPickerComponent } from '@praxisui/dynamic-fields';\n\n@Component({\n selector: 'praxis-meta-editor-chip',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatSelectModule, MatButtonModule, PdxColorPickerComponent],\n templateUrl: './meta-editor-chip.component.html',\n})\nexport class PraxisMetaEditorChipComponent {\n @Input() model: any;\n @Input() paletteOptions: Array<{ value?: string; label: string }> = [];\n @Input() colorDotBackground?: (value?: string) => string;\n @Input() isCustomColor?: (value?: string) => boolean;\n @Input() enableCustomColor?: (obj: any, prop: string) => void;\n @Output() change = new EventEmitter<void>();\n}\n","<div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor</mat-label>\n <mat-select [(ngModel)]=\"model.chipColor\" (ngModelChange)=\"change.emit()\">\n <mat-option *ngFor=\"let c of paletteOptions\" [value]=\"c.value\">\n <span class=\"color-dot\" [style.background]=\"colorDotBackground?.(c.value)\"></span>{{ c.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante</mat-label>\n <mat-select [(ngModel)]=\"model.chipVariant\" (ngModelChange)=\"change.emit()\">\n <mat-option value=\"filled\">Filled</mat-option>\n <mat-option value=\"outlined\">Outlined</mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n<div class=\"g gap-8\">\n <div *ngIf=\"isCustomColor?.(model.chipColor); else chipCustomBtn\">\n <pdx-color-picker label=\"Cor personalizada\" [format]=\"'hex'\" [(ngModel)]=\"model.chipColor\"\n (ngModelChange)=\"change.emit()\"></pdx-color-picker>\n </div>\n <ng-template #chipCustomBtn>\n <button mat-stroked-button type=\"button\" (click)=\"enableCustomColor?.(model, 'chipColor'); change.emit()\">\n Usar cor personalizada\n </button>\n </ng-template>\n</div>\n<div class=\"g row-flow gap-8 mt-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button mat-stroked-button type=\"button\" (click)=\"model.chipVariant='filled'; model.chipColor='primary'; change.emit()\">Status</button>\n <button mat-stroked-button type=\"button\" (click)=\"model.chipVariant='outlined'; model.chipColor='primary'; change.emit()\">Outlined</button>\n <button mat-stroked-button type=\"button\" (click)=\"model.chipVariant='filled'; model.chipColor='warn'; change.emit()\">Crítico</button>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PdxColorPickerComponent } from '@praxisui/dynamic-fields';\n\n@Component({\n selector: 'praxis-meta-editor-rating',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule, MatSelectModule, MatButtonModule, PdxColorPickerComponent],\n templateUrl: './meta-editor-rating.component.html',\n})\nexport class PraxisMetaEditorRatingComponent {\n @Input() model: any;\n @Input() paletteOptions: Array<{ value?: string; label: string }> = [];\n @Input() colorDotBackground?: (value?: string) => string;\n @Input() isCustomColor?: (value?: string) => boolean;\n @Input() enableCustomColor?: (obj: any, prop: string) => void;\n @Output() change = new EventEmitter<void>();\n}\n","<div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor</mat-label>\n <mat-select [(ngModel)]=\"model.ratingColor\" (ngModelChange)=\"change.emit()\">\n <mat-option *ngFor=\"let c of paletteOptions\" [value]=\"c.value\">\n <span class=\"color-dot\" [style.background]=\"colorDotBackground?.(c.value)\"></span>{{ c.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho (px)</mat-label>\n <input matInput type=\"number\" min=\"10\" max=\"32\" [(ngModel)]=\"model.ratingSize\" (ngModelChange)=\"change.emit()\" />\n <mat-error *ngIf=\"model.ratingSize!=null && (model.ratingSize < 10 || model.ratingSize > 32)\">Tamanho 10–32</mat-error>\n </mat-form-field>\n</div>\n<div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Máximo</mat-label>\n <input matInput type=\"number\" min=\"1\" max=\"10\" [(ngModel)]=\"model.ratingMax\" (ngModelChange)=\"change.emit()\" />\n <mat-error *ngIf=\"model.ratingMax!=null && (model.ratingMax < 1 || model.ratingMax > 10)\">Máximo 1–10</mat-error>\n </mat-form-field>\n <div class=\"muted text-caption\">Padrão: 5</div>\n</div>\n<div class=\"g gap-8\">\n <div *ngIf=\"isCustomColor?.(model.ratingColor); else ratingCustomBtn\">\n <pdx-color-picker label=\"Cor personalizada\" [format]=\"'hex'\" [(ngModel)]=\"model.ratingColor\"\n (ngModelChange)=\"change.emit()\"></pdx-color-picker>\n </div>\n <ng-template #ratingCustomBtn>\n <button mat-stroked-button type=\"button\" (click)=\"enableCustomColor?.(model, 'ratingColor'); change.emit()\">\n Usar cor personalizada\n </button>\n </ng-template>\n</div>\n<div class=\"g row-flow gap-8 mt-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button mat-stroked-button type=\"button\" (click)=\"model.ratingSize=12; model.ratingMax=5; model.ratingColor='primary'; change.emit()\">Compacto</button>\n <button mat-stroked-button type=\"button\" (click)=\"model.ratingSize=16; model.ratingMax=5; model.ratingColor='primary'; change.emit()\">Padrão</button>\n <button mat-stroked-button type=\"button\" (click)=\"model.ratingSize=20; model.ratingMax=5; model.ratingColor='accent'; change.emit()\">Destaque</button>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'praxis-meta-editor-currency',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule],\n templateUrl: './meta-editor-currency.component.html',\n})\nexport class PraxisMetaEditorCurrencyComponent {\n @Input() model: any;\n @Output() change = new EventEmitter<void>();\n}\n","<div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Moeda</mat-label>\n <input matInput [(ngModel)]=\"model.currencyCode\" (ngModelChange)=\"change.emit()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Locale</mat-label>\n <input matInput [(ngModel)]=\"model.locale\" (ngModelChange)=\"change.emit()\" />\n </mat-form-field>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\n@Component({\n selector: 'praxis-meta-editor-date',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule, MatSelectModule],\n templateUrl: './meta-editor-date.component.html',\n})\nexport class PraxisMetaEditorDateComponent {\n @Input() model: any;\n @Output() change = new EventEmitter<void>();\n}\n","<div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Formato</mat-label>\n <mat-select [(ngModel)]=\"model.dateStyle\" (ngModelChange)=\"change.emit()\">\n <mat-option value=\"short\">Curto</mat-option>\n <mat-option value=\"medium\">Médio</mat-option>\n <mat-option value=\"long\">Longo</mat-option>\n <mat-option value=\"full\">Completo</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Locale</mat-label>\n <input matInput [(ngModel)]=\"model.locale\" (ngModelChange)=\"change.emit()\" />\n </mat-form-field>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PdxColorPickerComponent } from '@praxisui/dynamic-fields';\n\n@Component({\n selector: 'praxis-meta-editor-icon',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatSelectModule, MatButtonModule, PdxColorPickerComponent],\n templateUrl: './meta-editor-icon.component.html',\n})\nexport class PraxisMetaEditorIconComponent {\n @Input() model: any;\n @Input() paletteOptions: Array<{ value?: string; label: string }> = [];\n @Input() colorDotBackground?: (value?: string) => string;\n @Input() isCustomColor?: (value?: string) => boolean;\n @Input() enableCustomColor?: (obj: any, prop: string) => void;\n @Output() change = new EventEmitter<void>();\n}\n","<div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor</mat-label>\n <mat-select [(ngModel)]=\"model.iconColor\" (ngModelChange)=\"change.emit()\">\n <mat-option *ngFor=\"let c of paletteOptions\" [value]=\"c.value\">\n <span class=\"color-dot\" [style.background]=\"colorDotBackground?.(c.value)\"></span>{{ c.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n<div class=\"g gap-8\">\n <div *ngIf=\"isCustomColor?.(model.iconColor); else iconCustomBtn\">\n <pdx-color-picker label=\"Cor personalizada\" [format]=\"'hex'\" [(ngModel)]=\"model.iconColor\"\n (ngModelChange)=\"change.emit()\"></pdx-color-picker>\n </div>\n <ng-template #iconCustomBtn>\n <button mat-stroked-button type=\"button\" (click)=\"enableCustomColor?.(model, 'iconColor'); change.emit()\">\n Usar cor personalizada\n </button>\n </ng-template>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'praxis-meta-editor-image',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule],\n templateUrl: './meta-editor-image.component.html',\n})\nexport class PraxisMetaEditorImageComponent {\n @Input() model: any;\n @Output() change = new EventEmitter<void>();\n}\n","<div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\" class=\"col-span-2\">\n <mat-label>Alt da imagem</mat-label>\n <input matInput [(ngModel)]=\"model.imageAlt\" (ngModelChange)=\"change.emit()\" />\n </mat-form-field>\n</div>\n","import { produce } from 'immer';\nimport type { PraxisListConfig, TemplateDef } from '../models/list-config.model';\n\n/**\n * Infer templating slots (primary/secondary/trailing) from field names.\n * - Does not override existing primary if already defined.\n * - Heuristics prioritize Portuguese labels, then common English names.\n */\nexport function inferTemplatingFromSchema(cfg: PraxisListConfig, fieldNames: string[]): PraxisListConfig {\n const names = (fieldNames || []).filter(Boolean);\n if (!names.length) return cfg;\n const templ = cfg.templating || {};\n const needsPrimary = !templ.primary;\n if (!needsPrimary) return cfg; // respect user config\n\n const pickBy = (preds: RegExp[]): string | undefined =>\n names.find((n) => preds.some((p) => p.test(String(n)))) || undefined;\n\n const primaryName =\n pickBy([/nomeCompleto/i, /nome/i, /title/i, /name/i, /label/i]) || names[0];\n const secondaryName =\n names.find((n) => n !== primaryName && /(email|cpf|desc|resumo|cargo|departamento)/i.test(n)) ||\n names.find((n) => n !== primaryName);\n const trailingName = pickBy([/status/i, /tag/i, /state/i, /ativo/i]);\n\n const newCfg = produce(cfg, (draft) => {\n const t: any = { ...(draft.templating as any) };\n t.primary = makeText(primaryName);\n if (secondaryName) {\n t.secondary = makeText(secondaryName);\n draft.layout = draft.layout || ({} as any);\n const cur = Number((draft.layout as any).lines) || 1;\n (draft.layout as any).lines = Math.max(cur, 2) as any;\n }\n if (trailingName) {\n // Use meta for chips to align with current UI (right-side block renders meta).\n t.meta = makeChip(trailingName);\n }\n (draft as any).templating = t;\n });\n return newCfg;\n}\n\nfunction makeText(field: string): TemplateDef {\n return { type: 'text', expr: '${item.' + field + '}' } as any;\n}\nfunction makeChip(field: string): TemplateDef {\n return { type: 'chip', expr: '${item.' + field + '}' } as any;\n}\n","export const LIST_RUNTIME_COMPONENT_IDS = [\n 'account-identity',\n 'alert-summary',\n 'executive-alerts',\n 'praxis-executive-alerts',\n 'executive-owner',\n 'praxis-executive-owner',\n 'executive-badge',\n 'praxis-executive-badge',\n 'executive-trailing',\n 'owner-summary',\n] as const;\n\nexport type ListRuntimeComponentId =\n (typeof LIST_RUNTIME_COMPONENT_IDS)[number];\n\nexport function isSupportedListRuntimeComponentId(\n id: string | undefined,\n): id is ListRuntimeComponentId {\n return LIST_RUNTIME_COMPONENT_IDS.includes(\n id as ListRuntimeComponentId,\n );\n}\n\nexport function normalizeListRuntimeComponentId(\n id: string | undefined,\n): ListRuntimeComponentId | undefined {\n const normalized = String(id || '').trim();\n if (!normalized) return undefined;\n return isSupportedListRuntimeComponentId(normalized)\n ? normalized\n : undefined;\n}\n","import {\n PraxisListConfig,\n TemplateDef,\n TemplatingFeatureDef,\n} from './models/list-config.model';\nimport {\n EditorDiagnostic,\n ListApplyPlan,\n ListAuthoringDocument,\n ListProjectionContext,\n ListRuntimeContext,\n ListSchemaInferencePlan,\n ListValidationContext,\n} from './list-editor-document.model';\nimport { inferTemplatingFromSchema } from './utils/templating-inference';\nimport { normalizeListRuntimeComponentId } from './components/list-runtime-component.registry';\n\nconst DOCUMENT_KIND = 'praxis.list.editor';\nconst DOCUMENT_VERSION = 1;\nconst LAYOUT_VARIANTS = ['list', 'cards', 'tiles'] as const;\nconst LAYOUT_DENSITIES = ['default', 'comfortable', 'compact'] as const;\nconst LAYOUT_ITEM_SPACINGS = ['none', 'tight', 'default', 'relaxed'] as const;\nconst LAYOUT_DIVIDERS = ['none', 'between', 'all'] as const;\nconst LAYOUT_MODELS = ['standard', 'media', 'hotel'] as const;\nconst ROW_LAYOUT_SLOTS = [\n 'leading',\n 'primary',\n 'secondary',\n 'meta',\n 'trailing',\n 'identity',\n 'balance',\n 'limit',\n 'risk',\n 'alerts',\n 'owner',\n 'actions',\n 'expand',\n] as const;\nconst ROW_LAYOUT_TEMPLATE_SLOTS = [\n 'leading',\n 'primary',\n 'secondary',\n 'meta',\n 'trailing',\n 'identity',\n 'balance',\n 'limit',\n 'risk',\n 'alerts',\n 'owner',\n] as const;\nconst ROW_LAYOUT_SPECIAL_SLOTS = ['actions', 'expand'] as const;\nconst SELECTION_MODES = ['none', 'single', 'multiple'] as const;\nconst SELECTION_RETURNS = ['value', 'item', 'id'] as const;\nconst EXPAND_TRIGGERS = ['row', 'icon', 'row+icon'] as const;\nconst EXPAND_MODES = ['single', 'multiple'] as const;\nconst EXPAND_PLACEMENTS = ['expand', 'trailing'] as const;\nconst ACTION_PLACEMENTS = ['actions', 'trailing'] as const;\nconst EXPANSION_SECTION_TYPES = [\n 'info-list',\n 'chip-list',\n 'timeline',\n 'key-value',\n 'metadata',\n 'component',\n] as const;\nconst SKIN_TYPES = [\n 'pill-soft',\n 'gradient-tile',\n 'glass',\n 'elevated',\n 'outline',\n 'flat',\n 'neumorphism',\n 'custom',\n] as const;\nconst FEATURES_MODES = ['icons+labels', 'icons-only', 'labels-only'] as const;\n\nexport function createListAuthoringDocument(source: {\n config?: unknown;\n}): ListAuthoringDocument {\n return normalizeListAuthoringDocument({\n kind: DOCUMENT_KIND,\n version: DOCUMENT_VERSION,\n config: asListConfig(source?.config),\n });\n}\n\nexport function parseLegacyOrListDocument(raw: unknown): ListAuthoringDocument {\n const obj = asRecord(raw);\n\n if ('document' in obj) {\n return parseLegacyOrListDocument(obj.document);\n }\n\n if (obj.kind === DOCUMENT_KIND && obj.version === DOCUMENT_VERSION) {\n return normalizeListAuthoringDocument({\n kind: DOCUMENT_KIND,\n version: DOCUMENT_VERSION,\n config: asListConfig(obj.config),\n });\n }\n\n if (looksLikeLegacySettingsPayload(obj)) {\n return createListAuthoringDocument({ config: obj.config });\n }\n\n return createListAuthoringDocument({ config: raw });\n}\n\nexport function normalizeListAuthoringDocument(\n doc: ListAuthoringDocument,\n): ListAuthoringDocument {\n return {\n kind: DOCUMENT_KIND,\n version: DOCUMENT_VERSION,\n config: normalizeListConfig(doc?.config),\n };\n}\n\nexport function projectListAuthoringDocument(\n doc: ListAuthoringDocument,\n context?: ListProjectionContext,\n): ListAuthoringDocument {\n return inferListAuthoringDocument(\n normalizeListAuthoringDocument(doc),\n context,\n );\n}\n\nexport function inferListAuthoringDocument(\n doc: ListAuthoringDocument,\n context?: ListProjectionContext,\n): ListAuthoringDocument {\n const normalized = normalizeListAuthoringDocument(doc);\n if (\n normalized.config.dataSource?.resourcePath &&\n !normalized.config.templating?.primary &&\n (context?.schemaFieldNames || []).length\n ) {\n return normalizeListAuthoringDocument({\n ...normalized,\n config: inferTemplatingFromSchema(\n normalized.config,\n context?.schemaFieldNames || [],\n ),\n });\n }\n return normalized;\n}\n\nexport function normalizeListConfig(\n config: PraxisListConfig | undefined,\n): PraxisListConfig {\n const normalized = cloneJson(config || {});\n const out: PraxisListConfig = {\n ...normalized,\n dataSource: {\n data: Array.isArray(normalized.dataSource?.data)\n ? normalized.dataSource?.data\n : undefined,\n resourcePath: trimToUndefined(normalized.dataSource?.resourcePath),\n query: normalizeQuery(normalized.dataSource?.query),\n sort: normalizeSort(normalized.dataSource?.sort),\n },\n layout: {\n variant: oneOf(normalized.layout?.variant, LAYOUT_VARIANTS, 'list'),\n density: oneOf(normalized.layout?.density, LAYOUT_DENSITIES, 'default'),\n itemSpacing: oneOf(\n normalized.layout?.itemSpacing,\n LAYOUT_ITEM_SPACINGS,\n 'none',\n ),\n lines: normalizeLines(normalized.layout?.lines),\n dividers: oneOf(normalized.layout?.dividers, LAYOUT_DIVIDERS, 'between'),\n model: oneOf(normalized.layout?.model, LAYOUT_MODELS, 'standard'),\n groupBy: trimToUndefined(normalized.layout?.groupBy),\n stickySectionHeader: readBoolean(normalized.layout?.stickySectionHeader),\n virtualScroll: readBoolean(normalized.layout?.virtualScroll),\n pageSize: normalizePositiveNumber(normalized.layout?.pageSize),\n rowLayout: normalized.layout?.rowLayout\n ? stripUndefinedDeep({\n type: oneOf(\n normalized.layout.rowLayout.type,\n ['grid', 'flex'] as const,\n undefined,\n ),\n columns: Array.isArray(normalized.layout.rowLayout.columns)\n ? normalized.layout.rowLayout.columns.reduce<any[]>(\n (acc, col) => {\n const slot = oneOf(\n trimToUndefined(col?.slot),\n ROW_LAYOUT_SLOTS,\n undefined,\n );\n if (!slot) return acc;\n acc.push(\n stripUndefinedDeep({\n slot,\n width: trimToUndefined(col?.width),\n minWidth: trimToUndefined(col?.minWidth),\n maxWidth: trimToUndefined(col?.maxWidth),\n align: oneOf(\n col?.align,\n ['start', 'center', 'end'] as const,\n undefined,\n ),\n justify: oneOf(\n col?.justify,\n ['start', 'center', 'end', 'stretch'] as const,\n undefined,\n ),\n class: trimToUndefined(col?.class),\n style: trimToUndefined(col?.style),\n }),\n );\n return acc;\n },\n [],\n )\n : undefined,\n gap: trimToUndefined(normalized.layout.rowLayout.gap),\n align: oneOf(\n normalized.layout.rowLayout.align,\n ['start', 'center', 'end', 'stretch'] as const,\n oneOf(\n (normalized.layout.rowLayout as any).itemAlignY,\n ['start', 'center', 'end', 'stretch'] as const,\n undefined,\n ),\n ),\n itemAlignY: oneOf(\n (normalized.layout.rowLayout as any).itemAlignY,\n ['start', 'center', 'end', 'stretch'] as const,\n undefined,\n ),\n class: trimToUndefined(normalized.layout.rowLayout.class),\n style: trimToUndefined(normalized.layout.rowLayout.style),\n })\n : undefined,\n },\n selection: {\n mode: oneOf(normalized.selection?.mode, SELECTION_MODES, 'none'),\n formControlName: trimToUndefined(normalized.selection?.formControlName),\n formControlPath: trimToUndefined(normalized.selection?.formControlPath),\n compareBy: trimToUndefined(normalized.selection?.compareBy),\n return: oneOf(normalized.selection?.return, SELECTION_RETURNS, 'value'),\n },\n interaction: normalizeInteraction(\n normalized.interaction,\n normalized.selection,\n ),\n skin: {\n type: oneOf(normalized.skin?.type, SKIN_TYPES, 'elevated'),\n gradient: {\n from: trimToEmpty(normalized.skin?.gradient?.from),\n to: trimToEmpty(normalized.skin?.gradient?.to),\n angle: normalizeAngle(normalized.skin?.gradient?.angle),\n },\n radius: trimToUndefined(normalized.skin?.radius),\n shadow: trimToUndefined(normalized.skin?.shadow),\n border: trimToUndefined(normalized.skin?.border),\n backdropBlur: trimToUndefined(normalized.skin?.backdropBlur),\n class: trimToUndefined(normalized.skin?.class),\n inlineStyle: trimToUndefined(normalized.skin?.inlineStyle),\n },\n templating: normalizeTemplating(normalized.templating),\n rules: normalizeRules(normalized.rules),\n expansion: normalizeExpansion(normalized.expansion),\n actions: normalizeListActionPayloads(normalized.actions),\n i18n: normalizeRecord(normalized.i18n),\n ui: normalizeUi(normalized.ui),\n a11y: normalizeA11y(normalized.a11y),\n events: normalizeRecord(normalized.events),\n };\n\n return stripUndefinedDeep(out);\n}\n\nexport function normalizeListActionPayloads(\n actions: PraxisListConfig['actions'],\n): PraxisListConfig['actions'] {\n if (!Array.isArray(actions)) return undefined;\n return actions.map((action) => {\n if (!action || typeof action !== 'object') return action;\n const next = cloneJson(action);\n if (typeof next.globalPayload === 'string') {\n const trimmed = next.globalPayload.trim();\n if (!trimmed) {\n next.globalPayload = undefined;\n } else if (looksLikeJsonPayload(trimmed)) {\n try {\n next.globalPayload = JSON.parse(trimmed);\n } catch {\n next.globalPayload = trimmed;\n }\n } else {\n next.globalPayload = trimmed;\n }\n }\n next.placement = oneOf(next.placement, ACTION_PLACEMENTS, undefined);\n return stripUndefinedDeep(next);\n });\n}\n\nexport function validateListAuthoringDocument(\n doc: ListAuthoringDocument,\n context?: ListValidationContext,\n): EditorDiagnostic[] {\n const diagnostics: EditorDiagnostic[] = [];\n const raw = asRecord(doc);\n const rawConfig = asRecord(raw.config);\n const normalized = normalizeListAuthoringDocument(doc);\n const config = normalized.config;\n const rawLayout = asRecord(rawConfig.layout);\n const rawSelection = asRecord(rawConfig.selection);\n const rawInteraction = asRecord(rawConfig.interaction);\n const rawExpansion = asRecord(rawConfig.expansion);\n const rawSkin = asRecord(rawConfig.skin);\n\n if ('actions' in rawConfig && !Array.isArray(rawConfig.actions)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.config.actions.invalid',\n 'config.actions must be an array',\n 'config.actions',\n ),\n );\n }\n\n (rawConfig.actions as unknown[] | undefined)?.forEach((action, index) => {\n const rawAction = asRecord(action);\n validateRawEnum(\n diagnostics,\n rawAction.placement,\n ACTION_PLACEMENTS,\n 'list.actions.placement.invalid',\n 'config.actions[].placement must be actions or trailing',\n `config.actions[${index}].placement`,\n );\n });\n\n validateRawEnum(\n diagnostics,\n rawLayout.variant,\n LAYOUT_VARIANTS,\n 'list.layout.variant.invalid',\n 'config.layout.variant must be list, cards or tiles',\n 'config.layout.variant',\n );\n validateRawEnum(\n diagnostics,\n rawLayout.density,\n LAYOUT_DENSITIES,\n 'list.layout.density.invalid',\n 'config.layout.density must be default, comfortable or compact',\n 'config.layout.density',\n );\n validateRawEnum(\n diagnostics,\n rawLayout.itemSpacing,\n LAYOUT_ITEM_SPACINGS,\n 'list.layout.itemSpacing.invalid',\n 'config.layout.itemSpacing must be none, tight, default or relaxed',\n 'config.layout.itemSpacing',\n );\n validateRawEnum(\n diagnostics,\n rawLayout.dividers,\n LAYOUT_DIVIDERS,\n 'list.layout.dividers.invalid',\n 'config.layout.dividers must be none, between or all',\n 'config.layout.dividers',\n );\n validateRawEnum(\n diagnostics,\n rawLayout.model,\n LAYOUT_MODELS,\n 'list.layout.model.invalid',\n 'config.layout.model must be standard, media or hotel',\n 'config.layout.model',\n );\n validateRawEnum(\n diagnostics,\n rawSelection.mode,\n SELECTION_MODES,\n 'list.selection.mode.invalid',\n 'config.selection.mode must be none, single or multiple',\n 'config.selection.mode',\n );\n validateRawEnum(\n diagnostics,\n rawSelection.return,\n SELECTION_RETURNS,\n 'list.selection.return.invalid',\n 'config.selection.return must be value, item or id',\n 'config.selection.return',\n );\n validateRawEnum(\n diagnostics,\n rawInteraction.expandTrigger,\n EXPAND_TRIGGERS,\n 'list.interaction.expandTrigger.invalid',\n 'config.interaction.expandTrigger must be row, icon or row+icon',\n 'config.interaction.expandTrigger',\n );\n validateRawEnum(\n diagnostics,\n rawInteraction.expandMode,\n EXPAND_MODES,\n 'list.interaction.expandMode.invalid',\n 'config.interaction.expandMode must be single or multiple',\n 'config.interaction.expandMode',\n );\n validateRawEnum(\n diagnostics,\n rawInteraction.expandPlacement,\n EXPAND_PLACEMENTS,\n 'list.interaction.expandPlacement.invalid',\n 'config.interaction.expandPlacement must be expand or trailing',\n 'config.interaction.expandPlacement',\n );\n validateRawEnum(\n diagnostics,\n rawSkin.type,\n SKIN_TYPES,\n 'list.skin.type.invalid',\n 'config.skin.type is invalid',\n 'config.skin.type',\n );\n validateRawRowLayout(diagnostics, rawLayout, config);\n validatePlacementReachability(diagnostics, config);\n\n if ('dataSource' in rawConfig) {\n const rawDataSource = asRecord(rawConfig.dataSource);\n if (\n 'query' in rawDataSource &&\n rawDataSource.query !== undefined &&\n (rawDataSource.query === null ||\n typeof rawDataSource.query !== 'object' ||\n Array.isArray(rawDataSource.query))\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'list.dataSource.query.invalid',\n 'config.dataSource.query must be an object',\n 'config.dataSource.query',\n ),\n );\n }\n }\n\n if ('lines' in rawLayout && ![1, 2, 3].includes(Number(rawLayout.lines))) {\n diagnostics.push(\n errorDiagnostic(\n 'list.layout.lines.invalid',\n 'config.layout.lines must be 1, 2 or 3',\n 'config.layout.lines',\n ),\n );\n }\n\n if (\n 'pageSize' in rawLayout &&\n rawLayout.pageSize !== undefined &&\n (!Number.isFinite(Number(rawLayout.pageSize)) ||\n Number(rawLayout.pageSize) < 1)\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'list.layout.pageSize.invalid',\n 'config.layout.pageSize must be a positive number',\n 'config.layout.pageSize',\n ),\n );\n }\n\n const schemaFields = new Set(context?.schemaFieldNames || []);\n const sort = config.dataSource?.sort?.[0];\n const sortField = trimToUndefined(sort?.split(',')[0]);\n if (sortField && schemaFields.size && !schemaFields.has(sortField)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.dataSource.sort.field.unknown',\n 'config.dataSource.sort references an unknown schema field',\n 'config.dataSource.sort[0]',\n ),\n );\n }\n\n const compareBy = trimToUndefined(config.selection?.compareBy);\n if (compareBy && schemaFields.size && !schemaFields.has(compareBy)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.selection.compareBy.unknown',\n 'config.selection.compareBy references an unknown schema field',\n 'config.selection.compareBy',\n ),\n );\n }\n\n const sortOptions = config.ui?.sortOptions || [];\n const seenSortOptions = new Set<string>();\n sortOptions.forEach((option, index) => {\n const value =\n typeof option === 'string' ? option : trimToUndefined(option?.value);\n if (!value) return;\n if (seenSortOptions.has(value)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.ui.sortOptions.duplicate',\n 'config.ui.sortOptions contains duplicated values',\n `config.ui.sortOptions[${index}]`,\n ),\n );\n }\n seenSortOptions.add(value);\n });\n\n (rawConfig.actions as unknown[] | undefined)?.forEach((action, index) => {\n const rawAction = asRecord(action);\n const id = trimToUndefined(rawAction.id);\n if (!id) {\n diagnostics.push(\n errorDiagnostic(\n 'list.actions.id.required',\n 'Action id is required',\n `config.actions[${index}].id`,\n ),\n );\n }\n const payload = rawAction.globalPayload;\n if (typeof payload === 'string' && looksLikeJsonPayload(payload.trim())) {\n try {\n JSON.parse(payload);\n } catch {\n diagnostics.push(\n errorDiagnostic(\n 'list.actions.globalPayload.invalid-json',\n 'Action globalPayload contains invalid JSON',\n `config.actions[${index}].globalPayload`,\n ),\n );\n }\n }\n });\n\n validateRawTemplating(\n diagnostics,\n asRecord(rawConfig.templating),\n 'config.templating',\n );\n validateRawRules(diagnostics, asRecord(rawConfig.rules), 'config.rules');\n validateRawExpansion(diagnostics, rawExpansion, 'config.expansion');\n\n if (config.interaction?.expandable) {\n if (config.layout?.variant !== 'list') {\n diagnostics.push(\n errorDiagnostic(\n 'list.interaction.expandable.variant.unsupported',\n 'config.interaction.expandable currently supports only config.layout.variant = list',\n 'config.interaction.expandable',\n ),\n );\n }\n\n if ((config.expansion?.sections?.length || 0) === 0) {\n diagnostics.push(\n errorDiagnostic(\n 'list.expansion.sections.required',\n 'config.expansion.sections is required when config.interaction.expandable is true',\n 'config.expansion.sections',\n ),\n );\n }\n\n if (\n (config.selection?.mode || 'none') !== 'none' &&\n ['row', 'row+icon'].includes(config.interaction?.expandTrigger || '')\n ) {\n diagnostics.push(\n warningDiagnostic(\n 'list.interaction.expandTrigger.selection.coerced-icon',\n 'When selection is enabled, config.interaction.expandTrigger is coerced to icon to avoid row click ambiguity',\n 'config.interaction.expandTrigger',\n ),\n );\n }\n }\n\n if (\n config.dataSource?.resourcePath &&\n !config.templating?.primary &&\n !(context?.schemaFieldNames || []).length\n ) {\n diagnostics.push(\n infoDiagnostic(\n 'list.templating.schema-inference.pending',\n 'Schema inference is pending because no schema fields were provided in context',\n 'config.templating.primary',\n ),\n );\n }\n\n return diagnostics;\n}\n\nexport function toCanonicalListConfig(\n doc: ListAuthoringDocument,\n context?: ListProjectionContext,\n): PraxisListConfig {\n const projected = projectListAuthoringDocument(doc, context);\n return normalizeListConfig(projected.config);\n}\n\nexport function buildListApplyPlan(\n doc: ListAuthoringDocument,\n runtime?: ListRuntimeContext,\n options?: {\n saveConfig?: boolean;\n },\n): ListApplyPlan {\n const normalized = normalizeListAuthoringDocument(doc);\n const diagnostics = validateListAuthoringDocument(normalized, {\n schemaFieldNames: runtime?.schemaFieldNames,\n });\n const canonicalDocument = projectListAuthoringDocument(normalized, {\n schemaFieldNames: runtime?.schemaFieldNames,\n });\n const canonicalConfig = toCanonicalListConfig(canonicalDocument, {\n schemaFieldNames: runtime?.schemaFieldNames,\n });\n const diff: NonNullable<ListApplyPlan['diff']> =\n deriveConfigDiff(canonicalConfig, runtime?.currentConfig) || {};\n const schemaInference = buildSchemaInferencePlan(\n normalized,\n canonicalDocument,\n diff,\n runtime,\n );\n\n return {\n canonicalDocument,\n canonicalConfig,\n persistence: {\n saveConfig: options?.saveConfig === true,\n },\n runtime: {\n applyConfig: true,\n rebindSelection: diff.selectionChanged || !runtime?.currentConfig,\n reapplySkin: diff.skinChanged || !runtime?.currentConfig,\n schemaInference,\n markForCheck: true,\n },\n diff,\n diagnostics,\n };\n}\n\nexport function serializeListAuthoringDocument(\n doc: ListAuthoringDocument,\n): unknown {\n const normalized = normalizeListAuthoringDocument(doc);\n return stripUndefinedDeep({\n kind: DOCUMENT_KIND,\n version: DOCUMENT_VERSION,\n config: normalized.config,\n });\n}\n\nfunction buildSchemaInferencePlan(\n sourceDocument: ListAuthoringDocument,\n canonicalDocument: ListAuthoringDocument,\n diff: NonNullable<ListApplyPlan['diff']>,\n runtime?: ListRuntimeContext,\n): ListSchemaInferencePlan | undefined {\n if (\n !diff.schemaInferenceRequested ||\n (runtime?.schemaFieldNames || []).length\n ) {\n return undefined;\n }\n\n const resourcePath = canonicalDocument.config.dataSource?.resourcePath;\n if (!resourcePath) return undefined;\n\n return {\n resourcePath,\n sourceDocument,\n targetDocument: canonicalDocument,\n };\n}\n\nfunction validateRawTemplating(\n diagnostics: EditorDiagnostic[],\n templating: Record<string, any>,\n basePath: string,\n): void {\n if (!Object.keys(templating).length) return;\n\n validateRawEnum(\n diagnostics,\n templating.metaPlacement,\n ['side', 'line'] as const,\n 'list.templating.metaPlacement.invalid',\n 'config.templating.metaPlacement must be side or line',\n `${basePath}.metaPlacement`,\n );\n validateRawEnum(\n diagnostics,\n templating.statusPosition,\n ['inline', 'top-right'] as const,\n 'list.templating.statusPosition.invalid',\n 'config.templating.statusPosition must be inline or top-right',\n `${basePath}.statusPosition`,\n );\n validateRawEnum(\n diagnostics,\n templating.featuresMode,\n FEATURES_MODES,\n 'list.templating.featuresMode.invalid',\n 'config.templating.featuresMode must be icons+labels, icons-only or labels-only',\n `${basePath}.featuresMode`,\n );\n\n [\n 'leading',\n 'primary',\n 'secondary',\n 'meta',\n 'trailing',\n 'identity',\n 'balance',\n 'limit',\n 'risk',\n 'alerts',\n 'owner',\n 'sectionHeader',\n 'emptyState',\n ].forEach((slot) => {\n validateRawTemplateDef(\n diagnostics,\n asRecord(templating[slot]),\n `${basePath}.${slot}`,\n );\n });\n}\n\nfunction validateRawRules(\n diagnostics: EditorDiagnostic[],\n rules: Record<string, any>,\n basePath: string,\n): void {\n if (!Object.keys(rules).length) return;\n\n (rules.itemStyles as unknown[] | undefined)?.forEach((rule, index) => {\n const rawRule = asRecord(rule);\n if (!trimToUndefined(rawRule.id)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.rules.itemStyles.id.required',\n 'config.rules.itemStyles[].id is required',\n `${basePath}.itemStyles[${index}].id`,\n ),\n );\n }\n });\n\n (rules.slotOverrides as unknown[] | undefined)?.forEach((override, index) => {\n const rawOverride = asRecord(override);\n if (!trimToUndefined(rawOverride.id)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.rules.slotOverrides.id.required',\n 'config.rules.slotOverrides[].id is required',\n `${basePath}.slotOverrides[${index}].id`,\n ),\n );\n }\n\n validateRawEnum(\n diagnostics,\n rawOverride.slot,\n ROW_LAYOUT_TEMPLATE_SLOTS,\n 'list.rules.slotOverrides.slot.unsupported',\n 'config.rules.slotOverrides[].slot must be leading, primary, secondary, meta, trailing, identity, balance, limit, risk, alerts or owner',\n `${basePath}.slotOverrides[${index}].slot`,\n );\n\n validateRawTemplateDef(\n diagnostics,\n asRecord(rawOverride.template),\n `${basePath}.slotOverrides[${index}].template`,\n );\n });\n}\n\nfunction validateRawRowLayout(\n diagnostics: EditorDiagnostic[],\n rawLayout: Record<string, any>,\n config: PraxisListConfig,\n): void {\n const rawRowLayout = asRecord(rawLayout.rowLayout);\n if (!Object.keys(rawRowLayout).length) return;\n\n validateRawEnum(\n diagnostics,\n rawRowLayout.type,\n ['grid', 'flex'] as const,\n 'list.layout.rowLayout.type.invalid',\n 'config.layout.rowLayout.type must be grid or flex',\n 'config.layout.rowLayout.type',\n );\n validateRawEnum(\n diagnostics,\n rawRowLayout.align,\n ['start', 'center', 'end', 'stretch'] as const,\n 'list.layout.rowLayout.align.invalid',\n 'config.layout.rowLayout.align must be start, center, end or stretch',\n 'config.layout.rowLayout.align',\n );\n validateRawEnum(\n diagnostics,\n rawRowLayout.itemAlignY,\n ['start', 'center', 'end', 'stretch'] as const,\n 'list.layout.rowLayout.itemAlignY.invalid',\n 'config.layout.rowLayout.itemAlignY must be start, center, end or stretch',\n 'config.layout.rowLayout.itemAlignY',\n );\n\n if ('columns' in rawRowLayout && !Array.isArray(rawRowLayout.columns)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.layout.rowLayout.columns.invalid',\n 'config.layout.rowLayout.columns must be an array',\n 'config.layout.rowLayout.columns',\n ),\n );\n return;\n }\n\n (rawRowLayout.columns as unknown[] | undefined)?.forEach((column, index) => {\n const rawColumn = asRecord(column);\n const slot = trimToUndefined(rawColumn.slot);\n\n if (!slot) {\n diagnostics.push(\n errorDiagnostic(\n 'list.layout.rowLayout.columns.slot.required',\n 'config.layout.rowLayout.columns[].slot is required',\n `config.layout.rowLayout.columns[${index}].slot`,\n ),\n );\n return;\n }\n\n if (!ROW_LAYOUT_SLOTS.includes(slot as (typeof ROW_LAYOUT_SLOTS)[number])) {\n diagnostics.push(\n errorDiagnostic(\n 'list.layout.rowLayout.columns.slot.unsupported',\n 'config.layout.rowLayout.columns[].slot must be leading, primary, secondary, meta, trailing, identity, balance, limit, risk, alerts, owner, actions or expand',\n `config.layout.rowLayout.columns[${index}].slot`,\n ),\n );\n }\n });\n\n const normalizedColumns = config.layout?.rowLayout?.columns || [];\n const hasTrailing = normalizedColumns.some((column) => column.slot === 'trailing');\n const hasActionsSlot = normalizedColumns.some((column) => column.slot === 'actions');\n const hasExpandSlot = normalizedColumns.some((column) => column.slot === 'expand');\n const hasActions = (config.actions?.length || 0) > 0;\n const explicitActionPlacements = new Set(\n (config.actions || [])\n .map((action) => action.placement)\n .filter((placement): placement is 'actions' | 'trailing' => !!placement),\n );\n const expandPlacement = config.interaction?.expandPlacement;\n const rowLayoutActive =\n (config.layout?.variant || 'list') === 'list' && normalizedColumns.length > 0;\n\n if (hasActions && explicitActionPlacements.has('actions') && rowLayoutActive && !hasActionsSlot) {\n diagnostics.push(\n warningDiagnostic(\n 'list.layout.rowLayout.actions.placement.unreachable',\n 'config.actions contains placement=\"actions\" but config.layout.rowLayout has no actions column',\n 'config.layout.rowLayout.columns',\n ),\n );\n }\n\n if (!rowLayoutActive) return;\n\n if (hasActions && explicitActionPlacements.has('trailing') && !hasTrailing) {\n diagnostics.push(\n warningDiagnostic(\n 'list.layout.rowLayout.trailing.actions.placement.unreachable',\n 'config.actions contains placement=\"trailing\" but config.layout.rowLayout has no trailing column',\n 'config.layout.rowLayout.columns',\n ),\n );\n }\n\n if (\n hasActions &&\n explicitActionPlacements.size === 0 &&\n !hasTrailing &&\n !hasActionsSlot\n ) {\n diagnostics.push(\n warningDiagnostic(\n 'list.layout.rowLayout.trailing.actions.unreachable',\n 'config.layout.rowLayout is missing a trailing or actions column, so config.actions will not render at runtime',\n 'config.layout.rowLayout.columns',\n ),\n );\n }\n\n if (config.interaction?.expandable && expandPlacement === 'expand' && !hasExpandSlot) {\n diagnostics.push(\n warningDiagnostic(\n 'list.layout.rowLayout.expand.placement.unreachable',\n 'config.interaction.expandPlacement is \"expand\" but config.layout.rowLayout has no expand column',\n 'config.layout.rowLayout.columns',\n ),\n );\n }\n\n if (\n config.interaction?.expandable &&\n expandPlacement === 'trailing' &&\n !hasTrailing\n ) {\n diagnostics.push(\n warningDiagnostic(\n 'list.layout.rowLayout.trailing.expansion.placement.unreachable',\n 'config.interaction.expandPlacement is \"trailing\" but config.layout.rowLayout has no trailing column',\n 'config.layout.rowLayout.columns',\n ),\n );\n }\n\n if (\n config.interaction?.expandable &&\n !expandPlacement &&\n !hasTrailing &&\n !hasExpandSlot\n ) {\n diagnostics.push(\n warningDiagnostic(\n 'list.layout.rowLayout.trailing.expansion.unreachable',\n 'config.layout.rowLayout is missing a trailing or expand column, so the expansion toggle will not render at runtime',\n 'config.layout.rowLayout.columns',\n ),\n );\n }\n\n normalizedColumns.forEach((column, index) => {\n if (\n ROW_LAYOUT_SPECIAL_SLOTS.includes(\n column.slot as (typeof ROW_LAYOUT_SPECIAL_SLOTS)[number],\n )\n ) {\n return;\n }\n\n if (hasTemplateRuntimeSource(config, column.slot)) {\n return;\n }\n\n diagnostics.push(\n warningDiagnostic(\n 'list.layout.rowLayout.columns.slot.template.missing',\n `config.layout.rowLayout.columns[${index}].slot references \"${column.slot}\" but no matching templating or slotOverride template is configured`,\n `config.layout.rowLayout.columns[${index}].slot`,\n ),\n );\n });\n}\n\nfunction validatePlacementReachability(\n diagnostics: EditorDiagnostic[],\n config: PraxisListConfig,\n): void {\n const normalizedColumns = config.layout?.rowLayout?.columns || [];\n const listVariant = (config.layout?.variant || 'list') === 'list';\n const rowLayoutActive = listVariant && normalizedColumns.length > 0;\n const explicitActionPlacements = new Set(\n (config.actions || [])\n .map((action) => action.placement)\n .filter((placement): placement is 'actions' | 'trailing' => !!placement),\n );\n\n if (explicitActionPlacements.has('actions') && !rowLayoutActive) {\n diagnostics.push(\n warningDiagnostic(\n 'list.actions.placement.unreachable',\n 'config.actions contains placement=\"actions\" but actions placement is only reachable on list variant with an active rowLayout actions column',\n 'config.actions',\n ),\n );\n }\n\n if (\n config.interaction?.expandable &&\n config.interaction.expandPlacement === 'expand' &&\n !rowLayoutActive\n ) {\n diagnostics.push(\n warningDiagnostic(\n 'list.interaction.expandPlacement.unreachable',\n 'config.interaction.expandPlacement is \"expand\" but expand placement is only reachable on list variant with an active rowLayout expand column',\n 'config.interaction.expandPlacement',\n ),\n );\n }\n}\n\nfunction hasTemplateRuntimeSource(\n config: PraxisListConfig,\n slot: string,\n): boolean {\n const templating = config.templating as Record<string, any> | undefined;\n if (templating?.[slot]) return true;\n\n return (config.rules?.slotOverrides || []).some(\n (override) => override.slot === slot && !!override.template,\n );\n}\n\nfunction validateRawTemplateDef(\n diagnostics: EditorDiagnostic[],\n template: Record<string, any>,\n path: string,\n): void {\n if (!Object.keys(template).length) return;\n\n validateRawEnum(\n diagnostics,\n template.variant,\n ['filled', 'outlined'] as const,\n 'list.templating.template.variant.invalid',\n `${path}.variant must be filled or outlined`,\n `${path}.variant`,\n );\n\n if ('type' in template && trimToUndefined(template.type) === 'image') {\n const expr = trimToUndefined(template.expr);\n if (expr && !isAcceptedImageUrl(expr)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.templating.template.image.expr.invalid',\n `${path}.expr must be a URL, asset path or template expression when type is image`,\n `${path}.expr`,\n ),\n );\n }\n }\n\n const badge = asRecord(template.badge);\n if (Object.keys(badge).length) {\n validateRawEnum(\n diagnostics,\n badge.variant,\n ['filled', 'outlined'] as const,\n 'list.templating.template.badge.variant.invalid',\n `${path}.badge.variant must be filled or outlined`,\n `${path}.badge.variant`,\n );\n }\n\n const rating = asRecord(asRecord(template.props).rating);\n if ('size' in rating && rating.size !== undefined) {\n const size = Number(rating.size);\n if (!Number.isFinite(size) || size < 10 || size > 32) {\n diagnostics.push(\n errorDiagnostic(\n 'list.templating.template.rating.size.invalid',\n `${path}.props.rating.size must be between 10 and 32`,\n `${path}.props.rating.size`,\n ),\n );\n }\n }\n if ('max' in rating && rating.max !== undefined) {\n const max = Number(rating.max);\n if (!Number.isFinite(max) || max < 1 || max > 10) {\n diagnostics.push(\n errorDiagnostic(\n 'list.templating.template.rating.max.invalid',\n `${path}.props.rating.max must be between 1 and 10`,\n `${path}.props.rating.max`,\n ),\n );\n }\n }\n\n const compose = asRecord(asRecord(template.props).compose);\n const composeChildren = Array.isArray(compose.items)\n ? compose.items\n : Array.isArray(compose.nodes)\n ? compose.nodes\n : [];\n composeChildren.forEach((child, index) => {\n const childPath = Array.isArray(compose.items)\n ? `${path}.props.compose.items[${index}]`\n : `${path}.props.compose.nodes[${index}]`;\n const childTemplate = asRecord(child);\n validateRawTemplateDef(diagnostics, childTemplate, childPath);\n });\n\n const component = asRecord(asRecord(template.props).component);\n const componentId = trimToUndefined(component.id);\n if (\n trimToUndefined(template.type) === 'component' &&\n componentId &&\n !normalizeListRuntimeComponentId(componentId)\n ) {\n diagnostics.push(\n warningDiagnostic(\n 'list.templating.template.component.id.unsupported',\n `component id \"${componentId}\" is not supported by the closed praxis-list runtime registry`,\n `${path}.props.component.id`,\n ),\n );\n }\n}\n\nfunction normalizeTemplating(\n templating: PraxisListConfig['templating'],\n): PraxisListConfig['templating'] {\n if (!templating || typeof templating !== 'object') {\n return {\n skeleton: { count: 3 },\n };\n }\n\n const features = Array.isArray(templating.features)\n ? templating.features\n .map((feature) => normalizeTemplatingFeature(feature))\n .filter((feature): feature is TemplatingFeatureDef => !!feature)\n : undefined;\n\n return stripUndefinedDeep({\n ...templating,\n leading: normalizeTemplateDef(templating.leading),\n primary: normalizeTemplateDef(templating.primary),\n secondary: normalizeTemplateDef(templating.secondary),\n meta: normalizeTemplateDef(templating.meta),\n trailing: normalizeTemplateDef(templating.trailing),\n identity: normalizeTemplateDef(templating.identity),\n balance: normalizeTemplateDef(templating.balance),\n limit: normalizeTemplateDef(templating.limit),\n risk: normalizeTemplateDef(templating.risk),\n alerts: normalizeTemplateDef(templating.alerts),\n owner: normalizeTemplateDef(templating.owner),\n sectionHeader: normalizeTemplateDef(templating.sectionHeader),\n emptyState: normalizeTemplateDef(templating.emptyState),\n metaPlacement: oneOf(\n templating.metaPlacement,\n ['side', 'line'] as const,\n undefined,\n ),\n metaPrefixIcon: trimToUndefined(templating.metaPrefixIcon),\n statusPosition: oneOf(\n templating.statusPosition,\n ['inline', 'top-right'] as const,\n undefined,\n ),\n chipColorMap: normalizeRecord(templating.chipColorMap),\n chipLabelMap: normalizeRecord(templating.chipLabelMap),\n iconColorMap: normalizeRecord(templating.iconColorMap),\n features,\n featuresVisible: readBoolean(templating.featuresVisible),\n featuresMode: oneOf(\n templating.featuresMode,\n FEATURES_MODES,\n features?.length ? 'icons+labels' : undefined,\n ),\n skeleton: {\n count: normalizePositiveNumber(templating.skeleton?.count) ?? 3,\n },\n });\n}\n\nfunction normalizeInteraction(\n interaction: PraxisListConfig['interaction'],\n selection: PraxisListConfig['selection'],\n): PraxisListConfig['interaction'] {\n const expandable = readBoolean(interaction?.expandable);\n if (expandable !== true && !interaction) {\n return undefined;\n }\n const selectionEnabled = (selection?.mode || 'none') !== 'none';\n const requestedTrigger = oneOf(\n interaction?.expandTrigger,\n EXPAND_TRIGGERS,\n undefined,\n );\n const expandTrigger = expandable\n ? selectionEnabled\n ? 'icon'\n : requestedTrigger || 'row+icon'\n : undefined;\n const expandMode = expandable\n ? oneOf(interaction?.expandMode, EXPAND_MODES, 'single')\n : undefined;\n const expandPlacement = expandable\n ? oneOf(interaction?.expandPlacement, EXPAND_PLACEMENTS, undefined)\n : undefined;\n\n return stripUndefinedDeep({\n expandable,\n expandTrigger,\n expandMode,\n expandPlacement,\n });\n}\n\nfunction normalizeRules(\n rules: PraxisListConfig['rules'],\n): PraxisListConfig['rules'] {\n if (!rules || typeof rules !== 'object') return undefined;\n\n return stripUndefinedDeep({\n itemStyles: Array.isArray(rules.itemStyles)\n ? rules.itemStyles.map((rule) =>\n stripUndefinedDeep({\n id: trimToEmpty(rule?.id),\n condition: trimToUndefined(rule?.condition),\n class: trimToUndefined(rule?.class),\n style: trimToUndefined(rule?.style),\n border: trimToUndefined(rule?.border),\n background: trimToUndefined(rule?.background),\n }),\n ).filter((rule) => rule.id)\n : undefined,\n slotOverrides: Array.isArray(rules.slotOverrides)\n ? rules.slotOverrides.reduce<any[]>((acc, override) => {\n const id = trimToEmpty(override?.id);\n const slot = oneOf(\n trimToUndefined(override?.slot),\n ROW_LAYOUT_TEMPLATE_SLOTS,\n undefined,\n );\n if (!id || !slot) return acc;\n acc.push(\n stripUndefinedDeep({\n id,\n slot,\n condition: trimToUndefined(override?.condition),\n template: normalizeTemplateDef(override?.template),\n class: trimToUndefined(override?.class),\n style: trimToUndefined(override?.style),\n hide: readBoolean(override?.hide),\n }),\n );\n return acc;\n }, [])\n : undefined,\n });\n}\n\nfunction normalizeExpansion(\n expansion: PraxisListConfig['expansion'],\n): PraxisListConfig['expansion'] {\n const sections = Array.isArray(expansion?.sections)\n ? expansion.sections.reduce<\n NonNullable<NonNullable<PraxisListConfig['expansion']>['sections']>\n >((acc, section) => {\n const type = oneOf(section?.type, EXPANSION_SECTION_TYPES, undefined);\n const id = trimToUndefined(section?.id);\n\n if (!id || !type) return acc;\n\n const normalizedSection = stripUndefinedDeep({\n id,\n title: trimToUndefined(section?.title),\n type,\n itemsExpr: trimToUndefined(section?.itemsExpr),\n emptyLabel: trimToUndefined(section?.emptyLabel),\n metadata: section?.metadata\n ? stripUndefinedDeep({\n orientation: oneOf(\n section.metadata.orientation,\n ['horizontal', 'vertical'] as const,\n undefined,\n ),\n columns: normalizeExpansionColumns(section.metadata.columns),\n gap: trimToUndefined(section.metadata.gap),\n keyClass: trimToUndefined(section.metadata.keyClass),\n valueClass: trimToUndefined(section.metadata.valueClass),\n keyStyle: trimToUndefined(section.metadata.keyStyle),\n valueStyle: trimToUndefined(section.metadata.valueStyle),\n })\n : undefined,\n component: section?.component\n ? stripUndefinedDeep({\n id: trimToEmpty(section.component.id),\n inputs: normalizeRecord(section.component.inputs),\n class: trimToUndefined(section.component.class),\n style: trimToUndefined(section.component.style),\n })\n : undefined,\n class: trimToUndefined(section?.class),\n style: trimToUndefined(section?.style),\n showIf: trimToUndefined(section?.showIf),\n });\n\n // For metadata/component types, itemsExpr is optional\n if (type === 'metadata' || type === 'component') {\n acc.push(normalizedSection as any);\n } else if (normalizedSection.itemsExpr) {\n acc.push(normalizedSection as any);\n }\n\n return acc;\n }, [])\n : undefined;\n\n return stripUndefinedDeep({\n sections,\n dataSource: expansion?.dataSource\n ? stripUndefinedDeep({\n mode: oneOf(\n expansion.dataSource.mode,\n ['inline', 'resource', 'resourcePath'] as const,\n 'inline',\n ),\n resource: normalizeExpansionResource(expansion.dataSource.resource),\n resourcePath: normalizeExpansionResourcePath(\n expansion.dataSource.resourcePath,\n (expansion.dataSource as any).paramsMap,\n ),\n resourceAllowList: Array.isArray(expansion.dataSource.resourceAllowList)\n ? expansion.dataSource.resourceAllowList\n .map((path) => trimToUndefined(path))\n .filter((path): path is string => !!path)\n : undefined,\n fallbackMode: oneOf(\n expansion.dataSource.fallbackMode,\n ['none', 'inline', 'resource'] as const,\n undefined,\n ),\n cache: normalizeExpansionCache(expansion.dataSource.cache),\n cancelOnCollapse: readBoolean(expansion.dataSource.cancelOnCollapse),\n })\n : undefined,\n schemaContract: expansion?.schemaContract\n ? stripUndefinedDeep({\n kind: 'praxis.detail.schema',\n version: trimToUndefined(expansion.schemaContract.version) || '1.0.0',\n allowedNodes: Array.isArray(expansion.schemaContract.allowedNodes)\n ? expansion.schemaContract.allowedNodes\n .map((node) => oneOf(node, EXPANSION_SECTION_TYPES, undefined))\n .filter(\n (\n node,\n ): node is NonNullable<\n NonNullable<\n NonNullable<\n PraxisListConfig['expansion']\n >['schemaContract']\n >['allowedNodes']\n >[number] => !!node,\n )\n : undefined,\n maxSections: normalizePositiveNumber(expansion.schemaContract.maxSections),\n maxItemsPerSection: normalizePositiveNumber(\n expansion.schemaContract.maxItemsPerSection,\n ),\n requireSectionIds: readBoolean(expansion.schemaContract.requireSectionIds),\n })\n : undefined,\n rendering: expansion?.rendering\n ? stripUndefinedDeep({\n shell: oneOf(\n expansion.rendering.shell,\n ['attached', 'detached', 'modal'] as const,\n undefined,\n ),\n columns: normalizeExpansionColumns(expansion.rendering.columns),\n gap: trimToUndefined(expansion.rendering.gap),\n padding: trimToUndefined(expansion.rendering.padding),\n class: trimToUndefined(expansion.rendering.class),\n style: trimToUndefined(expansion.rendering.style),\n loadingTemplate: normalizeTemplateDef(expansion.rendering.loadingTemplate),\n errorTemplate: normalizeTemplateDef(expansion.rendering.errorTemplate),\n })\n : undefined,\n });\n}\n\nfunction validateRawExpansion(\n diagnostics: EditorDiagnostic[],\n expansion: Record<string, any>,\n basePath: string,\n): void {\n if (!Object.keys(expansion).length) return;\n if ('sections' in expansion && !Array.isArray(expansion.sections)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.expansion.sections.invalid',\n 'config.expansion.sections must be an array',\n `${basePath}.sections`,\n ),\n );\n return;\n }\n\n (expansion.sections as unknown[] | undefined)?.forEach((section, index) => {\n const rawSection = asRecord(section);\n const sectionPath = `${basePath}.sections[${index}]`;\n if (!trimToUndefined(rawSection.id)) {\n diagnostics.push(\n errorDiagnostic(\n 'list.expansion.section.id.required',\n 'Expansion section id is required',\n `${sectionPath}.id`,\n ),\n );\n }\n validateRawEnum(\n diagnostics,\n rawSection.type,\n EXPANSION_SECTION_TYPES,\n 'list.expansion.section.type.invalid',\n 'config.expansion.sections[].type must be info-list, chip-list, timeline, key-value, metadata or component',\n `${sectionPath}.type`,\n );\n const sectionType = trimToUndefined(rawSection.type);\n if (sectionType === 'component') {\n const component = asRecord(rawSection.component);\n const componentId = trimToUndefined(component.id);\n if (!componentId) {\n diagnostics.push(\n errorDiagnostic(\n 'list.expansion.section.component.id.required',\n 'Expansion component section requires component.id',\n `${sectionPath}.component.id`,\n ),\n );\n } else if (!normalizeListRuntimeComponentId(componentId)) {\n diagnostics.push(\n warningDiagnostic(\n 'list.expansion.section.component.id.unsupported',\n `component id \"${componentId}\" is not supported by the closed praxis-list runtime registry`,\n `${sectionPath}.component.id`,\n ),\n );\n }\n }\n // itemsExpr is optional for metadata and component types\n if (\n sectionType !== 'metadata' &&\n sectionType !== 'component' &&\n !trimToUndefined(rawSection.itemsExpr)\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'list.expansion.section.itemsExpr.required',\n 'Expansion section itemsExpr is required (except for metadata and component types)',\n `${sectionPath}.itemsExpr`,\n ),\n );\n }\n });\n}\n\nfunction normalizeTemplateDef(\n template: TemplateDef | undefined,\n): TemplateDef | undefined {\n if (!template || typeof template !== 'object') return undefined;\n return stripUndefinedDeep({\n ...template,\n expr: trimToUndefined(template.expr),\n class: trimToUndefined(template.class),\n style: trimToUndefined(template.style),\n color: trimToUndefined(template.color),\n variant: oneOf(\n template.variant,\n ['filled', 'outlined'] as const,\n undefined,\n ),\n imageAlt: trimToUndefined(template.imageAlt),\n badge: template.badge\n ? stripUndefinedDeep({\n expr: trimToEmpty(template.badge.expr),\n color: trimToUndefined(template.badge.color),\n variant: oneOf(\n template.badge.variant,\n ['filled', 'outlined'] as const,\n undefined,\n ),\n })\n : undefined,\n props: template.props\n ? stripUndefinedDeep({\n rating: template.props.rating\n ? stripUndefinedDeep({\n max: normalizePositiveNumber(template.props.rating.max),\n size: normalizePositiveNumber(template.props.rating.size),\n color: trimToUndefined(template.props.rating.color),\n })\n : undefined,\n metric: template.props.metric\n ? stripUndefinedDeep({\n label: trimToUndefined(template.props.metric.label),\n valueExpr: trimToUndefined(template.props.metric.valueExpr),\n caption: trimToUndefined(template.props.metric.caption),\n subcaption: trimToUndefined(template.props.metric.subcaption),\n icon: trimToUndefined(template.props.metric.icon),\n tone: trimToUndefined(template.props.metric.tone),\n toneExpr: trimToUndefined(template.props.metric.toneExpr),\n layout: oneOf(\n template.props.metric.layout,\n [\n 'value-only',\n 'value+caption',\n 'icon+value+caption',\n 'stacked-center',\n ] as const,\n undefined,\n ),\n align: oneOf(\n template.props.metric.align,\n ['start', 'center', 'end'] as const,\n undefined,\n ),\n captionPosition: oneOf(\n template.props.metric.captionPosition,\n ['below-value', 'below-progress'] as const,\n undefined,\n ),\n progress: template.props.metric.progress\n ? stripUndefinedDeep({\n valueExpr: trimToUndefined(\n template.props.metric.progress.valueExpr,\n ),\n max: normalizePositiveNumber(\n template.props.metric.progress.max,\n ),\n mode: oneOf(\n template.props.metric.progress.mode,\n ['determinate', 'indeterminate'] as const,\n undefined,\n ),\n color: trimToUndefined(\n template.props.metric.progress.color,\n ),\n colorExpr: trimToUndefined(\n template.props.metric.progress.colorExpr,\n ),\n trackColor: trimToUndefined(\n template.props.metric.progress.trackColor,\n ),\n })\n : undefined,\n valueClass: trimToUndefined(template.props.metric.valueClass),\n valueStyle: trimToUndefined(template.props.metric.valueStyle),\n showBar: readBoolean(template.props.metric.showBar),\n barValueExpr: trimToUndefined(template.props.metric.barValueExpr),\n barColor: trimToUndefined(template.props.metric.barColor),\n barVariant: oneOf(\n template.props.metric.barVariant,\n ['determinate', 'indeterminate'] as const,\n undefined,\n ),\n legendExpr: trimToUndefined(template.props.metric.legendExpr),\n iconExpr: trimToUndefined(template.props.metric.iconExpr),\n iconPosition: oneOf(\n template.props.metric.iconPosition,\n ['left', 'right', 'top'] as const,\n undefined,\n ),\n iconColorExpr: trimToUndefined(template.props.metric.iconColorExpr),\n })\n : undefined,\n compose: template.props.compose\n ? stripUndefinedDeep({\n items: (\n Array.isArray(template.props.compose.items)\n ? template.props.compose.items\n : Array.isArray(template.props.compose.nodes)\n ? template.props.compose.nodes\n : []\n )\n .map((node) => normalizeTemplateDef(node))\n .filter((n): n is TemplateDef => !!n),\n direction: oneOf(\n template.props.compose.direction,\n ['row', 'column'] as const,\n template.props.compose.orientation === 'vertical'\n ? 'column'\n : template.props.compose.orientation === 'horizontal'\n ? 'row'\n : undefined,\n ),\n align: oneOf(\n template.props.compose.align,\n ['start', 'center', 'end'] as const,\n undefined,\n ),\n gap: preserveNonEmptyString(template.props.compose.gap),\n wrap: readBoolean(template.props.compose.wrap),\n separator: preserveNonEmptyString(\n template.props.compose.separator,\n ),\n class: trimToUndefined(template.props.compose.class),\n style: trimToUndefined(template.props.compose.style),\n nodes: (\n Array.isArray(template.props.compose.items)\n ? template.props.compose.items\n : Array.isArray(template.props.compose.nodes)\n ? template.props.compose.nodes\n : []\n )\n .map((node) => normalizeTemplateDef(node))\n .filter((n): n is TemplateDef => !!n),\n orientation: oneOf(\n template.props.compose.orientation,\n ['horizontal', 'vertical'] as const,\n template.props.compose.direction === 'column'\n ? 'vertical'\n : template.props.compose.direction === 'row'\n ? 'horizontal'\n : undefined,\n ),\n })\n : undefined,\n component: template.props.component\n ? stripUndefinedDeep({\n id: trimToEmpty(template.props.component.id),\n inputs: normalizeRecord(template.props.component.inputs),\n class: trimToUndefined(template.props.component.class),\n style: trimToUndefined(template.props.component.style),\n })\n : undefined,\n })\n : undefined,\n });\n}\n\nfunction normalizeTemplatingFeature(\n feature: TemplatingFeatureDef | undefined,\n): TemplatingFeatureDef | undefined {\n if (!feature || typeof feature !== 'object') return undefined;\n if (looksLikeTemplateFeature(feature)) {\n return stripUndefinedDeep({\n ...normalizeTemplateDef(feature),\n icon: trimToUndefined(feature.icon),\n }) as TemplatingFeatureDef;\n }\n\n const expr = trimToUndefined(feature.expr);\n if (!expr) return undefined;\n\n return stripUndefinedDeep({\n ...feature,\n icon: trimToUndefined(feature.icon),\n expr,\n class: trimToUndefined(feature.class),\n style: trimToUndefined(feature.style),\n });\n}\n\nfunction looksLikeTemplateFeature(\n feature: TemplatingFeatureDef,\n): feature is Extract<TemplatingFeatureDef, TemplateDef> & { icon?: string } {\n return (\n typeof (feature as TemplateDef).type === 'string' ||\n 'props' in feature ||\n 'badge' in feature ||\n 'imageAlt' in feature\n );\n}\n\nfunction normalizeExpansionResource(\n resource: any,\n): NonNullable<NonNullable<PraxisListConfig['expansion']>['dataSource']>['resource'] {\n if (typeof resource === 'string') {\n const id = trimToUndefined(resource);\n if (!id) return undefined;\n return {\n kind: 'ui-composition',\n id,\n version: '1.0.0',\n };\n }\n\n if (!resource || typeof resource !== 'object') return undefined;\n\n const normalized = stripUndefinedDeep({\n kind: trimToUndefined(resource.kind) || 'ui-composition',\n id: trimToEmpty(resource.id),\n version: trimToUndefined(resource.version) || '1.0.0',\n });\n\n if (!normalized.id) {\n return undefined;\n }\n\n return normalized;\n}\n\nfunction normalizeExpansionResourcePath(\n resourcePath: any,\n legacyParamsMap: any,\n): NonNullable<NonNullable<PraxisListConfig['expansion']>['dataSource']>['resourcePath'] {\n const normalizedLegacyParamsMap = normalizeRecord(legacyParamsMap);\n\n if (typeof resourcePath === 'string') {\n const path = trimToUndefined(resourcePath);\n if (!path) return undefined;\n\n return stripUndefinedDeep({\n path,\n paramsMap: normalizedLegacyParamsMap,\n });\n }\n\n if (!resourcePath || typeof resourcePath !== 'object') {\n return undefined;\n }\n\n const normalized = stripUndefinedDeep({\n path: trimToEmpty(resourcePath.path),\n method: oneOf(resourcePath.method, ['GET', 'POST'] as const, undefined),\n paramsMap:\n normalizeRecord(resourcePath.paramsMap) || normalizedLegacyParamsMap,\n });\n\n return normalized.path ? normalized : undefined;\n}\n\nfunction normalizeExpansionCache(\n cache: any,\n): NonNullable<NonNullable<PraxisListConfig['expansion']>['dataSource']>['cache'] {\n if (cache === 'none') {\n return { enabled: false };\n }\n\n if (cache === 'per-item' || cache === 'global') {\n return { enabled: true };\n }\n\n if (!cache || typeof cache !== 'object') {\n return undefined;\n }\n\n return stripUndefinedDeep({\n enabled: readBoolean(cache.enabled),\n });\n}\n\nfunction normalizeExpansionColumns(value: any): 1 | 2 | 3 | undefined {\n const parsed = Number(value);\n if (parsed === 1 || parsed === 2 || parsed === 3) {\n return parsed;\n }\n return undefined;\n}\n\nfunction preserveNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n return value.trim() ? value : undefined;\n}\n\nfunction normalizeUi(ui: PraxisListConfig['ui']): PraxisListConfig['ui'] {\n return stripUndefinedDeep({\n showSearch: readBoolean(ui?.showSearch),\n searchField: trimToUndefined(ui?.searchField),\n searchPlaceholder: trimToUndefined(ui?.searchPlaceholder),\n showSort: readBoolean(ui?.showSort),\n sortOptions: Array.isArray(ui?.sortOptions)\n ? ui?.sortOptions\n .map((option) =>\n typeof option === 'string'\n ? trimToUndefined(option)\n : stripUndefinedDeep({\n label: trimToUndefined(option?.label),\n value: trimToUndefined(option?.value),\n }),\n )\n .filter(\n (option): option is string | { label: string; value: string } =>\n typeof option === 'string' ||\n (!!option &&\n typeof option.label === 'string' &&\n typeof option.value === 'string'),\n )\n : undefined,\n showRange: readBoolean(ui?.showRange),\n }) as PraxisListConfig['ui'];\n}\n\nfunction normalizeA11y(\n a11y: PraxisListConfig['a11y'],\n): PraxisListConfig['a11y'] {\n return stripUndefinedDeep({\n ariaLabel: trimToUndefined(a11y?.ariaLabel),\n ariaLabelledBy: trimToUndefined(a11y?.ariaLabelledBy),\n highContrast: readBoolean(a11y?.highContrast),\n reduceMotion: readBoolean(a11y?.reduceMotion),\n });\n}\n\nfunction normalizeRecord(\n value: Record<string, any> | undefined,\n): Record<string, any> | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return undefined;\n }\n return stripUndefinedDeep(cloneJson(value));\n}\n\nfunction normalizeQuery(value: unknown): Record<string, any> | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return undefined;\n }\n return stripUndefinedDeep(cloneJson(value as Record<string, any>));\n}\n\nfunction normalizeSort(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const normalized = value\n .map((entry) => trimToUndefined(entry))\n .filter((entry): entry is string => !!entry);\n return normalized.length ? normalized : undefined;\n}\n\nfunction deriveConfigDiff(\n next: PraxisListConfig,\n current?: PraxisListConfig,\n): ListApplyPlan['diff'] {\n const normalizedCurrent = current ? normalizeListConfig(current) : undefined;\n const configChanged =\n stableSerialize(next) !== stableSerialize(normalizedCurrent);\n const dataSourceChanged =\n stableSerialize(next.dataSource) !==\n stableSerialize(normalizedCurrent?.dataSource) ||\n stableSerialize(next.layout) !==\n stableSerialize(normalizedCurrent?.layout) ||\n stableSerialize(next.ui) !== stableSerialize(normalizedCurrent?.ui);\n const selectionChanged =\n stableSerialize(next.selection) !==\n stableSerialize(normalizedCurrent?.selection);\n const skinChanged =\n stableSerialize(next.skin) !== stableSerialize(normalizedCurrent?.skin) ||\n stableSerialize(next.layout) !== stableSerialize(normalizedCurrent?.layout);\n const templatingChanged =\n stableSerialize(next.templating) !==\n stableSerialize(normalizedCurrent?.templating);\n const schemaInferenceRequested = !!(\n next.dataSource?.resourcePath && !next.templating?.primary\n );\n\n return {\n configChanged,\n dataSourceChanged,\n selectionChanged,\n skinChanged,\n templatingChanged,\n schemaInferenceRequested,\n };\n}\n\nfunction looksLikeLegacySettingsPayload(obj: Record<string, unknown>): boolean {\n return 'config' in obj && !('kind' in obj);\n}\n\nfunction asListConfig(value: unknown): PraxisListConfig {\n if (value && typeof value === 'object') {\n return value as PraxisListConfig;\n }\n return {};\n}\n\nfunction asRecord(value: unknown): Record<string, any> {\n return value && typeof value === 'object'\n ? (value as Record<string, any>)\n : {};\n}\n\nfunction oneOf<T extends readonly string[]>(\n value: unknown,\n allowed: T,\n fallback: T[number] | undefined,\n): T[number] | undefined {\n const candidate = trimToUndefined(value) as T[number] | undefined;\n if (!candidate) return fallback;\n return allowed.includes(candidate) ? candidate : fallback;\n}\n\nfunction validateRawEnum<T extends readonly string[]>(\n diagnostics: EditorDiagnostic[],\n value: unknown,\n allowed: T,\n code: string,\n message: string,\n path: string,\n): void {\n if (value === undefined || value === null || value === '') return;\n const candidate = trimToUndefined(value);\n if (!candidate || !allowed.includes(candidate as T[number])) {\n diagnostics.push(errorDiagnostic(code, message, path));\n }\n}\n\nfunction trimToEmpty(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction trimToUndefined(value: unknown): string | undefined {\n const trimmed = trimToEmpty(value);\n return trimmed || undefined;\n}\n\nfunction normalizeLines(value: unknown): 1 | 2 | 3 {\n const num = Number(value);\n return num === 1 || num === 3 ? num : 2;\n}\n\nfunction normalizePositiveNumber(value: unknown): number | undefined {\n if (value === undefined || value === null || value === '') return undefined;\n const num = Number(value);\n if (!Number.isFinite(num) || num < 1) return undefined;\n return num;\n}\n\nfunction normalizeAngle(value: unknown): number {\n const num = Number(value);\n return Number.isFinite(num) ? num : 135;\n}\n\nfunction readBoolean(value: unknown): boolean | undefined {\n if (value === true || value === false) return value;\n return undefined;\n}\n\nfunction looksLikeJsonPayload(value: string): boolean {\n return (\n value.startsWith('{') ||\n value.startsWith('[') ||\n value.endsWith('}') ||\n value.endsWith(']')\n );\n}\n\nfunction isAcceptedImageUrl(value: string): boolean {\n return (\n (value.startsWith('${') && value.endsWith('}')) ||\n value.startsWith('http://') ||\n value.startsWith('https://') ||\n value.startsWith('data:') ||\n value.startsWith('./') ||\n value.startsWith('../') ||\n value.startsWith('assets/') ||\n value.startsWith('/')\n );\n}\n\nfunction cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value ?? null));\n}\n\nfunction stripUndefinedDeep<T>(value: T): T {\n return JSON.parse(JSON.stringify(value));\n}\n\nfunction stableSerialize(value: unknown): string {\n if (value === undefined) return 'undefined';\n if (value === null) return 'null';\n if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'bigint'\n ) {\n return String(value);\n }\n if (typeof value === 'string') return JSON.stringify(value);\n if (Array.isArray(value)) {\n return `[${value.map((entry) => stableSerialize(entry)).join(',')}]`;\n }\n if (typeof value === 'object') {\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record).sort();\n return `{${keys\n .map((key) => `${JSON.stringify(key)}:${stableSerialize(record[key])}`)\n .join(',')}}`;\n }\n return JSON.stringify(String(value));\n}\n\nfunction errorDiagnostic(\n code: string,\n message: string,\n path?: string,\n): EditorDiagnostic {\n return { level: 'error', code, message, path };\n}\n\nfunction infoDiagnostic(\n code: string,\n message: string,\n path?: string,\n): EditorDiagnostic {\n return { level: 'info', code, message, path };\n}\n\nfunction warningDiagnostic(\n code: string,\n message: string,\n path?: string,\n): EditorDiagnostic {\n return { level: 'warning', code, message, path };\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { Subject, debounceTime, takeUntil } from 'rxjs';\nimport {\n parseLegacyOrListDocument,\n serializeListAuthoringDocument,\n validateListAuthoringDocument,\n} from '../list-editor-capability';\nimport {\n EditorDiagnostic,\n ListAuthoringDocument,\n} from '../list-editor-document.model';\n\nexport interface JsonValidationResult {\n isValid: boolean;\n error?: string;\n document?: ListAuthoringDocument;\n diagnostics?: EditorDiagnostic[];\n}\n\nexport interface JsonEditorEvent {\n type: 'apply' | 'format' | 'validation';\n payload: JsonValidationResult;\n}\n\n@Component({\n selector: 'praxis-list-json-config-editor',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatCardModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n ],\n template: `\n <div class=\"json-config-editor\">\n <mat-card class=\"educational-card\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"card-icon\">data_object</mat-icon>\n <mat-card-title>Edição Avançada JSON</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <p>O contrato oficial de autoria da lista é <strong>ListAuthoringDocument</strong>. Esta aba edita esse documento diretamente.</p>\n </mat-card-content>\n </mat-card>\n\n <div class=\"json-editor-section\">\n <div class=\"json-editor-toolbar\">\n <button mat-button (click)=\"formatJson()\" [disabled]=\"!isValidJson\">\n <mat-icon>format_align_left</mat-icon>\n Formatar JSON\n </button>\n <button mat-button color=\"primary\" (click)=\"applyJsonChanges()\" [disabled]=\"!isValidJson\">\n <mat-icon>check</mat-icon>\n Aplicar JSON\n </button>\n @if (hasPendingExternalUpdate) {\n <button mat-button type=\"button\" (click)=\"reloadFromDocument()\">\n <mat-icon>refresh</mat-icon>\n Recarregar documento\n </button>\n }\n </div>\n @if (hasPendingExternalUpdate) {\n <p class=\"pending-update-note\">\n O documento externo mudou enquanto havia edições locais não aplicadas. Revise e recarregue quando quiser substituir o texto atual.\n </p>\n }\n\n <mat-form-field appearance=\"outline\" class=\"json-textarea-field\">\n <mat-label>Documento JSON</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"jsonText\"\n (ngModelChange)=\"onJsonTextChange($event)\"\n rows=\"20\"\n spellcheck=\"false\"\n class=\"json-textarea\"\n placeholder=\"Edite o documento canônico da lista aqui...\">\n </textarea>\n @if (isValidJson) {\n <mat-hint class=\"valid-hint\">JSON válido</mat-hint>\n }\n @if (isValidJson && unknownTopKeys.length) {\n <mat-hint align=\"end\" class=\"valid-hint warning-hint\">\n Aviso: chaves desconhecidas no topo — {{ unknownTopKeys.join(', ') }}\n </mat-hint>\n }\n @if (!isValidJson && jsonText) {\n <mat-error>JSON inválido: {{ jsonError }}</mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n `,\n styles: [`\n .json-config-editor {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .educational-card {\n background-color: var(--md-sys-color-surface-container-low);\n border-left: 4px solid var(--md-sys-color-primary);\n }\n\n .card-icon {\n background-color: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n font-size: 20px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .json-editor-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .json-editor-toolbar {\n display: flex;\n gap: 12px;\n padding: 12px;\n background-color: var(--md-sys-color-surface-container-low);\n border-radius: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n }\n\n .json-textarea-field {\n width: 100%;\n }\n\n .pending-update-note {\n margin: 0;\n color: var(--md-sys-color-secondary);\n font-size: 0.875rem;\n }\n\n .json-textarea {\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace !important;\n font-size: 13px !important;\n line-height: 1.4 !important;\n min-height: 320px !important;\n white-space: pre !important;\n overflow-wrap: normal !important;\n overflow-x: auto !important;\n resize: none !important;\n }\n\n .valid-hint {\n color: var(--md-sys-color-primary) !important;\n }\n\n .warning-hint {\n color: var(--md-sys-color-secondary) !important;\n }\n `],\n})\nexport class PraxisListJsonConfigEditorComponent\n implements OnInit, OnChanges, OnDestroy\n{\n @Input() document: ListAuthoringDocument | null = null;\n @Output() documentChange = new EventEmitter<ListAuthoringDocument>();\n @Output() validationChange = new EventEmitter<JsonValidationResult>();\n @Output() editorEvent = new EventEmitter<JsonEditorEvent>();\n\n jsonText = '';\n isValidJson = true;\n jsonError = '';\n unknownTopKeys: string[] = [];\n hasPendingExternalUpdate = false;\n\n private readonly destroy$ = new Subject<void>();\n private readonly jsonTextChanges$ = new Subject<string>();\n private lastSyncedJsonText = '';\n\n constructor(private readonly cdr: ChangeDetectorRef) {\n this.jsonTextChanges$\n .pipe(debounceTime(300), takeUntil(this.destroy$))\n .subscribe((text) => this.validateJson(text));\n }\n\n ngOnInit(): void {\n if (this.document) {\n this.updateJsonFromDocument(this.document, true);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['document'] && this.document) {\n this.updateJsonFromDocument(this.document);\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onJsonTextChange(text: string): void {\n this.jsonTextChanges$.next(text);\n }\n\n applyJsonChanges(): void {\n if (!this.isValidJson) return;\n\n try {\n const document = parseLegacyOrListDocument(JSON.parse(this.jsonText));\n const diagnostics = validateListAuthoringDocument(document);\n this.lastSyncedJsonText = this.jsonText;\n this.hasPendingExternalUpdate = false;\n this.documentChange.emit(document);\n this.editorEvent.emit({\n type: 'apply',\n payload: {\n isValid: !diagnostics.some((item) => item.level === 'error'),\n document,\n diagnostics,\n },\n });\n } catch {\n this.editorEvent.emit({\n type: 'apply',\n payload: {\n isValid: false,\n error: 'Erro ao aplicar documento JSON',\n },\n });\n }\n }\n\n formatJson(): void {\n if (!this.isValidJson) return;\n\n try {\n const document = parseLegacyOrListDocument(JSON.parse(this.jsonText));\n const diagnostics = validateListAuthoringDocument(document);\n this.syncJsonText(JSON.stringify(\n serializeListAuthoringDocument(document),\n null,\n 2,\n ));\n this.editorEvent.emit({\n type: 'format',\n payload: {\n isValid: !diagnostics.some((item) => item.level === 'error'),\n document,\n diagnostics,\n },\n });\n this.cdr.markForCheck();\n } catch {\n this.editorEvent.emit({\n type: 'format',\n payload: {\n isValid: false,\n error: 'Erro ao formatar JSON',\n },\n });\n }\n }\n\n updateJsonFromDocument(\n document: ListAuthoringDocument,\n force = false,\n ): void {\n const nextJsonText = JSON.stringify(\n serializeListAuthoringDocument(document),\n null,\n 2,\n );\n if (!force && this.hasUnsavedLocalChanges()) {\n this.hasPendingExternalUpdate = true;\n this.cdr.markForCheck();\n return;\n }\n this.syncJsonText(nextJsonText);\n }\n\n reloadFromDocument(): void {\n if (!this.document) return;\n this.updateJsonFromDocument(this.document, true);\n }\n\n private validateJson(text: string): void {\n const result: JsonValidationResult = {\n isValid: false,\n diagnostics: [],\n };\n\n if (!text.trim()) {\n result.error = 'JSON não pode estar vazio';\n this.updateValidationState(result);\n return;\n }\n\n try {\n const parsed = JSON.parse(text);\n const document = parseLegacyOrListDocument(parsed);\n const diagnostics = validateListAuthoringDocument(document);\n const hasErrors = diagnostics.some((item) => item.level === 'error');\n const allowed = ['kind', 'version', 'config', 'bindings'];\n\n result.isValid = !hasErrors;\n result.document = document;\n result.diagnostics = diagnostics;\n this.unknownTopKeys = Object.keys(parsed || {}).filter(\n (key) => !allowed.includes(key),\n );\n\n if (hasErrors) {\n result.error =\n diagnostics.find((item) => item.level === 'error')?.message ||\n 'Documento de autoria inválido';\n }\n\n this.updateValidationState(result);\n } catch (error) {\n result.error =\n error instanceof Error ? error.message : 'Erro de sintaxe JSON';\n this.updateValidationState(result);\n }\n }\n\n private updateValidationState(result: JsonValidationResult): void {\n this.isValidJson = result.isValid;\n this.jsonError = result.error || '';\n this.validationChange.emit(result);\n this.editorEvent.emit({\n type: 'validation',\n payload: result,\n });\n this.cdr.markForCheck();\n }\n\n private syncJsonText(text: string): void {\n this.jsonText = text;\n this.lastSyncedJsonText = text;\n this.hasPendingExternalUpdate = false;\n this.validateJson(this.jsonText);\n }\n\n private hasUnsavedLocalChanges(): boolean {\n return this.jsonText.trim() !== this.lastSyncedJsonText.trim();\n }\n}\n","import {\n Component,\n Inject,\n Optional,\n Input,\n DoCheck,\n inject,\n} from '@angular/core';\nimport { BehaviorSubject, Subject, of } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n switchMap,\n tap,\n catchError,\n} from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { PraxisListConfig, TemplateDef } from '../models/list-config.model';\nimport {\n SETTINGS_PANEL_DATA,\n SettingsValueProvider,\n} from '@praxisui/settings-panel';\nimport { PraxisListSkinPreviewComponent } from '../components/list-skin-preview.component';\nimport { PraxisMetaEditorTextComponent } from './meta-editors/meta-editor-text.component';\nimport { PraxisMetaEditorChipComponent } from './meta-editors/meta-editor-chip.component';\nimport { PraxisMetaEditorRatingComponent } from './meta-editors/meta-editor-rating.component';\nimport { PraxisMetaEditorCurrencyComponent } from './meta-editors/meta-editor-currency.component';\nimport { PraxisMetaEditorDateComponent } from './meta-editors/meta-editor-date.component';\nimport { PraxisMetaEditorIconComponent } from './meta-editors/meta-editor-icon.component';\nimport { PraxisMetaEditorImageComponent } from './meta-editors/meta-editor-image.component';\nimport { PdxColorPickerComponent } from '@praxisui/dynamic-fields';\nimport {\n GenericCrudService,\n IconPickerService,\n PraxisIconDirective,\n GLOBAL_ACTION_CATALOG,\n GlobalActionCatalogEntry,\n PRAXIS_GLOBAL_ACTION_CATALOG,\n getGlobalActionCatalog,\n getGlobalActionUiSchema,\n SurfaceOpenActionEditorComponent,\n type SurfaceOpenPayload,\n PraxisI18nService,\n providePraxisI18nConfig,\n SURFACE_OPEN_I18N_CONFIG,\n SURFACE_OPEN_I18N_NAMESPACE,\n} from '@praxisui/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { produce, setAutoFreeze } from 'immer';\nimport {\n createListAuthoringDocument,\n inferListAuthoringDocument,\n parseLegacyOrListDocument,\n projectListAuthoringDocument,\n serializeListAuthoringDocument,\n validateListAuthoringDocument,\n} from '../list-editor-capability';\nimport { ListAuthoringDocument } from '../list-editor-document.model';\nimport {\n JsonEditorEvent,\n JsonValidationResult,\n PraxisListJsonConfigEditorComponent,\n} from './json-config-editor.component';\n\ntype NormalizedListConfig = Omit<\n PraxisListConfig,\n 'dataSource' | 'layout' | 'selection' | 'skin' | 'i18n'\n> & {\n dataSource: {\n data?: any[];\n resourcePath?: string;\n query?: Record<string, any>;\n sort?: string[];\n };\n layout: {\n variant: 'list' | 'cards' | 'tiles';\n density?: 'default' | 'comfortable' | 'compact';\n itemSpacing?: 'none' | 'tight' | 'default' | 'relaxed';\n lines: 1 | 2 | 3;\n dividers?: 'none' | 'between' | 'all';\n model?: 'standard' | 'media' | 'hotel';\n groupBy?: string;\n stickySectionHeader?: boolean;\n virtualScroll?: boolean;\n pageSize?: number;\n };\n skin: {\n type:\n | 'pill-soft'\n | 'gradient-tile'\n | 'glass'\n | 'elevated'\n | 'outline'\n | 'flat'\n | 'neumorphism'\n | 'custom';\n gradient: { from: string; to: string; angle?: number };\n radius?: string;\n shadow?: string;\n border?: string;\n backdropBlur?: string;\n class?: string;\n inlineStyle?: string;\n };\n selection: {\n mode: 'none' | 'single' | 'multiple';\n formControlName?: string;\n formControlPath?: string;\n compareBy?: string;\n return?: 'value' | 'item' | 'id';\n };\n i18n: { locale?: string; currency?: string };\n actions?: PraxisListConfig['actions'];\n ui: NonNullable<PraxisListConfig['ui']>;\n a11y?: PraxisListConfig['a11y'];\n events?: PraxisListConfig['events'];\n};\n\ntype SkinType = NormalizedListConfig['skin']['type'];\ntype SkinPreset = Exclude<SkinType, 'custom'>;\n\nconst SKIN_PRESETS: readonly SkinPreset[] = [\n 'pill-soft',\n 'gradient-tile',\n 'glass',\n 'elevated',\n 'outline',\n 'flat',\n 'neumorphism',\n];\n\n@Component({\n selector: 'praxis-list-config-editor',\n standalone: true,\n providers: [providePraxisI18nConfig(SURFACE_OPEN_I18N_CONFIG)],\n imports: [\n CommonModule,\n FormsModule,\n MatTabsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatButtonModule,\n MatSlideToggleModule,\n MatIconModule,\n MatExpansionModule,\n MatButtonToggleModule,\n MatTooltipModule,\n MatDividerModule,\n MatChipsModule,\n MatMenuModule,\n PraxisIconDirective,\n PraxisListSkinPreviewComponent,\n PraxisMetaEditorTextComponent,\n PraxisMetaEditorChipComponent,\n PraxisMetaEditorRatingComponent,\n PraxisMetaEditorCurrencyComponent,\n PraxisMetaEditorDateComponent,\n PraxisMetaEditorIconComponent,\n PraxisMetaEditorImageComponent,\n PraxisListJsonConfigEditorComponent,\n PdxColorPickerComponent,\n SurfaceOpenActionEditorComponent,\n ],\n templateUrl: './list-config-editor.component.html',\n\n styles: [\n `\n .confirm-type {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n line-height: 16px;\n background: var(--md-sys-color-surface-container-high);\n color: var(--md-sys-color-on-surface-variant);\n }\n .confirm-type.danger {\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n }\n .confirm-type.warning {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n }\n .confirm-type.info {\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n :host {\n display: block;\n color: var(--md-sys-color-on-surface);\n }\n .list-editor-tabs {\n --editor-surface: var(--md-sys-color-surface-container-lowest);\n --editor-border: 1px solid var(--md-sys-color-outline-variant);\n --editor-radius: var(--md-sys-shape-corner-large, 16px);\n --editor-muted: var(--md-sys-color-on-surface-variant);\n --editor-accent: var(--md-sys-color-primary);\n }\n .editor-content {\n padding: 16px;\n background: var(--editor-surface);\n border: var(--editor-border);\n border-radius: var(--editor-radius);\n display: grid;\n gap: 12px;\n }\n .editor-content .mat-mdc-form-field {\n width: 100%;\n max-width: none;\n --mdc-outlined-text-field-container-height: 48px;\n --mdc-outlined-text-field-outline-color: var(\n --md-sys-color-outline-variant\n );\n --mdc-outlined-text-field-hover-outline-color: var(\n --md-sys-color-outline\n );\n --mdc-outlined-text-field-focus-outline-color: var(\n --md-sys-color-primary\n );\n --mdc-outlined-text-field-error-outline-color: var(\n --md-sys-color-error\n );\n --mdc-outlined-text-field-error-focus-outline-color: var(\n --md-sys-color-error\n );\n --mdc-outlined-text-field-error-hover-outline-color: var(\n --md-sys-color-error\n );\n --mdc-outlined-text-field-label-text-color: var(\n --md-sys-color-on-surface-variant\n );\n --mdc-outlined-text-field-input-text-color: var(\n --md-sys-color-on-surface\n );\n --mdc-outlined-text-field-supporting-text-color: var(\n --md-sys-color-on-surface-variant\n );\n }\n .editor-content .mat-mdc-form-field.w-full {\n max-width: none;\n }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n .help-icon-button mat-icon {\n font-size: 18px;\n line-height: 18px;\n width: 18px;\n height: 18px;\n }\n .editor-split {\n grid-template-columns: minmax(0, 1fr);\n align-items: start;\n }\n .editor-main {\n display: grid;\n gap: 12px;\n }\n .editor-aside {\n display: grid;\n gap: 12px;\n }\n .skin-preview-wrap {\n border-radius: calc(var(--editor-radius) - 4px);\n border: var(--editor-border);\n background: var(--md-sys-color-surface-container);\n padding: 12px;\n }\n .g {\n display: grid;\n }\n .g-auto-220 {\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n }\n .g-auto-200 {\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n }\n .g-1-auto {\n grid-template-columns: 1fr auto;\n }\n .row-flow {\n grid-auto-flow: column;\n }\n .gap-6 {\n gap: 6px;\n }\n .gap-8 {\n gap: 8px;\n }\n .gap-12 {\n gap: 12px;\n }\n .ai-center {\n align-items: center;\n }\n .ai-end {\n align-items: end;\n }\n .mt-12 {\n margin-top: 12px;\n }\n .mb-8 {\n margin-bottom: 8px;\n }\n .mb-6 {\n margin-bottom: 6px;\n }\n .my-8 {\n margin: 8px 0;\n }\n .subtitle {\n margin: 8px 0 4px;\n color: var(--editor-muted);\n font-weight: 500;\n }\n .section-title {\n color: var(--editor-muted);\n font-weight: 600;\n }\n .chips-row {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n align-items: center;\n }\n .error {\n color: var(--md-sys-color-error);\n font-size: 0.85rem;\n }\n .muted {\n color: var(--editor-muted);\n }\n .text-caption {\n color: var(--editor-muted);\n font-size: 0.8rem;\n }\n :host ::ng-deep .mat-mdc-select-panel .option-icon {\n font-size: 18px;\n margin-right: 6px;\n vertical-align: middle;\n }\n :host ::ng-deep .mat-mdc-select-panel .color-dot {\n width: 10px;\n height: 10px;\n border-radius: 999px;\n display: inline-block;\n margin-right: 6px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-outline);\n }\n :host ::ng-deep .mat-mdc-select-panel .color-primary {\n background: var(--md-sys-color-primary);\n }\n :host ::ng-deep .mat-mdc-select-panel .color-accent {\n background: var(--md-sys-color-tertiary);\n }\n :host ::ng-deep .mat-mdc-select-panel .color-warn {\n background: var(--md-sys-color-error);\n }\n :host ::ng-deep .mat-mdc-select-panel .color-default {\n background: var(--md-sys-color-outline);\n }\n @media (max-width: 1024px) {\n .editor-split {\n grid-template-columns: minmax(0, 1fr);\n }\n }\n `,\n ],\n})\nexport class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {\n @Input() config!: PraxisListConfig;\n @Input() listId?: string;\n\n document: ListAuthoringDocument = createListAuthoringDocument({ config: {} });\n\n working: NormalizedListConfig = {\n dataSource: {},\n layout: {\n variant: 'list',\n lines: 2,\n density: 'default',\n itemSpacing: 'none',\n dividers: 'between',\n },\n selection: { mode: 'none', return: 'value' },\n skin: { type: 'elevated', gradient: { from: '', to: '', angle: 135 } },\n i18n: { locale: 'en-US', currency: 'USD' },\n ui: {},\n a11y: {},\n events: {},\n };\n\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n\n private initialJson = '';\n private lastJson = '';\n\n fields: string[] = [];\n private lastResourcePath?: string; // kept for backwards safety; watcher supersedes\n sortField?: string;\n sortDir: 'asc' | 'desc' = 'asc';\n mappingPrimary: {\n field?: string;\n type: 'text' | 'currency' | 'date' | 'html';\n currencyCode?: string;\n locale?: string;\n dateStyle?: 'short' | 'medium' | 'long' | 'full';\n class?: string;\n style?: string;\n extraPipe?: string;\n } = { type: 'text' } as any;\n mappingSecondary: {\n field?: string;\n type: 'text' | 'currency' | 'date' | 'html';\n currencyCode?: string;\n locale?: string;\n dateStyle?: 'short' | 'medium' | 'long' | 'full';\n class?: string;\n style?: string;\n extraPipe?: string;\n } = { type: 'text' } as any;\n mappingMeta: {\n field?: string;\n type:\n | 'text'\n | 'currency'\n | 'date'\n | 'chip'\n | 'rating'\n | 'icon'\n | 'image'\n | 'html';\n currencyCode?: string;\n locale?: string;\n dateStyle?: 'short' | 'medium' | 'long' | 'full';\n class?: string;\n style?: string;\n placement?: 'side' | 'line';\n chipColor?: string;\n chipVariant?: 'filled' | 'outlined';\n ratingColor?: string;\n ratingSize?: number;\n ratingMax?: number;\n iconColor?: string;\n imageAlt?: string;\n extraPipe?: string;\n } = { type: 'text' } as any;\n mappingMetaPrefixIcon?: string;\n mappingTrailing: {\n field?: string;\n type?:\n | 'text'\n | 'currency'\n | 'date'\n | 'chip'\n | 'icon'\n | 'rating'\n | 'html'\n | 'image';\n class?: string;\n style?: string;\n chipColor?: string;\n chipVariant?: 'filled' | 'outlined';\n ratingColor?: string;\n ratingSize?: number;\n ratingMax?: number;\n iconColor?: string;\n imageUrl?: string;\n imageAlt?: string;\n currencyCode?: string;\n locale?: string;\n dateStyle?: 'short' | 'medium' | 'long' | 'full';\n extraPipe?: string;\n } = {} as any;\n mappingLeading: {\n field?: string;\n type: 'icon' | 'image' | 'text' | 'chip' | 'rating' | 'html';\n icon?: string;\n imageUrl?: string;\n imageAlt?: string;\n badgeText?: string;\n badgeColor?: string;\n badgeVariant?: 'filled' | 'outlined';\n class?: string;\n style?: string;\n chipColor?: string;\n chipVariant?: 'filled' | 'outlined';\n ratingColor?: string;\n ratingSize?: number;\n ratingMax?: number;\n iconColor?: string;\n extraPipe?: string;\n } = { type: 'icon' } as any;\n mappingSectionHeader: {\n type: 'text' | 'chip' | 'icon' | 'image' | 'rating' | 'html';\n expr?: string;\n class?: string;\n style?: string;\n chipColor?: string;\n chipVariant?: 'filled' | 'outlined';\n ratingColor?: string;\n ratingSize?: number;\n ratingMax?: number;\n iconColor?: string;\n imageUrl?: string;\n imageAlt?: string;\n extraPipe?: string;\n } = { type: 'text', expr: '${item.key}' } as any;\n mappingEmptyState: {\n type: 'text' | 'chip' | 'icon' | 'image' | 'rating' | 'html';\n expr?: string;\n class?: string;\n style?: string;\n chipColor?: string;\n chipVariant?: 'filled' | 'outlined';\n ratingColor?: string;\n ratingSize?: number;\n ratingMax?: number;\n iconColor?: string;\n imageUrl?: string;\n imageAlt?: string;\n extraPipe?: string;\n } = { type: 'text', expr: 'Nenhum item disponível' } as any;\n mapping: { leadingIcon?: string } = {};\n private mappingDirty = false;\n private appliedMappingSnapshot = '';\n statusPosition: 'inline' | 'top-right' | undefined = undefined;\n iconColorMapEntries: Array<{ key: string; color?: string }> = [];\n chipColorMapEntries: Array<{ key: string; color?: string }> = [];\n chipLabelMapEntries: Array<{ key: string; label?: string }> = [];\n globalActionCatalog: GlobalActionCatalogEntry[] = [];\n selectedGlobalActionId?: string;\n // UI (search/sort/range) editor state\n uiSortRows: Array<{ label?: string; field?: string; dir?: 'asc' | 'desc' }> =\n [];\n\n // Meta composition (multi-field)\n mappingMetaFields: string[] = [];\n mappingMetaSeparator: string = ' • ';\n mappingMetaWrapSecondInParens = false;\n featuresSyncWithMeta = false;\n\n // Features editor state\n features: Array<{\n icon?: string;\n expr: string;\n class?: string;\n style?: string;\n }> = [];\n featuresVisible = true;\n featuresMode: 'icons+labels' | 'icons-only' | 'labels-only' = 'icons+labels';\n skeletonCountInput = 3;\n\n queryJson = '';\n queryError = '';\n\n private crud: GenericCrudService<any> | null = null;\n private readonly i18n = inject(PraxisI18nService);\n private resourcePathChanges = new Subject<string>();\n\n constructor(@Optional() @Inject(SETTINGS_PANEL_DATA) injected?: any) {\n // Disable Immer auto-freeze to allow [(ngModel)] mutations on produced state\n setAutoFreeze(false);\n\n // optional inject\n this.crud = inject(GenericCrudService as any, {\n optional: true,\n }) as GenericCrudService<any> | null;\n const incoming = injected?.document ?? injected?.config ?? this.config;\n this.applyIncomingDocument(incoming);\n this.globalActionCatalog = this.resolveGlobalActionCatalog();\n this.appliedMappingSnapshot = this.getMappingSnapshot();\n this.initialJson = this.snapshotCurrentDocument();\n this.lastJson = this.initialJson;\n // Start schema watcher and emit initial value\n this.setupSchemaWatcher();\n this.resourcePathChanges.next(this.working?.dataSource?.resourcePath || '');\n }\n\n private ip = inject(IconPickerService);\n async pickLeadingIcon(): Promise<void> {\n const chosen = await this.ip.openDialog({\n value: (this.mappingLeading as any)?.icon,\n });\n if (chosen == null) return;\n this.mappingLeading = {\n ...(this.mappingLeading || { type: 'icon' as const }),\n type: 'icon',\n icon: chosen,\n } as any;\n this.onMappingChanged();\n }\n async pickFeatureIcon(index: number): Promise<void> {\n const current = this.features?.[index]?.icon || '';\n const chosen = await this.ip.openDialog({ value: current });\n if (chosen == null) return;\n const arr = [...(this.features || [])];\n const old = arr[index] || { icon: '', expr: '' };\n arr[index] = { ...old, icon: chosen };\n this.features = arr;\n this.onFeaturesChanged();\n }\n async pickMetaPrefixIcon(): Promise<void> {\n const chosen = await this.ip.openDialog({\n value: this.mappingMetaPrefixIcon || '',\n });\n if (chosen == null) return;\n this.mappingMetaPrefixIcon = chosen;\n this.onMappingChanged();\n }\n\n getSettingsValue(): any {\n const document = this.buildCurrentDocument();\n return { document, config: document.config, id: this.listId };\n }\n\n onSave(): any {\n const document = this.buildCurrentDocument();\n return { document, config: document.config, id: this.listId };\n }\n\n onJsonConfigChange(newValue: PraxisListConfig | ListAuthoringDocument): void {\n this.applyIncomingDocument(newValue);\n this.markDirty();\n this.verify();\n }\n\n onJsonValidationChange(result: JsonValidationResult): void {\n this.isValid$.next(result.isValid);\n }\n\n onJsonEditorEvent(event: JsonEditorEvent): void {\n if (event.type === 'validation') return;\n }\n\n buildJsonAuthoringDocument(): ListAuthoringDocument {\n return this.buildCurrentDocument();\n }\n\n private applyIncomingDocument(raw: unknown): void {\n const document = projectListAuthoringDocument(\n parseLegacyOrListDocument(raw),\n {\n schemaFieldNames: this.fields,\n },\n );\n this.document = document;\n this.working = document.config as NormalizedListConfig;\n this.resetVisualMappingState();\n this.hydrateMappingFromTemplating(this.working.templating as any);\n this.hydrateUiEditorFromConfig();\n this.queryJson = this.working?.dataSource?.query\n ? JSON.stringify(this.working.dataSource.query, null, 2)\n : '';\n this.queryError = '';\n this.skeletonCountInput =\n this.working?.templating?.skeleton?.count ?? this.skeletonCountInput;\n this.syncSortStateFromWorking();\n }\n\n private buildCurrentDocument(): ListAuthoringDocument {\n const config = this.mappingDirty\n ? this.composeWorkingFromVisualState()\n : this.working;\n const document = createListAuthoringDocument({\n config,\n });\n this.document = document;\n return document;\n }\n\n private snapshotCurrentDocument(): string {\n return JSON.stringify(\n serializeListAuthoringDocument(this.buildCurrentDocument()),\n );\n }\n\n private syncSortStateFromWorking(): void {\n this.sortField = undefined;\n this.sortDir = 'asc';\n const sort = this.working.dataSource?.sort?.[0];\n if (sort && typeof sort === 'string') {\n const [field, dir] = sort.split(',');\n this.sortField = field;\n this.sortDir = dir === 'desc' ? 'desc' : 'asc';\n }\n }\n\n private resetVisualMappingState(): void {\n this.mappingPrimary = { type: 'text' } as any;\n this.mappingSecondary = { type: 'text' } as any;\n this.mappingMeta = { type: 'text' } as any;\n this.mappingTrailing = {} as any;\n this.mappingLeading = { type: 'icon' } as any;\n this.mappingSectionHeader = { type: 'text', expr: '${item.key}' } as any;\n this.mappingEmptyState = {\n type: 'text',\n expr: 'Nenhum item disponível',\n } as any;\n this.mappingMetaPrefixIcon = undefined;\n this.mappingMetaFields = [];\n this.mappingMetaSeparator = ' • ';\n this.mappingMetaWrapSecondInParens = false;\n this.features = [];\n this.featuresVisible = true;\n this.featuresMode = 'icons+labels';\n this.statusPosition = undefined;\n this.iconColorMapEntries = [];\n this.chipColorMapEntries = [];\n this.chipLabelMapEntries = [];\n }\n\n // Debounced schema loader for resourcePath\n private setupSchemaWatcher(): void {\n this.resourcePathChanges\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n tap(() => this.isBusy$.next(true)),\n switchMap((rp) => {\n const path = (rp || '').trim();\n if (!path || !this.crud) {\n this.fields = [];\n return of([]);\n }\n try {\n this.crud.configure(path);\n return this.crud.getSchema().pipe(catchError(() => of([])));\n } catch {\n return of([]);\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe((fields: any) => {\n this.fields = (fields || [])\n .map((f: any) => f?.name || f?.field || f?.key)\n .filter((n: any) => !!n) as string[];\n this.isBusy$.next(false);\n this.verify();\n });\n }\n\n onResourcePathChange(value: string): void {\n this.resourcePathChanges.next(value ?? '');\n this.markDirty();\n this.verify();\n }\n\n applySkinPreset(preset: SkinPreset): void {\n const currentClass = this.working?.skin?.class;\n this.working = produce(this.working, (draft) => {\n switch (preset) {\n case 'pill-soft':\n draft.skin = {\n type: 'pill-soft',\n radius: '1.5rem',\n shadow: 'var(--md-sys-elevation-level1)',\n border: '1px solid var(--md-sys-color-outline-variant)',\n gradient: { from: '', to: '', angle: 135 },\n class: currentClass,\n } as any;\n break;\n case 'gradient-tile':\n draft.skin = {\n type: 'gradient-tile',\n gradient: {\n from: 'var(--md-sys-color-primary)',\n to: 'var(--md-sys-color-tertiary)',\n angle: 135,\n },\n radius: '1rem',\n shadow: 'var(--md-sys-elevation-level2)',\n class: currentClass,\n } as any;\n break;\n case 'glass':\n draft.skin = {\n type: 'glass',\n radius: '1rem',\n border: '1px solid var(--md-sys-color-outline-variant)',\n backdropBlur: '12px',\n shadow: 'var(--md-sys-elevation-level2)',\n gradient: { from: '', to: '', angle: 135 },\n class: currentClass,\n } as any;\n break;\n case 'elevated':\n default:\n draft.skin = {\n type: 'elevated',\n radius: '0.75rem',\n shadow: 'var(--md-sys-elevation-level2)',\n gradient: { from: '', to: '', angle: 135 },\n class: currentClass,\n } as any;\n break;\n case 'outline':\n draft.skin = {\n type: 'outline',\n radius: '0.75rem',\n shadow: 'none',\n border: '1px solid var(--md-sys-color-outline)',\n gradient: { from: '', to: '', angle: 135 },\n class: currentClass,\n } as any;\n break;\n case 'flat':\n draft.skin = {\n type: 'flat',\n radius: '0.5rem',\n shadow: 'none',\n border: '1px solid var(--md-sys-color-outline-variant)',\n gradient: { from: '', to: '', angle: 135 },\n class: currentClass,\n } as any;\n break;\n case 'neumorphism':\n draft.skin = {\n type: 'neumorphism',\n radius: '1.25rem',\n shadow: 'var(--md-sys-elevation-level2)',\n border: '1px solid var(--md-sys-color-outline-variant)',\n gradient: { from: '', to: '', angle: 135 },\n class: currentClass,\n } as any;\n break;\n }\n });\n this.markDirty();\n this.verify();\n }\n\n applyLayoutPreset(preset: 'tiles-modern'): void {\n if (preset === 'tiles-modern') {\n const currentClass = this.working?.skin?.class;\n this.working = produce(this.working, (draft: any) => {\n draft.layout = {\n ...(draft.layout || {}),\n variant: 'tiles',\n model: 'media',\n lines: 2,\n density: 'comfortable',\n dividers: 'none',\n };\n draft.skin = {\n type: 'gradient-tile',\n radius: '1rem',\n shadow: 'var(--md-sys-elevation-level2)',\n gradient: {\n from: 'var(--md-sys-color-primary-container)',\n to: 'var(--md-sys-color-tertiary-container)',\n angle: 135,\n },\n class: currentClass,\n };\n draft.i18n = {\n ...(draft.i18n || {}),\n locale: 'pt-BR',\n currency: 'BRL',\n };\n draft.templating = {\n ...(draft.templating || {}),\n leading: {\n type: 'image',\n expr: '${item.imageUrl}',\n imageAlt: 'Catalog',\n },\n primary: { type: 'text', expr: '${item.name}' },\n secondary: { type: 'text', expr: '${item.subtitle}' },\n meta: { type: 'currency', expr: '${item.price}|BRL:pt-BR' },\n trailing: { type: 'chip', expr: '${item.status}' },\n metaPlacement: 'side',\n statusPosition: 'top-right',\n chipColorMap: {\n disponivel: 'primary',\n 'ultimas vagas': 'accent',\n indisponivel: 'warn',\n },\n };\n });\n this.hydrateMappingFromTemplating((this.working as any).templating);\n this.hydrateUiEditorFromConfig();\n this.markDirty();\n this.verify();\n }\n }\n\n previewData = [\n {\n title: 'Maria',\n subtitle: 'Product Designer',\n tag: 'A+',\n salary: 12345.67,\n hireDate: '2022-03-01',\n rating: 4.5,\n name: 'Aurora Deluxe',\n status: 'Disponível',\n price: 980.0,\n imageUrl: '/list-demo-hotel-1.svg',\n },\n {\n title: 'João',\n subtitle: 'Frontend Engineer',\n tag: 'B',\n salary: 9876.0,\n hireDate: '2023-01-12',\n rating: 3.8,\n name: 'Skyline Classic',\n status: 'Últimas vagas',\n price: 640.0,\n imageUrl: '/list-demo-hotel-2.svg',\n },\n {\n title: 'Ana',\n subtitle: 'QA Analyst',\n tag: 'C',\n salary: 7564.32,\n hireDate: '2021-10-05',\n rating: 4.9,\n name: 'Urban Loft',\n status: 'Indisponível',\n price: 520.0,\n imageUrl: '/list-demo-hotel-1.svg',\n },\n ];\n skinPreviewTheme: 'light' | 'dark' | 'grid' = 'light';\n\n readonly metaTypeConfigs: Array<{\n type:\n | 'text'\n | 'chip'\n | 'rating'\n | 'currency'\n | 'date'\n | 'icon'\n | 'image'\n | 'html';\n label: string;\n icon: string;\n props?: string[];\n }> = [\n { type: 'text', label: 'Texto', icon: 'text_fields' },\n {\n type: 'chip',\n label: 'Chip',\n icon: 'label',\n props: ['chipColor', 'chipVariant'],\n },\n {\n type: 'rating',\n label: 'Rating',\n icon: 'star',\n props: ['ratingColor', 'ratingSize', 'ratingMax'],\n },\n {\n type: 'icon',\n label: 'Ícone',\n icon: 'emoji_symbols',\n props: ['iconColor'],\n },\n { type: 'image', label: 'Imagem', icon: 'image', props: ['imageAlt'] },\n { type: 'html', label: 'HTML', icon: 'code' },\n { type: 'currency', label: 'Moeda', icon: 'attach_money' },\n { type: 'date', label: 'Data', icon: 'calendar_today' },\n ];\n readonly primaryTypeConfigs = this.metaTypeConfigs.filter((t) =>\n ['text', 'currency', 'date', 'html'].includes(t.type),\n );\n readonly secondaryTypeConfigs = this.primaryTypeConfigs;\n readonly leadingTypeConfigs = this.metaTypeConfigs.filter((t) =>\n ['icon', 'image', 'text', 'chip', 'rating', 'html'].includes(t.type),\n );\n readonly trailingTypeConfigs = this.metaTypeConfigs.filter((t) =>\n [\n 'text',\n 'chip',\n 'rating',\n 'currency',\n 'date',\n 'icon',\n 'html',\n 'image',\n ].includes(t.type),\n );\n readonly sectionHeaderTypeConfigs = this.metaTypeConfigs.filter((t) =>\n ['text', 'chip', 'icon', 'image', 'rating', 'html'].includes(t.type),\n );\n readonly emptyStateTypeConfigs = this.metaTypeConfigs.filter((t) =>\n ['text', 'chip', 'icon', 'image', 'rating', 'html'].includes(t.type),\n );\n\n readonly paletteOptions: Array<{ value?: string; label: string }> = [\n { value: undefined, label: 'Padrão' },\n { value: 'primary', label: 'Primary (Theme)' },\n { value: 'accent', label: 'Accent (Theme)' },\n { value: 'warn', label: 'Warn (Theme)' },\n { value: 'var(--md-sys-color-primary)', label: 'M3 Primary' },\n { value: 'var(--md-sys-color-secondary)', label: 'M3 Secondary' },\n { value: 'var(--md-sys-color-tertiary)', label: 'M3 Tertiary' },\n { value: 'var(--md-sys-color-error)', label: 'M3 Error' },\n { value: 'var(--md-sys-color-on-surface)', label: 'M3 On Surface' },\n {\n value: 'var(--md-sys-color-on-surface-variant)',\n label: 'M3 On Surface Variant',\n },\n ];\n\n isThemeColor(value?: string): boolean {\n return value === 'primary' || value === 'accent' || value === 'warn';\n }\n isM3Color(value?: string): boolean {\n return typeof value === 'string' && value.startsWith('var(--md-sys-color-');\n }\n isCustomColor(value?: string): boolean {\n return !!value && !this.isThemeColor(value) && !this.isM3Color(value);\n }\n iconStyle(color?: string): string {\n if (!color || this.isThemeColor(color)) return '';\n return `color:${color};`;\n }\n buttonStyle(color?: string, variant?: 'stroked' | 'raised' | 'flat'): string {\n if (!color || this.isThemeColor(color)) return '';\n if (variant === 'stroked') return `color:${color}; border-color:${color};`;\n return `background:${color}; color: var(--md-sys-color-on-primary);`;\n }\n colorDotBackground(value?: string): string {\n if (!value) return 'var(--md-sys-color-outline)';\n if (value === 'primary') return 'var(--md-sys-color-primary)';\n if (value === 'accent') return 'var(--md-sys-color-tertiary)';\n if (value === 'warn') return 'var(--md-sys-color-error)';\n return value;\n }\n enableCustomColor(\n obj: any,\n prop: string,\n fallback = 'var(--md-sys-color-primary)',\n ): void {\n if (!obj) return;\n const current = obj[prop];\n obj[prop] = this.isCustomColor(current) ? current : fallback;\n this.onMappingChanged();\n }\n enableCustomActionColor(\n action: any,\n fallback = 'var(--md-sys-color-primary)',\n ): void {\n if (!action) return;\n const current = action.color;\n action.color = this.isCustomColor(current) ? current : fallback;\n this.onActionsChanged();\n }\n\n addAction(): void {\n this.working = produce(this.working, (draft: any) => {\n draft.actions = draft.actions || [];\n draft.actions.push({\n id: 'newAction',\n icon: 'bolt',\n label: 'Ação',\n color: undefined,\n kind: 'icon',\n });\n });\n this.markDirty();\n this.verify();\n }\n removeAction(idx: number): void {\n this.working = produce(this.working, (draft: any) => {\n if (Array.isArray(draft.actions)) draft.actions.splice(idx, 1);\n });\n this.markDirty();\n this.verify();\n }\n onActionsChanged(): void {\n this.markDirty();\n this.verify();\n }\n ensureConfirmation(action: any): void {\n if (!action) return;\n if (!action.confirmation) action.confirmation = {};\n }\n setConfirmationField(\n action: any,\n field: 'title' | 'message',\n value: string,\n ): void {\n if (!action) return;\n this.ensureConfirmation(action);\n action.confirmation[field] = value;\n this.onActionsChanged();\n }\n applyConfirmationPreset(\n action: any,\n type?: 'danger' | 'warning' | 'info' | '',\n ): void {\n if (!action) return;\n this.ensureConfirmation(action);\n const normalized = (type || '') as any;\n action.confirmation.type = normalized || undefined;\n if (normalized === 'danger') {\n if (!action.confirmation.title)\n action.confirmation.title = 'Confirmar ação';\n if (!action.confirmation.message)\n action.confirmation.message =\n 'Esta ação pode ser irreversível. Deseja continuar?';\n }\n if (normalized === 'warning') {\n if (!action.confirmation.title) action.confirmation.title = 'Atenção';\n if (!action.confirmation.message)\n action.confirmation.message = 'Deseja prosseguir com esta ação?';\n }\n if (normalized === 'info') {\n if (!action.confirmation.title) action.confirmation.title = 'Confirmação';\n if (!action.confirmation.message)\n action.confirmation.message = 'Tem certeza que deseja continuar?';\n }\n this.onActionsChanged();\n }\n isGlobalPayloadInvalid(payload: any): boolean {\n if (typeof payload !== 'string') return false;\n const trimmed = payload.trim();\n if (!trimmed) return false;\n // Only validate if it looks like JSON object/array\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n JSON.parse(trimmed);\n return false;\n } catch {\n return true;\n }\n }\n return false;\n }\n\n applyGlobalPayloadExample(action: any): void {\n if (!action?.command) return;\n const cmd = action.command.replace(/^global[:.]/, '').trim();\n const entry = this.globalActionCatalog.find((e) => e.id === cmd);\n if (entry?.payloadSchema?.example) {\n action.globalPayload = JSON.stringify(\n entry.payloadSchema.example,\n null,\n 2,\n );\n this.onActionsChanged();\n }\n }\n\n globalPayloadExampleHint(action: any): string {\n if (!action?.command) return '';\n const cmd = action.command.replace(/^global[:.]/, '').trim();\n const entry = this.globalActionCatalog.find((e) => e.id === cmd);\n return entry?.payloadSchema?.example ? 'Exemplo disponível' : '';\n }\n\n globalPayloadSchemaTooltip(action: any): string {\n if (!action?.command) return 'Sem schema disponível.';\n const cmd = action.command.replace(/^global[:.]/, '').trim();\n const entry = this.globalActionCatalog.find((e) => e.id === cmd);\n const schema = entry?.payloadSchema;\n if (!schema) return 'Sem schema disponível.';\n const lines: string[] = [];\n if (entry?.label) lines.push(`${entry.label}`);\n if (entry?.description) lines.push(entry.description);\n const required = new Set<string>(\n (schema.required || []).map((r) => String(r)),\n );\n const props = schema.properties ? Object.entries(schema.properties) : [];\n if (props.length) {\n lines.push('Campos:');\n for (const [name, meta] of props) {\n const req = required.has(name) ? ' (OBRIGATÓRIO)' : '';\n const type = meta?.type ? `: ${meta.type}` : '';\n const desc = meta?.description ? ` — ${meta.description}` : '';\n lines.push(`- ${name}${type}${req}${desc}`);\n }\n }\n if (schema.example != null) {\n const example =\n typeof schema.example === 'object'\n ? JSON.stringify(schema.example, null, 2)\n : String(schema.example);\n lines.push('Exemplo:');\n lines.push(example);\n }\n return lines.join('\\n');\n }\n\n isSurfaceOpenCommand(action: { command?: string }): boolean {\n return this.getGlobalActionSchema(action)?.editorMode === 'surface-open';\n }\n\n getSurfaceOpenGlobalPayload(action: {\n command?: string;\n globalPayload?: string;\n }): SurfaceOpenPayload {\n const raw = String(action?.globalPayload || '').trim();\n if (raw) {\n try {\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return this.normalizeSurfaceOpenPayload(parsed as SurfaceOpenPayload);\n }\n } catch {\n // keep default payload while authoring invalid JSON elsewhere\n }\n }\n return this.normalizeSurfaceOpenPayload(undefined);\n }\n\n onSurfaceOpenGlobalPayloadChange(action: any, payload: SurfaceOpenPayload): void {\n action.command = 'global:surface.open';\n action.globalPayload = JSON.stringify(this.normalizeSurfaceOpenPayload(payload));\n this.onActionsChanged();\n }\n onGlobalActionSelected(id?: string): void {\n const action = this.globalActionCatalog.find((a) => a.id === id);\n if (!action) return;\n this.addGlobalActionFromCatalog(action);\n this.selectedGlobalActionId = undefined;\n }\n private addGlobalActionFromCatalog(action: GlobalActionCatalogEntry): void {\n const payload = action.payloadSchema?.example;\n const payloadText =\n payload != null && typeof payload === 'object'\n ? JSON.stringify(payload, null, 2)\n : payload;\n this.working = produce(this.working, (draft: any) => {\n draft.actions = draft.actions || [];\n draft.actions.push({\n id: action.id,\n icon: action.icon || 'bolt',\n label: action.label || action.id,\n color: undefined,\n kind: 'icon',\n command: `global:${action.id}`,\n globalPayload: payloadText,\n });\n });\n this.markDirty();\n this.verify();\n }\n\n metaTypeConfig(type?: string) {\n const t = (type || this.mappingMeta?.type || 'text') as any;\n return this.metaTypeConfigs.find((m) => m.type === t);\n }\n metaSupports(prop: string): boolean {\n return !!this.metaTypeConfig()?.props?.includes(prop);\n }\n\n ngDoCheck(): void {\n // Lightweight dirty tracking relying on lastJson updated by markDirty()\n // Leave empty to avoid heavy work each CD; explicit mutation handlers call markDirty() and verify().\n }\n\n reset(): void {\n try {\n this.isBusy$.next(true);\n const parsed = parseLegacyOrListDocument(JSON.parse(this.initialJson));\n this.applyIncomingDocument(parsed);\n this.lastJson = this.initialJson;\n this.mappingDirty = false;\n this.appliedMappingSnapshot = this.getMappingSnapshot();\n this.isDirty$.next(false);\n this.isValid$.next(true);\n } finally {\n this.isBusy$.next(false);\n }\n }\n\n onLayoutChanged(): void {\n this.markDirty();\n this.verify();\n }\n\n onSelectionChanged(): void {\n this.markDirty();\n this.verify();\n }\n\n onSkinGradientChanged(\n prop: 'from' | 'to' | 'angle',\n value: string | number,\n ): void {\n this.working = produce(this.working, (draft: any) => {\n const gradient = this.ensureSkinGradient(draft);\n if (prop === 'angle') {\n const numeric = Number(value);\n gradient.angle = Number.isFinite(numeric) ? numeric : 135;\n return;\n }\n gradient[prop] = String(value ?? '');\n });\n this.markDirty();\n }\n\n onSkinTypeChanged(type: SkinType): void {\n if (SKIN_PRESETS.includes(type as SkinPreset)) {\n this.applySkinPreset(type as SkinPreset);\n return;\n }\n this.onSkinChanged();\n }\n\n onSkinChanged(): void {\n this.working = produce(this.working, (draft: any) => {\n if ((draft?.skin?.type || 'elevated') === 'gradient-tile') {\n this.ensureSkinGradient(draft);\n }\n });\n this.markDirty();\n }\n\n private ensureSkinGradient(draft: any): {\n from: string;\n to: string;\n angle?: number;\n } {\n draft.skin ||= { type: 'elevated' };\n draft.skin.gradient ||= { from: '', to: '', angle: 135 };\n if (draft.skin.gradient.from == null) draft.skin.gradient.from = '';\n if (draft.skin.gradient.to == null) draft.skin.gradient.to = '';\n const angle = Number(draft.skin.gradient.angle);\n draft.skin.gradient.angle = Number.isFinite(angle) ? angle : 135;\n return draft.skin.gradient;\n }\n\n onQueryChanged(value: string): void {\n this.queryJson = value ?? '';\n if (!this.queryJson.trim()) {\n this.queryError = '';\n this.working = produce(this.working, (draft) => {\n (draft.dataSource as any).query = undefined;\n });\n this.markDirty();\n this.verify();\n return;\n }\n try {\n const parsed = JSON.parse(this.queryJson);\n this.queryError = '';\n this.working = produce(this.working, (draft) => {\n (draft.dataSource as any).query = parsed;\n });\n this.markDirty();\n this.verify();\n } catch {\n this.queryError = 'JSON invalido';\n this.verify();\n }\n }\n\n onPageSizeChange(value: any): void {\n const raw = value === '' || value === null ? undefined : Number(value);\n const nextValue =\n raw === undefined || !Number.isFinite(raw) ? raw : Math.trunc(raw);\n this.working = produce(this.working, (draft) => {\n (draft.layout as any).pageSize = nextValue as any;\n });\n this.markDirty();\n this.verify();\n }\n onUiChanged(): void {\n this.markDirty();\n this.verify();\n }\n onSkeletonChanged(value: any): void {\n const n = Number(value);\n const fixed = !Number.isFinite(n) || n < 0 ? 0 : Math.floor(n);\n this.skeletonCountInput = fixed;\n this.updateMappingDirty();\n this.markDirty();\n }\n addUiSortRow(): void {\n this.uiSortRows = [\n ...(this.uiSortRows || []),\n { label: '', field: '', dir: 'desc' },\n ];\n this.onUiSortRowsChanged();\n }\n removeUiSortRow(i: number): void {\n const arr = [...(this.uiSortRows || [])];\n arr.splice(i, 1);\n this.uiSortRows = arr;\n this.onUiSortRowsChanged();\n }\n onUiSortRowsChanged(): void {\n // Map rows to config.ui.sortOptions\n const opts = (this.uiSortRows || [])\n .filter((r) => (r.field || '').trim())\n .map((r) => ({\n label: (r.label || '').trim() || `${r.field},${r.dir || 'desc'}`,\n value: `${r.field},${r.dir || 'desc'}`,\n }));\n this.working = produce(this.working, (draft) => {\n (draft.ui ||= {}).sortOptions = opts as any;\n });\n this.onUiChanged();\n }\n isUiSortRowDuplicate(index: number): boolean {\n const rows = this.uiSortRows || [];\n const key =\n `${rows[index]?.field || ''},${rows[index]?.dir || 'desc'}`.trim();\n if (!key || !rows[index]?.field) return false;\n let count = 0;\n for (const r of rows) {\n const k = `${r?.field || ''},${r?.dir || 'desc'}`.trim();\n if (k === key) count++;\n }\n return count > 1;\n }\n isIconColorDuplicate(index: number): boolean {\n const arr = this.iconColorMapEntries || [];\n const key = (arr[index]?.key || '').trim();\n if (!key) return false;\n let count = 0;\n for (const e of arr) {\n if ((e?.key || '').trim() === key) count++;\n }\n return count > 1;\n }\n private hydrateUiEditorFromConfig(): void {\n const ui = (this.working.ui ||= {} as any);\n const arr = ui.sortOptions || [];\n const rows: Array<{\n label?: string;\n field?: string;\n dir?: 'asc' | 'desc';\n }> = [];\n for (const op of arr) {\n if (typeof op === 'string') {\n const [f, d] = op.split(',');\n rows.push({ label: op, field: f, dir: (d as any) || 'asc' });\n } else if (op && typeof op === 'object') {\n const v = String((op as any).value || '');\n const [f, d] = v.split(',');\n rows.push({\n label: (op as any).label,\n field: f,\n dir: (d as any) || 'asc',\n });\n }\n }\n this.uiSortRows = rows;\n }\n\n // Legacy method retained to avoid breaking references; no-op now.\n private loadFieldsIfNeeded(): void {\n /* replaced by setupSchemaWatcher */\n }\n\n updateSortConfig(): void {\n const field = (this.sortField || '').trim();\n const dir = this.sortDir || 'asc';\n this.working = produce(this.working, (draft) => {\n draft.dataSource = draft.dataSource || ({} as any);\n if (field) draft.dataSource.sort = [`${field},${dir}`];\n else (draft.dataSource as any).sort = undefined as any;\n });\n this.markDirty();\n this.verify();\n }\n\n applyTemplate(): void {\n this.working = this.composeWorkingFromVisualState();\n this.mappingDirty = false;\n this.appliedMappingSnapshot = this.getMappingSnapshot();\n this.markDirty();\n this.verify();\n }\n\n private composeWorkingFromVisualState(): NormalizedListConfig {\n const t: any = { ...(this.working.templating as any) };\n const build = (slot: any): TemplateDef | undefined => {\n if (!slot?.field) return undefined;\n const base = '${item.' + slot.field + '}';\n if (slot.type === 'text' || slot.type === 'html') {\n const pipe = (slot.extraPipe || '').trim();\n return {\n type: slot.type,\n expr: pipe ? base + '|' + pipe : base,\n class: slot.class,\n style: slot.style,\n } as any;\n }\n if (slot.type === 'chip')\n return {\n type: 'chip',\n expr: base,\n class: slot.class,\n style: slot.style,\n color: slot.chipColor,\n variant: slot.chipVariant,\n } as any;\n if (slot.type === 'icon') {\n const pipe = (slot.extraPipe || '').trim();\n const expr = pipe ? base + '|' + pipe : base;\n return {\n type: 'icon',\n expr,\n class: slot.class,\n style: slot.style,\n color: slot.iconColor,\n } as any;\n }\n if (slot.type === 'image') {\n const expr = (slot.imageUrl || '').trim() || base;\n return {\n type: 'image',\n expr,\n class: slot.class,\n style: slot.style,\n imageAlt: slot.imageAlt,\n } as any;\n }\n if (slot.type === 'image') {\n return {\n type: 'image',\n expr: base,\n class: slot.class,\n style: slot.style,\n imageAlt: slot.imageAlt,\n } as any;\n }\n if (slot.type === 'rating') {\n const rating: any = {};\n if (slot.ratingColor) rating.color = slot.ratingColor;\n if (slot.ratingSize) rating.size = Number(slot.ratingSize);\n if (slot.ratingMax) rating.max = Number(slot.ratingMax);\n const props = Object.keys(rating).length ? { rating } : undefined;\n return {\n type: 'rating',\n expr: base,\n class: slot.class,\n style: slot.style,\n props,\n } as any;\n }\n if (slot.type === 'currency') {\n const code = slot.currencyCode?.trim();\n const loc = slot.locale?.trim();\n const param = code ? (loc ? code + ':' + loc : code) : '';\n return {\n type: 'currency',\n expr: param ? base + '|' + param : base,\n class: slot.class,\n style: slot.style,\n } as any;\n }\n if (slot.type === 'date') {\n const loc = slot.locale?.trim();\n const style = slot.dateStyle?.trim();\n let param = '';\n if (loc && style) param = loc + ':' + style;\n else if (loc) param = loc;\n else if (style) param = ':' + style;\n return {\n type: 'date',\n expr: param ? base + '|' + param : base,\n class: slot.class,\n style: slot.style,\n } as any;\n }\n if (slot.type === 'icon') {\n const pipe = (slot.extraPipe || '').trim();\n const expr = pipe ? base + '|' + pipe : base;\n return {\n type: 'icon',\n expr,\n class: slot.class,\n style: slot.style,\n } as any;\n }\n return undefined;\n };\n const buildFreeform = (slot: any): TemplateDef | undefined => {\n if (!slot?.type) return undefined;\n const raw = (slot.expr || '').trim();\n const pipe = (slot.extraPipe || '').trim();\n const expr = pipe ? (raw ? raw + '|' + pipe : raw) : raw;\n if (!expr && slot.type !== 'image') return undefined;\n if (slot.type === 'chip') {\n return {\n type: 'chip',\n expr,\n class: slot.class,\n style: slot.style,\n color: slot.chipColor,\n variant: slot.chipVariant,\n } as any;\n }\n if (slot.type === 'icon') {\n return {\n type: 'icon',\n expr,\n class: slot.class,\n style: slot.style,\n color: slot.iconColor,\n } as any;\n }\n if (slot.type === 'rating') {\n const rating: any = {};\n if (slot.ratingColor) rating.color = slot.ratingColor;\n if (slot.ratingSize) rating.size = Number(slot.ratingSize);\n if (slot.ratingMax) rating.max = Number(slot.ratingMax);\n const props = Object.keys(rating).length ? { rating } : undefined;\n return {\n type: 'rating',\n expr,\n class: slot.class,\n style: slot.style,\n props,\n } as any;\n }\n if (slot.type === 'image') {\n const imgExpr = (slot.imageUrl || '').trim();\n if (!imgExpr) return undefined;\n return {\n type: 'image',\n expr: imgExpr,\n class: slot.class,\n style: slot.style,\n imageAlt: slot.imageAlt,\n } as any;\n }\n return {\n type: slot.type,\n expr,\n class: slot.class,\n style: slot.style,\n } as any;\n };\n const p = build(this.mappingPrimary);\n const s = build(this.mappingSecondary);\n const m = build(this.mappingMeta);\n const tr = this.mappingTrailing.field\n ? build(this.mappingTrailing)\n : undefined;\n const l =\n this.mappingLeading?.field &&\n this.mappingLeading.type !== 'icon' &&\n this.mappingLeading.type !== 'image'\n ? build(this.mappingLeading)\n : undefined;\n\n if (p) t.primary = p;\n if (s) {\n t.secondary = s;\n // Garantir que a UI tenha espaço para exibir o secondary\n const currentLines = Number(this.working.layout.lines as any) || 1;\n if (currentLines < 2) this.working.layout.lines = 2 as any;\n }\n if (\n (this.mappingMeta?.type || 'text') === 'text' &&\n this.mappingMetaFields &&\n this.mappingMetaFields.length\n ) {\n const parts = this.mappingMetaFields.map((f, idx) => {\n const token = '${item.' + f + '}';\n if (idx === 1 && this.mappingMetaWrapSecondInParens)\n return '(' + token + ')';\n return token;\n });\n const sep = this.mappingMetaSeparator ?? ' ';\n t.meta = {\n type: 'text',\n expr: parts.join(sep),\n class: this.mappingMeta.class,\n style: this.mappingMeta.style,\n } as any;\n } else if (m) {\n t.meta = m;\n }\n if (tr) t.trailing = tr;\n if (l) t.leading = l;\n if (\n this.mappingLeading?.type === 'icon' &&\n this.mappingLeading.icon &&\n this.mappingLeading.icon.trim()\n ) {\n t.leading = {\n type: 'icon',\n expr: this.mappingLeading.icon.trim(),\n class: this.mappingLeading.class,\n style: this.mappingLeading.style,\n color: this.mappingLeading.iconColor as any,\n } as TemplateDef;\n }\n if (\n this.mappingLeading?.type === 'image' &&\n this.mappingLeading.imageUrl &&\n this.mappingLeading.imageUrl.trim()\n ) {\n t.leading = {\n type: 'image',\n expr: this.mappingLeading.imageUrl.trim(),\n class: this.mappingLeading.class,\n style: this.mappingLeading.style,\n imageAlt: this.mappingLeading.imageAlt,\n badge: this.mappingLeading.badgeText\n ? {\n expr: this.mappingLeading.badgeText,\n color: this.mappingLeading.badgeColor as any,\n variant: (this.mappingLeading.badgeVariant as any) || 'filled',\n }\n : undefined,\n } as any;\n }\n\n const sh = buildFreeform(this.mappingSectionHeader);\n if (sh) t.sectionHeader = sh;\n const es = buildFreeform(this.mappingEmptyState);\n if (es) t.emptyState = es;\n\n if (this.mappingMeta?.placement) {\n (t as any).metaPlacement = this.mappingMeta.placement;\n }\n (t as any).metaPrefixIcon =\n (this.mappingMetaPrefixIcon || '').trim() || undefined;\n // Status overlay and icon color map\n (t as any).statusPosition = this.statusPosition || undefined;\n if (this.iconColorMapEntries && this.iconColorMapEntries.length) {\n const map: Record<string, string> = {} as any;\n for (const e of this.iconColorMapEntries) {\n const k = (e.key || '').trim();\n if (!k) continue;\n if (e.color) map[k] = e.color as string;\n }\n (t as any).iconColorMap = Object.keys(map).length ? map : undefined;\n } else {\n (t as any).iconColorMap = undefined;\n }\n if (this.chipColorMapEntries && this.chipColorMapEntries.length) {\n const map: Record<string, string> = {} as any;\n for (const e of this.chipColorMapEntries) {\n const k = (e.key || '').trim();\n if (!k) continue;\n if (e.color) map[k] = e.color as string;\n }\n (t as any).chipColorMap = Object.keys(map).length ? map : undefined;\n } else {\n (t as any).chipColorMap = undefined;\n }\n if (this.chipLabelMapEntries && this.chipLabelMapEntries.length) {\n const map: Record<string, string> = {} as any;\n for (const e of this.chipLabelMapEntries) {\n const k = (e.key || '').trim();\n const v = (e.label || '').trim();\n if (!k || !v) continue;\n map[k] = v;\n }\n (t as any).chipLabelMap = Object.keys(map).length ? map : undefined;\n } else {\n (t as any).chipLabelMap = undefined;\n }\n // Apply features\n if (this.features && this.features.length) {\n t.features = this.features\n .filter((f) => (f.expr || '').trim().length > 0)\n .map((f) => ({\n icon: f.icon,\n expr: f.expr,\n class: f.class,\n style: f.style,\n }));\n } else {\n t.features = undefined as any;\n }\n (t as any).featuresVisible = this.featuresVisible;\n (t as any).featuresMode = this.featuresMode;\n (t as any).skeleton =\n this.skeletonCountInput > 0\n ? { count: this.skeletonCountInput }\n : undefined;\n\n return produce(this.working, (draft) => {\n (draft as any).templating = t;\n }) as NormalizedListConfig;\n }\n\n private ensureMappingApplied(): void {\n if (this.mappingDirty) {\n this.working = this.composeWorkingFromVisualState();\n this.mappingDirty = false;\n this.appliedMappingSnapshot = this.getMappingSnapshot();\n }\n }\n\n onMappingChanged(): void {\n this.updateMappingDirty();\n this.markDirty();\n if (this.featuresSyncWithMeta) {\n this.generateFeaturesFromMetaComposition();\n }\n this.verify();\n }\n\n addFeature(): void {\n this.features = [...(this.features || []), { icon: '', expr: '' }];\n this.onFeaturesChanged();\n }\n removeFeature(idx: number): void {\n const arr = [...(this.features || [])];\n arr.splice(idx, 1);\n this.features = arr;\n this.onFeaturesChanged();\n }\n onFeaturesChanged(): void {\n this.updateMappingDirty();\n this.markDirty();\n this.verify();\n }\n\n // Icon color map editor helpers\n addIconColorEntry(): void {\n this.iconColorMapEntries = [\n ...(this.iconColorMapEntries || []),\n { key: '', color: undefined },\n ];\n this.onIconColorMapChanged();\n }\n removeIconColorEntry(i: number): void {\n const arr = [...(this.iconColorMapEntries || [])];\n arr.splice(i, 1);\n this.iconColorMapEntries = arr;\n this.onIconColorMapChanged();\n }\n onIconColorMapChanged(): void {\n // Normalize: last value wins, remove vazios\n const map = new Map<string, string | undefined>();\n for (const e of this.iconColorMapEntries || []) {\n const k = (e?.key || '').trim();\n if (!k) continue;\n map.set(k, (e?.color as any) || undefined);\n }\n this.iconColorMapEntries = Array.from(map.entries()).map(\n ([key, color]) => ({ key, color }),\n ) as any;\n this.updateMappingDirty();\n this.markDirty();\n }\n\n addChipColorEntry(): void {\n this.chipColorMapEntries = [\n ...(this.chipColorMapEntries || []),\n { key: '', color: undefined },\n ];\n this.onChipColorMapChanged();\n }\n removeChipColorEntry(i: number): void {\n const arr = [...(this.chipColorMapEntries || [])];\n arr.splice(i, 1);\n this.chipColorMapEntries = arr;\n this.onChipColorMapChanged();\n }\n onChipColorMapChanged(): void {\n const map = new Map<string, string | undefined>();\n for (const e of this.chipColorMapEntries || []) {\n const k = (e?.key || '').trim();\n if (!k) continue;\n map.set(k, (e?.color as any) || undefined);\n }\n this.chipColorMapEntries = Array.from(map.entries()).map(\n ([key, color]) => ({ key, color }),\n ) as any;\n this.updateMappingDirty();\n this.markDirty();\n }\n\n addChipLabelEntry(): void {\n this.chipLabelMapEntries = [\n ...(this.chipLabelMapEntries || []),\n { key: '', label: '' },\n ];\n this.onChipLabelMapChanged();\n }\n removeChipLabelEntry(i: number): void {\n const arr = [...(this.chipLabelMapEntries || [])];\n arr.splice(i, 1);\n this.chipLabelMapEntries = arr;\n this.onChipLabelMapChanged();\n }\n onChipLabelMapChanged(): void {\n const map = new Map<string, string>();\n for (const e of this.chipLabelMapEntries || []) {\n const k = (e?.key || '').trim();\n const v = (e?.label || '').trim();\n if (!k || !v) continue;\n map.set(k, v);\n }\n this.chipLabelMapEntries = Array.from(map.entries()).map(\n ([key, label]) => ({ key, label }),\n ) as any;\n this.updateMappingDirty();\n this.markDirty();\n }\n\n // Pipe assistant helper: sets extraPipe for a given mapping and marks dirty\n setPipe(target: any, spec: string): void {\n if (!target) return;\n (target as any).extraPipe = spec;\n this.onMappingChanged();\n }\n\n // ===============\n // Expr helpers (Features): click-to-insert fields and literals\n // ===============\n insertFeatureToken(\n index: number,\n inputEl: HTMLInputElement | HTMLTextAreaElement,\n field: string,\n ): void {\n const token = '${item.' + field + '}';\n this.insertIntoFeatureExpr(index, inputEl, token);\n }\n insertLiteralAt(\n index: number,\n inputEl: HTMLInputElement | HTMLTextAreaElement,\n text: string,\n ): void {\n this.insertIntoFeatureExpr(index, inputEl, text);\n }\n wrapSelectionAt(\n index: number,\n inputEl: HTMLInputElement | HTMLTextAreaElement,\n left: string,\n right: string,\n ): void {\n const start = inputEl.selectionStart ?? inputEl.value.length;\n const end = inputEl.selectionEnd ?? start;\n const value = this.features[index]?.expr || '';\n const before = value.slice(0, start);\n const sel = value.slice(start, end);\n const after = value.slice(end);\n const newExpr = before + left + sel + right + after;\n this.updateFeatureExpr(\n index,\n inputEl,\n newExpr,\n start + left.length + sel.length + right.length,\n );\n }\n private insertIntoFeatureExpr(\n index: number,\n inputEl: HTMLInputElement | HTMLTextAreaElement,\n text: string,\n ): void {\n const start = inputEl.selectionStart ?? inputEl.value.length;\n const end = inputEl.selectionEnd ?? start;\n const value = this.features[index]?.expr || '';\n const newExpr = value.slice(0, start) + text + value.slice(end);\n const newCaret = start + text.length;\n this.updateFeatureExpr(index, inputEl, newExpr, newCaret);\n }\n private updateFeatureExpr(\n index: number,\n inputEl: HTMLInputElement | HTMLTextAreaElement,\n newExpr: string,\n caretPos: number,\n ): void {\n const arr = [...(this.features || [])];\n const old = arr[index] || { icon: '', expr: '' };\n arr[index] = { ...old, expr: newExpr };\n this.features = arr;\n this.onFeaturesChanged();\n // restore caret\n setTimeout(() => {\n try {\n inputEl.focus();\n inputEl.selectionStart = caretPos;\n inputEl.selectionEnd = caretPos;\n } catch {}\n });\n }\n // no-op helper intentionally removed (index is provided explicitly by the template)\n\n private hydrateMappingFromTemplating(templ?: any): void {\n if (!templ) return;\n const parseExpr = (expr?: string): { field?: string; param?: string } => {\n if (!expr) return {};\n const [base, param] = expr.split('|').map((s) => s.trim());\n const m = base.match(/\\$\\{\\s*item\\.([^}]+)\\s*}/);\n return { field: m?.[1], param };\n };\n const parseCurrency = (\n param?: string,\n ): { currencyCode?: string; locale?: string } => {\n if (!param) return {};\n const [code, loc] = param\n .split(':')\n .map((s) => s?.trim())\n .filter(Boolean) as string[];\n return { currencyCode: code, locale: loc };\n };\n const parseDate = (\n param?: string,\n ): { locale?: string; dateStyle?: any } => {\n if (!param) return {} as any;\n const [p1, p2] = param.split(':').map((s) => s?.trim());\n if (p1 && p2) return { locale: p1, dateStyle: p2 as any };\n if (p1 && !p2 && /^(short|medium|long|full)$/i.test(p1))\n return { dateStyle: p1 as any };\n return { locale: p1 } as any;\n };\n\n if (templ.primary) {\n const { field, param } = parseExpr(templ.primary.expr);\n const base: any = {\n field,\n type: templ.primary.type || 'text',\n class: templ.primary.class,\n style: templ.primary.style,\n };\n if (templ.primary.type === 'currency')\n Object.assign(base, parseCurrency(param));\n if (templ.primary.type === 'date') Object.assign(base, parseDate(param));\n if (templ.primary.type === 'text' || templ.primary.type === 'html')\n base.extraPipe = param;\n this.mappingPrimary = base;\n }\n if (templ.secondary) {\n const { field, param } = parseExpr(templ.secondary.expr);\n const base: any = {\n field,\n type: templ.secondary.type || 'text',\n class: templ.secondary.class,\n style: templ.secondary.style,\n };\n if (templ.secondary.type === 'currency')\n Object.assign(base, parseCurrency(param));\n if (templ.secondary.type === 'date')\n Object.assign(base, parseDate(param));\n if (templ.secondary.type === 'text' || templ.secondary.type === 'html')\n base.extraPipe = param;\n this.mappingSecondary = base;\n }\n if (templ.meta) {\n const { field, param } = parseExpr(templ.meta.expr);\n const base: any = {\n field,\n type: templ.meta.type || 'text',\n class: templ.meta.class,\n style: templ.meta.style,\n };\n if (templ.meta.type === 'currency')\n Object.assign(base, parseCurrency(param));\n if (templ.meta.type === 'date') Object.assign(base, parseDate(param));\n if (\n templ.meta.type === 'text' ||\n templ.meta.type === 'html' ||\n templ.meta.type === 'icon'\n )\n base.extraPipe = param;\n this.mappingMeta = base;\n if (templ.metaPlacement) this.mappingMeta.placement = templ.metaPlacement;\n if ((templ as any).metaPrefixIcon)\n this.mappingMetaPrefixIcon = (templ as any).metaPrefixIcon;\n if (templ.meta?.color) this.mappingMeta.chipColor = templ.meta.color;\n if (templ.meta?.variant)\n this.mappingMeta.chipVariant = templ.meta.variant;\n if (templ.meta?.type === 'icon' && (templ.meta as any).color)\n this.mappingMeta.iconColor = (templ.meta as any).color;\n if (templ.meta?.type === 'image' && (templ.meta as any).imageAlt)\n this.mappingMeta.imageAlt = (templ.meta as any).imageAlt;\n if ((templ.meta as any)?.props?.rating) {\n const r = (templ.meta as any).props.rating;\n if (r?.color) this.mappingMeta.ratingColor = r.color;\n if (r?.size) this.mappingMeta.ratingSize = r.size;\n if (r?.max) this.mappingMeta.ratingMax = r.max;\n }\n // Try to detect composed text: split by common separators if it contains ${item.\n if (\n typeof templ.meta?.expr === 'string' &&\n /\\$\\{\\s*item\\./.test(templ.meta.expr)\n ) {\n const guessSep = / • /.test(templ.meta.expr)\n ? ' • '\n : /,\\s*/.test(templ.meta.expr)\n ? ', '\n : ' ';\n const matches = Array.from(\n templ.meta.expr.matchAll(/\\$\\{\\s*item\\.([^}]+)\\s*}/g),\n ).map((m: any) => m[1] as string);\n if (matches.length >= 2) {\n this.mappingMetaFields = matches as any;\n this.mappingMetaSeparator = guessSep as any;\n this.mappingMetaWrapSecondInParens =\n /\\(\\s*\\$\\{\\s*item\\.[^}]+\\}\\s*\\)/.test(templ.meta.expr);\n }\n }\n }\n if (templ.trailing) {\n const { field, param } = parseExpr(templ.trailing.expr);\n const base: any = {\n field,\n type: templ.trailing.type || 'text',\n class: templ.trailing.class,\n style: templ.trailing.style,\n };\n if (templ.trailing.type === 'currency')\n Object.assign(base, parseCurrency(param));\n if (templ.trailing.type === 'date') Object.assign(base, parseDate(param));\n if (\n templ.trailing.type === 'icon' ||\n templ.trailing.type === 'text' ||\n templ.trailing.type === 'html'\n )\n base.extraPipe = param;\n this.mappingTrailing = base;\n if (templ.trailing?.color)\n this.mappingTrailing.chipColor = templ.trailing.color;\n if (templ.trailing?.variant)\n this.mappingTrailing.chipVariant = templ.trailing.variant;\n if (\n templ.trailing?.type === 'image' &&\n typeof templ.trailing.expr === 'string'\n )\n this.mappingTrailing.imageUrl = templ.trailing.expr;\n if (templ.trailing?.type === 'image' && (templ.trailing as any).imageAlt)\n this.mappingTrailing.imageAlt = (templ.trailing as any).imageAlt;\n if (templ.trailing?.type === 'icon' && (templ.trailing as any).color)\n this.mappingTrailing.iconColor = (templ.trailing as any).color;\n if ((templ.trailing as any)?.props?.rating) {\n const r = (templ.trailing as any).props.rating;\n if (r?.color) this.mappingTrailing.ratingColor = r.color;\n if (r?.size) this.mappingTrailing.ratingSize = r.size;\n if (r?.max) this.mappingTrailing.ratingMax = r.max;\n }\n }\n // Overlay position and icon colors\n this.statusPosition = (templ as any)?.statusPosition as any;\n const icm = (templ as any)?.iconColorMap as\n | Record<string, string>\n | undefined;\n this.iconColorMapEntries = Object.entries(icm || {}).map(([k, v]) => ({\n key: k,\n color: v,\n })) as any;\n if (\n (this.mappingTrailing?.field || '').toLowerCase() === 'status' &&\n (!this.iconColorMapEntries || this.iconColorMapEntries.length === 0)\n ) {\n this.iconColorMapEntries = [\n { key: 'PLANEJADA', color: 'primary' },\n { key: 'EM_ANDAMENTO', color: 'accent' },\n { key: 'PAUSADA', color: 'accent' },\n { key: 'CONCLUIDA', color: 'primary' },\n { key: 'FALHOU', color: 'warn' },\n ];\n }\n if (\n templ.leading?.type === 'icon' &&\n typeof templ.leading.expr === 'string'\n ) {\n this.mappingLeading = {\n type: 'icon',\n icon: templ.leading.expr,\n class: templ.leading.class,\n style: templ.leading.style,\n iconColor: (templ.leading as any).color,\n } as any;\n } else if (\n templ.leading?.type === 'image' &&\n typeof templ.leading.expr === 'string'\n ) {\n this.mappingLeading = {\n type: 'image',\n imageUrl: templ.leading.expr,\n imageAlt: templ.leading.imageAlt,\n badgeText: templ.leading?.badge?.expr,\n badgeColor: templ.leading?.badge?.color,\n badgeVariant: templ.leading?.badge?.variant,\n class: templ.leading.class,\n style: templ.leading.style,\n } as any;\n } else if (\n templ.leading?.type &&\n ['text', 'chip', 'rating', 'html'].includes(templ.leading.type)\n ) {\n const { field, param } = parseExpr(templ.leading.expr);\n const base: any = {\n field,\n type: templ.leading.type,\n class: templ.leading.class,\n style: templ.leading.style,\n };\n if (templ.leading.type === 'text' || templ.leading.type === 'html')\n base.extraPipe = param;\n if (templ.leading.type === 'chip') {\n base.chipColor = templ.leading.color;\n base.chipVariant = templ.leading.variant;\n }\n if (\n templ.leading.type === 'rating' &&\n (templ.leading as any)?.props?.rating\n ) {\n const r = (templ.leading as any).props.rating;\n if (r?.color) base.ratingColor = r.color;\n if (r?.size) base.ratingSize = r.size;\n if (r?.max) base.ratingMax = r.max;\n }\n this.mappingLeading = base;\n }\n\n if (templ.sectionHeader) {\n const shExpr = templ.sectionHeader.expr || '';\n const shPipe = this.splitTopLevelPipe(shExpr);\n this.mappingSectionHeader = {\n type: templ.sectionHeader.type || 'text',\n expr: shPipe.baseExpr,\n class: templ.sectionHeader.class,\n style: templ.sectionHeader.style,\n chipColor: templ.sectionHeader.color,\n chipVariant: templ.sectionHeader.variant,\n imageUrl:\n templ.sectionHeader.type === 'image'\n ? templ.sectionHeader.expr\n : undefined,\n imageAlt: templ.sectionHeader.imageAlt,\n iconColor: (templ.sectionHeader as any).color,\n extraPipe:\n templ.sectionHeader.type === 'text' ||\n templ.sectionHeader.type === 'html' ||\n templ.sectionHeader.type === 'icon'\n ? shPipe.pipe\n : undefined,\n } as any;\n if ((templ.sectionHeader as any)?.props?.rating) {\n const r = (templ.sectionHeader as any).props.rating;\n if (r?.color) this.mappingSectionHeader.ratingColor = r.color;\n if (r?.size) this.mappingSectionHeader.ratingSize = r.size;\n if (r?.max) this.mappingSectionHeader.ratingMax = r.max;\n }\n }\n if (templ.emptyState) {\n const esExpr = templ.emptyState.expr || '';\n const esPipe = this.splitTopLevelPipe(esExpr);\n this.mappingEmptyState = {\n type: templ.emptyState.type || 'text',\n expr: esPipe.baseExpr,\n class: templ.emptyState.class,\n style: templ.emptyState.style,\n chipColor: templ.emptyState.color,\n chipVariant: templ.emptyState.variant,\n imageUrl:\n templ.emptyState.type === 'image' ? templ.emptyState.expr : undefined,\n imageAlt: templ.emptyState.imageAlt,\n iconColor: (templ.emptyState as any).color,\n extraPipe:\n templ.emptyState.type === 'text' ||\n templ.emptyState.type === 'html' ||\n templ.emptyState.type === 'icon'\n ? esPipe.pipe\n : undefined,\n } as any;\n if ((templ.emptyState as any)?.props?.rating) {\n const r = (templ.emptyState as any).props.rating;\n if (r?.color) this.mappingEmptyState.ratingColor = r.color;\n if (r?.size) this.mappingEmptyState.ratingSize = r.size;\n if (r?.max) this.mappingEmptyState.ratingMax = r.max;\n }\n }\n\n if (Array.isArray(templ.features)) {\n this.features = templ.features.map((f: any) => ({\n icon: f.icon,\n expr: f.expr,\n class: f.class,\n style: f.style,\n }));\n }\n this.featuresVisible = templ.featuresVisible !== false;\n this.featuresMode = (templ.featuresMode as any) || 'icons+labels';\n this.skeletonCountInput = templ.skeleton?.count ?? this.skeletonCountInput;\n\n const ccm = (templ as any)?.chipColorMap as\n | Record<string, string>\n | undefined;\n this.chipColorMapEntries = Object.entries(ccm || {}).map(([k, v]) => ({\n key: k,\n color: v,\n })) as any;\n const clm = (templ as any)?.chipLabelMap as\n | Record<string, string>\n | undefined;\n this.chipLabelMapEntries = Object.entries(clm || {}).map(([k, v]) => ({\n key: k,\n label: v,\n })) as any;\n }\n\n markDirty(): void {\n setTimeout(() => {\n this.document = this.buildCurrentDocument();\n if (this.mappingDirty) {\n this.isDirty$.next(true);\n return;\n }\n const current = JSON.stringify(\n serializeListAuthoringDocument(this.document),\n );\n this.lastJson = current;\n this.isDirty$.next(current !== this.initialJson);\n });\n }\n\n private getMappingSnapshot(): string {\n return JSON.stringify({\n mappingPrimary: this.mappingPrimary,\n mappingSecondary: this.mappingSecondary,\n mappingMeta: this.mappingMeta,\n mappingMetaFields: this.mappingMetaFields,\n mappingMetaSeparator: this.mappingMetaSeparator,\n mappingMetaWrapSecondInParens: this.mappingMetaWrapSecondInParens,\n mappingMetaPrefixIcon: this.mappingMetaPrefixIcon,\n mappingTrailing: this.mappingTrailing,\n mappingLeading: this.mappingLeading,\n mappingSectionHeader: this.mappingSectionHeader,\n mappingEmptyState: this.mappingEmptyState,\n statusPosition: this.statusPosition,\n iconColorMapEntries: this.iconColorMapEntries,\n chipColorMapEntries: this.chipColorMapEntries,\n chipLabelMapEntries: this.chipLabelMapEntries,\n features: this.features,\n featuresVisible: this.featuresVisible,\n featuresMode: this.featuresMode,\n skeletonCountInput: this.skeletonCountInput,\n });\n }\n private updateMappingDirty(): void {\n this.mappingDirty =\n this.getMappingSnapshot() !== this.appliedMappingSnapshot;\n }\n\n private resolveGlobalActionCatalog(): GlobalActionCatalogEntry[] {\n const injected = inject(GLOBAL_ACTION_CATALOG, { optional: true }) as any;\n if (!injected) return PRAXIS_GLOBAL_ACTION_CATALOG.slice();\n return getGlobalActionCatalog(injected as any).map((entry) => ({\n ...entry,\n label: this.getGlobalActionEntryLabel(entry),\n description: this.getGlobalActionEntryDescription(entry),\n }));\n }\n\n private getGlobalActionEntryLabel(entry: { id?: string; label?: string }): string {\n if (entry?.id === 'surface.open') {\n return this.i18n.t('action.surfaceOpen.label', undefined, entry.label || '', SURFACE_OPEN_I18N_NAMESPACE);\n }\n return entry?.label || '';\n }\n\n private getGlobalActionEntryDescription(entry: { id?: string; description?: string }): string {\n if (entry?.id === 'surface.open') {\n return this.i18n.t('action.surfaceOpen.description', undefined, entry.description || '', SURFACE_OPEN_I18N_NAMESPACE);\n }\n return entry?.description || '';\n }\n\n private getGlobalActionSchema(action: { command?: string }) {\n const id = String(action?.command || '').replace(/^global[:.]/, '').trim();\n return getGlobalActionUiSchema(id);\n }\n\n private normalizeSurfaceOpenPayload(payload?: Partial<SurfaceOpenPayload>): SurfaceOpenPayload {\n return {\n presentation: payload?.presentation === 'drawer' ? 'drawer' : 'modal',\n title: payload?.title,\n subtitle: payload?.subtitle,\n icon: payload?.icon,\n size:\n payload?.size && Object.keys(payload.size).length\n ? { ...payload.size }\n : undefined,\n widget: {\n id: String(payload?.widget?.id || ''),\n inputs: { ...(payload?.widget?.inputs || {}) },\n bindingOrder: payload?.widget?.bindingOrder?.length\n ? [...payload.widget.bindingOrder]\n : undefined,\n },\n bindings: payload?.bindings?.length\n ? payload.bindings.map((binding: NonNullable<SurfaceOpenPayload['bindings']>[number]) => ({ ...binding }))\n : [],\n context:\n payload?.context && typeof payload.context === 'object' && !Array.isArray(payload.context)\n ? { ...payload.context }\n : undefined,\n };\n }\n\n verify(): void {\n setTimeout(() => {\n const diagnostics = validateListAuthoringDocument(\n this.buildCurrentDocument(),\n {\n schemaFieldNames: this.fields,\n },\n );\n const hasErrors = diagnostics.some((item) => item.level === 'error');\n this.isValid$.next(!hasErrors && !this.queryError);\n });\n }\n\n // UI editor hydration already called in ctor\n // Ensure UI.sortOptions are kept when saving via Settings Panel\n\n inferFromFields(): void {\n if (!this.fields?.length) return;\n const inferred = inferListAuthoringDocument(this.buildCurrentDocument(), {\n schemaFieldNames: this.fields,\n });\n this.applyIncomingDocument(inferred);\n this.markDirty();\n this.verify();\n }\n\n // Generate Features from Meta composition\n generateFeaturesFromMetaComposition(): void {\n const fields = (this.mappingMetaFields || []).filter(Boolean);\n if (!fields.length) return;\n const created = fields.map((f) => ({\n icon: this.suggestIcon(f),\n expr: '${item.' + f + '}',\n }));\n const existing = [...(this.features || [])];\n for (const nf of created) {\n const idx = existing.findIndex((x) => (x.expr || '').trim() === nf.expr);\n if (idx >= 0) {\n // update icon if missing\n if (!existing[idx].icon && nf.icon) existing[idx].icon = nf.icon;\n } else {\n existing.push(nf);\n }\n }\n this.features = existing;\n this.featuresVisible = true;\n this.featuresMode = this.featuresMode || 'icons+labels';\n this.onFeaturesChanged();\n }\n metaComposePreview(): string {\n if (!this.mappingMetaFields?.length) return '';\n const parts = this.mappingMetaFields.map((f, idx) => {\n const token = '${item.' + f + '}';\n if (idx === 1 && this.mappingMetaWrapSecondInParens)\n return '(' + token + ')';\n return token;\n });\n const sep = this.mappingMetaSeparator ?? ' ';\n return parts.join(sep);\n }\n\n private splitTopLevelPipe(expr: string): { baseExpr: string; pipe?: string } {\n let inTpl = 0;\n for (let i = 0; i < expr.length; i++) {\n const c = expr[i];\n if (c === '$' && expr[i + 1] === '{') {\n inTpl++;\n i++;\n continue;\n }\n if (c === '}' && inTpl > 0) {\n inTpl--;\n continue;\n }\n if (c === '|' && inTpl === 0) {\n return {\n baseExpr: expr.slice(0, i).trim(),\n pipe: expr.slice(i + 1).trim(),\n };\n }\n }\n return { baseExpr: expr.trim() };\n }\n\n private validateImageUrl(url?: string): boolean {\n const v = (url || '').trim();\n if (!v) return false;\n if (v.startsWith('${') && v.endsWith('}')) return true;\n if (v.startsWith('http://') || v.startsWith('https://')) return true;\n if (v.startsWith('data:')) return true;\n if (v.startsWith('./') || v.startsWith('../')) return true;\n if (v.startsWith('assets/')) return true;\n if (v.startsWith('/')) return true;\n return false;\n }\n isImageUrlInvalid(url?: string): boolean {\n const v = (url || '').trim();\n if (!v) return false;\n return !this.validateImageUrl(v);\n }\n isImageUrlRequiredInvalid(url?: string): boolean {\n const v = (url || '').trim();\n if (!v) return true;\n return !this.validateImageUrl(v);\n }\n\n isRatingSizeInvalid(value?: number): boolean {\n if (value == null) return false;\n const n = Number(value);\n return !Number.isFinite(n) || n < 10 || n > 32;\n }\n isRatingMaxInvalid(value?: number): boolean {\n if (value == null) return false;\n const n = Number(value);\n return !Number.isFinite(n) || n < 1 || n > 10;\n }\n private suggestIcon(field: string): string {\n const f = (field || '').toLowerCase();\n if (/(price|amount|value|total|cost|salary)/.test(f)) return 'attach_money';\n if (/(date|time|day|hour)/.test(f)) return 'schedule';\n if (/(star|rating|score)/.test(f)) return 'star';\n if (/city/.test(f)) return 'location_city';\n if (/(country|nation|world)/.test(f)) return 'public';\n if (/(location|address)/.test(f)) return 'location_on';\n if (/status/.test(f)) return 'info';\n if (/(tag|label)/.test(f)) return 'label';\n if (/email/.test(f)) return 'mail';\n if (/(phone|mobile|cell)/.test(f)) return 'call';\n return '';\n }\n\n getTypeIcon(type: string): string {\n const t = (type || '').toLowerCase();\n switch (t) {\n case 'text':\n return 'text_fields';\n case 'currency':\n return 'attach_money';\n case 'date':\n return 'calendar_today';\n case 'chip':\n return 'label';\n case 'rating':\n return 'star';\n case 'html':\n return 'code';\n case 'icon':\n return 'emoji_symbols';\n case 'image':\n return 'image';\n default:\n return 'horizontal_rule';\n }\n }\n}\n\n","<mat-tab-group class=\"list-editor-tabs\">\n <mat-tab label=\"Dados\">\n <div class=\"editor-content\">\n <div class=\"g g-1-auto gap-8 ai-center\">\n <div class=\"muted\">\n Observação: ajustes aplicados pelo assistente substituem o objeto de\n configuração inteiro.\n </div>\n <button\n mat-icon-button\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"O applyConfigFromAdapter não faz merge profundo. Garanta que o adapter envie a config completa.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Recurso (API)</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.dataSource.resourcePath\"\n (ngModelChange)=\"onResourcePathChange($event)\"\n placeholder=\"ex.: users\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Endpoint do recurso (resourcePath).\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Query (JSON)</mat-label>\n <textarea\n matInput\n rows=\"3\"\n [(ngModel)]=\"queryJson\"\n (ngModelChange)=\"onQueryChanged($event)\"\n placeholder='ex.: &#123;\"status\":\"active\",\"department\":\"sales\"&#125;'\n ></textarea>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Opcional. Use JSON válido para filtros iniciais.\"\n *ngIf=\"!queryError\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error *ngIf=\"queryError\">{{ queryError }}</mat-error>\n </mat-form-field>\n <div class=\"g g-auto-220 gap-12 ai-end mt-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Ordenar por</mat-label>\n <mat-select\n [(ngModel)]=\"sortField\"\n (ngModelChange)=\"updateSortConfig()\"\n >\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Campo base do recurso.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Direção</mat-label>\n <mat-select\n [(ngModel)]=\"sortDir\"\n (ngModelChange)=\"updateSortConfig()\"\n >\n <mat-option value=\"asc\">Ascendente</mat-option>\n <mat-option value=\"desc\">Descendente</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </mat-tab>\n <mat-tab label=\"JSON\">\n <div class=\"editor-content\">\n <praxis-list-json-config-editor\n [document]=\"document\"\n (documentChange)=\"onJsonConfigChange($event)\"\n (validationChange)=\"onJsonValidationChange($event)\"\n (editorEvent)=\"onJsonEditorEvent($event)\"\n >\n </praxis-list-json-config-editor>\n </div>\n </mat-tab>\n <mat-tab label=\"Ações\">\n <div class=\"editor-content g gap-12\">\n <div class=\"g g-1-auto gap-8 ai-center\">\n <div class=\"muted\">\n Configure botões de ação por item (ícone, rótulo, cor, visibilidade)\n </div>\n <button mat-flat-button color=\"primary\" (click)=\"addAction()\">\n Adicionar ação\n </button>\n </div>\n <div class=\"g g-1-auto gap-8 ai-center\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Ação global (Praxis)</mat-label>\n <mat-select\n [(ngModel)]=\"selectedGlobalActionId\"\n (ngModelChange)=\"onGlobalActionSelected($event)\"\n >\n <mat-option [value]=\"undefined\">-- Selecionar --</mat-option>\n <mat-option *ngFor=\"let ga of globalActionCatalog\" [value]=\"ga.id\">\n <mat-icon class=\"option-icon\">{{ ga.icon || \"bolt\" }}</mat-icon>\n {{ ga.label }}\n </mat-option>\n </mat-select>\n <mat-hint\n *ngIf=\"!globalActionCatalog.length\"\n class=\"text-caption muted\"\n >Nenhuma ação global registrada.</mat-hint\n >\n </mat-form-field>\n <div class=\"muted text-caption\">\n Selecione para adicionar com `command` global.\n </div>\n </div>\n <div\n *ngFor=\"let a of working.actions || []; let i = index\"\n class=\"g g-auto-200 gap-12 ai-end\"\n >\n <mat-form-field appearance=\"outline\">\n <mat-label>ID</mat-label>\n <input\n matInput\n [(ngModel)]=\"a.id\"\n (ngModelChange)=\"onActionsChanged()\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo de ação</mat-label>\n <mat-select [(ngModel)]=\"a.kind\" (ngModelChange)=\"onActionsChanged()\">\n <mat-option value=\"icon\">Ícone</mat-option>\n <mat-option value=\"button\">Botão</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input\n matInput\n [(ngModel)]=\"a.icon\"\n (ngModelChange)=\"onActionsChanged()\"\n placeholder=\"ex.: edit, delete\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Command (global)</mat-label>\n <input\n matInput\n [(ngModel)]=\"a.command\"\n (ngModelChange)=\"onActionsChanged()\"\n placeholder=\"global:toast.success\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Rótulo</mat-label>\n <input\n matInput\n [(ngModel)]=\"a.label\"\n (ngModelChange)=\"onActionsChanged()\"\n />\n </mat-form-field>\n <ng-container *ngIf=\"a.kind === 'button'\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante</mat-label>\n <mat-select\n [(ngModel)]=\"a.buttonVariant\"\n (ngModelChange)=\"onActionsChanged()\"\n >\n <mat-option value=\"stroked\">Contorno</mat-option>\n <mat-option value=\"raised\">Elevado</mat-option>\n <mat-option value=\"flat\">Preenchido</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor da ação</mat-label>\n <mat-select\n [(ngModel)]=\"a.color\"\n (ngModelChange)=\"onActionsChanged()\"\n >\n <mat-option *ngFor=\"let c of paletteOptions\" [value]=\"c.value\">\n <span\n class=\"color-dot\"\n [style.background]=\"colorDotBackground(c.value)\"\n ></span\n >{{ c.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div\n class=\"g gap-8\"\n *ngIf=\"isCustomColor(a.color); else actionCustomBtn\"\n >\n <pdx-color-picker\n label=\"Cor personalizada\"\n [format]=\"'hex'\"\n [(ngModel)]=\"a.color\"\n (ngModelChange)=\"onActionsChanged()\"\n ></pdx-color-picker>\n </div>\n <ng-template #actionCustomBtn>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"enableCustomActionColor(a)\"\n >\n Usar cor personalizada\n </button>\n </ng-template>\n <mat-form-field appearance=\"outline\">\n <mat-label>Payload da ação</mat-label>\n <mat-select\n [(ngModel)]=\"a.emitPayload\"\n (ngModelChange)=\"onActionsChanged()\"\n >\n <mat-option [value]=\"undefined\">Padrão</mat-option>\n <mat-option value=\"item\">item</mat-option>\n <mat-option value=\"id\">id</mat-option>\n <mat-option value=\"value\">value</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"emitPayload\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"col-span-2\">\n <mat-label\n >Exibir quando (ex.: &#36;&#123;item.status&#125; ==\n 'done')</mat-label\n >\n <input\n matInput\n [(ngModel)]=\"a.showIf\"\n (ngModelChange)=\"onActionsChanged()\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Sintaxe suportada: &#34;&#36;{item.campo} == &#39;valor&#39;&#34;. Expressões avançadas não são avaliadas.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"g row-flow gap-8 ai-center\">\n <button\n *ngIf=\"(a.kind || 'icon') === 'icon'\"\n mat-icon-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\"\n >\n <mat-icon\n [praxisIcon]=\"a.icon || 'bolt'\"\n [style.cssText]=\"iconStyle(a.color)\"\n ></mat-icon>\n </button>\n <ng-container *ngIf=\"a.kind === 'button'\">\n <button\n *ngIf=\"a.buttonVariant === 'stroked'\"\n mat-stroked-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\"\n [style.cssText]=\"buttonStyle(a.color, 'stroked')\"\n >\n {{ a.label || a.id || \"Ação\" }}\n </button>\n <button\n *ngIf=\"a.buttonVariant === 'raised'\"\n mat-raised-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\"\n [style.cssText]=\"buttonStyle(a.color, 'raised')\"\n >\n {{ a.label || a.id || \"Ação\" }}\n </button>\n <button\n *ngIf=\"!a.buttonVariant || a.buttonVariant === 'flat'\"\n mat-flat-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\"\n [style.cssText]=\"buttonStyle(a.color, 'flat')\"\n >\n {{ a.label || a.id || \"Ação\" }}\n </button>\n </ng-container>\n <span class=\"muted\">Pré-visualização</span>\n </div>\n <div class=\"flex-end\">\n <button mat-button color=\"warn\" (click)=\"removeAction(i)\">\n Remover\n </button>\n </div>\n <div class=\"g gap-8 col-span-2\" *ngIf=\"a.command\">\n <mat-slide-toggle\n [(ngModel)]=\"a.showLoading\"\n (ngModelChange)=\"onActionsChanged()\"\n >Mostrar loading</mat-slide-toggle\n >\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header\n ><mat-panel-title\n >Confirmação</mat-panel-title\n ></mat-expansion-panel-header\n >\n <div class=\"g gap-12 pt-12\">\n <div class=\"g row-flow gap-8 ai-center\">\n <span class=\"text-caption muted\">Tipo</span>\n <mat-button-toggle-group\n [value]=\"a.confirmation?.type || ''\"\n (change)=\"applyConfirmationPreset(a, $event.value)\"\n >\n <mat-button-toggle value=\"\">Padrão</mat-button-toggle>\n <mat-button-toggle value=\"danger\">Danger</mat-button-toggle>\n <mat-button-toggle value=\"warning\">Warning</mat-button-toggle>\n <mat-button-toggle value=\"info\">Info</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Título</mat-label>\n <input\n matInput\n [ngModel]=\"a.confirmation?.title\"\n (ngModelChange)=\"setConfirmationField(a, 'title', $event)\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mensagem</mat-label>\n <input\n matInput\n [ngModel]=\"a.confirmation?.message\"\n (ngModelChange)=\"setConfirmationField(a, 'message', $event)\"\n />\n </mat-form-field>\n <div class=\"g gap-6\">\n <div class=\"text-caption muted\">Prévia</div>\n <div class=\"text-caption\">\n <strong>{{\n a.confirmation?.title || \"Confirmar ação\"\n }}</strong>\n </div>\n <div class=\"text-caption muted\">\n {{\n a.confirmation?.message ||\n \"Tem certeza que deseja continuar?\"\n }}\n </div>\n <div class=\"text-caption\">\n <span\n class=\"confirm-type\"\n [ngClass]=\"a.confirmation?.type || 'default'\"\n >Tipo: {{ a.confirmation?.type || \"padrão\" }}</span\n >\n </div>\n <div\n class=\"text-caption muted\"\n *ngIf=\"!a.confirmation?.title && !a.confirmation?.message\"\n >\n Defina um título ou mensagem para a confirmação.\n </div>\n </div>\n </div>\n </mat-expansion-panel>\n <ng-container *ngIf=\"isSurfaceOpenCommand(a); else defaultGlobalPayloadEditor\">\n <div class=\"col-span-2\">\n <praxis-surface-open-action-editor\n [value]=\"getSurfaceOpenGlobalPayload(a)\"\n hostKind=\"list\"\n (valueChange)=\"onSurfaceOpenGlobalPayloadChange(a, $event)\"\n ></praxis-surface-open-action-editor>\n </div>\n </ng-container>\n <ng-template #defaultGlobalPayloadEditor>\n <mat-form-field appearance=\"outline\" class=\"col-span-2\">\n <mat-label>Payload (JSON/Template)</mat-label>\n <textarea\n matInput\n rows=\"4\"\n [(ngModel)]=\"a.globalPayload\"\n (ngModelChange)=\"onActionsChanged()\"\n placeholder='{\"message\":\"${item.name} favoritado\"}'\n ></textarea>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"globalPayloadSchemaTooltip(a)\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error *ngIf=\"isGlobalPayloadInvalid(a.globalPayload)\"\n >JSON inválido</mat-error\n >\n </mat-form-field>\n <div class=\"g row-flow gap-8 ai-center\">\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"applyGlobalPayloadExample(a)\"\n >\n Inserir exemplo\n </button>\n <span class=\"muted text-caption\">{{\n globalPayloadExampleHint(a)\n }}</span>\n </div>\n </ng-template>\n <mat-slide-toggle\n [(ngModel)]=\"a.emitLocal\"\n (ngModelChange)=\"onActionsChanged()\"\n >Emitir evento local também</mat-slide-toggle\n >\n </div>\n </div>\n </div>\n </mat-tab>\n <mat-tab label=\"Layout\">\n <div class=\"editor-content grid gap-3\">\n <div class=\"preset-row g row-flow gap-8\">\n <button mat-stroked-button (click)=\"applyLayoutPreset('tiles-modern')\">\n Preset Tiles Moderno\n </button>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante</mat-label>\n <mat-select\n [(ngModel)]=\"working.layout.variant\"\n (ngModelChange)=\"onLayoutChanged()\"\n >\n <mat-option value=\"list\">Lista</mat-option>\n <mat-option value=\"cards\">Cards</mat-option>\n <mat-option value=\"tiles\">Tiles</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Modelo</mat-label>\n <mat-select\n [(ngModel)]=\"working.layout.model\"\n (ngModelChange)=\"onLayoutChanged()\"\n >\n <ng-container\n *ngIf=\"working.layout.variant === 'list'; else cardModels\"\n >\n <mat-option value=\"standard\">Padrão</mat-option>\n <mat-option value=\"media\">Mídia à esquerda</mat-option>\n <mat-option value=\"hotel\">Hotel (mídia grande)</mat-option>\n </ng-container>\n <ng-template #cardModels>\n <ng-container\n *ngIf=\"working.layout.variant === 'tiles'; else cardsOnly\"\n >\n <mat-option value=\"standard\">Tile padrão</mat-option>\n <mat-option value=\"media\">Tile com mídia</mat-option>\n <mat-option value=\"hotel\">Tile hotel</mat-option>\n </ng-container>\n <ng-template #cardsOnly>\n <mat-option value=\"standard\">Padrão</mat-option>\n <mat-option value=\"media\">Card com mídia</mat-option>\n <mat-option value=\"hotel\">Hotel</mat-option>\n </ng-template>\n </ng-template>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Linhas</mat-label>\n <mat-select\n [(ngModel)]=\"working.layout.lines\"\n (ngModelChange)=\"onLayoutChanged()\"\n >\n <mat-option [value]=\"1\">1</mat-option>\n <mat-option [value]=\"2\">2</mat-option>\n <mat-option [value]=\"3\">3</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Itens por página</mat-label>\n <input\n matInput\n type=\"number\"\n min=\"1\"\n [(ngModel)]=\"working.layout.pageSize\"\n (ngModelChange)=\"onPageSizeChange($event)\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Densidade</mat-label>\n <mat-select\n [(ngModel)]=\"working.layout.density\"\n (ngModelChange)=\"onLayoutChanged()\"\n >\n <mat-option value=\"default\">Padrão</mat-option>\n <mat-option value=\"comfortable\">Confortável</mat-option>\n <mat-option value=\"compact\">Compacta</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Espaçamento entre itens</mat-label>\n <mat-select\n [(ngModel)]=\"working.layout.itemSpacing\"\n (ngModelChange)=\"onLayoutChanged()\"\n >\n <mat-option value=\"none\">Sem espaço extra</mat-option>\n <mat-option value=\"tight\">Justo</mat-option>\n <mat-option value=\"default\">Padrão</mat-option>\n <mat-option value=\"relaxed\">Relaxado</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field\n appearance=\"outline\"\n *ngIf=\"working.layout.variant !== 'tiles'\"\n >\n <mat-label>Divisores</mat-label>\n <mat-select\n [(ngModel)]=\"working.layout.dividers\"\n (ngModelChange)=\"onLayoutChanged()\"\n >\n <mat-option value=\"none\">Sem</mat-option>\n <mat-option value=\"between\">Entre grupos</mat-option>\n <mat-option value=\"all\">Todos</mat-option>\n </mat-select>\n </mat-form-field>\n <ng-container *ngIf=\"fields.length > 0; else groupByText\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Agrupar por</mat-label>\n <mat-select\n [(ngModel)]=\"working.layout.groupBy\"\n (ngModelChange)=\"onLayoutChanged()\"\n >\n <mat-option [value]=\"\">Nenhum</mat-option>\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-template #groupByText>\n <mat-form-field appearance=\"outline\">\n <mat-label>Agrupar por</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.layout.groupBy\"\n (ngModelChange)=\"onLayoutChanged()\"\n placeholder=\"ex.: departamento\"\n />\n </mat-form-field>\n </ng-template>\n <mat-slide-toggle\n [(ngModel)]=\"working.layout.stickySectionHeader\"\n (ngModelChange)=\"onLayoutChanged()\"\n >\n Header de seção fixo\n </mat-slide-toggle>\n <mat-slide-toggle\n [(ngModel)]=\"working.layout.virtualScroll\"\n (ngModelChange)=\"onLayoutChanged()\"\n >\n Scroll virtual\n </mat-slide-toggle>\n <mat-divider class=\"my-8\"></mat-divider>\n <div class=\"subtitle\">Ferramentas da lista</div>\n <div class=\"g g-auto-220 gap-12 ai-end\">\n <mat-slide-toggle\n [(ngModel)]=\"working.ui.showSearch\"\n (ngModelChange)=\"onUiChanged()\"\n >Mostrar busca</mat-slide-toggle\n >\n <mat-slide-toggle\n [(ngModel)]=\"working.ui.showSort\"\n (ngModelChange)=\"onUiChanged()\"\n >Mostrar ordenar</mat-slide-toggle\n >\n <mat-slide-toggle\n [(ngModel)]=\"working.ui.showRange\"\n (ngModelChange)=\"onUiChanged()\"\n >Mostrar faixa X–Y de Total</mat-slide-toggle\n >\n </div>\n <div\n class=\"g g-auto-220 gap-12 ai-end mt-12\"\n *ngIf=\"working.ui?.showSearch\"\n >\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo para buscar</mat-label>\n <mat-select\n [(ngModel)]=\"working.ui.searchField\"\n (ngModelChange)=\"onUiChanged()\"\n >\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Placeholder da busca</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.ui.searchPlaceholder\"\n (ngModelChange)=\"onUiChanged()\"\n placeholder=\"ex.: Buscar por título\"\n />\n </mat-form-field>\n </div>\n <div class=\"mt-12\" *ngIf=\"working.ui?.showSort\">\n <div class=\"g g-1-auto ai-center gap-8\">\n <div class=\"muted\">Opções de ordenação (rótulo → campo+direção)</div>\n <button mat-flat-button color=\"primary\" (click)=\"addUiSortRow()\">\n Adicionar opção\n </button>\n </div>\n <div\n class=\"g g-auto-220 gap-12 ai-end mt-12\"\n *ngFor=\"let r of uiSortRows; let i = index\"\n >\n <mat-form-field appearance=\"outline\">\n <mat-label>Rótulo</mat-label>\n <input\n matInput\n [(ngModel)]=\"r.label\"\n (ngModelChange)=\"onUiSortRowsChanged()\"\n placeholder=\"ex.: Mais recentes\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo</mat-label>\n <mat-select\n [(ngModel)]=\"r.field\"\n (ngModelChange)=\"onUiSortRowsChanged()\"\n >\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Direção</mat-label>\n <mat-select\n [(ngModel)]=\"r.dir\"\n (ngModelChange)=\"onUiSortRowsChanged()\"\n >\n <mat-option value=\"desc\">Descendente</mat-option>\n <mat-option value=\"asc\">Ascendente</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"error\" *ngIf=\"isUiSortRowDuplicate(i)\">\n Opção duplicada (campo+direção)\n </div>\n <div class=\"flex-end\">\n <button mat-button color=\"warn\" (click)=\"removeUiSortRow(i)\">\n Remover\n </button>\n </div>\n </div>\n </div>\n </div>\n </mat-tab>\n <mat-tab label=\"Conteúdo\">\n <div class=\"editor-content\">\n <div class=\"editor-main\">\n <mat-accordion multi>\n <!-- Primary -->\n <mat-expansion-panel [expanded]=\"true\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>{{ getTypeIcon(mappingPrimary.type) }}</mat-icon>\n <span>Primary (Título)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>{{\n mappingPrimary.field || \"Não mapeado\"\n }}</mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"g gap-12\">\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingPrimary.type = 'text';\n mappingPrimary.field = 'name';\n onMappingChanged()\n \"\n >\n Nome\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingPrimary.type = 'text';\n mappingPrimary.field = 'title';\n onMappingChanged()\n \"\n >\n Título\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingPrimary.type = 'text';\n mappingPrimary.field = 'name';\n mappingSecondary.type = 'text';\n mappingSecondary.field = 'role';\n onMappingChanged()\n \"\n >\n Nome + Papel\n </button>\n </div>\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingPrimary.field\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingPrimary.type\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option\n *ngFor=\"let mt of primaryTypeConfigs\"\n [value]=\"mt.type\"\n >\n <mat-icon class=\"option-icon\">{{ mt.icon }}</mat-icon>\n {{ mt.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n @switch (mappingPrimary.type) {\n @case (\"text\") {\n <praxis-meta-editor-text\n [model]=\"mappingPrimary\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"html\") {\n <praxis-meta-editor-text\n [model]=\"mappingPrimary\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"currency\") {\n <praxis-meta-editor-currency\n [model]=\"mappingPrimary\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-currency>\n }\n @case (\"date\") {\n <praxis-meta-editor-date\n [model]=\"mappingPrimary\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-date>\n }\n }\n\n <!-- Advanced -->\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header>\n <mat-panel-title>Formatação e Estilo</mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <mat-form-field\n appearance=\"outline\"\n *ngIf=\"\n mappingPrimary.type === 'text' ||\n mappingPrimary.type === 'html'\n \"\n >\n <mat-label>Classe CSS</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingPrimary.class\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n <mat-form-field\n appearance=\"outline\"\n *ngIf=\"\n mappingPrimary.type === 'text' ||\n mappingPrimary.type === 'html'\n \"\n >\n <mat-label>Estilo Inline</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingPrimary.style\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Classe CSS</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingPrimary.class\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo Inline</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingPrimary.style\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n </div>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n\n <!-- Secondary -->\n <mat-expansion-panel [expanded]=\"!!mappingSecondary.field\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>{{ getTypeIcon(mappingSecondary.type) }}</mat-icon>\n <span>Secondary (Resumo)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>{{\n mappingSecondary.field || \"Não mapeado\"\n }}</mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"g gap-12\">\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingSecondary.type = 'text';\n mappingSecondary.field = 'subtitle';\n onMappingChanged()\n \"\n >\n Subtítulo\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingSecondary.type = 'date';\n mappingSecondary.field = 'hireDate';\n mappingSecondary.dateStyle = 'short';\n onMappingChanged()\n \"\n >\n Data curta\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingSecondary.type = 'currency';\n mappingSecondary.field = 'salary';\n mappingSecondary.currencyCode = 'BRL';\n mappingSecondary.locale = 'pt-BR';\n onMappingChanged()\n \"\n >\n Salário\n </button>\n </div>\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingSecondary.field\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingSecondary.type\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option\n *ngFor=\"let mt of secondaryTypeConfigs\"\n [value]=\"mt.type\"\n >\n <mat-icon class=\"option-icon\">{{ mt.icon }}</mat-icon>\n {{ mt.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n @switch (mappingSecondary.type) {\n @case (\"text\") {\n <praxis-meta-editor-text\n [model]=\"mappingSecondary\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"html\") {\n <praxis-meta-editor-text\n [model]=\"mappingSecondary\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"currency\") {\n <praxis-meta-editor-currency\n [model]=\"mappingSecondary\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-currency>\n }\n @case (\"date\") {\n <praxis-meta-editor-date\n [model]=\"mappingSecondary\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-date>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header>\n <mat-panel-title>Formatação e Estilo</mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\"\n ><mat-label>Classe CSS</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingSecondary.class\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n <mat-form-field appearance=\"outline\"\n ><mat-label>Estilo Inline</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingSecondary.style\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n </div>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n\n <mat-expansion-panel\n [expanded]=\"!!mappingMeta.field || mappingMetaFields.length > 0\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>{{\n getTypeIcon(mappingMeta.type || \"text\")\n }}</mat-icon>\n <span>Meta (Detalhe/Lateral)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>\n {{\n mappingMetaFields.length\n ? \"Campo composto (\" + mappingMetaFields.length + \")\"\n : mappingMeta.field || \"Não mapeado\"\n }}\n </mat-panel-description>\n </mat-expansion-panel-header>\n\n <div class=\"g gap-12\">\n <!-- Composition Mode Toggle -->\n <div class=\"g g-1-1 gap-12 p-12 bg-subtle rounded\">\n <div class=\"text-caption muted\">Modo de composição</div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Campos para compor (Multi-select)</mat-label>\n <mat-select\n [(ngModel)]=\"mappingMetaFields\"\n multiple\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div\n class=\"g g-1-1 ai-center gap-12\"\n *ngIf=\"mappingMetaFields.length\"\n >\n <mat-form-field appearance=\"outline\">\n <mat-label>Separador</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingMetaSeparator\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n <mat-slide-toggle\n [(ngModel)]=\"mappingMetaWrapSecondInParens\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n (Seg) entre parênteses\n </mat-slide-toggle>\n </div>\n </div>\n\n <!-- Single Field Mode (if no composition) -->\n <div class=\"g g-1-1 gap-12\" *ngIf=\"!mappingMetaFields.length\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo Único</mat-label>\n <mat-select\n [(ngModel)]=\"mappingMeta.field\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option [value]=\"undefined\">-- Nenhum --</mat-option>\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingMeta.type\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option\n *ngFor=\"let mt of metaTypeConfigs\"\n [value]=\"mt.type\"\n >\n <mat-icon class=\"option-icon\">{{ mt.icon }}</mat-icon>\n {{ mt.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Type configuration (pluggable editors) -->\n @switch (mappingMeta.type) {\n @case (\"text\") {\n <praxis-meta-editor-text\n [model]=\"mappingMeta\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"html\") {\n <praxis-meta-editor-text\n [model]=\"mappingMeta\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"currency\") {\n <praxis-meta-editor-currency\n [model]=\"mappingMeta\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-currency>\n }\n @case (\"date\") {\n <praxis-meta-editor-date\n [model]=\"mappingMeta\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-date>\n }\n @case (\"chip\") {\n <praxis-meta-editor-chip\n [model]=\"mappingMeta\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-chip>\n }\n @case (\"rating\") {\n <praxis-meta-editor-rating\n [model]=\"mappingMeta\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-rating>\n }\n @case (\"icon\") {\n <praxis-meta-editor-icon\n [model]=\"mappingMeta\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-icon>\n }\n @case (\"image\") {\n <praxis-meta-editor-image\n [model]=\"mappingMeta\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-image>\n }\n }\n\n <!-- Advanced -->\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header\n ><mat-panel-title\n >Opções avançadas</mat-panel-title\n ></mat-expansion-panel-header\n >\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição</mat-label>\n <mat-select\n [(ngModel)]=\"mappingMeta.placement\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option value=\"side\">Lateral (Direita)</mat-option>\n <mat-option value=\"line\">Na linha (Abaixo)</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Classe CSS</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingMeta.class\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingMeta.style\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n <!-- Trailing -->\n <mat-expansion-panel [expanded]=\"!!mappingTrailing.field\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>{{\n getTypeIcon(mappingTrailing.type || \"text\")\n }}</mat-icon>\n <span>Trailing (Direita)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>{{\n mappingTrailing.field || \"Não mapeado\"\n }}</mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"g gap-12\">\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingTrailing.field\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option [value]=\"undefined\">-- Nenhum --</mat-option>\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingTrailing.type\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option\n *ngFor=\"let mt of trailingTypeConfigs\"\n [value]=\"mt.type\"\n >\n <mat-icon class=\"option-icon\">{{ mt.icon }}</mat-icon>\n {{ mt.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingTrailing.type = 'chip';\n mappingTrailing.chipColor = 'primary';\n mappingTrailing.chipVariant = 'filled';\n mappingTrailing.field = 'status';\n onMappingChanged()\n \"\n >\n Status Chip\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingTrailing.type = 'icon';\n mappingTrailing.field = 'status';\n mappingTrailing.iconColor = 'primary';\n onMappingChanged()\n \"\n >\n Status Ícone\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingTrailing.type = 'currency';\n mappingTrailing.field = 'price';\n mappingTrailing.currencyCode = 'BRL';\n mappingTrailing.locale = 'pt-BR';\n onMappingChanged()\n \"\n >\n Preço\n </button>\n </div>\n\n @switch (mappingTrailing.type) {\n @case (\"text\") {\n <praxis-meta-editor-text\n [model]=\"mappingTrailing\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"html\") {\n <praxis-meta-editor-text\n [model]=\"mappingTrailing\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"currency\") {\n <praxis-meta-editor-currency\n [model]=\"mappingTrailing\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-currency>\n }\n @case (\"date\") {\n <praxis-meta-editor-date\n [model]=\"mappingTrailing\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-date>\n }\n @case (\"chip\") {\n <praxis-meta-editor-chip\n [model]=\"mappingTrailing\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-chip>\n }\n @case (\"rating\") {\n <praxis-meta-editor-rating\n [model]=\"mappingTrailing\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-rating>\n }\n @case (\"icon\") {\n <praxis-meta-editor-icon\n [model]=\"mappingTrailing\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-icon>\n }\n @case (\"image\") {\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>URL / Expr</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingTrailing.imageUrl\"\n (ngModelChange)=\"onMappingChanged()\"\n placeholder=\"https://... ou ${item.imageUrl}\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Use URL absoluta/relativa ou expressão ${item.campo}.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error\n *ngIf=\"\n isImageUrlRequiredInvalid(mappingTrailing.imageUrl)\n \"\n >URL/expr obrigatória</mat-error\n >\n </mat-form-field>\n </div>\n <praxis-meta-editor-image\n [model]=\"mappingTrailing\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-image>\n <div\n class=\"text-caption muted\"\n *ngIf=\"!mappingTrailing.imageUrl\"\n >\n Defina a URL/expr para renderizar a imagem.\n </div>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header\n ><mat-panel-title\n >Estilo</mat-panel-title\n ></mat-expansion-panel-header\n >\n <div class=\"g gap-12 pt-12\">\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\"\n ><mat-label>Classe</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingTrailing.class\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n <mat-form-field appearance=\"outline\"\n ><mat-label>Style</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingTrailing.style\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n </div>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n\n <!-- Leading -->\n <mat-expansion-panel\n [expanded]=\"\n !!mappingLeading.field ||\n (mappingLeading.type === 'icon' && !!mappingLeading.icon) ||\n (mappingLeading.type === 'image' && !!mappingLeading.imageUrl)\n \"\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>{{ getTypeIcon(mappingLeading.type) }}</mat-icon>\n <span>Leading (Esquerda)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>\n {{\n mappingLeading.type === \"icon\"\n ? mappingLeading.icon || \"Ícone estático\"\n : mappingLeading.field ||\n (mappingLeading.imageUrl\n ? \"Imagem estática\"\n : \"Não mapeado\")\n }}\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"g gap-12\">\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingLeading.type\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option\n *ngFor=\"let mt of leadingTypeConfigs\"\n [value]=\"mt.type\"\n >\n <mat-icon class=\"option-icon\">{{ mt.icon }}</mat-icon>\n {{ mt.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <!-- Field (only if not static icon/image, though user might want dynamic) -->\n <mat-form-field\n appearance=\"outline\"\n *ngIf=\"\n mappingLeading.type !== 'icon' &&\n mappingLeading.type !== 'image'\n \"\n >\n <mat-label>Campo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingLeading.field\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{\n f\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingLeading.type = 'icon';\n mappingLeading.icon = 'person';\n mappingLeading.iconColor = 'primary';\n onMappingChanged()\n \"\n >\n Avatar Ícone\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingLeading.type = 'image';\n mappingLeading.imageUrl = 'https://placehold.co/64x64';\n mappingLeading.imageAlt = 'Avatar';\n mappingLeading.badgeText = '${item.status}';\n onMappingChanged()\n \"\n >\n Avatar Imagem + Badge\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingLeading.type = 'chip';\n mappingLeading.field = 'tag';\n mappingLeading.chipColor = 'accent';\n mappingLeading.chipVariant = 'filled';\n onMappingChanged()\n \"\n >\n Chip Tag\n </button>\n </div>\n\n <!-- Icon Specific -->\n <div\n class=\"g g-1-auto gap-12 ai-center\"\n *ngIf=\"mappingLeading.type === 'icon'\"\n >\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingLeading.icon\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n <button mat-icon-button matSuffix (click)=\"pickLeadingIcon()\">\n <mat-icon>search</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"text-caption muted\">\n Use pipe <code>|iconMap</code> no extra pipe para dinâmico\n </div>\n </div>\n <div *ngIf=\"mappingLeading.type === 'icon'\">\n <praxis-meta-editor-icon\n [model]=\"mappingLeading\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-icon>\n </div>\n\n <!-- Image Specific -->\n <div\n class=\"g g-1-1 gap-12\"\n *ngIf=\"mappingLeading.type === 'image'\"\n >\n <mat-form-field appearance=\"outline\">\n <mat-label>URL da Imagem</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingLeading.imageUrl\"\n (ngModelChange)=\"onMappingChanged()\"\n placeholder=\"https://... ou ${item.imageUrl}\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Use URL absoluta/relativa ou expressão ${item.campo}.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error\n *ngIf=\"isImageUrlRequiredInvalid(mappingLeading.imageUrl)\"\n >URL/expr obrigatória</mat-error\n >\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Alt Text</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingLeading.imageAlt\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Badge Texto</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingLeading.badgeText\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n </div>\n\n @switch (mappingLeading.type) {\n @case (\"text\") {\n <praxis-meta-editor-text\n [model]=\"mappingLeading\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"html\") {\n <praxis-meta-editor-text\n [model]=\"mappingLeading\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"chip\") {\n <praxis-meta-editor-chip\n [model]=\"mappingLeading\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-chip>\n }\n @case (\"rating\") {\n <praxis-meta-editor-rating\n [model]=\"mappingLeading\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-rating>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header\n ><mat-panel-title\n >Estilo</mat-panel-title\n ></mat-expansion-panel-header\n >\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\"\n ><mat-label>Classe</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingLeading.class\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n <mat-form-field appearance=\"outline\"\n ><mat-label>Style</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingLeading.style\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n\n <!-- Features -->\n <mat-expansion-panel\n [expanded]=\"featuresVisible && features.length > 0\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>view_list</mat-icon>\n <span>Recursos (Features)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description\n >{{ features.length }} item(s)</mat-panel-description\n >\n </mat-expansion-panel-header>\n\n <div class=\"g gap-12\">\n <div class=\"g row-flow gap-12 ai-center\">\n <mat-slide-toggle\n [(ngModel)]=\"featuresVisible\"\n (ngModelChange)=\"onFeaturesChanged()\"\n >Ativar recursos</mat-slide-toggle\n >\n <mat-slide-toggle\n [(ngModel)]=\"featuresSyncWithMeta\"\n (ngModelChange)=\"onMappingChanged()\"\n >Sincronizar com Meta</mat-slide-toggle\n >\n <span class=\"flex-1\"></span>\n <mat-button-toggle-group\n [(ngModel)]=\"featuresMode\"\n (change)=\"onFeaturesChanged()\"\n appearance=\"legacy\"\n >\n <mat-button-toggle value=\"icons+labels\"\n ><mat-icon>view_list</mat-icon></mat-button-toggle\n >\n <mat-button-toggle value=\"icons-only\"\n ><mat-icon>more_horiz</mat-icon></mat-button-toggle\n >\n </mat-button-toggle-group>\n </div>\n\n <div\n *ngFor=\"let f of features; let i = index\"\n class=\"g g-auto-1 gap-8 ai-center p-8 border rounded mb-2\"\n >\n <button mat-icon-button (click)=\"pickFeatureIcon(i)\">\n <mat-icon>{{ f.icon || \"search\" }}</mat-icon>\n </button>\n <mat-form-field\n appearance=\"outline\"\n class=\"dense-form-field no-sub\"\n >\n <input\n matInput\n [(ngModel)]=\"f.expr\"\n (ngModelChange)=\"onFeaturesChanged()\"\n placeholder=\"Expr/Texto\"\n />\n </mat-form-field>\n <button mat-icon-button color=\"warn\" (click)=\"removeFeature(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n <button mat-button color=\"primary\" (click)=\"addFeature()\">\n <mat-icon>add</mat-icon> Adicionar recurso\n </button>\n </div>\n </mat-expansion-panel>\n <!-- Section Header -->\n <mat-expansion-panel [expanded]=\"!!mappingSectionHeader.expr\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>{{\n getTypeIcon(mappingSectionHeader.type)\n }}</mat-icon>\n <span>Cabeçalho de Seção</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>{{\n mappingSectionHeader.expr || \"Não configurado\"\n }}</mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"g gap-12\">\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingSectionHeader.type\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option\n *ngFor=\"let mt of sectionHeaderTypeConfigs\"\n [value]=\"mt.type\"\n >\n <mat-icon class=\"option-icon\">{{ mt.icon }}</mat-icon>\n {{ mt.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expressão (item.key)</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingSectionHeader.expr\"\n (ngModelChange)=\"onMappingChanged()\"\n placeholder=\"item.key\"\n />\n </mat-form-field>\n </div>\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingSectionHeader.type = 'text';\n mappingSectionHeader.expr = '${item.key}';\n onMappingChanged()\n \"\n >\n Texto padrão\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingSectionHeader.type = 'chip';\n mappingSectionHeader.chipColor = 'primary';\n mappingSectionHeader.chipVariant = 'filled';\n mappingSectionHeader.expr = '${item.key}';\n onMappingChanged()\n \"\n >\n Chip padrão\n </button>\n </div>\n\n @switch (mappingSectionHeader.type) {\n @case (\"text\") {\n <praxis-meta-editor-text\n [model]=\"mappingSectionHeader\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"html\") {\n <praxis-meta-editor-text\n [model]=\"mappingSectionHeader\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"chip\") {\n <praxis-meta-editor-chip\n [model]=\"mappingSectionHeader\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-chip>\n }\n @case (\"rating\") {\n <praxis-meta-editor-rating\n [model]=\"mappingSectionHeader\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-rating>\n }\n @case (\"icon\") {\n <praxis-meta-editor-icon\n [model]=\"mappingSectionHeader\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-icon>\n }\n @case (\"image\") {\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>URL Imagem</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingSectionHeader.imageUrl\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n <mat-error\n *ngIf=\"\n isImageUrlRequiredInvalid(\n mappingSectionHeader.imageUrl\n )\n \"\n >URL/expr obrigatória</mat-error\n >\n </mat-form-field>\n </div>\n <div\n class=\"text-caption muted\"\n *ngIf=\"!mappingSectionHeader.imageUrl\"\n >\n Defina a URL/expr para renderizar a imagem.\n </div>\n <praxis-meta-editor-image\n [model]=\"mappingSectionHeader\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-image>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header\n ><mat-panel-title\n >Estilo</mat-panel-title\n ></mat-expansion-panel-header\n >\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\"\n ><mat-label>Classe</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingSectionHeader.class\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n <mat-form-field appearance=\"outline\"\n ><mat-label>Style</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingSectionHeader.style\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n\n <!-- Empty State -->\n <mat-expansion-panel [expanded]=\"!!mappingEmptyState.expr\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>inbox</mat-icon>\n <span>Estado Vazio</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>{{\n mappingEmptyState.expr || \"Padrão\"\n }}</mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"g gap-12\">\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select\n [(ngModel)]=\"mappingEmptyState.type\"\n (ngModelChange)=\"onMappingChanged()\"\n >\n <mat-option\n *ngFor=\"let mt of emptyStateTypeConfigs\"\n [value]=\"mt.type\"\n >\n <mat-icon class=\"option-icon\">{{ mt.icon }}</mat-icon>\n {{ mt.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mensagem / Expr</mat-label>\n <input\n matInput\n [(ngModel)]=\"mappingEmptyState.expr\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n </mat-form-field>\n </div>\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingEmptyState.type = 'text';\n mappingEmptyState.expr = 'Nenhum item disponível';\n onMappingChanged()\n \"\n >\n Mensagem padrão\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"\n mappingEmptyState.type = 'image';\n mappingEmptyState.imageUrl = '/list-empty-state.svg';\n mappingEmptyState.imageAlt = 'Sem resultados';\n onMappingChanged()\n \"\n >\n Imagem padrão\n </button>\n </div>\n\n @switch (mappingEmptyState.type) {\n @case (\"text\") {\n <praxis-meta-editor-text\n [model]=\"mappingEmptyState\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"html\") {\n <praxis-meta-editor-text\n [model]=\"mappingEmptyState\"\n [setPipe]=\"setPipe.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-text>\n }\n @case (\"chip\") {\n <praxis-meta-editor-chip\n [model]=\"mappingEmptyState\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-chip>\n }\n @case (\"rating\") {\n <praxis-meta-editor-rating\n [model]=\"mappingEmptyState\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-rating>\n }\n @case (\"icon\") {\n <praxis-meta-editor-icon\n [model]=\"mappingEmptyState\"\n [paletteOptions]=\"paletteOptions\"\n [colorDotBackground]=\"colorDotBackground\"\n [isCustomColor]=\"isCustomColor\"\n [enableCustomColor]=\"enableCustomColor.bind(this)\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-icon>\n }\n @case (\"image\") {\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\"\n ><mat-label>URL Imagem</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingEmptyState.imageUrl\"\n (ngModelChange)=\"onMappingChanged()\"\n />\n <mat-error\n *ngIf=\"\n isImageUrlRequiredInvalid(mappingEmptyState.imageUrl)\n \"\n >URL/expr obrigatória</mat-error\n >\n </mat-form-field>\n </div>\n <div\n class=\"text-caption muted\"\n *ngIf=\"!mappingEmptyState.imageUrl\"\n >\n Defina a URL/expr para renderizar a imagem.\n </div>\n <praxis-meta-editor-image\n [model]=\"mappingEmptyState\"\n (change)=\"onMappingChanged()\"\n ></praxis-meta-editor-image>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header\n ><mat-panel-title\n >Estilo</mat-panel-title\n ></mat-expansion-panel-header\n >\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\"\n ><mat-label>Classe</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingEmptyState.class\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n <mat-form-field appearance=\"outline\"\n ><mat-label>Style</mat-label\n ><input\n matInput\n [(ngModel)]=\"mappingEmptyState.style\"\n (ngModelChange)=\"onMappingChanged()\"\n /></mat-form-field>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n\n <button mat-flat-button color=\"primary\" (click)=\"applyTemplate()\">\n Aplicar mapeamento\n </button>\n <button\n mat-button\n (click)=\"inferFromFields()\"\n [disabled]=\"!fields.length\"\n >\n Inferir do schema\n </button>\n <div class=\"g g-auto-220 gap-12 ai-end mt-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Skeleton (quantidade)</mat-label>\n <input\n matInput\n type=\"number\"\n min=\"0\"\n [(ngModel)]=\"skeletonCountInput\"\n (ngModelChange)=\"onSkeletonChanged($event)\"\n />\n </mat-form-field>\n </div>\n\n <div class=\"g gap-12 mt-12\">\n <div class=\"g row-flow gap-8 ai-center\">\n <span class=\"section-title mat-subtitle-1\">Prévia de tema</span>\n <mat-button-toggle-group\n [(ngModel)]=\"skinPreviewTheme\"\n (change)=\"onSkinChanged()\"\n appearance=\"legacy\"\n >\n <mat-button-toggle [value]=\"'light'\">Claro</mat-button-toggle>\n <mat-button-toggle [value]=\"'dark'\">Escuro</mat-button-toggle>\n <mat-button-toggle [value]=\"'grid'\">Grade</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div class=\"skin-preview-wrap\">\n <praxis-list-skin-preview\n [config]=\"working\"\n [items]=\"previewData\"\n [theme]=\"skinPreviewTheme\"\n ></praxis-list-skin-preview>\n </div>\n </div>\n </div>\n </div>\n </mat-tab>\n <mat-tab label=\"i18n/A11y\">\n <div\n class=\"editor-content grid gap-3\"\n *ngIf=\"working?.a11y && working?.events\"\n >\n <mat-form-field appearance=\"outline\">\n <mat-label>Locale padrão</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.i18n.locale\"\n (ngModelChange)=\"markDirty()\"\n placeholder=\"ex.: pt-BR\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Moeda padrão</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.i18n.currency\"\n (ngModelChange)=\"markDirty()\"\n placeholder=\"ex.: BRL\"\n />\n </mat-form-field>\n <mat-divider class=\"my-8\"></mat-divider>\n <div class=\"subtitle\">Acessibilidade</div>\n <div class=\"g g-auto-220 gap-12 ai-end\">\n <mat-form-field appearance=\"outline\">\n <mat-label>aria-label</mat-label>\n <input\n matInput\n [(ngModel)]=\"working!.a11y!.ariaLabel\"\n (ngModelChange)=\"markDirty()\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>aria-labelledby</mat-label>\n <input\n matInput\n [(ngModel)]=\"working!.a11y!.ariaLabelledBy\"\n (ngModelChange)=\"markDirty()\"\n />\n </mat-form-field>\n </div>\n <div class=\"g g-auto-220 gap-12 ai-end\">\n <mat-slide-toggle\n [(ngModel)]=\"working!.a11y!.highContrast\"\n (ngModelChange)=\"markDirty()\"\n >Alto contraste</mat-slide-toggle\n >\n <mat-slide-toggle\n [(ngModel)]=\"working!.a11y!.reduceMotion\"\n (ngModelChange)=\"markDirty()\"\n >Reduzir movimento</mat-slide-toggle\n >\n </div>\n <mat-divider class=\"my-8\"></mat-divider>\n <div class=\"subtitle\">Eventos</div>\n <div class=\"g g-auto-220 gap-12 ai-end\">\n <mat-form-field appearance=\"outline\">\n <mat-label>itemClick</mat-label>\n <input\n matInput\n [(ngModel)]=\"working!.events!.itemClick\"\n (ngModelChange)=\"markDirty()\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>actionClick</mat-label>\n <input\n matInput\n [(ngModel)]=\"working!.events!.actionClick\"\n (ngModelChange)=\"markDirty()\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>selectionChange</mat-label>\n <input\n matInput\n [(ngModel)]=\"working!.events!.selectionChange\"\n (ngModelChange)=\"markDirty()\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>loaded</mat-label>\n <input\n matInput\n [(ngModel)]=\"working!.events!.loaded\"\n (ngModelChange)=\"markDirty()\"\n />\n </mat-form-field>\n </div>\n </div>\n </mat-tab>\n <mat-tab label=\"Seleção\">\n <div class=\"editor-content grid gap-3\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Modo</mat-label>\n <mat-select\n [(ngModel)]=\"working.selection.mode\"\n (ngModelChange)=\"onSelectionChanged()\"\n >\n <mat-option value=\"none\">Sem seleção</mat-option>\n <mat-option value=\"single\">Única</mat-option>\n <mat-option value=\"multiple\">Múltipla</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Nome no formulário</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.selection.formControlName\"\n (ngModelChange)=\"onSelectionChanged()\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"formControlName\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Caminho no formulário</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.selection.formControlPath\"\n (ngModelChange)=\"onSelectionChanged()\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"formControlPath\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Comparar por (campo)</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.selection.compareBy\"\n (ngModelChange)=\"onSelectionChanged()\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Chave unica do item.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Retorno</mat-label>\n <mat-select\n [(ngModel)]=\"working.selection.return\"\n (ngModelChange)=\"onSelectionChanged()\"\n >\n <mat-option value=\"value\">value</mat-option>\n <mat-option value=\"item\">item</mat-option>\n <mat-option value=\"id\">id</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </mat-tab>\n <mat-tab label=\"Aparência\">\n <div class=\"editor-content grid gap-3\">\n <div class=\"preset-row g row-flow gap-8\">\n <button mat-button (click)=\"applySkinPreset('pill-soft')\">\n Pill Soft\n </button>\n <button mat-button (click)=\"applySkinPreset('gradient-tile')\">\n Gradient Tile\n </button>\n <button mat-button (click)=\"applySkinPreset('glass')\">Glass</button>\n <button mat-button (click)=\"applySkinPreset('elevated')\">\n Elevated\n </button>\n <button mat-button (click)=\"applySkinPreset('outline')\">Outline</button>\n <button mat-button (click)=\"applySkinPreset('flat')\">Flat</button>\n <button mat-button (click)=\"applySkinPreset('neumorphism')\">\n Neumorphism\n </button>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo</mat-label>\n <mat-select\n [(ngModel)]=\"working.skin.type\"\n (ngModelChange)=\"onSkinTypeChanged($event)\"\n >\n <mat-option value=\"pill-soft\">Pill Soft</mat-option>\n <mat-option value=\"gradient-tile\">Gradient Tile</mat-option>\n <mat-option value=\"glass\">Glass</mat-option>\n <mat-option value=\"elevated\">Elevated</mat-option>\n <mat-option value=\"outline\">Outline</mat-option>\n <mat-option value=\"flat\">Flat</mat-option>\n <mat-option value=\"neumorphism\">Neumorphism</mat-option>\n <mat-option value=\"custom\">Custom</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Raio</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.skin.radius\"\n (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: 1.25rem\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Sombra</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.skin.shadow\"\n (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: var(--md-sys-elevation-level2)\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Borda</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.skin.border\"\n (ngModelChange)=\"onSkinChanged()\"\n />\n </mat-form-field>\n <mat-form-field\n *ngIf=\"working.skin.type === 'glass'\"\n appearance=\"outline\"\n >\n <mat-label>Desfoque</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.skin.backdropBlur\"\n (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: 8px\"\n />\n </mat-form-field>\n <div *ngIf=\"working.skin.type === 'gradient-tile'\" class=\"g gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Degradê de</mat-label>\n <input\n matInput\n [ngModel]=\"working.skin.gradient.from || ''\"\n (ngModelChange)=\"onSkinGradientChanged('from', $event)\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Degradê até</mat-label>\n <input\n matInput\n [ngModel]=\"working.skin.gradient.to || ''\"\n (ngModelChange)=\"onSkinGradientChanged('to', $event)\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ângulo</mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"working.skin.gradient.angle ?? 135\"\n (ngModelChange)=\"onSkinGradientChanged('angle', $event)\"\n />\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Classe CSS extra (skin.class)</mat-label>\n <input\n matInput\n [(ngModel)]=\"working.skin.class\"\n (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: my-list-skin\"\n />\n </mat-form-field>\n\n <div\n *ngIf=\"working.skin.type === 'custom'\"\n class=\"g g-auto-220 gap-12 ai-end\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Estilo inline (skin.inlineStyle)</mat-label>\n <textarea\n matInput\n rows=\"4\"\n [(ngModel)]=\"working.skin.inlineStyle\"\n (ngModelChange)=\"onSkinChanged()\"\n [attr.placeholder]=\"':host{--p-list-radius: 1rem}'\"\n ></textarea>\n </mat-form-field>\n <div class=\"text-caption\">\n Exemplo de CSS por classe (adicione no seu styles global):\n <pre class=\"code-block\">\n.my-list-skin .item-card &#123;\n border-radius: 14px;\n border: 1px solid var(--md-sys-color-outline-variant);\n box-shadow: var(--md-sys-elevation-level2);\n&#125;\n.my-list-skin .mat-mdc-list-item .list-item-content &#123;\n backdrop-filter: blur(6px);\n&#125;</pre\n >\n </div>\n </div>\n </div>\n </mat-tab>\n</mat-tab-group>\n\n","/**\n * Capabilities catalog for PraxisListConfig.\n * Uses paths compatible with AiConfigAgentService (patch is merged into config).\n */\n\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from '@praxisui/core';\n\ndeclare module '@praxisui/core' {\n interface AiCapabilityCategoryMap {\n meta: true;\n skin: true;\n selection: true;\n templating: true;\n actions: true;\n ui: true;\n i18n: true;\n a11y: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nconst ENUMS: Record<string, Array<string | number>> = {\n layoutVariant: ['list', 'cards', 'tiles'],\n layoutDensity: ['default', 'comfortable', 'compact'],\n layoutItemSpacing: ['none', 'tight', 'default', 'relaxed'],\n layoutLines: [1, 2, 3],\n layoutDividers: ['none', 'between', 'all'],\n layoutModel: ['standard', 'media', 'hotel'],\n selectionMode: ['none', 'single', 'multiple'],\n selectionReturn: ['value', 'item', 'id'],\n skinType: [\n 'pill-soft',\n 'gradient-tile',\n 'glass',\n 'elevated',\n 'outline',\n 'flat',\n 'neumorphism',\n 'custom',\n ],\n templateType: [\n 'text',\n 'icon',\n 'image',\n 'chip',\n 'rating',\n 'currency',\n 'date',\n 'html',\n 'slot',\n ],\n templateVariant: ['filled', 'outlined'],\n metaPlacement: ['side', 'line'],\n statusPosition: ['inline', 'top-right'],\n featuresMode: ['icons+labels', 'icons-only', 'labels-only'],\n actionKind: ['icon', 'button'],\n actionButtonVariant: ['stroked', 'raised', 'flat'],\n actionEmitPayload: ['item', 'id', 'value'],\n};\n\nfunction templateCaps(slot: string, label: string): Capability[] {\n const base = `templating.${slot}`;\n return [\n {\n path: base,\n category: 'templating',\n valueKind: 'object',\n description: `Template for ${label}.`,\n },\n {\n path: `${base}.type`,\n category: 'templating',\n valueKind: 'enum',\n allowedValues: ENUMS.templateType,\n description: `Template type for ${label}.`,\n },\n {\n path: `${base}.expr`,\n category: 'templating',\n valueKind: 'expression',\n description: `Expression for ${label}.`,\n safetyNotes:\n 'Only ${item.path} with simple pipes (bool/date/map/number).',\n },\n {\n path: `${base}.class`,\n category: 'templating',\n valueKind: 'string',\n description: `CSS class for ${label}.`,\n },\n {\n path: `${base}.style`,\n category: 'templating',\n valueKind: 'string',\n description: `Inline CSS for ${label}.`,\n },\n {\n path: `${base}.color`,\n category: 'templating',\n valueKind: 'string',\n description: `Color for ${label}.`,\n },\n {\n path: `${base}.variant`,\n category: 'templating',\n valueKind: 'enum',\n allowedValues: ENUMS.templateVariant,\n description: `Variant for ${label}.`,\n },\n {\n path: `${base}.imageAlt`,\n category: 'templating',\n valueKind: 'string',\n description: `Image alt for ${label} (when type=image).`,\n },\n {\n path: `${base}.badge`,\n category: 'templating',\n valueKind: 'object',\n description: `Badge for ${label}.`,\n },\n {\n path: `${base}.badge.expr`,\n category: 'templating',\n valueKind: 'expression',\n description: `Badge expression for ${label}.`,\n safetyNotes:\n 'Only ${item.path} with simple pipes (bool/date/map/number).',\n },\n {\n path: `${base}.badge.color`,\n category: 'templating',\n valueKind: 'string',\n description: `Badge color for ${label}.`,\n },\n {\n path: `${base}.badge.variant`,\n category: 'templating',\n valueKind: 'enum',\n allowedValues: ENUMS.templateVariant,\n description: `Badge variant for ${label}.`,\n },\n {\n path: `${base}.props`,\n category: 'templating',\n valueKind: 'object',\n description: `Extra props for ${label} (type-specific).`,\n },\n {\n path: `${base}.props.rating`,\n category: 'templating',\n valueKind: 'object',\n description: `Rating props (type=rating).`,\n },\n {\n path: `${base}.props.rating.max`,\n category: 'templating',\n valueKind: 'number',\n description: `Rating max (1–10).`,\n },\n {\n path: `${base}.props.rating.size`,\n category: 'templating',\n valueKind: 'number',\n description: `Rating icon size in px.`,\n },\n {\n path: `${base}.props.rating.color`,\n category: 'templating',\n valueKind: 'string',\n description: `Rating color (theme/M3/custom).`,\n },\n ];\n}\n\nexport const LIST_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.0',\n enums: ENUMS,\n targets: [\n 'praxis-list',\n 'data-list',\n 'simple-list',\n 'praxis-list-config-editor',\n 'praxis-list-skin-preview',\n ],\n notes: [\n 'Template expressions support only ${item.path} and simple pipes: bool/date/map/number.',\n 'actions[].showIf supports simple equality checks like ${item.status} == \"done\".',\n 'Arrays should be merged by id/expr to avoid replacing existing items.',\n 'dataSource.data overrides resourcePath when provided.',\n 'layout.variant supports list, cards and tiles.',\n 'Colors accept theme tokens (primary/accent/warn), M3 tokens (var(--md-sys-color-*)), or custom CSS colors.',\n ],\n capabilities: [\n {\n path: 'id',\n category: 'meta',\n valueKind: 'string',\n description: 'List id (used by persistence and editor).',\n },\n\n {\n path: 'dataSource',\n category: 'data',\n valueKind: 'object',\n description: 'Local or remote data source.',\n },\n {\n path: 'dataSource.data',\n category: 'data',\n valueKind: 'array',\n description: 'Local data array.',\n },\n {\n path: 'dataSource.resourcePath',\n category: 'data',\n valueKind: 'string',\n description: 'Remote resource path for GenericCrudService.',\n },\n {\n path: 'dataSource.query',\n category: 'data',\n valueKind: 'object',\n description: 'Initial query sent to /filter.',\n },\n {\n path: 'dataSource.sort',\n category: 'data',\n valueKind: 'array',\n description: 'Initial sort array (ex.: [\"name,asc\"]).',\n },\n {\n path: 'dataSource.sort[]',\n category: 'data',\n valueKind: 'string',\n description: 'Single sort entry (field,dir).',\n },\n\n {\n path: 'layout',\n category: 'layout',\n valueKind: 'object',\n description: 'Layout settings.',\n },\n {\n path: 'layout.variant',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.layoutVariant,\n description: 'Layout variant.',\n },\n {\n path: 'layout.density',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.layoutDensity,\n description: 'Layout density.',\n },\n {\n path: 'layout.itemSpacing',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.layoutItemSpacing,\n description: 'Spacing between rendered items.',\n },\n {\n path: 'layout.lines',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.layoutLines,\n description: 'Number of visible lines.',\n },\n {\n path: 'layout.dividers',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.layoutDividers,\n description: 'Dividers between items.',\n },\n {\n path: 'layout.model',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.layoutModel,\n description: 'Visual model for items.',\n },\n {\n path: 'layout.groupBy',\n category: 'layout',\n valueKind: 'string',\n description: 'Field name for grouping.',\n },\n {\n path: 'layout.stickySectionHeader',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Sticky section header.',\n },\n {\n path: 'layout.virtualScroll',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Enable virtual scroll (when supported).',\n },\n {\n path: 'layout.pageSize',\n category: 'layout',\n valueKind: 'number',\n description: 'Remote page size.',\n },\n\n {\n path: 'skin',\n category: 'skin',\n valueKind: 'object',\n description: 'Skin settings.',\n },\n {\n path: 'skin.type',\n category: 'skin',\n valueKind: 'enum',\n allowedValues: ENUMS.skinType,\n description: 'Skin type.',\n },\n {\n path: 'skin.gradient',\n category: 'skin',\n valueKind: 'object',\n description: 'Gradient options.',\n },\n {\n path: 'skin.gradient.from',\n category: 'skin',\n valueKind: 'string',\n description: 'Gradient start color.',\n },\n {\n path: 'skin.gradient.to',\n category: 'skin',\n valueKind: 'string',\n description: 'Gradient end color.',\n },\n {\n path: 'skin.gradient.angle',\n category: 'skin',\n valueKind: 'number',\n description: 'Gradient angle in degrees.',\n },\n {\n path: 'skin.radius',\n category: 'skin',\n valueKind: 'string',\n description: 'Border radius.',\n },\n {\n path: 'skin.shadow',\n category: 'skin',\n valueKind: 'string',\n description: 'Box shadow.',\n },\n {\n path: 'skin.border',\n category: 'skin',\n valueKind: 'string',\n description: 'Border style.',\n },\n {\n path: 'skin.backdropBlur',\n category: 'skin',\n valueKind: 'string',\n description: 'Backdrop blur (glass).',\n },\n {\n path: 'skin.class',\n category: 'skin',\n valueKind: 'string',\n description: 'Custom CSS class.',\n },\n {\n path: 'skin.inlineStyle',\n category: 'skin',\n valueKind: 'string',\n description: 'Inline CSS (sanitized).',\n },\n\n {\n path: 'selection',\n category: 'selection',\n valueKind: 'object',\n description: 'Selection settings.',\n },\n {\n path: 'selection.mode',\n category: 'selection',\n valueKind: 'enum',\n allowedValues: ENUMS.selectionMode,\n description: 'Selection mode.',\n },\n {\n path: 'selection.formControlName',\n category: 'selection',\n valueKind: 'string',\n description: 'FormControl name for binding.',\n },\n {\n path: 'selection.formControlPath',\n category: 'selection',\n valueKind: 'string',\n description: 'FormControl path for binding.',\n },\n {\n path: 'selection.compareBy',\n category: 'selection',\n valueKind: 'string',\n description: 'Field used to compare selections.',\n },\n {\n path: 'selection.return',\n category: 'selection',\n valueKind: 'enum',\n allowedValues: ENUMS.selectionReturn,\n description: 'Selection return payload.',\n },\n\n {\n path: 'templating',\n category: 'templating',\n valueKind: 'object',\n description: 'Templating settings.',\n },\n ...templateCaps('leading', 'leading'),\n ...templateCaps('primary', 'primary'),\n ...templateCaps('secondary', 'secondary'),\n ...templateCaps('meta', 'meta'),\n ...templateCaps('trailing', 'trailing'),\n ...templateCaps('sectionHeader', 'section header'),\n ...templateCaps('emptyState', 'empty state'),\n {\n path: 'templating.metaPlacement',\n category: 'templating',\n valueKind: 'enum',\n allowedValues: ENUMS.metaPlacement,\n description: 'Meta placement in list variant.',\n },\n {\n path: 'templating.metaPrefixIcon',\n category: 'templating',\n valueKind: 'string',\n description: 'Prefix icon for meta.',\n },\n {\n path: 'templating.statusPosition',\n category: 'templating',\n valueKind: 'enum',\n allowedValues: ENUMS.statusPosition,\n description: 'Status position in cards/tiles.',\n },\n {\n path: 'templating.chipColorMap',\n category: 'templating',\n valueKind: 'object',\n description: 'Map value -> chip color.',\n },\n {\n path: 'templating.chipLabelMap',\n category: 'templating',\n valueKind: 'object',\n description: 'Map value -> label.',\n },\n {\n path: 'templating.iconColorMap',\n category: 'templating',\n valueKind: 'object',\n description: 'Map value/icon -> color.',\n },\n {\n path: 'templating.features',\n category: 'templating',\n valueKind: 'array',\n description: 'Extra feature line entries.',\n },\n {\n path: 'templating.features[].icon',\n category: 'templating',\n valueKind: 'string',\n description: 'Feature icon.',\n },\n {\n path: 'templating.features[].expr',\n category: 'templating',\n valueKind: 'expression',\n description: 'Feature label expression.',\n },\n {\n path: 'templating.features[].class',\n category: 'templating',\n valueKind: 'string',\n description: 'Feature CSS class.',\n },\n {\n path: 'templating.features[].style',\n category: 'templating',\n valueKind: 'string',\n description: 'Feature inline CSS.',\n },\n {\n path: 'templating.featuresVisible',\n category: 'templating',\n valueKind: 'boolean',\n description: 'Show features line.',\n },\n {\n path: 'templating.featuresMode',\n category: 'templating',\n valueKind: 'enum',\n allowedValues: ENUMS.featuresMode,\n description: 'Features render mode.',\n },\n {\n path: 'templating.skeleton',\n category: 'templating',\n valueKind: 'object',\n description: 'Skeleton loading config.',\n },\n {\n path: 'templating.skeleton.count',\n category: 'templating',\n valueKind: 'number',\n description: 'Skeleton items count.',\n },\n\n {\n path: 'actions',\n category: 'actions',\n valueKind: 'array',\n description: 'Item actions array.',\n },\n {\n path: 'actions[].id',\n category: 'actions',\n valueKind: 'string',\n description: 'Action id.',\n },\n {\n path: 'actions[].icon',\n category: 'actions',\n valueKind: 'string',\n description: 'Action icon.',\n },\n {\n path: 'actions[].label',\n category: 'actions',\n valueKind: 'string',\n description: 'Action label.',\n },\n {\n path: 'actions[].color',\n category: 'actions',\n valueKind: 'string',\n description: 'Action color.',\n },\n {\n path: 'actions[].kind',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.actionKind,\n description: 'Action render kind.',\n },\n {\n path: 'actions[].buttonVariant',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.actionButtonVariant,\n description: 'Action button variant.',\n },\n {\n path: 'actions[].showIf',\n category: 'actions',\n valueKind: 'expression',\n description: 'Visibility condition (simple equality).',\n },\n {\n path: 'actions[].emitPayload',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.actionEmitPayload,\n description: 'Action emitted payload.',\n },\n {\n path: 'actions[].command',\n category: 'actions',\n valueKind: 'string',\n description: 'Global command (ex.: \"global:toast.success\").',\n },\n {\n path: 'actions[].globalPayload',\n category: 'actions',\n valueKind: 'object',\n description: 'Payload for global command (JSON/template).',\n },\n {\n path: 'actions[].emitLocal',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Emit local actionClick even when command is set.',\n },\n\n {\n path: 'ui',\n category: 'ui',\n valueKind: 'object',\n description: 'Lightweight toolbar UI.',\n },\n {\n path: 'ui.showSearch',\n category: 'ui',\n valueKind: 'boolean',\n description: 'Show search input.',\n },\n {\n path: 'ui.searchField',\n category: 'ui',\n valueKind: 'string',\n description: 'Search field.',\n },\n {\n path: 'ui.searchPlaceholder',\n category: 'ui',\n valueKind: 'string',\n description: 'Search placeholder.',\n },\n {\n path: 'ui.showSort',\n category: 'ui',\n valueKind: 'boolean',\n description: 'Show sort selector.',\n },\n {\n path: 'ui.sortOptions',\n category: 'ui',\n valueKind: 'array',\n description: 'Sort options (string or {label,value}).',\n },\n {\n path: 'ui.sortOptions[].label',\n category: 'ui',\n valueKind: 'string',\n description: 'Sort option label.',\n },\n {\n path: 'ui.sortOptions[].value',\n category: 'ui',\n valueKind: 'string',\n description: 'Sort option value.',\n },\n {\n path: 'ui.showRange',\n category: 'ui',\n valueKind: 'boolean',\n description: 'Show range in footer.',\n },\n\n {\n path: 'i18n',\n category: 'i18n',\n valueKind: 'object',\n description: 'i18n map.',\n },\n {\n path: 'i18n.locale',\n category: 'i18n',\n valueKind: 'string',\n description: 'Locale (ex.: pt-BR).',\n },\n {\n path: 'i18n.currency',\n category: 'i18n',\n valueKind: 'string',\n description: 'Currency code (ex.: BRL).',\n },\n\n {\n path: 'a11y',\n category: 'a11y',\n valueKind: 'object',\n description: 'Accessibility settings.',\n },\n {\n path: 'a11y.ariaLabel',\n category: 'a11y',\n valueKind: 'string',\n description: 'aria-label for container.',\n },\n {\n path: 'a11y.ariaLabelledBy',\n category: 'a11y',\n valueKind: 'string',\n description: 'aria-labelledby for container.',\n },\n {\n path: 'a11y.highContrast',\n category: 'a11y',\n valueKind: 'boolean',\n description: 'High contrast mode.',\n },\n {\n path: 'a11y.reduceMotion',\n category: 'a11y',\n valueKind: 'boolean',\n description: 'Reduce motion.',\n },\n\n {\n path: 'events',\n category: 'events',\n valueKind: 'object',\n description: 'Event mappings.',\n },\n {\n path: 'events.itemClick',\n category: 'events',\n valueKind: 'string',\n description: 'Mapped itemClick event name.',\n },\n {\n path: 'events.actionClick',\n category: 'events',\n valueKind: 'string',\n description: 'Mapped actionClick event name.',\n },\n {\n path: 'events.selectionChange',\n category: 'events',\n valueKind: 'string',\n description: 'Mapped selectionChange event name.',\n },\n {\n path: 'events.loaded',\n category: 'events',\n valueKind: 'string',\n description: 'Mapped loaded event name.',\n },\n ],\n};\n","import { BaseAiAdapter, Capability, PatchResult } from '@praxisui/ai';\nimport { deepMerge } from '@praxisui/core';\nimport { PraxisList } from '../components/praxis-list.component';\nimport { PraxisListConfig } from '../models/list-config.model';\nimport { LIST_AI_CAPABILITIES } from './list-ai-capabilities';\n\nexport class ListAiAdapter extends BaseAiAdapter<PraxisListConfig> {\n componentName = 'Praxis List';\n\n constructor(private list: PraxisList) {\n super();\n }\n\n getCurrentConfig(): PraxisListConfig {\n return this.cloneConfig(this.list.config);\n }\n\n getCapabilities(): Capability[] {\n return LIST_AI_CAPABILITIES.capabilities as unknown as Capability[];\n }\n\n override getRuntimeState(): Record<string, any> {\n const mode = this.list.config?.selection?.mode || 'none';\n const bound = (this.list as any)?.boundControl?.value;\n const selectedCount = Array.isArray(bound)\n ? bound.length\n : bound != null\n ? 1\n : 0;\n return {\n variant: this.list.config?.layout?.variant || 'list',\n selectionMode: mode,\n selectedCount,\n hasRemoteSource: !!this.list.config?.dataSource?.resourcePath,\n };\n }\n\n createSnapshot(): PraxisListConfig {\n return this.cloneConfig(this.list.config);\n }\n\n async restoreSnapshot(snapshot: PraxisListConfig): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(snapshot);\n }\n\n async applyPatch(\n patch: Partial<PraxisListConfig>,\n _intent?: string,\n ): Promise<PatchResult> {\n try {\n const current = this.getCurrentConfig();\n const sanitized = this.sanitizePatch(patch);\n const next = this.smartMergeListConfig(current, sanitized);\n this.applyConfig(next);\n return { success: true };\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unknown error applying patch';\n return { success: false, error: message };\n }\n }\n\n private applyConfig(config: PraxisListConfig): void {\n const apply = (this.list as any).applyConfigFromAdapter;\n if (typeof apply === 'function') {\n apply.call(this.list, config);\n return;\n }\n const prev = this.list.config;\n this.list.config = config;\n this.list.ngOnChanges({\n config: {\n previousValue: prev,\n currentValue: config,\n firstChange: false,\n isFirstChange: () => false,\n },\n } as any);\n }\n\n private smartMergeListConfig(\n base: PraxisListConfig,\n patch: Partial<PraxisListConfig>,\n ): PraxisListConfig {\n const result = deepMerge(base, patch);\n\n if (patch.actions && Array.isArray(patch.actions)) {\n const original = base.actions || [];\n const patchActions = patch.actions.filter(\n (a) =>\n a &&\n typeof (a as any).id === 'string' &&\n (a as any).id.trim().length > 0,\n );\n const merged = original.map((orig) => {\n const match = patchActions.find((p) => p.id === orig.id);\n return match ? deepMerge(orig as any, match as any) : orig;\n });\n patchActions.forEach((action) => {\n if (!original.find((o) => o.id === action.id))\n merged.push(action as any);\n });\n result.actions = merged;\n }\n\n const patchFeatures = patch.templating?.features;\n if (patchFeatures && Array.isArray(patchFeatures)) {\n const original = base.templating?.features || [];\n const keyOf = (f: any) => (f?.expr || f?.icon || '').toString();\n const merged = original.map((orig) => {\n const match = patchFeatures.find(\n (p) => keyOf(p) && keyOf(p) === keyOf(orig),\n );\n return match ? deepMerge(orig as any, match as any) : orig;\n });\n patchFeatures.forEach((feat) => {\n if (!original.find((o) => keyOf(o) === keyOf(feat)))\n merged.push(feat as any);\n });\n result.templating = { ...(result.templating || {}), features: merged };\n }\n\n return result;\n }\n\n private sanitizePatch(\n patch: Partial<PraxisListConfig>,\n ): Partial<PraxisListConfig> {\n const safe = this.cloneConfig(patch as any) as Partial<PraxisListConfig>;\n const enums = (LIST_AI_CAPABILITIES.enums || {}) as any;\n const inEnum = (v: any, list?: any[]) => !list || list.includes(v);\n const clamp = (v: any, min: number, max: number) => {\n const n = Number(v);\n if (!Number.isFinite(n)) return undefined;\n return Math.min(max, Math.max(min, Math.round(n)));\n };\n const sanitizeSlot = (slot: any) => {\n if (!slot) return;\n if (slot.type && !inEnum(slot.type, enums.templateType)) delete slot.type;\n if (slot.variant && !inEnum(slot.variant, enums.templateVariant))\n delete slot.variant;\n if (slot.props?.rating) {\n const r = slot.props.rating || {};\n const max = clamp(r.max, 1, 10);\n const size = clamp(r.size, 10, 32);\n if (max != null) r.max = max;\n else delete r.max;\n if (size != null) r.size = size;\n else delete r.size;\n slot.props.rating = r;\n }\n };\n\n if (safe.layout) {\n if (\n safe.layout.variant &&\n !inEnum(safe.layout.variant, enums.layoutVariant)\n )\n delete safe.layout.variant;\n if (\n safe.layout.density &&\n !inEnum(safe.layout.density, enums.layoutDensity)\n )\n delete safe.layout.density;\n if (\n safe.layout.itemSpacing &&\n !inEnum(safe.layout.itemSpacing, enums.layoutItemSpacing)\n )\n delete safe.layout.itemSpacing;\n if (safe.layout.lines && !inEnum(safe.layout.lines, enums.layoutLines))\n delete safe.layout.lines;\n if (\n safe.layout.dividers &&\n !inEnum(safe.layout.dividers, enums.layoutDividers)\n )\n delete safe.layout.dividers;\n if (safe.layout.model && !inEnum(safe.layout.model, enums.layoutModel))\n delete safe.layout.model;\n }\n if (safe.selection) {\n if (\n safe.selection.mode &&\n !inEnum(safe.selection.mode, enums.selectionMode)\n )\n delete safe.selection.mode;\n if (\n safe.selection.return &&\n !inEnum(safe.selection.return, enums.selectionReturn)\n )\n delete safe.selection.return;\n }\n if (safe.skin) {\n if (safe.skin.type && !inEnum(safe.skin.type, enums.skinType))\n delete safe.skin.type;\n }\n if (safe.templating) {\n sanitizeSlot((safe.templating as any).leading);\n sanitizeSlot((safe.templating as any).primary);\n sanitizeSlot((safe.templating as any).secondary);\n sanitizeSlot((safe.templating as any).meta);\n sanitizeSlot((safe.templating as any).trailing);\n sanitizeSlot((safe.templating as any).sectionHeader);\n sanitizeSlot((safe.templating as any).emptyState);\n if (\n (safe.templating as any).metaPlacement &&\n !inEnum((safe.templating as any).metaPlacement, enums.metaPlacement)\n ) {\n delete (safe.templating as any).metaPlacement;\n }\n if (\n (safe.templating as any).statusPosition &&\n !inEnum((safe.templating as any).statusPosition, enums.statusPosition)\n ) {\n delete (safe.templating as any).statusPosition;\n }\n if (\n (safe.templating as any).featuresMode &&\n !inEnum((safe.templating as any).featuresMode, enums.featuresMode)\n ) {\n delete (safe.templating as any).featuresMode;\n }\n }\n if (Array.isArray(safe.actions)) {\n safe.actions.forEach((a) => {\n if (a?.kind && !inEnum(a.kind, enums.actionKind)) delete a.kind;\n if (\n a?.buttonVariant &&\n !inEnum(a.buttonVariant, enums.actionButtonVariant)\n )\n delete a.buttonVariant;\n if (a?.emitPayload && !inEnum(a.emitPayload, enums.actionEmitPayload))\n delete a.emitPayload;\n });\n }\n return safe;\n }\n\n private cloneConfig(config: PraxisListConfig): PraxisListConfig {\n try {\n return structuredClone(config);\n } catch {\n return JSON.parse(JSON.stringify(config));\n }\n }\n}\n","export const PRAXIS_LIST_EN_US = {\n configEdit: 'Edit configuration',\n expandDetails: 'Expand details',\n collapseDetails: 'Collapse details',\n itemDetails: 'Item details',\n emptyState: 'No items available',\n} as const;\n","export const PRAXIS_LIST_PT_BR = {\n configEdit: 'Editar configurações',\n expandDetails: 'Expandir detalhes',\n collapseDetails: 'Recolher detalhes',\n itemDetails: 'Detalhes do item',\n emptyState: 'Nenhum item disponível',\n} as const;\n","import { providePraxisI18n } from '@praxisui/core';\nimport { PRAXIS_LIST_EN_US } from './list.en';\nimport { PRAXIS_LIST_PT_BR } from './list.pt';\n\nexport const PRAXIS_LIST_I18N_NAMESPACE = 'praxis-list';\n\nexport function providePraxisListI18n() {\n return providePraxisI18n({\n namespaces: {\n [PRAXIS_LIST_I18N_NAMESPACE]: {\n 'pt-BR': PRAXIS_LIST_PT_BR,\n 'en-US': PRAXIS_LIST_EN_US,\n },\n },\n });\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-list-metric',\n standalone: true,\n imports: [CommonModule, MatIconModule, PraxisIconDirective],\n template: `\n <div\n class=\"p-list-metric\"\n [ngClass]=\"metricClasses()\"\n [style.cssText]=\"metric?.style || ''\"\n >\n @if (metric?.label) {\n <div class=\"p-list-metric__label\">{{ metric.label }}</div>\n }\n\n <div class=\"p-list-metric__main\">\n @if (showLeftIcon()) {\n <span\n class=\"p-list-metric__icon\"\n [style.cssText]=\"metric?.iconStyle || ''\"\n >\n <mat-icon [praxisIcon]=\"metric?.icon\"></mat-icon>\n </span>\n }\n\n <div class=\"p-list-metric__content\">\n <div class=\"p-list-metric__value-row\">\n <span\n class=\"p-list-metric__value\"\n [ngClass]=\"metric?.valueClass\"\n [style.cssText]=\"metric?.valueStyle || ''\"\n >\n {{ metric?.value }}\n </span>\n\n @if (metric?.layout === 'value+caption' && metric?.caption) {\n <span class=\"p-list-metric__caption p-list-metric__caption--inline\">\n {{ metric.caption }}\n </span>\n }\n </div>\n\n @if (\n metric?.layout !== 'value+caption' &&\n metric?.caption &&\n metric?.captionPosition !== 'below-progress'\n ) {\n <div class=\"p-list-metric__caption\">{{ metric.caption }}</div>\n }\n\n @if (metric?.subcaption) {\n <div class=\"p-list-metric__subcaption\">{{ metric.subcaption }}</div>\n }\n </div>\n\n @if (showRightIcon()) {\n <span\n class=\"p-list-metric__icon p-list-metric__icon--right\"\n [style.cssText]=\"metric?.iconStyle || ''\"\n >\n <mat-icon [praxisIcon]=\"metric?.icon\"></mat-icon>\n </span>\n }\n </div>\n\n @if (metric?.progress) {\n <div\n class=\"p-list-metric__progress\"\n [ngClass]=\"{\n 'p-list-metric__progress--indeterminate':\n metric.progress.mode === 'indeterminate',\n }\"\n [style.cssText]=\"metric.progress.style || ''\"\n aria-hidden=\"true\"\n >\n <span\n class=\"p-list-metric__progress-value\"\n [style.width.%]=\"\n metric.progress.mode === 'indeterminate'\n ? 100\n : metric.progress.percent\n \"\n ></span>\n </div>\n }\n\n @if (\n metric?.layout !== 'value+caption' &&\n metric?.caption &&\n metric?.captionPosition === 'below-progress'\n ) {\n <div class=\"p-list-metric__caption p-list-metric__caption--below-progress\">\n {{ metric.caption }}\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n min-width: 0;\n }\n\n .p-list-metric {\n --p-list-metric-tone: currentColor;\n --p-list-metric-progress-fill: var(\n --p-list-metric-tone,\n var(--p-list-accent)\n );\n --p-list-metric-progress-track: color-mix(\n in srgb,\n var(--p-list-metric-progress-fill) 18%,\n transparent\n );\n display: grid;\n gap: 4px;\n min-width: 0;\n color: var(--p-list-metric-tone, inherit);\n }\n\n .p-list-metric--align-start {\n justify-items: start;\n text-align: start;\n }\n\n .p-list-metric--align-center {\n justify-items: center;\n text-align: center;\n }\n\n .p-list-metric--align-end {\n justify-items: end;\n text-align: end;\n }\n\n .p-list-metric--tone-positive {\n --p-list-metric-tone: #2f7d32;\n }\n\n .p-list-metric--tone-warning {\n --p-list-metric-tone: #b26a00;\n }\n\n .p-list-metric--tone-negative {\n --p-list-metric-tone: #b3261e;\n }\n\n .p-list-metric--tone-neutral {\n --p-list-metric-tone: var(--p-list-foreground-muted);\n }\n\n .p-list-metric__label {\n font-size: 0.7rem;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--p-list-foreground-muted);\n }\n\n .p-list-metric__main {\n display: grid;\n align-items: center;\n gap: 8px;\n min-width: 0;\n }\n\n .p-list-metric--layout-icon-value-caption .p-list-metric__main {\n grid-template-columns: auto minmax(0, 1fr);\n }\n\n .p-list-metric--layout-stacked-center .p-list-metric__main {\n justify-items: center;\n text-align: center;\n }\n\n .p-list-metric--icon-right .p-list-metric__main {\n grid-template-columns: minmax(0, 1fr) auto;\n }\n\n .p-list-metric__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--p-list-metric-tone, inherit);\n }\n\n .p-list-metric__icon--right {\n order: 2;\n }\n\n .p-list-metric__icon mat-icon {\n width: 1rem;\n height: 1rem;\n font-size: 1rem;\n }\n\n .p-list-metric__content {\n display: grid;\n gap: 2px;\n min-width: 0;\n }\n\n .p-list-metric__value-row {\n display: flex;\n align-items: baseline;\n gap: 6px;\n min-width: 0;\n flex-wrap: wrap;\n }\n\n .p-list-metric--layout-stacked-center .p-list-metric__value-row {\n justify-content: center;\n }\n\n .p-list-metric__value {\n font-size: 0.95rem;\n font-weight: 700;\n line-height: 1.1;\n min-width: 0;\n }\n\n .p-list-metric__caption,\n .p-list-metric__subcaption {\n font-size: 0.72rem;\n line-height: 1.2;\n color: var(--p-list-foreground-muted);\n }\n\n .p-list-metric__caption--inline {\n display: inline-flex;\n align-items: center;\n }\n\n .p-list-metric__progress {\n width: 100%;\n height: 4px;\n border-radius: 999px;\n overflow: hidden;\n background: var(--p-list-metric-progress-track);\n }\n\n .p-list-metric__progress-value {\n display: block;\n height: 100%;\n border-radius: inherit;\n background: var(--p-list-metric-progress-fill);\n }\n\n .p-list-metric__progress--indeterminate {\n position: relative;\n }\n\n .p-list-metric__progress--indeterminate .p-list-metric__progress-value {\n width: 40% !important;\n animation: p-list-metric-progress 1.2s ease-in-out infinite;\n }\n\n @keyframes p-list-metric-progress {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(250%);\n }\n }\n `,\n ],\n})\nexport class PraxisListMetricComponent {\n @Input() metric: any;\n\n metricClasses(): string[] {\n const layoutClass = String(this.metric?.layout || 'value-only').replaceAll(\n '+',\n '-',\n );\n return [\n this.metric?.class || '',\n this.metric?.toneClass || '',\n `p-list-metric--layout-${layoutClass}`,\n `p-list-metric--align-${this.metric?.align || 'start'}`,\n this.metric?.iconPosition === 'right' ? 'p-list-metric--icon-right' : '',\n ].filter(Boolean);\n }\n\n showLeftIcon(): boolean {\n return (\n !!this.metric?.icon &&\n this.metric?.iconPosition !== 'right' &&\n this.metric?.layout !== 'value-only' &&\n this.metric?.layout !== 'value+caption'\n );\n }\n\n showRightIcon(): boolean {\n return (\n !!this.metric?.icon &&\n this.metric?.iconPosition === 'right' &&\n this.metric?.layout !== 'value-only' &&\n this.metric?.layout !== 'value+caption'\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { ExecutiveBadgeComponent } from './executive-badge.component';\n\n@Component({\n selector: 'praxis-executive-account-identity',\n standalone: true,\n imports: [\n CommonModule,\n MatIconModule,\n PraxisIconDirective,\n ExecutiveBadgeComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"account-identity\">\n <span class=\"account-identity__title-row\">\n @if (displayTitle) {\n <span class=\"account-identity__title\">{{ displayTitle }}</span>\n }\n @if (displayMarkerIcon) {\n <mat-icon\n class=\"account-identity__marker\"\n [praxisIcon]=\"displayMarkerIcon\"\n aria-hidden=\"true\"\n ></mat-icon>\n }\n </span>\n @if (hasSubtitle) {\n <span class=\"account-identity__subtitle-row\">\n @if (displaySegmentLabel) {\n <praxis-executive-badge\n [variant]=\"segmentVariant\"\n [ariaLabel]=\"segmentAriaLabel\"\n >\n {{ displaySegmentLabel }}\n </praxis-executive-badge>\n }\n @if (displayAccountType) {\n <span class=\"account-identity__meta\">{{ displayAccountType }}</span>\n }\n @if (displayAccountType && displaySince) {\n <span class=\"account-identity__separator\" aria-hidden=\"true\">·</span>\n }\n @if (displaySince) {\n <span class=\"account-identity__meta\">Desde {{ displaySince }}</span>\n }\n </span>\n }\n </span>\n `,\n styles: [`\n :host {\n display: inline-flex;\n min-width: 0;\n }\n\n .account-identity {\n display: inline-flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n }\n\n .account-identity__title-row {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n }\n\n .account-identity__title {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 1.05rem;\n font-weight: 800;\n letter-spacing: -0.016em;\n color: #183046;\n line-height: 1.16;\n }\n\n .account-identity__marker {\n color: #b89536;\n font-size: 15px;\n width: 15px;\n height: 15px;\n flex-shrink: 0;\n transform: translateY(1px);\n }\n\n .account-identity__subtitle-row {\n display: inline-flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 7px;\n min-width: 0;\n }\n\n .account-identity__meta {\n display: inline-flex;\n align-items: center;\n color: #7f90a4;\n white-space: nowrap;\n font-size: 0.76rem;\n line-height: 1.18;\n }\n\n .account-identity__separator {\n color: #a5b0bc;\n font-size: 0.74rem;\n line-height: 1;\n }\n `],\n})\nexport class ExecutiveAccountIdentityComponent {\n @Input() title?: string | null;\n @Input() markerIcon?: string | null;\n @Input() segmentVariant: 'enterprise' | 'corporate' | 'middle' = 'enterprise';\n @Input() segmentLabel?: string | null;\n @Input() accountType?: string | null;\n @Input() since?: string | number | null;\n\n get displayTitle(): string {\n return String(this.title || '').trim();\n }\n\n get displayMarkerIcon(): string {\n return String(this.markerIcon || '').trim();\n }\n\n get displaySegmentLabel(): string {\n return String(this.segmentLabel || '').trim();\n }\n\n get displayAccountType(): string {\n return String(this.accountType || '').trim();\n }\n\n get displaySince(): string {\n const value = this.since;\n if (value == null) return '';\n return String(value).trim();\n }\n\n get hasSubtitle(): boolean {\n return !!(\n this.displaySegmentLabel ||\n this.displayAccountType ||\n this.displaySince\n );\n }\n\n get segmentAriaLabel(): string | undefined {\n return this.displaySegmentLabel\n ? `Segmento ${this.displaySegmentLabel}`\n : undefined;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport {\n ExecutiveAlert,\n ExecutiveAlertsComponent,\n} from './executive-alerts.component';\n\n@Component({\n selector: 'praxis-executive-alert-summary',\n standalone: true,\n imports: [CommonModule, ExecutiveAlertsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"alert-summary\">\n <praxis-executive-alerts\n [alerts]=\"alerts || []\"\n ></praxis-executive-alerts>\n </span>\n `,\n styles: [`\n :host {\n display: inline-flex;\n min-width: 0;\n }\n\n .alert-summary {\n display: inline-flex;\n min-width: 0;\n }\n `],\n})\nexport class ExecutiveAlertSummaryComponent {\n @Input() alerts: ExecutiveAlert[] = [];\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { ExecutiveOwnerComponent } from './executive-owner.component';\n\n@Component({\n selector: 'praxis-executive-owner-summary',\n standalone: true,\n imports: [\n CommonModule,\n MatIconModule,\n PraxisIconDirective,\n ExecutiveOwnerComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (displayIcon) {\n <span class=\"owner-summary owner-summary--icon\">\n <mat-icon\n class=\"owner-summary__icon\"\n [praxisIcon]=\"displayIcon\"\n aria-hidden=\"true\"\n ></mat-icon>\n @if (hasName) {\n <span class=\"owner-summary__name\">{{ displayName }}</span>\n }\n </span>\n } @else if (hasName) {\n <praxis-executive-owner [name]=\"displayName\"></praxis-executive-owner>\n }\n `,\n styles: [`\n :host {\n display: inline-flex;\n min-width: 0;\n }\n\n .owner-summary {\n display: inline-flex;\n align-items: center;\n gap: 9px;\n min-width: 0;\n font-size: 0.82rem;\n color: #5b6f84;\n font-weight: 500;\n }\n\n .owner-summary__icon {\n width: 20px;\n height: 20px;\n font-size: 20px;\n color: #8ea2b6;\n flex-shrink: 0;\n }\n\n .owner-summary__name {\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 1.15;\n }\n `],\n})\nexport class ExecutiveOwnerSummaryComponent {\n @Input() name?: string | null;\n @Input() icon?: string | null;\n\n get displayName(): string {\n return String(this.name || '').trim();\n }\n\n get hasName(): boolean {\n return !!this.displayName;\n }\n\n get displayIcon(): string {\n return String(this.icon || '').trim();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ExecutiveAccountIdentityComponent } from './executive/executive-account-identity.component';\nimport { ExecutiveAlertSummaryComponent } from './executive/executive-alert-summary.component';\nimport { ExecutiveAlertsComponent } from './executive/executive-alerts.component';\nimport { ExecutiveBadgeComponent } from './executive/executive-badge.component';\nimport { ExecutiveOwnerComponent } from './executive/executive-owner.component';\nimport { ExecutiveOwnerSummaryComponent } from './executive/executive-owner-summary.component';\nimport { normalizeListRuntimeComponentId } from './list-runtime-component.registry';\n\n@Component({\n selector: 'praxis-list-runtime-component',\n standalone: true,\n imports: [\n CommonModule,\n ExecutiveAccountIdentityComponent,\n ExecutiveAlertSummaryComponent,\n ExecutiveAlertsComponent,\n ExecutiveBadgeComponent,\n ExecutiveOwnerComponent,\n ExecutiveOwnerSummaryComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n class=\"p-list-runtime-component\"\n [ngClass]=\"component?.class\"\n [style.cssText]=\"component?.style\"\n >\n @if (!resolvedId()) {\n <span\n class=\"p-list-runtime-component__unsupported\"\n [attr.data-unsupported-template]=\"component?.componentId || 'component'\"\n aria-hidden=\"true\"\n ></span>\n } @else {\n @switch (resolvedId()) {\n @case (\"account-identity\") {\n <praxis-executive-account-identity\n [title]=\"stringInput('title', 'name')\"\n [markerIcon]=\"stringInput('markerIcon', 'executiveMarkerIcon', 'icon')\"\n [segmentVariant]=\"badgeVariant()\"\n [segmentLabel]=\"badgeLabel()\"\n [accountType]=\"stringInput('accountType', 'type')\"\n [since]=\"stringInput('since', 'sinceYear')\"\n ></praxis-executive-account-identity>\n }\n @case (\"alert-summary\") {\n <praxis-executive-alert-summary\n [alerts]=\"input('alerts', 'alertsData') || []\"\n ></praxis-executive-alert-summary>\n }\n @case (\"executive-alerts\") {\n <praxis-executive-alerts\n [alerts]=\"input('alerts', 'alertsData') || []\"\n ></praxis-executive-alerts>\n }\n @case (\"praxis-executive-alerts\") {\n <praxis-executive-alerts\n [alerts]=\"input('alerts', 'alertsData') || []\"\n ></praxis-executive-alerts>\n }\n @case (\"executive-owner\") {\n <praxis-executive-owner\n [name]=\"stringInput('name', 'ownerName')\"\n ></praxis-executive-owner>\n }\n @case (\"praxis-executive-owner\") {\n <praxis-executive-owner\n [name]=\"stringInput('name', 'ownerName')\"\n ></praxis-executive-owner>\n }\n @case (\"executive-badge\") {\n <praxis-executive-badge\n [variant]=\"badgeVariant()\"\n [ariaLabel]=\"stringInput('ariaLabel') || undefined\"\n >\n {{ badgeLabel() }}\n </praxis-executive-badge>\n }\n @case (\"praxis-executive-badge\") {\n <praxis-executive-badge\n [variant]=\"badgeVariant()\"\n [ariaLabel]=\"stringInput('ariaLabel') || undefined\"\n >\n {{ badgeLabel() }}\n </praxis-executive-badge>\n }\n @case (\"executive-trailing\") {\n <span class=\"exec-trailing-shell\">\n <praxis-executive-alerts\n [alerts]=\"input('alerts', 'alertsData') || []\"\n ></praxis-executive-alerts>\n <praxis-executive-owner\n [name]=\"stringInput('name', 'ownerName')\"\n ></praxis-executive-owner>\n </span>\n }\n @case (\"owner-summary\") {\n <praxis-executive-owner-summary\n [name]=\"stringInput('name', 'ownerName')\"\n [icon]=\"stringInput('icon', 'ownerIcon')\"\n ></praxis-executive-owner-summary>\n }\n }\n }\n </span>\n `,\n styles: [`\n :host {\n display: inline-flex;\n min-width: 0;\n }\n\n .p-list-runtime-component {\n display: inline-flex;\n min-width: 0;\n }\n\n .p-list-runtime-component__unsupported {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 0.75rem;\n height: 0.75rem;\n min-width: 0.75rem;\n border: 1px dashed var(--md-sys-color-outline-variant);\n border-radius: 999px;\n overflow: hidden;\n color: transparent;\n font-size: 0;\n line-height: 0;\n }\n `],\n})\nexport class PraxisListRuntimeComponentComponent {\n @Input() component: any;\n\n resolvedId():\n | 'account-identity'\n | 'alert-summary'\n | 'executive-alerts'\n | 'praxis-executive-alerts'\n | 'executive-owner'\n | 'praxis-executive-owner'\n | 'executive-badge'\n | 'praxis-executive-badge'\n | 'executive-trailing'\n | 'owner-summary'\n | undefined {\n return normalizeListRuntimeComponentId(this.component?.componentId);\n }\n\n input<T = any>(...keys: string[]): T | undefined {\n const source = this.component?.inputs || {};\n for (const key of keys) {\n if (source[key] !== undefined) {\n return source[key] as T;\n }\n }\n return undefined;\n }\n\n stringInput(...keys: string[]): string {\n const value = this.input(...keys);\n if (value == null) return '';\n return String(value);\n }\n\n badgeVariant(): 'enterprise' | 'corporate' | 'middle' {\n const variant = this.stringInput('variant', 'segmentVariant').trim();\n return ['enterprise', 'corporate', 'middle'].includes(variant)\n ? (variant as 'enterprise' | 'corporate' | 'middle')\n : 'enterprise';\n }\n\n badgeLabel(): string {\n return this.stringInput('label', 'segmentLabel').trim();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { PraxisListMetricComponent } from './praxis-list-metric.component';\nimport { PraxisListRuntimeComponentComponent } from './praxis-list-runtime-component.component';\n\n@Component({\n selector: 'praxis-list-compose',\n standalone: true,\n imports: [\n CommonModule,\n MatChipsModule,\n MatIconModule,\n PraxisIconDirective,\n PraxisListMetricComponent,\n PraxisListRuntimeComponentComponent,\n ],\n template: `\n <ng-container\n *ngTemplateOutlet=\"renderCompose; context: { $implicit: compose }\"\n ></ng-container>\n\n <ng-template #renderCompose let-composeNode>\n <div\n class=\"p-list-compose\"\n [ngClass]=\"composeClasses(composeNode)\"\n [style.cssText]=\"composeStyle(composeNode)\"\n >\n @for (node of composeNode?.items || []; track trackNode($index, node); let isLast = $last) {\n <ng-container\n *ngTemplateOutlet=\"renderNode; context: { $implicit: node }\"\n ></ng-container>\n @if (!isLast && composeNode?.separator) {\n <span class=\"p-list-compose__separator\">{{\n composeNode.separator\n }}</span>\n }\n }\n </div>\n </ng-template>\n\n <ng-template #renderNode let-node>\n @switch (node?.type) {\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"node?.value\"\n [ngClass]=\"node?.class\"\n [color]=\"isThemeColor(node?.color) ? node?.color : undefined\"\n [style.cssText]=\"\n ((node?.style || '') ? node.style + ';' : '') +\n iconStyle(node?.color)\n \"\n ></mat-icon>\n }\n @case (\"image\") {\n <span\n class=\"inline-image\"\n [ngClass]=\"node?.class\"\n [style.cssText]=\"node?.style\"\n >\n <img [src]=\"node?.value\" [alt]=\"node?.imageAlt || ''\" />\n @if (node?.badge?.value) {\n <mat-chip\n class=\"inline-badge\"\n [color]=\"\n isThemeColor(node?.badge?.color)\n ? node?.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (node?.badge?.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(node?.badge?.color, node?.badge?.variant)\n \"\n >\n {{ node?.badge?.value }}\n </mat-chip>\n }\n </span>\n }\n @case (\"chip\") {\n <mat-chip\n [color]=\"isThemeColor(node?.color) ? node?.color : undefined\"\n [ngClass]=\"[\n node?.class || '',\n (node?.variant || 'filled') === 'outlined' ? 'chip-outlined' : '',\n ]\"\n [style.cssText]=\"\n chipStyle(node?.color, node?.variant) +\n (node?.style ? ';' + node.style : '')\n \"\n >\n {{ node?.value }}\n </mat-chip>\n }\n @case (\"rating\") {\n <span [ngClass]=\"node?.class\" [style.cssText]=\"node?.style\">\n @for (_ of ratingRange(node); track $index; let idx = $index) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, node?.value)\"\n [color]=\"ratingThemeColor(node)\"\n [style.cssText]=\"ratingIconStyle(node)\"\n ></mat-icon>\n }\n </span>\n }\n @case (\"html\") {\n <span\n [ngClass]=\"node?.class\"\n [style.cssText]=\"node?.style\"\n [innerHTML]=\"node?.value\"\n ></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"node\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <ng-container\n *ngTemplateOutlet=\"renderCompose; context: { $implicit: node }\"\n ></ng-container>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"node\"\n ></praxis-list-runtime-component>\n }\n @case (\"unsupported\") {\n <span\n class=\"p-list-compose__unsupported\"\n [ngClass]=\"node?.class\"\n [style.cssText]=\"node?.style\"\n [attr.data-unsupported-template]=\"node?.unsupportedType || null\"\n aria-hidden=\"true\"\n >\n {{ node?.value }}\n </span>\n }\n @default {\n <span [ngClass]=\"node?.class\" [style.cssText]=\"node?.style\">{{\n node?.value\n }}</span>\n }\n }\n </ng-template>\n `,\n styles: [\n `\n :host {\n display: block;\n min-width: 0;\n }\n\n .p-list-compose {\n display: flex;\n min-width: 0;\n }\n\n .p-list-compose--direction-row {\n flex-direction: row;\n }\n\n .p-list-compose--direction-column {\n flex-direction: column;\n }\n\n .p-list-compose--align-start {\n align-items: flex-start;\n }\n\n .p-list-compose--align-center {\n align-items: center;\n }\n\n .p-list-compose--align-end {\n align-items: flex-end;\n }\n\n .p-list-compose--wrap {\n flex-wrap: wrap;\n }\n\n .p-list-compose--nowrap {\n flex-wrap: nowrap;\n }\n\n .p-list-compose__separator {\n color: var(--p-list-foreground-muted);\n white-space: pre-wrap;\n }\n\n .p-list-compose__unsupported {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 0.75rem;\n height: 0.75rem;\n min-width: 0.75rem;\n border: 1px dashed var(--md-sys-color-outline-variant);\n border-radius: 999px;\n overflow: hidden;\n color: transparent;\n font-size: 0;\n line-height: 0;\n }\n `,\n ],\n})\nexport class PraxisListComposeComponent {\n @Input() compose: any;\n\n composeClasses(composeNode: any): string[] {\n const direction = composeNode?.direction === 'column' ? 'column' : 'row';\n return [\n composeNode?.class || '',\n `p-list-compose--direction-${direction}`,\n `p-list-compose--align-${composeNode?.align || 'start'}`,\n composeNode?.wrap ? 'p-list-compose--wrap' : 'p-list-compose--nowrap',\n ].filter(Boolean);\n }\n\n composeStyle(composeNode: any): string {\n const gap = String(composeNode?.gap || '').trim();\n const base = gap ? `gap:${gap};` : '';\n return `${base}${composeNode?.style || ''}`;\n }\n\n trackNode(index: number, node: any): string {\n return `${index}:${node?.type || 'text'}:${node?.value || ''}`;\n }\n\n isThemeColor(color?: string): boolean {\n return ['primary', 'accent', 'warn'].includes(String(color || ''));\n }\n\n iconStyle(color?: string): string {\n return this.isThemeColor(color) || !color ? '' : `color:${color};`;\n }\n\n chipStyle(\n color?: string,\n variant?: 'filled' | 'outlined',\n ): string {\n const outlined = (variant || 'filled') === 'outlined';\n if (this.isThemeColor(color) || !color) {\n return outlined ? 'background:transparent;' : '';\n }\n return outlined\n ? `background:transparent;border:1px solid ${color};color:${color};`\n : `background:${color};color:#fff;`;\n }\n\n ratingRange(node: any): unknown[] {\n const max = Number(node?.props?.rating?.max ?? 5);\n return Array.from({ length: Number.isFinite(max) && max > 0 ? max : 5 });\n }\n\n starIcon(index: number, value: string): string {\n return index < Number(value || 0) ? 'star' : 'star_border';\n }\n\n ratingThemeColor(node: any): string | undefined {\n return this.isThemeColor(node?.color) ? node.color : undefined;\n }\n\n ratingIconStyle(node: any): string {\n const size = Number(node?.props?.rating?.size || 18);\n const color =\n !this.isThemeColor(node?.props?.rating?.color) &&\n node?.props?.rating?.color\n ? `color:${node.props.rating.color};`\n : '';\n return `font-size:${size}px;width:${size}px;height:${size}px;${color}`;\n }\n}\n","import {\n CSP_NONCE,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n booleanAttribute,\n inject,\n isDevMode,\n LOCALE_ID,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { MatListModule, MatSelectionListChange } from '@angular/material/list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport {\n PraxisListConfig,\n ListItemEvent,\n ListActionEvent,\n ListSelectionEvent,\n ListExpansionSectionDef,\n TemplateDef,\n ListRowLayoutSlot,\n ListTemplatingSlot,\n} from '../models/list-config.model';\nimport { evaluateTemplate } from '../utils/template-evaluator';\nimport { adaptSelection } from '../utils/selection-adapter';\nimport { ListDataService } from '../services/list-data.service';\nimport type { ListSection } from '../services/list-data.service';\nimport { ListSkinService } from '../services/list-skin.service';\nimport { ExecutiveBadgeComponent } from './executive/executive-badge.component';\nimport { ExecutiveAlertsComponent } from './executive/executive-alerts.component';\nimport { ExecutiveOwnerComponent } from './executive/executive-owner.component';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\nimport {\n ASYNC_CONFIG_STORAGE,\n AsyncConfigStorage,\n GenericCrudService,\n ComponentKeyService,\n GlobalActionService,\n GLOBAL_DIALOG_SERVICE,\n LoggerContext,\n LoggerLogOptions,\n LoggerService,\n PraxisI18nService,\n} from '@praxisui/core';\nimport type { GlobalDialogService } from '@praxisui/core';\nimport { PraxisListConfigEditor } from '../editors/list-config-editor.component';\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\nimport { ListAiAdapter } from '../ai/list-ai.adapter';\nimport { take } from 'rxjs/operators';\nimport { takeUntil } from 'rxjs/operators';\nimport { PraxisAiAssistantComponent } from '@praxisui/ai';\nimport {\n buildListApplyPlan,\n createListAuthoringDocument,\n inferListAuthoringDocument,\n normalizeListConfig,\n parseLegacyOrListDocument,\n} from '../list-editor-capability';\nimport {\n ListApplyPlan,\n ListAuthoringDocument,\n ListRuntimeContext,\n} from '../list-editor-document.model';\nimport {\n PRAXIS_LIST_I18N_NAMESPACE,\n providePraxisListI18n,\n} from '../i18n/list.i18n';\nimport { PraxisListMetricComponent } from './praxis-list-metric.component';\nimport { PraxisListComposeComponent } from './praxis-list-compose.component';\nimport { PraxisListRuntimeComponentComponent } from './praxis-list-runtime-component.component';\nimport { normalizeListRuntimeComponentId } from './list-runtime-component.registry';\n\ntype MetricLayout =\n | 'value-only'\n | 'value+caption'\n | 'icon+value+caption'\n | 'stacked-center';\ntype MetricAlign = 'start' | 'center' | 'end';\n\ninterface ListMetricProgressViewModel {\n mode: 'determinate' | 'indeterminate';\n percent: number;\n style?: string;\n}\n\ninterface ListMetricViewModel {\n type: 'metric';\n class?: string;\n style?: string;\n label?: string;\n value: string;\n caption?: string;\n subcaption?: string;\n captionPosition?: 'below-value' | 'below-progress';\n icon?: string;\n iconStyle?: string;\n toneClass?: string;\n valueClass?: string;\n valueStyle?: string;\n layout: MetricLayout;\n align: MetricAlign;\n iconPosition?: 'left' | 'right' | 'top';\n progress?: ListMetricProgressViewModel;\n}\n\ninterface ListComposeViewModel {\n type: 'compose';\n class?: string;\n style?: string;\n items: Array<Record<string, any>>;\n direction: 'row' | 'column';\n align: 'start' | 'center' | 'end';\n gap?: string;\n wrap: boolean;\n separator?: string;\n}\n\ninterface ListRowLayoutColumnViewModel {\n slot: ListRowLayoutSlot;\n width?: string;\n minWidth?: string;\n maxWidth?: string;\n align?: 'start' | 'center' | 'end';\n justify?: 'start' | 'center' | 'end' | 'stretch';\n class?: string;\n style?: string;\n}\n\ninterface ListUnsupportedComposeNodeViewModel {\n type: 'unsupported';\n value: string;\n class?: string;\n style?: string;\n unsupportedType: 'component';\n}\n\ninterface ListRuntimeComponentViewModel {\n type: 'component';\n class?: string;\n style?: string;\n componentId: string;\n inputs: Record<string, any>;\n}\n\nconst ROW_LAYOUT_SUPPORTED_SLOTS: ListRowLayoutSlot[] = [\n 'leading',\n 'primary',\n 'secondary',\n 'meta',\n 'trailing',\n 'identity',\n 'balance',\n 'limit',\n 'risk',\n 'alerts',\n 'owner',\n 'actions',\n 'expand',\n];\n\n@Component({\n selector: 'praxis-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatListModule,\n MatDividerModule,\n MatIconModule,\n PraxisIconDirective,\n MatChipsModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatTooltipModule,\n PraxisAiAssistantComponent,\n ExecutiveBadgeComponent,\n ExecutiveAlertsComponent,\n ExecutiveOwnerComponent,\n PraxisListMetricComponent,\n PraxisListComposeComponent,\n PraxisListRuntimeComponentComponent,\n ],\n templateUrl: './praxis-list.component.html',\n styleUrls: ['./praxis-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [GenericCrudService, ListDataService, providePraxisListI18n()],\n})\nexport class PraxisList implements OnInit, OnChanges, OnDestroy {\n private static nextSkinScopeId = 0;\n private customizationEnabled = false;\n private readonly hostLocale = inject(LOCALE_ID, { optional: true }) ?? 'en-US';\n\n @Input() config!: PraxisListConfig;\n @Input({ required: true }) listId!: string;\n @Input() componentInstanceId?: string;\n @Input() form?: FormGroup | null;\n @Input({ transform: booleanAttribute })\n set enableCustomization(value: boolean) {\n this.customizationEnabled = value;\n }\n get enableCustomization(): boolean {\n return this.customizationEnabled;\n }\n\n @Output() itemClick = new EventEmitter<ListItemEvent>();\n @Output() actionClick = new EventEmitter<ListActionEvent>();\n @Output() selectionChange = new EventEmitter<ListSelectionEvent>();\n\n items$!: import('rxjs').Observable<any[]>;\n sections$!: import('rxjs').Observable<ListSection<any>[]>;\n loading$!: import('rxjs').Observable<boolean>;\n total$!: import('rxjs').Observable<number>;\n page$!: import('rxjs').Observable<{\n pageNumber: number;\n pageSize: number;\n sort?: string[];\n }>;\n private lastQuery: Record<string, any> = {};\n private search$ = new Subject<string>();\n get layoutLines(): number {\n return this.config?.layout?.lines ?? 2;\n }\n\n boundControl: FormControl<unknown | unknown[] | null> = new FormControl<\n unknown | unknown[] | null\n >(null);\n readonly skinScopeId = `praxis-list-scope-${PraxisList.nextSkinScopeId++}`;\n skinClasses = '';\n inlineCss = '';\n readonly cspNonce = inject(CSP_NONCE, { optional: true }) ?? null;\n public aiAdapter = new ListAiAdapter(this);\n\n private readonly storage = inject<AsyncConfigStorage>(ASYNC_CONFIG_STORAGE);\n private readonly skin = inject(ListSkinService);\n private inferredForPath = new Set<string>();\n private schemaInferenceInFlight = new Set<string>();\n private readonly schemaFieldsByPath = new Map<string, string[]>();\n private appliedRuntimeConfig?: PraxisListConfig;\n\n private readonly data = inject<ListDataService<any>>(ListDataService as any);\n private readonly settings = inject(SettingsPanelService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly componentKeys = inject(ComponentKeyService);\n private readonly logger = inject(LoggerService);\n private readonly i18n = inject(PraxisI18nService);\n private readonly logContext: LoggerContext = {\n lib: 'praxis-list',\n component: 'PraxisList',\n };\n private readonly route = (() => {\n try {\n return inject(ActivatedRoute);\n } catch {\n return undefined as ActivatedRoute | undefined;\n }\n })();\n private readonly globalActions = (() => {\n try {\n return inject(GlobalActionService);\n } catch {\n return null;\n }\n })();\n private readonly dialog = (() => {\n try {\n return inject(GLOBAL_DIALOG_SERVICE);\n } catch {\n return null;\n }\n })() as GlobalDialogService | null;\n private warnedMissingId = false;\n private hasHydratedPersistence = false;\n private hydratedPersistenceKey: string | null = null;\n private hydratingPersistenceKey: string | null = null;\n private externalConfigRevision = 0;\n private nextActionItemObjectId = 1;\n private readonly actionItemObjectIds = new WeakMap<object, number>();\n private nextExpansionItemObjectId = 1;\n private readonly expansionItemObjectIds = new WeakMap<object, number>();\n private readonly destroy$ = new Subject<void>();\n actionLoadingState: Record<string, boolean> = {};\n private expandedItemKeys = new Set<string>();\n\n ngOnInit(): void {\n this.initializeDataStreams();\n this.applyAuthoringPayload(this.config, 'external-input');\n this.setupSearch();\n this.applyPersistence();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let shouldApplyPersistence = false;\n if (changes['listId'] || changes['componentInstanceId']) {\n const nextKey = this.storageKey();\n const keyActuallyChanged = nextKey !== this.hydratedPersistenceKey;\n if (keyActuallyChanged) {\n this.hasHydratedPersistence = false;\n this.hydratedPersistenceKey = null;\n this.hydratingPersistenceKey = null;\n shouldApplyPersistence =\n (!!changes['listId'] && !changes['listId'].firstChange) ||\n (!!changes['componentInstanceId'] &&\n !changes['componentInstanceId'].firstChange);\n }\n }\n if (changes['config']) {\n // Avoid double initialization: the first change for @Input happens before ngOnInit.\n // We already perform the initial setup in ngOnInit, so skip the first change here.\n if (!changes['config'].firstChange) {\n this.externalConfigRevision += 1;\n this.applyAuthoringPayload(\n changes['config'].currentValue,\n 'external-input',\n );\n }\n }\n if (shouldApplyPersistence) {\n this.applyPersistence();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private applyPersistence(): void {\n const key = this.storageKey();\n if (!key) return;\n if (this.hydratingPersistenceKey === key) return;\n if (this.hasHydratedPersistence && this.hydratedPersistenceKey === key)\n return;\n this.hydratingPersistenceKey = key;\n const revisionAtLoadStart = this.externalConfigRevision;\n this.storage\n .loadConfig<PraxisListConfig>(key)\n .pipe(take(1))\n .subscribe({\n next: (saved) => {\n if (saved) {\n // Ignore late responses from an outdated persistence scope.\n if (this.storageKey() !== key) return;\n // Avoid restoring stale persisted data over a newer external @Input config.\n if (revisionAtLoadStart !== this.externalConfigRevision) return;\n const currentId = this.config?.id;\n const persisted = currentId\n ? { ...saved, id: currentId }\n : { ...saved };\n this.applyAuthoringPayload(persisted, 'persistence');\n }\n },\n error: () => {\n if (this.hydratingPersistenceKey === key) {\n this.hydratingPersistenceKey = null;\n }\n },\n complete: () => {\n if (this.storageKey() === key) {\n this.hasHydratedPersistence = true;\n this.hydratedPersistenceKey = key;\n }\n if (this.hydratingPersistenceKey === key) {\n this.hydratingPersistenceKey = null;\n }\n },\n });\n }\n\n private initializeDataStreams(): void {\n if (this.items$) return;\n this.items$ = this.data.stream();\n this.sections$ = this.data.groupedStream();\n this.loading$ = this.data.loading$;\n this.total$ = this.data.total$;\n this.page$ = (this.data as any).pageState$;\n }\n\n private setupSearch(): void {\n this.search$\n .pipe(debounceTime(300), distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((term) => {\n const field = this.config?.ui?.searchField;\n if (!field) return;\n const q = { ...(this.lastQuery || {}), [field]: term };\n this.lastQuery = q;\n this.data.setQuery(q);\n });\n }\n\n private persistConfig(key: string, config: PraxisListConfig): void {\n this.storage\n .saveConfig(key, config)\n .pipe(take(1))\n .subscribe({ error: () => {} });\n }\n\n private applySkins(): void {\n this.skinClasses = this.skin.toHostClasses(this.config).join(' ');\n const selector = `.praxis-list-root[data-skin-scope=\"${this.skinScopeId}\"]`;\n this.inlineCss = this.skin.toInlineStyle(this.config, selector, true);\n }\n\n isListVariant(): boolean {\n return (this.config?.layout?.variant || 'list') === 'list';\n }\n\n isCardsVariant(): boolean {\n return (this.config?.layout?.variant || 'list') === 'cards';\n }\n\n isTilesVariant(): boolean {\n return (this.config?.layout?.variant || 'list') === 'tiles';\n }\n\n isSelectionEnabled(): boolean {\n return (this.config?.selection?.mode || 'none') !== 'none';\n }\n\n private setupSelectionBinding(): void {\n if (!this.isSelectionEnabled()) {\n // Keep a local control to satisfy template typing; it won't be used when selection is disabled\n this.boundControl.setValue(null);\n return;\n }\n const mode = this.config?.selection?.mode || 'none';\n const path = this.config?.selection?.formControlPath;\n const name = this.config?.selection?.formControlName;\n if (this.form && (name || path)) {\n const ctrl = name\n ? this.form.get(name)\n : path\n ? this.form.get(path!)\n : null;\n if (ctrl instanceof FormControl) {\n this.boundControl = ctrl as FormControl<any>;\n return;\n }\n }\n // Fallback to local control\n this.boundControl = new FormControl<unknown | unknown[] | null>(\n mode === 'multiple' ? ([] as unknown[]) : null,\n );\n }\n\n leading = (item: any) => this.evalSlot('leading', item);\n primary = (item: any) => this.evalSlot('primary', item);\n secondary = (item: any) => this.evalSlot('secondary', item);\n meta = (item: any) => this.evalSlot('meta', item);\n trailing = (item: any) => this.evalSlot('trailing', item);\n identity = (item: any) => this.evalSlot('identity', item);\n balance = (item: any) => this.evalSlot('balance', item);\n limit = (item: any) => this.evalSlot('limit', item);\n risk = (item: any) => this.evalSlot('risk', item);\n alerts = (item: any) => this.evalSlot('alerts', item);\n owner = (item: any) => this.evalSlot('owner', item);\n sectionHeaderTemplate = (key: string) =>\n this.evalSlot('sectionHeader', { key }) || { type: 'text', value: key };\n emptyStateTemplate = () =>\n this.evalSlot('emptyState', {}) || {\n type: 'text',\n value: this.emptyStateLabel(),\n };\n\n itemRuleClass(item: any): string | undefined {\n const rules = this.config?.rules?.itemStyles || [];\n const classes = rules\n .filter((rule) =>\n this.evaluateRuntimeCondition(rule.condition, item, 'rules.itemStyles'),\n )\n .map((rule) => rule.class)\n .filter((value): value is string => !!value && value.trim().length > 0);\n return this.joinClasses(...classes);\n }\n\n itemRuleStyle(item: any): string | undefined {\n const rules = this.config?.rules?.itemStyles || [];\n const styles = rules.map((rule) => {\n if (\n !this.evaluateRuntimeCondition(rule.condition, item, 'rules.itemStyles')\n ) {\n return undefined;\n }\n return this.joinStyles(\n rule.style,\n rule.border ? `border:${rule.border};` : undefined,\n rule.background ? `background:${rule.background};` : undefined,\n );\n });\n return this.joinStyles(...styles);\n }\n\n rowLayoutItemStyle(item: any): string | undefined {\n return this.joinStyles(this.rowLayoutContentStyle(), this.itemRuleStyle(item));\n }\n\n rowLayoutItemClass(item: any): string | undefined {\n return this.joinClasses(this.rowLayoutContentClass(), this.itemRuleClass(item));\n }\n\n hasRowLayoutGrid(): boolean {\n return (\n this.isListVariant() &&\n (this.config?.layout?.rowLayout?.type || 'grid') === 'grid' &&\n this.rowLayoutColumns().length > 0\n );\n }\n\n rowLayoutColumns(): ListRowLayoutColumnViewModel[] {\n const columns = this.config?.layout?.rowLayout?.columns;\n if (!Array.isArray(columns)) return [];\n return columns\n .map((column) => ({\n slot: String(column?.slot || '').trim() as ListRowLayoutSlot,\n width:\n typeof column?.width === 'string' ? column.width.trim() || undefined : undefined,\n minWidth:\n typeof column?.minWidth === 'string'\n ? column.minWidth.trim() || undefined\n : undefined,\n maxWidth:\n typeof column?.maxWidth === 'string'\n ? column.maxWidth.trim() || undefined\n : undefined,\n align: column?.align,\n justify: column?.justify,\n class:\n typeof column?.class === 'string' ? column.class.trim() || undefined : undefined,\n style:\n typeof column?.style === 'string' ? column.style.trim() || undefined : undefined,\n }))\n .filter((column) => ROW_LAYOUT_SUPPORTED_SLOTS.includes(column.slot));\n }\n\n rowLayoutTrackColumn(index: number, column: ListRowLayoutColumnViewModel): string {\n return `${index}:${column.slot}`;\n }\n\n rowLayoutContentStyle(): string | undefined {\n const rowLayout = this.config?.layout?.rowLayout;\n if (!this.hasRowLayoutGrid() || !rowLayout) return undefined;\n return this.joinStyles(\n this.cssVar(\n '--p-list-row-template-columns',\n this.rowLayoutTemplateColumns(),\n ),\n this.cssVar(\n '--p-list-row-gap',\n typeof rowLayout.gap === 'string' ? rowLayout.gap.trim() || undefined : undefined,\n ),\n this.cssVar('--p-list-row-align-items', this.rowLayoutAlignItems()),\n rowLayout.style,\n );\n }\n\n rowLayoutContentClass(): string | undefined {\n return this.joinClasses(\n 'list-item-content--row-layout',\n this.config?.layout?.rowLayout?.class,\n );\n }\n\n rowLayoutColumnClass(column: ListRowLayoutColumnViewModel): string | undefined {\n return this.joinClasses(\n 'list-row-slot',\n `list-row-slot--${this.sanitizeCssToken(column.slot)}`,\n column.class,\n );\n }\n\n rowLayoutColumnStyle(column: ListRowLayoutColumnViewModel): string | undefined {\n return this.joinStyles(\n column.minWidth ? `min-width:${column.minWidth};` : undefined,\n column.maxWidth ? `max-width:${column.maxWidth};` : undefined,\n column.justify ? `justify-self:${column.justify};` : undefined,\n (column.align || this.rowLayoutAlignItems()) &&\n (column.align || this.rowLayoutAlignItems()) !== 'stretch'\n ? `align-self:${column.align || this.rowLayoutAlignItems()};`\n : undefined,\n this.rowLayoutTextAlign(column.justify),\n column.style,\n );\n }\n\n rowLayoutSlot(item: any, slot: string): Record<string, any> | null {\n switch (slot) {\n case 'leading':\n return this.leading(item);\n case 'primary':\n return this.primary(item);\n case 'secondary':\n return this.secondary(item);\n case 'meta':\n return this.meta(item);\n case 'trailing':\n return this.trailing(item);\n case 'identity':\n return this.identity(item);\n case 'balance':\n return this.balance(item);\n case 'limit':\n return this.limit(item);\n case 'risk':\n return this.risk(item);\n case 'alerts':\n return this.alerts(item);\n case 'owner':\n return this.owner(item);\n default:\n return null;\n }\n }\n\n rowLayoutHasSlot(slot: ListRowLayoutSlot): boolean {\n return this.rowLayoutColumns().some((column) => column.slot === slot);\n }\n\n rowLayoutImageAlt(slot: string): string {\n const templating = this.config?.templating as Record<string, any> | undefined;\n return String(templating?.[slot]?.imageAlt || '');\n }\n\n rowLayoutAlignItems(): 'start' | 'center' | 'end' | 'stretch' {\n const rowLayout = this.config?.layout?.rowLayout as\n | Record<string, any>\n | undefined;\n const alias = (rowLayout as any)?.itemAlignY;\n const value = String(alias || rowLayout?.align || 'center').trim();\n return ['start', 'center', 'end', 'stretch'].includes(value)\n ? (value as 'start' | 'center' | 'end' | 'stretch')\n : 'center';\n }\n\n private rowLayoutTemplateColumns(): string | undefined {\n const columns = this.rowLayoutColumns();\n if (!columns.length) return undefined;\n return columns\n .map((column) => this.rowLayoutColumnWidth(column))\n .join(' ');\n }\n\n private rowLayoutColumnWidth(\n column: ListRowLayoutColumnViewModel,\n ): string {\n if (column.width && column.minWidth) {\n return `minmax(${column.minWidth}, ${column.width})`;\n }\n if (column.width) return column.width;\n if (column.minWidth) return `minmax(${column.minWidth}, 1fr)`;\n if (column.slot === 'primary' || column.slot === 'secondary') {\n return 'minmax(0, 1fr)';\n }\n return 'auto';\n }\n\n private rowLayoutTextAlign(\n justify: ListRowLayoutColumnViewModel['justify'],\n ): string | undefined {\n if (justify === 'center') return 'text-align:center;';\n if (justify === 'end') return 'text-align:end;';\n return undefined;\n }\n\n private cssVar(\n name: string,\n value: string | undefined,\n ): string | undefined {\n const normalized = String(value || '').trim();\n return normalized ? `${name}:${normalized};` : undefined;\n }\n\n private sanitizeCssToken(value: string): string {\n return String(value || '')\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, '-');\n }\n featureLabel(item: any, expr?: string): string {\n const out = evaluateTemplate(\n { type: 'text', expr: expr || '' } as any,\n item,\n this.templateEvaluatorOptions(),\n );\n return out?.value ?? '';\n }\n plainText(value: string | null | undefined): string | null {\n if (!value) return null;\n return (\n value\n .replace(/<[^>]*>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim() || null\n );\n }\n itemAriaLabel(item: any): string | null {\n return (\n this.slotAriaLabel(item, 'identity') ||\n this.slotAriaLabel(item, 'primary') ||\n this.slotAriaLabel(item, 'secondary')\n );\n }\n\n private accessibleItemLabel(item: any): string {\n return this.itemAriaLabel(item) || this.t('itemDetails', 'Detalhes do item');\n }\n\n private slotAriaLabel(\n item: any,\n slot: ListTemplatingSlot,\n ): string | null {\n return this.nodeAriaLabel(this.evalSlot(slot, item));\n }\n\n private nodeAriaLabel(\n node: Record<string, any> | null | undefined,\n ): string | null {\n if (!node || typeof node !== 'object') return null;\n\n if (node.type === 'compose' && Array.isArray(node.items)) {\n return this.plainText(\n node.items\n .map((child: Record<string, any>) => this.nodeAriaLabel(child))\n .filter((value: string | null): value is string => !!value)\n .join(' '),\n );\n }\n\n if (node.type === 'metric') {\n return this.plainText(\n [node.label, node.value, node.caption, node.subcaption]\n .filter(\n (value): value is string =>\n typeof value === 'string' && !!value.trim(),\n )\n .join(' '),\n );\n }\n\n if (typeof node.value === 'string') {\n return this.plainText(node.value);\n }\n\n return null;\n }\n featureLabelLines(item: any, expr?: string): string[] {\n return this.featureLabel(item, expr)\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => !!line);\n }\n featureSemanticClass(\n item: any,\n expr?: string,\n featureClass?: string,\n ): string | null {\n if (!(featureClass || '').includes('exec-metric--risk')) return null;\n const lines = this.featureLabelLines(item, expr);\n const tone = (lines.at(-1) || '').toLowerCase();\n if (tone.includes('alto')) return 'exec-metric--risk-high';\n if (tone.includes('medio') || tone.includes('monitor'))\n return 'exec-metric--risk-medium';\n return 'exec-metric--risk-low';\n }\n featureProgressPercent(\n item: any,\n expr?: string,\n featureClass?: string,\n ): number | null {\n if (!(featureClass || '').includes('exec-metric--limit')) return null;\n const lines = this.featureLabelLines(item, expr);\n const match = lines\n .map((line) => line.match(/(\\d{1,3})\\s*%/))\n .find((result) => !!result);\n const parsed = Number(match?.[1]);\n if (!Number.isFinite(parsed)) return null;\n return Math.min(100, Math.max(0, parsed));\n }\n\n private metricText(\n source: string | undefined,\n item: any,\n ): string | undefined {\n if (typeof source !== 'string') return undefined;\n const raw = source.trim();\n if (!raw) return undefined;\n const value = this.evalString(raw, { item });\n return value.trim() ? value : undefined;\n }\n\n private metricToken(\n literal: string | undefined,\n expr: string | undefined,\n item: any,\n ): string | undefined {\n const exprValue = this.metricText(expr, item);\n if (exprValue) return exprValue;\n if (typeof literal !== 'string') return undefined;\n const value = literal.trim();\n return value || undefined;\n }\n\n private buildMetricView(\n def: any,\n item: any,\n ): ListMetricViewModel | null {\n const metric = def?.props?.metric || {};\n const label = this.metricText(metric.label, item);\n const value =\n this.metricText(metric.valueExpr || def?.expr, item) ||\n this.metricText(def?.expr, item) ||\n '';\n const caption =\n this.metricText(metric.caption, item) ||\n this.metricText(metric.legendExpr, item);\n const subcaption = this.metricText(metric.subcaption, item);\n const icon = this.metricToken(metric.icon, metric.iconExpr, item);\n const tone = this.metricToken(metric.tone, metric.toneExpr, item);\n const iconTone = this.metricToken(undefined, metric.iconColorExpr, item);\n const layout = this.metricLayout(metric, icon, caption, subcaption);\n const align = this.metricAlign(metric.align, layout);\n const toneStyle = this.metricToneStyle(tone);\n const progress = this.buildMetricProgress(metric, item, tone);\n\n return {\n type: 'metric',\n class: def?.class,\n style: this.joinStyles(def?.style, toneStyle),\n label,\n value,\n caption,\n subcaption,\n captionPosition:\n metric.captionPosition === 'below-progress'\n ? 'below-progress'\n : 'below-value',\n icon,\n iconStyle: this.joinStyles(\n undefined,\n this.metricColorStyle(iconTone || tone),\n ),\n toneClass: this.metricToneClass(tone),\n valueClass: metric.valueClass,\n valueStyle: metric.valueStyle,\n layout,\n align,\n iconPosition: this.metricIconPosition(metric, layout),\n progress,\n };\n }\n\n private buildComposeView(\n def: TemplateDef | undefined,\n item: any,\n ): ListComposeViewModel | null {\n const compose = def?.props?.compose;\n if (!compose) return null;\n const itemDefs = Array.isArray(compose.items)\n ? compose.items\n : Array.isArray(compose.nodes)\n ? compose.nodes\n : [];\n const items = itemDefs\n .map((node) => this.evaluateTemplateNode(node, item, true))\n .filter((node): node is Record<string, any> => !!node);\n const direction =\n compose.direction ||\n (compose.orientation === 'vertical' ? 'column' : 'row');\n\n return {\n type: 'compose',\n class: this.joinClasses(def?.class, compose.class),\n style: this.joinStyles(def?.style, compose.style),\n items,\n direction: direction === 'column' ? 'column' : 'row',\n align: compose.align || 'start',\n gap: typeof compose.gap === 'string' ? compose.gap.trim() || undefined : undefined,\n wrap: compose.wrap === true,\n separator:\n typeof compose.separator === 'string'\n ? compose.separator\n : undefined,\n };\n }\n\n private buildMetricProgress(\n metric: any,\n item: any,\n tone: string | undefined,\n ): ListMetricProgressViewModel | undefined {\n const progress = metric.progress || {};\n const sourceExpr = progress.valueExpr || metric.barValueExpr;\n const enabled =\n progress.valueExpr !== undefined ||\n metric.barValueExpr !== undefined ||\n metric.showBar === true;\n if (!enabled || !sourceExpr) return undefined;\n\n const rawValue = Number(this.metricText(sourceExpr, item));\n const max = Number(progress.max ?? 100);\n const mode =\n progress.mode || metric.barVariant || ('determinate' as const);\n const normalizedMax =\n Number.isFinite(max) && max > 0 ? max : 100;\n const percent = Number.isFinite(rawValue)\n ? Math.max(0, Math.min(100, (rawValue / normalizedMax) * 100))\n : 0;\n const color =\n this.metricToken(progress.color, progress.colorExpr, item) ||\n metric.barColor ||\n tone;\n\n return {\n mode,\n percent,\n style: this.joinStyles(\n this.metricCssVar('--p-list-metric-progress-fill', color),\n this.metricCssVar(\n '--p-list-metric-progress-track',\n progress.trackColor,\n ),\n ),\n };\n }\n\n private metricLayout(\n metric: any,\n icon: string | undefined,\n caption: string | undefined,\n subcaption: string | undefined,\n ): MetricLayout {\n const explicit = metric?.layout as MetricLayout | undefined;\n if (explicit) return explicit;\n if (metric?.iconPosition === 'top') return 'stacked-center';\n if (icon) return 'icon+value+caption';\n if (caption || subcaption) return 'value+caption';\n return 'value-only';\n }\n\n private metricAlign(\n align: MetricAlign | undefined,\n layout: MetricLayout,\n ): MetricAlign {\n if (align) return align;\n return layout === 'stacked-center' ? 'center' : 'start';\n }\n\n private metricIconPosition(\n metric: any,\n layout: MetricLayout,\n ): 'left' | 'right' | 'top' {\n if (layout === 'stacked-center') return 'top';\n return metric?.iconPosition === 'right' ? 'right' : 'left';\n }\n\n private metricToneClass(tone: string | undefined): string | undefined {\n const normalized = String(tone || '')\n .trim()\n .toLowerCase();\n if (!normalized) return undefined;\n if (\n ['positive', 'success', 'good', 'low', 'healthy'].includes(normalized)\n ) {\n return 'p-list-metric--tone-positive';\n }\n if (\n ['warning', 'warn', 'medium', 'monitor', 'caution'].includes(normalized)\n ) {\n return 'p-list-metric--tone-warning';\n }\n if (\n [\n 'negative',\n 'danger',\n 'error',\n 'critical',\n 'high',\n 'risk-high',\n ].includes(normalized)\n ) {\n return 'p-list-metric--tone-negative';\n }\n if (['neutral', 'default', 'muted'].includes(normalized)) {\n return 'p-list-metric--tone-neutral';\n }\n return undefined;\n }\n\n private metricToneStyle(tone: string | undefined): string | undefined {\n return this.metricCssVar('--p-list-metric-tone', tone);\n }\n\n private metricColorStyle(color: string | undefined): string | undefined {\n const resolved = this.resolveMetricColor(color);\n return resolved ? `color:${resolved};` : undefined;\n }\n\n private metricCssVar(\n name: string,\n value: string | undefined,\n ): string | undefined {\n const resolved = this.resolveMetricColor(value);\n return resolved ? `${name}:${resolved};` : undefined;\n }\n\n private resolveMetricColor(color: string | undefined): string | undefined {\n const raw = String(color || '').trim();\n if (!raw) return undefined;\n if (raw === 'primary') return 'var(--md-sys-color-primary)';\n if (raw === 'accent') return 'var(--md-sys-color-secondary)';\n if (raw === 'warn') return 'var(--md-sys-color-error)';\n const lowered = raw.toLowerCase();\n if (\n [\n 'positive',\n 'success',\n 'good',\n 'low',\n 'healthy',\n 'warning',\n 'medium',\n 'monitor',\n 'caution',\n 'negative',\n 'danger',\n 'error',\n 'critical',\n 'high',\n 'risk-high',\n 'neutral',\n 'default',\n 'muted',\n ].includes(lowered)\n ) {\n return undefined;\n }\n return raw;\n }\n\n private joinStyles(\n ...parts: Array<string | undefined>\n ): string | undefined {\n const value = parts\n .filter((part): part is string => !!part && part.trim().length > 0)\n .join(' ');\n return value || undefined;\n }\n\n private joinClasses(\n ...parts: Array<string | undefined>\n ): string | undefined {\n const value = parts\n .filter((part): part is string => !!part && part.trim().length > 0)\n .join(' ');\n return value || undefined;\n }\n\n featuresVisible(): boolean {\n const t = this.config?.templating;\n const has = (t?.features?.length || 0) > 0;\n const visible = t?.featuresVisible !== false;\n return has && visible;\n }\n featuresMode(): 'icons+labels' | 'icons-only' | 'labels-only' {\n return (this.config?.templating as any)?.featuresMode || 'icons+labels';\n }\n\n hasSkeleton(): boolean {\n return !!this.config?.templating?.skeleton && this.skeletonCount() > 0;\n }\n skeletonCount(): number {\n return this.config?.templating?.skeleton?.count ?? 3;\n }\n skeletonItems(): any[] {\n return Array.from({ length: this.skeletonCount() });\n }\n\n visibleActions(\n item: any,\n placement?: 'actions' | 'trailing',\n ) {\n const actions = this.config?.actions || [];\n return actions.filter((a) => {\n if (!this.evaluateActionVisibility(a?.showIf, item)) {\n return false;\n }\n if (!placement) return true;\n return this.actionPlacement(a) === placement;\n });\n }\n\n onItemClick(item: any, index: number, section?: string): void {\n this.itemClick.emit({ item, index, section });\n }\n\n onRowActivate(item: any, index: number, section?: string): void {\n if (this.expandableByRow()) {\n this.toggleExpanded(item, index);\n return;\n }\n this.onItemClick(item, index, section);\n }\n\n onRowSpaceActivate(\n event: Event,\n clickable: boolean,\n item: any,\n index: number,\n section?: string,\n ): void {\n if (!clickable) return;\n event.preventDefault();\n this.onRowActivate(item, index, section);\n }\n\n onExpandToggle(event: Event, item: any, index: number): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.isExpandable()) return;\n this.toggleExpanded(item, index);\n }\n\n onActionKeydown(ev: Event): void {\n ev.stopPropagation();\n }\n\n configEditorLabel(): string {\n return this.t('configEdit', 'Editar configurações');\n }\n\n expandToggleAriaLabel(item: any, index: number): string {\n return this.isExpanded(item, index)\n ? this.t('collapseDetails', 'Recolher detalhes')\n : this.t('expandDetails', 'Expandir detalhes');\n }\n\n expansionRegionAriaLabel(item: any): string {\n const label = this.accessibleItemLabel(item);\n return `${label} - ${this.t('itemDetails', 'Detalhes do item').toLowerCase()}`;\n }\n\n emptyStateLabel(): string {\n return this.t('emptyState', 'Nenhum item disponível');\n }\n\n async onActionClick(\n ev: MouseEvent,\n actionId: string,\n item: any,\n index: number,\n ): Promise<void> {\n ev.stopPropagation();\n const action = (this.config?.actions || []).find((a) => a.id === actionId);\n if (action?.confirmation) {\n const confirmed = this.dialog?.confirm\n ? await this.dialog.confirm({\n title: action.confirmation.title,\n message: action.confirmation.message,\n type: action.confirmation.type,\n })\n : true;\n if (!confirmed) return;\n }\n const command = (action?.command || '').trim();\n const isGlobal = this.isGlobalCommand(command);\n const loadingKey = this.buildActionLoadingKey(actionId, item, index);\n if (action?.showLoading) this.actionLoadingState[loadingKey] = true;\n try {\n if (isGlobal) {\n const actionIdResolved = command.replace(/^global[:.]/, '').trim();\n const payload = this.resolveActionPayload(\n action?.globalPayload,\n item,\n index,\n );\n if (actionIdResolved) {\n if (\n this.globalActions &&\n typeof this.globalActions.execute === 'function'\n ) {\n await this.globalActions.execute(actionIdResolved, payload, {\n sourceId: this.listId,\n output: 'actionClick',\n payload,\n meta: { actionId },\n });\n } else {\n this.warnGlobalCommandUnavailableOnce(actionIdResolved);\n }\n }\n }\n } catch (error) {\n if (isDevMode()) {\n this.logger.warn(\n '[PraxisList] global command execution failed.',\n this.buildLogOptions(\n { command, actionId, error },\n {\n context: { actionId },\n throttleKey: `praxis-list:global-command-execution-failed:${actionId}`,\n },\n ),\n );\n }\n } finally {\n if (action?.showLoading) delete this.actionLoadingState[loadingKey];\n }\n const emitLocal = action?.emitLocal ?? !isGlobal;\n if (emitLocal) {\n this.actionClick.emit({ actionId, item, index });\n }\n }\n\n private isGlobalCommand(command?: string): boolean {\n const c = (command || '').trim();\n return c.startsWith('global:') || c.startsWith('global.');\n }\n\n private resolveActionPayload(raw: any, item: any, index: number): any {\n if (raw == null) return { item, index };\n const ctx = { item, index };\n if (typeof raw === 'string') {\n const trimmed = raw.trim();\n if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n try {\n const parsed = JSON.parse(trimmed);\n return this.resolveTemplate(parsed, ctx);\n } catch {\n // fall through to template string\n }\n }\n return this.resolveStringTemplate(raw, ctx);\n }\n if (Array.isArray(raw))\n return raw.map((v) => this.resolveActionPayload(v, item, index));\n if (raw && typeof raw === 'object') return this.resolveTemplate(raw, ctx);\n return raw;\n }\n\n private resolveTemplate(raw: any, ctx: Record<string, any>): any {\n if (typeof raw === 'string') return this.resolveStringTemplate(raw, ctx);\n if (Array.isArray(raw)) return raw.map((v) => this.resolveTemplate(v, ctx));\n if (raw && typeof raw === 'object') {\n const out: any = {};\n for (const [k, v] of Object.entries(raw))\n out[k] = this.resolveTemplate(v, ctx);\n return out;\n }\n return raw;\n }\n\n private resolveStringTemplate(raw: string, ctx: Record<string, any>): any {\n const single = raw.match(/^\\$\\{([^}]+)\\}$/);\n if (single) return this.lookup(ctx, single[1].trim());\n return raw.replace(/\\$\\{([^}]+)\\}/g, (_m, path) => {\n const v = this.lookup(ctx, String(path).trim());\n return v == null ? '' : String(v);\n });\n }\n\n private lookup(ctx: any, path: string): any {\n return path.split('.').reduce((acc: any, key: string) => acc?.[key], ctx);\n }\n\n onSelectionChange(_change: MatSelectionListChange): void {\n if (!this.boundControl) return;\n const val = this.boundControl.value;\n const arr = Array.isArray(val) ? val : val != null ? [val] : [];\n this.selectionChange.emit(adaptSelection(this.config, arr));\n }\n\n openConfigEditor(): void {\n const key = this.storageKey();\n const ref = this.settings.open({\n id: `praxis-list-editor:${key || this.listId || 'default'}`,\n title: 'Lista – Configurações',\n content: {\n component: PraxisListConfigEditor,\n inputs: {\n config: this.config,\n document: createListAuthoringDocument({ config: this.config }),\n listId: this.listId,\n },\n },\n });\n\n ref.applied$.pipe(takeUntil(this.destroy$)).subscribe((applied) => {\n this.applyAuthoringPayload(applied, 'settings-applied');\n });\n ref.saved$.pipe(takeUntil(this.destroy$)).subscribe((saved) => {\n this.applyAuthoringPayload(saved, 'settings-saved');\n });\n }\n\n nextPage(): void {\n this.data.nextPage();\n }\n prevPage(): void {\n this.data.prevPage();\n }\n setPageSize(ps: number): void {\n const size = Number(ps);\n if (isFinite(size) && size > 0) this.data.setPageSize(size);\n }\n onSortChange(val: string): void {\n if (!val) return;\n this.data.setSort([val]);\n }\n onSearchInput(val: string): void {\n this.search$.next(val || '');\n }\n sortOptionValue(op: any): string {\n return typeof op === 'string'\n ? op\n : op && (op as any).value\n ? String((op as any).value)\n : '';\n }\n sortOptionLabel(op: any): string {\n if (op && typeof op === 'object' && (op as any).label)\n return String((op as any).label);\n const v = this.sortOptionValue(op);\n return v;\n }\n rangeStart(ps: { pageNumber: number; pageSize: number }): number {\n return (ps?.pageNumber || 0) * (ps?.pageSize || 0) + 1;\n }\n rangeEnd(\n currLen: number,\n ps: { pageNumber: number; pageSize: number },\n total: number,\n ): number {\n const startIndex = (ps?.pageNumber || 0) * (ps?.pageSize || 0);\n const to = startIndex + (currLen || 0);\n return Math.min(to, total || 0);\n }\n\n public applyConfigFromAdapter(newCfg: PraxisListConfig): void {\n this.applyAuthoringPayload(newCfg, 'adapter');\n }\n\n private applyAuthoringPayload(\n raw: unknown,\n trigger:\n | 'external-input'\n | 'persistence'\n | 'settings-applied'\n | 'settings-saved'\n | 'adapter'\n | 'schema-inference',\n ): void {\n const doc = parseLegacyOrListDocument(raw);\n const plan = buildListApplyPlan(\n doc,\n this.buildListEditorRuntimeContext(doc),\n {\n saveConfig: trigger === 'settings-saved',\n },\n );\n this.executeListEditorApplyPlan(plan, doc, trigger);\n }\n\n private buildListEditorRuntimeContext(\n doc?: ListAuthoringDocument,\n ): ListRuntimeContext {\n const resourcePath =\n doc?.config?.dataSource?.resourcePath ||\n this.appliedRuntimeConfig?.dataSource?.resourcePath;\n return {\n currentConfig: this.appliedRuntimeConfig,\n schemaFieldNames: resourcePath\n ? this.schemaFieldsByPath.get(resourcePath)\n : undefined,\n };\n }\n\n private executeListEditorApplyPlan(\n plan: ListApplyPlan,\n _doc: ListAuthoringDocument,\n trigger:\n | 'external-input'\n | 'persistence'\n | 'settings-applied'\n | 'settings-saved'\n | 'adapter'\n | 'schema-inference',\n ): void {\n if (plan.diagnostics.some((item) => item.level === 'error')) {\n return;\n }\n\n this.initializeDataStreams();\n this.config = normalizeListConfig(plan.canonicalConfig);\n this.appliedRuntimeConfig = this.config;\n this.syncExpansionState();\n\n if (plan.runtime?.applyConfig) {\n this.data.setConfig(this.config);\n this.lastQuery = this.config?.dataSource?.query || {};\n }\n\n if (plan.runtime?.rebindSelection) {\n this.setupSelectionBinding();\n }\n\n if (plan.runtime?.reapplySkin) {\n this.applySkins();\n }\n\n if (plan.persistence?.saveConfig) {\n const key = this.storageKey();\n if (key) {\n this.persistConfig(key, this.config);\n }\n }\n\n if (plan.runtime?.schemaInference) {\n this.executeSchemaInferenceForPlan(\n plan.runtime.schemaInference,\n plan.persistence?.saveConfig === true,\n );\n }\n\n if (plan.runtime?.markForCheck) {\n this.cdr.markForCheck();\n }\n }\n\n private storageKey(): string | null {\n const id = this.componentKeyId();\n return id ? `praxis-list-config-${id}` : null;\n }\n\n private componentKeyId(): string | null {\n const componentId =\n typeof this.listId === 'string' ? this.listId.trim() : '';\n if (!componentId) {\n this.warnMissingId();\n return null;\n }\n const key = this.componentKeys.buildComponentId({\n componentType: 'praxis-list',\n componentId,\n instanceKey: this.componentInstanceId,\n componentRef: this,\n route: this.route,\n requireComponentId: true,\n });\n if (!key) this.warnMissingId();\n return key;\n }\n\n private warnMissingId(): void {\n if (this.warnedMissingId) return;\n this.warnedMissingId = true;\n if (isDevMode()) {\n this.logger.warnOnce(\n '[PraxisList] listId is required for config persistence.',\n this.buildLogOptions(\n {\n listId: this.listId,\n componentInstanceId: this.componentInstanceId,\n },\n { dedupeKey: 'praxis-list:missing-list-id' },\n ),\n );\n }\n }\n\n private readonly crud = inject(GenericCrudService as any, {\n optional: true,\n }) as GenericCrudService<any> | null;\n\n private executeSchemaInferenceForPlan(\n inferencePlan: NonNullable<\n NonNullable<ListApplyPlan['runtime']>['schemaInference']\n >,\n saveAfterInference = false,\n ): void {\n const resourcePath = inferencePlan.resourcePath;\n if (!resourcePath || !this.crud) return;\n if (this.inferredForPath.has(resourcePath)) return;\n if (this.schemaInferenceInFlight.has(resourcePath)) return;\n if (inferencePlan.targetDocument.config?.templating?.primary) return;\n\n this.schemaInferenceInFlight.add(resourcePath);\n\n try {\n this.crud.configure(resourcePath);\n this.crud\n .getSchema()\n .pipe(take(1))\n .subscribe({\n next: (fields: any[]) => {\n const names = (fields || [])\n .map((field: any) => field?.name || field?.field || field?.key)\n .filter(Boolean) as string[];\n if (!names.length) return;\n this.inferredForPath.add(resourcePath);\n this.schemaFieldsByPath.set(resourcePath, names);\n const inferredDocument = inferListAuthoringDocument(\n inferencePlan.sourceDocument,\n {\n schemaFieldNames: names,\n },\n );\n this.applyAuthoringPayload(\n inferredDocument,\n saveAfterInference ? 'settings-saved' : 'schema-inference',\n );\n },\n error: () => {\n this.schemaInferenceInFlight.delete(resourcePath);\n this.schemaFieldsByPath.delete(resourcePath);\n },\n complete: () => {\n this.schemaInferenceInFlight.delete(resourcePath);\n },\n });\n } catch {\n this.schemaInferenceInFlight.delete(resourcePath);\n this.schemaFieldsByPath.delete(resourcePath);\n }\n }\n\n private evalSlot(\n slot:\n | ListTemplatingSlot\n | 'sectionHeader'\n | 'emptyState',\n item: any,\n ) {\n const def =\n slot === 'sectionHeader' || slot === 'emptyState'\n ? this.config?.templating?.[slot]\n : this.resolveSlotTemplate(slot, item);\n return this.evaluateTemplateNode(def, item);\n }\n\n private resolveSlotTemplate(\n slot: ListTemplatingSlot,\n item: any,\n ): TemplateDef | undefined {\n let working = this.cloneTemplateDef(this.config?.templating?.[slot]);\n let hidden = false;\n const extraClasses: string[] = [];\n const extraStyles: string[] = [];\n\n for (const override of this.config?.rules?.slotOverrides || []) {\n if (override.slot !== slot) continue;\n if (\n !this.evaluateRuntimeCondition(\n override.condition,\n item,\n 'rules.slotOverrides',\n )\n ) {\n continue;\n }\n if (override.hide) hidden = true;\n if (override.template) {\n working = this.mergeTemplateDefs(working, override.template);\n }\n if (override.class) extraClasses.push(override.class);\n if (override.style) extraStyles.push(override.style);\n }\n\n if (hidden || !working) return undefined;\n\n working.class = this.joinClasses(working.class, ...extraClasses);\n working.style = this.joinStyles(working.style, ...extraStyles);\n return working;\n }\n\n private evaluateTemplateNode(\n def: TemplateDef | undefined,\n item: any,\n insideCompose = false,\n ): Record<string, any> | null {\n if (!def) return null;\n if (def.type === 'metric') {\n return this.buildMetricView(def, item);\n }\n if (def.type === 'compose') {\n return this.buildComposeView(def, item);\n }\n if (def.type === 'component') {\n return this.buildRuntimeComponentView(def, item);\n }\n if (def.type === 'currency') {\n const { baseExpr, param } = this.splitPipe(def.expr || '');\n const [codeFromExpr, localeFromExpr] = this.parseTwoParams(param);\n const currencyCode =\n codeFromExpr || (this.config?.i18n as any)?.currency || 'USD';\n const locale =\n localeFromExpr || (this.config?.i18n as any)?.locale || undefined;\n const rawStr = this.evalString(baseExpr, { item });\n const raw = Number(\n rawStr?.replace?.(/[^0-9.,-]/g, '').replace(',', '.') ?? rawStr,\n );\n const fmt = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currencyCode,\n }).format(raw ?? 0);\n return { type: def.type, value: fmt, class: def.class, style: def.style };\n }\n if (def.type === 'date') {\n const { baseExpr, param } = this.splitPipe(def.expr || '');\n const [localeFromExpr, styleFromExpr] = this.parseTwoParams(param);\n const locale =\n localeFromExpr || (this.config?.i18n as any)?.locale || undefined;\n const dateStyle = this.mapDateStyle(styleFromExpr);\n const raw = this.evalString(baseExpr, { item });\n const dt = raw ? new Date(raw) : null;\n const fmt = dt\n ? new Intl.DateTimeFormat(locale, dateStyle).format(dt)\n : '';\n return { type: def.type, value: fmt, class: def.class, style: def.style };\n }\n if (def.type === 'rating') {\n const { baseExpr } = this.splitPipe(def.expr || '');\n const raw = Number(this.evalString(baseExpr, { item }));\n return {\n type: def.type,\n value: isFinite(raw) ? String(raw) : '0',\n class: def.class,\n style: def.style,\n };\n }\n if (def.type === 'chip') {\n const { baseExpr, param } = this.splitPipe(def.expr || '');\n let value = this.evalString(baseExpr, { item });\n if (param) {\n const [pipeName, rest] = this.splitPipeName(param);\n if (pipeName === 'bool') {\n const [t, f] = this.parseTwoParams(rest);\n const truthy = this.toBoolean(value);\n value = truthy ? (t ?? 'Sim') : (f ?? 'Não');\n }\n }\n // Optional color mapping from config.templating.chipColorMap\n let color = (def as any).color as string | undefined;\n try {\n const map = (this.config?.templating as any)?.chipColorMap as\n | Record<string, string>\n | undefined;\n if (map && typeof value === 'string') {\n const key = String(value).toLowerCase();\n const found = map[key] ?? map[value];\n if (found) color = found;\n }\n } catch {}\n // Optional label mapping\n try {\n const lmap = (this.config?.templating as any)?.chipLabelMap as\n | Record<string, string>\n | undefined;\n if (lmap && typeof value === 'string') {\n const key = String(value).toLowerCase();\n const lbl = lmap[key] ?? lmap[value];\n if (lbl) value = lbl;\n } else if (typeof value === 'string') {\n value = this.prettyLabel(value);\n }\n } catch {}\n return {\n type: def.type,\n value,\n class: def.class,\n style: def.style,\n color,\n variant: (def as any).variant,\n } as any;\n }\n if (def.type === 'icon') {\n const out = evaluateTemplate(def, item, this.templateEvaluatorOptions()) as any;\n // Optional color mapping from config.templating.iconColorMap\n try {\n const map = (this.config?.templating as any)?.iconColorMap as\n | Record<string, string>\n | undefined;\n if (map) {\n const status = String(item?.status ?? '').trim();\n const icon = String(out?.value ?? '').trim();\n const tryKeys = [\n status,\n status.toLowerCase?.(),\n icon,\n icon.toLowerCase?.(),\n ].filter(Boolean) as string[];\n for (const k of tryKeys) {\n const found = (map as any)[k];\n if (found) {\n out.color = found;\n break;\n }\n }\n }\n } catch {}\n return out;\n }\n return evaluateTemplate(def, item, this.templateEvaluatorOptions());\n }\n\n private buildUnsupportedComposeNode(\n def: TemplateDef | undefined,\n ): ListUnsupportedComposeNodeViewModel {\n return {\n type: 'unsupported',\n value: '',\n class: this.joinClasses(def?.class, 'p-list-compose__unsupported-node'),\n style: def?.style,\n unsupportedType: 'component',\n };\n }\n\n private buildRuntimeComponentView(\n def: TemplateDef | undefined,\n item: any,\n ): ListRuntimeComponentViewModel | null {\n const componentDef = def?.props?.component;\n const rawComponentId = String(componentDef?.id || '').trim();\n const componentId =\n normalizeListRuntimeComponentId(componentDef?.id) || rawComponentId;\n\n if (!componentId) return null;\n\n return {\n type: 'component',\n class: this.joinClasses(def?.class, componentDef?.class),\n style: this.joinStyles(def?.style, componentDef?.style),\n componentId,\n inputs: this.resolveComponentInputs(componentDef?.inputs, item),\n };\n }\n\n private resolveComponentInputs(\n value: any,\n item: any,\n ): Record<string, any> {\n const resolved = this.resolveComponentInputValue(value, item);\n if (!resolved || typeof resolved !== 'object' || Array.isArray(resolved)) {\n return {};\n }\n return resolved as Record<string, any>;\n }\n\n private resolveComponentInputValue(value: any, item: any): any {\n if (typeof value === 'string') {\n return this.resolveComponentStringInput(value, item);\n }\n if (Array.isArray(value)) {\n return value.map((entry) => this.resolveComponentInputValue(entry, item));\n }\n if (value && typeof value === 'object') {\n return Object.entries(value).reduce<Record<string, any>>((acc, entry) => {\n acc[entry[0]] = this.resolveComponentInputValue(entry[1], item);\n return acc;\n }, {});\n }\n return value;\n }\n\n private resolveComponentStringInput(value: string, item: any): any {\n const raw = value.trim();\n const exactPath = raw.match(/^\\$\\{item((?:\\.[a-zA-Z0-9_$-]+)+)\\}$/);\n if (exactPath) {\n return exactPath[1]\n .split('.')\n .filter(Boolean)\n .reduce<any>((acc, part) => acc?.[part], item);\n }\n return this.evalString(value, { item });\n }\n\n isExpandable(): boolean {\n return (\n this.isListVariant() &&\n this.config?.interaction?.expandable === true &&\n (this.config?.expansion?.sections?.length || 0) > 0\n );\n }\n\n expandableByRow(): boolean {\n if (!this.isExpandable()) return false;\n const trigger = this.config?.interaction?.expandTrigger || 'row+icon';\n return trigger === 'row' || trigger === 'row+icon';\n }\n\n expansionOwnedByRow(): boolean {\n return this.expandableByRow();\n }\n\n expansionOwnedByIcon(): boolean {\n if (!this.isExpandable()) return false;\n const trigger = this.config?.interaction?.expandTrigger || 'row+icon';\n return trigger === 'icon' || trigger === 'row+icon';\n }\n\n showExpandIcon(placement?: 'expand' | 'trailing'): boolean {\n if (!this.expansionOwnedByIcon()) return false;\n if (!placement) return true;\n return this.expandPlacement() === placement;\n }\n\n expandPlacement(): 'expand' | 'trailing' {\n const explicit = this.config?.interaction?.expandPlacement;\n if (explicit === 'expand' || explicit === 'trailing') {\n return explicit;\n }\n return this.rowLayoutHasSlot('expand') ? 'expand' : 'trailing';\n }\n\n private actionPlacement(action: any): 'actions' | 'trailing' {\n const explicit = action?.placement;\n if (explicit === 'actions' || explicit === 'trailing') {\n return explicit;\n }\n return this.rowLayoutHasSlot('actions') ? 'actions' : 'trailing';\n }\n\n isExpanded(item: any, index: number): boolean {\n return this.expandedItemKeys.has(this.itemExpansionKey(item, index));\n }\n\n expandRegionId(item: any, index: number): string {\n return `${this.skinScopeId}-expansion-${this.sanitizeDomId(\n this.itemExpansionKey(item, index),\n )}`;\n }\n\n expansionSections(): ListExpansionSectionDef[] {\n return this.config?.expansion?.sections || [];\n }\n\n expansionSectionItems(\n item: any,\n section: ListExpansionSectionDef,\n index?: number,\n ): any[] {\n const raw = this.evaluateExpansionExpr(section?.itemsExpr || '', item, index);\n if (section?.type === 'key-value') {\n return this.normalizeKeyValueItems(raw);\n }\n return this.normalizeExpansionItems(raw);\n }\n\n expansionSectionHasContent(\n item: any,\n section: ListExpansionSectionDef,\n index?: number,\n ): boolean {\n return this.expansionSectionItems(item, section, index).length > 0;\n }\n\n expansionItemLabel(value: any): string {\n if (value == null) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n return String(\n value.label ??\n value.title ??\n value.name ??\n value.value ??\n value.text ??\n '',\n );\n }\n\n expansionInfoTitle(value: any): string {\n if (value == null) return '';\n if (typeof value === 'string') return value;\n return String(value.title ?? value.label ?? value.name ?? '');\n }\n\n expansionInfoValue(value: any): string {\n if (value == null || typeof value === 'string') return '';\n return String(value.value ?? value.description ?? value.meta ?? '');\n }\n\n expansionTimelineTitle(value: any): string {\n if (value == null) return '';\n if (typeof value === 'string') return value;\n return String(value.title ?? value.label ?? value.name ?? '');\n }\n\n expansionTimelineMeta(value: any): string {\n if (value == null || typeof value === 'string') return '';\n return String(value.meta ?? value.date ?? value.when ?? '');\n }\n\n expansionTimelineDescription(value: any): string {\n if (value == null || typeof value === 'string') return '';\n return String(value.description ?? value.value ?? value.detail ?? '');\n }\n\n expansionKeyValueKey(value: any): string {\n if (value == null) return '';\n return String(value.key ?? value.label ?? value.name ?? '');\n }\n\n expansionKeyValueValue(value: any): string {\n if (value == null) return '';\n return String(value.value ?? value.description ?? '');\n }\n\n private splitPipe(expr: string): { baseExpr: string; param?: string } {\n const idx = expr.indexOf('|');\n if (idx === -1) return { baseExpr: expr.trim() };\n return {\n baseExpr: expr.slice(0, idx).trim(),\n param: expr.slice(idx + 1).trim(),\n };\n }\n\n private splitPipeName(spec: string): [string, string | undefined] {\n const idx = spec.indexOf(':');\n if (idx === -1) return [spec.trim(), undefined];\n return [spec.slice(0, idx).trim(), spec.slice(idx + 1).trim()];\n }\n\n private evalString(expr: string, ctx: any): string {\n const res = evaluateTemplate(\n { type: 'text', expr } as any,\n ctx?.item ?? ctx,\n this.templateEvaluatorOptions(),\n );\n return res?.value ?? '';\n }\n\n private templateEvaluatorOptions() {\n return {\n i18n: this.config?.i18n,\n appLocale: this.hostLocale,\n };\n }\n\n private parseTwoParams(\n param?: string,\n ): [string | undefined, string | undefined] {\n if (!param) return [undefined, undefined];\n // Accept forms: \"A\", \"A:B\", \":B\" (only second)\n const parts = param.split(':');\n const first = parts[0]?.trim();\n const second = parts[1]?.trim();\n if (first === '') return [undefined, second || undefined];\n if (parts.length === 1) return [first || undefined, undefined];\n return [first || undefined, second || undefined];\n }\n\n private toBoolean(val: any): boolean {\n if (typeof val === 'boolean') return val;\n const s = String(val).trim().toLowerCase();\n return (\n s === 'true' || s === '1' || s === 'yes' || s === 'sim' || s === 'on'\n );\n }\n\n // Format labels like 'EM_ANDAMENTO' -> 'Em andamento'; 'PLANEJADA' -> 'Planejada'\n private prettyLabel(v: string): string {\n try {\n const t = String(v ?? '')\n .replace(/[\\s_\\-]+/g, ' ')\n .trim()\n .toLowerCase();\n if (!t) return '';\n return t.replace(/\\b\\w/g, (m) => m.toUpperCase());\n } catch {\n return String(v ?? '');\n }\n }\n\n private mapDateStyle(style?: string): Intl.DateTimeFormatOptions {\n switch ((style || '').toLowerCase()) {\n case 'short':\n return { dateStyle: 'short' };\n case 'long':\n return { dateStyle: 'long' };\n case 'full':\n return { dateStyle: 'full' };\n case 'medium':\n default:\n return { dateStyle: 'medium' };\n }\n }\n\n starIcon(index: number, ratingValue: string | number): string {\n const r =\n typeof ratingValue === 'number'\n ? ratingValue\n : parseFloat(ratingValue || '0');\n const pos = index + 1; // 1..5\n if (r >= pos) return 'star';\n if (r >= pos - 0.5) return 'star_half';\n return 'star_border';\n }\n\n isThemeColor(color?: string): boolean {\n return color === 'primary' || color === 'accent' || color === 'warn';\n }\n chipStyle(color?: string, variant?: 'filled' | 'outlined'): string {\n if (!color || this.isThemeColor(color)) return '';\n if (variant === 'outlined') {\n return `color:${color}; border-color:${color}; background: transparent;`;\n }\n return `background:${color}; color: var(--md-sys-color-on-primary);`;\n }\n iconStyle(color?: string): string {\n if (!color || this.isThemeColor(color)) return '';\n return `color:${color};`;\n }\n buttonStyle(color?: string, variant?: 'stroked' | 'raised' | 'flat'): string {\n if (!color || this.isThemeColor(color)) return '';\n if (variant === 'stroked') {\n return `color:${color}; border-color:${color};`;\n }\n return `background:${color}; color: var(--md-sys-color-on-primary);`;\n }\n\n ratingMax(def?: any): number {\n const max = Number(def?.props?.rating?.max ?? 5);\n if (!Number.isFinite(max)) return 5;\n return Math.min(10, Math.max(1, Math.round(max)));\n }\n ratingThemeColor(def?: any): string | undefined {\n const c = def?.props?.rating?.color;\n return this.isThemeColor(c) ? c : undefined;\n }\n ratingIconStyle(def?: any): string {\n const parts: string[] = [];\n const c = def?.props?.rating?.color;\n const size = Number(def?.props?.rating?.size ?? 0);\n if (c && !this.isThemeColor(c)) parts.push(`color:${c};`);\n if (Number.isFinite(size) && size > 0) {\n parts.push(\n `font-size:${size}px; width:${size}px; height:${size}px; line-height:${size}px;`,\n );\n }\n return parts.join(' ');\n }\n ratingRange(def?: any): number[] {\n const max = this.ratingMax(def);\n return Array.from({ length: max }, (_, i) => i);\n }\n\n // trackBy helpers for ngFor\n trackBySection = (_: number, s: ListSection<any>) => s?.key ?? _;\n trackByItem = (i: number, it: any) =>\n this.config?.selection?.compareBy\n ? (it?.[this.config.selection.compareBy] ?? i)\n : (it?.id ?? i);\n\n isActionLoading(actionId: string, item: any, index: number): boolean {\n const key = this.buildActionLoadingKey(actionId, item, index);\n return this.actionLoadingState[key] === true;\n }\n\n private evaluateActionVisibility(\n showIf: string | undefined,\n item: any,\n ): boolean {\n return this.evaluateRuntimeCondition(showIf, item, 'actions[].showIf');\n }\n\n private evaluateRuntimeCondition(\n expression: string | undefined,\n item: any,\n source: 'actions[].showIf' | 'rules.itemStyles' | 'rules.slotOverrides',\n ): boolean {\n const rawExpression =\n typeof expression === 'string' ? expression.trim() : '';\n if (!rawExpression) return true;\n\n const normalizedExpression =\n this.normalizeConditionExpression(rawExpression);\n if (!normalizedExpression) {\n this.warnInvalidConditionOnce(source, rawExpression);\n return false;\n }\n\n const compareMatch = normalizedExpression.match(\n /^(.*?)\\s*(===|!==|==|!=)\\s*(.*?)$/,\n );\n if (compareMatch) {\n const left = this.resolveConditionOperand(compareMatch[1], item);\n const right = this.resolveConditionOperand(compareMatch[3], item);\n const op = compareMatch[2];\n if (!left.supported || !right.supported) {\n this.warnInvalidConditionOnce(source, rawExpression);\n return false;\n }\n if (op === '===') return left.value === right.value;\n if (op === '!==') return left.value !== right.value;\n if (op === '==') return this.looseEquals(left.value, right.value);\n return !this.looseEquals(left.value, right.value);\n }\n\n const single = this.resolveConditionOperand(normalizedExpression, item);\n if (!single.supported) {\n this.warnInvalidConditionOnce(source, rawExpression);\n return false;\n }\n return Boolean(single.value);\n }\n\n private normalizeConditionExpression(expression: string): string | null {\n const raw = String(expression || '').trim();\n if (!raw) return null;\n const wrapped = raw.match(/^\\$\\{([\\s\\S]+)\\}$/);\n return (wrapped ? wrapped[1] : raw).trim() || null;\n }\n\n private resolveConditionOperand(\n operand: string,\n item: any,\n ): { supported: boolean; value: any } {\n const raw = String(operand || '').trim();\n if (!raw) return { supported: false, value: undefined };\n if (\n (raw.startsWith('\"') && raw.endsWith('\"')) ||\n (raw.startsWith(\"'\") && raw.endsWith(\"'\"))\n ) {\n return { supported: true, value: raw.slice(1, -1) };\n }\n if (raw === 'true') return { supported: true, value: true };\n if (raw === 'false') return { supported: true, value: false };\n if (raw === 'null') return { supported: true, value: null };\n if (raw === 'undefined') return { supported: true, value: undefined };\n if (/^-?\\d+(\\.\\d+)?$/.test(raw))\n return { supported: true, value: Number(raw) };\n\n const templateMatch = raw.match(/^\\$\\{([\\s\\S]+)\\}$/);\n if (templateMatch) {\n return this.resolveConditionOperand(templateMatch[1].trim(), item);\n }\n if (raw.startsWith('item.')) {\n return { supported: true, value: this.lookup({ item }, raw) };\n }\n return { supported: false, value: undefined };\n }\n\n private looseEquals(left: any, right: any): boolean {\n if (left == null || right == null) return left == right;\n const leftNum = Number(left);\n const rightNum = Number(right);\n if (Number.isFinite(leftNum) && Number.isFinite(rightNum)) {\n return leftNum === rightNum;\n }\n return String(left) === String(right);\n }\n\n private warnInvalidConditionOnce(\n source: 'actions[].showIf' | 'rules.itemStyles' | 'rules.slotOverrides',\n expression: string,\n ): void {\n if (!isDevMode()) return;\n this.logger.warnOnce(\n `[PraxisList] Invalid ${source} expression. Falling back to no rule match.`,\n this.buildLogOptions(\n { expression, source },\n {\n dedupeKey: `praxis-list:invalid-condition:${source}:${expression}`,\n throttleKey: `praxis-list:invalid-condition:${source}`,\n },\n ),\n );\n }\n\n private cloneTemplateDef(\n def: TemplateDef | undefined,\n ): TemplateDef | undefined {\n if (!def) return undefined;\n return {\n ...def,\n props: def.props ? JSON.parse(JSON.stringify(def.props)) : undefined,\n badge: def.badge ? { ...def.badge } : undefined,\n };\n }\n\n private mergeTemplateDefs(\n base: TemplateDef | undefined,\n override: TemplateDef | undefined,\n ): TemplateDef | undefined {\n if (!base && !override) return undefined;\n if (!base) return this.cloneTemplateDef(override);\n if (!override) return this.cloneTemplateDef(base);\n\n const merged = this.cloneTemplateDef(base) as TemplateDef;\n const overrideClone = this.cloneTemplateDef(override) as TemplateDef;\n\n merged.type = overrideClone.type || merged.type;\n merged.expr = overrideClone.expr ?? merged.expr;\n merged.class = this.joinClasses(merged.class, overrideClone.class);\n merged.style = this.joinStyles(merged.style, overrideClone.style);\n merged.color = overrideClone.color ?? merged.color;\n merged.variant = overrideClone.variant ?? merged.variant;\n merged.imageAlt = overrideClone.imageAlt ?? merged.imageAlt;\n merged.badge = overrideClone.badge ?? merged.badge;\n merged.props = this.mergePlainObjects(\n merged.props as Record<string, any> | undefined,\n overrideClone.props as Record<string, any> | undefined,\n ) as TemplateDef['props'];\n\n return merged;\n }\n\n private mergePlainObjects(\n base: Record<string, any> | undefined,\n override: Record<string, any> | undefined,\n ): Record<string, any> | undefined {\n if (!base && !override) return undefined;\n if (!base) return override ? JSON.parse(JSON.stringify(override)) : undefined;\n if (!override) return JSON.parse(JSON.stringify(base));\n\n const merged: Record<string, any> = JSON.parse(JSON.stringify(base));\n for (const [key, value] of Object.entries(override)) {\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n merged[key] &&\n typeof merged[key] === 'object' &&\n !Array.isArray(merged[key])\n ) {\n merged[key] = this.mergePlainObjects(merged[key], value);\n } else {\n merged[key] = JSON.parse(JSON.stringify(value));\n }\n }\n return merged;\n }\n\n private buildActionLoadingKey(\n actionId: string,\n item: any,\n index: number,\n ): string {\n const compareBy = this.config?.selection?.compareBy;\n const idCandidate =\n compareBy && item && typeof item === 'object'\n ? item?.[compareBy]\n : item?.id;\n if (\n idCandidate !== null &&\n idCandidate !== undefined &&\n idCandidate !== ''\n ) {\n return `${actionId}::${String(idCandidate)}`;\n }\n if (item && typeof item === 'object') {\n return `${actionId}::obj-${this.ensureActionItemObjectId(item)}`;\n }\n return `${actionId}::idx-${index}`;\n }\n\n private ensureActionItemObjectId(value: object): number {\n const current = this.actionItemObjectIds.get(value);\n if (current) return current;\n const next = this.nextActionItemObjectId++;\n this.actionItemObjectIds.set(value, next);\n return next;\n }\n\n private warnGlobalCommandUnavailableOnce(actionIdResolved: string): void {\n if (!isDevMode()) return;\n this.logger.warnOnce(\n '[PraxisList] global command ignored because GlobalActionService is unavailable.',\n this.buildLogOptions(\n { actionId: actionIdResolved },\n {\n context: { actionId: actionIdResolved },\n dedupeKey: `praxis-list:global-action-unavailable:${actionIdResolved}`,\n throttleKey: 'praxis-list:global-action-unavailable',\n },\n ),\n );\n }\n\n private buildLogOptions(\n data?: unknown,\n options: Partial<LoggerLogOptions> = {},\n ): LoggerLogOptions {\n const context = {\n ...this.logContext,\n ...(options.context ?? {}),\n };\n return {\n ...options,\n context,\n data,\n };\n }\n\n private toggleExpanded(item: any, index: number): void {\n if (!this.isExpandable()) return;\n const key = this.itemExpansionKey(item, index);\n const next = new Set(this.expandedItemKeys);\n if (next.has(key)) {\n next.delete(key);\n } else {\n if ((this.config?.interaction?.expandMode || 'single') === 'single') {\n next.clear();\n }\n next.add(key);\n }\n this.expandedItemKeys = next;\n this.cdr.markForCheck();\n }\n\n private syncExpansionState(): void {\n if (!this.isExpandable()) {\n this.expandedItemKeys = new Set<string>();\n return;\n }\n if (\n (this.config?.interaction?.expandMode || 'single') === 'single' &&\n this.expandedItemKeys.size > 1\n ) {\n const first = this.expandedItemKeys.values().next().value;\n this.expandedItemKeys = first\n ? new Set<string>([first])\n : new Set<string>();\n }\n }\n\n private itemExpansionKey(item: any, index: number): string {\n const candidate = item?.id;\n if (candidate !== null && candidate !== undefined && candidate !== '') {\n return String(candidate);\n }\n if (item && typeof item === 'object') {\n return `obj-${this.ensureExpansionItemObjectId(item)}`;\n }\n return `idx-${index}`;\n }\n\n private t(key: string, fallback: string): string {\n return this.i18n.t(key, undefined, fallback, PRAXIS_LIST_I18N_NAMESPACE);\n }\n\n private ensureExpansionItemObjectId(value: object): number {\n const current = this.expansionItemObjectIds.get(value);\n if (current) return current;\n const next = this.nextExpansionItemObjectId++;\n this.expansionItemObjectIds.set(value, next);\n return next;\n }\n\n private sanitizeDomId(value: string): string {\n return String(value || 'item').replace(/[^a-zA-Z0-9_-]+/g, '-');\n }\n\n private evaluateExpansionExpr(expr: string, item: any, index?: number): any {\n const rawExpr = String(expr || '').trim();\n if (!rawExpr) return undefined;\n const ctx = { item, index };\n const singleTemplate = rawExpr.match(/^\\$\\{([^}]+)\\}$/);\n if (singleTemplate) {\n return this.lookup(ctx, singleTemplate[1].trim());\n }\n if (rawExpr.startsWith('item.') || rawExpr.startsWith('index')) {\n return this.lookup(ctx, rawExpr);\n }\n return this.resolveStringTemplate(rawExpr, ctx);\n }\n\n private normalizeExpansionItems(value: any): any[] {\n if (Array.isArray(value)) {\n return value.filter(\n (entry) => entry !== undefined && entry !== null && entry !== '',\n );\n }\n if (value === undefined || value === null || value === '') {\n return [];\n }\n if (typeof value === 'string') {\n return value\n .split(/\\r?\\n|[,;]+/g)\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n return [value];\n }\n\n private normalizeKeyValueItems(\n value: any,\n ): Array<{ key: string; value: string }> {\n if (Array.isArray(value)) {\n return value\n .map((entry) => {\n if (entry && typeof entry === 'object') {\n return {\n key: String(entry.key ?? entry.label ?? entry.name ?? ''),\n value: String(entry.value ?? entry.description ?? ''),\n };\n }\n return {\n key: '',\n value: String(entry ?? ''),\n };\n })\n .filter((entry) => entry.key || entry.value);\n }\n if (value && typeof value === 'object') {\n return Object.entries(value).map(([key, entryValue]) => ({\n key: this.prettyLabel(key),\n value: String(entryValue ?? ''),\n }));\n }\n if (value === undefined || value === null || value === '') {\n return [];\n }\n return [{ key: '', value: String(value) }];\n }\n}\n","<div\n class=\"praxis-list-root\"\n [ngClass]=\"skinClasses\"\n [attr.data-skin-scope]=\"skinScopeId\"\n [attr.aria-label]=\"config.a11y?.ariaLabel || null\"\n [attr.aria-labelledby]=\"config.a11y?.ariaLabelledBy || null\"\n>\n @if (inlineCss) {\n <style [attr.nonce]=\"cspNonce || null\" [textContent]=\"inlineCss\"></style>\n }\n\n @if (enableCustomization) {\n <div class=\"list-assistant\">\n <button\n mat-mini-fab\n color=\"primary\"\n (click)=\"openConfigEditor()\"\n [matTooltip]=\"configEditorLabel()\"\n [attr.aria-label]=\"configEditorLabel()\"\n >\n <mat-icon [praxisIcon]=\"'edit'\"></mat-icon>\n </button>\n <praxis-ai-assistant [adapter]=\"aiAdapter\"></praxis-ai-assistant>\n </div>\n }\n\n <!-- Skeleton while loading -->\n @if ((loading$ | async) && hasSkeleton()) {\n @if (isListVariant()) {\n <mat-list>\n @for (_ of skeletonItems(); track $index; let i = $index) {\n <mat-list-item>\n <div class=\"list-item-content\">\n <div class=\"list-item-leading\">\n <div class=\"skeleton skeleton-avatar\"></div>\n </div>\n <div class=\"list-item-text\">\n <div class=\"skeleton skeleton-line w-60\"></div>\n @if (layoutLines > 1) {\n <div class=\"skeleton skeleton-line w-40\"></div>\n }\n </div>\n <div class=\"list-item-trailing\">\n <div class=\"skeleton skeleton-chip\"></div>\n </div>\n </div>\n </mat-list-item>\n }\n </mat-list>\n } @else {\n <div class=\"cards-grid\">\n @for (_ of skeletonItems(); track $index; let i = $index) {\n <div class=\"item-card\">\n <div class=\"list-item-content\">\n <div class=\"list-item-leading\">\n <div class=\"skeleton skeleton-avatar\"></div>\n </div>\n <div class=\"list-item-text\">\n <div class=\"skeleton skeleton-line w-60\"></div>\n @if (layoutLines > 1) {\n <div class=\"skeleton skeleton-line w-40\"></div>\n }\n </div>\n <div class=\"list-item-trailing\">\n <div class=\"skeleton skeleton-chip\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"notLoading\"></ng-container>\n }\n\n <ng-template #notLoading>\n <!-- Empty state -->\n @if (items$ | async; as all) {\n @if (all.length === 0) {\n <div class=\"section-header\">\n @if (emptyStateTemplate(); as empty) {\n @switch (empty.type) {\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"empty.value\"\n [ngClass]=\"empty.class\"\n [color]=\"isThemeColor(empty.color) ? empty.color : undefined\"\n [style.cssText]=\"\n (empty.style ? empty.style + ';' : '') +\n iconStyle(empty.color)\n \"\n ></mat-icon>\n }\n @case (\"image\") {\n <span\n class=\"inline-image\"\n [ngClass]=\"empty.class\"\n [style.cssText]=\"empty.style\"\n >\n <img\n [src]=\"empty.value\"\n [alt]=\"config.templating?.emptyState?.imageAlt || ''\"\n />\n @if (empty.badge?.value) {\n <mat-chip\n class=\"inline-badge\"\n [color]=\"\n isThemeColor(empty.badge?.color)\n ? empty.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (empty.badge?.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(empty.badge?.color, empty.badge?.variant)\n \"\n >{{ empty.badge?.value }}</mat-chip\n >\n }\n </span>\n }\n @case (\"chip\") {\n <mat-chip\n [color]=\"isThemeColor(empty.color) ? empty.color : undefined\"\n [ngClass]=\"[\n empty.class || '',\n (empty.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : '',\n ]\"\n [style.cssText]=\"\n chipStyle(empty.color, empty.variant) +\n (empty.style ? ';' + empty.style : '')\n \"\n >{{ empty.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n <span [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\">\n @for (\n _ of ratingRange(empty);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, empty.value)\"\n [color]=\"ratingThemeColor(empty)\"\n [style.cssText]=\"ratingIconStyle(empty)\"\n ></mat-icon>\n }\n </span>\n }\n @case (\"html\") {\n <span\n [ngClass]=\"empty.class\"\n [style.cssText]=\"empty.style\"\n [innerHTML]=\"empty.value\"\n ></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"empty\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose [compose]=\"empty\"></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"empty\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\">{{\n empty.value\n }}</span>\n }\n }\n }\n </div>\n }\n }\n\n <ng-template\n #rowLayoutNode\n let-node\n let-slot=\"slot\"\n let-imageAlt=\"imageAlt\"\n >\n @switch (node?.type) {\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"node?.value\"\n [ngClass]=\"node?.class\"\n [color]=\"isThemeColor(node?.color) ? node?.color : undefined\"\n [style.cssText]=\"\n ((node?.style || '') ? node.style + ';' : '') +\n iconStyle(node?.color)\n \"\n ></mat-icon>\n }\n @case (\"image\") {\n <span\n class=\"inline-image\"\n [ngClass]=\"node?.class\"\n [style.cssText]=\"node?.style\"\n >\n <img [src]=\"node?.value\" [alt]=\"node?.imageAlt || imageAlt || ''\" />\n @if (node?.badge?.value) {\n <mat-chip\n class=\"inline-badge\"\n [color]=\"\n isThemeColor(node?.badge?.color)\n ? node?.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (node?.badge?.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(node?.badge?.color, node?.badge?.variant)\n \"\n >\n {{ node?.badge?.value }}\n </mat-chip>\n }\n </span>\n }\n @case (\"chip\") {\n <mat-chip\n [color]=\"isThemeColor(node?.color) ? node?.color : undefined\"\n [ngClass]=\"[\n node?.class || '',\n (node?.variant || 'filled') === 'outlined' ? 'chip-outlined' : '',\n ]\"\n [style.cssText]=\"\n chipStyle(node?.color, node?.variant) +\n (node?.style ? ';' + node.style : '')\n \"\n >\n {{ node?.value }}\n </mat-chip>\n }\n @case (\"rating\") {\n <span [ngClass]=\"node?.class\" [style.cssText]=\"node?.style\">\n @for (_ of ratingRange(node); track $index; let idx = $index) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, node?.value)\"\n [color]=\"ratingThemeColor(node)\"\n [style.cssText]=\"ratingIconStyle(node)\"\n ></mat-icon>\n }\n </span>\n }\n @case (\"html\") {\n <span\n [ngClass]=\"node?.class\"\n [style.cssText]=\"node?.style\"\n [innerHTML]=\"node?.value\"\n ></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"node\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose [compose]=\"node\"></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"node\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span [ngClass]=\"node?.class\" [style.cssText]=\"node?.style\">\n @if (slot === \"meta\" && config.templating?.metaPrefixIcon; as mpi) {\n <mat-icon [praxisIcon]=\"mpi\"></mat-icon>\n }\n {{ node?.value }}\n </span>\n }\n }\n </ng-template>\n\n <ng-template\n #listRowLayout\n let-item\n let-index=\"index\"\n let-sectionKey=\"sectionKey\"\n let-clickable=\"clickable\"\n >\n <div\n class=\"list-item-content\"\n [ngClass]=\"rowLayoutItemClass(item)\"\n [attr.style]=\"rowLayoutItemStyle(item)\"\n [attr.role]=\"clickable ? 'button' : null\"\n [attr.tabindex]=\"clickable ? '0' : null\"\n [attr.aria-label]=\"clickable ? itemAriaLabel(item) : null\"\n [attr.aria-expanded]=\"\n clickable && expansionOwnedByRow() ? isExpanded(item, index) : null\n \"\n [attr.aria-controls]=\"\n clickable && expansionOwnedByRow()\n ? expandRegionId(item, index)\n : null\n \"\n (click)=\"clickable ? onRowActivate(item, index, sectionKey) : null\"\n (keydown.enter)=\"clickable ? onRowActivate(item, index, sectionKey) : null\"\n (keydown.space)=\"\n onRowSpaceActivate($event, clickable, item, index, sectionKey)\n \"\n >\n @for (column of rowLayoutColumns(); track rowLayoutTrackColumn($index, column)) {\n <div\n [attr.data-row-slot]=\"column.slot\"\n [ngClass]=\"rowLayoutColumnClass(column)\"\n [attr.style]=\"rowLayoutColumnStyle(column)\"\n >\n @if (column.slot === \"leading\") {\n @if (rowLayoutSlot(item, column.slot); as lead) {\n <ng-container\n *ngTemplateOutlet=\"\n rowLayoutNode;\n context: {\n $implicit: lead,\n slot: column.slot,\n imageAlt: rowLayoutImageAlt(column.slot),\n }\n \"\n ></ng-container>\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n } @else if (column.slot === \"trailing\") {\n @if (rowLayoutSlot(item, column.slot); as trailingNode) {\n <ng-container\n *ngTemplateOutlet=\"\n rowLayoutNode;\n context: {\n $implicit: trailingNode,\n slot: column.slot,\n imageAlt: rowLayoutImageAlt(column.slot),\n }\n \"\n ></ng-container>\n }\n @if (showExpandIcon(\"trailing\")) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"expand-toggle\"\n [attr.aria-label]=\"expandToggleAriaLabel(item, index)\"\n [attr.aria-expanded]=\"\n expansionOwnedByIcon() ? isExpanded(item, index) : null\n \"\n [attr.aria-controls]=\"\n expansionOwnedByIcon()\n ? expandRegionId(item, index)\n : null\n \"\n (click)=\"onExpandToggle($event, item, index)\"\n >\n <mat-icon\n [praxisIcon]=\"\n isExpanded(item, index) ? 'expand_less' : 'expand_more'\n \"\n ></mat-icon>\n </button>\n }\n @if ((visibleActions(item, \"trailing\") || []).length) {\n <div\n class=\"list-item-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\"\n >\n @for (\n action of visibleActions(item, \"trailing\");\n let aidx = $index;\n track action?.id ?? $index\n ) {\n @if ((action.kind || \"icon\") === \"icon\") {\n <button\n mat-icon-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n (click)=\"onActionClick($event, action.id, item, index)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, index)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n index\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, index)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon\n [praxisIcon]=\"action.icon\"\n [style.cssText]=\"iconStyle(action.color)\"\n ></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === \"stroked\") {\n <button\n mat-stroked-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'stroked')\"\n (click)=\"onActionClick($event, action.id, item, index)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, index)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n index\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, index)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (action.buttonVariant === \"raised\") {\n <button\n mat-raised-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'raised')\"\n (click)=\"onActionClick($event, action.id, item, index)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, index)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n index\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, index)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (!action.buttonVariant || action.buttonVariant === \"flat\") {\n <button\n mat-flat-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'flat')\"\n (click)=\"onActionClick($event, action.id, item, index)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, index)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n index\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, index)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n }\n }\n </div>\n }\n } @else if (column.slot === \"actions\") {\n @if ((visibleActions(item, \"actions\") || []).length) {\n <div\n class=\"list-item-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\"\n >\n @for (\n action of visibleActions(item, \"actions\");\n let aidx = $index;\n track action?.id ?? $index\n ) {\n @if ((action.kind || \"icon\") === \"icon\") {\n <button\n mat-icon-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n (click)=\"onActionClick($event, action.id, item, index)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, index)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n index\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, index)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon\n [praxisIcon]=\"action.icon\"\n [style.cssText]=\"iconStyle(action.color)\"\n ></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === \"stroked\") {\n <button\n mat-stroked-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'stroked')\"\n (click)=\"onActionClick($event, action.id, item, index)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, index)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n index\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, index)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (action.buttonVariant === \"raised\") {\n <button\n mat-raised-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'raised')\"\n (click)=\"onActionClick($event, action.id, item, index)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, index)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n index\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, index)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (!action.buttonVariant || action.buttonVariant === \"flat\") {\n <button\n mat-flat-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'flat')\"\n (click)=\"onActionClick($event, action.id, item, index)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, index)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n index\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, index)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n }\n }\n </div>\n }\n } @else if (column.slot === \"expand\") {\n @if (showExpandIcon(\"expand\")) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"expand-toggle\"\n [attr.aria-label]=\"expandToggleAriaLabel(item, index)\"\n [attr.aria-expanded]=\"\n expansionOwnedByIcon() ? isExpanded(item, index) : null\n \"\n [attr.aria-controls]=\"\n expansionOwnedByIcon()\n ? expandRegionId(item, index)\n : null\n \"\n (click)=\"onExpandToggle($event, item, index)\"\n >\n <mat-icon\n [praxisIcon]=\"\n isExpanded(item, index) ? 'expand_less' : 'expand_more'\n \"\n ></mat-icon>\n </button>\n }\n } @else if (rowLayoutSlot(item, column.slot); as slotNode) {\n <ng-container\n *ngTemplateOutlet=\"\n rowLayoutNode;\n context: {\n $implicit: slotNode,\n slot: column.slot,\n imageAlt: rowLayoutImageAlt(column.slot),\n }\n \"\n ></ng-container>\n }\n </div>\n }\n </div>\n </ng-template>\n\n <!-- List variant -->\n @if (isListVariant()) {\n <!-- Selection list -->\n @if (isSelectionEnabled()) {\n <mat-selection-list\n [multiple]=\"config.selection?.mode === 'multiple'\"\n [formControl]=\"boundControl\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n @for (\n section of sections$ | async;\n track trackBySection($index, section)\n ) {\n @if (section.key) {\n <div class=\"section-header mat-subheader\">\n @if (sectionHeaderTemplate(section.key); as sh) {\n @switch (sh.type) {\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"sh.value\"\n [ngClass]=\"sh.class\"\n [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [style.cssText]=\"\n (sh.style ? sh.style + ';' : '') + iconStyle(sh.color)\n \"\n ></mat-icon>\n }\n @case (\"image\") {\n <span\n class=\"inline-image\"\n [ngClass]=\"sh.class\"\n [style.cssText]=\"sh.style\"\n >\n <img\n [src]=\"sh.value\"\n [alt]=\"\n config.templating?.sectionHeader?.imageAlt || ''\n \"\n />\n @if (sh.badge?.value) {\n <mat-chip\n class=\"inline-badge\"\n [color]=\"\n isThemeColor(sh.badge?.color)\n ? sh.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (sh.badge?.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(sh.badge?.color, sh.badge?.variant)\n \"\n >{{ sh.badge?.value }}</mat-chip\n >\n }\n </span>\n }\n @case (\"chip\") {\n <mat-chip\n [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [ngClass]=\"[\n sh.class || '',\n (sh.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : '',\n ]\"\n [style.cssText]=\"\n chipStyle(sh.color, sh.variant) +\n (sh.style ? ';' + sh.style : '')\n \"\n >{{ sh.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n @for (\n _ of ratingRange(sh);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, sh.value)\"\n [color]=\"ratingThemeColor(sh)\"\n [style.cssText]=\"ratingIconStyle(sh)\"\n ></mat-icon>\n }\n </span>\n }\n @case (\"html\") {\n <span\n [ngClass]=\"sh.class\"\n [style.cssText]=\"sh.style\"\n [innerHTML]=\"sh.value\"\n ></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"sh\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose [compose]=\"sh\"></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"sh\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">{{\n sh.value\n }}</span>\n }\n }\n }\n </div>\n }\n @for (\n item of section.items;\n track trackByItem($index, item);\n let i = $index\n ) {\n <mat-list-option\n [value]=\"item\"\n [attr.aria-label]=\"itemAriaLabel(item)\"\n >\n @if (hasRowLayoutGrid()) {\n <ng-container\n *ngTemplateOutlet=\"\n listRowLayout;\n context: {\n $implicit: item,\n index: i,\n sectionKey: section.key || undefined,\n clickable: false,\n }\n \"\n ></ng-container>\n } @else {\n <div\n class=\"list-item-content\"\n [ngClass]=\"itemRuleClass(item)\"\n [attr.style]=\"itemRuleStyle(item)\"\n >\n <div class=\"list-item-leading\">\n @if (leading(item); as lead) {\n @switch (lead.type) {\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"lead.value\"\n [ngClass]=\"lead.class\"\n [color]=\"\n isThemeColor(lead.color) ? lead.color : undefined\n \"\n [style.cssText]=\"\n (lead.style ? lead.style + ';' : '') +\n iconStyle(lead.color)\n \"\n ></mat-icon>\n }\n @case (\"image\") {\n <div\n class=\"lead-image\"\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >\n <img\n [src]=\"lead.value\"\n [alt]=\"config.templating?.leading?.imageAlt || ''\"\n />\n @if (lead.badge?.value) {\n <mat-chip\n class=\"lead-badge\"\n [color]=\"\n isThemeColor(lead.badge?.color)\n ? lead.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (lead.badge?.variant || 'filled') ===\n 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(\n lead.badge?.color,\n lead.badge?.variant\n )\n \"\n >{{ lead.badge?.value }}</mat-chip\n >\n }\n </div>\n }\n @case (\"text\") {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >{{ lead.value }}</span\n >\n }\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(lead.color) ? lead.color : undefined\n \"\n [ngClass]=\"\n (lead.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(lead.color, lead.variant)\n \"\n >{{ lead.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >\n @for (\n _ of ratingRange(lead);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, lead.value)\"\n [color]=\"ratingThemeColor(lead)\"\n [style.cssText]=\"ratingIconStyle(lead)\"\n ></mat-icon>\n }\n </span>\n }\n @case (\"html\") {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n [innerHTML]=\"lead.value\"\n ></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"lead\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose\n [compose]=\"lead\"\n ></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"lead\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >{{ lead.value }}</span\n >\n }\n }\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n </div>\n <div class=\"list-item-text\">\n <div\n class=\"primary\"\n [ngClass]=\"primary(item)?.class\"\n [style.cssText]=\"primary(item)?.style\"\n >\n @if (primary(item)?.type === \"metric\") {\n <praxis-list-metric\n [metric]=\"primary(item)\"\n ></praxis-list-metric>\n } @else if (primary(item)?.type === \"compose\") {\n <praxis-list-compose\n [compose]=\"primary(item)\"\n ></praxis-list-compose>\n } @else if (primary(item)?.type === \"component\") {\n <praxis-list-runtime-component\n [component]=\"primary(item)\"\n ></praxis-list-runtime-component>\n } @else {\n {{ primary(item)?.value }}\n }\n </div>\n @if (layoutLines > 1) {\n <div\n class=\"secondary\"\n [ngClass]=\"secondary(item)?.class\"\n [style.cssText]=\"secondary(item)?.style\"\n >\n @if (secondary(item)?.type === \"metric\") {\n <praxis-list-metric\n [metric]=\"secondary(item)\"\n ></praxis-list-metric>\n } @else if (secondary(item)?.type === \"compose\") {\n <praxis-list-compose\n [compose]=\"secondary(item)\"\n ></praxis-list-compose>\n } @else if (secondary(item)?.type === \"component\") {\n <praxis-list-runtime-component\n [component]=\"secondary(item)\"\n ></praxis-list-runtime-component>\n } @else {\n {{ secondary(item)?.value }}\n }\n </div>\n }\n @if (meta(item); as m) {\n @if (\n (config.templating?.metaPlacement === \"line\" &&\n (m?.type === \"text\" ||\n m?.type === \"date\" ||\n m?.type === \"currency\")) ||\n (layoutLines > 2 &&\n (m?.type === \"text\" ||\n m?.type === \"date\" ||\n m?.type === \"currency\"))\n ) {\n <div\n class=\"tertiary\"\n [ngClass]=\"m.class\"\n [style.cssText]=\"m.style\"\n >\n @if (config.templating?.metaPrefixIcon; as mpi) {\n <mat-icon [praxisIcon]=\"mpi\"></mat-icon>\n }\n {{ m.value }}\n </div>\n }\n }\n @if (featuresVisible()) {\n <div class=\"features\">\n @for (\n f of config.templating?.features || [];\n track $index;\n let fi = $index\n ) {\n <span\n class=\"feature\"\n [ngClass]=\"\n featureSemanticClass(item, f.expr, f.class)\n \"\n >\n @if (f.icon && featuresMode() !== \"labels-only\") {\n <mat-icon [praxisIcon]=\"f.icon\"></mat-icon>\n }\n @if (featuresMode() !== \"icons-only\") {\n <span\n [ngClass]=\"f.class\"\n [style.cssText]=\"f.style\"\n >\n @for (\n line of featureLabelLines(item, f.expr);\n track $index\n ) {\n <span class=\"feature-line\">{{ line }}</span>\n }\n </span>\n }\n @if (\n featureProgressPercent(item, f.expr, f.class);\n as progress\n ) {\n <span class=\"feature-progress\" aria-hidden=\"true\">\n <span\n class=\"feature-progress__value\"\n [style.width.%]=\"progress\"\n ></span>\n </span>\n }\n </span>\n }\n </div>\n }\n </div>\n <div class=\"list-item-trailing\">\n @if (meta(item); as m) {\n @if (\n !(\n (config.templating?.metaPlacement === \"line\" ||\n layoutLines > 2) &&\n (m?.type === \"text\" ||\n m?.type === \"date\" ||\n m?.type === \"currency\")\n )\n ) {\n <div\n class=\"meta\"\n [ngClass]=\"m.class\"\n [style.cssText]=\"m.style\"\n >\n @switch (m.type) {\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(m.color) ? m.color : undefined\n \"\n [ngClass]=\"\n (m.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(m.color, m.variant)\"\n >{{ m.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(m);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, m.value)\"\n [color]=\"ratingThemeColor(m)\"\n [style.cssText]=\"ratingIconStyle(m)\"\n ></mat-icon>\n }\n }\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"m.value\"\n [color]=\"\n isThemeColor(m.color) ? m.color : undefined\n \"\n [style.cssText]=\"iconStyle(m.color)\"\n ></mat-icon>\n }\n @case (\"image\") {\n <span class=\"inline-image\"\n ><img [src]=\"m.value\" [alt]=\"m.imageAlt || ''\"\n /></span>\n }\n @case (\"html\") {\n <span [innerHTML]=\"m.value\"></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"m\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose\n [compose]=\"m\"\n ></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"m\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span>\n @if (\n config.templating?.metaPrefixIcon;\n as mpi2\n ) {\n <mat-icon [praxisIcon]=\"mpi2\"></mat-icon>\n }\n {{ m.value }}</span\n >\n }\n }\n </div>\n }\n }\n @if (trailing(item); as tr) {\n <div\n class=\"trailing\"\n [ngClass]=\"tr.class\"\n [style.cssText]=\"tr.style\"\n >\n @switch (tr.type) {\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(tr.color) ? tr.color : undefined\n \"\n [ngClass]=\"\n (tr.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(tr.color, tr.variant)\"\n >{{ tr.value }}</mat-chip\n >\n }\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"tr.value\"\n [color]=\"\n isThemeColor(tr.color) ? tr.color : undefined\n \"\n [style.cssText]=\"iconStyle(tr.color)\"\n ></mat-icon>\n }\n @case (\"image\") {\n <div\n class=\"lead-image\"\n [ngClass]=\"tr.class\"\n [style.cssText]=\"tr.style\"\n >\n <img\n [src]=\"tr.value\"\n [alt]=\"\n config.templating?.trailing?.imageAlt || ''\n \"\n />\n @if (tr.badge?.value) {\n <mat-chip\n class=\"lead-badge\"\n [color]=\"\n isThemeColor(tr.badge?.color)\n ? tr.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (tr.badge?.variant || 'filled') ===\n 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(\n tr.badge?.color,\n tr.badge?.variant\n )\n \"\n >{{ tr.badge?.value }}</mat-chip\n >\n }\n </div>\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(tr);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, tr.value)\"\n [color]=\"ratingThemeColor(tr)\"\n [style.cssText]=\"ratingIconStyle(tr)\"\n ></mat-icon>\n }\n }\n @case (\"html\") {\n @if (item.alertsData !== undefined && item.ownerName) {\n <!-- Component-based rendering for executive trailing -->\n <span class=\"exec-trailing-shell\">\n <praxis-executive-alerts [alerts]=\"item.alertsData\"></praxis-executive-alerts>\n <praxis-executive-owner [name]=\"item.ownerName\"></praxis-executive-owner>\n </span>\n } @else {\n <span [innerHTML]=\"tr.value\"></span>\n }\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"tr\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose\n [compose]=\"tr\"\n ></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"tr\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span>{{ tr.value }}</span>\n }\n }\n </div>\n }\n @if (showExpandIcon(\"trailing\")) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"expand-toggle\"\n [attr.aria-label]=\"expandToggleAriaLabel(item, i)\"\n [attr.aria-expanded]=\"\n expansionOwnedByIcon() ? isExpanded(item, i) : null\n \"\n [attr.aria-controls]=\"\n expansionOwnedByIcon()\n ? expandRegionId(item, i)\n : null\n \"\n (click)=\"onExpandToggle($event, item, i)\"\n >\n <mat-icon\n [praxisIcon]=\"\n isExpanded(item, i) ? 'expand_less' : 'expand_more'\n \"\n ></mat-icon>\n </button>\n }\n @if ((visibleActions(item, \"trailing\") || []).length) {\n <div\n class=\"list-item-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\"\n >\n @for (\n action of visibleActions(item, \"trailing\");\n let aidx = $index;\n track action?.id ?? $index\n ) {\n @if ((action.kind || \"icon\") === \"icon\") {\n <button\n mat-icon-button\n [color]=\"\n isThemeColor(action.color)\n ? action.color\n : undefined\n \"\n (click)=\"\n onActionClick($event, action.id, item, i)\n \"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n i\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon\n [praxisIcon]=\"action.icon\"\n [style.cssText]=\"iconStyle(action.color)\"\n ></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === \"stroked\") {\n <button\n mat-stroked-button\n [color]=\"\n isThemeColor(action.color)\n ? action.color\n : undefined\n \"\n [style.cssText]=\"\n buttonStyle(action.color, 'stroked')\n \"\n (click)=\"\n onActionClick($event, action.id, item, i)\n \"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n i\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (action.buttonVariant === \"raised\") {\n <button\n mat-raised-button\n [color]=\"\n isThemeColor(action.color)\n ? action.color\n : undefined\n \"\n [style.cssText]=\"\n buttonStyle(action.color, 'raised')\n \"\n (click)=\"\n onActionClick($event, action.id, item, i)\n \"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n i\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (\n !action.buttonVariant ||\n action.buttonVariant === \"flat\"\n ) {\n <button\n mat-flat-button\n [color]=\"\n isThemeColor(action.color)\n ? action.color\n : undefined\n \"\n [style.cssText]=\"\n buttonStyle(action.color, 'flat')\n \"\n (click)=\"\n onActionClick($event, action.id, item, i)\n \"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n i\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n }\n }\n </div>\n }\n </div>\n </div>\n }\n @if (isExpandable() && isExpanded(item, i)) {\n <div\n class=\"item-expansion\"\n [id]=\"expandRegionId(item, i)\"\n role=\"region\"\n [attr.aria-label]=\"expansionRegionAriaLabel(item)\"\n >\n <div class=\"item-expansion-grid\">\n @for (\n expansionSection of expansionSections();\n track expansionSection.id\n ) {\n <section\n class=\"expansion-section\"\n [attr.data-section-type]=\"expansionSection.type\"\n >\n @if (expansionSection.title) {\n <div class=\"expansion-section-title\">\n {{ expansionSection.title }}\n </div>\n }\n @if (\n expansionSectionHasContent(\n item,\n expansionSection,\n i\n )\n ) {\n @switch (expansionSection.type) {\n @case (\"chip-list\") {\n <div class=\"expansion-chip-list\">\n @for (\n expansionEntry of expansionSectionItems(\n item,\n expansionSection,\n i\n );\n track $index\n ) {\n <mat-chip class=\"expansion-chip\">{{\n expansionItemLabel(expansionEntry)\n }}</mat-chip>\n }\n </div>\n }\n @case (\"timeline\") {\n <div class=\"expansion-timeline\">\n @for (\n expansionEntry of expansionSectionItems(\n item,\n expansionSection,\n i\n );\n track $index\n ) {\n <div class=\"expansion-timeline-item\">\n <div class=\"expansion-timeline-title\">\n {{\n expansionTimelineTitle(expansionEntry)\n }}\n </div>\n @if (\n expansionTimelineMeta(expansionEntry)\n ) {\n <div class=\"expansion-timeline-meta\">\n {{\n expansionTimelineMeta(\n expansionEntry\n )\n }}\n </div>\n }\n @if (\n expansionTimelineDescription(\n expansionEntry\n )\n ) {\n <div\n class=\"expansion-timeline-description\"\n >\n {{\n expansionTimelineDescription(\n expansionEntry\n )\n }}\n </div>\n }\n </div>\n }\n </div>\n }\n @case (\"key-value\") {\n <dl class=\"expansion-key-value\">\n @for (\n expansionEntry of expansionSectionItems(\n item,\n expansionSection,\n i\n );\n track $index\n ) {\n <div class=\"expansion-key-value-row\">\n @if (\n expansionKeyValueKey(expansionEntry)\n ) {\n <dt>\n {{\n expansionKeyValueKey(expansionEntry)\n }}\n </dt>\n }\n <dd>\n {{\n expansionKeyValueValue(expansionEntry)\n }}\n </dd>\n </div>\n }\n </dl>\n }\n @default {\n <div class=\"expansion-info-list\">\n @for (\n expansionEntry of expansionSectionItems(\n item,\n expansionSection,\n i\n );\n track $index\n ) {\n <div class=\"expansion-info-item\">\n <div class=\"expansion-info-title\">\n {{ expansionInfoTitle(expansionEntry) }}\n </div>\n @if (expansionInfoValue(expansionEntry)) {\n <div class=\"expansion-info-value\">\n {{\n expansionInfoValue(expansionEntry)\n }}\n </div>\n }\n </div>\n }\n </div>\n }\n }\n } @else {\n <div class=\"expansion-empty\">\n {{\n expansionSection.emptyLabel ||\n \"Sem dados disponíveis\"\n }}\n </div>\n }\n </section>\n }\n </div>\n </div>\n }\n </mat-list-option>\n @if (\n (config.layout?.dividers === \"all\" ||\n config.layout?.dividers === \"between\") &&\n i < section.items.length - 1\n ) {\n <mat-divider></mat-divider>\n }\n }\n }\n </mat-selection-list>\n } @else {\n <ng-container *ngTemplateOutlet=\"readList\"></ng-container>\n }\n\n <!-- Read-only list -->\n <ng-template #readList>\n <mat-list>\n @for (\n section of sections$ | async;\n track trackBySection($index, section);\n let sidx = $index\n ) {\n @if (section.key) {\n <div class=\"section-header mat-subheader\">\n @if (sectionHeaderTemplate(section.key); as sh) {\n @switch (sh.type) {\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"sh.value\"\n [ngClass]=\"sh.class\"\n [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [style.cssText]=\"\n (sh.style ? sh.style + ';' : '') + iconStyle(sh.color)\n \"\n ></mat-icon>\n }\n @case (\"image\") {\n <span\n class=\"inline-image\"\n [ngClass]=\"sh.class\"\n [style.cssText]=\"sh.style\"\n >\n <img\n [src]=\"sh.value\"\n [alt]=\"\n config.templating?.sectionHeader?.imageAlt || ''\n \"\n />\n @if (sh.badge?.value) {\n <mat-chip\n class=\"inline-badge\"\n [color]=\"\n isThemeColor(sh.badge?.color)\n ? sh.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (sh.badge?.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(sh.badge?.color, sh.badge?.variant)\n \"\n >{{ sh.badge?.value }}</mat-chip\n >\n }\n </span>\n }\n @case (\"chip\") {\n <mat-chip\n [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [ngClass]=\"[\n sh.class || '',\n (sh.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : '',\n ]\"\n [style.cssText]=\"\n chipStyle(sh.color, sh.variant) +\n (sh.style ? ';' + sh.style : '')\n \"\n >{{ sh.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n @for (\n _ of ratingRange(sh);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, sh.value)\"\n [color]=\"ratingThemeColor(sh)\"\n [style.cssText]=\"ratingIconStyle(sh)\"\n ></mat-icon>\n }\n </span>\n }\n @case (\"html\") {\n <span\n [ngClass]=\"sh.class\"\n [style.cssText]=\"sh.style\"\n [innerHTML]=\"sh.value\"\n ></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"sh\"></praxis-list-metric>\n }\n @default {\n <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">{{\n sh.value\n }}</span>\n }\n }\n }\n </div>\n }\n @for (\n item of section.items;\n track trackByItem($index, item);\n let i = $index\n ) {\n <mat-list-item [attr.data-item-status]=\"item?.status || null\">\n @if (hasRowLayoutGrid()) {\n <ng-container\n *ngTemplateOutlet=\"\n listRowLayout;\n context: {\n $implicit: item,\n index: i,\n sectionKey: section.key || undefined,\n clickable: true,\n }\n \"\n ></ng-container>\n } @else {\n <div\n class=\"list-item-content\"\n [ngClass]=\"itemRuleClass(item)\"\n [attr.style]=\"itemRuleStyle(item)\"\n >\n <button\n type=\"button\"\n class=\"list-item-main-action\"\n [attr.aria-label]=\"itemAriaLabel(item)\"\n [attr.aria-expanded]=\"\n expansionOwnedByRow() ? isExpanded(item, i) : null\n \"\n [attr.aria-controls]=\"\n expansionOwnedByRow() ? expandRegionId(item, i) : null\n \"\n (click)=\"onRowActivate(item, i, section.key || undefined)\"\n >\n <div class=\"list-item-leading\">\n @if (leading(item); as lead) {\n @switch (lead.type) {\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"lead.value\"\n [ngClass]=\"lead.class\"\n [color]=\"\n isThemeColor(lead.color)\n ? lead.color\n : undefined\n \"\n [style.cssText]=\"\n (lead.style ? lead.style + ';' : '') +\n iconStyle(lead.color)\n \"\n ></mat-icon>\n }\n @case (\"image\") {\n <div\n class=\"lead-image\"\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >\n <img\n [src]=\"lead.value\"\n [alt]=\"\n config.templating?.leading?.imageAlt || ''\n \"\n />\n @if (lead.badge?.value) {\n <mat-chip\n class=\"lead-badge\"\n [color]=\"\n isThemeColor(lead.badge?.color)\n ? lead.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (lead.badge?.variant || 'filled') ===\n 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(\n lead.badge?.color,\n lead.badge?.variant\n )\n \"\n >{{ lead.badge?.value }}</mat-chip\n >\n }\n </div>\n }\n @case (\"text\") {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >{{ lead.value }}</span\n >\n }\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(lead.color)\n ? lead.color\n : undefined\n \"\n [ngClass]=\"\n (lead.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(lead.color, lead.variant)\n \"\n >{{ lead.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(lead);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, lead.value)\"\n [color]=\"ratingThemeColor(lead)\"\n [style.cssText]=\"ratingIconStyle(lead)\"\n ></mat-icon>\n }\n }\n @case (\"html\") {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n [innerHTML]=\"lead.value\"\n ></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"lead\"></praxis-list-metric>\n }\n @default {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >{{ lead.value }}</span\n >\n }\n }\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n </div>\n <div class=\"list-item-text\">\n <div\n class=\"primary\"\n [ngClass]=\"primary(item)?.class\"\n [style.cssText]=\"primary(item)?.style\"\n >\n @if (primary(item)?.type === \"metric\") {\n <praxis-list-metric\n [metric]=\"primary(item)\"\n ></praxis-list-metric>\n } @else if (primary(item)?.type === \"html\") {\n <span [innerHTML]=\"primary(item)?.value\"></span>\n } @else {\n {{ primary(item)?.value }}\n }\n </div>\n @if (layoutLines > 1) {\n <div\n class=\"secondary\"\n [ngClass]=\"secondary(item)?.class\"\n [style.cssText]=\"secondary(item)?.style\"\n >\n @if (item.segmentVariant && item.segmentLabel && item.accountType && item.since) {\n <!-- Component-based rendering for executive items -->\n <span class=\"exec-subline\">\n <praxis-executive-badge [variant]=\"item.segmentVariant\">{{ item.segmentLabel }}</praxis-executive-badge>\n <span class=\"exec-subcopy\">{{ item.accountType }}</span>\n <span class=\"exec-subseparator\">·</span>\n <span class=\"exec-subcopy\">Desde {{ item.since }}</span>\n </span>\n } @else if (secondary(item)?.type === \"html\") {\n <span [innerHTML]=\"secondary(item)?.value\"></span>\n } @else if (secondary(item)?.type === \"metric\") {\n <praxis-list-metric\n [metric]=\"secondary(item)\"\n ></praxis-list-metric>\n } @else {\n {{ secondary(item)?.value }}\n }\n </div>\n }\n @if (meta(item); as m) {\n @if (\n (config.templating?.metaPlacement === \"line\" &&\n (m?.type === \"text\" ||\n m?.type === \"date\" ||\n m?.type === \"currency\")) ||\n (layoutLines > 2 &&\n (m?.type === \"text\" ||\n m?.type === \"date\" ||\n m?.type === \"currency\"))\n ) {\n <div\n class=\"tertiary\"\n [ngClass]=\"m.class\"\n [style.cssText]=\"m.style\"\n >\n @if (config.templating?.metaPrefixIcon; as mpi) {\n <mat-icon [praxisIcon]=\"mpi\"></mat-icon>\n }\n {{ m.value }}\n </div>\n }\n }\n @if (featuresVisible()) {\n <div class=\"features\">\n @for (\n f of config.templating?.features || [];\n track $index;\n let fi = $index\n ) {\n <span\n class=\"feature\"\n [ngClass]=\"\n featureSemanticClass(item, f.expr, f.class)\n \"\n >\n @if (f.icon && featuresMode() !== \"labels-only\") {\n <mat-icon [praxisIcon]=\"f.icon\"></mat-icon>\n }\n @if (featuresMode() !== \"icons-only\") {\n <span\n [ngClass]=\"f.class\"\n [style.cssText]=\"f.style\"\n >\n @for (\n line of featureLabelLines(item, f.expr);\n track $index\n ) {\n <span class=\"feature-line\">{{ line }}</span>\n }\n </span>\n }\n @if (\n featureProgressPercent(item, f.expr, f.class);\n as progress\n ) {\n <span\n class=\"feature-progress\"\n aria-hidden=\"true\"\n >\n <span\n class=\"feature-progress__value\"\n [style.width.%]=\"progress\"\n ></span>\n </span>\n }\n </span>\n }\n </div>\n }\n </div>\n </button>\n <div class=\"list-item-trailing\">\n @if (meta(item); as m) {\n @if (\n !(\n (config.templating?.metaPlacement === \"line\" ||\n layoutLines > 2) &&\n (m?.type === \"text\" ||\n m?.type === \"date\" ||\n m?.type === \"currency\")\n )\n ) {\n <div\n class=\"meta\"\n [ngClass]=\"m.class\"\n [style.cssText]=\"m.style\"\n >\n @switch (m.type) {\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(m.color) ? m.color : undefined\n \"\n [ngClass]=\"\n (m.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(m.color, m.variant)\"\n >{{ m.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(m);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, m.value)\"\n [color]=\"ratingThemeColor(m)\"\n [style.cssText]=\"ratingIconStyle(m)\"\n ></mat-icon>\n }\n }\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"m.value\"\n [color]=\"\n isThemeColor(m.color) ? m.color : undefined\n \"\n [style.cssText]=\"iconStyle(m.color)\"\n ></mat-icon>\n }\n @case (\"image\") {\n <span class=\"inline-image\"\n ><img [src]=\"m.value\" [alt]=\"m.imageAlt || ''\"\n /></span>\n }\n @case (\"html\") {\n <span [innerHTML]=\"m.value\"></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"m\"></praxis-list-metric>\n }\n @default {\n <span>\n @if (\n config.templating?.metaPrefixIcon;\n as mpi2\n ) {\n <mat-icon [praxisIcon]=\"mpi2\"></mat-icon>\n }\n {{ m.value }}</span\n >\n }\n }\n </div>\n }\n }\n @if (trailing(item); as tr) {\n <div\n class=\"trailing\"\n [ngClass]=\"tr.class\"\n [style.cssText]=\"tr.style\"\n >\n @switch (tr.type) {\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(tr.color) ? tr.color : undefined\n \"\n [ngClass]=\"\n (tr.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(tr.color, tr.variant)\"\n >{{ tr.value }}</mat-chip\n >\n }\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"tr.value\"\n [color]=\"\n isThemeColor(tr.color) ? tr.color : undefined\n \"\n [style.cssText]=\"iconStyle(tr.color)\"\n ></mat-icon>\n }\n @case (\"image\") {\n <div\n class=\"lead-image\"\n [ngClass]=\"tr.class\"\n [style.cssText]=\"tr.style\"\n >\n <img\n [src]=\"tr.value\"\n [alt]=\"\n config.templating?.trailing?.imageAlt || ''\n \"\n />\n @if (tr.badge?.value) {\n <mat-chip\n class=\"lead-badge\"\n [color]=\"\n isThemeColor(tr.badge?.color)\n ? tr.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (tr.badge?.variant || 'filled') ===\n 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(\n tr.badge?.color,\n tr.badge?.variant\n )\n \"\n >{{ tr.badge?.value }}</mat-chip\n >\n }\n </div>\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(tr);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, tr.value)\"\n [color]=\"ratingThemeColor(tr)\"\n [style.cssText]=\"ratingIconStyle(tr)\"\n ></mat-icon>\n }\n }\n @case (\"html\") {\n @if (item.alertsData !== undefined && item.ownerName) {\n <!-- Component-based rendering for executive trailing -->\n <span class=\"exec-trailing-shell\">\n <praxis-executive-alerts [alerts]=\"item.alertsData\"></praxis-executive-alerts>\n <praxis-executive-owner [name]=\"item.ownerName\"></praxis-executive-owner>\n </span>\n } @else {\n <span [innerHTML]=\"tr.value\"></span>\n }\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"tr\"></praxis-list-metric>\n }\n @default {\n <span>{{ tr.value }}</span>\n }\n }\n </div>\n }\n @if (showExpandIcon(\"trailing\")) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"expand-toggle\"\n [attr.aria-label]=\"expandToggleAriaLabel(item, i)\"\n [attr.aria-expanded]=\"\n expansionOwnedByIcon() ? isExpanded(item, i) : null\n \"\n [attr.aria-controls]=\"\n expansionOwnedByIcon()\n ? expandRegionId(item, i)\n : null\n \"\n (click)=\"onExpandToggle($event, item, i)\"\n >\n <mat-icon\n [praxisIcon]=\"\n isExpanded(item, i) ? 'expand_less' : 'expand_more'\n \"\n ></mat-icon>\n </button>\n }\n @if ((visibleActions(item, \"trailing\") || []).length) {\n <div\n class=\"list-item-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\"\n >\n @for (\n action of visibleActions(item, \"trailing\");\n let aidx = $index;\n track action?.id ?? $index\n ) {\n @if ((action.kind || \"icon\") === \"icon\") {\n <button\n mat-icon-button\n [color]=\"\n isThemeColor(action.color)\n ? action.color\n : undefined\n \"\n (click)=\"\n onActionClick($event, action.id, item, i)\n \"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n i\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon\n [praxisIcon]=\"action.icon\"\n [style.cssText]=\"iconStyle(action.color)\"\n ></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === \"stroked\") {\n <button\n mat-stroked-button\n [color]=\"\n isThemeColor(action.color)\n ? action.color\n : undefined\n \"\n [style.cssText]=\"\n buttonStyle(action.color, 'stroked')\n \"\n (click)=\"\n onActionClick($event, action.id, item, i)\n \"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n i\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (action.buttonVariant === \"raised\") {\n <button\n mat-raised-button\n [color]=\"\n isThemeColor(action.color)\n ? action.color\n : undefined\n \"\n [style.cssText]=\"\n buttonStyle(action.color, 'raised')\n \"\n (click)=\"\n onActionClick($event, action.id, item, i)\n \"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n i\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (\n !action.buttonVariant ||\n action.buttonVariant === \"flat\"\n ) {\n <button\n mat-flat-button\n [color]=\"\n isThemeColor(action.color)\n ? action.color\n : undefined\n \"\n [style.cssText]=\"\n buttonStyle(action.color, 'flat')\n \"\n (click)=\"\n onActionClick($event, action.id, item, i)\n \"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(\n action.id,\n item,\n i\n ),\n }\"\n >\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n }\n }\n </div>\n }\n </div>\n </div>\n }\n @if (isExpandable() && isExpanded(item, i)) {\n <div\n class=\"item-expansion\"\n [id]=\"expandRegionId(item, i)\"\n role=\"region\"\n [attr.aria-label]=\"expansionRegionAriaLabel(item)\"\n >\n <div class=\"item-expansion-grid\">\n @for (\n expansionSection of expansionSections();\n track expansionSection.id\n ) {\n <section\n class=\"expansion-section\"\n [attr.data-section-type]=\"expansionSection.type\"\n >\n @if (expansionSection.title) {\n <div class=\"expansion-section-title\">\n {{ expansionSection.title }}\n </div>\n }\n @if (\n expansionSectionHasContent(\n item,\n expansionSection,\n i\n )\n ) {\n @switch (expansionSection.type) {\n @case (\"chip-list\") {\n <div class=\"expansion-chip-list\">\n @for (\n expansionEntry of expansionSectionItems(\n item,\n expansionSection,\n i\n );\n track $index\n ) {\n <mat-chip class=\"expansion-chip\">{{\n expansionItemLabel(expansionEntry)\n }}</mat-chip>\n }\n </div>\n }\n @case (\"timeline\") {\n <div class=\"expansion-timeline\">\n @for (\n expansionEntry of expansionSectionItems(\n item,\n expansionSection,\n i\n );\n track $index\n ) {\n <div class=\"expansion-timeline-item\">\n <div class=\"expansion-timeline-title\">\n {{\n expansionTimelineTitle(expansionEntry)\n }}\n </div>\n @if (\n expansionTimelineMeta(expansionEntry)\n ) {\n <div class=\"expansion-timeline-meta\">\n {{\n expansionTimelineMeta(\n expansionEntry\n )\n }}\n </div>\n }\n @if (\n expansionTimelineDescription(\n expansionEntry\n )\n ) {\n <div\n class=\"expansion-timeline-description\"\n >\n {{\n expansionTimelineDescription(\n expansionEntry\n )\n }}\n </div>\n }\n </div>\n }\n </div>\n }\n @case (\"key-value\") {\n <dl class=\"expansion-key-value\">\n @for (\n expansionEntry of expansionSectionItems(\n item,\n expansionSection,\n i\n );\n track $index\n ) {\n <div class=\"expansion-key-value-row\">\n @if (\n expansionKeyValueKey(expansionEntry)\n ) {\n <dt>\n {{\n expansionKeyValueKey(expansionEntry)\n }}\n </dt>\n }\n <dd>\n {{\n expansionKeyValueValue(expansionEntry)\n }}\n </dd>\n </div>\n }\n </dl>\n }\n @default {\n <div class=\"expansion-info-list\">\n @for (\n expansionEntry of expansionSectionItems(\n item,\n expansionSection,\n i\n );\n track $index\n ) {\n <div class=\"expansion-info-item\">\n <div class=\"expansion-info-title\">\n {{ expansionInfoTitle(expansionEntry) }}\n </div>\n @if (expansionInfoValue(expansionEntry)) {\n <div class=\"expansion-info-value\">\n {{\n expansionInfoValue(expansionEntry)\n }}\n </div>\n }\n </div>\n }\n </div>\n }\n }\n } @else {\n <div class=\"expansion-empty\">\n {{\n expansionSection.emptyLabel ||\n \"Sem dados disponíveis\"\n }}\n </div>\n }\n </section>\n }\n </div>\n </div>\n }\n </mat-list-item>\n @if (\n (config.layout?.dividers === \"all\" ||\n config.layout?.dividers === \"between\") &&\n i < section.items.length - 1\n ) {\n <mat-divider></mat-divider>\n }\n }\n }\n </mat-list>\n </ng-template>\n } @else if (isTilesVariant()) {\n <ng-container *ngTemplateOutlet=\"tilesVariant\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"cardsVariant\"></ng-container>\n }\n\n <!-- Cards variant -->\n <ng-template #cardsVariant>\n <div class=\"cards-grid\">\n @for (it of (items$ | async) ?? []; track $index; let i = $index) {\n <div\n class=\"item-card\"\n [ngClass]=\"itemRuleClass(it)\"\n [attr.style]=\"itemRuleStyle(it)\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"itemAriaLabel(it)\"\n (click)=\"onItemClick(it, i)\"\n (keydown.enter)=\"onItemClick(it, i)\"\n (keydown.space)=\"$event.preventDefault(); onItemClick(it, i)\"\n >\n <div class=\"list-item-content\">\n <div class=\"list-item-leading\">\n @if (leading(it); as lead) {\n @switch (lead.type) {\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"lead.value\"\n [ngClass]=\"lead.class\"\n [color]=\"\n isThemeColor(lead.color) ? lead.color : undefined\n \"\n [style.cssText]=\"\n (lead.style ? lead.style + ';' : '') +\n iconStyle(lead.color)\n \"\n ></mat-icon>\n }\n @case (\"image\") {\n <div\n class=\"lead-image\"\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >\n <img\n [src]=\"lead.value\"\n [alt]=\"config.templating?.leading?.imageAlt || ''\"\n />\n @if (lead.badge?.value) {\n <mat-chip\n class=\"lead-badge\"\n [color]=\"\n isThemeColor(lead.badge?.color)\n ? lead.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (lead.badge?.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(lead.badge?.color, lead.badge?.variant)\n \"\n >{{ lead.badge?.value }}</mat-chip\n >\n }\n </div>\n }\n @case (\"text\") {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >{{ lead.value }}</span\n >\n }\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(lead.color) ? lead.color : undefined\n \"\n [ngClass]=\"\n (lead.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(lead.color, lead.variant)\"\n >{{ lead.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(lead);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, lead.value)\"\n [color]=\"ratingThemeColor(lead)\"\n [style.cssText]=\"ratingIconStyle(lead)\"\n ></mat-icon>\n }\n }\n @case (\"html\") {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n [innerHTML]=\"lead.value\"\n ></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"lead\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose\n [compose]=\"lead\"\n ></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"lead\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n >{{ lead.value }}</span\n >\n }\n }\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n </div>\n <div class=\"list-item-text\">\n <div\n class=\"primary\"\n [ngClass]=\"primary(it)?.class\"\n [style.cssText]=\"primary(it)?.style\"\n >\n @if (primary(it)?.type === \"metric\") {\n <praxis-list-metric [metric]=\"primary(it)\"></praxis-list-metric>\n } @else if (primary(it)?.type === \"compose\") {\n <praxis-list-compose\n [compose]=\"primary(it)\"\n ></praxis-list-compose>\n } @else if (primary(it)?.type === \"component\") {\n <praxis-list-runtime-component\n [component]=\"primary(it)\"\n ></praxis-list-runtime-component>\n } @else {\n {{ primary(it)?.value }}\n }\n </div>\n @if (layoutLines > 1) {\n <div\n class=\"secondary\"\n [ngClass]=\"secondary(it)?.class\"\n [style.cssText]=\"secondary(it)?.style\"\n >\n @if (secondary(it)?.type === \"metric\") {\n <praxis-list-metric\n [metric]=\"secondary(it)\"\n ></praxis-list-metric>\n } @else if (secondary(it)?.type === \"compose\") {\n <praxis-list-compose\n [compose]=\"secondary(it)\"\n ></praxis-list-compose>\n } @else if (secondary(it)?.type === \"component\") {\n <praxis-list-runtime-component\n [component]=\"secondary(it)\"\n ></praxis-list-runtime-component>\n } @else {\n {{ secondary(it)?.value }}\n }\n </div>\n }\n @if (meta(it); as m) {\n @if (\n (config.templating?.metaPlacement === \"line\" &&\n (m?.type === \"text\" ||\n m?.type === \"date\" ||\n m?.type === \"currency\")) ||\n (layoutLines > 2 &&\n (m?.type === \"text\" ||\n m?.type === \"date\" ||\n m?.type === \"currency\"))\n ) {\n <div\n class=\"tertiary\"\n [ngClass]=\"m.class\"\n [style.cssText]=\"m.style\"\n >\n @if (config.templating?.metaPrefixIcon; as mpi) {\n <mat-icon [praxisIcon]=\"mpi\"></mat-icon>\n }\n {{ m.value }}\n </div>\n }\n }\n @if (featuresVisible()) {\n <div class=\"features\">\n @for (\n f of config.templating?.features || [];\n track $index;\n let fi = $index\n ) {\n <span\n class=\"feature\"\n [ngClass]=\"featureSemanticClass(it, f.expr, f.class)\"\n >\n @if (f.icon && featuresMode() !== \"labels-only\") {\n <mat-icon [praxisIcon]=\"f.icon\"></mat-icon>\n }\n @if (featuresMode() !== \"icons-only\") {\n <span [ngClass]=\"f.class\" [style.cssText]=\"f.style\">\n @for (\n line of featureLabelLines(it, f.expr);\n track $index\n ) {\n <span class=\"feature-line\">{{ line }}</span>\n }\n </span>\n }\n @if (\n featureProgressPercent(it, f.expr, f.class);\n as progress\n ) {\n <span class=\"feature-progress\" aria-hidden=\"true\">\n <span\n class=\"feature-progress__value\"\n [style.width.%]=\"progress\"\n ></span>\n </span>\n }\n </span>\n }\n </div>\n }\n </div>\n <div class=\"list-item-trailing\">\n @if (meta(it); as m) {\n @if (\n !(\n (config.templating?.metaPlacement === \"line\" ||\n layoutLines > 2) &&\n (m?.type === \"text\" ||\n m?.type === \"date\" ||\n m?.type === \"currency\")\n )\n ) {\n <div\n class=\"meta\"\n [ngClass]=\"m.class\"\n [style.cssText]=\"m.style\"\n >\n @switch (m.type) {\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(m.color) ? m.color : undefined\n \"\n [ngClass]=\"\n (m.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(m.color, m.variant)\"\n >{{ m.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(m);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, m.value)\"\n [color]=\"ratingThemeColor(m)\"\n [style.cssText]=\"ratingIconStyle(m)\"\n ></mat-icon>\n }\n }\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"m.value\"\n [color]=\"\n isThemeColor(m.color) ? m.color : undefined\n \"\n [style.cssText]=\"iconStyle(m.color)\"\n ></mat-icon>\n }\n @case (\"image\") {\n <span class=\"inline-image\"\n ><img [src]=\"m.value\" [alt]=\"m.imageAlt || ''\"\n /></span>\n }\n @case (\"html\") {\n <span [innerHTML]=\"m.value\"></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"m\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose\n [compose]=\"m\"\n ></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"m\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span>\n @if (config.templating?.metaPrefixIcon; as mpi2) {\n <mat-icon [praxisIcon]=\"mpi2\"></mat-icon>\n }\n {{ m.value }}</span\n >\n }\n }\n </div>\n }\n }\n @if (trailing(it); as tr) {\n @if (\n (config.templating?.statusPosition || \"inline\") ===\n \"top-right\" &&\n (tr?.type === \"chip\" || tr?.type === \"icon\")\n ) {\n <div class=\"status-overlay\">\n @if (tr?.type === \"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(tr.color) ? tr.color : undefined\n \"\n [ngClass]=\"\n (tr.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(tr.color, tr.variant)\"\n >{{ tr.value }}</mat-chip\n >\n }\n @if (tr?.type === \"icon\") {\n <mat-icon\n [praxisIcon]=\"tr.value\"\n [color]=\"\n isThemeColor(tr.color) ? tr.color : undefined\n \"\n [style.cssText]=\"iconStyle(tr.color)\"\n ></mat-icon>\n }\n </div>\n } @else {\n <div\n class=\"trailing\"\n [ngClass]=\"tr.class\"\n [style.cssText]=\"tr.style\"\n >\n @switch (tr.type) {\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(tr.color) ? tr.color : undefined\n \"\n [ngClass]=\"\n (tr.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(tr.color, tr.variant)\"\n >{{ tr.value }}</mat-chip\n >\n }\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"tr.value\"\n [color]=\"\n isThemeColor(tr.color) ? tr.color : undefined\n \"\n [style.cssText]=\"iconStyle(tr.color)\"\n ></mat-icon>\n }\n @case (\"image\") {\n <div\n class=\"lead-image\"\n [ngClass]=\"tr.class\"\n [style.cssText]=\"tr.style\"\n >\n <img\n [src]=\"tr.value\"\n [alt]=\"\n config.templating?.trailing?.imageAlt || ''\n \"\n />\n @if (tr.badge?.value) {\n <mat-chip\n class=\"lead-badge\"\n [color]=\"\n isThemeColor(tr.badge?.color)\n ? tr.badge?.color\n : undefined\n \"\n [ngClass]=\"\n (tr.badge?.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"\n chipStyle(tr.badge?.color, tr.badge?.variant)\n \"\n >{{ tr.badge?.value }}</mat-chip\n >\n }\n </div>\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(tr);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, tr.value)\"\n [color]=\"ratingThemeColor(tr)\"\n [style.cssText]=\"ratingIconStyle(tr)\"\n ></mat-icon>\n }\n }\n @case (\"html\") {\n <span [innerHTML]=\"tr.value\"></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"tr\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose\n [compose]=\"tr\"\n ></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"tr\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span>{{ tr.value }}</span>\n }\n }\n </div>\n }\n }\n </div>\n </div>\n <div\n class=\"card-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\"\n >\n @for (\n action of visibleActions(it, \"trailing\");\n let aidx = $index;\n track action?.id ?? $index\n ) {\n @if ((action.kind || \"icon\") === \"icon\") {\n <button\n mat-icon-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n (click)=\"onActionClick($event, action.id, it, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(action.id, it, i),\n }\"\n >\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon\n [praxisIcon]=\"action.icon\"\n [style.cssText]=\"iconStyle(action.color)\"\n ></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === \"stroked\") {\n <button\n mat-stroked-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'stroked')\"\n (click)=\"onActionClick($event, action.id, it, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(action.id, it, i),\n }\"\n >\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (action.buttonVariant === \"raised\") {\n <button\n mat-raised-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'raised')\"\n (click)=\"onActionClick($event, action.id, it, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(action.id, it, i),\n }\"\n >\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (\n !action.buttonVariant || action.buttonVariant === \"flat\"\n ) {\n <button\n mat-flat-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'flat')\"\n (click)=\"onActionClick($event, action.id, it, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(action.id, it, i),\n }\"\n >\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n }\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Tiles variant -->\n <ng-template #tilesVariant>\n <div class=\"tiles-grid\">\n @for (it of (items$ | async) ?? []; track $index; let i = $index) {\n <div\n class=\"item-tile\"\n [ngClass]=\"itemRuleClass(it)\"\n [attr.style]=\"itemRuleStyle(it)\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"itemAriaLabel(it)\"\n (click)=\"onItemClick(it, i)\"\n (keydown.enter)=\"onItemClick(it, i)\"\n (keydown.space)=\"$event.preventDefault(); onItemClick(it, i)\"\n >\n <div class=\"tile-media\">\n @if (leading(it); as lead) {\n @switch (lead.type) {\n @case (\"image\") {\n <img\n [src]=\"lead.value\"\n [alt]=\"config.templating?.leading?.imageAlt || ''\"\n />\n }\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"lead.value\"\n [ngClass]=\"lead.class\"\n [color]=\"\n isThemeColor(lead.color) ? lead.color : undefined\n \"\n [style.cssText]=\"\n (lead.style ? lead.style + ';' : '') +\n iconStyle(lead.color)\n \"\n ></mat-icon>\n }\n @case (\"text\") {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{\n lead.value\n }}</span>\n }\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(lead.color) ? lead.color : undefined\n \"\n [ngClass]=\"\n (lead.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(lead.color, lead.variant)\"\n >{{ lead.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">\n @for (\n _ of ratingRange(lead);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, lead.value)\"\n [color]=\"ratingThemeColor(lead)\"\n [style.cssText]=\"ratingIconStyle(lead)\"\n ></mat-icon>\n }\n </span>\n }\n @case (\"html\") {\n <span\n [ngClass]=\"lead.class\"\n [style.cssText]=\"lead.style\"\n [innerHTML]=\"lead.value\"\n ></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"lead\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose\n [compose]=\"lead\"\n ></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"lead\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{\n lead.value\n }}</span>\n }\n }\n }\n </div>\n\n @if (trailing(it); as tr) {\n @if (\n (config.templating?.statusPosition || \"inline\") ===\n \"top-right\" &&\n (tr?.type === \"chip\" || tr?.type === \"icon\")\n ) {\n <div class=\"tile-status\">\n @if (tr?.type === \"chip\") {\n <mat-chip\n [color]=\"isThemeColor(tr.color) ? tr.color : undefined\"\n [ngClass]=\"\n (tr.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(tr.color, tr.variant)\"\n >{{ tr.value }}</mat-chip\n >\n }\n @if (tr?.type === \"icon\") {\n <mat-icon\n [praxisIcon]=\"tr.value\"\n [color]=\"isThemeColor(tr.color) ? tr.color : undefined\"\n [style.cssText]=\"iconStyle(tr.color)\"\n ></mat-icon>\n }\n </div>\n }\n }\n\n <div class=\"tile-body\">\n <div\n class=\"primary\"\n [ngClass]=\"primary(it)?.class\"\n [style.cssText]=\"primary(it)?.style\"\n >\n @if (primary(it)?.type === \"metric\") {\n <praxis-list-metric [metric]=\"primary(it)\"></praxis-list-metric>\n } @else if (primary(it)?.type === \"compose\") {\n <praxis-list-compose\n [compose]=\"primary(it)\"\n ></praxis-list-compose>\n } @else if (primary(it)?.type === \"component\") {\n <praxis-list-runtime-component\n [component]=\"primary(it)\"\n ></praxis-list-runtime-component>\n } @else {\n {{ primary(it)?.value }}\n }\n </div>\n @if (layoutLines > 1) {\n <div\n class=\"secondary\"\n [ngClass]=\"secondary(it)?.class\"\n [style.cssText]=\"secondary(it)?.style\"\n >\n @if (secondary(it)?.type === \"metric\") {\n <praxis-list-metric\n [metric]=\"secondary(it)\"\n ></praxis-list-metric>\n } @else if (secondary(it)?.type === \"compose\") {\n <praxis-list-compose\n [compose]=\"secondary(it)\"\n ></praxis-list-compose>\n } @else if (secondary(it)?.type === \"component\") {\n <praxis-list-runtime-component\n [component]=\"secondary(it)\"\n ></praxis-list-runtime-component>\n } @else {\n {{ secondary(it)?.value }}\n }\n </div>\n }\n\n @if (meta(it); as m) {\n <div\n class=\"tile-meta\"\n [ngClass]=\"m.class\"\n [style.cssText]=\"m.style\"\n >\n @if (config.templating?.metaPrefixIcon; as mpi) {\n <mat-icon [praxisIcon]=\"mpi\"></mat-icon>\n }\n @switch (m.type) {\n @case (\"chip\") {\n <mat-chip\n [color]=\"isThemeColor(m.color) ? m.color : undefined\"\n [ngClass]=\"\n (m.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(m.color, m.variant)\"\n >{{ m.value }}</mat-chip\n >\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(m);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, m.value)\"\n [color]=\"ratingThemeColor(m)\"\n [style.cssText]=\"ratingIconStyle(m)\"\n ></mat-icon>\n }\n }\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"m.value\"\n [color]=\"isThemeColor(m.color) ? m.color : undefined\"\n [style.cssText]=\"iconStyle(m.color)\"\n ></mat-icon>\n }\n @case (\"image\") {\n <span class=\"inline-image\"\n ><img [src]=\"m.value\" [alt]=\"m.imageAlt || ''\"\n /></span>\n }\n @case (\"html\") {\n <span [innerHTML]=\"m.value\"></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"m\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose\n [compose]=\"m\"\n ></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"m\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span>{{ m.value }}</span>\n }\n }\n </div>\n }\n\n @if (featuresVisible()) {\n <div class=\"tiles-features\">\n @for (\n f of config.templating?.features || [];\n track $index;\n let fi = $index\n ) {\n <span\n class=\"feature\"\n [ngClass]=\"featureSemanticClass(it, f.expr, f.class)\"\n >\n @if (f.icon && featuresMode() !== \"labels-only\") {\n <mat-icon [praxisIcon]=\"f.icon\"></mat-icon>\n }\n @if (featuresMode() !== \"icons-only\") {\n <span [ngClass]=\"f.class\" [style.cssText]=\"f.style\">\n @for (\n line of featureLabelLines(it, f.expr);\n track $index\n ) {\n <span class=\"feature-line\">{{ line }}</span>\n }\n </span>\n }\n @if (\n featureProgressPercent(it, f.expr, f.class);\n as progress\n ) {\n <span class=\"feature-progress\" aria-hidden=\"true\">\n <span\n class=\"feature-progress__value\"\n [style.width.%]=\"progress\"\n ></span>\n </span>\n }\n </span>\n }\n </div>\n }\n\n @if (trailing(it); as tr2) {\n @if (\n !(\n (config.templating?.statusPosition || \"inline\") ===\n \"top-right\" &&\n (tr2?.type === \"chip\" || tr2?.type === \"icon\")\n )\n ) {\n <div\n class=\"tile-trailing\"\n [ngClass]=\"tr2.class\"\n [style.cssText]=\"tr2.style\"\n >\n @switch (tr2.type) {\n @case (\"chip\") {\n <mat-chip\n [color]=\"\n isThemeColor(tr2.color) ? tr2.color : undefined\n \"\n [ngClass]=\"\n (tr2.variant || 'filled') === 'outlined'\n ? 'chip-outlined'\n : ''\n \"\n [style.cssText]=\"chipStyle(tr2.color, tr2.variant)\"\n >{{ tr2.value }}</mat-chip\n >\n }\n @case (\"icon\") {\n <mat-icon\n [praxisIcon]=\"tr2.value\"\n [color]=\"\n isThemeColor(tr2.color) ? tr2.color : undefined\n \"\n [style.cssText]=\"iconStyle(tr2.color)\"\n ></mat-icon>\n }\n @case (\"image\") {\n <span class=\"inline-image\"\n ><img [src]=\"tr2.value\" [alt]=\"tr2.imageAlt || ''\"\n /></span>\n }\n @case (\"rating\") {\n @for (\n _ of ratingRange(tr2);\n track $index;\n let idx = $index\n ) {\n <mat-icon\n [praxisIcon]=\"starIcon(idx, tr2.value)\"\n [color]=\"ratingThemeColor(tr2)\"\n [style.cssText]=\"ratingIconStyle(tr2)\"\n ></mat-icon>\n }\n }\n @case (\"html\") {\n <span [innerHTML]=\"tr2.value\"></span>\n }\n @case (\"metric\") {\n <praxis-list-metric [metric]=\"tr2\"></praxis-list-metric>\n }\n @case (\"compose\") {\n <praxis-list-compose\n [compose]=\"tr2\"\n ></praxis-list-compose>\n }\n @case (\"component\") {\n <praxis-list-runtime-component\n [component]=\"tr2\"\n ></praxis-list-runtime-component>\n }\n @default {\n <span>{{ tr2.value }}</span>\n }\n }\n </div>\n }\n }\n </div>\n\n @if ((visibleActions(it, \"trailing\") || []).length) {\n <div\n class=\"tile-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\"\n >\n @for (\n action of visibleActions(it, \"trailing\");\n let aidx = $index;\n track action?.id ?? $index\n ) {\n @if ((action.kind || \"icon\") === \"icon\") {\n <button\n mat-icon-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n (click)=\"onActionClick($event, action.id, it, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(action.id, it, i),\n }\"\n >\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon\n [praxisIcon]=\"action.icon\"\n [style.cssText]=\"iconStyle(action.color)\"\n ></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === \"stroked\") {\n <button\n mat-stroked-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'stroked')\"\n (click)=\"onActionClick($event, action.id, it, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(action.id, it, i),\n }\"\n >\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (action.buttonVariant === \"raised\") {\n <button\n mat-raised-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'raised')\"\n (click)=\"onActionClick($event, action.id, it, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(action.id, it, i),\n }\"\n >\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n @if (\n !action.buttonVariant || action.buttonVariant === \"flat\"\n ) {\n <button\n mat-flat-button\n [color]=\"\n isThemeColor(action.color) ? action.color : undefined\n \"\n [style.cssText]=\"buttonStyle(action.color, 'flat')\"\n (click)=\"onActionClick($event, action.id, it, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{\n 'action-loading': isActionLoading(action.id, it, i),\n }\"\n >\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner\n class=\"action-spinner\"\n mode=\"indeterminate\"\n diameter=\"16\"\n strokeWidth=\"3\"\n ></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button>\n }\n }\n }\n </div>\n }\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Simple pagination controls for remote data -->\n @if (config.dataSource?.resourcePath) {\n <div class=\"paginator\">\n <div class=\"paginator-controls\">\n <button mat-stroked-button color=\"primary\" (click)=\"prevPage()\">\n Anterior\n </button>\n <button mat-stroked-button color=\"primary\" (click)=\"nextPage()\">\n Próximo\n </button>\n <mat-form-field class=\"paginator-page-size\" appearance=\"outline\">\n <mat-label>Tam. página</mat-label>\n <mat-select\n (selectionChange)=\"setPageSize($event.value)\"\n [value]=\"config.layout?.pageSize || 10\"\n >\n <mat-option [value]=\"6\">6</mat-option>\n <mat-option [value]=\"8\">8</mat-option>\n <mat-option [value]=\"12\">12</mat-option>\n <mat-option [value]=\"24\">24</mat-option>\n </mat-select>\n </mat-form-field>\n @if (config.ui?.showSort) {\n <mat-form-field class=\"paginator-sort\" appearance=\"outline\">\n <mat-label>Ordenar</mat-label>\n <mat-select (selectionChange)=\"onSortChange($event.value)\">\n @for (op of config.ui?.sortOptions || []; track $index) {\n <mat-option [value]=\"sortOptionValue(op)\">{{\n sortOptionLabel(op)\n }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n @if (config.ui?.showSearch && config.ui?.searchField) {\n <mat-form-field class=\"paginator-search\" appearance=\"outline\">\n <mat-label>{{\n config.ui?.searchPlaceholder || \"Buscar\"\n }}</mat-label>\n <input\n matInput\n type=\"search\"\n (input)=\"onSearchInput($any($event.target).value)\"\n />\n </mat-form-field>\n }\n </div>\n <div class=\"paginator-meta\">\n @if (config.ui?.showRange ?? true) {\n @if (page$ | async; as ps) {\n @if (total$ | async; as total) {\n @if (items$ | async; as curr) {\n <span class=\"muted\"\n >{{ (total || 0) > 0 ? rangeStart(ps) : 0 }}–{{\n rangeEnd(curr?.length || 0, ps, total || 0)\n }}\n de {{ total || 0 }}</span\n >\n }\n }\n }\n } @else {\n @if (total$ | async; as total2) {\n <span class=\"muted\">Total: {{ total2 }}</span>\n }\n }\n </div>\n </div>\n }\n </ng-template>\n</div>\n","import { ComponentDocMeta, ComponentMetadataRegistry } from '@praxisui/core';\nimport { ENVIRONMENT_INITIALIZER, Provider } from '@angular/core';\nimport { PraxisList } from './components/praxis-list.component';\n\nexport const PRAXIS_LIST_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'praxis-list',\n selector: 'praxis-list',\n component: PraxisList,\n friendlyName: 'Praxis List',\n description: 'Lista com suporte a seleção (single/multiple), agrupamento e templates.',\n icon: 'checklist',\n inputs: [\n { name: 'config', type: 'PraxisListConfig', description: 'Configuração da lista (fonte de dados, layout, seleção, templates, ações)' },\n { name: 'listId', type: 'string', description: 'Identificador da lista (obrigatório para persistência)' },\n { name: 'componentInstanceId', type: 'string', description: 'Identificador opcional para múltiplas instâncias na mesma rota' },\n { name: 'form', type: 'FormGroup', description: 'FormGroup opcional quando integrado a formulários' },\n { name: 'enableCustomization', type: 'boolean', description: 'Input canônico para habilitar customização runtime, editor e AI assistant' },\n ],\n outputs: [\n { name: 'itemClick', type: 'ListItemEvent', description: 'Clique em item' },\n { name: 'actionClick', type: 'ListActionEvent', description: 'Clique em ação de item' },\n { name: 'selectionChange', type: 'ListSelectionEvent', description: 'Mudança de seleção' },\n ],\n actions: [\n {\n id: 'item-click',\n label: 'Clique no item',\n icon: 'touch_app',\n description: 'Emite evento ao clicar em um item da lista',\n emit: 'itemClick',\n payloadSchema: {\n type: 'object',\n properties: {\n item: { type: 'object', description: 'Item selecionado' },\n index: { type: 'number', description: 'Índice do item' },\n section: { type: 'string', description: 'Seção (quando agrupado)' },\n },\n required: ['item', 'index'],\n example: { item: {}, index: 0 },\n },\n scope: 'any',\n },\n {\n id: 'item-action',\n label: 'Ação do item',\n icon: 'bolt',\n description: 'Emite evento ao acionar uma ação configurada no item',\n emit: 'actionClick',\n payloadSchema: {\n type: 'object',\n properties: {\n actionId: { type: 'string', description: 'ID da ação' },\n item: { type: 'object', description: 'Item de referência' },\n index: { type: 'number', description: 'Índice do item' },\n },\n required: ['actionId', 'item', 'index'],\n example: { actionId: 'edit', item: {}, index: 0 },\n },\n scope: 'context',\n },\n {\n id: 'selection-change',\n label: 'Seleção alterada',\n icon: 'checklist',\n description: 'Emite evento ao mudar a seleção',\n emit: 'selectionChange',\n payloadSchema: {\n type: 'object',\n properties: {\n mode: { type: 'string', description: 'Modo de seleção' },\n value: { type: 'object', description: 'Valor selecionado' },\n items: { type: 'array', description: 'Itens selecionados' },\n ids: { type: 'array', description: 'IDs selecionados' },\n },\n required: ['mode', 'value', 'items'],\n example: { mode: 'single', value: {}, items: [], ids: [1] },\n },\n scope: 'any',\n },\n ],\n tags: ['widget', 'list', 'selection', 'configurable'],\n lib: '@praxisui/list',\n};\n\nexport function providePraxisListMetadata(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (registry: ComponentMetadataRegistry) => () => {\n registry.register(PRAXIS_LIST_COMPONENT_METADATA);\n },\n deps: [ComponentMetadataRegistry],\n } as Provider;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n signal,\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { of } from 'rxjs';\n\nimport {\n API_URL,\n ASYNC_CONFIG_STORAGE,\n AsyncConfigStorage,\n} from '@praxisui/core';\nimport { SETTINGS_PANEL_DATA } from '@praxisui/settings-panel';\n\nimport { PraxisList } from '../components/praxis-list.component';\nimport { PraxisListSkinPreviewComponent } from '../components/list-skin-preview.component';\nimport type {\n ListActionEvent,\n ListItemEvent,\n ListSelectionEvent,\n PraxisListConfig,\n} from '../models/list-config.model';\nimport type { ExecutiveAlert } from '../components/executive/executive-alerts.component';\n\ntype DemoScenario = 'operations' | 'executive-expansion' | 'catalog' | 'empty';\ntype DemoVariant = 'list' | 'cards' | 'tiles';\ntype DemoDensity = 'default' | 'comfortable' | 'compact';\ntype DemoFeaturesMode = 'icons+labels' | 'icons-only' | 'labels-only';\ntype DemoSelectionMode = 'none' | 'single' | 'multiple';\ntype DemoSkin =\n | 'elevated'\n | 'outline'\n | 'flat'\n | 'neumorphism'\n | 'pill-soft'\n | 'glass'\n | 'gradient-tile'\n | 'custom';\ntype CodeTab = 'template' | 'ts' | 'config' | 'remote';\n\ninterface ScenarioOption {\n id: DemoScenario;\n label: string;\n helper: string;\n}\n\ninterface VariantOption {\n id: DemoVariant;\n label: string;\n}\n\ninterface DensityOption {\n id: DemoDensity;\n label: string;\n}\n\ninterface FeaturesModeOption {\n id: DemoFeaturesMode;\n label: string;\n}\n\ninterface SelectionModeOption {\n id: DemoSelectionMode;\n label: string;\n}\n\ninterface SkinOption {\n id: DemoSkin;\n label: string;\n}\n\ninterface CodeTabOption {\n id: CodeTab;\n label: string;\n}\n\ninterface CoverageTopic {\n title: string;\n details: string;\n}\n\ninterface EventLogEntry {\n id: number;\n message: string;\n}\n\ninterface DemoItem {\n id: number;\n title: string;\n subtitle: string;\n department: string;\n status: string;\n statusIcon: string;\n priority: string;\n budget: number;\n updatedAt: string;\n rating: number;\n owner: string;\n city: string;\n trend: string;\n cover: string;\n accountCode?: string;\n balanceDisplay?: string;\n limitDisplay?: string;\n usageLabel?: string;\n usagePercent?: number;\n riskDisplay?: string;\n riskLabel?: string;\n // Structured data for component-based rendering\n segmentVariant?: 'enterprise' | 'corporate' | 'middle';\n segmentLabel?: string;\n accountType?: string;\n since?: number;\n alertsData?: ExecutiveAlert[];\n ownerName?: string;\n executiveMarkerIcon?: string;\n riskIcon?: string;\n // Legacy fields\n alerts?: Array<{ title: string; value: string }>;\n products?: string[];\n events?: Array<{ title: string; meta: string; description: string }>;\n}\n\nclass ListDocMemoryStorage implements AsyncConfigStorage {\n private readonly map = new Map<string, unknown>();\n\n loadConfig<T>(key: string) {\n return of((this.map.get(key) as T | null) ?? null);\n }\n\n saveConfig<T>(key: string, config: T) {\n this.map.set(key, config);\n return of(void 0);\n }\n\n clearConfig(key: string) {\n this.map.delete(key);\n return of(void 0);\n }\n}\n\nfunction createDemoCover(label: string, from: string, to: string): string {\n const svg = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"360\" height=\"220\" viewBox=\"0 0 360 220\">\n <defs>\n <linearGradient id=\"g\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"${from}\" />\n <stop offset=\"100%\" stop-color=\"${to}\" />\n </linearGradient>\n </defs>\n <rect width=\"360\" height=\"220\" fill=\"url(#g)\" />\n <rect x=\"18\" y=\"18\" width=\"324\" height=\"184\" rx=\"18\" fill=\"rgba(255,255,255,0.14)\" />\n <text x=\"180\" y=\"124\" text-anchor=\"middle\" font-size=\"24\" font-family=\"Verdana, sans-serif\" fill=\"#ffffff\">${label}</text>\n</svg>`;\n return `data:image/svg+xml;utf8,${encodeURIComponent(svg.trim())}`;\n}\n\nconst OPERATIONS_ITEMS: DemoItem[] = [\n {\n id: 101,\n title: 'Pipeline de release financeiro',\n subtitle: 'Validacao de compliance e aprovacao final',\n department: 'Operacoes',\n status: 'done',\n statusIcon: 'task_alt',\n priority: 'P1',\n budget: 125000,\n updatedAt: '2026-02-21T10:20:00.000Z',\n rating: 4.8,\n owner: 'Squad Ledger',\n city: 'Sao Paulo',\n trend: 'up',\n cover: createDemoCover('OPS 1', '#2f80ed', '#56ccf2'),\n },\n {\n id: 102,\n title: 'Migracao de catalogo de contratos',\n subtitle: 'Sincronizacao com motores de busca',\n department: 'Operacoes',\n status: 'risk',\n statusIcon: 'warning',\n priority: 'P0',\n budget: 92000,\n updatedAt: '2026-02-20T15:10:00.000Z',\n rating: 3.9,\n owner: 'Squad Contract',\n city: 'Recife',\n trend: 'down',\n cover: createDemoCover('OPS 2', '#f2994a', '#f2c94c'),\n },\n {\n id: 103,\n title: 'Ajuste de billing internacional',\n subtitle: 'Conversao e arredondamento por moeda',\n department: 'Financeiro',\n status: 'done',\n statusIcon: 'paid',\n priority: 'P2',\n budget: 61000,\n updatedAt: '2026-02-19T08:00:00.000Z',\n rating: 4.5,\n owner: 'Squad Billing',\n city: 'Curitiba',\n trend: 'up',\n cover: createDemoCover('FIN 1', '#7f53ac', '#647dee'),\n },\n {\n id: 104,\n title: 'Auditoria de trilhas de acesso',\n subtitle: 'Hardening de logs e trilhas sensiveis',\n department: 'Seguranca',\n status: 'watch',\n statusIcon: 'visibility',\n priority: 'P1',\n budget: 77000,\n updatedAt: '2026-02-18T18:30:00.000Z',\n rating: 4.1,\n owner: 'Squad Guard',\n city: 'Porto Alegre',\n trend: 'up',\n cover: createDemoCover('SEC 1', '#1d976c', '#93f9b9'),\n },\n {\n id: 105,\n title: 'Programa de retencao de clientes',\n subtitle: 'Segmentacao e campanha omnichannel',\n department: 'Comercial',\n status: 'paused',\n statusIcon: 'pause_circle',\n priority: 'P3',\n budget: 44000,\n updatedAt: '2026-02-17T11:35:00.000Z',\n rating: 3.6,\n owner: 'Squad Growth',\n city: 'Fortaleza',\n trend: 'flat',\n cover: createDemoCover('COM 1', '#ee0979', '#ff6a00'),\n },\n {\n id: 106,\n title: 'Portal self-service de suporte',\n subtitle: 'Base de conhecimento e roteamento',\n department: 'Produto',\n status: 'done',\n statusIcon: 'bolt',\n priority: 'P2',\n budget: 86000,\n updatedAt: '2026-02-16T14:40:00.000Z',\n rating: 4.7,\n owner: 'Squad Experience',\n city: 'Belo Horizonte',\n trend: 'up',\n cover: createDemoCover('PRD 1', '#159957', '#155799'),\n },\n];\n\nconst CATALOG_ITEMS: DemoItem[] = [\n {\n id: 201,\n title: 'Hotel Aurora Premium',\n subtitle: 'Vista panoramica e cafe incluso',\n department: 'Premium',\n status: 'available',\n statusIcon: 'check_circle',\n priority: 'Top',\n budget: 980,\n updatedAt: '2026-02-22T08:00:00.000Z',\n rating: 4.9,\n owner: 'Rede Aurora',\n city: 'Rio de Janeiro',\n trend: 'up',\n cover: createDemoCover('AURORA', '#4a00e0', '#8e2de2'),\n },\n {\n id: 202,\n title: 'Urban Loft Collection',\n subtitle: 'Arquitetura moderna perto do centro',\n department: 'Design',\n status: 'last_rooms',\n statusIcon: 'priority_high',\n priority: 'Popular',\n budget: 640,\n updatedAt: '2026-02-21T09:30:00.000Z',\n rating: 4.4,\n owner: 'Loft Group',\n city: 'Florianopolis',\n trend: 'flat',\n cover: createDemoCover('URBAN', '#00b09b', '#96c93d'),\n },\n {\n id: 203,\n title: 'Skyline Business Residence',\n subtitle: 'Workstation no quarto e transfer',\n department: 'Business',\n status: 'sold_out',\n statusIcon: 'block',\n priority: 'Agenda cheia',\n budget: 720,\n updatedAt: '2026-02-20T14:45:00.000Z',\n rating: 4.2,\n owner: 'Skyline Corp',\n city: 'Campinas',\n trend: 'down',\n cover: createDemoCover('SKY', '#355c7d', '#6c5b7b'),\n },\n];\n\nconst EXECUTIVE_EXPANSION_ITEMS: DemoItem[] = [\n {\n id: 301,\n accountCode: 'VO',\n title: 'Grupo Votorantim S.A.',\n subtitle: 'Enterprise · Conta Corrente · Desde 2008',\n department: 'Executive portfolio',\n status: 'low',\n statusIcon: 'shield',\n priority: 'Baixo risco',\n budget: 84500000,\n updatedAt: '2026-04-02T10:00:00.000Z',\n rating: 4.8,\n owner: 'Ana Carolina',\n city: 'Sao Paulo',\n trend: 'stable',\n cover: createDemoCover('VW', '#163d7a', '#2a6fc1'),\n // Structured data for components\n segmentVariant: 'enterprise',\n segmentLabel: 'Enterprise',\n accountType: 'Conta Corrente',\n since: 2008,\n executiveMarkerIcon: 'workspace_premium',\n riskIcon: 'trending_down',\n alertsData: [{ type: 'warning', count: 1 }],\n ownerName: 'Ana Carolina',\n balanceDisplay: 'R$ 84.5M',\n limitDisplay: 'R$ 45.0M',\n usageLabel: '25% usado',\n usagePercent: 25,\n riskDisplay: '18',\n riskLabel: 'Baixo',\n alerts: [\n {\n title: 'Renovacao de linha em 15 dias',\n value: '',\n },\n ],\n products: [\n 'Credito Rotativo',\n 'Cambio',\n 'Investimentos',\n 'Cash Management',\n ],\n events: [\n {\n title: '02/04/2026',\n meta: '',\n description: 'Vencimento CDB R$ 5M',\n },\n {\n title: '10/04/2026',\n meta: '',\n description: 'Renovacao de linha de credito',\n },\n ],\n },\n {\n id: 302,\n accountCode: 'TE',\n title: 'TechNova Solutions LT...',\n subtitle: 'Middle Market · Conta Corrente · Desde 2019',\n department: 'Executive portfolio',\n status: 'low',\n statusIcon: 'monitor_heart',\n priority: 'Baixo risco',\n budget: 3200000,\n updatedAt: '2026-04-05T11:30:00.000Z',\n rating: 4.4,\n owner: 'Carlos Eduardo',\n city: 'Sao Paulo',\n trend: 'up',\n cover: createDemoCover('TE', '#215f85', '#4aa3c9'),\n // Structured data for components\n segmentVariant: 'middle',\n segmentLabel: 'Middle Market',\n accountType: 'Conta Corrente',\n since: 2019,\n executiveMarkerIcon: 'stars',\n riskIcon: 'trending_down',\n alertsData: [{ type: 'warning', count: 1 }],\n ownerName: 'Carlos Eduardo',\n balanceDisplay: 'R$ 3.2M',\n limitDisplay: 'R$ 1.5M',\n usageLabel: '25% usado',\n usagePercent: 25,\n riskDisplay: '42',\n riskLabel: 'Baixo',\n alerts: [\n {\n title: 'Renovacao de convenio em 7 dias',\n value: '',\n },\n ],\n products: ['Conta garantida', 'Cambio', 'Recebiveis'],\n events: [\n {\n title: '05/04/2026',\n meta: '',\n description: 'Revisao de limite com tesouraria',\n },\n ],\n },\n {\n id: 303,\n accountCode: 'AG',\n title: 'Construtora Andrade ...',\n subtitle: 'Enterprise · Escrow · Desde 2005',\n department: 'Executive portfolio',\n status: 'medium',\n statusIcon: 'construction',\n priority: 'Medio',\n budget: 127000000,\n updatedAt: '2026-04-07T09:10:00.000Z',\n rating: 4.2,\n owner: 'Ana Carolina',\n city: 'Sao Paulo',\n trend: 'up',\n cover: createDemoCover('AG', '#8f5a1f', '#d08a12'),\n // Structured data for components\n segmentVariant: 'enterprise',\n segmentLabel: 'Enterprise',\n accountType: 'Escrow',\n since: 2005,\n executiveMarkerIcon: 'workspace_premium',\n riskIcon: 'trending_flat',\n alertsData: [\n { type: 'critical', count: 1 },\n { type: 'warning', count: 1 }\n ],\n ownerName: 'Ana Carolina',\n balanceDisplay: 'R$ 127.0M',\n limitDisplay: 'R$ 30.0M',\n usageLabel: '63% usado',\n usagePercent: 63,\n riskDisplay: '65',\n riskLabel: 'Medio',\n alerts: [\n {\n title: 'Documentacao fiscal pendente',\n value: 'Pendencia monitorada pela celula de compliance.',\n },\n ],\n products: ['Escrow', 'Garantias', 'Capital de giro'],\n events: [\n {\n title: '08/04/2026',\n meta: '',\n description: 'Comite extraordinario de limite',\n },\n ],\n },\n {\n id: 304,\n accountCode: 'RE',\n title: 'Lojas Renner S.A.',\n subtitle: 'Corporate · Conta Corrente · Desde 2012',\n department: 'Executive portfolio',\n status: 'low',\n statusIcon: 'storefront',\n priority: 'Baixo',\n budget: 52000000,\n updatedAt: '2026-04-03T13:20:00.000Z',\n rating: 4.6,\n owner: 'Roberto Lima',\n city: 'Sao Paulo',\n trend: 'up',\n cover: createDemoCover('RE', '#385d90', '#7297cb'),\n segmentVariant: 'corporate',\n segmentLabel: 'Corporate',\n accountType: 'Conta Corrente',\n since: 2012,\n executiveMarkerIcon: 'stars',\n riskIcon: 'trending_down',\n ownerName: 'Roberto Lima',\n alertsData: [],\n balanceDisplay: 'R$ 52.0M',\n limitDisplay: 'R$ 28.0M',\n usageLabel: '20% usado',\n usagePercent: 20,\n riskDisplay: '25',\n riskLabel: 'Baixo',\n alerts: [],\n products: ['Cash Management', 'Folha', 'Investimentos'],\n events: [],\n },\n {\n id: 305,\n accountCode: 'VE',\n title: 'Verde Agro Participaç...',\n subtitle: 'Corporate · Garantia · Desde 2017',\n department: 'Executive portfolio',\n status: 'high',\n statusIcon: 'agriculture',\n priority: 'Alto',\n budget: 18500000,\n updatedAt: '2026-04-06T16:45:00.000Z',\n rating: 4.1,\n owner: 'Roberto Lima',\n city: 'Sao Paulo',\n trend: 'down',\n cover: createDemoCover('VE', '#7a2e2b', '#c63b32'),\n segmentVariant: 'corporate',\n segmentLabel: 'Corporate',\n accountType: 'Garantia',\n since: 2017,\n executiveMarkerIcon: 'trip_origin',\n riskIcon: 'show_chart',\n ownerName: 'Roberto Lima',\n alertsData: [\n { type: 'critical', count: 1 },\n { type: 'warning', count: 2 },\n ],\n balanceDisplay: 'R$ 18.5M',\n limitDisplay: 'R$ 2.0M',\n usageLabel: '83% usado',\n usagePercent: 83,\n riskDisplay: '88',\n riskLabel: 'Alto',\n alerts: [\n {\n title: 'Garantia em revisao juridica',\n value: 'Necessario reequilibrar colateral ate o proximo vencimento.',\n },\n ],\n products: ['Garantias', 'Cambio'],\n events: [\n {\n title: '12/04/2026',\n meta: '',\n description: 'Follow-up com juridico e mesa de risco',\n },\n ],\n },\n {\n id: 306,\n accountCode: 'F&',\n title: 'Ferreira & Lima Advog...',\n subtitle: 'Middle Market · Conta Corrente · Desde 2022',\n department: 'Executive portfolio',\n status: 'low',\n statusIcon: 'gavel',\n priority: 'Baixo',\n budget: 980000,\n updatedAt: '2026-04-01T10:15:00.000Z',\n rating: 4.0,\n owner: 'Carlos Eduardo',\n city: 'Sao Paulo',\n trend: 'up',\n cover: createDemoCover('F&', '#1f4c63', '#4c89a8'),\n segmentVariant: 'middle',\n segmentLabel: 'Middle Market',\n accountType: 'Conta Corrente',\n since: 2022,\n executiveMarkerIcon: 'trip_origin',\n riskIcon: 'trending_down',\n ownerName: 'Carlos Eduardo',\n alertsData: [],\n balanceDisplay: 'R$ 980K',\n limitDisplay: 'R$ 500K',\n usageLabel: '0% usado',\n usagePercent: 0,\n riskDisplay: '32',\n riskLabel: 'Baixo',\n alerts: [],\n products: ['Conta corrente', 'Cartao corporativo'],\n events: [],\n },\n {\n id: 307,\n accountCode: 'EM',\n title: 'Embraer S.A.',\n subtitle: 'Enterprise · Investimento · Desde 2001',\n department: 'Executive portfolio',\n status: 'low',\n statusIcon: 'flight',\n priority: 'Baixo',\n budget: 340000000,\n updatedAt: '2026-04-08T08:40:00.000Z',\n rating: 4.9,\n owner: 'Ana Carolina',\n city: 'Sao Paulo',\n trend: 'up',\n cover: createDemoCover('EM', '#204d7a', '#5d9dd9'),\n segmentVariant: 'enterprise',\n segmentLabel: 'Enterprise',\n accountType: 'Investimento',\n since: 2001,\n executiveMarkerIcon: 'workspace_premium',\n riskIcon: 'trending_down',\n ownerName: 'Ana Carolina',\n alertsData: [],\n balanceDisplay: 'R$ 340.0M',\n limitDisplay: 'R$ 120.0M',\n usageLabel: '20% usado',\n usagePercent: 20,\n riskDisplay: '12',\n riskLabel: 'Baixo',\n alerts: [],\n products: ['Investimentos', 'Cambio', 'Derivativos'],\n events: [],\n },\n];\n\n@Component({\n selector: 'praxis-list-doc-page',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n PraxisList,\n PraxisListSkinPreviewComponent,\n ],\n templateUrl: './praxis-list-doc-page.component.html',\n styleUrl: './praxis-list-doc-page.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: API_URL, useValue: { default: { baseUrl: '/api' } } },\n {\n provide: ASYNC_CONFIG_STORAGE,\n useFactory: () => new ListDocMemoryStorage(),\n },\n { provide: SETTINGS_PANEL_DATA, useValue: {} },\n ],\n})\nexport class PraxisListDocPageComponent {\n readonly form = new FormGroup({\n selectedItems: new FormControl<unknown[] | unknown | null>(null),\n });\n\n readonly scenario = signal<DemoScenario>('operations');\n readonly variant = signal<DemoVariant>('list');\n readonly density = signal<DemoDensity>('comfortable');\n readonly lines = signal<1 | 2 | 3>(2);\n readonly skin = signal<DemoSkin>('elevated');\n readonly featuresMode = signal<DemoFeaturesMode>('icons+labels');\n readonly selectionMode = signal<DemoSelectionMode>('multiple');\n readonly customizationEnabled = signal(false);\n readonly activeTab = signal<CodeTab>('template');\n readonly eventLog = signal<EventLogEntry[]>([]);\n private nextLogId = 1;\n\n readonly scenarioOptions: ReadonlyArray<ScenarioOption> = [\n {\n id: 'operations',\n label: 'Operacoes',\n helper: 'Agrupamento + acoes + selecao',\n },\n {\n id: 'executive-expansion',\n label: 'Executive expansion',\n helper: 'Linha executiva com detail row inline baseada nas referencias',\n },\n {\n id: 'catalog',\n label: 'Catalogo',\n helper: 'Cards/Tiles com status overlay',\n },\n {\n id: 'empty',\n label: 'Sem dados',\n helper: 'Empty state e contrato visual',\n },\n ];\n\n readonly variantOptions: ReadonlyArray<VariantOption> = [\n { id: 'list', label: 'List' },\n { id: 'cards', label: 'Cards' },\n { id: 'tiles', label: 'Tiles' },\n ];\n\n readonly densityOptions: ReadonlyArray<DensityOption> = [\n { id: 'default', label: 'Default' },\n { id: 'comfortable', label: 'Comfortable' },\n { id: 'compact', label: 'Compact' },\n ];\n\n readonly featuresModeOptions: ReadonlyArray<FeaturesModeOption> = [\n { id: 'icons+labels', label: 'Icons + labels' },\n { id: 'icons-only', label: 'Somente icons' },\n { id: 'labels-only', label: 'Somente labels' },\n ];\n\n readonly selectionOptions: ReadonlyArray<SelectionModeOption> = [\n { id: 'none', label: 'Sem selecao' },\n { id: 'single', label: 'Single' },\n { id: 'multiple', label: 'Multiple' },\n ];\n\n readonly skinOptions: ReadonlyArray<SkinOption> = [\n { id: 'elevated', label: 'Elevated' },\n { id: 'outline', label: 'Outline' },\n { id: 'flat', label: 'Flat' },\n { id: 'neumorphism', label: 'Neumorphism' },\n { id: 'pill-soft', label: 'Pill soft' },\n { id: 'glass', label: 'Glass' },\n { id: 'gradient-tile', label: 'Gradient tile' },\n { id: 'custom', label: 'Custom' },\n ];\n\n readonly codeTabs: ReadonlyArray<CodeTabOption> = [\n { id: 'template', label: 'Template' },\n { id: 'ts', label: 'TypeScript' },\n { id: 'config', label: 'Config JSON' },\n { id: 'remote', label: 'Contrato remoto' },\n ];\n\n readonly featureCoverage: ReadonlyArray<CoverageTopic> = [\n {\n title: 'Layout',\n details: 'list, cards, tiles; density, lines, model e dividers.',\n },\n {\n title: 'Templating',\n details:\n 'leading, primary, secondary, meta, trailing, sectionHeader e emptyState.',\n },\n {\n title: 'Tipos de template',\n details: 'text, icon, image, chip, rating, currency, date e html.',\n },\n {\n title: 'Acoes',\n details: 'icon/button, showIf, loading state e emissao de eventos.',\n },\n {\n title: 'Selecao',\n details: 'single/multiple/none com binding externo de FormControl.',\n },\n {\n title: 'Skins',\n details:\n 'elevated, outline, flat, neumorphism, pill-soft, glass, gradient-tile e custom CSS vars.',\n },\n {\n title: 'Acessibilidade',\n details: 'aria-label e navegacao de teclado para item/list/card/tile.',\n },\n {\n title: 'Expansao inline',\n details:\n 'interaction.expandable, triggers por row/icon e secoes tipadas de detalhe.',\n },\n {\n title: 'Operacao',\n details:\n 'persistencia por listId, pagina/sort/search e contrato resourcePath.',\n },\n ];\n\n readonly liveItems = computed<DemoItem[]>(() => {\n if (this.scenario() === 'catalog') {\n return CATALOG_ITEMS;\n }\n if (this.scenario() === 'executive-expansion') {\n return EXECUTIVE_EXPANSION_ITEMS;\n }\n if (this.scenario() === 'empty') {\n return [];\n }\n return OPERATIONS_ITEMS;\n });\n\n readonly activeScenarioMeta = computed(\n () =>\n this.scenarioOptions.find((entry) => entry.id === this.scenario()) ||\n null,\n );\n\n readonly liveConfig = computed<PraxisListConfig>(() => {\n const scenario = this.scenario();\n const isCatalog = scenario === 'catalog';\n const isExecutiveExpansion = scenario === 'executive-expansion';\n const variant = this.variant();\n const activeLines = this.lines();\n const isSelection =\n !isExecutiveExpansion && this.selectionMode() !== 'none';\n\n return {\n id: 'praxis-list-doc-live',\n dataSource: {\n data: this.liveItems(),\n resourcePath: isExecutiveExpansion ? undefined : 'docs/list',\n sort: [isCatalog ? 'rating,desc' : 'budget,desc'],\n },\n layout: {\n variant: isExecutiveExpansion ? 'list' : variant,\n density: this.density(),\n lines: isExecutiveExpansion ? 2 : activeLines,\n dividers:\n isExecutiveExpansion || variant === 'list' ? 'between' : 'none',\n model: isCatalog ? 'hotel' : 'media',\n groupBy:\n !isCatalog &&\n !isExecutiveExpansion &&\n scenario !== 'empty' &&\n variant === 'list'\n ? 'department'\n : undefined,\n pageSize: 8,\n rowLayout: isExecutiveExpansion\n ? {\n type: 'grid',\n gap: '12px',\n align: 'center',\n class: 'exec-row-layout',\n columns: [\n { slot: 'leading', width: '56px', align: 'center' },\n { slot: 'identity', minWidth: '332px' },\n {\n slot: 'balance',\n width: '132px',\n justify: 'center',\n align: 'center',\n },\n {\n slot: 'limit',\n width: '172px',\n justify: 'center',\n align: 'center',\n },\n {\n slot: 'risk',\n width: '104px',\n justify: 'center',\n align: 'center',\n },\n {\n slot: 'alerts',\n width: '78px',\n justify: 'center',\n align: 'center',\n },\n {\n slot: 'owner',\n width: '154px',\n justify: 'start',\n align: 'center',\n },\n {\n slot: 'actions',\n width: '64px',\n justify: 'end',\n align: 'center',\n },\n {\n slot: 'expand',\n width: '28px',\n justify: 'center',\n align: 'center',\n },\n ],\n }\n : undefined,\n },\n skin: this.buildSkinConfig(),\n selection: isSelection\n ? {\n mode: this.selectionMode(),\n formControlName: 'selectedItems',\n compareBy: 'id',\n return: 'id',\n }\n : { mode: 'none' },\n interaction: isExecutiveExpansion\n ? {\n expandable: true,\n expandTrigger: 'row+icon',\n expandMode: 'single',\n expandPlacement: 'expand',\n }\n : undefined,\n templating: this.buildTemplatingConfig(isCatalog),\n expansion: isExecutiveExpansion\n ? {\n sections: [\n {\n id: 'alerts',\n title: 'Alertas',\n type: 'info-list',\n itemsExpr: '${item.alerts}',\n emptyLabel: 'Nenhum alerta em aberto',\n },\n {\n id: 'products',\n title: 'Produtos contratados',\n type: 'chip-list',\n itemsExpr: '${item.products}',\n emptyLabel: 'Nenhum produto cadastrado',\n },\n {\n id: 'events',\n title: 'Proximos eventos',\n type: 'timeline',\n itemsExpr: '${item.events}',\n emptyLabel: 'Nenhum evento programado',\n },\n ],\n }\n : undefined,\n rules: isExecutiveExpansion\n ? {\n itemStyles: [\n {\n id: 'executive-medium',\n condition: \"${item.status === 'medium'}\",\n border: '1px solid #f0d4b3',\n },\n {\n id: 'executive-high',\n condition: \"${item.status === 'high'}\",\n border: '1px solid #efc1bf',\n },\n ],\n }\n : undefined,\n actions: isExecutiveExpansion\n ? [\n {\n id: 'view-account',\n icon: 'visibility',\n label: 'Ver conta',\n color: '#6d7f93',\n placement: 'actions',\n },\n {\n id: 'open-briefing',\n icon: 'more_horiz',\n label: 'Abrir menu',\n color: '#6d7f93',\n placement: 'actions',\n },\n ]\n : [\n {\n id: 'open',\n icon: 'open_in_new',\n label: 'Abrir',\n color: 'primary',\n },\n {\n id: 'approve',\n icon: 'check_circle',\n label: 'Aprovar',\n kind: 'button',\n buttonVariant: 'stroked',\n color: '#0a7f44',\n showIf: \"${item.status} == 'risk'\",\n },\n {\n id: 'archive',\n icon: 'archive',\n label: 'Arquivar',\n kind: 'button',\n buttonVariant: 'flat',\n color: '#415161',\n },\n ],\n i18n: {\n locale: 'pt-BR',\n currency: 'BRL',\n },\n ui: {\n showSearch: !isExecutiveExpansion,\n searchField: 'title',\n searchPlaceholder: isExecutiveExpansion\n ? undefined\n : 'Buscar por titulo',\n showSort: !isExecutiveExpansion,\n sortOptions: [\n { label: 'Budget desc', value: 'budget,desc' },\n { label: 'Budget asc', value: 'budget,asc' },\n { label: 'Updated desc', value: 'updatedAt,desc' },\n { label: 'Rating desc', value: 'rating,desc' },\n ],\n showRange: !isExecutiveExpansion,\n },\n a11y: {\n ariaLabel: 'Documentacao viva do Praxis List',\n },\n };\n });\n\n readonly skinPreviewItems = CATALOG_ITEMS.slice(0, 2);\n\n readonly skinPreviewConfigs = computed(() =>\n (\n [\n 'elevated',\n 'outline',\n 'flat',\n 'neumorphism',\n 'pill-soft',\n 'glass',\n 'gradient-tile',\n 'custom',\n ] as DemoSkin[]\n ).map((type) => ({\n type,\n config: {\n ...this.liveConfig(),\n layout: {\n ...(this.liveConfig().layout || {}),\n variant: 'cards',\n lines: 2,\n density: 'compact',\n model: 'hotel',\n groupBy: undefined,\n },\n selection: { mode: 'none' },\n dataSource: { data: this.skinPreviewItems },\n skin: this.buildSkinConfig(type),\n } satisfies PraxisListConfig,\n })),\n );\n\n readonly configPreview = computed(() => {\n const clone = JSON.parse(\n JSON.stringify(this.liveConfig()),\n ) as PraxisListConfig;\n if (clone.dataSource?.data) {\n clone.dataSource.data = [\n `<${clone.dataSource.data.length} itens locais>`,\n ] as any;\n }\n return JSON.stringify(clone, null, 2);\n });\n\n readonly selectedSnippet = computed(() => {\n switch (this.activeTab()) {\n case 'template':\n return this.templateSnippet;\n case 'ts':\n return this.tsSnippet;\n case 'config':\n return this.configPreview();\n case 'remote':\n return this.remoteSnippet;\n default:\n return this.templateSnippet;\n }\n });\n\n readonly templateSnippet = `<praxis-list-doc-page></praxis-list-doc-page>`;\n\n readonly tsSnippet = `import { Component } from '@angular/core';\nimport { PraxisListDocPageComponent } from '@praxisui/list';\n\n@Component({\n selector: 'app-list-doc',\n standalone: true,\n imports: [PraxisListDocPageComponent],\n template: '<praxis-list-doc-page />',\n})\nexport class ListDocHostComponent {}`;\n\n readonly remoteSnippet = `const config = {\n id: 'employees-remote',\n dataSource: {\n resourcePath: 'employees',\n query: { active: true },\n sort: ['updatedAt,desc']\n },\n layout: { variant: 'list', pageSize: 12, lines: 2 },\n templating: {\n primary: { type: 'text', expr: '\\${item.name}' },\n secondary: { type: 'text', expr: '\\${item.role}' },\n meta: { type: 'date', expr: '\\${item.updatedAt}|pt-BR:short' },\n trailing: { type: 'chip', expr: '\\${item.status}' }\n },\n ui: {\n showSearch: true,\n searchField: 'name',\n showSort: true,\n sortOptions: [{ label: 'Nome A-Z', value: 'name,asc' }]\n }\n} as const;`;\n\n setScenario(next: DemoScenario): void {\n this.scenario.set(next);\n if (next === 'catalog' && this.variant() === 'list') {\n this.variant.set('cards');\n }\n if (next === 'executive-expansion') {\n this.variant.set('list');\n this.selectionMode.set('none');\n this.lines.set(2);\n }\n if (next === 'operations' && this.variant() === 'tiles') {\n this.variant.set('list');\n }\n this.form.controls.selectedItems.setValue(null);\n this.pushLog(`cenario -> ${next}`);\n }\n\n setVariant(next: DemoVariant): void {\n if (this.scenario() === 'executive-expansion' && next !== 'list') {\n this.pushLog('variant -> ignored for executive-expansion');\n return;\n }\n this.variant.set(next);\n this.pushLog(`variant -> ${next}`);\n }\n\n setDensity(next: DemoDensity): void {\n this.density.set(next);\n }\n\n setLines(next: 1 | 2 | 3): void {\n if (this.isExecutiveExpansionScenario()) return;\n this.lines.set(next);\n }\n\n setSkin(next: DemoSkin): void {\n this.skin.set(next);\n }\n\n setFeaturesMode(next: DemoFeaturesMode): void {\n this.featuresMode.set(next);\n }\n\n setSelectionMode(next: DemoSelectionMode): void {\n if (this.isExecutiveExpansionScenario()) return;\n this.selectionMode.set(next);\n this.form.controls.selectedItems.setValue(next === 'multiple' ? [] : null);\n }\n\n setCodeTab(next: CodeTab): void {\n this.activeTab.set(next);\n }\n\n setCustomizationMode(enabled: boolean): void {\n this.customizationEnabled.set(enabled);\n this.pushLog(`customization -> ${enabled ? 'on' : 'off'}`);\n }\n\n clearLog(): void {\n this.eventLog.set([]);\n }\n\n handleItemClick(event: ListItemEvent): void {\n this.pushLog(\n `itemClick -> #${event.item?.id} (${event.item?.title || 'sem titulo'})`,\n );\n }\n\n handleActionClick(event: ListActionEvent): void {\n this.pushLog(`actionClick -> ${event.actionId} em #${event.item?.id}`);\n }\n\n handleSelectionChange(event: ListSelectionEvent): void {\n const total = event.items?.length || 0;\n this.pushLog(`selectionChange -> mode=${event.mode}, total=${total}`);\n }\n\n isExecutiveExpansionScenario(): boolean {\n return this.scenario() === 'executive-expansion';\n }\n\n private buildSkinConfig(typeOverride?: DemoSkin): PraxisListConfig['skin'] {\n if (this.scenario() === 'executive-expansion' && !typeOverride) {\n return {\n type: 'custom',\n class: 'executive-inline-skin',\n radius: '20px',\n border: '1px solid #dde6f0',\n shadow: '0 10px 24px rgba(15, 34, 58, 0.08)',\n inlineStyle:\n ':host{--p-list-item-surface:#ffffff; --p-list-item-hover-surface:#f7fafc; --p-list-item-active-surface:#eef4f8; --p-list-item-selected-surface:#eef4f8; --p-list-foreground:#17324d; --p-list-foreground-muted:#72849a;}',\n };\n }\n const type = typeOverride || this.skin();\n if (type === 'custom') {\n return {\n type: 'custom',\n class: 'docs-custom-skin',\n radius: '22px',\n border: '1px solid color-mix(in srgb, #0b6dff 35%, #bcc7d4)',\n shadow: '0 10px 26px rgba(11, 54, 107, 0.18)',\n inlineStyle:\n ':host{--p-list-item-surface: color-mix(in srgb, #0b6dff 7%, #ffffff); --p-list-meta-size: 0.9rem;}',\n };\n }\n return {\n type,\n radius: '18px',\n gradient: {\n from: '#174ea6',\n to: '#0f9d58',\n angle: 122,\n },\n backdropBlur: '12px',\n };\n }\n\n private buildTemplatingConfig(\n isCatalog: boolean,\n ): PraxisListConfig['templating'] {\n if (isCatalog) {\n return {\n leading: {\n type: 'image',\n expr: '${item.cover}',\n imageAlt: 'Imagem do catalogo',\n badge: {\n expr: '${item.priority}',\n color: 'primary',\n variant: 'outlined',\n },\n },\n primary: {\n type: 'text',\n expr: '${item.title}',\n },\n secondary: {\n type: 'html',\n expr: '<strong>${item.city}</strong> - ${item.subtitle}',\n },\n meta: {\n type: 'rating',\n expr: '${item.rating}',\n props: {\n rating: {\n max: 5,\n size: 16,\n color: '#f4b400',\n },\n },\n },\n trailing: {\n type: 'chip',\n expr: '${item.status}',\n variant: 'filled',\n },\n metaPlacement: 'line',\n statusPosition: this.variant() === 'list' ? 'inline' : 'top-right',\n chipColorMap: {\n available: '#0f9d58',\n last_rooms: '#f29900',\n sold_out: '#d93025',\n },\n chipLabelMap: {\n available: 'Disponivel',\n last_rooms: 'Ultimas unidades',\n sold_out: 'Lotado',\n },\n iconColorMap: {\n available: '#0f9d58',\n sold_out: '#d93025',\n },\n features: [\n { icon: 'wifi', expr: '${item.owner}' },\n {\n icon: 'insights',\n expr: '${item.trend}|map:up=Alta,flat=Estavel,down=Queda',\n },\n ],\n featuresVisible: true,\n featuresMode: this.featuresMode(),\n sectionHeader: {\n type: 'chip',\n expr: '${item.key}',\n variant: 'outlined',\n color: '#174ea6',\n },\n emptyState: {\n type: 'html',\n expr: '<strong>Nenhum item de catalogo encontrado.</strong> Ajuste filtros ou sincronize o backend.',\n },\n skeleton: {\n count: 4,\n },\n };\n }\n\n if (this.scenario() === 'executive-expansion') {\n return {\n leading: {\n type: 'text',\n expr: '${item.accountCode}',\n class: 'docs-expansion-leading',\n },\n identity: {\n type: 'component',\n props: {\n component: {\n id: 'account-identity',\n inputs: {\n title: '${item.title}',\n executiveMarkerIcon: '${item.executiveMarkerIcon}',\n segmentVariant: '${item.segmentVariant}',\n segmentLabel: '${item.segmentLabel}',\n accountType: '${item.accountType}',\n since: '${item.since}',\n },\n },\n },\n },\n balance: {\n type: 'metric',\n class: 'exec-balance-metric',\n props: {\n metric: {\n label: 'SALDO',\n valueExpr: '${item.balanceDisplay}',\n layout: 'value-only',\n align: 'center',\n },\n },\n },\n limit: {\n type: 'metric',\n class: 'exec-limit-metric',\n props: {\n metric: {\n label: 'LIMITE DISPONIVEL',\n valueExpr: '${item.limitDisplay}',\n caption: '${item.usageLabel}',\n layout: 'value+caption',\n align: 'center',\n progress: {\n valueExpr: '${item.usagePercent}',\n max: 100,\n color: '#2c9c68',\n trackColor: '#e4eaee',\n },\n },\n },\n },\n risk: {\n type: 'metric',\n class: 'exec-risk-metric',\n props: {\n metric: {\n label: 'RISCO',\n valueExpr: '${item.riskDisplay}',\n caption: '${item.riskLabel}',\n captionPosition: 'below-progress',\n iconExpr: '${item.riskIcon}',\n toneExpr: '${item.status}',\n layout: 'icon+value+caption',\n align: 'center',\n progress: {\n valueExpr: '${item.riskDisplay}',\n max: 100,\n trackColor: '#e4eaee',\n },\n },\n },\n },\n alerts: {\n type: 'component',\n props: {\n component: {\n id: 'alert-summary',\n inputs: {\n alertsData: '${item.alertsData}',\n },\n },\n },\n },\n owner: {\n type: 'component',\n props: {\n component: {\n id: 'owner-summary',\n inputs: {\n ownerName: '${item.ownerName}',\n },\n },\n },\n },\n skeleton: { count: 3 },\n };\n }\n\n return {\n leading: {\n type: this.variant() === 'list' ? 'icon' : 'image',\n expr:\n this.variant() === 'list' ? '${item.statusIcon}' : '${item.cover}',\n imageAlt: 'Preview da iniciativa',\n badge: {\n expr: '${item.priority}',\n color: 'primary',\n variant: 'outlined',\n },\n },\n primary: {\n type: 'text',\n expr: '${item.title}',\n },\n secondary: {\n type: 'date',\n expr: '${item.updatedAt}|pt-BR:medium',\n },\n meta: {\n type: 'currency',\n expr: '${item.budget}|:BRL:pt-BR',\n },\n trailing: {\n type: 'chip',\n expr: '${item.status}',\n },\n metaPlacement: this.lines() >= 3 ? 'line' : 'side',\n metaPrefixIcon: 'payments',\n statusPosition: 'inline',\n chipColorMap: {\n done: '#0a7f44',\n risk: '#d93025',\n watch: '#f29900',\n paused: '#5f6368',\n },\n chipLabelMap: {\n done: 'Concluido',\n risk: 'Risco',\n watch: 'Monitorar',\n paused: 'Pausado',\n },\n iconColorMap: {\n done: '#0a7f44',\n risk: '#d93025',\n watch: '#f29900',\n },\n features: [\n { icon: 'location_on', expr: '${item.city}' },\n { icon: 'groups', expr: '${item.owner}' },\n {\n icon: 'monitoring',\n expr: '${item.trend}|map:up=Em alta,flat=Estavel,down=Em queda',\n },\n ],\n featuresVisible: true,\n featuresMode: this.featuresMode(),\n sectionHeader: {\n type: 'chip',\n expr: '${item.key}',\n variant: 'outlined',\n color: '#174ea6',\n },\n emptyState: {\n type: 'html',\n expr: '<strong>Nenhum registro para os filtros atuais.</strong> Revise os parametros de consulta.',\n },\n skeleton: {\n count: 5,\n },\n };\n }\n\n private pushLog(message: string): void {\n const stamp = new Date().toISOString().slice(11, 19);\n this.eventLog.update((curr) => {\n const entry: EventLogEntry = {\n id: this.nextLogId++,\n message: `${stamp} ${message}`,\n };\n return [entry, ...curr].slice(0, 14);\n });\n }\n}\n","<section class=\"list-doc-page\">\n <section class=\"lab\">\n <aside class=\"controls\">\n <article class=\"panel panel--controls\">\n <h2>Playground</h2>\n <p class=\"muted\">\n Ajuste os controles e observe o comportamento da lista em tempo real.\n </p>\n\n <div class=\"control-block\">\n <p class=\"control-block__title\">Cenario</p>\n <div class=\"chip-row\">\n @for (option of scenarioOptions; track option.id) {\n <button\n type=\"button\"\n class=\"chip-button\"\n [attr.data-testid]=\"'scenario-' + option.id\"\n [class.is-active]=\"scenario() === option.id\"\n (click)=\"setScenario(option.id)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n @if (activeScenarioMeta(); as activeScenario) {\n <p class=\"control-hint\">{{ activeScenario.helper }}</p>\n }\n </div>\n\n <div class=\"control-block\">\n <p class=\"control-block__title\">Variant</p>\n <div class=\"chip-row\">\n @for (option of variantOptions; track option.id) {\n <button\n type=\"button\"\n class=\"chip-button\"\n [attr.data-testid]=\"'variant-' + option.id\"\n [class.is-active]=\"variant() === option.id\"\n [disabled]=\"\n isExecutiveExpansionScenario() && option.id !== 'list'\n \"\n (click)=\"setVariant(option.id)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n @if (isExecutiveExpansionScenario()) {\n <p class=\"control-hint\">\n Este cenario fixa <code>variant = list</code> para validar a\n detail row inline da V1.\n </p>\n }\n </div>\n\n <div class=\"control-grid\">\n <div class=\"control-block\">\n <p class=\"control-block__title\">Density</p>\n <div class=\"chip-row\">\n @for (option of densityOptions; track option.id) {\n <button\n type=\"button\"\n class=\"chip-button chip-button--small\"\n [attr.data-testid]=\"'density-' + option.id\"\n [class.is-active]=\"density() === option.id\"\n (click)=\"setDensity(option.id)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n </div>\n\n <div class=\"control-block\">\n <p class=\"control-block__title\">Lines</p>\n <div class=\"chip-row\">\n @for (count of [1, 2, 3]; track count) {\n <button\n type=\"button\"\n class=\"chip-button chip-button--small\"\n [attr.data-testid]=\"'lines-' + count\"\n [class.is-active]=\"lines() === count\"\n [disabled]=\"isExecutiveExpansionScenario()\"\n (click)=\"setLines($any(count))\"\n >\n {{ count }}\n </button>\n }\n </div>\n @if (isExecutiveExpansionScenario()) {\n <p class=\"control-hint\">\n Linhas travadas em 2 para manter aderencia a referencia\n executiva.\n </p>\n }\n </div>\n </div>\n\n <div class=\"control-block\">\n <p class=\"control-block__title\">Skin</p>\n <div class=\"chip-row\">\n @for (option of skinOptions; track option.id) {\n <button\n type=\"button\"\n class=\"chip-button chip-button--small\"\n [attr.data-testid]=\"'skin-' + option.id\"\n [class.is-active]=\"skin() === option.id\"\n (click)=\"setSkin(option.id)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n </div>\n\n <div class=\"control-block\">\n <p class=\"control-block__title\">Features mode</p>\n <div class=\"chip-row\">\n @for (option of featuresModeOptions; track option.id) {\n <button\n type=\"button\"\n class=\"chip-button chip-button--small\"\n [attr.data-testid]=\"'features-' + option.id\"\n [class.is-active]=\"featuresMode() === option.id\"\n (click)=\"setFeaturesMode(option.id)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n </div>\n\n <div class=\"control-block\">\n <p class=\"control-block__title\">Selection</p>\n <div class=\"chip-row\">\n @for (option of selectionOptions; track option.id) {\n <button\n type=\"button\"\n class=\"chip-button chip-button--small\"\n [attr.data-testid]=\"'selection-' + option.id\"\n [class.is-active]=\"selectionMode() === option.id\"\n [disabled]=\"isExecutiveExpansionScenario()\"\n (click)=\"setSelectionMode(option.id)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n @if (isExecutiveExpansionScenario()) {\n <p class=\"control-hint\">\n Selecao desabilitada neste exemplo para evitar conflito com\n expansao por linha.\n </p>\n }\n </div>\n\n <div class=\"control-block\">\n <p class=\"control-block__title\">Customization mode</p>\n <div class=\"chip-row\">\n <button\n type=\"button\"\n class=\"chip-button chip-button--small\"\n data-testid=\"customization-on\"\n [class.is-active]=\"customizationEnabled()\"\n (click)=\"setCustomizationMode(true)\"\n >\n On\n </button>\n <button\n type=\"button\"\n class=\"chip-button chip-button--small\"\n data-testid=\"customization-off\"\n [class.is-active]=\"!customizationEnabled()\"\n (click)=\"setCustomizationMode(false)\"\n >\n Off\n </button>\n </div>\n <p class=\"control-hint\">\n Ative para exibir editor interno + AI assistant do componente.\n </p>\n </div>\n </article>\n\n <article class=\"panel panel--events\">\n <div class=\"panel__head\">\n <h2>Eventos</h2>\n <button\n type=\"button\"\n class=\"ghost-btn\"\n data-testid=\"clear-log\"\n (click)=\"clearLog()\"\n >\n Limpar log\n </button>\n </div>\n @if (eventLog().length === 0) {\n <p class=\"muted\">\n Sem eventos ainda. Clique em itens, acoes ou selecao.\n </p>\n } @else {\n <ul class=\"event-log\">\n @for (entry of eventLog(); track entry.id) {\n <li>{{ entry.message }}</li>\n }\n </ul>\n }\n </article>\n </aside>\n\n <article class=\"panel panel--live\">\n <h2>Exemplo live</h2>\n <p class=\"muted\">\n Mostra list/cards/tiles com os mesmos dados e configura em tempo real.\n </p>\n @if (scenario() === \"executive-expansion\") {\n <p class=\"muted\">\n Cenario canonico da V1 para validar linha executiva com detail row\n inline e owner de expansao dedicado.\n </p>\n }\n <praxis-list\n listId=\"praxis-list-doc-live\"\n componentInstanceId=\"main-showcase\"\n [config]=\"liveConfig()\"\n [form]=\"form\"\n [enableCustomization]=\"customizationEnabled()\"\n (itemClick)=\"handleItemClick($event)\"\n (actionClick)=\"handleActionClick($event)\"\n (selectionChange)=\"handleSelectionChange($event)\"\n />\n </article>\n </section>\n\n <section class=\"skin-matrix\">\n <div class=\"section-head\">\n <h2>Matriz de skins</h2>\n <p>\n Preview rapido de todos os estilos visuais disponiveis no componente.\n </p>\n </div>\n <div class=\"skin-matrix__grid\">\n @for (preview of skinPreviewConfigs(); track preview.type) {\n <article class=\"panel skin-preview\">\n <h3>{{ preview.type }}</h3>\n <praxis-list-skin-preview\n [config]=\"preview.config\"\n [items]=\"skinPreviewItems\"\n />\n </article>\n }\n </div>\n </section>\n\n <section class=\"code-lab panel\">\n <div class=\"section-head\">\n <h2>Snippets de referencia</h2>\n <p>\n Use os blocos abaixo para replicar os exemplos no host ou no site de\n documentacao.\n </p>\n </div>\n\n <div class=\"code-tabs\">\n @for (tab of codeTabs; track tab.id) {\n <button\n type=\"button\"\n class=\"chip-button\"\n [attr.data-testid]=\"'tab-' + tab.id\"\n [class.is-active]=\"activeTab() === tab.id\"\n (click)=\"setCodeTab(tab.id)\"\n >\n {{ tab.label }}\n </button>\n }\n </div>\n\n <pre class=\"code-box\"><code>{{ selectedSnippet() }}</code></pre>\n </section>\n\n <section class=\"notes panel\">\n <h2>Notas de arquitetura</h2>\n <ul>\n <li>\n <strong>Persistencia:</strong> sempre definir <code>listId</code>; para\n multiplas instancias, use <code>componentInstanceId</code>.\n </li>\n <li>\n <strong>Local vs remoto:</strong> <code>dataSource.data</code> tem\n precedencia para preview local; <code>resourcePath</code> define o\n contrato remoto.\n </li>\n <li>\n <strong>Toolbar remota:</strong> controles de paginacao/sort/busca\n refletem o contrato; a semantica completa de filtro/paginacao depende do\n backend em <code>/filter</code>.\n </li>\n <li>\n <strong>Editor interno:</strong> habilite\n <code>enableCustomization</code> quando o host tiver os providers de\n Settings Panel e AI.\n </li>\n <li>\n <strong>A11y:</strong> configure <code>a11y.ariaLabel</code>/<code\n >ariaLabelledBy</code\n >\n e mantenha labels de acoes explicitas.\n </li>\n <li>\n <strong>Expansao inline V1:</strong> suportada apenas em\n <code>layout.variant = list</code>.\n </li>\n <li>\n <strong>Selecao + expansao:</strong> quando houver selecao, o trigger\n canonico e por icone para evitar ambiguidade operacional.\n </li>\n </ul>\n </section>\n</section>\n","/*\n * Public API Surface of praxis-list\n */\n\nexport * from './lib/components/praxis-list.component';\nexport * from './lib/components/executive/executive-badge.component';\nexport * from './lib/components/executive/executive-alerts.component';\nexport * from './lib/components/executive/executive-owner.component';\nexport * from './lib/editors/list-config-editor.component';\nexport * from './lib/editors/json-config-editor.component';\nexport * from './lib/list-editor-document.model';\nexport * from './lib/list-editor-capability';\nexport * from './lib/models/list-config.model';\nexport * from './lib/services/list-data.service';\nexport * from './lib/utils/templating-inference';\nexport * from './lib/services/list-skin.service';\nexport * from './lib/utils/template-evaluator';\nexport * from './lib/utils/selection-adapter';\nexport * from './lib/praxis-list.metadata';\nexport * from './lib/ai/list-ai-capabilities';\nexport * from './lib/examples/praxis-list-doc-page.component';\nexport * from './lib/i18n/list.en';\nexport * from './lib/i18n/list.i18n';\nexport * from './lib/i18n/list.pt';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["stableSerialize","i1.ListSkinService","i2","i1","i3","i5","i4","i6","debounceTime","i7","i9","i13","distinctUntilChanged","takeUntil","i10","i11"],"mappings":"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"}