@hyvnt/hyvui 0.2.0 → 0.3.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 (86) hide show
  1. package/README.md +264 -253
  2. package/dist/components/ambient/CornerBrackets.svelte +83 -87
  3. package/dist/components/ambient/DataStream.svelte +111 -94
  4. package/dist/components/ambient/GlyphMark.svelte +69 -69
  5. package/dist/components/ambient/GridOverlay.svelte +26 -28
  6. package/dist/components/ambient/ParallaxLayer.svelte +37 -41
  7. package/dist/components/ambient/ScanBand.svelte +95 -91
  8. package/dist/components/ambient/SignalRing.svelte +100 -100
  9. package/dist/components/ambient/ThreadLine.svelte +71 -78
  10. package/dist/components/ambient/Vignette.svelte +24 -26
  11. package/dist/components/depth/DepthLayer.svelte +22 -27
  12. package/dist/components/depth/DepthStage.svelte +63 -62
  13. package/dist/components/depth/FloatCard.svelte +113 -104
  14. package/dist/components/depth/HorizonGrid.svelte +216 -160
  15. package/dist/components/depth/Plinth.svelte +52 -57
  16. package/dist/components/display/Avatar.svelte +64 -69
  17. package/dist/components/display/Badge.svelte +59 -63
  18. package/dist/components/display/Blockquote.svelte +31 -34
  19. package/dist/components/display/CodeBlock.svelte +71 -76
  20. package/dist/components/display/MetricCard.svelte +77 -83
  21. package/dist/components/display/Table.svelte +99 -104
  22. package/dist/components/feedback/Alert.svelte +71 -76
  23. package/dist/components/feedback/EmptyState.svelte +68 -68
  24. package/dist/components/feedback/ErrorState.svelte +73 -73
  25. package/dist/components/feedback/Skeleton.svelte +52 -52
  26. package/dist/components/feedback/StatusDot.svelte +49 -54
  27. package/dist/components/feedback/StatusLine.svelte +122 -122
  28. package/dist/components/feedback/Toast.svelte +130 -136
  29. package/dist/components/inputs/Button.svelte +240 -237
  30. package/dist/components/inputs/Checkbox.svelte +104 -105
  31. package/dist/components/inputs/FileUpload.svelte +165 -163
  32. package/dist/components/inputs/Input.svelte +145 -147
  33. package/dist/components/inputs/Select.svelte +156 -150
  34. package/dist/components/inputs/Textarea.svelte +153 -154
  35. package/dist/components/inputs/Toggle.svelte +120 -120
  36. package/dist/components/layout/Card.svelte +70 -76
  37. package/dist/components/layout/Drawer.svelte +133 -109
  38. package/dist/components/layout/Grid.svelte +118 -43
  39. package/dist/components/layout/Grid.svelte.d.ts +8 -2
  40. package/dist/components/layout/Modal.svelte +176 -159
  41. package/dist/components/layout/Panel.svelte +49 -54
  42. package/dist/components/layout/Popover.svelte +178 -67
  43. package/dist/components/layout/Popover.svelte.d.ts +10 -1
  44. package/dist/components/layout/Stack.svelte +53 -53
  45. package/dist/components/navigation/Breadcrumb.svelte +70 -73
  46. package/dist/components/navigation/DropdownMenu.svelte +167 -124
  47. package/dist/components/navigation/DropdownMenu.svelte.d.ts +12 -2
  48. package/dist/components/navigation/SidebarNav.svelte +86 -90
  49. package/dist/components/navigation/Tabs.svelte +81 -86
  50. package/dist/components/navigation/Topbar.svelte +85 -85
  51. package/dist/components/patterns/ActionBar.svelte +71 -76
  52. package/dist/components/patterns/ConfirmDialog.svelte +63 -64
  53. package/dist/components/patterns/PageHeader.svelte +109 -114
  54. package/dist/components/patterns/SearchBar.svelte +54 -59
  55. package/dist/components/patterns/TerminalBoot.svelte +104 -104
  56. package/dist/components/primitives/Divider.svelte +26 -29
  57. package/dist/components/primitives/Icon.svelte +44 -49
  58. package/dist/components/primitives/Label.svelte +39 -44
  59. package/dist/components/primitives/Surface.svelte +89 -87
  60. package/dist/components/primitives/Text.svelte +98 -98
  61. package/dist/components/scenes/ArchiveScene.svelte +92 -95
  62. package/dist/components/scenes/ArchiveScene.svelte.d.ts +7 -1
  63. package/dist/components/scenes/LogScene.svelte +72 -77
  64. package/dist/components/scenes/NarrativeScene.svelte +91 -92
  65. package/dist/components/scenes/ReadoutScene.svelte +120 -107
  66. package/dist/components/scenes/ReadoutScene.svelte.d.ts +3 -1
  67. package/dist/components/scenes/StageScene.svelte +97 -104
  68. package/dist/examples/FieldReport.svelte +226 -223
  69. package/dist/examples/ObservationDeck.svelte +333 -317
  70. package/dist/examples/SignalLost.svelte +191 -191
  71. package/dist/styles.css +113 -0
  72. package/dist/system/actions/echo.js +9 -9
  73. package/dist/system/actions/resolve.js +9 -9
  74. package/dist/system/actions/reveal.js +1 -1
  75. package/dist/system/actions/surface.js +13 -1
  76. package/dist/system/depth/depth.css +49 -49
  77. package/dist/system/depth/depth.js +1 -1
  78. package/dist/system/expressions.css +80 -80
  79. package/dist/system/override-template.css +72 -72
  80. package/dist/system/register.css +74 -74
  81. package/dist/system/scroll-lock.d.ts +6 -0
  82. package/dist/system/scroll-lock.js +23 -0
  83. package/dist/tokens/tokens.css +100 -86
  84. package/dist/tokens/tokens.js +4 -4
  85. package/dist/utils/motion.js +1 -1
  86. package/package.json +67 -60
