@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,230 @@
1
+ <!--
2
+ @component NavigationSection
3
+
4
+ Enterprise navigation section block with recursive item support.
5
+ -->
6
+ <script>
7
+ import { getContext } from 'svelte';
8
+ import { slide, fly } from 'svelte/transition';
9
+ import { cubicOut } from 'svelte/easing';
10
+ import { SIDEBAR_CONTEXT_KEY } from '../../../utils/sidebar.svelte.js';
11
+ import { NAVIGATION_CONTEXT_KEY } from '../../../utils/navigation.svelte.js';
12
+ import SidebarNavigationItem from '../SidebarNavigationItem.svelte';
13
+
14
+ let {
15
+ block,
16
+ navigationState = null,
17
+ onEvent = null
18
+ } = $props();
19
+
20
+ const sidebar = getContext(SIDEBAR_CONTEXT_KEY);
21
+ const navContext = getContext(NAVIGATION_CONTEXT_KEY);
22
+ const navState = navigationState || navContext;
23
+
24
+ const isCollapsed = $derived(sidebar?.collapsed ?? false);
25
+
26
+ // Block configuration with defaults
27
+ const config = $derived({
28
+ title: block.title || '',
29
+ collapsible: block.collapsible ?? true,
30
+ defaultExpanded: block.defaultExpanded ?? true,
31
+ showCount: block.showCount ?? true,
32
+ maxDepth: block.maxDepth ?? 10,
33
+ searchable: block.searchable ?? true,
34
+ ...block.config
35
+ });
36
+
37
+ // Items from block configuration
38
+ const items = $derived(block.items || []);
39
+
40
+ // Filter items if searchable and search is active
41
+ const filteredItems = $derived.by(() => {
42
+ if (!config.searchable || !navState?.searchQuery) return items;
43
+ return navState.filteredItems.filter(item =>
44
+ items.some(blockItem => blockItem.id === item.id)
45
+ );
46
+ });
47
+
48
+ // Section expansion state
49
+ const sectionId = block.id;
50
+ const isExpanded = $derived(
51
+ config.collapsible
52
+ ? (navState?.isSectionExpanded(sectionId) ?? config.defaultExpanded)
53
+ : true
54
+ );
55
+
56
+ function toggleSection() {
57
+ if (!config.collapsible) return;
58
+
59
+ if (navState) {
60
+ navState.toggleSection(sectionId);
61
+ }
62
+
63
+ if (onEvent) {
64
+ onEvent('section_toggled', { sectionId, expanded: !isExpanded });
65
+ }
66
+ }
67
+
68
+ function handleItemNavigate(item, event) {
69
+ if (onEvent) {
70
+ const result = onEvent('item_navigate', { item, event });
71
+ if (result === false) return false;
72
+ }
73
+
74
+ return true; // Continue with default navigation
75
+ }
76
+
77
+ function handleItemToggle(item, expanded) {
78
+ if (onEvent) {
79
+ onEvent('item_toggled', { item, expanded });
80
+ }
81
+ }
82
+ </script>
83
+
84
+ <div class="nav-section-block">
85
+ {#if config.title && !isCollapsed}
86
+ <button
87
+ class="section-header"
88
+ class:collapsible={config.collapsible}
89
+ onclick={toggleSection}
90
+ disabled={!config.collapsible}
91
+ aria-expanded={config.collapsible ? isExpanded : undefined}
92
+ >
93
+ <span class="section-title">{config.title}</span>
94
+
95
+ {#if config.showCount && filteredItems.length > 0}
96
+ <span class="section-count">{filteredItems.length}</span>
97
+ {/if}
98
+
99
+ {#if config.collapsible}
100
+ <svg
101
+ class="section-chevron {isExpanded ? 'expanded' : 'collapsed'}"
102
+ xmlns="http://www.w3.org/2000/svg"
103
+ width="14"
104
+ height="14"
105
+ viewBox="0 0 24 24"
106
+ fill="none"
107
+ stroke="currentColor"
108
+ stroke-width="2"
109
+ stroke-linecap="round"
110
+ stroke-linejoin="round"
111
+ >
112
+ <polyline points="6 9 12 15 18 9"></polyline>
113
+ </svg>
114
+ {/if}
115
+ </button>
116
+ {:else if config.title && isCollapsed}
117
+ <div class="section-divider" title={config.title}></div>
118
+ {/if}
119
+
120
+ {#if isExpanded}
121
+ <ul
122
+ class="section-items"
123
+ transition:slide={{ duration: 200, easing: cubicOut }}
124
+ >
125
+ {#each filteredItems as item (item.id)}
126
+ <SidebarNavigationItem
127
+ {item}
128
+ {navigationState}
129
+ maxDepth={config.maxDepth}
130
+ onNavigate={handleItemNavigate}
131
+ onToggle={handleItemToggle}
132
+ />
133
+ {/each}
134
+
135
+ {#if filteredItems.length === 0 && items.length > 0}
136
+ <li class="no-results">
137
+ <div class="no-results-content">
138
+ <span class="no-results-text">No matching items</span>
139
+ </div>
140
+ </li>
141
+ {/if}
142
+ </ul>
143
+ {/if}
144
+ </div>
145
+
146
+ <style>
147
+ .nav-section-block {
148
+ margin-bottom: var(--nav-block-spacing, 0.5rem);
149
+ }
150
+
151
+ .section-header {
152
+ width: 100%;
153
+ display: flex;
154
+ align-items: center;
155
+ gap: 0.5rem;
156
+ padding: 0.5rem 0.75rem;
157
+ font-size: 0.75rem;
158
+ font-weight: 600;
159
+ color: var(--color-text-muted, var(--color-base04, #737E99));
160
+ text-transform: uppercase;
161
+ letter-spacing: 0.05em;
162
+ border: none;
163
+ background: transparent;
164
+ font-family: inherit;
165
+ justify-content: flex-start;
166
+ transition: all var(--nav-transition-duration, 200ms) var(--nav-transition-easing, ease);
167
+ cursor: default;
168
+ }
169
+
170
+ .section-header.collapsible {
171
+ cursor: pointer;
172
+ }
173
+
174
+ .section-header.collapsible:hover {
175
+ color: var(--color-text, var(--color-base05, #D0D2DB));
176
+ }
177
+
178
+ .section-title {
179
+ flex: 1;
180
+ text-align: left;
181
+ }
182
+
183
+ .section-count {
184
+ padding: 0.125rem 0.375rem;
185
+ font-size: 0.625rem;
186
+ background: var(--color-surface-alt, var(--color-base02, #3E4359));
187
+ color: var(--color-text-muted, var(--color-base05, #D0D2DB));
188
+ border-radius: 9999px;
189
+ flex-shrink: 0;
190
+ }
191
+
192
+ .section-chevron {
193
+ color: var(--color-text-muted, var(--color-base04, #737E99));
194
+ transition: all var(--nav-transition-duration, 200ms) var(--nav-transition-easing, ease);
195
+ flex-shrink: 0;
196
+ }
197
+
198
+ .section-chevron.expanded {
199
+ transform: rotate(180deg);
200
+ }
201
+
202
+ .section-divider {
203
+ margin: 0.5rem 0.75rem;
204
+ border-bottom: 1px solid color-mix(in srgb, var(--color-base03, #565E78) 30%, transparent);
205
+ height: 1px;
206
+ }
207
+
208
+ .section-items {
209
+ list-style: none;
210
+ margin: 0;
211
+ padding: 0;
212
+ display: flex;
213
+ flex-direction: column;
214
+ }
215
+
216
+ .no-results {
217
+ list-style: none;
218
+ }
219
+
220
+ .no-results-content {
221
+ padding: 1rem 0.75rem;
222
+ text-align: center;
223
+ }
224
+
225
+ .no-results-text {
226
+ font-size: 0.875rem;
227
+ color: var(--color-text-muted, var(--color-base05, #D0D2DB));
228
+ font-style: italic;
229
+ }
230
+ </style>
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Navigation Components
3
+ *
4
+ * Reusable navigation components including sidebars, tabs, and accordions.
5
+ */
6
+
7
+ // Sidebar Components
8
+ export { default as Sidebar } from './Sidebar.svelte';
9
+ export { default as SidebarSection } from './SidebarSection.svelte';
10
+ export { default as SidebarItem } from './SidebarItem.svelte';
11
+ export { default as SidebarGroup } from './SidebarGroup.svelte';
12
+ export { default as SidebarPopover } from './SidebarPopover.svelte';
13
+ export { default as SidebarAccountItem } from './SidebarAccountItem.svelte';
14
+ export { default as SidebarToggle } from './SidebarToggle.svelte';
15
+
16
+ // Enterprise Components
17
+ export { default as WorkspaceMenu } from './WorkspaceMenu.svelte';
18
+
19
+ // Other Navigation Components
20
+ export { default as Tabs } from './Tabs.svelte';
21
+ export { default as Accordion } from './Accordion.svelte';
22
+ export { default as AccordionItem } from './AccordionItem.svelte';
@@ -49,28 +49,28 @@
49
49
 
50
50
  const variantConfig = $derived({
51
51
  danger: {
52
- iconColor: 'var(--color-error)',
53
- iconBg: 'color-mix(in srgb, var(--color-error) 10%, transparent)',
52
+ iconColor: 'var(--color-base08)',
53
+ iconBg: 'color-mix(in srgb, var(--color-base08) 10%, transparent)',
54
54
  buttonVariant: 'danger'
55
55
  },
56
56
  warning: {
57
- iconColor: 'var(--color-warning)',
58
- iconBg: 'color-mix(in srgb, var(--color-warning) 10%, transparent)',
57
+ iconColor: 'var(--color-base0A)',
58
+ iconBg: 'color-mix(in srgb, var(--color-base0A) 10%, transparent)',
59
59
  buttonVariant: 'primary'
60
60
  },
61
61
  success: {
62
- iconColor: 'var(--color-success)',
63
- iconBg: 'color-mix(in srgb, var(--color-success) 10%, transparent)',
62
+ iconColor: 'var(--color-base0B)',
63
+ iconBg: 'color-mix(in srgb, var(--color-base0B) 10%, transparent)',
64
64
  buttonVariant: 'success'
65
65
  },
66
66
  info: {
67
- iconColor: 'var(--color-primary)',
68
- iconBg: 'color-mix(in srgb, var(--color-primary) 10%, transparent)',
67
+ iconColor: 'var(--color-base0D)',
68
+ iconBg: 'color-mix(in srgb, var(--color-base0D) 10%, transparent)',
69
69
  buttonVariant: 'primary'
70
70
  }
71
71
  }[variant] || {
72
- iconColor: 'var(--color-primary)',
73
- iconBg: 'color-mix(in srgb, var(--color-primary) 10%, transparent)',
72
+ iconColor: 'var(--color-base0D)',
73
+ iconBg: 'color-mix(in srgb, var(--color-base0D) 10%, transparent)',
74
74
  buttonVariant: 'primary'
75
75
  });
76
76
 
@@ -179,14 +179,14 @@
179
179
  content: '';
180
180
  position: absolute;
181
181
  inset: 0;
182
- background: color-mix(in srgb, var(--color-bg) 80%, transparent);
182
+ background: color-mix(in srgb, var(--color-base00) 80%, transparent);
183
183
  backdrop-filter: blur(8px);
184
184
  }
185
185
 
186
186
  .confirm-dialog {
187
187
  position: relative;
188
- background: var(--color-surface);
189
- border: 1px solid var(--color-border-muted);
188
+ background: var(--color-base01);
189
+ border: 1px solid var(--color-base02);
190
190
  border-radius: var(--radius-xl);
191
191
  box-shadow: var(--shadow-2xl);
192
192
  width: 100%;
@@ -214,14 +214,14 @@
214
214
  background: transparent;
215
215
  border: none;
216
216
  border-radius: var(--radius-lg);
217
- color: var(--color-text-muted);
217
+ color: var(--color-base04);
218
218
  cursor: pointer;
219
219
  transition: background 0.15s ease, color 0.15s ease;
220
220
  }
221
221
 
222
222
  .confirm-close:hover {
223
- background: var(--color-surface-hover);
224
- color: var(--color-text);
223
+ background: var(--color-base02);
224
+ color: var(--color-base05);
225
225
  }
226
226
 
227
227
  .confirm-content {
@@ -253,13 +253,13 @@
253
253
  margin: 0 0 var(--space-2) 0;
254
254
  font-size: var(--text-lg);
255
255
  font-weight: 600;
256
- color: var(--color-text-strong);
256
+ color: var(--color-base07);
257
257
  }
258
258
 
259
259
  .confirm-message {
260
260
  margin: 0;
261
261
  font-size: var(--text-sm);
262
- color: var(--color-text-muted);
262
+ color: var(--color-base04);
263
263
  line-height: 1.5;
264
264
  }
265
265
 
@@ -77,8 +77,8 @@
77
77
  z-index: 50;
78
78
  min-width: 10rem;
79
79
  padding: var(--space-1);
80
- background: var(--color-bg);
81
- border: 1px solid var(--color-border);
80
+ background: var(--color-base00);
81
+ border: 1px solid var(--color-base03);
82
82
  border-radius: var(--radius-lg);
83
83
  box-shadow: var(--shadow-lg);
84
84
  animation: dropdown-enter 0.15s ease-out;
@@ -18,6 +18,6 @@
18
18
  .dropdown-divider {
19
19
  height: 1px;
20
20
  margin: var(--space-1) 0;
21
- background: var(--color-border-muted);
21
+ background: var(--color-base02);
22
22
  }
23
23
  </style>
@@ -54,7 +54,7 @@
54
54
  padding: var(--space-2) var(--space-3);
55
55
  font-size: var(--text-sm);
56
56
  text-align: left;
57
- color: var(--color-text);
57
+ color: var(--color-base05);
58
58
  background: transparent;
59
59
  border: none;
60
60
  border-radius: var(--radius-md);
@@ -63,12 +63,12 @@
63
63
  }
64
64
 
65
65
  .dropdown-item:hover:not(:disabled) {
66
- background: var(--color-surface-hover);
66
+ background: var(--color-base02);
67
67
  }
68
68
 
69
69
  .dropdown-item:focus-visible {
70
70
  outline: none;
71
- background: var(--color-surface-hover);
71
+ background: var(--color-base02);
72
72
  }
73
73
 
74
74
  .dropdown-item-disabled {
@@ -77,11 +77,11 @@
77
77
  }
78
78
 
79
79
  .dropdown-item-danger {
80
- color: var(--color-error);
80
+ color: var(--color-base08);
81
81
  }
82
82
 
83
83
  .dropdown-item-danger:hover:not(:disabled) {
84
- background: color-mix(in srgb, var(--color-error) 10%, transparent);
84
+ background: color-mix(in srgb, var(--color-base08) 10%, transparent);
85
85
  }
86
86
 
87
87
  .dropdown-item-icon {
@@ -33,11 +33,11 @@
33
33
 
34
34
  // Variant styles for the icon container
35
35
  const iconVariants = {
36
- default: { bg: 'var(--color-surface-alt)', color: 'var(--color-text)' },
37
- danger: { bg: 'color-mix(in srgb, var(--color-error) 10%, transparent)', color: 'var(--color-error)' },
38
- warning: { bg: 'color-mix(in srgb, var(--color-warning) 10%, transparent)', color: 'var(--color-warning)' },
39
- success: { bg: 'color-mix(in srgb, var(--color-success) 10%, transparent)', color: 'var(--color-success)' },
40
- info: { bg: 'color-mix(in srgb, var(--color-info) 10%, transparent)', color: 'var(--color-info)' }
36
+ default: { bg: 'var(--color-base02)', color: 'var(--color-base05)' },
37
+ danger: { bg: 'color-mix(in srgb, var(--color-base08) 10%, transparent)', color: 'var(--color-base08)' },
38
+ warning: { bg: 'color-mix(in srgb, var(--color-base0A) 10%, transparent)', color: 'var(--color-base0A)' },
39
+ success: { bg: 'color-mix(in srgb, var(--color-base0B) 10%, transparent)', color: 'var(--color-base0B)' },
40
+ info: { bg: 'color-mix(in srgb, var(--color-base0D) 10%, transparent)', color: 'var(--color-base0D)' }
41
41
  };
42
42
 
43
43
  const iconStyle = $derived(iconVariants[variant] || iconVariants.default);
@@ -134,16 +134,16 @@
134
134
  display: flex;
135
135
  align-items: center;
136
136
  justify-content: center;
137
- background: color-mix(in srgb, var(--color-bg) 80%, transparent);
137
+ background: color-mix(in srgb, var(--color-base00) 80%, transparent);
138
138
  backdrop-filter: blur(4px);
139
139
  }
140
140
 
141
141
  .modal {
142
142
  position: relative;
143
- background: var(--color-surface);
143
+ background: var(--color-base01);
144
144
  border-radius: 0.75rem;
145
145
  box-shadow: var(--shadow-2xl);
146
- border: 1px solid var(--color-border);
146
+ border: 1px solid var(--color-base03);
147
147
  margin: 1rem;
148
148
  animation: modal-enter 0.2s ease-out;
149
149
  }
@@ -163,14 +163,14 @@
163
163
  background: transparent;
164
164
  border: none;
165
165
  border-radius: 0.5rem;
166
- color: var(--color-text);
166
+ color: var(--color-base05);
167
167
  cursor: pointer;
168
168
  transition: background 0.15s, color 0.15s;
169
169
  }
170
170
 
171
171
  .modal-close:hover {
172
- background: var(--color-surface-alt);
173
- color: var(--color-text-strong);
172
+ background: var(--color-base02);
173
+ color: var(--color-base07);
174
174
  }
175
175
 
176
176
  .modal-content {
@@ -202,13 +202,13 @@
202
202
  margin: 0 0 0.5rem 0;
203
203
  font-size: 1.125rem;
204
204
  font-weight: 600;
205
- color: var(--color-text-strong);
205
+ color: var(--color-base07);
206
206
  line-height: 1.4;
207
207
  }
208
208
 
209
209
  .modal-body {
210
210
  font-size: 0.875rem;
211
- color: var(--color-text);
211
+ color: var(--color-base05);
212
212
  line-height: 1.5;
213
213
  }
214
214
 
@@ -192,13 +192,13 @@
192
192
  max-width: 18rem;
193
193
  width: max-content;
194
194
  padding: 0.5rem 0.75rem;
195
- background: var(--color-surface);
196
- color: var(--color-text-strong);
195
+ background: var(--color-base01);
196
+ color: var(--color-base07);
197
197
  font-size: 0.875rem;
198
198
  line-height: 1.5;
199
199
  border-radius: 0.5rem;
200
200
  box-shadow: var(--shadow-lg);
201
- border: 1px solid var(--color-border);
201
+ border: 1px solid var(--color-base03);
202
202
  pointer-events: auto;
203
203
  word-wrap: break-word;
204
204
  hyphens: auto;
@@ -36,20 +36,20 @@
36
36
 
37
37
  // Generate consistent color from name
38
38
  const bgColor = $derived.by(() => {
39
- if (!name) return 'var(--color-border)';
39
+ if (!name) return 'var(--color-base03)';
40
40
  let hash = 0;
41
41
  for (let i = 0; i < name.length; i++) {
42
42
  hash = name.charCodeAt(i) + ((hash << 5) - hash);
43
43
  }
44
44
  const colors = [
45
- 'var(--color-error)', // red
45
+ 'var(--color-base08)', // red
46
46
  'var(--orange)', // orange
47
- 'var(--color-success)', // green
48
- 'var(--color-warning)', // yellow
49
- 'var(--color-info)', // blue
50
- 'var(--color-primary)', // magenta
47
+ 'var(--color-base0B)', // green
48
+ 'var(--color-base0A)', // yellow
49
+ 'var(--color-base0D)', // blue
50
+ 'var(--color-base0D)', // magenta
51
51
  'var(--peach)', // peach
52
- 'var(--color-accent)' // cyan
52
+ 'var(--color-base0E)' // cyan
53
53
  ];
54
54
  return colors[Math.abs(hash) % colors.length];
55
55
  });
@@ -122,11 +122,11 @@
122
122
  min-width: 8px;
123
123
  min-height: 8px;
124
124
  border-radius: 50%;
125
- border: 2px solid var(--color-bg);
125
+ border: 2px solid var(--color-base00);
126
126
  }
127
127
 
128
- .avatar-status-online { background: var(--color-success); }
129
- .avatar-status-offline { background: var(--color-text-muted); }
130
- .avatar-status-busy { background: var(--color-error); }
131
- .avatar-status-away { background: var(--color-warning); }
128
+ .avatar-status-online { background: var(--color-base0B); }
129
+ .avatar-status-offline { background: var(--color-base04); }
130
+ .avatar-status-busy { background: var(--color-base08); }
131
+ .avatar-status-away { background: var(--color-base0A); }
132
132
  </style>
@@ -32,13 +32,13 @@
32
32
 
33
33
  variants: {
34
34
  variant: {
35
- default: 'bg-[var(--color-surface-alt)] text-[var(--color-text)]',
36
- primary: 'bg-[color-mix(in_srgb,var(--color-primary)_15%,transparent)] text-[var(--color-primary)]',
37
- secondary: 'bg-[color-mix(in_srgb,var(--color-secondary)_15%,transparent)] text-[var(--color-secondary)]',
38
- success: 'bg-[color-mix(in_srgb,var(--color-success)_15%,transparent)] text-[var(--color-success)]',
39
- warning: 'bg-[color-mix(in_srgb,var(--color-warning)_15%,transparent)] text-[var(--color-warning)]',
40
- error: 'bg-[color-mix(in_srgb,var(--color-error)_15%,transparent)] text-[var(--color-error)]',
41
- info: 'bg-[color-mix(in_srgb,var(--color-info)_15%,transparent)] text-[var(--color-info)]'
35
+ default: 'bg-[var(--color-base02)] text-[var(--color-base05)]',
36
+ primary: 'bg-[color-mix(in_srgb,var(--color-base0D)_15%,transparent)] text-[var(--color-base0D)]',
37
+ secondary: 'bg-[color-mix(in_srgb,var(--color-base0C)_15%,transparent)] text-[var(--color-base0C)]',
38
+ success: 'bg-[color-mix(in_srgb,var(--color-base0B)_15%,transparent)] text-[var(--color-base0B)]',
39
+ warning: 'bg-[color-mix(in_srgb,var(--color-base0A)_15%,transparent)] text-[var(--color-base0A)]',
40
+ error: 'bg-[color-mix(in_srgb,var(--color-base08)_15%,transparent)] text-[var(--color-base08)]',
41
+ info: 'bg-[color-mix(in_srgb,var(--color-base0D)_15%,transparent)] text-[var(--color-base0D)]'
42
42
  },
43
43
 
44
44
  size: {