@taprootio/espalier 2.10.0 → 2.12.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.
@@ -7001,6 +7001,147 @@
7001
7001
  }
7002
7002
  ]
7003
7003
  },
7004
+ {
7005
+ "kind": "javascript-module",
7006
+ "path": "dist/burger/esp-burger.js",
7007
+ "declarations": [
7008
+ {
7009
+ "kind": "class",
7010
+ "description": "Animated burger button for showing and hiding navigation\ncomponents.\n\n```html\n<esp-burger></esp-burger>\n```",
7011
+ "name": "EspalierBurger",
7012
+ "cssProperties": [
7013
+ {
7014
+ "description": "The color of the burger lines when closed.",
7015
+ "name": "--esp-color-burger"
7016
+ },
7017
+ {
7018
+ "description": "The hover color of the burger lines when closed.",
7019
+ "name": "--esp-color-burger-hover"
7020
+ },
7021
+ {
7022
+ "description": "The color of the burger lines when open.",
7023
+ "name": "--esp-color-burger-opened"
7024
+ },
7025
+ {
7026
+ "description": "The hover color of the burger lines when open.",
7027
+ "name": "--esp-color-burger-opened-hover"
7028
+ },
7029
+ {
7030
+ "description": "The stroke width of the burger lines.",
7031
+ "name": "--esp-size-burger-stroke"
7032
+ }
7033
+ ],
7034
+ "members": [
7035
+ {
7036
+ "kind": "field",
7037
+ "name": "menuOpen",
7038
+ "type": {
7039
+ "text": "boolean"
7040
+ },
7041
+ "privacy": "public",
7042
+ "default": "false",
7043
+ "description": "Whether or not the burger indicates an open state.",
7044
+ "attribute": "menu-open"
7045
+ },
7046
+ {
7047
+ "kind": "field",
7048
+ "name": "presentationOnly",
7049
+ "type": {
7050
+ "text": "boolean"
7051
+ },
7052
+ "privacy": "public",
7053
+ "default": "false",
7054
+ "description": "Render only the animated burger graphic. Use this when an\nouter control owns activation, labeling, and expanded state.",
7055
+ "attribute": "presentation-only"
7056
+ },
7057
+ {
7058
+ "kind": "method",
7059
+ "name": "toggleMenu"
7060
+ }
7061
+ ],
7062
+ "events": [
7063
+ {
7064
+ "name": "opened",
7065
+ "type": {
7066
+ "text": "CustomEvent"
7067
+ },
7068
+ "description": "Emitted when the button is clicked and the image changes from a burger to an X."
7069
+ },
7070
+ {
7071
+ "name": "closed",
7072
+ "type": {
7073
+ "text": "CustomEvent"
7074
+ },
7075
+ "description": "Emitted when the button is clicked and the image changes from an X to a burger. ```html <esp-burger></esp-burger> <script> const theBurger = findByTagName(\"esp-burger\")[0]; theBurger.addEventListener(\"opened\", () => { showToast({ message: \"It would be a good time to show the menu. This message will self-destruct in 4 seconds...\", icon: \"info-i\", duration: 4 }); }); theBurger.addEventListener(\"closed\", () => { showToast({ message: \"It would be a good time to hide the menu. This message will self-destruct in 4 seconds...\", icon: \"info-i\", duration: 4 }); }); </script> ```"
7076
+ }
7077
+ ],
7078
+ "attributes": [
7079
+ {
7080
+ "name": "menu-open",
7081
+ "type": {
7082
+ "text": "boolean"
7083
+ },
7084
+ "default": "false",
7085
+ "description": "Whether or not the burger indicates an open state.",
7086
+ "fieldName": "menuOpen"
7087
+ },
7088
+ {
7089
+ "name": "presentation-only",
7090
+ "type": {
7091
+ "text": "boolean"
7092
+ },
7093
+ "default": "false",
7094
+ "description": "Render only the animated burger graphic. Use this when an\nouter control owns activation, labeling, and expanded state.",
7095
+ "fieldName": "presentationOnly"
7096
+ }
7097
+ ],
7098
+ "superclass": {
7099
+ "name": "LitElement",
7100
+ "package": "lit"
7101
+ },
7102
+ "docPageTitle": {
7103
+ "name": "Burger",
7104
+ "description": ""
7105
+ },
7106
+ "docUrl": {
7107
+ "name": "/components/burger",
7108
+ "description": ""
7109
+ },
7110
+ "menuGroup": {
7111
+ "name": "Interaction",
7112
+ "description": ""
7113
+ },
7114
+ "menuLabel": {
7115
+ "name": "Burger",
7116
+ "description": ""
7117
+ },
7118
+ "menuIcon": {
7119
+ "name": "burger",
7120
+ "description": ""
7121
+ },
7122
+ "tagName": "esp-burger",
7123
+ "customElement": true
7124
+ }
7125
+ ],
7126
+ "exports": [
7127
+ {
7128
+ "kind": "js",
7129
+ "name": "EspalierBurger",
7130
+ "declaration": {
7131
+ "name": "EspalierBurger",
7132
+ "module": "dist/burger/esp-burger.js"
7133
+ }
7134
+ },
7135
+ {
7136
+ "kind": "custom-element-definition",
7137
+ "name": "esp-burger",
7138
+ "declaration": {
7139
+ "name": "EspalierBurger",
7140
+ "module": "dist/burger/esp-burger.js"
7141
+ }
7142
+ }
7143
+ ]
7144
+ },
7004
7145
  {
7005
7146
  "kind": "javascript-module",
7006
7147
  "path": "dist/button/action-state-lightness.js",
@@ -8351,147 +8492,6 @@
8351
8492
  }
8352
8493
  ]
8353
8494
  },
