ngwr 14.3.1 → 14.5.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 +4 -4
- package/avatar/styles/_index.scss +4 -2
- package/badge/styles/_index.scss +4 -1
- package/badge/styles/_tag.scss +3 -0
- package/cascader/styles/_rules.scss +3 -0
- package/command-palette/styles/_index.scss +23 -0
- package/context-menu/styles/_index.scss +13 -1
- package/fesm2022/ngwr-action-sheet.mjs +3 -3
- package/fesm2022/ngwr-affix.mjs +17 -4
- package/fesm2022/ngwr-affix.mjs.map +1 -1
- package/fesm2022/ngwr-alert.mjs +4 -4
- package/fesm2022/ngwr-alert.mjs.map +1 -1
- 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 +18 -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-border-glow.mjs +3 -3
- package/fesm2022/ngwr-breadcrumbs.mjs +7 -7
- 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-testing.mjs +12 -9
- package/fesm2022/ngwr-calendar-heatmap-testing.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-heatmap.mjs +35 -7
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +32 -4
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +9 -9
- package/fesm2022/ngwr-carousel.mjs +6 -6
- package/fesm2022/ngwr-cascader-testing.mjs +87 -17
- package/fesm2022/ngwr-cascader-testing.mjs.map +1 -1
- package/fesm2022/ngwr-cascader.mjs +76 -5
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox-testing.mjs +13 -2
- package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +42 -7
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text.mjs +3 -3
- package/fesm2022/ngwr-click-spark.mjs +3 -3
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-color-picker.mjs +24 -8
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +16 -3
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-confetti.mjs +3 -3
- package/fesm2022/ngwr-context-menu.mjs +47 -15
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-counter.mjs +6 -6
- package/fesm2022/ngwr-date-adapters-fns.mjs +3 -3
- package/fesm2022/ngwr-date-adapters-luxon.mjs +3 -3
- package/fesm2022/ngwr-date-picker.mjs +111 -28
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-date.mjs +3 -3
- 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 +27 -16
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-divider.mjs +3 -3
- package/fesm2022/ngwr-donut-chart-testing.mjs +18 -2
- package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart.mjs +4 -4
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +7 -7
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +66 -20
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown.mjs +54 -16
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-event-calendar.mjs +6 -6
- package/fesm2022/ngwr-falling-text.mjs +3 -3
- package/fesm2022/ngwr-file-upload.mjs +18 -5
- package/fesm2022/ngwr-file-upload.mjs.map +1 -1
- package/fesm2022/ngwr-form.mjs +66 -14
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +3 -3
- package/fesm2022/ngwr-gauge-testing.mjs +16 -2
- package/fesm2022/ngwr-gauge-testing.mjs.map +1 -1
- package/fesm2022/ngwr-gauge.mjs +3 -3
- package/fesm2022/ngwr-glitch-text.mjs +3 -3
- package/fesm2022/ngwr-gradient-text.mjs +3 -3
- package/fesm2022/ngwr-graph-testing.mjs +243 -0
- package/fesm2022/ngwr-graph-testing.mjs.map +1 -0
- package/fesm2022/ngwr-graph.mjs +1112 -0
- package/fesm2022/ngwr-graph.mjs.map +1 -0
- package/fesm2022/ngwr-hotkey.mjs +6 -6
- package/fesm2022/ngwr-i18n-ar.mjs +7 -0
- package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-cs.mjs +7 -0
- package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-de.mjs +7 -0
- package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +23 -2
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-es.mjs +7 -0
- package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-fr.mjs +7 -0
- package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-he.mjs +7 -0
- package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-hi.mjs +7 -0
- package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-id.mjs +7 -0
- package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-it.mjs +7 -0
- package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ja.mjs +7 -0
- package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ko.mjs +7 -0
- package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-nl.mjs +7 -0
- package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pl.mjs +7 -0
- package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pt.mjs +7 -0
- package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +7 -0
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-sv.mjs +7 -0
- package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-tr.mjs +7 -0
- package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-uk.mjs +7 -0
- package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-vi.mjs +7 -0
- package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh-TW.mjs +7 -0
- package/fesm2022/ngwr-i18n-zh-TW.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh.mjs +7 -0
- package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +9 -9
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper.mjs +3 -3
- package/fesm2022/ngwr-input-number.mjs +15 -6
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +38 -6
- 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-testing.mjs +11 -3
- package/fesm2022/ngwr-knob-testing.mjs.map +1 -1
- package/fesm2022/ngwr-knob.mjs +19 -4
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-layout.mjs +15 -15
- package/fesm2022/ngwr-lightbox.mjs +27 -6
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart-testing.mjs +18 -2
- package/fesm2022/ngwr-line-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart.mjs +22 -4
- 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 +6 -6
- package/fesm2022/ngwr-markdown.mjs +6 -6
- package/fesm2022/ngwr-marquee.mjs +3 -3
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-mention.mjs +24 -8
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +6 -6
- package/fesm2022/ngwr-meter-group.mjs +3 -3
- package/fesm2022/ngwr-overlay.mjs +125 -10
- package/fesm2022/ngwr-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination.mjs +33 -6
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +21 -21
- package/fesm2022/ngwr-platform.mjs +9 -9
- package/fesm2022/ngwr-popconfirm.mjs +25 -9
- package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
- package/fesm2022/ngwr-popover-testing.mjs +22 -5
- package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
- package/fesm2022/ngwr-popover.mjs +243 -37
- 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 +3 -3
- package/fesm2022/ngwr-radio.mjs +6 -6
- package/fesm2022/ngwr-rating-testing.mjs +12 -3
- package/fesm2022/ngwr-rating-testing.mjs.map +1 -1
- package/fesm2022/ngwr-rating.mjs +19 -4
- package/fesm2022/ngwr-rating.mjs.map +1 -1
- package/fesm2022/ngwr-result.mjs +13 -13
- package/fesm2022/ngwr-result.mjs.map +1 -1
- package/fesm2022/ngwr-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-schema-form.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented.mjs +37 -4
- package/fesm2022/ngwr-segmented.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +24 -10
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +6 -6
- package/fesm2022/ngwr-sidebar.mjs +3 -3
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs +18 -5
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline.mjs +3 -3
- package/fesm2022/ngwr-speed-dial.mjs +3 -3
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-split-text.mjs +3 -3
- package/fesm2022/ngwr-splitter.mjs +3 -3
- package/fesm2022/ngwr-spotlight-card.mjs +6 -6
- package/fesm2022/ngwr-squircle.mjs +28 -9
- package/fesm2022/ngwr-squircle.mjs.map +1 -1
- package/fesm2022/ngwr-star-border.mjs +3 -3
- package/fesm2022/ngwr-statistic.mjs +20 -13
- package/fesm2022/ngwr-statistic.mjs.map +1 -1
- package/fesm2022/ngwr-stepper.mjs +6 -6
- package/fesm2022/ngwr-storage.mjs +3 -3
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-table.mjs +18 -18
- package/fesm2022/ngwr-tabs-router.mjs +3 -3
- package/fesm2022/ngwr-tabs.mjs +6 -6
- package/fesm2022/ngwr-textarea.mjs +3 -3
- package/fesm2022/ngwr-theme.mjs +3 -3
- package/fesm2022/ngwr-tilt-card.mjs +6 -6
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-toast.mjs +29 -12
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour.mjs +26 -12
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +88 -11
- package/fesm2022/ngwr-transfer.mjs.map +1 -1
- package/fesm2022/ngwr-tree-testing.mjs +24 -0
- package/fesm2022/ngwr-tree-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tree.mjs +81 -9
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +3 -3
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +3 -3
- package/fesm2022/ngwr-waves.mjs +3 -3
- package/fesm2022/ngwr-window.mjs +30 -13
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/form/styles/_index.scss +63 -0
- package/graph/styles/_index.scss +113 -0
- package/i18n/ar.json +9 -2
- package/i18n/cs.json +9 -2
- package/i18n/de.json +9 -2
- package/i18n/en.json +11 -4
- package/i18n/es.json +9 -2
- package/i18n/fr.json +9 -2
- package/i18n/he.json +9 -2
- package/i18n/hi.json +9 -2
- package/i18n/id.json +9 -2
- package/i18n/it.json +9 -2
- package/i18n/ja.json +9 -2
- package/i18n/ko.json +9 -2
- package/i18n/nl.json +9 -2
- package/i18n/pl.json +9 -2
- package/i18n/pt.json +9 -2
- package/i18n/ru.json +9 -2
- package/i18n/sv.json +9 -2
- package/i18n/tr.json +9 -2
- package/i18n/uk.json +9 -2
- package/i18n/vi.json +9 -2
- package/i18n/zh-TW.json +9 -2
- package/i18n/zh.json +9 -2
- package/input-otp/styles/_index.scss +5 -1
- package/line-chart/styles/_index.scss +5 -3
- package/llms-full.txt +13 -3
- package/llms.txt +8 -6
- package/markdown/styles/_index.scss +4 -1
- package/mention/styles/_index.scss +22 -1
- package/package.json +10 -1
- package/radio/styles/_index.scss +3 -0
- package/result/styles/_index.scss +12 -0
- package/schematics/migrations/v14/index.js +6 -3
- package/schematics/migrations.json +1 -1
- package/schematics/ng-add/index.js +34 -5
- package/schematics/use/symbol-map.json +2 -0
- package/segmented/styles/_index.scss +12 -1
- package/select/styles/_index.scss +20 -1
- package/skills/ngwr/SKILL.md +1 -1
- package/skills/ngwr/references/catalog.md +2 -0
- package/statistic/styles/_index.scss +4 -0
- package/stepper/styles/_index.scss +36 -0
- package/styles.scss +1 -0
- package/switch/styles/_index.scss +3 -0
- package/table/styles/_index.scss +12 -0
- package/tabs/styles/_index.scss +4 -1
- package/textarea/styles/_index.scss +6 -1
- package/theme/styles/_colors.scss +11 -0
- package/theme/styles/_contrast.scss +136 -0
- package/theme/styles/_focus.scss +7 -0
- package/theme/styles/_index.scss +1 -0
- package/theme/styles/_mixins.scss +15 -8
- package/timeline/styles/_index.scss +28 -1
- package/toast/styles/_index.scss +11 -0
- package/tree/styles/_index.scss +27 -1
- package/types/ngwr-badge.d.ts +1 -1
- package/types/ngwr-bar-chart-testing.d.ts +11 -1
- package/types/ngwr-button.d.ts +1 -1
- package/types/ngwr-calendar-heatmap-testing.d.ts +10 -5
- package/types/ngwr-calendar-heatmap.d.ts +22 -0
- package/types/ngwr-calendar.d.ts +21 -0
- package/types/ngwr-cascader-testing.d.ts +74 -17
- package/types/ngwr-cascader.d.ts +35 -0
- package/types/ngwr-checkbox-testing.d.ts +12 -1
- package/types/ngwr-checkbox.d.ts +10 -0
- package/types/ngwr-clipboard.d.ts +1 -1
- package/types/ngwr-color-picker.d.ts +8 -0
- package/types/ngwr-confetti.d.ts +1 -1
- package/types/ngwr-context-menu.d.ts +10 -0
- package/types/ngwr-cookie.d.ts +1 -1
- package/types/ngwr-date-adapters-fns.d.ts +1 -1
- package/types/ngwr-date-adapters-luxon.d.ts +1 -1
- package/types/ngwr-date-picker.d.ts +16 -0
- package/types/ngwr-date.d.ts +9 -3
- package/types/ngwr-density.d.ts +1 -1
- package/types/ngwr-dialog.d.ts +2 -1
- package/types/ngwr-donut-chart-testing.d.ts +11 -1
- package/types/ngwr-drawer.d.ts +29 -1
- package/types/ngwr-dropdown.d.ts +25 -0
- package/types/ngwr-file-upload.d.ts +11 -0
- package/types/ngwr-form.d.ts +25 -0
- package/types/ngwr-gauge-testing.d.ts +9 -1
- package/types/ngwr-graph-testing.d.ts +190 -0
- package/types/ngwr-graph.d.ts +203 -0
- package/types/ngwr-hotkey.d.ts +1 -1
- package/types/ngwr-i18n.d.ts +1 -1
- package/types/ngwr-input-number.d.ts +12 -2
- package/types/ngwr-input-otp.d.ts +12 -0
- package/types/ngwr-knob-testing.d.ts +11 -3
- package/types/ngwr-knob.d.ts +13 -0
- package/types/ngwr-lightbox.d.ts +15 -0
- package/types/ngwr-line-chart-testing.d.ts +11 -1
- package/types/ngwr-line-chart.d.ts +18 -0
- package/types/ngwr-loading-bar.d.ts +1 -1
- package/types/ngwr-markdown.d.ts +1 -1
- package/types/ngwr-media.d.ts +1 -1
- package/types/ngwr-mention.d.ts +7 -0
- package/types/ngwr-meta.d.ts +1 -1
- package/types/ngwr-overlay.d.ts +64 -6
- package/types/ngwr-pagination.d.ts +16 -0
- package/types/ngwr-platform.d.ts +3 -3
- package/types/ngwr-popconfirm.d.ts +1 -0
- package/types/ngwr-popover-testing.d.ts +22 -5
- package/types/ngwr-popover.d.ts +44 -8
- package/types/ngwr-rating-testing.d.ts +12 -3
- package/types/ngwr-rating.d.ts +13 -0
- package/types/ngwr-scroll.d.ts +1 -1
- package/types/ngwr-segmented.d.ts +16 -0
- package/types/ngwr-select.d.ts +7 -0
- package/types/ngwr-squircle.d.ts +22 -3
- package/types/ngwr-statistic.d.ts +0 -1
- package/types/ngwr-storage.d.ts +1 -1
- package/types/ngwr-theme.d.ts +1 -1
- package/types/ngwr-toast.d.ts +3 -1
- package/types/ngwr-tour.d.ts +7 -1
- package/types/ngwr-transfer.d.ts +52 -0
- package/types/ngwr-tree-testing.d.ts +20 -0
- package/types/ngwr-tree.d.ts +43 -1
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-window.d.ts +2 -1
- package/typography/styles/_index.scss +26 -4
|
@@ -8,6 +8,8 @@ interface WrHeatmapDatum {
|
|
|
8
8
|
|
|
9
9
|
interface Cell {
|
|
10
10
|
readonly iso: string;
|
|
11
|
+
/** The day as the reader's locale writes it — see `cellTitle`. */
|
|
12
|
+
readonly date: Date;
|
|
11
13
|
readonly value: number;
|
|
12
14
|
readonly intensity: number;
|
|
13
15
|
readonly week: number;
|
|
@@ -34,6 +36,26 @@ declare class WrCalendarHeatmap {
|
|
|
34
36
|
*/
|
|
35
37
|
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
36
38
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
|
|
39
|
+
private readonly cellText;
|
|
40
|
+
/**
|
|
41
|
+
* A cell's tooltip, with both halves formatted and the sentence in the catalog.
|
|
42
|
+
*
|
|
43
|
+
* It used to be `` `${cell.iso}: ${cell.value}` `` — a raw ISO date beside an
|
|
44
|
+
* unformatted number, joined by a hard-coded `': '`. Three things were wrong
|
|
45
|
+
* at once and none of them are visible from the template: `2026-09-10` is not
|
|
46
|
+
* how most of the world writes a date, `1234` is not how every locale groups
|
|
47
|
+
* digits (`ar-SA` does not even use these ones), and the separator and order
|
|
48
|
+
* were frozen into a shape a translator could not reach.
|
|
49
|
+
*
|
|
50
|
+
* Both halves go through `Intl` on the SAME locale the rest of the component
|
|
51
|
+
* resolves — `WR_DATE_LOCALE`, which since v14 follows Angular's `LOCALE_ID`.
|
|
52
|
+
* The key ships as `{{date}}: {{count}}` everywhere, so nothing reorders today
|
|
53
|
+
* and every locale can.
|
|
54
|
+
*/
|
|
55
|
+
protected cellTitle(cell: {
|
|
56
|
+
readonly date: Date;
|
|
57
|
+
readonly value: number;
|
|
58
|
+
}): string;
|
|
37
59
|
/** Last day to render. @default today */
|
|
38
60
|
readonly endDate: _angular_core.InputSignal<string | Date | null>;
|
|
39
61
|
/** Number of weeks (columns) to render. @default 53 */
|
package/types/ngwr-calendar.d.ts
CHANGED
|
@@ -170,7 +170,28 @@ declare class WrCalendar {
|
|
|
170
170
|
protected next(): void;
|
|
171
171
|
/** Header label click — zooms out (`day → month → year`). No-op at year view. */
|
|
172
172
|
protected onLabelClick(): void;
|
|
173
|
+
/**
|
|
174
|
+
* Picking a month drops to the day grid — and takes real focus with it.
|
|
175
|
+
*
|
|
176
|
+
* The `@switch (viewMode())` in the template destroys the chip that holds DOM
|
|
177
|
+
* focus, so without the two lines below `document.activeElement` became
|
|
178
|
+
* `<body>`: the ring appeared on the new view and focus did not, the arrow
|
|
179
|
+
* keys went dead (the keydown handler is a HOST binding, so nothing reaches
|
|
180
|
+
* the component from `<body>`), and the next Tab restarted from the top of the
|
|
181
|
+
* document — out of the calendar entirely. It is the same trap the two
|
|
182
|
+
* keyboard paths in this file already fix, and for the same reason
|
|
183
|
+
* `afterNextRender` rather than `queueMicrotask`: under zoneless CD the
|
|
184
|
+
* microtask runs before the new view is in the DOM.
|
|
185
|
+
*
|
|
186
|
+
* `focusedDate` has to move too, and that half is easy to miss. The grid marks
|
|
187
|
+
* its focusable cell by comparing against `focusedDate`, not `viewDate`, so
|
|
188
|
+
* choosing a DIFFERENT month rendered a grid with no `--focused` cell and no
|
|
189
|
+
* `tabindex="0"` at all — unreachable by keyboard from either direction. The
|
|
190
|
+
* day is preserved when the month already holds it and otherwise falls to the
|
|
191
|
+
* first, which is where `viewDate` lands anyway.
|
|
192
|
+
*/
|
|
173
193
|
protected onMonthSelect(monthIdx: number): void;
|
|
194
|
+
/** Year → month view, with the same focus restoration; the landing view is chips. */
|
|
174
195
|
protected onYearSelect(year: number): void;
|
|
175
196
|
/**
|
|
176
197
|
* Switch views and drop the chip ring with them.
|
|
@@ -56,21 +56,25 @@ interface WrCascaderOptionHarnessFilters extends BaseHarnessFilters {
|
|
|
56
56
|
*
|
|
57
57
|
* An option is either a BRANCH (it has children, so clicking it opens the next
|
|
58
58
|
* column) or a LEAF (clicking it commits the whole path and closes the panel).
|
|
59
|
-
* {@link hasChildren}
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
59
|
+
* {@link hasChildren} reads the chevron the template draws for branches;
|
|
60
|
+
* {@link isExpanded} reads the state that same branch announces. The two are
|
|
61
|
+
* not one question — a branch always HAS children and is expanded only while
|
|
62
|
+
* the column to its right is showing them.
|
|
63
|
+
*
|
|
64
|
+
* The panel is a `role="tree"` and an option is a `treeitem`. It was a `menu`
|
|
65
|
+
* of `menuitem`s until the roles were corrected, and this class documented that
|
|
66
|
+
* a branch announced nothing at all; both are historical now.
|
|
63
67
|
*
|
|
64
68
|
* @see https://ngwr.dev/guides/testing
|
|
65
69
|
*/
|
|
66
70
|
declare class WrCascaderOptionHarness extends ComponentHarness {
|
|
67
|
-
/** The `<li role="
|
|
71
|
+
/** The `<li role="treeitem">` a column renders per option. */
|
|
68
72
|
static hostSelector: string;
|
|
69
73
|
/** Build a predicate that narrows the query. */
|
|
70
74
|
static with(options?: WrCascaderOptionHarnessFilters): HarnessPredicate<WrCascaderOptionHarness>;
|
|
71
75
|
/** The option's label, trimmed. The branch chevron contributes no text. */
|
|
72
76
|
getText(): Promise<string>;
|
|
73
|
-
/** The role the option announces — `
|
|
77
|
+
/** The role the option announces — `treeitem`. */
|
|
74
78
|
getRole(): Promise<string | null>;
|
|
75
79
|
/** Whether the option refuses selection, from the state a screen reader is given. */
|
|
76
80
|
isDisabled(): Promise<boolean>;
|
|
@@ -79,11 +83,40 @@ declare class WrCascaderOptionHarness extends ComponentHarness {
|
|
|
79
83
|
* whose children the column to the right is showing, or the committed segment
|
|
80
84
|
* at this level.
|
|
81
85
|
*
|
|
82
|
-
* Read from the `--active` modifier
|
|
83
|
-
*
|
|
84
|
-
*
|
|
86
|
+
* Read from the `--active` modifier, and NOT the same question as
|
|
87
|
+
* {@link isSelected}: this one tracks where the user has navigated, that one
|
|
88
|
+
* tracks what they committed. They agree only once a leaf is picked, and a
|
|
89
|
+
* harness that collapsed them would hide exactly the divergence it exists to
|
|
90
|
+
* catch.
|
|
85
91
|
*/
|
|
86
92
|
isActive(): Promise<boolean>;
|
|
93
|
+
/**
|
|
94
|
+
* Whether this option is the committed choice, or `null` when it is not a
|
|
95
|
+
* choice at all.
|
|
96
|
+
*
|
|
97
|
+
* `null` — the attribute absent — for a branch while `changeOnSelect` is off,
|
|
98
|
+
* because such a branch genuinely cannot be chosen. Answering a plausible
|
|
99
|
+
* `false` there would report an unselectable row as merely unselected, which
|
|
100
|
+
* is the distinction the attribute exists to carry.
|
|
101
|
+
*/
|
|
102
|
+
isSelected(): Promise<boolean | null>;
|
|
103
|
+
/**
|
|
104
|
+
* Whether this branch's children are the column to its right, or `null` for a
|
|
105
|
+
* leaf.
|
|
106
|
+
*
|
|
107
|
+
* `null` rather than `false`, and the difference is the whole point: a leaf
|
|
108
|
+
* does not have a collapsed subtree, it has none. `aria-expanded="false"` on
|
|
109
|
+
* one would state that a subtree exists and is shut.
|
|
110
|
+
*/
|
|
111
|
+
isExpanded(): Promise<boolean | null>;
|
|
112
|
+
/**
|
|
113
|
+
* The option's depth, 1-based — its `aria-level`.
|
|
114
|
+
*
|
|
115
|
+
* Worth reading in a spec rather than trusting: the columns are DOM SIBLINGS,
|
|
116
|
+
* so nothing about the markup's shape carries depth. Every option would be
|
|
117
|
+
* level 1 if this attribute were dropped, and no gate would say so.
|
|
118
|
+
*/
|
|
119
|
+
getLevel(): Promise<number | null>;
|
|
87
120
|
/** Whether the option opens a deeper level rather than ending the path. */
|
|
88
121
|
hasChildren(): Promise<boolean>;
|
|
89
122
|
/**
|
|
@@ -117,10 +150,10 @@ declare class WrCascaderOptionHarness extends ComponentHarness {
|
|
|
117
150
|
* This is the component's entire keyboard model — the columns bind
|
|
118
151
|
* `keydown.enter` / `keydown.space` per option and nothing else, so there are
|
|
119
152
|
* no arrow keys to walk levels with. A keyboard user reaches the option they
|
|
120
|
-
* want with Tab and presses Enter
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
153
|
+
* want with Tab and presses Enter. Opening the panel does move focus into it —
|
|
154
|
+
* `focusPanelOption()` lands on the active option, or the first enabled one —
|
|
155
|
+
* so the walk starts there rather than from the trigger; this JSDoc claimed
|
|
156
|
+
* the opposite for a while and was simply wrong.
|
|
124
157
|
*/
|
|
125
158
|
selectByKeyboard(): Promise<void>;
|
|
126
159
|
/**
|
|
@@ -165,11 +198,11 @@ declare class WrCascaderOptionHarness extends ComponentHarness {
|
|
|
165
198
|
* @see https://ngwr.dev/guides/testing
|
|
166
199
|
*/
|
|
167
200
|
declare class WrCascaderColumnHarness extends ComponentHarness {
|
|
168
|
-
/** The `<ul role="
|
|
201
|
+
/** The `<ul role="group">` the panel renders per level, inside the `tree`. */
|
|
169
202
|
static hostSelector: string;
|
|
170
203
|
/** Build a predicate that narrows the query. */
|
|
171
204
|
static with(options?: WrCascaderColumnHarnessFilters): HarnessPredicate<WrCascaderColumnHarness>;
|
|
172
|
-
/** The role the column announces — `
|
|
205
|
+
/** The role the column announces — `group`, inside the panel's `tree`. */
|
|
173
206
|
getRole(): Promise<string | null>;
|
|
174
207
|
/** The options this level offers, in order. */
|
|
175
208
|
getOptions(filters?: WrCascaderOptionHarnessFilters): Promise<WrCascaderOptionHarness[]>;
|
|
@@ -269,9 +302,16 @@ declare class WrCascaderHarness extends ComponentHarness {
|
|
|
269
302
|
* nothing selected and no placeholder would otherwise have no name at all.
|
|
270
303
|
*/
|
|
271
304
|
getAccessibleName(): Promise<string | null>;
|
|
272
|
-
/**
|
|
305
|
+
/**
|
|
306
|
+
* The kind of popup the trigger promises via `aria-haspopup` — `tree`.
|
|
307
|
+
*
|
|
308
|
+
* Worth pinning rather than assuming: a combobox's popup may be a listbox, a
|
|
309
|
+
* tree, a grid or a dialog and nothing else, and this one said `menu` for a
|
|
310
|
+
* long time. `menu` is a valid token for the global `aria-haspopup`, so axe
|
|
311
|
+
* reports nothing either way — an assertion here is the only guard there is.
|
|
312
|
+
*/
|
|
273
313
|
getPopupRole(): Promise<string | null>;
|
|
274
|
-
/** The role the panel announces — `
|
|
314
|
+
/** The role the panel announces — `tree`, matching what the trigger promised. */
|
|
275
315
|
getPanelRole(): Promise<string | null>;
|
|
276
316
|
/**
|
|
277
317
|
* The id the trigger publishes as `aria-controls`.
|
|
@@ -368,6 +408,23 @@ declare class WrCascaderHarness extends ComponentHarness {
|
|
|
368
408
|
* rendered at all in either case (nor while disabled).
|
|
369
409
|
*/
|
|
370
410
|
clear(): Promise<void>;
|
|
411
|
+
/**
|
|
412
|
+
* Clear from the keyboard — Backspace on the closed trigger.
|
|
413
|
+
*
|
|
414
|
+
* The × {@link clear} clicks is a `tabindex="-1"` span inside the trigger, so no
|
|
415
|
+
* key can ever reach it; Backspace on the trigger is its keyboard twin, and the
|
|
416
|
+
* route a keyboard-only user actually has. Prefer this one in a spec that cares
|
|
417
|
+
* about that user — {@link clear} proves the pointer path and nothing more.
|
|
418
|
+
*
|
|
419
|
+
* The component honours the key only on the CLOSED trigger, so an open panel
|
|
420
|
+
* is closed first with Escape — the step a keyboard user takes too. Sending
|
|
421
|
+
* Backspace into an open panel and returning would be a plausible nothing.
|
|
422
|
+
*
|
|
423
|
+
* Does nothing, rather than throwing, when there is nothing to clear, `clearable`
|
|
424
|
+
* is off, or the cascader is disabled or read-only: that silence IS the
|
|
425
|
+
* component's contract, so a spec asserts it on the value.
|
|
426
|
+
*/
|
|
427
|
+
clearByKeyboard(): Promise<void>;
|
|
371
428
|
/** Move keyboard focus to the trigger. */
|
|
372
429
|
focus(): Promise<void>;
|
|
373
430
|
/** Take focus off the trigger, which is what makes a bound form field touched. */
|
package/types/ngwr-cascader.d.ts
CHANGED
|
@@ -133,6 +133,13 @@ declare class WrCascader<T = string> implements FormValueControl<unknown> {
|
|
|
133
133
|
private readonly scrollStrategies;
|
|
134
134
|
private readonly destroyRef;
|
|
135
135
|
private readonly injector;
|
|
136
|
+
/**
|
|
137
|
+
* Ambient reading direction, for the open panel alone — nothing in this
|
|
138
|
+
* component reads it directly. Optional so a bare `TestBed` needs no
|
|
139
|
+
* provider; `Directionality` is root-provided anyway, and a missing one
|
|
140
|
+
* simply reads as `ltr`.
|
|
141
|
+
*/
|
|
142
|
+
private readonly dir;
|
|
136
143
|
private overlayRef;
|
|
137
144
|
constructor();
|
|
138
145
|
protected onTriggerClick(): void;
|
|
@@ -148,6 +155,34 @@ declare class WrCascader<T = string> implements FormValueControl<unknown> {
|
|
|
148
155
|
protected onOptionClick(colIndex: number, opt: WrCascaderOption<T>, event: Event): void;
|
|
149
156
|
protected clearSelection(event: Event): void;
|
|
150
157
|
protected isActiveAt(colIndex: number, value: T): boolean;
|
|
158
|
+
/**
|
|
159
|
+
* Whether this option is the committed choice — `null` when it is not a
|
|
160
|
+
* choice at all.
|
|
161
|
+
*
|
|
162
|
+
* Two questions the panel has to keep apart, and `--active` answers only the
|
|
163
|
+
* first: `activePath()` is where the user has NAVIGATED to, `path()` is what
|
|
164
|
+
* they have COMMITTED. They agree once a leaf is picked and diverge for the
|
|
165
|
+
* whole walk down.
|
|
166
|
+
*
|
|
167
|
+
* `null` — the attribute absent — on a branch while `changeOnSelect` is off,
|
|
168
|
+
* because such a branch genuinely cannot be chosen; ARIA reads a missing
|
|
169
|
+
* `aria-selected` as "not selectable", which is exactly true here. That makes
|
|
170
|
+
* this binding the first expression the `changeOnSelect` contract has ever had
|
|
171
|
+
* in ARIA, in both directions.
|
|
172
|
+
*/
|
|
173
|
+
protected isSelectedAt(colIndex: number, opt: WrCascaderOption<T>): boolean | null;
|
|
174
|
+
/** Stable id for one option — what a column's `aria-labelledby` points at. */
|
|
175
|
+
protected optionId(colIndex: number, optIndex: number): string;
|
|
176
|
+
/** Stable id for one column — what an expanded branch's `aria-controls` points at. */
|
|
177
|
+
protected columnId(colIndex: number): string;
|
|
178
|
+
/**
|
|
179
|
+
* The option whose children a column holds, by id — its accessible name.
|
|
180
|
+
*
|
|
181
|
+
* The columns are DOM SIBLINGS, so nothing in the markup says the second one
|
|
182
|
+
* belongs to "Europe". Column 0 has no parent and stays unnamed; the tree
|
|
183
|
+
* itself already carries the control's name.
|
|
184
|
+
*/
|
|
185
|
+
protected parentOptionId(colIndex: number): string | null;
|
|
151
186
|
private pathsEqual;
|
|
152
187
|
private openOverlay;
|
|
153
188
|
/**
|
|
@@ -61,7 +61,18 @@ declare class WrCheckboxHarness extends ComponentHarness {
|
|
|
61
61
|
*/
|
|
62
62
|
isIndeterminate(): Promise<boolean>;
|
|
63
63
|
isDisabled(): Promise<boolean>;
|
|
64
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* The group identity — `checkboxValue`, not the form value.
|
|
66
|
+
*
|
|
67
|
+
* Read off the host's `data-checkbox-value`, which the component reflects for
|
|
68
|
+
* exactly this. It used to read `value` from the inner `<input>`, an attribute
|
|
69
|
+
* nothing writes, so it answered `null` for every checkbox whatever its
|
|
70
|
+
* identity — the shape these harnesses are not allowed to have.
|
|
71
|
+
*
|
|
72
|
+
* `null` still means one honest thing: no identity, or an identity that is not
|
|
73
|
+
* a primitive. An object or an array has no attribute form, and a harness
|
|
74
|
+
* cannot reach a TypeScript value the DOM never carried.
|
|
75
|
+
*/
|
|
65
76
|
getCheckboxValue(): Promise<string | null>;
|
|
66
77
|
/** Flip the box. A disabled checkbox does not move; assert rather than assume. */
|
|
67
78
|
toggle(): Promise<void>;
|
package/types/ngwr-checkbox.d.ts
CHANGED
|
@@ -49,6 +49,16 @@ declare class WrCheckbox implements FormCheckboxControl {
|
|
|
49
49
|
* `value`.)
|
|
50
50
|
*/
|
|
51
51
|
readonly checkboxValue: _angular_core.InputSignal<unknown>;
|
|
52
|
+
/**
|
|
53
|
+
* `checkboxValue` as an attribute, when it can be one.
|
|
54
|
+
*
|
|
55
|
+
* A primitive round-trips through the DOM and is what a group identity is in
|
|
56
|
+
* practice. Anything else — an object, an array — has no honest attribute
|
|
57
|
+
* form, so the attribute is ABSENT rather than `[object Object]`: a harness
|
|
58
|
+
* reading it then gets `null`, which is true, instead of a string that looks
|
|
59
|
+
* like data and identifies nothing.
|
|
60
|
+
*/
|
|
61
|
+
protected readonly reflectedValue: _angular_core.Signal<string | null>;
|
|
52
62
|
/**
|
|
53
63
|
* Accessible name for a checkbox used WITHOUT projected text — a selection
|
|
54
64
|
* cell in a table, say. The wrapping `<label>` names the control whenever
|
|
@@ -64,7 +64,7 @@ declare class WrClipboard {
|
|
|
64
64
|
*/
|
|
65
65
|
private legacyWrite;
|
|
66
66
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrClipboard, never>;
|
|
67
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
67
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
export { WrClipboard };
|
|
@@ -415,6 +415,14 @@ declare class WrColorPickerTrigger {
|
|
|
415
415
|
private readonly vcr;
|
|
416
416
|
private readonly scrollStrategies;
|
|
417
417
|
private readonly destroyRef;
|
|
418
|
+
private readonly injector;
|
|
419
|
+
/**
|
|
420
|
+
* Ambient reading direction, for the open panel alone — nothing in this
|
|
421
|
+
* directive reads it directly. Optional so a bare `TestBed` needs no
|
|
422
|
+
* provider; `Directionality` is root-provided anyway, and a missing one
|
|
423
|
+
* simply reads as `ltr`.
|
|
424
|
+
*/
|
|
425
|
+
private readonly dir;
|
|
418
426
|
protected readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
419
427
|
private overlayRef;
|
|
420
428
|
/** @internal Public so the host binding can read it. */
|
package/types/ngwr-confetti.d.ts
CHANGED
|
@@ -71,7 +71,7 @@ declare class WrConfetti {
|
|
|
71
71
|
private spawn;
|
|
72
72
|
private tick;
|
|
73
73
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrConfetti, never>;
|
|
74
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
74
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
export { WrConfetti };
|
|
@@ -44,9 +44,18 @@ declare class WrContextMenu {
|
|
|
44
44
|
readonly menu: _angular_core.InputSignal<WrContextMenuPanel>;
|
|
45
45
|
private readonly host;
|
|
46
46
|
private readonly overlay;
|
|
47
|
+
/**
|
|
48
|
+
* The reading direction the open menu has to keep up with.
|
|
49
|
+
*
|
|
50
|
+
* Optional inject, as on every other overlay here: `Directionality` is
|
|
51
|
+
* root-provided and so never null in an app, but a bare `TestBed` that
|
|
52
|
+
* provides nothing should still get a menu that opens.
|
|
53
|
+
*/
|
|
54
|
+
private readonly dir;
|
|
47
55
|
private readonly outsideClick;
|
|
48
56
|
private readonly vcr;
|
|
49
57
|
private readonly scrollStrategies;
|
|
58
|
+
private readonly injector;
|
|
50
59
|
private readonly destroyRef;
|
|
51
60
|
/**
|
|
52
61
|
* Id of the menu element while this trigger's menu is open, published on the
|
|
@@ -219,6 +228,7 @@ declare class WrContextMenuItem {
|
|
|
219
228
|
private readonly dir;
|
|
220
229
|
private readonly vcr;
|
|
221
230
|
private readonly scrollStrategies;
|
|
231
|
+
private readonly injector;
|
|
222
232
|
private readonly destroyRef;
|
|
223
233
|
private submenuRef;
|
|
224
234
|
private submenuKeys;
|
package/types/ngwr-cookie.d.ts
CHANGED
|
@@ -59,7 +59,7 @@ declare class WrCookie {
|
|
|
59
59
|
/** Remove every cookie visible to this document. Uses `path: '/'`. */
|
|
60
60
|
clear(): void;
|
|
61
61
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrCookie, never>;
|
|
62
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
62
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
export { WrCookie };
|
|
@@ -67,7 +67,7 @@ declare class WrDateFnsAdapter extends WrDateAdapter<Date> {
|
|
|
67
67
|
getDayOfWeekNames(style: 'narrow' | 'short' | 'long'): readonly string[];
|
|
68
68
|
getMonthNames(style: 'narrow' | 'short' | 'long'): readonly string[];
|
|
69
69
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrDateFnsAdapter, never>;
|
|
70
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
70
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
/**
|
|
@@ -70,7 +70,7 @@ declare class WrLuxonAdapter extends WrDateAdapter<DateTime> {
|
|
|
70
70
|
getDayOfWeekNames(style: 'narrow' | 'short' | 'long'): readonly string[];
|
|
71
71
|
getMonthNames(style: 'narrow' | 'short' | 'long'): readonly string[];
|
|
72
72
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrLuxonAdapter, never>;
|
|
73
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
73
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
/**
|
|
@@ -83,6 +83,14 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
83
83
|
private readonly scrollStrategies;
|
|
84
84
|
private readonly host;
|
|
85
85
|
private readonly destroyRef;
|
|
86
|
+
private readonly injector;
|
|
87
|
+
/**
|
|
88
|
+
* Ambient reading direction, for the open panel alone — nothing in this
|
|
89
|
+
* component reads it directly. Optional so a bare `TestBed` needs no
|
|
90
|
+
* provider; `Directionality` is root-provided anyway, and a missing one
|
|
91
|
+
* simply reads as `ltr`.
|
|
92
|
+
*/
|
|
93
|
+
private readonly dir;
|
|
86
94
|
protected readonly inputEl: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
87
95
|
protected readonly triggerEl: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
|
|
88
96
|
/** The picked Date. Bound by `[formField]`, or two-way via `[(value)]`. */
|
|
@@ -306,6 +314,14 @@ declare class WrDateRangePicker implements FormValueControl<WrDateRange | null>
|
|
|
306
314
|
private readonly scrollStrategies;
|
|
307
315
|
private readonly host;
|
|
308
316
|
private readonly destroyRef;
|
|
317
|
+
private readonly injector;
|
|
318
|
+
/**
|
|
319
|
+
* Ambient reading direction, for the open panel alone — nothing in this
|
|
320
|
+
* component reads it directly. Optional so a bare `TestBed` needs no
|
|
321
|
+
* provider; `Directionality` is root-provided anyway, and a missing one
|
|
322
|
+
* simply reads as `ltr`.
|
|
323
|
+
*/
|
|
324
|
+
private readonly dir;
|
|
309
325
|
protected readonly startEl: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
310
326
|
protected readonly endEl: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
311
327
|
protected readonly triggerEl: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
|
package/types/ngwr-date.d.ts
CHANGED
|
@@ -29,8 +29,14 @@ interface WrDateAdapterOptions {
|
|
|
29
29
|
*/
|
|
30
30
|
readonly adapter?: Type<WrDateAdapter<unknown>>;
|
|
31
31
|
/**
|
|
32
|
-
* BCP 47 locale tag (`'en-US'`, `'ru-RU'`, …).
|
|
33
|
-
*
|
|
32
|
+
* BCP 47 locale tag (`'en-US'`, `'ru-RU'`, …).
|
|
33
|
+
*
|
|
34
|
+
* Default: Angular's own `LOCALE_ID`, which is what {@link WR_DATE_LOCALE}
|
|
35
|
+
* resolves to. This line used to say `navigator.language` in the browser and
|
|
36
|
+
* `'en-US'` on the server, which was true before v14 and has been wrong since
|
|
37
|
+
* — v14 made `LOCALE_ID` the single locale source precisely so an app that
|
|
38
|
+
* sets it correctly stops formatting dates in whatever language the visitor's
|
|
39
|
+
* browser happens to be.
|
|
34
40
|
*/
|
|
35
41
|
readonly locale?: string;
|
|
36
42
|
}
|
|
@@ -272,7 +278,7 @@ declare class WrNativeDateAdapter extends WrDateAdapter<Date> {
|
|
|
272
278
|
*/
|
|
273
279
|
private compose;
|
|
274
280
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrNativeDateAdapter, never>;
|
|
275
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
281
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
276
282
|
}
|
|
277
283
|
|
|
278
284
|
/**
|
package/types/ngwr-density.d.ts
CHANGED
package/types/ngwr-dialog.d.ts
CHANGED
|
@@ -149,6 +149,7 @@ declare class WrDialog {
|
|
|
149
149
|
private readonly isBrowser;
|
|
150
150
|
private readonly responsiveConfig;
|
|
151
151
|
private readonly i18n;
|
|
152
|
+
private readonly dir;
|
|
152
153
|
private readonly location;
|
|
153
154
|
open<C, R = unknown, D = unknown>(component: ComponentType<C>, options?: WrDialogOptions<D>): WrDialogRef<C, R>;
|
|
154
155
|
/**
|
|
@@ -181,7 +182,7 @@ declare class WrDialog {
|
|
|
181
182
|
*/
|
|
182
183
|
private closeLabel;
|
|
183
184
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrDialog, never>;
|
|
184
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
185
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
185
186
|
}
|
|
186
187
|
|
|
187
188
|
/**
|
|
@@ -75,7 +75,17 @@ declare class WrDonutChartHarness extends ComponentHarness {
|
|
|
75
75
|
getCenterValue(): Promise<string | null>;
|
|
76
76
|
/** The caption under the centre value, or `null`. */
|
|
77
77
|
getCenterLabel(): Promise<string | null>;
|
|
78
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* The chart's outer size in pixels, read off the `style` ATTRIBUTE.
|
|
80
|
+
*
|
|
81
|
+
* NOT `getCssValue()`, which is `getComputedStyle()` — the same rule this
|
|
82
|
+
* file's class note already states and this method alone broke. A computed
|
|
83
|
+
* read answers from the LAID-OUT box, so it agrees with the inline value in
|
|
84
|
+
* jsdom (which lays nothing out and echoes the declaration) and disagrees in a
|
|
85
|
+
* browser, where sub-pixel rounding turns a declared 240 into 239.5. A harness
|
|
86
|
+
* that answers differently in the two places it runs is worse than one that
|
|
87
|
+
* refuses.
|
|
88
|
+
*/
|
|
79
89
|
getSize(): Promise<number>;
|
|
80
90
|
}
|
|
81
91
|
|
package/types/ngwr-drawer.d.ts
CHANGED
|
@@ -168,8 +168,28 @@ declare class WrDrawer {
|
|
|
168
168
|
private readonly overlay;
|
|
169
169
|
private readonly vcr;
|
|
170
170
|
private readonly destroyRef;
|
|
171
|
+
private readonly injector;
|
|
171
172
|
private readonly focusTrapFactory;
|
|
172
173
|
private readonly isBrowser;
|
|
174
|
+
/**
|
|
175
|
+
* The reading direction the open drawer has to keep up with, resolved off the
|
|
176
|
+
* ENVIRONMENT injector rather than this component's.
|
|
177
|
+
*
|
|
178
|
+
* That is where the CDK read it: `createOverlayRef` takes `Directionality`
|
|
179
|
+
* from the `Overlay`'s own injector, which `provideWrOverlay()` parents to
|
|
180
|
+
* the application's, so a node-level CDK `[dir]` is never in the chain. A
|
|
181
|
+
* panel is not IN that island either — it is appended to the overlay
|
|
182
|
+
* container on `<body>` — so following the node injector would not follow the
|
|
183
|
+
* ref at all: it would rewrite a correctly-stamped panel to the island's
|
|
184
|
+
* direction one pass after it opened, and `WrDrawerManager`, a root service
|
|
185
|
+
* with no island to read, could never do the same. Two halves of one
|
|
186
|
+
* component, same panel classes, same stylesheet, two answers.
|
|
187
|
+
*
|
|
188
|
+
* `null` never happens in an app — `Directionality` is root-provided — but a
|
|
189
|
+
* bare `TestBed` should still get a drawer that opens, with nothing ambient
|
|
190
|
+
* to follow.
|
|
191
|
+
*/
|
|
192
|
+
private readonly dir;
|
|
173
193
|
private overlayRef;
|
|
174
194
|
private focusTrap;
|
|
175
195
|
private previouslyFocused;
|
|
@@ -297,6 +317,14 @@ declare class WrDrawerManager {
|
|
|
297
317
|
private readonly isBrowser;
|
|
298
318
|
private readonly i18n;
|
|
299
319
|
private readonly location;
|
|
320
|
+
/**
|
|
321
|
+
* The application's reading direction — the instance the CDK itself read when
|
|
322
|
+
* it stamped the overlay. A root service has no node injector above it, so a
|
|
323
|
+
* plain `inject()` here already resolves the environment one; `<wr-drawer>`,
|
|
324
|
+
* which does, spells that out and says why. The two halves of one component
|
|
325
|
+
* must not answer differently about the same panel.
|
|
326
|
+
*/
|
|
327
|
+
private readonly dir;
|
|
300
328
|
open<C, R = unknown, D = unknown>(component: ComponentType<C>, options?: WrDrawerOptions<D>): WrDrawerRef<C, R>;
|
|
301
329
|
/**
|
|
302
330
|
* Tie the drawer's lifetime to the URL it was opened on — the same treatment
|
|
@@ -333,7 +361,7 @@ declare class WrDrawerManager {
|
|
|
333
361
|
*/
|
|
334
362
|
private closeLabel;
|
|
335
363
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDrawerManager, never>;
|
|
336
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
364
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
337
365
|
}
|
|
338
366
|
|
|
339
367
|
/**
|
package/types/ngwr-dropdown.d.ts
CHANGED
|
@@ -73,10 +73,19 @@ declare class WrDropdown {
|
|
|
73
73
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
74
74
|
private readonly host;
|
|
75
75
|
private readonly overlay;
|
|
76
|
+
/**
|
|
77
|
+
* The reading direction the open menu has to keep up with.
|
|
78
|
+
*
|
|
79
|
+
* Optional inject: `Directionality` is root-provided, so this is never null in
|
|
80
|
+
* an app — but a bare `TestBed` that provides nothing should still get a menu
|
|
81
|
+
* that opens, with simply nothing ambient to follow.
|
|
82
|
+
*/
|
|
83
|
+
private readonly dir;
|
|
76
84
|
private readonly outsideClick;
|
|
77
85
|
private readonly responsiveConfig;
|
|
78
86
|
private readonly vcr;
|
|
79
87
|
private readonly scrollStrategies;
|
|
88
|
+
private readonly injector;
|
|
80
89
|
private readonly destroyRef;
|
|
81
90
|
/** @internal Public so host bindings can read it. */
|
|
82
91
|
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
@@ -128,6 +137,22 @@ declare class WrDropdown {
|
|
|
128
137
|
/** @internal */
|
|
129
138
|
protected onMouseLeave(event: MouseEvent): void;
|
|
130
139
|
private openOverlay;
|
|
140
|
+
/**
|
|
141
|
+
* Tear the overlay down, and tell the host — unless the host is going away
|
|
142
|
+
* with it.
|
|
143
|
+
*
|
|
144
|
+
* `notify: false` is the DESTROY path, and it is not a nicety. An `output()`
|
|
145
|
+
* belongs to the view that declares it, so emitting from `onDestroy` is
|
|
146
|
+
* refused: Angular logs `NG0953: Unexpected emit for destroyed OutputRef` and
|
|
147
|
+
* the listener never runs. Measured — a `(closed)` handler on a dropdown whose
|
|
148
|
+
* host view is removed while the menu is open fired zero times and left a
|
|
149
|
+
* console error behind. There is nobody to notify at that point, because the
|
|
150
|
+
* consumer's own view is being torn down in the same pass; `wr-popconfirm`
|
|
151
|
+
* already disposes without emitting, and this brings the other two into line.
|
|
152
|
+
*
|
|
153
|
+
* The focus hand-back is skipped for the same reason — the host element is on
|
|
154
|
+
* its way out of the document.
|
|
155
|
+
*/
|
|
131
156
|
private closeOverlay;
|
|
132
157
|
/** @internal Trigger keydown — ArrowDown/Up/Enter/Space open the menu. */
|
|
133
158
|
protected onKeydown(event: KeyboardEvent): void;
|
|
@@ -72,6 +72,17 @@ declare class WrFileUpload implements FormValueControl<File | readonly File[] |
|
|
|
72
72
|
readonly readonly: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
73
73
|
/** The surrounding `<wr-form-field>`'s error state. @internal */
|
|
74
74
|
protected readonly fieldAria: ngwr_form.WrFormFieldAria;
|
|
75
|
+
/**
|
|
76
|
+
* The field's label names the drop zone, when there is one.
|
|
77
|
+
*
|
|
78
|
+
* The zone is a `div[role="button"]`, so `<wr-form-field>`'s `<label for>`
|
|
79
|
+
* cannot reach it and named nothing at all — the zone announced only its own
|
|
80
|
+
* generic "drop files here" copy. `aria-labelledby` is the direction that
|
|
81
|
+
* works for a role. The zone copy stays as the label when no field wraps it.
|
|
82
|
+
*/
|
|
83
|
+
protected readonly labelledBy: _angular_core.Signal<string | null>;
|
|
84
|
+
/** `null` while the field's label carries the name, or both are announced. */
|
|
85
|
+
protected readonly zoneName: _angular_core.Signal<string | null>;
|
|
75
86
|
/** Primary call-to-action label. Falls back to `fileUpload.browse`. */
|
|
76
87
|
readonly pickLabel: _angular_core.InputSignal<string | null>;
|
|
77
88
|
/** Secondary instruction below the CTA. Falls back to `fileUpload.dropZone`. */
|