@exponential_app/eui 0.2.1 → 0.3.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/catalog/a11y.json +15 -1
- package/catalog/core.catalog.json +142 -0
- package/catalog/core.schema.json +198 -1
- package/catalog/host.json +10 -0
- package/catalog/macros.json +541 -1
- package/catalog/recipes.json +2 -2
- package/catalog/strings.json +5 -0
- package/catalog/theme.schema.json +2066 -212
- package/conformance/manifest.json +5 -5
- package/dist/chunks/{index-gtk2gwsb.js → index-4z7f2bp1.js} +160 -33
- package/dist/chunks/{index-gtk2gwsb.js.map → index-4z7f2bp1.js.map} +6 -5
- package/dist/chunks/{index-5fmaa0xq.js → index-abcjanhc.js} +629 -3
- package/dist/chunks/{index-5fmaa0xq.js.map → index-abcjanhc.js.map} +2 -2
- package/dist/chunks/{index-62yzr94z.js → index-dx45asrf.js} +99 -3
- package/dist/chunks/{index-62yzr94z.js.map → index-dx45asrf.js.map} +2 -2
- package/dist/chunks/{index-bg2jsgjq.js → index-h3zgfghf.js} +304 -6
- package/dist/chunks/{index-bg2jsgjq.js.map → index-h3zgfghf.js.map} +2 -2
- package/dist/conformance.js +7901 -614
- package/dist/conformance.js.map +2 -2
- package/dist/entries/prompt.js +2 -2
- package/dist/entries/schema.js +2 -2
- package/dist/host/index.js +20 -4
- package/dist/host/index.js.map +1 -1
- package/dist/index.js +35 -5
- package/dist/index.js.map +2 -2
- package/dist/types/src/catalog.generated.d.ts +23 -3
- package/dist/types/src/host/contract.d.ts +17 -0
- package/dist/types/src/host/exposes.d.ts +68 -0
- package/dist/types/src/host/index.d.ts +1 -0
- package/dist/types/src/host/package.d.ts +8 -0
- package/dist/types/src/web/primitives/carousel.d.ts +17 -0
- package/dist/types/src/web/primitives/index.d.ts +3 -0
- package/dist/types/src/web/primitives/mosaic.d.ts +30 -0
- package/dist/types/src/web/primitives/outline.d.ts +22 -0
- package/dist/web/index.js +8 -2
- package/dist/web/index.js.map +4 -4
- package/dist/web/primitives/index.js +59 -1
- package/dist/web/primitives/index.js.map +6 -3
- package/docs/components.generated.json +150 -1
- package/docs/package-format.md +56 -1
- package/docs/round-6-contract.md +108 -0
- package/docs/themes.generated.json +39 -2
- package/fixtures/bind-time.json +1464 -0
- package/fixtures/catalog-components.json +96 -0
- package/fixtures/catalog-macros.json +1159 -48
- package/fixtures/conformance-baseline.json +46073 -44448
- package/fixtures/conformance-known.json +76 -64
- package/fixtures/host-router.json +539 -1
- package/fixtures/kitchen-sink.expanded.json +614 -1
- package/fixtures/kitchen-sink.json +69 -1
- package/fixtures/primitive-specimens.json +3 -0
- package/fixtures/prompt-budget.json +14 -14
- package/fixtures/specimens.json +122 -0
- package/fixtures/theme-recipes.json +4617 -1691
- package/fixtures/theme-resolved.json +1154 -2
- package/generated/ExponentialUICatalog.generated.kt +13 -13
- package/generated/ExponentialUICatalog.generated.swift +13 -13
- package/generated/ExponentialUIThemes.generated.kt +7 -7
- package/generated/ExponentialUIThemes.generated.swift +7 -7
- package/generated/catalog.descriptions.generated.rs +1 -1
- package/generated/catalog.generated.rs +18 -18
- package/generated/catalog.themes.generated.rs +8 -8
- package/generated/core.descriptions.json +96 -0
- package/generated/core.runtime.json +86 -0
- package/package.json +1 -1
- package/themes/neutral.theme.json +288 -0
|
@@ -7,12 +7,12 @@ export declare const BASIC_VERSION = "v0.9";
|
|
|
7
7
|
export declare const CATALOG_VERSION = "1";
|
|
8
8
|
export declare const UNKNOWN_COMPONENT_NAME = "Unknown";
|
|
9
9
|
/** Every component in source order (the hidden placeholder included). */
|
|
10
|
-
export declare const COMPONENT_NAMES: readonly ["Box", "Stack", "Grid", "Card", "Separator", "List", "Resizable", "ScrollArea", "Sidebar", "SplitView", "AppBar", "Page", "Toolbar", "Section", "Group", "Text", "Heading", "Markdown", "CodeBlock", "Kbd", "Label", "Image", "Icon", "Video", "AudioPlayer", "Avatar", "QrCode", "Carousel", "Tabs", "Segmented", "Accordion", "Collapsible", "Trace", "TraceItem", "Plan", "Pagination", "Breadcrumb", "Stepper", "Dialog", "Drawer", "DockCard", "AlertDialog", "Popover", "Tooltip", "Menu", "Toast", "Badge", "Alert", "Chip", "EmptyState", "Progress", "Meter", "Ring", "Spinner", "Skeleton", "VoiceWave", "CallSurface", "Table", "Chart", "Sparkline", "StatTile", "Button", "Link", "Toggle", "Form", "FieldGroup", "FormActions", "Input", "Textarea", "NumberField", "Checkbox", "Radio", "ChoiceTiles", "Switch", "Slider", "Rating", "Select", "SearchList", "ChipInput", "DatePicker", "DateRangePicker", "TimePicker", "FileUpload", "QrScanner", "Composer", "Row", "MessageBubble", "TreeGuides", "Unknown"];
|
|
10
|
+
export declare const COMPONENT_NAMES: readonly ["Box", "Stack", "Grid", "Card", "Separator", "List", "Resizable", "ScrollArea", "Sidebar", "SplitView", "AppBar", "Page", "Toolbar", "Section", "Group", "Text", "Heading", "Markdown", "CodeBlock", "Kbd", "Label", "Image", "Icon", "Video", "AudioPlayer", "Avatar", "QrCode", "Carousel", "Mosaic", "Tabs", "Segmented", "Accordion", "Collapsible", "Trace", "TraceItem", "Plan", "Pagination", "Breadcrumb", "Outline", "Stepper", "Dialog", "Drawer", "DockCard", "AlertDialog", "Popover", "Tooltip", "Menu", "Toast", "Badge", "Alert", "Chip", "EmptyState", "Progress", "Meter", "Ring", "Spinner", "Skeleton", "VoiceWave", "CallSurface", "Table", "Chart", "Sparkline", "StatTile", "Button", "Link", "Toggle", "Form", "FieldGroup", "FormActions", "Input", "Textarea", "NumberField", "Checkbox", "Radio", "ChoiceTiles", "Switch", "Slider", "Rating", "Select", "SearchList", "ChipInput", "DatePicker", "DateRangePicker", "TimePicker", "FileUpload", "QrScanner", "Composer", "Row", "MessageBubble", "TreeGuides", "Unknown"];
|
|
11
11
|
export type ComponentName = (typeof COMPONENT_NAMES)[number];
|
|
12
12
|
export declare const NATIVE_COMPONENTS: readonly ["Box", "List", "Resizable", "Text", "Markdown", "CodeBlock", "Image", "Icon", "Video", "AudioPlayer", "Avatar", "QrCode", "Carousel", "Tabs", "Segmented", "Accordion", "Dialog", "Drawer", "Popover", "Tooltip", "Menu", "Toast", "Ring", "Spinner", "Skeleton", "VoiceWave", "Table", "Chart", "Button", "Link", "Toggle", "Form", "Input", "Textarea", "NumberField", "Checkbox", "Radio", "ChoiceTiles", "Switch", "Slider", "Select", "SearchList", "ChipInput", "DatePicker", "DateRangePicker", "TimePicker", "FileUpload", "QrScanner", "Composer", "TreeGuides", "Unknown"];
|
|
13
|
-
export declare const MACRO_COMPONENTS: readonly ["Stack", "Grid", "Card", "Separator", "ScrollArea", "Sidebar", "SplitView", "AppBar", "Page", "Toolbar", "Section", "Group", "Heading", "Kbd", "Label", "Collapsible", "Trace", "TraceItem", "Plan", "Pagination", "Breadcrumb", "Stepper", "DockCard", "AlertDialog", "Badge", "Alert", "Chip", "EmptyState", "Progress", "Meter", "CallSurface", "Sparkline", "StatTile", "FieldGroup", "FormActions", "Rating", "Row", "MessageBubble"];
|
|
13
|
+
export declare const MACRO_COMPONENTS: readonly ["Stack", "Grid", "Card", "Separator", "ScrollArea", "Sidebar", "SplitView", "AppBar", "Page", "Toolbar", "Section", "Group", "Heading", "Kbd", "Label", "Mosaic", "Collapsible", "Trace", "TraceItem", "Plan", "Pagination", "Breadcrumb", "Outline", "Stepper", "DockCard", "AlertDialog", "Badge", "Alert", "Chip", "EmptyState", "Progress", "Meter", "CallSurface", "Sparkline", "StatTile", "FieldGroup", "FormActions", "Rating", "Row", "MessageBubble"];
|
|
14
14
|
/** The core-lite subset (no overlays, media or Chart). */
|
|
15
|
-
export declare const LITE_COMPONENTS: readonly ["Box", "Stack", "Grid", "Card", "Separator", "List", "Resizable", "ScrollArea", "Sidebar", "SplitView", "AppBar", "Page", "Toolbar", "Section", "Group", "Text", "Heading", "Markdown", "CodeBlock", "Kbd", "Label", "Icon", "Avatar", "Tabs", "Segmented", "Collapsible", "Trace", "TraceItem", "Plan", "Breadcrumb", "Stepper", "Badge", "Alert", "Chip", "EmptyState", "Progress", "Meter", "Ring", "Skeleton", "StatTile", "Button", "Link", "Form", "FieldGroup", "FormActions", "Input", "Textarea", "NumberField", "Checkbox", "Switch", "Rating", "Select", "SearchList", "ChipInput", "DatePicker", "DateRangePicker", "TimePicker", "FileUpload", "Composer", "Row", "MessageBubble"];
|
|
15
|
+
export declare const LITE_COMPONENTS: readonly ["Box", "Stack", "Grid", "Card", "Separator", "List", "Resizable", "ScrollArea", "Sidebar", "SplitView", "AppBar", "Page", "Toolbar", "Section", "Group", "Text", "Heading", "Markdown", "CodeBlock", "Kbd", "Label", "Icon", "Avatar", "Tabs", "Segmented", "Collapsible", "Trace", "TraceItem", "Plan", "Breadcrumb", "Outline", "Stepper", "Badge", "Alert", "Chip", "EmptyState", "Progress", "Meter", "Ring", "Skeleton", "StatTile", "Button", "Link", "Form", "FieldGroup", "FormActions", "Input", "Textarea", "NumberField", "Checkbox", "Switch", "Rating", "Select", "SearchList", "ChipInput", "DatePicker", "DateRangePicker", "TimePicker", "FileUpload", "Composer", "Row", "MessageBubble"];
|
|
16
16
|
export declare const COMPONENT_GROUPS: Record<ComponentName, string>;
|
|
17
17
|
/** The specimen id each component has on ui.exponential.at. */
|
|
18
18
|
export declare const SPECIMEN_IDS: Record<ComponentName, string>;
|
|
@@ -250,6 +250,15 @@ export interface Shapes {
|
|
|
250
250
|
icon?: IconName;
|
|
251
251
|
status?: TraceStatusValue;
|
|
252
252
|
};
|
|
253
|
+
outlineItem: {
|
|
254
|
+
id: string;
|
|
255
|
+
title: string | Dynamic;
|
|
256
|
+
count?: number | Dynamic;
|
|
257
|
+
};
|
|
258
|
+
picture: {
|
|
259
|
+
src: string;
|
|
260
|
+
alt?: string;
|
|
261
|
+
};
|
|
253
262
|
}
|
|
254
263
|
/** Every component's props, by name. */
|
|
255
264
|
export interface ComponentProps {
|
|
@@ -426,6 +435,12 @@ export interface ComponentProps {
|
|
|
426
435
|
page?: number | Dynamic;
|
|
427
436
|
loop?: boolean;
|
|
428
437
|
indicators?: boolean;
|
|
438
|
+
counter?: boolean;
|
|
439
|
+
thumbnails?: string[];
|
|
440
|
+
};
|
|
441
|
+
Mosaic: {
|
|
442
|
+
pictures: Shapes["picture"][];
|
|
443
|
+
label?: string;
|
|
429
444
|
};
|
|
430
445
|
Tabs: {
|
|
431
446
|
tabs: Shapes["tab"][];
|
|
@@ -482,6 +497,11 @@ export interface ComponentProps {
|
|
|
482
497
|
Breadcrumb: {
|
|
483
498
|
items: Shapes["option"][];
|
|
484
499
|
};
|
|
500
|
+
Outline: {
|
|
501
|
+
items: Shapes["outlineItem"][];
|
|
502
|
+
value?: string | Dynamic;
|
|
503
|
+
caption?: string;
|
|
504
|
+
};
|
|
485
505
|
Stepper: {
|
|
486
506
|
steps: Shapes["step"][];
|
|
487
507
|
current?: number | Dynamic;
|
|
@@ -84,6 +84,23 @@ export declare const HOST_CONTRACT: {
|
|
|
84
84
|
transports: string[];
|
|
85
85
|
functionPrefix: string;
|
|
86
86
|
};
|
|
87
|
+
exposes: {
|
|
88
|
+
$comment: string;
|
|
89
|
+
limits: {
|
|
90
|
+
namePattern: string;
|
|
91
|
+
nameMax: number;
|
|
92
|
+
titleMax: number;
|
|
93
|
+
descriptionMax: number;
|
|
94
|
+
maxTools: number;
|
|
95
|
+
separator: string;
|
|
96
|
+
};
|
|
97
|
+
runKinds: string[];
|
|
98
|
+
recordOps: string[];
|
|
99
|
+
readRecordOps: string[];
|
|
100
|
+
readOpWords: string[];
|
|
101
|
+
destructiveWords: string[];
|
|
102
|
+
actionPattern: string;
|
|
103
|
+
};
|
|
87
104
|
extensions: {
|
|
88
105
|
$comment: string;
|
|
89
106
|
versionPattern: string;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { PackageIssue } from "./package.js";
|
|
2
|
+
export declare const EXPOSES_LIMITS: {
|
|
3
|
+
namePattern: string;
|
|
4
|
+
nameMax: number;
|
|
5
|
+
titleMax: number;
|
|
6
|
+
descriptionMax: number;
|
|
7
|
+
maxTools: number;
|
|
8
|
+
separator: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const EXPOSE_RUN_KINDS: readonly string[];
|
|
11
|
+
export type ExposeAccess = `read` | `write`;
|
|
12
|
+
export interface PackageExpose {
|
|
13
|
+
/** `^[a-z][a-z0-9_]*$`, at most `limits.nameMax`, never `__`. */
|
|
14
|
+
name: string;
|
|
15
|
+
title: string;
|
|
16
|
+
description: string;
|
|
17
|
+
/** A JSON Schema of `type: "object"`: the tool's inputSchema. */
|
|
18
|
+
input: {
|
|
19
|
+
type: `object`;
|
|
20
|
+
properties?: Record<string, unknown>;
|
|
21
|
+
required?: string[];
|
|
22
|
+
};
|
|
23
|
+
access: ExposeAccess;
|
|
24
|
+
/** Exactly one of `records`, `action`, `upstream`; every string may hold
|
|
25
|
+
* `${input.<path>}` templates. */
|
|
26
|
+
run: {
|
|
27
|
+
records: {
|
|
28
|
+
op: `list` | `get` | `upsert`;
|
|
29
|
+
kind: string;
|
|
30
|
+
id?: unknown;
|
|
31
|
+
where?: Record<string, unknown>;
|
|
32
|
+
data?: Record<string, unknown>;
|
|
33
|
+
limit?: unknown;
|
|
34
|
+
};
|
|
35
|
+
} | {
|
|
36
|
+
action: string;
|
|
37
|
+
args?: Record<string, unknown>;
|
|
38
|
+
} | {
|
|
39
|
+
upstream: string;
|
|
40
|
+
tool: string;
|
|
41
|
+
args?: Record<string, unknown>;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** One problem with a binding: the eMCP error `code` (`fixtures/exposes.json`
|
|
45
|
+
* `errors`), the binding's `index` (null = the list) and the package issue. */
|
|
46
|
+
export interface ExposeIssue extends PackageIssue {
|
|
47
|
+
index: number | null;
|
|
48
|
+
code: string;
|
|
49
|
+
}
|
|
50
|
+
/** The input paths a run's templates name (`${input.a.b}` → `a.b`), in
|
|
51
|
+
* document order. */
|
|
52
|
+
export declare function exposeTemplatePaths(value: unknown): string[];
|
|
53
|
+
/** An action reads when the last word of its name is a read word
|
|
54
|
+
* (`exponential.issues.list`); a verb writes. */
|
|
55
|
+
export declare function exposeActionAccess(action: string): ExposeAccess;
|
|
56
|
+
/** A tool or action name holding a destructive word (delete, merge, close,
|
|
57
|
+
* end, remove, trash) is never exposed. */
|
|
58
|
+
export declare function exposeNameDestructive(name: string): boolean;
|
|
59
|
+
/** Every problem with a package's `upstreams`: the team MCP server names
|
|
60
|
+
* its upstream bindings may call. */
|
|
61
|
+
export declare function validateUpstreams(upstreams: unknown): PackageIssue[];
|
|
62
|
+
/** Every problem with a package's `exposes`, in binding order, with its
|
|
63
|
+
* eMCP code. `records` and `upstreams` = the package's (a binding reads
|
|
64
|
+
* only its own kinds and calls only its own upstreams). */
|
|
65
|
+
export declare function exposeIssues(exposes: unknown, records: unknown, upstreams: unknown): ExposeIssue[];
|
|
66
|
+
/** Every problem with a package's `exposes` (`exposeIssues` as package
|
|
67
|
+
* issues). */
|
|
68
|
+
export declare function validatePackageExposes(exposes: unknown, records: unknown, upstreams: unknown): PackageIssue[];
|
|
@@ -6,6 +6,7 @@ export * from "./package.js";
|
|
|
6
6
|
export * from "./records.js";
|
|
7
7
|
export * from "./record-store.js";
|
|
8
8
|
export * from "./tools.js";
|
|
9
|
+
export * from "./exposes.js";
|
|
9
10
|
export * from "./signature.js";
|
|
10
11
|
export { HostRouter, normalizePath } from "./router.js";
|
|
11
12
|
export type { HostRouterOptions, SurfaceInfo } from "./router.js";
|
|
@@ -2,6 +2,7 @@ import type { FlatComponent } from "../types.js";
|
|
|
2
2
|
import type { ServerMessage } from "./contract.js";
|
|
3
3
|
import type { RecordKind } from "./records.js";
|
|
4
4
|
import type { PackageTool } from "./tools.js";
|
|
5
|
+
import type { PackageExpose } from "./exposes.js";
|
|
5
6
|
/** VAPP-161: the package format version this host reads
|
|
6
7
|
* (catalog/host.json `package.formatVersion`; docs/package-format.md).
|
|
7
8
|
* A package without `formatVersion` is version 1; every version-1
|
|
@@ -56,6 +57,13 @@ export interface AppPackage {
|
|
|
56
57
|
tools?: Record<string, PackageTool>;
|
|
57
58
|
/** VAPP-161: the extension catalogs it needs beyond `catalogId`. */
|
|
58
59
|
extensions?: PackageExtension[];
|
|
60
|
+
/** VAPP-180: the MCP tools it exposes to a host's MCP broker
|
|
61
|
+
* (`host/exposes.ts`): declarative bindings over its records, the host's
|
|
62
|
+
* actions or its upstreams, run as the calling person. */
|
|
63
|
+
exposes?: PackageExpose[];
|
|
64
|
+
/** VAPP-180: the MCP server names (the host's, e.g. a team's servers) its
|
|
65
|
+
* `upstream` bindings call. */
|
|
66
|
+
upstreams?: string[];
|
|
59
67
|
}
|
|
60
68
|
/** VAPP-161: an extension catalog a package needs: its id, the minimum
|
|
61
69
|
* `MAJOR.MINOR.PATCH` (caret) and the components it uses from it. */
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const CAROUSEL_GEOMETRY: {
|
|
2
|
+
readonly thumbnail: 52;
|
|
3
|
+
readonly ring: 2;
|
|
4
|
+
readonly thumbnailGap: 8;
|
|
5
|
+
readonly counterInset: 8;
|
|
6
|
+
};
|
|
7
|
+
/** The counter's text: `i / n` (1-based). */
|
|
8
|
+
export declare function carouselCounterText(page: number, total: number): string;
|
|
9
|
+
export declare const CAROUSEL_CLASSES: {
|
|
10
|
+
/** The pill over the slide; its parent is `relative`. */
|
|
11
|
+
readonly counter: "pointer-events-none absolute start-2 top-2 z-10 rounded-full bg-black/55 px-2 text-xs leading-5 font-medium text-white tabular-nums";
|
|
12
|
+
/** The filmstrip: one row, scrolling sideways when it overflows. */
|
|
13
|
+
readonly thumbnails: "flex flex-row gap-[8px] overflow-x-auto pt-2 [scrollbar-width:none]";
|
|
14
|
+
/** One thumbnail: a button; the current one `data-current=true`. */
|
|
15
|
+
readonly thumbnail: "relative size-[52px] shrink-0 cursor-pointer overflow-hidden rounded-md border-2 border-transparent bg-muted p-0 opacity-70 outline-none transition-opacity duration-fast hover:opacity-100 focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[current=true]:border-foreground data-[current=true]:opacity-100";
|
|
16
|
+
readonly thumbnailImage: "size-full object-cover";
|
|
17
|
+
};
|
|
@@ -7,6 +7,7 @@ export * from "./breadcrumb.js";
|
|
|
7
7
|
export * from "./button.js";
|
|
8
8
|
export * from "./calendar.js";
|
|
9
9
|
export * from "./card.js";
|
|
10
|
+
export * from "./carousel.js";
|
|
10
11
|
export * from "./checkbox.js";
|
|
11
12
|
export * from "./choice-tiles.js";
|
|
12
13
|
export * from "./cn.js";
|
|
@@ -28,6 +29,8 @@ export * from "./kbd.js";
|
|
|
28
29
|
export * from "./label.js";
|
|
29
30
|
export * from "./menu-surface.js";
|
|
30
31
|
export * from "./meter.js";
|
|
32
|
+
export * from "./mosaic.js";
|
|
33
|
+
export * from "./outline.js";
|
|
31
34
|
export * from "./popover.js";
|
|
32
35
|
export * from "./progress-ring.js";
|
|
33
36
|
export * from "./progress.js";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare const MOSAIC_GEOMETRY: {
|
|
2
|
+
readonly gap: 10;
|
|
3
|
+
readonly largeFraction: 0.6;
|
|
4
|
+
readonly aspect: 1.6;
|
|
5
|
+
readonly radius: 10;
|
|
6
|
+
};
|
|
7
|
+
export type MosaicTileSize = `large` | `half` | `small`;
|
|
8
|
+
export interface MosaicTile {
|
|
9
|
+
index: number;
|
|
10
|
+
size: MosaicTileSize;
|
|
11
|
+
/** The pictures past the third: "+N" over this tile (0 = none). */
|
|
12
|
+
more: number;
|
|
13
|
+
}
|
|
14
|
+
/** The tiles a group of `count` pictures draws. */
|
|
15
|
+
export declare function mosaicTiles(count: number): MosaicTile[];
|
|
16
|
+
export declare const MOSAIC_CLASSES: {
|
|
17
|
+
/** The group: `aspect` w/h, a row of the lead tile(s) and the side column. */
|
|
18
|
+
readonly root: "flex aspect-[1.6] w-full min-w-0 flex-row gap-[10px]";
|
|
19
|
+
/** The right column of the 3+ layout: the two small tiles stacked. */
|
|
20
|
+
readonly side: "flex min-w-0 flex-1 flex-col gap-[10px]";
|
|
21
|
+
/** One tile: a button holding its picture; `data-size` = the tile size. */
|
|
22
|
+
readonly tile: "relative min-h-0 min-w-0 cursor-pointer overflow-hidden rounded-[10px] border border-glass-stroke-card bg-muted p-0 outline-none transition-opacity duration-fast hover:opacity-90 focus-visible:ring-[3px] focus-visible:ring-ring/50";
|
|
23
|
+
/** A tile that shares its row or column equally (1, 2, the small two). */
|
|
24
|
+
readonly fill: "flex-1";
|
|
25
|
+
/** The large tile beside the side column: `largeFraction` of the width. */
|
|
26
|
+
readonly lead: "shrink-0 grow-0 basis-[60%]";
|
|
27
|
+
readonly image: "absolute inset-0 size-full object-cover";
|
|
28
|
+
/** The "+N" scrim over the last tile. */
|
|
29
|
+
readonly more: "pointer-events-none absolute inset-0 flex items-center justify-center bg-black/55 text-xl font-semibold text-white";
|
|
30
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const OUTLINE_GEOMETRY: {
|
|
2
|
+
readonly rowHeight: 32;
|
|
3
|
+
readonly activeBar: 2;
|
|
4
|
+
};
|
|
5
|
+
export interface OutlineItem {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
/** A muted `· n` after the title; 0 or unset = none. */
|
|
9
|
+
count?: number | null;
|
|
10
|
+
}
|
|
11
|
+
export declare const OUTLINE_CLASSES: {
|
|
12
|
+
readonly root: "flex min-w-0 flex-col gap-[2px]";
|
|
13
|
+
readonly caption: "px-2 py-1 text-[11px] leading-4 font-medium tracking-[0.5px] text-muted-foreground uppercase";
|
|
14
|
+
/** One row: a button, the active one `data-active=true`. */
|
|
15
|
+
readonly row: "relative flex h-[32px] w-full min-w-0 cursor-pointer items-center gap-1 overflow-hidden rounded-md px-2 text-start text-sm text-muted-foreground outline-none transition-colors duration-fast hover:bg-accent focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[active=true]:bg-accent data-[active=true]:font-medium data-[active=true]:text-foreground";
|
|
16
|
+
/** The leading-edge bar of the active row. */
|
|
17
|
+
readonly bar: "pointer-events-none absolute inset-y-0 start-0 w-[2px] bg-foreground";
|
|
18
|
+
readonly title: "min-w-0 flex-1 truncate";
|
|
19
|
+
readonly count: "shrink-0 text-xs text-muted-foreground tabular-nums";
|
|
20
|
+
};
|
|
21
|
+
/** The trailing count text (`· n`), or null when there is none. */
|
|
22
|
+
export declare function outlineCountText(count: number | null | undefined): string | null;
|
package/dist/web/index.js
CHANGED
|
@@ -1133,6 +1133,12 @@ button:where([data-xui-part],.xui-calendar-nav,.xui-table-sort,.xui-carousel-nav
|
|
|
1133
1133
|
.xui-carousel-dots{display:flex;justify-content:center;gap:var(--xui-spacing-xs);padding-top:var(--xui-spacing-sm)}
|
|
1134
1134
|
.xui-Carousel-indicator{width:6px;height:6px;border-radius:9999px;background:var(--xui-color-border);padding:0;cursor:pointer}
|
|
1135
1135
|
.xui-Carousel-indicator[data-xs~="selected"]{background:var(--xui-color-primary)}
|
|
1136
|
+
.xui-carousel-stage{position:relative;display:flex;flex-direction:column;min-width:0}
|
|
1137
|
+
.xui-Carousel-counter{position:absolute;top:var(--xui-spacing-sm);inset-inline-start:var(--xui-spacing-sm);z-index:1;pointer-events:none;display:inline-flex;align-items:center;white-space:nowrap;font-variant-numeric:tabular-nums}
|
|
1138
|
+
.xui-Carousel-thumbnails{display:flex;flex-direction:row;justify-content:flex-start;flex-shrink:0;overflow-x:auto;scrollbar-width:none}
|
|
1139
|
+
.xui-Carousel-thumbnails::-webkit-scrollbar{display:none}
|
|
1140
|
+
.xui-Carousel-thumbnail{position:relative;flex:0 0 auto;overflow:hidden;cursor:pointer;padding:0;border-style:solid}
|
|
1141
|
+
.xui-carousel-thumb{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;pointer-events:none}
|
|
1136
1142
|
[data-xui-c="Tabs"].xui-el{flex-direction:column}
|
|
1137
1143
|
.xui-Tabs-list{display:flex;flex-direction:row;align-self:flex-start;flex-shrink:0}
|
|
1138
1144
|
.xui-Tabs-list[data-fill="true"]{align-self:stretch}
|
|
@@ -2378,7 +2384,7 @@ var PLACED = {
|
|
|
2378
2384
|
SearchList: [`head`, `search`, `count`, `body`, `list`, `empty`, `fade`],
|
|
2379
2385
|
Menu: [`trigger`, `head`, `search`, `count`, `body`, `list`, `empty`, `fade`],
|
|
2380
2386
|
Table: [`header`, `body`, `caption`, `empty`],
|
|
2381
|
-
Carousel: [`page`, `indicator`, `controls`, `previous`, `next`],
|
|
2387
|
+
Carousel: [`page`, `indicator`, `controls`, `previous`, `next`, `counter`, `thumbnails`],
|
|
2382
2388
|
Tooltip: [`anchor`],
|
|
2383
2389
|
FileUpload: [`label`, `dropzone`, `icon`, `title`, `hint`, `browse`, `description`],
|
|
2384
2390
|
CodeBlock: [`header`, `title`, `copy`, `body`],
|
|
@@ -2561,5 +2567,5 @@ export {
|
|
|
2561
2567
|
withinSlop
|
|
2562
2568
|
};
|
|
2563
2569
|
|
|
2564
|
-
//# debugId=
|
|
2570
|
+
//# debugId=1A8295752F81FE6764756E2164756E21
|
|
2565
2571
|
//# sourceMappingURL=index.js.map
|