@taprootio/espalier 2.1.3 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +2019 -94
- package/dist/checkbox/esp-checkbox-group.js +4 -4
- package/dist/checkbox/esp-checkbox.js +3 -3
- package/dist/date-picker/esp-date-picker.js +17 -17
- package/dist/flyout/esp-flyout.d.ts +393 -0
- package/dist/flyout/esp-flyout.js +153 -0
- package/dist/font-picker/esp-font-picker.js +3 -3
- package/dist/form-item/esp-form-item.d.ts +52 -0
- package/dist/form-item/esp-form-item.js +27 -7
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1 -1
- package/dist/input/esp-input.js +4 -4
- package/dist/page/esp-page.d.ts +20 -1
- package/dist/page/esp-page.js +90 -17
- package/dist/pickers/esp-picker-base.js +1 -1
- package/dist/radio-button/esp-radio-button-group.js +3 -3
- package/dist/radio-button/esp-radio-button.js +4 -4
- package/dist/shared/bus-events.d.ts +18 -1
- package/dist/shared/events.d.ts +13 -0
- package/dist/shared/events.js +1 -1
- package/dist/shared/flyout-events.d.ts +87 -0
- package/dist/shared/flyout-events.js +1 -0
- package/dist/shared/form-field-description-controller.js +1 -0
- package/dist/shared/overlay-controller.js +1 -1
- package/dist/slider/esp-slider.js +2 -2
- package/dist/switch/esp-switch.js +3 -3
- package/dist/textarea/esp-textarea.js +1 -1
- package/dist/toaster/esp-toaster.d.ts +21 -0
- package/dist/toaster/esp-toaster.js +9 -9
- package/espalier.token-manifest.json +61 -1
- package/package.json +2 -1
package/custom-elements.json
CHANGED
|
@@ -135,6 +135,14 @@
|
|
|
135
135
|
"module": "dist/color-picker/esp-color-picker.js"
|
|
136
136
|
}
|
|
137
137
|
},
|
|
138
|
+
{
|
|
139
|
+
"kind": "js",
|
|
140
|
+
"name": "*",
|
|
141
|
+
"declaration": {
|
|
142
|
+
"name": "*",
|
|
143
|
+
"module": "dist/flyout/esp-flyout.js"
|
|
144
|
+
}
|
|
145
|
+
},
|
|
138
146
|
{
|
|
139
147
|
"kind": "js",
|
|
140
148
|
"name": "*",
|
|
@@ -567,6 +575,38 @@
|
|
|
567
575
|
"module": "./shared/toast-events.js"
|
|
568
576
|
}
|
|
569
577
|
},
|
|
578
|
+
{
|
|
579
|
+
"kind": "js",
|
|
580
|
+
"name": "showFlyout",
|
|
581
|
+
"declaration": {
|
|
582
|
+
"name": "showFlyout",
|
|
583
|
+
"module": "./shared/flyout-events.js"
|
|
584
|
+
}
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"kind": "js",
|
|
588
|
+
"name": "closeFlyout",
|
|
589
|
+
"declaration": {
|
|
590
|
+
"name": "closeFlyout",
|
|
591
|
+
"module": "./shared/flyout-events.js"
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
"kind": "js",
|
|
596
|
+
"name": "FlyoutConfig",
|
|
597
|
+
"declaration": {
|
|
598
|
+
"name": "FlyoutConfig",
|
|
599
|
+
"module": "./shared/flyout-events.js"
|
|
600
|
+
}
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
"kind": "js",
|
|
604
|
+
"name": "FlyoutCloseReason",
|
|
605
|
+
"declaration": {
|
|
606
|
+
"name": "FlyoutCloseReason",
|
|
607
|
+
"module": "./shared/flyout-events.js"
|
|
608
|
+
}
|
|
609
|
+
},
|
|
570
610
|
{
|
|
571
611
|
"kind": "js",
|
|
572
612
|
"name": "getEspBus",
|
|
@@ -599,6 +639,14 @@
|
|
|
599
639
|
"module": "./shared/bus-events.js"
|
|
600
640
|
}
|
|
601
641
|
},
|
|
642
|
+
{
|
|
643
|
+
"kind": "js",
|
|
644
|
+
"name": "FlyoutEvents",
|
|
645
|
+
"declaration": {
|
|
646
|
+
"name": "FlyoutEvents",
|
|
647
|
+
"module": "./shared/bus-events.js"
|
|
648
|
+
}
|
|
649
|
+
},
|
|
602
650
|
{
|
|
603
651
|
"kind": "js",
|
|
604
652
|
"name": "PopoverEvents",
|
|
@@ -8080,6 +8128,21 @@
|
|
|
8080
8128
|
"name": "itemsSlot",
|
|
8081
8129
|
"privacy": "private"
|
|
8082
8130
|
},
|
|
8131
|
+
{
|
|
8132
|
+
"kind": "field",
|
|
8133
|
+
"name": "formItemDescription",
|
|
8134
|
+
"type": {
|
|
8135
|
+
"text": "string | null"
|
|
8136
|
+
},
|
|
8137
|
+
"privacy": "private",
|
|
8138
|
+
"default": "null"
|
|
8139
|
+
},
|
|
8140
|
+
{
|
|
8141
|
+
"kind": "field",
|
|
8142
|
+
"name": "describedCheckboxes",
|
|
8143
|
+
"privacy": "private",
|
|
8144
|
+
"default": "new Set<EspalierCheckbox>()"
|
|
8145
|
+
},
|
|
8083
8146
|
{
|
|
8084
8147
|
"kind": "field",
|
|
8085
8148
|
"name": "name",
|
|
@@ -8199,6 +8262,21 @@
|
|
|
8199
8262
|
}
|
|
8200
8263
|
}
|
|
8201
8264
|
},
|
|
8265
|
+
{
|
|
8266
|
+
"kind": "method",
|
|
8267
|
+
"name": "applyFormItemDescription",
|
|
8268
|
+
"privacy": "private",
|
|
8269
|
+
"return": {
|
|
8270
|
+
"type": {
|
|
8271
|
+
"text": "void"
|
|
8272
|
+
}
|
|
8273
|
+
}
|
|
8274
|
+
},
|
|
8275
|
+
{
|
|
8276
|
+
"kind": "field",
|
|
8277
|
+
"name": "handleItemsSlotChange",
|
|
8278
|
+
"privacy": "private"
|
|
8279
|
+
},
|
|
8202
8280
|
{
|
|
8203
8281
|
"kind": "method",
|
|
8204
8282
|
"name": "handleChildChanged",
|
|
@@ -9000,6 +9078,12 @@
|
|
|
9000
9078
|
"privacy": "private",
|
|
9001
9079
|
"default": "new FormFieldController({ host: this, internals: this.internals, getFormValue: () => (this.checked ? this.value || \"on\" : null), getValidity: () => { if (this.required && !this.checked) { return { flags: { valueMissing: true }, message: this.requiredMessage || \"Please check this box to continue.\", }; } return null; }, onReset: () => { this.checked = false; this.indeterminate = false; }, onRestore: (state: string) => { this.checked = state === \"on\" || state === this.value; }, onDisabled: (isDisabled: boolean) => { this.disabled = isDisabled; }, })"
|
|
9002
9080
|
},
|
|
9081
|
+
{
|
|
9082
|
+
"kind": "field",
|
|
9083
|
+
"name": "formItemDescription",
|
|
9084
|
+
"privacy": "private",
|
|
9085
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this.shadowRoot?.querySelector<HTMLElement>(\".checkbox-control\"), })"
|
|
9086
|
+
},
|
|
9003
9087
|
{
|
|
9004
9088
|
"kind": "field",
|
|
9005
9089
|
"name": "checked",
|
|
@@ -10692,6 +10776,12 @@
|
|
|
10692
10776
|
"privacy": "private",
|
|
10693
10777
|
"default": "new FormFieldController({ host: this, internals: this.internals, getFormValue: () => this._value || null, getValidity: () => this._getValidityResult(), getValidationAnchor: (): HTMLElement => this.inputRef.value ?? this, onReset: () => { this._rangeAnchor = null; this._rangePreview = null; this._value = \"\"; this.requestUpdate(\"value\", \"\"); this._syncFromValue(); }, onRestore: (state: string) => { this.value = state; }, onDisabled: (isDisabled: boolean) => { this.disabled = isDisabled; }, })"
|
|
10694
10778
|
},
|
|
10779
|
+
{
|
|
10780
|
+
"kind": "field",
|
|
10781
|
+
"name": "formItemDescription",
|
|
10782
|
+
"privacy": "private",
|
|
10783
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this.inputRef.value, })"
|
|
10784
|
+
},
|
|
10695
10785
|
{
|
|
10696
10786
|
"kind": "field",
|
|
10697
10787
|
"name": "popoverCtrl",
|
|
@@ -15395,115 +15485,1293 @@
|
|
|
15395
15485
|
"name": "EspalierElementBase",
|
|
15396
15486
|
"module": "dist/shared/esp-element-base.js"
|
|
15397
15487
|
},
|
|
15398
|
-
"tagName": "esp-file-upload",
|
|
15399
|
-
"customElement": true,
|
|
15488
|
+
"tagName": "esp-file-upload",
|
|
15489
|
+
"customElement": true,
|
|
15490
|
+
"docPageTitle": {
|
|
15491
|
+
"name": "File",
|
|
15492
|
+
"description": "Upload"
|
|
15493
|
+
},
|
|
15494
|
+
"docUrl": {
|
|
15495
|
+
"name": "/components/file-upload",
|
|
15496
|
+
"description": ""
|
|
15497
|
+
},
|
|
15498
|
+
"menuGroup": {
|
|
15499
|
+
"name": "Form",
|
|
15500
|
+
"description": "Controls"
|
|
15501
|
+
},
|
|
15502
|
+
"menuLabel": {
|
|
15503
|
+
"name": "File",
|
|
15504
|
+
"description": "Upload"
|
|
15505
|
+
},
|
|
15506
|
+
"menuIcon": {
|
|
15507
|
+
"name": "upload",
|
|
15508
|
+
"description": ""
|
|
15509
|
+
},
|
|
15510
|
+
"cssProperties": [
|
|
15511
|
+
{
|
|
15512
|
+
"description": "Background color of the shared field shell. Defaults to `var(--esp-color-layer-2)`.",
|
|
15513
|
+
"name": "--esp-field-background",
|
|
15514
|
+
"inheritedFrom": {
|
|
15515
|
+
"name": "EspalierElementBase",
|
|
15516
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15517
|
+
}
|
|
15518
|
+
},
|
|
15519
|
+
{
|
|
15520
|
+
"description": "Border color of the shared field shell. Defaults to `var(--esp-color-border)`.",
|
|
15521
|
+
"name": "--esp-field-border-color",
|
|
15522
|
+
"inheritedFrom": {
|
|
15523
|
+
"name": "EspalierElementBase",
|
|
15524
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15525
|
+
}
|
|
15526
|
+
},
|
|
15527
|
+
{
|
|
15528
|
+
"description": "Border width of the shared field shell. Defaults to `1px`.",
|
|
15529
|
+
"name": "--esp-field-border-width",
|
|
15530
|
+
"inheritedFrom": {
|
|
15531
|
+
"name": "EspalierElementBase",
|
|
15532
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15533
|
+
}
|
|
15534
|
+
},
|
|
15535
|
+
{
|
|
15536
|
+
"description": "Text color used inside the shared field shell. Defaults to `var(--esp-color-text)`.",
|
|
15537
|
+
"name": "--esp-field-text-color",
|
|
15538
|
+
"inheritedFrom": {
|
|
15539
|
+
"name": "EspalierElementBase",
|
|
15540
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15541
|
+
}
|
|
15542
|
+
},
|
|
15543
|
+
{
|
|
15544
|
+
"description": "Hover background color of the shared field shell. Derived from `--esp-field-background`.",
|
|
15545
|
+
"name": "--esp-field-hover-bg",
|
|
15546
|
+
"inheritedFrom": {
|
|
15547
|
+
"name": "EspalierElementBase",
|
|
15548
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15549
|
+
}
|
|
15550
|
+
},
|
|
15551
|
+
{
|
|
15552
|
+
"description": "Focus background color of the shared field shell. Derived from `--esp-field-background`.",
|
|
15553
|
+
"name": "--esp-field-focus-bg",
|
|
15554
|
+
"inheritedFrom": {
|
|
15555
|
+
"name": "EspalierElementBase",
|
|
15556
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15557
|
+
}
|
|
15558
|
+
},
|
|
15559
|
+
{
|
|
15560
|
+
"description": "Shadow color used for shared field focus treatment. Defaults to `var(--esp-color-shadow)`.",
|
|
15561
|
+
"name": "--esp-field-focus-shadow",
|
|
15562
|
+
"inheritedFrom": {
|
|
15563
|
+
"name": "EspalierElementBase",
|
|
15564
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15565
|
+
}
|
|
15566
|
+
}
|
|
15567
|
+
],
|
|
15568
|
+
"events": [
|
|
15569
|
+
{
|
|
15570
|
+
"name": "value-changed",
|
|
15571
|
+
"type": {
|
|
15572
|
+
"text": "CustomEvent"
|
|
15573
|
+
},
|
|
15574
|
+
"inheritedFrom": {
|
|
15575
|
+
"name": "EspalierElementBase",
|
|
15576
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15577
|
+
}
|
|
15578
|
+
}
|
|
15579
|
+
]
|
|
15580
|
+
}
|
|
15581
|
+
],
|
|
15582
|
+
"exports": [
|
|
15583
|
+
{
|
|
15584
|
+
"kind": "js",
|
|
15585
|
+
"name": "EspalierFileUpload",
|
|
15586
|
+
"declaration": {
|
|
15587
|
+
"name": "EspalierFileUpload",
|
|
15588
|
+
"module": "dist/file-upload/esp-file-upload.js"
|
|
15589
|
+
}
|
|
15590
|
+
},
|
|
15591
|
+
{
|
|
15592
|
+
"kind": "custom-element-definition",
|
|
15593
|
+
"name": "esp-file-upload",
|
|
15594
|
+
"declaration": {
|
|
15595
|
+
"name": "EspalierFileUpload",
|
|
15596
|
+
"module": "dist/file-upload/esp-file-upload.js"
|
|
15597
|
+
}
|
|
15598
|
+
}
|
|
15599
|
+
]
|
|
15600
|
+
},
|
|
15601
|
+
{
|
|
15602
|
+
"kind": "javascript-module",
|
|
15603
|
+
"path": "dist/flyout/esp-flyout.js",
|
|
15604
|
+
"declarations": [
|
|
15605
|
+
{
|
|
15606
|
+
"kind": "class",
|
|
15607
|
+
"description": "A transient panel for help, more-info, and preview content that\nclaims designed spare width before ever covering the page.\n\nPlace one `esp-flyout` in an `esp-page`'s `flyout` slot. The panel\nlives on the canvas, outside the content surface. The page decides\nwhere it goes, from widest viewport to narrowest:\n\n1. **Gutter** — the panel occupies the right canvas gutter. When the\n gutter already has room, it claims existing spare canvas and the\n main content does not move at all, on any alignment.\n2. **Shift** — when the gutter is not quite wide enough, the surface\n slides toward `start` by exactly the shortfall (no more) to free\n the difference.\n3. **Docked sidebar** — once the gutter is gone, the panel competes\n for width with the main well; content narrows but is never\n covered.\n4. **Overlay drawer** — below the mobile threshold (`50em`, the\n same one the `esp-menu` drawer uses) the panel becomes a fixed\n drawer over a vellum backdrop. Set `mode=\"overlay\"` to get this\n presentation at every width.\n\nThe panel is styled as a tear-off piece: a dotted perforation on\nits leading edge, rounded trailing corners, and no shadow — all\noverridable through the `--esp-flyout-*` tokens below.\n\nA11y follows the presentation. In the in-grid modes (1–3) the\nflyout is a non-modal `complementary` landmark named by its\n`heading`, and opening it never steals focus. In the overlay-drawer\nmode (4) it is a true modal: `role=\"dialog\"` + `aria-modal`, the\nbackground goes inert, scroll is locked, focus moves into the drawer\nand is trapped, and focus is restored on close. `Escape` closes it\nin every mode.\n\n```html\n<style>\nesp-page.flyout-demo {\n --esp-page-max-width: 420px;\n --esp-page-canvas-background: var(--esp-color-layer-1);\n &::part(wrapper) {\n min-height: 320px;\n height: 320px;\n }\n > div {\n padding: var(--esp-size-padding);\n }\n}\n</style>\n<esp-page class=\"flyout-demo\" align=\"center\">\n <esp-flyout slot=\"flyout\" heading=\"More info\" id=\"demo-flyout\" standalone>\n <p>Spare width claimed; the well shifted only enough to make room.</p>\n </esp-flyout>\n <div>\n <esp-button id=\"toggle-flyout\" label=\"Toggle flyout\" collapsed></esp-button>\n </div>\n</esp-page>\n<script>\n const flyout = findById(\"demo-flyout\");\n findById(\"toggle-flyout\").addEventListener(\"clicked\", () => flyout.toggle());\n</script>\n```\n\nBy default the panel is a tear-off — a dotted perforation on its\nleading edge, rounded trailing corners, no shadow. Add\n`match-surface` to lift the trailing edge with the page's surface\nedge shadow, so the flyout reads as a raised peer of the content it\nflies out from while staying attached at the leading perforation:\n\n```html\n<style>\nesp-page.flyout-match-demo {\n --esp-page-max-width: 420px;\n &::part(wrapper) {\n min-height: 320px;\n height: 320px;\n }\n > div {\n padding: var(--esp-size-padding);\n }\n}\n</style>\n<esp-page class=\"flyout-match-demo\" align=\"center\">\n <esp-flyout slot=\"flyout\" heading=\"More info\" id=\"match-flyout\" match-surface standalone>\n <p>Attached at the perforation, trailing edge raised like the surface.</p>\n </esp-flyout>\n <div>\n <esp-button id=\"toggle-match\" label=\"Toggle flyout\" collapsed></esp-button>\n </div>\n</esp-page>\n<script>\n const matchFlyout = findById(\"match-flyout\");\n findById(\"toggle-match\").addEventListener(\"clicked\", () => matchFlyout.toggle());\n</script>\n```\n\nWhen the page has no spare width to claim — a `kind=\"full\"` page,\nor a capped page on a viewport at the cap — the open flyout docks\nas a right sidebar and the content makes room:\n\n```html\n<style>\nesp-page.flyout-docked-demo {\n &::part(wrapper) {\n min-height: 320px;\n height: 320px;\n }\n > div {\n padding: var(--esp-size-padding);\n }\n}\n</style>\n<esp-page class=\"flyout-docked-demo\" kind=\"full\">\n <esp-flyout slot=\"flyout\" heading=\"Docked\" id=\"docked-flyout\" standalone>\n <p>No gutter to claim, so the content narrows instead.</p>\n </esp-flyout>\n <div>\n <p>A <code>kind=\"full\"</code> page has no canvas gutters at any\n width — the flyout squeezes the main well and never covers it.</p>\n <esp-button id=\"toggle-docked\" label=\"Toggle flyout\" collapsed></esp-button>\n </div>\n</esp-page>\n<script>\n const dockedFlyout = findById(\"docked-flyout\");\n findById(\"toggle-docked\").addEventListener(\"clicked\", () => dockedFlyout.toggle());\n</script>\n```\n\nBelow the `50em` viewport threshold every flyout becomes a fixed\noverlay drawer over a vellum — there is no room for a side-by-side\nsplit on a phone. `mode=\"overlay\"` forces that presentation at any\nwidth (try it here; `Escape` or the vellum closes it):\n\n```html\n<style>\nesp-page.flyout-overlay-demo {\n &::part(wrapper) {\n min-height: 160px;\n height: 160px;\n }\n > div {\n padding: var(--esp-size-padding);\n }\n}\n</style>\n<esp-page class=\"flyout-overlay-demo\">\n <esp-flyout slot=\"flyout\" heading=\"Overlay drawer\" mode=\"overlay\" id=\"overlay-flyout\" standalone>\n <p>A fixed drawer over a vellum — what every flyout becomes on\n small viewports.</p>\n </esp-flyout>\n <div>\n <esp-button id=\"open-overlay\" label=\"Open overlay flyout\" collapsed></esp-button>\n </div>\n</esp-page>\n<script>\n const overlayFlyout = findById(\"overlay-flyout\");\n findById(\"open-overlay\").addEventListener(\"clicked\", () => overlayFlyout.toggle());\n</script>\n```\n\nComponents that cannot know where the flyout lives can request it\nover the bus with `showFlyout()` — the same pattern `showToast()`\nuses. A second request swaps the content in place; it never\nstacks. Content passed as a string renders as plain text; pass a\n`Node` for rich content. Pass the triggering element as `anchor` to\nalign the in-grid panel with that control and keep both in the same\nscroll flow. If the panel would cross the visible viewport's bottom,\nit shifts up only far enough to fit and returns to its natural trigger\nalignment as the page scrolls. Content taller than the viewport\nscrolls inside the panel. Overlay drawers stay viewport-fixed.\n\nThe bus is a global broadcast, so every listening flyout on the\npage answers a `showFlyout()` call. The demos above are each driven\nby their own toggle button, so they are marked `standalone` to opt\nout of the bus — leaving this one flyout as the page's shared\nsurface. In a real app you typically have a single flyout and need\nno attribute at all.\n\n```html\n<style>\nesp-page.flyout-bus-demo {\n --esp-page-max-width: 420px;\n &::part(wrapper) {\n min-height: 320px;\n }\n > div {\n padding: var(--esp-size-padding);\n }\n .flyout-demo-copy {\n max-inline-size: 42ch;\n }\n}\n</style>\n<esp-page class=\"flyout-bus-demo\">\n <esp-flyout slot=\"flyout\"></esp-flyout>\n <div>\n <esp-button id=\"show-apples\" label=\"Apples\" collapsed></esp-button>\n <div class=\"flyout-demo-copy\">\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod\n tempor incididunt ut labore et dolore magna aliqua.</p>\n <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi\n ut aliquip ex ea commodo consequat.</p>\n <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum\n dolore eu fugiat nulla pariatur.</p>\n </div>\n <esp-button id=\"show-pears\" label=\"Pears\" collapsed></esp-button>\n <template id=\"pears-description\">\n <p>Ripen pears at room temperature until the neck yields gently to\n pressure, then refrigerate them to slow further ripening.</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer\n nec odio. Praesent libero. Sed cursus ante dapibus diam.</p>\n <p>Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis\n sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper\n porta.</p>\n <p>Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent\n taciti sociosqu ad litora torquent per conubia nostra.</p>\n <p>Curabitur sodales ligula in libero. Sed dignissim lacinia nunc.\n Curabitur tortor. Pellentesque nibh. Aenean quam.</p>\n <p>In scelerisque sem at dolor. Maecenas mattis. Sed convallis\n tristique sem. Proin ut ligula vel nunc egestas porttitor.</p>\n <p>Morbi lectus risus, iaculis vel, suscipit quis, luctus non,\n massa. Fusce ac turpis quis ligula lacinia aliquet.</p>\n <p>Mauris ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed,\n euismod in, nibh. Quisque volutpat condimentum velit.</p>\n </template>\n <div class=\"flyout-demo-copy\">\n <p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia\n deserunt mollit anim id est laborum.</p>\n <p>Curabitur pretium tincidunt lacus. Nulla gravida orci a odio, nullam\n varius, turpis et commodo pharetra.</p>\n </div>\n </div>\n</esp-page>\n<script>\n const applesButton = findById(\"show-apples\");\n applesButton.addEventListener(\"clicked\", () => {\n showFlyout({ heading: \"Apples\", content: \"Crisp. Store cold.\", anchor: applesButton });\n });\n const pearsButton = findById(\"show-pears\");\n const pearsDescription = findById(\"pears-description\");\n pearsButton.addEventListener(\"clicked\", () => {\n showFlyout({\n heading: \"Pears\",\n content: pearsDescription.content.cloneNode(true),\n anchor: pearsButton,\n });\n });\n</script>\n```",
|
|
15608
|
+
"name": "EspalierFlyout",
|
|
15609
|
+
"cssProperties": [
|
|
15610
|
+
{
|
|
15611
|
+
"description": "The background color of the panel. Defaults to `var(--esp-color-background)`.",
|
|
15612
|
+
"name": "--esp-flyout-background"
|
|
15613
|
+
},
|
|
15614
|
+
{
|
|
15615
|
+
"description": "The border on the panel's leading edge. Defaults to the tear-off perforation, `1px dotted var(--esp-color-border)`.",
|
|
15616
|
+
"name": "--esp-flyout-border"
|
|
15617
|
+
},
|
|
15618
|
+
{
|
|
15619
|
+
"description": "The radius of the panel's trailing corners. Defaults to `var(--esp-size-border-radius)`; the overlay drawer squares them.",
|
|
15620
|
+
"name": "--esp-flyout-radius"
|
|
15621
|
+
},
|
|
15622
|
+
{
|
|
15623
|
+
"description": "The panel's shadow. Defaults to `none` in the gutter/docked modes (the perforation does the separating) and to a drawer shadow in overlay mode.",
|
|
15624
|
+
"name": "--esp-flyout-shadow"
|
|
15625
|
+
},
|
|
15626
|
+
{
|
|
15627
|
+
"description": "Padding inside the panel's header and content regions. Defaults to `var(--esp-size-padding)`.",
|
|
15628
|
+
"name": "--esp-flyout-padding"
|
|
15629
|
+
},
|
|
15630
|
+
{
|
|
15631
|
+
"description": "Stack order of the overlay-drawer mode. Defaults to `3000` — above page chrome, below the dialog drop zone (4000). Set it on the `esp-page` (or an ancestor), not on the flyout itself: the page reads the same token to hoist the drawer's aside above its header.",
|
|
15632
|
+
"name": "--esp-flyout-z-index"
|
|
15633
|
+
},
|
|
15634
|
+
{
|
|
15635
|
+
"description": "Background color of the shared field shell. Defaults to `var(--esp-color-layer-2)`.",
|
|
15636
|
+
"name": "--esp-field-background",
|
|
15637
|
+
"inheritedFrom": {
|
|
15638
|
+
"name": "EspalierElementBase",
|
|
15639
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15640
|
+
}
|
|
15641
|
+
},
|
|
15642
|
+
{
|
|
15643
|
+
"description": "Border color of the shared field shell. Defaults to `var(--esp-color-border)`.",
|
|
15644
|
+
"name": "--esp-field-border-color",
|
|
15645
|
+
"inheritedFrom": {
|
|
15646
|
+
"name": "EspalierElementBase",
|
|
15647
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15648
|
+
}
|
|
15649
|
+
},
|
|
15650
|
+
{
|
|
15651
|
+
"description": "Border width of the shared field shell. Defaults to `1px`.",
|
|
15652
|
+
"name": "--esp-field-border-width",
|
|
15653
|
+
"inheritedFrom": {
|
|
15654
|
+
"name": "EspalierElementBase",
|
|
15655
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15656
|
+
}
|
|
15657
|
+
},
|
|
15658
|
+
{
|
|
15659
|
+
"description": "Text color used inside the shared field shell. Defaults to `var(--esp-color-text)`.",
|
|
15660
|
+
"name": "--esp-field-text-color",
|
|
15661
|
+
"inheritedFrom": {
|
|
15662
|
+
"name": "EspalierElementBase",
|
|
15663
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15664
|
+
}
|
|
15665
|
+
},
|
|
15666
|
+
{
|
|
15667
|
+
"description": "Hover background color of the shared field shell. Derived from `--esp-field-background`.",
|
|
15668
|
+
"name": "--esp-field-hover-bg",
|
|
15669
|
+
"inheritedFrom": {
|
|
15670
|
+
"name": "EspalierElementBase",
|
|
15671
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15672
|
+
}
|
|
15673
|
+
},
|
|
15674
|
+
{
|
|
15675
|
+
"description": "Focus background color of the shared field shell. Derived from `--esp-field-background`.",
|
|
15676
|
+
"name": "--esp-field-focus-bg",
|
|
15677
|
+
"inheritedFrom": {
|
|
15678
|
+
"name": "EspalierElementBase",
|
|
15679
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15680
|
+
}
|
|
15681
|
+
},
|
|
15682
|
+
{
|
|
15683
|
+
"description": "Shadow color used for shared field focus treatment. Defaults to `var(--esp-color-shadow)`.",
|
|
15684
|
+
"name": "--esp-field-focus-shadow",
|
|
15685
|
+
"inheritedFrom": {
|
|
15686
|
+
"name": "EspalierElementBase",
|
|
15687
|
+
"module": "dist/shared/esp-element-base.js"
|
|
15688
|
+
}
|
|
15689
|
+
}
|
|
15690
|
+
],
|
|
15691
|
+
"cssParts": [
|
|
15692
|
+
{
|
|
15693
|
+
"description": "The panel surface.",
|
|
15694
|
+
"name": "panel"
|
|
15695
|
+
},
|
|
15696
|
+
{
|
|
15697
|
+
"description": "The heading/close-button row.",
|
|
15698
|
+
"name": "header"
|
|
15699
|
+
},
|
|
15700
|
+
{
|
|
15701
|
+
"description": "The scrollable content region wrapping the slot.",
|
|
15702
|
+
"name": "content"
|
|
15703
|
+
}
|
|
15704
|
+
],
|
|
15705
|
+
"slots": [
|
|
15706
|
+
{
|
|
15707
|
+
"description": "The flyout's content.",
|
|
15708
|
+
"name": ""
|
|
15709
|
+
}
|
|
15710
|
+
],
|
|
15711
|
+
"members": [
|
|
15712
|
+
{
|
|
15713
|
+
"kind": "field",
|
|
15714
|
+
"name": "open",
|
|
15715
|
+
"type": {
|
|
15716
|
+
"text": "boolean"
|
|
15717
|
+
},
|
|
15718
|
+
"privacy": "public",
|
|
15719
|
+
"default": "false",
|
|
15720
|
+
"description": "Whether the flyout is open. Reflected so the initial state can\nbe declared in markup; `esp-page` mirrors it (via the lifecycle\nevents and the slot) onto its own `flyout-open` attribute to\ndrive the grid.",
|
|
15721
|
+
"attribute": "open",
|
|
15722
|
+
"reflects": true
|
|
15723
|
+
},
|
|
15724
|
+
{
|
|
15725
|
+
"kind": "field",
|
|
15726
|
+
"name": "heading",
|
|
15727
|
+
"type": {
|
|
15728
|
+
"text": "string"
|
|
15729
|
+
},
|
|
15730
|
+
"privacy": "public",
|
|
15731
|
+
"default": "\"\"",
|
|
15732
|
+
"description": "Heading text for the panel's header row. Also becomes the\nflyout's accessible name unless the author set an `aria-label`.\nAn open overlay without either uses the fallback name \"Flyout\" so\nits dialog is never exposed without an accessible name.",
|
|
15733
|
+
"attribute": "heading"
|
|
15734
|
+
},
|
|
15735
|
+
{
|
|
15736
|
+
"kind": "field",
|
|
15737
|
+
"name": "mode",
|
|
15738
|
+
"type": {
|
|
15739
|
+
"text": "\"auto\" | \"overlay\""
|
|
15740
|
+
},
|
|
15741
|
+
"privacy": "public",
|
|
15742
|
+
"default": "\"auto\"",
|
|
15743
|
+
"description": "Placement behavior.\n\n- `\"auto\"` (default) — the page's placement ladder: gutter,\n docked sidebar, then overlay drawer below the `50em` viewport\n threshold.\n- `\"overlay\"` — always the fixed overlay drawer, at any width.\n The page never reserves a grid track for an overlay-mode\n flyout.",
|
|
15744
|
+
"attribute": "mode",
|
|
15745
|
+
"reflects": true
|
|
15746
|
+
},
|
|
15747
|
+
{
|
|
15748
|
+
"kind": "field",
|
|
15749
|
+
"name": "anchor",
|
|
15750
|
+
"type": {
|
|
15751
|
+
"text": "HTMLElement | undefined"
|
|
15752
|
+
},
|
|
15753
|
+
"privacy": "public",
|
|
15754
|
+
"description": "Triggering element whose block-start edge the in-grid panel should\nalign with. Anchored panels stay in normal page flow, shift upward\nonly while needed to fit the visible scrollport, and return to their\nnatural alignment as the page scrolls. Oversized content scrolls\ninside the panel. Overlay drawers ignore this geometry and remain\nfixed to the viewport."
|
|
15755
|
+
},
|
|
15756
|
+
{
|
|
15757
|
+
"kind": "field",
|
|
15758
|
+
"name": "matchSurface",
|
|
15759
|
+
"type": {
|
|
15760
|
+
"text": "boolean"
|
|
15761
|
+
},
|
|
15762
|
+
"privacy": "public",
|
|
15763
|
+
"default": "false",
|
|
15764
|
+
"description": "When set on a flyout slotted into an `esp-page`, the panel lifts\nits **trailing** edge with the page's surface edge shadow, so it\nreads as a raised peer of the content surface it flies out from\nrather than the shadowless tear-off. The **leading** edge keeps\nits dotted perforation and casts no shadow, so the panel stays\nattached at the tear line instead of floating over the content.\nThe trailing-corner radius is still `--esp-flyout-radius`. No\neffect on a standalone flyout — there is no page surface to match.",
|
|
15765
|
+
"attribute": "match-surface",
|
|
15766
|
+
"reflects": true
|
|
15767
|
+
},
|
|
15768
|
+
{
|
|
15769
|
+
"kind": "field",
|
|
15770
|
+
"name": "standalone",
|
|
15771
|
+
"type": {
|
|
15772
|
+
"text": "boolean"
|
|
15773
|
+
},
|
|
15774
|
+
"privacy": "public",
|
|
15775
|
+
"default": "false",
|
|
15776
|
+
"description": "Whether this flyout ignores the shared `showFlyout()` /\n`closeFlyout()` bus and is driven only through its own\n`show()` / `close()` / `toggle()` API.\n\nBy default a flyout services the bus, so a single flyout in a\npage \"just works\" as the target of `showFlyout()` — the same\nzero-config model as `<esp-toaster>` and `showToast()`. Because\nthe bus is a global broadcast, **every** listening flyout on the\npage answers a `showFlyout()` call; set `standalone` on any\nflyout you drive directly so only your one designated help\nsurface responds.",
|
|
15777
|
+
"attribute": "standalone",
|
|
15778
|
+
"reflects": true
|
|
15779
|
+
},
|
|
15780
|
+
{
|
|
15781
|
+
"kind": "field",
|
|
15782
|
+
"name": "returnFocusTo",
|
|
15783
|
+
"type": {
|
|
15784
|
+
"text": "HTMLElement | undefined"
|
|
15785
|
+
},
|
|
15786
|
+
"privacy": "public",
|
|
15787
|
+
"description": "Element to return focus to when the flyout closes. In the in-grid\nmodes it is focused only if focus is inside the flyout at close;\nin the overlay-drawer mode it overrides the modal treatment's\nautomatic restore-to-opener. Usually supplied through\n`showFlyout({ returnFocusTo })`."
|
|
15788
|
+
},
|
|
15789
|
+
{
|
|
15790
|
+
"kind": "field",
|
|
15791
|
+
"name": "overlayReturnFocusTo",
|
|
15792
|
+
"type": {
|
|
15793
|
+
"text": "HTMLElement | undefined"
|
|
15794
|
+
},
|
|
15795
|
+
"privacy": "private",
|
|
15796
|
+
"description": "`returnFocusTo` captured at close time for the overlay teardown,\nwhich runs after `close()` (in `updated()`): the modal treatment\nrestores focus to the pre-open element, and this explicit target\nmust win over that."
|
|
15797
|
+
},
|
|
15798
|
+
{
|
|
15799
|
+
"kind": "field",
|
|
15800
|
+
"name": "lastGeneratedAriaLabel",
|
|
15801
|
+
"type": {
|
|
15802
|
+
"text": "string | null"
|
|
15803
|
+
},
|
|
15804
|
+
"privacy": "private",
|
|
15805
|
+
"default": "null",
|
|
15806
|
+
"description": "The last `aria-label` this component generated from `heading` or\nthe overlay fallback, or `null` if none. The flyout only rewrites\n`aria-label` when the current value is absent or still equals what\nit last generated, so a label the author sets at any time — in\nmarkup or later — wins."
|
|
15807
|
+
},
|
|
15808
|
+
{
|
|
15809
|
+
"kind": "field",
|
|
15810
|
+
"name": "boundKeydown",
|
|
15811
|
+
"privacy": "private"
|
|
15812
|
+
},
|
|
15813
|
+
{
|
|
15814
|
+
"kind": "field",
|
|
15815
|
+
"name": "boundShowRequest",
|
|
15816
|
+
"privacy": "private"
|
|
15817
|
+
},
|
|
15818
|
+
{
|
|
15819
|
+
"kind": "field",
|
|
15820
|
+
"name": "boundCloseRequest",
|
|
15821
|
+
"privacy": "private"
|
|
15822
|
+
},
|
|
15823
|
+
{
|
|
15824
|
+
"kind": "field",
|
|
15825
|
+
"name": "boundOverlayMediaChange",
|
|
15826
|
+
"privacy": "private"
|
|
15827
|
+
},
|
|
15828
|
+
{
|
|
15829
|
+
"kind": "field",
|
|
15830
|
+
"name": "boundAnchorViewportChange",
|
|
15831
|
+
"privacy": "private"
|
|
15832
|
+
},
|
|
15833
|
+
{
|
|
15834
|
+
"kind": "field",
|
|
15835
|
+
"name": "anchorPositionRaf",
|
|
15836
|
+
"type": {
|
|
15837
|
+
"text": "number"
|
|
15838
|
+
},
|
|
15839
|
+
"privacy": "private",
|
|
15840
|
+
"default": "0"
|
|
15841
|
+
},
|
|
15842
|
+
{
|
|
15843
|
+
"kind": "field",
|
|
15844
|
+
"name": "trackingAnchorPosition",
|
|
15845
|
+
"type": {
|
|
15846
|
+
"text": "boolean"
|
|
15847
|
+
},
|
|
15848
|
+
"privacy": "private",
|
|
15849
|
+
"default": "false"
|
|
15850
|
+
},
|
|
15851
|
+
{
|
|
15852
|
+
"kind": "field",
|
|
15853
|
+
"name": "anchorResizeObserver",
|
|
15854
|
+
"type": {
|
|
15855
|
+
"text": "ResizeObserver | undefined"
|
|
15856
|
+
},
|
|
15857
|
+
"privacy": "private"
|
|
15858
|
+
},
|
|
15859
|
+
{
|
|
15860
|
+
"kind": "field",
|
|
15861
|
+
"name": "observedAnchorPanel",
|
|
15862
|
+
"type": {
|
|
15863
|
+
"text": "HTMLElement | undefined"
|
|
15864
|
+
},
|
|
15865
|
+
"privacy": "private"
|
|
15866
|
+
},
|
|
15867
|
+
{
|
|
15868
|
+
"kind": "field",
|
|
15869
|
+
"name": "busSubscribed",
|
|
15870
|
+
"type": {
|
|
15871
|
+
"text": "boolean"
|
|
15872
|
+
},
|
|
15873
|
+
"privacy": "private",
|
|
15874
|
+
"default": "false",
|
|
15875
|
+
"description": "Whether the bus handlers are currently registered. EspBus does\nnot dedupe subscriptions, so this guards against double-adds."
|
|
15876
|
+
},
|
|
15877
|
+
{
|
|
15878
|
+
"kind": "field",
|
|
15879
|
+
"name": "panelRef",
|
|
15880
|
+
"privacy": "private"
|
|
15881
|
+
},
|
|
15882
|
+
{
|
|
15883
|
+
"kind": "field",
|
|
15884
|
+
"name": "overlay",
|
|
15885
|
+
"privacy": "private",
|
|
15886
|
+
"default": "new OverlayController({ host: this, getFocusTrapContainer: () => this.panelRef.value ?? null, getFocusFallback: () => this.panelRef.value ?? null, promote: false, })",
|
|
15887
|
+
"description": "Modal treatment for the overlay-drawer presentation only. It does\nnot promote out of the page slot, so the flyout keeps its grid\nplacement and `flyout-state-changed` sync; inert anchors on the\nflyout's own position, making its page siblings inert."
|
|
15888
|
+
},
|
|
15889
|
+
{
|
|
15890
|
+
"kind": "field",
|
|
15891
|
+
"name": "overlayMediaQuery",
|
|
15892
|
+
"type": {
|
|
15893
|
+
"text": "MediaQueryList | undefined"
|
|
15894
|
+
},
|
|
15895
|
+
"privacy": "private",
|
|
15896
|
+
"description": "Media query matching the overlay-drawer viewport range."
|
|
15897
|
+
},
|
|
15898
|
+
{
|
|
15899
|
+
"kind": "field",
|
|
15900
|
+
"name": "overlayActive",
|
|
15901
|
+
"type": {
|
|
15902
|
+
"text": "boolean"
|
|
15903
|
+
},
|
|
15904
|
+
"privacy": "private",
|
|
15905
|
+
"default": "false",
|
|
15906
|
+
"description": "Whether the modal (overlay) treatment is currently applied."
|
|
15907
|
+
},
|
|
15908
|
+
{
|
|
15909
|
+
"kind": "field",
|
|
15910
|
+
"name": "baseRole",
|
|
15911
|
+
"type": {
|
|
15912
|
+
"text": "string"
|
|
15913
|
+
},
|
|
15914
|
+
"privacy": "private",
|
|
15915
|
+
"default": "\"complementary\"",
|
|
15916
|
+
"description": "The landmark role to restore when leaving the overlay treatment\n(the author's role, or the default `complementary`)."
|
|
15917
|
+
},
|
|
15918
|
+
{
|
|
15919
|
+
"kind": "field",
|
|
15920
|
+
"name": "effectiveOverlay",
|
|
15921
|
+
"type": {
|
|
15922
|
+
"text": "boolean"
|
|
15923
|
+
},
|
|
15924
|
+
"privacy": "private",
|
|
15925
|
+
"description": "Whether the flyout is presenting as an overlay drawer — either\nforced via `mode=\"overlay\"` or below the mobile threshold. The\nmodal a11y treatment applies exactly in this state; the in-grid\nmodes stay a non-modal `complementary` landmark.",
|
|
15926
|
+
"readonly": true
|
|
15927
|
+
},
|
|
15928
|
+
{
|
|
15929
|
+
"kind": "method",
|
|
15930
|
+
"name": "syncBusSubscription",
|
|
15931
|
+
"privacy": "private",
|
|
15932
|
+
"return": {
|
|
15933
|
+
"type": {
|
|
15934
|
+
"text": "void"
|
|
15935
|
+
}
|
|
15936
|
+
},
|
|
15937
|
+
"description": "Subscribe to the shared bus unless `standalone`; idempotent so\nit is safe to call from both connect and a `standalone` change."
|
|
15938
|
+
},
|
|
15939
|
+
{
|
|
15940
|
+
"kind": "method",
|
|
15941
|
+
"name": "unsubscribeBus",
|
|
15942
|
+
"privacy": "private",
|
|
15943
|
+
"return": {
|
|
15944
|
+
"type": {
|
|
15945
|
+
"text": "void"
|
|
15946
|
+
}
|
|
15947
|
+
}
|
|
15948
|
+
},
|
|
15949
|
+
{
|
|
15950
|
+
"kind": "method",
|
|
15951
|
+
"name": "show",
|
|
15952
|
+
"privacy": "public",
|
|
15953
|
+
"return": {
|
|
15954
|
+
"type": {
|
|
15955
|
+
"text": "void"
|
|
15956
|
+
}
|
|
15957
|
+
},
|
|
15958
|
+
"description": "Open the flyout with its current content. In the in-grid modes it\ndoes not move focus; in the overlay-drawer mode it moves focus\ninto the drawer as a modal."
|
|
15959
|
+
},
|
|
15960
|
+
{
|
|
15961
|
+
"kind": "method",
|
|
15962
|
+
"name": "close",
|
|
15963
|
+
"privacy": "public",
|
|
15964
|
+
"return": {
|
|
15965
|
+
"type": {
|
|
15966
|
+
"text": "void"
|
|
15967
|
+
}
|
|
15968
|
+
},
|
|
15969
|
+
"parameters": [
|
|
15970
|
+
{
|
|
15971
|
+
"name": "reason",
|
|
15972
|
+
"default": "\"programmatic\"",
|
|
15973
|
+
"type": {
|
|
15974
|
+
"text": "FlyoutCloseReason"
|
|
15975
|
+
}
|
|
15976
|
+
}
|
|
15977
|
+
],
|
|
15978
|
+
"description": "Close the flyout. In the in-grid modes, if focus is inside the\nflyout it is returned to `returnFocusTo` when one was provided; in\nthe overlay-drawer mode the modal treatment restores focus to\nwherever it was when the drawer opened, unless `returnFocusTo`\nnames an explicit target — the explicit target wins."
|
|
15979
|
+
},
|
|
15980
|
+
{
|
|
15981
|
+
"kind": "method",
|
|
15982
|
+
"name": "toggle",
|
|
15983
|
+
"privacy": "public",
|
|
15984
|
+
"return": {
|
|
15985
|
+
"type": {
|
|
15986
|
+
"text": "void"
|
|
15987
|
+
}
|
|
15988
|
+
},
|
|
15989
|
+
"description": "Toggle the flyout between open and closed."
|
|
15990
|
+
},
|
|
15991
|
+
{
|
|
15992
|
+
"kind": "method",
|
|
15993
|
+
"name": "handleShowRequest",
|
|
15994
|
+
"privacy": "private",
|
|
15995
|
+
"return": {
|
|
15996
|
+
"type": {
|
|
15997
|
+
"text": "void"
|
|
15998
|
+
}
|
|
15999
|
+
},
|
|
16000
|
+
"parameters": [
|
|
16001
|
+
{
|
|
16002
|
+
"name": "config",
|
|
16003
|
+
"type": {
|
|
16004
|
+
"text": "FlyoutConfig"
|
|
16005
|
+
}
|
|
16006
|
+
}
|
|
16007
|
+
],
|
|
16008
|
+
"description": "Service a `\"show-flyout\"` bus request: swap in the requested\nheading/content (never stacking) and open."
|
|
16009
|
+
},
|
|
16010
|
+
{
|
|
16011
|
+
"kind": "method",
|
|
16012
|
+
"name": "handleKeydown",
|
|
16013
|
+
"privacy": "private",
|
|
16014
|
+
"return": {
|
|
16015
|
+
"type": {
|
|
16016
|
+
"text": "void"
|
|
16017
|
+
}
|
|
16018
|
+
},
|
|
16019
|
+
"parameters": [
|
|
16020
|
+
{
|
|
16021
|
+
"name": "ev",
|
|
16022
|
+
"type": {
|
|
16023
|
+
"text": "KeyboardEvent"
|
|
16024
|
+
}
|
|
16025
|
+
}
|
|
16026
|
+
]
|
|
16027
|
+
},
|
|
16028
|
+
{
|
|
16029
|
+
"kind": "method",
|
|
16030
|
+
"name": "focusIsInside",
|
|
16031
|
+
"privacy": "private",
|
|
16032
|
+
"return": {
|
|
16033
|
+
"type": {
|
|
16034
|
+
"text": "boolean"
|
|
16035
|
+
}
|
|
16036
|
+
}
|
|
16037
|
+
},
|
|
16038
|
+
{
|
|
16039
|
+
"kind": "method",
|
|
16040
|
+
"name": "syncAnchorGeometry",
|
|
16041
|
+
"privacy": "private",
|
|
16042
|
+
"return": {
|
|
16043
|
+
"type": {
|
|
16044
|
+
"text": "void"
|
|
16045
|
+
}
|
|
16046
|
+
},
|
|
16047
|
+
"description": "Position an anchored in-grid flyout at the trigger's natural\nblock-start, then shift it upward only enough to keep its bottom in\nthe visible scrollport. The shift is recalculated during scrolling,\nso it returns to zero when the panel fits at its natural top."
|
|
16048
|
+
},
|
|
16049
|
+
{
|
|
16050
|
+
"kind": "method",
|
|
16051
|
+
"name": "getVisibleBlockBounds",
|
|
16052
|
+
"privacy": "private",
|
|
16053
|
+
"return": {
|
|
16054
|
+
"type": {
|
|
16055
|
+
"text": "{ top: number; bottom: number }"
|
|
16056
|
+
}
|
|
16057
|
+
},
|
|
16058
|
+
"description": "Intersect the visual viewport with every scrolling ancestor. This\nkeeps the flyout usable both on the document and inside a bounded\nlive-example pane such as WTFM's demo container."
|
|
16059
|
+
},
|
|
16060
|
+
{
|
|
16061
|
+
"kind": "method",
|
|
16062
|
+
"name": "composedParent",
|
|
16063
|
+
"privacy": "private",
|
|
16064
|
+
"return": {
|
|
16065
|
+
"type": {
|
|
16066
|
+
"text": "Element | null"
|
|
16067
|
+
}
|
|
16068
|
+
},
|
|
16069
|
+
"parameters": [
|
|
16070
|
+
{
|
|
16071
|
+
"name": "element",
|
|
16072
|
+
"type": {
|
|
16073
|
+
"text": "Element"
|
|
16074
|
+
}
|
|
16075
|
+
}
|
|
16076
|
+
]
|
|
16077
|
+
},
|
|
16078
|
+
{
|
|
16079
|
+
"kind": "method",
|
|
16080
|
+
"name": "setGeometryProperty",
|
|
16081
|
+
"privacy": "private",
|
|
16082
|
+
"return": {
|
|
16083
|
+
"type": {
|
|
16084
|
+
"text": "void"
|
|
16085
|
+
}
|
|
16086
|
+
},
|
|
16087
|
+
"parameters": [
|
|
16088
|
+
{
|
|
16089
|
+
"name": "name",
|
|
16090
|
+
"type": {
|
|
16091
|
+
"text": "string"
|
|
16092
|
+
}
|
|
16093
|
+
},
|
|
16094
|
+
{
|
|
16095
|
+
"name": "value",
|
|
16096
|
+
"type": {
|
|
16097
|
+
"text": "string"
|
|
16098
|
+
}
|
|
16099
|
+
}
|
|
16100
|
+
]
|
|
16101
|
+
},
|
|
16102
|
+
{
|
|
16103
|
+
"kind": "method",
|
|
16104
|
+
"name": "clearAnchorGeometry",
|
|
16105
|
+
"privacy": "private",
|
|
16106
|
+
"return": {
|
|
16107
|
+
"type": {
|
|
16108
|
+
"text": "void"
|
|
16109
|
+
}
|
|
16110
|
+
}
|
|
16111
|
+
},
|
|
16112
|
+
{
|
|
16113
|
+
"kind": "method",
|
|
16114
|
+
"name": "scheduleAnchorGeometrySync",
|
|
16115
|
+
"privacy": "private",
|
|
16116
|
+
"return": {
|
|
16117
|
+
"type": {
|
|
16118
|
+
"text": "void"
|
|
16119
|
+
}
|
|
16120
|
+
}
|
|
16121
|
+
},
|
|
16122
|
+
{
|
|
16123
|
+
"kind": "method",
|
|
16124
|
+
"name": "syncAnchorTracking",
|
|
16125
|
+
"privacy": "private",
|
|
16126
|
+
"return": {
|
|
16127
|
+
"type": {
|
|
16128
|
+
"text": "void"
|
|
16129
|
+
}
|
|
16130
|
+
}
|
|
16131
|
+
},
|
|
16132
|
+
{
|
|
16133
|
+
"kind": "method",
|
|
16134
|
+
"name": "stopAnchorTracking",
|
|
16135
|
+
"privacy": "private",
|
|
16136
|
+
"return": {
|
|
16137
|
+
"type": {
|
|
16138
|
+
"text": "void"
|
|
16139
|
+
}
|
|
16140
|
+
}
|
|
16141
|
+
},
|
|
16142
|
+
{
|
|
16143
|
+
"kind": "method",
|
|
16144
|
+
"name": "syncOverlayModal",
|
|
16145
|
+
"privacy": "private",
|
|
16146
|
+
"return": {
|
|
16147
|
+
"type": {
|
|
16148
|
+
"text": "void"
|
|
16149
|
+
}
|
|
16150
|
+
},
|
|
16151
|
+
"description": "Apply modal a11y exactly when the flyout is open **and** presenting\nas an overlay drawer, and remove it otherwise. Called on open/mode\nchanges and when the viewport crosses the overlay threshold.\n\nModal treatment = background inert, scroll lock, `role=\"dialog\"` +\n`aria-modal`, focus moved into the drawer and trapped, and focus\nrestored on teardown — all via the (non-promoting) Overlay\ncontroller, so the flyout never leaves its page slot. The in-grid\nmodes stay a non-modal `complementary` landmark with no focus\nmanagement."
|
|
16152
|
+
},
|
|
16153
|
+
{
|
|
16154
|
+
"kind": "method",
|
|
16155
|
+
"name": "updateGeneratedAriaLabel",
|
|
16156
|
+
"privacy": "private",
|
|
16157
|
+
"return": {
|
|
16158
|
+
"type": {
|
|
16159
|
+
"text": "void"
|
|
16160
|
+
}
|
|
16161
|
+
},
|
|
16162
|
+
"description": "Mirror `heading` into `aria-label`, or apply a stable fallback\nwhile this is an overlay dialog, without clobbering a label the\nauthor controls (see lastGeneratedAriaLabel)."
|
|
16163
|
+
},
|
|
16164
|
+
{
|
|
16165
|
+
"kind": "field",
|
|
16166
|
+
"name": "seedColorBacker",
|
|
16167
|
+
"type": {
|
|
16168
|
+
"text": "string"
|
|
16169
|
+
},
|
|
16170
|
+
"privacy": "private",
|
|
16171
|
+
"default": "\"oklch(0.7 0.125 216)\"",
|
|
16172
|
+
"inheritedFrom": {
|
|
16173
|
+
"name": "EspalierElementBase",
|
|
16174
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16175
|
+
}
|
|
16176
|
+
},
|
|
16177
|
+
{
|
|
16178
|
+
"kind": "field",
|
|
16179
|
+
"name": "espRoot",
|
|
16180
|
+
"type": {
|
|
16181
|
+
"text": "EspalierRoot | null"
|
|
16182
|
+
},
|
|
16183
|
+
"privacy": "private",
|
|
16184
|
+
"default": "null",
|
|
16185
|
+
"inheritedFrom": {
|
|
16186
|
+
"name": "EspalierElementBase",
|
|
16187
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16188
|
+
}
|
|
16189
|
+
},
|
|
16190
|
+
{
|
|
16191
|
+
"kind": "field",
|
|
16192
|
+
"name": "variantTokenOriginalValues",
|
|
16193
|
+
"privacy": "private",
|
|
16194
|
+
"readonly": true,
|
|
16195
|
+
"default": "new Map< string, { generatedPriority: string; generatedValue: string; originalPriority: string; originalValue: string | null; } >()",
|
|
16196
|
+
"inheritedFrom": {
|
|
16197
|
+
"name": "EspalierElementBase",
|
|
16198
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16199
|
+
}
|
|
16200
|
+
},
|
|
16201
|
+
{
|
|
16202
|
+
"kind": "field",
|
|
16203
|
+
"name": "rootEventSubscriptionsActive",
|
|
16204
|
+
"type": {
|
|
16205
|
+
"text": "boolean"
|
|
16206
|
+
},
|
|
16207
|
+
"privacy": "private",
|
|
16208
|
+
"default": "false",
|
|
16209
|
+
"inheritedFrom": {
|
|
16210
|
+
"name": "EspalierElementBase",
|
|
16211
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16212
|
+
}
|
|
16213
|
+
},
|
|
16214
|
+
{
|
|
16215
|
+
"kind": "field",
|
|
16216
|
+
"name": "variantBacker",
|
|
16217
|
+
"type": {
|
|
16218
|
+
"text": "EspalierVariant"
|
|
16219
|
+
},
|
|
16220
|
+
"privacy": "protected",
|
|
16221
|
+
"default": "\"primary\"",
|
|
16222
|
+
"inheritedFrom": {
|
|
16223
|
+
"name": "EspalierElementBase",
|
|
16224
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16225
|
+
}
|
|
16226
|
+
},
|
|
16227
|
+
{
|
|
16228
|
+
"kind": "field",
|
|
16229
|
+
"name": "seedColor",
|
|
16230
|
+
"type": {
|
|
16231
|
+
"text": "string"
|
|
16232
|
+
},
|
|
16233
|
+
"privacy": "public",
|
|
16234
|
+
"inheritedFrom": {
|
|
16235
|
+
"name": "EspalierElementBase",
|
|
16236
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16237
|
+
}
|
|
16238
|
+
},
|
|
16239
|
+
{
|
|
16240
|
+
"kind": "field",
|
|
16241
|
+
"name": "correlationId",
|
|
16242
|
+
"privacy": "public",
|
|
16243
|
+
"inheritedFrom": {
|
|
16244
|
+
"name": "EspalierElementBase",
|
|
16245
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16246
|
+
}
|
|
16247
|
+
},
|
|
16248
|
+
{
|
|
16249
|
+
"kind": "method",
|
|
16250
|
+
"name": "focusResolvedElementAfterUpdate",
|
|
16251
|
+
"privacy": "protected",
|
|
16252
|
+
"return": {
|
|
16253
|
+
"type": {
|
|
16254
|
+
"text": "void"
|
|
16255
|
+
}
|
|
16256
|
+
},
|
|
16257
|
+
"parameters": [
|
|
16258
|
+
{
|
|
16259
|
+
"name": "resolveTarget",
|
|
16260
|
+
"type": {
|
|
16261
|
+
"text": "() => HTMLElement | null | undefined"
|
|
16262
|
+
}
|
|
16263
|
+
},
|
|
16264
|
+
{
|
|
16265
|
+
"name": "options",
|
|
16266
|
+
"optional": true,
|
|
16267
|
+
"type": {
|
|
16268
|
+
"text": "FocusOptions"
|
|
16269
|
+
}
|
|
16270
|
+
}
|
|
16271
|
+
],
|
|
16272
|
+
"inheritedFrom": {
|
|
16273
|
+
"name": "EspalierElementBase",
|
|
16274
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16275
|
+
}
|
|
16276
|
+
},
|
|
16277
|
+
{
|
|
16278
|
+
"kind": "method",
|
|
16279
|
+
"name": "focusShadowElementAfterUpdate",
|
|
16280
|
+
"privacy": "protected",
|
|
16281
|
+
"return": {
|
|
16282
|
+
"type": {
|
|
16283
|
+
"text": "void"
|
|
16284
|
+
}
|
|
16285
|
+
},
|
|
16286
|
+
"parameters": [
|
|
16287
|
+
{
|
|
16288
|
+
"name": "selector",
|
|
16289
|
+
"type": {
|
|
16290
|
+
"text": "string"
|
|
16291
|
+
}
|
|
16292
|
+
},
|
|
16293
|
+
{
|
|
16294
|
+
"name": "options",
|
|
16295
|
+
"optional": true,
|
|
16296
|
+
"type": {
|
|
16297
|
+
"text": "FocusOptions"
|
|
16298
|
+
}
|
|
16299
|
+
}
|
|
16300
|
+
],
|
|
16301
|
+
"inheritedFrom": {
|
|
16302
|
+
"name": "EspalierElementBase",
|
|
16303
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16304
|
+
}
|
|
16305
|
+
},
|
|
16306
|
+
{
|
|
16307
|
+
"kind": "method",
|
|
16308
|
+
"name": "emitValueChanged",
|
|
16309
|
+
"privacy": "protected",
|
|
16310
|
+
"return": {
|
|
16311
|
+
"type": {
|
|
16312
|
+
"text": "void"
|
|
16313
|
+
}
|
|
16314
|
+
},
|
|
16315
|
+
"parameters": [
|
|
16316
|
+
{
|
|
16317
|
+
"name": "detail",
|
|
16318
|
+
"type": {
|
|
16319
|
+
"text": "T"
|
|
16320
|
+
}
|
|
16321
|
+
}
|
|
16322
|
+
],
|
|
16323
|
+
"inheritedFrom": {
|
|
16324
|
+
"name": "EspalierElementBase",
|
|
16325
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16326
|
+
}
|
|
16327
|
+
},
|
|
16328
|
+
{
|
|
16329
|
+
"kind": "field",
|
|
16330
|
+
"name": "scheme",
|
|
16331
|
+
"type": {
|
|
16332
|
+
"text": "\"dark\" | \"light\""
|
|
16333
|
+
},
|
|
16334
|
+
"privacy": "public",
|
|
16335
|
+
"default": "\"light\"",
|
|
16336
|
+
"description": "The scheme to use for the component. This property is used internally\nto control the light/dark scheme so it matches the scheme of\n[esp-root](/components/root). It should not be set manually, it\nexists as an attribute for styling purposes.",
|
|
16337
|
+
"attribute": "scheme",
|
|
16338
|
+
"reflects": true,
|
|
16339
|
+
"inheritedFrom": {
|
|
16340
|
+
"name": "EspalierElementBase",
|
|
16341
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16342
|
+
}
|
|
16343
|
+
},
|
|
16344
|
+
{
|
|
16345
|
+
"kind": "field",
|
|
16346
|
+
"name": "variant",
|
|
16347
|
+
"type": {
|
|
16348
|
+
"text": "EspalierVariant"
|
|
16349
|
+
},
|
|
16350
|
+
"privacy": "public",
|
|
16351
|
+
"description": "The [color variant](/guides/color/variants) of the element.",
|
|
16352
|
+
"attribute": "variant",
|
|
16353
|
+
"reflects": true,
|
|
16354
|
+
"inheritedFrom": {
|
|
16355
|
+
"name": "EspalierElementBase",
|
|
16356
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16357
|
+
}
|
|
16358
|
+
},
|
|
16359
|
+
{
|
|
16360
|
+
"kind": "method",
|
|
16361
|
+
"name": "syncRootFromDom",
|
|
16362
|
+
"privacy": "private",
|
|
16363
|
+
"return": {
|
|
16364
|
+
"type": {
|
|
16365
|
+
"text": "EspalierRoot | null"
|
|
16366
|
+
}
|
|
16367
|
+
},
|
|
16368
|
+
"parameters": [
|
|
16369
|
+
{
|
|
16370
|
+
"name": "throwIfMissing",
|
|
16371
|
+
"type": {
|
|
16372
|
+
"text": "boolean"
|
|
16373
|
+
}
|
|
16374
|
+
}
|
|
16375
|
+
],
|
|
16376
|
+
"inheritedFrom": {
|
|
16377
|
+
"name": "EspalierElementBase",
|
|
16378
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16379
|
+
}
|
|
16380
|
+
},
|
|
16381
|
+
{
|
|
16382
|
+
"kind": "method",
|
|
16383
|
+
"name": "subscribeToRootEvents",
|
|
16384
|
+
"privacy": "private",
|
|
16385
|
+
"return": {
|
|
16386
|
+
"type": {
|
|
16387
|
+
"text": "void"
|
|
16388
|
+
}
|
|
16389
|
+
},
|
|
16390
|
+
"inheritedFrom": {
|
|
16391
|
+
"name": "EspalierElementBase",
|
|
16392
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16393
|
+
}
|
|
16394
|
+
},
|
|
16395
|
+
{
|
|
16396
|
+
"kind": "method",
|
|
16397
|
+
"name": "unsubscribeFromRootEvents",
|
|
16398
|
+
"privacy": "private",
|
|
16399
|
+
"return": {
|
|
16400
|
+
"type": {
|
|
16401
|
+
"text": "void"
|
|
16402
|
+
}
|
|
16403
|
+
},
|
|
16404
|
+
"inheritedFrom": {
|
|
16405
|
+
"name": "EspalierElementBase",
|
|
16406
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16407
|
+
}
|
|
16408
|
+
},
|
|
16409
|
+
{
|
|
16410
|
+
"kind": "field",
|
|
16411
|
+
"name": "handleSeedColorChanged",
|
|
16412
|
+
"privacy": "private",
|
|
16413
|
+
"inheritedFrom": {
|
|
16414
|
+
"name": "EspalierElementBase",
|
|
16415
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16416
|
+
}
|
|
16417
|
+
},
|
|
16418
|
+
{
|
|
16419
|
+
"kind": "field",
|
|
16420
|
+
"name": "handleSchemeChanged",
|
|
16421
|
+
"privacy": "private",
|
|
16422
|
+
"inheritedFrom": {
|
|
16423
|
+
"name": "EspalierElementBase",
|
|
16424
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16425
|
+
}
|
|
16426
|
+
},
|
|
16427
|
+
{
|
|
16428
|
+
"kind": "field",
|
|
16429
|
+
"name": "handleThemeChanged",
|
|
16430
|
+
"privacy": "private",
|
|
16431
|
+
"inheritedFrom": {
|
|
16432
|
+
"name": "EspalierElementBase",
|
|
16433
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16434
|
+
}
|
|
16435
|
+
},
|
|
16436
|
+
{
|
|
16437
|
+
"kind": "field",
|
|
16438
|
+
"name": "handleIconSpriteUrlChanged",
|
|
16439
|
+
"privacy": "private",
|
|
16440
|
+
"inheritedFrom": {
|
|
16441
|
+
"name": "EspalierElementBase",
|
|
16442
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16443
|
+
}
|
|
16444
|
+
},
|
|
16445
|
+
{
|
|
16446
|
+
"kind": "method",
|
|
16447
|
+
"name": "traverseToClosest",
|
|
16448
|
+
"privacy": "public",
|
|
16449
|
+
"return": {
|
|
16450
|
+
"type": {
|
|
16451
|
+
"text": ""
|
|
16452
|
+
}
|
|
16453
|
+
},
|
|
16454
|
+
"parameters": [
|
|
16455
|
+
{
|
|
16456
|
+
"name": "selector",
|
|
16457
|
+
"type": {
|
|
16458
|
+
"text": "string"
|
|
16459
|
+
},
|
|
16460
|
+
"description": "The selector of the element to look for"
|
|
16461
|
+
}
|
|
16462
|
+
],
|
|
16463
|
+
"description": "Traverse up the DOM tree to find the closest element that\nmatches the selector. This method is aware of shadow DOM\nboundaries and will traverse through them to find the element.",
|
|
16464
|
+
"inheritedFrom": {
|
|
16465
|
+
"name": "EspalierElementBase",
|
|
16466
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16467
|
+
}
|
|
16468
|
+
},
|
|
16469
|
+
{
|
|
16470
|
+
"kind": "field",
|
|
16471
|
+
"name": "textContrast",
|
|
16472
|
+
"type": {
|
|
16473
|
+
"text": "Partial<\n Record<SemanticColorName, { bg: SemanticColorName; targetLc: number }>\n >"
|
|
16474
|
+
},
|
|
16475
|
+
"privacy": "private",
|
|
16476
|
+
"static": true,
|
|
16477
|
+
"readonly": true,
|
|
16478
|
+
"default": "{ text: { bg: \"background\", targetLc: 75 }, dangerText: { bg: \"background\", targetLc: 75 }, headings: { bg: \"background\", targetLc: 60 }, headingsHover: { bg: \"background\", targetLc: 60 }, link: { bg: \"background\", targetLc: 75 }, linkHover: { bg: \"background\", targetLc: 75 }, actionText: { bg: \"actionBackground\", targetLc: 75 }, inputCaret: { bg: \"layer2\", targetLc: 60 }, inputSelection: { bg: \"inputSelectionBg\", targetLc: 60 }, }",
|
|
16479
|
+
"description": "Text tokens that require APCA contrast enforcement.\n\nEach entry maps a text-bearing semantic token to:\n - `bg`: the semantic token it sits on (reference color)\n - `targetLc`: the minimum |Lc| the text must achieve",
|
|
16480
|
+
"inheritedFrom": {
|
|
16481
|
+
"name": "EspalierElementBase",
|
|
16482
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16483
|
+
}
|
|
16484
|
+
},
|
|
16485
|
+
{
|
|
16486
|
+
"kind": "field",
|
|
16487
|
+
"name": "statusVariantSources",
|
|
16488
|
+
"type": {
|
|
16489
|
+
"text": "ReadonlySet<ColorSource>"
|
|
16490
|
+
},
|
|
16491
|
+
"privacy": "private",
|
|
16492
|
+
"static": true,
|
|
16493
|
+
"readonly": true,
|
|
16494
|
+
"default": "new Set<ColorSource>([ \"danger\", \"success\", \"warning\", ])",
|
|
16495
|
+
"description": "Variant color sources whose meaning is carried by a fixed hue rather\nthan the brand seed — the destructive / positive / warning status\nfamilies (ADR-004). For these variants the filled-action tokens are\npinned to the variant's own color so a theme cannot make them look\nlike an ordinary brand action. See task 098.",
|
|
16496
|
+
"inheritedFrom": {
|
|
16497
|
+
"name": "EspalierElementBase",
|
|
16498
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16499
|
+
}
|
|
16500
|
+
},
|
|
16501
|
+
{
|
|
16502
|
+
"kind": "field",
|
|
16503
|
+
"name": "semanticActionTokens",
|
|
16504
|
+
"type": {
|
|
16505
|
+
"text": "ReadonlySet<SemanticColorName>"
|
|
16506
|
+
},
|
|
16507
|
+
"privacy": "private",
|
|
16508
|
+
"static": true,
|
|
16509
|
+
"readonly": true,
|
|
16510
|
+
"default": "new Set<SemanticColorName>([\"actionBackground\", \"actionText\"])",
|
|
16511
|
+
"description": "Semantic tokens that paint a control's filled action surface. For a\nstatus variant these always derive from the variant's own color, so\nthe Taproot \"Buttons\" semantic group (which re-points\n`actionBackground` / `actionText` to a brand source) cannot rotate a\ndestructive / warning / positive action off its semantic hue. See\ntask 098.",
|
|
16512
|
+
"inheritedFrom": {
|
|
16513
|
+
"name": "EspalierElementBase",
|
|
16514
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16515
|
+
}
|
|
16516
|
+
},
|
|
16517
|
+
{
|
|
16518
|
+
"kind": "method",
|
|
16519
|
+
"name": "applyVariantTokens",
|
|
16520
|
+
"privacy": "protected",
|
|
16521
|
+
"return": {
|
|
16522
|
+
"type": {
|
|
16523
|
+
"text": "void"
|
|
16524
|
+
}
|
|
16525
|
+
},
|
|
16526
|
+
"inheritedFrom": {
|
|
16527
|
+
"name": "EspalierElementBase",
|
|
16528
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16529
|
+
}
|
|
16530
|
+
},
|
|
16531
|
+
{
|
|
16532
|
+
"kind": "method",
|
|
16533
|
+
"name": "effectiveVariantTokenSource",
|
|
16534
|
+
"privacy": "private",
|
|
16535
|
+
"return": {
|
|
16536
|
+
"type": {
|
|
16537
|
+
"text": "ColorSource"
|
|
16538
|
+
}
|
|
16539
|
+
},
|
|
16540
|
+
"parameters": [
|
|
16541
|
+
{
|
|
16542
|
+
"name": "name",
|
|
16543
|
+
"type": {
|
|
16544
|
+
"text": "SemanticColorName"
|
|
16545
|
+
}
|
|
16546
|
+
},
|
|
16547
|
+
{
|
|
16548
|
+
"name": "mappedSource",
|
|
16549
|
+
"type": {
|
|
16550
|
+
"text": "ColorSource"
|
|
16551
|
+
}
|
|
16552
|
+
},
|
|
16553
|
+
{
|
|
16554
|
+
"name": "isStatusVariant",
|
|
16555
|
+
"type": {
|
|
16556
|
+
"text": "boolean"
|
|
16557
|
+
}
|
|
16558
|
+
}
|
|
16559
|
+
],
|
|
16560
|
+
"description": "Resolve the color source used to derive a semantic token for the\nactive variant.\n\nNormally this is the theme's mapping source, so the variant performs a\nfull palette shift relative to its own color. The exception is the\nmeaning-bearing status variants (`danger`, `success`, `warning`): their\nfilled-action tokens (`actionBackground`, `actionText`) are pinned to\nthe variant's own color — the `primary` entry of the sub-variant\npalette, which is the variant color itself — so a theme that re-points\nthe Buttons semantic group to a brand source cannot rotate a\ndestructive / warning / positive action off its semantic hue. Ordinary\nbrand and primary variants keep full theme customization. See task 098.",
|
|
16561
|
+
"inheritedFrom": {
|
|
16562
|
+
"name": "EspalierElementBase",
|
|
16563
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16564
|
+
}
|
|
16565
|
+
},
|
|
16566
|
+
{
|
|
16567
|
+
"kind": "method",
|
|
16568
|
+
"name": "getVariantColorSource",
|
|
16569
|
+
"privacy": "protected",
|
|
16570
|
+
"return": {
|
|
16571
|
+
"type": {
|
|
16572
|
+
"text": "ColorSource | \"\""
|
|
16573
|
+
}
|
|
16574
|
+
},
|
|
16575
|
+
"inheritedFrom": {
|
|
16576
|
+
"name": "EspalierElementBase",
|
|
16577
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16578
|
+
}
|
|
16579
|
+
},
|
|
16580
|
+
{
|
|
16581
|
+
"kind": "method",
|
|
16582
|
+
"name": "setVariantTokenProperty",
|
|
16583
|
+
"privacy": "private",
|
|
16584
|
+
"return": {
|
|
16585
|
+
"type": {
|
|
16586
|
+
"text": "void"
|
|
16587
|
+
}
|
|
16588
|
+
},
|
|
16589
|
+
"parameters": [
|
|
16590
|
+
{
|
|
16591
|
+
"name": "name",
|
|
16592
|
+
"type": {
|
|
16593
|
+
"text": "string"
|
|
16594
|
+
}
|
|
16595
|
+
},
|
|
16596
|
+
{
|
|
16597
|
+
"name": "value",
|
|
16598
|
+
"type": {
|
|
16599
|
+
"text": "string"
|
|
16600
|
+
}
|
|
16601
|
+
}
|
|
16602
|
+
],
|
|
16603
|
+
"inheritedFrom": {
|
|
16604
|
+
"name": "EspalierElementBase",
|
|
16605
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16606
|
+
}
|
|
16607
|
+
},
|
|
16608
|
+
{
|
|
16609
|
+
"kind": "method",
|
|
16610
|
+
"name": "clearVariantTokens",
|
|
16611
|
+
"privacy": "private",
|
|
16612
|
+
"return": {
|
|
16613
|
+
"type": {
|
|
16614
|
+
"text": "void"
|
|
16615
|
+
}
|
|
16616
|
+
},
|
|
16617
|
+
"inheritedFrom": {
|
|
16618
|
+
"name": "EspalierElementBase",
|
|
16619
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16620
|
+
}
|
|
16621
|
+
}
|
|
16622
|
+
],
|
|
16623
|
+
"events": [
|
|
16624
|
+
{
|
|
16625
|
+
"name": "flyout-opened",
|
|
16626
|
+
"type": {
|
|
16627
|
+
"text": "CustomEvent<{}>"
|
|
16628
|
+
},
|
|
16629
|
+
"description": "Fired by `show()` when the flyout opens."
|
|
16630
|
+
},
|
|
16631
|
+
{
|
|
16632
|
+
"name": "flyout-closed",
|
|
16633
|
+
"type": {
|
|
16634
|
+
"text": "CustomEvent<{reason: FlyoutCloseReason}>"
|
|
16635
|
+
},
|
|
16636
|
+
"description": "Fired by `close()` when the flyout closes. `reason` is `\"escape\"`, `\"vellum\"`, `\"button\"`, or `\"programmatic\"`."
|
|
16637
|
+
},
|
|
16638
|
+
{
|
|
16639
|
+
"name": "flyout-state-changed",
|
|
16640
|
+
"type": {
|
|
16641
|
+
"text": "CustomEvent<{}>"
|
|
16642
|
+
},
|
|
16643
|
+
"description": "Fired on every `open`, `mode`, or `anchor` change, including direct property assignment (not just `show()`/`close()`). `esp-page` uses it to keep its layout in sync; most consumers want `flyout-opened`/`flyout-closed` instead."
|
|
16644
|
+
},
|
|
16645
|
+
{
|
|
16646
|
+
"name": "value-changed",
|
|
16647
|
+
"type": {
|
|
16648
|
+
"text": "CustomEvent"
|
|
16649
|
+
},
|
|
16650
|
+
"inheritedFrom": {
|
|
16651
|
+
"name": "EspalierElementBase",
|
|
16652
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16653
|
+
}
|
|
16654
|
+
}
|
|
16655
|
+
],
|
|
16656
|
+
"attributes": [
|
|
16657
|
+
{
|
|
16658
|
+
"name": "open",
|
|
16659
|
+
"type": {
|
|
16660
|
+
"text": "boolean"
|
|
16661
|
+
},
|
|
16662
|
+
"default": "false",
|
|
16663
|
+
"description": "Whether the flyout is open. Reflected so the initial state can\nbe declared in markup; `esp-page` mirrors it (via the lifecycle\nevents and the slot) onto its own `flyout-open` attribute to\ndrive the grid.",
|
|
16664
|
+
"fieldName": "open"
|
|
16665
|
+
},
|
|
16666
|
+
{
|
|
16667
|
+
"name": "heading",
|
|
16668
|
+
"type": {
|
|
16669
|
+
"text": "string"
|
|
16670
|
+
},
|
|
16671
|
+
"default": "\"\"",
|
|
16672
|
+
"description": "Heading text for the panel's header row. Also becomes the\nflyout's accessible name unless the author set an `aria-label`.\nAn open overlay without either uses the fallback name \"Flyout\" so\nits dialog is never exposed without an accessible name.",
|
|
16673
|
+
"fieldName": "heading"
|
|
16674
|
+
},
|
|
16675
|
+
{
|
|
16676
|
+
"name": "mode",
|
|
16677
|
+
"type": {
|
|
16678
|
+
"text": "\"auto\" | \"overlay\""
|
|
16679
|
+
},
|
|
16680
|
+
"default": "\"auto\"",
|
|
16681
|
+
"description": "Placement behavior.\n\n- `\"auto\"` (default) — the page's placement ladder: gutter,\n docked sidebar, then overlay drawer below the `50em` viewport\n threshold.\n- `\"overlay\"` — always the fixed overlay drawer, at any width.\n The page never reserves a grid track for an overlay-mode\n flyout.",
|
|
16682
|
+
"fieldName": "mode"
|
|
16683
|
+
},
|
|
16684
|
+
{
|
|
16685
|
+
"name": "match-surface",
|
|
16686
|
+
"type": {
|
|
16687
|
+
"text": "boolean"
|
|
16688
|
+
},
|
|
16689
|
+
"default": "false",
|
|
16690
|
+
"description": "When set on a flyout slotted into an `esp-page`, the panel lifts\nits **trailing** edge with the page's surface edge shadow, so it\nreads as a raised peer of the content surface it flies out from\nrather than the shadowless tear-off. The **leading** edge keeps\nits dotted perforation and casts no shadow, so the panel stays\nattached at the tear line instead of floating over the content.\nThe trailing-corner radius is still `--esp-flyout-radius`. No\neffect on a standalone flyout — there is no page surface to match.",
|
|
16691
|
+
"fieldName": "matchSurface"
|
|
16692
|
+
},
|
|
16693
|
+
{
|
|
16694
|
+
"name": "standalone",
|
|
16695
|
+
"type": {
|
|
16696
|
+
"text": "boolean"
|
|
16697
|
+
},
|
|
16698
|
+
"default": "false",
|
|
16699
|
+
"description": "Whether this flyout ignores the shared `showFlyout()` /\n`closeFlyout()` bus and is driven only through its own\n`show()` / `close()` / `toggle()` API.\n\nBy default a flyout services the bus, so a single flyout in a\npage \"just works\" as the target of `showFlyout()` — the same\nzero-config model as `<esp-toaster>` and `showToast()`. Because\nthe bus is a global broadcast, **every** listening flyout on the\npage answers a `showFlyout()` call; set `standalone` on any\nflyout you drive directly so only your one designated help\nsurface responds.",
|
|
16700
|
+
"fieldName": "standalone"
|
|
16701
|
+
},
|
|
16702
|
+
{
|
|
16703
|
+
"name": "scheme",
|
|
16704
|
+
"type": {
|
|
16705
|
+
"text": "\"dark\" | \"light\""
|
|
16706
|
+
},
|
|
16707
|
+
"default": "\"light\"",
|
|
16708
|
+
"description": "The scheme to use for the component. This property is used internally\nto control the light/dark scheme so it matches the scheme of\n[esp-root](/components/root). It should not be set manually, it\nexists as an attribute for styling purposes.",
|
|
16709
|
+
"fieldName": "scheme",
|
|
16710
|
+
"inheritedFrom": {
|
|
16711
|
+
"name": "EspalierElementBase",
|
|
16712
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16713
|
+
}
|
|
16714
|
+
},
|
|
16715
|
+
{
|
|
16716
|
+
"name": "variant",
|
|
16717
|
+
"type": {
|
|
16718
|
+
"text": "EspalierVariant"
|
|
16719
|
+
},
|
|
16720
|
+
"description": "The [color variant](/guides/color/variants) of the element.",
|
|
16721
|
+
"fieldName": "variant",
|
|
16722
|
+
"inheritedFrom": {
|
|
16723
|
+
"name": "EspalierElementBase",
|
|
16724
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16725
|
+
}
|
|
16726
|
+
}
|
|
16727
|
+
],
|
|
16728
|
+
"superclass": {
|
|
16729
|
+
"name": "EspalierElementBase",
|
|
16730
|
+
"module": "dist/shared/esp-element-base.js"
|
|
16731
|
+
},
|
|
15400
16732
|
"docPageTitle": {
|
|
15401
|
-
"name": "
|
|
15402
|
-
"description": "
|
|
16733
|
+
"name": "Flyout",
|
|
16734
|
+
"description": ""
|
|
15403
16735
|
},
|
|
15404
16736
|
"docUrl": {
|
|
15405
|
-
"name": "/components/
|
|
16737
|
+
"name": "/components/flyout",
|
|
15406
16738
|
"description": ""
|
|
15407
16739
|
},
|
|
15408
16740
|
"menuGroup": {
|
|
15409
|
-
"name": "
|
|
15410
|
-
"description": "
|
|
16741
|
+
"name": "Structure",
|
|
16742
|
+
"description": ""
|
|
16743
|
+
},
|
|
16744
|
+
"menuOrder": {
|
|
16745
|
+
"name": "3",
|
|
16746
|
+
"description": ""
|
|
15411
16747
|
},
|
|
15412
16748
|
"menuLabel": {
|
|
15413
|
-
"name": "
|
|
15414
|
-
"description": "
|
|
16749
|
+
"name": "Flyout",
|
|
16750
|
+
"description": ""
|
|
15415
16751
|
},
|
|
15416
16752
|
"menuIcon": {
|
|
15417
|
-
"name": "
|
|
16753
|
+
"name": "layout",
|
|
15418
16754
|
"description": ""
|
|
15419
16755
|
},
|
|
15420
|
-
"
|
|
15421
|
-
|
|
15422
|
-
"description": "Background color of the shared field shell. Defaults to `var(--esp-color-layer-2)`.",
|
|
15423
|
-
"name": "--esp-field-background",
|
|
15424
|
-
"inheritedFrom": {
|
|
15425
|
-
"name": "EspalierElementBase",
|
|
15426
|
-
"module": "dist/shared/esp-element-base.js"
|
|
15427
|
-
}
|
|
15428
|
-
},
|
|
15429
|
-
{
|
|
15430
|
-
"description": "Border color of the shared field shell. Defaults to `var(--esp-color-border)`.",
|
|
15431
|
-
"name": "--esp-field-border-color",
|
|
15432
|
-
"inheritedFrom": {
|
|
15433
|
-
"name": "EspalierElementBase",
|
|
15434
|
-
"module": "dist/shared/esp-element-base.js"
|
|
15435
|
-
}
|
|
15436
|
-
},
|
|
15437
|
-
{
|
|
15438
|
-
"description": "Border width of the shared field shell. Defaults to `1px`.",
|
|
15439
|
-
"name": "--esp-field-border-width",
|
|
15440
|
-
"inheritedFrom": {
|
|
15441
|
-
"name": "EspalierElementBase",
|
|
15442
|
-
"module": "dist/shared/esp-element-base.js"
|
|
15443
|
-
}
|
|
15444
|
-
},
|
|
15445
|
-
{
|
|
15446
|
-
"description": "Text color used inside the shared field shell. Defaults to `var(--esp-color-text)`.",
|
|
15447
|
-
"name": "--esp-field-text-color",
|
|
15448
|
-
"inheritedFrom": {
|
|
15449
|
-
"name": "EspalierElementBase",
|
|
15450
|
-
"module": "dist/shared/esp-element-base.js"
|
|
15451
|
-
}
|
|
15452
|
-
},
|
|
15453
|
-
{
|
|
15454
|
-
"description": "Hover background color of the shared field shell. Derived from `--esp-field-background`.",
|
|
15455
|
-
"name": "--esp-field-hover-bg",
|
|
15456
|
-
"inheritedFrom": {
|
|
15457
|
-
"name": "EspalierElementBase",
|
|
15458
|
-
"module": "dist/shared/esp-element-base.js"
|
|
15459
|
-
}
|
|
15460
|
-
},
|
|
15461
|
-
{
|
|
15462
|
-
"description": "Focus background color of the shared field shell. Derived from `--esp-field-background`.",
|
|
15463
|
-
"name": "--esp-field-focus-bg",
|
|
15464
|
-
"inheritedFrom": {
|
|
15465
|
-
"name": "EspalierElementBase",
|
|
15466
|
-
"module": "dist/shared/esp-element-base.js"
|
|
15467
|
-
}
|
|
15468
|
-
},
|
|
15469
|
-
{
|
|
15470
|
-
"description": "Shadow color used for shared field focus treatment. Defaults to `var(--esp-color-shadow)`.",
|
|
15471
|
-
"name": "--esp-field-focus-shadow",
|
|
15472
|
-
"inheritedFrom": {
|
|
15473
|
-
"name": "EspalierElementBase",
|
|
15474
|
-
"module": "dist/shared/esp-element-base.js"
|
|
15475
|
-
}
|
|
15476
|
-
}
|
|
15477
|
-
],
|
|
15478
|
-
"events": [
|
|
15479
|
-
{
|
|
15480
|
-
"name": "value-changed",
|
|
15481
|
-
"type": {
|
|
15482
|
-
"text": "CustomEvent"
|
|
15483
|
-
},
|
|
15484
|
-
"inheritedFrom": {
|
|
15485
|
-
"name": "EspalierElementBase",
|
|
15486
|
-
"module": "dist/shared/esp-element-base.js"
|
|
15487
|
-
}
|
|
15488
|
-
}
|
|
15489
|
-
]
|
|
16756
|
+
"tagName": "esp-flyout",
|
|
16757
|
+
"customElement": true
|
|
15490
16758
|
}
|
|
15491
16759
|
],
|
|
15492
16760
|
"exports": [
|
|
15493
16761
|
{
|
|
15494
16762
|
"kind": "js",
|
|
15495
|
-
"name": "
|
|
16763
|
+
"name": "EspalierFlyout",
|
|
15496
16764
|
"declaration": {
|
|
15497
|
-
"name": "
|
|
15498
|
-
"module": "dist/
|
|
16765
|
+
"name": "EspalierFlyout",
|
|
16766
|
+
"module": "dist/flyout/esp-flyout.js"
|
|
15499
16767
|
}
|
|
15500
16768
|
},
|
|
15501
16769
|
{
|
|
15502
16770
|
"kind": "custom-element-definition",
|
|
15503
|
-
"name": "esp-
|
|
16771
|
+
"name": "esp-flyout",
|
|
15504
16772
|
"declaration": {
|
|
15505
|
-
"name": "
|
|
15506
|
-
"module": "dist/
|
|
16773
|
+
"name": "EspalierFlyout",
|
|
16774
|
+
"module": "dist/flyout/esp-flyout.js"
|
|
15507
16775
|
}
|
|
15508
16776
|
}
|
|
15509
16777
|
]
|
|
@@ -15559,6 +16827,15 @@
|
|
|
15559
16827
|
"privacy": "private",
|
|
15560
16828
|
"default": "new Set<string>()"
|
|
15561
16829
|
},
|
|
16830
|
+
{
|
|
16831
|
+
"kind": "field",
|
|
16832
|
+
"name": "formItemDescription",
|
|
16833
|
+
"type": {
|
|
16834
|
+
"text": "string | null"
|
|
16835
|
+
},
|
|
16836
|
+
"privacy": "private",
|
|
16837
|
+
"default": "null"
|
|
16838
|
+
},
|
|
15562
16839
|
{
|
|
15563
16840
|
"kind": "field",
|
|
15564
16841
|
"name": "_rangeGeneration",
|
|
@@ -15651,6 +16928,16 @@
|
|
|
15651
16928
|
},
|
|
15652
16929
|
"description": "Focus the picker input."
|
|
15653
16930
|
},
|
|
16931
|
+
{
|
|
16932
|
+
"kind": "method",
|
|
16933
|
+
"name": "syncFormItemDescription",
|
|
16934
|
+
"privacy": "private",
|
|
16935
|
+
"return": {
|
|
16936
|
+
"type": {
|
|
16937
|
+
"text": "void"
|
|
16938
|
+
}
|
|
16939
|
+
}
|
|
16940
|
+
},
|
|
15654
16941
|
{
|
|
15655
16942
|
"kind": "method",
|
|
15656
16943
|
"name": "getUpdateComplete",
|
|
@@ -16776,6 +18063,14 @@
|
|
|
16776
18063
|
"description": "The color of the label text.",
|
|
16777
18064
|
"name": "--esp-form-item-label-color"
|
|
16778
18065
|
},
|
|
18066
|
+
{
|
|
18067
|
+
"description": "The color of the hint text. Defaults to a muted variant of the body text color.",
|
|
18068
|
+
"name": "--esp-form-item-hint-color"
|
|
18069
|
+
},
|
|
18070
|
+
{
|
|
18071
|
+
"description": "The font size of the hint text. Defaults to `var(--esp-type-tiny)`.",
|
|
18072
|
+
"name": "--esp-form-item-hint-font-size"
|
|
18073
|
+
},
|
|
16779
18074
|
{
|
|
16780
18075
|
"description": "The color of the visible error badge text.",
|
|
16781
18076
|
"name": "--esp-form-item-error-color"
|
|
@@ -16833,6 +18128,16 @@
|
|
|
16833
18128
|
"name": "--esp-form-item-font-size"
|
|
16834
18129
|
}
|
|
16835
18130
|
],
|
|
18131
|
+
"slots": [
|
|
18132
|
+
{
|
|
18133
|
+
"description": "The single form control the item wraps.",
|
|
18134
|
+
"name": ""
|
|
18135
|
+
},
|
|
18136
|
+
{
|
|
18137
|
+
"description": "Rich hint content; replaces the `hint` attribute text when present.",
|
|
18138
|
+
"name": "hint"
|
|
18139
|
+
}
|
|
18140
|
+
],
|
|
16836
18141
|
"members": [
|
|
16837
18142
|
{
|
|
16838
18143
|
"kind": "field",
|
|
@@ -16881,6 +18186,85 @@
|
|
|
16881
18186
|
"attribute": "autofocus",
|
|
16882
18187
|
"reflects": true
|
|
16883
18188
|
},
|
|
18189
|
+
{
|
|
18190
|
+
"kind": "field",
|
|
18191
|
+
"name": "hint",
|
|
18192
|
+
"type": {
|
|
18193
|
+
"text": "string"
|
|
18194
|
+
},
|
|
18195
|
+
"privacy": "public",
|
|
18196
|
+
"default": "\"\"",
|
|
18197
|
+
"description": "Persistent helper text shown with the field — the bottom rung of\nthe help ladder. Hints are static authored guidance such as an\nexpected format; validation messaging belongs to `error` and\n`warning` and must not be routed through the hint. The hint stays\nvisible while an error or warning badge is showing, and is\nannounced to assistive technology as the field's description via\n`aria-describedby`.\n\n```html\n<esp-box class=\"demo-form\">\n <esp-form-item\n label=\"Employer ID\"\n hint=\"Use the format XX-XXXXXXX.\">\n <esp-input></esp-input>\n </esp-form-item>\n <esp-button label=\"Form Things\"></esp-button>\n</esp-box>\n```\n\nFor rich hint content, slot markup into the `hint` slot instead;\nit replaces the attribute text when present.",
|
|
18198
|
+
"attribute": "hint"
|
|
18199
|
+
},
|
|
18200
|
+
{
|
|
18201
|
+
"kind": "field",
|
|
18202
|
+
"name": "hintPlacement",
|
|
18203
|
+
"type": {
|
|
18204
|
+
"text": "\"below\" | \"above\""
|
|
18205
|
+
},
|
|
18206
|
+
"privacy": "public",
|
|
18207
|
+
"default": "\"below\"",
|
|
18208
|
+
"description": "Where the hint renders. `below` (the default) places it directly\nunder the field, above the error/warning badge rows. `above`\nplaces it between the label text and the field. Any other value\nfalls back to `below`.\n\n```html\n<esp-box class=\"demo-form\">\n <esp-form-item\n label=\"Employer ID\"\n hint=\"Use the format XX-XXXXXXX.\"\n hint-placement=\"above\">\n <esp-input></esp-input>\n </esp-form-item>\n <esp-button label=\"Form Things\"></esp-button>\n</esp-box>\n```",
|
|
18209
|
+
"attribute": "hint-placement"
|
|
18210
|
+
},
|
|
18211
|
+
{
|
|
18212
|
+
"kind": "field",
|
|
18213
|
+
"name": "hintId",
|
|
18214
|
+
"privacy": "private",
|
|
18215
|
+
"readonly": true,
|
|
18216
|
+
"default": "`esp-form-item-hint-${++hintIdCounter}`",
|
|
18217
|
+
"description": "Stable id for the hint text element, referenced by the slotted\nfield's `aria-describedby`."
|
|
18218
|
+
},
|
|
18219
|
+
{
|
|
18220
|
+
"kind": "field",
|
|
18221
|
+
"name": "managedHintEl",
|
|
18222
|
+
"type": {
|
|
18223
|
+
"text": "HTMLSpanElement | null"
|
|
18224
|
+
},
|
|
18225
|
+
"privacy": "private",
|
|
18226
|
+
"default": "null",
|
|
18227
|
+
"description": "The light-DOM span this component creates to carry the `hint`\nattribute text. See `syncManagedHint` for why the text cannot\nstay in the shadow root."
|
|
18228
|
+
},
|
|
18229
|
+
{
|
|
18230
|
+
"kind": "field",
|
|
18231
|
+
"name": "appliedHintTokens",
|
|
18232
|
+
"type": {
|
|
18233
|
+
"text": "string[]"
|
|
18234
|
+
},
|
|
18235
|
+
"privacy": "private",
|
|
18236
|
+
"default": "[]",
|
|
18237
|
+
"description": "The describedby tokens this component added on the last sync."
|
|
18238
|
+
},
|
|
18239
|
+
{
|
|
18240
|
+
"kind": "field",
|
|
18241
|
+
"name": "hintContentObserver",
|
|
18242
|
+
"privacy": "private",
|
|
18243
|
+
"readonly": true,
|
|
18244
|
+
"default": "new MutationObserver(() => { this.syncFieldDescribedBy(); })",
|
|
18245
|
+
"description": "Keep a shadow-local mirror current when rich hint text changes."
|
|
18246
|
+
},
|
|
18247
|
+
{
|
|
18248
|
+
"kind": "field",
|
|
18249
|
+
"name": "hasHint",
|
|
18250
|
+
"type": {
|
|
18251
|
+
"text": "boolean"
|
|
18252
|
+
},
|
|
18253
|
+
"privacy": "private",
|
|
18254
|
+
"description": "A hint exists when either the attribute or the slot provides one.",
|
|
18255
|
+
"readonly": true
|
|
18256
|
+
},
|
|
18257
|
+
{
|
|
18258
|
+
"kind": "method",
|
|
18259
|
+
"name": "consumerHintElements",
|
|
18260
|
+
"privacy": "private",
|
|
18261
|
+
"return": {
|
|
18262
|
+
"type": {
|
|
18263
|
+
"text": "Element[]"
|
|
18264
|
+
}
|
|
18265
|
+
},
|
|
18266
|
+
"description": "Consumer-provided `slot=\"hint\"` elements (excluding the managed span)."
|
|
18267
|
+
},
|
|
16884
18268
|
{
|
|
16885
18269
|
"kind": "field",
|
|
16886
18270
|
"name": "error",
|
|
@@ -16974,6 +18358,67 @@
|
|
|
16974
18358
|
"privacy": "private",
|
|
16975
18359
|
"default": "[]"
|
|
16976
18360
|
},
|
|
18361
|
+
{
|
|
18362
|
+
"kind": "field",
|
|
18363
|
+
"name": "handleHintSlotChange",
|
|
18364
|
+
"privacy": "private",
|
|
18365
|
+
"description": "Re-evaluate hint presence when `hint` slot content changes."
|
|
18366
|
+
},
|
|
18367
|
+
{
|
|
18368
|
+
"kind": "method",
|
|
18369
|
+
"name": "observeConsumerHintContent",
|
|
18370
|
+
"privacy": "private",
|
|
18371
|
+
"return": {
|
|
18372
|
+
"type": {
|
|
18373
|
+
"text": "void"
|
|
18374
|
+
}
|
|
18375
|
+
},
|
|
18376
|
+
"description": "Watch rich hint text and ids without observing the managed fallback span."
|
|
18377
|
+
},
|
|
18378
|
+
{
|
|
18379
|
+
"kind": "method",
|
|
18380
|
+
"name": "syncManagedHint",
|
|
18381
|
+
"privacy": "private",
|
|
18382
|
+
"return": {
|
|
18383
|
+
"type": {
|
|
18384
|
+
"text": "void"
|
|
18385
|
+
}
|
|
18386
|
+
},
|
|
18387
|
+
"description": "Keep the `hint` attribute text in the light DOM. An\n`aria-describedby` IDREF on the slotted field cannot reach into\nthis component's shadow root (nor can ARIA element reflection —\nbrowsers drop references that point down into a shadow root), so\nthe description text must live in the field's own tree. The\nattribute text is projected through the `hint` slot via a span\nthis component owns; consumer-slotted hint content replaces the\nattribute text entirely."
|
|
18388
|
+
},
|
|
18389
|
+
{
|
|
18390
|
+
"kind": "method",
|
|
18391
|
+
"name": "hintDescriptionIds",
|
|
18392
|
+
"privacy": "private",
|
|
18393
|
+
"return": {
|
|
18394
|
+
"type": {
|
|
18395
|
+
"text": "string[]"
|
|
18396
|
+
}
|
|
18397
|
+
},
|
|
18398
|
+
"description": "Ids of the light-DOM elements carrying the hint text, assigning\ngenerated ids to consumer elements that lack one. Consumer ids are\nminted fresh from the module counter — never `hintId`, which is\nreserved for the managed span so a consumer element that keeps a\ngenerated id after it stops being a hint can never duplicate it."
|
|
18399
|
+
},
|
|
18400
|
+
{
|
|
18401
|
+
"kind": "method",
|
|
18402
|
+
"name": "hintDescriptionText",
|
|
18403
|
+
"privacy": "private",
|
|
18404
|
+
"return": {
|
|
18405
|
+
"type": {
|
|
18406
|
+
"text": "string | null"
|
|
18407
|
+
}
|
|
18408
|
+
},
|
|
18409
|
+
"description": "Plain text mirrored into an Espalier control's own shadow root."
|
|
18410
|
+
},
|
|
18411
|
+
{
|
|
18412
|
+
"kind": "method",
|
|
18413
|
+
"name": "syncFieldDescribedBy",
|
|
18414
|
+
"privacy": "private",
|
|
18415
|
+
"return": {
|
|
18416
|
+
"type": {
|
|
18417
|
+
"text": "void"
|
|
18418
|
+
}
|
|
18419
|
+
},
|
|
18420
|
+
"description": "Mirror the hint onto the slotted field as its accessible\ndescription, preserving any consumer-set `aria-describedby`\ntokens (the same merge `esp-tooltip` performs on its trigger)."
|
|
18421
|
+
},
|
|
16977
18422
|
{
|
|
16978
18423
|
"kind": "method",
|
|
16979
18424
|
"name": "focus",
|
|
@@ -16993,6 +18438,12 @@
|
|
|
16993
18438
|
}
|
|
16994
18439
|
],
|
|
16995
18440
|
"description": "Focus the assigned slotted field."
|
|
18441
|
+
},
|
|
18442
|
+
{
|
|
18443
|
+
"kind": "method",
|
|
18444
|
+
"name": "renderHint",
|
|
18445
|
+
"privacy": "private",
|
|
18446
|
+
"description": "The hint renders inside the `<label>` when placed `above`, so it\nis wrapped in `aria-hidden` there to keep it out of the field's\naccessible-name computation — it stays announced as a description\nbecause nodes directly referenced by `aria-describedby` are\nincluded even when hidden."
|
|
16996
18447
|
}
|
|
16997
18448
|
],
|
|
16998
18449
|
"attributes": [
|
|
@@ -17014,6 +18465,24 @@
|
|
|
17014
18465
|
"description": "When true, the first control where autofocus is true has\nfocus captured.",
|
|
17015
18466
|
"fieldName": "autofocus"
|
|
17016
18467
|
},
|
|
18468
|
+
{
|
|
18469
|
+
"name": "hint",
|
|
18470
|
+
"type": {
|
|
18471
|
+
"text": "string"
|
|
18472
|
+
},
|
|
18473
|
+
"default": "\"\"",
|
|
18474
|
+
"description": "Persistent helper text shown with the field — the bottom rung of\nthe help ladder. Hints are static authored guidance such as an\nexpected format; validation messaging belongs to `error` and\n`warning` and must not be routed through the hint. The hint stays\nvisible while an error or warning badge is showing, and is\nannounced to assistive technology as the field's description via\n`aria-describedby`.\n\n```html\n<esp-box class=\"demo-form\">\n <esp-form-item\n label=\"Employer ID\"\n hint=\"Use the format XX-XXXXXXX.\">\n <esp-input></esp-input>\n </esp-form-item>\n <esp-button label=\"Form Things\"></esp-button>\n</esp-box>\n```\n\nFor rich hint content, slot markup into the `hint` slot instead;\nit replaces the attribute text when present.",
|
|
18475
|
+
"fieldName": "hint"
|
|
18476
|
+
},
|
|
18477
|
+
{
|
|
18478
|
+
"name": "hint-placement",
|
|
18479
|
+
"type": {
|
|
18480
|
+
"text": "\"below\" | \"above\""
|
|
18481
|
+
},
|
|
18482
|
+
"default": "\"below\"",
|
|
18483
|
+
"description": "Where the hint renders. `below` (the default) places it directly\nunder the field, above the error/warning badge rows. `above`\nplaces it between the label text and the field. Any other value\nfalls back to `below`.\n\n```html\n<esp-box class=\"demo-form\">\n <esp-form-item\n label=\"Employer ID\"\n hint=\"Use the format XX-XXXXXXX.\"\n hint-placement=\"above\">\n <esp-input></esp-input>\n </esp-form-item>\n <esp-button label=\"Form Things\"></esp-button>\n</esp-box>\n```",
|
|
18484
|
+
"fieldName": "hintPlacement"
|
|
18485
|
+
},
|
|
17017
18486
|
{
|
|
17018
18487
|
"name": "error",
|
|
17019
18488
|
"type": {
|
|
@@ -24563,6 +26032,12 @@
|
|
|
24563
26032
|
"privacy": "private",
|
|
24564
26033
|
"default": "new FormFieldController({ host: this, internals: this.internals, getFormValue: () => this.value || null, getValidity: () => this._getValidity(), getValidationAnchor: (): HTMLElement => this.theInput.value ?? this, onReset: () => { this.value = \"\"; this._dateDisplayText = \"\"; this._dateManaged = false; this._telDisplayText = \"\"; this._telManaged = false; this._hasVisibleError = false; }, onRestore: (state: string) => { this.value = state; if (this.inputType === \"date\" && state) { this._restoreDateDisplay(state); } if (this.inputType === \"tel\" && state) { this._restoreTelDisplay(state); } }, onDisabled: (isDisabled: boolean) => { this.disabled = isDisabled; }, })"
|
|
24565
26034
|
},
|
|
26035
|
+
{
|
|
26036
|
+
"kind": "field",
|
|
26037
|
+
"name": "formItemDescription",
|
|
26038
|
+
"privacy": "private",
|
|
26039
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this.theInput.value, })"
|
|
26040
|
+
},
|
|
24566
26041
|
{
|
|
24567
26042
|
"kind": "field",
|
|
24568
26043
|
"name": "_hasVisibleError",
|
|
@@ -30722,9 +32197,17 @@
|
|
|
30722
32197
|
"name": "--esp-page-surface-shadow"
|
|
30723
32198
|
},
|
|
30724
32199
|
{
|
|
30725
|
-
"description": "An optional border on the inline edges of the surface, for themes preferring a hairline over a shadow. Defaults to `none` (e.g. `1px solid var(--esp-color-border)`).",
|
|
32200
|
+
"description": "An optional border on the inline edges of the surface, for themes preferring a hairline over a shadow. Defaults to `none` (e.g. `1px solid var(--esp-color-border)`). Combine with `--esp-page-surface-shadow: none` to switch the content frame from a drop shadow to a hairline, or turn both off for no frame.",
|
|
30726
32201
|
"name": "--esp-page-surface-border"
|
|
30727
32202
|
},
|
|
32203
|
+
{
|
|
32204
|
+
"description": "The background of the main content well. Defaults to `transparent` (the well shows the page background). Set it to give the content well its own card color, or pair the transparent default with `--esp-page-surface-shadow: none` for content that floats directly on the page with no frame.",
|
|
32205
|
+
"name": "--esp-page-main-background"
|
|
32206
|
+
},
|
|
32207
|
+
{
|
|
32208
|
+
"description": "The width of the open flyout track (and of the `esp-flyout` overlay drawer). Defaults to `20rem`.",
|
|
32209
|
+
"name": "--esp-page-flyout-width"
|
|
32210
|
+
},
|
|
30728
32211
|
{
|
|
30729
32212
|
"description": "Offset reserved for fixed headers. Defaults to `var(--esp-header-height)`.",
|
|
30730
32213
|
"name": "--esp-page-fixed-header-offset"
|
|
@@ -30821,6 +32304,10 @@
|
|
|
30821
32304
|
"description": "Content to place in the right aside.",
|
|
30822
32305
|
"name": "right"
|
|
30823
32306
|
},
|
|
32307
|
+
{
|
|
32308
|
+
"description": "A transient `esp-flyout` panel that lives on the canvas, outside the content surface. Closed it costs no width; open it claims the right canvas gutter first — the surface keeps its alignment weighting and shifts only as far as the flyout's width requires — then docks as a width-competing right sidebar when no gutter exists, and becomes an overlay drawer on small viewports. The persistent `right` aside and the transient flyout are complementary, not alternatives. A flyout opened with an `anchor` aligns to that trigger and stays in the same document scroll flow.",
|
|
32309
|
+
"name": "flyout"
|
|
32310
|
+
},
|
|
30824
32311
|
{
|
|
30825
32312
|
"description": "Content to place in the footer.",
|
|
30826
32313
|
"name": "footer"
|
|
@@ -30836,6 +32323,31 @@
|
|
|
30836
32323
|
"name": "dialogZone",
|
|
30837
32324
|
"privacy": "private"
|
|
30838
32325
|
},
|
|
32326
|
+
{
|
|
32327
|
+
"kind": "field",
|
|
32328
|
+
"name": "flyoutSlot",
|
|
32329
|
+
"privacy": "private"
|
|
32330
|
+
},
|
|
32331
|
+
{
|
|
32332
|
+
"kind": "method",
|
|
32333
|
+
"name": "syncFlyoutState",
|
|
32334
|
+
"privacy": "private",
|
|
32335
|
+
"return": {
|
|
32336
|
+
"type": {
|
|
32337
|
+
"text": "void"
|
|
32338
|
+
}
|
|
32339
|
+
},
|
|
32340
|
+
"parameters": [
|
|
32341
|
+
{
|
|
32342
|
+
"name": "ev",
|
|
32343
|
+
"optional": true,
|
|
32344
|
+
"type": {
|
|
32345
|
+
"text": "Event"
|
|
32346
|
+
}
|
|
32347
|
+
}
|
|
32348
|
+
],
|
|
32349
|
+
"description": "Mirror the slotted flyout's open, overlay, and anchor state onto\nhost attributes read by the grid CSS. State is recomputed from the\nslot so multiple flyouts and slot changes stay correct."
|
|
32350
|
+
},
|
|
30839
32351
|
{
|
|
30840
32352
|
"kind": "field",
|
|
30841
32353
|
"name": "kind",
|
|
@@ -31792,6 +33304,16 @@
|
|
|
31792
33304
|
"module": "dist/pickers/esp-picker-base.js"
|
|
31793
33305
|
}
|
|
31794
33306
|
},
|
|
33307
|
+
{
|
|
33308
|
+
"kind": "field",
|
|
33309
|
+
"name": "formItemDescription",
|
|
33310
|
+
"privacy": "private",
|
|
33311
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this.theInput.value, })",
|
|
33312
|
+
"inheritedFrom": {
|
|
33313
|
+
"name": "EspalierPickerBase",
|
|
33314
|
+
"module": "dist/pickers/esp-picker-base.js"
|
|
33315
|
+
}
|
|
33316
|
+
},
|
|
31795
33317
|
{
|
|
31796
33318
|
"kind": "method",
|
|
31797
33319
|
"name": "formResetCallback",
|
|
@@ -33167,6 +34689,16 @@
|
|
|
33167
34689
|
"module": "dist/pickers/esp-picker-base.js"
|
|
33168
34690
|
}
|
|
33169
34691
|
},
|
|
34692
|
+
{
|
|
34693
|
+
"kind": "field",
|
|
34694
|
+
"name": "formItemDescription",
|
|
34695
|
+
"privacy": "private",
|
|
34696
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this.theInput.value, })",
|
|
34697
|
+
"inheritedFrom": {
|
|
34698
|
+
"name": "EspalierPickerBase",
|
|
34699
|
+
"module": "dist/pickers/esp-picker-base.js"
|
|
34700
|
+
}
|
|
34701
|
+
},
|
|
33170
34702
|
{
|
|
33171
34703
|
"kind": "method",
|
|
33172
34704
|
"name": "formResetCallback",
|
|
@@ -34282,6 +35814,12 @@
|
|
|
34282
35814
|
"privacy": "protected",
|
|
34283
35815
|
"default": "new FormFieldController({ host: this, internals: this.internals, getFormValue: () => this.getPickerFormValue(), getValidity: () => this.getPickerValidity(), onReset: () => this.handlePickerReset(), onRestore: (state: string) => this.handlePickerRestore(state), onDisabled: (isDisabled: boolean) => { this.disabled = isDisabled; }, })"
|
|
34284
35816
|
},
|
|
35817
|
+
{
|
|
35818
|
+
"kind": "field",
|
|
35819
|
+
"name": "formItemDescription",
|
|
35820
|
+
"privacy": "private",
|
|
35821
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this.theInput.value, })"
|
|
35822
|
+
},
|
|
34285
35823
|
{
|
|
34286
35824
|
"kind": "method",
|
|
34287
35825
|
"name": "getPickerFormValue",
|
|
@@ -37577,6 +39115,21 @@
|
|
|
37577
39115
|
"name": "itemsSlot",
|
|
37578
39116
|
"privacy": "private"
|
|
37579
39117
|
},
|
|
39118
|
+
{
|
|
39119
|
+
"kind": "field",
|
|
39120
|
+
"name": "formItemDescription",
|
|
39121
|
+
"type": {
|
|
39122
|
+
"text": "string | null"
|
|
39123
|
+
},
|
|
39124
|
+
"privacy": "private",
|
|
39125
|
+
"default": "null"
|
|
39126
|
+
},
|
|
39127
|
+
{
|
|
39128
|
+
"kind": "field",
|
|
39129
|
+
"name": "describedRadios",
|
|
39130
|
+
"privacy": "private",
|
|
39131
|
+
"default": "new Set<EspalierRadioButton>()"
|
|
39132
|
+
},
|
|
37580
39133
|
{
|
|
37581
39134
|
"kind": "field",
|
|
37582
39135
|
"name": "name",
|
|
@@ -37696,6 +39249,21 @@
|
|
|
37696
39249
|
}
|
|
37697
39250
|
}
|
|
37698
39251
|
},
|
|
39252
|
+
{
|
|
39253
|
+
"kind": "method",
|
|
39254
|
+
"name": "applyFormItemDescription",
|
|
39255
|
+
"privacy": "private",
|
|
39256
|
+
"return": {
|
|
39257
|
+
"type": {
|
|
39258
|
+
"text": "void"
|
|
39259
|
+
}
|
|
39260
|
+
}
|
|
39261
|
+
},
|
|
39262
|
+
{
|
|
39263
|
+
"kind": "field",
|
|
39264
|
+
"name": "handleItemsSlotChange",
|
|
39265
|
+
"privacy": "private"
|
|
39266
|
+
},
|
|
37699
39267
|
{
|
|
37700
39268
|
"kind": "method",
|
|
37701
39269
|
"name": "handleChildChanged",
|
|
@@ -38495,6 +40063,12 @@
|
|
|
38495
40063
|
}
|
|
38496
40064
|
],
|
|
38497
40065
|
"members": [
|
|
40066
|
+
{
|
|
40067
|
+
"kind": "field",
|
|
40068
|
+
"name": "formItemDescription",
|
|
40069
|
+
"privacy": "private",
|
|
40070
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this.shadowRoot?.querySelector<HTMLElement>(\".radio-control\"), })"
|
|
40071
|
+
},
|
|
38498
40072
|
{
|
|
38499
40073
|
"kind": "field",
|
|
38500
40074
|
"name": "checked",
|
|
@@ -44028,9 +45602,9 @@
|
|
|
44028
45602
|
"kind": "variable",
|
|
44029
45603
|
"name": "ESP_EVENTS",
|
|
44030
45604
|
"type": {
|
|
44031
|
-
"text": "{\n // ── Form value events ───────────────────────────────────────\n VALUE_CHANGED: \"value-changed\",\n VALIDITY_CHANGED: \"validity-changed\",\n\n // ── Click events ────────────────────────────────────────────\n CLICKED: \"clicked\",\n\n // ── Form submission events ──────────────────────────────────\n ESP_SUBMIT: \"esp-submit\",\n ESP_SUBMIT_RESPONSE: \"esp-submit-response\",\n ESP_SUBMIT_ERROR: \"esp-submit-error\",\n\n // ── Navigation / layout events ──────────────────────────────\n ESP_TAB_CHANGED: \"esp-tab-changed\",\n ESP_TAB_UPDATED: \"esp-tab-updated\",\n ESP_TOGGLE: \"esp-toggle\",\n ESP_ACCORDION_CHANGE: \"esp-accordion-change\",\n DRAWER_OPENED: \"drawer-opened\",\n DRAWER_CLOSED: \"drawer-closed\",\n\n // ── Popover DOM events ──────────────────────────────────────\n POPOVER_OPENED: \"popover-opened\",\n POPOVER_CLOSED: \"popover-closed\",\n\n // ── Grid events ─────────────────────────────────────────────\n GRID_EVENT: \"grid-event\",\n GRID_LOAD_START: \"esp-grid-load-start\",\n GRID_LOAD_SUCCESS: \"esp-grid-load-success\",\n GRID_LOAD_ERROR: \"esp-grid-load-error\",\n GRID_ITEMS_CHANGED: \"esp-grid-items-changed\",\n\n // ── Info events ─────────────────────────────────────────────\n DESTROY: \"destroy\",\n\n // ── Upload events ───────────────────────────────────────────\n FILE_SELECTED: \"file-selected\",\n FILE_REMOVED: \"file-removed\",\n FILES_SELECTED: \"files-selected\",\n FILES_REJECTED: \"files-rejected\",\n UPLOAD_RETRY: \"upload-retry\",\n RETRY_UPLOAD: \"retry-upload\",\n IMAGES_REORDERED: \"images-reordered\",\n\n // ── Search events ───────────────────────────────────────────\n SEARCH_REQUESTED: \"search-requested\",\n RESULT_SELECTED: \"result-selected\",\n SEARCH_CLOSED: \"search-closed\",\n\n // ── Picker internal events ──────────────────────────────────\n SELECTION_CHANGED: \"selection-changed\",\n CLOSE_MENU: \"close-menu\",\n REMOVE_IMAGE: \"remove-image\",\n}"
|
|
45605
|
+
"text": "{\n // ── Form value events ───────────────────────────────────────\n VALUE_CHANGED: \"value-changed\",\n VALIDITY_CHANGED: \"validity-changed\",\n\n // ── Click events ────────────────────────────────────────────\n CLICKED: \"clicked\",\n\n // ── Form submission events ──────────────────────────────────\n ESP_SUBMIT: \"esp-submit\",\n ESP_SUBMIT_RESPONSE: \"esp-submit-response\",\n ESP_SUBMIT_ERROR: \"esp-submit-error\",\n\n // ── Navigation / layout events ──────────────────────────────\n ESP_TAB_CHANGED: \"esp-tab-changed\",\n ESP_TAB_UPDATED: \"esp-tab-updated\",\n ESP_TOGGLE: \"esp-toggle\",\n ESP_ACCORDION_CHANGE: \"esp-accordion-change\",\n DRAWER_OPENED: \"drawer-opened\",\n DRAWER_CLOSED: \"drawer-closed\",\n FLYOUT_OPENED: \"flyout-opened\",\n FLYOUT_CLOSED: \"flyout-closed\",\n FLYOUT_STATE_CHANGED: \"flyout-state-changed\",\n\n // ── Popover DOM events ──────────────────────────────────────\n POPOVER_OPENED: \"popover-opened\",\n POPOVER_CLOSED: \"popover-closed\",\n\n // ── Grid events ─────────────────────────────────────────────\n GRID_EVENT: \"grid-event\",\n GRID_LOAD_START: \"esp-grid-load-start\",\n GRID_LOAD_SUCCESS: \"esp-grid-load-success\",\n GRID_LOAD_ERROR: \"esp-grid-load-error\",\n GRID_ITEMS_CHANGED: \"esp-grid-items-changed\",\n\n // ── Info events ─────────────────────────────────────────────\n DESTROY: \"destroy\",\n\n // ── Upload events ───────────────────────────────────────────\n FILE_SELECTED: \"file-selected\",\n FILE_REMOVED: \"file-removed\",\n FILES_SELECTED: \"files-selected\",\n FILES_REJECTED: \"files-rejected\",\n UPLOAD_RETRY: \"upload-retry\",\n RETRY_UPLOAD: \"retry-upload\",\n IMAGES_REORDERED: \"images-reordered\",\n\n // ── Search events ───────────────────────────────────────────\n SEARCH_REQUESTED: \"search-requested\",\n RESULT_SELECTED: \"result-selected\",\n SEARCH_CLOSED: \"search-closed\",\n\n // ── Picker internal events ──────────────────────────────────\n SELECTION_CHANGED: \"selection-changed\",\n CLOSE_MENU: \"close-menu\",\n REMOVE_IMAGE: \"remove-image\",\n}"
|
|
44032
45606
|
},
|
|
44033
|
-
"default": "{ // ── Form value events ─────────────────────────────────────── VALUE_CHANGED: \"value-changed\", VALIDITY_CHANGED: \"validity-changed\", // ── Click events ──────────────────────────────────────────── CLICKED: \"clicked\", // ── Form submission events ────────────────────────────────── ESP_SUBMIT: \"esp-submit\", ESP_SUBMIT_RESPONSE: \"esp-submit-response\", ESP_SUBMIT_ERROR: \"esp-submit-error\", // ── Navigation / layout events ────────────────────────────── ESP_TAB_CHANGED: \"esp-tab-changed\", ESP_TAB_UPDATED: \"esp-tab-updated\", ESP_TOGGLE: \"esp-toggle\", ESP_ACCORDION_CHANGE: \"esp-accordion-change\", DRAWER_OPENED: \"drawer-opened\", DRAWER_CLOSED: \"drawer-closed\", // ── Popover DOM events ────────────────────────────────────── POPOVER_OPENED: \"popover-opened\", POPOVER_CLOSED: \"popover-closed\", // ── Grid events ───────────────────────────────────────────── GRID_EVENT: \"grid-event\", GRID_LOAD_START: \"esp-grid-load-start\", GRID_LOAD_SUCCESS: \"esp-grid-load-success\", GRID_LOAD_ERROR: \"esp-grid-load-error\", GRID_ITEMS_CHANGED: \"esp-grid-items-changed\", // ── Info events ───────────────────────────────────────────── DESTROY: \"destroy\", // ── Upload events ─────────────────────────────────────────── FILE_SELECTED: \"file-selected\", FILE_REMOVED: \"file-removed\", FILES_SELECTED: \"files-selected\", FILES_REJECTED: \"files-rejected\", UPLOAD_RETRY: \"upload-retry\", RETRY_UPLOAD: \"retry-upload\", IMAGES_REORDERED: \"images-reordered\", // ── Search events ─────────────────────────────────────────── SEARCH_REQUESTED: \"search-requested\", RESULT_SELECTED: \"result-selected\", SEARCH_CLOSED: \"search-closed\", // ── Picker internal events ────────────────────────────────── SELECTION_CHANGED: \"selection-changed\", CLOSE_MENU: \"close-menu\", REMOVE_IMAGE: \"remove-image\", }",
|
|
45607
|
+
"default": "{ // ── Form value events ─────────────────────────────────────── VALUE_CHANGED: \"value-changed\", VALIDITY_CHANGED: \"validity-changed\", // ── Click events ──────────────────────────────────────────── CLICKED: \"clicked\", // ── Form submission events ────────────────────────────────── ESP_SUBMIT: \"esp-submit\", ESP_SUBMIT_RESPONSE: \"esp-submit-response\", ESP_SUBMIT_ERROR: \"esp-submit-error\", // ── Navigation / layout events ────────────────────────────── ESP_TAB_CHANGED: \"esp-tab-changed\", ESP_TAB_UPDATED: \"esp-tab-updated\", ESP_TOGGLE: \"esp-toggle\", ESP_ACCORDION_CHANGE: \"esp-accordion-change\", DRAWER_OPENED: \"drawer-opened\", DRAWER_CLOSED: \"drawer-closed\", FLYOUT_OPENED: \"flyout-opened\", FLYOUT_CLOSED: \"flyout-closed\", FLYOUT_STATE_CHANGED: \"flyout-state-changed\", // ── Popover DOM events ────────────────────────────────────── POPOVER_OPENED: \"popover-opened\", POPOVER_CLOSED: \"popover-closed\", // ── Grid events ───────────────────────────────────────────── GRID_EVENT: \"grid-event\", GRID_LOAD_START: \"esp-grid-load-start\", GRID_LOAD_SUCCESS: \"esp-grid-load-success\", GRID_LOAD_ERROR: \"esp-grid-load-error\", GRID_ITEMS_CHANGED: \"esp-grid-items-changed\", // ── Info events ───────────────────────────────────────────── DESTROY: \"destroy\", // ── Upload events ─────────────────────────────────────────── FILE_SELECTED: \"file-selected\", FILE_REMOVED: \"file-removed\", FILES_SELECTED: \"files-selected\", FILES_REJECTED: \"files-rejected\", UPLOAD_RETRY: \"upload-retry\", RETRY_UPLOAD: \"retry-upload\", IMAGES_REORDERED: \"images-reordered\", // ── Search events ─────────────────────────────────────────── SEARCH_REQUESTED: \"search-requested\", RESULT_SELECTED: \"result-selected\", SEARCH_CLOSED: \"search-closed\", // ── Picker internal events ────────────────────────────────── SELECTION_CHANGED: \"selection-changed\", CLOSE_MENU: \"close-menu\", REMOVE_IMAGE: \"remove-image\", }",
|
|
44034
45608
|
"description": "Canonical event name strings for every CustomEvent in the library.\n\nUse these instead of raw strings to catch typos at compile time:\n\n```ts\nel.addEventListener(ESP_EVENTS.VALUE_CHANGED, handler);\n```"
|
|
44035
45609
|
}
|
|
44036
45610
|
],
|
|
@@ -44123,6 +45697,22 @@
|
|
|
44123
45697
|
"module": "./toast-events.js"
|
|
44124
45698
|
}
|
|
44125
45699
|
},
|
|
45700
|
+
{
|
|
45701
|
+
"kind": "js",
|
|
45702
|
+
"name": "FlyoutConfig",
|
|
45703
|
+
"declaration": {
|
|
45704
|
+
"name": "FlyoutConfig",
|
|
45705
|
+
"module": "./flyout-events.js"
|
|
45706
|
+
}
|
|
45707
|
+
},
|
|
45708
|
+
{
|
|
45709
|
+
"kind": "js",
|
|
45710
|
+
"name": "FlyoutCloseReason",
|
|
45711
|
+
"declaration": {
|
|
45712
|
+
"name": "FlyoutCloseReason",
|
|
45713
|
+
"module": "./flyout-events.js"
|
|
45714
|
+
}
|
|
45715
|
+
},
|
|
44126
45716
|
{
|
|
44127
45717
|
"kind": "js",
|
|
44128
45718
|
"name": "PickerItem",
|
|
@@ -44181,6 +45771,60 @@
|
|
|
44181
45771
|
}
|
|
44182
45772
|
]
|
|
44183
45773
|
},
|
|
45774
|
+
{
|
|
45775
|
+
"kind": "javascript-module",
|
|
45776
|
+
"path": "dist/shared/flyout-events.js",
|
|
45777
|
+
"declarations": [
|
|
45778
|
+
{
|
|
45779
|
+
"kind": "function",
|
|
45780
|
+
"name": "showFlyout",
|
|
45781
|
+
"return": {
|
|
45782
|
+
"type": {
|
|
45783
|
+
"text": "void"
|
|
45784
|
+
}
|
|
45785
|
+
},
|
|
45786
|
+
"parameters": [
|
|
45787
|
+
{
|
|
45788
|
+
"name": "config",
|
|
45789
|
+
"default": "{}",
|
|
45790
|
+
"type": {
|
|
45791
|
+
"text": "FlyoutConfig"
|
|
45792
|
+
},
|
|
45793
|
+
"description": "Flyout configuration."
|
|
45794
|
+
}
|
|
45795
|
+
],
|
|
45796
|
+
"description": "Open the page's flyout surface. Publishes a `\"show-flyout\"`\nevent on `EspBus` which is picked up by `<esp-flyout>`.\n\n```ts\nimport { showFlyout } from \"@taprootio/espalier\";\n\nshowFlyout({ heading: \"Details\", content: detailsFragment });\n```\n\nIf no `<esp-flyout>` is connected, the event goes unserviced —\ncallers that need a fallback (e.g. opening a URL in a new tab)\nshould check for a connected flyout themselves."
|
|
45797
|
+
},
|
|
45798
|
+
{
|
|
45799
|
+
"kind": "function",
|
|
45800
|
+
"name": "closeFlyout",
|
|
45801
|
+
"return": {
|
|
45802
|
+
"type": {
|
|
45803
|
+
"text": "void"
|
|
45804
|
+
}
|
|
45805
|
+
},
|
|
45806
|
+
"description": "Close the page's flyout surface. Publishes a `\"close-flyout\"`\nevent on `EspBus`."
|
|
45807
|
+
}
|
|
45808
|
+
],
|
|
45809
|
+
"exports": [
|
|
45810
|
+
{
|
|
45811
|
+
"kind": "js",
|
|
45812
|
+
"name": "showFlyout",
|
|
45813
|
+
"declaration": {
|
|
45814
|
+
"name": "showFlyout",
|
|
45815
|
+
"module": "dist/shared/flyout-events.js"
|
|
45816
|
+
}
|
|
45817
|
+
},
|
|
45818
|
+
{
|
|
45819
|
+
"kind": "js",
|
|
45820
|
+
"name": "closeFlyout",
|
|
45821
|
+
"declaration": {
|
|
45822
|
+
"name": "closeFlyout",
|
|
45823
|
+
"module": "dist/shared/flyout-events.js"
|
|
45824
|
+
}
|
|
45825
|
+
}
|
|
45826
|
+
]
|
|
45827
|
+
},
|
|
44184
45828
|
{
|
|
44185
45829
|
"kind": "javascript-module",
|
|
44186
45830
|
"path": "dist/shared/font-helpers.js",
|
|
@@ -44518,6 +46162,172 @@
|
|
|
44518
46162
|
}
|
|
44519
46163
|
]
|
|
44520
46164
|
},
|
|
46165
|
+
{
|
|
46166
|
+
"kind": "javascript-module",
|
|
46167
|
+
"path": "dist/shared/form-field-description-controller.js",
|
|
46168
|
+
"declarations": [
|
|
46169
|
+
{
|
|
46170
|
+
"kind": "class",
|
|
46171
|
+
"description": "Mirrors an `esp-form-item` hint into the same shadow root as a form\ncontrol's real focus target. ARIA ID references do not cross shadow\nboundaries, so setting `aria-describedby` on the custom-element host\nalone cannot describe an inner input, textarea, or ARIA control.",
|
|
46172
|
+
"name": "FormFieldDescriptionController",
|
|
46173
|
+
"members": [
|
|
46174
|
+
{
|
|
46175
|
+
"kind": "field",
|
|
46176
|
+
"name": "descriptionId",
|
|
46177
|
+
"privacy": "private",
|
|
46178
|
+
"readonly": true,
|
|
46179
|
+
"default": "`esp-form-field-description-${++descriptionIdCounter}`"
|
|
46180
|
+
},
|
|
46181
|
+
{
|
|
46182
|
+
"kind": "field",
|
|
46183
|
+
"name": "description",
|
|
46184
|
+
"type": {
|
|
46185
|
+
"text": "string | null"
|
|
46186
|
+
},
|
|
46187
|
+
"privacy": "private",
|
|
46188
|
+
"default": "null"
|
|
46189
|
+
},
|
|
46190
|
+
{
|
|
46191
|
+
"kind": "field",
|
|
46192
|
+
"name": "descriptionElement",
|
|
46193
|
+
"type": {
|
|
46194
|
+
"text": "HTMLSpanElement | null"
|
|
46195
|
+
},
|
|
46196
|
+
"privacy": "private",
|
|
46197
|
+
"default": "null"
|
|
46198
|
+
},
|
|
46199
|
+
{
|
|
46200
|
+
"kind": "field",
|
|
46201
|
+
"name": "target",
|
|
46202
|
+
"type": {
|
|
46203
|
+
"text": "HTMLElement | null"
|
|
46204
|
+
},
|
|
46205
|
+
"privacy": "private",
|
|
46206
|
+
"default": "null"
|
|
46207
|
+
},
|
|
46208
|
+
{
|
|
46209
|
+
"kind": "method",
|
|
46210
|
+
"name": "hostConnected",
|
|
46211
|
+
"return": {
|
|
46212
|
+
"type": {
|
|
46213
|
+
"text": "void"
|
|
46214
|
+
}
|
|
46215
|
+
}
|
|
46216
|
+
},
|
|
46217
|
+
{
|
|
46218
|
+
"kind": "method",
|
|
46219
|
+
"name": "hostUpdated",
|
|
46220
|
+
"return": {
|
|
46221
|
+
"type": {
|
|
46222
|
+
"text": "void"
|
|
46223
|
+
}
|
|
46224
|
+
}
|
|
46225
|
+
},
|
|
46226
|
+
{
|
|
46227
|
+
"kind": "method",
|
|
46228
|
+
"name": "hostDisconnected",
|
|
46229
|
+
"return": {
|
|
46230
|
+
"type": {
|
|
46231
|
+
"text": "void"
|
|
46232
|
+
}
|
|
46233
|
+
}
|
|
46234
|
+
},
|
|
46235
|
+
{
|
|
46236
|
+
"kind": "method",
|
|
46237
|
+
"name": "setDescription",
|
|
46238
|
+
"return": {
|
|
46239
|
+
"type": {
|
|
46240
|
+
"text": "void"
|
|
46241
|
+
}
|
|
46242
|
+
},
|
|
46243
|
+
"parameters": [
|
|
46244
|
+
{
|
|
46245
|
+
"name": "description",
|
|
46246
|
+
"type": {
|
|
46247
|
+
"text": "string | null"
|
|
46248
|
+
}
|
|
46249
|
+
}
|
|
46250
|
+
],
|
|
46251
|
+
"description": "Set or clear the description supplied by the wrapping form item."
|
|
46252
|
+
},
|
|
46253
|
+
{
|
|
46254
|
+
"kind": "method",
|
|
46255
|
+
"name": "sync",
|
|
46256
|
+
"privacy": "private",
|
|
46257
|
+
"return": {
|
|
46258
|
+
"type": {
|
|
46259
|
+
"text": "void"
|
|
46260
|
+
}
|
|
46261
|
+
}
|
|
46262
|
+
},
|
|
46263
|
+
{
|
|
46264
|
+
"kind": "method",
|
|
46265
|
+
"name": "addDescriptionToken",
|
|
46266
|
+
"privacy": "private",
|
|
46267
|
+
"return": {
|
|
46268
|
+
"type": {
|
|
46269
|
+
"text": "void"
|
|
46270
|
+
}
|
|
46271
|
+
},
|
|
46272
|
+
"parameters": [
|
|
46273
|
+
{
|
|
46274
|
+
"name": "target",
|
|
46275
|
+
"type": {
|
|
46276
|
+
"text": "HTMLElement"
|
|
46277
|
+
}
|
|
46278
|
+
}
|
|
46279
|
+
]
|
|
46280
|
+
},
|
|
46281
|
+
{
|
|
46282
|
+
"kind": "method",
|
|
46283
|
+
"name": "removeDescriptionToken",
|
|
46284
|
+
"privacy": "private",
|
|
46285
|
+
"return": {
|
|
46286
|
+
"type": {
|
|
46287
|
+
"text": "void"
|
|
46288
|
+
}
|
|
46289
|
+
},
|
|
46290
|
+
"parameters": [
|
|
46291
|
+
{
|
|
46292
|
+
"name": "target",
|
|
46293
|
+
"type": {
|
|
46294
|
+
"text": "HTMLElement | null"
|
|
46295
|
+
}
|
|
46296
|
+
}
|
|
46297
|
+
]
|
|
46298
|
+
},
|
|
46299
|
+
{
|
|
46300
|
+
"kind": "method",
|
|
46301
|
+
"name": "descriptionTokens",
|
|
46302
|
+
"privacy": "private",
|
|
46303
|
+
"return": {
|
|
46304
|
+
"type": {
|
|
46305
|
+
"text": "string[]"
|
|
46306
|
+
}
|
|
46307
|
+
},
|
|
46308
|
+
"parameters": [
|
|
46309
|
+
{
|
|
46310
|
+
"name": "target",
|
|
46311
|
+
"type": {
|
|
46312
|
+
"text": "HTMLElement"
|
|
46313
|
+
}
|
|
46314
|
+
}
|
|
46315
|
+
]
|
|
46316
|
+
}
|
|
46317
|
+
]
|
|
46318
|
+
}
|
|
46319
|
+
],
|
|
46320
|
+
"exports": [
|
|
46321
|
+
{
|
|
46322
|
+
"kind": "js",
|
|
46323
|
+
"name": "FormFieldDescriptionController",
|
|
46324
|
+
"declaration": {
|
|
46325
|
+
"name": "FormFieldDescriptionController",
|
|
46326
|
+
"module": "dist/shared/form-field-description-controller.js"
|
|
46327
|
+
}
|
|
46328
|
+
}
|
|
46329
|
+
]
|
|
46330
|
+
},
|
|
44521
46331
|
{
|
|
44522
46332
|
"kind": "javascript-module",
|
|
44523
46333
|
"path": "dist/shared/intent-values.js",
|
|
@@ -44820,6 +46630,16 @@
|
|
|
44820
46630
|
"privacy": "private",
|
|
44821
46631
|
"default": "false"
|
|
44822
46632
|
},
|
|
46633
|
+
{
|
|
46634
|
+
"kind": "field",
|
|
46635
|
+
"name": "_pendingReactivation",
|
|
46636
|
+
"type": {
|
|
46637
|
+
"text": "boolean"
|
|
46638
|
+
},
|
|
46639
|
+
"privacy": "private",
|
|
46640
|
+
"default": "false",
|
|
46641
|
+
"description": "Set by `hostDisconnected()` when it tears down a still-open\noverlay (a DOM move). The next `open()` is then a reactivation\nand preserves `_previouslyFocused` instead of recapturing; a\n`close()` in any state cancels it."
|
|
46642
|
+
},
|
|
44823
46643
|
{
|
|
44824
46644
|
"kind": "field",
|
|
44825
46645
|
"name": "_dropZone",
|
|
@@ -46422,6 +48242,12 @@
|
|
|
46422
48242
|
"privacy": "private",
|
|
46423
48243
|
"default": "new FormFieldController({ host: this, internals: this.internals, getFormValue: () => this.value || null, // A range slider always has a normalized numeric value (clamped // to [min, max] and snapped to step), so there is no // representable \"empty\" state that could trigger valueMissing. // Validity is always satisfied. getValidity: () => null, onReset: () => { this.value = String(this._low); }, onRestore: (state: string) => { this.value = state; }, onDisabled: (isDisabled: boolean) => { this.disabled = isDisabled; }, })"
|
|
46424
48244
|
},
|
|
48245
|
+
{
|
|
48246
|
+
"kind": "field",
|
|
48247
|
+
"name": "formItemDescription",
|
|
48248
|
+
"privacy": "private",
|
|
48249
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this._thumbRef.value, })"
|
|
48250
|
+
},
|
|
46425
48251
|
{
|
|
46426
48252
|
"kind": "field",
|
|
46427
48253
|
"name": "min",
|
|
@@ -48505,6 +50331,12 @@
|
|
|
48505
50331
|
"privacy": "private",
|
|
48506
50332
|
"default": "new FormFieldController({ host: this, internals: this.internals, getFormValue: () => (this.checked ? this.value || \"on\" : null), getValidity: () => { if (this.required && !this.checked) { return { flags: { valueMissing: true }, message: this.requiredMessage || \"Please toggle this switch to continue.\", }; } return null; }, onReset: () => { this.checked = false; }, onRestore: (state: string) => { this.checked = state === \"on\" || state === this.value; }, onDisabled: (isDisabled: boolean) => { this.disabled = isDisabled; }, })"
|
|
48507
50333
|
},
|
|
50334
|
+
{
|
|
50335
|
+
"kind": "field",
|
|
50336
|
+
"name": "formItemDescription",
|
|
50337
|
+
"privacy": "private",
|
|
50338
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this.shadowRoot?.querySelector<HTMLElement>(\".switch-control\"), })"
|
|
50339
|
+
},
|
|
48508
50340
|
{
|
|
48509
50341
|
"kind": "field",
|
|
48510
50342
|
"name": "mode",
|
|
@@ -50901,6 +52733,12 @@
|
|
|
50901
52733
|
"privacy": "private",
|
|
50902
52734
|
"default": "new FormFieldController({ host: this, internals: this.internals, getFormValue: () => this.value || null, getValidity: () => this._getValidity(), getValidationAnchor: (): HTMLElement => this.theTextarea.value ?? this, onReset: () => { this.value = \"\"; this._hasVisibleError = false; }, onRestore: (state: string) => { this.value = state; }, onDisabled: (isDisabled: boolean) => { this.disabled = isDisabled; }, })"
|
|
50903
52735
|
},
|
|
52736
|
+
{
|
|
52737
|
+
"kind": "field",
|
|
52738
|
+
"name": "formItemDescription",
|
|
52739
|
+
"privacy": "private",
|
|
52740
|
+
"default": "new FormFieldDescriptionController({ host: this, getTarget: () => this.theTextarea.value, })"
|
|
52741
|
+
},
|
|
50904
52742
|
{
|
|
50905
52743
|
"kind": "field",
|
|
50906
52744
|
"name": "_hasVisibleError",
|
|
@@ -51903,7 +53741,7 @@
|
|
|
51903
53741
|
"declarations": [
|
|
51904
53742
|
{
|
|
51905
53743
|
"kind": "class",
|
|
51906
|
-
"description": "A toast notification container that listens for `\"show-toast\"`\nevents on `EspBus` and renders them as stacked `esp-info`\ncomponents. Place one `<esp-toaster>` in your page layout\n(it is included automatically inside `<esp-page>`).\n\nToasts auto-dismiss after their `duration` (default 5 seconds).\nA duration of `0` creates a persistent toast that the user must\ndismiss manually.\n\n```ts\nimport { showToast } from \"@taprootio/espalier\";\n\nshowToast({ message: \"Saved!\", variant: \"success\" });\nshowToast({ message: \"Connection lost\", variant: \"danger\", duration: 0 });\n```\n\nTry it out — type a message and click a button to fire a toast:\n\n```html\n<esp-box>\n <h3>Toast Playground</h3>\n <div style=\"display: flex; flex-wrap: wrap; gap: var(--esp-size-small); align-items: end;\">\n <esp-form-item label=\"Message\" style=\"flex: 1; min-width: 200px;\">\n <esp-input id=\"toast-msg\" value=\"Hello from the toaster!\"></esp-input>\n </esp-form-item>\n <esp-form-item label=\"Duration (seconds)\" style=\"width: 160px;\">\n <esp-input id=\"toast-dur\" value=\"5\" type=\"number\"></esp-input>\n </esp-form-item>\n </div>\n <div style=\"display: flex; flex-wrap: wrap; gap: var(--esp-size-small); margin-top: var(--esp-size-small);\">\n <esp-button id=\"fire-toast\" label=\"Show Toast\" variant=\"primary\" collapsed></esp-button>\n <esp-button id=\"fire-persistent\" label=\"Show Persistent Toast\" variant=\"warning\" collapsed></esp-button>\n <esp-button id=\"fire-success\" label=\"Success!\" variant=\"success\" collapsed></esp-button>\n <esp-button id=\"fire-danger\" label=\"Error!\" variant=\"danger\" collapsed></esp-button>\n </div>\n</esp-box>\n<script>\n const msgInput = findById(\"toast-msg\");\n const durInput = findById(\"toast-dur\");\n findById(\"fire-toast\").addEventListener(\"clicked\", () => {\n showToast({\n message: msgInput.value,\n duration: Number(durInput.value) || 5,\n icon: \"bread\"\n });\n });\n findById(\"fire-persistent\").addEventListener(\"clicked\", () => {\n showToast({\n message: msgInput.value,\n duration: 0,\n icon: \"bread\",\n variant: \"warning\"\n });\n });\n findById(\"fire-success\").addEventListener(\"clicked\", () => {\n showToast({\n message: \"Operation completed successfully!\",\n variant: \"success\",\n icon: \"bread\"\n });\n });\n findById(\"fire-danger\").addEventListener(\"clicked\", () => {\n showToast({\n message: \"Something went wrong!\",\n variant: \"danger\",\n duration: 0,\n icon: \"bread\"\n });\n });\n</script>\n```",
|
|
53744
|
+
"description": "A toast notification container that listens for `\"show-toast\"`\nevents on `EspBus` and renders them as stacked `esp-info`\ncomponents. Place one `<esp-toaster>` in your page layout\n(it is included automatically inside `<esp-page>`).\n\nIf more than one toaster is connected — for example a page that\nnests several `<esp-page>`s, each of which injects its own — all\ntoasts live in one shared stack rendered by a single toaster, so\neach `showToast()` renders once, not once per toaster. The renderer\nis re-chosen whenever a toast arrives, a toaster connects or\ndisconnects, or a toaster's size collapses or expands, preferring a\n**visible** instance, and the whole live stack migrates with it —\na hidden toaster never swallows toasts, and the stack never\nfragments across instances. This needs no configuration.\n\nThe migration timing contract: routing always skips instances\nhidden by `display`, `visibility`, `opacity: 0`, or\n`content-visibility` at decision time, and a live stack re-routes\n**immediately** when its renderer is collapsed via `display` (the\ncollapse resizes the toaster, which is observed). A pure\n`visibility` or `opacity` flip produces no resize, so an\nalready-rendered stack under one re-routes on the **next** toast,\nconnect/disconnect, or resize instead. (The related `esp-flyout`\nuses an explicit `standalone` opt-out rather than routing, because\nits instances are distinct surfaces you target individually.)\n\nToasts auto-dismiss after their `duration` (default 5 seconds).\nA duration of `0` creates a persistent toast that the user must\ndismiss manually.\n\n```ts\nimport { showToast } from \"@taprootio/espalier\";\n\nshowToast({ message: \"Saved!\", variant: \"success\" });\nshowToast({ message: \"Connection lost\", variant: \"danger\", duration: 0 });\n```\n\nTry it out — type a message and click a button to fire a toast:\n\n```html\n<esp-box>\n <h3>Toast Playground</h3>\n <div style=\"display: flex; flex-wrap: wrap; gap: var(--esp-size-small); align-items: end;\">\n <esp-form-item label=\"Message\" style=\"flex: 1; min-width: 200px;\">\n <esp-input id=\"toast-msg\" value=\"Hello from the toaster!\"></esp-input>\n </esp-form-item>\n <esp-form-item label=\"Duration (seconds)\" style=\"width: 160px;\">\n <esp-input id=\"toast-dur\" value=\"5\" type=\"number\"></esp-input>\n </esp-form-item>\n </div>\n <div style=\"display: flex; flex-wrap: wrap; gap: var(--esp-size-small); margin-top: var(--esp-size-small);\">\n <esp-button id=\"fire-toast\" label=\"Show Toast\" variant=\"primary\" collapsed></esp-button>\n <esp-button id=\"fire-persistent\" label=\"Show Persistent Toast\" variant=\"warning\" collapsed></esp-button>\n <esp-button id=\"fire-success\" label=\"Success!\" variant=\"success\" collapsed></esp-button>\n <esp-button id=\"fire-danger\" label=\"Error!\" variant=\"danger\" collapsed></esp-button>\n </div>\n</esp-box>\n<script>\n const msgInput = findById(\"toast-msg\");\n const durInput = findById(\"toast-dur\");\n findById(\"fire-toast\").addEventListener(\"clicked\", () => {\n showToast({\n message: msgInput.value,\n duration: Number(durInput.value) || 5,\n icon: \"bread\"\n });\n });\n findById(\"fire-persistent\").addEventListener(\"clicked\", () => {\n showToast({\n message: msgInput.value,\n duration: 0,\n icon: \"bread\",\n variant: \"warning\"\n });\n });\n findById(\"fire-success\").addEventListener(\"clicked\", () => {\n showToast({\n message: \"Operation completed successfully!\",\n variant: \"success\",\n icon: \"bread\"\n });\n });\n findById(\"fire-danger\").addEventListener(\"clicked\", () => {\n showToast({\n message: \"Something went wrong!\",\n variant: \"danger\",\n duration: 0,\n icon: \"bread\"\n });\n });\n</script>\n```",
|
|
51907
53745
|
"name": "EspalierToaster",
|
|
51908
53746
|
"cssProperties": [
|
|
51909
53747
|
{
|
|
@@ -51976,6 +53814,45 @@
|
|
|
51976
53814
|
}
|
|
51977
53815
|
],
|
|
51978
53816
|
"members": [
|
|
53817
|
+
{
|
|
53818
|
+
"kind": "field",
|
|
53819
|
+
"name": "connected",
|
|
53820
|
+
"type": {
|
|
53821
|
+
"text": "Array<EspalierToaster>"
|
|
53822
|
+
},
|
|
53823
|
+
"privacy": "private",
|
|
53824
|
+
"static": true,
|
|
53825
|
+
"default": "[]",
|
|
53826
|
+
"description": "Every connected toaster, in connection order. `esp-page`\nauto-injects a toaster, so a page nesting several `esp-page`s has\nseveral toasters. One shared bus subscription feeds one shared\ntoast queue, and a single **renderer** — re-chosen whenever the\nroster or the queue changes, preferring a visible instance —\ndisplays the whole queue. Keeping the queue shared (rather than\nper-instance) means a routing change migrates the entire live\nstack to the new renderer instead of fragmenting it into\noverlapping per-toaster stacks."
|
|
53827
|
+
},
|
|
53828
|
+
{
|
|
53829
|
+
"kind": "field",
|
|
53830
|
+
"name": "busSubscribed",
|
|
53831
|
+
"type": {
|
|
53832
|
+
"text": "boolean"
|
|
53833
|
+
},
|
|
53834
|
+
"privacy": "private",
|
|
53835
|
+
"static": true,
|
|
53836
|
+
"default": "false"
|
|
53837
|
+
},
|
|
53838
|
+
{
|
|
53839
|
+
"kind": "field",
|
|
53840
|
+
"name": "queue",
|
|
53841
|
+
"type": {
|
|
53842
|
+
"text": "Array<ToastConfig>"
|
|
53843
|
+
},
|
|
53844
|
+
"privacy": "private",
|
|
53845
|
+
"static": true,
|
|
53846
|
+
"default": "[]",
|
|
53847
|
+
"description": "All live toasts, shared across every instance."
|
|
53848
|
+
},
|
|
53849
|
+
{
|
|
53850
|
+
"kind": "field",
|
|
53851
|
+
"name": "boundDeliver",
|
|
53852
|
+
"privacy": "private",
|
|
53853
|
+
"static": true,
|
|
53854
|
+
"readonly": true
|
|
53855
|
+
},
|
|
51979
53856
|
{
|
|
51980
53857
|
"kind": "field",
|
|
51981
53858
|
"name": "toasts",
|
|
@@ -51983,17 +53860,23 @@
|
|
|
51983
53860
|
"text": "Array<ToastConfig>"
|
|
51984
53861
|
},
|
|
51985
53862
|
"privacy": "private",
|
|
51986
|
-
"default": "[]"
|
|
53863
|
+
"default": "[]",
|
|
53864
|
+
"description": "The shared queue slice this instance currently displays: the full\nqueue for the chosen renderer, empty for everyone else."
|
|
51987
53865
|
},
|
|
51988
53866
|
{
|
|
51989
53867
|
"kind": "field",
|
|
51990
|
-
"name": "
|
|
51991
|
-
"
|
|
53868
|
+
"name": "resizeObserver",
|
|
53869
|
+
"type": {
|
|
53870
|
+
"text": "ResizeObserver | undefined"
|
|
53871
|
+
},
|
|
53872
|
+
"privacy": "private",
|
|
53873
|
+
"description": "Re-routes live toasts when this toaster is collapsed or expanded\nwith no accompanying queue or roster change — e.g. a persistent\ntoast whose renderer's panel goes `display: none`. Collapsing an\nancestor resizes the host to zero, which fires this observer.\n(`visibility`/`opacity` flips produce no resize; those re-route on\nthe next queue or roster event.)"
|
|
51992
53874
|
},
|
|
51993
53875
|
{
|
|
51994
53876
|
"kind": "method",
|
|
51995
|
-
"name": "
|
|
53877
|
+
"name": "deliver",
|
|
51996
53878
|
"privacy": "private",
|
|
53879
|
+
"static": true,
|
|
51997
53880
|
"return": {
|
|
51998
53881
|
"type": {
|
|
51999
53882
|
"text": "void"
|
|
@@ -52008,6 +53891,48 @@
|
|
|
52008
53891
|
}
|
|
52009
53892
|
]
|
|
52010
53893
|
},
|
|
53894
|
+
{
|
|
53895
|
+
"kind": "method",
|
|
53896
|
+
"name": "dismiss",
|
|
53897
|
+
"privacy": "private",
|
|
53898
|
+
"static": true,
|
|
53899
|
+
"return": {
|
|
53900
|
+
"type": {
|
|
53901
|
+
"text": "void"
|
|
53902
|
+
}
|
|
53903
|
+
},
|
|
53904
|
+
"parameters": [
|
|
53905
|
+
{
|
|
53906
|
+
"name": "config",
|
|
53907
|
+
"type": {
|
|
53908
|
+
"text": "ToastConfig"
|
|
53909
|
+
}
|
|
53910
|
+
}
|
|
53911
|
+
],
|
|
53912
|
+
"description": "Remove a toast from the shared queue exactly once — the timer and\nthe manual destroy button can both race to dismiss it."
|
|
53913
|
+
},
|
|
53914
|
+
{
|
|
53915
|
+
"kind": "method",
|
|
53916
|
+
"name": "syncRenderer",
|
|
53917
|
+
"privacy": "private",
|
|
53918
|
+
"static": true,
|
|
53919
|
+
"return": {
|
|
53920
|
+
"type": {
|
|
53921
|
+
"text": "void"
|
|
53922
|
+
}
|
|
53923
|
+
},
|
|
53924
|
+
"description": "Choose the renderer — the first connected instance that reports\nvisible, or the first connected one if none do — and hand it the\nwhole shared queue; every other instance renders nothing. Run on\nevery queue, roster, or renderer-size change, so the stack follows\nvisibility and never splits across toasters."
|
|
53925
|
+
},
|
|
53926
|
+
{
|
|
53927
|
+
"kind": "method",
|
|
53928
|
+
"name": "isVisible",
|
|
53929
|
+
"privacy": "private",
|
|
53930
|
+
"return": {
|
|
53931
|
+
"type": {
|
|
53932
|
+
"text": "boolean"
|
|
53933
|
+
}
|
|
53934
|
+
}
|
|
53935
|
+
},
|
|
52011
53936
|
{
|
|
52012
53937
|
"kind": "method",
|
|
52013
53938
|
"name": "removeToast",
|