@fusion.dev/helix-headless 0.151.0 → 0.152.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/custom-elements.json +648 -28
- package/dist/app-header/root/app-header-root.d.ts +75 -0
- package/dist/app-header/root/app-header-root.js +140 -5
- package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +11 -2
- package/dist/breadcrumbs/breadcrumb/breadcrumb.js +11 -2
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +14 -2
- package/dist/breadcrumbs/root/breadcrumbs-root.js +16 -3
- package/dist/dialog/description.d.ts +10 -0
- package/dist/dialog/description.js +22 -8
- package/dist/dialog/root/dialog-root.d.ts +17 -1
- package/dist/dialog/root/dialog-root.js +2 -2
- package/dist/drawer/root/drawer-root.d.ts +38 -2
- package/dist/drawer/root/drawer-root.js +33 -6
- package/dist/lightbox/root/lightbox-root.d.ts +44 -6
- package/dist/lightbox/root/lightbox-root.js +59 -11
- package/dist/lightbox/zoom-controller.d.ts +5 -0
- package/dist/lightbox/zoom-controller.js +8 -0
- package/dist/menu/root/menu-root.js +2 -0
- package/dist/navigation/root/navigation-root.d.ts +11 -1
- package/dist/navigation/root/navigation-root.js +10 -5
- package/dist/notifications/root/notifications-root.d.ts +17 -0
- package/dist/notifications/root/notifications-root.js +21 -1
- package/dist/popover/root/popover-root.d.ts +18 -7
- package/dist/popover/root/popover-root.js +8 -1
- package/dist/splitter/root/splitter-root.d.ts +41 -0
- package/dist/splitter/root/splitter-root.js +77 -0
- package/dist/tabs/root/tabs-root.d.ts +25 -0
- package/dist/tabs/root/tabs-root.js +28 -1
- package/dist/tour/naming.d.ts +9 -3
- package/dist/tour/naming.js +9 -3
- package/dist/tour/root/tour-root.d.ts +29 -5
- package/dist/tour/root/tour-root.js +13 -1
- package/dist/tour/stop/tour-stop.d.ts +2 -1
- package/dist/tour/stop/tour-stop.js +4 -1
- package/dist/tree/root/tree-root.d.ts +13 -0
- package/dist/tree/root/tree-root.js +42 -2
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +450 -30
- package/types/vue.d.ts +53 -16
- package/types/words.d.ts +8 -0
package/custom-elements.json
CHANGED
|
@@ -2299,7 +2299,7 @@
|
|
|
2299
2299
|
"declarations": [
|
|
2300
2300
|
{
|
|
2301
2301
|
"kind": "class",
|
|
2302
|
-
"description": "Tracks whether the page has scrolled and sets the custom state `scrolled`, so\nthe styled tier can lift the bar without a scroll handler of its own. The\nstate is read when the element connects. A fresh load starts at the top,\nwhich matches the server markup, and a reload partway down the page is\ncorrected on hydration.\n\nThe element uses a custom state because an attribute such as `data-scrolled`,\nwritten onto its own host, is one the server did not send. A hydrating\nframework would report a mismatch whenever the page reloads far enough down.\n`ElementInternals.states` is not in the DOM, so hydration has nothing to\ncompare. Select the state with `:state(scrolled)`.\n\nThe page is the window unless `scroller` names the element that scrolls, for\nan app shell whose content scrolls inside a container.\n\nThe host is the page's `banner` landmark. Placed inside `main`, `article`,\n`aside`, `nav` or `section`, it is a plain box instead, as a native\n`<header>` is there, so a header inside a card or a pane does not add a\nsecond banner. The ancestors are read as the accessibility tree reads them,\nthrough the slots that take the header in, so one slotted into a component\nthat draws a `<nav>`, such as `Navigation`, is not a banner either. A server\ncannot see the ancestors, so it serves the banner and the browser corrects\nit when the element connects.",
|
|
2302
|
+
"description": "Tracks whether the page has scrolled and sets the custom state `scrolled`, so\nthe styled tier can lift the bar without a scroll handler of its own. The\nstate is read when the element connects. A fresh load starts at the top,\nwhich matches the server markup, and a reload partway down the page is\ncorrected on hydration.\n\nThe element uses a custom state because an attribute such as `data-scrolled`,\nwritten onto its own host, is one the server did not send. A hydrating\nframework would report a mismatch whenever the page reloads far enough down.\n`ElementInternals.states` is not in the DOM, so hydration has nothing to\ncompare. Select the state with `:state(scrolled)`.\n\nThe page is the window unless `scroller` names the element that scrolls, for\nan app shell whose content scrolls inside a container.\n\n**Set `hide-on-scroll` for a bar that moves out of the way.** Scrolling down\npast the bar's own height hides it, and scrolling up shows it again, as does\nfocus moving into it. The custom state `hidden` is on the host while it is\nhidden, and the styled tier slides a `sticky` bar up out of view.\n\n**Set `fold-below` to fold the middle region on a narrow screen.** Below that\nmany pixels of the bar's own width, the middle region is hidden behind a\ntoggle at the end of the bar, named by `menu-label`. The toggle says whether\nthe region is open with `aria-expanded`, and the region opens below the row.\nEscape closes it and puts focus back on the toggle. The custom state\n`folded` is on the host while the bar is that narrow, and `open` while the\nfolded region is open. A server serves the bar unfolded, and the browser\nfolds it once it has measured it.\n\nThe host is the page's `banner` landmark. Placed inside `main`, `article`,\n`aside`, `nav` or `section`, it is a plain box instead, as a native\n`<header>` is there, so a header inside a card or a pane does not add a\nsecond banner. The ancestors are read as the accessibility tree reads them,\nthrough the slots that take the header in, so one slotted into a component\nthat draws a `<nav>`, such as `Navigation`, is not a banner either. A server\ncannot see the ancestors, so it serves the banner and the browser corrects\nit when the element connects.",
|
|
2303
2303
|
"name": "HelixHeadlessAppHeader",
|
|
2304
2304
|
"cssParts": [
|
|
2305
2305
|
{
|
|
@@ -2317,6 +2317,14 @@
|
|
|
2317
2317
|
{
|
|
2318
2318
|
"description": "The leading region.",
|
|
2319
2319
|
"name": "start"
|
|
2320
|
+
},
|
|
2321
|
+
{
|
|
2322
|
+
"description": "The control that opens and closes the folded middle region, drawn while the bar is narrower than `fold-below`.",
|
|
2323
|
+
"name": "toggle"
|
|
2324
|
+
},
|
|
2325
|
+
{
|
|
2326
|
+
"description": "The glyph on the toggle, where none is slotted.",
|
|
2327
|
+
"name": "toggle-mark"
|
|
2320
2328
|
}
|
|
2321
2329
|
],
|
|
2322
2330
|
"slots": [
|
|
@@ -2328,12 +2336,26 @@
|
|
|
2328
2336
|
"description": "Trailing content.",
|
|
2329
2337
|
"name": "end"
|
|
2330
2338
|
},
|
|
2339
|
+
{
|
|
2340
|
+
"description": "Replaces the glyph inside the toggle that opens a folded middle region.",
|
|
2341
|
+
"name": "menu-icon"
|
|
2342
|
+
},
|
|
2331
2343
|
{
|
|
2332
2344
|
"description": "Leading content, usually a wordmark.",
|
|
2333
2345
|
"name": "start"
|
|
2334
2346
|
}
|
|
2335
2347
|
],
|
|
2336
2348
|
"members": [
|
|
2349
|
+
{
|
|
2350
|
+
"kind": "field",
|
|
2351
|
+
"name": "words",
|
|
2352
|
+
"type": {
|
|
2353
|
+
"text": "string"
|
|
2354
|
+
},
|
|
2355
|
+
"static": true,
|
|
2356
|
+
"default": "'helix-app-header'",
|
|
2357
|
+
"description": "The key this family's words are registered under, its styled tag:\n`registerWords('de', { 'helix-app-header': { menuLabel: 'Menü' } })`."
|
|
2358
|
+
},
|
|
2337
2359
|
{
|
|
2338
2360
|
"kind": "field",
|
|
2339
2361
|
"name": "contentAlign",
|
|
@@ -2344,6 +2366,176 @@
|
|
|
2344
2366
|
"attribute": "content-align",
|
|
2345
2367
|
"reflects": true
|
|
2346
2368
|
},
|
|
2369
|
+
{
|
|
2370
|
+
"kind": "field",
|
|
2371
|
+
"name": "foldBelow",
|
|
2372
|
+
"type": {
|
|
2373
|
+
"text": "number | undefined"
|
|
2374
|
+
},
|
|
2375
|
+
"description": "The width of the bar, in pixels, below which the middle region folds behind\na toggle. Unset, it never folds.",
|
|
2376
|
+
"attribute": "fold-below"
|
|
2377
|
+
},
|
|
2378
|
+
{
|
|
2379
|
+
"kind": "field",
|
|
2380
|
+
"name": "hideOnScroll",
|
|
2381
|
+
"type": {
|
|
2382
|
+
"text": "boolean"
|
|
2383
|
+
},
|
|
2384
|
+
"default": "false",
|
|
2385
|
+
"description": "Hides the bar as the page scrolls down past it, and shows it again as the\npage scrolls up.",
|
|
2386
|
+
"attribute": "hide-on-scroll"
|
|
2387
|
+
},
|
|
2388
|
+
{
|
|
2389
|
+
"kind": "field",
|
|
2390
|
+
"name": "folded",
|
|
2391
|
+
"type": {
|
|
2392
|
+
"text": "boolean"
|
|
2393
|
+
},
|
|
2394
|
+
"privacy": "private",
|
|
2395
|
+
"default": "false",
|
|
2396
|
+
"description": "Whether the bar is narrower than `fold-below`, which only the observer sets."
|
|
2397
|
+
},
|
|
2398
|
+
{
|
|
2399
|
+
"kind": "field",
|
|
2400
|
+
"name": "unfolded",
|
|
2401
|
+
"type": {
|
|
2402
|
+
"text": "boolean"
|
|
2403
|
+
},
|
|
2404
|
+
"privacy": "private",
|
|
2405
|
+
"default": "false",
|
|
2406
|
+
"description": "Whether the folded middle region is open."
|
|
2407
|
+
},
|
|
2408
|
+
{
|
|
2409
|
+
"kind": "field",
|
|
2410
|
+
"name": "widths",
|
|
2411
|
+
"type": {
|
|
2412
|
+
"text": "ResizeObserver | undefined"
|
|
2413
|
+
},
|
|
2414
|
+
"privacy": "private",
|
|
2415
|
+
"description": "Watches the bar's own width while `fold-below` is set."
|
|
2416
|
+
},
|
|
2417
|
+
{
|
|
2418
|
+
"kind": "method",
|
|
2419
|
+
"name": "watchWidth",
|
|
2420
|
+
"privacy": "private",
|
|
2421
|
+
"return": {
|
|
2422
|
+
"type": {
|
|
2423
|
+
"text": "void"
|
|
2424
|
+
}
|
|
2425
|
+
},
|
|
2426
|
+
"description": "Starts or stops watching the width, according to `fold-below`."
|
|
2427
|
+
},
|
|
2428
|
+
{
|
|
2429
|
+
"kind": "method",
|
|
2430
|
+
"name": "fold",
|
|
2431
|
+
"privacy": "private",
|
|
2432
|
+
"return": {
|
|
2433
|
+
"type": {
|
|
2434
|
+
"text": "void"
|
|
2435
|
+
}
|
|
2436
|
+
},
|
|
2437
|
+
"parameters": [
|
|
2438
|
+
{
|
|
2439
|
+
"name": "width",
|
|
2440
|
+
"type": {
|
|
2441
|
+
"text": "number"
|
|
2442
|
+
}
|
|
2443
|
+
}
|
|
2444
|
+
],
|
|
2445
|
+
"description": "Folds the middle region where the bar is narrower than `fold-below`."
|
|
2446
|
+
},
|
|
2447
|
+
{
|
|
2448
|
+
"kind": "field",
|
|
2449
|
+
"name": "handleToggle",
|
|
2450
|
+
"privacy": "private",
|
|
2451
|
+
"readonly": true,
|
|
2452
|
+
"description": "Opens or closes the folded middle region."
|
|
2453
|
+
},
|
|
2454
|
+
{
|
|
2455
|
+
"kind": "field",
|
|
2456
|
+
"name": "handleKeydown",
|
|
2457
|
+
"privacy": "private",
|
|
2458
|
+
"readonly": true,
|
|
2459
|
+
"description": "Escape in the open region closes it and puts focus back on the toggle."
|
|
2460
|
+
},
|
|
2461
|
+
{
|
|
2462
|
+
"kind": "field",
|
|
2463
|
+
"name": "away",
|
|
2464
|
+
"type": {
|
|
2465
|
+
"text": "boolean"
|
|
2466
|
+
},
|
|
2467
|
+
"privacy": "private",
|
|
2468
|
+
"default": "false",
|
|
2469
|
+
"description": "Whether the bar is out of the way, under `hide-on-scroll`."
|
|
2470
|
+
},
|
|
2471
|
+
{
|
|
2472
|
+
"kind": "field",
|
|
2473
|
+
"name": "lastY",
|
|
2474
|
+
"type": {
|
|
2475
|
+
"text": "number"
|
|
2476
|
+
},
|
|
2477
|
+
"privacy": "private",
|
|
2478
|
+
"default": "0",
|
|
2479
|
+
"description": "Where the page was last scrolled to, to tell down from up."
|
|
2480
|
+
},
|
|
2481
|
+
{
|
|
2482
|
+
"kind": "field",
|
|
2483
|
+
"name": "handleFocusIn",
|
|
2484
|
+
"privacy": "private",
|
|
2485
|
+
"readonly": true,
|
|
2486
|
+
"description": "Shows a hidden bar again when focus moves into it."
|
|
2487
|
+
},
|
|
2488
|
+
{
|
|
2489
|
+
"kind": "method",
|
|
2490
|
+
"name": "hide",
|
|
2491
|
+
"privacy": "private",
|
|
2492
|
+
"return": {
|
|
2493
|
+
"type": {
|
|
2494
|
+
"text": "void"
|
|
2495
|
+
}
|
|
2496
|
+
},
|
|
2497
|
+
"parameters": [
|
|
2498
|
+
{
|
|
2499
|
+
"name": "away",
|
|
2500
|
+
"type": {
|
|
2501
|
+
"text": "boolean"
|
|
2502
|
+
}
|
|
2503
|
+
}
|
|
2504
|
+
],
|
|
2505
|
+
"description": "Hides the bar or shows it again, under `hide-on-scroll`."
|
|
2506
|
+
},
|
|
2507
|
+
{
|
|
2508
|
+
"kind": "method",
|
|
2509
|
+
"name": "follow",
|
|
2510
|
+
"privacy": "private",
|
|
2511
|
+
"return": {
|
|
2512
|
+
"type": {
|
|
2513
|
+
"text": "void"
|
|
2514
|
+
}
|
|
2515
|
+
},
|
|
2516
|
+
"parameters": [
|
|
2517
|
+
{
|
|
2518
|
+
"name": "y",
|
|
2519
|
+
"type": {
|
|
2520
|
+
"text": "number"
|
|
2521
|
+
}
|
|
2522
|
+
}
|
|
2523
|
+
],
|
|
2524
|
+
"description": "Hides the bar on a scroll down past its own height, and shows it on a\nscroll up. A few pixels either way are not a direction, so a bar does not\nflicker under a hand resting on a trackpad. Not while focus is in the bar\nor its folded region is open, which a reader is using."
|
|
2525
|
+
},
|
|
2526
|
+
{
|
|
2527
|
+
"kind": "field",
|
|
2528
|
+
"name": "menuLabel",
|
|
2529
|
+
"type": {
|
|
2530
|
+
"text": "string"
|
|
2531
|
+
},
|
|
2532
|
+
"default": "'Menu'",
|
|
2533
|
+
"description": "The name of the toggle that opens a folded middle region.",
|
|
2534
|
+
"attribute": "menu-label",
|
|
2535
|
+
"helix": {
|
|
2536
|
+
"words": true
|
|
2537
|
+
}
|
|
2538
|
+
},
|
|
2347
2539
|
{
|
|
2348
2540
|
"kind": "field",
|
|
2349
2541
|
"name": "scroller",
|
|
@@ -2420,6 +2612,26 @@
|
|
|
2420
2612
|
},
|
|
2421
2613
|
"description": "Whether this header is the page's banner, read from where it sits."
|
|
2422
2614
|
},
|
|
2615
|
+
{
|
|
2616
|
+
"kind": "field",
|
|
2617
|
+
"name": "watchedFor",
|
|
2618
|
+
"type": {
|
|
2619
|
+
"text": "number | undefined"
|
|
2620
|
+
},
|
|
2621
|
+
"privacy": "private",
|
|
2622
|
+
"description": "The `fold-below` the width watch was started for, so a change is measured at once."
|
|
2623
|
+
},
|
|
2624
|
+
{
|
|
2625
|
+
"kind": "method",
|
|
2626
|
+
"name": "renderMenuIcon",
|
|
2627
|
+
"privacy": "protected",
|
|
2628
|
+
"return": {
|
|
2629
|
+
"type": {
|
|
2630
|
+
"text": "TemplateResult"
|
|
2631
|
+
}
|
|
2632
|
+
},
|
|
2633
|
+
"description": "The glyph on the toggle that opens a folded middle region, behind a seam:\nslot fallback, so a consumer replaces it by slotting, and a method, so a\ntier above replaces it by overriding."
|
|
2634
|
+
},
|
|
2423
2635
|
{
|
|
2424
2636
|
"kind": "field",
|
|
2425
2637
|
"name": "tier",
|
|
@@ -2779,6 +2991,32 @@
|
|
|
2779
2991
|
"description": "Where the middle region sits in the bar.\n\nCentered by default, which reads as the site's spine when the navigation is\nthe primary thing in the header rather than an afterthought beside a logo.\nCentered against the banner rather than against whatever space the brand\nleft over, so the middle of the nav is the middle of the window whatever\nthe wordmark and the actions happen to measure.\n\n`start` is the opt-out, for a header whose middle region trails the brand.\n\n**Named for the region and not for what is usually in it.** The middle slot\ntakes a search field or a breadcrumb trail as readily as a `Navigation`, so\nthe property carries the part's name, `content`.",
|
|
2780
2992
|
"fieldName": "contentAlign"
|
|
2781
2993
|
},
|
|
2994
|
+
{
|
|
2995
|
+
"name": "fold-below",
|
|
2996
|
+
"type": {
|
|
2997
|
+
"text": "number | undefined"
|
|
2998
|
+
},
|
|
2999
|
+
"description": "The width of the bar, in pixels, below which the middle region folds behind\na toggle. Unset, it never folds.",
|
|
3000
|
+
"fieldName": "foldBelow"
|
|
3001
|
+
},
|
|
3002
|
+
{
|
|
3003
|
+
"name": "hide-on-scroll",
|
|
3004
|
+
"type": {
|
|
3005
|
+
"text": "boolean"
|
|
3006
|
+
},
|
|
3007
|
+
"default": "false",
|
|
3008
|
+
"description": "Hides the bar as the page scrolls down past it, and shows it again as the\npage scrolls up.",
|
|
3009
|
+
"fieldName": "hideOnScroll"
|
|
3010
|
+
},
|
|
3011
|
+
{
|
|
3012
|
+
"name": "menu-label",
|
|
3013
|
+
"type": {
|
|
3014
|
+
"text": "string"
|
|
3015
|
+
},
|
|
3016
|
+
"default": "'Menu'",
|
|
3017
|
+
"description": "The name of the toggle that opens a folded middle region.",
|
|
3018
|
+
"fieldName": "menuLabel"
|
|
3019
|
+
},
|
|
2782
3020
|
{
|
|
2783
3021
|
"name": "scroller",
|
|
2784
3022
|
"type": {
|
|
@@ -2789,6 +3027,18 @@
|
|
|
2789
3027
|
}
|
|
2790
3028
|
],
|
|
2791
3029
|
"cssStates": [
|
|
3030
|
+
{
|
|
3031
|
+
"description": "While the bar is narrower than `fold-below`, and the middle region is behind the toggle.",
|
|
3032
|
+
"name": "folded"
|
|
3033
|
+
},
|
|
3034
|
+
{
|
|
3035
|
+
"description": "While `hide-on-scroll` has the bar out of the way, after a scroll down.",
|
|
3036
|
+
"name": "hidden"
|
|
3037
|
+
},
|
|
3038
|
+
{
|
|
3039
|
+
"description": "While the folded middle region is open.",
|
|
3040
|
+
"name": "open"
|
|
3041
|
+
},
|
|
2792
3042
|
{
|
|
2793
3043
|
"description": "While the page is scrolled down from the top, which is when the bar lifts off it.",
|
|
2794
3044
|
"name": "scrolled"
|
|
@@ -8399,7 +8649,7 @@
|
|
|
8399
8649
|
"declarations": [
|
|
8400
8650
|
{
|
|
8401
8651
|
"kind": "class",
|
|
8402
|
-
"description": "Each crumb renders its separator and sets its list-item role. It hides its\nown separator with `:host(:first-child)`, so the trail needs no index from\nthe parent.\n\nSet `href` to make the whole crumb an anchor, which works with Enter, middle\nclick, and the status bar, and before any JavaScript runs. A router cannot\nreach an anchor inside a shadow root, so intercept the click for client-side\nnavigation, as with `Tree.Item` and `List.Item`. A trail that collapses also\nreads `href` to rebuild its hidden crumbs elsewhere.\n\nWithout `href`, the crumb renders a plain `<span>` around what you slot,\nincluding your own anchor.\n\nThe current page is plain text, and `aria-current=\"page\"` on the host conveys\nthe position.",
|
|
8652
|
+
"description": "Each crumb renders its separator and sets its list-item role. It hides its\nown separator with `:host(:first-child)`, so the trail needs no index from\nthe parent.\n\nSet `href` to make the whole crumb an anchor, which works with Enter, middle\nclick, and the status bar, and before any JavaScript runs. A router cannot\nreach an anchor inside a shadow root, so intercept the click for client-side\nnavigation, as with `Tree.Item` and `List.Item`. A trail that collapses also\nreads `href` to rebuild its hidden crumbs elsewhere.\n\nWithout `href`, the crumb renders a plain `<span>` around what you slot,\nincluding your own anchor.\n\nThe current page is plain text, and `aria-current=\"page\"` on the host conveys\nthe position. In a trail where no crumb is `current`, the last one is said\nto be the current page, and keeps its link. An `aria-current` you write on\nthe host, such as `aria-current=\"location\"`, replaces the one the crumb\ngives itself.",
|
|
8403
8653
|
"name": "HelixHeadlessBreadcrumb",
|
|
8404
8654
|
"cssParts": [
|
|
8405
8655
|
{
|
|
@@ -8964,7 +9214,7 @@
|
|
|
8964
9214
|
"declarations": [
|
|
8965
9215
|
{
|
|
8966
9216
|
"kind": "class",
|
|
8967
|
-
"description": "The host is the navigation landmark, named \"Breadcrumb\" by default. An\n`aria-label` on the host names the trail instead, and so does `label`. When a\npage has more than one navigation landmark, screen reader users choose\nbetween them by name.\n\nThe `<ol>` has an explicit `role=\"list\"`, because Safari removes list\nsemantics from a list with `list-style: none`, and the trail always hides its\nmarkers.\n\nThe items are slotted directly, so they are `<ol>` children in the flat tree,\nand each item sets `role=\"listitem\"` on itself.\n\nThe trail does not measure itself, and you write its overflow in markup: put\nthe crumb that holds the folded items where the gap should appear.\n\nA trail built from data, such as a router's matched routes, takes `items`: an\narray of `{ label, href }`, drawn as crumbs in order, the last one as the\ncurrent page. Slotted crumbs follow them. Use one way or the other in a trail.\n\nWith `max-items`, a trail drawn from `items` that is longer folds its middle\ninto one crumb: the first crumb, a button, then the last `max-items` less one.\nThe button is named by `expand-label` and shows the whole trail, moving focus\nto the first crumb it brought back. A new `items` folds again. Slotted crumbs\ndo not fold; write the folded crumb where the gap should be.",
|
|
9217
|
+
"description": "The host is the navigation landmark, named \"Breadcrumb\" by default. An\n`aria-label` on the host names the trail instead, and so does `label`. When a\npage has more than one navigation landmark, screen reader users choose\nbetween them by name.\n\nThe `<ol>` has an explicit `role=\"list\"`, because Safari removes list\nsemantics from a list with `list-style: none`, and the trail always hides its\nmarkers.\n\nThe items are slotted directly, so they are `<ol>` children in the flat tree,\nand each item sets `role=\"listitem\"` on itself. Where no slotted crumb is\n`current`, the last one is said to be the current page.\n\nThe trail does not measure itself, and you write its overflow in markup: put\nthe crumb that holds the folded items where the gap should appear.\n\nA trail built from data, such as a router's matched routes, takes `items`: an\narray of `{ label, href }`, drawn as crumbs in order, the last one as the\ncurrent page. Slotted crumbs follow them. Use one way or the other in a trail.\n\nWith `max-items`, a trail drawn from `items` that is longer folds its middle\ninto one crumb: the first crumb, a button, then the last `max-items` less one.\nThe button is named by `expand-label` and shows the whole trail, moving focus\nto the first crumb it brought back. A new `items` folds again. Slotted crumbs\ndo not fold; write the folded crumb where the gap should be.\n\n**Keyboard.** Each crumb with an `href` is a link and one tab stop, and\nEnter follows it. The current page and the separators are not in the tab\norder. In a folded trail, Enter or Space on the fold's button shows the\nwhole trail and moves focus to the first crumb it brought back.",
|
|
8968
9218
|
"name": "HelixHeadlessBreadcrumbs",
|
|
8969
9219
|
"cssParts": [
|
|
8970
9220
|
{
|
|
@@ -9088,6 +9338,13 @@
|
|
|
9088
9338
|
"description": "How many crumbs drawn from `items` are folded away, or 0.",
|
|
9089
9339
|
"readonly": true
|
|
9090
9340
|
},
|
|
9341
|
+
{
|
|
9342
|
+
"kind": "field",
|
|
9343
|
+
"name": "markLast",
|
|
9344
|
+
"privacy": "private",
|
|
9345
|
+
"readonly": true,
|
|
9346
|
+
"description": "Says the last slotted crumb is the current page where none is marked\n`current`, as React Aria's trail does. Through a property the crumb does\nnot reflect, so nothing is written onto your markup."
|
|
9347
|
+
},
|
|
9091
9348
|
{
|
|
9092
9349
|
"kind": "method",
|
|
9093
9350
|
"name": "renderItems",
|
|
@@ -53802,6 +54059,31 @@
|
|
|
53802
54059
|
"kind": "javascript-module",
|
|
53803
54060
|
"path": "src/dialog/description.ts",
|
|
53804
54061
|
"declarations": [
|
|
54062
|
+
{
|
|
54063
|
+
"kind": "function",
|
|
54064
|
+
"name": "wordsAmong",
|
|
54065
|
+
"return": {
|
|
54066
|
+
"type": {
|
|
54067
|
+
"text": "Element[]"
|
|
54068
|
+
}
|
|
54069
|
+
},
|
|
54070
|
+
"parameters": [
|
|
54071
|
+
{
|
|
54072
|
+
"name": "elements",
|
|
54073
|
+
"type": {
|
|
54074
|
+
"text": "readonly Element[]"
|
|
54075
|
+
}
|
|
54076
|
+
},
|
|
54077
|
+
{
|
|
54078
|
+
"name": "skip",
|
|
54079
|
+
"default": "null",
|
|
54080
|
+
"type": {
|
|
54081
|
+
"text": "Element | null"
|
|
54082
|
+
}
|
|
54083
|
+
}
|
|
54084
|
+
],
|
|
54085
|
+
"description": "The elements at the start of a list that hold words and no control, up to the\nfirst one that is or holds a control.\n\n`skip` is an element whose words are said elsewhere, such as the heading\nthat names a panel. It is left out, and an element holding it is read for\nits other children, so a card's title names the panel and the card's text\ndescribes it."
|
|
54086
|
+
},
|
|
53805
54087
|
{
|
|
53806
54088
|
"kind": "function",
|
|
53807
54089
|
"name": "wordsIn",
|
|
@@ -53822,6 +54104,14 @@
|
|
|
53822
54104
|
}
|
|
53823
54105
|
],
|
|
53824
54106
|
"exports": [
|
|
54107
|
+
{
|
|
54108
|
+
"kind": "js",
|
|
54109
|
+
"name": "wordsAmong",
|
|
54110
|
+
"declaration": {
|
|
54111
|
+
"name": "wordsAmong",
|
|
54112
|
+
"module": "src/dialog/description.ts"
|
|
54113
|
+
}
|
|
54114
|
+
},
|
|
53825
54115
|
{
|
|
53826
54116
|
"kind": "js",
|
|
53827
54117
|
"name": "wordsIn",
|
|
@@ -53853,7 +54143,7 @@
|
|
|
53853
54143
|
"declarations": [
|
|
53854
54144
|
{
|
|
53855
54145
|
"kind": "class",
|
|
53856
|
-
"description": "Renders a native `<dialog>` opened with `showModal()`. The platform provides:\n\n- the top layer, so the dialog is above everything whatever the `z-index`\n- a backdrop\n- closing with Escape\n- an inert page behind the dialog, unreachable by pointer, keyboard, or\n virtual cursor\n\nThe dialog adds one thing to those: `Tab` from its last control goes to its\nfirst, and `Shift+Tab` from its first to its last. A native modal lets `Tab`\npast its last control out to the browser's own controls.\n\n`open` calls `showModal()`, and every way the dialog closes goes through\n`requestOpen`. A native dialog closes three ways: the property, Escape, and a\n`<form method=\"dialog\">` submit. Routing all three through `requestOpen`\nkeeps your state in step, so the dialog never closes while your state still\nsays it is open, which would leave it impossible to reopen.\n\nThe dialog's name is `label` when you set it. Otherwise it is the heading in\nthe `header` slot, or the elements an `aria-labelledby` on the host names,\nand `fallback-label` where nothing names it.\nWhile it is open, the page behind it does not scroll.\n\nThe dialog is described by the words at the start of its body: the elements\nin the default slot before the first one that is or holds a control. A\nquestion above a form describes the dialog, and the form does not. A Helix\ncomponent that draws words and no control, such as `Text`, counts as words. An\n`aria-describedby` on the host replaces it.\n\nSet `alert` for a dialog that interrupts to ask for an answer, such as a\nconfirmation before a deletion. It is an `alertdialog`, which a screen reader\nannounces with its description as it opens. Set `dismissible` to draw a\nclose control, labeled by `dismiss-label
|
|
54146
|
+
"description": "Renders a native `<dialog>` opened with `showModal()`. The platform provides:\n\n- the top layer, so the dialog is above everything whatever the `z-index`\n- a backdrop\n- closing with Escape\n- an inert page behind the dialog, unreachable by pointer, keyboard, or\n virtual cursor\n\nThe dialog adds one thing to those: `Tab` from its last control goes to its\nfirst, and `Shift+Tab` from its first to its last. A native modal lets `Tab`\npast its last control out to the browser's own controls.\n\n`open` calls `showModal()`, and every way the dialog closes goes through\n`requestOpen`. A native dialog closes three ways: the property, Escape, and a\n`<form method=\"dialog\">` submit. Routing all three through `requestOpen`\nkeeps your state in step, so the dialog never closes while your state still\nsays it is open, which would leave it impossible to reopen.\n\nThe dialog's name is `label` when you set it. Otherwise it is the heading in\nthe `header` slot, or the elements an `aria-labelledby` on the host names,\nand `fallback-label` where nothing names it.\nWhile it is open, the page behind it does not scroll.\n\nThe dialog is described by the words at the start of its body: the elements\nin the default slot before the first one that is or holds a control. A\nquestion above a form describes the dialog, and the form does not. A Helix\ncomponent that draws words and no control, such as `Text`, counts as words. An\n`aria-describedby` on the host replaces it.\n\nSet `alert` for a dialog that interrupts to ask for an answer, such as a\nconfirmation before a deletion. It is an `alertdialog`, which a screen reader\nannounces with its description as it opens. Set `dismissible` to draw a\nclose control, labeled by `dismiss-label`.\n\n**Keyboard.** Opening moves focus to the first control in the dialog.\n\n| Key | What it does |\n|---|---|\n| Tab, Shift+Tab | Moves through the controls in the dialog, from the last round to the first and from the first round to the last. |\n| Escape | Asks to close the dialog. A `helix-before-close` listener can refuse, and `persistent` or `closedby=\"none\"` keeps it open. |\n| Enter, Space | On the close control, closes the dialog. |\n\nClosing puts focus back on the element that had it before the dialog opened.",
|
|
53857
54147
|
"name": "HelixHeadlessDialog",
|
|
53858
54148
|
"cssParts": [
|
|
53859
54149
|
{
|
|
@@ -53930,7 +54220,7 @@
|
|
|
53930
54220
|
"type": {
|
|
53931
54221
|
"text": "'any' | 'closerequest' | 'none' | undefined"
|
|
53932
54222
|
},
|
|
53933
|
-
"description": "Which close requests the browser handles on its own.\n\n`<dialog closedby>`, forwarded, and safe to forward because every path it\nopens still comes back through this element: a close request fires `cancel`\nfirst, `handleCancel` prevents it, and `requestOpen` decides. So\n`closedby=\"any\"` gains light dismiss without giving up the refusal, which is\nthe property this component exists to keep.\n\nAbsent by default, which is the platform's `auto` and this library's rule\nthat a resting value is an attribute's absence.",
|
|
54223
|
+
"description": "Which close requests the browser handles on its own.\n\n`<dialog closedby>`, forwarded, and safe to forward because every path it\nopens still comes back through this element: a close request fires `cancel`\nfirst, `handleCancel` prevents it, and `requestOpen` decides. So\n`closedby=\"any\"` gains light dismiss without giving up the refusal, which is\nthe property this component exists to keep.\n\nThe press on the backdrop that this element handles itself follows it too:\n`closerequest` and `none` leave the dialog open on that press, as the\nplatform does, and `none` also keeps it open on Escape in a browser without\n`closedby`.\n\nAbsent by default, which is the platform's `auto` and this library's rule\nthat a resting value is an attribute's absence. Absent, a press on the\nbackdrop closes the dialog.",
|
|
53934
54224
|
"attribute": "closedby",
|
|
53935
54225
|
"reflects": true
|
|
53936
54226
|
},
|
|
@@ -54716,7 +55006,7 @@
|
|
|
54716
55006
|
"type": {
|
|
54717
55007
|
"text": "'any' | 'closerequest' | 'none' | undefined"
|
|
54718
55008
|
},
|
|
54719
|
-
"description": "Which close requests the browser handles on its own.\n\n`<dialog closedby>`, forwarded, and safe to forward because every path it\nopens still comes back through this element: a close request fires `cancel`\nfirst, `handleCancel` prevents it, and `requestOpen` decides. So\n`closedby=\"any\"` gains light dismiss without giving up the refusal, which is\nthe property this component exists to keep.\n\nAbsent by default, which is the platform's `auto` and this library's rule\nthat a resting value is an attribute's absence.",
|
|
55009
|
+
"description": "Which close requests the browser handles on its own.\n\n`<dialog closedby>`, forwarded, and safe to forward because every path it\nopens still comes back through this element: a close request fires `cancel`\nfirst, `handleCancel` prevents it, and `requestOpen` decides. So\n`closedby=\"any\"` gains light dismiss without giving up the refusal, which is\nthe property this component exists to keep.\n\nThe press on the backdrop that this element handles itself follows it too:\n`closerequest` and `none` leave the dialog open on that press, as the\nplatform does, and `none` also keeps it open on Escape in a browser without\n`closedby`.\n\nAbsent by default, which is the platform's `auto` and this library's rule\nthat a resting value is an attribute's absence. Absent, a press on the\nbackdrop closes the dialog.",
|
|
54720
55010
|
"fieldName": "closedBy"
|
|
54721
55011
|
},
|
|
54722
55012
|
{
|
|
@@ -56710,7 +57000,7 @@
|
|
|
56710
57000
|
"declarations": [
|
|
56711
57001
|
{
|
|
56712
57002
|
"kind": "class",
|
|
56713
|
-
"description": "Uses `MixinControllerOpen`, so `open`, `defaultOpen`, and the\n`helix-before-open` and `helix-before-close` events work the same way as on\nan accordion item.\n\nThe drawer is modal by default, which means four things:\n\n- focus is trapped inside: `Tab` from the last control goes to the first,\n and `Shift+Tab` from the first to the last, as in `Dialog`\n- Escape and a press outside close it\n- the page behind is covered\n- the page behind does not scroll\n\nA drawer with `modal=\"false\"` leaves the page usable and still closes on\nEscape, in a browser without `closedby` as well.\n\n**A touch or a pen swipes it away**, toward the edge it came from, resolved\nagainst the writing direction. A swipe past halfway, or a quick one, closes\nit through the same request as every other way out. `snap-points` lists the\nfractions of the panel a reader can leave on screen, such as `0.5 1` for a\nsheet that rests half open: it opens at the smallest, and a swipe settles at\nthe nearest. While a swipe moves the panel, the distance is written on it as\n`--drawer-swipe-x` and `--drawer-swipe-y`. `swipe=\"false\"` turns swiping off.\n\n`snap` is the snap point the panel rests at, and `:state(snapped)` is on the\nhost while that is less than the whole panel. `snapTo()` moves it to\nanother. **Focus moving to a control past the\nwindow's edge opens the panel to its largest snap point**, so a reader\nmoving through a half open sheet with `Tab` never lands on a control they\ncannot see.\n\nSet `dismissible` to draw a close control in the corner, labeled by\n`dismiss-label`, as `Dialog` draws one.\n\nThe panel's name is `label` when you set it. Otherwise it is the heading in\nthe `header` slot, or the elements an `aria-labelledby` on the host names,\nand `fallback-label` where nothing names it.\n\nContent stays mounted when the drawer is closed, so it is in the server\nmarkup and can animate. A closed `<dialog>` is already out of the tab order\nand the accessibility tree, so the drawer does not write `inert`. The `role`,\n`aria-modal`, and the scrim also come from the `<dialog>` element.\n`drawer-root.ssr.spec.ts` checks that the panel has no hand-written `inert`\nor `role`.\n\nOpen the drawer declaratively with the platform's invoker attributes:\n\n```html\n<helix-headless-button commandfor=\"nav\" command=\"--toggle\">Menu</helix-headless-button>\n<helix-headless-drawer id=\"nav\">…</helix-headless-drawer>\n```",
|
|
57003
|
+
"description": "Uses `MixinControllerOpen`, so `open`, `defaultOpen`, and the\n`helix-before-open` and `helix-before-close` events work the same way as on\nan accordion item.\n\nThe drawer is modal by default, which means four things:\n\n- focus is trapped inside: `Tab` from the last control goes to the first,\n and `Shift+Tab` from the first to the last, as in `Dialog`\n- Escape and a press outside close it\n- the page behind is covered\n- the page behind does not scroll\n\nA drawer with `modal=\"false\"` leaves the page usable and still closes on\nEscape, in a browser without `closedby` as well.\n\nSet `persistent` for a drawer that has to be answered: Escape, a press\noutside, and a swipe leave it open, and the close control and `close()`\nstill close it. `closedby=\"none\"` keeps it open on all three as well, and\n`closedby=\"closerequest\"` keeps it open on a press outside.\n\n**A touch or a pen swipes it away**, toward the edge it came from, resolved\nagainst the writing direction. A swipe past halfway, or a quick one, closes\nit through the same request as every other way out. `snap-points` lists the\nfractions of the panel a reader can leave on screen, such as `0.5 1` for a\nsheet that rests half open: it opens at the smallest, and a swipe settles at\nthe nearest. While a swipe moves the panel, the distance is written on it as\n`--drawer-swipe-x` and `--drawer-swipe-y`. `swipe=\"false\"` turns swiping off.\n\n`snap` is the snap point the panel rests at, and `:state(snapped)` is on the\nhost while that is less than the whole panel. `snapTo()` moves it to\nanother. **Focus moving to a control past the\nwindow's edge opens the panel to its largest snap point**, so a reader\nmoving through a half open sheet with `Tab` never lands on a control they\ncannot see.\n\nSet `dismissible` to draw a close control in the corner, labeled by\n`dismiss-label`, as `Dialog` draws one.\n\nThe panel's name is `label` when you set it. Otherwise it is the heading in\nthe `header` slot, or the elements an `aria-labelledby` on the host names,\nand `fallback-label` where nothing names it. A development build warns\nwhen a drawer opens with nothing but `fallback-label` to name it.\n\nThe panel is described by the words at the start of its body, as `Dialog`\nis: the elements in the default slot before the first one that is or holds\na control. An `aria-describedby` on the host replaces it.\n\n**Keyboard.** Opening moves focus to the first control in the panel.\n\n| Key | What it does |\n|---|---|\n| Tab, Shift+Tab | In a modal drawer, moves through the controls in the panel, from the last round to the first and from the first round to the last. In a drawer that is not modal, moves on to the page. |\n| Escape | Asks to close the drawer. A `helix-before-close` listener can refuse, and `persistent` or `closedby=\"none\"` keeps it open. |\n| Enter, Space | On the close control, closes the drawer. |\n\nContent stays mounted when the drawer is closed, so it is in the server\nmarkup and can animate. A closed `<dialog>` is already out of the tab order\nand the accessibility tree, so the drawer does not write `inert`. The `role`,\n`aria-modal`, and the scrim also come from the `<dialog>` element.\n`drawer-root.ssr.spec.ts` checks that the panel has no hand-written `inert`\nor `role`.\n\nOpen the drawer declaratively with the platform's invoker attributes:\n\n```html\n<helix-headless-button commandfor=\"nav\" command=\"--toggle\">Menu</helix-headless-button>\n<helix-headless-drawer id=\"nav\">…</helix-headless-drawer>\n```",
|
|
56714
57004
|
"name": "HelixHeadlessDrawer",
|
|
56715
57005
|
"cssProperties": [
|
|
56716
57006
|
{
|
|
@@ -56805,6 +57095,16 @@
|
|
|
56805
57095
|
"attribute": "dismissible",
|
|
56806
57096
|
"reflects": true
|
|
56807
57097
|
},
|
|
57098
|
+
{
|
|
57099
|
+
"kind": "field",
|
|
57100
|
+
"name": "refusesDismissal",
|
|
57101
|
+
"type": {
|
|
57102
|
+
"text": "boolean"
|
|
57103
|
+
},
|
|
57104
|
+
"privacy": "private",
|
|
57105
|
+
"description": "Whether a request to dismiss the drawer, by Escape or a swipe, is refused.",
|
|
57106
|
+
"readonly": true
|
|
57107
|
+
},
|
|
56808
57108
|
{
|
|
56809
57109
|
"kind": "field",
|
|
56810
57110
|
"name": "dismissLabel",
|
|
@@ -56841,6 +57141,16 @@
|
|
|
56841
57141
|
"description": "Accessible name for the panel. When it is empty, the heading in the\n`header` slot names the panel.",
|
|
56842
57142
|
"attribute": "label"
|
|
56843
57143
|
},
|
|
57144
|
+
{
|
|
57145
|
+
"kind": "field",
|
|
57146
|
+
"name": "modal",
|
|
57147
|
+
"type": {
|
|
57148
|
+
"text": "boolean"
|
|
57149
|
+
},
|
|
57150
|
+
"default": "true",
|
|
57151
|
+
"description": "Whether the drawer blocks the page behind it.\n\nTurning this off removes the focus trap and the scrim together, because\nthey are one decision: a panel that traps focus without covering the page\nstrands the reader, and one that covers without trapping lets them tab\nbehind the cover.\n\nNot reflected. It stays `true` by default, since a drawer that silently\nlost its focus trap because a consumer forgot a word would be worse than an\nattribute on the host, and nothing selects on it: the scrim is rendered or\nnot, rather than shown or hidden by CSS.",
|
|
57152
|
+
"attribute": "modal"
|
|
57153
|
+
},
|
|
56844
57154
|
{
|
|
56845
57155
|
"kind": "field",
|
|
56846
57156
|
"name": "aria",
|
|
@@ -56850,13 +57160,14 @@
|
|
|
56850
57160
|
},
|
|
56851
57161
|
{
|
|
56852
57162
|
"kind": "field",
|
|
56853
|
-
"name": "
|
|
57163
|
+
"name": "persistent",
|
|
56854
57164
|
"type": {
|
|
56855
57165
|
"text": "boolean"
|
|
56856
57166
|
},
|
|
56857
|
-
"default": "
|
|
56858
|
-
"description": "
|
|
56859
|
-
"attribute": "
|
|
57167
|
+
"default": "false",
|
|
57168
|
+
"description": "Stops Escape, a press outside, and a swipe from closing the drawer, for a\ndrawer that has to be answered.\n\nThe close control and `close()` still close it, as on `Dialog`: a panel\nwith no way out at all is a trap.",
|
|
57169
|
+
"attribute": "persistent",
|
|
57170
|
+
"reflects": true
|
|
56860
57171
|
},
|
|
56861
57172
|
{
|
|
56862
57173
|
"kind": "field",
|
|
@@ -57184,6 +57495,27 @@
|
|
|
57184
57495
|
},
|
|
57185
57496
|
"description": "Names the panel by its heading, where nothing else names it.\n\nAn element reference, because the heading is in the light DOM and the\n`<dialog>` is in this shadow root, which an IDREF cannot cross. `label` and\nan `aria-labelledby` on the host come first. A browser without element\nreflection keeps the fallback name."
|
|
57186
57497
|
},
|
|
57498
|
+
{
|
|
57499
|
+
"kind": "field",
|
|
57500
|
+
"name": "describedByBody",
|
|
57501
|
+
"type": {
|
|
57502
|
+
"text": "boolean"
|
|
57503
|
+
},
|
|
57504
|
+
"privacy": "private",
|
|
57505
|
+
"default": "false",
|
|
57506
|
+
"description": "Whether the body's words are what currently describe the panel."
|
|
57507
|
+
},
|
|
57508
|
+
{
|
|
57509
|
+
"kind": "method",
|
|
57510
|
+
"name": "describeByBody",
|
|
57511
|
+
"privacy": "private",
|
|
57512
|
+
"return": {
|
|
57513
|
+
"type": {
|
|
57514
|
+
"text": "void"
|
|
57515
|
+
}
|
|
57516
|
+
},
|
|
57517
|
+
"description": "Describes the panel by the words at the start of its body, where nothing\nelse describes it, as `Dialog` does. An `aria-describedby` on the host\ncomes first."
|
|
57518
|
+
},
|
|
57187
57519
|
{
|
|
57188
57520
|
"kind": "method",
|
|
57189
57521
|
"name": "renderDismissIcon",
|
|
@@ -57747,6 +58079,15 @@
|
|
|
57747
58079
|
"description": "Whether the drawer blocks the page behind it.\n\nTurning this off removes the focus trap and the scrim together, because\nthey are one decision: a panel that traps focus without covering the page\nstrands the reader, and one that covers without trapping lets them tab\nbehind the cover.\n\nNot reflected. It stays `true` by default, since a drawer that silently\nlost its focus trap because a consumer forgot a word would be worse than an\nattribute on the host, and nothing selects on it: the scrim is rendered or\nnot, rather than shown or hidden by CSS.",
|
|
57748
58080
|
"fieldName": "modal"
|
|
57749
58081
|
},
|
|
58082
|
+
{
|
|
58083
|
+
"name": "persistent",
|
|
58084
|
+
"type": {
|
|
58085
|
+
"text": "boolean"
|
|
58086
|
+
},
|
|
58087
|
+
"default": "false",
|
|
58088
|
+
"description": "Stops Escape, a press outside, and a swipe from closing the drawer, for a\ndrawer that has to be answered.\n\nThe close control and `close()` still close it, as on `Dialog`: a panel\nwith no way out at all is a trap.",
|
|
58089
|
+
"fieldName": "persistent"
|
|
58090
|
+
},
|
|
57750
58091
|
{
|
|
57751
58092
|
"name": "placement",
|
|
57752
58093
|
"type": {
|
|
@@ -82633,7 +82974,7 @@
|
|
|
82633
82974
|
"declarations": [
|
|
82634
82975
|
{
|
|
82635
82976
|
"kind": "class",
|
|
82636
|
-
"description": "The frame around content you open, such as a picture, a video frame, or a\nchart. The lightbox draws no content of its own. It provides the frame, the\nkeyboard behavior, and text that states the current position in the set.\n\nThe modal behavior comes from a native `<dialog>` opened with `showModal()`,\nwhich provides the top layer, a backdrop, Escape to close, and `inert` on the\nrest of the document. Every way of closing goes through `requestOpen`, as in\n`Dialog` and `Drawer`.\n\nA lightbox shows one item at a time and has no scrolling track, so `active`\nholds the current item, as in `Tabs`. The arrow keys change the item while\nfocus stays in the dialog.\n\nSet `controls` for the viewer's own previous, next and close controls, named\nby `previous-label`, `next-label` and `dismiss-label`, whose glyphs you can\nreplace in the `previous-icon`, `next-icon` and `dismiss-icon` slots. Without\nit, compose the chrome yourself in the `header` and `footer` slots, with\nbuttons that send `--previous`, `--next` and `--close`.\n\n**Set `max-zoom` to let a reader zoom into the shown item**, such as `3`.\nTwo fingers pinch it, a double click or a double tap zooms all the way in\nabout the point pressed and back out, and once zoomed one pointer drags it\nabout. `+` and `-` zoom in and out from the keyboard, and `0` puts it back.\nThe scale and the offset are on the `viewport` part as `--lightbox-zoom`,\n`--lightbox-pan-x` and `--lightbox-pan-y`, written only while zoomed, and a\nswipe moves to the next item only while the item is at its own size. With\n`controls`, the viewer also draws zoom-out and zoom-in controls, for a\npointer with no wheel and no second finger. Once a reader stops zooming, the\nlive region says the new scale in the words of `zoom-status-label`, such as\n\"Zoomed to 150%\".\n\nEach item is a slide: a `group` with the role description in\n`slide-role-label`, named by its `label` or by `slide-label`. A touch or a pen\nswiped across the picture shows the next or the previous item, the way the\nline of text runs.\n\nThe chrome hides when there is no input, through `IdleController`, and comes\nback on a pointer move, a key press, or a focus. It stays while focus is on a\ncontrol in the header or the footer, so a keyboard reader is never left on\na control that has gone. `fullscreen` uses `FullscreenController`, as `Video`\ndoes. While the viewer is open, the page behind it does not scroll.",
|
|
82977
|
+
"description": "The frame around content you open, such as a picture, a video frame, or a\nchart. The lightbox draws no content of its own. It provides the frame, the\nkeyboard behavior, and text that states the current position in the set.\n\nThe modal behavior comes from a native `<dialog>` opened with `showModal()`,\nwhich provides the top layer, a backdrop, Escape to close, and `inert` on the\nrest of the document. Every way of closing goes through `requestOpen`, as in\n`Dialog` and `Drawer`.\n\nA lightbox shows one item at a time and has no scrolling track, so `active`\nholds the current item, as in `Tabs`. The arrow keys change the item while\nfocus stays in the dialog.\n\nSet `controls` for the viewer's own previous, next and close controls, named\nby `previous-label`, `next-label` and `dismiss-label`, whose glyphs you can\nreplace in the `previous-icon`, `next-icon` and `dismiss-icon` slots. Without\nit, compose the chrome yourself in the `header` and `footer` slots, with\nbuttons that send `--previous`, `--next` and `--close`.\n\n**Set `max-zoom` to let a reader zoom into the shown item**, such as `3`.\nTwo fingers pinch it, a double click or a double tap zooms all the way in\nabout the point pressed and back out, and once zoomed one pointer drags it\nabout. `+` and `-` zoom in and out from the keyboard, and `0` puts it back.\nThe scale and the offset are on the `viewport` part as `--lightbox-zoom`,\n`--lightbox-pan-x` and `--lightbox-pan-y`, written only while zoomed, and a\nswipe moves to the next item only while the item is at its own size. With\n`controls`, the viewer also draws zoom-out and zoom-in controls, for a\npointer with no wheel and no second finger. Once a reader stops zooming, the\nlive region says the new scale in the words of `zoom-status-label`, such as\n\"Zoomed to 150%\".\n\nEach item is a slide: a `group` with the role description in\n`slide-role-label`, named by its `label` or by `slide-label`. A touch or a pen\nswiped across the picture shows the next or the previous item, the way the\nline of text runs.\n\nA press on the empty area around the item closes the viewer, as a press on\nthe backdrop does. Under `max-zoom`, a press beside the item zooms on a\ndouble press and closes nothing, and only the space outside the viewport\ncloses the viewer. A press that dragged closes nothing.\n\n**Keyboard.** Opening moves focus to the viewer itself, which a screen\nreader names.\n\n| Key | What it does |\n|---|---|\n| Right, Down | Shows the next item. On a right-to-left page, Left does. While the item is zoomed, the arrows move about it instead. |\n| Left, Up | Shows the previous item. |\n| Home, End | Shows the first or the last item. |\n| `+`, `-`, `0` | Zooms in, zooms out, and puts the item back at its own size, where `max-zoom` allows zooming. |\n| Tab, Shift+Tab | Moves through the controls in the viewer, from the last round to the first and from the first round to the last. |\n| Escape | Closes the viewer. A `helix-before-close` listener can refuse. |\n\nA development build warns when a viewer opens with no `label`.\n\nThe chrome hides when there is no input, through `IdleController`, and comes\nback on a pointer move, a key press, or a focus. It stays while focus is on a\ncontrol in the header or the footer, so a keyboard reader is never left on\na control that has gone. `fullscreen` uses `FullscreenController`, as `Video`\ndoes. While the viewer is open, the page behind it does not scroll.",
|
|
82637
82978
|
"name": "HelixHeadlessLightbox",
|
|
82638
82979
|
"cssProperties": [
|
|
82639
82980
|
{
|
|
@@ -83017,6 +83358,13 @@
|
|
|
83017
83358
|
"readonly": true,
|
|
83018
83359
|
"default": "new SwipeController(this, { axis: () => (this.open && !this.zoomer.engaged ? 'x' : undefined), end: (dx, _dy, vx) => { /* Two fingers came down while it was under way: a pinch, not a swipe. */ if (this.zoomer.pinched) { return } const width = this.partNamed('viewport')?.getBoundingClientRect().width ?? 0 const step = swipeStep(dx, vx, width, isRtl(this)) if (step !== 0) { this.step(step) } }, move: () => this.idle.stir(), start: (_target, event) => event.pointerType !== 'mouse', surface: () => this.dialog, })"
|
|
83019
83360
|
},
|
|
83361
|
+
{
|
|
83362
|
+
"kind": "field",
|
|
83363
|
+
"name": "scope",
|
|
83364
|
+
"privacy": "protected",
|
|
83365
|
+
"readonly": true,
|
|
83366
|
+
"default": "new FocusScopeController(this, { contain: () => this.open, contents: () => [ ...['header', '', 'footer'].flatMap( (name) => this.renderRoot ?.querySelector<HTMLSlotElement>(name ? `slot[name=\"${name}\"]` : 'slot:not([name])') ?.assignedElements({ flatten: true }) ?? [], ), /* And the controls the viewer draws itself. */ ...[...(this.dialog?.children ?? [])].filter((one) => one.localName === 'button'), ], surface: () => this.dialog, })"
|
|
83367
|
+
},
|
|
83020
83368
|
{
|
|
83021
83369
|
"kind": "field",
|
|
83022
83370
|
"name": "zoomer",
|
|
@@ -83257,6 +83605,25 @@
|
|
|
83257
83605
|
],
|
|
83258
83606
|
"description": "`+` and `-` zoom in and out by half again, and `0` puts the item back. Returns whether it was one."
|
|
83259
83607
|
},
|
|
83608
|
+
{
|
|
83609
|
+
"kind": "method",
|
|
83610
|
+
"name": "panKey",
|
|
83611
|
+
"privacy": "private",
|
|
83612
|
+
"return": {
|
|
83613
|
+
"type": {
|
|
83614
|
+
"text": "boolean"
|
|
83615
|
+
}
|
|
83616
|
+
},
|
|
83617
|
+
"parameters": [
|
|
83618
|
+
{
|
|
83619
|
+
"name": "key",
|
|
83620
|
+
"type": {
|
|
83621
|
+
"text": "string"
|
|
83622
|
+
}
|
|
83623
|
+
}
|
|
83624
|
+
],
|
|
83625
|
+
"description": "The arrow keys on a zoomed item, which move about it rather than to\nanother item. Returns whether it was one."
|
|
83626
|
+
},
|
|
83260
83627
|
{
|
|
83261
83628
|
"kind": "method",
|
|
83262
83629
|
"name": "zoomIn",
|
|
@@ -83310,7 +83677,60 @@
|
|
|
83310
83677
|
"name": "handleBackdrop",
|
|
83311
83678
|
"privacy": "private",
|
|
83312
83679
|
"readonly": true,
|
|
83313
|
-
"description": "A press on the backdrop
|
|
83680
|
+
"description": "A press on the backdrop or on the empty area around the item.\n\nA modal `<dialog>` attributes backdrop presses to itself, and the styled\ntier draws the viewer over the whole screen, so a press beside the item\nlands on the dialog, the viewport, or the item's own box. Any of those is\na reader done with the viewer, as a press on a dark room around a picture\nis. Not a press that dragged, which was a swipe or a pan."
|
|
83681
|
+
},
|
|
83682
|
+
{
|
|
83683
|
+
"kind": "field",
|
|
83684
|
+
"name": "pressedAt",
|
|
83685
|
+
"type": {
|
|
83686
|
+
"text": "{ x: number; y: number } | undefined"
|
|
83687
|
+
},
|
|
83688
|
+
"privacy": "private",
|
|
83689
|
+
"description": "Where the last press began, so a press that dragged closes nothing."
|
|
83690
|
+
},
|
|
83691
|
+
{
|
|
83692
|
+
"kind": "field",
|
|
83693
|
+
"name": "handlePointerDown",
|
|
83694
|
+
"privacy": "private",
|
|
83695
|
+
"readonly": true
|
|
83696
|
+
},
|
|
83697
|
+
{
|
|
83698
|
+
"kind": "method",
|
|
83699
|
+
"name": "dragged",
|
|
83700
|
+
"privacy": "private",
|
|
83701
|
+
"return": {
|
|
83702
|
+
"type": {
|
|
83703
|
+
"text": "boolean"
|
|
83704
|
+
}
|
|
83705
|
+
},
|
|
83706
|
+
"parameters": [
|
|
83707
|
+
{
|
|
83708
|
+
"name": "event",
|
|
83709
|
+
"type": {
|
|
83710
|
+
"text": "MouseEvent"
|
|
83711
|
+
}
|
|
83712
|
+
}
|
|
83713
|
+
],
|
|
83714
|
+
"description": "Whether the press moved further than a click does, as a swipe or a pan does."
|
|
83715
|
+
},
|
|
83716
|
+
{
|
|
83717
|
+
"kind": "method",
|
|
83718
|
+
"name": "onEmptyArea",
|
|
83719
|
+
"privacy": "private",
|
|
83720
|
+
"return": {
|
|
83721
|
+
"type": {
|
|
83722
|
+
"text": "boolean"
|
|
83723
|
+
}
|
|
83724
|
+
},
|
|
83725
|
+
"parameters": [
|
|
83726
|
+
{
|
|
83727
|
+
"name": "event",
|
|
83728
|
+
"type": {
|
|
83729
|
+
"text": "MouseEvent"
|
|
83730
|
+
}
|
|
83731
|
+
}
|
|
83732
|
+
],
|
|
83733
|
+
"description": "Whether a press landed on the empty area around the item: the viewer's\nown surface, the viewport, or an item's box beside what it holds. The\nlast two not where `max-zoom` lets a reader zoom, since a double press\nthere zooms."
|
|
83314
83734
|
},
|
|
83315
83735
|
{
|
|
83316
83736
|
"kind": "method",
|
|
@@ -84439,6 +84859,24 @@
|
|
|
84439
84859
|
],
|
|
84440
84860
|
"description": "Zooms to `scale` about the middle of the box, held to the range."
|
|
84441
84861
|
},
|
|
84862
|
+
{
|
|
84863
|
+
"kind": "method",
|
|
84864
|
+
"name": "panBy",
|
|
84865
|
+
"return": {
|
|
84866
|
+
"type": {
|
|
84867
|
+
"text": "boolean"
|
|
84868
|
+
}
|
|
84869
|
+
},
|
|
84870
|
+
"parameters": [
|
|
84871
|
+
{
|
|
84872
|
+
"name": "by",
|
|
84873
|
+
"type": {
|
|
84874
|
+
"text": "Offset"
|
|
84875
|
+
}
|
|
84876
|
+
}
|
|
84877
|
+
],
|
|
84878
|
+
"description": "Moves a zoomed item by `by`, in pixels, never so far that an edge comes\ninside the box. Returns whether it moved."
|
|
84879
|
+
},
|
|
84442
84880
|
{
|
|
84443
84881
|
"kind": "method",
|
|
84444
84882
|
"name": "reset",
|
|
@@ -106127,7 +106565,7 @@
|
|
|
106127
106565
|
"declarations": [
|
|
106128
106566
|
{
|
|
106129
106567
|
"kind": "class",
|
|
106130
|
-
"description": "Renders a real `<nav>`, the landmark that screen reader users jump to.\nNavigation is its own component, separate from `AppHeader`, so you can use it\nin a header, a footer, or a sidebar.\n\n**It renders no links.** Bring your own, mark the current one with\n`aria-current=\"page\"`, and style them with the `data-navigation-item` recipe.\nA router renders its own anchors and cannot render them inside the\ncomponent's shadow root.\n\nThe component moves a marker to the current item. It finds the current item\nby reading `aria-current`, so the attribute that screen readers announce also\nplaces the marker. Any value but `false` counts, so a sidebar of sections on\none page can mark the section in view with `aria-current=\"location\"`. Where\nseveral are marked, `page` wins.\n\nSet `orientation=\"vertical\"` to stack the destinations in a column, for a\nsidebar.\n\nSet `arrows` and the arrow keys move focus between the destinations, as\nRadix's navigation menu does: left and right along a row, up and down a\ncolumn, Home and End to the ends. A `Megamenu` among them is reached at its\ntrigger. Tab still stops at every link, since a navigation is a list of\nlinks and not a single control, and the keys across the other axis are\nleft to the page and to an open panel.",
|
|
106568
|
+
"description": "Renders a real `<nav>`, the landmark that screen reader users jump to.\nNavigation is its own component, separate from `AppHeader`, so you can use it\nin a header, a footer, or a sidebar.\n\n**It renders no links.** Bring your own, mark the current one with\n`aria-current=\"page\"`, and style them with the `data-navigation-item` recipe.\nA router renders its own anchors and cannot render them inside the\ncomponent's shadow root.\n\nThe component moves a marker to the current item. It finds the current item\nby reading `aria-current`, so the attribute that screen readers announce also\nplaces the marker. Any value but `false` counts, so a sidebar of sections on\none page can mark the section in view with `aria-current=\"location\"`. Where\nseveral are marked, `page` wins.\n\n**The destinations can be a list.** Slot a `<ul>` or an `<ol>` of `<li>`\nelements, each holding a link, and a screen reader says how many there are\nand where each one is, as in Radix's `NavigationMenu.List`. The marker and\nthe arrow keys work on the list items as they do on bare links. Give the\nlist `role=\"list\"` as well, since Safari drops the semantics of a list drawn\nwithout bullets.\n\nSet `orientation=\"vertical\"` to stack the destinations in a column, for a\nsidebar.\n\nSet `arrows` and the arrow keys move focus between the destinations, as\nRadix's navigation menu does: left and right along a row, up and down a\ncolumn, Home and End to the ends. A `Megamenu` among them is reached at its\ntrigger. Tab still stops at every link, since a navigation is a list of\nlinks and not a single control, and the keys across the other axis are\nleft to the page and to an open panel.",
|
|
106131
106569
|
"name": "HelixHeadlessNavigation",
|
|
106132
106570
|
"cssParts": [
|
|
106133
106571
|
{
|
|
@@ -106165,7 +106603,7 @@
|
|
|
106165
106603
|
"name": "indicator",
|
|
106166
106604
|
"privacy": "private",
|
|
106167
106605
|
"readonly": true,
|
|
106168
|
-
"default": "new IndicatorController(this, { active: () => { const items = this.items const marked = (item: HTMLElement): boolean => { const current = item
|
|
106606
|
+
"default": "new IndicatorController(this, { active: () => { const items = this.items const marked = (item: HTMLElement): boolean => { const current = markOf(item)?.getAttribute('aria-current') return current !== null && current !== undefined && current !== 'false' } return ( items.find((item) => markOf(item)?.getAttribute('aria-current') === 'page') ?? items.find(marked) ) }, indicator: () => this.partNamed('indicator'), observe: () => this.items, surface: () => this.partNamed('nav'), })"
|
|
106169
106607
|
},
|
|
106170
106608
|
{
|
|
106171
106609
|
"kind": "field",
|
|
@@ -106230,7 +106668,7 @@
|
|
|
106230
106668
|
"text": "HTMLElement[]"
|
|
106231
106669
|
},
|
|
106232
106670
|
"privacy": "private",
|
|
106233
|
-
"description": "The destinations the consumer slotted.",
|
|
106671
|
+
"description": "The destinations the consumer slotted, and the items of a slotted list in\nplace of the list.",
|
|
106234
106672
|
"readonly": true
|
|
106235
106673
|
},
|
|
106236
106674
|
{
|
|
@@ -108468,7 +108906,7 @@
|
|
|
108468
108906
|
"declarations": [
|
|
108469
108907
|
{
|
|
108470
108908
|
"kind": "class",
|
|
108471
|
-
"description": "Notifications are slotted children. Each one is your own markup, with an\navatar, a link, or a button in it. Feeds usually hold tens of items, so\nwriting them out lets an item hold anything.\n\nThe list does not virtualize. Windowing needs the list to own the data, and\nhere you own it, so N notifications are N elements. For a feed of thousands,\nuse a data table with a custom cell.\n\nRead state is reported to you. Marking read goes from the root to the item\nand from the item to you, so a canceled `helix-read` changes nothing, and if\nyou own `read`, nothing changes until you set it. `unread` is derived from\nthe items and written to an attribute, so a stylesheet and a badge can both\nuse it without counting.\n\n**The feed is one `Tab` stop for its rows.** Each row takes focus itself and\nis read by its label. `ArrowDown` and `ArrowUp` move to the next and the\nprevious row, `Home` and `End` to the first and the last, and `PageDown` and\n`PageUp` move a row on or back from anywhere inside one, as in the APG feed\npattern. The controls inside a row stay in the `Tab` order. Set `total` when\nthe feed holds one page of a longer list, and each row says its place in the\nwhole of it.\n\n**`load-more` adds a button after the list** that sends `helix-load-more`,\nfor a feed that holds one page of a longer list. Append the next page, set\n`loading` while it is on its way, and take `load-more` off once there is\nnothing more. While the feed is loading the button stays, so focus stays on\nit, and it is `aria-disabled` and sends nothing.\n\n**`load-error` says a page could not be fetched**, such as \"Could not load\nnotifications\": it shows under the rows there are, in the `error` part, in\nplace of the empty and loading lines, and a screen reader hears it. Clear it\nwhen you ask again.",
|
|
108909
|
+
"description": "Notifications are slotted children. Each one is your own markup, with an\navatar, a link, or a button in it. Feeds usually hold tens of items, so\nwriting them out lets an item hold anything.\n\nThe list does not virtualize. Windowing needs the list to own the data, and\nhere you own it, so N notifications are N elements. For a feed of thousands,\nuse a data table with a custom cell.\n\nRead state is reported to you. Marking read goes from the root to the item\nand from the item to you, so a canceled `helix-read` changes nothing, and if\nyou own `read`, nothing changes until you set it. `unread` is derived from\nthe items and written to an attribute, so a stylesheet and a badge can both\nuse it without counting.\n\n**The feed is one `Tab` stop for its rows.** Each row takes focus itself and\nis read by its label. `ArrowDown` and `ArrowUp` move to the next and the\nprevious row, `Home` and `End` to the first and the last, and `PageDown` and\n`PageUp` move a row on or back from anywhere inside one, as in the APG feed\npattern. The controls inside a row stay in the `Tab` order. Set `total` when\nthe feed holds one page of a longer list, and each row says its place in the\nwhole of it.\n\n**Keyboard.**\n\n| Key | What it does |\n|---|---|\n| Down, Up | On a row, moves to the next or the previous row. |\n| Home, End | On a row, moves to the first or the last row. |\n| Page Down, Page Up | From anywhere in a row, moves to the next or the previous row. |\n| Control+End | From anywhere in the feed, moves to the first control after it on the page. |\n| Control+Home | From anywhere in the feed, moves to the nearest control before it on the page. |\n| Tab | Moves through the controls in a row, and on out of the feed. |\n\n**`load-more` adds a button after the list** that sends `helix-load-more`,\nfor a feed that holds one page of a longer list. Append the next page, set\n`loading` while it is on its way, and take `load-more` off once there is\nnothing more. While the feed is loading the button stays, so focus stays on\nit, and it is `aria-disabled` and sends nothing.\n\n**`load-error` says a page could not be fetched**, such as \"Could not load\nnotifications\": it shows under the rows there are, in the `error` part, in\nplace of the empty and loading lines, and a screen reader hears it. Clear it\nwhen you ask again.",
|
|
108472
108910
|
"name": "HelixHeadlessNotifications",
|
|
108473
108911
|
"cssParts": [
|
|
108474
108912
|
{
|
|
@@ -108799,6 +109237,25 @@
|
|
|
108799
109237
|
"readonly": true,
|
|
108800
109238
|
"description": "Moves between rows.\n\nThe arrows and `Home` and `End` only from a row's own box, so a control in\na row keeps its keys. `PageDown` and `PageUp` from anywhere in a row, which\nis how the APG feed pattern moves on from inside an article."
|
|
108801
109239
|
},
|
|
109240
|
+
{
|
|
109241
|
+
"kind": "method",
|
|
109242
|
+
"name": "leave",
|
|
109243
|
+
"privacy": "private",
|
|
109244
|
+
"return": {
|
|
109245
|
+
"type": {
|
|
109246
|
+
"text": "void"
|
|
109247
|
+
}
|
|
109248
|
+
},
|
|
109249
|
+
"parameters": [
|
|
109250
|
+
{
|
|
109251
|
+
"name": "event",
|
|
109252
|
+
"type": {
|
|
109253
|
+
"text": "KeyboardEvent"
|
|
109254
|
+
}
|
|
109255
|
+
}
|
|
109256
|
+
],
|
|
109257
|
+
"description": "`Control+End` and `Control+Home`, which leave the feed for the first\ncontrol after it or the nearest one before it, as the APG feed pattern\ndoes. A feed of many rows is otherwise a long walk to get past."
|
|
109258
|
+
},
|
|
108802
109259
|
{
|
|
108803
109260
|
"kind": "method",
|
|
108804
109261
|
"name": "rove",
|
|
@@ -121960,7 +122417,7 @@
|
|
|
121960
122417
|
"declarations": [
|
|
121961
122418
|
{
|
|
121962
122419
|
"kind": "class",
|
|
121963
|
-
"description": "Popover is the general overlay that the specific ones build on. `Menu` holds\ncommands, `Select` holds options, and `Tooltip` holds a description. Popover\nholds any content you put in it, so it has no keyboard handling of its own.\n\nThe trigger is slotted and stays your own element. A Helix trigger is told\nwhether the popover is open inside its own shadow root. On a plain element,\nsuch as a `<button>`, the popover writes `aria-expanded
|
|
122420
|
+
"description": "Popover is the general overlay that the specific ones build on. `Menu` holds\ncommands, `Select` holds options, and `Tooltip` holds a description. Popover\nholds any content you put in it, so it has no keyboard handling of its own.\n\nThe trigger is slotted and stays your own element. A Helix trigger is told\nwhether the popover is open inside its own shadow root. On a plain element,\nsuch as a `<button>`, the popover writes `aria-expanded`, from a frame after\nits own first render, or from the first press where that comes sooner. It\nnever writes it where you wrote `aria-expanded` yourself, and writes nothing\nelse onto your markup.\n\nThe panel is in the top layer through the popover API, so it needs no\n`z-index`, and an ancestor with `overflow: hidden`, `transform`, `filter`, or\n`contain` does not clip or move it.\n\nIt opens on click and from a command. `command=\"--show\"` and the related\ncommands work as they do on `Dialog` and `Drawer`, so a button anywhere on\nthe page can open the popover with no script.\n\n**Opening moves focus into the panel**, to the first control in it, or to the\npanel itself where it holds none, and closing from inside gives it back to\nthe trigger. It closes on Escape, on a press outside it, and when focus moves\nout of the trigger and the panel to somewhere else on the page.\n\n`modal` keeps `Tab` inside the panel while it is open and says so with\n`aria-modal`, for a panel that has to be answered before the page goes on.\nThe rest of the page is hidden from screen readers with `aria-hidden` while\nit is open, so the virtual cursor stays in the panel too. Without it the\npopover does not trap focus.\n\nThe panel's name is `label` when you set it. Otherwise it is the first\nheading in the panel, or the elements an `aria-labelledby` on the host names.\nA development build warns when a popover opens with nothing but\n`fallback-label` to name it.\n\n**Keyboard.** Opening moves focus to the first control in the panel, or to\nthe panel where it holds none.\n\n| Key | What it does |\n|---|---|\n| Enter, Space | On the trigger, opens the panel, or closes it while it is open. |\n| Escape | Closes the panel and puts focus back on the trigger. |\n| Tab, Shift+Tab | Moves through the controls in the panel. Leaving the panel and the trigger closes it. With `modal`, moves from the last control round to the first and from the first round to the last. |\n\n`arrow` draws a point on the panel's edge facing the trigger. The side the\npanel landed on is on the host as `:state(placed-top)` and its kin, and the\ntrigger's width is on the panel as `--floating-anchor-inline-size`, for a\npanel as wide as its trigger:\n\n```css\nhelix-popover::part(popover) {\n min-inline-size: var(--floating-anchor-inline-size);\n}\n```",
|
|
121964
122421
|
"name": "HelixHeadlessPopover",
|
|
121965
122422
|
"cssProperties": [
|
|
121966
122423
|
{
|
|
@@ -122273,7 +122730,7 @@
|
|
|
122273
122730
|
},
|
|
122274
122731
|
"privacy": "private",
|
|
122275
122732
|
"default": "false",
|
|
122276
|
-
"description": "Whether
|
|
122733
|
+
"description": "Whether the trigger may be told, from a frame after the first render or a reader's press."
|
|
122277
122734
|
},
|
|
122278
122735
|
{
|
|
122279
122736
|
"kind": "field",
|
|
@@ -122293,7 +122750,7 @@
|
|
|
122293
122750
|
"text": "void"
|
|
122294
122751
|
}
|
|
122295
122752
|
},
|
|
122296
|
-
"description": "Tells a slotted trigger the disclosure state.\n\nA Helix trigger by property, through `tellDisclosure`. A plain element,\nwhich has no shadow root to keep the state out of the markup, by\n`aria-expanded`,
|
|
122753
|
+
"description": "Tells a slotted trigger the disclosure state.\n\nA Helix trigger by property, through `tellDisclosure`. A plain element,\nwhich has no shadow root to keep the state out of the markup, by\n`aria-expanded`, from a frame after the first render or a reader's first\npress on, so a closed panel is said to be closed before anyone presses. One that already carries `aria-expanded` is the\nconsumer's to keep, and is left alone."
|
|
122297
122754
|
},
|
|
122298
122755
|
{
|
|
122299
122756
|
"kind": "field",
|
|
@@ -141468,7 +141925,7 @@
|
|
|
141468
141925
|
"declarations": [
|
|
141469
141926
|
{
|
|
141470
141927
|
"kind": "class",
|
|
141471
|
-
"description": "A splitter has one axis. Nest splitters to get two axes and three-pane or\nfour-pane layouts.\n\nWhen a splitter is slotted into a pane of another at a right angle, a corner\nhandle appears where the dividers cross. It shows the `move` cursor, responds\nto both arrow axes, and a drag moves both dividers at once. The corner is\nadded at `firstUpdated` and is not in the server markup. Before it appears,\nboth dividers work on their own.\n\nThe divider has `role=\"separator\"` and `aria-valuenow`, with\n`aria-valuetext` saying the start pane's share as a percentage in the\nnearest `lang`, or in the reader's locale where no `lang` is set, and `aria-controls` names the start pane. Drag it with a pointer or move it with the arrow keys,\npress `Home` or `End` to move it to its bounds, and press `Enter` to collapse\nthe start pane and open it again. A drag in progress is tracked as a state, so both dividers a\ncorner moves stay lit for as long as they move.\n\nBy default, `min` and `max` let the divider reach either edge, so you can\ndrag a pane fully closed. Set them to limit the range.\n\nA pane can be collapsed, which is a separate state from a divider at the\nedge. `collapsed` names the shut pane, `start` or `end`, and the pane opens\nback to the position where the collapsing gesture began. A drag records that position\non press, and every other way of collapsing records it in `settle`.\n`collapsed-size` keeps a sliver of the pane visible, such as a tab strip.\nCollapsing overrides `min` and `max`.",
|
|
141928
|
+
"description": "A splitter has one axis. Nest splitters to get two axes and three-pane or\nfour-pane layouts.\n\nWhen a splitter is slotted into a pane of another at a right angle, a corner\nhandle appears where the dividers cross. It shows the `move` cursor, responds\nto both arrow axes, and a drag moves both dividers at once. The corner is\nadded at `firstUpdated` and is not in the server markup. Before it appears,\nboth dividers work on their own.\n\nThe divider has `role=\"separator\"` and `aria-valuenow`, with\n`aria-valuetext` saying the start pane's share as a percentage in the\nnearest `lang`, or in the reader's locale where no `lang` is set, and `aria-controls` names the start pane. Drag it with a pointer or move it with the arrow keys,\npress `Home` or `End` to move it to its bounds, and press `Enter` to collapse\nthe start pane and open it again. A drag in progress is tracked as a state, so both dividers a\ncorner moves stay lit for as long as they move.\n\nBy default, `min` and `max` let the divider reach either edge, so you can\ndrag a pane fully closed. Set them to limit the range.\n\nA pane can be collapsed, which is a separate state from a divider at the\nedge. `collapsed` names the shut pane, `start` or `end`, and the pane opens\nback to the position where the collapsing gesture began. A drag records that position\non press, and every other way of collapsing records it in `settle`.\n`collapsed-size` keeps a sliver of the pane visible, such as a tab strip.\nCollapsing overrides `min` and `max`.\n\nSet `primary` to the pane that keeps its size when the splitter's own size\nchanges, such as a sidebar beside a window being resized. The other pane\ntakes all of the change, as Web Awesome's split panel does. Without it,\nboth panes keep their share.\n\n**Keyboard.** The divider is one tab stop.\n\n| Key | What it does |\n|---|---|\n| Left, Right | Moves a side-by-side divider by `step`. On a right-to-left page, Left moves it toward the end. |\n| Up, Down | Moves a stacked divider by `step`. |\n| Home, End | Moves the divider to its bounds. |\n| Enter | Collapses the start pane, and opens it again. |\n| F6 | Moves focus from one pane to the first control in the other, and from the divider to the start pane. |",
|
|
141472
141929
|
"name": "HelixHeadlessSplitter",
|
|
141473
141930
|
"cssProperties": [
|
|
141474
141931
|
{
|
|
@@ -141692,6 +142149,71 @@
|
|
|
141692
142149
|
"description": "Where the divider sits, as a percentage of the whole.\n\nReading gives where it is; writing declares it the consumer's, and\n`default-position` seeds one this element owns. The same accessor pair\n`Pagination.page` and the calendar's `month` carry.",
|
|
141693
142150
|
"attribute": "position"
|
|
141694
142151
|
},
|
|
142152
|
+
{
|
|
142153
|
+
"kind": "field",
|
|
142154
|
+
"name": "primary",
|
|
142155
|
+
"type": {
|
|
142156
|
+
"text": "'end' | 'start' | undefined"
|
|
142157
|
+
},
|
|
142158
|
+
"description": "The pane that keeps its size when the splitter's own size changes. The\nother pane takes all of the change. Unset, both keep their share.",
|
|
142159
|
+
"attribute": "primary"
|
|
142160
|
+
},
|
|
142161
|
+
{
|
|
142162
|
+
"kind": "field",
|
|
142163
|
+
"name": "lengths",
|
|
142164
|
+
"type": {
|
|
142165
|
+
"text": "ResizeObserver | undefined"
|
|
142166
|
+
},
|
|
142167
|
+
"privacy": "private",
|
|
142168
|
+
"description": "Watches this element's length along its axis while `primary` is set."
|
|
142169
|
+
},
|
|
142170
|
+
{
|
|
142171
|
+
"kind": "field",
|
|
142172
|
+
"name": "length",
|
|
142173
|
+
"type": {
|
|
142174
|
+
"text": "number"
|
|
142175
|
+
},
|
|
142176
|
+
"privacy": "private",
|
|
142177
|
+
"default": "0",
|
|
142178
|
+
"description": "The length along the axis last seen, in pixels."
|
|
142179
|
+
},
|
|
142180
|
+
{
|
|
142181
|
+
"kind": "method",
|
|
142182
|
+
"name": "watchLength",
|
|
142183
|
+
"privacy": "private",
|
|
142184
|
+
"return": {
|
|
142185
|
+
"type": {
|
|
142186
|
+
"text": "void"
|
|
142187
|
+
}
|
|
142188
|
+
},
|
|
142189
|
+
"description": "Starts or stops watching the length, according to `primary`, and holds\nthe primary pane's size in pixels as the length changes."
|
|
142190
|
+
},
|
|
142191
|
+
{
|
|
142192
|
+
"kind": "method",
|
|
142193
|
+
"name": "holdPrimary",
|
|
142194
|
+
"privacy": "private",
|
|
142195
|
+
"return": {
|
|
142196
|
+
"type": {
|
|
142197
|
+
"text": "void"
|
|
142198
|
+
}
|
|
142199
|
+
},
|
|
142200
|
+
"parameters": [
|
|
142201
|
+
{
|
|
142202
|
+
"name": "length",
|
|
142203
|
+
"type": {
|
|
142204
|
+
"text": "number"
|
|
142205
|
+
}
|
|
142206
|
+
}
|
|
142207
|
+
],
|
|
142208
|
+
"description": "Moves the divider so the primary pane keeps the pixels it had, as the\nsplitter's length goes from the one last seen to `length`. Not while a\npane is shut or a drag holds the divider."
|
|
142209
|
+
},
|
|
142210
|
+
{
|
|
142211
|
+
"kind": "field",
|
|
142212
|
+
"name": "handlePaneKeys",
|
|
142213
|
+
"privacy": "private",
|
|
142214
|
+
"readonly": true,
|
|
142215
|
+
"description": "F6, which moves focus between the panes, as the window splitter pattern\nallows: from the start pane to the end pane, and from the end pane or the\ndivider to the start pane. Only a pane that holds a control takes focus."
|
|
142216
|
+
},
|
|
141695
142217
|
{
|
|
141696
142218
|
"kind": "field",
|
|
141697
142219
|
"name": "snap",
|
|
@@ -142640,6 +143162,14 @@
|
|
|
142640
143162
|
"description": "Where the divider sits, as a percentage of the whole.\n\nReading gives where it is; writing declares it the consumer's, and\n`default-position` seeds one this element owns. The same accessor pair\n`Pagination.page` and the calendar's `month` carry.",
|
|
142641
143163
|
"fieldName": "position"
|
|
142642
143164
|
},
|
|
143165
|
+
{
|
|
143166
|
+
"name": "primary",
|
|
143167
|
+
"type": {
|
|
143168
|
+
"text": "'end' | 'start' | undefined"
|
|
143169
|
+
},
|
|
143170
|
+
"description": "The pane that keeps its size when the splitter's own size changes. The\nother pane takes all of the change. Unset, both keep their share.",
|
|
143171
|
+
"fieldName": "primary"
|
|
143172
|
+
},
|
|
142643
143173
|
{
|
|
142644
143174
|
"name": "snap",
|
|
142645
143175
|
"type": {
|
|
@@ -151940,7 +152470,7 @@
|
|
|
151940
152470
|
"declarations": [
|
|
151941
152471
|
{
|
|
151942
152472
|
"kind": "class",
|
|
151943
|
-
"description": "Selection works through an event, the same as in the accordion and the tree.\nA tab dispatches `helix-select`, and the root pairs it with the panel of the\nsame value. Nothing registers with anything, so tabs added later work with no\nextra setup.\n\nThe tab list is a single tab stop, and the arrow keys move between tabs\nthrough `KeyboardNavigationController`, the same as in the radio and toggle\ngroups. Selection follows focus, which suits a small set where showing a\npanel is cheap. Set `manual` when showing a panel is expensive, so focus can\nmove without selecting.\n\n`orientation=\"vertical\"` sets the tabs in a column beside the panels, and the\ntab list says `aria-orientation=\"vertical\"`. The arrow keys of both axes move\nbetween tabs either way.\n\nA tab with an `href` is a link, for tabs that are pages of a site. Pressing\nit follows the link. Where any tab is a link, the arrow keys move focus\nwithout choosing on every tab of the list, as under `manual`, so arrowing\npast a tab never leaves the page and the list answers the keys one way.\nMark the tab of the page you are on with `selected`, or set `active` to its\nvalue.\n\nEach tab says which panel it controls through `aria-controls`, set as an\nelement reference to the panel's host, where the engine has reflection.\n\nKeys, on the tab list: Left and Right Arrow move between tabs, and so do Up\nand Down; Home and End go to the first and the last. The horizontal arrows\nfollow the reading direction, so on a right-to-left page Left moves on.\nDisabled tabs are passed over. Tab leaves the list for the selected panel,\nwhich is a tab stop only while it holds nothing focusable.\n\nThe `indicator` part moves to the selected tab and carries its place and\nsize, so a mark of your own can be drawn there: style the part, or slot an\nelement into `indicator`, which sits inside the part and reads the same\nproperties.",
|
|
152473
|
+
"description": "Selection works through an event, the same as in the accordion and the tree.\nA tab dispatches `helix-select`, and the root pairs it with the panel of the\nsame value. Nothing registers with anything, so tabs added later work with no\nextra setup.\n\nThe tab list is a single tab stop, and the arrow keys move between tabs\nthrough `KeyboardNavigationController`, the same as in the radio and toggle\ngroups. Selection follows focus, which suits a small set where showing a\npanel is cheap. Set `manual` when showing a panel is expensive, so focus can\nmove without selecting.\n\n`orientation=\"vertical\"` sets the tabs in a column beside the panels, and the\ntab list says `aria-orientation=\"vertical\"`. The arrow keys of both axes move\nbetween tabs either way.\n\nA tab with an `href` is a link, for tabs that are pages of a site. Pressing\nit follows the link. Where any tab is a link, the arrow keys move focus\nwithout choosing on every tab of the list, as under `manual`, so arrowing\npast a tab never leaves the page and the list answers the keys one way.\nMark the tab of the page you are on with `selected`, or set `active` to its\nvalue.\n\nEach tab says which panel it controls through `aria-controls`, set as an\nelement reference to the panel's host, where the engine has reflection.\n\nKeys, on the tab list: Left and Right Arrow move between tabs, and so do Up\nand Down; Home and End go to the first and the last. The horizontal arrows\nfollow the reading direction, so on a right-to-left page Left moves on.\nDisabled tabs are passed over. Tab leaves the list for the selected panel,\nwhich is a tab stop only while it holds nothing focusable.\n\n**Keyboard.**\n\n| Key | What it does |\n|---|---|\n| Right, Down | Moves to the next tab, from the last round to the first. Selects it, unless `manual` is set or a tab is a link. |\n| Left, Up | Moves to the tab before, from the first round to the last. |\n| Home, End | Moves to the first or the last tab. |\n| Enter, Space | Selects the tab with focus, or follows its link. |\n| Tab | Leaves the list for the selected panel. |\n\nRemoving the selected tab selects the first enabled tab that is left, and\n`active` says so, with `helix-activate`. Where the removed tab had focus,\nfocus moves to the tab now selected.\n\nThe `indicator` part moves to the selected tab and carries its place and\nsize, so a mark of your own can be drawn there: style the part, or slot an\nelement into `indicator`, which sits inside the part and reads the same\nproperties.",
|
|
151944
152474
|
"name": "HelixHeadlessTabs",
|
|
151945
152475
|
"cssParts": [
|
|
151946
152476
|
{
|
|
@@ -152081,6 +152611,16 @@
|
|
|
152081
152611
|
"privacy": "private",
|
|
152082
152612
|
"readonly": true
|
|
152083
152613
|
},
|
|
152614
|
+
{
|
|
152615
|
+
"kind": "field",
|
|
152616
|
+
"name": "held",
|
|
152617
|
+
"type": {
|
|
152618
|
+
"text": "string[]"
|
|
152619
|
+
},
|
|
152620
|
+
"privacy": "private",
|
|
152621
|
+
"default": "[]",
|
|
152622
|
+
"description": "The values of the tabs the last pairing read, to tell a removed tab from one not yet here."
|
|
152623
|
+
},
|
|
152084
152624
|
{
|
|
152085
152625
|
"kind": "method",
|
|
152086
152626
|
"name": "sync",
|
|
@@ -152092,6 +152632,32 @@
|
|
|
152092
152632
|
},
|
|
152093
152633
|
"description": "Pushes the current value down to whichever tab and panel own it."
|
|
152094
152634
|
},
|
|
152635
|
+
{
|
|
152636
|
+
"kind": "field",
|
|
152637
|
+
"name": "focused",
|
|
152638
|
+
"type": {
|
|
152639
|
+
"text": "HelixHeadlessTab | undefined"
|
|
152640
|
+
},
|
|
152641
|
+
"privacy": "private",
|
|
152642
|
+
"description": "The tab that last had focus, so its removal can hand focus on."
|
|
152643
|
+
},
|
|
152644
|
+
{
|
|
152645
|
+
"kind": "field",
|
|
152646
|
+
"name": "handleFocusIn",
|
|
152647
|
+
"privacy": "private",
|
|
152648
|
+
"readonly": true
|
|
152649
|
+
},
|
|
152650
|
+
{
|
|
152651
|
+
"kind": "method",
|
|
152652
|
+
"name": "refocus",
|
|
152653
|
+
"privacy": "private",
|
|
152654
|
+
"return": {
|
|
152655
|
+
"type": {
|
|
152656
|
+
"text": "void"
|
|
152657
|
+
}
|
|
152658
|
+
},
|
|
152659
|
+
"description": "Puts focus on the selected tab where the tab that had it was removed and\nfocus fell to the page, which is where removing a focused element leaves\nit."
|
|
152660
|
+
},
|
|
152095
152661
|
{
|
|
152096
152662
|
"kind": "field",
|
|
152097
152663
|
"name": "handleSlotChange",
|
|
@@ -170768,13 +171334,13 @@
|
|
|
170768
171334
|
},
|
|
170769
171335
|
"parameters": [
|
|
170770
171336
|
{
|
|
170771
|
-
"name": "{\n content,\n description,\n heading,\n labeled,\n progress,\n}",
|
|
171337
|
+
"name": "{\n content,\n description,\n heading,\n labeled,\n loose = null,\n progress,\n}",
|
|
170772
171338
|
"type": {
|
|
170773
171339
|
"text": "StopWords"
|
|
170774
171340
|
}
|
|
170775
171341
|
}
|
|
170776
171342
|
],
|
|
170777
|
-
"description": "What names a tour stop's panel and what describes it.\n\nNamed by the `heading` slot, then by the first heading in the content, then\nby the stop's own `label`, and where there is none of those, by its place in\nthe tour, so no stop is an unnamed group. Described by the `description`\nslot and by its place, which is how a screen reader hears where
|
|
171343
|
+
"description": "What names a tour stop's panel and what describes it.\n\nNamed by the `heading` slot, then by the first heading in the content, then\nby the stop's own `label`, and where there is none of those, by its place in\nthe tour, so no stop is an unnamed group. Described by the `description`\nslot, or where it is empty by the words at the start of the content, as a\n`Dialog` is, and then by its place, which is how a screen reader hears where\nit is as focus moves from one stop to the next."
|
|
170778
171344
|
}
|
|
170779
171345
|
],
|
|
170780
171346
|
"exports": [
|
|
@@ -170794,7 +171360,7 @@
|
|
|
170794
171360
|
"declarations": [
|
|
170795
171361
|
{
|
|
170796
171362
|
"kind": "class",
|
|
170797
|
-
"description": "The root holds the order of the stops: which stop is current, what Next and\nBack do, and when the tour is finished. Each stop holds its target, and you\nwrite all the text.\n\n**The spotlight is a shadow.** The scrim is a box the size of the current\ntarget with a very large `box-shadow` spread, and the shadow paints the\ndarkness. A `clip-path` on a full-screen scrim breaks as soon as an element\nbetween the scrim and the viewport is transformed.\n\nThe root measures the target's position in the browser. Nothing is measured\non the server, because a tour starts only on request.\n\n`open`, `default-open`, `helix-before-open`, `helix-before-close` and\n`toggle` work as they do on `Dialog`. Setting `open` starts the run, and\n`skip()` and `requestOpen(false)` end it early.\n\nThe box the light falls on is on the `spotlight` part as\n`--tour-spotlight-x`, `--tour-spotlight-y`, `--tour-spotlight-width` and\n`--tour-spotlight-height`, for a sheet that draws its own light, such as a\nring around the target.\n\nEach stop is told its place in the run, from `progress-label`, such as \"2 of\n5\". It describes the stop's panel, so a screen reader says it at every stop,\nand `progress` draws it in the panel as well. A dialog or a floating stop,\nwhich has nothing to light, is shown over the `backdrop` part. At a `wait`\nstop the run waits for that stop's target to be on the page, and moves on by\nitself.\n\n**Focus follows the run.** Opening moves focus to the first stop's panel,\nand moving on from a control in a stop moves it to the next one. Ending the\ntour puts focus back on the element that had it when the tour opened, unless\nyou have moved it somewhere else on the page. A stop does not trap focus, so\nyou can still `Tab` out to the element it describes.\n\n**The
|
|
171363
|
+
"description": "The root holds the order of the stops: which stop is current, what Next and\nBack do, and when the tour is finished. Each stop holds its target, and you\nwrite all the text.\n\n**The spotlight is a shadow.** The scrim is a box the size of the current\ntarget with a very large `box-shadow` spread, and the shadow paints the\ndarkness. A `clip-path` on a full-screen scrim breaks as soon as an element\nbetween the scrim and the viewport is transformed.\n\nThe root measures the target's position in the browser. Nothing is measured\non the server, because a tour starts only on request.\n\n`open`, `default-open`, `helix-before-open`, `helix-before-close` and\n`toggle` work as they do on `Dialog`. Setting `open` starts the run, and\n`skip()` and `requestOpen(false)` end it early.\n\nThe box the light falls on is on the `spotlight` part as\n`--tour-spotlight-x`, `--tour-spotlight-y`, `--tour-spotlight-width` and\n`--tour-spotlight-height`, for a sheet that draws its own light, such as a\nring around the target.\n\nEach stop is told its place in the run, from `progress-label`, such as \"2 of\n5\". It describes the stop's panel, so a screen reader says it at every stop,\nand `progress` draws it in the panel as well. A dialog or a floating stop,\nwhich has nothing to light, is shown over the `backdrop` part. At a `wait`\nstop the run waits for that stop's target to be on the page, and moves on by\nitself.\n\n**Focus follows the run.** Opening moves focus to the first stop's panel,\nand moving on from a control in a stop moves it to the next one. Ending the\ntour puts focus back on the element that had it when the tour opened, unless\nyou have moved it somewhere else on the page. A stop does not trap focus, so\nyou can still `Tab` out to the element it describes.\n\n**The target is scrolled into view** before its stop is shown, by the\nleast distance that brings it on screen, so the stop that points at it is\non screen too.\n\n**Keyboard.** Focus is on the current stop's panel, which is not in the\n`Tab` order itself.\n\n| Key | What it does |\n|---|---|\n| Right | Goes to the next stop. On the last stop it does nothing, and Next finishes the tour. |\n| Left | Goes back to the previous stop. |\n| Escape | Skips the tour, and puts focus back where it was when the tour opened. |\n| Tab, Shift+Tab | Moves through the controls in the stop, and on out to the page. A stop does not trap focus. |\n| Enter, Space | On Back, Next, or Skip, presses it. |\n\nThe arrow that points the way the line runs goes on, and the other goes\nback, so on a right-to-left page Left goes on and Right goes back. A text field in a stop keeps\nits own arrows.\n\nThe tour is a region named by `label` while it runs. A development build\nwarns when a tour opens with no `label`.",
|
|
170798
171364
|
"name": "HelixHeadlessTour",
|
|
170799
171365
|
"cssProperties": [
|
|
170800
171366
|
{
|
|
@@ -171110,6 +171676,26 @@
|
|
|
171110
171676
|
"privacy": "private",
|
|
171111
171677
|
"readonly": true
|
|
171112
171678
|
},
|
|
171679
|
+
{
|
|
171680
|
+
"kind": "field",
|
|
171681
|
+
"name": "revealed",
|
|
171682
|
+
"type": {
|
|
171683
|
+
"text": "HTMLElement | undefined"
|
|
171684
|
+
},
|
|
171685
|
+
"privacy": "private",
|
|
171686
|
+
"description": "The target last scrolled into view, so a render that moved nothing scrolls nothing."
|
|
171687
|
+
},
|
|
171688
|
+
{
|
|
171689
|
+
"kind": "method",
|
|
171690
|
+
"name": "reveal",
|
|
171691
|
+
"privacy": "private",
|
|
171692
|
+
"return": {
|
|
171693
|
+
"type": {
|
|
171694
|
+
"text": "void"
|
|
171695
|
+
}
|
|
171696
|
+
},
|
|
171697
|
+
"description": "Scrolls the current target into view, by the least distance that brings\nit on screen, before its stop is shown beside it. Zag's tour does the same.\nA target already on screen does not move."
|
|
171698
|
+
},
|
|
171113
171699
|
{
|
|
171114
171700
|
"kind": "field",
|
|
171115
171701
|
"name": "returnFocus",
|
|
@@ -171997,7 +172583,7 @@
|
|
|
171997
172583
|
"declarations": [
|
|
171998
172584
|
{
|
|
171999
172585
|
"kind": "class",
|
|
172000
|
-
"description": "A stop names its target with `for` and holds the content you put in it. The\nstop handles three things:\n\n- **Placement.** The panel is anchored to the target by the same floating\n positioning as the other Helix overlays.\n- **Stacking.** The panel is a popover, so it is in the top layer and shows\n above dialogs, scrolling regions, and other stacking contexts.\n- **Visibility.** The stop shows when it is `current`, which the root sets.\n\nPut any content in the stop, such as a `Card`, or a heading and a line of\ntext. The `heading` and `description` slots are optional places for the\ntitle and the line under it, which then name and describe the panel.\n\n**A stop has a type.** Without one it is a bubble pointing at its target.\n`type=\"dialog\"` is a panel in the middle of the window, over a backdrop, for\na welcome or a summary with nothing to point at. `type=\"floating\"` is a\npanel in a corner of the window, which the styled tier puts at the end of\nthe line, for a note that points at nothing in particular. `type=\"wait\"` shows nothing: the tour waits\nfor the element `for` names to be on the page, such as a menu the reader has\nto open, and moves on by itself.\n\n**The buttons are slot fallback.** With nothing in the `actions` slot, you\nget Back, Next, and Skip, already wired. Slot your own `actions` and drive\nthem with `next()`, `back()`, and `skip()` on the root.\n\n**`for` is an id, as with `Tooltip`**, so you can point at a target elsewhere\non the page from markup. It resolves against the stop's root node, so a stop\ninside a shadow tree points at a target in that tree.\n\nThe panel is a `group`, and a `dialog` for a dialog stop, only while the\nstop is shown. It is named by the `heading` slot, then by the first heading\nin the content, then by `label`, and otherwise by its place in the tour. It\nis described by the `description` slot and by its place, such as \"2 of 5\",\nso a screen reader says where the reader is at every stop. `focus()` moves\nfocus to the panel, which is what the tour does when it opens or moves on.",
|
|
172586
|
+
"description": "A stop names its target with `for` and holds the content you put in it. The\nstop handles three things:\n\n- **Placement.** The panel is anchored to the target by the same floating\n positioning as the other Helix overlays.\n- **Stacking.** The panel is a popover, so it is in the top layer and shows\n above dialogs, scrolling regions, and other stacking contexts.\n- **Visibility.** The stop shows when it is `current`, which the root sets.\n\nPut any content in the stop, such as a `Card`, or a heading and a line of\ntext. The `heading` and `description` slots are optional places for the\ntitle and the line under it, which then name and describe the panel.\n\n**A stop has a type.** Without one it is a bubble pointing at its target.\n`type=\"dialog\"` is a panel in the middle of the window, over a backdrop, for\na welcome or a summary with nothing to point at. `type=\"floating\"` is a\npanel in a corner of the window, which the styled tier puts at the end of\nthe line, for a note that points at nothing in particular. `type=\"wait\"` shows nothing: the tour waits\nfor the element `for` names to be on the page, such as a menu the reader has\nto open, and moves on by itself.\n\n**The buttons are slot fallback.** With nothing in the `actions` slot, you\nget Back, Next, and Skip, already wired. Slot your own `actions` and drive\nthem with `next()`, `back()`, and `skip()` on the root.\n\n**`for` is an id, as with `Tooltip`**, so you can point at a target elsewhere\non the page from markup. It resolves against the stop's root node, so a stop\ninside a shadow tree points at a target in that tree.\n\nThe panel is a `group`, and a `dialog` for a dialog stop, only while the\nstop is shown. It is named by the `heading` slot, then by the first heading\nin the content, then by `label`, and otherwise by its place in the tour. It\nis described by the `description` slot, or where that is empty by the words\nat the start of the content, and by its place, such as \"2 of 5\",\nso a screen reader says where the reader is at every stop. `focus()` moves\nfocus to the panel, which is what the tour does when it opens or moves on.",
|
|
172001
172587
|
"name": "HelixHeadlessTourStop",
|
|
172002
172588
|
"cssParts": [
|
|
172003
172589
|
{
|
|
@@ -173967,7 +174553,7 @@
|
|
|
173967
174553
|
"declarations": [
|
|
173968
174554
|
{
|
|
173969
174555
|
"kind": "class",
|
|
173970
|
-
"description": "The tree is a single tab stop, and arrow keys move focus between items, as\nthe tree pattern requires, so Tab moves past a long sidebar in one press. The\ntree moves the tab stop to the focused item, so the browser's focus order\nstays intact.\n\nItems are found with `instanceof`, never by tag name, so the headless tier\ndoes not depend on the styled one.\n\nTyping a letter moves to the next visible item whose name starts with it,\nand `*` opens every branch beside the focused item.\n\n`selection-mode=\"multiple\"` draws a check mark on every row and lets a\nreader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking\na branch checks every item under it, and a branch some of whose items are\nchecked is partly checked. Space or a press on the mark checks the focused\nrow, and Enter or a press on a branch's row opens it. `active` then holds the\nchecked values, comma separated, which `values` also gives as a list, and\nthe tree says `aria-multiselectable`.\n\n`selection-mode=\"leaf\"` chooses one item at a time and only the items at the\nends: a press, Enter or Space on a branch opens or closes it and chooses\nnothing, as Web Awesome's `leaf` mode does.\n\nKeys: Up and Down Arrow move between the items a reader can see; Right\nArrow opens a shut branch and then moves into it, and Left Arrow shuts an\nopen one and then moves to its parent, the two swapping on a right-to-left\npage. Home and End go to the first and the last item, Enter and Space choose\nor open, and the tree's one tab stop stays on the item last reached. In a\ntree of check marks, Control+A (Command+A on an Apple keyboard) checks every\nitem or clears them all, and Shift with Up or Down Arrow moves and checks.\n\n**`reorderable` lets you move items among their siblings.** Alt with Up or\nDown moves the focused item a place, and Alt with Home or End to the first\nor the last place among its siblings, as the APG's rearrangeable listbox\ndoes. Each row gets a grip at its far end: drag it to move the item, and the\ntree scrolls near an edge. A click on a grip picks the item up and a click on\none of its siblings drops it there, which needs no drag. The arrows move an\nitem picked up that way, Enter or Space drops it, and Escape puts it back.\nThe tree says each step in its `live` region. A drop sends\n`helix-before-reorder`, which you can refuse, and then `helix-reorder`, whose\n`keys` hold the siblings in the new order. **You move the items**: the tree\nmoves no element of yours, and focus follows the moved item once you have.\nMoving an item into another branch is not part of this.",
|
|
174556
|
+
"description": "The tree is a single tab stop, and arrow keys move focus between items, as\nthe tree pattern requires, so Tab moves past a long sidebar in one press. The\ntree moves the tab stop to the focused item, so the browser's focus order\nstays intact.\n\nItems are found with `instanceof`, never by tag name, so the headless tier\ndoes not depend on the styled one.\n\nTyping a letter moves to the next visible item whose name starts with it,\nand `*` opens every branch beside the focused item.\n\n`selection-mode=\"multiple\"` draws a check mark on every row and lets a\nreader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking\na branch checks every item under it, and a branch some of whose items are\nchecked is partly checked. Space or a press on the mark checks the focused\nrow, and Enter or a press on a branch's row opens it. `active` then holds the\nchecked values, comma separated, which `values` also gives as a list, and\nthe tree says `aria-multiselectable`.\n\n`selection-mode=\"leaf\"` chooses one item at a time and only the items at the\nends: a press, Enter or Space on a branch opens or closes it and chooses\nnothing, as Web Awesome's `leaf` mode does.\n\nKeys: Up and Down Arrow move between the items a reader can see; Right\nArrow opens a shut branch and then moves into it, and Left Arrow shuts an\nopen one and then moves to its parent, the two swapping on a right-to-left\npage. Home and End go to the first and the last item, Enter and Space choose\nor open, and the tree's one tab stop stays on the item last reached. In a\ntree of check marks, Control+A (Command+A on an Apple keyboard) checks every\nitem or clears them all, and Shift with Up or Down Arrow moves and checks.\n\nRemoving the item that has focus moves focus to the item after it among its\nsiblings, or the one before, or its parent, so focus stays in the tree.\n\n**`reorderable` lets you move items among their siblings.** Alt with Up or\nDown moves the focused item a place, and Alt with Home or End to the first\nor the last place among its siblings, as the APG's rearrangeable listbox\ndoes. Each row gets a grip at its far end: drag it to move the item, and the\ntree scrolls near an edge. A click on a grip picks the item up and a click on\none of its siblings drops it there, which needs no drag. The arrows move an\nitem picked up that way, Enter or Space drops it, and Escape puts it back.\nThe tree says each step in its `live` region. A drop sends\n`helix-before-reorder`, which you can refuse, and then `helix-reorder`, whose\n`keys` hold the siblings in the new order. **You move the items**: the tree\nmoves no element of yours, and focus follows the moved item once you have.\nMoving an item into another branch is not part of this.",
|
|
173971
174557
|
"name": "HelixHeadlessTree",
|
|
173972
174558
|
"cssParts": [
|
|
173973
174559
|
{
|
|
@@ -174271,6 +174857,40 @@
|
|
|
174271
174857
|
},
|
|
174272
174858
|
"privacy": "private"
|
|
174273
174859
|
},
|
|
174860
|
+
{
|
|
174861
|
+
"kind": "field",
|
|
174862
|
+
"name": "focused",
|
|
174863
|
+
"type": {
|
|
174864
|
+
"text": "HelixHeadlessTreeItem | undefined"
|
|
174865
|
+
},
|
|
174866
|
+
"privacy": "private",
|
|
174867
|
+
"description": "The item that last had focus, so its removal can hand focus on."
|
|
174868
|
+
},
|
|
174869
|
+
{
|
|
174870
|
+
"kind": "field",
|
|
174871
|
+
"name": "handleFocusIn",
|
|
174872
|
+
"privacy": "private",
|
|
174873
|
+
"readonly": true
|
|
174874
|
+
},
|
|
174875
|
+
{
|
|
174876
|
+
"kind": "method",
|
|
174877
|
+
"name": "refocus",
|
|
174878
|
+
"privacy": "private",
|
|
174879
|
+
"return": {
|
|
174880
|
+
"type": {
|
|
174881
|
+
"text": "void"
|
|
174882
|
+
}
|
|
174883
|
+
},
|
|
174884
|
+
"parameters": [
|
|
174885
|
+
{
|
|
174886
|
+
"name": "records",
|
|
174887
|
+
"type": {
|
|
174888
|
+
"text": "MutationRecord[]"
|
|
174889
|
+
}
|
|
174890
|
+
}
|
|
174891
|
+
],
|
|
174892
|
+
"description": "Puts focus back in the tree where the item that had it was removed and\nfocus fell to the page: on the item after it among its siblings, or the\none before, or its parent. Read from the removal itself, which knows where\nthe item stood."
|
|
174893
|
+
},
|
|
174274
174894
|
{
|
|
174275
174895
|
"kind": "field",
|
|
174276
174896
|
"name": "items",
|
|
@@ -183130,6 +183750,6 @@
|
|
|
183130
183750
|
],
|
|
183131
183751
|
"helix": {
|
|
183132
183752
|
"package": "@fusion.dev/helix-headless",
|
|
183133
|
-
"version": "0.
|
|
183753
|
+
"version": "0.152.0"
|
|
183134
183754
|
}
|
|
183135
183755
|
}
|