ngwr 12.2.0 → 13.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 +11 -1
- package/border-glow/border-glow.scss +1 -1
- package/border-glow/styles/_index.scss +15 -233
- package/border-glow/styles/_rules.scss +228 -0
- package/breadcrumbs/breadcrumbs.scss +1 -1
- package/breadcrumbs/styles/_index.scss +15 -78
- package/breadcrumbs/styles/_rules.scss +84 -0
- package/card/card.scss +1 -1
- package/card/styles/_index.scss +15 -96
- package/card/styles/_rules.scss +96 -0
- package/cascader/cascader.scss +1 -1
- package/cascader/styles/_index.scss +15 -244
- package/cascader/styles/_rules.scss +261 -0
- package/checkbox/styles/_index.scss +7 -0
- package/circular-text/circular-text.scss +1 -1
- package/circular-text/styles/_index.scss +15 -63
- package/circular-text/styles/_rules.scss +58 -0
- package/color-picker/styles/_index.scss +8 -0
- package/drag-drop/sortable-list.scss +1 -1
- package/drag-drop/styles/_index.scss +14 -143
- package/drag-drop/styles/_rules.scss +151 -0
- package/falling-text/falling-text.scss +1 -1
- package/falling-text/styles/_index.scss +15 -36
- package/falling-text/styles/_rules.scss +31 -0
- package/fesm2022/ngwr-border-glow.mjs +2 -2
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +2 -2
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +2 -2
- package/fesm2022/ngwr-card.mjs.map +1 -1
- package/fesm2022/ngwr-cascader.mjs +27 -9
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +86 -8
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text.mjs +2 -2
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker.mjs +57 -7
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +8 -0
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +2 -2
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text.mjs +2 -2
- package/fesm2022/ngwr-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload.mjs +29 -8
- package/fesm2022/ngwr-file-upload.mjs.map +1 -1
- package/fesm2022/ngwr-form.mjs +48 -1
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-glitch-text.mjs +2 -2
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text.mjs +2 -2
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +41 -3
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-knob.mjs +17 -2
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-lightbox.mjs +2 -2
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +2 -2
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +2 -2
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-marquee.mjs +2 -2
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +1 -1
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-radio.mjs +63 -8
- package/fesm2022/ngwr-radio.mjs.map +1 -1
- package/fesm2022/ngwr-rating.mjs +17 -2
- package/fesm2022/ngwr-rating.mjs.map +1 -1
- package/fesm2022/ngwr-segmented.mjs +22 -3
- package/fesm2022/ngwr-segmented.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +46 -12
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +2 -2
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-slider.mjs +21 -6
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-spotlight-card.mjs +2 -2
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-star-border.mjs +2 -2
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-switch.mjs +44 -4
- package/fesm2022/ngwr-switch.mjs.map +1 -1
- package/fesm2022/ngwr-table.mjs +1 -1
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +5 -2
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-theme.mjs +41 -1
- package/fesm2022/ngwr-theme.mjs.map +1 -1
- package/fesm2022/ngwr-tilt-card.mjs +2 -2
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +38 -6
- package/fesm2022/ngwr-transfer.mjs.map +1 -1
- package/fesm2022/ngwr-tree.mjs +33 -7
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +2 -2
- package/fesm2022/ngwr-typewriter.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 +2 -2
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves.mjs +2 -2
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/file-upload/styles/_index.scss +6 -0
- package/glitch-text/glitch-text.scss +1 -1
- package/glitch-text/styles/_index.scss +14 -164
- package/glitch-text/styles/_rules.scss +160 -0
- package/gradient-text/gradient-text.scss +1 -1
- package/gradient-text/styles/_index.scss +15 -118
- package/gradient-text/styles/_rules.scss +113 -0
- package/input/styles/_index.scss +13 -0
- package/input-otp/styles/_index.scss +8 -0
- package/lightbox/lightbox.scss +1 -1
- package/lightbox/styles/_index.scss +15 -191
- package/lightbox/styles/_rules.scss +198 -0
- package/list/list.scss +1 -1
- package/list/styles/_index.scss +15 -101
- package/list/styles/_rules.scss +108 -0
- package/llms-full.txt +3 -3
- package/loading-bar/loading-bar.scss +1 -1
- package/loading-bar/styles/_index.scss +15 -33
- package/loading-bar/styles/_rules.scss +28 -0
- package/marquee/marquee.scss +1 -1
- package/marquee/styles/_index.scss +15 -155
- package/marquee/styles/_rules.scss +150 -0
- package/package.json +1 -1
- package/segmented/styles/_index.scss +8 -0
- package/select/styles/_index.scss +17 -1
- package/shiny-text/shiny-text.scss +1 -1
- package/shiny-text/styles/_index.scss +14 -105
- package/shiny-text/styles/_rules.scss +101 -0
- package/slider/styles/_index.scss +8 -0
- package/spotlight-card/spotlight-card.scss +1 -1
- package/spotlight-card/styles/_index.scss +15 -52
- package/spotlight-card/styles/_rules.scss +47 -0
- package/star-border/star-border.scss +1 -1
- package/star-border/styles/_index.scss +15 -125
- package/star-border/styles/_rules.scss +120 -0
- package/switch/styles/_index.scss +7 -0
- package/theme/styles/_dark.scss +81 -4
- package/theme/styles/_index.scss +1 -0
- package/theme/styles/_motion.scss +94 -0
- package/tilt-card/styles/_index.scss +15 -45
- package/tilt-card/styles/_rules.scss +40 -0
- package/tilt-card/tilt-card.scss +1 -1
- package/tree/styles/_index.scss +15 -1
- package/types/ngwr-cascader.d.ts +17 -1
- package/types/ngwr-checkbox.d.ts +51 -3
- package/types/ngwr-color-picker.d.ts +19 -1
- package/types/ngwr-file-upload.d.ts +18 -1
- package/types/ngwr-form.d.ts +51 -2
- package/types/ngwr-input-otp.d.ts +23 -1
- package/types/ngwr-knob.d.ts +14 -0
- package/types/ngwr-radio.d.ts +37 -2
- package/types/ngwr-rating.d.ts +14 -0
- package/types/ngwr-segmented.d.ts +18 -1
- package/types/ngwr-select.d.ts +17 -1
- package/types/ngwr-slider.d.ts +14 -1
- package/types/ngwr-switch.d.ts +26 -2
- package/types/ngwr-textarea.d.ts +3 -0
- package/types/ngwr-theme.d.ts +24 -0
- package/types/ngwr-transfer.d.ts +17 -1
- package/types/ngwr-tree.d.ts +21 -1
- package/types/ngwr-version.d.ts +1 -1
- package/typewriter/styles/_index.scss +15 -38
- package/typewriter/styles/_rules.scss +33 -0
- package/typewriter/typewriter.scss +1 -1
- package/virtual-scroll/styles/_index.scss +15 -32
- package/virtual-scroll/styles/_rules.scss +27 -0
- package/virtual-scroll/virtual-scroll.scss +1 -1
- package/waves/styles/_index.scss +15 -50
- package/waves/styles/_rules.scss +45 -0
- package/waves/waves.scss +1 -1
package/README.md
CHANGED
|
@@ -162,6 +162,16 @@ Opt-in utilities (not part of `@use 'ngwr'`):
|
|
|
162
162
|
`ngwr/typography-utilities` is the utility-class sheet — not `ngwr/typography`,
|
|
163
163
|
which is the larger `wrTypography` component entry.
|
|
164
164
|
|
|
165
|
+
### What you may style, and what may move
|
|
166
|
+
|
|
167
|
+
Components render with `ViewEncapsulation.None`, so their `.wr-*` BEM classes and
|
|
168
|
+
their `--wr-*` custom properties are reachable — and both are treated as public
|
|
169
|
+
API: renaming one is a breaking change carrying a migration note. The DOM *shape*
|
|
170
|
+
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; a
|
|
172
|
+
descendant selector that encodes a structure (`.wr-select__trigger > span > svg`)
|
|
173
|
+
does not. See [Theming](https://ngwr.dev/guides/theming) for the full statement.
|
|
174
|
+
|
|
165
175
|
## Quick start
|
|
166
176
|
|
|
167
177
|
```ts
|
|
@@ -260,7 +270,7 @@ Plus [icon](https://ngwr.dev/reference/components/icon), the experimental [squir
|
|
|
260
270
|
|
|
261
271
|
### Animations
|
|
262
272
|
|
|
263
|
-
Animated UI effects. Mix of in-house components + ports of [reactbits.dev](https://www.reactbits.dev) — each port carries a credit chip on its docs page. Defaults are theme-aware (light + dark), and every component honors `prefers-reduced-motion` — the one exception is `spotlight-card`, whose highlight only tracks the pointer.
|
|
273
|
+
Animated UI effects. Mix of in-house components + ports of [reactbits.dev](https://www.reactbits.dev) — each port carries a credit chip on its docs page. Defaults are theme-aware (light + dark), and every component in **this section** honors `prefers-reduced-motion` — the one exception is `spotlight-card`, whose highlight only tracks the pointer. The scope of that sentence is the thing to read carefully: it says nothing about the rest of the catalog, and until v13 it was inviting a reader to over-generalise. The always-on chrome — the spinner and skeleton that animate on essentially every page, plus the enter animations on dialog, drawer, dropdown, popconfirm, toast, lightbox and the responsive bottom sheet — had no guard at all. It has one now, in the theme layer (`theme/styles/_motion.scss`) rather than per component, so the set is reviewable in one place.
|
|
264
274
|
|
|
265
275
|
[aurora](https://ngwr.dev/animations/aurora), [blur-text](https://ngwr.dev/animations/blur-text), [border-glow](https://ngwr.dev/animations/border-glow), [circular-text](https://ngwr.dev/animations/circular-text), [click-spark](https://ngwr.dev/animations/click-spark), [confetti](https://ngwr.dev/animations/confetti), [decrypt-text](https://ngwr.dev/animations/decrypt-text), [falling-text](https://ngwr.dev/animations/falling-text), [fuzzy-text](https://ngwr.dev/animations/fuzzy-text), [glitch-text](https://ngwr.dev/animations/glitch-text), [gradient-text](https://ngwr.dev/animations/gradient-text), [marquee](https://ngwr.dev/animations/marquee), [rotating-text](https://ngwr.dev/animations/rotating-text), [shiny-text](https://ngwr.dev/animations/shiny-text), [splash-cursor](https://ngwr.dev/animations/splash-cursor), [split-text](https://ngwr.dev/animations/split-text), [spotlight-card](https://ngwr.dev/animations/spotlight-card), [star-border](https://ngwr.dev/animations/star-border), [tilt-card](https://ngwr.dev/animations/tilt-card), [typewriter](https://ngwr.dev/animations/typewriter), [waves](https://ngwr.dev/animations/waves).
|
|
266
276
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Component-scoped, but the lib uses `ViewEncapsulation.None` everywhere so
|
|
2
2
|
// the selector starts with `.wr-border-glow` — the same as the umbrella
|
|
3
3
|
// stylesheet entry. Importing the lib styles or just this file works.
|
|
4
|
-
@forward './styles';
|
|
4
|
+
@forward './styles/rules';
|
|
@@ -1,233 +1,15 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// deep amber that reads on white. Dark theme swaps to the pale pastel.
|
|
17
|
-
--wr-border-glow-color: hsl(40deg 90% 45% / 100%);
|
|
18
|
-
--wr-border-glow-color-60: hsl(40deg 90% 45% / 60%);
|
|
19
|
-
--wr-border-glow-color-50: hsl(40deg 90% 45% / 50%);
|
|
20
|
-
--wr-border-glow-color-40: hsl(40deg 90% 45% / 40%);
|
|
21
|
-
--wr-border-glow-color-30: hsl(40deg 90% 45% / 30%);
|
|
22
|
-
--wr-border-glow-color-20: hsl(40deg 90% 45% / 20%);
|
|
23
|
-
--wr-border-glow-color-10: hsl(40deg 90% 45% / 10%);
|
|
24
|
-
// Theme-default mesh palette (overridden inline when `[colors]` is set):
|
|
25
|
-
// deep tones that read on white. Dark theme restores the pastels below.
|
|
26
|
-
--wr-border-glow-gradient-one: radial-gradient(at 80% 55%, hsl(268deg 80% 50%) 0px, transparent 50%);
|
|
27
|
-
--wr-border-glow-gradient-two: radial-gradient(at 69% 34%, hsl(349deg 85% 52%) 0px, transparent 50%);
|
|
28
|
-
--wr-border-glow-gradient-three: radial-gradient(at 8% 6%, hsl(136deg 70% 38%) 0px, transparent 50%);
|
|
29
|
-
--wr-border-glow-gradient-four: radial-gradient(at 41% 38%, hsl(192deg 90% 40%) 0px, transparent 50%);
|
|
30
|
-
--wr-border-glow-gradient-five: radial-gradient(at 86% 85%, hsl(186deg 90% 38%) 0px, transparent 50%);
|
|
31
|
-
--wr-border-glow-gradient-six: radial-gradient(at 82% 18%, hsl(40deg 95% 45%) 0px, transparent 50%);
|
|
32
|
-
--wr-border-glow-gradient-seven: radial-gradient(at 51% 4%, hsl(12deg 90% 50%) 0px, transparent 50%);
|
|
33
|
-
--wr-border-glow-gradient-base: linear-gradient(hsl(262deg 70% 50%) 0 100%);
|
|
34
|
-
--wr-border-glow-edge-sensitivity: 30;
|
|
35
|
-
--wr-border-glow-color-sensitivity: calc(var(--wr-border-glow-edge-sensitivity) + 20);
|
|
36
|
-
--wr-border-glow-radius: 28px;
|
|
37
|
-
--wr-border-glow-padding: 40px;
|
|
38
|
-
--wr-border-glow-cone-spread: 25;
|
|
39
|
-
|
|
40
|
-
position: relative;
|
|
41
|
-
display: grid;
|
|
42
|
-
border-radius: var(--wr-border-glow-radius);
|
|
43
|
-
background: var(--wr-border-glow-bg, var(--wr-color-surface, #fff));
|
|
44
|
-
overflow: visible;
|
|
45
|
-
isolation: isolate;
|
|
46
|
-
transform: translate3d(0, 0, 0.01px); // create a new layer to keep blends tidy
|
|
47
|
-
// The faint static outline uses `box-shadow inset` instead of `border:` —
|
|
48
|
-
// CSS borders + `border-radius` leave 1px subpixel notches at the corners
|
|
49
|
-
// where the mask layers meet the curve, but inset shadows hug the radius
|
|
50
|
-
// pixel-perfect.
|
|
51
|
-
box-shadow: inset 0 0 0 1px var(--wr-border-glow-outline, var(--wr-color-outline, rgb(255 255 255 / 15%)));
|
|
52
|
-
|
|
53
|
-
&::before,
|
|
54
|
-
&::after,
|
|
55
|
-
& > .wr-border-glow__edge {
|
|
56
|
-
content: '';
|
|
57
|
-
position: absolute;
|
|
58
|
-
inset: 0;
|
|
59
|
-
border-radius: inherit;
|
|
60
|
-
transition: opacity 0.25s ease-out;
|
|
61
|
-
z-index: -1;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Hide the glow layers when the cursor isn't engaged AND the one-shot
|
|
65
|
-
// sweep isn't running.
|
|
66
|
-
&:not(:hover):not(.wr-border-glow--sweeping) {
|
|
67
|
-
&::before,
|
|
68
|
-
&::after,
|
|
69
|
-
& > .wr-border-glow__edge {
|
|
70
|
-
opacity: 0;
|
|
71
|
-
transition: opacity 0.75s ease-in-out;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Coloured mesh-gradient slice of the border (the visible "cone" along
|
|
76
|
-
// the perimeter under the cursor).
|
|
77
|
-
&::before {
|
|
78
|
-
border: 1px solid transparent;
|
|
79
|
-
background:
|
|
80
|
-
linear-gradient(var(--wr-border-glow-bg, var(--wr-color-surface, #fff)) 0 100%) padding-box,
|
|
81
|
-
linear-gradient(rgb(255 255 255 / 0%) 0 100%) border-box,
|
|
82
|
-
var(--wr-border-glow-gradient-one, radial-gradient(at 80% 55%, hsl(268deg 100% 76%) 0px, transparent 50%))
|
|
83
|
-
border-box,
|
|
84
|
-
var(--wr-border-glow-gradient-two, radial-gradient(at 69% 34%, hsl(349deg 100% 74%) 0px, transparent 50%))
|
|
85
|
-
border-box,
|
|
86
|
-
var(--wr-border-glow-gradient-three, radial-gradient(at 8% 6%, hsl(136deg 100% 78%) 0px, transparent 50%))
|
|
87
|
-
border-box,
|
|
88
|
-
var(--wr-border-glow-gradient-four, radial-gradient(at 41% 38%, hsl(192deg 100% 64%) 0px, transparent 50%))
|
|
89
|
-
border-box,
|
|
90
|
-
var(--wr-border-glow-gradient-five, radial-gradient(at 86% 85%, hsl(186deg 100% 74%) 0px, transparent 50%))
|
|
91
|
-
border-box,
|
|
92
|
-
var(--wr-border-glow-gradient-six, radial-gradient(at 82% 18%, hsl(52deg 100% 65%) 0px, transparent 50%))
|
|
93
|
-
border-box,
|
|
94
|
-
var(--wr-border-glow-gradient-seven, radial-gradient(at 51% 4%, hsl(12deg 100% 72%) 0px, transparent 50%))
|
|
95
|
-
border-box,
|
|
96
|
-
var(--wr-border-glow-gradient-base, linear-gradient(#c299ff 0 100%)) border-box;
|
|
97
|
-
|
|
98
|
-
opacity: calc(
|
|
99
|
-
(var(--wr-border-glow-edge-proximity) - var(--wr-border-glow-color-sensitivity)) /
|
|
100
|
-
(100 - var(--wr-border-glow-color-sensitivity))
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
mask-image: conic-gradient(
|
|
104
|
-
from var(--wr-border-glow-angle) at center,
|
|
105
|
-
black calc(var(--wr-border-glow-cone-spread) * 1%),
|
|
106
|
-
transparent calc((var(--wr-border-glow-cone-spread) + 15) * 1%),
|
|
107
|
-
transparent calc((100 - var(--wr-border-glow-cone-spread) - 15) * 1%),
|
|
108
|
-
black calc((100 - var(--wr-border-glow-cone-spread)) * 1%)
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Soft interior bloom — same mesh, blended with the card content.
|
|
113
|
-
&::after {
|
|
114
|
-
border: 1px solid transparent;
|
|
115
|
-
background:
|
|
116
|
-
var(--wr-border-glow-gradient-one, radial-gradient(at 80% 55%, hsl(268deg 100% 76%) 0px, transparent 50%))
|
|
117
|
-
padding-box,
|
|
118
|
-
var(--wr-border-glow-gradient-two, radial-gradient(at 69% 34%, hsl(349deg 100% 74%) 0px, transparent 50%))
|
|
119
|
-
padding-box,
|
|
120
|
-
var(--wr-border-glow-gradient-three, radial-gradient(at 8% 6%, hsl(136deg 100% 78%) 0px, transparent 50%))
|
|
121
|
-
padding-box,
|
|
122
|
-
var(--wr-border-glow-gradient-four, radial-gradient(at 41% 38%, hsl(192deg 100% 64%) 0px, transparent 50%))
|
|
123
|
-
padding-box,
|
|
124
|
-
var(--wr-border-glow-gradient-five, radial-gradient(at 86% 85%, hsl(186deg 100% 74%) 0px, transparent 50%))
|
|
125
|
-
padding-box,
|
|
126
|
-
var(--wr-border-glow-gradient-six, radial-gradient(at 82% 18%, hsl(52deg 100% 65%) 0px, transparent 50%))
|
|
127
|
-
padding-box,
|
|
128
|
-
var(--wr-border-glow-gradient-seven, radial-gradient(at 51% 4%, hsl(12deg 100% 72%) 0px, transparent 50%))
|
|
129
|
-
padding-box,
|
|
130
|
-
var(--wr-border-glow-gradient-base, linear-gradient(#c299ff 0 100%)) padding-box;
|
|
131
|
-
|
|
132
|
-
mask-image:
|
|
133
|
-
linear-gradient(to bottom, black, black), radial-gradient(ellipse at 50% 50%, black 40%, transparent 65%),
|
|
134
|
-
radial-gradient(ellipse at 66% 66%, black 5%, transparent 40%),
|
|
135
|
-
radial-gradient(ellipse at 33% 33%, black 5%, transparent 40%),
|
|
136
|
-
radial-gradient(ellipse at 66% 33%, black 5%, transparent 40%),
|
|
137
|
-
radial-gradient(ellipse at 33% 66%, black 5%, transparent 40%),
|
|
138
|
-
conic-gradient(from var(--wr-border-glow-angle) at center, transparent 5%, black 15%, black 85%, transparent 95%);
|
|
139
|
-
mask-composite: subtract, add, add, add, add, add;
|
|
140
|
-
|
|
141
|
-
// `--wr-border-glow-fill-scale` keeps the interior bloom subtle on
|
|
142
|
-
// light surfaces — at full strength the multiply wash darkens the
|
|
143
|
-
// whole card and the cone's surface wedge shows against it.
|
|
144
|
-
opacity: calc(
|
|
145
|
-
var(--wr-border-glow-fill-opacity, 0.5) * var(--wr-border-glow-fill-scale, 0.25) *
|
|
146
|
-
(var(--wr-border-glow-edge-proximity) - var(--wr-border-glow-color-sensitivity)) /
|
|
147
|
-
(100 - var(--wr-border-glow-color-sensitivity))
|
|
148
|
-
);
|
|
149
|
-
mix-blend-mode: var(--wr-border-glow-fill-blend, multiply);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Outer halo — stacked box-shadows on a separate child so we can mask
|
|
153
|
-
// the shadows to the cone without affecting the host's content.
|
|
154
|
-
& > .wr-border-glow__edge {
|
|
155
|
-
inset: calc(var(--wr-border-glow-padding) * -1);
|
|
156
|
-
pointer-events: none;
|
|
157
|
-
z-index: 1;
|
|
158
|
-
|
|
159
|
-
mask-image: conic-gradient(
|
|
160
|
-
from var(--wr-border-glow-angle) at center,
|
|
161
|
-
black 2.5%,
|
|
162
|
-
transparent 10%,
|
|
163
|
-
transparent 90%,
|
|
164
|
-
black 97.5%
|
|
165
|
-
);
|
|
166
|
-
opacity: calc(
|
|
167
|
-
(var(--wr-border-glow-edge-proximity) - var(--wr-border-glow-edge-sensitivity)) /
|
|
168
|
-
(100 - var(--wr-border-glow-edge-sensitivity))
|
|
169
|
-
);
|
|
170
|
-
// `plus-lighter` saturates to white on a light page — light theme
|
|
171
|
-
// paints the halo as plain colored shadows instead (see block below).
|
|
172
|
-
mix-blend-mode: var(--wr-border-glow-halo-blend, normal);
|
|
173
|
-
|
|
174
|
-
&::before {
|
|
175
|
-
content: '';
|
|
176
|
-
position: absolute;
|
|
177
|
-
inset: var(--wr-border-glow-padding);
|
|
178
|
-
border-radius: inherit;
|
|
179
|
-
// Light theme keeps only the outward halo — the inset half washes
|
|
180
|
-
// amber over the card interior without additive blending. Dark
|
|
181
|
-
// restores the full reactbits stack (see block below).
|
|
182
|
-
box-shadow: var(
|
|
183
|
-
--wr-border-glow-edge-shadow,
|
|
184
|
-
inset 0 0 0 1px var(--wr-border-glow-color, hsl(40deg 80% 80% / 100%)),
|
|
185
|
-
0 0 1px 0 var(--wr-border-glow-color-60, hsl(40deg 80% 80% / 60%)),
|
|
186
|
-
0 0 3px 0 var(--wr-border-glow-color-50, hsl(40deg 80% 80% / 50%)),
|
|
187
|
-
0 0 6px 0 var(--wr-border-glow-color-40, hsl(40deg 80% 80% / 40%)),
|
|
188
|
-
0 0 15px 0 var(--wr-border-glow-color-30, hsl(40deg 80% 80% / 30%)),
|
|
189
|
-
0 0 25px 2px var(--wr-border-glow-color-20, hsl(40deg 80% 80% / 20%)),
|
|
190
|
-
0 0 50px 2px var(--wr-border-glow-color-10, hsl(40deg 80% 80% / 10%))
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
&__inner {
|
|
196
|
-
position: relative;
|
|
197
|
-
z-index: 1;
|
|
198
|
-
display: flex;
|
|
199
|
-
flex-direction: column;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Dark theme: restore the reactbits look — pale halo + additive blends.
|
|
204
|
-
[data-theme='dark'] .wr-border-glow {
|
|
205
|
-
--wr-border-glow-outline: rgb(255 255 255 / 15%);
|
|
206
|
-
--wr-border-glow-halo-blend: plus-lighter;
|
|
207
|
-
--wr-border-glow-fill-blend: soft-light;
|
|
208
|
-
--wr-border-glow-fill-scale: 1;
|
|
209
|
-
/* stylelint-disable-next-line */
|
|
210
|
-
--wr-border-glow-edge-shadow:
|
|
211
|
-
inset 0 0 0 1px var(--wr-border-glow-color), inset 0 0 1px 0 var(--wr-border-glow-color-60),
|
|
212
|
-
inset 0 0 3px 0 var(--wr-border-glow-color-50), inset 0 0 6px 0 var(--wr-border-glow-color-40),
|
|
213
|
-
inset 0 0 15px 0 var(--wr-border-glow-color-30), inset 0 0 25px 2px var(--wr-border-glow-color-20),
|
|
214
|
-
inset 0 0 50px 2px var(--wr-border-glow-color-10), 0 0 1px 0 var(--wr-border-glow-color-60),
|
|
215
|
-
0 0 3px 0 var(--wr-border-glow-color-50), 0 0 6px 0 var(--wr-border-glow-color-40),
|
|
216
|
-
0 0 15px 0 var(--wr-border-glow-color-30), 0 0 25px 2px var(--wr-border-glow-color-20),
|
|
217
|
-
0 0 50px 2px var(--wr-border-glow-color-10);
|
|
218
|
-
--wr-border-glow-color: hsl(40deg 80% 80% / 100%);
|
|
219
|
-
--wr-border-glow-color-60: hsl(40deg 80% 80% / 60%);
|
|
220
|
-
--wr-border-glow-color-50: hsl(40deg 80% 80% / 50%);
|
|
221
|
-
--wr-border-glow-color-40: hsl(40deg 80% 80% / 40%);
|
|
222
|
-
--wr-border-glow-color-30: hsl(40deg 80% 80% / 30%);
|
|
223
|
-
--wr-border-glow-color-20: hsl(40deg 80% 80% / 20%);
|
|
224
|
-
--wr-border-glow-color-10: hsl(40deg 80% 80% / 10%);
|
|
225
|
-
--wr-border-glow-gradient-one: radial-gradient(at 80% 55%, hsl(268deg 100% 76%) 0px, transparent 50%);
|
|
226
|
-
--wr-border-glow-gradient-two: radial-gradient(at 69% 34%, hsl(349deg 100% 74%) 0px, transparent 50%);
|
|
227
|
-
--wr-border-glow-gradient-three: radial-gradient(at 8% 6%, hsl(136deg 100% 78%) 0px, transparent 50%);
|
|
228
|
-
--wr-border-glow-gradient-four: radial-gradient(at 41% 38%, hsl(192deg 100% 64%) 0px, transparent 50%);
|
|
229
|
-
--wr-border-glow-gradient-five: radial-gradient(at 86% 85%, hsl(186deg 100% 74%) 0px, transparent 50%);
|
|
230
|
-
--wr-border-glow-gradient-six: radial-gradient(at 82% 18%, hsl(52deg 100% 65%) 0px, transparent 50%);
|
|
231
|
-
--wr-border-glow-gradient-seven: radial-gradient(at 51% 4%, hsl(12deg 100% 72%) 0px, transparent 50%);
|
|
232
|
-
--wr-border-glow-gradient-base: linear-gradient(#c299ff 0 100%);
|
|
233
|
-
}
|
|
1
|
+
// Public Sass entry for `@use 'ngwr/border-glow'`.
|
|
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
|
+
// `border-glow.scss` is the component's `styleUrl`, and a component stylesheet is
|
|
8
|
+
// its OWN Sass compilation — `@use` only deduplicates within one. So while the
|
|
9
|
+
// umbrella sheet emits the theme once, forwarding it from here would inline a
|
|
10
|
+
// second, byte-identical copy of `:root`, `[data-theme='dark']` and the
|
|
11
|
+
// box-sizing reset into the compiled component styles, which ng-packagr then
|
|
12
|
+
// embeds in the FESM bundle as a string. `border-glow.scss` forwards `_rules`
|
|
13
|
+
// instead, so it carries this component's own CSS and nothing else.
|
|
14
|
+
@use '../../theme/styles';
|
|
15
|
+
@forward 'rules';
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// Cursor-tracked border glow — ports the reactbits.dev BorderGlow effect.
|
|
2
|
+
// All visual state is driven by two custom properties the component writes:
|
|
3
|
+
// --wr-border-glow-edge-proximity 0..100, scales with pointer-to-edge distance
|
|
4
|
+
// --wr-border-glow-angle 0deg..360deg, pointer-from-centre angle
|
|
5
|
+
// Plus a colour/geometry bag set once from inputs (see border-glow.ts).
|
|
6
|
+
|
|
7
|
+
.wr-border-glow {
|
|
8
|
+
--wr-border-glow-edge-proximity: 0;
|
|
9
|
+
--wr-border-glow-angle: 45deg;
|
|
10
|
+
// Theme-default halo (overridden inline when `[glowColor]` is set):
|
|
11
|
+
// deep amber that reads on white. Dark theme swaps to the pale pastel.
|
|
12
|
+
--wr-border-glow-color: hsl(40deg 90% 45% / 100%);
|
|
13
|
+
--wr-border-glow-color-60: hsl(40deg 90% 45% / 60%);
|
|
14
|
+
--wr-border-glow-color-50: hsl(40deg 90% 45% / 50%);
|
|
15
|
+
--wr-border-glow-color-40: hsl(40deg 90% 45% / 40%);
|
|
16
|
+
--wr-border-glow-color-30: hsl(40deg 90% 45% / 30%);
|
|
17
|
+
--wr-border-glow-color-20: hsl(40deg 90% 45% / 20%);
|
|
18
|
+
--wr-border-glow-color-10: hsl(40deg 90% 45% / 10%);
|
|
19
|
+
// Theme-default mesh palette (overridden inline when `[colors]` is set):
|
|
20
|
+
// deep tones that read on white. Dark theme restores the pastels below.
|
|
21
|
+
--wr-border-glow-gradient-one: radial-gradient(at 80% 55%, hsl(268deg 80% 50%) 0px, transparent 50%);
|
|
22
|
+
--wr-border-glow-gradient-two: radial-gradient(at 69% 34%, hsl(349deg 85% 52%) 0px, transparent 50%);
|
|
23
|
+
--wr-border-glow-gradient-three: radial-gradient(at 8% 6%, hsl(136deg 70% 38%) 0px, transparent 50%);
|
|
24
|
+
--wr-border-glow-gradient-four: radial-gradient(at 41% 38%, hsl(192deg 90% 40%) 0px, transparent 50%);
|
|
25
|
+
--wr-border-glow-gradient-five: radial-gradient(at 86% 85%, hsl(186deg 90% 38%) 0px, transparent 50%);
|
|
26
|
+
--wr-border-glow-gradient-six: radial-gradient(at 82% 18%, hsl(40deg 95% 45%) 0px, transparent 50%);
|
|
27
|
+
--wr-border-glow-gradient-seven: radial-gradient(at 51% 4%, hsl(12deg 90% 50%) 0px, transparent 50%);
|
|
28
|
+
--wr-border-glow-gradient-base: linear-gradient(hsl(262deg 70% 50%) 0 100%);
|
|
29
|
+
--wr-border-glow-edge-sensitivity: 30;
|
|
30
|
+
--wr-border-glow-color-sensitivity: calc(var(--wr-border-glow-edge-sensitivity) + 20);
|
|
31
|
+
--wr-border-glow-radius: 28px;
|
|
32
|
+
--wr-border-glow-padding: 40px;
|
|
33
|
+
--wr-border-glow-cone-spread: 25;
|
|
34
|
+
|
|
35
|
+
position: relative;
|
|
36
|
+
display: grid;
|
|
37
|
+
border-radius: var(--wr-border-glow-radius);
|
|
38
|
+
background: var(--wr-border-glow-bg, var(--wr-color-surface, #fff));
|
|
39
|
+
overflow: visible;
|
|
40
|
+
isolation: isolate;
|
|
41
|
+
transform: translate3d(0, 0, 0.01px); // create a new layer to keep blends tidy
|
|
42
|
+
// The faint static outline uses `box-shadow inset` instead of `border:` —
|
|
43
|
+
// CSS borders + `border-radius` leave 1px subpixel notches at the corners
|
|
44
|
+
// where the mask layers meet the curve, but inset shadows hug the radius
|
|
45
|
+
// pixel-perfect.
|
|
46
|
+
box-shadow: inset 0 0 0 1px var(--wr-border-glow-outline, var(--wr-color-outline, rgb(255 255 255 / 15%)));
|
|
47
|
+
|
|
48
|
+
&::before,
|
|
49
|
+
&::after,
|
|
50
|
+
& > .wr-border-glow__edge {
|
|
51
|
+
content: '';
|
|
52
|
+
position: absolute;
|
|
53
|
+
inset: 0;
|
|
54
|
+
border-radius: inherit;
|
|
55
|
+
transition: opacity 0.25s ease-out;
|
|
56
|
+
z-index: -1;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Hide the glow layers when the cursor isn't engaged AND the one-shot
|
|
60
|
+
// sweep isn't running.
|
|
61
|
+
&:not(:hover):not(.wr-border-glow--sweeping) {
|
|
62
|
+
&::before,
|
|
63
|
+
&::after,
|
|
64
|
+
& > .wr-border-glow__edge {
|
|
65
|
+
opacity: 0;
|
|
66
|
+
transition: opacity 0.75s ease-in-out;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Coloured mesh-gradient slice of the border (the visible "cone" along
|
|
71
|
+
// the perimeter under the cursor).
|
|
72
|
+
&::before {
|
|
73
|
+
border: 1px solid transparent;
|
|
74
|
+
background:
|
|
75
|
+
linear-gradient(var(--wr-border-glow-bg, var(--wr-color-surface, #fff)) 0 100%) padding-box,
|
|
76
|
+
linear-gradient(rgb(255 255 255 / 0%) 0 100%) border-box,
|
|
77
|
+
var(--wr-border-glow-gradient-one, radial-gradient(at 80% 55%, hsl(268deg 100% 76%) 0px, transparent 50%))
|
|
78
|
+
border-box,
|
|
79
|
+
var(--wr-border-glow-gradient-two, radial-gradient(at 69% 34%, hsl(349deg 100% 74%) 0px, transparent 50%))
|
|
80
|
+
border-box,
|
|
81
|
+
var(--wr-border-glow-gradient-three, radial-gradient(at 8% 6%, hsl(136deg 100% 78%) 0px, transparent 50%))
|
|
82
|
+
border-box,
|
|
83
|
+
var(--wr-border-glow-gradient-four, radial-gradient(at 41% 38%, hsl(192deg 100% 64%) 0px, transparent 50%))
|
|
84
|
+
border-box,
|
|
85
|
+
var(--wr-border-glow-gradient-five, radial-gradient(at 86% 85%, hsl(186deg 100% 74%) 0px, transparent 50%))
|
|
86
|
+
border-box,
|
|
87
|
+
var(--wr-border-glow-gradient-six, radial-gradient(at 82% 18%, hsl(52deg 100% 65%) 0px, transparent 50%))
|
|
88
|
+
border-box,
|
|
89
|
+
var(--wr-border-glow-gradient-seven, radial-gradient(at 51% 4%, hsl(12deg 100% 72%) 0px, transparent 50%))
|
|
90
|
+
border-box,
|
|
91
|
+
var(--wr-border-glow-gradient-base, linear-gradient(#c299ff 0 100%)) border-box;
|
|
92
|
+
|
|
93
|
+
opacity: calc(
|
|
94
|
+
(var(--wr-border-glow-edge-proximity) - var(--wr-border-glow-color-sensitivity)) /
|
|
95
|
+
(100 - var(--wr-border-glow-color-sensitivity))
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
mask-image: conic-gradient(
|
|
99
|
+
from var(--wr-border-glow-angle) at center,
|
|
100
|
+
black calc(var(--wr-border-glow-cone-spread) * 1%),
|
|
101
|
+
transparent calc((var(--wr-border-glow-cone-spread) + 15) * 1%),
|
|
102
|
+
transparent calc((100 - var(--wr-border-glow-cone-spread) - 15) * 1%),
|
|
103
|
+
black calc((100 - var(--wr-border-glow-cone-spread)) * 1%)
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Soft interior bloom — same mesh, blended with the card content.
|
|
108
|
+
&::after {
|
|
109
|
+
border: 1px solid transparent;
|
|
110
|
+
background:
|
|
111
|
+
var(--wr-border-glow-gradient-one, radial-gradient(at 80% 55%, hsl(268deg 100% 76%) 0px, transparent 50%))
|
|
112
|
+
padding-box,
|
|
113
|
+
var(--wr-border-glow-gradient-two, radial-gradient(at 69% 34%, hsl(349deg 100% 74%) 0px, transparent 50%))
|
|
114
|
+
padding-box,
|
|
115
|
+
var(--wr-border-glow-gradient-three, radial-gradient(at 8% 6%, hsl(136deg 100% 78%) 0px, transparent 50%))
|
|
116
|
+
padding-box,
|
|
117
|
+
var(--wr-border-glow-gradient-four, radial-gradient(at 41% 38%, hsl(192deg 100% 64%) 0px, transparent 50%))
|
|
118
|
+
padding-box,
|
|
119
|
+
var(--wr-border-glow-gradient-five, radial-gradient(at 86% 85%, hsl(186deg 100% 74%) 0px, transparent 50%))
|
|
120
|
+
padding-box,
|
|
121
|
+
var(--wr-border-glow-gradient-six, radial-gradient(at 82% 18%, hsl(52deg 100% 65%) 0px, transparent 50%))
|
|
122
|
+
padding-box,
|
|
123
|
+
var(--wr-border-glow-gradient-seven, radial-gradient(at 51% 4%, hsl(12deg 100% 72%) 0px, transparent 50%))
|
|
124
|
+
padding-box,
|
|
125
|
+
var(--wr-border-glow-gradient-base, linear-gradient(#c299ff 0 100%)) padding-box;
|
|
126
|
+
|
|
127
|
+
mask-image:
|
|
128
|
+
linear-gradient(to bottom, black, black), radial-gradient(ellipse at 50% 50%, black 40%, transparent 65%),
|
|
129
|
+
radial-gradient(ellipse at 66% 66%, black 5%, transparent 40%),
|
|
130
|
+
radial-gradient(ellipse at 33% 33%, black 5%, transparent 40%),
|
|
131
|
+
radial-gradient(ellipse at 66% 33%, black 5%, transparent 40%),
|
|
132
|
+
radial-gradient(ellipse at 33% 66%, black 5%, transparent 40%),
|
|
133
|
+
conic-gradient(from var(--wr-border-glow-angle) at center, transparent 5%, black 15%, black 85%, transparent 95%);
|
|
134
|
+
mask-composite: subtract, add, add, add, add, add;
|
|
135
|
+
|
|
136
|
+
// `--wr-border-glow-fill-scale` keeps the interior bloom subtle on
|
|
137
|
+
// light surfaces — at full strength the multiply wash darkens the
|
|
138
|
+
// whole card and the cone's surface wedge shows against it.
|
|
139
|
+
opacity: calc(
|
|
140
|
+
var(--wr-border-glow-fill-opacity, 0.5) * var(--wr-border-glow-fill-scale, 0.25) *
|
|
141
|
+
(var(--wr-border-glow-edge-proximity) - var(--wr-border-glow-color-sensitivity)) /
|
|
142
|
+
(100 - var(--wr-border-glow-color-sensitivity))
|
|
143
|
+
);
|
|
144
|
+
mix-blend-mode: var(--wr-border-glow-fill-blend, multiply);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Outer halo — stacked box-shadows on a separate child so we can mask
|
|
148
|
+
// the shadows to the cone without affecting the host's content.
|
|
149
|
+
& > .wr-border-glow__edge {
|
|
150
|
+
inset: calc(var(--wr-border-glow-padding) * -1);
|
|
151
|
+
pointer-events: none;
|
|
152
|
+
z-index: 1;
|
|
153
|
+
|
|
154
|
+
mask-image: conic-gradient(
|
|
155
|
+
from var(--wr-border-glow-angle) at center,
|
|
156
|
+
black 2.5%,
|
|
157
|
+
transparent 10%,
|
|
158
|
+
transparent 90%,
|
|
159
|
+
black 97.5%
|
|
160
|
+
);
|
|
161
|
+
opacity: calc(
|
|
162
|
+
(var(--wr-border-glow-edge-proximity) - var(--wr-border-glow-edge-sensitivity)) /
|
|
163
|
+
(100 - var(--wr-border-glow-edge-sensitivity))
|
|
164
|
+
);
|
|
165
|
+
// `plus-lighter` saturates to white on a light page — light theme
|
|
166
|
+
// paints the halo as plain colored shadows instead (see block below).
|
|
167
|
+
mix-blend-mode: var(--wr-border-glow-halo-blend, normal);
|
|
168
|
+
|
|
169
|
+
&::before {
|
|
170
|
+
content: '';
|
|
171
|
+
position: absolute;
|
|
172
|
+
inset: var(--wr-border-glow-padding);
|
|
173
|
+
border-radius: inherit;
|
|
174
|
+
// Light theme keeps only the outward halo — the inset half washes
|
|
175
|
+
// amber over the card interior without additive blending. Dark
|
|
176
|
+
// restores the full reactbits stack (see block below).
|
|
177
|
+
box-shadow: var(
|
|
178
|
+
--wr-border-glow-edge-shadow,
|
|
179
|
+
inset 0 0 0 1px var(--wr-border-glow-color, hsl(40deg 80% 80% / 100%)),
|
|
180
|
+
0 0 1px 0 var(--wr-border-glow-color-60, hsl(40deg 80% 80% / 60%)),
|
|
181
|
+
0 0 3px 0 var(--wr-border-glow-color-50, hsl(40deg 80% 80% / 50%)),
|
|
182
|
+
0 0 6px 0 var(--wr-border-glow-color-40, hsl(40deg 80% 80% / 40%)),
|
|
183
|
+
0 0 15px 0 var(--wr-border-glow-color-30, hsl(40deg 80% 80% / 30%)),
|
|
184
|
+
0 0 25px 2px var(--wr-border-glow-color-20, hsl(40deg 80% 80% / 20%)),
|
|
185
|
+
0 0 50px 2px var(--wr-border-glow-color-10, hsl(40deg 80% 80% / 10%))
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
&__inner {
|
|
191
|
+
position: relative;
|
|
192
|
+
z-index: 1;
|
|
193
|
+
display: flex;
|
|
194
|
+
flex-direction: column;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
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
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@forward './styles';
|
|
1
|
+
@forward './styles/rules';
|
|
@@ -1,78 +1,15 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// the
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
font-family: var(--wr-font-family-base);
|
|
17
|
-
font-size: var(--wr-text-sm);
|
|
18
|
-
color: var(--wr-breadcrumbs-color);
|
|
19
|
-
|
|
20
|
-
&__nav {
|
|
21
|
-
display: block;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
&__list {
|
|
25
|
-
display: flex;
|
|
26
|
-
flex-wrap: wrap;
|
|
27
|
-
align-items: center;
|
|
28
|
-
gap: var(--wr-breadcrumbs-gap);
|
|
29
|
-
margin: 0;
|
|
30
|
-
padding: 0;
|
|
31
|
-
list-style: none;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
&__item {
|
|
35
|
-
display: inline-flex;
|
|
36
|
-
align-items: center;
|
|
37
|
-
gap: var(--wr-breadcrumbs-gap);
|
|
38
|
-
|
|
39
|
-
// Separator before every item except the first.
|
|
40
|
-
&:not(:first-child)::before {
|
|
41
|
-
content: var(--wr-breadcrumbs-separator);
|
|
42
|
-
color: var(--wr-breadcrumbs-separator-color);
|
|
43
|
-
user-select: none;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
&__link {
|
|
48
|
-
display: inline-flex;
|
|
49
|
-
align-items: center;
|
|
50
|
-
gap: 0.375rem;
|
|
51
|
-
color: var(--wr-breadcrumbs-link-color);
|
|
52
|
-
text-decoration: none;
|
|
53
|
-
border-radius: var(--wr-border-radius-sm);
|
|
54
|
-
transition: color 0.15s ease;
|
|
55
|
-
|
|
56
|
-
&:hover {
|
|
57
|
-
text-decoration: underline;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
&:focus-visible {
|
|
61
|
-
@include theme.focus-ring;
|
|
62
|
-
outline-offset: 2px;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
&__current {
|
|
67
|
-
display: inline-flex;
|
|
68
|
-
align-items: center;
|
|
69
|
-
gap: 0.375rem;
|
|
70
|
-
color: var(--wr-breadcrumbs-current-color);
|
|
71
|
-
font-weight: 600;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
&__icon {
|
|
75
|
-
--wr-icon-size: 1rem;
|
|
76
|
-
flex: 0 0 auto;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
1
|
+
// Public Sass entry for `@use 'ngwr/breadcrumbs'`.
|
|
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
|
+
// `breadcrumbs.scss` is the component's `styleUrl`, and a component stylesheet is
|
|
8
|
+
// its OWN Sass compilation — `@use` only deduplicates within one. So while the
|
|
9
|
+
// umbrella sheet emits the theme once, forwarding it from here would inline a
|
|
10
|
+
// second, byte-identical copy of `:root`, `[data-theme='dark']` and the
|
|
11
|
+
// box-sizing reset into the compiled component styles, which ng-packagr then
|
|
12
|
+
// embeds in the FESM bundle as a string. `breadcrumbs.scss` forwards `_rules`
|
|
13
|
+
// instead, so it carries this component's own CSS and nothing else.
|
|
14
|
+
@use '../../theme/styles';
|
|
15
|
+
@forward 'rules';
|