@stealthscale/component-disclosure 0.2.3 → 0.2.4

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.
Files changed (43) hide show
  1. package/dist/cyclonedx/bom.json +1 -1
  2. package/dist/index.js +1 -5423
  3. package/dist/pages/accordion/accordion.js +512 -0
  4. package/dist/pages/accordion/accordion.props.js +3 -0
  5. package/dist/pages/collapsible/collapsible.js +173 -0
  6. package/dist/pages/collapsible/collapsible.props.js +3 -0
  7. package/dist/pages/details/details.js +281 -0
  8. package/dist/pages/details/details.props.js +3 -0
  9. package/dist/pages/hover-card/hover-card.js +552 -0
  10. package/dist/pages/hover-card/hover-card.props.js +3 -0
  11. package/dist/pages/menu/menu.js +1103 -0
  12. package/dist/pages/menu/menu.props.js +3 -0
  13. package/dist/pages/menubar/menubar.js +1181 -0
  14. package/dist/pages/menubar/menubar.props.js +3 -0
  15. package/dist/pages/pages.json +138 -0
  16. package/dist/pages/popover/popover.js +161 -0
  17. package/dist/pages/popover/popover.props.js +3 -0
  18. package/dist/pages/steps/steps.js +660 -0
  19. package/dist/pages/steps/steps.props.js +3 -0
  20. package/dist/pages/tabs/tabs.js +815 -0
  21. package/dist/pages/tabs/tabs.props.js +3 -0
  22. package/dist/pages/toggle-tip/toggle-tip.js +344 -0
  23. package/dist/pages/toggle-tip/toggle-tip.props.js +3 -0
  24. package/dist/pages/tooltip/tooltip.js +112 -0
  25. package/dist/pages/tooltip/tooltip.props.js +3 -0
  26. package/dist/pages/truncate/truncate.js +235 -0
  27. package/dist/pages/truncate/truncate.props.js +3 -0
  28. package/dist/shared-Cfsikh3X.js +5424 -0
  29. package/dist/theme.js +1 -1
  30. package/locales/en/specimen/accordion.json +130 -0
  31. package/locales/en/specimen/collapsible.json +27 -0
  32. package/locales/en/specimen/details.json +48 -0
  33. package/locales/en/specimen/hover-card.json +58 -0
  34. package/locales/en/specimen/menu.json +81 -0
  35. package/locales/en/specimen/menubar.json +108 -0
  36. package/locales/en/specimen/popover.json +16 -0
  37. package/locales/en/specimen/steps.json +86 -0
  38. package/locales/en/specimen/tabs.json +108 -0
  39. package/locales/en/specimen/toggle-tip.json +47 -0
  40. package/locales/en/specimen/tooltip.json +14 -0
  41. package/locales/en/specimen/truncate.json +31 -0
  42. package/package.json +9 -8
  43. /package/dist/{recipe-95yCB2V3.js → recipes-95yCB2V3.js} +0 -0
