@miozu/jera 0.0.2 → 0.4.2

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 (82) hide show
  1. package/CLAUDE.md +734 -0
  2. package/README.md +219 -1
  3. package/llms.txt +97 -0
  4. package/package.json +54 -14
  5. package/src/actions/index.js +375 -0
  6. package/src/components/docs/CodeBlock.svelte +203 -0
  7. package/src/components/docs/DocSection.svelte +120 -0
  8. package/src/components/docs/PropsTable.svelte +136 -0
  9. package/src/components/docs/SplitPane.svelte +98 -0
  10. package/src/components/docs/index.js +14 -0
  11. package/src/components/feedback/Alert.svelte +234 -0
  12. package/src/components/feedback/EmptyState.svelte +179 -0
  13. package/src/components/feedback/ProgressBar.svelte +116 -0
  14. package/src/components/feedback/Skeleton.svelte +107 -0
  15. package/src/components/feedback/Spinner.svelte +77 -0
  16. package/src/components/feedback/Toast.svelte +261 -0
  17. package/src/components/forms/Checkbox.svelte +147 -0
  18. package/src/components/forms/Dropzone.svelte +248 -0
  19. package/src/components/forms/FileUpload.svelte +266 -0
  20. package/src/components/forms/IconInput.svelte +184 -0
  21. package/src/components/forms/Input.svelte +121 -0
  22. package/src/components/forms/NumberInput.svelte +225 -0
  23. package/src/components/forms/PinInput.svelte +169 -0
  24. package/src/components/forms/Radio.svelte +143 -0
  25. package/src/components/forms/RadioGroup.svelte +62 -0
  26. package/src/components/forms/RangeSlider.svelte +212 -0
  27. package/src/components/forms/SearchInput.svelte +175 -0
  28. package/src/components/forms/Select.svelte +324 -0
  29. package/src/components/forms/Switch.svelte +159 -0
  30. package/src/components/forms/Textarea.svelte +122 -0
  31. package/src/components/navigation/Accordion.svelte +65 -0
  32. package/src/components/navigation/AccordionItem.svelte +146 -0
  33. package/src/components/navigation/NavigationContainer.svelte +344 -0
  34. package/src/components/navigation/Sidebar.svelte +334 -0
  35. package/src/components/navigation/SidebarAccountGroup.svelte +495 -0
  36. package/src/components/navigation/SidebarAccountItem.svelte +492 -0
  37. package/src/components/navigation/SidebarGroup.svelte +230 -0
  38. package/src/components/navigation/SidebarGroupSwitcher.svelte +262 -0
  39. package/src/components/navigation/SidebarItem.svelte +210 -0
  40. package/src/components/navigation/SidebarNavigationItem.svelte +470 -0
  41. package/src/components/navigation/SidebarPopover.svelte +145 -0
  42. package/src/components/navigation/SidebarSearch.svelte +236 -0
  43. package/src/components/navigation/SidebarSection.svelte +158 -0
  44. package/src/components/navigation/SidebarToggle.svelte +86 -0
  45. package/src/components/navigation/Tabs.svelte +239 -0
  46. package/src/components/navigation/WorkspaceMenu.svelte +416 -0
  47. package/src/components/navigation/blocks/NavigationAccountGroup.svelte +396 -0
  48. package/src/components/navigation/blocks/NavigationCustomBlock.svelte +74 -0
  49. package/src/components/navigation/blocks/NavigationGroupSwitcher.svelte +277 -0
  50. package/src/components/navigation/blocks/NavigationSearch.svelte +300 -0
  51. package/src/components/navigation/blocks/NavigationSection.svelte +230 -0
  52. package/src/components/navigation/index.js +22 -0
  53. package/src/components/overlays/ConfirmDialog.svelte +272 -0
  54. package/src/components/overlays/Dropdown.svelte +153 -0
  55. package/src/components/overlays/DropdownDivider.svelte +23 -0
  56. package/src/components/overlays/DropdownItem.svelte +97 -0
  57. package/src/components/overlays/Modal.svelte +232 -0
  58. package/src/components/overlays/Popover.svelte +206 -0
  59. package/src/components/primitives/Avatar.svelte +132 -0
  60. package/src/components/primitives/Badge.svelte +118 -0
  61. package/src/components/primitives/Button.svelte +214 -0
  62. package/src/components/primitives/Card.svelte +104 -0
  63. package/src/components/primitives/Divider.svelte +105 -0
  64. package/src/components/primitives/LazyImage.svelte +104 -0
  65. package/src/components/primitives/Link.svelte +122 -0
  66. package/src/components/primitives/Stat.svelte +197 -0
  67. package/src/components/primitives/StatusBadge.svelte +122 -0
  68. package/src/index.js +183 -0
  69. package/src/tokens/colors.css +157 -0
  70. package/src/tokens/effects.css +128 -0
  71. package/src/tokens/index.css +81 -0
  72. package/src/tokens/spacing.css +49 -0
  73. package/src/tokens/typography.css +79 -0
  74. package/src/utils/cn.svelte.js +175 -0
  75. package/src/utils/highlighter.js +124 -0
  76. package/src/utils/index.js +22 -0
  77. package/src/utils/navigation.svelte.js +423 -0
  78. package/src/utils/reactive.svelte.js +328 -0
  79. package/src/utils/sidebar.svelte.js +211 -0
  80. package/jera.js +0 -135
  81. package/www/components/jera/Input/Input.svelte +0 -63
  82. package/www/components/jera/Input/index.js +0 -1
