@stll/ui 0.60.0 → 0.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/calendar/day-calendar.logic.js +2 -2
- package/dist/components/bidi-text.d.ts +7 -0
- package/dist/components/bidi-text.js +22 -9
- package/dist/components/button.js +55 -3
- package/dist/components/collapsible.d.ts +26 -0
- package/dist/components/collapsible.js +40 -0
- package/dist/components/field.d.ts +6 -0
- package/dist/components/field.js +6 -0
- package/dist/components/form.d.ts +35 -1
- package/dist/components/form.js +29 -0
- package/dist/components/identity-text.js +4 -2
- package/dist/components/landing.js +1 -1
- package/dist/components/search-field.js +1 -0
- package/dist/components/segmented-icon-toggle.d.ts +2 -1
- package/dist/components/segmented-icon-toggle.js +18 -19
- package/dist/components/switch.d.ts +21 -2
- package/dist/components/switch.js +44 -5
- package/dist/components/table.d.ts +16 -2
- package/dist/components/table.js +5 -4
- package/dist/components/tabs.js +12 -1
- package/dist/components/toggle-group.d.ts +32 -0
- package/dist/components/toggle-group.js +45 -0
- package/dist/components/toggle.d.ts +26 -0
- package/dist/components/toggle.js +26 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.js +5 -2
- package/dist/inspector/chrome.js +2 -1
- package/dist/inspector/facet-bar.js +14 -8
- package/dist/kanban/column-bands.js +1 -1
- package/dist/lib/inline-reorder.js +3 -3
- package/dist/lib/tab-order.d.ts +19 -1
- package/dist/lib/tab-order.js +12 -10
- package/dist/review/review-comment-card.js +1 -1
- package/package.json +13 -1
|
@@ -146,7 +146,7 @@ const slotAt = (ms, options) => rangeFromDrag({
|
|
|
146
146
|
* member of a cluster shares the cluster's lane count, so their widths match.
|
|
147
147
|
*/
|
|
148
148
|
const layoutOverlaps = (ranges) => {
|
|
149
|
-
const sorted = ranges.
|
|
149
|
+
const sorted = [...ranges].sort((left, right) => left.startMs - right.startMs || right.endMs - left.endMs || compareIds(left.id, right.id));
|
|
150
150
|
const placements = /* @__PURE__ */ new Map();
|
|
151
151
|
const seen = /* @__PURE__ */ new Set();
|
|
152
152
|
let cluster = [];
|
|
@@ -186,7 +186,7 @@ const layoutOverlaps = (ranges) => {
|
|
|
186
186
|
* an earlier entry already uses it.
|
|
187
187
|
*/
|
|
188
188
|
const mergeShortSegments = (segments, { thresholdMs }) => {
|
|
189
|
-
const sorted = segments.
|
|
189
|
+
const sorted = [...segments].sort((left, right) => left.startMs - right.startMs || left.endMs - right.endMs || compareIds(left.id, right.id));
|
|
190
190
|
const merged = [];
|
|
191
191
|
const takenIds = new Set(segments.map(({ id }) => id));
|
|
192
192
|
let run = [];
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import * as React$1 from "react";
|
|
2
2
|
//#region src/components/bidi-text.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Isolation shields the text around a value, not the value itself: a
|
|
5
|
+
* directional control inside it still reorders its letters, so stored text
|
|
6
|
+
* loses those controls before it renders.
|
|
7
|
+
*/
|
|
8
|
+
export declare const stripDirectionalControls: (text: string) => string;
|
|
9
|
+
export declare const withoutDirectionalControls: (children: React$1.ReactNode) => React$1.ReactNode;
|
|
3
10
|
export declare const BidiText: (props: BidiTextProps) => React$1.JSX.Element;
|
|
4
11
|
export declare const UserText: typeof BidiText;
|
|
5
12
|
type BidiDirection = "auto" | "ltr" | "rtl";
|
|
@@ -2,37 +2,50 @@
|
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
//#region src/components/bidi-text.tsx
|
|
5
|
+
/** Explicit embeddings, overrides and isolates; implicit marks stay. */
|
|
6
|
+
const DIRECTIONAL_CONTROLS = /[\u202A-\u202E\u2066-\u2069]/gu;
|
|
7
|
+
/**
|
|
8
|
+
* Isolation shields the text around a value, not the value itself: a
|
|
9
|
+
* directional control inside it still reorders its letters, so stored text
|
|
10
|
+
* loses those controls before it renders.
|
|
11
|
+
*/
|
|
12
|
+
const stripDirectionalControls = (text) => text.replaceAll(DIRECTIONAL_CONTROLS, "");
|
|
13
|
+
const withoutDirectionalControls = (children) => typeof children === "string" ? stripDirectionalControls(children) : children;
|
|
5
14
|
const BidiText = (props) => {
|
|
6
15
|
if (props.as === "span") {
|
|
7
|
-
const { as: _as, className, direction = "auto", ...rest } = props;
|
|
16
|
+
const { as: _as, children, className, direction = "auto", ...rest } = props;
|
|
8
17
|
return /* @__PURE__ */ jsx("span", {
|
|
9
18
|
className: cn("[unicode-bidi:isolate]", className),
|
|
10
19
|
dir: direction,
|
|
11
|
-
...rest
|
|
20
|
+
...rest,
|
|
21
|
+
children: withoutDirectionalControls(children)
|
|
12
22
|
});
|
|
13
23
|
}
|
|
14
24
|
if (props.as === "div") {
|
|
15
|
-
const { as: _as, className, direction = "auto", ...rest } = props;
|
|
25
|
+
const { as: _as, children, className, direction = "auto", ...rest } = props;
|
|
16
26
|
return /* @__PURE__ */ jsx("div", {
|
|
17
27
|
className: cn("[unicode-bidi:isolate]", className),
|
|
18
28
|
dir: direction,
|
|
19
|
-
...rest
|
|
29
|
+
...rest,
|
|
30
|
+
children: withoutDirectionalControls(children)
|
|
20
31
|
});
|
|
21
32
|
}
|
|
22
33
|
if (props.as === "p") {
|
|
23
|
-
const { as: _as, className, direction = "auto", ...rest } = props;
|
|
34
|
+
const { as: _as, children, className, direction = "auto", ...rest } = props;
|
|
24
35
|
return /* @__PURE__ */ jsx("p", {
|
|
25
36
|
className: cn("[unicode-bidi:isolate]", className),
|
|
26
37
|
dir: direction,
|
|
27
|
-
...rest
|
|
38
|
+
...rest,
|
|
39
|
+
children: withoutDirectionalControls(children)
|
|
28
40
|
});
|
|
29
41
|
}
|
|
30
|
-
const { as: _as, direction = "auto", ...rest } = props;
|
|
42
|
+
const { as: _as, children, direction = "auto", ...rest } = props;
|
|
31
43
|
return /* @__PURE__ */ jsx("bdi", {
|
|
32
44
|
dir: direction,
|
|
33
|
-
...rest
|
|
45
|
+
...rest,
|
|
46
|
+
children: withoutDirectionalControls(children)
|
|
34
47
|
});
|
|
35
48
|
};
|
|
36
49
|
const UserText = BidiText;
|
|
37
50
|
//#endregion
|
|
38
|
-
export { BidiText, UserText };
|
|
51
|
+
export { BidiText, UserText, stripDirectionalControls, withoutDirectionalControls };
|
|
@@ -6,6 +6,7 @@ import { MENU_ROW_CLASS_NAME } from "../lib/menu-row.js";
|
|
|
6
6
|
import { BUTTON_PLAIN_VARIANT, BUTTON_VARIANT_TOKENS } from "./button.shared.js";
|
|
7
7
|
import { Loader } from "./loader.js";
|
|
8
8
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { Fragment as Fragment$1, isValidElement } from "react";
|
|
9
10
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
10
11
|
import { useRender } from "@base-ui/react/use-render";
|
|
11
12
|
import { panic } from "better-result";
|
|
@@ -65,7 +66,7 @@ const BUTTON_VARIANT_CLASS_NAMES = {
|
|
|
65
66
|
outline: `${tokens("outline")} dark:bg-input/32 data-pressed:border-primary/48 data-pressed:bg-accent dark:data-pressed:bg-input/64 [:hover:not([data-pressed])]:bg-accent/50 dark:[:hover:not([data-pressed])]:bg-input/64 shadow-xs/5 not-dark:bg-clip-padding not-disabled:not-active:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] dark:not-disabled:before:shadow-[0_-1px_--theme(--color-white/2%)] dark:not-disabled:not-active:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/6%)] [:disabled,:active,[data-pressed]]:shadow-none`,
|
|
66
67
|
secondary: `${tokens("secondary")} data-pressed:bg-background data-pressed:inset-ring-input active:bg-secondary/80 [:hover:not([data-pressed])]:bg-secondary/90 data-pressed:shadow-xs/5 data-pressed:inset-ring`
|
|
67
68
|
};
|
|
68
|
-
const buttonVariants = cva("focus-visible:ring-ring focus-visible:ring-offset-background relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-lg border text-base font-medium whitespace-nowrap outline-none select-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] focus-visible:ring-2 focus-visible:ring-offset-1 disabled:pointer-events-none disabled:opacity-64 sm:text-sm pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4", {
|
|
69
|
+
const buttonVariants = cva("focus-visible:ring-ring focus-visible:ring-offset-background relative inline-flex max-w-full shrink-0 cursor-pointer items-center justify-center gap-2 rounded-lg border text-base font-medium whitespace-nowrap outline-none select-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] focus-visible:ring-2 focus-visible:ring-offset-1 disabled:pointer-events-none disabled:opacity-64 sm:text-sm pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4", {
|
|
69
70
|
compoundVariants: [{
|
|
70
71
|
className: "[:hover:not([data-pressed])]:bg-transparent",
|
|
71
72
|
size: "inline",
|
|
@@ -105,7 +106,7 @@ const buttonVariants = cva("focus-visible:ring-ring focus-visible:ring-offset-ba
|
|
|
105
106
|
* inside the box: an outline paints above the content, so a card's own
|
|
106
107
|
* surface cannot cover it the way it would cover an inset shadow.
|
|
107
108
|
*/
|
|
108
|
-
const BUTTON_PLAIN_CLASS = "focus-visible:ring-ring focus-visible:ring-offset-background data-pressed:outline-primary/48 relative inline-block cursor-pointer text-start outline-none focus-visible:ring-2 focus-visible:ring-offset-1 disabled:cursor-default data-pressed:outline-2 data-pressed:-outline-offset-2 data-pressed:outline-solid";
|
|
109
|
+
const BUTTON_PLAIN_CLASS = "focus-visible:ring-ring focus-visible:ring-offset-background data-pressed:outline-primary/48 relative inline-block max-w-full cursor-pointer text-start outline-none focus-visible:ring-2 focus-visible:ring-offset-1 disabled:cursor-default data-pressed:outline-2 data-pressed:-outline-offset-2 data-pressed:outline-solid";
|
|
109
110
|
/**
|
|
110
111
|
* The outline a plain button's focus ring follows, matching its content:
|
|
111
112
|
* `box` for a card, row or block of text (the container radius), `round` for
|
|
@@ -148,6 +149,53 @@ const BUTTON_SIZE_CONTENT = {
|
|
|
148
149
|
xl: BUTTON_CONTENT.text,
|
|
149
150
|
xs: BUTTON_CONTENT.text
|
|
150
151
|
};
|
|
152
|
+
/**
|
|
153
|
+
* A button never grows past its container (`max-w-full` on every variant).
|
|
154
|
+
* A one-line text label is cut to fit with an ellipsis; the button's
|
|
155
|
+
* accessible name keeps the whole text, and `tooltip` can show it. The label
|
|
156
|
+
* is a plain span, not a `TruncatedText`: a tooltip root in every button's
|
|
157
|
+
* label would cost every screen with many buttons. `layout="wrap"` lets a
|
|
158
|
+
* label take several lines instead. An inline button is a word in a sentence
|
|
159
|
+
* and a plain button lays out its own content, so neither has a one-line
|
|
160
|
+
* label to cut.
|
|
161
|
+
*/
|
|
162
|
+
const BUTTON_LABEL_CLASS = "block min-w-0 truncate";
|
|
163
|
+
const cutsLabel = ({ layout, size, variant }) => layout === void 0 && variant !== "plain" && variant !== "link" && size !== "inline" && BUTTON_SIZE_CONTENT[size ?? BUTTON_DEFAULT_SIZE] === BUTTON_CONTENT.text;
|
|
164
|
+
/**
|
|
165
|
+
* Each run of adjacent text among the children, cut to the button's width.
|
|
166
|
+
* Adjacent text (`Save {count} files`) stays one run, as it is one flex item
|
|
167
|
+
* in the button's box; children React renders as nothing (`null`, `false`)
|
|
168
|
+
* do not split it. Every other child keeps its place in a fragment keyed by
|
|
169
|
+
* its own key, or by its position when it has none, so keyed children keep
|
|
170
|
+
* their state when they move.
|
|
171
|
+
*/
|
|
172
|
+
const containedLabel = (children) => {
|
|
173
|
+
const items = Array.isArray(children) ? children : [children];
|
|
174
|
+
const parts = [];
|
|
175
|
+
let run = [];
|
|
176
|
+
const closeRun = () => {
|
|
177
|
+
if (run.length > 0) {
|
|
178
|
+
parts.push(/* @__PURE__ */ jsx("span", {
|
|
179
|
+
className: BUTTON_LABEL_CLASS,
|
|
180
|
+
"data-slot": "button-label",
|
|
181
|
+
children: run
|
|
182
|
+
}, `label:${String(parts.length)}`));
|
|
183
|
+
run = [];
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
for (const child of items) {
|
|
187
|
+
if (child === null || child === void 0 || typeof child === "boolean") continue;
|
|
188
|
+
if (typeof child === "string" || typeof child === "number") {
|
|
189
|
+
run.push(child);
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
closeRun();
|
|
193
|
+
const key = isValidElement(child) && child.key !== null ? `key:${child.key}` : `part:${String(parts.length)}`;
|
|
194
|
+
parts.push(/* @__PURE__ */ jsx(Fragment$1, { children: child }, key));
|
|
195
|
+
}
|
|
196
|
+
closeRun();
|
|
197
|
+
return parts;
|
|
198
|
+
};
|
|
151
199
|
const implicitTooltip = (size, accessibleName) => {
|
|
152
200
|
const content = BUTTON_SIZE_CONTENT[size ?? BUTTON_DEFAULT_SIZE];
|
|
153
201
|
switch (content) {
|
|
@@ -174,7 +222,11 @@ function Button({ className, variant: variantProp, size, render, layout, loading
|
|
|
174
222
|
"data-slot": "button-loader",
|
|
175
223
|
size: "sm",
|
|
176
224
|
variant: "decorative"
|
|
177
|
-
}) : icon,
|
|
225
|
+
}) : icon, cutsLabel({
|
|
226
|
+
layout,
|
|
227
|
+
size,
|
|
228
|
+
variant
|
|
229
|
+
}) ? containedLabel(children) : children] }),
|
|
178
230
|
className: cn(variant === "plain" ? cn(BUTTON_PLAIN_CLASS, BUTTON_PLAIN_SHAPE_CLASS[shape], className) : cn(disposition === BUTTON_DISPOSITION.enabled && !isActivationPreservingDisabled && size !== "row" && size !== "inline" && variant !== "link" && buttonPressClass, buttonVariants({
|
|
179
231
|
className,
|
|
180
232
|
size,
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
|
|
2
|
+
//#region src/components/collapsible.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* One disclosure: a trigger that shows or hides a single panel ("Show
|
|
5
|
+
* details" under a card, a step list in a transcript). A set of sections
|
|
6
|
+
* where each heading opens its own panel is an `Accordion`.
|
|
7
|
+
*
|
|
8
|
+
* The trigger draws nothing of its own. It takes its look from what it
|
|
9
|
+
* renders, usually a `Button` (`render={<Button variant="muted" />}` for a
|
|
10
|
+
* text toggle), so a disclosure reads like every other action of its size.
|
|
11
|
+
*/
|
|
12
|
+
declare const Collapsible: (props: Collapsible$1.Root.Props) => import("react").JSX.Element;
|
|
13
|
+
declare const CollapsibleTrigger: (props: Collapsible$1.Trigger.Props) => import("react").JSX.Element;
|
|
14
|
+
/**
|
|
15
|
+
* The disclosed content. It adds no padding or type, so opening it reveals
|
|
16
|
+
* content at the rhythm of the surface around it, as a native `<details>`
|
|
17
|
+
* does. Its height eases open and shut with the accordion's timing, so the
|
|
18
|
+
* two disclosures move alike; under reduced motion it snaps.
|
|
19
|
+
*
|
|
20
|
+
* Closed, the content stays in the document as `hidden="until-found"` (as a
|
|
21
|
+
* native `<details>` keeps it), so find-in-page still reaches it and opens
|
|
22
|
+
* the panel. Pass `hiddenUntilFound={false}` to unmount it instead.
|
|
23
|
+
*/
|
|
24
|
+
declare const CollapsiblePanel: ({ className, hiddenUntilFound, ...props }: Collapsible$1.Panel.Props) => import("react").JSX.Element;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { Collapsible, CollapsiblePanel, CollapsibleTrigger };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
|
|
5
|
+
//#region src/components/collapsible.tsx
|
|
6
|
+
/**
|
|
7
|
+
* One disclosure: a trigger that shows or hides a single panel ("Show
|
|
8
|
+
* details" under a card, a step list in a transcript). A set of sections
|
|
9
|
+
* where each heading opens its own panel is an `Accordion`.
|
|
10
|
+
*
|
|
11
|
+
* The trigger draws nothing of its own. It takes its look from what it
|
|
12
|
+
* renders, usually a `Button` (`render={<Button variant="muted" />}` for a
|
|
13
|
+
* text toggle), so a disclosure reads like every other action of its size.
|
|
14
|
+
*/
|
|
15
|
+
const Collapsible = (props) => /* @__PURE__ */ jsx(Collapsible$1.Root, {
|
|
16
|
+
"data-slot": "collapsible",
|
|
17
|
+
...props
|
|
18
|
+
});
|
|
19
|
+
const CollapsibleTrigger = (props) => /* @__PURE__ */ jsx(Collapsible$1.Trigger, {
|
|
20
|
+
"data-slot": "collapsible-trigger",
|
|
21
|
+
...props
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* The disclosed content. It adds no padding or type, so opening it reveals
|
|
25
|
+
* content at the rhythm of the surface around it, as a native `<details>`
|
|
26
|
+
* does. Its height eases open and shut with the accordion's timing, so the
|
|
27
|
+
* two disclosures move alike; under reduced motion it snaps.
|
|
28
|
+
*
|
|
29
|
+
* Closed, the content stays in the document as `hidden="until-found"` (as a
|
|
30
|
+
* native `<details>` keeps it), so find-in-page still reaches it and opens
|
|
31
|
+
* the panel. Pass `hiddenUntilFound={false}` to unmount it instead.
|
|
32
|
+
*/
|
|
33
|
+
const CollapsiblePanel = ({ className, hiddenUntilFound = true, ...props }) => /* @__PURE__ */ jsx(Collapsible$1.Panel, {
|
|
34
|
+
className: cn("h-(--collapsible-panel-height) min-w-0 overflow-hidden transition-[height] duration-200 ease-in-out data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none [&[hidden]:not([hidden=until-found])]:hidden", className),
|
|
35
|
+
"data-slot": "collapsible-panel",
|
|
36
|
+
hiddenUntilFound,
|
|
37
|
+
...props
|
|
38
|
+
});
|
|
39
|
+
//#endregion
|
|
40
|
+
export { Collapsible, CollapsiblePanel, CollapsibleTrigger };
|
|
@@ -4,6 +4,12 @@ declare const Field: ({ className, ...props }: Field$1.Root.Props) => import("re
|
|
|
4
4
|
declare const FieldLabel: ({ className, ...props }: Field$1.Label.Props) => import("react").JSX.Element;
|
|
5
5
|
declare const FieldItem: ({ className, ...props }: Field$1.Item.Props) => import("react").JSX.Element;
|
|
6
6
|
declare const FieldDescription: ({ className, ...props }: Field$1.Description.Props) => import("react").JSX.Element;
|
|
7
|
+
/**
|
|
8
|
+
* The message for an invalid field. With no `match` it shows whatever error
|
|
9
|
+
* the field has, including one the `Form` received in `errors` from the
|
|
10
|
+
* server; with a validity key (`match="valueMissing"`) it shows only for that
|
|
11
|
+
* constraint, so each rule can be worded on its own. See `Form`.
|
|
12
|
+
*/
|
|
7
13
|
declare const FieldError: ({ className, ...props }: Field$1.Error.Props) => import("react").JSX.Element;
|
|
8
14
|
declare const FieldControl: import("react").ForwardRefExoticComponent<Omit<import("@base-ui/react").FieldControlProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
9
15
|
declare const FieldValidity: import("react").FC<import("@base-ui/react").FieldValidityProps>;
|
package/dist/components/field.js
CHANGED
|
@@ -23,6 +23,12 @@ const FieldDescription = ({ className, ...props }) => /* @__PURE__ */ jsx(Field$
|
|
|
23
23
|
"data-slot": "field-description",
|
|
24
24
|
...props
|
|
25
25
|
});
|
|
26
|
+
/**
|
|
27
|
+
* The message for an invalid field. With no `match` it shows whatever error
|
|
28
|
+
* the field has, including one the `Form` received in `errors` from the
|
|
29
|
+
* server; with a validity key (`match="valueMissing"`) it shows only for that
|
|
30
|
+
* constraint, so each rule can be worded on its own. See `Form`.
|
|
31
|
+
*/
|
|
26
32
|
const FieldError = ({ className, ...props }) => /* @__PURE__ */ jsx(Field$1.Error, {
|
|
27
33
|
className: cn("text-destructive-foreground text-xs", className),
|
|
28
34
|
"data-slot": "field-error",
|
|
@@ -5,10 +5,44 @@ declare const formVariants: (props?: ({
|
|
|
5
5
|
density?: "compact" | "default" | "snug" | null | undefined;
|
|
6
6
|
layout?: "inline" | "stack" | null | undefined;
|
|
7
7
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Errors a server returned for the last submit, keyed by each `Field`'s
|
|
10
|
+
* `name`: one message or several.
|
|
11
|
+
*/
|
|
12
|
+
type FormErrors = NonNullable<Form$1.Props["errors"]>;
|
|
8
13
|
type FormProps = Form$1.Props & VariantProps<typeof formVariants> & {
|
|
9
14
|
dirty?: boolean;
|
|
10
15
|
onDiscard?: (() => void) | undefined;
|
|
11
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* A form whose fields report their own errors.
|
|
19
|
+
*
|
|
20
|
+
* Validation, in the order a reader meets it:
|
|
21
|
+
*
|
|
22
|
+
* - **In the browser.** A `Field` reads its control's constraints
|
|
23
|
+
* (`required`, `type`, `pattern`, `min`/`max`, a `validate` function) and
|
|
24
|
+
* shows a `FieldError` for the ones that fail. `validationMode` stays
|
|
25
|
+
* Base UI's `onSubmit`: nothing is flagged while a person tabs through an
|
|
26
|
+
* empty form, the first submit marks every invalid field at once, and from
|
|
27
|
+
* then on each field re-validates as it changes. `onBlur` would flag a
|
|
28
|
+
* required field the moment focus passes it, before anyone tried to submit;
|
|
29
|
+
* pass it only where checking a value as soon as it is left is the point
|
|
30
|
+
* (an availability check, a long identifier).
|
|
31
|
+
* - **From the server.** Pass what the server rejected as `errors`, keyed by
|
|
32
|
+
* field `name` (`{ email: "Already invited" }`). The field turns invalid,
|
|
33
|
+
* its control gets `aria-invalid`, and its `FieldError` shows the message.
|
|
34
|
+
* Base UI drops a field's server error as soon as its value changes, so a
|
|
35
|
+
* correction clears the message without a round trip. Keep the errors in
|
|
36
|
+
* state and replace them on the next submit.
|
|
37
|
+
*
|
|
38
|
+
* In a `FieldError`, leave `match` unset to show whichever error the field
|
|
39
|
+
* has, the server's included; `match="valueMissing"` (or another validity
|
|
40
|
+
* key) words one constraint in the product's voice; `match` set to `true`
|
|
41
|
+
* hands visibility to the caller.
|
|
42
|
+
*
|
|
43
|
+
* `dirty` and `onDiscard` register the form with an enclosing `Dialog`'s
|
|
44
|
+
* unsaved-changes guard.
|
|
45
|
+
*/
|
|
12
46
|
declare const Form: ({ className, density, layout, dirty, onDiscard, children, ...props }: FormProps) => import("react").JSX.Element;
|
|
13
47
|
//#endregion
|
|
14
|
-
export { Form, type FormProps, formVariants };
|
|
48
|
+
export { Form, type FormErrors, type FormProps, formVariants };
|
package/dist/components/form.js
CHANGED
|
@@ -22,6 +22,35 @@ const formVariants = cva("flex w-full", {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
+
/**
|
|
26
|
+
* A form whose fields report their own errors.
|
|
27
|
+
*
|
|
28
|
+
* Validation, in the order a reader meets it:
|
|
29
|
+
*
|
|
30
|
+
* - **In the browser.** A `Field` reads its control's constraints
|
|
31
|
+
* (`required`, `type`, `pattern`, `min`/`max`, a `validate` function) and
|
|
32
|
+
* shows a `FieldError` for the ones that fail. `validationMode` stays
|
|
33
|
+
* Base UI's `onSubmit`: nothing is flagged while a person tabs through an
|
|
34
|
+
* empty form, the first submit marks every invalid field at once, and from
|
|
35
|
+
* then on each field re-validates as it changes. `onBlur` would flag a
|
|
36
|
+
* required field the moment focus passes it, before anyone tried to submit;
|
|
37
|
+
* pass it only where checking a value as soon as it is left is the point
|
|
38
|
+
* (an availability check, a long identifier).
|
|
39
|
+
* - **From the server.** Pass what the server rejected as `errors`, keyed by
|
|
40
|
+
* field `name` (`{ email: "Already invited" }`). The field turns invalid,
|
|
41
|
+
* its control gets `aria-invalid`, and its `FieldError` shows the message.
|
|
42
|
+
* Base UI drops a field's server error as soon as its value changes, so a
|
|
43
|
+
* correction clears the message without a round trip. Keep the errors in
|
|
44
|
+
* state and replace them on the next submit.
|
|
45
|
+
*
|
|
46
|
+
* In a `FieldError`, leave `match` unset to show whichever error the field
|
|
47
|
+
* has, the server's included; `match="valueMissing"` (or another validity
|
|
48
|
+
* key) words one constraint in the product's voice; `match` set to `true`
|
|
49
|
+
* hands visibility to the caller.
|
|
50
|
+
*
|
|
51
|
+
* `dirty` and `onDiscard` register the form with an enclosing `Dialog`'s
|
|
52
|
+
* unsaved-changes guard.
|
|
53
|
+
*/
|
|
25
54
|
const Form = ({ className, density, layout, dirty = false, onDiscard, children, ...props }) => /* @__PURE__ */ jsxs(Form$1, {
|
|
26
55
|
className: cn(formVariants({
|
|
27
56
|
density,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
3
|
import { Tooltip, TooltipContent as TooltipPopup, TooltipTrigger } from "./tooltip.js";
|
|
4
|
+
import { withoutDirectionalControls } from "./bidi-text.js";
|
|
4
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
6
|
import { useCallback, useId, useState } from "react";
|
|
6
7
|
//#region src/components/identity-text.tsx
|
|
@@ -10,6 +11,7 @@ const IdentityText = ({ children, className }) => {
|
|
|
10
11
|
const [overflow, setOverflow] = useState(false);
|
|
11
12
|
const [hasFocusOwner, setHasFocusOwner] = useState(false);
|
|
12
13
|
const [open, setOpen] = useState(false);
|
|
14
|
+
const name = withoutDirectionalControls(children);
|
|
13
15
|
const textRef = useCallback((node) => {
|
|
14
16
|
if (node === null) return;
|
|
15
17
|
const measure = () => setOverflow(node.scrollWidth > node.clientWidth);
|
|
@@ -56,14 +58,14 @@ const IdentityText = ({ children, className }) => {
|
|
|
56
58
|
role: overflow && !hasFocusOwner ? "button" : void 0,
|
|
57
59
|
tabIndex: overflow && !hasFocusOwner ? 0 : void 0
|
|
58
60
|
}),
|
|
59
|
-
children
|
|
61
|
+
children: name
|
|
60
62
|
}), /* @__PURE__ */ jsx(TooltipPopup, {
|
|
61
63
|
className: "max-w-sm",
|
|
62
64
|
role: "tooltip",
|
|
63
65
|
children: /* @__PURE__ */ jsx("span", {
|
|
64
66
|
className: "block max-w-sm wrap-break-word",
|
|
65
67
|
dir: "auto",
|
|
66
|
-
children
|
|
68
|
+
children: name
|
|
67
69
|
})
|
|
68
70
|
})]
|
|
69
71
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
|
-
import { ScrollArea } from "./scroll-area.js";
|
|
4
3
|
import { BidiText } from "./bidi-text.js";
|
|
4
|
+
import { ScrollArea } from "./scroll-area.js";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
//#region src/components/landing.tsx
|
|
7
7
|
const LandingLayout = ({ actions, hero, children, footer }) => /* @__PURE__ */ jsxs("div", {
|
|
@@ -16,7 +16,8 @@ type SegmentedIconToggleProps<T extends string> = {
|
|
|
16
16
|
};
|
|
17
17
|
/** Compact segmented control of icon buttons (e.g. table row wrap, list
|
|
18
18
|
* density). One shared shell so every density/mode switch looks and behaves
|
|
19
|
-
* the same across the app.
|
|
19
|
+
* the same across the app. A `ToggleGroup` of icon items that always holds
|
|
20
|
+
* one value: clicking the chosen option keeps it. */
|
|
20
21
|
export declare const SegmentedIconToggle: <T extends string>({ value, options, onChange, size }: SegmentedIconToggleProps<T>) => import("react").JSX.Element;
|
|
21
22
|
//#endregion
|
|
22
23
|
export {};
|
|
@@ -1,31 +1,30 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ToggleGroup, ToggleGroupItem } from "./toggle-group.js";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
5
|
//#region src/components/segmented-icon-toggle.tsx
|
|
7
6
|
/** Compact segmented control of icon buttons (e.g. table row wrap, list
|
|
8
7
|
* density). One shared shell so every density/mode switch looks and behaves
|
|
9
|
-
* the same across the app.
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
* the same across the app. A `ToggleGroup` of icon items that always holds
|
|
9
|
+
* one value: clicking the chosen option keeps it. */
|
|
10
|
+
const SegmentedIconToggle = ({ value, options, onChange, size = "compact" }) => /* @__PURE__ */ jsx(ToggleGroup, {
|
|
11
|
+
className: cn("rounded-md", size === "touch" ? "h-7 [@media(any-pointer:coarse)]:h-12" : "h-7"),
|
|
12
12
|
"data-slot": "segmented-icon-toggle",
|
|
13
|
+
onValueChange: (next) => {
|
|
14
|
+
const [chosen] = next;
|
|
15
|
+
if (chosen !== void 0 && chosen !== value) onChange(chosen);
|
|
16
|
+
},
|
|
17
|
+
value: [value],
|
|
13
18
|
children: options.map((option) => {
|
|
14
19
|
const Icon = option.icon;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"data-control-value": option.value,
|
|
22
|
-
onClick: () => onChange(option.value),
|
|
23
|
-
size: "icon-xs",
|
|
24
|
-
type: "button",
|
|
25
|
-
variant: "ghost"
|
|
26
|
-
}),
|
|
20
|
+
return /* @__PURE__ */ jsx(ToggleGroupItem, {
|
|
21
|
+
"aria-label": option.label,
|
|
22
|
+
className: cn("h-6 w-7 rounded-[4px] sm:h-6", size === "touch" && "[@media(any-pointer:coarse)]:h-11 [@media(any-pointer:coarse)]:w-11"),
|
|
23
|
+
"data-control-value": option.value,
|
|
24
|
+
size: "icon-xs",
|
|
25
|
+
value: option.value,
|
|
27
26
|
children: /* @__PURE__ */ jsx(Icon, { className: "size-3.5" })
|
|
28
|
-
}
|
|
27
|
+
}, option.value);
|
|
29
28
|
})
|
|
30
29
|
});
|
|
31
30
|
//#endregion
|
|
@@ -1,5 +1,24 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
1
2
|
import { Switch as Switch$1 } from "@base-ui/react/switch";
|
|
2
3
|
//#region src/components/switch.d.ts
|
|
3
|
-
|
|
4
|
+
/**
|
|
5
|
+
* `default` is a setting's own control; `sm` sits in a dense row or a menu
|
|
6
|
+
* beside small type.
|
|
7
|
+
*/
|
|
8
|
+
type SwitchSize = "sm" | "default";
|
|
9
|
+
type SwitchProps = Switch$1.Root.Props & {
|
|
10
|
+
size?: SwitchSize | undefined;
|
|
11
|
+
};
|
|
12
|
+
declare const Switch: ({ className, size, ...props }: SwitchProps) => React$1.JSX.Element;
|
|
13
|
+
/**
|
|
14
|
+
* A setting row: its label and an optional description at the start, the
|
|
15
|
+
* switch at the end. The whole row is the label, so a click anywhere on it
|
|
16
|
+
* flips the switch, and the row is at least 44px tall for touch. The
|
|
17
|
+
* description is linked to the switch, so it is read after the name.
|
|
18
|
+
*/
|
|
19
|
+
declare const SwitchField: ({ className, description, label, size, ...props }: SwitchProps & {
|
|
20
|
+
label: React$1.ReactNode;
|
|
21
|
+
description?: React$1.ReactNode;
|
|
22
|
+
}) => React$1.JSX.Element;
|
|
4
23
|
//#endregion
|
|
5
|
-
export { Switch };
|
|
24
|
+
export { Switch, SwitchField, type SwitchProps, type SwitchSize };
|
|
@@ -1,16 +1,55 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { useId } from "react";
|
|
4
5
|
import { Switch as Switch$1 } from "@base-ui/react/switch";
|
|
5
6
|
//#region src/components/switch.tsx
|
|
6
|
-
const
|
|
7
|
-
|
|
7
|
+
const SWITCH_ROOT_SIZE_CLASS_NAME = {
|
|
8
|
+
default: "h-5 w-9",
|
|
9
|
+
sm: "h-4 w-7"
|
|
10
|
+
};
|
|
11
|
+
const SWITCH_THUMB_SIZE_CLASS_NAME = {
|
|
12
|
+
default: "size-4 ltr:data-checked:translate-x-4.5 ltr:data-unchecked:translate-x-0.5 rtl:data-checked:-translate-x-4.5 rtl:data-unchecked:-translate-x-0.5",
|
|
13
|
+
sm: "size-3 ltr:data-checked:translate-x-3.5 ltr:data-unchecked:translate-x-0.5 rtl:data-checked:-translate-x-3.5 rtl:data-unchecked:-translate-x-0.5"
|
|
14
|
+
};
|
|
15
|
+
const Switch = ({ className, size = "default", ...props }) => /* @__PURE__ */ jsx(Switch$1.Root, {
|
|
16
|
+
className: cn("focus-visible:ring-ring focus-visible:ring-offset-background data-checked:bg-primary data-unchecked:bg-input relative inline-flex shrink-0 items-center rounded-full outline-none focus-visible:ring-2 focus-visible:ring-offset-1 data-disabled:opacity-64", SWITCH_ROOT_SIZE_CLASS_NAME[size], className),
|
|
17
|
+
"data-size": size,
|
|
8
18
|
"data-slot": "switch",
|
|
9
19
|
...props,
|
|
10
20
|
children: /* @__PURE__ */ jsx(Switch$1.Thumb, {
|
|
11
|
-
className: "bg-background pointer-events-none block
|
|
21
|
+
className: cn("bg-background pointer-events-none block rounded-full shadow-xs transition-transform", SWITCH_THUMB_SIZE_CLASS_NAME[size]),
|
|
12
22
|
"data-slot": "switch-thumb"
|
|
13
23
|
})
|
|
14
24
|
});
|
|
25
|
+
/**
|
|
26
|
+
* A setting row: its label and an optional description at the start, the
|
|
27
|
+
* switch at the end. The whole row is the label, so a click anywhere on it
|
|
28
|
+
* flips the switch, and the row is at least 44px tall for touch. The
|
|
29
|
+
* description is linked to the switch, so it is read after the name.
|
|
30
|
+
*/
|
|
31
|
+
const SwitchField = ({ className, description, label, size, ...props }) => {
|
|
32
|
+
const descriptionId = useId();
|
|
33
|
+
return /* @__PURE__ */ jsxs("label", {
|
|
34
|
+
className: cn("flex min-h-11 cursor-pointer items-center justify-between gap-4 py-2 has-data-disabled:cursor-not-allowed", className),
|
|
35
|
+
"data-slot": "switch-field",
|
|
36
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
37
|
+
className: "flex min-w-0 flex-col gap-0.5 in-[label:has([data-disabled])]:opacity-64",
|
|
38
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
39
|
+
className: "text-foreground text-sm font-medium",
|
|
40
|
+
children: label
|
|
41
|
+
}), description === void 0 ? null : /* @__PURE__ */ jsx("span", {
|
|
42
|
+
className: "text-muted-foreground text-xs",
|
|
43
|
+
"data-slot": "switch-field-description",
|
|
44
|
+
id: descriptionId,
|
|
45
|
+
children: description
|
|
46
|
+
})]
|
|
47
|
+
}), /* @__PURE__ */ jsx(Switch, {
|
|
48
|
+
"aria-describedby": description === void 0 ? void 0 : descriptionId,
|
|
49
|
+
size,
|
|
50
|
+
...props
|
|
51
|
+
})]
|
|
52
|
+
});
|
|
53
|
+
};
|
|
15
54
|
//#endregion
|
|
16
|
-
export { Switch };
|
|
55
|
+
export { Switch, SwitchField };
|
|
@@ -14,11 +14,25 @@ type TableInset = "default" | "card";
|
|
|
14
14
|
* become the reference box of a sticky header and stop it from sticking.
|
|
15
15
|
*/
|
|
16
16
|
type TableScroll = "self" | "parent";
|
|
17
|
+
/**
|
|
18
|
+
* How tightly a table sets its cells.
|
|
19
|
+
*
|
|
20
|
+
* `default` is a data table: padded cells on one line, rows that light up
|
|
21
|
+
* under the pointer. `compact` is a small reading table inside a card or a
|
|
22
|
+
* review (a term set against a standard, a presence matrix): cells sit at
|
|
23
|
+
* text leading with no side padding, headings keep a trailing gap so a
|
|
24
|
+
* right-aligned heading never touches the next column, values wrap, and rows
|
|
25
|
+
* do not highlight because nothing in them is a row-wide target. A row
|
|
26
|
+
* header (`<TableHead scope="row">`) in a compact body reads as the row's
|
|
27
|
+
* first cell rather than as a column heading.
|
|
28
|
+
*/
|
|
29
|
+
type TableDensity = "default" | "compact";
|
|
17
30
|
type TableProps = React$1.ComponentProps<"table"> & {
|
|
31
|
+
density?: TableDensity;
|
|
18
32
|
inset?: TableInset;
|
|
19
33
|
scroll?: TableScroll;
|
|
20
34
|
};
|
|
21
|
-
declare const Table: ({ className, inset, scroll, ...props }: TableProps) => React$1.JSX.Element;
|
|
35
|
+
declare const Table: ({ className, density, inset, scroll, ...props }: TableProps) => React$1.JSX.Element;
|
|
22
36
|
type TableHeaderProps = React$1.ComponentProps<"thead"> & {
|
|
23
37
|
/**
|
|
24
38
|
* `muted` lays the header row on a muted band, separating it from the rows
|
|
@@ -95,4 +109,4 @@ type SortableHeadProps = Omit<TableHeadProps, "onClick"> & {
|
|
|
95
109
|
declare const SortableHead: ({ children, sortDirection, onSort, trailing, className, align, numeric, ...props }: SortableHeadProps) => React$1.JSX.Element;
|
|
96
110
|
declare const TableCaption: ({ className, ...props }: React$1.ComponentProps<"caption">) => React$1.JSX.Element;
|
|
97
111
|
//#endregion
|
|
98
|
-
export { type SortDirection, SortableHead, Table, type TableAlign, TableBody, TableCaption, TableCell, type TableCellProps, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableHeaderProps, type TableInset, type TableProps, TableRow, type TableScroll, type TableTone };
|
|
112
|
+
export { type SortDirection, SortableHead, Table, type TableAlign, TableBody, TableCaption, TableCell, type TableCellProps, type TableDensity, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableHeaderProps, type TableInset, type TableProps, TableRow, type TableScroll, type TableTone };
|
package/dist/components/table.js
CHANGED
|
@@ -3,9 +3,10 @@ import { cn } from "../lib/utils.js";
|
|
|
3
3
|
import { Button } from "./button.js";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/table.tsx
|
|
6
|
-
const Table = ({ className, inset = "default", scroll = "self", ...props }) => {
|
|
6
|
+
const Table = ({ className, density = "default", inset = "default", scroll = "self", ...props }) => {
|
|
7
7
|
const table = /* @__PURE__ */ jsx("table", {
|
|
8
8
|
className: cn("w-full caption-bottom text-sm in-data-[slot=frame]:border-separate in-data-[slot=frame]:border-spacing-0", className),
|
|
9
|
+
"data-density": density,
|
|
9
10
|
"data-inset": inset,
|
|
10
11
|
"data-slot": "table",
|
|
11
12
|
...props
|
|
@@ -33,7 +34,7 @@ const TableFooter = ({ className, ...props }) => /* @__PURE__ */ jsx("tfoot", {
|
|
|
33
34
|
...props
|
|
34
35
|
});
|
|
35
36
|
const TableRow = ({ className, tone = "default", ...props }) => /* @__PURE__ */ jsx("tr", {
|
|
36
|
-
className: cn("hover:bg-muted/72 data-[state=selected]:bg-muted/72 border-b in-data-[slot=frame]:hover:bg-transparent in-data-[slot=frame]:data-[state=selected]:bg-transparent", tone === "muted" && "text-muted-foreground", className),
|
|
37
|
+
className: cn("hover:bg-muted/72 data-[state=selected]:bg-muted/72 border-b in-data-[density=compact]:hover:bg-transparent in-data-[slot=frame]:hover:bg-transparent in-data-[slot=frame]:data-[state=selected]:bg-transparent", tone === "muted" && "text-muted-foreground", className),
|
|
37
38
|
"data-slot": "table-row",
|
|
38
39
|
...props
|
|
39
40
|
});
|
|
@@ -44,14 +45,14 @@ const TABLE_ALIGN_CLASS = {
|
|
|
44
45
|
};
|
|
45
46
|
const resolveTableAlign = (align, numeric) => align ?? (numeric ? "end" : void 0);
|
|
46
47
|
const TableHead = ({ className, align, numeric = false, ...props }) => /* @__PURE__ */ jsx("th", {
|
|
47
|
-
className: cn("text-muted-foreground h-10 px-2.5 align-middle leading-none font-medium whitespace-nowrap in-data-[inset=card]:px-4 has-[[role=checkbox]]:w-px has-[[role=checkbox]]:pe-0", TABLE_ALIGN_CLASS[resolveTableAlign(align, numeric) ?? "start"], numeric && "tabular-nums", className),
|
|
48
|
+
className: cn("text-muted-foreground h-10 px-2.5 align-middle leading-none font-medium whitespace-nowrap in-data-[inset=card]:px-4 has-[[role=checkbox]]:w-px has-[[role=checkbox]]:pe-0", "in-data-[density=compact]:h-auto in-data-[density=compact]:px-0 in-data-[density=compact]:py-1 in-data-[density=compact]:pe-3 in-data-[density=compact]:text-xs", "in-data-[density=compact]:[tbody_&]:py-1.5 in-data-[density=compact]:[tbody_&]:text-sm in-data-[density=compact]:[tbody_&]:leading-6 in-data-[density=compact]:[tbody_&]:font-normal in-data-[density=compact]:[tbody_&]:whitespace-normal in-data-[density=compact]:[tbody_&]:text-inherit", TABLE_ALIGN_CLASS[resolveTableAlign(align, numeric) ?? "start"], numeric && "tabular-nums", className),
|
|
48
49
|
"data-slot": "table-head",
|
|
49
50
|
...props
|
|
50
51
|
});
|
|
51
52
|
const TableCell = ({ className, align, tone = "default", numeric = false, truncate = false, flush = false, ...props }) => {
|
|
52
53
|
const resolvedAlign = resolveTableAlign(align, numeric);
|
|
53
54
|
return /* @__PURE__ */ jsx("td", {
|
|
54
|
-
className: cn("align-middle leading-none whitespace-nowrap has-[[role=checkbox]]:pe-0", flush ? "p-0" : "p-2.5 in-data-[inset=card]:px-4 in-data-[slot=frame]:first:p-[calc(--spacing(2.5)-1px)] in-data-[slot=frame]:last:p-[calc(--spacing(2.5)-1px)]", resolvedAlign !== void 0 && TABLE_ALIGN_CLASS[resolvedAlign], tone === "muted" && "text-muted-foreground", numeric && "tabular-nums", truncate && "truncate", className),
|
|
55
|
+
className: cn("align-middle leading-none whitespace-nowrap has-[[role=checkbox]]:pe-0", flush ? "p-0" : "p-2.5 in-data-[density=compact]:px-0 in-data-[density=compact]:py-1.5 in-data-[inset=card]:px-4 in-data-[slot=frame]:first:p-[calc(--spacing(2.5)-1px)] in-data-[slot=frame]:last:p-[calc(--spacing(2.5)-1px)]", "in-data-[density=compact]:leading-6 in-data-[density=compact]:whitespace-normal", resolvedAlign !== void 0 && TABLE_ALIGN_CLASS[resolvedAlign], tone === "muted" && "text-muted-foreground", numeric && "tabular-nums", truncate && "truncate", className),
|
|
55
56
|
"data-slot": "table-cell",
|
|
56
57
|
...props
|
|
57
58
|
});
|
package/dist/components/tabs.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn, composeRefs } from "../lib/utils.js";
|
|
3
|
-
import { hasTabOrderChanged } from "../lib/tab-order.js";
|
|
3
|
+
import { hasTabOrderChanged, revealActiveTab } from "../lib/tab-order.js";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
6
6
|
import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
|
|
@@ -21,6 +21,17 @@ const TabsList = ({ variant = "default", className, children, ref, ...props }) =
|
|
|
21
21
|
tabOrderRef.current = tabs;
|
|
22
22
|
if (hasTabOrderChanged(previousTabs, tabs)) setRemeasureToken((token) => token + 1);
|
|
23
23
|
});
|
|
24
|
+
useIsoLayoutEffect(() => {
|
|
25
|
+
const list = listRef.current;
|
|
26
|
+
if (list === null || typeof ResizeObserver === "undefined") return;
|
|
27
|
+
const observer = new ResizeObserver(() => {
|
|
28
|
+
revealActiveTab(list);
|
|
29
|
+
});
|
|
30
|
+
observer.observe(list);
|
|
31
|
+
return () => {
|
|
32
|
+
observer.disconnect();
|
|
33
|
+
};
|
|
34
|
+
}, []);
|
|
24
35
|
return /* @__PURE__ */ jsxs(Tabs$1.List, {
|
|
25
36
|
className: cn("text-muted-foreground relative z-0 flex w-fit max-w-full items-center justify-center-safe gap-x-0.5", "scrollbar-none overflow-auto data-[orientation=horizontal]:overflow-y-hidden data-[orientation=horizontal]:overscroll-x-contain data-[orientation=vertical]:overflow-x-hidden data-[orientation=vertical]:overscroll-y-contain [&::-webkit-scrollbar]:hidden", "data-[orientation=vertical]:flex-col", variant === "default" ? "bg-muted text-foreground-label rounded-lg p-0.5" : "*:data-[slot=tabs-tab]:hover:bg-accent data-[orientation=horizontal]:py-1 data-[orientation=vertical]:px-1", className),
|
|
26
37
|
"data-slot": "tabs-list",
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import "./button.js";
|
|
2
|
+
import * as React$1 from "react";
|
|
3
|
+
import { ButtonSize } from "./button.shared.js";
|
|
4
|
+
import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
|
|
5
|
+
import { ToggleProps } from "./toggle.js";
|
|
6
|
+
//#region src/components/toggle-group.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* A segmented control: a row of toggles in one tray, of which one (or, with
|
|
9
|
+
* `multiple`, several) is on. Use it for view modes, density, and filter
|
|
10
|
+
* tabs over a list; `Tabs` is for switching between panels of content.
|
|
11
|
+
*
|
|
12
|
+
* The chosen item is raised out of the tray, so the choice reads at a glance
|
|
13
|
+
* and differs from the hover fill. Arrow keys move between items and the
|
|
14
|
+
* group exposes the pressed state of each.
|
|
15
|
+
*
|
|
16
|
+
* Base UI lets the pressed item be clicked off, leaving no value. A control
|
|
17
|
+
* that must always hold one ignores an empty change in `onValueChange`.
|
|
18
|
+
*/
|
|
19
|
+
declare const ToggleGroup: <Value extends string>({ className, size, ...props }: ToggleGroupProps<Value>) => React$1.JSX.Element;
|
|
20
|
+
/**
|
|
21
|
+
* One choice in a `ToggleGroup`. It takes the group's size unless it names
|
|
22
|
+
* its own (an icon item names an `icon-*` size and an `aria-label`, which
|
|
23
|
+
* doubles as its tooltip).
|
|
24
|
+
*/
|
|
25
|
+
declare const ToggleGroupItem: <Value extends string>({ className, size, variant, ...props }: ToggleProps<Value>) => React$1.JSX.Element;
|
|
26
|
+
type ToggleGroupProps<Value extends string> = ToggleGroup$1.Props<Value> & {
|
|
27
|
+
/** The size every item takes unless it names its own. */
|
|
28
|
+
size?: ButtonSize | undefined;
|
|
29
|
+
children?: React$1.ReactNode;
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
export { ToggleGroup, ToggleGroupItem, type ToggleGroupProps };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { Toggle } from "./toggle.js";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import { createContext, useContext } from "react";
|
|
6
|
+
import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
|
|
7
|
+
//#region src/components/toggle-group.tsx
|
|
8
|
+
const ToggleGroupSizeContext = createContext("xs");
|
|
9
|
+
/**
|
|
10
|
+
* A segmented control: a row of toggles in one tray, of which one (or, with
|
|
11
|
+
* `multiple`, several) is on. Use it for view modes, density, and filter
|
|
12
|
+
* tabs over a list; `Tabs` is for switching between panels of content.
|
|
13
|
+
*
|
|
14
|
+
* The chosen item is raised out of the tray, so the choice reads at a glance
|
|
15
|
+
* and differs from the hover fill. Arrow keys move between items and the
|
|
16
|
+
* group exposes the pressed state of each.
|
|
17
|
+
*
|
|
18
|
+
* Base UI lets the pressed item be clicked off, leaving no value. A control
|
|
19
|
+
* that must always hold one ignores an empty change in `onValueChange`.
|
|
20
|
+
*/
|
|
21
|
+
const ToggleGroup = ({ className, size = "xs", ...props }) => /* @__PURE__ */ jsx(ToggleGroupSizeContext, {
|
|
22
|
+
value: size,
|
|
23
|
+
children: /* @__PURE__ */ jsx(ToggleGroup$1, {
|
|
24
|
+
className: cn("border-border/70 bg-muted/30 inline-flex w-fit shrink-0 items-center gap-0.5 rounded-lg border p-0.5 data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch", className),
|
|
25
|
+
"data-slot": "toggle-group",
|
|
26
|
+
...props
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* One choice in a `ToggleGroup`. It takes the group's size unless it names
|
|
31
|
+
* its own (an icon item names an `icon-*` size and an `aria-label`, which
|
|
32
|
+
* doubles as its tooltip).
|
|
33
|
+
*/
|
|
34
|
+
const ToggleGroupItem = ({ className, size, variant = "muted", ...props }) => {
|
|
35
|
+
const groupSize = useContext(ToggleGroupSizeContext);
|
|
36
|
+
return /* @__PURE__ */ jsx(Toggle, {
|
|
37
|
+
className: cn("data-pressed:bg-background data-pressed:text-foreground", className),
|
|
38
|
+
"data-slot": "toggle-group-item",
|
|
39
|
+
size: size ?? groupSize,
|
|
40
|
+
variant,
|
|
41
|
+
...props
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
//#endregion
|
|
45
|
+
export { ToggleGroup, ToggleGroupItem };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import "./button.js";
|
|
2
|
+
import * as React$1 from "react";
|
|
3
|
+
import { ButtonSize } from "./button.shared.js";
|
|
4
|
+
import { Toggle as Toggle$1 } from "@base-ui/react/toggle";
|
|
5
|
+
//#region src/components/toggle.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* A button that stays pressed: a formatting mark, "show resolved", a pinned
|
|
8
|
+
* view. It is a `Button` underneath, so it shares the button's sizes, focus
|
|
9
|
+
* ring, tooltip and disabled disposition, and its pressed state is the
|
|
10
|
+
* button's selected treatment, distinct from hover. Base UI owns
|
|
11
|
+
* `aria-pressed`.
|
|
12
|
+
*
|
|
13
|
+
* Several toggles that choose one value (view modes, filter tabs) are a
|
|
14
|
+
* `ToggleGroup`, not a row of these.
|
|
15
|
+
*/
|
|
16
|
+
declare const Toggle: <Value extends string>({ size, tooltip, variant, ...props }: ToggleProps<Value>) => React$1.JSX.Element;
|
|
17
|
+
/** The quiet button looks a pressed state reads well on. */
|
|
18
|
+
type ToggleVariant = "ghost" | "muted" | "outline";
|
|
19
|
+
type ToggleProps<Value extends string> = Toggle$1.Props<Value> & {
|
|
20
|
+
size?: ButtonSize | undefined;
|
|
21
|
+
/** The hint, and the accessible name source for an icon size. */
|
|
22
|
+
tooltip?: React$1.ReactNode;
|
|
23
|
+
variant?: ToggleVariant | undefined;
|
|
24
|
+
};
|
|
25
|
+
//#endregion
|
|
26
|
+
export { Toggle, type ToggleProps, type ToggleVariant };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Button } from "./button.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Toggle as Toggle$1 } from "@base-ui/react/toggle";
|
|
5
|
+
//#region src/components/toggle.tsx
|
|
6
|
+
/**
|
|
7
|
+
* A button that stays pressed: a formatting mark, "show resolved", a pinned
|
|
8
|
+
* view. It is a `Button` underneath, so it shares the button's sizes, focus
|
|
9
|
+
* ring, tooltip and disabled disposition, and its pressed state is the
|
|
10
|
+
* button's selected treatment, distinct from hover. Base UI owns
|
|
11
|
+
* `aria-pressed`.
|
|
12
|
+
*
|
|
13
|
+
* Several toggles that choose one value (view modes, filter tabs) are a
|
|
14
|
+
* `ToggleGroup`, not a row of these.
|
|
15
|
+
*/
|
|
16
|
+
const Toggle = ({ size = "sm", tooltip, variant = "muted", ...props }) => /* @__PURE__ */ jsx(Toggle$1, {
|
|
17
|
+
"data-slot": "toggle",
|
|
18
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
19
|
+
size,
|
|
20
|
+
tooltip,
|
|
21
|
+
variant
|
|
22
|
+
}),
|
|
23
|
+
...props
|
|
24
|
+
});
|
|
25
|
+
//#endregion
|
|
26
|
+
export { Toggle };
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { Avatar, AvatarFallback, AvatarImage } from "./components/avatar.js";
|
|
|
9
9
|
import { BOARD_DRAG_OVERLAY_Z_INDEX, OVERLAY_COLLISION_PADDING, OVERLAY_LAYER_CLASS_NAMES, OverlayLayer, SHELL_CHROME_LAYER_CLASS_NAME } from "./lib/overlay-layer.js";
|
|
10
10
|
import { BUTTON_CONTENT, BUTTON_SIZE_CONTENT, Button, ButtonFocusRing, ButtonPlainShape, ButtonProps, ButtonTextRun, buttonAccessibleDisabledClass, buttonVariants } from "./components/button.js";
|
|
11
11
|
import { Badge, BadgeProps, BadgeSize, BadgeTone, badgeVariants } from "./components/badge.js";
|
|
12
|
-
import { BidiDirection, BidiText, BidiTextProps, UserText } from "./components/bidi-text.js";
|
|
12
|
+
import { BidiDirection, BidiText, BidiTextProps, UserText, stripDirectionalControls, withoutDirectionalControls } from "./components/bidi-text.js";
|
|
13
13
|
import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "./components/breadcrumb.js";
|
|
14
14
|
import { BuildKanbanBoardMatrixParams, CreateKanbanDropIntentParams, KANBAN_BOARD_AXES, KanbanBoardAxis, KanbanBoardCell, KanbanBoardColumn, KanbanBoardCoordinate, KanbanBoardDestination, KanbanBoardLane, KanbanBoardMatrix, KanbanDropAxisChange, KanbanDropIntent, OrderKanbanCellsByColumnsParams, ResolveKanbanGroupValueParams, buildKanbanBoardMatrix, createKanbanDropIntent, getKanbanBoardColumnIdentity, getKanbanBoardLaneIdentity, orderKanbanCellsByColumns } from "./kanban/matrix.js";
|
|
15
15
|
import { ButtonSize, ButtonVariant } from "./components/button.shared.js";
|
|
@@ -18,6 +18,7 @@ import { COPIED_RESET_MS, CopyButton, CopyFeedback, useCopiedFeedback, useCopyCo
|
|
|
18
18
|
import { CalendarCell, CalendarEntryButton, CalendarEntrySurface, CalendarGrid, CalendarHeaderCell, CalendarHeaderRow } from "./calendar/primitives.js";
|
|
19
19
|
import { CalendarDateRange, ResourceCalendarLaneLayout, ResourceCalendarLanePlacement, ResourceCalendarPlacement, assertConsecutiveCalendarDates, getResourceCalendarPlacement, layoutResourceCalendarEntries, nextCalendarDate } from "./calendar/resource-calendar.logic.js";
|
|
20
20
|
import { Checkbox } from "./components/checkbox.js";
|
|
21
|
+
import { Collapsible, CollapsiblePanel, CollapsibleTrigger } from "./components/collapsible.js";
|
|
21
22
|
import { ColorPicker, ColorPickerContent, ColorPickerContentProps, ColorPickerProps, ColorPreset, DEFAULT_PRESETS } from "./components/color-picker.js";
|
|
22
23
|
import { ColorVariants, OptionColor, emptyColor, optionColors, resolveOptionColor } from "./lib/option-color.js";
|
|
23
24
|
import { Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue } from "./components/combobox.js";
|
|
@@ -34,7 +35,7 @@ import { DiscordLogoIcon, GitHubLogoIcon, XLogoIcon } from "./components/brand-i
|
|
|
34
35
|
import { DropdownMenu as Menu, DropdownMenuCheckboxItem as MenuCheckboxItem, DropdownMenuContent as MenuPopup, DropdownMenuCreateHandle as MenuCreateHandle, DropdownMenuGroup as MenuGroup, DropdownMenuItem as MenuItem, DropdownMenuLabel as MenuGroupLabel, DropdownMenuPortal as MenuPortal, DropdownMenuRadioGroup as MenuRadioGroup, DropdownMenuRadioItem as MenuRadioItem, DropdownMenuSeparator as MenuSeparator, DropdownMenuShortcut as MenuShortcut, DropdownMenuSub as MenuSub, DropdownMenuSubContent as MenuSubPopup, DropdownMenuSubTrigger as MenuSubTrigger, DropdownMenuTrigger as MenuTrigger, MenuAnchor } from "./components/menu.js";
|
|
35
36
|
import { Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity } from "./components/field.js";
|
|
36
37
|
import { FileInput, FileInputProps } from "./components/file-input.js";
|
|
37
|
-
import { Form, FormProps, formVariants } from "./components/form.js";
|
|
38
|
+
import { Form, FormErrors, FormProps, formVariants } from "./components/form.js";
|
|
38
39
|
import { Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle } from "./components/frame.js";
|
|
39
40
|
import { HexColorPicker, HexColorPickerProps } from "./components/hex-color-picker.js";
|
|
40
41
|
import { HoverCard as PreviewCard, HoverCardContent as PreviewCardPopup, HoverCardTrigger as PreviewCardTrigger, PreviewCardPrimitive } from "./components/preview-card.js";
|
|
@@ -91,13 +92,15 @@ import { Select, SelectContent as SelectPopup, SelectGroup, SelectGroupLabel, Se
|
|
|
91
92
|
import { Separator, TextSeparator } from "./components/separator.js";
|
|
92
93
|
import { Sheet, SheetBackdrop, SheetClose, SheetContent as SheetPopup, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetPortal, SheetSide, SheetTitle, SheetTrigger } from "./components/sheet.js";
|
|
93
94
|
import { Skeleton } from "./components/skeleton.js";
|
|
94
|
-
import { SortDirection, SortableHead, Table, TableAlign, TableBody, TableCaption, TableCell, TableCellProps, TableFooter, TableHead, TableHeadProps, TableHeader, TableHeaderProps, TableInset, TableProps, TableRow, TableScroll, TableTone } from "./components/table.js";
|
|
95
|
+
import { SortDirection, SortableHead, Table, TableAlign, TableBody, TableCaption, TableCell, TableCellProps, TableDensity, TableFooter, TableHead, TableHeadProps, TableHeader, TableHeaderProps, TableInset, TableProps, TableRow, TableScroll, TableTone } from "./components/table.js";
|
|
95
96
|
import { StellaMark } from "./components/stella-mark.js";
|
|
96
97
|
import { StellaWordmarkLatin } from "./components/stella-wordmark.js";
|
|
97
98
|
import { TOOLTIP_OPEN_DELAY_MS, Tooltip, TooltipContent as TooltipPopup, TooltipCreateHandle, TooltipFactTrigger, TooltipProvider, TooltipTrigger } from "./components/tooltip.js";
|
|
98
99
|
import { TableColumnCapabilities, TableColumnDescriptor, TableSchema, duplicateColumnIds, findTableColumn, hideableColumnIds, sortableColumnIds, tableColumnIds, tableColumnSizing, visibleColumnIds } from "./data-table/schema.js";
|
|
99
100
|
import { Tabs, TabsContent as TabsPanel, TabsList, TabsTab } from "./components/tabs.js";
|
|
100
101
|
import { Textarea, TextareaProps } from "./components/textarea.js";
|
|
102
|
+
import { Toggle, ToggleProps, ToggleVariant } from "./components/toggle.js";
|
|
103
|
+
import { ToggleGroup, ToggleGroupItem, ToggleGroupProps } from "./components/toggle-group.js";
|
|
101
104
|
import { TruncatedText, TruncatedTextLines, TruncatedTextProps, isTextOverflowing } from "./components/truncated-text.js";
|
|
102
105
|
import { TypedCharacterEvent, typedCharacter } from "./lib/typed-character.js";
|
|
103
106
|
import { WorkspaceCompactNavigation, WorkspaceEndRail, WorkspaceEndRailChatAction, WorkspaceEndRailProps, WorkspaceNavigation, WorkspaceShell, WorkspaceShellProps, WorkspaceTopBarContext } from "./components/workspace-shell.js";
|
|
@@ -109,4 +112,4 @@ import { getInitials } from "./lib/initials.js";
|
|
|
109
112
|
import { useIsMobile } from "./hooks/use-mobile.js";
|
|
110
113
|
import { useLatest } from "./hooks/use-latest.js";
|
|
111
114
|
import { useViewportWidth } from "./hooks/use-viewport-width.js";
|
|
112
|
-
export { APPLICATION_RAIL_BUTTON_SIZE, APPLICATION_RAIL_ICON_SIZE, APPLICATION_RAIL_WIDTH, Accordion, AccordionPanel as AccordionContent, AccordionPanel, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogBackdrop, AlertDialogBackdrop as AlertDialogOverlay, AlertDialogClose, AlertDialogPopup as AlertDialogContent, AlertDialogPopup, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPanel, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AnchoredToastProvider, ApplicationRail, ApplicationRailButton, ApplicationRailContent, ApplicationRailFooter, ApplicationRailHeader, ApplicationRailMenu, ApplicationRailSeparator, Avatar, AvatarFallback, AvatarImage, BOARD_DRAG_OVERLAY_Z_INDEX, BUTTON_CONTENT, BUTTON_SIZE_CONTENT, Badge, type BadgeProps, type BadgeSize, type BadgeTone, type BidiDirection, BidiText, type BidiTextProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, type BuildKanbanBoardMatrixParams, Button, type ButtonFocusRing, type ButtonPlainShape, type ButtonProps, type ButtonSize, ButtonTextRun, type ButtonVariant, CONTROL_SIZE, CONTROL_SIZES, COPIED_RESET_MS, CalendarCell, CalendarDateRange, CalendarEntryButton, CalendarEntrySurface, CalendarGrid, CalendarHeaderCell, CalendarHeaderRow, Checkbox, ColorPicker, ColorPickerContent, type ColorPickerContentProps, type ColorPickerProps, type ColorPreset, ColorVariants, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandCollection, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut, type ControlSize, CopyButton, CopyFeedback, type CreateKanbanDropIntentParams, DEFAULT_PRESETS, DIALOG_MOBILE_LAYOUT, DIALOG_SIZE_CLASS_NAMES, DataTable, type DataTableAriaSort, type DataTableColumn, type DataTableProps, type DataTableRowAction, DatePickerPopover, type DatePickerPopoverProps, DestructiveActionConfirmation, DestructiveConfirmDialog, type DestructiveConfirmDialogProps, type DestructiveConfirmOutcome, DetailsGrid, DetailsItem, type DetailsOrientation, type DetailsVariant, Dialog, DialogBackdrop, DialogBackdrop as DialogOverlay, DialogClose, DialogPopup as DialogContent, DialogPopup, DialogCreateHandle, DialogDescription, DialogFooter, DialogFormState, DialogHeader, type DialogLabels, type DialogMobileLayout, DialogPanel, DialogPortal, DialogProvider, type DialogSize, DialogTitle, DialogTrigger, DialogViewport, DirectionalIcon, DiscordLogoIcon, Menu as DropdownMenu, Menu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuPopup, MenuCreateHandle as DropdownMenuCreateHandle, MenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuGroup, MenuItem as DropdownMenuItem, MenuItem, MenuGroupLabel as DropdownMenuLabel, MenuGroupLabel, MenuPortal as DropdownMenuPortal, MenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuShortcut, MenuSub as DropdownMenuSub, MenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubPopup, MenuSubTrigger as DropdownMenuSubTrigger, MenuSubTrigger, MenuTrigger as DropdownMenuTrigger, MenuTrigger, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, FileInput, type FileInputProps, Form, type FormProps, Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle, GitHubLogoIcon, HexColorPicker, type HexColorPickerProps, PreviewCard as HoverCard, PreviewCard, PreviewCardPopup as HoverCardContent, PreviewCardPopup, PreviewCardTrigger as HoverCardTrigger, PreviewCardTrigger, INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_EDITOR_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, InlineRenameInput, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorDock, type InspectorDockMount, InspectorEmptyRow, InspectorEntityTab, type InspectorEntityTabInactiveIcon, InspectorFacetBar, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailContent, InspectorRailFooter, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle, KANBAN_BAND_CAPTION_ROW_HEIGHT, KANBAN_BAND_CAPTION_ROW_HEIGHT_PX, KANBAN_BAND_PEEK_DELAY_MS, KANBAN_BAND_PEEK_LINGER_MS, KANBAN_BOARD_AUTO_SCROLL_OPTIONS, KANBAN_BOARD_AUTO_SCROLL_SOURCES, KANBAN_BOARD_AXES, KANBAN_BOARD_COLLISION_DETECTION, KANBAN_CARD_DRAG_MIME, KANBAN_CARD_STICKY_TOP_VAR, KANBAN_CHROME_ROW_HEIGHT, KANBAN_CHROME_ROW_HEIGHT_PX, KANBAN_COLLAPSED_BAND_WIDTH_CLASS, KANBAN_COLLAPSED_BAND_WIDTH_PX, KANBAN_COLUMN_GAP_PX, KANBAN_COLUMN_WIDTH_CLASS, KANBAN_COLUMN_WIDTH_PX, KANBAN_DIRECTIONS, KANBAN_DRAG_OVERLAY_Z_INDEX, KANBAN_HORIZONTAL_EDGES, KANBAN_MOUSE_ACTIVATION_DISTANCE, KANBAN_SORTABLE_ACTIVATION_MODES, KANBAN_STICKY_TOP_VAR, KANBAN_TOUCH_ACTIVATION_CONSTRAINT, KANBAN_VIRTUAL_CELL_PAGINATION, type KanbanBandToggleActivation, type KanbanBoardAxis, type KanbanBoardCell, type KanbanBoardColumn, type KanbanBoardCoordinate, type KanbanBoardDestination, type KanbanBoardLane, type KanbanBoardMatrix, type KanbanBuiltInGroup, type KanbanCardDragPreview, KanbanCardDragSurface, type KanbanCardDragSurfaceProps, type KanbanCardFieldSelection, type KanbanCardSelectionModifiers, KanbanCardShell, type KanbanCardShellProps, KanbanCellAction, type KanbanCellActionProps, type KanbanCellVirtualNavigation, KanbanCollapsedBandCaption, type KanbanCollapsedBandCaptionProps, type KanbanColumnBand, KanbanColumnBandHeader, type KanbanColumnBandHeaderProps, type KanbanColumnBandSpan, KanbanColumnHeader, type KanbanColumnHeaderProps, type KanbanDirection, type KanbanDragCancelEvent, type KanbanDragEndEvent, KanbanDragHandle, type KanbanDragHandleProps, type KanbanDragOverEvent, type KanbanDragStartEvent, type KanbanDropAxisChange, type KanbanDropIntent, type KanbanGroup, type KanbanGroupOption, type KanbanGrouping, type KanbanHorizontalEdge, type KanbanSchema, type KanbanSortableActivationMode, type KanbanSortableBindings, KanbanSortableBoard, type KanbanSortableBoardProps, type KanbanSortableCellPosition, type KanbanSubgroupBandHeaderContext, KanbanSubgroupBoard, type KanbanSubgroupBoardProps, type KanbanSubgroupCellContext, type KanbanSubgroupCollapsedBandCellContext, type KanbanSubgroupColumnHeaderContext, type KanbanSubgroupLaneColumnActionContext, type KanbanSubgroupLaneColumnSummaryContext, type KanbanSubgroupLaneIdentityContext, KanbanVirtualCell, type KanbanVirtualCellPagination, type KanbanVirtualCellProps, type KanbanVirtualCellSortableContext, type KanbanVirtualScrollRequest, LEGAL_TEXT_CLASS_NAME, Label, type LabelVariant, List, ListEmpty, ListGroup, ListGroupAction, ListGroupCount, ListGroupDescription, ListGroupHeader, ListGroupHeading, ListGroupTitle, ListItem, ListItemActions, ListItemContent, ListItemDescription, ListItemMedia, ListItemStatus, ListItemTitle, MenuAnchor, MenuPreviewLayout, MenuSection, OUTLINE_CONTROL_MIN_SIZE, OUTLINE_EMPHASIS, OVERLAY_COLLISION_PADDING, OVERLAY_LAYER_CLASS_NAMES, OptionColor, type OrderKanbanCellsByColumnsParams, OutlineEmphasis, OutlineItem, OutlineRail, OutlineRailProps, OverlayLayer, PROPERTY_ROW_GRID, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PanelTrigger, Popover, PopoverClose, PopoverPopup as PopoverContent, PopoverPopup, PopoverCreateHandle, PopoverDescription, PopoverPanel, PopoverTitle, PopoverTrigger, PreviewCardPrimitive, PreviewPane, Prose, type RegisterKanbanBoardAutoScrollOptions, type RegisterKanbanCardDragOptions, type ResolveKanbanGroupValueParams, type ResolveKanbanGroupingParams, ResourceCalendar, ResourceCalendarColumn, ResourceCalendarEntry, ResourceCalendarEntryTone, ResourceCalendarLaneLayout, ResourceCalendarLanePlacement, ResourceCalendarPlacement, ResourceCalendarResource, ReviewAuthorAvatar, ReviewCommentAuthor, ReviewCommentCard, ReviewDecisionActions, ReviewDecisionSize, ReviewDecisionState, ReviewDiffDeletion, ReviewDiffInsertion, ReviewDiffSegment, ReviewDiffSegmentType, ReviewDiffText, ReviewOutOfDateNotice, ReviewOutOfDateReason, ReviewOutOfDateTone, ReviewSeverityDot, ReviewSeverityLevel, ReviewStatusBadge, ReviewStatusDot, ReviewStatusSize, ReviewStatusTone, ReviewStatusVariant, SHELL_CHROME_LAYER_CLASS_NAME, SIDEBAR_WIDTH_ICON_PX, SIDEBAR_WIDTH_PX, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, ScrollArea, ScrollBar, ScrollToTop, ScrollToTopProps, SearchField, type SearchFieldProps, SecretInput, type SecretInputProps, SegmentedIconToggle, Select, SelectPopup as SelectContent, SelectPopup, SelectGroup, SelectGroupLabel, SelectItem, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBackdrop, SheetBackdrop as SheetOverlay, SheetClose, SheetPopup as SheetContent, SheetPopup, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetPortal, type SheetSide, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, type SortDirection, SortableHead, type StatusTone, StellaMark, StellaWordmarkLatin, TOAST_RIGHT_OFFSET_VAR, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX, TOOLTIP_OPEN_DELAY_MS, TRACKED_DELETION_STYLE, TRACKED_INSERTION_STYLE, Table, type TableAlign, TableBody, TableCaption, TableCell, type TableCellProps, type TableColumnCapabilities, type TableColumnDescriptor, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableHeaderProps, type TableInset, type TableProps, TableRow, type TableSchema, type TableScroll, type TableTone, Tabs, TabsPanel as TabsContent, TabsPanel, TabsList, TabsTab, TabsTab as TabsTrigger, TextSeparator, Textarea, type TextareaProps, type ToastPosition, ToastProvider, Tooltip, TooltipPopup as TooltipContent, TooltipPopup, TooltipCreateHandle, TooltipFactTrigger, TooltipProvider, TooltipTrigger, TruncatedText, type TruncatedTextLines, type TruncatedTextProps, TypedCharacterEvent, UNKNOWN_AUTHOR_LABEL, type UseKanbanDropTargetOptions, type UseKanbanSortableOptions, UserText, type WorkspaceCompactNavigation, WorkspaceEndRail, type WorkspaceEndRailChatAction, type WorkspaceEndRailProps, type WorkspaceNavigation, WorkspaceShell, type WorkspaceShellProps, type WorkspaceTopBarContext, XLogoIcon, assertConsecutiveCalendarDates, badgeVariants, buildKanbanBoardMatrix, buttonAccessibleDisabledClass, buttonVariants, cn, composeRefs, containedEventHandler, containedHandler, contentDir, createKanbanDropIntent, duplicateColumnIds, emptyColor, entityTabGlyph, findTableColumn, formVariants, getFirstWeekday, getInitials, getKanbanBoardColumnIdentity, getKanbanBoardLaneIdentity, getKanbanGroupingPropertyId, getKanbanGroups, getKanbanHorizontalEdge, getLocaleWeekInfo, getResourceCalendarPlacement, getWeekendDays, hasKanbanColumnBands, hideableColumnIds, isKanbanGroupingRenderable, isStructuredInputType, isTextOverflowing, kanbanKeyboardCoordinates, layoutResourceCalendarEntries, nextCalendarDate, optionColors, orderKanbanCellsByColumns, outlineEntryText, registerKanbanBoardAutoScroll, registerKanbanCardDrag, resolveDragWidth, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, resolveKanbanColumnBands, resolveKanbanGroupOptions, resolveKanbanGrouping, resolveKeyboardWidth, resolveOptionColor, resolveToastUpdateTimeout, reviewDiffSegmentKeys, reviewSeverityTone, selectKanbanCardFieldIds, selectKanbanRows, shouldForceSidebarCollapsed, sidebarIdentityTriggerClassName, sortableColumnIds, stellaToast, tableColumnIds, tableColumnSizing, toastCountdownMs, toastDedupeId, typedCharacter, useContentDir, useCopiedFeedback, useCopyConfirmation, useDestructiveActionConfirmation, useInspectorPaneWidth, useIsMobile, useKanbanDropTarget, useKanbanSortable, useKanbanSortableSensors, useLatest, useSidebar, useSidebarInlineSize, useSidebarLayout, useViewportWidth, visibleColumnIds };
|
|
115
|
+
export { APPLICATION_RAIL_BUTTON_SIZE, APPLICATION_RAIL_ICON_SIZE, APPLICATION_RAIL_WIDTH, Accordion, AccordionPanel as AccordionContent, AccordionPanel, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogBackdrop, AlertDialogBackdrop as AlertDialogOverlay, AlertDialogClose, AlertDialogPopup as AlertDialogContent, AlertDialogPopup, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPanel, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AnchoredToastProvider, ApplicationRail, ApplicationRailButton, ApplicationRailContent, ApplicationRailFooter, ApplicationRailHeader, ApplicationRailMenu, ApplicationRailSeparator, Avatar, AvatarFallback, AvatarImage, BOARD_DRAG_OVERLAY_Z_INDEX, BUTTON_CONTENT, BUTTON_SIZE_CONTENT, Badge, type BadgeProps, type BadgeSize, type BadgeTone, type BidiDirection, BidiText, type BidiTextProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, type BuildKanbanBoardMatrixParams, Button, type ButtonFocusRing, type ButtonPlainShape, type ButtonProps, type ButtonSize, ButtonTextRun, type ButtonVariant, CONTROL_SIZE, CONTROL_SIZES, COPIED_RESET_MS, CalendarCell, CalendarDateRange, CalendarEntryButton, CalendarEntrySurface, CalendarGrid, CalendarHeaderCell, CalendarHeaderRow, Checkbox, Collapsible, CollapsiblePanel, CollapsibleTrigger, ColorPicker, ColorPickerContent, type ColorPickerContentProps, type ColorPickerProps, type ColorPreset, ColorVariants, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandCollection, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut, type ControlSize, CopyButton, CopyFeedback, type CreateKanbanDropIntentParams, DEFAULT_PRESETS, DIALOG_MOBILE_LAYOUT, DIALOG_SIZE_CLASS_NAMES, DataTable, type DataTableAriaSort, type DataTableColumn, type DataTableProps, type DataTableRowAction, DatePickerPopover, type DatePickerPopoverProps, DestructiveActionConfirmation, DestructiveConfirmDialog, type DestructiveConfirmDialogProps, type DestructiveConfirmOutcome, DetailsGrid, DetailsItem, type DetailsOrientation, type DetailsVariant, Dialog, DialogBackdrop, DialogBackdrop as DialogOverlay, DialogClose, DialogPopup as DialogContent, DialogPopup, DialogCreateHandle, DialogDescription, DialogFooter, DialogFormState, DialogHeader, type DialogLabels, type DialogMobileLayout, DialogPanel, DialogPortal, DialogProvider, type DialogSize, DialogTitle, DialogTrigger, DialogViewport, DirectionalIcon, DiscordLogoIcon, Menu as DropdownMenu, Menu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuPopup, MenuCreateHandle as DropdownMenuCreateHandle, MenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuGroup, MenuItem as DropdownMenuItem, MenuItem, MenuGroupLabel as DropdownMenuLabel, MenuGroupLabel, MenuPortal as DropdownMenuPortal, MenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuShortcut, MenuSub as DropdownMenuSub, MenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubPopup, MenuSubTrigger as DropdownMenuSubTrigger, MenuSubTrigger, MenuTrigger as DropdownMenuTrigger, MenuTrigger, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, FileInput, type FileInputProps, Form, type FormErrors, type FormProps, Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle, GitHubLogoIcon, HexColorPicker, type HexColorPickerProps, PreviewCard as HoverCard, PreviewCard, PreviewCardPopup as HoverCardContent, PreviewCardPopup, PreviewCardTrigger as HoverCardTrigger, PreviewCardTrigger, INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_EDITOR_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, InlineRenameInput, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorDock, type InspectorDockMount, InspectorEmptyRow, InspectorEntityTab, type InspectorEntityTabInactiveIcon, InspectorFacetBar, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailContent, InspectorRailFooter, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle, KANBAN_BAND_CAPTION_ROW_HEIGHT, KANBAN_BAND_CAPTION_ROW_HEIGHT_PX, KANBAN_BAND_PEEK_DELAY_MS, KANBAN_BAND_PEEK_LINGER_MS, KANBAN_BOARD_AUTO_SCROLL_OPTIONS, KANBAN_BOARD_AUTO_SCROLL_SOURCES, KANBAN_BOARD_AXES, KANBAN_BOARD_COLLISION_DETECTION, KANBAN_CARD_DRAG_MIME, KANBAN_CARD_STICKY_TOP_VAR, KANBAN_CHROME_ROW_HEIGHT, KANBAN_CHROME_ROW_HEIGHT_PX, KANBAN_COLLAPSED_BAND_WIDTH_CLASS, KANBAN_COLLAPSED_BAND_WIDTH_PX, KANBAN_COLUMN_GAP_PX, KANBAN_COLUMN_WIDTH_CLASS, KANBAN_COLUMN_WIDTH_PX, KANBAN_DIRECTIONS, KANBAN_DRAG_OVERLAY_Z_INDEX, KANBAN_HORIZONTAL_EDGES, KANBAN_MOUSE_ACTIVATION_DISTANCE, KANBAN_SORTABLE_ACTIVATION_MODES, KANBAN_STICKY_TOP_VAR, KANBAN_TOUCH_ACTIVATION_CONSTRAINT, KANBAN_VIRTUAL_CELL_PAGINATION, type KanbanBandToggleActivation, type KanbanBoardAxis, type KanbanBoardCell, type KanbanBoardColumn, type KanbanBoardCoordinate, type KanbanBoardDestination, type KanbanBoardLane, type KanbanBoardMatrix, type KanbanBuiltInGroup, type KanbanCardDragPreview, KanbanCardDragSurface, type KanbanCardDragSurfaceProps, type KanbanCardFieldSelection, type KanbanCardSelectionModifiers, KanbanCardShell, type KanbanCardShellProps, KanbanCellAction, type KanbanCellActionProps, type KanbanCellVirtualNavigation, KanbanCollapsedBandCaption, type KanbanCollapsedBandCaptionProps, type KanbanColumnBand, KanbanColumnBandHeader, type KanbanColumnBandHeaderProps, type KanbanColumnBandSpan, KanbanColumnHeader, type KanbanColumnHeaderProps, type KanbanDirection, type KanbanDragCancelEvent, type KanbanDragEndEvent, KanbanDragHandle, type KanbanDragHandleProps, type KanbanDragOverEvent, type KanbanDragStartEvent, type KanbanDropAxisChange, type KanbanDropIntent, type KanbanGroup, type KanbanGroupOption, type KanbanGrouping, type KanbanHorizontalEdge, type KanbanSchema, type KanbanSortableActivationMode, type KanbanSortableBindings, KanbanSortableBoard, type KanbanSortableBoardProps, type KanbanSortableCellPosition, type KanbanSubgroupBandHeaderContext, KanbanSubgroupBoard, type KanbanSubgroupBoardProps, type KanbanSubgroupCellContext, type KanbanSubgroupCollapsedBandCellContext, type KanbanSubgroupColumnHeaderContext, type KanbanSubgroupLaneColumnActionContext, type KanbanSubgroupLaneColumnSummaryContext, type KanbanSubgroupLaneIdentityContext, KanbanVirtualCell, type KanbanVirtualCellPagination, type KanbanVirtualCellProps, type KanbanVirtualCellSortableContext, type KanbanVirtualScrollRequest, LEGAL_TEXT_CLASS_NAME, Label, type LabelVariant, List, ListEmpty, ListGroup, ListGroupAction, ListGroupCount, ListGroupDescription, ListGroupHeader, ListGroupHeading, ListGroupTitle, ListItem, ListItemActions, ListItemContent, ListItemDescription, ListItemMedia, ListItemStatus, ListItemTitle, MenuAnchor, MenuPreviewLayout, MenuSection, OUTLINE_CONTROL_MIN_SIZE, OUTLINE_EMPHASIS, OVERLAY_COLLISION_PADDING, OVERLAY_LAYER_CLASS_NAMES, OptionColor, type OrderKanbanCellsByColumnsParams, OutlineEmphasis, OutlineItem, OutlineRail, OutlineRailProps, OverlayLayer, PROPERTY_ROW_GRID, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PanelTrigger, Popover, PopoverClose, PopoverPopup as PopoverContent, PopoverPopup, PopoverCreateHandle, PopoverDescription, PopoverPanel, PopoverTitle, PopoverTrigger, PreviewCardPrimitive, PreviewPane, Prose, type RegisterKanbanBoardAutoScrollOptions, type RegisterKanbanCardDragOptions, type ResolveKanbanGroupValueParams, type ResolveKanbanGroupingParams, ResourceCalendar, ResourceCalendarColumn, ResourceCalendarEntry, ResourceCalendarEntryTone, ResourceCalendarLaneLayout, ResourceCalendarLanePlacement, ResourceCalendarPlacement, ResourceCalendarResource, ReviewAuthorAvatar, ReviewCommentAuthor, ReviewCommentCard, ReviewDecisionActions, ReviewDecisionSize, ReviewDecisionState, ReviewDiffDeletion, ReviewDiffInsertion, ReviewDiffSegment, ReviewDiffSegmentType, ReviewDiffText, ReviewOutOfDateNotice, ReviewOutOfDateReason, ReviewOutOfDateTone, ReviewSeverityDot, ReviewSeverityLevel, ReviewStatusBadge, ReviewStatusDot, ReviewStatusSize, ReviewStatusTone, ReviewStatusVariant, SHELL_CHROME_LAYER_CLASS_NAME, SIDEBAR_WIDTH_ICON_PX, SIDEBAR_WIDTH_PX, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, ScrollArea, ScrollBar, ScrollToTop, ScrollToTopProps, SearchField, type SearchFieldProps, SecretInput, type SecretInputProps, SegmentedIconToggle, Select, SelectPopup as SelectContent, SelectPopup, SelectGroup, SelectGroupLabel, SelectItem, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBackdrop, SheetBackdrop as SheetOverlay, SheetClose, SheetPopup as SheetContent, SheetPopup, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetPortal, type SheetSide, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, type SortDirection, SortableHead, type StatusTone, StellaMark, StellaWordmarkLatin, TOAST_RIGHT_OFFSET_VAR, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX, TOOLTIP_OPEN_DELAY_MS, TRACKED_DELETION_STYLE, TRACKED_INSERTION_STYLE, Table, type TableAlign, TableBody, TableCaption, TableCell, type TableCellProps, type TableColumnCapabilities, type TableColumnDescriptor, type TableDensity, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableHeaderProps, type TableInset, type TableProps, TableRow, type TableSchema, type TableScroll, type TableTone, Tabs, TabsPanel as TabsContent, TabsPanel, TabsList, TabsTab, TabsTab as TabsTrigger, TextSeparator, Textarea, type TextareaProps, type ToastPosition, ToastProvider, Toggle, ToggleGroup, ToggleGroupItem, type ToggleGroupProps, type ToggleProps, type ToggleVariant, Tooltip, TooltipPopup as TooltipContent, TooltipPopup, TooltipCreateHandle, TooltipFactTrigger, TooltipProvider, TooltipTrigger, TruncatedText, type TruncatedTextLines, type TruncatedTextProps, TypedCharacterEvent, UNKNOWN_AUTHOR_LABEL, type UseKanbanDropTargetOptions, type UseKanbanSortableOptions, UserText, type WorkspaceCompactNavigation, WorkspaceEndRail, type WorkspaceEndRailChatAction, type WorkspaceEndRailProps, type WorkspaceNavigation, WorkspaceShell, type WorkspaceShellProps, type WorkspaceTopBarContext, XLogoIcon, assertConsecutiveCalendarDates, badgeVariants, buildKanbanBoardMatrix, buttonAccessibleDisabledClass, buttonVariants, cn, composeRefs, containedEventHandler, containedHandler, contentDir, createKanbanDropIntent, duplicateColumnIds, emptyColor, entityTabGlyph, findTableColumn, formVariants, getFirstWeekday, getInitials, getKanbanBoardColumnIdentity, getKanbanBoardLaneIdentity, getKanbanGroupingPropertyId, getKanbanGroups, getKanbanHorizontalEdge, getLocaleWeekInfo, getResourceCalendarPlacement, getWeekendDays, hasKanbanColumnBands, hideableColumnIds, isKanbanGroupingRenderable, isStructuredInputType, isTextOverflowing, kanbanKeyboardCoordinates, layoutResourceCalendarEntries, nextCalendarDate, optionColors, orderKanbanCellsByColumns, outlineEntryText, registerKanbanBoardAutoScroll, registerKanbanCardDrag, resolveDragWidth, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, resolveKanbanColumnBands, resolveKanbanGroupOptions, resolveKanbanGrouping, resolveKeyboardWidth, resolveOptionColor, resolveToastUpdateTimeout, reviewDiffSegmentKeys, reviewSeverityTone, selectKanbanCardFieldIds, selectKanbanRows, shouldForceSidebarCollapsed, sidebarIdentityTriggerClassName, sortableColumnIds, stellaToast, stripDirectionalControls, tableColumnIds, tableColumnSizing, toastCountdownMs, toastDedupeId, typedCharacter, useContentDir, useCopiedFeedback, useCopyConfirmation, useDestructiveActionConfirmation, useInspectorPaneWidth, useIsMobile, useKanbanDropTarget, useKanbanSortable, useKanbanSortableSensors, useLatest, useSidebar, useSidebarInlineSize, useSidebarLayout, useViewportWidth, visibleColumnIds, withoutDirectionalControls };
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import { BOARD_DRAG_OVERLAY_Z_INDEX, OVERLAY_COLLISION_PADDING, OVERLAY_LAYER_CL
|
|
|
6
6
|
import { TOOLTIP_OPEN_DELAY_MS, Tooltip, TooltipContent as TooltipPopup, TooltipCreateHandle, TooltipFactTrigger, TooltipProvider, TooltipTrigger } from "./components/tooltip.js";
|
|
7
7
|
import { AlertDialog, AlertDialogBackdrop, AlertDialogClose, AlertDialogContent as AlertDialogPopup, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPanel, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport } from "./components/alert-dialog.js";
|
|
8
8
|
import { useIsMobile } from "./hooks/use-mobile.js";
|
|
9
|
+
import { BidiText, UserText, stripDirectionalControls, withoutDirectionalControls } from "./components/bidi-text.js";
|
|
9
10
|
import { Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailContent, InspectorRailFooter, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle } from "./inspector/chrome.js";
|
|
10
11
|
import { StellaMark } from "./components/stella-mark.js";
|
|
11
12
|
import { BUTTON_CONTENT, BUTTON_SIZE_CONTENT, Button, ButtonTextRun, buttonAccessibleDisabledClass, buttonVariants } from "./components/button.js";
|
|
@@ -14,11 +15,11 @@ import { Sheet, SheetBackdrop, SheetClose, SheetContent as SheetPopup, SheetDesc
|
|
|
14
15
|
import { WorkspaceEndRail, WorkspaceShell } from "./components/workspace-shell.js";
|
|
15
16
|
import { Avatar, AvatarFallback, AvatarImage } from "./components/avatar.js";
|
|
16
17
|
import { Badge, badgeVariants } from "./components/badge.js";
|
|
17
|
-
import { BidiText, UserText } from "./components/bidi-text.js";
|
|
18
18
|
import { DiscordLogoIcon, GitHubLogoIcon, XLogoIcon } from "./components/brand-icons.js";
|
|
19
19
|
import { DirectionalIcon } from "./components/directional-icon.js";
|
|
20
20
|
import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "./components/breadcrumb.js";
|
|
21
21
|
import { Checkbox } from "./components/checkbox.js";
|
|
22
|
+
import { Collapsible, CollapsiblePanel, CollapsibleTrigger } from "./components/collapsible.js";
|
|
22
23
|
import { ColorPicker, ColorPickerContent, DEFAULT_PRESETS } from "./components/color-picker.js";
|
|
23
24
|
import { containedEventHandler, containedHandler } from "./hooks/use-contained-handler.js";
|
|
24
25
|
import { CONTROL_SIZE, CONTROL_SIZES } from "./lib/control-size.js";
|
|
@@ -61,6 +62,8 @@ import { MenuPreviewLayout, PreviewPane } from "./components/preview-pane.js";
|
|
|
61
62
|
import { LEGAL_TEXT_CLASS_NAME, Prose } from "./components/prose.js";
|
|
62
63
|
import { ScrollToTop } from "./components/scroll-to-top.js";
|
|
63
64
|
import { SecretInput } from "./components/secret-input.js";
|
|
65
|
+
import { Toggle } from "./components/toggle.js";
|
|
66
|
+
import { ToggleGroup, ToggleGroupItem } from "./components/toggle-group.js";
|
|
64
67
|
import { SegmentedIconToggle } from "./components/segmented-icon-toggle.js";
|
|
65
68
|
import { Separator, TextSeparator } from "./components/separator.js";
|
|
66
69
|
import { Skeleton } from "./components/skeleton.js";
|
|
@@ -105,4 +108,4 @@ import { ReviewDiffDeletion, ReviewDiffInsertion, ReviewDiffText, TRACKED_DELETI
|
|
|
105
108
|
import { ReviewOutOfDateNotice } from "./review/review-out-of-date-notice.js";
|
|
106
109
|
import { ReviewSeverityDot, ReviewStatusDot, reviewSeverityTone } from "./review/review-severity-dot.js";
|
|
107
110
|
import { ReviewStatusBadge } from "./review/review-status-badge.js";
|
|
108
|
-
export { APPLICATION_RAIL_BUTTON_SIZE, APPLICATION_RAIL_ICON_SIZE, APPLICATION_RAIL_WIDTH, Accordion, AccordionPanel as AccordionContent, AccordionPanel, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogBackdrop, AlertDialogBackdrop as AlertDialogOverlay, AlertDialogClose, AlertDialogPopup as AlertDialogContent, AlertDialogPopup, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPanel, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AnchoredToastProvider, ApplicationRail, ApplicationRailButton, ApplicationRailContent, ApplicationRailFooter, ApplicationRailHeader, ApplicationRailMenu, ApplicationRailSeparator, Avatar, AvatarFallback, AvatarImage, BOARD_DRAG_OVERLAY_Z_INDEX, BUTTON_CONTENT, BUTTON_SIZE_CONTENT, Badge, BidiText, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonTextRun, CONTROL_SIZE, CONTROL_SIZES, COPIED_RESET_MS, CalendarCell, CalendarEntryButton, CalendarEntrySurface, CalendarGrid, CalendarHeaderCell, CalendarHeaderRow, Checkbox, ColorPicker, ColorPickerContent, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandCollection, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut, CopyButton, CopyFeedback, DEFAULT_PRESETS, DIALOG_MOBILE_LAYOUT, DIALOG_SIZE_CLASS_NAMES, DataTable, DatePickerPopover, DestructiveActionConfirmation, DestructiveConfirmDialog, DetailsGrid, DetailsItem, Dialog, DialogBackdrop, DialogBackdrop as DialogOverlay, DialogClose, DialogPopup as DialogContent, DialogPopup, DialogCreateHandle, DialogDescription, DialogFooter, DialogFormState, DialogHeader, DialogPanel, DialogPortal, DialogProvider, DialogTitle, DialogTrigger, DialogViewport, DirectionalIcon, DiscordLogoIcon, Menu as DropdownMenu, Menu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuPopup, MenuCreateHandle as DropdownMenuCreateHandle, MenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuGroup, MenuItem as DropdownMenuItem, MenuItem, MenuGroupLabel as DropdownMenuLabel, MenuGroupLabel, MenuPortal as DropdownMenuPortal, MenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuShortcut, MenuSub as DropdownMenuSub, MenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubPopup, MenuSubTrigger as DropdownMenuSubTrigger, MenuSubTrigger, MenuTrigger as DropdownMenuTrigger, MenuTrigger, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, FileInput, Form, Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle, GitHubLogoIcon, HexColorPicker, PreviewCard as HoverCard, PreviewCard, PreviewCardPopup as HoverCardContent, PreviewCardPopup, PreviewCardTrigger as HoverCardTrigger, PreviewCardTrigger, INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_EDITOR_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, InlineRenameInput, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorDock, InspectorEmptyRow, InspectorEntityTab, InspectorFacetBar, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailContent, InspectorRailFooter, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle, KANBAN_BAND_CAPTION_ROW_HEIGHT, KANBAN_BAND_CAPTION_ROW_HEIGHT_PX, KANBAN_BAND_PEEK_DELAY_MS, KANBAN_BAND_PEEK_LINGER_MS, KANBAN_BOARD_AUTO_SCROLL_OPTIONS, KANBAN_BOARD_AUTO_SCROLL_SOURCES, KANBAN_BOARD_AXES, KANBAN_BOARD_COLLISION_DETECTION, KANBAN_CARD_DRAG_MIME, KANBAN_CARD_STICKY_TOP_VAR, KANBAN_CHROME_ROW_HEIGHT, KANBAN_CHROME_ROW_HEIGHT_PX, KANBAN_COLLAPSED_BAND_WIDTH_CLASS, KANBAN_COLLAPSED_BAND_WIDTH_PX, KANBAN_COLUMN_GAP_PX, KANBAN_COLUMN_WIDTH_CLASS, KANBAN_COLUMN_WIDTH_PX, KANBAN_DIRECTIONS, KANBAN_DRAG_OVERLAY_Z_INDEX, KANBAN_HORIZONTAL_EDGES, KANBAN_MOUSE_ACTIVATION_DISTANCE, KANBAN_SORTABLE_ACTIVATION_MODES, KANBAN_STICKY_TOP_VAR, KANBAN_TOUCH_ACTIVATION_CONSTRAINT, KANBAN_VIRTUAL_CELL_PAGINATION, KanbanCardDragSurface, KanbanCardShell, KanbanCellAction, KanbanCollapsedBandCaption, KanbanColumnBandHeader, KanbanColumnHeader, KanbanDragHandle, KanbanSortableBoard, KanbanSubgroupBoard, KanbanVirtualCell, LEGAL_TEXT_CLASS_NAME, Label, List, ListEmpty, ListGroup, ListGroupAction, ListGroupCount, ListGroupDescription, ListGroupHeader, ListGroupHeading, ListGroupTitle, ListItem, ListItemActions, ListItemContent, ListItemDescription, ListItemMedia, ListItemStatus, ListItemTitle, MenuAnchor, MenuPreviewLayout, MenuSection, OUTLINE_CONTROL_MIN_SIZE, OUTLINE_EMPHASIS, OVERLAY_COLLISION_PADDING, OVERLAY_LAYER_CLASS_NAMES, OutlineRail, PROPERTY_ROW_GRID, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PanelTrigger, Popover, PopoverClose, PopoverPopup as PopoverContent, PopoverPopup, PopoverCreateHandle, PopoverDescription, PopoverPanel, PopoverTitle, PopoverTrigger, PreviewCardPrimitive, PreviewPane, Prose, ResourceCalendar, ReviewAuthorAvatar, ReviewCommentCard, ReviewDecisionActions, ReviewDiffDeletion, ReviewDiffInsertion, ReviewDiffText, ReviewOutOfDateNotice, ReviewSeverityDot, ReviewStatusBadge, ReviewStatusDot, SHELL_CHROME_LAYER_CLASS_NAME, SIDEBAR_WIDTH_ICON_PX, SIDEBAR_WIDTH_PX, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, ScrollArea, ScrollBar, ScrollToTop, SearchField, SecretInput, SegmentedIconToggle, Select, SelectPopup as SelectContent, SelectPopup, SelectGroup, SelectGroupLabel, SelectItem, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBackdrop, SheetBackdrop as SheetOverlay, SheetClose, SheetPopup as SheetContent, SheetPopup, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, SortableHead, StellaMark, StellaWordmarkLatin, TOAST_RIGHT_OFFSET_VAR, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX, TOOLTIP_OPEN_DELAY_MS, TRACKED_DELETION_STYLE, TRACKED_INSERTION_STYLE, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsPanel, TabsList, TabsTab, TabsTab as TabsTrigger, TextSeparator, Textarea, ToastProvider, Tooltip, TooltipPopup as TooltipContent, TooltipPopup, TooltipCreateHandle, TooltipFactTrigger, TooltipProvider, TooltipTrigger, TruncatedText, UNKNOWN_AUTHOR_LABEL, UserText, WorkspaceEndRail, WorkspaceShell, XLogoIcon, assertConsecutiveCalendarDates, badgeVariants, buildKanbanBoardMatrix, buttonAccessibleDisabledClass, buttonVariants, cn, composeRefs, containedEventHandler, containedHandler, contentDir, createKanbanDropIntent, duplicateColumnIds, emptyColor, entityTabGlyph, findTableColumn, formVariants, getFirstWeekday, getInitials, getKanbanBoardColumnIdentity, getKanbanBoardLaneIdentity, getKanbanGroupingPropertyId, getKanbanGroups, getKanbanHorizontalEdge, getLocaleWeekInfo, getResourceCalendarPlacement, getWeekendDays, hasKanbanColumnBands, hideableColumnIds, isKanbanGroupingRenderable, isStructuredInputType, isTextOverflowing, kanbanKeyboardCoordinates, layoutResourceCalendarEntries, nextCalendarDate, optionColors, orderKanbanCellsByColumns, outlineEntryText, registerKanbanBoardAutoScroll, registerKanbanCardDrag, resolveDragWidth, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, resolveKanbanColumnBands, resolveKanbanGroupOptions, resolveKanbanGrouping, resolveKeyboardWidth, resolveOptionColor, resolveToastUpdateTimeout, reviewDiffSegmentKeys, reviewSeverityTone, selectKanbanCardFieldIds, selectKanbanRows, shouldForceSidebarCollapsed, sidebarIdentityTriggerClassName, sortableColumnIds, stellaToast, tableColumnIds, tableColumnSizing, toastCountdownMs, toastDedupeId, typedCharacter, useContentDir, useCopiedFeedback, useCopyConfirmation, useDestructiveActionConfirmation, useInspectorPaneWidth, useIsMobile, useKanbanDropTarget, useKanbanSortable, useKanbanSortableSensors, useLatest, useSidebar, useSidebarInlineSize, useSidebarLayout, useViewportWidth, visibleColumnIds };
|
|
111
|
+
export { APPLICATION_RAIL_BUTTON_SIZE, APPLICATION_RAIL_ICON_SIZE, APPLICATION_RAIL_WIDTH, Accordion, AccordionPanel as AccordionContent, AccordionPanel, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogBackdrop, AlertDialogBackdrop as AlertDialogOverlay, AlertDialogClose, AlertDialogPopup as AlertDialogContent, AlertDialogPopup, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPanel, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AnchoredToastProvider, ApplicationRail, ApplicationRailButton, ApplicationRailContent, ApplicationRailFooter, ApplicationRailHeader, ApplicationRailMenu, ApplicationRailSeparator, Avatar, AvatarFallback, AvatarImage, BOARD_DRAG_OVERLAY_Z_INDEX, BUTTON_CONTENT, BUTTON_SIZE_CONTENT, Badge, BidiText, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonTextRun, CONTROL_SIZE, CONTROL_SIZES, COPIED_RESET_MS, CalendarCell, CalendarEntryButton, CalendarEntrySurface, CalendarGrid, CalendarHeaderCell, CalendarHeaderRow, Checkbox, Collapsible, CollapsiblePanel, CollapsibleTrigger, ColorPicker, ColorPickerContent, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandCollection, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut, CopyButton, CopyFeedback, DEFAULT_PRESETS, DIALOG_MOBILE_LAYOUT, DIALOG_SIZE_CLASS_NAMES, DataTable, DatePickerPopover, DestructiveActionConfirmation, DestructiveConfirmDialog, DetailsGrid, DetailsItem, Dialog, DialogBackdrop, DialogBackdrop as DialogOverlay, DialogClose, DialogPopup as DialogContent, DialogPopup, DialogCreateHandle, DialogDescription, DialogFooter, DialogFormState, DialogHeader, DialogPanel, DialogPortal, DialogProvider, DialogTitle, DialogTrigger, DialogViewport, DirectionalIcon, DiscordLogoIcon, Menu as DropdownMenu, Menu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuPopup, MenuCreateHandle as DropdownMenuCreateHandle, MenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuGroup, MenuItem as DropdownMenuItem, MenuItem, MenuGroupLabel as DropdownMenuLabel, MenuGroupLabel, MenuPortal as DropdownMenuPortal, MenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuShortcut, MenuSub as DropdownMenuSub, MenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubPopup, MenuSubTrigger as DropdownMenuSubTrigger, MenuSubTrigger, MenuTrigger as DropdownMenuTrigger, MenuTrigger, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, FileInput, Form, Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle, GitHubLogoIcon, HexColorPicker, PreviewCard as HoverCard, PreviewCard, PreviewCardPopup as HoverCardContent, PreviewCardPopup, PreviewCardTrigger as HoverCardTrigger, PreviewCardTrigger, INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_EDITOR_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, InlineRenameInput, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorDock, InspectorEmptyRow, InspectorEntityTab, InspectorFacetBar, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailContent, InspectorRailFooter, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle, KANBAN_BAND_CAPTION_ROW_HEIGHT, KANBAN_BAND_CAPTION_ROW_HEIGHT_PX, KANBAN_BAND_PEEK_DELAY_MS, KANBAN_BAND_PEEK_LINGER_MS, KANBAN_BOARD_AUTO_SCROLL_OPTIONS, KANBAN_BOARD_AUTO_SCROLL_SOURCES, KANBAN_BOARD_AXES, KANBAN_BOARD_COLLISION_DETECTION, KANBAN_CARD_DRAG_MIME, KANBAN_CARD_STICKY_TOP_VAR, KANBAN_CHROME_ROW_HEIGHT, KANBAN_CHROME_ROW_HEIGHT_PX, KANBAN_COLLAPSED_BAND_WIDTH_CLASS, KANBAN_COLLAPSED_BAND_WIDTH_PX, KANBAN_COLUMN_GAP_PX, KANBAN_COLUMN_WIDTH_CLASS, KANBAN_COLUMN_WIDTH_PX, KANBAN_DIRECTIONS, KANBAN_DRAG_OVERLAY_Z_INDEX, KANBAN_HORIZONTAL_EDGES, KANBAN_MOUSE_ACTIVATION_DISTANCE, KANBAN_SORTABLE_ACTIVATION_MODES, KANBAN_STICKY_TOP_VAR, KANBAN_TOUCH_ACTIVATION_CONSTRAINT, KANBAN_VIRTUAL_CELL_PAGINATION, KanbanCardDragSurface, KanbanCardShell, KanbanCellAction, KanbanCollapsedBandCaption, KanbanColumnBandHeader, KanbanColumnHeader, KanbanDragHandle, KanbanSortableBoard, KanbanSubgroupBoard, KanbanVirtualCell, LEGAL_TEXT_CLASS_NAME, Label, List, ListEmpty, ListGroup, ListGroupAction, ListGroupCount, ListGroupDescription, ListGroupHeader, ListGroupHeading, ListGroupTitle, ListItem, ListItemActions, ListItemContent, ListItemDescription, ListItemMedia, ListItemStatus, ListItemTitle, MenuAnchor, MenuPreviewLayout, MenuSection, OUTLINE_CONTROL_MIN_SIZE, OUTLINE_EMPHASIS, OVERLAY_COLLISION_PADDING, OVERLAY_LAYER_CLASS_NAMES, OutlineRail, PROPERTY_ROW_GRID, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PanelTrigger, Popover, PopoverClose, PopoverPopup as PopoverContent, PopoverPopup, PopoverCreateHandle, PopoverDescription, PopoverPanel, PopoverTitle, PopoverTrigger, PreviewCardPrimitive, PreviewPane, Prose, ResourceCalendar, ReviewAuthorAvatar, ReviewCommentCard, ReviewDecisionActions, ReviewDiffDeletion, ReviewDiffInsertion, ReviewDiffText, ReviewOutOfDateNotice, ReviewSeverityDot, ReviewStatusBadge, ReviewStatusDot, SHELL_CHROME_LAYER_CLASS_NAME, SIDEBAR_WIDTH_ICON_PX, SIDEBAR_WIDTH_PX, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, ScrollArea, ScrollBar, ScrollToTop, SearchField, SecretInput, SegmentedIconToggle, Select, SelectPopup as SelectContent, SelectPopup, SelectGroup, SelectGroupLabel, SelectItem, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBackdrop, SheetBackdrop as SheetOverlay, SheetClose, SheetPopup as SheetContent, SheetPopup, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, SortableHead, StellaMark, StellaWordmarkLatin, TOAST_RIGHT_OFFSET_VAR, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX, TOOLTIP_OPEN_DELAY_MS, TRACKED_DELETION_STYLE, TRACKED_INSERTION_STYLE, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsPanel, TabsList, TabsTab, TabsTab as TabsTrigger, TextSeparator, Textarea, ToastProvider, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipPopup as TooltipContent, TooltipPopup, TooltipCreateHandle, TooltipFactTrigger, TooltipProvider, TooltipTrigger, TruncatedText, UNKNOWN_AUTHOR_LABEL, UserText, WorkspaceEndRail, WorkspaceShell, XLogoIcon, assertConsecutiveCalendarDates, badgeVariants, buildKanbanBoardMatrix, buttonAccessibleDisabledClass, buttonVariants, cn, composeRefs, containedEventHandler, containedHandler, contentDir, createKanbanDropIntent, duplicateColumnIds, emptyColor, entityTabGlyph, findTableColumn, formVariants, getFirstWeekday, getInitials, getKanbanBoardColumnIdentity, getKanbanBoardLaneIdentity, getKanbanGroupingPropertyId, getKanbanGroups, getKanbanHorizontalEdge, getLocaleWeekInfo, getResourceCalendarPlacement, getWeekendDays, hasKanbanColumnBands, hideableColumnIds, isKanbanGroupingRenderable, isStructuredInputType, isTextOverflowing, kanbanKeyboardCoordinates, layoutResourceCalendarEntries, nextCalendarDate, optionColors, orderKanbanCellsByColumns, outlineEntryText, registerKanbanBoardAutoScroll, registerKanbanCardDrag, resolveDragWidth, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, resolveKanbanColumnBands, resolveKanbanGroupOptions, resolveKanbanGrouping, resolveKeyboardWidth, resolveOptionColor, resolveToastUpdateTimeout, reviewDiffSegmentKeys, reviewSeverityTone, selectKanbanCardFieldIds, selectKanbanRows, shouldForceSidebarCollapsed, sidebarIdentityTriggerClassName, sortableColumnIds, stellaToast, stripDirectionalControls, tableColumnIds, tableColumnSizing, toastCountdownMs, toastDedupeId, typedCharacter, useContentDir, useCopiedFeedback, useCopyConfirmation, useDestructiveActionConfirmation, useInspectorPaneWidth, useIsMobile, useKanbanDropTarget, useKanbanSortable, useKanbanSortableSensors, useLatest, useSidebar, useSidebarInlineSize, useSidebarLayout, useViewportWidth, visibleColumnIds, withoutDirectionalControls };
|
package/dist/inspector/chrome.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { cn } from "../lib/utils.js";
|
|
2
2
|
import { PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, TOOLBAR_ROW_HEIGHT } from "./layout-tokens.js";
|
|
3
|
+
import { withoutDirectionalControls } from "../components/bidi-text.js";
|
|
3
4
|
import { jsx } from "react/jsx-runtime";
|
|
4
5
|
//#region src/inspector/chrome.tsx
|
|
5
6
|
/**
|
|
@@ -91,7 +92,7 @@ const InspectorTitle = ({ children, className, ...props }) => /* @__PURE__ */ js
|
|
|
91
92
|
"data-slot": "inspector-title",
|
|
92
93
|
dir: "auto",
|
|
93
94
|
...props,
|
|
94
|
-
children
|
|
95
|
+
children: withoutDirectionalControls(children)
|
|
95
96
|
});
|
|
96
97
|
const InspectorDescription = ({ className, ...props }) => /* @__PURE__ */ jsx("p", {
|
|
97
98
|
className: cn("text-muted-foreground text-2xs truncate [unicode-bidi:isolate]", className),
|
|
@@ -83,14 +83,18 @@ const InspectorFacetBar = ({ facet, facets, labels, disabledFacets, pulseSeq, ac
|
|
|
83
83
|
"data-slot": "inspector-facet-bar",
|
|
84
84
|
ref: containerRef,
|
|
85
85
|
children: [
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
86
|
+
/* @__PURE__ */ jsx("div", {
|
|
87
|
+
className: "contents",
|
|
88
|
+
role: "tablist",
|
|
89
|
+
children: visibleFacets.map((value) => /* @__PURE__ */ jsx(FacetChip, {
|
|
90
|
+
activeBadge,
|
|
91
|
+
disabled: disabledFacets?.has(value) ?? false,
|
|
92
|
+
isActive: value === facet,
|
|
93
|
+
label: labels[value],
|
|
94
|
+
onSelect: () => onChange(value),
|
|
95
|
+
value
|
|
96
|
+
}, value))
|
|
97
|
+
}),
|
|
94
98
|
overflowing && /* @__PURE__ */ jsxs(Menu, { children: [/* @__PURE__ */ jsx(MenuTrigger, {
|
|
95
99
|
"aria-label": overflowMenuLabel,
|
|
96
100
|
className: "ms-auto",
|
|
@@ -161,11 +165,13 @@ const CHIP_CLASS = "shrink-0 rounded-md px-1.5 py-1 text-xs font-medium whitespa
|
|
|
161
165
|
const INACTIVE_CHIP_CLASS = "text-muted-foreground hover:bg-muted hover:text-foreground";
|
|
162
166
|
const FacetChip = ({ label, value, isActive, disabled, activeBadge, onSelect }) => /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
|
|
163
167
|
render: /* @__PURE__ */ jsx("button", {
|
|
168
|
+
"aria-selected": isActive,
|
|
164
169
|
className: cn(CHIP_CLASS, isActive ? "bg-foreground text-background" : INACTIVE_CHIP_CLASS, disabled && "cursor-not-allowed opacity-40 hover:bg-transparent"),
|
|
165
170
|
"data-facet-chip-active": isActive ? "" : void 0,
|
|
166
171
|
"data-facet-value": value,
|
|
167
172
|
disabled,
|
|
168
173
|
onClick: onSelect,
|
|
174
|
+
role: "tab",
|
|
169
175
|
type: "button"
|
|
170
176
|
}),
|
|
171
177
|
children: label
|
|
@@ -37,7 +37,7 @@ const resolveKanbanColumnBands = (columns) => {
|
|
|
37
37
|
last.columns.push(column);
|
|
38
38
|
continue;
|
|
39
39
|
}
|
|
40
|
-
if (last
|
|
40
|
+
if (last !== void 0 && last.band !== null) closedBandIds.add(last.band.id);
|
|
41
41
|
if (band !== null && closedBandIds.has(band.id)) return panic(`Kanban column band "${band.id}" is not contiguous: it resumes at column ${getKanbanBoardColumnIdentity(column)}`);
|
|
42
42
|
spans.push({
|
|
43
43
|
band,
|
|
@@ -6,9 +6,9 @@ const toInlineDropPosition = (edge, direction) => {
|
|
|
6
6
|
/** The new order, or null when the drop leaves the order unchanged. */
|
|
7
7
|
const reorderInlineIds = ({ ids, draggedId, targetId, position }) => {
|
|
8
8
|
if (draggedId === targetId || !ids.includes(draggedId) || !ids.includes(targetId)) return null;
|
|
9
|
-
const
|
|
10
|
-
const targetIndex =
|
|
11
|
-
|
|
9
|
+
const reordered = ids.filter((id) => id !== draggedId);
|
|
10
|
+
const targetIndex = reordered.indexOf(targetId);
|
|
11
|
+
reordered.splice(position === "after" ? targetIndex + 1 : targetIndex, 0, draggedId);
|
|
12
12
|
return reordered.every((id, index) => id === ids[index]) ? null : reordered;
|
|
13
13
|
};
|
|
14
14
|
//#endregion
|
package/dist/lib/tab-order.d.ts
CHANGED
|
@@ -10,5 +10,23 @@
|
|
|
10
10
|
* the whole of the workaround, so compare identity rather than count, because
|
|
11
11
|
* React moves the same nodes when it reorders keyed children.
|
|
12
12
|
*/
|
|
13
|
+
type TabEdges = {
|
|
14
|
+
left: number;
|
|
15
|
+
right: number;
|
|
16
|
+
};
|
|
17
|
+
type TabStrip = {
|
|
18
|
+
scrollLeft: number;
|
|
19
|
+
getBoundingClientRect: () => TabEdges;
|
|
20
|
+
querySelector: (selector: string) => {
|
|
21
|
+
getBoundingClientRect: () => TabEdges;
|
|
22
|
+
} | null;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Brings the active tab back inside a horizontal strip that scrolled it out of
|
|
26
|
+
* view. Moves the strip only, never an ancestor, and works from rendered edges
|
|
27
|
+
* so a right-to-left strip needs no separate case.
|
|
28
|
+
*/
|
|
29
|
+
export declare const revealActiveTab: (list: TabStrip) => void;
|
|
13
30
|
export declare const hasTabOrderChanged: <T>(previous: readonly T[], next: readonly T[]) => boolean;
|
|
14
|
-
//#endregion
|
|
31
|
+
//#endregion
|
|
32
|
+
export {};
|
package/dist/lib/tab-order.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
//#region src/lib/tab-order.ts
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Base UI measures the tabs indicator during render, so it reads the DOM as it
|
|
7
|
-
* stood before the commit. Its correction is a `ResizeObserver`, which catches
|
|
8
|
-
* an insertion or a removal (the list's own width changes) but not a reorder:
|
|
9
|
-
* there the tabs swap places without anything changing size. Detecting that is
|
|
10
|
-
* the whole of the workaround, so compare identity rather than count, because
|
|
11
|
-
* React moves the same nodes when it reorders keyed children.
|
|
3
|
+
* Brings the active tab back inside a horizontal strip that scrolled it out of
|
|
4
|
+
* view. Moves the strip only, never an ancestor, and works from rendered edges
|
|
5
|
+
* so a right-to-left strip needs no separate case.
|
|
12
6
|
*/
|
|
7
|
+
const revealActiveTab = (list) => {
|
|
8
|
+
const active = list.querySelector("[role=\"tab\"][aria-selected=\"true\"]");
|
|
9
|
+
if (active === null) return;
|
|
10
|
+
const strip = list.getBoundingClientRect();
|
|
11
|
+
const tab = active.getBoundingClientRect();
|
|
12
|
+
if (tab.left < strip.left) list.scrollLeft -= strip.left - tab.left;
|
|
13
|
+
else if (tab.right > strip.right) list.scrollLeft += tab.right - strip.right;
|
|
14
|
+
};
|
|
13
15
|
const hasTabOrderChanged = (previous, next) => previous.length !== next.length || next.some((tab, index) => tab !== previous[index]);
|
|
14
16
|
//#endregion
|
|
15
|
-
export { hasTabOrderChanged };
|
|
17
|
+
export { hasTabOrderChanged, revealActiveTab };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CheckIcon, RotateCcwIcon, Trash2Icon } from "../icons.js";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
|
-
import { Button } from "../components/button.js";
|
|
4
3
|
import { BidiText } from "../components/bidi-text.js";
|
|
4
|
+
import { Button } from "../components/button.js";
|
|
5
5
|
import { ReviewAuthorAvatar } from "./review-author-avatar.js";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import { Temporal } from "temporal-polyfill/full";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stll/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.62.0",
|
|
4
4
|
"description": "Stella's design system: bidi-aware React primitives built on Base UI, the dockable inspector pane, and the Tailwind v4 theme they are styled with.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"base-ui",
|
|
@@ -50,6 +50,10 @@
|
|
|
50
50
|
"types": "./dist/components/accordion.d.ts",
|
|
51
51
|
"import": "./dist/components/accordion.js"
|
|
52
52
|
},
|
|
53
|
+
"./collapsible": {
|
|
54
|
+
"types": "./dist/components/collapsible.d.ts",
|
|
55
|
+
"import": "./dist/components/collapsible.js"
|
|
56
|
+
},
|
|
53
57
|
"./application-rail": {
|
|
54
58
|
"types": "./dist/components/application-rail.d.ts",
|
|
55
59
|
"import": "./dist/components/application-rail.js"
|
|
@@ -502,6 +506,14 @@
|
|
|
502
506
|
"types": "./dist/components/toast.d.ts",
|
|
503
507
|
"import": "./dist/components/toast.js"
|
|
504
508
|
},
|
|
509
|
+
"./toggle": {
|
|
510
|
+
"types": "./dist/components/toggle.d.ts",
|
|
511
|
+
"import": "./dist/components/toggle.js"
|
|
512
|
+
},
|
|
513
|
+
"./toggle-group": {
|
|
514
|
+
"types": "./dist/components/toggle-group.d.ts",
|
|
515
|
+
"import": "./dist/components/toggle-group.js"
|
|
516
|
+
},
|
|
505
517
|
"./tooltip": {
|
|
506
518
|
"types": "./dist/components/tooltip.d.ts",
|
|
507
519
|
"import": "./dist/components/tooltip.js"
|