ngwr 11.2.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/collapse/styles/_index.scss +2 -2
- package/color-picker/styles/_index.scss +3 -3
- package/compare/styles/_index.scss +18 -2
- package/context-menu/styles/_index.scss +21 -2
- package/date-picker/styles/_index.scss +5 -5
- package/descriptions/styles/_index.scss +1 -1
- package/drag-drop/styles/_index.scss +28 -1
- package/drawer/styles/_index.scss +37 -0
- package/dropdown/styles/_index.scss +2 -2
- package/event-calendar/styles/_index.scss +67 -10
- package/fesm2022/ngwr-action-sheet.mjs +3 -3
- package/fesm2022/ngwr-affix.mjs +3 -3
- package/fesm2022/ngwr-alert.mjs +3 -3
- package/fesm2022/ngwr-anchor.mjs +3 -3
- package/fesm2022/ngwr-aurora.mjs +3 -3
- package/fesm2022/ngwr-avatar.mjs +3 -3
- package/fesm2022/ngwr-back-top.mjs +3 -3
- package/fesm2022/ngwr-badge.mjs +6 -6
- package/fesm2022/ngwr-bar-chart-testing.mjs +20 -2
- package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bar-chart.mjs +3 -3
- package/fesm2022/ngwr-blur-text.mjs +3 -3
- package/fesm2022/ngwr-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow.mjs +4 -4
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +29 -17
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +3 -3
- package/fesm2022/ngwr-button.mjs +6 -6
- package/fesm2022/ngwr-calendar-heatmap.mjs +17 -5
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-testing.mjs +1 -1
- package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +187 -9
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +10 -10
- package/fesm2022/ngwr-card.mjs.map +1 -1
- package/fesm2022/ngwr-carousel.mjs +124 -24
- package/fesm2022/ngwr-carousel.mjs.map +1 -1
- package/fesm2022/ngwr-cascader.mjs +48 -5
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +6 -6
- package/fesm2022/ngwr-circular-text.mjs +4 -4
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +27 -7
- package/fesm2022/ngwr-click-spark.mjs.map +1 -1
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-color-picker-testing.mjs +26 -6
- package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker.mjs +98 -8
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +14 -5
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-confetti.mjs +31 -6
- package/fesm2022/ngwr-confetti.mjs.map +1 -1
- package/fesm2022/ngwr-config.mjs +9 -0
- package/fesm2022/ngwr-config.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu-testing.mjs +30 -11
- package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu.mjs +333 -43
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-counter.mjs +25 -9
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/{ngwr-date-adapter-fns.mjs → ngwr-date-adapters-fns.mjs} +37 -10
- package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -0
- package/fesm2022/{ngwr-date-adapter-luxon.mjs → ngwr-date-adapters-luxon.mjs} +5 -5
- package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -0
- package/fesm2022/ngwr-date-picker-testing.mjs +11 -6
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +119 -37
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/{ngwr-date-adapter.mjs → ngwr-date.mjs} +36 -10
- package/fesm2022/ngwr-date.mjs.map +1 -0
- package/fesm2022/ngwr-decrypt-text.mjs +3 -3
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-dialog.mjs +73 -18
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-divider.mjs +52 -5
- package/fesm2022/ngwr-divider.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart-testing.mjs +8 -4
- package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart.mjs +7 -7
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +160 -11
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +121 -58
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown.mjs +26 -10
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-event-calendar.mjs +28 -15
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text-testing.mjs +5 -3
- package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text.mjs +75 -46
- package/fesm2022/ngwr-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload.mjs +3 -3
- package/fesm2022/ngwr-form.mjs +32 -15
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +21 -11
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gauge.mjs +3 -3
- package/fesm2022/ngwr-glitch-text-testing.mjs +51 -17
- package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-glitch-text.mjs +7 -7
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text-testing.mjs +46 -11
- package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text.mjs +4 -4
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-hotkey.mjs +24 -9
- package/fesm2022/ngwr-hotkey.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +73 -1
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +55 -1
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +26 -15
- package/fesm2022/ngwr-i18n.mjs.map +1 -1
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper-testing.mjs +53 -9
- package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -1
- package/fesm2022/ngwr-image-cropper.mjs +150 -12
- package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
- package/fesm2022/ngwr-input-number-testing.mjs +15 -10
- package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-number.mjs +17 -10
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp-testing.mjs +12 -6
- package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +24 -5
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +15 -15
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob.mjs +3 -3
- package/fesm2022/ngwr-layout.mjs +15 -15
- package/fesm2022/ngwr-lightbox.mjs +4 -4
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart.mjs +73 -26
- package/fesm2022/ngwr-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +7 -7
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +7 -7
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown.mjs +66 -8
- package/fesm2022/ngwr-markdown.mjs.map +1 -1
- package/fesm2022/ngwr-marquee.mjs +4 -4
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-mention.mjs +108 -13
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +6 -6
- package/fesm2022/ngwr-meter-group-testing.mjs +26 -6
- package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -1
- package/fesm2022/ngwr-meter-group.mjs +3 -3
- package/fesm2022/ngwr-overlay.mjs +6 -6
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination-testing.mjs +6 -6
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +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 +155 -33
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-progress.mjs +3 -3
- package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
- package/fesm2022/ngwr-qr.mjs +42 -5
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-radio.mjs +6 -6
- package/fesm2022/ngwr-rating.mjs +3 -3
- package/fesm2022/ngwr-result.mjs +21 -30
- package/fesm2022/ngwr-result.mjs.map +1 -1
- package/fesm2022/ngwr-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented-testing.mjs +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 +159 -34
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +11 -9
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +31 -16
- package/fesm2022/ngwr-sidebar.mjs.map +1 -1
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs +100 -9
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline.mjs +3 -3
- package/fesm2022/ngwr-speed-dial-testing.mjs +15 -13
- package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -1
- package/fesm2022/ngwr-speed-dial.mjs +27 -12
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-split-text.mjs +17 -5
- package/fesm2022/ngwr-split-text.mjs.map +1 -1
- package/fesm2022/ngwr-splitter.mjs +3 -3
- package/fesm2022/ngwr-spotlight-card.mjs +7 -7
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-squircle.mjs +6 -6
- package/fesm2022/ngwr-star-border.mjs +4 -4
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +9 -9
- package/fesm2022/ngwr-stepper-testing.mjs +8 -8
- package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
- package/fesm2022/ngwr-stepper.mjs +33 -8
- package/fesm2022/ngwr-stepper.mjs.map +1 -1
- package/fesm2022/ngwr-storage.mjs +17 -5
- package/fesm2022/ngwr-storage.mjs.map +1 -1
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-table.mjs +99 -39
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-testing.mjs +11 -10
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +36 -10
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +3 -3
- package/fesm2022/ngwr-theme.mjs +181 -4
- package/fesm2022/ngwr-theme.mjs.map +1 -1
- package/fesm2022/ngwr-tilt-card.mjs +7 -7
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-toast.mjs +9 -9
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour.mjs +34 -10
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +3 -3
- package/fesm2022/ngwr-tree.mjs +28 -10
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter-testing.mjs +15 -1
- package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +13 -5
- package/fesm2022/ngwr-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-utils.mjs +5 -2
- package/fesm2022/ngwr-utils.mjs.map +1 -1
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +4 -4
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves.mjs +4 -4
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +94 -24
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/file-upload/styles/_index.scss +2 -2
- package/glitch-text/styles/_index.scss +27 -12
- package/i18n/en.json +56 -6
- package/i18n/ru.json +56 -6
- package/image-cropper/styles/_index.scss +19 -0
- package/input/styles/_index.scss +2 -2
- package/input-number/styles/_index.scss +2 -2
- package/input-otp/styles/_index.scss +9 -2
- package/knob/styles/_index.scss +1 -1
- package/lightbox/styles/_index.scss +16 -2
- package/line-chart/styles/_index.scss +28 -14
- package/list/styles/_index.scss +1 -1
- package/llms-full.txt +18 -23
- package/llms.txt +22 -6
- package/markdown/styles/_index.scss +3 -3
- package/mcp/api.js +6 -4
- package/mcp/catalog.js +40 -3
- package/mcp/providers.js +16 -3
- package/mcp/tools.js +21 -1
- package/meter-group/styles/_index.scss +1 -1
- package/overlay/styles/_index.scss +33 -1
- package/package.json +17 -12
- package/pagination/styles/_index.scss +23 -1
- package/popover/styles/_index.scss +16 -7
- package/progress/styles/_index.scss +1 -1
- package/radio/styles/_index.scss +2 -2
- package/rating/styles/_index.scss +1 -1
- package/schematics/collection.json +1 -1
- package/schematics/migrations/v12/index.js +65 -0
- package/schematics/migrations/v7/index.js +12 -1
- package/schematics/migrations/v8/index.js +10 -1
- package/schematics/migrations.json +5 -0
- package/schematics/ng-add/index.js +8 -3
- package/schematics/provider/index.js +80 -13
- package/schematics/use/index.js +9 -129
- package/schematics/use/rule.js +206 -0
- package/schematics/use/symbol-map.json +4 -4
- package/segmented/styles/_index.scss +14 -3
- package/select/styles/_index.scss +14 -2
- package/sidebar/styles/_index.scss +12 -10
- package/skills/ngwr/SKILL.md +7 -5
- package/skills/ngwr/references/catalog.md +9 -9
- package/skills/ngwr/references/setup.md +10 -5
- package/slider/styles/_index.scss +1 -1
- package/speed-dial/styles/_index.scss +1 -1
- package/stepper/styles/_index.scss +12 -3
- package/switch/styles/_index.scss +2 -2
- package/table/styles/_index.scss +61 -12
- package/tabs/styles/_index.scss +1 -1
- package/textarea/styles/_index.scss +1 -1
- package/theme/styles/_colors.scss +142 -56
- package/theme/styles/_dark.scss +46 -3
- package/theme/styles/_focus.scss +28 -5
- package/theme/styles/_mixins.scss +1 -1
- package/theme/styles/_variables.scss +67 -0
- package/transfer/styles/_index.scss +26 -3
- package/tree/styles/_index.scss +29 -6
- package/types/ngwr-bar-chart-testing.d.ts +9 -1
- package/types/ngwr-blur-text.d.ts +8 -4
- package/types/ngwr-breadcrumbs.d.ts +17 -10
- package/types/ngwr-calendar-testing.d.ts +1 -1
- package/types/ngwr-calendar.d.ts +66 -0
- package/types/ngwr-carousel.d.ts +85 -6
- package/types/ngwr-cascader.d.ts +17 -0
- package/types/ngwr-click-spark.d.ts +4 -0
- package/types/ngwr-color-picker-testing.d.ts +8 -0
- package/types/ngwr-color-picker.d.ts +21 -1
- package/types/ngwr-confetti.d.ts +8 -0
- package/types/ngwr-config.d.ts +10 -1
- package/types/ngwr-context-menu-testing.d.ts +24 -11
- package/types/ngwr-context-menu.d.ts +56 -0
- package/types/ngwr-counter.d.ts +1 -0
- package/types/{ngwr-date-adapter-fns.d.ts → ngwr-date-adapters-fns.d.ts} +33 -6
- package/types/{ngwr-date-adapter-luxon.d.ts → ngwr-date-adapters-luxon.d.ts} +1 -1
- package/types/ngwr-date-picker-testing.d.ts +11 -6
- package/types/ngwr-date-picker.d.ts +8 -4
- package/types/{ngwr-date-adapter.d.ts → ngwr-date.d.ts} +24 -5
- package/types/ngwr-dialog.d.ts +38 -1
- package/types/ngwr-divider.d.ts +25 -0
- package/types/ngwr-donut-chart-testing.d.ts +7 -3
- package/types/ngwr-donut-chart.d.ts +3 -3
- package/types/ngwr-drag-drop.d.ts +56 -2
- package/types/ngwr-drawer.d.ts +56 -5
- package/types/ngwr-event-calendar.d.ts +8 -2
- package/types/ngwr-falling-text-testing.d.ts +5 -3
- package/types/ngwr-falling-text.d.ts +1 -1
- package/types/ngwr-form.d.ts +12 -2
- package/types/ngwr-glitch-text-testing.d.ts +37 -8
- package/types/ngwr-gradient-text-testing.d.ts +16 -3
- package/types/ngwr-i18n.d.ts +13 -4
- package/types/ngwr-image-cropper-testing.d.ts +49 -10
- package/types/ngwr-image-cropper.d.ts +70 -5
- package/types/ngwr-input-number-testing.d.ts +15 -10
- package/types/ngwr-input-number.d.ts +11 -4
- package/types/ngwr-input-otp-testing.d.ts +12 -6
- package/types/ngwr-input-otp.d.ts +15 -1
- package/types/ngwr-line-chart.d.ts +20 -3
- package/types/ngwr-markdown.d.ts +11 -0
- package/types/ngwr-mention.d.ts +32 -0
- package/types/ngwr-meter-group-testing.d.ts +12 -2
- package/types/ngwr-overlay.d.ts +1 -0
- package/types/ngwr-pagination-testing.d.ts +4 -4
- package/types/ngwr-pipes.d.ts +1 -1
- package/types/ngwr-popover-testing.d.ts +7 -2
- package/types/ngwr-popover.d.ts +1 -0
- package/types/ngwr-result.d.ts +6 -0
- package/types/ngwr-segmented-testing.d.ts +9 -0
- package/types/ngwr-segmented.d.ts +21 -1
- package/types/ngwr-select.d.ts +68 -6
- package/types/ngwr-shiny-text.d.ts +4 -2
- package/types/ngwr-sidebar.d.ts +14 -5
- package/types/ngwr-slider.d.ts +69 -1
- package/types/ngwr-speed-dial-testing.d.ts +15 -11
- package/types/ngwr-speed-dial.d.ts +22 -3
- package/types/ngwr-split-text.d.ts +9 -0
- package/types/ngwr-stepper-testing.d.ts +5 -5
- package/types/ngwr-stepper.d.ts +8 -0
- package/types/ngwr-storage.d.ts +1 -0
- package/types/ngwr-table.d.ts +104 -11
- package/types/ngwr-tabs-testing.d.ts +11 -10
- package/types/ngwr-tabs.d.ts +2 -0
- package/types/ngwr-theme.d.ts +82 -1
- package/types/ngwr-tour.d.ts +22 -4
- package/types/ngwr-tree.d.ts +5 -4
- package/types/ngwr-typewriter-testing.d.ts +10 -0
- package/types/ngwr-utils.d.ts +5 -2
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-window.d.ts +39 -11
- package/typography/styles/_index.scss +1 -1
- package/window/styles/_index.scss +72 -26
- package/fesm2022/ngwr-date-adapter-fns.mjs.map +0 -1
- package/fesm2022/ngwr-date-adapter-luxon.mjs.map +0 -1
- package/fesm2022/ngwr-date-adapter.mjs.map +0 -1
|
@@ -113,33 +113,47 @@ $contrast-light: #ffffff !default;
|
|
|
113
113
|
|
|
114
114
|
// CSS variables
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
116
|
+
/// Every public token whose value is COMPOSED out of another token.
|
|
117
|
+
///
|
|
118
|
+
/// They live in a mixin rather than straight in `:root` because a custom
|
|
119
|
+
/// property's `var()` references are substituted at computed-value time ON THE
|
|
120
|
+
/// ELEMENT THAT DECLARES IT, and what inherits down the tree is the substituted
|
|
121
|
+
/// LITERAL. Declared once at `:root`, `--wr-color-surface: var(--wr-color-white)`
|
|
122
|
+
/// computes to `#ffffff` there and every descendant inherits `#ffffff` — not the
|
|
123
|
+
/// reference. Re-tuning `--wr-color-white` further down the tree does nothing to
|
|
124
|
+
/// it afterwards.
|
|
125
|
+
///
|
|
126
|
+
/// That costs nothing for the whole-page dark theme: `[data-theme='dark']`
|
|
127
|
+
/// matches the same `<html>` that `:root` does, so the bases it re-tunes and the
|
|
128
|
+
/// tokens composed off them resolve on ONE element and stay consistent. It
|
|
129
|
+
/// breaks the moment the attribute goes on a SUBTREE — a forced-dark preview, a
|
|
130
|
+
/// dark hero on a light page — where the bases flip and fifty composed tokens
|
|
131
|
+
/// keep their light values. The docs' own colours guide does exactly that, and
|
|
132
|
+
/// its forced-dark panel painted muted text at 3.27:1 with `--wr-color-surface`
|
|
133
|
+
/// still reading `#ffffff` beside a `--wr-color-muted-text` that had correctly
|
|
134
|
+
/// flipped.
|
|
135
|
+
///
|
|
136
|
+
/// So `_dark.scss` includes this too: re-declaring the compositions ON the themed
|
|
137
|
+
/// element is what makes them re-resolve against that element's own bases. A new
|
|
138
|
+
/// token written in terms of `var()` gets that for free if it is added HERE, and
|
|
139
|
+
/// is frozen again if it is added to `:root` directly — that is the whole rule.
|
|
140
|
+
@mixin derived() {
|
|
137
141
|
// Generic subtle hover-surface tint (icon buttons, list rows) — one place
|
|
138
142
|
// so the hover strength stays consistent everywhere.
|
|
139
143
|
--wr-color-hover: rgba(var(--wr-color-light-rgb), 0.4);
|
|
140
144
|
|
|
141
145
|
// Border / divider strengths — translucent so they read on any surface and
|
|
142
146
|
// auto-adapt in dark (via the flipping `light` channels). One place each.
|
|
147
|
+
//
|
|
148
|
+
// unused-ok: for `-subtle` and `-strong`. The catalog draws its hairlines with
|
|
149
|
+
// the opaque `--wr-color-outline`, and `--wr-color-border` has one consumer
|
|
150
|
+
// (`wr-avatar`'s ring), so these two are the weaker and stronger ends of a
|
|
151
|
+
// scale offered to consumers rather than one we paint with. They were NOT the
|
|
152
|
+
// answer to the twenty-two files that hand-rolled
|
|
153
|
+
// `rgba(var(--wr-color-outline-rgb), α)` at eight alphas — four of which
|
|
154
|
+
// computed to exactly these values. Those were FILLS, and naming a fill after a
|
|
155
|
+
// hairline is how a token layer starts lying, so the `--wr-color-fill*` scale
|
|
156
|
+
// below absorbed them instead; not one of those hand-rolls is left.
|
|
143
157
|
--wr-color-border: rgba(var(--wr-color-light-rgb), 0.5);
|
|
144
158
|
--wr-color-border-subtle: rgba(var(--wr-color-light-rgb), 0.35);
|
|
145
159
|
--wr-color-border-strong: rgba(var(--wr-color-light-rgb), 0.6);
|
|
@@ -148,15 +162,23 @@ $contrast-light: #ffffff !default;
|
|
|
148
162
|
// regardless of theme.
|
|
149
163
|
--wr-color-overlay: rgba(var(--wr-color-backdrop-rgb), 0.45);
|
|
150
164
|
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
// light
|
|
158
|
-
|
|
159
|
-
|
|
165
|
+
// Neutral FILL scale — the low-contrast wash a table header, a track, a
|
|
166
|
+
// readonly field or a code chip sits on. Three steps, because the catalog had
|
|
167
|
+
// **thirty-three declarations at eight alphas** hand-rolled across 22 files,
|
|
168
|
+
// and `wr-table` alone used six of them; the values below are the weighted
|
|
169
|
+
// centre of the three clusters those eight actually formed.
|
|
170
|
+
//
|
|
171
|
+
// **Off `light-rgb`, deliberately NOT off `--wr-color-outline-rgb`**, even
|
|
172
|
+
// though the two resolve to the same channel today. That is the bug this scale
|
|
173
|
+
// exists to prevent: every one of those hand-rolls read the OUTLINE channel, so
|
|
174
|
+
// a hairline retuned for its own job — a plausible contrast fix — would have
|
|
175
|
+
// dragged 33 unrelated fills with it, and one measured pair in `wr-table` goes
|
|
176
|
+
// from 6.58:1 to 4.05:1 that way. A fill is not a hairline, which is also why
|
|
177
|
+
// these are not `--wr-color-border-*` under a new name: those three carry the
|
|
178
|
+
// right VALUES under the wrong noun.
|
|
179
|
+
--wr-color-fill-subtle: rgba(var(--wr-color-light-rgb), 0.15);
|
|
180
|
+
--wr-color-fill: rgba(var(--wr-color-light-rgb), 0.3);
|
|
181
|
+
--wr-color-fill-strong: rgba(var(--wr-color-light-rgb), 0.55);
|
|
160
182
|
|
|
161
183
|
// De-emphasized text — the muted ink dimmed to two canonical strengths so
|
|
162
184
|
// labels / captions / placeholders read consistently. One place each.
|
|
@@ -169,22 +191,6 @@ $contrast-light: #ffffff !default;
|
|
|
169
191
|
--wr-color-text-muted: rgba(var(--wr-color-muted-text-rgb), 0.95);
|
|
170
192
|
--wr-color-text-faint: rgba(var(--wr-color-muted-text-rgb), 0.6);
|
|
171
193
|
|
|
172
|
-
// Neutral gray ramp — a FIXED primitive scale (slate). Each step is a stable
|
|
173
|
-
// job (50 = subtlest surface tint … 950 = strongest ink) and, unlike the
|
|
174
|
-
// semantic neutrals, does NOT flip in dark mode. For theme-aware surface /
|
|
175
|
-
// text jobs reach for the role aliases below instead.
|
|
176
|
-
--wr-color-gray-50: #f8fafc;
|
|
177
|
-
--wr-color-gray-100: #f1f5f9;
|
|
178
|
-
--wr-color-gray-200: #e2e8f0;
|
|
179
|
-
--wr-color-gray-300: #cbd5e1;
|
|
180
|
-
--wr-color-gray-400: #94a3b8;
|
|
181
|
-
--wr-color-gray-500: #64748b;
|
|
182
|
-
--wr-color-gray-600: #475569;
|
|
183
|
-
--wr-color-gray-700: #334155;
|
|
184
|
-
--wr-color-gray-800: #1e293b;
|
|
185
|
-
--wr-color-gray-900: #0f172a;
|
|
186
|
-
--wr-color-gray-950: #020617;
|
|
187
|
-
|
|
188
194
|
// Semantic role aliases over the flipping neutrals — prefer these in new code
|
|
189
195
|
// for intent-free surface / text / outline jobs. They resolve through
|
|
190
196
|
// `white` / `dark` / `medium` / `light`, so they flip with the theme
|
|
@@ -214,18 +220,14 @@ $contrast-light: #ffffff !default;
|
|
|
214
220
|
// with today. Both are kept: swapping one for the other changes appearance,
|
|
215
221
|
// not just naming.
|
|
216
222
|
--wr-color-outline: var(--wr-color-light);
|
|
223
|
+
// unused-ok: the channel form of the hairline, kept for a consumer writing
|
|
224
|
+
// their own `rgba()` rule. The library's twenty-two hand-rolls read it and
|
|
225
|
+
// moved to `--wr-color-fill*` above — deliberately off `light-rgb`, for the
|
|
226
|
+
// reason stated there — so nothing paints with the channels today. Until this
|
|
227
|
+
// check stopped counting comments as consumers, the paragraph at :152 was the
|
|
228
|
+
// only thing keeping it green.
|
|
217
229
|
--wr-color-outline-rgb: var(--wr-color-light-rgb);
|
|
218
230
|
|
|
219
|
-
@each $name, $base in $base-colors {
|
|
220
|
-
--wr-color-#{$name}: #{$base};
|
|
221
|
-
--wr-color-#{$name}-rgb: #{_rgb-channels($base)};
|
|
222
|
-
--wr-color-#{$name}-contrast: #{_contrast($base)};
|
|
223
|
-
--wr-color-#{$name}-dark: #{color.adjust($base, $lightness: -5%)};
|
|
224
|
-
--wr-color-#{$name}-darker: #{color.adjust($base, $lightness: -10%)};
|
|
225
|
-
--wr-color-#{$name}-light: #{color.adjust($base, $lightness: 5%)};
|
|
226
|
-
--wr-color-#{$name}-lighter: #{color.adjust($base, $lightness: 10%)};
|
|
227
|
-
}
|
|
228
|
-
|
|
229
231
|
// Soft trio per intent (+ `medium` for neutral surfaces) — tokenizes the
|
|
230
232
|
// ad-hoc `rgba(var(--*-rgb), α)` fills components hand-rolled at ~8
|
|
231
233
|
// different alphas, so each alpha lives in ONE place. `-soft` is the
|
|
@@ -236,6 +238,10 @@ $contrast-light: #ffffff !default;
|
|
|
236
238
|
@each $name in (primary, secondary, success, warning, danger, info, medium) {
|
|
237
239
|
--wr-color-#{$name}-soft: rgba(var(--wr-color-#{$name}-rgb), 0.12);
|
|
238
240
|
--wr-color-#{$name}-soft-border: rgba(var(--wr-color-#{$name}-rgb), 0.3);
|
|
241
|
+
// unused-ok: superseded in practice by `-ink`, which is calibrated to 5.0:1
|
|
242
|
+
// against this very tint while this one is a flat 62% mix that was never
|
|
243
|
+
// measured. Kept because it is public and predates `-ink`; do not reach for
|
|
244
|
+
// it in new code, and do not delete it in a minor.
|
|
239
245
|
--wr-color-#{$name}-soft-contrast: color-mix(in srgb, var(--wr-color-#{$name}) 62%, var(--wr-color-dark));
|
|
240
246
|
--wr-color-#{$name}-active: rgba(var(--wr-color-#{$name}-rgb), 0.2);
|
|
241
247
|
}
|
|
@@ -304,10 +310,90 @@ $contrast-light: #ffffff !default;
|
|
|
304
310
|
// either theme — so there is no darkening that keeps it recognisable AND
|
|
305
311
|
// readable. It borrows the page's own ink; the border still carries the
|
|
306
312
|
// intent. `dark` already IS the ink.
|
|
313
|
+
// unused-ok: the two ends of the ink ramp that resolve to something already
|
|
314
|
+
// named. `light` borrows the page's own ink and `dark` IS the ink, so a
|
|
315
|
+
// component would write the role directly — these exist so that
|
|
316
|
+
// `var(--wr-color-#{$intent}-ink)` in a loop resolves for all nine intents
|
|
317
|
+
// instead of nine minus two.
|
|
307
318
|
--wr-color-light-ink: var(--wr-color-on-surface);
|
|
308
319
|
--wr-color-dark-ink: var(--wr-color-dark);
|
|
309
320
|
}
|
|
310
321
|
|
|
322
|
+
:root {
|
|
323
|
+
// Declared here so the light token set also claims the light UA scheme.
|
|
324
|
+
// Without it the browser fell back to the OS preference, and an app running
|
|
325
|
+
// ngwr's LIGHT theme on a dark-mode machine got dark scrollbars and dark
|
|
326
|
+
// native controls (<textarea>, date/colour inputs) against light surfaces.
|
|
327
|
+
// `_dark.scss` still flips it to `dark` under [data-theme='dark'], which wins
|
|
328
|
+
// on specificity.
|
|
329
|
+
color-scheme: light;
|
|
330
|
+
|
|
331
|
+
--wr-color-white: #ffffff;
|
|
332
|
+
--wr-color-white-rgb: 255, 255, 255;
|
|
333
|
+
// unused-ok: the flat primitive. Only `-black-rgb` is painted with (eleven
|
|
334
|
+
// sites, all of them building an `rgba()` scrim), but a library that ships
|
|
335
|
+
// `--wr-color-white` and not its opposite reads as an omission.
|
|
336
|
+
--wr-color-black: #000000;
|
|
337
|
+
--wr-color-black-rgb: 0, 0, 0;
|
|
338
|
+
|
|
339
|
+
// Overlay dim — used by dialog / drawer / image preview / command
|
|
340
|
+
// palette / image cropper for the behind-the-panel scrim. Always
|
|
341
|
+
// black so the dim reads as "covered" regardless of theme. Don't
|
|
342
|
+
// wire to `--wr-color-dark-rgb` — that flips to light in dark mode
|
|
343
|
+
// and turns the backdrop into a white wash.
|
|
344
|
+
--wr-color-backdrop-rgb: 0, 0, 0;
|
|
345
|
+
|
|
346
|
+
// Muted TEXT, deliberately its own token rather than an alias of the `medium`
|
|
347
|
+
// intent. The two roles pull in opposite directions and cannot share a value:
|
|
348
|
+
// as text it needs >= 4.5:1 against the lightest surface (#ebeff4), while as a
|
|
349
|
+
// fill it has to clear the bar the other way, against its own label. v11 pulled
|
|
350
|
+
// them further apart rather than closer — the `medium` fill went deeper
|
|
351
|
+
// (#6a7683, whose label is now white at 4.63) while this token stayed where a
|
|
352
|
+
// light canvas needs it. Aliasing them left secondary text at 2.69:1.
|
|
353
|
+
--wr-color-muted-text: #5f6c7d;
|
|
354
|
+
--wr-color-muted-text-rgb: 95, 108, 125;
|
|
355
|
+
|
|
356
|
+
// Neutral gray ramp — a FIXED primitive scale (slate). Each step is a stable
|
|
357
|
+
// job (50 = subtlest surface tint … 950 = strongest ink) and, unlike the
|
|
358
|
+
// semantic neutrals, does NOT flip in dark mode. For theme-aware surface /
|
|
359
|
+
// text jobs reach for the role aliases in `derived()` above instead.
|
|
360
|
+
//
|
|
361
|
+
// unused-ok: and deliberately so — the sentence above IS the reason. A fixed
|
|
362
|
+
// ramp cannot serve a component that has to work in both themes, so the
|
|
363
|
+
// library paints with the flipping roles and ships this for consumers who want
|
|
364
|
+
// a stable step. Reaching for one of these inside a component would be the bug
|
|
365
|
+
// it exists to prevent.
|
|
366
|
+
--wr-color-gray-50: #f8fafc;
|
|
367
|
+
--wr-color-gray-100: #f1f5f9;
|
|
368
|
+
--wr-color-gray-200: #e2e8f0;
|
|
369
|
+
--wr-color-gray-300: #cbd5e1;
|
|
370
|
+
--wr-color-gray-400: #94a3b8;
|
|
371
|
+
--wr-color-gray-500: #64748b;
|
|
372
|
+
--wr-color-gray-600: #475569;
|
|
373
|
+
--wr-color-gray-700: #334155;
|
|
374
|
+
--wr-color-gray-800: #1e293b;
|
|
375
|
+
--wr-color-gray-900: #0f172a;
|
|
376
|
+
--wr-color-gray-950: #020617;
|
|
377
|
+
|
|
378
|
+
@each $name, $base in $base-colors {
|
|
379
|
+
--wr-color-#{$name}: #{$base};
|
|
380
|
+
--wr-color-#{$name}-rgb: #{_rgb-channels($base)};
|
|
381
|
+
--wr-color-#{$name}-contrast: #{_contrast($base)};
|
|
382
|
+
--wr-color-#{$name}-dark: #{color.adjust($base, $lightness: -5%)};
|
|
383
|
+
--wr-color-#{$name}-darker: #{color.adjust($base, $lightness: -10%)};
|
|
384
|
+
// unused-ok: the symmetric half. Hover and active DEEPEN an intent, so the
|
|
385
|
+
// catalog reads `-dark` / `-darker` and never these two — but a shade set
|
|
386
|
+
// with holes in it is worse than one half of which is for consumers, and the
|
|
387
|
+
// dark theme re-derives all four for the same reason.
|
|
388
|
+
--wr-color-#{$name}-light: #{color.adjust($base, $lightness: 5%)};
|
|
389
|
+
--wr-color-#{$name}-lighter: #{color.adjust($base, $lightness: 10%)};
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// Re-resolved per themed element — see the mixin above. Anything composed
|
|
393
|
+
// out of another token belongs in there, not here.
|
|
394
|
+
@include derived;
|
|
395
|
+
}
|
|
396
|
+
|
|
311
397
|
// Public SCSS list
|
|
312
398
|
//
|
|
313
399
|
// Color names available for `@each` loops in component styles.
|
package/theme/styles/_dark.scss
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
@use 'sass:color';
|
|
2
2
|
|
|
3
3
|
@use 'colors';
|
|
4
|
+
@use 'variables';
|
|
4
5
|
|
|
5
6
|
// Dark theme overrides — opt-in via `[data-theme="dark"]` on <html>.
|
|
6
7
|
// Drive the toggle from `WrTheme` (provided automatically with
|
|
@@ -53,6 +54,11 @@ $_dark: #e6ebf3;
|
|
|
53
54
|
// `--wr-color-white` are reassigned for dark mode. Tooltip-style
|
|
54
55
|
// surfaces (`bg: dark; color: dark-contrast`) would render
|
|
55
56
|
// white-on-white without this override; re-pair them by hand here.
|
|
57
|
+
// unused-ok: for `-white-contrast`. Both are re-paired here because the light
|
|
58
|
+
// palette baked them, and a tooltip painting `bg: dark; color: dark-contrast`
|
|
59
|
+
// would render white-on-white without it. Only the `dark` half is painted with
|
|
60
|
+
// today; the `white` one has to be right anyway, or a consumer reaching for it
|
|
61
|
+
// in dark mode gets the light theme's answer.
|
|
56
62
|
--wr-color-dark-contrast: #0b1120;
|
|
57
63
|
--wr-color-white-contrast: #e6ebf3;
|
|
58
64
|
// Same story as the contrast pair: the shades were baked from the light
|
|
@@ -67,6 +73,11 @@ $_dark: #e6ebf3;
|
|
|
67
73
|
// percentage of the REMAINING headroom, so it approaches white without ever
|
|
68
74
|
// leaving the gamut. 70% reproduces the previous `-light` to within a rounding
|
|
69
75
|
// step; 85% is the distinct step beyond it.
|
|
76
|
+
// unused-ok: for `-light` / `-lighter`. The catalog's intent loops run over
|
|
77
|
+
// `dark` like any other intent, so `.wr-btn--dark` really does paint `-dark`
|
|
78
|
+
// on hover and `-darker` on active — leaving those inherited is what once made
|
|
79
|
+
// that hover almost black under near-black text. Nothing reaches for the two
|
|
80
|
+
// lighter steps; they keep the shade set symmetric.
|
|
70
81
|
--wr-color-dark-light: #{color.scale($_dark, $lightness: 70%)};
|
|
71
82
|
--wr-color-dark-lighter: #{color.scale($_dark, $lightness: 85%)};
|
|
72
83
|
--wr-color-dark-dark: #{color.adjust($_dark, $lightness: -5%)};
|
|
@@ -83,7 +94,8 @@ $_dark: #e6ebf3;
|
|
|
83
94
|
--wr-color-light-rgb:
|
|
84
95
|
#{color.channel($_light, 'red')}, #{color.channel($_light, 'green')}, #{color.channel($_light, 'blue')};
|
|
85
96
|
// The baked contrast pairs with the LIGHT value (#cbd5e1 → dark text);
|
|
86
|
-
// the dark surface above needs light text instead.
|
|
97
|
+
// the dark surface above needs light text instead. Painted: it is the label
|
|
98
|
+
// `.wr-btn--light` puts on the fill.
|
|
87
99
|
--wr-color-light-contrast: #e6ebf3;
|
|
88
100
|
// `*-lighter` / `*-darker` are baked at SCSS compile time from the
|
|
89
101
|
// LIGHT palette (slate-300 ± 10% lightness ≈ #e8eef5), so without
|
|
@@ -92,14 +104,20 @@ $_dark: #e6ebf3;
|
|
|
92
104
|
// semantics inverted: "lighter" still means "subtler hairline"
|
|
93
105
|
// (closer to canvas, so darker absolute color), "darker" still
|
|
94
106
|
// means "stronger divider" (further from canvas, so lighter).
|
|
107
|
+
// Both are painted: `-lighter` by the showcase chrome's hairline, `-darker` by
|
|
108
|
+
// `.wr-btn--light:active` through the intent loop.
|
|
95
109
|
--wr-color-light-lighter: #1a2236;
|
|
96
110
|
--wr-color-light-darker: #3a4661;
|
|
97
|
-
// `-light` / `-dark` were the two the hand block forgot, and
|
|
98
|
-
// `.wr-btn--light` uses for hover
|
|
111
|
+
// `-light` / `-dark` were the two the hand block forgot, and `-dark` is what
|
|
112
|
+
// `.wr-btn--light` uses for hover. Left inherited, hover swapped in
|
|
99
113
|
// the LIGHT palette's slate-300 — a near-white fill under the near-white
|
|
100
114
|
// `-contrast` text above, so the button simply disappeared under the cursor.
|
|
101
115
|
// Half-steps of the tuned pair, same inverted reading: toward the canvas for
|
|
102
116
|
// `-light`, away from it for `-dark`, which also makes hover read as a lift.
|
|
117
|
+
// unused-ok: for `-light`. Only its opposite is reached for — `.wr-btn--light`
|
|
118
|
+
// takes the `-dark` step on hover and nothing takes this one — but a half-step
|
|
119
|
+
// that exists in one direction and not the other is the kind of hole the hand
|
|
120
|
+
// block already shipped once.
|
|
103
121
|
--wr-color-light-light: #{color.adjust($_light, $lightness: -2.5%)};
|
|
104
122
|
--wr-color-light-dark: #{color.adjust($_light, $lightness: 5%)};
|
|
105
123
|
|
|
@@ -111,6 +129,10 @@ $_dark: #e6ebf3;
|
|
|
111
129
|
#{color.channel($_medium, 'red')}, #{color.channel($_medium, 'green')}, #{color.channel($_medium, 'blue')};
|
|
112
130
|
// This block shipped base + rgb only, so contrast and all four shades still
|
|
113
131
|
// came from the light palette's slate. Ink token, plain shades.
|
|
132
|
+
// unused-ok: for `-light` / `-lighter`. `.wr-btn--medium` paints `-contrast`,
|
|
133
|
+
// `-dark` and `-darker` through the intent loop, and inheriting the light
|
|
134
|
+
// palette's slate for those is the bug this block fixes. Nothing reaches for
|
|
135
|
+
// the two lighter steps; they keep the set symmetric.
|
|
114
136
|
--wr-color-medium-contrast: #{colors.contrast($_medium)};
|
|
115
137
|
--wr-color-medium-light: #{color.adjust($_medium, $lightness: 5%)};
|
|
116
138
|
--wr-color-medium-lighter: #{color.adjust($_medium, $lightness: 10%)};
|
|
@@ -144,6 +166,10 @@ $_dark: #e6ebf3;
|
|
|
144
166
|
--wr-color-primary-contrast: #{colors.contrast(#3567ff)};
|
|
145
167
|
--wr-color-primary-rgb: 53, 103, 255;
|
|
146
168
|
// The same lightness steps as before, taken off the new base.
|
|
169
|
+
// unused-ok: for `-light` / `-lighter`. `.wr-btn--primary` paints `-dark` on
|
|
170
|
+
// hover and `-darker` on active; the two lighter steps keep the set symmetric
|
|
171
|
+
// with the light palette, which is what makes an intent swap-in-place for a
|
|
172
|
+
// consumer.
|
|
147
173
|
--wr-color-primary-light: #547eff;
|
|
148
174
|
--wr-color-primary-dark: #2848aa;
|
|
149
175
|
--wr-color-primary-lighter: #7396ff;
|
|
@@ -158,6 +184,10 @@ $_dark: #e6ebf3;
|
|
|
158
184
|
--wr-color-#{$name}-contrast: #{colors.contrast($base)};
|
|
159
185
|
--wr-color-#{$name}-rgb:
|
|
160
186
|
#{color.channel($base, 'red')}, #{color.channel($base, 'green')}, #{color.channel($base, 'blue')};
|
|
187
|
+
// unused-ok: for `-light` / `-lighter`, the symmetric half — same reasoning
|
|
188
|
+
// as the light palette's loop. `-dark` and `-darker` below are painted by
|
|
189
|
+
// hover and active; they fall inside this marker's run only because the four
|
|
190
|
+
// shades are written as one block.
|
|
161
191
|
--wr-color-#{$name}-light: #{color.adjust($base, $lightness: 5%)};
|
|
162
192
|
--wr-color-#{$name}-lighter: #{color.adjust($base, $lightness: 10%)};
|
|
163
193
|
--wr-color-#{$name}-dark: #{color.adjust($base, $lightness: -5%)};
|
|
@@ -173,5 +203,18 @@ $_dark: #e6ebf3;
|
|
|
173
203
|
--wr-shadow-float: 0 8px 24px rgb(0 0 0 / 55%);
|
|
174
204
|
--wr-shadow-modal: 0 24px 56px rgb(0 0 0 / 60%);
|
|
175
205
|
|
|
206
|
+
// Re-declare every token that is COMPOSED out of the bases above, so the
|
|
207
|
+
// composition resolves against THIS element's values instead of the ones
|
|
208
|
+
// `:root` already substituted. Without it the block is only correct when it
|
|
209
|
+
// lands on `:root` itself; put `data-theme="dark"` on a SUBTREE — a forced-dark
|
|
210
|
+
// preview, a dark hero on a light page — and the bases flip while fifty
|
|
211
|
+
// derived tokens stay light. `--wr-color-surface` read `#ffffff` inside a dark
|
|
212
|
+
// panel, which is how the docs' own colours guide got to 3.27:1. The two
|
|
213
|
+
// mixins are the single source of those compositions; see the long note above
|
|
214
|
+
// `colors.derived()` for why a `var()` in a custom property cannot do this on
|
|
215
|
+
// its own.
|
|
216
|
+
@include colors.derived;
|
|
217
|
+
@include variables.derived-focus-ring;
|
|
218
|
+
|
|
176
219
|
color-scheme: dark;
|
|
177
220
|
}
|
package/theme/styles/_focus.scss
CHANGED
|
@@ -2,32 +2,55 @@
|
|
|
2
2
|
// library. Component-specific focus styles still win via higher specificity;
|
|
3
3
|
// this is a safety net so every keyboard-reachable target has a visible
|
|
4
4
|
// focus indicator out of the box.
|
|
5
|
+
//
|
|
6
|
+
// The ring is an outline plus a halo, both read from `--wr-focus-ring-*` — see
|
|
7
|
+
// `_variables.scss` for why, and for the measured ratios. The short version:
|
|
8
|
+
// the halo alone was 1.41:1 and this mixin also cleared the UA outline, so
|
|
9
|
+
// "visible focus indicator out of the box" was not true of the forty-one
|
|
10
|
+
// selectors that rely on it.
|
|
11
|
+
//
|
|
12
|
+
// Override the offset AFTER the include, the way `list` and `window` do, when
|
|
13
|
+
// the target sits inside a clipping container.
|
|
5
14
|
|
|
6
15
|
@mixin focus-ring {
|
|
7
|
-
outline:
|
|
8
|
-
|
|
16
|
+
outline: var(--wr-focus-ring-width) solid var(--wr-focus-ring-color);
|
|
17
|
+
outline-offset: var(--wr-focus-ring-offset);
|
|
18
|
+
box-shadow: 0 0 0 var(--wr-focus-ring-offset) var(--wr-focus-ring-halo);
|
|
9
19
|
}
|
|
10
20
|
|
|
11
|
-
// Tabs
|
|
21
|
+
// Tabs — `.wr-tabs__strip` is `overflow-y: hidden` (to suppress a stray
|
|
22
|
+
// vertical scrollbar) and its box is exactly the tab's height, so an outset
|
|
23
|
+
// ring loses both horizontal strokes and renders as two disconnected bars.
|
|
12
24
|
.wr-tabs__tab:focus-visible {
|
|
13
25
|
@include focus-ring;
|
|
26
|
+
outline-offset: -2px;
|
|
14
27
|
}
|
|
15
28
|
|
|
16
29
|
// Sidebar
|
|
17
30
|
.wr-sidebar__entry:focus-visible,
|
|
18
|
-
.wr-sidebar__item:focus-visible,
|
|
19
31
|
.wr-sidebar__group-toggle:focus-visible {
|
|
20
32
|
@include focus-ring;
|
|
21
33
|
}
|
|
22
34
|
|
|
35
|
+
// `.wr-sidebar__group-body` is `overflow: hidden` so the group can animate
|
|
36
|
+
// `grid-template-rows` from 1fr to 0fr, and the item runs flush to its inline
|
|
37
|
+
// end — an outset ring loses its whole inline-end stroke there.
|
|
38
|
+
.wr-sidebar__item:focus-visible {
|
|
39
|
+
@include focus-ring;
|
|
40
|
+
outline-offset: -2px;
|
|
41
|
+
}
|
|
42
|
+
|
|
23
43
|
// Anchor
|
|
24
44
|
.wr-anchor__link:focus-visible {
|
|
25
45
|
@include focus-ring;
|
|
26
46
|
}
|
|
27
47
|
|
|
28
|
-
// Collapse / accordion header
|
|
48
|
+
// Collapse / accordion header — `.wr-collapse` is `overflow: hidden` and the
|
|
49
|
+
// header fills it but for the 1px border, so an outset ring is clipped down to
|
|
50
|
+
// a single row of halo.
|
|
29
51
|
.wr-collapse__header:focus-visible {
|
|
30
52
|
@include focus-ring;
|
|
53
|
+
outline-offset: -2px;
|
|
31
54
|
}
|
|
32
55
|
|
|
33
56
|
// Command palette options
|
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
// These are the canonical knobs every component reads from. Consumers
|
|
4
4
|
// override them on `:root` (or any subtree) without touching SCSS.
|
|
5
5
|
|
|
6
|
+
/// The tokens here that are composed out of one the THEME re-tunes, kept in a
|
|
7
|
+
/// mixin so `_dark.scss` can re-declare them on the themed element. See the long
|
|
8
|
+
/// note above `colors.derived()`: a `var()` inside a custom property is
|
|
9
|
+
/// substituted where it is DECLARED, so a `:root` composition inherits into a
|
|
10
|
+
/// scoped `[data-theme="dark"]` subtree as the light literal.
|
|
11
|
+
///
|
|
12
|
+
/// Only the ring. The other compositions in this file — `--wr-control-font-size-*`,
|
|
13
|
+
/// `--wr-transition-*`, `--wr-overlay-*` — read sizes and durations, which no
|
|
14
|
+
/// theme flips, so freezing them is the same value either way.
|
|
15
|
+
@mixin derived-focus-ring() {
|
|
16
|
+
--wr-focus-ring-color: var(--wr-color-primary);
|
|
17
|
+
--wr-focus-ring-halo: rgba(var(--wr-color-primary-rgb), 0.25);
|
|
18
|
+
}
|
|
19
|
+
|
|
6
20
|
:root {
|
|
7
21
|
// Border radius
|
|
8
22
|
--wr-border-radius-sm: 0.375rem;
|
|
@@ -45,11 +59,16 @@
|
|
|
45
59
|
--wr-duration-fast: 0.1s;
|
|
46
60
|
--wr-duration-base: 0.15s;
|
|
47
61
|
--wr-duration-slow: 0.3s;
|
|
62
|
+
// unused-ok: the slow end of a public scale. The catalog's own animations top
|
|
63
|
+
// out at `-slow`; a consumer's need not.
|
|
48
64
|
--wr-duration-slower: 0.5s;
|
|
49
65
|
|
|
50
66
|
// Transition shorthands
|
|
51
67
|
--wr-transition-short: var(--wr-duration-fast) var(--wr-ease-out);
|
|
52
68
|
--wr-transition-base: var(--wr-duration-base) var(--wr-ease-linear);
|
|
69
|
+
// unused-ok: the third shorthand. Components compose `-slow` with an easing
|
|
70
|
+
// themselves where they need it, but dropping one rung out of three would make
|
|
71
|
+
// the set look arbitrary.
|
|
53
72
|
--wr-transition-long: var(--wr-duration-slow) var(--wr-ease-out);
|
|
54
73
|
|
|
55
74
|
// Elevation
|
|
@@ -65,6 +84,52 @@
|
|
|
65
84
|
--wr-shadow-float: 0 8px 24px rgb(0 0 0 / 18%);
|
|
66
85
|
--wr-shadow-modal: 0 20px 48px rgb(0 0 0 / 25%);
|
|
67
86
|
|
|
87
|
+
// Disabled
|
|
88
|
+
//
|
|
89
|
+
// How far a control fades when it will not respond. One number, because the
|
|
90
|
+
// catalog had **seven** — 0.6 in eighteen places, then 0.5, 0.7, 0.55, 0.4,
|
|
91
|
+
// 0.35 and 0.65 — spread over 29 entry points, and two components disagreed
|
|
92
|
+
// with THEMSELVES three ways inside one file (`date-picker` at 0.5 / 0.4 / 0.7,
|
|
93
|
+
// `calendar` at 0.5 / 0.35 / 0.6). Sibling text fields fading differently is
|
|
94
|
+
// not a design decision anyone made; it is what happens when the value has no
|
|
95
|
+
// name.
|
|
96
|
+
//
|
|
97
|
+
// 0.6 is the value eighteen of them already used. A component that genuinely
|
|
98
|
+
// needs another strength overrides this token in its own block, with the reason
|
|
99
|
+
// — the point is that the exception has to be argued rather than typed.
|
|
100
|
+
--wr-disabled-opacity: 0.6;
|
|
101
|
+
|
|
102
|
+
// Focus ring
|
|
103
|
+
//
|
|
104
|
+
// The keyboard indicator, as tokens rather than a recipe baked into SCSS —
|
|
105
|
+
// the ring was the one surface a consumer could not retheme, because
|
|
106
|
+
// `theme.focus-ring` hard-coded it.
|
|
107
|
+
//
|
|
108
|
+
// It is an OUTLINE now, and the halo is a second channel rather than the only
|
|
109
|
+
// one. The halo alone is a 25% tint of the primary over the page: **1.41:1 in
|
|
110
|
+
// light, 1.31:1 in dark**, where WCAG 1.4.11 asks 3:1 of a focus indicator —
|
|
111
|
+
// and the mixin also set `outline: none`, so for the forty-one selectors whose
|
|
112
|
+
// entire focus style is that mixin, nothing on screen met the bar. The solid
|
|
113
|
+
// token measures 4.89:1 and 4.07:1. Two components had already worked this out
|
|
114
|
+
// on their own, in three places, and hand-rolled
|
|
115
|
+
// `outline: 2px solid var(--wr-color-primary)` (`event-calendar` twice,
|
|
116
|
+
// `lightbox` once), and four more wrote an `outline-offset` next to the include
|
|
117
|
+
// that could never apply.
|
|
118
|
+
//
|
|
119
|
+
// An outline is also the only form the indicator survives in under
|
|
120
|
+
// `forced-colors`, which drops every `box-shadow` outright, and it is exempt
|
|
121
|
+
// from layout, so focus never reflows the box.
|
|
122
|
+
//
|
|
123
|
+
// Halo spread equals the offset on purpose: the halo fills exactly the gap the
|
|
124
|
+
// outline leaves, so the two read as one ring instead of two. A component that
|
|
125
|
+
// insets its outline (`outline-offset: -2px`, the idiom for a row inside an
|
|
126
|
+
// `overflow: hidden` container) keeps the halo outside, where its own clipping
|
|
127
|
+
// hides it.
|
|
128
|
+
// `-color` and `-halo` are composed off `--wr-color-primary`, so they live in
|
|
129
|
+
// `derived-focus-ring()` at the top of this file, included at the end of `:root`.
|
|
130
|
+
--wr-focus-ring-width: 2px;
|
|
131
|
+
--wr-focus-ring-offset: 2px;
|
|
132
|
+
|
|
68
133
|
// Z-index scale
|
|
69
134
|
//
|
|
70
135
|
// Overlay panels inside the CDK container inherit its stacking; these
|
|
@@ -124,6 +189,8 @@
|
|
|
124
189
|
--wr-tracking-wide: 0.025em;
|
|
125
190
|
--wr-tracking-wider: 0.05em;
|
|
126
191
|
--wr-tracking-widest: 0.1em;
|
|
192
|
+
|
|
193
|
+
@include derived-focus-ring;
|
|
127
194
|
}
|
|
128
195
|
|
|
129
196
|
// Shared open animation for overlay panels. Every overlay component
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
color: var(--wr-color-on-surface);
|
|
12
12
|
|
|
13
13
|
&--disabled {
|
|
14
|
-
opacity:
|
|
14
|
+
opacity: var(--wr-disabled-opacity);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
&__pane {
|
|
@@ -31,11 +31,24 @@
|
|
|
31
31
|
gap: 0.5rem;
|
|
32
32
|
padding: 0.5rem 0.625rem;
|
|
33
33
|
border-bottom: 1px solid var(--wr-color-outline);
|
|
34
|
-
background:
|
|
34
|
+
background: var(--wr-color-fill);
|
|
35
|
+
// The checkbox and the count are intrinsically sized, so on a narrow pane
|
|
36
|
+
// the title absorbed the entire shortfall: at 375px it was 26px of a 91px
|
|
37
|
+
// track and the headers read "A…" and "S…". Let the count drop to its own
|
|
38
|
+
// line before that happens — it is the one part of the row that reads fine
|
|
39
|
+
// anywhere. Nothing moves while the row fits (measured: identical at 190px
|
|
40
|
+
// and 430px panes).
|
|
41
|
+
flex-wrap: wrap;
|
|
35
42
|
}
|
|
36
43
|
|
|
37
44
|
&__title {
|
|
38
|
-
|
|
45
|
+
// A small basis rather than `auto`: the title has to be the item that
|
|
46
|
+
// yields, and with a content-sized basis a long title pushes ITSELF onto
|
|
47
|
+
// the next line, leaving the select-all checkbox alone on a row and the
|
|
48
|
+
// two panes of one transfer with headers of different heights. 3.5rem is
|
|
49
|
+
// the widest basis that still shares a row with the checkbox in the
|
|
50
|
+
// narrowest pane the component reaches (113px).
|
|
51
|
+
flex: 1 1 3.5rem;
|
|
39
52
|
min-width: 0;
|
|
40
53
|
overflow: hidden;
|
|
41
54
|
text-overflow: ellipsis;
|
|
@@ -98,6 +111,16 @@
|
|
|
98
111
|
height: 1rem;
|
|
99
112
|
}
|
|
100
113
|
|
|
114
|
+
// The panes are a plain flex row, so they already swap: under `dir="rtl"` the
|
|
115
|
+
// source pane lays out at the right. The move chevrons are drawn to physical
|
|
116
|
+
// directions, though, so "move to target" ends up pointing at the pane it
|
|
117
|
+
// moves away from. Turn them around with the panes, the same way the
|
|
118
|
+
// pagination and carousel arrows do. Both move buttons are icon-only, so
|
|
119
|
+
// nothing textual is caught.
|
|
120
|
+
[dir='rtl'] &__move .wr-icon__svg {
|
|
121
|
+
transform: scaleX(-1);
|
|
122
|
+
}
|
|
123
|
+
|
|
101
124
|
// No container query here on purpose: `@container` only styles DESCENDANTS, so
|
|
102
125
|
// a rule that reflows `.wr-transfer` itself could never match its own query.
|
|
103
126
|
// Doing it properly means the house `responsive` opt-in modifier (a wrapper
|