@miozu/jera 0.3.0 → 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 (72) hide show
  1. package/CLAUDE.md +350 -59
  2. package/README.md +30 -22
  3. package/llms.txt +37 -4
  4. package/package.json +12 -2
  5. package/src/components/docs/CodeBlock.svelte +203 -0
  6. package/src/components/docs/DocSection.svelte +120 -0
  7. package/src/components/docs/PropsTable.svelte +136 -0
  8. package/src/components/docs/SplitPane.svelte +98 -0
  9. package/src/components/docs/index.js +14 -0
  10. package/src/components/feedback/Alert.svelte +234 -0
  11. package/src/components/feedback/EmptyState.svelte +6 -6
  12. package/src/components/feedback/ProgressBar.svelte +8 -8
  13. package/src/components/feedback/Skeleton.svelte +4 -4
  14. package/src/components/feedback/Spinner.svelte +1 -1
  15. package/src/components/feedback/Toast.svelte +137 -173
  16. package/src/components/forms/Checkbox.svelte +10 -10
  17. package/src/components/forms/Dropzone.svelte +14 -14
  18. package/src/components/forms/FileUpload.svelte +16 -16
  19. package/src/components/forms/IconInput.svelte +4 -4
  20. package/src/components/forms/Input.svelte +14 -14
  21. package/src/components/forms/NumberInput.svelte +13 -13
  22. package/src/components/forms/PinInput.svelte +8 -8
  23. package/src/components/forms/Radio.svelte +8 -8
  24. package/src/components/forms/RangeSlider.svelte +12 -12
  25. package/src/components/forms/SearchInput.svelte +10 -10
  26. package/src/components/forms/Select.svelte +156 -158
  27. package/src/components/forms/Switch.svelte +4 -4
  28. package/src/components/forms/Textarea.svelte +9 -9
  29. package/src/components/navigation/Accordion.svelte +1 -1
  30. package/src/components/navigation/AccordionItem.svelte +6 -6
  31. package/src/components/navigation/NavigationContainer.svelte +344 -0
  32. package/src/components/navigation/Sidebar.svelte +334 -0
  33. package/src/components/navigation/SidebarAccountGroup.svelte +495 -0
  34. package/src/components/navigation/SidebarAccountItem.svelte +492 -0
  35. package/src/components/navigation/SidebarGroup.svelte +230 -0
  36. package/src/components/navigation/SidebarGroupSwitcher.svelte +262 -0
  37. package/src/components/navigation/SidebarItem.svelte +210 -0
  38. package/src/components/navigation/SidebarNavigationItem.svelte +470 -0
  39. package/src/components/navigation/SidebarPopover.svelte +145 -0
  40. package/src/components/navigation/SidebarSearch.svelte +236 -0
  41. package/src/components/navigation/SidebarSection.svelte +158 -0
  42. package/src/components/navigation/SidebarToggle.svelte +86 -0
  43. package/src/components/navigation/Tabs.svelte +18 -18
  44. package/src/components/navigation/WorkspaceMenu.svelte +416 -0
  45. package/src/components/navigation/blocks/NavigationAccountGroup.svelte +396 -0
  46. package/src/components/navigation/blocks/NavigationCustomBlock.svelte +74 -0
  47. package/src/components/navigation/blocks/NavigationGroupSwitcher.svelte +277 -0
  48. package/src/components/navigation/blocks/NavigationSearch.svelte +300 -0
  49. package/src/components/navigation/blocks/NavigationSection.svelte +230 -0
  50. package/src/components/navigation/index.js +22 -0
  51. package/src/components/overlays/ConfirmDialog.svelte +18 -18
  52. package/src/components/overlays/Dropdown.svelte +2 -2
  53. package/src/components/overlays/DropdownDivider.svelte +1 -1
  54. package/src/components/overlays/DropdownItem.svelte +5 -5
  55. package/src/components/overlays/Modal.svelte +13 -13
  56. package/src/components/overlays/Popover.svelte +3 -3
  57. package/src/components/primitives/Avatar.svelte +12 -12
  58. package/src/components/primitives/Badge.svelte +7 -7
  59. package/src/components/primitives/Button.svelte +126 -174
  60. package/src/components/primitives/Card.svelte +15 -15
  61. package/src/components/primitives/Divider.svelte +3 -3
  62. package/src/components/primitives/LazyImage.svelte +1 -1
  63. package/src/components/primitives/Link.svelte +2 -2
  64. package/src/components/primitives/Stat.svelte +197 -0
  65. package/src/components/primitives/StatusBadge.svelte +24 -24
  66. package/src/index.js +62 -7
  67. package/src/tokens/colors.css +96 -128
  68. package/src/utils/highlighter.js +124 -0
  69. package/src/utils/index.js +7 -2
  70. package/src/utils/navigation.svelte.js +423 -0
  71. package/src/utils/reactive.svelte.js +126 -37
  72. package/src/utils/sidebar.svelte.js +211 -0
