@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.
- package/dist/cjs/components/statusdot/index.js +7 -0
- package/dist/cjs/components/statusdot/statusdot.js +15 -0
- package/dist/cjs/components/statusdot/statusdot.recipe.js +34 -0
- package/dist/cjs/components/text/text.recipe.js +10 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/tokens/scale.js +8 -1
- package/dist/esm/components/statusdot/index.js +2 -0
- package/dist/esm/components/statusdot/statusdot.js +12 -0
- package/dist/esm/components/statusdot/statusdot.recipe.js +31 -0
- package/dist/esm/components/text/text.recipe.js +10 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/tokens/scale.js +8 -1
- package/dist/native/tokens.js +1 -1
- package/dist/statusdot.css +3 -0
- package/dist/statusdot.d.ts +7 -0
- package/dist/statusdot.layered.css +5 -0
- package/dist/styles.css +39 -1
- package/dist/styles.layered.css +39 -1
- package/dist/text.css +6 -0
- package/dist/text.d.ts +2 -2
- package/dist/text.layered.css +6 -0
- package/dist/tokens.css +29 -1
- package/dist/tokens.json +1 -1
- package/dist/types/components/statusdot/index.d.ts +2 -0
- package/dist/types/components/statusdot/statusdot.d.ts +21 -0
- package/dist/types/components/statusdot/statusdot.recipe.d.ts +15 -0
- package/dist/types/components/text/text.d.ts +4 -0
- package/dist/types/components/text/text.recipe.d.ts +12 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/tokens/scale.d.ts +1 -1
- package/package.json +6 -1
|
@@ -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);
|
package/dist/cjs/tokens/scale.js
CHANGED
|
@@ -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,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";
|
package/dist/esm/tokens/scale.js
CHANGED
|
@@ -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",
|
package/dist/native/tokens.js
CHANGED
|
@@ -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",
|
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);
|
package/dist/styles.layered.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
|
@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
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 } }>;
|
package/dist/text.layered.css
CHANGED
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
|
@@ -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
|
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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.
|
|
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",
|