@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,191 @@
1
+ <!--
2
+ EXAMPLE: Signal Lost
3
+ REGISTER: field-notebook
4
+ CONCEPT: a 404 page that feels like arriving at coordinates where something used to be
5
+ DEMONSTRATES: FloatCard, HorizonGrid, TerminalBoot, StatusDot, CornerBrackets, SignalRing, Text expressions, surface action, depth system
6
+ INSPIRED BY: the last transmission log of a deep-space relay station
7
+ -->
8
+ <script lang="ts">
9
+ import {
10
+ Text,
11
+ Label,
12
+ Button,
13
+ StatusDot,
14
+ CornerBrackets,
15
+ TerminalBoot,
16
+ FloatCard,
17
+ HorizonGrid,
18
+ DepthStage,
19
+ DepthLayer,
20
+ SignalRing,
21
+ GlyphMark,
22
+ surface,
23
+ applyRegister,
24
+ } from '../index.js';
25
+ import { onMount } from 'svelte';
26
+
27
+ let bootComplete = $state(false);
28
+
29
+ const bootLines: { status: 'ok' | 'pend' | 'warn' | 'fail'; message: string }[] = [
30
+ { status: 'ok', message: 'local systems nominal' },
31
+ { status: 'ok', message: 'navigation subsystem online' },
32
+ { status: 'ok', message: 'scanning frequency range' },
33
+ { status: 'pend', message: 'attempting signal acquisition' },
34
+ { status: 'warn', message: 'no response on primary band' },
35
+ { status: 'warn', message: 'sweeping secondary frequencies' },
36
+ { status: 'fail', message: 'target signal not found at these coordinates' },
37
+ ];
38
+
39
+ onMount(() => {
40
+ applyRegister('field-notebook');
41
+ return () => {
42
+ document.body.removeAttribute('data-register');
43
+ };
44
+ });
45
+ </script>
46
+
47
+ <div class="signal-lost">
48
+ <div class="signal-lost-bg">
49
+ <HorizonGrid animated rows={20} cols={14} vanishY={0.32} />
50
+ </div>
51
+
52
+ <div class="signal-lost-ring" aria-hidden="true">
53
+ <SignalRing active size={400} />
54
+ </div>
55
+
56
+ <DepthStage perspective="mid" class="signal-lost-stage">
57
+ <DepthLayer level="ground" class="signal-lost-terminal">
58
+ <div class="signal-lost-terminal-inner" use:surface={{ delay: 800 }}>
59
+ <TerminalBoot
60
+ lines={bootLines}
61
+ delay={1200}
62
+ interval={900}
63
+ oncomplete={() => (bootComplete = true)}
64
+ />
65
+ </div>
66
+ </DepthLayer>
67
+
68
+ <DepthLayer level="raised" class="signal-lost-center">
69
+ <FloatCard tiltMax={6} class="signal-lost-card">
70
+ <div class="signal-lost-content" style:position="relative">
71
+ <CornerBrackets size={28} color="rgba(199, 156, 87, 0.2)" />
72
+
73
+ <div class="signal-lost-status" use:surface={{ delay: 200 }}>
74
+ <StatusDot status="fail" size={8} pulse />
75
+ <Label color="muted">transmission ended</Label>
76
+ </div>
77
+
78
+ <div use:surface={{ delay: 400 }}>
79
+ <Text variant="heading" expression="title-card" as="h1" color="primary">
80
+ the coordinates are empty now
81
+ </Text>
82
+ </div>
83
+
84
+ <div use:surface={{ delay: 600 }}>
85
+ <Text expression="manifesto">
86
+ something was broadcasting from here. the frequency is right,
87
+ the heading is right. but the source has gone quiet.
88
+ </Text>
89
+ </div>
90
+
91
+ <div class="signal-lost-meta" use:surface={{ delay: 700 }}>
92
+ <GlyphMark variant="coord" size={16} color="var(--muted-strong)" />
93
+ <Label color="muted">bearing 047.2 | range unknown | last contact 7h ago</Label>
94
+ </div>
95
+
96
+ <div class="signal-lost-action" use:surface={{ delay: 900 }}>
97
+ <Button variant="ghost" onclick={() => window.history.back()}>
98
+ return to last known position
99
+ </Button>
100
+ </div>
101
+ </div>
102
+ </FloatCard>
103
+ </DepthLayer>
104
+ </DepthStage>
105
+ </div>
106
+
107
+ <style>
108
+ .signal-lost {
109
+ position: relative;
110
+ min-height: 100dvh;
111
+ background-color: var(--bg);
112
+ display: flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ overflow: hidden;
116
+ }
117
+
118
+ .signal-lost-bg {
119
+ position: absolute;
120
+ inset: 0;
121
+ opacity: 0.5;
122
+ pointer-events: none;
123
+ }
124
+
125
+ .signal-lost-ring {
126
+ position: absolute;
127
+ top: 50%;
128
+ left: 50%;
129
+ transform: translate(-50%, -50%);
130
+ opacity: 0.3;
131
+ pointer-events: none;
132
+ }
133
+
134
+ :global(.signal-lost-stage) {
135
+ position: relative;
136
+ z-index: 1;
137
+ display: flex;
138
+ flex-direction: column;
139
+ align-items: center;
140
+ gap: 2rem;
141
+ padding: var(--space-scene);
142
+ width: 100%;
143
+ max-width: 52rem;
144
+ }
145
+
146
+ :global(.signal-lost-center) {
147
+ width: 100%;
148
+ display: flex;
149
+ justify-content: center;
150
+ }
151
+
152
+ :global(.signal-lost-card) {
153
+ max-width: 36rem;
154
+ width: 100%;
155
+ }
156
+
157
+ .signal-lost-content {
158
+ display: flex;
159
+ flex-direction: column;
160
+ gap: 1.5rem;
161
+ padding: 1rem;
162
+ }
163
+
164
+ .signal-lost-status {
165
+ display: flex;
166
+ align-items: center;
167
+ gap: 0.625rem;
168
+ }
169
+
170
+ .signal-lost-meta {
171
+ display: flex;
172
+ align-items: center;
173
+ gap: 0.5rem;
174
+ }
175
+
176
+ .signal-lost-action {
177
+ margin-top: 0.5rem;
178
+ }
179
+
180
+ :global(.signal-lost-terminal) {
181
+ width: 100%;
182
+ max-width: 36rem;
183
+ align-self: center;
184
+ }
185
+
186
+ .signal-lost-terminal-inner {
187
+ padding: 1rem 0;
188
+ border-left: 2px solid rgba(121, 166, 163, 0.14);
189
+ padding-left: 1.25rem;
190
+ }
191
+ </style>
@@ -0,0 +1,3 @@
1
+ declare const SignalLost: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type SignalLost = ReturnType<typeof SignalLost>;
3
+ export default SignalLost;
@@ -0,0 +1,73 @@
1
+ export { default as Text } from './components/primitives/Text.svelte';
2
+ export { default as Label } from './components/primitives/Label.svelte';
3
+ export { default as Icon } from './components/primitives/Icon.svelte';
4
+ export { default as Divider } from './components/primitives/Divider.svelte';
5
+ export { default as Surface } from './components/primitives/Surface.svelte';
6
+ export { default as Button } from './components/inputs/Button.svelte';
7
+ export { default as Input } from './components/inputs/Input.svelte';
8
+ export { default as Textarea } from './components/inputs/Textarea.svelte';
9
+ export { default as Select } from './components/inputs/Select.svelte';
10
+ export { default as Checkbox } from './components/inputs/Checkbox.svelte';
11
+ export { default as Toggle } from './components/inputs/Toggle.svelte';
12
+ export { default as FileUpload } from './components/inputs/FileUpload.svelte';
13
+ export { default as Toast } from './components/feedback/Toast.svelte';
14
+ export { toastStore } from './components/feedback/Toast.svelte';
15
+ export { default as Alert } from './components/feedback/Alert.svelte';
16
+ export { default as Skeleton } from './components/feedback/Skeleton.svelte';
17
+ export { default as StatusDot } from './components/feedback/StatusDot.svelte';
18
+ export { default as StatusLine } from './components/feedback/StatusLine.svelte';
19
+ export { default as EmptyState } from './components/feedback/EmptyState.svelte';
20
+ export { default as ErrorState } from './components/feedback/ErrorState.svelte';
21
+ export { default as Stack } from './components/layout/Stack.svelte';
22
+ export { default as Grid } from './components/layout/Grid.svelte';
23
+ export { default as Card } from './components/layout/Card.svelte';
24
+ export { default as Panel } from './components/layout/Panel.svelte';
25
+ export { default as Modal } from './components/layout/Modal.svelte';
26
+ export { default as Drawer } from './components/layout/Drawer.svelte';
27
+ export { default as Popover } from './components/layout/Popover.svelte';
28
+ export { default as Topbar } from './components/navigation/Topbar.svelte';
29
+ export { default as SidebarNav } from './components/navigation/SidebarNav.svelte';
30
+ export { default as Tabs } from './components/navigation/Tabs.svelte';
31
+ export { default as Breadcrumb } from './components/navigation/Breadcrumb.svelte';
32
+ export { default as DropdownMenu } from './components/navigation/DropdownMenu.svelte';
33
+ export { default as Badge } from './components/display/Badge.svelte';
34
+ export { default as Avatar } from './components/display/Avatar.svelte';
35
+ export { default as Table } from './components/display/Table.svelte';
36
+ export { default as CodeBlock } from './components/display/CodeBlock.svelte';
37
+ export { default as MetricCard } from './components/display/MetricCard.svelte';
38
+ export { default as Blockquote } from './components/display/Blockquote.svelte';
39
+ export { default as GridOverlay } from './components/ambient/GridOverlay.svelte';
40
+ export { default as CornerBrackets } from './components/ambient/CornerBrackets.svelte';
41
+ export { default as ScanBand } from './components/ambient/ScanBand.svelte';
42
+ export { default as Vignette } from './components/ambient/Vignette.svelte';
43
+ export { default as ParallaxLayer } from './components/ambient/ParallaxLayer.svelte';
44
+ export { default as PageHeader } from './components/patterns/PageHeader.svelte';
45
+ export { default as ConfirmDialog } from './components/patterns/ConfirmDialog.svelte';
46
+ export { default as SearchBar } from './components/patterns/SearchBar.svelte';
47
+ export { default as TerminalBoot } from './components/patterns/TerminalBoot.svelte';
48
+ export { default as ActionBar } from './components/patterns/ActionBar.svelte';
49
+ export { tokens } from './tokens/tokens.js';
50
+ export { applyRegister, clearRegister, registers } from './system/register.js';
51
+ export type { Register } from './system/register.js';
52
+ export type { Expression } from './components/primitives/text.js';
53
+ export { surface } from './system/actions/surface.js';
54
+ export { echo } from './system/actions/echo.js';
55
+ export { reveal } from './system/actions/reveal.js';
56
+ export { resolve } from './system/actions/resolve.js';
57
+ export type { ResolveStatus } from './system/actions/resolve.js';
58
+ export { default as DepthStage } from './components/depth/DepthStage.svelte';
59
+ export { default as FloatCard } from './components/depth/FloatCard.svelte';
60
+ export { default as HorizonGrid } from './components/depth/HorizonGrid.svelte';
61
+ export { default as DepthLayer } from './components/depth/DepthLayer.svelte';
62
+ export { default as Plinth } from './components/depth/Plinth.svelte';
63
+ export { tiltTransform, depthZ } from './system/depth/depth.js';
64
+ export type { DepthLevel, PerspectivePreset } from './system/depth/depth.js';
65
+ export { default as SignalRing } from './components/ambient/SignalRing.svelte';
66
+ export { default as GlyphMark } from './components/ambient/GlyphMark.svelte';
67
+ export { default as DataStream } from './components/ambient/DataStream.svelte';
68
+ export { default as ThreadLine } from './components/ambient/ThreadLine.svelte';
69
+ export { default as NarrativeScene } from './components/scenes/NarrativeScene.svelte';
70
+ export { default as ReadoutScene } from './components/scenes/ReadoutScene.svelte';
71
+ export { default as StageScene } from './components/scenes/StageScene.svelte';
72
+ export { default as ArchiveScene } from './components/scenes/ArchiveScene.svelte';
73
+ export { default as LogScene } from './components/scenes/LogScene.svelte';
package/dist/index.js ADDED
@@ -0,0 +1,83 @@
1
+ // primitives
2
+ export { default as Text } from './components/primitives/Text.svelte';
3
+ export { default as Label } from './components/primitives/Label.svelte';
4
+ export { default as Icon } from './components/primitives/Icon.svelte';
5
+ export { default as Divider } from './components/primitives/Divider.svelte';
6
+ export { default as Surface } from './components/primitives/Surface.svelte';
7
+ // inputs
8
+ export { default as Button } from './components/inputs/Button.svelte';
9
+ export { default as Input } from './components/inputs/Input.svelte';
10
+ export { default as Textarea } from './components/inputs/Textarea.svelte';
11
+ export { default as Select } from './components/inputs/Select.svelte';
12
+ export { default as Checkbox } from './components/inputs/Checkbox.svelte';
13
+ export { default as Toggle } from './components/inputs/Toggle.svelte';
14
+ export { default as FileUpload } from './components/inputs/FileUpload.svelte';
15
+ // feedback
16
+ export { default as Toast } from './components/feedback/Toast.svelte';
17
+ export { toastStore } from './components/feedback/Toast.svelte';
18
+ export { default as Alert } from './components/feedback/Alert.svelte';
19
+ export { default as Skeleton } from './components/feedback/Skeleton.svelte';
20
+ export { default as StatusDot } from './components/feedback/StatusDot.svelte';
21
+ export { default as StatusLine } from './components/feedback/StatusLine.svelte';
22
+ export { default as EmptyState } from './components/feedback/EmptyState.svelte';
23
+ export { default as ErrorState } from './components/feedback/ErrorState.svelte';
24
+ // layout
25
+ export { default as Stack } from './components/layout/Stack.svelte';
26
+ export { default as Grid } from './components/layout/Grid.svelte';
27
+ export { default as Card } from './components/layout/Card.svelte';
28
+ export { default as Panel } from './components/layout/Panel.svelte';
29
+ export { default as Modal } from './components/layout/Modal.svelte';
30
+ export { default as Drawer } from './components/layout/Drawer.svelte';
31
+ export { default as Popover } from './components/layout/Popover.svelte';
32
+ // navigation
33
+ export { default as Topbar } from './components/navigation/Topbar.svelte';
34
+ export { default as SidebarNav } from './components/navigation/SidebarNav.svelte';
35
+ export { default as Tabs } from './components/navigation/Tabs.svelte';
36
+ export { default as Breadcrumb } from './components/navigation/Breadcrumb.svelte';
37
+ export { default as DropdownMenu } from './components/navigation/DropdownMenu.svelte';
38
+ // display
39
+ export { default as Badge } from './components/display/Badge.svelte';
40
+ export { default as Avatar } from './components/display/Avatar.svelte';
41
+ export { default as Table } from './components/display/Table.svelte';
42
+ export { default as CodeBlock } from './components/display/CodeBlock.svelte';
43
+ export { default as MetricCard } from './components/display/MetricCard.svelte';
44
+ export { default as Blockquote } from './components/display/Blockquote.svelte';
45
+ // ambient
46
+ export { default as GridOverlay } from './components/ambient/GridOverlay.svelte';
47
+ export { default as CornerBrackets } from './components/ambient/CornerBrackets.svelte';
48
+ export { default as ScanBand } from './components/ambient/ScanBand.svelte';
49
+ export { default as Vignette } from './components/ambient/Vignette.svelte';
50
+ export { default as ParallaxLayer } from './components/ambient/ParallaxLayer.svelte';
51
+ // patterns
52
+ export { default as PageHeader } from './components/patterns/PageHeader.svelte';
53
+ export { default as ConfirmDialog } from './components/patterns/ConfirmDialog.svelte';
54
+ export { default as SearchBar } from './components/patterns/SearchBar.svelte';
55
+ export { default as TerminalBoot } from './components/patterns/TerminalBoot.svelte';
56
+ export { default as ActionBar } from './components/patterns/ActionBar.svelte';
57
+ // tokens
58
+ export { tokens } from './tokens/tokens.js';
59
+ // system — register
60
+ export { applyRegister, clearRegister, registers } from './system/register.js';
61
+ // system — actions
62
+ export { surface } from './system/actions/surface.js';
63
+ export { echo } from './system/actions/echo.js';
64
+ export { reveal } from './system/actions/reveal.js';
65
+ export { resolve } from './system/actions/resolve.js';
66
+ // depth system
67
+ export { default as DepthStage } from './components/depth/DepthStage.svelte';
68
+ export { default as FloatCard } from './components/depth/FloatCard.svelte';
69
+ export { default as HorizonGrid } from './components/depth/HorizonGrid.svelte';
70
+ export { default as DepthLayer } from './components/depth/DepthLayer.svelte';
71
+ export { default as Plinth } from './components/depth/Plinth.svelte';
72
+ export { tiltTransform, depthZ } from './system/depth/depth.js';
73
+ // new ambient ornaments
74
+ export { default as SignalRing } from './components/ambient/SignalRing.svelte';
75
+ export { default as GlyphMark } from './components/ambient/GlyphMark.svelte';
76
+ export { default as DataStream } from './components/ambient/DataStream.svelte';
77
+ export { default as ThreadLine } from './components/ambient/ThreadLine.svelte';
78
+ // scenes
79
+ export { default as NarrativeScene } from './components/scenes/NarrativeScene.svelte';
80
+ export { default as ReadoutScene } from './components/scenes/ReadoutScene.svelte';
81
+ export { default as StageScene } from './components/scenes/StageScene.svelte';
82
+ export { default as ArchiveScene } from './components/scenes/ArchiveScene.svelte';
83
+ export { default as LogScene } from './components/scenes/LogScene.svelte';
@@ -0,0 +1,10 @@
1
+ import type { ActionReturn } from 'svelte/action';
2
+ /**
3
+ * Adds a gold radial pulse on click. Signals action receipt.
4
+ * Does not interfere with the element's existing styles.
5
+ * Respects prefers-reduced-motion.
6
+ *
7
+ * @example
8
+ * <button use:echo>confirm</button>
9
+ */
10
+ export declare function echo(node: HTMLElement): ActionReturn;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Adds a gold radial pulse on click. Signals action receipt.
3
+ * Does not interfere with the element's existing styles.
4
+ * Respects prefers-reduced-motion.
5
+ *
6
+ * @example
7
+ * <button use:echo>confirm</button>
8
+ */
9
+ export function echo(node) {
10
+ const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
11
+ function handleClick(e) {
12
+ if (prefersReduced)
13
+ return;
14
+ const rect = node.getBoundingClientRect();
15
+ const x = ((e.clientX - rect.left) / rect.width) * 100;
16
+ const y = ((e.clientY - rect.top) / rect.height) * 100;
17
+ const overlay = document.createElement('span');
18
+ overlay.style.cssText = `
19
+ position: absolute;
20
+ inset: 0;
21
+ border-radius: inherit;
22
+ pointer-events: none;
23
+ background: radial-gradient(circle at ${x}% ${y}%, rgba(199, 156, 87, 0.22), transparent 70%);
24
+ opacity: 0;
25
+ transition: opacity 0.15s ease-out;
26
+ `;
27
+ const position = getComputedStyle(node).position;
28
+ if (position === 'static')
29
+ node.style.position = 'relative';
30
+ node.style.overflow = 'hidden';
31
+ node.appendChild(overlay);
32
+ requestAnimationFrame(() => {
33
+ overlay.style.opacity = '1';
34
+ setTimeout(() => {
35
+ overlay.style.opacity = '0';
36
+ setTimeout(() => overlay.remove(), 200);
37
+ }, 200);
38
+ });
39
+ }
40
+ node.addEventListener('click', handleClick);
41
+ return {
42
+ destroy() {
43
+ node.removeEventListener('click', handleClick);
44
+ },
45
+ };
46
+ }
@@ -0,0 +1,23 @@
1
+ import type { ActionReturn } from 'svelte/action';
2
+ export type ResolveStatus = 'ok' | 'warn' | 'fail' | 'pend';
3
+ export interface ResolveAction {
4
+ /** Trigger the status flash animation. */
5
+ trigger: (status: ResolveStatus) => void;
6
+ }
7
+ /**
8
+ * Animates a status change on an element. A brief overlay flash in the
9
+ * status color signals the transition, then fades out.
10
+ * Dispatches custom DOM events `resolve:start` and `resolve:end`.
11
+ * Respects prefers-reduced-motion.
12
+ *
13
+ * @example
14
+ * <script>
15
+ * let resolveAction;
16
+ * async function submit() {
17
+ * const ok = await doSubmit();
18
+ * resolveAction.trigger(ok ? 'ok' : 'fail');
19
+ * }
20
+ * </script>
21
+ * <form use:resolve={a => resolveAction = a}>...</form>
22
+ */
23
+ export declare function resolve(node: HTMLElement, register: (action: ResolveAction) => void): ActionReturn;
@@ -0,0 +1,59 @@
1
+ const statusColors = {
2
+ ok: 'var(--status-ok)',
3
+ warn: 'var(--status-warn)',
4
+ fail: 'var(--status-fail)',
5
+ pend: 'var(--status-pend)',
6
+ };
7
+ /**
8
+ * Animates a status change on an element. A brief overlay flash in the
9
+ * status color signals the transition, then fades out.
10
+ * Dispatches custom DOM events `resolve:start` and `resolve:end`.
11
+ * Respects prefers-reduced-motion.
12
+ *
13
+ * @example
14
+ * <script>
15
+ * let resolveAction;
16
+ * async function submit() {
17
+ * const ok = await doSubmit();
18
+ * resolveAction.trigger(ok ? 'ok' : 'fail');
19
+ * }
20
+ * </script>
21
+ * <form use:resolve={a => resolveAction = a}>...</form>
22
+ */
23
+ export function resolve(node, register) {
24
+ const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
25
+ const position = getComputedStyle(node).position;
26
+ if (position === 'static')
27
+ node.style.position = 'relative';
28
+ function trigger(status) {
29
+ node.dispatchEvent(new CustomEvent('resolve:start', { detail: status }));
30
+ if (prefersReduced) {
31
+ node.dispatchEvent(new CustomEvent('resolve:end', { detail: status }));
32
+ return;
33
+ }
34
+ const overlay = document.createElement('span');
35
+ overlay.style.cssText = `
36
+ position: absolute;
37
+ inset: 0;
38
+ pointer-events: none;
39
+ background: ${statusColors[status]};
40
+ opacity: 0;
41
+ border-radius: inherit;
42
+ transition: opacity 0.12s ease-out;
43
+ `;
44
+ node.appendChild(overlay);
45
+ requestAnimationFrame(() => {
46
+ overlay.style.opacity = '0.12';
47
+ setTimeout(() => {
48
+ overlay.style.transition = 'opacity 0.4s ease-out';
49
+ overlay.style.opacity = '0';
50
+ setTimeout(() => {
51
+ overlay.remove();
52
+ node.dispatchEvent(new CustomEvent('resolve:end', { detail: status }));
53
+ }, 450);
54
+ }, 200);
55
+ });
56
+ }
57
+ register({ trigger });
58
+ return {};
59
+ }
@@ -0,0 +1,18 @@
1
+ import type { ActionReturn } from 'svelte/action';
2
+ interface RevealOptions {
3
+ /** CSS selector for the child element to reveal on hover. */
4
+ target: string;
5
+ }
6
+ /**
7
+ * Reveals a child element when the node is hovered.
8
+ * The target child starts invisible and transitions in on hover.
9
+ * Respects prefers-reduced-motion (instant show/hide, no transition).
10
+ *
11
+ * @example
12
+ * <div use:reveal={{ target: '.meta' }}>
13
+ * <span>main content</span>
14
+ * <span class="meta">revealed on hover</span>
15
+ * </div>
16
+ */
17
+ export declare function reveal(node: HTMLElement, options: RevealOptions): ActionReturn<RevealOptions>;
18
+ export {};
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Reveals a child element when the node is hovered.
3
+ * The target child starts invisible and transitions in on hover.
4
+ * Respects prefers-reduced-motion (instant show/hide, no transition).
5
+ *
6
+ * @example
7
+ * <div use:reveal={{ target: '.meta' }}>
8
+ * <span>main content</span>
9
+ * <span class="meta">revealed on hover</span>
10
+ * </div>
11
+ */
12
+ export function reveal(node, options) {
13
+ const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
14
+ function getTarget() {
15
+ return node.querySelector(options.target);
16
+ }
17
+ function init() {
18
+ const target = getTarget();
19
+ if (!target)
20
+ return;
21
+ target.style.opacity = '0';
22
+ target.style.transform = prefersReduced ? 'none' : 'translateY(4px)';
23
+ if (!prefersReduced) {
24
+ target.style.transition = 'opacity 0.25s ease-out, transform 0.25s ease-out';
25
+ }
26
+ }
27
+ function show() {
28
+ const target = getTarget();
29
+ if (!target)
30
+ return;
31
+ target.style.opacity = '1';
32
+ target.style.transform = 'translateY(0)';
33
+ }
34
+ function hide() {
35
+ const target = getTarget();
36
+ if (!target)
37
+ return;
38
+ target.style.opacity = '0';
39
+ target.style.transform = prefersReduced ? 'none' : 'translateY(4px)';
40
+ }
41
+ init();
42
+ node.addEventListener('mouseenter', show);
43
+ node.addEventListener('mouseleave', hide);
44
+ node.addEventListener('focusin', show);
45
+ node.addEventListener('focusout', hide);
46
+ return {
47
+ destroy() {
48
+ node.removeEventListener('mouseenter', show);
49
+ node.removeEventListener('mouseleave', hide);
50
+ node.removeEventListener('focusin', show);
51
+ node.removeEventListener('focusout', hide);
52
+ },
53
+ };
54
+ }
@@ -0,0 +1,14 @@
1
+ import type { ActionReturn } from 'svelte/action';
2
+ interface SurfaceOptions {
3
+ /** Delay in ms before the entrance animation starts. */
4
+ delay?: number;
5
+ }
6
+ /**
7
+ * Plays the standard hyvui entrance: translateY(6px) -> 0, opacity 0 -> 1.
8
+ * Respects prefers-reduced-motion.
9
+ *
10
+ * @example
11
+ * <div use:surface={{ delay: 200 }}>content</div>
12
+ */
13
+ export declare function surface(node: HTMLElement, options?: SurfaceOptions): ActionReturn<SurfaceOptions>;
14
+ export {};
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Plays the standard hyvui entrance: translateY(6px) -> 0, opacity 0 -> 1.
3
+ * Respects prefers-reduced-motion.
4
+ *
5
+ * @example
6
+ * <div use:surface={{ delay: 200 }}>content</div>
7
+ */
8
+ export function surface(node, options = {}) {
9
+ const { delay = 0 } = options;
10
+ const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
11
+ if (prefersReduced)
12
+ return {};
13
+ node.style.opacity = '0';
14
+ node.style.transform = 'translateY(6px)';
15
+ node.style.transition = `opacity 0.5s ease-out ${delay}ms, transform 0.5s ease-out ${delay}ms`;
16
+ const frame = requestAnimationFrame(() => {
17
+ node.style.opacity = '1';
18
+ node.style.transform = 'translateY(0)';
19
+ });
20
+ return {
21
+ destroy() {
22
+ cancelAnimationFrame(frame);
23
+ },
24
+ };
25
+ }
@@ -0,0 +1,49 @@
1
+ /* ── perspective tokens ──────────────────────────────────────────────── */
2
+ :root {
3
+ --perspective-near: 600px;
4
+ --perspective-mid: 1000px;
5
+ --perspective-far: 1800px;
6
+
7
+ --depth-ground: 0px;
8
+ --depth-raised: 60px;
9
+ --depth-foreground: 140px;
10
+
11
+ --depth-tilt-max: 8deg;
12
+ --depth-tilt-subtle: 3deg;
13
+
14
+ --depth-transition: 0.4s cubic-bezier(0.22, 1, 0.36, 1);
15
+ }
16
+
17
+ /* ── perspective container ───────────────────────────────────────────── */
18
+ .depth-stage {
19
+ perspective: var(--perspective-mid);
20
+ perspective-origin: 50% 40%;
21
+ transform-style: preserve-3d;
22
+ }
23
+
24
+ /* ── depth level utilities ───────────────────────────────────────────── */
25
+ .depth-ground {
26
+ transform: translateZ(var(--depth-ground));
27
+ }
28
+
29
+ .depth-raised {
30
+ transform: translateZ(var(--depth-raised));
31
+ }
32
+
33
+ .depth-foreground {
34
+ transform: translateZ(var(--depth-foreground));
35
+ }
36
+
37
+ /* ── reduced motion override ─────────────────────────────────────────── */
38
+ @media (prefers-reduced-motion: reduce) {
39
+ .depth-ground,
40
+ .depth-raised,
41
+ .depth-foreground {
42
+ transform: none;
43
+ }
44
+
45
+ .depth-stage {
46
+ perspective: none;
47
+ transform-style: flat;
48
+ }
49
+ }