@@ -0,0 +1,234 @@
1
+ <!--
2
+ @component Alert
3
+
4
+ An inline alert/notice banner for displaying messages.
5
+ Different from Toast (which is transient) - Alert stays visible in the layout.
6
+
7
+ @example Basic
8
+ <Alert variant="info">This is an informational message.</Alert>
9
+
10
+ @example With title
11
+ <Alert variant="warning" title="Warning">
12
+ Please review your settings before continuing.
13
+ </Alert>
14
+
15
+ @example Dismissible
16
+ <Alert variant="error" dismissible onclose={() => showAlert = false}>
17
+ An error occurred while processing your request.
18
+ </Alert>
19
+
20
+ @example With icon snippet
21
+ <Alert variant="success">
22
+ {#snippet icon()}
23
+ <CheckIcon size={16} />
24
+ {/snippet}
25
+ Your changes have been saved successfully.
26
+ </Alert>
27
+
28
+ @example With actions
29
+ <Alert variant="info" title="New version available">
30
+ A new version is available for download.
31
+ {#snippet actions()}
32
+ <Button size="sm" variant="primary">Update Now</Button>
33
+ <Button size="sm" variant="ghost">Later</Button>
34
+ {/snippet}
35
+ </Alert>
36
+ -->
37
+ <script>
38
+ let {
39
+ variant = 'info',
40
+ title = '',
41
+ dismissible = false,
42
+ size = 'md',
43
+ class: className = '',
44
+ onclose,
45
+ icon,
46
+ actions,
47
+ children
48
+ } = $props();
49
+
50
+ let visible = $state(true);
51
+
52
+ function handleClose() {
53
+ visible = false;
54
+ onclose?.();
55
+ }
56
+ </script>
57
+
58
+ {#if visible}
59
+ <div
60
+ class="alert alert-{variant} alert-{size} {className}"
61
+ role="alert"
62
+ >
63
+ {#if icon}
64
+ <div class="alert-icon">
65
+ {@render icon()}
66
+ </div>
67
+ {:else}
68
+ <div class="alert-icon alert-icon-default">
69
+ {#if variant === 'success'}
70
+ <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0-1.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zm2.354-7.354a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7 8.793l2.646-2.647a.5.5 0 0 1 .708 0z"/></svg>
71
+ {:else if variant === 'error'}
72
+ <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0-1.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM7.25 5v3.5a.75.75 0 0 0 1.5 0V5a.75.75 0 0 0-1.5 0zm.75 6a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5z"/></svg>
73
+ {:else if variant === 'warning'}
74
+ <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 1.5a.75.75 0 0 1 .65.38l6.25 10.75a.75.75 0 0 1-.65 1.12H1.75a.75.75 0 0 1-.65-1.12L7.35 1.88A.75.75 0 0 1 8 1.5zm0 1.73L2.57 12.25h10.86L8 3.23zM7.25 6v2.5a.75.75 0 0 0 1.5 0V6a.75.75 0 0 0-1.5 0zm.75 5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5z"/></svg>
75
+ {:else}
76
+ <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0-1.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM7.25 5a.75.75 0 0 1 1.5 0v3.5a.75.75 0 0 1-1.5 0V5zm.75 6a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5z"/></svg>
77
+ {/if}
78
+ </div>
79
+ {/if}
80
+
81
+ <div class="alert-content">
82
+ {#if title}
83
+ <div class="alert-title">{title}</div>
84
+ {/if}
85
+ <div class="alert-message">
86
+ {@render children?.()}
87
+ </div>
88
+ {#if actions}
89
+ <div class="alert-actions">
90
+ {@render actions()}
91
+ </div>
92
+ {/if}
93
+ </div>
94
+
95
+ {#if dismissible}
96
+ <button
97
+ type="button"
98
+ class="alert-close"
99
+ onclick={handleClose}
100
+ aria-label="Dismiss"
101
+ >
102
+ <svg viewBox="0 0 16 16" fill="currentColor"><path d="M4.28 3.22a.75.75 0 0 0-1.06 1.06L6.94 8l-3.72 3.72a.75.75 0 1 0 1.06 1.06L8 9.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L9.06 8l3.72-3.72a.75.75 0 0 0-1.06-1.06L8 6.94 4.28 3.22z"/></svg>
103
+ </button>
104
+ {/if}
105
+ </div>
106
+ {/if}
107
+
108
+ <style>
109
+ .alert {
110
+ display: flex;
111
+ align-items: flex-start;
112
+ gap: var(--space-3);
113
+ border-radius: var(--radius-lg);
114
+ border: 1px solid;
115
+ }
116
+
117
+ /* Size variants */
118
+ .alert-sm {
119
+ padding: var(--space-2) var(--space-3);
120
+ }
121
+
122
+ .alert-md {
123
+ padding: var(--space-3) var(--space-4);
124
+ }
125
+
126
+ .alert-lg {
127
+ padding: var(--space-4) var(--space-5);
128
+ }
129
+
130
+ /* Variant colors */
131
+ .alert-info {
132
+ background: color-mix(in srgb, var(--color-base0D) 8%, transparent);
133
+ border-color: color-mix(in srgb, var(--color-base0D) 25%, transparent);
134
+ color: var(--color-base0D);
135
+ }
136
+
137
+ .alert-success {
138
+ background: color-mix(in srgb, var(--color-base0B) 8%, transparent);
139
+ border-color: color-mix(in srgb, var(--color-base0B) 25%, transparent);
140
+ color: var(--color-base0B);
141
+ }
142
+
143
+ .alert-warning {
144
+ background: color-mix(in srgb, var(--color-base0A) 8%, transparent);
145
+ border-color: color-mix(in srgb, var(--color-base0A) 25%, transparent);
146
+ color: var(--color-base0A);
147
+ }
148
+
149
+ .alert-error {
150
+ background: color-mix(in srgb, var(--color-base08) 8%, transparent);
151
+ border-color: color-mix(in srgb, var(--color-base08) 25%, transparent);
152
+ color: var(--color-base08);
153
+ }
154
+
155
+ /* Icon */
156
+ .alert-icon {
157
+ flex-shrink: 0;
158
+ display: flex;
159
+ align-items: center;
160
+ justify-content: center;
161
+ }
162
+
163
+ .alert-icon-default svg {
164
+ width: 16px;
165
+ height: 16px;
166
+ }
167
+
168
+ .alert-lg .alert-icon-default svg {
169
+ width: 20px;
170
+ height: 20px;
171
+ }
172
+
173
+ /* Content */
174
+ .alert-content {
175
+ flex: 1;
176
+ min-width: 0;
177
+ }
178
+
179
+ .alert-title {
180
+ font-weight: 600;
181
+ font-size: var(--text-sm);
182
+ margin-bottom: var(--space-1);
183
+ }
184
+
185
+ .alert-info .alert-title { color: var(--color-base0D); }
186
+ .alert-success .alert-title { color: var(--color-base0B); }
187
+ .alert-warning .alert-title { color: var(--color-base0A); }
188
+ .alert-error .alert-title { color: var(--color-base08); }
189
+
190
+ .alert-message {
191
+ font-size: var(--text-sm);
192
+ color: var(--color-base05);
193
+ line-height: 1.5;
194
+ }
195
+
196
+ .alert-lg .alert-message {
197
+ font-size: var(--text-base);
198
+ }
199
+
200
+ .alert-actions {
201
+ display: flex;
202
+ gap: var(--space-2);
203
+ margin-top: var(--space-3);
204
+ }
205
+
206
+ /* Close button */
207
+ .alert-close {
208
+ flex-shrink: 0;
209
+ display: flex;
210
+ align-items: center;
211
+ justify-content: center;
212
+ width: 24px;
213
+ height: 24px;
214
+ padding: 0;
215
+ margin: calc(var(--space-1) * -1);
216
+ border: none;
217
+ border-radius: var(--radius-md);
218
+ background: transparent;
219
+ color: currentColor;
220
+ opacity: 0.6;
221
+ cursor: pointer;
222
+ transition: opacity 0.2s ease, background 0.2s ease;
223
+ }
224
+
225
+ .alert-close:hover {
226
+ opacity: 1;
227
+ background: color-mix(in srgb, currentColor 10%, transparent);
228
+ }
229
+
230
+ .alert-close svg {
231
+ width: 14px;
232
+ height: 14px;
233
+ }
234
+ </style>
@@ -92,8 +92,8 @@
92
92
  height: 4rem;
93
93
  margin-bottom: var(--space-6);
94
94
  border-radius: 9999px;
95
- background: var(--color-surface);
96
- color: var(--color-text-muted);
95
+ background: var(--color-base01);
96
+ color: var(--color-base04);
97
97
  transition: background 0.3s ease, color 0.3s ease, transform 0.3s ease;
98
98
  }
99
99
 
@@ -110,8 +110,8 @@
110
110
  }
111
111
 
112
112
  .empty-state:hover .empty-state-icon {
113
- background: var(--color-surface-hover);
114
- color: var(--color-text);
113
+ background: var(--color-base02);
114
+ color: var(--color-base05);
115
115
  transform: scale(1.05);
116
116
  }
117
117
 
@@ -131,7 +131,7 @@
131
131
  margin: 0 0 var(--space-2) 0;
132
132
  font-size: var(--text-lg);
133
133
  font-weight: 600;
134
- color: var(--color-text-strong);
134
+ color: var(--color-base07);
135
135
  line-height: 1.3;
136
136
  }
137
137
 
@@ -147,7 +147,7 @@
147
147
  .empty-state-description {
148
148
  margin: 0;
149
149
  font-size: var(--text-sm);
150
- color: var(--color-text-muted);
150
+ color: var(--color-base04);
151
151
  line-height: 1.5;
152
152
  max-width: 20rem;
153
153
  }
@@ -27,11 +27,11 @@
27
27
  const percentage = $derived(Math.min(100, Math.max(0, (value / max) * 100)));
28
28
 
29
29
  const variantColors = {
30
- primary: 'var(--color-primary)',
31
- success: 'var(--color-success)',
32
- warning: 'var(--color-warning)',
33
- error: 'var(--color-error)',
34
- info: 'var(--color-info)'
30
+ primary: 'var(--color-base0D)',
31
+ success: 'var(--color-base0B)',
32
+ warning: 'var(--color-base0A)',
33
+ error: 'var(--color-base08)',
34
+ info: 'var(--color-base0D)'
35
35
  };
36
36
 
37
37
  const barColor = $derived(variantColors[variant] || variantColors.primary);
@@ -78,18 +78,18 @@
78
78
 
79
79
  .progress-label {
80
80
  font-size: 0.875rem;
81
- color: var(--color-text);
81
+ color: var(--color-base05);
82
82
  }
83
83
 
84
84
  .progress-value {
85
85
  font-size: 0.875rem;
86
86
  font-weight: 500;
87
- color: var(--color-text-strong);
87
+ color: var(--color-base07);
88
88
  }
89
89
 
90
90
  .progress {
91
91
  width: 100%;
92
- background: var(--color-surface-alt);
92
+ background: var(--color-base02);
93
93
  border-radius: 9999px;
94
94
  overflow: hidden;
95
95
  }
@@ -63,7 +63,7 @@
63
63
 
64
64
  <style>
65
65
  .skeleton {
66
- background: var(--color-surface-alt);
66
+ background: var(--color-base02);
67
67
  border-radius: 0.25rem;
68
68
  }
69
69
 
@@ -92,9 +92,9 @@
92
92
  .skeleton-animate {
93
93
  background: linear-gradient(
94
94
  90deg,
95
- var(--color-surface-alt) 0%,
96
- var(--color-border) 50%,
97
- var(--color-surface-alt) 100%
95
+ var(--color-base02) 0%,
96
+ var(--color-base03) 50%,
97
+ var(--color-base02) 100%
98
98
  );
99
99
  background-size: 200% 100%;
100
100
  animation: skeleton-shimmer 1.5s ease-in-out infinite;
@@ -10,7 +10,7 @@
10
10
  <Spinner size="lg" />
11
11
 
12
12
  @example Custom color
13
- <Spinner color="var(--color-success)" />
13
+ <Spinner color="var(--color-base0B)" />
14
14
  -->
15
15
  <script>
16
16
  let {