@hyvnt/hyvui 0.1.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.
Files changed (157) hide show
  1. package/README.md +253 -0
  2. package/dist/components/ambient/CornerBrackets.svelte +87 -0
  3. package/dist/components/ambient/CornerBrackets.svelte.d.ts +11 -0
  4. package/dist/components/ambient/DataStream.svelte +94 -0
  5. package/dist/components/ambient/DataStream.svelte.d.ts +13 -0
  6. package/dist/components/ambient/GlyphMark.svelte +69 -0
  7. package/dist/components/ambient/GlyphMark.svelte.d.ts +13 -0
  8. package/dist/components/ambient/GridOverlay.svelte +28 -0
  9. package/dist/components/ambient/GridOverlay.svelte.d.ts +7 -0
  10. package/dist/components/ambient/ParallaxLayer.svelte +41 -0
  11. package/dist/components/ambient/ParallaxLayer.svelte.d.ts +12 -0
  12. package/dist/components/ambient/ScanBand.svelte +91 -0
  13. package/dist/components/ambient/ScanBand.svelte.d.ts +17 -0
  14. package/dist/components/ambient/SignalRing.svelte +100 -0
  15. package/dist/components/ambient/SignalRing.svelte.d.ts +13 -0
  16. package/dist/components/ambient/ThreadLine.svelte +78 -0
  17. package/dist/components/ambient/ThreadLine.svelte.d.ts +17 -0
  18. package/dist/components/ambient/Vignette.svelte +26 -0
  19. package/dist/components/ambient/Vignette.svelte.d.ts +7 -0
  20. package/dist/components/depth/DepthLayer.svelte +27 -0
  21. package/dist/components/depth/DepthLayer.svelte.d.ts +15 -0
  22. package/dist/components/depth/DepthStage.svelte +62 -0
  23. package/dist/components/depth/DepthStage.svelte.d.ts +19 -0
  24. package/dist/components/depth/FloatCard.svelte +104 -0
  25. package/dist/components/depth/FloatCard.svelte.d.ts +14 -0
  26. package/dist/components/depth/HorizonGrid.svelte +160 -0
  27. package/dist/components/depth/HorizonGrid.svelte.d.ts +15 -0
  28. package/dist/components/depth/Plinth.svelte +57 -0
  29. package/dist/components/depth/Plinth.svelte.d.ts +13 -0
  30. package/dist/components/display/Avatar.svelte +69 -0
  31. package/dist/components/display/Avatar.svelte.d.ts +13 -0
  32. package/dist/components/display/Badge.svelte +63 -0
  33. package/dist/components/display/Badge.svelte.d.ts +12 -0
  34. package/dist/components/display/Blockquote.svelte +34 -0
  35. package/dist/components/display/Blockquote.svelte.d.ts +10 -0
  36. package/dist/components/display/CodeBlock.svelte +76 -0
  37. package/dist/components/display/CodeBlock.svelte.d.ts +13 -0
  38. package/dist/components/display/MetricCard.svelte +83 -0
  39. package/dist/components/display/MetricCard.svelte.d.ts +15 -0
  40. package/dist/components/display/Table.svelte +104 -0
  41. package/dist/components/display/Table.svelte.d.ts +19 -0
  42. package/dist/components/feedback/Alert.svelte +76 -0
  43. package/dist/components/feedback/Alert.svelte.d.ts +14 -0
  44. package/dist/components/feedback/EmptyState.svelte +68 -0
  45. package/dist/components/feedback/EmptyState.svelte.d.ts +14 -0
  46. package/dist/components/feedback/ErrorState.svelte +73 -0
  47. package/dist/components/feedback/ErrorState.svelte.d.ts +15 -0
  48. package/dist/components/feedback/Skeleton.svelte +52 -0
  49. package/dist/components/feedback/Skeleton.svelte.d.ts +13 -0
  50. package/dist/components/feedback/StatusDot.svelte +54 -0
  51. package/dist/components/feedback/StatusDot.svelte.d.ts +13 -0
  52. package/dist/components/feedback/StatusLine.svelte +122 -0
  53. package/dist/components/feedback/StatusLine.svelte.d.ts +17 -0
  54. package/dist/components/feedback/Toast.svelte +136 -0
  55. package/dist/components/feedback/Toast.svelte.d.ts +21 -0
  56. package/dist/components/inputs/Button.svelte +237 -0
  57. package/dist/components/inputs/Button.svelte.d.ts +30 -0
  58. package/dist/components/inputs/Checkbox.svelte +105 -0
  59. package/dist/components/inputs/Checkbox.svelte.d.ts +15 -0
  60. package/dist/components/inputs/FileUpload.svelte +163 -0
  61. package/dist/components/inputs/FileUpload.svelte.d.ts +17 -0
  62. package/dist/components/inputs/Input.svelte +147 -0
  63. package/dist/components/inputs/Input.svelte.d.ts +25 -0
  64. package/dist/components/inputs/Select.svelte +150 -0
  65. package/dist/components/inputs/Select.svelte.d.ts +23 -0
  66. package/dist/components/inputs/Textarea.svelte +154 -0
  67. package/dist/components/inputs/Textarea.svelte.d.ts +25 -0
  68. package/dist/components/inputs/Toggle.svelte +120 -0
  69. package/dist/components/inputs/Toggle.svelte.d.ts +15 -0
  70. package/dist/components/layout/Card.svelte +76 -0
  71. package/dist/components/layout/Card.svelte.d.ts +16 -0
  72. package/dist/components/layout/Drawer.svelte +109 -0
  73. package/dist/components/layout/Drawer.svelte.d.ts +18 -0
  74. package/dist/components/layout/Grid.svelte +43 -0
  75. package/dist/components/layout/Grid.svelte.d.ts +16 -0
  76. package/dist/components/layout/Modal.svelte +159 -0
  77. package/dist/components/layout/Modal.svelte.d.ts +20 -0
  78. package/dist/components/layout/Panel.svelte +54 -0
  79. package/dist/components/layout/Panel.svelte.d.ts +14 -0
  80. package/dist/components/layout/Popover.svelte +67 -0
  81. package/dist/components/layout/Popover.svelte.d.ts +14 -0
  82. package/dist/components/layout/Stack.svelte +53 -0
  83. package/dist/components/layout/Stack.svelte.d.ts +22 -0
  84. package/dist/components/navigation/Breadcrumb.svelte +73 -0
  85. package/dist/components/navigation/Breadcrumb.svelte.d.ts +13 -0
  86. package/dist/components/navigation/DropdownMenu.svelte +124 -0
  87. package/dist/components/navigation/DropdownMenu.svelte.d.ts +19 -0
  88. package/dist/components/navigation/SidebarNav.svelte +90 -0
  89. package/dist/components/navigation/SidebarNav.svelte.d.ts +16 -0
  90. package/dist/components/navigation/Tabs.svelte +86 -0
  91. package/dist/components/navigation/Tabs.svelte.d.ts +17 -0
  92. package/dist/components/navigation/Topbar.svelte +85 -0
  93. package/dist/components/navigation/Topbar.svelte.d.ts +14 -0
  94. package/dist/components/patterns/ActionBar.svelte +76 -0
  95. package/dist/components/patterns/ActionBar.svelte.d.ts +14 -0
  96. package/dist/components/patterns/ConfirmDialog.svelte +64 -0
  97. package/dist/components/patterns/ConfirmDialog.svelte.d.ts +23 -0
  98. package/dist/components/patterns/PageHeader.svelte +114 -0
  99. package/dist/components/patterns/PageHeader.svelte.d.ts +16 -0
  100. package/dist/components/patterns/SearchBar.svelte +59 -0
  101. package/dist/components/patterns/SearchBar.svelte.d.ts +15 -0
  102. package/dist/components/patterns/TerminalBoot.svelte +104 -0
  103. package/dist/components/patterns/TerminalBoot.svelte.d.ts +25 -0
  104. package/dist/components/primitives/Divider.svelte +29 -0
  105. package/dist/components/primitives/Divider.svelte.d.ts +9 -0
  106. package/dist/components/primitives/Icon.svelte +49 -0
  107. package/dist/components/primitives/Icon.svelte.d.ts +14 -0
  108. package/dist/components/primitives/Label.svelte +44 -0
  109. package/dist/components/primitives/Label.svelte.d.ts +14 -0
  110. package/dist/components/primitives/Surface.svelte +87 -0
  111. package/dist/components/primitives/Surface.svelte.d.ts +16 -0
  112. package/dist/components/primitives/Text.svelte +98 -0
  113. package/dist/components/primitives/Text.svelte.d.ts +19 -0
  114. package/dist/components/primitives/text.d.ts +1 -0
  115. package/dist/components/primitives/text.js +1 -0
  116. package/dist/components/scenes/ArchiveScene.svelte +95 -0
  117. package/dist/components/scenes/ArchiveScene.svelte.d.ts +16 -0
  118. package/dist/components/scenes/LogScene.svelte +77 -0
  119. package/dist/components/scenes/LogScene.svelte.d.ts +14 -0
  120. package/dist/components/scenes/NarrativeScene.svelte +92 -0
  121. package/dist/components/scenes/NarrativeScene.svelte.d.ts +16 -0
  122. package/dist/components/scenes/ReadoutScene.svelte +107 -0
  123. package/dist/components/scenes/ReadoutScene.svelte.d.ts +16 -0
  124. package/dist/components/scenes/StageScene.svelte +104 -0
  125. package/dist/components/scenes/StageScene.svelte.d.ts +18 -0
  126. package/dist/examples/FieldReport.svelte +223 -0
  127. package/dist/examples/FieldReport.svelte.d.ts +18 -0
  128. package/dist/examples/ObservationDeck.svelte +317 -0
  129. package/dist/examples/ObservationDeck.svelte.d.ts +3 -0
  130. package/dist/examples/SignalLost.svelte +191 -0
  131. package/dist/examples/SignalLost.svelte.d.ts +3 -0
  132. package/dist/index.d.ts +73 -0
  133. package/dist/index.js +83 -0
  134. package/dist/system/actions/echo.d.ts +10 -0
  135. package/dist/system/actions/echo.js +46 -0
  136. package/dist/system/actions/resolve.d.ts +23 -0
  137. package/dist/system/actions/resolve.js +59 -0
  138. package/dist/system/actions/reveal.d.ts +18 -0
  139. package/dist/system/actions/reveal.js +54 -0
  140. package/dist/system/actions/surface.d.ts +14 -0
  141. package/dist/system/actions/surface.js +25 -0
  142. package/dist/system/depth/depth.css +49 -0
  143. package/dist/system/depth/depth.d.ts +15 -0
  144. package/dist/system/depth/depth.js +24 -0
  145. package/dist/system/expressions.css +80 -0
  146. package/dist/system/override-template.css +72 -0
  147. package/dist/system/register.css +74 -0
  148. package/dist/system/register.d.ts +11 -0
  149. package/dist/system/register.js +16 -0
  150. package/dist/tokens/tokens.css +86 -0
  151. package/dist/tokens/tokens.d.ts +25 -0
  152. package/dist/tokens/tokens.js +25 -0
  153. package/dist/utils/cn.d.ts +2 -0
  154. package/dist/utils/cn.js +4 -0
  155. package/dist/utils/motion.d.ts +17 -0
  156. package/dist/utils/motion.js +11 -0
  157. package/package.json +60 -0
