@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,59 +1,59 @@
|
|
|
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
|
-
</div>
|
|
45
|
-
|
|
46
|
-
<style>
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
</style>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../utils/cn.js';
|
|
3
|
+
import Input from '../inputs/Input.svelte';
|
|
4
|
+
import StatusDot from '../feedback/StatusDot.svelte';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @remarks Use in PageHeader actions slot or ArchiveScene filter slot.
|
|
8
|
+
* @example
|
|
9
|
+
* <SearchBar bind:value={query} onsearch={handleSearch} loading={isSearching} />
|
|
10
|
+
*/
|
|
11
|
+
interface Props {
|
|
12
|
+
/** Current search value (bindable). */
|
|
13
|
+
value?: string;
|
|
14
|
+
/** Placeholder text. */
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
/** Shows a loading indicator. */
|
|
17
|
+
loading?: boolean;
|
|
18
|
+
/** Additional CSS classes. */
|
|
19
|
+
class?: string;
|
|
20
|
+
/** Fires on input with the current value. */
|
|
21
|
+
onsearch?: (value: string) => void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let {
|
|
25
|
+
value = $bindable(''),
|
|
26
|
+
placeholder = 'search',
|
|
27
|
+
loading = false,
|
|
28
|
+
class: className = '',
|
|
29
|
+
onsearch
|
|
30
|
+
}: Props = $props();
|
|
31
|
+
|
|
32
|
+
function handleInput() {
|
|
33
|
+
onsearch?.(value);
|
|
34
|
+
}
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<div class={cn('hyvui-search-bar', className)}>
|
|
38
|
+
<Input type="search" bind:value {placeholder} oninput={handleInput} />
|
|
39
|
+
{#if loading}
|
|
40
|
+
<div class="hyvui-search-loading">
|
|
41
|
+
<StatusDot status="pend" size={6} />
|
|
42
|
+
</div>
|
|
43
|
+
{/if}
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<style>
|
|
47
|
+
.hyvui-search-bar {
|
|
48
|
+
position: relative;
|
|
49
|
+
width: 100%;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.hyvui-search-loading {
|
|
53
|
+
position: absolute;
|
|
54
|
+
right: 0.9rem;
|
|
55
|
+
top: 50%;
|
|
56
|
+
transform: translateY(-50%);
|
|
57
|
+
pointer-events: none;
|
|
58
|
+
}
|
|
59
|
+
</style>
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../utils/cn.js';
|
|
3
|
+
import CornerBrackets from '../ambient/CornerBrackets.svelte';
|
|
4
|
+
import DepthStage from '../depth/DepthStage.svelte';
|
|
5
|
+
import DepthLayer from '../depth/DepthLayer.svelte';
|
|
6
|
+
import HorizonGrid from '../depth/HorizonGrid.svelte';
|
|
7
|
+
import type { PerspectivePreset } from '../../system/depth/depth.js';
|
|
8
|
+
import type { Snippet } from 'svelte';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @remarks Composed spatial stage: HorizonGrid backdrop + DepthStage + CornerBrackets in one component.
|
|
12
|
+
* The missing entry point into the depth system for showcasing content.
|
|
13
|
+
* @example
|
|
14
|
+
* <ShowcaseFrame perspective="mid" animated>
|
|
15
|
+
* {#snippet label()}<span>artifact / 001</span>{/snippet}
|
|
16
|
+
* <FloatCard>your content</FloatCard>
|
|
17
|
+
* </ShowcaseFrame>
|
|
18
|
+
*/
|
|
19
|
+
interface Props {
|
|
20
|
+
/** Perspective distance preset. */
|
|
21
|
+
perspective?: PerspectivePreset;
|
|
22
|
+
/** Animate the HorizonGrid lines. */
|
|
23
|
+
animated?: boolean;
|
|
24
|
+
/** Label rendered in readout style at the bottom-left. */
|
|
25
|
+
label?: Snippet;
|
|
26
|
+
/** Minimum height of the frame. */
|
|
27
|
+
minHeight?: string;
|
|
28
|
+
/** Additional CSS classes. */
|
|
29
|
+
class?: string;
|
|
30
|
+
/** Content rendered at raised depth level. */
|
|
31
|
+
children?: Snippet;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let {
|
|
35
|
+
perspective = 'mid',
|
|
36
|
+
animated = false,
|
|
37
|
+
label,
|
|
38
|
+
minHeight = '28rem',
|
|
39
|
+
class: className = '',
|
|
40
|
+
children
|
|
41
|
+
}: Props = $props();
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<div class={cn('hyvui-showcase-frame', className)} style:min-height={minHeight}>
|
|
45
|
+
<HorizonGrid class="hyvui-showcase-frame-grid" {animated} vanishY={0.36} rows={14} cols={10} />
|
|
46
|
+
|
|
47
|
+
<div class="hyvui-showcase-frame-brackets" aria-hidden="true" style:opacity="var(--reg-ornament-opacity)">
|
|
48
|
+
<CornerBrackets size={18} />
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<DepthStage {perspective} class="hyvui-showcase-frame-stage">
|
|
52
|
+
<DepthLayer level="raised" class="hyvui-showcase-frame-layer">
|
|
53
|
+
{#if children}{@render children()}{/if}
|
|
54
|
+
</DepthLayer>
|
|
55
|
+
</DepthStage>
|
|
56
|
+
|
|
57
|
+
{#if label}
|
|
58
|
+
<div class="hyvui-showcase-frame-label" aria-hidden="true">
|
|
59
|
+
{@render label()}
|
|
60
|
+
</div>
|
|
61
|
+
{/if}
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<style>
|
|
65
|
+
.hyvui-showcase-frame {
|
|
66
|
+
position: relative;
|
|
67
|
+
overflow: hidden;
|
|
68
|
+
border: 1px solid var(--line);
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
justify-content: center;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
:global(.hyvui-showcase-frame-grid) {
|
|
75
|
+
position: absolute;
|
|
76
|
+
inset: 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.hyvui-showcase-frame-brackets {
|
|
80
|
+
position: absolute;
|
|
81
|
+
inset: 1rem;
|
|
82
|
+
pointer-events: none;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
:global(.hyvui-showcase-frame-stage) {
|
|
86
|
+
position: relative;
|
|
87
|
+
width: 100%;
|
|
88
|
+
height: 100%;
|
|
89
|
+
display: flex;
|
|
90
|
+
align-items: center;
|
|
91
|
+
justify-content: center;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
:global(.hyvui-showcase-frame-layer) {
|
|
95
|
+
display: flex;
|
|
96
|
+
align-items: center;
|
|
97
|
+
justify-content: center;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.hyvui-showcase-frame-label {
|
|
101
|
+
position: absolute;
|
|
102
|
+
bottom: calc(0.75rem * var(--reg-spacing-scale, 1));
|
|
103
|
+
left: calc(0.9rem * var(--reg-spacing-scale, 1));
|
|
104
|
+
font-family: var(--font-mono);
|
|
105
|
+
font-size: 0.82rem;
|
|
106
|
+
letter-spacing: 0.06em;
|
|
107
|
+
color: var(--muted);
|
|
108
|
+
line-height: 1.6;
|
|
109
|
+
pointer-events: none;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@media (prefers-reduced-motion: reduce) {
|
|
113
|
+
:global(.hyvui-showcase-frame-grid canvas) {
|
|
114
|
+
display: none;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
</style>
|
|
@@ -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;
|
|
@@ -1,104 +1,118 @@
|
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../utils/cn.js';
|
|
3
|
+
import StatusLine from '../feedback/StatusLine.svelte';
|
|
4
|
+
import { onMount } from 'svelte';
|
|
5
|
+
|
|
6
|
+
interface BootLine {
|
|
7
|
+
status: 'ok' | 'pend' | 'warn' | 'fail';
|
|
8
|
+
message: string;
|
|
9
|
+
}
|
|
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
|
+
*/
|
|
23
|
+
interface Props {
|
|
24
|
+
/** Lines to display in sequence. */
|
|
25
|
+
lines?: BootLine[];
|
|
26
|
+
/** Initial delay before the first line appears (ms). */
|
|
27
|
+
delay?: number;
|
|
28
|
+
/** Interval between each line appearing (ms). */
|
|
29
|
+
interval?: number;
|
|
30
|
+
/** When true, shows all lines immediately. */
|
|
31
|
+
instant?: boolean;
|
|
32
|
+
/** Passes cursor visibility to visible lines. */
|
|
33
|
+
showCursor?: boolean;
|
|
34
|
+
/** Status line tone mode. */
|
|
35
|
+
tone?: 'split' | 'line';
|
|
36
|
+
/** Additional CSS classes. */
|
|
37
|
+
class?: string;
|
|
38
|
+
/** Fires when all lines have appeared. */
|
|
39
|
+
oncomplete?: () => void;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
let {
|
|
43
|
+
lines = [],
|
|
44
|
+
delay = 600,
|
|
45
|
+
interval = 700,
|
|
46
|
+
instant = false,
|
|
47
|
+
showCursor = false,
|
|
48
|
+
tone = 'split',
|
|
49
|
+
class: className = '',
|
|
50
|
+
oncomplete
|
|
51
|
+
}: Props = $props();
|
|
52
|
+
|
|
53
|
+
let visibleCount = $state(0);
|
|
54
|
+
|
|
55
|
+
onMount(() => {
|
|
56
|
+
if (lines.length === 0) {
|
|
57
|
+
oncomplete?.();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
62
|
+
|
|
63
|
+
if (instant || prefersReduced) {
|
|
64
|
+
visibleCount = lines.length;
|
|
65
|
+
oncomplete?.();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const timers: number[] = [];
|
|
70
|
+
timers.push(
|
|
71
|
+
window.setTimeout(() => {
|
|
72
|
+
visibleCount = 1;
|
|
73
|
+
|
|
74
|
+
if (lines.length === 1) {
|
|
75
|
+
oncomplete?.();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const stepTimer = window.setInterval(() => {
|
|
80
|
+
visibleCount += 1;
|
|
81
|
+
if (visibleCount >= lines.length) {
|
|
82
|
+
window.clearInterval(stepTimer);
|
|
83
|
+
oncomplete?.();
|
|
84
|
+
}
|
|
85
|
+
}, interval);
|
|
86
|
+
|
|
87
|
+
timers.push(stepTimer);
|
|
88
|
+
}, delay)
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
return () => {
|
|
92
|
+
for (const timer of timers) {
|
|
93
|
+
window.clearTimeout(timer);
|
|
94
|
+
window.clearInterval(timer);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
</script>
|
|
99
|
+
|
|
100
|
+
<div class={cn('hyvui-terminal-boot', className)}>
|
|
101
|
+
{#each lines as line, i}
|
|
102
|
+
<StatusLine
|
|
103
|
+
status={line.status}
|
|
104
|
+
message={line.message}
|
|
105
|
+
visible={i < visibleCount}
|
|
106
|
+
{tone}
|
|
107
|
+
cursor={showCursor && i < visibleCount}
|
|
108
|
+
/>
|
|
109
|
+
{/each}
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
<style>
|
|
113
|
+
.hyvui-terminal-boot {
|
|
114
|
+
display: flex;
|
|
115
|
+
flex-direction: column;
|
|
116
|
+
gap: 0.375rem;
|
|
117
|
+
}
|
|
118
|
+
</style>
|
|
@@ -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,29 +1,56 @@
|
|
|
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
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../utils/cn.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @example
|
|
6
|
+
* <Divider />
|
|
7
|
+
* <Divider strength="strong" />
|
|
8
|
+
*/
|
|
9
|
+
interface Props {
|
|
10
|
+
/** Line visibility strength. */
|
|
11
|
+
strength?: 'default' | 'strong';
|
|
12
|
+
/** Additional CSS classes. */
|
|
13
|
+
class?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let { strength = 'default', class: className = '' }: Props = $props();
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<hr
|
|
20
|
+
class={cn('hyvui-divider', className)}
|
|
21
|
+
style:border-color={strength === 'strong' ? 'var(--line-strong)' : 'var(--line)'}
|
|
22
|
+
/>
|
|
23
|
+
|
|
24
|
+
<style>
|
|
25
|
+
.hyvui-divider {
|
|
26
|
+
border: none;
|
|
27
|
+
border-top: 1px solid;
|
|
28
|
+
margin: 0;
|
|
29
|
+
width: 100%;
|
|
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
|
+
}
|
|
56
|
+
</style>
|