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
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
// These are the canonical knobs every component reads from. Consumers
|
|
4
4
|
// override them on `:root` (or any subtree) without touching SCSS.
|
|
5
5
|
|
|
6
|
+
/// The tokens here that are composed out of one the THEME re-tunes, kept in a
|
|
7
|
+
/// mixin so `_dark.scss` can re-declare them on the themed element. See the long
|
|
8
|
+
/// note above `colors.derived()`: a `var()` inside a custom property is
|
|
9
|
+
/// substituted where it is DECLARED, so a `:root` composition inherits into a
|
|
10
|
+
/// scoped `[data-theme="dark"]` subtree as the light literal.
|
|
11
|
+
///
|
|
12
|
+
/// Only the ring. The other compositions in this file — `--wr-control-font-size-*`,
|
|
13
|
+
/// `--wr-transition-*`, `--wr-overlay-*` — read sizes and durations, which no
|
|
14
|
+
/// theme flips, so freezing them is the same value either way.
|
|
15
|
+
@mixin derived-focus-ring() {
|
|
16
|
+
--wr-focus-ring-color: var(--wr-color-primary);
|
|
17
|
+
--wr-focus-ring-halo: rgba(var(--wr-color-primary-rgb), 0.25);
|
|
18
|
+
}
|
|
19
|
+
|
|
6
20
|
:root {
|
|
7
21
|
// Border radius
|
|
8
22
|
--wr-border-radius-sm: 0.375rem;
|
|
@@ -45,11 +59,16 @@
|
|
|
45
59
|
--wr-duration-fast: 0.1s;
|
|
46
60
|
--wr-duration-base: 0.15s;
|
|
47
61
|
--wr-duration-slow: 0.3s;
|
|
62
|
+
// unused-ok: the slow end of a public scale. The catalog's own animations top
|
|
63
|
+
// out at `-slow`; a consumer's need not.
|
|
48
64
|
--wr-duration-slower: 0.5s;
|
|
49
65
|
|
|
50
66
|
// Transition shorthands
|
|
51
67
|
--wr-transition-short: var(--wr-duration-fast) var(--wr-ease-out);
|
|
52
68
|
--wr-transition-base: var(--wr-duration-base) var(--wr-ease-linear);
|
|
69
|
+
// unused-ok: the third shorthand. Components compose `-slow` with an easing
|
|
70
|
+
// themselves where they need it, but dropping one rung out of three would make
|
|
71
|
+
// the set look arbitrary.
|
|
53
72
|
--wr-transition-long: var(--wr-duration-slow) var(--wr-ease-out);
|
|
54
73
|
|
|
55
74
|
// Elevation
|
|
@@ -65,6 +84,52 @@
|
|
|
65
84
|
--wr-shadow-float: 0 8px 24px rgb(0 0 0 / 18%);
|
|
66
85
|
--wr-shadow-modal: 0 20px 48px rgb(0 0 0 / 25%);
|
|
67
86
|
|
|
87
|
+
// Disabled
|
|
88
|
+
//
|
|
89
|
+
// How far a control fades when it will not respond. One number, because the
|
|
90
|
+
// catalog had **seven** — 0.6 in eighteen places, then 0.5, 0.7, 0.55, 0.4,
|
|
91
|
+
// 0.35 and 0.65 — spread over 29 entry points, and two components disagreed
|
|
92
|
+
// with THEMSELVES three ways inside one file (`date-picker` at 0.5 / 0.4 / 0.7,
|
|
93
|
+
// `calendar` at 0.5 / 0.35 / 0.6). Sibling text fields fading differently is
|
|
94
|
+
// not a design decision anyone made; it is what happens when the value has no
|
|
95
|
+
// name.
|
|
96
|
+
//
|
|
97
|
+
// 0.6 is the value eighteen of them already used. A component that genuinely
|
|
98
|
+
// needs another strength overrides this token in its own block, with the reason
|
|
99
|
+
// — the point is that the exception has to be argued rather than typed.
|
|
100
|
+
--wr-disabled-opacity: 0.6;
|
|
101
|
+
|
|
102
|
+
// Focus ring
|
|
103
|
+
//
|
|
104
|
+
// The keyboard indicator, as tokens rather than a recipe baked into SCSS —
|
|
105
|
+
// the ring was the one surface a consumer could not retheme, because
|
|
106
|
+
// `theme.focus-ring` hard-coded it.
|
|
107
|
+
//
|
|
108
|
+
// It is an OUTLINE now, and the halo is a second channel rather than the only
|
|
109
|
+
// one. The halo alone is a 25% tint of the primary over the page: **1.41:1 in
|
|
110
|
+
// light, 1.31:1 in dark**, where WCAG 1.4.11 asks 3:1 of a focus indicator —
|
|
111
|
+
// and the mixin also set `outline: none`, so for the forty-one selectors whose
|
|
112
|
+
// entire focus style is that mixin, nothing on screen met the bar. The solid
|
|
113
|
+
// token measures 4.89:1 and 4.07:1. Two components had already worked this out
|
|
114
|
+
// on their own, in three places, and hand-rolled
|
|
115
|
+
// `outline: 2px solid var(--wr-color-primary)` (`event-calendar` twice,
|
|
116
|
+
// `lightbox` once), and four more wrote an `outline-offset` next to the include
|
|
117
|
+
// that could never apply.
|
|
118
|
+
//
|
|
119
|
+
// An outline is also the only form the indicator survives in under
|
|
120
|
+
// `forced-colors`, which drops every `box-shadow` outright, and it is exempt
|
|
121
|
+
// from layout, so focus never reflows the box.
|
|
122
|
+
//
|
|
123
|
+
// Halo spread equals the offset on purpose: the halo fills exactly the gap the
|
|
124
|
+
// outline leaves, so the two read as one ring instead of two. A component that
|
|
125
|
+
// insets its outline (`outline-offset: -2px`, the idiom for a row inside an
|
|
126
|
+
// `overflow: hidden` container) keeps the halo outside, where its own clipping
|
|
127
|
+
// hides it.
|
|
128
|
+
// `-color` and `-halo` are composed off `--wr-color-primary`, so they live in
|
|
129
|
+
// `derived-focus-ring()` at the top of this file, included at the end of `:root`.
|
|
130
|
+
--wr-focus-ring-width: 2px;
|
|
131
|
+
--wr-focus-ring-offset: 2px;
|
|
132
|
+
|
|
68
133
|
// Z-index scale
|
|
69
134
|
//
|
|
70
135
|
// Overlay panels inside the CDK container inherit its stacking; these
|
|
@@ -124,6 +189,8 @@
|
|
|
124
189
|
--wr-tracking-wide: 0.025em;
|
|
125
190
|
--wr-tracking-wider: 0.05em;
|
|
126
191
|
--wr-tracking-widest: 0.1em;
|
|
192
|
+
|
|
193
|
+
@include derived-focus-ring;
|
|
127
194
|
}
|
|
128
195
|
|
|
129
196
|
// Shared open animation for overlay panels. Every overlay component
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
color: var(--wr-color-on-surface);
|
|
12
12
|
|
|
13
13
|
&--disabled {
|
|
14
|
-
opacity:
|
|
14
|
+
opacity: var(--wr-disabled-opacity);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
&__pane {
|
|
@@ -31,11 +31,24 @@
|
|
|
31
31
|
gap: 0.5rem;
|
|
32
32
|
padding: 0.5rem 0.625rem;
|
|
33
33
|
border-bottom: 1px solid var(--wr-color-outline);
|
|
34
|
-
background:
|
|
34
|
+
background: var(--wr-color-fill);
|
|
35
|
+
// The checkbox and the count are intrinsically sized, so on a narrow pane
|
|
36
|
+
// the title absorbed the entire shortfall: at 375px it was 26px of a 91px
|
|
37
|
+
// track and the headers read "A…" and "S…". Let the count drop to its own
|
|
38
|
+
// line before that happens — it is the one part of the row that reads fine
|
|
39
|
+
// anywhere. Nothing moves while the row fits (measured: identical at 190px
|
|
40
|
+
// and 430px panes).
|
|
41
|
+
flex-wrap: wrap;
|
|
35
42
|
}
|
|
36
43
|
|
|
37
44
|
&__title {
|
|
38
|
-
|
|
45
|
+
// A small basis rather than `auto`: the title has to be the item that
|
|
46
|
+
// yields, and with a content-sized basis a long title pushes ITSELF onto
|
|
47
|
+
// the next line, leaving the select-all checkbox alone on a row and the
|
|
48
|
+
// two panes of one transfer with headers of different heights. 3.5rem is
|
|
49
|
+
// the widest basis that still shares a row with the checkbox in the
|
|
50
|
+
// narrowest pane the component reaches (113px).
|
|
51
|
+
flex: 1 1 3.5rem;
|
|
39
52
|
min-width: 0;
|
|
40
53
|
overflow: hidden;
|
|
41
54
|
text-overflow: ellipsis;
|
|
@@ -98,6 +111,16 @@
|
|
|
98
111
|
height: 1rem;
|
|
99
112
|
}
|
|
100
113
|
|
|
114
|
+
// The panes are a plain flex row, so they already swap: under `dir="rtl"` the
|
|
115
|
+
// source pane lays out at the right. The move chevrons are drawn to physical
|
|
116
|
+
// directions, though, so "move to target" ends up pointing at the pane it
|
|
117
|
+
// moves away from. Turn them around with the panes, the same way the
|
|
118
|
+
// pagination and carousel arrows do. Both move buttons are icon-only, so
|
|
119
|
+
// nothing textual is caught.
|
|
120
|
+
[dir='rtl'] &__move .wr-icon__svg {
|
|
121
|
+
transform: scaleX(-1);
|
|
122
|
+
}
|
|
123
|
+
|
|
101
124
|
// No container query here on purpose: `@container` only styles DESCENDANTS, so
|
|
102
125
|
// a rule that reflows `.wr-transfer` itself could never match its own query.
|
|
103
126
|
// Doing it properly means the house `responsive` opt-in modifier (a wrapper
|
package/tree/styles/_index.scss
CHANGED
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
|
|
47
47
|
&--disabled {
|
|
48
48
|
cursor: not-allowed;
|
|
49
|
-
opacity:
|
|
49
|
+
opacity: var(--wr-disabled-opacity);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
// Active-descendant cursor when virtualized — focus lives on the list
|
|
@@ -101,6 +101,20 @@
|
|
|
101
101
|
transform: rotate(90deg);
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
// The indent is logical and mirrors on its own, but the triangle is drawn
|
|
105
|
+
// pointing physically right — so under `dir="rtl"` a collapsed node aims back
|
|
106
|
+
// at its parent instead of at the children it would reveal. `tree.ts` already
|
|
107
|
+
// swaps ArrowLeft / ArrowRight for the same reason; this is the picture of that
|
|
108
|
+
// axis. Turn it around the way the cascader's branch arrow does.
|
|
109
|
+
//
|
|
110
|
+
// Scoped to the COLLAPSED state deliberately, and both halves matter: an
|
|
111
|
+
// unscoped rule sets the same property as the `aria-expanded='true'` rule
|
|
112
|
+
// above, and mirroring the inner `<svg>` instead would compose `rotate(90deg)`
|
|
113
|
+
// over `scaleX(-1)` and point an expanded node UP rather than down.
|
|
114
|
+
[dir='rtl'] &__row[aria-expanded='false'] &__toggle {
|
|
115
|
+
transform: scaleX(-1);
|
|
116
|
+
}
|
|
117
|
+
|
|
104
118
|
&__label {
|
|
105
119
|
flex: 1 1 auto;
|
|
106
120
|
overflow: hidden;
|
|
@@ -109,7 +123,7 @@
|
|
|
109
123
|
}
|
|
110
124
|
|
|
111
125
|
&--disabled {
|
|
112
|
-
opacity:
|
|
126
|
+
opacity: var(--wr-disabled-opacity);
|
|
113
127
|
pointer-events: none;
|
|
114
128
|
}
|
|
115
129
|
|
|
@@ -137,7 +151,7 @@
|
|
|
137
151
|
|
|
138
152
|
&.wr-tree--disabled {
|
|
139
153
|
--wr-tree-trigger-color: var(--wr-color-on-surface-muted);
|
|
140
|
-
--wr-tree-trigger-bg:
|
|
154
|
+
--wr-tree-trigger-bg: var(--wr-color-fill);
|
|
141
155
|
}
|
|
142
156
|
}
|
|
143
157
|
|
|
@@ -152,7 +166,12 @@
|
|
|
152
166
|
color: var(--wr-tree-trigger-color);
|
|
153
167
|
border: 1px solid var(--wr-tree-trigger-border);
|
|
154
168
|
border-radius: var(--wr-tree-trigger-radius);
|
|
155
|
-
|
|
169
|
+
// Density-multiplied like select / input / textarea / button. The comment
|
|
170
|
+
// above promises this trigger "lines up with select / input / button", and
|
|
171
|
+
// that only holds at `md` without the multiplier: at `touch` the others
|
|
172
|
+
// measured 35.59px and this one stayed at 30.
|
|
173
|
+
padding: calc(var(--wr-tree-trigger-padding-y) * var(--wr-density-y, 1))
|
|
174
|
+
calc(var(--wr-tree-trigger-padding-x) * var(--wr-density-x, 1));
|
|
156
175
|
font-family: var(--wr-font-family-base);
|
|
157
176
|
font-size: var(--wr-tree-trigger-font-size);
|
|
158
177
|
line-height: var(--wr-tree-trigger-line-height);
|
|
@@ -226,8 +245,12 @@
|
|
|
226
245
|
flex-wrap: wrap;
|
|
227
246
|
align-items: center;
|
|
228
247
|
padding: 0.25rem 0.5rem;
|
|
229
|
-
// Empty / one-row floor = single-mode height (+2px for the border)
|
|
230
|
-
|
|
248
|
+
// Empty / one-row floor = single-mode height (+2px for the border), so it
|
|
249
|
+
// has to carry the same density multiplier the single-mode padding does —
|
|
250
|
+
// otherwise the two modes stop agreeing the moment density leaves `md`.
|
|
251
|
+
min-height: calc(
|
|
252
|
+
var(--wr-tree-trigger-line-height) + var(--wr-tree-trigger-padding-y) * var(--wr-density-y, 1) * 2 + 2px
|
|
253
|
+
);
|
|
231
254
|
}
|
|
232
255
|
|
|
233
256
|
&__chips {
|
|
@@ -37,7 +37,13 @@ interface WrBarChartBar {
|
|
|
37
37
|
* **The bars are read as PERCENTAGES, not as pixels.** Each column's height is
|
|
38
38
|
* written inline as a share of the chart's maximum, which is the one number that
|
|
39
39
|
* survives a test with no layout — and it is also the component's whole job, since
|
|
40
|
-
* the maximum is either given or derived from the data.
|
|
40
|
+
* the maximum is either given or derived from the data. That share is read off the
|
|
41
|
+
* `style` ATTRIBUTE rather than through `getCssValue()`, and the difference is not
|
|
42
|
+
* cosmetic: `getCssValue()` is `getComputedStyle()`, which hands the declared `60%`
|
|
43
|
+
* straight back in jsdom and resolves it to used pixels in a real browser — so the
|
|
44
|
+
* same harness answered `100` here and `200` under Selenium or a browser runner,
|
|
45
|
+
* with no error to say which one you got. The stylesheet's own `min-height: 1px`
|
|
46
|
+
* is a second way that read lies, turning an empty bar into `1`.
|
|
41
47
|
*
|
|
42
48
|
* **The visible label row is decoration.** Every column carries `role="img"` with
|
|
43
49
|
* the label AND the value in its name, and the printed labels underneath are
|
|
@@ -61,6 +67,8 @@ declare class WrBarChartHarness extends ComponentHarness {
|
|
|
61
67
|
static with(options?: WrBarChartHarnessFilters): HarnessPredicate<WrBarChartHarness>;
|
|
62
68
|
/** Every column, in data order. */
|
|
63
69
|
getBars(): Promise<WrBarChartBar[]>;
|
|
70
|
+
/** Parse one bar's declared share. See the class note on why this is not `getCssValue()`. */
|
|
71
|
+
private static heightPercentOf;
|
|
64
72
|
/** The labels printed under the columns, in order. */
|
|
65
73
|
getLabels(): Promise<string[]>;
|
|
66
74
|
/** What each column announces — the label and the value together. */
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
type
|
|
3
|
+
/** Granularity of the split. */
|
|
4
|
+
type WrBlurTextUnit = 'chars' | 'words';
|
|
5
|
+
/** Entry direction. `'top'` slides down into place; `'bottom'` slides up. */
|
|
6
|
+
type WrBlurTextDirection = 'top' | 'bottom';
|
|
7
|
+
|
|
5
8
|
type Piece = {
|
|
6
9
|
readonly kind: 'piece';
|
|
7
10
|
readonly text: string;
|
|
@@ -31,9 +34,9 @@ declare class WrBlurText {
|
|
|
31
34
|
/** Text to animate. Required. */
|
|
32
35
|
readonly text: _angular_core.InputSignal<string>;
|
|
33
36
|
/** Split granularity. @default 'words' */
|
|
34
|
-
readonly animateBy: _angular_core.InputSignal<
|
|
37
|
+
readonly animateBy: _angular_core.InputSignal<WrBlurTextUnit>;
|
|
35
38
|
/** Entry direction. `'top'` slides down into place; `'bottom'` slides up. @default 'top' */
|
|
36
|
-
readonly direction: _angular_core.InputSignal<
|
|
39
|
+
readonly direction: _angular_core.InputSignal<WrBlurTextDirection>;
|
|
37
40
|
/** Per-piece stagger in ms. @default 200 */
|
|
38
41
|
readonly delay: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
39
42
|
/** Duration of each keyframe step in seconds (total = 2 × stepDuration). @default 0.35 */
|
|
@@ -72,3 +75,4 @@ declare class WrBlurText {
|
|
|
72
75
|
}
|
|
73
76
|
|
|
74
77
|
export { WrBlurText };
|
|
78
|
+
export type { WrBlurTextDirection, WrBlurTextUnit };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Breadcrumb navigation. Project `<wr-breadcrumbs-item>` children —
|
|
5
|
-
*
|
|
6
|
-
* glyph (default `/`). The
|
|
7
|
-
* landmark required by WCAG.
|
|
4
|
+
* Breadcrumb navigation. Project `<wr-breadcrumbs-item>` children — each keeps
|
|
5
|
+
* its own element and takes `role="listitem"` inside the `<ol>` rather than
|
|
6
|
+
* rendering an `<li>`, separated by the configured glyph (default `/`). The
|
|
7
|
+
* container exposes the `nav[aria-label]` landmark required by WCAG.
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```html
|
|
@@ -23,17 +23,24 @@ import * as _angular_core from '@angular/core';
|
|
|
23
23
|
declare class WrBreadcrumbs {
|
|
24
24
|
/** Separator glyph between items. Any short string. @default '/' */
|
|
25
25
|
readonly separator: _angular_core.InputSignal<string>;
|
|
26
|
-
/**
|
|
27
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Accessible label for the `nav` landmark. Falls back to `breadcrumbs.label`,
|
|
28
|
+
* then `'Breadcrumbs'`.
|
|
29
|
+
*/
|
|
30
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
31
|
+
protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
|
|
28
32
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrBreadcrumbs, never>;
|
|
29
33
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrBreadcrumbs, "wr-breadcrumbs", never, { "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
30
34
|
}
|
|
31
35
|
|
|
32
36
|
/**
|
|
33
|
-
* One row inside `<wr-breadcrumbs>`.
|
|
34
|
-
*
|
|
35
|
-
* `<
|
|
36
|
-
*
|
|
37
|
+
* One row inside `<wr-breadcrumbs>`. The host itself is the row — a
|
|
38
|
+
* `<wr-breadcrumbs-item role="listitem" class="wr-breadcrumbs__item">`
|
|
39
|
+
* inside the parent's `<ol>` — and it contains either a real
|
|
40
|
+
* `<a class="wr-breadcrumbs__link">` (when `[href]` or `[routerLink]` is
|
|
41
|
+
* set) or, for the current crumb, a non-interactive
|
|
42
|
+
* `<a class="wr-breadcrumbs__current" role="text" tabindex="-1"
|
|
43
|
+
* aria-current="page">` (when neither is set — typically the last crumb).
|
|
37
44
|
*
|
|
38
45
|
* @example
|
|
39
46
|
* ```html
|
|
@@ -139,7 +139,7 @@ type Arrow = 'left' | 'right' | 'up' | 'down';
|
|
|
139
139
|
* picked. And it does NOT follow {@link next} / {@link previous} — a grid paged
|
|
140
140
|
* away from the roving month has no active cell at all, and so no tab stop, until
|
|
141
141
|
* a key or a click puts one back. That is the component's behaviour, and
|
|
142
|
-
* {@link
|
|
142
|
+
* {@link getActiveDayNumber} is how a spec sees it.
|
|
143
143
|
*
|
|
144
144
|
* **Keys go to the host, not to a cell.** The component listens on its own element,
|
|
145
145
|
* so {@link pressArrow} works whether or not jsdom managed to put real focus
|
package/types/ngwr-calendar.d.ts
CHANGED
|
@@ -79,6 +79,16 @@ declare class WrCalendar {
|
|
|
79
79
|
protected readonly hoverDate: _angular_core.WritableSignal<Date | null>;
|
|
80
80
|
/** Which sub-view is currently shown. Cycles `day → month → year` on header click. */
|
|
81
81
|
protected readonly viewMode: _angular_core.WritableSignal<"day" | "month" | "year">;
|
|
82
|
+
/**
|
|
83
|
+
* Chip the month / year listbox has moved its ring to, as an index into
|
|
84
|
+
* `monthsView()` / `yearsView()`. `null` means "nobody has pressed an arrow
|
|
85
|
+
* yet", which resolves to the month or year on screen — see {@link activeChip}.
|
|
86
|
+
*
|
|
87
|
+
* Reset on every view change rather than remembered: coming back to the month
|
|
88
|
+
* list should ring the month you are looking at, not the one an earlier visit
|
|
89
|
+
* happened to leave the ring on.
|
|
90
|
+
*/
|
|
91
|
+
private readonly rovedChip;
|
|
82
92
|
private readonly prevMonthLabel;
|
|
83
93
|
private readonly nextMonthLabel;
|
|
84
94
|
private readonly prevYearLabel;
|
|
@@ -97,6 +107,22 @@ declare class WrCalendar {
|
|
|
97
107
|
protected readonly headerLabel: _angular_core.Signal<string>;
|
|
98
108
|
/** 6×7 day grid covering the current month plus spillover. */
|
|
99
109
|
protected readonly weeks: _angular_core.Signal<readonly (readonly Date[])[]>;
|
|
110
|
+
/**
|
|
111
|
+
* The chip carrying the listbox's only `tabindex="0"` — where the ring is, and
|
|
112
|
+
* where Tab lands.
|
|
113
|
+
*
|
|
114
|
+
* A listbox owns its arrows, and these two did not: twelve months were twelve
|
|
115
|
+
* tab stops, so the role promised an interaction model the component never
|
|
116
|
+
* implemented. One tab stop plus arrow keys is the roving-tabindex half of the
|
|
117
|
+
* pattern the day grid already uses.
|
|
118
|
+
*
|
|
119
|
+
* Routed through {@link nearestEnabledChip} on BOTH paths — the seed and every
|
|
120
|
+
* arrow — for the reason the grid learned first: `.focus()` on a
|
|
121
|
+
* `<button disabled>` is a no-op, so parking the sole tab stop on a month a
|
|
122
|
+
* `[min]` has closed off leaves the whole view unreachable by keyboard.
|
|
123
|
+
* `-1` on the day view, where there are no chips at all.
|
|
124
|
+
*/
|
|
125
|
+
protected readonly activeChip: _angular_core.Signal<number>;
|
|
100
126
|
protected readonly classes: _angular_core.Signal<string>;
|
|
101
127
|
constructor();
|
|
102
128
|
/** Header `‹` button — steps by month / year / decade based on the active view. */
|
|
@@ -107,6 +133,14 @@ declare class WrCalendar {
|
|
|
107
133
|
protected onLabelClick(): void;
|
|
108
134
|
protected onMonthSelect(monthIdx: number): void;
|
|
109
135
|
protected onYearSelect(year: number): void;
|
|
136
|
+
/**
|
|
137
|
+
* Switch views and drop the chip ring with them.
|
|
138
|
+
*
|
|
139
|
+
* Every view change is the only thing that changes what the chips MEAN, so it
|
|
140
|
+
* is the one place the ring has to forget where it was — otherwise a year
|
|
141
|
+
* picked at index 7 rings the eighth MONTH on the way back down.
|
|
142
|
+
*/
|
|
143
|
+
private setViewMode;
|
|
110
144
|
private stepViewDate;
|
|
111
145
|
protected isToday(date: Date): boolean;
|
|
112
146
|
protected isOutOfMonth(date: Date): boolean;
|
|
@@ -126,6 +160,38 @@ declare class WrCalendar {
|
|
|
126
160
|
protected onCellLeave(): void;
|
|
127
161
|
private applyRangeClick;
|
|
128
162
|
protected onKeyDown(event: KeyboardEvent): void;
|
|
163
|
+
/**
|
|
164
|
+
* Arrow / Home / End inside the month or year listbox — the roving half of the
|
|
165
|
+
* pattern their `role` has always claimed.
|
|
166
|
+
*
|
|
167
|
+
* Steps by one along the row and by a full row vertically, and the inline pair
|
|
168
|
+
* mirrors under `dir="rtl"` for the same reason the grid's does: those two keys
|
|
169
|
+
* name a side of the screen. The page does NOT wrap or spill into the next
|
|
170
|
+
* one — a month list is twelve fixed cells, and the header's `‹` / `›` are what
|
|
171
|
+
* change which twelve. Anything else (Enter, Space, Tab, Escape) is left to the
|
|
172
|
+
* button and to whatever owns the calendar.
|
|
173
|
+
*/
|
|
174
|
+
private onChipKeyDown;
|
|
175
|
+
/** How many chips the current view renders — twelve either way, read rather than assumed. */
|
|
176
|
+
private chipCount;
|
|
177
|
+
/** Whether the chip at `index` refuses selection in the current view. */
|
|
178
|
+
private isChipDisabled;
|
|
179
|
+
/** The chip the view itself points at: the month or year currently on screen. */
|
|
180
|
+
private currentChip;
|
|
181
|
+
/**
|
|
182
|
+
* The first selectable chip at or after `from`, else the first before it, else
|
|
183
|
+
* `from` unchanged when the whole page is closed off — the chip version of
|
|
184
|
+
* {@link nearestEnabled}, and it exists for the same reason: the ring carries
|
|
185
|
+
* the only `tabindex="0"`, and a disabled button cannot hold it.
|
|
186
|
+
*/
|
|
187
|
+
private nearestEnabledChip;
|
|
188
|
+
/**
|
|
189
|
+
* The first selectable chip at `from` or beyond it in `step`'s direction, else
|
|
190
|
+
* null when that whole direction is closed off — which is the answer for an
|
|
191
|
+
* ArrowLeft on the first chip: stay put.
|
|
192
|
+
*/
|
|
193
|
+
private enabledChipToward;
|
|
194
|
+
private focusActiveChip;
|
|
129
195
|
/**
|
|
130
196
|
* The first selectable day at or after `candidate`, else the first before it,
|
|
131
197
|
* else `candidate` unchanged when everything nearby is closed off. Bounded at
|
package/types/ngwr-carousel.d.ts
CHANGED
|
@@ -1,14 +1,74 @@
|
|
|
1
1
|
import * as ngwr_i18n from 'ngwr/i18n';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
+
import { InjectionToken, Signal } from '@angular/core';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* One slide in a {@link WrCarousel}. Holds whatever content you
|
|
6
7
|
* project — image, card, video, anything.
|
|
8
|
+
*
|
|
9
|
+
* **An off-screen slide is `inert`.** Only one slide is visible, but the track
|
|
10
|
+
* merely translates the others out of view: without this they stay in the tab
|
|
11
|
+
* order and in the accessibility tree, so a keyboard user tabs into a link they
|
|
12
|
+
* cannot see and a screen reader announces every slide as if they were all on
|
|
13
|
+
* screen. `inert` takes the whole subtree out of both at once, which is why it
|
|
14
|
+
* is preferred here over `tabindex="-1"` (which reaches only the host) — the
|
|
15
|
+
* same answer `wr-collapse` and `wr-marquee` use.
|
|
16
|
+
*
|
|
17
|
+
* `aria-hidden` rides along for the same reason it does on the marquee's
|
|
18
|
+
* duplicate copies: it states the intent for anything reading the attribute
|
|
19
|
+
* rather than honouring `inert`.
|
|
7
20
|
*/
|
|
8
21
|
declare class WrCarouselSlide {
|
|
22
|
+
private readonly carousel;
|
|
23
|
+
/**
|
|
24
|
+
* Word a screen reader speaks IN PLACE OF the `group` role. Falls back to
|
|
25
|
+
* `carousel.slideRoledescription`, then `'slide'`.
|
|
26
|
+
*/
|
|
27
|
+
readonly roledescription: _angular_core.InputSignal<string | null>;
|
|
28
|
+
protected readonly resolvedRoledescription: _angular_core.Signal<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Whether this slide is one of the ones translated out of view.
|
|
31
|
+
*
|
|
32
|
+
* `false` while the index is `-1`: content children resolve after the first
|
|
33
|
+
* render, and a slide that hid itself in that window would make the carousel
|
|
34
|
+
* open with everything inert. `false` too when there is no parent — the
|
|
35
|
+
* component is exported, so it can be used on its own.
|
|
36
|
+
*/
|
|
37
|
+
protected readonly offScreen: _angular_core.Signal<boolean>;
|
|
9
38
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCarouselSlide, never>;
|
|
10
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarouselSlide, "wr-carousel-slide", never, {}, {}, never, ["*"], true, never>;
|
|
39
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarouselSlide, "wr-carousel-slide", never, { "roledescription": { "alias": "roledescription"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @license
|
|
44
|
+
*
|
|
45
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
46
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Contract a `<wr-carousel-slide>` uses to ask its parent whether it is the one
|
|
51
|
+
* on screen.
|
|
52
|
+
*
|
|
53
|
+
* A token rather than an input, because slides arrive through `<ng-content />`:
|
|
54
|
+
* nothing in `carousel.html` can bind to them, so the child has to reach up.
|
|
55
|
+
* Same shape as {@link WR_TABS}.
|
|
56
|
+
*
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
interface WrCarouselContext {
|
|
60
|
+
/** Index of the slide currently on screen. */
|
|
61
|
+
readonly active: Signal<number>;
|
|
62
|
+
/**
|
|
63
|
+
* Position of a slide in projection order, or `-1` before it has registered.
|
|
64
|
+
*
|
|
65
|
+
* Reads the content-children signal, so a `computed()` calling this tracks
|
|
66
|
+
* both the active index and slides being added or removed.
|
|
67
|
+
*/
|
|
68
|
+
indexOf(slide: object): number;
|
|
11
69
|
}
|
|
70
|
+
/** Token a `<wr-carousel-slide>` injects to find its parent `<wr-carousel>`. */
|
|
71
|
+
declare const WR_CAROUSEL: InjectionToken<WrCarouselContext>;
|
|
12
72
|
|
|
13
73
|
/**
|
|
14
74
|
* Slide carousel. Project `<wr-carousel-slide>` children — the carousel
|
|
@@ -25,7 +85,7 @@ declare class WrCarouselSlide {
|
|
|
25
85
|
*
|
|
26
86
|
* @see https://ngwr.dev/reference/components/carousel
|
|
27
87
|
*/
|
|
28
|
-
declare class WrCarousel {
|
|
88
|
+
declare class WrCarousel implements WrCarouselContext {
|
|
29
89
|
/** Accessible name of the previous-slide button. Falls back to `carousel.prev`. */
|
|
30
90
|
readonly prevLabel: _angular_core.InputSignal<string | null>;
|
|
31
91
|
/** Accessible name of the next-slide button. Falls back to `carousel.next`. */
|
|
@@ -38,6 +98,12 @@ declare class WrCarousel {
|
|
|
38
98
|
/** Accessible name of the carousel itself. Falls back to `carousel.label`. */
|
|
39
99
|
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
40
100
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
|
|
101
|
+
/**
|
|
102
|
+
* Word a screen reader speaks IN PLACE OF the `group` role. Falls back to
|
|
103
|
+
* `carousel.roledescription`, then `'carousel'`.
|
|
104
|
+
*/
|
|
105
|
+
readonly roledescription: _angular_core.InputSignal<string | null>;
|
|
106
|
+
protected readonly resolvedRoledescription: _angular_core.Signal<string>;
|
|
41
107
|
protected readonly slideLabel: (params?: ngwr_i18n.WrI18nParams) => string;
|
|
42
108
|
/** Active slide index. Two-way bindable. @default 0 */
|
|
43
109
|
readonly active: _angular_core.ModelSignal<number>;
|
|
@@ -53,6 +119,14 @@ declare class WrCarousel {
|
|
|
53
119
|
readonly loop: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
54
120
|
protected readonly slides: _angular_core.Signal<readonly WrCarouselSlide[]>;
|
|
55
121
|
protected readonly count: _angular_core.Signal<number>;
|
|
122
|
+
/**
|
|
123
|
+
* Where a slide sits in projection order — {@link WrCarouselContext}.
|
|
124
|
+
*
|
|
125
|
+
* Public only because the child injects the parent through `WR_CAROUSEL`;
|
|
126
|
+
* reading `slides()` here is what makes the child's `computed()` re-run when a
|
|
127
|
+
* slide is added or removed.
|
|
128
|
+
*/
|
|
129
|
+
indexOf(slide: object): number;
|
|
56
130
|
/** Live horizontal drag offset (px) during a touch swipe. */
|
|
57
131
|
protected readonly dragX: _angular_core.WritableSignal<number>;
|
|
58
132
|
protected readonly dragging: _angular_core.WritableSignal<boolean>;
|
|
@@ -69,12 +143,16 @@ declare class WrCarousel {
|
|
|
69
143
|
/** CSS transform for the track — the per-slide offset plus any live drag. */
|
|
70
144
|
protected readonly trackStyle: _angular_core.Signal<string>;
|
|
71
145
|
private timer;
|
|
146
|
+
private readonly hovered;
|
|
147
|
+
private readonly focusWithin;
|
|
72
148
|
private readonly paused;
|
|
73
149
|
private readonly destroyRef;
|
|
74
150
|
private readonly isBrowser;
|
|
75
151
|
constructor();
|
|
76
|
-
protected
|
|
77
|
-
protected
|
|
152
|
+
protected onHoverIn(): void;
|
|
153
|
+
protected onHoverOut(): void;
|
|
154
|
+
protected onFocusIn(): void;
|
|
155
|
+
protected onFocusOut(): void;
|
|
78
156
|
goTo(index: number): void;
|
|
79
157
|
next(): void;
|
|
80
158
|
prev(): void;
|
|
@@ -83,7 +161,8 @@ declare class WrCarousel {
|
|
|
83
161
|
protected onSwipeMove(event: TouchEvent): void;
|
|
84
162
|
protected onSwipeEnd(event: TouchEvent, viewport: HTMLElement): void;
|
|
85
163
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCarousel, never>;
|
|
86
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarousel, "wr-carousel", never, { "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "paginationLabel": { "alias": "paginationLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "showArrows": { "alias": "showArrows"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "intervalMs": { "alias": "intervalMs"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, ["slides"], ["*"], true, never>;
|
|
164
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarousel, "wr-carousel", never, { "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "paginationLabel": { "alias": "paginationLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "roledescription": { "alias": "roledescription"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "showArrows": { "alias": "showArrows"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "intervalMs": { "alias": "intervalMs"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, ["slides"], ["*"], true, never>;
|
|
87
165
|
}
|
|
88
166
|
|
|
89
|
-
export { WrCarousel, WrCarouselSlide };
|
|
167
|
+
export { WR_CAROUSEL, WrCarousel, WrCarouselSlide };
|
|
168
|
+
export type { WrCarouselContext };
|
package/types/ngwr-cascader.d.ts
CHANGED
|
@@ -116,14 +116,31 @@ declare class WrCascader<T = string> implements FormValueControl<unknown> {
|
|
|
116
116
|
private readonly vcr;
|
|
117
117
|
private readonly scrollStrategies;
|
|
118
118
|
private readonly destroyRef;
|
|
119
|
+
private readonly injector;
|
|
119
120
|
private overlayRef;
|
|
120
121
|
constructor();
|
|
121
122
|
protected onTriggerClick(): void;
|
|
123
|
+
/**
|
|
124
|
+
* ArrowDown / ArrowUp open the panel, Alt+ArrowDown included — the combobox way in,
|
|
125
|
+
* and the shape `wr-dropdown`'s trigger uses. Enter and Space need no branch: the
|
|
126
|
+
* trigger is a real `<button>`, so the browser turns them into the click above.
|
|
127
|
+
*
|
|
128
|
+
* Only while closed. Once the panel is up the caret is inside it, and its options
|
|
129
|
+
* own their own keys.
|
|
130
|
+
*/
|
|
131
|
+
protected onTriggerKeydown(event: KeyboardEvent): void;
|
|
122
132
|
protected onOptionClick(colIndex: number, opt: WrCascaderOption<T>, event: Event): void;
|
|
123
133
|
protected clearSelection(event: Event): void;
|
|
124
134
|
protected isActiveAt(colIndex: number, value: T): boolean;
|
|
125
135
|
private pathsEqual;
|
|
126
136
|
private openOverlay;
|
|
137
|
+
/**
|
|
138
|
+
* The option the panel opens on: the selected one in the first column when there is
|
|
139
|
+
* a selection, otherwise the first enabled root. A disabled option is skipped — it
|
|
140
|
+
* still carries `tabindex="-1"`, so `focus()` would land on it and answer for a
|
|
141
|
+
* choice nobody can make.
|
|
142
|
+
*/
|
|
143
|
+
private focusPanelOption;
|
|
127
144
|
private closeOverlay;
|
|
128
145
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCascader<any>, never>;
|
|
129
146
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCascader<any>, "wr-cascader", never, { "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "changeOnSelect": { "alias": "changeOnSelect"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
|
|
@@ -44,6 +44,10 @@ declare class WrClickSpark {
|
|
|
44
44
|
private readonly isBrowser;
|
|
45
45
|
private readonly platform;
|
|
46
46
|
private sparks;
|
|
47
|
+
/** Pending frame id, or `0` while the loop is parked. `cancelAnimationFrame(0)` is a no-op. */
|
|
48
|
+
private raf;
|
|
49
|
+
/** The frame callback, once a context was obtained. `null` means there is no loop to wake. */
|
|
50
|
+
private drawFrame;
|
|
47
51
|
constructor();
|
|
48
52
|
protected onClick(event: MouseEvent): void;
|
|
49
53
|
/**
|
|
@@ -197,6 +197,14 @@ declare class WrColorPickerHarness extends ComponentHarness {
|
|
|
197
197
|
* readable with no layout at all — which makes them the only evidence a spec has
|
|
198
198
|
* that the surfaces followed a colour set through the fields. A measured position
|
|
199
199
|
* would be zero for all three.
|
|
200
|
+
*
|
|
201
|
+
* Read off the `style` ATTRIBUTE rather than through `getCssValue()`, and the
|
|
202
|
+
* difference is not cosmetic: `getCssValue()` is `getComputedStyle()`, and `left` /
|
|
203
|
+
* `top` on a positioned element resolve to the USED value — so the declared `40%`
|
|
204
|
+
* comes straight back in jsdom and arrives as pixels in a real browser, and the same
|
|
205
|
+
* harness answered 40 here and 96 under a browser runner with nothing to say which
|
|
206
|
+
* one you got. The stylesheet's own `top: 0; left: 0` is a second way that read lies,
|
|
207
|
+
* turning a thumb whose binding is gone into one parked at the origin.
|
|
200
208
|
*/
|
|
201
209
|
getThumbs(): Promise<WrColorPickerThumbs>;
|
|
202
210
|
/** The HEX field's value without the tab check — for filters, which must not throw. */
|