@vertesia/ui 1.0.0-dev.20260227.112605Z → 1.0.0-dev.20260305.083323Z

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 (46) hide show
  1. package/lib/esm/core/components/shadcn/selectBox.js +1 -1
  2. package/lib/esm/core/components/shadcn/theme/ThemeSwitcher.js +3 -4
  3. package/lib/esm/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
  4. package/lib/esm/core/components/shadcn/tooltip.js +1 -1
  5. package/lib/esm/core/components/shadcn/tooltip.js.map +1 -1
  6. package/lib/esm/features/agent/chat/ModernAgentConversation.js +3 -3
  7. package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
  8. package/lib/esm/features/store/collections/CreateCollection.js +13 -13
  9. package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
  10. package/lib/esm/features/store/types/SelectContentType.js +1 -1
  11. package/lib/esm/features/store/types/SelectContentType.js.map +1 -1
  12. package/lib/esm/session/UserSession.js +8 -0
  13. package/lib/esm/session/UserSession.js.map +1 -1
  14. package/lib/esm/shell/login/TerminalLogin.js +1 -1
  15. package/lib/esm/shell/login/TerminalLogin.js.map +1 -1
  16. package/lib/tsconfig.tsbuildinfo +1 -1
  17. package/lib/types/core/components/shadcn/theme/ThemeSwitcher.d.ts +6 -1
  18. package/lib/types/core/components/shadcn/theme/ThemeSwitcher.d.ts.map +1 -1
  19. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  20. package/lib/types/features/store/collections/CreateCollection.d.ts.map +1 -1
  21. package/lib/types/session/UserSession.d.ts.map +1 -1
  22. package/lib/types/shell/login/TerminalLogin.d.ts.map +1 -1
  23. package/lib/vertesia-ui-core.js +1 -1
  24. package/lib/vertesia-ui-core.js.map +1 -1
  25. package/lib/vertesia-ui-features.js +1 -1
  26. package/lib/vertesia-ui-features.js.map +1 -1
  27. package/lib/vertesia-ui-session.js +1 -1
  28. package/lib/vertesia-ui-session.js.map +1 -1
  29. package/lib/vertesia-ui-shell.js.map +1 -1
  30. package/llms.txt +124 -4
  31. package/package.json +19 -5
  32. package/src/core/components/shadcn/selectBox.tsx +1 -1
  33. package/src/core/components/shadcn/theme/ThemeSwitcher.tsx +13 -8
  34. package/src/core/components/shadcn/tooltip.tsx +1 -1
  35. package/src/css/base.css +31 -0
  36. package/src/css/color.css +136 -0
  37. package/src/css/custom-tooltips.css +64 -0
  38. package/src/css/index.css +27 -0
  39. package/src/css/theme.css +86 -0
  40. package/src/css/typography.css +88 -0
  41. package/src/css/utilities.css +72 -0
  42. package/src/features/agent/chat/ModernAgentConversation.tsx +84 -91
  43. package/src/features/store/collections/CreateCollection.tsx +36 -34
  44. package/src/features/store/types/SelectContentType.tsx +1 -1
  45. package/src/session/UserSession.ts +8 -0
  46. package/src/shell/login/TerminalLogin.tsx +1 -2
@@ -301,7 +301,7 @@ export function SelectBox<T = any>({ options, optionLabel, value, onChange, addN
301
301
  className={clsx(
302
302
  "flex flex-col w-full rounded-md text-sm min-h-6 items-center justify-center truncate",
303
303
  !disabled && "",
304
- isClearable && value && (Array.isArray(value) ? value.length > 0 : true) && "pr-6"
304
+ isClearable && value && (Array.isArray(value) ? value.length > 0 : true) && "pr-2"
305
305
  )}
306
306
  >
307
307
  {label && <div className='w-full text-left text-xs font-semibold'>{label}</div>}
@@ -18,17 +18,22 @@ export function ModeOption({ option, current, setTheme, icon }: ModeOptionProps)
18
18
  );
19
19
  }
20
20
 
