@crisp-ui-kit/crisp 0.55.6 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.statusdotRecipe = exports.StatusDot = void 0;
4
+ var statusdot_1 = require("./statusdot");
5
+ Object.defineProperty(exports, "StatusDot", { enumerable: true, get: function () { return statusdot_1.StatusDot; } });
6
+ var statusdot_recipe_1 = require("./statusdot.recipe");
7
+ Object.defineProperty(exports, "statusdotRecipe", { enumerable: true, get: function () { return statusdot_recipe_1.statusdotRecipe; } });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StatusDot = StatusDot;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const statusdot_recipe_1 = require("./statusdot.recipe");
6
+ /**
7
+ * A standalone coloured status/stage dot — a stage-column header's own
8
+ * colour swatch, a status field's leading indicator. Not a Badge: no pill,
9
+ * no text pairing required. Pass `children` (e.g. a label) alongside it in
10
+ * your own flex row; this renders only the dot.
11
+ */
12
+ function StatusDot({ color, className, style, ...rest }) {
13
+ return ((0, jsx_runtime_1.jsx)("span", { className: (0, statusdot_recipe_1.statusdotRecipe)({ className }), style: { backgroundColor: color, ...style }, ...rest }));
14
+ }
15
+ StatusDot.displayName = "StatusDot";
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.spec = exports.statusdotRecipe = void 0;
4
+ const core_1 = require("../../core");
5
+ const tokens_1 = require("../../tokens");
6
+ // A standalone status/stage dot — measured live on Attio's Deals Pipeline
7
+ // board (crisp#859): each stage-column header (Lead / In Progress / Won /
8
+ // Lost) renders a free-standing 12x12 circle before its label, no border, no
9
+ // box-shadow. Distinct from Badge's own `dot` prop, which is a smaller 6px
10
+ // dot rendered INSIDE a text pill in `currentColor` (tied to the badge's own
11
+ // tone). This one stands on its own next to plain text.
12
+ //
13
+ // Its fill is a per-instance prop, not a fixed tone variant: the four
14
+ // stage colours measured live (blue #266df0, pink #fa4b94, green #00d17e,
15
+ // red #ff5454) don't match crisp's existing success/warning/danger tokens
16
+ // (green600 #1f9d57, red600 #e5484d) at all — Attio lets a workspace assign
17
+ // an arbitrary colour per stage from its own picker, so this component takes
18
+ // a raw CSS colour rather than guessing at the rest of that picker's palette
19
+ // from four samples.
20
+ const spec = (0, core_1.defineSpec)({
21
+ name: "statusdot",
22
+ base: {
23
+ display: "inline-block",
24
+ boxSizing: "border-box",
25
+ flexShrink: 0,
26
+ width: "12px",
27
+ height: "12px",
28
+ borderRadius: tokens_1.contract.radius.full,
29
+ },
30
+ });
31
+ exports.spec = spec;
32
+ const config = (0, core_1.specToRecipe)(spec);
33
+ exports.statusdotRecipe = (0, core_1.resolveRecipe)(config);
34
+ exports.default = config;
@@ -34,6 +34,16 @@ const spec = (0, core_1.defineSpec)({
34
34
  tone: {
35
35
  default: { color: tokens_1.contract.fgPrimary },
36
36
  muted: { color: tokens_1.contract.fgNeutralMuted },
37
+ // #858: no new measurement -- both reuse tokens already measured
38
+ // against Attio for the same colours in a different arrangement.
39
+ // `brand` is `textlink`'s own reused brand-text colour (`bgBrandSolid`,
40
+ // the same alias GRC's own `--color-fg-brand` resolves to). `danger`
41
+ // is `fgDanger` ("solid critical/destructive TEXT... an overdue
42
+ // due-date, a destructive menu item's label" -- see its own doc in
43
+ // tokens/semantic.ts), not `fgDangerSoft` (that one's a soft Badge
44
+ // pill's text, a different measured hex).
45
+ brand: { color: tokens_1.contract.bgBrandSolid },
46
+ danger: { color: tokens_1.contract.fgDanger },
37
47
  },
38
48
  },
39
49
  defaultVariants: { tone: "default" },
package/dist/cjs/index.js CHANGED
@@ -67,6 +67,7 @@ __exportStar(require("./components/slider"), exports);
67
67
  __exportStar(require("./components/spinner"), exports);
68
68
  __exportStar(require("./components/stagebar"), exports);
69
69
  __exportStar(require("./components/statcard"), exports);
70
+ __exportStar(require("./components/statusdot"), exports);
70
71
  __exportStar(require("./components/switch"), exports);
71
72
  __exportStar(require("./components/table"), exports);
72
73
  __exportStar(require("./components/tabletoolbar"), exports);
@@ -56,8 +56,15 @@ exports.size = {
56
56
  // Typography — the measured UI runs entirely on Inter. Sizes measured in the sidebar
57
57
  // collapse onto 11/12/13/14/16 (lg = 14px is the default body/label size);
58
58
  // weights are 400/500/600 with 500 the UI default.
59
+ //
60
+ // `"VK Sans Display"` leads the stack: an owner override (your-moon/crisp#857),
61
+ // not a remeasure of Attio. It only ever matches an INSTALLED copy of the font
62
+ // via the `local()`-only `@font-face` rules in dist/tokens.css (see
63
+ // build/generate-fonts.mjs for why — VK Sans Display's license has no
64
+ // redistribution grant, so crisp never ships the font files). Everywhere it
65
+ // isn't installed, this falls straight through to Inter, unchanged.
59
66
  exports.font = {
60
- sans: '"Inter", system-ui, -apple-system, "Segoe UI", sans-serif',
67
+ sans: '"VK Sans Display", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif',
61
68
  };
62
69
  exports.text = {
63
70
  xs: "11px",
@@ -0,0 +1,2 @@
1
+ export { StatusDot } from "./statusdot.js";
2
+ export { statusdotRecipe } from "./statusdot.recipe.js";
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { statusdotRecipe } from "./statusdot.recipe.js";
3
+ /**
4
+ * A standalone coloured status/stage dot — a stage-column header's own
5
+ * colour swatch, a status field's leading indicator. Not a Badge: no pill,
6
+ * no text pairing required. Pass `children` (e.g. a label) alongside it in
7
+ * your own flex row; this renders only the dot.
8
+ */
9
+ export function StatusDot({ color, className, style, ...rest }) {
10
+ return (_jsx("span", { className: statusdotRecipe({ className }), style: { backgroundColor: color, ...style }, ...rest }));
11
+ }
12
+ StatusDot.displayName = "StatusDot";
@@ -0,0 +1,31 @@
1
+ import { defineSpec, resolveRecipe, specToRecipe } from "../../core/index.js";
2
+ import { contract as c } from "../../tokens/index.js";
3
+ // A standalone status/stage dot — measured live on Attio's Deals Pipeline
4
+ // board (crisp#859): each stage-column header (Lead / In Progress / Won /
5
+ // Lost) renders a free-standing 12x12 circle before its label, no border, no
6
+ // box-shadow. Distinct from Badge's own `dot` prop, which is a smaller 6px
7
+ // dot rendered INSIDE a text pill in `currentColor` (tied to the badge's own
8
+ // tone). This one stands on its own next to plain text.
9
+ //
10
+ // Its fill is a per-instance prop, not a fixed tone variant: the four
11
+ // stage colours measured live (blue #266df0, pink #fa4b94, green #00d17e,
12
+ // red #ff5454) don't match crisp's existing success/warning/danger tokens
13
+ // (green600 #1f9d57, red600 #e5484d) at all — Attio lets a workspace assign
14
+ // an arbitrary colour per stage from its own picker, so this component takes
15
+ // a raw CSS colour rather than guessing at the rest of that picker's palette
16
+ // from four samples.
17
+ const spec = defineSpec({
18
+ name: "statusdot",
19
+ base: {
20
+ display: "inline-block",
21
+ boxSizing: "border-box",
22
+ flexShrink: 0,
23
+ width: "12px",
24
+ height: "12px",
25
+ borderRadius: c.radius.full,
26
+ },
27
+ });
28
+ const config = specToRecipe(spec);
29
+ export const statusdotRecipe = resolveRecipe(config);
30
+ export { spec };
31
+ export default config;
@@ -31,6 +31,16 @@ const spec = defineSpec({
31
31
  tone: {
32
32
  default: { color: c.fgPrimary },
33
33
  muted: { color: c.fgNeutralMuted },
34
+ // #858: no new measurement -- both reuse tokens already measured
35
+ // against Attio for the same colours in a different arrangement.
36
+ // `brand` is `textlink`'s own reused brand-text colour (`bgBrandSolid`,
37
+ // the same alias GRC's own `--color-fg-brand` resolves to). `danger`
38
+ // is `fgDanger` ("solid critical/destructive TEXT... an overdue
39
+ // due-date, a destructive menu item's label" -- see its own doc in
40
+ // tokens/semantic.ts), not `fgDangerSoft` (that one's a soft Badge
41
+ // pill's text, a different measured hex).
42
+ brand: { color: c.bgBrandSolid },
43
+ danger: { color: c.fgDanger },
34
44
  },
35
45
  },
36
46
  defaultVariants: { tone: "default" },
package/dist/esm/index.js CHANGED
@@ -51,6 +51,7 @@ export * from "./components/slider/index.js";
51
51
  export * from "./components/spinner/index.js";
52
52
  export * from "./components/stagebar/index.js";
53
53
  export * from "./components/statcard/index.js";
54
+ export * from "./components/statusdot/index.js";
54
55
  export * from "./components/switch/index.js";
55
56
  export * from "./components/table/index.js";
56
57
  export * from "./components/tabletoolbar/index.js";
@@ -53,8 +53,15 @@ export const size = {
53
53
  // Typography — the measured UI runs entirely on Inter. Sizes measured in the sidebar
54
54
  // collapse onto 11/12/13/14/16 (lg = 14px is the default body/label size);
55
55
  // weights are 400/500/600 with 500 the UI default.
56
+ //
57
+ // `"VK Sans Display"` leads the stack: an owner override (your-moon/crisp#857),
58
+ // not a remeasure of Attio. It only ever matches an INSTALLED copy of the font
59
+ // via the `local()`-only `@font-face` rules in dist/tokens.css (see
60
+ // build/generate-fonts.mjs for why — VK Sans Display's license has no
61
+ // redistribution grant, so crisp never ships the font files). Everywhere it
62
+ // isn't installed, this falls straight through to Inter, unchanged.
56
63
  export const font = {
57
- sans: '"Inter", system-ui, -apple-system, "Segoe UI", sans-serif',
64
+ sans: '"VK Sans Display", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif',
58
65
  };
59
66
  export const text = {
60
67
  xs: "11px",
@@ -271,7 +271,7 @@ export const tokens = {
271
271
  "xl": 16
272
272
  },
273
273
  "font": {
274
- "sans": "\"Inter\", system-ui, -apple-system, \"Segoe UI\", sans-serif"
274
+ "sans": "\"VK Sans Display\", \"Inter\", system-ui, -apple-system, \"Segoe UI\", sans-serif"
275
275
  },
276
276
  "weight": {
277
277
  "regular": "400",
@@ -0,0 +1,3 @@
1
+ .crisp-statusdot {
2
+ display: inline-block; box-sizing: border-box; flex-shrink: 0; width: 12px; height: 12px; border-radius: var(--crisp-radius-full);
3
+ }
@@ -0,0 +1,7 @@
1
+ import type { RecipeFn } from "../core/types";
2
+
3
+ export interface StatusdotVariants {
4
+
5
+ }
6
+
7
+ export declare const statusdotRecipe: RecipeFn<{ }>;
@@ -0,0 +1,5 @@
1
+ @layer crisp-components {
2
+ .crisp-statusdot {
3
+ display: inline-block; box-sizing: border-box; flex-shrink: 0; width: 12px; height: 12px; border-radius: var(--crisp-radius-full);
4
+ }
5
+ }
package/dist/styles.css CHANGED
@@ -1,3 +1,31 @@
1
+ @font-face {
2
+ font-family: "VK Sans Display";
3
+ src: local("VK Sans Display Regular");
4
+ font-weight: 400;
5
+ font-style: normal;
6
+ font-display: swap;
7
+ }
8
+ @font-face {
9
+ font-family: "VK Sans Display";
10
+ src: local("VK Sans Display Medium");
11
+ font-weight: 500;
12
+ font-style: normal;
13
+ font-display: swap;
14
+ }
15
+ @font-face {
16
+ font-family: "VK Sans Display";
17
+ src: local("VK Sans Display DemiBold");
18
+ font-weight: 600;
19
+ font-style: normal;
20
+ font-display: swap;
21
+ }
22
+ @font-face {
23
+ font-family: "VK Sans Display";
24
+ src: local("VK Sans Display Bold");
25
+ font-weight: 700;
26
+ font-style: normal;
27
+ font-display: swap;
28
+ }
1
29
  :root {
2
30
  --crisp-bg-brand-solid: #266df0;
3
31
  --crisp-bg-brand-solid-pressed: #1f5fd6;
@@ -151,7 +179,7 @@
151
179
  --crisp-weight-medium: 500;
152
180
  --crisp-weight-semibold: 600;
153
181
  --crisp-weight-bold: 700;
154
- --crisp-font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
182
+ --crisp-font-sans: "VK Sans Display", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
155
183
  }
156
184
 
157
185
  .crisp-accordion {
@@ -1865,6 +1893,10 @@
1865
1893
 
1866
1894
  }
1867
1895
 
1896
+ .crisp-statusdot {
1897
+ display: inline-block; box-sizing: border-box; flex-shrink: 0; width: 12px; height: 12px; border-radius: var(--crisp-radius-full);
1898
+ }
1899
+
1868
1900
  .crisp-switch {
1869
1901
  display: inline-flex; align-items: center; flex-shrink: 0; width: 24px; height: 16px; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 9%, transparent); cursor: pointer; transition: background-color .2s ease; -webkit-tap-highlight-color: transparent;
1870
1902
  & .crisp-switch-thumb { width: 12px; height: 12px; margin: 0 2px; border-radius: var(--crisp-radius-full); background: #fff; box-shadow: 0 0 0 1px var(--crisp-ring-switch); transition: transform .2s ease; }
@@ -2170,6 +2202,12 @@
2170
2202
  .crisp-text--tone_muted {
2171
2203
  color: var(--crisp-fg-neutral-muted);
2172
2204
  }
2205
+ .crisp-text--tone_brand {
2206
+ color: var(--crisp-bg-brand-solid);
2207
+ }
2208
+ .crisp-text--tone_danger {
2209
+ color: var(--crisp-fg-danger);
2210
+ }
2173
2211
 
2174
2212
  .crisp-textarea {
2175
2213
  position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
@@ -1,3 +1,31 @@
1
+ @font-face {
2
+ font-family: "VK Sans Display";
3
+ src: local("VK Sans Display Regular");
4
+ font-weight: 400;
5
+ font-style: normal;
6
+ font-display: swap;
7
+ }
8
+ @font-face {
9
+ font-family: "VK Sans Display";
10
+ src: local("VK Sans Display Medium");
11
+ font-weight: 500;
12
+ font-style: normal;
13
+ font-display: swap;
14
+ }
15
+ @font-face {
16
+ font-family: "VK Sans Display";
17
+ src: local("VK Sans Display DemiBold");
18
+ font-weight: 600;
19
+ font-style: normal;
20
+ font-display: swap;
21
+ }
22
+ @font-face {
23
+ font-family: "VK Sans Display";
24
+ src: local("VK Sans Display Bold");
25
+ font-weight: 700;
26
+ font-style: normal;
27
+ font-display: swap;
28
+ }
1
29
  :root {
2
30
  --crisp-bg-brand-solid: #266df0;
3
31
  --crisp-bg-brand-solid-pressed: #1f5fd6;
@@ -151,7 +179,7 @@
151
179
  --crisp-weight-medium: 500;
152
180
  --crisp-weight-semibold: 600;
153
181
  --crisp-weight-bold: 700;
154
- --crisp-font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
182
+ --crisp-font-sans: "VK Sans Display", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
155
183
  }
156
184
 
157
185
  @layer crisp-components {
@@ -1866,6 +1894,10 @@
1866
1894
 
1867
1895
  }
1868
1896
 
1897
+ .crisp-statusdot {
1898
+ display: inline-block; box-sizing: border-box; flex-shrink: 0; width: 12px; height: 12px; border-radius: var(--crisp-radius-full);
1899
+ }
1900
+
1869
1901
  .crisp-switch {
1870
1902
  display: inline-flex; align-items: center; flex-shrink: 0; width: 24px; height: 16px; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 9%, transparent); cursor: pointer; transition: background-color .2s ease; -webkit-tap-highlight-color: transparent;
1871
1903
  & .crisp-switch-thumb { width: 12px; height: 12px; margin: 0 2px; border-radius: var(--crisp-radius-full); background: #fff; box-shadow: 0 0 0 1px var(--crisp-ring-switch); transition: transform .2s ease; }
@@ -2171,6 +2203,12 @@
2171
2203
  .crisp-text--tone_muted {
2172
2204
  color: var(--crisp-fg-neutral-muted);
2173
2205
  }
2206
+ .crisp-text--tone_brand {
2207
+ color: var(--crisp-bg-brand-solid);
2208
+ }
2209
+ .crisp-text--tone_danger {
2210
+ color: var(--crisp-fg-danger);
2211
+ }
2174
2212
 
2175
2213
  .crisp-textarea {
2176
2214
  position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
package/dist/text.css CHANGED
@@ -7,3 +7,9 @@
7
7
  .crisp-text--tone_muted {
8
8
  color: var(--crisp-fg-neutral-muted);
9
9
  }
10
+ .crisp-text--tone_brand {
11
+ color: var(--crisp-bg-brand-solid);
12
+ }
13
+ .crisp-text--tone_danger {
14
+ color: var(--crisp-fg-danger);
15
+ }
package/dist/text.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { RecipeFn } from "../core/types";
2
2
 
3
3
  export interface TextVariants {
4
- tone?: "default" | "muted";
4
+ tone?: "default" | "muted" | "brand" | "danger";
5
5
  }
6
6
 
7
- export declare const textRecipe: RecipeFn<{ tone: { default: string; muted: string } }>;
7
+ export declare const textRecipe: RecipeFn<{ tone: { default: string; muted: string; brand: string; danger: string } }>;
@@ -8,4 +8,10 @@
8
8
  .crisp-text--tone_muted {
9
9
  color: var(--crisp-fg-neutral-muted);
10
10
  }
11
+ .crisp-text--tone_brand {
12
+ color: var(--crisp-bg-brand-solid);
13
+ }
14
+ .crisp-text--tone_danger {
15
+ color: var(--crisp-fg-danger);
16
+ }
11
17
  }
package/dist/tokens.css CHANGED
@@ -1,3 +1,31 @@
1
+ @font-face {
2
+ font-family: "VK Sans Display";
3
+ src: local("VK Sans Display Regular");
4
+ font-weight: 400;
5
+ font-style: normal;
6
+ font-display: swap;
7
+ }
8
+ @font-face {
9
+ font-family: "VK Sans Display";
10
+ src: local("VK Sans Display Medium");
11
+ font-weight: 500;
12
+ font-style: normal;
13
+ font-display: swap;
14
+ }
15
+ @font-face {
16
+ font-family: "VK Sans Display";
17
+ src: local("VK Sans Display DemiBold");
18
+ font-weight: 600;
19
+ font-style: normal;
20
+ font-display: swap;
21
+ }
22
+ @font-face {
23
+ font-family: "VK Sans Display";
24
+ src: local("VK Sans Display Bold");
25
+ font-weight: 700;
26
+ font-style: normal;
27
+ font-display: swap;
28
+ }
1
29
  :root {
2
30
  --crisp-bg-brand-solid: #266df0;
3
31
  --crisp-bg-brand-solid-pressed: #1f5fd6;
@@ -151,5 +179,5 @@
151
179
  --crisp-weight-medium: 500;
152
180
  --crisp-weight-semibold: 600;
153
181
  --crisp-weight-bold: 700;
154
- --crisp-font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
182
+ --crisp-font-sans: "VK Sans Display", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
155
183
  }
package/dist/tokens.json CHANGED
@@ -268,7 +268,7 @@
268
268
  "xl": 16
269
269
  },
270
270
  "font": {
271
- "sans": "\"Inter\", system-ui, -apple-system, \"Segoe UI\", sans-serif"
271
+ "sans": "\"VK Sans Display\", \"Inter\", system-ui, -apple-system, \"Segoe UI\", sans-serif"
272
272
  },
273
273
  "weight": {
274
274
  "regular": "400",
@@ -0,0 +1,2 @@
1
+ export { StatusDot, type StatusDotProps } from "./statusdot";
2
+ export { statusdotRecipe } from "./statusdot.recipe";
@@ -0,0 +1,21 @@
1
+ import type * as React from "react";
2
+ export type StatusDotProps = React.ComponentPropsWithoutRef<"span"> & {
3
+ /**
4
+ * The dot's fill — any CSS colour. Attio assigns an arbitrary colour per
5
+ * stage/status from its own picker (measured values aren't a fixed enum;
6
+ * see the recipe's doc), so this takes a colour directly rather than a
7
+ * `tone` name.
8
+ */
9
+ color: string;
10
+ className?: string;
11
+ };
12
+ /**
13
+ * A standalone coloured status/stage dot — a stage-column header's own
14
+ * colour swatch, a status field's leading indicator. Not a Badge: no pill,
15
+ * no text pairing required. Pass `children` (e.g. a label) alongside it in
16
+ * your own flex row; this renders only the dot.
17
+ */
18
+ export declare function StatusDot({ color, className, style, ...rest }: StatusDotProps): React.JSX.Element;
19
+ export declare namespace StatusDot {
20
+ var displayName: string;
21
+ }
@@ -0,0 +1,15 @@
1
+ declare const spec: {
2
+ readonly name: "statusdot";
3
+ readonly base: {
4
+ readonly display: "inline-block";
5
+ readonly boxSizing: "border-box";
6
+ readonly flexShrink: 0;
7
+ readonly width: "12px";
8
+ readonly height: "12px";
9
+ readonly borderRadius: `var(--${string})`;
10
+ };
11
+ };
12
+ declare const config: import("../..").RecipeConfig<Record<string, Record<string, string>>>;
13
+ export declare const statusdotRecipe: import("../..").RecipeFn<Record<string, Record<string, string>>>;
14
+ export { spec };
15
+ export default config;
@@ -19,12 +19,16 @@ export declare const Text: React.ForwardRefExoticComponent<Omit<React.DetailedHT
19
19
  readonly tone: {
20
20
  readonly default: string;
21
21
  readonly muted: string;
22
+ readonly brand: string;
23
+ readonly danger: string;
22
24
  };
23
25
  }> & {
24
26
  config: import("../..").RecipeConfig<{
25
27
  readonly tone: {
26
28
  readonly default: string;
27
29
  readonly muted: string;
30
+ readonly brand: string;
31
+ readonly danger: string;
28
32
  };
29
33
  }>;
30
34
  }> & {
@@ -11,6 +11,12 @@ declare const spec: {
11
11
  muted: {
12
12
  color: `var(--${string})`;
13
13
  };
14
+ brand: {
15
+ color: `var(--${string})`;
16
+ };
17
+ danger: {
18
+ color: `var(--${string})`;
19
+ };
14
20
  };
15
21
  };
16
22
  readonly defaultVariants: {
@@ -21,18 +27,24 @@ declare const config: import("../..").RecipeConfig<{
21
27
  readonly tone: {
22
28
  readonly default: string;
23
29
  readonly muted: string;
30
+ readonly brand: string;
31
+ readonly danger: string;
24
32
  };
25
33
  }>;
26
34
  export declare const textRecipe: import("../..").RecipeFn<{
27
35
  readonly tone: {
28
36
  readonly default: string;
29
37
  readonly muted: string;
38
+ readonly brand: string;
39
+ readonly danger: string;
30
40
  };
31
41
  }> & {
32
42
  config: import("../..").RecipeConfig<{
33
43
  readonly tone: {
34
44
  readonly default: string;
35
45
  readonly muted: string;
46
+ readonly brand: string;
47
+ readonly danger: string;
36
48
  };
37
49
  }>;
38
50
  };
@@ -47,6 +47,7 @@ export * from "./components/slider";
47
47
  export * from "./components/spinner";
48
48
  export * from "./components/stagebar";
49
49
  export * from "./components/statcard";
50
+ export * from "./components/statusdot";
50
51
  export * from "./components/switch";
51
52
  export * from "./components/table";
52
53
  export * from "./components/tabletoolbar";
@@ -32,7 +32,7 @@ export declare const size: {
32
32
  readonly calendarPill: "32px";
33
33
  };
34
34
  export declare const font: {
35
- readonly sans: '"Inter", system-ui, -apple-system, "Segoe UI", sans-serif';
35
+ readonly sans: '"VK Sans Display", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif';
36
36
  };
37
37
  export declare const text: {
38
38
  readonly xs: "11px";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crisp-ui-kit/crisp",
3
- "version": "0.55.6",
3
+ "version": "0.56.0",
4
4
  "description": "A lean React design system, measured pixel-for-pixel from Attio.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -278,6 +278,11 @@
278
278
  "import": "./dist/esm/components/statcard/index.js",
279
279
  "require": "./dist/cjs/components/statcard/index.js"
280
280
  },
281
+ "./statusdot": {
282
+ "types": "./dist/types/components/statusdot/index.d.ts",
283
+ "import": "./dist/esm/components/statusdot/index.js",
284
+ "require": "./dist/cjs/components/statusdot/index.js"
285
+ },
281
286
  "./switch": {
282
287
  "types": "./dist/types/components/switch/index.d.ts",
283
288
  "import": "./dist/esm/components/switch/index.js",