@celestia-island/hikari 0.4.4 → 0.4.5

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 (152) hide show
  1. package/README.md +1 -1
  2. package/package.json +16 -7
  3. package/src/DemoApp.vue +1 -1
  4. package/src/components/HkAdminHeader.tsx +205 -0
  5. package/src/components/HkAdminShell.tsx +85 -0
  6. package/src/components/HkAdminTablePage.tsx +70 -0
  7. package/src/components/HkAuthCard.tsx +36 -0
  8. package/src/components/HkAuthSubmitButton.scss +12 -0
  9. package/src/components/HkAuthSubmitButton.tsx +94 -0
  10. package/src/components/HkAvatar.scss +93 -0
  11. package/src/components/HkAvatar.tsx +1 -1
  12. package/src/components/HkBreadcrumb.scss +624 -0
  13. package/src/components/HkBreadcrumb.tsx +1 -1
  14. package/src/components/HkCard.scss +1 -1
  15. package/src/components/HkCheckbox.tsx +2 -1
  16. package/src/components/HkCollapse.scss +50 -0
  17. package/src/components/HkCollapse.tsx +1 -1
  18. package/src/components/HkColorSchemeDialog.scss +16 -0
  19. package/src/components/HkColorSchemeDialog.tsx +237 -0
  20. package/src/components/HkConnectionInfo.ts +80 -0
  21. package/src/components/HkConnectionStatus.tsx +133 -0
  22. package/src/components/HkCountdownDigit.tsx +97 -0
  23. package/src/components/HkDateTimePicker.tsx +7 -1
  24. package/src/components/HkErrorBoundary.tsx +4 -1
  25. package/src/components/HkIcon.scss +123 -0
  26. package/src/components/HkIcon.tsx +7 -23
  27. package/src/components/HkIconButton.scss +170 -0
  28. package/src/components/HkIconButton.tsx +2 -2
  29. package/src/components/HkIconButtonVars.scss +176 -0
  30. package/src/components/HkInput.scss +22 -3
  31. package/src/components/HkInput.tsx +41 -1
  32. package/src/components/HkKeywordSearchModal.tsx +10 -7
  33. package/src/components/HkLocalePicker.tsx +113 -0
  34. package/src/components/HkMediaControlBar.tsx +14 -7
  35. package/src/components/HkMinimap.tsx +10 -2
  36. package/src/components/HkModal.tsx +2 -23
  37. package/src/components/HkNavItem.tsx +2 -1
  38. package/src/components/HkNavSidebar.tsx +99 -0
  39. package/src/components/HkPageHeader.tsx +40 -0
  40. package/src/components/HkPasswordInput.scss +14 -12
  41. package/src/components/HkPasswordInput.test.ts +242 -0
  42. package/src/components/HkPasswordInput.tsx +236 -41
  43. package/src/components/HkPopupSelect.scss +3 -3
  44. package/src/components/HkPopupSelect.tsx +2 -1
  45. package/src/components/HkSearchInput.tsx +2 -2
  46. package/src/components/HkSecretRevealModal.scss +61 -0
  47. package/src/components/HkSecretRevealModal.tsx +91 -0
  48. package/src/components/HkSelect.scss +4 -4
  49. package/src/components/HkSelect.tsx +2 -0
  50. package/src/components/HkSelectionGrid.tsx +2 -1
  51. package/src/components/HkStatusBar.tsx +235 -0
  52. package/src/components/HkTag.tsx +2 -1
  53. package/src/components/HkThemeToggle.scss +130 -0
  54. package/src/components/HkThemeToggle.tsx +160 -0
  55. package/src/components/HkTimeline.tsx +2 -1
  56. package/src/components/HkToast.tsx +4 -1
  57. package/src/components/HkTrendChart.tsx +27 -16
  58. package/src/components/HkZoomToolbar.tsx +4 -1
  59. package/src/components/_hikari-vars.scss +4 -0
  60. package/src/composables/highlightLanguages.ts +109 -0
  61. package/src/composables/iconRegistry.ts +127 -0
  62. package/src/composables/messaging/browserTransport.ts +96 -0
  63. package/src/composables/messaging/index.ts +204 -0
  64. package/src/composables/messaging/messaging.test.ts +256 -0
  65. package/src/composables/messaging/toastTransport.ts +26 -0
  66. package/src/composables/messaging/types.ts +115 -0
  67. package/src/composables/useActionBar.ts +66 -0
  68. package/src/composables/useConnectionProbe.ts +126 -0
  69. package/src/composables/useDeferredTransition.ts +16 -0
  70. package/src/composables/useEngineHealth.ts +69 -0
  71. package/src/composables/useHighlight.ts +124 -0
  72. package/src/composables/usePageTitle.ts +37 -0
  73. package/src/composables/useReducedMotion.ts +34 -0
  74. package/src/composables/useResourceListModal.tsx +147 -0
  75. package/src/composables/useZoomPan.ts +192 -0
  76. package/src/i18n/locales/ar/components.json +12 -3
  77. package/src/i18n/locales/ar/components.toml +5 -0
  78. package/src/i18n/locales/ar/connection.json +25 -0
  79. package/src/i18n/locales/ar/platform.json +50 -0
  80. package/src/i18n/locales/de/components.json +12 -3
  81. package/src/i18n/locales/de/components.toml +5 -0
  82. package/src/i18n/locales/de/connection.json +25 -0
  83. package/src/i18n/locales/de/platform.json +50 -0
  84. package/src/i18n/locales/en/components.json +12 -3
  85. package/src/i18n/locales/en/components.toml +5 -0
  86. package/src/i18n/locales/en/connection.json +27 -0
  87. package/src/i18n/locales/en/platform.json +53 -0
  88. package/src/i18n/locales/es/components.json +12 -3
  89. package/src/i18n/locales/es/components.toml +5 -0
  90. package/src/i18n/locales/es/connection.json +25 -0
  91. package/src/i18n/locales/es/platform.json +50 -0
  92. package/src/i18n/locales/fr/components.json +12 -3
  93. package/src/i18n/locales/fr/components.toml +5 -0
  94. package/src/i18n/locales/fr/connection.json +25 -0
  95. package/src/i18n/locales/fr/platform.json +50 -0
  96. package/src/i18n/locales/ja/components.json +12 -3
  97. package/src/i18n/locales/ja/components.toml +5 -0
  98. package/src/i18n/locales/ja/connection.json +27 -0
  99. package/src/i18n/locales/ja/platform.json +53 -0
  100. package/src/i18n/locales/ko/components.json +12 -3
  101. package/src/i18n/locales/ko/components.toml +5 -0
  102. package/src/i18n/locales/ko/connection.json +27 -0
  103. package/src/i18n/locales/ko/platform.json +50 -0
  104. package/src/i18n/locales/pt/components.json +12 -3
  105. package/src/i18n/locales/pt/components.toml +5 -0
  106. package/src/i18n/locales/pt/connection.json +25 -0
  107. package/src/i18n/locales/pt/platform.json +50 -0
  108. package/src/i18n/locales/ru/components.json +12 -3
  109. package/src/i18n/locales/ru/components.toml +5 -0
  110. package/src/i18n/locales/ru/connection.json +25 -0
  111. package/src/i18n/locales/ru/platform.json +50 -0
  112. package/src/i18n/locales/zh-Hans/components.json +12 -3
  113. package/src/i18n/locales/zh-Hans/components.toml +5 -0
  114. package/src/i18n/locales/zh-Hans/connection.json +27 -0
  115. package/src/i18n/locales/zh-Hans/platform.json +53 -0
  116. package/src/i18n/locales/zh-Hant/components.json +12 -3
  117. package/src/i18n/locales/zh-Hant/components.toml +5 -0
  118. package/src/i18n/locales/zh-Hant/connection.json +27 -0
  119. package/src/i18n/locales/zh-Hant/platform.json +53 -0
  120. package/src/index.ts +67 -4
  121. package/src/plugins/bootScriptsPlugin.ts +47 -0
  122. package/src/plugins/buildHashPlugin.ts +67 -0
  123. package/src/plugins/index.ts +2 -0
  124. package/src/render.ts +1 -1
  125. package/src/runtime/env.ts +4 -0
  126. package/src/runtime/index.ts +0 -1
  127. package/src/runtime/useConfirm.ts +7 -1
  128. package/src/styles/admin-tokens.scss +634 -0
  129. package/src/styles/index.scss +1 -0
  130. package/src/theme/_field.scss +116 -0
  131. package/src/theme/index.ts +2 -0
  132. package/src/theme/presets.ts +11 -9
  133. package/src/theme/useTheme.ts +54 -5
  134. package/src/tokens.scss +76 -0
  135. package/src/utils/base64.ts +31 -0
  136. package/src/utils/connectivity.ts +51 -0
  137. package/src/utils/dom.ts +39 -0
  138. package/src/utils/download.ts +22 -0
  139. package/src/utils/fileType.ts +127 -0
  140. package/src/utils/fuzzy.ts +77 -0
  141. package/src/utils/fuzzySearch.test.ts +87 -0
  142. package/src/utils/objectPath.ts +59 -0
  143. package/src/utils/password.ts +53 -0
  144. package/src/utils/pow.test.ts +45 -0
  145. package/src/utils/pow.ts +226 -0
  146. package/src/utils/powNonce.ts +83 -0
  147. package/src/utils/validation.test.ts +78 -0
  148. package/src/composables/useBreakpoint.ts +0 -41
  149. package/src/composables/useClipboard.ts +0 -37
  150. package/src/composables/useConfirm.ts +0 -35
  151. package/src/composables/useToast.ts +0 -2
  152. package/src/runtime/useAsyncData.ts +0 -30