21
- export function ModeToggle() {
22
- const { setTheme } = useTheme()
23
- const theme = useTheme().theme
21
+ interface ModeToggleProps {
22
+ /** Label shown to the left of the buttons. Defaults to "Theme". Pass `false` to hide. */
23
+ label?: string | false;
24
+ className?: string;
25
+ }
26
+
27
+ export function ModeToggle({ label = "Theme", className }: ModeToggleProps = {}) {
28
+ const { setTheme, theme } = useTheme()
24
29
 
25
30
  return (
26
- <div className="flex justify-between px-2 items-center">
27
- <p className="text-sm font-semibold">Theme</p>
31
+ <div className={className ?? (label ? "flex justify-between px-2 items-center" : "flex items-center gap-1")}>
32
+ {label && <p className="text-sm font-semibold">{label}</p>}
28
33
  <div className="flex gap-2">
29
- <ModeOption current={theme} option="system" setTheme={setTheme} icon={<Computer className="text-muted" />} />
30
- <ModeOption current={theme} option="light" setTheme={setTheme} icon={<Sun className="text-muted" />} />
31
- <ModeOption current={theme} option="dark" setTheme={setTheme} icon={<Moon className="text-muted" />} />
34
+ <ModeOption current={theme} option="system" setTheme={setTheme} icon={<Computer />} />
35
+ <ModeOption current={theme} option="light" setTheme={setTheme} icon={<Sun />} />
36
+ <ModeOption current={theme} option="dark" setTheme={setTheme} icon={<Moon />} />
32
37
  </div>
33
38
  </div>
34
39
  )
@@ -30,7 +30,7 @@ const TooltipContent: React.ForwardRefExoticComponent<TooltipContentProps & Reac
30
30
  style={{ zIndex: 100 }}
31
31
  className={cn(
32
32
  "max-w-[90vw]",
33
- "z-50 overflow-hidden rounded-md bg-tooltips border px-3 py-1.5 text-xs animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
33
+ "z-50 overflow-hidden rounded-md bg-tooltips border border-border px-3 py-1.5 text-xs animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
34
34
  className
35
35
  )}
36
36
  {...props}
@@ -0,0 +1,31 @@
1
+ @layer base {
2
+ * {
3
+ @apply border-border;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ html {
8
+ height: 100%;
9
+ }
10
+
11
+ body {
12
+ @apply bg-background text-foreground selection:bg-blue-300 selection:text-blue-900;
13
+ min-height: 100%;
14
+ margin: 0;
15
+ padding: 0;
16
+ scrollbar-color: var(--color-muted) var(--color-background);
17
+ }
18
+
19
+ #root {
20
+ height: 100%;
21
+ }
22
+
23
+ .no-scrollbar::-webkit-scrollbar {
24
+ display: none;
25
+ }
26
+
27
+ .no-scrollbar {
28
+ -ms-overflow-style: none; /* IE and Edge */
29
+ scrollbar-width: none; /* Firefox */
30
+ }
31
+ }
@@ -0,0 +1,136 @@
1
+ :root {
2
+ --background: oklch(1 0 0); /* White */
3
+ --foreground: oklch(0.145 0 0);
4
+
5
+ --card: oklch(1 0 0);
6
+ --card-foreground: oklch(0.145 0 0);
7
+ --popover: oklch(1 0 0);
8
+ --popover-foreground: oklch(0.145 0 0);
9
+ --tooltips: oklch(97% 0.014 254.604); /* Light Blue */
10
+
11
+ --primary: oklch(44.72% 0.193316 261.0044); /* Dark Blue */
12
+ --primary-background: oklch(99.26% 0.0105 196.99); /* Light Blue */
13
+
14
+ --secondary: oklch(0.205 0 0);
15
+ --secondary-background: oklch(0.97 0 0);
16
+
17
+ --muted: oklch(0.556 0 0);
18
+ --muted-background: oklch(0.97 0 0);
19
+
20
+ --destructive: oklch(50.5% 0.213 27.518); /* Dark Red */
21
+ --destructive-background: oklch(97.1% 0.013 17.38); /* Light Red */
22
+
23
+ --success: oklch(52.7% 0.154 150.069); /* Dark Green */
24
+ --success-background: oklch(98.2% 0.018 155.826); /* Light Green */
25
+
26
+ --attention: oklch(55.48% 0.12708 62.5245); /* Dark Yellow */
27
+ --attention-background: oklch(98.7% 0.026 102.212); /* Light Yellow */
28
+
29
+ --done: oklch(49.6% 0.265 301.924); /* Dark Purple */
30
+ --done-background: oklch(97.7% 0.014 308.299); /* Light Purple */
31
+
32
+ --info: oklch(48.8% 0.243 264.376); /* Dark Blue */
33
+ --info-background: oklch(97% 0.014 254.604); /* Light Blue */
34
+
35
+ --border: oklch(0.922 0 0);
36
+ --input: oklch(0.922 0 0);
37
+ --ring: oklch(0.708 0 0);
38
+
39
+ --chart-1: oklch(0.646 0.222 41.116);
40
+ --chart-2: oklch(0.6 0.118 184.704);
41
+ --chart-3: oklch(0.398 0.07 227.392);
42
+ --chart-4: oklch(0.828 0.189 84.429);
43
+ --chart-5: oklch(0.769 0.188 70.08);
44
+
45
+ --sidebar: oklch(0.985 0 0);
46
+ --sidebar-foreground: oklch(0.145 0 0);
47
+ --sidebar-primary: oklch(0.205 0 0);
48
+ --sidebar-primary-foreground: oklch(0.985 0 0);
49
+ --sidebar-accent: oklch(0.97 0 0);
50
+ --sidebar-accent-foreground: oklch(0.205 0 0);
51
+ --sidebar-border: oklch(0.922 0 0);
52
+ --sidebar-ring: oklch(0.708 0 0);
53
+
54
+ --topnav-background: oklch(0.985 0 0);
55
+ --topnav-foreground: oklch(0.145 0 0);
56
+ --topnav-primary: oklch(0.205 0 0);
57
+ --topnav-primary-foreground: oklch(0.985 0 0);
58
+ --topnav-accent: oklch(0.97 0 0);
59
+ --topnav-accent-foreground: oklch(0.205 0 0);
60
+ --topnav-border: oklch(0.922 0 0);
61
+ --topnav-ring: oklch(0.708 0 0);
62
+
63
+ --preview: oklch(46.95% 0.233 303.17);
64
+ --staging: oklch(63.89% 0.103 201.59);
65
+ --development: oklch(44.30% 0.193 261.11);
66
+
67
+ }
68
+
69
+ .dark {
70
+ --background: oklch(0.145 0 0);
71
+ --foreground: oklch(0.985 0 0);
72
+
73
+ --card: oklch(0.205 0 0);
74
+ --card-foreground: oklch(0.985 0 0);
75
+ --popover: oklch(0.205 0 0);
76
+ --popover-foreground: oklch(0.985 0 0);
77
+
78
+ --tooltips: oklch(70.7% 0.165 254.624); /* Mid Blue */
79
+
80
+ --primary: oklch(60.05% 0.1735 260.17); /* Mid Blue */
81
+ --primary-background: oklch(1 0 0); /* White */
82
+
83
+ --secondary: oklch(0.985 0 0);
84
+ --secondary-background: oklch(0.269 0 0);
85
+
86
+ --muted: oklch(0.708 0 0);
87
+ --muted-background: oklch(0.269 0 0); /* Dark Gray */
88
+
89
+ --destructive: oklch(70.4% 0.191 22.216); /* Mid Red */
90
+ --destructive-background: oklch(70.4% 0.191 22.216 / 0.2); /* Mid Red */
91
+
92
+ --success: oklch(79.2% 0.209 151.711); /* Mid Green */
93
+ --success-background: oklch(79.2% 0.209 151.711 / 0.2); /* Mid Green */
94
+
95
+ --attention: oklch(85.2% 0.199 91.936); /* Mid Yellow */
96
+ --attention-background: oklch(85.2% 0.199 91.936 / 0.2); /* Mid Yellow */
97
+
98
+ --done: oklch(71.4% 0.203 305.504); /* Mid Purple */
99
+ --done-background: oklch(71.4% 0.203 305.504 / 0.2); /* Mid Purple */
100
+
101
+ --info: oklch(70.7% 0.165 254.624); /* Mid Blue */
102
+ --info-background: oklch(70.7% 0.165 254.624 / 0.2); /* Mid Blue */
103
+
104
+ --border: oklch(1 0 0 / 10%);
105
+ --input: oklch(1 0 0 / 15%);
106
+ --ring: oklch(0.556 0 0);
107
+
108
+ --chart-1: oklch(0.488 0.243 264.376);
109
+ --chart-2: oklch(0.696 0.17 162.48);
110
+ --chart-3: oklch(0.769 0.188 70.08);
111
+ --chart-4: oklch(0.627 0.265 303.9);
112
+ --chart-5: oklch(0.645 0.246 16.439);
113
+
114
+ --sidebar: oklch(0.205 0 0);
115
+ --sidebar-foreground: oklch(0.985 0 0);
116
+ --sidebar-primary: oklch(0.488 0.243 264.376);
117
+ --sidebar-primary-foreground: oklch(0.985 0 0);
118
+ --sidebar-accent: oklch(0.269 0 0);
119
+ --sidebar-accent-foreground: oklch(0.985 0 0);
120
+ --sidebar-border: oklch(1 0 0 / 10%);
121
+ --sidebar-ring: oklch(0.556 0 0);
122
+
123
+ --topnav-background: oklch(0.205 0 0);
124
+ --topnav-foreground: oklch(0.985 0 0);
125
+ --topnav-primary: oklch(0.488 0.243 264.376);
126
+ --topnav-primary-foreground: oklch(0.985 0 0);
127
+ --topnav-accent: oklch(0.269 0 0);
128
+ --topnav-accent-foreground: oklch(0.985 0 0);
129
+ --topnav-border: oklch(0.269 0 0);
130
+ --topnav-ring: oklch(0.439 0 0);
131
+
132
+ --preview: oklch(46.95% 0.233 303.17);
133
+ --staging: oklch(63.89% 0.103 201.59);
134
+ --development: oklch(44.30% 0.193 261.11);
135
+
136
+ }
@@ -0,0 +1,64 @@
1
+ /* Custom styling for title attribute tooltips */
2
+ button[title], a[title] {
3
+ position: relative !important;
4
+ }
5
+
6
+ button[title]::before, a[title]::before {
7
+ content: "";
8
+ display: none;
9
+ }
10
+
11
+ button[title]:hover::before, a[title]:hover::before {
12
+ content: attr(title);
13
+ display: block;
14
+ position: absolute;
15
+ top: -42px; /* Position tooltip above the element */
16
+ left: 50%;
17
+ transform: translateX(-50%);
18
+ min-width: 80px;
19
+ max-width: 200px;
20
+ padding: 6px 8px;
21
+ background-color: rgba(15, 23, 42, 0.95); /* slate-900 with opacity */
22
+ color: white;
23
+ font-size: 12px;
24
+ font-weight: 500;
25
+ text-align: center;
26
+ line-height: 1.4;
27
+ border-radius: 4px;
28
+ white-space: nowrap;
29
+ z-index: 1000;
30
+ pointer-events: none;
31
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2);
32
+ border: 1px solid rgba(100, 116, 139, 0.2); /* slate-400 with opacity */
33
+ }
34
+
35
+ /* Arrow for the tooltip */
36
+ button[title]:hover::after, a[title]:hover::after {
37
+ content: "";
38
+ display: block;
39
+ position: absolute;
40
+ top: -6px; /* Position arrow at the bottom of tooltip */
41
+ left: 50%;
42
+ transform: translateX(-50%);
43
+ border-width: 6px;
44
+ border-style: solid;
45
+ border-color: transparent transparent rgba(15, 23, 42, 0.95) transparent; /* Arrow pointing down */
46
+ z-index: 1000;
47
+ }
48
+
49
+ /* Light mode specific styles */
50
+ button[title]:hover::before, a[title]:hover::before {
51
+ background-color: rgba(15, 23, 42, 0.95); /* slate-900 with opacity */
52
+ color: rgba(248, 250, 252, 1); /* slate-50 */
53
+ }
54
+
55
+ /* Dark mode adjustment */
56
+ .dark button[title]:hover::before, .dark a[title]:hover::before {
57
+ background-color: rgba(30, 41, 59, 0.95); /* slate-800 with opacity */
58
+ color: rgba(248, 250, 252, 1); /* slate-50 */
59
+ border: 1px solid rgba(71, 85, 105, 0.4); /* slate-600 */
60
+ }
61
+
62
+ .dark button[title]:hover::after, .dark a[title]:hover::after {
63
+ border-color: transparent transparent rgba(30, 41, 59, 0.95) transparent;
64
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Vertesia shared styles
3
+ *
4
+ * Import this file to get the full set of design tokens, theme bindings,
5
+ * utility overrides, tooltips, and base layer rules.
6
+ *
7
+ * Usage (apps with Vite alias @vertesia/ui → src/):
8
+ * @import "@vertesia/ui/css/index.css";
9
+ *
10
+ * Usage (packages via exports):
11
+ * @import "@vertesia/ui/styles.css";
12
+ *
13
+ * Granular imports:
14
+ * @import "@vertesia/ui/css/color.css";
15
+ * @import "@vertesia/ui/css/theme.css";
16
+ *
17
+ * Typography (.vprose) is opt-in since it requires @tailwindcss/typography:
18
+ * @import "@vertesia/ui/css/typography.css" layer(base);
19
+ */
20
+
21
+ @import "./color.css" layer(base);
22
+ @import "./theme.css" layer(theme);
23
+ @import "./custom-tooltips.css" layer(utilities);
24
+ @import "./utilities.css";
25
+ @import "./base.css";
26
+
27
+ @custom-variant dark (&:is(.dark *));
@@ -0,0 +1,86 @@
1
+ @theme static {
2
+
3
+ --radius: 0.625rem;
4
+ --radius-xs: calc(var(--radius) - 8px);
5
+ --radius-sm: calc(var(--radius) - 4px);
6
+ --radius-md: calc(var(--radius) - 2px);
7
+ --radius-lg: var(--radius);
8
+ --radius-xl: calc(var(--radius) + 4px);
9
+
10
+ --color-background: var(--background);
11
+ --color-foreground: var(--foreground);
12
+
13
+ --color-card: var(--card);
14
+ --color-card-foreground: var(--card-foreground);
15
+
16
+ --color-popover: var(--popover);
17
+ --color-popover-foreground: var(--popover-foreground);
18
+
19
+ --color-tooltips: var(--tooltips);
20
+
21
+ --color-primary: var(--primary);
22
+ --color-primary-foreground: var(--primary-foreground);
23
+
24
+ --color-link: var(--primary);
25
+ --color-link-foreground: var(--primary-foreground);
26
+
27
+ --color-secondary: var(--secondary);
28
+ --color-secondary-background: var(--secondary-background);
29
+
30
+ --color-muted: var(--muted);
31
+ --color-muted-background: var(--muted-background);
32
+
33
+ --color-destructive: var(--destructive);
34
+ --color-destructive-background: var(--destructive-background);
35
+
36
+ --color-success: var(--success);
37
+ --color-success-background: var(--success-background);
38
+
39
+ --color-attention: var(--attention);
40
+ --color-attention-background: var(--attention-background);
41
+
42
+ --color-done: var(--done);
43
+ --color-done-background: var(--done-background);
44
+
45
+ --color-info: var(--info);
46
+ --color-info-background: var(--info-background);
47
+
48
+ --color-border: var(--border);
49
+ --color-input: var(--input);
50
+ --color-ring: var(--ring);
51
+
52
+ --color-chart-1: var(--chart-1);
53
+ --color-chart-2: var(--chart-2);
54
+ --color-chart-3: var(--chart-3);
55
+ --color-chart-4: var(--chart-4);
56
+ --color-chart-5: var(--chart-5);
57
+
58
+ --color-sidebar: var(--sidebar);
59
+ --color-sidebar-foreground: var(--sidebar-foreground);
60
+ --color-sidebar-primary: var(--sidebar-primary);
61
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
62
+ --color-sidebar-accent: var(--sidebar-accent);
63
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
64
+ --color-sidebar-border: var(--sidebar-border);
65
+ --color-sidebar-ring: var(--sidebar-ring);
66
+
67
+ --color-topnav: var(--topnav-background);
68
+ --color-topnav-foreground: var(--topnav-foreground);
69
+ --color-topnav-primary: var(--topnav-primary);
70
+ --color-topnav-primary-foreground: var(--topnav-primary-foreground);
71
+ --color-topnav-accent: var(--topnav-accent);
72
+ --color-topnav-accent-foreground: var(--topnav-accent-foreground);
73
+ --color-topnav-border: var(--topnav-border);
74
+ --color-topnav-ring: var(--topnav-ring);
75
+
76
+ --color-preview: var(--preview);
77
+ --color-staging: var(--staging);
78
+ --color-development: var(--development);
79
+
80
+ --font-sans:
81
+ Inter, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji',
82
+ 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
83
+ --font-mono:
84
+ Fira mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
85
+ 'Liberation Mono', 'Courier New', monospace;
86
+ }
@@ -0,0 +1,88 @@
1
+ .vprose {
2
+ @apply prose text-foreground max-w-none;
3
+ }
4
+
5
+ .vprose p {
6
+ @apply bg-transparent my-2;
7
+ }
8
+
9
+ .vprose a {
10
+ @apply text-info hover:text-info/80;
11
+ }
12
+
13
+ .vprose pre, .vprose code {
14
+ @apply !bg-muted text-muted my-2;
15
+ }
16
+
17
+ .vprose h1,
18
+ .vprose h2,
19
+ .vprose h3,
20
+ .vprose h4,
21
+ .vprose h5,
22
+ .vprose h6 {
23
+ @apply text-foreground;
24
+ }
25
+
26
+ .vprose strong {
27
+ @apply text-foreground font-bold;
28
+ }
29
+
30
+ .vprose em {
31
+ @apply italic;
32
+ }
33
+
34
+ .vprose ul {
35
+ @apply my-3 pl-6 list-disc space-y-1;
36
+ }
37
+
38
+ .vprose ol {
39
+ @apply my-3 pl-6 list-decimal space-y-1;
40
+ }
41
+
42
+ .vprose li {
43
+ @apply text-mixer-foreground/50 my-2 pl-1;
44
+ }
45
+
46
+ .vprose blockquote {
47
+ @apply border-l-4 border-muted/30 dark:border-muted pl-4 italic text-muted my-3;
48
+ }
49
+
50
+ .vprose hr {
51
+ @apply border-muted/30 dark:border-muted my-4;
52
+ }
53
+
54
+ .vprose h1 {
55
+ @apply font-bold text-2xl my-2;
56
+ }
57
+
58
+ .vprose h2 {
59
+ @apply font-bold text-xl my-2;
60
+ }
61
+
62
+ .vprose h3 {
63
+ @apply font-bold text-lg my-2;
64
+ }
65
+
66
+ .vprose table {
67
+ @apply min-w-full border-collapse border border-muted/30 my-4;
68
+ }
69
+
70
+ .vprose th {
71
+ @apply border border-muted/30 bg-mixer-muted/50 px-4 py-2 text-left text-muted font-bold;
72
+ }
73
+
74
+ .vprose td {
75
+ @apply border border-muted/30 px-4 py-2 text-muted;
76
+ }
77
+
78
+ .vprose code {
79
+ @apply font-mono text-sm;
80
+ }
81
+
82
+ .vprose :not(pre) > code {
83
+ @apply px-1.5 py-0.5 rounded text-muted bg-muted/20 dark:bg-muted/30;
84
+ }
85
+
86
+ .vprose .code-language-indicator {
87
+ @apply text-xs px-3 py-1 rounded-t-md font-mono border-t border-l border-r -mb-2;
88
+ }
@@ -0,0 +1,72 @@
1
+ :root {
2
+ --mixer: oklch(1 0 0);
3
+ }
4
+ .dark {
5
+ --mixer: oklch(0 0 0);
6
+ }
7
+ @utility text-mixer-* {
8
+ color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 0.7%));
9
+ }
10
+
11
+ @utility text-disabled-* {
12
+ color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(50 * 0.7%));
13
+ }
14
+
15
+ @utility bg-* {
16
+ background-color: --value(--color-*-background, [*])
17
+ }
18
+
19
+ @utility bg-mixer-* {
20
+ background-color: color-mix(in oklab, --value(--color-*-background, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
21
+ }
22
+
23
+ @utility border-* {
24
+ border-color: --value(--color-*, [*])
25
+ }
26
+
27
+ @utility border-mixer-* {
28
+ border-color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
29
+ }
30
+ @utility border-disabled-* {
31
+ border-color: color-mix(in oklab, --value(--color-*-background, [*]), var(--mixer) calc(50 * 0.7%));
32
+ }
33
+
34
+ @utility decoration-mixer-* {
35
+ text-decoration-color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
36
+ }
37
+
38
+ @utility outline-mixer-* {
39
+ outline-color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
40
+ }
41
+
42
+ @utility shadow-mixer-* {
43
+ --tw-shadow-color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
44
+ }
45
+
46
+ @utility inset-shadow-mixer-* {
47
+ --tw-inset-shadow-color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
48
+ }
49
+
50
+ @utility ring-mixer-* {
51
+ --tw-ring-color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
52
+ }
53
+
54
+ @utility inset-ring-mixer-* {
55
+ --tw-inset-ring-color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
56
+ }
57
+
58
+ @utility accent-mixer-* {
59
+ accent-color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
60
+ }
61
+
62
+ @utility caret-mixer-* {
63
+ caret-color: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
64
+ }
65
+
66
+ @utility fill-mixer-* {
67
+ fill: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
68
+ }
69
+
70
+ @utility stroke-mixer-* {
71
+ stroke: color-mix(in oklab, --value(--color-*, [*]), var(--mixer) calc(( (--modifier(integer, var(--modifier-default))) ) * 1%));
72
+ }