ngwr 15.0.0-rc.2 → 15.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 +18 -12
- package/affix/styles/_index.scss +12 -3
- package/avatar/styles/_index.scss +11 -0
- package/badge/styles/_index.scss +15 -9
- package/bits/decrypt-text/decrypt-text.scss +1 -1
- package/bits/decrypt-text/styles/_index.scss +15 -26
- package/bits/decrypt-text/styles/_rules.scss +40 -0
- package/bits/falling-text/styles/_rules.scss +14 -1
- package/bits/marquee/styles/_rules.scss +49 -0
- package/bits/typewriter/styles/_rules.scss +12 -0
- package/breadcrumbs/styles/_rules.scss +5 -2
- package/button/styles/_index.scss +18 -8
- package/carousel/styles/_index.scss +15 -1
- package/charts/bar-chart/styles/_index.scss +23 -1
- package/charts/calendar-heatmap/styles/_index.scss +4 -0
- package/charts/donut-chart/styles/_index.scss +3 -0
- package/charts/line-chart/styles/_index.scss +94 -11
- package/charts/meter-group/styles/_index.scss +19 -4
- package/charts/sparkline/styles/_index.scss +4 -1
- package/compare/styles/_index.scss +8 -1
- package/dialog/styles/_index.scss +13 -3
- package/fesm2022/ngwr-affix.mjs +64 -2
- package/fesm2022/ngwr-affix.mjs.map +1 -1
- package/fesm2022/ngwr-alert.mjs +16 -1
- package/fesm2022/ngwr-alert.mjs.map +1 -1
- package/fesm2022/ngwr-anchor.mjs +25 -0
- package/fesm2022/ngwr-anchor.mjs.map +1 -1
- package/fesm2022/ngwr-avatar.mjs +7 -5
- package/fesm2022/ngwr-avatar.mjs.map +1 -1
- package/fesm2022/ngwr-bits-aurora.mjs +30 -13
- package/fesm2022/ngwr-bits-aurora.mjs.map +1 -1
- package/fesm2022/ngwr-bits-blur-text.mjs +16 -5
- package/fesm2022/ngwr-bits-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-bits-border-glow.mjs +1 -1
- package/fesm2022/ngwr-bits-circular-text.mjs +1 -1
- package/fesm2022/ngwr-bits-click-spark.mjs +1 -1
- package/fesm2022/ngwr-bits-confetti.mjs +14 -8
- package/fesm2022/ngwr-bits-confetti.mjs.map +1 -1
- package/fesm2022/ngwr-bits-decrypt-text.mjs +40 -14
- package/fesm2022/ngwr-bits-decrypt-text.mjs.map +1 -1
- package/fesm2022/ngwr-bits-falling-text.mjs +73 -34
- package/fesm2022/ngwr-bits-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-bits-fuzzy-text.mjs +102 -44
- package/fesm2022/ngwr-bits-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-bits-marquee-testing.mjs +3 -0
- package/fesm2022/ngwr-bits-marquee-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-marquee.mjs +47 -13
- package/fesm2022/ngwr-bits-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-bits-rotating-text.mjs +11 -6
- package/fesm2022/ngwr-bits-rotating-text.mjs.map +1 -1
- package/fesm2022/ngwr-bits-splash-cursor.mjs +51 -5
- package/fesm2022/ngwr-bits-splash-cursor.mjs.map +1 -1
- package/fesm2022/ngwr-bits-split-text.mjs +10 -3
- package/fesm2022/ngwr-bits-split-text.mjs.map +1 -1
- package/fesm2022/ngwr-bits-spotlight-card-testing.mjs +1 -1
- package/fesm2022/ngwr-bits-spotlight-card-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-spotlight-card.mjs +11 -3
- package/fesm2022/ngwr-bits-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-bits-typewriter-testing.mjs +6 -0
- package/fesm2022/ngwr-bits-typewriter-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-typewriter.mjs +14 -8
- package/fesm2022/ngwr-bits-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-bits-waves.mjs +29 -16
- package/fesm2022/ngwr-bits-waves.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +2 -2
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-button.mjs +22 -5
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +4 -1
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-carousel-testing.mjs.map +1 -1
- package/fesm2022/ngwr-carousel.mjs +21 -5
- package/fesm2022/ngwr-carousel.mjs.map +1 -1
- package/fesm2022/ngwr-cascader-testing.mjs.map +1 -1
- package/fesm2022/ngwr-cascader.mjs +116 -6
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-charts-bar-chart-testing.mjs +4 -4
- package/fesm2022/ngwr-charts-bar-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-charts-bar-chart.mjs +38 -6
- package/fesm2022/ngwr-charts-bar-chart.mjs.map +1 -1
- package/fesm2022/ngwr-charts-calendar-heatmap.mjs +31 -5
- package/fesm2022/ngwr-charts-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-charts-donut-chart.mjs +32 -6
- package/fesm2022/ngwr-charts-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-charts-gauge.mjs +30 -4
- package/fesm2022/ngwr-charts-gauge.mjs.map +1 -1
- package/fesm2022/ngwr-charts-line-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-charts-line-chart.mjs +117 -48
- package/fesm2022/ngwr-charts-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-charts-meter-group.mjs +30 -5
- package/fesm2022/ngwr-charts-meter-group.mjs.map +1 -1
- package/fesm2022/ngwr-charts-sparkline.mjs +42 -12
- package/fesm2022/ngwr-charts-sparkline.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +18 -2
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker.mjs +47 -10
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +11 -0
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +19 -7
- package/fesm2022/ngwr-compare.mjs.map +1 -1
- package/fesm2022/ngwr-counter.mjs +32 -18
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +109 -15
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-date.mjs +97 -32
- package/fesm2022/ngwr-date.mjs.map +1 -1
- package/fesm2022/ngwr-density.mjs +24 -1
- package/fesm2022/ngwr-density.mjs.map +1 -1
- package/fesm2022/ngwr-drawer-testing.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +40 -11
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-editor.mjs +1 -1
- package/fesm2022/ngwr-event-calendar.mjs +26 -15
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload.mjs +18 -5
- package/fesm2022/ngwr-file-upload.mjs.map +1 -1
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ar.mjs +5 -5
- package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-cs.mjs +5 -5
- package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-de.mjs +5 -5
- package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +5 -5
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-es.mjs +5 -5
- package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-fr.mjs +5 -5
- package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-he.mjs +5 -5
- package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-hi.mjs +5 -5
- package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-id.mjs +5 -5
- package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-it.mjs +5 -5
- package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ja.mjs +5 -5
- package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ko.mjs +5 -5
- package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-nl.mjs +5 -5
- package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pl.mjs +5 -5
- package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pt.mjs +5 -5
- package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +5 -5
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-sv.mjs +5 -5
- package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-tr.mjs +5 -5
- package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-uk.mjs +5 -5
- package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-vi.mjs +5 -5
- package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh-tw.mjs +5 -5
- package/fesm2022/ngwr-i18n-zh-tw.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh.mjs +5 -5
- package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
- package/fesm2022/ngwr-image-cropper.mjs +9 -4
- package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
- package/fesm2022/ngwr-input-number.mjs +27 -2
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +8 -3
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-knob.mjs +7 -13
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +2 -2
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-mention-testing.mjs +3 -1
- package/fesm2022/ngwr-mention-testing.mjs.map +1 -1
- package/fesm2022/ngwr-mention.mjs +5 -2
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +3 -1
- package/fesm2022/ngwr-meta.mjs.map +1 -1
- package/fesm2022/ngwr-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +2 -2
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +11 -3
- package/fesm2022/ngwr-pipes.mjs.map +1 -1
- package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -1
- package/fesm2022/ngwr-popconfirm.mjs +64 -12
- package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
- package/fesm2022/ngwr-popover.mjs +15 -3
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-pull-to-refresh.mjs +1 -1
- package/fesm2022/ngwr-qr.mjs +6 -2
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-schema-form.mjs +1 -0
- package/fesm2022/ngwr-schema-form.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +7 -5
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +4 -4
- package/fesm2022/ngwr-sidebar.mjs.map +1 -1
- package/fesm2022/ngwr-sortable-list.mjs +6 -4
- package/fesm2022/ngwr-sortable-list.mjs.map +1 -1
- package/fesm2022/ngwr-splitter-testing.mjs +1 -1
- package/fesm2022/ngwr-splitter-testing.mjs.map +1 -1
- package/fesm2022/ngwr-splitter.mjs +7 -6
- package/fesm2022/ngwr-splitter.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +20 -19
- package/fesm2022/ngwr-statistic.mjs.map +1 -1
- package/fesm2022/ngwr-stepper-testing.mjs +1 -1
- package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
- package/fesm2022/ngwr-stepper.mjs +3 -2
- package/fesm2022/ngwr-stepper.mjs.map +1 -1
- package/fesm2022/ngwr-table-testing.mjs +18 -0
- package/fesm2022/ngwr-table-testing.mjs.map +1 -1
- package/fesm2022/ngwr-table.mjs +191 -29
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +16 -3
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +7 -5
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-theme.mjs +1 -1
- package/fesm2022/ngwr-toast.mjs +135 -14
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-tour.mjs +11 -2
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +9 -1
- package/fesm2022/ngwr-transfer.mjs.map +1 -1
- package/fesm2022/ngwr-tree.mjs +43 -5
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-utils.mjs +54 -1
- package/fesm2022/ngwr-utils.mjs.map +1 -1
- package/fesm2022/ngwr-validators.mjs +16 -13
- package/fesm2022/ngwr-validators.mjs.map +1 -1
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +11 -1
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +160 -35
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/i18n/ar.json +3 -3
- package/i18n/cs.json +3 -3
- package/i18n/de.json +3 -3
- package/i18n/en.json +3 -3
- package/i18n/es.json +3 -3
- package/i18n/fr.json +3 -3
- package/i18n/he.json +3 -3
- package/i18n/hi.json +3 -3
- package/i18n/id.json +3 -3
- package/i18n/it.json +3 -3
- package/i18n/ja.json +3 -3
- package/i18n/ko.json +3 -3
- package/i18n/nl.json +3 -3
- package/i18n/pl.json +3 -3
- package/i18n/pt.json +3 -3
- package/i18n/ru.json +3 -3
- package/i18n/sv.json +3 -3
- package/i18n/tr.json +3 -3
- package/i18n/uk.json +3 -3
- package/i18n/vi.json +3 -3
- package/i18n/zh-TW.json +3 -3
- package/i18n/zh.json +3 -3
- package/input-number/styles/_index.scss +11 -1
- package/llms-full.txt +20 -6
- package/llms.txt +203 -107
- package/loading-bar/styles/_rules.scss +8 -0
- package/mcp/api.js +44 -6
- package/mcp/catalog.js +46 -17
- package/mcp/tools.js +125 -48
- package/package.json +1 -1
- package/popover/styles/_index.scss +3 -0
- package/progress/styles/_index.scss +12 -0
- package/schematics/collection.json +3 -3
- package/schematics/component-style/index.js +41 -26
- package/schematics/component-style/schema.json +2 -2
- package/schematics/icon-set/index.js +3 -3
- package/schematics/migrations/v14/index.js +2 -1
- package/schematics/migrations/v15/index.js +1236 -0
- package/schematics/migrations.json +5 -0
- package/schematics/ng-add/index.js +82 -37
- package/schematics/ng-add/schema.json +2 -2
- package/schematics/page/index.js +39 -1
- package/schematics/page/schema.json +1 -2
- package/schematics/page/templates.js +38 -14
- package/schematics/provider/index.js +99 -51
- package/schematics/provider/schema.json +11 -3
- package/schematics/use/index.js +2 -1
- package/schematics/use/rule.js +176 -28
- package/schematics/utility/global-styles.js +244 -0
- package/skeleton/styles/_index.scss +8 -0
- package/skills/ngwr/SKILL.md +46 -9
- package/skills/ngwr/references/catalog.md +4 -3
- package/skills/ngwr/references/setup.md +44 -4
- package/stepper/styles/_index.scss +14 -0
- package/styles/_grid.scss +7 -1
- package/table/styles/_index.scss +60 -1
- package/timeline/styles/_index.scss +22 -0
- package/toast/styles/_index.scss +6 -1
- package/types/ngwr-affix.d.ts +10 -0
- package/types/ngwr-alert.d.ts +14 -1
- package/types/ngwr-anchor.d.ts +11 -0
- package/types/ngwr-avatar.d.ts +14 -4
- package/types/ngwr-bits-aurora.d.ts +6 -1
- package/types/ngwr-bits-blur-text.d.ts +10 -0
- package/types/ngwr-bits-confetti.d.ts +7 -1
- package/types/ngwr-bits-decrypt-text.d.ts +14 -6
- package/types/ngwr-bits-falling-text.d.ts +10 -0
- package/types/ngwr-bits-fuzzy-text.d.ts +35 -2
- package/types/ngwr-bits-marquee-testing.d.ts +17 -5
- package/types/ngwr-bits-marquee.d.ts +31 -0
- package/types/ngwr-bits-rotating-text.d.ts +9 -0
- package/types/ngwr-bits-split-text.d.ts +10 -0
- package/types/ngwr-bits-spotlight-card-testing.d.ts +11 -11
- package/types/ngwr-bits-spotlight-card.d.ts +2 -0
- package/types/ngwr-bits-typewriter-testing.d.ts +18 -10
- package/types/ngwr-bits-typewriter.d.ts +7 -0
- package/types/ngwr-bits-waves.d.ts +4 -0
- package/types/ngwr-button.d.ts +24 -2
- package/types/ngwr-carousel-testing.d.ts +2 -1
- package/types/ngwr-carousel.d.ts +31 -1
- package/types/ngwr-cascader-testing.d.ts +12 -14
- package/types/ngwr-cascader.d.ts +53 -4
- package/types/ngwr-charts-bar-chart-testing.d.ts +7 -7
- package/types/ngwr-charts-bar-chart.d.ts +37 -4
- package/types/ngwr-charts-calendar-heatmap.d.ts +35 -5
- package/types/ngwr-charts-donut-chart.d.ts +25 -2
- package/types/ngwr-charts-gauge.d.ts +19 -2
- package/types/ngwr-charts-line-chart-testing.d.ts +1 -1
- package/types/ngwr-charts-line-chart.d.ts +92 -42
- package/types/ngwr-charts-meter-group.d.ts +24 -2
- package/types/ngwr-charts-sparkline.d.ts +30 -8
- package/types/ngwr-checkbox.d.ts +17 -0
- package/types/ngwr-color-picker.d.ts +17 -1
- package/types/ngwr-command-palette.d.ts +10 -0
- package/types/ngwr-compare.d.ts +13 -0
- package/types/ngwr-counter.d.ts +15 -7
- package/types/ngwr-date-picker.d.ts +36 -10
- package/types/ngwr-date.d.ts +41 -1
- package/types/ngwr-density.d.ts +75 -1
- package/types/ngwr-drawer-testing.d.ts +5 -1
- package/types/ngwr-drawer.d.ts +32 -4
- package/types/ngwr-event-calendar.d.ts +26 -1
- package/types/ngwr-file-upload.d.ts +11 -1
- package/types/ngwr-form.d.ts +3 -1
- package/types/ngwr-image-cropper.d.ts +13 -2
- package/types/ngwr-input-number.d.ts +2 -0
- package/types/ngwr-input-otp.d.ts +8 -0
- package/types/ngwr-knob.d.ts +11 -3
- package/types/ngwr-mention.d.ts +9 -1
- package/types/ngwr-overlay.d.ts +1 -1
- package/types/ngwr-pagination-testing.d.ts +5 -5
- package/types/ngwr-pipes.d.ts +5 -1
- package/types/ngwr-popconfirm-testing.d.ts +5 -5
- package/types/ngwr-popconfirm.d.ts +61 -3
- package/types/ngwr-popover.d.ts +20 -1
- package/types/ngwr-qr.d.ts +11 -2
- package/types/ngwr-select.d.ts +21 -2
- package/types/ngwr-sidebar.d.ts +8 -0
- package/types/ngwr-sortable-list.d.ts +19 -25
- package/types/ngwr-splitter-testing.d.ts +3 -3
- package/types/ngwr-statistic.d.ts +3 -1
- package/types/ngwr-stepper.d.ts +7 -0
- package/types/ngwr-table-testing.d.ts +37 -1
- package/types/ngwr-table.d.ts +186 -51
- package/types/ngwr-tabs-testing.d.ts +16 -15
- package/types/ngwr-tabs.d.ts +14 -0
- package/types/ngwr-toast.d.ts +4 -0
- package/types/ngwr-tour.d.ts +2 -0
- package/types/ngwr-transfer.d.ts +7 -1
- package/types/ngwr-tree.d.ts +21 -6
- package/types/ngwr-utils.d.ts +60 -2
- package/types/ngwr-validators.d.ts +11 -3
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-virtual-scroll.d.ts +1 -0
- package/types/ngwr-window.d.ts +72 -0
- package/window/styles/_index.scss +17 -0
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Signals-first UI components for Angular.
|
|
|
9
9
|
[](https://codecov.io/gh/thekhegay/ngwr)
|
|
10
10
|
[](https://github.com/thekhegay/ngwr/blob/main/LICENSE)
|
|
11
11
|
|
|
12
|
-
[Documentation](https://ngwr.dev) · [Getting started](https://ngwr.dev/
|
|
12
|
+
[Documentation](https://ngwr.dev) · [Getting started](https://ngwr.dev/docs/installation) · [Playground](https://stackblitz.com/github/thekhegay/ngwr/tree/main/projects/starter?file=src/app/app.ts) · [Changelog](https://github.com/thekhegay/ngwr/blob/main/CHANGELOG.md)
|
|
13
13
|
|
|
14
14
|
ngwr's form controls implement `FormValueControl` and `FormCheckboxControl`
|
|
15
15
|
from Signal Forms directly. `[formField]` binds to each component's own `value`
|
|
@@ -62,9 +62,10 @@ reactive forms bind too, with limits the
|
|
|
62
62
|
- Angular CDK [test harnesses](https://ngwr.dev/guides/testing) for the form
|
|
63
63
|
controls and overlays.
|
|
64
64
|
|
|
65
|
-
Browse the [components](https://ngwr.dev/reference/components)
|
|
66
|
-
[
|
|
67
|
-
|
|
65
|
+
Browse the [components](https://ngwr.dev/reference/components),
|
|
66
|
+
[charts](https://ngwr.dev/charts) and [bits](https://ngwr.dev/bits) (animations
|
|
67
|
+
and visual effects) with live demos. Directives, pipes, services and validators
|
|
68
|
+
are in the [reference](https://ngwr.dev/reference).
|
|
68
69
|
|
|
69
70
|
## Installation
|
|
70
71
|
|
|
@@ -85,8 +86,9 @@ npm install ngwr @angular/cdk
|
|
|
85
86
|
yarn add ngwr @angular/cdk
|
|
86
87
|
```
|
|
87
88
|
|
|
88
|
-
The optional packages
|
|
89
|
-
|
|
89
|
+
The optional packages are an icon set, shown in the
|
|
90
|
+
[installation guide](https://ngwr.dev/docs/installation), and ProseMirror for
|
|
91
|
+
the [editor](https://ngwr.dev/reference/components/editor).
|
|
90
92
|
|
|
91
93
|
## Styles
|
|
92
94
|
|
|
@@ -103,7 +105,8 @@ where `$base-colors` goes.
|
|
|
103
105
|
@use 'ngwr/checkbox';
|
|
104
106
|
```
|
|
105
107
|
|
|
106
|
-
Utilities are opt-in
|
|
108
|
+
Utilities are opt-in. Write them below `@use 'ngwr/theme'`, since some of them
|
|
109
|
+
load the token layer too:
|
|
107
110
|
|
|
108
111
|
```scss
|
|
109
112
|
@use 'ngwr/reset'; // box-sizing, body margin, sane defaults
|
|
@@ -132,6 +135,8 @@ providers: [
|
|
|
132
135
|
],
|
|
133
136
|
```
|
|
134
137
|
|
|
138
|
+
`withDensity()` and the `[wrDensity]` directive also need
|
|
139
|
+
`@use 'ngwr/density';` in your styles: no component loads the density scale.
|
|
135
140
|
Icons and translations have calls of their own. The
|
|
136
141
|
[configuration guide](https://ngwr.dev/docs/configuration) lists every feature.
|
|
137
142
|
|
|
@@ -142,9 +147,10 @@ ng update ngwr
|
|
|
142
147
|
```
|
|
143
148
|
|
|
144
149
|
This installs the latest version and runs its migrations. The
|
|
145
|
-
[migration guide](https://ngwr.dev/
|
|
146
|
-
each major. The Angular badge shows the
|
|
147
|
-
[
|
|
150
|
+
[migration guide](https://ngwr.dev/docs/migration) describes the changes in
|
|
151
|
+
each major. The Angular badge shows the Angular versions ngwr supports, and
|
|
152
|
+
[SECURITY.md](https://github.com/thekhegay/ngwr/blob/main/SECURITY.md) lists the
|
|
153
|
+
majors that still get fixes.
|
|
148
154
|
|
|
149
155
|
## AI agents
|
|
150
156
|
|
|
@@ -159,8 +165,8 @@ and read component APIs. Add it to your client:
|
|
|
159
165
|
}
|
|
160
166
|
```
|
|
161
167
|
|
|
162
|
-
The [MCP guide](https://ngwr.dev/
|
|
163
|
-
MCP can use the [agent skill](https://ngwr.dev/
|
|
168
|
+
The [MCP guide](https://ngwr.dev/docs/mcp-server) covers each client. Agents
|
|
169
|
+
without MCP can use the [agent skill](https://ngwr.dev/docs/skills),
|
|
164
170
|
[llms.txt](https://ngwr.dev/llms.txt), or any docs page as markdown by adding
|
|
165
171
|
`.md` to its URL.
|
|
166
172
|
|
package/affix/styles/_index.scss
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// Almost nothing — the directive does the work inline. This layer owns
|
|
2
|
-
//
|
|
3
|
-
// hook a consumer styles the "stuck" state with.
|
|
1
|
+
// Almost nothing — the directive does the work inline. This layer owns the
|
|
2
|
+
// stacking order below and the containing block of a flex or grid parent, and
|
|
3
|
+
// otherwise only exposes the class hook a consumer styles the "stuck" state with.
|
|
4
4
|
//
|
|
5
5
|
// The directive sets `position: sticky; top: <offset>px` on the host and
|
|
6
6
|
// toggles `wr-affix--active` via an IntersectionObserver sentinel.
|
|
@@ -13,3 +13,12 @@
|
|
|
13
13
|
// the active modifier is the consumer's to style.
|
|
14
14
|
z-index: 10;
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
// A flex or grid parent holds the sentinel out of the flow, absolutely
|
|
18
|
+
// positioned, and has to be its containing block or the sentinel stops
|
|
19
|
+
// scrolling with a nested scroller's content. Zero specificity on purpose: any
|
|
20
|
+
// position the author gives the parent wins, a media query included, and a
|
|
21
|
+
// positioned parent is a containing block all the same.
|
|
22
|
+
:where(.wr-affix__container) {
|
|
23
|
+
position: relative;
|
|
24
|
+
}
|
|
@@ -152,6 +152,17 @@
|
|
|
152
152
|
// a 96px one — and the colour and size written here never painted once.
|
|
153
153
|
// Specificity, not order, so it holds for an app that `@use`s the two entry
|
|
154
154
|
// points in either order.
|
|
155
|
+
// The failed image's name, kept for assistive technology when nothing else
|
|
156
|
+
// names the avatar. Taken out of the flex line so it moves nothing, and gone
|
|
157
|
+
// (from the tree too) when initials are projected, since they name it then.
|
|
158
|
+
&__alt {
|
|
159
|
+
position: absolute;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
&__content:not(:empty) ~ &__alt {
|
|
163
|
+
display: none;
|
|
164
|
+
}
|
|
165
|
+
|
|
155
166
|
&__spin.wr-spinner {
|
|
156
167
|
position: absolute;
|
|
157
168
|
// A loading indicator is a status GRAPHIC, which 1.4.11 holds to 3:1: the
|
package/badge/styles/_index.scss
CHANGED
|
@@ -105,10 +105,17 @@
|
|
|
105
105
|
--wr-badge-color: var(--wr-color-on-surface);
|
|
106
106
|
--wr-badge-border: var(--wr-border-base);
|
|
107
107
|
|
|
108
|
+
// An intent sets the three hooks rather than the properties they feed, the way
|
|
109
|
+
// `wr-tag` does, so the hooks the docs list still restyle a coloured badge —
|
|
110
|
+
// which is every badge by default, since `color` defaults to `primary`. Writing
|
|
111
|
+
// `background-color` and `color` here left `--wr-badge-bg` / `-color` / `-border`
|
|
112
|
+
// working only with `[color]="null"`.
|
|
108
113
|
@each $name in theme.$colors {
|
|
109
114
|
&--#{$name} {
|
|
110
|
-
|
|
111
|
-
color: var(--wr-color-#{$name}-contrast);
|
|
115
|
+
--wr-badge-bg: var(--wr-color-#{$name});
|
|
116
|
+
--wr-badge-color: var(--wr-color-#{$name}-contrast);
|
|
117
|
+
// Read only by the outlined ring below.
|
|
118
|
+
--wr-badge-border: var(--wr-color-#{$name}-soft-border);
|
|
112
119
|
}
|
|
113
120
|
}
|
|
114
121
|
|
|
@@ -125,17 +132,16 @@
|
|
|
125
132
|
// draws the same ring from the same token; the tag keeps its 6% fill, because
|
|
126
133
|
// a tag is a chip you can click and a badge is a label you cannot.
|
|
127
134
|
&--outlined {
|
|
128
|
-
|
|
129
|
-
// `--wr-badge-border` rather than `currentcolor
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
135
|
+
--wr-badge-bg: transparent;
|
|
136
|
+
// `--wr-badge-border` rather than `currentcolor`, for the reason the note
|
|
137
|
+
// above gives: a ring drawn in the text colour is a hairline at full label
|
|
138
|
+
// strength around text of exactly that strength. An intent sets the hook to
|
|
139
|
+
// its `-soft-border` in the loop above.
|
|
133
140
|
box-shadow: inset 0 0 0 1px var(--wr-badge-border);
|
|
134
141
|
|
|
135
142
|
@each $name in theme.$colors {
|
|
136
143
|
&.wr-badge--#{$name} {
|
|
137
|
-
color: var(--wr-color-#{$name}-ink);
|
|
138
|
-
box-shadow: inset 0 0 0 1px var(--wr-color-#{$name}-soft-border);
|
|
144
|
+
--wr-badge-color: var(--wr-color-#{$name}-ink);
|
|
139
145
|
}
|
|
140
146
|
}
|
|
141
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@forward './styles';
|
|
1
|
+
@forward './styles/rules';
|
|
@@ -1,26 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
&__char {
|
|
17
|
-
display: inline;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// Hook for consumers to style the scrambled state distinctly (e.g. dim
|
|
21
|
-
// the scramble glyphs). Apply via `[encryptedClassName]`-style overrides
|
|
22
|
-
// by extending `.wr-decrypt-text__char--encrypted`.
|
|
23
|
-
&__char--encrypted {
|
|
24
|
-
/* default: no visual change; consumers override as needed */
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
// Public Sass entry for `@use 'ngwr/bits/decrypt-text'`.
|
|
2
|
+
//
|
|
3
|
+
// Pulls the whole theme so a standalone import still brings in every design
|
|
4
|
+
// token these rules reference, then loads the rules themselves from `_rules`.
|
|
5
|
+
//
|
|
6
|
+
// The split is what keeps the token layer out of the JavaScript bundle.
|
|
7
|
+
// `decrypt-text.scss` is the component's `styleUrl`, and a component stylesheet
|
|
8
|
+
// is its OWN Sass compilation — `@use` only deduplicates within one. So while
|
|
9
|
+
// the app's global stylesheet emits the theme once, forwarding it from here
|
|
10
|
+
// would inline a second, byte-identical copy of `:root` and the box-sizing
|
|
11
|
+
// reset into the compiled component styles, which the library build then embeds
|
|
12
|
+
// in the FESM bundle as a string. `decrypt-text.scss` forwards `_rules` instead,
|
|
13
|
+
// so it carries this component's own CSS and nothing else.
|
|
14
|
+
@use '../../../theme/styles';
|
|
15
|
+
@forward 'rules';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
.wr-decrypt-text {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
white-space: pre-wrap;
|
|
4
|
+
|
|
5
|
+
&__sr-only {
|
|
6
|
+
position: absolute;
|
|
7
|
+
width: 1px;
|
|
8
|
+
height: 1px;
|
|
9
|
+
margin: -1px;
|
|
10
|
+
padding: 0;
|
|
11
|
+
overflow: hidden;
|
|
12
|
+
clip: rect(0, 0, 0, 0);
|
|
13
|
+
border: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&__char {
|
|
17
|
+
display: inline;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// `click` mode makes the host a button. The ring is written from the shared
|
|
21
|
+
// `--wr-focus-ring-*` tokens, the way `theme.focus-ring` writes it: this is the
|
|
22
|
+
// component stylesheet's half, which loads no theme module, since one that did
|
|
23
|
+
// would carry a second copy of the token layer.
|
|
24
|
+
&--interactive {
|
|
25
|
+
cursor: pointer;
|
|
26
|
+
|
|
27
|
+
&:focus-visible {
|
|
28
|
+
outline: var(--wr-focus-ring-width) solid var(--wr-focus-ring-color);
|
|
29
|
+
outline-offset: var(--wr-focus-ring-offset);
|
|
30
|
+
box-shadow: 0 0 0 var(--wr-focus-ring-offset) var(--wr-focus-ring-halo);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Hook for consumers to style the scrambled state distinctly (e.g. dim
|
|
35
|
+
// the scramble glyphs). Apply via `[encryptedClassName]`-style overrides
|
|
36
|
+
// by extending `.wr-decrypt-text__char--encrypted`.
|
|
37
|
+
&__char--encrypted {
|
|
38
|
+
/* default: no visual change; consumers override as needed */
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -2,10 +2,16 @@
|
|
|
2
2
|
position: relative;
|
|
3
3
|
display: block;
|
|
4
4
|
overflow: hidden;
|
|
5
|
-
touch-action: none; // pointer-driven drag — disable browser scroll on touch
|
|
6
5
|
|
|
7
6
|
&__words {
|
|
8
7
|
line-height: 1.4;
|
|
8
|
+
// The words take their ORDER from the text (`dir="auto"` in the template)
|
|
9
|
+
// and their alignment from the page, which is what plain text does: a Latin
|
|
10
|
+
// sentence on an RTL page still sits at the right. Chromium knows only the
|
|
11
|
+
// prefixed keyword and drops the standard one, which Firefox needs.
|
|
12
|
+
// rtl-ok: `match-parent` IS direction-aware — `start` resolved against the parent
|
|
13
|
+
text-align: -webkit-match-parent;
|
|
14
|
+
text-align: match-parent;
|
|
9
15
|
}
|
|
10
16
|
|
|
11
17
|
&__word {
|
|
@@ -18,6 +24,13 @@
|
|
|
18
24
|
cursor: grabbing;
|
|
19
25
|
}
|
|
20
26
|
|
|
27
|
+
// Only a released word takes its touches for the drag. On the whole host this
|
|
28
|
+
// made the block a scroll dead zone on every touch screen — before the words
|
|
29
|
+
// fell, and under reduced motion, where they never do.
|
|
30
|
+
.wr-falling-text--released & {
|
|
31
|
+
touch-action: none;
|
|
32
|
+
}
|
|
33
|
+
|
|
21
34
|
&--hl {
|
|
22
35
|
// A highlighted WORD is text the user reads, decorative motion or not.
|
|
23
36
|
color: var(--wr-color-primary-ink);
|
|
@@ -15,6 +15,15 @@
|
|
|
15
15
|
display: block;
|
|
16
16
|
width: 100%;
|
|
17
17
|
overflow: hidden;
|
|
18
|
+
// The loop is physical (see `&__item` below): the track starts at the left
|
|
19
|
+
// edge, its copies extend to the right, and `translate3d(-offset)` walks it
|
|
20
|
+
// left. Under an inherited RTL the host anchors the over-wide track at its
|
|
21
|
+
// RIGHT edge with the copies running left, and the same translate opened a
|
|
22
|
+
// blank gap of up to one sequence there every cycle. It has to be the host,
|
|
23
|
+
// not the track: which edge an over-wide block sticks to is decided by its
|
|
24
|
+
// containing block's direction. Each item restores the document's direction
|
|
25
|
+
// for its own content below.
|
|
26
|
+
direction: ltr;
|
|
18
27
|
|
|
19
28
|
&--scale-hover {
|
|
20
29
|
padding-top: calc(var(--wr-marquee-height) * 0.1);
|
|
@@ -50,6 +59,13 @@
|
|
|
50
59
|
margin-right: var(--wr-marquee-gap);
|
|
51
60
|
font-size: var(--wr-marquee-height);
|
|
52
61
|
line-height: 1;
|
|
62
|
+
|
|
63
|
+
// `:dir()` reads the DOCUMENT's direction (the `dir` attribute), which the
|
|
64
|
+
// track's CSS `direction: ltr` does not change — so the text inside an item
|
|
65
|
+
// keeps the page's direction while the strip itself stays physical.
|
|
66
|
+
&:dir(rtl) {
|
|
67
|
+
direction: rtl;
|
|
68
|
+
}
|
|
53
69
|
}
|
|
54
70
|
|
|
55
71
|
&__item:last-child {
|
|
@@ -137,6 +153,39 @@
|
|
|
137
153
|
);
|
|
138
154
|
}
|
|
139
155
|
|
|
156
|
+
// Reduced motion. The loop is off and the component renders one copy, so a
|
|
157
|
+
// frozen `overflow: hidden` strip would put every item past the edge out of
|
|
158
|
+
// reach; the host scrolls instead. It is the named region, and it takes a tab
|
|
159
|
+
// stop of its own when no item has one (the component decides), so the
|
|
160
|
+
// keyboard can scroll it. Set from the live preference rather than from the
|
|
161
|
+
// media query below, because the copies that query cannot remove are what
|
|
162
|
+
// would scroll into view.
|
|
163
|
+
&--static {
|
|
164
|
+
overflow-x: auto;
|
|
165
|
+
// Not `visible`: next to an `auto` axis it computes to `auto`, and the
|
|
166
|
+
// scale-on-hover padding is sized to keep a scaled item inside the box.
|
|
167
|
+
overflow-y: hidden;
|
|
168
|
+
overscroll-behavior-x: contain;
|
|
169
|
+
|
|
170
|
+
// The ring is written from the shared `--wr-focus-ring-*` tokens, the way
|
|
171
|
+
// `theme.focus-ring` writes it (see `wr-decrypt-text`), and drawn INSIDE the
|
|
172
|
+
// box: the strip is full width, so an outset ring is cut off by whatever
|
|
173
|
+
// clips the page around it.
|
|
174
|
+
&:focus-visible {
|
|
175
|
+
outline: var(--wr-focus-ring-width) solid var(--wr-focus-ring-color);
|
|
176
|
+
outline-offset: calc(var(--wr-focus-ring-width) * -1);
|
|
177
|
+
box-shadow: inset 0 0 0 calc(var(--wr-focus-ring-width) + var(--wr-focus-ring-offset)) var(--wr-focus-ring-halo);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// The fades hide a seam that a still strip does not have, and on a scroller
|
|
182
|
+
// they would sit over the first and last items for good — absolutely placed
|
|
183
|
+
// inside the scroll container, they scroll away with the content.
|
|
184
|
+
&--static::before,
|
|
185
|
+
&--static::after {
|
|
186
|
+
display: none;
|
|
187
|
+
}
|
|
188
|
+
|
|
140
189
|
@media (prefers-reduced-motion: reduce) {
|
|
141
190
|
.wr-marquee__track {
|
|
142
191
|
transform: translate3d(0, 0, 0) !important;
|
|
@@ -4,6 +4,18 @@
|
|
|
4
4
|
display: inline-flex;
|
|
5
5
|
align-items: baseline;
|
|
6
6
|
|
|
7
|
+
// Same shape as `wr-rotating-text`: the typed text is a fragment most of the
|
|
8
|
+
// time, so the whole sentence is carried once here for a screen reader.
|
|
9
|
+
&__sr-only {
|
|
10
|
+
position: absolute;
|
|
11
|
+
width: 1px;
|
|
12
|
+
height: 1px;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
clip: rect(0 0 0 0);
|
|
15
|
+
clip-path: inset(50%);
|
|
16
|
+
white-space: nowrap;
|
|
17
|
+
}
|
|
18
|
+
|
|
7
19
|
&__content {
|
|
8
20
|
white-space: pre;
|
|
9
21
|
}
|
|
@@ -48,9 +48,12 @@
|
|
|
48
48
|
align-items: center;
|
|
49
49
|
gap: var(--wr-breadcrumbs-gap);
|
|
50
50
|
|
|
51
|
-
// Separator before every item except the first.
|
|
51
|
+
// Separator before every item except the first. The empty alternative text
|
|
52
|
+
// after the `/` keeps it out of the accessibility tree: generated content is
|
|
53
|
+
// read like any other text, so the trail was announced "Home, slash,
|
|
54
|
+
// Components, slash, …" and the current crumb as "slash Current page".
|
|
52
55
|
&:not(:first-child)::before {
|
|
53
|
-
content: var(--wr-breadcrumbs-separator);
|
|
56
|
+
content: var(--wr-breadcrumbs-separator) / '';
|
|
54
57
|
color: var(--wr-breadcrumbs-separator-color);
|
|
55
58
|
user-select: none;
|
|
56
59
|
}
|
|
@@ -224,9 +224,15 @@
|
|
|
224
224
|
flex-direction: row-reverse;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
// Loading — hide label/icon contents but keep their footprint
|
|
227
|
+
// Loading — hide label/icon contents but keep their footprint. The label by
|
|
228
|
+
// `opacity` rather than `visibility`: a `visibility: hidden` label leaves the
|
|
229
|
+
// accessibility tree, and the button was then named after its spinner, so every
|
|
230
|
+
// loading button on a page was called "Loading".
|
|
228
231
|
&--loading {
|
|
229
|
-
.wr-btn__label
|
|
232
|
+
.wr-btn__label {
|
|
233
|
+
opacity: 0;
|
|
234
|
+
}
|
|
235
|
+
|
|
230
236
|
.wr-btn__icon {
|
|
231
237
|
visibility: hidden;
|
|
232
238
|
}
|
|
@@ -324,23 +330,27 @@
|
|
|
324
330
|
}
|
|
325
331
|
|
|
326
332
|
// Solid colored segments share border and background color, so adjacent
|
|
327
|
-
// buttons fuse into one slab — draw a subtle divider on the
|
|
328
|
-
// every non-last segment. Outlined/default variants keep their own visible
|
|
333
|
+
// buttons fuse into one slab — draw a subtle divider on the inline-end edge
|
|
334
|
+
// of every non-last segment. Outlined/default variants keep their own visible
|
|
329
335
|
// borders. On hover/focus the segment raises its own border (z-index above
|
|
330
336
|
// neighbours), which would otherwise double-paint that edge — so drop the
|
|
331
337
|
// seam there and let the raised border own it cleanly.
|
|
332
338
|
@each $name in theme.$colors {
|
|
333
339
|
> .wr-btn--#{$name}:not(.wr-btn--outlined):not(:last-child) {
|
|
334
|
-
// `box-shadow` offsets are physical by spec
|
|
335
|
-
//
|
|
336
|
-
//
|
|
340
|
+
// rtl-ok: `box-shadow` offsets are physical by spec, with no logical form,
|
|
341
|
+
// so the inline-end edge is spelled once per direction. `:dir()` reads the
|
|
342
|
+
// element's own direction, so no ancestor selector is involved.
|
|
337
343
|
box-shadow: inset -1px 0 0 color-mix(in srgb, var(--wr-color-black) 20%, transparent);
|
|
338
344
|
|
|
345
|
+
&:dir(rtl) {
|
|
346
|
+
box-shadow: inset 1px 0 0 color-mix(in srgb, var(--wr-color-black) 20%, transparent);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// After the `:dir(rtl)` rule, which it ties on specificity.
|
|
339
350
|
&:hover,
|
|
340
351
|
&:focus-visible {
|
|
341
352
|
box-shadow: none;
|
|
342
353
|
}
|
|
343
|
-
// rtl-ok: box-shadow has no logical equivalent — see above
|
|
344
354
|
}
|
|
345
355
|
}
|
|
346
356
|
}
|
|
@@ -35,6 +35,14 @@
|
|
|
35
35
|
height: 100%;
|
|
36
36
|
transition: transform var(--wr-duration-slow) var(--wr-ease-out);
|
|
37
37
|
will-change: transform;
|
|
38
|
+
|
|
39
|
+
// The slide still changes — autoplay included — it just no longer travels
|
|
40
|
+
// across the full width of the carousel to get there: a full-width panel
|
|
41
|
+
// moving on its own is the motion the preference asks to remove. Bootstrap's
|
|
42
|
+
// carousel makes the same call.
|
|
43
|
+
@media (prefers-reduced-motion: reduce) {
|
|
44
|
+
transition: none;
|
|
45
|
+
}
|
|
38
46
|
}
|
|
39
47
|
}
|
|
40
48
|
|
|
@@ -79,11 +87,17 @@
|
|
|
79
87
|
background var(--wr-transition-base),
|
|
80
88
|
transform var(--wr-transition-base);
|
|
81
89
|
|
|
82
|
-
&:hover {
|
|
90
|
+
&:hover:not(:disabled) {
|
|
83
91
|
background: var(--wr-color-surface);
|
|
84
92
|
transform: translateY(-50%) scale(1.05);
|
|
85
93
|
}
|
|
86
94
|
|
|
95
|
+
// Only without `loop`, at the end the arrow points past.
|
|
96
|
+
&:disabled {
|
|
97
|
+
cursor: not-allowed;
|
|
98
|
+
opacity: var(--wr-disabled-opacity);
|
|
99
|
+
}
|
|
100
|
+
|
|
87
101
|
// The track's motion is direction-aware now — `carousel.ts` signs its
|
|
88
102
|
// `translateX` and its swipe threshold from `Directionality` — so the arrows
|
|
89
103
|
// follow the reading direction too. "Previous" is where the earlier slides
|
|
@@ -35,19 +35,41 @@
|
|
|
35
35
|
--wr-bar-chart-value-font-size: var(--wr-text-xs);
|
|
36
36
|
--wr-bar-chart-value-line-height: var(--wr-leading-none);
|
|
37
37
|
|
|
38
|
+
flex: none;
|
|
39
|
+
// Bounded by its column and ellipsised, as the label under it is. With no bound,
|
|
40
|
+
// forty five-digit values at 1280px overlapped their neighbours into one smear and
|
|
41
|
+
// the outermost hung past the chart. The tooltip and the column's name carry the
|
|
42
|
+
// whole number.
|
|
43
|
+
max-width: 100%;
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
text-overflow: ellipsis;
|
|
46
|
+
white-space: nowrap;
|
|
38
47
|
font-size: var(--wr-bar-chart-value-font-size);
|
|
39
48
|
color: var(--wr-color-on-surface-muted);
|
|
40
49
|
font-variant-numeric: tabular-nums;
|
|
41
50
|
line-height: var(--wr-bar-chart-value-line-height);
|
|
42
51
|
}
|
|
43
52
|
|
|
53
|
+
// The component writes the bar's share of the plot as its `flex-grow`, from 0
|
|
54
|
+
// to 1. Factors that sum to less than 1 hand out only that fraction of the free
|
|
55
|
+
// space, so the bar gets exactly its share of what the column has left after
|
|
56
|
+
// the value above it, and the value rides on the bar's top. It was a `height`
|
|
57
|
+
// percentage of the WHOLE column, so the tallest bars plus their value
|
|
58
|
+
// overflowed it and flex-shrink took the difference out of them alone:
|
|
59
|
+
// measured in Chromium, WebKit and Firefox, 24 drew at 183px beside 12 at
|
|
60
|
+
// 99.5px, and 22 at 182.4px — the same height as 24.
|
|
44
61
|
&__bar {
|
|
45
62
|
--wr-bar-chart-bar-radius: var(--wr-border-radius-sm);
|
|
46
63
|
|
|
64
|
+
flex: 0 0 0;
|
|
47
65
|
width: 100%;
|
|
48
66
|
border-radius: var(--wr-bar-chart-bar-radius) var(--wr-bar-chart-bar-radius) 0 0;
|
|
49
|
-
transition:
|
|
67
|
+
transition: flex-grow var(--wr-duration-slow) var(--wr-ease-out);
|
|
50
68
|
min-height: 1px;
|
|
69
|
+
// The bar is an inline `background`, which forced colors resets to `Canvas`:
|
|
70
|
+
// every bar vanished into the page and left its value floating over the
|
|
71
|
+
// baseline. The SVG charts keep their fills there, so the HTML marks do too.
|
|
72
|
+
forced-color-adjust: none;
|
|
51
73
|
}
|
|
52
74
|
|
|
53
75
|
&__labels {
|
|
@@ -90,6 +90,10 @@
|
|
|
90
90
|
// border-radius tokens (5px+) would read as near-circles at this size.
|
|
91
91
|
border-radius: 2px;
|
|
92
92
|
transition: transform var(--wr-transition-base);
|
|
93
|
+
// An inline `background`, which forced colors resets to `Canvas`: the whole
|
|
94
|
+
// year vanished and left the month and weekday labels. The SVG charts keep
|
|
95
|
+
// their fills there, so the squares do too.
|
|
96
|
+
forced-color-adjust: none;
|
|
93
97
|
|
|
94
98
|
&:hover {
|
|
95
99
|
transform: scale(1.4);
|
|
@@ -89,6 +89,9 @@
|
|
|
89
89
|
width: 0.625rem;
|
|
90
90
|
height: 0.625rem;
|
|
91
91
|
border-radius: 50%;
|
|
92
|
+
// The key to the slices, whose SVG fills forced colors keeps — so an inline
|
|
93
|
+
// `background` reset to `Canvas` left the legend pointing at nothing.
|
|
94
|
+
forced-color-adjust: none;
|
|
92
95
|
}
|
|
93
96
|
|
|
94
97
|
&__legend-label {
|