ngwr 14.7.0 → 14.9.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 +66 -332
- package/alert/styles/_index.scss +10 -0
- package/avatar/styles/_index.scss +18 -7
- package/badge/styles/_index.scss +7 -0
- package/badge/styles/_tag.scss +7 -1
- package/bar-chart/styles/_index.scss +1 -0
- package/button/styles/_index.scss +6 -0
- package/calendar-heatmap/styles/_index.scss +1 -0
- package/cascader/styles/_rules.scss +87 -15
- package/checkbox/styles/_index.scss +4 -0
- package/command-palette/styles/_index.scss +1 -1
- package/date-picker/styles/_index.scss +30 -0
- package/density/styles/_index.scss +4 -2
- package/divider/styles/_index.scss +2 -0
- package/donut-chart/styles/_index.scss +10 -0
- package/dropdown/styles/_index.scss +67 -5
- package/editor/styles/_index.scss +441 -0
- package/event-calendar/styles/_index.scss +209 -35
- package/fesm2022/ngwr-action-sheet-testing.mjs.map +1 -1
- package/fesm2022/ngwr-action-sheet.mjs +3 -3
- package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
- package/fesm2022/ngwr-affix.mjs +3 -3
- package/fesm2022/ngwr-affix.mjs.map +1 -1
- package/fesm2022/ngwr-alert.mjs +3 -3
- package/fesm2022/ngwr-alert.mjs.map +1 -1
- package/fesm2022/ngwr-anchor.mjs +3 -3
- package/fesm2022/ngwr-anchor.mjs.map +1 -1
- package/fesm2022/ngwr-aurora.mjs +3 -3
- package/fesm2022/ngwr-aurora.mjs.map +1 -1
- package/fesm2022/ngwr-avatar.mjs +3 -3
- package/fesm2022/ngwr-avatar.mjs.map +1 -1
- package/fesm2022/ngwr-back-top.mjs +3 -3
- package/fesm2022/ngwr-back-top.mjs.map +1 -1
- package/fesm2022/ngwr-badge.mjs +28 -13
- package/fesm2022/ngwr-badge.mjs.map +1 -1
- package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bar-chart.mjs +31 -6
- package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
- package/fesm2022/ngwr-blur-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-blur-text.mjs +3 -3
- package/fesm2022/ngwr-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow-testing.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow.mjs +3 -3
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +6 -6
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +3 -3
- package/fesm2022/ngwr-burger.mjs.map +1 -1
- package/fesm2022/ngwr-button-testing.mjs.map +1 -1
- package/fesm2022/ngwr-button.mjs +6 -6
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-heatmap-testing.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-heatmap.mjs +61 -6
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +3 -3
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +9 -9
- package/fesm2022/ngwr-card.mjs.map +1 -1
- package/fesm2022/ngwr-carousel-testing.mjs.map +1 -1
- package/fesm2022/ngwr-carousel.mjs +6 -6
- package/fesm2022/ngwr-carousel.mjs.map +1 -1
- package/fesm2022/ngwr-cascader-testing.mjs.map +1 -1
- package/fesm2022/ngwr-cascader.mjs +4 -4
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +18 -8
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text.mjs +3 -3
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +3 -3
- package/fesm2022/ngwr-click-spark.mjs.map +1 -1
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-clipboard.mjs.map +1 -1
- package/fesm2022/ngwr-collapse-testing.mjs.map +1 -1
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-collapse.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker.mjs +6 -6
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +3 -3
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-compare.mjs.map +1 -1
- package/fesm2022/ngwr-confetti.mjs +3 -3
- package/fesm2022/ngwr-confetti.mjs.map +1 -1
- package/fesm2022/ngwr-config.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu.mjs +12 -12
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-cookie.mjs.map +1 -1
- package/fesm2022/ngwr-counter.mjs +6 -6
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapters-fns.mjs +3 -3
- package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapters-luxon.mjs +3 -3
- package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +721 -62
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-date.mjs +3 -3
- package/fesm2022/ngwr-date.mjs.map +1 -1
- package/fesm2022/ngwr-decrypt-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-decrypt-text.mjs +3 -3
- package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-density.mjs.map +1 -1
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs.map +1 -1
- package/fesm2022/ngwr-dialog-testing.mjs.map +1 -1
- package/fesm2022/ngwr-dialog.mjs +15 -15
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-directives.mjs.map +1 -1
- package/fesm2022/ngwr-divider.mjs +3 -3
- package/fesm2022/ngwr-divider.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart.mjs +48 -6
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +6 -6
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer-testing.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +18 -18
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown.mjs +174 -25
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-editor-testing.mjs +568 -0
- package/fesm2022/ngwr-editor-testing.mjs.map +1 -0
- package/fesm2022/ngwr-editor.mjs +2601 -0
- package/fesm2022/ngwr-editor.mjs.map +1 -0
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-empty.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar.mjs +14 -7
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text.mjs +3 -3
- package/fesm2022/ngwr-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload.mjs +3 -3
- package/fesm2022/ngwr-file-upload.mjs.map +1 -1
- package/fesm2022/ngwr-form-testing.mjs.map +1 -1
- package/fesm2022/ngwr-form.mjs +61 -10
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +3 -3
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gauge-testing.mjs.map +1 -1
- package/fesm2022/ngwr-gauge.mjs +35 -6
- package/fesm2022/ngwr-gauge.mjs.map +1 -1
- package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-glitch-text.mjs +3 -3
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text.mjs +3 -3
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-graph-testing.mjs.map +1 -1
- package/fesm2022/ngwr-graph.mjs +6 -6
- package/fesm2022/ngwr-graph.mjs.map +1 -1
- package/fesm2022/ngwr-hotkey.mjs +6 -6
- package/fesm2022/ngwr-hotkey.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ar.mjs +31 -0
- package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-cs.mjs +31 -0
- package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-de.mjs +31 -0
- package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +39 -0
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-es.mjs +31 -0
- package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-fr.mjs +31 -0
- package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-he.mjs +31 -0
- package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-hi.mjs +31 -0
- package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-id.mjs +31 -0
- package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-it.mjs +31 -0
- package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ja.mjs +31 -0
- package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ko.mjs +31 -0
- package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-nl.mjs +31 -0
- package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pl.mjs +31 -0
- package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pt.mjs +31 -0
- package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +31 -0
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-sv.mjs +31 -0
- package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-tr.mjs +31 -0
- package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-uk.mjs +31 -0
- package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-vi.mjs +31 -0
- package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh-TW.mjs +31 -0
- package/fesm2022/ngwr-i18n-zh-TW.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh.mjs +31 -0
- package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +9 -9
- package/fesm2022/ngwr-i18n.mjs.map +1 -1
- package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -1
- package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -1
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-icon.mjs.map +1 -1
- package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -1
- package/fesm2022/ngwr-image-cropper.mjs +3 -3
- package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
- package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-number.mjs +15 -3
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +3 -3
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +15 -15
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-keyboard.mjs.map +1 -1
- package/fesm2022/ngwr-knob-testing.mjs.map +1 -1
- package/fesm2022/ngwr-knob.mjs +3 -3
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-layout.mjs +15 -15
- package/fesm2022/ngwr-layout.mjs.map +1 -1
- package/fesm2022/ngwr-lightbox-testing.mjs.map +1 -1
- package/fesm2022/ngwr-lightbox.mjs +3 -3
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart.mjs +18 -7
- package/fesm2022/ngwr-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +6 -6
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar-router.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +6 -6
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown-testing.mjs.map +1 -1
- package/fesm2022/ngwr-markdown.mjs +798 -17
- package/fesm2022/ngwr-markdown.mjs.map +1 -1
- package/fesm2022/ngwr-marquee-testing.mjs.map +1 -1
- package/fesm2022/ngwr-marquee.mjs +3 -3
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-media.mjs.map +1 -1
- package/fesm2022/ngwr-mention-testing.mjs.map +1 -1
- package/fesm2022/ngwr-mention.mjs +6 -6
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +6 -6
- package/fesm2022/ngwr-meta.mjs.map +1 -1
- package/fesm2022/ngwr-meter-group-testing.mjs +7 -3
- package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -1
- package/fesm2022/ngwr-meter-group.mjs +26 -6
- package/fesm2022/ngwr-meter-group.mjs.map +1 -1
- package/fesm2022/ngwr-overlay.mjs +6 -6
- package/fesm2022/ngwr-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-page-header.mjs +13 -5
- package/fesm2022/ngwr-page-header.mjs.map +1 -1
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +3 -3
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +21 -21
- package/fesm2022/ngwr-pipes.mjs.map +1 -1
- package/fesm2022/ngwr-platform.mjs +9 -9
- package/fesm2022/ngwr-platform.mjs.map +1 -1
- package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -1
- package/fesm2022/ngwr-popconfirm.mjs +6 -6
- package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
- package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
- package/fesm2022/ngwr-popover.mjs +578 -16
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-progress.mjs +3 -3
- package/fesm2022/ngwr-progress.mjs.map +1 -1
- package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
- package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
- package/fesm2022/ngwr-qr.mjs +3 -3
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-radio-testing.mjs.map +1 -1
- package/fesm2022/ngwr-radio.mjs +6 -6
- package/fesm2022/ngwr-radio.mjs.map +1 -1
- package/fesm2022/ngwr-rating-testing.mjs.map +1 -1
- package/fesm2022/ngwr-rating.mjs +3 -3
- package/fesm2022/ngwr-rating.mjs.map +1 -1
- package/fesm2022/ngwr-result.mjs +12 -12
- package/fesm2022/ngwr-result.mjs.map +1 -1
- package/fesm2022/ngwr-rotating-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
- package/fesm2022/ngwr-schema-form.mjs +3 -3
- package/fesm2022/ngwr-schema-form.mjs.map +1 -1
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
- package/fesm2022/ngwr-segmented.mjs +3 -3
- package/fesm2022/ngwr-segmented.mjs.map +1 -1
- package/fesm2022/ngwr-select-testing.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +12 -12
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +6 -6
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +10 -3
- package/fesm2022/ngwr-sidebar.mjs.map +1 -1
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-skeleton.mjs.map +1 -1
- package/fesm2022/ngwr-slider-testing.mjs.map +1 -1
- package/fesm2022/ngwr-slider.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline-testing.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline.mjs +84 -10
- package/fesm2022/ngwr-sparkline.mjs.map +1 -1
- package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -1
- package/fesm2022/ngwr-speed-dial.mjs +3 -3
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-spinner.mjs.map +1 -1
- package/fesm2022/ngwr-splash-cursor-testing.mjs.map +1 -1
- package/fesm2022/ngwr-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
- package/fesm2022/ngwr-split-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-split-text.mjs +3 -3
- package/fesm2022/ngwr-split-text.mjs.map +1 -1
- package/fesm2022/ngwr-splitter-testing.mjs.map +1 -1
- package/fesm2022/ngwr-splitter.mjs +3 -3
- package/fesm2022/ngwr-splitter.mjs.map +1 -1
- package/fesm2022/ngwr-spotlight-card-testing.mjs.map +1 -1
- package/fesm2022/ngwr-spotlight-card.mjs +6 -6
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-squircle.mjs +6 -6
- package/fesm2022/ngwr-squircle.mjs.map +1 -1
- package/fesm2022/ngwr-star-border-testing.mjs.map +1 -1
- package/fesm2022/ngwr-star-border.mjs +3 -3
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +9 -9
- package/fesm2022/ngwr-statistic.mjs.map +1 -1
- package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
- package/fesm2022/ngwr-stepper.mjs +6 -6
- package/fesm2022/ngwr-stepper.mjs.map +1 -1
- package/fesm2022/ngwr-storage.mjs +3 -3
- package/fesm2022/ngwr-storage.mjs.map +1 -1
- package/fesm2022/ngwr-switch-testing.mjs.map +1 -1
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-switch.mjs.map +1 -1
- package/fesm2022/ngwr-table-testing.mjs.map +1 -1
- package/fesm2022/ngwr-table.mjs +18 -18
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-router.mjs +3 -3
- package/fesm2022/ngwr-tabs-router.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +6 -6
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea-testing.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +3 -3
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-theme.mjs +3 -3
- package/fesm2022/ngwr-theme.mjs.map +1 -1
- package/fesm2022/ngwr-tilt-card-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tilt-card.mjs +6 -6
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-timeline.mjs.map +1 -1
- package/fesm2022/ngwr-toast-testing.mjs.map +1 -1
- package/fesm2022/ngwr-toast.mjs +9 -9
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +10 -3
- package/fesm2022/ngwr-toolbar.mjs.map +1 -1
- package/fesm2022/ngwr-tour-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tour.mjs +6 -6
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer-testing.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +3 -3
- package/fesm2022/ngwr-transfer.mjs.map +1 -1
- package/fesm2022/ngwr-tree-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tree.mjs +3 -3
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +3 -3
- package/fesm2022/ngwr-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-typography.mjs +7 -3
- package/fesm2022/ngwr-typography.mjs.map +1 -1
- package/fesm2022/ngwr-utils.mjs.map +1 -1
- package/fesm2022/ngwr-validators.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 +3 -3
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves-testing.mjs.map +1 -1
- package/fesm2022/ngwr-waves.mjs +3 -3
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window-testing.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +12 -12
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/form/styles/_index.scss +16 -1
- package/gauge/styles/_index.scss +1 -0
- package/i18n/ar.json +32 -1
- package/i18n/cs.json +32 -1
- package/i18n/de.json +32 -1
- package/i18n/en.json +32 -1
- package/i18n/es.json +32 -1
- package/i18n/fr.json +32 -1
- package/i18n/he.json +32 -1
- package/i18n/hi.json +32 -1
- package/i18n/id.json +32 -1
- package/i18n/it.json +32 -1
- package/i18n/ja.json +32 -1
- package/i18n/ko.json +32 -1
- package/i18n/nl.json +32 -1
- package/i18n/pl.json +32 -1
- package/i18n/pt.json +32 -1
- package/i18n/ru.json +32 -1
- package/i18n/sv.json +32 -1
- package/i18n/tr.json +32 -1
- package/i18n/uk.json +32 -1
- package/i18n/vi.json +32 -1
- package/i18n/zh-TW.json +32 -1
- package/i18n/zh.json +32 -1
- package/input/styles/_index.scss +24 -1
- package/input-number/styles/_index.scss +69 -0
- package/input-otp/styles/_index.scss +5 -5
- package/line-chart/styles/_index.scss +30 -2
- package/llms-full.txt +14 -4
- package/llms.txt +188 -132
- package/mcp/providers.js +2 -2
- package/mcp/server.js +1 -1
- package/meter-group/styles/_index.scss +1 -0
- package/overlay/styles/_arrow.scss +30 -2
- package/package.json +43 -2
- package/page-header/styles/_index.scss +37 -1
- package/pagination/styles/_index.scss +9 -5
- package/popover/styles/_index.scss +73 -5
- package/progress/styles/_index.scss +4 -0
- package/radio/styles/_index.scss +4 -1
- package/schematics/use/symbol-map.json +1 -0
- package/select/styles/_index.scss +51 -12
- package/sidebar/styles/_index.scss +44 -2
- package/skeleton/styles/_index.scss +3 -0
- package/skills/ngwr/SKILL.md +5 -5
- package/skills/ngwr/references/catalog.md +2 -0
- package/skills/ngwr/references/setup.md +3 -3
- package/sparkline/styles/_index.scss +19 -0
- package/styles.scss +1 -0
- package/table/styles/_index.scss +7 -0
- package/textarea/styles/_index.scss +12 -3
- package/theme/styles/_colors.scss +39 -13
- package/theme/styles/_contrast.scss +9 -7
- package/toast/styles/_index.scss +4 -0
- package/toolbar/styles/_index.scss +35 -1
- package/tree/styles/_index.scss +46 -7
- package/types/ngwr-badge.d.ts +22 -7
- package/types/ngwr-bar-chart.d.ts +19 -1
- package/types/ngwr-calendar-heatmap.d.ts +29 -1
- package/types/ngwr-checkbox.d.ts +2 -0
- package/types/ngwr-config.d.ts +12 -0
- package/types/ngwr-date-picker.d.ts +308 -43
- package/types/ngwr-donut-chart.d.ts +24 -1
- package/types/ngwr-dropdown.d.ts +22 -2
- package/types/ngwr-editor-testing.d.ts +378 -0
- package/types/ngwr-editor.d.ts +449 -0
- package/types/ngwr-event-calendar.d.ts +8 -0
- package/types/ngwr-form.d.ts +35 -5
- package/types/ngwr-gauge.d.ts +20 -1
- package/types/ngwr-input-number.d.ts +7 -0
- package/types/ngwr-line-chart.d.ts +9 -1
- package/types/ngwr-markdown.d.ts +61 -2
- package/types/ngwr-meter-group-testing.d.ts +3 -2
- package/types/ngwr-meter-group.d.ts +14 -1
- package/types/ngwr-page-header.d.ts +10 -2
- package/types/ngwr-popover.d.ts +154 -3
- package/types/ngwr-sidebar.d.ts +7 -0
- package/types/ngwr-sparkline.d.ts +43 -1
- package/types/ngwr-toolbar.d.ts +7 -0
- package/types/ngwr-typography.d.ts +4 -0
- package/types/ngwr-version.d.ts +1 -1
- package/typography/styles/_index.scss +16 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngwr-editor-testing.mjs","sources":["../../../projects/lib/editor/testing/wr-editor-harness.ts","../../../projects/lib/editor/testing/ngwr-editor-testing.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport {\n ComponentHarness,\n HarnessPredicate,\n type ModifierKeys,\n type TestElement,\n type TestKey,\n parallel,\n} from '@angular/cdk/testing';\n\nimport { WrButtonHarness } from 'ngwr/button/testing';\nimport { WrInputHarness } from 'ngwr/input/testing';\nimport { WrPopoverHarness } from 'ngwr/popover/testing';\n\nimport type { WrEditorHarnessFilters } from './interfaces';\n\n/** The text surface ProseMirror mounts on. */\nconst SURFACE = '.wr-editor__surface';\n\n/** One toolbar button. The separators are `<span>`s and never match. */\nconst TOOL = '.wr-editor__tool';\n\n/**\n * The link tool — the one button that hosts a popover rather than a tooltip, and so\n * the one announcing `aria-haspopup=\"dialog\"`.\n */\nconst LINK_TOOL = `${TOOL}[aria-haspopup=\"dialog\"]`;\n\n/**\n * Every textblock the schema can draw. A list item, a quote and a table cell all hold\n * paragraphs, so this reaches every run of text however deeply it is nested — and\n * nothing else: a task item's box and its screen-reader words sit OUTSIDE the\n * paragraph, beside it.\n */\nconst TEXTBLOCKS = `${SURFACE} :is(p, h1, h2, h3, pre)`;\n\n/**\n * The modifier ProseMirror's keymap reads `Mod` as. It decides from\n * `navigator.platform` itself, once, when `prosemirror-keymap` loads — so this asks\n * the same question the same way rather than guessing from the tooltip, which the\n * component words from the user agent.\n */\nfunction primaryModifier(): ModifierKeys {\n const apple = typeof navigator !== 'undefined' && /Mac|iP(hone|[oa]d)/.test(navigator.platform);\n return apple ? { meta: true } : { control: true };\n}\n\n/**\n * Test harness for `<wr-editor>` — a ProseMirror text surface, the formatting\n * toolbar above it, and the link panel one of its buttons opens.\n *\n * **The value is not read here, and that is the first thing to know.** The model\n * holds an HTML string, a markdown string or a JSON tree depending on `format`, and\n * all three are written by the editor's codec, never by the DOM. What the surface\n * draws is ProseMirror's rendering of the document — a trailing `<br>` in an empty\n * paragraph, a presentational box beside a task item — so a string derived from it\n * would be a fourth format agreeing with none of the three. A spec reads the value\n * from what it bound (`form.body().value()`, the `[(value)]` signal); this harness\n * answers the other question, what is DRAWN ({@link getText}), and a spec on an\n * editor should usually ask both.\n *\n * Four more things are refused, each because jsdom cannot answer it and a method\n * would answer it anyway:\n *\n * - **Typing, character by character.** `sendKeys` dispatches key events and nothing\n * else. In a browser the BROWSER inserts the character into the contenteditable and\n * ProseMirror reads the mutation; jsdom inserts nothing, so a typed string would\n * vanish while the call resolved. {@link setText} writes the surface the way the\n * CDK defines writing a contenteditable, which ProseMirror reads as a real DOM\n * change; {@link paste} inserts at the selection; {@link pressKey} refuses a\n * printable character without a modifier rather than dropping it.\n * - **A caret or a selected range.** Placing either needs a DOM selection inside a\n * text node, which no `TestElement` call can create. {@link selectAll} is the one\n * selection a keyboard makes without a coordinate, and it is the one offered.\n * - **Anything measured** — the height between `--wr-editor-min-height` and\n * `-max-height`, a scroll, how the toolbar wraps, where a tooltip lands. Every box\n * is 0×0 without layout.\n * - **Whether the placeholder is visible.** It is CSS `content` drawn from a data\n * attribute, which no DOM query sees; {@link getPlaceholder} reads what is\n * ANNOUNCED, and that is only there while the document is empty.\n *\n * Toolbar buttons are addressed by the name a screen reader reads — `Bold`,\n * `Heading 2`, `Insert link` in English, the catalog's words otherwise — because the\n * DOM carries nothing else to tell them apart, and that name is the contract anyway.\n * {@link getTool} hands back a `WrButtonHarness`; what that harness does not read\n * (`aria-pressed`, `aria-keyshortcuts`, the roving tab stop) is answered here.\n *\n * Every method reads the MOUNTED surface. ProseMirror takes it over in\n * `afterNextRender`, which the harness's own stabilising lets run; under a server\n * `PLATFORM_ID` it never does, and the static preview the server renders is not\n * something this harness pretends to be the editor.\n *\n * **A spec under jsdom installs one stub first.** After an edit made while the\n * surface has focus, ProseMirror scrolls the selection into view, which measures a\n * `Range` — and jsdom's `Range` has no `getClientRects()`. The throw comes AFTER the\n * document changed but before the model hears of it, from inside a DOM listener, so\n * the model keeps the old value and the error surfaces only as an unhandled one. Empty\n * boxes are the whole stub; nothing here measures anything, so nothing is lost:\n *\n * ```ts\n * beforeEach(() => {\n * Range.prototype.getClientRects = () => [] as unknown as DOMRectList;\n * Range.prototype.getBoundingClientRect = () => new DOMRect();\n * document.elementFromPoint = () => null;\n * });\n * // …and delete all three again in afterEach, so no other file inherits them.\n * ```\n *\n * @example\n * ```ts\n * const loader = TestbedHarnessEnvironment.loader(fixture);\n * const body = await loader.getHarness(WrEditorHarness.with({ label: 'Body' }));\n *\n * await body.setText('Release notes');\n * await body.selectAll();\n * await (await body.getTool('Bold')).click();\n *\n * expect(await body.isToolPressed('Bold')).toBe(true);\n * expect(host.value()).toBe('<p><strong>Release notes</strong></p>');\n * ```\n *\n * @see https://ngwr.dev/guides/testing\n */\nexport class WrEditorHarness extends ComponentHarness {\n static hostSelector = 'wr-editor';\n\n /** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */\n static with(options: WrEditorHarnessFilters = {}): HarnessPredicate<WrEditorHarness> {\n return new HarnessPredicate(WrEditorHarness, options)\n .addOption('label', options.label, (harness, label) => HarnessPredicate.stringMatches(harness.getLabel(), label))\n .addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text))\n .addOption('disabled', options.disabled, async (harness, disabled) => (await harness.isDisabled()) === disabled)\n .addOption('readonly', options.readonly, async (harness, readonly) => (await harness.isReadonly()) === readonly);\n }\n\n private readonly surface = this.locatorFor(SURFACE);\n\n // ---------------------------------------------------------------------------\n // The surface\n // ---------------------------------------------------------------------------\n\n /**\n * Whether ProseMirror owns the surface yet — read from the `contenteditable` it\n * writes there, which nothing else does.\n *\n * `true` in any browser-platform spec by the time a harness method runs. `false`\n * under a server `PLATFORM_ID`, where the editor is the static preview for good —\n * and every other method here throws, rather than answer about a preview as if it\n * were the editor.\n */\n async isMounted(): Promise<boolean> {\n return (await (await this.surface()).getAttribute('contenteditable')) !== null;\n }\n\n /**\n * The text the surface DRAWS: every textblock (paragraph, heading, code block) in\n * document order, each trimmed, joined with a newline.\n *\n * Joined per textblock rather than read in one go, because a single text read of the\n * surface glues two paragraphs into one word — `Hello` and `world` would come back\n * as `Helloworld`. A list item, a quote and a table cell draw their text in\n * paragraphs too, so a two-item list reads `One\\nTwo`. Left out, deliberately: a task\n * item's `Done:` / `To do:` — screen-reader text beside the paragraph, not in it —\n * and a hard break, which is a `<br>` and has no text. An empty document is `''`.\n *\n * This is the drawn half of the two questions an editor answers; the class docs say\n * why the other half, the value, is read from the model instead.\n */\n async getText(): Promise<string> {\n await this.mountedSurface('getText');\n const blocks = await this.locatorForAll(TEXTBLOCKS)();\n return (await parallel(() => blocks.map(block => block.text()))).join('\\n');\n }\n\n /**\n * The surface's accessible name — `ariaLabel` when one is bound, else the\n * surrounding `<wr-form-field>`'s label, else the catalog's `editor.label`.\n *\n * A field's label reaches the surface through `aria-labelledby`, never `<label for>`:\n * a contenteditable is not labelable. So the reference is resolved the way assistive\n * technology resolves it — each id's element, its text — and a reference to an\n * element that is not on the page contributes nothing, which is the failure worth\n * catching.\n */\n async getLabel(): Promise<string | null> {\n const surface = await this.surface();\n const labelledBy = await surface.getAttribute('aria-labelledby');\n if (labelledBy) {\n const root = this.documentRootLocatorFactory();\n const labels = await parallel(() =>\n labelledBy\n .split(/\\s+/)\n .filter(Boolean)\n .map(async id => {\n const element = await root.locatorForOptional(`[id=\"${id}\"]`)();\n return element ? element.text() : '';\n })\n );\n return labels.filter(Boolean).join(' ') || null;\n }\n return surface.getAttribute('aria-label');\n }\n\n /**\n * The placeholder as announced — `aria-placeholder` — or `null` when there is none\n * to announce.\n *\n * That is `null` whenever the document holds anything, not only when no\n * `placeholder` is bound: the component publishes it only while the document is\n * empty, the moment it is also drawn. A document holding an empty heading still\n * counts as empty.\n */\n async getPlaceholder(): Promise<string | null> {\n return (await this.surface()).getAttribute('aria-placeholder');\n }\n\n /**\n * Whether the editor is disabled — the surface's `aria-disabled`.\n *\n * Read from the surface rather than the `wr-editor--disabled` host class, because a\n * contenteditable has no `disabled` property: the attribute is what a screen reader\n * is told, and ProseMirror's own `contenteditable=\"false\"` is what turns the\n * keyboard away. The component sets both.\n */\n async isDisabled(): Promise<boolean> {\n return (await (await this.surface()).getAttribute('aria-disabled')) === 'true';\n }\n\n /**\n * Whether the editor shows its document and refuses edits — the surface's\n * `aria-readonly`, which `role=\"textbox\"` allows. Read-only keeps the tab stop, so\n * {@link focus} still lands; disabled does not.\n */\n async isReadonly(): Promise<boolean> {\n return (await (await this.surface()).getAttribute('aria-readonly')) === 'true';\n }\n\n /**\n * Whether the surface is announced invalid — the `aria-invalid` the surrounding\n * `<wr-form-field>` hands it when a bound field fails validation and has been\n * touched. An editor outside a field is never invalid.\n */\n async isInvalid(): Promise<boolean> {\n return (await (await this.surface()).getAttribute('aria-invalid')) === 'true';\n }\n\n /**\n * Replace the whole document with `text`, as one paragraph of plain text.\n *\n * Written through `TestElement.setContenteditableValue` — the CDK's own definition of\n * writing a contenteditable — which ProseMirror observes as a DOM change and parses\n * back through the schema, exactly as it does the mutation a browser makes for a\n * keystroke. So the write reaches the model through the editor's own path, filters\n * and all. A line break in `text` becomes a hard break inside that one paragraph,\n * the way Shift+Enter makes one; more paragraphs, lists and headings come from the\n * toolbar, {@link pressKey} or {@link pasteHtml}.\n *\n * An empty `text` empties the document, which writes `''` (`null` in `json` format).\n *\n * Throws on a disabled or read-only editor, where no user could change a word — the\n * surface is not contenteditable then, and a write the DOM accepted anyway would be\n * a green spec for something that cannot happen.\n */\n async setText(text: string): Promise<void> {\n const surface = await this.writableSurface('setText');\n await surface.focus();\n await surface.setContenteditableValue(text);\n await this.forceStabilize();\n }\n\n /**\n * Paste `text` as plain text at the selection, replacing whatever is selected — a\n * `paste` event carrying `text/plain`, handled by ProseMirror's own paste path.\n *\n * On a READ-ONLY editor the event is still delivered, because a browser delivers it:\n * the refusal is the editor's to make, and asserting the value did not change is how\n * a spec proves it did. Throws on a disabled one, whose surface cannot hold focus for\n * a paste to arrive at.\n */\n async paste(text: string): Promise<void> {\n await this.dispatchPaste('paste', { 'text/plain': text });\n }\n\n /**\n * Paste `html` at the selection, the way content copied from a web page arrives —\n * `text/html` with `text` as its `text/plain` twin.\n *\n * This is the path to exercise what the editor strips from untrusted markup: the\n * pasted HTML is parsed without executing anything and rebuilt from the schema,\n * exactly as a bound HTML value is, so `onclick`, a `javascript:` link or an\n * `<iframe>` never reaches the document. Read-only and disabled behave as in\n * {@link paste}.\n */\n async pasteHtml(html: string, text = ''): Promise<void> {\n await this.dispatchPaste('pasteHtml', { 'text/html': html, 'text/plain': text });\n }\n\n /**\n * Select the whole document with the platform's select-all chord, as ProseMirror's\n * keymap reads it.\n *\n * Throws on a read-only or disabled editor: ProseMirror hands the keyboard back to\n * the browser once the surface is not editable, and the browser's native select-all\n * is exactly what jsdom does not have, so the chord would select nothing and say so\n * to no one.\n */\n async selectAll(): Promise<void> {\n if (await this.isReadonly()) {\n throw new Error(\n 'WrEditorHarness.selectAll(): the editor is read-only. ProseMirror does not handle the keyboard on a ' +\n 'surface that is not editable — the browser selects natively — and a DOM without layout has no native ' +\n 'selection to make. Assert isReadonly() instead.'\n );\n }\n const surface = await this.writableSurface('selectAll');\n await surface.focus();\n await surface.sendKeys(primaryModifier(), 'a');\n }\n\n /**\n * Press one key on the surface, with modifiers — Enter, Backspace, an arrow, or a\n * shortcut such as `pressKey('b', { control: true })`.\n *\n * The keys reach ProseMirror's keymap, which is where the shortcuts, the list\n * behaviour of Enter and history live. Under jsdom, ProseMirror reads `Mod` as\n * Control; {@link getToolShortcuts} names the chord each tool answers to.\n *\n * A printable character WITHOUT a Control, Meta or Alt modifier throws: inserting it\n * is the browser's job, not the key event's (see the class docs), so it would be\n * dropped while the call resolved — use {@link setText} or {@link paste}. Throws on a\n * disabled editor, whose surface is out of the tab order. A read-only one takes the\n * key and refuses whatever it would have changed, as it does in a browser.\n */\n async pressKey(key: TestKey | string, modifiers: ModifierKeys = {}): Promise<void> {\n if (typeof key === 'string' && !modifiers.control && !modifiers.meta && !modifiers.alt) {\n throw new Error(\n `WrEditorHarness.pressKey(): \"${key}\" would be typed, not pressed. A key event inserts nothing into a ` +\n 'contenteditable — the browser does, and jsdom does not — so the character would be dropped silently. ' +\n 'Use setText() or paste() for text, or pass a modifier for a shortcut.'\n );\n }\n const surface = await this.focusableSurface('pressKey');\n await surface.focus();\n await surface.sendKeys(modifiers, key);\n }\n\n /**\n * Move focus to the text surface. A read-only editor keeps its tab stop and takes\n * it.\n *\n * Throws on a disabled one rather than focusing it. In a browser its surface cannot\n * take focus — no `tabindex`, and `contenteditable=\"false\"` — but jsdom counts ANY\n * `contenteditable` attribute as focusable, `false` included, so the focus would\n * land in the spec and never in the app.\n */\n async focus(): Promise<void> {\n return (await this.focusableSurface('focus')).focus();\n }\n\n /**\n * Take focus away from the surface — the whole control losing focus, which is what\n * emits `touch` and lets a bound field show its error. Focus moving to the editor's\n * own toolbar or link panel is not a blur of the control, and does not emit it.\n */\n async blur(): Promise<void> {\n return (await this.surface()).blur();\n }\n\n /** Whether the text surface holds focus. A toolbar button holding it is not the surface. */\n async isFocused(): Promise<boolean> {\n return (await this.surface()).isFocused();\n }\n\n // ---------------------------------------------------------------------------\n // The toolbar\n // ---------------------------------------------------------------------------\n\n /** Whether a toolbar is drawn — gone with `toolbar=\"false\"`, and with a list holding no tool. */\n async hasToolbar(): Promise<boolean> {\n return (await this.locatorForOptional('[role=\"toolbar\"]')()) !== null;\n }\n\n /** The toolbar's accessible name — the catalog's `editor.toolbar`. Throws when there is no toolbar. */\n async getToolbarLabel(): Promise<string | null> {\n return (await this.toolbar('getToolbarLabel')).getAttribute('aria-label');\n }\n\n /**\n * The names of the drawn tools, in order, separators left out.\n *\n * What is DRAWN, which is not always what was bound: `underline` is dropped in\n * `markdown` format, which cannot store it, and a duplicate or a stray separator is\n * dropped too.\n */\n async getToolLabels(): Promise<string[]> {\n const tools = await this.locatorForAll(TOOL)();\n return (await parallel(() => tools.map(tool => tool.getAttribute('aria-label')))).map(label => label ?? '');\n }\n\n /**\n * The toolbar button named `label`, as a `WrButtonHarness` — click it, focus it, ask\n * whether it is disabled.\n *\n * A tool the current selection cannot use is NATIVELY disabled, so its click never\n * fires; that is the answer to \"can bold apply here\", read with `isDisabled()`. Its\n * tooltip — the name plus the shortcut — is a `[wrPopover]` in tooltip mode, which\n * `WrPopoverHarness` reads when a spec cares about the wording.\n */\n async getTool(label: string | RegExp): Promise<WrButtonHarness> {\n const tool = await this.locatorForOptional(\n WrButtonHarness.with({ selector: TOOL }).add(`label matches ${label}`, async harness =>\n HarnessPredicate.stringMatches((await harness.host()).getAttribute('aria-label'), label)\n )\n )();\n if (tool) return tool;\n\n throw new Error(\n `WrEditorHarness.getTool(): no tool is named ${label}. The toolbar draws ` +\n `${JSON.stringify(await this.getToolLabels())} — note that underline is not drawn in markdown format.`\n );\n }\n\n /**\n * Whether a toggle tool is pressed — its `aria-pressed` — at the current selection.\n *\n * The marks answer for the selection (or, at a caret, for what typing would carry);\n * the block types answer for every textblock the selection touches, so a select-all\n * over a heading and a paragraph presses neither.\n *\n * Throws for a tool that is not a toggle: the link button opens a panel, and undo,\n * redo and the horizontal rule are actions, so none carries `aria-pressed` and a\n * `false` would claim a state they do not have. Whether the selection sits in a link\n * is what the link panel's remove button answers — see {@link removeLink}.\n */\n async isToolPressed(label: string | RegExp): Promise<boolean> {\n const host = await (await this.getTool(label)).host();\n const pressed = await host.getAttribute('aria-pressed');\n if (pressed === null) {\n throw new Error(\n `WrEditorHarness.isToolPressed(): \"${await host.getAttribute('aria-label')}\" is not a toggle, so it carries ` +\n 'no aria-pressed. Link opens a panel; undo, redo and the horizontal rule are actions.'\n );\n }\n return pressed === 'true';\n }\n\n /**\n * The chords a tool answers to, as its `aria-keyshortcuts` states them\n * (`Control+B`, `Control+Shift+Z Control+Y`), or `null` for a tool with none — the\n * horizontal rule.\n *\n * ARIA key names, never localised; `Meta` replaces `Control` where the user agent is\n * Apple's.\n */\n async getToolShortcuts(label: string | RegExp): Promise<string | null> {\n return (await (await this.getTool(label)).host()).getAttribute('aria-keyshortcuts');\n }\n\n /**\n * The name of the one tool in the tab order, or `null` when there is none.\n *\n * The toolbar is a single tab stop that the arrow keys rove. The stop follows the\n * user, and moves off a tool that stopped applying — so after a click that disables\n * undo, it lands on the first tool that still applies. `null` only when nothing does\n * (read-only, disabled), where there is nothing for the keyboard to reach.\n */\n async getToolbarTabStop(): Promise<string | null> {\n const tools = await this.locatorForAll(TOOL)();\n for (const tool of tools) {\n if ((await tool.getAttribute('tabindex')) === '0' && !(await tool.getProperty<boolean>('disabled'))) {\n return tool.getAttribute('aria-label');\n }\n }\n return null;\n }\n\n // ---------------------------------------------------------------------------\n // The link panel\n // ---------------------------------------------------------------------------\n\n /** Whether the link panel is open, from the link tool's `aria-expanded`. `false` when there is no link tool. */\n async isLinkPanelOpen(): Promise<boolean> {\n const tool = await this.locatorForOptional(LINK_TOOL)();\n return !!tool && (await tool.getAttribute('aria-expanded')) === 'true';\n }\n\n /**\n * Open the link panel from its toolbar button and hand back the popover — a\n * content container, so `panel.getHarness(WrInputHarness)` reaches the address\n * field without the spec touching the overlay. An open panel is returned as it is.\n *\n * The panel is a portal in the overlay container, reached through the id the\n * button publishes as `aria-controls`, never by its class: two editors can each have\n * one. Mod-K on the surface opens the same panel — `pressKey('k', { control: true })`.\n *\n * Throws when the toolbar draws no link tool, or when the tool is unavailable (a\n * read-only or disabled editor).\n */\n async openLinkPanel(): Promise<WrPopoverHarness> {\n const panel = await this.linkPopover('openLinkPanel');\n if (await panel.isOpen()) return panel;\n\n if (await (await panel.host()).getProperty<boolean>('disabled')) {\n throw new Error(\n 'WrEditorHarness.openLinkPanel(): the link tool is disabled — nothing can be linked while the editor ' +\n 'is read-only or disabled.'\n );\n }\n await panel.open();\n return panel;\n }\n\n /**\n * Link the selection to `url` through the panel: open it, write the address, apply.\n *\n * With text selected, the selection becomes the link; with the caret inside a link,\n * that link's address changes; with nothing selected at all, the address is inserted\n * as its own linked text. An emptied address on an existing link removes it.\n *\n * Resolves whether or not the address was accepted. One the URL policy refuses — a\n * `javascript:` or `data:` scheme — leaves the panel OPEN with its error showing and\n * the document untouched, which is the behaviour a spec most wants to pin; read it\n * with {@link getLinkError} and {@link isLinkPanelOpen}.\n */\n async setLink(url: string): Promise<void> {\n const panel = await this.openLinkPanel();\n const input = await panel.getHarness(WrInputHarness);\n await input.setValue(url);\n await (await panel.getHarness(WrButtonHarness.with({ selector: '.wr-editor-link__apply' }))).click();\n }\n\n /**\n * Remove the link the selection sits in or covers, through the panel's remove button.\n *\n * Throws when the selection is in no link: the panel draws the button only then, so\n * its absence IS the answer to \"is there a link here\".\n */\n async removeLink(): Promise<void> {\n const panel = await this.openLinkPanel();\n const remove = await panel.getHarnessOrNull(WrButtonHarness.with({ selector: '.wr-editor-link__remove' }));\n if (!remove) {\n throw new Error(\n 'WrEditorHarness.removeLink(): the selection is not in a link, so the panel offers nothing to remove. ' +\n 'Select the linked text first — selectAll() covers a document holding one link.'\n );\n }\n await remove.click();\n }\n\n /**\n * The message the open panel shows for a refused address, or `null` when it shows\n * none. It is a `role=\"alert\"`, and the address field names it with\n * `aria-describedby` — so the text a screen reader hears is the text read here.\n *\n * Throws while the panel is closed: the message only exists inside it, and a `null`\n * would read as \"the address was accepted\".\n */\n async getLinkError(): Promise<string | null> {\n if (!(await this.isLinkPanelOpen())) {\n throw new Error(\n 'WrEditorHarness.getLinkError(): the link panel is closed, so there is no message to read. An accepted ' +\n 'address closes it — isLinkPanelOpen() tells the two outcomes apart.'\n );\n }\n const id = await (await this.locatorFor(LINK_TOOL)()).getAttribute('aria-controls');\n const error = await this.documentRootLocatorFactory().locatorForOptional(`[id=\"${id}\"] .wr-editor-link__error`)();\n return error ? error.text() : null;\n }\n\n // ---------------------------------------------------------------------------\n // Internals\n // ---------------------------------------------------------------------------\n\n /** The surface, or a sentence saying the editor is still the server's static preview. */\n private async mountedSurface(method: string): Promise<TestElement> {\n const surface = await this.surface();\n if ((await surface.getAttribute('contenteditable')) === null) {\n throw new Error(\n `WrEditorHarness.${method}(): the editor is not mounted. ProseMirror takes the surface over in ` +\n 'afterNextRender, which never runs under a server PLATFORM_ID — what shows there is the static ' +\n 'preview, and this harness does not answer for it as if it were the editor.'\n );\n }\n return surface;\n }\n\n /** The surface, when a user could still reach it with the keyboard. */\n private async focusableSurface(method: string): Promise<TestElement> {\n const surface = await this.mountedSurface(method);\n if (await this.isDisabled()) {\n throw new Error(\n `WrEditorHarness.${method}(): the editor is disabled — its surface is out of the tab order, so no key or ` +\n 'paste could arrive there. Assert isDisabled() instead.'\n );\n }\n return surface;\n }\n\n /** The surface, when a user could change its text. */\n private async writableSurface(method: string): Promise<TestElement> {\n const surface = await this.focusableSurface(method);\n if (await this.isReadonly()) {\n throw new Error(\n `WrEditorHarness.${method}(): the editor is read-only, so no user could change its text — the surface is ` +\n 'not contenteditable. Write through the bound model instead, or assert isReadonly().'\n );\n }\n return surface;\n }\n\n private async dispatchPaste(method: string, data: Readonly<Record<string, string>>): Promise<void> {\n const surface = await this.focusableSurface(method);\n await surface.focus();\n await surface.dispatchEvent('paste', {\n clipboardData: {\n types: Object.keys(data),\n getData: (type: string) => data[type] ?? '',\n },\n });\n }\n\n private async toolbar(method: string): Promise<TestElement> {\n const toolbar = await this.locatorForOptional('[role=\"toolbar\"]')();\n if (toolbar) return toolbar;\n throw new Error(`WrEditorHarness.${method}(): the editor draws no toolbar — toolbar is false, or lists no tool.`);\n }\n\n private async linkPopover(method: string): Promise<WrPopoverHarness> {\n const panel = await this.locatorForOptional(WrPopoverHarness.with({ selector: LINK_TOOL }))();\n if (panel) return panel;\n throw new Error(\n `WrEditorHarness.${method}(): the toolbar draws no link tool. Bind a toolbar that lists 'link' — Mod-K ` +\n 'opens the panel only when the tool is there to host it.'\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|