ngwr 11.2.0 → 12.1.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 +85 -26
- package/burger/styles/_index.scss +1 -1
- package/button/styles/_index.scss +2 -2
- package/calendar/styles/_index.scss +32 -12
- package/calendar-heatmap/styles/_index.scss +20 -0
- package/carousel/styles/_index.scss +23 -1
- package/cascader/styles/_index.scss +15 -3
- package/checkbox/styles/_index.scss +2 -2
- package/collapse/styles/_index.scss +2 -2
- package/color-picker/styles/_index.scss +3 -3
- package/compare/styles/_index.scss +18 -2
- package/context-menu/styles/_index.scss +21 -2
- package/date-picker/styles/_index.scss +5 -5
- package/descriptions/styles/_index.scss +1 -1
- package/drag-drop/styles/_index.scss +28 -1
- package/drawer/styles/_index.scss +37 -0
- package/dropdown/styles/_index.scss +2 -2
- package/event-calendar/styles/_index.scss +67 -10
- package/fesm2022/ngwr-action-sheet.mjs +3 -3
- package/fesm2022/ngwr-affix.mjs +3 -3
- package/fesm2022/ngwr-alert.mjs +3 -3
- package/fesm2022/ngwr-anchor.mjs +3 -3
- package/fesm2022/ngwr-aurora.mjs +3 -3
- package/fesm2022/ngwr-avatar.mjs +3 -3
- package/fesm2022/ngwr-back-top.mjs +3 -3
- package/fesm2022/ngwr-badge.mjs +6 -6
- package/fesm2022/ngwr-bar-chart-testing.mjs +20 -2
- package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bar-chart.mjs +3 -3
- package/fesm2022/ngwr-blur-text.mjs +3 -3
- 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 +29 -17
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +3 -3
- package/fesm2022/ngwr-button.mjs +6 -6
- package/fesm2022/ngwr-calendar-heatmap.mjs +17 -5
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-testing.mjs +1 -1
- package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +187 -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.mjs +124 -24
- package/fesm2022/ngwr-carousel.mjs.map +1 -1
- package/fesm2022/ngwr-cascader.mjs +48 -5
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +6 -6
- package/fesm2022/ngwr-circular-text.mjs +4 -4
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +27 -7
- package/fesm2022/ngwr-click-spark.mjs.map +1 -1
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-color-picker-testing.mjs +26 -6
- package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker.mjs +98 -8
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +14 -5
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-confetti.mjs +31 -6
- package/fesm2022/ngwr-confetti.mjs.map +1 -1
- package/fesm2022/ngwr-config.mjs +9 -0
- package/fesm2022/ngwr-config.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu-testing.mjs +30 -11
- package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu.mjs +333 -43
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-counter.mjs +25 -9
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/{ngwr-date-adapter-fns.mjs → ngwr-date-adapters-fns.mjs} +37 -10
- package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -0
- package/fesm2022/{ngwr-date-adapter-luxon.mjs → ngwr-date-adapters-luxon.mjs} +5 -5
- package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -0
- package/fesm2022/ngwr-date-picker-testing.mjs +11 -6
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +119 -37
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/{ngwr-date-adapter.mjs → ngwr-date.mjs} +36 -10
- package/fesm2022/ngwr-date.mjs.map +1 -0
- package/fesm2022/ngwr-decrypt-text.mjs +3 -3
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-dialog.mjs +73 -18
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-divider.mjs +52 -5
- package/fesm2022/ngwr-divider.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart-testing.mjs +8 -4
- package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart.mjs +7 -7
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +160 -11
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +121 -58
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown.mjs +26 -10
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-event-calendar.mjs +28 -15
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text-testing.mjs +5 -3
- package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text.mjs +75 -46
- package/fesm2022/ngwr-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload.mjs +3 -3
- package/fesm2022/ngwr-form.mjs +32 -15
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +21 -11
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gauge.mjs +3 -3
- package/fesm2022/ngwr-glitch-text-testing.mjs +51 -17
- package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-glitch-text.mjs +7 -7
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text-testing.mjs +46 -11
- package/fesm2022/ngwr-gradient-text-testing.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 +24 -9
- package/fesm2022/ngwr-hotkey.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +73 -1
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +55 -1
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +26 -15
- package/fesm2022/ngwr-i18n.mjs.map +1 -1
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper-testing.mjs +53 -9
- package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -1
- package/fesm2022/ngwr-image-cropper.mjs +150 -12
- package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
- package/fesm2022/ngwr-input-number-testing.mjs +15 -10
- package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-number.mjs +17 -10
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp-testing.mjs +12 -6
- package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +24 -5
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +15 -15
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob.mjs +3 -3
- package/fesm2022/ngwr-layout.mjs +15 -15
- package/fesm2022/ngwr-lightbox.mjs +4 -4
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart.mjs +73 -26
- package/fesm2022/ngwr-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +7 -7
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +7 -7
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown.mjs +66 -8
- package/fesm2022/ngwr-markdown.mjs.map +1 -1
- package/fesm2022/ngwr-marquee.mjs +4 -4
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-mention.mjs +108 -13
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +6 -6
- package/fesm2022/ngwr-meter-group-testing.mjs +26 -6
- package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -1
- package/fesm2022/ngwr-meter-group.mjs +3 -3
- package/fesm2022/ngwr-overlay.mjs +6 -6
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination-testing.mjs +6 -6
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +83 -16
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +39 -26
- package/fesm2022/ngwr-pipes.mjs.map +1 -1
- package/fesm2022/ngwr-platform.mjs +9 -9
- package/fesm2022/ngwr-popconfirm.mjs +6 -6
- package/fesm2022/ngwr-popover-testing.mjs +7 -2
- package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
- package/fesm2022/ngwr-popover.mjs +155 -33
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-progress.mjs +3 -3
- package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
- package/fesm2022/ngwr-qr.mjs +42 -5
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-radio.mjs +6 -6
- package/fesm2022/ngwr-rating.mjs +3 -3
- package/fesm2022/ngwr-result.mjs +21 -30
- package/fesm2022/ngwr-result.mjs.map +1 -1
- package/fesm2022/ngwr-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented-testing.mjs +85 -1
- package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
- package/fesm2022/ngwr-segmented.mjs +123 -10
- package/fesm2022/ngwr-segmented.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +159 -34
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +11 -9
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +31 -16
- package/fesm2022/ngwr-sidebar.mjs.map +1 -1
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs +100 -9
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline.mjs +3 -3
- package/fesm2022/ngwr-speed-dial-testing.mjs +15 -13
- package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -1
- package/fesm2022/ngwr-speed-dial.mjs +27 -12
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-split-text.mjs +17 -5
- package/fesm2022/ngwr-split-text.mjs.map +1 -1
- package/fesm2022/ngwr-splitter.mjs +3 -3
- 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 +9 -9
- package/fesm2022/ngwr-stepper-testing.mjs +8 -8
- package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
- package/fesm2022/ngwr-stepper.mjs +33 -8
- package/fesm2022/ngwr-stepper.mjs.map +1 -1
- package/fesm2022/ngwr-storage.mjs +17 -5
- package/fesm2022/ngwr-storage.mjs.map +1 -1
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-table.mjs +99 -39
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-testing.mjs +11 -10
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +36 -10
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +3 -3
- package/fesm2022/ngwr-theme.mjs +181 -4
- package/fesm2022/ngwr-theme.mjs.map +1 -1
- 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.mjs +9 -9
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour.mjs +34 -10
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +3 -3
- package/fesm2022/ngwr-tree.mjs +28 -10
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter-testing.mjs +15 -1
- package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +13 -5
- package/fesm2022/ngwr-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-utils.mjs +5 -2
- package/fesm2022/ngwr-utils.mjs.map +1 -1
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +4 -4
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves.mjs +4 -4
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +94 -24
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/file-upload/styles/_index.scss +2 -2
- package/glitch-text/styles/_index.scss +27 -12
- package/i18n/en.json +56 -6
- package/i18n/ru.json +56 -6
- package/image-cropper/styles/_index.scss +19 -0
- package/input/styles/_index.scss +2 -2
- package/input-number/styles/_index.scss +2 -2
- package/input-otp/styles/_index.scss +9 -2
- package/knob/styles/_index.scss +1 -1
- package/lightbox/styles/_index.scss +16 -2
- package/line-chart/styles/_index.scss +28 -14
- package/list/styles/_index.scss +1 -1
- package/llms-full.txt +19 -24
- package/llms.txt +46 -8
- package/markdown/styles/_index.scss +3 -3
- package/mcp/api.js +6 -4
- package/mcp/catalog.js +40 -3
- package/mcp/providers.js +16 -3
- package/mcp/tools.js +21 -1
- package/meter-group/styles/_index.scss +1 -1
- package/overlay/styles/_index.scss +33 -1
- package/package.json +17 -12
- package/pagination/styles/_index.scss +23 -1
- package/popover/styles/_index.scss +16 -7
- package/progress/styles/_index.scss +1 -1
- package/radio/styles/_index.scss +2 -2
- package/rating/styles/_index.scss +1 -1
- package/schematics/collection.json +1 -1
- package/schematics/migrations/v12/index.js +65 -0
- package/schematics/migrations/v7/index.js +12 -1
- package/schematics/migrations/v8/index.js +10 -1
- package/schematics/migrations.json +5 -0
- package/schematics/ng-add/index.js +8 -3
- package/schematics/provider/index.js +80 -13
- package/schematics/use/index.js +9 -129
- package/schematics/use/rule.js +206 -0
- package/schematics/use/symbol-map.json +4 -4
- package/segmented/styles/_index.scss +14 -3
- package/select/styles/_index.scss +14 -2
- package/sidebar/styles/_index.scss +12 -10
- package/skills/ngwr/SKILL.md +7 -5
- package/skills/ngwr/references/catalog.md +9 -9
- package/skills/ngwr/references/setup.md +10 -5
- package/slider/styles/_index.scss +1 -1
- package/speed-dial/styles/_index.scss +1 -1
- package/stepper/styles/_index.scss +12 -3
- package/switch/styles/_index.scss +2 -2
- package/table/styles/_index.scss +61 -12
- package/tabs/styles/_index.scss +1 -1
- package/textarea/styles/_index.scss +1 -1
- package/theme/styles/_colors.scss +142 -56
- package/theme/styles/_dark.scss +46 -3
- package/theme/styles/_focus.scss +28 -5
- package/theme/styles/_mixins.scss +1 -1
- package/theme/styles/_variables.scss +67 -0
- package/transfer/styles/_index.scss +26 -3
- package/tree/styles/_index.scss +29 -6
- package/types/ngwr-bar-chart-testing.d.ts +9 -1
- package/types/ngwr-blur-text.d.ts +8 -4
- package/types/ngwr-breadcrumbs.d.ts +17 -10
- package/types/ngwr-calendar-testing.d.ts +1 -1
- package/types/ngwr-calendar.d.ts +66 -0
- package/types/ngwr-carousel.d.ts +85 -6
- package/types/ngwr-cascader.d.ts +17 -0
- package/types/ngwr-click-spark.d.ts +4 -0
- package/types/ngwr-color-picker-testing.d.ts +8 -0
- package/types/ngwr-color-picker.d.ts +21 -1
- package/types/ngwr-confetti.d.ts +8 -0
- package/types/ngwr-config.d.ts +10 -1
- package/types/ngwr-context-menu-testing.d.ts +24 -11
- package/types/ngwr-context-menu.d.ts +56 -0
- package/types/ngwr-counter.d.ts +1 -0
- package/types/{ngwr-date-adapter-fns.d.ts → ngwr-date-adapters-fns.d.ts} +33 -6
- package/types/{ngwr-date-adapter-luxon.d.ts → ngwr-date-adapters-luxon.d.ts} +1 -1
- package/types/ngwr-date-picker-testing.d.ts +11 -6
- package/types/ngwr-date-picker.d.ts +8 -4
- package/types/{ngwr-date-adapter.d.ts → ngwr-date.d.ts} +24 -5
- package/types/ngwr-dialog.d.ts +38 -1
- package/types/ngwr-divider.d.ts +25 -0
- package/types/ngwr-donut-chart-testing.d.ts +7 -3
- package/types/ngwr-donut-chart.d.ts +3 -3
- package/types/ngwr-drag-drop.d.ts +56 -2
- package/types/ngwr-drawer.d.ts +56 -5
- package/types/ngwr-event-calendar.d.ts +8 -2
- package/types/ngwr-falling-text-testing.d.ts +5 -3
- package/types/ngwr-falling-text.d.ts +1 -1
- package/types/ngwr-form.d.ts +12 -2
- package/types/ngwr-glitch-text-testing.d.ts +37 -8
- package/types/ngwr-gradient-text-testing.d.ts +16 -3
- package/types/ngwr-i18n.d.ts +13 -4
- package/types/ngwr-image-cropper-testing.d.ts +49 -10
- package/types/ngwr-image-cropper.d.ts +70 -5
- package/types/ngwr-input-number-testing.d.ts +15 -10
- package/types/ngwr-input-number.d.ts +11 -4
- package/types/ngwr-input-otp-testing.d.ts +12 -6
- package/types/ngwr-input-otp.d.ts +15 -1
- package/types/ngwr-line-chart.d.ts +20 -3
- package/types/ngwr-markdown.d.ts +11 -0
- package/types/ngwr-mention.d.ts +32 -0
- package/types/ngwr-meter-group-testing.d.ts +12 -2
- package/types/ngwr-overlay.d.ts +1 -0
- package/types/ngwr-pagination-testing.d.ts +4 -4
- package/types/ngwr-pagination.d.ts +11 -0
- package/types/ngwr-pipes.d.ts +1 -1
- package/types/ngwr-popover-testing.d.ts +7 -2
- package/types/ngwr-popover.d.ts +1 -0
- package/types/ngwr-result.d.ts +6 -0
- package/types/ngwr-segmented-testing.d.ts +53 -0
- package/types/ngwr-segmented.d.ts +107 -5
- package/types/ngwr-select.d.ts +68 -6
- package/types/ngwr-shiny-text.d.ts +4 -2
- package/types/ngwr-sidebar.d.ts +14 -5
- package/types/ngwr-slider.d.ts +69 -1
- package/types/ngwr-speed-dial-testing.d.ts +15 -11
- package/types/ngwr-speed-dial.d.ts +22 -3
- package/types/ngwr-split-text.d.ts +9 -0
- package/types/ngwr-stepper-testing.d.ts +5 -5
- package/types/ngwr-stepper.d.ts +8 -0
- package/types/ngwr-storage.d.ts +1 -0
- package/types/ngwr-table.d.ts +104 -11
- package/types/ngwr-tabs-testing.d.ts +11 -10
- package/types/ngwr-tabs.d.ts +2 -0
- package/types/ngwr-theme.d.ts +82 -1
- package/types/ngwr-tour.d.ts +22 -4
- package/types/ngwr-tree.d.ts +5 -4
- package/types/ngwr-typewriter-testing.d.ts +10 -0
- package/types/ngwr-utils.d.ts +5 -2
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-window.d.ts +39 -11
- package/typography/styles/_index.scss +1 -1
- package/window/styles/_index.scss +72 -26
- package/fesm2022/ngwr-date-adapter-fns.mjs.map +0 -1
- package/fesm2022/ngwr-date-adapter-luxon.mjs.map +0 -1
- package/fesm2022/ngwr-date-adapter.mjs.map +0 -1
|
@@ -232,8 +232,15 @@ declare class WrColorPicker implements FormValueControl<string> {
|
|
|
232
232
|
protected readonly activeTab: _angular_core.WritableSignal<Tab>;
|
|
233
233
|
/** HSL view of the current colour, computed lazily. */
|
|
234
234
|
protected readonly hslView: _angular_core.Signal<WrHsl>;
|
|
235
|
-
/** Alpha as integer percent
|
|
235
|
+
/** Alpha as integer percent — the numeric tabs and the alpha slider's `aria-valuenow`. */
|
|
236
236
|
protected readonly alphaPercent: _angular_core.Signal<number>;
|
|
237
|
+
/** Hue in whole degrees, for the hue slider's `aria-valuenow`. */
|
|
238
|
+
protected readonly hueValue: _angular_core.Signal<number>;
|
|
239
|
+
private readonly areaLabel;
|
|
240
|
+
/** Name of the SV surface, carrying the two values a `role="group"` cannot. */
|
|
241
|
+
protected readonly resolvedAreaLabel: _angular_core.Signal<string>;
|
|
242
|
+
protected readonly resolvedHueLabel: _angular_core.Signal<string>;
|
|
243
|
+
protected readonly resolvedAlphaLabel: _angular_core.Signal<string>;
|
|
237
244
|
protected readonly tabOptions: readonly WrSegmentedOption<Tab>[];
|
|
238
245
|
protected readonly classes: _angular_core.Signal<string>;
|
|
239
246
|
/**
|
|
@@ -250,6 +257,19 @@ declare class WrColorPicker implements FormValueControl<string> {
|
|
|
250
257
|
private lastEmitted;
|
|
251
258
|
constructor();
|
|
252
259
|
protected onPointerDown(event: PointerEvent, surface: Edges): void;
|
|
260
|
+
/**
|
|
261
|
+
* Hue and alpha are real one-value sliders, so they take the APG slider keys —
|
|
262
|
+
* the same set `wr-knob` and `wr-slider` implement, including Home / End.
|
|
263
|
+
*/
|
|
264
|
+
protected onSliderKeydown(event: KeyboardEvent, surface: 'hue' | 'alpha'): void;
|
|
265
|
+
/**
|
|
266
|
+
* The SV canvas is two axes at once, so the keys follow the picture: left and
|
|
267
|
+
* right run along saturation, up and down along brightness — the directions
|
|
268
|
+
* the thumb visibly moves. Shift takes ten percent at a time.
|
|
269
|
+
*/
|
|
270
|
+
protected onAreaKeydown(event: KeyboardEvent): void;
|
|
271
|
+
/** Leaving a surface is what "touched" means, the same as leaving the hex field. */
|
|
272
|
+
protected onSurfaceBlur(): void;
|
|
253
273
|
private updateFromEvent;
|
|
254
274
|
protected onHexInput(event: Event): void;
|
|
255
275
|
protected onHexBlur(): void;
|
package/types/ngwr-confetti.d.ts
CHANGED
|
@@ -56,9 +56,17 @@ declare class WrConfetti {
|
|
|
56
56
|
private ctx;
|
|
57
57
|
private particles;
|
|
58
58
|
private rafId;
|
|
59
|
+
private readonly onResize;
|
|
60
|
+
constructor();
|
|
59
61
|
/** Spawn a confetti burst with the given (or default) options. */
|
|
60
62
|
fire(options?: WrConfettiOptions): void;
|
|
61
63
|
private ensureCanvas;
|
|
64
|
+
/**
|
|
65
|
+
* Give back the canvas and the listener `ensureCanvas()` took from the page,
|
|
66
|
+
* stop the frame loop, and reset the state both of them guard on so a `fire()`
|
|
67
|
+
* from a fresh injector rebuilds cleanly.
|
|
68
|
+
*/
|
|
69
|
+
private teardown;
|
|
62
70
|
private resize;
|
|
63
71
|
private spawn;
|
|
64
72
|
private tick;
|
package/types/ngwr-config.d.ts
CHANGED
|
@@ -151,8 +151,17 @@ declare function provideWrConfig(config: WrConfig): EnvironmentProviders;
|
|
|
151
151
|
* size scale is narrower than {@link WrControlSize} stops compiling here rather
|
|
152
152
|
* than accepting a value it cannot render — the type checker doing the work a
|
|
153
153
|
* parity script would otherwise have to.
|
|
154
|
+
*
|
|
155
|
+
* `NoInfer` is what makes that true. Drop it and the guard is a comment again on
|
|
156
|
+
* every call site that does not pin the generic by hand, which was all but two —
|
|
157
|
+
* `wr-btn` the only size one among them. Without it `T` has three inference sites;
|
|
158
|
+
* TypeScript collects all three candidates and keeps the SUPERTYPE, so `pick`'s
|
|
159
|
+
* `WrControlSize` won and `T` widened to the config's type. `Signal<T>` is
|
|
160
|
+
* covariant, so the narrower binding stayed assignable and the call compiled clean.
|
|
161
|
+
* Widening `WrControlSize` by one member used to raise exactly one error, in
|
|
162
|
+
* `wr-btn`; it now raises nine.
|
|
154
163
|
*/
|
|
155
|
-
declare function useConfigValue<T>(binding: Signal<T | null | undefined>, pick: (config: WrConfig) => T | undefined, fallback: T): Signal<T>;
|
|
164
|
+
declare function useConfigValue<T>(binding: Signal<T | null | undefined>, pick: (config: WrConfig) => NoInfer<T> | undefined, fallback: NoInfer<T>): Signal<T>;
|
|
156
165
|
|
|
157
166
|
/**
|
|
158
167
|
* @license
|
|
@@ -101,13 +101,12 @@ declare class WrContextMenuItemHarness extends ComponentHarness {
|
|
|
101
101
|
/** The leading icon's registered name, or `null` when the item has no icon. */
|
|
102
102
|
getIconName(): Promise<string | null>;
|
|
103
103
|
/**
|
|
104
|
-
* Whether the item holds focus.
|
|
104
|
+
* Whether the item holds the menu's roving focus.
|
|
105
105
|
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
* CDK focuses an element before typing into it.
|
|
106
|
+
* The menu moves focus onto its first enabled row as the pane renders and the
|
|
107
|
+
* arrows walk it from there, so this is where the keyboard is. Opening a
|
|
108
|
+
* submenu hands the cursor to the submenu's own first row, which leaves the
|
|
109
|
+
* item that owns it unfocused while its pane is up.
|
|
111
110
|
*/
|
|
112
111
|
isFocused(): Promise<boolean>;
|
|
113
112
|
/**
|
|
@@ -143,8 +142,10 @@ declare class WrContextMenuItemHarness extends ComponentHarness {
|
|
|
143
142
|
*
|
|
144
143
|
* The keyboard, not the pointer: it opens with no delay (hover waits out
|
|
145
144
|
* 120ms — `openSubmenuByHover()` covers that path) and needs no coordinates,
|
|
146
|
-
* which jsdom could not supply anyway.
|
|
147
|
-
*
|
|
145
|
+
* which jsdom could not supply anyway. A keyboard open walks INTO the submenu,
|
|
146
|
+
* so afterwards the cursor is on the submenu's first row and `isFocused()` on
|
|
147
|
+
* this item is `false` — `openSubmenuByHover()` only shows the pane and leaves
|
|
148
|
+
* the cursor where it was.
|
|
148
149
|
*/
|
|
149
150
|
openSubmenu(timeout?: number): Promise<void>;
|
|
150
151
|
/**
|
|
@@ -223,9 +224,10 @@ declare class WrContextMenuItemHarness extends ComponentHarness {
|
|
|
223
224
|
* `clickItem()` leaves it closed.
|
|
224
225
|
* - Submenus are a first-class input here rather than a nested trigger, so they
|
|
225
226
|
* are driven from {@link WrContextMenuItemHarness}.
|
|
226
|
-
* -
|
|
227
|
-
*
|
|
228
|
-
* —
|
|
227
|
+
* - Focus moves in on EVERY open, where a dropdown's does so only when a
|
|
228
|
+
* keyboard opened it. There is no hover trigger here — a right-click, Shift+F10
|
|
229
|
+
* or a long-press is always a deliberate request for the menu — so
|
|
230
|
+
* `getFocusedItemText()` answers straight after `open()`.
|
|
229
231
|
*
|
|
230
232
|
* **Timing.** The waits are real: a 500ms `setTimeout` for the long-press hold and
|
|
231
233
|
* another 220ms one for the exit animation the pane is held alive through, plus the
|
|
@@ -359,6 +361,17 @@ declare class WrContextMenuHarness extends ContentContainerComponentHarness {
|
|
|
359
361
|
getItems(filters?: WrContextMenuItemHarnessFilters): Promise<WrContextMenuItemHarness[]>;
|
|
360
362
|
/** The labels of this menu's items, in DOM order. */
|
|
361
363
|
getItemTexts(): Promise<string[]>;
|
|
364
|
+
/**
|
|
365
|
+
* The label of the item that currently holds focus, or `null` when the
|
|
366
|
+
* keyboard is elsewhere.
|
|
367
|
+
*
|
|
368
|
+
* The menu roves focus rather than drawing a cursor — it lands on the first
|
|
369
|
+
* ENABLED item as the pane renders, and the arrows walk it over the enabled
|
|
370
|
+
* items only — so this is the only way to ask where the keyboard is. It answers
|
|
371
|
+
* `null` once a submenu has taken the cursor: that pane is a separate overlay,
|
|
372
|
+
* and its own rows are reached through `WrContextMenuItemHarness`.
|
|
373
|
+
*/
|
|
374
|
+
getFocusedItemText(): Promise<string | null>;
|
|
362
375
|
/**
|
|
363
376
|
* How many separators this menu shows.
|
|
364
377
|
*
|
|
@@ -66,6 +66,18 @@ declare class WrContextMenu {
|
|
|
66
66
|
*/
|
|
67
67
|
protected readonly openMenuId: _angular_core.WritableSignal<string | null>;
|
|
68
68
|
private overlayRef;
|
|
69
|
+
/**
|
|
70
|
+
* The open menu's subscription to CDK's keyboard dispatcher, held so that
|
|
71
|
+
* `closeOverlay()` can drop it — see the unsubscribe there for why the pane's
|
|
72
|
+
* own disposal is 220 ms too late.
|
|
73
|
+
*/
|
|
74
|
+
private rootKeys;
|
|
75
|
+
/**
|
|
76
|
+
* Where the keyboard was at the moment this menu took it, so a close can put
|
|
77
|
+
* it back there. Null when it was nowhere in particular (`<body>`) or already
|
|
78
|
+
* inside a menu pane, neither of which is a place to return to.
|
|
79
|
+
*/
|
|
80
|
+
private restoreFocusTo;
|
|
69
81
|
/**
|
|
70
82
|
* Panes waiting out their exit animation, keyed by the timer that disposes
|
|
71
83
|
* them.
|
|
@@ -149,6 +161,24 @@ declare class WrContextMenu {
|
|
|
149
161
|
close(): void;
|
|
150
162
|
private openOverlay;
|
|
151
163
|
private closeOverlay;
|
|
164
|
+
/**
|
|
165
|
+
* Put the keyboard back where it came from.
|
|
166
|
+
*
|
|
167
|
+
* The element that had it when the menu opened comes first: a context menu
|
|
168
|
+
* hangs on a REGION — a card, a table row — and Shift+F10 / the Menu key fires
|
|
169
|
+
* `contextmenu` at whatever control inside it the user was actually on, which
|
|
170
|
+
* is their place in the page.
|
|
171
|
+
*
|
|
172
|
+
* The trigger is the fallback, and it needs help to be one. `[wrContextMenu]`
|
|
173
|
+
* adds no `tabindex` and every shape the docs ship is a plain `<div>`, so
|
|
174
|
+
* `focus()` on it does nothing at all — the handback silently missed, leaving
|
|
175
|
+
* the caret in the disposing pane and then on `<body>`, which is the outcome
|
|
176
|
+
* the call is there to prevent. Lending it `tabindex="-1"` for the call and
|
|
177
|
+
* taking that back on blur keeps the consumer's DOM as they wrote it; a
|
|
178
|
+
* permanent `tabindex="0"` would make every right-clickable region a tab stop,
|
|
179
|
+
* which is their decision and not the library's.
|
|
180
|
+
*/
|
|
181
|
+
private handBackFocus;
|
|
152
182
|
private cancelLeaveTimer;
|
|
153
183
|
private scheduleLeave;
|
|
154
184
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrContextMenu, never>;
|
|
@@ -191,9 +221,17 @@ declare class WrContextMenuItem {
|
|
|
191
221
|
private readonly scrollStrategies;
|
|
192
222
|
private readonly destroyRef;
|
|
193
223
|
private submenuRef;
|
|
224
|
+
private submenuKeys;
|
|
194
225
|
private openTimer;
|
|
195
226
|
private closeTimer;
|
|
196
227
|
protected submenuOpen: boolean;
|
|
228
|
+
/**
|
|
229
|
+
* Whether the pending open was asked for by the keyboard (→ / Enter / Space)
|
|
230
|
+
* rather than by hover — only then does the submenu take focus, the same rule
|
|
231
|
+
* `wr-dropdown` applies to its own open. Sweeping the cursor across a row must
|
|
232
|
+
* show its submenu without yanking the caret out of it.
|
|
233
|
+
*/
|
|
234
|
+
private openedByKeyboard;
|
|
197
235
|
/**
|
|
198
236
|
* Id of the submenu's menu element while it is open, published on the item as
|
|
199
237
|
* `aria-controls` — the same contract the root trigger keeps (see
|
|
@@ -257,6 +295,24 @@ declare class WrContextMenuItem {
|
|
|
257
295
|
private cancelOpen;
|
|
258
296
|
private cancelClose;
|
|
259
297
|
private openSubmenu;
|
|
298
|
+
/**
|
|
299
|
+
* @internal Keys routed here while this submenu is the topmost overlay: the
|
|
300
|
+
* arrows walk the rows of the pane the caret is in, and Escape or the arrow
|
|
301
|
+
* pointing BACK the way the menu cascades steps out one level, returning the
|
|
302
|
+
* cursor to the row that owns the pane when the cursor was inside it.
|
|
303
|
+
*
|
|
304
|
+
* Escape closes this level only, not the whole chain — the APG's rule for a
|
|
305
|
+
* submenu. It reaches this handler rather than the root's because the
|
|
306
|
+
* dispatcher stops at the topmost overlay that listens, which is now this one.
|
|
307
|
+
*
|
|
308
|
+
* Which is also why the arrows are aimed at the pane holding the caret rather
|
|
309
|
+
* than at this one. The dispatcher routes by stacking order, not by focus, and
|
|
310
|
+
* a HOVER-opened submenu is topmost while focus is deliberately still on the
|
|
311
|
+
* root row the pointer swept off (see `openedByKeyboard`) — so ArrowDown used
|
|
312
|
+
* to jump into this pane's first row instead of moving down the menu the user
|
|
313
|
+
* is in. Same reason `wr-dropdown`'s menu handler checks ownership.
|
|
314
|
+
*/
|
|
315
|
+
private onSubmenuKeydown;
|
|
260
316
|
/** Bound handlers (= preserves identity for removeEventListener). */
|
|
261
317
|
private readonly onSubmenuEnter;
|
|
262
318
|
private readonly onSubmenuLeave;
|
package/types/ngwr-counter.d.ts
CHANGED
|
@@ -1,12 +1,34 @@
|
|
|
1
|
-
import { WrDateAdapter, WrDateFormat } from 'ngwr/date
|
|
1
|
+
import { WrDateAdapter, WrDateFormat } from 'ngwr/date';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { EnvironmentProviders } from '@angular/core';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* {@link WrDateAdapter} backed by `date-fns`. Same `Date` value type as the
|
|
7
|
-
* native adapter, but defers all math, formatting, and parsing to date-fns
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* native adapter, but defers all math, formatting, and parsing to date-fns —
|
|
8
|
+
* pick this when you want its long patterns (`P`, `PP`, `PPP`, `p`) without
|
|
9
|
+
* writing them by hand.
|
|
10
|
+
*
|
|
11
|
+
* **{@link WR_DATE_LOCALE} does not reach `format` or `parse`, and that is not
|
|
12
|
+
* an oversight.** date-fns resolves those patterns against a date-fns `Locale`
|
|
13
|
+
* OBJECT rather than a BCP 47 tag, and the objects are separate modules —
|
|
14
|
+
* mapping a tag onto one would mean importing all of them, which defeats the
|
|
15
|
+
* tree-shaking that is the reason this is an opt-in entry point. So the named
|
|
16
|
+
* formats render AND read in en-US whatever the tag says, while
|
|
17
|
+
* `getFirstDayOfWeek`, `getDayOfWeekNames` and `getMonthNames` go through `Intl`
|
|
18
|
+
* and do honour it: a calendar heads its columns `пн вт ср` beside a trigger
|
|
19
|
+
* reading `08/11/2025`. Reading is the sharper edge — `11/08/2025` typed by a
|
|
20
|
+
* user in a dd/MM locale parses as 8 November, valid and wrong.
|
|
21
|
+
*
|
|
22
|
+
* The lever is date-fns's own module default, and the adapter passing no locale
|
|
23
|
+
* is precisely what keeps it working. Set it once at bootstrap, or take
|
|
24
|
+
* `provideWrLuxonAdapter()`, which forwards the tag itself:
|
|
25
|
+
*
|
|
26
|
+
* ```ts
|
|
27
|
+
* import { setDefaultOptions } from 'date-fns';
|
|
28
|
+
* import { ru } from 'date-fns/locale';
|
|
29
|
+
*
|
|
30
|
+
* setDefaultOptions({ locale: ru });
|
|
31
|
+
* ```
|
|
10
32
|
*
|
|
11
33
|
* @example
|
|
12
34
|
* ```ts
|
|
@@ -56,8 +78,13 @@ declare class WrDateFnsAdapter extends WrDateAdapter<Date> {
|
|
|
56
78
|
|
|
57
79
|
/**
|
|
58
80
|
* Register the {@link WrDateFnsAdapter} so date-pickers / calendars in this
|
|
59
|
-
* app use `date-fns` for all math and formatting.
|
|
60
|
-
*
|
|
81
|
+
* app use `date-fns` for all math and formatting.
|
|
82
|
+
*
|
|
83
|
+
* `locale` sets {@link WR_DATE_LOCALE}, which this adapter reads for the first
|
|
84
|
+
* day of the week and nothing else — its `format` and `parse` do not pass a
|
|
85
|
+
* locale to date-fns. For localized month names and patterns, set date-fns's own
|
|
86
|
+
* module default with `setDefaultOptions`, or use the luxon adapter, which does
|
|
87
|
+
* thread the tag through everything.
|
|
61
88
|
*
|
|
62
89
|
* @example
|
|
63
90
|
* ```ts
|
|
@@ -101,18 +101,23 @@ type Unit = (typeof UNITS)[number];
|
|
|
101
101
|
* independently instead of by CSS nth-of-type gymnastics.
|
|
102
102
|
*
|
|
103
103
|
* Units are addressed by position, not by the boxes' `aria-label`: every string
|
|
104
|
-
* in this panel
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* is the layout contract.
|
|
104
|
+
* in this panel now resolves through the i18n catalog (`datePicker.hours`,
|
|
105
|
+
* `datePicker.incrementHours`, `datePicker.am` …), so keying on them would make
|
|
106
|
+
* this harness answer in whatever locale the app under test is configured for.
|
|
107
|
+
* Column order is the layout contract.
|
|
108
108
|
*
|
|
109
109
|
* @internal
|
|
110
110
|
*/
|
|
111
111
|
declare class WrTimePanelHarness extends ComponentHarness {
|
|
112
112
|
static hostSelector: string;
|
|
113
|
-
/** The stepper's value as `HH:MM`, plus `:SS` and
|
|
113
|
+
/** The stepper's value as `HH:MM`, plus `:SS` and a space-joined {@link getMeridiem} when those columns exist. */
|
|
114
114
|
getTimeText(): Promise<string>;
|
|
115
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* The meridiem column's rendered text, or `null` when the stepper is in
|
|
117
|
+
* 24-hour mode. `'AM'` / `'PM'` on the built-in fallbacks — it reads whatever
|
|
118
|
+
* `datePicker.am` / `datePicker.pm` resolve to, so a configured catalog
|
|
119
|
+
* changes the answer.
|
|
120
|
+
*/
|
|
116
121
|
getMeridiem(): Promise<string | null>;
|
|
117
122
|
/**
|
|
118
123
|
* Type into the boxes named by `fields`, leaving the rest alone.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { ElementRef } from '@angular/core';
|
|
3
3
|
import { FormValueControl } from '@angular/forms/signals';
|
|
4
|
-
import { WrDateFormat } from 'ngwr/date
|
|
4
|
+
import { WrDateFormat } from 'ngwr/date';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Unified date / time / date-time picker. Same `<input>` + popover skeleton
|
|
@@ -143,6 +143,10 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
143
143
|
* skip the echo of our own edits (so a live keystroke's raw text is never
|
|
144
144
|
* reformatted mid-type). */
|
|
145
145
|
private lastValue;
|
|
146
|
+
/** The format the sync effect last rendered with. Paired with `lastValue`
|
|
147
|
+
* because the echo guard has to answer "is the display still current", and a
|
|
148
|
+
* `[format]` / `[mode]` change makes it stale with the value untouched. */
|
|
149
|
+
private lastFormat;
|
|
146
150
|
constructor();
|
|
147
151
|
protected onInput(event: Event): void;
|
|
148
152
|
protected onBlur(): void;
|
|
@@ -320,9 +324,9 @@ declare class WrDateRangePicker implements FormValueControl<WrDateRange | null>
|
|
|
320
324
|
/** Resolved format — falls back to a mode-appropriate default. */
|
|
321
325
|
protected readonly resolvedFormat: _angular_core.Signal<string>;
|
|
322
326
|
protected readonly isDateTime: _angular_core.Signal<boolean>;
|
|
323
|
-
protected readonly triggerLabel: string
|
|
324
|
-
protected readonly startLabel: string
|
|
325
|
-
protected readonly endLabel: string
|
|
327
|
+
protected readonly triggerLabel: _angular_core.Signal<string>;
|
|
328
|
+
protected readonly startLabel: _angular_core.Signal<string>;
|
|
329
|
+
protected readonly endLabel: _angular_core.Signal<string>;
|
|
326
330
|
private readonly panelLabelRange;
|
|
327
331
|
private readonly panelLabelRangeDateTime;
|
|
328
332
|
/**
|
|
@@ -145,6 +145,18 @@ declare class WrNativeDateAdapter extends WrDateAdapter<Date> {
|
|
|
145
145
|
format(date: Date, formatKeyOrString: WrDateFormat | (string & {})): string;
|
|
146
146
|
parse(value: string, formatKeyOrString: WrDateFormat | (string & {})): Date | null;
|
|
147
147
|
getFirstDayOfWeek(): number;
|
|
148
|
+
/**
|
|
149
|
+
* One `Intl.DateTimeFormat` per named format, built once.
|
|
150
|
+
*
|
|
151
|
+
* Constructing one is the expensive part of `format()`, and this adapter is
|
|
152
|
+
* called per CELL: `wr-event-calendar` builds an `aria-label` for every time
|
|
153
|
+
* slot on every day, so a week view asked for hundreds of identical
|
|
154
|
+
* formatters. `locale` is injected once and never changes for the life of the
|
|
155
|
+
* adapter, so the cache needs no invalidation — that is the whole reason it
|
|
156
|
+
* can be this simple.
|
|
157
|
+
*/
|
|
158
|
+
private readonly formatters;
|
|
159
|
+
private intl;
|
|
148
160
|
getDayOfWeekNames(style: 'narrow' | 'short' | 'long'): readonly string[];
|
|
149
161
|
getMonthNames(style: 'narrow' | 'short' | 'long'): readonly string[];
|
|
150
162
|
private formatWithTokens;
|
|
@@ -185,12 +197,19 @@ declare function provideWrDateAdapter(options?: WrDateAdapterOptions): Environme
|
|
|
185
197
|
*/
|
|
186
198
|
|
|
187
199
|
/**
|
|
188
|
-
* BCP 47 locale tag
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
* `'en-US'` on the server.
|
|
200
|
+
* BCP 47 locale tag the {@link WrDateAdapter} implementations read. Defaults to
|
|
201
|
+
* `navigator.language` in the browser and `'en-US'` on the server; override via
|
|
202
|
+
* {@link provideWrDateAdapter}'s `locale` option.
|
|
192
203
|
*
|
|
193
|
-
*
|
|
204
|
+
* **How far it reaches depends on the adapter, and the difference matters.**
|
|
205
|
+
* The luxon adapter threads it through everything — every `DateTime` is
|
|
206
|
+
* constructed with it, and `format` / `parse` call `setLocale`. The date-fns
|
|
207
|
+
* adapter reads it only for locale-DERIVED defaults (first day of week); its
|
|
208
|
+
* `format` and `parse` pass no locale to date-fns, so they stay on that
|
|
209
|
+
* library's module default. Setting this token and expecting French month names
|
|
210
|
+
* out of `WrDateFnsAdapter` gets English ones, and the parse side of that
|
|
211
|
+
* mismatch is silent rather than loud — see the adapter's own class docs for the
|
|
212
|
+
* lever (`setDefaultOptions`).
|
|
194
213
|
*/
|
|
195
214
|
declare const WR_DATE_LOCALE: InjectionToken<string>;
|
|
196
215
|
|
package/types/ngwr-dialog.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { OverlayRef } from '@angular/cdk/overlay';
|
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
5
|
import { ComponentRef, InjectionToken, ElementRef } from '@angular/core';
|
|
6
6
|
import { ReplaySubject } from 'rxjs';
|
|
7
|
+
import * as i1 from '@angular/cdk/scrolling';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @license
|
|
@@ -87,6 +88,15 @@ interface WrDialogOptions<D = unknown> {
|
|
|
87
88
|
readonly closeOnBackdropClick?: boolean;
|
|
88
89
|
/** When `true`, the Escape key closes the dialog. @default true */
|
|
89
90
|
readonly closeOnEscape?: boolean;
|
|
91
|
+
/**
|
|
92
|
+
* When `true`, the dialog closes as soon as the URL changes — the Back button
|
|
93
|
+
* and any `router.navigate()` alike. Nothing else ties a dialog to the route
|
|
94
|
+
* it was opened on, so turning this off leaves the pane, its backdrop and its
|
|
95
|
+
* focus trap over whatever page the app navigates to. Turn it off only for a
|
|
96
|
+
* dialog that OWNS the navigation (a wizard that keeps its step in the URL).
|
|
97
|
+
* @default true
|
|
98
|
+
*/
|
|
99
|
+
readonly closeOnNavigation?: boolean;
|
|
90
100
|
/**
|
|
91
101
|
* Render a dismiss (×) button in the panel's top-right corner. Set `false`
|
|
92
102
|
* when the content supplies its own close affordance, or when the dialog must
|
|
@@ -139,7 +149,24 @@ declare class WrDialog {
|
|
|
139
149
|
private readonly isBrowser;
|
|
140
150
|
private readonly responsiveConfig;
|
|
141
151
|
private readonly i18n;
|
|
152
|
+
private readonly location;
|
|
142
153
|
open<C, R = unknown, D = unknown>(component: ComponentType<C>, options?: WrDialogOptions<D>): WrDialogRef<C, R>;
|
|
154
|
+
/**
|
|
155
|
+
* Tie the dialog's lifetime to the URL it was opened on.
|
|
156
|
+
*
|
|
157
|
+
* Nothing else does. The overlay belongs to a root service and is dismissed
|
|
158
|
+
* only by the backdrop, Escape or an explicit `close()`, so pressing Back
|
|
159
|
+
* swapped the routed view underneath and left the modal pane, its backdrop and
|
|
160
|
+
* its focus trap sitting over a page the user never opened them on.
|
|
161
|
+
*
|
|
162
|
+
* `onUrlChange`, not `Location.subscribe()` — which is what CDK's own
|
|
163
|
+
* `disposeOnNavigation` uses: `subscribe` fires on popstate alone, so an
|
|
164
|
+
* in-app `router.navigate()` left the dialog standing. And `dialogRef.close()`
|
|
165
|
+
* rather than disposing the overlay behind the ref's back, which would never
|
|
166
|
+
* emit `closed`, never destroy the focus trap, and leave `awaitClose()`
|
|
167
|
+
* pending forever.
|
|
168
|
+
*/
|
|
169
|
+
private watchNavigation;
|
|
143
170
|
/**
|
|
144
171
|
* The dismiss button's accessible name.
|
|
145
172
|
*
|
|
@@ -242,6 +269,16 @@ declare class WrDialogTitle {
|
|
|
242
269
|
/**
|
|
243
270
|
* Styles the scrollable body section of a dialog.
|
|
244
271
|
*
|
|
272
|
+
* `CdkScrollable` is a host directive because this element is a real scroll
|
|
273
|
+
* container (`overflow: auto`) and an anchored overlay opened from inside it has
|
|
274
|
+
* to follow its trigger. CDK's `reposition()` strategy listens to
|
|
275
|
+
* `ScrollDispatcher`, which is fed by registered scrollables plus ONE
|
|
276
|
+
* non-capturing `document` listener — and element `scroll` does not bubble, so
|
|
277
|
+
* without the registration a `<wr-select>` halfway down a long dialog form kept
|
|
278
|
+
* its panel pinned to the viewport while the trigger scrolled away. Angular
|
|
279
|
+
* Material carries the same host directive on `MatDialogContent` for the same
|
|
280
|
+
* reason.
|
|
281
|
+
*
|
|
245
282
|
* @example
|
|
246
283
|
* ```html
|
|
247
284
|
* <div wrDialogContent>…body…</div>
|
|
@@ -249,7 +286,7 @@ declare class WrDialogTitle {
|
|
|
249
286
|
*/
|
|
250
287
|
declare class WrDialogContent {
|
|
251
288
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrDialogContent, never>;
|
|
252
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<WrDialogContent, "[wrDialogContent]", never, {}, {}, never, never, true,
|
|
289
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<WrDialogContent, "[wrDialogContent]", never, {}, {}, never, never, true, [{ directive: typeof i1.CdkScrollable; inputs: {}; outputs: {}; }]>;
|
|
253
290
|
}
|
|
254
291
|
|
|
255
292
|
/**
|
package/types/ngwr-divider.d.ts
CHANGED
|
@@ -65,6 +65,31 @@ declare class WrDivider {
|
|
|
65
65
|
*/
|
|
66
66
|
readonly align: _angular_core.InputSignal<WrDividerAlign>;
|
|
67
67
|
protected readonly classes: _angular_core.Signal<string>;
|
|
68
|
+
private readonly host;
|
|
69
|
+
/**
|
|
70
|
+
* The consumer's own `aria-label`, resolved on the first sync — `undefined`
|
|
71
|
+
* until then, which is how "not looked at yet" stays distinct from "they wrote
|
|
72
|
+
* none".
|
|
73
|
+
*/
|
|
74
|
+
private authored;
|
|
75
|
+
constructor();
|
|
76
|
+
/**
|
|
77
|
+
* Name the separator with the label it projects.
|
|
78
|
+
*
|
|
79
|
+
* `role="separator"` makes the host's children presentational and a separator
|
|
80
|
+
* takes its accessible name from the author alone — so `<wr-divider>OR</wr-divider>`
|
|
81
|
+
* reaches assistive tech as an unnamed rule while everyone else reads "OR".
|
|
82
|
+
* Copying the label into `aria-label` is the only way to expose it without giving
|
|
83
|
+
* up the role, and the two can never disagree because one is the source of the
|
|
84
|
+
* other.
|
|
85
|
+
*
|
|
86
|
+
* Written straight to the DOM rather than through a host binding, for two
|
|
87
|
+
* reasons a binding cannot cover: the label is projected content, so an
|
|
88
|
+
* interpolation or an `@if` can change it while the divider stays put; and a
|
|
89
|
+
* binding resolving to `null` would strip an `aria-label` the consumer wrote
|
|
90
|
+
* themselves — theirs is the author name already and is never touched.
|
|
91
|
+
*/
|
|
92
|
+
private syncLabel;
|
|
68
93
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDivider, never>;
|
|
69
94
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDivider, "wr-divider", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
70
95
|
}
|
|
@@ -31,11 +31,15 @@ interface WrDonutChartLegendEntry {
|
|
|
31
31
|
* Test harness for `<wr-donut-chart>`.
|
|
32
32
|
*
|
|
33
33
|
* **The ring itself is unreadable, and that is by design.** The slices are SVG
|
|
34
|
-
* paths inside
|
|
34
|
+
* paths inside a `role="img"` drawing: a screen reader is given that drawing's
|
|
35
35
|
* `aria-label` and nothing else, and a spec cannot get a label or a value off a
|
|
36
36
|
* path's `d`. {@link getLegend} is where the numbers are — which is also the
|
|
37
|
-
* argument for keeping `showLegend` on, since with it off the
|
|
38
|
-
*
|
|
37
|
+
* argument for keeping `showLegend` on, since with it off the only other text is
|
|
38
|
+
* whatever {@link getCenterValue} and {@link getCenterLabel} were given.
|
|
39
|
+
*
|
|
40
|
+
* The name is read off the `<svg>` rather than off the surface that wraps it, and
|
|
41
|
+
* the two are not interchangeable: `img` makes its whole subtree presentational, so
|
|
42
|
+
* a name on the wrapper would take the centre text down with it.
|
|
39
43
|
*
|
|
40
44
|
* {@link getSliceCount} is therefore the one thing the ring answers: how many
|
|
41
45
|
* wedges were drawn. Compare it with the legend's length to catch a slice that was
|
|
@@ -23,9 +23,9 @@ interface WrDonutSegment {
|
|
|
23
23
|
declare class WrDonutChart {
|
|
24
24
|
readonly segments: _angular_core.InputSignal<readonly WrDonutSegment[]>;
|
|
25
25
|
/**
|
|
26
|
-
* Accessible name of the
|
|
27
|
-
*
|
|
28
|
-
* to `donutChart.label`.
|
|
26
|
+
* Accessible name of the drawing. The arcs carry no text and the legend is optional, so
|
|
27
|
+
* with `showLegend: false` this and the centre text are the whole of what a screen reader
|
|
28
|
+
* gets. Falls back to `donutChart.label`.
|
|
29
29
|
*/
|
|
30
30
|
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
31
31
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
|
|
@@ -21,8 +21,21 @@ interface WrSortableReorderEvent<T> {
|
|
|
21
21
|
* emitted via 2-way `[(items)]`.
|
|
22
22
|
*
|
|
23
23
|
* Drop a single template — it's rendered per item with `let-item
|
|
24
|
-
* let-index="index"`.
|
|
25
|
-
*
|
|
24
|
+
* let-index="index"`. Put `wrDragHandle` on an element inside that
|
|
25
|
+
* template to restrict drag start to a handle; there is no input for
|
|
26
|
+
* it, the directive's presence is the switch.
|
|
27
|
+
*
|
|
28
|
+
* Every row is a tab stop: Space or Enter picks it up, the arrow keys move it,
|
|
29
|
+
* Space or Enter drops it and Escape puts it back. CDK's `cdkDrag` ships no key
|
|
30
|
+
* handling of its own, so without this the component's only function was
|
|
31
|
+
* unreachable from a keyboard.
|
|
32
|
+
*
|
|
33
|
+
* What that does NOT answer is WCAG 2.5.7, which asks for a POINTER alternative
|
|
34
|
+
* to the drag. Click-to-pick-up is the obvious candidate and is not safe here:
|
|
35
|
+
* the CDK's drag-drop bundle installs no click suppressor of any kind, so the
|
|
36
|
+
* mouseup ending a drag still produces a click, and a row that grabbed itself on
|
|
37
|
+
* click would be picking itself straight back up. A visible move-up /
|
|
38
|
+
* move-down affordance is the remaining answer, and that is a design change.
|
|
26
39
|
*
|
|
27
40
|
* @example
|
|
28
41
|
* ```html
|
|
@@ -64,7 +77,48 @@ declare class WrSortableList<T = unknown> {
|
|
|
64
77
|
/** Fired after a successful reorder with the new array + indices. */
|
|
65
78
|
readonly reorder: _angular_core.OutputEmitterRef<WrSortableReorderEvent<T>>;
|
|
66
79
|
protected readonly rowTemplate: _angular_core.Signal<TemplateRef<any>>;
|
|
80
|
+
private readonly injector;
|
|
81
|
+
private readonly rowEls;
|
|
82
|
+
/** Index of the row the keyboard is holding, or `null` when nothing is held. */
|
|
83
|
+
protected readonly grabbedIndex: _angular_core.WritableSignal<number | null>;
|
|
84
|
+
/** Live-region text. Written by the keyboard path only. */
|
|
85
|
+
protected readonly announcement: _angular_core.WritableSignal<string>;
|
|
86
|
+
/** Links every row to the key model via `aria-describedby`. */
|
|
87
|
+
protected readonly keyHelpId: string;
|
|
88
|
+
protected readonly resolvedKeyHelp: _angular_core.Signal<string>;
|
|
89
|
+
private readonly grabbedText;
|
|
90
|
+
private readonly movedText;
|
|
91
|
+
private readonly droppedText;
|
|
92
|
+
private readonly cancelledText;
|
|
93
|
+
/** Where the held row started. Escape puts it back there. */
|
|
94
|
+
private grabOrigin;
|
|
95
|
+
/** True while a keyboard move is handing focus back — see `onRowFocusout`. */
|
|
96
|
+
private restoringFocus;
|
|
67
97
|
protected onDrop(event: CdkDragDrop<T[]>): void;
|
|
98
|
+
/**
|
|
99
|
+
* The keyboard reorder path: pick up, move, drop — deliberately a two-step
|
|
100
|
+
* grab rather than "an arrow moves the focused row", so that arrowing through
|
|
101
|
+
* a list a user is only reading can never rearrange it.
|
|
102
|
+
*
|
|
103
|
+
* Keys are handled only when the ROW itself is the event target; a button or
|
|
104
|
+
* an input projected into the row template keeps every key it would normally
|
|
105
|
+
* get.
|
|
106
|
+
*/
|
|
107
|
+
protected onRowKeydown(event: KeyboardEvent, index: number): void;
|
|
108
|
+
/**
|
|
109
|
+
* Focus leaving a held row ends the gesture as a drop rather than dropping the
|
|
110
|
+
* change on the floor — `[(items)]` has already been written by then, so a
|
|
111
|
+
* silent release would leave `reorder` never reporting a move that happened.
|
|
112
|
+
* The guard is what makes it safe: moving a focused node in the DOM blurs it,
|
|
113
|
+
* so every keyboard move fires this too.
|
|
114
|
+
*/
|
|
115
|
+
protected onRowFocusout(): void;
|
|
116
|
+
private grab;
|
|
117
|
+
private moveGrabbed;
|
|
118
|
+
private drop;
|
|
119
|
+
private cancelGrab;
|
|
120
|
+
private relocate;
|
|
121
|
+
private position;
|
|
68
122
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSortableList<any>, never>;
|
|
69
123
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSortableList<any>, "wr-sortable-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "lockAxis": { "alias": "lockAxis"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "reorder": "reorder"; }, ["rowTemplate"], never, true, never>;
|
|
70
124
|
}
|