ngwr 11.1.0 → 12.0.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 +7 -7
- package/burger/styles/_index.scss +1 -1
- package/button/styles/_index.scss +2 -2
- package/calendar/styles/_index.scss +32 -12
- package/calendar-heatmap/styles/_index.scss +20 -0
- package/carousel/styles/_index.scss +23 -1
- package/cascader/styles/_index.scss +15 -3
- package/checkbox/styles/_index.scss +2 -2
- package/circular-text/styles/_index.scss +11 -0
- package/collapse/styles/_index.scss +2 -2
- package/color-picker/styles/_index.scss +3 -3
- package/command-palette/styles/_index.scss +12 -0
- package/compare/styles/_index.scss +18 -2
- package/context-menu/styles/_index.scss +21 -2
- package/date-picker/styles/_index.scss +5 -5
- package/descriptions/styles/_index.scss +1 -1
- package/drag-drop/styles/_index.scss +28 -1
- package/drawer/styles/_index.scss +37 -0
- package/dropdown/styles/_index.scss +2 -2
- package/event-calendar/styles/_index.scss +67 -10
- package/fesm2022/ngwr-action-sheet-testing.mjs +313 -0
- package/fesm2022/ngwr-action-sheet-testing.mjs.map +1 -0
- package/fesm2022/ngwr-action-sheet.mjs +3 -3
- package/fesm2022/ngwr-affix.mjs +3 -3
- package/fesm2022/ngwr-alert.mjs +3 -3
- package/fesm2022/ngwr-anchor.mjs +3 -3
- package/fesm2022/ngwr-aurora.mjs +3 -3
- package/fesm2022/ngwr-avatar.mjs +3 -3
- package/fesm2022/ngwr-back-top.mjs +3 -3
- package/fesm2022/ngwr-badge.mjs +6 -6
- package/fesm2022/ngwr-bar-chart-testing.mjs +107 -0
- package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-bar-chart.mjs +3 -3
- package/fesm2022/ngwr-blur-text-testing.mjs +203 -0
- package/fesm2022/ngwr-blur-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-blur-text.mjs +18 -4
- package/fesm2022/ngwr-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow-testing.mjs +325 -0
- package/fesm2022/ngwr-border-glow-testing.mjs.map +1 -0
- package/fesm2022/ngwr-border-glow.mjs +4 -4
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +29 -17
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +3 -3
- package/fesm2022/ngwr-button.mjs +6 -6
- package/fesm2022/ngwr-calendar-heatmap-testing.mjs +95 -0
- package/fesm2022/ngwr-calendar-heatmap-testing.mjs.map +1 -0
- package/fesm2022/ngwr-calendar-heatmap.mjs +17 -5
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-testing.mjs +368 -0
- package/fesm2022/ngwr-calendar-testing.mjs.map +1 -0
- package/fesm2022/ngwr-calendar.mjs +228 -10
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +10 -10
- package/fesm2022/ngwr-card.mjs.map +1 -1
- package/fesm2022/ngwr-carousel.mjs +124 -24
- package/fesm2022/ngwr-carousel.mjs.map +1 -1
- package/fesm2022/ngwr-cascader.mjs +60 -5
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +14 -6
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text-testing.mjs +230 -0
- package/fesm2022/ngwr-circular-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-circular-text.mjs +4 -4
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +27 -7
- package/fesm2022/ngwr-click-spark.mjs.map +1 -1
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-color-picker-testing.mjs +452 -0
- package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -0
- package/fesm2022/ngwr-color-picker.mjs +126 -10
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +14 -5
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-confetti.mjs +31 -6
- package/fesm2022/ngwr-confetti.mjs.map +1 -1
- package/fesm2022/ngwr-config.mjs +9 -0
- package/fesm2022/ngwr-config.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu-testing.mjs +30 -11
- package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu.mjs +358 -48
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-counter.mjs +25 -9
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/{ngwr-date-adapter-fns.mjs → ngwr-date-adapters-fns.mjs} +37 -10
- package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -0
- package/fesm2022/{ngwr-date-adapter-luxon.mjs → ngwr-date-adapters-luxon.mjs} +5 -5
- package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -0
- package/fesm2022/ngwr-date-picker-testing.mjs +21 -85
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +119 -37
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/{ngwr-date-adapter.mjs → ngwr-date.mjs} +36 -10
- package/fesm2022/ngwr-date.mjs.map +1 -0
- package/fesm2022/ngwr-decrypt-text-testing.mjs +261 -0
- package/fesm2022/ngwr-decrypt-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-decrypt-text.mjs +9 -4
- package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-dialog.mjs +73 -18
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-divider.mjs +52 -5
- package/fesm2022/ngwr-divider.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart-testing.mjs +97 -0
- package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-donut-chart.mjs +7 -7
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +160 -11
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +156 -64
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown.mjs +58 -12
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-event-calendar-testing.mjs +446 -0
- package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -0
- package/fesm2022/ngwr-event-calendar.mjs +66 -28
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text-testing.mjs +220 -0
- package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-falling-text.mjs +75 -46
- package/fesm2022/ngwr-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload.mjs +3 -3
- package/fesm2022/ngwr-form.mjs +32 -15
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text-testing.mjs +134 -0
- package/fesm2022/ngwr-fuzzy-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-fuzzy-text.mjs +21 -11
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gauge-testing.mjs +86 -0
- package/fesm2022/ngwr-gauge-testing.mjs.map +1 -0
- package/fesm2022/ngwr-gauge.mjs +3 -3
- package/fesm2022/ngwr-glitch-text-testing.mjs +215 -0
- package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-glitch-text.mjs +7 -7
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text-testing.mjs +258 -0
- package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-gradient-text.mjs +4 -4
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-hotkey.mjs +24 -9
- package/fesm2022/ngwr-hotkey.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +87 -1
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +69 -1
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +26 -15
- package/fesm2022/ngwr-i18n.mjs.map +1 -1
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper-testing.mjs +200 -0
- package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -0
- package/fesm2022/ngwr-image-cropper.mjs +156 -11
- package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
- package/fesm2022/ngwr-input-number-testing.mjs +15 -10
- package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-number.mjs +89 -15
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp-testing.mjs +12 -6
- package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +24 -5
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +15 -15
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob-testing.mjs +220 -0
- package/fesm2022/ngwr-knob-testing.mjs.map +1 -0
- package/fesm2022/ngwr-knob.mjs +3 -3
- package/fesm2022/ngwr-layout.mjs +15 -15
- package/fesm2022/ngwr-lightbox-testing.mjs +223 -0
- package/fesm2022/ngwr-lightbox-testing.mjs.map +1 -0
- package/fesm2022/ngwr-lightbox.mjs +11 -4
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart-testing.mjs +119 -0
- package/fesm2022/ngwr-line-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-line-chart.mjs +73 -26
- package/fesm2022/ngwr-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +7 -7
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +7 -7
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown.mjs +66 -8
- package/fesm2022/ngwr-markdown.mjs.map +1 -1
- package/fesm2022/ngwr-marquee-testing.mjs +336 -0
- package/fesm2022/ngwr-marquee-testing.mjs.map +1 -0
- package/fesm2022/ngwr-marquee.mjs +4 -4
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-mention.mjs +108 -13
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +6 -6
- package/fesm2022/ngwr-meter-group-testing.mjs +100 -0
- package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -0
- package/fesm2022/ngwr-meter-group.mjs +3 -3
- package/fesm2022/ngwr-overlay.mjs +34 -7
- package/fesm2022/ngwr-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination-testing.mjs +6 -6
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +17 -13
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +39 -26
- package/fesm2022/ngwr-pipes.mjs.map +1 -1
- package/fesm2022/ngwr-platform.mjs +9 -9
- package/fesm2022/ngwr-popconfirm.mjs +6 -6
- package/fesm2022/ngwr-popover-testing.mjs +7 -2
- package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
- package/fesm2022/ngwr-popover.mjs +169 -33
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-progress.mjs +3 -3
- package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
- package/fesm2022/ngwr-qr.mjs +42 -5
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-radio.mjs +6 -6
- package/fesm2022/ngwr-rating.mjs +3 -3
- package/fesm2022/ngwr-result.mjs +21 -30
- package/fesm2022/ngwr-result.mjs.map +1 -1
- package/fesm2022/ngwr-rotating-text-testing.mjs +220 -0
- package/fesm2022/ngwr-rotating-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-rotating-text.mjs +4 -4
- package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented-testing.mjs +14 -1
- package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
- package/fesm2022/ngwr-segmented.mjs +29 -6
- package/fesm2022/ngwr-segmented.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +227 -43
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text-testing.mjs +237 -0
- package/fesm2022/ngwr-shiny-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-shiny-text.mjs +11 -9
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +31 -16
- package/fesm2022/ngwr-sidebar.mjs.map +1 -1
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs +143 -14
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline-testing.mjs +76 -0
- package/fesm2022/ngwr-sparkline-testing.mjs.map +1 -0
- package/fesm2022/ngwr-sparkline.mjs +3 -3
- package/fesm2022/ngwr-speed-dial-testing.mjs +281 -0
- package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -0
- package/fesm2022/ngwr-speed-dial.mjs +27 -12
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-splash-cursor-testing.mjs +89 -0
- package/fesm2022/ngwr-splash-cursor-testing.mjs.map +1 -0
- package/fesm2022/ngwr-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-split-text-testing.mjs +224 -0
- package/fesm2022/ngwr-split-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-split-text.mjs +31 -5
- package/fesm2022/ngwr-split-text.mjs.map +1 -1
- package/fesm2022/ngwr-splitter-testing.mjs +245 -0
- package/fesm2022/ngwr-splitter-testing.mjs.map +1 -0
- package/fesm2022/ngwr-splitter.mjs +3 -3
- package/fesm2022/ngwr-spotlight-card-testing.mjs +368 -0
- package/fesm2022/ngwr-spotlight-card-testing.mjs.map +1 -0
- package/fesm2022/ngwr-spotlight-card.mjs +7 -7
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-squircle.mjs +6 -6
- package/fesm2022/ngwr-star-border-testing.mjs +172 -0
- package/fesm2022/ngwr-star-border-testing.mjs.map +1 -0
- package/fesm2022/ngwr-star-border.mjs +4 -4
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +9 -9
- package/fesm2022/ngwr-stepper-testing.mjs +8 -8
- package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
- package/fesm2022/ngwr-stepper.mjs +33 -8
- package/fesm2022/ngwr-stepper.mjs.map +1 -1
- package/fesm2022/ngwr-storage.mjs +17 -5
- package/fesm2022/ngwr-storage.mjs.map +1 -1
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-table.mjs +110 -40
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-testing.mjs +11 -10
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +51 -11
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +3 -3
- package/fesm2022/ngwr-theme.mjs +181 -4
- package/fesm2022/ngwr-theme.mjs.map +1 -1
- package/fesm2022/ngwr-tilt-card-testing.mjs +190 -0
- package/fesm2022/ngwr-tilt-card-testing.mjs.map +1 -0
- package/fesm2022/ngwr-tilt-card.mjs +26 -8
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-toast.mjs +44 -15
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour-testing.mjs +173 -0
- package/fesm2022/ngwr-tour-testing.mjs.map +1 -0
- package/fesm2022/ngwr-tour.mjs +34 -10
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +3 -3
- package/fesm2022/ngwr-tree.mjs +36 -11
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter-testing.mjs +242 -0
- package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -0
- package/fesm2022/ngwr-typewriter.mjs +13 -5
- package/fesm2022/ngwr-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-utils.mjs +5 -2
- package/fesm2022/ngwr-utils.mjs.map +1 -1
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +4 -4
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves-testing.mjs +128 -0
- package/fesm2022/ngwr-waves-testing.mjs.map +1 -0
- package/fesm2022/ngwr-waves.mjs +4 -4
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window-testing.mjs +361 -0
- package/fesm2022/ngwr-window-testing.mjs.map +1 -0
- package/fesm2022/ngwr-window.mjs +175 -31
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/file-upload/styles/_index.scss +2 -2
- package/glitch-text/styles/_index.scss +27 -12
- package/i18n/en.json +71 -7
- package/i18n/ru.json +71 -7
- package/image-cropper/styles/_index.scss +19 -0
- package/input/styles/_index.scss +2 -2
- package/input-number/styles/_index.scss +2 -2
- package/input-otp/styles/_index.scss +9 -2
- package/knob/styles/_index.scss +1 -1
- package/lightbox/styles/_index.scss +16 -2
- package/line-chart/styles/_index.scss +28 -14
- package/list/styles/_index.scss +1 -1
- package/llms-full.txt +161 -19
- package/llms.txt +45 -10
- package/markdown/styles/_index.scss +3 -3
- package/mcp/api.js +6 -4
- package/mcp/catalog.js +40 -3
- package/mcp/providers.js +42 -0
- package/mcp/tools.js +22 -30
- package/meter-group/styles/_index.scss +1 -1
- package/overlay/styles/_index.scss +33 -1
- package/package.json +161 -12
- package/pagination/styles/_index.scss +23 -1
- package/popover/styles/_index.scss +16 -7
- package/progress/styles/_index.scss +1 -1
- package/radio/styles/_index.scss +2 -2
- package/rating/styles/_index.scss +1 -1
- package/schematics/collection.json +1 -1
- package/schematics/migrations/v12/index.js +65 -0
- package/schematics/migrations/v7/index.js +12 -1
- package/schematics/migrations/v8/index.js +10 -1
- package/schematics/migrations.json +5 -0
- package/schematics/ng-add/index.js +8 -3
- package/schematics/provider/index.js +80 -13
- package/schematics/use/index.js +9 -129
- package/schematics/use/rule.js +206 -0
- package/schematics/use/symbol-map.json +4 -4
- package/segmented/styles/_index.scss +14 -3
- package/select/styles/_index.scss +14 -2
- package/sidebar/styles/_index.scss +12 -10
- package/skills/ngwr/SKILL.md +117 -0
- package/skills/ngwr/references/catalog.md +212 -0
- package/skills/ngwr/references/setup.md +78 -0
- package/slider/styles/_index.scss +1 -1
- package/speed-dial/styles/_index.scss +1 -1
- package/stepper/styles/_index.scss +12 -3
- package/switch/styles/_index.scss +2 -2
- package/table/styles/_index.scss +61 -12
- package/tabs/styles/_index.scss +1 -1
- package/textarea/styles/_index.scss +1 -1
- package/theme/styles/_colors.scss +142 -56
- package/theme/styles/_dark.scss +46 -3
- package/theme/styles/_focus.scss +28 -5
- package/theme/styles/_mixins.scss +1 -1
- package/theme/styles/_variables.scss +67 -0
- package/transfer/styles/_index.scss +26 -3
- package/tree/styles/_index.scss +29 -6
- package/types/ngwr-action-sheet-testing.d.ts +260 -0
- package/types/ngwr-bar-chart-testing.d.ts +85 -0
- package/types/ngwr-blur-text-testing.d.ts +180 -0
- package/types/ngwr-blur-text.d.ts +20 -4
- package/types/ngwr-border-glow-testing.d.ts +219 -0
- package/types/ngwr-breadcrumbs.d.ts +17 -10
- package/types/ngwr-calendar-heatmap-testing.d.ts +79 -0
- package/types/ngwr-calendar-testing.d.ts +277 -0
- package/types/ngwr-calendar.d.ts +76 -0
- package/types/ngwr-carousel.d.ts +85 -6
- package/types/ngwr-cascader.d.ts +17 -0
- package/types/ngwr-checkbox.d.ts +13 -0
- package/types/ngwr-circular-text-testing.d.ts +196 -0
- package/types/ngwr-click-spark.d.ts +4 -0
- package/types/ngwr-color-picker-testing.d.ts +299 -0
- package/types/ngwr-color-picker.d.ts +34 -2
- package/types/ngwr-confetti.d.ts +8 -0
- package/types/ngwr-config.d.ts +10 -1
- package/types/ngwr-context-menu-testing.d.ts +24 -11
- package/types/ngwr-context-menu.d.ts +71 -1
- package/types/ngwr-counter.d.ts +1 -0
- package/types/{ngwr-date-adapter-fns.d.ts → ngwr-date-adapters-fns.d.ts} +33 -6
- package/types/{ngwr-date-adapter-luxon.d.ts → ngwr-date-adapters-luxon.d.ts} +1 -1
- package/types/ngwr-date-picker-testing.d.ts +17 -72
- package/types/ngwr-date-picker.d.ts +8 -4
- package/types/{ngwr-date-adapter.d.ts → ngwr-date.d.ts} +24 -5
- package/types/ngwr-decrypt-text-testing.d.ts +222 -0
- package/types/ngwr-dialog.d.ts +38 -1
- package/types/ngwr-divider.d.ts +25 -0
- package/types/ngwr-donut-chart-testing.d.ts +83 -0
- package/types/ngwr-donut-chart.d.ts +3 -3
- package/types/ngwr-drag-drop.d.ts +56 -2
- package/types/ngwr-drawer.d.ts +68 -5
- package/types/ngwr-dropdown.d.ts +9 -0
- package/types/ngwr-event-calendar-testing.d.ts +301 -0
- package/types/ngwr-event-calendar.d.ts +17 -8
- package/types/ngwr-falling-text-testing.d.ts +188 -0
- package/types/ngwr-falling-text.d.ts +1 -1
- package/types/ngwr-form.d.ts +12 -2
- package/types/ngwr-fuzzy-text-testing.d.ts +130 -0
- package/types/ngwr-gauge-testing.d.ts +71 -0
- package/types/ngwr-glitch-text-testing.d.ts +201 -0
- package/types/ngwr-gradient-text-testing.d.ts +186 -0
- package/types/ngwr-i18n.d.ts +13 -4
- package/types/ngwr-image-cropper-testing.d.ts +173 -0
- package/types/ngwr-image-cropper.d.ts +71 -5
- package/types/ngwr-input-number-testing.d.ts +15 -10
- package/types/ngwr-input-number.d.ts +44 -5
- package/types/ngwr-input-otp-testing.d.ts +12 -6
- package/types/ngwr-input-otp.d.ts +15 -1
- package/types/ngwr-knob-testing.d.ts +150 -0
- package/types/ngwr-lightbox-testing.d.ts +154 -0
- package/types/ngwr-lightbox.d.ts +6 -0
- package/types/ngwr-line-chart-testing.d.ts +93 -0
- package/types/ngwr-line-chart.d.ts +20 -3
- package/types/ngwr-markdown.d.ts +11 -0
- package/types/ngwr-marquee-testing.d.ts +280 -0
- package/types/ngwr-mention.d.ts +32 -0
- package/types/ngwr-meter-group-testing.d.ts +77 -0
- package/types/ngwr-overlay.d.ts +20 -1
- package/types/ngwr-pagination-testing.d.ts +4 -4
- package/types/ngwr-pipes.d.ts +1 -1
- package/types/ngwr-popover-testing.d.ts +7 -2
- package/types/ngwr-popover.d.ts +1 -0
- package/types/ngwr-result.d.ts +6 -0
- package/types/ngwr-rotating-text-testing.d.ts +191 -0
- package/types/ngwr-segmented-testing.d.ts +9 -0
- package/types/ngwr-segmented.d.ts +21 -1
- package/types/ngwr-select.d.ts +100 -6
- package/types/ngwr-shiny-text-testing.d.ts +165 -0
- package/types/ngwr-shiny-text.d.ts +4 -2
- package/types/ngwr-sidebar.d.ts +14 -5
- package/types/ngwr-slider.d.ts +84 -1
- package/types/ngwr-sparkline-testing.d.ts +69 -0
- package/types/ngwr-speed-dial-testing.d.ts +199 -0
- package/types/ngwr-speed-dial.d.ts +22 -3
- package/types/ngwr-splash-cursor-testing.d.ts +95 -0
- package/types/ngwr-split-text-testing.d.ts +209 -0
- package/types/ngwr-split-text.d.ts +21 -0
- package/types/ngwr-splitter-testing.d.ts +174 -0
- package/types/ngwr-spotlight-card-testing.d.ts +303 -0
- package/types/ngwr-star-border-testing.d.ts +135 -0
- package/types/ngwr-stepper-testing.d.ts +5 -5
- package/types/ngwr-stepper.d.ts +8 -0
- package/types/ngwr-storage.d.ts +1 -0
- package/types/ngwr-table.d.ts +114 -12
- package/types/ngwr-tabs-testing.d.ts +11 -10
- package/types/ngwr-tabs.d.ts +2 -0
- package/types/ngwr-theme.d.ts +82 -1
- package/types/ngwr-tilt-card-testing.d.ts +158 -0
- package/types/ngwr-tilt-card.d.ts +2 -0
- package/types/ngwr-toast.d.ts +14 -5
- package/types/ngwr-tour-testing.d.ts +143 -0
- package/types/ngwr-tour.d.ts +22 -4
- package/types/ngwr-tree.d.ts +12 -4
- package/types/ngwr-typewriter-testing.d.ts +211 -0
- package/types/ngwr-utils.d.ts +5 -2
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-waves-testing.d.ts +121 -0
- package/types/ngwr-window-testing.d.ts +263 -0
- package/types/ngwr-window.d.ts +66 -21
- package/typography/styles/_index.scss +1 -1
- package/window/styles/_index.scss +116 -42
- package/fesm2022/ngwr-date-adapter-fns.mjs.map +0 -1
- package/fesm2022/ngwr-date-adapter-luxon.mjs.map +0 -1
- package/fesm2022/ngwr-date-adapter.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
zoneless-ready, responsive, modular SCSS, fully tree-shakable. Built on top of
|
|
12
12
|
`@angular/cdk` for overlay, portal, and a11y primitives.
|
|
13
13
|
|
|
14
|
-
> **Status:** active development.
|
|
14
|
+
> **Status:** active development. v12 is the current major line (Angular 22 peer).
|
|
15
15
|
> Public API is stable across patch releases and still evolving between majors.
|
|
16
16
|
> [Open an issue](https://github.com/thekhegay/ngwr/issues/new)
|
|
17
17
|
> if something breaks or feels wrong.
|
|
@@ -55,7 +55,7 @@ npm install ngwr @angular/cdk
|
|
|
55
55
|
yarn add ngwr @angular/cdk
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
`@angular/cdk`
|
|
58
|
+
Beyond Angular itself, `@angular/cdk` and `@angular/forms` are the required peers — forms because every value control implements a Signal Forms interface. `@angular/router` is optional, needed only by the navigation components that take a `routerLink`. A stock `ng new` app already has all three. Add an icon set and a date library
|
|
59
59
|
only if you use them — `lucide` (or `feather-icons`) for the icon adapters, and
|
|
60
60
|
`date-fns` or `luxon` for the calendar / date-picker, which otherwise runs on a
|
|
61
61
|
built-in native `Date` adapter. The Quick start below registers a lucide icon, so
|
|
@@ -201,7 +201,7 @@ Plus [icon](https://ngwr.dev/reference/components/icon), the experimental [squir
|
|
|
201
201
|
|
|
202
202
|
### Animations
|
|
203
203
|
|
|
204
|
-
Animated UI effects. Mix of in-house components + ports of [reactbits.dev](https://www.reactbits.dev) — each port carries a credit chip on its docs page. Defaults are theme-aware (light + dark), and every component honors `prefers-reduced-motion
|
|
204
|
+
Animated UI effects. Mix of in-house components + ports of [reactbits.dev](https://www.reactbits.dev) — each port carries a credit chip on its docs page. Defaults are theme-aware (light + dark), and every component honors `prefers-reduced-motion` — the one exception is `spotlight-card`, whose highlight only tracks the pointer.
|
|
205
205
|
|
|
206
206
|
[aurora](https://ngwr.dev/animations/aurora), [blur-text](https://ngwr.dev/animations/blur-text), [border-glow](https://ngwr.dev/animations/border-glow), [circular-text](https://ngwr.dev/animations/circular-text), [click-spark](https://ngwr.dev/animations/click-spark), [confetti](https://ngwr.dev/animations/confetti), [decrypt-text](https://ngwr.dev/animations/decrypt-text), [falling-text](https://ngwr.dev/animations/falling-text), [fuzzy-text](https://ngwr.dev/animations/fuzzy-text), [glitch-text](https://ngwr.dev/animations/glitch-text), [gradient-text](https://ngwr.dev/animations/gradient-text), [marquee](https://ngwr.dev/animations/marquee), [rotating-text](https://ngwr.dev/animations/rotating-text), [shiny-text](https://ngwr.dev/animations/shiny-text), [splash-cursor](https://ngwr.dev/animations/splash-cursor), [split-text](https://ngwr.dev/animations/split-text), [spotlight-card](https://ngwr.dev/animations/spotlight-card), [star-border](https://ngwr.dev/animations/star-border), [tilt-card](https://ngwr.dev/animations/tilt-card), [typewriter](https://ngwr.dev/animations/typewriter), [waves](https://ngwr.dev/animations/waves).
|
|
207
207
|
|
|
@@ -235,7 +235,7 @@ Math (`clamp`, `round`), coercion (`numAttr`), css helpers (`resolveCssSize`, `g
|
|
|
235
235
|
- [Mobile & responsive](https://ngwr.dev/guides/mobile) — responsive overlays, touch targets & density, swipe gestures, safe-area insets, container-query layouts.
|
|
236
236
|
- [Typography](https://ngwr.dev/guides/typography) — `wrTypography` directive: headings, paragraphs, lists, links, code.
|
|
237
237
|
- [Icons](https://ngwr.dev/icons) — `ngwr/icon` registry. Use `svgIcon()` for any set that ships raw SVG files (Tabler, Phosphor, Heroicons, Iconoir, Radix, Bootstrap, or your designer's own), plus thin adapters for Lucide (`ngwr/icon/adapters/lucide`) and Feather (`ngwr/icon/adapters/feather`), whose packages don't ship SVGs.
|
|
238
|
-
- **Date adapters** — `ngwr/date
|
|
238
|
+
- **Date adapters** — `ngwr/date` (native `Date`, no extra package), `ngwr/date/adapters/fns`, `ngwr/date/adapters/luxon`. Wire one with `provideWrDateAdapter()` — plus `{ adapter: WrDateFnsAdapter }` / `{ adapter: WrLuxonAdapter }` for the library-backed ones — to power calendar + every mode of date-picker.
|
|
239
239
|
- **Component defaults** — `ngwr/config`. `provideWrConfig({ button: { size: 'sm' } })` sets what a component falls back to when a template says nothing; a bound value always wins, and a bound `false` beats a configured `true`, so a config never has to be escaped. [Reference](https://ngwr.dev/start/configuration).
|
|
240
240
|
|
|
241
241
|
## Highlights
|
|
@@ -243,13 +243,13 @@ Math (`clamp`, `round`), coercion (`numAttr`), css helpers (`resolveCssSize`, `g
|
|
|
243
243
|
- **Standalone & signals-first.** Every component is standalone and uses `input()` / `model()` / `output()` / `signal()` / `computed()`. Zoneless-ready.
|
|
244
244
|
- **Signal Forms native.** Every value control implements `FormValueControl` / `FormCheckboxControl`, so `[formField]` binds straight through — there is no `ControlValueAccessor` in the library at all. `[(ngModel)]` and reactive forms keep working through Angular's bridge, and every control also works standalone via `[(value)]` / `[(checked)]`.
|
|
245
245
|
- **CDK-powered.** Overlays, portals, and a11y come from `@angular/cdk`. We add `provideWrOverlay()` so NGWR overlays never collide with other CDK consumers (Material, NG-ZORRO, etc.).
|
|
246
|
-
- **Mobile & responsive.** Overlays collapse to bottom-sheets on small screens (`provideWrResponsiveOverlays()`), touch targets grow to ≥44px on coarse pointers, a `touch` density preset enlarges
|
|
246
|
+
- **Mobile & responsive.** Overlays collapse to bottom-sheets on small screens (`provideWrResponsiveOverlays()`), touch targets grow to ≥44px on coarse pointers, a `touch` density preset enlarges the nine control families that read the multipliers, and drawer / lightbox / toast / carousel respond to swipe gestures. Fixed surfaces respect `env(safe-area-inset-*)`, and layout components (`descriptions`, `stepper`, `page-header`, `toolbar`, `pagination`, `table`) reflow to their container via container queries. [Guide](https://ngwr.dev/guides/mobile).
|
|
247
247
|
- **Table, batteries included.** `wr-table` covers column pinning / resizing / drag-reorder, row selection, expandable rows, grouping, tree rows (`childrenKey` — the forest flattens into the same `<tbody>`, so pinning and cell templates keep working at every depth, and the table announces a `treegrid`), summary rows, CSV export (`exportCsv()`, dependency-free RFC 4180) and a virtualized body — all opt-in inputs on the one component. Excel (`.xlsx`) export is deliberately not shipped: it would mean a third-party dependency.
|
|
248
|
-
- **Tree-shakable.**
|
|
248
|
+
- **Tree-shakable.** 202 separate ng-packagr entry points — import only what you use. Per-component FESM bundles are small: a median of ~4 KB gzipped, the heaviest (`ngwr/markdown`) ~23 KB. Every runtime bundle together gzips to ~690 KB — the 70 `ngwr/<name>/testing` harnesses aside, since they never reach an app bundle — but real apps pull a handful of entries. The only runtime dependency is `tslib`.
|
|
249
249
|
- **Modular SCSS.** Component styles are scoped through CSS custom properties. Theme tokens live in `ngwr/theme`; utilities (`grid`, `reset`) and the breakpoints SCSS API are opt-in.
|
|
250
250
|
- **Tree-shaken icons.** `provideWrIcons(lucideIcons({ plus: Plus }))` registers only the icons you actually import. Dev-mode validation warns about unregistered icons.
|
|
251
251
|
- **Reactbits ports, dependency-free.** All animation ports are reimplemented with vanilla DOM + Web Animations API / `IntersectionObserver` / `requestAnimationFrame` / raw WebGL — no GSAP, no `motion/react`, no `matter-js`, no `ogl`.
|
|
252
|
-
- **Motion respects the OS.** Every animation component short-circuits to its final state under `prefers-reduced-motion
|
|
252
|
+
- **Motion respects the OS.** Every animation component short-circuits to its final state under `prefers-reduced-motion`, except `spotlight-card`, which animates nothing on its own — its highlight follows the cursor.
|
|
253
253
|
- **Legible to agents.** Every docs page also serves as markdown at the same URL plus `.md` — [reference/components/select.md](https://ngwr.dev/reference/components/select.md) is that page's prose, code samples and API tables without the site chrome. The whole catalog is at [llms-full.txt](https://ngwr.dev/llms-full.txt), a quick-ref at [llms.txt](https://ngwr.dev/llms.txt).
|
|
254
254
|
|
|
255
255
|
### MCP server
|
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
&:active {
|
|
48
|
-
--wr-btn-bg:
|
|
48
|
+
--wr-btn-bg: var(--wr-color-fill-strong);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
&[disabled],
|
|
52
52
|
&:disabled {
|
|
53
53
|
cursor: default;
|
|
54
54
|
pointer-events: none;
|
|
55
|
-
opacity:
|
|
55
|
+
opacity: var(--wr-disabled-opacity);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
&__icon {
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
&:focus-visible {
|
|
64
|
-
outline:
|
|
65
|
-
|
|
64
|
+
outline: var(--wr-focus-ring-width) solid var(--wr-calendar-accent);
|
|
65
|
+
outline-offset: 2px;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
&:disabled {
|
|
@@ -93,13 +93,24 @@
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
&:focus-visible {
|
|
96
|
-
outline:
|
|
97
|
-
|
|
96
|
+
outline: var(--wr-focus-ring-width) solid var(--wr-calendar-accent);
|
|
97
|
+
outline-offset: 2px;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
&:disabled {
|
|
101
101
|
cursor: not-allowed;
|
|
102
|
-
opacity:
|
|
102
|
+
opacity: var(--wr-disabled-opacity);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// `__header` is a plain flex row, so it already mirrors: under `dir="rtl"`
|
|
106
|
+
// the prev button lays out at the right edge. Its chevron is drawn pointing
|
|
107
|
+
// physically left, though, so it ends up aiming at the month it moves AWAY
|
|
108
|
+
// from. Turn the glyphs around with the row, the same way the pagination and
|
|
109
|
+
// carousel arrows do — "previous" is the inline start in both directions.
|
|
110
|
+
// Scoped to `__nav`, the two icon-only buttons: `__label` sits between them
|
|
111
|
+
// and is text, which must not mirror.
|
|
112
|
+
[dir='rtl'] & svg {
|
|
113
|
+
transform: scaleX(-1);
|
|
103
114
|
}
|
|
104
115
|
}
|
|
105
116
|
|
|
@@ -163,8 +174,8 @@
|
|
|
163
174
|
}
|
|
164
175
|
|
|
165
176
|
&:focus-visible {
|
|
166
|
-
outline:
|
|
167
|
-
|
|
177
|
+
outline: var(--wr-focus-ring-width) solid var(--wr-calendar-accent);
|
|
178
|
+
outline-offset: -2px;
|
|
168
179
|
}
|
|
169
180
|
|
|
170
181
|
// States — order matters; later rules override earlier ones.
|
|
@@ -200,7 +211,16 @@
|
|
|
200
211
|
&:disabled {
|
|
201
212
|
color: var(--wr-calendar-muted);
|
|
202
213
|
cursor: not-allowed;
|
|
203
|
-
|
|
214
|
+
// Fainter than the shared token, and a neighbour is the reason: a day from
|
|
215
|
+
// the adjacent month is still navigable and sits at 0.55 just above, so a
|
|
216
|
+
// DISABLED day has to read as less available than that one or the two swap
|
|
217
|
+
// meanings. Deliberately an absolute, calibrated against that hard-coded
|
|
218
|
+
// 0.55 rather than scaled off the shared token — floating with a consumer
|
|
219
|
+
// retune is exactly what would let the two cross. Written as an override of
|
|
220
|
+
// the token anyway, because `_variables.scss` asks that exceptions take
|
|
221
|
+
// that form so they stay greppable and argued.
|
|
222
|
+
--wr-disabled-opacity: 0.45;
|
|
223
|
+
opacity: var(--wr-disabled-opacity);
|
|
204
224
|
}
|
|
205
225
|
}
|
|
206
226
|
|
|
@@ -239,8 +259,8 @@
|
|
|
239
259
|
}
|
|
240
260
|
|
|
241
261
|
&:focus-visible {
|
|
242
|
-
outline:
|
|
243
|
-
|
|
262
|
+
outline: var(--wr-focus-ring-width) solid var(--wr-calendar-accent);
|
|
263
|
+
outline-offset: -2px;
|
|
244
264
|
}
|
|
245
265
|
|
|
246
266
|
&--current:not(.wr-calendar__chip--selected) {
|
|
@@ -260,12 +280,12 @@
|
|
|
260
280
|
&:disabled {
|
|
261
281
|
color: var(--wr-calendar-muted);
|
|
262
282
|
cursor: not-allowed;
|
|
263
|
-
opacity:
|
|
283
|
+
opacity: var(--wr-disabled-opacity);
|
|
264
284
|
}
|
|
265
285
|
}
|
|
266
286
|
|
|
267
287
|
&--disabled {
|
|
268
288
|
pointer-events: none;
|
|
269
|
-
opacity:
|
|
289
|
+
opacity: var(--wr-disabled-opacity);
|
|
270
290
|
}
|
|
271
291
|
}
|
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
.wr-calendar-heatmap {
|
|
4
4
|
display: inline-block;
|
|
5
|
+
// A year is 53 columns of a FIXED cell size, so the grid has no reflow in it:
|
|
6
|
+
// its intrinsic width is ~731px whatever the container, and without a cap it
|
|
7
|
+
// escaped the card it sits in and gave the whole document a 397px horizontal
|
|
8
|
+
// scroll at 375px. Cap it and scroll the grid instead — the same answer
|
|
9
|
+
// `.wr-table__scroll` and `.wr-tabs__strip` already give. The cap also covers
|
|
10
|
+
// the plain block-parent case, where shrink-to-fit alone would still hand the
|
|
11
|
+
// element its full 731px.
|
|
12
|
+
max-width: 100%;
|
|
13
|
+
overflow-x: auto;
|
|
14
|
+
// `overflow-x: auto` alone reserves room for a vertical scrollbar in browsers
|
|
15
|
+
// without overlay bars — a stray bar down the side of a grid that is never
|
|
16
|
+
// taller than its content. Pin the y axis; the bottom row's `:hover` scale is
|
|
17
|
+
// given its room on `&__cells` below, since that is where the cell size is
|
|
18
|
+
// legible.
|
|
19
|
+
overflow-y: hidden;
|
|
5
20
|
font-family: var(--wr-font-family-base);
|
|
6
21
|
color: var(--wr-color-on-surface-muted);
|
|
7
22
|
|
|
@@ -54,6 +69,11 @@
|
|
|
54
69
|
&__cells {
|
|
55
70
|
grid-area: cells;
|
|
56
71
|
grid-template-rows: repeat(7, var(--wr-heatmap-cell-size));
|
|
72
|
+
// The bottom row sits on the host's own edge, and the host now clips its
|
|
73
|
+
// block axis (see above) — so the 40% a hovered cell grows by, half of it
|
|
74
|
+
// below the row, had nowhere to go. Reserve that half. Scaled from the cell
|
|
75
|
+
// size rather than written as a length, because the size is an input.
|
|
76
|
+
padding-block-end: calc(var(--wr-heatmap-cell-size) * 0.2);
|
|
57
77
|
}
|
|
58
78
|
|
|
59
79
|
&__cell {
|
|
@@ -10,7 +10,15 @@
|
|
|
10
10
|
overflow: hidden;
|
|
11
11
|
font-family: var(--wr-font-family-base);
|
|
12
12
|
|
|
13
|
+
// The host is the sized box — the documented recipe gives it a `height` or an
|
|
14
|
+
// `aspect-ratio` — but the height has to be HANDED DOWN, one definite parent
|
|
15
|
+
// at a time, or the chain collapses to the tallest slide's content and a
|
|
16
|
+
// `16 / 9` carousel paints a text-height strip over its own empty frame. The
|
|
17
|
+
// arrows and dots anchor to the host, so they kept floating in that void.
|
|
18
|
+
// Inert for an unsized carousel: a percentage against an auto-height parent
|
|
19
|
+
// resolves to auto, which is what these boxes already did.
|
|
13
20
|
&__viewport {
|
|
21
|
+
height: 100%;
|
|
14
22
|
overflow: hidden;
|
|
15
23
|
// Capture horizontal swipe-nav; let vertical scrolling pass through.
|
|
16
24
|
touch-action: pan-y;
|
|
@@ -18,6 +26,7 @@
|
|
|
18
26
|
|
|
19
27
|
&__track {
|
|
20
28
|
display: flex;
|
|
29
|
+
height: 100%;
|
|
21
30
|
transition: transform var(--wr-duration-slow) var(--wr-ease-out);
|
|
22
31
|
will-change: transform;
|
|
23
32
|
}
|
|
@@ -27,10 +36,15 @@
|
|
|
27
36
|
flex: 0 0 100%;
|
|
28
37
|
min-width: 0;
|
|
29
38
|
display: block;
|
|
39
|
+
height: 100%;
|
|
30
40
|
|
|
41
|
+
// The slide's own child is what a consumer writes `height: 100%` on (the
|
|
42
|
+
// library's demo does), and that only resolves once every box above it is
|
|
43
|
+
// definite — see the note on `__viewport`.
|
|
31
44
|
> * {
|
|
32
45
|
display: block;
|
|
33
46
|
width: 100%;
|
|
47
|
+
height: 100%;
|
|
34
48
|
}
|
|
35
49
|
|
|
36
50
|
img {
|
|
@@ -99,7 +113,15 @@
|
|
|
99
113
|
border: 0;
|
|
100
114
|
border-radius: 50%;
|
|
101
115
|
background: rgba(var(--wr-color-surface-rgb), 0.55);
|
|
102
|
-
|
|
116
|
+
// The dot's fill IS the surface, so this ring is the whole of its visible
|
|
117
|
+
// boundary — and WCAG 1.4.11 asks 3:1 of the thing that identifies a
|
|
118
|
+
// control and its state. Fixed black could never carry that in both
|
|
119
|
+
// themes: on the dark canvas it measured 1.02:1 (black on near-black) and
|
|
120
|
+
// even in light only 1.41:1. `on-surface` flips with the theme the way the
|
|
121
|
+
// `--wr-shadow-*` family does, and 0.55 is the alpha that clears the bar on
|
|
122
|
+
// the bare canvas in both — measured 4.00:1 light, 5.35:1 dark. Same shape
|
|
123
|
+
// as `.wr-color-picker__swatch`'s ring, which learned this first.
|
|
124
|
+
box-shadow: 0 0 0 1px rgba(var(--wr-color-on-surface-rgb), 0.55);
|
|
103
125
|
cursor: pointer;
|
|
104
126
|
transition:
|
|
105
127
|
width var(--wr-transition-base),
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
&--disabled {
|
|
23
23
|
--wr-cascader-color: var(--wr-color-on-surface-muted);
|
|
24
|
-
--wr-cascader-bg:
|
|
24
|
+
--wr-cascader-bg: var(--wr-color-fill);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
// Sizes — trigger on the control contract (sm 22 / md 30 / lg 36).
|
|
@@ -52,7 +52,12 @@
|
|
|
52
52
|
color: var(--wr-cascader-color);
|
|
53
53
|
border: 1px solid var(--wr-cascader-border);
|
|
54
54
|
border-radius: var(--wr-cascader-radius);
|
|
55
|
-
|
|
55
|
+
// Density-multiplied like select / input / textarea / button: the trigger
|
|
56
|
+
// sources the same `--wr-control-padding-*` contract they do, so without
|
|
57
|
+
// the multiplier it held its md height (30px) while its neighbours grew —
|
|
58
|
+
// measured at 35.59px for input / select under `touch`.
|
|
59
|
+
padding: calc(var(--wr-cascader-padding-y) * var(--wr-density-y, 1))
|
|
60
|
+
calc(var(--wr-cascader-padding-x) * var(--wr-density-x, 1));
|
|
56
61
|
font-family: var(--wr-font-family-base);
|
|
57
62
|
font-size: var(--wr-cascader-font-size);
|
|
58
63
|
line-height: var(--wr-cascader-line-height);
|
|
@@ -193,7 +198,7 @@
|
|
|
193
198
|
&--disabled {
|
|
194
199
|
color: var(--wr-color-on-surface-muted);
|
|
195
200
|
cursor: not-allowed;
|
|
196
|
-
opacity:
|
|
201
|
+
opacity: var(--wr-disabled-opacity);
|
|
197
202
|
|
|
198
203
|
&:hover {
|
|
199
204
|
background: transparent;
|
|
@@ -213,6 +218,13 @@
|
|
|
213
218
|
flex: 0 0 auto;
|
|
214
219
|
color: var(--wr-color-on-surface-muted);
|
|
215
220
|
}
|
|
221
|
+
|
|
222
|
+
// The panel is a flex row, so its columns cascade toward the inline end —
|
|
223
|
+
// leftward under `dir="rtl"`. The branch arrow is drawn pointing physically
|
|
224
|
+
// right, so turn it around with them, the way the carousel's arrows do.
|
|
225
|
+
[dir='rtl'] & .wr-cascader__opt-arrow {
|
|
226
|
+
transform: scaleX(-1);
|
|
227
|
+
}
|
|
216
228
|
}
|
|
217
229
|
|
|
218
230
|
// Touch pointers: grow the clear button and make the column option rows ~44px
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
white-space: nowrap;
|
|
38
38
|
|
|
39
39
|
&:focus-visible + .wr-checkbox__box {
|
|
40
|
-
|
|
40
|
+
@include theme.focus-ring;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
&--disabled {
|
|
124
124
|
--wr-checkbox-color: var(--wr-color-on-surface-muted);
|
|
125
125
|
pointer-events: none;
|
|
126
|
-
opacity:
|
|
126
|
+
opacity: var(--wr-disabled-opacity);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -24,6 +24,17 @@
|
|
|
24
24
|
user-select: none;
|
|
25
25
|
transition: transform 0.6s var(--wr-ease-spring);
|
|
26
26
|
|
|
27
|
+
// The accessible copy of the string — the ring itself is `aria-hidden`.
|
|
28
|
+
&__sr-only {
|
|
29
|
+
position: absolute;
|
|
30
|
+
width: 1px;
|
|
31
|
+
height: 1px;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
clip: rect(0 0 0 0);
|
|
34
|
+
clip-path: inset(50%);
|
|
35
|
+
white-space: nowrap;
|
|
36
|
+
}
|
|
37
|
+
|
|
27
38
|
&__spin {
|
|
28
39
|
position: absolute;
|
|
29
40
|
inset: 0;
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
transition: background var(--wr-transition-base);
|
|
36
36
|
|
|
37
37
|
&:hover:not(:disabled) {
|
|
38
|
-
background:
|
|
38
|
+
background: var(--wr-color-fill);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
&:disabled {
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
|
|
84
84
|
&--disabled {
|
|
85
85
|
--wr-collapse-color: var(--wr-color-on-surface-muted);
|
|
86
|
-
opacity:
|
|
86
|
+
opacity: var(--wr-disabled-opacity);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
&:disabled {
|
|
194
|
-
background:
|
|
194
|
+
background: var(--wr-color-fill);
|
|
195
195
|
color: var(--wr-color-on-surface-muted);
|
|
196
196
|
cursor: not-allowed;
|
|
197
197
|
}
|
|
@@ -247,13 +247,13 @@
|
|
|
247
247
|
|
|
248
248
|
&:disabled {
|
|
249
249
|
cursor: not-allowed;
|
|
250
|
-
opacity:
|
|
250
|
+
opacity: var(--wr-disabled-opacity);
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
&--disabled {
|
|
255
255
|
pointer-events: none;
|
|
256
|
-
opacity:
|
|
256
|
+
opacity: var(--wr-disabled-opacity);
|
|
257
257
|
}
|
|
258
258
|
}
|
|
259
259
|
|
|
@@ -127,6 +127,18 @@
|
|
|
127
127
|
color: var(--wr-color-primary);
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
// The keycap is the one thing on the active row that does NOT want the tint under
|
|
131
|
+
// it. `--wr-color-hover` is translucent, so on a plain row it composites to a light
|
|
132
|
+
// grey and the muted label reads at 4.63:1 — but over `--wr-color-primary-soft` it
|
|
133
|
+
// composites to #dce4f1, where the same label measures 4.17:1 and fails AA. Neither
|
|
134
|
+
// shipped gate can see it: the palette has to be OPEN with a row active, which is a
|
|
135
|
+
// state that walks past prerendered HTML and a page at rest alike. Putting the chip
|
|
136
|
+
// back on the surface restores the pairing the muted role is calibrated for, and
|
|
137
|
+
// keeps the chip reading as a keycap rather than as part of the highlight.
|
|
138
|
+
&__option--active &__option-shortcut {
|
|
139
|
+
background: var(--wr-color-surface);
|
|
140
|
+
}
|
|
141
|
+
|
|
130
142
|
&__option-body {
|
|
131
143
|
flex: 1 1 auto;
|
|
132
144
|
min-width: 0;
|
|
@@ -12,9 +12,25 @@
|
|
|
12
12
|
height: 100%;
|
|
13
13
|
outline: 0;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
// The surface is `role="slider"` and the component's only keyboard
|
|
16
|
+
// affordance, but it is coterminous with the host — and rounding a
|
|
17
|
+
// before/after comparator means `overflow: hidden` there, which discards an
|
|
18
|
+
// outset ring whole. Insetting the offset is not enough either: the
|
|
19
|
+
// projected layers paint over the surface's own outline. So the ring is a
|
|
20
|
+
// pseudo-element stacked above `&__layers`, drawn inward from the edge.
|
|
21
|
+
&:focus-visible::after {
|
|
22
|
+
content: '';
|
|
23
|
+
position: absolute;
|
|
24
|
+
inset: 0;
|
|
25
|
+
z-index: 2;
|
|
26
|
+
pointer-events: none;
|
|
17
27
|
border-radius: var(--wr-border-radius-sm);
|
|
28
|
+
outline: var(--wr-focus-ring-width) solid var(--wr-focus-ring-color);
|
|
29
|
+
// A negative offset equal to the width puts the stroke flush inside the
|
|
30
|
+
// edge; the halo then sits just inside it, mirroring the outset ring.
|
|
31
|
+
outline-offset: calc(-1 * var(--wr-focus-ring-width));
|
|
32
|
+
box-shadow: inset 0 0 0 calc(var(--wr-focus-ring-width) + var(--wr-focus-ring-offset))
|
|
33
|
+
var(--wr-focus-ring-halo);
|
|
18
34
|
}
|
|
19
35
|
}
|
|
20
36
|
|
|
@@ -72,12 +72,22 @@
|
|
|
72
72
|
background: var(--wr-color-primary-soft);
|
|
73
73
|
// The item label inherits this, so it is text on the `-soft` tint: `-ink`.
|
|
74
74
|
color: var(--wr-color-primary-ink);
|
|
75
|
-
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Hover and focus paint the same tint, so the tint alone cannot say which row
|
|
78
|
+
// Enter fires — with the keyboard on one row and the pointer resting on
|
|
79
|
+
// another, both light up identically. And the menu focuses its first enabled
|
|
80
|
+
// row on open and roves with the arrows, so this is the ordinary keyboard
|
|
81
|
+
// state rather than an edge case. Same ring as `.wr-dropdown-item`, and it
|
|
82
|
+
// fits: the menu's 0.3125rem padding clears the 2px offset plus the 2px
|
|
83
|
+
// outline with a pixel to spare, so no negative offset is needed here.
|
|
84
|
+
&:focus-visible {
|
|
85
|
+
@include theme.focus-ring;
|
|
76
86
|
}
|
|
77
87
|
|
|
78
88
|
&--disabled {
|
|
79
89
|
color: var(--wr-color-on-surface-muted);
|
|
80
|
-
opacity:
|
|
90
|
+
opacity: var(--wr-disabled-opacity);
|
|
81
91
|
pointer-events: none;
|
|
82
92
|
}
|
|
83
93
|
|
|
@@ -107,6 +117,15 @@
|
|
|
107
117
|
&--has-submenu:focus-visible &__chevron {
|
|
108
118
|
color: var(--wr-color-primary);
|
|
109
119
|
}
|
|
120
|
+
|
|
121
|
+
// The submenu pane cascades toward the inline end, so under `dir="rtl"` it
|
|
122
|
+
// opens to the LEFT — `context-menu-item.ts` swaps the key that opens it for
|
|
123
|
+
// the same reason. The chevron is drawn pointing physically right, so turn it
|
|
124
|
+
// around with the panes, the way the cascader's branch arrow does. Scoped to
|
|
125
|
+
// the chevron: the label beside it must not mirror.
|
|
126
|
+
[dir='rtl'] &__chevron {
|
|
127
|
+
transform: scaleX(-1);
|
|
128
|
+
}
|
|
110
129
|
}
|
|
111
130
|
|
|
112
131
|
// Horizontal separator between groups of items.
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
&:disabled {
|
|
24
24
|
cursor: not-allowed;
|
|
25
|
-
opacity:
|
|
25
|
+
opacity: var(--wr-disabled-opacity);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
|
|
47
47
|
&--disabled {
|
|
48
48
|
.wr-date-range-picker__separator {
|
|
49
|
-
opacity:
|
|
49
|
+
opacity: var(--wr-disabled-opacity);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
|
|
128
128
|
&:disabled {
|
|
129
129
|
cursor: not-allowed;
|
|
130
|
-
opacity:
|
|
130
|
+
opacity: var(--wr-disabled-opacity);
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
&:disabled {
|
|
165
|
-
background:
|
|
165
|
+
background: var(--wr-color-fill);
|
|
166
166
|
color: var(--wr-time-picker-muted);
|
|
167
167
|
cursor: not-allowed;
|
|
168
168
|
}
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
&--disabled {
|
|
199
|
-
opacity:
|
|
199
|
+
opacity: var(--wr-disabled-opacity);
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
|
|
@@ -39,6 +39,33 @@
|
|
|
39
39
|
&:active {
|
|
40
40
|
cursor: grabbing;
|
|
41
41
|
}
|
|
42
|
+
|
|
43
|
+
// Every row is a tab stop (the keyboard reorder path), so every row needs a
|
|
44
|
+
// ring. Included here rather than added to `theme/_focus.scss`, the same
|
|
45
|
+
// choice `wr-list` made for its own rows.
|
|
46
|
+
&:focus-visible {
|
|
47
|
+
@include theme.focus-ring;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Picked up by the keyboard — the standing counterpart of `:active`, which
|
|
51
|
+
// only lasts while a pointer is held down.
|
|
52
|
+
&--grabbed {
|
|
53
|
+
cursor: grabbing;
|
|
54
|
+
box-shadow: 0 6px 12px rgba(var(--wr-color-backdrop-rgb), 0.22);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// The key model and the position announcements: read out, never drawn.
|
|
59
|
+
&__sr-only {
|
|
60
|
+
position: absolute;
|
|
61
|
+
width: 1px;
|
|
62
|
+
height: 1px;
|
|
63
|
+
padding: 0;
|
|
64
|
+
margin: -1px;
|
|
65
|
+
overflow: hidden;
|
|
66
|
+
clip: rect(0, 0, 0, 0);
|
|
67
|
+
white-space: nowrap;
|
|
68
|
+
border: 0;
|
|
42
69
|
}
|
|
43
70
|
}
|
|
44
71
|
|
|
@@ -96,7 +123,7 @@
|
|
|
96
123
|
.wr-sortable-list .cdk-drag-placeholder {
|
|
97
124
|
opacity: 0.35;
|
|
98
125
|
// Subtle dashed outline so users see where the item came from.
|
|
99
|
-
background:
|
|
126
|
+
background: var(--wr-color-fill-strong);
|
|
100
127
|
border-radius: var(--wr-border-radius-base);
|
|
101
128
|
outline: 1px dashed rgba(var(--wr-color-on-surface-rgb), 0.25);
|
|
102
129
|
outline-offset: -1px;
|
|
@@ -26,6 +26,33 @@
|
|
|
26
26
|
height: 100vh;
|
|
27
27
|
height: 100dvh;
|
|
28
28
|
}
|
|
29
|
+
// No title to sit beside, so the corner chrome needs its own room.
|
|
30
|
+
//
|
|
31
|
+
// `__close` is absolutely positioned at an offset chosen to centre it on the
|
|
32
|
+
// TITLE's first line. A drawer given only content — the shape a navigation
|
|
33
|
+
// panel takes, `<wr-drawer><nav /></wr-drawer>` — starts its content at the top
|
|
34
|
+
// and runs it under the button: the showcase's icon-set panel had the × over
|
|
35
|
+
// the first menu row by 24x16 px, with `elementFromPoint` returning the button,
|
|
36
|
+
// so that corner of the row could not be clicked. Reserve the strip rather than
|
|
37
|
+
// move the button, which would make titled drawers look different for no reason.
|
|
38
|
+
//
|
|
39
|
+
// Written out rather than nested under `.wr-drawer__panel`: the first attempt
|
|
40
|
+
// put it beside `&__close`, whose parent is `.wr-drawer`, so it compiled to
|
|
41
|
+
// `.wr-drawer--untitled` and matched nothing. The class the component writes is
|
|
42
|
+
// on the PANEL.
|
|
43
|
+
//
|
|
44
|
+
// **3.25rem, and the number comes from the TOUCH TARGET rather than the button.**
|
|
45
|
+
// `__close` sits at `inset-block-start: 1.75rem` with `translateY(-50%)`, so its
|
|
46
|
+
// visible box is 16–40px — but it also carries `touch-target`, whose `::after`
|
|
47
|
+
// grows the hit area to 44px on a coarse pointer, reaching 6–50px. Reserving the
|
|
48
|
+
// visible height left `getBoundingClientRect` reporting no overlap while
|
|
49
|
+
// `elementFromPoint` still answered "close button" over the first 10px of the
|
|
50
|
+
// content: the boxes had stopped intersecting and the control was still covered.
|
|
51
|
+
// 52px clears the target with two pixels to spare.
|
|
52
|
+
.wr-drawer__panel--untitled > *:not(.wr-drawer__close) {
|
|
53
|
+
padding-block-start: 3.25rem;
|
|
54
|
+
}
|
|
55
|
+
|
|
29
56
|
|
|
30
57
|
// …and that same flattening puts the content component's own host element
|
|
31
58
|
// between the panel and the title / content / footer slots, so the panel's
|
|
@@ -168,6 +195,16 @@
|
|
|
168
195
|
border-bottom: 1px solid var(--wr-color-outline);
|
|
169
196
|
}
|
|
170
197
|
|
|
198
|
+
// No title to sit beside, so the corner chrome needs its own room.
|
|
199
|
+
//
|
|
200
|
+
// `__close` is absolutely positioned at an offset chosen to centre it on the
|
|
201
|
+
// TITLE's first line (see below). A drawer given only content — the shape a
|
|
202
|
+
// navigation panel takes, `<wr-drawer><nav /></wr-drawer>` — starts its
|
|
203
|
+
// content at the top of the panel and runs it straight under the button: the
|
|
204
|
+
// showcase's own icon-set panel had the × covering the first menu row by
|
|
205
|
+
// 24x16 px, with `elementFromPoint` returning the button, so that corner of
|
|
206
|
+
// the row could not be clicked. Reserve the strip instead of moving the
|
|
207
|
+
// button, which would leave titled drawers looking different for no reason.
|
|
171
208
|
// Built-in dismiss (×) in the panel's top-right corner — rendered by the
|
|
172
209
|
// component template, appended by `WrDrawerManager` for service drawers.
|
|
173
210
|
&__close {
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
&:hover,
|
|
96
96
|
&:focus-visible {
|
|
97
97
|
background: var(--wr-dropdown-item-bg-hover);
|
|
98
|
-
outline:
|
|
98
|
+
outline-offset: -2px;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
&__icon {
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
&--disabled {
|
|
114
114
|
color: var(--wr-color-on-surface-muted);
|
|
115
115
|
cursor: not-allowed;
|
|
116
|
-
opacity:
|
|
116
|
+
opacity: var(--wr-disabled-opacity);
|
|
117
117
|
// The item's own `disabled` guards only the KEYBOARD path; the host element is
|
|
118
118
|
// where a consumer binds `(click)`, and nothing stopped a real click reaching
|
|
119
119
|
// it. `wr-btn` and `wr-checkbox` disable their pointer the same way.
|