@slotted/angular 0.1.0-beta.8 → 0.1.0-beta.9
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/docs/code-block.json +92 -92
- package/docs/code-block.md +69 -69
- package/docs/currency-field.json +7 -0
- package/docs/currency-field.md +1 -0
- package/docs/data-grid.examples.md +1 -1
- package/docs/data-grid.json +21 -4
- package/docs/data-grid.md +1 -1
- package/docs/data-grid.props.md +5 -3
- package/docs/dialog.examples.md +138 -136
- package/docs/dialog.json +8 -8
- package/docs/filter-bar.json +118 -118
- package/docs/filter-bar.md +79 -79
- package/docs/guidelines/async-feedback.md +10 -0
- package/docs/guidelines/composition.md +11 -7
- package/docs/guidelines/index.md +6 -1
- package/docs/guidelines/list-pages.md +30 -0
- package/docs/guidelines/overviews.md +10 -0
- package/docs/markdown.json +79 -79
- package/docs/markdown.md +65 -65
- package/docs/page-header.json +1 -1
- package/docs/skills/compose-screen/SKILL.md +22 -10
- package/docs/skills/review-screen/SKILL.md +6 -0
- package/docs/skills/waiting-states/SKILL.md +4 -1
- package/docs/tags-input.json +28 -2
- package/docs/tags-input.md +4 -1
- package/docs/timeline.json +131 -131
- package/docs/timeline.md +123 -123
- package/fesm2022/slotted-angular-accordion.mjs +4 -2
- package/fesm2022/slotted-angular-accordion.mjs.map +1 -1
- package/fesm2022/slotted-angular-action-bar.mjs +21 -10
- package/fesm2022/slotted-angular-action-bar.mjs.map +1 -1
- package/fesm2022/slotted-angular-action-sheet.mjs +42 -29
- package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -1
- package/fesm2022/slotted-angular-alert.mjs +17 -11
- package/fesm2022/slotted-angular-alert.mjs.map +1 -1
- package/fesm2022/slotted-angular-app-shell.mjs +52 -40
- package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
- package/fesm2022/slotted-angular-aspect-ratio.mjs +4 -2
- package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -1
- package/fesm2022/slotted-angular-attachment.mjs +31 -20
- package/fesm2022/slotted-angular-attachment.mjs.map +1 -1
- package/fesm2022/slotted-angular-avatar-group.mjs +9 -6
- package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-avatar.mjs +9 -6
- package/fesm2022/slotted-angular-avatar.mjs.map +1 -1
- package/fesm2022/slotted-angular-badge.mjs +14 -10
- package/fesm2022/slotted-angular-badge.mjs.map +1 -1
- package/fesm2022/slotted-angular-breadcrumb.mjs +26 -18
- package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -1
- package/fesm2022/slotted-angular-button-group.mjs +7 -4
- package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-button.mjs +53 -25
- package/fesm2022/slotted-angular-button.mjs.map +1 -1
- package/fesm2022/slotted-angular-calendar.mjs +68 -26
- package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
- package/fesm2022/slotted-angular-card.mjs +18 -16
- package/fesm2022/slotted-angular-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-carousel.mjs +22 -11
- package/fesm2022/slotted-angular-carousel.mjs.map +1 -1
- package/fesm2022/slotted-angular-cascader.mjs +158 -64
- package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
- package/fesm2022/slotted-angular-chart.mjs +4 -2
- package/fesm2022/slotted-angular-chart.mjs.map +1 -1
- package/fesm2022/slotted-angular-checkbox-group.mjs +5 -3
- package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-checkbox.mjs +13 -8
- package/fesm2022/slotted-angular-checkbox.mjs.map +1 -1
- package/fesm2022/slotted-angular-code-block.mjs +29 -15
- package/fesm2022/slotted-angular-code-block.mjs.map +1 -1
- package/fesm2022/slotted-angular-collapsible.mjs +20 -15
- package/fesm2022/slotted-angular-collapsible.mjs.map +1 -1
- package/fesm2022/slotted-angular-color-picker.mjs +77 -22
- package/fesm2022/slotted-angular-color-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-column-manager.mjs +68 -31
- package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
- package/fesm2022/slotted-angular-combobox.mjs +77 -31
- package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
- package/fesm2022/slotted-angular-command-palette.mjs +128 -51
- package/fesm2022/slotted-angular-command-palette.mjs.map +1 -1
- package/fesm2022/slotted-angular-container.mjs +6 -4
- package/fesm2022/slotted-angular-container.mjs.map +1 -1
- package/fesm2022/slotted-angular-context-menu.mjs +5 -4
- package/fesm2022/slotted-angular-context-menu.mjs.map +1 -1
- package/fesm2022/slotted-angular-currency-field.mjs +98 -32
- package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-dashboard-grid.mjs +127 -44
- package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-grid.mjs +309 -104
- package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-list.mjs +83 -50
- package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-field.mjs +38 -12
- package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-picker.mjs +19 -9
- package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-range-picker.mjs +41 -16
- package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-field.mjs +46 -14
- package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-picker.mjs +37 -23
- package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-range-picker.mjs +111 -42
- package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-description-list.mjs +33 -19
- package/fesm2022/slotted-angular-description-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-detail-panel.mjs +29 -18
- package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -1
- package/fesm2022/slotted-angular-dialog.mjs +39 -28
- package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
- package/fesm2022/slotted-angular-divider.mjs +7 -5
- package/fesm2022/slotted-angular-divider.mjs.map +1 -1
- package/fesm2022/slotted-angular-drawer.mjs +32 -24
- package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
- package/fesm2022/slotted-angular-entity-picker.mjs +195 -67
- package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-event-calendar.mjs +259 -102
- package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
- package/fesm2022/slotted-angular-field-group.mjs +14 -7
- package/fesm2022/slotted-angular-field-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-field.mjs +35 -15
- package/fesm2022/slotted-angular-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-filter-bar.mjs +104 -43
- package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
- package/fesm2022/slotted-angular-form.mjs +18 -10
- package/fesm2022/slotted-angular-form.mjs.map +1 -1
- package/fesm2022/slotted-angular-fullscreen.mjs +14 -8
- package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -1
- package/fesm2022/slotted-angular-grid.mjs +4 -2
- package/fesm2022/slotted-angular-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-highlight.mjs +5 -3
- package/fesm2022/slotted-angular-highlight.mjs.map +1 -1
- package/fesm2022/slotted-angular-hover-card.mjs +5 -4
- package/fesm2022/slotted-angular-hover-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-icon.mjs +6 -3
- package/fesm2022/slotted-angular-icon.mjs.map +1 -1
- package/fesm2022/slotted-angular-image.mjs +13 -10
- package/fesm2022/slotted-angular-image.mjs.map +1 -1
- package/fesm2022/slotted-angular-import-export-center.mjs +167 -99
- package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
- package/fesm2022/slotted-angular-inline-message.mjs +10 -8
- package/fesm2022/slotted-angular-inline-message.mjs.map +1 -1
- package/fesm2022/slotted-angular-inline.mjs +4 -2
- package/fesm2022/slotted-angular-inline.mjs.map +1 -1
- package/fesm2022/slotted-angular-kbd.mjs +11 -7
- package/fesm2022/slotted-angular-kbd.mjs.map +1 -1
- package/fesm2022/slotted-angular-link.mjs +5 -3
- package/fesm2022/slotted-angular-link.mjs.map +1 -1
- package/fesm2022/slotted-angular-list-item.mjs +21 -18
- package/fesm2022/slotted-angular-list-item.mjs.map +1 -1
- package/fesm2022/slotted-angular-list.mjs +14 -10
- package/fesm2022/slotted-angular-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-listbox.mjs +39 -21
- package/fesm2022/slotted-angular-listbox.mjs.map +1 -1
- package/fesm2022/slotted-angular-loading-overlay.mjs +59 -22
- package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -1
- package/fesm2022/slotted-angular-markdown.mjs +31 -19
- package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
- package/fesm2022/slotted-angular-menu.mjs +41 -27
- package/fesm2022/slotted-angular-menu.mjs.map +1 -1
- package/fesm2022/slotted-angular-menubar.mjs +4 -2
- package/fesm2022/slotted-angular-menubar.mjs.map +1 -1
- package/fesm2022/slotted-angular-message-scroller.mjs +28 -15
- package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -1
- package/fesm2022/slotted-angular-message.mjs +113 -51
- package/fesm2022/slotted-angular-message.mjs.map +1 -1
- package/fesm2022/slotted-angular-multi-select.mjs +133 -57
- package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-navigation-menu.mjs +34 -26
- package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -1
- package/fesm2022/slotted-angular-notification-center.mjs +107 -65
- package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
- package/fesm2022/slotted-angular-number-field.mjs +23 -11
- package/fesm2022/slotted-angular-number-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-otp-input.mjs +13 -8
- package/fesm2022/slotted-angular-otp-input.mjs.map +1 -1
- package/fesm2022/slotted-angular-page-header.mjs +72 -42
- package/fesm2022/slotted-angular-page-header.mjs.map +1 -1
- package/fesm2022/slotted-angular-page.mjs +18 -9
- package/fesm2022/slotted-angular-page.mjs.map +1 -1
- package/fesm2022/slotted-angular-pagination.mjs +35 -22
- package/fesm2022/slotted-angular-pagination.mjs.map +1 -1
- package/fesm2022/slotted-angular-popover.mjs +25 -18
- package/fesm2022/slotted-angular-popover.mjs.map +1 -1
- package/fesm2022/slotted-angular-progress-indicator.mjs +122 -30
- package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -1
- package/fesm2022/slotted-angular-prompt-composer.mjs +24 -18
- package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -1
- package/fesm2022/slotted-angular-prose.mjs +14 -11
- package/fesm2022/slotted-angular-prose.mjs.map +1 -1
- package/fesm2022/slotted-angular-radio-group.mjs +15 -9
- package/fesm2022/slotted-angular-radio-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-rating.mjs +138 -82
- package/fesm2022/slotted-angular-rating.mjs.map +1 -1
- package/fesm2022/slotted-angular-result-state.mjs +16 -12
- package/fesm2022/slotted-angular-result-state.mjs.map +1 -1
- package/fesm2022/slotted-angular-saved-views.mjs +43 -16
- package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
- package/fesm2022/slotted-angular-scroll-area.mjs +9 -5
- package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -1
- package/fesm2022/slotted-angular-section.mjs +34 -15
- package/fesm2022/slotted-angular-section.mjs.map +1 -1
- package/fesm2022/slotted-angular-segmented-control.mjs +15 -9
- package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
- package/fesm2022/slotted-angular-select.mjs +135 -53
- package/fesm2022/slotted-angular-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-side-navigation.mjs +46 -35
- package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -1
- package/fesm2022/slotted-angular-skeleton.mjs +32 -16
- package/fesm2022/slotted-angular-skeleton.mjs.map +1 -1
- package/fesm2022/slotted-angular-slider.mjs +31 -11
- package/fesm2022/slotted-angular-slider.mjs.map +1 -1
- package/fesm2022/slotted-angular-sparkline.mjs +29 -13
- package/fesm2022/slotted-angular-sparkline.mjs.map +1 -1
- package/fesm2022/slotted-angular-split-button.mjs +25 -11
- package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
- package/fesm2022/slotted-angular-splitter.mjs +11 -9
- package/fesm2022/slotted-angular-splitter.mjs.map +1 -1
- package/fesm2022/slotted-angular-stack.mjs +4 -2
- package/fesm2022/slotted-angular-stack.mjs.map +1 -1
- package/fesm2022/slotted-angular-stat-card.mjs +35 -28
- package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-status-indicator.mjs +22 -8
- package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -1
- package/fesm2022/slotted-angular-stepper.mjs +40 -15
- package/fesm2022/slotted-angular-stepper.mjs.map +1 -1
- package/fesm2022/slotted-angular-switch.mjs +15 -10
- package/fesm2022/slotted-angular-switch.mjs.map +1 -1
- package/fesm2022/slotted-angular-table-of-contents.mjs +29 -21
- package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -1
- package/fesm2022/slotted-angular-table.mjs +135 -72
- package/fesm2022/slotted-angular-table.mjs.map +1 -1
- package/fesm2022/slotted-angular-tabs.mjs +31 -14
- package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
- package/fesm2022/slotted-angular-tag.mjs +19 -12
- package/fesm2022/slotted-angular-tag.mjs.map +1 -1
- package/fesm2022/slotted-angular-tags-input.mjs +253 -28
- package/fesm2022/slotted-angular-tags-input.mjs.map +1 -1
- package/fesm2022/slotted-angular-text-field.mjs +49 -15
- package/fesm2022/slotted-angular-text-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-textarea.mjs +5 -3
- package/fesm2022/slotted-angular-textarea.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-field.mjs +46 -12
- package/fesm2022/slotted-angular-time-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-picker.mjs +28 -14
- package/fesm2022/slotted-angular-time-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-range-picker.mjs +109 -40
- package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-timeline.mjs +135 -64
- package/fesm2022/slotted-angular-timeline.mjs.map +1 -1
- package/fesm2022/slotted-angular-toast.mjs +42 -31
- package/fesm2022/slotted-angular-toast.mjs.map +1 -1
- package/fesm2022/slotted-angular-toggle-group.mjs +10 -6
- package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-toggle.mjs +9 -4
- package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
- package/fesm2022/slotted-angular-toolbar.mjs +21 -10
- package/fesm2022/slotted-angular-toolbar.mjs.map +1 -1
- package/fesm2022/slotted-angular-tooltip.mjs +8 -5
- package/fesm2022/slotted-angular-tooltip.mjs.map +1 -1
- package/fesm2022/slotted-angular-top-navigation.mjs +64 -44
- package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -1
- package/fesm2022/slotted-angular-tour.mjs +46 -21
- package/fesm2022/slotted-angular-tour.mjs.map +1 -1
- package/fesm2022/slotted-angular-transfer.mjs +69 -30
- package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
- package/fesm2022/slotted-angular-tree.mjs +74 -26
- package/fesm2022/slotted-angular-tree.mjs.map +1 -1
- package/fesm2022/slotted-angular-typography.mjs +8 -4
- package/fesm2022/slotted-angular-typography.mjs.map +1 -1
- package/fesm2022/slotted-angular-upload.mjs +125 -57
- package/fesm2022/slotted-angular-upload.mjs.map +1 -1
- package/fesm2022/slotted-angular-visually-hidden.mjs +4 -2
- package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -1
- package/fesm2022/slotted-angular-wizard.mjs +163 -65
- package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
- package/package.json +3 -3
- package/types/slotted-angular-accordion.d.ts.map +1 -1
- package/types/slotted-angular-action-bar.d.ts.map +1 -1
- package/types/slotted-angular-action-sheet.d.ts.map +1 -1
- package/types/slotted-angular-alert.d.ts +1 -1
- package/types/slotted-angular-alert.d.ts.map +1 -1
- package/types/slotted-angular-app-shell.d.ts.map +1 -1
- package/types/slotted-angular-aspect-ratio.d.ts.map +1 -1
- package/types/slotted-angular-attachment.d.ts +1 -1
- package/types/slotted-angular-attachment.d.ts.map +1 -1
- package/types/slotted-angular-avatar-group.d.ts.map +1 -1
- package/types/slotted-angular-avatar.d.ts.map +1 -1
- package/types/slotted-angular-badge.d.ts.map +1 -1
- package/types/slotted-angular-breadcrumb.d.ts.map +1 -1
- package/types/slotted-angular-button-group.d.ts.map +1 -1
- package/types/slotted-angular-button.d.ts.map +1 -1
- package/types/slotted-angular-calendar.d.ts.map +1 -1
- package/types/slotted-angular-card.d.ts.map +1 -1
- package/types/slotted-angular-carousel.d.ts.map +1 -1
- package/types/slotted-angular-cascader.d.ts.map +1 -1
- package/types/slotted-angular-chart.d.ts.map +1 -1
- package/types/slotted-angular-checkbox-group.d.ts.map +1 -1
- package/types/slotted-angular-checkbox.d.ts.map +1 -1
- package/types/slotted-angular-code-block.d.ts +1 -1
- package/types/slotted-angular-code-block.d.ts.map +1 -1
- package/types/slotted-angular-collapsible.d.ts +1 -1
- package/types/slotted-angular-collapsible.d.ts.map +1 -1
- package/types/slotted-angular-color-picker.d.ts.map +1 -1
- package/types/slotted-angular-column-manager.d.ts.map +1 -1
- package/types/slotted-angular-combobox.d.ts +1 -1
- package/types/slotted-angular-combobox.d.ts.map +1 -1
- package/types/slotted-angular-command-palette.d.ts.map +1 -1
- package/types/slotted-angular-container.d.ts.map +1 -1
- package/types/slotted-angular-context-menu.d.ts.map +1 -1
- package/types/slotted-angular-currency-field.d.ts +39 -13
- package/types/slotted-angular-currency-field.d.ts.map +1 -1
- package/types/slotted-angular-dashboard-grid.d.ts.map +1 -1
- package/types/slotted-angular-data-grid.d.ts +26 -2
- package/types/slotted-angular-data-grid.d.ts.map +1 -1
- package/types/slotted-angular-data-list.d.ts.map +1 -1
- package/types/slotted-angular-date-field.d.ts.map +1 -1
- package/types/slotted-angular-date-picker.d.ts.map +1 -1
- package/types/slotted-angular-date-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-datetime-field.d.ts.map +1 -1
- package/types/slotted-angular-datetime-picker.d.ts.map +1 -1
- package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-description-list.d.ts.map +1 -1
- package/types/slotted-angular-detail-panel.d.ts.map +1 -1
- package/types/slotted-angular-dialog.d.ts +2 -1
- package/types/slotted-angular-dialog.d.ts.map +1 -1
- package/types/slotted-angular-divider.d.ts.map +1 -1
- package/types/slotted-angular-drawer.d.ts.map +1 -1
- package/types/slotted-angular-entity-picker.d.ts.map +1 -1
- package/types/slotted-angular-event-calendar.d.ts.map +1 -1
- package/types/slotted-angular-field-group.d.ts.map +1 -1
- package/types/slotted-angular-field.d.ts.map +1 -1
- package/types/slotted-angular-filter-bar.d.ts.map +1 -1
- package/types/slotted-angular-form.d.ts.map +1 -1
- package/types/slotted-angular-fullscreen.d.ts.map +1 -1
- package/types/slotted-angular-grid.d.ts.map +1 -1
- package/types/slotted-angular-highlight.d.ts.map +1 -1
- package/types/slotted-angular-hover-card.d.ts.map +1 -1
- package/types/slotted-angular-icon.d.ts +1 -1
- package/types/slotted-angular-icon.d.ts.map +1 -1
- package/types/slotted-angular-image.d.ts.map +1 -1
- package/types/slotted-angular-import-export-center.d.ts.map +1 -1
- package/types/slotted-angular-inline-message.d.ts +1 -1
- package/types/slotted-angular-inline-message.d.ts.map +1 -1
- package/types/slotted-angular-inline.d.ts.map +1 -1
- package/types/slotted-angular-kbd.d.ts.map +1 -1
- package/types/slotted-angular-link.d.ts.map +1 -1
- package/types/slotted-angular-list-item.d.ts.map +1 -1
- package/types/slotted-angular-list.d.ts.map +1 -1
- package/types/slotted-angular-listbox.d.ts.map +1 -1
- package/types/slotted-angular-loading-overlay.d.ts.map +1 -1
- package/types/slotted-angular-markdown.d.ts.map +1 -1
- package/types/slotted-angular-menu.d.ts.map +1 -1
- package/types/slotted-angular-menubar.d.ts.map +1 -1
- package/types/slotted-angular-message-scroller.d.ts.map +1 -1
- package/types/slotted-angular-message.d.ts.map +1 -1
- package/types/slotted-angular-multi-select.d.ts +1 -1
- package/types/slotted-angular-multi-select.d.ts.map +1 -1
- package/types/slotted-angular-navigation-menu.d.ts.map +1 -1
- package/types/slotted-angular-notification-center.d.ts.map +1 -1
- package/types/slotted-angular-number-field.d.ts.map +1 -1
- package/types/slotted-angular-otp-input.d.ts.map +1 -1
- package/types/slotted-angular-page-header.d.ts +1 -1
- package/types/slotted-angular-page-header.d.ts.map +1 -1
- package/types/slotted-angular-page.d.ts.map +1 -1
- package/types/slotted-angular-pagination.d.ts.map +1 -1
- package/types/slotted-angular-popover.d.ts.map +1 -1
- package/types/slotted-angular-progress-indicator.d.ts.map +1 -1
- package/types/slotted-angular-prompt-composer.d.ts.map +1 -1
- package/types/slotted-angular-prose.d.ts.map +1 -1
- package/types/slotted-angular-radio-group.d.ts.map +1 -1
- package/types/slotted-angular-rating.d.ts.map +1 -1
- package/types/slotted-angular-result-state.d.ts.map +1 -1
- package/types/slotted-angular-saved-views.d.ts.map +1 -1
- package/types/slotted-angular-scroll-area.d.ts.map +1 -1
- package/types/slotted-angular-section.d.ts.map +1 -1
- package/types/slotted-angular-segmented-control.d.ts.map +1 -1
- package/types/slotted-angular-select.d.ts +1 -1
- package/types/slotted-angular-select.d.ts.map +1 -1
- package/types/slotted-angular-side-navigation.d.ts.map +1 -1
- package/types/slotted-angular-skeleton.d.ts.map +1 -1
- package/types/slotted-angular-slider.d.ts.map +1 -1
- package/types/slotted-angular-sparkline.d.ts.map +1 -1
- package/types/slotted-angular-split-button.d.ts.map +1 -1
- package/types/slotted-angular-splitter.d.ts.map +1 -1
- package/types/slotted-angular-stack.d.ts.map +1 -1
- package/types/slotted-angular-stat-card.d.ts.map +1 -1
- package/types/slotted-angular-status-indicator.d.ts +1 -1
- package/types/slotted-angular-status-indicator.d.ts.map +1 -1
- package/types/slotted-angular-stepper.d.ts +1 -1
- package/types/slotted-angular-stepper.d.ts.map +1 -1
- package/types/slotted-angular-switch.d.ts.map +1 -1
- package/types/slotted-angular-table-of-contents.d.ts.map +1 -1
- package/types/slotted-angular-table.d.ts.map +1 -1
- package/types/slotted-angular-tabs.d.ts.map +1 -1
- package/types/slotted-angular-tag.d.ts.map +1 -1
- package/types/slotted-angular-tags-input.d.ts +33 -1
- package/types/slotted-angular-tags-input.d.ts.map +1 -1
- package/types/slotted-angular-text-field.d.ts.map +1 -1
- package/types/slotted-angular-textarea.d.ts.map +1 -1
- package/types/slotted-angular-time-field.d.ts.map +1 -1
- package/types/slotted-angular-time-picker.d.ts.map +1 -1
- package/types/slotted-angular-time-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-timeline.d.ts.map +1 -1
- package/types/slotted-angular-toast.d.ts +2 -2
- package/types/slotted-angular-toast.d.ts.map +1 -1
- package/types/slotted-angular-toggle-group.d.ts.map +1 -1
- package/types/slotted-angular-toggle.d.ts.map +1 -1
- package/types/slotted-angular-toolbar.d.ts.map +1 -1
- package/types/slotted-angular-tooltip.d.ts.map +1 -1
- package/types/slotted-angular-top-navigation.d.ts.map +1 -1
- package/types/slotted-angular-tour.d.ts.map +1 -1
- package/types/slotted-angular-transfer.d.ts.map +1 -1
- package/types/slotted-angular-tree.d.ts.map +1 -1
- package/types/slotted-angular-typography.d.ts.map +1 -1
- package/types/slotted-angular-upload.d.ts +2 -2
- package/types/slotted-angular-upload.d.ts.map +1 -1
- package/types/slotted-angular-visually-hidden.d.ts.map +1 -1
- package/types/slotted-angular-wizard.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotted-angular-otp-input.mjs","sources":["../../otp-input/src/otp-input-defaults.ts","../../otp-input/src/otp-input.ts","../../otp-input/src/otp-input-control.ts","../../otp-input/src/slotted-angular-otp-input.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { Signal } from '@angular/core';\nimport type { OtpSelection, OtpType } from '@slotted/core/otp';\n\n/** The type step the control sits at, matching the field around it. */\nexport type OtpInputSize = 'sm' | 'md' | 'lg';\n\n/**\n * How much frame each box shows. `outline` takes the ground it is placed on\n * and `subtle` sinks into the page — the two steps `text-field` draws. There\n * is no `plain`: a code is never a cell.\n */\nexport type OtpInputVariant = 'outline' | 'subtle';\n\nexport type { OtpType as OtpInputType };\n\nexport interface OtpInputDefaults {\n attached: boolean;\n length: number;\n placeholder: string;\n size: OtpInputSize;\n type: OtpType;\n variant: OtpInputVariant;\n}\n\nconst FALLBACK: OtpInputDefaults = {\n attached: false,\n length: 6,\n placeholder: '',\n size: 'md',\n type: 'numeric',\n variant: 'outline',\n};\n\nexport const OTP_INPUT_DEFAULTS = new InjectionToken<OtpInputDefaults>(\n 'slotted otp input defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once what its code fields look like — and how long\n * its codes are — rather than repeating the same inputs on every verification\n * screen. A control that states any of them itself still wins.\n *\n * `size` is the one the field outranks: a control inside a field takes the\n * field's step and this token answers only outside one.\n */\nexport function provideOtpInputDefaults(defaults: Partial<OtpInputDefaults>) {\n return {\n provide: OTP_INPUT_DEFAULTS,\n useFactory: (): OtpInputDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a code field renders as here, before it states anything of its own. */\nexport function injectOtpInputDefaults(): OtpInputDefaults {\n return inject(OTP_INPUT_DEFAULTS);\n}\n\n/**\n * What the frame needs to know about the control inside it, and what the\n * control needs the frame to call.\n *\n * It is an abstract class rather than an import so the two directives can\n * depend on each other without a cycle — the shape `text-field` already has.\n * The control provides itself as this, and the frame queries for it.\n */\nexport abstract class SlOtpInputState {\n /** The characters the element holds, cut to the code. */\n abstract readonly code: Signal<string>;\n /** Where the cursor or the selection is, while the control has focus. */\n abstract readonly selection: Signal<OtpSelection | null>;\n abstract readonly focused: Signal<boolean>;\n abstract readonly resolvedDisabled: Signal<boolean | undefined>;\n abstract readonly resolvedReadOnly: Signal<boolean | undefined>;\n abstract readonly resolvedInvalid: Signal<boolean | undefined>;\n /** Puts the cursor in the box at `index`, clamped to the value. */\n abstract pressAt(index: number): void;\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n input,\n numberAttribute,\n ViewEncapsulation,\n} from '@angular/core';\nimport { currentSlots, spreadPlaceholder } from '@slotted/core/otp';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectOtpInputDefaults, SlOtpInputState } from './otp-input-defaults';\nimport type { OtpInputSize, OtpInputVariant } from './otp-input-defaults';\n\nexport type { OtpInputSize, OtpInputType, OtpInputVariant } from './otp-input-defaults';\n\n/** The character a masked box shows, which is the one a password field shows. */\nconst MASK = '•';\n\ninterface Slot {\n readonly index: number;\n readonly shown: string;\n readonly placeholder: string;\n readonly current: boolean;\n}\n\n/**\n * `groups` has to add up to `length`; a partition that does not is one group.\n * A silent fallback rather than a throw, because a code field that renders\n * nothing on a verification screen locks the reader out of the product.\n */\nfunction partition(length: number, groups: readonly number[] | undefined): number[] {\n if (groups === undefined) return [length];\n const sum = groups.reduce((total, size) => total + size, 0);\n return sum === length && groups.every((size) => size > 0) ? [...groups] : [length];\n}\n\n/**\n * The frame: N painted boxes around one real input.\n *\n * **It is not the control.** The element carrying `data-ui` is the consumer's\n * own box with no role; the `input` inside it holds the value, the identifier\n * and every native attribute, and lies over the boxes, transparent. The boxes\n * are drawn here from what the control reports, and are hidden from assistive\n * technology.\n *\n * **Angular pays one element for that frame, and React pays none.** React can\n * render a wrapper from inside a component; an Angular directive cannot create\n * a box around its own host. `slOtpInputControl` injects this class, so a\n * control written without the frame is a compile-time failure rather than a\n * silent one.\n */\n@Component({\n selector: '[slOtpInput]',\n standalone: true,\n exportAs: 'slOtpInput',\n /**\n * The character is bound as `textContent` rather than interpolated: an\n * interpolation on its own line leaves a whitespace text node either side of\n * it, and a box that holds \" \" is not `:empty`, which is what the caret and\n * the placeholder select on.\n */\n template: `<ng-content />\n @for (group of groups(); track $index; let first = $first) {\n @if (!first) {\n <div data-part=\"separator\" aria-hidden=\"true\"></div>\n }\n <div data-part=\"group\" aria-hidden=\"true\">\n @for (slot of group; track slot.index) {\n <div\n data-part=\"slot\"\n [attr.data-index]=\"slot.index\"\n [attr.data-current]=\"slot.current ? '' : null\"\n [attr.data-placeholder]=\"\n slot.shown === '' && slot.placeholder !== '' ? slot.placeholder : null\n \"\n [textContent]=\"slot.shown\"\n ></div>\n }\n </div>\n }`,\n styleUrl: '../../../styles/src/otp-input/otp-input.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'otp-input',\n 'data-part': 'root',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-attached]': \"resolvedAttached() ? '' : null\",\n '[attr.data-mask]': \"mask() ? '' : null\",\n '[attr.data-complete]': \"complete() ? '' : null\",\n '[attr.data-disabled]': \"control()?.resolvedDisabled() === true ? '' : null\",\n '[attr.data-invalid]': \"control()?.resolvedInvalid() === true ? '' : null\",\n '[attr.data-readonly]': \"control()?.resolvedReadOnly() === true ? '' : null\",\n '(pointerdown)': 'onPointerDown($event)',\n },\n})\nexport class SlOtpInput {\n /** Defaults to the field, then to the token, then to `md`. */\n readonly size = input<OtpInputSize | undefined>(undefined);\n /** Defaults to the token, then to `outline`. */\n readonly variant = input<OtpInputVariant | undefined>(undefined);\n /** Joins the boxes of a group along one seam. Defaults to the token's. */\n readonly attached = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** How many characters the code has. Defaults to the token's, then 6. */\n readonly length = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n /**\n * How the boxes are partitioned: `[3, 3]` draws two groups of three with a\n * separator between them. The sum has to be `length`; a partition that does\n * not add up draws one group.\n */\n readonly groupsInput = input<readonly number[] | undefined>(undefined, { alias: 'groups' });\n /**\n * What an empty box shows: one character repeats over every box, and a\n * string as long as the code distributes. Defaults to the token's.\n */\n readonly placeholder = input<string | undefined>(undefined);\n /**\n * Hides the characters: the control becomes `type=\"password\"`, so the\n * platform treats the value as a secret, and each filled box shows a bullet.\n */\n readonly mask = input(false, { transform: booleanAttribute });\n\n private readonly defaults = injectOtpInputDefaults();\n private readonly field = inject(SlField, { optional: true });\n\n /**\n * The control inside. It provides itself as `SlOtpInputState`, so the frame\n * can paint the value and the cursor without either directive importing the\n * other.\n */\n readonly control = contentChild(SlOtpInputState, { descendants: true });\n\n readonly resolvedSize = computed(\n () => this.size() ?? this.field?.resolvedSize() ?? this.defaults.size,\n );\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedAttached = computed(() => this.attached() ?? this.defaults.attached);\n readonly resolvedLength = computed(() => this.length() ?? this.defaults.length);\n readonly resolvedPlaceholder = computed(() => this.placeholder() ?? this.defaults.placeholder);\n\n readonly complete = computed(() => {\n const control = this.control();\n return control !== undefined && control.code().length === this.resolvedLength();\n });\n\n protected readonly groups = computed<Slot[][]>(() => {\n const length = this.resolvedLength();\n const control = this.control();\n const code = control?.code() ?? '';\n const selection = control?.focused() === true ? control.selection() : null;\n const active = new Set(\n selection === null ? [] : currentSlots({ ...selection, length, valueLength: code.length }),\n );\n const placeholders = spreadPlaceholder(this.resolvedPlaceholder(), length);\n const mask = this.mask();\n\n let index = 0;\n return partition(length, this.groupsInput()).map((count) =>\n Array.from({ length: count }, () => {\n const character = code[index] ?? '';\n const slot: Slot = {\n index,\n shown: character === '' ? '' : mask ? MASK : character,\n placeholder: placeholders[index] ?? '',\n current: active.has(index),\n };\n index += 1;\n return slot;\n }),\n );\n });\n\n /**\n * A press on a box puts the cursor in that box. The input lies over the\n * boxes and would otherwise place its caret by the x of transparent text;\n * the box under the pointer is what the reader meant, so it is found from\n * the point and handed to the control.\n */\n protected onPointerDown(event: PointerEvent) {\n const control = this.control();\n if (control === undefined || control.resolvedDisabled() === true) return;\n if (typeof document.elementsFromPoint !== 'function') return;\n const host = event.currentTarget as HTMLElement;\n const slot = document\n .elementsFromPoint(event.clientX, event.clientY)\n .find(\n (candidate): candidate is HTMLElement =>\n candidate instanceof HTMLElement &&\n candidate.dataset['part'] === 'slot' &&\n candidate.closest(\"[data-ui='otp-input']\") === host,\n );\n if (slot === undefined) return;\n event.preventDefault();\n control.pressAt(Number(slot.dataset['index'] ?? 0));\n }\n}\n","import { normalizeSelection, sanitize } from '@slotted/core/otp';\nimport type { OtpSelection, OtpType } from '@slotted/core/otp';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectOtpInputDefaults, SlOtpInputState } from './otp-input-defaults';\nimport { SlOtpInput } from './otp-input';\n\n/** What an edit lost to the filter, and the event that carried it. */\nexport interface OtpInputRejection {\n readonly text: string;\n readonly source: Event;\n}\n\n/**\n * The control itself: the value, the identifier, and everything the field\n * around it says. `dragstart` is refused: a press on a selected character\n * would otherwise drag that text, with a ghost of the character floating\n * under the pointer, and in a full code a character is selected at every\n * press.\n *\n * **The element owns the characters, and the directive keeps a copy.** The\n * frame paints every character, so unlike `text-field` this mirror is the\n * value and not only its length. `writeValue` from a form and a `[value]`\n * binding both write the element; typing writes it directly, and the copy\n * follows — which is what Angular's own `DefaultValueAccessor` does.\n *\n * **The selection is normalised, not the keys.** Every key is the browser's.\n * After each change the directive makes sure a cursor inside the value has\n * one character selected, so typing replaces it instead of being refused by\n * `maxlength` — the rule `@slotted/core/otp` holds.\n *\n * **Unset means ask the field.** `disabled`, `readOnly` and `invalid` default\n * to `undefined` rather than `false`. A value the consumer wrote as a static\n * attribute is read before the host binding computes, so the binding never\n * writes over it.\n */\n@Directive({\n selector: 'input[slOtpInputControl]',\n standalone: true,\n exportAs: 'slOtpInputControl',\n providers: [\n { provide: SlOtpInputState, useExisting: forwardRef(() => SlOtpInputControl) },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlOtpInputControl), multi: true },\n ],\n host: {\n 'data-part': 'input',\n '[attr.id]': 'controlId()',\n '[attr.type]': 'resolvedType()',\n '[attr.autocomplete]': 'resolvedAutocomplete()',\n '[attr.inputmode]': 'resolvedInputMode()',\n '[attr.maxlength]': 'frame.resolvedLength()',\n '[attr.spellcheck]': 'resolvedSpellcheck()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': 'ariaInvalid()',\n '[attr.aria-required]': 'ariaRequired()',\n '[attr.disabled]': 'disabledAttribute()',\n '[attr.readonly]': 'readonlyAttribute()',\n '(input)': 'onInput($event)',\n '(dragstart)': '$event.preventDefault()',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n },\n})\nexport class SlOtpInputControl implements ControlValueAccessor, OnInit, SlOtpInputState {\n /** Present means the consumer owns the value. */\n readonly value = input<string | undefined>(undefined);\n /** The value the control starts from when nobody else writes one. */\n readonly defaultValue = input<string | undefined>(undefined);\n /** Which characters the code takes. Defaults to the token's, then `numeric`. */\n readonly type = input<OtpType | undefined>(undefined);\n /** Tested against each character; outranks `type` in what is accepted. */\n readonly pattern = input<RegExp | undefined>(undefined);\n /**\n * Run over every edit before the filter: strip a `G-` prefix, uppercase a\n * code the reader typed in lowercase.\n */\n readonly transform = input<((text: string) => string) | undefined>(undefined);\n /** Unstated rather than `false`, so the control defers to the field. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** Unstated rather than `false`. Reaches the element as the native `readonly`. */\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** Unstated rather than `false`. Reaches the element as `aria-invalid`. */\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** Submits the owning form when the code is complete. */\n readonly autoSubmit = input(false, { transform: booleanAttribute });\n /**\n * Asks the platform for the code the moment an SMS arrives, where the\n * WebOTP API exists. The request is abandoned when the form submits or the\n * control is destroyed.\n */\n readonly webOtp = input(false, { transform: booleanAttribute });\n\n /**\n * One output for one transition, carrying the value, the value it replaces,\n * the reason, the originating event and `cancel()`. There is no `[(value)]`,\n * because a two-way binding has one slot and can carry none of those; a form\n * gets the same movement through `ControlValueAccessor`.\n */\n readonly valueChange = output<ChangeRequest<string>>();\n /** The value, the moment it reaches `length` characters. */\n readonly complete = output<string>();\n /** What an edit lost to the filter, before the value moves. */\n readonly rejected = output<OtpInputRejection>();\n\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n /**\n * The frame around the control. Injected without `optional`, so an `input`\n * written without it fails at construction rather than silently losing its\n * boxes. It is public because the host bindings read its length and mask.\n */\n readonly frame = inject(SlOtpInput);\n private readonly field = inject(SlField, { optional: true });\n private readonly defaults = injectOtpInputDefaults();\n\n private readonly writtenId = inject(new HostAttributeToken('id'), { optional: true });\n private readonly writtenType = inject(new HostAttributeToken('type'), { optional: true });\n private readonly writtenAutocomplete = inject(new HostAttributeToken('autocomplete'), {\n optional: true,\n });\n private readonly writtenInputMode = inject(new HostAttributeToken('inputmode'), {\n optional: true,\n });\n private readonly writtenSpellcheck = inject(new HostAttributeToken('spellcheck'), {\n optional: true,\n });\n private readonly writtenDescribedBy = inject(new HostAttributeToken('aria-describedby'), {\n optional: true,\n });\n private readonly writtenInvalid = inject(new HostAttributeToken('aria-invalid'), {\n optional: true,\n });\n private readonly writtenRequired = inject(new HostAttributeToken('aria-required'), {\n optional: true,\n });\n private readonly writtenReadonly = inject(new HostAttributeToken('readonly'), { optional: true });\n\n /** What the element is showing, cut to the code. */\n private readonly mirror = signal('');\n readonly code = this.mirror.asReadonly();\n private readonly ownSelection = signal<OtpSelection | null>(null);\n readonly selection = this.ownSelection.asReadonly();\n private readonly ownFocused = signal(false);\n readonly focused = this.ownFocused.asReadonly();\n private previousSelection: OtpSelection | null = null;\n private reported: string | null = null;\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n private onChangeFn: (value: string) => void = () => undefined;\n private onTouchedFn: () => void = () => undefined;\n\n readonly resolvedType = computed(() =>\n this.frame.mask() ? 'password' : (this.writtenType ?? 'text'),\n );\n /** Which characters the code takes, stated here or by the token. */\n readonly codeType = computed<OtpType>(() => this.type() ?? this.defaults.type);\n readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.field?.resolvedDisabled(),\n );\n readonly resolvedReadOnly = computed(\n () =>\n this.readOnly() ??\n (this.writtenReadonly === null ? undefined : true) ??\n this.field?.resolvedReadOnly(),\n );\n readonly resolvedInvalid = computed(() => this.invalid() ?? this.field?.invalid());\n\n protected readonly controlId = computed(\n () => this.writtenId ?? this.field?.ids().control ?? null,\n );\n protected readonly resolvedAutocomplete = computed(\n () => this.writtenAutocomplete ?? 'one-time-code',\n );\n protected readonly resolvedInputMode = computed(\n () => this.writtenInputMode ?? (this.codeType() === 'numeric' ? 'numeric' : 'text'),\n );\n protected readonly resolvedSpellcheck = computed(() => this.writtenSpellcheck ?? 'false');\n /** Merged after the consumer's own, so a tour step is read before the help. */\n protected readonly describedBy = computed(() => {\n const merged = [this.writtenDescribedBy, this.field?.describedBy()].filter(Boolean);\n return merged.length === 0 ? null : merged.join(' ');\n });\n protected readonly ariaInvalid = computed(\n () => this.writtenInvalid ?? (this.resolvedInvalid() === true ? 'true' : null),\n );\n protected readonly ariaRequired = computed(\n () => this.writtenRequired ?? (this.field?.required() === true ? 'true' : null),\n );\n protected readonly disabledAttribute = computed(() =>\n this.resolvedDisabled() === true ? '' : null,\n );\n protected readonly readonlyAttribute = computed(() =>\n this.resolvedReadOnly() === true ? '' : null,\n );\n\n constructor() {\n /* A consumer's own value writes the element, the way a form's does. */\n effect(() => {\n const next = this.value();\n if (next === undefined) return;\n const clean = this.sanitize(next).value;\n if (clean === this.element.value) return;\n this.element.value = clean;\n this.mirror.set(clean);\n this.reportCompletion();\n });\n\n /**\n * The browser fires `selectionchange` on the document, for every control\n * at once; it is read only while this one holds focus. `capture` because\n * the event does not bubble in every engine.\n */\n const onSelectionChange = () => {\n if (this.ownFocused() && document.activeElement === this.element) this.syncSelection();\n };\n document.addEventListener('selectionchange', onSelectionChange, { capture: true });\n this.destroyRef.onDestroy(() =>\n document.removeEventListener('selectionchange', onSelectionChange, { capture: true }),\n );\n }\n\n /**\n * Angular creates every directive in a template before it binds any input,\n * so the starting value is read here rather than in the constructor.\n */\n ngOnInit() {\n const initial = this.sanitize(this.defaultValue() ?? this.element.value).value;\n if (initial !== this.element.value) this.element.value = initial;\n this.mirror.set(initial);\n this.reportCompletion();\n\n /**\n * A native reset restores the element's own value and tells nothing, so\n * the copy would keep painting the last thing typed.\n */\n const form = this.element.form;\n if (form !== null) {\n const onReset = () => {\n /* The element is restored after the event; the copy follows it. */\n queueMicrotask(() => this.mirror.set(this.sanitize(this.element.value).value));\n };\n form.addEventListener('reset', onReset);\n this.destroyRef.onDestroy(() => form.removeEventListener('reset', onReset));\n }\n\n if (this.webOtp()) this.requestWebOtp();\n }\n\n /** The native element, for `focus()`, `select()` and `setSelectionRange()`. */\n get inputElement(): HTMLInputElement {\n return this.element;\n }\n\n writeValue(value: string | null | undefined) {\n const clean = this.sanitize(value ?? '').value;\n this.element.value = clean;\n this.mirror.set(clean);\n this.reportCompletion();\n }\n\n registerOnChange(fn: (value: string) => void) {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n pressAt(index: number) {\n const at = Math.min(index, this.element.value.length);\n this.element.focus();\n const end = at < this.element.value.length ? at + 1 : at;\n this.previousSelection = null;\n this.element.setSelectionRange(at, end);\n this.syncSelection();\n }\n\n protected onInput(event: Event) {\n const element = this.element;\n const { rejected, value: next } = this.sanitize(element.value);\n if (rejected !== '') this.rejected.emit({ text: rejected, source: event });\n if (next !== element.value) {\n /* What the filter dropped is taken out of the element, and the cursor\n goes where the accepted characters end. */\n const caret = Math.min(element.selectionStart ?? next.length, next.length);\n element.value = next;\n element.setSelectionRange(caret, caret);\n }\n /* After an edit the cursor is inserting: the next selection reads as one\n that came from a caret, not from a selected character. */\n const caret = element.selectionStart ?? next.length;\n this.previousSelection = { start: caret, end: caret };\n\n if (this.request(next, 'keyboard', event)) {\n this.mirror.set(next);\n this.onChangeFn(next);\n this.reportCompletion();\n } else {\n /* Refused: the element goes back to what the copy holds. */\n element.value = this.mirror();\n }\n this.syncSelection();\n }\n\n protected onFocus() {\n this.ownFocused.set(true);\n /* Focus lands after the last character, or on it when the code is full. */\n const at = this.element.value.length;\n this.element.setSelectionRange(Math.min(at, this.frame.resolvedLength() - 1), at);\n this.previousSelection = null;\n this.syncSelection();\n }\n\n protected onBlur() {\n this.ownFocused.set(false);\n this.ownSelection.set(null);\n this.previousSelection = null;\n this.onTouchedFn();\n }\n\n private sanitize(text: string) {\n return sanitize(text, {\n length: this.frame.resolvedLength(),\n pattern: this.pattern(),\n transform: this.transform(),\n type: this.codeType(),\n });\n }\n\n /** Reads the element's selection, corrects it, and paints the current box. */\n private syncSelection() {\n const element = this.element;\n const start = element.selectionStart ?? element.value.length;\n const end = element.selectionEnd ?? start;\n const corrected = normalizeSelection({\n start,\n end,\n valueLength: element.value.length,\n length: this.frame.resolvedLength(),\n previous: this.previousSelection ?? undefined,\n });\n if (corrected !== null) {\n element.setSelectionRange(corrected.start, corrected.end, corrected.direction);\n }\n const final: OtpSelection = corrected ?? { start, end };\n this.previousSelection = final;\n this.ownSelection.set(final);\n }\n\n /**\n * Completion is a fact about the value, reported once per value: a full\n * code edited into another full code reports again, and a code emptied and\n * retyped reports again.\n */\n private reportCompletion() {\n const code = this.mirror();\n if (code.length !== this.frame.resolvedLength()) {\n this.reported = null;\n return;\n }\n if (this.reported === code) return;\n this.reported = code;\n this.complete.emit(code);\n if (this.autoSubmit()) this.element.form?.requestSubmit();\n }\n\n /**\n * The WebOTP API: where it exists, the platform hands over the code the\n * moment the SMS arrives. Abandoned when the form submits on its own or the\n * directive is destroyed, which is the shape MDN's example takes.\n */\n private requestWebOtp() {\n if (typeof window === 'undefined' || !('OTPCredential' in window)) return;\n const controller = new AbortController();\n const form = this.element.form;\n const abort = () => controller.abort();\n form?.addEventListener('submit', abort);\n this.destroyRef.onDestroy(() => {\n form?.removeEventListener('submit', abort);\n controller.abort();\n });\n navigator.credentials\n .get({ otp: { transport: ['sms'] }, signal: controller.signal } as CredentialRequestOptions)\n .then((credential) => {\n const code = (credential as { code?: string } | null)?.code;\n if (code === undefined) return;\n const next = this.sanitize(code).value;\n if (!this.request(next, 'programmatic', credential)) return;\n this.element.value = next;\n this.mirror.set(next);\n this.onChangeFn(next);\n this.reportCompletion();\n })\n .catch(() => undefined);\n }\n\n /** Emits the request and says whether anything may commit. */\n private request(next: string, reason: ChangeReason, source: unknown): boolean {\n if (next === this.mirror()) return false;\n\n let cancelled = false;\n const state = createControllable<string>({\n controlled: undefined,\n initial: this.mirror(),\n onRequest: (request) => {\n this.valueChange.emit(request);\n cancelled = request.cancelled;\n },\n });\n state.request(next, reason, source);\n return !cancelled;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slotted-angular-otp-input.mjs","sources":["../../otp-input/src/otp-input-defaults.ts","../../otp-input/src/otp-input.ts","../../otp-input/src/otp-input-control.ts","../../otp-input/src/slotted-angular-otp-input.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { Signal } from '@angular/core';\nimport type { OtpSelection, OtpType } from '@slotted/core/otp';\n\n/** The type step the control sits at, matching the field around it. */\nexport type OtpInputSize = 'sm' | 'md' | 'lg';\n\n/**\n * How much frame each box shows. `outline` takes the ground it is placed on\n * and `subtle` sinks into the page — the two steps `text-field` draws. There\n * is no `plain`: a code is never a cell.\n */\nexport type OtpInputVariant = 'outline' | 'subtle';\n\nexport type { OtpType as OtpInputType };\n\nexport interface OtpInputDefaults {\n attached: boolean;\n length: number;\n placeholder: string;\n size: OtpInputSize;\n type: OtpType;\n variant: OtpInputVariant;\n}\n\nconst FALLBACK: OtpInputDefaults = {\n attached: false,\n length: 6,\n placeholder: '',\n size: 'md',\n type: 'numeric',\n variant: 'outline',\n};\n\nexport const OTP_INPUT_DEFAULTS = new InjectionToken<OtpInputDefaults>(\n 'slotted otp input defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once what its code fields look like — and how long\n * its codes are — rather than repeating the same inputs on every verification\n * screen. A control that states any of them itself still wins.\n *\n * `size` is the one the field outranks: a control inside a field takes the\n * field's step and this token answers only outside one.\n */\nexport function provideOtpInputDefaults(defaults: Partial<OtpInputDefaults>) {\n return {\n provide: OTP_INPUT_DEFAULTS,\n useFactory: (): OtpInputDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a code field renders as here, before it states anything of its own. */\nexport function injectOtpInputDefaults(): OtpInputDefaults {\n return inject(OTP_INPUT_DEFAULTS);\n}\n\n/**\n * What the frame needs to know about the control inside it, and what the\n * control needs the frame to call.\n *\n * It is an abstract class rather than an import so the two directives can\n * depend on each other without a cycle — the shape `text-field` already has.\n * The control provides itself as this, and the frame queries for it.\n */\nexport abstract class SlOtpInputState {\n /** The characters the element holds, cut to the code. */\n abstract readonly code: Signal<string>;\n /** Where the cursor or the selection is, while the control has focus. */\n abstract readonly selection: Signal<OtpSelection | null>;\n abstract readonly focused: Signal<boolean>;\n abstract readonly resolvedDisabled: Signal<boolean | undefined>;\n abstract readonly resolvedReadOnly: Signal<boolean | undefined>;\n abstract readonly resolvedInvalid: Signal<boolean | undefined>;\n /** Puts the cursor in the box at `index`, clamped to the value. */\n abstract pressAt(index: number): void;\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n input,\n numberAttribute,\n ViewEncapsulation,\n} from '@angular/core';\nimport { currentSlots, spreadPlaceholder } from '@slotted/core/otp';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectOtpInputDefaults, SlOtpInputState } from './otp-input-defaults';\nimport type { OtpInputSize, OtpInputVariant } from './otp-input-defaults';\n\nexport type { OtpInputSize, OtpInputType, OtpInputVariant } from './otp-input-defaults';\n\n/** The character a masked box shows, which is the one a password field shows. */\nconst MASK = '•';\n\ninterface Slot {\n readonly index: number;\n readonly shown: string;\n readonly placeholder: string;\n readonly current: boolean;\n}\n\n/**\n * `groups` has to add up to `length`; a partition that does not is one group.\n * A silent fallback rather than a throw, because a code field that renders\n * nothing on a verification screen locks the reader out of the product.\n */\nfunction partition(length: number, groups: readonly number[] | undefined): number[] {\n if (groups === undefined) return [length];\n const sum = groups.reduce((total, size) => total + size, 0);\n return sum === length && groups.every((size) => size > 0) ? [...groups] : [length];\n}\n\n/**\n * The frame: N painted boxes around one real input.\n *\n * **It is not the control.** The element carrying `data-ui` is the consumer's\n * own box with no role; the `input` inside it holds the value, the identifier\n * and every native attribute, and lies over the boxes, transparent. The boxes\n * are drawn here from what the control reports, and are hidden from assistive\n * technology.\n *\n * **Angular pays one element for that frame, and React pays none.** React can\n * render a wrapper from inside a component; an Angular directive cannot create\n * a box around its own host. `slOtpInputControl` injects this class, so a\n * control written without the frame is a compile-time failure rather than a\n * silent one.\n */\n@Component({\n selector: '[slOtpInput]',\n standalone: true,\n exportAs: 'slOtpInput',\n /**\n * The character is bound as `textContent` rather than interpolated: an\n * interpolation on its own line leaves a whitespace text node either side of\n * it, and a box that holds \" \" is not `:empty`, which is what the caret and\n * the placeholder select on.\n */\n template: `<ng-content />\n @for (group of groups(); track $index; let first = $first) {\n @if (!first) {\n <div data-part=\"separator\" data-part-separator=\"\" aria-hidden=\"true\"></div>\n }\n <div data-part=\"group\" data-part-group=\"\" aria-hidden=\"true\">\n @for (slot of group; track slot.index) {\n <div\n data-part=\"slot\"\n data-part-slot=\"\"\n [attr.data-index]=\"slot.index\"\n [attr.data-current]=\"slot.current ? '' : null\"\n [attr.data-placeholder]=\"\n slot.shown === '' && slot.placeholder !== '' ? slot.placeholder : null\n \"\n [textContent]=\"slot.shown\"\n ></div>\n }\n </div>\n }`,\n styleUrl: '../../../styles/src/otp-input/otp-input.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'otp-input',\n 'data-ui-otp-input': '',\n 'data-part': 'root',\n 'data-part-root': '',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-attached]': \"resolvedAttached() ? '' : null\",\n '[attr.data-mask]': \"mask() ? '' : null\",\n '[attr.data-complete]': \"complete() ? '' : null\",\n '[attr.data-disabled]': \"control()?.resolvedDisabled() === true ? '' : null\",\n '[attr.data-invalid]': \"control()?.resolvedInvalid() === true ? '' : null\",\n '[attr.data-readonly]': \"control()?.resolvedReadOnly() === true ? '' : null\",\n '(pointerdown)': 'onPointerDown($event)',\n },\n})\nexport class SlOtpInput {\n /** Defaults to the field, then to the token, then to `md`. */\n readonly size = input<OtpInputSize | undefined>(undefined);\n /** Defaults to the token, then to `outline`. */\n readonly variant = input<OtpInputVariant | undefined>(undefined);\n /** Joins the boxes of a group along one seam. Defaults to the token's. */\n readonly attached = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** How many characters the code has. Defaults to the token's, then 6. */\n readonly length = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n /**\n * How the boxes are partitioned: `[3, 3]` draws two groups of three with a\n * separator between them. The sum has to be `length`; a partition that does\n * not add up draws one group.\n */\n readonly groupsInput = input<readonly number[] | undefined>(undefined, { alias: 'groups' });\n /**\n * What an empty box shows: one character repeats over every box, and a\n * string as long as the code distributes. Defaults to the token's.\n */\n readonly placeholder = input<string | undefined>(undefined);\n /**\n * Hides the characters: the control becomes `type=\"password\"`, so the\n * platform treats the value as a secret, and each filled box shows a bullet.\n */\n readonly mask = input(false, { transform: booleanAttribute });\n\n private readonly defaults = injectOtpInputDefaults();\n private readonly field = inject(SlField, { optional: true });\n\n /**\n * The control inside. It provides itself as `SlOtpInputState`, so the frame\n * can paint the value and the cursor without either directive importing the\n * other.\n */\n readonly control = contentChild(SlOtpInputState, { descendants: true });\n\n readonly resolvedSize = computed(\n () => this.size() ?? this.field?.resolvedSize() ?? this.defaults.size,\n );\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedAttached = computed(() => this.attached() ?? this.defaults.attached);\n readonly resolvedLength = computed(() => this.length() ?? this.defaults.length);\n readonly resolvedPlaceholder = computed(() => this.placeholder() ?? this.defaults.placeholder);\n\n readonly complete = computed(() => {\n const control = this.control();\n return control !== undefined && control.code().length === this.resolvedLength();\n });\n\n protected readonly groups = computed<Slot[][]>(() => {\n const length = this.resolvedLength();\n const control = this.control();\n const code = control?.code() ?? '';\n const selection = control?.focused() === true ? control.selection() : null;\n const active = new Set(\n selection === null ? [] : currentSlots({ ...selection, length, valueLength: code.length }),\n );\n const placeholders = spreadPlaceholder(this.resolvedPlaceholder(), length);\n const mask = this.mask();\n\n let index = 0;\n return partition(length, this.groupsInput()).map((count) =>\n Array.from({ length: count }, () => {\n const character = code[index] ?? '';\n const slot: Slot = {\n index,\n shown: character === '' ? '' : mask ? MASK : character,\n placeholder: placeholders[index] ?? '',\n current: active.has(index),\n };\n index += 1;\n return slot;\n }),\n );\n });\n\n /**\n * A press on a box puts the cursor in that box. The input lies over the\n * boxes and would otherwise place its caret by the x of transparent text;\n * the box under the pointer is what the reader meant, so it is found from\n * the point and handed to the control.\n */\n protected onPointerDown(event: PointerEvent) {\n const control = this.control();\n if (control === undefined || control.resolvedDisabled() === true) return;\n if (typeof document.elementsFromPoint !== 'function') return;\n const host = event.currentTarget as HTMLElement;\n const slot = document\n .elementsFromPoint(event.clientX, event.clientY)\n .find(\n (candidate): candidate is HTMLElement =>\n candidate instanceof HTMLElement &&\n candidate.dataset['part'] === 'slot' &&\n candidate.closest(\"[data-ui='otp-input']\") === host,\n );\n if (slot === undefined) return;\n event.preventDefault();\n control.pressAt(Number(slot.dataset['index'] ?? 0));\n }\n}\n","import { normalizeSelection, sanitize } from '@slotted/core/otp';\nimport type { OtpSelection, OtpType } from '@slotted/core/otp';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectOtpInputDefaults, SlOtpInputState } from './otp-input-defaults';\nimport { SlOtpInput } from './otp-input';\n\n/** What an edit lost to the filter, and the event that carried it. */\nexport interface OtpInputRejection {\n readonly text: string;\n readonly source: Event;\n}\n\n/**\n * The control itself: the value, the identifier, and everything the field\n * around it says. `dragstart` is refused: a press on a selected character\n * would otherwise drag that text, with a ghost of the character floating\n * under the pointer, and in a full code a character is selected at every\n * press.\n *\n * **The element owns the characters, and the directive keeps a copy.** The\n * frame paints every character, so unlike `text-field` this mirror is the\n * value and not only its length. `writeValue` from a form and a `[value]`\n * binding both write the element; typing writes it directly, and the copy\n * follows — which is what Angular's own `DefaultValueAccessor` does.\n *\n * **The selection is normalised, not the keys.** Every key is the browser's.\n * After each change the directive makes sure a cursor inside the value has\n * one character selected, so typing replaces it instead of being refused by\n * `maxlength` — the rule `@slotted/core/otp` holds.\n *\n * **Unset means ask the field.** `disabled`, `readOnly` and `invalid` default\n * to `undefined` rather than `false`. A value the consumer wrote as a static\n * attribute is read before the host binding computes, so the binding never\n * writes over it.\n */\n@Directive({\n selector: 'input[slOtpInputControl]',\n standalone: true,\n exportAs: 'slOtpInputControl',\n providers: [\n { provide: SlOtpInputState, useExisting: forwardRef(() => SlOtpInputControl) },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlOtpInputControl), multi: true },\n ],\n host: {\n 'data-part': 'input',\n 'data-part-input': '',\n '[attr.id]': 'controlId()',\n '[attr.type]': 'resolvedType()',\n '[attr.autocomplete]': 'resolvedAutocomplete()',\n '[attr.inputmode]': 'resolvedInputMode()',\n '[attr.maxlength]': 'frame.resolvedLength()',\n '[attr.spellcheck]': 'resolvedSpellcheck()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': 'ariaInvalid()',\n '[attr.aria-required]': 'ariaRequired()',\n '[attr.disabled]': 'disabledAttribute()',\n '[attr.readonly]': 'readonlyAttribute()',\n '(input)': 'onInput($event)',\n '(dragstart)': '$event.preventDefault()',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n },\n})\nexport class SlOtpInputControl implements ControlValueAccessor, OnInit, SlOtpInputState {\n /** Present means the consumer owns the value. */\n readonly value = input<string | undefined>(undefined);\n /** The value the control starts from when nobody else writes one. */\n readonly defaultValue = input<string | undefined>(undefined);\n /** Which characters the code takes. Defaults to the token's, then `numeric`. */\n readonly type = input<OtpType | undefined>(undefined);\n /** Tested against each character; outranks `type` in what is accepted. */\n readonly pattern = input<RegExp | undefined>(undefined);\n /**\n * Run over every edit before the filter: strip a `G-` prefix, uppercase a\n * code the reader typed in lowercase.\n */\n readonly transform = input<((text: string) => string) | undefined>(undefined);\n /** Unstated rather than `false`, so the control defers to the field. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** Unstated rather than `false`. Reaches the element as the native `readonly`. */\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** Unstated rather than `false`. Reaches the element as `aria-invalid`. */\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** Submits the owning form when the code is complete. */\n readonly autoSubmit = input(false, { transform: booleanAttribute });\n /**\n * Asks the platform for the code the moment an SMS arrives, where the\n * WebOTP API exists. The request is abandoned when the form submits or the\n * control is destroyed.\n */\n readonly webOtp = input(false, { transform: booleanAttribute });\n\n /**\n * One output for one transition, carrying the value, the value it replaces,\n * the reason, the originating event and `cancel()`. There is no `[(value)]`,\n * because a two-way binding has one slot and can carry none of those; a form\n * gets the same movement through `ControlValueAccessor`.\n */\n readonly valueChange = output<ChangeRequest<string>>();\n /** The value, the moment it reaches `length` characters. */\n readonly complete = output<string>();\n /** What an edit lost to the filter, before the value moves. */\n readonly rejected = output<OtpInputRejection>();\n\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n /**\n * The frame around the control. Injected without `optional`, so an `input`\n * written without it fails at construction rather than silently losing its\n * boxes. It is public because the host bindings read its length and mask.\n */\n readonly frame = inject(SlOtpInput);\n private readonly field = inject(SlField, { optional: true });\n private readonly defaults = injectOtpInputDefaults();\n\n private readonly writtenId = inject(new HostAttributeToken('id'), { optional: true });\n private readonly writtenType = inject(new HostAttributeToken('type'), { optional: true });\n private readonly writtenAutocomplete = inject(new HostAttributeToken('autocomplete'), {\n optional: true,\n });\n private readonly writtenInputMode = inject(new HostAttributeToken('inputmode'), {\n optional: true,\n });\n private readonly writtenSpellcheck = inject(new HostAttributeToken('spellcheck'), {\n optional: true,\n });\n private readonly writtenDescribedBy = inject(new HostAttributeToken('aria-describedby'), {\n optional: true,\n });\n private readonly writtenInvalid = inject(new HostAttributeToken('aria-invalid'), {\n optional: true,\n });\n private readonly writtenRequired = inject(new HostAttributeToken('aria-required'), {\n optional: true,\n });\n private readonly writtenReadonly = inject(new HostAttributeToken('readonly'), { optional: true });\n\n /** What the element is showing, cut to the code. */\n private readonly mirror = signal('');\n readonly code = this.mirror.asReadonly();\n private readonly ownSelection = signal<OtpSelection | null>(null);\n readonly selection = this.ownSelection.asReadonly();\n private readonly ownFocused = signal(false);\n readonly focused = this.ownFocused.asReadonly();\n private previousSelection: OtpSelection | null = null;\n private reported: string | null = null;\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n private onChangeFn: (value: string) => void = () => undefined;\n private onTouchedFn: () => void = () => undefined;\n\n readonly resolvedType = computed(() =>\n this.frame.mask() ? 'password' : (this.writtenType ?? 'text'),\n );\n /** Which characters the code takes, stated here or by the token. */\n readonly codeType = computed<OtpType>(() => this.type() ?? this.defaults.type);\n readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.field?.resolvedDisabled(),\n );\n readonly resolvedReadOnly = computed(\n () =>\n this.readOnly() ??\n (this.writtenReadonly === null ? undefined : true) ??\n this.field?.resolvedReadOnly(),\n );\n readonly resolvedInvalid = computed(() => this.invalid() ?? this.field?.invalid());\n\n protected readonly controlId = computed(\n () => this.writtenId ?? this.field?.ids().control ?? null,\n );\n protected readonly resolvedAutocomplete = computed(\n () => this.writtenAutocomplete ?? 'one-time-code',\n );\n protected readonly resolvedInputMode = computed(\n () => this.writtenInputMode ?? (this.codeType() === 'numeric' ? 'numeric' : 'text'),\n );\n protected readonly resolvedSpellcheck = computed(() => this.writtenSpellcheck ?? 'false');\n /** Merged after the consumer's own, so a tour step is read before the help. */\n protected readonly describedBy = computed(() => {\n const merged = [this.writtenDescribedBy, this.field?.describedBy()].filter(Boolean);\n return merged.length === 0 ? null : merged.join(' ');\n });\n protected readonly ariaInvalid = computed(\n () => this.writtenInvalid ?? (this.resolvedInvalid() === true ? 'true' : null),\n );\n protected readonly ariaRequired = computed(\n () => this.writtenRequired ?? (this.field?.required() === true ? 'true' : null),\n );\n protected readonly disabledAttribute = computed(() =>\n this.resolvedDisabled() === true ? '' : null,\n );\n protected readonly readonlyAttribute = computed(() =>\n this.resolvedReadOnly() === true ? '' : null,\n );\n\n constructor() {\n /* A consumer's own value writes the element, the way a form's does. */\n effect(() => {\n const next = this.value();\n if (next === undefined) return;\n const clean = this.sanitize(next).value;\n if (clean === this.element.value) return;\n this.element.value = clean;\n this.mirror.set(clean);\n this.reportCompletion();\n });\n\n /**\n * The browser fires `selectionchange` on the document, for every control\n * at once; it is read only while this one holds focus. `capture` because\n * the event does not bubble in every engine.\n */\n const onSelectionChange = () => {\n if (this.ownFocused() && document.activeElement === this.element) this.syncSelection();\n };\n document.addEventListener('selectionchange', onSelectionChange, { capture: true });\n this.destroyRef.onDestroy(() =>\n document.removeEventListener('selectionchange', onSelectionChange, { capture: true }),\n );\n }\n\n /**\n * Angular creates every directive in a template before it binds any input,\n * so the starting value is read here rather than in the constructor.\n */\n ngOnInit() {\n const initial = this.sanitize(this.defaultValue() ?? this.element.value).value;\n if (initial !== this.element.value) this.element.value = initial;\n this.mirror.set(initial);\n this.reportCompletion();\n\n /**\n * A native reset restores the element's own value and tells nothing, so\n * the copy would keep painting the last thing typed.\n */\n const form = this.element.form;\n if (form !== null) {\n const onReset = () => {\n /* The element is restored after the event; the copy follows it. */\n queueMicrotask(() => this.mirror.set(this.sanitize(this.element.value).value));\n };\n form.addEventListener('reset', onReset);\n this.destroyRef.onDestroy(() => form.removeEventListener('reset', onReset));\n }\n\n if (this.webOtp()) this.requestWebOtp();\n }\n\n /** The native element, for `focus()`, `select()` and `setSelectionRange()`. */\n get inputElement(): HTMLInputElement {\n return this.element;\n }\n\n writeValue(value: string | null | undefined) {\n const clean = this.sanitize(value ?? '').value;\n this.element.value = clean;\n this.mirror.set(clean);\n this.reportCompletion();\n }\n\n registerOnChange(fn: (value: string) => void) {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n pressAt(index: number) {\n const at = Math.min(index, this.element.value.length);\n this.element.focus();\n const end = at < this.element.value.length ? at + 1 : at;\n this.previousSelection = null;\n this.element.setSelectionRange(at, end);\n this.syncSelection();\n }\n\n protected onInput(event: Event) {\n const element = this.element;\n const { rejected, value: next } = this.sanitize(element.value);\n if (rejected !== '') this.rejected.emit({ text: rejected, source: event });\n if (next !== element.value) {\n /* What the filter dropped is taken out of the element, and the cursor\n goes where the accepted characters end. */\n const caret = Math.min(element.selectionStart ?? next.length, next.length);\n element.value = next;\n element.setSelectionRange(caret, caret);\n }\n /* After an edit the cursor is inserting: the next selection reads as one\n that came from a caret, not from a selected character. */\n const caret = element.selectionStart ?? next.length;\n this.previousSelection = { start: caret, end: caret };\n\n if (this.request(next, 'keyboard', event)) {\n this.mirror.set(next);\n this.onChangeFn(next);\n this.reportCompletion();\n } else {\n /* Refused: the element goes back to what the copy holds. */\n element.value = this.mirror();\n }\n this.syncSelection();\n }\n\n protected onFocus() {\n this.ownFocused.set(true);\n /* Focus lands after the last character, or on it when the code is full. */\n const at = this.element.value.length;\n this.element.setSelectionRange(Math.min(at, this.frame.resolvedLength() - 1), at);\n this.previousSelection = null;\n this.syncSelection();\n }\n\n protected onBlur() {\n this.ownFocused.set(false);\n this.ownSelection.set(null);\n this.previousSelection = null;\n this.onTouchedFn();\n }\n\n private sanitize(text: string) {\n return sanitize(text, {\n length: this.frame.resolvedLength(),\n pattern: this.pattern(),\n transform: this.transform(),\n type: this.codeType(),\n });\n }\n\n /** Reads the element's selection, corrects it, and paints the current box. */\n private syncSelection() {\n const element = this.element;\n const start = element.selectionStart ?? element.value.length;\n const end = element.selectionEnd ?? start;\n const corrected = normalizeSelection({\n start,\n end,\n valueLength: element.value.length,\n length: this.frame.resolvedLength(),\n previous: this.previousSelection ?? undefined,\n });\n if (corrected !== null) {\n element.setSelectionRange(corrected.start, corrected.end, corrected.direction);\n }\n const final: OtpSelection = corrected ?? { start, end };\n this.previousSelection = final;\n this.ownSelection.set(final);\n }\n\n /**\n * Completion is a fact about the value, reported once per value: a full\n * code edited into another full code reports again, and a code emptied and\n * retyped reports again.\n */\n private reportCompletion() {\n const code = this.mirror();\n if (code.length !== this.frame.resolvedLength()) {\n this.reported = null;\n return;\n }\n if (this.reported === code) return;\n this.reported = code;\n this.complete.emit(code);\n if (this.autoSubmit()) this.element.form?.requestSubmit();\n }\n\n /**\n * The WebOTP API: where it exists, the platform hands over the code the\n * moment the SMS arrives. Abandoned when the form submits on its own or the\n * directive is destroyed, which is the shape MDN's example takes.\n */\n private requestWebOtp() {\n if (typeof window === 'undefined' || !('OTPCredential' in window)) return;\n const controller = new AbortController();\n const form = this.element.form;\n const abort = () => controller.abort();\n form?.addEventListener('submit', abort);\n this.destroyRef.onDestroy(() => {\n form?.removeEventListener('submit', abort);\n controller.abort();\n });\n navigator.credentials\n .get({ otp: { transport: ['sms'] }, signal: controller.signal } as CredentialRequestOptions)\n .then((credential) => {\n const code = (credential as { code?: string } | null)?.code;\n if (code === undefined) return;\n const next = this.sanitize(code).value;\n if (!this.request(next, 'programmatic', credential)) return;\n this.element.value = next;\n this.mirror.set(next);\n this.onChangeFn(next);\n this.reportCompletion();\n })\n .catch(() => undefined);\n }\n\n /** Emits the request and says whether anything may commit. */\n private request(next: string, reason: ChangeReason, source: unknown): boolean {\n if (next === this.mirror()) return false;\n\n let cancelled = false;\n const state = createControllable<string>({\n controlled: undefined,\n initial: this.mirror(),\n onRequest: (request) => {\n this.valueChange.emit(request);\n cancelled = request.cancelled;\n },\n });\n state.request(next, reason, source);\n return !cancelled;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|