@kanso-labs/kanso-ui 0.2.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/LICENSE +20 -0
- package/README.md +83 -0
- package/dist/assets/stylex.css +1623 -0
- package/dist/cjs/assets/stylex.css +1623 -0
- package/dist/cjs/components/avatar/index.cjs +89 -0
- package/dist/cjs/components/avatar/index.cjs.map +1 -0
- package/dist/cjs/components/avatar/index.d.cts +29 -0
- package/dist/cjs/components/badge/index.cjs +93 -0
- package/dist/cjs/components/badge/index.cjs.map +1 -0
- package/dist/cjs/components/badge/index.d.cts +27 -0
- package/dist/cjs/components/button/index.cjs +101 -0
- package/dist/cjs/components/button/index.cjs.map +1 -0
- package/dist/cjs/components/button/index.d.cts +22 -0
- package/dist/cjs/components/card/index.cjs +84 -0
- package/dist/cjs/components/card/index.cjs.map +1 -0
- package/dist/cjs/components/card/index.d.cts +29 -0
- package/dist/cjs/components/chip/index.cjs +53 -0
- package/dist/cjs/components/chip/index.cjs.map +1 -0
- package/dist/cjs/components/chip/index.d.cts +13 -0
- package/dist/cjs/components/currency/index.cjs +56 -0
- package/dist/cjs/components/currency/index.cjs.map +1 -0
- package/dist/cjs/components/currency/index.d.cts +36 -0
- package/dist/cjs/components/icon-button/index.cjs +80 -0
- package/dist/cjs/components/icon-button/index.cjs.map +1 -0
- package/dist/cjs/components/icon-button/index.d.cts +32 -0
- package/dist/cjs/components/index.d.cts +15 -0
- package/dist/cjs/components/link/index.cjs +61 -0
- package/dist/cjs/components/link/index.cjs.map +1 -0
- package/dist/cjs/components/link/index.d.cts +30 -0
- package/dist/cjs/components/list-item/index.cjs +42 -0
- package/dist/cjs/components/list-item/index.cjs.map +1 -0
- package/dist/cjs/components/list-item/index.d.cts +22 -0
- package/dist/cjs/components/separator/index.cjs +34 -0
- package/dist/cjs/components/separator/index.cjs.map +1 -0
- package/dist/cjs/components/separator/index.d.cts +14 -0
- package/dist/cjs/components/sheet/index.cjs +266 -0
- package/dist/cjs/components/sheet/index.cjs.map +1 -0
- package/dist/cjs/components/sheet/index.d.cts +73 -0
- package/dist/cjs/components/tabs/index.cjs +77 -0
- package/dist/cjs/components/tabs/index.cjs.map +1 -0
- package/dist/cjs/components/tabs/index.d.cts +24 -0
- package/dist/cjs/components/text/index.cjs +173 -0
- package/dist/cjs/components/text/index.cjs.map +1 -0
- package/dist/cjs/components/text/index.d.cts +19 -0
- package/dist/cjs/components/text-field/index.cjs +53 -0
- package/dist/cjs/components/text-field/index.cjs.map +1 -0
- package/dist/cjs/components/text-field/index.d.cts +30 -0
- package/dist/cjs/hooks/useRipple.cjs +391 -0
- package/dist/cjs/hooks/useRipple.cjs.map +1 -0
- package/dist/cjs/index.cjs +29 -0
- package/dist/cjs/index.d.cts +16 -0
- package/dist/cjs/node_modules/@stylexjs/stylex/lib/es/stylex.cjs +121 -0
- package/dist/cjs/node_modules/@stylexjs/stylex/lib/es/stylex.cjs.map +1 -0
- package/dist/cjs/styles/ripple.cjs +33 -0
- package/dist/cjs/styles/ripple.cjs.map +1 -0
- package/dist/cjs/tokens/values.cjs +36 -0
- package/dist/cjs/tokens/values.cjs.map +1 -0
- package/dist/components/avatar/index.d.ts +29 -0
- package/dist/components/avatar/index.js +89 -0
- package/dist/components/avatar/index.js.map +1 -0
- package/dist/components/badge/index.d.ts +27 -0
- package/dist/components/badge/index.js +93 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/button/index.d.ts +22 -0
- package/dist/components/button/index.js +101 -0
- package/dist/components/button/index.js.map +1 -0
- package/dist/components/card/index.d.ts +29 -0
- package/dist/components/card/index.js +84 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/chip/index.d.ts +13 -0
- package/dist/components/chip/index.js +53 -0
- package/dist/components/chip/index.js.map +1 -0
- package/dist/components/currency/index.d.ts +36 -0
- package/dist/components/currency/index.js +56 -0
- package/dist/components/currency/index.js.map +1 -0
- package/dist/components/icon-button/index.d.ts +32 -0
- package/dist/components/icon-button/index.js +80 -0
- package/dist/components/icon-button/index.js.map +1 -0
- package/dist/components/index.d.ts +15 -0
- package/dist/components/link/index.d.ts +30 -0
- package/dist/components/link/index.js +61 -0
- package/dist/components/link/index.js.map +1 -0
- package/dist/components/list-item/index.d.ts +22 -0
- package/dist/components/list-item/index.js +42 -0
- package/dist/components/list-item/index.js.map +1 -0
- package/dist/components/separator/index.d.ts +14 -0
- package/dist/components/separator/index.js +34 -0
- package/dist/components/separator/index.js.map +1 -0
- package/dist/components/sheet/index.d.ts +73 -0
- package/dist/components/sheet/index.js +266 -0
- package/dist/components/sheet/index.js.map +1 -0
- package/dist/components/tabs/index.d.ts +24 -0
- package/dist/components/tabs/index.js +77 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/text/index.d.ts +19 -0
- package/dist/components/text/index.js +173 -0
- package/dist/components/text/index.js.map +1 -0
- package/dist/components/text-field/index.d.ts +30 -0
- package/dist/components/text-field/index.js +53 -0
- package/dist/components/text-field/index.js.map +1 -0
- package/dist/hooks/useRipple.js +391 -0
- package/dist/hooks/useRipple.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +15 -0
- package/dist/node_modules/@stylexjs/stylex/lib/es/stylex.js +121 -0
- package/dist/node_modules/@stylexjs/stylex/lib/es/stylex.js.map +1 -0
- package/dist/styles/ripple.js +33 -0
- package/dist/styles/ripple.js.map +1 -0
- package/dist/tokens/values.js +34 -0
- package/dist/tokens/values.js.map +1 -0
- package/dist/tokens.css +282 -0
- package/package.json +109 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
const require_stylex = require("../../node_modules/@stylexjs/stylex/lib/es/stylex.cjs");
|
|
2
|
+
let _base_ui_react_avatar = require("@base-ui/react/avatar");
|
|
3
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
//#region src/components/avatar/index.tsx
|
|
5
|
+
const styles = {
|
|
6
|
+
base: {
|
|
7
|
+
kGNEyG: "x6s0dn4",
|
|
8
|
+
kaIpWk: "x3y1ksm",
|
|
9
|
+
k1xSpc: "x3nfvp2",
|
|
10
|
+
kmuXW: "x2lah0s",
|
|
11
|
+
kMv6JI: "xkknnkr",
|
|
12
|
+
k63SB2: "x1bf3uqz",
|
|
13
|
+
kjj79g: "xl56j7k",
|
|
14
|
+
kVQacm: "xb3r6kr",
|
|
15
|
+
kfSwDN: "x87ps6o",
|
|
16
|
+
$$css: true
|
|
17
|
+
},
|
|
18
|
+
image: {
|
|
19
|
+
kZKoxP: "x5yr21d",
|
|
20
|
+
kzqmXN: "xh8yej3",
|
|
21
|
+
kVIFPx: "xl1xv1r",
|
|
22
|
+
$$css: true
|
|
23
|
+
},
|
|
24
|
+
lg: {
|
|
25
|
+
kZKoxP: "xnnlda6",
|
|
26
|
+
kGuDYH: "x1848etk",
|
|
27
|
+
kzqmXN: "x15yg21f",
|
|
28
|
+
$$css: true
|
|
29
|
+
},
|
|
30
|
+
md: {
|
|
31
|
+
kZKoxP: "x1vqgdyp",
|
|
32
|
+
kGuDYH: "x14zspaw",
|
|
33
|
+
kzqmXN: "x100vrsf",
|
|
34
|
+
$$css: true
|
|
35
|
+
},
|
|
36
|
+
negative: {
|
|
37
|
+
kWkggS: "xkz0cvf",
|
|
38
|
+
kMwMTN: "xylzu7l",
|
|
39
|
+
$$css: true
|
|
40
|
+
},
|
|
41
|
+
positive: {
|
|
42
|
+
kWkggS: "xa3zu90",
|
|
43
|
+
kMwMTN: "x1di7zbg",
|
|
44
|
+
$$css: true
|
|
45
|
+
},
|
|
46
|
+
primary: {
|
|
47
|
+
kWkggS: "xp89om9",
|
|
48
|
+
kMwMTN: "xscdzaa",
|
|
49
|
+
$$css: true
|
|
50
|
+
},
|
|
51
|
+
secondary: {
|
|
52
|
+
kWkggS: "x15dekr4",
|
|
53
|
+
kMwMTN: "x1sawysd",
|
|
54
|
+
$$css: true
|
|
55
|
+
},
|
|
56
|
+
sm: {
|
|
57
|
+
kZKoxP: "xc9qbxq",
|
|
58
|
+
kGuDYH: "xkucv67",
|
|
59
|
+
kzqmXN: "x14qfxbe",
|
|
60
|
+
$$css: true
|
|
61
|
+
},
|
|
62
|
+
tertiary: {
|
|
63
|
+
kWkggS: "xs6yvni",
|
|
64
|
+
kMwMTN: "x3cbcwg",
|
|
65
|
+
$$css: true
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
function Avatar({ name, size = "md", src, tone = "primary", ...props$1 }) {
|
|
69
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_avatar.Avatar.Root, {
|
|
70
|
+
"aria-label": name,
|
|
71
|
+
role: "img",
|
|
72
|
+
...props$1,
|
|
73
|
+
...require_stylex.props(styles.base, styles[size], styles[tone]),
|
|
74
|
+
children: [src === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_avatar.Avatar.Image, {
|
|
75
|
+
alt: "",
|
|
76
|
+
src,
|
|
77
|
+
className: "x5yr21d xh8yej3 xl1xv1r"
|
|
78
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_avatar.Avatar.Fallback, { children: initialsFrom(name) })]
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function initialsFrom(name) {
|
|
82
|
+
const words = name.split(/\s+/u).filter(Boolean);
|
|
83
|
+
if (words.length === 0) return "";
|
|
84
|
+
return `${Array.from(words[0] ?? "")[0] ?? ""}${words.length > 1 ? Array.from(words.at(-1) ?? "")[0] ?? "" : ""}`.toLocaleUpperCase();
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
exports.default = Avatar;
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/components/avatar/index.tsx"],"sourcesContent":["import type { AvatarRootProps as BaseUIAvatarRootProps } from '@base-ui/react/avatar';\nimport { Avatar as BaseUIAvatar } from '@base-ui/react/avatar';\nimport * as stylex from '@stylexjs/stylex';\nimport '../../tokens/design.tokens.stylex';\nimport { colors, radii, typography } from '../../tokens/design.tokens.stylex';\n\n// Tones are container/on-container pairs rather than one colour each, so the\n// initials are always a role's own foreground and can't end up unreadable on\n// a tint they were never paired with. Which tone a given person gets is the\n// consuming app's decision — the design cycles colours per person, and that\n// cycle belongs where the list of people is, not in this component.\n//\n// Sizes carry their own type size but not their own weight or family: the\n// label face at medium weight holds across all three, so a large avatar is\n// bigger initials rather than differently-styled ones.\nconst styles = {\n base: {\n kGNEyG: \"x6s0dn4\",\n kaIpWk: \"x3y1ksm\",\n k1xSpc: \"x3nfvp2\",\n kmuXW: \"x2lah0s\",\n kMv6JI: \"xkknnkr\",\n k63SB2: \"x1bf3uqz\",\n kjj79g: \"xl56j7k\",\n kVQacm: \"xb3r6kr\",\n kfSwDN: \"x87ps6o\",\n $$css: true\n },\n image: {\n kZKoxP: \"x5yr21d\",\n kzqmXN: \"xh8yej3\",\n kVIFPx: \"xl1xv1r\",\n $$css: true\n },\n lg: {\n kZKoxP: \"xnnlda6\",\n kGuDYH: \"x1848etk\",\n kzqmXN: \"x15yg21f\",\n $$css: true\n },\n md: {\n kZKoxP: \"x1vqgdyp\",\n kGuDYH: \"x14zspaw\",\n kzqmXN: \"x100vrsf\",\n $$css: true\n },\n negative: {\n kWkggS: \"xkz0cvf\",\n kMwMTN: \"xylzu7l\",\n $$css: true\n },\n positive: {\n kWkggS: \"xa3zu90\",\n kMwMTN: \"x1di7zbg\",\n $$css: true\n },\n primary: {\n kWkggS: \"xp89om9\",\n kMwMTN: \"xscdzaa\",\n $$css: true\n },\n secondary: {\n kWkggS: \"x15dekr4\",\n kMwMTN: \"x1sawysd\",\n $$css: true\n },\n sm: {\n kZKoxP: \"xc9qbxq\",\n kGuDYH: \"xkucv67\",\n kzqmXN: \"x14qfxbe\",\n $$css: true\n },\n tertiary: {\n kWkggS: \"xs6yvni\",\n kMwMTN: \"x3cbcwg\",\n $$css: true\n }\n};\ntype AvatarProps = Omit<BaseUIAvatarRootProps, 'children'> & {\n /**\n * The person this represents. Supplies both the initials and the accessible\n * name, so a screen reader announces who it is rather than reading two\n * letters aloud.\n */\n name: string;\n /**\n * Diameter: `sm` 36px, `md` 40px, `lg` 56px.\n * @default 'md'\n */\n size?: 'lg' | 'md' | 'sm';\n /**\n * A photo to show in place of the initials. The initials stay until it has\n * loaded, and come back if it fails.\n */\n src?: string;\n /**\n * Which container/on-container colour pair to tint with.\n * @default 'primary'\n */\n tone?: 'negative' | 'positive' | 'primary' | 'secondary' | 'tertiary';\n};\nfunction Avatar({\n name,\n size = 'md',\n src,\n tone = 'primary',\n ...props\n}: AvatarProps) {\n return (\n // role/aria-label rather than letting the initials be read: \"AL\" is not\n // what anyone means to announce. Marking the root as an image also makes\n // its contents presentational, so the photo and the initials can't be\n // announced a second time underneath the name.\n //\n // The lint rule below wants a real <img> tag instead of the role, which\n // cannot work here: an <img> is void, and this element's whole job is to\n // hold the initials shown when there is no photo, or none has loaded yet.\n <BaseUIAvatar.Root aria-label={name}\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- <img> takes no children\n role=\"img\" {...props} {...stylex.props(styles.base, styles[size], styles[tone])}>\n {src === undefined ? null : <BaseUIAvatar.Image alt=\"\" src={src} className=\"x5yr21d xh8yej3 xl1xv1r\" />}\n <BaseUIAvatar.Fallback>{initialsFrom(name)}</BaseUIAvatar.Fallback>\n </BaseUIAvatar.Root>\n );\n}\n\n// First letter of the first and last word, which handles both \"Ada\" and \"Ada\n// Lovelace\" without a separate prop for how many to take. Array.from rather\n// than indexing, so a name starting outside the Basic Multilingual Plane\n// yields its whole first character instead of half a surrogate pair.\nfunction initialsFrom(name: string) {\n const words = name.split(/\\s+/u).filter(Boolean);\n if (words.length === 0) {\n return '';\n }\n const first = Array.from(words[0] ?? '')[0] ?? '';\n const last = words.length > 1 ? Array.from(words.at(-1) ?? '')[0] ?? '' : '';\n return `${first}${last}`.toLocaleUpperCase();\n}\nexport type { AvatarProps };\nexport default Avatar;"],"mappings":";;;;AAeA,MAAM,SAAS;CACb,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,IAAI;EACF,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,IAAI;EACF,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,IAAI;EACF,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;AACF;AAwBA,SAAS,OAAO,EACd,MACA,OAAO,MACP,KACA,OAAO,WACP,GAAG,WACW;CACd,OASE,iBAAA,GAAA,kBAAA,KAAA,CAAC,sBAAA,OAAa,MAAd;EAAmB,cAAY;EAE/B,MAAK;EAAM,GAAI;EAAO,GAAA,eAAA,MAAiB,OAAO,MAAM,OAAO,OAAO,OAAO,KAAK;EAF9E,UAAA,CAGG,QAAQ,KAAA,IAAY,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,OAAa,OAAd;GAAoB,KAAI;GAAQ;GAAK,WAAU;EAAyB,CAAA,GACpG,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,OAAa,UAAd,EAAA,UAAwB,aAAa,IAAI,EAAyB,CAAA,CACjD;;AAEvB;AAMA,SAAS,aAAa,MAAc;CAClC,MAAM,QAAQ,KAAK,MAAM,MAAM,CAAC,CAAC,OAAO,OAAO;CAC/C,IAAI,MAAM,WAAW,GACnB,OAAO;CAIT,OAAO,GAFO,MAAM,KAAK,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,KAClC,MAAM,SAAS,IAAI,MAAM,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,KAAK,KACjD,kBAAkB;AAC7C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AvatarRootProps } from "@base-ui/react/avatar";
|
|
2
|
+
//#region src/components/avatar/index.d.ts
|
|
3
|
+
type AvatarProps = Omit<AvatarRootProps, 'children'> & {
|
|
4
|
+
/**
|
|
5
|
+
* The person this represents. Supplies both the initials and the accessible
|
|
6
|
+
* name, so a screen reader announces who it is rather than reading two
|
|
7
|
+
* letters aloud.
|
|
8
|
+
*/
|
|
9
|
+
name: string;
|
|
10
|
+
/**
|
|
11
|
+
* Diameter: `sm` 36px, `md` 40px, `lg` 56px.
|
|
12
|
+
* @default 'md'
|
|
13
|
+
*/
|
|
14
|
+
size?: 'lg' | 'md' | 'sm';
|
|
15
|
+
/**
|
|
16
|
+
* A photo to show in place of the initials. The initials stay until it has
|
|
17
|
+
* loaded, and come back if it fails.
|
|
18
|
+
*/
|
|
19
|
+
src?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Which container/on-container colour pair to tint with.
|
|
22
|
+
* @default 'primary'
|
|
23
|
+
*/
|
|
24
|
+
tone?: 'negative' | 'positive' | 'primary' | 'secondary' | 'tertiary';
|
|
25
|
+
};
|
|
26
|
+
declare function Avatar({ name, size, src, tone, ...props }: AvatarProps): import("react").JSX.Element;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { type AvatarProps, Avatar as default };
|
|
29
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const require_stylex = require("../../node_modules/@stylexjs/stylex/lib/es/stylex.cjs");
|
|
2
|
+
let _base_ui_react_use_render = require("@base-ui/react/use-render");
|
|
3
|
+
//#region src/components/badge/index.tsx
|
|
4
|
+
const styles = { base: {
|
|
5
|
+
kGNEyG: "x6s0dn4",
|
|
6
|
+
kaIpWk: "x1xdvaa9",
|
|
7
|
+
ksu8eU: "x1y0btm7",
|
|
8
|
+
kMzoRj: "xmkeg23",
|
|
9
|
+
k1xSpc: "x3nfvp2",
|
|
10
|
+
kmuXW: "x2lah0s",
|
|
11
|
+
kMv6JI: "xs1w0rn",
|
|
12
|
+
kGuDYH: "x1n35her",
|
|
13
|
+
kcqcaj: "xss6m8b",
|
|
14
|
+
k63SB2: "x1su64ma",
|
|
15
|
+
kOIVth: "xzoy561",
|
|
16
|
+
kb6lSQ: "xdlnduh",
|
|
17
|
+
kLWn49: "xaomhve",
|
|
18
|
+
k8WAf4: "xpg5a72",
|
|
19
|
+
kg3NbH: "xn60lsn",
|
|
20
|
+
khDVqt: "xuxw1ft",
|
|
21
|
+
$$css: true
|
|
22
|
+
} };
|
|
23
|
+
const filledTones = {
|
|
24
|
+
negative: {
|
|
25
|
+
kWkggS: "xkz0cvf",
|
|
26
|
+
kVAM5u: "x9r1u3d",
|
|
27
|
+
kMwMTN: "xylzu7l",
|
|
28
|
+
$$css: true
|
|
29
|
+
},
|
|
30
|
+
neutral: {
|
|
31
|
+
kWkggS: "x1rrhr5q",
|
|
32
|
+
kVAM5u: "x9r1u3d",
|
|
33
|
+
kMwMTN: "x1w5n3ug",
|
|
34
|
+
$$css: true
|
|
35
|
+
},
|
|
36
|
+
positive: {
|
|
37
|
+
kWkggS: "xa3zu90",
|
|
38
|
+
kVAM5u: "x9r1u3d",
|
|
39
|
+
kMwMTN: "x1di7zbg",
|
|
40
|
+
$$css: true
|
|
41
|
+
},
|
|
42
|
+
primary: {
|
|
43
|
+
kWkggS: "xp89om9",
|
|
44
|
+
kVAM5u: "x9r1u3d",
|
|
45
|
+
kMwMTN: "xscdzaa",
|
|
46
|
+
$$css: true
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const outlinedTones = {
|
|
50
|
+
negative: {
|
|
51
|
+
kWkggS: "xjbqb8w",
|
|
52
|
+
kVAM5u: "x1xdi1zw",
|
|
53
|
+
kMwMTN: "x12gp0t",
|
|
54
|
+
$$css: true
|
|
55
|
+
},
|
|
56
|
+
neutral: {
|
|
57
|
+
kWkggS: "xjbqb8w",
|
|
58
|
+
kVAM5u: "x133yhug",
|
|
59
|
+
kMwMTN: "x1w5n3ug",
|
|
60
|
+
$$css: true
|
|
61
|
+
},
|
|
62
|
+
positive: {
|
|
63
|
+
kWkggS: "xjbqb8w",
|
|
64
|
+
kVAM5u: "xm76mbg",
|
|
65
|
+
kMwMTN: "x4no3js",
|
|
66
|
+
$$css: true
|
|
67
|
+
},
|
|
68
|
+
primary: {
|
|
69
|
+
kWkggS: "xjbqb8w",
|
|
70
|
+
kVAM5u: "x1uajy3w",
|
|
71
|
+
kMwMTN: "x1mxwv8y",
|
|
72
|
+
$$css: true
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* A short, read-only label attached to something else. It renders a `<span>`
|
|
77
|
+
* and takes no interaction — for a label that can be selected, reach for Chip.
|
|
78
|
+
*/
|
|
79
|
+
function Badge({ render, tone = "neutral", variant = "filled", ...props$1 }) {
|
|
80
|
+
const toned = variant === "filled" ? filledTones[tone] : outlinedTones[tone];
|
|
81
|
+
return (0, _base_ui_react_use_render.useRender)({
|
|
82
|
+
defaultTagName: "span",
|
|
83
|
+
props: {
|
|
84
|
+
...props$1,
|
|
85
|
+
...require_stylex.props(styles.base, toned)
|
|
86
|
+
},
|
|
87
|
+
render
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
exports.default = Badge;
|
|
92
|
+
|
|
93
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/components/badge/index.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render';\nimport * as stylex from '@stylexjs/stylex';\nimport '../../tokens/design.tokens.stylex';\nimport { colors, radii, spacing, typography } from '../../tokens/design.tokens.stylex';\n\n// A badge states something about what it sits beside — a count, a status, a\n// version — and is never itself the thing you press. That is the whole line\n// between this and Chip: a chip is a two-state button announcing itself\n// through `aria-pressed`, so reaching for one to render a read-only label\n// puts a control in the accessibility tree that nothing can operate.\n//\n// Both variants carry a 1px border and `filled` makes it transparent rather\n// than dropping it, so a badge is the same size either way. Emphasising one\n// badge in a row otherwise nudges its neighbours by a pixel each side.\n//\n// Tabular figures are unconditional, for the same reason Currency sets them:\n// what ends up in a badge is mostly numeric — counts, versions, ports — and a\n// stack of them down a list wobbles on proportional digits. Text that happens\n// to carry no digits is unaffected.\nconst styles = {\n base: {\n kGNEyG: \"x6s0dn4\",\n kaIpWk: \"x1xdvaa9\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n k1xSpc: \"x3nfvp2\",\n kmuXW: \"x2lah0s\",\n kMv6JI: \"xs1w0rn\",\n kGuDYH: \"x1n35her\",\n kcqcaj: \"xss6m8b\",\n k63SB2: \"x1su64ma\",\n kOIVth: \"xzoy561\",\n kb6lSQ: \"xdlnduh\",\n kLWn49: \"xaomhve\",\n k8WAf4: \"xpg5a72\",\n kg3NbH: \"xn60lsn\",\n khDVqt: \"xuxw1ft\",\n $$css: true\n }\n};\n\n// `neutral` draws from the surface roles rather than a colour of its own,\n// which is what lets it state something without ranking it. The other three\n// name a direction, and are the same three Currency uses, plus primary for\n// the notable-but-not-good-or-bad case. `error` is deliberately absent:\n// negative already covers it, and offering both would leave the choice\n// between them to taste.\nconst filledTones = {\n negative: {\n kWkggS: \"xkz0cvf\",\n kVAM5u: \"x9r1u3d\",\n kMwMTN: \"xylzu7l\",\n $$css: true\n },\n neutral: {\n kWkggS: \"x1rrhr5q\",\n kVAM5u: \"x9r1u3d\",\n kMwMTN: \"x1w5n3ug\",\n $$css: true\n },\n positive: {\n kWkggS: \"xa3zu90\",\n kVAM5u: \"x9r1u3d\",\n kMwMTN: \"x1di7zbg\",\n $$css: true\n },\n primary: {\n kWkggS: \"xp89om9\",\n kVAM5u: \"x9r1u3d\",\n kMwMTN: \"xscdzaa\",\n $$css: true\n }\n};\n\n// Outlined takes the tone at full strength for both the rule and the text,\n// rather than the on-container pairing filled uses. There is no container\n// here for an on-colour to be legible against — the page is the background —\n// so the container roles would read as washed out.\nconst outlinedTones = {\n negative: {\n kWkggS: \"xjbqb8w\",\n kVAM5u: \"x1xdi1zw\",\n kMwMTN: \"x12gp0t\",\n $$css: true\n },\n neutral: {\n kWkggS: \"xjbqb8w\",\n kVAM5u: \"x133yhug\",\n kMwMTN: \"x1w5n3ug\",\n $$css: true\n },\n positive: {\n kWkggS: \"xjbqb8w\",\n kVAM5u: \"xm76mbg\",\n kMwMTN: \"x4no3js\",\n $$css: true\n },\n primary: {\n kWkggS: \"xjbqb8w\",\n kVAM5u: \"x1uajy3w\",\n kMwMTN: \"x1mxwv8y\",\n $$css: true\n }\n};\ntype BadgeProps = useRender.ComponentProps<'span'> & {\n /**\n * Which colour role the badge carries. `neutral` states without ranking;\n * the other three read as good, bad, or worth noticing.\n * @default 'neutral'\n */\n tone?: BadgeTone;\n /**\n * How much weight the badge pulls. `filled` sits on a container of its own;\n * `outlined` is a rule on the page, for a badge that should not compete\n * with the thing it labels.\n * @default 'filled'\n */\n variant?: BadgeVariant;\n};\ntype BadgeTone = 'negative' | 'neutral' | 'positive' | 'primary';\ntype BadgeVariant = 'filled' | 'outlined';\n\n/**\n * A short, read-only label attached to something else. It renders a `<span>`\n * and takes no interaction — for a label that can be selected, reach for Chip.\n */\nfunction Badge({\n render,\n tone = 'neutral',\n variant = 'filled',\n ...props\n}: BadgeProps) {\n const toned = variant === 'filled' ? filledTones[tone] : outlinedTones[tone];\n\n // stylex.props() spreads after `props` for the same reason Text and Currency\n // do it: it wins over a consumer-supplied className rather than merging with\n // one. useRender would otherwise join the two class strings, and which won\n // would come down to stylesheet order rather than anything visible at the\n // call site.\n return useRender({\n defaultTagName: 'span',\n props: {\n ...props,\n ...stylex.props(styles.base, toned)\n },\n render\n });\n}\nexport type { BadgeProps };\nexport default Badge;"],"mappings":";;;AAmBA,MAAM,SAAS,EACb,MAAM;CACJ,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,OAAO;AACT,EACF;AAQA,MAAM,cAAc;CAClB,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;AACF;AAMA,MAAM,gBAAgB;CACpB,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;AACF;;;;;AAuBA,SAAS,MAAM,EACb,QACA,OAAO,WACP,UAAU,UACV,GAAG,WACU;CACb,MAAM,QAAQ,YAAY,WAAW,YAAY,QAAQ,cAAc;CAOvE,QAAA,GAAO,0BAAA,UAAA,CAAU;EACf,gBAAgB;EAChB,OAAO;GACL,GAAG;GACH,GAAA,eAAA,MAAgB,OAAO,MAAM,KAAK;EACpC;EACA;CACF,CAAC;AACH"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
|
+
//#region src/components/badge/index.d.ts
|
|
3
|
+
type BadgeProps = useRender.ComponentProps<'span'> & {
|
|
4
|
+
/**
|
|
5
|
+
* Which colour role the badge carries. `neutral` states without ranking;
|
|
6
|
+
* the other three read as good, bad, or worth noticing.
|
|
7
|
+
* @default 'neutral'
|
|
8
|
+
*/
|
|
9
|
+
tone?: BadgeTone;
|
|
10
|
+
/**
|
|
11
|
+
* How much weight the badge pulls. `filled` sits on a container of its own;
|
|
12
|
+
* `outlined` is a rule on the page, for a badge that should not compete
|
|
13
|
+
* with the thing it labels.
|
|
14
|
+
* @default 'filled'
|
|
15
|
+
*/
|
|
16
|
+
variant?: BadgeVariant;
|
|
17
|
+
};
|
|
18
|
+
type BadgeTone = 'negative' | 'neutral' | 'positive' | 'primary';
|
|
19
|
+
type BadgeVariant = 'filled' | 'outlined';
|
|
20
|
+
/**
|
|
21
|
+
* A short, read-only label attached to something else. It renders a `<span>`
|
|
22
|
+
* and takes no interaction — for a label that can be selected, reach for Chip.
|
|
23
|
+
*/
|
|
24
|
+
declare function Badge({ render, tone, variant, ...props }: BadgeProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { type BadgeProps, Badge as default };
|
|
27
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const require_stylex = require("../../node_modules/@stylexjs/stylex/lib/es/stylex.cjs");
|
|
2
|
+
const require_useRipple = require("../../hooks/useRipple.cjs");
|
|
3
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
let _base_ui_react_button = require("@base-ui/react/button");
|
|
5
|
+
//#region src/components/button/index.tsx
|
|
6
|
+
const styles = {
|
|
7
|
+
base: {
|
|
8
|
+
kGNEyG: "x6s0dn4",
|
|
9
|
+
kaIpWk: "x3y1ksm",
|
|
10
|
+
kMzoRj: "xc342km",
|
|
11
|
+
kkrTdU: "x1s07b3s x1ypdohk",
|
|
12
|
+
k1xSpc: "x3nfvp2",
|
|
13
|
+
kMv6JI: "xkknnkr",
|
|
14
|
+
kGuDYH: "x14zspaw",
|
|
15
|
+
k63SB2: "x1v9cpvo",
|
|
16
|
+
kOIVth: "x126z3so",
|
|
17
|
+
kb6lSQ: "x155f00i",
|
|
18
|
+
kLWn49: "x1lz68p4",
|
|
19
|
+
kjBf7l: "xrgy624",
|
|
20
|
+
kInvED: "x1hl8ikr",
|
|
21
|
+
k3XXqK: "x9v5kkp x1t137rt",
|
|
22
|
+
kMeerF: "x1de99jn",
|
|
23
|
+
kVAEAm: "x1n2onr6",
|
|
24
|
+
$$css: true
|
|
25
|
+
},
|
|
26
|
+
filled: {
|
|
27
|
+
kWkggS: "xm7dzmu x1n0xrd1 x16z974x x197hsbc xnety89",
|
|
28
|
+
kGVxlE: "xfj5659 xv7jn9b x1gnnqk1",
|
|
29
|
+
kMwMTN: "xhfb3ry xwjo7ld",
|
|
30
|
+
kg3NbH: "xg0ps1x",
|
|
31
|
+
$$css: true
|
|
32
|
+
},
|
|
33
|
+
lg: {
|
|
34
|
+
kZKoxP: "xnnlda6",
|
|
35
|
+
kGuDYH: "x1848etk",
|
|
36
|
+
kLWn49: "xh7dzej",
|
|
37
|
+
kg3NbH: "x6e1k4i",
|
|
38
|
+
$$css: true
|
|
39
|
+
},
|
|
40
|
+
md: {
|
|
41
|
+
kZKoxP: "x1vqgdyp",
|
|
42
|
+
$$css: true
|
|
43
|
+
},
|
|
44
|
+
outlined: {
|
|
45
|
+
kWkggS: "x117izkb x598nmq x1pi8zt8 xjbqb8w",
|
|
46
|
+
kVAM5u: "xd8uu4e x1fwvt7v",
|
|
47
|
+
ksu8eU: "x1y0btm7",
|
|
48
|
+
kMzoRj: "xmkeg23",
|
|
49
|
+
kMwMTN: "xhfb3ry x1mxwv8y",
|
|
50
|
+
kg3NbH: "xg0ps1x",
|
|
51
|
+
$$css: true
|
|
52
|
+
},
|
|
53
|
+
text: {
|
|
54
|
+
kWkggS: "x117izkb x598nmq x1pi8zt8 xjbqb8w",
|
|
55
|
+
kMwMTN: "xhfb3ry x1mxwv8y",
|
|
56
|
+
kg3NbH: "x790zyz",
|
|
57
|
+
$$css: true
|
|
58
|
+
},
|
|
59
|
+
tonal: {
|
|
60
|
+
kWkggS: "x1c3n7wt x1n0xrd1 x1uyy5zb xwypj8i xp89om9",
|
|
61
|
+
kGVxlE: "xfj5659 xv7jn9b x1gnnqk1",
|
|
62
|
+
kMwMTN: "xhfb3ry xscdzaa",
|
|
63
|
+
kg3NbH: "xg0ps1x",
|
|
64
|
+
$$css: true
|
|
65
|
+
},
|
|
66
|
+
xl: {
|
|
67
|
+
kZKoxP: "xwzfr38",
|
|
68
|
+
kGuDYH: "xete2z3",
|
|
69
|
+
kLWn49: "x2divse",
|
|
70
|
+
kg3NbH: "x1sdxjpb",
|
|
71
|
+
$$css: true
|
|
72
|
+
},
|
|
73
|
+
xs: {
|
|
74
|
+
kZKoxP: "x10w6t97",
|
|
75
|
+
kGuDYH: "xkucv67",
|
|
76
|
+
kLWn49: "xvzb9hk",
|
|
77
|
+
kg3NbH: "x790zyz",
|
|
78
|
+
$$css: true
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
function Button({ children, disabled = false, disableRipple = false, onClick, onContextMenu, onPointerCancel, onPointerDown, onPointerLeave, onPointerUp, size = "md", variant = "filled", ...props$1 }) {
|
|
82
|
+
const ripple = require_useRipple.useRipple(!disableRipple, {
|
|
83
|
+
onClick,
|
|
84
|
+
onContextMenu,
|
|
85
|
+
onPointerCancel,
|
|
86
|
+
onPointerDown,
|
|
87
|
+
onPointerLeave,
|
|
88
|
+
onPointerUp
|
|
89
|
+
});
|
|
90
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_button.Button, {
|
|
91
|
+
disabled,
|
|
92
|
+
...ripple.handlers,
|
|
93
|
+
...props$1,
|
|
94
|
+
...require_stylex.props(styles.base, styles[variant], styles[size]),
|
|
95
|
+
children: [children, ripple.surface]
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//#endregion
|
|
99
|
+
exports.default = Button;
|
|
100
|
+
|
|
101
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/components/button/index.tsx"],"sourcesContent":["import type { ButtonProps as BaseUIButtonProps } from '@base-ui/react/button';\nimport { Button as BaseUIButton } from '@base-ui/react/button';\nimport * as stylex from '@stylexjs/stylex';\nimport { useRipple } from '../../hooks/useRipple';\nimport '../../tokens/design.tokens.stylex';\nimport { colors, radii, shadows, spacing, stateLayerOpacity, typography } from '../../tokens/design.tokens.stylex';\n\n// Each variant composites an 'on-color' (filled) or the brand color itself\n// (outlined/text, over a transparent container) at the interaction state's\n// opacity, rather than swapping in a separate hover/pressed color.\n// calc(<opacity> * 100%) turns the token's unitless 0-1 ratio into the\n// percentage color-mix() takes. Inlined rather than factored into a helper:\n// @stylexjs/babel-plugin only statically recognizes expressions written\n// directly as property values, and a call to an externally-defined function\n// isn't one of them.\n//\n// :hover and :active still match a disabled native <button>, and stylex's\n// fixed pseudo-class ordering places both after :disabled, so without the\n// :not(:disabled) guard a hovered/pressed disabled button would render with\n// the interaction color instead of the disabled one.\n//\n// Two independent axes, applied base -> variant -> size. The order is what\n// lets `text` keep its tighter inline padding at the default size while the\n// other sizes still set their own: `md` deliberately declares no\n// paddingInline, so a medium button falls through to whatever its variant\n// asked for, and every other size overrides it. That mirrors the source\n// design's own cascade, where the size classes are declared after the\n// variant ones and win on padding for exactly the same reason.\nconst styles = {\n base: {\n kGNEyG: \"x6s0dn4\",\n kaIpWk: \"x3y1ksm\",\n kMzoRj: \"xc342km\",\n kkrTdU: \"x1s07b3s x1ypdohk\",\n k1xSpc: \"x3nfvp2\",\n kMv6JI: \"xkknnkr\",\n kGuDYH: \"x14zspaw\",\n k63SB2: \"x1v9cpvo\",\n kOIVth: \"x126z3so\",\n kb6lSQ: \"x155f00i\",\n kLWn49: \"x1lz68p4\",\n kjBf7l: \"xrgy624\",\n kInvED: \"x1hl8ikr\",\n k3XXqK: \"x9v5kkp x1t137rt\",\n kMeerF: \"x1de99jn\",\n kVAEAm: \"x1n2onr6\",\n $$css: true\n },\n filled: {\n kWkggS: \"xm7dzmu x1n0xrd1 x16z974x x197hsbc xnety89\",\n kGVxlE: \"xfj5659 xv7jn9b x1gnnqk1\",\n kMwMTN: \"xhfb3ry xwjo7ld\",\n kg3NbH: \"xg0ps1x\",\n $$css: true\n },\n lg: {\n kZKoxP: \"xnnlda6\",\n kGuDYH: \"x1848etk\",\n kLWn49: \"xh7dzej\",\n kg3NbH: \"x6e1k4i\",\n $$css: true\n },\n md: {\n kZKoxP: \"x1vqgdyp\",\n $$css: true\n },\n outlined: {\n kWkggS: \"x117izkb x598nmq x1pi8zt8 xjbqb8w\",\n kVAM5u: \"xd8uu4e x1fwvt7v\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xhfb3ry x1mxwv8y\",\n kg3NbH: \"xg0ps1x\",\n $$css: true\n },\n text: {\n kWkggS: \"x117izkb x598nmq x1pi8zt8 xjbqb8w\",\n kMwMTN: \"xhfb3ry x1mxwv8y\",\n kg3NbH: \"x790zyz\",\n $$css: true\n },\n tonal: {\n kWkggS: \"x1c3n7wt x1n0xrd1 x1uyy5zb xwypj8i xp89om9\",\n kGVxlE: \"xfj5659 xv7jn9b x1gnnqk1\",\n kMwMTN: \"xhfb3ry xscdzaa\",\n kg3NbH: \"xg0ps1x\",\n $$css: true\n },\n xl: {\n kZKoxP: \"xwzfr38\",\n kGuDYH: \"xete2z3\",\n kLWn49: \"x2divse\",\n kg3NbH: \"x1sdxjpb\",\n $$css: true\n },\n xs: {\n kZKoxP: \"x10w6t97\",\n kGuDYH: \"xkucv67\",\n kLWn49: \"xvzb9hk\",\n kg3NbH: \"x790zyz\",\n $$css: true\n }\n};\ntype ButtonProps = BaseUIButtonProps & {\n /**\n * Disables the press ripple. The hover/pressed background state layer is\n * unaffected.\n * @default false\n */\n disableRipple?: boolean;\n /**\n * Control height: `xs` 32px, `md` 40px, `lg` 56px, `xl` 80px. Sizes other\n * than `md` also set their own inline padding.\n * @default 'md'\n */\n size?: 'lg' | 'md' | 'xl' | 'xs';\n /** @default 'filled' */\n variant?: 'filled' | 'outlined' | 'text' | 'tonal';\n};\nfunction Button({\n children,\n disabled = false,\n disableRipple = false,\n onClick,\n onContextMenu,\n onPointerCancel,\n onPointerDown,\n onPointerLeave,\n onPointerUp,\n size = 'md',\n variant = 'filled',\n ...props\n}: ButtonProps) {\n // `props` (className/style/render, etc.) is spread separately: `className`\n // and `style` there may be functions of render state, a Base UI extension\n // ripple's own handler-only merge doesn't need to know about.\n const ripple = useRipple<HTMLButtonElement>(!disableRipple, {\n onClick,\n onContextMenu,\n onPointerCancel,\n onPointerDown,\n onPointerLeave,\n onPointerUp\n });\n return <BaseUIButton disabled={disabled} {...ripple.handlers} {...props} {...stylex.props(styles.base, styles[variant], styles[size])}>\n {children}\n {ripple.surface}\n </BaseUIButton>;\n}\nexport type { ButtonProps };\nexport default Button;"],"mappings":";;;;;AA4BA,MAAM,SAAS;CACb,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,IAAI;EACF,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,IAAI;EACF,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,IAAI;EACF,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,IAAI;EACF,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;AACF;AAiBA,SAAS,OAAO,EACd,UACA,WAAW,OACX,gBAAgB,OAChB,SACA,eACA,iBACA,eACA,gBACA,aACA,OAAO,MACP,UAAU,UACV,GAAG,WACW;CAId,MAAM,SAAS,kBAAA,UAA6B,CAAC,eAAe;EAC1D;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,sBAAA,QAAD;EAAwB;EAAU,GAAI,OAAO;EAAU,GAAI;EAAO,GAAA,eAAA,MAAiB,OAAO,MAAM,OAAO,UAAU,OAAO,KAAK;EAA7H,UAAA,CACF,UACA,OAAO,OACI;;AAClB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ButtonProps } from "@base-ui/react/button";
|
|
2
|
+
//#region src/components/button/index.d.ts
|
|
3
|
+
type ButtonProps$1 = ButtonProps & {
|
|
4
|
+
/**
|
|
5
|
+
* Disables the press ripple. The hover/pressed background state layer is
|
|
6
|
+
* unaffected.
|
|
7
|
+
* @default false
|
|
8
|
+
*/
|
|
9
|
+
disableRipple?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Control height: `xs` 32px, `md` 40px, `lg` 56px, `xl` 80px. Sizes other
|
|
12
|
+
* than `md` also set their own inline padding.
|
|
13
|
+
* @default 'md'
|
|
14
|
+
*/
|
|
15
|
+
size?: 'lg' | 'md' | 'xl' | 'xs';
|
|
16
|
+
/** @default 'filled' */
|
|
17
|
+
variant?: 'filled' | 'outlined' | 'text' | 'tonal';
|
|
18
|
+
};
|
|
19
|
+
declare function Button({ children, disabled, disableRipple, onClick, onContextMenu, onPointerCancel, onPointerDown, onPointerLeave, onPointerUp, size, variant, ...props }: ButtonProps$1): import("react").JSX.Element;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { type ButtonProps$1 as ButtonProps, Button as default };
|
|
22
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const require_stylex = require("../../node_modules/@stylexjs/stylex/lib/es/stylex.cjs");
|
|
2
|
+
const require_useRipple = require("../../hooks/useRipple.cjs");
|
|
3
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
//#region src/components/card/index.tsx
|
|
5
|
+
const styles = {
|
|
6
|
+
base: {
|
|
7
|
+
kaIpWk: "xhpdng0",
|
|
8
|
+
kMzoRj: "xc342km",
|
|
9
|
+
k1xSpc: "x1lliihq",
|
|
10
|
+
kVQacm: "xb3r6kr",
|
|
11
|
+
kVAEAm: "x1n2onr6",
|
|
12
|
+
$$css: true
|
|
13
|
+
},
|
|
14
|
+
elevated: {
|
|
15
|
+
kWkggS: "x1vnz5z6",
|
|
16
|
+
kGVxlE: "x19efjv6",
|
|
17
|
+
$$css: true
|
|
18
|
+
},
|
|
19
|
+
filled: {
|
|
20
|
+
kWkggS: "x1rrhr5q",
|
|
21
|
+
$$css: true
|
|
22
|
+
},
|
|
23
|
+
interactive: {
|
|
24
|
+
kkrTdU: "x1ypdohk",
|
|
25
|
+
kVVagm: "xln7xf2",
|
|
26
|
+
kzqmXN: "xh8yej3",
|
|
27
|
+
kjBf7l: "xrgy624",
|
|
28
|
+
kInvED: "x1hl8ikr",
|
|
29
|
+
k3XXqK: "x9v5kkp x1t137rt",
|
|
30
|
+
kMeerF: "x1de99jn",
|
|
31
|
+
k9WMMc: "x1yc453h",
|
|
32
|
+
$$css: true
|
|
33
|
+
},
|
|
34
|
+
outlined: {
|
|
35
|
+
kWkggS: "x14s9m32",
|
|
36
|
+
kVAM5u: "x133yhug",
|
|
37
|
+
ksu8eU: "x1y0btm7",
|
|
38
|
+
kMzoRj: "xmkeg23",
|
|
39
|
+
$$css: true
|
|
40
|
+
},
|
|
41
|
+
paddingDefault: {
|
|
42
|
+
kmVPX3: "xgc26li",
|
|
43
|
+
$$css: true
|
|
44
|
+
},
|
|
45
|
+
paddingNone: {
|
|
46
|
+
kmVPX3: "x1717udv",
|
|
47
|
+
$$css: true
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const interactionStyles = {
|
|
51
|
+
elevated: {
|
|
52
|
+
kWkggS: "xu5m21g x5r8g2b x1vnz5z6",
|
|
53
|
+
kGVxlE: "x1g60mc1 x1fzngjt x19efjv6",
|
|
54
|
+
$$css: true
|
|
55
|
+
},
|
|
56
|
+
filled: {
|
|
57
|
+
kWkggS: "x1w49kxs xovjh5a x1rrhr5q",
|
|
58
|
+
$$css: true
|
|
59
|
+
},
|
|
60
|
+
outlined: {
|
|
61
|
+
kWkggS: "x1jqfdmz x1dmgsxd x14s9m32",
|
|
62
|
+
$$css: true
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
function Card({ children, interactive = false, padding = "default", variant = "elevated", ...props$1 }) {
|
|
66
|
+
const ripple = require_useRipple.useRipple(interactive);
|
|
67
|
+
const padded = padding === "none" ? styles.paddingNone : styles.paddingDefault;
|
|
68
|
+
if (!interactive) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
69
|
+
...props$1,
|
|
70
|
+
...require_stylex.props(styles.base, styles[variant], padded),
|
|
71
|
+
children
|
|
72
|
+
});
|
|
73
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
74
|
+
type: "button",
|
|
75
|
+
...ripple.handlers,
|
|
76
|
+
...props$1,
|
|
77
|
+
...require_stylex.props(styles.base, styles[variant], padded, styles.interactive, interactionStyles[variant]),
|
|
78
|
+
children: [children, ripple.surface]
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//#endregion
|
|
82
|
+
exports.default = Card;
|
|
83
|
+
|
|
84
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/components/card/index.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { useRipple } from '../../hooks/useRipple';\nimport '../../tokens/design.tokens.stylex';\nimport { colors, radii, shadows, spacing, stateLayerOpacity } from '../../tokens/design.tokens.stylex';\n\n// The three variants differ only in how they separate themselves from the\n// page: a shadow, a darker fill, or a border. Each therefore sits on a\n// different background, which is why the interaction styles below are keyed\n// by variant too — a state layer composites an 'on-color' over whatever the\n// container already is, so it cannot be written once for all three.\n//\n// color-mix() is inlined at each property rather than factored into a helper:\n// @stylexjs/babel-plugin only statically recognizes expressions written\n// directly as property values. Button's header comment records the same\n// constraint, and the :not(:disabled) guard there applies here for the same\n// reason — stylex's fixed pseudo-class ordering puts :hover after :disabled.\nconst styles = {\n base: {\n kaIpWk: \"xhpdng0\",\n kMzoRj: \"xc342km\",\n k1xSpc: \"x1lliihq\",\n kVQacm: \"xb3r6kr\",\n kVAEAm: \"x1n2onr6\",\n $$css: true\n },\n elevated: {\n kWkggS: \"x1vnz5z6\",\n kGVxlE: \"x19efjv6\",\n $$css: true\n },\n filled: {\n kWkggS: \"x1rrhr5q\",\n $$css: true\n },\n interactive: {\n kkrTdU: \"x1ypdohk\",\n kVVagm: \"xln7xf2\",\n kzqmXN: \"xh8yej3\",\n kjBf7l: \"xrgy624\",\n kInvED: \"x1hl8ikr\",\n k3XXqK: \"x9v5kkp x1t137rt\",\n kMeerF: \"x1de99jn\",\n k9WMMc: \"x1yc453h\",\n $$css: true\n },\n outlined: {\n kWkggS: \"x14s9m32\",\n kVAM5u: \"x133yhug\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n $$css: true\n },\n paddingDefault: {\n kmVPX3: \"xgc26li\",\n $$css: true\n },\n paddingNone: {\n kmVPX3: \"x1717udv\",\n $$css: true\n }\n};\nconst interactionStyles = {\n elevated: {\n kWkggS: \"xu5m21g x5r8g2b x1vnz5z6\",\n kGVxlE: \"x1g60mc1 x1fzngjt x19efjv6\",\n $$css: true\n },\n filled: {\n kWkggS: \"x1w49kxs xovjh5a x1rrhr5q\",\n $$css: true\n },\n outlined: {\n kWkggS: \"x1jqfdmz x1dmgsxd x14s9m32\",\n $$css: true\n }\n};\n\n// Typed as the attributes a <div> and a <button> both accept, because\n// `interactive` decides which one renders. Anything element-specific — a\n// button's `type`, a div's ref type — would be wrong for one of the two, so\n// the shared surface is what the prop type can honestly promise.\ntype CardProps = {\n children?: ReactNode;\n /**\n * Renders a `<button>` that ripples and lifts on hover, for a card that is\n * itself the thing you press. Leave it off for a card that merely holds\n * content, including one containing its own buttons.\n * @default false\n */\n interactive?: boolean;\n /**\n * `none` removes the card's own padding, for a card whose children run to\n * its edges — a list of rows separated by rules.\n * @default 'default'\n */\n padding?: 'default' | 'none';\n /**\n * How the card separates itself from the page: `elevated` casts a shadow,\n * `filled` sits on a darker surface, `outlined` draws a border.\n * @default 'elevated'\n */\n variant?: CardVariant;\n} & HTMLAttributes<HTMLElement>;\ntype CardVariant = 'elevated' | 'filled' | 'outlined';\nfunction Card({\n children,\n interactive = false,\n padding = 'default',\n variant = 'elevated',\n ...props\n}: CardProps) {\n const ripple = useRipple<HTMLButtonElement>(interactive);\n const padded = padding === 'none' ? styles.paddingNone : styles.paddingDefault;\n if (!interactive) {\n return <div {...props} {...stylex.props(styles.base, styles[variant], padded)}>\n {children}\n </div>;\n }\n return <button type=\"button\" {...ripple.handlers} {...props} {...stylex.props(styles.base, styles[variant], padded, styles.interactive, interactionStyles[variant])}>\n {children}\n {ripple.surface}\n </button>;\n}\nexport type { CardProps };\nexport default Card;"],"mappings":";;;;AAiBA,MAAM,SAAS;CACb,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,OAAO;CACT;CACA,aAAa;EACX,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,gBAAgB;EACd,QAAQ;EACR,OAAO;CACT;CACA,aAAa;EACX,QAAQ;EACR,OAAO;CACT;AACF;AACA,MAAM,oBAAoB;CACxB,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,OAAO;CACT;AACF;AA6BA,SAAS,KAAK,EACZ,UACA,cAAc,OACd,UAAU,WACV,UAAU,YACV,GAAG,WACS;CACZ,MAAM,SAAS,kBAAA,UAA6B,WAAW;CACvD,MAAM,SAAS,YAAY,SAAS,OAAO,cAAc,OAAO;CAChE,IAAI,CAAC,aACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,GAAI;EAAO,GAAA,eAAA,MAAiB,OAAO,MAAM,OAAO,UAAU,MAAM;EACvE;CACE,CAAA;CAET,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;EAAQ,MAAK;EAAS,GAAI,OAAO;EAAU,GAAI;EAAO,GAAA,eAAA,MAAiB,OAAO,MAAM,OAAO,UAAU,QAAQ,OAAO,aAAa,kBAAkB,QAAQ;EAA3J,UAAA,CACF,UACA,OAAO,OACF;;AACZ"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
//#region src/components/card/index.d.ts
|
|
3
|
+
type CardProps = {
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
/**
|
|
6
|
+
* Renders a `<button>` that ripples and lifts on hover, for a card that is
|
|
7
|
+
* itself the thing you press. Leave it off for a card that merely holds
|
|
8
|
+
* content, including one containing its own buttons.
|
|
9
|
+
* @default false
|
|
10
|
+
*/
|
|
11
|
+
interactive?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* `none` removes the card's own padding, for a card whose children run to
|
|
14
|
+
* its edges — a list of rows separated by rules.
|
|
15
|
+
* @default 'default'
|
|
16
|
+
*/
|
|
17
|
+
padding?: 'default' | 'none';
|
|
18
|
+
/**
|
|
19
|
+
* How the card separates itself from the page: `elevated` casts a shadow,
|
|
20
|
+
* `filled` sits on a darker surface, `outlined` draws a border.
|
|
21
|
+
* @default 'elevated'
|
|
22
|
+
*/
|
|
23
|
+
variant?: CardVariant;
|
|
24
|
+
} & HTMLAttributes<HTMLElement>;
|
|
25
|
+
type CardVariant = 'elevated' | 'filled' | 'outlined';
|
|
26
|
+
declare function Card({ children, interactive, padding, variant, ...props }: CardProps): import("react").JSX.Element;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { type CardProps, Card as default };
|
|
29
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
2
|
+
let react_compiler_runtime = require("react/compiler-runtime");
|
|
3
|
+
let _base_ui_react_toggle = require("@base-ui/react/toggle");
|
|
4
|
+
//#region src/components/chip/index.tsx
|
|
5
|
+
/**
|
|
6
|
+
* A chip is a two-state button, so its selected state is Base UI's `pressed`:
|
|
7
|
+
* pass `pressed` with `onPressedChange` to control it, or `defaultPressed` to
|
|
8
|
+
* let it keep its own state. Selection is announced through `aria-pressed`
|
|
9
|
+
* rather than a role of its own.
|
|
10
|
+
*/
|
|
11
|
+
function Chip(t0) {
|
|
12
|
+
const $ = (0, react_compiler_runtime.c)(6);
|
|
13
|
+
let children;
|
|
14
|
+
let props;
|
|
15
|
+
if ($[0] !== t0) {
|
|
16
|
+
({children, ...props} = t0);
|
|
17
|
+
$[0] = t0;
|
|
18
|
+
$[1] = children;
|
|
19
|
+
$[2] = props;
|
|
20
|
+
} else {
|
|
21
|
+
children = $[1];
|
|
22
|
+
props = $[2];
|
|
23
|
+
}
|
|
24
|
+
let t1;
|
|
25
|
+
if ($[3] !== children || $[4] !== props) {
|
|
26
|
+
t1 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_toggle.Toggle, {
|
|
27
|
+
...props,
|
|
28
|
+
className: classNameForState,
|
|
29
|
+
style: styleForState,
|
|
30
|
+
children
|
|
31
|
+
});
|
|
32
|
+
$[3] = children;
|
|
33
|
+
$[4] = props;
|
|
34
|
+
$[5] = t1;
|
|
35
|
+
} else t1 = $[5];
|
|
36
|
+
return t1;
|
|
37
|
+
}
|
|
38
|
+
function classNameForState(state) {
|
|
39
|
+
return propsFor(state).className;
|
|
40
|
+
}
|
|
41
|
+
function propsFor(state) {
|
|
42
|
+
return {
|
|
43
|
+
0: { className: "x6s0dn4 x10w6t97 x1xdvaa9 x1y0btm7 xmkeg23 x1s07b3s x1ypdohk x3nfvp2 x2lah0s xkknnkr x14zspaw x1v9cpvo x126z3so x155f00i x1lz68p4 xrgy624 x1hl8ikr x9v5kkp x1t137rt x1de99jn xt970qd x18fpw6u x1qno0dh x1eaenvl xpc4ca7 x1a42vn9 x6gcojk xjbqb8w xd8uu4e x1fwvt7v xhfb3ry x1w5n3ug" },
|
|
44
|
+
1: { className: "x6s0dn4 x10w6t97 x1xdvaa9 x1y0btm7 xmkeg23 x1s07b3s x1ypdohk x3nfvp2 x2lah0s xkknnkr x14zspaw x1v9cpvo x126z3so x155f00i x1lz68p4 xrgy624 x1hl8ikr x9v5kkp x1t137rt x1de99jn xt970qd x18fpw6u x1qno0dh x1eaenvl xpc4ca7 xctpbsp x1n0xrd1 x1qndd53 x15dekr4 x9r1u3d xhfb3ry x1sawysd" }
|
|
45
|
+
}[!!state.pressed << 0];
|
|
46
|
+
}
|
|
47
|
+
function styleForState(state) {
|
|
48
|
+
return propsFor(state).style;
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
exports.default = Chip;
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["classNameForState","styleForState","children"],"sources":["../../../../src/components/chip/index.tsx"],"sourcesContent":["import type { ToggleProps as BaseUIToggleProps, ToggleState as BaseUIToggleState } from '@base-ui/react/toggle';\nimport { Toggle as BaseUIToggle } from '@base-ui/react/toggle';\nimport * as stylex from '@stylexjs/stylex';\nimport '../../tokens/design.tokens.stylex';\nimport { colors, motion, radii, spacing, stateLayerOpacity, typography } from '../../tokens/design.tokens.stylex';\n\n// Each state composites an 'on-color' over its own container at the\n// interaction state's opacity rather than swapping in a separate hover color.\n// calc(<opacity> * 100%) turns the token's unitless 0-1 ratio into the\n// percentage color-mix() takes, and it is inlined at each property because\n// @stylexjs/babel-plugin only statically recognizes expressions written\n// directly as property values.\n//\n// The selected chip drops its border rather than recolouring it: it has a\n// container of its own to define its edge, and a border on top of that reads\n// as a second, competing outline.\n\ntype ChipProps<Value extends string = string> = BaseUIToggleProps<Value>;\n\n/**\n * A chip is a two-state button, so its selected state is Base UI's `pressed`:\n * pass `pressed` with `onPressedChange` to control it, or `defaultPressed` to\n * let it keep its own state. Selection is announced through `aria-pressed`\n * rather than a role of its own.\n */\nfunction Chip<Value extends string = string>({\n children,\n ...props\n}: ChipProps<Value>) {\n return <BaseUIToggle {...props} className={classNameForState} style={styleForState}>\n {children}\n </BaseUIToggle>;\n}\nfunction classNameForState(state: BaseUIToggleState) {\n return propsFor(state).className;\n}\n\n// StyleX has no way to target [data-pressed] on the element it is styling, so\n// the selected styles cannot be chosen in CSS. Base UI's answer is to let\n// className and style be functions of the component's own state, which is\n// what these two are — and it is why an uncontrolled chip styles itself\n// correctly without this component keeping a copy of the state.\n//\n// Declared at module scope so each is one stable reference rather than a\n// fresh closure per render, which is what react-perf's no-new-function-as-prop\n// is after. They close over nothing, so there is nothing to capture.\nfunction propsFor(state: BaseUIToggleState) {\n return {\n 0: {\n className: \"x6s0dn4 x10w6t97 x1xdvaa9 x1y0btm7 xmkeg23 x1s07b3s x1ypdohk x3nfvp2 x2lah0s xkknnkr x14zspaw x1v9cpvo x126z3so x155f00i x1lz68p4 xrgy624 x1hl8ikr x9v5kkp x1t137rt x1de99jn xt970qd x18fpw6u x1qno0dh x1eaenvl xpc4ca7 x1a42vn9 x6gcojk xjbqb8w xd8uu4e x1fwvt7v xhfb3ry x1w5n3ug\"\n },\n 1: {\n className: \"x6s0dn4 x10w6t97 x1xdvaa9 x1y0btm7 xmkeg23 x1s07b3s x1ypdohk x3nfvp2 x2lah0s xkknnkr x14zspaw x1v9cpvo x126z3so x155f00i x1lz68p4 xrgy624 x1hl8ikr x9v5kkp x1t137rt x1de99jn xt970qd x18fpw6u x1qno0dh x1eaenvl xpc4ca7 xctpbsp x1n0xrd1 x1qndd53 x15dekr4 x9r1u3d xhfb3ry x1sawysd\"\n }\n }[!!state.pressed << 0];\n}\nfunction styleForState(state: BaseUIToggleState) {\n return propsFor(state).style;\n}\nexport type { ChipProps };\nexport default Chip;"],"mappings":";;;;;;;;;;AAyBA,SAAA,KAAA,IAAA;CAAA,MAAA,KAAA,GAAA,uBAAA,EAAA,CAAA,CAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,IAAA;EAA6C,CAAA,CAAA,aAAA,SAAA;EAG1B,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,WAAA,EAAA;EAAA,QAAA,EAAA;CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,YAAA,EAAA,OAAA,OAAA;EACV,KAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,QAAD;GAAa,GAAK;GAAkBA,WAAA;GAA0BC,OAAA;GAChE;EADe,CAAA;EAEH,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAFV;AAEU;AAEnB,SAAS,kBAAkB,OAA0B;CACnD,OAAO,SAAS,KAAK,CAAC,CAAC;AACzB;AAWA,SAAS,SAAS,OAA0B;CAC1C,OAAO;EACL,GAAG,EACD,WAAW,qRACb;EACA,GAAG,EACD,WAAW,sRACb;CACF,EAAE,CAAC,CAAC,MAAM,WAAW;AACvB;AACA,SAAS,cAAc,OAA0B;CAC/C,OAAO,SAAS,KAAK,CAAC,CAAC;AACzB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ToggleProps } from "@base-ui/react/toggle";
|
|
2
|
+
//#region src/components/chip/index.d.ts
|
|
3
|
+
type ChipProps<Value extends string = string> = ToggleProps<Value>;
|
|
4
|
+
/**
|
|
5
|
+
* A chip is a two-state button, so its selected state is Base UI's `pressed`:
|
|
6
|
+
* pass `pressed` with `onPressedChange` to control it, or `defaultPressed` to
|
|
7
|
+
* let it keep its own state. Selection is announced through `aria-pressed`
|
|
8
|
+
* rather than a role of its own.
|
|
9
|
+
*/
|
|
10
|
+
declare function Chip<Value extends string = string>({ children, ...props }: ChipProps<Value>): import("react").JSX.Element;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { type ChipProps, Chip as default };
|
|
13
|
+
//# sourceMappingURL=index.d.cts.map
|