@hyvnt/hyvui 0.3.0 → 0.4.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 (170) hide show
  1. package/README.md +37 -7
  2. package/dist/components/ambient/ArcaneVein.svelte +151 -0
  3. package/dist/components/ambient/ArcaneVein.svelte.d.ts +31 -0
  4. package/dist/components/ambient/BrassFiligree.svelte +109 -0
  5. package/dist/components/ambient/BrassFiligree.svelte.d.ts +20 -0
  6. package/dist/components/ambient/CornerBrackets.svelte +8 -0
  7. package/dist/components/ambient/CornerBrackets.svelte.d.ts +8 -0
  8. package/dist/components/ambient/CrystalShard.svelte +151 -0
  9. package/dist/components/ambient/CrystalShard.svelte.d.ts +19 -0
  10. package/dist/components/ambient/DataStream.svelte +7 -1
  11. package/dist/components/ambient/DataStream.svelte.d.ts +6 -0
  12. package/dist/components/ambient/EnergyArc.svelte +189 -0
  13. package/dist/components/ambient/EnergyArc.svelte.d.ts +32 -0
  14. package/dist/components/ambient/GlyphMark.svelte +6 -0
  15. package/dist/components/ambient/GlyphMark.svelte.d.ts +6 -0
  16. package/dist/components/ambient/GridOverlay.svelte +8 -0
  17. package/dist/components/ambient/GridOverlay.svelte.d.ts +8 -0
  18. package/dist/components/ambient/HexGrid.svelte +119 -0
  19. package/dist/components/ambient/HexGrid.svelte.d.ts +21 -0
  20. package/dist/components/ambient/ParallaxLayer.svelte +9 -1
  21. package/dist/components/ambient/ParallaxLayer.svelte.d.ts +7 -0
  22. package/dist/components/ambient/ScanBand.svelte +8 -0
  23. package/dist/components/ambient/ScanBand.svelte.d.ts +8 -0
  24. package/dist/components/ambient/ShimmerCloud.svelte +180 -0
  25. package/dist/components/ambient/ShimmerCloud.svelte.d.ts +21 -0
  26. package/dist/components/ambient/SignalRing.svelte +7 -1
  27. package/dist/components/ambient/SignalRing.svelte.d.ts +6 -0
  28. package/dist/components/ambient/ThreadLine.svelte +7 -0
  29. package/dist/components/ambient/ThreadLine.svelte.d.ts +7 -0
  30. package/dist/components/ambient/Vignette.svelte +6 -0
  31. package/dist/components/ambient/Vignette.svelte.d.ts +6 -0
  32. package/dist/components/depth/DepthLayer.svelte +8 -0
  33. package/dist/components/depth/DepthLayer.svelte.d.ts +8 -0
  34. package/dist/components/depth/DepthStage.svelte +8 -4
  35. package/dist/components/depth/DepthStage.svelte.d.ts +8 -0
  36. package/dist/components/depth/FloatCard.svelte +17 -1
  37. package/dist/components/depth/FloatCard.svelte.d.ts +8 -0
  38. package/dist/components/depth/HorizonGrid.svelte +25 -0
  39. package/dist/components/depth/HorizonGrid.svelte.d.ts +9 -0
  40. package/dist/components/depth/Plinth.svelte +10 -0
  41. package/dist/components/depth/Plinth.svelte.d.ts +10 -0
  42. package/dist/components/display/Avatar.svelte +5 -0
  43. package/dist/components/display/Avatar.svelte.d.ts +5 -0
  44. package/dist/components/display/Badge.svelte +16 -0
  45. package/dist/components/display/Badge.svelte.d.ts +6 -0
  46. package/dist/components/display/Blockquote.svelte +4 -0
  47. package/dist/components/display/Blockquote.svelte.d.ts +4 -0
  48. package/dist/components/display/CodeBlock.svelte +5 -0
  49. package/dist/components/display/CodeBlock.svelte.d.ts +5 -0
  50. package/dist/components/display/MetricCard.svelte +23 -0
  51. package/dist/components/display/MetricCard.svelte.d.ts +6 -0
  52. package/dist/components/display/Table.svelte +7 -0
  53. package/dist/components/display/Table.svelte.d.ts +7 -0
  54. package/dist/components/feedback/Alert.svelte +24 -0
  55. package/dist/components/feedback/Alert.svelte.d.ts +6 -0
  56. package/dist/components/feedback/EmptyState.svelte +7 -0
  57. package/dist/components/feedback/EmptyState.svelte.d.ts +7 -0
  58. package/dist/components/feedback/ErrorState.svelte +5 -0
  59. package/dist/components/feedback/ErrorState.svelte.d.ts +5 -0
  60. package/dist/components/feedback/Skeleton.svelte +6 -0
  61. package/dist/components/feedback/Skeleton.svelte.d.ts +6 -0
  62. package/dist/components/feedback/StatusDot.svelte +36 -1
  63. package/dist/components/feedback/StatusDot.svelte.d.ts +6 -0
  64. package/dist/components/feedback/StatusLine.svelte +8 -2
  65. package/dist/components/feedback/StatusLine.svelte.d.ts +6 -0
  66. package/dist/components/feedback/Toast.svelte +16 -2
  67. package/dist/components/feedback/Toast.svelte.d.ts +10 -0
  68. package/dist/components/inputs/Button.svelte +74 -4
  69. package/dist/components/inputs/Button.svelte.d.ts +8 -0
  70. package/dist/components/inputs/Checkbox.svelte +5 -0
  71. package/dist/components/inputs/Checkbox.svelte.d.ts +5 -0
  72. package/dist/components/inputs/FileUpload.svelte +5 -0
  73. package/dist/components/inputs/FileUpload.svelte.d.ts +5 -0
  74. package/dist/components/inputs/Input.svelte +10 -2
  75. package/dist/components/inputs/Input.svelte.d.ts +7 -0
  76. package/dist/components/inputs/Select.svelte +8 -0
  77. package/dist/components/inputs/Select.svelte.d.ts +8 -0
  78. package/dist/components/inputs/Textarea.svelte +9 -2
  79. package/dist/components/inputs/Textarea.svelte.d.ts +6 -0
  80. package/dist/components/inputs/Toggle.svelte +6 -1
  81. package/dist/components/inputs/Toggle.svelte.d.ts +5 -0
  82. package/dist/components/layout/Card.svelte +11 -0
  83. package/dist/components/layout/Card.svelte.d.ts +11 -0
  84. package/dist/components/layout/Drawer.svelte +7 -0
  85. package/dist/components/layout/Drawer.svelte.d.ts +6 -0
  86. package/dist/components/layout/Grid.svelte +10 -0
  87. package/dist/components/layout/Grid.svelte.d.ts +10 -0
  88. package/dist/components/layout/Modal.svelte +15 -0
  89. package/dist/components/layout/Modal.svelte.d.ts +10 -0
  90. package/dist/components/layout/Panel.svelte +9 -0
  91. package/dist/components/layout/Panel.svelte.d.ts +9 -0
  92. package/dist/components/layout/Popover.svelte +10 -0
  93. package/dist/components/layout/Popover.svelte.d.ts +9 -0
  94. package/dist/components/layout/Stack.svelte +12 -0
  95. package/dist/components/layout/Stack.svelte.d.ts +12 -0
  96. package/dist/components/navigation/Breadcrumb.svelte +8 -0
  97. package/dist/components/navigation/Breadcrumb.svelte.d.ts +8 -0
  98. package/dist/components/navigation/DropdownMenu.svelte +12 -0
  99. package/dist/components/navigation/DropdownMenu.svelte.d.ts +12 -0
  100. package/dist/components/navigation/SidebarNav.svelte +10 -0
  101. package/dist/components/navigation/SidebarNav.svelte.d.ts +9 -0
  102. package/dist/components/navigation/Tabs.svelte +26 -1
  103. package/dist/components/navigation/Tabs.svelte.d.ts +8 -0
  104. package/dist/components/navigation/Topbar.svelte +9 -0
  105. package/dist/components/navigation/Topbar.svelte.d.ts +9 -0
  106. package/dist/components/patterns/ActionBar.svelte +11 -0
  107. package/dist/components/patterns/ActionBar.svelte.d.ts +10 -0
  108. package/dist/components/patterns/ChapterMark.svelte +152 -0
  109. package/dist/components/patterns/ChapterMark.svelte.d.ts +19 -0
  110. package/dist/components/patterns/ConfirmDialog.svelte +12 -0
  111. package/dist/components/patterns/ConfirmDialog.svelte.d.ts +12 -0
  112. package/dist/components/patterns/DepthPortal.svelte +123 -0
  113. package/dist/components/patterns/DepthPortal.svelte.d.ts +24 -0
  114. package/dist/components/patterns/Manifesto.svelte +171 -0
  115. package/dist/components/patterns/Manifesto.svelte.d.ts +25 -0
  116. package/dist/components/patterns/PageHeader.svelte +8 -0
  117. package/dist/components/patterns/PageHeader.svelte.d.ts +8 -0
  118. package/dist/components/patterns/PullQuote.svelte +145 -0
  119. package/dist/components/patterns/PullQuote.svelte.d.ts +23 -0
  120. package/dist/components/patterns/RegisterSwitcher.svelte +132 -0
  121. package/dist/components/patterns/RegisterSwitcher.svelte.d.ts +21 -0
  122. package/dist/components/patterns/SearchBar.svelte +5 -0
  123. package/dist/components/patterns/SearchBar.svelte.d.ts +5 -0
  124. package/dist/components/patterns/ShowcaseFrame.svelte +117 -0
  125. package/dist/components/patterns/ShowcaseFrame.svelte.d.ts +28 -0
  126. package/dist/components/patterns/TerminalBoot.svelte +15 -1
  127. package/dist/components/patterns/TerminalBoot.svelte.d.ts +12 -0
  128. package/dist/components/primitives/Divider.svelte +30 -0
  129. package/dist/components/primitives/Divider.svelte.d.ts +5 -0
  130. package/dist/components/primitives/Icon.svelte +9 -0
  131. package/dist/components/primitives/Icon.svelte.d.ts +9 -0
  132. package/dist/components/primitives/Label.svelte +6 -0
  133. package/dist/components/primitives/Label.svelte.d.ts +6 -0
  134. package/dist/components/primitives/Surface.svelte +67 -2
  135. package/dist/components/primitives/Surface.svelte.d.ts +7 -0
  136. package/dist/components/primitives/Text.svelte +32 -0
  137. package/dist/components/primitives/Text.svelte.d.ts +7 -0
  138. package/dist/components/scenes/ArchiveScene.svelte +10 -0
  139. package/dist/components/scenes/ArchiveScene.svelte.d.ts +10 -0
  140. package/dist/components/scenes/DepthScene.svelte +128 -0
  141. package/dist/components/scenes/DepthScene.svelte.d.ts +36 -0
  142. package/dist/components/scenes/LogScene.svelte +14 -0
  143. package/dist/components/scenes/LogScene.svelte.d.ts +14 -0
  144. package/dist/components/scenes/NarrativeScene.svelte +9 -0
  145. package/dist/components/scenes/NarrativeScene.svelte.d.ts +9 -0
  146. package/dist/components/scenes/ReadoutScene.svelte +11 -0
  147. package/dist/components/scenes/ReadoutScene.svelte.d.ts +11 -0
  148. package/dist/components/scenes/StageScene.svelte +14 -0
  149. package/dist/components/scenes/StageScene.svelte.d.ts +14 -0
  150. package/dist/components/system/AppShell.svelte +62 -0
  151. package/dist/components/system/AppShell.svelte.d.ts +32 -0
  152. package/dist/examples/ArcaneShard.svelte +364 -0
  153. package/dist/examples/ArcaneShard.svelte.d.ts +3 -0
  154. package/dist/examples/HextechForge.svelte +324 -0
  155. package/dist/examples/HextechForge.svelte.d.ts +3 -0
  156. package/dist/index.d.ts +15 -1
  157. package/dist/index.js +16 -1
  158. package/dist/styles.css +2 -0
  159. package/dist/system/actions/echo.js +13 -4
  160. package/dist/system/actions/resolve.js +20 -6
  161. package/dist/system/actions/reveal.js +1 -1
  162. package/dist/system/actions/surface.js +1 -3
  163. package/dist/system/register.d.ts +1 -1
  164. package/dist/system/register.js +5 -1
  165. package/dist/tokens/arcane.css +96 -0
  166. package/dist/tokens/hextech.css +96 -0
  167. package/dist/tokens/tokens.css +6 -4
  168. package/dist/tokens/tokens.d.ts +41 -0
  169. package/dist/tokens/tokens.js +41 -0
  170. package/package.json +6 -2
