ngwr 14.8.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/button/styles/_index.scss +6 -0
- package/cascader/styles/_rules.scss +1 -1
- package/checkbox/styles/_index.scss +4 -0
- package/command-palette/styles/_index.scss +1 -1
- package/divider/styles/_index.scss +2 -0
- package/editor/styles/_index.scss +441 -0
- 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 +3 -3
- 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 +3 -3
- 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 +6 -6
- 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 +21 -21
- 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 +3 -3
- 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 +9 -9
- 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 +6 -6
- 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 +9 -9
- 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 +3 -3
- 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 +29 -0
- package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-cs.mjs +29 -0
- package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-de.mjs +29 -0
- package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +34 -0
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-es.mjs +29 -0
- package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-fr.mjs +29 -0
- package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-he.mjs +29 -0
- package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-hi.mjs +29 -0
- package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-id.mjs +29 -0
- package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-it.mjs +29 -0
- package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ja.mjs +29 -0
- package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ko.mjs +29 -0
- package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-nl.mjs +29 -0
- package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pl.mjs +29 -0
- package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pt.mjs +29 -0
- package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +29 -0
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-sv.mjs +29 -0
- package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-tr.mjs +29 -0
- package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-uk.mjs +29 -0
- package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-vi.mjs +29 -0
- package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh-TW.mjs +29 -0
- package/fesm2022/ngwr-i18n-zh-TW.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh.mjs +29 -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 +3 -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 +3 -3
- 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.map +1 -1
- package/fesm2022/ngwr-meter-group.mjs +3 -3
- 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 +3 -3
- 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 +12 -12
- 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 +3 -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 +3 -3
- 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 +3 -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 +5 -0
- package/i18n/ar.json +29 -0
- package/i18n/cs.json +29 -0
- package/i18n/de.json +29 -0
- package/i18n/en.json +29 -0
- package/i18n/es.json +29 -0
- package/i18n/fr.json +29 -0
- package/i18n/he.json +29 -0
- package/i18n/hi.json +29 -0
- package/i18n/id.json +29 -0
- package/i18n/it.json +29 -0
- package/i18n/ja.json +29 -0
- package/i18n/ko.json +29 -0
- package/i18n/nl.json +29 -0
- package/i18n/pl.json +29 -0
- package/i18n/pt.json +29 -0
- package/i18n/ru.json +29 -0
- package/i18n/sv.json +29 -0
- package/i18n/tr.json +29 -0
- package/i18n/uk.json +29 -0
- package/i18n/vi.json +29 -0
- package/i18n/zh-TW.json +29 -0
- package/i18n/zh.json +29 -0
- package/input/styles/_index.scss +5 -1
- package/input-otp/styles/_index.scss +5 -5
- package/llms-full.txt +11 -1
- package/llms.txt +188 -132
- package/mcp/providers.js +2 -2
- package/mcp/server.js +1 -1
- package/overlay/styles/_arrow.scss +3 -0
- package/package.json +43 -2
- 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 +3 -3
- package/sidebar/styles/_index.scss +10 -0
- 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/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/tree/styles/_index.scss +1 -1
- package/types/ngwr-badge.d.ts +22 -7
- package/types/ngwr-config.d.ts +12 -0
- package/types/ngwr-editor-testing.d.ts +378 -0
- package/types/ngwr-editor.d.ts +449 -0
- package/types/ngwr-markdown.d.ts +61 -2
- 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,449 @@
|
|
|
1
|
+
import * as ngwr_form from 'ngwr/form';
|
|
2
|
+
import { WrFormFieldContext } from 'ngwr/form';
|
|
3
|
+
import * as _angular_core from '@angular/core';
|
|
4
|
+
import { Signal } from '@angular/core';
|
|
5
|
+
import { FormValueControl } from '@angular/forms/signals';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @license
|
|
9
|
+
*
|
|
10
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
11
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* What `<wr-editor>` reads from and writes into its `value` model.
|
|
15
|
+
*
|
|
16
|
+
* - `html` — an HTML string, parsed without executing anything and rebuilt from
|
|
17
|
+
* the editor's own schema on the way out, so only what the schema allows comes
|
|
18
|
+
* back. `''` for an empty document.
|
|
19
|
+
* - `markdown` — the dialect `ngwr/markdown` reads and `<wr-markdown>` renders,
|
|
20
|
+
* written back by `serializeMarkdown`. Markdown has no underline, so the
|
|
21
|
+
* underline tool and its shortcut are absent in this format. `''` for an empty
|
|
22
|
+
* document.
|
|
23
|
+
* - `json` — the document as a {@link WrEditorJson} tree. `null` for an empty
|
|
24
|
+
* document.
|
|
25
|
+
*/
|
|
26
|
+
type WrEditorFormat = 'html' | 'markdown' | 'json';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @license
|
|
30
|
+
*
|
|
31
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
32
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* One mark on a {@link WrEditorJson} node — `strong`, `em`, `underline`,
|
|
36
|
+
* `strike`, `code`, or `link` with `{ href, title }`.
|
|
37
|
+
*/
|
|
38
|
+
interface WrEditorMarkJson {
|
|
39
|
+
readonly type: string;
|
|
40
|
+
readonly attrs?: Readonly<Record<string, unknown>>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The editor's document as plain data — the shape ProseMirror's `toJSON()`
|
|
44
|
+
* writes, declared here so no ProseMirror type reaches the public API.
|
|
45
|
+
*
|
|
46
|
+
* Nodes: `doc`, `paragraph`, `heading` (`level` 1–3), `blockquote`,
|
|
47
|
+
* `code_block` (`language`), `horizontal_rule`, `bullet_list` (`tight`),
|
|
48
|
+
* `ordered_list` (`order`, `tight`), `list_item` (`checked`: `true`, `false`
|
|
49
|
+
* or `null` for an ordinary item), `hard_break`, `image` (`src`, `alt`,
|
|
50
|
+
* `title`), `table`, `table_row`, `table_header` / `table_cell` (`align`) and
|
|
51
|
+
* `text`.
|
|
52
|
+
*
|
|
53
|
+
* A value bound in `json` format is VALIDATED, not trusted: an unknown node or
|
|
54
|
+
* mark, an attribute outside its allowed set, a content rule broken, or a link
|
|
55
|
+
* or image whose URL `safeMarkdownUrl` refuses, and the whole value is refused —
|
|
56
|
+
* the editor keeps what it had and warns in dev mode.
|
|
57
|
+
*/
|
|
58
|
+
interface WrEditorJson {
|
|
59
|
+
readonly type: string;
|
|
60
|
+
readonly attrs?: Readonly<Record<string, unknown>>;
|
|
61
|
+
readonly content?: readonly WrEditorJson[];
|
|
62
|
+
readonly marks?: readonly WrEditorMarkJson[];
|
|
63
|
+
readonly text?: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @license
|
|
68
|
+
*
|
|
69
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
70
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
71
|
+
*/
|
|
72
|
+
/**
|
|
73
|
+
* One entry of `<wr-editor>`'s `toolbar` input.
|
|
74
|
+
*
|
|
75
|
+
* - Marks: `bold`, `italic`, `underline` (absent in `markdown` format, which
|
|
76
|
+
* cannot express it), `strike`, `code`.
|
|
77
|
+
* - Blocks: `paragraph`, `heading1`, `heading2`, `heading3`, `bulletList`,
|
|
78
|
+
* `orderedList`, `blockquote`, `codeBlock`.
|
|
79
|
+
* - Inserts: `link` (opens the link panel), `horizontalRule`.
|
|
80
|
+
* - History: `undo`, `redo`.
|
|
81
|
+
* - `'|'` draws a separator between two groups.
|
|
82
|
+
*/
|
|
83
|
+
type WrEditorTool = 'bold' | 'italic' | 'underline' | 'strike' | 'code' | 'paragraph' | 'heading1' | 'heading2' | 'heading3' | 'bulletList' | 'orderedList' | 'blockquote' | 'codeBlock' | 'link' | 'horizontalRule' | 'undo' | 'redo' | '|';
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @license
|
|
87
|
+
*
|
|
88
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
89
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The `value` model of `<wr-editor>`: a string in `html` and `markdown` format,
|
|
94
|
+
* a {@link WrEditorJson} tree in `json` format.
|
|
95
|
+
*
|
|
96
|
+
* An empty document is written as `''` in the two string formats and as `null`
|
|
97
|
+
* in `json`, so a Signal Forms `required()` rule reports an empty editor as
|
|
98
|
+
* empty — `'<p></p>'` would be a non-empty string. `null` and `''` are both
|
|
99
|
+
* read as an empty document in every format.
|
|
100
|
+
*/
|
|
101
|
+
type WrEditorValue = string | WrEditorJson | null;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @license
|
|
105
|
+
*
|
|
106
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
107
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
/** Every tool but the separator. */
|
|
111
|
+
type WrEditorCommandTool = Exclude<WrEditorTool, '|'>;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* The field the link panel's URL input belongs to — provided as `WR_FORM_FIELD`
|
|
115
|
+
* for the editor's whole subtree.
|
|
116
|
+
*
|
|
117
|
+
* It does two jobs at once. It is the SHIELD every composite control needs: the
|
|
118
|
+
* editor is the control a `<wr-form-field>` wraps, and without a nearer provider
|
|
119
|
+
* the `[wrInput]` in its link panel would adopt the outer field's id, take over
|
|
120
|
+
* its label and announce its error as its own. And it is the input's own field:
|
|
121
|
+
* `[wrInput]` binds `id`, `aria-invalid` and `aria-describedby` from whatever
|
|
122
|
+
* field it finds, so answering here is how a refused URL reaches a screen reader
|
|
123
|
+
* without binding attributes the directive already owns.
|
|
124
|
+
*
|
|
125
|
+
* @internal
|
|
126
|
+
*/
|
|
127
|
+
declare class WrEditorLinkField implements WrFormFieldContext {
|
|
128
|
+
private readonly id;
|
|
129
|
+
/** The URL just submitted was refused by the link policy. */
|
|
130
|
+
readonly invalid: _angular_core.WritableSignal<boolean>;
|
|
131
|
+
readonly controlId: _angular_core.Signal<string>;
|
|
132
|
+
readonly errorId: string;
|
|
133
|
+
readonly panelId: string;
|
|
134
|
+
readonly errorKeys: _angular_core.Signal<readonly string[]>;
|
|
135
|
+
readonly describedBy: _angular_core.Signal<string | null>;
|
|
136
|
+
readonly labelId: _angular_core.Signal<string | null>;
|
|
137
|
+
adoptControlId(): void;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** One toolbar button's state at the current selection. */
|
|
141
|
+
interface WrToolState {
|
|
142
|
+
readonly tool: WrEditorCommandTool;
|
|
143
|
+
readonly active: boolean;
|
|
144
|
+
readonly available: boolean;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Rich-text editor on ProseMirror, with a toolbar, a link panel, keyboard
|
|
148
|
+
* shortcuts and markdown-style block shortcuts (`# `, `> `, `- `, `1. `,
|
|
149
|
+
* ` ``` `).
|
|
150
|
+
*
|
|
151
|
+
* A signal-forms native control: it implements `FormValueControl<WrEditorValue>`,
|
|
152
|
+
* so `[formField]` binds straight to its `value` model — no
|
|
153
|
+
* `ControlValueAccessor` in between. `[(value)]` works standalone.
|
|
154
|
+
*
|
|
155
|
+
* The value is an HTML string, a markdown string or the document as JSON, chosen
|
|
156
|
+
* by `format`. Whatever arrives is treated as untrusted and rebuilt from the
|
|
157
|
+
* editor's schema, so only what the schema allows survives, and links and images
|
|
158
|
+
* go through `safeMarkdownUrl` in all three. A value the editor cannot read is
|
|
159
|
+
* refused — the document it already shows is kept, a warning names the reason in
|
|
160
|
+
* dev mode, and nothing is written back. Until a value it CAN read arrives the
|
|
161
|
+
* editor is read-only and carries `wr-editor--refused`: the model still holds the
|
|
162
|
+
* refused value, and an edit would write the document on screen over it.
|
|
163
|
+
*
|
|
164
|
+
* Headings stop at three levels: an h4–h6 read from HTML or markdown becomes an
|
|
165
|
+
* h3 rather than a paragraph. Underline exists in `html` and `json` only —
|
|
166
|
+
* markdown cannot spell it, so in that format the tool, the shortcut and the mark
|
|
167
|
+
* itself are absent.
|
|
168
|
+
*
|
|
169
|
+
* ProseMirror is an OPTIONAL peer dependency: only an app that imports
|
|
170
|
+
* `ngwr/editor` installs `prosemirror-model`, `-state`, `-view`, `-commands`,
|
|
171
|
+
* `-keymap`, `-history`, `-schema-list` and `-inputrules`.
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```html
|
|
175
|
+
* <!-- signal forms -->
|
|
176
|
+
* <wr-editor format="markdown" placeholder="Describe the change" [formField]="form.body" />
|
|
177
|
+
*
|
|
178
|
+
* <!-- standalone two-way binding -->
|
|
179
|
+
* <wr-editor [(value)]="html" />
|
|
180
|
+
* ```
|
|
181
|
+
*
|
|
182
|
+
* @see https://ngwr.dev/reference/components/editor
|
|
183
|
+
*/
|
|
184
|
+
declare class WrEditor implements FormValueControl<WrEditorValue> {
|
|
185
|
+
/**
|
|
186
|
+
* The document. A string in `html` and `markdown` format, a
|
|
187
|
+
* {@link WrEditorJson} tree in `json`; `''` / `null` when nothing is written.
|
|
188
|
+
* Bound by `[formField]`, or two-way via `[(value)]`.
|
|
189
|
+
*/
|
|
190
|
+
readonly value: _angular_core.ModelSignal<WrEditorValue>;
|
|
191
|
+
/** Emitted on blur so a bound field can mark itself touched. */
|
|
192
|
+
readonly touch: _angular_core.OutputEmitterRef<void>;
|
|
193
|
+
/**
|
|
194
|
+
* Disable the editor and its toolbar. Bound automatically from the field's
|
|
195
|
+
* disabled state when used with `[formField]`.
|
|
196
|
+
*
|
|
197
|
+
* @default false
|
|
198
|
+
*/
|
|
199
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
200
|
+
/**
|
|
201
|
+
* Refuse edits while the text stays focusable, selectable and announced.
|
|
202
|
+
* Bound automatically from the field's readonly state when used with
|
|
203
|
+
* `[formField]`.
|
|
204
|
+
*
|
|
205
|
+
* The surface keeps its tab stop and reports `aria-readonly`; typing, paste,
|
|
206
|
+
* drop, the shortcuts and every toolbar command are refused. The toolbar goes
|
|
207
|
+
* inert, since none of its tools can apply.
|
|
208
|
+
*
|
|
209
|
+
* @default false
|
|
210
|
+
*/
|
|
211
|
+
readonly readonly: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
212
|
+
/**
|
|
213
|
+
* Hint shown while the document is empty, and exposed as `aria-placeholder`.
|
|
214
|
+
*
|
|
215
|
+
* @default ''
|
|
216
|
+
*/
|
|
217
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
218
|
+
/**
|
|
219
|
+
* Accessible name of the text surface. Falls back to the surrounding
|
|
220
|
+
* `<wr-form-field>`'s label, then to `editor.label`.
|
|
221
|
+
*/
|
|
222
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
223
|
+
/**
|
|
224
|
+
* What `value` holds — see {@link WrEditorFormat}. Unset, it falls back to
|
|
225
|
+
* `provideWrConfig({ editor: { format } })`. Changing it re-reads `value` in
|
|
226
|
+
* the new format.
|
|
227
|
+
*
|
|
228
|
+
* @default 'html'
|
|
229
|
+
*/
|
|
230
|
+
readonly format: _angular_core.InputSignal<WrEditorFormat | null>;
|
|
231
|
+
protected readonly resolvedFormat: Signal<"html" | "markdown" | "json">;
|
|
232
|
+
/**
|
|
233
|
+
* The toolbar's tools, in order, with `'|'` between groups; `false` hides it.
|
|
234
|
+
* `underline` is left out in `markdown` format, which cannot store it.
|
|
235
|
+
*
|
|
236
|
+
* @default WR_EDITOR_TOOLBAR
|
|
237
|
+
*/
|
|
238
|
+
readonly toolbar: _angular_core.InputSignal<false | readonly WrEditorTool[]>;
|
|
239
|
+
private readonly document;
|
|
240
|
+
private readonly injector;
|
|
241
|
+
private readonly destroyRef;
|
|
242
|
+
private readonly host;
|
|
243
|
+
private readonly platform;
|
|
244
|
+
private readonly isBrowser;
|
|
245
|
+
/**
|
|
246
|
+
* Ambient reading direction, read by the toolbar's arrow keys. Optional so a
|
|
247
|
+
* bare `TestBed` needs no provider; `null` means LTR.
|
|
248
|
+
*/
|
|
249
|
+
private readonly dir;
|
|
250
|
+
/** @internal */
|
|
251
|
+
protected readonly linkField: WrEditorLinkField;
|
|
252
|
+
/** The surrounding `<wr-form-field>`'s error state, read past the editor's own shield. @internal */
|
|
253
|
+
protected readonly fieldAria: ngwr_form.WrFormFieldAria;
|
|
254
|
+
protected readonly resolvedAriaLabel: Signal<string>;
|
|
255
|
+
/**
|
|
256
|
+
* The field's label names the surface, when there is one — a
|
|
257
|
+
* `contenteditable` is not labelable, so the field's `<label for>` cannot
|
|
258
|
+
* reach it. An explicit `ariaLabel` still wins over both.
|
|
259
|
+
*/
|
|
260
|
+
protected readonly labelledBy: Signal<string | null>;
|
|
261
|
+
/** `null` while the field's label carries the name. */
|
|
262
|
+
protected readonly accessibleName: Signal<string | null>;
|
|
263
|
+
protected readonly surfaceId: string;
|
|
264
|
+
/** ProseMirror owns the surface from here on; until then the preview stands in. */
|
|
265
|
+
protected readonly mounted: _angular_core.WritableSignal<boolean>;
|
|
266
|
+
protected readonly focused: _angular_core.WritableSignal<boolean>;
|
|
267
|
+
private readonly editorState;
|
|
268
|
+
/**
|
|
269
|
+
* Whether `value` holds something the editor could not read, so the document
|
|
270
|
+
* on screen is not the one the model holds — empty at mount, or the previous
|
|
271
|
+
* record after a write. Edits are refused until a readable value arrives:
|
|
272
|
+
* the first keystroke would otherwise replace the stored value with whatever
|
|
273
|
+
* is on screen, and the only sign of it was a dev-mode warning.
|
|
274
|
+
*/
|
|
275
|
+
private readonly refused;
|
|
276
|
+
/** Read-only by the input, or because the value was refused. @internal */
|
|
277
|
+
protected readonly locked: Signal<boolean>;
|
|
278
|
+
/** Apple keyboards name the modifier ⌘. Read in the browser only — see `mount()`. */
|
|
279
|
+
private readonly apple;
|
|
280
|
+
private readonly surface;
|
|
281
|
+
private readonly toolButtons;
|
|
282
|
+
private readonly linkPopover;
|
|
283
|
+
private view;
|
|
284
|
+
/** The format the live document was read in, which is the format it is written in. */
|
|
285
|
+
private viewFormat;
|
|
286
|
+
/**
|
|
287
|
+
* The value the live document was last read from or written as. A write from
|
|
288
|
+
* outside that equals it is the document already on screen — an echo of the
|
|
289
|
+
* editor's own emit, or a consumer writing back what it was handed — and must
|
|
290
|
+
* neither re-parse nor reset the selection.
|
|
291
|
+
*/
|
|
292
|
+
private lastSerialized;
|
|
293
|
+
private linkToSurface;
|
|
294
|
+
protected readonly toolbarLabel: Signal<string>;
|
|
295
|
+
protected readonly linkUrlLabel: Signal<string>;
|
|
296
|
+
protected readonly linkApplyLabel: Signal<string>;
|
|
297
|
+
protected readonly linkRemoveLabel: Signal<string>;
|
|
298
|
+
protected readonly linkInvalidLabel: Signal<string>;
|
|
299
|
+
protected readonly taskDoneLabel: Signal<string>;
|
|
300
|
+
protected readonly taskTodoLabel: Signal<string>;
|
|
301
|
+
private readonly keyCtrl;
|
|
302
|
+
private readonly keyShift;
|
|
303
|
+
private readonly keyAlt;
|
|
304
|
+
private readonly headingLabel;
|
|
305
|
+
private readonly shortcutLabel;
|
|
306
|
+
private readonly toolLabels;
|
|
307
|
+
/**
|
|
308
|
+
* The bound tools as drawn: underline dropped where the format cannot store
|
|
309
|
+
* it, and separators only BETWEEN two groups — a leading, trailing or doubled
|
|
310
|
+
* one would be left behind by that filter or by a hand-built list.
|
|
311
|
+
*/
|
|
312
|
+
protected readonly tools: Signal<readonly WrEditorTool[]>;
|
|
313
|
+
/** The tools that are buttons, in order — what the roving tab stop moves over. */
|
|
314
|
+
private readonly buttons;
|
|
315
|
+
/** Each drawn entry's index among the buttons, `-1` for a separator. @internal */
|
|
316
|
+
protected readonly buttonIndex: Signal<number[]>;
|
|
317
|
+
private readonly commands;
|
|
318
|
+
/** Every button's pressed and available state at the current selection. @internal */
|
|
319
|
+
protected readonly toolStates: Signal<ReadonlyMap<WrEditorCommandTool, WrToolState>>;
|
|
320
|
+
private readonly rovingIndex;
|
|
321
|
+
/**
|
|
322
|
+
* The one button in the tab order. It follows the user, and moves off a tool
|
|
323
|
+
* that stopped applying so the toolbar never loses its tab stop — unless NO
|
|
324
|
+
* tool applies (read-only, disabled), where it stays put, because there is
|
|
325
|
+
* nothing to reach.
|
|
326
|
+
*/
|
|
327
|
+
private readonly tabStop;
|
|
328
|
+
/** Whether the live document is empty — pre-mount, whether the value is. */
|
|
329
|
+
private readonly empty;
|
|
330
|
+
/** The task-item words, handed to ProseMirror through its node views. */
|
|
331
|
+
private readonly nodeViews;
|
|
332
|
+
protected readonly ariaPlaceholder: Signal<string | null>;
|
|
333
|
+
protected readonly linkDraft: _angular_core.WritableSignal<string>;
|
|
334
|
+
/** Whether the selection is in a link — what the panel's remove button needs. */
|
|
335
|
+
protected readonly linkActive: Signal<boolean>;
|
|
336
|
+
/**
|
|
337
|
+
* The value rendered by Angular until ProseMirror takes over: on the server,
|
|
338
|
+
* and for the first browser frame. Read from the doc JSON, so it shows exactly
|
|
339
|
+
* what the schema kept — the same sanitised document the editor will mount.
|
|
340
|
+
*/
|
|
341
|
+
protected readonly preview: Signal<WrEditorJson | null>;
|
|
342
|
+
protected readonly classes: Signal<string>;
|
|
343
|
+
constructor();
|
|
344
|
+
/** Focus the text surface — what Signal Forms calls to focus this control. */
|
|
345
|
+
focus(options?: FocusOptions): void;
|
|
346
|
+
protected label(tool: WrEditorCommandTool): string;
|
|
347
|
+
protected icon(tool: WrEditorCommandTool): readonly string[];
|
|
348
|
+
protected isToggle(tool: WrEditorCommandTool): boolean;
|
|
349
|
+
/** The tooltip: the label, with the shortcut when the tool has one. */
|
|
350
|
+
protected tooltip(tool: WrEditorCommandTool): string;
|
|
351
|
+
/** `aria-keyshortcuts` — key names from the ARIA spec, never localised. */
|
|
352
|
+
protected keyShortcuts(tool: WrEditorCommandTool): string | null;
|
|
353
|
+
protected state(tool: WrEditorCommandTool): WrToolState | undefined;
|
|
354
|
+
/**
|
|
355
|
+
* A toolbar button was activated.
|
|
356
|
+
*
|
|
357
|
+
* By pointer, focus never left the text (`mousedown` is cancelled), so the
|
|
358
|
+
* caret is put back where the command left it. By keyboard, focus stays on the
|
|
359
|
+
* button, as the toolbar pattern asks — unless the tool no longer applies,
|
|
360
|
+
* which disables it: a disabled button drops its focus on `<body>`, so the text
|
|
361
|
+
* takes it first.
|
|
362
|
+
*/
|
|
363
|
+
protected onToolClick(tool: WrEditorCommandTool, event: MouseEvent): void;
|
|
364
|
+
protected onToolFocus(index: number): void;
|
|
365
|
+
/** The APG toolbar keys: the arrows rove and wrap, Home and End jump. */
|
|
366
|
+
protected onToolbarKeydown(event: KeyboardEvent): void;
|
|
367
|
+
/** `touch` once focus leaves the whole control — not when it moves between its own parts. */
|
|
368
|
+
protected onFocusOut(event: FocusEvent): void;
|
|
369
|
+
protected onLinkOpened(): void;
|
|
370
|
+
protected onLinkClosed(): void;
|
|
371
|
+
protected onLinkInput(event: Event): void;
|
|
372
|
+
protected applyLink(event: Event): void;
|
|
373
|
+
protected removeLink(): void;
|
|
374
|
+
protected nodesOf(raw: unknown): readonly WrEditorJson[];
|
|
375
|
+
protected nodeOf(raw: unknown): WrEditorJson;
|
|
376
|
+
protected markAt(node: WrEditorJson, depth: number): WrEditorMarkJson | null;
|
|
377
|
+
protected attr(node: WrEditorJson | WrEditorMarkJson, name: string): unknown;
|
|
378
|
+
protected text(node: WrEditorJson | WrEditorMarkJson, name: string): string | null;
|
|
379
|
+
protected textOf(node: WrEditorJson): string;
|
|
380
|
+
/** Whether an edit may happen at all — not while read-only, disabled or refused. */
|
|
381
|
+
private canEdit;
|
|
382
|
+
private mount;
|
|
383
|
+
private createState;
|
|
384
|
+
private dispatch;
|
|
385
|
+
private emit;
|
|
386
|
+
/**
|
|
387
|
+
* Bring an outside write into the view.
|
|
388
|
+
*
|
|
389
|
+
* Compared as DOCUMENTS, never as strings: `<b>` comes back as `<strong>`, so a
|
|
390
|
+
* normalised string differs from what the consumer wrote while the documents
|
|
391
|
+
* are equal — and an equal document is left alone, selection and history
|
|
392
|
+
* included. A different one replaces the state wholesale, history with it,
|
|
393
|
+
* which is right for a form reset or a server load: undo back into content the
|
|
394
|
+
* app replaced would be wrong. The normalised form is never written back —
|
|
395
|
+
* that would mark the field dirty on load. A write that arrives mid-composition
|
|
396
|
+
* (IME) replaces the composition too: the model is the source of truth.
|
|
397
|
+
*/
|
|
398
|
+
private sync;
|
|
399
|
+
/**
|
|
400
|
+
* A new format whose value could not be read: keep the document, moved into
|
|
401
|
+
* the new format's schema — markdown's lacks underline, so that mark is
|
|
402
|
+
* dropped on the way. What is written from here on is in the new format.
|
|
403
|
+
*/
|
|
404
|
+
private switchFormat;
|
|
405
|
+
private replaceState;
|
|
406
|
+
private placeholderDecorations;
|
|
407
|
+
/**
|
|
408
|
+
* Mod-K opens the link panel. Its propagation stops here: `<wr-command-palette>`
|
|
409
|
+
* binds the same chord on the document, and `WrHotkey` deliberately does not
|
|
410
|
+
* skip an event another listener already handled.
|
|
411
|
+
*/
|
|
412
|
+
private onSurfaceKeydown;
|
|
413
|
+
private focusLinkInput;
|
|
414
|
+
/**
|
|
415
|
+
* Focus left the link panel for somewhere outside the control — Tab, Shift+Tab,
|
|
416
|
+
* a click elsewhere. The panel is not a focus trap, and left open it stays
|
|
417
|
+
* anchored to a control the user has left, whose next close would then pull
|
|
418
|
+
* focus back into the text. Closed with focus left where it went.
|
|
419
|
+
*/
|
|
420
|
+
private leaveLinkPanel;
|
|
421
|
+
/** Whether a node is part of this control: the host, or its link panel. */
|
|
422
|
+
private withinControl;
|
|
423
|
+
private inLinkPanel;
|
|
424
|
+
private warnRefused;
|
|
425
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrEditor, never>;
|
|
426
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrEditor, "wr-editor", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "toolbar": { "alias": "toolbar"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* @license
|
|
431
|
+
*
|
|
432
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
433
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
434
|
+
*/
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* The toolbar `<wr-editor>` draws when `toolbar` is not bound — every tool, in
|
|
438
|
+
* five groups. Exported so a toolbar can be built from it rather than retyped:
|
|
439
|
+
*
|
|
440
|
+
* ```ts
|
|
441
|
+
* readonly tools = WR_EDITOR_TOOLBAR.filter(tool => tool !== 'code');
|
|
442
|
+
* ```
|
|
443
|
+
*
|
|
444
|
+
* `underline` is dropped in `markdown` format whether it is listed or not.
|
|
445
|
+
*/
|
|
446
|
+
declare const WR_EDITOR_TOOLBAR: readonly WrEditorTool[];
|
|
447
|
+
|
|
448
|
+
export { WR_EDITOR_TOOLBAR, WrEditor };
|
|
449
|
+
export type { WrEditorFormat, WrEditorJson, WrEditorMarkJson, WrEditorTool, WrEditorValue };
|
package/types/ngwr-markdown.d.ts
CHANGED
|
@@ -475,7 +475,11 @@ declare function parseMarkdown(source: string, options?: WrMarkdownParseOptions)
|
|
|
475
475
|
*
|
|
476
476
|
* Whitespace and control characters are stripped before the scheme is read,
|
|
477
477
|
* because `java\nscript:` and `java script:` are the same URL to a browser and
|
|
478
|
-
* different strings to a naive check.
|
|
478
|
+
* different strings to a naive check. So are character references:
|
|
479
|
+
* `javascript:` has no scheme to this check, but a CommonMark renderer
|
|
480
|
+
* decodes it in a destination, so any markdown the URL is written into — an
|
|
481
|
+
* editor's output, say — hands a browser `javascript:`. The scheme is read from
|
|
482
|
+
* the decoded form; what comes back is still the URL as written.
|
|
479
483
|
*/
|
|
480
484
|
declare function safeMarkdownUrl(raw: string, kind: 'link' | 'image'): string | null;
|
|
481
485
|
/** Inline markdown to nodes. */
|
|
@@ -483,6 +487,61 @@ declare function parseInlines(source: string, options?: WrMarkdownParseOptions):
|
|
|
483
487
|
/** Text content of an inline tree — for `alt` and for heading slugs. */
|
|
484
488
|
declare function plainText(inlines: readonly WrMarkdownInline[]): string;
|
|
485
489
|
|
|
490
|
+
/**
|
|
491
|
+
* @license
|
|
492
|
+
*
|
|
493
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
494
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
495
|
+
*/
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* A block tree back to markdown — the inverse of {@link parseMarkdown}.
|
|
499
|
+
*
|
|
500
|
+
* **Written against this library's parser, not against CommonMark.** The two
|
|
501
|
+
* disagree in places (no setext headings, no indented code, no entities, a
|
|
502
|
+
* simplified reading of emphasis), and a serializer that escapes for the wrong
|
|
503
|
+
* dialect writes text that comes back as something else. So every escape here is
|
|
504
|
+
* derived from a question `parseMarkdown` actually asks — several of them by
|
|
505
|
+
* calling the parser's own predicates — and the spec holds the pair to one
|
|
506
|
+
* property: `parseMarkdown(serializeMarkdown(tree))` returns `tree`.
|
|
507
|
+
*
|
|
508
|
+
* **What markdown cannot say is normalised, never guessed at.** The output is the
|
|
509
|
+
* nearest document this dialect can express, and reading it back gives a tree
|
|
510
|
+
* that serializes to the same string. The losses, all of them structural:
|
|
511
|
+
*
|
|
512
|
+
* - Whitespace at the edges of a paragraph, heading or cell is dropped, and so is
|
|
513
|
+
* whitespace just inside `**` / `*` / `~~` — a delimiter next to a space is not
|
|
514
|
+
* a delimiter. A soft line break inside a text node becomes a space, and a hard
|
|
515
|
+
* break at the very end of a block (a trailing `\` stays literal) is dropped;
|
|
516
|
+
* inside a heading or a table cell every hard break becomes a space.
|
|
517
|
+
* - An empty paragraph, an empty list and a table with no header cell vanish.
|
|
518
|
+
* - Two adjacent lists of the same kind merge on the way back — there is no
|
|
519
|
+
* raw-HTML comment to put between them. A single-item list with one block
|
|
520
|
+
* cannot be loose, and a loose list nested in a tight one loosens it. Nesting
|
|
521
|
+
* deeper than the parser's twelve levels reads back as text.
|
|
522
|
+
* - Inline marks are rewritten in one canonical nesting — link outside strong
|
|
523
|
+
* outside strikethrough outside emphasis — which is also how a mark SET, the
|
|
524
|
+
* shape an editor holds, becomes a tree. An image carries no emphasis (none of
|
|
525
|
+
* it paints on an image); where an emphasis run touches a strong one and
|
|
526
|
+
* neither can switch to `_`, the emphasis is dropped rather than written as
|
|
527
|
+
* markup that reads back as literal asterisks.
|
|
528
|
+
* - A link or image whose URL `safeMarkdownUrl` refuses is written as its text,
|
|
529
|
+
* exactly as the renderer would show it. A destination is percent-encoded
|
|
530
|
+
* where this parser cannot carry a character (`<`, `>`, an unbalanced
|
|
531
|
+
* parenthesis, a `\` it would read as an escape — and `[`, `]`, a backtick for
|
|
532
|
+
* an image inside a link label), loses a tab or line break the way a browser's
|
|
533
|
+
* URL parser does, a title that cannot be delimited is dropped, and a link
|
|
534
|
+
* whose label is too long for the parser's label cap is written as plain text.
|
|
535
|
+
* - A fence's info string keeps its first word, lowercased, and `closed` is not
|
|
536
|
+
* written: a serialized fence is always closed. A tab that indents a line reads
|
|
537
|
+
* back as four spaces, as the parser expands it. Heading ids are the parser's,
|
|
538
|
+
* recomputed on the way back.
|
|
539
|
+
*
|
|
540
|
+
* @param blocks a block tree, typically from {@link parseMarkdown} or an editor
|
|
541
|
+
* @returns markdown, with no trailing newline; `''` for an empty tree
|
|
542
|
+
*/
|
|
543
|
+
declare function serializeMarkdown(blocks: readonly WrMarkdownBlock[]): string;
|
|
544
|
+
|
|
486
545
|
/**
|
|
487
546
|
* @license
|
|
488
547
|
*
|
|
@@ -541,5 +600,5 @@ declare function provideWrMarkdownHighlighter(highlighter: WrMarkdownHighlighter
|
|
|
541
600
|
*/
|
|
542
601
|
declare const WR_MARKDOWN_HIGHLIGHTER: InjectionToken<WrMarkdownHighlighter | null>;
|
|
543
602
|
|
|
544
|
-
export { WR_MARKDOWN_HIGHLIGHTER, WrMarkdown, WrMarkdownHighlight, parseInlines, parseMarkdown, plainText, provideWrMarkdownHighlighter, safeMarkdownUrl };
|
|
603
|
+
export { WR_MARKDOWN_HIGHLIGHTER, WrMarkdown, WrMarkdownHighlight, parseInlines, parseMarkdown, plainText, provideWrMarkdownHighlighter, safeMarkdownUrl, serializeMarkdown };
|
|
545
604
|
export type { WrHighlightLine, WrHighlightSpan, WrMarkdownAlign, WrMarkdownBlock, WrMarkdownCell, WrMarkdownHighlighter, WrMarkdownInline, WrMarkdownListItem, WrMarkdownParseOptions };
|
|
@@ -39,6 +39,10 @@ declare class WrTypography {
|
|
|
39
39
|
/**
|
|
40
40
|
* Color tone. `null` (default) keeps the variant's own color — the base
|
|
41
41
|
* dark for headings/body, medium for lead/caption, primary for links.
|
|
42
|
+
* Emphasis only: a tone never carries a state on its own. Six of the nine
|
|
43
|
+
* intents share one lightness, and `success` against `danger` is 1.05:1 as
|
|
44
|
+
* text, so the words have to name the state (`500 Server Error`, not a red
|
|
45
|
+
* `Request`) — or reach for `<wr-alert>`, which draws a glyph per type.
|
|
42
46
|
*/
|
|
43
47
|
readonly tone: _angular_core.InputSignal<WrTypographyTone | null>;
|
|
44
48
|
/** Horizontal alignment. */
|
package/types/ngwr-version.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ import { InjectionToken } from '@angular/core';
|
|
|
16
16
|
* Distinct from `Version` exported by `@angular/core`, which reports the
|
|
17
17
|
* loaded Angular runtime version (e.g. `'22.0.0'`), not ngwr's.
|
|
18
18
|
*/
|
|
19
|
-
declare const NGWR_VERSION = "14.
|
|
19
|
+
declare const NGWR_VERSION = "14.9.0";
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* @license
|
|
@@ -186,21 +186,37 @@
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
// Tones
|
|
189
|
+
// color-ok: a text ROLE, not a state — body copy. Like every tone it is
|
|
190
|
+
// emphasis only, and the words carry whatever state there is.
|
|
189
191
|
&--tone-dark {
|
|
190
192
|
color: var(--wr-color-on-surface);
|
|
191
193
|
}
|
|
194
|
+
// color-ok: a text ROLE, not a state — muted prose rather than body copy.
|
|
195
|
+
// Like every tone it is emphasis only.
|
|
192
196
|
&--tone-medium {
|
|
193
197
|
color: var(--wr-color-on-surface-muted);
|
|
194
198
|
}
|
|
199
|
+
// color-ok: emphasis only, never the sole carrier of a state — the words
|
|
200
|
+
// carry it, as "500 Server Error" does, because `success` against `danger` is
|
|
201
|
+
// 1.05:1 as text in light.
|
|
195
202
|
&--tone-primary {
|
|
196
203
|
color: var(--wr-color-primary-ink);
|
|
197
204
|
}
|
|
205
|
+
// color-ok: emphasis only, never the sole carrier of a state — the words
|
|
206
|
+
// carry it, as "500 Server Error" does, because `success` against `danger` is
|
|
207
|
+
// 1.05:1 as text in light.
|
|
198
208
|
&--tone-success {
|
|
199
209
|
color: var(--wr-color-success-ink);
|
|
200
210
|
}
|
|
211
|
+
// color-ok: emphasis only, never the sole carrier of a state — the words
|
|
212
|
+
// carry it, as "500 Server Error" does, because `success` against `danger` is
|
|
213
|
+
// 1.05:1 as text in light.
|
|
201
214
|
&--tone-warning {
|
|
202
215
|
color: var(--wr-color-warning-ink);
|
|
203
216
|
}
|
|
217
|
+
// color-ok: emphasis only, never the sole carrier of a state — the words
|
|
218
|
+
// carry it, as "500 Server Error" does, because `success` against `danger` is
|
|
219
|
+
// 1.05:1 as text in light.
|
|
204
220
|
&--tone-danger {
|
|
205
221
|
color: var(--wr-color-danger-ink);
|
|
206
222
|
}
|