@@ -0,0 +1,624 @@
1
+ // Use theme variables with namespace to avoid conflicts
2
+ @use "./hikari-vars" as vars;
3
+
4
+ // ------
5
+ // Hikari Breadcrumb Component
6
+ // Features: Glowing separators, smooth transitions, hover effects
7
+ // ------
8
+
9
+ // ------
10
+ // Base Breadcrumb Styles
11
+ // ------
12
+
13
+ .hk-breadcrumb {
14
+ // Layout
15
+ display: flex;
16
+ align-items: center;
17
+ flex-wrap: wrap;
18
+
19
+ // Reset
20
+ list-style: none;
21
+ margin: 0;
22
+ padding: 0;
23
+
24
+ // Typography
25
+ font-family: vars.$hikari-font-family-sans;
26
+ font-size: vars.$hikari-font-size-sm;
27
+ line-height: 1.5;
28
+
29
+ // Gap
30
+ gap: 0.5rem;
31
+ }
32
+
33
+ // ------
34
+ // Breadcrumb Item
35
+ // ------
36
+
37
+ .hk-breadcrumb-item {
38
+ // Layout
39
+ display: flex;
40
+ align-items: center;
41
+
42
+ // Spacing
43
+ margin: 0;
44
+
45
+ // Position
46
+ position: relative;
47
+
48
+ // Not the last item
49
+ &:not(:last-child) {
50
+ // Separator
51
+ .hk-breadcrumb-separator {
52
+ margin-left: 0.5rem;
53
+ color: var(--hi-color-text-secondary);
54
+ opacity: 0.5;
55
+ // DISABLED - migrated to JS animation
56
+
57
+ // transition: all vars.$hikari-duration-fast vars.$hikari-ease-smooth;
58
+
59
+ // Glow effect on separator
60
+ filter: drop-shadow(0 0 4px var(--hi-primary));
61
+
62
+ svg {
63
+ width: 1rem;
64
+ height: 1rem;
65
+ }
66
+ }
67
+ }
68
+
69
+ // Last item (current page)
70
+ &:last-child {
71
+ .hk-breadcrumb-link {
72
+ color: var(--hi-color-text-primary);
73
+ font-weight: 500;
74
+ cursor: default;
75
+ pointer-events: none;
76
+
77
+ // Subtle glow on current item
78
+ text-shadow: 0 0 8px var(--hi-primary);
79
+ }
80
+ }
81
+ }
82
+
83
+ // ------
84
+ // Breadcrumb Link
85
+ // ------
86
+
87
+ .hk-breadcrumb-link {
88
+ // Typography
89
+ color: var(--hi-color-text-secondary);
90
+ text-decoration: none;
91
+ white-space: nowrap;
92
+
93
+ // Cursor
94
+ cursor: pointer;
95
+
96
+ // Transitions
97
+ // DISABLED - migrated to JS animation
98
+
99
+ // transition: all vars.$hikari-duration-fast vars.$hikari-ease-smooth;
100
+
101
+ // Padding
102
+ padding: 0.25rem 0.5rem;
103
+ margin: -0.25rem -0.5rem;
104
+ border-radius: vars.$hikari-radius-fui-sm;
105
+
106
+ // Display
107
+ display: inline-flex;
108
+ align-items: center;
109
+ gap: 0.375rem;
110
+
111
+ // Icon
112
+ .hk-breadcrumb-icon {
113
+ flex-shrink: 0;
114
+ width: 1rem;
115
+ height: 1rem;
116
+ // DISABLED - migrated to JS animation
117
+
118
+ // transition: all vars.$hikari-duration-fast vars.$hikari-ease-smooth;
119
+
120
+ svg {
121
+ width: 100%;
122
+ height: 100%;
123
+ }
124
+ }
125
+
126
+ // Hover state
127
+ &:hover {
128
+ color: var(--hi-color-text-primary);
129
+ background: var(--hi-primary);
130
+
131
+ .hk-breadcrumb-icon {
132
+ color: var(--hi-color-primary);
133
+ filter: drop-shadow(0 0 4px var(--hi-primary));
134
+ }
135
+
136
+ // Glow effect on text
137
+ text-shadow: 0 0 8px var(--hi-primary);
138
+ }
139
+
140
+ // Active/focus state
141
+ &:focus-visible {
142
+ outline: none;
143
+ background: var(--hi-primary);
144
+ box-shadow:
145
+ 0 0 0 2px var(--hi-primary),
146
+ 0 0 12px var(--hi-primary);
147
+ }
148
+
149
+ // Active state (for non-last items)
150
+ &.hk-breadcrumb-link-active {
151
+ color: var(--hi-color-text-primary);
152
+ font-weight: 500;
153
+ }
154
+ }
155
+
156
+ // ------
157
+ // Breadcrumb Separator
158
+ // ------
159
+
160
+ .hk-breadcrumb-separator {
161
+ // Layout
162
+ display: inline-flex;
163
+ align-items: center;
164
+
165
+ // Typography
166
+ font-size: 0.875rem;
167
+
168
+ // Transitions
169
+ // DISABLED - migrated to JS animation
170
+
171
+ // transition: all vars.$hikari-duration-fast vars.$hikari-ease-smooth;
172
+
173
+ // Custom separator glow
174
+ &.hk-breadcrumb-separator-glow {
175
+ color: var(--hi-color-primary);
176
+ opacity: 0.8;
177
+ filter: drop-shadow(0 0 6px var(--hi-primary));
178
+ }
179
+ }
180
+
181
+ // ------
182
+ // Separator Variants
183
+ // ------
184
+
185
+ // Slash separator
186
+ .hk-breadcrumb-separator-slash {
187
+ &::before {
188
+ content: '/';
189
+ }
190
+ }
191
+
192
+ // Arrow separator
193
+ .hk-breadcrumb-separator-arrow {
194
+ &::before {
195
+ content: '›';
196
+ font-size: 1.1em;
197
+ }
198
+ }
199
+
200
+ // Double arrow separator
201
+ .hk-breadcrumb-separator-double-arrow {
202
+ &::before {
203
+ content: '»';
204
+ font-size: 0.9em;
205
+ }
206
+ }
207
+
208
+ // Chevron separator (default with icon)
209
+ .hk-breadcrumb-separator-chevron {
210
+ // Uses chevron-right icon
211
+ }
212
+
213
+ // Dot separator
214
+ .hk-breadcrumb-separator-dot {
215
+ &::before {
216
+ content: '•';
217
+ font-size: 1.2em;
218
+ }
219
+ }
220
+
221
+ // ------
222
+ // Breadcrumb Dropdown (for nested paths)
223
+ // ------
224
+
225
+ .hk-breadcrumb-dropdown {
226
+ // Layout
227
+ position: relative;
228
+ display: inline-flex;
229
+ align-items: center;
230
+
231
+ // Trigger
232
+ .hk-breadcrumb-dropdown-trigger {
233
+ // Layout
234
+ display: inline-flex;
235
+ align-items: center;
236
+ gap: 0.25rem;
237
+
238
+ // Arrow icon
239
+ .hk-breadcrumb-dropdown-arrow {
240
+ width: 0.75rem;
241
+ height: 0.75rem;
242
+ // DISABLED - migrated to JS animation
243
+
244
+ // transition: transform vars.$hikari-duration-fast vars.$hikari-ease-smooth;
245
+
246
+ svg {
247
+ width: 100%;
248
+ height: 100%;
249
+ }
250
+ }
251
+
252
+ // Open state
253
+ &.hk-breadcrumb-dropdown-open {
254
+ .hk-breadcrumb-dropdown-arrow {
255
+ transform: rotate(180deg);
256
+ }
257
+ }
258
+ }
259
+
260
+ // Dropdown menu
261
+ .hk-breadcrumb-dropdown-menu {
262
+ // Layout
263
+ position: absolute;
264
+ top: calc(100% + 4px);
265
+ left: 0;
266
+ min-width: 200px;
267
+ z-index: 100;
268
+
269
+ // Appearance
270
+ border-radius: vars.$hikari-radius-fui-md;
271
+ border: 1px solid var(--hi-color-border);
272
+ background: var(--hi-surface);
273
+ backdrop-filter: blur(4px);
274
+ box-shadow:
275
+ 0 8px 16px var(--hi-black-30, rgba(0, 0, 0, 0.3)),
276
+ 0 0 0 1px var(--hi-white-5, rgba(255, 255, 255, 0.05)) inset;
277
+
278
+ // Padding
279
+ padding: 0.5rem;
280
+
281
+ // Transitions
282
+ // DISABLED - migrated to JS animation
283
+
284
+ // transition: all vars.$hikari-duration-normal vars.$hikari-ease-smooth;
285
+
286
+ // Animation
287
+ opacity: 0;
288
+ transform: translateY(-8px);
289
+ pointer-events: none;
290
+
291
+ // Open state
292
+ &.hk-breadcrumb-dropdown-menu-open {
293
+ opacity: 1;
294
+ transform: translateY(0);
295
+ pointer-events: auto;
296
+ }
297
+
298
+ // Menu items
299
+ .hk-breadcrumb-dropdown-item {
300
+ // Layout
301
+ display: flex;
302
+ align-items: center;
303
+ gap: 0.5rem;
304
+
305
+ // Spacing
306
+ padding: 0.5rem 0.75rem;
307
+ margin: 0.125rem 0;
308
+
309
+ // Typography
310
+ font-size: vars.$hikari-font-size-sm;
311
+ color: var(--hi-color-text-primary);
312
+ text-decoration: none;
313
+ white-space: nowrap;
314
+
315
+ // Appearance
316
+ border-radius: vars.$hikari-radius-fui-sm;
317
+
318
+ // Cursor
319
+ cursor: pointer;
320
+
321
+ // Transitions
322
+ // DISABLED - migrated to JS animation
323
+
324
+ // transition: all vars.$hikari-duration-fast vars.$hikari-ease-smooth;
325
+
326
+ // Hover state
327
+ &:hover {
328
+ background: var(--hi-primary);
329
+ color: var(--hi-color-text-primary);
330
+ box-shadow:
331
+ 0 0 12px var(--hi-primary),
332
+ inset 0 0 8px var(--hi-primary);
333
+ }
334
+ }
335
+ }
336
+ }
337
+
338
+ // ------
339
+ // Icon Styles
340
+ // ------
341
+
342
+ .hk-breadcrumb-icon {
343
+ // Layout
344
+ display: inline-flex;
345
+ align-items: center;
346
+
347
+ // Size
348
+ width: 1rem;
349
+ height: 1rem;
350
+
351
+ // Color
352
+ color: var(--hi-color-text-secondary);
353
+
354
+ // Transitions
355
+ // DISABLED - migrated to JS animation
356
+
357
+ // transition: all vars.$hikari-duration-fast vars.$hikari-ease-smooth;
358
+
359
+ svg {
360
+ width: 100%;
361
+ height: 100%;
362
+ }
363
+ }
364
+
365
+ // ------
366
+ // Size Variants
367
+ // ------
368
+
369
+ .hk-breadcrumb-sm {
370
+ font-size: 0.75rem;
371
+ gap: 0.375rem;
372
+
373
+ .hk-breadcrumb-link {
374
+ padding: 0.125rem 0.375rem;
375
+ margin: -0.125rem -0.375rem;
376
+
377
+ .hk-breadcrumb-icon {
378
+ width: 0.875rem;
379
+ height: 0.875rem;
380
+ }
381
+ }
382
+
383
+ .hk-breadcrumb-separator {
384
+ margin-left: 0.375rem;
385
+ font-size: 0.75rem;
386
+
387
+ svg {
388
+ width: 0.875rem;
389
+ height: 0.875rem;
390
+ }
391
+ }
392
+ }
393
+
394
+ .hk-breadcrumb-md {
395
+ font-size: vars.$hikari-font-size-sm;
396
+ gap: 0.5rem;
397
+ }
398
+
399
+ .hk-breadcrumb-lg {
400
+ font-size: 1rem;
401
+ gap: 0.625rem;
402
+
403
+ .hk-breadcrumb-link {
404
+ padding: 0.375rem 0.625rem;
405
+ margin: -0.375rem -0.625rem;
406
+
407
+ .hk-breadcrumb-icon {
408
+ width: 1.125rem;
409
+ height: 1.125rem;
410
+ }
411
+ }
412
+
413
+ .hk-breadcrumb-separator {
414
+ margin-left: 0.625rem;
415
+ font-size: 1rem;
416
+
417
+ svg {
418
+ width: 1.125rem;
419
+ height: 1.125rem;
420
+ }
421
+ }
422
+ }
423
+
424
+ // ------
425
+ // Theme Variants
426
+ // ------
427
+
428
+ // With background
429
+ .hk-breadcrumb-background {
430
+ gap: 0;
431
+
432
+ .hk-breadcrumb-item {
433
+ background: var(--hi-card-bg);
434
+ padding: 0.375rem 0.75rem;
435
+ border-radius: vars.$hikari-radius-fui-sm;
436
+ // DISABLED - migrated to JS animation
437
+
438
+ // transition: all vars.$hikari-duration-fast vars.$hikari-ease-smooth;
439
+
440
+ &:not(:last-child):hover {
441
+ background: var(--hi-primary);
442
+ }
443
+
444
+ &:last-child {
445
+ background: var(--hi-primary);
446
+ box-shadow:
447
+ 0 0 12px var(--hi-primary),
448
+ inset 0 0 8px var(--hi-primary);
449
+ }
450
+ }
451
+ }
452
+
453
+ // Pill style
454
+ .hk-breadcrumb-pill {
455
+ .hk-breadcrumb-item {
456
+ background: var(--hi-card-bg);
457
+ padding: 0.375rem 0.875rem;
458
+ border-radius: 999px;
459
+ border: 1px solid var(--hi-color-border);
460
+ // DISABLED - migrated to JS animation
461
+
462
+ // transition: all vars.$hikari-duration-fast vars.$hikari-ease-smooth;
463
+
464
+ &:not(:last-child) {
465
+ &:hover {
466
+ background: var(--hi-primary);
467
+ border-color: var(--hi-primary);
468
+ }
469
+ }
470
+
471
+ &:last-child {
472
+ background: linear-gradient(135deg, var(--hi-primary), var(--hi-primary));
473
+ border-color: var(--hi-primary);
474
+ box-shadow:
475
+ 0 0 12px var(--hi-primary),
476
+ inset 0 0 8px var(--hi-primary);
477
+ }
478
+ }
479
+ }
480
+
481
+ // ------
482
+ // Separator Animations
483
+ // ------
484
+
485
+ // Animated separator (pulsing glow)
486
+ .hk-breadcrumb-separator-animated {
487
+ // DISABLED - migrated to JS animation
488
+
489
+ // animation: breadcrumb-separator-pulse 2s ease-in-out infinite;
490
+ }
491
+
492
+ // DISABLED - migrated to JS animation
493
+ // @keyframes breadcrumb-separator-pulse {
494
+ // 0%, 100% {
495
+ // opacity: 0.5;
496
+ // filter: drop-shadow(0 0 4px var(--hi-primary));
497
+ // }
498
+ // 50% {
499
+ // opacity: 1;
500
+ // filter: drop-shadow(0 0 8px var(--hi-primary));
501
+ // }
502
+ // }
503
+
504
+ // ------
505
+ // Collapsible Breadcrumb (for mobile)
506
+ // ------
507
+
508
+ .hk-breadcrumb-collapsible {
509
+ // Hide middle items on small screens
510
+ .hk-breadcrumb-item {
511
+ &:nth-child(n+2):nth-last-child(n+3) {
512
+ @media (max-width: 768px) {
513
+ display: none;
514
+ }
515
+ }
516
+
517
+ // Show ellipsis
518
+ &.hk-breadcrumb-ellipsis {
519
+ @media (max-width: 768px) {
520
+ display: flex;
521
+ }
522
+ }
523
+ }
524
+ }
525
+
526
+ // ------
527
+ // Animations
528
+ // ------
529
+
530
+ // Fade-in animation
531
+ .hk-breadcrumb-animate-in {
532
+ .hk-breadcrumb-item {
533
+ opacity: 0;
534
+ // DISABLED - migrated to JS animation
535
+
536
+ // animation: breadcrumb-fade-in vars.$hikari-duration-normal vars.$hikari-ease-smooth forwards;
537
+
538
+ @for $i from 1 through 10 {
539
+ &:nth-child(#{$i}) {
540
+ animation-delay: #{$i * 0.1s};
541
+ }
542
+ }
543
+ }
544
+ }
545
+
546
+ // DISABLED - migrated to JS animation
547
+ // @keyframes breadcrumb-fade-in {
548
+ // from {
549
+ // opacity: 0;
550
+ // transform: translateY(-4px);
551
+ // }
552
+ // to {
553
+ // opacity: 1;
554
+ // transform: translateY(0);
555
+ // }
556
+ // }
557
+
558
+ // Slide-in animation
559
+ .hk-breadcrumb-slide-in {
560
+ .hk-breadcrumb-item {
561
+ opacity: 0;
562
+ // DISABLED - migrated to JS animation
563
+
564
+ // animation: breadcrumb-slide-in vars.$hikari-duration-normal vars.$hikari-ease-smooth forwards;
565
+
566
+ @for $i from 1 through 10 {
567
+ &:nth-child(#{$i}) {
568
+ animation-delay: #{$i * 0.08s};
569
+ }
570
+ }
571
+ }
572
+ }
573
+
574
+ // DISABLED - migrated to JS animation
575
+ // @keyframes breadcrumb-slide-in {
576
+ // from {
577
+ // opacity: 0;
578
+ // transform: translateX(-8px);
579
+ // }
580
+ // to {
581
+ // opacity: 1;
582
+ // transform: translateX(0);
583
+ // }
584
+ // }
585
+
586
+ // ------
587
+ // Custom Colors
588
+ // ------
589
+
590
+ .hk-breadcrumb-primary {
591
+ .hk-breadcrumb-link {
592
+ &:hover {
593
+ color: var(--hi-color-primary);
594
+ text-shadow: 0 0 8px var(--hi-color-primary);
595
+ }
596
+ }
597
+ }
598
+
599
+ .hk-breadcrumb-success {
600
+ .hk-breadcrumb-link {
601
+ &:hover {
602
+ color: var(--hi-color-success);
603
+ text-shadow: 0 0 8px var(--hi-color-success);
604
+ }
605
+ }
606
+ }
607
+
608
+ .hk-breadcrumb-warning {
609
+ .hk-breadcrumb-link {
610
+ &:hover {
611
+ color: var(--hi-color-warning);
612
+ text-shadow: 0 0 8px var(--hi-color-warning);
613
+ }
614
+ }
615
+ }
616
+
617
+ .hk-breadcrumb-danger {
618
+ .hk-breadcrumb-link {
619
+ &:hover {
620
+ color: var(--hi-color-danger);
621
+ text-shadow: 0 0 8px var(--hi-color-danger);
622
+ }
623
+ }
624
+ }
@@ -1,6 +1,6 @@
1
1
  import { computed, defineComponent, type PropType } from "vue";
