@fusion.dev/helix-headless 0.158.0 → 0.159.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 +674 -35
- package/dist/app-header/root/app-header-root.d.ts +59 -12
- package/dist/app-header/root/app-header-root.js +68 -29
- package/dist/button/root/button-root.d.ts +8 -0
- package/dist/button/root/button-root.js +4 -0
- package/dist/button-group/root/button-group-root.d.ts +20 -7
- package/dist/button-group/root/button-group-root.js +30 -5
- package/dist/element-events.generated.js +7 -1
- package/dist/lightbox/item/lightbox-item.d.ts +7 -1
- package/dist/lightbox/item/lightbox-item.js +15 -2
- package/dist/lightbox/root/lightbox-root.d.ts +8 -4
- package/dist/lightbox/root/lightbox-root.js +9 -1
- package/dist/lightbox/zoom-controller.d.ts +13 -4
- package/dist/lightbox/zoom-controller.js +17 -0
- package/dist/steps/root/steps-root.js +8 -6
- package/dist/steps/step/step.d.ts +9 -0
- package/dist/steps/step/step.js +19 -2
- package/dist/tabs/panel/tab-panel.d.ts +22 -1
- package/dist/tabs/panel/tab-panel.js +22 -1
- package/dist/tabs/root/tabs-root.d.ts +21 -5
- package/dist/tabs/root/tabs-root.js +24 -13
- package/dist/tabs/tab/tab.d.ts +4 -2
- package/dist/tabs/tab/tab.js +3 -1
- package/dist/toast/item/toast-item.d.ts +27 -8
- package/dist/toast/item/toast-item.js +47 -11
- package/dist/toast/root/toast-root.d.ts +24 -1
- package/dist/toast/root/toast-root.js +54 -0
- package/dist/tour/root/tour-root.d.ts +34 -0
- package/dist/tour/root/tour-root.js +92 -3
- package/dist/tour/stop/tour-stop.d.ts +33 -1
- package/dist/tour/stop/tour-stop.js +12 -1
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +459 -62
- package/types/vue.d.ts +100 -14
package/custom-elements.json
CHANGED
|
@@ -2303,7 +2303,7 @@
|
|
|
2303
2303
|
"declarations": [
|
|
2304
2304
|
{
|
|
2305
2305
|
"kind": "class",
|
|
2306
|
-
"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
|
|
2306
|
+
"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`, or at its start with\n`toggle-placement=\"start\"`. The toggle says whether the region is open with\n`aria-expanded`, and the region opens below the row. The region follows the\ntoggle's region in focus order, so Tab from the toggle at the end goes into\nthe open region. The custom state `folded` is on the host while the bar is\nthat narrow, and `open` while the folded region is open. A server serves the\nbar unfolded, and the browser folds it once it has measured it.\n\n**`open` says whether the folded region is open, and setting it opens or\ncloses the region.** `requestOpen(true)` and `requestOpen(false)` do the same\nand send `helix-before-open` or `helix-before-close` first, which you can\ncancel, and `toggleOpen()` asks for the opposite. `toggle` follows every\nchange. The region closes on Escape, which puts focus back on the toggle,\nwhen focus moves to something outside the header, and on a press outside\nit. A bar that widens past `fold-below` closes its region.\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.",
|
|
2307
2307
|
"name": "HelixHeadlessAppHeader",
|
|
2308
2308
|
"cssParts": [
|
|
2309
2309
|
{
|
|
@@ -2389,6 +2389,19 @@
|
|
|
2389
2389
|
"description": "Hides the bar as the page scrolls down past it, and shows it again as the\npage scrolls up.",
|
|
2390
2390
|
"attribute": "hide-on-scroll"
|
|
2391
2391
|
},
|
|
2392
|
+
{
|
|
2393
|
+
"kind": "field",
|
|
2394
|
+
"name": "menuLabel",
|
|
2395
|
+
"type": {
|
|
2396
|
+
"text": "string"
|
|
2397
|
+
},
|
|
2398
|
+
"default": "'Menu'",
|
|
2399
|
+
"description": "The name of the toggle that opens a folded middle region.",
|
|
2400
|
+
"attribute": "menu-label",
|
|
2401
|
+
"helix": {
|
|
2402
|
+
"words": true
|
|
2403
|
+
}
|
|
2404
|
+
},
|
|
2392
2405
|
{
|
|
2393
2406
|
"kind": "field",
|
|
2394
2407
|
"name": "folded",
|
|
@@ -2406,8 +2419,8 @@
|
|
|
2406
2419
|
"text": "boolean"
|
|
2407
2420
|
},
|
|
2408
2421
|
"privacy": "private",
|
|
2409
|
-
"
|
|
2410
|
-
"
|
|
2422
|
+
"description": "Whether the folded middle region is open and showing.",
|
|
2423
|
+
"readonly": true
|
|
2411
2424
|
},
|
|
2412
2425
|
{
|
|
2413
2426
|
"kind": "field",
|
|
@@ -2446,7 +2459,7 @@
|
|
|
2446
2459
|
}
|
|
2447
2460
|
}
|
|
2448
2461
|
],
|
|
2449
|
-
"description": "Folds the middle region where the bar is narrower than `fold-below`."
|
|
2462
|
+
"description": "Folds the middle region where the bar is narrower than `fold-below`. A bar\nthat widens closes its region, so it starts closed when it folds again;\none that narrows keeps an `open` you set."
|
|
2450
2463
|
},
|
|
2451
2464
|
{
|
|
2452
2465
|
"kind": "field",
|
|
@@ -2462,6 +2475,41 @@
|
|
|
2462
2475
|
"readonly": true,
|
|
2463
2476
|
"description": "Escape in the open region closes it and puts focus back on the toggle."
|
|
2464
2477
|
},
|
|
2478
|
+
{
|
|
2479
|
+
"kind": "field",
|
|
2480
|
+
"name": "handleFocusOut",
|
|
2481
|
+
"privacy": "private",
|
|
2482
|
+
"readonly": true,
|
|
2483
|
+
"description": "Closes the open region when focus moves to something outside the header.\nFocus leaving the window has no `relatedTarget`, and closes nothing."
|
|
2484
|
+
},
|
|
2485
|
+
{
|
|
2486
|
+
"kind": "field",
|
|
2487
|
+
"name": "handleOutsidePress",
|
|
2488
|
+
"privacy": "private",
|
|
2489
|
+
"readonly": true,
|
|
2490
|
+
"description": "Closes the open region on a press outside the header."
|
|
2491
|
+
},
|
|
2492
|
+
{
|
|
2493
|
+
"kind": "field",
|
|
2494
|
+
"name": "pressing",
|
|
2495
|
+
"type": {
|
|
2496
|
+
"text": "boolean"
|
|
2497
|
+
},
|
|
2498
|
+
"privacy": "private",
|
|
2499
|
+
"default": "false",
|
|
2500
|
+
"description": "Whether the outside press is listened for, which is while the region is open."
|
|
2501
|
+
},
|
|
2502
|
+
{
|
|
2503
|
+
"kind": "method",
|
|
2504
|
+
"name": "watchPresses",
|
|
2505
|
+
"privacy": "private",
|
|
2506
|
+
"return": {
|
|
2507
|
+
"type": {
|
|
2508
|
+
"text": "void"
|
|
2509
|
+
}
|
|
2510
|
+
},
|
|
2511
|
+
"description": "Listens for a press outside while the folded region is open, and only then."
|
|
2512
|
+
},
|
|
2465
2513
|
{
|
|
2466
2514
|
"kind": "field",
|
|
2467
2515
|
"name": "away",
|
|
@@ -2529,25 +2577,22 @@
|
|
|
2529
2577
|
},
|
|
2530
2578
|
{
|
|
2531
2579
|
"kind": "field",
|
|
2532
|
-
"name": "
|
|
2580
|
+
"name": "scroller",
|
|
2533
2581
|
"type": {
|
|
2534
|
-
"text": "string"
|
|
2582
|
+
"text": "string | undefined"
|
|
2535
2583
|
},
|
|
2536
|
-
"
|
|
2537
|
-
"
|
|
2538
|
-
"attribute": "menu-label",
|
|
2539
|
-
"helix": {
|
|
2540
|
-
"words": true
|
|
2541
|
-
}
|
|
2584
|
+
"description": "The id of the element whose scrolling lifts the bar, for an app shell that\nscrolls a container instead of the window. Unset is the window.",
|
|
2585
|
+
"attribute": "scroller"
|
|
2542
2586
|
},
|
|
2543
2587
|
{
|
|
2544
2588
|
"kind": "field",
|
|
2545
|
-
"name": "
|
|
2589
|
+
"name": "togglePlacement",
|
|
2546
2590
|
"type": {
|
|
2547
|
-
"text": "
|
|
2591
|
+
"text": "'start' | undefined"
|
|
2548
2592
|
},
|
|
2549
|
-
"description": "
|
|
2550
|
-
"attribute": "
|
|
2593
|
+
"description": "Where the toggle that opens a folded middle region sits: at the end of the\nbar, after the trailing content, or with `start`, before the leading\ncontent.\n\nOptional, so the resting bar writes no attribute onto the host.",
|
|
2594
|
+
"attribute": "toggle-placement",
|
|
2595
|
+
"reflects": true
|
|
2551
2596
|
},
|
|
2552
2597
|
{
|
|
2553
2598
|
"kind": "field",
|
|
@@ -2636,6 +2681,126 @@
|
|
|
2636
2681
|
},
|
|
2637
2682
|
"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."
|
|
2638
2683
|
},
|
|
2684
|
+
{
|
|
2685
|
+
"kind": "field",
|
|
2686
|
+
"name": "defaultOpen",
|
|
2687
|
+
"type": {
|
|
2688
|
+
"text": "boolean"
|
|
2689
|
+
},
|
|
2690
|
+
"default": "false",
|
|
2691
|
+
"description": "Whether the element starts open. Ignored once `open` is written.",
|
|
2692
|
+
"attribute": "default-open",
|
|
2693
|
+
"inheritedFrom": {
|
|
2694
|
+
"name": "MixinControllerOpen",
|
|
2695
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
2696
|
+
}
|
|
2697
|
+
},
|
|
2698
|
+
{
|
|
2699
|
+
"kind": "field",
|
|
2700
|
+
"name": "open",
|
|
2701
|
+
"type": {
|
|
2702
|
+
"text": "boolean"
|
|
2703
|
+
},
|
|
2704
|
+
"description": "Whether the element is open.\n\nOne property, not two, so `dialog.open` answers the question anyone\nasking it meant. Writing always applies; `<helix-dialog open>` is the\nsame statement in markup.\n\n**Not reflected, and that is required rather than tidy.** Reflection\nwrites the resolved state back as an attribute, so an element that opened\nitself would put `open` on its own host: cloned, serialized for\nhydration, or diffed by a framework, it comes back holding whatever the\nlast reader did rather than what the author wrote. `:state(open)` carries\nthe resolved state for stylesheets, which is what the mirror is for.",
|
|
2705
|
+
"attribute": "open",
|
|
2706
|
+
"inheritedFrom": {
|
|
2707
|
+
"name": "MixinControllerOpen",
|
|
2708
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
2709
|
+
}
|
|
2710
|
+
},
|
|
2711
|
+
{
|
|
2712
|
+
"kind": "field",
|
|
2713
|
+
"name": "openState",
|
|
2714
|
+
"type": {
|
|
2715
|
+
"text": "boolean | undefined"
|
|
2716
|
+
},
|
|
2717
|
+
"privacy": "private",
|
|
2718
|
+
"default": "undefined",
|
|
2719
|
+
"description": "The state, whoever set it, and `undefined` until somebody has.\n\nPrefixed, and it has to be. These mixins compose onto one prototype\nchain, `Select` takes this one and `MixinControllerValue` together, and\nTypeScript's `private` is a compile-time fiction: two mixins with a field\ncalled `state` share one property on the instance, and the second one\nsilently overwrites the first. Measured, as a select whose `value` came\nback holding its `open` boolean.\n\nOne field and not two. Writing always applies, the way a native control\ndoes when a script assigns to it.",
|
|
2720
|
+
"inheritedFrom": {
|
|
2721
|
+
"name": "MixinControllerOpen",
|
|
2722
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
2723
|
+
}
|
|
2724
|
+
},
|
|
2725
|
+
{
|
|
2726
|
+
"kind": "field",
|
|
2727
|
+
"name": "announcedOpen",
|
|
2728
|
+
"type": {
|
|
2729
|
+
"text": "boolean | undefined"
|
|
2730
|
+
},
|
|
2731
|
+
"privacy": "private",
|
|
2732
|
+
"default": "undefined",
|
|
2733
|
+
"description": "The state `toggle` last reported, and `undefined` before the first update.\n\n`requestOpen` announces at once. An assignment to `open` announces here,\nonce it has rendered, so a consumer binding `toggle` hears every change\nthat a `close` listener on a dialog hears. The first update sets it and\nannounces nothing, because a seed is where the element starts.",
|
|
2734
|
+
"inheritedFrom": {
|
|
2735
|
+
"name": "MixinControllerOpen",
|
|
2736
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
2737
|
+
}
|
|
2738
|
+
},
|
|
2739
|
+
{
|
|
2740
|
+
"kind": "method",
|
|
2741
|
+
"name": "requestOpen",
|
|
2742
|
+
"return": {
|
|
2743
|
+
"type": {
|
|
2744
|
+
"text": "boolean"
|
|
2745
|
+
}
|
|
2746
|
+
},
|
|
2747
|
+
"parameters": [
|
|
2748
|
+
{
|
|
2749
|
+
"name": "next",
|
|
2750
|
+
"type": {
|
|
2751
|
+
"text": "boolean"
|
|
2752
|
+
}
|
|
2753
|
+
}
|
|
2754
|
+
],
|
|
2755
|
+
"description": "Requests that the element open or close, and returns whether the change\nwas applied.\n\nAnnounces before it acts, so `preventDefault()` on the `helix-before-open` or\n`helix-before-close` is a refusal and nothing moves. Nobody refusing means the\nelement opens or closes itself, whether or not a consumer declared\n`open`: a declared property is a seed and a correction, and a consumer\nwho wants the decision for themselves refuses it and assigns their own.",
|
|
2756
|
+
"inheritedFrom": {
|
|
2757
|
+
"name": "MixinControllerOpen",
|
|
2758
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
2759
|
+
},
|
|
2760
|
+
"type": {
|
|
2761
|
+
"text": "requestOpen(next: boolean) => boolean"
|
|
2762
|
+
}
|
|
2763
|
+
},
|
|
2764
|
+
{
|
|
2765
|
+
"kind": "method",
|
|
2766
|
+
"name": "announceToggle",
|
|
2767
|
+
"privacy": "private",
|
|
2768
|
+
"return": {
|
|
2769
|
+
"type": {
|
|
2770
|
+
"text": "void"
|
|
2771
|
+
}
|
|
2772
|
+
},
|
|
2773
|
+
"parameters": [
|
|
2774
|
+
{
|
|
2775
|
+
"name": "open",
|
|
2776
|
+
"type": {
|
|
2777
|
+
"text": "boolean"
|
|
2778
|
+
}
|
|
2779
|
+
}
|
|
2780
|
+
],
|
|
2781
|
+
"description": "Says the state moved, under the platform's own name and in its shape.\n\n**A native `toggle` from inside a shadow root reaches nobody**, because\nit neither bubbles nor composes, so the ten families showing a\n`popover=\"manual\"` panel and the two rendering a real `<dialog>` announce\nnothing to a consumer. The disclosures have no native element to fire\nanything at all: `AccordionItem` and `TreeItem` are `aria-expanded` and\n`hidden` written by hand, which is `<details>`'s job done manually.\n\n**From here rather than from `PopoverController`.** The controller covers\neleven families and the mixin covers sixteen, so announcing from both\nwould announce twice on the ten they share. What `toggle` reports is the\n*state*, and the state is this mixin's; the controller is a way of\nputting a panel on the screen.\n\n**`newState` and `oldState`, because that is the platform's shape**, so a\nconsumer arriving from `<details>` reads the same two words. Not\ncancelable: the before events are the request, and a second cancelable\nevent for one transition is two answers to one question.",
|
|
2782
|
+
"inheritedFrom": {
|
|
2783
|
+
"name": "MixinControllerOpen",
|
|
2784
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
2785
|
+
}
|
|
2786
|
+
},
|
|
2787
|
+
{
|
|
2788
|
+
"kind": "method",
|
|
2789
|
+
"name": "toggleOpen",
|
|
2790
|
+
"return": {
|
|
2791
|
+
"type": {
|
|
2792
|
+
"text": "boolean"
|
|
2793
|
+
}
|
|
2794
|
+
},
|
|
2795
|
+
"description": "Requests the opposite of the current state.",
|
|
2796
|
+
"inheritedFrom": {
|
|
2797
|
+
"name": "MixinControllerOpen",
|
|
2798
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
2799
|
+
},
|
|
2800
|
+
"type": {
|
|
2801
|
+
"text": "toggleOpen() => boolean"
|
|
2802
|
+
}
|
|
2803
|
+
},
|
|
2639
2804
|
{
|
|
2640
2805
|
"kind": "field",
|
|
2641
2806
|
"name": "tier",
|
|
@@ -2977,6 +3142,22 @@
|
|
|
2977
3142
|
}
|
|
2978
3143
|
],
|
|
2979
3144
|
"events": [
|
|
3145
|
+
{
|
|
3146
|
+
"type": {
|
|
3147
|
+
"text": "HelixBeforeCloseEvent"
|
|
3148
|
+
},
|
|
3149
|
+
"description": "The folded region is about to close. Cancelable: cancel it to keep it open.",
|
|
3150
|
+
"name": "helix-before-close",
|
|
3151
|
+
"reactProp": "onhelix-before-close"
|
|
3152
|
+
},
|
|
3153
|
+
{
|
|
3154
|
+
"type": {
|
|
3155
|
+
"text": "HelixBeforeOpenEvent"
|
|
3156
|
+
},
|
|
3157
|
+
"description": "The folded region is about to open. Cancelable: cancel it to keep it closed.",
|
|
3158
|
+
"name": "helix-before-open",
|
|
3159
|
+
"reactProp": "onhelix-before-open"
|
|
3160
|
+
},
|
|
2980
3161
|
{
|
|
2981
3162
|
"type": {
|
|
2982
3163
|
"text": "HelixScrolledEvent"
|
|
@@ -2984,6 +3165,18 @@
|
|
|
2984
3165
|
"description": "Fired when the page crosses the scroll threshold, with the new state. A custom state cannot be observed the way an attribute can, so listen for this event to follow it. The event uses the header's own threshold and hysteresis, so you do not need a second scroll listener.",
|
|
2985
3166
|
"name": "helix-scrolled",
|
|
2986
3167
|
"reactProp": "onhelix-scrolled"
|
|
3168
|
+
},
|
|
3169
|
+
{
|
|
3170
|
+
"name": "toggle",
|
|
3171
|
+
"type": {
|
|
3172
|
+
"text": "ToggleEvent"
|
|
3173
|
+
},
|
|
3174
|
+
"description": "The folded region opened or closed. The event carries `newState` and `oldState`.",
|
|
3175
|
+
"inheritedFrom": {
|
|
3176
|
+
"name": "MixinControllerOpen",
|
|
3177
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
3178
|
+
},
|
|
3179
|
+
"reactProp": "ontoggle"
|
|
2987
3180
|
}
|
|
2988
3181
|
],
|
|
2989
3182
|
"attributes": [
|
|
@@ -3028,6 +3221,39 @@
|
|
|
3028
3221
|
},
|
|
3029
3222
|
"description": "The id of the element whose scrolling lifts the bar, for an app shell that\nscrolls a container instead of the window. Unset is the window.",
|
|
3030
3223
|
"fieldName": "scroller"
|
|
3224
|
+
},
|
|
3225
|
+
{
|
|
3226
|
+
"name": "toggle-placement",
|
|
3227
|
+
"type": {
|
|
3228
|
+
"text": "'start' | undefined"
|
|
3229
|
+
},
|
|
3230
|
+
"description": "Where the toggle that opens a folded middle region sits: at the end of the\nbar, after the trailing content, or with `start`, before the leading\ncontent.\n\nOptional, so the resting bar writes no attribute onto the host.",
|
|
3231
|
+
"fieldName": "togglePlacement"
|
|
3232
|
+
},
|
|
3233
|
+
{
|
|
3234
|
+
"name": "default-open",
|
|
3235
|
+
"type": {
|
|
3236
|
+
"text": "boolean"
|
|
3237
|
+
},
|
|
3238
|
+
"default": "false",
|
|
3239
|
+
"description": "Whether the element starts open. Ignored once `open` is written.",
|
|
3240
|
+
"fieldName": "defaultOpen",
|
|
3241
|
+
"inheritedFrom": {
|
|
3242
|
+
"name": "MixinControllerOpen",
|
|
3243
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
3244
|
+
}
|
|
3245
|
+
},
|
|
3246
|
+
{
|
|
3247
|
+
"name": "open",
|
|
3248
|
+
"type": {
|
|
3249
|
+
"text": "boolean"
|
|
3250
|
+
},
|
|
3251
|
+
"description": "Whether the element is open.\n\nOne property, not two, so `dialog.open` answers the question anyone\nasking it meant. Writing always applies; `<helix-dialog open>` is the\nsame statement in markup.\n\n**Not reflected, and that is required rather than tidy.** Reflection\nwrites the resolved state back as an attribute, so an element that opened\nitself would put `open` on its own host: cloned, serialized for\nhydration, or diffed by a framework, it comes back holding whatever the\nlast reader did rather than what the author wrote. `:state(open)` carries\nthe resolved state for stylesheets, which is what the mirror is for.",
|
|
3252
|
+
"fieldName": "open",
|
|
3253
|
+
"inheritedFrom": {
|
|
3254
|
+
"name": "MixinControllerOpen",
|
|
3255
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
3256
|
+
}
|
|
3031
3257
|
}
|
|
3032
3258
|
],
|
|
3033
3259
|
"cssStates": [
|
|
@@ -3056,6 +3282,12 @@
|
|
|
3056
3282
|
}
|
|
3057
3283
|
}
|
|
3058
3284
|
],
|
|
3285
|
+
"mixins": [
|
|
3286
|
+
{
|
|
3287
|
+
"name": "MixinControllerOpen",
|
|
3288
|
+
"package": "@fusion.dev/helix-core"
|
|
3289
|
+
}
|
|
3290
|
+
],
|
|
3059
3291
|
"superclass": {
|
|
3060
3292
|
"name": "HelixElement",
|
|
3061
3293
|
"package": "@fusion.dev/helix-core"
|
|
@@ -10275,7 +10507,7 @@
|
|
|
10275
10507
|
"declarations": [
|
|
10276
10508
|
{
|
|
10277
10509
|
"kind": "class",
|
|
10278
|
-
"description": "Sets `role=\"group\"` on the host through internals, and `label` names the\ngroup. Without a name, a screen reader announces the buttons as separate\ncontrols, and a development build warns once with the kind `missing-name`.\n\nThe group does not manage focus, so each button keeps its own tab stop. For\none tab stop with arrow keys between a mix of controls, the APG toolbar\npattern, use Toolbar.\n\nButtons are slotted, so they stay your own elements and keep their own\nappearance and size.\n\n**Buttons that stay pressed.** With `selection-mode`, each button with a\n`value` is a toggle button: a press presses or releases it, and
|
|
10510
|
+
"description": "Sets `role=\"group\"` on the host through internals, and `label` names the\ngroup. Without a name, a screen reader announces the buttons as separate\ncontrols, and a development build warns once with the kind `missing-name`.\n\nThe group does not manage focus, so each button keeps its own tab stop. For\none tab stop with arrow keys between a mix of controls, the APG toolbar\npattern, use Toolbar.\n\nButtons are slotted, so they stay your own elements and keep their own\nappearance and size.\n\n**Buttons that stay pressed.** With `selection-mode`, each button with a\n`value` is a toggle button: a press presses or releases it. `multiple` lets\nany number be pressed, and each button says so with `aria-pressed`. `single`\nkeeps one pressed at a time: the group is a `radiogroup` and each button a\n`radio` that says so with `aria-checked`, as React Aria's toggle button\ngroup is. A press on the pressed one releases it, unless\n`disallow-empty-selection` keeps one pressed. `value` is the pressed values,\ncomma separated. A press sends a cancelable `helix-before-change` with the\nvalue it would leave, then `change`. A pressed Helix button has\n`:state(pressed)` on its own element.\n\nThe pressed state is written on the control inside each button's shadow\nroot, so the markup you rendered is never changed and a framework hydrating\nit sees what its server sent. That is also why only Helix buttons are\ntoggles: a native `<button>` or a button without a `value` stays a plain\naction button in the group, and a native one without its own\n`aria-pressed` warns once, with the runtime kind `untold-toggle`. The inner\ncontrol also carries\n`--button-group-pressed`, `1` or `0`, for a `::part(button)` rule of yours.\n\nUse Toggle Group instead for a choice that belongs in a form, or one where\nthe arrow keys choose as they move: it is a `radiogroup` of options with a\nform value, `required` and validation. A Button Group in a selection mode is\na set of actions that stay on, such as bold and italic, or a view that a\npress switches, and it submits nothing.\n\n**Keyboard.** In a selection mode the group is one tab stop: the button\nfocus was last on, then the first pressed one, then the first one.\n\n| Key | What it does |\n|---|---|\n| Right, Down | Moves to the next button, from the last back to the first. |\n| Left, Up | Moves to the button before, from the first round to the last. |\n| Home, End | Moves to the first or the last button. |\n| Space, Enter | Presses or releases the focused button. |\n\nLeft and Right swap on a right-to-left page, and a disabled button is\npassed over. Under `multiple` the group is a `toolbar`, with\n`aria-orientation` under `orientation=\"vertical\"`. Inside a toolbar it stays\na named `group`, and the toolbar's own arrow keys walk its buttons, so a\nreader meets one toolbar. Under `single` it is a `radiogroup` either way.",
|
|
10279
10511
|
"name": "HelixHeadlessButtonGroup",
|
|
10280
10512
|
"cssProperties": [
|
|
10281
10513
|
{
|
|
@@ -10290,6 +10522,16 @@
|
|
|
10290
10522
|
}
|
|
10291
10523
|
],
|
|
10292
10524
|
"members": [
|
|
10525
|
+
{
|
|
10526
|
+
"kind": "field",
|
|
10527
|
+
"name": "disallowEmptySelection",
|
|
10528
|
+
"type": {
|
|
10529
|
+
"text": "boolean"
|
|
10530
|
+
},
|
|
10531
|
+
"default": "false",
|
|
10532
|
+
"description": "Keeps at least one button pressed once one is, as React Aria's\n`disallowEmptySelection`: a press that would leave none pressed is\nrefused.",
|
|
10533
|
+
"attribute": "disallow-empty-selection"
|
|
10534
|
+
},
|
|
10293
10535
|
{
|
|
10294
10536
|
"kind": "field",
|
|
10295
10537
|
"name": "label",
|
|
@@ -10479,7 +10721,7 @@
|
|
|
10479
10721
|
"description": "Whether the button is pressed, or undefined where it is not a toggle."
|
|
10480
10722
|
}
|
|
10481
10723
|
],
|
|
10482
|
-
"description": "Says on a button's control whether it is pressed, or that it is no toggle\nat all where `pressed` is undefined. A styled tier draws the look here
|
|
10724
|
+
"description": "Says on a button's control whether it is pressed, or that it is no toggle\nat all where `pressed` is undefined. A styled tier draws the look here.\n\nUnder `single` the control is a `radio` that says so with `aria-checked`,\nand under `multiple` a toggle button that says so with `aria-pressed`."
|
|
10483
10725
|
},
|
|
10484
10726
|
{
|
|
10485
10727
|
"kind": "field",
|
|
@@ -10861,6 +11103,15 @@
|
|
|
10861
11103
|
}
|
|
10862
11104
|
],
|
|
10863
11105
|
"attributes": [
|
|
11106
|
+
{
|
|
11107
|
+
"name": "disallow-empty-selection",
|
|
11108
|
+
"type": {
|
|
11109
|
+
"text": "boolean"
|
|
11110
|
+
},
|
|
11111
|
+
"default": "false",
|
|
11112
|
+
"description": "Keeps at least one button pressed once one is, as React Aria's\n`disallowEmptySelection`: a press that would leave none pressed is\nrefused.",
|
|
11113
|
+
"fieldName": "disallowEmptySelection"
|
|
11114
|
+
},
|
|
10864
11115
|
{
|
|
10865
11116
|
"name": "label",
|
|
10866
11117
|
"type": {
|
|
@@ -12343,6 +12594,10 @@
|
|
|
12343
12594
|
"description": "The button is pending: `pending` is set.",
|
|
12344
12595
|
"name": "pending"
|
|
12345
12596
|
},
|
|
12597
|
+
{
|
|
12598
|
+
"description": "A Button Group in a selection mode has this button pressed.",
|
|
12599
|
+
"name": "pressed"
|
|
12600
|
+
},
|
|
12346
12601
|
{
|
|
12347
12602
|
"description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
|
|
12348
12603
|
"name": "settled",
|
|
@@ -43308,6 +43563,14 @@
|
|
|
43308
43563
|
"module": "src/button/root/button-root.ts"
|
|
43309
43564
|
}
|
|
43310
43565
|
},
|
|
43566
|
+
{
|
|
43567
|
+
"description": "A Button Group in a selection mode has this button pressed.",
|
|
43568
|
+
"name": "pressed",
|
|
43569
|
+
"inheritedFrom": {
|
|
43570
|
+
"name": "HelixHeadlessButton",
|
|
43571
|
+
"module": "src/button/root/button-root.ts"
|
|
43572
|
+
}
|
|
43573
|
+
},
|
|
43311
43574
|
{
|
|
43312
43575
|
"description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
|
|
43313
43576
|
"name": "settled",
|
|
@@ -77572,6 +77835,14 @@
|
|
|
77572
77835
|
"module": "src/button/root/button-root.ts"
|
|
77573
77836
|
}
|
|
77574
77837
|
},
|
|
77838
|
+
{
|
|
77839
|
+
"description": "A Button Group in a selection mode has this button pressed.",
|
|
77840
|
+
"name": "pressed",
|
|
77841
|
+
"inheritedFrom": {
|
|
77842
|
+
"name": "HelixHeadlessButton",
|
|
77843
|
+
"module": "src/button/root/button-root.ts"
|
|
77844
|
+
}
|
|
77845
|
+
},
|
|
77575
77846
|
{
|
|
77576
77847
|
"description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
|
|
77577
77848
|
"name": "settled",
|
|
@@ -84197,7 +84468,7 @@
|
|
|
84197
84468
|
"declarations": [
|
|
84198
84469
|
{
|
|
84199
84470
|
"kind": "class",
|
|
84200
|
-
"description": "Wraps one piece of content in the lightbox, such as a picture, a video frame,\nor a chart. The lightbox shows one item at a time, and the root decides\nwhich.\n\nEach item is a `group` with the role description `slide`, named by its\n`label` or, without one, by its place in the set, such as \"2 of 5\", as the\nAPG carousel pattern names a slide. The lightbox supplies both words, so they\nare translated on the lightbox.\n\nAn item that is not current is hidden and stays in the DOM, as a `TabPanel`\ndoes. Crawlers can read it, it is in the server-rendered markup, and an\n`<img>` that has decoded does not decode again when you go back to it.",
|
|
84471
|
+
"description": "Wraps one piece of content in the lightbox, such as a picture, a video frame,\nor a chart. The lightbox shows one item at a time, and the root decides\nwhich.\n\nEach item is a `group` with the role description `slide`, named by its\n`label` or, without one, by its place in the set, such as \"2 of 5\", as the\nAPG carousel pattern names a slide. The lightbox supplies both words, so they\nare translated on the lightbox. A `description`, while there is one,\ndescribes the group, so a screen reader says it with the name.\n\nAn item that is not current is hidden and stays in the DOM, as a `TabPanel`\ndoes. Crawlers can read it, it is in the server-rendered markup, and an\n`<img>` that has decoded does not decode again when you go back to it.",
|
|
84201
84472
|
"name": "HelixHeadlessLightboxItem",
|
|
84202
84473
|
"cssParts": [
|
|
84203
84474
|
{
|
|
@@ -84246,6 +84517,23 @@
|
|
|
84246
84517
|
"description": "The item's identifier. The root compares its `active` value against it.",
|
|
84247
84518
|
"attribute": "value"
|
|
84248
84519
|
},
|
|
84520
|
+
{
|
|
84521
|
+
"kind": "field",
|
|
84522
|
+
"name": "described",
|
|
84523
|
+
"type": {
|
|
84524
|
+
"text": "boolean"
|
|
84525
|
+
},
|
|
84526
|
+
"privacy": "private",
|
|
84527
|
+
"default": "false",
|
|
84528
|
+
"description": "Whether anything is slotted into `description`, which then describes the group."
|
|
84529
|
+
},
|
|
84530
|
+
{
|
|
84531
|
+
"kind": "field",
|
|
84532
|
+
"name": "readDescription",
|
|
84533
|
+
"privacy": "private",
|
|
84534
|
+
"readonly": true,
|
|
84535
|
+
"description": "Reads whether the `description` slot holds anything."
|
|
84536
|
+
},
|
|
84249
84537
|
{
|
|
84250
84538
|
"kind": "field",
|
|
84251
84539
|
"name": "tier",
|
|
@@ -84678,7 +84966,7 @@
|
|
|
84678
84966
|
"declarations": [
|
|
84679
84967
|
{
|
|
84680
84968
|
"kind": "class",
|
|
84681
|
-
"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
|
|
84969
|
+
"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, and so does a trackpad pinch or the wheel with Ctrl\nheld, about the point under the pointer. A double click or a double tap\nzooms all the way in about the point pressed and back out, and once zoomed\none pointer drags it about and the wheel moves it. `+` 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.",
|
|
84682
84970
|
"name": "HelixHeadlessLightbox",
|
|
84683
84971
|
"cssProperties": [
|
|
84684
84972
|
{
|
|
@@ -85069,6 +85357,13 @@
|
|
|
85069
85357
|
"readonly": true,
|
|
85070
85358
|
"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, })"
|
|
85071
85359
|
},
|
|
85360
|
+
{
|
|
85361
|
+
"kind": "field",
|
|
85362
|
+
"name": "phases",
|
|
85363
|
+
"privacy": "protected",
|
|
85364
|
+
"readonly": true,
|
|
85365
|
+
"default": "new OpenPhaseController(this, { mark: { entering: (on) => this.toggleState('entering', on), exiting: (on) => this.toggleState('exiting', on), }, open: () => this.open, surface: () => this.dialog, })"
|
|
85366
|
+
},
|
|
85072
85367
|
{
|
|
85073
85368
|
"kind": "field",
|
|
85074
85369
|
"name": "zoomer",
|
|
@@ -86347,6 +86642,14 @@
|
|
|
86347
86642
|
}
|
|
86348
86643
|
],
|
|
86349
86644
|
"cssStates": [
|
|
86645
|
+
{
|
|
86646
|
+
"description": "From the moment the viewer opens until its entrance has finished.",
|
|
86647
|
+
"name": "entering"
|
|
86648
|
+
},
|
|
86649
|
+
{
|
|
86650
|
+
"description": "From the moment the viewer closes until its exit has finished.",
|
|
86651
|
+
"name": "exiting"
|
|
86652
|
+
},
|
|
86350
86653
|
{
|
|
86351
86654
|
"description": "While the viewer fills the screen.",
|
|
86352
86655
|
"name": "fullscreen"
|
|
@@ -86444,7 +86747,7 @@
|
|
|
86444
86747
|
"declarations": [
|
|
86445
86748
|
{
|
|
86446
86749
|
"kind": "class",
|
|
86447
|
-
"description": "Pinch, double press and drag to zoom into the item a viewer shows, and to\nmove about it once zoomed.\n\nTwo fingers scale the item about the point between them. A double press, a
|
|
86750
|
+
"description": "Pinch, double press and drag to zoom into the item a viewer shows, and to\nmove about it once zoomed.\n\nTwo fingers scale the item about the point between them. A trackpad pinch,\nwhich the browser sends as a wheel with Ctrl held, and the wheel with Ctrl\nheld scale it about the pointer. A double press, a double click or a double\ntap, zooms all the way in about the point pressed, and back out again. One\npointer dragged across a zoomed item moves it, never so far that an edge\ncomes inside the box, and so does the wheel without Ctrl. What it reports is a scale and an\noffset from the middle of the box; drawing them is the caller's.",
|
|
86448
86751
|
"name": "ZoomController",
|
|
86449
86752
|
"members": [
|
|
86450
86753
|
{
|
|
@@ -86682,6 +86985,13 @@
|
|
|
86682
86985
|
"privacy": "private",
|
|
86683
86986
|
"readonly": true
|
|
86684
86987
|
},
|
|
86988
|
+
{
|
|
86989
|
+
"kind": "field",
|
|
86990
|
+
"name": "handleWheel",
|
|
86991
|
+
"privacy": "private",
|
|
86992
|
+
"readonly": true,
|
|
86993
|
+
"description": "A wheel with Ctrl held, which is also how the browser sends a trackpad\npinch, scales the item about the pointer. Without Ctrl, a wheel over a\nzoomed item moves it. Over an item at its own size, a plain wheel is left\nto the page."
|
|
86994
|
+
},
|
|
86685
86995
|
{
|
|
86686
86996
|
"kind": "field",
|
|
86687
86997
|
"name": "handleDouble",
|
|
@@ -148972,7 +149282,7 @@
|
|
|
148972
149282
|
"declarations": [
|
|
148973
149283
|
{
|
|
148974
149284
|
"kind": "class",
|
|
148975
|
-
"description": "Only the step's name is a button. The marker is `aria-hidden` decoration, so\nit is outside the button. The name uses `Button`, so the hover wash, the\nfocus ring, and the disabled style come from `Button`.\n\nEvery step can be pressed and fires `helix-select`. To stop the user from\nmoving to a step, set `disabled` on it.\n\nThe marker is a slot, and its fallback shows the step's state: a check for a\nfinished stage, a target for the current stage, and an empty ring for a stage\nnot reached yet. Only that one mark is rendered, so the accessibility tree\nhas no hidden marks.\n\nThe half lines on each side of the mark are drawn on the step's `::before`\nand `::after` from properties the list sets, so the step renders no extra\nelement for them.\n\nA finished stage says so in words: the name's button is described by\n`complete-label`, \"Complete\" unless you translate it, and a stage that\nbecomes complete while the page is open says it once in a polite live\nregion. The current stage's button carries `aria-current=\"step\"`, and only\nthe button, so the state is said once, on the control.",
|
|
149285
|
+
"description": "Only the step's name is a button. The marker is `aria-hidden` decoration, so\nit is outside the button. The name uses `Button`, so the hover wash, the\nfocus ring, and the disabled style come from `Button`.\n\nEvery step can be pressed and fires `helix-select`. To stop the user from\nmoving to a step, set `disabled` on it.\n\nThe marker is a slot, and its fallback shows the step's state: a check for a\nfinished stage, a target for the current stage, and an empty ring for a stage\nnot reached yet. Only that one mark is rendered, so the accessibility tree\nhas no hidden marks.\n\nThe half lines on each side of the mark are drawn on the step's `::before`\nand `::after` from properties the list sets, so the step renders no extra\nelement for them.\n\nA finished stage says so in words: the name's button is described by\n`complete-label`, \"Complete\" unless you translate it, and a stage that\nbecomes complete while the page is open says it once in a polite live\nregion. The current stage's button carries `aria-current=\"step\"`, and only\nthe button, so the state is said once, on the control.\n\nA stage's `content`, while it holds anything, is a group named by the\nstage's name, so a screen reader moving into it hears which stage it\nbelongs to.",
|
|
148976
149286
|
"name": "HelixHeadlessStep",
|
|
148977
149287
|
"cssParts": [
|
|
148978
149288
|
{
|
|
@@ -149133,6 +149443,23 @@
|
|
|
149133
149443
|
"description": "The value the step sends in `helix-select`.",
|
|
149134
149444
|
"attribute": "value"
|
|
149135
149445
|
},
|
|
149446
|
+
{
|
|
149447
|
+
"kind": "field",
|
|
149448
|
+
"name": "holding",
|
|
149449
|
+
"type": {
|
|
149450
|
+
"text": "boolean"
|
|
149451
|
+
},
|
|
149452
|
+
"privacy": "private",
|
|
149453
|
+
"default": "false",
|
|
149454
|
+
"description": "Whether anything is slotted into `content`, which makes it a named group."
|
|
149455
|
+
},
|
|
149456
|
+
{
|
|
149457
|
+
"kind": "field",
|
|
149458
|
+
"name": "readContent",
|
|
149459
|
+
"privacy": "private",
|
|
149460
|
+
"readonly": true,
|
|
149461
|
+
"description": "Reads whether the `content` slot holds anything."
|
|
149462
|
+
},
|
|
149136
149463
|
{
|
|
149137
149464
|
"kind": "field",
|
|
149138
149465
|
"name": "status",
|
|
@@ -155815,7 +156142,7 @@
|
|
|
155815
156142
|
"declarations": [
|
|
155816
156143
|
{
|
|
155817
156144
|
"kind": "class",
|
|
155818
|
-
"description": "An inactive panel is hidden and stays mounted. Anything typed into it is\nstill there when the person comes back, and the content of every panel is in\nthe server-rendered markup for crawlers, whichever tab is open.\n\nThe host is the `tabpanel` while its tab is selected, through\n`ElementInternals`, so the tab's `aria-controls` can reach it from the tab's\nshadow root. The box inside is a tab stop only while the panel holds nothing\nfocusable, as the ARIA tabs pattern and React Aria's tab panel do: Tab from\nthe tab list lands on the panel's first link or control where there is one,\nand on the panel itself where there is none.",
|
|
156145
|
+
"description": "An inactive panel is hidden and stays mounted. Anything typed into it is\nstill there when the person comes back, and the content of every panel is in\nthe server-rendered markup for crawlers, whichever tab is open.\n\nThe host is the `tabpanel` while its tab is selected, through\n`ElementInternals`, so the tab's `aria-controls` can reach it from the tab's\nshadow root. The box inside is a tab stop only while the panel holds nothing\nfocusable, as the ARIA tabs pattern and React Aria's tab panel do: Tab from\nthe tab list lands on the panel's first link or control where there is one,\nand on the panel itself where there is none.\n\n**Set `lazy` for a panel that is expensive to draw.** Its content waits in a\n`<template>` inside it, and goes into the panel the first time the panel is\nshown, so it costs nothing until a reader opens that tab. Once in, it stays.\nThe panel sends `helix-load` at the same moment, for content your code\nrenders itself.",
|
|
155819
156146
|
"name": "HelixHeadlessTabPanel",
|
|
155820
156147
|
"cssParts": [
|
|
155821
156148
|
{
|
|
@@ -155825,7 +156152,7 @@
|
|
|
155825
156152
|
],
|
|
155826
156153
|
"slots": [
|
|
155827
156154
|
{
|
|
155828
|
-
"description": "The panel's content.",
|
|
156155
|
+
"description": "The panel's content. Under `lazy`, a `<template>` holding it.",
|
|
155829
156156
|
"name": ""
|
|
155830
156157
|
}
|
|
155831
156158
|
],
|
|
@@ -155839,6 +156166,37 @@
|
|
|
155839
156166
|
"default": "''",
|
|
155840
156167
|
"description": "The name of the panel, which is the text of the tab that opens it.\n\nSet by the root, which is the only thing that sees both. No attribute,\nbecause it is coordination between elements rather than anything a consumer\nwrites: the tab already says it.\n\nA string and not a reference: an IDREF resolves only in the tree it is\nwritten in, and the tab's control is inside the tab's shadow root, which no\nreference from the light DOM can reach. `aria-label` on a `tabpanel` is how\nthe pattern names one anyway."
|
|
155841
156168
|
},
|
|
156169
|
+
{
|
|
156170
|
+
"kind": "field",
|
|
156171
|
+
"name": "lazy",
|
|
156172
|
+
"type": {
|
|
156173
|
+
"text": "boolean"
|
|
156174
|
+
},
|
|
156175
|
+
"default": "false",
|
|
156176
|
+
"description": "Whether the panel's content waits in a `<template>` until the panel is\nfirst shown.",
|
|
156177
|
+
"attribute": "lazy"
|
|
156178
|
+
},
|
|
156179
|
+
{
|
|
156180
|
+
"kind": "field",
|
|
156181
|
+
"name": "loaded",
|
|
156182
|
+
"type": {
|
|
156183
|
+
"text": "boolean"
|
|
156184
|
+
},
|
|
156185
|
+
"privacy": "private",
|
|
156186
|
+
"default": "false",
|
|
156187
|
+
"description": "Whether a `lazy` panel has put its content in."
|
|
156188
|
+
},
|
|
156189
|
+
{
|
|
156190
|
+
"kind": "method",
|
|
156191
|
+
"name": "load",
|
|
156192
|
+
"privacy": "private",
|
|
156193
|
+
"return": {
|
|
156194
|
+
"type": {
|
|
156195
|
+
"text": "void"
|
|
156196
|
+
}
|
|
156197
|
+
},
|
|
156198
|
+
"description": "Puts a `lazy` panel's content in the first time the panel is shown: the\ncontent of each `<template>` it holds, in place of the template."
|
|
156199
|
+
},
|
|
155842
156200
|
{
|
|
155843
156201
|
"kind": "field",
|
|
155844
156202
|
"name": "selected",
|
|
@@ -156222,7 +156580,26 @@
|
|
|
156222
156580
|
}
|
|
156223
156581
|
}
|
|
156224
156582
|
],
|
|
156583
|
+
"events": [
|
|
156584
|
+
{
|
|
156585
|
+
"type": {
|
|
156586
|
+
"text": "HelixLoadEvent"
|
|
156587
|
+
},
|
|
156588
|
+
"description": "Fired the first time a `lazy` panel is shown, once its template's content is in.",
|
|
156589
|
+
"name": "helix-load",
|
|
156590
|
+
"reactProp": "onhelix-load"
|
|
156591
|
+
}
|
|
156592
|
+
],
|
|
156225
156593
|
"attributes": [
|
|
156594
|
+
{
|
|
156595
|
+
"name": "lazy",
|
|
156596
|
+
"type": {
|
|
156597
|
+
"text": "boolean"
|
|
156598
|
+
},
|
|
156599
|
+
"default": "false",
|
|
156600
|
+
"description": "Whether the panel's content waits in a `<template>` until the panel is\nfirst shown.",
|
|
156601
|
+
"fieldName": "lazy"
|
|
156602
|
+
},
|
|
156226
156603
|
{
|
|
156227
156604
|
"name": "selected",
|
|
156228
156605
|
"type": {
|
|
@@ -156243,6 +156620,10 @@
|
|
|
156243
156620
|
}
|
|
156244
156621
|
],
|
|
156245
156622
|
"cssStates": [
|
|
156623
|
+
{
|
|
156624
|
+
"description": "Once a `lazy` panel has been shown and its content is in.",
|
|
156625
|
+
"name": "loaded"
|
|
156626
|
+
},
|
|
156246
156627
|
{
|
|
156247
156628
|
"description": "While its tab is the one selected.",
|
|
156248
156629
|
"name": "selected"
|
|
@@ -156303,7 +156684,7 @@
|
|
|
156303
156684
|
"declarations": [
|
|
156304
156685
|
{
|
|
156305
156686
|
"kind": "class",
|
|
156306
|
-
"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
|
|
156687
|
+
"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 enabled tab beside it, the next one\nor else the one before, and `active` says so, with `helix-activate`. Where\nthe removed tab had focus, focus moves to the tab now selected.\n\n**More tabs than fit.** With `scroll-controls`, a strip that scrolls shows a\nbutton at each end it can scroll toward, as Web Awesome's tab group does,\nand a press scrolls it most of its own length. The buttons are for the\npointer, so they are out of the tab order and hidden from screen readers;\nthe arrow keys already reach every tab, and the strip scrolls the selected\ntab into view. A strip scrolls once a stylesheet gives the `tabs` part an\n`overflow`, as the styled tier does.\n\nA tab with `dismissible` can be closed: see `Tabs.Tab`.\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.",
|
|
156307
156688
|
"name": "HelixHeadlessTabs",
|
|
156308
156689
|
"cssParts": [
|
|
156309
156690
|
{
|
|
@@ -156318,10 +156699,18 @@
|
|
|
156318
156699
|
"description": "The button that scrolls the strip toward its end, shown under `scroll-controls` while there is more that way.",
|
|
156319
156700
|
"name": "scroll-end"
|
|
156320
156701
|
},
|
|
156702
|
+
{
|
|
156703
|
+
"description": "The glyph on that button, where none is slotted.",
|
|
156704
|
+
"name": "scroll-end-mark"
|
|
156705
|
+
},
|
|
156321
156706
|
{
|
|
156322
156707
|
"description": "The button that scrolls the strip toward its start, shown under `scroll-controls` while there is more that way.",
|
|
156323
156708
|
"name": "scroll-start"
|
|
156324
156709
|
},
|
|
156710
|
+
{
|
|
156711
|
+
"description": "The glyph on that button, where none is slotted.",
|
|
156712
|
+
"name": "scroll-start-mark"
|
|
156713
|
+
},
|
|
156325
156714
|
{
|
|
156326
156715
|
"description": "The tab list.",
|
|
156327
156716
|
"name": "tabs"
|
|
@@ -156339,6 +156728,14 @@
|
|
|
156339
156728
|
{
|
|
156340
156729
|
"description": "The panels, as direct children of this element. Panels inside a wrapper are not paired with tabs, because pairing reads only the direct children.",
|
|
156341
156730
|
"name": "panels"
|
|
156731
|
+
},
|
|
156732
|
+
{
|
|
156733
|
+
"description": "Replaces the glyph on the button that scrolls the strip toward its end.",
|
|
156734
|
+
"name": "scroll-end-icon"
|
|
156735
|
+
},
|
|
156736
|
+
{
|
|
156737
|
+
"description": "Replaces the glyph on the button that scrolls the strip toward its start.",
|
|
156738
|
+
"name": "scroll-start-icon"
|
|
156342
156739
|
}
|
|
156343
156740
|
],
|
|
156344
156741
|
"members": [
|
|
@@ -156518,6 +156915,31 @@
|
|
|
156518
156915
|
"default": "[]",
|
|
156519
156916
|
"description": "The values of the tabs the last pairing read, to tell a removed tab from one not yet here."
|
|
156520
156917
|
},
|
|
156918
|
+
{
|
|
156919
|
+
"kind": "method",
|
|
156920
|
+
"name": "beside",
|
|
156921
|
+
"privacy": "private",
|
|
156922
|
+
"return": {
|
|
156923
|
+
"type": {
|
|
156924
|
+
"text": "HelixHeadlessTab | undefined"
|
|
156925
|
+
}
|
|
156926
|
+
},
|
|
156927
|
+
"parameters": [
|
|
156928
|
+
{
|
|
156929
|
+
"name": "gone",
|
|
156930
|
+
"type": {
|
|
156931
|
+
"text": "string"
|
|
156932
|
+
}
|
|
156933
|
+
},
|
|
156934
|
+
{
|
|
156935
|
+
"name": "tabs",
|
|
156936
|
+
"type": {
|
|
156937
|
+
"text": "HelixHeadlessTab[]"
|
|
156938
|
+
}
|
|
156939
|
+
}
|
|
156940
|
+
],
|
|
156941
|
+
"description": "The enabled tab nearest to where a removed one stood: the next ones\nnearest first, then the ones before it nearest first. The same order a\ndismissed tab hands focus in."
|
|
156942
|
+
},
|
|
156521
156943
|
{
|
|
156522
156944
|
"kind": "method",
|
|
156523
156945
|
"name": "sync",
|
|
@@ -156601,7 +157023,26 @@
|
|
|
156601
157023
|
}
|
|
156602
157024
|
}
|
|
156603
157025
|
],
|
|
156604
|
-
"description": "One of the two scroll buttons, pointing the way it scrolls.
|
|
157026
|
+
"description": "One of the two scroll buttons, with the glyph pointing the way it scrolls."
|
|
157027
|
+
},
|
|
157028
|
+
{
|
|
157029
|
+
"kind": "method",
|
|
157030
|
+
"name": "renderScrollIcon",
|
|
157031
|
+
"privacy": "protected",
|
|
157032
|
+
"return": {
|
|
157033
|
+
"type": {
|
|
157034
|
+
"text": "TemplateResult"
|
|
157035
|
+
}
|
|
157036
|
+
},
|
|
157037
|
+
"parameters": [
|
|
157038
|
+
{
|
|
157039
|
+
"name": "toward",
|
|
157040
|
+
"type": {
|
|
157041
|
+
"text": "1 | -1"
|
|
157042
|
+
}
|
|
157043
|
+
}
|
|
157044
|
+
],
|
|
157045
|
+
"description": "The glyph on a scroll button, behind a seam: slot fallback, so a consumer\nreplaces it by slotting, and a method, so a tier above replaces it by\noverriding. A caret along the line is mirrored on a right-to-left page, and\none down a column is not."
|
|
156605
157046
|
},
|
|
156606
157047
|
{
|
|
156607
157048
|
"kind": "field",
|
|
@@ -157229,13 +157670,17 @@
|
|
|
157229
157670
|
"declarations": [
|
|
157230
157671
|
{
|
|
157231
157672
|
"kind": "class",
|
|
157232
|
-
"description": "A tab is an element, because it manages selection and its own tab stop.\n\nWith an `href`, the tab is a link: `role=\"tab\"` on an `<a>`, which a press,\nEnter and the browser's own link gestures follow. `helix-select` is sent\nfirst, and canceling it keeps the browser from following, so a client-side\nrouter follows it instead.\n\nWith `dismissible`, the tab can be closed, as Web Awesome's closable tab\ncan: a press on its `dismiss` mark, or Delete or Backspace while the tab\nhas focus, sends `helix-dismiss`. The tab does not remove itself, because\nyour code owns the set, so remove the tab and its panel in your handler.\nFocus moves to the tab beside it, and the tab
|
|
157673
|
+
"description": "A tab is an element, because it manages selection and its own tab stop.\n\nWith an `href`, the tab is a link: `role=\"tab\"` on an `<a>`, which a press,\nEnter and the browser's own link gestures follow. `helix-select` is sent\nfirst, and canceling it keeps the browser from following, so a client-side\nrouter follows it instead.\n\nWith `dismissible`, the tab can be closed, as Web Awesome's closable tab\ncan: a press on its `dismiss` mark, or Delete or Backspace while the tab\nhas focus, sends `helix-dismiss`. The tab does not remove itself, because\nyour code owns the set, so remove the tab and its panel in your handler.\nFocus moves to the tab beside it, and where the tab was selected, the tab\nset selects that same tab.\nThe tab says the key through `aria-keyshortcuts`, and the mark is for the\npointer, hidden from screen readers.",
|
|
157233
157674
|
"name": "HelixHeadlessTab",
|
|
157234
157675
|
"cssParts": [
|
|
157235
157676
|
{
|
|
157236
157677
|
"description": "The mark a pointer presses to close a `dismissible` tab.",
|
|
157237
157678
|
"name": "dismiss"
|
|
157238
157679
|
},
|
|
157680
|
+
{
|
|
157681
|
+
"description": "The glyph on that mark, where none is slotted.",
|
|
157682
|
+
"name": "dismiss-mark"
|
|
157683
|
+
},
|
|
157239
157684
|
{
|
|
157240
157685
|
"description": "The tab itself.",
|
|
157241
157686
|
"name": "tab"
|
|
@@ -157245,6 +157690,10 @@
|
|
|
157245
157690
|
{
|
|
157246
157691
|
"description": "The tab's label.",
|
|
157247
157692
|
"name": ""
|
|
157693
|
+
},
|
|
157694
|
+
{
|
|
157695
|
+
"description": "Replaces the glyph on the mark that closes a `dismissible` tab.",
|
|
157696
|
+
"name": "dismiss-icon"
|
|
157248
157697
|
}
|
|
157249
157698
|
],
|
|
157250
157699
|
"members": [
|
|
@@ -169658,7 +170107,7 @@
|
|
|
169658
170107
|
"declarations": [
|
|
169659
170108
|
{
|
|
169660
170109
|
"kind": "class",
|
|
169661
|
-
"description": "Each message is an element because it has a timeout, a tone, a dismiss\ncontrol, and a lifetime that pauses.\n\n**Each item runs its own timer.** A timer held by the region would restart\nwith each new message, and the last of three messages would stay for nine\nseconds. It pauses while the pointer or focus is on the message, and while
|
|
170110
|
+
"description": "Each message is an element because it has a timeout, a tone, a dismiss\ncontrol, and a lifetime that pauses.\n\n**Each item runs its own timer.** A timer held by the region would restart\nwith each new message, and the last of three messages would stay for nine\nseconds. It pauses while the pointer or focus is on the message or anywhere\nin the region's stack, and while the page is hidden, so a message is not\nspent in a background tab.\n\n**Each message is an `alertdialog` named by its words**, which is how a reader\nwho moves into the stack hears which message they are on. Give it a\n`heading` and a `description`, and the heading names it and the description\ndescribes it, for a message with a title and a line of detail. The region\nsays each message once as it arrives, a `danger` one assertively, so a\nmessage is never a live region of its own.\n\nA touch or a pen swipes a message toward the end of the line, or toward the\nedge the region's `swipe-direction` names, and past halfway, or quickly,\ndismisses it through the same `helix-dismiss` as its control. While it\nmoves, the distance is on the `item` part as `--toast-swipe-x` or\n`--toast-swipe-y`.\n\n**Escape dismisses the message holding focus**, through the same\n`helix-dismiss`, and focus moves to the next message.\n\n**Messages are inverted by default.** The item flips `color-scheme`, so a new\nmessage stands out from the page without using a color that carries meaning.",
|
|
169662
170111
|
"name": "HelixHeadlessToastItem",
|
|
169663
170112
|
"cssProperties": [
|
|
169664
170113
|
{
|
|
@@ -169668,6 +170117,10 @@
|
|
|
169668
170117
|
{
|
|
169669
170118
|
"description": "How far a swipe has moved the message across, in pixels, toward the right.",
|
|
169670
170119
|
"name": "--toast-swipe-x"
|
|
170120
|
+
},
|
|
170121
|
+
{
|
|
170122
|
+
"description": "How far a swipe has moved the message down, in pixels, under a `swipe-direction` of `top` or `bottom`.",
|
|
170123
|
+
"name": "--toast-swipe-y"
|
|
169671
170124
|
}
|
|
169672
170125
|
],
|
|
169673
170126
|
"cssParts": [
|
|
@@ -169771,12 +170224,43 @@
|
|
|
169771
170224
|
"description": "Whether the message is still showing.\n\nThe item always applies: it goes when it is asked to, having announced\n`helix-dismiss` first, and a consumer who owns the list refuses that event\nto take the decision instead.\n\n**No `default-open`, unlike the four mixins.** A `default-` seed exists so\nmarkup can choose a starting state without claiming ownership, and there is\nonly one starting state that makes sense: a message that has been rendered\nis showing. An attribute whose only legal value is the default is an\nattribute nobody can use.",
|
|
169772
170225
|
"attribute": "open"
|
|
169773
170226
|
},
|
|
170227
|
+
{
|
|
170228
|
+
"kind": "field",
|
|
170229
|
+
"name": "regionHolding",
|
|
170230
|
+
"type": {
|
|
170231
|
+
"text": "boolean"
|
|
170232
|
+
},
|
|
170233
|
+
"privacy": "private",
|
|
170234
|
+
"default": "false",
|
|
170235
|
+
"description": "Whether the timer is held for `regionHeld`, so the hold is let go once."
|
|
170236
|
+
},
|
|
170237
|
+
{
|
|
170238
|
+
"kind": "method",
|
|
170239
|
+
"name": "holdForRegion",
|
|
170240
|
+
"privacy": "private",
|
|
170241
|
+
"return": {
|
|
170242
|
+
"type": {
|
|
170243
|
+
"text": "void"
|
|
170244
|
+
}
|
|
170245
|
+
},
|
|
170246
|
+
"description": "Holds the timer while the region asks, and lets it go once."
|
|
170247
|
+
},
|
|
170248
|
+
{
|
|
170249
|
+
"kind": "field",
|
|
170250
|
+
"name": "swipeTo",
|
|
170251
|
+
"type": {
|
|
170252
|
+
"text": "ReturnType<typeof swipeEdge>"
|
|
170253
|
+
},
|
|
170254
|
+
"privacy": "private",
|
|
170255
|
+
"description": "The physical edge a swipe dismisses toward.",
|
|
170256
|
+
"readonly": true
|
|
170257
|
+
},
|
|
169774
170258
|
{
|
|
169775
170259
|
"kind": "field",
|
|
169776
170260
|
"name": "swipes",
|
|
169777
170261
|
"privacy": "protected",
|
|
169778
170262
|
"readonly": true,
|
|
169779
|
-
"default": "new SwipeController(this, { axis: () => (this.open ?
|
|
170263
|
+
"default": "new SwipeController(this, { axis: () => (this.open ? swipeAxis(this.swipeTo) : undefined), end: (dx, dy, vx, vy) => { const edge = this.swipeTo const box = this.partNamed('item')?.getBoundingClientRect() const across = swipeAxis(edge) === 'x' const shown = settleSwipe({ points: [1], size: (across ? box?.width : box?.height) ?? 0, travel: Math.max(0, towardEdge(edge, dx, dy)), velocity: towardEdge(edge, vx, vy), }) if (shown === 0 && this.dismiss()) { return } this.slide(0) }, move: (dx, dy) => this.slide(Math.max(0, towardEdge(this.swipeTo, dx, dy))), start: (_target, event) => event.pointerType !== 'mouse', surface: () => this.partNamed('item'), })"
|
|
169780
170264
|
},
|
|
169781
170265
|
{
|
|
169782
170266
|
"kind": "method",
|
|
@@ -169795,7 +170279,7 @@
|
|
|
169795
170279
|
}
|
|
169796
170280
|
}
|
|
169797
170281
|
],
|
|
169798
|
-
"description": "Writes how far a swipe has moved the message toward
|
|
170282
|
+
"description": "Writes how far a swipe has moved the message toward its edge."
|
|
169799
170283
|
},
|
|
169800
170284
|
{
|
|
169801
170285
|
"kind": "field",
|
|
@@ -170548,7 +171032,7 @@
|
|
|
170548
171032
|
"name": "closed"
|
|
170549
171033
|
},
|
|
170550
171034
|
{
|
|
170551
|
-
"description": "The dismiss timer is paused, while a pointer or focus is on the message, or while the page is hidden.",
|
|
171035
|
+
"description": "The dismiss timer is paused, while a pointer or focus is on the message or in the stack, or while the page is hidden.",
|
|
170552
171036
|
"name": "paused"
|
|
170553
171037
|
},
|
|
170554
171038
|
{
|
|
@@ -170614,7 +171098,7 @@
|
|
|
170614
171098
|
"declarations": [
|
|
170615
171099
|
{
|
|
170616
171100
|
"kind": "class",
|
|
170617
|
-
"description": "The region and its items are one family because a live region must be in the\ndocument before a message is added to it. Assistive technology often does not\nannounce a region that arrives already holding its message. `Radio.Group` is\npart of its family for the same reason.\n\n**The region is a landmark named by `label`, and it says each message once\nas it arrives**: a `danger` message assertively, and every other one\npolitely. It says the word for the tone, the heading, the description and\nthe text, and not the actions, through two live regions of its own, the\n`live` parts, which it empties again a moment later. The stack itself is not\na live region, so a message is never said twice, and changing the words of a\nmessage already showing says nothing. Each message is an `alertdialog` named\nby its words, so a reader who moves into the stack hears which message they\nare on.\n\n**`hotkey` takes focus to the stack and back**, F8 unless you set it, and\n`label` says which key: `{hotkey}` in it is filled in, so the default name\nis \"Notifications (F8)\". Pressed while focus is in the stack, it gives focus\nback to where it was.\n\n**The region never creates or removes items.** You render items and remove\nthem. An item requests closing with a cancelable `helix-dismiss` event. A\ndismissed item hides itself and stays in the DOM, so your framework's state\nand the DOM stay in sync. It hides on its own unless you set `open`, which\nmakes the state yours.\n\n**`add()` shows a message from script**, for a page with no framework state\nto render them from: it appends a message of the region's own tier and\nremoves it once it has been dismissed and has finished leaving. Messages\nyou render yourself stay yours, and the region never removes them. A touch\nor a pen swipes a message away toward the end of the line.\n\n**The stack is in the top layer.** The `region` part is a `popover=\"manual\"`\nshown while a message is showing, and shown again above a modal dialog that\nopened after it. Position the `region` part, which is the box in the top\nlayer. While a modal `Dialog`, `Drawer` or `Lightbox` is open, the browser\nmakes everything outside it inert, the stack included, so a message stays\nvisible and its actions cannot be pressed. Where the browser has\n`ariaNotify`, a message that arrives then is announced through it. For a\nmessage with an action, render a second region inside the dialog.\n\nWhen a message with focus inside it is dismissed, focus moves to the next\nmessage, then the one before it, then back to where it was before it entered\nthe stack.\n\n**`max-visible` limits how many messages show at once**, as Zag's `max`\ndoes. The messages after that many, in document order, wait: each is hidden,\nits timer has not started, and the region says it once it shows, when a\nmessage before it goes. A waiting message has `:state(waiting)`.\n\n**Keyboard.**\n\n| Key | What it does |\n|---|---|\n| F8, or your `hotkey` | Moves focus to the first control in the stack, and back to where it was when pressed in the stack. |\n| Tab, Shift+Tab | Moves between the controls of the messages. |\n| Escape | Dismisses the message holding focus. Focus moves to the next message, then the one before it, then back to where it was. |",
|
|
171101
|
+
"description": "The region and its items are one family because a live region must be in the\ndocument before a message is added to it. Assistive technology often does not\nannounce a region that arrives already holding its message. `Radio.Group` is\npart of its family for the same reason.\n\n**The region is a landmark named by `label`, and it says each message once\nas it arrives**: a `danger` message assertively, and every other one\npolitely. It says the word for the tone, the heading, the description and\nthe text, and not the actions, through two live regions of its own, the\n`live` parts, which it empties again a moment later. The stack itself is not\na live region, so a message is never said twice, and changing the words of a\nmessage already showing says nothing. Each message is an `alertdialog` named\nby its words, so a reader who moves into the stack hears which message they\nare on.\n\n**`hotkey` takes focus to the stack and back**, F8 unless you set it, and\n`label` says which key: `{hotkey}` in it is filled in, so the default name\nis \"Notifications (F8)\". Pressed while focus is in the stack, it gives focus\nback to where it was.\n\n**The region never creates or removes items.** You render items and remove\nthem. An item requests closing with a cancelable `helix-dismiss` event. A\ndismissed item hides itself and stays in the DOM, so your framework's state\nand the DOM stay in sync. It hides on its own unless you set `open`, which\nmakes the state yours.\n\n**`add()` shows a message from script**, for a page with no framework state\nto render them from: it appends a message of the region's own tier and\nremoves it once it has been dismissed and has finished leaving. Messages\nyou render yourself stay yours, and the region never removes them. A touch\nor a pen swipes a message away toward the end of the line, or toward the\nedge `swipe-direction` names.\n\n**Every message's timer waits while a pointer or focus is in the stack**, as\nReact Aria's and Radix's regions do, so a reader moving from one message to\nthe next does not lose the one behind them.\n\n**The stack is in the top layer.** The `region` part is a `popover=\"manual\"`\nshown while a message is showing, and shown again above a modal dialog that\nopened after it. Position the `region` part, which is the box in the top\nlayer. While a modal `Dialog`, `Drawer` or `Lightbox` is open, the browser\nmakes everything outside it inert, the stack included, so a message stays\nvisible and its actions cannot be pressed. Where the browser has\n`ariaNotify`, a message that arrives then is announced through it. For a\nmessage with an action, render a second region inside the dialog.\n\nWhen a message with focus inside it is dismissed, focus moves to the next\nmessage, then the one before it, then back to where it was before it entered\nthe stack.\n\n**`max-visible` limits how many messages show at once**, as Zag's `max`\ndoes. The messages after that many, in document order, wait: each is hidden,\nits timer has not started, and the region says it once it shows, when a\nmessage before it goes. A waiting message has `:state(waiting)`.\n\n**Keyboard.**\n\n| Key | What it does |\n|---|---|\n| F8, or your `hotkey` | Moves focus to the first control in the stack, and back to where it was when pressed in the stack. |\n| Tab, Shift+Tab | Moves between the controls of the messages. |\n| Escape | Dismisses the message holding focus. Focus moves to the next message, then the one before it, then back to where it was. |",
|
|
170618
171102
|
"name": "HelixHeadlessToast",
|
|
170619
171103
|
"cssParts": [
|
|
170620
171104
|
{
|
|
@@ -170685,6 +171169,15 @@
|
|
|
170685
171169
|
"attribute": "placement",
|
|
170686
171170
|
"reflects": true
|
|
170687
171171
|
},
|
|
171172
|
+
{
|
|
171173
|
+
"kind": "field",
|
|
171174
|
+
"name": "swipeDirection",
|
|
171175
|
+
"type": {
|
|
171176
|
+
"text": "'bottom' | 'end' | 'start' | 'top' | undefined"
|
|
171177
|
+
},
|
|
171178
|
+
"description": "The edge a touch or a pen swipes a message toward to dismiss it: `end`,\nthe end of the line, or `start`, `top` or `bottom`. Unset is `end`.",
|
|
171179
|
+
"attribute": "swipe-direction"
|
|
171180
|
+
},
|
|
170688
171181
|
{
|
|
170689
171182
|
"kind": "field",
|
|
170690
171183
|
"name": "said",
|
|
@@ -170860,6 +171353,56 @@
|
|
|
170860
171353
|
"description": "The messages that are showing, in order.",
|
|
170861
171354
|
"readonly": true
|
|
170862
171355
|
},
|
|
171356
|
+
{
|
|
171357
|
+
"kind": "field",
|
|
171358
|
+
"name": "pointerIn",
|
|
171359
|
+
"type": {
|
|
171360
|
+
"text": "boolean"
|
|
171361
|
+
},
|
|
171362
|
+
"privacy": "private",
|
|
171363
|
+
"default": "false",
|
|
171364
|
+
"description": "Whether a pointer is over the stack."
|
|
171365
|
+
},
|
|
171366
|
+
{
|
|
171367
|
+
"kind": "field",
|
|
171368
|
+
"name": "focusIn",
|
|
171369
|
+
"type": {
|
|
171370
|
+
"text": "boolean"
|
|
171371
|
+
},
|
|
171372
|
+
"privacy": "private",
|
|
171373
|
+
"default": "false",
|
|
171374
|
+
"description": "Whether focus is in the stack."
|
|
171375
|
+
},
|
|
171376
|
+
{
|
|
171377
|
+
"kind": "method",
|
|
171378
|
+
"name": "inform",
|
|
171379
|
+
"privacy": "private",
|
|
171380
|
+
"return": {
|
|
171381
|
+
"type": {
|
|
171382
|
+
"text": "void"
|
|
171383
|
+
}
|
|
171384
|
+
},
|
|
171385
|
+
"description": "Tells every message whether the stack holds its timer and which way it\nswipes, which only the region knows."
|
|
171386
|
+
},
|
|
171387
|
+
{
|
|
171388
|
+
"kind": "field",
|
|
171389
|
+
"name": "handlePointerEnter",
|
|
171390
|
+
"privacy": "private",
|
|
171391
|
+
"readonly": true
|
|
171392
|
+
},
|
|
171393
|
+
{
|
|
171394
|
+
"kind": "field",
|
|
171395
|
+
"name": "handlePointerLeave",
|
|
171396
|
+
"privacy": "private",
|
|
171397
|
+
"readonly": true
|
|
171398
|
+
},
|
|
171399
|
+
{
|
|
171400
|
+
"kind": "field",
|
|
171401
|
+
"name": "handleFocusOut",
|
|
171402
|
+
"privacy": "private",
|
|
171403
|
+
"readonly": true,
|
|
171404
|
+
"description": "Focus leaving the stack, and not moving between its messages."
|
|
171405
|
+
},
|
|
170863
171406
|
{
|
|
170864
171407
|
"kind": "field",
|
|
170865
171408
|
"name": "held",
|
|
@@ -171366,6 +171909,14 @@
|
|
|
171366
171909
|
},
|
|
171367
171910
|
"description": "Which corner or edge the stack sits at.\n\nNamed here rather than on each message, because where a page puts its\ntoasts is a fact about the page: a stack whose members disagreed about\nwhere they were would not be a stack.\n\n**Six corners in one word, where `Carousel` splits the same question in\ntwo.** That family takes a placement and an alignment, and argues at its own\ndeclaration that one attribute naming both facts multiplies rather than\ncomposing. It is right there and wrong here, and the difference is the\nshape of the product. A carousel's is ragged: its `overlay` belongs to no\nedge at all, and its two groups of chrome move independently, shipping\ndifferent defaults so they do not land on each other, which is what makes\nrewriting one to move the other a real cost. A stack's is two edges by\nthree alignments, every pair real and every pair named this way by every\ntoast a reader has already met. Fusing spells the domain out and loses\nnothing; a stack has one position and takes it once.\n\n**Optional, and bottom-end is the absence of it.** Reflecting *and*\ndefaulting is the pair that writes onto a host: every toast region anybody\nrendered would gain a `placement=\"bottom-end\"` nobody typed, which a React\nconsumer's server markup does not have. A sheet carries the resting\narrangement in its own `:host` rule and the selectors describe only the\ndepartures, which is what `orientation` does.",
|
|
171368
171911
|
"fieldName": "placement"
|
|
171912
|
+
},
|
|
171913
|
+
{
|
|
171914
|
+
"name": "swipe-direction",
|
|
171915
|
+
"type": {
|
|
171916
|
+
"text": "'bottom' | 'end' | 'start' | 'top' | undefined"
|
|
171917
|
+
},
|
|
171918
|
+
"description": "The edge a touch or a pen swipes a message toward to dismiss it: `end`,\nthe end of the line, or `start`, `top` or `bottom`. Unset is `end`.",
|
|
171919
|
+
"fieldName": "swipeDirection"
|
|
171369
171920
|
}
|
|
171370
171921
|
],
|
|
171371
171922
|
"superclass": {
|
|
@@ -176018,7 +176569,7 @@
|
|
|
176018
176569
|
"declarations": [
|
|
176019
176570
|
{
|
|
176020
176571
|
"kind": "class",
|
|
176021
|
-
"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`.",
|
|
176572
|
+
"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**A stop's `effect` runs as the tour reaches it**, before it is shown, and\nthe stop waits for a promise it returns, with `:state(preparing)` on the\ntour meanwhile. A function it returns runs when the tour leaves the stop.\n\n**A press outside the current stop and its target does nothing by\ndefault**, so a reader can use the page the tour is describing. Set\n`outside-press=\"close\"` to end the tour on one, through `helix-before-close`\nas Skip does, or `outside-press=\"block\"` to refuse it, so the stop and its\ntarget are all a pointer can reach while the tour runs, as Zag's\n`preventInteraction` does.\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`.",
|
|
176022
176573
|
"name": "HelixHeadlessTour",
|
|
176023
176574
|
"cssProperties": [
|
|
176024
176575
|
{
|
|
@@ -176134,6 +176685,15 @@
|
|
|
176134
176685
|
"description": "Label for the control that goes on.",
|
|
176135
176686
|
"attribute": "next-label"
|
|
176136
176687
|
},
|
|
176688
|
+
{
|
|
176689
|
+
"kind": "field",
|
|
176690
|
+
"name": "outsidePress",
|
|
176691
|
+
"type": {
|
|
176692
|
+
"text": "'block' | 'close' | undefined"
|
|
176693
|
+
},
|
|
176694
|
+
"description": "What a press outside the current stop and its target does while the tour\nruns. Unset, nothing: the page stays usable. `close` ends the tour, as\nSkip does, and `block` refuses the press.",
|
|
176695
|
+
"attribute": "outside-press"
|
|
176696
|
+
},
|
|
176137
176697
|
{
|
|
176138
176698
|
"kind": "field",
|
|
176139
176699
|
"name": "progress",
|
|
@@ -176334,6 +176894,50 @@
|
|
|
176334
176894
|
"privacy": "private",
|
|
176335
176895
|
"readonly": true
|
|
176336
176896
|
},
|
|
176897
|
+
{
|
|
176898
|
+
"kind": "field",
|
|
176899
|
+
"name": "handleOutside",
|
|
176900
|
+
"privacy": "private",
|
|
176901
|
+
"readonly": true,
|
|
176902
|
+
"description": "Answers a press outside the current stop and its target, as\n`outside-press` asks. A press on the tour's own parts, the stop or the\ntarget is the reader using the tour."
|
|
176903
|
+
},
|
|
176904
|
+
{
|
|
176905
|
+
"kind": "field",
|
|
176906
|
+
"name": "entered",
|
|
176907
|
+
"type": {
|
|
176908
|
+
"text": "{ leave?: () => void; stop: HelixHeadlessTourStop } | undefined"
|
|
176909
|
+
},
|
|
176910
|
+
"privacy": "private",
|
|
176911
|
+
"description": "The stop whose `effect` has run, and the function to run on leaving it."
|
|
176912
|
+
},
|
|
176913
|
+
{
|
|
176914
|
+
"kind": "field",
|
|
176915
|
+
"name": "preparing",
|
|
176916
|
+
"type": {
|
|
176917
|
+
"text": "HelixHeadlessTourStop | undefined"
|
|
176918
|
+
},
|
|
176919
|
+
"privacy": "private",
|
|
176920
|
+
"description": "The stop held back while its `effect` settles."
|
|
176921
|
+
},
|
|
176922
|
+
{
|
|
176923
|
+
"kind": "method",
|
|
176924
|
+
"name": "enter",
|
|
176925
|
+
"privacy": "private",
|
|
176926
|
+
"return": {
|
|
176927
|
+
"type": {
|
|
176928
|
+
"text": "void"
|
|
176929
|
+
}
|
|
176930
|
+
},
|
|
176931
|
+
"parameters": [
|
|
176932
|
+
{
|
|
176933
|
+
"name": "stop",
|
|
176934
|
+
"type": {
|
|
176935
|
+
"text": "HelixHeadlessTourStop | undefined"
|
|
176936
|
+
}
|
|
176937
|
+
}
|
|
176938
|
+
],
|
|
176939
|
+
"description": "Runs the current stop's `effect` as the tour reaches it, and the last\none's leaving function as it leaves, and holds the stop back while a\npromise settles."
|
|
176940
|
+
},
|
|
176337
176941
|
{
|
|
176338
176942
|
"kind": "field",
|
|
176339
176943
|
"name": "revealed",
|
|
@@ -177096,6 +177700,14 @@
|
|
|
177096
177700
|
"description": "Label for the control that goes on.",
|
|
177097
177701
|
"fieldName": "nextLabel"
|
|
177098
177702
|
},
|
|
177703
|
+
{
|
|
177704
|
+
"name": "outside-press",
|
|
177705
|
+
"type": {
|
|
177706
|
+
"text": "'block' | 'close' | undefined"
|
|
177707
|
+
},
|
|
177708
|
+
"description": "What a press outside the current stop and its target does while the tour\nruns. Unset, nothing: the page stays usable. `close` ends the tour, as\nSkip does, and `block` refuses the press.",
|
|
177709
|
+
"fieldName": "outsidePress"
|
|
177710
|
+
},
|
|
177099
177711
|
{
|
|
177100
177712
|
"name": "progress",
|
|
177101
177713
|
"type": {
|
|
@@ -177163,6 +177775,10 @@
|
|
|
177163
177775
|
"description": "While the tour is running.",
|
|
177164
177776
|
"name": "open"
|
|
177165
177777
|
},
|
|
177778
|
+
{
|
|
177779
|
+
"description": "While the tour waits for the current stop's `effect` before showing the stop.",
|
|
177780
|
+
"name": "preparing"
|
|
177781
|
+
},
|
|
177166
177782
|
{
|
|
177167
177783
|
"description": "While the tour waits at a `wait` stop for its target to be on the page.",
|
|
177168
177784
|
"name": "waiting"
|
|
@@ -177241,7 +177857,7 @@
|
|
|
177241
177857
|
"declarations": [
|
|
177242
177858
|
{
|
|
177243
177859
|
"kind": "class",
|
|
177244
|
-
"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.",
|
|
177860
|
+
"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**Set `effect` to prepare the page for a stop**, such as opening the menu\nit points into or loading what it describes. It is a function, set from\nscript, that the tour runs as it reaches the stop. Return a promise and the\nstop waits for it, and the tour has `:state(preparing)` meanwhile; return a\nfunction, or resolve to one, and the tour runs it when it leaves the stop.\nZag's tour step has the same `effect`.\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.",
|
|
177245
177861
|
"name": "HelixHeadlessTourStop",
|
|
177246
177862
|
"cssParts": [
|
|
177247
177863
|
{
|
|
@@ -177415,6 +178031,14 @@
|
|
|
177415
178031
|
"words": true
|
|
177416
178032
|
}
|
|
177417
178033
|
},
|
|
178034
|
+
{
|
|
178035
|
+
"kind": "field",
|
|
178036
|
+
"name": "effect",
|
|
178037
|
+
"type": {
|
|
178038
|
+
"text": "TourStopEffect | undefined"
|
|
178039
|
+
},
|
|
178040
|
+
"description": "Run as the tour reaches the stop, before it is shown: see the description\nabove. A function, so it is set from script and has no attribute."
|
|
178041
|
+
},
|
|
177418
178042
|
{
|
|
177419
178043
|
"kind": "field",
|
|
177420
178044
|
"name": "first",
|
|
@@ -177512,6 +178136,13 @@
|
|
|
177512
178136
|
"privacy": "private",
|
|
177513
178137
|
"description": "The side of its target the panel last landed on, which names the arrow's\nsecond part. Undefined until the first placement, which the server never\nmakes."
|
|
177514
178138
|
},
|
|
178139
|
+
{
|
|
178140
|
+
"kind": "field",
|
|
178141
|
+
"name": "phases",
|
|
178142
|
+
"privacy": "protected",
|
|
178143
|
+
"readonly": true,
|
|
178144
|
+
"default": "new OpenPhaseController(this, { mark: { entering: (on) => this.toggleState('entering', on), exiting: (on) => this.toggleState('exiting', on), }, open: () => this.current && this.type !== 'wait', surface: () => this.partNamed('bubble'), })"
|
|
178145
|
+
},
|
|
177515
178146
|
{
|
|
177516
178147
|
"kind": "field",
|
|
177517
178148
|
"name": "target",
|
|
@@ -178042,6 +178673,14 @@
|
|
|
178042
178673
|
}
|
|
178043
178674
|
],
|
|
178044
178675
|
"cssStates": [
|
|
178676
|
+
{
|
|
178677
|
+
"description": "From the moment the stop is shown until its entrance has finished.",
|
|
178678
|
+
"name": "entering"
|
|
178679
|
+
},
|
|
178680
|
+
{
|
|
178681
|
+
"description": "From the moment the stop is left until its exit has finished.",
|
|
178682
|
+
"name": "exiting"
|
|
178683
|
+
},
|
|
178045
178684
|
{
|
|
178046
178685
|
"description": "The panel sits below its target.",
|
|
178047
178686
|
"name": "placed-bottom"
|
|
@@ -188884,6 +189523,6 @@
|
|
|
188884
189523
|
],
|
|
188885
189524
|
"helix": {
|
|
188886
189525
|
"package": "@fusion.dev/helix-headless",
|
|
188887
|
-
"version": "0.
|
|
189526
|
+
"version": "0.159.0"
|
|
188888
189527
|
}
|
|
188889
189528
|
}
|