@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.
Files changed (181) hide show
  1. package/README.md +294 -253
  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 +91 -87
  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 +117 -94
  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 +75 -69
  15. package/dist/components/ambient/GlyphMark.svelte.d.ts +6 -0
  16. package/dist/components/ambient/GridOverlay.svelte +34 -28
  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 +45 -41
  21. package/dist/components/ambient/ParallaxLayer.svelte.d.ts +7 -0
  22. package/dist/components/ambient/ScanBand.svelte +103 -91
  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 +106 -100
  27. package/dist/components/ambient/SignalRing.svelte.d.ts +6 -0
  28. package/dist/components/ambient/ThreadLine.svelte +78 -78
  29. package/dist/components/ambient/ThreadLine.svelte.d.ts +7 -0
  30. package/dist/components/ambient/Vignette.svelte +30 -26
  31. package/dist/components/ambient/Vignette.svelte.d.ts +6 -0
  32. package/dist/components/depth/DepthLayer.svelte +30 -27
  33. package/dist/components/depth/DepthLayer.svelte.d.ts +8 -0
  34. package/dist/components/depth/DepthStage.svelte +67 -62
  35. package/dist/components/depth/DepthStage.svelte.d.ts +8 -0
  36. package/dist/components/depth/FloatCard.svelte +129 -104
  37. package/dist/components/depth/FloatCard.svelte.d.ts +8 -0
  38. package/dist/components/depth/HorizonGrid.svelte +241 -160
  39. package/dist/components/depth/HorizonGrid.svelte.d.ts +9 -0
  40. package/dist/components/depth/Plinth.svelte +62 -57
  41. package/dist/components/depth/Plinth.svelte.d.ts +10 -0
  42. package/dist/components/display/Avatar.svelte +69 -69
  43. package/dist/components/display/Avatar.svelte.d.ts +5 -0
  44. package/dist/components/display/Badge.svelte +75 -63
  45. package/dist/components/display/Badge.svelte.d.ts +6 -0
  46. package/dist/components/display/Blockquote.svelte +35 -34
  47. package/dist/components/display/Blockquote.svelte.d.ts +4 -0
  48. package/dist/components/display/CodeBlock.svelte +76 -76
  49. package/dist/components/display/CodeBlock.svelte.d.ts +5 -0
  50. package/dist/components/display/MetricCard.svelte +100 -83
  51. package/dist/components/display/MetricCard.svelte.d.ts +6 -0
  52. package/dist/components/display/Table.svelte +106 -104
  53. package/dist/components/display/Table.svelte.d.ts +7 -0
  54. package/dist/components/feedback/Alert.svelte +95 -76
  55. package/dist/components/feedback/Alert.svelte.d.ts +6 -0
  56. package/dist/components/feedback/EmptyState.svelte +75 -68
  57. package/dist/components/feedback/EmptyState.svelte.d.ts +7 -0
  58. package/dist/components/feedback/ErrorState.svelte +78 -73
  59. package/dist/components/feedback/ErrorState.svelte.d.ts +5 -0
  60. package/dist/components/feedback/Skeleton.svelte +58 -52
  61. package/dist/components/feedback/Skeleton.svelte.d.ts +6 -0
  62. package/dist/components/feedback/StatusDot.svelte +84 -54
  63. package/dist/components/feedback/StatusDot.svelte.d.ts +6 -0
  64. package/dist/components/feedback/StatusLine.svelte +128 -122
  65. package/dist/components/feedback/StatusLine.svelte.d.ts +6 -0
  66. package/dist/components/feedback/Toast.svelte +144 -136
  67. package/dist/components/feedback/Toast.svelte.d.ts +10 -0
  68. package/dist/components/inputs/Button.svelte +310 -237
  69. package/dist/components/inputs/Button.svelte.d.ts +8 -0
  70. package/dist/components/inputs/Checkbox.svelte +109 -105
  71. package/dist/components/inputs/Checkbox.svelte.d.ts +5 -0
  72. package/dist/components/inputs/FileUpload.svelte +170 -163
  73. package/dist/components/inputs/FileUpload.svelte.d.ts +5 -0
  74. package/dist/components/inputs/Input.svelte +153 -147
  75. package/dist/components/inputs/Input.svelte.d.ts +7 -0
  76. package/dist/components/inputs/Select.svelte +164 -150
  77. package/dist/components/inputs/Select.svelte.d.ts +8 -0
  78. package/dist/components/inputs/Textarea.svelte +160 -154
  79. package/dist/components/inputs/Textarea.svelte.d.ts +6 -0
  80. package/dist/components/inputs/Toggle.svelte +125 -120
  81. package/dist/components/inputs/Toggle.svelte.d.ts +5 -0
  82. package/dist/components/layout/Card.svelte +81 -76
  83. package/dist/components/layout/Card.svelte.d.ts +11 -0
  84. package/dist/components/layout/Drawer.svelte +140 -109
  85. package/dist/components/layout/Drawer.svelte.d.ts +6 -0
  86. package/dist/components/layout/Grid.svelte +128 -43
  87. package/dist/components/layout/Grid.svelte.d.ts +18 -2
  88. package/dist/components/layout/Modal.svelte +191 -159
  89. package/dist/components/layout/Modal.svelte.d.ts +10 -0
  90. package/dist/components/layout/Panel.svelte +58 -54
  91. package/dist/components/layout/Panel.svelte.d.ts +9 -0
  92. package/dist/components/layout/Popover.svelte +188 -67
  93. package/dist/components/layout/Popover.svelte.d.ts +19 -1
  94. package/dist/components/layout/Stack.svelte +65 -53
  95. package/dist/components/layout/Stack.svelte.d.ts +12 -0
  96. package/dist/components/navigation/Breadcrumb.svelte +78 -73
  97. package/dist/components/navigation/Breadcrumb.svelte.d.ts +8 -0
  98. package/dist/components/navigation/DropdownMenu.svelte +179 -124
  99. package/dist/components/navigation/DropdownMenu.svelte.d.ts +24 -2
  100. package/dist/components/navigation/SidebarNav.svelte +96 -90
  101. package/dist/components/navigation/SidebarNav.svelte.d.ts +9 -0
  102. package/dist/components/navigation/Tabs.svelte +106 -86
  103. package/dist/components/navigation/Tabs.svelte.d.ts +8 -0
  104. package/dist/components/navigation/Topbar.svelte +94 -85
  105. package/dist/components/navigation/Topbar.svelte.d.ts +9 -0
  106. package/dist/components/patterns/ActionBar.svelte +82 -76
  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 +75 -64
  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 +117 -114
  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 +59 -59
  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 +118 -104
  127. package/dist/components/patterns/TerminalBoot.svelte.d.ts +12 -0
  128. package/dist/components/primitives/Divider.svelte +56 -29
  129. package/dist/components/primitives/Divider.svelte.d.ts +5 -0
  130. package/dist/components/primitives/Icon.svelte +53 -49
  131. package/dist/components/primitives/Icon.svelte.d.ts +9 -0
  132. package/dist/components/primitives/Label.svelte +45 -44
  133. package/dist/components/primitives/Label.svelte.d.ts +6 -0
  134. package/dist/components/primitives/Surface.svelte +154 -87
  135. package/dist/components/primitives/Surface.svelte.d.ts +7 -0
  136. package/dist/components/primitives/Text.svelte +130 -98
  137. package/dist/components/primitives/Text.svelte.d.ts +7 -0
  138. package/dist/components/scenes/ArchiveScene.svelte +102 -95
  139. package/dist/components/scenes/ArchiveScene.svelte.d.ts +17 -1
  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 +86 -77
  143. package/dist/components/scenes/LogScene.svelte.d.ts +14 -0
  144. package/dist/components/scenes/NarrativeScene.svelte +100 -92
  145. package/dist/components/scenes/NarrativeScene.svelte.d.ts +9 -0
  146. package/dist/components/scenes/ReadoutScene.svelte +131 -107
  147. package/dist/components/scenes/ReadoutScene.svelte.d.ts +14 -1
  148. package/dist/components/scenes/StageScene.svelte +111 -104
  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/FieldReport.svelte +226 -223
  155. package/dist/examples/HextechForge.svelte +324 -0
  156. package/dist/examples/HextechForge.svelte.d.ts +3 -0
  157. package/dist/examples/ObservationDeck.svelte +333 -317
  158. package/dist/examples/SignalLost.svelte +191 -191
  159. package/dist/index.d.ts +15 -1
  160. package/dist/index.js +16 -1
  161. package/dist/styles.css +115 -0
  162. package/dist/system/actions/echo.js +21 -12
  163. package/dist/system/actions/resolve.js +28 -14
  164. package/dist/system/actions/reveal.js +2 -2
  165. package/dist/system/actions/surface.js +12 -2
  166. package/dist/system/depth/depth.css +49 -49
  167. package/dist/system/depth/depth.js +1 -1
  168. package/dist/system/expressions.css +80 -80
  169. package/dist/system/override-template.css +72 -72
  170. package/dist/system/register.css +74 -74
  171. package/dist/system/register.d.ts +1 -1
  172. package/dist/system/register.js +5 -1
  173. package/dist/system/scroll-lock.d.ts +6 -0
  174. package/dist/system/scroll-lock.js +23 -0
  175. package/dist/tokens/arcane.css +96 -0
  176. package/dist/tokens/hextech.css +96 -0
  177. package/dist/tokens/tokens.css +102 -86
  178. package/dist/tokens/tokens.d.ts +41 -0
  179. package/dist/tokens/tokens.js +44 -3
  180. package/dist/utils/motion.js +1 -1
  181. package/package.json +71 -60
