@hyvnt/hyvui 0.2.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.
- package/README.md +294 -253
- package/dist/components/ambient/ArcaneVein.svelte +151 -0
- package/dist/components/ambient/ArcaneVein.svelte.d.ts +31 -0
- package/dist/components/ambient/BrassFiligree.svelte +109 -0
- package/dist/components/ambient/BrassFiligree.svelte.d.ts +20 -0
- package/dist/components/ambient/CornerBrackets.svelte +91 -87
- package/dist/components/ambient/CornerBrackets.svelte.d.ts +8 -0
- package/dist/components/ambient/CrystalShard.svelte +151 -0
- package/dist/components/ambient/CrystalShard.svelte.d.ts +19 -0
- package/dist/components/ambient/DataStream.svelte +117 -94
- package/dist/components/ambient/DataStream.svelte.d.ts +6 -0
- package/dist/components/ambient/EnergyArc.svelte +189 -0
- package/dist/components/ambient/EnergyArc.svelte.d.ts +32 -0
- package/dist/components/ambient/GlyphMark.svelte +75 -69
- package/dist/components/ambient/GlyphMark.svelte.d.ts +6 -0
- package/dist/components/ambient/GridOverlay.svelte +34 -28
- package/dist/components/ambient/GridOverlay.svelte.d.ts +8 -0
- package/dist/components/ambient/HexGrid.svelte +119 -0
- package/dist/components/ambient/HexGrid.svelte.d.ts +21 -0
- package/dist/components/ambient/ParallaxLayer.svelte +45 -41
- package/dist/components/ambient/ParallaxLayer.svelte.d.ts +7 -0
- package/dist/components/ambient/ScanBand.svelte +103 -91
- package/dist/components/ambient/ScanBand.svelte.d.ts +8 -0
- package/dist/components/ambient/ShimmerCloud.svelte +180 -0
- package/dist/components/ambient/ShimmerCloud.svelte.d.ts +21 -0
- package/dist/components/ambient/SignalRing.svelte +106 -100
- package/dist/components/ambient/SignalRing.svelte.d.ts +6 -0
- package/dist/components/ambient/ThreadLine.svelte +78 -78
- package/dist/components/ambient/ThreadLine.svelte.d.ts +7 -0
- package/dist/components/ambient/Vignette.svelte +30 -26
- package/dist/components/ambient/Vignette.svelte.d.ts +6 -0
- package/dist/components/depth/DepthLayer.svelte +30 -27
- package/dist/components/depth/DepthLayer.svelte.d.ts +8 -0
- package/dist/components/depth/DepthStage.svelte +67 -62
- package/dist/components/depth/DepthStage.svelte.d.ts +8 -0
- package/dist/components/depth/FloatCard.svelte +129 -104
- package/dist/components/depth/FloatCard.svelte.d.ts +8 -0
- package/dist/components/depth/HorizonGrid.svelte +241 -160
- package/dist/components/depth/HorizonGrid.svelte.d.ts +9 -0
- package/dist/components/depth/Plinth.svelte +62 -57
- package/dist/components/depth/Plinth.svelte.d.ts +10 -0
- package/dist/components/display/Avatar.svelte +69 -69
- package/dist/components/display/Avatar.svelte.d.ts +5 -0
- package/dist/components/display/Badge.svelte +75 -63
- package/dist/components/display/Badge.svelte.d.ts +6 -0
- package/dist/components/display/Blockquote.svelte +35 -34
- package/dist/components/display/Blockquote.svelte.d.ts +4 -0
- package/dist/components/display/CodeBlock.svelte +76 -76
- package/dist/components/display/CodeBlock.svelte.d.ts +5 -0
- package/dist/components/display/MetricCard.svelte +100 -83
- package/dist/components/display/MetricCard.svelte.d.ts +6 -0
- package/dist/components/display/Table.svelte +106 -104
- package/dist/components/display/Table.svelte.d.ts +7 -0
- package/dist/components/feedback/Alert.svelte +95 -76
- package/dist/components/feedback/Alert.svelte.d.ts +6 -0
- package/dist/components/feedback/EmptyState.svelte +75 -68
- package/dist/components/feedback/EmptyState.svelte.d.ts +7 -0
- package/dist/components/feedback/ErrorState.svelte +78 -73
- package/dist/components/feedback/ErrorState.svelte.d.ts +5 -0
- package/dist/components/feedback/Skeleton.svelte +58 -52
- package/dist/components/feedback/Skeleton.svelte.d.ts +6 -0
- package/dist/components/feedback/StatusDot.svelte +84 -54
- package/dist/components/feedback/StatusDot.svelte.d.ts +6 -0
- package/dist/components/feedback/StatusLine.svelte +128 -122
- package/dist/components/feedback/StatusLine.svelte.d.ts +6 -0
- package/dist/components/feedback/Toast.svelte +144 -136
- package/dist/components/feedback/Toast.svelte.d.ts +10 -0
- package/dist/components/inputs/Button.svelte +310 -237
- package/dist/components/inputs/Button.svelte.d.ts +8 -0
- package/dist/components/inputs/Checkbox.svelte +109 -105
- package/dist/components/inputs/Checkbox.svelte.d.ts +5 -0
- package/dist/components/inputs/FileUpload.svelte +170 -163
- package/dist/components/inputs/FileUpload.svelte.d.ts +5 -0
- package/dist/components/inputs/Input.svelte +153 -147
- package/dist/components/inputs/Input.svelte.d.ts +7 -0
- package/dist/components/inputs/Select.svelte +164 -150
- package/dist/components/inputs/Select.svelte.d.ts +8 -0
- package/dist/components/inputs/Textarea.svelte +160 -154
- package/dist/components/inputs/Textarea.svelte.d.ts +6 -0
- package/dist/components/inputs/Toggle.svelte +125 -120
- package/dist/components/inputs/Toggle.svelte.d.ts +5 -0
- package/dist/components/layout/Card.svelte +81 -76
- package/dist/components/layout/Card.svelte.d.ts +11 -0
- package/dist/components/layout/Drawer.svelte +140 -109
- package/dist/components/layout/Drawer.svelte.d.ts +6 -0
- package/dist/components/layout/Grid.svelte +128 -43
- package/dist/components/layout/Grid.svelte.d.ts +18 -2
- package/dist/components/layout/Modal.svelte +191 -159
- package/dist/components/layout/Modal.svelte.d.ts +10 -0
- package/dist/components/layout/Panel.svelte +58 -54
- package/dist/components/layout/Panel.svelte.d.ts +9 -0
- package/dist/components/layout/Popover.svelte +188 -67
- package/dist/components/layout/Popover.svelte.d.ts +19 -1
- package/dist/components/layout/Stack.svelte +65 -53
- package/dist/components/layout/Stack.svelte.d.ts +12 -0
- package/dist/components/navigation/Breadcrumb.svelte +78 -73
- package/dist/components/navigation/Breadcrumb.svelte.d.ts +8 -0
- package/dist/components/navigation/DropdownMenu.svelte +179 -124
- package/dist/components/navigation/DropdownMenu.svelte.d.ts +24 -2
- package/dist/components/navigation/SidebarNav.svelte +96 -90
- package/dist/components/navigation/SidebarNav.svelte.d.ts +9 -0
- package/dist/components/navigation/Tabs.svelte +106 -86
- package/dist/components/navigation/Tabs.svelte.d.ts +8 -0
- package/dist/components/navigation/Topbar.svelte +94 -85
- package/dist/components/navigation/Topbar.svelte.d.ts +9 -0
- package/dist/components/patterns/ActionBar.svelte +82 -76
- package/dist/components/patterns/ActionBar.svelte.d.ts +10 -0
- package/dist/components/patterns/ChapterMark.svelte +152 -0
- package/dist/components/patterns/ChapterMark.svelte.d.ts +19 -0
- package/dist/components/patterns/ConfirmDialog.svelte +75 -64
- package/dist/components/patterns/ConfirmDialog.svelte.d.ts +12 -0
- package/dist/components/patterns/DepthPortal.svelte +123 -0
- package/dist/components/patterns/DepthPortal.svelte.d.ts +24 -0
- package/dist/components/patterns/Manifesto.svelte +171 -0
- package/dist/components/patterns/Manifesto.svelte.d.ts +25 -0
- package/dist/components/patterns/PageHeader.svelte +117 -114
- package/dist/components/patterns/PageHeader.svelte.d.ts +8 -0
- package/dist/components/patterns/PullQuote.svelte +145 -0
- package/dist/components/patterns/PullQuote.svelte.d.ts +23 -0
- package/dist/components/patterns/RegisterSwitcher.svelte +132 -0
- package/dist/components/patterns/RegisterSwitcher.svelte.d.ts +21 -0
- package/dist/components/patterns/SearchBar.svelte +59 -59
- package/dist/components/patterns/SearchBar.svelte.d.ts +5 -0
- package/dist/components/patterns/ShowcaseFrame.svelte +117 -0
- package/dist/components/patterns/ShowcaseFrame.svelte.d.ts +28 -0
- package/dist/components/patterns/TerminalBoot.svelte +118 -104
- package/dist/components/patterns/TerminalBoot.svelte.d.ts +12 -0
- package/dist/components/primitives/Divider.svelte +56 -29
- package/dist/components/primitives/Divider.svelte.d.ts +5 -0
- package/dist/components/primitives/Icon.svelte +53 -49
- package/dist/components/primitives/Icon.svelte.d.ts +9 -0
- package/dist/components/primitives/Label.svelte +45 -44
- package/dist/components/primitives/Label.svelte.d.ts +6 -0
- package/dist/components/primitives/Surface.svelte +154 -87
- package/dist/components/primitives/Surface.svelte.d.ts +7 -0
- package/dist/components/primitives/Text.svelte +130 -98
- package/dist/components/primitives/Text.svelte.d.ts +7 -0
- package/dist/components/scenes/ArchiveScene.svelte +102 -95
- package/dist/components/scenes/ArchiveScene.svelte.d.ts +17 -1
- package/dist/components/scenes/DepthScene.svelte +128 -0
- package/dist/components/scenes/DepthScene.svelte.d.ts +36 -0
- package/dist/components/scenes/LogScene.svelte +86 -77
- package/dist/components/scenes/LogScene.svelte.d.ts +14 -0
- package/dist/components/scenes/NarrativeScene.svelte +100 -92
- package/dist/components/scenes/NarrativeScene.svelte.d.ts +9 -0
- package/dist/components/scenes/ReadoutScene.svelte +131 -107
- package/dist/components/scenes/ReadoutScene.svelte.d.ts +14 -1
- package/dist/components/scenes/StageScene.svelte +111 -104
- package/dist/components/scenes/StageScene.svelte.d.ts +14 -0
- package/dist/components/system/AppShell.svelte +62 -0
- package/dist/components/system/AppShell.svelte.d.ts +32 -0
- package/dist/examples/ArcaneShard.svelte +364 -0
- package/dist/examples/ArcaneShard.svelte.d.ts +3 -0
- package/dist/examples/FieldReport.svelte +226 -223
- package/dist/examples/HextechForge.svelte +324 -0
- package/dist/examples/HextechForge.svelte.d.ts +3 -0
- package/dist/examples/ObservationDeck.svelte +333 -317
- package/dist/examples/SignalLost.svelte +191 -191
- package/dist/index.d.ts +15 -1
- package/dist/index.js +16 -1
- package/dist/styles.css +115 -0
- package/dist/system/actions/echo.js +21 -12
- package/dist/system/actions/resolve.js +28 -14
- package/dist/system/actions/reveal.js +2 -2
- package/dist/system/actions/surface.js +12 -2
- package/dist/system/depth/depth.css +49 -49
- package/dist/system/depth/depth.js +1 -1
- package/dist/system/expressions.css +80 -80
- package/dist/system/override-template.css +72 -72
- package/dist/system/register.css +74 -74
- package/dist/system/register.d.ts +1 -1
- package/dist/system/register.js +5 -1
- package/dist/system/scroll-lock.d.ts +6 -0
- package/dist/system/scroll-lock.js +23 -0
- package/dist/tokens/arcane.css +96 -0
- package/dist/tokens/hextech.css +96 -0
- package/dist/tokens/tokens.css +102 -86
- package/dist/tokens/tokens.d.ts +41 -0
- package/dist/tokens/tokens.js +44 -3
- package/dist/utils/motion.js +1 -1
- package/package.json +71 -60
|
@@ -1,98 +1,130 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
+
/**
|
|
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
|
+
*/
|
|
13
|
+
interface Props {
|
|
14
|
+
/** HTML tag to render. */
|
|
15
|
+
as?: string;
|
|
16
|
+
/** Typographic style variant. */
|
|
17
|
+
variant?: 'heading' | 'body' | 'caption' | 'italic';
|
|
18
|
+
/** Text color token. */
|
|
19
|
+
color?: 'primary' | 'soft' | 'muted' | 'muted-strong' | 'accent' | 'signal';
|
|
20
|
+
/** Compositional intent expression. Applied alongside the variant. */
|
|
21
|
+
expression?: Expression;
|
|
22
|
+
/** Additional CSS classes. */
|
|
23
|
+
class?: string;
|
|
24
|
+
/** Text content. */
|
|
25
|
+
children?: Snippet;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let {
|
|
29
|
+
as = 'p',
|
|
30
|
+
variant = 'body',
|
|
31
|
+
color = variant === 'heading' ? 'primary' : 'soft',
|
|
32
|
+
expression,
|
|
33
|
+
class: className = '',
|
|
34
|
+
children
|
|
35
|
+
}: Props = $props();
|
|
36
|
+
|
|
37
|
+
const colorMap: Record<string, string> = {
|
|
38
|
+
primary: 'var(--text)',
|
|
39
|
+
soft: 'var(--text-soft)',
|
|
40
|
+
muted: 'var(--muted)',
|
|
41
|
+
'muted-strong': 'var(--muted-strong)',
|
|
42
|
+
accent: 'var(--accent)',
|
|
43
|
+
signal: 'var(--signal)'
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const variantClass = $derived(
|
|
47
|
+
cn(
|
|
48
|
+
variant === 'heading' && 'hyvui-text-heading',
|
|
49
|
+
variant === 'body' && 'hyvui-text-body',
|
|
50
|
+
variant === 'caption' && 'hyvui-text-caption',
|
|
51
|
+
variant === 'italic' && 'hyvui-text-italic',
|
|
52
|
+
expression && `expr-${expression}`,
|
|
53
|
+
className
|
|
54
|
+
)
|
|
55
|
+
);
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<svelte:element this={as} class={variantClass} style:color={colorMap[color]}>
|
|
59
|
+
{#if children}{@render children()}{/if}
|
|
60
|
+
</svelte:element>
|
|
61
|
+
|
|
62
|
+
<style>
|
|
63
|
+
.hyvui-text-heading,
|
|
64
|
+
.hyvui-text-body,
|
|
65
|
+
.hyvui-text-caption,
|
|
66
|
+
.hyvui-text-italic {
|
|
67
|
+
margin: 0;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.hyvui-text-heading {
|
|
71
|
+
font-family: var(--font-body);
|
|
72
|
+
font-size: clamp(1.75rem, 4vw, 3.25rem);
|
|
73
|
+
font-weight: 400;
|
|
74
|
+
line-height: 0.95;
|
|
75
|
+
letter-spacing: -0.045em;
|
|
76
|
+
text-wrap: balance;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.hyvui-text-body {
|
|
80
|
+
font-family: var(--font-body);
|
|
81
|
+
font-size: 1.03rem;
|
|
82
|
+
font-weight: 400;
|
|
83
|
+
line-height: 1.62;
|
|
84
|
+
max-width: 32rem;
|
|
85
|
+
text-wrap: pretty;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.hyvui-text-caption {
|
|
89
|
+
font-family: var(--font-mono);
|
|
90
|
+
font-size: 0.7rem;
|
|
91
|
+
font-weight: 400;
|
|
92
|
+
letter-spacing: 0.16em;
|
|
93
|
+
text-transform: uppercase;
|
|
94
|
+
line-height: 1.2;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.hyvui-text-italic {
|
|
98
|
+
font-family: var(--font-body);
|
|
99
|
+
font-size: 1.02rem;
|
|
100
|
+
font-style: italic;
|
|
101
|
+
font-weight: 400;
|
|
102
|
+
line-height: 1.64;
|
|
103
|
+
text-wrap: pretty;
|
|
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
|
+
}
|
|
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;
|
|
@@ -1,95 +1,102 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
<
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../utils/cn.js';
|
|
3
|
+
import Grid from '../layout/Grid.svelte';
|
|
4
|
+
import type { Snippet } from 'svelte';
|
|
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
|
+
*/
|
|
16
|
+
interface Props {
|
|
17
|
+
/** Optional scene title. */
|
|
18
|
+
title?: string;
|
|
19
|
+
/** Minimum card width used for responsive auto layout. */
|
|
20
|
+
minCardWidth?: string;
|
|
21
|
+
/** Maximum number of columns (auto layout). */
|
|
22
|
+
maxCols?: number;
|
|
23
|
+
/** Gap between items. */
|
|
24
|
+
gap?: string;
|
|
25
|
+
/** Deprecated alias for maxCols. */
|
|
26
|
+
cols?: number;
|
|
27
|
+
/** Additional CSS classes. */
|
|
28
|
+
class?: string;
|
|
29
|
+
/** Filter controls area above the grid. */
|
|
30
|
+
filter?: Snippet;
|
|
31
|
+
/** Grid items (Cards, images, etc.). */
|
|
32
|
+
children?: Snippet;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let {
|
|
36
|
+
title = '',
|
|
37
|
+
minCardWidth = '18rem',
|
|
38
|
+
maxCols,
|
|
39
|
+
gap = 'var(--space-inline)',
|
|
40
|
+
cols,
|
|
41
|
+
class: className = '',
|
|
42
|
+
filter,
|
|
43
|
+
children
|
|
44
|
+
}: Props = $props();
|
|
45
|
+
|
|
46
|
+
const effectiveMaxCols = $derived(maxCols ?? cols ?? 3);
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
<section class={cn('hyvui-archive', className)}>
|
|
50
|
+
<div class="hyvui-archive-inner">
|
|
51
|
+
{#if title || filter}
|
|
52
|
+
<div class="hyvui-archive-top">
|
|
53
|
+
{#if title}
|
|
54
|
+
<h2 class="hyvui-archive-title">{title}</h2>
|
|
55
|
+
{/if}
|
|
56
|
+
{#if filter}
|
|
57
|
+
<div class="hyvui-archive-filter">
|
|
58
|
+
{@render filter()}
|
|
59
|
+
</div>
|
|
60
|
+
{/if}
|
|
61
|
+
</div>
|
|
62
|
+
{/if}
|
|
63
|
+
<Grid maxCols={effectiveMaxCols} minColWidth={minCardWidth} {gap} class="hyvui-archive-grid">
|
|
64
|
+
{#if children}{@render children()}{/if}
|
|
65
|
+
</Grid>
|
|
66
|
+
</div>
|
|
67
|
+
</section>
|
|
68
|
+
|
|
69
|
+
<style>
|
|
70
|
+
.hyvui-archive {
|
|
71
|
+
position: relative;
|
|
72
|
+
min-height: 100dvh;
|
|
73
|
+
padding: var(--space-scene);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.hyvui-archive-inner {
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
gap: calc(1.5rem * var(--reg-spacing-scale));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.hyvui-archive-top {
|
|
83
|
+
display: flex;
|
|
84
|
+
align-items: flex-end;
|
|
85
|
+
justify-content: space-between;
|
|
86
|
+
gap: 1rem;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.hyvui-archive-title {
|
|
90
|
+
font-family: var(--font-body);
|
|
91
|
+
font-size: 1.4rem;
|
|
92
|
+
font-weight: 400;
|
|
93
|
+
line-height: var(--reg-heading-lh);
|
|
94
|
+
letter-spacing: var(--reg-heading-tracking);
|
|
95
|
+
color: var(--text);
|
|
96
|
+
margin: 0;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.hyvui-archive-filter {
|
|
100
|
+
flex-shrink: 0;
|
|
101
|
+
}
|
|
102
|
+
</style>
|
|
@@ -1,8 +1,24 @@
|
|
|
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;
|
|
5
|
-
/**
|
|
15
|
+
/** Minimum card width used for responsive auto layout. */
|
|
16
|
+
minCardWidth?: string;
|
|
17
|
+
/** Maximum number of columns (auto layout). */
|
|
18
|
+
maxCols?: number;
|
|
19
|
+
/** Gap between items. */
|
|
20
|
+
gap?: string;
|
|
21
|
+
/** Deprecated alias for maxCols. */
|
|
6
22
|
cols?: number;
|
|
7
23
|
/** Additional CSS classes. */
|
|
8
24
|
class?: 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;
|