@@ -0,0 +1,552 @@
1
+ import { t as __exportAll } from "../../rolldown-runtime-D7D4PA-g.js";
2
+ import { d as recipe } from "../../recipes-95yCB2V3.js";
3
+ import { Ct as Root, Dt as ArrowTip, Et as Arrow, St as Trigger, Tt as Content, wt as Positioner } from "../../shared-Cfsikh3X.js";
4
+ import { c } from "react/compiler-runtime";
5
+ import { useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { Portal } from "@stealthscale/component-primitives";
8
+ import { Matrix, Sample, scenesOf, specimen, useWords } from "@stealthscale/specimen";
9
+ import { CircleDotIcon, ClockIcon } from "lucide-react";
10
+ import { Stack } from "@stealthscale/component-layout";
11
+ import { Icon, Span, Strong } from "@stealthscale/component-typography";
12
+ import { Avatar } from "@stealthscale/component-media";
13
+ import { DataList } from "@stealthscale/component-collections";
14
+ import { Badge } from "@stealthscale/component-data";
15
+ //#region src/hover-card/examples/issue.example.tsx
16
+ var issue_example_exports = /* @__PURE__ */ __exportAll({
17
+ Issue: () => Issue,
18
+ source: () => source$2
19
+ });
20
+ function Issue() {
21
+ const $ = c(37);
22
+ const { t } = useWords("hover-card");
23
+ let t0;
24
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
25
+ t0 = { placement: "bottom-start" };
26
+ $[0] = t0;
27
+ } else t0 = $[0];
28
+ let t1;
29
+ if ($[1] !== t) {
30
+ t1 = t("issue.reference");
31
+ $[1] = t;
32
+ $[2] = t1;
33
+ } else t1 = $[2];
34
+ let t2;
35
+ if ($[3] !== t1) {
36
+ t2 = /* @__PURE__ */ jsx(Trigger, {
37
+ href: "#issue-1204",
38
+ children: t1
39
+ });
40
+ $[3] = t1;
41
+ $[4] = t2;
42
+ } else t2 = $[4];
43
+ let t3;
44
+ if ($[5] !== t) {
45
+ t3 = t("issue.repository");
46
+ $[5] = t;
47
+ $[6] = t3;
48
+ } else t3 = $[6];
49
+ let t4;
50
+ if ($[7] !== t3) {
51
+ t4 = /* @__PURE__ */ jsx(Span, {
52
+ tone: "muted",
53
+ children: t3
54
+ });
55
+ $[7] = t3;
56
+ $[8] = t4;
57
+ } else t4 = $[8];
58
+ let t5;
59
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
60
+ t5 = /* @__PURE__ */ jsx(Icon, {
61
+ as: CircleDotIcon,
62
+ tone: "success"
63
+ });
64
+ $[9] = t5;
65
+ } else t5 = $[9];
66
+ let t6;
67
+ if ($[10] !== t) {
68
+ t6 = t("issue.heading");
69
+ $[10] = t;
70
+ $[11] = t6;
71
+ } else t6 = $[11];
72
+ let t7;
73
+ if ($[12] !== t6) {
74
+ t7 = /* @__PURE__ */ jsxs(Strong, { children: [
75
+ t5,
76
+ " ",
77
+ t6
78
+ ] });
79
+ $[12] = t6;
80
+ $[13] = t7;
81
+ } else t7 = $[13];
82
+ let t8;
83
+ if ($[14] !== t) {
84
+ t8 = t("issue.summary");
85
+ $[14] = t;
86
+ $[15] = t8;
87
+ } else t8 = $[15];
88
+ let t9;
89
+ if ($[16] !== t8) {
90
+ t9 = /* @__PURE__ */ jsx(Span, {
91
+ as: "p",
92
+ children: t8
93
+ });
94
+ $[16] = t8;
95
+ $[17] = t9;
96
+ } else t9 = $[17];
97
+ let t10;
98
+ if ($[18] !== t) {
99
+ t10 = t("issue.state");
100
+ $[18] = t;
101
+ $[19] = t10;
102
+ } else t10 = $[19];
103
+ let t11;
104
+ if ($[20] !== t10) {
105
+ t11 = /* @__PURE__ */ jsx(Badge, {
106
+ palette: "success",
107
+ children: t10
108
+ });
109
+ $[20] = t10;
110
+ $[21] = t11;
111
+ } else t11 = $[21];
112
+ let t12;
113
+ if ($[22] !== t) {
114
+ t12 = t("issue.opened");
115
+ $[22] = t;
116
+ $[23] = t12;
117
+ } else t12 = $[23];
118
+ let t13;
119
+ if ($[24] !== t12) {
120
+ t13 = /* @__PURE__ */ jsx(Span, {
121
+ tone: "muted",
122
+ children: t12
123
+ });
124
+ $[24] = t12;
125
+ $[25] = t13;
126
+ } else t13 = $[25];
127
+ let t14;
128
+ if ($[26] !== t11 || $[27] !== t13) {
129
+ t14 = /* @__PURE__ */ jsxs(Stack, {
130
+ direction: "row",
131
+ gap: "sm",
132
+ children: [t11, t13]
133
+ });
134
+ $[26] = t11;
135
+ $[27] = t13;
136
+ $[28] = t14;
137
+ } else t14 = $[28];
138
+ let t15;
139
+ if ($[29] !== t14 || $[30] !== t4 || $[31] !== t7 || $[32] !== t9) {
140
+ t15 = /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Positioner, { children: /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsxs(Stack, {
141
+ gap: "sm",
142
+ children: [
143
+ t4,
144
+ t7,
145
+ t9,
146
+ t14
147
+ ]
148
+ }) }) }) });
149
+ $[29] = t14;
150
+ $[30] = t4;
151
+ $[31] = t7;
152
+ $[32] = t9;
153
+ $[33] = t15;
154
+ } else t15 = $[33];
155
+ let t16;
156
+ if ($[34] !== t15 || $[35] !== t2) {
157
+ t16 = /* @__PURE__ */ jsxs(Root, {
158
+ positioning: t0,
159
+ children: [t2, t15]
160
+ });
161
+ $[34] = t15;
162
+ $[35] = t2;
163
+ $[36] = t16;
164
+ } else t16 = $[36];
165
+ return t16;
166
+ }
167
+ const source$2 = "import { type ReactElement } from \"react\";\n\nimport { CircleDotIcon } from \"lucide-react\";\n\nimport { Badge } from \"@stealthscale/component-data\";\nimport { Stack } from \"@stealthscale/component-layout\";\nimport { Portal } from \"@stealthscale/component-primitives\";\nimport { Icon, Span, Strong } from \"@stealthscale/component-typography\";\nimport { useWords } from \"@stealthscale/specimen\";\n\nimport { HoverCard } from \"@stealthscale/component-disclosure\";\n\nexport function Issue(): ReactElement {\n const { t } = useWords(\"hover-card\");\n\n return (\n <HoverCard.Root positioning={{ placement: \"bottom-start\" }}>\n <HoverCard.Trigger href=\"#issue-1204\">{t(\"issue.reference\")}</HoverCard.Trigger>\n <Portal>\n <HoverCard.Positioner>\n <HoverCard.Content>\n <Stack gap=\"sm\">\n <Span tone=\"muted\">{t(\"issue.repository\")}</Span>\n <Strong>\n <Icon as={CircleDotIcon} tone=\"success\" /> {t(\"issue.heading\")}\n </Strong>\n <Span as=\"p\">{t(\"issue.summary\")}</Span>\n <Stack direction=\"row\" gap=\"sm\">\n <Badge palette=\"success\">{t(\"issue.state\")}</Badge>\n <Span tone=\"muted\">{t(\"issue.opened\")}</Span>\n </Stack>\n </Stack>\n </HoverCard.Content>\n </HoverCard.Positioner>\n </Portal>\n </HoverCard.Root>\n );\n}\n";
168
+ //#endregion
169
+ //#region src/hover-card/examples/profile.example.tsx
170
+ var profile_example_exports = /* @__PURE__ */ __exportAll({
171
+ Profile: () => Profile,
172
+ source: () => source$1
173
+ });
174
+ function Profile(props) {
175
+ const $ = c(41);
176
+ const { t } = useWords("hover-card");
177
+ let t0;
178
+ if ($[0] !== t) {
179
+ t0 = t("profile.handle");
180
+ $[0] = t;
181
+ $[1] = t0;
182
+ } else t0 = $[1];
183
+ let t1;
184
+ if ($[2] !== t0) {
185
+ t1 = /* @__PURE__ */ jsx(Trigger, {
186
+ href: "#people-ada",
187
+ children: t0
188
+ });
189
+ $[2] = t0;
190
+ $[3] = t1;
191
+ } else t1 = $[3];
192
+ let t2;
193
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
194
+ t2 = /* @__PURE__ */ jsx(Arrow, { children: /* @__PURE__ */ jsx(ArrowTip, {}) });
195
+ $[4] = t2;
196
+ } else t2 = $[4];
197
+ let t3;
198
+ if ($[5] !== t) {
199
+ t3 = t("profile.name");
200
+ $[5] = t;
201
+ $[6] = t3;
202
+ } else t3 = $[6];
203
+ let t4;
204
+ if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
205
+ t4 = /* @__PURE__ */ jsx(Avatar.Fallback, {});
206
+ $[7] = t4;
207
+ } else t4 = $[7];
208
+ let t5;
209
+ if ($[8] !== t3) {
210
+ t5 = /* @__PURE__ */ jsx(Avatar.Root, {
211
+ "aria-hidden": true,
212
+ name: t3,
213
+ children: t4
214
+ });
215
+ $[8] = t3;
216
+ $[9] = t5;
217
+ } else t5 = $[9];
218
+ let t6;
219
+ if ($[10] !== t) {
220
+ t6 = t("profile.name");
221
+ $[10] = t;
222
+ $[11] = t6;
223
+ } else t6 = $[11];
224
+ let t7;
225
+ if ($[12] !== t6) {
226
+ t7 = /* @__PURE__ */ jsx(Strong, { children: t6 });
227
+ $[12] = t6;
228
+ $[13] = t7;
229
+ } else t7 = $[13];
230
+ let t8;
231
+ if ($[14] !== t) {
232
+ t8 = t("profile.role");
233
+ $[14] = t;
234
+ $[15] = t8;
235
+ } else t8 = $[15];
236
+ let t9;
237
+ if ($[16] !== t8) {
238
+ t9 = /* @__PURE__ */ jsx(Span, {
239
+ tone: "muted",
240
+ children: t8
241
+ });
242
+ $[16] = t8;
243
+ $[17] = t9;
244
+ } else t9 = $[17];
245
+ let t10;
246
+ if ($[18] !== t7 || $[19] !== t9) {
247
+ t10 = /* @__PURE__ */ jsxs(Stack, {
248
+ gap: "xs",
249
+ children: [t7, t9]
250
+ });
251
+ $[18] = t7;
252
+ $[19] = t9;
253
+ $[20] = t10;
254
+ } else t10 = $[20];
255
+ let t11;
256
+ if ($[21] !== t10 || $[22] !== t5) {
257
+ t11 = /* @__PURE__ */ jsxs(Stack, {
258
+ direction: "row",
259
+ gap: "sm",
260
+ children: [t5, t10]
261
+ });
262
+ $[21] = t10;
263
+ $[22] = t5;
264
+ $[23] = t11;
265
+ } else t11 = $[23];
266
+ let t12;
267
+ if ($[24] !== t) {
268
+ t12 = t("profile.bio");
269
+ $[24] = t;
270
+ $[25] = t12;
271
+ } else t12 = $[25];
272
+ let t13;
273
+ if ($[26] !== t12) {
274
+ t13 = /* @__PURE__ */ jsx(Span, {
275
+ as: "p",
276
+ children: t12
277
+ });
278
+ $[26] = t12;
279
+ $[27] = t13;
280
+ } else t13 = $[27];
281
+ let t14;
282
+ if ($[28] === Symbol.for("react.memo_cache_sentinel")) {
283
+ t14 = /* @__PURE__ */ jsx(Icon, { as: ClockIcon });
284
+ $[28] = t14;
285
+ } else t14 = $[28];
286
+ let t15;
287
+ if ($[29] !== t) {
288
+ t15 = t("profile.time");
289
+ $[29] = t;
290
+ $[30] = t15;
291
+ } else t15 = $[30];
292
+ let t16;
293
+ if ($[31] !== t15) {
294
+ t16 = /* @__PURE__ */ jsxs(Span, {
295
+ tone: "muted",
296
+ children: [
297
+ t14,
298
+ " ",
299
+ t15
300
+ ]
301
+ });
302
+ $[31] = t15;
303
+ $[32] = t16;
304
+ } else t16 = $[32];
305
+ let t17;
306
+ if ($[33] !== t11 || $[34] !== t13 || $[35] !== t16) {
307
+ t17 = /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Positioner, { children: /* @__PURE__ */ jsxs(Content, { children: [t2, /* @__PURE__ */ jsxs(Stack, {
308
+ gap: "sm",
309
+ children: [
310
+ t11,
311
+ t13,
312
+ t16
313
+ ]
314
+ })] }) }) });
315
+ $[33] = t11;
316
+ $[34] = t13;
317
+ $[35] = t16;
318
+ $[36] = t17;
319
+ } else t17 = $[36];
320
+ let t18;
321
+ if ($[37] !== props || $[38] !== t1 || $[39] !== t17) {
322
+ t18 = /* @__PURE__ */ jsxs(Root, {
323
+ ...props,
324
+ children: [t1, t17]
325
+ });
326
+ $[37] = props;
327
+ $[38] = t1;
328
+ $[39] = t17;
329
+ $[40] = t18;
330
+ } else t18 = $[40];
331
+ return t18;
332
+ }
333
+ const source$1 = "import { type ReactElement } from \"react\";\n\nimport { ClockIcon } from \"lucide-react\";\n\nimport { Stack } from \"@stealthscale/component-layout\";\nimport { Avatar } from \"@stealthscale/component-media\";\nimport { Portal } from \"@stealthscale/component-primitives\";\nimport { Icon, Span, Strong } from \"@stealthscale/component-typography\";\nimport { useWords } from \"@stealthscale/specimen\";\n\nimport { HoverCard } from \"@stealthscale/component-disclosure\";\n\nexport function Profile(props: HoverCard.RootProps): ReactElement {\n const { t } = useWords(\"hover-card\");\n\n return (\n <HoverCard.Root {...props}>\n <HoverCard.Trigger href=\"#people-ada\">{t(\"profile.handle\")}</HoverCard.Trigger>\n <Portal>\n <HoverCard.Positioner>\n <HoverCard.Content>\n <HoverCard.Arrow>\n <HoverCard.ArrowTip />\n </HoverCard.Arrow>\n <Stack gap=\"sm\">\n <Stack direction=\"row\" gap=\"sm\">\n <Avatar.Root aria-hidden name={t(\"profile.name\")}>\n <Avatar.Fallback />\n </Avatar.Root>\n <Stack gap=\"xs\">\n <Strong>{t(\"profile.name\")}</Strong>\n <Span tone=\"muted\">{t(\"profile.role\")}</Span>\n </Stack>\n </Stack>\n <Span as=\"p\">{t(\"profile.bio\")}</Span>\n <Span tone=\"muted\">\n <Icon as={ClockIcon} /> {t(\"profile.time\")}\n </Span>\n </Stack>\n </HoverCard.Content>\n </HoverCard.Positioner>\n </Portal>\n </HoverCard.Root>\n );\n}\n";
334
+ //#endregion
335
+ //#region src/hover-card/examples/reviewers.example.tsx
336
+ var reviewers_example_exports = /* @__PURE__ */ __exportAll({
337
+ Reviewers: () => Reviewers,
338
+ source: () => source
339
+ });
340
+ const REVIEWS = [
341
+ ["ada", "success"],
342
+ ["grace", "warning"],
343
+ ["alan", "neutral"]
344
+ ];
345
+ function Reviewers() {
346
+ const $ = c(15);
347
+ const { t } = useWords("hover-card");
348
+ const [person, setPerson] = useState(null);
349
+ let t0;
350
+ let t1;
351
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
352
+ t0 = (t2) => {
353
+ const { value } = t2;
354
+ setPerson(REVIEWS.find((t3) => {
355
+ const [id] = t3;
356
+ return id === value;
357
+ })?.[0] ?? null);
358
+ };
359
+ t1 = {
360
+ flip: ["bottom-start"],
361
+ placement: "right"
362
+ };
363
+ $[0] = t0;
364
+ $[1] = t1;
365
+ } else {
366
+ t0 = $[0];
367
+ t1 = $[1];
368
+ }
369
+ let t2;
370
+ if ($[2] !== t) {
371
+ t2 = REVIEWS.map((t3) => {
372
+ const [id_0, palette] = t3;
373
+ return /* @__PURE__ */ jsxs(DataList.Item, { children: [/* @__PURE__ */ jsx(DataList.ItemLabel, { children: /* @__PURE__ */ jsx(Trigger, {
374
+ href: `#people-${id_0}`,
375
+ value: id_0,
376
+ children: t(`people.${id_0}.name`)
377
+ }) }), /* @__PURE__ */ jsx(DataList.ItemValue, { children: /* @__PURE__ */ jsx(Badge, {
378
+ palette,
379
+ children: t(`people.${id_0}.verdict`)
380
+ }) })] }, id_0);
381
+ });
382
+ $[2] = t;
383
+ $[3] = t2;
384
+ } else t2 = $[3];
385
+ let t3;
386
+ if ($[4] !== t2) {
387
+ t3 = /* @__PURE__ */ jsx(DataList.Root, {
388
+ orientation: "horizontal",
389
+ children: t2
390
+ });
391
+ $[4] = t2;
392
+ $[5] = t3;
393
+ } else t3 = $[5];
394
+ let t4;
395
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
396
+ t4 = /* @__PURE__ */ jsx(Arrow, { children: /* @__PURE__ */ jsx(ArrowTip, {}) });
397
+ $[6] = t4;
398
+ } else t4 = $[6];
399
+ let t5;
400
+ if ($[7] !== person || $[8] !== t) {
401
+ t5 = person === null ? null : /* @__PURE__ */ jsxs(Stack, {
402
+ direction: "row",
403
+ gap: "sm",
404
+ children: [/* @__PURE__ */ jsx(Avatar.Root, {
405
+ "aria-hidden": true,
406
+ name: t(`people.${person}.name`),
407
+ children: /* @__PURE__ */ jsx(Avatar.Fallback, {})
408
+ }), /* @__PURE__ */ jsxs(Stack, {
409
+ gap: "xs",
410
+ children: [/* @__PURE__ */ jsx(Strong, { children: t(`people.${person}.name`) }), /* @__PURE__ */ jsx(Span, {
411
+ tone: "muted",
412
+ children: t(`people.${person}.role`)
413
+ })]
414
+ })]
415
+ });
416
+ $[7] = person;
417
+ $[8] = t;
418
+ $[9] = t5;
419
+ } else t5 = $[9];
420
+ let t6;
421
+ if ($[10] !== t5) {
422
+ t6 = /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Positioner, { children: /* @__PURE__ */ jsxs(Content, { children: [t4, t5] }) }) });
423
+ $[10] = t5;
424
+ $[11] = t6;
425
+ } else t6 = $[11];
426
+ let t7;
427
+ if ($[12] !== t3 || $[13] !== t6) {
428
+ t7 = /* @__PURE__ */ jsxs(Root, {
429
+ as: "div",
430
+ onTriggerValueChange: t0,
431
+ positioning: t1,
432
+ children: [t3, t6]
433
+ });
434
+ $[12] = t3;
435
+ $[13] = t6;
436
+ $[14] = t7;
437
+ } else t7 = $[14];
438
+ return t7;
439
+ }
440
+ const source = "import { type ReactElement, useState } from \"react\";\n\nimport { DataList } from \"@stealthscale/component-collections\";\nimport { Badge } from \"@stealthscale/component-data\";\nimport { Stack } from \"@stealthscale/component-layout\";\nimport { Avatar } from \"@stealthscale/component-media\";\nimport { Portal } from \"@stealthscale/component-primitives\";\nimport { Span, Strong } from \"@stealthscale/component-typography\";\nimport { useWords } from \"@stealthscale/specimen\";\n\nimport { HoverCard } from \"@stealthscale/component-disclosure\";\n\nconst REVIEWS = [\n [\"ada\", \"success\"],\n [\"grace\", \"warning\"],\n [\"alan\", \"neutral\"],\n] as const;\n\ntype Person = (typeof REVIEWS)[number][0];\n\nexport function Reviewers(): ReactElement {\n const { t } = useWords(\"hover-card\");\n const [person, setPerson] = useState<null | Person>(null);\n\n return (\n <HoverCard.Root\n as=\"div\"\n onTriggerValueChange={({ value }) => {\n setPerson(REVIEWS.find(([id]) => id === value)?.[0] ?? null);\n }}\n positioning={{ flip: [\"bottom-start\"], placement: \"right\" }}\n >\n <DataList.Root orientation=\"horizontal\">\n {REVIEWS.map(([id, palette]) => (\n <DataList.Item key={id}>\n <DataList.ItemLabel>\n <HoverCard.Trigger href={`#people-${id}`} value={id}>\n {t(`people.${id}.name`)}\n </HoverCard.Trigger>\n </DataList.ItemLabel>\n <DataList.ItemValue>\n <Badge palette={palette}>{t(`people.${id}.verdict`)}</Badge>\n </DataList.ItemValue>\n </DataList.Item>\n ))}\n </DataList.Root>\n <Portal>\n <HoverCard.Positioner>\n <HoverCard.Content>\n <HoverCard.Arrow>\n <HoverCard.ArrowTip />\n </HoverCard.Arrow>\n {person === null ? null : (\n <Stack direction=\"row\" gap=\"sm\">\n <Avatar.Root aria-hidden name={t(`people.${person}.name`)}>\n <Avatar.Fallback />\n </Avatar.Root>\n <Stack gap=\"xs\">\n <Strong>{t(`people.${person}.name`)}</Strong>\n <Span tone=\"muted\">{t(`people.${person}.role`)}</Span>\n </Stack>\n </Stack>\n )}\n </HoverCard.Content>\n </HoverCard.Positioner>\n </Portal>\n </HoverCard.Root>\n );\n}\n";
441
+ //#endregion
442
+ //#region src/hover-card/hover-card.specimen.tsx
443
+ /**
444
+ * Catalogue page for the hover card.
445
+ *
446
+ * @remarks
447
+ * `scenesOf` generates the looks by sizes from the profile example. The placement, delay and
448
+ * disabled scenes are hand-written, because each sets a machine option and not an axis. The issue
449
+ * and reviewers scenes show a card of another kind and one card that several links share. Every
450
+ * card renders closed and portals its panel to the document body, so an opened card renders over
451
+ * the page and a scene is as tall as its links. A single link renders in a `Sample`, which keeps
452
+ * its pointer area at the width of its words. The words are keys under `hover-card` in
453
+ * `locales/en/specimen/hover-card.json`.
454
+ */
455
+ /**
456
+ * Sides of the placement scene.
457
+ */
458
+ const SIDES = [
459
+ "top",
460
+ "right",
461
+ "bottom",
462
+ "left"
463
+ ];
464
+ /**
465
+ * Open delays of the delay scene, in milliseconds.
466
+ */
467
+ const DELAYS = [
468
+ 0,
469
+ 300,
470
+ 600
471
+ ];
472
+ /**
473
+ * Hand-written scene for the four placements.
474
+ */
475
+ const placement = {
476
+ about: "hover-card.placement.about",
477
+ draw: () => /* @__PURE__ */ jsx(Matrix, {
478
+ knob: "placement",
479
+ of: SIDES,
480
+ children: (side) => /* @__PURE__ */ jsx(Profile, { positioning: { placement: side } })
481
+ }),
482
+ example: profile_example_exports,
483
+ props: { positioning: { placement: "top" } },
484
+ title: "hover-card.placement.title"
485
+ };
486
+ /**
487
+ * Hand-written scene for the time a pointer rests on the link before the card opens.
488
+ */
489
+ const delays = {
490
+ about: "hover-card.delays.about",
491
+ draw: () => /* @__PURE__ */ jsx(Matrix, {
492
+ knob: "openDelay",
493
+ of: DELAYS,
494
+ children: (delay) => /* @__PURE__ */ jsx(Profile, { openDelay: delay })
495
+ }),
496
+ example: profile_example_exports,
497
+ props: { openDelay: 0 },
498
+ title: "hover-card.delays.title"
499
+ };
500
+ /**
501
+ * Hand-written scene for a link whose card is turned off.
502
+ */
503
+ const disabled = {
504
+ about: "hover-card.disabled.about",
505
+ draw: () => /* @__PURE__ */ jsx(Matrix, {
506
+ knob: "disabled",
507
+ of: [true, false],
508
+ children: (off) => /* @__PURE__ */ jsx(Profile, { disabled: off })
509
+ }),
510
+ example: profile_example_exports,
511
+ props: { disabled: true },
512
+ title: "hover-card.disabled.title"
513
+ };
514
+ /**
515
+ * Hand-written scene for a card that previews an issue.
516
+ */
517
+ const issue = {
518
+ about: "hover-card.issue.about",
519
+ draw: () => /* @__PURE__ */ jsx(Sample, { children: /* @__PURE__ */ jsx(Issue, {}) }),
520
+ example: issue_example_exports,
521
+ title: "hover-card.issue.title"
522
+ };
523
+ /**
524
+ * Hand-written scene for one card that three links share.
525
+ */
526
+ const reviewers = {
527
+ about: "hover-card.reviewers.about",
528
+ draw: Reviewers,
529
+ example: reviewers_example_exports,
530
+ title: "hover-card.reviewers.title"
531
+ };
532
+ var hover_card_specimen_default = specimen({
533
+ about: "hover-card.about",
534
+ id: "components/disclosure/hover-card",
535
+ imports: "import { HoverCard } from \"@stealthscale/component-disclosure\";",
536
+ scenes: [
537
+ ...scenesOf(recipe, {
538
+ axes: { variant: { across: "size" } },
539
+ draw: (props) => /* @__PURE__ */ jsx(Profile, { ...props }),
540
+ example: profile_example_exports,
541
+ namespace: "hover-card"
542
+ }),
543
+ placement,
544
+ delays,
545
+ disabled,
546
+ issue,
547
+ reviewers
548
+ ],
549
+ title: "hover-card.title"
550
+ });
551
+ //#endregion
552
+ export { hover_card_specimen_default as default, delays, disabled, issue, placement, reviewers };
@@ -0,0 +1,3 @@
1
+ export const dropped = {"ArrowTipProps": {"conditions": 284, "foreign": 1041}, "ArrowProps": {"conditions": 284, "foreign": 1041}, "ContentProps": {"conditions": 284, "foreign": 1040}, "PositionerProps": {"conditions": 284, "foreign": 1041}, "RootProps": {"conditions": 284, "foreign": 1039}, "TriggerProps": {"conditions": 284, "foreign": 1049}};
2
+ export const parts = {"ArrowTipProps": [], "ArrowProps": [], "ContentProps": [], "PositionerProps": [], "RootProps": [{"accepts": "number", "fallback": "300", "kind": "option", "name": "closeDelay", "refers": [], "required": false, "says": "The duration from when the mouse leaves the trigger or content until the hover card closes."}, {"accepts": "boolean", "fallback": "", "kind": "option", "name": "defaultOpen", "refers": [], "required": false, "says": "The initial open state of the hover card when rendered. Use when you don't need to control the open state of the hover card."}, {"accepts": "string | null", "fallback": "", "kind": "option", "name": "defaultTriggerValue", "refers": [], "required": false, "says": "The initial trigger value when rendered. Use when you don't need to control the trigger value."}, {"accepts": "\"ltr\" | \"rtl\"", "fallback": "\"ltr\"", "kind": "option", "name": "dir", "refers": [], "required": false, "says": "The document's text/writing direction."}, {"accepts": "boolean", "fallback": "", "kind": "option", "name": "disabled", "refers": [], "required": false, "says": "Whether the hover card is disabled"}, {"accepts": "(() => Document | Node | ShadowRoot)", "fallback": "", "kind": "option", "name": "getRootNode", "refers": [], "required": false, "says": "A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron."}, {"accepts": "string", "fallback": "", "kind": "option", "name": "id", "refers": [], "required": false, "says": "The unique identifier of the machine."}, {"accepts": "ElementIds", "fallback": "", "kind": "option", "name": "ids", "refers": ["hover-card.ElementIds"], "required": false, "says": "The ids of the elements in the popover. Useful for composition."}, {"accepts": "boolean", "fallback": "true", "kind": "option", "name": "lazyMount", "refers": [], "required": false, "says": "When true, the overlay renders no content until it first opens."}, {"accepts": "(() => void)", "fallback": "", "kind": "option", "name": "onExitComplete", "refers": [], "required": false, "says": "Runs once the content's exit animation ends."}, {"accepts": "((event: FocusOutsideEvent) => void)", "fallback": "", "kind": "option", "name": "onFocusOutside", "refers": ["interact-outside.EventDetails", "interact-outside.FocusOutsideEvent"], "required": false, "says": "Function called when the focus is moved outside the component"}, {"accepts": "((event: InteractOutsideEvent) => void)", "fallback": "", "kind": "option", "name": "onInteractOutside", "refers": ["interact-outside.EventDetails", "interact-outside.FocusOutsideEvent", "interact-outside.InteractOutsideEvent", "interact-outside.PointerDownOutsideEvent"], "required": false, "says": "Function called when an interaction happens outside the component"}, {"accepts": "((details: OpenChangeDetails) => void)", "fallback": "", "kind": "option", "name": "onOpenChange", "refers": ["hover-card.OpenChangeDetails"], "required": false, "says": "Function called when the hover card opens or closes."}, {"accepts": "((event: PointerDownOutsideEvent) => void)", "fallback": "", "kind": "option", "name": "onPointerDownOutside", "refers": ["interact-outside.EventDetails", "interact-outside.PointerDownOutsideEvent"], "required": false, "says": "Function called when the pointer is pressed down outside the component"}, {"accepts": "((details: TriggerValueChangeDetails) => void)", "fallback": "", "kind": "option", "name": "onTriggerValueChange", "refers": ["hover-card.TriggerValueChangeDetails"], "required": false, "says": "Function called when the trigger value changes."}, {"accepts": "boolean", "fallback": "", "kind": "option", "name": "open", "refers": [], "required": false, "says": "The controlled open state of the hover card"}, {"accepts": "number", "fallback": "600", "kind": "option", "name": "openDelay", "refers": [], "required": false, "says": "The duration from when the mouse enters the trigger until the hover card opens."}, {"accepts": "PositioningOptions", "fallback": "", "kind": "option", "name": "positioning", "refers": ["core.ComputePositionReturn", "dom.AutoUpdateOptions", "dom.VirtualElement", "popper.PositioningOptions", "utils.Placement"], "required": false, "says": "The user provided options used to position the popover content"}, {"accepts": "\"lg\" | \"md\" | \"sm\" | \"xs\"", "fallback": "", "kind": "variant", "name": "size", "refers": [], "required": false, "says": "Padding of the panel on the inset scale and its text on the body role."}, {"accepts": "boolean", "fallback": "", "kind": "option", "name": "skipAnimationOnMount", "refers": [], "required": false, "says": "When true, content that is open on mount plays no entry animation."}, {"accepts": "string | null", "fallback": "", "kind": "option", "name": "triggerValue", "refers": [], "required": false, "says": "The controlled trigger value"}, {"accepts": "boolean", "fallback": "true", "kind": "option", "name": "unmountOnExit", "refers": [], "required": false, "says": "When true, the overlay removes its content once the exit animation ends."}, {"accepts": "\"elevated\" | \"glass\" | \"surface\"", "fallback": "", "kind": "variant", "name": "variant", "refers": [], "required": false, "says": "Surface of the panel: the popover surface inside a hairline edge, the panel surface with a large shadow, or the glass layer style."}], "TriggerProps": [{"accepts": "string", "fallback": "", "kind": "option", "name": "value", "refers": [], "required": false, "says": "The value the root reports as `triggerValue` while this trigger opened the card. Absent for a card with one trigger."}]};
3
+ export const shapes = {"interact-outside.EventDetails": [{"accepts": "PointerEvent", "name": "originalEvent", "says": ""}, {"accepts": "boolean", "name": "contextmenu", "says": ""}, {"accepts": "boolean", "name": "focusable", "says": ""}, {"accepts": "EventTarget", "name": "target", "says": ""}], "interact-outside.PointerDownOutsideEvent": [{"accepts": "EventDetails<PointerEvent>", "name": "detail", "says": "The read-only **`detail`** property of the CustomEvent interface returns any data passed when initializing the event."}, {"accepts": "(type: string, bubbles?: boolean, cancelable?: boolean, detail?: EventDetails<PointerEvent>) => void", "name": "initCustomEvent", "says": "The **`CustomEvent.initCustomEvent()`** method initializes a CustomEvent object. If the event has already been dispatched, this method does nothing."}, {"accepts": "boolean", "name": "bubbles", "says": "The **`bubbles`** read-only property of the Event interface indicates whether the event bubbles up through the DOM tree or not."}, {"accepts": "boolean", "name": "cancelBubble", "says": "The **`cancelBubble`** property of the Event interface is deprecated. Use Event.stopPropagation() instead. Setting its value to true before returning from an event handler prevents propagation of the event. In later implementations, setting this to false does nothing. See Browser compatibility for details."}, {"accepts": "boolean", "name": "cancelable", "says": "The **`cancelable`** read-only property of the Event interface indicates whether the event can be canceled, and therefore prevented as if the event never happened."}, {"accepts": "boolean", "name": "composed", "says": "The read-only **`composed`** property of the Event interface returns a boolean value which indicates whether or not the event will propagate across the shadow DOM boundary into the standard DOM."}, {"accepts": "EventTarget | null", "name": "currentTarget", "says": "The **`currentTarget`** read-only property of the Event interface identifies the element to which the event handler has been attached."}, {"accepts": "boolean", "name": "defaultPrevented", "says": "The **`defaultPrevented`** read-only property of the Event interface returns a boolean value indicating whether or not the call to Event.preventDefault() canceled the event."}, {"accepts": "number", "name": "eventPhase", "says": "The **`eventPhase`** read-only property of the Event interface indicates which phase of the event flow is currently being evaluated."}, {"accepts": "boolean", "name": "isTrusted", "says": "The **`isTrusted`** read-only property of the Event interface is a boolean value that is true when the event was generated by the user agent (including via user actions and programmatic methods such as HTMLElement.focus()), and false when the event was dispatched via EventTarget.dispatchEvent(). The only exception is the click event, which initializes the isTrusted property to false in user agents."}, {"accepts": "boolean", "name": "returnValue", "says": "The Event property **`returnValue`** indicates whether the default action for this event has been prevented or not."}, {"accepts": "EventTarget | null", "name": "srcElement", "says": "The deprecated **`Event.srcElement`** is an alias for the Event.target property. Use Event.target instead."}, {"accepts": "EventTarget | null", "name": "target", "says": "The read-only **`target`** property of the Event interface is a reference to the object onto which the event was dispatched. It is different from Event.currentTarget when the event handler is called during the bubbling or capturing phase of the event."}, {"accepts": "number", "name": "timeStamp", "says": "The **`timeStamp`** read-only property of the Event interface returns the time (in milliseconds) at which the event was created."}, {"accepts": "string", "name": "type", "says": "The **`type`** read-only property of the Event interface returns a string containing the event's type. It is set when the event is constructed and is the name commonly used to refer to the specific event, such as click, load, or error."}, {"accepts": "() => EventTarget[]", "name": "composedPath", "says": "The **`composedPath()`** method of the Event interface returns the event's path which is an array of the objects on which listeners will be invoked. This does not include nodes in shadow trees if the shadow root was created with its ShadowRoot.mode closed."}, {"accepts": "(type: string, bubbles?: boolean, cancelable?: boolean) => void", "name": "initEvent", "says": "The **`Event.initEvent()`** method is used to initialize the value of an event created using Document.createEvent()."}, {"accepts": "() => void", "name": "preventDefault", "says": "The **`preventDefault()`** method of the Event interface tells the user agent that the event is being explicitly handled, so its default action, such as page scrolling, link navigation, or pasting text, should not be taken."}, {"accepts": "() => void", "name": "stopImmediatePropagation", "says": "The **`stopImmediatePropagation()`** method of the Event interface prevents other listeners of the same event from being called."}, {"accepts": "() => void", "name": "stopPropagation", "says": "The **`stopPropagation()`** method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases. It does not, however, prevent any default behaviors from occurring; for instance, clicks on links are still processed. If you want to stop those behaviors, see the preventDefault() method. It also does not prevent propagation to other event-handlers of the current element. If you want to stop those, see stopImmediatePropagation()."}, {"accepts": "0", "name": "NONE", "says": ""}, {"accepts": "1", "name": "CAPTURING_PHASE", "says": ""}, {"accepts": "2", "name": "AT_TARGET", "says": ""}, {"accepts": "3", "name": "BUBBLING_PHASE", "says": ""}], "interact-outside.FocusOutsideEvent": [{"accepts": "EventDetails<FocusEvent>", "name": "detail", "says": "The read-only **`detail`** property of the CustomEvent interface returns any data passed when initializing the event."}, {"accepts": "(type: string, bubbles?: boolean, cancelable?: boolean, detail?: EventDetails<FocusEvent>) => void", "name": "initCustomEvent", "says": "The **`CustomEvent.initCustomEvent()`** method initializes a CustomEvent object. If the event has already been dispatched, this method does nothing."}, {"accepts": "boolean", "name": "bubbles", "says": "The **`bubbles`** read-only property of the Event interface indicates whether the event bubbles up through the DOM tree or not."}, {"accepts": "boolean", "name": "cancelBubble", "says": "The **`cancelBubble`** property of the Event interface is deprecated. Use Event.stopPropagation() instead. Setting its value to true before returning from an event handler prevents propagation of the event. In later implementations, setting this to false does nothing. See Browser compatibility for details."}, {"accepts": "boolean", "name": "cancelable", "says": "The **`cancelable`** read-only property of the Event interface indicates whether the event can be canceled, and therefore prevented as if the event never happened."}, {"accepts": "boolean", "name": "composed", "says": "The read-only **`composed`** property of the Event interface returns a boolean value which indicates whether or not the event will propagate across the shadow DOM boundary into the standard DOM."}, {"accepts": "EventTarget | null", "name": "currentTarget", "says": "The **`currentTarget`** read-only property of the Event interface identifies the element to which the event handler has been attached."}, {"accepts": "boolean", "name": "defaultPrevented", "says": "The **`defaultPrevented`** read-only property of the Event interface returns a boolean value indicating whether or not the call to Event.preventDefault() canceled the event."}, {"accepts": "number", "name": "eventPhase", "says": "The **`eventPhase`** read-only property of the Event interface indicates which phase of the event flow is currently being evaluated."}, {"accepts": "boolean", "name": "isTrusted", "says": "The **`isTrusted`** read-only property of the Event interface is a boolean value that is true when the event was generated by the user agent (including via user actions and programmatic methods such as HTMLElement.focus()), and false when the event was dispatched via EventTarget.dispatchEvent(). The only exception is the click event, which initializes the isTrusted property to false in user agents."}, {"accepts": "boolean", "name": "returnValue", "says": "The Event property **`returnValue`** indicates whether the default action for this event has been prevented or not."}, {"accepts": "EventTarget | null", "name": "srcElement", "says": "The deprecated **`Event.srcElement`** is an alias for the Event.target property. Use Event.target instead."}, {"accepts": "EventTarget | null", "name": "target", "says": "The read-only **`target`** property of the Event interface is a reference to the object onto which the event was dispatched. It is different from Event.currentTarget when the event handler is called during the bubbling or capturing phase of the event."}, {"accepts": "number", "name": "timeStamp", "says": "The **`timeStamp`** read-only property of the Event interface returns the time (in milliseconds) at which the event was created."}, {"accepts": "string", "name": "type", "says": "The **`type`** read-only property of the Event interface returns a string containing the event's type. It is set when the event is constructed and is the name commonly used to refer to the specific event, such as click, load, or error."}, {"accepts": "() => EventTarget[]", "name": "composedPath", "says": "The **`composedPath()`** method of the Event interface returns the event's path which is an array of the objects on which listeners will be invoked. This does not include nodes in shadow trees if the shadow root was created with its ShadowRoot.mode closed."}, {"accepts": "(type: string, bubbles?: boolean, cancelable?: boolean) => void", "name": "initEvent", "says": "The **`Event.initEvent()`** method is used to initialize the value of an event created using Document.createEvent()."}, {"accepts": "() => void", "name": "preventDefault", "says": "The **`preventDefault()`** method of the Event interface tells the user agent that the event is being explicitly handled, so its default action, such as page scrolling, link navigation, or pasting text, should not be taken."}, {"accepts": "() => void", "name": "stopImmediatePropagation", "says": "The **`stopImmediatePropagation()`** method of the Event interface prevents other listeners of the same event from being called."}, {"accepts": "() => void", "name": "stopPropagation", "says": "The **`stopPropagation()`** method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases. It does not, however, prevent any default behaviors from occurring; for instance, clicks on links are still processed. If you want to stop those behaviors, see the preventDefault() method. It also does not prevent propagation to other event-handlers of the current element. If you want to stop those, see stopImmediatePropagation()."}, {"accepts": "0", "name": "NONE", "says": ""}, {"accepts": "1", "name": "CAPTURING_PHASE", "says": ""}, {"accepts": "2", "name": "AT_TARGET", "says": ""}, {"accepts": "3", "name": "BUBBLING_PHASE", "says": ""}], "interact-outside.InteractOutsideEvent": [{"accepts": "", "name": "FocusOutsideEvent", "says": ""}, {"accepts": "", "name": "PointerDownOutsideEvent", "says": ""}], "hover-card.ElementIds": [{"accepts": "string | ((value?: string) => string)", "name": "trigger", "says": ""}, {"accepts": "string", "name": "content", "says": ""}, {"accepts": "string", "name": "positioner", "says": ""}, {"accepts": "string", "name": "arrow", "says": ""}], "hover-card.OpenChangeDetails": [{"accepts": "boolean", "name": "open", "says": ""}], "popper.PositioningOptions": [{"accepts": "boolean", "name": "restoreStyles", "says": "Whether styles applied by the positioning utility should be restored on cleanup."}, {"accepts": "boolean", "name": "applyStyles", "says": "Whether to apply computed position styles (`--x`, `--y`, `--z-index`, `z-index`) to the floating element. Set to `false` when the consumer applies these from context (e.g. for exit animations)."}, {"accepts": "boolean", "name": "hideWhenDetached", "says": "Whether the popover should be hidden when the reference element is detached"}, {"accepts": "\"absolute\" | \"fixed\"", "name": "strategy", "says": "The strategy to use for positioning"}, {"accepts": "Placement", "name": "placement", "says": "The initial placement of the floating element"}, {"accepts": "{ mainAxis?: number; crossAxis?: number; }", "name": "offset", "says": "The offset of the floating element"}, {"accepts": "number", "name": "gutter", "says": "The main axis offset or gap between the reference and floating elements"}, {"accepts": "number", "name": "shift", "says": "The secondary axis offset or gap between the reference and floating elements"}, {"accepts": "number", "name": "overflowPadding", "says": "The virtual padding around the viewport edges to check for overflow"}, {"accepts": "number", "name": "arrowPadding", "says": "The minimum padding between the arrow and the floating element's corner."}, {"accepts": "boolean | Placement[]", "name": "flip", "says": "Whether to flip the placement"}, {"accepts": "boolean", "name": "slide", "says": "Whether the popover should slide when it overflows."}, {"accepts": "boolean", "name": "overlap", "says": "Whether the floating element can overlap the reference element"}, {"accepts": "boolean", "name": "sameWidth", "says": "Whether to make the floating element same width as the reference element"}, {"accepts": "boolean", "name": "fitViewport", "says": "Whether the popover should fit the viewport."}, {"accepts": "boolean", "name": "sizeMiddleware", "says": "Whether to use the size middleware from Floating UI. It computes and sets CSS variables (`--reference-width`, `--reference-height`, `--available-width`, `--available-height`) used by `sameWidth` and `fitViewport`."}, {"accepts": "\"clipping-ancestors\" | (() => Boundary) | Boundary", "name": "boundary", "says": "The overflow boundary of the reference element Accepts a function returning a Boundary, a Boundary directly, or the shorthand string 'clipping-ancestors' which maps to Floating UI's 'clippingAncestors'."}, {"accepts": "boolean | AutoUpdateOptions", "name": "listeners", "says": "Options to activate auto-update listeners"}, {"accepts": "((data: ComputePositionReturn) => void)", "name": "onComplete", "says": "Function called when the placement is computed"}, {"accepts": "((data: { placed: boolean; }) => void)", "name": "onPositioned", "says": "Function called when the floating element is positioned or not"}, {"accepts": "(() => HTMLElement | VirtualElement | null)", "name": "getAnchorElement", "says": "Function that returns the anchor element. Useful when you want to use a different element as the anchor."}, {"accepts": "((element: HTMLElement | VirtualElement | null) => AnchorRect | null)", "name": "getAnchorRect", "says": "Function that returns the anchor rect"}, {"accepts": "((data: { updatePosition: () => Promise<void>; floatingElement: HTMLElement | null; }) => void | Promise<void>)", "name": "updatePosition", "says": "A callback that will be called when the popover needs to calculate its position."}], "utils.Placement": [{"accepts": "", "name": "\"bottom\"", "says": ""}, {"accepts": "", "name": "\"bottom-end\"", "says": ""}, {"accepts": "", "name": "\"bottom-start\"", "says": ""}, {"accepts": "", "name": "\"left\"", "says": ""}, {"accepts": "", "name": "\"left-end\"", "says": ""}, {"accepts": "", "name": "\"left-start\"", "says": ""}, {"accepts": "", "name": "\"right\"", "says": ""}, {"accepts": "", "name": "\"right-end\"", "says": ""}, {"accepts": "", "name": "\"right-start\"", "says": ""}, {"accepts": "", "name": "\"top\"", "says": ""}, {"accepts": "", "name": "\"top-end\"", "says": ""}, {"accepts": "", "name": "\"top-start\"", "says": ""}], "dom.AutoUpdateOptions": [{"accepts": "boolean", "name": "ancestorScroll", "says": "Whether to update the position when an overflow ancestor is scrolled."}, {"accepts": "boolean", "name": "ancestorResize", "says": "Whether to update the position when an overflow ancestor is resized. This\r uses the native `resize` event."}, {"accepts": "boolean", "name": "elementResize", "says": "Whether to update the position when either the reference or floating\r elements resized. This uses a `ResizeObserver`."}, {"accepts": "boolean", "name": "layoutShift", "says": "Whether to update the position when the reference relocated on the screen\r due to layout shift."}, {"accepts": "boolean", "name": "animationFrame", "says": "Whether to update on every animation frame if necessary. Only use if you\r need to update the position in response to an animation using transforms."}], "core.ComputePositionReturn": [{"accepts": "Placement", "name": "placement", "says": "The final chosen placement of the floating element."}, {"accepts": "Strategy", "name": "strategy", "says": "The strategy used to position the floating element."}, {"accepts": "MiddlewareData", "name": "middlewareData", "says": "Object containing data returned from all middleware, keyed by their name."}, {"accepts": "number", "name": "x", "says": ""}, {"accepts": "number", "name": "y", "says": ""}], "dom.VirtualElement": [{"accepts": "() => { bottom: number; height: number; left: number; right: number; top: number; width: number; x: number; y: number; }", "name": "getBoundingClientRect", "says": ""}, {"accepts": "(() => { bottom: number; height: number; left: number; right: number; top: number; width: number; x: number; y: number; }[] | DOMRectList)", "name": "getClientRects", "says": ""}, {"accepts": "Element", "name": "contextElement", "says": ""}], "hover-card.TriggerValueChangeDetails": [{"accepts": "string | null", "name": "value", "says": "The value of the trigger"}, {"accepts": "HTMLElement | null", "name": "triggerElement", "says": "The trigger element"}]};