8354
- {
8355
- "kind": "javascript-module",
8356
- "path": "dist/burger/esp-burger.js",
8357
- "declarations": [
8358
- {
8359
- "kind": "class",
8360
- "description": "Animated burger button for showing and hiding navigation\ncomponents.\n\n```html\n<esp-burger></esp-burger>\n```",
8361
- "name": "EspalierBurger",
8362
- "cssProperties": [
8363
- {
8364
- "description": "The color of the burger lines when closed.",
8365
- "name": "--esp-color-burger"
8366
- },
8367
- {
8368
- "description": "The hover color of the burger lines when closed.",
8369
- "name": "--esp-color-burger-hover"
8370
- },
8371
- {
8372
- "description": "The color of the burger lines when open.",
8373
- "name": "--esp-color-burger-opened"
8374
- },
8375
- {
8376
- "description": "The hover color of the burger lines when open.",
8377
- "name": "--esp-color-burger-opened-hover"
8378
- },
8379
- {
8380
- "description": "The stroke width of the burger lines.",
8381
- "name": "--esp-size-burger-stroke"
8382
- }
8383
- ],
8384
- "members": [
8385
- {
8386
- "kind": "field",
8387
- "name": "menuOpen",
8388
- "type": {
8389
- "text": "boolean"
8390
- },
8391
- "privacy": "public",
8392
- "default": "false",
8393
- "description": "Whether or not the burger indicates an open state.",
8394
- "attribute": "menu-open"
8395
- },
8396
- {
8397
- "kind": "field",
8398
- "name": "presentationOnly",
8399
- "type": {
8400
- "text": "boolean"
8401
- },
8402
- "privacy": "public",
8403
- "default": "false",
8404
- "description": "Render only the animated burger graphic. Use this when an\nouter control owns activation, labeling, and expanded state.",
8405
- "attribute": "presentation-only"
8406
- },
8407
- {
8408
- "kind": "method",
8409
- "name": "toggleMenu"
8410
- }
8411
- ],
8412
- "events": [
8413
- {
8414
- "name": "opened",
8415
- "type": {
8416
- "text": "CustomEvent"
8417
- },
8418
- "description": "Emitted when the button is clicked and the image changes from a burger to an X."
8419
- },
8420
- {
8421
- "name": "closed",
8422
- "type": {
8423
- "text": "CustomEvent"
8424
- },
8425
- "description": "Emitted when the button is clicked and the image changes from an X to a burger. ```html <esp-burger></esp-burger> <script> const theBurger = findByTagName(\"esp-burger\")[0]; theBurger.addEventListener(\"opened\", () => { showToast({ message: \"It would be a good time to show the menu. This message will self-destruct in 4 seconds...\", icon: \"info-i\", duration: 4 }); }); theBurger.addEventListener(\"closed\", () => { showToast({ message: \"It would be a good time to hide the menu. This message will self-destruct in 4 seconds...\", icon: \"info-i\", duration: 4 }); }); </script> ```"
8426
- }
8427
- ],
8428
- "attributes": [
8429
- {
8430
- "name": "menu-open",
8431
- "type": {
8432
- "text": "boolean"
8433
- },
8434
- "default": "false",
8435
- "description": "Whether or not the burger indicates an open state.",
8436
- "fieldName": "menuOpen"
8437
- },
8438
- {
8439
- "name": "presentation-only",
8440
- "type": {
8441
- "text": "boolean"
8442
- },
8443
- "default": "false",
8444
- "description": "Render only the animated burger graphic. Use this when an\nouter control owns activation, labeling, and expanded state.",
8445
- "fieldName": "presentationOnly"
8446
- }
8447
- ],
8448
- "superclass": {
8449
- "name": "LitElement",
8450
- "package": "lit"
8451
- },
8452
- "docPageTitle": {
8453
- "name": "Burger",
8454
- "description": ""
8455
- },
8456
- "docUrl": {
8457
- "name": "/components/burger",
8458
- "description": ""
8459
- },
8460
- "menuGroup": {
8461
- "name": "Interaction",
8462
- "description": ""
8463
- },
8464
- "menuLabel": {
8465
- "name": "Burger",
8466
- "description": ""
8467
- },
8468
- "menuIcon": {
8469
- "name": "burger",
8470
- "description": ""
8471
- },
8472
- "tagName": "esp-burger",
8473
- "customElement": true
8474
- }
8475
- ],
8476
- "exports": [
8477
- {
8478
- "kind": "js",
8479
- "name": "EspalierBurger",
8480
- "declaration": {
8481
- "name": "EspalierBurger",
8482
- "module": "dist/burger/esp-burger.js"
8483
- }
8484
- },
8485
- {
8486
- "kind": "custom-element-definition",
8487
- "name": "esp-burger",
8488
- "declaration": {
8489
- "name": "EspalierBurger",
8490
- "module": "dist/burger/esp-burger.js"
8491
- }
8492
- }
8493
- ]
8494
- },
8495
8495
  {
8496
8496
  "kind": "javascript-module",
8497
8497
  "path": "dist/checkbox/esp-checkbox-group.js",
@@ -16276,7 +16276,7 @@
16276
16276
  "declarations": [
16277
16277
  {
16278
16278
  "kind": "class",
16279
- "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. Pass `fullHeight: true` (or set the\n`full-height` attribute) when a reading surface should fill the visible\nblock-size even when its content is short. Overlay drawers stay\nviewport-fixed.\n\nBus requests anchored inside nested pages are presented by the\noutermost containing page's flyout by default. This keeps previews,\nembedded tools, and nested layouts from trapping application-level\nhelp or detail panels. Set `scope=\"nearest\"` on a nested flyout when\nthat page should explicitly own requests originating inside it.\nThe demos above are each driven by their own toggle button, so they\nare marked `standalone` to opt out of the bus entirely.\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```",
16279
+ "description": "A transient panel for help and more-info content that claims designed spare\nwidth before ever covering the page.\n\nPlace one `esp-flyout` in an `esp-page`'s `flyout` slot. The panel\nlives on the canvas after any persistent preview, outside the content\nsurface. It negotiates between `--esp-page-flyout-min-width` and\n`--esp-page-flyout-max-width`; preview receives flexible room first. The page\ndecides where help 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** — when the complete sidebar + main + help\n minimums do not fit, or 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.\nAn anchored panel shown with preview keeps its caret at the main/preview\nedge and receives a non-interactive dotted bridge across preview from the\npage. A short, thick terminus on the preview/help seam completes that\nconnection; no consumer positioning is required.\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`, opening it never steals focus, and boundary scrolling chains\nback to the main document. In the overlay-drawer mode (4) it is a true\nmodal: `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-main-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-main-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. Pass `fullHeight: true` (or set the\n`full-height` attribute) when a reading surface should fill the visible\nblock-size even when its content is short. Overlay drawers stay\nviewport-fixed.\n\nBus requests anchored inside nested pages are presented by the\noutermost containing page's flyout by default. This keeps previews,\nembedded tools, and nested layouts from trapping application-level\nhelp or detail panels. Set `scope=\"nearest\"` on a nested flyout when\nthat page should explicitly own requests originating inside it.\nThe demos above are each driven by their own toggle button, so they\nare marked `standalone` to opt out of the bus entirely.\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```",
16280
16280
  "name": "EspalierFlyout",
16281
16281
  "cssProperties": [
16282
16282
  {
@@ -16412,7 +16412,7 @@
16412
16412
  },
16413
16413
  "privacy": "public",
16414
16414
  "default": "\"auto\"",
16415
- "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.",
16415
+ "description": "Placement behavior.\n\n- `\"auto\"` (default) — the page's placement ladder: gutter,\n docked sidebar, then overlay drawer when the complete in-grid\n minimums do not fit or below the `50em` viewport 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.",
16416
16416
  "attribute": "mode",
16417
16417
  "reflects": true
16418
16418
  },
@@ -17467,7 +17467,7 @@
17467
17467
  "text": "\"auto\" | \"overlay\""
17468
17468
  },
17469
17469
  "default": "\"auto\"",
17470
- "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.",
17470
+ "description": "Placement behavior.\n\n- `\"auto\"` (default) — the page's placement ladder: gutter,\n docked sidebar, then overlay drawer when the complete in-grid\n minimums do not fit or below the `50em` viewport 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.",
17471
17471
  "fieldName": "mode"
17472
17472
  },
17473
17473
  {
@@ -39937,6 +39937,14 @@
39937
39937
  "privacy": "private",
39938
39938
  "default": "null"
39939
39939
  },
39940
+ {
39941
+ "kind": "field",
39942
+ "name": "topOffsetOverride",
39943
+ "type": {
39944
+ "text": "() => number | undefined | undefined"
39945
+ },
39946
+ "privacy": "private"
39947
+ },
39940
39948
  {
39941
39949
  "kind": "field",
39942
39950
  "name": "_pendingSetup",
@@ -40025,7 +40033,15 @@
40025
40033
  "name": "--esp-page-background"
40026
40034
  },
40027
40035
  {
40028
- "description": "The maximum width of the main content well. Set automatically by the `kind` attribute: `1536px` (wide), `768px` (narrow), or `none` (full). This cap now sizes the main grid track; surplus width beyond it becomes the canvas gutters.",
40036
+ "description": "Minimum width of the main content well while preview or in-grid help competes for space. Defaults to `30rem`.",
40037
+ "name": "--esp-page-main-min-width"
40038
+ },
40039
+ {
40040
+ "description": "Maximum width of the main content well. Defaults from `kind`: `1536px` (wide), `768px` (narrow), or unbounded (full). Surplus width beyond it becomes canvas gutters.",
40041
+ "name": "--esp-page-main-max-width"
40042
+ },
40043
+ {
40044
+ "description": "Legacy fallback for `--esp-page-main-max-width`.",
40029
40045
  "name": "--esp-page-max-width"
40030
40046
  },
40031
40047
  {
@@ -40061,15 +40077,63 @@
40061
40077
  "name": "--esp-page-main-background"
40062
40078
  },
40063
40079
  {
40064
- "description": "The width of the open flyout track (and of the `esp-flyout` overlay drawer). Defaults to `20rem`.",
40065
- "name": "--esp-page-flyout-width"
40080
+ "description": "Background of the persistent preview surface. Defaults to the main background, then the page background.",
40081
+ "name": "--esp-page-preview-background"
40082
+ },
40083
+ {
40084
+ "description": "Leading tear-off edge between main and preview. Defaults to `1px dotted var(--esp-color-border)`.",
40085
+ "name": "--esp-page-preview-border"
40086
+ },
40087
+ {
40088
+ "description": "Shadow cast from the preview's trailing edge. Defaults to the page surface edge shadow. Set to `none` for a flat additive surface.",
40089
+ "name": "--esp-page-preview-shadow"
40066
40090
  },
40067
40091
  {
40068
- "description": "Width of the persistent preview panel. Defaults to `20rem`.",
40092
+ "description": "Minimum preview width. Defaults to `22.5rem` (360px, a reasonable mobile-device surface).",
40093
+ "name": "--esp-page-preview-min-width"
40094
+ },
40095
+ {
40096
+ "description": "Maximum preview width. Defaults to `48rem`. Preview receives flexible trailing space before help grows.",
40097
+ "name": "--esp-page-preview-max-width"
40098
+ },
40099
+ {
40100
+ "description": "Minimum in-grid help width. Defaults to `20rem`.",
40101
+ "name": "--esp-page-flyout-min-width"
40102
+ },
40103
+ {
40104
+ "description": "Maximum help width and overlay drawer cap before the `85vw` viewport cap. Defaults to `30rem`.",
40105
+ "name": "--esp-page-flyout-max-width"
40106
+ },
40107
+ {
40108
+ "description": "Arrow-key resize step. Defaults to `1rem`.",
40109
+ "name": "--esp-page-resize-step"
40110
+ },
40111
+ {
40112
+ "description": "Shift+Arrow resize step. Defaults to `4rem`.",
40113
+ "name": "--esp-page-resize-large-step"
40114
+ },
40115
+ {
40116
+ "description": "Transparent inline hit target centered on each dotted seam. Defaults to `2.75rem`.",
40117
+ "name": "--esp-page-resize-handle-hit-size"
40118
+ },
40119
+ {
40120
+ "description": "Keyboard-focus line drawn along the focused seam, spanning the visible dotted edge up to one viewport height. Defaults to `2px dashed var(--esp-color-link)`.",
40121
+ "name": "--esp-page-resize-focus-outline"
40122
+ },
40123
+ {
40124
+ "description": "Glow cast by the focused seam line, in the line's color. Defaults to `0 0 0.75rem var(--esp-color-link)`.",
40125
+ "name": "--esp-page-resize-focus-shadow"
40126
+ },
40127
+ {
40128
+ "description": "Legacy fixed-width alias that pins both preview bounds.",
40069
40129
  "name": "--esp-page-preview-width"
40070
40130
  },
40071
40131
  {
40072
- "description": "Optional minimum width of the main content well while preview is reclaiming canvas/surface space. Unset by default, so preview uses spare canvas only. Set a length such as `900px` to opt into reclaim behavior.",
40132
+ "description": "Legacy fixed-width alias that pins both help bounds.",
40133
+ "name": "--esp-page-flyout-width"
40134
+ },
40135
+ {
40136
+ "description": "Legacy fallback for `--esp-page-main-min-width`.",
40073
40137
  "name": "--esp-page-preview-min-main-width"
40074
40138
  },
40075
40139
  {
@@ -40159,13 +40223,25 @@
40159
40223
  "name": "preview"
40160
40224
  },
40161
40225
  {
40162
- "description": "The sticky wrapper around preview content. ```html <style> esp-page.with-background { --esp-page-background-image: url(/assets/espalier-paper-texture.png); --esp-page-background-image-opacity: .5; } </style> <esp-page class=\"docs with-background\"> <div slot=\"header\" style=\"background-color: red;\">header</div> <div slot=\"sidebar\" style=\"background-color: green;\">sidebar</div> <div slot=\"right\" style=\"background-color: purple;\">right</div> <esp-footer slot=\"footer\" brand-text=\"Espalier\"></esp-footer> <div style=\"overflow: hidden;\"> <h2>With background image</h2> </div> </esp-page> ``` Use `align` to place the surface within the page once it hits its cap, and the canvas tokens to style the gutters. A low `--esp-page-max-width` is set here only so the gutters are visible inside the narrow demo frame; the surface edge shadow is on by default. ```html <style> esp-page.align-demo { --esp-page-max-width: 520px; --esp-page-canvas-background: var(--esp-color-layer-1); } </style> <esp-page class=\"docs align-demo\" align=\"center\"> <div slot=\"header\" style=\"background-color: red;\">header</div> <div slot=\"sidebar\" style=\"background-color: green;\">sidebar</div> <div slot=\"right\" style=\"background-color: purple;\">right</div> <esp-footer slot=\"footer\" brand-text=\"Espalier\"></esp-footer> <div style=\"background-color: black; overflow: hidden;\"> content </div> </esp-page> ```",
40226
+ "description": "The sticky wrapper around preview content.",
40163
40227
  "name": "preview-content"
40228
+ },
40229
+ {
40230
+ "description": "Separator between main and preview. Announces main's width.",
40231
+ "name": "main-preview-resize-handle"
40232
+ },
40233
+ {
40234
+ "description": "Separator between preview and in-grid flyout/help while preview is visible. Announces help's width.",
40235
+ "name": "preview-flyout-resize-handle"
40236
+ },
40237
+ {
40238
+ "description": "The same physical seam while preview is hidden or closed: it then sits between main and in-grid help, sizes help directly against main, and reports `separator: \"main-flyout\"`. ```html <style> esp-page.with-background { --esp-page-background-image: url(/assets/espalier-paper-texture.png); --esp-page-background-image-opacity: .5; } </style> <esp-page class=\"docs with-background\"> <div slot=\"header\" style=\"background-color: red;\">header</div> <div slot=\"sidebar\" style=\"background-color: green;\">sidebar</div> <div slot=\"right\" style=\"background-color: purple;\">right</div> <esp-footer slot=\"footer\" brand-text=\"Espalier\"></esp-footer> <div style=\"overflow: hidden;\"> <h2>With background image</h2> </div> </esp-page> ``` Use `align` to place the surface within the page once it hits its cap, and the canvas tokens to style the gutters. A low `--esp-page-max-width` is set here only so the gutters are visible inside the narrow demo frame; the surface edge shadow is on by default. ```html <style> esp-page.align-demo { --esp-page-max-width: 520px; --esp-page-canvas-background: var(--esp-color-layer-1); } </style> <esp-page class=\"docs align-demo\" align=\"center\"> <div slot=\"header\" style=\"background-color: red;\">header</div> <div slot=\"sidebar\" style=\"background-color: green;\">sidebar</div> <div slot=\"right\" style=\"background-color: purple;\">right</div> <esp-footer slot=\"footer\" brand-text=\"Espalier\"></esp-footer> <div style=\"background-color: black; overflow: hidden;\"> content </div> </esp-page> ```",
40239
+ "name": "main-flyout-resize-handle"
40164
40240
  }
40165
40241
  ],