@@ -1,49 +1,53 @@
1
- <script lang="ts">
2
- import { cn } from '../../utils/cn.js';
3
- import type { Snippet } from 'svelte';
4
-
5
- interface Props {
6
- /** Icon size in pixels. */
7
- size?: number;
8
- /** CSS color value for the icon. */
9
- color?: string;
10
- /** Additional CSS classes. */
11
- class?: string;
12
- /** SVG content to render inside the icon wrapper. */
13
- children?: Snippet;
14
- }
15
-
16
- let {
17
- size = 16,
18
- color = 'currentColor',
19
- class: className = '',
20
- children,
21
- }: Props = $props();
22
- </script>
23
-
24
- <span
25
- class={cn('hyvui-icon', className)}
26
- style:width="{size}px"
27
- style:height="{size}px"
28
- style:color={color}
29
- aria-hidden="true"
30
- >
31
- {#if children}{@render children()}{/if}
32
- </span>
33
-
34
- <style>
35
- .hyvui-icon {
36
- display: inline-flex;
37
- align-items: center;
38
- justify-content: center;
39
- flex-shrink: 0;
40
- line-height: 0;
41
- }
42
-
43
- .hyvui-icon :global(svg) {
44
- width: 100%;
45
- height: 100%;
46
- fill: none;
47
- stroke: currentColor;
48
- }
49
- </style>
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import type { Snippet } from 'svelte';
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
+ */
14
+ interface Props {
15
+ /** Icon size in pixels. */
16
+ size?: number;
17
+ /** CSS color value for the icon. */
18
+ color?: string;
19
+ /** Additional CSS classes. */
20
+ class?: string;
21
+ /** SVG content to render inside the icon wrapper. */
22
+ children?: Snippet;
23
+ }
24
+
25
+ let { size = 16, color = 'currentColor', class: className = '', children }: Props = $props();
26
+ </script>
27
+
28
+ <span
29
+ class={cn('hyvui-icon', className)}
30
+ style:width="{size}px"
31
+ style:height="{size}px"
32
+ style:color
33
+ aria-hidden="true"
34
+ >
35
+ {#if children}{@render children()}{/if}
36
+ </span>
37
+
38
+ <style>
39
+ .hyvui-icon {
40
+ display: inline-flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ flex-shrink: 0;
44
+ line-height: 0;
45
+ }
46
+
47
+ .hyvui-icon :global(svg) {
48
+ width: 100%;
49
+ height: 100%;
50
+ fill: none;
51
+ stroke: currentColor;
52
+ }
53
+ </style>
@@ -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;
@@ -1,44 +1,45 @@
1
- <script lang="ts">
2
- import { cn } from '../../utils/cn.js';
3
- import type { Snippet } from 'svelte';
4
-
5
- interface Props {
6
- /** HTML tag to render. */
7
- as?: string;
8
- /** Label color token. */
9
- color?: 'muted' | 'accent' | 'signal';
10
- /** Additional CSS classes. */
11
- class?: string;
12
- /** Label text content. */
13
- children?: Snippet;
14
- }
15
-
16
- let {
17
- as = 'span',
18
- color = 'muted',
19
- class: className = '',
20
- children,
21
- }: Props = $props();
22
-
23
- const colorMap: Record<string, string> = {
24
- muted: 'var(--muted-strong)',
25
- accent: 'var(--accent)',
26
- signal: 'var(--signal)',
27
- };
28
- </script>
29
-
30
- <svelte:element this={as} class={cn('hyvui-label', className)} style:color={colorMap[color]}>
31
- {#if children}{@render children()}{/if}
32
- </svelte:element>
33
-
34
- <style>
35
- .hyvui-label {
36
- font-family: var(--font-mono);
37
- font-size: 0.7rem;
38
- font-weight: 400;
39
- letter-spacing: 0.16em;
40
- text-transform: uppercase;
41
- line-height: 1.2;
42
- white-space: nowrap;
43
- }
44
- </style>
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import type { Snippet } from 'svelte';
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
+ */
11
+ interface Props {
12
+ /** HTML tag to render. */
13
+ as?: string;
14
+ /** Label color token. */
15
+ color?: 'muted' | 'accent' | 'signal';
16
+ /** Additional CSS classes. */
17
+ class?: string;
18
+ /** Label text content. */
19
+ children?: Snippet;
20
+ }
21
+
22
+ let { as = 'span', color = 'muted', class: className = '', children }: Props = $props();
23
+
24
+ const colorMap: Record<string, string> = {
25
+ muted: 'var(--muted-strong)',
26
+ accent: 'var(--accent)',
27
+ signal: 'var(--signal)'
28
+ };
29
+ </script>
30
+
31
+ <svelte:element this={as} class={cn('hyvui-label', className)} style:color={colorMap[color]}>
32
+ {#if children}{@render children()}{/if}
33
+ </svelte:element>
34
+
35
+ <style>
36
+ .hyvui-label {
37
+ font-family: var(--font-mono);
38
+ font-size: 0.7rem;
39
+ font-weight: 400;
40
+ letter-spacing: 0.16em;
41
+ text-transform: uppercase;
42
+ line-height: 1.2;
43
+ white-space: nowrap;
44
+ }
45
+ </style>
@@ -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;
@@ -1,87 +1,154 @@
1
- <script lang="ts">
2
- import { cn } from '../../utils/cn.js';
3
- import type { Snippet } from 'svelte';
4
-
5
- interface Props {
6
- /** Surface visual style. */
7
- variant?: 'base' | 'card' | 'panel';
8
- /** HTML tag to render. */
9
- as?: string;
10
- /** Adds a pseudoelement teal inset border on panel variant. */
11
- withInset?: boolean;
12
- /** Additional CSS classes. */
13
- class?: string;
14
- /** Surface content. */
15
- children?: Snippet;
16
- }
17
-
18
- let {
19
- variant = 'base',
20
- as = 'div',
21
- withInset = false,
22
- class: className = '',
23
- children,
24
- }: Props = $props();
25
- </script>
26
-
27
- <svelte:element
28
- this={as}
29
- class={cn(
30
- 'hyvui-surface',
31
- variant === 'card' && 'hyvui-surface-card',
32
- variant === 'panel' && 'hyvui-surface-panel',
33
- variant === 'base' && 'hyvui-surface-base',
34
- withInset && 'hyvui-surface-inset',
35
- className
36
- )}
37
- >
38
- {#if children}{@render children()}{/if}
39
- </svelte:element>
40
-
41
- <style>
42
- .hyvui-surface {
43
- position: relative;
44
- overflow: clip;
45
- border-radius: var(--radius-md);
46
- isolation: isolate;
47
- }
48
-
49
- .hyvui-surface::before {
50
- content: '';
51
- position: absolute;
52
- inset: 0;
53
- pointer-events: none;
54
- background:
55
- linear-gradient(180deg, rgba(240, 232, 218, 0.04), transparent 20%),
56
- linear-gradient(90deg, rgba(121, 166, 163, 0.03), transparent 30%);
57
- opacity: 0.8;
58
- }
59
-
60
- .hyvui-surface-base {
61
- background: var(--surface-soft);
62
- border: 1px solid var(--line);
63
- box-shadow: var(--surface-stroke);
64
- }
65
-
66
- .hyvui-surface-card {
67
- background: var(--surface-card);
68
- border: 1px solid rgba(255, 255, 255, 0.05);
69
- box-shadow: var(--surface-stroke), var(--shadow-card);
70
- backdrop-filter: blur(8px);
71
- }
72
-
73
- .hyvui-surface-panel {
74
- background: var(--surface-panel);
75
- border: 1px solid var(--line);
76
- box-shadow: var(--surface-stroke), var(--shadow-veil);
77
- backdrop-filter: blur(10px);
78
- }
79
-
80
- .hyvui-surface-inset::after {
81
- content: '';
82
- position: absolute;
83
- inset: 0.9rem;
84
- border: 1px solid rgba(121, 166, 163, 0.14);
85
- pointer-events: none;
86
- }
87
- </style>
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import type { Snippet } from 'svelte';
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
+ */
12
+ interface Props {
13
+ /** Surface visual style. */
14
+ variant?: 'base' | 'card' | 'panel';
15
+ /** HTML tag to render. */
16
+ as?: string;
17
+ /** Adds a pseudoelement teal inset border on panel variant. */
18
+ withInset?: boolean;
19
+ /** Additional CSS classes. */
20
+ class?: string;
21
+ /** Surface content. */
22
+ children?: Snippet;
23
+ }
24
+
25
+ let {
26
+ variant = 'base',
27
+ as = 'div',
28
+ withInset = false,
29
+ class: className = '',
30
+ children
31
+ }: Props = $props();
32
+ </script>
33
+
34
+ <svelte:element
35
+ this={as}
36
+ class={cn(
37
+ 'hyvui-surface',
38
+ variant === 'card' && 'hyvui-surface-card',
39
+ variant === 'panel' && 'hyvui-surface-panel',
40
+ variant === 'base' && 'hyvui-surface-base',
41
+ withInset && 'hyvui-surface-inset',
42
+ className
43
+ )}
44
+ >
45
+ {#if children}{@render children()}{/if}
46
+ </svelte:element>
47
+
48
+ <style>
49
+ .hyvui-surface {
50
+ position: relative;
51
+ overflow: clip;
52
+ border-radius: var(--radius-md);
53
+ isolation: isolate;
54
+ max-inline-size: 100%;
55
+ min-width: 0;
56
+ }
57
+
58
+ .hyvui-surface::before {
59
+ content: '';
60
+ position: absolute;
61
+ inset: 0;
62
+ pointer-events: none;
63
+ background:
64
+ linear-gradient(180deg, rgba(240, 232, 218, 0.04), transparent 20%),
65
+ linear-gradient(90deg, rgba(121, 166, 163, 0.03), transparent 30%);
66
+ opacity: 0.8;
67
+ }
68
+
69
+ .hyvui-surface-base {
70
+ background: var(--surface-soft);
71
+ border: 1px solid var(--line);
72
+ box-shadow: var(--surface-stroke);
73
+ }
74
+
75
+ .hyvui-surface-card {
76
+ background: var(--surface-card);
77
+ border: 1px solid rgba(255, 255, 255, 0.05);
78
+ box-shadow: var(--surface-stroke), var(--shadow-card);
79
+ }
80
+
81
+ .hyvui-surface-panel {
82
+ background: var(--surface-panel);
83
+ border: 1px solid var(--line);
84
+ box-shadow: var(--surface-stroke), var(--shadow-veil);
85
+ }
86
+
87
+ .hyvui-surface-inset::after {
88
+ content: '';
89
+ position: absolute;
90
+ inset: 0.9rem;
91
+ border: 1px solid rgba(121, 166, 163, 0.14);
92
+ pointer-events: none;
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
+ }
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';