@hyalo/angular 0.0.0-stage → 0.3.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/CHANGELOG.md +95 -0
- package/LICENSE +21 -0
- package/README.md +45 -2
- package/fesm2022/hyalo-angular-accordion.mjs +230 -0
- package/fesm2022/hyalo-angular-accordion.mjs.map +1 -0
- package/fesm2022/hyalo-angular-alert.mjs +171 -0
- package/fesm2022/hyalo-angular-alert.mjs.map +1 -0
- package/fesm2022/hyalo-angular-aspect-ratio.mjs +64 -0
- package/fesm2022/hyalo-angular-aspect-ratio.mjs.map +1 -0
- package/fesm2022/hyalo-angular-avatar.mjs +169 -0
- package/fesm2022/hyalo-angular-avatar.mjs.map +1 -0
- package/fesm2022/hyalo-angular-badge.mjs +268 -0
- package/fesm2022/hyalo-angular-badge.mjs.map +1 -0
- package/fesm2022/hyalo-angular-bento.mjs +132 -0
- package/fesm2022/hyalo-angular-bento.mjs.map +1 -0
- package/fesm2022/hyalo-angular-blocks.mjs +985 -0
- package/fesm2022/hyalo-angular-blocks.mjs.map +1 -0
- package/fesm2022/hyalo-angular-border-beam.mjs +73 -0
- package/fesm2022/hyalo-angular-border-beam.mjs.map +1 -0
- package/fesm2022/hyalo-angular-breadcrumb.mjs +77 -0
- package/fesm2022/hyalo-angular-breadcrumb.mjs.map +1 -0
- package/fesm2022/hyalo-angular-button-group.mjs +90 -0
- package/fesm2022/hyalo-angular-button-group.mjs.map +1 -0
- package/fesm2022/hyalo-angular-button.mjs +204 -0
- package/fesm2022/hyalo-angular-button.mjs.map +1 -0
- package/fesm2022/hyalo-angular-card.mjs +221 -0
- package/fesm2022/hyalo-angular-card.mjs.map +1 -0
- package/fesm2022/hyalo-angular-carousel.mjs +709 -0
- package/fesm2022/hyalo-angular-carousel.mjs.map +1 -0
- package/fesm2022/hyalo-angular-chapter-nav.mjs +336 -0
- package/fesm2022/hyalo-angular-chapter-nav.mjs.map +1 -0
- package/fesm2022/hyalo-angular-chart-engine-DSJop6He.mjs +5 -0
- package/fesm2022/hyalo-angular-chart-engine-DSJop6He.mjs.map +1 -0
- package/fesm2022/hyalo-angular-chart.mjs +391 -0
- package/fesm2022/hyalo-angular-chart.mjs.map +1 -0
- package/fesm2022/hyalo-angular-choice.mjs +789 -0
- package/fesm2022/hyalo-angular-choice.mjs.map +1 -0
- package/fesm2022/hyalo-angular-code-block-highlight-B20d5C76.mjs +40 -0
- package/fesm2022/hyalo-angular-code-block-highlight-B20d5C76.mjs.map +1 -0
- package/fesm2022/hyalo-angular-code-block.mjs +161 -0
- package/fesm2022/hyalo-angular-code-block.mjs.map +1 -0
- package/fesm2022/hyalo-angular-command.mjs +193 -0
- package/fesm2022/hyalo-angular-command.mjs.map +1 -0
- package/fesm2022/hyalo-angular-copy.mjs +138 -0
- package/fesm2022/hyalo-angular-copy.mjs.map +1 -0
- package/fesm2022/hyalo-angular-core.mjs +424 -0
- package/fesm2022/hyalo-angular-core.mjs.map +1 -0
- package/fesm2022/hyalo-angular-description-list.mjs +57 -0
- package/fesm2022/hyalo-angular-description-list.mjs.map +1 -0
- package/fesm2022/hyalo-angular-dialog.mjs +600 -0
- package/fesm2022/hyalo-angular-dialog.mjs.map +1 -0
- package/fesm2022/hyalo-angular-divider.mjs +66 -0
- package/fesm2022/hyalo-angular-divider.mjs.map +1 -0
- package/fesm2022/hyalo-angular-empty-state.mjs +123 -0
- package/fesm2022/hyalo-angular-empty-state.mjs.map +1 -0
- package/fesm2022/hyalo-angular-field.mjs +344 -0
- package/fesm2022/hyalo-angular-field.mjs.map +1 -0
- package/fesm2022/hyalo-angular-filter.mjs +309 -0
- package/fesm2022/hyalo-angular-filter.mjs.map +1 -0
- package/fesm2022/hyalo-angular-hotspot.mjs +225 -0
- package/fesm2022/hyalo-angular-hotspot.mjs.map +1 -0
- package/fesm2022/hyalo-angular-hover-card.mjs +233 -0
- package/fesm2022/hyalo-angular-hover-card.mjs.map +1 -0
- package/fesm2022/hyalo-angular-icon.mjs +385 -0
- package/fesm2022/hyalo-angular-icon.mjs.map +1 -0
- package/fesm2022/hyalo-angular-image-compare.mjs +168 -0
- package/fesm2022/hyalo-angular-image-compare.mjs.map +1 -0
- package/fesm2022/hyalo-angular-interaction.mjs +446 -0
- package/fesm2022/hyalo-angular-interaction.mjs.map +1 -0
- package/fesm2022/hyalo-angular-kbd.mjs +41 -0
- package/fesm2022/hyalo-angular-kbd.mjs.map +1 -0
- package/fesm2022/hyalo-angular-lightbox.mjs +228 -0
- package/fesm2022/hyalo-angular-lightbox.mjs.map +1 -0
- package/fesm2022/hyalo-angular-link.mjs +42 -0
- package/fesm2022/hyalo-angular-link.mjs.map +1 -0
- package/fesm2022/hyalo-angular-list.mjs +131 -0
- package/fesm2022/hyalo-angular-list.mjs.map +1 -0
- package/fesm2022/hyalo-angular-marquee.mjs +197 -0
- package/fesm2022/hyalo-angular-marquee.mjs.map +1 -0
- package/fesm2022/hyalo-angular-menu.mjs +423 -0
- package/fesm2022/hyalo-angular-menu.mjs.map +1 -0
- package/fesm2022/hyalo-angular-mesh.mjs +126 -0
- package/fesm2022/hyalo-angular-mesh.mjs.map +1 -0
- package/fesm2022/hyalo-angular-motion.mjs +620 -0
- package/fesm2022/hyalo-angular-motion.mjs.map +1 -0
- package/fesm2022/hyalo-angular-navbar.mjs +343 -0
- package/fesm2022/hyalo-angular-navbar.mjs.map +1 -0
- package/fesm2022/hyalo-angular-navigation-menu.mjs +222 -0
- package/fesm2022/hyalo-angular-navigation-menu.mjs.map +1 -0
- package/fesm2022/hyalo-angular-number-ticker.mjs +174 -0
- package/fesm2022/hyalo-angular-number-ticker.mjs.map +1 -0
- package/fesm2022/hyalo-angular-overlay.mjs +163 -0
- package/fesm2022/hyalo-angular-overlay.mjs.map +1 -0
- package/fesm2022/hyalo-angular-pagination.mjs +187 -0
- package/fesm2022/hyalo-angular-pagination.mjs.map +1 -0
- package/fesm2022/hyalo-angular-popover-overlay-kit-6wPwnxln.mjs +3 -0
- package/fesm2022/hyalo-angular-popover.mjs +516 -0
- package/fesm2022/hyalo-angular-popover.mjs.map +1 -0
- package/fesm2022/hyalo-angular-progress.mjs +209 -0
- package/fesm2022/hyalo-angular-progress.mjs.map +1 -0
- package/fesm2022/hyalo-angular-progressive-blur.mjs +73 -0
- package/fesm2022/hyalo-angular-progressive-blur.mjs.map +1 -0
- package/fesm2022/hyalo-angular-refraction-renderer-5ZA-kfsA.mjs +186 -0
- package/fesm2022/hyalo-angular-refraction-renderer-5ZA-kfsA.mjs.map +1 -0
- package/fesm2022/hyalo-angular-refraction.mjs +178 -0
- package/fesm2022/hyalo-angular-refraction.mjs.map +1 -0
- package/fesm2022/hyalo-angular-scroll-area.mjs +93 -0
- package/fesm2022/hyalo-angular-scroll-area.mjs.map +1 -0
- package/fesm2022/hyalo-angular-scroll-to-top.mjs +127 -0
- package/fesm2022/hyalo-angular-scroll-to-top.mjs.map +1 -0
- package/fesm2022/hyalo-angular-segmented.mjs +223 -0
- package/fesm2022/hyalo-angular-segmented.mjs.map +1 -0
- package/fesm2022/hyalo-angular-select.mjs +561 -0
- package/fesm2022/hyalo-angular-select.mjs.map +1 -0
- package/fesm2022/hyalo-angular-sidebar.mjs +241 -0
- package/fesm2022/hyalo-angular-sidebar.mjs.map +1 -0
- package/fesm2022/hyalo-angular-skeleton.mjs +131 -0
- package/fesm2022/hyalo-angular-skeleton.mjs.map +1 -0
- package/fesm2022/hyalo-angular-sparkline.mjs +110 -0
- package/fesm2022/hyalo-angular-sparkline.mjs.map +1 -0
- package/fesm2022/hyalo-angular-split-text.mjs +126 -0
- package/fesm2022/hyalo-angular-split-text.mjs.map +1 -0
- package/fesm2022/hyalo-angular-stat.mjs +193 -0
- package/fesm2022/hyalo-angular-stat.mjs.map +1 -0
- package/fesm2022/hyalo-angular-stepper.mjs +254 -0
- package/fesm2022/hyalo-angular-stepper.mjs.map +1 -0
- package/fesm2022/hyalo-angular-table.mjs +335 -0
- package/fesm2022/hyalo-angular-table.mjs.map +1 -0
- package/fesm2022/hyalo-angular-tabs.mjs +324 -0
- package/fesm2022/hyalo-angular-tabs.mjs.map +1 -0
- package/fesm2022/hyalo-angular-theme.mjs +94 -0
- package/fesm2022/hyalo-angular-theme.mjs.map +1 -0
- package/fesm2022/hyalo-angular-timeline.mjs +157 -0
- package/fesm2022/hyalo-angular-timeline.mjs.map +1 -0
- package/fesm2022/hyalo-angular-toast.mjs +323 -0
- package/fesm2022/hyalo-angular-toast.mjs.map +1 -0
- package/fesm2022/hyalo-angular.mjs +2 -0
- package/package.json +329 -3
- package/styles/hyalo-core.css +25 -0
- package/styles/hyalo.css +17 -0
- package/styles/overlays/dialog.css +9 -0
- package/styles/overlays/popover.css +9 -0
- package/styles/overlays/select.css +9 -0
- package/styles/overlays/toast.css +8 -0
- package/styles/palettes/aurora.css +47 -0
- package/styles/palettes/ember.css +47 -0
- package/styles/palettes/graphite.css +47 -0
- package/styles/palettes/ocean.css +47 -0
- package/styles/palettes/orchid.css +47 -0
- package/styles/palettes/rose.css +47 -0
- package/styles/parts/card.css +49 -0
- package/styles/parts/dialog.css +116 -0
- package/styles/parts/drawer.css +124 -0
- package/styles/parts/field.css +44 -0
- package/styles/parts/glass.css +139 -0
- package/styles/parts/motion.css +101 -0
- package/styles/parts/navbar.css +55 -0
- package/styles/parts/popover.css +27 -0
- package/styles/parts/presence.css +55 -0
- package/styles/parts/reset.css +42 -0
- package/styles/parts/select.css +46 -0
- package/styles/parts/themes.css +105 -0
- package/styles/parts/toast.css +128 -0
- package/styles/parts/tokens.css +151 -0
- package/styles/parts/typography.css +81 -0
- package/types/hyalo-angular-accordion.d.ts +74 -0
- package/types/hyalo-angular-alert.d.ts +47 -0
- package/types/hyalo-angular-aspect-ratio.d.ts +13 -0
- package/types/hyalo-angular-avatar.d.ts +39 -0
- package/types/hyalo-angular-badge.d.ts +82 -0
- package/types/hyalo-angular-bento.d.ts +25 -0
- package/types/hyalo-angular-blocks.d.ts +272 -0
- package/types/hyalo-angular-border-beam.d.ts +15 -0
- package/types/hyalo-angular-breadcrumb.d.ts +22 -0
- package/types/hyalo-angular-button-group.d.ts +19 -0
- package/types/hyalo-angular-button.d.ts +89 -0
- package/types/hyalo-angular-card.d.ts +61 -0
- package/types/hyalo-angular-carousel.d.ts +147 -0
- package/types/hyalo-angular-chapter-nav.d.ts +79 -0
- package/types/hyalo-angular-chart.d.ts +90 -0
- package/types/hyalo-angular-choice.d.ts +259 -0
- package/types/hyalo-angular-code-block.d.ts +46 -0
- package/types/hyalo-angular-command.d.ts +41 -0
- package/types/hyalo-angular-copy.d.ts +39 -0
- package/types/hyalo-angular-core.d.ts +210 -0
- package/types/hyalo-angular-description-list.d.ts +16 -0
- package/types/hyalo-angular-dialog.d.ts +171 -0
- package/types/hyalo-angular-divider.d.ts +12 -0
- package/types/hyalo-angular-empty-state.d.ts +30 -0
- package/types/hyalo-angular-field.d.ts +141 -0
- package/types/hyalo-angular-filter.d.ts +122 -0
- package/types/hyalo-angular-hotspot.d.ts +70 -0
- package/types/hyalo-angular-hover-card.d.ts +47 -0
- package/types/hyalo-angular-icon.d.ts +122 -0
- package/types/hyalo-angular-image-compare.d.ts +55 -0
- package/types/hyalo-angular-interaction.d.ts +131 -0
- package/types/hyalo-angular-kbd.d.ts +5 -0
- package/types/hyalo-angular-lightbox.d.ts +67 -0
- package/types/hyalo-angular-link.d.ts +5 -0
- package/types/hyalo-angular-list.d.ts +30 -0
- package/types/hyalo-angular-marquee.d.ts +48 -0
- package/types/hyalo-angular-menu.d.ts +105 -0
- package/types/hyalo-angular-mesh.d.ts +36 -0
- package/types/hyalo-angular-motion.d.ts +218 -0
- package/types/hyalo-angular-navbar.d.ts +110 -0
- package/types/hyalo-angular-navigation-menu.d.ts +47 -0
- package/types/hyalo-angular-number-ticker.d.ts +52 -0
- package/types/hyalo-angular-overlay.d.ts +40 -0
- package/types/hyalo-angular-pagination.d.ts +59 -0
- package/types/hyalo-angular-popover.d.ts +152 -0
- package/types/hyalo-angular-progress.d.ts +46 -0
- package/types/hyalo-angular-progressive-blur.d.ts +14 -0
- package/types/hyalo-angular-refraction.d.ts +46 -0
- package/types/hyalo-angular-scroll-area.d.ts +18 -0
- package/types/hyalo-angular-scroll-to-top.d.ts +31 -0
- package/types/hyalo-angular-segmented.d.ts +79 -0
- package/types/hyalo-angular-select.d.ts +176 -0
- package/types/hyalo-angular-sidebar.d.ts +57 -0
- package/types/hyalo-angular-skeleton.d.ts +34 -0
- package/types/hyalo-angular-sparkline.d.ts +19 -0
- package/types/hyalo-angular-split-text.d.ts +24 -0
- package/types/hyalo-angular-stat.d.ts +56 -0
- package/types/hyalo-angular-stepper.d.ts +63 -0
- package/types/hyalo-angular-table.d.ts +125 -0
- package/types/hyalo-angular-tabs.d.ts +102 -0
- package/types/hyalo-angular-theme.d.ts +46 -0
- package/types/hyalo-angular-timeline.d.ts +36 -0
- package/types/hyalo-angular-toast.d.ts +79 -0
- package/types/hyalo-angular.d.ts +2 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Rose palette: raspberry on blush.
|
|
3
|
+
*
|
|
4
|
+
* Loaded on demand, never part of hyalo.css. Set data-hy-palette="rose" on
|
|
5
|
+
* <html> after this file has loaded, and remove the attribute to go back to
|
|
6
|
+
* the built-in palette. HyPalette does both for you.
|
|
7
|
+
*
|
|
8
|
+
* Each colour is written once with light-dark(), which resolves against the
|
|
9
|
+
* color-scheme that themes.css sets. Forced themes, the OS setting and
|
|
10
|
+
* .hy-theme-dark islands all keep working without repeating the values.
|
|
11
|
+
*
|
|
12
|
+
* The html in the selector outranks the dark theme rules in themes.css, so
|
|
13
|
+
* the palette wins in whatever order the two stylesheets load.
|
|
14
|
+
*/
|
|
15
|
+
@layer hy.tokens {
|
|
16
|
+
html:root[data-hy-palette='rose'],
|
|
17
|
+
[data-hy-palette='rose'] .hy-theme-dark {
|
|
18
|
+
--hy-bg: light-dark(#f8f0f2, #130a0e);
|
|
19
|
+
--hy-surface-1: light-dark(#ffffff, #1c1217);
|
|
20
|
+
--hy-surface-2: light-dark(#fcf6f7, #24181e);
|
|
21
|
+
--hy-surface-3: light-dark(#f1e5e8, #2e1f26);
|
|
22
|
+
--hy-surface-4: light-dark(#e7d6db, #3a2931);
|
|
23
|
+
--hy-ink: light-dark(#22121a, #f9edf1);
|
|
24
|
+
--hy-ink-2: light-dark(#523b45, #d3bcc5);
|
|
25
|
+
--hy-ink-3: light-dark(#6c535e, #a8919b);
|
|
26
|
+
--hy-ink-2-glass: light-dark(#432f38, #e0ccd4);
|
|
27
|
+
--hy-ink-3-glass: light-dark(#5a434d, #bba3ad);
|
|
28
|
+
--hy-line: light-dark(rgb(34 18 26 / 0.12), rgb(249 237 241 / 0.12));
|
|
29
|
+
--hy-line-strong: light-dark(rgb(34 18 26 / 0.24), rgb(249 237 241 / 0.26));
|
|
30
|
+
--hy-primary: light-dark(#b8175a, #f472b6);
|
|
31
|
+
--hy-primary-hover: light-dark(#9e134d, #f9a8d4);
|
|
32
|
+
--hy-primary-ink: light-dark(#ffffff, #2a0718);
|
|
33
|
+
--hy-primary-wash: light-dark(rgb(184 23 90 / 0.12), rgb(244 114 182 / 0.16));
|
|
34
|
+
--hy-secondary: light-dark(#4b44b5, #aaa6ff);
|
|
35
|
+
--hy-secondary-ink: light-dark(#ffffff, #120f33);
|
|
36
|
+
--hy-glass-border: light-dark(rgb(34 18 26 / 0.08), rgb(255 255 255 / 0.08));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Same as the high contrast rule in themes.css, which this file outranks. */
|
|
40
|
+
@media (prefers-contrast: more) {
|
|
41
|
+
html:root[data-hy-palette='rose'],
|
|
42
|
+
[data-hy-palette='rose'] .hy-theme-dark {
|
|
43
|
+
--hy-line: var(--hy-line-strong);
|
|
44
|
+
--hy-ink-3: var(--hy-ink-2);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Card slots. These classes come from directives on projected content, so
|
|
3
|
+
* they are styled globally instead of from inside the component.
|
|
4
|
+
*/
|
|
5
|
+
.hy-card__media {
|
|
6
|
+
display: block;
|
|
7
|
+
margin-block: calc(var(--_pad) * -1) var(--hy-space-2);
|
|
8
|
+
margin-inline: calc(var(--_pad) * -1);
|
|
9
|
+
inline-size: calc(100% + var(--_pad) * 2);
|
|
10
|
+
max-inline-size: none;
|
|
11
|
+
aspect-ratio: var(--hy-card-media-ratio, 16 / 10);
|
|
12
|
+
object-fit: cover;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.hy-card__header {
|
|
16
|
+
margin: 0;
|
|
17
|
+
font-size: var(--hy-step-2);
|
|
18
|
+
font-weight: 620;
|
|
19
|
+
line-height: var(--hy-leading-tight);
|
|
20
|
+
color: var(--hy-ink);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.hy-card__footer {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
gap: var(--hy-space-3);
|
|
27
|
+
margin-block-start: var(--hy-space-2);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.hy-card__link {
|
|
31
|
+
color: inherit;
|
|
32
|
+
text-decoration: none;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.hy-card__link::after {
|
|
36
|
+
content: '';
|
|
37
|
+
position: absolute;
|
|
38
|
+
inset: 0;
|
|
39
|
+
border-radius: inherit;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.hy-card__link:focus-visible {
|
|
43
|
+
outline: none;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.hy-card :is(button, a:not(.hy-card__link), input, select, textarea, label) {
|
|
47
|
+
position: relative;
|
|
48
|
+
z-index: 1;
|
|
49
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Dialogs and drawers. Both render in CDK overlays, so their styles live
|
|
3
|
+
* here. The panel is the .cdk-dialog-container inside the pane.
|
|
4
|
+
*
|
|
5
|
+
* The CDK injects its structural overlay styles without a layer, and
|
|
6
|
+
* unlayered rules beat everything in ours. That is why the container's
|
|
7
|
+
* display needs !important and the dialog widths are set inline from
|
|
8
|
+
* HyDialog instead of here.
|
|
9
|
+
*/
|
|
10
|
+
.hy-dialog-pane,
|
|
11
|
+
.hy-drawer-pane {
|
|
12
|
+
max-inline-size: 100vw;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.hy-dialog-pane > .cdk-dialog-container,
|
|
16
|
+
.hy-drawer-pane > .cdk-dialog-container {
|
|
17
|
+
display: flex !important;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
gap: var(--hy-space-4);
|
|
20
|
+
inline-size: 100%;
|
|
21
|
+
max-block-size: inherit;
|
|
22
|
+
padding: var(--hy-dialog-padding, var(--hy-space-7));
|
|
23
|
+
overflow: auto;
|
|
24
|
+
color: var(--hy-ink);
|
|
25
|
+
outline: none;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* Content opened as a component puts its own host element in between.
|
|
30
|
+
* Let the parts inside it join the panel's flex layout.
|
|
31
|
+
*/
|
|
32
|
+
:is(.hy-dialog-pane, .hy-drawer-pane)
|
|
33
|
+
> .cdk-dialog-container
|
|
34
|
+
> :not(.hy-dialog__title, .hy-dialog__content, .hy-dialog__actions, .hy-drawer__grabber) {
|
|
35
|
+
display: contents;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/*
|
|
39
|
+
* The animation runs on the glass panel, not the pane. An ancestor with
|
|
40
|
+
* opacity below 1 becomes the backdrop root, so the panel's blur would see
|
|
41
|
+
* nothing behind it until the fade ended, then snap in.
|
|
42
|
+
*/
|
|
43
|
+
.hy-dialog-pane > .cdk-dialog-container {
|
|
44
|
+
border-radius: var(--hy-dialog-radius, var(--hy-radius-l));
|
|
45
|
+
max-block-size: calc(100dvh - 2 * var(--hy-space-6));
|
|
46
|
+
animation: hy-dialog-in var(--hy-dur-enter) var(--hy-ease-out);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.hy-dialog-pane[data-state='closing'] > .cdk-dialog-container {
|
|
50
|
+
animation: hy-dialog-out var(--hy-dur-exit) var(--hy-ease-inout) forwards;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.hy-dialog-pane {
|
|
54
|
+
inline-size: calc(100vw - 2 * var(--hy-space-4));
|
|
55
|
+
max-block-size: calc(100dvh - 2 * var(--hy-space-6));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@media (max-width: 40rem) {
|
|
59
|
+
.hy-dialog--full {
|
|
60
|
+
inline-size: 100vw;
|
|
61
|
+
block-size: 100dvh;
|
|
62
|
+
max-block-size: none;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.hy-dialog--full > .cdk-dialog-container {
|
|
66
|
+
border-radius: 0;
|
|
67
|
+
max-block-size: none;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Content parts */
|
|
72
|
+
.hy-dialog__title {
|
|
73
|
+
margin: 0;
|
|
74
|
+
font-size: var(--hy-step-2);
|
|
75
|
+
font-weight: 640;
|
|
76
|
+
line-height: var(--hy-leading-tight);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.hy-dialog__content {
|
|
80
|
+
margin: 0;
|
|
81
|
+
flex: 1;
|
|
82
|
+
color: var(--hy-ink-2);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.hy-dialog__actions {
|
|
86
|
+
display: flex;
|
|
87
|
+
flex-wrap: wrap;
|
|
88
|
+
justify-content: flex-end;
|
|
89
|
+
gap: var(--hy-space-2);
|
|
90
|
+
margin-block-start: var(--hy-space-2);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* Out the way it came in. The blur grows with the panel, so the glass reads
|
|
95
|
+
* as material arriving rather than a picture fading in. With reduced motion
|
|
96
|
+
* --hy-move is 0 and only the fade is left.
|
|
97
|
+
*/
|
|
98
|
+
@keyframes hy-dialog-in {
|
|
99
|
+
from {
|
|
100
|
+
opacity: 0;
|
|
101
|
+
translate: 0 calc(0.75rem * var(--hy-move));
|
|
102
|
+
scale: calc(1 - 0.03 * var(--hy-move));
|
|
103
|
+
backdrop-filter: blur(0) saturate(100%);
|
|
104
|
+
-webkit-backdrop-filter: blur(0) saturate(100%);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@keyframes hy-dialog-out {
|
|
109
|
+
to {
|
|
110
|
+
opacity: 0;
|
|
111
|
+
translate: 0 calc(0.75rem * var(--hy-move));
|
|
112
|
+
scale: calc(1 - 0.03 * var(--hy-move));
|
|
113
|
+
backdrop-filter: blur(0) saturate(100%);
|
|
114
|
+
-webkit-backdrop-filter: blur(0) saturate(100%);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Drawers and bottom sheets. Shares the panel and content styles in dialog.css.
|
|
3
|
+
*
|
|
4
|
+
* With motion on, the panel runs on a spring from TypeScript (see sheet.ts)
|
|
5
|
+
* and gets .hy-sheet-driven, which turns the keyframes off. The keyframes
|
|
6
|
+
* here are the reduced-motion path: a cross-fade, since --hy-move is 0.
|
|
7
|
+
* Like dialogs, the panel animates and not the pane, so its blur works.
|
|
8
|
+
*/
|
|
9
|
+
.hy-drawer-pane > .cdk-dialog-container {
|
|
10
|
+
block-size: 100%;
|
|
11
|
+
padding: var(--hy-drawer-padding, var(--hy-space-7));
|
|
12
|
+
border-radius: 0;
|
|
13
|
+
/* Side drawers are dragged sideways; vertical touches still scroll. */
|
|
14
|
+
touch-action: pan-y;
|
|
15
|
+
animation: hy-drawer-in var(--hy-dur-enter) var(--hy-ease-out);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.hy-drawer-pane > .cdk-dialog-container.hy-sheet-driven {
|
|
19
|
+
animation: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.hy-drawer-pane > .cdk-dialog-container[data-dragging] {
|
|
23
|
+
user-select: none;
|
|
24
|
+
cursor: grabbing;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.hy-drawer--start > .cdk-dialog-container {
|
|
28
|
+
border-start-end-radius: var(--hy-drawer-radius, var(--hy-radius-l));
|
|
29
|
+
border-end-end-radius: var(--hy-drawer-radius, var(--hy-radius-l));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.hy-drawer--end > .cdk-dialog-container {
|
|
33
|
+
border-start-start-radius: var(--hy-drawer-radius, var(--hy-radius-l));
|
|
34
|
+
border-end-start-radius: var(--hy-drawer-radius, var(--hy-radius-l));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.hy-drawer--bottom > .cdk-dialog-container {
|
|
38
|
+
position: relative;
|
|
39
|
+
max-block-size: 85dvh;
|
|
40
|
+
border-start-start-radius: var(--hy-drawer-radius, var(--hy-radius-l));
|
|
41
|
+
border-start-end-radius: var(--hy-drawer-radius, var(--hy-radius-l));
|
|
42
|
+
padding-block-end: max(var(--hy-drawer-padding, var(--hy-space-7)), env(safe-area-inset-bottom));
|
|
43
|
+
touch-action: pan-x pan-y;
|
|
44
|
+
animation-name: hy-sheet-in;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* The handle that says "this can be pulled down". */
|
|
48
|
+
.hy-drawer__grabber {
|
|
49
|
+
position: absolute;
|
|
50
|
+
inset-block-start: 0;
|
|
51
|
+
inset-inline: 0;
|
|
52
|
+
block-size: var(--hy-space-6);
|
|
53
|
+
touch-action: none;
|
|
54
|
+
cursor: grab;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.hy-drawer__grabber::before {
|
|
58
|
+
content: '';
|
|
59
|
+
position: absolute;
|
|
60
|
+
inset-block-start: var(--hy-space-2);
|
|
61
|
+
inset-inline-start: 50%;
|
|
62
|
+
inline-size: 2.25rem;
|
|
63
|
+
block-size: 0.3125rem;
|
|
64
|
+
translate: -50% 0;
|
|
65
|
+
border-radius: var(--hy-radius-pill);
|
|
66
|
+
background: color-mix(in srgb, var(--hy-ink) 28%, transparent);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.hy-drawer__grabber:dir(rtl)::before {
|
|
70
|
+
translate: 50% 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.hy-drawer--start {
|
|
74
|
+
--_from: -100%;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.hy-drawer--end {
|
|
78
|
+
--_from: 100%;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
[dir='rtl'] .hy-drawer--start {
|
|
82
|
+
--_from: 100%;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
[dir='rtl'] .hy-drawer--end {
|
|
86
|
+
--_from: -100%;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.hy-drawer-pane[data-state='closing'] > .cdk-dialog-container {
|
|
90
|
+
animation: hy-drawer-out var(--hy-dur-exit) var(--hy-ease-inout) forwards;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.hy-drawer--bottom[data-state='closing'] > .cdk-dialog-container {
|
|
94
|
+
animation-name: hy-sheet-out;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* Without movement (--hy-move: 0) these fade instead of slide. */
|
|
98
|
+
@keyframes hy-drawer-in {
|
|
99
|
+
from {
|
|
100
|
+
opacity: var(--hy-move);
|
|
101
|
+
translate: calc(var(--_from) * var(--hy-move)) 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@keyframes hy-drawer-out {
|
|
106
|
+
to {
|
|
107
|
+
opacity: var(--hy-move);
|
|
108
|
+
translate: calc(var(--_from) * var(--hy-move)) 0;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@keyframes hy-sheet-in {
|
|
113
|
+
from {
|
|
114
|
+
opacity: var(--hy-move);
|
|
115
|
+
translate: 0 calc(100% * var(--hy-move));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@keyframes hy-sheet-out {
|
|
120
|
+
to {
|
|
121
|
+
opacity: var(--hy-move);
|
|
122
|
+
translate: 0 calc(100% * var(--hy-move));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* Controls projected into hy-field. */
|
|
2
|
+
.hy-input {
|
|
3
|
+
flex: 1;
|
|
4
|
+
min-inline-size: 0;
|
|
5
|
+
align-self: stretch;
|
|
6
|
+
padding: 0;
|
|
7
|
+
border: 0;
|
|
8
|
+
border-radius: inherit;
|
|
9
|
+
outline: 0;
|
|
10
|
+
appearance: none;
|
|
11
|
+
background: transparent;
|
|
12
|
+
color: var(--hy-ink);
|
|
13
|
+
font: inherit;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* The enclosing field owns the rounded focus ring, including search inputs. */
|
|
17
|
+
.hy-field__box .hy-input:focus-visible {
|
|
18
|
+
outline: none;
|
|
19
|
+
box-shadow: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.hy-input::placeholder {
|
|
23
|
+
color: var(--hy-ink-3);
|
|
24
|
+
opacity: 1;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
textarea.hy-input {
|
|
28
|
+
padding-block: var(--hy-space-2);
|
|
29
|
+
min-block-size: 5rem;
|
|
30
|
+
resize: vertical;
|
|
31
|
+
line-height: var(--hy-leading);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.hy-input:disabled {
|
|
35
|
+
cursor: not-allowed;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.hy-field__prefix,
|
|
39
|
+
.hy-field__suffix {
|
|
40
|
+
display: inline-flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
flex: none;
|
|
43
|
+
color: var(--hy-ink-3);
|
|
44
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The glass material. Any element with .hy-glass and data-material gets it,
|
|
3
|
+
* usually through the hyMaterial directive.
|
|
4
|
+
*
|
|
5
|
+
* Layers, from top to bottom: a pointer glow (driven by --hy-px / --hy-py
|
|
6
|
+
* from the tilt directive), a reflection gradient, and the fill itself.
|
|
7
|
+
*
|
|
8
|
+
* Materials and thicknesses only change custom properties, never the
|
|
9
|
+
* `background` itself. That keeps the fallbacks at the bottom, which do set
|
|
10
|
+
* it, in charge for every material.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/* Registered so hover and tilt can fade the glow instead of switching it. */
|
|
14
|
+
@property --hy-glow {
|
|
15
|
+
syntax: '<number>';
|
|
16
|
+
inherits: true;
|
|
17
|
+
initial-value: 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.hy-glass {
|
|
21
|
+
--_fill-top: var(--hy-glass-fill-top);
|
|
22
|
+
--_fill-bottom: var(--hy-glass-fill-bottom);
|
|
23
|
+
--_tint: var(--hy-glass-tint);
|
|
24
|
+
--_fill: linear-gradient(
|
|
25
|
+
160deg,
|
|
26
|
+
rgb(var(--_tint) / var(--_fill-top)),
|
|
27
|
+
rgb(var(--_tint) / var(--_fill-bottom))
|
|
28
|
+
);
|
|
29
|
+
/* Thicker glass blurs more; clear glass blurs less. */
|
|
30
|
+
--_depth: 1;
|
|
31
|
+
--_clarity: 1;
|
|
32
|
+
--_blur: calc(var(--hy-glass-blur) * var(--_depth) * var(--_clarity));
|
|
33
|
+
--_shadow: var(--hy-glass-shadow);
|
|
34
|
+
/* The backdrop keeps changing, so secondary text gets more contrast. */
|
|
35
|
+
--hy-ink-2: var(--hy-ink-2-glass);
|
|
36
|
+
--hy-ink-3: var(--hy-ink-3-glass);
|
|
37
|
+
background:
|
|
38
|
+
radial-gradient(
|
|
39
|
+
circle at var(--hy-px, 50%) var(--hy-py, -30%),
|
|
40
|
+
rgb(var(--hy-glass-glow) / var(--hy-glow, 0)),
|
|
41
|
+
transparent 55%
|
|
42
|
+
),
|
|
43
|
+
var(--hy-glass-reflection), var(--_fill);
|
|
44
|
+
backdrop-filter: blur(var(--_blur)) saturate(var(--hy-glass-saturate));
|
|
45
|
+
-webkit-backdrop-filter: blur(var(--_blur)) saturate(var(--hy-glass-saturate));
|
|
46
|
+
border: 1px solid var(--hy-glass-border);
|
|
47
|
+
box-shadow: var(--hy-glass-edge), var(--_shadow);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Thickness: bigger surfaces read as heavier material. */
|
|
51
|
+
.hy-glass[data-thickness='thin'] {
|
|
52
|
+
--_depth: 0.5;
|
|
53
|
+
--_shadow: var(--hy-glass-shadow-thin);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.hy-glass[data-thickness='thick'] {
|
|
57
|
+
--_depth: 1.6;
|
|
58
|
+
--_shadow: var(--hy-glass-shadow-thick);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.hy-glass[data-material='clear'] {
|
|
62
|
+
--_fill-top: calc(var(--hy-glass-fill-top) * 0.4);
|
|
63
|
+
--_fill-bottom: calc(var(--hy-glass-fill-bottom) * 0.3);
|
|
64
|
+
--_clarity: 0.4;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.hy-glass[data-material='tinted'] {
|
|
68
|
+
backdrop-filter: none;
|
|
69
|
+
-webkit-backdrop-filter: none;
|
|
70
|
+
--_fill: linear-gradient(
|
|
71
|
+
160deg,
|
|
72
|
+
color-mix(in srgb, var(--hy-primary) 22%, transparent),
|
|
73
|
+
color-mix(in srgb, var(--hy-primary) 8%, transparent)
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.hy-glass[data-material='solid'] {
|
|
78
|
+
--_fill: linear-gradient(var(--hy-surface-1), var(--hy-surface-1));
|
|
79
|
+
--hy-ink-2: inherit;
|
|
80
|
+
--hy-ink-3: inherit;
|
|
81
|
+
backdrop-filter: none;
|
|
82
|
+
-webkit-backdrop-filter: none;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* No blur support, or the user asked for less transparency: go solid. */
|
|
86
|
+
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
87
|
+
.hy-glass {
|
|
88
|
+
background: var(--hy-surface-1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
|
|
93
|
+
.hy-glass {
|
|
94
|
+
background: var(--hy-surface-1);
|
|
95
|
+
backdrop-filter: none;
|
|
96
|
+
-webkit-backdrop-filter: none;
|
|
97
|
+
border-color: var(--hy-line-strong);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@media (forced-colors: active) {
|
|
102
|
+
.hy-glass {
|
|
103
|
+
border: 1px solid CanvasText;
|
|
104
|
+
background: Canvas;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/*
|
|
109
|
+
* Wrap the page content in .hy-glass-scope when glass overlays (popovers,
|
|
110
|
+
* menus, dialogs) open above glass content. Chrome redraws only a rectangle
|
|
111
|
+
* around a change, grown by each blur it touches. A hover inside a glass
|
|
112
|
+
* overlay can grow it across the edge of glass below, which is then redrawn
|
|
113
|
+
* in part and shows a brighter box.
|
|
114
|
+
*
|
|
115
|
+
* Any filter gives the content its own layer, so changes in an overlay never
|
|
116
|
+
* redraw it. It is also a backdrop root, so glass inside blurs only what is
|
|
117
|
+
* in the scope; painting the page background here keeps that identical.
|
|
118
|
+
* Like any filter, it is the containing block for fixed elements inside it.
|
|
119
|
+
*/
|
|
120
|
+
.hy-glass-scope {
|
|
121
|
+
filter: blur(0);
|
|
122
|
+
background: var(--hy-bg);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Overlay panels and backdrops from CDK. */
|
|
126
|
+
.hy-backdrop {
|
|
127
|
+
background: var(--hy-scrim);
|
|
128
|
+
backdrop-filter: blur(4px);
|
|
129
|
+
-webkit-backdrop-filter: blur(4px);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* Set by HyDialogRef while a dialog or drawer plays its exit animation. */
|
|
133
|
+
.hy-backdrop[data-state='closing'] {
|
|
134
|
+
opacity: 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.hy-backdrop-transparent {
|
|
138
|
+
background: transparent;
|
|
139
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/* Styles for the interaction directives: reveal, tilt, magnetic, ripple. */
|
|
2
|
+
|
|
3
|
+
[data-hy-reveal] {
|
|
4
|
+
transition:
|
|
5
|
+
opacity var(--hy-dur-scene) var(--hy-ease-out) var(--hy-reveal-delay, 0ms),
|
|
6
|
+
translate var(--hy-dur-scene) var(--hy-ease-out) var(--hy-reveal-delay, 0ms),
|
|
7
|
+
scale var(--hy-dur-scene) var(--hy-ease-out) var(--hy-reveal-delay, 0ms);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
[data-hy-reveal='hidden'] {
|
|
11
|
+
opacity: 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
[data-hy-reveal='hidden'][data-hy-reveal-from='up'] {
|
|
15
|
+
translate: 0 1.5rem;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
[data-hy-reveal='hidden'][data-hy-reveal-from='scale'] {
|
|
19
|
+
scale: 0.96;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@media print {
|
|
23
|
+
[data-hy-reveal] {
|
|
24
|
+
opacity: 1 !important;
|
|
25
|
+
translate: none !important;
|
|
26
|
+
scale: none !important;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.hy-tilt {
|
|
31
|
+
transform: perspective(900px) rotateX(var(--hy-rx, 0deg)) rotateY(var(--hy-ry, 0deg));
|
|
32
|
+
transform-style: preserve-3d;
|
|
33
|
+
transition:
|
|
34
|
+
transform var(--hy-dur-settle) var(--hy-ease-out),
|
|
35
|
+
--hy-glow var(--hy-dur-settle) var(--hy-ease-out);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.hy-magnetic {
|
|
39
|
+
translate: var(--hy-mx, 0px) var(--hy-my, 0px);
|
|
40
|
+
transition: translate var(--hy-dur-settle) var(--hy-ease-out);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* GSAP already smooths these values, so the CSS transition would lag. */
|
|
44
|
+
.hy-tilt.hy-gsap {
|
|
45
|
+
transition: --hy-glow var(--hy-dur-settle) var(--hy-ease-out);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.hy-magnetic.hy-gsap {
|
|
49
|
+
transition: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.hy-ripple-host {
|
|
53
|
+
position: relative;
|
|
54
|
+
overflow: hidden;
|
|
55
|
+
isolation: isolate;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.hy-ripple {
|
|
59
|
+
position: absolute;
|
|
60
|
+
/* Pointer coordinates are physical, so the ripple is placed physically. */
|
|
61
|
+
top: calc(var(--hy-ripple-y) - var(--hy-ripple-size) / 2);
|
|
62
|
+
left: calc(var(--hy-ripple-x) - var(--hy-ripple-size) / 2); /* physical-ok */
|
|
63
|
+
inline-size: var(--hy-ripple-size);
|
|
64
|
+
block-size: var(--hy-ripple-size);
|
|
65
|
+
border-radius: 50%;
|
|
66
|
+
background: radial-gradient(closest-side, currentColor, transparent);
|
|
67
|
+
opacity: 0;
|
|
68
|
+
pointer-events: none;
|
|
69
|
+
z-index: -1;
|
|
70
|
+
animation: hy-ripple var(--hy-dur-scene) var(--hy-ease-out);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@keyframes hy-ripple {
|
|
74
|
+
from {
|
|
75
|
+
scale: 0;
|
|
76
|
+
opacity: 0.18;
|
|
77
|
+
}
|
|
78
|
+
to {
|
|
79
|
+
scale: 1;
|
|
80
|
+
opacity: 0;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
:root:is([data-hy-motion='reduced'], [data-hy-fidelity='low']) .hy-tilt {
|
|
85
|
+
transform: none;
|
|
86
|
+
transition: none;
|
|
87
|
+
}
|
|
88
|
+
:root:is([data-hy-motion='reduced'], [data-hy-fidelity='low']) .hy-magnetic {
|
|
89
|
+
translate: none;
|
|
90
|
+
transition: none;
|
|
91
|
+
}
|
|
92
|
+
@media (prefers-reduced-motion: reduce) {
|
|
93
|
+
:root:not([data-hy-motion='full']) .hy-tilt {
|
|
94
|
+
transform: none;
|
|
95
|
+
transition: none;
|
|
96
|
+
}
|
|
97
|
+
:root:not([data-hy-motion='full']) .hy-magnetic {
|
|
98
|
+
translate: none;
|
|
99
|
+
transition: none;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Navbar slots. Links and brand are projected content, so their styles are
|
|
3
|
+
* global. The collapse rule uses the navbar's container query.
|
|
4
|
+
*/
|
|
5
|
+
.hy-navbar__brand {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
gap: var(--hy-space-2);
|
|
9
|
+
color: var(--hy-ink);
|
|
10
|
+
font-weight: 650;
|
|
11
|
+
font-size: var(--hy-step-1);
|
|
12
|
+
text-decoration: none;
|
|
13
|
+
white-space: nowrap;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.hy-navbar__actions {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
gap: var(--hy-space-2);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.hy-navbar__links > a {
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
min-block-size: 2.25rem;
|
|
26
|
+
padding-inline: var(--hy-space-3);
|
|
27
|
+
border-radius: var(--hy-navbar-link-radius, var(--hy-radius-pill));
|
|
28
|
+
color: var(--hy-ink-2);
|
|
29
|
+
font-weight: 520;
|
|
30
|
+
text-decoration: none;
|
|
31
|
+
transition:
|
|
32
|
+
color var(--hy-dur-quick) var(--hy-ease-out),
|
|
33
|
+
background-color var(--hy-dur-quick) var(--hy-ease-out);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.hy-navbar__links > a:hover,
|
|
37
|
+
.hy-navbar__links > a[aria-current] {
|
|
38
|
+
color: var(--hy-ink);
|
|
39
|
+
background-color: color-mix(in srgb, var(--hy-ink) 7%, transparent);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.hy-navbar__links > a:focus-visible {
|
|
43
|
+
outline: none;
|
|
44
|
+
box-shadow: var(--hy-focus-ring);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@container hy-navbar (max-width: 48rem) {
|
|
48
|
+
.hy-navbar__actions {
|
|
49
|
+
margin-inline-start: auto;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.hy-navbar__links > a {
|
|
53
|
+
min-block-size: 2.75rem;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* Tooltip and popover panels. Their enter and exit live in presence.css. */
|
|
2
|
+
|
|
3
|
+
.hy-tooltip {
|
|
4
|
+
display: block;
|
|
5
|
+
max-inline-size: 18rem;
|
|
6
|
+
padding: var(--hy-space-1) var(--hy-space-3);
|
|
7
|
+
border-radius: var(--hy-tooltip-radius, var(--hy-radius-s));
|
|
8
|
+
background: var(--hy-tooltip-bg, color-mix(in srgb, var(--hy-ink) 92%, transparent));
|
|
9
|
+
color: var(--hy-tooltip-ink, var(--hy-bg));
|
|
10
|
+
font-size: var(--hy-step--1);
|
|
11
|
+
letter-spacing: var(--hy-tracking-small);
|
|
12
|
+
line-height: 1.4;
|
|
13
|
+
box-shadow: 0 6px 20px -8px rgb(0 0 0 / 0.4);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.hy-tooltip-pane {
|
|
17
|
+
z-index: var(--hy-z-tooltip);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.hy-popover {
|
|
21
|
+
min-inline-size: 12rem;
|
|
22
|
+
max-inline-size: min(22rem, 100vw - 1.5rem);
|
|
23
|
+
padding: var(--hy-popover-padding, var(--hy-space-4));
|
|
24
|
+
border-radius: var(--hy-popover-radius, var(--hy-radius-m));
|
|
25
|
+
color: var(--hy-ink);
|
|
26
|
+
outline: none;
|
|
27
|
+
}
|