40166
40242
  "slots": [
40167
40243
  {
40168
- "description": "Global navigation content (typically an `esp-header`). ```html <esp-page class=\"docs\"> <esp-header slot=\"header\"> <a href=\"#\" slot=\"brand\" class=\"nav-logo\"> <svg> <use href=\"/assets/icons.svg#taproot-logo\" /> </svg> </a> <esp-menu slot=\"menu\" mode=\"horizontal\"> <esp-menu-item label=\"Mammals\" url=\"#\"></esp-menu-item> <esp-menu-item label=\"Reptiles\" url=\"#\"></esp-menu-item> <esp-menu-item label=\"Amphibians\" url=\"#\"></esp-menu-item> </esp-menu> <esp-header-button slot=\"buttons\" icon=\"cog\" aria-label=\"Settings\"></esp-header-button> </esp-header> <esp-menu slot=\"sidebar\" mode=\"drawer\"></esp-menu> <div slot=\"right\" style=\"background-color: purple;\">right</div> <esp-footer slot=\"footer\" brand-text=\"Espalier\"></esp-footer> <div style=\"background-color: black; overflow: hidden;\"> content </div> </esp-page> ``` A persistent preview uses spare trailing canvas first. Set a main-well floor to let it reclaim surface width, and opt into collapsing a directly paired header/sidebar navigation to its accessible burger/drawer mode: ```html <esp-page preview-open preview-collapse-sidebar style=\"--esp-page-preview-width: 20rem; --esp-page-preview-min-main-width: 900px;\" > <esp-header slot=\"header\" drawer-target=\"site-nav\"></esp-header> <esp-menu id=\"site-nav\" slot=\"sidebar\" mode=\"vertical\"></esp-menu> <article>Primary content</article> <aside slot=\"preview\">Preview content</aside> </esp-page> ```",
40244
+ "description": "Global navigation content (typically an `esp-header`). ```html <esp-page class=\"docs\"> <esp-header slot=\"header\"> <a href=\"#\" slot=\"brand\" class=\"nav-logo\"> <svg> <use href=\"/assets/icons.svg#taproot-logo\" /> </svg> </a> <esp-menu slot=\"menu\" mode=\"horizontal\"> <esp-menu-item label=\"Mammals\" url=\"#\"></esp-menu-item> <esp-menu-item label=\"Reptiles\" url=\"#\"></esp-menu-item> <esp-menu-item label=\"Amphibians\" url=\"#\"></esp-menu-item> </esp-menu> <esp-header-button slot=\"buttons\" icon=\"cog\" aria-label=\"Settings\"></esp-header-button> </esp-header> <esp-menu slot=\"sidebar\" mode=\"drawer\"></esp-menu> <div slot=\"right\" style=\"background-color: purple;\">right</div> <esp-footer slot=\"footer\" brand-text=\"Espalier\"></esp-footer> <div style=\"background-color: black; overflow: hidden;\"> content </div> </esp-page> ``` The authoring workspace is ordered main, preview, then help. Each region negotiates between public minimum and maximum widths; preview grows first, then help. Set `workspace-resizable` to expose accessible drag and keyboard separators on the dotted seams. Preferred pane sizes remain attached to the mounted page instance and are re-clamped by the same allocator whenever the available inline size changes. Opt into collapsing a directly paired header/sidebar navigation to its accessible burger/drawer mode when the combined workspace needs it.",
40169
40245
  "name": "header"
40170
40246
  },
40171
40247
  {
@@ -40177,11 +40253,11 @@
40177
40253
  "name": "right"
40178
40254
  },
40179
40255
  {
40180
- "description": "Persistent preview content that uses spare right canvas width first, then optionally reclaims navigation and main-well width down to `--esp-page-preview-min-main-width`. Unlike flyout content, preview content is never replaced by the flyout request bus.",
40256
+ "description": "Persistent preview content placed after the main surface and before help. It grows from `--esp-page-preview-min-width` to `--esp-page-preview-max-width`, starts at viewport top, and gives its content an independent `100dvh` vertical scroller. At either scroll boundary, wheel and trackpad motion chains back to the main document. Unlike flyout content, preview content is never replaced by the flyout request bus.",
40181
40257
  "name": "preview"
40182
40258
  },
40183
40259
  {
40184
- "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.",
40260
+ "description": "A transient `esp-flyout` panel that lives on the canvas after preview. Closed it costs no width; open it grows from `--esp-page-flyout-min-width` to `--esp-page-flyout-max-width` after preview receives flexible space, 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. When a preview is visible, its caret and non-interactive dotted bridge cross the preview back to the anchor, ending at a short thick marker on the preview/help seam.",
40185
40261
  "name": "flyout"
40186
40262
  },
40187
40263
  {
@@ -40189,7 +40265,7 @@
40189
40265
  "name": "footer"
40190
40266
  },
40191
40267
  {
40192
- "description": "The main page content. The main content region applies `contain: inline-size` so child components cannot push the content well wider than its grid column. In `narrow` mode, slotted children are constrained to `max-inline-size: 66ch` for optimal reading measure. ```html <esp-page class=\"docs\"> <esp-header slot=\"header\"> <a href=\"#\" slot=\"brand\" class=\"nav-logo\"> <svg> <use href=\"/assets/icons.svg#taproot-logo\" /> </svg> </a> <esp-menu slot=\"menu\" mode=\"horizontal\"> <esp-menu-item label=\"Mammals\" url=\"#\"></esp-menu-item> <esp-menu-item label=\"Reptiles\" url=\"#\"></esp-menu-item> <esp-menu-item label=\"Amphibians\" url=\"#\"></esp-menu-item> </esp-menu> <esp-header-button slot=\"buttons\" icon=\"cog\" aria-label=\"Settings\"></esp-header-button> </esp-header> <esp-footer slot=\"footer\" brand-text=\"Espalier\"></esp-footer> <section style=\"overflow: hidden;\"> <h2>Long content</h2> <p populate-from=\"longParagraph\"></p> </section> </esp-page> ```",
40268
+ "description": "The main page content. The main content region applies `contain: inline-size` so child components cannot push the content well wider than its grid column. In `narrow` mode, slotted children are constrained to `max-inline-size: 66ch` for optimal reading measure.",
40193
40269
  "name": ""
40194
40270
  }
40195
40271
  ],
