ngwr 13.0.1 → 14.0.1
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 +69 -13
- package/aurora/aurora.scss +1 -1
- package/aurora/styles/_dark.scss +21 -0
- package/aurora/styles/_index.scss +11 -30
- package/aurora/styles/_rules.scss +25 -0
- package/border-glow/styles/_dark.scss +46 -0
- package/border-glow/styles/_index.scss +5 -0
- package/border-glow/styles/_rules.scss +0 -31
- package/button/styles/_index.scss +16 -0
- package/color-picker/styles/_index.scss +43 -5
- package/event-calendar/styles/_index.scss +15 -0
- package/fesm2022/ngwr-action-sheet.mjs +3 -3
- package/fesm2022/ngwr-affix.mjs +3 -3
- package/fesm2022/ngwr-alert.mjs +7 -7
- package/fesm2022/ngwr-alert.mjs.map +1 -1
- package/fesm2022/ngwr-anchor.mjs +3 -3
- package/fesm2022/ngwr-aurora.mjs +4 -4
- package/fesm2022/ngwr-aurora.mjs.map +1 -1
- package/fesm2022/ngwr-avatar.mjs +3 -3
- package/fesm2022/ngwr-back-top.mjs +14 -4
- package/fesm2022/ngwr-back-top.mjs.map +1 -1
- package/fesm2022/ngwr-badge.mjs +6 -6
- package/fesm2022/ngwr-bar-chart.mjs +3 -3
- package/fesm2022/ngwr-blur-text.mjs +16 -5
- 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 +7 -7
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +3 -3
- package/fesm2022/ngwr-button.mjs +88 -10
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-heatmap.mjs +3 -3
- package/fesm2022/ngwr-calendar-testing.mjs +15 -0
- package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +53 -7
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +9 -9
- package/fesm2022/ngwr-carousel.mjs +6 -6
- package/fesm2022/ngwr-cascader.mjs +4 -4
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +6 -6
- package/fesm2022/ngwr-circular-text.mjs +23 -4
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +3 -3
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-collapse.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker-testing.mjs +23 -7
- package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker.mjs +93 -14
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +29 -5
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-confetti.mjs +3 -3
- package/fesm2022/ngwr-context-menu.mjs +18 -12
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-counter.mjs +6 -6
- package/fesm2022/ngwr-date-adapters-fns.mjs +104 -36
- package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapters-luxon.mjs +3 -3
- package/fesm2022/ngwr-date-picker-testing.mjs +10 -2
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +118 -28
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-date.mjs +483 -82
- package/fesm2022/ngwr-date.mjs.map +1 -1
- 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 +15 -15
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-divider.mjs +3 -3
- package/fesm2022/ngwr-donut-chart.mjs +3 -3
- package/fesm2022/ngwr-drag-drop.mjs +37 -9
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +18 -18
- package/fesm2022/ngwr-dropdown.mjs +29 -12
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar.mjs +6 -6
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text.mjs +3 -3
- package/fesm2022/ngwr-file-upload.mjs +55 -15
- package/fesm2022/ngwr-file-upload.mjs.map +1 -1
- package/fesm2022/ngwr-form-testing.mjs +13 -7
- package/fesm2022/ngwr-form-testing.mjs.map +1 -1
- package/fesm2022/ngwr-form.mjs +44 -25
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +3 -3
- package/fesm2022/ngwr-gauge.mjs +3 -3
- package/fesm2022/ngwr-glitch-text.mjs +3 -3
- package/fesm2022/ngwr-gradient-text.mjs +3 -3
- package/fesm2022/ngwr-hotkey.mjs +6 -6
- package/fesm2022/ngwr-i18n-en.mjs +63 -1
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +28 -1
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +159 -31
- package/fesm2022/ngwr-i18n.mjs.map +1 -1
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper.mjs +3 -3
- package/fesm2022/ngwr-input-number.mjs +5 -5
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +23 -5
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +37 -26
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob-testing.mjs.map +1 -1
- package/fesm2022/ngwr-knob.mjs +22 -4
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- 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 +3 -3
- package/fesm2022/ngwr-list.mjs +7 -7
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar-router.mjs +73 -0
- package/fesm2022/ngwr-loading-bar-router.mjs.map +1 -0
- package/fesm2022/ngwr-loading-bar.mjs +27 -38
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown.mjs +6 -6
- package/fesm2022/ngwr-marquee.mjs +3 -3
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-mention.mjs +109 -19
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +6 -6
- 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 +11 -10
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +67 -32
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +21 -21
- package/fesm2022/ngwr-platform.mjs +9 -9
- package/fesm2022/ngwr-popconfirm.mjs +7 -6
- package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
- package/fesm2022/ngwr-popover.mjs +7 -6
- 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 +3 -3
- package/fesm2022/ngwr-radio.mjs +6 -6
- package/fesm2022/ngwr-rating.mjs +48 -22
- package/fesm2022/ngwr-rating.mjs.map +1 -1
- package/fesm2022/ngwr-result.mjs +12 -12
- package/fesm2022/ngwr-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented.mjs +12 -8
- package/fesm2022/ngwr-segmented.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +217 -59
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +7 -7
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +3 -3
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs +12 -8
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline.mjs +3 -3
- package/fesm2022/ngwr-speed-dial.mjs +3 -3
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-split-text.mjs +3 -3
- package/fesm2022/ngwr-splitter-testing.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 +7 -6
- package/fesm2022/ngwr-squircle.mjs.map +1 -1
- package/fesm2022/ngwr-star-border.mjs +4 -4
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +44 -13
- package/fesm2022/ngwr-statistic.mjs.map +1 -1
- package/fesm2022/ngwr-stepper.mjs +6 -6
- package/fesm2022/ngwr-storage.mjs +11 -3
- package/fesm2022/ngwr-storage.mjs.map +1 -1
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-table.mjs +51 -28
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-router.mjs +158 -0
- package/fesm2022/ngwr-tabs-router.mjs.map +1 -0
- package/fesm2022/ngwr-tabs-testing.mjs +13 -11
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +104 -16
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +46 -6
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-theme.mjs +90 -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 +116 -11
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour.mjs +6 -6
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +4 -4
- package/fesm2022/ngwr-transfer.mjs.map +1 -1
- package/fesm2022/ngwr-tree.mjs +35 -12
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +3 -3
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-utils.mjs +37 -1
- 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 +3 -3
- package/fesm2022/ngwr-waves.mjs +4 -4
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window-testing.mjs +10 -2
- package/fesm2022/ngwr-window-testing.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +15 -15
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/i18n/en.json +33 -6
- package/i18n/ru.json +33 -6
- package/llms-full.txt +29 -20
- package/llms.txt +127 -25
- package/mcp/catalog.js +3 -3
- package/mcp/providers.js +11 -0
- package/package.json +9 -1
- package/schematics/migrations/v13/index.js +101 -0
- package/schematics/migrations/v14/index.js +422 -0
- package/schematics/migrations.json +10 -0
- package/schematics/page/templates.js +1 -1
- package/schematics/use/symbol-map.json +1 -0
- package/shiny-text/styles/_dark.scss +20 -0
- package/shiny-text/styles/_index.scss +5 -0
- package/shiny-text/styles/_rules.scss +0 -4
- package/skills/ngwr/SKILL.md +4 -1
- package/skills/ngwr/references/catalog.md +2 -0
- package/skills/ngwr/references/setup.md +4 -0
- package/spotlight-card/styles/_dark.scss +21 -0
- package/spotlight-card/styles/_index.scss +5 -0
- package/spotlight-card/styles/_rules.scss +0 -6
- package/star-border/styles/_dark.scss +21 -0
- package/star-border/styles/_index.scss +5 -0
- package/star-border/styles/_rules.scss +0 -5
- package/stepper/styles/_index.scss +19 -1
- package/textarea/styles/_index.scss +14 -6
- package/theme/styles/_colors.scss +102 -0
- package/theme/styles/_focus.scss +31 -1
- package/tilt-card/styles/_dark.scss +21 -0
- package/tilt-card/styles/_index.scss +5 -0
- package/tilt-card/styles/_rules.scss +0 -5
- package/toast/styles/_index.scss +12 -4
- package/types/ngwr-alert.d.ts +3 -3
- package/types/ngwr-blur-text.d.ts +8 -0
- package/types/ngwr-button.d.ts +45 -2
- package/types/ngwr-calendar-testing.d.ts +21 -4
- package/types/ngwr-calendar.d.ts +37 -0
- package/types/ngwr-circular-text.d.ts +9 -0
- package/types/ngwr-collapse.d.ts +19 -15
- package/types/ngwr-color-picker-testing.d.ts +10 -4
- package/types/ngwr-color-picker.d.ts +70 -2
- package/types/ngwr-command-palette.d.ts +14 -0
- package/types/ngwr-context-menu.d.ts +1 -1
- package/types/ngwr-date-adapters-fns.d.ts +71 -29
- package/types/ngwr-date-picker-testing.d.ts +206 -185
- package/types/ngwr-date-picker.d.ts +7 -0
- package/types/ngwr-date.d.ts +143 -13
- package/types/ngwr-drag-drop.d.ts +19 -0
- package/types/ngwr-dropdown.d.ts +18 -2
- package/types/ngwr-event-calendar-testing.d.ts +12 -9
- package/types/ngwr-file-upload.d.ts +31 -3
- package/types/ngwr-form-testing.d.ts +13 -7
- package/types/ngwr-form.d.ts +47 -12
- package/types/ngwr-i18n.d.ts +89 -7
- package/types/ngwr-input-number.d.ts +1 -1
- package/types/ngwr-input-otp.d.ts +3 -0
- package/types/ngwr-input.d.ts +13 -5
- package/types/ngwr-knob-testing.d.ts +8 -4
- package/types/ngwr-knob.d.ts +18 -0
- package/types/ngwr-loading-bar-router.d.ts +35 -0
- package/types/ngwr-loading-bar.d.ts +19 -9
- package/types/ngwr-mention.d.ts +13 -0
- package/types/ngwr-pagination-testing.d.ts +11 -10
- package/types/ngwr-pagination.d.ts +39 -10
- package/types/ngwr-popconfirm.d.ts +1 -1
- package/types/ngwr-popover.d.ts +1 -1
- package/types/ngwr-rating.d.ts +25 -4
- package/types/ngwr-segmented.d.ts +1 -0
- package/types/ngwr-select.d.ts +110 -19
- package/types/ngwr-slider.d.ts +1 -0
- package/types/ngwr-splitter-testing.d.ts +9 -4
- package/types/ngwr-squircle.d.ts +1 -1
- package/types/ngwr-statistic.d.ts +22 -2
- package/types/ngwr-storage.d.ts +39 -1
- package/types/ngwr-table.d.ts +24 -5
- package/types/ngwr-tabs-router.d.ts +67 -0
- package/types/ngwr-tabs-testing.d.ts +12 -10
- package/types/ngwr-tabs.d.ts +103 -6
- package/types/ngwr-textarea.d.ts +29 -0
- package/types/ngwr-theme.d.ts +92 -2
- package/types/ngwr-toast.d.ts +53 -0
- package/types/ngwr-tree.d.ts +10 -2
- package/types/ngwr-utils.d.ts +33 -1
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-window-testing.d.ts +11 -3
- package/types/ngwr-window.d.ts +11 -4
- package/waves/styles/_dark.scss +19 -0
- package/waves/styles/_index.scss +5 -0
- package/waves/styles/_rules.scss +0 -3
- package/window/styles/_index.scss +1 -1
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ value controls implement `FormValueControl` / `FormCheckboxControl` themselves,
|
|
|
19
19
|
so `[formField]` writes the component's own `value` / `checked` model — there
|
|
20
20
|
is not one `ControlValueAccessor` in the library. Zoneless by construction, not
|
|
21
21
|
zoneless-compatible: signal inputs, signal state, `afterNextRender()` for DOM
|
|
22
|
-
work, and no `@NgModule` or `@Input()` decorator anywhere in the source.
|
|
22
|
+
work, and no `@NgModule` or `@Input()` decorator anywhere in the source. 204
|
|
23
23
|
tree-shakable entry points, on `@angular/cdk` for overlay, portal and a11y
|
|
24
24
|
primitives.
|
|
25
25
|
|
|
@@ -63,8 +63,10 @@ Classic `[(ngModel)]` and reactive forms still work — Angular 22 synthesises t
|
|
|
63
63
|
accessor for a signal-forms control — and every control is usable standalone
|
|
64
64
|
through its two-way `[(value)]` / `[(checked)]` model.
|
|
65
65
|
|
|
66
|
-
> **Status:** active development.
|
|
67
|
-
>
|
|
66
|
+
> **Status:** active development. v14 is the current major line (Angular 22 peer).
|
|
67
|
+
> Upgrading? `ng update ngwr@14` rewrites v14's six renames and reports the
|
|
68
|
+
> changes no codemod should guess at — the
|
|
69
|
+
> [migration guide](https://ngwr.dev/start/migration) walks every step.
|
|
68
70
|
> [Open an issue](https://github.com/thekhegay/ngwr/issues/new)
|
|
69
71
|
> if something breaks or feels wrong.
|
|
70
72
|
|
|
@@ -84,9 +86,55 @@ through its two-way `[(value)]` / `[(checked)]` model.
|
|
|
84
86
|
| `lucide` _(optional)_ | `>= 1.0.0` |
|
|
85
87
|
|
|
86
88
|
TypeScript `~6.0.x` (Angular 22's compiler declares `typescript >=6.0 <6.1`) and
|
|
87
|
-
a Node version Angular 22 accepts — `^22.22.3 || ^24.15.0 || >=26`.
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
a Node version Angular 22 accepts — `^22.22.3 || ^24.15.0 || >=26`. ngwr itself
|
|
90
|
+
declares neither: no `engines` field and no TypeScript peer, because it ships
|
|
91
|
+
pre-compiled bundles and `.d.ts` files, so the versions that bind are the ones
|
|
92
|
+
your Angular names. Contributing to this repo needs the narrower
|
|
93
|
+
`^24.16.0 || >=26` it pins (`.nvmrc` says 24), plus pnpm ≥ 11.10.
|
|
94
|
+
|
|
95
|
+
**The floor is real; the missing ceiling promises nothing.** ngwr ships
|
|
96
|
+
partially compiled, and the floor is enforced by the bundles rather than by the
|
|
97
|
+
range — but by a minority of them, which is why the failure is confusing when it
|
|
98
|
+
arrives. Of 654 declarations, **25 record `minVersion: "22.0.0"`** (the service
|
|
99
|
+
declarations, across 22 files); the rest are older shapes an old linker reads
|
|
100
|
+
fine. So the install succeeds — every package manager treats an unmet peer as a
|
|
101
|
+
warning — and `ng build` then dies inside one `fesm2022` bundle with a message
|
|
102
|
+
that names no version at all. Read the peer warning at install time. Above the
|
|
103
|
+
floor, an open-ended range only means your package manager will not stop you
|
|
104
|
+
installing next to an Angular this release was never built against.
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
grep -ho 'minVersion: *"[^"]*"' node_modules/ngwr/fesm2022/*.mjs | sort | uniq -c
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Versioning and support
|
|
111
|
+
|
|
112
|
+
Semver, with the one rule that matters made mechanical: **a breaking change
|
|
113
|
+
cannot ride a minor or a patch.** `release:prepare` refuses `--bump=minor` and
|
|
114
|
+
`--bump=patch` when any commit since the last release tag carries a `!` type or
|
|
115
|
+
a `BREAKING CHANGE:` footer — it prints the offending subjects and exits
|
|
116
|
+
non-zero, and since a release is cut only by that workflow, the refusal is the
|
|
117
|
+
release. It exists because the opposite shipped: 12.2.0 was a minor carrying a
|
|
118
|
+
`BREAKING CHANGES` section, and `^12.1.0` picked it up silently. So a caret
|
|
119
|
+
range on a major is a safe range now. It was not then. What the guard cannot see
|
|
120
|
+
is a break nobody labelled as one — it reads commit metadata, which is what
|
|
121
|
+
commitlint on every commit and PR title gives it to read.
|
|
122
|
+
|
|
123
|
+
Public API is three surfaces, and all three move only in a major: the exported
|
|
124
|
+
TypeScript, the `.wr-*` BEM class names (components ship
|
|
125
|
+
`ViewEncapsulation.None`), and the `--wr-*` custom properties. Anything marked
|
|
126
|
+
`@internal` is not API, and the marker survives into the shipped types —
|
|
127
|
+
`grep -rn "@internal" node_modules/ngwr/types` is the whole check. A few helpers
|
|
128
|
+
are exported, unmarked and undocumented; treat those as unsupported until a page
|
|
129
|
+
describes them, and open an issue naming the one you need.
|
|
130
|
+
|
|
131
|
+
Two lines are supported at a time: the current major in full, the one before it
|
|
132
|
+
for mechanical security fixes only, and that second row ends when the next major
|
|
133
|
+
ships. Read it against the cadence rather than a calendar — eight majors shipped
|
|
134
|
+
between 2026-06-12 (v7.0.0) and 2026-09-04 (v14.0.0). Table, targets and the
|
|
135
|
+
private reporting route: [SECURITY.md](SECURITY.md). Full policy, with the
|
|
136
|
+
commands to check every claim in it against the installed package:
|
|
137
|
+
<https://ngwr.dev/start/versioning>.
|
|
90
138
|
|
|
91
139
|
## Install
|
|
92
140
|
|
|
@@ -111,8 +159,12 @@ yarn add ngwr @angular/cdk
|
|
|
111
159
|
|
|
112
160
|
Beyond Angular itself, `@angular/cdk` and `@angular/forms` are the required
|
|
113
161
|
peers — forms because the value controls implement its Signal Forms interfaces.
|
|
114
|
-
`@angular/router` is optional,
|
|
115
|
-
|
|
162
|
+
`@angular/router` is optional, and since v14 nothing pulls it in unless you ask:
|
|
163
|
+
a `<wr-tab routerLink>` needs `WrTabsRouting` from `ngwr/tabs/router` on the
|
|
164
|
+
strip, and `<wr-loading-bar>` follows navigation only once you add
|
|
165
|
+
`provideWrLoadingBarRouter()` from `ngwr/loading-bar/router`. Both used to be
|
|
166
|
+
automatic, which cost every app 66–76 kB of router whether it routed or not.
|
|
167
|
+
A stock `ng new` app already ships forms and router, so
|
|
116
168
|
`@angular/cdk` is the only one you have to add — which is why it is on the
|
|
117
169
|
install lines above. Add an icon set and a date library only if you use them —
|
|
118
170
|
`lucide` (or `feather-icons`) for the icon adapters, and `date-fns` or `luxon`
|
|
@@ -168,9 +220,13 @@ Components render with `ViewEncapsulation.None`, so their `.wr-*` BEM classes an
|
|
|
168
220
|
their `--wr-*` custom properties are reachable — and both are treated as public
|
|
169
221
|
API: renaming one is a breaking change carrying a migration note. The DOM *shape*
|
|
170
222
|
is not. Which element holds which class, how deeply they nest, whether a wrapper
|
|
171
|
-
exists — all of that may move in a minor. A rule keyed on one class survives
|
|
172
|
-
descendant selector that encodes a structure
|
|
173
|
-
does not.
|
|
223
|
+
exists — all of that may move in a minor. A rule keyed on one class survives a
|
|
224
|
+
rename; a descendant selector that encodes a structure
|
|
225
|
+
(`.wr-select__trigger > span > svg`) does not. And a surviving rule is not a
|
|
226
|
+
winning one: 27 components ship their own stylesheet, which Angular emits after
|
|
227
|
+
your linked `styles.css`, so a single-class override loses to it at equal
|
|
228
|
+
specificity — reach for their `--wr-*` token instead. See
|
|
229
|
+
[Theming](https://ngwr.dev/guides/theming) for the full statement and the list.
|
|
174
230
|
|
|
175
231
|
## Quick start
|
|
176
232
|
|
|
@@ -314,7 +370,7 @@ Math (`clamp`, `round`), coercion (`numAttr`), css helpers (`resolveCssSize`, `g
|
|
|
314
370
|
- **CDK-powered.** Overlays, portals, and a11y come from `@angular/cdk`. We add `provideWrOverlay()` so NGWR overlays never collide with other CDK consumers (Material, NG-ZORRO, etc.).
|
|
315
371
|
- **Mobile & responsive.** Overlays collapse to bottom-sheets on small screens (`provideWrResponsiveOverlays()`), touch targets grow to ≥44px on coarse pointers, a `touch` density preset enlarges the nine control families that read the multipliers, and drawer / lightbox / toast / carousel respond to swipe gestures. Fixed surfaces respect `env(safe-area-inset-*)`, and layout components (`descriptions`, `stepper`, `page-header`, `toolbar`, `pagination`, `table`) reflow to their container via container queries. [Guide](https://ngwr.dev/guides/mobile).
|
|
316
372
|
- **Table, batteries included.** `wr-table` covers column pinning / resizing / drag-reorder, row selection, expandable rows, grouping, tree rows (`childrenKey` — the forest flattens into the same `<tbody>`, so pinning and cell templates keep working at every depth, and the table announces a `treegrid`), summary rows, CSV export (`exportCsv()`, dependency-free RFC 4180) and a virtualized body — all opt-in inputs on the one component. Excel (`.xlsx`) export is deliberately not shipped: it would mean a third-party dependency.
|
|
317
|
-
- **Tree-shakable.**
|
|
373
|
+
- **Tree-shakable.** 204 separate ng-packagr entry points — import only what you use. Per-component FESM bundles are small: a median of ~4 KB gzipped, the heaviest (`ngwr/markdown`) ~23 KB. Every runtime bundle together gzips to ~690 KB — the 70 `ngwr/<name>/testing` harnesses aside, since they never reach an app bundle — but real apps pull a handful of entries. The only runtime dependency is `tslib`.
|
|
318
374
|
- **Modular SCSS.** Component styles are scoped through CSS custom properties. Theme tokens live in `ngwr/theme`; utilities (`grid`, `reset`) and the breakpoints SCSS API are opt-in.
|
|
319
375
|
- **Tree-shaken icons.** `provideWrIcons(lucideIcons({ plus: Plus }))` registers only the icons you actually import. Dev-mode validation warns about unregistered icons.
|
|
320
376
|
- **Reactbits ports, dependency-free.** All animation ports are reimplemented with vanilla DOM + Web Animations API / `IntersectionObserver` / `requestAnimationFrame` / raw WebGL — no GSAP, no `motion/react`, no `matter-js`, no `ogl`.
|
|
@@ -345,7 +401,7 @@ pnpm dev # ng serve --o (showcase)
|
|
|
345
401
|
pnpm test # ng test lib (vitest)
|
|
346
402
|
pnpm build:lib # ng build lib + ai assets + dist assets + i18n json + schematics + mcp server
|
|
347
403
|
pnpm build:showcase # ai assets + showcase build + sitemap + markdown twins
|
|
348
|
-
pnpm lint # ng lint + eslint scripts + stylelint + colour parity + rtl
|
|
404
|
+
pnpm lint # ng lint + eslint scripts + stylelint + colour parity + rtl + registry + tokens
|
|
349
405
|
```
|
|
350
406
|
|
|
351
407
|
## Authors
|
package/aurora/aurora.scss
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@forward './styles';
|
|
1
|
+
@forward './styles/rules';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Dark theme: restore the neon reactbits palette.
|
|
2
|
+
//
|
|
3
|
+
// Keyed on `theme.dark-selector()`, never on a literal `[data-theme='dark']`.
|
|
4
|
+
// The attribute is renameable — `@use 'ngwr' with ($theme-attribute: '…')`
|
|
5
|
+
// alongside `provideWrTheme({ attribute: '…' })` — and a hand-written literal
|
|
6
|
+
// misses the rename in both directions: this block stops firing under the
|
|
7
|
+
// configured name, and it keeps firing under `data-theme`, which is the
|
|
8
|
+
// attribute a foreign design system owns and the rename exists to escape.
|
|
9
|
+
//
|
|
10
|
+
// It lives outside the `styleUrl` closure for the same reason. A component
|
|
11
|
+
// stylesheet is compiled when the LIBRARY is built, where `$theme-attribute` can
|
|
12
|
+
// only ever be the default, and Angular appends that copy after the app's linked
|
|
13
|
+
// sheet — so an inlined literal would not merely be dead, it would outrank the
|
|
14
|
+
// correctly-named rule beside it.
|
|
15
|
+
@use '../../theme/styles' as theme;
|
|
16
|
+
|
|
17
|
+
#{theme.dark-selector()} .wr-aurora {
|
|
18
|
+
--wr-aurora-stop-1: #5227ff;
|
|
19
|
+
--wr-aurora-stop-2: #7cff67;
|
|
20
|
+
--wr-aurora-stop-3: #5227ff;
|
|
21
|
+
}
|
|
@@ -1,30 +1,11 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
position: absolute;
|
|
13
|
-
inset: 0;
|
|
14
|
-
display: block;
|
|
15
|
-
overflow: hidden;
|
|
16
|
-
pointer-events: none;
|
|
17
|
-
z-index: 0;
|
|
18
|
-
|
|
19
|
-
&__canvas {
|
|
20
|
-
display: block;
|
|
21
|
-
width: 100%;
|
|
22
|
-
height: 100%;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
[data-theme='dark'] .wr-aurora {
|
|
27
|
-
--wr-aurora-stop-1: #5227ff;
|
|
28
|
-
--wr-aurora-stop-2: #7cff67;
|
|
29
|
-
--wr-aurora-stop-3: #5227ff;
|
|
30
|
-
}
|
|
1
|
+
// Public Sass entry for `@use 'ngwr/aurora'`.
|
|
2
|
+
//
|
|
3
|
+
// `aurora.scss` — the component's `styleUrl` — forwards `_rules` and nothing
|
|
4
|
+
// else, so the compiled component styles carry this component's own CSS and no
|
|
5
|
+
// second copy of the theme layer. `_dark.scss` is loaded from HERE rather than
|
|
6
|
+
// from `_rules` because its selector is built out of `$theme-attribute`, which
|
|
7
|
+
// only a stylesheet compiled by the consuming app can configure.
|
|
8
|
+
@use '../../theme/styles';
|
|
9
|
+
|
|
10
|
+
@forward 'rules';
|
|
11
|
+
@forward 'dark';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Aurora background (reactbits port). A WebGL2 canvas fills the nearest
|
|
2
|
+
// positioned ancestor; all the visuals live in the fragment shader.
|
|
3
|
+
|
|
4
|
+
.wr-aurora {
|
|
5
|
+
// Theme-default colour stops (overridden by `[colorStops]`): vivid
|
|
6
|
+
// indigo → emerald on light surfaces; dark restores the neon
|
|
7
|
+
// reactbits palette — see `_dark.scss`, which is loaded by the public Sass
|
|
8
|
+
// entry only.
|
|
9
|
+
--wr-aurora-stop-1: #6366f1;
|
|
10
|
+
--wr-aurora-stop-2: #10b981;
|
|
11
|
+
--wr-aurora-stop-3: #6366f1;
|
|
12
|
+
|
|
13
|
+
position: absolute;
|
|
14
|
+
inset: 0;
|
|
15
|
+
display: block;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
pointer-events: none;
|
|
18
|
+
z-index: 0;
|
|
19
|
+
|
|
20
|
+
&__canvas {
|
|
21
|
+
display: block;
|
|
22
|
+
width: 100%;
|
|
23
|
+
height: 100%;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Dark theme: restore the reactbits look — pale halo + additive blends.
|
|
2
|
+
//
|
|
3
|
+
// Keyed on `theme.dark-selector()`, never on a literal `[data-theme='dark']`.
|
|
4
|
+
// The attribute is renameable — `@use 'ngwr' with ($theme-attribute: '…')`
|
|
5
|
+
// alongside `provideWrTheme({ attribute: '…' })` — and a hand-written literal
|
|
6
|
+
// misses the rename in both directions: this block stops firing under the
|
|
7
|
+
// configured name, and it keeps firing under `data-theme`, which is the
|
|
8
|
+
// attribute a foreign design system owns and the rename exists to escape.
|
|
9
|
+
//
|
|
10
|
+
// It lives outside the `styleUrl` closure for the same reason. A component
|
|
11
|
+
// stylesheet is compiled when the LIBRARY is built, where `$theme-attribute` can
|
|
12
|
+
// only ever be the default, and Angular appends that copy after the app's linked
|
|
13
|
+
// sheet — so an inlined literal would not merely be dead, it would outrank the
|
|
14
|
+
// correctly-named rule beside it.
|
|
15
|
+
@use '../../theme/styles' as theme;
|
|
16
|
+
|
|
17
|
+
#{theme.dark-selector()} .wr-border-glow {
|
|
18
|
+
--wr-border-glow-outline: rgb(255 255 255 / 15%);
|
|
19
|
+
--wr-border-glow-halo-blend: plus-lighter;
|
|
20
|
+
--wr-border-glow-fill-blend: soft-light;
|
|
21
|
+
--wr-border-glow-fill-scale: 1;
|
|
22
|
+
/* stylelint-disable-next-line */
|
|
23
|
+
--wr-border-glow-edge-shadow:
|
|
24
|
+
inset 0 0 0 1px var(--wr-border-glow-color), inset 0 0 1px 0 var(--wr-border-glow-color-60),
|
|
25
|
+
inset 0 0 3px 0 var(--wr-border-glow-color-50), inset 0 0 6px 0 var(--wr-border-glow-color-40),
|
|
26
|
+
inset 0 0 15px 0 var(--wr-border-glow-color-30), inset 0 0 25px 2px var(--wr-border-glow-color-20),
|
|
27
|
+
inset 0 0 50px 2px var(--wr-border-glow-color-10), 0 0 1px 0 var(--wr-border-glow-color-60),
|
|
28
|
+
0 0 3px 0 var(--wr-border-glow-color-50), 0 0 6px 0 var(--wr-border-glow-color-40),
|
|
29
|
+
0 0 15px 0 var(--wr-border-glow-color-30), 0 0 25px 2px var(--wr-border-glow-color-20),
|
|
30
|
+
0 0 50px 2px var(--wr-border-glow-color-10);
|
|
31
|
+
--wr-border-glow-color: hsl(40deg 80% 80% / 100%);
|
|
32
|
+
--wr-border-glow-color-60: hsl(40deg 80% 80% / 60%);
|
|
33
|
+
--wr-border-glow-color-50: hsl(40deg 80% 80% / 50%);
|
|
34
|
+
--wr-border-glow-color-40: hsl(40deg 80% 80% / 40%);
|
|
35
|
+
--wr-border-glow-color-30: hsl(40deg 80% 80% / 30%);
|
|
36
|
+
--wr-border-glow-color-20: hsl(40deg 80% 80% / 20%);
|
|
37
|
+
--wr-border-glow-color-10: hsl(40deg 80% 80% / 10%);
|
|
38
|
+
--wr-border-glow-gradient-one: radial-gradient(at 80% 55%, hsl(268deg 100% 76%) 0px, transparent 50%);
|
|
39
|
+
--wr-border-glow-gradient-two: radial-gradient(at 69% 34%, hsl(349deg 100% 74%) 0px, transparent 50%);
|
|
40
|
+
--wr-border-glow-gradient-three: radial-gradient(at 8% 6%, hsl(136deg 100% 78%) 0px, transparent 50%);
|
|
41
|
+
--wr-border-glow-gradient-four: radial-gradient(at 41% 38%, hsl(192deg 100% 64%) 0px, transparent 50%);
|
|
42
|
+
--wr-border-glow-gradient-five: radial-gradient(at 86% 85%, hsl(186deg 100% 74%) 0px, transparent 50%);
|
|
43
|
+
--wr-border-glow-gradient-six: radial-gradient(at 82% 18%, hsl(52deg 100% 65%) 0px, transparent 50%);
|
|
44
|
+
--wr-border-glow-gradient-seven: radial-gradient(at 51% 4%, hsl(12deg 100% 72%) 0px, transparent 50%);
|
|
45
|
+
--wr-border-glow-gradient-base: linear-gradient(#c299ff 0 100%);
|
|
46
|
+
}
|
|
@@ -11,5 +11,10 @@
|
|
|
11
11
|
// box-sizing reset into the compiled component styles, which ng-packagr then
|
|
12
12
|
// embeds in the FESM bundle as a string. `border-glow.scss` forwards `_rules`
|
|
13
13
|
// instead, so it carries this component's own CSS and nothing else.
|
|
14
|
+
//
|
|
15
|
+
// `_dark` is loaded from HERE for a second reason: its selector is built out of
|
|
16
|
+
// `$theme-attribute`, which only a stylesheet compiled by the consuming app can
|
|
17
|
+
// configure, so a copy inside the bundle could only ever carry the default name.
|
|
14
18
|
@use '../../theme/styles';
|
|
15
19
|
@forward 'rules';
|
|
20
|
+
@forward 'dark';
|
|
@@ -195,34 +195,3 @@
|
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
// Dark theme: restore the reactbits look — pale halo + additive blends.
|
|
199
|
-
[data-theme='dark'] .wr-border-glow {
|
|
200
|
-
--wr-border-glow-outline: rgb(255 255 255 / 15%);
|
|
201
|
-
--wr-border-glow-halo-blend: plus-lighter;
|
|
202
|
-
--wr-border-glow-fill-blend: soft-light;
|
|
203
|
-
--wr-border-glow-fill-scale: 1;
|
|
204
|
-
/* stylelint-disable-next-line */
|
|
205
|
-
--wr-border-glow-edge-shadow:
|
|
206
|
-
inset 0 0 0 1px var(--wr-border-glow-color), inset 0 0 1px 0 var(--wr-border-glow-color-60),
|
|
207
|
-
inset 0 0 3px 0 var(--wr-border-glow-color-50), inset 0 0 6px 0 var(--wr-border-glow-color-40),
|
|
208
|
-
inset 0 0 15px 0 var(--wr-border-glow-color-30), inset 0 0 25px 2px var(--wr-border-glow-color-20),
|
|
209
|
-
inset 0 0 50px 2px var(--wr-border-glow-color-10), 0 0 1px 0 var(--wr-border-glow-color-60),
|
|
210
|
-
0 0 3px 0 var(--wr-border-glow-color-50), 0 0 6px 0 var(--wr-border-glow-color-40),
|
|
211
|
-
0 0 15px 0 var(--wr-border-glow-color-30), 0 0 25px 2px var(--wr-border-glow-color-20),
|
|
212
|
-
0 0 50px 2px var(--wr-border-glow-color-10);
|
|
213
|
-
--wr-border-glow-color: hsl(40deg 80% 80% / 100%);
|
|
214
|
-
--wr-border-glow-color-60: hsl(40deg 80% 80% / 60%);
|
|
215
|
-
--wr-border-glow-color-50: hsl(40deg 80% 80% / 50%);
|
|
216
|
-
--wr-border-glow-color-40: hsl(40deg 80% 80% / 40%);
|
|
217
|
-
--wr-border-glow-color-30: hsl(40deg 80% 80% / 30%);
|
|
218
|
-
--wr-border-glow-color-20: hsl(40deg 80% 80% / 20%);
|
|
219
|
-
--wr-border-glow-color-10: hsl(40deg 80% 80% / 10%);
|
|
220
|
-
--wr-border-glow-gradient-one: radial-gradient(at 80% 55%, hsl(268deg 100% 76%) 0px, transparent 50%);
|
|
221
|
-
--wr-border-glow-gradient-two: radial-gradient(at 69% 34%, hsl(349deg 100% 74%) 0px, transparent 50%);
|
|
222
|
-
--wr-border-glow-gradient-three: radial-gradient(at 8% 6%, hsl(136deg 100% 78%) 0px, transparent 50%);
|
|
223
|
-
--wr-border-glow-gradient-four: radial-gradient(at 41% 38%, hsl(192deg 100% 64%) 0px, transparent 50%);
|
|
224
|
-
--wr-border-glow-gradient-five: radial-gradient(at 86% 85%, hsl(186deg 100% 74%) 0px, transparent 50%);
|
|
225
|
-
--wr-border-glow-gradient-six: radial-gradient(at 82% 18%, hsl(52deg 100% 65%) 0px, transparent 50%);
|
|
226
|
-
--wr-border-glow-gradient-seven: radial-gradient(at 51% 4%, hsl(12deg 100% 72%) 0px, transparent 50%);
|
|
227
|
-
--wr-border-glow-gradient-base: linear-gradient(#c299ff 0 100%);
|
|
228
|
-
}
|
|
@@ -120,6 +120,22 @@
|
|
|
120
120
|
// Sizes — share the `--wr-control-*` contract (22 / 30 / 36 px) so button,
|
|
121
121
|
// input and select line up in a row. Buttons keep a slightly wider padding-x
|
|
122
122
|
// (12 / 14 / 18) than input/select; gap + icon step with the size.
|
|
123
|
+
// `sm` is 22px tall (16 line-height + 2·2 padding + 2·1 border) and that is
|
|
124
|
+
// BELOW the 24×24 WCAG 2.2 asks of a target — deliberately, and it is the
|
|
125
|
+
// consumer's layout that decides whether it passes. 2.5.8 has a spacing
|
|
126
|
+
// exception: an undersized target is conforming when a 24px circle centred on
|
|
127
|
+
// it touches no other target's circle. So a lone `sm` button is fine, and a row
|
|
128
|
+
// of them packed edge to edge is not — an audit measuring `<a wr-btn size="sm">`
|
|
129
|
+
// Edit beside `<wr-btn size="sm">` Delete in a table row read 64.1×22 and
|
|
130
|
+
// reported `target-size` on every row.
|
|
131
|
+
//
|
|
132
|
+
// The `touch-target` mixin is NOT the fix here and was checked: it is gated on
|
|
133
|
+
// `@media (pointer: coarse)` while 2.5.8 applies to a mouse too, and its
|
|
134
|
+
// `::after` halo does not change the element's own client rects, which is what
|
|
135
|
+
// the rule measures. Growing `--wr-control-padding-y-sm` is not either — the
|
|
136
|
+
// three `--wr-control-*-sm` tokens are shared so button, input and select line
|
|
137
|
+
// up in a row, and 22px is the number `/guides/tokens/sizing` publishes.
|
|
138
|
+
// Space the targets, or use `md` where they sit together.
|
|
123
139
|
&--sm {
|
|
124
140
|
--wr-btn-radius: var(--wr-control-radius-sm);
|
|
125
141
|
--wr-btn-gap: 0.25rem;
|
|
@@ -65,6 +65,11 @@
|
|
|
65
65
|
@include theme.touch-target($positioned: true);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
// A gradient has no logical direction keyword, so both tracks are painted
|
|
69
|
+
// physically and mirrored by hand. They are one-value sliders — the thumb runs
|
|
70
|
+
// on `inset-inline-start` and the drag is measured from the track's inline
|
|
71
|
+
// start — so 0° / transparent has to sit at the READER's start, which is the
|
|
72
|
+
// physical right edge under `dir="rtl"`.
|
|
68
73
|
&__slider--hue {
|
|
69
74
|
background: linear-gradient(
|
|
70
75
|
to right,
|
|
@@ -76,6 +81,19 @@
|
|
|
76
81
|
hsl(300, 100%, 50%),
|
|
77
82
|
hsl(360, 100%, 50%)
|
|
78
83
|
);
|
|
84
|
+
|
|
85
|
+
[dir='rtl'] & {
|
|
86
|
+
background: linear-gradient(
|
|
87
|
+
to left,
|
|
88
|
+
hsl(0, 100%, 50%),
|
|
89
|
+
hsl(60, 100%, 50%),
|
|
90
|
+
hsl(120, 100%, 50%),
|
|
91
|
+
hsl(180, 100%, 50%),
|
|
92
|
+
hsl(240, 100%, 50%),
|
|
93
|
+
hsl(300, 100%, 50%),
|
|
94
|
+
hsl(360, 100%, 50%)
|
|
95
|
+
);
|
|
96
|
+
}
|
|
79
97
|
}
|
|
80
98
|
|
|
81
99
|
&__slider--alpha {
|
|
@@ -85,6 +103,14 @@
|
|
|
85
103
|
background-size:
|
|
86
104
|
auto,
|
|
87
105
|
8px 8px;
|
|
106
|
+
|
|
107
|
+
// Only the alpha ramp flips; the chequerboard behind it is a texture with no
|
|
108
|
+
// direction, and re-declaring it would be a second copy to keep in step.
|
|
109
|
+
[dir='rtl'] & {
|
|
110
|
+
background-image:
|
|
111
|
+
linear-gradient(to left, rgba(var(--wr-color-picker-rgb), 0), rgba(var(--wr-color-picker-rgb), 1)),
|
|
112
|
+
conic-gradient(#cdd2dd 25%, #fff 0 50%, #cdd2dd 0 75%, #fff 0);
|
|
113
|
+
}
|
|
88
114
|
}
|
|
89
115
|
|
|
90
116
|
// Thumb
|
|
@@ -94,10 +120,10 @@
|
|
|
94
120
|
height: var(--wr-color-picker-thumb-size);
|
|
95
121
|
transform: translate(-50%, -50%);
|
|
96
122
|
top: 0;
|
|
97
|
-
// The template overrides
|
|
98
|
-
// from `(event.clientX - rect.left) / rect.width`
|
|
99
|
-
//
|
|
100
|
-
//
|
|
123
|
+
// The SV thumb's own fallback: the template overrides it with `[style.left.%]`,
|
|
124
|
+
// computed from `(event.clientX - rect.left) / rect.width` against a canvas
|
|
125
|
+
// that is a picture rather than a track and so does not mirror. The two
|
|
126
|
+
// SLIDER thumbs take the logical inset below instead.
|
|
101
127
|
// rtl-ok: canvas geometry in physical pixels, centred by the physical translate
|
|
102
128
|
left: 0;
|
|
103
129
|
border-radius: 50%;
|
|
@@ -109,9 +135,21 @@
|
|
|
109
135
|
background: transparent;
|
|
110
136
|
}
|
|
111
137
|
|
|
112
|
-
// Sliders position their thumb at vertical centre
|
|
138
|
+
// Sliders position their thumb at vertical centre — and on the INLINE axis,
|
|
139
|
+
// because a one-value track mirrors. `left: auto` first: the shared rule above
|
|
140
|
+
// sets `left: 0` for the SV thumb, and leaving it standing beside the RTL
|
|
141
|
+
// `right` the template writes would over-constrain the box.
|
|
113
142
|
&__thumb--slider {
|
|
114
143
|
top: 50%;
|
|
144
|
+
left: auto;
|
|
145
|
+
inset-inline-start: 0;
|
|
146
|
+
|
|
147
|
+
// The inline half of the centring pair follows the inset it centres — the
|
|
148
|
+
// same rule `wr-slider`'s thumb states at length. The block half is
|
|
149
|
+
// symmetric and stays put.
|
|
150
|
+
[dir='rtl'] & {
|
|
151
|
+
transform: translate(50%, -50%);
|
|
152
|
+
}
|
|
115
153
|
}
|
|
116
154
|
|
|
117
155
|
// Preview tile
|
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
/// Event calendar — month / week / day.
|
|
2
2
|
///
|
|
3
|
+
/// Pull the whole theme so a standalone `@use 'ngwr/event-calendar'` brings in
|
|
4
|
+
/// every design token these rules reference. Sass deduplicates `@use` per
|
|
5
|
+
/// compilation, so the umbrella sheet still emits the theme only once.
|
|
6
|
+
///
|
|
7
|
+
/// This entry point shipped WITHOUT the load until v14.1, and it was the only
|
|
8
|
+
/// one of the 120-odd style entries that referenced tokens without pulling the
|
|
9
|
+
/// layer that declares them: `@use 'ngwr/event-calendar'` on its own emitted
|
|
10
|
+
/// 5.5 kB of rules carrying 57 unresolved `var(--wr-*)` references, so the grid
|
|
11
|
+
/// lines (`box-shadow`, hence no fallback) vanished and the text fell back to
|
|
12
|
+
/// black. The ten other entries that skip the load — `affix`, `density` and the
|
|
13
|
+
/// eight canvas / text-animation ones — reference no token at all, which is why
|
|
14
|
+
/// a sweep for "who is missing it" is not enough on its own.
|
|
15
|
+
///
|
|
3
16
|
/// Grid lines are `box-shadow: inset`, never borders. A border would take up
|
|
4
17
|
/// layout space, and the whole chip model depends on cell boxes being exactly
|
|
5
18
|
/// contiguous: a band's `calc(var(--span) * 100%)` is only the right width if
|
|
6
19
|
/// one cell ends precisely where the next begins.
|
|
20
|
+
@use '../../theme/styles';
|
|
21
|
+
|
|
7
22
|
.wr-event-calendar {
|
|
8
23
|
--wr-event-calendar-slot-height: 1.5rem;
|
|
9
24
|
--wr-event-calendar-band-height: 1.25rem;
|
|
@@ -75,10 +75,10 @@ class WrActionSheet {
|
|
|
75
75
|
this.action.emit(item);
|
|
76
76
|
this.open.set(false);
|
|
77
77
|
}
|
|
78
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
79
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.
|
|
78
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrActionSheet, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
79
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: WrActionSheet, isStandalone: true, selector: "wr-action-sheet", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, titleFallback: { classPropertyName: "titleFallback", publicName: "titleFallback", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", action: "action" }, ngImport: i0, template: "<wr-drawer [(open)]=\"open\" position=\"bottom\" height=\"auto\" rounded showHandle safeArea maxHeight=\"90dvh\">\n <div class=\"wr-action-sheet\">\n @if (title() || message()) {\n <div class=\"wr-action-sheet__header\">\n @if (title()) {\n <div class=\"wr-action-sheet__title\" wrDrawerTitle>{{ title() }}</div>\n }\n @if (message()) {\n <div class=\"wr-action-sheet__message\">{{ message() }}</div>\n }\n </div>\n }\n <!-- The drawer opens as an aria-modal dialog; name it via wrDrawerTitle.\n When there is no visible title, a screen-reader-only fallback keeps the\n dialog from being announced as unnamed. -->\n @if (!title()) {\n <span class=\"wr-action-sheet__sr-only\" wrDrawerTitle>{{ resolvedTitleFallback() }}</span>\n }\n\n <div class=\"wr-action-sheet__group\">\n @for (item of mainActions(); track $index) {\n <button\n type=\"button\"\n class=\"wr-action-sheet__action\"\n [class.wr-action-sheet__action--destructive]=\"item.role === 'destructive'\"\n [disabled]=\"item.disabled\"\n (click)=\"select(item)\"\n >\n @if (item.icon) {\n <wr-icon class=\"wr-action-sheet__icon\" [name]=\"item.icon\" />\n }\n <span class=\"wr-action-sheet__label\">{{ item.label }}</span>\n </button>\n }\n </div>\n\n @if (cancelActions().length) {\n <div class=\"wr-action-sheet__group wr-action-sheet__group--cancel\">\n @for (item of cancelActions(); track $index) {\n <button\n type=\"button\"\n class=\"wr-action-sheet__action wr-action-sheet__action--cancel\"\n [disabled]=\"item.disabled\"\n (click)=\"select(item)\"\n >\n <span class=\"wr-action-sheet__label\">{{ item.label }}</span>\n </button>\n }\n </div>\n }\n </div>\n</wr-drawer>\n", dependencies: [{ kind: "component", type: WrDrawer, selector: "wr-drawer", inputs: ["open", "position", "width", "height", "maxHeight", "rounded", "showHandle", "safeArea", "hasBackdrop", "closeOnBackdropClick", "closeOnEscape", "closable", "closeLabel"], outputs: ["openChange"] }, { kind: "directive", type: WrDrawerTitle, selector: "[wrDrawerTitle]" }, { kind: "component", type: WrIcon, selector: "wr-icon", inputs: ["name"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
80
80
|
}
|
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrActionSheet, decorators: [{
|
|
82
82
|
type: Component,
|
|
83
83
|
args: [{ selector: 'wr-action-sheet', encapsulation: ViewEncapsulation.None, imports: [WrDrawer, WrDrawerTitle, WrIcon], template: "<wr-drawer [(open)]=\"open\" position=\"bottom\" height=\"auto\" rounded showHandle safeArea maxHeight=\"90dvh\">\n <div class=\"wr-action-sheet\">\n @if (title() || message()) {\n <div class=\"wr-action-sheet__header\">\n @if (title()) {\n <div class=\"wr-action-sheet__title\" wrDrawerTitle>{{ title() }}</div>\n }\n @if (message()) {\n <div class=\"wr-action-sheet__message\">{{ message() }}</div>\n }\n </div>\n }\n <!-- The drawer opens as an aria-modal dialog; name it via wrDrawerTitle.\n When there is no visible title, a screen-reader-only fallback keeps the\n dialog from being announced as unnamed. -->\n @if (!title()) {\n <span class=\"wr-action-sheet__sr-only\" wrDrawerTitle>{{ resolvedTitleFallback() }}</span>\n }\n\n <div class=\"wr-action-sheet__group\">\n @for (item of mainActions(); track $index) {\n <button\n type=\"button\"\n class=\"wr-action-sheet__action\"\n [class.wr-action-sheet__action--destructive]=\"item.role === 'destructive'\"\n [disabled]=\"item.disabled\"\n (click)=\"select(item)\"\n >\n @if (item.icon) {\n <wr-icon class=\"wr-action-sheet__icon\" [name]=\"item.icon\" />\n }\n <span class=\"wr-action-sheet__label\">{{ item.label }}</span>\n </button>\n }\n </div>\n\n @if (cancelActions().length) {\n <div class=\"wr-action-sheet__group wr-action-sheet__group--cancel\">\n @for (item of cancelActions(); track $index) {\n <button\n type=\"button\"\n class=\"wr-action-sheet__action wr-action-sheet__action--cancel\"\n [disabled]=\"item.disabled\"\n (click)=\"select(item)\"\n >\n <span class=\"wr-action-sheet__label\">{{ item.label }}</span>\n </button>\n }\n </div>\n }\n </div>\n</wr-drawer>\n" }]
|
|
84
84
|
}], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], titleFallback: [{ type: i0.Input, args: [{ isSignal: true, alias: "titleFallback", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], action: [{ type: i0.Output, args: ["action"] }] } });
|
package/fesm2022/ngwr-affix.mjs
CHANGED
|
@@ -106,10 +106,10 @@ class WrAffix {
|
|
|
106
106
|
});
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
110
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.
|
|
109
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrAffix, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
110
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.5", type: WrAffix, isStandalone: true, selector: "[wrAffix]", inputs: { offsetTop: { classPropertyName: "offsetTop", publicName: "wrAffixOffsetTop", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { affixChange: "wrAffixChange" }, host: { properties: { "style.position": "\"sticky\"", "style.top.px": "offsetTop()" }, classAttribute: "wr-affix" }, ngImport: i0 });
|
|
111
111
|
}
|
|
112
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrAffix, decorators: [{
|
|
113
113
|
type: Directive,
|
|
114
114
|
args: [{
|
|
115
115
|
selector: '[wrAffix]',
|
package/fesm2022/ngwr-alert.mjs
CHANGED
|
@@ -16,7 +16,7 @@ import { WrIcon } from 'ngwr/icon';
|
|
|
16
16
|
* @example
|
|
17
17
|
* ```html
|
|
18
18
|
* <wr-alert title="Saved" message="Your changes are live." type="success" />
|
|
19
|
-
* <wr-alert title="Failed" type="danger"
|
|
19
|
+
* <wr-alert title="Failed" type="danger" closable (closed)="onClose()" />
|
|
20
20
|
* ```
|
|
21
21
|
*
|
|
22
22
|
* @see https://ngwr.dev/reference/components/alert
|
|
@@ -66,7 +66,7 @@ class WrAlert {
|
|
|
66
66
|
*
|
|
67
67
|
* @default false
|
|
68
68
|
*/
|
|
69
|
-
|
|
69
|
+
closable = input(false, { ...(ngDevMode ? { debugName: "closable" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
70
70
|
/**
|
|
71
71
|
* Emitted when the user dismisses the alert via the close button.
|
|
72
72
|
*/
|
|
@@ -89,17 +89,17 @@ class WrAlert {
|
|
|
89
89
|
this.dismissed.set(true);
|
|
90
90
|
this.closed.emit();
|
|
91
91
|
}
|
|
92
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
93
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.
|
|
92
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrAlert, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
93
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: WrAlert, isStandalone: true, selector: "wr-alert", inputs: { closeLabel: { classPropertyName: "closeLabel", publicName: "closeLabel", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, iconName: { classPropertyName: "iconName", publicName: "iconName", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { properties: { "class": "classes()", "attr.role": "liveRole()", "attr.aria-live": "liveLevel()" } }, ngImport: i0, template: "@if (!dismissed()) {\n @if (iconName(); as n) {\n <wr-icon class=\"wr-alert__icon\" [name]=\"n\" />\n } @else if (icon()) {\n <svg\n class=\"wr-alert__icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n @switch (type()) {\n @case ('success') {\n <path d=\"M21.801 10A10 10 0 1 1 17 3.335\" />\n <path d=\"m9 11 3 3L22 4\" />\n }\n @case ('warning') {\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n }\n @case ('danger') {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n }\n @case ('neutral') {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n }\n @case ('offline') {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m4.9 4.9 14.2 14.2\" />\n }\n @default {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n }\n }\n </svg>\n }\n\n <div class=\"wr-alert__body\">\n @if (title(); as t) {\n <p class=\"wr-alert__title\">{{ t }}</p>\n @if (message(); as m) {\n <p class=\"wr-alert__message\">{{ m }}</p>\n }\n } @else if (message(); as m) {\n <p class=\"wr-alert__title\">{{ m }}</p>\n }\n </div>\n\n @if (closable()) {\n <button type=\"button\" class=\"wr-alert__close\" [attr.aria-label]=\"resolvedCloseLabel()\" (click)=\"onClose()\">\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n}\n", dependencies: [{ kind: "component", type: WrIcon, selector: "wr-icon", inputs: ["name"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
94
94
|
}
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: WrAlert, decorators: [{
|
|
96
96
|
type: Component,
|
|
97
97
|
args: [{ selector: 'wr-alert', imports: [WrIcon], encapsulation: ViewEncapsulation.None, host: {
|
|
98
98
|
'[class]': 'classes()',
|
|
99
99
|
'[attr.role]': 'liveRole()',
|
|
100
100
|
'[attr.aria-live]': 'liveLevel()',
|
|
101
|
-
}, template: "@if (!dismissed()) {\n @if (iconName(); as n) {\n <wr-icon class=\"wr-alert__icon\" [name]=\"n\" />\n } @else if (icon()) {\n <svg\n class=\"wr-alert__icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n @switch (type()) {\n @case ('success') {\n <path d=\"M21.801 10A10 10 0 1 1 17 3.335\" />\n <path d=\"m9 11 3 3L22 4\" />\n }\n @case ('warning') {\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n }\n @case ('danger') {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n }\n @case ('neutral') {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n }\n @case ('offline') {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m4.9 4.9 14.2 14.2\" />\n }\n @default {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n }\n }\n </svg>\n }\n\n <div class=\"wr-alert__body\">\n @if (title(); as t) {\n <p class=\"wr-alert__title\">{{ t }}</p>\n @if (message(); as m) {\n <p class=\"wr-alert__message\">{{ m }}</p>\n }\n } @else if (message(); as m) {\n <p class=\"wr-alert__title\">{{ m }}</p>\n }\n </div>\n\n @if (
|
|
102
|
-
}], propDecorators: { closeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeLabel", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], iconName: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconName", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }],
|
|
101
|
+
}, template: "@if (!dismissed()) {\n @if (iconName(); as n) {\n <wr-icon class=\"wr-alert__icon\" [name]=\"n\" />\n } @else if (icon()) {\n <svg\n class=\"wr-alert__icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n @switch (type()) {\n @case ('success') {\n <path d=\"M21.801 10A10 10 0 1 1 17 3.335\" />\n <path d=\"m9 11 3 3L22 4\" />\n }\n @case ('warning') {\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n }\n @case ('danger') {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n }\n @case ('neutral') {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n }\n @case ('offline') {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m4.9 4.9 14.2 14.2\" />\n }\n @default {\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n }\n }\n </svg>\n }\n\n <div class=\"wr-alert__body\">\n @if (title(); as t) {\n <p class=\"wr-alert__title\">{{ t }}</p>\n @if (message(); as m) {\n <p class=\"wr-alert__message\">{{ m }}</p>\n }\n } @else if (message(); as m) {\n <p class=\"wr-alert__title\">{{ m }}</p>\n }\n </div>\n\n @if (closable()) {\n <button type=\"button\" class=\"wr-alert__close\" [attr.aria-label]=\"resolvedCloseLabel()\" (click)=\"onClose()\">\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n}\n" }]
|
|
102
|
+
}], propDecorators: { closeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeLabel", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], iconName: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconName", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
105
|
* Generated bundle index. Do not edit.
|