@star-ng/ui 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +162 -2
- package/fesm2022/star-ng-ui-accordion.mjs +376 -0
- package/fesm2022/star-ng-ui-accordion.mjs.map +1 -0
- package/fesm2022/star-ng-ui-autocomplete.mjs +786 -0
- package/fesm2022/star-ng-ui-autocomplete.mjs.map +1 -0
- package/fesm2022/star-ng-ui-avatar.mjs +154 -0
- package/fesm2022/star-ng-ui-avatar.mjs.map +1 -0
- package/fesm2022/star-ng-ui-badge.mjs +153 -0
- package/fesm2022/star-ng-ui-badge.mjs.map +1 -0
- package/fesm2022/star-ng-ui-breadcrumb.mjs +199 -0
- package/fesm2022/star-ng-ui-breadcrumb.mjs.map +1 -0
- package/fesm2022/star-ng-ui-button.mjs +282 -0
- package/fesm2022/star-ng-ui-button.mjs.map +1 -0
- package/fesm2022/star-ng-ui-card.mjs +112 -0
- package/fesm2022/star-ng-ui-card.mjs.map +1 -0
- package/fesm2022/star-ng-ui-chart.mjs +1904 -0
- package/fesm2022/star-ng-ui-chart.mjs.map +1 -0
- package/fesm2022/star-ng-ui-checkbox.mjs +345 -0
- package/fesm2022/star-ng-ui-checkbox.mjs.map +1 -0
- package/fesm2022/star-ng-ui-core.mjs +484 -0
- package/fesm2022/star-ng-ui-core.mjs.map +1 -0
- package/fesm2022/star-ng-ui-data-display.mjs +1870 -0
- package/fesm2022/star-ng-ui-data-display.mjs.map +1 -0
- package/fesm2022/star-ng-ui-date-picker.mjs +2786 -0
- package/fesm2022/star-ng-ui-date-picker.mjs.map +1 -0
- package/fesm2022/star-ng-ui-dialog.mjs +948 -0
- package/fesm2022/star-ng-ui-dialog.mjs.map +1 -0
- package/fesm2022/star-ng-ui-drawer.mjs +158 -0
- package/fesm2022/star-ng-ui-drawer.mjs.map +1 -0
- package/fesm2022/star-ng-ui-editor.mjs +416 -0
- package/fesm2022/star-ng-ui-editor.mjs.map +1 -0
- package/fesm2022/star-ng-ui-field.mjs +378 -0
- package/fesm2022/star-ng-ui-field.mjs.map +1 -0
- package/fesm2022/star-ng-ui-file-upload.mjs +762 -0
- package/fesm2022/star-ng-ui-file-upload.mjs.map +1 -0
- package/fesm2022/star-ng-ui-i18n-de.mjs +179 -0
- package/fesm2022/star-ng-ui-i18n-de.mjs.map +1 -0
- package/fesm2022/star-ng-ui-i18n-es.mjs +179 -0
- package/fesm2022/star-ng-ui-i18n-es.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-group.mjs +188 -0
- package/fesm2022/star-ng-ui-input-group.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-mask.mjs +434 -0
- package/fesm2022/star-ng-ui-input-mask.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-number.mjs +691 -0
- package/fesm2022/star-ng-ui-input-number.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-otp.mjs +343 -0
- package/fesm2022/star-ng-ui-input-otp.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-tags.mjs +616 -0
- package/fesm2022/star-ng-ui-input-tags.mjs.map +1 -0
- package/fesm2022/star-ng-ui-knob.mjs +514 -0
- package/fesm2022/star-ng-ui-knob.mjs.map +1 -0
- package/fesm2022/star-ng-ui-layout.mjs +608 -0
- package/fesm2022/star-ng-ui-layout.mjs.map +1 -0
- package/fesm2022/star-ng-ui-listbox.mjs +886 -0
- package/fesm2022/star-ng-ui-listbox.mjs.map +1 -0
- package/fesm2022/star-ng-ui-media.mjs +833 -0
- package/fesm2022/star-ng-ui-media.mjs.map +1 -0
- package/fesm2022/star-ng-ui-menu.mjs +1840 -0
- package/fesm2022/star-ng-ui-menu.mjs.map +1 -0
- package/fesm2022/star-ng-ui-message.mjs +191 -0
- package/fesm2022/star-ng-ui-message.mjs.map +1 -0
- package/fesm2022/star-ng-ui-paginator.mjs +387 -0
- package/fesm2022/star-ng-ui-paginator.mjs.map +1 -0
- package/fesm2022/star-ng-ui-panel.mjs +324 -0
- package/fesm2022/star-ng-ui-panel.mjs.map +1 -0
- package/fesm2022/star-ng-ui-password.mjs +517 -0
- package/fesm2022/star-ng-ui-password.mjs.map +1 -0
- package/fesm2022/star-ng-ui-popover.mjs +241 -0
- package/fesm2022/star-ng-ui-popover.mjs.map +1 -0
- package/fesm2022/star-ng-ui-progress-bar.mjs +183 -0
- package/fesm2022/star-ng-ui-progress-bar.mjs.map +1 -0
- package/fesm2022/star-ng-ui-radio.mjs +411 -0
- package/fesm2022/star-ng-ui-radio.mjs.map +1 -0
- package/fesm2022/star-ng-ui-rating.mjs +211 -0
- package/fesm2022/star-ng-ui-rating.mjs.map +1 -0
- package/fesm2022/star-ng-ui-select-button.mjs +613 -0
- package/fesm2022/star-ng-ui-select-button.mjs.map +1 -0
- package/fesm2022/star-ng-ui-select.mjs +2547 -0
- package/fesm2022/star-ng-ui-select.mjs.map +1 -0
- package/fesm2022/star-ng-ui-skeleton.mjs +160 -0
- package/fesm2022/star-ng-ui-skeleton.mjs.map +1 -0
- package/fesm2022/star-ng-ui-slider.mjs +552 -0
- package/fesm2022/star-ng-ui-slider.mjs.map +1 -0
- package/fesm2022/star-ng-ui-spinner.mjs +148 -0
- package/fesm2022/star-ng-ui-spinner.mjs.map +1 -0
- package/fesm2022/star-ng-ui-stepper.mjs +360 -0
- package/fesm2022/star-ng-ui-stepper.mjs.map +1 -0
- package/fesm2022/star-ng-ui-table.mjs +3531 -0
- package/fesm2022/star-ng-ui-table.mjs.map +1 -0
- package/fesm2022/star-ng-ui-tabs.mjs +464 -0
- package/fesm2022/star-ng-ui-tabs.mjs.map +1 -0
- package/fesm2022/star-ng-ui-tag.mjs +129 -0
- package/fesm2022/star-ng-ui-tag.mjs.map +1 -0
- package/fesm2022/star-ng-ui-theme-switch.mjs +105 -0
- package/fesm2022/star-ng-ui-theme-switch.mjs.map +1 -0
- package/fesm2022/star-ng-ui-theme.mjs +98 -0
- package/fesm2022/star-ng-ui-theme.mjs.map +1 -0
- package/fesm2022/star-ng-ui-toast.mjs +298 -0
- package/fesm2022/star-ng-ui-toast.mjs.map +1 -0
- package/fesm2022/star-ng-ui-toggle-switch.mjs +316 -0
- package/fesm2022/star-ng-ui-toggle-switch.mjs.map +1 -0
- package/fesm2022/star-ng-ui-tooltip.mjs +297 -0
- package/fesm2022/star-ng-ui-tooltip.mjs.map +1 -0
- package/fesm2022/star-ng-ui-transloco.mjs +40 -0
- package/fesm2022/star-ng-ui-transloco.mjs.map +1 -0
- package/fesm2022/star-ng-ui-tree.mjs +1446 -0
- package/fesm2022/star-ng-ui-tree.mjs.map +1 -0
- package/fesm2022/star-ng-ui-utility.mjs +2134 -0
- package/fesm2022/star-ng-ui-utility.mjs.map +1 -0
- package/fesm2022/star-ng-ui.mjs +51 -0
- package/package.json +285 -3
- package/styles/_base.scss +70 -0
- package/styles/_shared.scss +2 -0
- package/styles/_tokens.scss +190 -0
- package/styles/controls/_accordion.scss +75 -0
- package/styles/controls/_autocomplete.scss +44 -0
- package/styles/controls/_avatar.scss +39 -0
- package/styles/controls/_breadcrumb.scss +45 -0
- package/styles/controls/_button.scss +137 -0
- package/styles/controls/_card.scss +38 -0
- package/styles/controls/_chart.scss +214 -0
- package/styles/controls/_chip.scss +51 -0
- package/styles/controls/_choice.scss +153 -0
- package/styles/controls/_data-display.scss +124 -0
- package/styles/controls/_date-picker.scss +300 -0
- package/styles/controls/_dialog.scss +123 -0
- package/styles/controls/_drawer.scss +118 -0
- package/styles/controls/_editor.scss +74 -0
- package/styles/controls/_field.scss +92 -0
- package/styles/controls/_file-upload.scss +136 -0
- package/styles/controls/_input-group.scss +104 -0
- package/styles/controls/_input-mask.scss +46 -0
- package/styles/controls/_input-number.scss +125 -0
- package/styles/controls/_knob.scss +76 -0
- package/styles/controls/_layout.scss +182 -0
- package/styles/controls/_listbox.scss +38 -0
- package/styles/controls/_media.scss +222 -0
- package/styles/controls/_menu.scss +254 -0
- package/styles/controls/_message.scss +48 -0
- package/styles/controls/_org-chart.scss +128 -0
- package/styles/controls/_paginator.scss +59 -0
- package/styles/controls/_panel.scss +83 -0
- package/styles/controls/_popover.scss +40 -0
- package/styles/controls/_progress-bar.scss +74 -0
- package/styles/controls/_select-button.scss +61 -0
- package/styles/controls/_select.scss +216 -0
- package/styles/controls/_skeleton.scss +43 -0
- package/styles/controls/_slider.scss +163 -0
- package/styles/controls/_spinner.scss +34 -0
- package/styles/controls/_stepper.scss +109 -0
- package/styles/controls/_table.scss +523 -0
- package/styles/controls/_tabs.scss +93 -0
- package/styles/controls/_tag.scss +84 -0
- package/styles/controls/_toast.scss +141 -0
- package/styles/controls/_tooltip.scss +14 -0
- package/styles/controls/_tree.scss +113 -0
- package/styles/controls/_utility.scss +654 -0
- package/styles/star-ng.css +5807 -0
- package/styles/star-ng.min.css +1 -0
- package/styles/star-ng.scss +50 -0
- package/theme/star-theme-first-paint.js +1 -0
- package/types/star-ng-ui-accordion.d.ts +82 -0
- package/types/star-ng-ui-autocomplete.d.ts +171 -0
- package/types/star-ng-ui-avatar.d.ts +43 -0
- package/types/star-ng-ui-badge.d.ts +46 -0
- package/types/star-ng-ui-breadcrumb.d.ts +39 -0
- package/types/star-ng-ui-button.d.ts +79 -0
- package/types/star-ng-ui-card.d.ts +29 -0
- package/types/star-ng-ui-chart.d.ts +337 -0
- package/types/star-ng-ui-checkbox.d.ts +92 -0
- package/types/star-ng-ui-core.d.ts +373 -0
- package/types/star-ng-ui-data-display.d.ts +438 -0
- package/types/star-ng-ui-date-picker.d.ts +701 -0
- package/types/star-ng-ui-dialog.d.ts +254 -0
- package/types/star-ng-ui-drawer.d.ts +29 -0
- package/types/star-ng-ui-editor.d.ts +96 -0
- package/types/star-ng-ui-field.d.ts +146 -0
- package/types/star-ng-ui-file-upload.d.ts +192 -0
- package/types/star-ng-ui-i18n-de.d.ts +7 -0
- package/types/star-ng-ui-i18n-es.d.ts +7 -0
- package/types/star-ng-ui-input-group.d.ts +58 -0
- package/types/star-ng-ui-input-mask.d.ts +126 -0
- package/types/star-ng-ui-input-number.d.ts +193 -0
- package/types/star-ng-ui-input-otp.d.ts +86 -0
- package/types/star-ng-ui-input-tags.d.ts +159 -0
- package/types/star-ng-ui-knob.d.ts +121 -0
- package/types/star-ng-ui-layout.d.ts +154 -0
- package/types/star-ng-ui-listbox.d.ts +170 -0
- package/types/star-ng-ui-media.d.ts +161 -0
- package/types/star-ng-ui-menu.d.ts +332 -0
- package/types/star-ng-ui-message.d.ts +52 -0
- package/types/star-ng-ui-paginator.d.ts +85 -0
- package/types/star-ng-ui-panel.d.ts +65 -0
- package/types/star-ng-ui-password.d.ts +129 -0
- package/types/star-ng-ui-popover.d.ts +57 -0
- package/types/star-ng-ui-progress-bar.d.ts +49 -0
- package/types/star-ng-ui-radio.d.ts +116 -0
- package/types/star-ng-ui-rating.d.ts +52 -0
- package/types/star-ng-ui-select-button.d.ts +169 -0
- package/types/star-ng-ui-select.d.ts +563 -0
- package/types/star-ng-ui-skeleton.d.ts +47 -0
- package/types/star-ng-ui-slider.d.ts +145 -0
- package/types/star-ng-ui-spinner.d.ts +29 -0
- package/types/star-ng-ui-stepper.d.ts +89 -0
- package/types/star-ng-ui-table.d.ts +885 -0
- package/types/star-ng-ui-tabs.d.ts +109 -0
- package/types/star-ng-ui-tag.d.ts +35 -0
- package/types/star-ng-ui-theme-switch.d.ts +36 -0
- package/types/star-ng-ui-theme.d.ts +95 -0
- package/types/star-ng-ui-toast.d.ts +84 -0
- package/types/star-ng-ui-toggle-switch.d.ts +81 -0
- package/types/star-ng-ui-tooltip.d.ts +66 -0
- package/types/star-ng-ui-transloco.d.ts +14 -0
- package/types/star-ng-ui-tree.d.ts +343 -0
- package/types/star-ng-ui-utility.d.ts +533 -0
- package/types/star-ng-ui.d.ts +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"star-ng-ui-input-number.mjs","names":[],"sources":["../../../projects/star-ng/input-number/input-number.ts"],"sourcesContent":["import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { STAR_UI_TEXT } from '@star-ng/ui/core';\nimport { StarField } from '@star-ng/ui/field';\n\n/**\n * Number field (PrimeNG `p-inputnumber`): locale formatting with `Intl.NumberFormat`\n * (decimal, currency, percent, units), min / max clamping, step buttons, Arrow keys and\n * PageUp / PageDown, `role=\"spinbutton\"`. While focused the field shows plain editable digits;\n * on blur it shows the formatted number.\n *\n * `<star-input-number [formField]=\"form.quantity\" [min]=\"0\" [max]=\"500\" unit=\"kilogram\" showButtons />`\n */\n@Component({\n selector: 'star-input-number',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'star-number',\n '[class.star-number--disabled]': 'disabled()',\n '[class.star-number--invalid]': 'showInvalid()',\n '[class.star-number--buttons]': 'showButtons()',\n },\n template: `\n <div class=\"star-number__control\">\n @if (showButtons()) {\n <button\n type=\"button\"\n class=\"star-number__btn\"\n tabindex=\"-1\"\n [attr.aria-label]=\"uiText.decrease\"\n [disabled]=\"!canStep(-1)\"\n (click)=\"stepBy(-1)\"\n >\n <i class=\"ph-bold ph-minus\" aria-hidden=\"true\"></i>\n </button>\n }\n <input\n #input\n type=\"text\"\n class=\"star-number__input\"\n role=\"spinbutton\"\n autocomplete=\"off\"\n [attr.inputmode]=\"maxFractionDigits() === 0 ? 'numeric' : 'decimal'\"\n [id]=\"inputId()\"\n [attr.name]=\"name() || null\"\n [value]=\"text()\"\n [attr.placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuetext]=\"formatted()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-describedby]=\"field?.describedBy() ?? null\"\n [attr.aria-invalid]=\"showInvalid() || null\"\n (focus)=\"onFocus()\"\n (input)=\"text.set(input.value)\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n @if (showButtons()) {\n <button\n type=\"button\"\n class=\"star-number__btn\"\n tabindex=\"-1\"\n [attr.aria-label]=\"uiText.increase\"\n [disabled]=\"!canStep(1)\"\n (click)=\"stepBy(1)\"\n >\n <i class=\"ph-bold ph-plus\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n `,\n})\nexport class StarInputNumber implements FormValueControl<number | null> {\n protected readonly uiText = inject(STAR_UI_TEXT);\n protected readonly field = inject(StarField, { optional: true });\n /** Invalid after touch, or while the parent `star-field` shows an error. */\n protected readonly showInvalid = computed(\n () => (this.invalid() && this.touched()) || !!this.field?.errorText(),\n );\n\n constructor() {\n this.field?.linkControl(this.inputId);\n }\n\n readonly value = model<number | null>(null);\n readonly mode = input<'decimal' | 'currency' | 'percent' | 'unit'>('decimal');\n /** ISO 4217 code for `mode=\"currency\"`, for example `EUR`. */\n readonly currency = input('USD');\n /**\n * ECMA-402 sanctioned unit for `mode=\"unit\"`, for example `kilogram`, `milliliter`, `day`.\n * An unsupported unit (such as `milligram`) is shown as a plain suffix instead of failing.\n */\n readonly unit = input('');\n /** Text before the number, for example `~ `. */\n readonly prefix = input('');\n /** Text after the number, for example ` kg`. */\n readonly suffix = input('');\n readonly locale = input<string | undefined>(undefined);\n /** Default: the Intl default for the mode (0 for decimal, 2 for most currencies). */\n readonly minFractionDigits = input<number | undefined>(undefined);\n /** Default: the Intl default for the mode (3 for decimal, 2 for most currencies). */\n readonly maxFractionDigits = input<number | undefined>(undefined);\n readonly useGrouping = input(true, { transform: booleanAttribute });\n readonly step = input(1);\n readonly min = input<number | undefined>(undefined);\n readonly max = input<number | undefined>(undefined);\n readonly showButtons = input(false, { transform: booleanAttribute });\n readonly placeholder = input<string | null>(null);\n readonly ariaLabel = input<string | null>(null);\n readonly inputId = input(inject(_IdGenerator).getId('star-number-'));\n\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n readonly name = input('');\n readonly touch = output<void>();\n\n private readonly input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n private readonly focused = signal(false);\n\n /** Unit text appended when Intl does not support `unit`. */\n private readonly fallbackUnit = signal('');\n\n private readonly formatter = computed(() => {\n const mode = this.mode();\n const options: Intl.NumberFormatOptions = {\n style: mode,\n currency: mode === 'currency' ? this.currency() : undefined,\n unit: mode === 'unit' ? this.unit() : undefined,\n minimumFractionDigits: this.minFractionDigits(),\n maximumFractionDigits: this.maxFractionDigits(),\n useGrouping: this.useGrouping(),\n };\n try {\n const format = new Intl.NumberFormat(this.locale(), options);\n untracked(() => this.fallbackUnit.set(''));\n return format;\n } catch (error) {\n if (mode !== 'unit') throw error;\n untracked(() => this.fallbackUnit.set(this.unit() ? ' ' + this.unit() : ''));\n return new Intl.NumberFormat(this.locale(), {\n ...options,\n style: 'decimal',\n unit: undefined,\n });\n }\n });\n\n /** Decimal separator of the locale (`.` or `,`). */\n private readonly decimal = computed(\n () =>\n new Intl.NumberFormat(this.locale())\n .formatToParts(1.1)\n .find((part) => part.type === 'decimal')?.value ?? '.',\n );\n\n protected readonly formatted = computed(() => {\n const value = this.value();\n if (value === null) return '';\n const number = this.formatter().format(this.mode() === 'percent' ? value / 100 : value);\n return this.prefix() + number + this.fallbackUnit() + this.suffix();\n });\n\n /** Plain digits while editing, formatted text otherwise. */\n protected readonly text = linkedSignal(() =>\n this.focused() ? this.plain(this.value()) : this.formatted(),\n );\n\n private plain(value: number | null): string {\n if (value === null) return '';\n return String(value).replace('.', this.decimal());\n }\n\n /** Reads typed text with either separator; ignores grouping, currency and unit symbols. */\n parse(text: string): number | null | undefined {\n const decimal = this.decimal();\n const cleaned = text\n .replace(new RegExp(`[^0-9${decimal === ',' ? ',' : '.'}-]`, 'g'), '')\n .replace(decimal, '.');\n if (!cleaned || cleaned === '-') return null;\n const number = Number(cleaned);\n return Number.isFinite(number) ? number : undefined;\n }\n\n private clamp(value: number): number {\n const min = this.min();\n const max = this.max();\n const digits = this.formatter().resolvedOptions().maximumFractionDigits ?? 2;\n // Percent mode stores 42 for 42 %, so keep the same digits as displayed.\n let result = Number(\n value.toFixed(this.mode() === 'percent' ? Math.max(0, digits - 2) : digits),\n );\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return result;\n }\n\n protected onFocus(): void {\n this.focused.set(true);\n }\n\n protected onBlur(): void {\n this.commit();\n this.focused.set(false);\n // The [value] binding may not change if the formatted text equals the last render.\n this.input().nativeElement.value = this.formatted();\n this.touch.emit();\n }\n\n private commit(): void {\n const parsed = this.parse(this.text());\n if (parsed === undefined) return;\n this.value.set(parsed === null ? null : this.clamp(parsed));\n }\n\n protected canStep(direction: 1 | -1): boolean {\n if (this.disabled() || this.readonly()) return false;\n const value = this.value();\n if (value === null) return true;\n const limit = direction === 1 ? this.max() : this.min();\n return limit === undefined || (direction === 1 ? value < limit : value > limit);\n }\n\n stepBy(direction: number): void {\n if (this.disabled() || this.readonly()) return;\n if (this.focused()) this.commit();\n const start = this.value() ?? this.min() ?? 0;\n const next = this.clamp(start + direction * this.step());\n this.value.set(next);\n this.input().nativeElement.value = this.focused() ? this.plain(next) : this.formatted();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const steps: Record<string, number> = { ArrowUp: 1, ArrowDown: -1, PageUp: 10, PageDown: -10 };\n if (event.key in steps) {\n event.preventDefault();\n this.stepBy(steps[event.key]);\n } else if (event.key === 'Home' && this.min() !== undefined) {\n event.preventDefault();\n this.value.set(this.min() ?? null);\n } else if (event.key === 'End' && this.max() !== undefined) {\n event.preventDefault();\n this.value.set(this.max() ?? null);\n } else if (event.key === 'Enter') {\n this.commit();\n }\n }\n\n focus(options?: FocusOptions): void {\n this.input().nativeElement.focus(options);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, booleanAttribute, computed, inject, input, model, output, viewChildren } from "@angular/core";
|
|
3
|
+
import { STAR_UI_TEXT, starInlineKey } from "@star-ng/ui/core";
|
|
4
|
+
var StarInputOtp = class StarInputOtp {
|
|
5
|
+
text = inject(STAR_UI_TEXT);
|
|
6
|
+
value = model("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
|
|
7
|
+
length = input(6, ...ngDevMode ? [{ debugName: "length" }] : /* istanbul ignore next */ []);
|
|
8
|
+
integerOnly = input(false, {
|
|
9
|
+
...ngDevMode ? { debugName: "integerOnly" } : /* istanbul ignore next */ {},
|
|
10
|
+
transform: booleanAttribute
|
|
11
|
+
});
|
|
12
|
+
mask = input(false, {
|
|
13
|
+
...ngDevMode ? { debugName: "mask" } : /* istanbul ignore next */ {},
|
|
14
|
+
transform: booleanAttribute
|
|
15
|
+
});
|
|
16
|
+
ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
17
|
+
disabled = input(false, {
|
|
18
|
+
...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
|
|
19
|
+
transform: booleanAttribute
|
|
20
|
+
});
|
|
21
|
+
readonly = input(false, {
|
|
22
|
+
...ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {},
|
|
23
|
+
transform: booleanAttribute
|
|
24
|
+
});
|
|
25
|
+
invalid = input(false, {
|
|
26
|
+
...ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {},
|
|
27
|
+
transform: booleanAttribute
|
|
28
|
+
});
|
|
29
|
+
touched = input(false, {
|
|
30
|
+
...ngDevMode ? { debugName: "touched" } : /* istanbul ignore next */ {},
|
|
31
|
+
transform: booleanAttribute
|
|
32
|
+
});
|
|
33
|
+
touch = output();
|
|
34
|
+
completed = output();
|
|
35
|
+
boxes = viewChildren("box", ...ngDevMode ? [{ debugName: "boxes" }] : /* istanbul ignore next */ []);
|
|
36
|
+
slots = computed(() => Array.from({ length: this.length() }, (_, i) => i), ...ngDevMode ? [{ debugName: "slots" }] : /* istanbul ignore next */ []);
|
|
37
|
+
chars = computed(() => [...this.value()], ...ngDevMode ? [{ debugName: "chars" }] : /* istanbul ignore next */ []);
|
|
38
|
+
allowed(char) {
|
|
39
|
+
return this.integerOnly() ? /\d/.test(char) : /[\p{L}\d]/u.test(char);
|
|
40
|
+
}
|
|
41
|
+
setChar(index, char) {
|
|
42
|
+
const chars = Array.from({ length: this.length() }, (_, i) => this.chars()[i] ?? "");
|
|
43
|
+
chars[index] = char;
|
|
44
|
+
const end = chars.indexOf("");
|
|
45
|
+
const value = (end < 0 ? chars : chars.slice(0, Math.max(end, index + (char ? 1 : 0)))).join("");
|
|
46
|
+
this.value.set(value);
|
|
47
|
+
if (value.length === this.length() && !value.includes(" ")) this.completed.emit(value);
|
|
48
|
+
}
|
|
49
|
+
focusBox(index) {
|
|
50
|
+
this.boxes()[Math.min(Math.max(index, 0), this.length() - 1)]?.nativeElement.focus();
|
|
51
|
+
}
|
|
52
|
+
onInput(event, index) {
|
|
53
|
+
const box = event.target;
|
|
54
|
+
const char = box.value.slice(-1);
|
|
55
|
+
if (char && !this.allowed(char)) {
|
|
56
|
+
box.value = this.chars()[index] ?? "";
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
this.setChar(index, char);
|
|
60
|
+
if (char) this.focusBox(index + 1);
|
|
61
|
+
}
|
|
62
|
+
onKeydown(event, index) {
|
|
63
|
+
const box = event.target;
|
|
64
|
+
if (event.key === "Backspace" && !box.value) {
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
this.setChar(index - 1, "");
|
|
67
|
+
this.focusBox(index - 1);
|
|
68
|
+
} else if (starInlineKey(event) === "ArrowLeft") {
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
this.focusBox(index - 1);
|
|
71
|
+
} else if (starInlineKey(event) === "ArrowRight") {
|
|
72
|
+
event.preventDefault();
|
|
73
|
+
this.focusBox(index + 1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
onPaste(event, index) {
|
|
77
|
+
const chars = [...(event.clipboardData?.getData("text") ?? "").replace(/\s/g, "")].filter((c) => this.allowed(c));
|
|
78
|
+
if (!chars.length) return;
|
|
79
|
+
event.preventDefault();
|
|
80
|
+
const value = [...[...this.value()].slice(0, index), ...chars].slice(0, this.length()).join("");
|
|
81
|
+
this.value.set(value);
|
|
82
|
+
this.focusBox(value.length);
|
|
83
|
+
if (value.length === this.length()) this.completed.emit(value);
|
|
84
|
+
}
|
|
85
|
+
focus() {
|
|
86
|
+
this.focusBox(Math.min(this.value().length, this.length() - 1));
|
|
87
|
+
}
|
|
88
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
89
|
+
minVersion: "12.0.0",
|
|
90
|
+
version: "22.2.6",
|
|
91
|
+
ngImport: i0,
|
|
92
|
+
type: StarInputOtp,
|
|
93
|
+
deps: [],
|
|
94
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
95
|
+
});
|
|
96
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
97
|
+
minVersion: "17.0.0",
|
|
98
|
+
version: "22.2.6",
|
|
99
|
+
type: StarInputOtp,
|
|
100
|
+
isStandalone: true,
|
|
101
|
+
selector: "star-input-otp",
|
|
102
|
+
inputs: {
|
|
103
|
+
value: {
|
|
104
|
+
classPropertyName: "value",
|
|
105
|
+
publicName: "value",
|
|
106
|
+
isSignal: true,
|
|
107
|
+
isRequired: false,
|
|
108
|
+
transformFunction: null
|
|
109
|
+
},
|
|
110
|
+
length: {
|
|
111
|
+
classPropertyName: "length",
|
|
112
|
+
publicName: "length",
|
|
113
|
+
isSignal: true,
|
|
114
|
+
isRequired: false,
|
|
115
|
+
transformFunction: null
|
|
116
|
+
},
|
|
117
|
+
integerOnly: {
|
|
118
|
+
classPropertyName: "integerOnly",
|
|
119
|
+
publicName: "integerOnly",
|
|
120
|
+
isSignal: true,
|
|
121
|
+
isRequired: false,
|
|
122
|
+
transformFunction: null
|
|
123
|
+
},
|
|
124
|
+
mask: {
|
|
125
|
+
classPropertyName: "mask",
|
|
126
|
+
publicName: "mask",
|
|
127
|
+
isSignal: true,
|
|
128
|
+
isRequired: false,
|
|
129
|
+
transformFunction: null
|
|
130
|
+
},
|
|
131
|
+
ariaLabel: {
|
|
132
|
+
classPropertyName: "ariaLabel",
|
|
133
|
+
publicName: "ariaLabel",
|
|
134
|
+
isSignal: true,
|
|
135
|
+
isRequired: false,
|
|
136
|
+
transformFunction: null
|
|
137
|
+
},
|
|
138
|
+
disabled: {
|
|
139
|
+
classPropertyName: "disabled",
|
|
140
|
+
publicName: "disabled",
|
|
141
|
+
isSignal: true,
|
|
142
|
+
isRequired: false,
|
|
143
|
+
transformFunction: null
|
|
144
|
+
},
|
|
145
|
+
readonly: {
|
|
146
|
+
classPropertyName: "readonly",
|
|
147
|
+
publicName: "readonly",
|
|
148
|
+
isSignal: true,
|
|
149
|
+
isRequired: false,
|
|
150
|
+
transformFunction: null
|
|
151
|
+
},
|
|
152
|
+
invalid: {
|
|
153
|
+
classPropertyName: "invalid",
|
|
154
|
+
publicName: "invalid",
|
|
155
|
+
isSignal: true,
|
|
156
|
+
isRequired: false,
|
|
157
|
+
transformFunction: null
|
|
158
|
+
},
|
|
159
|
+
touched: {
|
|
160
|
+
classPropertyName: "touched",
|
|
161
|
+
publicName: "touched",
|
|
162
|
+
isSignal: true,
|
|
163
|
+
isRequired: false,
|
|
164
|
+
transformFunction: null
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
outputs: {
|
|
168
|
+
value: "valueChange",
|
|
169
|
+
touch: "touch",
|
|
170
|
+
completed: "completed"
|
|
171
|
+
},
|
|
172
|
+
host: {
|
|
173
|
+
attributes: { "role": "group" },
|
|
174
|
+
properties: {
|
|
175
|
+
"attr.aria-label": "ariaLabel() ?? text.otpLabel",
|
|
176
|
+
"class.star-otp--invalid": "invalid() && touched()"
|
|
177
|
+
},
|
|
178
|
+
classAttribute: "star-otp"
|
|
179
|
+
},
|
|
180
|
+
viewQueries: [{
|
|
181
|
+
propertyName: "boxes",
|
|
182
|
+
predicate: ["box"],
|
|
183
|
+
descendants: true,
|
|
184
|
+
isSignal: true
|
|
185
|
+
}],
|
|
186
|
+
ngImport: i0,
|
|
187
|
+
template: `
|
|
188
|
+
@for (slot of slots(); track slot) {
|
|
189
|
+
<input
|
|
190
|
+
#box
|
|
191
|
+
class="star-otp__box"
|
|
192
|
+
maxlength="1"
|
|
193
|
+
[type]="mask() ? 'password' : 'text'"
|
|
194
|
+
[attr.inputmode]="integerOnly() ? 'numeric' : 'text'"
|
|
195
|
+
[attr.autocomplete]="slot === 0 ? 'one-time-code' : 'off'"
|
|
196
|
+
[attr.aria-label]="text.otpCharacter(slot + 1, length())"
|
|
197
|
+
[value]="chars()[slot] ?? ''"
|
|
198
|
+
[disabled]="disabled()"
|
|
199
|
+
[readOnly]="readonly()"
|
|
200
|
+
(input)="onInput($event, slot)"
|
|
201
|
+
(keydown)="onKeydown($event, slot)"
|
|
202
|
+
(paste)="onPaste($event, slot)"
|
|
203
|
+
(focus)="box.select()"
|
|
204
|
+
(blur)="slot === length() - 1 && touch.emit()"
|
|
205
|
+
/>
|
|
206
|
+
}
|
|
207
|
+
`,
|
|
208
|
+
isInline: true,
|
|
209
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
210
|
+
});
|
|
211
|
+
};
|
|
212
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
213
|
+
minVersion: "12.0.0",
|
|
214
|
+
version: "22.2.6",
|
|
215
|
+
ngImport: i0,
|
|
216
|
+
type: StarInputOtp,
|
|
217
|
+
decorators: [{
|
|
218
|
+
type: Component,
|
|
219
|
+
args: [{
|
|
220
|
+
selector: "star-input-otp",
|
|
221
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
222
|
+
host: {
|
|
223
|
+
class: "star-otp",
|
|
224
|
+
role: "group",
|
|
225
|
+
"[attr.aria-label]": "ariaLabel() ?? text.otpLabel",
|
|
226
|
+
"[class.star-otp--invalid]": "invalid() && touched()"
|
|
227
|
+
},
|
|
228
|
+
template: `
|
|
229
|
+
@for (slot of slots(); track slot) {
|
|
230
|
+
<input
|
|
231
|
+
#box
|
|
232
|
+
class="star-otp__box"
|
|
233
|
+
maxlength="1"
|
|
234
|
+
[type]="mask() ? 'password' : 'text'"
|
|
235
|
+
[attr.inputmode]="integerOnly() ? 'numeric' : 'text'"
|
|
236
|
+
[attr.autocomplete]="slot === 0 ? 'one-time-code' : 'off'"
|
|
237
|
+
[attr.aria-label]="text.otpCharacter(slot + 1, length())"
|
|
238
|
+
[value]="chars()[slot] ?? ''"
|
|
239
|
+
[disabled]="disabled()"
|
|
240
|
+
[readOnly]="readonly()"
|
|
241
|
+
(input)="onInput($event, slot)"
|
|
242
|
+
(keydown)="onKeydown($event, slot)"
|
|
243
|
+
(paste)="onPaste($event, slot)"
|
|
244
|
+
(focus)="box.select()"
|
|
245
|
+
(blur)="slot === length() - 1 && touch.emit()"
|
|
246
|
+
/>
|
|
247
|
+
}
|
|
248
|
+
`
|
|
249
|
+
}]
|
|
250
|
+
}],
|
|
251
|
+
propDecorators: {
|
|
252
|
+
value: [{
|
|
253
|
+
type: i0.Input,
|
|
254
|
+
args: [{
|
|
255
|
+
isSignal: true,
|
|
256
|
+
alias: "value",
|
|
257
|
+
required: false
|
|
258
|
+
}]
|
|
259
|
+
}, {
|
|
260
|
+
type: i0.Output,
|
|
261
|
+
args: ["valueChange"]
|
|
262
|
+
}],
|
|
263
|
+
length: [{
|
|
264
|
+
type: i0.Input,
|
|
265
|
+
args: [{
|
|
266
|
+
isSignal: true,
|
|
267
|
+
alias: "length",
|
|
268
|
+
required: false
|
|
269
|
+
}]
|
|
270
|
+
}],
|
|
271
|
+
integerOnly: [{
|
|
272
|
+
type: i0.Input,
|
|
273
|
+
args: [{
|
|
274
|
+
isSignal: true,
|
|
275
|
+
alias: "integerOnly",
|
|
276
|
+
required: false
|
|
277
|
+
}]
|
|
278
|
+
}],
|
|
279
|
+
mask: [{
|
|
280
|
+
type: i0.Input,
|
|
281
|
+
args: [{
|
|
282
|
+
isSignal: true,
|
|
283
|
+
alias: "mask",
|
|
284
|
+
required: false
|
|
285
|
+
}]
|
|
286
|
+
}],
|
|
287
|
+
ariaLabel: [{
|
|
288
|
+
type: i0.Input,
|
|
289
|
+
args: [{
|
|
290
|
+
isSignal: true,
|
|
291
|
+
alias: "ariaLabel",
|
|
292
|
+
required: false
|
|
293
|
+
}]
|
|
294
|
+
}],
|
|
295
|
+
disabled: [{
|
|
296
|
+
type: i0.Input,
|
|
297
|
+
args: [{
|
|
298
|
+
isSignal: true,
|
|
299
|
+
alias: "disabled",
|
|
300
|
+
required: false
|
|
301
|
+
}]
|
|
302
|
+
}],
|
|
303
|
+
readonly: [{
|
|
304
|
+
type: i0.Input,
|
|
305
|
+
args: [{
|
|
306
|
+
isSignal: true,
|
|
307
|
+
alias: "readonly",
|
|
308
|
+
required: false
|
|
309
|
+
}]
|
|
310
|
+
}],
|
|
311
|
+
invalid: [{
|
|
312
|
+
type: i0.Input,
|
|
313
|
+
args: [{
|
|
314
|
+
isSignal: true,
|
|
315
|
+
alias: "invalid",
|
|
316
|
+
required: false
|
|
317
|
+
}]
|
|
318
|
+
}],
|
|
319
|
+
touched: [{
|
|
320
|
+
type: i0.Input,
|
|
321
|
+
args: [{
|
|
322
|
+
isSignal: true,
|
|
323
|
+
alias: "touched",
|
|
324
|
+
required: false
|
|
325
|
+
}]
|
|
326
|
+
}],
|
|
327
|
+
touch: [{
|
|
328
|
+
type: i0.Output,
|
|
329
|
+
args: ["touch"]
|
|
330
|
+
}],
|
|
331
|
+
completed: [{
|
|
332
|
+
type: i0.Output,
|
|
333
|
+
args: ["completed"]
|
|
334
|
+
}],
|
|
335
|
+
boxes: [{
|
|
336
|
+
type: i0.ViewChildren,
|
|
337
|
+
args: ["box", { isSignal: true }]
|
|
338
|
+
}]
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
export { StarInputOtp };
|
|
342
|
+
|
|
343
|
+
//# sourceMappingURL=star-ng-ui-input-otp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"star-ng-ui-input-otp.mjs","names":[],"sources":["../../../projects/star-ng/input-otp/input-otp.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChildren,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { STAR_UI_TEXT, starInlineKey } from '@star-ng/ui/core';\n\n/**\n * One-time code field (PrimeNG `p-inputotp`): one box per character, auto-advance, Backspace\n * goes back, Arrow keys move, pasting a full code fills every box, `autocomplete=\"one-time-code\"`\n * on the first box so phones offer SMS codes.\n *\n * `<star-input-otp [length]=\"6\" integerOnly [formField]=\"form.code\" (completed)=\"verify($event)\" />`\n */\n@Component({\n selector: 'star-input-otp',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'star-otp',\n role: 'group',\n '[attr.aria-label]': 'ariaLabel() ?? text.otpLabel',\n '[class.star-otp--invalid]': 'invalid() && touched()',\n },\n template: `\n @for (slot of slots(); track slot) {\n <input\n #box\n class=\"star-otp__box\"\n maxlength=\"1\"\n [type]=\"mask() ? 'password' : 'text'\"\n [attr.inputmode]=\"integerOnly() ? 'numeric' : 'text'\"\n [attr.autocomplete]=\"slot === 0 ? 'one-time-code' : 'off'\"\n [attr.aria-label]=\"text.otpCharacter(slot + 1, length())\"\n [value]=\"chars()[slot] ?? ''\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"onInput($event, slot)\"\n (keydown)=\"onKeydown($event, slot)\"\n (paste)=\"onPaste($event, slot)\"\n (focus)=\"box.select()\"\n (blur)=\"slot === length() - 1 && touch.emit()\"\n />\n }\n `,\n})\nexport class StarInputOtp implements FormValueControl<string> {\n protected readonly text = inject(STAR_UI_TEXT);\n readonly value = model('');\n readonly length = input(6);\n readonly integerOnly = input(false, { transform: booleanAttribute });\n /** Hides characters like a password. */\n readonly mask = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n readonly completed = output<string>();\n\n private readonly boxes = viewChildren<ElementRef<HTMLInputElement>>('box');\n protected readonly slots = computed(() => Array.from({ length: this.length() }, (_, i) => i));\n protected readonly chars = computed(() => [...this.value()]);\n\n private allowed(char: string): boolean {\n return this.integerOnly() ? /\\d/.test(char) : /[\\p{L}\\d]/u.test(char);\n }\n\n private setChar(index: number, char: string): void {\n const chars = Array.from({ length: this.length() }, (_, i) => this.chars()[i] ?? '');\n chars[index] = char;\n // Keep characters packed to the left; an empty slot ends the value.\n const end = chars.indexOf('');\n const value = (end < 0 ? chars : chars.slice(0, Math.max(end, index + (char ? 1 : 0)))).join(\n '',\n );\n this.value.set(value);\n if (value.length === this.length() && !value.includes(' ')) this.completed.emit(value);\n }\n\n private focusBox(index: number): void {\n this.boxes()[Math.min(Math.max(index, 0), this.length() - 1)]?.nativeElement.focus();\n }\n\n protected onInput(event: Event, index: number): void {\n const box = event.target as HTMLInputElement;\n const char = box.value.slice(-1);\n if (char && !this.allowed(char)) {\n box.value = this.chars()[index] ?? '';\n return;\n }\n this.setChar(index, char);\n if (char) this.focusBox(index + 1);\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const box = event.target as HTMLInputElement;\n if (event.key === 'Backspace' && !box.value) {\n event.preventDefault();\n this.setChar(index - 1, '');\n this.focusBox(index - 1);\n } else if (starInlineKey(event) === 'ArrowLeft') {\n event.preventDefault();\n this.focusBox(index - 1);\n } else if (starInlineKey(event) === 'ArrowRight') {\n event.preventDefault();\n this.focusBox(index + 1);\n }\n }\n\n protected onPaste(event: ClipboardEvent, index: number): void {\n const text = (event.clipboardData?.getData('text') ?? '').replace(/\\s/g, '');\n const chars = [...text].filter((c) => this.allowed(c));\n if (!chars.length) return;\n event.preventDefault();\n const current = [...this.value()].slice(0, index);\n const value = [...current, ...chars].slice(0, this.length()).join('');\n this.value.set(value);\n this.focusBox(value.length);\n if (value.length === this.length()) this.completed.emit(value);\n }\n\n focus(): void {\n this.focusBox(Math.min(this.value().length, this.length() - 1));\n }\n}\n"],"mappings":"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"}
|