ngwr 10.2.0 → 11.0.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/README.md +39 -19
- package/anchor/styles/_index.scss +4 -4
- package/back-top/styles/_index.scss +6 -1
- package/blur-text/styles/_index.scss +13 -0
- package/button/styles/_index.scss +11 -6
- package/carousel/styles/_index.scss +13 -2
- package/cascader/styles/_index.scss +2 -2
- package/circular-text/styles/_index.scss +2 -0
- package/collapse/styles/_index.scss +1 -1
- package/color-picker/styles/_index.scss +6 -1
- package/compare/styles/_index.scss +1 -2
- package/context-menu/styles/_index.scss +6 -1
- package/descriptions/styles/_index.scss +2 -2
- package/dialog/styles/_index.scss +38 -0
- package/drawer/styles/_index.scss +20 -1
- package/dropdown/styles/_index.scss +19 -5
- package/empty/styles/_index.scss +10 -0
- package/fesm2022/ngwr-action-sheet.mjs +15 -5
- package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
- package/fesm2022/ngwr-affix.mjs +43 -16
- package/fesm2022/ngwr-affix.mjs.map +1 -1
- package/fesm2022/ngwr-alert.mjs +3 -3
- package/fesm2022/ngwr-anchor.mjs +20 -8
- package/fesm2022/ngwr-anchor.mjs.map +1 -1
- package/fesm2022/ngwr-aurora.mjs +4 -4
- package/fesm2022/ngwr-aurora.mjs.map +1 -1
- package/fesm2022/ngwr-avatar.mjs +33 -9
- package/fesm2022/ngwr-avatar.mjs.map +1 -1
- package/fesm2022/ngwr-back-top.mjs +8 -4
- package/fesm2022/ngwr-back-top.mjs.map +1 -1
- package/fesm2022/ngwr-badge.mjs +6 -6
- package/fesm2022/ngwr-badge.mjs.map +1 -1
- package/fesm2022/ngwr-bar-chart.mjs +32 -11
- package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
- package/fesm2022/ngwr-blur-text.mjs +4 -4
- package/fesm2022/ngwr-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow.mjs +4 -4
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +9 -8
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +11 -6
- package/fesm2022/ngwr-burger.mjs.map +1 -1
- package/fesm2022/ngwr-button-testing.mjs +96 -0
- package/fesm2022/ngwr-button-testing.mjs.map +1 -0
- package/fesm2022/ngwr-button.mjs +89 -24
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-heatmap.mjs +42 -10
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +108 -9
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +10 -10
- package/fesm2022/ngwr-card.mjs.map +1 -1
- package/fesm2022/ngwr-carousel-testing.mjs +377 -0
- package/fesm2022/ngwr-carousel-testing.mjs.map +1 -0
- package/fesm2022/ngwr-carousel.mjs +72 -18
- package/fesm2022/ngwr-carousel.mjs.map +1 -1
- package/fesm2022/ngwr-cascader-testing.mjs +534 -0
- package/fesm2022/ngwr-cascader-testing.mjs.map +1 -0
- package/fesm2022/ngwr-cascader.mjs +4 -4
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox-testing.mjs +90 -0
- package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -0
- package/fesm2022/ngwr-checkbox.mjs +15 -9
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text.mjs +4 -4
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +4 -4
- package/fesm2022/ngwr-click-spark.mjs.map +1 -1
- package/fesm2022/ngwr-clipboard.mjs +18 -4
- package/fesm2022/ngwr-clipboard.mjs.map +1 -1
- package/fesm2022/ngwr-collapse-testing.mjs +368 -0
- package/fesm2022/ngwr-collapse-testing.mjs.map +1 -0
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-color-picker.mjs +139 -19
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette-testing.mjs +589 -0
- package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -0
- package/fesm2022/ngwr-command-palette.mjs +60 -10
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +105 -15
- package/fesm2022/ngwr-compare.mjs.map +1 -1
- package/fesm2022/ngwr-confetti.mjs +3 -3
- package/fesm2022/ngwr-config.mjs +106 -0
- package/fesm2022/ngwr-config.mjs.map +1 -0
- package/fesm2022/ngwr-context-menu-testing.mjs +631 -0
- package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -0
- package/fesm2022/ngwr-context-menu.mjs +104 -18
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +8 -4
- package/fesm2022/ngwr-cookie.mjs.map +1 -1
- package/fesm2022/ngwr-counter.mjs +17 -9
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapter-fns.mjs +3 -3
- package/fesm2022/ngwr-date-adapter-luxon.mjs +55 -7
- package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapter.mjs +57 -11
- package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker-testing.mjs +766 -0
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -0
- package/fesm2022/ngwr-date-picker.mjs +409 -57
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-decrypt-text.mjs +30 -12
- package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-dialog-testing.mjs +89 -0
- package/fesm2022/ngwr-dialog-testing.mjs.map +1 -0
- package/fesm2022/ngwr-dialog.mjs +33 -17
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +48 -24
- package/fesm2022/ngwr-directives.mjs.map +1 -1
- package/fesm2022/ngwr-divider.mjs +3 -3
- package/fesm2022/ngwr-donut-chart.mjs +24 -7
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +7 -7
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer-testing.mjs +250 -0
- package/fesm2022/ngwr-drawer-testing.mjs.map +1 -0
- package/fesm2022/ngwr-drawer.mjs +37 -19
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown-testing.mjs +291 -0
- package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -0
- package/fesm2022/ngwr-dropdown.mjs +19 -11
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +26 -9
- package/fesm2022/ngwr-empty.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar.mjs +62 -15
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text.mjs +4 -4
- package/fesm2022/ngwr-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload-testing.mjs +332 -0
- package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -0
- package/fesm2022/ngwr-file-upload.mjs +3 -3
- package/fesm2022/ngwr-form-testing.mjs +451 -0
- package/fesm2022/ngwr-form-testing.mjs.map +1 -0
- package/fesm2022/ngwr-form.mjs +28 -12
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +11 -4
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gauge.mjs +21 -7
- package/fesm2022/ngwr-gauge.mjs.map +1 -1
- package/fesm2022/ngwr-glitch-text.mjs +4 -4
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text.mjs +4 -4
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-hotkey.mjs +31 -10
- package/fesm2022/ngwr-hotkey.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +61 -0
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +59 -0
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +9 -9
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper.mjs +26 -3
- package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
- package/fesm2022/ngwr-input-number-testing.mjs +306 -0
- package/fesm2022/ngwr-input-number-testing.mjs.map +1 -0
- package/fesm2022/ngwr-input-number.mjs +37 -5
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp-testing.mjs +419 -0
- package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -0
- package/fesm2022/ngwr-input-otp.mjs +39 -8
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input-testing.mjs +102 -0
- package/fesm2022/ngwr-input-testing.mjs.map +1 -0
- package/fesm2022/ngwr-input.mjs +62 -25
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob.mjs +46 -10
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-layout.mjs +36 -20
- package/fesm2022/ngwr-layout.mjs.map +1 -1
- package/fesm2022/ngwr-lightbox.mjs +35 -8
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart.mjs +19 -6
- package/fesm2022/ngwr-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +14 -9
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +71 -31
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown-testing.mjs +516 -0
- package/fesm2022/ngwr-markdown-testing.mjs.map +1 -0
- package/fesm2022/ngwr-markdown.mjs +1492 -0
- package/fesm2022/ngwr-markdown.mjs.map +1 -0
- package/fesm2022/ngwr-marquee.mjs +19 -8
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-mention-testing.mjs +513 -0
- package/fesm2022/ngwr-mention-testing.mjs.map +1 -0
- package/fesm2022/ngwr-mention.mjs +16 -7
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +28 -13
- package/fesm2022/ngwr-meta.mjs.map +1 -1
- package/fesm2022/ngwr-meter-group.mjs +22 -8
- package/fesm2022/ngwr-meter-group.mjs.map +1 -1
- package/fesm2022/ngwr-overlay.mjs +57 -8
- package/fesm2022/ngwr-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination-testing.mjs +389 -0
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -0
- package/fesm2022/ngwr-pagination.mjs +27 -11
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +21 -21
- package/fesm2022/ngwr-platform.mjs +9 -9
- package/fesm2022/ngwr-popconfirm-testing.mjs +309 -0
- package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -0
- package/fesm2022/ngwr-popconfirm.mjs +99 -21
- package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
- package/fesm2022/ngwr-popover-testing.mjs +316 -0
- package/fesm2022/ngwr-popover-testing.mjs.map +1 -0
- package/fesm2022/ngwr-popover.mjs +48 -10
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-progress.mjs +3 -3
- package/fesm2022/ngwr-pull-to-refresh.mjs +19 -4
- package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
- package/fesm2022/ngwr-qr.mjs +15 -5
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-radio-testing.mjs +392 -0
- package/fesm2022/ngwr-radio-testing.mjs.map +1 -0
- package/fesm2022/ngwr-radio.mjs +16 -9
- package/fesm2022/ngwr-radio.mjs.map +1 -1
- package/fesm2022/ngwr-rating-testing.mjs +384 -0
- package/fesm2022/ngwr-rating-testing.mjs.map +1 -0
- package/fesm2022/ngwr-rating.mjs +40 -5
- package/fesm2022/ngwr-rating.mjs.map +1 -1
- package/fesm2022/ngwr-result.mjs +12 -12
- package/fesm2022/ngwr-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented-testing.mjs +512 -0
- package/fesm2022/ngwr-segmented-testing.mjs.map +1 -0
- package/fesm2022/ngwr-segmented.mjs +3 -3
- package/fesm2022/ngwr-select-testing.mjs +268 -0
- package/fesm2022/ngwr-select-testing.mjs.map +1 -0
- package/fesm2022/ngwr-select.mjs +96 -25
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +7 -7
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +67 -14
- package/fesm2022/ngwr-sidebar.mjs.map +1 -1
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider-testing.mjs +478 -0
- package/fesm2022/ngwr-slider-testing.mjs.map +1 -0
- package/fesm2022/ngwr-slider.mjs +59 -15
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline.mjs +28 -8
- package/fesm2022/ngwr-sparkline.mjs.map +1 -1
- package/fesm2022/ngwr-speed-dial.mjs +39 -6
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
- package/fesm2022/ngwr-spinner.mjs +14 -5
- package/fesm2022/ngwr-spinner.mjs.map +1 -1
- package/fesm2022/ngwr-splash-cursor.mjs +4 -4
- package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
- package/fesm2022/ngwr-split-text.mjs +4 -4
- package/fesm2022/ngwr-split-text.mjs.map +1 -1
- package/fesm2022/ngwr-splitter.mjs +72 -11
- package/fesm2022/ngwr-splitter.mjs.map +1 -1
- package/fesm2022/ngwr-spotlight-card.mjs +7 -7
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-squircle.mjs +6 -6
- package/fesm2022/ngwr-star-border.mjs +4 -4
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +33 -16
- package/fesm2022/ngwr-statistic.mjs.map +1 -1
- package/fesm2022/ngwr-stepper-testing.mjs +477 -0
- package/fesm2022/ngwr-stepper-testing.mjs.map +1 -0
- package/fesm2022/ngwr-stepper.mjs +6 -6
- package/fesm2022/ngwr-storage.mjs +27 -17
- package/fesm2022/ngwr-storage.mjs.map +1 -1
- package/fesm2022/ngwr-switch-testing.mjs +77 -0
- package/fesm2022/ngwr-switch-testing.mjs.map +1 -0
- package/fesm2022/ngwr-switch.mjs +12 -6
- package/fesm2022/ngwr-switch.mjs.map +1 -1
- package/fesm2022/ngwr-table-testing.mjs +580 -0
- package/fesm2022/ngwr-table-testing.mjs.map +1 -0
- package/fesm2022/ngwr-table.mjs +105 -44
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-testing.mjs +617 -0
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -0
- package/fesm2022/ngwr-tabs.mjs +44 -12
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea-testing.mjs +238 -0
- package/fesm2022/ngwr-textarea-testing.mjs.map +1 -0
- package/fesm2022/ngwr-textarea.mjs +35 -7
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-theme.mjs +3 -3
- package/fesm2022/ngwr-tilt-card.mjs +7 -7
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-toast-testing.mjs +101 -0
- package/fesm2022/ngwr-toast-testing.mjs.map +1 -0
- package/fesm2022/ngwr-toast.mjs +55 -21
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour.mjs +67 -15
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer-testing.mjs +538 -0
- package/fesm2022/ngwr-transfer-testing.mjs.map +1 -0
- package/fesm2022/ngwr-transfer.mjs +47 -16
- package/fesm2022/ngwr-transfer.mjs.map +1 -1
- package/fesm2022/ngwr-tree-testing.mjs +734 -0
- package/fesm2022/ngwr-tree-testing.mjs.map +1 -0
- package/fesm2022/ngwr-tree.mjs +75 -9
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +7 -5
- package/fesm2022/ngwr-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +33 -7
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves.mjs +5 -5
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +88 -18
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/gauge/styles/_index.scss +1 -1
- package/glitch-text/styles/_index.scss +4 -0
- package/i18n/en.json +56 -0
- package/i18n/ru.json +56 -0
- package/image-cropper/styles/_index.scss +13 -1
- package/input/styles/_index.scss +2 -2
- package/input-number/styles/_index.scss +7 -2
- package/knob/styles/_index.scss +8 -1
- package/layout/styles/_index.scss +3 -3
- package/lightbox/styles/_index.scss +10 -2
- package/line-chart/styles/_index.scss +6 -0
- package/llms-full.txt +151 -4
- package/llms.txt +57 -8
- package/loading-bar/styles/_index.scss +1 -2
- package/markdown/styles/_index.scss +296 -0
- package/marquee/styles/_index.scss +12 -0
- package/mcp/api.js +512 -0
- package/mcp/catalog.js +157 -0
- package/mcp/server.js +273 -0
- package/mcp/tools.js +366 -0
- package/meter-group/styles/_index.scss +1 -1
- package/package.json +186 -35
- package/pagination/styles/_index.scss +6 -6
- package/popover/styles/_index.scss +37 -5
- package/rating/styles/_index.scss +10 -0
- package/schematics/use/symbol-map.json +2 -0
- package/segmented/styles/_index.scss +7 -0
- package/select/styles/_index.scss +29 -9
- package/sidebar/styles/_index.scss +30 -5
- package/slider/styles/_index.scss +15 -0
- package/speed-dial/styles/_index.scss +20 -0
- package/split-text/styles/_index.scss +13 -0
- package/star-border/styles/_index.scss +2 -0
- package/stepper/styles/_index.scss +1 -1
- package/styles/_grid.scss +4 -4
- package/styles.scss +1 -0
- package/switch/styles/_index.scss +5 -3
- package/table/styles/_index.scss +22 -11
- package/tabs/styles/_index.scss +11 -1
- package/textarea/styles/_index.scss +5 -0
- package/theme/styles/_colors.scss +29 -13
- package/theme/styles/_dark.scss +11 -3
- package/theme/styles/_mixins.scss +3 -0
- package/timeline/styles/_index.scss +2 -2
- package/toast/styles/_index.scss +17 -8
- package/toolbar/styles/_index.scss +3 -3
- package/tour/styles/_index.scss +7 -1
- package/tree/styles/_index.scss +5 -3
- package/types/ngwr-action-sheet.d.ts +9 -1
- package/types/ngwr-affix.d.ts +7 -1
- package/types/ngwr-anchor.d.ts +8 -1
- package/types/ngwr-avatar.d.ts +13 -3
- package/types/ngwr-bar-chart.d.ts +16 -0
- package/types/ngwr-burger.d.ts +6 -2
- package/types/ngwr-button-testing.d.ts +85 -0
- package/types/ngwr-button.d.ts +58 -10
- package/types/ngwr-calendar-heatmap.d.ts +16 -2
- package/types/ngwr-calendar.d.ts +37 -1
- package/types/ngwr-carousel-testing.d.ts +257 -0
- package/types/ngwr-carousel.d.ts +20 -4
- package/types/ngwr-cascader-testing.d.ts +392 -0
- package/types/ngwr-checkbox-testing.d.ts +77 -0
- package/types/ngwr-checkbox.d.ts +7 -2
- package/types/ngwr-clipboard.d.ts +8 -1
- package/types/ngwr-collapse-testing.d.ts +290 -0
- package/types/ngwr-color-picker.d.ts +20 -11
- package/types/ngwr-command-palette-testing.d.ts +437 -0
- package/types/ngwr-command-palette.d.ts +25 -2
- package/types/ngwr-compare.d.ts +50 -2
- package/types/ngwr-config.d.ts +176 -0
- package/types/ngwr-context-menu-testing.d.ts +401 -0
- package/types/ngwr-context-menu.d.ts +65 -17
- package/types/ngwr-counter.d.ts +6 -1
- package/types/ngwr-date-adapter-luxon.d.ts +26 -0
- package/types/ngwr-date-picker-testing.d.ts +518 -0
- package/types/ngwr-date-picker.d.ts +128 -8
- package/types/ngwr-dialog-testing.d.ts +79 -0
- package/types/ngwr-dialog.d.ts +13 -0
- package/types/ngwr-directives.d.ts +10 -1
- package/types/ngwr-donut-chart.d.ts +8 -1
- package/types/ngwr-drawer-testing.d.ts +196 -0
- package/types/ngwr-drawer.d.ts +15 -0
- package/types/ngwr-dropdown-testing.d.ts +202 -0
- package/types/ngwr-dropdown.d.ts +7 -1
- package/types/ngwr-empty.d.ts +19 -4
- package/types/ngwr-event-calendar.d.ts +26 -1
- package/types/ngwr-file-upload-testing.d.ts +194 -0
- package/types/ngwr-form-testing.d.ts +379 -0
- package/types/ngwr-form.d.ts +17 -0
- package/types/ngwr-gauge.d.ts +13 -1
- package/types/ngwr-hotkey.d.ts +2 -0
- package/types/ngwr-image-cropper.d.ts +10 -0
- package/types/ngwr-input-number-testing.d.ts +226 -0
- package/types/ngwr-input-number.d.ts +29 -1
- package/types/ngwr-input-otp-testing.d.ts +299 -0
- package/types/ngwr-input-otp.d.ts +23 -2
- package/types/ngwr-input-testing.d.ts +84 -0
- package/types/ngwr-input.d.ts +20 -6
- package/types/ngwr-knob.d.ts +18 -0
- package/types/ngwr-layout.d.ts +1 -0
- package/types/ngwr-lightbox.d.ts +17 -3
- package/types/ngwr-line-chart.d.ts +9 -2
- package/types/ngwr-list.d.ts +7 -2
- package/types/ngwr-loading-bar.d.ts +4 -7
- package/types/ngwr-markdown-testing.d.ts +462 -0
- package/types/ngwr-markdown.d.ts +534 -0
- package/types/ngwr-marquee.d.ts +12 -2
- package/types/ngwr-mention-testing.d.ts +359 -0
- package/types/ngwr-meta.d.ts +4 -2
- package/types/ngwr-meter-group.d.ts +11 -1
- package/types/ngwr-overlay.d.ts +33 -2
- package/types/ngwr-pagination-testing.d.ts +291 -0
- package/types/ngwr-pagination.d.ts +7 -1
- package/types/ngwr-popconfirm-testing.d.ts +235 -0
- package/types/ngwr-popconfirm.d.ts +31 -21
- package/types/ngwr-popover-testing.d.ts +221 -0
- package/types/ngwr-popover.d.ts +19 -2
- package/types/ngwr-pull-to-refresh.d.ts +7 -0
- package/types/ngwr-qr.d.ts +9 -1
- package/types/ngwr-radio-testing.d.ts +296 -0
- package/types/ngwr-radio.d.ts +8 -2
- package/types/ngwr-rating-testing.d.ts +291 -0
- package/types/ngwr-rating.d.ts +23 -0
- package/types/ngwr-segmented-testing.d.ts +401 -0
- package/types/ngwr-select-testing.d.ts +175 -0
- package/types/ngwr-select.d.ts +45 -4
- package/types/ngwr-sidebar.d.ts +17 -2
- package/types/ngwr-slider-testing.d.ts +329 -0
- package/types/ngwr-slider.d.ts +35 -1
- package/types/ngwr-sparkline.d.ts +12 -2
- package/types/ngwr-speed-dial.d.ts +17 -18
- package/types/ngwr-spinner.d.ts +8 -1
- package/types/ngwr-splitter.d.ts +24 -1
- package/types/ngwr-statistic.d.ts +12 -2
- package/types/ngwr-stepper-testing.d.ts +346 -0
- package/types/ngwr-storage.d.ts +10 -1
- package/types/ngwr-switch-testing.d.ts +66 -0
- package/types/ngwr-switch.d.ts +7 -2
- package/types/ngwr-table-testing.d.ts +423 -0
- package/types/ngwr-table.d.ts +42 -0
- package/types/ngwr-tabs-testing.d.ts +470 -0
- package/types/ngwr-tabs.d.ts +9 -0
- package/types/ngwr-textarea-testing.d.ts +184 -0
- package/types/ngwr-textarea.d.ts +7 -2
- package/types/ngwr-toast-testing.d.ts +80 -0
- package/types/ngwr-toast.d.ts +19 -4
- package/types/ngwr-tour.d.ts +27 -0
- package/types/ngwr-transfer-testing.d.ts +444 -0
- package/types/ngwr-transfer.d.ts +16 -1
- package/types/ngwr-tree-testing.d.ts +501 -0
- package/types/ngwr-tree.d.ts +33 -0
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-virtual-scroll.d.ts +13 -1
- package/types/ngwr-window.d.ts +23 -2
- package/typewriter/styles/_index.scss +1 -1
- package/typography/styles/_index.scss +1 -1
- package/window/styles/_index.scss +32 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngwr-date-picker.mjs","sources":["../../../projects/lib/date-picker/internal/time-panel.ts","../../../projects/lib/date-picker/internal/time-panel.html","../../../projects/lib/date-picker/internal/date-time-panel.ts","../../../projects/lib/date-picker/internal/date-time-panel.html","../../../projects/lib/date-picker/date-picker.ts","../../../projects/lib/date-picker/date-picker.html","../../../projects/lib/date-picker/internal/date-range-panel.ts","../../../projects/lib/date-picker/internal/date-range-panel.html","../../../projects/lib/date-picker/date-range-picker.ts","../../../projects/lib/date-picker/date-range-picker.html","../../../projects/lib/date-picker/ngwr-date-picker.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n Component,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport { WrDateAdapter, WR_DATE_LOCALE } from 'ngwr/date-adapter';\nimport { clamp } from 'ngwr/utils';\n\nfunction pad(n: number): string {\n return String(n).padStart(2, '0');\n}\n\n/** Wraps a value into `[0, modulus)` so steppers cycle nicely. */\nfunction wrap(v: number, modulus: number): number {\n return ((v % modulus) + modulus) % modulus;\n}\n\n/** Detect whether a locale uses 12-hour time by default. */\nfunction isLocaleHour12(locale: string): boolean {\n try {\n return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).resolvedOptions().hour12 === true;\n } catch {\n return false;\n }\n}\n\n/**\n * Internal time stepper panel rendered by `<wr-date-picker mode=\"time\">`\n * (standalone) and `mode=\"datetime\"` (composed with the calendar). Not part\n * of the public API — use `<wr-date-picker mode=\"time\">` instead.\n *\n * @internal\n */\n@Component({\n selector: 'wr-time-picker',\n templateUrl: './time-panel.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n})\nexport class WrTimePanel implements FormValueControl<Date | null> {\n /** 12 / 24-hour mode. @default 'auto' (derived from the locale) */\n readonly format = input<'auto' | '12h' | '24h'>('auto');\n\n /** Render a third column for seconds. @default false */\n readonly showSeconds = input(false, { transform: coerceBooleanProperty });\n\n /** Step applied to minutes / seconds steppers. @default 1 */\n readonly step = input(1, { transform: (v: unknown): number => Math.max(1, coerceNumberProperty(v, 1)) });\n\n /** Disable interaction. @default false */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Read-only — values cannot be changed. @default false */\n readonly readonly = input(false, { transform: coerceBooleanProperty });\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n private readonly locale = inject(WR_DATE_LOCALE);\n\n /**\n * Form value — the selected time as a `Date` (its date portion is preserved).\n * A signal-forms native control: `[formField]` binds this directly, and\n * `[(ngModel)]` / `[(value)]` bind it through Angular's bridge.\n */\n readonly value = model<Date | null>(null);\n\n /** Emitted on blur so a bound field can mark itself touched. */\n readonly touch = output<void>();\n\n /** Source of truth — stores h/m/s in 24-hour form. */\n protected readonly hours = signal(0);\n protected readonly minutes = signal(0);\n protected readonly seconds = signal(0);\n\n /** Date portion preserved across updates (today's date if none was supplied). */\n private readonly basis = signal<Date>(this.adapter.today());\n\n protected readonly effectiveDisabled = computed(() => this.disabled());\n\n constructor() {\n // Mirror an external `value` write into the internal h/m/s state (the old\n // `writeValue` body). Guarded against the echo of our own `emit()` so a live\n // edit is never clobbered by re-deriving it.\n effect(() => {\n const value = this.value();\n untracked(() => {\n if (value === this.lastEmitted) return;\n if (value && this.adapter.isValid(value)) {\n this.basis.set(this.adapter.clone(value));\n this.hours.set(this.adapter.getHours(value));\n this.minutes.set(this.adapter.getMinutes(value));\n this.seconds.set(this.adapter.getSeconds(value));\n } else {\n this.basis.set(this.adapter.today());\n this.hours.set(0);\n this.minutes.set(0);\n this.seconds.set(0);\n }\n });\n });\n }\n\n protected readonly interactive = computed(() => !this.effectiveDisabled() && !this.readonly());\n\n /** Resolved format — turns 'auto' into '12h' or '24h' based on the locale. */\n protected readonly is12h = computed(() => {\n const f = this.format();\n if (f === '12h') return true;\n if (f === '24h') return false;\n return isLocaleHour12(this.locale);\n });\n\n /** Hours value shown in the input (1-12 in 12h mode, 0-23 otherwise). */\n protected readonly displayHours = computed(() => {\n if (!this.is12h()) return this.hours();\n const h = this.hours() % 12;\n return h === 0 ? 12 : h;\n });\n\n protected readonly isPm = computed(() => this.hours() >= 12);\n\n protected readonly amPmLabel = computed(() => (this.isPm() ? 'PM' : 'AM'));\n\n protected readonly hoursDisplay = computed(() => pad(this.displayHours()));\n protected readonly minutesDisplay = computed(() => pad(this.minutes()));\n protected readonly secondsDisplay = computed(() => pad(this.seconds()));\n\n protected readonly classes = computed(() => {\n const parts = ['wr-time-picker'];\n if (this.is12h()) parts.push('wr-time-picker--12h');\n if (this.showSeconds()) parts.push('wr-time-picker--with-seconds');\n if (this.effectiveDisabled()) parts.push('wr-time-picker--disabled');\n return parts.join(' ');\n });\n\n /** Last value we pushed via `emit()`, so the sync effect can skip the echo. */\n private lastEmitted: Date | null = null;\n\n // Typed-input handlers\n\n protected onHoursInput(event: Event): void {\n const n = Number((event.target as HTMLInputElement).value);\n if (Number.isNaN(n)) return;\n if (this.is12h()) {\n const h12 = clamp(Math.trunc(n), 1, 12) % 12;\n this.hours.set(this.isPm() ? h12 + 12 : h12);\n } else {\n this.hours.set(clamp(Math.trunc(n), 0, 23));\n }\n this.emit();\n }\n\n protected onMinutesInput(event: Event): void {\n const n = Number((event.target as HTMLInputElement).value);\n if (Number.isNaN(n)) return;\n this.minutes.set(clamp(Math.trunc(n), 0, 59));\n this.emit();\n }\n\n protected onSecondsInput(event: Event): void {\n const n = Number((event.target as HTMLInputElement).value);\n if (Number.isNaN(n)) return;\n this.seconds.set(clamp(Math.trunc(n), 0, 59));\n this.emit();\n }\n\n protected onBlur(): void {\n this.touch.emit();\n }\n\n // Stepper handlers (▲ / ▼ buttons)\n\n protected stepHours(direction: 1 | -1): void {\n if (!this.interactive()) return;\n this.hours.set(wrap(this.hours() + direction, 24));\n this.emit();\n }\n\n protected stepMinutes(direction: 1 | -1): void {\n if (!this.interactive()) return;\n this.minutes.set(wrap(this.minutes() + direction * this.step(), 60));\n this.emit();\n }\n\n protected stepSeconds(direction: 1 | -1): void {\n if (!this.interactive()) return;\n this.seconds.set(wrap(this.seconds() + direction * this.step(), 60));\n this.emit();\n }\n\n protected toggleAmPm(): void {\n if (!this.interactive()) return;\n // ±12 hours flips AM ↔ PM; wrap handles overflow.\n this.hours.set(wrap(this.hours() + 12, 24));\n this.emit();\n }\n\n // Emission\n\n private emit(): void {\n const next = this.adapter.setTime(this.basis(), this.hours(), this.minutes(), this.seconds());\n this.lastEmitted = next;\n this.value.set(next);\n }\n}\n","<div class=\"wr-time-picker__col\">\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--up\"\n aria-label=\"Increment hours\"\n [disabled]=\"!interactive()\"\n (click)=\"stepHours(1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n </button>\n <input\n class=\"wr-time-picker__input\"\n type=\"text\"\n inputmode=\"numeric\"\n aria-label=\"Hours\"\n [value]=\"hoursDisplay()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onHoursInput($event)\"\n (blur)=\"onBlur()\"\n />\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--down\"\n aria-label=\"Decrement hours\"\n [disabled]=\"!interactive()\"\n (click)=\"stepHours(-1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n</div>\n\n<span class=\"wr-time-picker__sep\" aria-hidden=\"true\">:</span>\n\n<div class=\"wr-time-picker__col\">\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--up\"\n aria-label=\"Increment minutes\"\n [disabled]=\"!interactive()\"\n (click)=\"stepMinutes(1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n </button>\n <input\n class=\"wr-time-picker__input\"\n type=\"text\"\n inputmode=\"numeric\"\n aria-label=\"Minutes\"\n [value]=\"minutesDisplay()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onMinutesInput($event)\"\n (blur)=\"onBlur()\"\n />\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--down\"\n aria-label=\"Decrement minutes\"\n [disabled]=\"!interactive()\"\n (click)=\"stepMinutes(-1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n</div>\n\n@if (showSeconds()) {\n <span class=\"wr-time-picker__sep\" aria-hidden=\"true\">:</span>\n\n <div class=\"wr-time-picker__col\">\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--up\"\n aria-label=\"Increment seconds\"\n [disabled]=\"!interactive()\"\n (click)=\"stepSeconds(1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n </button>\n <input\n class=\"wr-time-picker__input\"\n type=\"text\"\n inputmode=\"numeric\"\n aria-label=\"Seconds\"\n [value]=\"secondsDisplay()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onSecondsInput($event)\"\n (blur)=\"onBlur()\"\n />\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--down\"\n aria-label=\"Decrement seconds\"\n [disabled]=\"!interactive()\"\n (click)=\"stepSeconds(-1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </div>\n}\n\n@if (is12h()) {\n <div class=\"wr-time-picker__col wr-time-picker__col--ampm\">\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--up\"\n aria-label=\"Toggle AM / PM\"\n [disabled]=\"!interactive()\"\n (click)=\"toggleAmPm()\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n </button>\n <span class=\"wr-time-picker__label\" aria-live=\"polite\">{{ amPmLabel() }}</span>\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--down\"\n aria-label=\"Toggle AM / PM\"\n [disabled]=\"!interactive()\"\n (click)=\"toggleAmPm()\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </div>\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, ViewEncapsulation, computed, inject, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { WrCalendar } from 'ngwr/calendar';\nimport { WrDateAdapter } from 'ngwr/date-adapter';\n\nimport { WrTimePanel } from './time-panel';\n\n/**\n * Internal panel that stacks a `<wr-calendar>` and a `<wr-time-picker>`,\n * combining their selections into a single `Date`. Owned by\n * `<wr-date-picker mode=\"datetime\">` — not part of the public API.\n *\n * @internal\n */\n@Component({\n selector: 'wr-date-time-panel',\n templateUrl: './date-time-panel.html',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-date-time-panel' },\n imports: [FormsModule, WrCalendar, WrTimePanel],\n})\nexport class WrDateTimePanel {\n readonly value = input<Date | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly dateFilter = input<((date: Date) => boolean) | null>(null);\n readonly timeFormat = input<'auto' | '12h' | '24h'>('auto');\n readonly showSeconds = input(false);\n readonly step = input(1);\n\n readonly changed = output<Date>();\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n\n /** Date portion used by the calendar — falls back to today when value is null. */\n protected readonly calendarValue = computed(() => this.value() ?? this.adapter.today());\n\n /** Value passed to the time picker — falls back to today (00:00) when null. */\n protected readonly timeValue = computed(() => this.value() ?? this.adapter.today());\n\n protected onCalendarSelect(date: Date | null): void {\n if (!date) return;\n const base = this.value() ?? this.adapter.today();\n const combined = this.adapter.setTime(\n this.adapter.createDate(this.adapter.getYear(date), this.adapter.getMonth(date), this.adapter.getDate(date)),\n this.adapter.getHours(base),\n this.adapter.getMinutes(base),\n this.adapter.getSeconds(base)\n );\n this.changed.emit(combined);\n }\n\n protected onTimeChange(time: Date | null): void {\n if (!time) return;\n const base = this.value() ?? this.adapter.today();\n const combined = this.adapter.setTime(\n this.adapter.createDate(this.adapter.getYear(base), this.adapter.getMonth(base), this.adapter.getDate(base)),\n this.adapter.getHours(time),\n this.adapter.getMinutes(time),\n this.adapter.getSeconds(time)\n );\n this.changed.emit(combined);\n }\n}\n","<wr-calendar\n [date]=\"calendarValue()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateFilter]=\"dateFilter()\"\n (dateChange)=\"onCalendarSelect($event)\"\n/>\n\n<div class=\"wr-date-time-panel__time\">\n <wr-time-picker\n [ngModel]=\"timeValue()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [step]=\"step()\"\n (ngModelChange)=\"onTimeChange($event)\"\n />\n</div>\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { type OverlayRef, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Component,\n type ComponentRef,\n DestroyRef,\n ElementRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport { WrCalendar } from 'ngwr/calendar';\nimport { WrDateAdapter, type WrDateFormat } from 'ngwr/date-adapter';\nimport { readI18nText, useI18nText } from 'ngwr/i18n';\nimport { WrInput, WrInputGroup, WrInputSuffix } from 'ngwr/input';\nimport { WR_OVERLAY, WrOutsideClick } from 'ngwr/overlay';\n\nimport { WrDateTimePanel } from './internal/date-time-panel';\nimport { WrTimePanel } from './internal/time-panel';\n\n/**\n * Unified date / time / date-time picker. Same `<input>` + popover skeleton\n * for every mode — the overlay content swaps based on `[mode]`:\n *\n * - `'date'` (default) — popover renders a calendar. Picking a date closes\n * the overlay.\n * - `'time'` — popover renders an `HH:MM[:SS]` stepper with optional AM/PM.\n * Stays open while editing; close with outside-click or Escape.\n * - `'datetime'` — popover stacks calendar + time stepper. Picking a date\n * does NOT close (the user typically wants to set the time next).\n *\n * A signal-forms native control: it implements `FormValueControl<Date | null>`,\n * so `[formField]` binds straight to its `value` model — no\n * `ControlValueAccessor` in between. `[(value)]` works standalone, and classic\n * `[(ngModel)]` / reactive forms keep working through Angular's bridge. Value\n * type is `Date | null` for every mode.\n *\n * Parses the input on every keystroke (silently — only emits when valid) and\n * re-formats canonical on blur. Format is driven by {@link WrDateAdapter}: it\n * accepts both named keys (`'shortDate'`, `'mediumDateTime'`, …) and raw\n * token strings (`'dd.MM.yyyy'`, `'HH:mm'`). When `format` is left at the\n * default (`null`), the picker derives the right named key from `mode`:\n * `'date'` gives `'shortDate'`, `'time'` gives `'time'`, `'datetime'` gives\n * `'shortDateTime'`.\n *\n * @example\n * ```html\n * <!-- signal forms -->\n * <wr-date-picker [formField]=\"form.picked\" format=\"dd.MM.yyyy\" [min]=\"minDate\" />\n *\n * <!-- standalone two-way binding, date only -->\n * <wr-date-picker [(value)]=\"picked\" format=\"dd.MM.yyyy\" [min]=\"minDate\" />\n *\n * <!-- Time only -->\n * <wr-date-picker mode=\"time\" [(value)]=\"picked\" timeFormat=\"24h\" />\n *\n * <!-- Date + time -->\n * <wr-date-picker mode=\"datetime\" [(value)]=\"when\" [showSeconds]=\"true\" [step]=\"5\" />\n * ```\n *\n * @see https://ngwr.dev/reference/components/date-picker\n */\n@Component({\n selector: 'wr-date-picker',\n templateUrl: './date-picker.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n imports: [WrInput, WrInputGroup, WrInputSuffix],\n})\nexport class WrDatePicker implements FormValueControl<Date | null> {\n /** Picker behavior — see class doc. @default 'date' */\n readonly mode = input<'date' | 'time' | 'datetime'>('date');\n\n /**\n * Format used for both display and parsing. When `null` (default), the\n * format is derived from `mode` (`shortDate` / `time` / `shortDateTime`).\n * Pass a named key or raw token string to override.\n */\n readonly format = input<WrDateFormat | (string & {}) | null>(null);\n\n /** Placeholder shown when the input is empty. */\n readonly placeholder = input<string>('');\n\n // Typed `Date | undefined` (not `Date | null`) to satisfy the reserved\n // `FormUiControl` min/max slots, which are keyed to the control's value type\n // and want `Date | undefined`. Both null and undefined stay falsy, so the\n // internal bounds checks below are unaffected.\n /** Min selectable date (forwarded to the calendar). Ignored in `time` mode. */\n readonly min = input<Date | undefined>(undefined);\n\n /** Max selectable date (forwarded to the calendar). Ignored in `time` mode. */\n readonly max = input<Date | undefined>(undefined);\n\n /** Predicate to disable specific dates (forwarded to the calendar). Ignored in `time` mode. */\n readonly dateFilter = input<((date: Date) => boolean) | null>(null);\n\n /** Time-panel 12 / 24-hour format. Applies in `time` + `datetime` modes. @default 'auto' */\n readonly timeFormat = input<'auto' | '12h' | '24h'>('auto');\n\n /** Render the seconds column. Applies in `time` + `datetime` modes. @default false */\n readonly showSeconds = input(false, { transform: coerceBooleanProperty });\n\n /** Minute / second step for the time panel. @default 1 */\n readonly step = input(1, { transform: (v: unknown): number => Math.max(1, coerceNumberProperty(v, 1)) });\n\n /**\n * Disable interaction. Bound automatically from the field's disabled state\n * when used with `[formField]`.\n *\n * @default false\n */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Read-only — input not typeable, but the trigger icon still opens the overlay. @default false */\n readonly readonly = input(false, { transform: coerceBooleanProperty });\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n private readonly overlay = inject(WR_OVERLAY);\n private readonly outsideClick = inject(WrOutsideClick);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n protected readonly inputEl = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n /** The picked Date. Bound by `[formField]`, or two-way via `[(value)]`. */\n readonly value = model<Date | null>(null);\n\n /** Emitted on blur so a bound field can mark itself touched. */\n readonly touch = output<void>();\n\n /** Text currently in the input (may be partial / invalid mid-type). */\n protected readonly text = signal<string>('');\n\n /** Whether the popover is currently open. */\n protected readonly overlayOpen = signal(false);\n\n /** Resolved format — falls back to a mode-appropriate default. */\n protected readonly resolvedFormat = computed<string>(() => {\n const explicit = this.format();\n if (explicit) return explicit;\n const m = this.mode();\n if (m === 'datetime') return 'shortDateTime';\n // `time`, not `shortTime` — the latter is not a member of WrDateFormat, so\n // adapters fell through to treating it as a raw token pattern. date-fns then\n // threw on the unescaped letters; the native adapter degraded silently.\n if (m === 'time') return 'time';\n return 'shortDate';\n });\n\n protected readonly isTime = computed(() => this.mode() === 'time');\n protected readonly isDateTime = computed(() => this.mode() === 'datetime');\n\n // Resolved at injection time — i18n catalog reads pick up live locale\n // changes via re-render of the host attribute binding.\n private readonly labelDate = readI18nText('datePicker.open', 'Open calendar');\n private readonly labelTime = readI18nText('datePicker.openTime', 'Open time picker');\n private readonly labelDateTime = readI18nText('datePicker.openDateTime', 'Open date and time picker');\n\n /**\n * Accessible name of the text field. Falls back to the placeholder, then to\n * the same catalog string the calendar button uses — the field is a\n * `role=\"combobox\"`, and with an empty placeholder it had no name at all.\n */\n readonly ariaLabel = input<string | null>(null);\n\n private readonly fieldLabel = useI18nText(this.ariaLabel, 'datePicker.open', 'Open calendar');\n protected readonly resolvedAriaLabel = computed(() => {\n // Not `??`: an empty placeholder must fall through to the catalog string.\n const explicit = this.ariaLabel();\n if (explicit) return explicit;\n const placeholder = this.placeholder();\n return placeholder ? placeholder : this.fieldLabel();\n });\n\n protected readonly triggerLabel = computed(() => {\n const m = this.mode();\n if (m === 'time') return this.labelTime;\n if (m === 'datetime') return this.labelDateTime;\n return this.labelDate;\n });\n\n protected readonly classes = computed(() => {\n const parts = ['wr-date-picker', `wr-date-picker--${this.mode()}`];\n if (this.disabled()) parts.push('wr-date-picker--disabled');\n return parts.join(' ');\n });\n\n private overlayRef: OverlayRef | null = null;\n\n /** Live calendar ref while the date popover is open — lets the panel track\n * the typed value in real time (not just on reopen). */\n private readonly dateRef = signal<ComponentRef<WrCalendar> | null>(null);\n\n /** Last value we pushed into the model ourselves — lets the sync effect\n * skip the echo of our own edits (so a live keystroke's raw text is never\n * reformatted mid-type). */\n private lastValue: Date | null = null;\n\n constructor() {\n this.destroyRef.onDestroy(() => this.dispose());\n\n // Mirror external writes to `value` (from `[formField]`, `[(value)]`, or a\n // classic-forms bridge) into the display text — this is the old\n // `writeValue` body. Wrapped so it reacts only to `value()`; the echo of\n // our own edits is skipped, and a null/undefined write is tolerated (it\n // clears the text, exactly as the old `writeValue(Date | null)` did).\n effect(() => {\n const v = this.value();\n untracked(() => {\n if (this.sameDate(v, this.lastValue)) return;\n this.lastValue = v;\n this.text.set(v && this.adapter.isValid(v) ? this.adapter.format(v, this.resolvedFormat()) : '');\n });\n });\n\n // While the calendar popover is open, push every valid typed value into it\n // so the displayed month follows the input live (the calendar snaps its\n // own viewDate to the bound `date`).\n effect(() => {\n const ref = this.dateRef();\n if (ref) ref.setInput('date', this.value());\n });\n }\n\n // Template handlers\n\n protected onInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n this.text.set(raw);\n if (!raw) {\n this.commitValue(null);\n return;\n }\n const parsed = this.adapter.parse(raw, this.resolvedFormat());\n if (parsed && this.adapter.isValid(parsed) && !this.isOutOfBounds(parsed)) {\n this.commitValue(parsed);\n }\n }\n\n protected onBlur(): void {\n this.touch.emit();\n // Reformat to canonical on blur (cleans up `1/5/25` → `1/5/2025`).\n const v = this.value();\n if (v && this.adapter.isValid(v)) {\n this.text.set(this.adapter.format(v, this.resolvedFormat()));\n } else if (!this.text()) {\n this.commitValue(null);\n }\n }\n\n /** Called by the input's click — opens the overlay if it isn't open already. */\n protected openOnInput(): void {\n if (this.disabled() || this.overlayRef) return;\n this.openOverlay();\n }\n\n protected toggleOverlay(): void {\n if (this.disabled()) return;\n if (this.overlayRef) {\n this.closeOverlay();\n } else {\n this.openOverlay();\n }\n }\n\n // Overlay\n\n private openOverlay(): void {\n if (this.overlayRef) return;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.host)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n ])\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.scrollStrategies.reposition(),\n panelClass: 'wr-date-picker-overlay',\n });\n this.overlayOpen.set(true);\n\n // Dispatch by mode — pick the panel + wire its emissions.\n const m = this.mode();\n if (m === 'time') this.attachTime();\n else if (m === 'datetime') this.attachDateTime();\n else this.attachDate();\n\n this.outsideClick\n .outsidePointerEvents(this.overlayRef)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (this.host.nativeElement.contains(event.target as Node)) return;\n this.closeOverlay();\n });\n\n this.overlayRef\n .keydownEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closeOverlay();\n this.inputEl().nativeElement.focus();\n }\n });\n }\n\n private attachDate(): void {\n if (!this.overlayRef) return;\n const ref = this.overlayRef.attach(new ComponentPortal(WrCalendar));\n ref.setInput('date', this.value());\n this.dateRef.set(ref);\n ref.setInput('min', this.min());\n ref.setInput('max', this.max());\n ref.setInput('dateFilter', this.dateFilter());\n ref.instance.date.subscribe(next => {\n if (!next) return;\n this.commit(next);\n this.closeOverlay();\n });\n }\n\n private attachTime(): void {\n if (!this.overlayRef) return;\n const ref = this.overlayRef.attach(new ComponentPortal(WrTimePanel));\n ref.setInput('format', this.timeFormat());\n ref.setInput('showSeconds', this.showSeconds());\n ref.setInput('step', this.step());\n ref.setInput('value', this.value() ?? this.adapter.today());\n ref.instance.value.subscribe((next: Date | null) => {\n if (!next) return;\n this.commit(next);\n });\n }\n\n private attachDateTime(): void {\n if (!this.overlayRef) return;\n const ref = this.overlayRef.attach(new ComponentPortal(WrDateTimePanel));\n ref.setInput('value', this.value());\n ref.setInput('min', this.min());\n ref.setInput('max', this.max());\n ref.setInput('dateFilter', this.dateFilter());\n ref.setInput('timeFormat', this.timeFormat());\n ref.setInput('showSeconds', this.showSeconds());\n ref.setInput('step', this.step());\n ref.instance.changed.subscribe(next => {\n this.commit(next);\n ref.setInput('value', next);\n });\n }\n\n private commit(next: Date): void {\n this.text.set(this.adapter.format(next, this.resolvedFormat()));\n this.commitValue(next);\n }\n\n /** Push a value to the model while remembering it, so the sync effect treats\n * the resulting change as an echo and leaves the display text alone. */\n private commitValue(next: Date | null): void {\n this.lastValue = next;\n this.value.set(next);\n }\n\n private closeOverlay(): void {\n this.dispose();\n }\n\n private dispose(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.dateRef.set(null);\n this.overlayOpen.set(false);\n }\n\n // Helpers\n\n private isOutOfBounds(date: Date): boolean {\n if (this.mode() === 'time') return false;\n const min = this.min();\n if (min && this.adapter.compareDate(date, min) < 0) return true;\n const max = this.max();\n if (max && this.adapter.compareDate(date, max) > 0) return true;\n return false;\n }\n\n private sameDate(a: Date | null, b: Date | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return a.getTime() === b.getTime();\n }\n}\n","<wr-input-group>\n <!--\n A plain textbox, per the APG date-picker-dialog pattern: `aria-haspopup` and\n `aria-expanded` are not permitted on `textbox` and belong to the trigger\n button below, which is the thing that opens the dialog.\n -->\n <input\n #input\n wrInput\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.aria-label]=\"resolvedAriaLabel()\"\n [value]=\"text()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (click)=\"openOnInput()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n <button\n type=\"button\"\n wrInputSuffix\n class=\"wr-date-picker__trigger\"\n [attr.aria-label]=\"triggerLabel()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"overlayOpen()\"\n [disabled]=\"disabled()\"\n (click)=\"toggleOverlay()\"\n >\n @if (isTime()) {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <circle cx=\"7\" cy=\"7\" r=\"5.75\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"7\" y1=\"7\" x2=\"7\" y2=\"3.75\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n <line x1=\"7\" y1=\"7\" x2=\"9.5\" y2=\"7\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n </svg>\n } @else {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <rect x=\"1.5\" y=\"2.5\" width=\"11\" height=\"10\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"1.5\" y1=\"5.5\" x2=\"12.5\" y2=\"5.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"4\" y1=\"1\" x2=\"4\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n <line x1=\"10\" y1=\"1\" x2=\"10\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n @if (isDateTime()) {\n <circle cx=\"7\" cy=\"9\" r=\"1.5\" fill=\"currentColor\" />\n }\n </svg>\n }\n </button>\n</wr-input-group>\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, ViewEncapsulation, computed, inject, input, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { WrCalendar, type WrCalendarRange } from 'ngwr/calendar';\nimport { WrDateAdapter } from 'ngwr/date-adapter';\nimport { readI18nText } from 'ngwr/i18n';\n\nimport type { WrDateRange } from '../interfaces';\n\nimport { WrTimePanel } from './time-panel';\n\n/**\n * Internal panel behind `<wr-date-range-picker>`: a range-mode\n * `<wr-calendar>`, plus one `<wr-time-picker>` per end when `withTime` is on.\n * Not part of the public API.\n *\n * The calendar owns range picking (including the start/end swap and the hover\n * preview); this panel only re-attaches the times so a datetime range keeps the\n * hours the user set while the dates move around.\n *\n * @internal\n */\n@Component({\n selector: 'wr-date-range-panel',\n templateUrl: './date-range-panel.html',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-date-range-panel' },\n imports: [FormsModule, WrCalendar, WrTimePanel],\n})\nexport class WrDateRangePanel {\n readonly value = input<WrDateRange>([null, null]);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly dateFilter = input<((date: Date) => boolean) | null>(null);\n readonly withTime = input(false);\n readonly timeFormat = input<'auto' | '12h' | '24h'>('auto');\n readonly showSeconds = input(false);\n readonly step = input(1);\n\n readonly changed = output<WrDateRange>();\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n\n protected readonly startTimeLabel = readI18nText('datePicker.startTime', 'Start time');\n protected readonly endTimeLabel = readI18nText('datePicker.endTime', 'End time');\n\n /**\n * A time set before its end has a date. The stepper is always live, so the\n * hours are parked here until a date arrives to carry them — otherwise the\n * edit would be silently dropped and the pick would land on midnight.\n */\n private readonly pendingStartTime = signal<Date | null>(null);\n private readonly pendingEndTime = signal<Date | null>(null);\n\n /** The calendar's own range model shape — same tuple, narrower name. */\n protected readonly calendarRange = computed<WrCalendarRange>(() => this.value());\n\n /**\n * Midnight today. The steppers need a concrete date to render, but the\n * fallback must NOT be the current wall clock: picking a date carries no time\n * across until a stepper is touched, so a `14:37` default would display a time\n * the commit never actually stores.\n */\n private readonly dayStart = computed(() => {\n const t = this.adapter.today();\n return this.adapter.createDate(this.adapter.getYear(t), this.adapter.getMonth(t), this.adapter.getDate(t));\n });\n\n /** Time steppers need a concrete date; fall back to a parked time, then midnight. */\n protected readonly startTime = computed(() => this.value()[0] ?? this.pendingStartTime() ?? this.dayStart());\n protected readonly endTime = computed(() => this.value()[1] ?? this.pendingEndTime() ?? this.dayStart());\n\n protected onRangeChange(range: WrCalendarRange): void {\n const [start, end] = range;\n const [prevStart, prevEnd] = this.value();\n\n // `WrCalendar.pickRange` restarts the range whenever it has no start, so a\n // range that was end-only (typed into the end input alone) would lose that\n // end on the next click. Read the click as filling in the missing start\n // instead; the picker orders the pair afterwards.\n const keptEnd = !prevStart && prevEnd && start && !end ? prevEnd : end;\n\n // The calendar only moves dates, so carry each end's existing time across —\n // or the time parked by a stepper that ran before this date existed.\n this.changed.emit([\n this.withTimeOf(start, prevStart ?? this.pendingStartTime()),\n this.withTimeOf(keptEnd, prevEnd ?? this.pendingEndTime()),\n ]);\n }\n\n protected onStartTimeChange(time: Date | null): void {\n if (!time) return;\n const [start, end] = this.value();\n if (!start) {\n this.pendingStartTime.set(time);\n return;\n }\n this.changed.emit([this.withTimeOf(start, time), end]);\n }\n\n protected onEndTimeChange(time: Date | null): void {\n if (!time) return;\n const [start, end] = this.value();\n if (!end) {\n this.pendingEndTime.set(time);\n return;\n }\n this.changed.emit([start, this.withTimeOf(end, time)]);\n }\n\n /** `date`'s calendar day carrying `time`'s clock. Null date stays null. */\n private withTimeOf(date: Date | null, time: Date | null): Date | null {\n if (!date) return null;\n if (!this.withTime() || !time) return date;\n return this.adapter.setTime(\n this.adapter.createDate(this.adapter.getYear(date), this.adapter.getMonth(date), this.adapter.getDate(date)),\n this.adapter.getHours(time),\n this.adapter.getMinutes(time),\n this.adapter.getSeconds(time)\n );\n }\n}\n","<wr-calendar\n mode=\"range\"\n [range]=\"calendarRange()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateFilter]=\"dateFilter()\"\n (rangeChange)=\"onRangeChange($event)\"\n/>\n\n@if (withTime()) {\n <div class=\"wr-date-range-panel__times\">\n <!-- A time picker is several inputs, not one control, so each end is a\n labelled group rather than a <label>. -->\n <div class=\"wr-date-range-panel__time\" role=\"group\" [attr.aria-label]=\"startTimeLabel\">\n <span class=\"wr-date-range-panel__time-label\" aria-hidden=\"true\">{{ startTimeLabel }}</span>\n <wr-time-picker\n [ngModel]=\"startTime()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [step]=\"step()\"\n (ngModelChange)=\"onStartTimeChange($event)\"\n />\n </div>\n <div class=\"wr-date-range-panel__time\" role=\"group\" [attr.aria-label]=\"endTimeLabel\">\n <span class=\"wr-date-range-panel__time-label\" aria-hidden=\"true\">{{ endTimeLabel }}</span>\n <wr-time-picker\n [ngModel]=\"endTime()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [step]=\"step()\"\n (ngModelChange)=\"onEndTimeChange($event)\"\n />\n </div>\n </div>\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { type OverlayRef, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Component,\n type ComponentRef,\n DestroyRef,\n ElementRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport { WrDateAdapter, type WrDateFormat } from 'ngwr/date-adapter';\nimport { readI18nText } from 'ngwr/i18n';\nimport { WrInput, WrInputGroup, WrInputSuffix } from 'ngwr/input';\nimport { WR_OVERLAY, WrOutsideClick } from 'ngwr/overlay';\n\nimport type { WrDateRange } from './interfaces';\nimport { WrDateRangePanel } from './internal/date-range-panel';\n\n/** Which end of the range an edit applies to. */\ntype RangeEnd = 0 | 1;\n\n/**\n * Date-range picker — two text inputs sharing one range calendar.\n *\n * Separate from `<wr-date-picker>` because the value is a different type: a\n * range is `[start, end]`, and folding that into the single picker's\n * `Date | null` would break `[formField]` inference for every existing usage.\n * Everything else matches — same input skeleton, same overlay, same\n * {@link WrDateAdapter} formats.\n *\n * - `'date'` (default) — popover renders a range calendar. Picking the second\n * date closes the overlay.\n * - `'datetime'` — popover adds a time stepper per end. Picking dates does NOT\n * close, since the user typically sets the times next.\n *\n * A signal-forms native control: it implements\n * `FormValueControl<WrDateRange | null>`, so `[formField]` binds straight to\n * its `value` model. `[(value)]` works standalone, and classic `[(ngModel)]` /\n * reactive forms keep working through Angular's bridge.\n *\n * Either end may be `null` while the range is half-picked. Out-of-order ends\n * are swapped on commit, matching the calendar's own behaviour.\n *\n * @example\n * ```html\n * <!-- signal forms -->\n * <wr-date-range-picker [formField]=\"form.period\" format=\"dd.MM.yyyy\" />\n *\n * <!-- standalone two-way binding -->\n * <wr-date-range-picker [(value)]=\"period\" [minDate]=\"minDate\" />\n *\n * <!-- date + time on both ends -->\n * <wr-date-range-picker mode=\"datetime\" [(value)]=\"window\" timeFormat=\"24h\" />\n * ```\n *\n * @see https://ngwr.dev/reference/components/date-picker\n */\n@Component({\n selector: 'wr-date-range-picker',\n templateUrl: './date-range-picker.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n imports: [WrInput, WrInputGroup, WrInputSuffix],\n})\nexport class WrDateRangePicker implements FormValueControl<WrDateRange | null> {\n /** Picker behavior — see class doc. @default 'date' */\n readonly mode = input<'date' | 'datetime'>('date');\n\n /**\n * Format used for both display and parsing, on both ends. When `null`\n * (default), it is derived from `mode` (`shortDate` / `shortDateTime`). Pass\n * a named key or raw token string to override.\n */\n readonly format = input<WrDateFormat | (string & {}) | null>(null);\n\n /** Placeholder for the start input. */\n readonly startPlaceholder = input<string>('');\n\n /** Placeholder for the end input. */\n readonly endPlaceholder = input<string>('');\n\n /** Glyph rendered between the two inputs. @default '–' */\n readonly separator = input<string>('–');\n\n // Named `minDate` / `maxDate`, not `min` / `max`: `FormUiControl` reserves\n // those slots for the control's own value type, which here is a range — a\n // `min` typed as a range makes no sense. Matches `WrValidators.minDate`.\n /** Min selectable date, applied to both ends. */\n readonly minDate = input<Date | null>(null);\n\n /** Max selectable date, applied to both ends. */\n readonly maxDate = input<Date | null>(null);\n\n /** Predicate to disable specific dates (forwarded to the calendar). */\n readonly dateFilter = input<((date: Date) => boolean) | null>(null);\n\n /** Time-panel 12 / 24-hour format. Applies in `datetime` mode. @default 'auto' */\n readonly timeFormat = input<'auto' | '12h' | '24h'>('auto');\n\n /** Render the seconds column. Applies in `datetime` mode. @default false */\n readonly showSeconds = input(false, { transform: coerceBooleanProperty });\n\n /** Minute / second step for the time panels. @default 1 */\n readonly step = input(1, { transform: (v: unknown): number => Math.max(1, coerceNumberProperty(v, 1)) });\n\n /**\n * Disable interaction. Bound automatically from the field's disabled state\n * when used with `[formField]`.\n *\n * @default false\n */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Read-only — inputs not typeable, but the trigger icon still opens the overlay. @default false */\n readonly readonly = input(false, { transform: coerceBooleanProperty });\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n private readonly overlay = inject(WR_OVERLAY);\n private readonly outsideClick = inject(WrOutsideClick);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n protected readonly startEl = viewChild.required<ElementRef<HTMLInputElement>>('startInput');\n\n /** The picked range. Bound by `[formField]`, or two-way via `[(value)]`. */\n readonly value = model<WrDateRange | null>(null);\n\n /** Emitted on blur so a bound field can mark itself touched. */\n readonly touch = output<void>();\n\n /** Text currently in each input (may be partial / invalid mid-type). */\n protected readonly startText = signal<string>('');\n protected readonly endText = signal<string>('');\n\n /** Whether the popover is currently open. */\n protected readonly overlayOpen = signal(false);\n\n /** Resolved format — falls back to a mode-appropriate default. */\n protected readonly resolvedFormat = computed<string>(() =>\n this.format() ? String(this.format()) : this.mode() === 'datetime' ? 'shortDateTime' : 'shortDate'\n );\n\n protected readonly isDateTime = computed(() => this.mode() === 'datetime');\n\n protected readonly triggerLabel = readI18nText('datePicker.openRange', 'Open range calendar');\n protected readonly startLabel = readI18nText('datePicker.rangeStart', 'Range start');\n protected readonly endLabel = readI18nText('datePicker.rangeEnd', 'Range end');\n\n protected readonly classes = computed(() => {\n const parts = ['wr-date-range-picker', `wr-date-range-picker--${this.mode()}`];\n if (this.disabled()) parts.push('wr-date-range-picker--disabled');\n return parts.join(' ');\n });\n\n private overlayRef: OverlayRef | null = null;\n\n /** Live panel ref while the popover is open — lets typed edits move the\n * displayed month in real time (not just on reopen). */\n private readonly panelRef = signal<ComponentRef<WrDateRangePanel> | null>(null);\n\n /** Last range we pushed into the model ourselves, so the sync effect can skip\n * the echo of our own edits and never reformat text mid-type. */\n private lastValue: WrDateRange | null = null;\n\n constructor() {\n this.destroyRef.onDestroy(() => this.dispose());\n\n // Mirror external writes to `value` into the two display texts.\n effect(() => {\n const v = this.value();\n untracked(() => {\n if (this.sameRange(v, this.lastValue)) return;\n this.lastValue = v;\n this.startText.set(this.display(v?.[0] ?? null));\n this.endText.set(this.display(v?.[1] ?? null));\n });\n });\n\n // Keep the open panel in step with the model.\n effect(() => {\n const ref = this.panelRef();\n if (ref) ref.setInput('value', this.value() ?? [null, null]);\n });\n\n // …and with every other input. Pushing these only at attach time meant a\n // `[minDate]` (or filter, or time format) that changed while the popover was\n // open silently kept the stale constraint until the next reopen.\n effect(() => {\n const ref = this.panelRef();\n if (!ref) return;\n ref.setInput('min', this.minDate());\n ref.setInput('max', this.maxDate());\n ref.setInput('dateFilter', this.dateFilter());\n ref.setInput('withTime', this.isDateTime());\n ref.setInput('timeFormat', this.timeFormat());\n ref.setInput('showSeconds', this.showSeconds());\n ref.setInput('step', this.step());\n });\n }\n\n // Template handlers\n\n protected onStartInput(event: Event): void {\n this.onRangeInput(event, 0);\n }\n\n protected onEndInput(event: Event): void {\n this.onRangeInput(event, 1);\n }\n\n protected onBlur(event: FocusEvent): void {\n // Moving between the two ends is still one interaction — only report the\n // control as touched once focus actually leaves it, or tabbing from start to\n // end would mark a bound field touched mid-entry.\n const next = event.relatedTarget as Node | null;\n if (!next || !this.host.nativeElement.contains(next)) this.touch.emit();\n\n // Typing leaves the ends in whatever order they were entered; settle it\n // here, once the user has stopped.\n const [start, end] = this.commitRange(this.current(), { normalise: true });\n // Reformat to canonical on blur (cleans up `1/5/25` → `1/5/2025`).\n this.startText.set(this.display(start));\n this.endText.set(this.display(end));\n }\n\n /** Called by an input's click — opens the overlay if it isn't open already. */\n protected openOnInput(): void {\n if (this.disabled() || this.readonly() || this.overlayRef) return;\n this.openOverlay();\n }\n\n protected toggleOverlay(): void {\n // `readonly` blocks the calendar too — otherwise the inputs refuse typing\n // while the popover happily edits the same value.\n if (this.disabled() || this.readonly()) return;\n if (this.overlayRef) this.closeOverlay();\n else this.openOverlay();\n }\n\n // Input parsing\n\n private onRangeInput(event: Event, end: RangeEnd): void {\n const raw = (event.target as HTMLInputElement).value;\n (end === 0 ? this.startText : this.endText).set(raw);\n\n const [start, finish] = this.current();\n if (!raw) {\n this.commitRange(end === 0 ? [null, finish] : [start, null], { normalise: false });\n return;\n }\n const parsed = this.adapter.parse(raw, this.resolvedFormat());\n if (!parsed || !this.adapter.isValid(parsed) || this.isOutOfBounds(parsed)) return;\n // Never reorder mid-keystroke: a half-typed date can parse to an\n // out-of-order value, and swapping there would yank the text the user is\n // still typing over to the other input. Ordering is settled on blur.\n this.commitRange(end === 0 ? [parsed, finish] : [start, parsed], { normalise: false });\n }\n\n // Overlay\n\n private openOverlay(): void {\n if (this.overlayRef) return;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.host)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n ])\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.scrollStrategies.reposition(),\n panelClass: 'wr-date-picker-overlay',\n });\n this.overlayOpen.set(true);\n\n const ref = this.overlayRef.attach(new ComponentPortal(WrDateRangePanel));\n ref.setInput('value', this.value() ?? [null, null]);\n this.panelRef.set(ref);\n\n ref.instance.changed.subscribe(next => {\n const committed = this.commitRange(next, { normalise: true });\n // A complete date-only range is the end of the interaction; a datetime\n // range still needs its hours, so the panel stays put.\n if (!this.isDateTime() && committed[0] && committed[1]) this.closeOverlay();\n });\n\n this.outsideClick\n .outsidePointerEvents(this.overlayRef)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (this.host.nativeElement.contains(event.target as Node)) return;\n this.closeOverlay();\n });\n\n this.overlayRef\n .keydownEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closeOverlay();\n this.startEl().nativeElement.focus();\n }\n });\n }\n\n /**\n * Close the popover. `restoreFocus` returns focus to the start input — needed\n * when the overlay is dismissed while focus lives inside it (picking the\n * second date), because disposing then leaves focus on a removed element and\n * the browser falls back to `<body>`.\n */\n private closeOverlay(restoreFocus = false): void {\n const inside = this.overlayRef?.overlayElement.contains(this.host.nativeElement.ownerDocument.activeElement);\n this.dispose();\n if (restoreFocus || inside) this.startEl().nativeElement.focus();\n }\n\n private dispose(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.panelRef.set(null);\n this.overlayOpen.set(false);\n }\n\n // Commit\n\n /**\n * Push to the model and refresh the text of whichever ends changed. Returns\n * what was actually committed.\n *\n * `normalise` swaps out-of-order ends. The calendar and blur ask for it; a\n * keystroke does not, because reordering while the user is still typing would\n * move their in-progress text into the other input.\n */\n private commitRange(next: WrDateRange, options: { normalise: boolean }): WrDateRange {\n const normalised = options.normalise ? this.normalise(next) : next;\n // Only write when a date actually moved. `normalise()` allocates a fresh\n // tuple on every call and `model()` compares by reference, so an\n // unconditional write would emit on every blur — enough to mark a bound\n // `[formField]` dirty just by tabbing through the two inputs.\n if (!this.sameRange(normalised, this.value())) {\n this.lastValue = normalised;\n this.value.set(normalised);\n }\n // Only rewrite the text of an end whose date moved out from under it —\n // otherwise a half-typed date would be reformatted on every keystroke.\n if (!this.sameDate(normalised[0], this.parseText(this.startText()))) {\n this.startText.set(this.display(normalised[0]));\n }\n if (!this.sameDate(normalised[1], this.parseText(this.endText()))) {\n this.endText.set(this.display(normalised[1]));\n }\n return normalised;\n }\n\n // Helpers\n\n private current(): WrDateRange {\n return this.value() ?? [null, null];\n }\n\n private display(date: Date | null): string {\n return date && this.adapter.isValid(date) ? this.adapter.format(date, this.resolvedFormat()) : '';\n }\n\n private parseText(raw: string): Date | null {\n if (!raw) return null;\n const parsed = this.adapter.parse(raw, this.resolvedFormat());\n return parsed && this.adapter.isValid(parsed) ? parsed : null;\n }\n\n /** Keep `[start, end]` in chronological order once both ends exist. */\n private normalise(range: WrDateRange): WrDateRange {\n const [start, end] = range;\n if (start && end && this.compareEnds(start, end) > 0) return [end, start];\n return [start, end];\n }\n\n /**\n * Chronological comparison at the precision the mode needs. The adapter's\n * `compareDate` is day-precision by contract, which would leave an inverted\n * same-day `datetime` range (18:00 → 09:00) unswapped.\n */\n private compareEnds(a: Date, b: Date): number {\n const byDay = this.adapter.compareDate(a, b);\n if (byDay !== 0 || !this.isDateTime()) return byDay;\n const clock = (d: Date): number =>\n this.adapter.getHours(d) * 3600 + this.adapter.getMinutes(d) * 60 + this.adapter.getSeconds(d);\n return clock(a) - clock(b);\n }\n\n /**\n * Whether a typed date must be rejected. Covers `dateFilter` as well as the\n * bounds — the calendar disables filtered days, so accepting them from the\n * keyboard would make the two entry paths disagree.\n */\n private isOutOfBounds(date: Date): boolean {\n const min = this.minDate();\n if (min && this.adapter.compareDate(date, min) < 0) return true;\n const max = this.maxDate();\n if (max && this.adapter.compareDate(date, max) > 0) return true;\n const filter = this.dateFilter();\n if (filter && !filter(date)) return true;\n return false;\n }\n\n private sameDate(a: Date | null, b: Date | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return a.getTime() === b.getTime();\n }\n\n private sameRange(a: WrDateRange | null, b: WrDateRange | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return this.sameDate(a[0], b[0]) && this.sameDate(a[1], b[1]);\n }\n}\n","<wr-input-group>\n <input\n #startInput\n wrInput\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n class=\"wr-date-range-picker__input\"\n [attr.aria-label]=\"startLabel\"\n [value]=\"startText()\"\n [placeholder]=\"startPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (click)=\"openOnInput()\"\n (input)=\"onStartInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <span class=\"wr-date-range-picker__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n <input\n wrInput\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n class=\"wr-date-range-picker__input\"\n [attr.aria-label]=\"endLabel\"\n [value]=\"endText()\"\n [placeholder]=\"endPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (click)=\"openOnInput()\"\n (input)=\"onEndInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <button\n type=\"button\"\n wrInputSuffix\n class=\"wr-date-picker__trigger\"\n [attr.aria-label]=\"triggerLabel\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"overlayOpen()\"\n [disabled]=\"disabled()\"\n (click)=\"toggleOverlay()\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <rect x=\"1.5\" y=\"2.5\" width=\"11\" height=\"10\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"1.5\" y1=\"5.5\" x2=\"12.5\" y2=\"5.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"4\" y1=\"1\" x2=\"4\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n <line x1=\"10\" y1=\"1\" x2=\"10\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n @if (isDateTime()) {\n <circle cx=\"7\" cy=\"9\" r=\"1.5\" fill=\"currentColor\" />\n }\n </svg>\n </button>\n</wr-input-group>\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":"ngwr-date-picker.mjs","sources":["../../../projects/lib/date-picker/internal/time-panel.ts","../../../projects/lib/date-picker/internal/time-panel.html","../../../projects/lib/date-picker/internal/date-time-panel.ts","../../../projects/lib/date-picker/internal/date-time-panel.html","../../../projects/lib/date-picker/date-picker.ts","../../../projects/lib/date-picker/date-picker.html","../../../projects/lib/date-picker/internal/date-range-panel.ts","../../../projects/lib/date-picker/internal/date-range-panel.html","../../../projects/lib/date-picker/date-range-picker.ts","../../../projects/lib/date-picker/date-range-picker.html","../../../projects/lib/date-picker/ngwr-date-picker.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport { WrDateAdapter, WR_DATE_LOCALE } from 'ngwr/date-adapter';\nimport { clamp } from 'ngwr/utils';\n\nfunction pad(n: number): string {\n return String(n).padStart(2, '0');\n}\n\n/** Wraps a value into `[0, modulus)` so steppers cycle nicely. */\nfunction wrap(v: number, modulus: number): number {\n return ((v % modulus) + modulus) % modulus;\n}\n\n/** Detect whether a locale uses 12-hour time by default. */\nfunction isLocaleHour12(locale: string): boolean {\n try {\n return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).resolvedOptions().hour12 === true;\n } catch {\n return false;\n }\n}\n\n/**\n * Internal time stepper panel rendered by `<wr-date-picker mode=\"time\">`\n * (standalone) and `mode=\"datetime\"` (composed with the calendar). Not part\n * of the public API — use `<wr-date-picker mode=\"time\">` instead.\n *\n * @internal\n */\n@Component({\n selector: 'wr-time-picker',\n templateUrl: './time-panel.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n})\nexport class WrTimePanel implements FormValueControl<Date | null> {\n /** 12 / 24-hour mode. @default 'auto' (derived from the locale) */\n readonly format = input<'auto' | '12h' | '24h'>('auto');\n\n /** Render a third column for seconds. @default false */\n readonly showSeconds = input(false, { transform: coerceBooleanProperty });\n\n /** Step applied to minutes / seconds steppers. @default 1 */\n readonly step = input(1, { transform: (v: unknown): number => Math.max(1, coerceNumberProperty(v, 1)) });\n\n /** Disable interaction. @default false */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Read-only — values cannot be changed. @default false */\n readonly readonly = input(false, { transform: coerceBooleanProperty });\n\n /**\n * Move focus onto the hours field once the panel is on screen. Off by\n * default — see `WrCalendar.autoFocus` for why. @default false\n */\n readonly autoFocus = input(false, { transform: coerceBooleanProperty });\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly locale = inject(WR_DATE_LOCALE);\n\n /**\n * Form value — the selected time as a `Date` (its date portion is preserved).\n * A signal-forms native control: `[formField]` binds this directly, and\n * `[(ngModel)]` / `[(value)]` bind it through Angular's bridge.\n */\n readonly value = model<Date | null>(null);\n\n /** Emitted on blur so a bound field can mark itself touched. */\n readonly touch = output<void>();\n\n /** Source of truth — stores h/m/s in 24-hour form. */\n protected readonly hours = signal(0);\n protected readonly minutes = signal(0);\n protected readonly seconds = signal(0);\n\n /** Date portion preserved across updates (today's date if none was supplied). */\n private readonly basis = signal<Date>(this.adapter.today());\n\n protected readonly effectiveDisabled = computed(() => this.disabled());\n\n constructor() {\n // The hours field, not the increment button: a stepper is a shortcut, the\n // number is the control. Deferred because the inputs are not in the DOM\n // until the panel's first change-detection pass.\n afterNextRender(() => {\n if (!this.autoFocus()) return;\n this.host.nativeElement.querySelector<HTMLInputElement>('.wr-time-picker__input')?.focus();\n });\n\n // Mirror an external `value` write into the internal h/m/s state (the old\n // `writeValue` body). Guarded against the echo of our own `emit()` so a live\n // edit is never clobbered by re-deriving it.\n effect(() => {\n const value = this.value();\n untracked(() => {\n if (value === this.lastEmitted) return;\n if (value && this.adapter.isValid(value)) {\n this.basis.set(this.adapter.clone(value));\n this.hours.set(this.adapter.getHours(value));\n this.minutes.set(this.adapter.getMinutes(value));\n this.seconds.set(this.adapter.getSeconds(value));\n } else {\n this.basis.set(this.adapter.today());\n this.hours.set(0);\n this.minutes.set(0);\n this.seconds.set(0);\n }\n });\n });\n }\n\n protected readonly interactive = computed(() => !this.effectiveDisabled() && !this.readonly());\n\n /** Resolved format — turns 'auto' into '12h' or '24h' based on the locale. */\n protected readonly is12h = computed(() => {\n const f = this.format();\n if (f === '12h') return true;\n if (f === '24h') return false;\n return isLocaleHour12(this.locale);\n });\n\n /** Hours value shown in the input (1-12 in 12h mode, 0-23 otherwise). */\n protected readonly displayHours = computed(() => {\n if (!this.is12h()) return this.hours();\n const h = this.hours() % 12;\n return h === 0 ? 12 : h;\n });\n\n protected readonly isPm = computed(() => this.hours() >= 12);\n\n protected readonly amPmLabel = computed(() => (this.isPm() ? 'PM' : 'AM'));\n\n protected readonly hoursDisplay = computed(() => pad(this.displayHours()));\n protected readonly minutesDisplay = computed(() => pad(this.minutes()));\n protected readonly secondsDisplay = computed(() => pad(this.seconds()));\n\n protected readonly classes = computed(() => {\n const parts = ['wr-time-picker'];\n if (this.is12h()) parts.push('wr-time-picker--12h');\n if (this.showSeconds()) parts.push('wr-time-picker--with-seconds');\n if (this.effectiveDisabled()) parts.push('wr-time-picker--disabled');\n return parts.join(' ');\n });\n\n /** Last value we pushed via `emit()`, so the sync effect can skip the echo. */\n private lastEmitted: Date | null = null;\n\n // Typed-input handlers\n\n protected onHoursInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n // An emptied box is someone mid-retype, not a request for zero: `Number('')`\n // is 0, so committing here rewrote the field they had just cleared.\n if (!raw.trim()) return;\n const n = Number(raw);\n if (Number.isNaN(n)) return;\n if (this.is12h()) {\n const h12 = clamp(Math.trunc(n), 1, 12) % 12;\n this.hours.set(this.isPm() ? h12 + 12 : h12);\n } else {\n this.hours.set(clamp(Math.trunc(n), 0, 23));\n }\n this.emit();\n }\n\n protected onMinutesInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n // An emptied box is someone mid-retype, not a request for zero: `Number('')`\n // is 0, so committing here rewrote the field they had just cleared.\n if (!raw.trim()) return;\n const n = Number(raw);\n if (Number.isNaN(n)) return;\n this.minutes.set(clamp(Math.trunc(n), 0, 59));\n this.emit();\n }\n\n protected onSecondsInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n // An emptied box is someone mid-retype, not a request for zero: `Number('')`\n // is 0, so committing here rewrote the field they had just cleared.\n if (!raw.trim()) return;\n const n = Number(raw);\n if (Number.isNaN(n)) return;\n this.seconds.set(clamp(Math.trunc(n), 0, 59));\n this.emit();\n }\n\n protected onBlur(): void {\n this.touch.emit();\n }\n\n // Stepper handlers (▲ / ▼ buttons)\n\n protected stepHours(direction: 1 | -1): void {\n if (!this.interactive()) return;\n this.hours.set(wrap(this.hours() + direction, 24));\n this.emit();\n }\n\n protected stepMinutes(direction: 1 | -1): void {\n if (!this.interactive()) return;\n this.minutes.set(wrap(this.minutes() + direction * this.step(), 60));\n this.emit();\n }\n\n protected stepSeconds(direction: 1 | -1): void {\n if (!this.interactive()) return;\n this.seconds.set(wrap(this.seconds() + direction * this.step(), 60));\n this.emit();\n }\n\n protected toggleAmPm(): void {\n if (!this.interactive()) return;\n // ±12 hours flips AM ↔ PM; wrap handles overflow.\n this.hours.set(wrap(this.hours() + 12, 24));\n this.emit();\n }\n\n // Emission\n\n private emit(): void {\n const next = this.adapter.setTime(this.basis(), this.hours(), this.minutes(), this.seconds());\n this.lastEmitted = next;\n this.value.set(next);\n }\n}\n","<div class=\"wr-time-picker__col\">\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--up\"\n aria-label=\"Increment hours\"\n [disabled]=\"!interactive()\"\n (click)=\"stepHours(1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n </button>\n <input\n class=\"wr-time-picker__input\"\n type=\"text\"\n inputmode=\"numeric\"\n aria-label=\"Hours\"\n [value]=\"hoursDisplay()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onHoursInput($event)\"\n (blur)=\"onBlur()\"\n />\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--down\"\n aria-label=\"Decrement hours\"\n [disabled]=\"!interactive()\"\n (click)=\"stepHours(-1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n</div>\n\n<span class=\"wr-time-picker__sep\" aria-hidden=\"true\">:</span>\n\n<div class=\"wr-time-picker__col\">\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--up\"\n aria-label=\"Increment minutes\"\n [disabled]=\"!interactive()\"\n (click)=\"stepMinutes(1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n </button>\n <input\n class=\"wr-time-picker__input\"\n type=\"text\"\n inputmode=\"numeric\"\n aria-label=\"Minutes\"\n [value]=\"minutesDisplay()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onMinutesInput($event)\"\n (blur)=\"onBlur()\"\n />\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--down\"\n aria-label=\"Decrement minutes\"\n [disabled]=\"!interactive()\"\n (click)=\"stepMinutes(-1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n</div>\n\n@if (showSeconds()) {\n <span class=\"wr-time-picker__sep\" aria-hidden=\"true\">:</span>\n\n <div class=\"wr-time-picker__col\">\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--up\"\n aria-label=\"Increment seconds\"\n [disabled]=\"!interactive()\"\n (click)=\"stepSeconds(1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n </button>\n <input\n class=\"wr-time-picker__input\"\n type=\"text\"\n inputmode=\"numeric\"\n aria-label=\"Seconds\"\n [value]=\"secondsDisplay()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onSecondsInput($event)\"\n (blur)=\"onBlur()\"\n />\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--down\"\n aria-label=\"Decrement seconds\"\n [disabled]=\"!interactive()\"\n (click)=\"stepSeconds(-1)\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </div>\n}\n\n@if (is12h()) {\n <div class=\"wr-time-picker__col wr-time-picker__col--ampm\">\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--up\"\n aria-label=\"Toggle AM / PM\"\n [disabled]=\"!interactive()\"\n (click)=\"toggleAmPm()\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n </button>\n <span class=\"wr-time-picker__label\" aria-live=\"polite\">{{ amPmLabel() }}</span>\n <button\n type=\"button\"\n class=\"wr-time-picker__step wr-time-picker__step--down\"\n aria-label=\"Toggle AM / PM\"\n [disabled]=\"!interactive()\"\n (click)=\"toggleAmPm()\"\n >\n <svg\n class=\"wr-time-picker__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </div>\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, ViewEncapsulation, computed, inject, input, output } from '@angular/core';\n\nimport { WrCalendar } from 'ngwr/calendar';\nimport { WrDateAdapter } from 'ngwr/date-adapter';\n\nimport { WrTimePanel } from './time-panel';\n\n/**\n * Internal panel that stacks a `<wr-calendar>` and a `<wr-time-picker>`,\n * combining their selections into a single `Date`. Owned by\n * `<wr-date-picker mode=\"datetime\">` — not part of the public API.\n *\n * @internal\n */\n@Component({\n selector: 'wr-date-time-panel',\n templateUrl: './date-time-panel.html',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-date-time-panel' },\n imports: [WrCalendar, WrTimePanel],\n})\nexport class WrDateTimePanel {\n readonly value = input<Date | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly dateFilter = input<((date: Date) => boolean) | null>(null);\n readonly timeFormat = input<'auto' | '12h' | '24h'>('auto');\n readonly showSeconds = input(false);\n readonly step = input(1);\n\n /**\n * Forwarded to the calendar only: a datetime panel opened from the keyboard\n * lands on the day grid, never on the hours field. Picking the date first is\n * the order the panel is laid out in, and the time fields are one Tab away.\n */\n readonly autoFocus = input(false);\n\n readonly changed = output<Date>();\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n\n /** Date portion used by the calendar — falls back to today when value is null. */\n protected readonly calendarValue = computed(() => this.value() ?? this.adapter.today());\n\n /** Value passed to the time picker — falls back to today (00:00) when null. */\n protected readonly timeValue = computed(() => this.value() ?? this.adapter.today());\n\n protected onCalendarSelect(date: Date | null): void {\n if (!date) return;\n const base = this.value() ?? this.adapter.today();\n const combined = this.adapter.setTime(\n this.adapter.createDate(this.adapter.getYear(date), this.adapter.getMonth(date), this.adapter.getDate(date)),\n this.adapter.getHours(base),\n this.adapter.getMinutes(base),\n this.adapter.getSeconds(base)\n );\n this.changed.emit(combined);\n }\n\n protected onTimeChange(time: Date | null): void {\n if (!time) return;\n const base = this.value() ?? this.adapter.today();\n const combined = this.adapter.setTime(\n this.adapter.createDate(this.adapter.getYear(base), this.adapter.getMonth(base), this.adapter.getDate(base)),\n this.adapter.getHours(time),\n this.adapter.getMinutes(time),\n this.adapter.getSeconds(time)\n );\n this.changed.emit(combined);\n }\n}\n","<wr-calendar\n [date]=\"calendarValue()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateFilter]=\"dateFilter()\"\n [autoFocus]=\"autoFocus()\"\n (dateChange)=\"onCalendarSelect($event)\"\n/>\n\n<div class=\"wr-date-time-panel__time\">\n <wr-time-picker\n [value]=\"timeValue()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [step]=\"step()\"\n (valueChange)=\"onTimeChange($event)\"\n />\n</div>\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { type OverlayRef, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Component,\n type ComponentRef,\n DestroyRef,\n ElementRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport { WrCalendar } from 'ngwr/calendar';\nimport { WrDateAdapter, type WrDateFormat } from 'ngwr/date-adapter';\nimport { readI18nText, useI18nText } from 'ngwr/i18n';\nimport { WrInput, WrInputGroup, WrInputSuffix } from 'ngwr/input';\nimport { WR_OVERLAY, WrOutsideClick } from 'ngwr/overlay';\n\nimport { WrDateTimePanel } from './internal/date-time-panel';\nimport { WrTimePanel } from './internal/time-panel';\n\nlet panelUid = 0;\n\n/**\n * Unified date / time / date-time picker. Same `<input>` + popover skeleton\n * for every mode — the overlay content swaps based on `[mode]`:\n *\n * - `'date'` (default) — popover renders a calendar. Picking a date closes\n * the overlay.\n * - `'time'` — popover renders an `HH:MM[:SS]` stepper with optional AM/PM.\n * Stays open while editing; close with outside-click or Escape.\n * - `'datetime'` — popover stacks calendar + time stepper. Picking a date\n * does NOT close (the user typically wants to set the time next).\n *\n * A signal-forms native control: it implements `FormValueControl<Date | null>`,\n * so `[formField]` binds straight to its `value` model — no\n * `ControlValueAccessor` in between. `[(value)]` works standalone, and classic\n * `[(ngModel)]` / reactive forms keep working through Angular's bridge. Value\n * type is `Date | null` for every mode.\n *\n * Parses the input on every keystroke (silently — only emits when valid) and\n * re-formats canonical on blur. Format is driven by {@link WrDateAdapter}: it\n * accepts both named keys (`'shortDate'`, `'mediumDateTime'`, …) and raw\n * token strings (`'dd.MM.yyyy'`, `'HH:mm'`). When `format` is left at the\n * default (`null`), the picker derives the right named key from `mode`:\n * `'date'` gives `'shortDate'`, `'time'` gives `'time'`, `'datetime'` gives\n * `'shortDateTime'`.\n *\n * @example\n * ```html\n * <!-- signal forms -->\n * <wr-date-picker [formField]=\"form.picked\" format=\"dd.MM.yyyy\" [min]=\"minDate\" />\n *\n * <!-- standalone two-way binding, date only -->\n * <wr-date-picker [(value)]=\"picked\" format=\"dd.MM.yyyy\" [min]=\"minDate\" />\n *\n * <!-- Time only -->\n * <wr-date-picker mode=\"time\" [(value)]=\"picked\" timeFormat=\"24h\" />\n *\n * <!-- Date + time -->\n * <wr-date-picker mode=\"datetime\" [(value)]=\"when\" [showSeconds]=\"true\" [step]=\"5\" />\n * ```\n *\n * @see https://ngwr.dev/reference/components/date-picker\n */\n@Component({\n selector: 'wr-date-picker',\n templateUrl: './date-picker.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n imports: [WrInput, WrInputGroup, WrInputSuffix],\n})\nexport class WrDatePicker implements FormValueControl<Date | null> {\n /** Picker behavior — see class doc. @default 'date' */\n readonly mode = input<'date' | 'time' | 'datetime'>('date');\n\n /**\n * Format used for both display and parsing. When `null` (default), the\n * format is derived from `mode` (`shortDate` / `time` / `shortDateTime`).\n * Pass a named key or raw token string to override.\n */\n readonly format = input<WrDateFormat | (string & {}) | null>(null);\n\n /** Placeholder shown when the input is empty. */\n readonly placeholder = input<string>('');\n\n // Typed `Date | undefined` (not `Date | null`) to satisfy the reserved\n // `FormUiControl` min/max slots, which are keyed to the control's value type\n // and want `Date | undefined`. Both null and undefined stay falsy, so the\n // internal bounds checks below are unaffected.\n /** Min selectable date (forwarded to the calendar). Ignored in `time` mode. */\n readonly min = input<Date | undefined>(undefined);\n\n /** Max selectable date (forwarded to the calendar). Ignored in `time` mode. */\n readonly max = input<Date | undefined>(undefined);\n\n /** Predicate to disable specific dates (forwarded to the calendar). Ignored in `time` mode. */\n readonly dateFilter = input<((date: Date) => boolean) | null>(null);\n\n /** Time-panel 12 / 24-hour format. Applies in `time` + `datetime` modes. @default 'auto' */\n readonly timeFormat = input<'auto' | '12h' | '24h'>('auto');\n\n /** Render the seconds column. Applies in `time` + `datetime` modes. @default false */\n readonly showSeconds = input(false, { transform: coerceBooleanProperty });\n\n /** Minute / second step for the time panel. @default 1 */\n readonly step = input(1, { transform: (v: unknown): number => Math.max(1, coerceNumberProperty(v, 1)) });\n\n /**\n * Disable interaction. Bound automatically from the field's disabled state\n * when used with `[formField]`.\n *\n * @default false\n */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Read-only — input not typeable, but the trigger icon still opens the overlay. @default false */\n readonly readonly = input(false, { transform: coerceBooleanProperty });\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n private readonly overlay = inject(WR_OVERLAY);\n private readonly outsideClick = inject(WrOutsideClick);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n protected readonly inputEl = viewChild.required<ElementRef<HTMLInputElement>>('input');\n protected readonly triggerEl = viewChild<ElementRef<HTMLButtonElement>>('trigger');\n\n /** The picked Date. Bound by `[formField]`, or two-way via `[(value)]`. */\n readonly value = model<Date | null>(null);\n\n /** Emitted on blur so a bound field can mark itself touched. */\n readonly touch = output<void>();\n\n /** Text currently in the input (may be partial / invalid mid-type). */\n protected readonly text = signal<string>('');\n\n /** Whether the popover is currently open. */\n protected readonly overlayOpen = signal(false);\n\n /**\n * Where focus came from, captured as an explicit argument at open time —\n * never read off `document.activeElement`, which by then may already be the\n * pane. Every close path that took focus INTO the panel hands it back here.\n */\n private openedFrom: HTMLElement | null = null;\n\n /** Whether the panel this open cycle should take focus. */\n private autoFocusPanel = false;\n\n /** Resolved format — falls back to a mode-appropriate default. */\n protected readonly resolvedFormat = computed<string>(() => {\n const explicit = this.format();\n if (explicit) return explicit;\n const m = this.mode();\n if (m === 'datetime') return 'shortDateTime';\n // `time`, not `shortTime` — the latter is not a member of WrDateFormat, so\n // adapters fell through to treating it as a raw token pattern. date-fns then\n // threw on the unescaped letters; the native adapter degraded silently.\n if (m === 'time') return 'time';\n return 'shortDate';\n });\n\n protected readonly isTime = computed(() => this.mode() === 'time');\n protected readonly isDateTime = computed(() => this.mode() === 'datetime');\n\n // Resolved at injection time — i18n catalog reads pick up live locale\n // changes via re-render of the host attribute binding.\n private readonly labelDate = readI18nText('datePicker.open', 'Open calendar');\n private readonly labelTime = readI18nText('datePicker.openTime', 'Open time picker');\n private readonly labelDateTime = readI18nText('datePicker.openDateTime', 'Open date and time picker');\n\n private readonly panelLabelDate = readI18nText('datePicker.panel', 'Choose date');\n private readonly panelLabelTime = readI18nText('datePicker.panelTime', 'Choose time');\n private readonly panelLabelDateTime = readI18nText('datePicker.panelDateTime', 'Choose date and time');\n\n /**\n * Accessible name of the text field. Falls back to the placeholder, then to\n * the same catalog string the calendar button uses — the field is a\n * `role=\"combobox\"`, and with an empty placeholder it had no name at all.\n */\n readonly ariaLabel = input<string | null>(null);\n\n private readonly fieldLabel = useI18nText(this.ariaLabel, 'datePicker.open', 'Open calendar');\n protected readonly resolvedAriaLabel = computed(() => {\n // Not `??`: an empty placeholder must fall through to the catalog string.\n const explicit = this.ariaLabel();\n if (explicit) return explicit;\n const placeholder = this.placeholder();\n return placeholder ? placeholder : this.fieldLabel();\n });\n\n protected readonly triggerLabel = computed(() => {\n const m = this.mode();\n if (m === 'time') return this.labelTime;\n if (m === 'datetime') return this.labelDateTime;\n return this.labelDate;\n });\n\n /**\n * Accessible name of the popup. The trigger advertises\n * `aria-haspopup=\"dialog\"`, so the panel is a `role=\"dialog\"` — and an unnamed\n * dialog announces as a bare \"dialog\". Defaults to the catalog's\n * `datePicker.panel*` string for the current `mode`.\n */\n readonly panelAriaLabel = input<string | null>(null);\n\n /** Popup id — what the trigger's `aria-controls` points at while open. */\n protected readonly panelId = `wr-date-picker-panel-${++panelUid}`;\n\n protected readonly resolvedPanelLabel = computed(() => {\n const explicit = this.panelAriaLabel();\n if (explicit) return explicit;\n const m = this.mode();\n if (m === 'time') return this.panelLabelTime;\n if (m === 'datetime') return this.panelLabelDateTime;\n return this.panelLabelDate;\n });\n\n protected readonly classes = computed(() => {\n const parts = ['wr-date-picker', `wr-date-picker--${this.mode()}`];\n if (this.disabled()) parts.push('wr-date-picker--disabled');\n return parts.join(' ');\n });\n\n private overlayRef: OverlayRef | null = null;\n\n /** Live calendar ref while the date popover is open — lets the panel track\n * the typed value in real time (not just on reopen). */\n private readonly dateRef = signal<ComponentRef<WrCalendar> | null>(null);\n private readonly timeRef = signal<ComponentRef<WrTimePanel> | null>(null);\n private readonly dateTimeRef = signal<ComponentRef<WrDateTimePanel> | null>(null);\n\n /** The last value an open panel handed us, so the live push never echoes it back. */\n private lastFromPanel: Date | null = null;\n\n /** Last value we pushed into the model ourselves — lets the sync effect\n * skip the echo of our own edits (so a live keystroke's raw text is never\n * reformatted mid-type). */\n private lastValue: Date | null = null;\n\n constructor() {\n this.destroyRef.onDestroy(() => this.dispose());\n\n // Mirror external writes to `value` (from `[formField]`, `[(value)]`, or a\n // classic-forms bridge) into the display text — this is the old\n // `writeValue` body. Wrapped so it reacts only to `value()`; the echo of\n // our own edits is skipped, and a null/undefined write is tolerated (it\n // clears the text, exactly as the old `writeValue(Date | null)` did).\n effect(() => {\n const v = this.value();\n untracked(() => {\n if (this.sameDate(v, this.lastValue)) return;\n this.lastValue = v;\n this.text.set(v && this.adapter.isValid(v) ? this.adapter.format(v, this.resolvedFormat()) : '');\n });\n });\n\n // While the calendar popover is open, push every valid typed value into it\n // so the displayed month follows the input live (the calendar snaps its\n // own viewDate to the bound `date`).\n effect(() => {\n const ref = this.dateRef();\n if (ref) ref.setInput('date', this.value());\n });\n\n // …and the constraints with it. Pushing these only at attach time meant a\n // `[min]` (or `[max]`, or the filter) that changed while the popover was open\n // kept the stale constraint until the next reopen — `wr-date-range-picker`\n // carries the same effect under a comment saying exactly that.\n effect(() => {\n const ref = this.dateRef();\n if (!ref) return;\n ref.setInput('min', this.min());\n ref.setInput('max', this.max());\n ref.setInput('dateFilter', this.dateFilter());\n });\n\n effect(() => {\n const ref = this.timeRef();\n if (!ref) return;\n ref.setInput('format', this.timeFormat());\n ref.setInput('showSeconds', this.showSeconds());\n ref.setInput('step', this.step());\n });\n\n // The datetime panel had no live sync at all: a date typed into the field\n // while it was open never reached it, so the next stepper click emitted the\n // panel's own stale value and silently undid the typing.\n effect(() => {\n const ref = this.dateTimeRef();\n if (!ref) return;\n const value = this.value();\n if (value !== this.lastFromPanel) ref.setInput('value', value);\n ref.setInput('min', this.min());\n ref.setInput('max', this.max());\n ref.setInput('dateFilter', this.dateFilter());\n ref.setInput('timeFormat', this.timeFormat());\n ref.setInput('showSeconds', this.showSeconds());\n ref.setInput('step', this.step());\n });\n }\n\n // Template handlers\n\n protected onInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n this.text.set(raw);\n if (!raw) {\n this.commitValue(null);\n return;\n }\n const parsed = this.adapter.parse(raw, this.resolvedFormat());\n if (parsed && this.adapter.isValid(parsed) && !this.isOutOfBounds(parsed)) {\n this.commitValue(parsed);\n }\n }\n\n protected onBlur(): void {\n this.touch.emit();\n // Reformat to canonical on blur (cleans up `1/5/25` → `1/5/2025`).\n const v = this.value();\n if (v && this.adapter.isValid(v)) {\n this.text.set(this.adapter.format(v, this.resolvedFormat()));\n } else if (!this.text()) {\n this.commitValue(null);\n }\n }\n\n /** Called by the input's click — opens the overlay if it isn't open already. */\n protected openOnInput(): void {\n if (this.disabled() || this.overlayRef) return;\n // Deliberately WITHOUT focus: this click placed a caret in the text field,\n // and yanking focus into the grid would throw away what the user just did.\n // `Alt+ArrowDown` / `ArrowDown` are the keyboard way in — see onFieldKey.\n this.openOverlay(this.inputEl().nativeElement, false);\n }\n\n protected toggleOverlay(): void {\n if (this.disabled()) return;\n if (this.overlayRef) {\n // Focus is already on the trigger — nothing to restore.\n this.closeOverlay();\n } else {\n this.openOverlay(this.triggerEl()?.nativeElement ?? null, true);\n }\n }\n\n /**\n * The keyboard route into the panel, per the APG date-picker pattern.\n *\n * `Alt+ArrowDown` opens and takes focus; a bare arrow moves focus in when the\n * panel is ALREADY open, which is how someone who opened it by clicking the\n * field gets to the grid. Every other key — characters, Backspace, the\n * horizontal arrows, Home / End — is left to the field untouched, so typing a\n * date keeps working exactly as before.\n */\n protected onFieldKey(event: KeyboardEvent): void {\n if (this.disabled()) return;\n\n const vertical = event.key === 'ArrowDown' || event.key === 'ArrowUp';\n if (!vertical) return;\n\n if (event.altKey && event.key === 'ArrowDown' && !this.overlayRef) {\n event.preventDefault();\n this.openOverlay(this.inputEl().nativeElement, true);\n return;\n }\n\n if (this.overlayRef) {\n event.preventDefault();\n this.focusPanel();\n }\n }\n\n /**\n * Move focus into an already-mounted panel. A plain query is right HERE and\n * wrong at mount time: the panel has settled, so there is no deferral to get\n * wrong — and it keeps `autoFocus` as the single piece of panel API.\n */\n private focusPanel(): void {\n const pane = this.overlayRef?.overlayElement;\n const target =\n pane?.querySelector<HTMLElement>('.wr-calendar__day--focused:not([disabled])') ??\n pane?.querySelector<HTMLElement>('.wr-time-picker__input');\n target?.focus();\n }\n\n /** Hand focus back to whatever opened the panel, if it is still on the page. */\n private restoreFocus(): void {\n const target = this.openedFrom?.isConnected ? this.openedFrom : this.inputEl().nativeElement;\n target?.focus();\n }\n\n // Overlay\n\n private openOverlay(openedFrom: HTMLElement | null = null, autoFocus = false): void {\n if (this.overlayRef) return;\n this.openedFrom = openedFrom;\n this.autoFocusPanel = autoFocus;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.host)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n ])\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.scrollStrategies.reposition(),\n panelClass: 'wr-date-picker-overlay',\n });\n\n // The trigger promises `aria-haspopup=\"dialog\"`; the pane is the element it\n // points at, so the role, the name and the id all belong here. Non-modal on\n // purpose — focus is not trapped, and the panel closes on outside click or\n // Escape.\n const pane = this.overlayRef.overlayElement;\n pane.id = this.panelId;\n pane.setAttribute('role', 'dialog');\n pane.setAttribute('aria-modal', 'false');\n pane.setAttribute('aria-label', this.resolvedPanelLabel());\n\n this.overlayOpen.set(true);\n\n // Dispatch by mode — pick the panel + wire its emissions.\n const m = this.mode();\n if (m === 'time') this.attachTime();\n else if (m === 'datetime') this.attachDateTime();\n else this.attachDate();\n\n this.outsideClick\n .outsidePointerEvents(this.overlayRef)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (this.host.nativeElement.contains(event.target as Node)) return;\n this.closeOverlay();\n });\n\n this.overlayRef\n .keydownEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closeOverlay();\n this.inputEl().nativeElement.focus();\n }\n });\n }\n\n private attachDate(): void {\n if (!this.overlayRef) return;\n const ref = this.overlayRef.attach(new ComponentPortal(WrCalendar));\n ref.setInput('date', this.value());\n this.dateRef.set(ref);\n ref.setInput('min', this.min());\n ref.setInput('max', this.max());\n ref.setInput('dateFilter', this.dateFilter());\n ref.setInput('autoFocus', this.autoFocusPanel);\n ref.instance.date.subscribe(next => {\n if (!next) return;\n this.commit(next);\n this.closeOverlay();\n });\n }\n\n private attachTime(): void {\n if (!this.overlayRef) return;\n const ref = this.overlayRef.attach(new ComponentPortal(WrTimePanel));\n ref.setInput('format', this.timeFormat());\n ref.setInput('showSeconds', this.showSeconds());\n ref.setInput('step', this.step());\n ref.setInput('autoFocus', this.autoFocusPanel);\n ref.setInput('value', this.value() ?? this.adapter.today());\n this.timeRef.set(ref);\n ref.instance.value.subscribe((next: Date | null) => {\n if (!next) return;\n this.lastFromPanel = next;\n this.commit(next);\n });\n }\n\n private attachDateTime(): void {\n if (!this.overlayRef) return;\n const ref = this.overlayRef.attach(new ComponentPortal(WrDateTimePanel));\n ref.setInput('value', this.value());\n ref.setInput('min', this.min());\n ref.setInput('max', this.max());\n ref.setInput('dateFilter', this.dateFilter());\n ref.setInput('timeFormat', this.timeFormat());\n ref.setInput('showSeconds', this.showSeconds());\n ref.setInput('step', this.step());\n ref.setInput('autoFocus', this.autoFocusPanel);\n this.dateTimeRef.set(ref);\n ref.instance.changed.subscribe(next => {\n this.lastFromPanel = next;\n this.commit(next);\n ref.setInput('value', next);\n });\n }\n\n private commit(next: Date): void {\n this.text.set(this.adapter.format(next, this.resolvedFormat()));\n this.commitValue(next);\n }\n\n /** Push a value to the model while remembering it, so the sync effect treats\n * the resulting change as an echo and leaves the display text alone. */\n private commitValue(next: Date | null): void {\n this.lastValue = next;\n this.value.set(next);\n }\n\n /**\n * Focus goes back to the opener only when it was still INSIDE the panel —\n * dropped there, it would land on `<body>` and the next Tab would restart\n * from the top of the page. When focus had already moved elsewhere (a click\n * on another control, which is itself what closed us) it is left alone:\n * stealing it back would fight the user for the caret.\n */\n private closeOverlay(): void {\n const pane = this.overlayRef?.overlayElement;\n const inside = !!pane && pane.contains(document.activeElement);\n\n this.dispose();\n\n if (inside) this.restoreFocus();\n }\n\n private dispose(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.dateRef.set(null);\n this.timeRef.set(null);\n this.dateTimeRef.set(null);\n this.overlayOpen.set(false);\n this.autoFocusPanel = false;\n }\n\n // Helpers\n\n private isOutOfBounds(date: Date): boolean {\n if (this.mode() === 'time') return false;\n const min = this.min();\n if (min && this.adapter.compareDate(date, min) < 0) return true;\n const max = this.max();\n if (max && this.adapter.compareDate(date, max) > 0) return true;\n // Covers `dateFilter` as well as the bounds — the calendar disables filtered\n // days, so accepting them from the keyboard made the two entry paths\n // disagree. Same check, same reason, as `wr-date-range-picker`.\n const filter = this.dateFilter();\n if (filter && !filter(date)) return true;\n return false;\n }\n\n private sameDate(a: Date | null, b: Date | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return a.getTime() === b.getTime();\n }\n}\n","<wr-input-group>\n <!--\n A plain textbox, per the APG date-picker-dialog pattern: `aria-haspopup` and\n `aria-expanded` are not permitted on `textbox` and belong to the trigger\n button below, which is the thing that opens the dialog.\n -->\n <input\n #input\n wrInput\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.aria-label]=\"resolvedAriaLabel()\"\n [value]=\"text()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (click)=\"openOnInput()\"\n (keydown)=\"onFieldKey($event)\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n <button\n #trigger\n type=\"button\"\n wrInputSuffix\n class=\"wr-date-picker__trigger\"\n [attr.aria-label]=\"triggerLabel()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"overlayOpen()\"\n [attr.aria-controls]=\"overlayOpen() ? panelId : null\"\n [disabled]=\"disabled()\"\n (click)=\"toggleOverlay()\"\n >\n @if (isTime()) {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <circle cx=\"7\" cy=\"7\" r=\"5.75\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"7\" y1=\"7\" x2=\"7\" y2=\"3.75\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n <line x1=\"7\" y1=\"7\" x2=\"9.5\" y2=\"7\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n </svg>\n } @else {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <rect x=\"1.5\" y=\"2.5\" width=\"11\" height=\"10\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"1.5\" y1=\"5.5\" x2=\"12.5\" y2=\"5.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"4\" y1=\"1\" x2=\"4\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n <line x1=\"10\" y1=\"1\" x2=\"10\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n @if (isDateTime()) {\n <circle cx=\"7\" cy=\"9\" r=\"1.5\" fill=\"currentColor\" />\n }\n </svg>\n }\n </button>\n</wr-input-group>\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, ViewEncapsulation, computed, inject, input, output, signal } from '@angular/core';\n\nimport { WrCalendar, type WrCalendarRange } from 'ngwr/calendar';\nimport { WrDateAdapter } from 'ngwr/date-adapter';\nimport { readI18nText } from 'ngwr/i18n';\n\nimport type { WrDateRange } from '../interfaces';\n\nimport { WrTimePanel } from './time-panel';\n\n/**\n * Internal panel behind `<wr-date-range-picker>`: a range-mode\n * `<wr-calendar>`, plus one `<wr-time-picker>` per end when `withTime` is on.\n * Not part of the public API.\n *\n * The calendar owns range picking (including the start/end swap and the hover\n * preview); this panel only re-attaches the times so a datetime range keeps the\n * hours the user set while the dates move around.\n *\n * The steppers bind `WrTimePanel`'s own `value` model, NOT `[ngModel]`. The\n * classic-forms bridge defers its first write, and under zoneless change\n * detection that write lost the race with the panel's own echo guard: a range\n * bound to 16:00–17:00 opened showing 00:00 on both ends, and the first click\n * on a stepper committed midnight-plus-one over the real value.\n *\n * @internal\n */\n@Component({\n selector: 'wr-date-range-panel',\n templateUrl: './date-range-panel.html',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-date-range-panel' },\n imports: [WrCalendar, WrTimePanel],\n})\nexport class WrDateRangePanel {\n readonly value = input<WrDateRange>([null, null]);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly dateFilter = input<((date: Date) => boolean) | null>(null);\n readonly withTime = input(false);\n readonly timeFormat = input<'auto' | '12h' | '24h'>('auto');\n readonly showSeconds = input(false);\n readonly step = input(1);\n\n /**\n * Forwarded to the calendar only: a range panel opened from the keyboard\n * lands on the day grid, never on a time field. Dates come first here — the\n * steppers are for the range you have already drawn.\n */\n readonly autoFocus = input(false);\n\n /** A range change from the CALENDAR — the picker is free to sort it. */\n readonly changed = output<WrDateRange>();\n\n /**\n * A range change from one of the TIME steppers, which must NOT be sorted while\n * it is happening. The steppers are bound to positions, so sorting mid-edit\n * moves the user's change to the other end: raising a same-day start past the\n * end left the start stuck and pushed the END up instead, once per click, on\n * the button the user was not pressing. Ordering is settled when the popup\n * closes — the same rule the text inputs already follow for typing.\n */\n readonly timeChanged = output<WrDateRange>();\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n\n protected readonly startTimeLabel = readI18nText('datePicker.startTime', 'Start time');\n protected readonly endTimeLabel = readI18nText('datePicker.endTime', 'End time');\n\n /**\n * A time set before its end has a date. The stepper is always live, so the\n * hours are parked here until a date arrives to carry them — otherwise the\n * edit would be silently dropped and the pick would land on midnight.\n */\n private readonly pendingStartTime = signal<Date | null>(null);\n private readonly pendingEndTime = signal<Date | null>(null);\n\n /** The calendar's own range model shape — same tuple, narrower name. */\n protected readonly calendarRange = computed<WrCalendarRange>(() => this.value());\n\n /**\n * Midnight today. The steppers need a concrete date to render, but the\n * fallback must NOT be the current wall clock: picking a date carries no time\n * across until a stepper is touched, so a `14:37` default would display a time\n * the commit never actually stores.\n */\n private readonly dayStart = computed(() => {\n const t = this.adapter.today();\n return this.adapter.createDate(this.adapter.getYear(t), this.adapter.getMonth(t), this.adapter.getDate(t));\n });\n\n /** Time steppers need a concrete date; fall back to a parked time, then midnight. */\n protected readonly startTime = computed(() => this.value()[0] ?? this.pendingStartTime() ?? this.dayStart());\n protected readonly endTime = computed(() => this.value()[1] ?? this.pendingEndTime() ?? this.dayStart());\n\n protected onRangeChange(range: WrCalendarRange): void {\n const [start, end] = range;\n const [prevStart, prevEnd] = this.value();\n\n // `WrCalendar.pickRange` restarts the range whenever it has no start, so a\n // range that was end-only (typed into the end input alone) would lose that\n // end on the next click. Read the click as filling in the missing start\n // instead; the picker orders the pair afterwards.\n const keptEnd = !prevStart && prevEnd && start && !end ? prevEnd : end;\n\n // The calendar only moves dates, so carry each end's existing time across —\n // or the time parked by a stepper that ran before this date existed.\n this.changed.emit([\n this.withTimeOf(start, prevStart ?? this.pendingStartTime()),\n this.withTimeOf(keptEnd, prevEnd ?? this.pendingEndTime()),\n ]);\n }\n\n protected onStartTimeChange(time: Date | null): void {\n if (!time) return;\n const [start, end] = this.value();\n if (!start) {\n this.pendingStartTime.set(time);\n return;\n }\n this.timeChanged.emit([this.withTimeOf(start, time), end]);\n }\n\n protected onEndTimeChange(time: Date | null): void {\n if (!time) return;\n const [start, end] = this.value();\n if (!end) {\n this.pendingEndTime.set(time);\n return;\n }\n this.timeChanged.emit([start, this.withTimeOf(end, time)]);\n }\n\n /** `date`'s calendar day carrying `time`'s clock. Null date stays null. */\n private withTimeOf(date: Date | null, time: Date | null): Date | null {\n if (!date) return null;\n if (!this.withTime() || !time) return date;\n return this.adapter.setTime(\n this.adapter.createDate(this.adapter.getYear(date), this.adapter.getMonth(date), this.adapter.getDate(date)),\n this.adapter.getHours(time),\n this.adapter.getMinutes(time),\n this.adapter.getSeconds(time)\n );\n }\n}\n","<wr-calendar\n mode=\"range\"\n [range]=\"calendarRange()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateFilter]=\"dateFilter()\"\n [autoFocus]=\"autoFocus()\"\n (rangeChange)=\"onRangeChange($event)\"\n/>\n\n@if (withTime()) {\n <div class=\"wr-date-range-panel__times\">\n <!-- A time picker is several inputs, not one control, so each end is a\n labelled group rather than a <label>. -->\n <div class=\"wr-date-range-panel__time\" role=\"group\" [attr.aria-label]=\"startTimeLabel\">\n <span class=\"wr-date-range-panel__time-label\" aria-hidden=\"true\">{{ startTimeLabel }}</span>\n <wr-time-picker\n [value]=\"startTime()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [step]=\"step()\"\n (valueChange)=\"onStartTimeChange($event)\"\n />\n </div>\n <div class=\"wr-date-range-panel__time\" role=\"group\" [attr.aria-label]=\"endTimeLabel\">\n <span class=\"wr-date-range-panel__time-label\" aria-hidden=\"true\">{{ endTimeLabel }}</span>\n <wr-time-picker\n [value]=\"endTime()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [step]=\"step()\"\n (valueChange)=\"onEndTimeChange($event)\"\n />\n </div>\n </div>\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { type OverlayRef, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Component,\n type ComponentRef,\n DestroyRef,\n ElementRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport { WrDateAdapter, type WrDateFormat } from 'ngwr/date-adapter';\nimport { readI18nText } from 'ngwr/i18n';\nimport { WrInput, WrInputGroup, WrInputSuffix } from 'ngwr/input';\nimport { WR_OVERLAY, WrOutsideClick } from 'ngwr/overlay';\n\nimport type { WrDateRange } from './interfaces';\nimport { WrDateRangePanel } from './internal/date-range-panel';\n\n/** Which end of the range an edit applies to. */\ntype RangeEnd = 0 | 1;\n\n/** Per-instance popup ids, so `aria-controls` can point at one panel. */\nlet rangePanelUid = 0;\n\n/**\n * Date-range picker — two text inputs sharing one range calendar.\n *\n * Separate from `<wr-date-picker>` because the value is a different type: a\n * range is `[start, end]`, and folding that into the single picker's\n * `Date | null` would break `[formField]` inference for every existing usage.\n * Everything else matches — same input skeleton, same overlay, same\n * {@link WrDateAdapter} formats.\n *\n * - `'date'` (default) — popover renders a range calendar. Picking the second\n * date closes the overlay.\n * - `'datetime'` — popover adds a time stepper per end. Picking dates does NOT\n * close, since the user typically sets the times next.\n *\n * A signal-forms native control: it implements\n * `FormValueControl<WrDateRange | null>`, so `[formField]` binds straight to\n * its `value` model. `[(value)]` works standalone, and classic `[(ngModel)]` /\n * reactive forms keep working through Angular's bridge.\n *\n * Either end may be `null` while the range is half-picked. Out-of-order ends\n * are swapped on commit, matching the calendar's own behaviour.\n *\n * @example\n * ```html\n * <!-- signal forms -->\n * <wr-date-range-picker [formField]=\"form.period\" format=\"dd.MM.yyyy\" />\n *\n * <!-- standalone two-way binding -->\n * <wr-date-range-picker [(value)]=\"period\" [minDate]=\"minDate\" />\n *\n * <!-- date + time on both ends -->\n * <wr-date-range-picker mode=\"datetime\" [(value)]=\"window\" timeFormat=\"24h\" />\n * ```\n *\n * @see https://ngwr.dev/reference/components/date-picker\n */\n@Component({\n selector: 'wr-date-range-picker',\n templateUrl: './date-range-picker.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n imports: [WrInput, WrInputGroup, WrInputSuffix],\n})\nexport class WrDateRangePicker implements FormValueControl<WrDateRange | null> {\n /** Picker behavior — see class doc. @default 'date' */\n readonly mode = input<'date' | 'datetime'>('date');\n\n /**\n * Format used for both display and parsing, on both ends. When `null`\n * (default), it is derived from `mode` (`shortDate` / `shortDateTime`). Pass\n * a named key or raw token string to override.\n */\n readonly format = input<WrDateFormat | (string & {}) | null>(null);\n\n /** Placeholder for the start input. */\n readonly startPlaceholder = input<string>('');\n\n /** Placeholder for the end input. */\n readonly endPlaceholder = input<string>('');\n\n /** Glyph rendered between the two inputs. @default '–' */\n readonly separator = input<string>('–');\n\n // Named `minDate` / `maxDate`, not `min` / `max`: `FormUiControl` reserves\n // those slots for the control's own value type, which here is a range — a\n // `min` typed as a range makes no sense. Matches `WrValidators.minDate`.\n /** Min selectable date, applied to both ends. */\n readonly minDate = input<Date | null>(null);\n\n /** Max selectable date, applied to both ends. */\n readonly maxDate = input<Date | null>(null);\n\n /** Predicate to disable specific dates (forwarded to the calendar). */\n readonly dateFilter = input<((date: Date) => boolean) | null>(null);\n\n /** Time-panel 12 / 24-hour format. Applies in `datetime` mode. @default 'auto' */\n readonly timeFormat = input<'auto' | '12h' | '24h'>('auto');\n\n /** Render the seconds column. Applies in `datetime` mode. @default false */\n readonly showSeconds = input(false, { transform: coerceBooleanProperty });\n\n /** Minute / second step for the time panels. @default 1 */\n readonly step = input(1, { transform: (v: unknown): number => Math.max(1, coerceNumberProperty(v, 1)) });\n\n /**\n * Disable interaction. Bound automatically from the field's disabled state\n * when used with `[formField]`.\n *\n * @default false\n */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /**\n * Read-only — neither the inputs nor the calendar can change the value.\n *\n * Deliberately stricter than `wr-date-picker`, which still opens its popup\n * while read-only: with two fields feeding one calendar there is no reading\n * of \"untypeable\" that leaves the grid free to rewrite both ends. The doc\n * used to promise the trigger still opened; the code has always refused, and\n * refusing is the behaviour worth keeping.\n *\n * @default false\n */\n readonly readonly = input(false, { transform: coerceBooleanProperty });\n\n private readonly adapter = inject<WrDateAdapter<Date>>(WrDateAdapter);\n private readonly overlay = inject(WR_OVERLAY);\n private readonly outsideClick = inject(WrOutsideClick);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n protected readonly startEl = viewChild.required<ElementRef<HTMLInputElement>>('startInput');\n protected readonly endEl = viewChild.required<ElementRef<HTMLInputElement>>('endInput');\n protected readonly triggerEl = viewChild<ElementRef<HTMLButtonElement>>('trigger');\n\n /** The picked range. Bound by `[formField]`, or two-way via `[(value)]`. */\n readonly value = model<WrDateRange | null>(null);\n\n /** Emitted on blur so a bound field can mark itself touched. */\n readonly touch = output<void>();\n\n /** Text currently in each input (may be partial / invalid mid-type). */\n protected readonly startText = signal<string>('');\n protected readonly endText = signal<string>('');\n\n /** Whether the popover is currently open. */\n protected readonly overlayOpen = signal(false);\n\n /**\n * Which element opened the popup — captured as an argument, never read off\n * `document.activeElement`, which by then may already be the pane. With TWO\n * text inputs this is the whole point: \"restore focus to the field\" is\n * ambiguous here, and the old code resolved it by always picking the START\n * input, so closing from the end input threw the caret across the control.\n */\n private openedFrom: HTMLElement | null = null;\n\n /** Whether the panel this open cycle should take focus. */\n private autoFocusPanel = false;\n\n /** Resolved format — falls back to a mode-appropriate default. */\n protected readonly resolvedFormat = computed<string>(() =>\n this.format() ? String(this.format()) : this.mode() === 'datetime' ? 'shortDateTime' : 'shortDate'\n );\n\n protected readonly isDateTime = computed(() => this.mode() === 'datetime');\n\n protected readonly triggerLabel = readI18nText('datePicker.openRange', 'Open range calendar');\n protected readonly startLabel = readI18nText('datePicker.rangeStart', 'Range start');\n protected readonly endLabel = readI18nText('datePicker.rangeEnd', 'Range end');\n\n private readonly panelLabelRange = readI18nText('datePicker.panelRange', 'Choose date range');\n private readonly panelLabelRangeDateTime = readI18nText(\n 'datePicker.panelRangeDateTime',\n 'Choose date and time range'\n );\n\n /**\n * Accessible name of the popup. The trigger advertises\n * `aria-haspopup=\"dialog\"`, so the pane is a `role=\"dialog\"` — and an unnamed\n * dialog announces as a bare \"dialog\". Defaults to the catalog's\n * `datePicker.panelRange*` string for the current `mode`.\n */\n readonly panelAriaLabel = input<string | null>(null);\n\n /** Popup id — what the trigger's `aria-controls` points at while open. */\n protected readonly panelId = `wr-date-range-picker-panel-${++rangePanelUid}`;\n\n protected readonly resolvedPanelLabel = computed(() => {\n const explicit = this.panelAriaLabel();\n if (explicit) return explicit;\n return this.isDateTime() ? this.panelLabelRangeDateTime : this.panelLabelRange;\n });\n\n protected readonly classes = computed(() => {\n const parts = ['wr-date-range-picker', `wr-date-range-picker--${this.mode()}`];\n if (this.disabled()) parts.push('wr-date-range-picker--disabled');\n return parts.join(' ');\n });\n\n private overlayRef: OverlayRef | null = null;\n\n /** Live panel ref while the popover is open — lets typed edits move the\n * displayed month in real time (not just on reopen). */\n private readonly panelRef = signal<ComponentRef<WrDateRangePanel> | null>(null);\n\n /** Last range we pushed into the model ourselves, so the sync effect can skip\n * the echo of our own edits and never reformat text mid-type. */\n private lastValue: WrDateRange | null = null;\n\n constructor() {\n this.destroyRef.onDestroy(() => this.dispose());\n\n // Mirror external writes to `value` into the two display texts.\n effect(() => {\n const v = this.value();\n untracked(() => {\n if (this.sameRange(v, this.lastValue)) return;\n this.lastValue = v;\n this.startText.set(this.display(v?.[0] ?? null));\n this.endText.set(this.display(v?.[1] ?? null));\n });\n });\n\n // Keep the open panel in step with the model.\n effect(() => {\n const ref = this.panelRef();\n if (ref) ref.setInput('value', this.value() ?? [null, null]);\n });\n\n // …and with every other input. Pushing these only at attach time meant a\n // `[minDate]` (or filter, or time format) that changed while the popover was\n // open silently kept the stale constraint until the next reopen.\n effect(() => {\n const ref = this.panelRef();\n if (!ref) return;\n ref.setInput('min', this.minDate());\n ref.setInput('max', this.maxDate());\n ref.setInput('dateFilter', this.dateFilter());\n ref.setInput('withTime', this.isDateTime());\n ref.setInput('timeFormat', this.timeFormat());\n ref.setInput('showSeconds', this.showSeconds());\n ref.setInput('step', this.step());\n });\n }\n\n // Template handlers\n\n protected onStartInput(event: Event): void {\n this.onRangeInput(event, 0);\n }\n\n protected onEndInput(event: Event): void {\n this.onRangeInput(event, 1);\n }\n\n protected onBlur(event: FocusEvent): void {\n // Moving between the two ends is still one interaction — only report the\n // control as touched once focus actually leaves it, or tabbing from start to\n // end would mark a bound field touched mid-entry.\n const next = event.relatedTarget as Node | null;\n const leaving = !next || !this.host.nativeElement.contains(next);\n if (leaving) this.touch.emit();\n\n // Typing leaves the ends in whatever order they were entered; settle it\n // here, once the user has stopped — and moving from one end to the other is\n // NOT stopping. Sorting on that hop took the start date the user had just\n // typed and moved it into the field they were tabbing into, leaving the old\n // end date under their cursor. Same rule the time steppers follow.\n const [start, end] = this.commitRange(this.current(), { normalise: leaving });\n // Reformat to canonical on blur (cleans up `1/5/25` → `1/5/2025`).\n this.startText.set(this.display(start));\n this.endText.set(this.display(end));\n }\n\n /** Called by an input's click — opens the overlay if it isn't open already. */\n protected openOnInput(end: RangeEnd): void {\n if (this.disabled() || this.readonly() || this.overlayRef) return;\n // Deliberately WITHOUT focus: this click placed a caret in one of the text\n // fields, and pulling focus into the grid would throw that away.\n // `Alt+ArrowDown` / `ArrowDown` are the keyboard way in — see onFieldKey.\n this.openOverlay(this.fieldEl(end), false);\n }\n\n protected toggleOverlay(): void {\n // `readonly` blocks the calendar too — otherwise the inputs refuse typing\n // while the popover happily edits the same value.\n if (this.disabled() || this.readonly()) return;\n if (this.overlayRef) {\n // Focus is already on the trigger — nothing to restore.\n this.closeOverlay();\n } else {\n this.openOverlay(this.triggerEl()?.nativeElement ?? null, true);\n }\n }\n\n /**\n * The keyboard route into the popup, per the APG date-picker pattern, and the\n * only one either field has. `Alt+ArrowDown` opens and takes focus; a bare\n * vertical arrow walks focus in when the popup is ALREADY open, which is how\n * someone who opened it by clicking a field reaches the grid. Every other key\n * belongs to the field, so typing a date keeps working with the popup open.\n */\n protected onFieldKey(event: KeyboardEvent, end: RangeEnd): void {\n if (this.disabled() || this.readonly()) return;\n\n const vertical = event.key === 'ArrowDown' || event.key === 'ArrowUp';\n if (!vertical) return;\n\n if (event.altKey && event.key === 'ArrowDown' && !this.overlayRef) {\n event.preventDefault();\n this.openOverlay(this.fieldEl(end), true);\n return;\n }\n\n if (this.overlayRef) {\n event.preventDefault();\n this.focusPanel();\n }\n }\n\n /** The input element for an end — the two are otherwise addressed by index. */\n private fieldEl(end: RangeEnd): HTMLInputElement {\n return end === 0 ? this.startEl().nativeElement : this.endEl().nativeElement;\n }\n\n /**\n * Move focus into an already-mounted panel. A plain query is right HERE and\n * wrong at mount time: the panel has settled, so there is no deferral to get\n * wrong — and it keeps `autoFocus` as the single piece of panel API.\n */\n private focusPanel(): void {\n const pane = this.overlayRef?.overlayElement;\n const target =\n pane?.querySelector<HTMLElement>('.wr-calendar__day--focused:not([disabled])') ??\n pane?.querySelector<HTMLElement>('.wr-time-picker__input');\n target?.focus();\n }\n\n /** Hand focus back to whatever opened the popup, if it is still on the page. */\n private restoreFocus(): void {\n const target = this.openedFrom?.isConnected ? this.openedFrom : this.startEl().nativeElement;\n target.focus();\n }\n\n // Input parsing\n\n private onRangeInput(event: Event, end: RangeEnd): void {\n const raw = (event.target as HTMLInputElement).value;\n (end === 0 ? this.startText : this.endText).set(raw);\n\n const [start, finish] = this.current();\n if (!raw) {\n this.commitRange(end === 0 ? [null, finish] : [start, null], { normalise: false });\n return;\n }\n const parsed = this.adapter.parse(raw, this.resolvedFormat());\n if (!parsed || !this.adapter.isValid(parsed) || this.isOutOfBounds(parsed)) return;\n // Never reorder mid-keystroke: a half-typed date can parse to an\n // out-of-order value, and swapping there would yank the text the user is\n // still typing over to the other input. Ordering is settled on blur.\n this.commitRange(end === 0 ? [parsed, finish] : [start, parsed], { normalise: false });\n }\n\n // Overlay\n\n private openOverlay(openedFrom: HTMLElement | null = null, autoFocus = false): void {\n if (this.overlayRef) return;\n this.openedFrom = openedFrom;\n this.autoFocusPanel = autoFocus;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.host)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n ])\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.scrollStrategies.reposition(),\n panelClass: 'wr-date-picker-overlay',\n });\n this.overlayOpen.set(true);\n\n // The trigger promises `aria-haspopup=\"dialog\"`; the pane is the element it\n // points at, so the role, the name and the id all belong here. Non-modal on\n // purpose — the two text fields stay reachable while the calendar is up,\n // which is the whole interaction model.\n const pane = this.overlayRef.overlayElement;\n pane.id = this.panelId;\n pane.setAttribute('role', 'dialog');\n pane.setAttribute('aria-modal', 'false');\n pane.setAttribute('aria-label', this.resolvedPanelLabel());\n\n const ref = this.overlayRef.attach(new ComponentPortal(WrDateRangePanel));\n ref.setInput('value', this.value() ?? [null, null]);\n ref.setInput('autoFocus', this.autoFocusPanel);\n this.panelRef.set(ref);\n\n // A stepper edit belongs to the end it was made on. Sorting it here is what\n // made the start stepper stop responding once it passed the end.\n ref.instance.timeChanged.subscribe(next => this.commitRange(next, { normalise: false }));\n\n ref.instance.changed.subscribe(next => {\n const committed = this.commitRange(next, { normalise: true });\n // A complete date-only range is the end of the interaction; a datetime\n // range still needs its hours, so the panel stays put.\n if (!this.isDateTime() && committed[0] && committed[1]) this.closeOverlay();\n });\n\n this.outsideClick\n .outsidePointerEvents(this.overlayRef)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (this.host.nativeElement.contains(event.target as Node)) return;\n this.closeOverlay();\n });\n\n this.overlayRef\n .keydownEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closeOverlay();\n }\n });\n }\n\n /**\n * Close the popover, handing focus back to whichever field or button opened\n * it — but ONLY when focus was still inside the pane. Dropped there it would\n * land on `<body>` and the next Tab would restart from the top of the page;\n * moved on by the user, it must be left where they put it.\n *\n * There is deliberately no \"always restore\" escape hatch. Escape reaches this\n * overlay from anywhere in the document (the CDK dispatches it to the topmost\n * one), so forcing a restore would drag the caret backwards out of the field\n * the user was actually typing in — into the one that happened to open the\n * popup, possibly several Tab stops away.\n */\n private closeOverlay(): void {\n const pane = this.overlayRef?.overlayElement;\n const inside = !!pane && pane.contains(this.host.nativeElement.ownerDocument.activeElement);\n\n this.dispose();\n\n // The interaction is over, so settle the ordering an in-progress time edit\n // was allowed to leave inverted. Blur does the same for the text inputs;\n // without this, closing by clicking outside never passes through one.\n this.commitRange(this.current(), { normalise: true });\n\n if (inside) this.restoreFocus();\n }\n\n private dispose(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.panelRef.set(null);\n this.overlayOpen.set(false);\n this.autoFocusPanel = false;\n }\n\n // Commit\n\n /**\n * Push to the model and refresh the text of whichever ends changed. Returns\n * what was actually committed.\n *\n * `normalise` swaps out-of-order ends. The calendar and blur ask for it; a\n * keystroke does not, because reordering while the user is still typing would\n * move their in-progress text into the other input.\n */\n private commitRange(next: WrDateRange, options: { normalise: boolean }): WrDateRange {\n const normalised = options.normalise ? this.normalise(next) : next;\n // Only write when a date actually moved. `normalise()` allocates a fresh\n // tuple on every call and `model()` compares by reference, so an\n // unconditional write would emit on every blur — enough to mark a bound\n // `[formField]` dirty just by tabbing through the two inputs.\n if (!this.sameRange(normalised, this.value())) {\n this.lastValue = normalised;\n this.value.set(normalised);\n }\n // Only rewrite the text of an end whose date moved out from under it —\n // otherwise a half-typed date would be reformatted on every keystroke.\n if (!this.sameDate(normalised[0], this.parseText(this.startText()))) {\n this.startText.set(this.display(normalised[0]));\n }\n if (!this.sameDate(normalised[1], this.parseText(this.endText()))) {\n this.endText.set(this.display(normalised[1]));\n }\n return normalised;\n }\n\n // Helpers\n\n private current(): WrDateRange {\n return this.value() ?? [null, null];\n }\n\n private display(date: Date | null): string {\n return date && this.adapter.isValid(date) ? this.adapter.format(date, this.resolvedFormat()) : '';\n }\n\n private parseText(raw: string): Date | null {\n if (!raw) return null;\n const parsed = this.adapter.parse(raw, this.resolvedFormat());\n return parsed && this.adapter.isValid(parsed) ? parsed : null;\n }\n\n /** Keep `[start, end]` in chronological order once both ends exist. */\n private normalise(range: WrDateRange): WrDateRange {\n const [start, end] = range;\n if (start && end && this.compareEnds(start, end) > 0) return [end, start];\n return [start, end];\n }\n\n /**\n * Chronological comparison at the precision the mode needs. The adapter's\n * `compareDate` is day-precision by contract, which would leave an inverted\n * same-day `datetime` range (18:00 → 09:00) unswapped.\n */\n private compareEnds(a: Date, b: Date): number {\n const byDay = this.adapter.compareDate(a, b);\n if (byDay !== 0 || !this.isDateTime()) return byDay;\n const clock = (d: Date): number =>\n this.adapter.getHours(d) * 3600 + this.adapter.getMinutes(d) * 60 + this.adapter.getSeconds(d);\n return clock(a) - clock(b);\n }\n\n /**\n * Whether a typed date must be rejected. Covers `dateFilter` as well as the\n * bounds — the calendar disables filtered days, so accepting them from the\n * keyboard would make the two entry paths disagree.\n */\n private isOutOfBounds(date: Date): boolean {\n const min = this.minDate();\n if (min && this.adapter.compareDate(date, min) < 0) return true;\n const max = this.maxDate();\n if (max && this.adapter.compareDate(date, max) > 0) return true;\n const filter = this.dateFilter();\n if (filter && !filter(date)) return true;\n return false;\n }\n\n private sameDate(a: Date | null, b: Date | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return a.getTime() === b.getTime();\n }\n\n /**\n * `null` and `[null, null]` are the same VALUE — an empty range — and treating\n * them as different is what let the FIRST blur on an untouched picker write\n * `[null, null]` over the `null` it was bound to. No date had moved, but\n * `model()` emitted: a bound `[formField]` went dirty from nothing but tabbing\n * through, and a consumer's `@if (period())` flipped from empty to truthy with\n * neither end picked. The write guard in `commitRange` is only as good as this\n * comparison.\n */\n private sameRange(a: WrDateRange | null, b: WrDateRange | null): boolean {\n if (a === b) return true;\n const [aStart, aEnd] = a ?? [null, null];\n const [bStart, bEnd] = b ?? [null, null];\n return this.sameDate(aStart, bStart) && this.sameDate(aEnd, bEnd);\n }\n}\n","<wr-input-group>\n <input\n #startInput\n wrInput\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n class=\"wr-date-range-picker__input\"\n [attr.aria-label]=\"startLabel\"\n [value]=\"startText()\"\n [placeholder]=\"startPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (click)=\"openOnInput(0)\"\n (keydown)=\"onFieldKey($event, 0)\"\n (input)=\"onStartInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <span class=\"wr-date-range-picker__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n <input\n #endInput\n wrInput\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n class=\"wr-date-range-picker__input\"\n [attr.aria-label]=\"endLabel\"\n [value]=\"endText()\"\n [placeholder]=\"endPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (click)=\"openOnInput(1)\"\n (keydown)=\"onFieldKey($event, 1)\"\n (input)=\"onEndInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <!--\n `readonly` refuses to open the popup, so the trigger is disabled with it —\n otherwise it stays a focusable button advertising `aria-haspopup=\"dialog\"`\n for a dialog it will never show.\n -->\n <button\n #trigger\n type=\"button\"\n wrInputSuffix\n class=\"wr-date-picker__trigger\"\n [attr.aria-label]=\"triggerLabel\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"overlayOpen()\"\n [attr.aria-controls]=\"overlayOpen() ? panelId : null\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"toggleOverlay()\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <rect x=\"1.5\" y=\"2.5\" width=\"11\" height=\"10\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"1.5\" y1=\"5.5\" x2=\"12.5\" y2=\"5.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <line x1=\"4\" y1=\"1\" x2=\"4\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n <line x1=\"10\" y1=\"1\" x2=\"10\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n @if (isDateTime()) {\n <circle cx=\"7\" cy=\"9\" r=\"1.5\" fill=\"currentColor\" />\n }\n </svg>\n </button>\n</wr-input-group>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|