ngwr 11.2.0 → 12.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 +7 -7
- 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 +17 -13
- 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 +14 -1
- package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
- package/fesm2022/ngwr-segmented.mjs +29 -6
- 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 +18 -23
- package/llms.txt +22 -6
- 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-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 +9 -0
- package/types/ngwr-segmented.d.ts +21 -1
- 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
package/types/ngwr-mention.d.ts
CHANGED
|
@@ -65,6 +65,12 @@ declare class WrMention<T extends WrMentionItem = WrMentionItem> {
|
|
|
65
65
|
private readonly isBrowser;
|
|
66
66
|
private overlayRef;
|
|
67
67
|
private panelRef;
|
|
68
|
+
/**
|
|
69
|
+
* Where the caret sits INSIDE the field — its offset from the field's
|
|
70
|
+
* top-left corner, plus the height of the line it is on. Mutated in place by
|
|
71
|
+
* `open()`, never replaced: `caretAnchor()` closes over this object.
|
|
72
|
+
*/
|
|
73
|
+
private readonly caretOffset;
|
|
68
74
|
private state;
|
|
69
75
|
private readonly activeIndex;
|
|
70
76
|
private readonly filteredItems;
|
|
@@ -113,6 +119,27 @@ declare class WrMention<T extends WrMentionItem = WrMentionItem> {
|
|
|
113
119
|
private activate;
|
|
114
120
|
private filter;
|
|
115
121
|
private setActive;
|
|
122
|
+
/**
|
|
123
|
+
* The overlay's anchor: the caret's line box, grown by the gap the panel
|
|
124
|
+
* keeps from the text, as a zero-WIDTH virtual origin in viewport
|
|
125
|
+
* coordinates. Inflating the rect rather than passing `offsetY` is what keeps
|
|
126
|
+
* `withPush` honest — CDK applies a position offset as a `transform` AFTER it
|
|
127
|
+
* has clamped, so a pushed panel would land the offset off the screen edge.
|
|
128
|
+
*
|
|
129
|
+
* Live getters, not a snapshot, and that is the whole of the scroll fix.
|
|
130
|
+
* `getCaretCoordinates` answers in viewport coordinates, which a
|
|
131
|
+
* `GlobalPositionStrategy` froze at the instant of the keystroke: the panel
|
|
132
|
+
* then stayed pinned to the screen while the page scrolled out from under it
|
|
133
|
+
* (150px of scroll, 150px of drift, ending up over unrelated content). CDK
|
|
134
|
+
* re-reads a virtual origin on every `apply()`, so pinning it to the FIELD's
|
|
135
|
+
* live rect is what turns `reposition()` into a real re-anchor.
|
|
136
|
+
*
|
|
137
|
+
* Only the caret's offset inside the field is captured up front. Measuring it
|
|
138
|
+
* runs the mirror-div pass in `caret.ts` — a full layout read, far too
|
|
139
|
+
* expensive to repeat per scroll event — and it cannot change without a
|
|
140
|
+
* keystroke, which re-enters `open()` anyway.
|
|
141
|
+
*/
|
|
142
|
+
private caretAnchor;
|
|
116
143
|
private open;
|
|
117
144
|
private close;
|
|
118
145
|
private commit;
|
|
@@ -123,6 +150,11 @@ declare class WrMention<T extends WrMentionItem = WrMentionItem> {
|
|
|
123
150
|
/**
|
|
124
151
|
* Overlay panel rendered by {@link WrMention}. Not intended for
|
|
125
152
|
* direct use — the directive instantiates it via a ComponentPortal.
|
|
153
|
+
*
|
|
154
|
+
* @internal — the same tag its twin `WrPopconfirmPanel` already carried. It says
|
|
155
|
+
* the intent; it does not by itself keep the class out of the generated API
|
|
156
|
+
* tables, because `WrTableFilter` and `WrTableSort` are tagged AND documented —
|
|
157
|
+
* see `EXPORTED_BUT_INTERNAL` in `scripts/lib/extract-api.ts`.
|
|
126
158
|
*/
|
|
127
159
|
declare class WrMentionPanel {
|
|
128
160
|
readonly items: _angular_core.InputSignal<readonly WrMentionItem[]>;
|
|
@@ -35,8 +35,16 @@ interface WrMeterGroupSlice {
|
|
|
35
35
|
* **The bar is a single `progressbar`, and its value is the TOTAL.** The bands
|
|
36
36
|
* themselves announce nothing: they carry a `title` for a mouse and their share as an
|
|
37
37
|
* inline width, and the legend is where their labels and values are readable. So a
|
|
38
|
-
* spec that wants "how much of each" reads {@link
|
|
39
|
-
*
|
|
38
|
+
* spec that wants "how much of each" reads {@link getSlices} for the shares or
|
|
39
|
+
* {@link getLegendLabels} / {@link getLegendValues} for what is printed, and one that
|
|
40
|
+
* wants "how full" reads {@link getValue}.
|
|
41
|
+
*
|
|
42
|
+
* **A band's share is read off the `style` ATTRIBUTE, not through `getCssValue()`**,
|
|
43
|
+
* and the difference is not cosmetic: `getCssValue()` is `getComputedStyle()`, and
|
|
44
|
+
* `width` resolves to the USED value — so the declared `30%` comes straight back in
|
|
45
|
+
* jsdom and arrives as `180px` on a 600px bar in a real browser, and the same harness
|
|
46
|
+
* answered 30 here and 180 under a browser runner with nothing to say which one you
|
|
47
|
+
* got.
|
|
40
48
|
*
|
|
41
49
|
* @see https://ngwr.dev/guides/testing
|
|
42
50
|
*/
|
|
@@ -55,6 +63,8 @@ declare class WrMeterGroupHarness extends ComponentHarness {
|
|
|
55
63
|
getMax(): Promise<number>;
|
|
56
64
|
/** The bands, in order, with the share of the bar each takes. */
|
|
57
65
|
getSlices(): Promise<WrMeterGroupSlice[]>;
|
|
66
|
+
/** Parse one band's declared share. See the class note on why this is not `getCssValue()`. */
|
|
67
|
+
private static percentOf;
|
|
58
68
|
/** Whether the legend is rendered (`showLegend`, and at least one band). */
|
|
59
69
|
hasLegend(): Promise<boolean>;
|
|
60
70
|
/** The legend's labels, in order. */
|
package/types/ngwr-overlay.d.ts
CHANGED
|
@@ -303,3 +303,4 @@ declare const WR_OVERLAY: InjectionToken<Overlay>;
|
|
|
303
303
|
declare const WR_OVERLAY_CONTAINER: InjectionToken<OverlayContainer>;
|
|
304
304
|
|
|
305
305
|
export { WR_OVERLAY, WR_OVERLAY_CONTAINER, WR_RESPONSIVE_OVERLAYS, WrOutsideClick, WrOverlayContainer, provideWrOverlay, provideWrResponsiveOverlays, wrAppendOverlayClose, wrMirrorOffsets, wrPresentAsSheet };
|
|
306
|
+
export type { WrResponsiveOverlaysConfig };
|
|
@@ -179,10 +179,10 @@ declare class WrPaginationHarness extends ComponentHarness {
|
|
|
179
179
|
* The page the pager announces as current, from `aria-current="page"`.
|
|
180
180
|
*
|
|
181
181
|
* Throws when no cell claims it. The window always keeps the current page on the
|
|
182
|
-
* strip, so getting here means `currentPage` is not one of the pages at all
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* inactive to an assistive tech user.
|
|
182
|
+
* strip, so getting here means `currentPage` is not one of the pages at all. The
|
|
183
|
+
* component clamps a host write into `1..totalPages`, which leaves one survivor:
|
|
184
|
+
* a fractional page, which is in range and matches no cell — and which leaves
|
|
185
|
+
* every cell looking equally inactive to an assistive tech user.
|
|
186
186
|
*/
|
|
187
187
|
getCurrentPage(): Promise<number>;
|
|
188
188
|
/**
|
package/types/ngwr-pipes.d.ts
CHANGED
|
@@ -181,8 +181,13 @@ declare class WrPopoverHarness extends ContentContainerComponentHarness {
|
|
|
181
181
|
* Where the panel sits relative to the trigger, or `null` when it is presented
|
|
182
182
|
* as a sheet and has no anchor.
|
|
183
183
|
*
|
|
184
|
-
* The
|
|
185
|
-
*
|
|
184
|
+
* The APPLIED position, not the requested one: CDK flips a placement that does
|
|
185
|
+
* not fit to the next in its fallback chain and swaps the modifier class with
|
|
186
|
+
* it. Under a unit test that is always the requested placement — jsdom measures
|
|
187
|
+
* every box as 0×0, so the first candidate always "fits" — but in a browser the
|
|
188
|
+
* two can differ, and this answers what is on screen. The directive defaults
|
|
189
|
+
* the request per mode (`bottom` for a popover, `top` for a tooltip).
|
|
190
|
+
*
|
|
186
191
|
* The arrow itself is a `::after` pseudo-element, so it exists for no DOM query
|
|
187
192
|
* at all; this class is the placement, and it is what the arrow's own CSS keys
|
|
188
193
|
* off.
|
package/types/ngwr-popover.d.ts
CHANGED
package/types/ngwr-result.d.ts
CHANGED
|
@@ -40,6 +40,8 @@ declare class WrResult {
|
|
|
40
40
|
* ```
|
|
41
41
|
*/
|
|
42
42
|
declare class WrResult404 {
|
|
43
|
+
/** Bound by the shared template; not an input — a preset IS its status. */
|
|
44
|
+
protected readonly status: WrResultStatus;
|
|
43
45
|
readonly title: _angular_core.InputSignal<string>;
|
|
44
46
|
/** Body text. Falls back to `result.notFound` from WrI18n. */
|
|
45
47
|
readonly description: _angular_core.InputSignal<string | null>;
|
|
@@ -49,6 +51,8 @@ declare class WrResult404 {
|
|
|
49
51
|
}
|
|
50
52
|
/** Pre-set 403 result — forbidden / no access. */
|
|
51
53
|
declare class WrResult403 {
|
|
54
|
+
/** Bound by the shared template; not an input — a preset IS its status. */
|
|
55
|
+
protected readonly status: WrResultStatus;
|
|
52
56
|
readonly title: _angular_core.InputSignal<string>;
|
|
53
57
|
/** Body text. Falls back to `result.forbidden` from WrI18n. */
|
|
54
58
|
readonly description: _angular_core.InputSignal<string | null>;
|
|
@@ -58,6 +62,8 @@ declare class WrResult403 {
|
|
|
58
62
|
}
|
|
59
63
|
/** Pre-set 500 result — internal server error. */
|
|
60
64
|
declare class WrResult500 {
|
|
65
|
+
/** Bound by the shared template; not an input — a preset IS its status. */
|
|
66
|
+
protected readonly status: WrResultStatus;
|
|
61
67
|
readonly title: _angular_core.InputSignal<string>;
|
|
62
68
|
/** Body text. Falls back to `result.serverError` from WrI18n. */
|
|
63
69
|
readonly description: _angular_core.InputSignal<string | null>;
|
|
@@ -393,6 +393,15 @@ declare class WrSegmentedHarness extends ComponentHarness {
|
|
|
393
393
|
/** Segment names for an error message, which must not throw on its way out. */
|
|
394
394
|
private describeOptions;
|
|
395
395
|
private describe;
|
|
396
|
+
/**
|
|
397
|
+
* One custom property off the host's `style` ATTRIBUTE.
|
|
398
|
+
*
|
|
399
|
+
* Not `getCssValue()`, which is `getComputedStyle`: with the entry point's own
|
|
400
|
+
* stylesheet loaded that resolves the sheet's declaration, so the method
|
|
401
|
+
* answers plausibly at exactly the moment the host binding — the thing under
|
|
402
|
+
* test — is what broke. The attribute holds only what the component wrote.
|
|
403
|
+
*/
|
|
404
|
+
private inlineVar;
|
|
396
405
|
/** One of the thumb's inline custom properties, as a number. */
|
|
397
406
|
private thumbVar;
|
|
398
407
|
}
|
|
@@ -61,7 +61,27 @@ declare class WrSegmented<T = unknown> {
|
|
|
61
61
|
private readonly mounted;
|
|
62
62
|
constructor();
|
|
63
63
|
protected readonly classes: _angular_core.Signal<string>;
|
|
64
|
-
|
|
64
|
+
private readonly dir;
|
|
65
|
+
/**
|
|
66
|
+
* Reading direction of the strip. `Directionality` is root-provided, so this
|
|
67
|
+
* always resolves — `optional` only guards a consumer who has deliberately
|
|
68
|
+
* torn the provider out. A subtree that overrides the direction does it with
|
|
69
|
+
* the CDK's `Dir` directive, which writes `valueSignal`, so `thumbStyle`
|
|
70
|
+
* re-renders instead of leaving the thumb parked on the old segment.
|
|
71
|
+
*/
|
|
72
|
+
private readonly isRtl;
|
|
73
|
+
/**
|
|
74
|
+
* Inline CSS vars driving the sliding thumb position.
|
|
75
|
+
*
|
|
76
|
+
* `--wr-segmented-thumb-index` is the SLOT the thumb parks in, counted from the
|
|
77
|
+
* physical left, which is the selected index only in LTR. The stylesheet anchors
|
|
78
|
+
* the thumb with a physical `left` and slides it with `translateX` — neither has
|
|
79
|
+
* a logical form — while the options are a grid that mirrors, so under `dir="rtl"`
|
|
80
|
+
* the segment at logical index `i` occupies slot `count - 1 - i`. Left unsigned,
|
|
81
|
+
* the pill sat under a different label than the one it marks (the whole strip's
|
|
82
|
+
* worth of offset at the far end), which is the carousel's `trackStyle` problem
|
|
83
|
+
* one component over.
|
|
84
|
+
*/
|
|
65
85
|
protected readonly thumbStyle: _angular_core.Signal<Record<string, string>>;
|
|
66
86
|
protected isSelected(option: WrSegmentedOption<T>): boolean;
|
|
67
87
|
protected select(option: WrSegmentedOption<T>): void;
|
package/types/ngwr-select.d.ts
CHANGED
|
@@ -194,6 +194,48 @@ declare class WrSelect implements FormValueControl<unknown>, WrSelectContext {
|
|
|
194
194
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
|
|
195
195
|
/** Per-chip ARIA label — interpolates `{{label}}`. @internal */
|
|
196
196
|
protected readonly chipRemoveLabel: (params?: ngwr_i18n.WrI18nParams) => string;
|
|
197
|
+
/**
|
|
198
|
+
* The overflow chip past `maxTagCount` — interpolates `{{count}}`. Through the
|
|
199
|
+
* catalog, like every other string here: printed as a bare `+{{ extra }} more`
|
|
200
|
+
* it stayed English in a fully localized app, beside an event-calendar cell
|
|
201
|
+
* reading "ещё 3" from the same string. @internal
|
|
202
|
+
*/
|
|
203
|
+
protected readonly moreLabel: (params?: ngwr_i18n.WrI18nParams) => string;
|
|
204
|
+
private readonly field;
|
|
205
|
+
/**
|
|
206
|
+
* Id the surrounding `<wr-form-field>`'s `<label for>` points at.
|
|
207
|
+
*
|
|
208
|
+
* The field renders its label before it can see what was projected into it, so
|
|
209
|
+
* the id travels the other way and the control adopts it, exactly as `[wrInput]`
|
|
210
|
+
* and `wr-slider` do. Without this the `for` named an element that was nowhere in
|
|
211
|
+
* the document: clicking the label did nothing, and the field's own text reached
|
|
212
|
+
* the control through no path at all.
|
|
213
|
+
*
|
|
214
|
+
* It lands on the ONE focusable element each trigger shape has — the button, the
|
|
215
|
+
* search input, or the tag input — never on the host, because only a labelable
|
|
216
|
+
* element can be a label's target and `<wr-select>` is not one.
|
|
217
|
+
*
|
|
218
|
+
* What this does NOT change is that element's NAME: `aria-label` outranks a
|
|
219
|
+
* `<label>` in the accname order, and the trigger keeps `resolvedAriaLabel()`
|
|
220
|
+
* because the field cannot promise it has a name to give — `<wr-form-field>`
|
|
221
|
+
* renders a label only when its `label` input is set, and a combobox that traded
|
|
222
|
+
* a generic name for no name would be the worse bug. `WrFormFieldContext`
|
|
223
|
+
* publishes no "do I have a visible label" signal to key that on. Until it does,
|
|
224
|
+
* set `[ariaLabel]` to the field's label where the two should read alike.
|
|
225
|
+
*/
|
|
226
|
+
protected readonly controlId: _angular_core.Signal<string | null>;
|
|
227
|
+
/**
|
|
228
|
+
* The field's error message, wired to the same element.
|
|
229
|
+
*
|
|
230
|
+
* Without it the messages `<wr-form-field>` renders are visible and nothing else:
|
|
231
|
+
* a screen reader on the trigger never learns the field is invalid, nor what the
|
|
232
|
+
* message says. `aria-invalid` is keyed on the message EXISTING rather than on
|
|
233
|
+
* `errorKeys()`, because the field only publishes an id once it is showing
|
|
234
|
+
* something — announcing "invalid" while pointing at nothing is worse than
|
|
235
|
+
* staying quiet.
|
|
236
|
+
*/
|
|
237
|
+
protected readonly describedBy: _angular_core.Signal<string | null>;
|
|
238
|
+
protected readonly ariaInvalid: _angular_core.Signal<"true" | null>;
|
|
197
239
|
/**
|
|
198
240
|
* Disable the select. Bound automatically from the field's disabled state
|
|
199
241
|
* when used with `[formField]`.
|
|
@@ -465,7 +507,17 @@ declare class WrSelect implements FormValueControl<unknown>, WrSelectContext {
|
|
|
465
507
|
protected readonly dynamicOptions: _angular_core.Signal<readonly unknown[]>;
|
|
466
508
|
private static readonly FALLBACK_ROW_PX;
|
|
467
509
|
private static readonly FALLBACK_VIEWPORT_PX;
|
|
468
|
-
/**
|
|
510
|
+
/**
|
|
511
|
+
* Consumer-projected `<wr-option>` children only (NOT the `@for`-rendered ones
|
|
512
|
+
* — those live in the panel's own view, which a content query never sees).
|
|
513
|
+
*
|
|
514
|
+
* `descendants: true` because a projected option is as often wrapped in a
|
|
515
|
+
* `<wr-option-group>` as it is a direct child, and the signal default is
|
|
516
|
+
* `false`. A grouped list therefore read as NO projected options: `virtualActive`
|
|
517
|
+
* engaged over the (empty) data array, so the panel rendered the group's rows
|
|
518
|
+
* with a virtual window beside them that owned the keyboard — no
|
|
519
|
+
* `aria-activedescendant`, no active row, and Enter committing nothing.
|
|
520
|
+
*/
|
|
469
521
|
private readonly projectedOptions;
|
|
470
522
|
/**
|
|
471
523
|
* `dynamicOptions()` narrowed to the current search query. `dynamicOptions()`
|
|
@@ -475,9 +527,9 @@ declare class WrSelect implements FormValueControl<unknown>, WrSelectContext {
|
|
|
475
527
|
*/
|
|
476
528
|
protected readonly filteredDynamicOptions: _angular_core.Signal<readonly unknown[]>;
|
|
477
529
|
/**
|
|
478
|
-
* Virtualization engaged: opt-in, search mode,
|
|
479
|
-
*
|
|
480
|
-
*
|
|
530
|
+
* Virtualization engaged: opt-in, search mode, and NO projected `<wr-option>`
|
|
531
|
+
* children — grouped ones included (those keep the full-render registry path so
|
|
532
|
+
* their DOM-derived labels / selection still work).
|
|
481
533
|
*
|
|
482
534
|
* NOT gated on there being matches. It used to also require
|
|
483
535
|
* `filteredDynamicOptions().length > 0`, which meant a query matching nothing
|
|
@@ -576,8 +628,18 @@ declare class WrSelect implements FormValueControl<unknown>, WrSelectContext {
|
|
|
576
628
|
isSelected(value: unknown): boolean;
|
|
577
629
|
selectOption(value: unknown): void;
|
|
578
630
|
registerOption(reg: WrSelectOptionRegistration): () => void;
|
|
579
|
-
/**
|
|
580
|
-
|
|
631
|
+
/**
|
|
632
|
+
* Remove one selection (chip × button) BY POSITION. Works for multi and tag
|
|
633
|
+
* modes.
|
|
634
|
+
*
|
|
635
|
+
* Positional, not by value: under `allowDuplicates` two chips carry the same
|
|
636
|
+
* string, and a filter on equality deleted every copy at once — one click on
|
|
637
|
+
* the second "red" took both reds with it. `visibleChips()` slices the HEAD
|
|
638
|
+
* of `selectedChips()`, which maps the value array one for one, so the
|
|
639
|
+
* `$index` a chip was rendered with indexes the value array directly. The
|
|
640
|
+
* multi-mode toggle in `selectOption` was already positional.
|
|
641
|
+
*/
|
|
642
|
+
protected removeChip(index: number, event: Event): void;
|
|
581
643
|
/** Clear every selection (× button). Multi/tag → empty array; search → null. */
|
|
582
644
|
protected clearAll(event: Event): void;
|
|
583
645
|
/** Capacity check used by tag mode to refuse the next add. */
|
|
@@ -52,8 +52,10 @@ declare class WrShinyText {
|
|
|
52
52
|
* Gradient sweep over text. Applies a `background-clip: text` gradient
|
|
53
53
|
* with a moving highlight — gives any text a subtle shimmer.
|
|
54
54
|
*
|
|
55
|
-
* The directive only adds the `wr-shimmer` host class. Pair with the
|
|
56
|
-
*
|
|
55
|
+
* The directive only adds the `wr-shimmer` host class. Pair with the styles
|
|
56
|
+
* in `ngwr/shiny-text` (`@use 'ngwr/shiny-text'`), which carry the
|
|
57
|
+
* `.wr-shimmer` rule and its keyframes; the umbrella `@use 'ngwr'` forwards
|
|
58
|
+
* the same sheet.
|
|
57
59
|
*
|
|
58
60
|
* @example
|
|
59
61
|
* ```html
|
package/types/ngwr-sidebar.d.ts
CHANGED
|
@@ -75,17 +75,26 @@ declare class WrSidebar {
|
|
|
75
75
|
private readonly uid;
|
|
76
76
|
private readonly router;
|
|
77
77
|
private readonly currentUrl;
|
|
78
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* Last URL we resolved to a group — prevents re-opening one the user collapsed.
|
|
80
|
+
* A URL no entry claims is deliberately NOT recorded: see the effect below.
|
|
81
|
+
*/
|
|
79
82
|
private lastAutoUrl;
|
|
80
83
|
constructor();
|
|
81
84
|
protected isOpen(title: string): boolean;
|
|
82
85
|
/**
|
|
83
86
|
* Stable id for the group body, referenced by the toggle's `aria-controls`.
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
+
*
|
|
88
|
+
* Keyed by POSITION, not by the title. Slugging the title kept the id readable
|
|
89
|
+
* but was not injective: it lowercases and collapses every non-`[a-z0-9]` run,
|
|
90
|
+
* so `Data & charts` and `Data / charts` produced the same string, and a title
|
|
91
|
+
* with no ASCII alphanumerics at all — `Компоненты`, `数据` — produced the empty
|
|
92
|
+
* one. A whole Russian or Chinese sidebar therefore emitted N identical ids and
|
|
93
|
+
* every toggle's `aria-controls` resolved to the FIRST group's body. The toggle
|
|
94
|
+
* and its body read `$index` from the same `@for` iteration, so the two always
|
|
95
|
+
* name each other — reordering `entries` renumbers both together.
|
|
87
96
|
*/
|
|
88
|
-
protected groupBodyId(
|
|
97
|
+
protected groupBodyId(index: number): string;
|
|
89
98
|
protected toggleGroup(title: string): void;
|
|
90
99
|
protected asItem(entry: WrSidebarEntry): WrSidebarItem;
|
|
91
100
|
protected asGroup(entry: WrSidebarEntry): WrSidebarGroup;
|
package/types/ngwr-slider.d.ts
CHANGED
|
@@ -69,6 +69,63 @@ declare class WrSlider implements FormValueControl<WrSliderValue> {
|
|
|
69
69
|
readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
70
70
|
/** Render the current value below the track. @default true */
|
|
71
71
|
readonly showLabel: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
72
|
+
/**
|
|
73
|
+
* Accessible name of the thumb — the single one, or the LOWER one in range
|
|
74
|
+
* mode. Falls back to `slider.label` / `slider.lower`.
|
|
75
|
+
*/
|
|
76
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
77
|
+
/** Accessible name of the upper thumb in range mode. Falls back to `slider.upper`. */
|
|
78
|
+
readonly upperLabel: _angular_core.InputSignal<string | null>;
|
|
79
|
+
/**
|
|
80
|
+
* A thumb projects no text, so these ARE the accessible names — and they were
|
|
81
|
+
* hard-coded English with no key behind them, so every slider on a page
|
|
82
|
+
* announced the same untranslated "Value" whatever it controlled.
|
|
83
|
+
*
|
|
84
|
+
* Range mode reads `ariaLabel` as the LOWER end rather than as the whole
|
|
85
|
+
* control: a name given once must land on something, and naming both thumbs
|
|
86
|
+
* the same thing would read two different values under one name.
|
|
87
|
+
*/
|
|
88
|
+
private readonly singleLabel;
|
|
89
|
+
private readonly lowerLabel;
|
|
90
|
+
protected readonly resolvedUpperLabel: _angular_core.Signal<string>;
|
|
91
|
+
protected readonly resolvedLowLabel: _angular_core.Signal<string>;
|
|
92
|
+
private readonly field;
|
|
93
|
+
/**
|
|
94
|
+
* Id the surrounding `<wr-form-field>`'s `<label for>` points at, put on the
|
|
95
|
+
* single thumb — the LOWER one in range mode, the same end `ariaLabel` names.
|
|
96
|
+
*
|
|
97
|
+
* The field renders its label before it can see what was projected into it, so
|
|
98
|
+
* the id travels the other way and the control adopts it, exactly as
|
|
99
|
+
* `[wrInput]` does. Without this the `for` named an element that was nowhere
|
|
100
|
+
* in the document: clicking the label did nothing, and the field's own text
|
|
101
|
+
* reached the thumb through no path at all.
|
|
102
|
+
*
|
|
103
|
+
* It lands on the THUMB rather than on the host because only a labelable
|
|
104
|
+
* element can be a label's target, and `<wr-slider>` is not one — a `for`
|
|
105
|
+
* pointing at the host would resolve and still name nothing. The thumb is a
|
|
106
|
+
* real `<button>`, so it is.
|
|
107
|
+
*
|
|
108
|
+
* What this does NOT change is the thumb's name: an `aria-label` outranks a
|
|
109
|
+
* `<label>` in the accname order, and the thumb keeps its own because the
|
|
110
|
+
* field cannot promise it has one to give — `<wr-form-field>` renders a label
|
|
111
|
+
* only when `label` is set, and a slider that traded a generic name for no
|
|
112
|
+
* name would be the worse bug. Set `[ariaLabel]` to the field's label where
|
|
113
|
+
* the two should read alike.
|
|
114
|
+
*/
|
|
115
|
+
protected readonly thumbId: _angular_core.Signal<string | null>;
|
|
116
|
+
/**
|
|
117
|
+
* The field's error message, wired to the thumb the same way `wrInput` wires it
|
|
118
|
+
* to its native element.
|
|
119
|
+
*
|
|
120
|
+
* Without this the messages `<wr-form-field>` renders are visible and nothing
|
|
121
|
+
* else: a screen reader on the thumb never learns the field is invalid, nor
|
|
122
|
+
* what the message says. `aria-invalid` is keyed on the message EXISTING rather
|
|
123
|
+
* than on `errorKeys()`, because the field only publishes an id once it is
|
|
124
|
+
* showing something — announcing "invalid" while pointing at nothing is worse
|
|
125
|
+
* than staying quiet.
|
|
126
|
+
*/
|
|
127
|
+
protected readonly describedBy: _angular_core.Signal<string | null>;
|
|
128
|
+
protected readonly ariaInvalid: _angular_core.Signal<"true" | null>;
|
|
72
129
|
/**
|
|
73
130
|
* Current value. Bound by `[formField]`, or two-way via `[(value)]`. Shape
|
|
74
131
|
* follows `range`: a plain `number`, or `[low, high]` in range mode.
|
|
@@ -116,6 +173,17 @@ declare class WrSlider implements FormValueControl<WrSliderValue> {
|
|
|
116
173
|
protected onPointerDown(event: PointerEvent, thumb: 'low' | 'high'): void;
|
|
117
174
|
protected onTrackPointerDown(event: PointerEvent): void;
|
|
118
175
|
protected onKey(event: KeyboardEvent, thumb: 'low' | 'high'): void;
|
|
176
|
+
/**
|
|
177
|
+
* A bound field learns it may show its validation copy from `touch`, and
|
|
178
|
+
* pointer-up plus a value-changing keypress cannot be the only sources: a
|
|
179
|
+
* slider tabbed into and out of without an arrow press left the field
|
|
180
|
+
* untouched forever — which is exactly the case `touched` exists for, and
|
|
181
|
+
* what this output has always documented itself as doing. `wr-knob` and
|
|
182
|
+
* `wr-rating` bind `(blur)` on the one element they own; this component has
|
|
183
|
+
* two thumbs, so it listens for the bubbling `focusout` on its host instead
|
|
184
|
+
* — and ignores the one that only moves focus from one thumb to the other.
|
|
185
|
+
*/
|
|
186
|
+
protected onFocusOut(event: FocusEvent): void;
|
|
119
187
|
private isRtl;
|
|
120
188
|
/**
|
|
121
189
|
* The value under a pointer, measured along the track's INLINE axis.
|
|
@@ -142,7 +210,7 @@ declare class WrSlider implements FormValueControl<WrSliderValue> {
|
|
|
142
210
|
private percentOf;
|
|
143
211
|
private emitChange;
|
|
144
212
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSlider, never>;
|
|
145
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSlider, "wr-slider", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
|
|
213
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSlider, "wr-slider", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "upperLabel": { "alias": "upperLabel"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
|
|
146
214
|
}
|
|
147
215
|
|
|
148
216
|
export { WrSlider };
|
|
@@ -46,14 +46,12 @@ interface WrSpeedDialActionHarnessFilters extends BaseHarnessFilters {
|
|
|
46
46
|
* @see https://ngwr.dev/guides/testing
|
|
47
47
|
*/
|
|
48
48
|
declare class WrSpeedDialActionHarness extends ComponentHarness {
|
|
49
|
-
/** The action button.
|
|
49
|
+
/** The action button. */
|
|
50
50
|
static hostSelector: string;
|
|
51
51
|
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
52
52
|
static with(options?: WrSpeedDialActionHarnessFilters): HarnessPredicate<WrSpeedDialActionHarness>;
|
|
53
53
|
/** The action's accessible name — what a screen reader reads, and what `title` shows. */
|
|
54
54
|
getLabel(): Promise<string | null>;
|
|
55
|
-
/** The role the action announces — `menuitem`. */
|
|
56
|
-
getRole(): Promise<string | null>;
|
|
57
55
|
/** Whether the action draws an icon rather than a letter. */
|
|
58
56
|
hasIcon(): Promise<boolean>;
|
|
59
57
|
/** The icon's registered name, from `wr-icon`'s reflected `data-icon`, or `null`. */
|
|
@@ -136,15 +134,22 @@ declare class WrSpeedDialHarness extends ComponentHarness {
|
|
|
136
134
|
isDisabled(): Promise<boolean>;
|
|
137
135
|
/** Whether the host is padded for the device's safe area (`safeArea`). */
|
|
138
136
|
hasSafeArea(): Promise<boolean>;
|
|
139
|
-
/**
|
|
137
|
+
/**
|
|
138
|
+
* The role the action list announces — `list`.
|
|
139
|
+
*
|
|
140
|
+
* Worth asking despite being a plain `<ul>`: the list is styled `list-style: none`,
|
|
141
|
+
* which drops the implicit list semantics in Safari, so the role is written out. It
|
|
142
|
+
* is deliberately NOT `menu` — that role promises arrows, Home/End and a single tab
|
|
143
|
+
* stop, none of which this component has.
|
|
144
|
+
*/
|
|
140
145
|
getMenuRole(): Promise<string | null>;
|
|
141
146
|
/**
|
|
142
|
-
* Whether the trigger's `aria-controls` names THIS dial's
|
|
143
|
-
* the page.
|
|
147
|
+
* Whether the trigger's `aria-controls` names THIS dial's action list, and nothing
|
|
148
|
+
* else on the page.
|
|
144
149
|
*
|
|
145
150
|
* Both halves matter. The id is resolved inside the host first, so a trigger
|
|
146
|
-
* pointing at a SIBLING dial's
|
|
147
|
-
* document — fails here. Then it is counted across the document, because two
|
|
151
|
+
* pointing at a SIBLING dial's list — which resolves perfectly well from the
|
|
152
|
+
* document — fails here. Then it is counted across the document, because two lists
|
|
148
153
|
* answering to one id hand every reference to whichever comes first.
|
|
149
154
|
*/
|
|
150
155
|
isMenuBound(): Promise<boolean>;
|
|
@@ -179,9 +184,8 @@ declare class WrSpeedDialHarness extends ComponentHarness {
|
|
|
179
184
|
* Press Escape — closing the dial and putting focus back on the trigger.
|
|
180
185
|
*
|
|
181
186
|
* Sent to the host, which is where the component listens. The focus return is the
|
|
182
|
-
* half worth asserting:
|
|
183
|
-
*
|
|
184
|
-
* action to leave.
|
|
187
|
+
* half worth asserting: the actions are ordinary tab stops, so without it a keyboard
|
|
188
|
+
* user has to walk through every action to leave.
|
|
185
189
|
*/
|
|
186
190
|
sendEscape(): Promise<void>;
|
|
187
191
|
/** Move keyboard focus to the trigger. */
|
|
@@ -11,6 +11,24 @@ interface WrSpeedDialAction {
|
|
|
11
11
|
/** Direction the action buttons fan out. */
|
|
12
12
|
type WrSpeedDialDirection = 'up' | 'down' | 'left' | 'right';
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Floating action button that expands into a fan of secondary actions on click.
|
|
16
|
+
* Place inside a positioned container or near `position: fixed` — the component
|
|
17
|
+
* itself doesn't pin to the viewport.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```html
|
|
21
|
+
* <wr-speed-dial
|
|
22
|
+
* [actions]="[
|
|
23
|
+
* { id: 'new', label: 'New', icon: 'add' },
|
|
24
|
+
* { id: 'edit', label: 'Edit', icon: 'cog' }
|
|
25
|
+
* ]"
|
|
26
|
+
* (pick)="onPick($event)"
|
|
27
|
+
* />
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @see https://ngwr.dev/reference/components/speed-dial
|
|
31
|
+
*/
|
|
14
32
|
declare class WrSpeedDial {
|
|
15
33
|
readonly actions: _angular_core.InputSignal<readonly WrSpeedDialAction[]>;
|
|
16
34
|
/**
|
|
@@ -38,14 +56,15 @@ declare class WrSpeedDial {
|
|
|
38
56
|
/** Id the trigger's `aria-controls` points at. */
|
|
39
57
|
protected readonly menuId: string;
|
|
40
58
|
protected readonly triggerEl: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
|
|
59
|
+
private readonly host;
|
|
41
60
|
constructor();
|
|
42
61
|
protected readonly classes: _angular_core.Signal<string>;
|
|
43
62
|
protected onTrigger(): void;
|
|
44
63
|
protected onPick(action: WrSpeedDialAction): void;
|
|
45
64
|
/**
|
|
46
|
-
*
|
|
47
|
-
* order
|
|
48
|
-
* action to leave it.
|
|
65
|
+
* Escape closes the dial and hands the caret back. The actions are ordinary buttons
|
|
66
|
+
* in the tab order, so without this a keyboard user who opened the dial had to tab
|
|
67
|
+
* through every action to leave it.
|
|
49
68
|
*/
|
|
50
69
|
protected onKeydown(event: KeyboardEvent): void;
|
|
51
70
|
/**
|
|
@@ -84,6 +84,15 @@ declare class WrSplitText {
|
|
|
84
84
|
* watching the same host and all of them able to fire `animate()`.
|
|
85
85
|
*/
|
|
86
86
|
private observer;
|
|
87
|
+
/**
|
|
88
|
+
* `startObserver()` builds its observer inside a `document.fonts.ready`
|
|
89
|
+
* continuation, so the component can be destroyed while it is awaiting. At
|
|
90
|
+
* that moment `observer` is still null, so the destroy hook below disconnects
|
|
91
|
+
* nothing — and the continuation then starts an observer on a host Angular
|
|
92
|
+
* has already detached, which nothing is left to disconnect. Same hazard, and
|
|
93
|
+
* same flag, as `wr-fuzzy-text`.
|
|
94
|
+
*/
|
|
95
|
+
private destroyed;
|
|
87
96
|
constructor();
|
|
88
97
|
private startObserver;
|
|
89
98
|
private animate;
|
|
@@ -248,11 +248,11 @@ declare class WrStepperHarness extends ComponentHarness {
|
|
|
248
248
|
* The index of the step the wizard is showing, from the header announcing
|
|
249
249
|
* `aria-current="step"`.
|
|
250
250
|
*
|
|
251
|
-
* Throws when no header does, which is a state a stepper can genuinely be in:
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
251
|
+
* Throws when no header does, which is a state a stepper can genuinely be in: one
|
|
252
|
+
* with no `<wr-step>` children renders its (empty) header strip and no body. A `-1`
|
|
253
|
+
* here would be read as "the first step" by the next line of a spec. An
|
|
254
|
+
* out-of-range `active` is NOT such a state — `WrStepper` clamps the two-way model
|
|
255
|
+
* back into the step list, not only inside `goTo()`.
|
|
256
256
|
*/
|
|
257
257
|
getActiveIndex(): Promise<number>;
|
|
258
258
|
/** The label of the step the wizard is showing. Throws when there is no current step. */
|
package/types/ngwr-stepper.d.ts
CHANGED
|
@@ -88,6 +88,14 @@ declare class WrStepper implements WrStepperContext {
|
|
|
88
88
|
*/
|
|
89
89
|
readonly responsive: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
90
90
|
protected readonly steps: _angular_core.Signal<readonly WrStep[]>;
|
|
91
|
+
/**
|
|
92
|
+
* The "optional" badge sits INSIDE the header button's label span, so the word
|
|
93
|
+
* is part of the step's accessible name — a hard-coded literal announced English
|
|
94
|
+
* to every locale, not just showed it. Catalog-only rather than an input: the
|
|
95
|
+
* badge is one word shared by every step, and an app that wants other wording
|
|
96
|
+
* overrides `stepper.optional` once instead of on every `<wr-step>`.
|
|
97
|
+
*/
|
|
98
|
+
protected readonly optionalLabel: _angular_core.Signal<string>;
|
|
91
99
|
protected readonly classes: _angular_core.Signal<string>;
|
|
92
100
|
constructor();
|
|
93
101
|
/** Is the step at `index` considered completed? */
|
package/types/ngwr-storage.d.ts
CHANGED
|
@@ -36,6 +36,7 @@ import * as ngwr_storage from 'ngwr/storage';
|
|
|
36
36
|
declare class WrStorage {
|
|
37
37
|
private readonly engine;
|
|
38
38
|
private readonly config;
|
|
39
|
+
private readonly destroyRef;
|
|
39
40
|
private readonly isBrowser;
|
|
40
41
|
/**
|
|
41
42
|
* Per-key watchers. Shared so multiple `watch(k)` calls reuse one signal.
|