@@ -0,0 +1,98 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import type { Snippet } from 'svelte';
4
+ import type { Expression } from './text.js';
5
+
6
+ interface Props {
7
+ /** HTML tag to render. */
8
+ as?: string;
9
+ /** Typographic style variant. */
10
+ variant?: 'heading' | 'body' | 'caption' | 'italic';
11
+ /** Text color token. */
12
+ color?: 'primary' | 'soft' | 'muted' | 'muted-strong' | 'accent' | 'signal';
13
+ /** Compositional intent expression. Applied alongside the variant. */
14
+ expression?: Expression;
15
+ /** Additional CSS classes. */
16
+ class?: string;
17
+ /** Text content. */
18
+ children?: Snippet;
19
+ }
20
+
21
+ let {
22
+ as = 'p',
23
+ variant = 'body',
24
+ color = variant === 'heading' ? 'primary' : 'soft',
25
+ expression,
26
+ class: className = '',
27
+ children,
28
+ }: Props = $props();
29
+
30
+ const colorMap: Record<string, string> = {
31
+ primary: 'var(--text)',
32
+ soft: 'var(--text-soft)',
33
+ muted: 'var(--muted)',
34
+ 'muted-strong': 'var(--muted-strong)',
35
+ accent: 'var(--accent)',
36
+ signal: 'var(--signal)',
37
+ };
38
+
39
+ const variantClass = $derived(
40
+ cn(
41
+ variant === 'heading' && 'hyvui-text-heading',
42
+ variant === 'body' && 'hyvui-text-body',
43
+ variant === 'caption' && 'hyvui-text-caption',
44
+ variant === 'italic' && 'hyvui-text-italic',
45
+ expression && `expr-${expression}`,
46
+ className
47
+ )
48
+ );
49
+ </script>
50
+
51
+ <svelte:element this={as} class={variantClass} style:color={colorMap[color]}>
52
+ {#if children}{@render children()}{/if}
53
+ </svelte:element>
54
+
55
+ <style>
56
+ .hyvui-text-heading,
57
+ .hyvui-text-body,
58
+ .hyvui-text-caption,
59
+ .hyvui-text-italic {
60
+ margin: 0;
61
+ }
62
+
63
+ .hyvui-text-heading {
64
+ font-family: var(--font-body);
65
+ font-size: clamp(1.75rem, 4vw, 3.25rem);
66
+ font-weight: 400;
67
+ line-height: 0.95;
68
+ letter-spacing: -0.045em;
69
+ text-wrap: balance;
70
+ }
71
+
72
+ .hyvui-text-body {
73
+ font-family: var(--font-body);
74
+ font-size: 1.03rem;
75
+ font-weight: 400;
76
+ line-height: 1.62;
77
+ max-width: 32rem;
78
+ text-wrap: pretty;
79
+ }
80
+
81
+ .hyvui-text-caption {
82
+ font-family: var(--font-mono);
83
+ font-size: 0.7rem;
84
+ font-weight: 400;
85
+ letter-spacing: 0.16em;
86
+ text-transform: uppercase;
87
+ line-height: 1.2;
88
+ }
89
+
90
+ .hyvui-text-italic {
91
+ font-family: var(--font-body);
92
+ font-size: 1.02rem;
93
+ font-style: italic;
94
+ font-weight: 400;
95
+ line-height: 1.64;
96
+ text-wrap: pretty;
97
+ }
98
+ </style>
@@ -0,0 +1,19 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { Expression } from './text.js';
3
+ interface Props {
4
+ /** HTML tag to render. */
5
+ as?: string;
6
+ /** Typographic style variant. */
7
+ variant?: 'heading' | 'body' | 'caption' | 'italic';
8
+ /** Text color token. */
9
+ color?: 'primary' | 'soft' | 'muted' | 'muted-strong' | 'accent' | 'signal';
10
+ /** Compositional intent expression. Applied alongside the variant. */
11
+ expression?: Expression;
12
+ /** Additional CSS classes. */
13
+ class?: string;
14
+ /** Text content. */
15
+ children?: Snippet;
16
+ }
17
+ declare const Text: import("svelte").Component<Props, {}, "">;
18
+ type Text = ReturnType<typeof Text>;
19
+ export default Text;
@@ -0,0 +1 @@
1
+ export type Expression = 'title-card' | 'manifesto' | 'readout' | 'whisper' | 'command' | 'chapter';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,95 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import type { Snippet } from 'svelte';
4
+
5
+ interface Props {
6
+ /** Optional scene title. */
7
+ title?: string;
8
+ /** Number of grid columns. */
9
+ cols?: number;
10
+ /** Additional CSS classes. */
11
+ class?: string;
12
+ /** Filter controls area above the grid. */
13
+ filter?: Snippet;
14
+ /** Grid items (Cards, images, etc.). */
15
+ children?: Snippet;
16
+ }
17
+
18
+ let {
19
+ title = '',
20
+ cols = 3,
21
+ class: className = '',
22
+ filter,
23
+ children,
24
+ }: Props = $props();
25
+ </script>
26
+
27
+ <section class={cn('hyvui-archive', className)}>
28
+ <div class="hyvui-archive-inner">
29
+ {#if title || filter}
30
+ <div class="hyvui-archive-top">
31
+ {#if title}
32
+ <h2 class="hyvui-archive-title">{title}</h2>
33
+ {/if}
34
+ {#if filter}
35
+ <div class="hyvui-archive-filter">
36
+ {@render filter()}
37
+ </div>
38
+ {/if}
39
+ </div>
40
+ {/if}
41
+ <div
42
+ class="hyvui-archive-grid"
43
+ style:grid-template-columns="repeat({cols}, 1fr)"
44
+ >
45
+ {#if children}{@render children()}{/if}
46
+ </div>
47
+ </div>
48
+ </section>
49
+
50
+ <style>
51
+ .hyvui-archive {
52
+ position: relative;
53
+ min-height: 100dvh;
54
+ padding: var(--space-scene);
55
+ }
56
+
57
+ .hyvui-archive-inner {
58
+ display: flex;
59
+ flex-direction: column;
60
+ gap: calc(1.5rem * var(--reg-spacing-scale));
61
+ }
62
+
63
+ .hyvui-archive-top {
64
+ display: flex;
65
+ align-items: flex-end;
66
+ justify-content: space-between;
67
+ gap: 1rem;
68
+ }
69
+
70
+ .hyvui-archive-title {
71
+ font-family: var(--font-body);
72
+ font-size: 1.4rem;
73
+ font-weight: 400;
74
+ line-height: var(--reg-heading-lh);
75
+ letter-spacing: var(--reg-heading-tracking);
76
+ color: var(--text);
77
+ margin: 0;
78
+ }
79
+
80
+ .hyvui-archive-filter {
81
+ flex-shrink: 0;
82
+ }
83
+
84
+ .hyvui-archive-grid {
85
+ display: grid;
86
+ gap: var(--space-inline);
87
+ /* no stagger offsets. uniformity is the aesthetic intent. */
88
+ }
89
+
90
+ @media (max-width: 768px) {
91
+ .hyvui-archive-grid {
92
+ grid-template-columns: 1fr !important;
93
+ }
94
+ }
95
+ </style>
@@ -0,0 +1,16 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ /** Optional scene title. */
4
+ title?: string;
5
+ /** Number of grid columns. */
6
+ cols?: number;
7
+ /** Additional CSS classes. */
8
+ class?: string;
9
+ /** Filter controls area above the grid. */
10
+ filter?: Snippet;
11
+ /** Grid items (Cards, images, etc.). */
12
+ children?: Snippet;
13
+ }
14
+ declare const ArchiveScene: import("svelte").Component<Props, {}, "">;
15
+ type ArchiveScene = ReturnType<typeof ArchiveScene>;
16
+ export default ArchiveScene;
@@ -0,0 +1,77 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import ScanBand from '../ambient/ScanBand.svelte';
4
+ import GridOverlay from '../ambient/GridOverlay.svelte';
5
+ import type { Snippet } from 'svelte';
6
+
7
+ interface Props {
8
+ /** Additional CSS classes. */
9
+ class?: string;
10
+ /** Above the log area (system name, StatusDot row). */
11
+ header?: Snippet;
12
+ /** Log content area (TerminalBoot, StatusLine, CodeBlock). */
13
+ children?: Snippet;
14
+ /** Below the log area (status summary, CTA). */
15
+ footer?: Snippet;
16
+ }
17
+
18
+ let {
19
+ class: className = '',
20
+ header,
21
+ children,
22
+ footer,
23
+ }: Props = $props();
24
+ </script>
25
+
26
+ <section class={cn('hyvui-log', className)}>
27
+ <div class="hyvui-log-ambient" aria-hidden="true">
28
+ <div style:opacity="0.06">
29
+ <GridOverlay />
30
+ </div>
31
+ <ScanBand />
32
+ </div>
33
+ <div class="hyvui-log-inner">
34
+ {#if header}
35
+ <div class="hyvui-log-header">
36
+ {@render header()}
37
+ </div>
38
+ {/if}
39
+ <div class="hyvui-log-content">
40
+ {#if children}{@render children()}{/if}
41
+ </div>
42
+ {#if footer}
43
+ <div class="hyvui-log-footer">
44
+ {@render footer()}
45
+ </div>
46
+ {/if}
47
+ </div>
48
+ </section>
49
+
50
+ <style>
51
+ .hyvui-log {
52
+ position: relative;
53
+ min-height: 100dvh;
54
+ padding: var(--space-scene);
55
+ background-color: var(--bg);
56
+ }
57
+
58
+ .hyvui-log-ambient {
59
+ position: absolute;
60
+ inset: 0;
61
+ pointer-events: none;
62
+ }
63
+
64
+ .hyvui-log-inner {
65
+ position: relative;
66
+ display: flex;
67
+ flex-direction: column;
68
+ gap: calc(1.5rem * var(--reg-spacing-scale));
69
+ width: 100%;
70
+ }
71
+
72
+ .hyvui-log-content {
73
+ font-family: var(--font-mono);
74
+ border-left: 2px solid rgba(121, 166, 163, 0.18);
75
+ padding-left: 1.5rem;
76
+ }
77
+ </style>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ /** Additional CSS classes. */
4
+ class?: string;
5
+ /** Above the log area (system name, StatusDot row). */
6
+ header?: Snippet;
7
+ /** Log content area (TerminalBoot, StatusLine, CodeBlock). */
8
+ children?: Snippet;
9
+ /** Below the log area (status summary, CTA). */
10
+ footer?: Snippet;
11
+ }
12
+ declare const LogScene: import("svelte").Component<Props, {}, "">;
13
+ type LogScene = ReturnType<typeof LogScene>;
14
+ export default LogScene;
@@ -0,0 +1,92 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import GridOverlay from '../ambient/GridOverlay.svelte';
4
+ import type { Snippet } from 'svelte';
5
+
6
+ interface Props {
7
+ /** Section label rendered as a chapter expression above the heading. */
8
+ chapter?: string;
9
+ /** Additional CSS classes. */
10
+ class?: string;
11
+ /** The scene's title content. */
12
+ heading?: Snippet;
13
+ /** Prose content in the narrow left column. */
14
+ copy?: Snippet;
15
+ /** Open canvas area in the right column. */
16
+ canvas?: Snippet;
17
+ }
18
+
19
+ let {
20
+ chapter = '',
21
+ class: className = '',
22
+ heading,
23
+ copy,
24
+ canvas,
25
+ }: Props = $props();
26
+ </script>
27
+
28
+ <section class={cn('hyvui-narrative', className)}>
29
+ <div class="hyvui-narrative-grid-bg" aria-hidden="true" style:opacity="var(--reg-ornament-opacity)">
30
+ <GridOverlay />
31
+ </div>
32
+ <div class="hyvui-narrative-grid">
33
+ <div class="hyvui-narrative-copy">
34
+ {#if chapter}
35
+ <span class="expr-chapter">{chapter}</span>
36
+ {/if}
37
+ {#if heading}
38
+ <div class="hyvui-narrative-heading">
39
+ {@render heading()}
40
+ </div>
41
+ {/if}
42
+ {#if copy}
43
+ <div class="hyvui-narrative-prose">
44
+ {@render copy()}
45
+ </div>
46
+ {/if}
47
+ </div>
48
+ {#if canvas}
49
+ <div class="hyvui-narrative-canvas">
50
+ {@render canvas()}
51
+ </div>
52
+ {/if}
53
+ </div>
54
+ </section>
55
+
56
+ <style>
57
+ .hyvui-narrative {
58
+ position: relative;
59
+ min-height: 100dvh;
60
+ padding: var(--space-scene);
61
+ display: flex;
62
+ align-items: center;
63
+ }
64
+
65
+ .hyvui-narrative-grid-bg {
66
+ position: absolute;
67
+ inset: 0;
68
+ pointer-events: none;
69
+ }
70
+
71
+ .hyvui-narrative-grid {
72
+ position: relative;
73
+ display: grid;
74
+ grid-template-columns: minmax(0, 0.82fr) minmax(0, 1.18fr);
75
+ gap: calc(2rem * var(--reg-spacing-scale));
76
+ width: 100%;
77
+ align-items: center;
78
+ }
79
+
80
+ .hyvui-narrative-copy {
81
+ display: flex;
82
+ flex-direction: column;
83
+ gap: calc(1.25rem * var(--reg-spacing-scale));
84
+ max-width: 30rem;
85
+ }
86
+
87
+ @media (max-width: 768px) {
88
+ .hyvui-narrative-grid {
89
+ grid-template-columns: 1fr;
90
+ }
91
+ }
92
+ </style>
@@ -0,0 +1,16 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ /** Section label rendered as a chapter expression above the heading. */
4
+ chapter?: string;
5
+ /** Additional CSS classes. */
6
+ class?: string;
7
+ /** The scene's title content. */
8
+ heading?: Snippet;
9
+ /** Prose content in the narrow left column. */
10
+ copy?: Snippet;
11
+ /** Open canvas area in the right column. */
12
+ canvas?: Snippet;
13
+ }
14
+ declare const NarrativeScene: import("svelte").Component<Props, {}, "">;
15
+ type NarrativeScene = ReturnType<typeof NarrativeScene>;
16
+ export default NarrativeScene;
@@ -0,0 +1,107 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import ScanBand from '../ambient/ScanBand.svelte';
4
+ import type { Snippet } from 'svelte';
5
+
6
+ interface Props {
7
+ /** Optional title rendered as a readout expression label. */
8
+ title?: string;
9
+ /** Additional CSS classes. */
10
+ class?: string;
11
+ /** Top bar area for labels and status indicators. */
12
+ header?: Snippet;
13
+ /** Main content area. */
14
+ children?: Snippet;
15
+ /** Optional right sidebar (fixed width ~260px). */
16
+ sidebar?: Snippet;
17
+ }
18
+
19
+ let {
20
+ title = '',
21
+ class: className = '',
22
+ header,
23
+ children,
24
+ sidebar,
25
+ }: Props = $props();
26
+ </script>
27
+
28
+ <section class={cn('hyvui-readout', className)}>
29
+ <div class="hyvui-readout-scan" aria-hidden="true" style:opacity="calc(0.4 * var(--reg-ornament-opacity))">
30
+ <ScanBand />
31
+ </div>
32
+ <div class="hyvui-readout-inner">
33
+ {#if header || title}
34
+ <div class="hyvui-readout-header">
35
+ {#if title}
36
+ <span class="expr-readout">{title}</span>
37
+ {/if}
38
+ {#if header}
39
+ {@render header()}
40
+ {/if}
41
+ </div>
42
+ {/if}
43
+ <div class={cn('hyvui-readout-body', sidebar && 'hyvui-readout-body-sidebar')}>
44
+ <div class="hyvui-readout-main">
45
+ {#if children}{@render children()}{/if}
46
+ </div>
47
+ {#if sidebar}
48
+ <aside class="hyvui-readout-sidebar">
49
+ {@render sidebar()}
50
+ </aside>
51
+ {/if}
52
+ </div>
53
+ </div>
54
+ </section>
55
+
56
+ <style>
57
+ .hyvui-readout {
58
+ position: relative;
59
+ min-height: 100dvh;
60
+ padding: var(--space-scene);
61
+ background-color: var(--bg);
62
+ }
63
+
64
+ .hyvui-readout-scan {
65
+ position: absolute;
66
+ inset: 0;
67
+ pointer-events: none;
68
+ }
69
+
70
+ .hyvui-readout-inner {
71
+ position: relative;
72
+ display: flex;
73
+ flex-direction: column;
74
+ gap: calc(1.5rem * var(--reg-spacing-scale));
75
+ width: 100%;
76
+ }
77
+
78
+ .hyvui-readout-header {
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 1rem;
82
+ }
83
+
84
+ .hyvui-readout-body {
85
+ width: 100%;
86
+ }
87
+
88
+ .hyvui-readout-body-sidebar {
89
+ display: grid;
90
+ grid-template-columns: 1fr 260px;
91
+ gap: calc(1.5rem * var(--reg-spacing-scale));
92
+ }
93
+
94
+ .hyvui-readout-main {
95
+ min-width: 0;
96
+ }
97
+
98
+ .hyvui-readout-sidebar {
99
+ min-width: 0;
100
+ }
101
+
102
+ @media (max-width: 768px) {
103
+ .hyvui-readout-body-sidebar {
104
+ grid-template-columns: 1fr;
105
+ }
106
+ }
107
+ </style>
@@ -0,0 +1,16 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ /** Optional title rendered as a readout expression label. */
4
+ title?: string;
5
+ /** Additional CSS classes. */
6
+ class?: string;
7
+ /** Top bar area for labels and status indicators. */
8
+ header?: Snippet;
9
+ /** Main content area. */
10
+ children?: Snippet;
11
+ /** Optional right sidebar (fixed width ~260px). */
12
+ sidebar?: Snippet;
13
+ }
14
+ declare const ReadoutScene: import("svelte").Component<Props, {}, "">;
15
+ type ReadoutScene = ReturnType<typeof ReadoutScene>;
16
+ export default ReadoutScene;
@@ -0,0 +1,104 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import CornerBrackets from '../ambient/CornerBrackets.svelte';
4
+ import type { Snippet } from 'svelte';
5
+
6
+ interface Props {
7
+ /** Additional CSS classes. */
8
+ class?: string;
9
+ /** Above heading (Label or chapter expression). */
10
+ label?: Snippet;
11
+ /** Primary statement. */
12
+ heading?: Snippet;
13
+ /** Secondary line. */
14
+ subheading?: Snippet;
15
+ /** CTA area. */
16
+ actions?: Snippet;
17
+ /** Behind everything (GridOverlay, ParallaxLayer, etc.). */
18
+ ambient?: Snippet;
19
+ }
20
+
21
+ let {
22
+ class: className = '',
23
+ label,
24
+ heading,
25
+ subheading,
26
+ actions,
27
+ ambient,
28
+ }: Props = $props();
29
+ </script>
30
+
31
+ <section class={cn('hyvui-stage', className)}>
32
+ {#if ambient}
33
+ <div class="hyvui-stage-ambient" aria-hidden="true">
34
+ {@render ambient()}
35
+ </div>
36
+ {/if}
37
+ <div class="hyvui-stage-brackets" aria-hidden="true" style:opacity="var(--reg-ornament-opacity)">
38
+ <CornerBrackets />
39
+ </div>
40
+ <div class="hyvui-stage-content">
41
+ {#if label}
42
+ <div class="hyvui-stage-label">
43
+ {@render label()}
44
+ </div>
45
+ {/if}
46
+ {#if heading}
47
+ <div class="hyvui-stage-heading">
48
+ {@render heading()}
49
+ </div>
50
+ {/if}
51
+ {#if subheading}
52
+ <div class="hyvui-stage-subheading">
53
+ {@render subheading()}
54
+ </div>
55
+ {/if}
56
+ {#if actions}
57
+ <div class="hyvui-stage-actions">
58
+ {@render actions()}
59
+ </div>
60
+ {/if}
61
+ </div>
62
+ </section>
63
+
64
+ <style>
65
+ .hyvui-stage {
66
+ position: relative;
67
+ min-height: 100dvh;
68
+ padding: var(--space-scene);
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ }
73
+
74
+ .hyvui-stage-ambient {
75
+ position: absolute;
76
+ inset: 0;
77
+ pointer-events: none;
78
+ }
79
+
80
+ .hyvui-stage-brackets {
81
+ position: absolute;
82
+ inset: var(--space-scene);
83
+ pointer-events: none;
84
+ }
85
+
86
+ .hyvui-stage-content {
87
+ position: relative;
88
+ display: flex;
89
+ flex-direction: column;
90
+ align-items: center;
91
+ text-align: center;
92
+ gap: calc(2rem * var(--reg-spacing-scale));
93
+ }
94
+
95
+ .hyvui-stage-subheading {
96
+ max-width: 32rem;
97
+ }
98
+
99
+ .hyvui-stage-actions {
100
+ display: flex;
101
+ gap: 0.75rem;
102
+ margin-top: calc(-1rem * var(--reg-spacing-scale));
103
+ }
104
+ </style>
@@ -0,0 +1,18 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ /** Additional CSS classes. */
4
+ class?: string;
5
+ /** Above heading (Label or chapter expression). */
6
+ label?: Snippet;
7
+ /** Primary statement. */
8
+ heading?: Snippet;
9
+ /** Secondary line. */
10
+ subheading?: Snippet;
11
+ /** CTA area. */
12
+ actions?: Snippet;
13
+ /** Behind everything (GridOverlay, ParallaxLayer, etc.). */
14
+ ambient?: Snippet;
15
+ }
16
+ declare const StageScene: import("svelte").Component<Props, {}, "">;
17
+ type StageScene = ReturnType<typeof StageScene>;
18
+ export default StageScene;