2
2
  import { useI18n } from "../i18n/context";
3
- import "../../../components/src/styles/components/breadcrumb.scss";
3
+ import "./HkBreadcrumb.scss";
4
4
 
5
5
  export default defineComponent({
6
6
  name: "HkBreadcrumb",
@@ -6,7 +6,7 @@
6
6
  .hk-card {
7
7
  display: block;
8
8
  overflow: hidden;
9
- background: rgb(var(--color-surface) / var(--opacity-half));
9
+ background: color-mix(in srgb, rgb(var(--color-surface)) 70%, transparent);
10
10
  backdrop-filter: blur(var(--blur-md));
11
11
  border: 1px solid var(--border-subtle);
12
12
  border-radius: var(--radius-md);
@@ -1,5 +1,6 @@
1
- import { defineComponent, ref, type PropType } from "vue";
2
1
  import { Check } from "lucide-vue-next";
2
+ import { defineComponent, ref, type PropType } from "vue";
3
+
3
4
  import "./HkCheckbox.scss";
4
5
 
5
6
  export default defineComponent({
@@ -0,0 +1,50 @@
1
+ // Collapse component styles
2
+ // Animated collapse/expand for tree nodes
3
+
4
+ .hk-collapse {
5
+ display: flex;
6
+ flex-direction: column;
7
+ }
8
+
9
+ .hk-collapse-header {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: 8px;
13
+ padding: 8px 12px;
14
+ cursor: pointer;
15
+ user-select: none;
16
+ transition: background 0.2s ease;
17
+
18
+ &:hover {
19
+ background: var(--hi-color-background-light, #f9fafb);
20
+ }
21
+
22
+ &:active {
23
+ background: var(--hi-color-primary-light, rgba(0, 160, 233, 0.1));
24
+ }
25
+ }
26
+
27
+ .hk-collapse-arrow {
28
+ display: inline-block;
29
+ transition: transform 0.2s ease;
30
+ color: var(--hi-color-text-secondary, #666666);
31
+ font-size: 16px;
32
+ }
33
+
34
+ .hk-collapse-header-content {
35
+ flex: 1;
36
+ display: flex;
37
+ align-items: center;
38
+ }
39
+
40
+ .hk-collapse-content {
41
+ overflow: hidden;
42
+ transition: max-height 0.2s ease-in-out, opacity 0.2s ease-in-out;
43
+ opacity: 0;
44
+ max-height: 0;
45
+ }
46
+
47
+ .hk-collapse-content.hk-collapse-expanded {
48
+ opacity: 1;
49
+ max-height: none;
50
+ }
@@ -1,5 +1,5 @@
1
1
  import { computed, defineComponent, ref, watch, type PropType } from "vue";
2
- import "../../../components/src/styles/components/collapse.scss";
2
+ import "./HkCollapse.scss";
3
3
 
4
4
  export default defineComponent({
5
5
  name: "HkCollapse",
@@ -0,0 +1,16 @@
1
+ .s-scheme-dialog {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: var(--space-16, 1rem);
5
+ }
6
+
7
+ .s-scheme-mode-switch {
8
+ align-self: center;
9
+ }
10
+
11
+ .s-scheme-colors {
12
+ display: flex;
13
+ flex-wrap: wrap;
14
+ justify-content: center;
15
+ gap: var(--space-10, 0.625rem);
16
+ }