@@ -40221,12 +40297,42 @@
40221
40297
  },
40222
40298
  {
40223
40299
  "kind": "field",
40224
- "name": "previewWidthProbe",
40300
+ "name": "previewMinWidthProbe",
40225
40301
  "privacy": "private"
40226
40302
  },
40227
40303
  {
40228
40304
  "kind": "field",
40229
- "name": "previewMainMinProbe",
40305
+ "name": "previewMaxWidthProbe",
40306
+ "privacy": "private"
40307
+ },
40308
+ {
40309
+ "kind": "field",
40310
+ "name": "flyoutMinWidthProbe",
40311
+ "privacy": "private"
40312
+ },
40313
+ {
40314
+ "kind": "field",
40315
+ "name": "flyoutMaxWidthProbe",
40316
+ "privacy": "private"
40317
+ },
40318
+ {
40319
+ "kind": "field",
40320
+ "name": "mainMinWidthProbe",
40321
+ "privacy": "private"
40322
+ },
40323
+ {
40324
+ "kind": "field",
40325
+ "name": "mainMaxWidthProbe",
40326
+ "privacy": "private"
40327
+ },
40328
+ {
40329
+ "kind": "field",
40330
+ "name": "resizeStepProbe",
40331
+ "privacy": "private"
40332
+ },
40333
+ {
40334
+ "kind": "field",
40335
+ "name": "resizeLargeStepProbe",
40230
40336
  "privacy": "private"
40231
40337
  },
40232
40338
  {
@@ -40277,6 +40383,15 @@
40277
40383
  },
40278
40384
  "privacy": "private"
40279
40385
  },
40386
+ {
40387
+ "kind": "field",
40388
+ "name": "previewOverlayRecoveryRequested",
40389
+ "type": {
40390
+ "text": "boolean"
40391
+ },
40392
+ "privacy": "private",
40393
+ "default": "false"
40394
+ },
40280
40395
  {
40281
40396
  "kind": "field",
40282
40397
  "name": "previewHeader",
@@ -40304,6 +40419,78 @@
40304
40419
  "privacy": "private",
40305
40420
  "default": "0"
40306
40421
  },
40422
+ {
40423
+ "kind": "field",
40424
+ "name": "previewNavigationCollapseTask",
40425
+ "type": {
40426
+ "text": "Promise<boolean> | null"
40427
+ },
40428
+ "privacy": "private",
40429
+ "default": "null"
40430
+ },
40431
+ {
40432
+ "kind": "field",
40433
+ "name": "flyoutOverlayPromotionWidth",
40434
+ "type": {
40435
+ "text": "number | null"
40436
+ },
40437
+ "privacy": "private",
40438
+ "default": "null"
40439
+ },
40440
+ {
40441
+ "kind": "field",
40442
+ "name": "flyoutOverlayRecoveryReady",
40443
+ "type": {
40444
+ "text": "boolean"
40445
+ },
40446
+ "privacy": "private",
40447
+ "default": "false"
40448
+ },
40449
+ {
40450
+ "kind": "field",
40451
+ "name": "flyoutOverlayRecoveryGeneration",
40452
+ "type": {
40453
+ "text": "number"
40454
+ },
40455
+ "privacy": "private",
40456
+ "default": "0"
40457
+ },
40458
+ {
40459
+ "kind": "field",
40460
+ "name": "preferredPreviewWidth",
40461
+ "type": {
40462
+ "text": "number | null"
40463
+ },
40464
+ "privacy": "private",
40465
+ "default": "null"
40466
+ },
40467
+ {
40468
+ "kind": "field",
40469
+ "name": "preferredFlyoutWidth",
40470
+ "type": {
40471
+ "text": "number | null"
40472
+ },
40473
+ "privacy": "private",
40474
+ "default": "null"
40475
+ },
40476
+ {
40477
+ "kind": "field",
40478
+ "name": "resizeSession",
40479
+ "type": {
40480
+ "text": "WorkspaceResizeSession | null"
40481
+ },
40482
+ "privacy": "private",
40483
+ "default": "null"
40484
+ },
40485
+ {
40486
+ "kind": "field",
40487
+ "name": "workspaceKeyboardSettlementTimer",
40488
+ "type": {
40489
+ "text": "ReturnType<typeof setTimeout> | null"
40490
+ },
40491
+ "privacy": "private",
40492
+ "default": "null"
40493
+ },
40307
40494
  {
40308
40495
  "kind": "field",
40309
40496
  "name": "footerWrapperIsLandmark",
@@ -40313,6 +40500,24 @@
40313
40500
  "privacy": "private",
40314
40501
  "default": "true"
40315
40502
  },
40503
+ {
40504
+ "kind": "field",
40505
+ "name": "allocatedPreviewWidth",
40506
+ "type": {
40507
+ "text": "number"
40508
+ },
40509
+ "privacy": "private",
40510
+ "default": "0"
40511
+ },
40512
+ {
40513
+ "kind": "field",
40514
+ "name": "allocatedFlyoutWidth",
40515
+ "type": {
40516
+ "text": "number"
40517
+ },
40518
+ "privacy": "private",
40519
+ "default": "0"
40520
+ },
40316
40521
  {
40317
40522
  "kind": "method",
40318
40523
  "name": "syncFlyoutState",
@@ -40333,6 +40538,75 @@
40333
40538
  ],
40334
40539
  "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."
40335
40540
  },
40541
+ {
40542
+ "kind": "method",
40543
+ "name": "syncDescendantFlyoutOverlayState",
40544
+ "privacy": "private",
40545
+ "return": {
40546
+ "type": {
40547
+ "text": "void"
40548
+ }
40549
+ },
40550
+ "description": "A modal flyout owned by a nested page cannot escape this page's main\nstacking context. Mirror that descendant state so the containing main\nregion rises above this page's header while the drawer is open."
40551
+ },
40552
+ {
40553
+ "kind": "method",
40554
+ "name": "assignedFlyouts",
40555
+ "privacy": "private",
40556
+ "return": {
40557
+ "type": {
40558
+ "text": "PageManagedFlyout[]"
40559
+ }
40560
+ }
40561
+ },
40562
+ {
40563
+ "kind": "method",
40564
+ "name": "openAutoFlyouts",
40565
+ "privacy": "private",
40566
+ "return": {
40567
+ "type": {
40568
+ "text": "PageManagedFlyout[]"
40569
+ }
40570
+ }
40571
+ },
40572
+ {
40573
+ "kind": "method",
40574
+ "name": "setPageFlyoutOverlay",
40575
+ "privacy": "private",
40576
+ "return": {
40577
+ "type": {
40578
+ "text": "Promise<boolean>"
40579
+ }
40580
+ },
40581
+ "parameters": [
40582
+ {
40583
+ "name": "requested",
40584
+ "type": {
40585
+ "text": "boolean"
40586
+ }
40587
+ }
40588
+ ]
40589
+ },
40590
+ {
40591
+ "kind": "method",
40592
+ "name": "clearFlyoutOverlayRecovery",
40593
+ "privacy": "private",
40594
+ "return": {
40595
+ "type": {
40596
+ "text": "void"
40597
+ }
40598
+ }
40599
+ },
40600
+ {
40601
+ "kind": "method",
40602
+ "name": "armFlyoutOverlayRecovery",
40603
+ "privacy": "private",
40604
+ "return": {
40605
+ "type": {
40606
+ "text": "void"
40607
+ }
40608
+ }
40609
+ },
40336
40610
  {
40337
40611
  "kind": "method",
40338
40612
  "name": "previewHasContent",
@@ -40373,11 +40647,76 @@
40373
40647
  },
