@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,107 +1,120 @@
1
- <script lang="ts">
2
- import { cn } from '../../utils/cn.js';
3
- import ScanBand from '../ambient/ScanBand.svelte';
4
- import type { Snippet } from 'svelte';
5
-
6
- interface Props {
7
- /** Optional title rendered as a readout expression label. */
8
- title?: string;
9
- /** Additional CSS classes. */
10
- class?: string;
11
- /** Top bar area for labels and status indicators. */
12
- header?: Snippet;
13
- /** Main content area. */
14
- children?: Snippet;
15
- /** Optional right sidebar (fixed width ~260px). */
16
- sidebar?: Snippet;
17
- }
18
-
19
- let {
20
- title = '',
21
- class: className = '',
22
- header,
23
- children,
24
- sidebar,
25
- }: Props = $props();
26
- </script>
27
-
28
- <section class={cn('hyvui-readout', className)}>
29
- <div class="hyvui-readout-scan" aria-hidden="true" style:opacity="calc(0.4 * var(--reg-ornament-opacity))">
30
- <ScanBand />
31
- </div>
32
- <div class="hyvui-readout-inner">
33
- {#if header || title}
34
- <div class="hyvui-readout-header">
35
- {#if title}
36
- <span class="expr-readout">{title}</span>
37
- {/if}
38
- {#if header}
39
- {@render header()}
40
- {/if}
41
- </div>
42
- {/if}
43
- <div class={cn('hyvui-readout-body', sidebar && 'hyvui-readout-body-sidebar')}>
44
- <div class="hyvui-readout-main">
45
- {#if children}{@render children()}{/if}
46
- </div>
47
- {#if sidebar}
48
- <aside class="hyvui-readout-sidebar">
49
- {@render sidebar()}
50
- </aside>
51
- {/if}
52
- </div>
53
- </div>
54
- </section>
55
-
56
- <style>
57
- .hyvui-readout {
58
- position: relative;
59
- min-height: 100dvh;
60
- padding: var(--space-scene);
61
- background-color: var(--bg);
62
- }
63
-
64
- .hyvui-readout-scan {
65
- position: absolute;
66
- inset: 0;
67
- pointer-events: none;
68
- }
69
-
70
- .hyvui-readout-inner {
71
- position: relative;
72
- display: flex;
73
- flex-direction: column;
74
- gap: calc(1.5rem * var(--reg-spacing-scale));
75
- width: 100%;
76
- }
77
-
78
- .hyvui-readout-header {
79
- display: flex;
80
- align-items: center;
81
- gap: 1rem;
82
- }
83
-
84
- .hyvui-readout-body {
85
- width: 100%;
86
- }
87
-
88
- .hyvui-readout-body-sidebar {
89
- display: grid;
90
- grid-template-columns: 1fr 260px;
91
- gap: calc(1.5rem * var(--reg-spacing-scale));
92
- }
93
-
94
- .hyvui-readout-main {
95
- min-width: 0;
96
- }
97
-
98
- .hyvui-readout-sidebar {
99
- min-width: 0;
100
- }
101
-
102
- @media (max-width: 768px) {
103
- .hyvui-readout-body-sidebar {
104
- grid-template-columns: 1fr;
105
- }
106
- }
107
- </style>
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import ScanBand from '../ambient/ScanBand.svelte';
4
+ import type { Snippet } from 'svelte';
5
+
6
+ interface Props {
7
+ /** Optional title rendered as a readout expression label. */
8
+ title?: string;
9
+ /** Additional CSS classes. */
10
+ class?: string;
11
+ /** Top bar area for labels and status indicators. */
12
+ header?: Snippet;
13
+ /** Main content area. */
14
+ children?: Snippet;
15
+ /** Optional right sidebar. */
16
+ sidebar?: Snippet;
17
+ /** Sidebar width (used when sidebar is provided). */
18
+ sidebarWidth?: string;
19
+ }
20
+
21
+ let {
22
+ title = '',
23
+ class: className = '',
24
+ header,
25
+ children,
26
+ sidebar,
27
+ sidebarWidth = '17rem'
28
+ }: Props = $props();
29
+ </script>
30
+
31
+ <section class={cn('hyvui-readout', className)}>
32
+ <div
33
+ class="hyvui-readout-scan"
34
+ aria-hidden="true"
35
+ style:opacity="calc(0.4 * var(--reg-ornament-opacity))"
36
+ >
37
+ <ScanBand />
38
+ </div>
39
+ <div class="hyvui-readout-inner">
40
+ {#if header || title}
41
+ <div class="hyvui-readout-header">
42
+ {#if title}
43
+ <span class="expr-readout">{title}</span>
44
+ {/if}
45
+ {#if header}
46
+ {@render header()}
47
+ {/if}
48
+ </div>
49
+ {/if}
50
+ <div
51
+ class={cn('hyvui-readout-body', sidebar && 'hyvui-readout-body-sidebar')}
52
+ style:--hyv-readout-sidebar-w={sidebarWidth}
53
+ >
54
+ <div class="hyvui-readout-main">
55
+ {#if children}{@render children()}{/if}
56
+ </div>
57
+ {#if sidebar}
58
+ <aside class="hyvui-readout-sidebar">
59
+ {@render sidebar()}
60
+ </aside>
61
+ {/if}
62
+ </div>
63
+ </div>
64
+ </section>
65
+
66
+ <style>
67
+ .hyvui-readout {
68
+ position: relative;
69
+ min-height: 100dvh;
70
+ padding: var(--space-scene);
71
+ background-color: var(--bg);
72
+ container-type: inline-size;
73
+ }
74
+
75
+ .hyvui-readout-scan {
76
+ position: absolute;
77
+ inset: 0;
78
+ pointer-events: none;
79
+ }
80
+
81
+ .hyvui-readout-inner {
82
+ position: relative;
83
+ display: flex;
84
+ flex-direction: column;
85
+ gap: calc(1.5rem * var(--reg-spacing-scale));
86
+ width: 100%;
87
+ }
88
+
89
+ .hyvui-readout-header {
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 1rem;
93
+ flex-wrap: wrap;
94
+ min-width: 0;
95
+ }
96
+
97
+ .hyvui-readout-body {
98
+ width: 100%;
99
+ }
100
+
101
+ .hyvui-readout-body-sidebar {
102
+ display: grid;
103
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--hyv-readout-sidebar-w, 17rem));
104
+ gap: calc(1.5rem * var(--reg-spacing-scale));
105
+ }
106
+
107
+ .hyvui-readout-main {
108
+ min-width: 0;
109
+ }
110
+
111
+ .hyvui-readout-sidebar {
112
+ min-width: 0;
113
+ }
114
+
115
+ @container (max-width: var(--cq-md)) {
116
+ .hyvui-readout-body-sidebar {
117
+ grid-template-columns: 1fr;
118
+ }
119
+ }
120
+ </style>
@@ -8,8 +8,10 @@ interface Props {
8
8
  header?: Snippet;
9
9
  /** Main content area. */
10
10
  children?: Snippet;
11
- /** Optional right sidebar (fixed width ~260px). */
11
+ /** Optional right sidebar. */
12
12
  sidebar?: Snippet;
13
+ /** Sidebar width (used when sidebar is provided). */
14
+ sidebarWidth?: string;
13
15
  }
14
16
  declare const ReadoutScene: import("svelte").Component<Props, {}, "">;
15
17
  type ReadoutScene = ReturnType<typeof ReadoutScene>;
@@ -1,104 +1,97 @@
1
- <script lang="ts">
2
- import { cn } from '../../utils/cn.js';
3
- import CornerBrackets from '../ambient/CornerBrackets.svelte';
4
- import type { Snippet } from 'svelte';
5
-
6
- interface Props {
7
- /** Additional CSS classes. */
8
- class?: string;
9
- /** Above heading (Label or chapter expression). */
10
- label?: Snippet;
11
- /** Primary statement. */
12
- heading?: Snippet;
13
- /** Secondary line. */
14
- subheading?: Snippet;
15
- /** CTA area. */
16
- actions?: Snippet;
17
- /** Behind everything (GridOverlay, ParallaxLayer, etc.). */
18
- ambient?: Snippet;
19
- }
20
-
21
- let {
22
- class: className = '',
23
- label,
24
- heading,
25
- subheading,
26
- actions,
27
- ambient,
28
- }: Props = $props();
29
- </script>
30
-
31
- <section class={cn('hyvui-stage', className)}>
32
- {#if ambient}
33
- <div class="hyvui-stage-ambient" aria-hidden="true">
34
- {@render ambient()}
35
- </div>
36
- {/if}
37
- <div class="hyvui-stage-brackets" aria-hidden="true" style:opacity="var(--reg-ornament-opacity)">
38
- <CornerBrackets />
39
- </div>
40
- <div class="hyvui-stage-content">
41
- {#if label}
42
- <div class="hyvui-stage-label">
43
- {@render label()}
44
- </div>
45
- {/if}
46
- {#if heading}
47
- <div class="hyvui-stage-heading">
48
- {@render heading()}
49
- </div>
50
- {/if}
51
- {#if subheading}
52
- <div class="hyvui-stage-subheading">
53
- {@render subheading()}
54
- </div>
55
- {/if}
56
- {#if actions}
57
- <div class="hyvui-stage-actions">
58
- {@render actions()}
59
- </div>
60
- {/if}
61
- </div>
62
- </section>
63
-
64
- <style>
65
- .hyvui-stage {
66
- position: relative;
67
- min-height: 100dvh;
68
- padding: var(--space-scene);
69
- display: flex;
70
- align-items: center;
71
- justify-content: center;
72
- }
73
-
74
- .hyvui-stage-ambient {
75
- position: absolute;
76
- inset: 0;
77
- pointer-events: none;
78
- }
79
-
80
- .hyvui-stage-brackets {
81
- position: absolute;
82
- inset: var(--space-scene);
83
- pointer-events: none;
84
- }
85
-
86
- .hyvui-stage-content {
87
- position: relative;
88
- display: flex;
89
- flex-direction: column;
90
- align-items: center;
91
- text-align: center;
92
- gap: calc(2rem * var(--reg-spacing-scale));
93
- }
94
-
95
- .hyvui-stage-subheading {
96
- max-width: 32rem;
97
- }
98
-
99
- .hyvui-stage-actions {
100
- display: flex;
101
- gap: 0.75rem;
102
- margin-top: calc(-1rem * var(--reg-spacing-scale));
103
- }
104
- </style>
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import CornerBrackets from '../ambient/CornerBrackets.svelte';
4
+ import type { Snippet } from 'svelte';
5
+
6
+ interface Props {
7
+ /** Additional CSS classes. */
8
+ class?: string;
9
+ /** Above heading (Label or chapter expression). */
10
+ label?: Snippet;
11
+ /** Primary statement. */
12
+ heading?: Snippet;
13
+ /** Secondary line. */
14
+ subheading?: Snippet;
15
+ /** CTA area. */
16
+ actions?: Snippet;
17
+ /** Behind everything (GridOverlay, ParallaxLayer, etc.). */
18
+ ambient?: Snippet;
19
+ }
20
+
21
+ let { class: className = '', label, heading, subheading, actions, ambient }: Props = $props();
22
+ </script>
23
+
24
+ <section class={cn('hyvui-stage', className)}>
25
+ {#if ambient}
26
+ <div class="hyvui-stage-ambient" aria-hidden="true">
27
+ {@render ambient()}
28
+ </div>
29
+ {/if}
30
+ <div class="hyvui-stage-brackets" aria-hidden="true" style:opacity="var(--reg-ornament-opacity)">
31
+ <CornerBrackets />
32
+ </div>
33
+ <div class="hyvui-stage-content">
34
+ {#if label}
35
+ <div class="hyvui-stage-label">
36
+ {@render label()}
37
+ </div>
38
+ {/if}
39
+ {#if heading}
40
+ <div class="hyvui-stage-heading">
41
+ {@render heading()}
42
+ </div>
43
+ {/if}
44
+ {#if subheading}
45
+ <div class="hyvui-stage-subheading">
46
+ {@render subheading()}
47
+ </div>
48
+ {/if}
49
+ {#if actions}
50
+ <div class="hyvui-stage-actions">
51
+ {@render actions()}
52
+ </div>
53
+ {/if}
54
+ </div>
55
+ </section>
56
+
57
+ <style>
58
+ .hyvui-stage {
59
+ position: relative;
60
+ min-height: 100dvh;
61
+ padding: var(--space-scene);
62
+ display: flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ }
66
+
67
+ .hyvui-stage-ambient {
68
+ position: absolute;
69
+ inset: 0;
70
+ pointer-events: none;
71
+ }
72
+
73
+ .hyvui-stage-brackets {
74
+ position: absolute;
75
+ inset: var(--space-scene);
76
+ pointer-events: none;
77
+ }
78
+
79
+ .hyvui-stage-content {
80
+ position: relative;
81
+ display: flex;
82
+ flex-direction: column;
83
+ align-items: center;
84
+ text-align: center;
85
+ gap: calc(2rem * var(--reg-spacing-scale));
86
+ }
87
+
88
+ .hyvui-stage-subheading {
89
+ max-width: 32rem;
90
+ }
91
+
92
+ .hyvui-stage-actions {
93
+ display: flex;
94
+ gap: 0.75rem;
95
+ margin-top: calc(-1rem * var(--reg-spacing-scale));
96
+ }
97
+ </style>