@agent-native/toolkit 0.9.0 → 0.10.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/README.md +12 -3
- package/agent-native.eject.json +71 -0
- package/dist/chat-history/ChatHistoryRail.d.ts +33 -0
- package/dist/chat-history/ChatHistoryRail.d.ts.map +1 -0
- package/dist/chat-history/ChatHistoryRail.js +35 -0
- package/dist/chat-history/ChatHistoryRail.js.map +1 -0
- package/dist/chat-history/ChatHistoryRail.spec.d.ts +2 -0
- package/dist/chat-history/ChatHistoryRail.spec.d.ts.map +1 -0
- package/dist/chat-history/ChatHistoryRail.spec.js +157 -0
- package/dist/chat-history/ChatHistoryRail.spec.js.map +1 -0
- package/dist/chat-history/index.d.ts +2 -0
- package/dist/chat-history/index.d.ts.map +1 -1
- package/dist/chat-history/index.js +2 -0
- package/dist/chat-history/index.js.map +1 -1
- package/dist/chat-history/useChatHistoryRailController.d.ts +26 -0
- package/dist/chat-history/useChatHistoryRailController.d.ts.map +1 -0
- package/dist/chat-history/useChatHistoryRailController.js +36 -0
- package/dist/chat-history/useChatHistoryRailController.js.map +1 -0
- package/dist/chat-history/useChatHistoryRailController.spec.d.ts +2 -0
- package/dist/chat-history/useChatHistoryRailController.spec.d.ts.map +1 -0
- package/dist/chat-history/useChatHistoryRailController.spec.js +101 -0
- package/dist/chat-history/useChatHistoryRailController.spec.js.map +1 -0
- package/dist/chat-history.css +61 -0
- package/dist/composer/ComposerPlusMenu.js +1 -1
- package/dist/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/composer/PromptComposer.d.ts.map +1 -1
- package/dist/composer/PromptComposer.js +22 -4
- package/dist/composer/PromptComposer.js.map +1 -1
- package/dist/composer/RealtimeVoiceMode.d.ts +5 -1
- package/dist/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/composer/RealtimeVoiceMode.js +27 -8
- package/dist/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/composer/RealtimeVoiceMode.spec.js +51 -11
- package/dist/composer/RealtimeVoiceMode.spec.js.map +1 -1
- package/dist/composer/VoiceButton.d.ts +2 -0
- package/dist/composer/VoiceButton.d.ts.map +1 -1
- package/dist/composer/VoiceButton.js +33 -1
- package/dist/composer/VoiceButton.js.map +1 -1
- package/dist/composer/VoiceButton.spec.js +9 -1
- package/dist/composer/VoiceButton.spec.js.map +1 -1
- package/dist/composer/realtime-voice-audio-level.d.ts.map +1 -1
- package/dist/composer/realtime-voice-audio-level.js +2 -1
- package/dist/composer/realtime-voice-audio-level.js.map +1 -1
- package/dist/composer/realtime-voice-audio-level.spec.js +7 -0
- package/dist/composer/realtime-voice-audio-level.spec.js.map +1 -1
- package/dist/composer/useRealtimeVoiceMode.d.ts +7 -0
- package/dist/composer/useRealtimeVoiceMode.d.ts.map +1 -1
- package/dist/composer/useRealtimeVoiceMode.js +95 -23
- package/dist/composer/useRealtimeVoiceMode.js.map +1 -1
- package/dist/composer/useRealtimeVoiceMode.spec.js +58 -9
- package/dist/composer/useRealtimeVoiceMode.spec.js.map +1 -1
- package/dist/conformance/__fixtures__/css-in-js-adapter.d.ts +7 -0
- package/dist/conformance/__fixtures__/css-in-js-adapter.d.ts.map +1 -0
- package/dist/conformance/__fixtures__/css-in-js-adapter.js +84 -0
- package/dist/conformance/__fixtures__/css-in-js-adapter.js.map +1 -0
- package/dist/conformance/conformance.spec.d.ts +2 -0
- package/dist/conformance/conformance.spec.d.ts.map +1 -0
- package/dist/conformance/conformance.spec.js +58 -0
- package/dist/conformance/conformance.spec.js.map +1 -0
- package/dist/conformance/index.d.ts +4 -0
- package/dist/conformance/index.d.ts.map +1 -0
- package/dist/conformance/index.js +4 -0
- package/dist/conformance/index.js.map +1 -0
- package/dist/conformance/runner.d.ts +12 -0
- package/dist/conformance/runner.d.ts.map +1 -0
- package/dist/conformance/runner.js +441 -0
- package/dist/conformance/runner.js.map +1 -0
- package/dist/conformance/types.d.ts +26 -0
- package/dist/conformance/types.d.ts.map +1 -0
- package/dist/conformance/types.js +13 -0
- package/dist/conformance/types.js.map +1 -0
- package/dist/conformance/version.d.ts +6 -0
- package/dist/conformance/version.d.ts.map +1 -0
- package/dist/conformance/version.js +14 -0
- package/dist/conformance/version.js.map +1 -0
- package/dist/design-system/components.d.ts +64 -0
- package/dist/design-system/components.d.ts.map +1 -0
- package/dist/design-system/components.js +50 -0
- package/dist/design-system/components.js.map +1 -0
- package/dist/design-system/context.d.ts +11 -0
- package/dist/design-system/context.d.ts.map +1 -0
- package/dist/design-system/context.js +17 -0
- package/dist/design-system/context.js.map +1 -0
- package/dist/design-system/default-adapter.d.ts +3 -0
- package/dist/design-system/default-adapter.d.ts.map +1 -0
- package/dist/design-system/default-adapter.js +166 -0
- package/dist/design-system/default-adapter.js.map +1 -0
- package/dist/design-system/default-adapter.spec.d.ts +2 -0
- package/dist/design-system/default-adapter.spec.d.ts.map +1 -0
- package/dist/design-system/default-adapter.spec.js +96 -0
- package/dist/design-system/default-adapter.spec.js.map +1 -0
- package/dist/design-system/definition.d.ts +9 -0
- package/dist/design-system/definition.d.ts.map +1 -0
- package/dist/design-system/definition.js +4 -0
- package/dist/design-system/definition.js.map +1 -0
- package/dist/design-system/design-system.spec.d.ts +2 -0
- package/dist/design-system/design-system.spec.d.ts.map +1 -0
- package/dist/design-system/design-system.spec.js +121 -0
- package/dist/design-system/design-system.spec.js.map +1 -0
- package/dist/design-system/error-boundary.d.ts +18 -0
- package/dist/design-system/error-boundary.d.ts.map +1 -0
- package/dist/design-system/error-boundary.js +16 -0
- package/dist/design-system/error-boundary.js.map +1 -0
- package/dist/design-system/index.d.ts +8 -0
- package/dist/design-system/index.d.ts.map +1 -0
- package/dist/design-system/index.js +8 -0
- package/dist/design-system/index.js.map +1 -0
- package/dist/design-system/theme.d.ts +30 -0
- package/dist/design-system/theme.d.ts.map +1 -0
- package/dist/design-system/theme.js +95 -0
- package/dist/design-system/theme.js.map +1 -0
- package/dist/design-system/theme.spec.d.ts +2 -0
- package/dist/design-system/theme.spec.d.ts.map +1 -0
- package/dist/design-system/theme.spec.js +43 -0
- package/dist/design-system/theme.spec.js.map +1 -0
- package/dist/design-system/types.d.ts +288 -0
- package/dist/design-system/types.d.ts.map +1 -0
- package/dist/design-system/types.js +2 -0
- package/dist/design-system/types.js.map +1 -0
- package/dist/provider.d.ts +4 -3
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +46 -4
- package/dist/provider.js.map +1 -1
- package/dist/styles.css +35 -0
- package/dist/ui/button.d.ts +5 -0
- package/dist/ui/button.d.ts.map +1 -1
- package/dist/ui/button.js +25 -4
- package/dist/ui/button.js.map +1 -1
- package/dist/ui/dialog.d.ts +4 -0
- package/dist/ui/dialog.d.ts.map +1 -1
- package/dist/ui/dialog.js +2 -2
- package/dist/ui/dialog.js.map +1 -1
- package/dist/ui/popover.d.ts +1 -0
- package/dist/ui/popover.d.ts.map +1 -1
- package/dist/ui/popover.js +2 -2
- package/dist/ui/popover.js.map +1 -1
- package/dist/ui/select.d.ts +3 -1
- package/dist/ui/select.d.ts.map +1 -1
- package/dist/ui/select.js +1 -1
- package/dist/ui/select.js.map +1 -1
- package/dist/ui/sidebar.d.ts +6 -2
- package/dist/ui/sidebar.d.ts.map +1 -1
- package/dist/ui/sidebar.js +12 -15
- package/dist/ui/sidebar.js.map +1 -1
- package/dist/ui/tooltip.d.ts +3 -1
- package/dist/ui/tooltip.d.ts.map +1 -1
- package/dist/ui/tooltip.js +2 -2
- package/dist/ui/tooltip.js.map +1 -1
- package/package.json +31 -1
- package/src/chat-history/ChatHistoryRail.spec.tsx +312 -0
- package/src/chat-history/ChatHistoryRail.tsx +150 -0
- package/src/chat-history/index.ts +14 -0
- package/src/chat-history/useChatHistoryRailController.spec.tsx +131 -0
- package/src/chat-history/useChatHistoryRailController.ts +76 -0
- package/src/chat-history.css +61 -0
- package/src/composer/ComposerPlusMenu.tsx +11 -8
- package/src/composer/PromptComposer.tsx +27 -6
- package/src/composer/RealtimeVoiceMode.spec.tsx +116 -11
- package/src/composer/RealtimeVoiceMode.tsx +106 -36
- package/src/composer/VoiceButton.spec.ts +17 -1
- package/src/composer/VoiceButton.tsx +49 -0
- package/src/composer/realtime-voice-audio-level.spec.ts +15 -0
- package/src/composer/realtime-voice-audio-level.ts +2 -1
- package/src/composer/useRealtimeVoiceMode.spec.ts +82 -8
- package/src/composer/useRealtimeVoiceMode.tsx +112 -25
- package/src/conformance/__fixtures__/css-in-js-adapter.tsx +401 -0
- package/src/conformance/conformance.spec.tsx +83 -0
- package/src/conformance/index.ts +3 -0
- package/src/conformance/runner.tsx +710 -0
- package/src/conformance/types.ts +45 -0
- package/src/conformance/version.ts +22 -0
- package/src/design-system/components.tsx +146 -0
- package/src/design-system/context.tsx +31 -0
- package/src/design-system/default-adapter.spec.tsx +143 -0
- package/src/design-system/default-adapter.tsx +915 -0
- package/src/design-system/definition.ts +14 -0
- package/src/design-system/design-system.spec.tsx +183 -0
- package/src/design-system/error-boundary.tsx +37 -0
- package/src/design-system/index.ts +7 -0
- package/src/design-system/theme.spec.ts +61 -0
- package/src/design-system/theme.ts +145 -0
- package/src/design-system/types.ts +363 -0
- package/src/provider.tsx +98 -5
- package/src/styles.css +35 -0
- package/src/ui/button.tsx +95 -6
- package/src/ui/dialog.tsx +48 -23
- package/src/ui/popover.tsx +16 -2
- package/src/ui/select.tsx +7 -3
- package/src/ui/sidebar.tsx +47 -48
- package/src/ui/tooltip.tsx +7 -3
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createElement, useRef, useState, } from "react";
|
|
3
|
+
import { flushSync } from "react-dom";
|
|
4
|
+
import { createRoot } from "react-dom/client";
|
|
5
|
+
import { DESIGN_SYSTEM_CONTRACT_VERSION } from "../design-system/types.js";
|
|
6
|
+
import { assertDesignSystemContractVersion } from "./version.js";
|
|
7
|
+
const contractComponentNames = [
|
|
8
|
+
"ActionButton",
|
|
9
|
+
"IconButton",
|
|
10
|
+
"TextField",
|
|
11
|
+
"TextArea",
|
|
12
|
+
"Spinner",
|
|
13
|
+
"Skeleton",
|
|
14
|
+
"Status",
|
|
15
|
+
"Surface",
|
|
16
|
+
"Avatar",
|
|
17
|
+
"Tooltip",
|
|
18
|
+
"Menu",
|
|
19
|
+
"Popover",
|
|
20
|
+
"Dialog",
|
|
21
|
+
"Picker",
|
|
22
|
+
"Checkbox",
|
|
23
|
+
"Switch",
|
|
24
|
+
"Tabs",
|
|
25
|
+
];
|
|
26
|
+
function invariant(value, message) {
|
|
27
|
+
if (!value)
|
|
28
|
+
throw new Error(message);
|
|
29
|
+
}
|
|
30
|
+
function dispatch(element, event) {
|
|
31
|
+
flushSync(() => element.dispatchEvent(event));
|
|
32
|
+
}
|
|
33
|
+
function click(element, document) {
|
|
34
|
+
for (const type of ["pointerdown", "mousedown"]) {
|
|
35
|
+
dispatch(element, new document.defaultView.MouseEvent(type, {
|
|
36
|
+
bubbles: true,
|
|
37
|
+
cancelable: true,
|
|
38
|
+
button: 0,
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
dispatch(element, new document.defaultView.MouseEvent("click", {
|
|
42
|
+
bubbles: true,
|
|
43
|
+
cancelable: true,
|
|
44
|
+
button: 0,
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
function keydown(element, key, document) {
|
|
48
|
+
dispatch(element, new document.defaultView.KeyboardEvent("keydown", {
|
|
49
|
+
key,
|
|
50
|
+
bubbles: true,
|
|
51
|
+
cancelable: true,
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
function input(element, value) {
|
|
55
|
+
const prototype = element instanceof element.ownerDocument.defaultView.HTMLTextAreaElement
|
|
56
|
+
? element.ownerDocument.defaultView.HTMLTextAreaElement.prototype
|
|
57
|
+
: element.ownerDocument.defaultView.HTMLInputElement.prototype;
|
|
58
|
+
Object.getOwnPropertyDescriptor(prototype, "value")?.set?.call(element, value);
|
|
59
|
+
dispatch(element, new element.ownerDocument.defaultView.Event("input", {
|
|
60
|
+
bubbles: true,
|
|
61
|
+
cancelable: true,
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
function elementWithText(document, selector, text) {
|
|
65
|
+
return [...document.querySelectorAll(selector)].find((element) => element.textContent?.includes(text));
|
|
66
|
+
}
|
|
67
|
+
const checks = [
|
|
68
|
+
{
|
|
69
|
+
id: "contract.components",
|
|
70
|
+
category: "contract",
|
|
71
|
+
components: contractComponentNames,
|
|
72
|
+
run: ({ components }) => {
|
|
73
|
+
for (const name of contractComponentNames) {
|
|
74
|
+
invariant(typeof components[name] === "function", `${name} must be supplied as a React component.`);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: "leaf.action-button",
|
|
80
|
+
category: "leaf",
|
|
81
|
+
components: ["ActionButton"],
|
|
82
|
+
run: ({ components, document, mount, unmount }) => {
|
|
83
|
+
let presses = 0;
|
|
84
|
+
const probe = mount(_jsx(components.ActionButton, { intent: "danger", emphasis: "outline", size: "compact", onPress: () => presses++, children: "Remove" }));
|
|
85
|
+
const button = probe.container.querySelector("button");
|
|
86
|
+
invariant(button, "ActionButton must render an operable button.");
|
|
87
|
+
click(button, document);
|
|
88
|
+
invariant(presses === 1, "ActionButton must call onPress once.");
|
|
89
|
+
unmount(probe);
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: "leaf.icon-button",
|
|
94
|
+
category: "leaf",
|
|
95
|
+
components: ["IconButton"],
|
|
96
|
+
run: ({ components, document, mount, unmount }) => {
|
|
97
|
+
let presses = 0;
|
|
98
|
+
const probe = mount(_jsx(components.IconButton, { label: "Close panel", icon: _jsx("span", { "aria-hidden": "true", children: "x" }), onPress: () => presses++ }));
|
|
99
|
+
const button = probe.container.querySelector('button[aria-label="Close panel"]');
|
|
100
|
+
invariant(button, "IconButton must expose its label as an accessible name.");
|
|
101
|
+
click(button, document);
|
|
102
|
+
invariant(presses === 1, "IconButton must call onPress once.");
|
|
103
|
+
unmount(probe);
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: "leaf.text-field",
|
|
108
|
+
category: "leaf",
|
|
109
|
+
components: ["TextField"],
|
|
110
|
+
run: ({ components, mount, unmount }) => {
|
|
111
|
+
let value = "";
|
|
112
|
+
const probe = mount(_jsx(components.TextField, { "aria-label": "Project name", value: value, onChange: (next) => (value = next) }));
|
|
113
|
+
const field = probe.container.querySelector("input");
|
|
114
|
+
invariant(field, "TextField must render an input.");
|
|
115
|
+
input(field, "Atlas");
|
|
116
|
+
invariant(value === "Atlas", "TextField must report string values.");
|
|
117
|
+
unmount(probe);
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
id: "leaf.text-area",
|
|
122
|
+
category: "leaf",
|
|
123
|
+
components: ["TextArea"],
|
|
124
|
+
run: ({ components, mount, unmount }) => {
|
|
125
|
+
let value = "";
|
|
126
|
+
const probe = mount(_jsx(components.TextArea, { "aria-label": "Notes", value: value, onChange: (next) => (value = next) }));
|
|
127
|
+
const field = probe.container.querySelector("textarea");
|
|
128
|
+
invariant(field, "TextArea must render a textarea.");
|
|
129
|
+
input(field, "Conformant");
|
|
130
|
+
invariant(value === "Conformant", "TextArea must report string values.");
|
|
131
|
+
unmount(probe);
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
id: "leaf.progress-and-placeholder",
|
|
136
|
+
category: "leaf",
|
|
137
|
+
components: ["Spinner", "Skeleton"],
|
|
138
|
+
run: ({ components, mount, unmount }) => {
|
|
139
|
+
const probe = mount(_jsxs(_Fragment, { children: [_jsx(components.Spinner, { label: "Loading records", size: "compact" }), _jsx(components.Skeleton, { width: 48, height: 12, shape: "line" })] }));
|
|
140
|
+
invariant(probe.container.querySelector('[role="status"]'), "A labeled Spinner must expose status semantics.");
|
|
141
|
+
invariant(probe.container.querySelector('[aria-hidden="true"]'), "Skeleton must be hidden from assistive technology.");
|
|
142
|
+
unmount(probe);
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: "leaf.status-surface-avatar",
|
|
147
|
+
category: "leaf",
|
|
148
|
+
components: ["Status", "Surface", "Avatar"],
|
|
149
|
+
run: ({ components, document, mount, unmount }) => {
|
|
150
|
+
let presses = 0;
|
|
151
|
+
const probe = mount(_jsxs(_Fragment, { children: [_jsx(components.Status, { tone: "success", children: "Connected" }), _jsx(components.Surface, { interactive: true, onPress: () => presses++, children: "Open workspace" }), _jsx(components.Avatar, { name: "Ada Lovelace", fallback: "AL" })] }));
|
|
152
|
+
invariant(probe.container.textContent?.includes("Connected"), "Status must render its content.");
|
|
153
|
+
const surface = elementWithText(document, '[role="button"]', "Open workspace");
|
|
154
|
+
invariant(surface, "An interactive Surface must expose button semantics.");
|
|
155
|
+
keydown(surface, "Enter", document);
|
|
156
|
+
invariant(presses === 1, "An interactive Surface must support keyboard press.");
|
|
157
|
+
invariant(probe.container.textContent?.includes("AL"), "Avatar must render a fallback when no image is supplied.");
|
|
158
|
+
unmount(probe);
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
id: "behavior.tooltip",
|
|
163
|
+
category: "behavior",
|
|
164
|
+
components: ["Tooltip"],
|
|
165
|
+
run: async ({ components, document, mount, settle, unmount }) => {
|
|
166
|
+
const portal = document.createElement("div");
|
|
167
|
+
portal.dataset.conformancePortal = "true";
|
|
168
|
+
document.body.appendChild(portal);
|
|
169
|
+
const probe = mount(_jsx(components.Tooltip, { trigger: _jsx("button", { children: "Help" }), content: "Helpful context", open: true, portalContainer: portal }));
|
|
170
|
+
await settle();
|
|
171
|
+
invariant(portal.textContent?.includes("Helpful context"), "Tooltip must honor controlled open and portalContainer.");
|
|
172
|
+
unmount(probe);
|
|
173
|
+
portal.remove();
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
id: "behavior.menu",
|
|
178
|
+
category: "behavior",
|
|
179
|
+
components: ["Menu"],
|
|
180
|
+
run: async ({ components, document, mount, settle, unmount }) => {
|
|
181
|
+
let selected;
|
|
182
|
+
const probe = mount(_jsx(components.Menu, { trigger: _jsx("button", { children: "Actions" }), items: [{ id: "archive", label: "Archive" }], open: true, onAction: (id) => (selected = id) }));
|
|
183
|
+
await settle();
|
|
184
|
+
const item = elementWithText(document, '[role="menuitem"]', "Archive");
|
|
185
|
+
invariant(item, "Menu must render open items with menuitem semantics.");
|
|
186
|
+
click(item, document);
|
|
187
|
+
invariant(selected === "archive", "Menu must report selected item ids.");
|
|
188
|
+
unmount(probe);
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
id: "behavior.popover",
|
|
193
|
+
category: "behavior",
|
|
194
|
+
components: ["Popover"],
|
|
195
|
+
run: async ({ components, document, mount, settle, unmount }) => {
|
|
196
|
+
const portal = document.createElement("div");
|
|
197
|
+
portal.dataset.conformancePortal = "true";
|
|
198
|
+
document.body.appendChild(portal);
|
|
199
|
+
const probe = mount(_jsx(components.Popover, { trigger: _jsx("button", { children: "Details" }), open: true, portalContainer: portal, children: "Popover details" }));
|
|
200
|
+
await settle();
|
|
201
|
+
invariant(portal.textContent?.includes("Popover details"), "Popover must honor controlled open and portalContainer.");
|
|
202
|
+
unmount(probe);
|
|
203
|
+
portal.remove();
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
id: "behavior.dialog",
|
|
208
|
+
category: "behavior",
|
|
209
|
+
components: ["Dialog"],
|
|
210
|
+
run: async ({ components, document, mount, settle, unmount }) => {
|
|
211
|
+
const portal = document.createElement("div");
|
|
212
|
+
portal.dataset.conformancePortal = "true";
|
|
213
|
+
document.body.appendChild(portal);
|
|
214
|
+
const probe = mount(_jsx(components.Dialog, { open: true, onOpenChange: () => { }, title: "Edit project", dismissible: false, portalContainer: portal, children: _jsx("input", { "aria-label": "Project title" }) }));
|
|
215
|
+
await settle();
|
|
216
|
+
invariant(portal.querySelector('[role="dialog"]'), "Dialog must expose dialog semantics.");
|
|
217
|
+
invariant(portal.textContent?.includes("Edit project"), "Dialog must expose its title and honor portalContainer.");
|
|
218
|
+
invariant(portal.querySelector('[role="dialog"]')?.querySelectorAll("button")
|
|
219
|
+
.length === 0, "Dialog must not invent actions when footer is omitted.");
|
|
220
|
+
unmount(probe);
|
|
221
|
+
portal.remove();
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
id: "behavior.picker",
|
|
226
|
+
category: "behavior",
|
|
227
|
+
components: ["Picker"],
|
|
228
|
+
run: async ({ components, document, mount, settle, unmount }) => {
|
|
229
|
+
let value = null;
|
|
230
|
+
const probe = mount(_jsx(components.Picker, { mode: "select", "aria-label": "Owner", options: [{ value: "ada", label: "Ada" }], value: value, onChange: (next) => (value = next), open: true }));
|
|
231
|
+
await settle();
|
|
232
|
+
const option = elementWithText(document, '[role="option"]', "Ada");
|
|
233
|
+
invariant(option, "An open Picker must expose options.");
|
|
234
|
+
click(option, document);
|
|
235
|
+
invariant(value === "ada", "Picker must report option values.");
|
|
236
|
+
unmount(probe);
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
id: "behavior.checkbox-switch",
|
|
241
|
+
category: "behavior",
|
|
242
|
+
components: ["Checkbox", "Switch"],
|
|
243
|
+
run: ({ components, document, mount, unmount }) => {
|
|
244
|
+
let checked = false;
|
|
245
|
+
let switched = false;
|
|
246
|
+
const probe = mount(_jsxs(_Fragment, { children: [_jsx(components.Checkbox, { "aria-label": "Include archived", checked: checked, onChange: (next) => (checked = next) }), _jsx(components.Switch, { "aria-label": "Notifications", checked: switched, onChange: (next) => (switched = next) })] }));
|
|
247
|
+
const checkbox = probe.container.querySelector('[role="checkbox"]');
|
|
248
|
+
const toggle = probe.container.querySelector('[role="switch"]');
|
|
249
|
+
invariant(checkbox, "Checkbox must expose checkbox semantics.");
|
|
250
|
+
invariant(toggle, "Switch must expose switch semantics.");
|
|
251
|
+
click(checkbox, document);
|
|
252
|
+
click(toggle, document);
|
|
253
|
+
invariant(checked && switched, "Checkbox and Switch must report state changes.");
|
|
254
|
+
unmount(probe);
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
id: "behavior.tabs",
|
|
259
|
+
category: "behavior",
|
|
260
|
+
components: ["Tabs"],
|
|
261
|
+
run: ({ components, document, mount, unmount }) => {
|
|
262
|
+
let value = "first";
|
|
263
|
+
const probe = mount(_jsx(components.Tabs, { value: value, orientation: "vertical", onChange: (next) => (value = next), items: [
|
|
264
|
+
{ value: "first", label: "First", content: "One" },
|
|
265
|
+
{ value: "second", label: "Second", content: "Two" },
|
|
266
|
+
] }));
|
|
267
|
+
const tabList = probe.container.querySelector('[role="tablist"]');
|
|
268
|
+
invariant(tabList, "Tabs must expose a tablist.");
|
|
269
|
+
invariant(tabList.getAttribute("aria-orientation") === "vertical", "Tabs must honor vertical orientation in their tablist semantics.");
|
|
270
|
+
const second = elementWithText(document, '[role="tab"]', "Second");
|
|
271
|
+
invariant(second, "Tabs must expose tab semantics.");
|
|
272
|
+
click(second, document);
|
|
273
|
+
invariant(value === "second", "Tabs must report selected values.");
|
|
274
|
+
unmount(probe);
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
id: "overlay.portal-and-z-index-stacking",
|
|
279
|
+
category: "overlay-interoperability",
|
|
280
|
+
components: ["Dialog"],
|
|
281
|
+
run: async ({ components, document, mount, settle, unmount }) => {
|
|
282
|
+
const radixHost = document.createElement("div");
|
|
283
|
+
radixHost.dataset.hostedOverlay = "radix";
|
|
284
|
+
radixHost.dataset.conformancePortal = "true";
|
|
285
|
+
radixHost.style.zIndex = "40";
|
|
286
|
+
document.body.appendChild(radixHost);
|
|
287
|
+
const customerOverlayLayer = document.createElement("div");
|
|
288
|
+
customerOverlayLayer.dataset.designSystemOverlayLayer = "true";
|
|
289
|
+
customerOverlayLayer.dataset.conformancePortal = "true";
|
|
290
|
+
customerOverlayLayer.style.position = "relative";
|
|
291
|
+
customerOverlayLayer.style.zIndex = "50";
|
|
292
|
+
document.body.appendChild(customerOverlayLayer);
|
|
293
|
+
const probe = mount(_jsx(components.Dialog, { open: true, onOpenChange: () => { }, title: "Stacking probe", portalContainer: customerOverlayLayer, children: "Overlay content" }));
|
|
294
|
+
await settle();
|
|
295
|
+
invariant(customerOverlayLayer.querySelector('[role="dialog"]'), "Behavior adapters must portal into the supplied stacking layer so they can interoperate with Radix-hosted surfaces.");
|
|
296
|
+
invariant(Number(customerOverlayLayer.style.zIndex) >
|
|
297
|
+
Number(radixHost.style.zIndex), "The supplied design-system portal layer must be able to stack above an existing hosted overlay.");
|
|
298
|
+
unmount(probe);
|
|
299
|
+
customerOverlayLayer.remove();
|
|
300
|
+
radixHost.remove();
|
|
301
|
+
},
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
id: "overlay.focus-interoperability",
|
|
305
|
+
category: "overlay-interoperability",
|
|
306
|
+
components: ["Dialog"],
|
|
307
|
+
run: async ({ components, document, mount, settle, unmount }) => {
|
|
308
|
+
function FocusProbe() {
|
|
309
|
+
const [open, setOpen] = useState(true);
|
|
310
|
+
const initialFocusRef = useRef(null);
|
|
311
|
+
const restoreFocusRef = useRef(null);
|
|
312
|
+
return (_jsxs(_Fragment, { children: [_jsx("button", { ref: restoreFocusRef, children: "Hosted trigger" }), _jsxs(components.Dialog, { open: open, onOpenChange: setOpen, title: "Focus probe", initialFocusRef: initialFocusRef, restoreFocusRef: restoreFocusRef, children: [_jsx("input", { ref: initialFocusRef, "aria-label": "Initial focus" }), _jsx("button", { onClick: () => setOpen(false), children: "Close probe" })] })] }));
|
|
313
|
+
}
|
|
314
|
+
const probe = mount(_jsx(FocusProbe, {}));
|
|
315
|
+
await settle();
|
|
316
|
+
const initial = document.querySelector('input[aria-label="Initial focus"]');
|
|
317
|
+
invariant(initial, "Dialog must render its initial focus target.");
|
|
318
|
+
invariant(document.activeElement === initial, "Dialog must honor initialFocusRef across adapter overlay implementations.");
|
|
319
|
+
const close = elementWithText(document, "button", "Close probe");
|
|
320
|
+
invariant(close, "Focus probe close control did not render.");
|
|
321
|
+
click(close, document);
|
|
322
|
+
await settle();
|
|
323
|
+
invariant(document.activeElement?.textContent === "Hosted trigger", "Dialog must restore focus to a hosted trigger after its native overlay closes.");
|
|
324
|
+
unmount(probe);
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
];
|
|
328
|
+
export const DESIGN_SYSTEM_CONFORMANCE_CHECKS = checks.map(({ id, category, components }) => ({ id, category, components }));
|
|
329
|
+
export async function runDesignSystemConformance({ adapterName = "custom adapter", components, contractVersion, document: suppliedDocument, }) {
|
|
330
|
+
const document = suppliedDocument ?? globalThis.document;
|
|
331
|
+
if (!document?.body || !document.defaultView) {
|
|
332
|
+
throw new Error("runDesignSystemConformance requires a browser-like document, such as Playwright, jsdom, or happy-dom.");
|
|
333
|
+
}
|
|
334
|
+
const results = [];
|
|
335
|
+
try {
|
|
336
|
+
assertDesignSystemContractVersion(contractVersion);
|
|
337
|
+
results.push({
|
|
338
|
+
id: "contract.version-policy",
|
|
339
|
+
category: "contract",
|
|
340
|
+
components: [],
|
|
341
|
+
passed: true,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
results.push({
|
|
346
|
+
id: "contract.version-policy",
|
|
347
|
+
category: "contract",
|
|
348
|
+
components: [],
|
|
349
|
+
passed: false,
|
|
350
|
+
message: error instanceof Error ? error.message : String(error),
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
const mounted = new Set();
|
|
354
|
+
const exercisedComponents = new Set();
|
|
355
|
+
const trackedComponents = new Proxy(components, {
|
|
356
|
+
get(target, property, receiver) {
|
|
357
|
+
if (typeof property === "string" && property in target) {
|
|
358
|
+
exercisedComponents.add(property);
|
|
359
|
+
}
|
|
360
|
+
return Reflect.get(target, property, receiver);
|
|
361
|
+
},
|
|
362
|
+
});
|
|
363
|
+
const context = {
|
|
364
|
+
components: trackedComponents,
|
|
365
|
+
document,
|
|
366
|
+
mount(element) {
|
|
367
|
+
const container = document.createElement("div");
|
|
368
|
+
container.dataset.conformanceRoot = "true";
|
|
369
|
+
document.body.appendChild(container);
|
|
370
|
+
const root = createRoot(container);
|
|
371
|
+
const probe = { container, root };
|
|
372
|
+
mounted.add(probe);
|
|
373
|
+
flushSync(() => root.render(element));
|
|
374
|
+
return probe;
|
|
375
|
+
},
|
|
376
|
+
unmount(probe) {
|
|
377
|
+
if (!mounted.delete(probe))
|
|
378
|
+
return;
|
|
379
|
+
flushSync(() => probe.root.unmount());
|
|
380
|
+
probe.container.remove();
|
|
381
|
+
},
|
|
382
|
+
async settle() {
|
|
383
|
+
await new Promise((resolve) => document.defaultView.setTimeout(resolve, 0));
|
|
384
|
+
},
|
|
385
|
+
};
|
|
386
|
+
for (const check of checks) {
|
|
387
|
+
try {
|
|
388
|
+
exercisedComponents.clear();
|
|
389
|
+
await check.run(context);
|
|
390
|
+
const missingComponents = check.components.filter((component) => !exercisedComponents.has(component));
|
|
391
|
+
invariant(missingComponents.length === 0, `Conformance check ${check.id} declared ${missingComponents.join(", ")} but did not exercise them.`);
|
|
392
|
+
results.push({
|
|
393
|
+
id: check.id,
|
|
394
|
+
category: check.category,
|
|
395
|
+
components: check.components,
|
|
396
|
+
passed: true,
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
results.push({
|
|
401
|
+
id: check.id,
|
|
402
|
+
category: check.category,
|
|
403
|
+
components: check.components,
|
|
404
|
+
passed: false,
|
|
405
|
+
message: error instanceof Error ? error.message : String(error),
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
finally {
|
|
409
|
+
for (const probe of [...mounted])
|
|
410
|
+
context.unmount(probe);
|
|
411
|
+
document
|
|
412
|
+
.querySelectorAll("[data-radix-popper-content-wrapper]")
|
|
413
|
+
.forEach((element) => element.remove());
|
|
414
|
+
document
|
|
415
|
+
.querySelectorAll('[data-conformance-portal="true"]')
|
|
416
|
+
.forEach((element) => element.remove());
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const report = {
|
|
420
|
+
adapterName,
|
|
421
|
+
contractVersion: DESIGN_SYSTEM_CONTRACT_VERSION,
|
|
422
|
+
passed: results.every((result) => result.passed),
|
|
423
|
+
results,
|
|
424
|
+
};
|
|
425
|
+
return report;
|
|
426
|
+
}
|
|
427
|
+
export async function assertDesignSystemConformance(options) {
|
|
428
|
+
const report = await runDesignSystemConformance(options);
|
|
429
|
+
if (!report.passed) {
|
|
430
|
+
const { DesignSystemConformanceError } = await import("./types.js");
|
|
431
|
+
throw new DesignSystemConformanceError(report);
|
|
432
|
+
}
|
|
433
|
+
return report;
|
|
434
|
+
}
|
|
435
|
+
export function renderDesignSystemConformanceFixture(components) {
|
|
436
|
+
return createElement(components.Status, {
|
|
437
|
+
tone: "info",
|
|
438
|
+
children: "Adapter loaded",
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/conformance/runner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DesignSystemComponents } from "../design-system/types.js";
|
|
2
|
+
export type DesignSystemConformanceCategory = "contract" | "leaf" | "behavior" | "overlay-interoperability";
|
|
3
|
+
export interface DesignSystemConformanceCheckResult {
|
|
4
|
+
id: string;
|
|
5
|
+
category: DesignSystemConformanceCategory;
|
|
6
|
+
components: readonly (keyof DesignSystemComponents)[];
|
|
7
|
+
passed: boolean;
|
|
8
|
+
message?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DesignSystemConformanceReport {
|
|
11
|
+
contractVersion: number;
|
|
12
|
+
adapterName: string;
|
|
13
|
+
passed: boolean;
|
|
14
|
+
results: readonly DesignSystemConformanceCheckResult[];
|
|
15
|
+
}
|
|
16
|
+
export interface RunDesignSystemConformanceOptions {
|
|
17
|
+
adapterName?: string;
|
|
18
|
+
components: DesignSystemComponents;
|
|
19
|
+
contractVersion: number;
|
|
20
|
+
document?: Document;
|
|
21
|
+
}
|
|
22
|
+
export declare class DesignSystemConformanceError extends Error {
|
|
23
|
+
readonly report: DesignSystemConformanceReport;
|
|
24
|
+
constructor(report: DesignSystemConformanceReport);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/conformance/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,MAAM,+BAA+B,GACvC,UAAU,GACV,MAAM,GACN,UAAU,GACV,0BAA0B,CAAC;AAE/B,MAAM,WAAW,kCAAkC;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,UAAU,EAAE,SAAS,CAAC,MAAM,sBAAsB,CAAC,EAAE,CAAC;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,SAAS,kCAAkC,EAAE,CAAC;CACxD;AAED,MAAM,WAAW,iCAAiC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,sBAAsB,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC;IAE/C,YAAY,MAAM,EAAE,6BAA6B,EAUhD;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class DesignSystemConformanceError extends Error {
|
|
2
|
+
report;
|
|
3
|
+
constructor(report) {
|
|
4
|
+
const failures = report.results
|
|
5
|
+
.filter((result) => !result.passed)
|
|
6
|
+
.map((result) => `${result.id}: ${result.message ?? "failed"}`)
|
|
7
|
+
.join("\n");
|
|
8
|
+
super(`Design system conformance failed for ${report.adapterName}:\n${failures}`);
|
|
9
|
+
this.name = "DesignSystemConformanceError";
|
|
10
|
+
this.report = report;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/conformance/types.ts"],"names":[],"mappings":"AA8BA,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAC5C,MAAM,CAAgC;IAE/C,YAAY,MAAqC;QAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO;aAC5B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;aAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;aAC9D,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CACH,wCAAwC,MAAM,CAAC,WAAW,MAAM,QAAQ,EAAE,CAC3E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const DESIGN_SYSTEM_CONTRACT_EVOLUTION_POLICY: {
|
|
2
|
+
readonly minor: "New components and optional props are backward-compatible.";
|
|
3
|
+
readonly major: "Required props, removed components or props, and behavioral contract changes require a new contract major.";
|
|
4
|
+
};
|
|
5
|
+
export declare function assertDesignSystemContractVersion(adapterContractVersion: number): void;
|
|
6
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/conformance/version.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uCAAuC;aAClD,KAAK,EAAE,4DAA4D;aACnE,KAAK,EACH,4GAA4G;CACtG,CAAC;AAEX,wBAAgB,iCAAiC,CAC/C,sBAAsB,EAAE,MAAM,GAC7B,IAAI,CAWN"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DESIGN_SYSTEM_CONTRACT_VERSION } from "../design-system/types.js";
|
|
2
|
+
export const DESIGN_SYSTEM_CONTRACT_EVOLUTION_POLICY = {
|
|
3
|
+
minor: "New components and optional props are backward-compatible.",
|
|
4
|
+
major: "Required props, removed components or props, and behavioral contract changes require a new contract major.",
|
|
5
|
+
};
|
|
6
|
+
export function assertDesignSystemContractVersion(adapterContractVersion) {
|
|
7
|
+
if (!Number.isInteger(adapterContractVersion) || adapterContractVersion < 1) {
|
|
8
|
+
throw new TypeError("Design system contractVersion must be a positive integer.");
|
|
9
|
+
}
|
|
10
|
+
if (adapterContractVersion !== DESIGN_SYSTEM_CONTRACT_VERSION) {
|
|
11
|
+
throw new RangeError(`Design system contract major ${adapterContractVersion} is incompatible with Toolkit contract major ${DESIGN_SYSTEM_CONTRACT_VERSION}.`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/conformance/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAE3E,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,KAAK,EAAE,4DAA4D;IACnE,KAAK,EACH,4GAA4G;CACtG,CAAC;AAEX,MAAM,UAAU,iCAAiC,CAC/C,sBAA8B;IAE9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,sBAAsB,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,SAAS,CACjB,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IACD,IAAI,sBAAsB,KAAK,8BAA8B,EAAE,CAAC;QAC9D,MAAM,IAAI,UAAU,CAClB,gCAAgC,sBAAsB,gDAAgD,8BAA8B,GAAG,CACxI,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ActionButtonProps, AvatarProps, CheckboxProps, DesignSystemKey, DialogProps, IconButtonProps, MenuProps, PickerProps, PopoverProps, SkeletonProps, SpinnerProps, StatusProps, SurfaceProps, SwitchProps, TabsProps, TextAreaProps, TextFieldProps, TooltipProps } from "./types.js";
|
|
2
|
+
export declare const ActionButton: {
|
|
3
|
+
(props: ActionButtonProps): import("react").JSX.Element;
|
|
4
|
+
displayName: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const IconButton: {
|
|
7
|
+
(props: IconButtonProps): import("react").JSX.Element;
|
|
8
|
+
displayName: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const TextField: {
|
|
11
|
+
(props: TextFieldProps): import("react").JSX.Element;
|
|
12
|
+
displayName: string;
|
|
13
|
+
};
|
|
14
|
+
export declare const TextArea: {
|
|
15
|
+
(props: TextAreaProps): import("react").JSX.Element;
|
|
16
|
+
displayName: string;
|
|
17
|
+
};
|
|
18
|
+
export declare const Spinner: {
|
|
19
|
+
(props: SpinnerProps): import("react").JSX.Element;
|
|
20
|
+
displayName: string;
|
|
21
|
+
};
|
|
22
|
+
export declare const Skeleton: {
|
|
23
|
+
(props: SkeletonProps): import("react").JSX.Element;
|
|
24
|
+
displayName: string;
|
|
25
|
+
};
|
|
26
|
+
export declare const Status: {
|
|
27
|
+
(props: StatusProps): import("react").JSX.Element;
|
|
28
|
+
displayName: string;
|
|
29
|
+
};
|
|
30
|
+
export declare const Surface: {
|
|
31
|
+
(props: SurfaceProps): import("react").JSX.Element;
|
|
32
|
+
displayName: string;
|
|
33
|
+
};
|
|
34
|
+
export declare const Avatar: {
|
|
35
|
+
(props: AvatarProps): import("react").JSX.Element;
|
|
36
|
+
displayName: string;
|
|
37
|
+
};
|
|
38
|
+
export declare const Tooltip: {
|
|
39
|
+
(props: TooltipProps): import("react").JSX.Element;
|
|
40
|
+
displayName: string;
|
|
41
|
+
};
|
|
42
|
+
export declare const Menu: {
|
|
43
|
+
(props: MenuProps): import("react").JSX.Element;
|
|
44
|
+
displayName: string;
|
|
45
|
+
};
|
|
46
|
+
export declare const Popover: {
|
|
47
|
+
(props: PopoverProps): import("react").JSX.Element;
|
|
48
|
+
displayName: string;
|
|
49
|
+
};
|
|
50
|
+
export declare const Dialog: {
|
|
51
|
+
(props: DialogProps): import("react").JSX.Element;
|
|
52
|
+
displayName: string;
|
|
53
|
+
};
|
|
54
|
+
export declare const Checkbox: {
|
|
55
|
+
(props: CheckboxProps): import("react").JSX.Element;
|
|
56
|
+
displayName: string;
|
|
57
|
+
};
|
|
58
|
+
export declare const Switch: {
|
|
59
|
+
(props: SwitchProps): import("react").JSX.Element;
|
|
60
|
+
displayName: string;
|
|
61
|
+
};
|
|
62
|
+
export declare function Picker<Value extends DesignSystemKey = string>(props: PickerProps<Value>): import("react").JSX.Element;
|
|
63
|
+
export declare function Tabs<Value extends DesignSystemKey = string>(props: TabsProps<Value>): import("react").JSX.Element;
|
|
64
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/design-system/components.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,aAAa,EAGb,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,YAAY,CAAC;AA4BpB,eAAO,MAAM,YAAY;;;CAGxB,CAAC;AACF,eAAO,MAAM,UAAU;;;CAGtB,CAAC;AACF,eAAO,MAAM,SAAS;;;CAGrB,CAAC;AACF,eAAO,MAAM,QAAQ;;;CAGpB,CAAC;AACF,eAAO,MAAM,OAAO;;;CAGnB,CAAC;AACF,eAAO,MAAM,QAAQ;;;CAGpB,CAAC;AACF,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AACF,eAAO,MAAM,OAAO;;;CAGnB,CAAC;AACF,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AACF,eAAO,MAAM,OAAO;;;CAGnB,CAAC;AACF,eAAO,MAAM,IAAI;;;CAGhB,CAAC;AACF,eAAO,MAAM,OAAO;;;CAGnB,CAAC;AACF,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AACF,eAAO,MAAM,QAAQ;;;CAGpB,CAAC;AACF,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,wBAAgB,MAAM,CAAC,KAAK,SAAS,eAAe,GAAG,MAAM,EAC3D,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,+BAa1B;AAED,wBAAgB,IAAI,CAAC,KAAK,SAAS,eAAe,GAAG,MAAM,EACzD,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,+BAaxB"}
|