40374
40648
  {
40375
40649
  "kind": "method",
40376
- "name": "previewTokenIsConfigured",
40650
+ "name": "requestPreviewNavigationCollapse",
40377
40651
  "privacy": "private",
40378
40652
  "return": {
40379
40653
  "type": {
40380
- "text": "boolean"
40654
+ "text": "void"
40655
+ }
40656
+ }
40657
+ },
40658
+ {
40659
+ "kind": "method",
40660
+ "name": "scheduleWorkspaceSettlement",
40661
+ "privacy": "private",
40662
+ "return": {
40663
+ "type": {
40664
+ "text": "void"
40665
+ }
40666
+ },
40667
+ "parameters": [
40668
+ {
40669
+ "name": "focusTarget",
40670
+ "default": "null",
40671
+ "type": {
40672
+ "text": "HTMLElement | null"
40673
+ }
40674
+ }
40675
+ ]
40676
+ },
40677
+ {
40678
+ "kind": "method",
40679
+ "name": "clearWorkspaceKeyboardSettlementTimer",
40680
+ "privacy": "private",
40681
+ "return": {
40682
+ "type": {
40683
+ "text": "void"
40684
+ }
40685
+ }
40686
+ },
40687
+ {
40688
+ "kind": "method",
40689
+ "name": "finishWorkspaceKeyboardResize",
40690
+ "privacy": "private",
40691
+ "return": {
40692
+ "type": {
40693
+ "text": "void"
40694
+ }
40695
+ },
40696
+ "parameters": [
40697
+ {
40698
+ "name": "settle",
40699
+ "default": "true"
40700
+ }
40701
+ ]
40702
+ },
40703
+ {
40704
+ "kind": "method",
40705
+ "name": "deferWorkspaceKeyboardSettlement",
40706
+ "privacy": "private",
40707
+ "return": {
40708
+ "type": {
40709
+ "text": "void"
40710
+ }
40711
+ }
40712
+ },
40713
+ {
40714
+ "kind": "method",
40715
+ "name": "suspendPreviewLayoutForWorkspaceResize",
40716
+ "privacy": "private",
40717
+ "return": {
40718
+ "type": {
40719
+ "text": "void"
40381
40720
  }
40382
40721
  }
40383
40722
  },
@@ -40405,6 +40744,455 @@
40405
40744
  }
40406
40745
  ]
40407
40746
  },
