@tanishqkancharla/maui 0.0.56 → 0.0.58
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/dist/UIDatabase/Focus.d.ts +8 -8
- package/dist/UIDatabase/UIDatabase.d.ts +1 -1
- package/dist/components/Button.js +32 -23
- package/dist/components/FuzzyString.js +1 -1
- package/dist/components/Input.d.ts +1 -1
- package/dist/components/MermaidDiagram.js +1 -1
- package/dist/components/Slider.js +1 -1
- package/dist/components/Tooltip.js +1 -1
- package/dist/theme/dataTheme.d.ts +1 -1
- package/dist/tokens/background.d.ts +2 -2
- package/dist/tokens/colors.d.ts +62 -62
- package/dist/tokens/text.d.ts +7 -7
- package/dist/utils/mauiShikiTheme.d.ts +22 -22
- package/package.json +44 -41
- package/skills/maui/references/components/buttons.md +1 -1
- package/src/components/Button.tsx +37 -37
- package/src/pages/ButtonsPage.tsx +3 -2
- package/src/public/og-dark.png +0 -0
- package/src/public/og-light.png +0 -0
- package/src/public/og.png +0 -0
|
@@ -20,14 +20,14 @@ export type UIFocusSchema = {
|
|
|
20
20
|
value: FocusTreeKey | undefined;
|
|
21
21
|
};
|
|
22
22
|
export declare const focusActions: {
|
|
23
|
-
registerFocusElement: (dbOrTx: import("tuple-database").
|
|
24
|
-
unregisterFocusElement: (dbOrTx: import("tuple-database").
|
|
25
|
-
registerFocusScope: (dbOrTx: import("tuple-database").
|
|
26
|
-
unregisterFocusScope: (dbOrTx: import("tuple-database").
|
|
27
|
-
focus: (dbOrTx: import("tuple-database").
|
|
28
|
-
blur: (dbOrTx: import("tuple-database").
|
|
29
|
-
moveToNextFocus: (dbOrTx: import("tuple-database").
|
|
30
|
-
moveToPreviousFocus: (dbOrTx: import("tuple-database").
|
|
23
|
+
registerFocusElement: (dbOrTx: import("tuple-database").TupleDatabaseClientApi<UIFocusSchema> | import("tuple-database").TupleTransactionApi<UIFocusSchema>, elementKey: FocusTreeKey) => void;
|
|
24
|
+
unregisterFocusElement: (dbOrTx: import("tuple-database").TupleDatabaseClientApi<UIFocusSchema> | import("tuple-database").TupleTransactionApi<UIFocusSchema>, elementKey: FocusTreeKey) => void;
|
|
25
|
+
registerFocusScope: (dbOrTx: import("tuple-database").TupleDatabaseClientApi<UIFocusSchema> | import("tuple-database").TupleTransactionApi<UIFocusSchema>, scopeKey: FocusTreeKey, scopeProps: FocusScopeProps) => void;
|
|
26
|
+
unregisterFocusScope: (dbOrTx: import("tuple-database").TupleDatabaseClientApi<UIFocusSchema> | import("tuple-database").TupleTransactionApi<UIFocusSchema>, scopeKey: FocusTreeKey) => void;
|
|
27
|
+
focus: (dbOrTx: import("tuple-database").TupleDatabaseClientApi<UIFocusSchema> | import("tuple-database").TupleTransactionApi<UIFocusSchema>, key: FocusTreeKey) => void;
|
|
28
|
+
blur: (dbOrTx: import("tuple-database").TupleDatabaseClientApi<UIFocusSchema> | import("tuple-database").TupleTransactionApi<UIFocusSchema>, key: FocusTreeKey) => void;
|
|
29
|
+
moveToNextFocus: (dbOrTx: import("tuple-database").TupleDatabaseClientApi<UIFocusSchema> | import("tuple-database").TupleTransactionApi<UIFocusSchema>) => void;
|
|
30
|
+
moveToPreviousFocus: (dbOrTx: import("tuple-database").TupleDatabaseClientApi<UIFocusSchema> | import("tuple-database").TupleTransactionApi<UIFocusSchema>) => void;
|
|
31
31
|
};
|
|
32
32
|
type FocusElementAndKey = {
|
|
33
33
|
key: ["focusTree", ...string[]];
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { ReadOnlyTupleDatabaseClientApi, TupleDatabaseClientApi } from "tuple-database";
|
|
3
3
|
import { UIFocusSchema } from "./Focus";
|
|
4
4
|
export type UIDatabaseSchema = UIFocusSchema;
|
|
5
|
-
export declare const uiQuery: <I extends any[], O>(fn: (tx: import("tuple-database").TupleTransactionApi<UIFocusSchema>, ...args: I) => O) => (dbOrTx: import("tuple-database").TupleTransactionApi<UIFocusSchema
|
|
5
|
+
export declare const uiQuery: <I extends any[], O>(fn: (tx: import("tuple-database").TupleTransactionApi<UIFocusSchema>, ...args: I) => O) => (dbOrTx: TupleDatabaseClientApi<UIFocusSchema> | import("tuple-database").TupleTransactionApi<UIFocusSchema>, ...args: I) => O;
|
|
6
6
|
export type UIDatabase = TupleDatabaseClientApi<UIDatabaseSchema>;
|
|
7
7
|
export type ReadOnlyUIDatabase = ReadOnlyTupleDatabaseClientApi<UIDatabaseSchema>;
|
|
8
8
|
export declare function UIDatabaseProvider(props: {
|
|
@@ -20,6 +20,7 @@ const disabledRaised = {
|
|
|
20
20
|
opacity: 1,
|
|
21
21
|
color: colors.gray[8],
|
|
22
22
|
backgroundColor: backgroundColor.element,
|
|
23
|
+
backgroundImage: "none",
|
|
23
24
|
boxShadow: buttonShadow,
|
|
24
25
|
};
|
|
25
26
|
const disabledQuiet = {
|
|
@@ -141,40 +142,48 @@ function darkerFill(color) {
|
|
|
141
142
|
function onSolidText(color) {
|
|
142
143
|
return `oklch(from ${color} clamp(0.2, (0.75 - l) * 100, 0.99) 0 0)`;
|
|
143
144
|
}
|
|
145
|
+
/** Darker shade of a fill (OKLCH lightness offset) at an alpha. */
|
|
146
|
+
function fillShade(color, lightnessOffset, alpha = 1) {
|
|
147
|
+
return `oklch(from ${color} calc(l - ${lightnessOffset}) c h / ${alpha})`;
|
|
148
|
+
}
|
|
149
|
+
/** Fill-tinted edge and lift; no neutral gray, so the shadow matches any fill. */
|
|
144
150
|
function primaryButtonShadow(color) {
|
|
145
|
-
return `inset 0 1px #ffffff18, inset 0 0 1px .5px #fff2, 0
|
|
151
|
+
return `inset 0 1px #ffffff18, inset 0 0 1px .5px #fff2, 0 0 0 .5px ${fillShade(color, 0.1)}, 0 1px 2px ${fillShade(color, 0, 0.35)}, 0 3px 8px -3px ${fillShade(color, 0, 0.6)}`;
|
|
146
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Diagonal from a slightly darker, more saturated, warmer-rotated fill to the
|
|
155
|
+
* fill. The offsets are the OKLCH delta between Campsite's #FB432C → #FF591E.
|
|
156
|
+
*/
|
|
157
|
+
function primaryButtonGradient(color) {
|
|
158
|
+
return `linear-gradient(to top left, oklch(from ${color} calc(l - 0.027) calc(c * 1.05) calc(h - 6.8)), ${color})`;
|
|
159
|
+
}
|
|
160
|
+
/** Hover lightens the top of the gradient instead of replacing the fill. */
|
|
161
|
+
const primaryHoverSheen = `linear-gradient(to bottom, rgb(255 255 255 / 0.12), rgb(255 255 255 / 0))`;
|
|
162
|
+
const primaryClass = memoize((fill, textColor) => {
|
|
163
|
+
const primaryShadow = primaryButtonShadow(fill);
|
|
164
|
+
const gradient = primaryButtonGradient(fill);
|
|
165
|
+
return style(buttonBaseClass, focusRing("&:focus-visible", primaryShadow), {
|
|
166
|
+
color: textColor,
|
|
167
|
+
backgroundColor: fill,
|
|
168
|
+
backgroundImage: gradient,
|
|
169
|
+
boxShadow: primaryShadow,
|
|
170
|
+
"&:hover:not(:disabled)": {
|
|
171
|
+
backgroundImage: `${primaryHoverSheen}, ${gradient}`,
|
|
172
|
+
},
|
|
173
|
+
"&:disabled": disabledRaised,
|
|
174
|
+
});
|
|
175
|
+
});
|
|
147
176
|
const coloredButtonClass = memoize((variant, color) => {
|
|
148
177
|
if (isCssColor(color)) {
|
|
149
178
|
const fill = opaqueColor(color);
|
|
150
179
|
if (variant === "primary") {
|
|
151
|
-
|
|
152
|
-
const primaryShadow = primaryButtonShadow(fill);
|
|
153
|
-
return style(buttonBaseClass, focusRing("&:focus-visible", primaryShadow), {
|
|
154
|
-
color: onSolidText(fill),
|
|
155
|
-
backgroundColor: fill,
|
|
156
|
-
boxShadow: primaryShadow,
|
|
157
|
-
"&:hover:not(:disabled)": {
|
|
158
|
-
backgroundColor: hover,
|
|
159
|
-
},
|
|
160
|
-
"&:disabled": disabledRaised,
|
|
161
|
-
});
|
|
180
|
+
return primaryClass(fill, onSolidText(fill));
|
|
162
181
|
}
|
|
163
182
|
return quietClass(fill, darkerFill(fill), fill);
|
|
164
183
|
}
|
|
165
184
|
const scale = paletteFill(color);
|
|
166
185
|
if (variant === "primary") {
|
|
167
|
-
|
|
168
|
-
const hover = surfaceWash(colors.gray[12], surfaceMixPercent.hover, scale[9]);
|
|
169
|
-
return style(buttonBaseClass, focusRing("&:focus-visible", primaryShadow), {
|
|
170
|
-
color: darkTextOnSolid.has(color) ? scale[12] : "white",
|
|
171
|
-
backgroundColor: scale[9],
|
|
172
|
-
boxShadow: primaryShadow,
|
|
173
|
-
"&:hover:not(:disabled)": {
|
|
174
|
-
backgroundColor: hover,
|
|
175
|
-
},
|
|
176
|
-
"&:disabled": disabledRaised,
|
|
177
|
-
});
|
|
186
|
+
return primaryClass(scale[9], darkTextOnSolid.has(color) ? scale[12] : "white");
|
|
178
187
|
}
|
|
179
188
|
return quietClass(scale[11], scale[12], paletteAlpha(color)[9]);
|
|
180
189
|
});
|
|
@@ -17,7 +17,7 @@ export type SearchFieldProps = AriaSearchFieldProps & KeyboardHintProps & {
|
|
|
17
17
|
/** `root` on the field wrapper; `input` on RAC `Input` (`:hover`, `:disabled`, `aria-invalid`, `:focus-visible`, `::placeholder`); `frame` wraps the input when a keyboard hint is shown; `keyboardHint` on a Maui `Kbd variant="quiet"` inside `frame`; `error` on RAC `FieldError`. */
|
|
18
18
|
export declare const textFieldStyles: {
|
|
19
19
|
readonly root: import("purse-styles").StyleElement;
|
|
20
|
-
readonly input: (args_0?: Pick<TextFieldProps, "
|
|
20
|
+
readonly input: (args_0?: Pick<TextFieldProps, "keyboardHint" | "size"> | undefined) => import("purse-styles").StyleElement;
|
|
21
21
|
readonly frame: import("purse-styles").StyleElement;
|
|
22
22
|
readonly keyboardHint: import("purse-styles").StyleElement;
|
|
23
23
|
readonly error: import("purse-styles").StyleElement;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { renderMermaidSVG } from "beautiful-mermaid";
|
|
3
3
|
import { useMemo, useState } from "react";
|
|
4
4
|
import { style, useStyles } from "purse-styles";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Label as RACLabel, Slider as RACSlider, SliderOutput, SliderThumb, SliderTrack, } from "react-aria-components";
|
|
3
3
|
import { defineVars, style, useStyles } from "purse-styles";
|
|
4
4
|
import { LARGE_SCALE } from "../theme/dataScale";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React, { useEffect, useRef, useState } from "react";
|
|
3
3
|
import ReactDOM from "react-dom";
|
|
4
4
|
import { mergeProps, mergeRefs, useOverlayPosition, useTooltip, useTooltipTrigger, } from "react-aria";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Selector condition for `defineVars` dark theme values. */
|
|
2
|
-
export declare const DARK_THEME:
|
|
2
|
+
export declare const DARK_THEME: ':root[data-theme="dark"]';
|
|
@@ -13,10 +13,10 @@ type MixPercent = number | {
|
|
|
13
13
|
/** `color-mix` of a foreground into `base` (transparent by default). */
|
|
14
14
|
export declare function surfaceWash(foreground: string, percent: MixPercent, base?: string): string;
|
|
15
15
|
export declare const backgroundColor: {
|
|
16
|
+
app: `var(--${string})`;
|
|
17
|
+
element: `var(--${string})`;
|
|
16
18
|
elementHover: `var(--${string})`;
|
|
17
19
|
elementActive: `var(--${string})`;
|
|
18
|
-
element: `var(--${string})`;
|
|
19
|
-
app: `var(--${string})`;
|
|
20
20
|
};
|
|
21
21
|
export declare const background: {
|
|
22
22
|
app: import("purse-styles").StyleElement;
|
package/dist/tokens/colors.d.ts
CHANGED
|
@@ -8,68 +8,6 @@ export type PaletteName = (typeof paletteNames)[number];
|
|
|
8
8
|
export declare const colorNames: readonly ["accent", "gray", "mauve", "slate", "sage", "olive", "sand", "tomato", "red", "ruby", "crimson", "pink", "plum", "purple", "violet", "iris", "indigo", "blue", "cyan", "teal", "jade", "green", "grass", "bronze", "gold", "brown", "orange", "amber", "yellow", "lime", "mint", "sky"];
|
|
9
9
|
export type ColorName = (typeof colorNames)[number];
|
|
10
10
|
export declare const colors: {
|
|
11
|
-
grayAlpha: ColorScale;
|
|
12
|
-
mauveAlpha: ColorScale;
|
|
13
|
-
slateAlpha: ColorScale;
|
|
14
|
-
sageAlpha: ColorScale;
|
|
15
|
-
oliveAlpha: ColorScale;
|
|
16
|
-
sandAlpha: ColorScale;
|
|
17
|
-
tomatoAlpha: ColorScale;
|
|
18
|
-
redAlpha: ColorScale;
|
|
19
|
-
rubyAlpha: ColorScale;
|
|
20
|
-
crimsonAlpha: ColorScale;
|
|
21
|
-
pinkAlpha: ColorScale;
|
|
22
|
-
plumAlpha: ColorScale;
|
|
23
|
-
purpleAlpha: ColorScale;
|
|
24
|
-
violetAlpha: ColorScale;
|
|
25
|
-
irisAlpha: ColorScale;
|
|
26
|
-
indigoAlpha: ColorScale;
|
|
27
|
-
blueAlpha: ColorScale;
|
|
28
|
-
cyanAlpha: ColorScale;
|
|
29
|
-
tealAlpha: ColorScale;
|
|
30
|
-
jadeAlpha: ColorScale;
|
|
31
|
-
greenAlpha: ColorScale;
|
|
32
|
-
grassAlpha: ColorScale;
|
|
33
|
-
bronzeAlpha: ColorScale;
|
|
34
|
-
goldAlpha: ColorScale;
|
|
35
|
-
brownAlpha: ColorScale;
|
|
36
|
-
orangeAlpha: ColorScale;
|
|
37
|
-
amberAlpha: ColorScale;
|
|
38
|
-
yellowAlpha: ColorScale;
|
|
39
|
-
limeAlpha: ColorScale;
|
|
40
|
-
mintAlpha: ColorScale;
|
|
41
|
-
skyAlpha: ColorScale;
|
|
42
|
-
gray: ColorScale;
|
|
43
|
-
mauve: ColorScale;
|
|
44
|
-
slate: ColorScale;
|
|
45
|
-
sage: ColorScale;
|
|
46
|
-
olive: ColorScale;
|
|
47
|
-
sand: ColorScale;
|
|
48
|
-
tomato: ColorScale;
|
|
49
|
-
red: ColorScale;
|
|
50
|
-
ruby: ColorScale;
|
|
51
|
-
crimson: ColorScale;
|
|
52
|
-
pink: ColorScale;
|
|
53
|
-
plum: ColorScale;
|
|
54
|
-
purple: ColorScale;
|
|
55
|
-
violet: ColorScale;
|
|
56
|
-
iris: ColorScale;
|
|
57
|
-
indigo: ColorScale;
|
|
58
|
-
blue: ColorScale;
|
|
59
|
-
cyan: ColorScale;
|
|
60
|
-
teal: ColorScale;
|
|
61
|
-
jade: ColorScale;
|
|
62
|
-
green: ColorScale;
|
|
63
|
-
grass: ColorScale;
|
|
64
|
-
bronze: ColorScale;
|
|
65
|
-
gold: ColorScale;
|
|
66
|
-
brown: ColorScale;
|
|
67
|
-
orange: ColorScale;
|
|
68
|
-
amber: ColorScale;
|
|
69
|
-
yellow: ColorScale;
|
|
70
|
-
lime: ColorScale;
|
|
71
|
-
mint: ColorScale;
|
|
72
|
-
sky: ColorScale;
|
|
73
11
|
accent: import("purse-styles").VariableGroup<{
|
|
74
12
|
readonly 1: {
|
|
75
13
|
readonly default: string;
|
|
@@ -170,6 +108,68 @@ export declare const colors: {
|
|
|
170
108
|
readonly ":root[data-theme=\"dark\"]": string;
|
|
171
109
|
};
|
|
172
110
|
}>;
|
|
111
|
+
amber: ColorScale;
|
|
112
|
+
amberAlpha: ColorScale;
|
|
113
|
+
blue: ColorScale;
|
|
114
|
+
blueAlpha: ColorScale;
|
|
115
|
+
bronze: ColorScale;
|
|
116
|
+
bronzeAlpha: ColorScale;
|
|
117
|
+
brown: ColorScale;
|
|
118
|
+
brownAlpha: ColorScale;
|
|
119
|
+
crimson: ColorScale;
|
|
120
|
+
crimsonAlpha: ColorScale;
|
|
121
|
+
cyan: ColorScale;
|
|
122
|
+
cyanAlpha: ColorScale;
|
|
123
|
+
gold: ColorScale;
|
|
124
|
+
goldAlpha: ColorScale;
|
|
125
|
+
grass: ColorScale;
|
|
126
|
+
grassAlpha: ColorScale;
|
|
127
|
+
gray: ColorScale;
|
|
128
|
+
grayAlpha: ColorScale;
|
|
129
|
+
green: ColorScale;
|
|
130
|
+
greenAlpha: ColorScale;
|
|
131
|
+
indigo: ColorScale;
|
|
132
|
+
indigoAlpha: ColorScale;
|
|
133
|
+
iris: ColorScale;
|
|
134
|
+
irisAlpha: ColorScale;
|
|
135
|
+
jade: ColorScale;
|
|
136
|
+
jadeAlpha: ColorScale;
|
|
137
|
+
lime: ColorScale;
|
|
138
|
+
limeAlpha: ColorScale;
|
|
139
|
+
mauve: ColorScale;
|
|
140
|
+
mauveAlpha: ColorScale;
|
|
141
|
+
mint: ColorScale;
|
|
142
|
+
mintAlpha: ColorScale;
|
|
143
|
+
olive: ColorScale;
|
|
144
|
+
oliveAlpha: ColorScale;
|
|
145
|
+
orange: ColorScale;
|
|
146
|
+
orangeAlpha: ColorScale;
|
|
147
|
+
pink: ColorScale;
|
|
148
|
+
pinkAlpha: ColorScale;
|
|
149
|
+
plum: ColorScale;
|
|
150
|
+
plumAlpha: ColorScale;
|
|
151
|
+
purple: ColorScale;
|
|
152
|
+
purpleAlpha: ColorScale;
|
|
153
|
+
red: ColorScale;
|
|
154
|
+
redAlpha: ColorScale;
|
|
155
|
+
ruby: ColorScale;
|
|
156
|
+
rubyAlpha: ColorScale;
|
|
157
|
+
sage: ColorScale;
|
|
158
|
+
sageAlpha: ColorScale;
|
|
159
|
+
sand: ColorScale;
|
|
160
|
+
sandAlpha: ColorScale;
|
|
161
|
+
sky: ColorScale;
|
|
162
|
+
skyAlpha: ColorScale;
|
|
163
|
+
slate: ColorScale;
|
|
164
|
+
slateAlpha: ColorScale;
|
|
165
|
+
teal: ColorScale;
|
|
166
|
+
tealAlpha: ColorScale;
|
|
167
|
+
tomato: ColorScale;
|
|
168
|
+
tomatoAlpha: ColorScale;
|
|
169
|
+
violet: ColorScale;
|
|
170
|
+
violetAlpha: ColorScale;
|
|
171
|
+
yellow: ColorScale;
|
|
172
|
+
yellowAlpha: ColorScale;
|
|
173
173
|
};
|
|
174
174
|
export declare const scaleSteps: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
175
175
|
export {};
|
package/dist/tokens/text.d.ts
CHANGED
|
@@ -11,16 +11,11 @@ export declare const monoFontFamily = "\"Commit Mono\", ui-monospace, SFMono-Reg
|
|
|
11
11
|
export declare const monoFontStyle: {
|
|
12
12
|
readonly fontFamily: "\"Commit Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace";
|
|
13
13
|
readonly fontVariantNumeric: "tabular-nums";
|
|
14
|
-
readonly fontFeatureSettings: "
|
|
14
|
+
readonly fontFeatureSettings: '"ss05" 1';
|
|
15
15
|
readonly tabSize: "2";
|
|
16
16
|
readonly MozTabSize: "2";
|
|
17
17
|
};
|
|
18
18
|
export declare const baseTextStyle: {
|
|
19
|
-
fontWeight: 400;
|
|
20
|
-
color: string;
|
|
21
|
-
filter?: import("csstype").Property.Filter | undefined;
|
|
22
|
-
fill?: import("csstype").Property.Fill | undefined;
|
|
23
|
-
scale?: import("csstype").Property.Scale | undefined;
|
|
24
19
|
accentColor?: import("csstype").Property.AccentColor | undefined;
|
|
25
20
|
alignContent?: import("csstype").Property.AlignContent | undefined;
|
|
26
21
|
alignItems?: import("csstype").Property.AlignItems | undefined;
|
|
@@ -141,8 +136,10 @@ export declare const baseTextStyle: {
|
|
|
141
136
|
dominantBaseline?: import("csstype").Property.DominantBaseline | undefined;
|
|
142
137
|
emptyCells?: import("csstype").Property.EmptyCells | undefined;
|
|
143
138
|
fieldSizing?: import("csstype").Property.FieldSizing | undefined;
|
|
139
|
+
fill?: import("csstype").Property.Fill | undefined;
|
|
144
140
|
fillOpacity?: import("csstype").Property.FillOpacity | undefined;
|
|
145
141
|
fillRule?: import("csstype").Property.FillRule | undefined;
|
|
142
|
+
filter?: import("csstype").Property.Filter | undefined;
|
|
146
143
|
flexBasis?: import("csstype").Property.FlexBasis<string | number> | undefined;
|
|
147
144
|
flexDirection?: import("csstype").Property.FlexDirection | undefined;
|
|
148
145
|
flexGrow?: import("csstype").Property.FlexGrow | undefined;
|
|
@@ -323,6 +320,7 @@ export declare const baseTextStyle: {
|
|
|
323
320
|
rubyPosition?: import("csstype").Property.RubyPosition | undefined;
|
|
324
321
|
rx?: import("csstype").Property.Rx<string | number> | undefined;
|
|
325
322
|
ry?: import("csstype").Property.Ry<string | number> | undefined;
|
|
323
|
+
scale?: import("csstype").Property.Scale | undefined;
|
|
326
324
|
scrollBehavior?: import("csstype").Property.ScrollBehavior | undefined;
|
|
327
325
|
scrollInitialTarget?: import("csstype").Property.ScrollInitialTarget | undefined;
|
|
328
326
|
scrollMarginBlockEnd?: import("csstype").Property.ScrollMarginBlockEnd<string | number> | undefined;
|
|
@@ -437,7 +435,7 @@ export declare const baseTextStyle: {
|
|
|
437
435
|
y?: import("csstype").Property.Y<string | number> | undefined;
|
|
438
436
|
zIndex?: import("csstype").Property.ZIndex | undefined;
|
|
439
437
|
zoom?: import("csstype").Property.Zoom | undefined;
|
|
440
|
-
all?: import("csstype").
|
|
438
|
+
all?: import("csstype").Property.All | undefined;
|
|
441
439
|
animation?: import("csstype").Property.Animation<string & {}> | undefined;
|
|
442
440
|
animationRange?: import("csstype").Property.AnimationRange<string | number> | undefined;
|
|
443
441
|
background?: import("csstype").Property.Background<string | number> | undefined;
|
|
@@ -873,6 +871,8 @@ export declare const baseTextStyle: {
|
|
|
873
871
|
colorInterpolation?: import("csstype").Property.ColorInterpolation | undefined;
|
|
874
872
|
colorRendering?: import("csstype").Property.ColorRendering | undefined;
|
|
875
873
|
glyphOrientationVertical?: import("csstype").Property.GlyphOrientationVertical | undefined;
|
|
874
|
+
fontWeight: 400;
|
|
875
|
+
color: string;
|
|
876
876
|
};
|
|
877
877
|
export declare const monospace: import("purse-styles").StyleElement;
|
|
878
878
|
export type TextOptions = {
|
|
@@ -41,43 +41,43 @@ export declare const mauiThemeTokens: {
|
|
|
41
41
|
readonly dark: readonly [{
|
|
42
42
|
readonly role: "Foreground";
|
|
43
43
|
readonly sublime: "fgBase";
|
|
44
|
-
readonly color: "#
|
|
44
|
+
readonly color: "#202020" | "#eeeeee";
|
|
45
45
|
}, {
|
|
46
46
|
readonly role: "Comment";
|
|
47
47
|
readonly sublime: "comment";
|
|
48
|
-
readonly color: "#
|
|
48
|
+
readonly color: "#646464" | "#6e6e6e";
|
|
49
49
|
}, {
|
|
50
50
|
readonly role: "Keyword";
|
|
51
51
|
readonly sublime: "keyword";
|
|
52
|
-
readonly color: "#
|
|
52
|
+
readonly color: "#3e63dd" | "#8b8fd8";
|
|
53
53
|
}, {
|
|
54
54
|
readonly role: "Operator";
|
|
55
55
|
readonly sublime: "keyword.operator";
|
|
56
|
-
readonly color: "#
|
|
56
|
+
readonly color: "#a15c00" | "#d9a066";
|
|
57
57
|
}, {
|
|
58
58
|
readonly role: "Type";
|
|
59
59
|
readonly sublime: "entity.name.type";
|
|
60
|
-
readonly color: "#
|
|
60
|
+
readonly color: "#272962" | "#ecebe8";
|
|
61
61
|
}, {
|
|
62
62
|
readonly role: "Type reference";
|
|
63
63
|
readonly sublime: "support.type";
|
|
64
|
-
readonly color: "#
|
|
64
|
+
readonly color: "#8a4b08" | "#e8c9a0";
|
|
65
65
|
}, {
|
|
66
66
|
readonly role: "Tag / component";
|
|
67
67
|
readonly sublime: "entity.name.tag";
|
|
68
|
-
readonly color: "#
|
|
68
|
+
readonly color: "#008573" | "#baa7ff";
|
|
69
69
|
}, {
|
|
70
70
|
readonly role: "Attribute";
|
|
71
71
|
readonly sublime: "entity.other.attribute-name";
|
|
72
|
-
readonly color: "#
|
|
72
|
+
readonly color: "#646464" | "#b4b4b4";
|
|
73
73
|
}, {
|
|
74
74
|
readonly role: "String / constant";
|
|
75
75
|
readonly sublime: "string, constant";
|
|
76
|
-
readonly color: "#
|
|
76
|
+
readonly color: "#0d74ce" | "#3dd68c";
|
|
77
77
|
}, {
|
|
78
78
|
readonly role: "Function";
|
|
79
79
|
readonly sublime: "entity.name.function";
|
|
80
|
-
readonly color: "#
|
|
80
|
+
readonly color: "#202020" | "#ecebe8";
|
|
81
81
|
}, {
|
|
82
82
|
readonly role: "Punctuation";
|
|
83
83
|
readonly sublime: "punctuation";
|
|
@@ -85,48 +85,48 @@ export declare const mauiThemeTokens: {
|
|
|
85
85
|
}, {
|
|
86
86
|
readonly role: "Bracket / accent";
|
|
87
87
|
readonly sublime: "brackets";
|
|
88
|
-
readonly color: "#
|
|
88
|
+
readonly color: "#3e63dd" | "#a8a6f0";
|
|
89
89
|
}];
|
|
90
90
|
readonly light: readonly [{
|
|
91
91
|
readonly role: "Foreground";
|
|
92
92
|
readonly sublime: "fgBase";
|
|
93
|
-
readonly color: "#
|
|
93
|
+
readonly color: "#202020" | "#eeeeee";
|
|
94
94
|
}, {
|
|
95
95
|
readonly role: "Comment";
|
|
96
96
|
readonly sublime: "comment";
|
|
97
|
-
readonly color: "#
|
|
97
|
+
readonly color: "#646464" | "#6e6e6e";
|
|
98
98
|
}, {
|
|
99
99
|
readonly role: "Keyword";
|
|
100
100
|
readonly sublime: "keyword";
|
|
101
|
-
readonly color: "#
|
|
101
|
+
readonly color: "#3e63dd" | "#8b8fd8";
|
|
102
102
|
}, {
|
|
103
103
|
readonly role: "Operator";
|
|
104
104
|
readonly sublime: "keyword.operator";
|
|
105
|
-
readonly color: "#
|
|
105
|
+
readonly color: "#a15c00" | "#d9a066";
|
|
106
106
|
}, {
|
|
107
107
|
readonly role: "Type";
|
|
108
108
|
readonly sublime: "entity.name.type";
|
|
109
|
-
readonly color: "#
|
|
109
|
+
readonly color: "#272962" | "#ecebe8";
|
|
110
110
|
}, {
|
|
111
111
|
readonly role: "Type reference";
|
|
112
112
|
readonly sublime: "support.type";
|
|
113
|
-
readonly color: "#
|
|
113
|
+
readonly color: "#8a4b08" | "#e8c9a0";
|
|
114
114
|
}, {
|
|
115
115
|
readonly role: "Tag / component";
|
|
116
116
|
readonly sublime: "entity.name.tag";
|
|
117
|
-
readonly color: "#
|
|
117
|
+
readonly color: "#008573" | "#baa7ff";
|
|
118
118
|
}, {
|
|
119
119
|
readonly role: "Attribute";
|
|
120
120
|
readonly sublime: "entity.other.attribute-name";
|
|
121
|
-
readonly color: "#
|
|
121
|
+
readonly color: "#646464" | "#b4b4b4";
|
|
122
122
|
}, {
|
|
123
123
|
readonly role: "String / constant";
|
|
124
124
|
readonly sublime: "string, constant";
|
|
125
|
-
readonly color: "#
|
|
125
|
+
readonly color: "#0d74ce" | "#3dd68c";
|
|
126
126
|
}, {
|
|
127
127
|
readonly role: "Function";
|
|
128
128
|
readonly sublime: "entity.name.function";
|
|
129
|
-
readonly color: "#
|
|
129
|
+
readonly color: "#202020" | "#ecebe8";
|
|
130
130
|
}, {
|
|
131
131
|
readonly role: "Punctuation";
|
|
132
132
|
readonly sublime: "punctuation";
|
|
@@ -134,7 +134,7 @@ export declare const mauiThemeTokens: {
|
|
|
134
134
|
}, {
|
|
135
135
|
readonly role: "Bracket / accent";
|
|
136
136
|
readonly sublime: "brackets";
|
|
137
|
-
readonly color: "#
|
|
137
|
+
readonly color: "#3e63dd" | "#a8a6f0";
|
|
138
138
|
}];
|
|
139
139
|
};
|
|
140
140
|
export declare const mauiShikiThemeDark: ThemeRegistration;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanishqkancharla/maui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.58",
|
|
4
4
|
"description": "Maui design system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/maui.js",
|
|
@@ -79,68 +79,66 @@
|
|
|
79
79
|
"author": "Tanishq Kancharla",
|
|
80
80
|
"license": "MIT",
|
|
81
81
|
"devDependencies": {
|
|
82
|
-
"@base-ui/react": "^1.
|
|
83
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
82
|
+
"@base-ui/react": "^1.9.0",
|
|
83
|
+
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
84
84
|
"@resvg/resvg-js": "^2.6.2",
|
|
85
85
|
"@silk-hq/components": "^0.10.1",
|
|
86
|
-
"@tiptap/core": "^3.
|
|
87
|
-
"@tiptap/extension-placeholder": "^3.
|
|
88
|
-
"@tiptap/markdown": "^3.
|
|
89
|
-
"@tiptap/pm": "^3.
|
|
90
|
-
"@tiptap/react": "^3.
|
|
91
|
-
"@tiptap/starter-kit": "^3.
|
|
92
|
-
"@types/
|
|
93
|
-
"@types/
|
|
94
|
-
"@types/
|
|
95
|
-
"@types/react": "^19.
|
|
96
|
-
"@
|
|
97
|
-
"
|
|
98
|
-
"agentation": "^3.
|
|
99
|
-
"agentation-mcp": "^1.2.0",
|
|
86
|
+
"@tiptap/core": "^3.32.0",
|
|
87
|
+
"@tiptap/extension-placeholder": "^3.32.0",
|
|
88
|
+
"@tiptap/markdown": "^3.32.0",
|
|
89
|
+
"@tiptap/pm": "^3.32.0",
|
|
90
|
+
"@tiptap/react": "^3.32.0",
|
|
91
|
+
"@tiptap/starter-kit": "^3.32.0",
|
|
92
|
+
"@types/lodash": "^4.17.27",
|
|
93
|
+
"@types/node": "^26.6.5",
|
|
94
|
+
"@types/react": "^19.3.0",
|
|
95
|
+
"@types/react-dom": "^19.3.0",
|
|
96
|
+
"@vitejs/plugin-react": "^6.1.2",
|
|
97
|
+
"agentation": "^3.1.2",
|
|
98
|
+
"agentation-mcp": "^1.3.2",
|
|
100
99
|
"dialkit": "^2.0.2",
|
|
101
|
-
"esbuild": "^0.28.
|
|
100
|
+
"esbuild": "^0.28.2",
|
|
102
101
|
"libretto-browser-tools": "^0.1.2",
|
|
103
|
-
"motion": "^
|
|
102
|
+
"motion": "^14.6.0",
|
|
104
103
|
"process": "^0.11.10",
|
|
105
|
-
"satori": "^0.
|
|
104
|
+
"satori": "^0.63.2",
|
|
106
105
|
"serve": "^14.2.6",
|
|
107
|
-
"tsx": "^4.
|
|
108
|
-
"typescript": "^
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"vitest": "^4.1.8"
|
|
106
|
+
"tsx": "^4.23.15",
|
|
107
|
+
"typescript": "^7.0.2",
|
|
108
|
+
"vite": "^8.3.5",
|
|
109
|
+
"vitest": "^5.0.5"
|
|
112
110
|
},
|
|
113
111
|
"dependencies": {
|
|
114
|
-
"@codemirror/autocomplete": "^6.20.
|
|
115
|
-
"@codemirror/commands": "^6.11.
|
|
112
|
+
"@codemirror/autocomplete": "^6.20.4",
|
|
113
|
+
"@codemirror/commands": "^6.11.1",
|
|
116
114
|
"@codemirror/lang-javascript": "^6.2.5",
|
|
117
|
-
"@codemirror/language": "^6.
|
|
115
|
+
"@codemirror/language": "^6.13.1",
|
|
118
116
|
"@codemirror/lint": "^6.9.7",
|
|
119
|
-
"@codemirror/state": "^6.7.
|
|
120
|
-
"@codemirror/view": "^6.43.
|
|
117
|
+
"@codemirror/state": "^6.7.6",
|
|
118
|
+
"@codemirror/view": "^6.43.15",
|
|
121
119
|
"@fontsource/commit-mono": "^5.3.0",
|
|
122
|
-
"@lezer/highlight": "^1.2.
|
|
120
|
+
"@lezer/highlight": "^1.2.5",
|
|
123
121
|
"@radix-ui/colors": "^3.0.0",
|
|
124
|
-
"@streamdown/code": "^
|
|
122
|
+
"@streamdown/code": "^2.0.0",
|
|
125
123
|
"@types/inline-style-prefixer": "^5.0.3",
|
|
126
|
-
"@uiw/react-codemirror": "^4.25.
|
|
124
|
+
"@uiw/react-codemirror": "^4.25.12",
|
|
127
125
|
"beautiful-mermaid": "^1.1.3",
|
|
128
126
|
"dedent": "^1.7.2",
|
|
129
127
|
"inline-style-prefixer": "^7.0.1",
|
|
130
128
|
"lodash": "^4.18.1",
|
|
131
|
-
"prettier": "^3.9.
|
|
129
|
+
"prettier": "^3.9.10",
|
|
132
130
|
"purse-styles": "^0.2.6",
|
|
133
131
|
"react": "^19.0.0",
|
|
134
|
-
"react-aria": "^3.
|
|
135
|
-
"react-aria-components": "^1.
|
|
132
|
+
"react-aria": "^3.53.1",
|
|
133
|
+
"react-aria-components": "^1.22.1",
|
|
136
134
|
"react-dom": "^19.0.0",
|
|
137
|
-
"react-stately": "^3.
|
|
138
|
-
"shiki": "^4.
|
|
139
|
-
"streamdown": "^2.
|
|
135
|
+
"react-stately": "^3.51.0",
|
|
136
|
+
"shiki": "^4.5.0",
|
|
137
|
+
"streamdown": "^2.7.1",
|
|
140
138
|
"sucrase": "^3.35.1",
|
|
141
139
|
"tuple-database": "^2.2.4",
|
|
142
140
|
"use-state-dispatch": "^0.6.0",
|
|
143
|
-
"wouter": "^3.
|
|
141
|
+
"wouter": "^3.13.0"
|
|
144
142
|
},
|
|
145
143
|
"peerDependencies": {
|
|
146
144
|
"@tiptap/core": "^3.29.2",
|
|
@@ -149,7 +147,7 @@
|
|
|
149
147
|
"@tiptap/pm": "^3.29.2",
|
|
150
148
|
"@tiptap/react": "^3.29.2",
|
|
151
149
|
"@tiptap/starter-kit": "^3.29.2",
|
|
152
|
-
"motion": "^13.2.0",
|
|
150
|
+
"motion": "^13.2.0 || ^14.0.0",
|
|
153
151
|
"react": "^19.0.0",
|
|
154
152
|
"react-dom": "^19.0.0"
|
|
155
153
|
},
|
|
@@ -172,5 +170,10 @@
|
|
|
172
170
|
"@tiptap/starter-kit": {
|
|
173
171
|
"optional": true
|
|
174
172
|
}
|
|
173
|
+
},
|
|
174
|
+
"overrides": {
|
|
175
|
+
"compression": "^1.8.2",
|
|
176
|
+
"fflate": "^0.8.3",
|
|
177
|
+
"uuid": "^11.1.1"
|
|
175
178
|
}
|
|
176
179
|
}
|
|
@@ -30,7 +30,7 @@ Styled React Aria `Button` (default `type="button"`). Consumes `ButtonContext`,
|
|
|
30
30
|
| `onClick` | Still supported. React Aria also exposes `onPress` |
|
|
31
31
|
| `children` | Text is wrapped for cap-height trim; SVG icons sit beside text. Icon-only needs `aria-label` |
|
|
32
32
|
|
|
33
|
-
Primary: fill step 9,
|
|
33
|
+
Primary: fill step 9, light text (`onAccent`, or step 12 on amber/lime/mint/sky/yellow). Custom CSS fill drops alpha; text is white or near-black from lightness. The fill is a diagonal gradient (`to top left`) from the fill shifted by OKLCH `l − 0.027`, `c × 1.05`, `h − 6.8` to the fill itself. The shadow keeps the white inset highlight and tints a 0.5px edge (`l − 0.1`) and a soft lift from the fill — no neutral gray. Hover layers a white-to-transparent sheen over the gradient; disabled drops the gradient. Quiet: no fill; `variantColor` tints the label/icon. Hover/press mix `grayAlpha[9]` (or that color’s alpha 9, or the hex) into transparent at 6% light / 9% dark; press is 2×. Hover fills snap.
|
|
34
34
|
|
|
35
35
|
While a menu or overlay is open, the trigger keeps the active fill via RAC `data-pressed` / `aria-expanded` (same tokens as `:active`: `elementActive`, or primary step 10).
|
|
36
36
|
|
|
@@ -31,6 +31,7 @@ const disabledRaised = {
|
|
|
31
31
|
opacity: 1,
|
|
32
32
|
color: colors.gray[8],
|
|
33
33
|
backgroundColor: backgroundColor.element,
|
|
34
|
+
backgroundImage: "none",
|
|
34
35
|
boxShadow: buttonShadow,
|
|
35
36
|
} as const
|
|
36
37
|
|
|
@@ -187,34 +188,48 @@ function onSolidText(color: string) {
|
|
|
187
188
|
return `oklch(from ${color} clamp(0.2, (0.75 - l) * 100, 0.99) 0 0)`
|
|
188
189
|
}
|
|
189
190
|
|
|
191
|
+
/** Darker shade of a fill (OKLCH lightness offset) at an alpha. */
|
|
192
|
+
function fillShade(color: string, lightnessOffset: number, alpha = 1) {
|
|
193
|
+
return `oklch(from ${color} calc(l - ${lightnessOffset}) c h / ${alpha})`
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/** Fill-tinted edge and lift; no neutral gray, so the shadow matches any fill. */
|
|
190
197
|
function primaryButtonShadow(color: string) {
|
|
191
|
-
return `inset 0 1px #ffffff18, inset 0 0 1px .5px #fff2, 0
|
|
198
|
+
return `inset 0 1px #ffffff18, inset 0 0 1px .5px #fff2, 0 0 0 .5px ${fillShade(color, 0.1)}, 0 1px 2px ${fillShade(color, 0, 0.35)}, 0 3px 8px -3px ${fillShade(color, 0, 0.6)}`
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Diagonal from a slightly darker, more saturated, warmer-rotated fill to the
|
|
203
|
+
* fill. The offsets are the OKLCH delta between Campsite's #FB432C → #FF591E.
|
|
204
|
+
*/
|
|
205
|
+
function primaryButtonGradient(color: string) {
|
|
206
|
+
return `linear-gradient(to top left, oklch(from ${color} calc(l - 0.027) calc(c * 1.05) calc(h - 6.8)), ${color})`
|
|
192
207
|
}
|
|
193
208
|
|
|
209
|
+
/** Hover lightens the top of the gradient instead of replacing the fill. */
|
|
210
|
+
const primaryHoverSheen = `linear-gradient(to bottom, rgb(255 255 255 / 0.12), rgb(255 255 255 / 0))`
|
|
211
|
+
|
|
212
|
+
const primaryClass = memoize((fill: string, textColor: string) => {
|
|
213
|
+
const primaryShadow = primaryButtonShadow(fill)
|
|
214
|
+
const gradient = primaryButtonGradient(fill)
|
|
215
|
+
return style(buttonBaseClass, focusRing("&:focus-visible", primaryShadow), {
|
|
216
|
+
color: textColor,
|
|
217
|
+
backgroundColor: fill,
|
|
218
|
+
backgroundImage: gradient,
|
|
219
|
+
boxShadow: primaryShadow,
|
|
220
|
+
"&:hover:not(:disabled)": {
|
|
221
|
+
backgroundImage: `${primaryHoverSheen}, ${gradient}`,
|
|
222
|
+
},
|
|
223
|
+
"&:disabled": disabledRaised,
|
|
224
|
+
})
|
|
225
|
+
})
|
|
226
|
+
|
|
194
227
|
const coloredButtonClass = memoize(
|
|
195
228
|
(variant: "primary" | "quiet", color: ButtonVariantColor) => {
|
|
196
229
|
if (isCssColor(color)) {
|
|
197
230
|
const fill = opaqueColor(color)
|
|
198
231
|
if (variant === "primary") {
|
|
199
|
-
|
|
200
|
-
colors.gray[12],
|
|
201
|
-
surfaceMixPercent.hover,
|
|
202
|
-
fill,
|
|
203
|
-
)
|
|
204
|
-
const primaryShadow = primaryButtonShadow(fill)
|
|
205
|
-
return style(
|
|
206
|
-
buttonBaseClass,
|
|
207
|
-
focusRing("&:focus-visible", primaryShadow),
|
|
208
|
-
{
|
|
209
|
-
color: onSolidText(fill),
|
|
210
|
-
backgroundColor: fill,
|
|
211
|
-
boxShadow: primaryShadow,
|
|
212
|
-
"&:hover:not(:disabled)": {
|
|
213
|
-
backgroundColor: hover,
|
|
214
|
-
},
|
|
215
|
-
"&:disabled": disabledRaised,
|
|
216
|
-
},
|
|
217
|
-
)
|
|
232
|
+
return primaryClass(fill, onSolidText(fill))
|
|
218
233
|
}
|
|
219
234
|
|
|
220
235
|
return quietClass(fill, darkerFill(fill), fill)
|
|
@@ -222,24 +237,9 @@ const coloredButtonClass = memoize(
|
|
|
222
237
|
|
|
223
238
|
const scale = paletteFill(color)
|
|
224
239
|
if (variant === "primary") {
|
|
225
|
-
|
|
226
|
-
const hover = surfaceWash(
|
|
227
|
-
colors.gray[12],
|
|
228
|
-
surfaceMixPercent.hover,
|
|
240
|
+
return primaryClass(
|
|
229
241
|
scale[9],
|
|
230
|
-
|
|
231
|
-
return style(
|
|
232
|
-
buttonBaseClass,
|
|
233
|
-
focusRing("&:focus-visible", primaryShadow),
|
|
234
|
-
{
|
|
235
|
-
color: darkTextOnSolid.has(color) ? scale[12] : "white",
|
|
236
|
-
backgroundColor: scale[9],
|
|
237
|
-
boxShadow: primaryShadow,
|
|
238
|
-
"&:hover:not(:disabled)": {
|
|
239
|
-
backgroundColor: hover,
|
|
240
|
-
},
|
|
241
|
-
"&:disabled": disabledRaised,
|
|
242
|
-
},
|
|
242
|
+
darkTextOnSolid.has(color) ? scale[12] : "white",
|
|
243
243
|
)
|
|
244
244
|
}
|
|
245
245
|
|
|
@@ -85,8 +85,9 @@ export function ButtonsPage() {
|
|
|
85
85
|
<Code>variant="primary"</Code> fills with step 9 of{" "}
|
|
86
86
|
<Code>variantColor</Code> (a palette name, default <Code>"accent"</Code>
|
|
87
87
|
). Pass a hex or <Code>rgb()</Code> string to use that color as the fill
|
|
88
|
-
(alpha is dropped).
|
|
89
|
-
|
|
88
|
+
(alpha is dropped). The fill is a subtle diagonal gradient from a
|
|
89
|
+
slightly darker, warmer shade of that color, and the edge and lift
|
|
90
|
+
shadows are tinted from it. Hover adds a white sheen at the top.
|
|
90
91
|
</P>
|
|
91
92
|
<Flex row alignItems="center" gap={4} style={{ flexWrap: "wrap" }}>
|
|
92
93
|
<Button variant="primary">Save</Button>
|
package/src/public/og-dark.png
CHANGED
|
Binary file
|
package/src/public/og-light.png
CHANGED
|
Binary file
|
package/src/public/og.png
CHANGED
|
Binary file
|