@astronox/core 0.4.16 → 0.4.17

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astronox/core",
3
- "version": "0.4.16",
3
+ "version": "0.4.17",
4
4
  "description": "Reusable Astro components, patterns, styles, and infrastructure for AstroNox sites.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -12,6 +12,7 @@ import Breadcrumbs from '../components/navigation/Breadcrumbs/Breadcrumbs.astro'
12
12
  import ScrollToTop from '../components/actions/ScrollToTop/ScrollToTop.astro';
13
13
  import ThemeBootstrap from '../components/feedback/ThemeBootstrap/ThemeBootstrap.astro';
14
14
  import { defaultThemeStorageKey } from '../theme/storage';
15
+ import type { SiteScrollMode } from './contracts';
15
16
 
16
17
  type Props = HTMLAttributes<'html'> & {
17
18
  meta: PageMeta;
@@ -22,6 +23,7 @@ type Props = HTMLAttributes<'html'> & {
22
23
  breadcrumbLabel: string;
23
24
  breadcrumbTone?: Tone;
24
25
  scrollToTopLabel?: string;
26
+ scrollMode?: SiteScrollMode;
25
27
  structuredData?: readonly JsonLdNode[];
26
28
  tone?: Tone;
27
29
  themeStorageKey?: string;
@@ -36,6 +38,7 @@ const {
36
38
  meta,
37
39
  pageSurfaceAttributes,
38
40
  scrollToTopLabel,
41
+ scrollMode = 'shell',
39
42
  site,
40
43
  structuredData,
41
44
  tone,
@@ -47,7 +50,13 @@ const resolvedTone = tone ?? dataTone;
47
50
  ---
48
51
 
49
52
  <!doctype html>
50
- <html {...htmlAttrs} lang={lang} data-tone={resolvedTone}>
53
+ <html
54
+ {...htmlAttrs}
55
+ lang={lang}
56
+ data-site-scroll-mode={scrollMode}
57
+ data-site-scroll-root={scrollMode === 'document' ? true : undefined}
58
+ data-tone={resolvedTone}
59
+ >
51
60
  <head>
52
61
  <meta charset="utf-8" />
53
62
  <meta name="viewport" content="width=device-width, initial-scale=1" />
@@ -62,10 +71,13 @@ const resolvedTone = tone ?? dataTone;
62
71
  <slot name="head" />
63
72
  </head>
64
73
  <body>
65
- <div class="site-shell">
74
+ <div
75
+ class="site-shell"
76
+ data-site-scroll-root={scrollMode === 'shell' ? true : undefined}
77
+ >
66
78
  <slot name="skip-link" />
67
79
  <slot name="header" />
68
- <div class="site-viewport" data-site-scroll-root data-site-viewport>
80
+ <div class="site-viewport" data-site-viewport>
69
81
  <main id="content" class="site-main" tabindex="-1">
70
82
  <div class="site-main__content">
71
83
  {
@@ -0,0 +1 @@
1
+ export type SiteScrollMode = 'document' | 'shell';
@@ -1,2 +1,3 @@
1
1
  export { default as BaseLayout } from './BaseLayout.astro';
2
2
  export { default as PageSurface } from './PageSurface.astro';
3
+ export type { SiteScrollMode } from './contracts';
@@ -1,3 +1,4 @@
1
+ html:has(.modal[open])[data-site-scroll-root],
1
2
  html:has(.modal[open]) [data-site-scroll-root] {
2
3
  overflow-y: hidden;
3
4
  }
@@ -66,8 +66,12 @@ body {
66
66
  height: 100vh;
67
67
  min-height: 100vh;
68
68
  grid-template-rows: auto minmax(0, 1fr);
69
- overflow: hidden;
69
+ overflow-x: hidden;
70
+ overflow-y: auto;
71
+ scroll-padding-block-start: var(--nox-site-header-responsive-height);
72
+ scrollbar-gutter: stable;
70
73
  background: var(--nox-page-background);
74
+ overscroll-behavior-y: contain;
71
75
  }
72
76
 
73
77
  @supports (height: 100svh) {
@@ -133,16 +137,34 @@ p {
133
137
 
134
138
  .site-viewport {
135
139
  --site-content-gap: var(--nox-space-5);
140
+ --nox-sticky-viewport-offset: var(--nox-site-header-responsive-height);
136
141
 
137
142
  min-width: 0;
138
143
  min-height: 0;
144
+ overflow: visible;
145
+ background: var(--nox-page-background);
146
+ }
147
+
148
+ html[data-site-scroll-mode='document'] {
149
+ height: auto;
139
150
  overflow-x: hidden;
140
151
  overflow-y: auto;
152
+ scroll-padding-block-start: var(--nox-site-header-responsive-height);
141
153
  scrollbar-gutter: stable;
142
- background: var(--nox-page-background);
143
154
  overscroll-behavior-y: contain;
144
155
  }
145
156
 
157
+ html[data-site-scroll-mode='document'] body {
158
+ height: auto;
159
+ overflow: visible;
160
+ }
161
+
162
+ html[data-site-scroll-mode='document'] .site-shell {
163
+ height: auto;
164
+ grid-template-rows: auto auto;
165
+ overflow: visible;
166
+ }
167
+
146
168
  .site-main {
147
169
  display: grid;
148
170
  width: var(--nox-page-width);