arkaos 3.41.0 → 3.42.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.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.41.0
1
+ 3.42.0
@@ -0,0 +1,53 @@
1
+ // PR92d v3.42.0 — runtime theme color picker.
2
+ //
3
+ // Stores the operator's preferred primary color in localStorage and
4
+ // applies it to the live Nuxt UI app config so every component picks
5
+ // up the new hue on next render.
6
+
7
+ import { createSharedComposable } from '@vueuse/core'
8
+
9
+ const STORAGE_KEY = 'arkaos_theme_color'
10
+
11
+ export const THEME_COLOR_OPTIONS = [
12
+ { label: 'Emerald (default)', value: 'emerald' },
13
+ { label: 'Blue', value: 'blue' },
14
+ { label: 'Indigo', value: 'indigo' },
15
+ { label: 'Violet', value: 'violet' },
16
+ { label: 'Rose', value: 'rose' },
17
+ { label: 'Amber', value: 'amber' },
18
+ { label: 'Teal', value: 'teal' },
19
+ { label: 'Cyan', value: 'cyan' },
20
+ ] as const
21
+
22
+ export type ThemeColor = (typeof THEME_COLOR_OPTIONS)[number]['value']
23
+
24
+ const _useThemeColor = () => {
25
+ const appConfig = useAppConfig()
26
+ const current = ref<ThemeColor>('emerald')
27
+
28
+ function apply(color: ThemeColor) {
29
+ current.value = color
30
+ if (appConfig.ui?.colors) {
31
+ ;(appConfig.ui.colors as any).primary = color
32
+ }
33
+ }
34
+
35
+ function setAndPersist(color: ThemeColor) {
36
+ apply(color)
37
+ if (typeof window !== 'undefined') {
38
+ window.localStorage.setItem(STORAGE_KEY, color)
39
+ }
40
+ }
41
+
42
+ function loadFromStorage() {
43
+ if (typeof window === 'undefined') return
44
+ const saved = window.localStorage.getItem(STORAGE_KEY) as ThemeColor | null
45
+ if (saved && THEME_COLOR_OPTIONS.some((o) => o.value === saved)) {
46
+ apply(saved)
47
+ }
48
+ }
49
+
50
+ return { current, apply, setAndPersist, loadFromStorage }
51
+ }
52
+
53
+ export const useThemeColor = createSharedComposable(_useThemeColor)
@@ -4,6 +4,10 @@ import type { NavigationMenuItem } from '@nuxt/ui'
4
4
  // PR85c v3.13.0 — registers keyboard shortcuts globally.
5
5
  useDashboard()
6
6
 
7
+ // PR92d v3.42.0 — apply the operator's chosen primary color on boot.
8
+ const theme = useThemeColor()
9
+ onMounted(() => theme.loadFromStorage())
10
+
7
11
  const open = ref(false)
8
12
 
9
13
  const links = [[{
@@ -234,6 +234,11 @@ const themeOptions = [
234
234
  { label: 'Dark', value: 'dark' },
235
235
  ]
236
236
 
237
+ // PR92d v3.42.0 — primary color picker.
238
+ import { THEME_COLOR_OPTIONS, useThemeColor } from '~/composables/useThemeColor'
239
+ const themeColor = useThemeColor()
240
+ const themeColorOptions = THEME_COLOR_OPTIONS
241
+
237
242
  function transportColor(transport: string): 'primary' | 'warning' | 'success' | 'neutral' {
238
243
  if (transport === 'stdio') return 'primary'
239
244
  if (transport === 'http' || transport === 'sse') return 'success'
@@ -750,6 +755,37 @@ const activeSection = ref<SectionId>('profile')
750
755
  Currently rendering as
751
756
  <UBadge :label="colorMode.value" variant="subtle" size="xs" />
752
757
  </p>
758
+
759
+ <!-- PR92d v3.42.0 — primary color picker -->
760
+ <UFormField label="Primary color" help="Tints buttons, badges, links across the dashboard.">
761
+ <div class="flex flex-wrap gap-2">
762
+ <button
763
+ v-for="opt in themeColorOptions"
764
+ :key="opt.value"
765
+ type="button"
766
+ class="rounded-lg border p-2 transition-colors text-xs flex items-center gap-2"
767
+ :class="themeColor.current.value === opt.value
768
+ ? 'border-primary bg-primary/10 font-semibold'
769
+ : 'border-default hover:border-primary/40'"
770
+ @click="themeColor.setAndPersist(opt.value)"
771
+ >
772
+ <span
773
+ class="size-4 rounded-full"
774
+ :class="{
775
+ 'bg-emerald-500': opt.value === 'emerald',
776
+ 'bg-blue-500': opt.value === 'blue',
777
+ 'bg-indigo-500': opt.value === 'indigo',
778
+ 'bg-violet-500': opt.value === 'violet',
779
+ 'bg-rose-500': opt.value === 'rose',
780
+ 'bg-amber-500': opt.value === 'amber',
781
+ 'bg-teal-500': opt.value === 'teal',
782
+ 'bg-cyan-500': opt.value === 'cyan',
783
+ }"
784
+ />
785
+ {{ opt.label }}
786
+ </button>
787
+ </div>
788
+ </UFormField>
753
789
  </div>
754
790
  </UCard>
755
791
  </section>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkaos",
3
- "version": "3.41.0",
3
+ "version": "3.42.0",
4
4
  "description": "The Operating System for AI Agent Teams",
5
5
  "type": "module",
6
6
  "bin": {
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arkaos-core"
3
- version = "3.41.0"
3
+ version = "3.42.0"
4
4
  description = "Core engine for ArkaOS — The Operating System for AI Agent Teams"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}