ngx-form-stepper 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-form-stepper.mjs","sources":["../../../projects/ngx-form-stepper/src/lib/form-stepper.utils.ts","../../../projects/ngx-form-stepper/src/lib/input/input.types.ts","../../../projects/ngx-form-stepper/src/lib/form-stepper.service.ts","../../../projects/ngx-form-stepper/src/lib/step/step.service.ts","../../../projects/ngx-form-stepper/src/lib/button/button.service.ts","../../../projects/ngx-form-stepper/src/lib/button/button.component.ts","../../../projects/ngx-form-stepper/src/lib/button/button.component.html","../../../projects/ngx-form-stepper/src/lib/input/input.service.ts","../../../projects/ngx-form-stepper/src/lib/input/input.component.ts","../../../projects/ngx-form-stepper/src/lib/input/input.component.html","../../../projects/ngx-form-stepper/src/lib/step/step.component.ts","../../../projects/ngx-form-stepper/src/lib/step/step.component.html","../../../projects/ngx-form-stepper/src/lib/redirect/redirect.service.ts","../../../projects/ngx-form-stepper/src/lib/redirect/redirect.component.ts","../../../projects/ngx-form-stepper/src/lib/redirect/redirect.component.html","../../../projects/ngx-form-stepper/src/lib/form-stepper.component.ts","../../../projects/ngx-form-stepper/src/lib/form-stepper.component.html","../../../projects/ngx-form-stepper/src/lib/step/step.utils.ts","../../../projects/ngx-form-stepper/src/lib/input/input.utils.ts","../../../projects/ngx-form-stepper/src/lib/input/select/select.utils.ts","../../../projects/ngx-form-stepper/src/lib/validator/validator.utils.ts","../../../projects/ngx-form-stepper/src/ngx-form-stepper.ts"],"sourcesContent":["import {\r\n FormStepperValues,\r\n HasDuplicateReturnKeys,\r\n MultiStepConfig,\r\n SingleStepConfig,\r\n} from './form-stepper.types';\r\nimport { MultiStepTuple, StepTuple } from './step/step.types';\r\n\r\nexport class FormStepper<T extends StepTuple> {\r\n readonly values: FormStepperValues<T>;\r\n\r\n constructor(\r\n readonly steps: HasDuplicateReturnKeys<T> extends true ? never : T,\r\n readonly config: T extends MultiStepTuple ? MultiStepConfig : SingleStepConfig,\r\n ) {\r\n this.values = Object.fromEntries(\r\n steps.flatMap((step) => step.inputs.map((input) => [input.returnKey, input.defaultValue])),\r\n ) as FormStepperValues<T>;\r\n }\r\n}\r\n","import {\r\n Validator,\r\n ValidatorTuple,\r\n ValidatorsKinds,\r\n ValidatorsNames,\r\n} from '../validator/validator.types';\r\nimport { Input } from './input.utils';\r\nimport { SelectItemTuple } from './select/select.types';\r\nimport { Select } from './select/select.utils';\r\n\r\nexport enum InputType {\r\n Text = 'text',\r\n Password = 'password',\r\n Email = 'email',\r\n Number = 'number',\r\n Tel = 'tel',\r\n Checkbox = 'checkbox',\r\n Date = 'date',\r\n Select = 'select',\r\n}\r\n\r\nexport type InputDefaultValue<T extends InputType> = T extends InputType.Text\r\n ? string | null\r\n : T extends InputType.Password\r\n ? string | null\r\n : T extends InputType.Email\r\n ? string | null\r\n : T extends InputType.Number\r\n ? number | null\r\n : T extends InputType.Tel\r\n ? string | null\r\n : T extends InputType.Checkbox\r\n ? boolean | null\r\n : T extends InputType.Date\r\n ? Date | null\r\n : T extends InputType.Select\r\n ? Select<SelectItemTuple, number | null>\r\n : never;\r\n\r\nexport type InputValue<\r\n T extends InputType,\r\n D extends InputDefaultValue<T>,\r\n> = T extends InputType.Text\r\n ? D extends null\r\n ? string | null\r\n : string\r\n : T extends InputType.Password\r\n ? string | null\r\n : T extends InputType.Email\r\n ? string | null\r\n : T extends InputType.Number\r\n ? number | null\r\n : T extends InputType.Tel\r\n ? string | null\r\n : T extends InputType.Checkbox\r\n ? boolean\r\n : T extends InputType.Date\r\n ? Date | null\r\n : T extends InputType.Select\r\n ? Select<SelectItemTuple, number | null>\r\n : never;\r\n\r\nexport type ValidatorsNamesOfType<T extends InputType> = T extends InputType.Text\r\n ? 'required' | 'confirm' | 'minLength' | 'maxLength' | 'pattern'\r\n : T extends InputType.Password\r\n ? 'required' | 'confirm' | 'strongPassword' | 'pattern'\r\n : T extends InputType.Email\r\n ? 'required' | 'confirm' | 'email'\r\n : T extends InputType.Number\r\n ? 'required' | 'confirm' | 'min' | 'max' | 'integer'\r\n : T extends InputType.Tel\r\n ? 'required' | 'confirm' | 'phone'\r\n : T extends InputType.Checkbox\r\n ? 'check'\r\n : T extends InputType.Date\r\n ? 'required' | 'confirm' | 'minDate' | 'maxDate'\r\n : T extends InputType.Select\r\n ? 'required'\r\n : never;\r\n\r\nexport type HasDuplicateValidators<V extends ValidatorTuple<ValidatorsNames>> = V extends [\r\n infer First,\r\n ...infer Rest,\r\n]\r\n ? First extends Validator<ValidatorsNames>\r\n ? Rest extends ValidatorTuple<ValidatorsNames>\r\n ? First['kind'] extends ValidatorsKinds<Rest>\r\n ? true\r\n : HasDuplicateValidators<Rest>\r\n : false\r\n : never\r\n : never;\r\n\r\nexport type InputTuple = [\r\n Input<\r\n InputType,\r\n InputDefaultValue<InputType>,\r\n string,\r\n ValidatorTuple<ValidatorsNamesOfType<InputType>>\r\n >,\r\n ...Input<\r\n InputType,\r\n InputDefaultValue<InputType>,\r\n string,\r\n ValidatorTuple<ValidatorsNamesOfType<InputType>>\r\n >[],\r\n];\r\n","import { Injectable, signal } from \"@angular/core\";\r\nimport { FormControl, FormGroup, ValidatorFn } from \"@angular/forms\";\r\nimport { FormStepper } from \"./form-stepper.utils\";\r\nimport { MultiStepTuple, StepTuple } from \"./step/step.types\";\r\nimport { InputType } from \"./input/input.types\";\r\nimport { Select } from \"./input/select/select.utils\";\r\nimport { SelectItemTuple } from \"./input/select/select.types\";\r\n\r\n@Injectable()\r\nexport class FormStepperService {\r\n readonly formStepper = signal<FormStepper<StepTuple | MultiStepTuple> | null>(\r\n null\r\n );\r\n stepsForm = signal<Record<string, FormGroup> | null>(null);\r\n index = signal(0);\r\n completed = signal<boolean>(false);\r\n\r\n setFormStepper(formStepper: FormStepper<StepTuple>) {\r\n this.formStepper.update(() => formStepper);\r\n this.setStepsForm();\r\n }\r\n\r\n private dateToInputFormat(date: Date): `${number}-${string}-${string}` {\r\n const year = date.getFullYear();\r\n const month = (date.getMonth() + 1).toString().padStart(2, \"0\");\r\n const day = date.getDate().toString().padStart(2, \"0\");\r\n\r\n return `${year}-${month}-${day}`;\r\n }\r\n\r\n setStepsForm() {\r\n const steps = this.formStepper()?.steps ?? null;\r\n if (steps === null) return;\r\n\r\n const forms = Object.fromEntries(\r\n steps.map((step, index) => {\r\n const validators = step.inputs.flatMap((i) => {\r\n const cv = i.validators\r\n ? i.validators.find((v) => v.kind === \"confirm\") ?? null\r\n : null;\r\n\r\n if (cv === null) return [];\r\n\r\n return cv.fn({\r\n key: i.returnKey,\r\n confirmKey: this.getConfirmReturnKey(i.returnKey),\r\n });\r\n });\r\n\r\n return [\r\n index,\r\n new FormGroup(\r\n Object.fromEntries(\r\n step.inputs.flatMap((input) => {\r\n const confirm = input.validators\r\n ? input.validators.find((v) => v.kind === \"confirm\") ?? null\r\n : null;\r\n\r\n const other = input.validators\r\n ? input.validators.filter((v) => v.kind !== \"confirm\")\r\n : [];\r\n\r\n const validators: ValidatorFn[] = [];\r\n\r\n other.forEach((v) => {\r\n validators.push(v.fn({ key: input.returnKey }));\r\n });\r\n\r\n const defaultValue =\r\n input.defaultValue === null\r\n ? input.type === InputType.Checkbox\r\n ? \"false\"\r\n : \"\"\r\n : input.type === InputType.Number\r\n ? Number.isNaN(input.defaultValue)\r\n ? \"\"\r\n : `${input.defaultValue}`\r\n : input.type === InputType.Checkbox\r\n ? `${input.defaultValue}`\r\n : input.type === InputType.Date\r\n ? this.dateToInputFormat(input.defaultValue as Date)\r\n : input.type === InputType.Select\r\n ? (\r\n input.defaultValue as Select<\r\n SelectItemTuple,\r\n number | null\r\n >\r\n ).current === null\r\n ? \"\"\r\n : (\r\n input.defaultValue as Select<\r\n SelectItemTuple,\r\n number | null\r\n >\r\n ).current!.value\r\n : (input.defaultValue as Exclude<\r\n typeof input.defaultValue,\r\n | boolean\r\n | number\r\n | Date\r\n | Select<SelectItemTuple, number | null>\r\n >);\r\n\r\n const controls = [\r\n [\r\n input.returnKey,\r\n new FormControl<string>(defaultValue, validators),\r\n ],\r\n ];\r\n\r\n if (confirm !== null) {\r\n controls.push([\r\n this.getConfirmReturnKey(input.returnKey),\r\n new FormControl<string>(defaultValue),\r\n ]);\r\n }\r\n\r\n return controls;\r\n })\r\n ),\r\n { validators }\r\n ),\r\n ];\r\n })\r\n );\r\n\r\n this.stepsForm.update(() => forms);\r\n }\r\n\r\n getConfirmReturnKey(returnKey: string) {\r\n return `confirm-${returnKey}`;\r\n }\r\n\r\n updateValues(values: Record<string, string>) {\r\n const fs = this.formStepper();\r\n const step = this.formStepper()?.steps[this.index()] ?? null;\r\n if (fs === null || step === null) return;\r\n\r\n Object.entries(values).forEach(([key, value]) => {\r\n const type = step.inputs.find((input) => input.returnKey === key)?.type;\r\n\r\n if (type === undefined) return;\r\n\r\n fs.values[key] =\r\n type === InputType.Checkbox\r\n ? value === \"true\"\r\n : value === \"\"\r\n ? null\r\n : type === InputType.Number\r\n ? Number.isNaN(Number(value))\r\n ? null\r\n : Number(value)\r\n : type === InputType.Tel\r\n ? value.replace(/\\s|-/g, \"\")\r\n : type === InputType.Date\r\n ? new Date(value)\r\n : value;\r\n });\r\n\r\n step.inputs.forEach((input) => {\r\n const confirm = input.validators\r\n ? input.validators.find((v) => v.kind === \"confirm\") ?? null\r\n : null;\r\n\r\n if (confirm !== null) {\r\n const confirmKey = this.getConfirmReturnKey(input.returnKey);\r\n delete fs.values[confirmKey];\r\n }\r\n });\r\n }\r\n\r\n next() {\r\n const index = this.index();\r\n const length = this.formStepper()?.steps.length ?? null;\r\n if (length === null) return;\r\n\r\n if (index < length - 1) {\r\n this.index.update((index) => index + 1);\r\n } else {\r\n this.complete();\r\n }\r\n }\r\n\r\n previous() {\r\n const index = this.index();\r\n if (index > 0) {\r\n this.index.update((index) => index - 1);\r\n }\r\n }\r\n\r\n complete() {\r\n this.completed.update(() => true);\r\n }\r\n}\r\n","import { computed, inject, Injectable } from '@angular/core';\r\nimport { FormStepperService } from '../form-stepper.service';\r\n\r\n@Injectable()\r\nexport class StepService {\r\n private readonly service = inject(FormStepperService);\r\n\r\n step = computed(() => this.service.formStepper()?.steps[this.service.index()] ?? null);\r\n classNames = computed(() => this.service.formStepper()?.config.classNames?.step);\r\n form = computed(() => this.service.stepsForm()?.[this.service.index()] ?? null);\r\n\r\n onSubmit() {\r\n const form = this.form();\r\n if (form === null) return;\r\n\r\n const values = form.getRawValue() as Record<string, string>;\r\n this.service.updateValues(values);\r\n this.service.next();\r\n }\r\n}\r\n","import { computed, inject, Injectable } from '@angular/core';\r\nimport { FormStepperService } from '../form-stepper.service';\r\nimport { MultiStepButtonText, SingleStepButtonText } from './button.types';\r\nimport { MultiStepClassNames, SingleStepClassNames } from '../form-stepper.types';\r\n\r\n@Injectable()\r\nexport class ButtonService {\r\n private readonly service = inject(FormStepperService);\r\n\r\n private text = computed(() => this.service.formStepper()?.config.buttonText ?? null);\r\n private classNames = computed(() => this.service.formStepper()?.config.classNames?.button);\r\n form = computed(() => this.service.stepsForm()?.[this.service.index()] ?? null);\r\n\r\n view = computed(() => {\r\n const type = this.service.formStepper()?.steps.length === 1 ? 'single' : 'multi';\r\n const text = this.text();\r\n const classNames = this.classNames();\r\n\r\n if (type === null || text === null) return null;\r\n\r\n if (type === 'single') {\r\n return {\r\n kind: 'single' as const,\r\n text: text as SingleStepButtonText | null,\r\n classNames: classNames as SingleStepClassNames['button'] | undefined,\r\n };\r\n }\r\n\r\n return {\r\n kind: 'multi' as const,\r\n text: text as MultiStepButtonText | null,\r\n classNames: classNames as MultiStepClassNames['button'] | undefined,\r\n };\r\n });\r\n\r\n stepPosition = computed(() => {\r\n const fs = this.service.formStepper();\r\n if (fs === null) return null;\r\n\r\n const length = fs.steps.length - 1;\r\n const index = this.service.index();\r\n\r\n return index === 0\r\n ? ('first' as const)\r\n : index === length\r\n ? ('last' as const)\r\n : ('middle' as const);\r\n });\r\n\r\n previous() {\r\n this.service.previous();\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonService } from './button.service';\r\n\r\n@Component({\r\n selector: 'app-button',\r\n templateUrl: './button.component.html',\r\n imports: [CommonModule],\r\n providers: [ButtonService],\r\n})\r\nexport class ButtonComponent {\r\n private readonly service = inject(ButtonService);\r\n\r\n form = this.service.form;\r\n view = this.service.view;\r\n stepPosition = this.service.stepPosition;\r\n\r\n previous() {\r\n this.service.previous();\r\n }\r\n}\r\n","@let _view = view(); @let _form = form(); @let _stepPosition = stepPosition(); @if (_view !== null\r\n&& _form !== null && _view.kind === 'single') {\r\n<div [ngClass]=\"_view.classNames?.container ?? ''\">\r\n <button\r\n [ngClass]=\"[\r\n _view.classNames?.button ?? '',\r\n _form.invalid ? _view.classNames?.disabled ?? '' : ''\r\n ]\"\r\n type=\"submit\"\r\n >\r\n {{ _view.text }}\r\n </button>\r\n</div>\r\n} @if (_view !== null && _form !== null && _view.kind === 'multi' && _stepPosition === 'first') {\r\n<div [ngClass]=\"_view.classNames?.container ?? ''\">\r\n <button\r\n [ngClass]=\"[\r\n _view.classNames?.first ?? '',\r\n _view.classNames?.button ?? '',\r\n _form.invalid ? _view.classNames?.disabled ?? '' : ''\r\n ]\"\r\n type=\"submit\"\r\n >\r\n {{ _view.text?.next }}\r\n </button>\r\n</div>\r\n} @if (_view !== null && _form !== null && _view.kind === 'multi' && _stepPosition === 'middle') {\r\n<div [ngClass]=\"_view.classNames?.container ?? ''\">\r\n <button\r\n (click)=\"previous()\"\r\n [ngClass]=\"[_view.classNames?.previous ?? '', _view.classNames?.button ?? '']\"\r\n type=\"button\"\r\n >\r\n {{ _view.text?.previous }}\r\n </button>\r\n <button\r\n [ngClass]=\"[\r\n _view.classNames?.next ?? '',\r\n _view.classNames?.button ?? '',\r\n _form.invalid ? _view.classNames?.disabled ?? '' : ''\r\n ]\"\r\n type=\"submit\"\r\n >\r\n {{ _view.text?.next }}\r\n </button>\r\n</div>\r\n} @if (_view !== null && _form !== null && _view.kind === 'multi' && _stepPosition === 'last') {\r\n<div [ngClass]=\"_view.classNames?.container ?? ''\">\r\n <button\r\n (click)=\"previous()\"\r\n [ngClass]=\"[_view.classNames?.previous ?? '', _view.classNames?.button ?? '']\"\r\n type=\"button\"\r\n >\r\n {{ _view.text?.previous }}\r\n </button>\r\n <button\r\n [ngClass]=\"[\r\n _view.classNames?.final ?? '',\r\n _view.classNames?.button ?? '',\r\n _form.invalid ? _view.classNames?.disabled ?? '' : ''\r\n ]\"\r\n type=\"submit\"\r\n >\r\n {{ _view.text?.final }}\r\n </button>\r\n</div>\r\n}\r\n","import { computed, inject, Injectable, signal } from '@angular/core';\r\nimport { FormStepperService } from '../form-stepper.service';\r\nimport { InputType } from './input.types';\r\nimport { Select } from './select/select.utils';\r\nimport { SelectItemTuple } from './select/select.types';\r\n\r\n@Injectable()\r\nexport class InputService {\r\n private readonly service = inject(FormStepperService);\r\n\r\n key = signal<string | null>(null);\r\n confirmKey = computed(() => {\r\n const key = this.key();\r\n if (key === null) return null;\r\n\r\n return this.service.getConfirmReturnKey(key);\r\n });\r\n classNames = computed(() => this.service.formStepper()?.config.classNames?.input);\r\n input = computed(\r\n () =>\r\n this.service\r\n .formStepper()\r\n ?.steps[this.service.index()]?.inputs.find((input) => input.returnKey === this.key()) ??\r\n null,\r\n );\r\n confirmValidator = computed(\r\n () => this.input()?.validators?.find((v) => v.kind === 'confirm') ?? null,\r\n );\r\n othersValidators = computed(\r\n () => this.input()?.validators?.filter((v) => v.kind !== 'confirm') ?? null,\r\n );\r\n\r\n form = computed(() => this.service.stepsForm()?.[this.service.index()] ?? null);\r\n control = computed(() => {\r\n const key = this.key();\r\n if (key === null) return null;\r\n\r\n return this.form()?.get(key) ?? null;\r\n });\r\n confirmControl = computed(() => {\r\n const confirmKey = this.confirmKey();\r\n if (confirmKey === null) return null;\r\n\r\n return this.form()?.get(confirmKey) ?? null;\r\n });\r\n\r\n inputContainerCn = computed(\r\n () => this.service.formStepper()?.config.classNames?.step?.inputContainer,\r\n );\r\n\r\n isRequired = computed(() => {\r\n const othersValidators = this.othersValidators();\r\n if (othersValidators === null) return false;\r\n\r\n return othersValidators.some((v) => v.kind === 'required');\r\n });\r\n\r\n selectItems = computed(() => {\r\n const input = this.input();\r\n if (input === null || input.type !== InputType.Select) return null;\r\n\r\n return (input.defaultValue as Select<SelectItemTuple, any>).items;\r\n });\r\n\r\n private inputElement = signal<HTMLInputElement | null>(null);\r\n\r\n private currentValue: null | boolean = null;\r\n private isCheckbox = false;\r\n\r\n setKey(key: string) {\r\n this.key.set(key);\r\n }\r\n\r\n setInputElement(element: HTMLInputElement) {\r\n this.inputElement.set(element);\r\n }\r\n\r\n verifyCheckbox() {\r\n const control = this.control();\r\n const element = this.inputElement();\r\n if (control === null || element === null || !this.isCheckbox) return;\r\n\r\n this.currentValue = !this.currentValue;\r\n element.checked = this.currentValue;\r\n\r\n control.setValue(this.currentValue);\r\n }\r\n\r\n firstVerifyCheckbox() {\r\n const input = this.input();\r\n const element = this.inputElement();\r\n const control = this.control();\r\n if (input === null || element === null || control === null || input.type !== InputType.Checkbox)\r\n return;\r\n\r\n this.isCheckbox = true;\r\n this.currentValue =\r\n (input.defaultValue as boolean | null) === null\r\n ? false\r\n : (input.defaultValue as boolean | null) === false\r\n ? false\r\n : true;\r\n\r\n element.checked = this.currentValue;\r\n }\r\n}\r\n","import { Component, effect, ElementRef, inject, input as ngInput, viewChild } from '@angular/core';\r\nimport { InputService } from './input.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Input } from './input.utils';\r\nimport { ControlContainer, FormGroupDirective, ReactiveFormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-input',\r\n templateUrl: './input.component.html',\r\n imports: [CommonModule, ReactiveFormsModule],\r\n providers: [InputService],\r\n viewProviders: [\r\n {\r\n provide: ControlContainer,\r\n useExisting: FormGroupDirective,\r\n },\r\n ],\r\n})\r\nexport class InputComponent {\r\n private readonly service = inject(InputService);\r\n\r\n key = ngInput.required<Input<any, any, string, any>['returnKey']>();\r\n inputElement = viewChild<ElementRef<HTMLInputElement>>('input');\r\n\r\n confirmKey = this.service.confirmKey;\r\n classNames = this.service.classNames;\r\n input = this.service.input;\r\n confirmValidator = this.service.confirmValidator;\r\n othersValidators = this.service.othersValidators;\r\n form = this.service.form;\r\n control = this.service.control;\r\n confirmControl = this.service.confirmControl;\r\n inputContainerCn = this.service.inputContainerCn;\r\n isRequired = this.service.isRequired;\r\n selectItems = this.service.selectItems;\r\n\r\n constructor() {\r\n effect(() => this.service.setKey(this.key()));\r\n effect(() => {\r\n const inputElement = this.inputElement();\r\n if (inputElement === undefined) return;\r\n\r\n this.service.setInputElement(inputElement.nativeElement);\r\n });\r\n effect(() => this.service.firstVerifyCheckbox());\r\n }\r\n\r\n handleClick() {\r\n this.service.verifyCheckbox();\r\n }\r\n}\r\n","@let _key = key(); @let _confirmKey = confirmKey(); @let _classNames = classNames(); @let _input =\r\ninput(); @let _confirmValidator = confirmValidator(); @let _othersValidators = othersValidators();\r\n@let _control = control(); @let _confirmControl = confirmControl(); @let _form = form(); @let\r\n_inputContainerCn = inputContainerCn(); @let _isRequired = isRequired(); @let _selectItems =\r\nselectItems(); @if (_input !== null && _confirmValidator === null) {\r\n<div [ngClass]=\"_classNames?.container ?? ''\">\r\n <label [for]=\"_key\" [ngClass]=\"_classNames?.label ?? ''\"\r\n >{{ _input.label }}\r\n @if (_isRequired) {\r\n <span [ngClass]=\"_classNames?.required ?? ''\">*</span>\r\n }\r\n </label>\r\n\r\n @if (_input.type === 'select') {\r\n <select [id]=\"_key\" [formControlName]=\"_key\" [ngClass]=\"_classNames?.input ?? ''\">\r\n @for (item of _selectItems; track item) {\r\n <option [value]=\"item.value\">\r\n {{ item.label }}\r\n </option>\r\n }\r\n </select>\r\n } @else {\r\n <input\r\n #input\r\n [id]=\"_key\"\r\n [type]=\"_input.type\"\r\n (click)=\"handleClick()\"\r\n [formControlName]=\"_key\"\r\n [ngClass]=\"_classNames?.input ?? ''\"\r\n />\r\n } @if (_othersValidators !== null && _control !== null) {\r\n <div [ngClass]=\"_classNames?.errorContainer ?? ''\">\r\n @for (v of _othersValidators; track v) { @if (_control.hasError(v.name({ key: _key })) &&\r\n _control.touched) {\r\n <p [ngClass]=\"_classNames?.error ?? ''\">\r\n {{ v.errorText }}\r\n </p>\r\n } }\r\n </div>\r\n }\r\n</div>\r\n} @if (_input !== null && _confirmValidator !== null && _input.type !== 'select') {\r\n<div [ngClass]=\"_inputContainerCn ?? ''\">\r\n <div [ngClass]=\"_classNames?.container ?? ''\">\r\n <label [for]=\"_key\" [ngClass]=\"_classNames?.label ?? ''\"\r\n >{{ _input.label }}\r\n @if (_isRequired) {\r\n <span [ngClass]=\"_classNames?.required ?? ''\">*</span>\r\n }\r\n </label>\r\n\r\n <input\r\n [id]=\"_key\"\r\n [type]=\"_input.type\"\r\n [formControlName]=\"_key\"\r\n [ngClass]=\"_classNames?.input ?? ''\"\r\n />\r\n\r\n @if (_othersValidators !== null && _control !== null) {\r\n <div [ngClass]=\"_classNames?.errorContainer ?? ''\">\r\n @for (v of _othersValidators; track v) { @if (_control.hasError(v.name({ key: _key })) &&\r\n _control.touched) {\r\n <p [ngClass]=\"_classNames?.error ?? ''\">\r\n {{ v.errorText }}\r\n </p>\r\n } }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div [ngClass]=\"_classNames?.container ?? ''\">\r\n <label [for]=\"_confirmKey\" [ngClass]=\"_classNames?.label ?? ''\"\r\n >{{ _confirmValidator.confirmLabel }}\r\n @if (_isRequired) {\r\n <span [ngClass]=\"_classNames?.required ?? ''\">*</span>\r\n }\r\n </label>\r\n\r\n <input\r\n [id]=\"_confirmKey\"\r\n [type]=\"_input.type\"\r\n [formControlName]=\"_confirmKey\"\r\n [ngClass]=\"_classNames?.input ?? ''\"\r\n />\r\n\r\n @if ( _form !== null && _confirmControl !== null && _form.hasError(_confirmValidator.name({ key:\r\n _key })) && _confirmControl.touched ) {\r\n <div [ngClass]=\"_classNames?.errorContainer ?? ''\">\r\n <p [ngClass]=\"_classNames?.error ?? ''\">\r\n {{ _confirmValidator.errorText }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { StepService } from './step.service';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { InputComponent } from '../input/input.component';\r\n\r\n@Component({\r\n selector: 'app-step',\r\n templateUrl: './step.component.html',\r\n imports: [CommonModule, ReactiveFormsModule, ButtonComponent, InputComponent],\r\n providers: [StepService],\r\n})\r\nexport class StepComponent {\r\n private readonly service = inject(StepService);\r\n\r\n step = this.service.step;\r\n classNames = this.service.classNames;\r\n form = this.service.form;\r\n\r\n onSubmit() {\r\n const form = this.form();\r\n if (form === null) return;\r\n\r\n form.invalid ? form.markAllAsTouched() : this.service.onSubmit();\r\n }\r\n}\r\n","@let _step = step();\r\n@let _classNames = classNames();\r\n@let _form = form();\r\n\r\n@if (_step !== null && _form !== null) {\r\n <div [ngClass]=\"_classNames?.container\">\r\n @if (_step.config?.title) {\r\n <h2 [ngClass]=\"_classNames?.title\">{{ _step.config?.title }}</h2>\r\n }\r\n\r\n <form [formGroup]=\"_form\" [ngClass]=\"_classNames?.form\" (ngSubmit)=\"onSubmit()\">\r\n <div [ngClass]=\"_classNames?.inputContainer\">\r\n @for (input of _step.inputs; track input.returnKey) {\r\n <app-input [key]=\"input.returnKey\" />\r\n }\r\n </div>\r\n\r\n <app-button />\r\n </form>\r\n </div>\r\n}\r\n","import { computed, inject, Injectable, signal } from '@angular/core';\r\nimport { FormStepperService } from '../form-stepper.service';\r\nimport { RedirectItem, RedirectKey, RedirectText, RedirectUrl } from './redirect.types';\r\n\r\n@Injectable()\r\nexport class RedirectService {\r\n private readonly service = inject(FormStepperService);\r\n\r\n key = signal<RedirectKey | null>(null);\r\n classNames = computed(() => {\r\n const key = this.key();\r\n if (key === null) return null;\r\n\r\n return this.service.formStepper()?.config.classNames?.[key];\r\n });\r\n redirectItems = computed(() => {\r\n const key = this.key();\r\n if (key === null) return null;\r\n\r\n return this.service.formStepper()?.config[key] ?? null;\r\n });\r\n\r\n isUrl(item: RedirectItem): item is RedirectUrl {\r\n return typeof item === 'object' && 'url' in item && 'urlText' in item;\r\n }\r\n\r\n isText(item: RedirectItem): item is RedirectText {\r\n return typeof item === 'string';\r\n }\r\n}\r\n","import { Component, effect, inject, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RedirectService } from './redirect.service';\r\nimport { RouterLink } from '@angular/router';\r\nimport { RedirectItem, RedirectKey } from './redirect.types';\r\n\r\n@Component({\r\n selector: 'app-redirect',\r\n templateUrl: './redirect.component.html',\r\n imports: [CommonModule, RouterLink],\r\n providers: [RedirectService],\r\n})\r\nexport class RedirectComponent {\r\n private readonly service = inject(RedirectService);\r\n\r\n key = input.required<RedirectKey>();\r\n classNames = this.service.classNames;\r\n redirectItems = this.service.redirectItems;\r\n\r\n constructor() {\r\n effect(() => this.service.key.set(this.key()));\r\n }\r\n\r\n isUrl(item: RedirectItem) {\r\n return this.service.isUrl(item);\r\n }\r\n\r\n isText(item: RedirectItem) {\r\n return this.service.isText(item);\r\n }\r\n}\r\n","@let _classNames = classNames();\r\n@let _redirectItems = redirectItems();\r\n\r\n<p [ngClass]=\"_classNames?.container\">\r\n @for (item of _redirectItems; track item) {\r\n @if (isUrl(item)) {\r\n <a [ngClass]=\"_classNames?.url\" [routerLink]=\"item.url\">\r\n {{ item.urlText }}\r\n </a>\r\n }\r\n\r\n @if (isText(item)) {\r\n <span [ngClass]=\"_classNames?.text\">{{ item }}</span>\r\n }\r\n }\r\n</p>\r\n","import { Component, effect, inject, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormStepperService } from './form-stepper.service';\r\nimport { StepComponent } from './step/step.component';\r\nimport { FormStepper } from './form-stepper.utils';\r\nimport { StepTuple } from './step/step.types';\r\nimport { RedirectComponent } from './redirect/redirect.component';\r\n\r\n@Component({\r\n selector: 'app-form-stepper',\r\n templateUrl: './form-stepper.component.html',\r\n imports: [CommonModule, StepComponent, RedirectComponent],\r\n providers: [FormStepperService],\r\n})\r\nexport class FormStepperComponent {\r\n private readonly service = inject(FormStepperService);\r\n formStepper = input.required<FormStepper<StepTuple>>();\r\n completed = output();\r\n\r\n constructor() {\r\n effect(() => {\r\n this.service.setFormStepper(this.formStepper());\r\n });\r\n\r\n effect(() => {\r\n if (this.service.completed()) {\r\n this.completed.emit();\r\n }\r\n });\r\n }\r\n}\r\n","@let _formStepper = formStepper();\r\n@let classNames = _formStepper.config.classNames;\r\n\r\n<div [ngClass]=\"classNames?.container\">\r\n @if (_formStepper.config.title) {\r\n <h1 [ngClass]=\"classNames?.title\">{{ _formStepper.config.title }}</h1>\r\n }\r\n\r\n <app-redirect [key]=\"'actionText'\" />\r\n\r\n <app-step />\r\n\r\n <app-redirect [key]=\"'footerText'\" />\r\n</div>\r\n","import { InputTuple } from '../input/input.types';\r\nimport { HasDuplicateReturnKeys, StepConfig } from './step.types';\r\n\r\nexport class Step<T extends InputTuple> {\r\n constructor(\r\n readonly inputs: HasDuplicateReturnKeys<T> extends true ? never : T,\r\n readonly config?: StepConfig,\r\n ) {}\r\n}\r\n","import { IsCamelCase } from '../common/common.types';\r\nimport { ValidatorTuple } from '../validator/validator.types';\r\nimport {\r\n HasDuplicateValidators,\r\n InputDefaultValue,\r\n InputType,\r\n ValidatorsNamesOfType,\r\n} from './input.types';\r\n\r\nexport class Input<\r\n T extends InputType,\r\n D extends InputDefaultValue<T>,\r\n K extends string,\r\n V extends ValidatorTuple<ValidatorsNamesOfType<T>>\r\n> {\r\n readonly defaultValue: D;\r\n\r\n constructor(\r\n readonly type: T,\r\n defaultValue: D,\r\n readonly returnKey: IsCamelCase<K> extends true ? K : never,\r\n readonly label: string,\r\n readonly validators?: HasDuplicateValidators<V> extends true ? never : V\r\n ) {\r\n this.defaultValue = (\r\n type === InputType.Checkbox ? (defaultValue === null ? false : defaultValue) : defaultValue\r\n ) as D;\r\n }\r\n}\r\n","import { HasIndex, SelectItem, SelectItemTuple } from './select.types';\r\n\r\nexport class Select<T extends SelectItemTuple, I extends number | null> {\r\n current: SelectItem | null;\r\n\r\n constructor(\r\n readonly items: T,\r\n readonly currentIndex: HasIndex<T, I> extends true ? I : never,\r\n ) {\r\n this.current = currentIndex === null ? null : this.items[currentIndex];\r\n }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport {\r\n ConfirmValidatorName,\r\n ConfirmValidatorNameFn,\r\n StandardValidatorName,\r\n StandardValidatorNameFn,\r\n Validator,\r\n} from './validator.types';\r\n\r\nexport function required(errorText: string): Validator<'required'> {\r\n const name: StandardValidatorNameFn<'required'> = (params: { key: string }) =>\r\n `${params.key}-required`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'required'> = `${params.key}-required`;\r\n\r\n return control.value.length > 0 ? null : { [customName]: true };\r\n };\r\n\r\n return {\r\n kind: 'required',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function check(errorText: string): Validator<'check'> {\r\n const name: StandardValidatorNameFn<'check'> = (params: { key: string }) => `${params.key}-check`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string | boolean>) => {\r\n const customName: StandardValidatorName<'check'> = `${params.key}-check`;\r\n const parsed = control.value === 'true';\r\n\r\n return typeof control.value === 'string' ? (parsed ? null : { [customName]: true }) : null;\r\n };\r\n\r\n return {\r\n kind: 'check',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function confirm(confirmLabel: string, errorText: string): Validator<'confirm'> {\r\n const name: ConfirmValidatorNameFn = (params: { key: string }) => `${params.key}-confirm`;\r\n\r\n const fn =\r\n (params: { key: string; confirmKey: string }) => (control: AbstractControl<string>) => {\r\n const customName: ConfirmValidatorName = `${params.key}-confirm`;\r\n\r\n return control.get(params.key)?.value !== control.get(params.confirmKey)?.value\r\n ? { [customName]: true }\r\n : null;\r\n };\r\n\r\n return {\r\n kind: 'confirm',\r\n name,\r\n fn,\r\n errorText,\r\n confirmLabel,\r\n };\r\n}\r\n\r\nexport function minLength(min: number, errorText: string): Validator<'minLength'> {\r\n const name: StandardValidatorNameFn<'minLength'> = (params: { key: string }) =>\r\n `${params.key}-minLength`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'minLength'> = `${params.key}-minLength`;\r\n\r\n return control.value.length < min ? { [customName]: true } : null;\r\n };\r\n\r\n return {\r\n kind: 'minLength',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function maxLength(max: number, errorText: string): Validator<'maxLength'> {\r\n const name: StandardValidatorNameFn<'maxLength'> = (params: { key: string }) =>\r\n `${params.key}-maxLength`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'maxLength'> = `${params.key}-maxLength`;\r\n\r\n return control.value.length > max ? { [customName]: true } : null;\r\n };\r\n\r\n return {\r\n kind: 'maxLength',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function min(min: number, errorText: string): Validator<'min'> {\r\n const name: StandardValidatorNameFn<'min'> = (params: { key: string }) => `${params.key}-min`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'min'> = `${params.key}-min`;\r\n const parsed = Number(control.value);\r\n\r\n return Number.isNaN(parsed)\r\n ? { [customName]: true }\r\n : parsed < min\r\n ? { [customName]: true }\r\n : null;\r\n };\r\n\r\n return {\r\n kind: 'min',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function max(max: number, errorText: string): Validator<'max'> {\r\n const name: StandardValidatorNameFn<'max'> = (params: { key: string }) => `${params.key}-max`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'max'> = `${params.key}-max`;\r\n const parsed = Number(control.value);\r\n\r\n return Number.isNaN(parsed)\r\n ? { [customName]: true }\r\n : parsed > max\r\n ? { [customName]: true }\r\n : null;\r\n };\r\n\r\n return {\r\n kind: 'max',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function integer(errorText: string): Validator<'integer'> {\r\n const name: StandardValidatorNameFn<'integer'> = (params: { key: string }) =>\r\n `${params.key}-integer`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'integer'> = `${params.key}-integer`;\r\n const parsed = Number(control.value);\r\n\r\n return Number.isNaN(parsed)\r\n ? { [customName]: true }\r\n : Number.isInteger(parsed)\r\n ? null\r\n : { [customName]: true };\r\n };\r\n\r\n return {\r\n kind: 'integer',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function pattern(pattern: RegExp, errorText: string): Validator<'pattern'> {\r\n const name: StandardValidatorNameFn<'pattern'> = (params: { key: string }) =>\r\n `${params.key}-pattern`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'pattern'> = `${params.key}-pattern`;\r\n\r\n return pattern.test(control.value) ? null : { [customName]: true };\r\n };\r\n\r\n return {\r\n kind: 'pattern',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function strongPassword(errorText: string): Validator<'strongPassword'> {\r\n const name: StandardValidatorNameFn<'strongPassword'> = (params: { key: string }) =>\r\n `${params.key}-strongPassword`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'strongPassword'> = `${params.key}-strongPassword`;\r\n const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()_\\-+=]).{8,}$/;\r\n\r\n return regex.test(control.value) ? null : { [customName]: true };\r\n };\r\n\r\n return {\r\n kind: 'strongPassword',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function email(errorText: string): Validator<'email'> {\r\n const name: StandardValidatorNameFn<'email'> = (params: { key: string }) => `${params.key}-email`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'email'> = `${params.key}-email`;\r\n const regex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n\r\n return regex.test(control.value) ? null : { [customName]: true };\r\n };\r\n\r\n return {\r\n kind: 'email',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function phone(errorText: string): Validator<'phone'> {\r\n const name: StandardValidatorNameFn<'phone'> = (params: { key: string }) => `${params.key}-phone`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'phone'> = `${params.key}-phone`;\r\n const regex = /^\\+?[0-9]{7,15}$/;\r\n const cleared = control.value.replace(/\\s|-/g, '');\r\n\r\n return regex.test(cleared) ? null : { [customName]: true };\r\n };\r\n\r\n return {\r\n kind: 'phone',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function minDate(min: Date, errorText: string): Validator<'minDate'> {\r\n const name: StandardValidatorNameFn<'minDate'> = (params: { key: string }) =>\r\n `${params.key}-minDate`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'minDate'> = `${params.key}-minDate`;\r\n const parsed = control.value === '' ? null : new Date(control.value);\r\n\r\n return parsed === null\r\n ? { [customName]: true }\r\n : parsed.getTime() < min.getTime()\r\n ? { [customName]: true }\r\n : null;\r\n };\r\n\r\n return {\r\n kind: 'minDate',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n\r\nexport function maxDate(max: Date, errorText: string): Validator<'maxDate'> {\r\n const name: StandardValidatorNameFn<'maxDate'> = (params: { key: string }) =>\r\n `${params.key}-maxDate`;\r\n\r\n const fn = (params: { key: string }) => (control: AbstractControl<string>) => {\r\n const customName: StandardValidatorName<'maxDate'> = `${params.key}-maxDate`;\r\n const parsed = control.value === '' ? null : new Date(control.value);\r\n\r\n return parsed === null\r\n ? { [customName]: true }\r\n : parsed.getTime() > max.getTime()\r\n ? { [customName]: true }\r\n : null;\r\n };\r\n\r\n return {\r\n kind: 'maxDate',\r\n name,\r\n fn,\r\n errorText,\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ngInput"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,250 @@
1
+ import { ValidatorFn } from '@angular/forms';
2
+ import * as _angular_core from '@angular/core';
3
+
4
+ type SingleStepButtonText = string;
5
+ type MultiStepButtonText = Readonly<{
6
+ final: string;
7
+ previous: string;
8
+ next: string;
9
+ }>;
10
+
11
+ type _AuthLetter = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z';
12
+ type _AuthNumber = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
13
+ type IsCamelCase<S extends string> = S extends '' ? false : S extends `${infer First}${infer Rest}` ? Uppercase<First> extends _AuthLetter ? First extends Lowercase<First> ? _IsCamelCase<Rest> : false : false : never;
14
+ type _IsCamelCase<S extends string> = S extends `${infer First}${infer Rest}` ? Uppercase<First> extends _AuthLetter | _AuthNumber ? Rest extends '' ? true : _IsCamelCase<Rest> : false : never;
15
+ type DeepPartial<T> = {
16
+ [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
17
+ };
18
+
19
+ type ValidatorsNames = 'required' | 'check' | 'confirm' | 'minLength' | 'maxLength' | 'min' | 'max' | 'integer' | 'pattern' | 'strongPassword' | 'email' | 'phone' | 'minDate' | 'maxDate';
20
+ type StandardValidatorName<N extends ValidatorsNames> = `${string}-${N}`;
21
+ type StandardValidatorNameFn<N extends ValidatorsNames> = (params: {
22
+ key: string;
23
+ }) => StandardValidatorName<N>;
24
+ type StandardValidatorFn = (params: {
25
+ key: string;
26
+ }) => ValidatorFn;
27
+ type StandardValidator<N extends ValidatorsNames> = Readonly<{
28
+ kind: N;
29
+ name: StandardValidatorNameFn<N>;
30
+ fn: StandardValidatorFn;
31
+ errorText: string;
32
+ }>;
33
+ type ConfirmValidatorName = `${string}-confirm`;
34
+ type ConfirmValidatorNameFn = (params: {
35
+ key: string;
36
+ }) => ConfirmValidatorName;
37
+ type ConfirmValidatorFn = (params: {
38
+ key: string;
39
+ confirmKey: string;
40
+ }) => ValidatorFn;
41
+ type ConfirmValidator = Readonly<{
42
+ kind: 'confirm';
43
+ name: ConfirmValidatorNameFn;
44
+ fn: ConfirmValidatorFn;
45
+ confirmLabel: string;
46
+ errorText: string;
47
+ }>;
48
+ type Validator<N extends ValidatorsNames> = N extends 'confirm' ? ConfirmValidator : StandardValidator<N>;
49
+ type ValidatorsKinds<V extends ValidatorTuple<ValidatorsNames>> = V[number]['kind'];
50
+ type ValidatorTuple<N extends ValidatorsNames> = [Validator<N>, ...Validator<N>[]];
51
+
52
+ declare class Input<T extends InputType, D extends InputDefaultValue<T>, K extends string, V extends ValidatorTuple<ValidatorsNamesOfType<T>>> {
53
+ readonly type: T;
54
+ readonly returnKey: IsCamelCase<K> extends true ? K : never;
55
+ readonly label: string;
56
+ readonly validators?: (HasDuplicateValidators<V> extends true ? never : V) | undefined;
57
+ readonly defaultValue: D;
58
+ constructor(type: T, defaultValue: D, returnKey: IsCamelCase<K> extends true ? K : never, label: string, validators?: (HasDuplicateValidators<V> extends true ? never : V) | undefined);
59
+ }
60
+
61
+ type SelectItem = {
62
+ label: string;
63
+ value: string;
64
+ };
65
+ type SelectItemTuple = [SelectItem, ...SelectItem[]];
66
+ type _SelectIndex<T extends SelectItemTuple> = {
67
+ [I in keyof T]: I extends `${infer K extends number}` ? K : never;
68
+ }[number];
69
+ type HasIndex<T extends SelectItemTuple, I extends number | null> = I extends null ? true : I extends _SelectIndex<T> ? true : false;
70
+
71
+ declare class Select<T extends SelectItemTuple, I extends number | null> {
72
+ readonly items: T;
73
+ readonly currentIndex: HasIndex<T, I> extends true ? I : never;
74
+ current: SelectItem | null;
75
+ constructor(items: T, currentIndex: HasIndex<T, I> extends true ? I : never);
76
+ }
77
+
78
+ declare enum InputType {
79
+ Text = "text",
80
+ Password = "password",
81
+ Email = "email",
82
+ Number = "number",
83
+ Tel = "tel",
84
+ Checkbox = "checkbox",
85
+ Date = "date",
86
+ Select = "select"
87
+ }
88
+ type InputDefaultValue<T extends InputType> = T extends InputType.Text ? string | null : T extends InputType.Password ? string | null : T extends InputType.Email ? string | null : T extends InputType.Number ? number | null : T extends InputType.Tel ? string | null : T extends InputType.Checkbox ? boolean | null : T extends InputType.Date ? Date | null : T extends InputType.Select ? Select<SelectItemTuple, number | null> : never;
89
+ type InputValue<T extends InputType, D extends InputDefaultValue<T>> = T extends InputType.Text ? D extends null ? string | null : string : T extends InputType.Password ? string | null : T extends InputType.Email ? string | null : T extends InputType.Number ? number | null : T extends InputType.Tel ? string | null : T extends InputType.Checkbox ? boolean : T extends InputType.Date ? Date | null : T extends InputType.Select ? Select<SelectItemTuple, number | null> : never;
90
+ type ValidatorsNamesOfType<T extends InputType> = T extends InputType.Text ? 'required' | 'confirm' | 'minLength' | 'maxLength' | 'pattern' : T extends InputType.Password ? 'required' | 'confirm' | 'strongPassword' | 'pattern' : T extends InputType.Email ? 'required' | 'confirm' | 'email' : T extends InputType.Number ? 'required' | 'confirm' | 'min' | 'max' | 'integer' : T extends InputType.Tel ? 'required' | 'confirm' | 'phone' : T extends InputType.Checkbox ? 'check' : T extends InputType.Date ? 'required' | 'confirm' | 'minDate' | 'maxDate' : T extends InputType.Select ? 'required' : never;
91
+ type HasDuplicateValidators<V extends ValidatorTuple<ValidatorsNames>> = V extends [
92
+ infer First,
93
+ ...infer Rest
94
+ ] ? First extends Validator<ValidatorsNames> ? Rest extends ValidatorTuple<ValidatorsNames> ? First['kind'] extends ValidatorsKinds<Rest> ? true : HasDuplicateValidators<Rest> : false : never : never;
95
+ type InputTuple = [
96
+ Input<InputType, InputDefaultValue<InputType>, string, ValidatorTuple<ValidatorsNamesOfType<InputType>>>,
97
+ ...Input<InputType, InputDefaultValue<InputType>, string, ValidatorTuple<ValidatorsNamesOfType<InputType>>>[]
98
+ ];
99
+
100
+ declare class Step<T extends InputTuple> {
101
+ readonly inputs: HasDuplicateReturnKeys$1<T> extends true ? never : T;
102
+ readonly config?: StepConfig | undefined;
103
+ constructor(inputs: HasDuplicateReturnKeys$1<T> extends true ? never : T, config?: StepConfig | undefined);
104
+ }
105
+
106
+ type StepValues<T extends InputTuple> = T extends [infer First, ...infer Rest] ? First extends Input<infer T, infer D, infer K, infer V> ? Rest extends InputTuple ? {
107
+ [K2 in K]: InputValue<T, D>;
108
+ } & StepValues<Rest> : {
109
+ [K2 in K]: InputValue<T, D>;
110
+ } : never : never;
111
+ type ReturnKeys<T extends InputTuple> = T[number]['returnKey'];
112
+ type HasDuplicateReturnKeys$1<T extends InputTuple> = T extends [infer First, ...infer Rest] ? First extends Input<InputType, InputDefaultValue<InputType>, infer Key, ValidatorTuple<ValidatorsNamesOfType<InputType>>> ? Rest extends InputTuple ? Key extends ReturnKeys<Rest> ? true : HasDuplicateReturnKeys$1<Rest> : false : never : never;
113
+ type StepConfig = Readonly<{
114
+ title: string;
115
+ }>;
116
+ type StepTuple = [Step<InputTuple>, ...Step<InputTuple>[]];
117
+ type MultiStepTuple = [Step<InputTuple>, Step<InputTuple>, ...Step<InputTuple>[]];
118
+
119
+ type RedirectUrl = Readonly<{
120
+ url: string;
121
+ urlText: string;
122
+ }>;
123
+ type RedirectText = string;
124
+ type RedirectItem = RedirectText | RedirectUrl;
125
+
126
+ type SingleStepClassNames = DeepPartial<{
127
+ container: string;
128
+ title: string;
129
+ actionText: {
130
+ container: string;
131
+ text: string;
132
+ url: string;
133
+ };
134
+ step: {
135
+ container: string;
136
+ title: string;
137
+ form: string;
138
+ inputContainer: string;
139
+ };
140
+ input: {
141
+ container: string;
142
+ label: string;
143
+ required: string;
144
+ input: string;
145
+ errorContainer: string;
146
+ error: string;
147
+ };
148
+ button: {
149
+ container: string;
150
+ button: string;
151
+ disabled: string;
152
+ };
153
+ footerText: {
154
+ container: string;
155
+ text: string;
156
+ url: string;
157
+ };
158
+ }>;
159
+ type MultiStepClassNames = DeepPartial<{
160
+ container: string;
161
+ title: string;
162
+ actionText: {
163
+ container: string;
164
+ text: string;
165
+ url: string;
166
+ };
167
+ step: {
168
+ container: string;
169
+ title: string;
170
+ form: string;
171
+ inputContainer: string;
172
+ };
173
+ input: {
174
+ container: string;
175
+ label: string;
176
+ required: string;
177
+ input: string;
178
+ errorContainer: string;
179
+ error: string;
180
+ };
181
+ button: {
182
+ container: string;
183
+ button: string;
184
+ disabled: string;
185
+ first: string;
186
+ final: string;
187
+ previous: string;
188
+ next: string;
189
+ };
190
+ footerText: {
191
+ container: string;
192
+ text: string;
193
+ url: string;
194
+ };
195
+ }>;
196
+ type SingleStepConfig = Readonly<{
197
+ title?: string;
198
+ actionText?: RedirectItem[];
199
+ buttonText: SingleStepButtonText;
200
+ footerText?: RedirectItem[];
201
+ classNames?: SingleStepClassNames;
202
+ }>;
203
+ type MultiStepConfig = Readonly<{
204
+ title?: string;
205
+ actionText?: RedirectItem[];
206
+ buttonText: MultiStepButtonText;
207
+ footerText?: RedirectItem[];
208
+ classNames?: MultiStepClassNames;
209
+ }>;
210
+ type FormStepperValues<T extends StepTuple> = T extends [infer First, ...infer Rest] ? First extends Step<infer Inputs> ? Rest extends StepTuple ? StepValues<Inputs> & FormStepperValues<Rest> : StepValues<Inputs> : never : never;
211
+ type _FSReturnKeys<T extends StepTuple> = T extends [infer First, ...infer Rest] ? First extends Step<infer Inputs> ? Rest extends StepTuple ? ReturnKeys<Inputs> | _FSReturnKeys<Rest> : ReturnKeys<Inputs> : never : never;
212
+ type _HasDuplicateReturnKeys<T extends InputTuple, RestSteps extends StepTuple> = T extends [
213
+ infer First,
214
+ ...infer Rest
215
+ ] ? First extends Input<InputType, InputDefaultValue<InputType>, infer Key, ValidatorTuple<ValidatorsNamesOfType<InputType>>> ? Rest extends InputTuple ? Key extends _FSReturnKeys<RestSteps> ? true : _HasDuplicateReturnKeys<Rest, RestSteps> : Key extends _FSReturnKeys<RestSteps> ? true : HasDuplicateReturnKeys<RestSteps> : never : never;
216
+ type HasDuplicateReturnKeys<T extends StepTuple> = T extends [infer First, ...infer Rest] ? First extends Step<infer Inputs> ? Rest extends StepTuple ? _HasDuplicateReturnKeys<Inputs, Rest> : false : never : never;
217
+
218
+ declare class FormStepper<T extends StepTuple> {
219
+ readonly steps: HasDuplicateReturnKeys<T> extends true ? never : T;
220
+ readonly config: T extends MultiStepTuple ? MultiStepConfig : SingleStepConfig;
221
+ readonly values: FormStepperValues<T>;
222
+ constructor(steps: HasDuplicateReturnKeys<T> extends true ? never : T, config: T extends MultiStepTuple ? MultiStepConfig : SingleStepConfig);
223
+ }
224
+
225
+ declare class FormStepperComponent {
226
+ private readonly service;
227
+ formStepper: _angular_core.InputSignal<FormStepper<StepTuple>>;
228
+ completed: _angular_core.OutputEmitterRef<void>;
229
+ constructor();
230
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormStepperComponent, never>;
231
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormStepperComponent, "app-form-stepper", never, { "formStepper": { "alias": "formStepper"; "required": true; "isSignal": true; }; }, { "completed": "completed"; }, never, never, true, never>;
232
+ }
233
+
234
+ declare function required(errorText: string): Validator<'required'>;
235
+ declare function check(errorText: string): Validator<'check'>;
236
+ declare function confirm(confirmLabel: string, errorText: string): Validator<'confirm'>;
237
+ declare function minLength(min: number, errorText: string): Validator<'minLength'>;
238
+ declare function maxLength(max: number, errorText: string): Validator<'maxLength'>;
239
+ declare function min(min: number, errorText: string): Validator<'min'>;
240
+ declare function max(max: number, errorText: string): Validator<'max'>;
241
+ declare function integer(errorText: string): Validator<'integer'>;
242
+ declare function pattern(pattern: RegExp, errorText: string): Validator<'pattern'>;
243
+ declare function strongPassword(errorText: string): Validator<'strongPassword'>;
244
+ declare function email(errorText: string): Validator<'email'>;
245
+ declare function phone(errorText: string): Validator<'phone'>;
246
+ declare function minDate(min: Date, errorText: string): Validator<'minDate'>;
247
+ declare function maxDate(max: Date, errorText: string): Validator<'maxDate'>;
248
+
249
+ export { FormStepper, FormStepperComponent, Input, InputType, Select, Step, check, confirm, email, integer, max, maxDate, maxLength, min, minDate, minLength, pattern, phone, required, strongPassword };
250
+ export type { MultiStepClassNames, SingleStepClassNames };
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "ngx-form-stepper",
3
+ "version": "0.0.1",
4
+ "peerDependencies": {
5
+ "@angular/common": "^20.3.0",
6
+ "@angular/core": "^20.3.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "sideEffects": false,
12
+ "module": "fesm2022/ngx-form-stepper.mjs",
13
+ "typings": "index.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./index.d.ts",
20
+ "default": "./fesm2022/ngx-form-stepper.mjs"
21
+ }
22
+ }
23
+ }