@polyxd/web 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/LICENSE +202 -0
- package/NOTICE +190 -0
- package/README.md +79 -0
- package/adapters/PolyxdSurface.svelte +65 -0
- package/adapters/PolyxdSurface.vue +61 -0
- package/dist/components/action-bar.d.ts +14 -0
- package/dist/components/action-bar.js +69 -0
- package/dist/components/action-bar.js.map +1 -0
- package/dist/components/avatar.d.ts +9 -0
- package/dist/components/avatar.js +16 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/chart.d.ts +5 -0
- package/dist/components/chart.js +132 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/content.d.ts +20 -0
- package/dist/components/content.js +286 -0
- package/dist/components/content.js.map +1 -0
- package/dist/components/filter.d.ts +9 -0
- package/dist/components/filter.js +43 -0
- package/dist/components/filter.js.map +1 -0
- package/dist/components/flow.d.ts +12 -0
- package/dist/components/flow.js +188 -0
- package/dist/components/flow.js.map +1 -0
- package/dist/components/index.d.ts +10 -0
- package/dist/components/index.js +30 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/inputs.d.ts +28 -0
- package/dist/components/inputs.js +530 -0
- package/dist/components/inputs.js.map +1 -0
- package/dist/components/marks.d.ts +32 -0
- package/dist/components/marks.js +164 -0
- package/dist/components/marks.js.map +1 -0
- package/dist/components/navigation.d.ts +11 -0
- package/dist/components/navigation.js +99 -0
- package/dist/components/navigation.js.map +1 -0
- package/dist/components/overlays.d.ts +16 -0
- package/dist/components/overlays.js +146 -0
- package/dist/components/overlays.js.map +1 -0
- package/dist/components/pickers.d.ts +6 -0
- package/dist/components/pickers.js +272 -0
- package/dist/components/pickers.js.map +1 -0
- package/dist/components/shell.d.ts +30 -0
- package/dist/components/shell.js +167 -0
- package/dist/components/shell.js.map +1 -0
- package/dist/components/split.d.ts +8 -0
- package/dist/components/split.js +76 -0
- package/dist/components/split.js.map +1 -0
- package/dist/components/structure.d.ts +12 -0
- package/dist/components/structure.js +69 -0
- package/dist/components/structure.js.map +1 -0
- package/dist/components/table.d.ts +11 -0
- package/dist/components/table.js +142 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tree.d.ts +10 -0
- package/dist/components/tree.js +177 -0
- package/dist/components/tree.js.map +1 -0
- package/dist/dom.d.ts +25 -0
- package/dist/dom.js +211 -0
- package/dist/dom.js.map +1 -0
- package/dist/elements.d.ts +87 -0
- package/dist/elements.js +244 -0
- package/dist/elements.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/primitives.d.ts +111 -0
- package/dist/primitives.js +361 -0
- package/dist/primitives.js.map +1 -0
- package/dist/renderer.d.ts +145 -0
- package/dist/renderer.js +244 -0
- package/dist/renderer.js.map +1 -0
- package/dist/skeleton.d.ts +14 -0
- package/dist/skeleton.js +13 -0
- package/dist/skeleton.js.map +1 -0
- package/package.json +52 -0
- package/preview/polyxd-web.css +2 -0
- package/preview/polyxd-web.js +15 -0
- package/styles.css +5012 -0
- package/themes/antd.css +300 -0
- package/themes/bootstrap.css +300 -0
- package/themes/brutalist.css +300 -0
- package/themes/carbon.css +310 -0
- package/themes/chakra.css +300 -0
- package/themes/civic.css +300 -0
- package/themes/editorial.css +300 -0
- package/themes/finance.css +300 -0
- package/themes/fluent.css +300 -0
- package/themes/glass.css +300 -0
- package/themes/govuk.css +150 -0
- package/themes/health.css +300 -0
- package/themes/mantine.css +300 -0
- package/themes/material3.css +300 -0
- package/themes/mono.css +300 -0
- package/themes/neon.css +300 -0
- package/themes/pastel.css +300 -0
- package/themes/polaris.css +300 -0
- package/themes/primer.css +300 -0
- package/themes/radix.css +300 -0
- package/themes/shadcn.css +300 -0
- package/themes/sketch.css +356 -0
- package/themes/spectrum.css +300 -0
- package/themes/terminal.css +300 -0
- package/themes/wireframe.css +328 -0
package/dist/elements.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { Renderer } from "./renderer.js";
|
|
2
|
+
const STRING_ATTRS = ["theme", "mode", "density", "locale", "disclosure"];
|
|
3
|
+
/** The properties shared by both elements. */
|
|
4
|
+
export class PolyxdSurfaceElement extends HTMLElement {
|
|
5
|
+
static get observedAttributes() {
|
|
6
|
+
return [...STRING_ATTRS];
|
|
7
|
+
}
|
|
8
|
+
#renderer = null;
|
|
9
|
+
#document = null;
|
|
10
|
+
#data;
|
|
11
|
+
#derive;
|
|
12
|
+
#resolveMedia;
|
|
13
|
+
#components;
|
|
14
|
+
#scheduled = false;
|
|
15
|
+
onAction = null;
|
|
16
|
+
onDataChange = null;
|
|
17
|
+
onDismiss = null;
|
|
18
|
+
get document() {
|
|
19
|
+
return this.#document;
|
|
20
|
+
}
|
|
21
|
+
set document(doc) {
|
|
22
|
+
this.#document = doc;
|
|
23
|
+
this.#update();
|
|
24
|
+
}
|
|
25
|
+
get data() {
|
|
26
|
+
return this.#data;
|
|
27
|
+
}
|
|
28
|
+
set data(data) {
|
|
29
|
+
this.#data = data;
|
|
30
|
+
this.#update();
|
|
31
|
+
}
|
|
32
|
+
get derive() {
|
|
33
|
+
return this.#derive;
|
|
34
|
+
}
|
|
35
|
+
set derive(fn) {
|
|
36
|
+
this.#derive = fn;
|
|
37
|
+
this.#update();
|
|
38
|
+
}
|
|
39
|
+
get resolveMedia() {
|
|
40
|
+
return this.#resolveMedia;
|
|
41
|
+
}
|
|
42
|
+
set resolveMedia(fn) {
|
|
43
|
+
this.#resolveMedia = fn;
|
|
44
|
+
this.#update();
|
|
45
|
+
}
|
|
46
|
+
get components() {
|
|
47
|
+
return this.#components;
|
|
48
|
+
}
|
|
49
|
+
set components(map) {
|
|
50
|
+
this.#components = map;
|
|
51
|
+
this.#update();
|
|
52
|
+
}
|
|
53
|
+
get theme() {
|
|
54
|
+
return this.getAttribute("theme") ?? undefined;
|
|
55
|
+
}
|
|
56
|
+
set theme(v) {
|
|
57
|
+
v === undefined ? this.removeAttribute("theme") : this.setAttribute("theme", v);
|
|
58
|
+
}
|
|
59
|
+
get mode() {
|
|
60
|
+
return this.getAttribute("mode") ?? undefined;
|
|
61
|
+
}
|
|
62
|
+
set mode(v) {
|
|
63
|
+
v === undefined ? this.removeAttribute("mode") : this.setAttribute("mode", v);
|
|
64
|
+
}
|
|
65
|
+
get density() {
|
|
66
|
+
return this.getAttribute("density") ?? undefined;
|
|
67
|
+
}
|
|
68
|
+
set density(v) {
|
|
69
|
+
v === undefined ? this.removeAttribute("density") : this.setAttribute("density", v);
|
|
70
|
+
}
|
|
71
|
+
get locale() {
|
|
72
|
+
return this.getAttribute("locale") ?? undefined;
|
|
73
|
+
}
|
|
74
|
+
set locale(v) {
|
|
75
|
+
v === undefined ? this.removeAttribute("locale") : this.setAttribute("locale", v);
|
|
76
|
+
}
|
|
77
|
+
get disclosure() {
|
|
78
|
+
return this.getAttribute("disclosure") ?? undefined;
|
|
79
|
+
}
|
|
80
|
+
set disclosure(v) {
|
|
81
|
+
v === undefined ? this.removeAttribute("disclosure") : this.setAttribute("disclosure", v);
|
|
82
|
+
}
|
|
83
|
+
/** The current data, as the surface holds it (inputs write here). */
|
|
84
|
+
get surfaceData() {
|
|
85
|
+
return this.#renderer?.data;
|
|
86
|
+
}
|
|
87
|
+
connectedCallback() {
|
|
88
|
+
this.#update();
|
|
89
|
+
}
|
|
90
|
+
disconnectedCallback() {
|
|
91
|
+
this.#renderer?.dispose();
|
|
92
|
+
this.#renderer = null;
|
|
93
|
+
}
|
|
94
|
+
attributeChangedCallback() {
|
|
95
|
+
this.#update();
|
|
96
|
+
}
|
|
97
|
+
/** What the renderer is given: subclasses add the frame's props. */
|
|
98
|
+
props() {
|
|
99
|
+
if (!this.#document)
|
|
100
|
+
return null;
|
|
101
|
+
return {
|
|
102
|
+
document: this.#document,
|
|
103
|
+
data: this.#data,
|
|
104
|
+
derive: this.#derive,
|
|
105
|
+
resolveMedia: this.#resolveMedia,
|
|
106
|
+
components: this.#components,
|
|
107
|
+
theme: this.theme,
|
|
108
|
+
mode: this.mode,
|
|
109
|
+
density: this.density,
|
|
110
|
+
locale: this.locale,
|
|
111
|
+
disclosure: this.disclosure,
|
|
112
|
+
onAction: (e) => {
|
|
113
|
+
this.onAction?.(e);
|
|
114
|
+
this.dispatchEvent(new CustomEvent("polyxd-action", { detail: e, bubbles: true, composed: true }));
|
|
115
|
+
},
|
|
116
|
+
onDataChange: (d) => {
|
|
117
|
+
this.onDataChange?.(d);
|
|
118
|
+
this.dispatchEvent(new CustomEvent("polyxd-datachange", { detail: d, bubbles: true, composed: true }));
|
|
119
|
+
},
|
|
120
|
+
onDismiss: () => {
|
|
121
|
+
this.onDismiss?.();
|
|
122
|
+
this.dispatchEvent(new CustomEvent("polyxd-dismiss", { bubbles: true, composed: true }));
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** Several property sets in one tick draw once. */
|
|
127
|
+
#update() {
|
|
128
|
+
if (this.#scheduled)
|
|
129
|
+
return;
|
|
130
|
+
this.#scheduled = true;
|
|
131
|
+
queueMicrotask(() => {
|
|
132
|
+
this.#scheduled = false;
|
|
133
|
+
if (!this.isConnected)
|
|
134
|
+
return;
|
|
135
|
+
const props = this.props();
|
|
136
|
+
if (!props)
|
|
137
|
+
return;
|
|
138
|
+
if (this.#renderer)
|
|
139
|
+
this.#renderer.update(props);
|
|
140
|
+
else {
|
|
141
|
+
this.#renderer = new Renderer(this, props);
|
|
142
|
+
this.#renderer.draw();
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/** Redraws now rather than on the next tick (tests and hosts that measure right away). */
|
|
147
|
+
flush() {
|
|
148
|
+
const props = this.props();
|
|
149
|
+
if (!props || !this.isConnected)
|
|
150
|
+
return;
|
|
151
|
+
this.#scheduled = false;
|
|
152
|
+
if (this.#renderer) {
|
|
153
|
+
this.#renderer.update(props);
|
|
154
|
+
this.#renderer.draw();
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
this.#renderer = new Renderer(this, props);
|
|
158
|
+
this.#renderer.draw();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Renders a shell document (surface.kind "shell": a Frame with an Outlet) around the host's
|
|
164
|
+
* current screen: the element's light-DOM children at connection time, or the `outlet` property.
|
|
165
|
+
* `current` marks the navigation item and titles the page; `loading` shows a skeleton.
|
|
166
|
+
*/
|
|
167
|
+
export class PolyxdFrameElement extends PolyxdSurfaceElement {
|
|
168
|
+
#outlet = null;
|
|
169
|
+
#current;
|
|
170
|
+
#loading = false;
|
|
171
|
+
get outlet() {
|
|
172
|
+
return this.#outlet;
|
|
173
|
+
}
|
|
174
|
+
set outlet(el) {
|
|
175
|
+
this.#outlet = el;
|
|
176
|
+
this.flushSoon();
|
|
177
|
+
}
|
|
178
|
+
get current() {
|
|
179
|
+
return this.#current;
|
|
180
|
+
}
|
|
181
|
+
set current(v) {
|
|
182
|
+
this.#current = v;
|
|
183
|
+
this.flushSoon();
|
|
184
|
+
}
|
|
185
|
+
get loading() {
|
|
186
|
+
return this.#loading;
|
|
187
|
+
}
|
|
188
|
+
set loading(v) {
|
|
189
|
+
this.#loading = v;
|
|
190
|
+
this.flushSoon();
|
|
191
|
+
}
|
|
192
|
+
connectedCallback() {
|
|
193
|
+
// The screen the host wrote inside the element becomes the outlet's content.
|
|
194
|
+
if (!this.#outlet && this.childElementCount > 0 && !this.querySelector(":scope > .pxd-surface")) {
|
|
195
|
+
const holder = document.createElement("div");
|
|
196
|
+
holder.append(...Array.from(this.childNodes));
|
|
197
|
+
this.#outlet = holder;
|
|
198
|
+
}
|
|
199
|
+
super.connectedCallback();
|
|
200
|
+
}
|
|
201
|
+
flushSoon() {
|
|
202
|
+
queueMicrotask(() => this.isConnected && this.flush());
|
|
203
|
+
}
|
|
204
|
+
props() {
|
|
205
|
+
const base = super.props();
|
|
206
|
+
if (!base)
|
|
207
|
+
return null;
|
|
208
|
+
// The document title follows the current screen, as the Frame's accessibility requires.
|
|
209
|
+
const product = base.document.surface.title;
|
|
210
|
+
if (this.#current && product)
|
|
211
|
+
document.title = this.#current.title ? `${this.#current.title} · ${product}` : product;
|
|
212
|
+
return { ...base, outlet: this.#outlet, current: this.#current, loading: this.#loading };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/** Registers both elements once; safe to call again. */
|
|
216
|
+
export function defineElements() {
|
|
217
|
+
if (typeof customElements === "undefined")
|
|
218
|
+
return;
|
|
219
|
+
if (!customElements.get("polyxd-surface"))
|
|
220
|
+
customElements.define("polyxd-surface", PolyxdSurfaceElement);
|
|
221
|
+
if (!customElements.get("polyxd-frame"))
|
|
222
|
+
customElements.define("polyxd-frame", PolyxdFrameElement);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Renders a document into any element without the custom elements (hosts whose DOM is owned by
|
|
226
|
+
* something else). Returns a handle to update the props or take it down.
|
|
227
|
+
*/
|
|
228
|
+
export function mount(el, props) {
|
|
229
|
+
const renderer = new Renderer(el, props);
|
|
230
|
+
renderer.draw();
|
|
231
|
+
let current = props;
|
|
232
|
+
return {
|
|
233
|
+
update: (patch) => {
|
|
234
|
+
current = { ...current, ...patch };
|
|
235
|
+
renderer.update(current);
|
|
236
|
+
renderer.draw();
|
|
237
|
+
},
|
|
238
|
+
unmount: () => renderer.dispose(),
|
|
239
|
+
get data() {
|
|
240
|
+
return renderer.data;
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=elements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { PolyxdSurfaceElement, PolyxdFrameElement, defineElements, mount, type Mounted, type PolyxdEvents } from "./elements.ts";
|
|
2
|
+
export { Renderer, type SurfaceProps, type HostComponent, type Ctx, type Bindings, type FrameContextValue, type Density, type Mode } from "./renderer.ts";
|
|
3
|
+
export { registry, type ComponentRenderer } from "./components/index.ts";
|
|
4
|
+
export { Skeleton, type SkeletonProps } from "./skeleton.ts";
|
|
5
|
+
export { h, adopt, render, unmount, type VNode, type VChild, type Props } from "./dom.ts";
|
|
6
|
+
export { type UIDocument, type Node, type ActionEvent, type Data, formatValue, get as getPointer, set as setPointer } from "@polyxd/core";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { PolyxdSurfaceElement, PolyxdFrameElement, defineElements, mount } from "./elements.js";
|
|
2
|
+
export { Renderer } from "./renderer.js";
|
|
3
|
+
export { registry } from "./components/index.js";
|
|
4
|
+
export { Skeleton } from "./skeleton.js";
|
|
5
|
+
export { h, adopt, render, unmount } from "./dom.js";
|
|
6
|
+
export { formatValue, get as getPointer, set as setPointer } from "@polyxd/core";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,EAAmC,MAAM,eAAe,CAAC;AACjI,OAAO,EAAE,QAAQ,EAAmH,MAAM,eAAe,CAAC;AAC1J,OAAO,EAAE,QAAQ,EAA0B,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAuC,MAAM,UAAU,CAAC;AAC1F,OAAO,EAA2D,WAAW,EAAE,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The interactive primitives Radix gives the React renderer, written for the DOM: the same roles,
|
|
3
|
+
* names, states and keyboard handling, so a document reads and operates the same in both.
|
|
4
|
+
*/
|
|
5
|
+
import { type VChild, type VNode, type Props } from "./dom.ts";
|
|
6
|
+
import type { Ctx } from "./renderer.ts";
|
|
7
|
+
import type { Node } from "@polyxd/core";
|
|
8
|
+
declare const isEditable: (el: EventTarget | null) => boolean;
|
|
9
|
+
export declare function Checkbox(props: Props & {
|
|
10
|
+
checked: boolean | "indeterminate";
|
|
11
|
+
onCheckedChange: (checked: boolean) => void;
|
|
12
|
+
indicator?: VChild;
|
|
13
|
+
}, ...children: VChild[]): VNode;
|
|
14
|
+
export interface RadioGroupProps extends Props {
|
|
15
|
+
value: string;
|
|
16
|
+
onValueChange: (value: string) => void;
|
|
17
|
+
orientation?: "horizontal" | "vertical";
|
|
18
|
+
}
|
|
19
|
+
/** The group carries the roving focus: Tab lands on it and it hands focus to the chosen item, or the first. */
|
|
20
|
+
export declare function RadioGroup(props: RadioGroupProps, ...children: VChild[]): VNode;
|
|
21
|
+
/** One option. `group` is the group's value; the checked item (or the first, when none is) takes the tab stop. */
|
|
22
|
+
export declare function RadioItem(props: Props & {
|
|
23
|
+
value: string;
|
|
24
|
+
group: string;
|
|
25
|
+
first?: boolean;
|
|
26
|
+
onSelect: () => void;
|
|
27
|
+
indicator?: VChild;
|
|
28
|
+
}, ...children: VChild[]): VNode;
|
|
29
|
+
export declare function Switch(props: Props & {
|
|
30
|
+
checked: boolean;
|
|
31
|
+
onCheckedChange: (checked: boolean) => void;
|
|
32
|
+
}): VNode;
|
|
33
|
+
export interface SliderProps {
|
|
34
|
+
min: number;
|
|
35
|
+
max: number;
|
|
36
|
+
step: number;
|
|
37
|
+
values: number[];
|
|
38
|
+
onValueChange: (values: number[]) => void;
|
|
39
|
+
thumbs: {
|
|
40
|
+
"aria-label"?: string;
|
|
41
|
+
"aria-labelledby"?: string;
|
|
42
|
+
"aria-valuetext": string;
|
|
43
|
+
}[];
|
|
44
|
+
/** With two thumbs, they never cross: at least this many steps apart */
|
|
45
|
+
minStepsBetweenThumbs?: number;
|
|
46
|
+
}
|
|
47
|
+
export declare function Slider(p: SliderProps): VNode;
|
|
48
|
+
export interface TabsProps {
|
|
49
|
+
id: string;
|
|
50
|
+
value: string;
|
|
51
|
+
onValueChange: (key: string) => void;
|
|
52
|
+
tabs: {
|
|
53
|
+
key: string;
|
|
54
|
+
label: VChild[];
|
|
55
|
+
content: VChild;
|
|
56
|
+
}[];
|
|
57
|
+
rootClass: string;
|
|
58
|
+
listClass: string;
|
|
59
|
+
tabClass: string;
|
|
60
|
+
panelClass: string;
|
|
61
|
+
rootProps?: Props;
|
|
62
|
+
}
|
|
63
|
+
/** Arrows move between tabs and select them (automatic activation), as Radix does. */
|
|
64
|
+
export declare function Tabs(p: TabsProps): VNode;
|
|
65
|
+
export interface DialogProps {
|
|
66
|
+
ctx: Ctx;
|
|
67
|
+
/** A key for the dialog's state, unique in the surface */
|
|
68
|
+
id: string;
|
|
69
|
+
role?: "dialog" | "alertdialog";
|
|
70
|
+
class: string;
|
|
71
|
+
overlayClass?: string;
|
|
72
|
+
/** Escape and the backdrop close it, unless it must be completed */
|
|
73
|
+
dismissible?: boolean;
|
|
74
|
+
onClose: () => void;
|
|
75
|
+
props?: Props;
|
|
76
|
+
/** Called with the element once it is open, so a sheet may attach its drag handlers */
|
|
77
|
+
ref?: (el: HTMLDialogElement | null) => void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Opens on mount with showModal(), which traps focus, makes the rest inert and returns focus on
|
|
81
|
+
* close. Like Radix's hideOthers, the surface's other regions are hidden from assistive technology
|
|
82
|
+
* while it is open (the renderer sets aria-hidden on them for every modal in the portal).
|
|
83
|
+
*/
|
|
84
|
+
export declare function Dialog(p: DialogProps, ...children: VChild[]): VChild;
|
|
85
|
+
/** A dialog's close control: a button that closes it, named "Close" unless told otherwise. */
|
|
86
|
+
export declare const dialogClose: (onClose: () => void, props: Props, ...children: VChild[]) => VNode;
|
|
87
|
+
export interface MenuState {
|
|
88
|
+
open: boolean;
|
|
89
|
+
/** Where to put it: below the trigger, or at the pointer for a context menu */
|
|
90
|
+
x: number;
|
|
91
|
+
y: number;
|
|
92
|
+
/** Whether it was opened from the keyboard, in which case the first item takes focus */
|
|
93
|
+
keyboard?: boolean;
|
|
94
|
+
align: "start" | "end";
|
|
95
|
+
}
|
|
96
|
+
export declare const closedMenu: () => MenuState;
|
|
97
|
+
export interface MenuItemSpec {
|
|
98
|
+
key: string;
|
|
99
|
+
label: VChild[];
|
|
100
|
+
class: string;
|
|
101
|
+
disabled?: boolean;
|
|
102
|
+
onSelect: () => void;
|
|
103
|
+
props?: Props;
|
|
104
|
+
}
|
|
105
|
+
/** The trigger's props: what it is, whether it is open, and how to open it. */
|
|
106
|
+
export declare function menuTrigger(id: string, state: MenuState, setState: (s: MenuState) => void, align: "start" | "end", props: Props): Props;
|
|
107
|
+
/** The menu itself, rendered into the portal while open. Escape and selection return focus to the trigger. */
|
|
108
|
+
export declare function Menu(ctx: Ctx, id: string, state: MenuState, setState: (s: MenuState) => void, items: (MenuItemSpec | "separator")[], props: Props): void;
|
|
109
|
+
export declare function Popover(ctx: Ctx, id: string, anchorSelector: string, onClose: () => void, dismissible: boolean, props: Props, ...children: VChild[]): void;
|
|
110
|
+
export { isEditable };
|
|
111
|
+
export type { Node };
|