40747
+ {
40748
+ "kind": "method",
40749
+ "name": "setWorkspaceWidths",
40750
+ "privacy": "private",
40751
+ "return": {
40752
+ "type": {
40753
+ "text": "void"
40754
+ }
40755
+ },
40756
+ "parameters": [
40757
+ {
40758
+ "name": "previewWidth",
40759
+ "type": {
40760
+ "text": "number"
40761
+ }
40762
+ },
40763
+ {
40764
+ "name": "flyoutWidth",
40765
+ "type": {
40766
+ "text": "number"
40767
+ }
40768
+ },
40769
+ {
40770
+ "name": "enforcePreference",
40771
+ "default": "false"
40772
+ }
40773
+ ]
40774
+ },
40775
+ {
40776
+ "kind": "method",
40777
+ "name": "clampWidth",
40778
+ "privacy": "private",
40779
+ "return": {
40780
+ "type": {
40781
+ "text": "number"
40782
+ }
40783
+ },
40784
+ "parameters": [
40785
+ {
40786
+ "name": "value",
40787
+ "type": {
40788
+ "text": "number"
40789
+ }
40790
+ },
40791
+ {
40792
+ "name": "minimum",
40793
+ "type": {
40794
+ "text": "number"
40795
+ }
40796
+ },
40797
+ {
40798
+ "name": "maximum",
40799
+ "type": {
40800
+ "text": "number"
40801
+ }
40802
+ }
40803
+ ]
40804
+ },
40805
+ {
40806
+ "kind": "method",
40807
+ "name": "workspaceUsesPreference",
40808
+ "privacy": "private",
40809
+ "return": {
40810
+ "type": {
40811
+ "text": "boolean"
40812
+ }
40813
+ },
40814
+ "parameters": [
40815
+ {
40816
+ "name": "previewRequested",
40817
+ "type": {
40818
+ "text": "boolean"
40819
+ }
40820
+ },
40821
+ {
40822
+ "name": "flyoutOpen",
40823
+ "type": {
40824
+ "text": "boolean"
40825
+ }
40826
+ }
40827
+ ]
40828
+ },
40829
+ {
40830
+ "kind": "method",
40831
+ "name": "preferredWorkspaceWidth",
40832
+ "privacy": "private",
40833
+ "return": {
40834
+ "type": {
40835
+ "text": "number"
40836
+ }
40837
+ },
40838
+ "parameters": [
40839
+ {
40840
+ "name": "previewRequested",
40841
+ "type": {
40842
+ "text": "boolean"
40843
+ }
40844
+ },
40845
+ {
40846
+ "name": "flyoutOpen",
40847
+ "type": {
40848
+ "text": "boolean"
40849
+ }
40850
+ },
40851
+ {
40852
+ "name": "previewMinWidth",
40853
+ "type": {
40854
+ "text": "number"
40855
+ }
40856
+ },
40857
+ {
40858
+ "name": "previewMaxWidth",
40859
+ "type": {
40860
+ "text": "number"
40861
+ }
40862
+ },
40863
+ {
40864
+ "name": "flyoutMinWidth",
40865
+ "type": {
40866
+ "text": "number"
40867
+ }
40868
+ },
40869
+ {
40870
+ "name": "flyoutMaxWidth",
40871
+ "type": {
40872
+ "text": "number"
40873
+ }
40874
+ }
40875
+ ]
40876
+ },
40877
+ {
40878
+ "kind": "method",
40879
+ "name": "visiblePageInlineBounds",
40880
+ "privacy": "private",
40881
+ "return": {
40882
+ "type": {
40883
+ "text": "{ left: number; right: number; width: number }"
40884
+ }
40885
+ }
40886
+ },
40887
+ {
40888
+ "kind": "method",
40889
+ "name": "visibleSpaceWidth",
40890
+ "privacy": "private",
40891
+ "return": {
40892
+ "type": {
40893
+ "text": "number"
40894
+ }
40895
+ },
40896
+ "description": "The gutter's layout box can extend past the visible page bounds — most\ncommonly a page laid out wider than the visual viewport beside a classic\nscrollbar. Allocation must draw from the same visible geometry the fit\nchecks validate against, or a scrollbar-sized overhang makes the\nallocated widths permanently unfittable and help is promoted to a modal\ndrawer over a sliver of hidden canvas."
40897
+ },
40898
+ {
40899
+ "kind": "method",
40900
+ "name": "probeWidth",
40901
+ "privacy": "private",
40902
+ "return": {
40903
+ "type": {
40904
+ "text": "number"
40905
+ }
40906
+ },
40907
+ "parameters": [
40908
+ {
40909
+ "name": "probe",
40910
+ "type": {
40911
+ "text": "ReturnType<typeof createRef<HTMLDivElement>>"
40912
+ }
40913
+ }
40914
+ ]
40915
+ },
40916
+ {
40917
+ "kind": "method",
40918
+ "name": "allocateWorkspaceWidths",
40919
+ "privacy": "private",
40920
+ "return": {
40921
+ "type": {
40922
+ "text": "WorkspaceAllocation"
40923
+ }
40924
+ },
40925
+ "parameters": [
40926
+ {
40927
+ "name": "availableWidth",
40928
+ "type": {
40929
+ "text": "number"
40930
+ }
40931
+ },
40932
+ {
40933
+ "name": "previewRequested",
40934
+ "type": {
40935
+ "text": "boolean"
40936
+ }
40937
+ },
40938
+ {
40939
+ "name": "flyoutOpen",
40940
+ "type": {
40941
+ "text": "boolean"
40942
+ }
40943
+ },
40944
+ {
40945
+ "name": "previewMinWidth",
40946
+ "type": {
40947
+ "text": "number"
40948
+ }
40949
+ },
40950
+ {
40951
+ "name": "previewMaxWidth",
40952
+ "type": {
40953
+ "text": "number"
40954
+ }
40955
+ },
40956
+ {
40957
+ "name": "flyoutMinWidth",
40958
+ "type": {
40959
+ "text": "number"
40960
+ }
40961
+ },
40962
+ {
40963
+ "name": "flyoutMaxWidth",
40964
+ "type": {
40965
+ "text": "number"
40966
+ }
40967
+ }
40968
+ ]
40969
+ },
40970
+ {
40971
+ "kind": "method",
40972
+ "name": "workspaceResizeDirection",
40973
+ "privacy": "private",
40974
+ "return": {
40975
+ "type": {
40976
+ "text": "1 | -1"
40977
+ }
40978
+ }
40979
+ },
40980
+ {
40981
+ "kind": "method",
40982
+ "name": "resizeStep",
40983
+ "privacy": "private",
40984
+ "return": {
40985
+ "type": {
40986
+ "text": "number"
40987
+ }
40988
+ },
40989
+ "parameters": [
40990
+ {
40991
+ "name": "large",
40992
+ "type": {
40993
+ "text": "boolean"
40994
+ }
40995
+ }
40996
+ ]
40997
+ },
40998
+ {
40999
+ "kind": "method",
41000
+ "name": "previewNavigationResizeAllowance",
41001
+ "privacy": "private",
41002
+ "return": {
41003
+ "type": {
41004
+ "text": "number"
41005
+ }
41006
+ }
41007
+ },
41008
+ {
41009
+ "kind": "method",
41010
+ "name": "renderedWorkspaceWidths",
41011
+ "privacy": "private",
41012
+ "return": {
41013
+ "type": {
41014
+ "text": "WorkspaceAllocation"
41015
+ }
41016
+ }
41017
+ },
41018
+ {
41019
+ "kind": "method",
41020
+ "name": "mainPreviewResizeRange",
41021
+ "privacy": "private",
41022
+ "return": {
41023
+ "type": {
41024
+ "text": "{ minimum: number; maximum: number }"
41025
+ }
41026
+ },
41027
+ "parameters": [
41028
+ {
41029
+ "name": "previewWidth",
41030
+ "default": "this.renderedWorkspaceWidths().previewWidth"
41031
+ },
41032
+ {
41033
+ "name": "mainWidth",
41034
+ "default": "this.shadowRoot\n ?.querySelector<HTMLElement>(\".esp-page-main\")\n ?.getBoundingClientRect().width ?? 0"
41035
+ },
41036
+ {
41037
+ "name": "navigationAllowance",
41038
+ "default": "this.previewNavigationResizeAllowance()"
41039
+ }
41040
+ ]
41041
+ },
41042
+ {
41043
+ "kind": "method",
41044
+ "name": "previewFlyoutResizeRange",
41045
+ "privacy": "private",
41046
+ "return": {
41047
+ "type": {
41048
+ "text": "{ minimum: number; maximum: number }"
41049
+ }
41050
+ },
41051
+ "parameters": [
41052
+ {
41053
+ "name": "previewWidth",
41054
+ "default": "this.renderedWorkspaceWidths().previewWidth"
41055
+ },
41056
+ {
41057
+ "name": "flyoutWidth",
41058
+ "default": "this.renderedWorkspaceWidths().flyoutWidth"
41059
+ }
41060
+ ]
41061
+ },
41062
+ {
41063
+ "kind": "method",
41064
+ "name": "separatorIsAvailable",
41065
+ "privacy": "private",
41066
+ "return": {
41067
+ "type": {
41068
+ "text": "boolean"
41069
+ }
41070
+ },
41071
+ "parameters": [
41072
+ {
41073
+ "name": "separator",
41074
+ "type": {
41075
+ "text": "PageWorkspaceSeparator"
41076
+ }
41077
+ }
41078
+ ]
41079
+ },
41080
+ {
41081
+ "kind": "method",
41082
+ "name": "flyoutOnlyResizeRange",
41083
+ "privacy": "private",
41084
+ "return": {
41085
+ "type": {
41086
+ "text": "{ minimum: number; maximum: number }"
41087
+ }
41088
+ },
41089
+ "parameters": [
41090
+ {
41091
+ "name": "flyoutWidth",
41092
+ "default": "this.renderedWorkspaceWidths().flyoutWidth"
41093
+ },
41094
+ {
41095
+ "name": "mainWidth",
41096
+ "default": "this.shadowRoot\n ?.querySelector<HTMLElement>(\".esp-page-main\")\n ?.getBoundingClientRect().width ?? 0"
41097
+ }
41098
+ ],
41099
+ "description": "Travel range for the Preview/Help separator while preview is hidden\nand the seam sits between main and open in-grid help. Values are\nhelp widths: help trades width with main between both panes' bounds."
41100
+ },
41101
+ {
41102
+ "kind": "method",
41103
+ "name": "applyWorkspaceResize",
41104
+ "privacy": "private",
41105
+ "return": {
41106
+ "type": {
41107
+ "text": "void"
41108
+ }
41109
+ },
41110
+ "parameters": [
41111
+ {
41112
+ "name": "separator",
41113
+ "type": {
41114
+ "text": "PageWorkspaceSeparator"
41115
+ }
41116
+ },
41117
+ {
41118
+ "name": "physicalDelta",
41119
+ "type": {
41120
+ "text": "number"
41121
+ }
41122
+ },
41123
+ {
41124
+ "name": "source",
41125
+ "type": {
41126
+ "text": "PageWorkspaceResizeSource"
41127
+ }
41128
+ },
41129
+ {
41130
+ "name": "startPreviewWidth",
41131
+ "type": {
41132
+ "text": "number"
41133
+ }
41134
+ },
41135
+ {
41136
+ "name": "startFlyoutWidth",
41137
+ "type": {
41138
+ "text": "number"
41139
+ }
41140
+ },
41141
+ {
41142
+ "name": "startMainWidth",
41143
+ "type": {
41144
+ "text": "number"
41145
+ }
41146
+ },
41147
+ {
41148
+ "name": "startNavigationAllowance",
41149
+ "type": {
41150
+ "text": "number"
41151
+ }
41152
+ },
41153
+ {
41154
+ "name": "direction",
41155
+ "type": {
41156
+ "text": "1 | -1"
41157
+ }
41158
+ }
41159
+ ]
41160
+ },
41161
+ {
41162
+ "kind": "field",
41163
+ "name": "onWorkspaceResizePointerDown",
41164
+ "privacy": "private"
41165
+ },
41166
+ {
41167
+ "kind": "field",
41168
+ "name": "onWorkspaceResizePointerMove",
41169
+ "privacy": "private"
41170
+ },
41171
+ {
41172
+ "kind": "field",
41173
+ "name": "onWorkspaceResizePointerEnd",
41174
+ "privacy": "private"
41175
+ },
41176
+ {
41177
+ "kind": "method",
41178
+ "name": "endWorkspaceResize",
41179
+ "privacy": "private",
41180
+ "return": {
41181
+ "type": {
41182
+ "text": "void"
41183
+ }
41184
+ }
41185
+ },
41186
+ {
41187
+ "kind": "field",
41188
+ "name": "onWorkspaceResizeBlur",
41189
+ "privacy": "private"
41190
+ },
41191
+ {
41192
+ "kind": "field",
41193
+ "name": "onWorkspaceResizeKeyDown",
41194
+ "privacy": "private"
41195
+ },
40408
41196
  {
40409
41197
  "kind": "method",
40410
41198
  "name": "previewFitsWithinPage",
@@ -40422,13 +41210,274 @@
40422
41210
  }
40423
41211
  },
40424
41212
  {
40425
- "name": "previewWidth",
41213
+ "name": "previewMinWidth",
41214
+ "type": {
41215
+ "text": "number"
41216
+ }
41217
+ },
41218
+ {
41219
+ "name": "previewMaxWidth",
41220
+ "type": {
41221
+ "text": "number"
41222
+ }
41223
+ },
41224
+ {
41225
+ "name": "flyoutOpen",
41226
+ "type": {
41227
+ "text": "boolean"
41228
+ }
41229
+ },
41230
+ {
41231
+ "name": "flyoutMinWidth",
41232
+ "type": {
41233
+ "text": "number"
41234
+ }
41235
+ },
41236
+ {
41237
+ "name": "flyoutMaxWidth",
41238
+ "type": {
41239
+ "text": "number"
41240
+ }
41241
+ }
41242
+ ]
41243
+ },
41244
+ {
41245
+ "kind": "method",
41246
+ "name": "flyoutFitsWithinPage",
41247
+ "privacy": "private",
41248
+ "return": {
41249
+ "type": {
41250
+ "text": "boolean"
41251
+ }
41252
+ },
41253
+ "parameters": [
41254
+ {
41255
+ "name": "minMainWidth",
41256
+ "type": {
41257
+ "text": "number"
41258
+ }
41259
+ },
41260
+ {
41261
+ "name": "flyoutMinWidth",
41262
+ "type": {
41263
+ "text": "number"
41264
+ }
41265
+ },
41266
+ {
41267
+ "name": "flyoutMaxWidth",
41268
+ "type": {
41269
+ "text": "number"
41270
+ }
41271
+ }
41272
+ ]
41273
+ },
41274
+ {
41275
+ "kind": "method",
41276
+ "name": "workspaceMinimumsCanFit",
41277
+ "privacy": "private",
41278
+ "return": {
41279
+ "type": {
41280
+ "text": "boolean"
41281
+ }
41282
+ },
41283
+ "parameters": [
41284
+ {
41285
+ "name": "minMainWidth",
41286
+ "type": {
41287
+ "text": "number"
41288
+ }
41289
+ },
41290
+ {
41291
+ "name": "previewRequested",
41292
+ "type": {
41293
+ "text": "boolean"
41294
+ }
41295
+ },
41296
+ {
41297
+ "name": "previewMinWidth",
41298
+ "type": {
41299
+ "text": "number"
41300
+ }
41301
+ },
41302
+ {
41303
+ "name": "flyoutRequested",
41304
+ "type": {
41305
+ "text": "boolean"
41306
+ }
41307
+ },
41308
+ {
41309
+ "name": "flyoutMinWidth",
40426
41310
  "type": {
40427
41311
  "text": "number"
40428
41312
  }
40429
41313
  }
40430
41314
  ]
40431
41315
  },