@@ -1,62 +1,63 @@
1
- <script lang="ts">
2
- import { cn } from '../../utils/cn.js';
3
- import type { PerspectivePreset } from '../../system/depth/depth.js';
4
- import type { Snippet } from 'svelte';
5
-
6
- interface Props {
7
- /** Perspective distance preset. */
8
- perspective?: PerspectivePreset;
9
- /** CSS percentage for horizontal perspective origin. */
10
- originX?: string;
11
- /** CSS percentage for vertical perspective origin. */
12
- originY?: string;
13
- /** HTML tag to render. */
14
- as?: string;
15
- /** Additional CSS classes. */
16
- class?: string;
17
- /** Stage content. */
18
- children?: Snippet;
19
- }
20
-
21
- let {
22
- perspective = 'mid',
23
- originX = '50%',
24
- originY = '40%',
25
- as = 'div',
26
- class: className = '',
27
- children,
28
- }: Props = $props();
29
-
30
- const perspectiveMap: Record<PerspectivePreset, string> = {
31
- near: 'var(--perspective-near)',
32
- mid: 'var(--perspective-mid)',
33
- far: 'var(--perspective-far)',
34
- };
35
- </script>
36
-
37
- <svelte:element
38
- this={as}
39
- class={cn('hyvui-depth-stage', className)}
40
- style:perspective={perspectiveMap[perspective]}
41
- style:perspective-origin="{originX} {originY}"
42
- >
43
- {#if children}{@render children()}{/if}
44
- </svelte:element>
45
-
46
- <style>
47
- .hyvui-depth-stage {
48
- transform-style: preserve-3d;
49
- position: relative;
50
- }
51
-
52
- .hyvui-depth-stage > :global(*) {
53
- transform-style: preserve-3d;
54
- }
55
-
56
- @media (prefers-reduced-motion: reduce) {
57
- .hyvui-depth-stage {
58
- perspective: none !important;
59
- transform-style: flat;
60
- }
61
- }
62
- </style>
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import type { PerspectivePreset } from '../../system/depth/depth.js';
4
+ import type { Snippet } from 'svelte';
5
+
6
+ interface Props {
7
+ /** Perspective distance preset. */
8
+ perspective?: PerspectivePreset;
9
+ /** CSS percentage for horizontal perspective origin. */
10
+ originX?: string;
11
+ /** CSS percentage for vertical perspective origin. */
12
+ originY?: string;
13
+ /** HTML tag to render. */
14
+ as?: string;
15
+ /** Additional CSS classes. */
16
+ class?: string;
17
+ /** Stage content. */
18
+ children?: Snippet;
19
+ }
20
+
21
+ let {
22
+ perspective = 'mid',
23
+ originX = '50%',
24
+ originY = '40%',
25
+ as = 'div',
26
+ class: className = '',
27
+ children
28
+ }: Props = $props();
29
+
30
+ const perspectiveMap: Record<PerspectivePreset, string> = {
31
+ near: 'var(--perspective-near)',
32
+ mid: 'var(--perspective-mid)',
33
+ far: 'var(--perspective-far)'
34
+ };
35
+ </script>
36
+
37
+ <svelte:element
38
+ this={as}
39
+ class={cn('hyvui-depth-stage', className)}
40
+ style:perspective={perspectiveMap[perspective]}
41
+ style:perspective-origin="{originX}
42
+ {originY}"
43
+ >
44
+ {#if children}{@render children()}{/if}
45
+ </svelte:element>
46
+
47
+ <style>
48
+ .hyvui-depth-stage {
49
+ transform-style: preserve-3d;
50
+ position: relative;
51
+ }
52
+
53
+ .hyvui-depth-stage > :global(*) {
54
+ transform-style: preserve-3d;
55
+ }
56
+
57
+ @media (prefers-reduced-motion: reduce) {
58
+ .hyvui-depth-stage {
59
+ perspective: none !important;
60
+ transform-style: flat;
61
+ }
62
+ }
63
+ </style>
@@ -1,104 +1,113 @@
1
- <script lang="ts">
2
- import { cn } from '../../utils/cn.js';
3
- import { tiltTransform } from '../../system/depth/depth.js';
4
- import Surface from '../primitives/Surface.svelte';
5
- import type { Snippet } from 'svelte';
6
-
7
- interface Props {
8
- /** Maximum tilt angle in degrees. */
9
- tiltMax?: number;
10
- /** Z-elevation on hover. */
11
- elevation?: 'raised' | 'foreground';
12
- /** Additional CSS classes. */
13
- class?: string;
14
- /** Card content. */
15
- children?: Snippet;
16
- }
17
-
18
- let {
19
- tiltMax = 8,
20
- elevation = 'raised',
21
- class: className = '',
22
- children,
23
- }: Props = $props();
24
-
25
- let innerTransform = $state('rotateX(0deg) rotateY(0deg) translateZ(0px)');
26
- let isHovering = $state(false);
27
-
28
- const prefersReduced =
29
- typeof window !== 'undefined'
30
- ? window.matchMedia('(prefers-reduced-motion: reduce)').matches
31
- : false;
32
-
33
- const elevationMap: Record<string, string> = {
34
- raised: 'var(--depth-raised)',
35
- foreground: 'var(--depth-foreground)',
36
- };
37
-
38
- function handlePointerMove(e: PointerEvent) {
39
- if (prefersReduced) return;
40
- const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();
41
- const x = (e.clientX - rect.left) / rect.width;
42
- const y = (e.clientY - rect.top) / rect.height;
43
- const tilt = tiltTransform(x, y, tiltMax);
44
- innerTransform = `${tilt} translateZ(${elevationMap[elevation]})`;
45
- isHovering = true;
46
- }
47
-
48
- function handlePointerLeave() {
49
- isHovering = false;
50
- innerTransform = 'rotateX(0deg) rotateY(0deg) translateZ(0px)';
51
- }
52
- </script>
53
-
54
- <div
55
- class={cn('hyvui-float-card', className)}
56
- role="presentation"
57
- onpointermove={handlePointerMove}
58
- onpointerleave={handlePointerLeave}
59
- >
60
- <div
61
- class="hyvui-float-card-inner"
62
- class:hyvui-float-card-leaving={!isHovering}
63
- style:transform={innerTransform}
64
- >
65
- <Surface variant="card" class="hyvui-float-card-surface">
66
- {#if children}{@render children()}{/if}
67
- </Surface>
68
- </div>
69
- </div>
70
-
71
- <style>
72
- .hyvui-float-card {
73
- perspective: var(--perspective-mid);
74
- perspective-origin: 50% 50%;
75
- }
76
-
77
- .hyvui-float-card-inner {
78
- transform-style: preserve-3d;
79
- will-change: transform;
80
- }
81
-
82
- .hyvui-float-card-leaving {
83
- transition: transform var(--depth-transition);
84
- }
85
-
86
- :global(.hyvui-float-card-surface) {
87
- padding: var(--space-card);
88
- }
89
-
90
- @media (prefers-reduced-motion: reduce) {
91
- .hyvui-float-card {
92
- perspective: none;
93
- }
94
-
95
- .hyvui-float-card-inner {
96
- transform: none !important;
97
- transform-style: flat;
98
- }
99
-
100
- .hyvui-float-card-leaving {
101
- transition: none;
102
- }
103
- }
104
- </style>
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import { tiltTransform } from '../../system/depth/depth.js';
4
+ import Surface from '../primitives/Surface.svelte';
5
+ import type { Snippet } from 'svelte';
6
+ import { onMount } from 'svelte';
7
+
8
+ interface Props {
9
+ /** Maximum tilt angle in degrees. */
10
+ tiltMax?: number;
11
+ /** Z-elevation on hover. */
12
+ elevation?: 'raised' | 'foreground';
13
+ /** Additional CSS classes. */
14
+ class?: string;
15
+ /** Card content. */
16
+ children?: Snippet;
17
+ }
18
+
19
+ let { tiltMax = 8, elevation = 'raised', class: className = '', children }: Props = $props();
20
+
21
+ let innerEl: HTMLDivElement | undefined = $state();
22
+ let tiltEnabled = $state(false);
23
+ let frame = 0;
24
+ let lastX = 0;
25
+ let lastY = 0;
26
+
27
+ const elevationMap: Record<string, string> = {
28
+ raised: 'var(--depth-raised)',
29
+ foreground: 'var(--depth-foreground)'
30
+ };
31
+
32
+ onMount(() => {
33
+ const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
34
+ const finePointer = window.matchMedia('(hover: hover) and (pointer: fine)').matches;
35
+ tiltEnabled = !reduced && finePointer;
36
+ });
37
+
38
+ function handlePointerMove(e: PointerEvent) {
39
+ if (!tiltEnabled || !innerEl) return;
40
+ const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();
41
+ lastX = (e.clientX - rect.left) / rect.width;
42
+ lastY = (e.clientY - rect.top) / rect.height;
43
+
44
+ innerEl.classList.remove('hyvui-float-card-leaving');
45
+ if (frame) return;
46
+ frame = requestAnimationFrame(() => {
47
+ frame = 0;
48
+ if (!innerEl) return;
49
+ const tilt = tiltTransform(lastX, lastY, tiltMax);
50
+ innerEl.style.transform = `${tilt} translateZ(${elevationMap[elevation]})`;
51
+ });
52
+ }
53
+
54
+ function handlePointerLeave() {
55
+ if (!innerEl) return;
56
+ if (frame) cancelAnimationFrame(frame);
57
+ frame = 0;
58
+ innerEl.classList.add('hyvui-float-card-leaving');
59
+ innerEl.style.transform = 'rotateX(0deg) rotateY(0deg) translateZ(0px)';
60
+ }
61
+ </script>
62
+
63
+ <div
64
+ class={cn('hyvui-float-card', className)}
65
+ role="presentation"
66
+ onpointermove={handlePointerMove}
67
+ onpointerleave={handlePointerLeave}
68
+ >
69
+ <div
70
+ class="hyvui-float-card-inner hyvui-float-card-leaving"
71
+ bind:this={innerEl}
72
+ style:transform="rotateX(0deg) rotateY(0deg) translateZ(0px)"
73
+ >
74
+ <Surface variant="card" class="hyvui-float-card-surface">
75
+ {#if children}{@render children()}{/if}
76
+ </Surface>
77
+ </div>
78
+ </div>
79
+
80
+ <style>
81
+ .hyvui-float-card {
82
+ perspective: var(--perspective-mid);
83
+ perspective-origin: 50% 50%;
84
+ }
85
+
86
+ .hyvui-float-card-inner {
87
+ transform-style: preserve-3d;
88
+ will-change: transform;
89
+ }
90
+
91
+ .hyvui-float-card-leaving {
92
+ transition: transform var(--depth-transition);
93
+ }
94
+
95
+ :global(.hyvui-float-card-surface) {
96
+ padding: var(--space-card);
97
+ }
98
+
99
+ @media (prefers-reduced-motion: reduce) {
100
+ .hyvui-float-card {
101
+ perspective: none;
102
+ }
103
+
104
+ .hyvui-float-card-inner {
105
+ transform: none !important;
106
+ transform-style: flat;
107
+ }
108
+
109
+ .hyvui-float-card-leaving {
110
+ transition: none;
111
+ }
112
+ }
113
+ </style>