@@ -0,0 +1,28 @@
1
+ import type { PerspectivePreset } from '../../system/depth/depth.js';
2
+ import type { Snippet } from 'svelte';
3
+ /**
4
+ * @remarks Composed spatial stage: HorizonGrid backdrop + DepthStage + CornerBrackets in one component.
5
+ * The missing entry point into the depth system for showcasing content.
6
+ * @example
7
+ * <ShowcaseFrame perspective="mid" animated>
8
+ * {#snippet label()}<span>artifact / 001</span>{/snippet}
9
+ * <FloatCard>your content</FloatCard>
10
+ * </ShowcaseFrame>
11
+ */
12
+ interface Props {
13
+ /** Perspective distance preset. */
14
+ perspective?: PerspectivePreset;
15
+ /** Animate the HorizonGrid lines. */
16
+ animated?: boolean;
17
+ /** Label rendered in readout style at the bottom-left. */
18
+ label?: Snippet;
19
+ /** Minimum height of the frame. */
20
+ minHeight?: string;
21
+ /** Additional CSS classes. */
22
+ class?: string;
23
+ /** Content rendered at raised depth level. */
24
+ children?: Snippet;
25
+ }
26
+ declare const ShowcaseFrame: import("svelte").Component<Props, {}, "">;
27
+ type ShowcaseFrame = ReturnType<typeof ShowcaseFrame>;
28
+ export default ShowcaseFrame;
@@ -8,6 +8,18 @@
8
8
  message: string;