41316
+ {
41317
+ "kind": "method",
41318
+ "name": "preferredWorkspaceFitsWithNavigation",
41319
+ "privacy": "private",
41320
+ "return": {
41321
+ "type": {
41322
+ "text": "boolean"
41323
+ }
41324
+ },
41325
+ "parameters": [
41326
+ {
41327
+ "name": "minMainWidth",
41328
+ "type": {
41329
+ "text": "number"
41330
+ }
41331
+ },
41332
+ {
41333
+ "name": "requestedWorkspaceWidth",
41334
+ "type": {
41335
+ "text": "number"
41336
+ }
41337
+ },
41338
+ {
41339
+ "name": "collapsedSidebarWidth",
41340
+ "type": {
41341
+ "text": "number"
41342
+ }
41343
+ }
41344
+ ]
41345
+ },
41346
+ {
41347
+ "kind": "method",
41348
+ "name": "workspaceGeometrySample",
41349
+ "privacy": "private",
41350
+ "return": {
41351
+ "type": {
41352
+ "text": "number[]"
41353
+ }
41354
+ }
41355
+ },
41356
+ {
41357
+ "kind": "method",
41358
+ "name": "workspaceGeometryMatches",
41359
+ "privacy": "private",
41360
+ "return": {
41361
+ "type": {
41362
+ "text": "boolean"
41363
+ }
41364
+ },
41365
+ "parameters": [
41366
+ {
41367
+ "name": "left",
41368
+ "type": {
41369
+ "text": "number[]"
41370
+ }
41371
+ },
41372
+ {
41373
+ "name": "right",
41374
+ "type": {
41375
+ "text": "number[]"
41376
+ }
41377
+ }
41378
+ ]
41379
+ },
41380
+ {
41381
+ "kind": "method",
41382
+ "name": "workspaceCandidateIsMeasurable",
41383
+ "privacy": "private",
41384
+ "return": {
41385
+ "type": {
41386
+ "text": "boolean"
41387
+ }
41388
+ },
41389
+ "parameters": [
41390
+ {
41391
+ "name": "previewRequested",
41392
+ "type": {
41393
+ "text": "boolean"
41394
+ }
41395
+ },
41396
+ {
41397
+ "name": "flyoutRequested",
41398
+ "type": {
41399
+ "text": "boolean"
41400
+ }
41401
+ }
41402
+ ]
41403
+ },
41404
+ {
41405
+ "kind": "method",
41406
+ "name": "candidateFitsAfterLayoutSettles",
41407
+ "privacy": "private",
41408
+ "return": {
41409
+ "type": {
41410
+ "text": "Promise<boolean | null>"
41411
+ }
41412
+ },
41413
+ "parameters": [
41414
+ {
41415
+ "name": "generation",
41416
+ "type": {
41417
+ "text": "number"
41418
+ }
41419
+ },
41420
+ {
41421
+ "name": "fits",
41422
+ "type": {
41423
+ "text": "() => boolean"
41424
+ }
41425
+ },
41426
+ {
41427
+ "name": "isMeasurable",
41428
+ "type": {
41429
+ "text": "() => boolean"
41430
+ }
41431
+ }
41432
+ ],
41433
+ "description": "Validate one mounted candidate rather than scheduling a new negotiation\npass. A new pass starts by removing preview and zeroing its tracks, which\nmade the old retry repeatedly measure its own teardown on slower browsers.\nLit reflection is completed first; valid geometry returns immediately,\nwhile invalid geometry must remain unchanged across several rendered\nframes before it can request the overlay fallback."
41434
+ },
41435
+ {
41436
+ "kind": "method",
41437
+ "name": "promoteFlyoutIfClipped",
41438
+ "privacy": "private",
41439
+ "return": {
41440
+ "type": {
41441
+ "text": "Promise<boolean>"
41442
+ }
41443
+ },
41444
+ "parameters": [
41445
+ {
41446
+ "name": "generation",
41447
+ "type": {
41448
+ "text": "number"
41449
+ }
41450
+ },
41451
+ {
41452
+ "name": "minMainWidth",
41453
+ "type": {
41454
+ "text": "number"
41455
+ }
41456
+ },
41457
+ {
41458
+ "name": "flyoutMinWidth",
41459
+ "type": {
41460
+ "text": "number"
41461
+ }
41462
+ },
41463
+ {
41464
+ "name": "flyoutMaxWidth",
41465
+ "type": {
41466
+ "text": "number"
41467
+ }
41468
+ }
41469
+ ]
41470
+ },
41471
+ {
41472
+ "kind": "method",
41473
+ "name": "promoteFlyoutToOverlay",
41474
+ "privacy": "private",
41475
+ "return": {
41476
+ "type": {
41477
+ "text": "Promise<void>"
41478
+ }
41479
+ }
41480
+ },
40432
41481
  {
40433
41482
  "kind": "method",
40434
41483
  "name": "syncPreviewLayout",
@@ -40444,6 +41493,10 @@
40444
41493
  "type": {
40445
41494
  "text": "number"
40446
41495
  }
41496
+ },
41497
+ {
41498
+ "name": "allowOverlayRecovery",
41499
+ "default": "true"
40447
41500
  }
40448
41501
  ]
40449
41502
  },
@@ -40600,6 +41653,18 @@
40600
41653
  "attribute": "preview-collapse-sidebar",
40601
41654
  "reflects": true
40602
41655
  },
41656
+ {
41657
+ "kind": "field",
41658
+ "name": "workspaceResizable",
41659
+ "type": {
41660
+ "text": "boolean"
41661
+ },
41662
+ "privacy": "public",
41663
+ "default": "false",
41664
+ "description": "Expose accessible pointer and keyboard separators for the visible\nMain → Preview → Flyout/Help workspace seams. Preferred sizes remain on\nthis mounted instance and are continuously re-clamped by page allocation.",
41665
+ "attribute": "workspace-resizable",
41666
+ "reflects": true
41667
+ },
40603
41668
  {
40604
41669
  "kind": "field",
40605
41670
  "name": "previewVisible",
@@ -40620,7 +41685,7 @@
40620
41685
  },
40621
41686
  "privacy": "public",
40622
41687
  "default": "false",
40623
- "description": "Whether preview is currently reserving width and allowing the main well\nto shrink toward `--esp-page-preview-min-main-width`. Managed by the page.",
41688
+ "description": "Whether preview is currently reserving width and allowing the main well\nto shrink toward `--esp-page-main-min-width`. Managed by the page.",
40624
41689
  "attribute": "preview-reclaiming",
40625
41690
  "reflects": true
40626
41691
  },
@@ -41165,6 +42230,25 @@
41165
42230
  }
41166
42231
  }
41167
42232
  ],
