@praxisui/list 1.0.0-beta.61 → 1.0.0-beta.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -4
- package/fesm2022/praxisui-list.mjs +1098 -253
- package/fesm2022/praxisui-list.mjs.map +1 -1
- package/index.d.ts +134 -9
- package/package.json +6 -4
|
@@ -1 +1 @@
|
|
|
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/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/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/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 { TemplateDef } from '../models/list-config.model';\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(expr: string, ctx: any): 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 fmt = new Intl.DateTimeFormat(localeArg || undefined, mapDateStyle(styleArg)).format(dt);\n out = fmt;\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 opt: Intl.NumberFormatOptions = {};\n if ((styleArg || '').toLowerCase() === 'compact') opt.notation = 'compact';\n out = new Intl.NumberFormat(localeArg || 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): { 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 // 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 });\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 });\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 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","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 model = config?.layout?.model || 'standard';\n const lines = config?.layout?.lines || 2;\n const classes = [\n `skin-${skin}`,\n `density-${density}`,\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) vars['--p-list-grad-angle'] = `${s.gradient.angle}deg`;\n const gradientForeground = resolveGradientForeground(s.gradient?.from, s.gradient?.to);\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(config?: PraxisListConfig, rootSelector = ':host', includeVars = true): string {\n const s = config?.skin;\n if (!s) return '';\n const vars = this.toCssVars(config);\n const varEntries = Object.entries(vars).map(([key, value]) => `${key}: ${value}`);\n const base = includeVars && varEntries.length ? `${rootSelector}{${varEntries.join(';')}}` : '';\n const extra = normalizeInlineCss(sanitizeCss((s.inlineStyle || '').trim()), rootSelector);\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(css: string, openIndex: number): { 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.replace(/^(:root|html|body)\\b/, rootSelector).trim();\n if (!rootNormalized) return rootSelector;\n if (rootNormalized.startsWith('&')) 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(')) 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.slice(0, 3).split('').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, CSP_NONCE, inject } 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\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 if (def.type === 'currency') {\n const { baseExpr, param } = this.splitPipe(def.expr);\n const [codeFromExpr, localeFromExpr] = this.parseTwoParams(param);\n const currencyCode = codeFromExpr || (this.config?.i18n as any)?.currency || 'USD';\n const locale = localeFromExpr || (this.config?.i18n as any)?.locale || undefined;\n const rawStr = this.evalString(baseExpr, { item });\n const raw = Number(rawStr?.replace?.(/[^0-9.,-]/g, '').replace(',', '.') ?? rawStr);\n const fmt = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currencyCode,\n }).format(raw ?? 0);\n return this.applyMaps({ type: def.type, value: fmt, class: def.class, style: def.style }, item);\n }\n if (def.type === 'date') {\n const { baseExpr, param } = this.splitPipe(def.expr);\n const [localeFromExpr, styleFromExpr] = this.parseTwoParams(param);\n const locale = 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 ? new Intl.DateTimeFormat(locale, dateStyle).format(dt) : '';\n return this.applyMaps({ type: def.type, value: fmt, class: def.class, style: def.style }, item);\n }\n const out = evaluateTemplate(def, item) 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({ type: 'text', expr } as any, ctx?.item ?? ctx);\n return res?.value ?? '';\n }\n\n private parseTwoParams(param?: string): [string | undefined, string | undefined] {\n if (!param) return [undefined, undefined];\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 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\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","import { Component, Inject, Optional, Input, DoCheck, inject } from '@angular/core';\nimport { BehaviorSubject, Subject, of } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, switchMap, tap, catchError } 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 { SETTINGS_PANEL_DATA, SettingsValueProvider } 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 { GenericCrudService, IconPickerService, PraxisIconDirective, GLOBAL_ACTION_CATALOG, GlobalActionCatalogEntry, PRAXIS_GLOBAL_ACTION_CATALOG, getGlobalActionCatalog } from '@praxisui/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { produce, setAutoFreeze } from 'immer';\nimport { inferTemplatingFromSchema } from '../utils/templating-inference';\n\ntype NormalizedListConfig = Omit<\n PraxisListConfig,\n 'dataSource' | 'layout' | 'selection' | 'skin' | 'i18n'\n> & {\n dataSource: { data?: any[]; resourcePath?: string; query?: Record<string, any>; sort?: string[] };\n layout: {\n variant: 'list' | 'cards' | 'tiles';\n density?: 'default' | 'comfortable' | 'compact';\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: 'pill-soft' | 'gradient-tile' | 'glass' | 'elevated' | 'outline' | 'flat' | 'neumorphism' | '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 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 PdxColorPickerComponent,\n ],\n templateUrl: './list-config-editor.component.html',\n\n styles: [`\n .confirm-type{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:11px;line-height:16px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}\n .confirm-type.danger{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}\n .confirm-type.warning{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}\n .confirm-type.info{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}\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(--md-sys-color-outline-variant);\n --mdc-outlined-text-field-hover-outline-color: var(--md-sys-color-outline);\n --mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);\n --mdc-outlined-text-field-error-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-focus-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-hover-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-label-text-color: var(--md-sys-color-on-surface-variant);\n --mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);\n --mdc-outlined-text-field-supporting-text-color: var(--md-sys-color-on-surface-variant);\n }\n .editor-content .mat-mdc-form-field.w-full { max-width: none; }\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{display:grid}\n .g-auto-220{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}\n .g-auto-200{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}\n .g-1-auto{grid-template-columns:1fr auto}\n .row-flow{grid-auto-flow:column}\n .gap-6{gap:6px}\n .gap-8{gap:8px}\n .gap-12{gap:12px}\n .ai-center{align-items:center}\n .ai-end{align-items:end}\n .mt-12{margin-top:12px}\n .mb-8{margin-bottom:8px}\n .mb-6{margin-bottom:6px}\n .my-8{margin:8px 0}\n .subtitle{margin:8px 0 4px;color:var(--editor-muted);font-weight:500}\n .section-title{color:var(--editor-muted);font-weight:600}\n .chips-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}\n .error{color:var(--md-sys-color-error);font-size:.85rem}\n .muted{color:var(--editor-muted)}\n .text-caption{color:var(--editor-muted);font-size:.8rem}\n :host ::ng-deep .mat-mdc-select-panel .option-icon{font-size:18px;margin-right:6px;vertical-align:middle}\n :host ::ng-deep .mat-mdc-select-panel .color-dot{width:10px;height:10px;border-radius:999px;display:inline-block;margin-right:6px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-outline)}\n :host ::ng-deep .mat-mdc-select-panel .color-primary{background:var(--md-sys-color-primary)}\n :host ::ng-deep .mat-mdc-select-panel .color-accent{background:var(--md-sys-color-tertiary)}\n :host ::ng-deep .mat-mdc-select-panel .color-warn{background:var(--md-sys-color-error)}\n :host ::ng-deep .mat-mdc-select-panel .color-default{background:var(--md-sys-color-outline)}\n @media (max-width: 1024px) {\n .editor-split { grid-template-columns: minmax(0, 1fr); }\n }\n `]\n})\nexport class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {\n @Input() config!: PraxisListConfig;\n @Input() listId?: string;\n\n working: NormalizedListConfig = {\n dataSource: {},\n layout: { variant: 'list', lines: 2, density: 'default', dividers: 'between' },\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: { field?: string; type: 'text' | 'currency' | 'date' | 'html'; currencyCode?: string; locale?: string; dateStyle?: 'short' | 'medium' | 'long' | 'full'; class?: string; style?: string; extraPipe?: string } = { type: 'text' } as any;\n mappingSecondary: { field?: string; type: 'text' | 'currency' | 'date' | 'html'; currencyCode?: string; locale?: string; dateStyle?: 'short' | 'medium' | 'long' | 'full'; class?: string; style?: string; extraPipe?: string } = { type: 'text' } as any;\n mappingMeta: { field?: string; type: 'text' | 'currency' | 'date' | 'chip' | 'rating' | 'icon' | 'image' | 'html'; currencyCode?: string; locale?: string; dateStyle?: 'short' | 'medium' | 'long' | 'full'; class?: string; style?: string; placement?: 'side' | 'line'; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; imageAlt?: string; extraPipe?: string } = { type: 'text' } as any;\n mappingMetaPrefixIcon?: string;\n mappingTrailing: { field?: string; type?: 'text' | 'currency' | 'date' | 'chip' | 'icon' | 'rating' | 'html' | 'image'; class?: string; style?: string; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; imageUrl?: string; imageAlt?: string; currencyCode?: string; locale?: string; dateStyle?: 'short' | 'medium' | 'long' | 'full'; extraPipe?: string } = {} as any;\n mappingLeading: { field?: string; type: 'icon' | 'image' | 'text' | 'chip' | 'rating' | 'html'; icon?: string; imageUrl?: string; imageAlt?: string; badgeText?: string; badgeColor?: string; badgeVariant?: 'filled' | 'outlined'; class?: string; style?: string; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; extraPipe?: string } = { type: 'icon' } as any;\n mappingSectionHeader: { type: 'text' | 'chip' | 'icon' | 'image' | 'rating' | 'html'; expr?: string; class?: string; style?: string; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; imageUrl?: string; imageAlt?: string; extraPipe?: string } = { type: 'text', expr: '${item.key}' } as any;\n mappingEmptyState: { type: 'text' | 'chip' | 'icon' | 'image' | 'rating' | 'html'; expr?: string; class?: string; style?: string; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; imageUrl?: string; imageAlt?: string; extraPipe?: string } = { 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 // Meta composition (multi-field)\n mappingMetaFields: string[] = [];\n mappingMetaSeparator: string = ' • ';\n mappingMetaWrapSecondInParens = false;\n featuresSyncWithMeta = false;\n\n // Features editor state\n features: Array<{ icon?: string; expr: string; class?: string; style?: string }> = [];\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 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, { optional: true }) as GenericCrudService<any> | null;\n const cfg = (injected?.config as PraxisListConfig) || this.config;\n if (cfg) {\n this.working = this.normalize(structuredClone(cfg));\n // Initialize mapping UI from existing templating\n this.hydrateMappingFromTemplating(this.working.templating as any);\n this.hydrateUiEditorFromConfig();\n }\n this.globalActionCatalog = this.resolveGlobalActionCatalog();\n this.appliedMappingSnapshot = this.getMappingSnapshot();\n this.initialJson = JSON.stringify(this.working);\n this.lastJson = this.initialJson;\n this.queryJson = this.working?.dataSource?.query ? JSON.stringify(this.working.dataSource.query, null, 2) : '';\n this.skeletonCountInput = this.working?.templating?.skeleton?.count ?? this.skeletonCountInput;\n // Start schema watcher and emit initial value\n this.setupSchemaWatcher();\n this.resourcePathChanges.next(this.working?.dataSource?.resourcePath || '');\n // Hydrate sort controls from existing config\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 ip = inject(IconPickerService);\n async pickLeadingIcon(): Promise<void> {\n const chosen = await this.ip.openDialog({ value: (this.mappingLeading as any)?.icon });\n if (chosen == null) return;\n this.mappingLeading = { ...(this.mappingLeading || { type: 'icon' as const }), type: 'icon', icon: chosen } 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({ value: this.mappingMetaPrefixIcon || '' });\n if (chosen == null) return;\n this.mappingMetaPrefixIcon = chosen;\n this.onMappingChanged();\n }\n\n getSettingsValue(): any {\n // Ensure pending template mapping is applied before returning\n this.ensureMappingApplied();\n this.normalizeActionPayloads();\n return { config: this.working, id: this.listId };\n }\n\n onSave(): any {\n this.ensureMappingApplied();\n this.normalizeActionPayloads();\n return { config: this.working, id: this.listId };\n }\n\n private normalize(cfg: PraxisListConfig): NormalizedListConfig {\n const out: NormalizedListConfig = {\n ...cfg,\n dataSource: cfg.dataSource || {},\n layout: {\n variant: (cfg.layout?.variant as any) || 'list',\n lines: (cfg.layout?.lines as any) || 2,\n density: cfg.layout?.density || 'default',\n dividers: cfg.layout?.dividers || 'between',\n model: (cfg.layout?.model as any) || 'standard',\n groupBy: cfg.layout?.groupBy,\n stickySectionHeader: cfg.layout?.stickySectionHeader,\n virtualScroll: cfg.layout?.virtualScroll,\n },\n selection: {\n mode: cfg.selection?.mode || 'none',\n formControlName: cfg.selection?.formControlName,\n formControlPath: cfg.selection?.formControlPath,\n compareBy: cfg.selection?.compareBy,\n return: cfg.selection?.return || 'value',\n },\n skin: {\n type: (cfg.skin?.type as any) || 'elevated',\n gradient: cfg.skin?.gradient || { from: '', to: '', angle: 135 },\n radius: cfg.skin?.radius,\n shadow: cfg.skin?.shadow,\n border: cfg.skin?.border,\n backdropBlur: cfg.skin?.backdropBlur,\n class: cfg.skin?.class,\n inlineStyle: cfg.skin?.inlineStyle,\n },\n i18n: (cfg.i18n as any) || {},\n ui: (cfg.ui as any) || {},\n a11y: (cfg.a11y as any) || {},\n events: (cfg.events as any) || {},\n };\n return out;\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: { from: 'var(--md-sys-color-primary)', to: 'var(--md-sys-color-tertiary)', angle: 135 },\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 = { ...(draft.i18n || {}), locale: 'pt-BR', currency: 'BRL' };\n draft.templating = {\n ...(draft.templating || {}),\n leading: { type: 'image', expr: '${item.imageUrl}', imageAlt: 'Catalog' },\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 'disponível': 'primary',\n 'últimas vagas': 'accent',\n 'indisponível': '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 { title: 'Maria', subtitle: 'Product Designer', tag: 'A+', salary: 12345.67, hireDate: '2022-03-01', rating: 4.5, name: 'Aurora Deluxe', status: 'Disponível', price: 980.0, imageUrl: '/list-demo-hotel-1.svg' },\n { title: 'João', subtitle: 'Frontend Engineer', tag: 'B', salary: 9876.0, hireDate: '2023-01-12', rating: 3.8, name: 'Skyline Classic', status: 'Últimas vagas', price: 640.0, imageUrl: '/list-demo-hotel-2.svg' },\n { title: 'Ana', subtitle: 'QA Analyst', tag: 'C', salary: 7564.32, hireDate: '2021-10-05', rating: 4.9, name: 'Urban Loft', status: 'Indisponível', price: 520.0, imageUrl: '/list-demo-hotel-1.svg' },\n ];\n skinPreviewTheme: 'light' | 'dark' | 'grid' = 'light';\n\n readonly metaTypeConfigs: Array<{ type: 'text' | 'chip' | 'rating' | 'currency' | 'date' | 'icon' | 'image' | 'html'; label: string; icon: string; props?: string[] }> = [\n { type: 'text', label: 'Texto', icon: 'text_fields' },\n { type: 'chip', label: 'Chip', icon: 'label', props: ['chipColor', 'chipVariant'] },\n { type: 'rating', label: 'Rating', icon: 'star', props: ['ratingColor', 'ratingSize', 'ratingMax'] },\n { type: 'icon', label: 'Ícone', icon: 'emoji_symbols', props: ['iconColor'] },\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) => ['text', 'currency', 'date', 'html'].includes(t.type));\n readonly secondaryTypeConfigs = this.primaryTypeConfigs;\n readonly leadingTypeConfigs = this.metaTypeConfigs.filter((t) => ['icon', 'image', 'text', 'chip', 'rating', 'html'].includes(t.type));\n readonly trailingTypeConfigs = this.metaTypeConfigs.filter((t) => ['text', 'chip', 'rating', 'currency', 'date', 'icon', 'html', 'image'].includes(t.type));\n readonly sectionHeaderTypeConfigs = this.metaTypeConfigs.filter((t) => ['text', 'chip', 'icon', 'image', 'rating', 'html'].includes(t.type));\n readonly emptyStateTypeConfigs = this.metaTypeConfigs.filter((t) => ['text', 'chip', 'icon', 'image', 'rating', 'html'].includes(t.type));\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 { value: 'var(--md-sys-color-on-surface-variant)', label: 'M3 On Surface Variant' },\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(obj: any, prop: string, fallback = 'var(--md-sys-color-primary)'): void {\n if (!obj) return;\n const current = obj[prop];\n obj[prop] = this.isCustomColor(current) ? current : fallback;\n this.onMappingChanged();\n }\n enableCustomActionColor(action: any, fallback = 'var(--md-sys-color-primary)'): 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({ id: 'newAction', icon: 'bolt', label: 'Ação', color: undefined, kind: 'icon' });\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(action: any, field: 'title' | 'message', value: string): void {\n if (!action) return;\n this.ensureConfirmation(action);\n action.confirmation[field] = value;\n this.onActionsChanged();\n }\n applyConfirmationPreset(action: any, type?: 'danger' | 'warning' | 'info' | ''): 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) action.confirmation.title = 'Confirmar ação';\n if (!action.confirmation.message) action.confirmation.message = '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) 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) 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(entry.payloadSchema.example, null, 2);\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>((schema.required || []).map((r) => String(r)));\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 = 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 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 = 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 = JSON.parse(this.initialJson);\n this.working = parsed;\n this.lastJson = this.initialJson;\n this.mappingDirty = false;\n this.appliedMappingSnapshot = this.getMappingSnapshot();\n this.queryJson = this.working?.dataSource?.query ? JSON.stringify(this.working.dataSource.query, null, 2) : '';\n this.queryError = '';\n this.skeletonCountInput = this.working?.templating?.skeleton?.count ?? this.skeletonCountInput;\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(prop: 'from' | 'to' | 'angle', value: string | number): 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): { from: string; to: string; angle?: number } {\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 n = Number(value);\n const fixed = !Number.isFinite(n) || n < 1 ? 1 : Math.floor(n);\n this.working = produce(this.working, (draft) => {\n (draft.layout as any).pageSize = fixed;\n });\n this.markDirty();\n this.verify();\n }\n onUiChanged(): void {\n this.markDirty(); 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 = [...(this.uiSortRows || []), { label: '', field: '', dir: 'desc' }];\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 => ({ label: (r.label || '').trim() || `${r.field},${r.dir || 'desc'}`, value: `${r.field},${r.dir || 'desc'}` }));\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 = `${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<{ label?: string; field?: string; dir?: 'asc' | 'desc' }> = [];\n for (const op of arr) {\n if (typeof op === 'string') {\n const [f, d] = op.split(','); 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(','); rows.push({ label: (op as any).label, field: f, dir: (d as any) || 'asc' });\n }\n }\n this.uiSortRows = rows;\n }\n\n // Legacy method retained to avoid breaking references; no-op now.\n private loadFieldsIfNeeded(): void { /* replaced by setupSchemaWatcher */ }\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 const t: any = { ...(this.working.templating as any) };\n const normalizeRating = (slot: any) => {\n if (!slot) return;\n if (slot.ratingSize != null) {\n const s = Number(slot.ratingSize);\n slot.ratingSize = Number.isFinite(s) ? Math.min(32, Math.max(10, Math.round(s))) : undefined;\n }\n if (slot.ratingMax != null) {\n const m = Number(slot.ratingMax);\n slot.ratingMax = Number.isFinite(m) ? Math.min(10, Math.max(1, Math.round(m))) : undefined;\n }\n };\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 { type: slot.type, expr: pipe ? base + '|' + pipe : base, class: slot.class, style: slot.style } as any;\n }\n if (slot.type === 'chip') return { type: 'chip', expr: base, class: slot.class, style: slot.style, color: slot.chipColor, variant: slot.chipVariant } as any;\n if (slot.type === 'icon') {\n const pipe = (slot.extraPipe || '').trim();\n const expr = pipe ? base + '|' + pipe : base;\n return { type: 'icon', expr, class: slot.class, style: slot.style, color: slot.iconColor } as any;\n }\n if (slot.type === 'image') {\n const expr = (slot.imageUrl || '').trim() || base;\n return { type: 'image', expr, class: slot.class, style: slot.style, imageAlt: slot.imageAlt } as any;\n }\n if (slot.type === 'image') {\n return { type: 'image', expr: base, class: slot.class, style: slot.style, imageAlt: slot.imageAlt } 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 { type: 'rating', expr: base, class: slot.class, style: slot.style, props } 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 { type: 'currency', expr: param ? base + '|' + param : base, class: slot.class, style: slot.style } 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 { type: 'date', expr: param ? base + '|' + param : base, class: slot.class, style: slot.style } as any;\n }\n if (slot.type === 'icon') {\n const pipe = (slot.extraPipe || '').trim();\n const expr = pipe ? base + '|' + pipe : base;\n return { type: 'icon', expr, class: slot.class, style: slot.style } 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 { type: 'chip', expr, class: slot.class, style: slot.style, color: slot.chipColor, variant: slot.chipVariant } as any;\n }\n if (slot.type === 'icon') {\n return { type: 'icon', expr, class: slot.class, style: slot.style, color: slot.iconColor } 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 { type: 'rating', expr, class: slot.class, style: slot.style, props } as any;\n }\n if (slot.type === 'image') {\n const imgExpr = (slot.imageUrl || '').trim();\n if (!imgExpr) return undefined;\n return { type: 'image', expr: imgExpr, class: slot.class, style: slot.style, imageAlt: slot.imageAlt } as any;\n }\n return { type: slot.type, expr, class: slot.class, style: slot.style } as any;\n };\n\n normalizeRating(this.mappingMeta);\n normalizeRating(this.mappingTrailing);\n normalizeRating(this.mappingLeading);\n normalizeRating(this.mappingSectionHeader);\n normalizeRating(this.mappingEmptyState);\n const p = build(this.mappingPrimary);\n const s = build(this.mappingSecondary);\n const m = build(this.mappingMeta);\n const tr = this.mappingTrailing.field ? build(this.mappingTrailing) : undefined;\n const l = (this.mappingLeading?.field && this.mappingLeading.type !== 'icon' && 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 ((this.mappingMeta?.type || 'text') === 'text' && this.mappingMetaFields && this.mappingMetaFields.length) {\n const parts = this.mappingMetaFields.map((f, idx) => {\n const token = '${item.' + f + '}';\n if (idx === 1 && this.mappingMetaWrapSecondInParens) return '(' + token + ')';\n return token;\n });\n const sep = this.mappingMetaSeparator ?? ' ';\n t.meta = { type: 'text', expr: parts.join(sep), class: this.mappingMeta.class, style: this.mappingMeta.style } 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 (this.mappingLeading?.type === 'icon' && this.mappingLeading.icon && this.mappingLeading.icon.trim()) {\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 (this.mappingLeading?.type === 'image' && this.mappingLeading.imageUrl && this.mappingLeading.imageUrl.trim()) {\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 expr: this.mappingLeading.badgeText,\n color: this.mappingLeading.badgeColor as any,\n variant: (this.mappingLeading.badgeVariant as any) || 'filled',\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 = (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 => ({ icon: f.icon, expr: f.expr, class: f.class, style: f.style }));\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 = this.skeletonCountInput > 0 ? { count: this.skeletonCountInput } : undefined;\n\n this.working = produce(this.working, (draft) => {\n (draft as any).templating = t;\n });\n this.markDirty();\n this.verify();\n this.mappingDirty = false;\n this.appliedMappingSnapshot = this.getMappingSnapshot();\n }\n\n private ensureMappingApplied(): void {\n if (this.mappingDirty) {\n this.applyTemplate();\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 = [...(this.iconColorMapEntries || []), { key: '', color: undefined }];\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(([key, color]) => ({ key, color })) as any;\n this.updateMappingDirty();\n this.markDirty();\n }\n\n addChipColorEntry(): void {\n this.chipColorMapEntries = [...(this.chipColorMapEntries || []), { key: '', color: undefined }];\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(([key, color]) => ({ key, color })) as any;\n this.updateMappingDirty();\n this.markDirty();\n }\n\n addChipLabelEntry(): void {\n this.chipLabelMapEntries = [...(this.chipLabelMapEntries || []), { key: '', label: '' }];\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(([key, label]) => ({ key, label })) 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(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, field: string): void {\n const token = '${item.' + field + '}';\n this.insertIntoFeatureExpr(index, inputEl, token);\n }\n insertLiteralAt(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, text: string): void {\n this.insertIntoFeatureExpr(index, inputEl, text);\n }\n wrapSelectionAt(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, left: string, right: string): 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(index, inputEl, newExpr, start + left.length + sel.length + right.length);\n }\n private insertIntoFeatureExpr(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, text: string): 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(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, newExpr: string, caretPos: number): 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 = (param?: string): { currencyCode?: string; locale?: string } => {\n if (!param) return {};\n const [code, loc] = param.split(':').map((s) => s?.trim()).filter(Boolean) as string[];\n return { currencyCode: code, locale: loc };\n };\n const parseDate = (param?: string): { 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)) 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 = { field, type: templ.primary.type || 'text', class: templ.primary.class, style: templ.primary.style };\n if (templ.primary.type === 'currency') 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') base.extraPipe = param;\n this.mappingPrimary = base;\n }\n if (templ.secondary) {\n const { field, param } = parseExpr(templ.secondary.expr);\n const base: any = { field, type: templ.secondary.type || 'text', class: templ.secondary.class, style: templ.secondary.style };\n if (templ.secondary.type === 'currency') Object.assign(base, parseCurrency(param));\n if (templ.secondary.type === 'date') Object.assign(base, parseDate(param));\n if (templ.secondary.type === 'text' || templ.secondary.type === 'html') base.extraPipe = param;\n this.mappingSecondary = base;\n }\n if (templ.meta) {\n const { field, param } = parseExpr(templ.meta.expr);\n const base: any = { field, type: templ.meta.type || 'text', class: templ.meta.class, style: templ.meta.style };\n if (templ.meta.type === 'currency') Object.assign(base, parseCurrency(param));\n if (templ.meta.type === 'date') Object.assign(base, parseDate(param));\n if (templ.meta.type === 'text' || templ.meta.type === 'html' || templ.meta.type === 'icon') base.extraPipe = param;\n this.mappingMeta = base;\n if (templ.metaPlacement) this.mappingMeta.placement = templ.metaPlacement;\n if ((templ as any).metaPrefixIcon) this.mappingMetaPrefixIcon = (templ as any).metaPrefixIcon;\n if (templ.meta?.color) this.mappingMeta.chipColor = templ.meta.color;\n if (templ.meta?.variant) this.mappingMeta.chipVariant = templ.meta.variant;\n if (templ.meta?.type === 'icon' && (templ.meta as any).color) this.mappingMeta.iconColor = (templ.meta as any).color;\n if (templ.meta?.type === 'image' && (templ.meta as any).imageAlt) 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 (typeof templ.meta?.expr === 'string' && /\\$\\{\\s*item\\./.test(templ.meta.expr)) {\n const guessSep = / • /.test(templ.meta.expr) ? ' • ' : (/,\\s*/.test(templ.meta.expr) ? ', ' : ' ');\n const matches = Array.from(templ.meta.expr.matchAll(/\\$\\{\\s*item\\.([^}]+)\\s*}/g)).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 = /\\(\\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 = { field, type: templ.trailing.type || 'text', class: templ.trailing.class, style: templ.trailing.style };\n if (templ.trailing.type === 'currency') Object.assign(base, parseCurrency(param));\n if (templ.trailing.type === 'date') Object.assign(base, parseDate(param));\n if (templ.trailing.type === 'icon' || templ.trailing.type === 'text' || templ.trailing.type === 'html') base.extraPipe = param;\n this.mappingTrailing = base;\n if (templ.trailing?.color) this.mappingTrailing.chipColor = templ.trailing.color;\n if (templ.trailing?.variant) this.mappingTrailing.chipVariant = templ.trailing.variant;\n if (templ.trailing?.type === 'image' && typeof templ.trailing.expr === 'string') this.mappingTrailing.imageUrl = templ.trailing.expr;\n if (templ.trailing?.type === 'image' && (templ.trailing as any).imageAlt) this.mappingTrailing.imageAlt = (templ.trailing as any).imageAlt;\n if (templ.trailing?.type === 'icon' && (templ.trailing as any).color) 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 Record<string, string> | undefined;\n this.iconColorMapEntries = Object.entries(icm || {}).map(([k, v]) => ({ key: k, color: v })) as any;\n if ((this.mappingTrailing?.field || '').toLowerCase() === 'status' && (!this.iconColorMapEntries || this.iconColorMapEntries.length === 0)) {\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 (templ.leading?.type === 'icon' && typeof templ.leading.expr === 'string') {\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 (templ.leading?.type === 'image' && typeof templ.leading.expr === 'string') {\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 (templ.leading?.type && ['text', 'chip', 'rating', 'html'].includes(templ.leading.type)) {\n const { field, param } = parseExpr(templ.leading.expr);\n const base: any = { field, type: templ.leading.type, class: templ.leading.class, style: templ.leading.style };\n if (templ.leading.type === 'text' || templ.leading.type === 'html') base.extraPipe = param;\n if (templ.leading.type === 'chip') {\n base.chipColor = templ.leading.color;\n base.chipVariant = templ.leading.variant;\n }\n if (templ.leading.type === 'rating' && (templ.leading as any)?.props?.rating) {\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: templ.sectionHeader.type === 'image' ? templ.sectionHeader.expr : undefined,\n imageAlt: templ.sectionHeader.imageAlt,\n iconColor: (templ.sectionHeader as any).color,\n extraPipe: (templ.sectionHeader.type === 'text' || templ.sectionHeader.type === 'html' || templ.sectionHeader.type === 'icon') ? shPipe.pipe : 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: templ.emptyState.type === 'image' ? templ.emptyState.expr : undefined,\n imageAlt: templ.emptyState.imageAlt,\n iconColor: (templ.emptyState as any).color,\n extraPipe: (templ.emptyState.type === 'text' || templ.emptyState.type === 'html' || templ.emptyState.type === 'icon') ? esPipe.pipe : 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) => ({ icon: f.icon, expr: f.expr, class: f.class, style: f.style }));\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 Record<string, string> | undefined;\n this.chipColorMapEntries = Object.entries(ccm || {}).map(([k, v]) => ({ key: k, color: v })) as any;\n const clm = (templ as any)?.chipLabelMap as Record<string, string> | undefined;\n this.chipLabelMapEntries = Object.entries(clm || {}).map(([k, v]) => ({ key: k, label: v })) as any;\n }\n\n markDirty(): void {\n setTimeout(() => {\n if (this.mappingDirty) {\n this.isDirty$.next(true);\n return;\n }\n const current = JSON.stringify(this.working);\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 = this.getMappingSnapshot() !== this.appliedMappingSnapshot;\n }\n\n private isJsonLike(value: string): boolean {\n const trimmed = value.trim();\n return (trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'));\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);\n }\n\n private normalizeActionPayloads(): void {\n const actions = this.working?.actions || [];\n if (!Array.isArray(actions)) return;\n for (const a of actions) {\n if (!a) continue;\n const v = (a as any).globalPayload;\n if (typeof v !== 'string') continue;\n const trimmed = v.trim();\n if (!trimmed) {\n (a as any).globalPayload = undefined;\n continue;\n }\n if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {\n try {\n (a as any).globalPayload = JSON.parse(trimmed);\n } catch {\n // keep as string\n }\n }\n }\n }\n verify(): void {\n setTimeout(() => {\n // Basic constraints\n const rp = (this.working?.dataSource?.resourcePath || '').trim();\n const pageSizeRaw = (this.working?.layout?.pageSize as any);\n const pageSizeNum = pageSizeRaw == null ? undefined : Number(pageSizeRaw);\n const lines = this.working?.layout?.lines as any;\n const sortField = (this.sortField || '').trim();\n\n let valid = true;\n // Allow configs without resourcePath (local data or template-only editing)\n if (pageSizeNum != null && (!Number.isFinite(pageSizeNum) || pageSizeNum < 1)) valid = false;\n if (![1, 2, 3].includes(Number(lines))) valid = false;\n if (sortField && this.fields.length && !this.fields.includes(sortField)) valid = false;\n\n // selection.compareBy should exist when fields are loaded\n const compareBy = (this.working?.selection?.compareBy || '').trim();\n if (compareBy && this.fields.length && !this.fields.includes(compareBy)) valid = false;\n\n // Duplicatas em opções de ordenação (UI) tornam inválido\n if (valid && (this.working?.ui as any)?.showSort) {\n const rows = this.uiSortRows || [];\n const seen = new Map<string, number>();\n for (const r of rows) {\n const k = `${(r?.field || '').trim()},${(r?.dir || 'desc').trim()}`;\n if (!r?.field) continue;\n seen.set(k, (seen.get(k) || 0) + 1);\n }\n for (const [, count] of seen) {\n if (count > 1) { valid = false; break; }\n }\n }\n\n if (this.queryError) valid = false;\n\n if ((this.mappingLeading?.type === 'image' && !this.validateImageUrl(this.mappingLeading.imageUrl)) ||\n (this.mappingTrailing?.type === 'image' && !this.validateImageUrl(this.mappingTrailing.imageUrl)) ||\n (this.mappingSectionHeader?.type === 'image' && !this.validateImageUrl(this.mappingSectionHeader.imageUrl)) ||\n (this.mappingEmptyState?.type === 'image' && !this.validateImageUrl(this.mappingEmptyState.imageUrl))) {\n valid = false;\n }\n\n if ((this.mappingMeta?.type === 'rating' && (this.isRatingSizeInvalid(this.mappingMeta.ratingSize) || this.isRatingMaxInvalid(this.mappingMeta.ratingMax))) ||\n (this.mappingLeading?.type === 'rating' && (this.isRatingSizeInvalid(this.mappingLeading.ratingSize) || this.isRatingMaxInvalid(this.mappingLeading.ratingMax))) ||\n (this.mappingTrailing?.type === 'rating' && (this.isRatingSizeInvalid(this.mappingTrailing.ratingSize) || this.isRatingMaxInvalid(this.mappingTrailing.ratingMax))) ||\n (this.mappingSectionHeader?.type === 'rating' && (this.isRatingSizeInvalid(this.mappingSectionHeader.ratingSize) || this.isRatingMaxInvalid(this.mappingSectionHeader.ratingMax))) ||\n (this.mappingEmptyState?.type === 'rating' && (this.isRatingSizeInvalid(this.mappingEmptyState.ratingSize) || this.isRatingMaxInvalid(this.mappingEmptyState.ratingMax)))) {\n valid = false;\n }\n\n // Validação de JSON nas Actions\n if (this.working?.actions?.some(a => this.isGlobalPayloadInvalid((a as any).globalPayload))) {\n valid = false;\n }\n\n if (valid && Array.isArray(this.working?.actions)) {\n for (const a of this.working.actions) {\n if (this.isGlobalPayloadInvalid((a as any)?.globalPayload)) {\n valid = false;\n break;\n }\n }\n }\n\n this.isValid$.next(valid);\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 updated = inferTemplatingFromSchema(this.working as any, this.fields);\n this.working = updated as any;\n // Keep mapping controls in sync with new templating\n this.hydrateMappingFromTemplating((this.working as any).templating);\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) => ({ icon: this.suggestIcon(f), expr: '${item.' + f + '}' }));\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) 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] === '{') { 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\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': return 'text_fields';\n case 'currency': return 'attach_money';\n case 'date': return 'calendar_today';\n case 'chip': return 'label';\n case 'rating': return 'star';\n case 'html': return 'code';\n case 'icon': return 'emoji_symbols';\n case 'image': return 'image';\n default: return 'horizontal_rule';\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\">Observação: ajustes aplicados pelo assistente substituem o objeto de configuração inteiro.\n </div>\n <button mat-icon-button type=\"button\" class=\"help-icon-button\"\n matTooltip=\"O applyConfigFromAdapter não faz merge profundo. Garanta que o adapter envie a config completa.\">\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 matInput [(ngModel)]=\"working.dataSource.resourcePath\" (ngModelChange)=\"onResourcePathChange($event)\"\n placeholder=\"ex.: users\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Endpoint do recurso (resourcePath).\">\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 matInput rows=\"3\" [(ngModel)]=\"queryJson\" (ngModelChange)=\"onQueryChanged($event)\"\n placeholder='ex.: {\"status\":\"active\",\"department\":\"sales\"}'></textarea>\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Opcional. Use JSON válido para filtros iniciais.\" *ngIf=\"!queryError\">\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 [(ngModel)]=\"sortField\" (ngModelChange)=\"updateSortConfig()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"Campo base do recurso.\">\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 [(ngModel)]=\"sortDir\" (ngModelChange)=\"updateSortConfig()\">\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=\"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\">Configure botões de ação por item (ícone, rótulo, cor, visibilidade)</div>\n <button mat-flat-button color=\"primary\" (click)=\"addAction()\">Adicionar ação</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 [(ngModel)]=\"selectedGlobalActionId\" (ngModelChange)=\"onGlobalActionSelected($event)\">\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 *ngIf=\"!globalActionCatalog.length\" class=\"text-caption muted\">Nenhuma ação global registrada.</mat-hint>\n </mat-form-field>\n <div class=\"muted text-caption\">Selecione para adicionar com `command` global.</div>\n </div>\n <div *ngFor=\"let a of (working.actions || []); let i = index\" class=\"g g-auto-200 gap-12 ai-end\">\n <mat-form-field appearance=\"outline\">\n <mat-label>ID</mat-label>\n <input matInput [(ngModel)]=\"a.id\" (ngModelChange)=\"onActionsChanged()\" />\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 matInput [(ngModel)]=\"a.icon\" (ngModelChange)=\"onActionsChanged()\" placeholder=\"ex.: edit, delete\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Command (global)</mat-label>\n <input matInput [(ngModel)]=\"a.command\" (ngModelChange)=\"onActionsChanged()\" placeholder=\"global:toast.success\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Rótulo</mat-label>\n <input matInput [(ngModel)]=\"a.label\" (ngModelChange)=\"onActionsChanged()\" />\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 [(ngModel)]=\"a.buttonVariant\" (ngModelChange)=\"onActionsChanged()\">\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 [(ngModel)]=\"a.color\" (ngModelChange)=\"onActionsChanged()\">\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 class=\"g gap-8\" *ngIf=\"isCustomColor(a.color); else actionCustomBtn\">\n <pdx-color-picker label=\"Cor personalizada\" [format]=\"'hex'\" [(ngModel)]=\"a.color\"\n (ngModelChange)=\"onActionsChanged()\"></pdx-color-picker>\n </div>\n <ng-template #actionCustomBtn>\n <button mat-stroked-button type=\"button\" (click)=\"enableCustomActionColor(a)\">Usar cor personalizada</button>\n </ng-template>\n <mat-form-field appearance=\"outline\">\n <mat-label>Payload da ação</mat-label>\n <mat-select [(ngModel)]=\"a.emitPayload\" (ngModelChange)=\"onActionsChanged()\">\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 mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"emitPayload\">\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>Exibir quando (ex.: ${item.status} == 'done')</mat-label>\n <input matInput [(ngModel)]=\"a.showIf\" (ngModelChange)=\"onActionsChanged()\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Sintaxe suportada: "${item.campo} == 'valor'". Expressões avançadas não são avaliadas.\">\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 *ngIf=\"(a.kind || 'icon') === 'icon'\" mat-icon-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\"><mat-icon\n [praxisIcon]=\"a.icon || 'bolt'\" [style.cssText]=\"iconStyle(a.color)\"></mat-icon></button>\n <ng-container *ngIf=\"a.kind === 'button'\">\n <button *ngIf=\"a.buttonVariant === 'stroked'\" mat-stroked-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\" [style.cssText]=\"buttonStyle(a.color, 'stroked')\">{{ a.label\n || a.id || 'Ação' }}</button>\n <button *ngIf=\"a.buttonVariant === 'raised'\" mat-raised-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\" [style.cssText]=\"buttonStyle(a.color, 'raised')\">{{ a.label ||\n a.id || 'Ação' }}</button>\n <button *ngIf=\"!a.buttonVariant || a.buttonVariant === 'flat'\" mat-flat-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\" [style.cssText]=\"buttonStyle(a.color, 'flat')\">{{ a.label || a.id || 'Ação' }}</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)\">Remover</button>\n </div>\n <div class=\"g gap-8 col-span-2\" *ngIf=\"a.command\">\n <mat-slide-toggle [(ngModel)]=\"a.showLoading\" (ngModelChange)=\"onActionsChanged()\">Mostrar loading</mat-slide-toggle>\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Confirmação</mat-panel-title></mat-expansion-panel-header>\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 [value]=\"a.confirmation?.type || ''\" (change)=\"applyConfirmationPreset(a, $event.value)\">\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 matInput [ngModel]=\"a.confirmation?.title\" (ngModelChange)=\"setConfirmationField(a, 'title', $event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mensagem</mat-label>\n <input matInput [ngModel]=\"a.confirmation?.message\" (ngModelChange)=\"setConfirmationField(a, 'message', $event)\" />\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>{{ a.confirmation?.title || 'Confirmar ação' }}</strong>\n </div>\n <div class=\"text-caption muted\">{{ a.confirmation?.message || 'Tem certeza que deseja continuar?' }}</div>\n <div class=\"text-caption\">\n <span class=\"confirm-type\" [ngClass]=\"(a.confirmation?.type || 'default')\">Tipo: {{ a.confirmation?.type || 'padrão' }}</span>\n </div>\n <div class=\"text-caption muted\" *ngIf=\"!a.confirmation?.title && !a.confirmation?.message\">\n Defina um título ou mensagem para a confirmação.\n </div>\n </div>\n </div>\n </mat-expansion-panel>\n <mat-form-field appearance=\"outline\" class=\"col-span-2\">\n <mat-label>Payload (JSON/Template)</mat-label>\n <textarea matInput rows=\"4\" [(ngModel)]=\"a.globalPayload\" (ngModelChange)=\"onActionsChanged()\"\n placeholder='{\"message\":\"${item.name} favoritado\"}'></textarea>\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n [matTooltip]=\"globalPayloadSchemaTooltip(a)\">\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error *ngIf=\"isGlobalPayloadInvalid(a.globalPayload)\">JSON inválido</mat-error>\n </mat-form-field>\n <div class=\"g row-flow gap-8 ai-center\">\n <button mat-stroked-button type=\"button\" (click)=\"applyGlobalPayloadExample(a)\">Inserir exemplo</button>\n <span class=\"muted text-caption\">{{ globalPayloadExampleHint(a) }}</span>\n </div>\n <mat-slide-toggle [(ngModel)]=\"a.emitLocal\" (ngModelChange)=\"onActionsChanged()\">Emitir evento local também</mat-slide-toggle>\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')\">Preset Tiles Moderno</button>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante</mat-label>\n <mat-select [(ngModel)]=\"working.layout.variant\" (ngModelChange)=\"onLayoutChanged()\">\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 [(ngModel)]=\"working.layout.model\" (ngModelChange)=\"onLayoutChanged()\">\n <ng-container *ngIf=\"working.layout.variant === 'list'; else cardModels\">\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 *ngIf=\"working.layout.variant === 'tiles'; else cardsOnly\">\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 [(ngModel)]=\"working.layout.lines\" (ngModelChange)=\"onLayoutChanged()\">\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 matInput type=\"number\" min=\"1\" [(ngModel)]=\"working.layout.pageSize\"\n (ngModelChange)=\"onPageSizeChange($event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Densidade</mat-label>\n <mat-select [(ngModel)]=\"working.layout.density\" (ngModelChange)=\"onLayoutChanged()\">\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\" *ngIf=\"working.layout.variant !== 'tiles'\">\n <mat-label>Divisores</mat-label>\n <mat-select [(ngModel)]=\"working.layout.dividers\" (ngModelChange)=\"onLayoutChanged()\">\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 [(ngModel)]=\"working.layout.groupBy\" (ngModelChange)=\"onLayoutChanged()\">\n <mat-option [value]=\"\">Nenhum</mat-option>\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</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 matInput [(ngModel)]=\"working.layout.groupBy\" (ngModelChange)=\"onLayoutChanged()\"\n placeholder=\"ex.: departamento\" />\n </mat-form-field>\n </ng-template>\n <mat-slide-toggle [(ngModel)]=\"working.layout.stickySectionHeader\" (ngModelChange)=\"onLayoutChanged()\">\n Header de seção fixo\n </mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"working.layout.virtualScroll\" (ngModelChange)=\"onLayoutChanged()\">\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 [(ngModel)]=\"working.ui.showSearch\" (ngModelChange)=\"onUiChanged()\">Mostrar\n busca</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"working.ui.showSort\" (ngModelChange)=\"onUiChanged()\">Mostrar\n ordenar</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"working.ui.showRange\" (ngModelChange)=\"onUiChanged()\">Mostrar faixa X–Y de\n Total</mat-slide-toggle>\n </div>\n <div class=\"g g-auto-220 gap-12 ai-end mt-12\" *ngIf=\"working.ui?.showSearch\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo para buscar</mat-label>\n <mat-select [(ngModel)]=\"working.ui.searchField\" (ngModelChange)=\"onUiChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</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 matInput [(ngModel)]=\"working.ui.searchPlaceholder\" (ngModelChange)=\"onUiChanged()\"\n placeholder=\"ex.: Buscar por título\" />\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()\">Adicionar opção</button>\n </div>\n <div class=\"g g-auto-220 gap-12 ai-end mt-12\" *ngFor=\"let r of uiSortRows; let i = index\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Rótulo</mat-label>\n <input matInput [(ngModel)]=\"r.label\" (ngModelChange)=\"onUiSortRowsChanged()\"\n placeholder=\"ex.: Mais recentes\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo</mat-label>\n <mat-select [(ngModel)]=\"r.field\" (ngModelChange)=\"onUiSortRowsChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</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 [(ngModel)]=\"r.dir\" (ngModelChange)=\"onUiSortRowsChanged()\">\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)\">Opção duplicada (campo+direção)</div>\n <div class=\"flex-end\"><button mat-button color=\"warn\" (click)=\"removeUiSortRow(i)\">Remover</button></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>{{ mappingPrimary.field || 'Não mapeado' }}</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 mat-stroked-button type=\"button\" (click)=\"mappingPrimary.type='text'; mappingPrimary.field='name'; onMappingChanged()\">Nome</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingPrimary.type='text'; mappingPrimary.field='title'; onMappingChanged()\">Título</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingPrimary.type='text'; mappingPrimary.field='name'; mappingSecondary.type='text'; mappingSecondary.field='role'; onMappingChanged()\">Nome + Papel</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 [(ngModel)]=\"mappingPrimary.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select [(ngModel)]=\"mappingPrimary.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of primaryTypeConfigs\" [value]=\"mt.type\">\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') { <praxis-meta-editor-text [model]=\"mappingPrimary\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingPrimary\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('currency') { <praxis-meta-editor-currency [model]=\"mappingPrimary\" (change)=\"onMappingChanged()\"></praxis-meta-editor-currency> }\n @case ('date') { <praxis-meta-editor-date [model]=\"mappingPrimary\" (change)=\"onMappingChanged()\"></praxis-meta-editor-date> }\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 appearance=\"outline\" *ngIf=\"mappingPrimary.type==='text' || mappingPrimary.type==='html'\">\n <mat-label>Classe CSS</mat-label>\n <input matInput [(ngModel)]=\"mappingPrimary.class\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" *ngIf=\"mappingPrimary.type==='text' || mappingPrimary.type==='html'\">\n <mat-label>Estilo Inline</mat-label>\n <input matInput [(ngModel)]=\"mappingPrimary.style\" (ngModelChange)=\"onMappingChanged()\" />\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 matInput [(ngModel)]=\"mappingPrimary.class\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo Inline</mat-label>\n <input matInput [(ngModel)]=\"mappingPrimary.style\" (ngModelChange)=\"onMappingChanged()\" />\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>{{ mappingSecondary.field || 'Não mapeado' }}</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 mat-stroked-button type=\"button\" (click)=\"mappingSecondary.type='text'; mappingSecondary.field='subtitle'; onMappingChanged()\">Subtítulo</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingSecondary.type='date'; mappingSecondary.field='hireDate'; mappingSecondary.dateStyle='short'; onMappingChanged()\">Data curta</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingSecondary.type='currency'; mappingSecondary.field='salary'; mappingSecondary.currencyCode='BRL'; mappingSecondary.locale='pt-BR'; onMappingChanged()\">Salário</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 [(ngModel)]=\"mappingSecondary.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select [(ngModel)]=\"mappingSecondary.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of secondaryTypeConfigs\" [value]=\"mt.type\">\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') { <praxis-meta-editor-text [model]=\"mappingSecondary\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingSecondary\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('currency') { <praxis-meta-editor-currency [model]=\"mappingSecondary\" (change)=\"onMappingChanged()\"></praxis-meta-editor-currency> }\n @case ('date') { <praxis-meta-editor-date [model]=\"mappingSecondary\" (change)=\"onMappingChanged()\"></praxis-meta-editor-date> }\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\"><mat-label>Classe CSS</mat-label><input matInput\n [(ngModel)]=\"mappingSecondary.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Estilo Inline</mat-label><input matInput\n [(ngModel)]=\"mappingSecondary.style\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n </div>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n\n <mat-expansion-panel [expanded]=\"!!mappingMeta.field || mappingMetaFields.length > 0\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>{{ getTypeIcon(mappingMeta.type || 'text') }}</mat-icon>\n <span>Meta (Detalhe/Lateral)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>\n {{ mappingMetaFields.length ? 'Campo composto (' + mappingMetaFields.length + ')' :\n (mappingMeta.field || 'Não mapeado') }}\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 [(ngModel)]=\"mappingMetaFields\" multiple (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"g g-1-1 ai-center gap-12\" *ngIf=\"mappingMetaFields.length\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Separador</mat-label>\n <input matInput [(ngModel)]=\"mappingMetaSeparator\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-slide-toggle [(ngModel)]=\"mappingMetaWrapSecondInParens\" (ngModelChange)=\"onMappingChanged()\">\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 [(ngModel)]=\"mappingMeta.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option [value]=\"undefined\">-- Nenhum --</mat-option>\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select [(ngModel)]=\"mappingMeta.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of metaTypeConfigs\" [value]=\"mt.type\">\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') { <praxis-meta-editor-text [model]=\"mappingMeta\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingMeta\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('currency') { <praxis-meta-editor-currency [model]=\"mappingMeta\" (change)=\"onMappingChanged()\"></praxis-meta-editor-currency> }\n @case ('date') { <praxis-meta-editor-date [model]=\"mappingMeta\" (change)=\"onMappingChanged()\"></praxis-meta-editor-date> }\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()\"></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()\"></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()\"></praxis-meta-editor-icon>\n }\n @case ('image') { <praxis-meta-editor-image [model]=\"mappingMeta\" (change)=\"onMappingChanged()\"></praxis-meta-editor-image> }\n }\n\n <!-- Advanced -->\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Opções\n avançadas</mat-panel-title></mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição</mat-label>\n <mat-select [(ngModel)]=\"mappingMeta.placement\" (ngModelChange)=\"onMappingChanged()\">\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 matInput [(ngModel)]=\"mappingMeta.class\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo</mat-label>\n <input matInput [(ngModel)]=\"mappingMeta.style\" (ngModelChange)=\"onMappingChanged()\" />\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>{{ getTypeIcon(mappingTrailing.type || 'text') }}</mat-icon>\n <span>Trailing (Direita)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>{{ 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 [(ngModel)]=\"mappingTrailing.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option [value]=\"undefined\">-- Nenhum --</mat-option>\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select [(ngModel)]=\"mappingTrailing.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of trailingTypeConfigs\" [value]=\"mt.type\">\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 mat-stroked-button type=\"button\" (click)=\"mappingTrailing.type='chip'; mappingTrailing.chipColor='primary'; mappingTrailing.chipVariant='filled'; mappingTrailing.field='status'; onMappingChanged()\">Status Chip</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingTrailing.type='icon'; mappingTrailing.field='status'; mappingTrailing.iconColor='primary'; onMappingChanged()\">Status Ícone</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingTrailing.type='currency'; mappingTrailing.field='price'; mappingTrailing.currencyCode='BRL'; mappingTrailing.locale='pt-BR'; onMappingChanged()\">Preço</button>\n </div>\n\n @switch (mappingTrailing.type) {\n @case ('text') { <praxis-meta-editor-text [model]=\"mappingTrailing\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingTrailing\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('currency') { <praxis-meta-editor-currency [model]=\"mappingTrailing\" (change)=\"onMappingChanged()\"></praxis-meta-editor-currency> }\n @case ('date') { <praxis-meta-editor-date [model]=\"mappingTrailing\" (change)=\"onMappingChanged()\"></praxis-meta-editor-date> }\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()\"></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()\"></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()\"></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 matInput [(ngModel)]=\"mappingTrailing.imageUrl\" (ngModelChange)=\"onMappingChanged()\"\n placeholder=\"https://... ou ${item.imageUrl}\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Use URL absoluta/relativa ou expressão ${item.campo}.\">\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error *ngIf=\"isImageUrlRequiredInvalid(mappingTrailing.imageUrl)\">URL/expr obrigatória</mat-error>\n </mat-form-field>\n </div>\n <praxis-meta-editor-image [model]=\"mappingTrailing\" (change)=\"onMappingChanged()\"></praxis-meta-editor-image>\n <div class=\"text-caption muted\" *ngIf=\"!mappingTrailing.imageUrl\">Defina a URL/expr para renderizar a imagem.</div>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Estilo</mat-panel-title></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\"><mat-label>Classe</mat-label><input matInput\n [(ngModel)]=\"mappingTrailing.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Style</mat-label><input matInput\n [(ngModel)]=\"mappingTrailing.style\" (ngModelChange)=\"onMappingChanged()\" /></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]=\"!!mappingLeading.field || (mappingLeading.type === 'icon' && !!mappingLeading.icon) || (mappingLeading.type === 'image' && !!mappingLeading.imageUrl)\">\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 {{ mappingLeading.type === 'icon' ? (mappingLeading.icon || 'Ícone estático') :\n (mappingLeading.field || (mappingLeading.imageUrl ? 'Imagem estática' : '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 [(ngModel)]=\"mappingLeading.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of leadingTypeConfigs\" [value]=\"mt.type\">\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 appearance=\"outline\"\n *ngIf=\"mappingLeading.type !== 'icon' && mappingLeading.type !== 'image'\">\n <mat-label>Campo</mat-label>\n <mat-select [(ngModel)]=\"mappingLeading.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</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 mat-stroked-button type=\"button\" (click)=\"mappingLeading.type='icon'; mappingLeading.icon='person'; mappingLeading.iconColor='primary'; onMappingChanged()\">Avatar Ícone</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingLeading.type='image'; mappingLeading.imageUrl='https://placehold.co/64x64'; mappingLeading.imageAlt='Avatar'; mappingLeading.badgeText='${item.status}'; onMappingChanged()\">Avatar Imagem + Badge</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingLeading.type='chip'; mappingLeading.field='tag'; mappingLeading.chipColor='accent'; mappingLeading.chipVariant='filled'; onMappingChanged()\">Chip Tag</button>\n </div>\n\n <!-- Icon Specific -->\n <div class=\"g g-1-auto gap-12 ai-center\" *ngIf=\"mappingLeading.type === 'icon'\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input matInput [(ngModel)]=\"mappingLeading.icon\" (ngModelChange)=\"onMappingChanged()\" />\n <button mat-icon-button matSuffix (click)=\"pickLeadingIcon()\"><mat-icon>search</mat-icon></button>\n </mat-form-field>\n <div class=\"text-caption muted\">Use pipe <code>|iconMap</code> no extra pipe para\n dinâmico</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()\"></praxis-meta-editor-icon>\n </div>\n\n <!-- Image Specific -->\n <div class=\"g g-1-1 gap-12\" *ngIf=\"mappingLeading.type === 'image'\">\n <mat-form-field appearance=\"outline\">\n <mat-label>URL da Imagem</mat-label>\n <input matInput [(ngModel)]=\"mappingLeading.imageUrl\" (ngModelChange)=\"onMappingChanged()\"\n placeholder=\"https://... ou ${item.imageUrl}\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Use URL absoluta/relativa ou expressão ${item.campo}.\">\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error *ngIf=\"isImageUrlRequiredInvalid(mappingLeading.imageUrl)\">URL/expr obrigatória</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Alt Text</mat-label>\n <input matInput [(ngModel)]=\"mappingLeading.imageAlt\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Badge Texto</mat-label>\n <input matInput [(ngModel)]=\"mappingLeading.badgeText\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n </div>\n\n @switch (mappingLeading.type) {\n @case ('text') { <praxis-meta-editor-text [model]=\"mappingLeading\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingLeading\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\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()\"></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()\"></praxis-meta-editor-rating>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Estilo</mat-panel-title></mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\"><mat-label>Classe</mat-label><input matInput\n [(ngModel)]=\"mappingLeading.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Style</mat-label><input matInput\n [(ngModel)]=\"mappingLeading.style\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n\n <!-- Features -->\n <mat-expansion-panel [expanded]=\"featuresVisible && features.length > 0\">\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>{{ features.length }} item(s)</mat-panel-description>\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 [(ngModel)]=\"featuresVisible\" (ngModelChange)=\"onFeaturesChanged()\">Ativar\n recursos</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"featuresSyncWithMeta\" (ngModelChange)=\"onMappingChanged()\">Sincronizar\n com Meta</mat-slide-toggle>\n <span class=\"flex-1\"></span>\n <mat-button-toggle-group [(ngModel)]=\"featuresMode\" (change)=\"onFeaturesChanged()\" appearance=\"legacy\">\n <mat-button-toggle value=\"icons+labels\"><mat-icon>view_list</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"icons-only\"><mat-icon>more_horiz</mat-icon></mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div *ngFor=\"let f of features; let i = index\" class=\"g g-auto-1 gap-8 ai-center p-8 border rounded mb-2\">\n <button mat-icon-button (click)=\"pickFeatureIcon(i)\"><mat-icon>{{ f.icon || 'search'\n }}</mat-icon></button>\n <mat-form-field appearance=\"outline\" class=\"dense-form-field no-sub\">\n <input matInput [(ngModel)]=\"f.expr\" (ngModelChange)=\"onFeaturesChanged()\" placeholder=\"Expr/Texto\" />\n </mat-form-field>\n <button mat-icon-button color=\"warn\" (click)=\"removeFeature(i)\"><mat-icon>delete</mat-icon></button>\n </div>\n <button mat-button color=\"primary\" (click)=\"addFeature()\"><mat-icon>add</mat-icon>\n Adicionar recurso</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>{{ getTypeIcon(mappingSectionHeader.type) }}</mat-icon>\n <span>Cabeçalho de Seção</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>{{ 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 [(ngModel)]=\"mappingSectionHeader.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of sectionHeaderTypeConfigs\" [value]=\"mt.type\">\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 matInput [(ngModel)]=\"mappingSectionHeader.expr\" (ngModelChange)=\"onMappingChanged()\"\n placeholder=\"item.key\" />\n </mat-form-field>\n </div>\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button mat-stroked-button type=\"button\" (click)=\"mappingSectionHeader.type='text'; mappingSectionHeader.expr='${item.key}'; onMappingChanged()\">Texto padrão</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingSectionHeader.type='chip'; mappingSectionHeader.chipColor='primary'; mappingSectionHeader.chipVariant='filled'; mappingSectionHeader.expr='${item.key}'; onMappingChanged()\">Chip padrão</button>\n </div>\n\n @switch (mappingSectionHeader.type) {\n @case ('text') { <praxis-meta-editor-text [model]=\"mappingSectionHeader\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingSectionHeader\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\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()\"></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()\"></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()\"></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 matInput [(ngModel)]=\"mappingSectionHeader.imageUrl\" (ngModelChange)=\"onMappingChanged()\" />\n <mat-error *ngIf=\"isImageUrlRequiredInvalid(mappingSectionHeader.imageUrl)\">URL/expr obrigatória</mat-error>\n </mat-form-field>\n </div>\n <div class=\"text-caption muted\" *ngIf=\"!mappingSectionHeader.imageUrl\">Defina a URL/expr para renderizar a imagem.</div>\n <praxis-meta-editor-image [model]=\"mappingSectionHeader\" (change)=\"onMappingChanged()\"></praxis-meta-editor-image>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Estilo</mat-panel-title></mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\"><mat-label>Classe</mat-label><input matInput\n [(ngModel)]=\"mappingSectionHeader.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Style</mat-label><input matInput\n [(ngModel)]=\"mappingSectionHeader.style\" (ngModelChange)=\"onMappingChanged()\" /></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>{{ mappingEmptyState.expr || 'Padrão' }}</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 [(ngModel)]=\"mappingEmptyState.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of emptyStateTypeConfigs\" [value]=\"mt.type\">\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 matInput [(ngModel)]=\"mappingEmptyState.expr\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n </div>\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button mat-stroked-button type=\"button\" (click)=\"mappingEmptyState.type='text'; mappingEmptyState.expr='Nenhum item disponível'; onMappingChanged()\">Mensagem padrão</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingEmptyState.type='image'; mappingEmptyState.imageUrl='/list-empty-state.svg'; mappingEmptyState.imageAlt='Sem resultados'; onMappingChanged()\">Imagem padrão</button>\n </div>\n\n @switch (mappingEmptyState.type) {\n @case ('text') { <praxis-meta-editor-text [model]=\"mappingEmptyState\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingEmptyState\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\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()\"></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()\"></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()\"></praxis-meta-editor-icon>\n }\n @case ('image') {\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\"><mat-label>URL Imagem</mat-label><input matInput\n [(ngModel)]=\"mappingEmptyState.imageUrl\" (ngModelChange)=\"onMappingChanged()\" />\n <mat-error *ngIf=\"isImageUrlRequiredInvalid(mappingEmptyState.imageUrl)\">URL/expr obrigatória</mat-error>\n </mat-form-field>\n </div>\n <div class=\"text-caption muted\" *ngIf=\"!mappingEmptyState.imageUrl\">Defina a URL/expr para renderizar a imagem.</div>\n <praxis-meta-editor-image [model]=\"mappingEmptyState\" (change)=\"onMappingChanged()\"></praxis-meta-editor-image>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Estilo</mat-panel-title></mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\"><mat-label>Classe</mat-label><input matInput\n [(ngModel)]=\"mappingEmptyState.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Style</mat-label><input matInput\n [(ngModel)]=\"mappingEmptyState.style\" (ngModelChange)=\"onMappingChanged()\" /></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()\">Aplicar mapeamento</button>\n <button mat-button (click)=\"inferFromFields()\" [disabled]=\"!fields.length\">Inferir do schema</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 matInput type=\"number\" min=\"0\" [(ngModel)]=\"skeletonCountInput\"\n (ngModelChange)=\"onSkeletonChanged($event)\" />\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 [(ngModel)]=\"skinPreviewTheme\" (change)=\"onSkinChanged()\" appearance=\"legacy\">\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 [config]=\"working\" [items]=\"previewData\"\n [theme]=\"skinPreviewTheme\"></praxis-list-skin-preview>\n </div>\n </div>\n </div>\n </div>\n\n </mat-tab>\n <mat-tab label=\"i18n/A11y\">\n <div class=\"editor-content grid gap-3\" *ngIf=\"working?.a11y && working?.events\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Locale padrão</mat-label>\n <input matInput [(ngModel)]=\"working.i18n.locale\" (ngModelChange)=\"markDirty()\" placeholder=\"ex.: pt-BR\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Moeda padrão</mat-label>\n <input matInput [(ngModel)]=\"working.i18n.currency\" (ngModelChange)=\"markDirty()\" placeholder=\"ex.: BRL\" />\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 matInput [(ngModel)]=\"working!.a11y!.ariaLabel\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>aria-labelledby</mat-label>\n <input matInput [(ngModel)]=\"working!.a11y!.ariaLabelledBy\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n </div>\n <div class=\"g g-auto-220 gap-12 ai-end\">\n <mat-slide-toggle [(ngModel)]=\"working!.a11y!.highContrast\" (ngModelChange)=\"markDirty()\">Alto\n contraste</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"working!.a11y!.reduceMotion\" (ngModelChange)=\"markDirty()\">Reduzir\n movimento</mat-slide-toggle>\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 matInput [(ngModel)]=\"working!.events!.itemClick\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>actionClick</mat-label>\n <input matInput [(ngModel)]=\"working!.events!.actionClick\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>selectionChange</mat-label>\n <input matInput [(ngModel)]=\"working!.events!.selectionChange\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>loaded</mat-label>\n <input matInput [(ngModel)]=\"working!.events!.loaded\" (ngModelChange)=\"markDirty()\" />\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 [(ngModel)]=\"working.selection.mode\" (ngModelChange)=\"onSelectionChanged()\">\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 matInput [(ngModel)]=\"working.selection.formControlName\" (ngModelChange)=\"onSelectionChanged()\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"formControlName\">\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 matInput [(ngModel)]=\"working.selection.formControlPath\" (ngModelChange)=\"onSelectionChanged()\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"formControlPath\">\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 matInput [(ngModel)]=\"working.selection.compareBy\" (ngModelChange)=\"onSelectionChanged()\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"Chave unica do item.\">\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 [(ngModel)]=\"working.selection.return\" (ngModelChange)=\"onSelectionChanged()\">\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')\">Pill Soft</button>\n <button mat-button (click)=\"applySkinPreset('gradient-tile')\">Gradient Tile</button>\n <button mat-button (click)=\"applySkinPreset('glass')\">Glass</button>\n <button mat-button (click)=\"applySkinPreset('elevated')\">Elevated</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')\">Neumorphism</button>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo</mat-label>\n <mat-select [(ngModel)]=\"working.skin.type\" (ngModelChange)=\"onSkinTypeChanged($event)\">\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 matInput [(ngModel)]=\"working.skin.radius\" (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: 1.25rem\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Sombra</mat-label>\n <input matInput [(ngModel)]=\"working.skin.shadow\" (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: var(--md-sys-elevation-level2)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Borda</mat-label>\n <input matInput [(ngModel)]=\"working.skin.border\" (ngModelChange)=\"onSkinChanged()\" />\n </mat-form-field>\n <mat-form-field *ngIf=\"working.skin.type==='glass'\" appearance=\"outline\">\n <mat-label>Desfoque</mat-label>\n <input matInput [(ngModel)]=\"working.skin.backdropBlur\" (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: 8px\" />\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 matInput [ngModel]=\"working.skin.gradient.from || ''\"\n (ngModelChange)=\"onSkinGradientChanged('from', $event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Degradê até</mat-label>\n <input matInput [ngModel]=\"working.skin.gradient.to || ''\"\n (ngModelChange)=\"onSkinGradientChanged('to', $event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ângulo</mat-label>\n <input matInput type=\"number\" [ngModel]=\"working.skin.gradient.angle ?? 135\"\n (ngModelChange)=\"onSkinGradientChanged('angle', $event)\" />\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 matInput [(ngModel)]=\"working.skin.class\" (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: my-list-skin\" />\n </mat-form-field>\n\n <div *ngIf=\"working.skin.type==='custom'\" class=\"g g-auto-220 gap-12 ai-end\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Estilo inline (skin.inlineStyle)</mat-label>\n <textarea matInput rows=\"4\" [(ngModel)]=\"working.skin.inlineStyle\" (ngModelChange)=\"onSkinChanged()\"\n [attr.placeholder]=\"':host{--p-list-radius: 1rem}'\"></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\">.my-list-skin .item-card {\n border-radius: 14px;\n border: 1px solid var(--md-sys-color-outline-variant);\n box-shadow: var(--md-sys-elevation-level2);\n}\n.my-list-skin .mat-mdc-list-item .list-item-content {\n backdrop-filter: blur(6px);\n}</pre>\n </div>\n </div>\n\n\n </div>\n </mat-tab>\n</mat-tab-group>\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 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: ['pill-soft', 'gradient-tile', 'glass', 'elevated', 'outline', 'flat', 'neumorphism', 'custom'],\n templateType: ['text', 'icon', 'image', 'chip', 'rating', 'currency', 'date', 'html', 'slot'],\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 { path: base, category: 'templating', valueKind: 'object', description: `Template for ${label}.` },\n { path: `${base}.type`, category: 'templating', valueKind: 'enum', allowedValues: ENUMS.templateType, description: `Template type for ${label}.` },\n { path: `${base}.expr`, category: 'templating', valueKind: 'expression', description: `Expression for ${label}.`, safetyNotes: 'Only ${item.path} with simple pipes (bool/date/map/number).' },\n { path: `${base}.class`, category: 'templating', valueKind: 'string', description: `CSS class for ${label}.` },\n { path: `${base}.style`, category: 'templating', valueKind: 'string', description: `Inline CSS for ${label}.` },\n { path: `${base}.color`, category: 'templating', valueKind: 'string', description: `Color for ${label}.` },\n { path: `${base}.variant`, category: 'templating', valueKind: 'enum', allowedValues: ENUMS.templateVariant, description: `Variant for ${label}.` },\n { path: `${base}.imageAlt`, category: 'templating', valueKind: 'string', description: `Image alt for ${label} (when type=image).` },\n { path: `${base}.badge`, category: 'templating', valueKind: 'object', description: `Badge for ${label}.` },\n { path: `${base}.badge.expr`, category: 'templating', valueKind: 'expression', description: `Badge expression for ${label}.`, safetyNotes: 'Only ${item.path} with simple pipes (bool/date/map/number).' },\n { path: `${base}.badge.color`, category: 'templating', valueKind: 'string', description: `Badge color for ${label}.` },\n { path: `${base}.badge.variant`, category: 'templating', valueKind: 'enum', allowedValues: ENUMS.templateVariant, description: `Badge variant for ${label}.` },\n { path: `${base}.props`, category: 'templating', valueKind: 'object', description: `Extra props for ${label} (type-specific).` },\n { path: `${base}.props.rating`, category: 'templating', valueKind: 'object', description: `Rating props (type=rating).` },\n { path: `${base}.props.rating.max`, category: 'templating', valueKind: 'number', description: `Rating max (1–10).` },\n { path: `${base}.props.rating.size`, category: 'templating', valueKind: 'number', description: `Rating icon size in px.` },\n { path: `${base}.props.rating.color`, category: 'templating', valueKind: 'string', description: `Rating color (theme/M3/custom).` },\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 { path: 'id', category: 'meta', valueKind: 'string', description: 'List id (used by persistence and editor).' },\n\n { path: 'dataSource', category: 'data', valueKind: 'object', description: 'Local or remote data source.' },\n { path: 'dataSource.data', category: 'data', valueKind: 'array', description: 'Local data array.' },\n { path: 'dataSource.resourcePath', category: 'data', valueKind: 'string', description: 'Remote resource path for GenericCrudService.' },\n { path: 'dataSource.query', category: 'data', valueKind: 'object', description: 'Initial query sent to /filter.' },\n { path: 'dataSource.sort', category: 'data', valueKind: 'array', description: 'Initial sort array (ex.: [\"name,asc\"]).' },\n { path: 'dataSource.sort[]', category: 'data', valueKind: 'string', description: 'Single sort entry (field,dir).' },\n\n { path: 'layout', category: 'layout', valueKind: 'object', description: 'Layout settings.' },\n { path: 'layout.variant', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutVariant, description: 'Layout variant.' },\n { path: 'layout.density', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutDensity, description: 'Layout density.' },\n { path: 'layout.lines', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutLines, description: 'Number of visible lines.' },\n { path: 'layout.dividers', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutDividers, description: 'Dividers between items.' },\n { path: 'layout.model', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutModel, description: 'Visual model for items.' },\n { path: 'layout.groupBy', category: 'layout', valueKind: 'string', description: 'Field name for grouping.' },\n { path: 'layout.stickySectionHeader', category: 'layout', valueKind: 'boolean', description: 'Sticky section header.' },\n { path: 'layout.virtualScroll', category: 'layout', valueKind: 'boolean', description: 'Enable virtual scroll (when supported).' },\n { path: 'layout.pageSize', category: 'layout', valueKind: 'number', description: 'Remote page size.' },\n\n { path: 'skin', category: 'skin', valueKind: 'object', description: 'Skin settings.' },\n { path: 'skin.type', category: 'skin', valueKind: 'enum', allowedValues: ENUMS.skinType, description: 'Skin type.' },\n { path: 'skin.gradient', category: 'skin', valueKind: 'object', description: 'Gradient options.' },\n { path: 'skin.gradient.from', category: 'skin', valueKind: 'string', description: 'Gradient start color.' },\n { path: 'skin.gradient.to', category: 'skin', valueKind: 'string', description: 'Gradient end color.' },\n { path: 'skin.gradient.angle', category: 'skin', valueKind: 'number', description: 'Gradient angle in degrees.' },\n { path: 'skin.radius', category: 'skin', valueKind: 'string', description: 'Border radius.' },\n { path: 'skin.shadow', category: 'skin', valueKind: 'string', description: 'Box shadow.' },\n { path: 'skin.border', category: 'skin', valueKind: 'string', description: 'Border style.' },\n { path: 'skin.backdropBlur', category: 'skin', valueKind: 'string', description: 'Backdrop blur (glass).' },\n { path: 'skin.class', category: 'skin', valueKind: 'string', description: 'Custom CSS class.' },\n { path: 'skin.inlineStyle', category: 'skin', valueKind: 'string', description: 'Inline CSS (sanitized).' },\n\n { path: 'selection', category: 'selection', valueKind: 'object', description: 'Selection settings.' },\n { path: 'selection.mode', category: 'selection', valueKind: 'enum', allowedValues: ENUMS.selectionMode, description: 'Selection mode.' },\n { path: 'selection.formControlName', category: 'selection', valueKind: 'string', description: 'FormControl name for binding.' },\n { path: 'selection.formControlPath', category: 'selection', valueKind: 'string', description: 'FormControl path for binding.' },\n { path: 'selection.compareBy', category: 'selection', valueKind: 'string', description: 'Field used to compare selections.' },\n { path: 'selection.return', category: 'selection', valueKind: 'enum', allowedValues: ENUMS.selectionReturn, description: 'Selection return payload.' },\n\n { path: 'templating', category: 'templating', valueKind: 'object', description: 'Templating settings.' },\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 { path: 'templating.metaPlacement', category: 'templating', valueKind: 'enum', allowedValues: ENUMS.metaPlacement, description: 'Meta placement in list variant.' },\n { path: 'templating.metaPrefixIcon', category: 'templating', valueKind: 'string', description: 'Prefix icon for meta.' },\n { path: 'templating.statusPosition', category: 'templating', valueKind: 'enum', allowedValues: ENUMS.statusPosition, description: 'Status position in cards/tiles.' },\n { path: 'templating.chipColorMap', category: 'templating', valueKind: 'object', description: 'Map value -> chip color.' },\n { path: 'templating.chipLabelMap', category: 'templating', valueKind: 'object', description: 'Map value -> label.' },\n { path: 'templating.iconColorMap', category: 'templating', valueKind: 'object', description: 'Map value/icon -> color.' },\n { path: 'templating.features', category: 'templating', valueKind: 'array', description: 'Extra feature line entries.' },\n { path: 'templating.features[].icon', category: 'templating', valueKind: 'string', description: 'Feature icon.' },\n { path: 'templating.features[].expr', category: 'templating', valueKind: 'expression', description: 'Feature label expression.' },\n { path: 'templating.features[].class', category: 'templating', valueKind: 'string', description: 'Feature CSS class.' },\n { path: 'templating.features[].style', category: 'templating', valueKind: 'string', description: 'Feature inline CSS.' },\n { path: 'templating.featuresVisible', category: 'templating', valueKind: 'boolean', description: 'Show features line.' },\n { path: 'templating.featuresMode', category: 'templating', valueKind: 'enum', allowedValues: ENUMS.featuresMode, description: 'Features render mode.' },\n { path: 'templating.skeleton', category: 'templating', valueKind: 'object', description: 'Skeleton loading config.' },\n { path: 'templating.skeleton.count', category: 'templating', valueKind: 'number', description: 'Skeleton items count.' },\n\n { path: 'actions', category: 'actions', valueKind: 'array', description: 'Item actions array.' },\n { path: 'actions[].id', category: 'actions', valueKind: 'string', description: 'Action id.' },\n { path: 'actions[].icon', category: 'actions', valueKind: 'string', description: 'Action icon.' },\n { path: 'actions[].label', category: 'actions', valueKind: 'string', description: 'Action label.' },\n { path: 'actions[].color', category: 'actions', valueKind: 'string', description: 'Action color.' },\n { path: 'actions[].kind', category: 'actions', valueKind: 'enum', allowedValues: ENUMS.actionKind, description: 'Action render kind.' },\n { path: 'actions[].buttonVariant', category: 'actions', valueKind: 'enum', allowedValues: ENUMS.actionButtonVariant, description: 'Action button variant.' },\n { path: 'actions[].showIf', category: 'actions', valueKind: 'expression', description: 'Visibility condition (simple equality).' },\n { path: 'actions[].emitPayload', category: 'actions', valueKind: 'enum', allowedValues: ENUMS.actionEmitPayload, description: 'Action emitted payload.' },\n { path: 'actions[].command', category: 'actions', valueKind: 'string', description: 'Global command (ex.: \"global:toast.success\").' },\n { path: 'actions[].globalPayload', category: 'actions', valueKind: 'object', description: 'Payload for global command (JSON/template).' },\n { path: 'actions[].emitLocal', category: 'actions', valueKind: 'boolean', description: 'Emit local actionClick even when command is set.' },\n\n { path: 'ui', category: 'ui', valueKind: 'object', description: 'Lightweight toolbar UI.' },\n { path: 'ui.showSearch', category: 'ui', valueKind: 'boolean', description: 'Show search input.' },\n { path: 'ui.searchField', category: 'ui', valueKind: 'string', description: 'Search field.' },\n { path: 'ui.searchPlaceholder', category: 'ui', valueKind: 'string', description: 'Search placeholder.' },\n { path: 'ui.showSort', category: 'ui', valueKind: 'boolean', description: 'Show sort selector.' },\n { path: 'ui.sortOptions', category: 'ui', valueKind: 'array', description: 'Sort options (string or {label,value}).' },\n { path: 'ui.sortOptions[].label', category: 'ui', valueKind: 'string', description: 'Sort option label.' },\n { path: 'ui.sortOptions[].value', category: 'ui', valueKind: 'string', description: 'Sort option value.' },\n { path: 'ui.showRange', category: 'ui', valueKind: 'boolean', description: 'Show range in footer.' },\n\n { path: 'i18n', category: 'i18n', valueKind: 'object', description: 'i18n map.' },\n { path: 'i18n.locale', category: 'i18n', valueKind: 'string', description: 'Locale (ex.: pt-BR).' },\n { path: 'i18n.currency', category: 'i18n', valueKind: 'string', description: 'Currency code (ex.: BRL).' },\n\n { path: 'a11y', category: 'a11y', valueKind: 'object', description: 'Accessibility settings.' },\n { path: 'a11y.ariaLabel', category: 'a11y', valueKind: 'string', description: 'aria-label for container.' },\n { path: 'a11y.ariaLabelledBy', category: 'a11y', valueKind: 'string', description: 'aria-labelledby for container.' },\n { path: 'a11y.highContrast', category: 'a11y', valueKind: 'boolean', description: 'High contrast mode.' },\n { path: 'a11y.reduceMotion', category: 'a11y', valueKind: 'boolean', description: 'Reduce motion.' },\n\n { path: 'events', category: 'events', valueKind: 'object', description: 'Event mappings.' },\n { path: 'events.itemClick', category: 'events', valueKind: 'string', description: 'Mapped itemClick event name.' },\n { path: 'events.actionClick', category: 'events', valueKind: 'string', description: 'Mapped actionClick event name.' },\n { path: 'events.selectionChange', category: 'events', valueKind: 'string', description: 'Mapped selectionChange event name.' },\n { path: 'events.loaded', category: 'events', valueKind: 'string', description: 'Mapped loaded event name.' },\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) ? bound.length : bound != null ? 1 : 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 = 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) => a && typeof (a as any).id === 'string' && (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)) 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((p) => keyOf(p) && keyOf(p) === keyOf(orig));\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))) merged.push(feat as any);\n });\n result.templating = { ...(result.templating || {}), features: merged };\n }\n\n return result;\n }\n\n private sanitizePatch(patch: Partial<PraxisListConfig>): 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)) 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; else delete r.max;\n if (size != null) r.size = size; else delete r.size;\n slot.props.rating = r;\n }\n };\n\n if (safe.layout) {\n if (safe.layout.variant && !inEnum(safe.layout.variant, enums.layoutVariant)) delete safe.layout.variant;\n if (safe.layout.density && !inEnum(safe.layout.density, enums.layoutDensity)) delete safe.layout.density;\n if (safe.layout.lines && !inEnum(safe.layout.lines, enums.layoutLines)) delete safe.layout.lines;\n if (safe.layout.dividers && !inEnum(safe.layout.dividers, enums.layoutDividers)) delete safe.layout.dividers;\n if (safe.layout.model && !inEnum(safe.layout.model, enums.layoutModel)) delete safe.layout.model;\n }\n if (safe.selection) {\n if (safe.selection.mode && !inEnum(safe.selection.mode, enums.selectionMode)) delete safe.selection.mode;\n if (safe.selection.return && !inEnum(safe.selection.return, enums.selectionReturn)) delete safe.selection.return;\n }\n if (safe.skin) {\n if (safe.skin.type && !inEnum(safe.skin.type, enums.skinType)) 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 ((safe.templating as any).metaPlacement && !inEnum((safe.templating as any).metaPlacement, enums.metaPlacement)) {\n delete (safe.templating as any).metaPlacement;\n }\n if ((safe.templating as any).statusPosition && !inEnum((safe.templating as any).statusPosition, enums.statusPosition)) {\n delete (safe.templating as any).statusPosition;\n }\n if ((safe.templating as any).featuresMode && !inEnum((safe.templating as any).featuresMode, enums.featuresMode)) {\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 (a?.buttonVariant && !inEnum(a.buttonVariant, enums.actionButtonVariant)) delete a.buttonVariant;\n if (a?.emitPayload && !inEnum(a.emitPayload, enums.actionEmitPayload)) 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","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 inject,\n isDevMode,\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} 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 { 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} from '@praxisui/core';\nimport type { GlobalDialogService } from '@praxisui/core';\nimport { PraxisListConfigEditor } from '../editors/list-config-editor.component';\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\nimport { inferTemplatingFromSchema } from '../utils/templating-inference';\nimport { ListAiAdapter } from '../ai/list-ai.adapter';\nimport { take } from 'rxjs/operators';\nimport { takeUntil } from 'rxjs/operators';\nimport { PraxisAiAssistantComponent } from '@praxisui/ai';\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 ],\n templateUrl: './praxis-list.component.html',\n styleUrls: ['./praxis-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [GenericCrudService, ListDataService],\n})\nexport class PraxisList implements OnInit, OnChanges, OnDestroy {\n private static nextSkinScopeId = 0;\n\n @Input() config!: PraxisListConfig;\n @Input({ required: true }) listId!: string;\n @Input() componentInstanceId?: string;\n @Input() form?: FormGroup | null;\n @Input() enableCustomization = false;\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<{ pageNumber: number; pageSize: number; sort?: string[] }>;\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\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 logContext: LoggerContext = {\n lib: 'praxis-list',\n component: 'PraxisList',\n };\n private readonly route = (() => { try { return inject(ActivatedRoute); } catch { return undefined as ActivatedRoute | undefined; } })();\n private readonly globalActions = (() => { try { return inject(GlobalActionService); } catch { return null; } })();\n private readonly dialog = (() => { try { return inject(GLOBAL_DIALOG_SERVICE); } catch { return null; } })() 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 readonly destroy$ = new Subject<void>();\n actionLoadingState: Record<string, boolean> = {};\n\n ngOnInit(): void {\n this.applyConfigChange();\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 || (\n !!changes['componentInstanceId']\n && !changes['componentInstanceId'].firstChange\n );\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.applyConfigChange();\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) return;\n this.hydratingPersistenceKey = key;\n const revisionAtLoadStart = this.externalConfigRevision;\n this.storage.loadConfig<PraxisListConfig>(key).pipe(take(1)).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 this.config = currentId ? { ...saved, id: currentId } : { ...saved };\n this.applyConfigChange();\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 applyConfigChange(): void {\n // Try infer templating upfront when using remote resource\n this.tryInferTemplatingFromSchema(this.config);\n this.data.setConfig(this.config);\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 this.setupSelectionBinding();\n this.applySkins();\n this.lastQuery = this.config?.dataSource?.query || {};\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.saveConfig(key, config).pipe(take(1)).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 ? this.form.get(name) : path ? this.form.get(path!) : 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 sectionHeaderTemplate = (key: string) =>\n this.evalSlot('sectionHeader', { key }) || { type: 'text', value: key };\n emptyStateTemplate = () =>\n this.evalSlot('emptyState', {}) || { type: 'text', value: 'Nenhum item disponível' };\n featureLabel(item: any, expr: string): string {\n const out = evaluateTemplate({ type: 'text', expr: expr || '' } as any, item);\n return out?.value ?? '';\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(item: any) {\n const actions = this.config?.actions || [];\n return actions.filter((a) => this.evaluateActionVisibility(a?.showIf, item));\n }\n\n onItemClick(item: any, index: number, section?: string): void {\n this.itemClick.emit({ item, index, section });\n }\n\n onActionKeydown(ev: Event): void {\n ev.stopPropagation();\n }\n\n async onActionClick(ev: MouseEvent, actionId: string, item: any, index: number): 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(action?.globalPayload, item, index);\n if (actionIdResolved) {\n if (this.globalActions && typeof this.globalActions.execute === 'function') {\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 ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {\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)) 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)) 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: { config: this.config, listId: this.listId },\n },\n });\n\n ref.applied$.pipe(takeUntil(this.destroy$)).subscribe((applied) => {\n const newCfg: PraxisListConfig = applied?.config || applied;\n this.onEditorApplied(newCfg);\n });\n ref.saved$.pipe(takeUntil(this.destroy$)).subscribe((saved) => {\n const newCfg: PraxisListConfig = saved?.config || saved;\n if (key) {\n this.persistConfig(key, newCfg);\n }\n this.onEditorApplied(newCfg);\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' ? op : ((op && (op as any).value) ? String((op as any).value) : '');\n }\n sortOptionLabel(op: any): string {\n if (op && typeof op === 'object' && (op as any).label) 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(currLen: number, ps: { pageNumber: number; pageSize: number }, total: number): 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.config = newCfg;\n // Optionally infer templates from backend schema if not defined\n this.tryInferTemplatingFromSchema(newCfg);\n // Re-apply runtime wiring\n this.data.setConfig(this.config);\n this.setupSelectionBinding();\n this.applySkins();\n this.cdr.markForCheck();\n }\n\n private onEditorApplied(newCfg: PraxisListConfig): void {\n this.applyConfigFromAdapter(newCfg);\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 = 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 { listId: this.listId, componentInstanceId: this.componentInstanceId },\n { dedupeKey: 'praxis-list:missing-list-id' },\n ),\n );\n }\n }\n\n private readonly crud = inject(GenericCrudService as any, { optional: true }) as GenericCrudService<any> | null;\n\n private tryInferTemplatingFromSchema(cfg: PraxisListConfig): void {\n const rp = cfg.dataSource?.resourcePath;\n if (!rp || !this.crud) return;\n const templ = cfg.templating || {};\n const needsPrimary = !templ.primary;\n if (!needsPrimary) return; // do not override when user already defined\n if (this.inferredForPath.has(rp)) return; // avoid repeated schema calls for the same path\n try {\n this.crud.configure(rp);\n this.crud\n .getSchema()\n .pipe(take(1))\n .subscribe({\n next: (fields: any[]) => {\n this.inferredForPath.add(rp);\n const names = (fields || [])\n .map((f: any) => f.name || f.field || f.key)\n .filter(Boolean) as string[];\n if (!names.length) return;\n const updated = inferTemplatingFromSchema(cfg, names);\n // Assign back to current config reference\n // Only assign if primary is still not defined to avoid loops\n if (!this.config?.templating?.primary) {\n this.config = updated;\n }\n },\n error: () => {\n // ignore schema errors; keep config as-is\n this.inferredForPath.add(rp);\n },\n });\n } catch {\n // ignore\n }\n }\n\n private evalSlot(\n slot: 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'sectionHeader' | 'emptyState',\n item: any,\n ) {\n const def = this.config?.templating?.[slot];\n if (!def) return null;\n if (def.type === 'currency') {\n const { baseExpr, param } = this.splitPipe(def.expr);\n const [codeFromExpr, localeFromExpr] = this.parseTwoParams(param);\n const currencyCode = codeFromExpr || (this.config?.i18n as any)?.currency || 'USD';\n const locale = localeFromExpr || (this.config?.i18n as any)?.locale || undefined;\n const rawStr = this.evalString(baseExpr, { item });\n const raw = Number(rawStr?.replace?.(/[^0-9.,-]/g, '').replace(',', '.') ?? rawStr);\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 = 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 ? new Intl.DateTimeFormat(locale, dateStyle).format(dt) : '';\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 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 // Optional label mapping\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 { type: def.type, value, class: def.class, style: def.style, color, variant: (def as any).variant } as any;\n }\n if (def.type === 'icon') {\n const out = evaluateTemplate(def, item) as any;\n // Optional color mapping from config.templating.iconColorMap\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 evaluateTemplate(def, item);\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 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({ type: 'text', expr } as any, ctx?.item ?? ctx);\n return res?.value ?? '';\n }\n\n private parseTwoParams(param?: string): [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 s === 'true' || s === '1' || s === 'yes' || s === 'sim' || s === 'on';\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 { return String(v ?? ''); }\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 = 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 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(`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 helpers for ngFor\n trackBySection = (_: number, s: ListSection<any>) => s?.key ?? _;\n trackByItem = (i: number, it: any) =>\n this.config?.selection?.compareBy ? (it?.[this.config.selection.compareBy] ?? i) : (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(showIf: string | undefined, item: any): boolean {\n const expression = typeof showIf === 'string' ? showIf.trim() : '';\n if (!expression) return true;\n\n const compareMatch = expression.match(/^(.*?)\\s*(===|!==|==|!=)\\s*(.*?)$/);\n if (compareMatch) {\n const left = this.resolveShowIfOperand(compareMatch[1], item);\n const right = this.resolveShowIfOperand(compareMatch[3], item);\n const op = compareMatch[2];\n if (!left.supported || !right.supported) {\n this.warnInvalidShowIfOnce(expression);\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.resolveShowIfOperand(expression, item);\n if (!single.supported) {\n this.warnInvalidShowIfOnce(expression);\n return false;\n }\n return Boolean(single.value);\n }\n\n private resolveShowIfOperand(\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 ((raw.startsWith('\"') && raw.endsWith('\"')) || (raw.startsWith(\"'\") && raw.endsWith(\"'\"))) {\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)) return { supported: true, value: Number(raw) };\n\n const templateMatch = raw.match(/^\\$\\{([^}]+)\\}$/);\n if (templateMatch) {\n return { supported: true, value: this.lookup({ item }, templateMatch[1].trim()) };\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 warnInvalidShowIfOnce(expression: string): void {\n if (!isDevMode()) return;\n this.logger.warnOnce(\n '[PraxisList] Invalid actions[].showIf expression. Falling back to hidden action.',\n this.buildLogOptions(\n { expression },\n {\n dedupeKey: `praxis-list:invalid-show-if:${expression}`,\n throttleKey: 'praxis-list:invalid-show-if',\n },\n ),\n );\n }\n\n private buildActionLoadingKey(actionId: string, item: any, index: number): 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 (idCandidate !== null && idCandidate !== undefined && idCandidate !== '') {\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","<div class=\"praxis-list-root\" [ngClass]=\"skinClasses\" [attr.data-skin-scope]=\"skinScopeId\"\n [attr.aria-label]=\"config.a11y?.ariaLabel || null\"\n [attr.aria-labelledby]=\"config.a11y?.ariaLabelledBy || null\">\n @if (inlineCss) {\n <style [attr.nonce]=\"cspNonce || null\" [textContent]=\"inlineCss\"></style>\n }\n\n @if (enableCustomization) {\n <div class=\"list-assistant\">\n <button mat-mini-fab color=\"primary\" (click)=\"openConfigEditor()\" matTooltip=\"Editar Configurações\"\n aria-label=\"Editar Configurações\">\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) { <div class=\"skeleton skeleton-line w-40\"></div> }\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) { <div class=\"skeleton skeleton-line w-40\"></div> }\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') { <mat-icon [praxisIcon]=\"empty.value\" [ngClass]=\"empty.class\"\n [color]=\"isThemeColor(empty.color) ? empty.color : undefined\"\n [style.cssText]=\"(empty.style ? empty.style + ';' : '') + iconStyle(empty.color)\"></mat-icon> }\n @case ('image') {\n <span class=\"inline-image\" [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\">\n <img [src]=\"empty.value\" [alt]=\"config.templating?.emptyState?.imageAlt || ''\" />\n @if (empty.badge?.value) { <mat-chip class=\"inline-badge\"\n [color]=\"isThemeColor(empty.badge?.color) ? empty.badge?.color : undefined\"\n [ngClass]=\"(((empty.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(empty.badge?.color, empty.badge?.variant)\">{{ empty.badge?.value }}</mat-chip> }\n </span>\n }\n @case ('chip') { <mat-chip [color]=\"isThemeColor(empty.color) ? empty.color : undefined\"\n [ngClass]=\"[empty.class || '', ((empty.variant || 'filled') === 'outlined') ? 'chip-outlined' : '']\"\n [style.cssText]=\"chipStyle(empty.color, empty.variant) + (empty.style ? ';' + empty.style : '')\">{{ empty.value }}</mat-chip> }\n @case ('rating') {\n <span [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\">\n @for (_ of ratingRange(empty); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, empty.value)\"\n [color]=\"ratingThemeColor(empty)\"\n [style.cssText]=\"ratingIconStyle(empty)\"></mat-icon> }\n </span>\n }\n @case ('html') { <span [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\" [innerHTML]=\"empty.value\"></span> }\n @default { <span [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\">{{ empty.value }}</span> }\n }\n }\n </div>\n }\n }\n\n <!-- List variant -->\n @if (isListVariant()) {\n <!-- Selection list -->\n @if (isSelectionEnabled()) {\n <mat-selection-list [multiple]=\"config.selection?.mode === 'multiple'\" [formControl]=\"boundControl\"\n (selectionChange)=\"onSelectionChange($event)\">\n @for (section of sections$ | async; track trackBySection($index, section)) {\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') { <mat-icon [praxisIcon]=\"sh.value\" [ngClass]=\"sh.class\"\n [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [style.cssText]=\"(sh.style ? sh.style + ';' : '') + iconStyle(sh.color)\"></mat-icon> }\n @case ('image') {\n <span class=\"inline-image\" [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n <img [src]=\"sh.value\" [alt]=\"config.templating?.sectionHeader?.imageAlt || ''\" />\n @if (sh.badge?.value) { <mat-chip class=\"inline-badge\"\n [color]=\"isThemeColor(sh.badge?.color) ? sh.badge?.color : undefined\"\n [ngClass]=\"(((sh.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(sh.badge?.color, sh.badge?.variant)\">{{ sh.badge?.value }}</mat-chip> }\n </span>\n }\n @case ('chip') { <mat-chip [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [ngClass]=\"[sh.class || '', ((sh.variant || 'filled') === 'outlined') ? 'chip-outlined' : '']\"\n [style.cssText]=\"chipStyle(sh.color, sh.variant) + (sh.style ? ';' + sh.style : '')\">{{ sh.value }}</mat-chip> }\n @case ('rating') {\n <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n @for (_ of ratingRange(sh); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, sh.value)\"\n [color]=\"ratingThemeColor(sh)\"\n [style.cssText]=\"ratingIconStyle(sh)\"></mat-icon> }\n </span>\n }\n @case ('html') { <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\" [innerHTML]=\"sh.value\"></span> }\n @default { <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">{{ sh.value }}</span> }\n }\n }\n </div>\n }\n @for (item of section.items; track trackByItem($index, item); let i = $index) {\n <mat-list-option\n [value]=\"item\"\n [attr.aria-label]=\"primary(item)?.value || null\"\n (click)=\"onItemClick(item, i, section.key || undefined)\"\n >\n <div class=\"list-item-content\">\n <div class=\"list-item-leading\">\n @if (leading(item); as lead) {\n @switch (lead.type) {\n @case ('icon') {\n <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\"\n [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [style.cssText]=\"(lead.style ? lead.style + ';' : '') + iconStyle(lead.color)\"></mat-icon>\n }\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) {\n <mat-chip class=\"lead-badge\" [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 }\n </div>\n }\n @case ('text') {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span>\n }\n @case ('chip') {\n <mat-chip [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [ngClass]=\"((lead.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [style.cssText]=\"chipStyle(lead.color, lead.variant)\">{{ lead.value }}</mat-chip>\n }\n @case ('rating') {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">\n @for (_ of ratingRange(lead); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, lead.value)\"\n [color]=\"ratingThemeColor(lead)\"\n [style.cssText]=\"ratingIconStyle(lead)\"></mat-icon> }\n </span>\n }\n @case ('html') {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\" [innerHTML]=\"lead.value\"></span>\n }\n @default {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span>\n }\n }\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n </div>\n <div class=\"list-item-text\">\n <div class=\"primary\" [ngClass]=\"primary(item)?.class\" [style.cssText]=\"primary(item)?.style\">{{\n primary(item)?.value }}</div>\n @if (layoutLines > 1) { <div class=\"secondary\" [ngClass]=\"secondary(item)?.class\"\n [style.cssText]=\"secondary(item)?.style\">{{ secondary(item)?.value }}</div> }\n @if (meta(item); as m) {\n @if ((config.templating?.metaPlacement === 'line' && (m?.type === 'text' || m?.type === 'date' || m?.type\n === 'currency')) || (layoutLines > 2 && (m?.type === 'text' || m?.type === 'date' || m?.type ===\n 'currency'))) {\n <div class=\"tertiary\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (config.templating?.metaPrefixIcon; as mpi) { <mat-icon [praxisIcon]=\"mpi\"></mat-icon> }\n {{ m.value }}\n </div>\n }\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\">{{\n featureLabel(item, f.expr) }}</span> }\n </span>\n }\n </div>\n }\n </div>\n <div class=\"list-item-trailing\">\n @if (meta(item); as m) {\n @if (!(((config.templating?.metaPlacement === 'line') || (layoutLines > 2)) && (m?.type === 'text' ||\n m?.type === 'date' || m?.type === 'currency'))) {\n <div class=\"meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @switch (m.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(m.color) ? m.color : undefined\"\n [ngClass]=\"((m.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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\n [praxisIcon]=\"starIcon(idx, m.value)\"\n [color]=\"ratingThemeColor(m)\"\n [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>@if (config.templating?.metaPrefixIcon; as mpi2) { <mat-icon [praxisIcon]=\"mpi2\"></mat-icon> }{{\n m.value }}</span> }\n }\n </div>\n }\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\"\n [ngClass]=\"((tr.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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') {\n <div class=\"lead-image\" [ngClass]=\"tr.class\" [style.cssText]=\"tr.style\">\n <img [src]=\"tr.value\" [alt]=\"config.templating?.trailing?.imageAlt || ''\" />\n @if (tr.badge?.value) { <mat-chip class=\"lead-badge\"\n [color]=\"isThemeColor(tr.badge?.color) ? tr.badge?.color : undefined\"\n [ngClass]=\"(((tr.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(tr.badge?.color, tr.badge?.variant)\">{{ tr.badge?.value }}</mat-chip> }\n </div>\n }\n @case ('rating') { @for (_ of ratingRange(tr); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, tr.value)\"\n [color]=\"ratingThemeColor(tr)\"\n [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 @if ((visibleActions(item) || []).length) {\n <div\n class=\"list-item-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\">\n @for (action of visibleActions(item); let aidx = $index; track action?.id ?? $index) {\n @if ((action.kind || 'icon') === 'icon') {\n <button mat-icon-button [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"action.icon\" [style.cssText]=\"iconStyle(action.color)\"></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === 'stroked') { <button mat-stroked-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'stroked')\"\n (click)=\"onActionClick($event, action.id, item, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (action.buttonVariant === 'raised') { <button mat-raised-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'raised')\"\n (click)=\"onActionClick($event, action.id, item, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (!action.buttonVariant || action.buttonVariant === 'flat') { <button mat-flat-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'flat')\"\n (click)=\"onActionClick($event, action.id, item, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n }\n }\n </div>\n }\n </div>\n </div>\n </mat-list-option>\n @if ((config.layout?.dividers === 'all' || config.layout?.dividers === 'between') && i < section.items.length - 1) { <mat-divider></mat-divider> }\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 (section of sections$ | async; track trackBySection($index, section); let sidx = $index) {\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') { <mat-icon [praxisIcon]=\"sh.value\" [ngClass]=\"sh.class\"\n [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [style.cssText]=\"(sh.style ? sh.style + ';' : '') + iconStyle(sh.color)\"></mat-icon>\n }\n @case ('image') {\n <span class=\"inline-image\" [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n <img [src]=\"sh.value\" [alt]=\"config.templating?.sectionHeader?.imageAlt || ''\" />\n @if (sh.badge?.value) { <mat-chip class=\"inline-badge\"\n [color]=\"isThemeColor(sh.badge?.color) ? sh.badge?.color : undefined\"\n [ngClass]=\"(((sh.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(sh.badge?.color, sh.badge?.variant)\">{{ sh.badge?.value }}</mat-chip> }\n </span>\n }\n @case ('chip') { <mat-chip [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [ngClass]=\"[sh.class || '', ((sh.variant || 'filled') === 'outlined') ? 'chip-outlined' : '']\"\n [style.cssText]=\"chipStyle(sh.color, sh.variant) + (sh.style ? ';' + sh.style : '')\">{{ sh.value }}</mat-chip> }\n @case ('rating') {\n <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n @for (_ of ratingRange(sh); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, sh.value)\"\n [color]=\"ratingThemeColor(sh)\"\n [style.cssText]=\"ratingIconStyle(sh)\"></mat-icon> }\n </span>\n }\n @case ('html') { <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\" [innerHTML]=\"sh.value\"></span> }\n @default { <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">{{ sh.value }}</span> }\n }\n }\n </div>\n }\n @for (item of section.items; track trackByItem($index, item); let i = $index) {\n <mat-list-item\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"primary(item)?.value || null\"\n (click)=\"onItemClick(item, i, section.key || undefined)\"\n (keydown.enter)=\"onItemClick(item, i, section.key || undefined)\"\n (keydown.space)=\"$event.preventDefault(); onItemClick(item, i, section.key || undefined)\"\n >\n <div class=\"list-item-content\">\n <div class=\"list-item-leading\">\n @if (leading(item); as lead) {\n @switch (lead.type) {\n @case ('icon') { <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\"\n [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [style.cssText]=\"(lead.style ? lead.style + ';' : '') + iconStyle(lead.color)\"></mat-icon>\n }\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\"\n [ngClass]=\"((lead.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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,\n lead.value)\" [color]=\"ratingThemeColor(lead)\" [style.cssText]=\"ratingIconStyle(lead)\"></mat-icon> } }\n @case ('html') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\"\n [innerHTML]=\"lead.value\"></span> }\n @default { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n }\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n </div>\n <div class=\"list-item-text\">\n <div class=\"primary\" [ngClass]=\"primary(item)?.class\" [style.cssText]=\"primary(item)?.style\">{{\n primary(item)?.value }}</div>\n @if (layoutLines > 1) { <div class=\"secondary\" [ngClass]=\"secondary(item)?.class\"\n [style.cssText]=\"secondary(item)?.style\">{{ secondary(item)?.value }}</div> }\n @if (meta(item); as m) {\n @if ((config.templating?.metaPlacement === 'line' && (m?.type === 'text' || m?.type === 'date' || m?.type\n === 'currency')) || (layoutLines > 2 && (m?.type === 'text' || m?.type === 'date' || m?.type ===\n 'currency'))) {\n <div class=\"tertiary\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (config.templating?.metaPrefixIcon; as mpi) { <mat-icon [praxisIcon]=\"mpi\"></mat-icon> }\n {{ m.value }}\n </div>\n }\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(item, f.expr) }}</span> }\n </span>\n }\n </div>\n }\n </div>\n <div class=\"list-item-trailing\">\n @if (meta(item); as m) {\n @if (!(((config.templating?.metaPlacement === 'line') || (layoutLines > 2)) && (m?.type === 'text' ||\n m?.type === 'date' || m?.type === 'currency'))) {\n <div class=\"meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\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,\n 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>@if (config.templating?.metaPrefixIcon; as mpi2) { <mat-icon [praxisIcon]=\"mpi2\"></mat-icon> }{{ m.value }}</span> }\n }\n </div>\n }\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') {\n <div class=\"lead-image\" [ngClass]=\"tr.class\" [style.cssText]=\"tr.style\">\n <img [src]=\"tr.value\" [alt]=\"config.templating?.trailing?.imageAlt || ''\" />\n @if (tr.badge?.value) { <mat-chip class=\"lead-badge\"\n [color]=\"isThemeColor(tr.badge?.color) ? tr.badge?.color : undefined\"\n [ngClass]=\"(((tr.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(tr.badge?.color, tr.badge?.variant)\">{{ tr.badge?.value }}</mat-chip> }\n </div>\n }\n @case ('rating') { @for (_ of ratingRange(tr); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx,\n 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 @if ((visibleActions(item) || []).length) {\n <div\n class=\"list-item-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\">\n @for (action of visibleActions(item); let aidx = $index; track action?.id ?? $index) {\n @if ((action.kind || 'icon') === 'icon') {\n <button mat-icon-button [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"action.icon\" [style.cssText]=\"iconStyle(action.color)\"></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === 'stroked') { <button mat-stroked-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'stroked')\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (action.buttonVariant === 'raised') { <button mat-raised-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'raised')\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (!action.buttonVariant || action.buttonVariant === 'flat') { <button mat-flat-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'flat')\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n }\n }\n </div>\n }\n </div>\n </div>\n </mat-list-item>\n @if ((config.layout?.dividers === 'all' || config.layout?.dividers === 'between') && i < section.items.length - 1) { <mat-divider></mat-divider> }\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 role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"primary(it)?.value || null\"\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') { <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\"\n [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [style.cssText]=\"(lead.style ? lead.style + ';' : '') + iconStyle(lead.color)\"></mat-icon>\n }\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\"\n [ngClass]=\"((lead.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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,\n lead.value)\" [color]=\"ratingThemeColor(lead)\" [style.cssText]=\"ratingIconStyle(lead)\"></mat-icon> } }\n @case ('html') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\"\n [innerHTML]=\"lead.value\"></span> }\n @default { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n }\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n </div>\n <div class=\"list-item-text\">\n <div class=\"primary\" [ngClass]=\"primary(it)?.class\" [style.cssText]=\"primary(it)?.style\">{{\n primary(it)?.value }}</div>\n @if (layoutLines > 1) { <div class=\"secondary\" [ngClass]=\"secondary(it)?.class\"\n [style.cssText]=\"secondary(it)?.style\">{{ secondary(it)?.value }}</div> }\n @if (meta(it); as m) {\n @if ((config.templating?.metaPlacement === 'line' && (m?.type === 'text' || m?.type === 'date' || m?.type\n === 'currency')) || (layoutLines > 2 && (m?.type === 'text' || m?.type === 'date' || m?.type ===\n 'currency'))) {\n <div class=\"tertiary\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (config.templating?.metaPrefixIcon; as mpi) { <mat-icon [praxisIcon]=\"mpi\"></mat-icon> }\n {{ m.value }}\n </div>\n }\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\">{{\n featureLabel(it, f.expr) }}</span> }\n </span>\n }\n </div>\n }\n </div>\n <div class=\"list-item-trailing\">\n @if (meta(it); as m) {\n @if (!(((config.templating?.metaPlacement === 'line') || (layoutLines > 2)) && (m?.type === 'text' ||\n m?.type === 'date' || m?.type === 'currency'))) {\n <div class=\"meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @switch (m.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(m.color) ? m.color : undefined\"\n [ngClass]=\"((m.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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,\n 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>@if (config.templating?.metaPrefixIcon; as mpi2) { <mat-icon [praxisIcon]=\"mpi2\"></mat-icon> }{{ m.value }}</span> }\n }\n </div>\n }\n }\n @if (trailing(it); as tr) {\n @if ((config.templating?.statusPosition || 'inline') === 'top-right' && (tr?.type === 'chip' || tr?.type\n === 'icon')) {\n <div class=\"status-overlay\">\n @if (tr?.type === 'chip') { <mat-chip [color]=\"isThemeColor(tr.color) ? tr.color : undefined\"\n [ngClass]=\"((tr.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [style.cssText]=\"chipStyle(tr.color, tr.variant)\">{{ tr.value }}</mat-chip>\n }\n @if (tr?.type === 'icon') { <mat-icon [praxisIcon]=\"tr.value\"\n [color]=\"isThemeColor(tr.color) ? tr.color : undefined\" [style.cssText]=\"iconStyle(tr.color)\"></mat-icon> }\n </div>\n } @else {\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\"\n [ngClass]=\"((tr.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [style.cssText]=\"chipStyle(tr.color, tr.variant)\">{{ tr.value }}</mat-chip>\n }\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') {\n <div class=\"lead-image\" [ngClass]=\"tr.class\" [style.cssText]=\"tr.style\">\n <img [src]=\"tr.value\" [alt]=\"config.templating?.trailing?.imageAlt || ''\" />\n @if (tr.badge?.value) { <mat-chip class=\"lead-badge\"\n [color]=\"isThemeColor(tr.badge?.color) ? tr.badge?.color : undefined\"\n [ngClass]=\"(((tr.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(tr.badge?.color, tr.badge?.variant)\">{{ tr.badge?.value }}</mat-chip> }\n </div>\n }\n @case ('rating') { @for (_ of ratingRange(tr); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx,\n 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 }\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 @for (action of visibleActions(it); let aidx = $index; track action?.id ?? $index) {\n @if ((action.kind || 'icon') === 'icon') {\n <button mat-icon-button [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n (click)=\"onActionClick($event, action.id, it, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"action.icon\" [style.cssText]=\"iconStyle(action.color)\"></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === 'stroked') { <button mat-stroked-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (action.buttonVariant === 'raised') { <button mat-raised-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (!action.buttonVariant || action.buttonVariant === 'flat') { <button mat-flat-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\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 role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"primary(it)?.value || null\"\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 [src]=\"lead.value\" [alt]=\"config.templating?.leading?.imageAlt || ''\" />\n }\n @case ('icon') { <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\"\n [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [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') {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">\n @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 </span>\n }\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\n @if (trailing(it); as tr) {\n @if ((config.templating?.statusPosition || 'inline') === '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\n <div class=\"tile-body\">\n <div class=\"primary\" [ngClass]=\"primary(it)?.class\" [style.cssText]=\"primary(it)?.style\">{{ primary(it)?.value }}</div>\n @if (layoutLines > 1) { <div class=\"secondary\" [ngClass]=\"secondary(it)?.class\" [style.cssText]=\"secondary(it)?.style\">{{ secondary(it)?.value }}</div> }\n\n @if (meta(it); as m) {\n <div class=\"tile-meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (config.templating?.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\n @if (featuresVisible()) {\n <div class=\"tiles-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\n @if (trailing(it); as tr2) {\n @if (!((config.templating?.statusPosition || 'inline') === 'top-right' && (tr2?.type === 'chip' || tr2?.type === 'icon'))) {\n <div class=\"tile-trailing\" [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 ('icon') { <mat-icon [praxisIcon]=\"tr2.value\" [color]=\"isThemeColor(tr2.color) ? tr2.color : undefined\" [style.cssText]=\"iconStyle(tr2.color)\"></mat-icon> }\n @case ('image') { <span class=\"inline-image\"><img [src]=\"tr2.value\" [alt]=\"tr2.imageAlt || ''\" /></span> }\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 ('html') { <span [innerHTML]=\"tr2.value\"></span> }\n @default { <span>{{ tr2.value }}</span> }\n }\n </div>\n }\n }\n </div>\n\n @if ((visibleActions(it) || []).length) {\n <div\n class=\"tile-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\">\n @for (action of visibleActions(it); let aidx = $index; track action?.id ?? $index) {\n @if ((action.kind || 'icon') === 'icon') {\n <button mat-icon-button [color]=\"isThemeColor(action.color) ? action.color : undefined\" (click)=\"onActionClick($event, action.id, it, i)\" [attr.aria-label]=\"action.label || action.id\" [disabled]=\"isActionLoading(action.id, it, i)\" [ngClass]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"action.icon\" [style.cssText]=\"iconStyle(action.color)\"></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === 'stroked') { <button mat-stroked-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (action.buttonVariant === 'raised') { <button mat-raised-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (!action.buttonVariant || action.buttonVariant === 'flat') { <button mat-flat-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\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()\">Anterior</button>\n <button mat-stroked-button color=\"primary\" (click)=\"nextPage()\">Próximo</button>\n <mat-form-field class=\"paginator-page-size\" appearance=\"outline\">\n <mat-label>Tam. página</mat-label>\n <mat-select (selectionChange)=\"setPageSize($event.value)\" [value]=\"config.layout?.pageSize || 10\">\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)\">{{ sortOptionLabel(op) }}</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>{{ config.ui?.searchPlaceholder || 'Buscar' }}</mat-label>\n <input matInput type=\"search\" (input)=\"onSearchInput($any($event.target).value)\" />\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\">{{ (total || 0) > 0 ? rangeStart(ps) : 0 }}–{{ rangeEnd(curr?.length || 0, ps, total || 0) }} de {{ total || 0\n }}</span>\n }\n }\n }\n } @else {\n @if (total$ | async; as total2) { <span class=\"muted\">Total: {{ total2 }}</span> }\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 ],\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';\n\ntype DemoScenario = 'operations' | '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 = 'elevated' | 'outline' | 'flat' | 'neumorphism' | 'pill-soft' | 'glass' | 'gradient-tile' | '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}\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\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: '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: '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: '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() === '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 variant = this.variant();\n const activeLines = this.lines();\n const isSelection = this.selectionMode() !== 'none';\n\n return {\n id: 'praxis-list-doc-live',\n dataSource: {\n data: this.liveItems(),\n resourcePath: 'docs/list',\n sort: [isCatalog ? 'rating,desc' : 'budget,desc'],\n },\n layout: {\n variant,\n density: this.density(),\n lines: activeLines,\n dividers: variant === 'list' ? 'between' : 'none',\n model: isCatalog ? 'hotel' : 'media',\n groupBy:\n !isCatalog && scenario !== 'empty' && variant === 'list'\n ? 'department'\n : undefined,\n pageSize: 8,\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 templating: this.buildTemplatingConfig(isCatalog),\n actions: [\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: true,\n searchField: 'title',\n searchPlaceholder: 'Buscar por titulo',\n showSort: true,\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: true,\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 === '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 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 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 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 private buildSkinConfig(typeOverride?: DemoSkin): PraxisListConfig['skin'] {\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 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 <header class=\"hero\">\n <div class=\"hero__copy\">\n <p class=\"hero__eyebrow\">Praxis UI - List</p>\n <h1>Pagina viva de documentacao do <code>praxis-list</code></h1>\n <p>\n Esta pagina entrega um laboratorio completo para validar recursos de\n layout, templating, selecao, acoes, skins e contratos de integracao do\n componente.\n </p>\n <div class=\"hero__badges\">\n <span>Live first</span>\n <span>Config orientada a JSON</span>\n <span>Cobertura corporativa</span>\n </div>\n </div>\n <div class=\"hero__panel\">\n <p class=\"hero__panel-title\">Recursos cobertos</p>\n <ul>\n @for (topic of featureCoverage; track topic.title) {\n <li>\n <strong>{{ topic.title }}</strong>\n <span>{{ topic.details }}</span>\n </li>\n }\n </ul>\n </div>\n </header>\n\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 (click)=\"setVariant(option.id)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\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 (click)=\"setLines($any(count))\"\n >\n {{ count }}\n </button>\n }\n </div>\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 (click)=\"setSelectionMode(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\">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 <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 </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/editors/list-config-editor.component';\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';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ListSkinService","i2","i1","i3","i5","i4","i6","i7","i9","i13","debounceTime","distinctUntilChanged","i8","i10"],"mappings":"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"}
|
|
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/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/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/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 { TemplateDef } from '../models/list-config.model';\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(expr: string, ctx: any): 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 fmt = new Intl.DateTimeFormat(localeArg || undefined, mapDateStyle(styleArg)).format(dt);\n out = fmt;\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 opt: Intl.NumberFormatOptions = {};\n if ((styleArg || '').toLowerCase() === 'compact') opt.notation = 'compact';\n out = new Intl.NumberFormat(localeArg || 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): { 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 // 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 });\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 });\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 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","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 model = config?.layout?.model || 'standard';\n const lines = config?.layout?.lines || 2;\n const classes = [\n `skin-${skin}`,\n `density-${density}`,\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) vars['--p-list-grad-angle'] = `${s.gradient.angle}deg`;\n const gradientForeground = resolveGradientForeground(s.gradient?.from, s.gradient?.to);\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(config?: PraxisListConfig, rootSelector = ':host', includeVars = true): string {\n const s = config?.skin;\n if (!s) return '';\n const vars = this.toCssVars(config);\n const varEntries = Object.entries(vars).map(([key, value]) => `${key}: ${value}`);\n const base = includeVars && varEntries.length ? `${rootSelector}{${varEntries.join(';')}}` : '';\n const extra = normalizeInlineCss(sanitizeCss((s.inlineStyle || '').trim()), rootSelector);\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(css: string, openIndex: number): { 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.replace(/^(:root|html|body)\\b/, rootSelector).trim();\n if (!rootNormalized) return rootSelector;\n if (rootNormalized.startsWith('&')) 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(')) 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.slice(0, 3).split('').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, CSP_NONCE, inject } 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\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 if (def.type === 'currency') {\n const { baseExpr, param } = this.splitPipe(def.expr);\n const [codeFromExpr, localeFromExpr] = this.parseTwoParams(param);\n const currencyCode = codeFromExpr || (this.config?.i18n as any)?.currency || 'USD';\n const locale = localeFromExpr || (this.config?.i18n as any)?.locale || undefined;\n const rawStr = this.evalString(baseExpr, { item });\n const raw = Number(rawStr?.replace?.(/[^0-9.,-]/g, '').replace(',', '.') ?? rawStr);\n const fmt = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currencyCode,\n }).format(raw ?? 0);\n return this.applyMaps({ type: def.type, value: fmt, class: def.class, style: def.style }, item);\n }\n if (def.type === 'date') {\n const { baseExpr, param } = this.splitPipe(def.expr);\n const [localeFromExpr, styleFromExpr] = this.parseTwoParams(param);\n const locale = 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 ? new Intl.DateTimeFormat(locale, dateStyle).format(dt) : '';\n return this.applyMaps({ type: def.type, value: fmt, class: def.class, style: def.style }, item);\n }\n const out = evaluateTemplate(def, item) 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({ type: 'text', expr } as any, ctx?.item ?? ctx);\n return res?.value ?? '';\n }\n\n private parseTwoParams(param?: string): [string | undefined, string | undefined] {\n if (!param) return [undefined, undefined];\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 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\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","import { PraxisListConfig, TemplateDef } 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';\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_DIVIDERS = ['none', 'between', 'all'] as const;\nconst LAYOUT_MODELS = ['standard', 'media', 'hotel'] as const;\nconst SELECTION_MODES = ['none', 'single', 'multiple'] as const;\nconst SELECTION_RETURNS = ['value', 'item', 'id'] 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(normalizeListAuthoringDocument(doc), context);\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(\n normalized.layout?.density,\n LAYOUT_DENSITIES,\n 'default',\n ),\n lines: normalizeLines(normalized.layout?.lines),\n dividers: oneOf(\n normalized.layout?.dividers,\n LAYOUT_DIVIDERS,\n 'between',\n ),\n model: oneOf(normalized.layout?.model, LAYOUT_MODELS, 'standard'),\n groupBy: trimToUndefined(normalized.layout?.groupBy),\n stickySectionHeader: readBoolean(\n normalized.layout?.stickySectionHeader,\n ),\n virtualScroll: readBoolean(normalized.layout?.virtualScroll),\n pageSize: normalizePositiveNumber(normalized.layout?.pageSize),\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(\n normalized.selection?.return,\n SELECTION_RETURNS,\n 'value',\n ),\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 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 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 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 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.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 rawSkin.type,\n SKIN_TYPES,\n 'list.skin.type.invalid',\n 'config.skin.type is invalid',\n 'config.skin.type',\n );\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\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 'sectionHeader',\n 'emptyState',\n ].forEach((slot) => {\n validateRawTemplateDef(\n diagnostics,\n asRecord(templating[slot]),\n `${basePath}.${slot}`,\n );\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\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 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 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: Array.isArray(templating.features)\n ? templating.features.map((feature) =>\n stripUndefinedDeep({\n ...feature,\n icon: trimToUndefined(feature?.icon),\n expr: trimToEmpty(feature?.expr),\n class: trimToUndefined(feature?.class),\n style: trimToUndefined(feature?.style),\n }),\n )\n : undefined,\n featuresVisible: readBoolean(templating.featuresVisible),\n featuresMode: oneOf(\n templating.featuresMode,\n FEATURES_MODES,\n templating.features?.length ? 'icons+labels' : undefined,\n ),\n skeleton: {\n count: normalizePositiveNumber(templating.skeleton?.count) ?? 3,\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: trimToEmpty(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 })\n : undefined,\n });\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 (\n option,\n ): 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 = stableSerialize(next) !== stableSerialize(normalizedCurrent);\n const dataSourceChanged =\n stableSerialize(next.dataSource) !== stableSerialize(normalizedCurrent?.dataSource) ||\n stableSerialize(next.layout) !== stableSerialize(normalizedCurrent?.layout) ||\n stableSerialize(next.ui) !== stableSerialize(normalizedCurrent?.ui);\n const selectionChanged =\n stableSerialize(next.selection) !== 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) !== 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(code: string, message: string, path?: string): EditorDiagnostic {\n return { level: 'error', code, message, path };\n}\n\nfunction infoDiagnostic(code: string, message: string, path?: string): EditorDiagnostic {\n return { level: 'info', 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 { Component, Inject, Optional, Input, DoCheck, inject } from '@angular/core';\nimport { BehaviorSubject, Subject, of } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, switchMap, tap, catchError } 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 { SETTINGS_PANEL_DATA, SettingsValueProvider } 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 { GenericCrudService, IconPickerService, PraxisIconDirective, GLOBAL_ACTION_CATALOG, GlobalActionCatalogEntry, PRAXIS_GLOBAL_ACTION_CATALOG, getGlobalActionCatalog } 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: { data?: any[]; resourcePath?: string; query?: Record<string, any>; sort?: string[] };\n layout: {\n variant: 'list' | 'cards' | 'tiles';\n density?: 'default' | 'comfortable' | 'compact';\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: 'pill-soft' | 'gradient-tile' | 'glass' | 'elevated' | 'outline' | 'flat' | 'neumorphism' | '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 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 ],\n templateUrl: './list-config-editor.component.html',\n\n styles: [`\n .confirm-type{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:11px;line-height:16px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}\n .confirm-type.danger{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}\n .confirm-type.warning{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}\n .confirm-type.info{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}\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(--md-sys-color-outline-variant);\n --mdc-outlined-text-field-hover-outline-color: var(--md-sys-color-outline);\n --mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);\n --mdc-outlined-text-field-error-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-focus-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-hover-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-label-text-color: var(--md-sys-color-on-surface-variant);\n --mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);\n --mdc-outlined-text-field-supporting-text-color: var(--md-sys-color-on-surface-variant);\n }\n .editor-content .mat-mdc-form-field.w-full { max-width: none; }\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{display:grid}\n .g-auto-220{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}\n .g-auto-200{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}\n .g-1-auto{grid-template-columns:1fr auto}\n .row-flow{grid-auto-flow:column}\n .gap-6{gap:6px}\n .gap-8{gap:8px}\n .gap-12{gap:12px}\n .ai-center{align-items:center}\n .ai-end{align-items:end}\n .mt-12{margin-top:12px}\n .mb-8{margin-bottom:8px}\n .mb-6{margin-bottom:6px}\n .my-8{margin:8px 0}\n .subtitle{margin:8px 0 4px;color:var(--editor-muted);font-weight:500}\n .section-title{color:var(--editor-muted);font-weight:600}\n .chips-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}\n .error{color:var(--md-sys-color-error);font-size:.85rem}\n .muted{color:var(--editor-muted)}\n .text-caption{color:var(--editor-muted);font-size:.8rem}\n :host ::ng-deep .mat-mdc-select-panel .option-icon{font-size:18px;margin-right:6px;vertical-align:middle}\n :host ::ng-deep .mat-mdc-select-panel .color-dot{width:10px;height:10px;border-radius:999px;display:inline-block;margin-right:6px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-outline)}\n :host ::ng-deep .mat-mdc-select-panel .color-primary{background:var(--md-sys-color-primary)}\n :host ::ng-deep .mat-mdc-select-panel .color-accent{background:var(--md-sys-color-tertiary)}\n :host ::ng-deep .mat-mdc-select-panel .color-warn{background:var(--md-sys-color-error)}\n :host ::ng-deep .mat-mdc-select-panel .color-default{background:var(--md-sys-color-outline)}\n @media (max-width: 1024px) {\n .editor-split { grid-template-columns: minmax(0, 1fr); }\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: { variant: 'list', lines: 2, density: 'default', dividers: 'between' },\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: { field?: string; type: 'text' | 'currency' | 'date' | 'html'; currencyCode?: string; locale?: string; dateStyle?: 'short' | 'medium' | 'long' | 'full'; class?: string; style?: string; extraPipe?: string } = { type: 'text' } as any;\n mappingSecondary: { field?: string; type: 'text' | 'currency' | 'date' | 'html'; currencyCode?: string; locale?: string; dateStyle?: 'short' | 'medium' | 'long' | 'full'; class?: string; style?: string; extraPipe?: string } = { type: 'text' } as any;\n mappingMeta: { field?: string; type: 'text' | 'currency' | 'date' | 'chip' | 'rating' | 'icon' | 'image' | 'html'; currencyCode?: string; locale?: string; dateStyle?: 'short' | 'medium' | 'long' | 'full'; class?: string; style?: string; placement?: 'side' | 'line'; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; imageAlt?: string; extraPipe?: string } = { type: 'text' } as any;\n mappingMetaPrefixIcon?: string;\n mappingTrailing: { field?: string; type?: 'text' | 'currency' | 'date' | 'chip' | 'icon' | 'rating' | 'html' | 'image'; class?: string; style?: string; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; imageUrl?: string; imageAlt?: string; currencyCode?: string; locale?: string; dateStyle?: 'short' | 'medium' | 'long' | 'full'; extraPipe?: string } = {} as any;\n mappingLeading: { field?: string; type: 'icon' | 'image' | 'text' | 'chip' | 'rating' | 'html'; icon?: string; imageUrl?: string; imageAlt?: string; badgeText?: string; badgeColor?: string; badgeVariant?: 'filled' | 'outlined'; class?: string; style?: string; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; extraPipe?: string } = { type: 'icon' } as any;\n mappingSectionHeader: { type: 'text' | 'chip' | 'icon' | 'image' | 'rating' | 'html'; expr?: string; class?: string; style?: string; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; imageUrl?: string; imageAlt?: string; extraPipe?: string } = { type: 'text', expr: '${item.key}' } as any;\n mappingEmptyState: { type: 'text' | 'chip' | 'icon' | 'image' | 'rating' | 'html'; expr?: string; class?: string; style?: string; chipColor?: string; chipVariant?: 'filled' | 'outlined'; ratingColor?: string; ratingSize?: number; ratingMax?: number; iconColor?: string; imageUrl?: string; imageAlt?: string; extraPipe?: string } = { 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 // Meta composition (multi-field)\n mappingMetaFields: string[] = [];\n mappingMetaSeparator: string = ' • ';\n mappingMetaWrapSecondInParens = false;\n featuresSyncWithMeta = false;\n\n // Features editor state\n features: Array<{ icon?: string; expr: string; class?: string; style?: string }> = [];\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 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, { optional: true }) 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({ value: (this.mappingLeading as any)?.icon });\n if (chosen == null) return;\n this.mappingLeading = { ...(this.mappingLeading || { type: 'icon' as const }), type: 'icon', icon: chosen } 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({ value: this.mappingMetaPrefixIcon || '' });\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(parseLegacyOrListDocument(raw), {\n schemaFieldNames: this.fields,\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(serializeListAuthoringDocument(this.buildCurrentDocument()));\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: { from: 'var(--md-sys-color-primary)', to: 'var(--md-sys-color-tertiary)', angle: 135 },\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 = { ...(draft.i18n || {}), locale: 'pt-BR', currency: 'BRL' };\n draft.templating = {\n ...(draft.templating || {}),\n leading: { type: 'image', expr: '${item.imageUrl}', imageAlt: 'Catalog' },\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 'disponível': 'primary',\n 'últimas vagas': 'accent',\n 'indisponível': '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 { title: 'Maria', subtitle: 'Product Designer', tag: 'A+', salary: 12345.67, hireDate: '2022-03-01', rating: 4.5, name: 'Aurora Deluxe', status: 'Disponível', price: 980.0, imageUrl: '/list-demo-hotel-1.svg' },\n { title: 'João', subtitle: 'Frontend Engineer', tag: 'B', salary: 9876.0, hireDate: '2023-01-12', rating: 3.8, name: 'Skyline Classic', status: 'Últimas vagas', price: 640.0, imageUrl: '/list-demo-hotel-2.svg' },\n { title: 'Ana', subtitle: 'QA Analyst', tag: 'C', salary: 7564.32, hireDate: '2021-10-05', rating: 4.9, name: 'Urban Loft', status: 'Indisponível', price: 520.0, imageUrl: '/list-demo-hotel-1.svg' },\n ];\n skinPreviewTheme: 'light' | 'dark' | 'grid' = 'light';\n\n readonly metaTypeConfigs: Array<{ type: 'text' | 'chip' | 'rating' | 'currency' | 'date' | 'icon' | 'image' | 'html'; label: string; icon: string; props?: string[] }> = [\n { type: 'text', label: 'Texto', icon: 'text_fields' },\n { type: 'chip', label: 'Chip', icon: 'label', props: ['chipColor', 'chipVariant'] },\n { type: 'rating', label: 'Rating', icon: 'star', props: ['ratingColor', 'ratingSize', 'ratingMax'] },\n { type: 'icon', label: 'Ícone', icon: 'emoji_symbols', props: ['iconColor'] },\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) => ['text', 'currency', 'date', 'html'].includes(t.type));\n readonly secondaryTypeConfigs = this.primaryTypeConfigs;\n readonly leadingTypeConfigs = this.metaTypeConfigs.filter((t) => ['icon', 'image', 'text', 'chip', 'rating', 'html'].includes(t.type));\n readonly trailingTypeConfigs = this.metaTypeConfigs.filter((t) => ['text', 'chip', 'rating', 'currency', 'date', 'icon', 'html', 'image'].includes(t.type));\n readonly sectionHeaderTypeConfigs = this.metaTypeConfigs.filter((t) => ['text', 'chip', 'icon', 'image', 'rating', 'html'].includes(t.type));\n readonly emptyStateTypeConfigs = this.metaTypeConfigs.filter((t) => ['text', 'chip', 'icon', 'image', 'rating', 'html'].includes(t.type));\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 { value: 'var(--md-sys-color-on-surface-variant)', label: 'M3 On Surface Variant' },\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(obj: any, prop: string, fallback = 'var(--md-sys-color-primary)'): void {\n if (!obj) return;\n const current = obj[prop];\n obj[prop] = this.isCustomColor(current) ? current : fallback;\n this.onMappingChanged();\n }\n enableCustomActionColor(action: any, fallback = 'var(--md-sys-color-primary)'): 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({ id: 'newAction', icon: 'bolt', label: 'Ação', color: undefined, kind: 'icon' });\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(action: any, field: 'title' | 'message', value: string): void {\n if (!action) return;\n this.ensureConfirmation(action);\n action.confirmation[field] = value;\n this.onActionsChanged();\n }\n applyConfirmationPreset(action: any, type?: 'danger' | 'warning' | 'info' | ''): 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) action.confirmation.title = 'Confirmar ação';\n if (!action.confirmation.message) action.confirmation.message = '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) 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) 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(entry.payloadSchema.example, null, 2);\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>((schema.required || []).map((r) => String(r)));\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 = 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 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 = 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(prop: 'from' | 'to' | 'angle', value: string | number): 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): { from: string; to: string; angle?: number } {\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(); 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 = [...(this.uiSortRows || []), { label: '', field: '', dir: 'desc' }];\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 => ({ label: (r.label || '').trim() || `${r.field},${r.dir || 'desc'}`, value: `${r.field},${r.dir || 'desc'}` }));\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 = `${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<{ label?: string; field?: string; dir?: 'asc' | 'desc' }> = [];\n for (const op of arr) {\n if (typeof op === 'string') {\n const [f, d] = op.split(','); 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(','); rows.push({ label: (op as any).label, field: f, dir: (d as any) || 'asc' });\n }\n }\n this.uiSortRows = rows;\n }\n\n // Legacy method retained to avoid breaking references; no-op now.\n private loadFieldsIfNeeded(): void { /* replaced by setupSchemaWatcher */ }\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 { type: slot.type, expr: pipe ? base + '|' + pipe : base, class: slot.class, style: slot.style } as any;\n }\n if (slot.type === 'chip') return { type: 'chip', expr: base, class: slot.class, style: slot.style, color: slot.chipColor, variant: slot.chipVariant } as any;\n if (slot.type === 'icon') {\n const pipe = (slot.extraPipe || '').trim();\n const expr = pipe ? base + '|' + pipe : base;\n return { type: 'icon', expr, class: slot.class, style: slot.style, color: slot.iconColor } as any;\n }\n if (slot.type === 'image') {\n const expr = (slot.imageUrl || '').trim() || base;\n return { type: 'image', expr, class: slot.class, style: slot.style, imageAlt: slot.imageAlt } as any;\n }\n if (slot.type === 'image') {\n return { type: 'image', expr: base, class: slot.class, style: slot.style, imageAlt: slot.imageAlt } 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 { type: 'rating', expr: base, class: slot.class, style: slot.style, props } 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 { type: 'currency', expr: param ? base + '|' + param : base, class: slot.class, style: slot.style } 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 { type: 'date', expr: param ? base + '|' + param : base, class: slot.class, style: slot.style } as any;\n }\n if (slot.type === 'icon') {\n const pipe = (slot.extraPipe || '').trim();\n const expr = pipe ? base + '|' + pipe : base;\n return { type: 'icon', expr, class: slot.class, style: slot.style } 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 { type: 'chip', expr, class: slot.class, style: slot.style, color: slot.chipColor, variant: slot.chipVariant } as any;\n }\n if (slot.type === 'icon') {\n return { type: 'icon', expr, class: slot.class, style: slot.style, color: slot.iconColor } 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 { type: 'rating', expr, class: slot.class, style: slot.style, props } as any;\n }\n if (slot.type === 'image') {\n const imgExpr = (slot.imageUrl || '').trim();\n if (!imgExpr) return undefined;\n return { type: 'image', expr: imgExpr, class: slot.class, style: slot.style, imageAlt: slot.imageAlt } as any;\n }\n return { type: slot.type, expr, class: slot.class, style: slot.style } 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 ? build(this.mappingTrailing) : undefined;\n const l = (this.mappingLeading?.field && this.mappingLeading.type !== 'icon' && 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 ((this.mappingMeta?.type || 'text') === 'text' && this.mappingMetaFields && this.mappingMetaFields.length) {\n const parts = this.mappingMetaFields.map((f, idx) => {\n const token = '${item.' + f + '}';\n if (idx === 1 && this.mappingMetaWrapSecondInParens) return '(' + token + ')';\n return token;\n });\n const sep = this.mappingMetaSeparator ?? ' ';\n t.meta = { type: 'text', expr: parts.join(sep), class: this.mappingMeta.class, style: this.mappingMeta.style } 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 (this.mappingLeading?.type === 'icon' && this.mappingLeading.icon && this.mappingLeading.icon.trim()) {\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 (this.mappingLeading?.type === 'image' && this.mappingLeading.imageUrl && this.mappingLeading.imageUrl.trim()) {\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 expr: this.mappingLeading.badgeText,\n color: this.mappingLeading.badgeColor as any,\n variant: (this.mappingLeading.badgeVariant as any) || 'filled',\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 = (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 => ({ icon: f.icon, expr: f.expr, class: f.class, style: f.style }));\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 = this.skeletonCountInput > 0 ? { count: this.skeletonCountInput } : 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 = [...(this.iconColorMapEntries || []), { key: '', color: undefined }];\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(([key, color]) => ({ key, color })) as any;\n this.updateMappingDirty();\n this.markDirty();\n }\n\n addChipColorEntry(): void {\n this.chipColorMapEntries = [...(this.chipColorMapEntries || []), { key: '', color: undefined }];\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(([key, color]) => ({ key, color })) as any;\n this.updateMappingDirty();\n this.markDirty();\n }\n\n addChipLabelEntry(): void {\n this.chipLabelMapEntries = [...(this.chipLabelMapEntries || []), { key: '', label: '' }];\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(([key, label]) => ({ key, label })) 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(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, field: string): void {\n const token = '${item.' + field + '}';\n this.insertIntoFeatureExpr(index, inputEl, token);\n }\n insertLiteralAt(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, text: string): void {\n this.insertIntoFeatureExpr(index, inputEl, text);\n }\n wrapSelectionAt(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, left: string, right: string): 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(index, inputEl, newExpr, start + left.length + sel.length + right.length);\n }\n private insertIntoFeatureExpr(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, text: string): 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(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, newExpr: string, caretPos: number): 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 = (param?: string): { currencyCode?: string; locale?: string } => {\n if (!param) return {};\n const [code, loc] = param.split(':').map((s) => s?.trim()).filter(Boolean) as string[];\n return { currencyCode: code, locale: loc };\n };\n const parseDate = (param?: string): { 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)) 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 = { field, type: templ.primary.type || 'text', class: templ.primary.class, style: templ.primary.style };\n if (templ.primary.type === 'currency') 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') base.extraPipe = param;\n this.mappingPrimary = base;\n }\n if (templ.secondary) {\n const { field, param } = parseExpr(templ.secondary.expr);\n const base: any = { field, type: templ.secondary.type || 'text', class: templ.secondary.class, style: templ.secondary.style };\n if (templ.secondary.type === 'currency') Object.assign(base, parseCurrency(param));\n if (templ.secondary.type === 'date') Object.assign(base, parseDate(param));\n if (templ.secondary.type === 'text' || templ.secondary.type === 'html') base.extraPipe = param;\n this.mappingSecondary = base;\n }\n if (templ.meta) {\n const { field, param } = parseExpr(templ.meta.expr);\n const base: any = { field, type: templ.meta.type || 'text', class: templ.meta.class, style: templ.meta.style };\n if (templ.meta.type === 'currency') Object.assign(base, parseCurrency(param));\n if (templ.meta.type === 'date') Object.assign(base, parseDate(param));\n if (templ.meta.type === 'text' || templ.meta.type === 'html' || templ.meta.type === 'icon') base.extraPipe = param;\n this.mappingMeta = base;\n if (templ.metaPlacement) this.mappingMeta.placement = templ.metaPlacement;\n if ((templ as any).metaPrefixIcon) this.mappingMetaPrefixIcon = (templ as any).metaPrefixIcon;\n if (templ.meta?.color) this.mappingMeta.chipColor = templ.meta.color;\n if (templ.meta?.variant) this.mappingMeta.chipVariant = templ.meta.variant;\n if (templ.meta?.type === 'icon' && (templ.meta as any).color) this.mappingMeta.iconColor = (templ.meta as any).color;\n if (templ.meta?.type === 'image' && (templ.meta as any).imageAlt) 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 (typeof templ.meta?.expr === 'string' && /\\$\\{\\s*item\\./.test(templ.meta.expr)) {\n const guessSep = / • /.test(templ.meta.expr) ? ' • ' : (/,\\s*/.test(templ.meta.expr) ? ', ' : ' ');\n const matches = Array.from(templ.meta.expr.matchAll(/\\$\\{\\s*item\\.([^}]+)\\s*}/g)).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 = /\\(\\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 = { field, type: templ.trailing.type || 'text', class: templ.trailing.class, style: templ.trailing.style };\n if (templ.trailing.type === 'currency') Object.assign(base, parseCurrency(param));\n if (templ.trailing.type === 'date') Object.assign(base, parseDate(param));\n if (templ.trailing.type === 'icon' || templ.trailing.type === 'text' || templ.trailing.type === 'html') base.extraPipe = param;\n this.mappingTrailing = base;\n if (templ.trailing?.color) this.mappingTrailing.chipColor = templ.trailing.color;\n if (templ.trailing?.variant) this.mappingTrailing.chipVariant = templ.trailing.variant;\n if (templ.trailing?.type === 'image' && typeof templ.trailing.expr === 'string') this.mappingTrailing.imageUrl = templ.trailing.expr;\n if (templ.trailing?.type === 'image' && (templ.trailing as any).imageAlt) this.mappingTrailing.imageAlt = (templ.trailing as any).imageAlt;\n if (templ.trailing?.type === 'icon' && (templ.trailing as any).color) 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 Record<string, string> | undefined;\n this.iconColorMapEntries = Object.entries(icm || {}).map(([k, v]) => ({ key: k, color: v })) as any;\n if ((this.mappingTrailing?.field || '').toLowerCase() === 'status' && (!this.iconColorMapEntries || this.iconColorMapEntries.length === 0)) {\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 (templ.leading?.type === 'icon' && typeof templ.leading.expr === 'string') {\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 (templ.leading?.type === 'image' && typeof templ.leading.expr === 'string') {\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 (templ.leading?.type && ['text', 'chip', 'rating', 'html'].includes(templ.leading.type)) {\n const { field, param } = parseExpr(templ.leading.expr);\n const base: any = { field, type: templ.leading.type, class: templ.leading.class, style: templ.leading.style };\n if (templ.leading.type === 'text' || templ.leading.type === 'html') base.extraPipe = param;\n if (templ.leading.type === 'chip') {\n base.chipColor = templ.leading.color;\n base.chipVariant = templ.leading.variant;\n }\n if (templ.leading.type === 'rating' && (templ.leading as any)?.props?.rating) {\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: templ.sectionHeader.type === 'image' ? templ.sectionHeader.expr : undefined,\n imageAlt: templ.sectionHeader.imageAlt,\n iconColor: (templ.sectionHeader as any).color,\n extraPipe: (templ.sectionHeader.type === 'text' || templ.sectionHeader.type === 'html' || templ.sectionHeader.type === 'icon') ? shPipe.pipe : 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: templ.emptyState.type === 'image' ? templ.emptyState.expr : undefined,\n imageAlt: templ.emptyState.imageAlt,\n iconColor: (templ.emptyState as any).color,\n extraPipe: (templ.emptyState.type === 'text' || templ.emptyState.type === 'html' || templ.emptyState.type === 'icon') ? esPipe.pipe : 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) => ({ icon: f.icon, expr: f.expr, class: f.class, style: f.style }));\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 Record<string, string> | undefined;\n this.chipColorMapEntries = Object.entries(ccm || {}).map(([k, v]) => ({ key: k, color: v })) as any;\n const clm = (templ as any)?.chipLabelMap as Record<string, string> | undefined;\n this.chipLabelMapEntries = Object.entries(clm || {}).map(([k, v]) => ({ key: k, label: v })) 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(serializeListAuthoringDocument(this.document));\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 = 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);\n }\n\n verify(): void {\n setTimeout(() => {\n const diagnostics = validateListAuthoringDocument(this.buildCurrentDocument(), {\n schemaFieldNames: this.fields,\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) => ({ icon: this.suggestIcon(f), expr: '${item.' + f + '}' }));\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) 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] === '{') { 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\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': return 'text_fields';\n case 'currency': return 'attach_money';\n case 'date': return 'calendar_today';\n case 'chip': return 'label';\n case 'rating': return 'star';\n case 'html': return 'code';\n case 'icon': return 'emoji_symbols';\n case 'image': return 'image';\n default: return 'horizontal_rule';\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\">Observação: ajustes aplicados pelo assistente substituem o objeto de configuração inteiro.\n </div>\n <button mat-icon-button type=\"button\" class=\"help-icon-button\"\n matTooltip=\"O applyConfigFromAdapter não faz merge profundo. Garanta que o adapter envie a config completa.\">\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 matInput [(ngModel)]=\"working.dataSource.resourcePath\" (ngModelChange)=\"onResourcePathChange($event)\"\n placeholder=\"ex.: users\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Endpoint do recurso (resourcePath).\">\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 matInput rows=\"3\" [(ngModel)]=\"queryJson\" (ngModelChange)=\"onQueryChanged($event)\"\n placeholder='ex.: {\"status\":\"active\",\"department\":\"sales\"}'></textarea>\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Opcional. Use JSON válido para filtros iniciais.\" *ngIf=\"!queryError\">\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 [(ngModel)]=\"sortField\" (ngModelChange)=\"updateSortConfig()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"Campo base do recurso.\">\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 [(ngModel)]=\"sortDir\" (ngModelChange)=\"updateSortConfig()\">\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 </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\">Configure botões de ação por item (ícone, rótulo, cor, visibilidade)</div>\n <button mat-flat-button color=\"primary\" (click)=\"addAction()\">Adicionar ação</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 [(ngModel)]=\"selectedGlobalActionId\" (ngModelChange)=\"onGlobalActionSelected($event)\">\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 *ngIf=\"!globalActionCatalog.length\" class=\"text-caption muted\">Nenhuma ação global registrada.</mat-hint>\n </mat-form-field>\n <div class=\"muted text-caption\">Selecione para adicionar com `command` global.</div>\n </div>\n <div *ngFor=\"let a of (working.actions || []); let i = index\" class=\"g g-auto-200 gap-12 ai-end\">\n <mat-form-field appearance=\"outline\">\n <mat-label>ID</mat-label>\n <input matInput [(ngModel)]=\"a.id\" (ngModelChange)=\"onActionsChanged()\" />\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 matInput [(ngModel)]=\"a.icon\" (ngModelChange)=\"onActionsChanged()\" placeholder=\"ex.: edit, delete\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Command (global)</mat-label>\n <input matInput [(ngModel)]=\"a.command\" (ngModelChange)=\"onActionsChanged()\" placeholder=\"global:toast.success\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Rótulo</mat-label>\n <input matInput [(ngModel)]=\"a.label\" (ngModelChange)=\"onActionsChanged()\" />\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 [(ngModel)]=\"a.buttonVariant\" (ngModelChange)=\"onActionsChanged()\">\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 [(ngModel)]=\"a.color\" (ngModelChange)=\"onActionsChanged()\">\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 class=\"g gap-8\" *ngIf=\"isCustomColor(a.color); else actionCustomBtn\">\n <pdx-color-picker label=\"Cor personalizada\" [format]=\"'hex'\" [(ngModel)]=\"a.color\"\n (ngModelChange)=\"onActionsChanged()\"></pdx-color-picker>\n </div>\n <ng-template #actionCustomBtn>\n <button mat-stroked-button type=\"button\" (click)=\"enableCustomActionColor(a)\">Usar cor personalizada</button>\n </ng-template>\n <mat-form-field appearance=\"outline\">\n <mat-label>Payload da ação</mat-label>\n <mat-select [(ngModel)]=\"a.emitPayload\" (ngModelChange)=\"onActionsChanged()\">\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 mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"emitPayload\">\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>Exibir quando (ex.: ${item.status} == 'done')</mat-label>\n <input matInput [(ngModel)]=\"a.showIf\" (ngModelChange)=\"onActionsChanged()\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Sintaxe suportada: "${item.campo} == 'valor'". Expressões avançadas não são avaliadas.\">\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 *ngIf=\"(a.kind || 'icon') === 'icon'\" mat-icon-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\"><mat-icon\n [praxisIcon]=\"a.icon || 'bolt'\" [style.cssText]=\"iconStyle(a.color)\"></mat-icon></button>\n <ng-container *ngIf=\"a.kind === 'button'\">\n <button *ngIf=\"a.buttonVariant === 'stroked'\" mat-stroked-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\" [style.cssText]=\"buttonStyle(a.color, 'stroked')\">{{ a.label\n || a.id || 'Ação' }}</button>\n <button *ngIf=\"a.buttonVariant === 'raised'\" mat-raised-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\" [style.cssText]=\"buttonStyle(a.color, 'raised')\">{{ a.label ||\n a.id || 'Ação' }}</button>\n <button *ngIf=\"!a.buttonVariant || a.buttonVariant === 'flat'\" mat-flat-button\n [color]=\"isThemeColor(a.color) ? a.color : undefined\" [style.cssText]=\"buttonStyle(a.color, 'flat')\">{{ a.label || a.id || 'Ação' }}</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)\">Remover</button>\n </div>\n <div class=\"g gap-8 col-span-2\" *ngIf=\"a.command\">\n <mat-slide-toggle [(ngModel)]=\"a.showLoading\" (ngModelChange)=\"onActionsChanged()\">Mostrar loading</mat-slide-toggle>\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Confirmação</mat-panel-title></mat-expansion-panel-header>\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 [value]=\"a.confirmation?.type || ''\" (change)=\"applyConfirmationPreset(a, $event.value)\">\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 matInput [ngModel]=\"a.confirmation?.title\" (ngModelChange)=\"setConfirmationField(a, 'title', $event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mensagem</mat-label>\n <input matInput [ngModel]=\"a.confirmation?.message\" (ngModelChange)=\"setConfirmationField(a, 'message', $event)\" />\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>{{ a.confirmation?.title || 'Confirmar ação' }}</strong>\n </div>\n <div class=\"text-caption muted\">{{ a.confirmation?.message || 'Tem certeza que deseja continuar?' }}</div>\n <div class=\"text-caption\">\n <span class=\"confirm-type\" [ngClass]=\"(a.confirmation?.type || 'default')\">Tipo: {{ a.confirmation?.type || 'padrão' }}</span>\n </div>\n <div class=\"text-caption muted\" *ngIf=\"!a.confirmation?.title && !a.confirmation?.message\">\n Defina um título ou mensagem para a confirmação.\n </div>\n </div>\n </div>\n </mat-expansion-panel>\n <mat-form-field appearance=\"outline\" class=\"col-span-2\">\n <mat-label>Payload (JSON/Template)</mat-label>\n <textarea matInput rows=\"4\" [(ngModel)]=\"a.globalPayload\" (ngModelChange)=\"onActionsChanged()\"\n placeholder='{\"message\":\"${item.name} favoritado\"}'></textarea>\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n [matTooltip]=\"globalPayloadSchemaTooltip(a)\">\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error *ngIf=\"isGlobalPayloadInvalid(a.globalPayload)\">JSON inválido</mat-error>\n </mat-form-field>\n <div class=\"g row-flow gap-8 ai-center\">\n <button mat-stroked-button type=\"button\" (click)=\"applyGlobalPayloadExample(a)\">Inserir exemplo</button>\n <span class=\"muted text-caption\">{{ globalPayloadExampleHint(a) }}</span>\n </div>\n <mat-slide-toggle [(ngModel)]=\"a.emitLocal\" (ngModelChange)=\"onActionsChanged()\">Emitir evento local também</mat-slide-toggle>\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')\">Preset Tiles Moderno</button>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante</mat-label>\n <mat-select [(ngModel)]=\"working.layout.variant\" (ngModelChange)=\"onLayoutChanged()\">\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 [(ngModel)]=\"working.layout.model\" (ngModelChange)=\"onLayoutChanged()\">\n <ng-container *ngIf=\"working.layout.variant === 'list'; else cardModels\">\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 *ngIf=\"working.layout.variant === 'tiles'; else cardsOnly\">\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 [(ngModel)]=\"working.layout.lines\" (ngModelChange)=\"onLayoutChanged()\">\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 matInput type=\"number\" min=\"1\" [(ngModel)]=\"working.layout.pageSize\"\n (ngModelChange)=\"onPageSizeChange($event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Densidade</mat-label>\n <mat-select [(ngModel)]=\"working.layout.density\" (ngModelChange)=\"onLayoutChanged()\">\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\" *ngIf=\"working.layout.variant !== 'tiles'\">\n <mat-label>Divisores</mat-label>\n <mat-select [(ngModel)]=\"working.layout.dividers\" (ngModelChange)=\"onLayoutChanged()\">\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 [(ngModel)]=\"working.layout.groupBy\" (ngModelChange)=\"onLayoutChanged()\">\n <mat-option [value]=\"\">Nenhum</mat-option>\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</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 matInput [(ngModel)]=\"working.layout.groupBy\" (ngModelChange)=\"onLayoutChanged()\"\n placeholder=\"ex.: departamento\" />\n </mat-form-field>\n </ng-template>\n <mat-slide-toggle [(ngModel)]=\"working.layout.stickySectionHeader\" (ngModelChange)=\"onLayoutChanged()\">\n Header de seção fixo\n </mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"working.layout.virtualScroll\" (ngModelChange)=\"onLayoutChanged()\">\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 [(ngModel)]=\"working.ui.showSearch\" (ngModelChange)=\"onUiChanged()\">Mostrar\n busca</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"working.ui.showSort\" (ngModelChange)=\"onUiChanged()\">Mostrar\n ordenar</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"working.ui.showRange\" (ngModelChange)=\"onUiChanged()\">Mostrar faixa X–Y de\n Total</mat-slide-toggle>\n </div>\n <div class=\"g g-auto-220 gap-12 ai-end mt-12\" *ngIf=\"working.ui?.showSearch\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo para buscar</mat-label>\n <mat-select [(ngModel)]=\"working.ui.searchField\" (ngModelChange)=\"onUiChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</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 matInput [(ngModel)]=\"working.ui.searchPlaceholder\" (ngModelChange)=\"onUiChanged()\"\n placeholder=\"ex.: Buscar por título\" />\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()\">Adicionar opção</button>\n </div>\n <div class=\"g g-auto-220 gap-12 ai-end mt-12\" *ngFor=\"let r of uiSortRows; let i = index\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Rótulo</mat-label>\n <input matInput [(ngModel)]=\"r.label\" (ngModelChange)=\"onUiSortRowsChanged()\"\n placeholder=\"ex.: Mais recentes\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Campo</mat-label>\n <mat-select [(ngModel)]=\"r.field\" (ngModelChange)=\"onUiSortRowsChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</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 [(ngModel)]=\"r.dir\" (ngModelChange)=\"onUiSortRowsChanged()\">\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)\">Opção duplicada (campo+direção)</div>\n <div class=\"flex-end\"><button mat-button color=\"warn\" (click)=\"removeUiSortRow(i)\">Remover</button></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>{{ mappingPrimary.field || 'Não mapeado' }}</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 mat-stroked-button type=\"button\" (click)=\"mappingPrimary.type='text'; mappingPrimary.field='name'; onMappingChanged()\">Nome</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingPrimary.type='text'; mappingPrimary.field='title'; onMappingChanged()\">Título</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingPrimary.type='text'; mappingPrimary.field='name'; mappingSecondary.type='text'; mappingSecondary.field='role'; onMappingChanged()\">Nome + Papel</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 [(ngModel)]=\"mappingPrimary.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select [(ngModel)]=\"mappingPrimary.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of primaryTypeConfigs\" [value]=\"mt.type\">\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') { <praxis-meta-editor-text [model]=\"mappingPrimary\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingPrimary\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('currency') { <praxis-meta-editor-currency [model]=\"mappingPrimary\" (change)=\"onMappingChanged()\"></praxis-meta-editor-currency> }\n @case ('date') { <praxis-meta-editor-date [model]=\"mappingPrimary\" (change)=\"onMappingChanged()\"></praxis-meta-editor-date> }\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 appearance=\"outline\" *ngIf=\"mappingPrimary.type==='text' || mappingPrimary.type==='html'\">\n <mat-label>Classe CSS</mat-label>\n <input matInput [(ngModel)]=\"mappingPrimary.class\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" *ngIf=\"mappingPrimary.type==='text' || mappingPrimary.type==='html'\">\n <mat-label>Estilo Inline</mat-label>\n <input matInput [(ngModel)]=\"mappingPrimary.style\" (ngModelChange)=\"onMappingChanged()\" />\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 matInput [(ngModel)]=\"mappingPrimary.class\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo Inline</mat-label>\n <input matInput [(ngModel)]=\"mappingPrimary.style\" (ngModelChange)=\"onMappingChanged()\" />\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>{{ mappingSecondary.field || 'Não mapeado' }}</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 mat-stroked-button type=\"button\" (click)=\"mappingSecondary.type='text'; mappingSecondary.field='subtitle'; onMappingChanged()\">Subtítulo</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingSecondary.type='date'; mappingSecondary.field='hireDate'; mappingSecondary.dateStyle='short'; onMappingChanged()\">Data curta</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingSecondary.type='currency'; mappingSecondary.field='salary'; mappingSecondary.currencyCode='BRL'; mappingSecondary.locale='pt-BR'; onMappingChanged()\">Salário</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 [(ngModel)]=\"mappingSecondary.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select [(ngModel)]=\"mappingSecondary.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of secondaryTypeConfigs\" [value]=\"mt.type\">\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') { <praxis-meta-editor-text [model]=\"mappingSecondary\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingSecondary\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('currency') { <praxis-meta-editor-currency [model]=\"mappingSecondary\" (change)=\"onMappingChanged()\"></praxis-meta-editor-currency> }\n @case ('date') { <praxis-meta-editor-date [model]=\"mappingSecondary\" (change)=\"onMappingChanged()\"></praxis-meta-editor-date> }\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\"><mat-label>Classe CSS</mat-label><input matInput\n [(ngModel)]=\"mappingSecondary.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Estilo Inline</mat-label><input matInput\n [(ngModel)]=\"mappingSecondary.style\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n </div>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n\n <mat-expansion-panel [expanded]=\"!!mappingMeta.field || mappingMetaFields.length > 0\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"g row-flow gap-8 ai-center\">\n <mat-icon>{{ getTypeIcon(mappingMeta.type || 'text') }}</mat-icon>\n <span>Meta (Detalhe/Lateral)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>\n {{ mappingMetaFields.length ? 'Campo composto (' + mappingMetaFields.length + ')' :\n (mappingMeta.field || 'Não mapeado') }}\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 [(ngModel)]=\"mappingMetaFields\" multiple (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"g g-1-1 ai-center gap-12\" *ngIf=\"mappingMetaFields.length\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Separador</mat-label>\n <input matInput [(ngModel)]=\"mappingMetaSeparator\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-slide-toggle [(ngModel)]=\"mappingMetaWrapSecondInParens\" (ngModelChange)=\"onMappingChanged()\">\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 [(ngModel)]=\"mappingMeta.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option [value]=\"undefined\">-- Nenhum --</mat-option>\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select [(ngModel)]=\"mappingMeta.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of metaTypeConfigs\" [value]=\"mt.type\">\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') { <praxis-meta-editor-text [model]=\"mappingMeta\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingMeta\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('currency') { <praxis-meta-editor-currency [model]=\"mappingMeta\" (change)=\"onMappingChanged()\"></praxis-meta-editor-currency> }\n @case ('date') { <praxis-meta-editor-date [model]=\"mappingMeta\" (change)=\"onMappingChanged()\"></praxis-meta-editor-date> }\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()\"></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()\"></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()\"></praxis-meta-editor-icon>\n }\n @case ('image') { <praxis-meta-editor-image [model]=\"mappingMeta\" (change)=\"onMappingChanged()\"></praxis-meta-editor-image> }\n }\n\n <!-- Advanced -->\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Opções\n avançadas</mat-panel-title></mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição</mat-label>\n <mat-select [(ngModel)]=\"mappingMeta.placement\" (ngModelChange)=\"onMappingChanged()\">\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 matInput [(ngModel)]=\"mappingMeta.class\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo</mat-label>\n <input matInput [(ngModel)]=\"mappingMeta.style\" (ngModelChange)=\"onMappingChanged()\" />\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>{{ getTypeIcon(mappingTrailing.type || 'text') }}</mat-icon>\n <span>Trailing (Direita)</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>{{ 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 [(ngModel)]=\"mappingTrailing.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option [value]=\"undefined\">-- Nenhum --</mat-option>\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <mat-select [(ngModel)]=\"mappingTrailing.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of trailingTypeConfigs\" [value]=\"mt.type\">\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 mat-stroked-button type=\"button\" (click)=\"mappingTrailing.type='chip'; mappingTrailing.chipColor='primary'; mappingTrailing.chipVariant='filled'; mappingTrailing.field='status'; onMappingChanged()\">Status Chip</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingTrailing.type='icon'; mappingTrailing.field='status'; mappingTrailing.iconColor='primary'; onMappingChanged()\">Status Ícone</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingTrailing.type='currency'; mappingTrailing.field='price'; mappingTrailing.currencyCode='BRL'; mappingTrailing.locale='pt-BR'; onMappingChanged()\">Preço</button>\n </div>\n\n @switch (mappingTrailing.type) {\n @case ('text') { <praxis-meta-editor-text [model]=\"mappingTrailing\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingTrailing\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('currency') { <praxis-meta-editor-currency [model]=\"mappingTrailing\" (change)=\"onMappingChanged()\"></praxis-meta-editor-currency> }\n @case ('date') { <praxis-meta-editor-date [model]=\"mappingTrailing\" (change)=\"onMappingChanged()\"></praxis-meta-editor-date> }\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()\"></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()\"></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()\"></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 matInput [(ngModel)]=\"mappingTrailing.imageUrl\" (ngModelChange)=\"onMappingChanged()\"\n placeholder=\"https://... ou ${item.imageUrl}\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Use URL absoluta/relativa ou expressão ${item.campo}.\">\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error *ngIf=\"isImageUrlRequiredInvalid(mappingTrailing.imageUrl)\">URL/expr obrigatória</mat-error>\n </mat-form-field>\n </div>\n <praxis-meta-editor-image [model]=\"mappingTrailing\" (change)=\"onMappingChanged()\"></praxis-meta-editor-image>\n <div class=\"text-caption muted\" *ngIf=\"!mappingTrailing.imageUrl\">Defina a URL/expr para renderizar a imagem.</div>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Estilo</mat-panel-title></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\"><mat-label>Classe</mat-label><input matInput\n [(ngModel)]=\"mappingTrailing.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Style</mat-label><input matInput\n [(ngModel)]=\"mappingTrailing.style\" (ngModelChange)=\"onMappingChanged()\" /></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]=\"!!mappingLeading.field || (mappingLeading.type === 'icon' && !!mappingLeading.icon) || (mappingLeading.type === 'image' && !!mappingLeading.imageUrl)\">\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 {{ mappingLeading.type === 'icon' ? (mappingLeading.icon || 'Ícone estático') :\n (mappingLeading.field || (mappingLeading.imageUrl ? 'Imagem estática' : '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 [(ngModel)]=\"mappingLeading.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of leadingTypeConfigs\" [value]=\"mt.type\">\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 appearance=\"outline\"\n *ngIf=\"mappingLeading.type !== 'icon' && mappingLeading.type !== 'image'\">\n <mat-label>Campo</mat-label>\n <mat-select [(ngModel)]=\"mappingLeading.field\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let f of fields\" [value]=\"f\">{{ f }}</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 mat-stroked-button type=\"button\" (click)=\"mappingLeading.type='icon'; mappingLeading.icon='person'; mappingLeading.iconColor='primary'; onMappingChanged()\">Avatar Ícone</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingLeading.type='image'; mappingLeading.imageUrl='https://placehold.co/64x64'; mappingLeading.imageAlt='Avatar'; mappingLeading.badgeText='${item.status}'; onMappingChanged()\">Avatar Imagem + Badge</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingLeading.type='chip'; mappingLeading.field='tag'; mappingLeading.chipColor='accent'; mappingLeading.chipVariant='filled'; onMappingChanged()\">Chip Tag</button>\n </div>\n\n <!-- Icon Specific -->\n <div class=\"g g-1-auto gap-12 ai-center\" *ngIf=\"mappingLeading.type === 'icon'\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input matInput [(ngModel)]=\"mappingLeading.icon\" (ngModelChange)=\"onMappingChanged()\" />\n <button mat-icon-button matSuffix (click)=\"pickLeadingIcon()\"><mat-icon>search</mat-icon></button>\n </mat-form-field>\n <div class=\"text-caption muted\">Use pipe <code>|iconMap</code> no extra pipe para\n dinâmico</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()\"></praxis-meta-editor-icon>\n </div>\n\n <!-- Image Specific -->\n <div class=\"g g-1-1 gap-12\" *ngIf=\"mappingLeading.type === 'image'\">\n <mat-form-field appearance=\"outline\">\n <mat-label>URL da Imagem</mat-label>\n <input matInput [(ngModel)]=\"mappingLeading.imageUrl\" (ngModelChange)=\"onMappingChanged()\"\n placeholder=\"https://... ou ${item.imageUrl}\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\"\n matTooltip=\"Use URL absoluta/relativa ou expressão ${item.campo}.\">\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-error *ngIf=\"isImageUrlRequiredInvalid(mappingLeading.imageUrl)\">URL/expr obrigatória</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Alt Text</mat-label>\n <input matInput [(ngModel)]=\"mappingLeading.imageAlt\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Badge Texto</mat-label>\n <input matInput [(ngModel)]=\"mappingLeading.badgeText\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n </div>\n\n @switch (mappingLeading.type) {\n @case ('text') { <praxis-meta-editor-text [model]=\"mappingLeading\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingLeading\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\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()\"></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()\"></praxis-meta-editor-rating>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Estilo</mat-panel-title></mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\"><mat-label>Classe</mat-label><input matInput\n [(ngModel)]=\"mappingLeading.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Style</mat-label><input matInput\n [(ngModel)]=\"mappingLeading.style\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n </div>\n </mat-expansion-panel>\n </div>\n </mat-expansion-panel>\n\n <!-- Features -->\n <mat-expansion-panel [expanded]=\"featuresVisible && features.length > 0\">\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>{{ features.length }} item(s)</mat-panel-description>\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 [(ngModel)]=\"featuresVisible\" (ngModelChange)=\"onFeaturesChanged()\">Ativar\n recursos</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"featuresSyncWithMeta\" (ngModelChange)=\"onMappingChanged()\">Sincronizar\n com Meta</mat-slide-toggle>\n <span class=\"flex-1\"></span>\n <mat-button-toggle-group [(ngModel)]=\"featuresMode\" (change)=\"onFeaturesChanged()\" appearance=\"legacy\">\n <mat-button-toggle value=\"icons+labels\"><mat-icon>view_list</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"icons-only\"><mat-icon>more_horiz</mat-icon></mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div *ngFor=\"let f of features; let i = index\" class=\"g g-auto-1 gap-8 ai-center p-8 border rounded mb-2\">\n <button mat-icon-button (click)=\"pickFeatureIcon(i)\"><mat-icon>{{ f.icon || 'search'\n }}</mat-icon></button>\n <mat-form-field appearance=\"outline\" class=\"dense-form-field no-sub\">\n <input matInput [(ngModel)]=\"f.expr\" (ngModelChange)=\"onFeaturesChanged()\" placeholder=\"Expr/Texto\" />\n </mat-form-field>\n <button mat-icon-button color=\"warn\" (click)=\"removeFeature(i)\"><mat-icon>delete</mat-icon></button>\n </div>\n <button mat-button color=\"primary\" (click)=\"addFeature()\"><mat-icon>add</mat-icon>\n Adicionar recurso</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>{{ getTypeIcon(mappingSectionHeader.type) }}</mat-icon>\n <span>Cabeçalho de Seção</span>\n </div>\n </mat-panel-title>\n <mat-panel-description>{{ 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 [(ngModel)]=\"mappingSectionHeader.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of sectionHeaderTypeConfigs\" [value]=\"mt.type\">\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 matInput [(ngModel)]=\"mappingSectionHeader.expr\" (ngModelChange)=\"onMappingChanged()\"\n placeholder=\"item.key\" />\n </mat-form-field>\n </div>\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button mat-stroked-button type=\"button\" (click)=\"mappingSectionHeader.type='text'; mappingSectionHeader.expr='${item.key}'; onMappingChanged()\">Texto padrão</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingSectionHeader.type='chip'; mappingSectionHeader.chipColor='primary'; mappingSectionHeader.chipVariant='filled'; mappingSectionHeader.expr='${item.key}'; onMappingChanged()\">Chip padrão</button>\n </div>\n\n @switch (mappingSectionHeader.type) {\n @case ('text') { <praxis-meta-editor-text [model]=\"mappingSectionHeader\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingSectionHeader\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\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()\"></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()\"></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()\"></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 matInput [(ngModel)]=\"mappingSectionHeader.imageUrl\" (ngModelChange)=\"onMappingChanged()\" />\n <mat-error *ngIf=\"isImageUrlRequiredInvalid(mappingSectionHeader.imageUrl)\">URL/expr obrigatória</mat-error>\n </mat-form-field>\n </div>\n <div class=\"text-caption muted\" *ngIf=\"!mappingSectionHeader.imageUrl\">Defina a URL/expr para renderizar a imagem.</div>\n <praxis-meta-editor-image [model]=\"mappingSectionHeader\" (change)=\"onMappingChanged()\"></praxis-meta-editor-image>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Estilo</mat-panel-title></mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\"><mat-label>Classe</mat-label><input matInput\n [(ngModel)]=\"mappingSectionHeader.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Style</mat-label><input matInput\n [(ngModel)]=\"mappingSectionHeader.style\" (ngModelChange)=\"onMappingChanged()\" /></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>{{ mappingEmptyState.expr || 'Padrão' }}</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 [(ngModel)]=\"mappingEmptyState.type\" (ngModelChange)=\"onMappingChanged()\">\n <mat-option *ngFor=\"let mt of emptyStateTypeConfigs\" [value]=\"mt.type\">\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 matInput [(ngModel)]=\"mappingEmptyState.expr\" (ngModelChange)=\"onMappingChanged()\" />\n </mat-form-field>\n </div>\n <div class=\"g row-flow gap-8\">\n <span class=\"text-caption muted\">Presets</span>\n <button mat-stroked-button type=\"button\" (click)=\"mappingEmptyState.type='text'; mappingEmptyState.expr='Nenhum item disponível'; onMappingChanged()\">Mensagem padrão</button>\n <button mat-stroked-button type=\"button\" (click)=\"mappingEmptyState.type='image'; mappingEmptyState.imageUrl='/list-empty-state.svg'; mappingEmptyState.imageAlt='Sem resultados'; onMappingChanged()\">Imagem padrão</button>\n </div>\n\n @switch (mappingEmptyState.type) {\n @case ('text') { <praxis-meta-editor-text [model]=\"mappingEmptyState\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\n @case ('html') { <praxis-meta-editor-text [model]=\"mappingEmptyState\" [setPipe]=\"setPipe.bind(this)\" (change)=\"onMappingChanged()\"></praxis-meta-editor-text> }\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()\"></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()\"></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()\"></praxis-meta-editor-icon>\n }\n @case ('image') {\n <div class=\"g g-1-1 gap-12\">\n <mat-form-field appearance=\"outline\"><mat-label>URL Imagem</mat-label><input matInput\n [(ngModel)]=\"mappingEmptyState.imageUrl\" (ngModelChange)=\"onMappingChanged()\" />\n <mat-error *ngIf=\"isImageUrlRequiredInvalid(mappingEmptyState.imageUrl)\">URL/expr obrigatória</mat-error>\n </mat-form-field>\n </div>\n <div class=\"text-caption muted\" *ngIf=\"!mappingEmptyState.imageUrl\">Defina a URL/expr para renderizar a imagem.</div>\n <praxis-meta-editor-image [model]=\"mappingEmptyState\" (change)=\"onMappingChanged()\"></praxis-meta-editor-image>\n }\n }\n\n <mat-expansion-panel class=\"mat-elevation-z0 advanced-panel\">\n <mat-expansion-panel-header><mat-panel-title>Estilo</mat-panel-title></mat-expansion-panel-header>\n <div class=\"g gap-12 pt-12\">\n <mat-form-field appearance=\"outline\"><mat-label>Classe</mat-label><input matInput\n [(ngModel)]=\"mappingEmptyState.class\" (ngModelChange)=\"onMappingChanged()\" /></mat-form-field>\n <mat-form-field appearance=\"outline\"><mat-label>Style</mat-label><input matInput\n [(ngModel)]=\"mappingEmptyState.style\" (ngModelChange)=\"onMappingChanged()\" /></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()\">Aplicar mapeamento</button>\n <button mat-button (click)=\"inferFromFields()\" [disabled]=\"!fields.length\">Inferir do schema</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 matInput type=\"number\" min=\"0\" [(ngModel)]=\"skeletonCountInput\"\n (ngModelChange)=\"onSkeletonChanged($event)\" />\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 [(ngModel)]=\"skinPreviewTheme\" (change)=\"onSkinChanged()\" appearance=\"legacy\">\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 [config]=\"working\" [items]=\"previewData\"\n [theme]=\"skinPreviewTheme\"></praxis-list-skin-preview>\n </div>\n </div>\n </div>\n </div>\n\n </mat-tab>\n <mat-tab label=\"i18n/A11y\">\n <div class=\"editor-content grid gap-3\" *ngIf=\"working?.a11y && working?.events\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Locale padrão</mat-label>\n <input matInput [(ngModel)]=\"working.i18n.locale\" (ngModelChange)=\"markDirty()\" placeholder=\"ex.: pt-BR\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Moeda padrão</mat-label>\n <input matInput [(ngModel)]=\"working.i18n.currency\" (ngModelChange)=\"markDirty()\" placeholder=\"ex.: BRL\" />\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 matInput [(ngModel)]=\"working!.a11y!.ariaLabel\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>aria-labelledby</mat-label>\n <input matInput [(ngModel)]=\"working!.a11y!.ariaLabelledBy\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n </div>\n <div class=\"g g-auto-220 gap-12 ai-end\">\n <mat-slide-toggle [(ngModel)]=\"working!.a11y!.highContrast\" (ngModelChange)=\"markDirty()\">Alto\n contraste</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"working!.a11y!.reduceMotion\" (ngModelChange)=\"markDirty()\">Reduzir\n movimento</mat-slide-toggle>\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 matInput [(ngModel)]=\"working!.events!.itemClick\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>actionClick</mat-label>\n <input matInput [(ngModel)]=\"working!.events!.actionClick\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>selectionChange</mat-label>\n <input matInput [(ngModel)]=\"working!.events!.selectionChange\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>loaded</mat-label>\n <input matInput [(ngModel)]=\"working!.events!.loaded\" (ngModelChange)=\"markDirty()\" />\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 [(ngModel)]=\"working.selection.mode\" (ngModelChange)=\"onSelectionChanged()\">\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 matInput [(ngModel)]=\"working.selection.formControlName\" (ngModelChange)=\"onSelectionChanged()\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"formControlName\">\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 matInput [(ngModel)]=\"working.selection.formControlPath\" (ngModelChange)=\"onSelectionChanged()\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"formControlPath\">\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 matInput [(ngModel)]=\"working.selection.compareBy\" (ngModelChange)=\"onSelectionChanged()\" />\n <button mat-icon-button matSuffix type=\"button\" class=\"help-icon-button\" matTooltip=\"Chave unica do item.\">\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 [(ngModel)]=\"working.selection.return\" (ngModelChange)=\"onSelectionChanged()\">\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')\">Pill Soft</button>\n <button mat-button (click)=\"applySkinPreset('gradient-tile')\">Gradient Tile</button>\n <button mat-button (click)=\"applySkinPreset('glass')\">Glass</button>\n <button mat-button (click)=\"applySkinPreset('elevated')\">Elevated</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')\">Neumorphism</button>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo</mat-label>\n <mat-select [(ngModel)]=\"working.skin.type\" (ngModelChange)=\"onSkinTypeChanged($event)\">\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 matInput [(ngModel)]=\"working.skin.radius\" (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: 1.25rem\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Sombra</mat-label>\n <input matInput [(ngModel)]=\"working.skin.shadow\" (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: var(--md-sys-elevation-level2)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Borda</mat-label>\n <input matInput [(ngModel)]=\"working.skin.border\" (ngModelChange)=\"onSkinChanged()\" />\n </mat-form-field>\n <mat-form-field *ngIf=\"working.skin.type==='glass'\" appearance=\"outline\">\n <mat-label>Desfoque</mat-label>\n <input matInput [(ngModel)]=\"working.skin.backdropBlur\" (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: 8px\" />\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 matInput [ngModel]=\"working.skin.gradient.from || ''\"\n (ngModelChange)=\"onSkinGradientChanged('from', $event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Degradê até</mat-label>\n <input matInput [ngModel]=\"working.skin.gradient.to || ''\"\n (ngModelChange)=\"onSkinGradientChanged('to', $event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ângulo</mat-label>\n <input matInput type=\"number\" [ngModel]=\"working.skin.gradient.angle ?? 135\"\n (ngModelChange)=\"onSkinGradientChanged('angle', $event)\" />\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 matInput [(ngModel)]=\"working.skin.class\" (ngModelChange)=\"onSkinChanged()\"\n placeholder=\"ex.: my-list-skin\" />\n </mat-form-field>\n\n <div *ngIf=\"working.skin.type==='custom'\" class=\"g g-auto-220 gap-12 ai-end\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Estilo inline (skin.inlineStyle)</mat-label>\n <textarea matInput rows=\"4\" [(ngModel)]=\"working.skin.inlineStyle\" (ngModelChange)=\"onSkinChanged()\"\n [attr.placeholder]=\"':host{--p-list-radius: 1rem}'\"></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\">.my-list-skin .item-card {\n border-radius: 14px;\n border: 1px solid var(--md-sys-color-outline-variant);\n box-shadow: var(--md-sys-elevation-level2);\n}\n.my-list-skin .mat-mdc-list-item .list-item-content {\n backdrop-filter: blur(6px);\n}</pre>\n </div>\n </div>\n\n\n </div>\n </mat-tab>\n</mat-tab-group>\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 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: ['pill-soft', 'gradient-tile', 'glass', 'elevated', 'outline', 'flat', 'neumorphism', 'custom'],\n templateType: ['text', 'icon', 'image', 'chip', 'rating', 'currency', 'date', 'html', 'slot'],\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 { path: base, category: 'templating', valueKind: 'object', description: `Template for ${label}.` },\n { path: `${base}.type`, category: 'templating', valueKind: 'enum', allowedValues: ENUMS.templateType, description: `Template type for ${label}.` },\n { path: `${base}.expr`, category: 'templating', valueKind: 'expression', description: `Expression for ${label}.`, safetyNotes: 'Only ${item.path} with simple pipes (bool/date/map/number).' },\n { path: `${base}.class`, category: 'templating', valueKind: 'string', description: `CSS class for ${label}.` },\n { path: `${base}.style`, category: 'templating', valueKind: 'string', description: `Inline CSS for ${label}.` },\n { path: `${base}.color`, category: 'templating', valueKind: 'string', description: `Color for ${label}.` },\n { path: `${base}.variant`, category: 'templating', valueKind: 'enum', allowedValues: ENUMS.templateVariant, description: `Variant for ${label}.` },\n { path: `${base}.imageAlt`, category: 'templating', valueKind: 'string', description: `Image alt for ${label} (when type=image).` },\n { path: `${base}.badge`, category: 'templating', valueKind: 'object', description: `Badge for ${label}.` },\n { path: `${base}.badge.expr`, category: 'templating', valueKind: 'expression', description: `Badge expression for ${label}.`, safetyNotes: 'Only ${item.path} with simple pipes (bool/date/map/number).' },\n { path: `${base}.badge.color`, category: 'templating', valueKind: 'string', description: `Badge color for ${label}.` },\n { path: `${base}.badge.variant`, category: 'templating', valueKind: 'enum', allowedValues: ENUMS.templateVariant, description: `Badge variant for ${label}.` },\n { path: `${base}.props`, category: 'templating', valueKind: 'object', description: `Extra props for ${label} (type-specific).` },\n { path: `${base}.props.rating`, category: 'templating', valueKind: 'object', description: `Rating props (type=rating).` },\n { path: `${base}.props.rating.max`, category: 'templating', valueKind: 'number', description: `Rating max (1–10).` },\n { path: `${base}.props.rating.size`, category: 'templating', valueKind: 'number', description: `Rating icon size in px.` },\n { path: `${base}.props.rating.color`, category: 'templating', valueKind: 'string', description: `Rating color (theme/M3/custom).` },\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 { path: 'id', category: 'meta', valueKind: 'string', description: 'List id (used by persistence and editor).' },\n\n { path: 'dataSource', category: 'data', valueKind: 'object', description: 'Local or remote data source.' },\n { path: 'dataSource.data', category: 'data', valueKind: 'array', description: 'Local data array.' },\n { path: 'dataSource.resourcePath', category: 'data', valueKind: 'string', description: 'Remote resource path for GenericCrudService.' },\n { path: 'dataSource.query', category: 'data', valueKind: 'object', description: 'Initial query sent to /filter.' },\n { path: 'dataSource.sort', category: 'data', valueKind: 'array', description: 'Initial sort array (ex.: [\"name,asc\"]).' },\n { path: 'dataSource.sort[]', category: 'data', valueKind: 'string', description: 'Single sort entry (field,dir).' },\n\n { path: 'layout', category: 'layout', valueKind: 'object', description: 'Layout settings.' },\n { path: 'layout.variant', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutVariant, description: 'Layout variant.' },\n { path: 'layout.density', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutDensity, description: 'Layout density.' },\n { path: 'layout.lines', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutLines, description: 'Number of visible lines.' },\n { path: 'layout.dividers', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutDividers, description: 'Dividers between items.' },\n { path: 'layout.model', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutModel, description: 'Visual model for items.' },\n { path: 'layout.groupBy', category: 'layout', valueKind: 'string', description: 'Field name for grouping.' },\n { path: 'layout.stickySectionHeader', category: 'layout', valueKind: 'boolean', description: 'Sticky section header.' },\n { path: 'layout.virtualScroll', category: 'layout', valueKind: 'boolean', description: 'Enable virtual scroll (when supported).' },\n { path: 'layout.pageSize', category: 'layout', valueKind: 'number', description: 'Remote page size.' },\n\n { path: 'skin', category: 'skin', valueKind: 'object', description: 'Skin settings.' },\n { path: 'skin.type', category: 'skin', valueKind: 'enum', allowedValues: ENUMS.skinType, description: 'Skin type.' },\n { path: 'skin.gradient', category: 'skin', valueKind: 'object', description: 'Gradient options.' },\n { path: 'skin.gradient.from', category: 'skin', valueKind: 'string', description: 'Gradient start color.' },\n { path: 'skin.gradient.to', category: 'skin', valueKind: 'string', description: 'Gradient end color.' },\n { path: 'skin.gradient.angle', category: 'skin', valueKind: 'number', description: 'Gradient angle in degrees.' },\n { path: 'skin.radius', category: 'skin', valueKind: 'string', description: 'Border radius.' },\n { path: 'skin.shadow', category: 'skin', valueKind: 'string', description: 'Box shadow.' },\n { path: 'skin.border', category: 'skin', valueKind: 'string', description: 'Border style.' },\n { path: 'skin.backdropBlur', category: 'skin', valueKind: 'string', description: 'Backdrop blur (glass).' },\n { path: 'skin.class', category: 'skin', valueKind: 'string', description: 'Custom CSS class.' },\n { path: 'skin.inlineStyle', category: 'skin', valueKind: 'string', description: 'Inline CSS (sanitized).' },\n\n { path: 'selection', category: 'selection', valueKind: 'object', description: 'Selection settings.' },\n { path: 'selection.mode', category: 'selection', valueKind: 'enum', allowedValues: ENUMS.selectionMode, description: 'Selection mode.' },\n { path: 'selection.formControlName', category: 'selection', valueKind: 'string', description: 'FormControl name for binding.' },\n { path: 'selection.formControlPath', category: 'selection', valueKind: 'string', description: 'FormControl path for binding.' },\n { path: 'selection.compareBy', category: 'selection', valueKind: 'string', description: 'Field used to compare selections.' },\n { path: 'selection.return', category: 'selection', valueKind: 'enum', allowedValues: ENUMS.selectionReturn, description: 'Selection return payload.' },\n\n { path: 'templating', category: 'templating', valueKind: 'object', description: 'Templating settings.' },\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 { path: 'templating.metaPlacement', category: 'templating', valueKind: 'enum', allowedValues: ENUMS.metaPlacement, description: 'Meta placement in list variant.' },\n { path: 'templating.metaPrefixIcon', category: 'templating', valueKind: 'string', description: 'Prefix icon for meta.' },\n { path: 'templating.statusPosition', category: 'templating', valueKind: 'enum', allowedValues: ENUMS.statusPosition, description: 'Status position in cards/tiles.' },\n { path: 'templating.chipColorMap', category: 'templating', valueKind: 'object', description: 'Map value -> chip color.' },\n { path: 'templating.chipLabelMap', category: 'templating', valueKind: 'object', description: 'Map value -> label.' },\n { path: 'templating.iconColorMap', category: 'templating', valueKind: 'object', description: 'Map value/icon -> color.' },\n { path: 'templating.features', category: 'templating', valueKind: 'array', description: 'Extra feature line entries.' },\n { path: 'templating.features[].icon', category: 'templating', valueKind: 'string', description: 'Feature icon.' },\n { path: 'templating.features[].expr', category: 'templating', valueKind: 'expression', description: 'Feature label expression.' },\n { path: 'templating.features[].class', category: 'templating', valueKind: 'string', description: 'Feature CSS class.' },\n { path: 'templating.features[].style', category: 'templating', valueKind: 'string', description: 'Feature inline CSS.' },\n { path: 'templating.featuresVisible', category: 'templating', valueKind: 'boolean', description: 'Show features line.' },\n { path: 'templating.featuresMode', category: 'templating', valueKind: 'enum', allowedValues: ENUMS.featuresMode, description: 'Features render mode.' },\n { path: 'templating.skeleton', category: 'templating', valueKind: 'object', description: 'Skeleton loading config.' },\n { path: 'templating.skeleton.count', category: 'templating', valueKind: 'number', description: 'Skeleton items count.' },\n\n { path: 'actions', category: 'actions', valueKind: 'array', description: 'Item actions array.' },\n { path: 'actions[].id', category: 'actions', valueKind: 'string', description: 'Action id.' },\n { path: 'actions[].icon', category: 'actions', valueKind: 'string', description: 'Action icon.' },\n { path: 'actions[].label', category: 'actions', valueKind: 'string', description: 'Action label.' },\n { path: 'actions[].color', category: 'actions', valueKind: 'string', description: 'Action color.' },\n { path: 'actions[].kind', category: 'actions', valueKind: 'enum', allowedValues: ENUMS.actionKind, description: 'Action render kind.' },\n { path: 'actions[].buttonVariant', category: 'actions', valueKind: 'enum', allowedValues: ENUMS.actionButtonVariant, description: 'Action button variant.' },\n { path: 'actions[].showIf', category: 'actions', valueKind: 'expression', description: 'Visibility condition (simple equality).' },\n { path: 'actions[].emitPayload', category: 'actions', valueKind: 'enum', allowedValues: ENUMS.actionEmitPayload, description: 'Action emitted payload.' },\n { path: 'actions[].command', category: 'actions', valueKind: 'string', description: 'Global command (ex.: \"global:toast.success\").' },\n { path: 'actions[].globalPayload', category: 'actions', valueKind: 'object', description: 'Payload for global command (JSON/template).' },\n { path: 'actions[].emitLocal', category: 'actions', valueKind: 'boolean', description: 'Emit local actionClick even when command is set.' },\n\n { path: 'ui', category: 'ui', valueKind: 'object', description: 'Lightweight toolbar UI.' },\n { path: 'ui.showSearch', category: 'ui', valueKind: 'boolean', description: 'Show search input.' },\n { path: 'ui.searchField', category: 'ui', valueKind: 'string', description: 'Search field.' },\n { path: 'ui.searchPlaceholder', category: 'ui', valueKind: 'string', description: 'Search placeholder.' },\n { path: 'ui.showSort', category: 'ui', valueKind: 'boolean', description: 'Show sort selector.' },\n { path: 'ui.sortOptions', category: 'ui', valueKind: 'array', description: 'Sort options (string or {label,value}).' },\n { path: 'ui.sortOptions[].label', category: 'ui', valueKind: 'string', description: 'Sort option label.' },\n { path: 'ui.sortOptions[].value', category: 'ui', valueKind: 'string', description: 'Sort option value.' },\n { path: 'ui.showRange', category: 'ui', valueKind: 'boolean', description: 'Show range in footer.' },\n\n { path: 'i18n', category: 'i18n', valueKind: 'object', description: 'i18n map.' },\n { path: 'i18n.locale', category: 'i18n', valueKind: 'string', description: 'Locale (ex.: pt-BR).' },\n { path: 'i18n.currency', category: 'i18n', valueKind: 'string', description: 'Currency code (ex.: BRL).' },\n\n { path: 'a11y', category: 'a11y', valueKind: 'object', description: 'Accessibility settings.' },\n { path: 'a11y.ariaLabel', category: 'a11y', valueKind: 'string', description: 'aria-label for container.' },\n { path: 'a11y.ariaLabelledBy', category: 'a11y', valueKind: 'string', description: 'aria-labelledby for container.' },\n { path: 'a11y.highContrast', category: 'a11y', valueKind: 'boolean', description: 'High contrast mode.' },\n { path: 'a11y.reduceMotion', category: 'a11y', valueKind: 'boolean', description: 'Reduce motion.' },\n\n { path: 'events', category: 'events', valueKind: 'object', description: 'Event mappings.' },\n { path: 'events.itemClick', category: 'events', valueKind: 'string', description: 'Mapped itemClick event name.' },\n { path: 'events.actionClick', category: 'events', valueKind: 'string', description: 'Mapped actionClick event name.' },\n { path: 'events.selectionChange', category: 'events', valueKind: 'string', description: 'Mapped selectionChange event name.' },\n { path: 'events.loaded', category: 'events', valueKind: 'string', description: 'Mapped loaded event name.' },\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) ? bound.length : bound != null ? 1 : 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 = 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) => a && typeof (a as any).id === 'string' && (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)) 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((p) => keyOf(p) && keyOf(p) === keyOf(orig));\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))) merged.push(feat as any);\n });\n result.templating = { ...(result.templating || {}), features: merged };\n }\n\n return result;\n }\n\n private sanitizePatch(patch: Partial<PraxisListConfig>): 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)) 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; else delete r.max;\n if (size != null) r.size = size; else delete r.size;\n slot.props.rating = r;\n }\n };\n\n if (safe.layout) {\n if (safe.layout.variant && !inEnum(safe.layout.variant, enums.layoutVariant)) delete safe.layout.variant;\n if (safe.layout.density && !inEnum(safe.layout.density, enums.layoutDensity)) delete safe.layout.density;\n if (safe.layout.lines && !inEnum(safe.layout.lines, enums.layoutLines)) delete safe.layout.lines;\n if (safe.layout.dividers && !inEnum(safe.layout.dividers, enums.layoutDividers)) delete safe.layout.dividers;\n if (safe.layout.model && !inEnum(safe.layout.model, enums.layoutModel)) delete safe.layout.model;\n }\n if (safe.selection) {\n if (safe.selection.mode && !inEnum(safe.selection.mode, enums.selectionMode)) delete safe.selection.mode;\n if (safe.selection.return && !inEnum(safe.selection.return, enums.selectionReturn)) delete safe.selection.return;\n }\n if (safe.skin) {\n if (safe.skin.type && !inEnum(safe.skin.type, enums.skinType)) 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 ((safe.templating as any).metaPlacement && !inEnum((safe.templating as any).metaPlacement, enums.metaPlacement)) {\n delete (safe.templating as any).metaPlacement;\n }\n if ((safe.templating as any).statusPosition && !inEnum((safe.templating as any).statusPosition, enums.statusPosition)) {\n delete (safe.templating as any).statusPosition;\n }\n if ((safe.templating as any).featuresMode && !inEnum((safe.templating as any).featuresMode, enums.featuresMode)) {\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 (a?.buttonVariant && !inEnum(a.buttonVariant, enums.actionButtonVariant)) delete a.buttonVariant;\n if (a?.emitPayload && !inEnum(a.emitPayload, enums.actionEmitPayload)) 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","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 inject,\n isDevMode,\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} 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 { 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} 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';\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 ],\n templateUrl: './praxis-list.component.html',\n styleUrls: ['./praxis-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [GenericCrudService, ListDataService],\n})\nexport class PraxisList implements OnInit, OnChanges, OnDestroy {\n private static nextSkinScopeId = 0;\n\n @Input() config!: PraxisListConfig;\n @Input({ required: true }) listId!: string;\n @Input() componentInstanceId?: string;\n @Input() form?: FormGroup | null;\n @Input() enableCustomization = false;\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<{ pageNumber: number; pageSize: number; sort?: string[] }>;\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 logContext: LoggerContext = {\n lib: 'praxis-list',\n component: 'PraxisList',\n };\n private readonly route = (() => { try { return inject(ActivatedRoute); } catch { return undefined as ActivatedRoute | undefined; } })();\n private readonly globalActions = (() => { try { return inject(GlobalActionService); } catch { return null; } })();\n private readonly dialog = (() => { try { return inject(GLOBAL_DIALOG_SERVICE); } catch { return null; } })() 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 readonly destroy$ = new Subject<void>();\n actionLoadingState: Record<string, boolean> = {};\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 || (\n !!changes['componentInstanceId']\n && !changes['componentInstanceId'].firstChange\n );\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(changes['config'].currentValue, 'external-input');\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) return;\n this.hydratingPersistenceKey = key;\n const revisionAtLoadStart = this.externalConfigRevision;\n this.storage.loadConfig<PraxisListConfig>(key).pipe(take(1)).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 ? { ...saved, id: currentId } : { ...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.saveConfig(key, config).pipe(take(1)).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 ? this.form.get(name) : path ? this.form.get(path!) : 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 sectionHeaderTemplate = (key: string) =>\n this.evalSlot('sectionHeader', { key }) || { type: 'text', value: key };\n emptyStateTemplate = () =>\n this.evalSlot('emptyState', {}) || { type: 'text', value: 'Nenhum item disponível' };\n featureLabel(item: any, expr: string): string {\n const out = evaluateTemplate({ type: 'text', expr: expr || '' } as any, item);\n return out?.value ?? '';\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(item: any) {\n const actions = this.config?.actions || [];\n return actions.filter((a) => this.evaluateActionVisibility(a?.showIf, item));\n }\n\n onItemClick(item: any, index: number, section?: string): void {\n this.itemClick.emit({ item, index, section });\n }\n\n onActionKeydown(ev: Event): void {\n ev.stopPropagation();\n }\n\n async onActionClick(ev: MouseEvent, actionId: string, item: any, index: number): 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(action?.globalPayload, item, index);\n if (actionIdResolved) {\n if (this.globalActions && typeof this.globalActions.execute === 'function') {\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 ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {\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)) 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)) 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' ? op : ((op && (op as any).value) ? String((op as any).value) : '');\n }\n sortOptionLabel(op: any): string {\n if (op && typeof op === 'object' && (op as any).label) 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(currLen: number, ps: { pageNumber: number; pageSize: number }, total: number): 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\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 = 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 { listId: this.listId, componentInstanceId: this.componentInstanceId },\n { dedupeKey: 'praxis-list:missing-list-id' },\n ),\n );\n }\n }\n\n private readonly crud = inject(GenericCrudService as any, { optional: true }) as GenericCrudService<any> | null;\n\n private executeSchemaInferenceForPlan(\n inferencePlan: NonNullable<NonNullable<ListApplyPlan['runtime']>['schemaInference']>,\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: 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'sectionHeader' | 'emptyState',\n item: any,\n ) {\n const def = this.config?.templating?.[slot];\n if (!def) return null;\n if (def.type === 'currency') {\n const { baseExpr, param } = this.splitPipe(def.expr);\n const [codeFromExpr, localeFromExpr] = this.parseTwoParams(param);\n const currencyCode = codeFromExpr || (this.config?.i18n as any)?.currency || 'USD';\n const locale = localeFromExpr || (this.config?.i18n as any)?.locale || undefined;\n const rawStr = this.evalString(baseExpr, { item });\n const raw = Number(rawStr?.replace?.(/[^0-9.,-]/g, '').replace(',', '.') ?? rawStr);\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 = 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 ? new Intl.DateTimeFormat(locale, dateStyle).format(dt) : '';\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 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 // Optional label mapping\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 { type: def.type, value, class: def.class, style: def.style, color, variant: (def as any).variant } as any;\n }\n if (def.type === 'icon') {\n const out = evaluateTemplate(def, item) as any;\n // Optional color mapping from config.templating.iconColorMap\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 evaluateTemplate(def, item);\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 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({ type: 'text', expr } as any, ctx?.item ?? ctx);\n return res?.value ?? '';\n }\n\n private parseTwoParams(param?: string): [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 s === 'true' || s === '1' || s === 'yes' || s === 'sim' || s === 'on';\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 { return String(v ?? ''); }\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 = 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 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(`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 helpers for ngFor\n trackBySection = (_: number, s: ListSection<any>) => s?.key ?? _;\n trackByItem = (i: number, it: any) =>\n this.config?.selection?.compareBy ? (it?.[this.config.selection.compareBy] ?? i) : (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(showIf: string | undefined, item: any): boolean {\n const expression = typeof showIf === 'string' ? showIf.trim() : '';\n if (!expression) return true;\n\n const compareMatch = expression.match(/^(.*?)\\s*(===|!==|==|!=)\\s*(.*?)$/);\n if (compareMatch) {\n const left = this.resolveShowIfOperand(compareMatch[1], item);\n const right = this.resolveShowIfOperand(compareMatch[3], item);\n const op = compareMatch[2];\n if (!left.supported || !right.supported) {\n this.warnInvalidShowIfOnce(expression);\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.resolveShowIfOperand(expression, item);\n if (!single.supported) {\n this.warnInvalidShowIfOnce(expression);\n return false;\n }\n return Boolean(single.value);\n }\n\n private resolveShowIfOperand(\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 ((raw.startsWith('\"') && raw.endsWith('\"')) || (raw.startsWith(\"'\") && raw.endsWith(\"'\"))) {\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)) return { supported: true, value: Number(raw) };\n\n const templateMatch = raw.match(/^\\$\\{([^}]+)\\}$/);\n if (templateMatch) {\n return { supported: true, value: this.lookup({ item }, templateMatch[1].trim()) };\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 warnInvalidShowIfOnce(expression: string): void {\n if (!isDevMode()) return;\n this.logger.warnOnce(\n '[PraxisList] Invalid actions[].showIf expression. Falling back to hidden action.',\n this.buildLogOptions(\n { expression },\n {\n dedupeKey: `praxis-list:invalid-show-if:${expression}`,\n throttleKey: 'praxis-list:invalid-show-if',\n },\n ),\n );\n }\n\n private buildActionLoadingKey(actionId: string, item: any, index: number): 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 (idCandidate !== null && idCandidate !== undefined && idCandidate !== '') {\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","<div class=\"praxis-list-root\" [ngClass]=\"skinClasses\" [attr.data-skin-scope]=\"skinScopeId\"\n [attr.aria-label]=\"config.a11y?.ariaLabel || null\"\n [attr.aria-labelledby]=\"config.a11y?.ariaLabelledBy || null\">\n @if (inlineCss) {\n <style [attr.nonce]=\"cspNonce || null\" [textContent]=\"inlineCss\"></style>\n }\n\n @if (enableCustomization) {\n <div class=\"list-assistant\">\n <button mat-mini-fab color=\"primary\" (click)=\"openConfigEditor()\" matTooltip=\"Editar Configurações\"\n aria-label=\"Editar Configurações\">\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) { <div class=\"skeleton skeleton-line w-40\"></div> }\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) { <div class=\"skeleton skeleton-line w-40\"></div> }\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') { <mat-icon [praxisIcon]=\"empty.value\" [ngClass]=\"empty.class\"\n [color]=\"isThemeColor(empty.color) ? empty.color : undefined\"\n [style.cssText]=\"(empty.style ? empty.style + ';' : '') + iconStyle(empty.color)\"></mat-icon> }\n @case ('image') {\n <span class=\"inline-image\" [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\">\n <img [src]=\"empty.value\" [alt]=\"config.templating?.emptyState?.imageAlt || ''\" />\n @if (empty.badge?.value) { <mat-chip class=\"inline-badge\"\n [color]=\"isThemeColor(empty.badge?.color) ? empty.badge?.color : undefined\"\n [ngClass]=\"(((empty.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(empty.badge?.color, empty.badge?.variant)\">{{ empty.badge?.value }}</mat-chip> }\n </span>\n }\n @case ('chip') { <mat-chip [color]=\"isThemeColor(empty.color) ? empty.color : undefined\"\n [ngClass]=\"[empty.class || '', ((empty.variant || 'filled') === 'outlined') ? 'chip-outlined' : '']\"\n [style.cssText]=\"chipStyle(empty.color, empty.variant) + (empty.style ? ';' + empty.style : '')\">{{ empty.value }}</mat-chip> }\n @case ('rating') {\n <span [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\">\n @for (_ of ratingRange(empty); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, empty.value)\"\n [color]=\"ratingThemeColor(empty)\"\n [style.cssText]=\"ratingIconStyle(empty)\"></mat-icon> }\n </span>\n }\n @case ('html') { <span [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\" [innerHTML]=\"empty.value\"></span> }\n @default { <span [ngClass]=\"empty.class\" [style.cssText]=\"empty.style\">{{ empty.value }}</span> }\n }\n }\n </div>\n }\n }\n\n <!-- List variant -->\n @if (isListVariant()) {\n <!-- Selection list -->\n @if (isSelectionEnabled()) {\n <mat-selection-list [multiple]=\"config.selection?.mode === 'multiple'\" [formControl]=\"boundControl\"\n (selectionChange)=\"onSelectionChange($event)\">\n @for (section of sections$ | async; track trackBySection($index, section)) {\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') { <mat-icon [praxisIcon]=\"sh.value\" [ngClass]=\"sh.class\"\n [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [style.cssText]=\"(sh.style ? sh.style + ';' : '') + iconStyle(sh.color)\"></mat-icon> }\n @case ('image') {\n <span class=\"inline-image\" [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n <img [src]=\"sh.value\" [alt]=\"config.templating?.sectionHeader?.imageAlt || ''\" />\n @if (sh.badge?.value) { <mat-chip class=\"inline-badge\"\n [color]=\"isThemeColor(sh.badge?.color) ? sh.badge?.color : undefined\"\n [ngClass]=\"(((sh.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(sh.badge?.color, sh.badge?.variant)\">{{ sh.badge?.value }}</mat-chip> }\n </span>\n }\n @case ('chip') { <mat-chip [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [ngClass]=\"[sh.class || '', ((sh.variant || 'filled') === 'outlined') ? 'chip-outlined' : '']\"\n [style.cssText]=\"chipStyle(sh.color, sh.variant) + (sh.style ? ';' + sh.style : '')\">{{ sh.value }}</mat-chip> }\n @case ('rating') {\n <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n @for (_ of ratingRange(sh); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, sh.value)\"\n [color]=\"ratingThemeColor(sh)\"\n [style.cssText]=\"ratingIconStyle(sh)\"></mat-icon> }\n </span>\n }\n @case ('html') { <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\" [innerHTML]=\"sh.value\"></span> }\n @default { <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">{{ sh.value }}</span> }\n }\n }\n </div>\n }\n @for (item of section.items; track trackByItem($index, item); let i = $index) {\n <mat-list-option\n [value]=\"item\"\n [attr.aria-label]=\"primary(item)?.value || null\"\n (click)=\"onItemClick(item, i, section.key || undefined)\"\n >\n <div class=\"list-item-content\">\n <div class=\"list-item-leading\">\n @if (leading(item); as lead) {\n @switch (lead.type) {\n @case ('icon') {\n <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\"\n [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [style.cssText]=\"(lead.style ? lead.style + ';' : '') + iconStyle(lead.color)\"></mat-icon>\n }\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) {\n <mat-chip class=\"lead-badge\" [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 }\n </div>\n }\n @case ('text') {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span>\n }\n @case ('chip') {\n <mat-chip [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [ngClass]=\"((lead.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [style.cssText]=\"chipStyle(lead.color, lead.variant)\">{{ lead.value }}</mat-chip>\n }\n @case ('rating') {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">\n @for (_ of ratingRange(lead); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, lead.value)\"\n [color]=\"ratingThemeColor(lead)\"\n [style.cssText]=\"ratingIconStyle(lead)\"></mat-icon> }\n </span>\n }\n @case ('html') {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\" [innerHTML]=\"lead.value\"></span>\n }\n @default {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span>\n }\n }\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n </div>\n <div class=\"list-item-text\">\n <div class=\"primary\" [ngClass]=\"primary(item)?.class\" [style.cssText]=\"primary(item)?.style\">{{\n primary(item)?.value }}</div>\n @if (layoutLines > 1) { <div class=\"secondary\" [ngClass]=\"secondary(item)?.class\"\n [style.cssText]=\"secondary(item)?.style\">{{ secondary(item)?.value }}</div> }\n @if (meta(item); as m) {\n @if ((config.templating?.metaPlacement === 'line' && (m?.type === 'text' || m?.type === 'date' || m?.type\n === 'currency')) || (layoutLines > 2 && (m?.type === 'text' || m?.type === 'date' || m?.type ===\n 'currency'))) {\n <div class=\"tertiary\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (config.templating?.metaPrefixIcon; as mpi) { <mat-icon [praxisIcon]=\"mpi\"></mat-icon> }\n {{ m.value }}\n </div>\n }\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\">{{\n featureLabel(item, f.expr) }}</span> }\n </span>\n }\n </div>\n }\n </div>\n <div class=\"list-item-trailing\">\n @if (meta(item); as m) {\n @if (!(((config.templating?.metaPlacement === 'line') || (layoutLines > 2)) && (m?.type === 'text' ||\n m?.type === 'date' || m?.type === 'currency'))) {\n <div class=\"meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @switch (m.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(m.color) ? m.color : undefined\"\n [ngClass]=\"((m.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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\n [praxisIcon]=\"starIcon(idx, m.value)\"\n [color]=\"ratingThemeColor(m)\"\n [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>@if (config.templating?.metaPrefixIcon; as mpi2) { <mat-icon [praxisIcon]=\"mpi2\"></mat-icon> }{{\n m.value }}</span> }\n }\n </div>\n }\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\"\n [ngClass]=\"((tr.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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') {\n <div class=\"lead-image\" [ngClass]=\"tr.class\" [style.cssText]=\"tr.style\">\n <img [src]=\"tr.value\" [alt]=\"config.templating?.trailing?.imageAlt || ''\" />\n @if (tr.badge?.value) { <mat-chip class=\"lead-badge\"\n [color]=\"isThemeColor(tr.badge?.color) ? tr.badge?.color : undefined\"\n [ngClass]=\"(((tr.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(tr.badge?.color, tr.badge?.variant)\">{{ tr.badge?.value }}</mat-chip> }\n </div>\n }\n @case ('rating') { @for (_ of ratingRange(tr); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, tr.value)\"\n [color]=\"ratingThemeColor(tr)\"\n [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 @if ((visibleActions(item) || []).length) {\n <div\n class=\"list-item-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\">\n @for (action of visibleActions(item); let aidx = $index; track action?.id ?? $index) {\n @if ((action.kind || 'icon') === 'icon') {\n <button mat-icon-button [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"action.icon\" [style.cssText]=\"iconStyle(action.color)\"></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === 'stroked') { <button mat-stroked-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'stroked')\"\n (click)=\"onActionClick($event, action.id, item, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (action.buttonVariant === 'raised') { <button mat-raised-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'raised')\"\n (click)=\"onActionClick($event, action.id, item, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (!action.buttonVariant || action.buttonVariant === 'flat') { <button mat-flat-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'flat')\"\n (click)=\"onActionClick($event, action.id, item, i)\"\n [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n }\n }\n </div>\n }\n </div>\n </div>\n </mat-list-option>\n @if ((config.layout?.dividers === 'all' || config.layout?.dividers === 'between') && i < section.items.length - 1) { <mat-divider></mat-divider> }\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 (section of sections$ | async; track trackBySection($index, section); let sidx = $index) {\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') { <mat-icon [praxisIcon]=\"sh.value\" [ngClass]=\"sh.class\"\n [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [style.cssText]=\"(sh.style ? sh.style + ';' : '') + iconStyle(sh.color)\"></mat-icon>\n }\n @case ('image') {\n <span class=\"inline-image\" [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n <img [src]=\"sh.value\" [alt]=\"config.templating?.sectionHeader?.imageAlt || ''\" />\n @if (sh.badge?.value) { <mat-chip class=\"inline-badge\"\n [color]=\"isThemeColor(sh.badge?.color) ? sh.badge?.color : undefined\"\n [ngClass]=\"(((sh.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(sh.badge?.color, sh.badge?.variant)\">{{ sh.badge?.value }}</mat-chip> }\n </span>\n }\n @case ('chip') { <mat-chip [color]=\"isThemeColor(sh.color) ? sh.color : undefined\"\n [ngClass]=\"[sh.class || '', ((sh.variant || 'filled') === 'outlined') ? 'chip-outlined' : '']\"\n [style.cssText]=\"chipStyle(sh.color, sh.variant) + (sh.style ? ';' + sh.style : '')\">{{ sh.value }}</mat-chip> }\n @case ('rating') {\n <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">\n @for (_ of ratingRange(sh); track $index; let idx = $index) { <mat-icon\n [praxisIcon]=\"starIcon(idx, sh.value)\"\n [color]=\"ratingThemeColor(sh)\"\n [style.cssText]=\"ratingIconStyle(sh)\"></mat-icon> }\n </span>\n }\n @case ('html') { <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\" [innerHTML]=\"sh.value\"></span> }\n @default { <span [ngClass]=\"sh.class\" [style.cssText]=\"sh.style\">{{ sh.value }}</span> }\n }\n }\n </div>\n }\n @for (item of section.items; track trackByItem($index, item); let i = $index) {\n <mat-list-item\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"primary(item)?.value || null\"\n (click)=\"onItemClick(item, i, section.key || undefined)\"\n (keydown.enter)=\"onItemClick(item, i, section.key || undefined)\"\n (keydown.space)=\"$event.preventDefault(); onItemClick(item, i, section.key || undefined)\"\n >\n <div class=\"list-item-content\">\n <div class=\"list-item-leading\">\n @if (leading(item); as lead) {\n @switch (lead.type) {\n @case ('icon') { <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\"\n [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [style.cssText]=\"(lead.style ? lead.style + ';' : '') + iconStyle(lead.color)\"></mat-icon>\n }\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\"\n [ngClass]=\"((lead.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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,\n lead.value)\" [color]=\"ratingThemeColor(lead)\" [style.cssText]=\"ratingIconStyle(lead)\"></mat-icon> } }\n @case ('html') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\"\n [innerHTML]=\"lead.value\"></span> }\n @default { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n }\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n </div>\n <div class=\"list-item-text\">\n <div class=\"primary\" [ngClass]=\"primary(item)?.class\" [style.cssText]=\"primary(item)?.style\">{{\n primary(item)?.value }}</div>\n @if (layoutLines > 1) { <div class=\"secondary\" [ngClass]=\"secondary(item)?.class\"\n [style.cssText]=\"secondary(item)?.style\">{{ secondary(item)?.value }}</div> }\n @if (meta(item); as m) {\n @if ((config.templating?.metaPlacement === 'line' && (m?.type === 'text' || m?.type === 'date' || m?.type\n === 'currency')) || (layoutLines > 2 && (m?.type === 'text' || m?.type === 'date' || m?.type ===\n 'currency'))) {\n <div class=\"tertiary\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (config.templating?.metaPrefixIcon; as mpi) { <mat-icon [praxisIcon]=\"mpi\"></mat-icon> }\n {{ m.value }}\n </div>\n }\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(item, f.expr) }}</span> }\n </span>\n }\n </div>\n }\n </div>\n <div class=\"list-item-trailing\">\n @if (meta(item); as m) {\n @if (!(((config.templating?.metaPlacement === 'line') || (layoutLines > 2)) && (m?.type === 'text' ||\n m?.type === 'date' || m?.type === 'currency'))) {\n <div class=\"meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\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,\n 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>@if (config.templating?.metaPrefixIcon; as mpi2) { <mat-icon [praxisIcon]=\"mpi2\"></mat-icon> }{{ m.value }}</span> }\n }\n </div>\n }\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') {\n <div class=\"lead-image\" [ngClass]=\"tr.class\" [style.cssText]=\"tr.style\">\n <img [src]=\"tr.value\" [alt]=\"config.templating?.trailing?.imageAlt || ''\" />\n @if (tr.badge?.value) { <mat-chip class=\"lead-badge\"\n [color]=\"isThemeColor(tr.badge?.color) ? tr.badge?.color : undefined\"\n [ngClass]=\"(((tr.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(tr.badge?.color, tr.badge?.variant)\">{{ tr.badge?.value }}</mat-chip> }\n </div>\n }\n @case ('rating') { @for (_ of ratingRange(tr); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx,\n 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 @if ((visibleActions(item) || []).length) {\n <div\n class=\"list-item-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\">\n @for (action of visibleActions(item); let aidx = $index; track action?.id ?? $index) {\n @if ((action.kind || 'icon') === 'icon') {\n <button mat-icon-button [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"action.icon\" [style.cssText]=\"iconStyle(action.color)\"></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === 'stroked') { <button mat-stroked-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'stroked')\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (action.buttonVariant === 'raised') { <button mat-raised-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'raised')\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (!action.buttonVariant || action.buttonVariant === 'flat') { <button mat-flat-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n [style.cssText]=\"buttonStyle(action.color, 'flat')\"\n (click)=\"onActionClick($event, action.id, item, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, item, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, item, i)}\">\n @if (isActionLoading(action.id, item, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n }\n }\n </div>\n }\n </div>\n </div>\n </mat-list-item>\n @if ((config.layout?.dividers === 'all' || config.layout?.dividers === 'between') && i < section.items.length - 1) { <mat-divider></mat-divider> }\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 role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"primary(it)?.value || null\"\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') { <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\"\n [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [style.cssText]=\"(lead.style ? lead.style + ';' : '') + iconStyle(lead.color)\"></mat-icon>\n }\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\"\n [ngClass]=\"((lead.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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,\n lead.value)\" [color]=\"ratingThemeColor(lead)\" [style.cssText]=\"ratingIconStyle(lead)\"></mat-icon> } }\n @case ('html') { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\"\n [innerHTML]=\"lead.value\"></span> }\n @default { <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">{{ lead.value }}</span> }\n }\n } @else {\n <span class=\"leading-placeholder\"></span>\n }\n </div>\n <div class=\"list-item-text\">\n <div class=\"primary\" [ngClass]=\"primary(it)?.class\" [style.cssText]=\"primary(it)?.style\">{{\n primary(it)?.value }}</div>\n @if (layoutLines > 1) { <div class=\"secondary\" [ngClass]=\"secondary(it)?.class\"\n [style.cssText]=\"secondary(it)?.style\">{{ secondary(it)?.value }}</div> }\n @if (meta(it); as m) {\n @if ((config.templating?.metaPlacement === 'line' && (m?.type === 'text' || m?.type === 'date' || m?.type\n === 'currency')) || (layoutLines > 2 && (m?.type === 'text' || m?.type === 'date' || m?.type ===\n 'currency'))) {\n <div class=\"tertiary\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (config.templating?.metaPrefixIcon; as mpi) { <mat-icon [praxisIcon]=\"mpi\"></mat-icon> }\n {{ m.value }}\n </div>\n }\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\">{{\n featureLabel(it, f.expr) }}</span> }\n </span>\n }\n </div>\n }\n </div>\n <div class=\"list-item-trailing\">\n @if (meta(it); as m) {\n @if (!(((config.templating?.metaPlacement === 'line') || (layoutLines > 2)) && (m?.type === 'text' ||\n m?.type === 'date' || m?.type === 'currency'))) {\n <div class=\"meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @switch (m.type) {\n @case ('chip') { <mat-chip [color]=\"isThemeColor(m.color) ? m.color : undefined\"\n [ngClass]=\"((m.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [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,\n 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>@if (config.templating?.metaPrefixIcon; as mpi2) { <mat-icon [praxisIcon]=\"mpi2\"></mat-icon> }{{ m.value }}</span> }\n }\n </div>\n }\n }\n @if (trailing(it); as tr) {\n @if ((config.templating?.statusPosition || 'inline') === 'top-right' && (tr?.type === 'chip' || tr?.type\n === 'icon')) {\n <div class=\"status-overlay\">\n @if (tr?.type === 'chip') { <mat-chip [color]=\"isThemeColor(tr.color) ? tr.color : undefined\"\n [ngClass]=\"((tr.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [style.cssText]=\"chipStyle(tr.color, tr.variant)\">{{ tr.value }}</mat-chip>\n }\n @if (tr?.type === 'icon') { <mat-icon [praxisIcon]=\"tr.value\"\n [color]=\"isThemeColor(tr.color) ? tr.color : undefined\" [style.cssText]=\"iconStyle(tr.color)\"></mat-icon> }\n </div>\n } @else {\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\"\n [ngClass]=\"((tr.variant || 'filled') === 'outlined') ? 'chip-outlined' : ''\"\n [style.cssText]=\"chipStyle(tr.color, tr.variant)\">{{ tr.value }}</mat-chip>\n }\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') {\n <div class=\"lead-image\" [ngClass]=\"tr.class\" [style.cssText]=\"tr.style\">\n <img [src]=\"tr.value\" [alt]=\"config.templating?.trailing?.imageAlt || ''\" />\n @if (tr.badge?.value) { <mat-chip class=\"lead-badge\"\n [color]=\"isThemeColor(tr.badge?.color) ? tr.badge?.color : undefined\"\n [ngClass]=\"(((tr.badge?.variant || 'filled') === 'outlined') ? 'chip-outlined' : '')\"\n [style.cssText]=\"chipStyle(tr.badge?.color, tr.badge?.variant)\">{{ tr.badge?.value }}</mat-chip> }\n </div>\n }\n @case ('rating') { @for (_ of ratingRange(tr); track $index; let idx = $index) { <mat-icon [praxisIcon]=\"starIcon(idx,\n 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 }\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 @for (action of visibleActions(it); let aidx = $index; track action?.id ?? $index) {\n @if ((action.kind || 'icon') === 'icon') {\n <button mat-icon-button [color]=\"isThemeColor(action.color) ? action.color : undefined\"\n (click)=\"onActionClick($event, action.id, it, i)\" [attr.aria-label]=\"action.label || action.id\"\n [disabled]=\"isActionLoading(action.id, it, i)\"\n [ngClass]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"action.icon\" [style.cssText]=\"iconStyle(action.color)\"></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === 'stroked') { <button mat-stroked-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (action.buttonVariant === 'raised') { <button mat-raised-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (!action.buttonVariant || action.buttonVariant === 'flat') { <button mat-flat-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\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 role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"primary(it)?.value || null\"\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 [src]=\"lead.value\" [alt]=\"config.templating?.leading?.imageAlt || ''\" />\n }\n @case ('icon') { <mat-icon [praxisIcon]=\"lead.value\" [ngClass]=\"lead.class\"\n [color]=\"isThemeColor(lead.color) ? lead.color : undefined\"\n [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') {\n <span [ngClass]=\"lead.class\" [style.cssText]=\"lead.style\">\n @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 </span>\n }\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\n @if (trailing(it); as tr) {\n @if ((config.templating?.statusPosition || 'inline') === '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\n <div class=\"tile-body\">\n <div class=\"primary\" [ngClass]=\"primary(it)?.class\" [style.cssText]=\"primary(it)?.style\">{{ primary(it)?.value }}</div>\n @if (layoutLines > 1) { <div class=\"secondary\" [ngClass]=\"secondary(it)?.class\" [style.cssText]=\"secondary(it)?.style\">{{ secondary(it)?.value }}</div> }\n\n @if (meta(it); as m) {\n <div class=\"tile-meta\" [ngClass]=\"m.class\" [style.cssText]=\"m.style\">\n @if (config.templating?.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\n @if (featuresVisible()) {\n <div class=\"tiles-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\n @if (trailing(it); as tr2) {\n @if (!((config.templating?.statusPosition || 'inline') === 'top-right' && (tr2?.type === 'chip' || tr2?.type === 'icon'))) {\n <div class=\"tile-trailing\" [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 ('icon') { <mat-icon [praxisIcon]=\"tr2.value\" [color]=\"isThemeColor(tr2.color) ? tr2.color : undefined\" [style.cssText]=\"iconStyle(tr2.color)\"></mat-icon> }\n @case ('image') { <span class=\"inline-image\"><img [src]=\"tr2.value\" [alt]=\"tr2.imageAlt || ''\" /></span> }\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 ('html') { <span [innerHTML]=\"tr2.value\"></span> }\n @default { <span>{{ tr2.value }}</span> }\n }\n </div>\n }\n }\n </div>\n\n @if ((visibleActions(it) || []).length) {\n <div\n class=\"tile-actions\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onActionKeydown($event)\"\n (keydown.space)=\"onActionKeydown($event)\">\n @for (action of visibleActions(it); let aidx = $index; track action?.id ?? $index) {\n @if ((action.kind || 'icon') === 'icon') {\n <button mat-icon-button [color]=\"isThemeColor(action.color) ? action.color : undefined\" (click)=\"onActionClick($event, action.id, it, i)\" [attr.aria-label]=\"action.label || action.id\" [disabled]=\"isActionLoading(action.id, it, i)\" [ngClass]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"action.icon\" [style.cssText]=\"iconStyle(action.color)\"></mat-icon>\n }\n </button>\n } @else {\n @if (action.buttonVariant === 'stroked') { <button mat-stroked-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (action.buttonVariant === 'raised') { <button mat-raised-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\n @if (!action.buttonVariant || action.buttonVariant === 'flat') { <button mat-flat-button\n [color]=\"isThemeColor(action.color) ? action.color : undefined\"\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]=\"{'action-loading': isActionLoading(action.id, it, i)}\">\n @if (isActionLoading(action.id, it, i)) {\n <mat-progress-spinner class=\"action-spinner\" mode=\"indeterminate\" diameter=\"16\" strokeWidth=\"3\"></mat-progress-spinner>\n } @else {\n {{ action.label || action.id }}\n }\n </button> }\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()\">Anterior</button>\n <button mat-stroked-button color=\"primary\" (click)=\"nextPage()\">Próximo</button>\n <mat-form-field class=\"paginator-page-size\" appearance=\"outline\">\n <mat-label>Tam. página</mat-label>\n <mat-select (selectionChange)=\"setPageSize($event.value)\" [value]=\"config.layout?.pageSize || 10\">\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)\">{{ sortOptionLabel(op) }}</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>{{ config.ui?.searchPlaceholder || 'Buscar' }}</mat-label>\n <input matInput type=\"search\" (input)=\"onSearchInput($any($event.target).value)\" />\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\">{{ (total || 0) > 0 ? rangeStart(ps) : 0 }}–{{ rangeEnd(curr?.length || 0, ps, total || 0) }} de {{ total || 0\n }}</span>\n }\n }\n }\n } @else {\n @if (total$ | async; as total2) { <span class=\"muted\">Total: {{ total2 }}</span> }\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 ],\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';\n\ntype DemoScenario = 'operations' | '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 = 'elevated' | 'outline' | 'flat' | 'neumorphism' | 'pill-soft' | 'glass' | 'gradient-tile' | '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}\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\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: '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: '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: '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() === '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 variant = this.variant();\n const activeLines = this.lines();\n const isSelection = this.selectionMode() !== 'none';\n\n return {\n id: 'praxis-list-doc-live',\n dataSource: {\n data: this.liveItems(),\n resourcePath: 'docs/list',\n sort: [isCatalog ? 'rating,desc' : 'budget,desc'],\n },\n layout: {\n variant,\n density: this.density(),\n lines: activeLines,\n dividers: variant === 'list' ? 'between' : 'none',\n model: isCatalog ? 'hotel' : 'media',\n groupBy:\n !isCatalog && scenario !== 'empty' && variant === 'list'\n ? 'department'\n : undefined,\n pageSize: 8,\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 templating: this.buildTemplatingConfig(isCatalog),\n actions: [\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: true,\n searchField: 'title',\n searchPlaceholder: 'Buscar por titulo',\n showSort: true,\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: true,\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 === '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 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 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 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 private buildSkinConfig(typeOverride?: DemoSkin): PraxisListConfig['skin'] {\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 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 <header class=\"hero\">\n <div class=\"hero__copy\">\n <p class=\"hero__eyebrow\">Praxis UI - List</p>\n <h1>Pagina viva de documentacao do <code>praxis-list</code></h1>\n <p>\n Esta pagina entrega um laboratorio completo para validar recursos de\n layout, templating, selecao, acoes, skins e contratos de integracao do\n componente.\n </p>\n <div class=\"hero__badges\">\n <span>Live first</span>\n <span>Config orientada a JSON</span>\n <span>Cobertura corporativa</span>\n </div>\n </div>\n <div class=\"hero__panel\">\n <p class=\"hero__panel-title\">Recursos cobertos</p>\n <ul>\n @for (topic of featureCoverage; track topic.title) {\n <li>\n <strong>{{ topic.title }}</strong>\n <span>{{ topic.details }}</span>\n </li>\n }\n </ul>\n </div>\n </header>\n\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 (click)=\"setVariant(option.id)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\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 (click)=\"setLines($any(count))\"\n >\n {{ count }}\n </button>\n }\n </div>\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 (click)=\"setSelectionMode(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\">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 <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 </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/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';\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","i8","i10"],"mappings":"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"}
|