9
9
  }
10
10
 
11
+ /**
12
+ * @remarks Use in LogScene or as a standalone loading sequence for system init screens.
13
+ * @example
14
+ * <TerminalBoot
15
+ * lines={[
16
+ * { status: 'ok', message: 'database connected' },
17
+ * { status: 'pend', message: 'loading modules...' },
18
+ * { status: 'ok', message: 'system ready' }
19
+ * ]}
20
+ * oncomplete={() => ready = true}
21
+ * />
22
+ */
11
23
  interface Props {
12
24
  /** Lines to display in sequence. */
13
25
  lines?: BootLine[];
@@ -46,7 +58,9 @@
46
58
  return;
47
59
  }
48
60
 
49
- if (instant) {
61
+ const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
62
+
63
+ if (instant || prefersReduced) {
50
64
  visibleCount = lines.length;
51
65
  oncomplete?.();
52
66
  return;
@@ -2,6 +2,18 @@ interface BootLine {
2
2
  status: 'ok' | 'pend' | 'warn' | 'fail';
3
3
  message: string;
4
4
  }
5
+ /**
6
+ * @remarks Use in LogScene or as a standalone loading sequence for system init screens.
7
+ * @example
8
+ * <TerminalBoot
9
+ * lines={[
10
+ * { status: 'ok', message: 'database connected' },
11
+ * { status: 'pend', message: 'loading modules...' },
12
+ * { status: 'ok', message: 'system ready' }
13
+ * ]}
14
+ * oncomplete={() => ready = true}
15
+ * />
16
+ */
5
17
  interface Props {
6
18
  /** Lines to display in sequence. */
7
19
  lines?: BootLine[];
@@ -1,6 +1,11 @@
1
1
  <script lang="ts">
2
2
  import { cn } from '../../utils/cn.js';
3
3
 
4
+ /**
5
+ * @example
6
+ * <Divider />
7
+ * <Divider strength="strong" />
8
+ */
4
9
  interface Props {
5
10
  /** Line visibility strength. */
6
11
  strength?: 'default' | 'strong';
@@ -23,4 +28,29 @@
23
28
  margin: 0;
24
29
  width: 100%;
25
30
  }
31
+
32
+ /* ── hextech: fade to brass at edges ──────────────────────────────── */
33
+ :global([data-register='hextech']) .hyvui-divider {
34
+ border-image: linear-gradient(
35
+ to right,
36
+ transparent,
37
+ rgba(184, 115, 51, 0.5) 20%,
38
+ rgba(93, 217, 240, 0.35) 50%,
39
+ rgba(184, 115, 51, 0.5) 80%,
40
+ transparent
41
+ ) 1;
42
+ }
43
+
44
+ /* ── arcane: violet glow, center-bright ───────────────────────────── */
45
+ :global([data-register='arcane']) .hyvui-divider {
46
+ border-image: linear-gradient(
47
+ to right,
48
+ transparent,
49
+ rgba(184, 69, 201, 0.55) 25%,
50
+ rgba(233, 76, 188, 0.65) 50%,
51
+ rgba(184, 69, 201, 0.55) 75%,
52
+ transparent
53
+ ) 1;
54
+ filter: drop-shadow(0 0 3px rgba(184, 69, 201, 0.3));
55
+ }
26
56
  </style>
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @example
3
+ * <Divider />
4
+ * <Divider strength="strong" />
5
+ */
1
6
  interface Props {
2
7
  /** Line visibility strength. */
3
8
  strength?: 'default' | 'strong';
@@ -2,6 +2,15 @@
2
2
  import { cn } from '../../utils/cn.js';
3
3
  import type { Snippet } from 'svelte';
4
4
 
5
+ /**
6
+ * @example
7
+ * <Icon size={20}>
8
+ * <svg viewBox="0 0 24 24"><path d="M12 2L2 22h20L12 2z" /></svg>
9
+ * </Icon>
10
+ * <Icon size={16} color="var(--accent)">
11
+ * <svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" /></svg>
12
+ * </Icon>
13
+ */
5
14
  interface Props {
6
15
  /** Icon size in pixels. */
7
16
  size?: number;
@@ -1,4 +1,13 @@
1
1
  import type { Snippet } from 'svelte';
2
+ /**
3
+ * @example
4
+ * <Icon size={20}>
5
+ * <svg viewBox="0 0 24 24"><path d="M12 2L2 22h20L12 2z" /></svg>
6
+ * </Icon>
7
+ * <Icon size={16} color="var(--accent)">
8
+ * <svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" /></svg>
9
+ * </Icon>
10
+ */
2
11
  interface Props {
3
12
  /** Icon size in pixels. */
4
13
  size?: number;
@@ -2,6 +2,12 @@
2
2
  import { cn } from '../../utils/cn.js';
3
3
  import type { Snippet } from 'svelte';
4
4
 
5
+ /**
6
+ * @example
7
+ * <Label>version 2.0</Label>
8
+ * <Label color="accent">active</Label>
9
+ * <Label color="signal" as="div">system ready</Label>
10
+ */
5
11
  interface Props {
6
12
  /** HTML tag to render. */
7
13
  as?: string;
@@ -1,4 +1,10 @@
1
1
  import type { Snippet } from 'svelte';
2
+ /**
3
+ * @example
4
+ * <Label>version 2.0</Label>
5
+ * <Label color="accent">active</Label>
6
+ * <Label color="signal" as="div">system ready</Label>
7
+ */
2
8
  interface Props {
3
9
  /** HTML tag to render. */
4
10
  as?: string;
@@ -2,6 +2,13 @@
2
2
  import { cn } from '../../utils/cn.js';
3
3
  import type { Snippet } from 'svelte';
4
4
 
5
+ /**
6
+ * @see surface — add `use:surface` for an entrance animation on mount.
7
+ * @example
8
+ * <Surface variant="card">card content</Surface>
9
+ * <Surface variant="panel" withInset>panel with teal inset border</Surface>
10
+ * <Surface variant="base" as="section">base container</Surface>
11
+ */
5
12
  interface Props {
6
13
  /** Surface visual style. */
7
14
  variant?: 'base' | 'card' | 'panel';
@@ -69,14 +76,12 @@
69
76
  background: var(--surface-card);
70
77
  border: 1px solid rgba(255, 255, 255, 0.05);
71
78
  box-shadow: var(--surface-stroke), var(--shadow-card);
72
- backdrop-filter: blur(8px);
73
79
  }
74
80
 
75
81
  .hyvui-surface-panel {
76
82
  background: var(--surface-panel);
77
83
  border: 1px solid var(--line);
78
84
  box-shadow: var(--surface-stroke), var(--shadow-veil);
79
- backdrop-filter: blur(10px);
80
85
  }
81
86
 
82
87
  .hyvui-surface-inset::after {
@@ -86,4 +91,64 @@
86
91
  border: 1px solid rgba(121, 166, 163, 0.14);
87
92
  pointer-events: none;
88
93
  }
94
+
95
+ /* ── hextech ornament ─────────────────────────────────────────────── */
96
+ :global([data-register='hextech']) .hyvui-surface {
97
+ border-radius: var(--radius-sm);
98
+ }
99
+
100
+ :global([data-register='hextech']) .hyvui-surface-card {
101
+ border-color: rgba(184, 115, 51, 0.2);
102
+ box-shadow:
103
+ var(--surface-stroke),
104
+ var(--shadow-card),
105
+ inset 0 0 0 1px rgba(93, 217, 240, 0.04);
106
+ }
107
+
108
+ :global([data-register='hextech']) .hyvui-surface-panel {
109
+ border-color: rgba(93, 217, 240, 0.18);
110
+ }
111
+
112
+ /* ── arcane ornament ──────────────────────────────────────────────── */
113
+ :global([data-register='arcane']) .hyvui-surface-card {
114
+ border-color: rgba(184, 69, 201, 0.18);
115
+ }
116
+
117
+ /* violet radial leak at top-left corner — nth-child rotates it per card */
118
+ :global([data-register='arcane']) .hyvui-surface-card::after {
119
+ content: '';
120
+ position: absolute;
121
+ inset: 0;
122
+ background: radial-gradient(
123
+ circle at 0% 0%,
124
+ rgba(184, 69, 201, 0.14) 0%,
125
+ transparent 50%
126
+ );
127
+ pointer-events: none;
128
+ }
129
+
130
+ /* rotate leak position per nth-child so cards in a grid each look unique */
131
+ :global([data-register='arcane']) .hyvui-surface-card:nth-child(2n)::after {
132
+ background: radial-gradient(
133
+ circle at 100% 0%,
134
+ rgba(233, 76, 188, 0.12) 0%,
135
+ transparent 50%
136
+ );
137
+ }
138
+
139
+ :global([data-register='arcane']) .hyvui-surface-card:nth-child(3n)::after {
140
+ background: radial-gradient(
141
+ circle at 100% 100%,
142
+ rgba(184, 69, 201, 0.1) 0%,
143
+ transparent 50%
144
+ );
145
+ }
146
+
147
+ :global([data-register='arcane']) .hyvui-surface-panel {
148
+ border-color: rgba(184, 69, 201, 0.22);
149
+ box-shadow:
150
+ var(--surface-stroke),
151
+ var(--shadow-veil),
152
+ 0 0 40px rgba(184, 69, 201, 0.06);
153
+ }
89
154
  </style>
@@ -1,4 +1,11 @@
1
1
  import type { Snippet } from 'svelte';
2
+ /**
3
+ * @see surface — add `use:surface` for an entrance animation on mount.
4
+ * @example
5
+ * <Surface variant="card">card content</Surface>
6
+ * <Surface variant="panel" withInset>panel with teal inset border</Surface>
7
+ * <Surface variant="base" as="section">base container</Surface>
8
+ */
2
9
  interface Props {
3
10
  /** Surface visual style. */
4
11
  variant?: 'base' | 'card' | 'panel';
@@ -3,6 +3,13 @@
3
3
  import type { Snippet } from 'svelte';
4
4
  import type { Expression } from './text.js';
5
5
 
6
+ /**
7
+ * @example
8
+ * <Text variant="heading" as="h1">signal acquired</Text>
9
+ * <Text variant="body" color="muted">supporting prose here.</Text>
10
+ * <Text expression="title-card" as="h1">deep signal</Text>
11
+ * <Text expression="readout">sys.uptime: 99.9%</Text>
12
+ */
6
13
  interface Props {
7
14
  /** HTML tag to render. */
8
15
  as?: string;
@@ -95,4 +102,29 @@
95
102
  line-height: 1.64;
96
103
  text-wrap: pretty;
97
104
  }
105
+
106
+ /* ── hextech: `command` expression gets cyan underline glow ───────── */
107
+ :global([data-register='hextech']) .expr-command {
108
+ text-decoration: underline;
109
+ text-decoration-color: rgba(93, 217, 240, 0.45);
110
+ text-underline-offset: 3px;
111
+ text-decoration-thickness: 1px;
112
+ }
113
+
114
+ /* ── arcane: `command` expression gets violet text-shadow shimmer ─── */
115
+ :global([data-register='arcane']) .expr-command {
116
+ text-shadow: 0 0 12px rgba(184, 69, 201, 0.55);
117
+ animation: text-shimmer 3s var(--orn-pulse-rhythm, ease-in-out) infinite;
118
+ }
119
+
120
+ @keyframes text-shimmer {
121
+ 0%, 100% { text-shadow: 0 0 12px rgba(184, 69, 201, 0.55); }
122
+ 50% { text-shadow: 0 0 20px rgba(233, 76, 188, 0.7), 0 0 8px rgba(184, 69, 201, 0.35); }
123
+ }
124
+
125
+ @media (prefers-reduced-motion: reduce) {
126
+ :global([data-register='arcane']) .expr-command {
127
+ animation: none;
128
+ }
129
+ }
98
130
  </style>
@@ -1,5 +1,12 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { Expression } from './text.js';
3
+ /**
4
+ * @example
5
+ * <Text variant="heading" as="h1">signal acquired</Text>
6
+ * <Text variant="body" color="muted">supporting prose here.</Text>
7
+ * <Text expression="title-card" as="h1">deep signal</Text>
8
+ * <Text expression="readout">sys.uptime: 99.9%</Text>
9
+ */
3
10
  interface Props {
4
11
  /** HTML tag to render. */
5
12
  as?: string;
@@ -3,6 +3,16 @@
3
3
  import Grid from '../layout/Grid.svelte';
4
4
  import type { Snippet } from 'svelte';
5
5
 
6
+ /**
7
+ * @remarks Use for galleries, catalogs, index pages. Responsive card grid with optional filter controls.
8
+ * @example
9
+ * <ArchiveScene title="all projects" minCardWidth="22rem" maxCols={3}>
10
+ * {#snippet filter()}<SearchBar bind:value={query} />{/snippet}
11
+ * {#each filtered as item}
12
+ * <Card><Text variant="heading">{item.name}</Text></Card>
13
+ * {/each}
14
+ * </ArchiveScene>
15
+ */
6
16
  interface Props {
7
17
  /** Optional scene title. */
8
18
  title?: string;
@@ -1,4 +1,14 @@
1
1
  import type { Snippet } from 'svelte';
2
+ /**
3
+ * @remarks Use for galleries, catalogs, index pages. Responsive card grid with optional filter controls.
4
+ * @example
5
+ * <ArchiveScene title="all projects" minCardWidth="22rem" maxCols={3}>
6
+ * {#snippet filter()}<SearchBar bind:value={query} />{/snippet}
7
+ * {#each filtered as item}
8
+ * <Card><Text variant="heading">{item.name}</Text></Card>
9
+ * {/each}
10
+ * </ArchiveScene>
11
+ */
2
12
  interface Props {
3
13
  /** Optional scene title. */
4
14
  title?: string;
@@ -0,0 +1,128 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import DepthStage from '../depth/DepthStage.svelte';
4
+ import DepthLayer from '../depth/DepthLayer.svelte';
5
+ import type { PerspectivePreset } from '../../system/depth/depth.js';
6
+ import type { Snippet } from 'svelte';
7
+
8
+ /**
9
+ * @remarks Full-page scene where depth is the primary design language.
10
+ * Unlike StageScene (flat, centered), DepthScene is spatial from edge to edge.
11
+ * @example
12
+ * <DepthScene perspective="far">
13
+ * {#snippet ambient()}<GridOverlay /><Vignette />{/snippet}
14
+ * {#snippet ground()}<HorizonGrid animated rows={20} />{/snippet}
15
+ * {#snippet stage()}
16
+ * <FloatCard tiltMax={5}>
17
+ * <Text expression="title-card" as="h1">deep signal</Text>
18
+ * </FloatCard>
19
+ * {/snippet}
20
+ * {#snippet foreground()}
21
+ * <Label color="muted">system / v4</Label>
22
+ * {/snippet}
23
+ * </DepthScene>
24
+ */
25
+ interface Props {
26
+ /** Perspective depth preset. */
27
+ perspective?: PerspectivePreset;
28
+ /** Background decorations: GridOverlay, ScanBand, Vignette. */
29
+ ambient?: Snippet;
30
+ /** Ground plane — HorizonGrid belongs here. */
31
+ ground?: Snippet;
32
+ /** Main content at mid-depth. */
33
+ stage?: Snippet;
34
+ /** Foreground labels and overlays closest to viewer. Pointer-events none. */
35
+ foreground?: Snippet;
36
+ /** Additional CSS classes. */
37
+ class?: string;
38
+ }
39
+
40
+ let {
41
+ perspective = 'far',
42
+ ambient,
43
+ ground,
44
+ stage,
45
+ foreground,
46
+ class: className = ''
47
+ }: Props = $props();
48
+ </script>
49
+
50
+ <section class={cn('hyvui-depth-scene', className)}>
51
+ <DepthStage {perspective} as="div" class="hyvui-depth-scene-stage">
52
+ {#if ambient}
53
+ <div class="hyvui-depth-scene-ambient" aria-hidden="true">
54
+ {@render ambient()}
55
+ </div>
56
+ {/if}
57
+
58
+ {#if ground}
59
+ <DepthLayer level="ground" class="hyvui-depth-scene-ground">
60
+ <div aria-hidden="true" style="display:contents">
61
+ {@render ground()}
62
+ </div>
63
+ </DepthLayer>
64
+ {/if}
65
+
66
+ {#if stage}
67
+ <DepthLayer level="raised" class="hyvui-depth-scene-content">
68
+ {@render stage()}
69
+ </DepthLayer>
70
+ {/if}
71
+
72
+ {#if foreground}
73
+ <DepthLayer level="foreground" class="hyvui-depth-scene-foreground">
74
+ {@render foreground()}
75
+ </DepthLayer>
76
+ {/if}
77
+ </DepthStage>
78
+ </section>
79
+
80
+ <style>
81
+ .hyvui-depth-scene {
82
+ position: relative;
83
+ min-height: 100dvh;
84
+ overflow: hidden;
85
+ }
86
+
87
+ :global(.hyvui-depth-scene-stage) {
88
+ position: relative;
89
+ width: 100%;
90
+ min-height: 100dvh;
91
+ }
92
+
93
+ .hyvui-depth-scene-ambient {
94
+ position: absolute;
95
+ inset: 0;
96
+ pointer-events: none;
97
+ }
98
+
99
+ :global(.hyvui-depth-scene-ground) {
100
+ position: absolute;
101
+ inset: 0;
102
+ pointer-events: none;
103
+ }
104
+
105
+ :global(.hyvui-depth-scene-content) {
106
+ position: relative;
107
+ display: flex;
108
+ align-items: center;
109
+ justify-content: center;
110
+ min-height: 100dvh;
111
+ padding: var(--space-scene);
112
+ }
113
+
114
+ :global(.hyvui-depth-scene-foreground) {
115
+ position: absolute;
116
+ inset: var(--space-lg, 1.5rem);
117
+ pointer-events: none;
118
+ display: flex;
119
+ flex-direction: column;
120
+ justify-content: flex-end;
121
+ }
122
+
123
+ @media (prefers-reduced-motion: reduce) {
124
+ .hyvui-depth-scene {
125
+ overflow: visible;
126
+ }
127
+ }
128
+ </style>
@@ -0,0 +1,36 @@
1
+ import type { PerspectivePreset } from '../../system/depth/depth.js';
2
+ import type { Snippet } from 'svelte';
3
+ /**
4
+ * @remarks Full-page scene where depth is the primary design language.
5
+ * Unlike StageScene (flat, centered), DepthScene is spatial from edge to edge.
6
+ * @example
7
+ * <DepthScene perspective="far">
8
+ * {#snippet ambient()}<GridOverlay /><Vignette />{/snippet}
9
+ * {#snippet ground()}<HorizonGrid animated rows={20} />{/snippet}
10
+ * {#snippet stage()}
11
+ * <FloatCard tiltMax={5}>
12
+ * <Text expression="title-card" as="h1">deep signal</Text>
13
+ * </FloatCard>
14
+ * {/snippet}
15
+ * {#snippet foreground()}
16
+ * <Label color="muted">system / v4</Label>
17
+ * {/snippet}
18
+ * </DepthScene>
19
+ */
20
+ interface Props {
21
+ /** Perspective depth preset. */
22
+ perspective?: PerspectivePreset;
23
+ /** Background decorations: GridOverlay, ScanBand, Vignette. */
24
+ ambient?: Snippet;
25
+ /** Ground plane — HorizonGrid belongs here. */
26
+ ground?: Snippet;
27
+ /** Main content at mid-depth. */
28
+ stage?: Snippet;
29
+ /** Foreground labels and overlays closest to viewer. Pointer-events none. */
30
+ foreground?: Snippet;
31
+ /** Additional CSS classes. */
32
+ class?: string;
33
+ }
34
+ declare const DepthScene: import("svelte").Component<Props, {}, "">;
35
+ type DepthScene = ReturnType<typeof DepthScene>;
36
+ export default DepthScene;
@@ -4,6 +4,20 @@
4
4
  import GridOverlay from '../ambient/GridOverlay.svelte';
5
5
  import type { Snippet } from 'svelte';
6
6
 
7
+ /**
8
+ * @remarks Use for process output, system boot sequences, build logs. Full-width terminal layout.
9
+ * @example
10
+ * <LogScene>
11
+ * {#snippet header()}
12
+ * <Label color="signal">deployment log</Label>
13
+ * <StatusDot status="pend" />
14
+ * {/snippet}
15
+ * <TerminalBoot lines={bootLines} oncomplete={() => deployed = true} />
16
+ * {#snippet footer()}
17
+ * {#if deployed}<Button variant="primary">view deployment</Button>{/if}
18
+ * {/snippet}
19
+ * </LogScene>
20
+ */
7
21
  interface Props {
8
22
  /** Additional CSS classes. */
9
23
  class?: string;
@@ -1,4 +1,18 @@
1
1
  import type { Snippet } from 'svelte';
2
+ /**
3
+ * @remarks Use for process output, system boot sequences, build logs. Full-width terminal layout.
4
+ * @example
5
+ * <LogScene>
6
+ * {#snippet header()}
7
+ * <Label color="signal">deployment log</Label>
8
+ * <StatusDot status="pend" />
9
+ * {/snippet}
10
+ * <TerminalBoot lines={bootLines} oncomplete={() => deployed = true} />
11
+ * {#snippet footer()}
12
+ * {#if deployed}<Button variant="primary">view deployment</Button>{/if}
13
+ * {/snippet}
14
+ * </LogScene>
15
+ */
2
16
  interface Props {
3
17
  /** Additional CSS classes. */
4
18
  class?: string;
@@ -3,6 +3,15 @@
3
3
  import GridOverlay from '../ambient/GridOverlay.svelte';
4
4
  import type { Snippet } from 'svelte';
5
5
 
6
+ /**
7
+ * @remarks Use for about pages, portfolio storytelling, feature narratives. Asymmetric: copy left, canvas right.
8
+ * @example
9
+ * <NarrativeScene chapter="our story">
10
+ * {#snippet heading()}<Text variant="heading" as="h2">the long signal</Text>{/snippet}
11
+ * {#snippet copy()}<Text>prose content describing the narrative here.</Text>{/snippet}
12
+ * {#snippet canvas()}<FloatCard><img src="/feature.jpg" alt="" /></FloatCard>{/snippet}
13
+ * </NarrativeScene>
14
+ */
6
15
  interface Props {
7
16
  /** Section label rendered as a chapter expression above the heading. */
8
17
  chapter?: string;
@@ -1,4 +1,13 @@
1
1
  import type { Snippet } from 'svelte';
2
+ /**
3
+ * @remarks Use for about pages, portfolio storytelling, feature narratives. Asymmetric: copy left, canvas right.
4
+ * @example
5
+ * <NarrativeScene chapter="our story">
6
+ * {#snippet heading()}<Text variant="heading" as="h2">the long signal</Text>{/snippet}
7
+ * {#snippet copy()}<Text>prose content describing the narrative here.</Text>{/snippet}
8
+ * {#snippet canvas()}<FloatCard><img src="/feature.jpg" alt="" /></FloatCard>{/snippet}
9
+ * </NarrativeScene>
10
+ */
2
11
  interface Props {
3
12
  /** Section label rendered as a chapter expression above the heading. */
4
13
  chapter?: string;
@@ -3,6 +3,17 @@
3
3
  import ScanBand from '../ambient/ScanBand.svelte';
4
4
  import type { Snippet } from 'svelte';
5
5
 
6
+ /**
7
+ * @remarks Use for dashboards, data views, log monitors. Dense, mono-forward with optional right sidebar.
8
+ * @example
9
+ * <ReadoutScene title="mission control">
10
+ * {#snippet header()}<StatusDot status="ok" /><Label>all systems nominal</Label>{/snippet}
11
+ * <Grid minColWidth="14rem" maxCols={4}>
12
+ * <MetricCard label="uptime" value="99.9%" />
13
+ * </Grid>
14
+ * {#snippet sidebar()}<SidebarNav items={navItems} />{/snippet}
15
+ * </ReadoutScene>
16
+ */
6
17
  interface Props {
7
18
  /** Optional title rendered as a readout expression label. */
8
19
  title?: string;
@@ -1,4 +1,15 @@
1
1
  import type { Snippet } from 'svelte';
2
+ /**
3
+ * @remarks Use for dashboards, data views, log monitors. Dense, mono-forward with optional right sidebar.
4
+ * @example
5
+ * <ReadoutScene title="mission control">
6
+ * {#snippet header()}<StatusDot status="ok" /><Label>all systems nominal</Label>{/snippet}
7
+ * <Grid minColWidth="14rem" maxCols={4}>
8
+ * <MetricCard label="uptime" value="99.9%" />
9
+ * </Grid>
10
+ * {#snippet sidebar()}<SidebarNav items={navItems} />{/snippet}
11
+ * </ReadoutScene>
12
+ */
2
13
  interface Props {
3
14
  /** Optional title rendered as a readout expression label. */
4
15
  title?: string;