{"version":3,"file":"mn-angular-lib-modal-core.mjs","sources":["../../../projects/mn-angular-lib/modal-core/src/mn-modal/mn-modal.types.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/mn-modal-action-icons.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/mn-modal-haptics.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/builder/form-layout.builder.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/builder/step.builder.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/builder/base-modal.builder.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/builder/wizard-modal.builder.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/builder/form-modal.builder.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/builder/confirmation-modal.builder.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/builder/custom-modal.builder.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/builder/modal.builder.ts","../../../projects/mn-angular-lib/modal-core/src/mn-modal/mn-modal-ref.ts","../../../projects/mn-angular-lib/modal-core/public-api.ts","../../../projects/mn-angular-lib/modal-core/mn-angular-lib-modal-core.ts"],"sourcesContent":["import {TemplateRef, Type} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {AsyncValidatorFn, ValidatorFn} from '@angular/forms';\nimport {LucideIconData} from '@lucide/angular';\nimport {TableDataSource} from 'mn-angular-lib/collection';\n\nexport { Type, TemplateRef };\nexport type {LucideIconData};\n\n// =========================\n// Enums / Value Types\n// =========================\n\nexport enum ModalKind {\n  WIZARD = 'wizard',\n  FORM = 'form',\n  CONFIRMATION = 'confirmation',\n  CUSTOM = 'custom',\n}\n\nexport enum ModalSize {\n  SM = 'sm',\n  MD = 'md',\n  LG = 'lg',\n  XL = 'xl',\n  FULL = 'full',\n}\n\nexport enum CloseMode {\n  ALLOWED = 'allowed',\n  GUARDED = 'guarded',\n  DISABLED = 'disabled',\n}\n\nexport enum BackdropMode {\n  HIDE = 'hide',\n  STATIC = 'static',\n  CLOSABLE = 'closable',\n}\n\nexport enum KeyboardMode {\n  ENABLED = 'enabled',\n  DISABLED = 'disabled',\n}\n\nexport enum ModalIntent {\n  NEUTRAL = 'neutral',\n  INFO = 'info',\n  SUCCESS = 'success',\n  WARNING = 'warning',\n  DANGER = 'danger',\n}\n\nexport enum WizardFlowMode {\n  LINEAR = 'linear',\n  FREE = 'free',\n}\n\nexport enum FormLayoutMode {\n  SINGLE_COLUMN = 'single-column',\n  TWO_COLUMN = 'two-column',\n  INLINE = 'inline',\n}\n\nexport enum SubmitMode {\n  ONCE = 'once',\n  RETRYABLE = 'retryable',\n}\n\nexport enum ConfirmationTone {\n  DEFAULT = 'default',\n  WARNING = 'warning',\n  DANGER = 'danger',\n}\n\nexport enum FieldKind {\n  TEXT = 'text',\n  NUMBER = 'number',\n  SELECT = 'select',\n  CHECKBOX = 'checkbox',\n  DATE = 'date',\n  TEXTAREA = 'textarea',\n  DATETIME = 'datetime',\n  MULTI_SELECT = 'multi-select',\n  MULTI_SELECT_TABLE = 'multi-select-table',\n  SINGLE_SELECT_TABLE = 'single-select-table',\n  PASSWORD = 'password',\n  FILE = 'file',\n  COLOR = 'color',\n  RATING = 'rating',\n  SLIDER = 'slider',\n  CUSTOM = 'custom',\n}\n\nexport enum FieldAppearance {\n  OUTLINE = 'outline',\n  FILLED = 'filled',\n  GHOST = 'ghost',\n}\n\nexport enum SelectionMode {\n  SINGLE = 'single',\n  MULTIPLE = 'multiple',\n}\n\nexport enum OptionState {\n  ENABLED = 'enabled',\n  DISABLED = 'disabled',\n}\n\nexport enum ActionStyle {\n  PRIMARY = 'primary',\n  SECONDARY = 'secondary',\n  DANGER = 'danger',\n  GHOST = 'ghost',\n}\n\nexport enum StepState {\n  PENDING = 'pending',\n  ACTIVE = 'active',\n  COMPLETE = 'complete',\n  DISABLED = 'disabled',\n  HIDDEN = 'hidden',\n}\n\nexport enum NavigationDirection {\n  FORWARD = 'forward',\n  BACKWARD = 'backward',\n  DIRECT = 'direct',\n}\n\nexport enum ModalCloseReason {\n  COMPLETED = 'completed',\n  CANCELLED = 'cancelled',\n  DISMISSED = 'dismissed',\n  BACKDROP = 'backdrop',\n  ESCAPE = 'escape',\n  PROGRAMMATIC = 'programmatic',\n  GUARD_REJECTED = 'guard_rejected',\n}\n\nexport enum ValidationStatus {\n  VALID = 'valid',\n  INVALID = 'invalid',\n  PENDING = 'pending',\n}\n\nexport enum ValidationCode {\n  REQUIRED = 'required',\n  MIN = 'min',\n  MAX = 'max',\n  PATTERN = 'pattern',\n  CUSTOM = 'custom',\n}\n\n// =========================\n// Value Objects & Types\n// =========================\n\nexport type ModalStepId = string;\nexport type ModalInputMap = Record<string, unknown>;\n\n// =========================\n// Conditional Field Types\n// =========================\n\n/**\n * A condition function that receives the current form values and returns\n * whether the field should be visible.\n */\nexport type FieldVisibilityCondition<TModel = unknown> = (formValue: Partial<TModel>) => boolean;\n\n/**\n * A condition function that receives the current form values and returns\n * whether the field should be required.\n */\nexport type FieldRequiredCondition<TModel = unknown> = (formValue: Partial<TModel>) => boolean;\n\n// =========================\n// Cross-Field Validation\n// =========================\n\n/**\n * A form-level validator that receives the entire form value\n * and returns an error map or null.\n */\nexport type FormValidator<TModel = unknown> = (formValue: Partial<TModel>) => Record<string, string> | null;\n\n// =========================\n// Async DataSource Types\n// =========================\n\n/**\n * A data source that asynchronously loads options for select/multi-select fields.\n * Can optionally depend on other field values to reload.\n */\nexport type FieldDataSource<TValue = unknown, TModel = unknown> = {\n  /** Load options, optionally based on current form values */\n  load(formValue?: Partial<TModel>): Promise<SelectOption<TValue>[]> | SelectOption<TValue>[];\n  /** Keys of other fields that trigger a reload when their value changes */\n  dependsOn?: KeyOf<TModel>[];\n}\n\n// =========================\n// Validation Types\n// =========================\n\nexport type ValidationResult = {\n  status: ValidationStatus;\n  code?: ValidationCode;\n  message?: string;\n}\n\nexport type StepValidator = {\n  validate(): Promise<ValidationResult> | ValidationResult;\n}\n\nexport type FieldValidator = {\n  validate(value: unknown): Promise<ValidationResult> | ValidationResult;\n}\n\nexport type StepGuard = {\n  canEnter(): Promise<boolean> | boolean;\n  canExit(): Promise<boolean> | boolean;\n}\n\n// =========================\n// Modal Result & Events\n// =========================\n\nexport type ModalCloseEvent<TResult = unknown> = {\n  reason: ModalCloseReason;\n  result?: TResult;\n}\n\nexport type ModalRef<TResult = unknown> = {\n  afterClosed$: Observable<ModalCloseEvent<TResult>>;\n  close(result?: TResult): void;\n  dismiss(reason: ModalCloseReason): void;\n  update(config: Partial<BaseModalConfig<TResult>>): void;\n}\n\n// =========================\n// Handlers\n// =========================\n\nexport type ModalResultHandler<TResult = unknown> = {\n  handle(result: TResult): Promise<void> | void;\n}\n\nexport type WizardStepChangeEvent = {\n  previousStepId?: ModalStepId;\n  currentStepId: ModalStepId;\n  direction: NavigationDirection;\n}\n\nexport type WizardStepChangeHandler = {\n  handle(event: WizardStepChangeEvent): Promise<void> | void;\n}\n\n// =========================\n// Wizard Types\n// =========================\n\nexport type StepBodyConfig = Type<unknown> | TemplateRef<unknown> | string;\n\nexport type WizardStepConfig<TModel = unknown> = {\n  id: ModalStepId;\n  title: string;\n  state?: StepState;\n  body?: StepBodyConfig;\n  /**\n   * Inputs passed to the step {@link body} when it is a component or template\n   * (ignored for a plain-string body). Each key is assigned to the matching\n   * `@Input()` on the rendered component; a `modalRef` property, if present, is\n   * populated automatically. Mirrors {@link CustomModalConfig.inputs} but scoped\n   * to a single wizard step.\n   */\n  bodyInputs?: ModalInputMap;\n  fields?: FormFieldConfig<TModel>[];\n  rows?: FormRow<TModel>[];\n  fieldGroups?: FormFieldGroup<TModel>[];\n  formValidators?: FormValidator<TModel>[];\n  groupValidators?: ValidatorFn[];\n  initialValue?: Partial<TModel>;\n  guard?: StepGuard;\n  validators?: StepValidator[];\n  /** Custom label for the 'Next' button on this step */\n  nextLabel?: string;\n  /** Custom label for the 'Back' button on this step */\n  backLabel?: string;\n  /** Whether to hide the 'Back' button on this step */\n  hideBack?: boolean;\n  /** Condition to show/hide this entire step based on aggregated wizard data */\n  visible?: (aggregatedData: Record<ModalStepId, Record<string, unknown>>) => boolean;\n}\n\nexport type WizardResult = {\n  status: ModalCloseReason;\n  visitedStepIds: ModalStepId[];\n  payload?: Record<ModalStepId, Record<string, unknown>>;\n}\n\n// =========================\n// Form Types\n// =========================\n\ntype KeyOf<T> = unknown extends T ? string : keyof T & string;\n\nexport type SelectOption<TValue = unknown> = {\n  label: string;\n  value: TValue;\n  state?: OptionState;\n}\n\nexport type TextFieldConfig<TModel = unknown> = {\n  kind: FieldKind.TEXT;\n  key: KeyOf<TModel>;\n  label: string;\n  appearance?: FieldAppearance;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  placeholder?: string;\n  /** Whether this field is read-only (display only) */\n  readOnly?: boolean;\n  /** Whether this field is disabled */\n  disabled?: boolean;\n  /** Condition to show/hide this field based on other field values */\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  /** Input mask (e.g., '(000) 000-0000') */\n  mask?: string;\n  /** Autocomplete attribute */\n  autocomplete?: string;\n  /** Whether to focus this field when the modal opens */\n  autoFocus?: boolean;\n  /** When to update the form control value and run validation */\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type NumberFieldConfig<TModel = unknown> = {\n  kind: FieldKind.NUMBER;\n  key: KeyOf<TModel>;\n  label: string;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  placeholder?: string;\n  min?: number;\n  max?: number;\n  step?: number;\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type SelectFieldConfig<TModel = unknown, TValue = unknown> = {\n  kind: FieldKind.SELECT;\n  key: KeyOf<TModel>;\n  label: string;\n  options: SelectOption<TValue>[];\n  selectionMode?: SelectionMode;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n  /** Async data source for loading options dynamically */\n  dataSource?: FieldDataSource<TValue, TModel>;\n}\n\nexport type CheckboxFieldConfig<TModel = unknown> = {\n  kind: FieldKind.CHECKBOX;\n  key: KeyOf<TModel>;\n  label: string;\n  defaultValue?: boolean;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type DateFieldConfig<TModel = unknown> = {\n  kind: FieldKind.DATE;\n  key: KeyOf<TModel>;\n  label: string;\n  placeholder?: string;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  minDate?: string;\n  maxDate?: string;\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type TextareaFieldConfig<TModel = unknown> = {\n  kind: FieldKind.TEXTAREA;\n  key: KeyOf<TModel>;\n  label: string;\n  placeholder?: string;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  rows?: number;\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type DatetimeFieldConfig<TModel = unknown> = {\n  kind: FieldKind.DATETIME;\n  key: KeyOf<TModel>;\n  label: string;\n  placeholder?: string;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  mode?: 'date' | 'time' | 'datetime-local';\n  min?: string;\n  max?: string;\n  step?: number;\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type MultiSelectFieldConfig<TModel = unknown, TValue = unknown> = {\n  kind: FieldKind.MULTI_SELECT;\n  key: KeyOf<TModel>;\n  label: string;\n  options: SelectOption<TValue>[];\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  /** Placeholder shown in the trigger while nothing is selected. */\n  placeholder?: string;\n  searchable?: boolean;\n  searchPlaceholder?: string;\n  maxSelections?: number;\n  /**\n   * Forwarded to the underlying multi-select: once more than this many options are selected the\n   * trigger collapses to a summary instead of rendering every chip.\n   */\n  collapseThreshold?: number;\n  /** Forwarded summary text for the collapsed trigger; `{count}` is interpolated. */\n  collapsePlaceholder?: string;\n  /** Forwarded summary text shown when every option is selected. */\n  allSelectedPlaceholder?: string;\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n  /** Async data source for loading options dynamically */\n  dataSource?: FieldDataSource<TValue, TModel>;\n}\n\nexport type PasswordFieldConfig<TModel = unknown> = {\n  kind: FieldKind.PASSWORD;\n  key: KeyOf<TModel>;\n  label: string;\n  placeholder?: string;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type MultiSelectTableFieldConfig<TModel = unknown, TRow = unknown> = {\n  kind: FieldKind.MULTI_SELECT_TABLE;\n  key: KeyOf<TModel>;\n  label: string;\n  /** The TableDataSource that powers the mn-table. selectionMode will be forced to 'multi'. */\n  tableDataSource: TableDataSource<TRow>;\n  /** Function to extract the value stored in the form from a selected row (default: getID) */\n  getRowValue?: (row: TRow) => unknown;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type SingleSelectTableFieldConfig<TModel = unknown, TRow = unknown> = {\n  kind: FieldKind.SINGLE_SELECT_TABLE;\n  key: KeyOf<TModel>;\n  label: string;\n  /** The TableDataSource that powers the mn-table. selectionMode will be forced to 'single'. */\n  tableDataSource: TableDataSource<TRow>;\n  /** Function to extract the value stored in the form from a selected row (default: getID) */\n  getRowValue?: (row: TRow) => unknown;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type ColorFieldConfig<TModel = unknown> = {\n  kind: FieldKind.COLOR;\n  key: KeyOf<TModel>;\n  label: string;\n  /** Default color value (hex string, e.g., '#ff0000') */\n  defaultValue?: string;\n  /** Predefined color swatches to show */\n  swatches?: string[];\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type RatingFieldConfig<TModel = unknown> = {\n  kind: FieldKind.RATING;\n  key: KeyOf<TModel>;\n  label: string;\n  /** Maximum rating value (default: 5) */\n  max?: number;\n  /** Icon to use for rating (default: 'star') */\n  icon?: 'star' | 'heart' | 'circle';\n  /** Allow half-star ratings (default: false) */\n  allowHalf?: boolean;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type SliderFieldConfig<TModel = unknown> = {\n  kind: FieldKind.SLIDER;\n  key: KeyOf<TModel>;\n  label: string;\n  /** Minimum value (default: 0) */\n  min?: number;\n  /** Maximum value (default: 100) */\n  max?: number;\n  /** Step increment (default: 1) */\n  step?: number;\n  /** Whether to show the current value label (default: true) */\n  showValue?: boolean;\n  /** Unit label displayed after the value (e.g., '%', 'px') */\n  unit?: string;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type FileFieldConfig<TModel = unknown> = {\n  kind: FieldKind.FILE;\n  key: KeyOf<TModel>;\n  label: string;\n  /** Accepted file types (e.g., '.pdf,.jpg,image/*') */\n  accept?: string;\n  /** Allow multiple file selection */\n  multiple?: boolean;\n  /** Maximum file size in bytes */\n  maxSize?: number;\n  /** Maximum number of files (when multiple is true) */\n  maxFiles?: number;\n  /** How the selection is displayed (default: 'dropzone') */\n  displayMode?: 'dropzone' | 'thumbnail' | 'list' | 'compact';\n  /** Hint shown inside the empty dropzone */\n  dropzoneHint?: string;\n  /** Hint shown inside the dropzone while files are dragged over it */\n  dropActiveHint?: string;\n  /** Label for the \"choose/replace file\" affordance */\n  replaceLabel?: string;\n  /** Accessible label for the per-file remove button */\n  removeLabel?: string;\n  /** URL of an already-saved image to preview when no new file is selected (single mode) */\n  currentUrl?: string | null;\n  /** URLs of already-saved images to preview when nothing is selected (multiple mode) */\n  currentUrls?: string[] | null;\n  /**\n   * Called when the user removes an already-saved image (`currentUrl`/`currentUrls`).\n   * The form value stays null; use this to record the removal intent (e.g. to send\n   * a \"clear image\" instruction to the API on submit).\n   */\n  onClear?: () => void;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  readOnly?: boolean;\n  disabled?: boolean;\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type CustomFieldConfig<TModel = unknown> = {\n  kind: FieldKind.CUSTOM;\n  key: KeyOf<TModel>;\n  component: Type<unknown>;\n  inputs?: ModalInputMap;\n  label?: string;\n  validators?: ValidatorFn[];\n  asyncValidators?: AsyncValidatorFn[];\n  visible?: FieldVisibilityCondition<TModel>;\n  /** Condition to dynamically mark this field as required based on other field values */\n  conditionallyRequired?: FieldRequiredCondition<TModel>;\n  autoFocus?: boolean;\n  updateOn?: 'change' | 'blur' | 'submit';\n}\n\nexport type FormFieldConfig<TModel = unknown> =\n  | TextFieldConfig<TModel>\n  | NumberFieldConfig<TModel>\n  | SelectFieldConfig<TModel>\n  | CheckboxFieldConfig<TModel>\n  | DateFieldConfig<TModel>\n  | TextareaFieldConfig<TModel>\n  | DatetimeFieldConfig<TModel>\n  | MultiSelectFieldConfig<TModel>\n  | MultiSelectTableFieldConfig<TModel, unknown>\n  | SingleSelectTableFieldConfig<TModel, unknown>\n  | PasswordFieldConfig<TModel>\n  | FileFieldConfig<TModel>\n  | ColorFieldConfig<TModel>\n  | RatingFieldConfig<TModel>\n  | SliderFieldConfig<TModel>\n  | CustomFieldConfig<TModel>;\n\nexport type AnimationOptions = {\n  type: 'slide' | 'fade' | 'zoom';\n  duration?: number; // ms\n}\n\n// =========================\n// Form Layout Types\n// =========================\n\nexport type FormRowField<TModel = unknown> = {\n  field: FormFieldConfig<TModel>;\n  span?: number; // Number of columns this field spans (default: 1)\n}\n\nexport type FormRow<TModel = unknown> = {\n  columns?: number; // Number of columns in this row (default: 1 = full width)\n  fields: FormRowField<TModel>[];\n}\n\n// =========================\n// Field Group / Section Types\n// =========================\n\nexport type FormFieldGroup<TModel = unknown> = {\n  /** Section header title */\n  title: string;\n  /** Optional description below the section header */\n  description?: string;\n  /** Fields in this group */\n  fields: FormFieldConfig<TModel>[];\n  /** Optional rows layout for this group */\n  rows?: FormRow<TModel>[];\n  /** Condition to show/hide this entire group based on form values */\n  visible?: FieldVisibilityCondition<TModel>;\n}\n\n// =========================\n// Action Types\n// =========================\n\nexport type ConfirmationActionConfig<TResult = unknown> = {\n  label: string;\n  style?: ActionStyle;\n  handler?: ModalResultHandler<TResult>;\n  /**\n   * Overrides the default leading icon for this action button. Pass a Lucide icon's\n   * static data (e.g. `LucideTrash2.icon`). Only rendered when the modal's\n   * `showActionIcons` is not explicitly `false`.\n   */\n  icon?: LucideIconData;\n}\n\nexport type CancellationActionConfig = {\n  label: string;\n  style?: ActionStyle;\n  reason?: ModalCloseReason;\n  /**\n   * Overrides the default leading icon for this action button. Pass a Lucide icon's\n   * static data (e.g. `LucideX.icon`). Only rendered when the modal's\n   * `showActionIcons` is not explicitly `false`.\n   */\n  icon?: LucideIconData;\n}\n\n// =========================\n// Footer Action Types\n// =========================\n\nexport type ModalFooterAction<TResult = unknown> = {\n  label: string;\n  style?: ActionStyle;\n  /** Position in the footer: 'left' or 'right' (default: 'right') */\n  position?: 'left' | 'right';\n  /** Whether this action closes the modal */\n  closesModal?: boolean;\n  /** Close reason when this action closes the modal */\n  closeReason?: ModalCloseReason;\n  /** Handler called when the action is clicked */\n  handler?: (modalRef: ModalRef<TResult>) => Promise<void> | void;\n  /** Whether the button is disabled */\n  disabled?: boolean;\n  /**\n   * Overrides the default leading icon for this action button. Pass a Lucide icon's\n   * static data (e.g. `LucideCheck.icon`). Defaults are derived from `style` when\n   * omitted. Only rendered when the modal's `showActionIcons` is not explicitly `false`.\n   */\n  icon?: LucideIconData;\n}\n\n// =========================\n// Polling / Async Types\n// =========================\n\nexport type ModalPollingConfig<TResult = unknown> = {\n  /** Polling interval in milliseconds */\n  interval: number;\n  /** Function called on each poll tick */\n  onPoll: (modalRef: ModalRef<TResult>) => Promise<boolean | void> | boolean | void;\n  /** Whether to start polling immediately (default: true) */\n  autoStart?: boolean;\n  /** Maximum number of poll attempts (undefined = unlimited) */\n  maxAttempts?: number;\n}\n\n// =========================\n// Base Config\n// =========================\n\n// =========================\n// i18n / Localization\n// =========================\n\nexport type ModalI18nLabels = {\n  /** Submit button label (default: 'Submit') */\n  submit?: string;\n  /** Cancel button label (default: 'Cancel') */\n  cancel?: string;\n  /** Next button label for wizard (default: 'Next') */\n  next?: string;\n  /** Back button label for wizard (default: 'Back') */\n  back?: string;\n  /** Close button label (default: 'Close') */\n  close?: string;\n  /** Complete button label for wizard (default: 'Complete') */\n  complete?: string;\n  /** Submitting state label (default: 'Submitting...') */\n  submitting?: string;\n  /** Completing state label (default: 'Completing...') */\n  completing?: string;\n  /** Loading label (default: 'Loading...') */\n  loading?: string;\n  /** Select placeholder (default: 'Select...') */\n  selectPlaceholder?: string;\n  /** File upload prompt (default: 'Click or drag files here') */\n  fileUploadPrompt?: string;\n  /** Confirm button label (default: 'Confirm') */\n  confirm?: string;\n}\n\n// =========================\n// Cancel / Dismiss Handler\n// =========================\n\nexport type ModalCancelHandler<_TResult = unknown> = (reason: ModalCloseReason) => Promise<void> | void;\n\nexport type BaseModalConfig<TResult = unknown> = {\n  kind: ModalKind;\n  title?: string;\n  subtitle?: string;\n  description?: string;\n  /** Width of the modal (uses ModalSize enum) */\n  sizeWidth?: ModalSize;\n  /** Height of the modal (uses ModalSize enum) */\n  sizeHeight?: ModalSize;\n  closeMode?: CloseMode;\n  closeGuard?: () => Promise<boolean> | boolean;\n  backdrop?: BackdropMode;\n  keyboard?: KeyboardMode;\n  intent?: ModalIntent;\n  resultType?: TResult;\n  /** Custom footer actions (overrides default footer) */\n  footerActions?: ModalFooterAction<TResult>[];\n  /** Whether modal action buttons render their icons. Defaults to true. */\n  showActionIcons?: boolean;\n  /** Polling configuration for periodic async operations */\n  polling?: ModalPollingConfig<TResult>;\n  /** Handler called when the modal is cancelled or dismissed */\n  readOnly?: boolean;\n  disabled?: boolean;\n  onCancel?: ModalCancelHandler<TResult>;\n  /** i18n labels for buttons and UI text */\n  i18n?: ModalI18nLabels;\n  /** Animation configuration */\n  animation?: AnimationOptions | AnimationOptions['type'];\n  /**\n   * Whether the modal renders as a bottom sheet on small screens (< 640px).\n   * Defaults to true. Set to false to keep it a centered dialog on mobile.\n   */\n  mobileBottomSheet?: boolean;\n\n  /** Custom component to render in the modal body */\n  component?: Type<unknown>;\n  /** Custom template to render in the modal body */\n  template?: TemplateRef<unknown>;\n  /** Inputs for the custom component */\n  inputs?: ModalInputMap;\n}\n\n// =========================\n// Specialized Configs\n// =========================\n\nexport type WizardBeforeCompleteValidator<TResult = unknown> = (\n  payload: Record<ModalStepId, Record<string, unknown>>\n) => Promise<Partial<Record<keyof TResult & string, string>> | null> | Partial<Record<keyof TResult & string, string>> | null;\n\nexport type WizardModalConfig<TResult = WizardResult> = {\n  kind: ModalKind.WIZARD;\n  steps: WizardStepConfig[];\n  startStepId?: ModalStepId;\n  flow?: WizardFlowMode;\n  onStepChange?: WizardStepChangeHandler;\n  onComplete?: ModalResultHandler<TResult>;\n  /** Cross-step validators run before wizard completion */\n  onBeforeComplete?: WizardBeforeCompleteValidator<TResult>[];\n  /** Global initial values for all steps */\n  initialValue?: Partial<TResult>;\n} & BaseModalConfig<TResult>\n\nexport type FormModalConfig<TModel = unknown, TResult = TModel> = {\n  kind: ModalKind.FORM;\n  body?: StepBodyConfig;\n  fields: FormFieldConfig<TModel>[];\n  rows?: FormRow<TModel>[];\n  layout?: FormLayoutMode;\n  initialValue?: Partial<TModel>;\n  submitMode?: SubmitMode;\n  onComplete?: ModalResultHandler<TResult>;\n  /** Form-level validators for cross-field validation */\n  formValidators?: FormValidator<TModel>[];\n  /** Angular FormGroup-level validators (e.g., Validators.required on the group) */\n  groupValidators?: ValidatorFn[];\n  /** Field groups with section headers */\n  fieldGroups?: FormFieldGroup<TModel>[];\n} & BaseModalConfig<TResult>\n\nexport type ConfirmationModalConfig<TResult = boolean> = {\n  kind: ModalKind.CONFIRMATION;\n  message: string;\n  tone?: ConfirmationTone;\n  confirm?: ConfirmationActionConfig<TResult>;\n  cancel?: CancellationActionConfig;\n\n  // Form-like capabilities for hybrid confirmation modals\n  body?: StepBodyConfig;\n  fields?: FormFieldConfig<unknown>[];\n  rows?: FormRow<unknown>[];\n  fieldGroups?: FormFieldGroup<unknown>[];\n  formValidators?: FormValidator<unknown>[];\n  groupValidators?: ValidatorFn[];\n  initialValue?: Partial<unknown>;\n} & BaseModalConfig<TResult>\n\nexport type CustomModalConfig<TResult = unknown> = {\n  kind: ModalKind.CUSTOM;\n  onComplete?: ModalResultHandler<TResult>;\n} & BaseModalConfig<TResult>\n\n// =========================\n// Union Root Config\n// =========================\n\nexport type ModalConfig<TResult = unknown, TModel = unknown> =\n  | WizardModalConfig<TResult>\n  | FormModalConfig<TModel, TResult>\n  | ConfirmationModalConfig<TResult>\n  | CustomModalConfig<TResult>;\n","import { LucideIconData } from '@lucide/angular';\nimport {ActionStyle} from './mn-modal.types';\nimport * as lucide from 'lucide';\nimport { lucideIcons } from 'mn-angular-lib/core';\n\n/** Lucide icons this file renders. */\nconst ICONS = lucideIcons({\n  ArrowLeft: lucide.ArrowLeft,\n  ArrowRight: lucide.ArrowRight,\n  Check: lucide.Check,\n  Trash2: lucide.Trash2,\n  X: lucide.X,\n});\n\n/**\n * Default leading-icon size (px) for modal action buttons, matching the standard\n * (`md`) button. Small (`sm`) buttons use {@link MODAL_ACTION_ICON_SIZE_SM}.\n */\nexport const MODAL_ACTION_ICON_SIZE = 18;\n\n/** Leading-icon size (px) for `sm`-sized modal action buttons. */\nexport const MODAL_ACTION_ICON_SIZE_SM = 16;\n\n/**\n * The canonical Lucide icon data used as defaults across all modal action buttons.\n * Each value is a Lucide icon's static `.icon` data, rendered via the dynamic\n * `svg[lucideIcon]` directive so no icon has to be registered in `MN_ICON_MAP`.\n */\nexport const MN_MODAL_ACTION_ICONS = {\n  /** Affirmative action (confirm / submit / complete). */\n  confirm: ICONS.Check as LucideIconData,\n  /** Destructive action (danger style). */\n  danger: ICONS.Trash2 as LucideIconData,\n  /** Cancel / dismiss / close action. */\n  cancel: ICONS.X as LucideIconData,\n  /** Wizard forward navigation (rendered trailing). */\n  next: ICONS.ArrowRight as LucideIconData,\n  /** Wizard backward navigation. */\n  back: ICONS.ArrowLeft as LucideIconData,\n} as const;\n\n/**\n * Resolves the default action-button icon from its {@link ActionStyle}. Used by\n * generic footer actions and any confirm button that has no explicit icon:\n * `DANGER` → trash, `PRIMARY` → check, everything else (`GHOST`/`SECONDARY`) → cross.\n * @param style The action's style, if any.\n * @returns The Lucide icon data to render.\n */\nexport function defaultIconForStyle(style?: ActionStyle): LucideIconData {\n  switch (style) {\n    case ActionStyle.DANGER:\n      return MN_MODAL_ACTION_ICONS.danger;\n    case ActionStyle.PRIMARY:\n      return MN_MODAL_ACTION_ICONS.confirm;\n    default:\n      return MN_MODAL_ACTION_ICONS.cancel;\n  }\n}\n","import {InjectionToken} from '@angular/core';\n\n/**\n * Intensity of a haptic impact. Mirrors the three impact weights exposed by most\n * native haptic engines (e.g. Capacitor Haptics `ImpactStyle`) without binding the\n * library to any particular implementation.\n */\nexport type MnHapticStyle = 'light' | 'medium' | 'heavy';\n\n/**\n * Abstraction over a native haptic feedback engine.\n *\n * The modal feature deliberately does NOT depend on Capacitor (or any other native\n * bridge) so the library stays usable in plain web apps. Consumers that run inside a\n * native shell provide an implementation of this handler through {@link MN_HAPTICS};\n * when no handler is provided the modal simply skips haptic feedback.\n */\nexport type MnHapticsHandler = {\n  /**\n   * Triggers a transient impact-style haptic.\n   * @param style Intensity of the impact.\n   */\n  impact(style: MnHapticStyle): void;\n}\n\n/**\n * Optional DI token used by the bottom sheet to emit haptic feedback on native\n * platforms (sheet open, swipe-dismiss, and snap-back). Provide a {@link MnHapticsHandler}\n * at the application root to enable it; leave unprovided on the web (the modal injects it\n * with `{ optional: true }` and no-ops when absent).\n */\nexport const MN_HAPTICS = new InjectionToken<MnHapticsHandler>('MN_HAPTICS');\n","import {Validators, ValidatorFn} from '@angular/forms';\nimport {\n  FormFieldConfig,\n  FormFieldGroup,\n  FormRow,\n  FormRowField,\n  FormValidator,\n  StepBodyConfig,\n} from '../mn-modal.types';\n\n/**\n * Shared interface for configurations that support form layouts.\n */\nexport type FormContainerConfig<TModel = unknown> = {\n  fields?: FormFieldConfig<TModel>[];\n  rows?: FormRow<TModel>[];\n  fieldGroups?: FormFieldGroup<TModel>[];\n  formValidators?: FormValidator<TModel>[];\n  groupValidators?: ValidatorFn[];\n  initialValue?: Partial<TModel>;\n  body?: StepBodyConfig;\n}\n\ntype WithAutoFocus = { autoFocus?: boolean };\ntype WithValidators = { validators?: ValidatorFn[] };\n\n/**\n * A self-referential type so that field-group builder methods can be chained.\n * e.g. g.field(...).field(...).field(...)\n */\nexport type ChainableGroupBuilder<TModel> = FormLayoutBuilder<TModel, ChainableGroupBuilder<TModel>>;\n\n/**\n * A builder class that provides form layout capabilities (fields, rows, groups).\n * This can be used as a delegate to avoid code duplication between FormModalBuilder and StepBuilder.\n */\nexport class FormLayoutBuilder<TModel = unknown, TParent = unknown> {\n  private currentRow: FormRowField<TModel>[] = [];\n  private currentRowColumns = 1;\n\n  constructor(\n    private readonly config: FormContainerConfig<TModel>,\n    private parent: TParent\n  ) {\n    this.config.fields = this.config.fields || [];\n    this.config.rows = this.config.rows || [];\n  }\n\n  /**\n   * Add a custom body/content to the form/step.\n   */\n  body(body: StepBodyConfig): TParent {\n    this.config.body = body;\n    return this.parent;\n  }\n\n  /**\n   * Add a field as a full-width row (single column).\n   */\n  field(field: FormFieldConfig<TModel>): TParent {\n    this.flushCurrentRow();\n    this.config.fields = this.config.fields || [];\n    this.config.fields.push(field);\n    this.config.rows = this.config.rows || [];\n    this.config.rows.push({\n      columns: 1,\n      fields: [{ field, span: 1 }],\n    });\n    return this.parent;\n  }\n\n  /**\n   * Start a new row with the specified number of columns.\n   * All subsequent `addToRow()` calls will add fields to this row.\n   */\n  row(columns = 2): TParent {\n    this.flushCurrentRow();\n    this.currentRowColumns = columns;\n    return this.parent;\n  }\n\n  /**\n   * Add a field to the current row started by `row()`.\n   * @param field - The field configuration\n   * @param span - How many columns this field should span (default: 1)\n   */\n  addToRow(field: FormFieldConfig<TModel>, span = 1): TParent {\n    this.config.fields = this.config.fields || [];\n    this.config.fields.push(field);\n    this.currentRow.push({ field, span });\n    return this.parent;\n  }\n\n  /**\n   * Declarative way to add a row.\n   * @example\n   * .addRow(2, row => {\n   *   row.add({ kind: FieldKind.TEXT, key: 'first', ... });\n   *   row.add({ kind: FieldKind.TEXT, key: 'last', ... });\n   * })\n   */\n  addRow(\n    columns: number,\n    buildFn: (row: { add: (field: FormFieldConfig<TModel>, span?: number) => void }) => void\n  ): TParent {\n    this.flushCurrentRow();\n    const rowFields: FormRowField<TModel>[] = [];\n    buildFn({\n      add: (field: FormFieldConfig<TModel>, span = 1) => {\n        this.config.fields = this.config.fields || [];\n        this.config.fields.push(field);\n        rowFields.push({ field, span });\n      },\n    });\n\n    if (rowFields.length > 0) {\n      this.config.rows = this.config.rows || [];\n      this.config.rows.push({\n        columns,\n        fields: rowFields,\n      });\n    }\n    return this.parent;\n  }\n\n  /**\n   * Add a field group with a section header.\n   */\n  fieldGroup(group: FormFieldGroup<TModel>): TParent;\n  /**\n   * Add a field group using a functional builder.\n   */\n  fieldGroup(\n    title: string,\n    buildFn: (group: ChainableGroupBuilder<TModel>) => void\n  ): TParent;\n  /**\n   * Add a field group with title, description, and a functional builder.\n   */\n  fieldGroup(\n    title: string,\n    description: string,\n    buildFn: (group: ChainableGroupBuilder<TModel>) => void\n  ): TParent;\n  fieldGroup(\n    arg1: string | FormFieldGroup<TModel>,\n    arg2?: string | ((group: ChainableGroupBuilder<TModel>) => void),\n    arg3?: (group: ChainableGroupBuilder<TModel>) => void\n  ): TParent {\n    this.flushCurrentRow();\n\n    if (typeof arg1 !== 'string') {\n      const group = arg1;\n      this.processFieldGroup(group);\n      return this.parent;\n    }\n\n    const title = arg1;\n    let description: string | undefined;\n    let buildFn: (group: ChainableGroupBuilder<TModel>) => void;\n\n    if (typeof arg2 === 'string') {\n      description = arg2;\n      buildFn = arg3!;\n    } else {\n      buildFn = arg2!;\n    }\n\n    const groupConfig: FormContainerConfig<TModel> = {\n      fields: [],\n      rows: [],\n    };\n    const groupBuilder = new FormLayoutBuilder<TModel, ChainableGroupBuilder<TModel>>(\n      groupConfig,\n      null as unknown as ChainableGroupBuilder<TModel>\n    );\n    (groupBuilder as ChainableGroupBuilder<TModel>).parent = groupBuilder as ChainableGroupBuilder<TModel>;\n    buildFn(groupBuilder as ChainableGroupBuilder<TModel>);\n    groupBuilder.flushCurrentRow();\n\n    const group: FormFieldGroup<TModel> = {\n      title,\n      description,\n      fields: groupConfig.fields || [],\n      rows: groupConfig.rows || [],\n    };\n\n    this.processFieldGroup(group);\n    return this.parent;\n  }\n\n  private processFieldGroup(group: FormFieldGroup<TModel>): void {\n    if (!this.config.fieldGroups) {\n      this.config.fieldGroups = [];\n    }\n\n    // Also add group fields to the flat fields array for form control creation\n    this.config.fields = this.config.fields || [];\n    const fields = this.config.fields;\n    group.fields.forEach((f) => fields.push(f));\n\n    // Build rows for the group if not provided\n    if (!group.rows || group.rows.length === 0) {\n      group.rows = group.fields.map((f) => ({\n        columns: 1,\n        fields: [{ field: f, span: 1 }],\n      }));\n    }\n\n    this.config.fieldGroups.push(group);\n  }\n\n  /**\n   * Add form-level validators for cross-field validation.\n   */\n  formValidators(validators: FormValidator<TModel>[]): TParent {\n    this.config.formValidators = validators;\n    return this.parent;\n  }\n\n  /**\n   * Add Angular FormGroup-level validators.\n   */\n  groupValidators(validators: ValidatorFn[]): TParent {\n    this.config.groupValidators = validators;\n    return this.parent;\n  }\n\n  /**\n   * Set initial value for fields.\n   */\n  initialValue(value: Partial<TModel>): TParent {\n    this.config.initialValue = value;\n    return this.parent;\n  }\n\n  /**\n   * Set the field to be focused when the form initializes.\n   */\n  focus(key: keyof TModel): TParent {\n    this.config.fields?.forEach(f => {\n      (f as WithAutoFocus).autoFocus = false;\n    });\n    this.config.fieldGroups?.forEach(g => {\n      g.fields.forEach(f => {\n        (f as WithAutoFocus).autoFocus = false;\n      });\n    });\n\n    const field = this.config.fields?.find(f => (f as unknown as { key: keyof TModel }).key === key);\n    if (field) {\n      (field as WithAutoFocus).autoFocus = true;\n    }\n    return this.parent;\n  }\n\n  /**\n   * Wraps a field with a fluent API for validation.\n   */\n  fieldWithValidators(field: FormFieldConfig<TModel>): FieldValidatorBuilder<TModel, TParent> {\n    const fieldWithV = field as WithValidators;\n    fieldWithV.validators = fieldWithV.validators || [];\n    this.field(field);\n    return new FieldValidatorBuilder(field, this.parent);\n  }\n\n  /**\n   * Flushes any pending fields in the current row to the configuration.\n   */\n  flushCurrentRow(): void {\n    if (this.currentRow.length > 0) {\n      this.config.rows!.push({\n        columns: this.currentRowColumns,\n        fields: [...this.currentRow],\n      });\n      this.currentRow = [];\n      this.currentRowColumns = 1;\n    }\n  }\n}\n\n/**\n * A builder for adding validation rules to a field fluently.\n */\nexport class FieldValidatorBuilder<TModel = unknown, TParent = unknown> {\n  constructor(\n    private field: FormFieldConfig<TModel>,\n    private parent: TParent\n  ) {\n    (this.field as WithValidators).validators = (this.field as WithValidators).validators || [];\n  }\n\n  required(_message?: string): this {\n    (this.field as WithValidators).validators!.push(Validators.required);\n    return this;\n  }\n\n  minLength(length: number): this {\n    (this.field as WithValidators).validators!.push(Validators.minLength(length));\n    return this;\n  }\n\n  maxLength(length: number): this {\n    (this.field as WithValidators).validators!.push(Validators.maxLength(length));\n    return this;\n  }\n\n  pattern(pattern: string | RegExp): this {\n    (this.field as WithValidators).validators!.push(Validators.pattern(pattern));\n    return this;\n  }\n\n  email(): this {\n    (this.field as WithValidators).validators!.push(Validators.email);\n    return this;\n  }\n\n  min(value: number): this {\n    (this.field as WithValidators).validators!.push(Validators.min(value));\n    return this;\n  }\n\n  max(value: number): this {\n    (this.field as WithValidators).validators!.push(Validators.max(value));\n    return this;\n  }\n\n  /**\n   * Add a custom validator.\n   */\n  custom(validator: ValidatorFn): this {\n    (this.field as WithValidators).validators!.push(validator);\n    return this;\n  }\n\n  /**\n   * Return to the parent builder.\n   */\n  done(): TParent {\n    return this.parent;\n  }\n}\n","import {\n  FormFieldConfig,\n  FormFieldGroup,\n  FormValidator,\n  ModalInputMap,\n  ModalStepId,\n  StepBodyConfig,\n  StepGuard,\n  StepState,\n  StepValidator,\n  WizardStepConfig,\n} from '../mn-modal.types';\nimport {ChainableGroupBuilder, FormLayoutBuilder} from './form-layout.builder';\nimport {ValidatorFn} from '@angular/forms';\n\nexport class StepBuilder<TModel = unknown> {\n  private config: WizardStepConfig<TModel>;\n  private layoutBuilder: FormLayoutBuilder<TModel, this>;\n\n  constructor(id: string, title: string) {\n    this.config = {\n      id,\n      title,\n      fields: [],\n      state: StepState.PENDING,\n    };\n    this.layoutBuilder = new FormLayoutBuilder(this.config, this);\n  }\n\n  /**\n   * Set the step body. Accepts plain text, a component, or a template.\n   * @param body The step body content (string, component `Type`, or `TemplateRef`).\n   * @param inputs Optional inputs for a component/template body (ignored for text).\n   */\n  body(body: StepBodyConfig, inputs?: ModalInputMap): this {\n    this.config.body = body;\n    if (inputs !== undefined) {\n      this.config.bodyInputs = inputs;\n    }\n    return this;\n  }\n\n  state(state: StepState): this {\n    this.config.state = state;\n    return this;\n  }\n\n  guard(guard: StepGuard): this {\n    this.config.guard = guard;\n    return this;\n  }\n\n  validators(validators: StepValidator[]): this {\n    this.config.validators = validators;\n    return this;\n  }\n\n  field(field: FormFieldConfig<TModel>): this {\n    return this.layoutBuilder.field(field);\n  }\n\n  row(columns = 2): this {\n    return this.layoutBuilder.row(columns);\n  }\n\n  addToRow(field: FormFieldConfig<TModel>, span = 1): this {\n    return this.layoutBuilder.addToRow(field, span);\n  }\n\n  addRow(\n    columns: number,\n    buildFn: (row: { add: (field: FormFieldConfig<TModel>, span?: number) => void }) => void\n  ): this {\n    return this.layoutBuilder.addRow(columns, buildFn);\n  }\n\n  fieldGroup(group: FormFieldGroup<TModel>): this;\n  fieldGroup(title: string, buildFn: (group: ChainableGroupBuilder<TModel>) => void): this;\n  fieldGroup(title: string, description: string, buildFn: (group: ChainableGroupBuilder<TModel>) => void): this;\n  fieldGroup(\n    arg1: string | FormFieldGroup<TModel>,\n    arg2?: string | ((group: ChainableGroupBuilder<TModel>) => void),\n    arg3?: (group: ChainableGroupBuilder<TModel>) => void\n  ): this {\n    if (typeof arg1 !== 'string') {\n      return this.layoutBuilder.fieldGroup(arg1);\n    }\n    if (typeof arg2 === 'string') {\n      return this.layoutBuilder.fieldGroup(arg1, arg2, arg3!);\n    }\n    return this.layoutBuilder.fieldGroup(arg1, arg2!);\n  }\n\n  formValidators(validators: FormValidator<TModel>[]): this {\n    return this.layoutBuilder.formValidators(validators);\n  }\n\n  groupValidators(validators: ValidatorFn[]): this {\n    return this.layoutBuilder.groupValidators(validators);\n  }\n\n  initialValue(value: Partial<TModel>): this {\n    return this.layoutBuilder.initialValue(value);\n  }\n\n  visible(\n    condition: (aggregatedData: Record<ModalStepId, Record<string, unknown>>) => boolean\n  ): this {\n    this.config.visible = condition;\n    return this;\n  }\n\n  nextLabel(label: string): this {\n    this.config.nextLabel = label;\n    return this;\n  }\n\n  backLabel(label: string): this {\n    this.config.backLabel = label;\n    return this;\n  }\n\n  hideBack(hide = true): this {\n    this.config.hideBack = hide;\n    return this;\n  }\n\n  build(): WizardStepConfig<TModel> {\n    this.layoutBuilder.flushCurrentRow();\n    return this.config;\n  }\n}\n","import {\n  ChainableGroupBuilder,\n  FieldValidatorBuilder,\n  FormContainerConfig,\n  FormLayoutBuilder\n} from './form-layout.builder';\nimport {\n  AnimationOptions,\n  BackdropMode,\n  BaseModalConfig,\n  CloseMode,\n  FormFieldConfig,\n  FormFieldGroup,\n  KeyboardMode,\n  ModalCancelHandler,\n  ModalFooterAction,\n  ModalI18nLabels,\n  ModalInputMap,\n  ModalIntent,\n  ModalPollingConfig,\n  ModalSize,\n  StepBodyConfig,\n  TemplateRef,\n  Type,\n} from '../mn-modal.types';\nimport {ValidatorFn} from '@angular/forms';\n\nexport abstract class BaseModalBuilder<TConfig extends BaseModalConfig<TResult> & FormContainerConfig<TModel>, TResult = unknown, TModel = unknown> {\n  protected config: TConfig;\n  protected layoutBuilder: FormLayoutBuilder<TModel, this>;\n\n  protected constructor(initialConfig: TConfig) {\n    this.config = initialConfig;\n    this.layoutBuilder = new FormLayoutBuilder<TModel, this>(\n      this.config,\n      this\n    );\n  }\n\n  title(title: string): this {\n    this.config.title = title;\n    return this;\n  }\n\n  subtitle(subtitle: string): this {\n    this.config.subtitle = subtitle;\n    return this;\n  }\n\n  description(description: string): this {\n    this.config.description = description;\n    return this;\n  }\n\n  closeGuard(guard: () => Promise<boolean> | boolean): this {\n    this.config.closeGuard = guard;\n    return this;\n  }\n\n  /** Set the width of the modal */\n  sizeWidth(size: ModalSize): this {\n    this.config.sizeWidth = size;\n    return this;\n  }\n\n  /** Set the height of the modal */\n  sizeHeight(size: ModalSize): this {\n    this.config.sizeHeight = size;\n    return this;\n  }\n\n  closeMode(mode: CloseMode): this {\n    this.config.closeMode = mode;\n    return this;\n  }\n\n  backdrop(mode: BackdropMode): this {\n    this.config.backdrop = mode;\n    return this;\n  }\n\n  keyboard(mode: KeyboardMode): this {\n    this.config.keyboard = mode;\n    return this;\n  }\n\n  intent(intent: ModalIntent): this {\n    this.config.intent = intent;\n    return this;\n  }\n\n  readOnly(readOnly = true): this {\n    this.config.readOnly = readOnly;\n    return this;\n  }\n\n  disabled(disabled = true): this {\n    this.config.disabled = disabled;\n    return this;\n  }\n\n  footerActions(actions: ModalFooterAction<TResult>[]): this {\n    this.config.footerActions = actions;\n    return this;\n  }\n\n  polling(config: ModalPollingConfig<TResult>): this {\n    this.config.polling = config;\n    return this;\n  }\n\n  onCancel(handler: ModalCancelHandler<TResult>): this {\n    this.config.onCancel = handler;\n    return this;\n  }\n\n  i18n(labels: ModalI18nLabels): this {\n    this.config.i18n = labels;\n    return this;\n  }\n\n  component(component: Type<unknown>): this {\n    this.config.component = component;\n    return this;\n  }\n\n  template(template: TemplateRef<unknown>): this {\n    this.config.template = template;\n    return this;\n  }\n\n  inputs(inputs: ModalInputMap): this {\n    this.config.inputs = inputs;\n    return this;\n  }\n\n  animation(animation: AnimationOptions | AnimationOptions['type']): this {\n    this.config.animation = animation;\n    return this;\n  }\n\n  /**\n   * Control whether the modal renders as a bottom sheet on small screens (< 640px).\n   * Enabled by default; pass `false` to keep a centered dialog on mobile.\n   */\n  mobileBottomSheet(enabled = true): this {\n    this.config.mobileBottomSheet = enabled;\n    return this;\n  }\n\n  /**\n   * Add a custom body/content to the modal.\n   */\n  body(body: StepBodyConfig): this {\n    return this.layoutBuilder.body(body);\n  }\n\n  /**\n   * Add a field.\n   */\n  field(field: FormFieldConfig<TModel>): this {\n    return this.layoutBuilder.field(field);\n  }\n\n  /**\n   * Add a field with a fluent validation builder.\n   */\n  fieldWithValidators(field: FormFieldConfig<TModel>): FieldValidatorBuilder<TModel, this> {\n    return this.layoutBuilder.fieldWithValidators(field);\n  }\n\n  /**\n   * Start a new row.\n   */\n  row(columns = 2): this {\n    return this.layoutBuilder.row(columns);\n  }\n\n  /**\n   * Add a field to the current row.\n   */\n  addToRow(field: FormFieldConfig<TModel>, span = 1): this {\n    return this.layoutBuilder.addToRow(field, span);\n  }\n\n  /**\n   * Declarative way to add a row.\n   */\n  addRow(\n    columns: number,\n    buildFn: (row: { add: (field: FormFieldConfig<TModel>, span?: number) => void }) => void\n  ): this {\n    return this.layoutBuilder.addRow(columns, buildFn);\n  }\n\n  /**\n   * Add a field group.\n   */\n  fieldGroup(group: FormFieldGroup<TModel>): this;\n  fieldGroup(title: string, buildFn: (group: ChainableGroupBuilder<TModel>) => void): this;\n  fieldGroup(title: string, description: string, buildFn: (group: ChainableGroupBuilder<TModel>) => void): this;\n  fieldGroup(\n    arg1: string | FormFieldGroup<TModel>,\n    arg2?: string | ((group: ChainableGroupBuilder<TModel>) => void),\n    arg3?: (group: ChainableGroupBuilder<TModel>) => void\n  ): this {\n    if (typeof arg1 !== 'string') {\n      return this.layoutBuilder.fieldGroup(arg1);\n    }\n    if (typeof arg2 === 'string') {\n      return this.layoutBuilder.fieldGroup(arg1, arg2, arg3!);\n    }\n    return this.layoutBuilder.fieldGroup(arg1, arg2!);\n  }\n\n  groupValidators(validators: ValidatorFn[]): this {\n    return this.layoutBuilder.groupValidators(validators);\n  }\n\n  build(): Readonly<TConfig> {\n    this.layoutBuilder.flushCurrentRow();\n    return Object.freeze({ ...this.config });\n  }\n}\n","import {BaseModalBuilder} from './base-modal.builder';\nimport {StepBuilder} from './step.builder';\nimport {\n  ModalKind,\n  ModalResultHandler,\n  ModalStepId,\n  WizardBeforeCompleteValidator,\n  WizardFlowMode,\n  WizardModalConfig,\n  WizardResult,\n  WizardStepChangeHandler,\n  WizardStepConfig,\n} from '../mn-modal.types';\n\nexport class WizardModalBuilder<TResult = WizardResult> extends BaseModalBuilder<\n  WizardModalConfig<TResult>,\n  TResult\n> {\n  constructor() {\n    super({\n      kind: ModalKind.WIZARD,\n      steps: [],\n    } as unknown as WizardModalConfig<TResult>);\n  }\n\n  /**\n   * Set initial values for the entire wizard.\n   * Note: This will be merged with individual step initial values.\n   */\n  initialValue(value: Partial<TResult>): this {\n    this.config.initialValue = value;\n    return this;\n  }\n\n  /**\n   * Description is not supported for wizard modals.\n   * Use step-level body text instead.\n   */\n  override description(_description: string): this {\n    return this;\n  }\n\n  step<TStepModel = unknown>(\n    step: WizardStepConfig<TStepModel> | ((builder: StepBuilder<TStepModel>) => void)\n  ): this {\n    if (typeof step === 'function') {\n      const builder = new StepBuilder<TStepModel>('', '');\n      step(builder);\n      const builtStep = builder.build();\n      this.config.steps.push(builtStep as unknown as WizardStepConfig<unknown>);\n    } else {\n      this.config.steps.push(step as unknown as WizardStepConfig<unknown>);\n    }\n    return this;\n  }\n\n  addStep<TStepModel = unknown>(\n    title: string,\n    buildFn: (builder: StepBuilder<TStepModel>) => void,\n    id?: ModalStepId\n  ): this {\n    const stepId = id || `step-${this.config.steps.length}`;\n    const builder = new StepBuilder<TStepModel>(stepId, title);\n    buildFn(builder);\n    const builtStep = builder.build();\n    this.config.steps.push(builtStep as unknown as WizardStepConfig<unknown>);\n    return this;\n  }\n\n  startAt(stepId: ModalStepId): this {\n    this.config.startStepId = stepId;\n    return this;\n  }\n\n  flow(mode: WizardFlowMode): this {\n    this.config.flow = mode;\n    return this;\n  }\n\n  onStepChange(handler: WizardStepChangeHandler): this {\n    this.config.onStepChange = handler;\n    return this;\n  }\n\n  onComplete(handler: ModalResultHandler<TResult>): this {\n    this.config.onComplete = handler;\n    return this;\n  }\n\n  onBeforeComplete(validators: WizardBeforeCompleteValidator<TResult>[]): this {\n    this.config.onBeforeComplete = validators;\n    return this;\n  }\n}\n","import { BaseModalBuilder } from './base-modal.builder';\nimport {\n  FormModalConfig,\n  ModalKind,\n  FormFieldConfig,\n  FormLayoutMode,\n  SubmitMode,\n  ModalResultHandler,\n  FormValidator,\n  MultiSelectTableFieldConfig,\n  SingleSelectTableFieldConfig,\n} from '../mn-modal.types';\nimport {ValidatorFn} from '@angular/forms';\n\nexport class FormModalBuilder<TModel = unknown, TResult = TModel> extends BaseModalBuilder<\n  FormModalConfig<TModel, TResult>,\n  TResult,\n  TModel\n> {\n  constructor() {\n    super({\n      kind: ModalKind.FORM,\n      fields: [],\n      rows: [],\n    });\n  }\n\n  /**\n   * Override to also accept table field configs with a concrete TRow (BehaviorSubject is invariant,\n   * so TableDataSource<TeamMember> is not assignable to TableDataSource<unknown>).\n   */\n  override field(field: FormFieldConfig<TModel>): this;\n  override field<TRow>(field: MultiSelectTableFieldConfig<TModel, TRow> | SingleSelectTableFieldConfig<TModel, TRow>): this;\n  override field<TRow = unknown>(\n    field: FormFieldConfig<TModel> | MultiSelectTableFieldConfig<TModel, TRow> | SingleSelectTableFieldConfig<TModel, TRow>\n  ): this {\n    return super.field(field as FormFieldConfig<TModel>);\n  }\n\n  layout(mode: FormLayoutMode): this {\n    this.config.layout = mode;\n    return this;\n  }\n\n  initialValue(value: Partial<TModel>): this {\n    return this.layoutBuilder.initialValue(value);\n  }\n\n  submitMode(mode: SubmitMode): this {\n    this.config.submitMode = mode;\n    return this;\n  }\n\n  onComplete(handler: ModalResultHandler<TResult>): this {\n    this.config.onComplete = handler;\n    return this;\n  }\n\n  formValidators(validators: FormValidator<TModel>[]): this {\n    return this.layoutBuilder.formValidators(validators);\n  }\n\n  override groupValidators(validators: ValidatorFn[]): this {\n    return this.layoutBuilder.groupValidators(validators);\n  }\n\n  override build(): Readonly<FormModalConfig<TModel, TResult>> {\n    return super.build();\n  }\n}\n","import { BaseModalBuilder } from './base-modal.builder';\nimport {\n  ConfirmationModalConfig,\n  ModalKind,\n  ConfirmationTone,\n  ConfirmationActionConfig,\n  CancellationActionConfig,\n  FormValidator,\n} from '../mn-modal.types';\nimport {ValidatorFn} from '@angular/forms';\n\nexport class ConfirmationModalBuilder<TResult = boolean> extends BaseModalBuilder<\n  ConfirmationModalConfig<TResult>,\n  TResult\n> {\n  constructor() {\n    super({\n      kind: ModalKind.CONFIRMATION,\n      message: '',\n      fields: [],\n      rows: [],\n    });\n  }\n\n  message(text: string): this {\n    this.config.message = text;\n    return this;\n  }\n\n  tone(tone: ConfirmationTone): this {\n    this.config.tone = tone;\n    return this;\n  }\n\n  confirmAction(action: ConfirmationActionConfig<TResult>): this {\n    this.config.confirm = action;\n    return this;\n  }\n\n  cancelAction(action: CancellationActionConfig): this {\n    this.config.cancel = action;\n    return this;\n  }\n\n  initialValue(value: Partial<unknown>): this {\n    return this.layoutBuilder.initialValue(value);\n  }\n\n  formValidators(validators: FormValidator<unknown>[]): this {\n    return this.layoutBuilder.formValidators(validators);\n  }\n\n  override groupValidators(validators: ValidatorFn[]): this {\n    return this.layoutBuilder.groupValidators(validators);\n  }\n\n  override build(): Readonly<ConfirmationModalConfig<TResult>> {\n    return super.build();\n  }\n}\n","import { BaseModalBuilder } from './base-modal.builder';\nimport {\n  CustomModalConfig,\n  ModalKind,\n  ModalResultHandler,\n} from '../mn-modal.types';\n\nexport class CustomModalBuilder<TResult = unknown> extends BaseModalBuilder<\n  CustomModalConfig<TResult>,\n  TResult\n> {\n  constructor() {\n    super({\n      kind: ModalKind.CUSTOM,\n    });\n  }\n\n  onComplete(handler: ModalResultHandler<TResult>): this {\n    this.config.onComplete = handler;\n    return this;\n  }\n}\n","import { WizardModalBuilder } from './wizard-modal.builder';\nimport { FormModalBuilder } from './form-modal.builder';\nimport { ConfirmationModalBuilder } from './confirmation-modal.builder';\nimport { CustomModalBuilder } from './custom-modal.builder';\nimport {WizardResult} from '../mn-modal.types';\n\nexport class ModalBuilder {\n  static wizard<TResult = WizardResult>(): WizardModalBuilder<TResult> {\n    return new WizardModalBuilder<TResult>();\n  }\n\n  static form<TModel = unknown, TResult = TModel>(): FormModalBuilder<TModel, TResult> {\n    return new FormModalBuilder<TModel, TResult>();\n  }\n\n  static confirmation<TResult = boolean>(): ConfirmationModalBuilder<TResult> {\n    return new ConfirmationModalBuilder<TResult>();\n  }\n\n  static custom<TResult = unknown>(): CustomModalBuilder<TResult> {\n    return new CustomModalBuilder<TResult>();\n  }\n}\n","import { Observable, Subject } from 'rxjs';\nimport {ComponentRef} from '@angular/core';\nimport {\n  ModalRef,\n  ModalCloseEvent,\n  ModalCloseReason,\n  BaseModalConfig,\n} from './mn-modal.types';\n\nexport class MnModalRef<TResult = unknown> implements ModalRef<TResult> {\n  private readonly closeSubject = new Subject<ModalCloseEvent<TResult>>();\n  public readonly afterClosed$: Observable<ModalCloseEvent<TResult>> = this.closeSubject.asObservable();\n\n  /** Whether close() or dismiss() has run, so a shell that finishes loading afterwards is never shown. */\n  private closeRequested = false;\n\n  /**\n   * @param componentRef The rendered modal shell, or null while `MnModalService` is still\n   * loading the modal components (`mn-angular-lib/modal-ui`); it is attached with {@link attach}.\n   * @param config The modal's mutable working config, shared with the shell.\n   */\n  constructor(\n    private componentRef: ComponentRef<unknown> | null,\n    private config: BaseModalConfig<TResult>\n  ) {}\n\n  close(result?: TResult): void {\n    const event: ModalCloseEvent<TResult> = {\n      reason: ModalCloseReason.COMPLETED,\n      result,\n    };\n    this.animateAndDestroy(event);\n  }\n\n  dismiss(reason: ModalCloseReason): void {\n    const event: ModalCloseEvent<TResult> = {\n      reason,\n    };\n    this.animateAndDestroy(event);\n  }\n\n  private async animateAndDestroy(event: ModalCloseEvent<TResult>): Promise<void> {\n    this.closeRequested = true;\n    const shell = this.componentRef?.instance as { startClosing?: () => Promise<void> } | undefined;\n    if (shell && typeof shell.startClosing === 'function') {\n      await shell.startClosing();\n    }\n    this.closeSubject.next(event);\n    this.closeSubject.complete();\n    this.destroy();\n  }\n\n  update(config: Partial<BaseModalConfig<TResult>>): void {\n    Object.assign(this.config, config);\n    // Trigger change detection on the shell component, once it is rendered\n    this.componentRef?.changeDetectorRef.detectChanges();\n  }\n\n  /** The rendered shell component, or undefined while the modal components are still loading. */\n  get component(): unknown {\n    return this.componentRef?.instance;\n  }\n\n  /** Whether close() or dismiss() has been called. */\n  get isCloseRequested(): boolean {\n    return this.closeRequested;\n  }\n\n  /**\n   * Attaches the rendered shell once `MnModalService` has loaded the modal components.\n   * @param componentRef The created shell.\n   */\n  attach(componentRef: ComponentRef<unknown>): void {\n    this.componentRef = componentRef;\n  }\n\n  private destroy(): void {\n    this.componentRef?.destroy();\n  }\n}\n","/**\n * Public API of the `mn-angular-lib/modal-core` entry point: modal types, builders, the modal ref and action icons, without any component.\n *\n * Each entry point is its own module in the published package, so a consumer's bundler\n * splits it into the chunk that uses it instead of loading the whole library at startup.\n * The root `mn-angular-lib` entry re-exports every entry point.\n */\nexport * from './src/mn-modal/mn-modal.types';\nexport * from './src/mn-modal/mn-modal-action-icons';\nexport * from './src/mn-modal/mn-modal-haptics';\nexport * from './src/mn-modal/builder';\nexport { MnModalRef } from './src/mn-modal/mn-modal-ref';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}