42233
+ "events": [
42234
+ {
42235
+ "name": "esp-page-workspace-resize",
42236
+ "type": {
42237
+ "text": "CustomEvent<PageWorkspaceResizeDetail>"
42238
+ },
42239
+ "description": "Fired while a pointer or keyboard interaction changes a preferred workspace allocation. `separator` is `\"main-preview\"`, `\"preview-flyout\"`, or `\"main-flyout\"` (the second seam without a visible preview). Bubbles and crosses the shadow boundary. ```html <esp-page class=\"docs\"> <esp-header slot=\"header\"> <a href=\"#\" slot=\"brand\" class=\"nav-logo\"> <svg> <use href=\"/assets/icons.svg#taproot-logo\" /> </svg> </a> <esp-menu slot=\"menu\" mode=\"horizontal\"> <esp-menu-item label=\"Mammals\" url=\"#\"></esp-menu-item> <esp-menu-item label=\"Reptiles\" url=\"#\"></esp-menu-item> <esp-menu-item label=\"Amphibians\" url=\"#\"></esp-menu-item> </esp-menu> <esp-header-button slot=\"buttons\" icon=\"cog\" aria-label=\"Settings\"></esp-header-button> </esp-header> <esp-footer slot=\"footer\" brand-text=\"Espalier\"></esp-footer> <section style=\"overflow: hidden;\"> <h2>Long content</h2> <p populate-from=\"longParagraph\"></p> </section> </esp-page> ```"
42240
+ },
42241
+ {
42242
+ "name": "value-changed",
42243
+ "type": {
42244
+ "text": "CustomEvent"
42245
+ },
42246
+ "inheritedFrom": {
42247
+ "name": "EspalierElementBase",
42248
+ "module": "dist/shared/esp-element-base.js"
42249
+ }
42250
+ }
42251
+ ],
41168
42252
  "attributes": [
41169
42253
  {
41170
42254
  "name": "kind",
@@ -41238,6 +42322,15 @@
41238
42322
  "description": "Allow a directly slotted, safely linked vertical menu/header pair to\ncollapse to its burger/drawer presentation when preview needs more room.",
41239
42323
  "fieldName": "previewCollapseSidebar"
41240
42324
  },
42325
+ {
42326
+ "name": "workspace-resizable",
42327
+ "type": {
42328
+ "text": "boolean"
42329
+ },
42330
+ "default": "false",
42331
+ "description": "Expose accessible pointer and keyboard separators for the visible\nMain → Preview → Flyout/Help workspace seams. Preferred sizes remain on\nthis mounted instance and are continuously re-clamped by page allocation.",
42332
+ "fieldName": "workspaceResizable"
42333
+ },
41241
42334
  {
41242
42335
  "name": "preview-visible",
41243
42336
  "type": {
@@ -41253,7 +42346,7 @@
41253
42346
  "text": "boolean"
41254
42347
  },
41255
42348
  "default": "false",
41256
- "description": "Whether preview is currently reserving width and allowing the main well\nto shrink toward `--esp-page-preview-min-main-width`. Managed by the page.",
42349
+ "description": "Whether preview is currently reserving width and allowing the main well\nto shrink toward `--esp-page-main-min-width`. Managed by the page.",
41257
42350
  "fieldName": "previewReclaiming"
41258
42351
  },
41259
42352
  {
@@ -41312,16 +42405,14 @@
41312
42405
  },
41313
42406
  "tagName": "esp-page",
41314
42407
  "customElement": true,
41315
- "events": [
42408
+ "examples": [
41316
42409
  {
41317
- "name": "value-changed",
41318
- "type": {
41319
- "text": "CustomEvent"
41320
- },
41321
- "inheritedFrom": {
41322
- "name": "EspalierElementBase",
41323
- "module": "dist/shared/esp-element-base.js"
41324
- }
42410
+ "title": "Resizable preview",
42411
+ "body": "```html\n<style>\n.page-preview-resize-demo {\n--esp-page-main-min-width: 100px;\n--esp-page-main-max-width: 100vw;\n--esp-page-preview-min-width: 100px;\n--esp-page-preview-max-width: 100vw;\n}\n\n.page-preview-resize-demo > main,\n.page-preview-resize-demo > [slot=\"preview\"] {\nbox-sizing: border-box;\npadding: var(--esp-size-padding-page);\n}\n</style>\n\n<esp-page\nclass=\"page-preview-resize-demo\"\npreview-open\npreview-label=\"Article preview\"\nworkspace-resizable\n>\n<main>\n<h2>Article editor</h2>\n<p>\nPreview starts at its minimum width. Drag the dotted seam left to\nenlarge it, then resize in either direction. You can also focus the\nseam and use Left/Right Arrow.\n</p>\n</main>\n<article slot=\"preview\">\n<h2>Article preview</h2>\n<p>The selected width stays with this mounted page and adapts when its container changes.</p>\n</article>\n</esp-page>\n```"
42412
+ },
42413
+ {
42414
+ "title": "Main, preview, and contextual help",
42415
+ "body": "```html\n<style>\n.page-workspace-demo {\n--esp-page-main-min-width: 100px;\n--esp-page-main-max-width: 100vw;\n--esp-page-preview-min-width: 100px;\n--esp-page-preview-max-width: 100vw;\n--esp-page-flyout-min-width: 100px;\n--esp-page-flyout-max-width: 100vw;\n}\n\n.page-workspace-demo > main,\n.page-workspace-demo > [slot=\"preview\"] {\nbox-sizing: border-box;\npadding: var(--esp-size-padding-page);\n}\n\n.page-workspace-demo > main {\nmin-block-size: 120vh;\n}\n</style>\n\n<esp-page\nid=\"page-workspace-demo\"\nclass=\"page-workspace-demo\"\npreview-open\npreview-label=\"Rendered page preview\"\nworkspace-resizable\n>\n<main>\n<h2>Page details</h2>\n<esp-form-item label=\"Site title\">\n<esp-input id=\"page-workspace-title\" name=\"title\" value=\"Field notes\"></esp-input>\n</esp-form-item>\n<p>\nHelp is anchored to the title field in this main editor. Its caret and\ndotted connector cross the persistent preview without blocking it.\nBoth dotted pane seams are resize handles while their panes are in-grid.\n</p>\n<esp-button id=\"page-workspace-preview-toggle\" label=\"Toggle preview\"></esp-button>\n<esp-button id=\"page-workspace-help-toggle\" label=\"Toggle title help\"></esp-button>\n</main>\n\n<article slot=\"preview\">\n<h2>Field notes</h2>\n<p>This preview is a full-viewport secondary surface with its own scroller.</p>\n</article>\n\n<esp-flyout\nid=\"page-workspace-help\"\nslot=\"flyout\"\nheading=\"Site title help\"\nstandalone\n>\n<p>Use a short, recognizable title. It appears in navigation and browser tabs.</p>\n</esp-flyout>\n</esp-page>\n\n<script>\nconst page = findById(\"page-workspace-demo\");\nconst title = findById(\"page-workspace-title\");\nconst help = findById(\"page-workspace-help\");\nhelp.anchor = title;\n\nconst syncMainWidth = () => {\npage.kind = page.previewOpen || help.open ? \"wide\" : \"full\";\n};\n\nfindById(\"page-workspace-preview-toggle\").addEventListener(\"clicked\", () => {\npage.togglePreview();\nsyncMainWidth();\n});\nfindById(\"page-workspace-help-toggle\").addEventListener(\"clicked\", () => {\nhelp.anchor = title;\nhelp.toggle();\nsyncMainWidth();\n});\nhelp.addEventListener(\"flyout-opened\", syncMainWidth);\nhelp.addEventListener(\"flyout-closed\", syncMainWidth);\nsyncMainWidth();\n</script>\n```"
41325
42416
  }
41326
42417
  ]
41327
42418
  }
@@ -54530,9 +55621,9 @@
54530
55621
  "kind": "variable",
54531
55622
  "name": "ESP_EVENTS",
54532
55623
  "type": {
54533
- "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 ESP_THEME_TOGGLE: \"esp-theme-toggle\",\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}"
55624
+ "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 ESP_THEME_TOGGLE: \"esp-theme-toggle\",\n FLYOUT_OPENED: \"flyout-opened\",\n FLYOUT_CLOSED: \"flyout-closed\",\n FLYOUT_STATE_CHANGED: \"flyout-state-changed\",\n ESP_PAGE_WORKSPACE_RESIZE: \"esp-page-workspace-resize\",\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}"
54534
55625
  },
54535
- "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\", ESP_THEME_TOGGLE: \"esp-theme-toggle\", 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\", }",
55626
+ "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\", ESP_THEME_TOGGLE: \"esp-theme-toggle\", FLYOUT_OPENED: \"flyout-opened\", FLYOUT_CLOSED: \"flyout-closed\", FLYOUT_STATE_CHANGED: \"flyout-state-changed\", ESP_PAGE_WORKSPACE_RESIZE: \"esp-page-workspace-resize\", // ── 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\", }",
54536
55627
  "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```"
54537
55628
  }
54538
55629
  ],
@@ -54705,6 +55796,30 @@
54705
55796
  "module": "../header/esp-header.js"
54706
55797
  }
54707
55798
  },
55799
+ {
55800
+ "kind": "js",
55801
+ "name": "PageWorkspaceResizeDetail",
55802
+ "declaration": {
55803
+ "name": "PageWorkspaceResizeDetail",
55804
+ "module": "../page/esp-page.js"
55805
+ }
55806
+ },
55807
+ {
55808
+ "kind": "js",
55809
+ "name": "PageWorkspaceResizeSource",
55810
+ "declaration": {
55811
+ "name": "PageWorkspaceResizeSource",
55812
+ "module": "../page/esp-page.js"
55813
+ }
55814
+ },
55815
+ {
55816
+ "kind": "js",
55817
+ "name": "PageWorkspaceSeparator",
55818
+ "declaration": {
55819
+ "name": "PageWorkspaceSeparator",
55820
+ "module": "../page/esp-page.js"
55821
+ }
55822
+ },
54708
55823
  {
54709
55824
  "kind": "js",
54710
55825
  "name": "UploadEventDetail",