Ruletypescript
Naming Conventions Rule
- Use `ngp` prefix for all selectors (e.g., `ngpButton`, `ngpTooltipTrigger`)
Naming Conventions
Selectors
- Use
ngpprefix for all selectors (e.g.,ngpButton,ngpTooltipTrigger)
Class Names
- Use
Ngpprefix with PascalCase - Do NOT use suffixes like
Directive,Component,Service - Examples:
- ✅
NgpButton - ❌
NgpButtonDirective - ✅
NgpTooltipTrigger - ❌
NgpTooltipTriggerDirective
- ✅
File Names
- Use kebab-case
- Omit
.directivesuffix for directive files - Examples:
- ✅
button.ts - ❌
button.directive.ts - ✅
tooltip-trigger.ts - ❌
tooltip-trigger.directive.ts
- ✅
Input Naming
- All inputs MUST have an alias with
ngpprefix - Alias format:
ngp+ ComponentName (without Ngp prefix) + PropertyName - Examples:
- ✅
alias: 'ngpMeterValue'forNgpMeter.value - ✅
alias: 'ngpTooltipArrowPadding'forNgpTooltipArrow.padding - ❌
paddingwithout alias
- ✅
// ✅ Correct
readonly value = input<number, NumberInput>(0, {
alias: 'ngpMeterValue',
transform: numberAttribute,
});
// ❌ Incorrect - missing alias
readonly value = input<number>();
Input Coercion
- All
numberinputs MUST use coercion withNumberInputandnumberAttribute - All
booleaninputs MUST use coercion withBooleanInputandbooleanAttribute
import { NumberInput, BooleanInput } from '@angular/cdk/coercion';
import { booleanAttribute, numberAttribute } from '@angular/core';
// ✅ Correct number input
readonly padding = input<number | undefined, NumberInput>(undefined, {
alias: 'ngpTooltipArrowPadding',
transform: numberAttribute,
});
// ✅ Correct boolean input
readonly disabled = input<boolean, BooleanInput>(false, {
alias: 'ngpButtonDisabled',
transform: booleanAttribute,
});
// ❌ Incorrect - missing coercion
readonly padding = input<number>();
readonly disabled = input<boolean>(false);