{"version":3,"file":"praxisui-crud.mjs","sources":["../../../projects/praxis-crud/src/lib/dialog.service.ts","../../../projects/praxis-crud/src/lib/drawer.adapter.ts","../../../projects/praxis-crud/src/lib/crud-launcher.service.ts","../../../projects/praxis-crud/src/lib/crud.types.ts","../../../projects/praxis-crud/src/lib/praxis-crud.component.ts","../../../projects/praxis-crud/src/lib/dynamic-form-dialog-host.component.ts","../../../projects/praxis-crud/src/lib/praxis-crud.metadata.ts","../../../projects/praxis-crud/src/lib/crud-page-header.component.ts","../../../projects/praxis-crud/src/public-api.ts","../../../projects/praxis-crud/src/praxisui-crud.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport {\n  MatDialog,\n  MatDialogRef,\n  MatDialogConfig,\n  MAT_DIALOG_DATA,\n} from '@angular/material/dialog';\nimport { ComponentType } from '@angular/cdk/portal';\n\nexport type DialogRef<T = any, R = any> = MatDialogRef<T, R>;\n\nexport interface DialogConfig<D = any> extends MatDialogConfig<D> {\n  /** Disable closing when user clicks on backdrop */\n  disableCloseOnBackdrop?: boolean;\n  /** Disable closing when user presses escape */\n  disableCloseOnEsc?: boolean;\n  /** Enable maximize button */\n  canMaximize?: boolean;\n  /** Start dialog maximized */\n  startMaximized?: boolean;\n  /** Screen width in px where dialog starts fullscreen */\n  fullscreenBreakpoint?: number;\n}\n\nexport { MAT_DIALOG_DATA as DIALOG_DATA } from '@angular/material/dialog';\n\n@Injectable({ providedIn: 'root' })\nexport class DialogService {\n  constructor(private matDialog: MatDialog, private zone: NgZone) {}\n\n  open<T, D = unknown, R = unknown>(\n    component: ComponentType<T>,\n    config?: DialogConfig<D>,\n  ): DialogRef<T, R> {\n    return this.zone.run(() => this.matDialog.open(component, config));\n  }\n\n  async openAsync<T, D = unknown, R = unknown>(\n    loader: () => Promise<ComponentType<T>>,\n    config?: DialogConfig<D>,\n  ): Promise<DialogRef<T, R>> {\n    const component = await loader();\n    return this.zone.run(() => this.matDialog.open(component, config));\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { CrudAction, CrudMetadata } from './crud.types';\n\nexport interface CrudDrawerOpenConfig {\n  action: CrudAction;\n  metadata: CrudMetadata;\n  inputs: Record<string, unknown>;\n}\n\nexport interface CrudDrawerAdapter {\n  open(config: CrudDrawerOpenConfig): Promise<void> | void;\n}\n\nexport const CRUD_DRAWER_ADAPTER = new InjectionToken<CrudDrawerAdapter>('CRUD_DRAWER_ADAPTER');\n\n","import { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { CrudMetadata, CrudAction, FormOpenMode } from './crud.types';\nimport { DialogService, DialogRef } from './dialog.service';\nimport { CONFIG_STORAGE, ConfigStorage, GlobalConfigService, fillUndefined } from '@praxisui/core';\nimport { CRUD_DRAWER_ADAPTER, CrudDrawerAdapter } from './drawer.adapter';\n\n@Injectable({ providedIn: 'root' })\nexport class CrudLauncherService {\n  private readonly router = inject(Router);\n  private readonly dialog = inject(DialogService);\n  private readonly storage = inject<ConfigStorage>(CONFIG_STORAGE);\n  private readonly global = inject(GlobalConfigService);\n  private readonly drawerAdapter = (() => {\n    try { return inject<CrudDrawerAdapter>(CRUD_DRAWER_ADAPTER); } catch { return undefined as any; }\n  })();\n\n  async launch(\n    action: CrudAction,\n    row: Record<string, unknown> | undefined,\n    metadata: CrudMetadata,\n  ): Promise<{\n    mode: FormOpenMode;\n    ref?: DialogRef<any>;\n  }> {\n    // Carregar overrides de CRUD (se houver) e mesclar em uma cópia local\n    const merged = this.mergeCrudOverrides(metadata, action);\n    const mode = this.resolveOpenMode(merged.action, merged.metadata);\n    console.debug('[CRUD:Launcher] mode=', mode, 'action=', action);\n\n    if (mode === 'route') {\n      if (!merged.action.route) {\n        throw new Error(`Route not provided for action ${merged.action.action}`);\n      }\n      const url = this.buildRoute(merged.action, row, merged.metadata);\n      await this.router.navigateByUrl(url);\n      return { mode };\n    }\n\n    if (mode === 'drawer' && this.drawerAdapter) {\n      const inputs = this.mapInputs(merged.action, row);\n      const idField = merged.metadata.resource?.idField ?? 'id';\n      if (row && inputs[idField] === undefined && (row as any)[idField] !== undefined) {\n        inputs[idField] = (row as any)[idField];\n      }\n      await Promise.resolve(this.drawerAdapter.open({ action: merged.action, metadata: merged.metadata, inputs }));\n      return { mode };\n    }\n\n    if (!merged.action.formId) {\n      throw new Error(`formId not provided for action ${merged.action.action}`);\n    }\n    const inputs = this.mapInputs(merged.action, row);\n    const idField = merged.metadata.resource?.idField ?? 'id';\n    if (row && inputs[idField] === undefined && row[idField] !== undefined) {\n      inputs[idField] = row[idField];\n    }\n    const modalCfg = { ...(merged.metadata.defaults?.modal || {}) } as any;\n\n    console.debug('[CRUD:Launcher] opening dialog with:', {\n      action: merged.action.action,\n      formId: merged.action.formId,\n      inputs,\n      modalCfg,\n      resourcePath:\n        merged.metadata.resource?.path ?? (merged.metadata.table as any)?.resourcePath,\n    });\n    const panelClasses = ['pfx-dialog-pane', 'pfx-dialog-frosted'];\n    if (modalCfg.panelClass) {\n      panelClasses.push(modalCfg.panelClass);\n    }\n    // Backdrop style presets\n    const backdropClasses: string[] = [];\n    const style = modalCfg.backdropStyle as string | undefined;\n    if (!style || style === 'blur') {\n      backdropClasses.push('pfx-blur-backdrop');\n    } else if (style === 'dim') {\n      backdropClasses.push('cdk-overlay-dark-backdrop');\n    } else if (style === 'transparent') {\n      backdropClasses.push('pfx-transparent-backdrop');\n    }\n    if (modalCfg.backdropClass) {\n      backdropClasses.push(modalCfg.backdropClass);\n    }\n    const ref = await this.dialog.openAsync(\n      () =>\n        import('./dynamic-form-dialog-host.component').then(\n          (m) => m.DynamicFormDialogHostComponent,\n        ),\n      {\n        ...modalCfg,\n        panelClass: panelClasses,\n        backdropClass: backdropClasses,\n        autoFocus: modalCfg.autoFocus ?? true,\n        restoreFocus: modalCfg.restoreFocus ?? true,\n        minWidth: '360px',\n        maxWidth: '95vw',\n        ariaLabelledBy: 'crudDialogTitle',\n        data: { action: merged.action, row, metadata: merged.metadata, inputs },\n      },\n    );\n    return { mode, ref };\n  }\n\n  resolveOpenMode(action: CrudAction, metadata: CrudMetadata): FormOpenMode {\n    // Local precedence: action > metadata.defaults\n    const local = action.openMode ?? metadata.defaults?.openMode;\n    if (local) return local;\n\n    // Global fallback (action-specific, then general), then hard fallback 'route'\n    try {\n      const globalCrud = this.global.getCrud();\n      const actionName = (action as any).action as string | undefined;\n      const globalMode = (actionName && globalCrud?.actionDefaults?.[actionName]?.openMode) ?? globalCrud?.defaults?.openMode;\n      let resolved: FormOpenMode = (globalMode as any) ?? 'route';\n      // Safety: if modal/drawer but no formId, degrade to route to avoid runtime error\n      if ((resolved === 'modal' || resolved === 'drawer') && !action.formId) {\n        resolved = 'route';\n      }\n      return resolved;\n    } catch {\n      return 'route';\n    }\n  }\n\n  private buildRoute(\n    action: CrudAction,\n    row: Record<string, unknown> | undefined,\n    metadata: CrudMetadata,\n  ): string {\n    let route = action.route as string;\n    const query: Record<string, string> = {};\n    action.params?.forEach((p) => {\n      const value = row?.[p.from];\n      if (p.to === 'routeParam') {\n        if (value === undefined || value === null) {\n          throw new Error(`Missing value for route param ${p.name}`);\n        }\n        const re = new RegExp(`:${p.name}\\\\b`, 'g');\n        route = route.replace(re, encodeURIComponent(String(value)));\n      } else if (p.to === 'query' && value !== undefined && value !== null) {\n        query[p.name] = String(value);\n      }\n    });\n    const missing = route.match(/:[a-zA-Z0-9_-]+/g);\n    if (missing) {\n      throw new Error(\n        `Missing route parameters for action \"${action.action}\": ${missing\n          .map((m) => m.slice(1))\n          .join(', ')}`,\n      );\n    }\n    // Ensure resource is present for routed forms so the formId is deterministic\n    try {\n      const resourcePath =\n        metadata.resource?.path || (metadata.table as any)?.resourcePath;\n      if (resourcePath && query['resource'] === undefined) {\n        query['resource'] = resourcePath as string;\n      }\n    } catch {}\n    // ReturnTo param for graceful back navigation on routed forms\n    const back = action.back || metadata.defaults?.back;\n    const returnTo = back?.returnTo || this.router.url;\n    if (returnTo) {\n      query['returnTo'] = returnTo;\n    }\n    const queryString = new URLSearchParams(query).toString();\n    return queryString ? `${route}?${queryString}` : route;\n  }\n\n  private mapInputs(\n    action: CrudAction,\n    row: Record<string, unknown> | undefined,\n  ): Record<string, unknown> {\n    const inputs: Record<string, unknown> = {};\n    action.params?.forEach((p) => {\n      if (p.to === 'input') {\n        inputs[p.name] = row?.[p.from];\n      }\n    });\n    return inputs;\n  }\n\n  private mergeCrudOverrides(\n    metadata: CrudMetadata,\n    action: CrudAction,\n  ): { metadata: CrudMetadata; action: CrudAction } {\n    try {\n      const tableId =\n        metadata.resource?.path || (metadata.table as any)?.resourcePath || 'default';\n      const key = `crud-overrides:${tableId}`;\n      const saved = (this.storage.loadConfig(key) as any) || {};\n      const overDefaults = saved.defaults || {};\n      const overActions = saved.actions || {};\n\n      // Merge defaults (shallow for defaults, shallow for modal/back)\n      let mergedDefaults: any = {\n        ...(metadata.defaults || {}),\n        ...('openMode' in overDefaults ? { openMode: overDefaults.openMode } : {}),\n        modal: { ...(metadata.defaults?.modal || {}), ...(overDefaults.modal || {}) },\n        back: { ...(metadata.defaults?.back || {}), ...(overDefaults.back || {}) },\n        header: { ...(metadata.defaults?.header || {}), ...(overDefaults.header || {}) },\n      };\n\n      // Fill missing defaults from GlobalConfig (as last fallback)\n      try {\n        const globalCrud = this.global.getCrud();\n        if (globalCrud?.defaults) {\n          mergedDefaults = fillUndefined(mergedDefaults, globalCrud.defaults as any);\n        }\n      } catch {}\n\n      // Merge metadata copy\n      const mergedMetadata: CrudMetadata = {\n        ...metadata,\n        defaults: mergedDefaults,\n      };\n\n      // Action-level override\n      const actOv = overActions[action.action] || {};\n      const mergedAction: CrudAction = {\n        ...action,\n        ...('openMode' in actOv ? { openMode: actOv.openMode } : {}),\n        ...('formId' in actOv ? { formId: actOv.formId } : {}),\n        ...('route' in actOv ? { route: actOv.route } : {}),\n      } as CrudAction;\n\n      return { metadata: mergedMetadata, action: mergedAction };\n    } catch {\n      return { metadata, action };\n    }\n  }\n}\n","import { DialogConfig } from './dialog.service';\nimport {\n  TableConfig,\n  FormConfig,\n  RowAction,\n  ToolbarAction,\n  ApiEndpoint,\n} from '@praxisui/core';\nimport type { BackConfig } from '@praxisui/core';\n\nexport type FormOpenMode = 'route' | 'modal' | 'drawer';\n\nexport interface CrudParamMapping {\n  from: string;\n  to: 'routeParam' | 'query' | 'input';\n  name: string;\n}\n\nexport type CrudAction = (RowAction | ToolbarAction) & {\n  openMode?: FormOpenMode;\n  route?: string;\n  formId?: string;\n  params?: CrudParamMapping[];\n  back?: BackConfig;\n};\n\nexport interface CrudDefaults {\n  openMode?: FormOpenMode;\n  modal?: DialogConfig;\n  back?: BackConfig;\n  header?: CrudHeaderConfig;\n}\n\nexport interface CrudResource {\n  path: string;\n  idField?: string | number;\n  endpointKey?: ApiEndpoint;\n}\n\nexport interface CrudMetadata {\n  component: 'praxis-crud';\n  resource?: CrudResource;\n  table: TableConfig;\n  form?: FormConfig;\n  defaults?: CrudDefaults;\n  actions?: CrudAction[];\n  i18n?: { crudDialog?: Record<string, string> };\n}\n\n// BackConfig moved to @praxisui/core to avoid DF↔CRUD cycle\nexport type { BackConfig };\n\nexport interface CrudHeaderConfig {\n  showBack?: boolean;\n  backLabel?: string;\n  variant?: 'ghost' | 'tonal' | 'outlined';\n  sticky?: boolean;\n  breadcrumbs?: boolean;\n  divider?: boolean;\n}\n\nexport function assertCrudMetadata(meta: CrudMetadata): void {\n  meta.actions?.forEach((action) => {\n    const mode = action.openMode ?? meta.defaults?.openMode ?? 'route';\n    if (mode === 'route' && !action.route) {\n      throw new Error(`Route not provided for action ${action.action}`);\n    }\n    if ((mode === 'modal' || mode === 'drawer') && !action.formId) {\n      throw new Error(`formId not provided for action ${action.action}`);\n    }\n    action.params?.forEach((p) => {\n      if (!['routeParam', 'query', 'input'].includes(p.to)) {\n        throw new Error(`Invalid param mapping target: ${p.to}`);\n      }\n    });\n  });\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  inject,\n  OnChanges,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { PraxisTable } from '@praxisui/table';\nimport { CrudLauncherService } from './crud-launcher.service';\nimport { CrudMetadata, FormOpenMode, assertCrudMetadata, CrudAction } from './crud.types';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TableConfig, CONFIG_STORAGE, ConfigStorage, createDefaultTableConfig, GlobalConfigService } from '@praxisui/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { EmptyStateCardComponent } from '@praxisui/core';\n\n@Component({\n  selector: 'praxis-crud',\n  standalone: true,\n  imports: [PraxisTable, EmptyStateCardComponent],\n  template: `\n    @if ($any(resolvedMetadata)?.resource?.path) {\n      <praxis-table\n        [config]=\"tableConfigForBinding\"\n        [resourcePath]=\"resolvedMetadata.resource?.path\"\n        [tableId]=\"resolvedMetadata.resource?.path || 'default'\"\n        [crudContext]=\"tableCrudContext\"\n        [editModeEnabled]=\"editModeEnabled\"\n        (rowAction)=\"onAction($event.action, $event.row)\"\n        (toolbarAction)=\"onAction($event.action)\"\n        (reset)=\"onResetPreferences()\"\n        [debugLayout]=\"debugLayout\"\n      ></praxis-table>\n    } @else {\n      @if (editModeEnabled) {\n        <praxis-empty-state-card\n          icon=\"table_rows\"\n          [title]=\"'Conecte o CRUD a um recurso'\"\n          [description]=\"'Informe os metadados (resourcePath / schema) para habilitar a tabela e ações.'\"\n          [primaryAction]=\"{ label: 'Configurar metadados', icon: 'bolt', action: onConfigureRequested.bind(this) }\"\n        />\n      }\n    }\n  `,\n})\nexport class PraxisCrudComponent implements OnChanges {\n  /** Habilita visual de debug para alinhamento/layouot */\n  @Input() debugLayout = false;\n  /** JSON inline ou chave/URL resolvida pelo MetadataResolver */\n  @Input({ required: true }) metadata!: CrudMetadata | string;\n  @Input() context?: Record<string, unknown>;\n  /** Encaminha o modo de edição de layout para a tabela interna */\n  @Input() editModeEnabled = false;\n  /** CTA: usado pelo Builder para abrir configuração de metadados quando vazio */\n  @Output() configureRequested = new EventEmitter<void>();\n  @Output() afterOpen = new EventEmitter<{\n    mode: FormOpenMode;\n    action: string;\n  }>();\n  @Output() afterClose = new EventEmitter<void>();\n  @Output() afterSave = new EventEmitter<{\n    id: string | number;\n    data: unknown;\n  }>();\n  @Output() afterDelete = new EventEmitter<{ id: string | number }>();\n  @Output() error = new EventEmitter<unknown>();\n\n  resolvedMetadata!: CrudMetadata;\n  /** Configuração efetiva da tabela com melhorias automáticas (ex.: botão Adicionar). */\n  effectiveTableConfig?: TableConfig;\n  /** Config passado ao PraxisTable — sempre definido (fallback seguro). */\n  tableConfigForBinding: TableConfig = createDefaultTableConfig();\n  private readonly launcher = inject(CrudLauncherService);\n  @ViewChild(PraxisTable) private table!: PraxisTable;\n  private readonly storage = inject<ConfigStorage>(CONFIG_STORAGE);\n  private readonly snack = inject(MatSnackBar);\n  private readonly global = (() => { try { return inject(GlobalConfigService); } catch { return undefined as any; } })();\n  /**\n   * Stable CRUD context passed to PraxisTable.\n   * Previously this was created via a getter, producing a new object each CD tick\n   * and causing excessive re-renders. Now we compute it only when metadata changes.\n   */\n  tableCrudContext?: {\n    tableId: string;\n    resourcePath?: string;\n    defaults?: any;\n    actions?: Array<{\n      action: string;\n      label?: string;\n      formId?: string;\n      route?: string;\n      openMode?: 'modal' | 'route';\n    }>;\n  };\n\n  onResetPreferences(): void {\n    try {\n      const id = this.resolvedMetadata?.resource?.path || 'default';\n      const key = `crud-overrides:${id}`;\n      this.storage.clearConfig(key);\n      this.snack.open('Overrides de CRUD redefinidos', undefined, { duration: 2000 });\n    } catch {}\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['metadata']) {\n      try {\n        this.resolvedMetadata =\n          typeof this.metadata === 'string'\n            ? (JSON.parse(this.metadata) as CrudMetadata)\n            : this.metadata;\n        assertCrudMetadata(this.resolvedMetadata);\n        this.effectiveTableConfig = this.buildEffectiveTableConfig(\n          this.resolvedMetadata,\n        );\n        // Evitar passar undefined para [config], o que sobrescreve o default do PraxisTable\n        this.tableConfigForBinding =\n          this.effectiveTableConfig ||\n          ((this.resolvedMetadata.table as TableConfig | undefined) ??\n            createDefaultTableConfig());\n        // Build a stable table context when metadata changes\n        this.tableCrudContext = this.buildTableCrudContext(this.resolvedMetadata);\n      } catch (err) {\n        this.error.emit(err);\n      }\n    }\n  }\n\n  async onAction(action: string, row?: Record<string, unknown>): Promise<void> {\n    try {\n      (document.activeElement as HTMLElement | null)?.blur();\n      let actionMeta = this.resolvedMetadata.actions?.find(\n        (a) => a.action === action,\n      );\n      // Fallback: if metadata.actions is missing or doesn't include the action,\n      // synthesize from table CRUD context or let overrides drive behavior.\n      if (!actionMeta) {\n        const ctxAction = this.tableCrudContext?.actions?.find((a) => a.action === action);\n        if (ctxAction) {\n          actionMeta = {\n            action: ctxAction.action,\n            openMode: ctxAction.openMode as any,\n            formId: ctxAction.formId,\n            route: ctxAction.route,\n          } as any;\n        } else {\n          // Minimal stub – CrudLauncherService will merge overrides/defaults\n          actionMeta = { action } as any;\n        }\n      }\n      const effectiveAction = (actionMeta || { action } as any) as CrudAction;\n      const { mode, ref } = await this.launcher.launch(\n        effectiveAction,\n        row,\n        this.resolvedMetadata,\n      );\n      this.afterOpen.emit({ mode, action: effectiveAction.action });\n      if (ref) {\n        const idField = this.getIdField();\n        ref\n          .afterClosed()\n          .pipe(takeUntilDestroyed())\n          .subscribe((result) => {\n            this.afterClose.emit();\n            if (result?.type === 'save') {\n              const data = result.data as Record<string, unknown>;\n              const id = data?.[idField] as string | number;\n              this.afterSave.emit({ id, data: result.data });\n              this.refreshTable();\n            }\n            if (result?.type === 'delete') {\n              const data = result.data as Record<string, unknown>;\n              const id = data?.[idField] as string | number;\n              this.afterDelete.emit({ id });\n              this.refreshTable();\n            }\n          });\n      }\n    } catch (err) {\n      this.error.emit(err);\n    }\n  }\n\n  private refreshTable(): void {\n    this.table.refetch();\n  }\n\n  private getIdField(): string {\n    return (this.resolvedMetadata?.resource?.idField as string) || 'id';\n  }\n\n  onConfigureRequested(): void {\n    this.configureRequested.emit();\n  }\n\n  /**\n   * Constrói uma configuração de tabela efetiva a partir dos metadados,\n   * adicionando automaticamente a ação de \"Adicionar\" na toolbar quando aplicável.\n   * - Evita duplicidade se a toolbar já tiver ação equivalente.\n   * - Garante visibilidade da toolbar quando a ação é injetada.\n   */\n  private buildEffectiveTableConfig(meta: CrudMetadata): TableConfig | undefined {\n    const base = meta.table as TableConfig | undefined;\n    // Clonar base ou criar default para permitir injeção de melhorias\n    const cfg: TableConfig = base\n      ? (JSON.parse(JSON.stringify(base)) as TableConfig)\n      : createDefaultTableConfig();\n\n    let changed = false;\n\n    const ensureToolbar = () => {\n      if (!cfg.toolbar) {\n        (cfg as any).toolbar = { visible: true, position: 'top' } as any;\n      }\n      return (cfg as any).toolbar as any;\n    };\n\n    // 1) Toolbar: injetar ação \"Adicionar\" se metadata declara create/add e toolbar não tiver\n    const hasToolbarAdd = (cfg.toolbar?.actions || []).some((a: any) => this.isAddLike(a));\n    const addAction = (meta.actions || []).find((a: any) => this.isAddLike(a));\n    if (addAction) {\n      if (hasToolbarAdd) {\n        const tb = ensureToolbar();\n        tb.visible = true; // garantir visibilidade\n      } else {\n        const tb = ensureToolbar();\n        tb.visible = true;\n        if (!tb.actions) tb.actions = [] as any;\n        const injected = {\n          id: addAction.id || 'add',\n          label: addAction.label || 'Adicionar',\n          icon: addAction.icon || 'add',\n          type: 'button',\n          color: 'primary',\n          position: 'end',\n          action: addAction.action || 'add',\n        } as any;\n        (tb.actions as any[]).push(injected);\n      }\n      changed = true;\n    }\n\n    // 2) Row actions automáticas (apenas quando host não definiu explicitamente)\n    const hostDefinedRow = !!(base && base.actions && (base.actions as any).row);\n    const crudDefaults = (this.global.get('crud.defaults') as any) || {};\n    const autoRow = crudDefaults.autoRowActions !== false; // default true\n    if (!hostDefinedRow && autoRow) {\n      const acts = (meta.actions || []) as any[];\n      const hasView = acts.some((a) => String(a.action).toLowerCase() === 'view');\n      const hasEdit = acts.some((a) => String(a.action).toLowerCase() === 'edit');\n      const includeDelete = !!crudDefaults.includeDeleteInRow && acts.some((a) => String(a.action).toLowerCase() === 'delete');\n      const rowActions: Array<any> = [];\n      if (hasView) rowActions.push({ id: 'view', label: 'Ver', icon: 'visibility', action: 'view', tooltip: 'Ver' });\n      if (hasEdit) rowActions.push({ id: 'edit', label: 'Editar', icon: 'edit', action: 'edit', tooltip: 'Editar' });\n      if (includeDelete) rowActions.push({ id: 'delete', label: 'Excluir', icon: 'delete', action: 'delete', tooltip: 'Excluir' });\n      if (rowActions.length) {\n        (cfg as any).actions = (cfg as any).actions || {};\n        (cfg as any).actions.row = {\n          enabled: true,\n          position: 'end',\n          width: (cfg as any).actions?.row?.width || '120px',\n          display: crudDefaults.rowActionsDisplay || 'icons',\n          trigger: (cfg as any).actions?.row?.trigger || 'hover',\n          actions: rowActions,\n          header: { label: (cfg as any).actions?.row?.header?.label || '' },\n        } as any;\n        changed = true;\n      }\n    }\n\n    // Se nada foi alterado e havia base, não retornar para preservar semântica anterior\n    if (!changed) {\n      return base ? undefined : cfg;\n    }\n    return cfg;\n  }\n\n  /** Heurística leve para identificar ações do tipo \"adicionar/criar\" */\n  private isAddLike(a: any): boolean {\n    if (!a) return false;\n    const normalize = (s?: any) => String(s || '').trim().toLowerCase();\n    const id = normalize(a.action || a.id || a.code || a.key || a.name || a.type);\n    const icon = normalize(a.icon);\n    const label = normalize(a.label);\n    const addIds = new Set(['add', 'create', 'novo', 'new', 'incluir', 'inserir']);\n    if (addIds.has(id)) return true;\n    if (icon === 'add' || icon === 'add_circle' || icon === 'add_box') return true;\n    if (label === 'adicionar' || label === 'novo' || label === 'criar' || label === 'incluir')\n      return true;\n    return false;\n  }\n\n  /** Builds a stable CRUD context object for PraxisTable based on metadata. */\n  private buildTableCrudContext(meta: CrudMetadata):\n    | {\n        tableId: string;\n        resourcePath?: string;\n        defaults?: any;\n        actions?: Array<{\n          action: string;\n          label?: string;\n          formId?: string;\n          route?: string;\n          openMode?: 'modal' | 'route';\n        }>;\n        idField?: string;\n      }\n    | undefined {\n    if (!meta) return undefined;\n    // Provide a minimal default action set when metadata.actions is empty,\n    // so the editor can expose per-action overrides entirely via UI.\n    const baseActions = meta.actions && meta.actions.length\n      ? meta.actions\n      : ([{ action: 'create' }, { action: 'view' }, { action: 'edit' }] as any[]);\n    return {\n      tableId: meta.resource?.path || (meta.table as any)?.resourcePath || 'default',\n      resourcePath: meta.resource?.path || (meta.table as any)?.resourcePath,\n      defaults: meta.defaults,\n      actions: baseActions.map((a: any) => ({\n        action: a.action,\n        label: a.label,\n        formId: a.formId,\n        route: a.route,\n        openMode: a.openMode,\n      })),\n      idField: (meta.resource as any)?.idField || 'id',\n    };\n  }\n}\n","import { Component, Inject, ViewChild, OnInit, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisDynamicForm } from '@praxisui/dynamic-form';\nimport { GenericCrudService, CONFIG_STORAGE, ConfigStorage, PraxisIconDirective } from '@praxisui/core';\nimport { DialogService, DialogRef, DIALOG_DATA } from './dialog.service';\nimport { ConfirmDialogComponent } from '@praxisui/dynamic-fields';\nimport { filter } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  selector: 'praxis-dynamic-form-dialog-host',\n  standalone: true,\n  imports: [\n    CommonModule,\n    MatDialogModule,\n    MatButtonModule,\n    MatIconModule,\n    PraxisIconDirective,\n    PraxisDynamicForm,\n  ],\n  providers: [GenericCrudService],\n  host: {\n    class: 'praxis-dialog',\n    '[attr.data-density]': 'modal.density || \"default\"',\n  },\n  template: `\n    <div class=\"dialog-header\">\n      <h2 id=\"crudDialogTitle\" class=\"dialog-title\">\n        {{ data.action?.label || texts.title }}\n      </h2>\n      <span class=\"spacer\"></span>\n      @if (modal.canMaximize) {\n        <button\n          mat-icon-button\n          type=\"button\"\n          (click)=\"toggleMaximize()\"\n          [attr.aria-label]=\"maximized ? texts.restoreLabel : texts.maximizeLabel\"\n        >\n          <mat-icon [praxisIcon]=\"maximized ? 'close_fullscreen' : 'open_in_full'\"></mat-icon>\n        </button>\n      }\n      <button\n        mat-icon-button\n        type=\"button\"\n        (click)=\"onCancel()\"\n        [attr.aria-label]=\"texts.closeLabel\"\n        cdkFocusInitial\n      >\n        <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n      </button>\n    </div>\n\n    <mat-dialog-content\n      class=\"dialog-content\"\n      aria-labelledby=\"crudDialogTitle\"\n    >\n      <praxis-dynamic-form\n        [formId]=\"data.action?.formId\"\n        [resourcePath]=\"resourcePath\"\n        [resourceId]=\"resourceId\"\n        [mode]=\"mode\"\n        [presentationModeGlobal]=\"mode === 'view' ? true : null\"\n        [backConfig]=\"backConfig\"\n        (formSubmit)=\"onSave($event)\"\n        (formCancel)=\"onCancel()\"\n      ></praxis-dynamic-form>\n    </mat-dialog-content>\n  `,\n  styles: [\n    `\n      :host {\n        --dlg-header-h: 56px;\n        --dlg-footer-h: 56px;\n        --dlg-pad: 16px;\n        display: flex;\n        flex-direction: column;\n        height: 100%;\n        overflow: hidden;\n      }\n      :host([data-density='compact']) {\n        --dlg-header-h: 44px;\n        --dlg-footer-h: 44px;\n        --dlg-pad: 12px;\n      }\n      .dialog-header {\n        position: sticky;\n        top: 0;\n        z-index: 1;\n        display: flex;\n        align-items: center;\n        gap: var(--dlg-pad);\n        padding: 0 var(--dlg-pad);\n        height: var(--dlg-header-h);\n        background: var(--md-sys-color-surface-container-high);\n        border-bottom: 1px solid var(--md-sys-color-outline-variant);\n        color: var(--md-sys-color-on-surface);\n      }\n      .dialog-title {\n        margin: 0;\n        font: inherit;\n        font-weight: 600;\n        color: var(--md-sys-color-on-surface);\n      }\n      .spacer {\n        flex: 1;\n      }\n      .dialog-content {\n        overflow: auto;\n        padding: var(--dlg-pad);\n        /* use small viewport height to avoid mobile chrome jumps */\n        max-height: calc(100svh - var(--dlg-header-h) - 32px);\n      }\n      .dialog-header button.mat-icon-button { color: var(--md-sys-color-on-surface-variant); }\n      .dialog-header button.mat-icon-button:hover {\n        color: var(--md-sys-color-primary);\n        background: color-mix(in srgb, var(--md-sys-color-primary), transparent 90%);\n      }\n      .dialog-footer {\n        position: sticky;\n        bottom: 0;\n        z-index: 1;\n        padding: var(--dlg-pad);\n      }\n    `,\n  ],\n})\nexport class DynamicFormDialogHostComponent implements OnInit {\n  @ViewChild(PraxisDynamicForm) formComp?: PraxisDynamicForm;\n  modal: any = {};\n  maximized = false;\n  private initialSize: { width?: string; height?: string } = {};\n  private rememberState = false;\n  private stateKey?: string;\n  private destroyRef: DestroyRef = inject(DestroyRef);\n\n  resourcePath?: string;\n  resourceId?: string | number;\n  mode: 'create' | 'edit' | 'view' = 'create';\n  backConfig?: import('./crud.types').BackConfig;\n  private idField = 'id';\n\n  texts = {\n    title: 'Formulário',\n    close: 'Fechar',\n    closeLabel: 'Fechar diálogo',\n    maximizeLabel: 'Maximizar',\n    restoreLabel: 'Restaurar',\n    discardTitle: 'Descartar alterações?',\n    discardMessage:\n      'Você tem alterações não salvas. Deseja fechar assim mesmo?',\n    discardConfirm: 'Descartar',\n    discardCancel: 'Cancelar',\n  } as Record<string, string>;\n\n  constructor(\n    @Inject(MatDialogRef)\n    public dialogRef: DialogRef<DynamicFormDialogHostComponent>,\n    @Inject(DIALOG_DATA) public data: any,\n    private dialogService: DialogService,\n    private crud: GenericCrudService<any>,\n    @Inject(CONFIG_STORAGE) private configStorage: ConfigStorage,\n  ) {\n    this.dialogRef.disableClose = true;\n\n    // i18n\n    this.texts = {\n      ...this.texts,\n      ...(this.data.metadata?.i18n?.crudDialog || {}),\n    };\n\n    // defaults do modal (inclui canMaximize: true)\n    this.modal = {\n      canMaximize: true,\n      ...(this.data.metadata?.defaults?.modal || {}),\n    };\n    this.rememberState = !!this.modal.rememberLastState;\n    this.stateKey = this.data.action?.formId\n      ? `crud-dialog-state:${this.data.action.formId}`\n      : undefined;\n\n    // derivar path/id/mode\n    this.resourcePath =\n      this.data.metadata?.resource?.path ??\n      this.data.metadata?.table?.resourcePath;\n\n    if (this.resourcePath) {\n      this.crud.configure(\n        this.resourcePath,\n        this.data.metadata?.resource?.endpointKey,\n      );\n    }\n\n    this.idField = this.data.metadata?.resource?.idField ?? 'id';\n    this.resourceId = this.data.inputs?.[this.idField];\n\n    const act = this.data.action?.action;\n    this.mode = act === 'edit' ? 'edit' : act === 'view' ? 'view' : 'create';\n\n    // Back config: defaults from metadata/action, overridden by saved per-form config\n    const defaults = (this.data.action?.back || this.data.metadata?.defaults?.back) || {};\n    const saved = this.data.action?.formId\n      ? this.configStorage.loadConfig(`crud-back:${this.data.action.formId}`)\n      : null;\n    this.backConfig = { ...defaults, ...(saved || {}) };\n\n    console.debug('[CRUD:Host] constructed', {\n      action: this.data?.action,\n      resourcePath: this.resourcePath,\n      resourceId: this.resourceId,\n      mode: this.mode,\n      modal: this.modal,\n      backConfig: this.backConfig,\n    });\n\n    // Esc\n    if (!this.modal.disableCloseOnEsc) {\n      this.dialogRef\n        .keydownEvents()\n        .pipe(\n          filter((e) => e.key === 'Escape'),\n          takeUntilDestroyed(this.destroyRef),\n        )\n        .subscribe(() => this.onCancel());\n    }\n\n    // Backdrop\n    if (!this.modal.disableCloseOnBackdrop) {\n      this.dialogRef\n        .backdropClick()\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe(() => this.onCancel());\n    }\n\n    // Salvar estado ao fechar, se aplicável\n    this.dialogRef\n      .afterClosed()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.saveState());\n  }\n\n  ngOnInit(): void {\n    // Carregar estado salvo (se habilitado)\n    const saved = this.rememberState && this.stateKey\n      ? (this.configStorage.loadConfig(this.stateKey) as any)\n      : null;\n    this.initialSize = {\n      width: saved?.width ?? this.modal.width,\n      height: saved?.height ?? this.modal.height,\n    };\n    console.debug('[CRUD:Host] ngOnInit', {\n      initialSize: this.initialSize,\n      startMaximized: this.modal.startMaximized,\n      fullscreenBreakpoint: this.modal.fullscreenBreakpoint,\n    });\n    let shouldMax = false;\n    if (saved && typeof saved.maximized === 'boolean') {\n      shouldMax = !!saved.maximized;\n    } else {\n      shouldMax =\n        this.modal.startMaximized ||\n        (this.modal.fullscreenBreakpoint &&\n          window.innerWidth <= this.modal.fullscreenBreakpoint);\n    }\n    if (shouldMax) {\n      this.toggleMaximize(true);\n    } else if (this.initialSize.width || this.initialSize.height) {\n      this.dialogRef.updateSize(this.initialSize.width, this.initialSize.height);\n      this.dialogRef.updatePosition();\n    }\n  }\n\n  onSave(result: unknown): void {\n    if (this.modal.closeOnSave === false) {\n      // Não fechar: manter aberto e opcionalmente salvar estado atual\n      this.saveState();\n      return;\n    }\n    this.dialogRef.close({ type: 'save', data: result });\n  }\n\n  onCancel(): void {\n    const dirty = this.formComp?.form.dirty;\n    const backCfg = (this.data.action?.back || this.data.metadata?.defaults?.back) || {};\n    const confirm = backCfg.confirmOnDirty ?? true;\n    if (dirty && confirm) {\n      const ref = this.dialogService.open(ConfirmDialogComponent, {\n        data: {\n          title: this.texts.discardTitle,\n          message: this.texts.discardMessage,\n          confirmText: this.texts.discardConfirm,\n          cancelText: this.texts.discardCancel,\n          type: 'warning',\n        },\n      });\n      ref\n        .afterClosed()\n        .pipe(\n          filter((confirmed) => !!confirmed),\n          takeUntilDestroyed(this.destroyRef),\n        )\n        .subscribe(() => this.dialogRef.close());\n    } else {\n      this.dialogRef.close();\n    }\n  }\n\n  toggleMaximize(initial = false): void {\n    this.maximized = initial ? true : !this.maximized;\n    const gap = this.maximized ? this.modal.edgeGap ?? 8 : undefined;\n    const width = this.maximized\n      ? `calc(100vw - ${2 * (gap ?? 0)}px)`\n      : this.initialSize.width;\n    const height = this.maximized\n      ? `calc(100dvh - ${2 * (gap ?? 0)}px)`\n      : this.initialSize.height;\n\n    this.dialogRef.updateSize(width, height);\n    this.dialogRef.updatePosition();\n\n    const pane: HTMLElement | undefined = (this.dialogRef as any)\n      ?._containerInstance?._elementRef?.nativeElement?.parentElement;\n    if (pane && pane.classList.contains('pfx-dialog-pane')) {\n      pane.style.margin = this.maximized ? `${gap}px` : '';\n    }\n    this.saveState();\n  }\n\n  private saveState(): void {\n    if (!this.rememberState || !this.stateKey) return;\n    const pane: HTMLElement | undefined = (this.dialogRef as any)\n      ?._containerInstance?._elementRef?.nativeElement?.parentElement;\n    const style = pane ? getComputedStyle(pane) : null;\n    const currentWidth = style?.width || this.initialSize.width;\n    const currentHeight = style?.height || this.initialSize.height;\n    this.configStorage.saveConfig(this.stateKey, {\n      maximized: this.maximized,\n      width: currentWidth,\n      height: currentHeight,\n    });\n  }\n}\n","import { ComponentDocMeta, ComponentMetadataRegistry } from '@praxisui/core';\nimport { PraxisCrudComponent } from './praxis-crud.component';\nimport { CrudMetadata, FormOpenMode } from './crud.types';\nimport { ENVIRONMENT_INITIALIZER, Provider } from '@angular/core';\n\n/** Metadata for PraxisCrudComponent */\nexport const PRAXIS_CRUD_COMPONENT_METADATA: ComponentDocMeta = {\n  id: 'praxis-crud',\n  selector: 'praxis-crud',\n  component: PraxisCrudComponent,\n  friendlyName: 'Praxis CRUD',\n  description: 'Tabela com operações de CRUD via metadados.',\n  icon: 'table_chart',\n  inputs: [\n    {\n      name: 'metadata',\n      type: 'CrudMetadata | string',\n      description: 'Metadados de configuração do CRUD',\n    },\n    {\n      name: 'context',\n      type: 'Record<string, unknown>',\n      description: 'Contexto adicional para resoluções',\n    },\n    {\n      name: 'editModeEnabled',\n      type: 'boolean',\n      default: false,\n      description: 'Habilita modo de edição do layout',\n    },\n  ],\n  outputs: [\n    {\n      name: 'afterOpen',\n      type: '{ mode: FormOpenMode; action: string }',\n      description: 'Emitido após abrir diálogo',\n    },\n    {\n      name: 'afterClose',\n      type: 'void',\n      description: 'Emitido após fechar diálogo',\n    },\n    {\n      name: 'afterSave',\n      type: '{ id: string | number; data: unknown }',\n      description: 'Emitido ao salvar',\n    },\n    {\n      name: 'afterDelete',\n      type: '{ id: string | number }',\n      description: 'Emitido ao deletar',\n    },\n    { name: 'error', type: 'unknown', description: 'Emitido em erros' },\n    {\n      name: 'configureRequested',\n      type: 'void',\n      description: 'Emitido quando CTA de configuração é acionado em modo edição',\n    },\n  ],\n  tags: ['widget', 'crud', 'configurable', 'hasWizard', 'stable'],\n  lib: '@praxisui/crud',\n};\n\n/** Provider para auto-registrar metadados do componente CRUD. */\nexport function providePraxisCrudMetadata(): Provider {\n  return {\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useFactory: (registry: ComponentMetadataRegistry) => () => {\n      registry.register(PRAXIS_CRUD_COMPONENT_METADATA);\n    },\n    deps: [ComponentMetadataRegistry],\n  } as Provider;\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nexport type CrudHeaderVariant = 'ghost' | 'tonal' | 'outlined';\n\n@Component({\n  selector: 'praxis-crud-page-header',\n  standalone: true,\n  imports: [CommonModule, RouterLink, MatButtonModule, MatIconModule, PraxisIconDirective],\n  template: `\n    <header\n      class=\"crud-header\"\n      [class.sticky]=\"sticky\"\n      [class.with-divider]=\"divider\"\n    >\n      <div class=\"left\">\n        <a\n          *ngIf=\"showBack && returnTo\"\n          class=\"back-btn\"\n          [class.ghost]=\"variant === 'ghost'\"\n          [class.tonal]=\"variant === 'tonal'\"\n          [class.outlined]=\"variant === 'outlined'\"\n          [routerLink]=\"returnTo\"\n          [attr.aria-label]=\"backLabel || 'Voltar'\"\n          mat-button\n        >\n          <mat-icon [praxisIcon]=\"'arrow_back'\"></mat-icon>\n          <span class=\"label\" [class.hide-on-narrow]=\"true\">{{ backLabel || 'Voltar' }}</span>\n        </a>\n        <h2 class=\"title\" [attr.title]=\"title\">{{ title }}</h2>\n      </div>\n      <div class=\"right\">\n        <ng-content></ng-content>\n      </div>\n    </header>\n  `,\n  styles: [\n    `\n      .crud-header {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: 12px;\n        padding: 8px 0;\n        background: var(--md-sys-color-surface, transparent);\n      }\n      .crud-header.sticky {\n        position: sticky;\n        top: 0;\n        z-index: 10;\n        backdrop-filter: saturate(110%);\n      }\n      .crud-header.with-divider {\n        border-bottom: 1px solid var(--md-sys-color-outline-variant, rgba(0,0,0,0.08));\n      }\n      .left { display: flex; align-items: center; gap: 8px; min-width: 0; }\n      .right { display: flex; align-items: center; gap: 8px; }\n      .title {\n        margin: 0; font-weight: 600;\n        color: var(--md-sys-color-on-surface, currentColor);\n        font: var(--mdc-typography-title-large, 600 20px/28px system-ui);\n        white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n      }\n      .back-btn { display: inline-flex; align-items: center; gap: 6px; text-decoration: none; }\n      .back-btn .mat-mdc-button { padding-left: 0; }\n      .back-btn mat-icon { color: var(--md-sys-color-on-surface-variant, currentColor); }\n      .back-btn .label { color: var(--md-sys-color-on-surface-variant, currentColor); }\n\n      /* Variants */\n      .back-btn.ghost { border-radius: 20px; padding: 4px 8px; }\n      .back-btn.ghost:hover { background: color-mix(in srgb, var(--md-sys-color-primary) 8%, transparent); }\n\n      .back-btn.tonal {\n        border-radius: 20px; padding: 4px 10px;\n        background: var(--md-sys-color-surface-container, rgba(0,0,0,0.02));\n        box-shadow: inset 0 0 0 1px var(--md-sys-color-outline-variant, rgba(0,0,0,0.06));\n      }\n      .back-btn.tonal:hover { background: color-mix(in srgb, var(--md-sys-color-primary) 10%, var(--md-sys-color-surface-container)); }\n\n      .back-btn.outlined {\n        border-radius: 20px; padding: 4px 10px;\n        border: 1px solid var(--md-sys-color-outline-variant, rgba(0,0,0,0.12));\n        background: var(--md-sys-color-surface, transparent);\n      }\n      .back-btn.outlined:hover {\n        border-color: color-mix(in srgb, var(--md-sys-color-primary) 40%, var(--md-sys-color-outline-variant));\n        background: color-mix(in srgb, var(--md-sys-color-primary) 6%, transparent);\n      }\n\n      /* Responsive: hide label on very narrow */\n      @media (max-width: 599px) { .label.hide-on-narrow { display: none; } }\n    `,\n  ],\n})\nexport class CrudPageHeaderComponent {\n  @Input() title = '';\n  @Input() backLabel?: string;\n  @Input() showBack = true;\n  @Input() variant: CrudHeaderVariant = 'ghost';\n  @Input() sticky = true;\n  @Input() divider = true;\n  @Input() returnTo?: string | null;\n}\n","/*\n * Public API Surface of praxis-crud\n */\n\nexport * from './lib/praxis-crud.component';\nexport * from './lib/crud-launcher.service';\nexport * from './lib/dynamic-form-dialog-host.component';\nexport * from './lib/crud.types';\nexport * from './lib/dialog.service';\nexport * from './lib/praxis-crud.metadata';\nexport * from './lib/crud-page-header.component';\nexport * from './lib/drawer.adapter';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DIALOG_DATA","i3","i2"],"mappings":"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"}