@kanso-labs/kanso-ui 0.4.6 → 0.5.1
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/assets/stylex.css +50 -0
- package/dist/components/card/index.d.ts +19 -7
- package/dist/components/card/index.js +35 -14
- package/dist/components/card/index.js.map +1 -1
- package/dist/components/index.d.ts +3 -1
- package/dist/components/list-detail/index.d.ts +41 -0
- package/dist/components/list-detail/index.js +42 -0
- package/dist/components/list-detail/index.js.map +1 -0
- package/dist/components/supporting-pane/index.d.ts +29 -0
- package/dist/components/supporting-pane/index.js +94 -0
- package/dist/components/supporting-pane/index.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/package.json +9 -7
- package/dist/cjs/assets/stylex.css +0 -1655
- package/dist/cjs/components/avatar/index.cjs +0 -89
- package/dist/cjs/components/avatar/index.cjs.map +0 -1
- package/dist/cjs/components/avatar/index.d.cts +0 -29
- package/dist/cjs/components/badge/index.cjs +0 -93
- package/dist/cjs/components/badge/index.cjs.map +0 -1
- package/dist/cjs/components/badge/index.d.cts +0 -27
- package/dist/cjs/components/button/index.cjs +0 -101
- package/dist/cjs/components/button/index.cjs.map +0 -1
- package/dist/cjs/components/button/index.d.cts +0 -22
- package/dist/cjs/components/card/index.cjs +0 -84
- package/dist/cjs/components/card/index.cjs.map +0 -1
- package/dist/cjs/components/card/index.d.cts +0 -29
- package/dist/cjs/components/chip/index.cjs +0 -53
- package/dist/cjs/components/chip/index.cjs.map +0 -1
- package/dist/cjs/components/chip/index.d.cts +0 -13
- package/dist/cjs/components/code/index.cjs +0 -51
- package/dist/cjs/components/code/index.cjs.map +0 -1
- package/dist/cjs/components/code/index.d.cts +0 -11
- package/dist/cjs/components/copy-field/index.cjs +0 -59
- package/dist/cjs/components/copy-field/index.cjs.map +0 -1
- package/dist/cjs/components/copy-field/index.d.cts +0 -36
- package/dist/cjs/components/currency/index.cjs +0 -56
- package/dist/cjs/components/currency/index.cjs.map +0 -1
- package/dist/cjs/components/currency/index.d.cts +0 -36
- package/dist/cjs/components/icon-button/index.cjs +0 -80
- package/dist/cjs/components/icon-button/index.cjs.map +0 -1
- package/dist/cjs/components/icon-button/index.d.cts +0 -32
- package/dist/cjs/components/index.d.cts +0 -18
- package/dist/cjs/components/keycap/index.cjs +0 -52
- package/dist/cjs/components/keycap/index.cjs.map +0 -1
- package/dist/cjs/components/keycap/index.d.cts +0 -12
- package/dist/cjs/components/link/index.cjs +0 -61
- package/dist/cjs/components/link/index.cjs.map +0 -1
- package/dist/cjs/components/link/index.d.cts +0 -30
- package/dist/cjs/components/list-item/index.cjs +0 -42
- package/dist/cjs/components/list-item/index.cjs.map +0 -1
- package/dist/cjs/components/list-item/index.d.cts +0 -22
- package/dist/cjs/components/separator/index.cjs +0 -34
- package/dist/cjs/components/separator/index.cjs.map +0 -1
- package/dist/cjs/components/separator/index.d.cts +0 -14
- package/dist/cjs/components/sheet/index.cjs +0 -266
- package/dist/cjs/components/sheet/index.cjs.map +0 -1
- package/dist/cjs/components/sheet/index.d.cts +0 -73
- package/dist/cjs/components/tabs/index.cjs +0 -77
- package/dist/cjs/components/tabs/index.cjs.map +0 -1
- package/dist/cjs/components/tabs/index.d.cts +0 -24
- package/dist/cjs/components/text/index.cjs +0 -173
- package/dist/cjs/components/text/index.cjs.map +0 -1
- package/dist/cjs/components/text/index.d.cts +0 -19
- package/dist/cjs/components/text-field/index.cjs +0 -53
- package/dist/cjs/components/text-field/index.cjs.map +0 -1
- package/dist/cjs/components/text-field/index.d.cts +0 -30
- package/dist/cjs/hooks/useRipple.cjs +0 -391
- package/dist/cjs/hooks/useRipple.cjs.map +0 -1
- package/dist/cjs/index.cjs +0 -35
- package/dist/cjs/index.d.cts +0 -19
- package/dist/cjs/node_modules/@stylexjs/stylex/lib/es/stylex.cjs +0 -121
- package/dist/cjs/node_modules/@stylexjs/stylex/lib/es/stylex.cjs.map +0 -1
- package/dist/cjs/styles/ripple.cjs +0 -33
- package/dist/cjs/styles/ripple.cjs.map +0 -1
- package/dist/cjs/tokens/values.cjs +0 -36
- package/dist/cjs/tokens/values.cjs.map +0 -1
package/dist/assets/stylex.css
CHANGED
|
@@ -79,6 +79,10 @@
|
|
|
79
79
|
border-width: 1px;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
.xj2l1yv {
|
|
83
|
+
gap: var(--x196ey9q);
|
|
84
|
+
}
|
|
85
|
+
|
|
82
86
|
.x14qo01y {
|
|
83
87
|
gap: var(--x1ug6acx);
|
|
84
88
|
}
|
|
@@ -159,6 +163,10 @@
|
|
|
159
163
|
padding-inline: var(--xod9tvo);
|
|
160
164
|
}
|
|
161
165
|
|
|
166
|
+
.x1hl2dhg {
|
|
167
|
+
text-decoration: none;
|
|
168
|
+
}
|
|
169
|
+
|
|
162
170
|
.xtecew7:active:not(:disabled) {
|
|
163
171
|
border-radius: var(--x1m0y4ip);
|
|
164
172
|
}
|
|
@@ -385,6 +393,10 @@
|
|
|
385
393
|
display: flex;
|
|
386
394
|
}
|
|
387
395
|
|
|
396
|
+
.xrvj5dj {
|
|
397
|
+
display: grid;
|
|
398
|
+
}
|
|
399
|
+
|
|
388
400
|
.x1rg5ohu {
|
|
389
401
|
display: inline-block;
|
|
390
402
|
}
|
|
@@ -393,6 +405,10 @@
|
|
|
393
405
|
display: inline-flex;
|
|
394
406
|
}
|
|
395
407
|
|
|
408
|
+
.x1s85apg {
|
|
409
|
+
display: none;
|
|
410
|
+
}
|
|
411
|
+
|
|
396
412
|
.xdt5ytf {
|
|
397
413
|
flex-direction: column;
|
|
398
414
|
}
|
|
@@ -617,6 +633,10 @@
|
|
|
617
633
|
font-weight: var(--xwguucb);
|
|
618
634
|
}
|
|
619
635
|
|
|
636
|
+
.x1mkdm3x {
|
|
637
|
+
grid-template-columns: minmax(0, 1fr);
|
|
638
|
+
}
|
|
639
|
+
|
|
620
640
|
.xtijo5x {
|
|
621
641
|
inset-inline-end: 0;
|
|
622
642
|
}
|
|
@@ -1215,7 +1235,37 @@
|
|
|
1215
1235
|
.x9t1vth.x9t1vth {
|
|
1216
1236
|
border-start-start-radius: var(--x1w5u0jm);
|
|
1217
1237
|
}
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
@media (width >= 840px) {
|
|
1241
|
+
.x9a4l8x.x9a4l8x {
|
|
1242
|
+
display: block;
|
|
1243
|
+
}
|
|
1218
1244
|
|
|
1245
|
+
.xkgydl7.xkgydl7 {
|
|
1246
|
+
grid-template-columns: 360px minmax(0, 1fr);
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
@media (width >= 1600px) {
|
|
1251
|
+
.xxxc7o5.xxxc7o5 {
|
|
1252
|
+
grid-template-columns: 412px minmax(0, 1fr);
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
@media (width >= 600px) {
|
|
1257
|
+
.x1bg1yrb.x1bg1yrb {
|
|
1258
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
@media (width >= 840px) {
|
|
1263
|
+
.xj1h9sb.xj1h9sb {
|
|
1264
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
@media (width < 600px) {
|
|
1219
1269
|
.x1upgybz.x1upgybz {
|
|
1220
1270
|
inset-inline-start: 0;
|
|
1221
1271
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
2
|
//#region src/components/card/index.d.ts
|
|
3
3
|
type CardProps = {
|
|
4
|
-
children?: ReactNode;
|
|
5
4
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* content, including one containing its
|
|
5
|
+
* Makes the card the thing you press: it ripples, lifts on hover, and takes
|
|
6
|
+
* a focus ring. Renders a `<button>` unless `render` says otherwise. Leave
|
|
7
|
+
* it off for a card that merely holds content, including one containing its
|
|
8
|
+
* own buttons.
|
|
9
9
|
* @default false
|
|
10
10
|
*/
|
|
11
11
|
interactive?: boolean;
|
|
@@ -21,9 +21,21 @@ type CardProps = {
|
|
|
21
21
|
* @default 'elevated'
|
|
22
22
|
*/
|
|
23
23
|
variant?: CardVariant;
|
|
24
|
-
} &
|
|
24
|
+
} & useRender.ComponentProps<'div'>;
|
|
25
25
|
type CardVariant = 'elevated' | 'filled' | 'outlined';
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* A surface holding related content. `render` decides which element that
|
|
28
|
+
* surface is, so a card that navigates can be a real `<a href>` — announced
|
|
29
|
+
* as a link and opening in a new tab on a modifier click, which a `<button>`
|
|
30
|
+
* with an onClick does neither of.
|
|
31
|
+
*
|
|
32
|
+
* `interactive` and `render` are separate axes. `interactive` says the card
|
|
33
|
+
* is pressable and gives it the ripple, the hover lift, and a focus ring;
|
|
34
|
+
* `render` says what it is. A pressable card with no `render` is a
|
|
35
|
+
* `<button>`, which is the right default for one that acts rather than
|
|
36
|
+
* navigates.
|
|
37
|
+
*/
|
|
38
|
+
declare function Card({ children, interactive, onClick, onContextMenu, onPointerCancel, onPointerDown, onPointerLeave, onPointerUp, padding, render, variant, ...props }: CardProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
27
39
|
//#endregion
|
|
28
40
|
export { type CardProps, Card as default };
|
|
29
41
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { props } from "../../node_modules/@stylexjs/stylex/lib/es/stylex.js";
|
|
2
2
|
import { useRipple } from "../../hooks/useRipple.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Fragment, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
4
5
|
//#region src/components/card/index.tsx
|
|
5
6
|
const styles = {
|
|
6
7
|
base: {
|
|
7
8
|
kaIpWk: "xhpdng0",
|
|
8
9
|
kMzoRj: "xc342km",
|
|
10
|
+
kMwMTN: "x1heor9g",
|
|
9
11
|
k1xSpc: "x1lliihq",
|
|
10
12
|
kVQacm: "xb3r6kr",
|
|
11
13
|
kVAEAm: "x1n2onr6",
|
|
14
|
+
kybGjl: "x1hl2dhg",
|
|
12
15
|
$$css: true
|
|
13
16
|
},
|
|
14
17
|
elevated: {
|
|
@@ -62,20 +65,38 @@ const interactionStyles = {
|
|
|
62
65
|
$$css: true
|
|
63
66
|
}
|
|
64
67
|
};
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
/**
|
|
69
|
+
* A surface holding related content. `render` decides which element that
|
|
70
|
+
* surface is, so a card that navigates can be a real `<a href>` — announced
|
|
71
|
+
* as a link and opening in a new tab on a modifier click, which a `<button>`
|
|
72
|
+
* with an onClick does neither of.
|
|
73
|
+
*
|
|
74
|
+
* `interactive` and `render` are separate axes. `interactive` says the card
|
|
75
|
+
* is pressable and gives it the ripple, the hover lift, and a focus ring;
|
|
76
|
+
* `render` says what it is. A pressable card with no `render` is a
|
|
77
|
+
* `<button>`, which is the right default for one that acts rather than
|
|
78
|
+
* navigates.
|
|
79
|
+
*/
|
|
80
|
+
function Card({ children, interactive = false, onClick, onContextMenu, onPointerCancel, onPointerDown, onPointerLeave, onPointerUp, padding = "default", render, variant = "elevated", ...props$1 }) {
|
|
81
|
+
const ripple = useRipple(interactive, {
|
|
82
|
+
onClick,
|
|
83
|
+
onContextMenu,
|
|
84
|
+
onPointerCancel,
|
|
85
|
+
onPointerDown,
|
|
86
|
+
onPointerLeave,
|
|
87
|
+
onPointerUp
|
|
72
88
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
89
|
+
const padded = padding === "none" ? styles.paddingNone : styles.paddingDefault;
|
|
90
|
+
return useRender({
|
|
91
|
+
defaultTagName: interactive ? "button" : "div",
|
|
92
|
+
props: {
|
|
93
|
+
...props$1,
|
|
94
|
+
...interactive && render === void 0 ? { type: "button" } : void 0,
|
|
95
|
+
...ripple.handlers,
|
|
96
|
+
children: /* @__PURE__ */ jsxs(Fragment, { children: [children, ripple.surface] }),
|
|
97
|
+
...props(styles.base, styles[variant], padded, interactive && styles.interactive, interactive && interactionStyles[variant])
|
|
98
|
+
},
|
|
99
|
+
render
|
|
79
100
|
});
|
|
80
101
|
}
|
|
81
102
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/card/index.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/card/index.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render';\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 kMwMTN: \"x1heor9g\",\n k1xSpc: \"x1lliihq\",\n kVQacm: \"xb3r6kr\",\n kVAEAm: \"x1n2onr6\",\n kybGjl: \"x1hl2dhg\",\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> accepts, because that is the surface every\n// element this can render shares. Anything element-specific — a button's\n// `type`, an anchor's `href` — would be wrong for the others, and does not\n// need to be here anyway: those are written on the element handed to\n// `render`, where TypeScript checks them against that element's own props.\ntype CardProps = {\n /**\n * Makes the card the thing you press: it ripples, lifts on hover, and takes\n * a focus ring. Renders a `<button>` unless `render` says otherwise. Leave\n * it off for a card that merely holds content, including one containing its\n * 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} & useRender.ComponentProps<'div'>;\ntype CardVariant = 'elevated' | 'filled' | 'outlined';\n\n/**\n * A surface holding related content. `render` decides which element that\n * surface is, so a card that navigates can be a real `<a href>` — announced\n * as a link and opening in a new tab on a modifier click, which a `<button>`\n * with an onClick does neither of.\n *\n * `interactive` and `render` are separate axes. `interactive` says the card\n * is pressable and gives it the ripple, the hover lift, and a focus ring;\n * `render` says what it is. A pressable card with no `render` is a\n * `<button>`, which is the right default for one that acts rather than\n * navigates.\n */\nfunction Card({\n children,\n interactive = false,\n onClick,\n onContextMenu,\n onPointerCancel,\n onPointerDown,\n onPointerLeave,\n onPointerUp,\n padding = 'default',\n render,\n variant = 'elevated',\n ...props\n}: CardProps) {\n // The consumer's own pointer handlers are handed to useRipple to merge\n // rather than spread over its handlers afterwards, which is what Button\n // does and for the same reason: a plain spread means whichever object\n // comes last silently wins, so an onPointerDown on the call site would\n // replace the one driving the ripple and the card would stop rippling.\n const ripple = useRipple(interactive, {\n onClick,\n onContextMenu,\n onPointerCancel,\n onPointerDown,\n onPointerLeave,\n onPointerUp\n });\n const padded = padding === 'none' ? styles.paddingNone : styles.paddingDefault;\n return useRender({\n defaultTagName: interactive ? 'button' : 'div',\n props: {\n ...props,\n // Only when the default <button> is what renders. On an element the\n // call site chose, `type` is either meaningless or wrong — an <a>'s\n // `type` is a hint about the MIME type of what it links to — and that\n // element's own attributes are the call site's to write.\n ...(interactive && render === undefined ? {\n type: 'button'\n } : undefined),\n ...ripple.handlers,\n children: <>\n {children}\n {ripple.surface}\n </>,\n // Spread last so it wins over a consumer-supplied className rather than\n // being merged with one, matching Text and Badge. useRender joins the\n // two class strings otherwise, and which won would come down to\n // stylesheet order rather than anything visible at the call site.\n ...stylex.props(styles.base, styles[variant], padded, interactive && styles.interactive, interactive && interactionStyles[variant])\n },\n render\n });\n}\nexport type { CardProps };\nexport default Card;"],"mappings":";;;;;AAiBA,MAAM,SAAS;CACb,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,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;;;;;;;;;;;;;AA2CA,SAAS,KAAK,EACZ,UACA,cAAc,OACd,SACA,eACA,iBACA,eACA,gBACA,aACA,UAAU,WACV,QACA,UAAU,YACV,GAAG,WACS;CAMZ,MAAM,SAAS,UAAU,aAAa;EACpC;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,SAAS,YAAY,SAAS,OAAO,cAAc,OAAO;CAChE,OAAO,UAAU;EACf,gBAAgB,cAAc,WAAW;EACzC,OAAO;GACL,GAAG;GAKH,GAAI,eAAe,WAAW,KAAA,IAAY,EACxC,MAAM,SACR,IAAI,KAAA;GACJ,GAAG,OAAO;GACV,UAAU,qBAAA,UAAA,EAAA,UAAA,CACL,UACA,OAAO,OACV,EAAA,CAAA;GAKF,GAAG,MAAa,OAAO,MAAM,OAAO,UAAU,QAAQ,eAAe,OAAO,aAAa,eAAe,kBAAkB,QAAQ;EACpI;EACA;CACF,CAAC;AACH"}
|
|
@@ -9,10 +9,12 @@ import Currency, { CurrencyProps } from "./currency/index.js";
|
|
|
9
9
|
import IconButton, { IconButtonProps } from "./icon-button/index.js";
|
|
10
10
|
import Keycap, { KeycapProps } from "./keycap/index.js";
|
|
11
11
|
import Link, { LinkProps } from "./link/index.js";
|
|
12
|
+
import ListDetail, { ListDetailProps } from "./list-detail/index.js";
|
|
12
13
|
import ListItem, { ListItemProps } from "./list-item/index.js";
|
|
13
14
|
import Separator, { SeparatorProps } from "./separator/index.js";
|
|
14
15
|
import Sheet, { SheetProps } from "./sheet/index.js";
|
|
16
|
+
import SupportingPane, { SupportingPaneProps } from "./supporting-pane/index.js";
|
|
15
17
|
import Tabs, { TabsProps } from "./tabs/index.js";
|
|
16
18
|
import Text, { TextProps } from "./text/index.js";
|
|
17
19
|
import TextField, { TextFieldProps } from "./text-field/index.js";
|
|
18
|
-
export { Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Chip, type ChipProps, Code, type CodeProps, CopyField, type CopyFieldProps, Currency, type CurrencyProps, IconButton, type IconButtonProps, Keycap, type KeycapProps, Link, type LinkProps, ListItem, type ListItemProps, Separator, type SeparatorProps, Sheet, type SheetProps, Tabs, type TabsProps, Text, TextField, type TextFieldProps, type TextProps };
|
|
20
|
+
export { Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Chip, type ChipProps, Code, type CodeProps, CopyField, type CopyFieldProps, Currency, type CurrencyProps, IconButton, type IconButtonProps, Keycap, type KeycapProps, Link, type LinkProps, ListDetail, type ListDetailProps, ListItem, type ListItemProps, Separator, type SeparatorProps, Sheet, type SheetProps, SupportingPane, type SupportingPaneProps, Tabs, type TabsProps, Text, TextField, type TextFieldProps, type TextProps };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
//#region src/components/list-detail/index.d.ts
|
|
4
|
+
type ListDetailProps = {
|
|
5
|
+
/**
|
|
6
|
+
* The selected item's content. Stands on its own, and takes the flexible
|
|
7
|
+
* pane.
|
|
8
|
+
*/
|
|
9
|
+
detail?: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* The items to choose between. Takes the fixed pane — 360px wide, 412px at
|
|
12
|
+
* extra-large.
|
|
13
|
+
*/
|
|
14
|
+
list?: ReactNode;
|
|
15
|
+
/**
|
|
16
|
+
* Which pane to show while only one fits, below the expanded breakpoint.
|
|
17
|
+
* Both are shown from expanded up, where this is ignored.
|
|
18
|
+
*
|
|
19
|
+
* Controlled, with no uncontrolled fallback: the layout cannot know that an
|
|
20
|
+
* item was selected or that the reader went back, so holding that state
|
|
21
|
+
* here would only ever be wrong.
|
|
22
|
+
* @default 'list'
|
|
23
|
+
*/
|
|
24
|
+
showing?: 'detail' | 'list';
|
|
25
|
+
} & Omit<useRender.ComponentProps<'div'>, 'children'>;
|
|
26
|
+
/**
|
|
27
|
+
* Material 3's list-detail layout: a fixed list pane beside a flexible detail
|
|
28
|
+
* pane, collapsing to one pane at a time below the expanded breakpoint.
|
|
29
|
+
*
|
|
30
|
+
* Layout only — neither pane paints a surface of its own, so what goes inside
|
|
31
|
+
* them is composed at the call site. `render` swaps the container's element,
|
|
32
|
+
* for a layout that should be a `<main>` rather than a `<div>`.
|
|
33
|
+
*
|
|
34
|
+
* The panes are written to the DOM in the order they are shown, which is what
|
|
35
|
+
* M3 asks of co-planar panes: focus order has to match the arrangement on
|
|
36
|
+
* screen.
|
|
37
|
+
*/
|
|
38
|
+
declare function ListDetail({ detail, list, render, showing, ...props }: ListDetailProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { type ListDetailProps, ListDetail as default };
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
3
|
+
//#region src/components/list-detail/index.tsx
|
|
4
|
+
/**
|
|
5
|
+
* Material 3's list-detail layout: a fixed list pane beside a flexible detail
|
|
6
|
+
* pane, collapsing to one pane at a time below the expanded breakpoint.
|
|
7
|
+
*
|
|
8
|
+
* Layout only — neither pane paints a surface of its own, so what goes inside
|
|
9
|
+
* them is composed at the call site. `render` swaps the container's element,
|
|
10
|
+
* for a layout that should be a `<main>` rather than a `<div>`.
|
|
11
|
+
*
|
|
12
|
+
* The panes are written to the DOM in the order they are shown, which is what
|
|
13
|
+
* M3 asks of co-planar panes: focus order has to match the arrangement on
|
|
14
|
+
* screen.
|
|
15
|
+
*/
|
|
16
|
+
function ListDetail({ detail, list, render, showing = "list", ...props }) {
|
|
17
|
+
return useRender({
|
|
18
|
+
defaultTagName: "div",
|
|
19
|
+
props: {
|
|
20
|
+
...props,
|
|
21
|
+
children: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
22
|
+
...{
|
|
23
|
+
0: { className: "xeuugli" },
|
|
24
|
+
1: { className: "xeuugli x1s85apg x9a4l8x" }
|
|
25
|
+
}[!!(showing === "detail") << 0],
|
|
26
|
+
children: list
|
|
27
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
28
|
+
...{
|
|
29
|
+
0: { className: "xeuugli" },
|
|
30
|
+
1: { className: "xeuugli x1s85apg x9a4l8x" }
|
|
31
|
+
}[!!(showing === "list") << 0],
|
|
32
|
+
children: detail
|
|
33
|
+
})] }),
|
|
34
|
+
className: "xrvj5dj xj2l1yv x1mkdm3x xkgydl7 xxxc7o5"
|
|
35
|
+
},
|
|
36
|
+
render
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { ListDetail as default };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/list-detail/index.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { useRender } from '@base-ui/react/use-render';\nimport * as stylex from '@stylexjs/stylex';\nimport '../../tokens/design.tokens.stylex';\nimport { media, spacing } from '../../tokens/design.tokens.stylex';\n\n// Material 3's recommended snap widths for a fixed pane. The list is the\n// fixed one here — M3 points a fixed pane at \"lists with light information\n// density\" — and the detail pane is the flexible one that absorbs whatever is\n// left, which satisfies the spec's rule that every layout carry at least one\n// flexible pane.\nconst LIST_PANE = '360px';\nconst LIST_PANE_EXTRA_LARGE = '412px';\n\n// One of Material 3's canonical layouts, and the fixed-and-flexible shape of\n// its two-pane layouts. Unlike SupportingPane, the detail pane here stands on\n// its own: a message, a product, a file. That is what makes showing it\n// *instead of* the list a coherent thing to do when only one pane fits, and\n// why this layout has to be told which pane is showing while SupportingPane\n// does not.\n//\n// M3 puts the second pane on screen from expanded up. Below that the spec\n// shows one pane at a time, with selecting an item swapping to the detail and\n// back returning to the list — app navigation rather than layout, which is\n// why `showing` is controlled rather than held here.\n\ntype ListDetailProps = {\n /**\n * The selected item's content. Stands on its own, and takes the flexible\n * pane.\n */\n detail?: ReactNode;\n /**\n * The items to choose between. Takes the fixed pane — 360px wide, 412px at\n * extra-large.\n */\n list?: ReactNode;\n /**\n * Which pane to show while only one fits, below the expanded breakpoint.\n * Both are shown from expanded up, where this is ignored.\n *\n * Controlled, with no uncontrolled fallback: the layout cannot know that an\n * item was selected or that the reader went back, so holding that state\n * here would only ever be wrong.\n * @default 'list'\n */\n showing?: 'detail' | 'list';\n} & Omit<useRender.ComponentProps<'div'>, 'children'>;\n\n/**\n * Material 3's list-detail layout: a fixed list pane beside a flexible detail\n * pane, collapsing to one pane at a time below the expanded breakpoint.\n *\n * Layout only — neither pane paints a surface of its own, so what goes inside\n * them is composed at the call site. `render` swaps the container's element,\n * for a layout that should be a `<main>` rather than a `<div>`.\n *\n * The panes are written to the DOM in the order they are shown, which is what\n * M3 asks of co-planar panes: focus order has to match the arrangement on\n * screen.\n */\nfunction ListDetail({\n detail,\n list,\n render,\n showing = 'list',\n ...props\n}: ListDetailProps) {\n return useRender({\n defaultTagName: 'div',\n props: {\n ...props,\n children: <>\n <div {...{\n 0: {\n className: \"xeuugli\"\n },\n 1: {\n className: \"xeuugli x1s85apg x9a4l8x\"\n }\n }[!!(showing === 'detail') << 0]}>\n {list}\n </div>\n <div {...{\n 0: {\n className: \"xeuugli\"\n },\n 1: {\n className: \"xeuugli x1s85apg x9a4l8x\"\n }\n }[!!(showing === 'list') << 0]}>\n {detail}\n </div>\n </>,\n ...{\n className: \"xrvj5dj xj2l1yv x1mkdm3x xkgydl7 xxxc7o5\"\n }\n },\n render\n });\n}\nexport type { ListDetailProps };\nexport default ListDetail;"],"mappings":";;;;;;;;;;;;;;;AA6DA,SAAS,WAAW,EAClB,QACA,MACA,QACA,UAAU,QACV,GAAG,SACe;CAClB,OAAO,UAAU;EACf,gBAAgB;EAChB,OAAO;GACL,GAAG;GACH,UAAU,qBAAA,UAAA,EAAA,UAAA,CACN,oBAAC,OAAD;IAAK,GAAI;KACT,GAAG,EACD,WAAW,UACb;KACA,GAAG,EACD,WAAW,2BACb;IACF,EAAE,CAAC,EAAE,YAAY,aAAa;IACzB,UAAA;GACE,CAAA,GACL,oBAAC,OAAD;IAAK,GAAI;KACT,GAAG,EACD,WAAW,UACb;KACA,GAAG,EACD,WAAW,2BACb;IACF,EAAE,CAAC,EAAE,YAAY,WAAW;IACvB,UAAA;GACE,CAAA,CACP,EAAA,CAAA;GAEA,WAAW;EAEf;EACA;CACF,CAAC;AACH"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
//#region src/components/supporting-pane/index.d.ts
|
|
4
|
+
type SupportingPaneProps = Omit<useRender.ComponentProps<'div'>, 'children'> & {
|
|
5
|
+
/** The primary content. Takes two thirds of the width from expanded up. */
|
|
6
|
+
main?: ReactNode;
|
|
7
|
+
/**
|
|
8
|
+
* Content that only means something beside `main`. Sits below it at compact,
|
|
9
|
+
* and beside it from medium up.
|
|
10
|
+
*/
|
|
11
|
+
supporting?: ReactNode;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Material 3's supporting pane layout: a main pane and a companion that
|
|
15
|
+
* reflows underneath it when there is no room beside it.
|
|
16
|
+
*
|
|
17
|
+
* Layout only — neither pane paints a surface or a border of its own, so what
|
|
18
|
+
* goes in them is composed at the call site out of Cards, lists, or plain
|
|
19
|
+
* content. `render` swaps the container's element, for a layout that should
|
|
20
|
+
* be a `<main>` rather than a `<div>`.
|
|
21
|
+
*
|
|
22
|
+
* The panes are written to the DOM in the order they are shown, which is what
|
|
23
|
+
* M3 asks of co-planar panes: focus order has to match the arrangement on
|
|
24
|
+
* screen.
|
|
25
|
+
*/
|
|
26
|
+
declare function SupportingPane({ main, render, supporting, ...props }: SupportingPaneProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { type SupportingPaneProps, SupportingPane as default };
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
3
|
+
import { c } from "react/compiler-runtime";
|
|
4
|
+
//#region src/components/supporting-pane/index.tsx
|
|
5
|
+
/**
|
|
6
|
+
* Material 3's supporting pane layout: a main pane and a companion that
|
|
7
|
+
* reflows underneath it when there is no room beside it.
|
|
8
|
+
*
|
|
9
|
+
* Layout only — neither pane paints a surface or a border of its own, so what
|
|
10
|
+
* goes in them is composed at the call site out of Cards, lists, or plain
|
|
11
|
+
* content. `render` swaps the container's element, for a layout that should
|
|
12
|
+
* be a `<main>` rather than a `<div>`.
|
|
13
|
+
*
|
|
14
|
+
* The panes are written to the DOM in the order they are shown, which is what
|
|
15
|
+
* M3 asks of co-planar panes: focus order has to match the arrangement on
|
|
16
|
+
* screen.
|
|
17
|
+
*/
|
|
18
|
+
function SupportingPane(t0) {
|
|
19
|
+
const $ = c(19);
|
|
20
|
+
let main;
|
|
21
|
+
let props;
|
|
22
|
+
let render;
|
|
23
|
+
let supporting;
|
|
24
|
+
if ($[0] !== t0) {
|
|
25
|
+
({main, render, supporting, ...props} = t0);
|
|
26
|
+
$[0] = t0;
|
|
27
|
+
$[1] = main;
|
|
28
|
+
$[2] = props;
|
|
29
|
+
$[3] = render;
|
|
30
|
+
$[4] = supporting;
|
|
31
|
+
} else {
|
|
32
|
+
main = $[1];
|
|
33
|
+
props = $[2];
|
|
34
|
+
render = $[3];
|
|
35
|
+
supporting = $[4];
|
|
36
|
+
}
|
|
37
|
+
let t1;
|
|
38
|
+
if ($[5] !== main) {
|
|
39
|
+
t1 = /* @__PURE__ */ jsx("div", {
|
|
40
|
+
className: "xeuugli",
|
|
41
|
+
children: main
|
|
42
|
+
});
|
|
43
|
+
$[5] = main;
|
|
44
|
+
$[6] = t1;
|
|
45
|
+
} else t1 = $[6];
|
|
46
|
+
let t2;
|
|
47
|
+
if ($[7] !== supporting) {
|
|
48
|
+
t2 = /* @__PURE__ */ jsx("div", {
|
|
49
|
+
className: "xeuugli",
|
|
50
|
+
children: supporting
|
|
51
|
+
});
|
|
52
|
+
$[7] = supporting;
|
|
53
|
+
$[8] = t2;
|
|
54
|
+
} else t2 = $[8];
|
|
55
|
+
let t3;
|
|
56
|
+
if ($[9] !== t1 || $[10] !== t2) {
|
|
57
|
+
t3 = /* @__PURE__ */ jsxs(Fragment, { children: [t1, t2] });
|
|
58
|
+
$[9] = t1;
|
|
59
|
+
$[10] = t2;
|
|
60
|
+
$[11] = t3;
|
|
61
|
+
} else t3 = $[11];
|
|
62
|
+
let t4;
|
|
63
|
+
if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
|
|
64
|
+
t4 = { className: "xrvj5dj xj2l1yv x1mkdm3x xj1h9sb x1bg1yrb" };
|
|
65
|
+
$[12] = t4;
|
|
66
|
+
} else t4 = $[12];
|
|
67
|
+
let t5;
|
|
68
|
+
if ($[13] !== props || $[14] !== t3) {
|
|
69
|
+
t5 = {
|
|
70
|
+
...props,
|
|
71
|
+
children: t3,
|
|
72
|
+
...t4
|
|
73
|
+
};
|
|
74
|
+
$[13] = props;
|
|
75
|
+
$[14] = t3;
|
|
76
|
+
$[15] = t5;
|
|
77
|
+
} else t5 = $[15];
|
|
78
|
+
let t6;
|
|
79
|
+
if ($[16] !== render || $[17] !== t5) {
|
|
80
|
+
t6 = {
|
|
81
|
+
defaultTagName: "div",
|
|
82
|
+
props: t5,
|
|
83
|
+
render
|
|
84
|
+
};
|
|
85
|
+
$[16] = render;
|
|
86
|
+
$[17] = t5;
|
|
87
|
+
$[18] = t6;
|
|
88
|
+
} else t6 = $[18];
|
|
89
|
+
return useRender(t6);
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
export { SupportingPane as default };
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["main","supporting"],"sources":["../../../src/components/supporting-pane/index.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { useRender } from '@base-ui/react/use-render';\nimport * as stylex from '@stylexjs/stylex';\nimport '../../tokens/design.tokens.stylex';\nimport { media, spacing } from '../../tokens/design.tokens.stylex';\n\n// One of Material 3's canonical layouts. The supporting pane holds content\n// that only means anything next to the main pane — reviewer comments, related\n// items, a tool panel — which is what separates it from list-detail, where\n// the second pane stands on its own.\n//\n// M3 gives this layout three shapes across the breakpoints, and all three are\n// reachable in CSS because none of them depends on what the reader selected:\n// stacked at compact, an even split at medium, two thirds to one third from\n// expanded up. Stacking is M3's \"reflow\" strategy, where the supporting pane\n// moves under the main one rather than being dismissed. The spec's other\n// compact option is a bottom sheet, which is a different component's job —\n// reach for Sheet at the call site when the supporting content should be\n// summoned rather than scrolled to.\n//\n\ntype SupportingPaneProps = Omit<useRender.ComponentProps<'div'>, 'children'> & {\n /** The primary content. Takes two thirds of the width from expanded up. */\n main?: ReactNode;\n /**\n * Content that only means something beside `main`. Sits below it at compact,\n * and beside it from medium up.\n */\n supporting?: ReactNode;\n};\n\n/**\n * Material 3's supporting pane layout: a main pane and a companion that\n * reflows underneath it when there is no room beside it.\n *\n * Layout only — neither pane paints a surface or a border of its own, so what\n * goes in them is composed at the call site out of Cards, lists, or plain\n * content. `render` swaps the container's element, for a layout that should\n * be a `<main>` rather than a `<div>`.\n *\n * The panes are written to the DOM in the order they are shown, which is what\n * M3 asks of co-planar panes: focus order has to match the arrangement on\n * screen.\n */\nfunction SupportingPane({\n main,\n render,\n supporting,\n ...props\n}: SupportingPaneProps) {\n return useRender({\n defaultTagName: 'div',\n props: {\n ...props,\n children: <>\n <div className=\"xeuugli\">{main}</div>\n <div className=\"xeuugli\">{supporting}</div>\n </>,\n ...{\n className: \"xrvj5dj xj2l1yv x1mkdm3x xj1h9sb x1bg1yrb\"\n }\n },\n render\n });\n}\nexport type { SupportingPaneProps };\nexport default SupportingPane;"],"mappings":";;;;;;;;;;;;;;;;;AA4CA,SAAA,eAAA,IAAA;CAAA,MAAA,IAAA,EAAA,EAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,IAAA;EAAwB,CAAA,CAAA,MAAA,QAAA,eAAA,SAAA;EAKF,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,OAAA,EAAA;EAAA,QAAA,EAAA;EAAA,SAAA,EAAA;EAAA,aAAA,EAAA;CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA;EAMZ,KAAA,oBAAA,OAAA;GAAe,WAAA;GAAW,UAAA;EAAW,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,YAAA;EACrC,KAAA,oBAAA,OAAA;GAAe,WAAA;GAAW,UAAA;EAAiB,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,QAAA,IAAA;EAFrC,KAAA,qBAAA,UAAA,EAAA,UAAA,CACN,IACA,EAA2C,EAAA,CAAA;EAC1C,EAAA,KAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,OAAA,IAAA,2BAAA,GAAA;EACF,KAAA,EAAA,WACU,4CACb;EAAC,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,SAAA,EAAA,QAAA,IAAA;EARI,KAAA;GAAA,GACF;GAAK,UACE;GAGL,GACF;EAGL;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,UAAA,EAAA,QAAA,IAAA;EAXc,KAAA;GAAA,gBACC;GAAK,OACd;GASN;EAEH;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAbM,UAAU,EAahB;AAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,11 +9,13 @@ import Currency, { CurrencyProps } from "./components/currency/index.js";
|
|
|
9
9
|
import IconButton, { IconButtonProps } from "./components/icon-button/index.js";
|
|
10
10
|
import Keycap, { KeycapProps } from "./components/keycap/index.js";
|
|
11
11
|
import Link, { LinkProps } from "./components/link/index.js";
|
|
12
|
+
import ListDetail, { ListDetailProps } from "./components/list-detail/index.js";
|
|
12
13
|
import ListItem, { ListItemProps } from "./components/list-item/index.js";
|
|
13
14
|
import Separator, { SeparatorProps } from "./components/separator/index.js";
|
|
14
15
|
import Sheet, { SheetProps } from "./components/sheet/index.js";
|
|
16
|
+
import SupportingPane, { SupportingPaneProps } from "./components/supporting-pane/index.js";
|
|
15
17
|
import Tabs, { TabsProps } from "./components/tabs/index.js";
|
|
16
18
|
import Text, { TextProps } from "./components/text/index.js";
|
|
17
19
|
import TextField, { TextFieldProps } from "./components/text-field/index.js";
|
|
18
20
|
import "./components/index.js";
|
|
19
|
-
export { Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Chip, type ChipProps, Code, type CodeProps, CopyField, type CopyFieldProps, Currency, type CurrencyProps, IconButton, type IconButtonProps, Keycap, type KeycapProps, Link, type LinkProps, ListItem, type ListItemProps, Separator, type SeparatorProps, Sheet, type SheetProps, Tabs, type TabsProps, Text, TextField, type TextFieldProps, type TextProps };
|
|
21
|
+
export { Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Chip, type ChipProps, Code, type CodeProps, CopyField, type CopyFieldProps, Currency, type CurrencyProps, IconButton, type IconButtonProps, Keycap, type KeycapProps, Link, type LinkProps, ListDetail, type ListDetailProps, ListItem, type ListItemProps, Separator, type SeparatorProps, Sheet, type SheetProps, SupportingPane, type SupportingPaneProps, Tabs, type TabsProps, Text, TextField, type TextFieldProps, type TextProps };
|
package/dist/index.js
CHANGED
|
@@ -9,10 +9,12 @@ import Currency from "./components/currency/index.js";
|
|
|
9
9
|
import IconButton from "./components/icon-button/index.js";
|
|
10
10
|
import Keycap from "./components/keycap/index.js";
|
|
11
11
|
import Link from "./components/link/index.js";
|
|
12
|
+
import ListDetail from "./components/list-detail/index.js";
|
|
12
13
|
import ListItem from "./components/list-item/index.js";
|
|
13
14
|
import Separator from "./components/separator/index.js";
|
|
14
15
|
import Sheet from "./components/sheet/index.js";
|
|
16
|
+
import SupportingPane from "./components/supporting-pane/index.js";
|
|
15
17
|
import Tabs from "./components/tabs/index.js";
|
|
16
18
|
import Text from "./components/text/index.js";
|
|
17
19
|
import TextField from "./components/text-field/index.js";
|
|
18
|
-
export { Avatar, Badge, Button, Card, Chip, Code, CopyField, Currency, IconButton, Keycap, Link, ListItem, Separator, Sheet, Tabs, Text, TextField };
|
|
20
|
+
export { Avatar, Badge, Button, Card, Chip, Code, CopyField, Currency, IconButton, Keycap, Link, ListDetail, ListItem, Separator, Sheet, SupportingPane, Tabs, Text, TextField };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kanso-labs/kanso-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "A React component library built on Base UI primitives and styled with StyleX, with design tokens sourced from a single W3C DTCG file and compiled via Style Dictionary",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -20,14 +20,16 @@
|
|
|
20
20
|
"access": "public"
|
|
21
21
|
},
|
|
22
22
|
"type": "module",
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
25
|
+
},
|
|
23
26
|
"module": "./dist/index.js",
|
|
24
|
-
"main": "./dist/
|
|
27
|
+
"main": "./dist/index.js",
|
|
25
28
|
"types": "./dist/index.d.ts",
|
|
26
29
|
"exports": {
|
|
27
30
|
".": {
|
|
28
31
|
"types": "./dist/index.d.ts",
|
|
29
|
-
"
|
|
30
|
-
"require": "./dist/cjs/index.cjs"
|
|
32
|
+
"default": "./dist/index.js"
|
|
31
33
|
},
|
|
32
34
|
"./tokens.css": "./dist/tokens.css",
|
|
33
35
|
"./package.json": "./package.json"
|
|
@@ -63,7 +65,7 @@
|
|
|
63
65
|
"@commitlint/cli": "21.2.2",
|
|
64
66
|
"@commitlint/config-conventional": "21.2.2",
|
|
65
67
|
"@eslint/js": "10.0.1",
|
|
66
|
-
"@kanso-labs/unplugin-style-dictionary": "0.
|
|
68
|
+
"@kanso-labs/unplugin-style-dictionary": "0.4.0",
|
|
67
69
|
"@rolldown/plugin-babel": "0.2.3",
|
|
68
70
|
"@storybook/addon-a11y": "10.5.10",
|
|
69
71
|
"@storybook/addon-docs": "10.5.10",
|
|
@@ -79,7 +81,7 @@
|
|
|
79
81
|
"@vitest/coverage-v8": "4.1.11",
|
|
80
82
|
"babel-plugin-react-compiler": "1.0.0",
|
|
81
83
|
"eslint": "10.9.0",
|
|
82
|
-
"eslint-plugin-oxlint": "1.
|
|
84
|
+
"eslint-plugin-oxlint": "1.79.0",
|
|
83
85
|
"eslint-plugin-perfectionist": "5.10.1",
|
|
84
86
|
"eslint-plugin-react-hooks": "7.1.1",
|
|
85
87
|
"eslint-plugin-react-refresh": "0.5.4",
|
|
@@ -89,7 +91,7 @@
|
|
|
89
91
|
"lint-staged": "17.3.0",
|
|
90
92
|
"oxc-transform-react": "0.145.0",
|
|
91
93
|
"oxfmt": "0.64.0",
|
|
92
|
-
"oxlint": "1.
|
|
94
|
+
"oxlint": "1.79.0",
|
|
93
95
|
"oxlint-tsgolint": "7.0.2001",
|
|
94
96
|
"playwright": "1.62.1",
|
|
95
97
|
"react": "19.2.8",
|