@conductor-by-89soone/react 0.0.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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Conductor Design System contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # @conductor-by-89soone/react
2
+
3
+ Accessible React primitives for the Conductor Design System. Interaction behavior is built on Radix UI and visual styling comes from `@conductor-by-89soone/css`.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pnpm add @conductor-by-89soone/react @conductor-by-89soone/css lucide-react
9
+ ```
10
+
11
+ React and React DOM 18 or 19 are peer dependencies.
12
+
13
+ ## Use
14
+
15
+ Import the stylesheet once, then import components from the package root:
16
+
17
+ ```tsx
18
+ import "@conductor-by-89soone/css";
19
+ import { Button, Card } from "@conductor-by-89soone/react";
20
+
21
+ export function Example() {
22
+ return (
23
+ <Card>
24
+ <Button variant="primary">Continue</Button>
25
+ </Card>
26
+ );
27
+ }
28
+ ```
29
+
30
+ Set `data-cdt-theme="dark"` or `data-cdt-theme="light"` on the document root. Development builds warn once when the Conductor stylesheet is missing.
31
+
32
+ ## Requirements
33
+
34
+ Node.js 20 or newer, React 18 or 19, React DOM 18 or 19, and `lucide-react`.
35
+
36
+ ## License
37
+
38
+ MIT
@@ -0,0 +1,24 @@
1
+ import * as react from 'react';
2
+ import { ButtonHTMLAttributes, ReactNode } from 'react';
3
+ import { Size } from './types.js';
4
+
5
+ type ButtonVariant = "primary" | "secondary" | "ghost";
6
+ type ButtonTone = "neutral" | "accent" | "danger";
7
+ interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> {
8
+ readonly variant?: ButtonVariant;
9
+ readonly tone?: ButtonTone;
10
+ readonly size?: Size;
11
+ readonly loading?: boolean;
12
+ readonly blockedReason?: string;
13
+ readonly iconStart?: ReactNode;
14
+ readonly iconEnd?: ReactNode;
15
+ readonly children: ReactNode;
16
+ }
17
+ declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
18
+ interface IconButtonProps extends Omit<ButtonProps, "children" | "aria-label" | "iconEnd" | "iconStart"> {
19
+ readonly "aria-label": string;
20
+ readonly icon: ReactNode;
21
+ }
22
+ declare const IconButton: react.ForwardRefExoticComponent<IconButtonProps & react.RefAttributes<HTMLButtonElement>>;
23
+
24
+ export { Button, type ButtonProps, IconButton, type IconButtonProps };
package/dist/action.js ADDED
@@ -0,0 +1,2 @@
1
+ export { Button, IconButton } from './chunk-EA2W7T64.js';
2
+ import './chunk-WEIMKRZV.js';
@@ -0,0 +1,49 @@
1
+ import { cx } from './chunk-WEIMKRZV.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ function buttonClasses({ variant = "secondary", tone = "neutral", size = "md", blockedReason, className }) {
6
+ return cx(
7
+ "cdt-btn",
8
+ `cdt-btn--${variant}`,
9
+ `cdt-btn--tone-${tone}`,
10
+ size === "sm" && "cdt-btn--sm",
11
+ blockedReason !== void 0 && "cdt-btn--blocked",
12
+ className
13
+ );
14
+ }
15
+ var Button = forwardRef(function Button2({ blockedReason, className, disabled, iconEnd, iconStart, loading = false, onClick, title, variant, tone, size, children, ...props }, ref) {
16
+ const isBlocked = blockedReason !== void 0;
17
+ const isDisabled = disabled || isBlocked;
18
+ return /* @__PURE__ */ jsxs(
19
+ "button",
20
+ {
21
+ ...props,
22
+ ref,
23
+ className: buttonClasses({ variant, tone, size, blockedReason, className}),
24
+ disabled: isDisabled,
25
+ "aria-busy": loading || void 0,
26
+ title: isBlocked ? blockedReason : title,
27
+ onClick: (event) => {
28
+ if (loading) {
29
+ event.preventDefault();
30
+ event.stopPropagation();
31
+ return;
32
+ }
33
+ onClick?.(event);
34
+ },
35
+ children: [
36
+ iconStart === void 0 ? null : /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: iconStart }),
37
+ children,
38
+ iconEnd === void 0 ? null : /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: iconEnd })
39
+ ]
40
+ }
41
+ );
42
+ });
43
+ Button.displayName = "Button";
44
+ var IconButton = forwardRef(function IconButton2({ icon, size, ...props }, ref) {
45
+ return /* @__PURE__ */ jsx(Button, { ...props, ref, size, className: cx("cdt-btn--icon", size === "sm" && "cdt-btn--icon-sm", props.className), children: /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: icon }) });
46
+ });
47
+ IconButton.displayName = "IconButton";
48
+
49
+ export { Button, IconButton };
@@ -0,0 +1,97 @@
1
+ import { cx } from './chunk-WEIMKRZV.js';
2
+ import * as RadixCheckbox from '@radix-ui/react-checkbox';
3
+ import * as RadixSelect from '@radix-ui/react-select';
4
+ import * as RadixSwitch from '@radix-ui/react-switch';
5
+ import { createContext, forwardRef, useId, cloneElement, useContext, useEffect } from 'react';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ var FieldContext = createContext(null);
9
+ function joinDescribedBy(...ids) {
10
+ const result = ids.filter((id) => id !== void 0).join(" ");
11
+ return result === "" ? void 0 : result;
12
+ }
13
+ function useFieldControl(invalid, describedBy) {
14
+ const field = useContext(FieldContext);
15
+ return {
16
+ id: field?.id ?? "",
17
+ descriptionId: field?.descriptionId,
18
+ errorId: field?.errorId,
19
+ invalid: invalid ?? field?.invalid ?? false,
20
+ required: field?.required ?? false,
21
+ describedBy: joinDescribedBy(describedBy, field?.descriptionId, field?.errorId)
22
+ };
23
+ }
24
+ var Field = forwardRef(function Field2({ children, className, description, error, id: providedId, label, required = false, ...props }, ref) {
25
+ const generatedId = useId();
26
+ const id = providedId ?? generatedId;
27
+ const descriptionId = description === void 0 ? void 0 : `${id}-description`;
28
+ const errorId = error === void 0 ? void 0 : `${id}-error`;
29
+ const invalid = error !== void 0;
30
+ return /* @__PURE__ */ jsx(FieldContext.Provider, { value: { id, descriptionId, errorId, invalid, required }, children: /* @__PURE__ */ jsxs("div", { ...props, ref, className: cx("cdt-field", className), children: [
31
+ /* @__PURE__ */ jsxs("label", { className: "cdt-field__label", htmlFor: id, children: [
32
+ label,
33
+ required ? /* @__PURE__ */ jsx("span", { className: "cdt-field__required", "aria-hidden": "true", children: "*" }) : null
34
+ ] }),
35
+ description === void 0 ? null : /* @__PURE__ */ jsx("div", { id: descriptionId, className: "cdt-field__description", children: description }),
36
+ required ? cloneElement(children, { required }) : children,
37
+ error === void 0 ? null : /* @__PURE__ */ jsx("div", { id: errorId, className: "cdt-field__error", children: error })
38
+ ] }) });
39
+ });
40
+ Field.displayName = "Field";
41
+ function useMissingLabelWarning(name, hasField, ariaLabel, ariaLabelledBy) {
42
+ useEffect(() => {
43
+ if (process.env.NODE_ENV !== "production" && !hasField && ariaLabel === void 0 && ariaLabelledBy === void 0) {
44
+ console.warn(`[conductor] ${name} requires Field, aria-label, or aria-labelledby.`);
45
+ }
46
+ }, [ariaLabel, ariaLabelledBy, hasField, name]);
47
+ }
48
+ var TextField = forwardRef(function TextField2({ "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, className, iconStart, id: ownId, invalid, required, size = "md", variant = "solid", ...props }, ref) {
49
+ const field = useContext(FieldContext);
50
+ const control = useFieldControl(invalid, ariaDescribedBy);
51
+ useMissingLabelWarning("TextField", field !== null, ariaLabel, ariaLabelledBy);
52
+ const input = /* @__PURE__ */ jsx("input", { ...props, ref, id: ownId ?? (field === null ? void 0 : control.id), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": control.describedBy, "aria-invalid": ariaInvalid ?? (control.invalid || void 0), required: required ?? control.required, className: cx("cdt-input", variant === "glass" && "cdt-input--glass", size === "sm" && "cdt-input--sm", control.invalid && "cdt-input--invalid", iconStart !== void 0 && "cdt-input--icon-start", className) });
53
+ return iconStart === void 0 ? input : /* @__PURE__ */ jsxs("span", { className: "cdt-input-wrap", children: [
54
+ /* @__PURE__ */ jsx("span", { className: "cdt-input__icon", "aria-hidden": "true", children: iconStart }),
55
+ input
56
+ ] });
57
+ });
58
+ TextField.displayName = "TextField";
59
+ var TextArea = forwardRef(function TextArea2({ "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, className, id: ownId, invalid, required, rows = 3, variant = "solid", ...props }, ref) {
60
+ const field = useContext(FieldContext);
61
+ const control = useFieldControl(invalid, ariaDescribedBy);
62
+ useMissingLabelWarning("TextArea", field !== null, ariaLabel, ariaLabelledBy);
63
+ return /* @__PURE__ */ jsx("textarea", { ...props, ref, id: ownId ?? (field === null ? void 0 : control.id), rows, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": control.describedBy, "aria-invalid": ariaInvalid ?? (control.invalid || void 0), required: required ?? control.required, className: cx("cdt-textarea", variant === "glass" && "cdt-textarea--glass", control.invalid && "cdt-textarea--invalid", className) });
64
+ });
65
+ TextArea.displayName = "TextArea";
66
+ var SelectTrigger = forwardRef(function SelectTrigger2({ "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, className, id: ownId, invalid, size = "md", ...props }, ref) {
67
+ const field = useContext(FieldContext);
68
+ const control = useFieldControl(invalid, ariaDescribedBy);
69
+ return /* @__PURE__ */ jsx(RadixSelect.Trigger, { ...props, ref, id: ownId ?? (field === null ? void 0 : control.id), "aria-describedby": control.describedBy, "aria-invalid": ariaInvalid ?? (control.invalid || void 0), className: cx("cdt-select__trigger", size === "sm" && "cdt-select__trigger--sm", control.invalid && "cdt-select__trigger--invalid", className) });
70
+ });
71
+ SelectTrigger.displayName = "Select.Trigger";
72
+ var SelectContent = forwardRef(function SelectContent2({ children, className, ...props }, ref) {
73
+ return /* @__PURE__ */ jsx(RadixSelect.Portal, { children: /* @__PURE__ */ jsx(RadixSelect.Content, { ...props, ref, className: cx("cdt-select__content", className), children: /* @__PURE__ */ jsx(RadixSelect.Viewport, { children }) }) });
74
+ });
75
+ SelectContent.displayName = "Select.Content";
76
+ var SelectItem = forwardRef(function SelectItem2({ children, className, ...props }, ref) {
77
+ return /* @__PURE__ */ jsxs(RadixSelect.Item, { ...props, ref, className: cx("cdt-select__item", className), children: [
78
+ /* @__PURE__ */ jsx(RadixSelect.ItemText, { children }),
79
+ /* @__PURE__ */ jsx(RadixSelect.ItemIndicator, { className: "cdt-select__indicator", "aria-hidden": "true", children: "\u2713" })
80
+ ] });
81
+ });
82
+ SelectItem.displayName = "Select.Item";
83
+ var Select = { Root: RadixSelect.Root, Trigger: SelectTrigger, Value: RadixSelect.Value, Content: SelectContent, Item: SelectItem, Group: RadixSelect.Group, Label: RadixSelect.Label };
84
+ var Switch = forwardRef(function Switch2({ className, ...props }, ref) {
85
+ const field = useContext(FieldContext);
86
+ const control = useFieldControl(void 0, props["aria-describedby"]);
87
+ return /* @__PURE__ */ jsx(RadixSwitch.Root, { ...props, ref, id: props.id ?? (field === null ? void 0 : control.id), "aria-describedby": control.describedBy, "aria-invalid": control.invalid || void 0, required: props.required ?? control.required, className: cx("cdt-switch", control.invalid && "cdt-switch--invalid", className), children: /* @__PURE__ */ jsx(RadixSwitch.Thumb, { className: "cdt-switch__thumb" }) });
88
+ });
89
+ Switch.displayName = "Switch";
90
+ var Checkbox = forwardRef(function Checkbox2({ className, indicator = "\u2713", ...props }, ref) {
91
+ const field = useContext(FieldContext);
92
+ const control = useFieldControl(void 0, props["aria-describedby"]);
93
+ return /* @__PURE__ */ jsx(RadixCheckbox.Root, { ...props, ref, id: props.id ?? (field === null ? void 0 : control.id), "aria-describedby": control.describedBy, "aria-invalid": control.invalid || void 0, required: props.required ?? control.required, className: cx("cdt-checkbox", control.invalid && "cdt-checkbox--invalid", className), children: /* @__PURE__ */ jsx(RadixCheckbox.Indicator, { className: "cdt-checkbox__indicator", "aria-hidden": "true", children: indicator }) });
94
+ });
95
+ Checkbox.displayName = "Checkbox";
96
+
97
+ export { Checkbox, Field, Select, Switch, TextArea, TextField };
@@ -0,0 +1,221 @@
1
+ import { cx } from './chunk-WEIMKRZV.js';
2
+ import * as RadixDialog from '@radix-ui/react-dialog';
3
+ import * as RadixDropdownMenu from '@radix-ui/react-dropdown-menu';
4
+ import * as RadixTooltip from '@radix-ui/react-tooltip';
5
+ import { forwardRef } from 'react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var DialogContent = forwardRef(
9
+ function DialogContent2({ children, className, size = "md", ...props }, ref) {
10
+ return /* @__PURE__ */ jsxs(RadixDialog.Portal, { children: [
11
+ /* @__PURE__ */ jsx(RadixDialog.Overlay, { className: "cdt-overlay" }),
12
+ /* @__PURE__ */ jsx(
13
+ RadixDialog.Content,
14
+ {
15
+ ...props,
16
+ ref,
17
+ className: cx(
18
+ "cdt-dialog",
19
+ size === "sm" && "cdt-dialog--sm",
20
+ className
21
+ ),
22
+ children
23
+ }
24
+ )
25
+ ] });
26
+ }
27
+ );
28
+ DialogContent.displayName = "Dialog.Content";
29
+ var DialogTitle = forwardRef(function DialogTitle2({ className, ...props }, ref) {
30
+ return /* @__PURE__ */ jsx(
31
+ RadixDialog.Title,
32
+ {
33
+ ...props,
34
+ ref,
35
+ className: cx("cdt-dialog__title", className)
36
+ }
37
+ );
38
+ });
39
+ DialogTitle.displayName = "Dialog.Title";
40
+ var DialogDescription = forwardRef(function DialogDescription2({ className, ...props }, ref) {
41
+ return /* @__PURE__ */ jsx(
42
+ RadixDialog.Description,
43
+ {
44
+ ...props,
45
+ ref,
46
+ className: cx("cdt-dialog__description", className)
47
+ }
48
+ );
49
+ });
50
+ DialogDescription.displayName = "Dialog.Description";
51
+ var DialogClose = forwardRef(
52
+ function DialogClose2({ asChild = false, className, ...props }, ref) {
53
+ return /* @__PURE__ */ jsx(
54
+ RadixDialog.Close,
55
+ {
56
+ ...props,
57
+ ref,
58
+ asChild,
59
+ className: cx(
60
+ "cdt-dialog__close",
61
+ !asChild && "cdt-btn",
62
+ !asChild && "cdt-btn--secondary",
63
+ !asChild && "cdt-btn--sm",
64
+ className
65
+ )
66
+ }
67
+ );
68
+ }
69
+ );
70
+ DialogClose.displayName = "Dialog.Close";
71
+ var Dialog = {
72
+ Root: RadixDialog.Root,
73
+ Trigger: RadixDialog.Trigger,
74
+ Content: DialogContent,
75
+ Title: DialogTitle,
76
+ Description: DialogDescription,
77
+ Close: DialogClose
78
+ };
79
+ var DrawerContent = forwardRef(
80
+ function DrawerContent2({ children, className, side = "right", ...props }, ref) {
81
+ return /* @__PURE__ */ jsxs(RadixDialog.Portal, { children: [
82
+ /* @__PURE__ */ jsx(RadixDialog.Overlay, { className: "cdt-overlay" }),
83
+ /* @__PURE__ */ jsx(
84
+ RadixDialog.Content,
85
+ {
86
+ ...props,
87
+ ref,
88
+ className: cx("cdt-drawer", `cdt-drawer--${side}`, className),
89
+ children
90
+ }
91
+ )
92
+ ] });
93
+ }
94
+ );
95
+ DrawerContent.displayName = "Drawer.Content";
96
+ var DrawerTitle = forwardRef(function DrawerTitle2({ className, ...props }, ref) {
97
+ return /* @__PURE__ */ jsx(
98
+ RadixDialog.Title,
99
+ {
100
+ ...props,
101
+ ref,
102
+ className: cx("cdt-drawer__title", className)
103
+ }
104
+ );
105
+ });
106
+ DrawerTitle.displayName = "Drawer.Title";
107
+ var DrawerClose = forwardRef(
108
+ function DrawerClose2({ asChild = false, className, ...props }, ref) {
109
+ return /* @__PURE__ */ jsx(
110
+ RadixDialog.Close,
111
+ {
112
+ ...props,
113
+ ref,
114
+ asChild,
115
+ className: cx(
116
+ "cdt-drawer__close",
117
+ !asChild && "cdt-btn",
118
+ !asChild && "cdt-btn--secondary",
119
+ !asChild && "cdt-btn--sm",
120
+ className
121
+ )
122
+ }
123
+ );
124
+ }
125
+ );
126
+ DrawerClose.displayName = "Drawer.Close";
127
+ var Drawer = {
128
+ Root: RadixDialog.Root,
129
+ Trigger: RadixDialog.Trigger,
130
+ Content: DrawerContent,
131
+ Title: DrawerTitle,
132
+ Description: RadixDialog.Description,
133
+ Close: DrawerClose
134
+ };
135
+ var TooltipContent = forwardRef(
136
+ function TooltipContent2({ children, className, showArrow = true, ...props }, ref) {
137
+ return /* @__PURE__ */ jsx(RadixTooltip.Portal, { children: /* @__PURE__ */ jsxs(
138
+ RadixTooltip.Content,
139
+ {
140
+ ...props,
141
+ ref,
142
+ className: cx("cdt-tooltip", className),
143
+ children: [
144
+ children,
145
+ showArrow ? /* @__PURE__ */ jsx(RadixTooltip.Arrow, { className: "cdt-tooltip__arrow" }) : null
146
+ ]
147
+ }
148
+ ) });
149
+ }
150
+ );
151
+ TooltipContent.displayName = "Tooltip.Content";
152
+ var Tooltip = {
153
+ Provider: RadixTooltip.Provider,
154
+ Root: RadixTooltip.Root,
155
+ Trigger: RadixTooltip.Trigger,
156
+ Content: TooltipContent
157
+ };
158
+ var DropdownMenuContent = forwardRef(function DropdownMenuContent2({ className, ...props }, ref) {
159
+ return /* @__PURE__ */ jsx(RadixDropdownMenu.Portal, { children: /* @__PURE__ */ jsx(
160
+ RadixDropdownMenu.Content,
161
+ {
162
+ ...props,
163
+ ref,
164
+ className: cx("cdt-menu", className)
165
+ }
166
+ ) });
167
+ });
168
+ DropdownMenuContent.displayName = "DropdownMenu.Content";
169
+ var DropdownMenuItem = forwardRef(
170
+ function DropdownMenuItem2({ children, className, icon, tone = "neutral", ...props }, ref) {
171
+ return /* @__PURE__ */ jsxs(
172
+ RadixDropdownMenu.Item,
173
+ {
174
+ ...props,
175
+ ref,
176
+ className: cx(
177
+ "cdt-menu__item",
178
+ tone === "danger" && "cdt-menu__item--danger",
179
+ className
180
+ ),
181
+ children: [
182
+ icon === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "cdt-menu__item-icon", "aria-hidden": "true", children: icon }),
183
+ children
184
+ ]
185
+ }
186
+ );
187
+ }
188
+ );
189
+ DropdownMenuItem.displayName = "DropdownMenu.Item";
190
+ var DropdownMenuLabel = forwardRef(function DropdownMenuLabel2({ className, ...props }, ref) {
191
+ return /* @__PURE__ */ jsx(
192
+ RadixDropdownMenu.Label,
193
+ {
194
+ ...props,
195
+ ref,
196
+ className: cx("cdt-menu__label", className)
197
+ }
198
+ );
199
+ });
200
+ DropdownMenuLabel.displayName = "DropdownMenu.Label";
201
+ var DropdownMenuSeparator = forwardRef(function DropdownMenuSeparator2({ className, ...props }, ref) {
202
+ return /* @__PURE__ */ jsx(
203
+ RadixDropdownMenu.Separator,
204
+ {
205
+ ...props,
206
+ ref,
207
+ className: cx("cdt-menu__separator", className)
208
+ }
209
+ );
210
+ });
211
+ DropdownMenuSeparator.displayName = "DropdownMenu.Separator";
212
+ var DropdownMenu = {
213
+ Root: RadixDropdownMenu.Root,
214
+ Trigger: RadixDropdownMenu.Trigger,
215
+ Content: DropdownMenuContent,
216
+ Item: DropdownMenuItem,
217
+ Label: DropdownMenuLabel,
218
+ Separator: DropdownMenuSeparator
219
+ };
220
+
221
+ export { Dialog, Drawer, DropdownMenu, Tooltip };
@@ -0,0 +1,60 @@
1
+ import { cx } from './chunk-WEIMKRZV.js';
2
+ import { forwardRef, useEffect } from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ var Banner = forwardRef(function Banner2({ action, children, className, icon, title, tone = "info", ...props }, ref) {
6
+ useEffect(() => {
7
+ if (process.env.NODE_ENV !== "production" && tone === "danger" && action === void 0) console.warn('[conductor] Banner tone="danger" requires a recovery action.');
8
+ }, [action, tone]);
9
+ return /* @__PURE__ */ jsxs("div", { ...props, ref, role: tone === "danger" ? "alert" : "status", className: cx("cdt-banner", `cdt-banner--${tone}`, className), children: [
10
+ icon === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "cdt-banner__icon", "aria-hidden": "true", children: icon }),
11
+ /* @__PURE__ */ jsxs("div", { className: "cdt-banner__body", children: [
12
+ title === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "cdt-banner__title", children: title }),
13
+ children
14
+ ] }),
15
+ action === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "cdt-banner__action", children: action })
16
+ ] });
17
+ });
18
+ Banner.displayName = "Banner";
19
+ var EmptyState = forwardRef(function EmptyState2({ action, className, description, icon, title, ...props }, ref) {
20
+ return /* @__PURE__ */ jsxs("div", { ...props, ref, className: cx("cdt-empty-state", className), children: [
21
+ icon === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "cdt-empty-state__icon", "aria-hidden": "true", children: icon }),
22
+ /* @__PURE__ */ jsx("div", { className: "cdt-empty-state__title", children: title }),
23
+ description === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "cdt-empty-state__description", children: description }),
24
+ action === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "cdt-empty-state__action", children: action })
25
+ ] });
26
+ });
27
+ EmptyState.displayName = "EmptyState";
28
+ var ratio = (value, min, max) => max <= min ? 0 : Math.min(1, Math.max(0, (value - min) / (max - min)));
29
+ var Meter = forwardRef(function Meter2({ "aria-label": ariaLabel, className, exceededAt, max = 100, min = 0, style, value, valueText, warningAt, ...props }, ref) {
30
+ const tone = exceededAt !== void 0 && value >= exceededAt ? "exceeded" : warningAt !== void 0 && value >= warningAt ? "warning" : "normal";
31
+ const meterStyle = { ...style, "--cdt-meter-ratio": String(ratio(value, min, max)) };
32
+ return /* @__PURE__ */ jsxs("div", { ...props, ref, style: meterStyle, role: "meter", "aria-label": ariaLabel, "aria-valuenow": value, "aria-valuemin": min, "aria-valuemax": max, "aria-valuetext": valueText, className: cx("cdt-meter", `cdt-meter--${tone}`, className), children: [
33
+ /* @__PURE__ */ jsx("div", { className: "cdt-meter__track", children: /* @__PURE__ */ jsx("div", { className: "cdt-meter__fill" }) }),
34
+ /* @__PURE__ */ jsx("span", { className: "cdt-meter__value", children: valueText })
35
+ ] });
36
+ });
37
+ Meter.displayName = "Meter";
38
+ var ProgressRing = forwardRef(function ProgressRing2({ "aria-label": ariaLabel, className, max = 100, size = "md", style, value, valueText, ...props }, ref) {
39
+ const ringStyle = { ...style, "--cdt-progress-ring-ratio": String(ratio(value, 0, max)) };
40
+ return /* @__PURE__ */ jsxs("div", { ...props, ref, style: ringStyle, role: "progressbar", "aria-label": ariaLabel, "aria-valuenow": value, "aria-valuemin": 0, "aria-valuemax": max, "aria-valuetext": valueText, className: cx("cdt-progress-ring", size === "sm" && "cdt-progress-ring--sm", className), children: [
41
+ /* @__PURE__ */ jsxs("svg", { "aria-hidden": "true", viewBox: "0 0 32 32", children: [
42
+ /* @__PURE__ */ jsx("circle", { className: "cdt-progress-ring__track", cx: "16", cy: "16", r: "14" }),
43
+ /* @__PURE__ */ jsx("circle", { className: "cdt-progress-ring__indicator", cx: "16", cy: "16", r: "14" })
44
+ ] }),
45
+ /* @__PURE__ */ jsx("span", { className: "cdt-progress-ring__label", children: valueText })
46
+ ] });
47
+ });
48
+ ProgressRing.displayName = "ProgressRing";
49
+ var Spinner = forwardRef(function Spinner2({ className, label, size = "md", ...props }, ref) {
50
+ return /* @__PURE__ */ jsxs("div", { ...props, ref, role: "status", "aria-live": "polite", className: cx("cdt-spinner", size === "sm" && "cdt-spinner--sm", className), children: [
51
+ /* @__PURE__ */ jsxs("svg", { "aria-hidden": "true", viewBox: "0 0 32 32", children: [
52
+ /* @__PURE__ */ jsx("circle", { className: "cdt-spinner__track", cx: "16", cy: "16", r: "14" }),
53
+ /* @__PURE__ */ jsx("circle", { className: "cdt-spinner__indicator", cx: "16", cy: "16", r: "14" })
54
+ ] }),
55
+ /* @__PURE__ */ jsx("span", { className: "cdt-spinner__label", children: label })
56
+ ] });
57
+ });
58
+ Spinner.displayName = "Spinner";
59
+
60
+ export { Banner, EmptyState, Meter, ProgressRing, Spinner };
@@ -0,0 +1,31 @@
1
+ import { cx } from './chunk-WEIMKRZV.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ var Badge = forwardRef(function Badge2({ children, className, icon, tone = "neutral", ...props }, ref) {
6
+ return /* @__PURE__ */ jsxs("span", { ...props, ref, className: cx("cdt-badge", `cdt-badge--${tone}`, className), children: [
7
+ icon === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "cdt-badge__icon", "aria-hidden": "true", children: icon }),
8
+ children
9
+ ] });
10
+ });
11
+ Badge.displayName = "Badge";
12
+ var markerStatuses = ["queued", "neutralEnd"];
13
+ var StatusBadge = forwardRef(function StatusBadge2({ className, icon, label, status, ...props }, ref) {
14
+ const isMarker = markerStatuses.includes(status);
15
+ const statusClass = status === "neutralEnd" ? "neutral-end" : status;
16
+ return /* @__PURE__ */ jsxs("span", { ...props, ref, className: cx("cdt-badge", "cdt-status-badge", `cdt-status-badge--${statusClass}`, className), children: [
17
+ isMarker ? /* @__PURE__ */ jsx("span", { className: cx("cdt-status-badge__marker", status === "neutralEnd" && "cdt-status-badge__marker--neutral-end"), "aria-hidden": "true" }) : null,
18
+ /* @__PURE__ */ jsx("span", { className: "cdt-badge__icon", "aria-hidden": "true", children: icon }),
19
+ label
20
+ ] });
21
+ });
22
+ StatusBadge.displayName = "StatusBadge";
23
+ var SeverityTag = forwardRef(function SeverityTag2({ className, icon, label, severity, ...props }, ref) {
24
+ return /* @__PURE__ */ jsxs("span", { ...props, ref, className: cx("cdt-badge", "cdt-severity-tag", `cdt-severity-tag--${severity}`, className), children: [
25
+ /* @__PURE__ */ jsx("span", { className: "cdt-badge__icon", "aria-hidden": "true", children: icon }),
26
+ label
27
+ ] });
28
+ });
29
+ SeverityTag.displayName = "SeverityTag";
30
+
31
+ export { Badge, SeverityTag, StatusBadge };
@@ -0,0 +1,58 @@
1
+ import { cx } from './chunk-WEIMKRZV.js';
2
+ import { forwardRef, useEffect } from 'react';
3
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
+
5
+ var TableHead = forwardRef(function TableHead2({ className, ...props }, ref) {
6
+ return /* @__PURE__ */ jsx("thead", { ...props, ref, className: cx("cdt-table__head", className) });
7
+ });
8
+ TableHead.displayName = "Table.Head";
9
+ var TableBody = forwardRef(function TableBody2({ className, ...props }, ref) {
10
+ return /* @__PURE__ */ jsx("tbody", { ...props, ref, className: cx("cdt-table__body", className) });
11
+ });
12
+ TableBody.displayName = "Table.Body";
13
+ var TableRow = forwardRef(function TableRow2({ className, ...props }, ref) {
14
+ return /* @__PURE__ */ jsx("tr", { ...props, ref, className: cx("cdt-table__row", className) });
15
+ });
16
+ TableRow.displayName = "Table.Row";
17
+ var TableHeaderCell = forwardRef(function TableHeaderCell2({ className, scope = "col", ...props }, ref) {
18
+ return /* @__PURE__ */ jsx("th", { ...props, ref, scope, className: cx("cdt-table__header-cell", className) });
19
+ });
20
+ TableHeaderCell.displayName = "Table.HeaderCell";
21
+ var TableCell = forwardRef(function TableCell2({ className, numeric = false, ...props }, ref) {
22
+ return /* @__PURE__ */ jsx("td", { ...props, ref, className: cx("cdt-table__cell", numeric && "cdt-num", className) });
23
+ });
24
+ TableCell.displayName = "Table.Cell";
25
+ var Table = Object.assign(forwardRef(function Table2({ "aria-label": ariaLabel, caption, children, className, scrollContainerProps, ...props }, ref) {
26
+ useEffect(() => {
27
+ if (process.env.NODE_ENV !== "production" && caption == null && ariaLabel === void 0) {
28
+ console.warn("[conductor] Table requires a caption or aria-label.");
29
+ }
30
+ }, [ariaLabel, caption]);
31
+ return /* @__PURE__ */ jsx("div", { ...scrollContainerProps, ...props, ref, tabIndex: props.tabIndex ?? scrollContainerProps?.tabIndex ?? 0, "aria-label": ariaLabel, className: cx("cdt-table__scroll", scrollContainerProps?.className, className), children: /* @__PURE__ */ jsxs("table", { "aria-label": ariaLabel, className: "cdt-table", children: [
32
+ caption == null ? null : /* @__PURE__ */ jsx("caption", { children: caption }),
33
+ children
34
+ ] }) });
35
+ }), { Head: TableHead, Body: TableBody, Row: TableRow, HeaderCell: TableHeaderCell, Cell: TableCell });
36
+ var TimelineStep = forwardRef(function TimelineStep2({ children, className, marker, onSelect, selected = false, ...props }, ref) {
37
+ const stepClassName = cx("cdt-timeline__step", onSelect !== void 0 && "cdt-timeline__step--interactive", className);
38
+ const markerNode = /* @__PURE__ */ jsx("span", { className: "cdt-timeline__marker", "aria-hidden": "true", children: marker });
39
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
40
+ markerNode,
41
+ children
42
+ ] });
43
+ return /* @__PURE__ */ jsx("li", { ref, children: onSelect === void 0 ? /* @__PURE__ */ jsx("div", { ...props, "aria-current": selected ? "step" : void 0, className: stepClassName, children: content }) : /* @__PURE__ */ jsx("button", { ...props, type: "button", "aria-current": selected ? "step" : void 0, onClick: () => onSelect(), className: stepClassName, children: content }) });
44
+ });
45
+ TimelineStep.displayName = "Timeline.Step";
46
+ var Timeline = Object.assign(forwardRef(function Timeline2({ className, ...props }, ref) {
47
+ return /* @__PURE__ */ jsx("ol", { ...props, ref, className: cx("cdt-timeline", className) });
48
+ }), { Step: TimelineStep });
49
+ var CodeBlock = forwardRef(function CodeBlock2({ className, code, language, ...props }, ref) {
50
+ return /* @__PURE__ */ jsx("div", { ...props, ref, role: "region", tabIndex: 0, "data-language": language, className: cx("cdt-code-block", className), children: /* @__PURE__ */ jsx("pre", { className: "cdt-code-block__pre", children: /* @__PURE__ */ jsx("code", { className: "cdt-code-block__code", children: code }) }) });
51
+ });
52
+ CodeBlock.displayName = "CodeBlock";
53
+ var Kbd = forwardRef(function Kbd2({ className, ...props }, ref) {
54
+ return /* @__PURE__ */ jsx("kbd", { ...props, ref, className: cx("cdt-kbd", className) });
55
+ });
56
+ Kbd.displayName = "Kbd";
57
+
58
+ export { CodeBlock, Kbd, Table, Timeline };
@@ -0,0 +1,42 @@
1
+ import { cx } from './chunk-WEIMKRZV.js';
2
+ import { forwardRef, useRef, useEffect } from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var nestedInteractive = "a,button,input,select,textarea,[role=button]";
6
+ var Card = forwardRef(function Card2({ as, children, className, href, onClick, size = "md", ...props }, forwardedRef) {
7
+ const rootRef = useRef(null);
8
+ const interactive = as === "a" || as === "button" || href !== void 0 || onClick !== void 0;
9
+ const element = as ?? (href === void 0 ? onClick === void 0 ? "div" : "button" : "a");
10
+ useEffect(() => {
11
+ if (process.env.NODE_ENV !== "production" && interactive && rootRef.current?.querySelector(nestedInteractive) !== null) {
12
+ console.warn("[conductor] Interactive Card must not contain nested interactive elements.");
13
+ }
14
+ }, [interactive]);
15
+ const setRef = (node) => {
16
+ rootRef.current = node;
17
+ if (typeof forwardedRef === "function") forwardedRef(node);
18
+ else if (forwardedRef !== null) forwardedRef.current = node;
19
+ };
20
+ const classes = cx("cdt-card", interactive && "cdt-card--interactive", size === "sm" && "cdt-card--sm", className);
21
+ if (element === "a") {
22
+ return /* @__PURE__ */ jsx("a", { ...props, ref: setRef, href, className: classes, children });
23
+ }
24
+ if (element === "button") {
25
+ return /* @__PURE__ */ jsx("button", { ...props, ref: setRef, type: "button", onClick, className: classes, children });
26
+ }
27
+ return /* @__PURE__ */ jsx("div", { ...props, ref: setRef, className: classes, children });
28
+ });
29
+ Card.displayName = "Card";
30
+ var CardGrid = forwardRef(function CardGrid2({ className, ...props }, ref) {
31
+ return /* @__PURE__ */ jsx("div", { ...props, ref, className: cx("cdt-card-grid", className) });
32
+ });
33
+ CardGrid.displayName = "CardGrid";
34
+ var Panel = forwardRef(function Panel2({ as = "div", className, size = "md", ...props }, ref) {
35
+ const classes = cx("cdt-panel", size === "sm" && "cdt-panel--sm", className);
36
+ if (as === "section") return /* @__PURE__ */ jsx("section", { ...props, ref, className: classes });
37
+ if (as === "aside") return /* @__PURE__ */ jsx("aside", { ...props, ref, className: classes });
38
+ return /* @__PURE__ */ jsx("div", { ...props, ref, className: classes });
39
+ });
40
+ Panel.displayName = "Panel";
41
+
42
+ export { Card, CardGrid, Panel };
@@ -0,0 +1,80 @@
1
+ import { cx } from './chunk-WEIMKRZV.js';
2
+ import * as RadixDialog from '@radix-ui/react-dialog';
3
+ import { forwardRef, useRef, Fragment as Fragment$1 } from 'react';
4
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
+
6
+ var AppShell = forwardRef(function AppShell2({
7
+ children,
8
+ className,
9
+ mainId = "cdt-main",
10
+ nav,
11
+ navOpen,
12
+ onNavOpenChange,
13
+ skipLinkLabel,
14
+ topBar,
15
+ ...props
16
+ }, ref) {
17
+ const mainRef = useRef(null);
18
+ return /* @__PURE__ */ jsxs(RadixDialog.Root, { modal: false, open: navOpen, onOpenChange: onNavOpenChange, children: [
19
+ /* @__PURE__ */ jsxs("div", { ...props, ref, className: cx("cdt-app-shell", className), children: [
20
+ /* @__PURE__ */ jsx(
21
+ "a",
22
+ {
23
+ className: "cdt-skip-link",
24
+ href: `#${mainId}`,
25
+ onClick: (event) => {
26
+ event.preventDefault();
27
+ mainRef.current?.focus();
28
+ },
29
+ children: skipLinkLabel
30
+ }
31
+ ),
32
+ /* @__PURE__ */ jsx("aside", { className: "cdt-app-shell__nav", "aria-hidden": navOpen || void 0, children: navOpen ? null : nav }),
33
+ /* @__PURE__ */ jsxs("div", { className: "cdt-app-shell__content", children: [
34
+ topBar,
35
+ /* @__PURE__ */ jsx("main", { ref: mainRef, id: mainId, className: "cdt-app-shell__main", tabIndex: -1, children })
36
+ ] })
37
+ ] }),
38
+ /* @__PURE__ */ jsxs(RadixDialog.Portal, { children: [
39
+ /* @__PURE__ */ jsx("div", { className: "cdt-app-shell__overlay", "aria-hidden": "true" }),
40
+ /* @__PURE__ */ jsxs(RadixDialog.Content, { className: "cdt-app-shell__nav", "data-mobile": "", children: [
41
+ /* @__PURE__ */ jsx(RadixDialog.Title, { className: "cdt-sr-only", children: "Navigation" }),
42
+ nav
43
+ ] })
44
+ ] })
45
+ ] });
46
+ });
47
+ AppShell.displayName = "AppShell";
48
+ var NavList = forwardRef(function NavList2({ className, items, renderLink, ...props }, ref) {
49
+ let previousSection;
50
+ return /* @__PURE__ */ jsx("nav", { ...props, ref, className: cx("cdt-nav-list", className), children: /* @__PURE__ */ jsx("ul", { className: "cdt-nav-list__items", children: items.map((item) => {
51
+ const showSection = item.section !== void 0 && item.section !== previousSection;
52
+ previousSection = item.section;
53
+ const linkProps = {
54
+ className: cx("cdt-nav-list__item", item.active && "cdt-nav-list__item--active"),
55
+ "aria-current": item.active ? "page" : void 0,
56
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
57
+ item.icon === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "cdt-nav-list__icon", "aria-hidden": "true", children: item.icon }),
58
+ /* @__PURE__ */ jsx("span", { children: item.label })
59
+ ] })
60
+ };
61
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
62
+ showSection ? /* @__PURE__ */ jsx("li", { className: "cdt-nav-list__section-label", children: item.section }) : null,
63
+ /* @__PURE__ */ jsx("li", { children: renderLink(item, linkProps) })
64
+ ] }, item.id);
65
+ }) }) });
66
+ });
67
+ NavList.displayName = "NavList";
68
+ var TopBar = forwardRef(function TopBar2({ actions, className, eyebrow, menuButton, title, ...props }, ref) {
69
+ return /* @__PURE__ */ jsxs("header", { ...props, ref, className: cx("cdt-topbar", className), title: typeof title === "string" ? title : void 0, children: [
70
+ menuButton === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "cdt-topbar__menu-button", children: menuButton }),
71
+ eyebrow === void 0 && title === void 0 ? null : /* @__PURE__ */ jsxs("div", { className: "cdt-topbar__context", children: [
72
+ eyebrow === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "cdt-topbar__eyebrow", children: eyebrow }),
73
+ title === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "cdt-topbar__title", children: title })
74
+ ] }),
75
+ actions === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "cdt-topbar__actions", children: actions })
76
+ ] });
77
+ });
78
+ TopBar.displayName = "TopBar";
79
+
80
+ export { AppShell, NavList, TopBar };
@@ -0,0 +1,23 @@
1
+ // src/stylesheet-warning.ts
2
+ var STYLE_MARKER = "--cdt-font-sans";
3
+ var warningScheduled = false;
4
+ function scheduleStylesheetWarning() {
5
+ if (process.env.NODE_ENV !== "development" || typeof window === "undefined" || warningScheduled) return;
6
+ warningScheduled = true;
7
+ window.setTimeout(() => {
8
+ const marker = window.getComputedStyle(document.documentElement).getPropertyValue(STYLE_MARKER).trim();
9
+ if (marker === "") {
10
+ console.warn('[conductor] Components are unstyled. Import "@conductor-by-89soone/css" once in your application entry point.');
11
+ }
12
+ }, 0);
13
+ }
14
+
15
+ // src/cx.ts
16
+ function cx(...classNames) {
17
+ if (classNames.some((className) => typeof className === "string" && /(?:^|\s)cdt-/.test(className))) {
18
+ scheduleStylesheetWarning();
19
+ }
20
+ return classNames.filter((className) => typeof className === "string" && className !== "").join(" ");
21
+ }
22
+
23
+ export { cx };
package/dist/cx.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ /** Joins optional class names without introducing a runtime dependency. */
2
+ declare function cx(...classNames: readonly (string | false | null | undefined)[]): string;
3
+
4
+ export { cx };
package/dist/cx.js ADDED
@@ -0,0 +1 @@
1
+ export { cx } from './chunk-WEIMKRZV.js';
package/dist/data.d.ts ADDED
@@ -0,0 +1,52 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactNode, forwardRef, ThHTMLAttributes, TdHTMLAttributes } from 'react';
3
+
4
+ interface TableProps extends HTMLAttributes<HTMLDivElement> {
5
+ readonly caption?: ReactNode;
6
+ readonly scrollContainerProps?: HTMLAttributes<HTMLDivElement>;
7
+ readonly children: ReactNode;
8
+ }
9
+ declare const TableHead: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
10
+ declare const TableBody: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
11
+ declare const TableRow: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableRowElement> & react.RefAttributes<HTMLTableRowElement>>;
12
+ interface TableHeaderCellProps extends ThHTMLAttributes<HTMLTableCellElement> {
13
+ readonly scope?: "col" | "row";
14
+ }
15
+ declare const TableHeaderCell: react.ForwardRefExoticComponent<TableHeaderCellProps & react.RefAttributes<HTMLTableCellElement>>;
16
+ interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {
17
+ readonly numeric?: boolean;
18
+ }
19
+ declare const TableCell: react.ForwardRefExoticComponent<TableCellProps & react.RefAttributes<HTMLTableCellElement>>;
20
+ type TableComponent = ReturnType<typeof forwardRef<HTMLDivElement, TableProps>> & {
21
+ readonly Head: typeof TableHead;
22
+ readonly Body: typeof TableBody;
23
+ readonly Row: typeof TableRow;
24
+ readonly HeaderCell: typeof TableHeaderCell;
25
+ readonly Cell: typeof TableCell;
26
+ };
27
+ declare const Table: TableComponent;
28
+ interface TimelineProps extends HTMLAttributes<HTMLOListElement> {
29
+ readonly children: ReactNode;
30
+ }
31
+ interface TimelineStepProps extends Omit<HTMLAttributes<HTMLDivElement>, "onSelect"> {
32
+ readonly onSelect?: () => void;
33
+ readonly selected?: boolean;
34
+ readonly marker?: ReactNode;
35
+ readonly children: ReactNode;
36
+ }
37
+ declare const TimelineStep: react.ForwardRefExoticComponent<TimelineStepProps & react.RefAttributes<HTMLLIElement>>;
38
+ type TimelineComponent = ReturnType<typeof forwardRef<HTMLOListElement, TimelineProps>> & {
39
+ readonly Step: typeof TimelineStep;
40
+ };
41
+ declare const Timeline: TimelineComponent;
42
+ interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
43
+ readonly code: string;
44
+ readonly language?: string;
45
+ }
46
+ declare const CodeBlock: react.ForwardRefExoticComponent<CodeBlockProps & react.RefAttributes<HTMLDivElement>>;
47
+ interface KbdProps extends HTMLAttributes<HTMLElement> {
48
+ readonly children: ReactNode;
49
+ }
50
+ declare const Kbd: react.ForwardRefExoticComponent<KbdProps & react.RefAttributes<HTMLElement>>;
51
+
52
+ export { CodeBlock, type CodeBlockProps, Kbd, type KbdProps, Table, type TableCellProps, type TableHeaderCellProps, type TableProps, Timeline, type TimelineProps, type TimelineStepProps };
package/dist/data.js ADDED
@@ -0,0 +1,2 @@
1
+ export { CodeBlock, Kbd, Table, Timeline } from './chunk-RBD5Z2LR.js';
2
+ import './chunk-WEIMKRZV.js';
@@ -0,0 +1,44 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ type BannerTone = "info" | "warning" | "danger";
5
+ interface BannerProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
6
+ readonly tone?: BannerTone;
7
+ readonly icon?: ReactNode;
8
+ readonly title?: ReactNode;
9
+ readonly action?: ReactNode;
10
+ readonly children: ReactNode;
11
+ }
12
+ declare const Banner: react.ForwardRefExoticComponent<BannerProps & react.RefAttributes<HTMLDivElement>>;
13
+ interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
14
+ readonly title: ReactNode;
15
+ readonly description?: ReactNode;
16
+ readonly action?: ReactNode;
17
+ readonly icon?: ReactNode;
18
+ }
19
+ declare const EmptyState: react.ForwardRefExoticComponent<EmptyStateProps & react.RefAttributes<HTMLDivElement>>;
20
+ interface MeterProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
21
+ readonly value: number;
22
+ readonly min?: number;
23
+ readonly max?: number;
24
+ readonly warningAt?: number;
25
+ readonly exceededAt?: number;
26
+ readonly valueText: string;
27
+ readonly "aria-label": string;
28
+ }
29
+ declare const Meter: react.ForwardRefExoticComponent<MeterProps & react.RefAttributes<HTMLDivElement>>;
30
+ interface ProgressRingProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
31
+ readonly value: number;
32
+ readonly max?: number;
33
+ readonly valueText: string;
34
+ readonly size?: "sm" | "md";
35
+ readonly "aria-label": string;
36
+ }
37
+ declare const ProgressRing: react.ForwardRefExoticComponent<ProgressRingProps & react.RefAttributes<HTMLDivElement>>;
38
+ interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {
39
+ readonly label: string;
40
+ readonly size?: "sm" | "md";
41
+ }
42
+ declare const Spinner: react.ForwardRefExoticComponent<SpinnerProps & react.RefAttributes<HTMLDivElement>>;
43
+
44
+ export { Banner, type BannerProps, EmptyState, type EmptyStateProps, Meter, type MeterProps, ProgressRing, type ProgressRingProps, Spinner, type SpinnerProps };
@@ -0,0 +1,2 @@
1
+ export { Banner, EmptyState, Meter, ProgressRing, Spinner } from './chunk-NF3ZHADJ.js';
2
+ import './chunk-WEIMKRZV.js';
package/dist/form.d.ts ADDED
@@ -0,0 +1,53 @@
1
+ import * as react from 'react';
2
+ import { ReactNode, ComponentPropsWithoutRef, HTMLAttributes, ReactElement } from 'react';
3
+ import * as RadixCheckbox from '@radix-ui/react-checkbox';
4
+ import * as RadixSelect from '@radix-ui/react-select';
5
+ import * as RadixSwitch from '@radix-ui/react-switch';
6
+
7
+ interface FieldProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
8
+ readonly id?: string;
9
+ readonly label: string;
10
+ readonly description?: ReactNode;
11
+ readonly error?: ReactNode;
12
+ readonly required?: boolean;
13
+ readonly children: ReactElement;
14
+ }
15
+ declare const Field: react.ForwardRefExoticComponent<FieldProps & react.RefAttributes<HTMLDivElement>>;
16
+ interface TextFieldProps extends Omit<ComponentPropsWithoutRef<"input">, "size"> {
17
+ readonly variant?: "solid" | "glass";
18
+ readonly size?: "sm" | "md";
19
+ readonly invalid?: boolean;
20
+ readonly iconStart?: ReactNode;
21
+ }
22
+ declare const TextField: react.ForwardRefExoticComponent<TextFieldProps & react.RefAttributes<HTMLInputElement>>;
23
+ interface TextAreaProps extends ComponentPropsWithoutRef<"textarea"> {
24
+ readonly variant?: "solid" | "glass";
25
+ readonly invalid?: boolean;
26
+ }
27
+ declare const TextArea: react.ForwardRefExoticComponent<TextAreaProps & react.RefAttributes<HTMLTextAreaElement>>;
28
+ type SelectTriggerProps = ComponentPropsWithoutRef<typeof RadixSelect.Trigger> & {
29
+ readonly size?: "sm" | "md";
30
+ readonly invalid?: boolean;
31
+ };
32
+ declare const Select: {
33
+ readonly Root: react.FC<RadixSelect.SelectProps>;
34
+ readonly Trigger: react.ForwardRefExoticComponent<Omit<RadixSelect.SelectTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> & {
35
+ readonly size?: "sm" | "md";
36
+ readonly invalid?: boolean;
37
+ } & react.RefAttributes<HTMLButtonElement>>;
38
+ readonly Value: react.ForwardRefExoticComponent<RadixSelect.SelectValueProps & react.RefAttributes<HTMLSpanElement>>;
39
+ readonly Content: react.ForwardRefExoticComponent<Omit<RadixSelect.SelectContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
40
+ readonly Item: react.ForwardRefExoticComponent<Omit<RadixSelect.SelectItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
41
+ readonly Group: react.ForwardRefExoticComponent<RadixSelect.SelectGroupProps & react.RefAttributes<HTMLDivElement>>;
42
+ readonly Label: react.ForwardRefExoticComponent<RadixSelect.SelectLabelProps & react.RefAttributes<HTMLDivElement>>;
43
+ };
44
+ type SwitchProps = ComponentPropsWithoutRef<typeof RadixSwitch.Root>;
45
+ declare const Switch: react.ForwardRefExoticComponent<Omit<RadixSwitch.SwitchProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
46
+ type CheckboxProps = ComponentPropsWithoutRef<typeof RadixCheckbox.Root> & {
47
+ readonly indicator?: ReactNode;
48
+ };
49
+ declare const Checkbox: react.ForwardRefExoticComponent<Omit<RadixCheckbox.CheckboxProps & react.RefAttributes<HTMLButtonElement>, "ref"> & {
50
+ readonly indicator?: ReactNode;
51
+ } & react.RefAttributes<HTMLButtonElement>>;
52
+
53
+ export { Checkbox, type CheckboxProps, Field, type FieldProps, Select, type SelectTriggerProps, Switch, type SwitchProps, TextArea, type TextAreaProps, TextField, type TextFieldProps };
package/dist/form.js ADDED
@@ -0,0 +1,2 @@
1
+ export { Checkbox, Field, Select, Switch, TextArea, TextField } from './chunk-FBQXGRI7.js';
2
+ import './chunk-WEIMKRZV.js';
@@ -0,0 +1,31 @@
1
+ export { cx } from './cx.js';
2
+ export { IconSlot, PolymorphicProps, Size, Tone } from './types.js';
3
+ export { Button, ButtonProps, IconButton, IconButtonProps } from './action.js';
4
+ export { Card, CardGrid, CardGridProps, CardProps, Panel, PanelProps } from './surface.js';
5
+ export { Badge, BadgeProps, Severity, SeverityTag, SeverityTagProps, Status, StatusBadge, StatusBadgeProps } from './status.js';
6
+ export { CodeBlock, CodeBlockProps, Kbd, KbdProps, Table, TableCellProps, TableHeaderCellProps, TableProps, Timeline, TimelineProps, TimelineStepProps } from './data.js';
7
+ export { Dialog, DialogContentProps, Drawer, DrawerContentProps, DropdownMenu, DropdownMenuItemProps, Tooltip, TooltipContentProps } from './overlay.js';
8
+ export { Checkbox, CheckboxProps, Field, FieldProps, Select, SelectTriggerProps, Switch, SwitchProps, TextArea, TextAreaProps, TextField, TextFieldProps } from './form.js';
9
+ export { Banner, BannerProps, EmptyState, EmptyStateProps, Meter, MeterProps, ProgressRing, ProgressRingProps, Spinner, SpinnerProps } from './feedback.js';
10
+ export { AppShell, AppShellProps, NavItem, NavLinkRenderProps, NavList, NavListProps, TopBar, TopBarProps } from './shell.js';
11
+ import 'react';
12
+ import '@radix-ui/react-dialog';
13
+ import '@radix-ui/react-dropdown-menu';
14
+ import '@radix-ui/react-tooltip';
15
+ import '@radix-ui/react-checkbox';
16
+ import '@radix-ui/react-select';
17
+ import '@radix-ui/react-switch';
18
+
19
+ /** Published name of this package. */
20
+ declare const PACKAGE_NAME: "@conductor-by-89soone/react";
21
+ /**
22
+ * Internal packages this entry point resolves through their published entry
23
+ * points rather than through source paths (FR-DX-001 AC-4). `@conductor-by-89soone/css` is
24
+ * a stylesheet the consumer imports itself; it is listed here because
25
+ * `@conductor-by-89soone/react` depends on its class names.
26
+ */
27
+ declare const CONSUMED_PACKAGES: readonly ["@conductor-by-89soone/tokens", "@conductor-by-89soone/css"];
28
+ /** Builds a Conductor block class name, e.g. `cdt-btn` (ADR-006, FR-CSS-004 AC-2). */
29
+ declare function blockClassName(block: string): string;
30
+
31
+ export { CONSUMED_PACKAGES, PACKAGE_NAME, blockClassName };
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ export { Badge, SeverityTag, StatusBadge } from './chunk-PXSSKHWF.js';
2
+ export { Card, CardGrid, Panel } from './chunk-TUHWL5JC.js';
3
+ export { Button, IconButton } from './chunk-EA2W7T64.js';
4
+ export { CodeBlock, Kbd, Table, Timeline } from './chunk-RBD5Z2LR.js';
5
+ export { Banner, EmptyState, Meter, ProgressRing, Spinner } from './chunk-NF3ZHADJ.js';
6
+ export { Checkbox, Field, Select, Switch, TextArea, TextField } from './chunk-FBQXGRI7.js';
7
+ export { Dialog, Drawer, DropdownMenu, Tooltip } from './chunk-MR7FIZKV.js';
8
+ export { AppShell, NavList, TopBar } from './chunk-VLBBY4MW.js';
9
+ export { cx } from './chunk-WEIMKRZV.js';
10
+ import { PACKAGE_NAME as PACKAGE_NAME$1, CDT_PREFIX } from '@conductor-by-89soone/tokens';
11
+
12
+ var PACKAGE_NAME = "@conductor-by-89soone/react";
13
+ var CONSUMED_PACKAGES = [PACKAGE_NAME$1, "@conductor-by-89soone/css"];
14
+ function blockClassName(block) {
15
+ return `${CDT_PREFIX}${block}`;
16
+ }
17
+
18
+ export { CONSUMED_PACKAGES, PACKAGE_NAME, blockClassName };
@@ -0,0 +1,60 @@
1
+ import * as react from 'react';
2
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
3
+ import * as RadixDialog from '@radix-ui/react-dialog';
4
+ import * as RadixDropdownMenu from '@radix-ui/react-dropdown-menu';
5
+ import * as RadixTooltip from '@radix-ui/react-tooltip';
6
+
7
+ type DialogContentProps = ComponentPropsWithoutRef<typeof RadixDialog.Content> & {
8
+ readonly size?: "sm" | "md";
9
+ };
10
+ declare const Dialog: {
11
+ readonly Root: react.FC<RadixDialog.DialogProps>;
12
+ readonly Trigger: react.ForwardRefExoticComponent<RadixDialog.DialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
13
+ readonly Content: react.ForwardRefExoticComponent<Omit<RadixDialog.DialogContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
14
+ readonly size?: "sm" | "md";
15
+ } & react.RefAttributes<HTMLDivElement>>;
16
+ readonly Title: react.ForwardRefExoticComponent<Omit<RadixDialog.DialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
17
+ readonly Description: react.ForwardRefExoticComponent<Omit<RadixDialog.DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
18
+ readonly Close: react.ForwardRefExoticComponent<RadixDialog.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
19
+ };
20
+ type DrawerContentProps = ComponentPropsWithoutRef<typeof RadixDialog.Content> & {
21
+ readonly side?: "left" | "right";
22
+ };
23
+ declare const Drawer: {
24
+ readonly Root: react.FC<RadixDialog.DialogProps>;
25
+ readonly Trigger: react.ForwardRefExoticComponent<RadixDialog.DialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
26
+ readonly Content: react.ForwardRefExoticComponent<Omit<RadixDialog.DialogContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
27
+ readonly side?: "left" | "right";
28
+ } & react.RefAttributes<HTMLDivElement>>;
29
+ readonly Title: react.ForwardRefExoticComponent<Omit<RadixDialog.DialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
30
+ readonly Description: react.ForwardRefExoticComponent<RadixDialog.DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>>;
31
+ readonly Close: react.ForwardRefExoticComponent<RadixDialog.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
32
+ };
33
+ type TooltipContentProps = ComponentPropsWithoutRef<typeof RadixTooltip.Content> & {
34
+ readonly showArrow?: boolean;
35
+ };
36
+ declare const Tooltip: {
37
+ readonly Provider: react.FC<RadixTooltip.TooltipProviderProps>;
38
+ readonly Root: react.FC<RadixTooltip.TooltipProps>;
39
+ readonly Trigger: react.ForwardRefExoticComponent<RadixTooltip.TooltipTriggerProps & react.RefAttributes<HTMLButtonElement>>;
40
+ readonly Content: react.ForwardRefExoticComponent<Omit<RadixTooltip.TooltipContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
41
+ readonly showArrow?: boolean;
42
+ } & react.RefAttributes<HTMLDivElement>>;
43
+ };
44
+ type DropdownMenuItemProps = ComponentPropsWithoutRef<typeof RadixDropdownMenu.Item> & {
45
+ readonly tone?: "neutral" | "danger";
46
+ readonly icon?: ReactNode;
47
+ };
48
+ declare const DropdownMenu: {
49
+ readonly Root: react.FC<RadixDropdownMenu.DropdownMenuProps>;
50
+ readonly Trigger: react.ForwardRefExoticComponent<RadixDropdownMenu.DropdownMenuTriggerProps & react.RefAttributes<HTMLButtonElement>>;
51
+ readonly Content: react.ForwardRefExoticComponent<Omit<RadixDropdownMenu.DropdownMenuContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
52
+ readonly Item: react.ForwardRefExoticComponent<Omit<RadixDropdownMenu.DropdownMenuItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
53
+ readonly tone?: "neutral" | "danger";
54
+ readonly icon?: ReactNode;
55
+ } & react.RefAttributes<HTMLDivElement>>;
56
+ readonly Label: react.ForwardRefExoticComponent<Omit<RadixDropdownMenu.DropdownMenuLabelProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
57
+ readonly Separator: react.ForwardRefExoticComponent<Omit<RadixDropdownMenu.DropdownMenuSeparatorProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
58
+ };
59
+
60
+ export { Dialog, type DialogContentProps, Drawer, type DrawerContentProps, DropdownMenu, type DropdownMenuItemProps, Tooltip, type TooltipContentProps };
@@ -0,0 +1,2 @@
1
+ export { Dialog, Drawer, DropdownMenu, Tooltip } from './chunk-MR7FIZKV.js';
2
+ import './chunk-WEIMKRZV.js';
@@ -0,0 +1,41 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ interface AppShellProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
5
+ readonly nav: ReactNode;
6
+ readonly topBar?: ReactNode;
7
+ readonly navOpen?: boolean;
8
+ readonly onNavOpenChange?: (open: boolean) => void;
9
+ readonly skipLinkLabel: string;
10
+ readonly mainId?: string;
11
+ readonly children: ReactNode;
12
+ }
13
+ declare const AppShell: react.ForwardRefExoticComponent<AppShellProps & react.RefAttributes<HTMLDivElement>>;
14
+ interface NavItem {
15
+ readonly id: string;
16
+ readonly label: string;
17
+ readonly href: string;
18
+ readonly icon?: ReactNode;
19
+ readonly active?: boolean;
20
+ readonly section?: string;
21
+ }
22
+ interface NavLinkRenderProps {
23
+ readonly className: string;
24
+ readonly "aria-current": "page" | undefined;
25
+ readonly children: ReactNode;
26
+ }
27
+ interface NavListProps extends Omit<HTMLAttributes<HTMLElement>, "children"> {
28
+ readonly items: readonly NavItem[];
29
+ readonly renderLink: (item: NavItem, props: NavLinkRenderProps) => ReactNode;
30
+ readonly "aria-label": string;
31
+ }
32
+ declare const NavList: react.ForwardRefExoticComponent<NavListProps & react.RefAttributes<HTMLElement>>;
33
+ interface TopBarProps extends Omit<HTMLAttributes<HTMLElement>, "children" | "title"> {
34
+ readonly eyebrow?: ReactNode;
35
+ readonly title?: ReactNode;
36
+ readonly actions?: ReactNode;
37
+ readonly menuButton?: ReactNode;
38
+ }
39
+ declare const TopBar: react.ForwardRefExoticComponent<TopBarProps & react.RefAttributes<HTMLElement>>;
40
+
41
+ export { AppShell, type AppShellProps, type NavItem, type NavLinkRenderProps, NavList, type NavListProps, TopBar, type TopBarProps };
package/dist/shell.js ADDED
@@ -0,0 +1,2 @@
1
+ export { AppShell, NavList, TopBar } from './chunk-VLBBY4MW.js';
2
+ import './chunk-WEIMKRZV.js';
@@ -0,0 +1,26 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+ import { Tone } from './types.js';
4
+
5
+ interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
6
+ readonly tone?: Tone;
7
+ readonly icon?: ReactNode;
8
+ readonly children: ReactNode;
9
+ }
10
+ declare const Badge: react.ForwardRefExoticComponent<BadgeProps & react.RefAttributes<HTMLSpanElement>>;
11
+ type Status = "queued" | "running" | "waiting" | "success" | "partial" | "danger" | "neutralEnd";
12
+ interface StatusBadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children"> {
13
+ readonly status: Status;
14
+ readonly icon: ReactNode;
15
+ readonly label: string;
16
+ }
17
+ declare const StatusBadge: react.ForwardRefExoticComponent<StatusBadgeProps & react.RefAttributes<HTMLSpanElement>>;
18
+ type Severity = "read" | "write" | "destructive" | "blocked";
19
+ interface SeverityTagProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children"> {
20
+ readonly severity: Severity;
21
+ readonly icon: ReactNode;
22
+ readonly label: string;
23
+ }
24
+ declare const SeverityTag: react.ForwardRefExoticComponent<SeverityTagProps & react.RefAttributes<HTMLSpanElement>>;
25
+
26
+ export { Badge, type BadgeProps, type Severity, SeverityTag, type SeverityTagProps, type Status, StatusBadge, type StatusBadgeProps };
package/dist/status.js ADDED
@@ -0,0 +1,2 @@
1
+ export { Badge, SeverityTag, StatusBadge } from './chunk-PXSSKHWF.js';
2
+ import './chunk-WEIMKRZV.js';
@@ -0,0 +1,21 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, MouseEventHandler, ReactNode } from 'react';
3
+ import { Size } from './types.js';
4
+
5
+ interface CardProps extends Omit<HTMLAttributes<HTMLElement>, "onClick"> {
6
+ readonly as?: "div" | "button" | "a";
7
+ readonly href?: string;
8
+ readonly onClick?: MouseEventHandler<HTMLElement>;
9
+ readonly size?: Size;
10
+ readonly children: ReactNode;
11
+ }
12
+ declare const Card: react.ForwardRefExoticComponent<CardProps & react.RefAttributes<HTMLElement>>;
13
+ type CardGridProps = HTMLAttributes<HTMLDivElement>;
14
+ declare const CardGrid: react.ForwardRefExoticComponent<CardGridProps & react.RefAttributes<HTMLDivElement>>;
15
+ interface PanelProps extends HTMLAttributes<HTMLElement> {
16
+ readonly as?: "div" | "section" | "aside";
17
+ readonly size?: Size;
18
+ }
19
+ declare const Panel: react.ForwardRefExoticComponent<PanelProps & react.RefAttributes<HTMLElement>>;
20
+
21
+ export { Card, CardGrid, type CardGridProps, type CardProps, Panel, type PanelProps };
@@ -0,0 +1,2 @@
1
+ export { Card, CardGrid, Panel } from './chunk-TUHWL5JC.js';
2
+ import './chunk-WEIMKRZV.js';
@@ -0,0 +1,10 @@
1
+ import { ReactNode, ElementType, ComponentPropsWithoutRef } from 'react';
2
+
3
+ /** Own props take precedence when they overlap native element props (FR-CMP-001 AC-4). */
4
+ type PolymorphicProps<E extends ElementType, Own> = Own & Omit<ComponentPropsWithoutRef<E>, keyof Own>;
5
+ type Tone = "neutral" | "accent" | "info" | "success" | "warning" | "danger";
6
+ type Size = "sm" | "md";
7
+ /** Icons are injected by consumers; Conductor does not bundle an icon set. */
8
+ type IconSlot = ReactNode;
9
+
10
+ export type { IconSlot, PolymorphicProps, Size, Tone };
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@conductor-by-89soone/react",
3
+ "version": "0.0.0",
4
+ "description": "Accessible React primitives for Conductor.",
5
+ "license": "MIT",
6
+ "homepage": "https://89sooner.github.io/design-system/",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/89sooner/design-system.git",
10
+ "directory": "packages/react"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "type": "module",
16
+ "sideEffects": false,
17
+ "types": "./dist/index.d.ts",
18
+ "files": [
19
+ "dist",
20
+ "README.md",
21
+ "LICENSE"
22
+ ],
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js"
27
+ },
28
+ "./package.json": "./package.json"
29
+ },
30
+ "dependencies": {
31
+ "@radix-ui/react-dialog": "1.1.19",
32
+ "@radix-ui/react-checkbox": "1.3.2",
33
+ "@radix-ui/react-dropdown-menu": "2.1.20",
34
+ "@radix-ui/react-select": "2.2.5",
35
+ "@radix-ui/react-switch": "1.2.5",
36
+ "@radix-ui/react-tooltip": "1.2.12",
37
+ "@conductor-by-89soone/css": "0.0.0",
38
+ "@conductor-by-89soone/tokens": "0.0.0"
39
+ },
40
+ "peerDependencies": {
41
+ "lucide-react": "^0.400.0",
42
+ "react": "^18.0.0 || ^19.0.0",
43
+ "react-dom": "^18.0.0 || ^19.0.0"
44
+ },
45
+ "devDependencies": {
46
+ "@testing-library/react": "^16.2.0",
47
+ "@types/react": "^19.0.8",
48
+ "@types/react-dom": "^19.0.3",
49
+ "jsdom": "^26.0.0",
50
+ "lucide-react": "^0.468.0",
51
+ "react": "^19.0.0",
52
+ "react-dom": "^19.0.0",
53
+ "tsup": "^8.3.6",
54
+ "typescript": "^5.7.3"
55
+ },
56
+ "scripts": {
57
+ "prebuild": "vitest run --project react src/testing/public-components.test.ts",
58
+ "build": "tsup",
59
+ "test": "vitest run --project react",
60
+ "typecheck": "tsc --noEmit -p tsconfig.json"
61
+ }
62
+ }