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
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.
|
package/types/ngwr-table.d.ts
CHANGED
|
@@ -2,6 +2,57 @@ import * as _angular_core from '@angular/core';
|
|
|
2
2
|
import { TemplateRef } from '@angular/core';
|
|
3
3
|
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @license
|
|
7
|
+
*
|
|
8
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
9
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* One row handed to `wr-table` through `[items]`.
|
|
13
|
+
*
|
|
14
|
+
* **`object`, not `Record<string, unknown>`, and the difference is the whole
|
|
15
|
+
* reason this type exists.** TypeScript withholds the implicit index signature
|
|
16
|
+
* from an `interface`, because declaration merging can widen one later, so an
|
|
17
|
+
* interface is NOT assignable to `Record<string, unknown>` while a `type` alias
|
|
18
|
+
* describing the same shape IS:
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* interface UserI { id: number }
|
|
22
|
+
* type UserT = { id: number };
|
|
23
|
+
*
|
|
24
|
+
* declare function take(rows: readonly Record<string, unknown>[]): void;
|
|
25
|
+
* take([] as UserI[]); // Index signature for type 'string' is missing in type 'UserI'
|
|
26
|
+
* take([] as UserT[]); // fine
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* The table used to declare `[items]` as the record form, so `[items]="users"`
|
|
30
|
+
* compiled for one declaration of `User` and failed for the other — reported as
|
|
31
|
+
* "the table refuses my data", which is what it looks like from outside. Nothing
|
|
32
|
+
* about the row is read at bind time; the table reads cells by string key and
|
|
33
|
+
* hands back `unknown`, so the wider type costs nothing and accepts both.
|
|
34
|
+
*
|
|
35
|
+
* The row callbacks (`rowKey`, `groupBy`, `childrenKey`) do NOT take this type:
|
|
36
|
+
* their parameter is `Record<string, unknown>`, and it stays that way. A
|
|
37
|
+
* parameter is contravariant, so no signature short of a generic component can
|
|
38
|
+
* accept `(row: User) => row.id` — and widening it to `object` would reject the
|
|
39
|
+
* callbacks that do compile today (an explicit
|
|
40
|
+
* `(row: Record<string, unknown>) => …`) while making the row unindexable.
|
|
41
|
+
*
|
|
42
|
+
* Index the row instead — `(row) => row['id']` needs no cast at all — or, to
|
|
43
|
+
* reach your own type, `(row) => (row as unknown as User).id`. A single
|
|
44
|
+
* `as User` is not enough for an `interface`: TypeScript refuses that
|
|
45
|
+
* conversion outright (TS2352, "neither type sufficiently overlaps"), over the
|
|
46
|
+
* same missing index signature. `rowKey="id"` sidesteps all of it.
|
|
47
|
+
*
|
|
48
|
+
* `childrenKey` is the one callback that also RETURNS rows, and there the type
|
|
49
|
+
* IS this wide one — a return is covariant, so
|
|
50
|
+
* `(row) => (row as unknown as User).reports` needs no second assertion on the
|
|
51
|
+
* array. Declared narrow, it accepted a forest through `[items]` and refused to
|
|
52
|
+
* let the children back out.
|
|
53
|
+
*/
|
|
54
|
+
type WrTableRow = object;
|
|
55
|
+
|
|
5
56
|
/**
|
|
6
57
|
* @license
|
|
7
58
|
*
|
|
@@ -248,8 +299,22 @@ type RenderRow = {
|
|
|
248
299
|
declare class WrTable {
|
|
249
300
|
/** Column definitions, keyed by row property name. */
|
|
250
301
|
readonly columns: _angular_core.InputSignal<WrTableColumns>;
|
|
251
|
-
/**
|
|
252
|
-
|
|
302
|
+
/**
|
|
303
|
+
* Row items. `null`/`undefined` renders the empty state; use `[loading]` for
|
|
304
|
+
* the spinner.
|
|
305
|
+
*
|
|
306
|
+
* Typed `WrTableRow` (= `object`) rather than `Record<string, unknown>`, so an
|
|
307
|
+
* array of an `interface` binds as readily as an array of a `type` — see
|
|
308
|
+
* {@link WrTableRow} for why those two are not the same to TypeScript.
|
|
309
|
+
*/
|
|
310
|
+
readonly items: _angular_core.InputSignal<readonly object[] | null | undefined>;
|
|
311
|
+
/**
|
|
312
|
+
* The rows as records, for everything downstream that reads a cell by key.
|
|
313
|
+
*
|
|
314
|
+
* One cast at the boundary: the INPUT is wide so any object shape binds, while
|
|
315
|
+
* the body keeps indexing rows the way it always has.
|
|
316
|
+
*/
|
|
317
|
+
private readonly rows;
|
|
253
318
|
/** Show the loading spinner overlay. @default false */
|
|
254
319
|
readonly loading: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
255
320
|
/**
|
|
@@ -314,6 +379,14 @@ declare class WrTable {
|
|
|
314
379
|
*
|
|
315
380
|
* `pageSize` pages the ROOTS; a root brings its open descendants with it.
|
|
316
381
|
*
|
|
382
|
+
* The function form RETURNS `WrTableRow`s, matching `[items]`: a return is
|
|
383
|
+
* covariant, so an array of `interface`-typed children satisfies it. Declared
|
|
384
|
+
* as records it did not, and a forest that bound to `[items]` could not hand
|
|
385
|
+
* its children back out. The PARAMETER stays `Record<string, unknown>` — that
|
|
386
|
+
* side is contravariant, and widening it would reject the callbacks that
|
|
387
|
+
* compile today while leaving `row['reports']` unindexable. See
|
|
388
|
+
* {@link WrTableRow}.
|
|
389
|
+
*
|
|
317
390
|
* @example
|
|
318
391
|
* ```html
|
|
319
392
|
* <wr-table
|
|
@@ -326,7 +399,7 @@ declare class WrTable {
|
|
|
326
399
|
* />
|
|
327
400
|
* ```
|
|
328
401
|
*/
|
|
329
|
-
readonly childrenKey: _angular_core.InputSignal<string | ((row: Record<string, unknown>) => readonly
|
|
402
|
+
readonly childrenKey: _angular_core.InputSignal<string | ((row: Record<string, unknown>) => readonly WrTableRow[] | null | undefined) | null>;
|
|
330
403
|
/**
|
|
331
404
|
* Which column carries the indent and the expand toggle. Keyed, not
|
|
332
405
|
* positional, so it survives a `columnOrder` drag. Defaults to whichever
|
|
@@ -476,9 +549,17 @@ declare class WrTable {
|
|
|
476
549
|
private readonly pins;
|
|
477
550
|
constructor();
|
|
478
551
|
private measurePins;
|
|
479
|
-
/**
|
|
552
|
+
/**
|
|
553
|
+
* Sticky `inset-inline-start` offset (px) for a `pin: 'left'` column, else `null`.
|
|
554
|
+
*
|
|
555
|
+
* The input keeps its physical name — it is public API — but the offset it
|
|
556
|
+
* produces is LOGICAL. `measurePins()` accumulates in DOM order, which is
|
|
557
|
+
* start-to-end semantics, and under `dir="rtl"` the column order mirrors: a
|
|
558
|
+
* `pin: 'left'` column then sits at the physical right, where a `left: 0`
|
|
559
|
+
* sticky inset can never catch it and the column just scrolls away.
|
|
560
|
+
*/
|
|
480
561
|
protected leftPin(key: string): number | null;
|
|
481
|
-
/** Sticky `
|
|
562
|
+
/** Sticky `inset-inline-end` offset (px) for a `pin: 'right'` column, else `null`. See {@link leftPin}. */
|
|
482
563
|
protected rightPin(key: string): number | null;
|
|
483
564
|
/** Whether `key` is the inner-edge pinned column on `side` (carries the shadow). */
|
|
484
565
|
protected isPinEdge(key: string, side: 'left' | 'right'): boolean;
|
|
@@ -569,7 +650,7 @@ declare class WrTable {
|
|
|
569
650
|
* that is every VISIBLE node — a collapsed subtree is not on screen and is not
|
|
570
651
|
* swept in, which keeps the checkbox honest about what it just did.
|
|
571
652
|
*/
|
|
572
|
-
|
|
653
|
+
protected readonly pageRowKeys: _angular_core.Signal<readonly unknown[]>;
|
|
573
654
|
protected isRowSelected(row: Record<string, unknown>): boolean;
|
|
574
655
|
/** Every current-page row selected (drives the header checkbox). */
|
|
575
656
|
protected readonly allSelected: _angular_core.Signal<boolean>;
|
|
@@ -633,9 +714,9 @@ declare class WrTable {
|
|
|
633
714
|
/**
|
|
634
715
|
* The flat `<tbody>` render list. Ungrouped it is exactly today's rows in
|
|
635
716
|
* order (the rendered elements are unchanged; only the `@for` track identity
|
|
636
|
-
* moves to a stable id). Returns `[]` for
|
|
637
|
-
*
|
|
638
|
-
*
|
|
717
|
+
* moves to a stable id). Returns `[]` for nullish rows, and reads nothing about
|
|
718
|
+
* `loading()` — suppressing the "no data" row under the spinner is the
|
|
719
|
+
* template's job, not this one's.
|
|
639
720
|
*/
|
|
640
721
|
protected readonly renderRows: _angular_core.Signal<readonly RenderRow[]>;
|
|
641
722
|
/** Default band label — the primitive as text, `'—'` for empty, JSON for objects. */
|
|
@@ -793,8 +874,20 @@ declare class WrTableFilter {
|
|
|
793
874
|
readonly filterLabel: _angular_core.InputSignal<string | null>;
|
|
794
875
|
/** Text shown when the search finds nothing. Falls back to `table.noMatches`. */
|
|
795
876
|
readonly noMatchesLabel: _angular_core.InputSignal<string | null>;
|
|
877
|
+
/**
|
|
878
|
+
* Placeholder AND accessible name of the search box. Falls back to `table.search`.
|
|
879
|
+
*
|
|
880
|
+
* One string for both because the box has no visible label: the placeholder was
|
|
881
|
+
* its only name, so a hard-coded literal left the control unnamed in every other
|
|
882
|
+
* language rather than merely untranslated.
|
|
883
|
+
*/
|
|
884
|
+
readonly searchLabel: _angular_core.InputSignal<string | null>;
|
|
885
|
+
/** Label of the clear-selection button. Falls back to `table.reset`. */
|
|
886
|
+
readonly resetLabel: _angular_core.InputSignal<string | null>;
|
|
796
887
|
protected readonly resolvedFilterLabel: _angular_core.Signal<string>;
|
|
797
888
|
protected readonly resolvedNoMatchesLabel: _angular_core.Signal<string>;
|
|
889
|
+
protected readonly resolvedSearchLabel: _angular_core.Signal<string>;
|
|
890
|
+
protected readonly resolvedResetLabel: _angular_core.Signal<string>;
|
|
798
891
|
readonly items: _angular_core.InputSignal<readonly WrTableFilterItem<unknown>[]>;
|
|
799
892
|
/** Fires whenever the selection changes. */
|
|
800
893
|
readonly selectionChange: _angular_core.OutputEmitterRef<readonly WrTableFilterItem<unknown>[]>;
|
|
@@ -818,8 +911,8 @@ declare class WrTableFilter {
|
|
|
818
911
|
protected onReset(): void;
|
|
819
912
|
private emitSelected;
|
|
820
913
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTableFilter, never>;
|
|
821
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTableFilter, "wr-table-filter", never, { "filterLabel": { "alias": "filterLabel"; "required": false; "isSignal": true; }; "noMatchesLabel": { "alias": "noMatchesLabel"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
|
|
914
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTableFilter, "wr-table-filter", never, { "filterLabel": { "alias": "filterLabel"; "required": false; "isSignal": true; }; "noMatchesLabel": { "alias": "noMatchesLabel"; "required": false; "isSignal": true; }; "searchLabel": { "alias": "searchLabel"; "required": false; "isSignal": true; }; "resetLabel": { "alias": "resetLabel"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
|
|
822
915
|
}
|
|
823
916
|
|
|
824
917
|
export { WrTable, WrTableCell, WrTableExpand, WrTableFilter, WrTableGroupHeader, WrTableSort };
|
|
825
|
-
export type { WrTableCellContext, WrTableColumn, WrTableColumns, WrTableCsvOptions, WrTableExpandContext, WrTableFilterChange, WrTableFilterItem, WrTableGroupContext, WrTableSortDirection, WrTableSortState, WrTableSummary };
|
|
918
|
+
export type { WrTableCellContext, WrTableColumn, WrTableColumns, WrTableCsvOptions, WrTableExpandContext, WrTableFilterChange, WrTableFilterItem, WrTableGroupContext, WrTableRow, WrTableSortDirection, WrTableSortState, WrTableSummary };
|
|
@@ -111,12 +111,12 @@ declare class WrTabHarness extends ContentContainerComponentHarness {
|
|
|
111
111
|
* Whether this is the strip's selected tab.
|
|
112
112
|
*
|
|
113
113
|
* `aria-selected` first, because that is the state a screen reader acts on and
|
|
114
|
-
* the `--active` class is only what it looks like.
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
114
|
+
* the `--active` class is only what it looks like. Both shapes carry it now — a
|
|
115
|
+
* router tab publishes it off the same `routerLinkActive` that paints the class —
|
|
116
|
+
* so the class is a fallback for a tab that has neither yet, not a second reading
|
|
117
|
+
* of the same thing. The order is not interchangeable: reading the class first
|
|
118
|
+
* would report a tab as selected while `aria-selected="false"` told assistive tech
|
|
119
|
+
* otherwise.
|
|
120
120
|
*/
|
|
121
121
|
isSelected(): Promise<boolean>;
|
|
122
122
|
/**
|
|
@@ -243,10 +243,11 @@ declare class WrTabHarness extends ContentContainerComponentHarness {
|
|
|
243
243
|
* the tab they move to, the APG's automatic-activation pattern. `<wr-tabs>`
|
|
244
244
|
* renders exactly one panel: the selected tab's.
|
|
245
245
|
* - **Router** — one `routerLink` on any child switches the whole strip over. The
|
|
246
|
-
* tabs become `<a role="tab">`s
|
|
247
|
-
*
|
|
248
|
-
* stops being one tab stop — every enabled tab is a Tab stop of its
|
|
249
|
-
* arrow keys still move focus, but they select nothing: the route does
|
|
246
|
+
* tabs become `<a role="tab">`s whose `aria-selected` follows the resolved route
|
|
247
|
+
* (the same `routerLinkActive` that paints `--active`), the strip renders NO
|
|
248
|
+
* panel, and it stops being one tab stop — every enabled tab is a Tab stop of its
|
|
249
|
+
* own. The arrow keys still move focus, but they select nothing: the route does
|
|
250
|
+
* that.
|
|
250
251
|
*
|
|
251
252
|
* So {@link getSelectedLabel} and {@link getFocusedLabel} are two different
|
|
252
253
|
* questions, and {@link getTabStopLabels} is a third. They coincide in content mode
|
package/types/ngwr-tabs.d.ts
CHANGED
|
@@ -123,6 +123,8 @@ declare class WrTabs implements WrTabsContext {
|
|
|
123
123
|
/** Recompute which edges can scroll, from the strip's scroll metrics. @internal */
|
|
124
124
|
protected updateFades(): void;
|
|
125
125
|
protected onTabClick(tab: WrTab): void;
|
|
126
|
+
/** Per-instance prefix, so keys only have to be unique within one group. */
|
|
127
|
+
private readonly uid;
|
|
126
128
|
/** Header id for `aria-labelledby` on the panel. @internal */
|
|
127
129
|
headerId(key: string): string;
|
|
128
130
|
/** Panel id for `aria-controls` on the tab header. @internal */
|