@@ -0,0 +1,122 @@
1
+ <!--
2
+ @component Link
3
+
4
+ A minimal link component with optional trailing icon.
5
+ Renders as <a> with href, or <button> without.
6
+
7
+ @example Basic link
8
+ <Link href="/about">Learn more</Link>
9
+
10
+ @example Button mode
11
+ <Link onclick={handleClick}>View details</Link>
12
+
13
+ @example Without icon
14
+ <Link href="/docs" showIcon={false}>Documentation</Link>
15
+
16
+ @example Custom icon
17
+ <Link href="/external" external>
18
+ {#snippet icon()}
19
+ <ExternalIcon size={14} />
20
+ {/snippet}
21
+ External Link
22
+ </Link>
23
+ -->
24
+ <script>
25
+ let {
26
+ href = null,
27
+ external = false,
28
+ showIcon = true,
29
+ class: className = '',
30
+ onclick,
31
+ children,
32
+ icon,
33
+ ...rest
34
+ } = $props();
35
+
36
+ const target = external ? '_blank' : undefined;
37
+ const rel = external ? 'noopener noreferrer' : undefined;
38
+ </script>
39
+
40
+ {#if href}
41
+ <a {href} {target} {rel} class="link {className}" {...rest}>
42
+ {#if children}
43
+ {@render children()}
44
+ {/if}
45
+ {#if showIcon}
46
+ {#if icon}
47
+ {@render icon()}
48
+ {:else}
49
+ <svg
50
+ class="link-icon"
51
+ width="14"
52
+ height="14"
53
+ viewBox="0 0 24 24"
54
+ fill="none"
55
+ stroke="currentColor"
56
+ stroke-width="2"
57
+ stroke-linecap="round"
58
+ stroke-linejoin="round"
59
+ >
60
+ <line x1="7" y1="17" x2="17" y2="7"></line>
61
+ <polyline points="7 7 17 7 17 17"></polyline>
62
+ </svg>
63
+ {/if}
64
+ {/if}
65
+ </a>
66
+ {:else}
67
+ <button type="button" class="link {className}" {onclick} {...rest}>
68
+ {#if children}
69
+ {@render children()}
70
+ {/if}
71
+ {#if showIcon}
72
+ {#if icon}
73
+ {@render icon()}
74
+ {:else}
75
+ <svg
76
+ class="link-icon"
77
+ width="14"
78
+ height="14"
79
+ viewBox="0 0 24 24"
80
+ fill="none"
81
+ stroke="currentColor"
82
+ stroke-width="2"
83
+ stroke-linecap="round"
84
+ stroke-linejoin="round"
85
+ >
86
+ <line x1="7" y1="17" x2="17" y2="7"></line>
87
+ <polyline points="7 7 17 7 17 17"></polyline>
88
+ </svg>
89
+ {/if}
90
+ {/if}
91
+ </button>
92
+ {/if}
93
+
94
+ <style>
95
+ .link {
96
+ display: inline-flex;
97
+ align-items: center;
98
+ gap: 0.375rem;
99
+ font-size: var(--text-xs);
100
+ font-weight: 500;
101
+ color: var(--color-base0D);
102
+ text-decoration: none;
103
+ background: transparent;
104
+ border: none;
105
+ padding: 0;
106
+ cursor: pointer;
107
+ transition: color 0.15s ease;
108
+ }
109
+
110
+ .link:hover {
111
+ color: color-mix(in srgb, var(--color-base0D) 80%, transparent);
112
+ }
113
+
114
+ .link-icon {
115
+ flex-shrink: 0;
116
+ transition: transform 0.15s ease;
117
+ }
118
+
119
+ .link:hover .link-icon {
120
+ transform: translate(2px, -2px);
121
+ }
122
+ </style>
@@ -0,0 +1,197 @@
1
+ <!--
2
+ @component Stat
3
+
4
+ A metric display component showing a value and label with optional status indicator.
5
+
6
+ @example Basic
7
+ <Stat value="42" label="Users" />
8
+
9
+ @example With status
10
+ <Stat value="95%" label="Uptime" status="success" />
11
+
12
+ @example With bar
13
+ <Stat value="75" max={100} label="Progress" showBar />
14
+
15
+ @example With unit and secondary value
16
+ <Stat value="12" unit="/15" label="Tasks" status="warning" />
17
+
18
+ @example As link
19
+ <Stat value="8" label="Errors" href="/errors" status="error" />
20
+ -->
21
+ <script>
22
+ let {
23
+ value,
24
+ label,
25
+ unit = '',
26
+ secondary = '',
27
+ status = '',
28
+ size = 'md',
29
+ showBar = false,
30
+ barValue = 0,
31
+ max = 100,
32
+ href = '',
33
+ class: className = '',
34
+ children
35
+ } = $props();
36
+
37
+ const barPercent = $derived(Math.min((barValue || value) / max * 100, 100));
38
+ const Tag = $derived(href ? 'a' : 'div');
39
+ </script>
40
+
41
+ <svelte:element
42
+ this={Tag}
43
+ {href}
44
+ class="stat stat-{size} {status ? `stat-${status}` : ''} {href ? 'stat-link' : ''} {className}"
45
+ >
46
+ {#if status}
47
+ <span class="stat-dot stat-dot-{status}"></span>
48
+ {/if}
49
+
50
+ <div class="stat-content">
51
+ <div class="stat-value">
52
+ {value}{#if unit}<span class="stat-unit">{unit}</span>{/if}
53
+ </div>
54
+
55
+ {#if secondary}
56
+ <div class="stat-secondary">{secondary}</div>
57
+ {/if}
58
+
59
+ <div class="stat-label">{label}</div>
60
+
61
+ {#if showBar}
62
+ <div class="stat-bar">
63
+ <div
64
+ class="stat-bar-fill {status ? `stat-bar-${status}` : ''}"
65
+ style="width: {barPercent}%"
66
+ ></div>
67
+ </div>
68
+ {/if}
69
+
70
+ {#if children}
71
+ <div class="stat-extra">
72
+ {@render children()}
73
+ </div>
74
+ {/if}
75
+ </div>
76
+ </svelte:element>
77
+
78
+ <style>
79
+ .stat {
80
+ display: flex;
81
+ flex-direction: column;
82
+ gap: var(--space-2);
83
+ text-decoration: none;
84
+ color: inherit;
85
+ }
86
+
87
+ .stat-link {
88
+ cursor: pointer;
89
+ }
90
+
91
+ .stat-link:hover .stat-value {
92
+ color: var(--color-base07);
93
+ }
94
+
95
+ /* Size variants */
96
+ .stat-sm .stat-value {
97
+ font-size: var(--text-lg);
98
+ }
99
+
100
+ .stat-sm .stat-label {
101
+ font-size: 10px;
102
+ }
103
+
104
+ .stat-md .stat-value {
105
+ font-size: var(--text-2xl);
106
+ }
107
+
108
+ .stat-md .stat-label {
109
+ font-size: var(--text-xs);
110
+ }
111
+
112
+ .stat-lg .stat-value {
113
+ font-size: var(--text-3xl);
114
+ }
115
+
116
+ .stat-lg .stat-label {
117
+ font-size: var(--text-sm);
118
+ }
119
+
120
+ /* Content */
121
+ .stat-content {
122
+ display: flex;
123
+ flex-direction: column;
124
+ }
125
+
126
+ .stat-value {
127
+ font-weight: 600;
128
+ color: var(--color-base06);
129
+ letter-spacing: -0.02em;
130
+ line-height: 1.2;
131
+ transition: color 0.2s ease;
132
+ }
133
+
134
+ .stat-unit {
135
+ font-size: 0.6em;
136
+ font-weight: 400;
137
+ color: var(--color-base04);
138
+ }
139
+
140
+ .stat-secondary {
141
+ font-size: var(--text-sm);
142
+ color: var(--color-base04);
143
+ margin-top: var(--space-1);
144
+ }
145
+
146
+ .stat-label {
147
+ color: var(--color-base04);
148
+ text-transform: uppercase;
149
+ letter-spacing: 0.05em;
150
+ margin-top: var(--space-1);
151
+ }
152
+
153
+ .stat-extra {
154
+ margin-top: var(--space-2);
155
+ }
156
+
157
+ /* Status dot */
158
+ .stat-dot {
159
+ width: 6px;
160
+ height: 6px;
161
+ border-radius: 50%;
162
+ flex-shrink: 0;
163
+ position: absolute;
164
+ top: var(--space-3);
165
+ right: var(--space-3);
166
+ }
167
+
168
+ .stat-dot-success { background: var(--color-base0B); }
169
+ .stat-dot-warning { background: var(--color-base0A); }
170
+ .stat-dot-error { background: var(--color-base08); }
171
+ .stat-dot-info { background: var(--color-base0D); }
172
+
173
+ /* Status value colors */
174
+ .stat-error .stat-value { color: var(--color-base08); }
175
+ .stat-warning .stat-value { color: var(--color-base0A); }
176
+ .stat-success .stat-value { color: var(--color-base0B); }
177
+
178
+ /* Progress bar */
179
+ .stat-bar {
180
+ height: 4px;
181
+ background: var(--color-base02);
182
+ border-radius: var(--radius-full);
183
+ margin-top: var(--space-3);
184
+ overflow: hidden;
185
+ }
186
+
187
+ .stat-bar-fill {
188
+ height: 100%;
189
+ background: var(--color-base0D);
190
+ border-radius: var(--radius-full);
191
+ transition: width 0.3s ease;
192
+ }
193
+
194
+ .stat-bar-success { background: var(--color-base0B); }
195
+ .stat-bar-warning { background: var(--color-base0A); }
196
+ .stat-bar-error { background: var(--color-base08); }
197
+ </style>
@@ -0,0 +1,122 @@
1
+ <!--
2
+ @component StatusBadge
3
+
4
+ A status indicator badge with semantic color variants.
5
+
6
+ @example Status variants
7
+ <StatusBadge variant="pending">Pending</StatusBadge>
8
+ <StatusBadge variant="approved">Approved</StatusBadge>
9
+ <StatusBadge variant="rejected">Rejected</StatusBadge>
10
+
11
+ @example Role variants
12
+ <StatusBadge variant="owner">Owner</StatusBadge>
13
+ <StatusBadge variant="admin">Admin</StatusBadge>
14
+ <StatusBadge variant="member">Member</StatusBadge>
15
+
16
+ @example Connection status
17
+ <StatusBadge variant="connected">Connected</StatusBadge>
18
+ <StatusBadge variant="disconnected">Disconnected</StatusBadge>
19
+ -->
20
+ <script>
21
+ let {
22
+ variant = 'default',
23
+ size = 'md',
24
+ class: className = '',
25
+ children
26
+ } = $props();
27
+ </script>
28
+
29
+ <span class="status-badge status-badge-{variant} status-badge-{size} {className}">
30
+ {#if children}
31
+ {@render children()}
32
+ {:else}
33
+ {variant}
34
+ {/if}
35
+ </span>
36
+
37
+ <style>
38
+ .status-badge {
39
+ display: inline-flex;
40
+ align-items: center;
41
+ gap: 0.25rem;
42
+ border-radius: var(--radius-md);
43
+ border: 1px solid;
44
+ font-weight: 500;
45
+ transition: background 0.2s ease;
46
+ }
47
+
48
+ /* Sizes */
49
+ .status-badge-sm {
50
+ padding: 0.125rem 0.5rem;
51
+ font-size: var(--text-xs);
52
+ }
53
+
54
+ .status-badge-md {
55
+ padding: 0.25rem 0.5rem;
56
+ font-size: var(--text-xs);
57
+ }
58
+
59
+ .status-badge-lg {
60
+ padding: 0.375rem 0.75rem;
61
+ font-size: var(--text-sm);
62
+ }
63
+
64
+ /* Default */
65
+ .status-badge-default {
66
+ background: color-mix(in srgb, var(--color-base04) 10%, transparent);
67
+ color: var(--color-base04);
68
+ border-color: color-mix(in srgb, var(--color-base04) 30%, transparent);
69
+ }
70
+
71
+ /* Status variants */
72
+ .status-badge-pending {
73
+ background: color-mix(in srgb, var(--color-base0A) 10%, transparent);
74
+ color: var(--color-base0A);
75
+ border-color: color-mix(in srgb, var(--color-base0A) 30%, transparent);
76
+ }
77
+
78
+ .status-badge-approved,
79
+ .status-badge-success,
80
+ .status-badge-connected {
81
+ background: color-mix(in srgb, var(--color-base0B) 10%, transparent);
82
+ color: var(--color-base0B);
83
+ border-color: color-mix(in srgb, var(--color-base0B) 30%, transparent);
84
+ }
85
+
86
+ .status-badge-rejected,
87
+ .status-badge-error,
88
+ .status-badge-disconnected {
89
+ background: color-mix(in srgb, var(--color-base08) 10%, transparent);
90
+ color: var(--color-base08);
91
+ border-color: color-mix(in srgb, var(--color-base08) 30%, transparent);
92
+ }
93
+
94
+ /* Role variants */
95
+ .status-badge-owner,
96
+ .status-badge-primary,
97
+ .status-badge-public {
98
+ background: color-mix(in srgb, var(--color-base0D) 10%, transparent);
99
+ color: var(--color-base0D);
100
+ border-color: color-mix(in srgb, var(--color-base0D) 30%, transparent);
101
+ }
102
+
103
+ .status-badge-admin {
104
+ background: color-mix(in srgb, var(--color-base0C) 10%, transparent);
105
+ color: var(--color-base0C);
106
+ border-color: color-mix(in srgb, var(--color-base0C) 30%, transparent);
107
+ }
108
+
109
+ .status-badge-member,
110
+ .status-badge-private {
111
+ background: color-mix(in srgb, var(--color-base04) 10%, transparent);
112
+ color: var(--color-base04);
113
+ border-color: color-mix(in srgb, var(--color-base04) 30%, transparent);
114
+ }
115
+
116
+ /* Info variant */
117
+ .status-badge-info {
118
+ background: color-mix(in srgb, var(--color-base0D) 10%, transparent);
119
+ color: var(--color-base0D);
120
+ border-color: color-mix(in srgb, var(--color-base0D) 30%, transparent);
121
+ }
122
+ </style>
package/src/index.js ADDED
@@ -0,0 +1,183 @@
1
+ /**
2
+ * @miozu/jera
3
+ *
4
+ * A minimal, reactive component library for Svelte 5.
5
+ * Designed for elegance, scalability, and AI-assisted development.
6
+ *
7
+ * @author Nicholas Glazer <glazer.nicholas@gmail.com>
8
+ * @license MIT
9
+ *
10
+ * @example
11
+ * // Import components
12
+ * import { Button, Input, IconInput, SearchInput, PinInput, RangeSlider, Toast, Modal } from '@miozu/jera';
13
+ *
14
+ * // Import utilities
15
+ * import { cn, cv } from '@miozu/jera';
16
+ *
17
+ * // Import actions
18
+ * import { clickOutside, focusTrap } from '@miozu/jera/actions';
19
+ *
20
+ * // Import tokens (CSS)
21
+ * import '@miozu/jera/tokens';
22
+ */
23
+
24
+ // ============================================
25
+ // COMPONENTS - Primitives
26
+ // ============================================
27
+
28
+ export { default as Button } from './components/primitives/Button.svelte';
29
+ export { default as Badge } from './components/primitives/Badge.svelte';
30
+ export { default as StatusBadge } from './components/primitives/StatusBadge.svelte';
31
+ export { default as Divider } from './components/primitives/Divider.svelte';
32
+ export { default as Avatar } from './components/primitives/Avatar.svelte';
33
+ export { default as Card } from './components/primitives/Card.svelte';
34
+ export { default as Stat } from './components/primitives/Stat.svelte';
35
+ export { default as Link } from './components/primitives/Link.svelte';
36
+ export { default as LazyImage } from './components/primitives/LazyImage.svelte';
37
+
38
+ // ============================================
39
+ // COMPONENTS - Forms
40
+ // ============================================
41
+
42
+ export { default as Input } from './components/forms/Input.svelte';
43
+ export { default as IconInput } from './components/forms/IconInput.svelte';
44
+ export { default as Textarea } from './components/forms/Textarea.svelte';
45
+ export { default as Select } from './components/forms/Select.svelte';
46
+ export { default as Checkbox } from './components/forms/Checkbox.svelte';
47
+ export { default as Switch } from './components/forms/Switch.svelte';
48
+ export { default as NumberInput } from './components/forms/NumberInput.svelte';
49
+ export { default as Radio } from './components/forms/Radio.svelte';
50
+ export { default as RadioGroup } from './components/forms/RadioGroup.svelte';
51
+ export { default as FileUpload } from './components/forms/FileUpload.svelte';
52
+ export { default as RangeSlider } from './components/forms/RangeSlider.svelte';
53
+ export { default as SearchInput } from './components/forms/SearchInput.svelte';
54
+ export { default as PinInput } from './components/forms/PinInput.svelte';
55
+ export { default as Dropzone } from './components/forms/Dropzone.svelte';
56
+
57
+ // ============================================
58
+ // COMPONENTS - Feedback
59
+ // ============================================
60
+
61
+ export {
62
+ default as Toast,
63
+ ToastController,
64
+ createToastContext,
65
+ getToastContext
66
+ } from './components/feedback/Toast.svelte';
67
+
68
+ export { default as Skeleton } from './components/feedback/Skeleton.svelte';
69
+ export { default as ProgressBar } from './components/feedback/ProgressBar.svelte';
70
+ export { default as Spinner } from './components/feedback/Spinner.svelte';
71
+ export { default as EmptyState } from './components/feedback/EmptyState.svelte';
72
+ export { default as Alert } from './components/feedback/Alert.svelte';
73
+
74
+ // ============================================
75
+ // COMPONENTS - Overlays
76
+ // ============================================
77
+
78
+ export { default as Modal } from './components/overlays/Modal.svelte';
79
+ export { default as Popover } from './components/overlays/Popover.svelte';
80
+ export { default as Dropdown } from './components/overlays/Dropdown.svelte';
81
+ export { default as DropdownItem } from './components/overlays/DropdownItem.svelte';
82
+ export { default as DropdownDivider } from './components/overlays/DropdownDivider.svelte';
83
+ export { default as ConfirmDialog } from './components/overlays/ConfirmDialog.svelte';
84
+
85
+ // ============================================
86
+ // COMPONENTS - Navigation
87
+ // ============================================
88
+
89
+ export { default as Tabs } from './components/navigation/Tabs.svelte';
90
+ export { default as Accordion } from './components/navigation/Accordion.svelte';
91
+ export { default as AccordionItem } from './components/navigation/AccordionItem.svelte';
92
+
93
+ // Sidebar Components (Legacy - Enhanced)
94
+ export { default as Sidebar } from './components/navigation/Sidebar.svelte';
95
+ export { default as SidebarSection } from './components/navigation/SidebarSection.svelte';
96
+ export { default as SidebarItem } from './components/navigation/SidebarItem.svelte';
97
+ export { default as SidebarGroup } from './components/navigation/SidebarGroup.svelte';
98
+ export { default as SidebarPopover } from './components/navigation/SidebarPopover.svelte';
99
+ export { default as SidebarAccountItem } from './components/navigation/SidebarAccountItem.svelte';
100
+ export { default as SidebarToggle } from './components/navigation/SidebarToggle.svelte';
101
+ export { default as SidebarSearch } from './components/navigation/SidebarSearch.svelte';
102
+ export { default as SidebarGroupSwitcher } from './components/navigation/SidebarGroupSwitcher.svelte';
103
+ export { default as SidebarAccountGroup } from './components/navigation/SidebarAccountGroup.svelte';
104
+
105
+ // Enterprise Navigation System
106
+ export { default as NavigationContainer } from './components/navigation/NavigationContainer.svelte';
107
+ export { default as SidebarNavigationItem } from './components/navigation/SidebarNavigationItem.svelte';
108
+
109
+ // Navigation Blocks
110
+ export { default as NavigationSearch } from './components/navigation/blocks/NavigationSearch.svelte';
111
+ export { default as NavigationSection } from './components/navigation/blocks/NavigationSection.svelte';
112
+ export { default as NavigationAccountGroup } from './components/navigation/blocks/NavigationAccountGroup.svelte';
113
+ export { default as NavigationGroupSwitcher } from './components/navigation/blocks/NavigationGroupSwitcher.svelte';
114
+ export { default as NavigationCustomBlock } from './components/navigation/blocks/NavigationCustomBlock.svelte';
115
+
116
+ // Enterprise Components
117
+ export { default as WorkspaceMenu } from './components/navigation/WorkspaceMenu.svelte';
118
+
119
+ // ============================================
120
+ // COMPONENTS - Documentation
121
+ // ============================================
122
+
123
+ export { default as CodeBlock } from './components/docs/CodeBlock.svelte';
124
+ export { default as PropsTable } from './components/docs/PropsTable.svelte';
125
+ export { default as SplitPane } from './components/docs/SplitPane.svelte';
126
+ export { default as DocSection } from './components/docs/DocSection.svelte';
127
+
128
+ // ============================================
129
+ // UTILITIES - Class Composition
130
+ // ============================================
131
+
132
+ export { cn, rcn, cv, mergeClasses, when, match } from './utils/cn.svelte.js';
133
+
134
+ // ============================================
135
+ // UTILITIES - Reactive State
136
+ // ============================================
137
+
138
+ export {
139
+ createReactive,
140
+ createDerived,
141
+ ThemeState,
142
+ getTheme,
143
+ resetTheme,
144
+ createComponentState,
145
+ createIdGenerator,
146
+ generateId
147
+ } from './utils/reactive.svelte.js';
148
+
149
+ // Sidebar State Management
150
+ export {
151
+ createSidebarState,
152
+ SIDEBAR_CONTEXT_KEY
153
+ } from './utils/sidebar.svelte.js';
154
+
155
+ // Enterprise Navigation State Management
156
+ export {
157
+ NavigationState,
158
+ createNavigationState,
159
+ NAVIGATION_CONTEXT_KEY
160
+ } from './utils/navigation.svelte.js';
161
+
162
+ // Code Highlighting
163
+ export {
164
+ getHighlighter,
165
+ highlightCode,
166
+ DEFAULT_LANGUAGES
167
+ } from './utils/highlighter.js';
168
+
169
+ // ============================================
170
+ // ACTIONS
171
+ // ============================================
172
+
173
+ export {
174
+ clickOutside,
175
+ focusTrap,
176
+ autoFocus,
177
+ longPress,
178
+ escapeKey,
179
+ portal,
180
+ intersect,
181
+ resize,
182
+ copy
183
+ } from './actions/index.js';