@adea-ai/ui 0.118.3 → 0.119.1
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/README.md +7 -3
- package/dist/components/composites/settings/index.d.ts +1 -1
- package/dist/components/composites/settings/index.d.ts.map +1 -1
- package/dist/components/composites/settings/settings-layout.d.ts +18 -2
- package/dist/components/composites/settings/settings-layout.d.ts.map +1 -1
- package/dist/components/composites/settings/settings-layout.js +40 -5
- package/dist/components/composites/settings/settings-layout.js.map +1 -1
- package/dist/components/composites/settings/settings-navigation.d.ts.map +1 -1
- package/dist/components/composites/settings/settings-navigation.js +36 -14
- package/dist/components/composites/settings/settings-navigation.js.map +1 -1
- package/dist/components/ui/code-block/code-block.d.ts +13 -0
- package/dist/components/ui/code-block/code-block.d.ts.map +1 -1
- package/dist/components/ui/code-block/code-block.js +22 -3
- package/dist/components/ui/code-block/code-block.js.map +1 -1
- package/dist/components/ui/item/index.d.ts +1 -1
- package/dist/components/ui/item/index.d.ts.map +1 -1
- package/dist/components/ui/item/item.d.ts +17 -1
- package/dist/components/ui/item/item.d.ts.map +1 -1
- package/dist/components/ui/item/item.js +17 -10
- package/dist/components/ui/item/item.js.map +1 -1
- package/dist/lib/themes.d.ts +6 -0
- package/dist/lib/themes.d.ts.map +1 -1
- package/dist/lib/themes.js +11 -3
- package/dist/lib/themes.js.map +1 -1
- package/dist/r/appearance-editor.json +1 -1
- package/dist/r/lib.json +1 -1
- package/dist/r/registry.json +6 -4
- package/dist/r/settings.json +3 -1
- package/dist/r/src/components/composites/settings/index.ts +5 -1
- package/dist/r/src/components/composites/settings/settings-layout.tsx +48 -5
- package/dist/r/src/components/composites/settings/settings-navigation.tsx +44 -16
- package/dist/r/src/components/ui/code-block/code-block.tsx +27 -2
- package/dist/r/src/components/ui/item/index.ts +1 -0
- package/dist/r/src/components/ui/item/item.tsx +41 -5
- package/dist/r/src/lib/themes.ts +23 -5
- package/dist/r/src/styles/theme.css +17 -13
- package/dist/r/theming.json +1 -1
- package/package.json +2 -2
- package/registry.json +6 -4
- package/src/components/composites/settings/index.ts +5 -1
- package/src/components/composites/settings/settings-layout.tsx +48 -5
- package/src/components/composites/settings/settings-navigation.tsx +44 -16
- package/src/components/ui/code-block/code-block.tsx +27 -2
- package/src/components/ui/item/index.ts +1 -0
- package/src/components/ui/item/item.tsx +41 -5
- package/src/lib/themes.ts +23 -5
- package/src/styles/theme.css +17 -13
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { useTabsContext } from '@kobalte/core/tabs'
|
|
1
2
|
import type { JSX } from 'solid-js'
|
|
2
|
-
import { createEffect, createUniqueId, onCleanup, splitProps } from 'solid-js'
|
|
3
|
+
import { createEffect, createUniqueId, onCleanup, Show, splitProps } from 'solid-js'
|
|
3
4
|
import { cn } from '#lib/utils'
|
|
4
5
|
import { sidebarNavItemClass, sidebarNavItemStateClass } from '../../layout/sidebar-nav/sidebar-nav'
|
|
5
6
|
import { TabsList, TabsTrigger, type TabsListProps } from '../../ui/tabs'
|
|
@@ -47,6 +48,14 @@ export type SettingsNavigationProps = Omit<
|
|
|
47
48
|
* the controlled value, panel content, icons and any persistence or routing.
|
|
48
49
|
* Use ordinary tabs for a short, ungrouped row of view choices.
|
|
49
50
|
*
|
|
51
|
+
* The shape follows the enclosing `Tabs` orientation rather than a prop of its
|
|
52
|
+
* own, so the visual axis can never disagree with the arrow keys Kobalte
|
|
53
|
+
* binds: `vertical` is the grouped rail, `horizontal` is a single scrollable
|
|
54
|
+
* strip of tabs (what `SettingsLayout` shows below 48rem). The strip keeps the
|
|
55
|
+
* groups in order, separated by a rule; their visible headings drop out, since
|
|
56
|
+
* an overline between tabs reads as another tab, but each tab still carries its
|
|
57
|
+
* group as its accessible description.
|
|
58
|
+
*
|
|
50
59
|
* Kobalte owns roving focus, arrow keys, selection and tab/panel ARIA. This
|
|
51
60
|
* component adds no URL, storage or host-specific state. Set
|
|
52
61
|
* `revealSelected={false}` when the surrounding layout does not use an internal
|
|
@@ -88,12 +97,16 @@ export function SettingsNavigation(props: SettingsNavigationProps) {
|
|
|
88
97
|
'onReselect',
|
|
89
98
|
'revealSelected',
|
|
90
99
|
])
|
|
100
|
+
const tabs = useTabsContext()
|
|
101
|
+
const strip = () => tabs.orientation() === 'horizontal'
|
|
91
102
|
const triggers = new Map<string, HTMLButtonElement>()
|
|
92
103
|
const groupIdPrefix = `settings-navigation-${createUniqueId()}`
|
|
93
104
|
|
|
94
105
|
createEffect(() => {
|
|
95
106
|
const value = local.value
|
|
96
107
|
const reveal = local.revealSelected
|
|
108
|
+
// Tracked so a rail that becomes a strip (or back) re-reveals on the new axis.
|
|
109
|
+
strip()
|
|
97
110
|
if (reveal === false) return
|
|
98
111
|
|
|
99
112
|
const revealCurrent = () => {
|
|
@@ -111,9 +124,17 @@ export function SettingsNavigation(props: SettingsNavigationProps) {
|
|
|
111
124
|
<TabsList
|
|
112
125
|
data-slot="settings-navigation"
|
|
113
126
|
aria-label={local['aria-label']}
|
|
114
|
-
orientation=
|
|
127
|
+
orientation={tabs.orientation()}
|
|
115
128
|
class={cn(
|
|
116
|
-
|
|
129
|
+
// Positioned so the visually hidden group names are laid out (and
|
|
130
|
+
// clipped) inside the list: unpositioned, their absolute boxes escape a
|
|
131
|
+
// scrolled strip and widen the page by however far it has scrolled.
|
|
132
|
+
'relative flex min-w-0 shrink-0 justify-start',
|
|
133
|
+
strip()
|
|
134
|
+
? // The block padding is the room the focus ring needs: a scroller
|
|
135
|
+
// clips at its padding edge, and this one scrolls sideways only.
|
|
136
|
+
'scroll-fade w-full flex-row items-center gap-1 overflow-x-auto overflow-y-hidden border-b border-border px-2 py-1.5'
|
|
137
|
+
: 'max-h-full min-h-0 flex-col items-stretch gap-2 overflow-x-hidden overflow-y-auto px-2 py-2',
|
|
117
138
|
local.class
|
|
118
139
|
)}
|
|
119
140
|
{...rest}
|
|
@@ -124,24 +145,30 @@ export function SettingsNavigation(props: SettingsNavigationProps) {
|
|
|
124
145
|
<div
|
|
125
146
|
role="none"
|
|
126
147
|
data-slot="settings-navigation-group"
|
|
127
|
-
class=
|
|
148
|
+
class={cn(
|
|
149
|
+
'flex gap-0.5',
|
|
150
|
+
strip()
|
|
151
|
+
? 'shrink-0 flex-row items-center not-first:ms-1 not-first:border-s not-first:border-border not-first:ps-2'
|
|
152
|
+
: 'min-w-0 flex-col'
|
|
153
|
+
)}
|
|
128
154
|
>
|
|
129
155
|
<span id={groupId} class="sr-only">
|
|
130
156
|
{group.label}
|
|
131
157
|
</span>
|
|
132
|
-
{
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
158
|
+
<Show when={!strip()}>
|
|
159
|
+
{/* The overline role on the sidebar's own muted foreground. */}
|
|
160
|
+
<Text
|
|
161
|
+
variant="overline"
|
|
162
|
+
tone="inherit"
|
|
163
|
+
aria-hidden="true"
|
|
164
|
+
class="px-2 py-1.5 text-sidebar-muted-foreground"
|
|
165
|
+
>
|
|
166
|
+
{group.label}
|
|
167
|
+
</Text>
|
|
168
|
+
</Show>
|
|
141
169
|
{group.items.map((item) => (
|
|
142
170
|
<TabsTrigger
|
|
143
171
|
data-slot="settings-navigation-trigger"
|
|
144
|
-
orientation="vertical"
|
|
145
172
|
aria-describedby={groupId}
|
|
146
173
|
value={item.value}
|
|
147
174
|
disabled={item.disabled}
|
|
@@ -155,11 +182,12 @@ export function SettingsNavigation(props: SettingsNavigationProps) {
|
|
|
155
182
|
class={cn(
|
|
156
183
|
sidebarNavItemClass,
|
|
157
184
|
sidebarNavItemStateClass.idle,
|
|
158
|
-
'h-row-lg
|
|
185
|
+
'h-row-lg justify-start border-0 px-3 py-2 text-left data-[selected]:bg-primary-subtle data-[selected]:text-foreground',
|
|
186
|
+
strip() ? 'w-auto shrink-0' : 'w-full'
|
|
159
187
|
)}
|
|
160
188
|
>
|
|
161
189
|
{item.icon}
|
|
162
|
-
<span class=
|
|
190
|
+
<span class={cn('min-w-0', { truncate: !strip() })}>{item.label}</span>
|
|
163
191
|
</TabsTrigger>
|
|
164
192
|
))}
|
|
165
193
|
</div>
|
|
@@ -69,6 +69,19 @@ export type CodeBlockProps = Omit<ComponentProps<'div'>, 'children'> & {
|
|
|
69
69
|
showLineNumbers?: boolean
|
|
70
70
|
/** The height above which the action row is repeated below the block. */
|
|
71
71
|
tallThreshold?: number
|
|
72
|
+
/**
|
|
73
|
+
* Cap the code body's height and scroll it vertically past that. A number is
|
|
74
|
+
* pixels; a string is any CSS length (`'20rem'`, `'50vh'`). Unset, the block
|
|
75
|
+
* grows with its content.
|
|
76
|
+
*/
|
|
77
|
+
maxHeight?: number | string
|
|
78
|
+
/**
|
|
79
|
+
* Soft-wrap long lines inside the block instead of scrolling sideways. Off by
|
|
80
|
+
* default: wrapped code loses its column alignment, so it is for prose-like
|
|
81
|
+
* output (logs, long commands) in a narrow column. Wraps the plain renderer and
|
|
82
|
+
* any `pre` inside `highlight` output; line numbers stay on the first visual line.
|
|
83
|
+
*/
|
|
84
|
+
wrap?: boolean
|
|
72
85
|
}
|
|
73
86
|
|
|
74
87
|
/** The height a block must exceed before its actions are repeated. */
|
|
@@ -103,6 +116,8 @@ export function CodeBlock(props: CodeBlockProps) {
|
|
|
103
116
|
'lineHeight',
|
|
104
117
|
'showLineNumbers',
|
|
105
118
|
'tallThreshold',
|
|
119
|
+
'maxHeight',
|
|
120
|
+
'wrap',
|
|
106
121
|
'class',
|
|
107
122
|
'ref',
|
|
108
123
|
])
|
|
@@ -114,6 +129,8 @@ export function CodeBlock(props: CodeBlockProps) {
|
|
|
114
129
|
const label = () => local.title ?? local.language ?? 'code'
|
|
115
130
|
const regionLabel = () => (local.language ? `${local.language} code` : 'code')
|
|
116
131
|
const lines = createMemo(() => local.code.replace(/\n$/, '').split('\n'))
|
|
132
|
+
const maxHeight = () =>
|
|
133
|
+
typeof local.maxHeight === 'number' ? `${local.maxHeight}px` : local.maxHeight
|
|
117
134
|
|
|
118
135
|
const copy = async () => {
|
|
119
136
|
const ok = await copyText(local.code)
|
|
@@ -160,7 +177,15 @@ export function CodeBlock(props: CodeBlockProps) {
|
|
|
160
177
|
<Actions />
|
|
161
178
|
</div>
|
|
162
179
|
<div
|
|
163
|
-
|
|
180
|
+
data-slot="code-block-body"
|
|
181
|
+
data-wrap={local.wrap ? '' : undefined}
|
|
182
|
+
class={cn('scroll-fade overflow-x-auto', {
|
|
183
|
+
// A capped body scrolls on both axes; the region is already a tab stop,
|
|
184
|
+
// so the keyboard reaches the vertical overflow the same way.
|
|
185
|
+
'overflow-y-auto': local.maxHeight !== undefined,
|
|
186
|
+
'[&_pre]:whitespace-pre-wrap [&_pre]:[overflow-wrap:anywhere]': local.wrap,
|
|
187
|
+
})}
|
|
188
|
+
style={maxHeight() === undefined ? undefined : { 'max-height': maxHeight() }}
|
|
164
189
|
// A region that scrolls must be focusable, and a tab stop needs a name.
|
|
165
190
|
tabindex="0"
|
|
166
191
|
role="region"
|
|
@@ -181,7 +206,7 @@ export function CodeBlock(props: CodeBlockProps) {
|
|
|
181
206
|
>
|
|
182
207
|
{index() + 1}
|
|
183
208
|
</span>
|
|
184
|
-
<span>{line || ' '}</span>
|
|
209
|
+
<span class={cn({ 'min-w-0': local.wrap })}>{line || ' '}</span>
|
|
185
210
|
</span>
|
|
186
211
|
)}
|
|
187
212
|
</For>
|
|
@@ -47,6 +47,14 @@ export type ItemProps = ComponentProps<'div'> &
|
|
|
47
47
|
media?: JSX.Element
|
|
48
48
|
/** A trailing slot: a badge, a timestamp, a menu trigger. */
|
|
49
49
|
trailing?: JSX.Element
|
|
50
|
+
/**
|
|
51
|
+
* Move the trailing slot onto its own line, end-aligned under the body, once
|
|
52
|
+
* the item is narrower than 28rem — the width `ListRow` stacks its trailing
|
|
53
|
+
* controls at. Off by default: a row of badges and an icon button fits beside
|
|
54
|
+
* the body, but a pair of labelled buttons squeezes a phone-width body to a
|
|
55
|
+
* few characters.
|
|
56
|
+
*/
|
|
57
|
+
stackTrailing?: boolean
|
|
50
58
|
}
|
|
51
59
|
|
|
52
60
|
export function Item(props: ItemProps) {
|
|
@@ -56,13 +64,22 @@ export function Item(props: ItemProps) {
|
|
|
56
64
|
'size',
|
|
57
65
|
'media',
|
|
58
66
|
'trailing',
|
|
67
|
+
'stackTrailing',
|
|
59
68
|
'children',
|
|
60
69
|
])
|
|
61
70
|
|
|
62
71
|
return (
|
|
63
72
|
<div
|
|
64
73
|
data-slot="item"
|
|
65
|
-
|
|
74
|
+
data-stack-trailing={local.stackTrailing ? '' : undefined}
|
|
75
|
+
class={cn(
|
|
76
|
+
itemVariants({ variant: local.variant, size: local.size }),
|
|
77
|
+
// The item is its own query container: the trailing slot answers to the
|
|
78
|
+
// width the item was given, not the viewport, so an item in a narrow
|
|
79
|
+
// column of a wide window stacks too.
|
|
80
|
+
{ '@container/item flex-wrap': local.stackTrailing },
|
|
81
|
+
local.class
|
|
82
|
+
)}
|
|
66
83
|
{...rest}
|
|
67
84
|
>
|
|
68
85
|
<Show when={local.media}>
|
|
@@ -77,7 +94,13 @@ export function Item(props: ItemProps) {
|
|
|
77
94
|
{local.children}
|
|
78
95
|
</div>
|
|
79
96
|
<Show when={local.trailing}>
|
|
80
|
-
<span
|
|
97
|
+
<span
|
|
98
|
+
data-slot="item-trailing"
|
|
99
|
+
class={cn('flex shrink-0 items-center gap-2', {
|
|
100
|
+
'@max-md/item:w-full @max-md/item:flex-wrap @max-md/item:justify-end':
|
|
101
|
+
local.stackTrailing,
|
|
102
|
+
})}
|
|
103
|
+
>
|
|
81
104
|
{local.trailing}
|
|
82
105
|
</span>
|
|
83
106
|
</Show>
|
|
@@ -90,12 +113,25 @@ export function ItemTitle(props: ComponentProps<'div'>) {
|
|
|
90
113
|
return <div data-slot="item-title" class={cn('truncate font-medium', local.class)} {...rest} />
|
|
91
114
|
}
|
|
92
115
|
|
|
93
|
-
export
|
|
94
|
-
|
|
116
|
+
export type ItemDescriptionProps = ComponentProps<'div'> & {
|
|
117
|
+
/**
|
|
118
|
+
* Clamp to two lines. On by default, so a grid of items keeps one height; pass
|
|
119
|
+
* `false` where the description is the content — a setting's explanation, an
|
|
120
|
+
* error the reader has to read in full.
|
|
121
|
+
*/
|
|
122
|
+
clamp?: boolean
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function ItemDescription(props: ItemDescriptionProps) {
|
|
126
|
+
const [local, rest] = splitProps(props, ['class', 'clamp'])
|
|
95
127
|
return (
|
|
96
128
|
<div
|
|
97
129
|
data-slot="item-description"
|
|
98
|
-
class={cn(
|
|
130
|
+
class={cn(
|
|
131
|
+
'text-muted-foreground text-xs text-pretty',
|
|
132
|
+
{ 'line-clamp-2': local.clamp !== false },
|
|
133
|
+
local.class
|
|
134
|
+
)}
|
|
99
135
|
{...rest}
|
|
100
136
|
/>
|
|
101
137
|
)
|
package/src/lib/themes.ts
CHANGED
|
@@ -296,6 +296,16 @@ function toVariant(theme: AdeaThemeRecord): ThemeVariant {
|
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
298
|
|
|
299
|
+
/**
|
|
300
|
+
* A variant's `--primary-subtle`: the tint over `var(--primary)` at the strength its
|
|
301
|
+
* catalogue record measures (`primarySubtleAlpha`). A variant that is not in the
|
|
302
|
+
* catalogue has nothing to measure, and gets its appearance's ceiling.
|
|
303
|
+
*/
|
|
304
|
+
export function primarySubtleFor(theme: Pick<ThemeVariant, 'id' | 'appearance'>): string {
|
|
305
|
+
const record = getTheme(theme.id)
|
|
306
|
+
return record ? primarySubtleCss(record) : primarySubtleCss(theme.appearance)
|
|
307
|
+
}
|
|
308
|
+
|
|
299
309
|
/** The catalogue, in catalogue order. */
|
|
300
310
|
export const builtinThemes: readonly ThemeVariant[] = Object.freeze(catalogue.map(toVariant))
|
|
301
311
|
|
|
@@ -462,12 +472,17 @@ export function accentVariables(
|
|
|
462
472
|
const preset = resolveAccentPreset(accentId, light, dark)
|
|
463
473
|
if (!preset) return undefined
|
|
464
474
|
|
|
475
|
+
// `--primary-subtle` is deliberately not here. It is a `color-mix()` over
|
|
476
|
+
// `var(--primary)`, so the theme's own declaration (`themeCssVariables`, or the
|
|
477
|
+
// default block in `theme.css`) already follows the accent; and its strength is the
|
|
478
|
+
// *theme's*, measured by `primarySubtleAlpha` to hold body text at 4.5:1 for every
|
|
479
|
+
// accent the theme offers. Writing one here would replace that measured strength
|
|
480
|
+
// with whatever this function was given, which is how an accent used to undo it.
|
|
465
481
|
const roles = accentRoles(preset, appearance)
|
|
466
482
|
return {
|
|
467
483
|
'--primary': roles.primary,
|
|
468
484
|
'--primary-foreground': roles.primaryForeground,
|
|
469
485
|
'--primary-hover': roles.primaryHover,
|
|
470
|
-
'--primary-subtle': roles.primarySubtle,
|
|
471
486
|
'--ring': roles.ring,
|
|
472
487
|
}
|
|
473
488
|
}
|
|
@@ -502,12 +517,15 @@ export function themeCssVariables(theme: ThemeVariant): Record<string, string> {
|
|
|
502
517
|
* step cannot be expressed as a mix (see `primaryHover`). Left out, a theme switch
|
|
503
518
|
* would keep the previous theme's hover on the new theme's primary.
|
|
504
519
|
*
|
|
505
|
-
* `--primary-subtle` is a mix over `--primary`, so it
|
|
506
|
-
*
|
|
507
|
-
*
|
|
520
|
+
* `--primary-subtle` is a mix over `--primary`, so it follows an accent on its
|
|
521
|
+
* own, but its *strength* is per theme: `primarySubtleCss(record)` lowers the
|
|
522
|
+
* appearance ceiling only as far as this theme needs for body text to clear 4.5:1
|
|
523
|
+
* on the tint, over every surface, for every accent it offers. It has to be
|
|
524
|
+
* written per theme for that reason — the appearance-wide value is not legible on
|
|
525
|
+
* every palette.
|
|
508
526
|
*/
|
|
509
527
|
'--primary-hover': primaryHover(c.primary, theme.appearance),
|
|
510
|
-
'--primary-subtle':
|
|
528
|
+
'--primary-subtle': primarySubtleFor(theme),
|
|
511
529
|
'--secondary': c.secondary,
|
|
512
530
|
'--secondary-foreground': c.secondaryForeground,
|
|
513
531
|
'--muted': c.muted,
|
package/src/styles/theme.css
CHANGED
|
@@ -153,6 +153,11 @@
|
|
|
153
153
|
* rule rather than a matching one — which is what they were not, before.
|
|
154
154
|
*/
|
|
155
155
|
--primary-hover: oklch(0.4643 0.1668 301.69);
|
|
156
|
+
/*
|
|
157
|
+
* The selected-state tint. A share of `--primary`, so it follows an accent with
|
|
158
|
+
* no block of its own; the share is this theme's, measured by @adea-ai/themes so
|
|
159
|
+
* body text clears 4.5:1 on it over every surface, for every accent it offers.
|
|
160
|
+
*/
|
|
156
161
|
--primary-subtle: color-mix(in oklch, var(--primary) 10%, transparent);
|
|
157
162
|
/* The window chrome, one step off the canvas. */
|
|
158
163
|
--chrome: var(--surface);
|
|
@@ -283,6 +288,11 @@
|
|
|
283
288
|
* rule rather than a matching one — which is what they were not, before.
|
|
284
289
|
*/
|
|
285
290
|
--primary-hover: oklch(0.7823 0.1668 301.69);
|
|
291
|
+
/*
|
|
292
|
+
* The selected-state tint. A share of `--primary`, so it follows an accent with
|
|
293
|
+
* no block of its own; the share is this theme's, measured by @adea-ai/themes so
|
|
294
|
+
* body text clears 4.5:1 on it over every surface, for every accent it offers.
|
|
295
|
+
*/
|
|
286
296
|
--primary-subtle: color-mix(in oklch, var(--primary) 16%, transparent);
|
|
287
297
|
/* The window chrome, one step off the canvas. */
|
|
288
298
|
--chrome: var(--surface);
|
|
@@ -310,7 +320,13 @@
|
|
|
310
320
|
* adea's six accent presets, as a selection rather than a constant. `data-accent` sits on
|
|
311
321
|
* the same element as `dark` — in both applications that is `<html>` — and each
|
|
312
322
|
* block overrides the roles an accent owns: the interactive primary, its label,
|
|
313
|
-
* its hover rung
|
|
323
|
+
* its hover rung and the focus ring.
|
|
324
|
+
*
|
|
325
|
+
* The tint, `--primary-subtle`, is not one of them. It is a share of `var(--primary)`
|
|
326
|
+
* declared on the same element, so it already follows the accent; and the share is
|
|
327
|
+
* the theme's own, measured by @adea-ai/themes so body text clears 4.5:1 on it. A
|
|
328
|
+
* block keyed only on the appearance could carry only the appearance-wide ceiling,
|
|
329
|
+
* which would undo that measurement for every theme that needs a lighter wash.
|
|
314
330
|
*
|
|
315
331
|
* The values are adea's accent presets, passed through the same two rules
|
|
316
332
|
* `deriveAccentRoles` applies in the product:
|
|
@@ -330,14 +346,12 @@
|
|
|
330
346
|
--primary: oklch(0.4907 0.2412 292.58);
|
|
331
347
|
--primary-foreground: oklch(1 0 0);
|
|
332
348
|
--primary-hover: oklch(0.4407 0.2412 292.58);
|
|
333
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 10%, transparent);
|
|
334
349
|
--ring: oklch(0.4907 0.2412 292.58);
|
|
335
350
|
}
|
|
336
351
|
.dark[data-accent='violet'] {
|
|
337
352
|
--primary: oklch(0.709 0.1592 293.54);
|
|
338
353
|
--primary-foreground: oklch(0 0 0);
|
|
339
354
|
--primary-hover: oklch(0.759 0.1592 293.54);
|
|
340
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 16%, transparent);
|
|
341
355
|
--ring: oklch(0.709 0.1592 293.54);
|
|
342
356
|
}
|
|
343
357
|
|
|
@@ -345,14 +359,12 @@
|
|
|
345
359
|
--primary: oklch(0.5461 0.2152 262.88);
|
|
346
360
|
--primary-foreground: oklch(1 0 0);
|
|
347
361
|
--primary-hover: oklch(0.4961 0.2152 262.88);
|
|
348
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 10%, transparent);
|
|
349
362
|
--ring: oklch(0.5461 0.2152 262.88);
|
|
350
363
|
}
|
|
351
364
|
.dark[data-accent='blue'] {
|
|
352
365
|
--primary: oklch(0.7137 0.1434 254.62);
|
|
353
366
|
--primary-foreground: oklch(0 0 0);
|
|
354
367
|
--primary-hover: oklch(0.7637 0.1434 254.62);
|
|
355
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 16%, transparent);
|
|
356
368
|
--ring: oklch(0.7137 0.1434 254.62);
|
|
357
369
|
}
|
|
358
370
|
|
|
@@ -360,14 +372,12 @@
|
|
|
360
372
|
--primary: oklch(0.5273 0.1371 150.07);
|
|
361
373
|
--primary-foreground: oklch(1 0 0);
|
|
362
374
|
--primary-hover: oklch(0.4773 0.1371 150.07);
|
|
363
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 10%, transparent);
|
|
364
375
|
--ring: oklch(0.5273 0.1371 150.07);
|
|
365
376
|
}
|
|
366
377
|
.dark[data-accent='green'] {
|
|
367
378
|
--primary: oklch(0.8003 0.1821 151.71);
|
|
368
379
|
--primary-foreground: oklch(0 0 0);
|
|
369
380
|
--primary-hover: oklch(0.8503 0.1363 151.71);
|
|
370
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 16%, transparent);
|
|
371
381
|
--ring: oklch(0.8003 0.1821 151.71);
|
|
372
382
|
}
|
|
373
383
|
|
|
@@ -375,14 +385,12 @@
|
|
|
375
385
|
--primary: oklch(0.5553 0.1455 49);
|
|
376
386
|
--primary-foreground: oklch(1 0 0);
|
|
377
387
|
--primary-hover: oklch(0.5053 0.1455 49);
|
|
378
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 10%, transparent);
|
|
379
388
|
--ring: oklch(0.5553 0.1455 49);
|
|
380
389
|
}
|
|
381
390
|
.dark[data-accent='amber'] {
|
|
382
391
|
--primary: oklch(0.8369 0.1644 84.43);
|
|
383
392
|
--primary-foreground: oklch(0 0 0);
|
|
384
393
|
--primary-hover: oklch(0.8869 0.0991 84.43);
|
|
385
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 16%, transparent);
|
|
386
394
|
--ring: oklch(0.8369 0.1644 84.43);
|
|
387
395
|
}
|
|
388
396
|
|
|
@@ -390,14 +398,12 @@
|
|
|
390
398
|
--primary: oklch(0.5198 0.0936 223.13);
|
|
391
399
|
--primary-foreground: oklch(1 0 0);
|
|
392
400
|
--primary-hover: oklch(0.4698 0.0936 223.13);
|
|
393
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 10%, transparent);
|
|
394
401
|
--ring: oklch(0.5198 0.0936 223.13);
|
|
395
402
|
}
|
|
396
403
|
.dark[data-accent='cyan'] {
|
|
397
404
|
--primary: oklch(0.7971 0.1339 211.53);
|
|
398
405
|
--primary-foreground: oklch(0 0 0);
|
|
399
406
|
--primary-hover: oklch(0.8471 0.102 211.53);
|
|
400
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 16%, transparent);
|
|
401
407
|
--ring: oklch(0.7971 0.1339 211.53);
|
|
402
408
|
}
|
|
403
409
|
|
|
@@ -405,14 +411,12 @@
|
|
|
405
411
|
--primary: oklch(0.5246 0.199 3.96);
|
|
406
412
|
--primary-foreground: oklch(1 0 0);
|
|
407
413
|
--primary-hover: oklch(0.4746 0.199 3.96);
|
|
408
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 10%, transparent);
|
|
409
414
|
--ring: oklch(0.5246 0.199 3.96);
|
|
410
415
|
}
|
|
411
416
|
.dark[data-accent='pink'] {
|
|
412
417
|
--primary: oklch(0.7253 0.1752 349.76);
|
|
413
418
|
--primary-foreground: oklch(0 0 0);
|
|
414
419
|
--primary-hover: oklch(0.7753 0.1752 349.76);
|
|
415
|
-
--primary-subtle: color-mix(in oklch, var(--primary) 16%, transparent);
|
|
416
420
|
--ring: oklch(0.7253 0.1752 349.76);
|
|
417
421
|
}
|
|
418
422
|
/* @end generated accents */
|