@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.
@@ -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").TupleTransactionApi<UIFocusSchema> | import("tuple-database").TupleDatabaseClientApi<UIFocusSchema>, elementKey: FocusTreeKey) => void;
24
- unregisterFocusElement: (dbOrTx: import("tuple-database").TupleTransactionApi<UIFocusSchema> | import("tuple-database").TupleDatabaseClientApi<UIFocusSchema>, elementKey: FocusTreeKey) => void;
25
- registerFocusScope: (dbOrTx: import("tuple-database").TupleTransactionApi<UIFocusSchema> | import("tuple-database").TupleDatabaseClientApi<UIFocusSchema>, scopeKey: FocusTreeKey, scopeProps: FocusScopeProps) => void;
26
- unregisterFocusScope: (dbOrTx: import("tuple-database").TupleTransactionApi<UIFocusSchema> | import("tuple-database").TupleDatabaseClientApi<UIFocusSchema>, scopeKey: FocusTreeKey) => void;
27
- focus: (dbOrTx: import("tuple-database").TupleTransactionApi<UIFocusSchema> | import("tuple-database").TupleDatabaseClientApi<UIFocusSchema>, key: FocusTreeKey) => void;
28
- blur: (dbOrTx: import("tuple-database").TupleTransactionApi<UIFocusSchema> | import("tuple-database").TupleDatabaseClientApi<UIFocusSchema>, key: FocusTreeKey) => void;
29
- moveToNextFocus: (dbOrTx: import("tuple-database").TupleTransactionApi<UIFocusSchema> | import("tuple-database").TupleDatabaseClientApi<UIFocusSchema>) => void;
30
- moveToPreviousFocus: (dbOrTx: import("tuple-database").TupleTransactionApi<UIFocusSchema> | import("tuple-database").TupleDatabaseClientApi<UIFocusSchema>) => void;
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> | TupleDatabaseClientApi<UIFocusSchema>, ...args: I) => O;
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 1px .5px #0003, 0 0 3px -1px color-mix(in oklch, ${color}, black 35%)`;
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
- const hover = surfaceWash(colors.gray[12], surfaceMixPercent.hover, fill);
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
- const primaryShadow = primaryButtonShadow(scale[9]);
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
  });
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { colors } from "../tokens/colors";
3
3
  export function FuzzyString(props) {
4
4
  const { match } = props;
@@ -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, "size" | "keyboardHint"> | undefined) => import("purse-styles").StyleElement;
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 { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
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 { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
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 { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
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: ":root[data-theme=\"dark\"]";
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;
@@ -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 {};
@@ -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: "\"ss05\" 1";
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").Globals | undefined;
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: "#eeeeee" | "#202020";
44
+ readonly color: "#202020" | "#eeeeee";
45
45
  }, {
46
46
  readonly role: "Comment";
47
47
  readonly sublime: "comment";
48
- readonly color: "#6e6e6e" | "#646464";
48
+ readonly color: "#646464" | "#6e6e6e";
49
49
  }, {
50
50
  readonly role: "Keyword";
51
51
  readonly sublime: "keyword";
52
- readonly color: "#8b8fd8" | "#3e63dd";
52
+ readonly color: "#3e63dd" | "#8b8fd8";
53
53
  }, {
54
54
  readonly role: "Operator";
55
55
  readonly sublime: "keyword.operator";
56
- readonly color: "#d9a066" | "#a15c00";
56
+ readonly color: "#a15c00" | "#d9a066";
57
57
  }, {
58
58
  readonly role: "Type";
59
59
  readonly sublime: "entity.name.type";
60
- readonly color: "#ecebe8" | "#272962";
60
+ readonly color: "#272962" | "#ecebe8";
61
61
  }, {
62
62
  readonly role: "Type reference";
63
63
  readonly sublime: "support.type";
64
- readonly color: "#e8c9a0" | "#8a4b08";
64
+ readonly color: "#8a4b08" | "#e8c9a0";
65
65
  }, {
66
66
  readonly role: "Tag / component";
67
67
  readonly sublime: "entity.name.tag";
68
- readonly color: "#baa7ff" | "#008573";
68
+ readonly color: "#008573" | "#baa7ff";
69
69
  }, {
70
70
  readonly role: "Attribute";
71
71
  readonly sublime: "entity.other.attribute-name";
72
- readonly color: "#b4b4b4" | "#646464";
72
+ readonly color: "#646464" | "#b4b4b4";
73
73
  }, {
74
74
  readonly role: "String / constant";
75
75
  readonly sublime: "string, constant";
76
- readonly color: "#3dd68c" | "#0d74ce";
76
+ readonly color: "#0d74ce" | "#3dd68c";
77
77
  }, {
78
78
  readonly role: "Function";
79
79
  readonly sublime: "entity.name.function";
80
- readonly color: "#ecebe8" | "#202020";
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: "#a8a6f0" | "#3e63dd";
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: "#eeeeee" | "#202020";
93
+ readonly color: "#202020" | "#eeeeee";
94
94
  }, {
95
95
  readonly role: "Comment";
96
96
  readonly sublime: "comment";
97
- readonly color: "#6e6e6e" | "#646464";
97
+ readonly color: "#646464" | "#6e6e6e";
98
98
  }, {
99
99
  readonly role: "Keyword";
100
100
  readonly sublime: "keyword";
101
- readonly color: "#8b8fd8" | "#3e63dd";
101
+ readonly color: "#3e63dd" | "#8b8fd8";
102
102
  }, {
103
103
  readonly role: "Operator";
104
104
  readonly sublime: "keyword.operator";
105
- readonly color: "#d9a066" | "#a15c00";
105
+ readonly color: "#a15c00" | "#d9a066";
106
106
  }, {
107
107
  readonly role: "Type";
108
108
  readonly sublime: "entity.name.type";
109
- readonly color: "#ecebe8" | "#272962";
109
+ readonly color: "#272962" | "#ecebe8";
110
110
  }, {
111
111
  readonly role: "Type reference";
112
112
  readonly sublime: "support.type";
113
- readonly color: "#e8c9a0" | "#8a4b08";
113
+ readonly color: "#8a4b08" | "#e8c9a0";
114
114
  }, {
115
115
  readonly role: "Tag / component";
116
116
  readonly sublime: "entity.name.tag";
117
- readonly color: "#baa7ff" | "#008573";
117
+ readonly color: "#008573" | "#baa7ff";
118
118
  }, {
119
119
  readonly role: "Attribute";
120
120
  readonly sublime: "entity.other.attribute-name";
121
- readonly color: "#b4b4b4" | "#646464";
121
+ readonly color: "#646464" | "#b4b4b4";
122
122
  }, {
123
123
  readonly role: "String / constant";
124
124
  readonly sublime: "string, constant";
125
- readonly color: "#3dd68c" | "#0d74ce";
125
+ readonly color: "#0d74ce" | "#3dd68c";
126
126
  }, {
127
127
  readonly role: "Function";
128
128
  readonly sublime: "entity.name.function";
129
- readonly color: "#ecebe8" | "#202020";
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: "#a8a6f0" | "#3e63dd";
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.56",
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.8.0",
83
- "@modelcontextprotocol/sdk": "^1.30.0",
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.29.2",
87
- "@tiptap/extension-placeholder": "^3.29.2",
88
- "@tiptap/markdown": "^3.29.2",
89
- "@tiptap/pm": "^3.29.2",
90
- "@tiptap/react": "^3.29.2",
91
- "@tiptap/starter-kit": "^3.29.2",
92
- "@types/dedent": "^0.7.2",
93
- "@types/lodash": "^4.17.24",
94
- "@types/node": "^25.9.2",
95
- "@types/react": "^19.2.17",
96
- "@types/react-dom": "^19.2.3",
97
- "@vitejs/plugin-react": "^6.0.2",
98
- "agentation": "^3.0.2",
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.0",
100
+ "esbuild": "^0.28.2",
102
101
  "libretto-browser-tools": "^0.1.2",
103
- "motion": "^13.2.0",
102
+ "motion": "^14.6.0",
104
103
  "process": "^0.11.10",
105
- "satori": "^0.29.0",
104
+ "satori": "^0.63.2",
106
105
  "serve": "^14.2.6",
107
- "tsx": "^4.22.4",
108
- "typescript": "^6.0.3",
109
- "vercel": "^54.10.3",
110
- "vite": "^8.0.16",
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.3",
115
- "@codemirror/commands": "^6.11.0",
112
+ "@codemirror/autocomplete": "^6.20.4",
113
+ "@codemirror/commands": "^6.11.1",
116
114
  "@codemirror/lang-javascript": "^6.2.5",
117
- "@codemirror/language": "^6.12.4",
115
+ "@codemirror/language": "^6.13.1",
118
116
  "@codemirror/lint": "^6.9.7",
119
- "@codemirror/state": "^6.7.1",
120
- "@codemirror/view": "^6.43.9",
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.3",
120
+ "@lezer/highlight": "^1.2.5",
123
121
  "@radix-ui/colors": "^3.0.0",
124
- "@streamdown/code": "^1.1.1",
122
+ "@streamdown/code": "^2.0.0",
125
123
  "@types/inline-style-prefixer": "^5.0.3",
126
- "@uiw/react-codemirror": "^4.25.11",
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.6",
129
+ "prettier": "^3.9.10",
132
130
  "purse-styles": "^0.2.6",
133
131
  "react": "^19.0.0",
134
- "react-aria": "^3.49.0",
135
- "react-aria-components": "^1.19.0",
132
+ "react-aria": "^3.53.1",
133
+ "react-aria-components": "^1.22.1",
136
134
  "react-dom": "^19.0.0",
137
- "react-stately": "^3.47.0",
138
- "shiki": "^4.3.0",
139
- "streamdown": "^2.5.0",
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.10.0"
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, hover 10, light text (`onAccent`, or step 12 on amber/lime/mint/sky/yellow). Custom CSS fill drops alpha; hover is `l - 0.04`; text is white or near-black from lightness. Its raised shadow strengthens the white inset highlight and tints the tight outer edge from the fill. 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.
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 1px .5px #0003, 0 0 3px -1px color-mix(in oklch, ${color}, black 35%)`
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
- const hover = surfaceWash(
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
- const primaryShadow = primaryButtonShadow(scale[9])
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). Primary buttons use a stronger inset highlight and a
89
- tight edge tinted from the fill.
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>
Binary file
Binary file
package/src/public/og.png CHANGED
Binary file