@kubex/zinc 1.1.134 → 1.1.135

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.
@@ -56,79 +56,6 @@
56
56
  }
57
57
  ]
58
58
  },
59
- {
60
- "kind": "javascript-module",
61
- "path": "components/action-bar/action-bar.js",
62
- "declarations": [
63
- {
64
- "kind": "class",
65
- "description": "",
66
- "name": "ZnActionBar",
67
- "cssProperties": [
68
- {
69
- "description": "An example CSS custom property.",
70
- "name": "--example"
71
- }
72
- ],
73
- "cssParts": [
74
- {
75
- "description": "The component's base wrapper.",
76
- "name": "base"
77
- }
78
- ],
79
- "slots": [
80
- {
81
- "description": "The default slot.",
82
- "name": ""
83
- },
84
- {
85
- "description": "An example slot.",
86
- "name": "example"
87
- }
88
- ],
89
- "members": [
90
- {
91
- "kind": "field",
92
- "name": "localize",
93
- "privacy": "private",
94
- "readonly": true,
95
- "default": "new LocalizeController(this)"
96
- }
97
- ],
98
- "events": [
99
- {
100
- "description": "Emitted as an example.",
101
- "name": "zn-event-name"
102
- }
103
- ],
104
- "superclass": {
105
- "name": "ZincElement",
106
- "module": "/src/internal/zinc-element"
107
- },
108
- "summary": "Short summary of the component's intended use.",
109
- "tagNameWithoutPrefix": "action-bar",
110
- "tagName": "zn-action-bar",
111
- "customElement": true,
112
- "jsDoc": "/**\n * @summary Short summary of the component's intended use.\n * @documentation https://zinc.style/components/action-bar\n * @status experimental\n * @since 1.0\n *\n * @dependency zn-example\n *\n * @event zn-event-name - Emitted as an example.\n *\n * @slot - The default slot.\n * @slot example - An example slot.\n *\n * @csspart base - The component's base wrapper.\n *\n * @cssproperty --example - An example CSS custom property.\n */",
113
- "documentation": "https://zinc.style/components/action-bar",
114
- "status": "experimental",
115
- "since": "1.0",
116
- "dependencies": [
117
- "zn-example"
118
- ]
119
- }
120
- ],
121
- "exports": [
122
- {
123
- "kind": "js",
124
- "name": "default",
125
- "declaration": {
126
- "name": "ZnActionBar",
127
- "module": "components/action-bar/action-bar.js"
128
- }
129
- }
130
- ]
131
- },
132
59
  {
133
60
  "kind": "javascript-module",
134
61
  "path": "components/alert/alert.js",
@@ -323,6 +250,79 @@
323
250
  }
324
251
  ]
325
252
  },
253
+ {
254
+ "kind": "javascript-module",
255
+ "path": "components/action-bar/action-bar.js",
256
+ "declarations": [
257
+ {
258
+ "kind": "class",
259
+ "description": "",
260
+ "name": "ZnActionBar",
261
+ "cssProperties": [
262
+ {
263
+ "description": "An example CSS custom property.",
264
+ "name": "--example"
265
+ }
266
+ ],
267
+ "cssParts": [
268
+ {
269
+ "description": "The component's base wrapper.",
270
+ "name": "base"
271
+ }
272
+ ],
273
+ "slots": [
274
+ {
275
+ "description": "The default slot.",
276
+ "name": ""
277
+ },
278
+ {
279
+ "description": "An example slot.",
280
+ "name": "example"
281
+ }
282
+ ],
283
+ "members": [
284
+ {
285
+ "kind": "field",
286
+ "name": "localize",
287
+ "privacy": "private",
288
+ "readonly": true,
289
+ "default": "new LocalizeController(this)"
290
+ }
291
+ ],
292
+ "events": [
293
+ {
294
+ "description": "Emitted as an example.",
295
+ "name": "zn-event-name"
296
+ }
297
+ ],
298
+ "superclass": {
299
+ "name": "ZincElement",
300
+ "module": "/src/internal/zinc-element"
301
+ },
302
+ "summary": "Short summary of the component's intended use.",
303
+ "tagNameWithoutPrefix": "action-bar",
304
+ "tagName": "zn-action-bar",
305
+ "customElement": true,
306
+ "jsDoc": "/**\n * @summary Short summary of the component's intended use.\n * @documentation https://zinc.style/components/action-bar\n * @status experimental\n * @since 1.0\n *\n * @dependency zn-example\n *\n * @event zn-event-name - Emitted as an example.\n *\n * @slot - The default slot.\n * @slot example - An example slot.\n *\n * @csspart base - The component's base wrapper.\n *\n * @cssproperty --example - An example CSS custom property.\n */",
307
+ "documentation": "https://zinc.style/components/action-bar",
308
+ "status": "experimental",
309
+ "since": "1.0",
310
+ "dependencies": [
311
+ "zn-example"
312
+ ]
313
+ }
314
+ ],
315
+ "exports": [
316
+ {
317
+ "kind": "js",
318
+ "name": "default",
319
+ "declaration": {
320
+ "name": "ZnActionBar",
321
+ "module": "components/action-bar/action-bar.js"
322
+ }
323
+ }
324
+ ]
325
+ },
326
326
  {
327
327
  "kind": "javascript-module",
328
328
  "path": "components/animated-button/animated-button.js",
@@ -8182,6 +8182,16 @@
8182
8182
  "default": "\"\"",
8183
8183
  "attribute": "conditional"
8184
8184
  },
8185
+ {
8186
+ "kind": "field",
8187
+ "name": "requires",
8188
+ "type": {
8189
+ "text": "string"
8190
+ },
8191
+ "default": "\"\"",
8192
+ "description": "Ids or names of controls that must have a value before this one becomes\nusable, comma separated. Forwarded to the underlying select.",
8193
+ "attribute": "requires"
8194
+ },
8185
8195
  {
8186
8196
  "kind": "field",
8187
8197
  "name": "formControlController",
@@ -8523,6 +8533,15 @@
8523
8533
  },
8524
8534
  "default": "\"\"",
8525
8535
  "fieldName": "conditional"
8536
+ },
8537
+ {
8538
+ "name": "requires",
8539
+ "type": {
8540
+ "text": "string"
8541
+ },
8542
+ "default": "\"\"",
8543
+ "description": "Ids or names of controls that must have a value before this one becomes\nusable, comma separated. Forwarded to the underlying select.",
8544
+ "fieldName": "requires"
8526
8545
  }
8527
8546
  ],
8528
8547
  "superclass": {
@@ -19782,6 +19801,16 @@
19782
19801
  "default": "''",
19783
19802
  "attribute": "conditional"
19784
19803
  },
19804
+ {
19805
+ "kind": "field",
19806
+ "name": "requires",
19807
+ "type": {
19808
+ "text": "string"
19809
+ },
19810
+ "default": "''",
19811
+ "description": "Ids or names of controls that must have a value before this one becomes\nusable, comma separated.",
19812
+ "attribute": "requires"
19813
+ },
19785
19814
  {
19786
19815
  "kind": "field",
19787
19816
  "name": "disabled",
@@ -20325,6 +20354,15 @@
20325
20354
  "default": "''",
20326
20355
  "fieldName": "conditional"
20327
20356
  },
20357
+ {
20358
+ "name": "requires",
20359
+ "type": {
20360
+ "text": "string"
20361
+ },
20362
+ "default": "''",
20363
+ "description": "Ids or names of controls that must have a value before this one becomes\nusable, comma separated.",
20364
+ "fieldName": "requires"
20365
+ },
20328
20366
  {
20329
20367
  "name": "disabled",
20330
20368
  "type": {
@@ -31372,535 +31410,502 @@
31372
31410
  },
31373
31411
  {
31374
31412
  "kind": "javascript-module",
31375
- "path": "components/popup/popup.js",
31413
+ "path": "components/preview-frame/preview-frame.js",
31376
31414
  "declarations": [
31377
31415
  {
31378
31416
  "kind": "class",
31379
31417
  "description": "",
31380
- "name": "ZnPopup",
31418
+ "name": "ZnPreviewFrame",
31381
31419
  "cssProperties": [
31382
31420
  {
31383
- "description": "An example CSS custom property.",
31384
- "name": "--example"
31421
+ "description": "Spacing of the backdrop dot grid (`backdrop=\"dots\"`). Defaults to 20px.",
31422
+ "name": "--zn-preview-frame-dot-spacing"
31423
+ },
31424
+ {
31425
+ "description": "Opacity of the backdrop dots (`backdrop=\"dots\"`). Defaults to 0.08.",
31426
+ "name": "--zn-preview-frame-dot-opacity"
31385
31427
  }
31386
31428
  ],
31387
31429
  "cssParts": [
31388
31430
  {
31389
31431
  "description": "The component's base wrapper.",
31390
31432
  "name": "base"
31391
- }
31392
- ],
31393
- "slots": [
31433
+ },
31394
31434
  {
31395
- "description": "The default slot.",
31396
- "name": ""
31435
+ "description": "The device-width wrapper around the iframe.",
31436
+ "name": "stage"
31397
31437
  },
31398
31438
  {
31399
- "description": "An example slot.",
31400
- "name": "example"
31439
+ "description": "The preview iframe.",
31440
+ "name": "iframe"
31441
+ },
31442
+ {
31443
+ "description": "The error overlay.",
31444
+ "name": "error"
31401
31445
  }
31402
31446
  ],
31403
31447
  "members": [
31404
31448
  {
31405
31449
  "kind": "field",
31406
- "name": "anchorEl",
31407
- "type": {
31408
- "text": "Element | VirtualElement | null"
31409
- },
31410
- "privacy": "private"
31411
- },
31412
- {
31413
- "kind": "field",
31414
- "name": "cleanup",
31415
- "type": {
31416
- "text": "ReturnType<typeof autoUpdate> | undefined"
31417
- },
31418
- "privacy": "private"
31419
- },
31420
- {
31421
- "kind": "field",
31422
- "name": "popup",
31450
+ "name": "src",
31423
31451
  "type": {
31424
- "text": "HTMLElement"
31452
+ "text": "string"
31425
31453
  },
31426
- "description": "A reference to the internal popup container. Useful for animating and styling the popup with JavaScript."
31454
+ "default": "''",
31455
+ "description": "URL of the preview shell page (tokened embed URL).",
31456
+ "attribute": "src"
31427
31457
  },
31428
31458
  {
31429
31459
  "kind": "field",
31430
- "name": "arrowEl",
31460
+ "name": "frameOrigin",
31431
31461
  "type": {
31432
- "text": "HTMLElement"
31462
+ "text": "string"
31433
31463
  },
31434
- "privacy": "private"
31464
+ "default": "''",
31465
+ "description": "Expected origin of the iframe; all postMessage traffic is checked against it.",
31466
+ "attribute": "frame-origin"
31435
31467
  },
31436
31468
  {
31437
31469
  "kind": "field",
31438
- "name": "anchor",
31470
+ "name": "dataUri",
31439
31471
  "type": {
31440
- "text": "Element | string | VirtualElement"
31472
+ "text": "string"
31441
31473
  },
31442
- "description": "The element the popup will be anchored to. If the anchor lives outside of the popup, you can provide the anchor\nelement `id`, a DOM element reference, or a `VirtualElement`. If the anchor lives inside the popup, use the\n`anchor` slot instead.",
31443
- "attribute": "anchor"
31474
+ "default": "''",
31475
+ "description": "Endpoint returning the hp-preview:config payload JSON. The console proxy rewrites this attribute to an app-prefixed path for proper fetch resolution.",
31476
+ "attribute": "data-uri"
31444
31477
  },
31445
31478
  {
31446
31479
  "kind": "field",
31447
- "name": "active",
31480
+ "name": "watch",
31448
31481
  "type": {
31449
- "text": "boolean"
31482
+ "text": "string"
31450
31483
  },
31451
- "default": "false",
31452
- "description": "Activates the positioning logic and shows the popup. When this attribute is removed, the positioning logic is torn\ndown and the popup will be hidden.",
31453
- "attribute": "active",
31454
- "reflects": true
31484
+ "default": "'form[data-auto-save]'",
31485
+ "description": "Selector (resolved against the component's root node) for the forms to watch.\nDefaults to only forms explicitly opted in via a `data-auto-save` attribute —\nunmarked forms keep normal submit behavior and are never intercepted,\nauto-saved, or used to trigger a preview refresh. Override to widen the scope.",
31486
+ "attribute": "watch"
31455
31487
  },
31456
31488
  {
31457
31489
  "kind": "field",
31458
- "name": "placement",
31490
+ "name": "refreshOn",
31459
31491
  "type": {
31460
- "text": "| 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'left'\n | 'left-start'\n | 'left-end'"
31492
+ "text": "string"
31461
31493
  },
31462
- "default": "'top'",
31463
- "description": "The preferred placement of the popup. Note that the actual placement will vary as configured to keep the\npanel inside of the viewport.",
31464
- "attribute": "placement",
31465
- "reflects": true
31494
+ "default": "'form'",
31495
+ "description": "Selector for forms whose saves are left to the shell but should still\nrefresh the preview. These are never intercepted: the shell submits them\n(so its own response handling — alerts, refreshes — runs as normal) and the\npreview re-fetches its config once the shell reports the save complete.\nMatched by delegation on the shell's bubbled `complete` event rather than\nby attaching to the forms themselves, so a save anywhere on the page\nrefreshes the preview — including forms in a different DOM root, e.g. a\npage-level form saved while the preview sits inside a tab panel's shadow\nroot (a page's Template select lives on one tab, its preview on another).\nSet empty to disable.",
31496
+ "attribute": "refresh-on"
31466
31497
  },
31467
31498
  {
31468
31499
  "kind": "field",
31469
- "name": "strategy",
31500
+ "name": "debounce",
31470
31501
  "type": {
31471
- "text": "'absolute' | 'fixed'"
31502
+ "text": "number"
31472
31503
  },
31473
- "default": "'fixed'",
31474
- "description": "Determines how the popup is positioned. The `absolute` strategy works well in most cases, but if overflow is\nclipped, using a `fixed` position strategy can often workaround it.",
31475
- "attribute": "strategy",
31476
- "reflects": true
31504
+ "default": "400",
31505
+ "description": "Debounce in ms between a form change and its auto-save.",
31506
+ "attribute": "debounce"
31477
31507
  },
31478
31508
  {
31479
31509
  "kind": "field",
31480
- "name": "distance",
31510
+ "name": "zoom",
31481
31511
  "type": {
31482
31512
  "text": "number"
31483
31513
  },
31484
- "default": "0",
31485
- "description": "The distance in pixels from which to offset the panel away from its anchor.",
31486
- "attribute": "distance"
31514
+ "default": "1",
31515
+ "description": "Zooms the previewed page out (0–1]. The frame always fills the panel;\nzoom shrinks the content browser-style, so 0.4 shows the page at 40%\nsize with correspondingly more of it visible. 1 = natural size.\nIgnored when `fill` is set.",
31516
+ "attribute": "zoom"
31487
31517
  },
31488
31518
  {
31489
31519
  "kind": "field",
31490
- "name": "skidding",
31520
+ "name": "minHeight",
31491
31521
  "type": {
31492
31522
  "text": "number"
31493
31523
  },
31494
- "default": "0",
31495
- "description": "The distance in pixels from which to offset the panel along its anchor.",
31496
- "attribute": "skidding"
31524
+ "default": "480",
31525
+ "description": "The visible height (in CSS pixels) of the preview panel. Fixed rather\nthan measured, because a measured height would feed back into the\nscaled iframe's layout box and grow unbounded. With `fill` set, this\nbecomes a `min-height` floor instead of the height.",
31526
+ "attribute": "min-height"
31497
31527
  },
31498
31528
  {
31499
31529
  "kind": "field",
31500
- "name": "arrow",
31530
+ "name": "fill",
31501
31531
  "type": {
31502
31532
  "text": "boolean"
31503
31533
  },
31504
31534
  "default": "false",
31505
- "description": "Attaches an arrow to the popup. The arrow's size and color can be customized using the `--arrow-size` and\n`--arrow-color` custom properties. For additional customizations, you can also target the arrow using\n`::part(arrow)` in your stylesheet.",
31506
- "attribute": "arrow"
31535
+ "description": "Fills the panel's own column height instead of using a fixed\n`min-height` pixel height — for hosts (like zn-theme-editor) whose\nlayout already stretches the column to match a taller sibling.\n`zoom` is ignored when set: its oversize maths depends on a known\npixel height, which `fill` deliberately doesn't have.",
31536
+ "attribute": "fill"
31507
31537
  },
31508
31538
  {
31509
31539
  "kind": "field",
31510
- "name": "arrowPlacement",
31540
+ "name": "device",
31511
31541
  "type": {
31512
- "text": "'start' | 'end' | 'center' | 'anchor'"
31542
+ "text": "PreviewFrameDevice"
31513
31543
  },
31514
- "default": "'anchor'",
31515
- "description": "The placement of the arrow. The default is `anchor`, which will align the arrow as close to the center of the\nanchor as possible, considering available space and `arrow-padding`. A value of `start`, `end`, or `center` will\nalign the arrow to the start, end, or center of the popover instead.",
31516
- "attribute": "arrow-placement"
31544
+ "default": "'desktop'",
31545
+ "description": "Constrains and centres the preview to a device width: `desktop` (100%),\n`tablet` (768px) or `mobile` (390px). The iframe element itself is\nnarrowed, so the embedded page's own media queries fire.",
31546
+ "attribute": "device",
31547
+ "reflects": true
31517
31548
  },
31518
31549
  {
31519
31550
  "kind": "field",
31520
- "name": "arrowPadding",
31551
+ "name": "backdrop",
31521
31552
  "type": {
31522
- "text": "number"
31553
+ "text": "'dots' | 'panel'"
31523
31554
  },
31524
- "default": "10",
31525
- "description": "The amount of padding between the arrow and the edges of the popup. If the popup has a border-radius, for example,\nthis will prevent it from overflowing the corners.",
31526
- "attribute": "arrow-padding"
31555
+ "default": "'dots'",
31556
+ "description": "Backdrop behind the stage: `dots` (default) is the canvas dot grid; `panel` is a plain `rgb(var(--zn-panel))` fill.",
31557
+ "attribute": "backdrop",
31558
+ "reflects": true
31527
31559
  },
31528
31560
  {
31529
31561
  "kind": "field",
31530
- "name": "flip",
31562
+ "name": "interactive",
31531
31563
  "type": {
31532
31564
  "text": "boolean"
31533
31565
  },
31534
31566
  "default": "false",
31535
- "description": "When set, placement of the popup will flip to the opposite site to keep it in view. You can use\n`flipFallbackPlacements` to further configure how the fallback placement is determined.",
31536
- "attribute": "flip"
31567
+ "description": "Lets pointer input through to the embedded page. The preview is inert by\ndefault: clicks never reach the frame, so the previewed page can't be\nnavigated or submitted from inside the preview. Cross-origin content can't\nbe reached from here to cancel its own handlers, so this blocks pointer\ninput entirely — hover goes with it. Scrolling doesn't: an overflowing\npage is scrolled by the panel rather than by the frame (see _contentHeight).\n\nSet, the frame becomes a real viewport instead: it stays the panel's own\nheight and the embed scrolls itself, so there is one scrollbar rather than\na panel scrolling an oversized frame, and the embed's viewport-relative\nlayout (`100vh`, `position: fixed`, sticky headers) sizes to what's on\nscreen. _contentHeight is ignored while this is set.",
31568
+ "attribute": "interactive",
31569
+ "reflects": true
31537
31570
  },
31538
31571
  {
31539
31572
  "kind": "field",
31540
- "name": "flipFallbackPlacements",
31573
+ "name": "frame",
31541
31574
  "type": {
31542
- "text": "string"
31543
- },
31544
- "default": "''",
31545
- "description": "If the preferred placement doesn't fit, popup will be tested in these fallback placements until one fits. Must be a\nstring of any number of placements separated by a space, e.g. \"top bottom left\". If no placement fits, the flip\nfallback strategy will be used instead.",
31546
- "attribute": "flip-fallback-placements"
31575
+ "text": "HTMLIFrameElement"
31576
+ }
31547
31577
  },
31548
31578
  {
31549
31579
  "kind": "field",
31550
- "name": "flipFallbackStrategy",
31580
+ "name": "error",
31551
31581
  "type": {
31552
- "text": "'best-fit' | 'initial'"
31582
+ "text": "string"
31553
31583
  },
31554
- "default": "'best-fit'",
31555
- "description": "When neither the preferred placement nor the fallback placements fit, this value will be used to determine whether\nthe popup should be positioned using the best available fit based on available space or as it was initially\npreferred.",
31556
- "attribute": "flip-fallback-strategy"
31584
+ "privacy": "private",
31585
+ "default": "''"
31557
31586
  },
31558
31587
  {
31559
31588
  "kind": "field",
31560
- "name": "flipBoundary",
31589
+ "name": "_contentHeight",
31561
31590
  "type": {
31562
- "text": "Element | Element[]"
31591
+ "text": "number"
31563
31592
  },
31564
- "description": "The flip boundary describes clipping element(s) that overflow will be checked relative to when flipping. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
31565
- "attribute": "flipBoundary"
31593
+ "privacy": "private",
31594
+ "default": "0",
31595
+ "description": "Height of the embedded page's content, when it's known: reported by the\nembed (`height` on hp-preview:rendered, or an hp-preview:height message) or\nmeasured directly for a same-origin embed. The frame is laid out at this\nheight rather than the panel's, so the page never scrolls inside the frame\n— the panel scrolls instead, which is what makes an overflowing preview\nreachable while pointer input to the frame is blocked. 0 = unknown, and the\nframe falls back to filling the panel. Kept up to date either way, but only\nlaid out when the frame is inert: an `interactive` frame scrolls itself."
31566
31596
  },
31567
31597
  {
31568
31598
  "kind": "field",
31569
- "name": "flipPadding",
31599
+ "name": "_generation",
31570
31600
  "type": {
31571
31601
  "text": "number"
31572
31602
  },
31573
- "default": "0",
31574
- "description": "The amount of padding, in pixels, to exceed before the flip behavior will occur.",
31575
- "attribute": "flip-padding"
31603
+ "privacy": "private",
31604
+ "default": "0"
31576
31605
  },
31577
31606
  {
31578
31607
  "kind": "field",
31579
- "name": "shift",
31608
+ "name": "_theme",
31580
31609
  "type": {
31581
- "text": "boolean"
31610
+ "text": "Record<string, unknown> | undefined"
31582
31611
  },
31583
- "default": "false",
31584
- "description": "Moves the popup along the axis to keep it in view when clipped.",
31585
- "attribute": "shift"
31612
+ "privacy": "private"
31586
31613
  },
31587
31614
  {
31588
31615
  "kind": "field",
31589
- "name": "shiftBoundary",
31616
+ "name": "_contentObserver",
31590
31617
  "type": {
31591
- "text": "Element | Element[]"
31618
+ "text": "ResizeObserver | undefined"
31592
31619
  },
31593
- "description": "The shift boundary describes clipping element(s) that overflow will be checked relative to when shifting. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
31594
- "attribute": "shiftBoundary"
31620
+ "privacy": "private"
31595
31621
  },
31596
31622
  {
31597
31623
  "kind": "field",
31598
- "name": "shiftPadding",
31599
- "type": {
31600
- "text": "number"
31601
- },
31602
- "default": "0",
31603
- "description": "The amount of padding, in pixels, to exceed before the shift behavior will occur.",
31604
- "attribute": "shift-padding"
31624
+ "name": "_watchedForms",
31625
+ "privacy": "private",
31626
+ "readonly": true,
31627
+ "default": "new Set<HTMLFormElement>()"
31605
31628
  },
31606
31629
  {
31607
31630
  "kind": "field",
31608
- "name": "autoSize",
31609
- "type": {
31610
- "text": "'horizontal' | 'vertical' | 'both'"
31611
- },
31612
- "description": "When set, this will cause the popup to automatically resize itself to prevent it from overflowing.",
31613
- "attribute": "auto-size"
31631
+ "name": "_debounceTimers",
31632
+ "privacy": "private",
31633
+ "readonly": true,
31634
+ "default": "new Map<HTMLFormElement, number>()"
31614
31635
  },
31615
31636
  {
31616
31637
  "kind": "field",
31617
- "name": "sync",
31638
+ "name": "_shellSaveRoots",
31618
31639
  "type": {
31619
- "text": "'width' | 'height' | 'both'"
31640
+ "text": "EventTarget[]"
31620
31641
  },
31621
- "description": "Syncs the popup's width or height to that of the anchor element.",
31622
- "attribute": "sync"
31642
+ "privacy": "private",
31643
+ "default": "[]"
31623
31644
  },
31624
31645
  {
31625
31646
  "kind": "field",
31626
- "name": "autoSizeBoundary",
31647
+ "name": "_lastShellSave",
31627
31648
  "type": {
31628
- "text": "Element | Element[]"
31649
+ "text": "Event | undefined"
31629
31650
  },
31630
- "description": "The auto-size boundary describes clipping element(s) that overflow will be checked relative to when resizing. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
31631
- "attribute": "autoSizeBoundary"
31651
+ "privacy": "private"
31632
31652
  },
31633
31653
  {
31634
31654
  "kind": "field",
31635
- "name": "autoSizePadding",
31636
- "type": {
31637
- "text": "number"
31638
- },
31639
- "default": "0",
31640
- "description": "The amount of padding, in pixels, to exceed before the auto-size behavior will occur.",
31641
- "attribute": "auto-size-padding"
31655
+ "name": "_formObserver",
31656
+ "privacy": "private",
31657
+ "readonly": true,
31658
+ "default": "new MutationController(this, { target: null, config: {subtree: true, childList: true}, callback: () => this._attachForms(), })"
31642
31659
  },
31643
31660
  {
31644
31661
  "kind": "field",
31645
- "name": "hoverBridge",
31646
- "type": {
31647
- "text": "boolean"
31648
- },
31649
- "default": "false",
31650
- "description": "When a gap exists between the anchor and the popup element, this option will add a \"hover bridge\" that fills the\ngap using an invisible element. This makes listening for events such as `mouseenter` and `mouseleave` more sane\nbecause the pointer never technically leaves the element. The hover bridge will only be drawn when the popover is\nactive.",
31651
- "attribute": "hover-bridge"
31662
+ "name": "_onMessage",
31663
+ "privacy": "private",
31664
+ "readonly": true
31652
31665
  },
31653
31666
  {
31654
31667
  "kind": "method",
31655
- "name": "handleAnchorChange",
31668
+ "name": "_applyContentHeight",
31669
+ "privacy": "private",
31670
+ "parameters": [
31671
+ {
31672
+ "name": "height",
31673
+ "type": {
31674
+ "text": "unknown"
31675
+ }
31676
+ }
31677
+ ]
31678
+ },
31679
+ {
31680
+ "kind": "method",
31681
+ "name": "_resetContentHeight",
31656
31682
  "privacy": "private"
31657
31683
  },
31658
31684
  {
31659
31685
  "kind": "field",
31660
- "name": "handleAnchorHover",
31661
- "privacy": "public"
31686
+ "name": "_onFrameLoad",
31687
+ "privacy": "private",
31688
+ "readonly": true
31662
31689
  },
31663
31690
  {
31664
31691
  "kind": "method",
31665
- "name": "start",
31666
- "privacy": "private"
31692
+ "name": "refresh",
31693
+ "description": "Re-fetches the payload and pushes a fresh config to the preview."
31667
31694
  },
31668
31695
  {
31669
31696
  "kind": "method",
31670
- "name": "stop",
31671
- "privacy": "private",
31672
- "return": {
31673
- "type": {
31674
- "text": "Promise<void>"
31697
+ "name": "setTheme",
31698
+ "parameters": [
31699
+ {
31700
+ "name": "theme",
31701
+ "type": {
31702
+ "text": "Record<string, unknown>"
31703
+ }
31675
31704
  }
31676
- }
31705
+ ],
31706
+ "description": "Pushes a theme payload into the preview. The payload is retained and\nre-posted after every ready handshake, so a frame reload doesn't drop an\nin-progress theme."
31677
31707
  },
31678
31708
  {
31679
31709
  "kind": "method",
31680
- "name": "reposition",
31681
- "description": "Forces the popup to recalculate and reposition itself."
31710
+ "name": "_postTheme",
31711
+ "privacy": "private"
31682
31712
  },
31683
31713
  {
31684
- "kind": "field",
31685
- "name": "updateHoverBridge",
31714
+ "kind": "method",
31715
+ "name": "_sendConfig",
31686
31716
  "privacy": "private"
31687
- }
31688
- ],
31689
- "events": [
31690
- {
31691
- "description": "Emitted as an example.",
31692
- "name": "zn-event-name"
31693
- }
31694
- ],
31695
- "attributes": [
31717
+ },
31696
31718
  {
31697
- "name": "anchor",
31698
- "type": {
31699
- "text": "Element | string | VirtualElement"
31700
- },
31701
- "description": "The element the popup will be anchored to. If the anchor lives outside of the popup, you can provide the anchor\nelement `id`, a DOM element reference, or a `VirtualElement`. If the anchor lives inside the popup, use the\n`anchor` slot instead.",
31702
- "fieldName": "anchor"
31719
+ "kind": "method",
31720
+ "name": "_attachForms",
31721
+ "privacy": "private"
31703
31722
  },
31704
31723
  {
31705
- "name": "active",
31706
- "type": {
31707
- "text": "boolean"
31708
- },
31709
- "default": "false",
31710
- "description": "Activates the positioning logic and shows the popup. When this attribute is removed, the positioning logic is torn\ndown and the popup will be hidden.",
31711
- "fieldName": "active"
31724
+ "kind": "field",
31725
+ "name": "_onShellSave",
31726
+ "privacy": "private",
31727
+ "readonly": true
31712
31728
  },
31713
31729
  {
31714
- "name": "placement",
31715
- "type": {
31716
- "text": "| 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'left'\n | 'left-start'\n | 'left-end'"
31717
- },
31718
- "default": "'top'",
31719
- "description": "The preferred placement of the popup. Note that the actual placement will vary as configured to keep the\npanel inside of the viewport.",
31720
- "fieldName": "placement"
31730
+ "kind": "method",
31731
+ "name": "_detachForm",
31732
+ "privacy": "private",
31733
+ "parameters": [
31734
+ {
31735
+ "name": "form",
31736
+ "type": {
31737
+ "text": "HTMLFormElement"
31738
+ }
31739
+ }
31740
+ ]
31721
31741
  },
31722
31742
  {
31723
- "name": "strategy",
31724
- "type": {
31725
- "text": "'absolute' | 'fixed'"
31726
- },
31727
- "default": "'fixed'",
31728
- "description": "Determines how the popup is positioned. The `absolute` strategy works well in most cases, but if overflow is\nclipped, using a `fixed` position strategy can often workaround it.",
31729
- "fieldName": "strategy"
31743
+ "kind": "field",
31744
+ "name": "_onChange",
31745
+ "privacy": "private",
31746
+ "readonly": true
31730
31747
  },
31731
31748
  {
31732
- "name": "distance",
31733
- "type": {
31734
- "text": "number"
31735
- },
31736
- "default": "0",
31737
- "description": "The distance in pixels from which to offset the panel away from its anchor.",
31738
- "fieldName": "distance"
31749
+ "kind": "field",
31750
+ "name": "_onSubmit",
31751
+ "privacy": "private",
31752
+ "readonly": true
31739
31753
  },
31740
31754
  {
31741
- "name": "skidding",
31742
- "type": {
31743
- "text": "number"
31744
- },
31745
- "default": "0",
31746
- "description": "The distance in pixels from which to offset the panel along its anchor.",
31747
- "fieldName": "skidding"
31755
+ "kind": "method",
31756
+ "name": "_save",
31757
+ "privacy": "private",
31758
+ "parameters": [
31759
+ {
31760
+ "name": "form",
31761
+ "type": {
31762
+ "text": "HTMLFormElement"
31763
+ }
31764
+ }
31765
+ ]
31748
31766
  },
31749
31767
  {
31750
- "name": "arrow",
31751
- "type": {
31752
- "text": "boolean"
31753
- },
31754
- "default": "false",
31755
- "description": "Attaches an arrow to the popup. The arrow's size and color can be customized using the `--arrow-size` and\n`--arrow-color` custom properties. For additional customizations, you can also target the arrow using\n`::part(arrow)` in your stylesheet.",
31756
- "fieldName": "arrow"
31757
- },
31768
+ "kind": "method",
31769
+ "name": "_fail",
31770
+ "privacy": "private",
31771
+ "parameters": [
31772
+ {
31773
+ "name": "message",
31774
+ "type": {
31775
+ "text": "string"
31776
+ }
31777
+ }
31778
+ ]
31779
+ }
31780
+ ],
31781
+ "events": [
31758
31782
  {
31759
- "name": "arrow-placement",
31760
- "type": {
31761
- "text": "'start' | 'end' | 'center' | 'anchor'"
31762
- },
31763
- "default": "'anchor'",
31764
- "description": "The placement of the arrow. The default is `anchor`, which will align the arrow as close to the center of the\nanchor as possible, considering available space and `arrow-padding`. A value of `start`, `end`, or `center` will\nalign the arrow to the start, end, or center of the popover instead.",
31765
- "fieldName": "arrowPlacement"
31766
- },
31783
+ "description": "Emitted when the preview reports a render error or a save fails.",
31784
+ "name": "zn-error"
31785
+ }
31786
+ ],
31787
+ "attributes": [
31767
31788
  {
31768
- "name": "arrow-padding",
31789
+ "name": "src",
31769
31790
  "type": {
31770
- "text": "number"
31791
+ "text": "string"
31771
31792
  },
31772
- "default": "10",
31773
- "description": "The amount of padding between the arrow and the edges of the popup. If the popup has a border-radius, for example,\nthis will prevent it from overflowing the corners.",
31774
- "fieldName": "arrowPadding"
31793
+ "default": "''",
31794
+ "description": "URL of the preview shell page (tokened embed URL).",
31795
+ "fieldName": "src"
31775
31796
  },
31776
31797
  {
31777
- "name": "flip",
31798
+ "name": "frame-origin",
31778
31799
  "type": {
31779
- "text": "boolean"
31800
+ "text": "string"
31780
31801
  },
31781
- "default": "false",
31782
- "description": "When set, placement of the popup will flip to the opposite site to keep it in view. You can use\n`flipFallbackPlacements` to further configure how the fallback placement is determined.",
31783
- "fieldName": "flip"
31802
+ "default": "''",
31803
+ "description": "Expected origin of the iframe; all postMessage traffic is checked against it.",
31804
+ "fieldName": "frameOrigin"
31784
31805
  },
31785
31806
  {
31786
- "name": "flip-fallback-placements",
31807
+ "name": "data-uri",
31787
31808
  "type": {
31788
31809
  "text": "string"
31789
31810
  },
31790
31811
  "default": "''",
31791
- "description": "If the preferred placement doesn't fit, popup will be tested in these fallback placements until one fits. Must be a\nstring of any number of placements separated by a space, e.g. \"top bottom left\". If no placement fits, the flip\nfallback strategy will be used instead.",
31792
- "fieldName": "flipFallbackPlacements"
31812
+ "description": "Endpoint returning the hp-preview:config payload JSON. The console proxy rewrites this attribute to an app-prefixed path for proper fetch resolution.",
31813
+ "fieldName": "dataUri"
31793
31814
  },
31794
31815
  {
31795
- "name": "flip-fallback-strategy",
31816
+ "name": "watch",
31796
31817
  "type": {
31797
- "text": "'best-fit' | 'initial'"
31818
+ "text": "string"
31798
31819
  },
31799
- "default": "'best-fit'",
31800
- "description": "When neither the preferred placement nor the fallback placements fit, this value will be used to determine whether\nthe popup should be positioned using the best available fit based on available space or as it was initially\npreferred.",
31801
- "fieldName": "flipFallbackStrategy"
31820
+ "default": "'form[data-auto-save]'",
31821
+ "description": "Selector (resolved against the component's root node) for the forms to watch.\nDefaults to only forms explicitly opted in via a `data-auto-save` attribute —\nunmarked forms keep normal submit behavior and are never intercepted,\nauto-saved, or used to trigger a preview refresh. Override to widen the scope.",
31822
+ "fieldName": "watch"
31802
31823
  },
31803
31824
  {
31804
- "name": "flipBoundary",
31825
+ "name": "refresh-on",
31805
31826
  "type": {
31806
- "text": "Element | Element[]"
31827
+ "text": "string"
31807
31828
  },
31808
- "description": "The flip boundary describes clipping element(s) that overflow will be checked relative to when flipping. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
31809
- "fieldName": "flipBoundary"
31829
+ "default": "'form'",
31830
+ "description": "Selector for forms whose saves are left to the shell but should still\nrefresh the preview. These are never intercepted: the shell submits them\n(so its own response handling — alerts, refreshes — runs as normal) and the\npreview re-fetches its config once the shell reports the save complete.\nMatched by delegation on the shell's bubbled `complete` event rather than\nby attaching to the forms themselves, so a save anywhere on the page\nrefreshes the preview — including forms in a different DOM root, e.g. a\npage-level form saved while the preview sits inside a tab panel's shadow\nroot (a page's Template select lives on one tab, its preview on another).\nSet empty to disable.",
31831
+ "fieldName": "refreshOn"
31810
31832
  },
31811
31833
  {
31812
- "name": "flip-padding",
31834
+ "name": "debounce",
31813
31835
  "type": {
31814
31836
  "text": "number"
31815
31837
  },
31816
- "default": "0",
31817
- "description": "The amount of padding, in pixels, to exceed before the flip behavior will occur.",
31818
- "fieldName": "flipPadding"
31819
- },
31820
- {
31821
- "name": "shift",
31822
- "type": {
31823
- "text": "boolean"
31824
- },
31825
- "default": "false",
31826
- "description": "Moves the popup along the axis to keep it in view when clipped.",
31827
- "fieldName": "shift"
31828
- },
31829
- {
31830
- "name": "shiftBoundary",
31831
- "type": {
31832
- "text": "Element | Element[]"
31833
- },
31834
- "description": "The shift boundary describes clipping element(s) that overflow will be checked relative to when shifting. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
31835
- "fieldName": "shiftBoundary"
31838
+ "default": "400",
31839
+ "description": "Debounce in ms between a form change and its auto-save.",
31840
+ "fieldName": "debounce"
31836
31841
  },
31837
31842
  {
31838
- "name": "shift-padding",
31843
+ "name": "zoom",
31839
31844
  "type": {
31840
31845
  "text": "number"
31841
31846
  },
31842
- "default": "0",
31843
- "description": "The amount of padding, in pixels, to exceed before the shift behavior will occur.",
31844
- "fieldName": "shiftPadding"
31847
+ "default": "1",
31848
+ "description": "Zooms the previewed page out (0–1]. The frame always fills the panel;\nzoom shrinks the content browser-style, so 0.4 shows the page at 40%\nsize with correspondingly more of it visible. 1 = natural size.\nIgnored when `fill` is set.",
31849
+ "fieldName": "zoom"
31845
31850
  },
31846
31851
  {
31847
- "name": "auto-size",
31852
+ "name": "min-height",
31848
31853
  "type": {
31849
- "text": "'horizontal' | 'vertical' | 'both'"
31854
+ "text": "number"
31850
31855
  },
31851
- "description": "When set, this will cause the popup to automatically resize itself to prevent it from overflowing.",
31852
- "fieldName": "autoSize"
31856
+ "default": "480",
31857
+ "description": "The visible height (in CSS pixels) of the preview panel. Fixed rather\nthan measured, because a measured height would feed back into the\nscaled iframe's layout box and grow unbounded. With `fill` set, this\nbecomes a `min-height` floor instead of the height.",
31858
+ "fieldName": "minHeight"
31853
31859
  },
31854
31860
  {
31855
- "name": "sync",
31861
+ "name": "fill",
31856
31862
  "type": {
31857
- "text": "'width' | 'height' | 'both'"
31863
+ "text": "boolean"
31858
31864
  },
31859
- "description": "Syncs the popup's width or height to that of the anchor element.",
31860
- "fieldName": "sync"
31865
+ "default": "false",
31866
+ "description": "Fills the panel's own column height instead of using a fixed\n`min-height` pixel height — for hosts (like zn-theme-editor) whose\nlayout already stretches the column to match a taller sibling.\n`zoom` is ignored when set: its oversize maths depends on a known\npixel height, which `fill` deliberately doesn't have.",
31867
+ "fieldName": "fill"
31861
31868
  },
31862
31869
  {
31863
- "name": "autoSizeBoundary",
31870
+ "name": "device",
31864
31871
  "type": {
31865
- "text": "Element | Element[]"
31872
+ "text": "PreviewFrameDevice"
31866
31873
  },
31867
- "description": "The auto-size boundary describes clipping element(s) that overflow will be checked relative to when resizing. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
31868
- "fieldName": "autoSizeBoundary"
31874
+ "default": "'desktop'",
31875
+ "description": "Constrains and centres the preview to a device width: `desktop` (100%),\n`tablet` (768px) or `mobile` (390px). The iframe element itself is\nnarrowed, so the embedded page's own media queries fire.",
31876
+ "fieldName": "device"
31869
31877
  },
31870
31878
  {
31871
- "name": "auto-size-padding",
31879
+ "name": "backdrop",
31872
31880
  "type": {
31873
- "text": "number"
31881
+ "text": "'dots' | 'panel'"
31874
31882
  },
31875
- "default": "0",
31876
- "description": "The amount of padding, in pixels, to exceed before the auto-size behavior will occur.",
31877
- "fieldName": "autoSizePadding"
31883
+ "default": "'dots'",
31884
+ "description": "Backdrop behind the stage: `dots` (default) is the canvas dot grid; `panel` is a plain `rgb(var(--zn-panel))` fill.",
31885
+ "fieldName": "backdrop"
31878
31886
  },
31879
31887
  {
31880
- "name": "hover-bridge",
31888
+ "name": "interactive",
31881
31889
  "type": {
31882
31890
  "text": "boolean"
31883
31891
  },
31884
31892
  "default": "false",
31885
- "description": "When a gap exists between the anchor and the popup element, this option will add a \"hover bridge\" that fills the\ngap using an invisible element. This makes listening for events such as `mouseenter` and `mouseleave` more sane\nbecause the pointer never technically leaves the element. The hover bridge will only be drawn when the popover is\nactive.",
31886
- "fieldName": "hoverBridge"
31893
+ "description": "Lets pointer input through to the embedded page. The preview is inert by\ndefault: clicks never reach the frame, so the previewed page can't be\nnavigated or submitted from inside the preview. Cross-origin content can't\nbe reached from here to cancel its own handlers, so this blocks pointer\ninput entirely — hover goes with it. Scrolling doesn't: an overflowing\npage is scrolled by the panel rather than by the frame (see _contentHeight).\n\nSet, the frame becomes a real viewport instead: it stays the panel's own\nheight and the embed scrolls itself, so there is one scrollbar rather than\na panel scrolling an oversized frame, and the embed's viewport-relative\nlayout (`100vh`, `position: fixed`, sticky headers) sizes to what's on\nscreen. _contentHeight is ignored while this is set.",
31894
+ "fieldName": "interactive"
31887
31895
  }
31888
31896
  ],
31889
31897
  "superclass": {
31890
31898
  "name": "ZincElement",
31891
31899
  "module": "/src/internal/zinc-element"
31892
31900
  },
31893
- "summary": "Short summary of the component's intended use.",
31894
- "tagNameWithoutPrefix": "popup",
31895
- "tagName": "zn-popup",
31901
+ "summary": "Embeds a live preview iframe and drives the hp-preview postMessage\nprotocol: answers the frame's ready handshake with a config payload fetched\nfrom data-uri, auto-saves watched forms on change, refreshes the preview\nafter each save (its own, or a shell-driven save of a `refresh-on` form),\naccepts a theme payload via setTheme() that is retained and replayed\nafter every ready handshake, and grows the frame to a content height the\nembed reports so the panel scrolls an overflowing page.",
31902
+ "tagNameWithoutPrefix": "preview-frame",
31903
+ "tagName": "zn-preview-frame",
31896
31904
  "customElement": true,
31897
- "jsDoc": "/**\n * @summary Short summary of the component's intended use.\n * @documentation https://zinc.style/components/popup\n * @status experimental\n * @since 1.0\n *\n * @dependency zn-example\n *\n * @event zn-event-name - Emitted as an example.\n *\n * @slot - The default slot.\n * @slot example - An example slot.\n *\n * @csspart base - The component's base wrapper.\n *\n * @cssproperty --example - An example CSS custom property.\n */",
31898
- "documentation": "https://zinc.style/components/popup",
31905
+ "jsDoc": "/**\n * @summary Embeds a live preview iframe and drives the hp-preview postMessage\n * protocol: answers the frame's ready handshake with a config payload fetched\n * from data-uri, auto-saves watched forms on change, refreshes the preview\n * after each save (its own, or a shell-driven save of a `refresh-on` form),\n * accepts a theme payload via setTheme() that is retained and replayed\n * after every ready handshake, and grows the frame to a content height the\n * embed reports so the panel scrolls an overflowing page.\n *\n * @documentation https://zinc.style/components/preview-frame\n * @status experimental\n * @since 1.0\n *\n * @event zn-error - Emitted when the preview reports a render error or a save fails.\n *\n * @csspart base - The component's base wrapper.\n * @csspart stage - The device-width wrapper around the iframe.\n * @csspart iframe - The preview iframe.\n * @csspart error - The error overlay.\n *\n * @cssproperty --zn-preview-frame-dot-spacing - Spacing of the backdrop dot grid (`backdrop=\"dots\"`). Defaults to 20px.\n * @cssproperty --zn-preview-frame-dot-opacity - Opacity of the backdrop dots (`backdrop=\"dots\"`). Defaults to 0.08.\n */",
31906
+ "documentation": "https://zinc.style/components/preview-frame",
31899
31907
  "status": "experimental",
31900
- "since": "1.0",
31901
- "dependencies": [
31902
- "zn-example"
31903
- ]
31908
+ "since": "1.0"
31904
31909
  }
31905
31910
  ],
31906
31911
  "exports": [
@@ -31908,510 +31913,652 @@
31908
31913
  "kind": "js",
31909
31914
  "name": "default",
31910
31915
  "declaration": {
31911
- "name": "ZnPopup",
31912
- "module": "components/popup/popup.js"
31916
+ "name": "ZnPreviewFrame",
31917
+ "module": "components/preview-frame/preview-frame.js"
31913
31918
  }
31914
31919
  }
31915
31920
  ]
31916
31921
  },
31917
31922
  {
31918
31923
  "kind": "javascript-module",
31919
- "path": "components/preview-frame/preview-frame.js",
31924
+ "path": "components/priority-list/priority-list.js",
31920
31925
  "declarations": [
31921
31926
  {
31922
31927
  "kind": "class",
31923
31928
  "description": "",
31924
- "name": "ZnPreviewFrame",
31929
+ "name": "ZnPriorityList",
31925
31930
  "cssProperties": [
31926
31931
  {
31927
- "description": "Spacing of the backdrop dot grid (`backdrop=\"dots\"`). Defaults to 20px.",
31928
- "name": "--zn-preview-frame-dot-spacing"
31932
+ "description": "The gap between list items. Defaults to `var(--zn-spacing-2x-small)`.",
31933
+ "name": "--zn-priority-list-item-gap"
31929
31934
  },
31930
31935
  {
31931
- "description": "Opacity of the backdrop dots (`backdrop=\"dots\"`). Defaults to 0.08.",
31932
- "name": "--zn-preview-frame-dot-opacity"
31936
+ "description": "The padding inside each item. Defaults to `var(--zn-spacing-small) var(--zn-spacing-medium)`.",
31937
+ "name": "--zn-priority-list-item-padding"
31938
+ },
31939
+ {
31940
+ "description": "The gap between an item's slotted actions. Defaults to `var(--zn-spacing-x-small)`.",
31941
+ "name": "--zn-priority-list-actions-gap"
31942
+ },
31943
+ {
31944
+ "description": "The color of the drag handle. Defaults to `var(--zn-color-neutral-500)`.",
31945
+ "name": "--zn-priority-list-handle-color"
31946
+ },
31947
+ {
31948
+ "description": "The color of the priority number. Defaults to `var(--zn-color-neutral-600)`.",
31949
+ "name": "--zn-priority-list-priority-color"
31933
31950
  }
31934
31951
  ],
31935
31952
  "cssParts": [
31936
31953
  {
31937
- "description": "The component's base wrapper.",
31938
- "name": "base"
31954
+ "description": "The form control wrapper.",
31955
+ "name": "form-control"
31939
31956
  },
31940
31957
  {
31941
- "description": "The device-width wrapper around the iframe.",
31942
- "name": "stage"
31958
+ "description": "The label wrapper.",
31959
+ "name": "form-control-label"
31943
31960
  },
31944
31961
  {
31945
- "description": "The preview iframe.",
31946
- "name": "iframe"
31962
+ "description": "The input area wrapper.",
31963
+ "name": "form-control-input"
31947
31964
  },
31948
31965
  {
31949
- "description": "The error overlay.",
31950
- "name": "error"
31966
+ "description": "The help text wrapper.",
31967
+ "name": "form-control-help-text"
31968
+ },
31969
+ {
31970
+ "description": "The list container.",
31971
+ "name": "list"
31972
+ },
31973
+ {
31974
+ "description": "An individual list item row.",
31975
+ "name": "item"
31976
+ },
31977
+ {
31978
+ "description": "The drag handle icon.",
31979
+ "name": "drag-handle"
31980
+ },
31981
+ {
31982
+ "description": "The priority number badge.",
31983
+ "name": "priority"
31984
+ },
31985
+ {
31986
+ "description": "The content area of an item.",
31987
+ "name": "content"
31988
+ }
31989
+ ],
31990
+ "slots": [
31991
+ {
31992
+ "description": "The default slot where list items are placed. Each slotted element must have a `value` attribute that uniquely identifies the item. The component automatically assigns slot names to project each item into the correct position. The item's position in the list determines its priority (top = `priority-start`, incrementing).",
31993
+ "name": ""
31994
+ },
31995
+ {
31996
+ "description": "The component's label. Required for proper accessibility. Alternatively, use the `label` attribute.",
31997
+ "name": "label"
31998
+ },
31999
+ {
32000
+ "description": "Used to add text displayed in a tooltip next to the label.",
32001
+ "name": "label-tooltip"
32002
+ },
32003
+ {
32004
+ "description": "Text that describes how to use the component. Alternatively, use the `help-text` attribute.",
32005
+ "name": "help-text"
31951
32006
  }
31952
32007
  ],
31953
32008
  "members": [
31954
32009
  {
31955
32010
  "kind": "field",
31956
- "name": "src",
32011
+ "name": "dependencies",
31957
32012
  "type": {
31958
- "text": "string"
32013
+ "text": "object"
31959
32014
  },
31960
- "default": "''",
31961
- "description": "URL of the preview shell page (tokened embed URL).",
31962
- "attribute": "src"
32015
+ "static": true,
32016
+ "default": "{ 'zn-icon': ZnIcon, }"
31963
32017
  },
31964
32018
  {
31965
32019
  "kind": "field",
31966
- "name": "frameOrigin",
32020
+ "name": "formControlController",
32021
+ "privacy": "protected",
32022
+ "readonly": true,
32023
+ "default": "new FormControlController(this, { value: (control: ZnPriorityList) => { return JSON.stringify(control.getPriorityMap()); }, defaultValue: (control: ZnPriorityList) => control.defaultValue, // A form reset passes defaultValue straight back in, so this has to accept the // key array as well as the serialised value other callers set. setValue: (control: ZnPriorityList, value: string | string[]) => { if (!value || (Array.isArray(value) && value.length === 0)) return; const keys: unknown = Array.isArray(value) ? value : safeParse(value); if (Array.isArray(keys) && keys.every((item: unknown): item is string => typeof item === 'string')) { control.value = keys as string[]; } }, })"
32024
+ },
32025
+ {
32026
+ "kind": "field",
32027
+ "name": "hasSlotController",
32028
+ "privacy": "private",
32029
+ "readonly": true,
32030
+ "default": "new HasSlotController(this, 'help-text', 'label')"
32031
+ },
32032
+ {
32033
+ "kind": "field",
32034
+ "name": "hiddenInputsContainer",
31967
32035
  "type": {
31968
- "text": "string"
31969
- },
31970
- "default": "''",
31971
- "description": "Expected origin of the iframe; all postMessage traffic is checked against it.",
31972
- "attribute": "frame-origin"
32036
+ "text": "HTMLDivElement"
32037
+ }
31973
32038
  },
31974
32039
  {
31975
32040
  "kind": "field",
31976
- "name": "dataUri",
32041
+ "name": "name",
31977
32042
  "type": {
31978
32043
  "text": "string"
31979
32044
  },
31980
32045
  "default": "''",
31981
- "description": "Endpoint returning the hp-preview:config payload JSON. The console proxy rewrites this attribute to an app-prefixed path for proper fetch resolution.",
31982
- "attribute": "data-uri"
32046
+ "description": "The name prefix for form submission. Each item generates a hidden input named `{name}[{itemValue}]`\nwith the priority number as its value.",
32047
+ "attribute": "name"
31983
32048
  },
31984
32049
  {
31985
32050
  "kind": "field",
31986
- "name": "watch",
32051
+ "name": "value",
31987
32052
  "type": {
31988
- "text": "string"
32053
+ "text": "string[]"
31989
32054
  },
31990
- "default": "'form[data-auto-save]'",
31991
- "description": "Selector (resolved against the component's root node) for the forms to watch.\nDefaults to only forms explicitly opted in via a `data-auto-save` attribute —\nunmarked forms keep normal submit behavior and are never intercepted,\nauto-saved, or used to trigger a preview refresh. Override to widen the scope.",
31992
- "attribute": "watch"
32055
+ "description": "The current ordered list of item keys, reflecting the visual order. This is the source of truth for ordering.\nEach entry should match a `value` attribute on a slotted child element.",
32056
+ "attribute": "value"
31993
32057
  },
31994
32058
  {
31995
32059
  "kind": "field",
31996
- "name": "refreshOn",
32060
+ "name": "_value",
31997
32061
  "type": {
31998
- "text": "string"
32062
+ "text": "string[]"
31999
32063
  },
32000
- "default": "'form'",
32001
- "description": "Selector for forms whose saves are left to the shell but should still\nrefresh the preview. These are never intercepted: the shell submits them\n(so its own response handling — alerts, refreshes — runs as normal) and the\npreview re-fetches its config once the shell reports the save complete.\nMatched by delegation on the shell's bubbled `complete` event rather than\nby attaching to the forms themselves, so a save anywhere on the page\nrefreshes the preview — including forms in a different DOM root, e.g. a\npage-level form saved while the preview sits inside a tab panel's shadow\nroot (a page's Template select lives on one tab, its preview on another).\nSet empty to disable.",
32002
- "attribute": "refresh-on"
32064
+ "privacy": "private",
32065
+ "default": "[]"
32003
32066
  },
32004
32067
  {
32005
32068
  "kind": "field",
32006
- "name": "debounce",
32069
+ "name": "defaultValue",
32007
32070
  "type": {
32008
- "text": "number"
32071
+ "text": "string[]"
32009
32072
  },
32010
- "default": "400",
32011
- "description": "Debounce in ms between a form change and its auto-save.",
32012
- "attribute": "debounce"
32073
+ "default": "[]"
32013
32074
  },
32014
32075
  {
32015
32076
  "kind": "field",
32016
- "name": "zoom",
32077
+ "name": "label",
32017
32078
  "type": {
32018
- "text": "number"
32079
+ "text": "string"
32019
32080
  },
32020
- "default": "1",
32021
- "description": "Zooms the previewed page out (0–1]. The frame always fills the panel;\nzoom shrinks the content browser-style, so 0.4 shows the page at 40%\nsize with correspondingly more of it visible. 1 = natural size.\nIgnored when `fill` is set.",
32022
- "attribute": "zoom"
32081
+ "default": "''",
32082
+ "description": "The component's label. Required for proper accessibility.",
32083
+ "attribute": "label"
32023
32084
  },
32024
32085
  {
32025
32086
  "kind": "field",
32026
- "name": "minHeight",
32087
+ "name": "labelTooltip",
32027
32088
  "type": {
32028
- "text": "number"
32089
+ "text": "string"
32029
32090
  },
32030
- "default": "480",
32031
- "description": "The visible height (in CSS pixels) of the preview panel. Fixed rather\nthan measured, because a measured height would feed back into the\nscaled iframe's layout box and grow unbounded. With `fill` set, this\nbecomes a `min-height` floor instead of the height.",
32032
- "attribute": "min-height"
32091
+ "default": "''",
32092
+ "description": "Text that appears in a tooltip next to the label.",
32093
+ "attribute": "label-tooltip"
32033
32094
  },
32034
32095
  {
32035
32096
  "kind": "field",
32036
- "name": "fill",
32097
+ "name": "helpText",
32037
32098
  "type": {
32038
- "text": "boolean"
32099
+ "text": "string"
32039
32100
  },
32040
- "default": "false",
32041
- "description": "Fills the panel's own column height instead of using a fixed\n`min-height` pixel height — for hosts (like zn-theme-editor) whose\nlayout already stretches the column to match a taller sibling.\n`zoom` is ignored when set: its oversize maths depends on a known\npixel height, which `fill` deliberately doesn't have.",
32042
- "attribute": "fill"
32101
+ "default": "''",
32102
+ "description": "Help text that describes how to use the component.",
32103
+ "attribute": "help-text"
32043
32104
  },
32044
32105
  {
32045
32106
  "kind": "field",
32046
- "name": "device",
32107
+ "name": "form",
32047
32108
  "type": {
32048
- "text": "PreviewFrameDevice"
32109
+ "text": "string"
32049
32110
  },
32050
- "default": "'desktop'",
32051
- "description": "Constrains and centres the preview to a device width: `desktop` (100%),\n`tablet` (768px) or `mobile` (390px). The iframe element itself is\nnarrowed, so the embedded page's own media queries fire.",
32052
- "attribute": "device",
32111
+ "default": "''",
32112
+ "description": "Associates the control with a form by id. The form must be in the same document or shadow root.",
32113
+ "attribute": "form",
32053
32114
  "reflects": true
32054
32115
  },
32055
32116
  {
32056
32117
  "kind": "field",
32057
- "name": "backdrop",
32118
+ "name": "size",
32058
32119
  "type": {
32059
- "text": "'dots' | 'panel'"
32120
+ "text": "'small' | 'medium' | 'large'"
32060
32121
  },
32061
- "default": "'dots'",
32062
- "description": "Backdrop behind the stage: `dots` (default) is the canvas dot grid; `panel` is a plain `rgb(var(--zn-panel))` fill.",
32063
- "attribute": "backdrop",
32122
+ "default": "'medium'",
32123
+ "description": "The size of the list items.",
32124
+ "attribute": "size",
32064
32125
  "reflects": true
32065
32126
  },
32066
32127
  {
32067
32128
  "kind": "field",
32068
- "name": "interactive",
32129
+ "name": "disabled",
32069
32130
  "type": {
32070
32131
  "text": "boolean"
32071
32132
  },
32072
32133
  "default": "false",
32073
- "description": "Lets pointer input through to the embedded page. The preview is inert by\ndefault: clicks never reach the frame, so the previewed page can't be\nnavigated or submitted from inside the preview. Cross-origin content can't\nbe reached from here to cancel its own handlers, so this blocks pointer\ninput entirely — hover goes with it. Scrolling doesn't: an overflowing\npage is scrolled by the panel rather than by the frame (see _contentHeight).\n\nSet, the frame becomes a real viewport instead: it stays the panel's own\nheight and the embed scrolls itself, so there is one scrollbar rather than\na panel scrolling an oversized frame, and the embed's viewport-relative\nlayout (`100vh`, `position: fixed`, sticky headers) sizes to what's on\nscreen. _contentHeight is ignored while this is set.",
32074
- "attribute": "interactive",
32134
+ "description": "Whether the priority list is disabled.",
32135
+ "attribute": "disabled",
32075
32136
  "reflects": true
32076
32137
  },
32077
32138
  {
32078
32139
  "kind": "field",
32079
- "name": "frame",
32080
- "type": {
32081
- "text": "HTMLIFrameElement"
32082
- }
32083
- },
32084
- {
32085
- "kind": "field",
32086
- "name": "error",
32140
+ "name": "required",
32087
32141
  "type": {
32088
- "text": "string"
32142
+ "text": "boolean"
32089
32143
  },
32090
- "privacy": "private",
32091
- "default": "''"
32144
+ "default": "false",
32145
+ "description": "Ensures the form control has a value before allowing submission.",
32146
+ "attribute": "required",
32147
+ "reflects": true
32092
32148
  },
32093
32149
  {
32094
32150
  "kind": "field",
32095
- "name": "_contentHeight",
32151
+ "name": "priorityStart",
32096
32152
  "type": {
32097
32153
  "text": "number"
32098
32154
  },
32099
- "privacy": "private",
32100
- "default": "0",
32101
- "description": "Height of the embedded page's content, when it's known: reported by the\nembed (`height` on hp-preview:rendered, or an hp-preview:height message) or\nmeasured directly for a same-origin embed. The frame is laid out at this\nheight rather than the panel's, so the page never scrolls inside the frame\n— the panel scrolls instead, which is what makes an overflowing preview\nreachable while pointer input to the frame is blocked. 0 = unknown, and the\nframe falls back to filling the panel. Kept up to date either way, but only\nlaid out when the frame is inert: an `interactive` frame scrolls itself."
32155
+ "default": "1",
32156
+ "description": "The starting priority number. Defaults to 1.",
32157
+ "attribute": "priority-start"
32102
32158
  },
32103
32159
  {
32104
32160
  "kind": "field",
32105
- "name": "_generation",
32161
+ "name": "formAction",
32106
32162
  "type": {
32107
- "text": "number"
32163
+ "text": "string"
32108
32164
  },
32109
- "privacy": "private",
32110
- "default": "0"
32165
+ "description": "When set, the associated form will be submitted with the given action URL whenever items are reordered.\nIf set to an empty string, the form will be submitted using its existing action.",
32166
+ "attribute": "formaction"
32111
32167
  },
32112
32168
  {
32113
32169
  "kind": "field",
32114
- "name": "_theme",
32170
+ "name": "order",
32115
32171
  "type": {
32116
- "text": "Record<string, unknown> | undefined"
32172
+ "text": "string"
32117
32173
  },
32118
- "privacy": "private"
32174
+ "default": "''",
32175
+ "description": "A comma-separated list of item keys defining the initial display order.\nKeys must match the `value` attributes on slotted children.\nAny slotted items not listed are appended at the end in DOM order.",
32176
+ "attribute": "order"
32119
32177
  },
32120
32178
  {
32121
32179
  "kind": "field",
32122
- "name": "_contentObserver",
32180
+ "name": "draggedKey",
32123
32181
  "type": {
32124
- "text": "ResizeObserver | undefined"
32182
+ "text": "string | null"
32125
32183
  },
32126
- "privacy": "private"
32127
- },
32128
- {
32129
- "kind": "field",
32130
- "name": "_watchedForms",
32131
32184
  "privacy": "private",
32132
- "readonly": true,
32133
- "default": "new Set<HTMLFormElement>()"
32185
+ "default": "null"
32134
32186
  },
32135
32187
  {
32136
32188
  "kind": "field",
32137
- "name": "_debounceTimers",
32189
+ "name": "isDragging",
32190
+ "type": {
32191
+ "text": "boolean"
32192
+ },
32138
32193
  "privacy": "private",
32139
- "readonly": true,
32140
- "default": "new Map<HTMLFormElement, number>()"
32194
+ "default": "false"
32141
32195
  },
32142
32196
  {
32143
32197
  "kind": "field",
32144
- "name": "_shellSaveRoots",
32198
+ "name": "dragOverKey",
32145
32199
  "type": {
32146
- "text": "EventTarget[]"
32200
+ "text": "string | null"
32147
32201
  },
32148
32202
  "privacy": "private",
32149
- "default": "[]"
32203
+ "default": "null"
32150
32204
  },
32151
32205
  {
32152
32206
  "kind": "field",
32153
- "name": "_lastShellSave",
32207
+ "name": "validity",
32154
32208
  "type": {
32155
- "text": "Event | undefined"
32209
+ "text": "ValidityState"
32156
32210
  },
32157
- "privacy": "private"
32211
+ "description": "Gets the validity state object.",
32212
+ "readonly": true
32158
32213
  },
32159
32214
  {
32160
32215
  "kind": "field",
32161
- "name": "_formObserver",
32162
- "privacy": "private",
32163
- "readonly": true,
32164
- "default": "new MutationController(this, { target: null, config: {subtree: true, childList: true}, callback: () => this._attachForms(), })"
32216
+ "name": "validationMessage",
32217
+ "type": {
32218
+ "text": "string"
32219
+ },
32220
+ "description": "Gets the validation message.",
32221
+ "readonly": true
32165
32222
  },
32166
32223
  {
32167
- "kind": "field",
32168
- "name": "_onMessage",
32224
+ "kind": "method",
32225
+ "name": "_initializeOrderFromSlot",
32169
32226
  "privacy": "private",
32170
- "readonly": true
32227
+ "description": "Initialize item order from slotted children if no explicit value was provided.\nIf an `order` attribute is set, use it to define the initial order,\nappending any slotted items not listed in the order at the end."
32171
32228
  },
32172
32229
  {
32173
32230
  "kind": "method",
32174
- "name": "_applyContentHeight",
32231
+ "name": "_getSlottedItems",
32175
32232
  "privacy": "private",
32176
- "parameters": [
32177
- {
32178
- "name": "height",
32179
- "type": {
32180
- "text": "unknown"
32181
- }
32233
+ "return": {
32234
+ "type": {
32235
+ "text": "HTMLElement[]"
32182
32236
  }
32183
- ]
32237
+ },
32238
+ "description": "Gets all direct children with a `value` attribute (excluding those in reserved slots)."
32184
32239
  },
32185
32240
  {
32186
32241
  "kind": "method",
32187
- "name": "_resetContentHeight",
32188
- "privacy": "private"
32242
+ "name": "_assignSlotNames",
32243
+ "privacy": "private",
32244
+ "description": "Assigns `slot` attributes to light DOM children based on their `value` attribute,\nso they project into the correct named slot in the shadow DOM."
32189
32245
  },
32190
32246
  {
32191
- "kind": "field",
32192
- "name": "_onFrameLoad",
32193
- "privacy": "private",
32194
- "readonly": true
32247
+ "kind": "method",
32248
+ "name": "getPriorityMap",
32249
+ "return": {
32250
+ "type": {
32251
+ "text": "PriorityItem[]"
32252
+ }
32253
+ },
32254
+ "description": "Returns the priority map: an array of { key, priority } objects."
32195
32255
  },
32196
32256
  {
32197
32257
  "kind": "method",
32198
- "name": "refresh",
32199
- "description": "Re-fetches the payload and pushes a fresh config to the preview."
32258
+ "name": "_syncHiddenInputs",
32259
+ "privacy": "private",
32260
+ "description": "Syncs hidden inputs so form data includes priority values."
32200
32261
  },
32201
32262
  {
32202
32263
  "kind": "method",
32203
- "name": "setTheme",
32264
+ "name": "_moveItem",
32265
+ "privacy": "private",
32204
32266
  "parameters": [
32205
32267
  {
32206
- "name": "theme",
32268
+ "name": "fromIndex",
32207
32269
  "type": {
32208
- "text": "Record<string, unknown>"
32270
+ "text": "number"
32271
+ }
32272
+ },
32273
+ {
32274
+ "name": "toIndex",
32275
+ "type": {
32276
+ "text": "number"
32209
32277
  }
32210
32278
  }
32211
32279
  ],
32212
- "description": "Pushes a theme payload into the preview. The payload is retained and\nre-posted after every ready handshake, so a frame reload doesn't drop an\nin-progress theme."
32280
+ "description": "Moves an item from one index to another."
32213
32281
  },
32214
32282
  {
32215
32283
  "kind": "method",
32216
- "name": "_postTheme",
32217
- "privacy": "private"
32284
+ "name": "_submitForm",
32285
+ "privacy": "private",
32286
+ "description": "Submits the associated form if a `formaction` attribute is set."
32218
32287
  },
32219
32288
  {
32220
32289
  "kind": "method",
32221
- "name": "_sendConfig",
32222
- "privacy": "private"
32290
+ "name": "_handleDragStart",
32291
+ "privacy": "private",
32292
+ "parameters": [
32293
+ {
32294
+ "name": "event",
32295
+ "type": {
32296
+ "text": "DragEvent"
32297
+ }
32298
+ },
32299
+ {
32300
+ "name": "key",
32301
+ "type": {
32302
+ "text": "string"
32303
+ }
32304
+ }
32305
+ ]
32223
32306
  },
32224
32307
  {
32225
32308
  "kind": "method",
32226
- "name": "_attachForms",
32309
+ "name": "_handleDragEnd",
32227
32310
  "privacy": "private"
32228
32311
  },
32229
- {
32230
- "kind": "field",
32231
- "name": "_onShellSave",
32232
- "privacy": "private",
32233
- "readonly": true
32234
- },
32235
32312
  {
32236
32313
  "kind": "method",
32237
- "name": "_detachForm",
32314
+ "name": "_handleDragOver",
32238
32315
  "privacy": "private",
32239
32316
  "parameters": [
32240
32317
  {
32241
- "name": "form",
32318
+ "name": "event",
32242
32319
  "type": {
32243
- "text": "HTMLFormElement"
32320
+ "text": "DragEvent"
32321
+ }
32322
+ },
32323
+ {
32324
+ "name": "key",
32325
+ "type": {
32326
+ "text": "string"
32244
32327
  }
32245
32328
  }
32246
32329
  ]
32247
32330
  },
32248
32331
  {
32249
- "kind": "field",
32250
- "name": "_onChange",
32251
- "privacy": "private",
32252
- "readonly": true
32253
- },
32254
- {
32255
- "kind": "field",
32256
- "name": "_onSubmit",
32332
+ "kind": "method",
32333
+ "name": "_handleDragLeave",
32257
32334
  "privacy": "private",
32258
- "readonly": true
32335
+ "parameters": [
32336
+ {
32337
+ "name": "event",
32338
+ "type": {
32339
+ "text": "DragEvent"
32340
+ }
32341
+ },
32342
+ {
32343
+ "name": "key",
32344
+ "type": {
32345
+ "text": "string"
32346
+ }
32347
+ }
32348
+ ]
32259
32349
  },
32260
32350
  {
32261
32351
  "kind": "method",
32262
- "name": "_save",
32352
+ "name": "_handleDrop",
32263
32353
  "privacy": "private",
32264
32354
  "parameters": [
32265
32355
  {
32266
- "name": "form",
32356
+ "name": "event",
32267
32357
  "type": {
32268
- "text": "HTMLFormElement"
32358
+ "text": "DragEvent"
32269
32359
  }
32270
32360
  }
32271
32361
  ]
32272
32362
  },
32273
32363
  {
32274
32364
  "kind": "method",
32275
- "name": "_fail",
32365
+ "name": "_handleKeyDown",
32276
32366
  "privacy": "private",
32277
32367
  "parameters": [
32278
32368
  {
32279
- "name": "message",
32369
+ "name": "event",
32370
+ "type": {
32371
+ "text": "KeyboardEvent"
32372
+ }
32373
+ },
32374
+ {
32375
+ "name": "key",
32280
32376
  "type": {
32281
32377
  "text": "string"
32282
32378
  }
32283
32379
  }
32284
32380
  ]
32381
+ },
32382
+ {
32383
+ "kind": "method",
32384
+ "name": "_handleSlotChange",
32385
+ "privacy": "private"
32386
+ },
32387
+ {
32388
+ "kind": "method",
32389
+ "name": "checkValidity",
32390
+ "return": {
32391
+ "type": {
32392
+ "text": "boolean"
32393
+ }
32394
+ },
32395
+ "description": "Checks for validity but does not show a validation message."
32396
+ },
32397
+ {
32398
+ "kind": "method",
32399
+ "name": "getForm",
32400
+ "return": {
32401
+ "type": {
32402
+ "text": "HTMLFormElement | null"
32403
+ }
32404
+ },
32405
+ "description": "Gets the associated form, if one exists."
32406
+ },
32407
+ {
32408
+ "kind": "method",
32409
+ "name": "reportValidity",
32410
+ "return": {
32411
+ "type": {
32412
+ "text": "boolean"
32413
+ }
32414
+ },
32415
+ "description": "Checks for validity and shows the browser's validation message if the control is invalid."
32416
+ },
32417
+ {
32418
+ "kind": "method",
32419
+ "name": "setCustomValidity",
32420
+ "parameters": [
32421
+ {
32422
+ "name": "_message",
32423
+ "default": "''"
32424
+ }
32425
+ ],
32426
+ "description": "Sets a custom validation message. Pass an empty string to restore validity."
32285
32427
  }
32286
32428
  ],
32287
32429
  "events": [
32288
32430
  {
32289
- "description": "Emitted when the preview reports a render error or a save fails.",
32290
- "name": "zn-error"
32431
+ "description": "Emitted when the order of items changes.",
32432
+ "name": "zn-change"
32433
+ },
32434
+ {
32435
+ "description": "Emitted when items are reordered. Call `getPriorityMap()` on the component to get the updated `{ key: string, priority: number }[]` array.",
32436
+ "name": "zn-reorder"
32291
32437
  }
32292
32438
  ],
32293
32439
  "attributes": [
32294
32440
  {
32295
- "name": "src",
32441
+ "name": "name",
32296
32442
  "type": {
32297
32443
  "text": "string"
32298
32444
  },
32299
32445
  "default": "''",
32300
- "description": "URL of the preview shell page (tokened embed URL).",
32301
- "fieldName": "src"
32446
+ "description": "The name prefix for form submission. Each item generates a hidden input named `{name}[{itemValue}]`\nwith the priority number as its value.",
32447
+ "fieldName": "name"
32302
32448
  },
32303
32449
  {
32304
- "name": "frame-origin",
32450
+ "name": "value",
32305
32451
  "type": {
32306
- "text": "string"
32452
+ "text": "string[]"
32307
32453
  },
32308
- "default": "''",
32309
- "description": "Expected origin of the iframe; all postMessage traffic is checked against it.",
32310
- "fieldName": "frameOrigin"
32454
+ "description": "The current ordered list of item keys, reflecting the visual order. This is the source of truth for ordering.\nEach entry should match a `value` attribute on a slotted child element.",
32455
+ "fieldName": "value"
32311
32456
  },
32312
32457
  {
32313
- "name": "data-uri",
32458
+ "name": "label",
32314
32459
  "type": {
32315
32460
  "text": "string"
32316
32461
  },
32317
32462
  "default": "''",
32318
- "description": "Endpoint returning the hp-preview:config payload JSON. The console proxy rewrites this attribute to an app-prefixed path for proper fetch resolution.",
32319
- "fieldName": "dataUri"
32463
+ "description": "The component's label. Required for proper accessibility.",
32464
+ "fieldName": "label"
32320
32465
  },
32321
32466
  {
32322
- "name": "watch",
32467
+ "name": "label-tooltip",
32323
32468
  "type": {
32324
32469
  "text": "string"
32325
32470
  },
32326
- "default": "'form[data-auto-save]'",
32327
- "description": "Selector (resolved against the component's root node) for the forms to watch.\nDefaults to only forms explicitly opted in via a `data-auto-save` attribute —\nunmarked forms keep normal submit behavior and are never intercepted,\nauto-saved, or used to trigger a preview refresh. Override to widen the scope.",
32328
- "fieldName": "watch"
32471
+ "default": "''",
32472
+ "description": "Text that appears in a tooltip next to the label.",
32473
+ "fieldName": "labelTooltip"
32329
32474
  },
32330
32475
  {
32331
- "name": "refresh-on",
32476
+ "name": "help-text",
32332
32477
  "type": {
32333
32478
  "text": "string"
32334
32479
  },
32335
- "default": "'form'",
32336
- "description": "Selector for forms whose saves are left to the shell but should still\nrefresh the preview. These are never intercepted: the shell submits them\n(so its own response handling — alerts, refreshes — runs as normal) and the\npreview re-fetches its config once the shell reports the save complete.\nMatched by delegation on the shell's bubbled `complete` event rather than\nby attaching to the forms themselves, so a save anywhere on the page\nrefreshes the preview — including forms in a different DOM root, e.g. a\npage-level form saved while the preview sits inside a tab panel's shadow\nroot (a page's Template select lives on one tab, its preview on another).\nSet empty to disable.",
32337
- "fieldName": "refreshOn"
32480
+ "default": "''",
32481
+ "description": "Help text that describes how to use the component.",
32482
+ "fieldName": "helpText"
32338
32483
  },
32339
32484
  {
32340
- "name": "debounce",
32485
+ "name": "form",
32341
32486
  "type": {
32342
- "text": "number"
32487
+ "text": "string"
32343
32488
  },
32344
- "default": "400",
32345
- "description": "Debounce in ms between a form change and its auto-save.",
32346
- "fieldName": "debounce"
32489
+ "default": "''",
32490
+ "description": "Associates the control with a form by id. The form must be in the same document or shadow root.",
32491
+ "fieldName": "form"
32347
32492
  },
32348
32493
  {
32349
- "name": "zoom",
32494
+ "name": "size",
32350
32495
  "type": {
32351
- "text": "number"
32496
+ "text": "'small' | 'medium' | 'large'"
32352
32497
  },
32353
- "default": "1",
32354
- "description": "Zooms the previewed page out (0–1]. The frame always fills the panel;\nzoom shrinks the content browser-style, so 0.4 shows the page at 40%\nsize with correspondingly more of it visible. 1 = natural size.\nIgnored when `fill` is set.",
32355
- "fieldName": "zoom"
32498
+ "default": "'medium'",
32499
+ "description": "The size of the list items.",
32500
+ "fieldName": "size"
32356
32501
  },
32357
32502
  {
32358
- "name": "min-height",
32503
+ "name": "disabled",
32359
32504
  "type": {
32360
- "text": "number"
32505
+ "text": "boolean"
32361
32506
  },
32362
- "default": "480",
32363
- "description": "The visible height (in CSS pixels) of the preview panel. Fixed rather\nthan measured, because a measured height would feed back into the\nscaled iframe's layout box and grow unbounded. With `fill` set, this\nbecomes a `min-height` floor instead of the height.",
32364
- "fieldName": "minHeight"
32507
+ "default": "false",
32508
+ "description": "Whether the priority list is disabled.",
32509
+ "fieldName": "disabled"
32365
32510
  },
32366
32511
  {
32367
- "name": "fill",
32512
+ "name": "required",
32368
32513
  "type": {
32369
32514
  "text": "boolean"
32370
32515
  },
32371
32516
  "default": "false",
32372
- "description": "Fills the panel's own column height instead of using a fixed\n`min-height` pixel height — for hosts (like zn-theme-editor) whose\nlayout already stretches the column to match a taller sibling.\n`zoom` is ignored when set: its oversize maths depends on a known\npixel height, which `fill` deliberately doesn't have.",
32373
- "fieldName": "fill"
32517
+ "description": "Ensures the form control has a value before allowing submission.",
32518
+ "fieldName": "required"
32374
32519
  },
32375
32520
  {
32376
- "name": "device",
32521
+ "name": "priority-start",
32377
32522
  "type": {
32378
- "text": "PreviewFrameDevice"
32523
+ "text": "number"
32379
32524
  },
32380
- "default": "'desktop'",
32381
- "description": "Constrains and centres the preview to a device width: `desktop` (100%),\n`tablet` (768px) or `mobile` (390px). The iframe element itself is\nnarrowed, so the embedded page's own media queries fire.",
32382
- "fieldName": "device"
32525
+ "default": "1",
32526
+ "description": "The starting priority number. Defaults to 1.",
32527
+ "fieldName": "priorityStart"
32383
32528
  },
32384
32529
  {
32385
- "name": "backdrop",
32530
+ "name": "formaction",
32386
32531
  "type": {
32387
- "text": "'dots' | 'panel'"
32532
+ "text": "string"
32388
32533
  },
32389
- "default": "'dots'",
32390
- "description": "Backdrop behind the stage: `dots` (default) is the canvas dot grid; `panel` is a plain `rgb(var(--zn-panel))` fill.",
32391
- "fieldName": "backdrop"
32534
+ "description": "When set, the associated form will be submitted with the given action URL whenever items are reordered.\nIf set to an empty string, the form will be submitted using its existing action.",
32535
+ "fieldName": "formAction"
32392
32536
  },
32393
32537
  {
32394
- "name": "interactive",
32538
+ "name": "order",
32395
32539
  "type": {
32396
- "text": "boolean"
32540
+ "text": "string"
32397
32541
  },
32398
- "default": "false",
32399
- "description": "Lets pointer input through to the embedded page. The preview is inert by\ndefault: clicks never reach the frame, so the previewed page can't be\nnavigated or submitted from inside the preview. Cross-origin content can't\nbe reached from here to cancel its own handlers, so this blocks pointer\ninput entirely — hover goes with it. Scrolling doesn't: an overflowing\npage is scrolled by the panel rather than by the frame (see _contentHeight).\n\nSet, the frame becomes a real viewport instead: it stays the panel's own\nheight and the embed scrolls itself, so there is one scrollbar rather than\na panel scrolling an oversized frame, and the embed's viewport-relative\nlayout (`100vh`, `position: fixed`, sticky headers) sizes to what's on\nscreen. _contentHeight is ignored while this is set.",
32400
- "fieldName": "interactive"
32542
+ "default": "''",
32543
+ "description": "A comma-separated list of item keys defining the initial display order.\nKeys must match the `value` attributes on slotted children.\nAny slotted items not listed are appended at the end in DOM order.",
32544
+ "fieldName": "order"
32401
32545
  }
32402
32546
  ],
32403
32547
  "superclass": {
32404
32548
  "name": "ZincElement",
32405
32549
  "module": "/src/internal/zinc-element"
32406
32550
  },
32407
- "summary": "Embeds a live preview iframe and drives the hp-preview postMessage\nprotocol: answers the frame's ready handshake with a config payload fetched\nfrom data-uri, auto-saves watched forms on change, refreshes the preview\nafter each save (its own, or a shell-driven save of a `refresh-on` form),\naccepts a theme payload via setTheme() that is retained and replayed\nafter every ready handshake, and grows the frame to a content height the\nembed reports so the panel scrolls an overflowing page.",
32408
- "tagNameWithoutPrefix": "preview-frame",
32409
- "tagName": "zn-preview-frame",
32551
+ "summary": "A reorderable list where each item receives a numerical priority based on its position. Supports drag-and-drop\nand keyboard reordering. Priority values are submitted as form data via hidden inputs.",
32552
+ "tagNameWithoutPrefix": "priority-list",
32553
+ "tagName": "zn-priority-list",
32410
32554
  "customElement": true,
32411
- "jsDoc": "/**\n * @summary Embeds a live preview iframe and drives the hp-preview postMessage\n * protocol: answers the frame's ready handshake with a config payload fetched\n * from data-uri, auto-saves watched forms on change, refreshes the preview\n * after each save (its own, or a shell-driven save of a `refresh-on` form),\n * accepts a theme payload via setTheme() that is retained and replayed\n * after every ready handshake, and grows the frame to a content height the\n * embed reports so the panel scrolls an overflowing page.\n *\n * @documentation https://zinc.style/components/preview-frame\n * @status experimental\n * @since 1.0\n *\n * @event zn-error - Emitted when the preview reports a render error or a save fails.\n *\n * @csspart base - The component's base wrapper.\n * @csspart stage - The device-width wrapper around the iframe.\n * @csspart iframe - The preview iframe.\n * @csspart error - The error overlay.\n *\n * @cssproperty --zn-preview-frame-dot-spacing - Spacing of the backdrop dot grid (`backdrop=\"dots\"`). Defaults to 20px.\n * @cssproperty --zn-preview-frame-dot-opacity - Opacity of the backdrop dots (`backdrop=\"dots\"`). Defaults to 0.08.\n */",
32412
- "documentation": "https://zinc.style/components/preview-frame",
32555
+ "jsDoc": "/**\n * @summary A reorderable list where each item receives a numerical priority based on its position. Supports drag-and-drop\n * and keyboard reordering. Priority values are submitted as form data via hidden inputs.\n *\n * @documentation https://zinc.style/components/priority-list\n * @status experimental\n * @since 1.0\n *\n * @dependency zn-icon\n *\n * @slot - The default slot where list items are placed. Each slotted element must have a `value` attribute that\n * uniquely identifies the item. The component automatically assigns slot names to project each item into the\n * correct position. The item's position in the list determines its priority (top = `priority-start`, incrementing).\n * @slot label - The component's label. Required for proper accessibility. Alternatively, use the `label` attribute.\n * @slot label-tooltip - Used to add text displayed in a tooltip next to the label.\n * @slot help-text - Text that describes how to use the component. Alternatively, use the `help-text` attribute.\n *\n * @event zn-change - Emitted when the order of items changes.\n * @event zn-reorder - Emitted when items are reordered. Call `getPriorityMap()` on the component to get\n * the updated `{ key: string, priority: number }[]` array.\n *\n * @csspart form-control - The form control wrapper.\n * @csspart form-control-label - The label wrapper.\n * @csspart form-control-input - The input area wrapper.\n * @csspart form-control-help-text - The help text wrapper.\n * @csspart list - The list container.\n * @csspart item - An individual list item row.\n * @csspart drag-handle - The drag handle icon.\n * @csspart priority - The priority number badge.\n * @csspart content - The content area of an item.\n *\n * @cssproperty --zn-priority-list-item-gap - The gap between list items. Defaults to `var(--zn-spacing-2x-small)`.\n * @cssproperty --zn-priority-list-item-padding - The padding inside each item. Defaults to `var(--zn-spacing-small) var(--zn-spacing-medium)`.\n * @cssproperty --zn-priority-list-actions-gap - The gap between an item's slotted actions. Defaults to `var(--zn-spacing-x-small)`.\n * @cssproperty --zn-priority-list-handle-color - The color of the drag handle. Defaults to `var(--zn-color-neutral-500)`.\n * @cssproperty --zn-priority-list-priority-color - The color of the priority number. Defaults to `var(--zn-color-neutral-600)`.\n */",
32556
+ "documentation": "https://zinc.style/components/priority-list",
32413
32557
  "status": "experimental",
32414
- "since": "1.0"
32558
+ "since": "1.0",
32559
+ "dependencies": [
32560
+ "zn-icon"
32561
+ ]
32415
32562
  }
32416
32563
  ],
32417
32564
  "exports": [
@@ -32419,651 +32566,542 @@
32419
32566
  "kind": "js",
32420
32567
  "name": "default",
32421
32568
  "declaration": {
32422
- "name": "ZnPreviewFrame",
32423
- "module": "components/preview-frame/preview-frame.js"
32569
+ "name": "ZnPriorityList",
32570
+ "module": "components/priority-list/priority-list.js"
32424
32571
  }
32425
32572
  }
32426
32573
  ]
32427
32574
  },
32428
32575
  {
32429
32576
  "kind": "javascript-module",
32430
- "path": "components/priority-list/priority-list.js",
32577
+ "path": "components/popup/popup.js",
32431
32578
  "declarations": [
32432
32579
  {
32433
32580
  "kind": "class",
32434
32581
  "description": "",
32435
- "name": "ZnPriorityList",
32582
+ "name": "ZnPopup",
32436
32583
  "cssProperties": [
32437
32584
  {
32438
- "description": "The gap between list items. Defaults to `var(--zn-spacing-2x-small)`.",
32439
- "name": "--zn-priority-list-item-gap"
32440
- },
32441
- {
32442
- "description": "The padding inside each item. Defaults to `var(--zn-spacing-small) var(--zn-spacing-medium)`.",
32443
- "name": "--zn-priority-list-item-padding"
32444
- },
32445
- {
32446
- "description": "The gap between an item's slotted actions. Defaults to `var(--zn-spacing-x-small)`.",
32447
- "name": "--zn-priority-list-actions-gap"
32448
- },
32449
- {
32450
- "description": "The color of the drag handle. Defaults to `var(--zn-color-neutral-500)`.",
32451
- "name": "--zn-priority-list-handle-color"
32452
- },
32453
- {
32454
- "description": "The color of the priority number. Defaults to `var(--zn-color-neutral-600)`.",
32455
- "name": "--zn-priority-list-priority-color"
32585
+ "description": "An example CSS custom property.",
32586
+ "name": "--example"
32456
32587
  }
32457
32588
  ],
32458
32589
  "cssParts": [
32459
32590
  {
32460
- "description": "The form control wrapper.",
32461
- "name": "form-control"
32462
- },
32463
- {
32464
- "description": "The label wrapper.",
32465
- "name": "form-control-label"
32466
- },
32467
- {
32468
- "description": "The input area wrapper.",
32469
- "name": "form-control-input"
32470
- },
32471
- {
32472
- "description": "The help text wrapper.",
32473
- "name": "form-control-help-text"
32474
- },
32475
- {
32476
- "description": "The list container.",
32477
- "name": "list"
32478
- },
32479
- {
32480
- "description": "An individual list item row.",
32481
- "name": "item"
32482
- },
32483
- {
32484
- "description": "The drag handle icon.",
32485
- "name": "drag-handle"
32486
- },
32487
- {
32488
- "description": "The priority number badge.",
32489
- "name": "priority"
32490
- },
32491
- {
32492
- "description": "The content area of an item.",
32493
- "name": "content"
32591
+ "description": "The component's base wrapper.",
32592
+ "name": "base"
32494
32593
  }
32495
32594
  ],
32496
32595
  "slots": [
32497
32596
  {
32498
- "description": "The default slot where list items are placed. Each slotted element must have a `value` attribute that uniquely identifies the item. The component automatically assigns slot names to project each item into the correct position. The item's position in the list determines its priority (top = `priority-start`, incrementing).",
32597
+ "description": "The default slot.",
32499
32598
  "name": ""
32500
32599
  },
32501
32600
  {
32502
- "description": "The component's label. Required for proper accessibility. Alternatively, use the `label` attribute.",
32503
- "name": "label"
32601
+ "description": "An example slot.",
32602
+ "name": "example"
32603
+ }
32604
+ ],
32605
+ "members": [
32606
+ {
32607
+ "kind": "field",
32608
+ "name": "anchorEl",
32609
+ "type": {
32610
+ "text": "Element | VirtualElement | null"
32611
+ },
32612
+ "privacy": "private"
32504
32613
  },
32505
32614
  {
32506
- "description": "Used to add text displayed in a tooltip next to the label.",
32507
- "name": "label-tooltip"
32615
+ "kind": "field",
32616
+ "name": "cleanup",
32617
+ "type": {
32618
+ "text": "ReturnType<typeof autoUpdate> | undefined"
32619
+ },
32620
+ "privacy": "private"
32508
32621
  },
32509
32622
  {
32510
- "description": "Text that describes how to use the component. Alternatively, use the `help-text` attribute.",
32511
- "name": "help-text"
32512
- }
32513
- ],
32514
- "members": [
32623
+ "kind": "field",
32624
+ "name": "popup",
32625
+ "type": {
32626
+ "text": "HTMLElement"
32627
+ },
32628
+ "description": "A reference to the internal popup container. Useful for animating and styling the popup with JavaScript."
32629
+ },
32515
32630
  {
32516
32631
  "kind": "field",
32517
- "name": "dependencies",
32632
+ "name": "arrowEl",
32518
32633
  "type": {
32519
- "text": "object"
32634
+ "text": "HTMLElement"
32520
32635
  },
32521
- "static": true,
32522
- "default": "{ 'zn-icon': ZnIcon, }"
32636
+ "privacy": "private"
32523
32637
  },
32524
32638
  {
32525
32639
  "kind": "field",
32526
- "name": "formControlController",
32527
- "privacy": "protected",
32528
- "readonly": true,
32529
- "default": "new FormControlController(this, { value: (control: ZnPriorityList) => { return JSON.stringify(control.getPriorityMap()); }, defaultValue: (control: ZnPriorityList) => control.defaultValue, // A form reset passes defaultValue straight back in, so this has to accept the // key array as well as the serialised value other callers set. setValue: (control: ZnPriorityList, value: string | string[]) => { if (!value || (Array.isArray(value) && value.length === 0)) return; const keys: unknown = Array.isArray(value) ? value : safeParse(value); if (Array.isArray(keys) && keys.every((item: unknown): item is string => typeof item === 'string')) { control.value = keys as string[]; } }, })"
32640
+ "name": "anchor",
32641
+ "type": {
32642
+ "text": "Element | string | VirtualElement"
32643
+ },
32644
+ "description": "The element the popup will be anchored to. If the anchor lives outside of the popup, you can provide the anchor\nelement `id`, a DOM element reference, or a `VirtualElement`. If the anchor lives inside the popup, use the\n`anchor` slot instead.",
32645
+ "attribute": "anchor"
32530
32646
  },
32531
32647
  {
32532
32648
  "kind": "field",
32533
- "name": "hasSlotController",
32534
- "privacy": "private",
32535
- "readonly": true,
32536
- "default": "new HasSlotController(this, 'help-text', 'label')"
32649
+ "name": "active",
32650
+ "type": {
32651
+ "text": "boolean"
32652
+ },
32653
+ "default": "false",
32654
+ "description": "Activates the positioning logic and shows the popup. When this attribute is removed, the positioning logic is torn\ndown and the popup will be hidden.",
32655
+ "attribute": "active",
32656
+ "reflects": true
32537
32657
  },
32538
32658
  {
32539
32659
  "kind": "field",
32540
- "name": "hiddenInputsContainer",
32660
+ "name": "placement",
32541
32661
  "type": {
32542
- "text": "HTMLDivElement"
32543
- }
32662
+ "text": "| 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'left'\n | 'left-start'\n | 'left-end'"
32663
+ },
32664
+ "default": "'top'",
32665
+ "description": "The preferred placement of the popup. Note that the actual placement will vary as configured to keep the\npanel inside of the viewport.",
32666
+ "attribute": "placement",
32667
+ "reflects": true
32544
32668
  },
32545
32669
  {
32546
32670
  "kind": "field",
32547
- "name": "name",
32671
+ "name": "strategy",
32548
32672
  "type": {
32549
- "text": "string"
32673
+ "text": "'absolute' | 'fixed'"
32550
32674
  },
32551
- "default": "''",
32552
- "description": "The name prefix for form submission. Each item generates a hidden input named `{name}[{itemValue}]`\nwith the priority number as its value.",
32553
- "attribute": "name"
32675
+ "default": "'fixed'",
32676
+ "description": "Determines how the popup is positioned. The `absolute` strategy works well in most cases, but if overflow is\nclipped, using a `fixed` position strategy can often workaround it.",
32677
+ "attribute": "strategy",
32678
+ "reflects": true
32554
32679
  },
32555
32680
  {
32556
32681
  "kind": "field",
32557
- "name": "value",
32682
+ "name": "distance",
32558
32683
  "type": {
32559
- "text": "string[]"
32684
+ "text": "number"
32560
32685
  },
32561
- "description": "The current ordered list of item keys, reflecting the visual order. This is the source of truth for ordering.\nEach entry should match a `value` attribute on a slotted child element.",
32562
- "attribute": "value"
32686
+ "default": "0",
32687
+ "description": "The distance in pixels from which to offset the panel away from its anchor.",
32688
+ "attribute": "distance"
32563
32689
  },
32564
32690
  {
32565
32691
  "kind": "field",
32566
- "name": "_value",
32692
+ "name": "skidding",
32567
32693
  "type": {
32568
- "text": "string[]"
32694
+ "text": "number"
32569
32695
  },
32570
- "privacy": "private",
32571
- "default": "[]"
32696
+ "default": "0",
32697
+ "description": "The distance in pixels from which to offset the panel along its anchor.",
32698
+ "attribute": "skidding"
32572
32699
  },
32573
32700
  {
32574
32701
  "kind": "field",
32575
- "name": "defaultValue",
32702
+ "name": "arrow",
32576
32703
  "type": {
32577
- "text": "string[]"
32704
+ "text": "boolean"
32578
32705
  },
32579
- "default": "[]"
32706
+ "default": "false",
32707
+ "description": "Attaches an arrow to the popup. The arrow's size and color can be customized using the `--arrow-size` and\n`--arrow-color` custom properties. For additional customizations, you can also target the arrow using\n`::part(arrow)` in your stylesheet.",
32708
+ "attribute": "arrow"
32580
32709
  },
32581
32710
  {
32582
32711
  "kind": "field",
32583
- "name": "label",
32712
+ "name": "arrowPlacement",
32584
32713
  "type": {
32585
- "text": "string"
32714
+ "text": "'start' | 'end' | 'center' | 'anchor'"
32586
32715
  },
32587
- "default": "''",
32588
- "description": "The component's label. Required for proper accessibility.",
32589
- "attribute": "label"
32716
+ "default": "'anchor'",
32717
+ "description": "The placement of the arrow. The default is `anchor`, which will align the arrow as close to the center of the\nanchor as possible, considering available space and `arrow-padding`. A value of `start`, `end`, or `center` will\nalign the arrow to the start, end, or center of the popover instead.",
32718
+ "attribute": "arrow-placement"
32590
32719
  },
32591
32720
  {
32592
32721
  "kind": "field",
32593
- "name": "labelTooltip",
32722
+ "name": "arrowPadding",
32594
32723
  "type": {
32595
- "text": "string"
32724
+ "text": "number"
32596
32725
  },
32597
- "default": "''",
32598
- "description": "Text that appears in a tooltip next to the label.",
32599
- "attribute": "label-tooltip"
32726
+ "default": "10",
32727
+ "description": "The amount of padding between the arrow and the edges of the popup. If the popup has a border-radius, for example,\nthis will prevent it from overflowing the corners.",
32728
+ "attribute": "arrow-padding"
32600
32729
  },
32601
32730
  {
32602
32731
  "kind": "field",
32603
- "name": "helpText",
32732
+ "name": "flip",
32604
32733
  "type": {
32605
- "text": "string"
32734
+ "text": "boolean"
32606
32735
  },
32607
- "default": "''",
32608
- "description": "Help text that describes how to use the component.",
32609
- "attribute": "help-text"
32736
+ "default": "false",
32737
+ "description": "When set, placement of the popup will flip to the opposite site to keep it in view. You can use\n`flipFallbackPlacements` to further configure how the fallback placement is determined.",
32738
+ "attribute": "flip"
32610
32739
  },
32611
32740
  {
32612
32741
  "kind": "field",
32613
- "name": "form",
32742
+ "name": "flipFallbackPlacements",
32614
32743
  "type": {
32615
32744
  "text": "string"
32616
32745
  },
32617
32746
  "default": "''",
32618
- "description": "Associates the control with a form by id. The form must be in the same document or shadow root.",
32619
- "attribute": "form",
32620
- "reflects": true
32747
+ "description": "If the preferred placement doesn't fit, popup will be tested in these fallback placements until one fits. Must be a\nstring of any number of placements separated by a space, e.g. \"top bottom left\". If no placement fits, the flip\nfallback strategy will be used instead.",
32748
+ "attribute": "flip-fallback-placements"
32621
32749
  },
32622
32750
  {
32623
32751
  "kind": "field",
32624
- "name": "size",
32752
+ "name": "flipFallbackStrategy",
32625
32753
  "type": {
32626
- "text": "'small' | 'medium' | 'large'"
32754
+ "text": "'best-fit' | 'initial'"
32627
32755
  },
32628
- "default": "'medium'",
32629
- "description": "The size of the list items.",
32630
- "attribute": "size",
32631
- "reflects": true
32756
+ "default": "'best-fit'",
32757
+ "description": "When neither the preferred placement nor the fallback placements fit, this value will be used to determine whether\nthe popup should be positioned using the best available fit based on available space or as it was initially\npreferred.",
32758
+ "attribute": "flip-fallback-strategy"
32632
32759
  },
32633
32760
  {
32634
32761
  "kind": "field",
32635
- "name": "disabled",
32762
+ "name": "flipBoundary",
32636
32763
  "type": {
32637
- "text": "boolean"
32764
+ "text": "Element | Element[]"
32638
32765
  },
32639
- "default": "false",
32640
- "description": "Whether the priority list is disabled.",
32641
- "attribute": "disabled",
32642
- "reflects": true
32766
+ "description": "The flip boundary describes clipping element(s) that overflow will be checked relative to when flipping. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
32767
+ "attribute": "flipBoundary"
32643
32768
  },
32644
32769
  {
32645
32770
  "kind": "field",
32646
- "name": "required",
32771
+ "name": "flipPadding",
32647
32772
  "type": {
32648
- "text": "boolean"
32773
+ "text": "number"
32649
32774
  },
32650
- "default": "false",
32651
- "description": "Ensures the form control has a value before allowing submission.",
32652
- "attribute": "required",
32653
- "reflects": true
32775
+ "default": "0",
32776
+ "description": "The amount of padding, in pixels, to exceed before the flip behavior will occur.",
32777
+ "attribute": "flip-padding"
32654
32778
  },
32655
32779
  {
32656
32780
  "kind": "field",
32657
- "name": "priorityStart",
32781
+ "name": "shift",
32658
32782
  "type": {
32659
- "text": "number"
32783
+ "text": "boolean"
32660
32784
  },
32661
- "default": "1",
32662
- "description": "The starting priority number. Defaults to 1.",
32663
- "attribute": "priority-start"
32785
+ "default": "false",
32786
+ "description": "Moves the popup along the axis to keep it in view when clipped.",
32787
+ "attribute": "shift"
32664
32788
  },
32665
32789
  {
32666
32790
  "kind": "field",
32667
- "name": "formAction",
32791
+ "name": "shiftBoundary",
32668
32792
  "type": {
32669
- "text": "string"
32793
+ "text": "Element | Element[]"
32670
32794
  },
32671
- "description": "When set, the associated form will be submitted with the given action URL whenever items are reordered.\nIf set to an empty string, the form will be submitted using its existing action.",
32672
- "attribute": "formaction"
32795
+ "description": "The shift boundary describes clipping element(s) that overflow will be checked relative to when shifting. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
32796
+ "attribute": "shiftBoundary"
32673
32797
  },
32674
32798
  {
32675
32799
  "kind": "field",
32676
- "name": "order",
32800
+ "name": "shiftPadding",
32677
32801
  "type": {
32678
- "text": "string"
32802
+ "text": "number"
32679
32803
  },
32680
- "default": "''",
32681
- "description": "A comma-separated list of item keys defining the initial display order.\nKeys must match the `value` attributes on slotted children.\nAny slotted items not listed are appended at the end in DOM order.",
32682
- "attribute": "order"
32804
+ "default": "0",
32805
+ "description": "The amount of padding, in pixels, to exceed before the shift behavior will occur.",
32806
+ "attribute": "shift-padding"
32683
32807
  },
32684
32808
  {
32685
32809
  "kind": "field",
32686
- "name": "draggedKey",
32810
+ "name": "autoSize",
32687
32811
  "type": {
32688
- "text": "string | null"
32812
+ "text": "'horizontal' | 'vertical' | 'both'"
32689
32813
  },
32690
- "privacy": "private",
32691
- "default": "null"
32814
+ "description": "When set, this will cause the popup to automatically resize itself to prevent it from overflowing.",
32815
+ "attribute": "auto-size"
32692
32816
  },
32693
32817
  {
32694
32818
  "kind": "field",
32695
- "name": "isDragging",
32819
+ "name": "sync",
32696
32820
  "type": {
32697
- "text": "boolean"
32821
+ "text": "'width' | 'height' | 'both'"
32698
32822
  },
32699
- "privacy": "private",
32700
- "default": "false"
32823
+ "description": "Syncs the popup's width or height to that of the anchor element.",
32824
+ "attribute": "sync"
32701
32825
  },
32702
32826
  {
32703
32827
  "kind": "field",
32704
- "name": "dragOverKey",
32828
+ "name": "autoSizeBoundary",
32705
32829
  "type": {
32706
- "text": "string | null"
32830
+ "text": "Element | Element[]"
32707
32831
  },
32708
- "privacy": "private",
32709
- "default": "null"
32832
+ "description": "The auto-size boundary describes clipping element(s) that overflow will be checked relative to when resizing. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
32833
+ "attribute": "autoSizeBoundary"
32710
32834
  },
32711
32835
  {
32712
32836
  "kind": "field",
32713
- "name": "validity",
32837
+ "name": "autoSizePadding",
32714
32838
  "type": {
32715
- "text": "ValidityState"
32839
+ "text": "number"
32716
32840
  },
32717
- "description": "Gets the validity state object.",
32718
- "readonly": true
32841
+ "default": "0",
32842
+ "description": "The amount of padding, in pixels, to exceed before the auto-size behavior will occur.",
32843
+ "attribute": "auto-size-padding"
32719
32844
  },
32720
32845
  {
32721
32846
  "kind": "field",
32722
- "name": "validationMessage",
32847
+ "name": "hoverBridge",
32723
32848
  "type": {
32724
- "text": "string"
32849
+ "text": "boolean"
32725
32850
  },
32726
- "description": "Gets the validation message.",
32727
- "readonly": true
32851
+ "default": "false",
32852
+ "description": "When a gap exists between the anchor and the popup element, this option will add a \"hover bridge\" that fills the\ngap using an invisible element. This makes listening for events such as `mouseenter` and `mouseleave` more sane\nbecause the pointer never technically leaves the element. The hover bridge will only be drawn when the popover is\nactive.",
32853
+ "attribute": "hover-bridge"
32728
32854
  },
32729
32855
  {
32730
32856
  "kind": "method",
32731
- "name": "_initializeOrderFromSlot",
32732
- "privacy": "private",
32733
- "description": "Initialize item order from slotted children if no explicit value was provided.\nIf an `order` attribute is set, use it to define the initial order,\nappending any slotted items not listed in the order at the end."
32857
+ "name": "handleAnchorChange",
32858
+ "privacy": "private"
32734
32859
  },
32735
32860
  {
32736
- "kind": "method",
32737
- "name": "_getSlottedItems",
32738
- "privacy": "private",
32739
- "return": {
32740
- "type": {
32741
- "text": "HTMLElement[]"
32742
- }
32743
- },
32744
- "description": "Gets all direct children with a `value` attribute (excluding those in reserved slots)."
32861
+ "kind": "field",
32862
+ "name": "handleAnchorHover",
32863
+ "privacy": "public"
32745
32864
  },
32746
32865
  {
32747
32866
  "kind": "method",
32748
- "name": "_assignSlotNames",
32749
- "privacy": "private",
32750
- "description": "Assigns `slot` attributes to light DOM children based on their `value` attribute,\nso they project into the correct named slot in the shadow DOM."
32867
+ "name": "start",
32868
+ "privacy": "private"
32751
32869
  },
32752
32870
  {
32753
32871
  "kind": "method",
32754
- "name": "getPriorityMap",
32872
+ "name": "stop",
32873
+ "privacy": "private",
32755
32874
  "return": {
32756
32875
  "type": {
32757
- "text": "PriorityItem[]"
32876
+ "text": "Promise<void>"
32758
32877
  }
32759
- },
32760
- "description": "Returns the priority map: an array of { key, priority } objects."
32761
- },
32762
- {
32763
- "kind": "method",
32764
- "name": "_syncHiddenInputs",
32765
- "privacy": "private",
32766
- "description": "Syncs hidden inputs so form data includes priority values."
32878
+ }
32767
32879
  },
32768
32880
  {
32769
32881
  "kind": "method",
32770
- "name": "_moveItem",
32771
- "privacy": "private",
32772
- "parameters": [
32773
- {
32774
- "name": "fromIndex",
32775
- "type": {
32776
- "text": "number"
32777
- }
32778
- },
32779
- {
32780
- "name": "toIndex",
32781
- "type": {
32782
- "text": "number"
32783
- }
32784
- }
32785
- ],
32786
- "description": "Moves an item from one index to another."
32882
+ "name": "reposition",
32883
+ "description": "Forces the popup to recalculate and reposition itself."
32787
32884
  },
32788
32885
  {
32789
- "kind": "method",
32790
- "name": "_submitForm",
32791
- "privacy": "private",
32792
- "description": "Submits the associated form if a `formaction` attribute is set."
32793
- },
32886
+ "kind": "field",
32887
+ "name": "updateHoverBridge",
32888
+ "privacy": "private"
32889
+ }
32890
+ ],
32891
+ "events": [
32794
32892
  {
32795
- "kind": "method",
32796
- "name": "_handleDragStart",
32797
- "privacy": "private",
32798
- "parameters": [
32799
- {
32800
- "name": "event",
32801
- "type": {
32802
- "text": "DragEvent"
32803
- }
32804
- },
32805
- {
32806
- "name": "key",
32807
- "type": {
32808
- "text": "string"
32809
- }
32810
- }
32811
- ]
32812
- },
32893
+ "description": "Emitted as an example.",
32894
+ "name": "zn-event-name"
32895
+ }
32896
+ ],
32897
+ "attributes": [
32813
32898
  {
32814
- "kind": "method",
32815
- "name": "_handleDragEnd",
32816
- "privacy": "private"
32899
+ "name": "anchor",
32900
+ "type": {
32901
+ "text": "Element | string | VirtualElement"
32902
+ },
32903
+ "description": "The element the popup will be anchored to. If the anchor lives outside of the popup, you can provide the anchor\nelement `id`, a DOM element reference, or a `VirtualElement`. If the anchor lives inside the popup, use the\n`anchor` slot instead.",
32904
+ "fieldName": "anchor"
32817
32905
  },
32818
32906
  {
32819
- "kind": "method",
32820
- "name": "_handleDragOver",
32821
- "privacy": "private",
32822
- "parameters": [
32823
- {
32824
- "name": "event",
32825
- "type": {
32826
- "text": "DragEvent"
32827
- }
32828
- },
32829
- {
32830
- "name": "key",
32831
- "type": {
32832
- "text": "string"
32833
- }
32834
- }
32835
- ]
32907
+ "name": "active",
32908
+ "type": {
32909
+ "text": "boolean"
32910
+ },
32911
+ "default": "false",
32912
+ "description": "Activates the positioning logic and shows the popup. When this attribute is removed, the positioning logic is torn\ndown and the popup will be hidden.",
32913
+ "fieldName": "active"
32836
32914
  },
32837
32915
  {
32838
- "kind": "method",
32839
- "name": "_handleDragLeave",
32840
- "privacy": "private",
32841
- "parameters": [
32842
- {
32843
- "name": "event",
32844
- "type": {
32845
- "text": "DragEvent"
32846
- }
32847
- },
32848
- {
32849
- "name": "key",
32850
- "type": {
32851
- "text": "string"
32852
- }
32853
- }
32854
- ]
32916
+ "name": "placement",
32917
+ "type": {
32918
+ "text": "| 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'left'\n | 'left-start'\n | 'left-end'"
32919
+ },
32920
+ "default": "'top'",
32921
+ "description": "The preferred placement of the popup. Note that the actual placement will vary as configured to keep the\npanel inside of the viewport.",
32922
+ "fieldName": "placement"
32855
32923
  },
32856
32924
  {
32857
- "kind": "method",
32858
- "name": "_handleDrop",
32859
- "privacy": "private",
32860
- "parameters": [
32861
- {
32862
- "name": "event",
32863
- "type": {
32864
- "text": "DragEvent"
32865
- }
32866
- }
32867
- ]
32925
+ "name": "strategy",
32926
+ "type": {
32927
+ "text": "'absolute' | 'fixed'"
32928
+ },
32929
+ "default": "'fixed'",
32930
+ "description": "Determines how the popup is positioned. The `absolute` strategy works well in most cases, but if overflow is\nclipped, using a `fixed` position strategy can often workaround it.",
32931
+ "fieldName": "strategy"
32868
32932
  },
32869
32933
  {
32870
- "kind": "method",
32871
- "name": "_handleKeyDown",
32872
- "privacy": "private",
32873
- "parameters": [
32874
- {
32875
- "name": "event",
32876
- "type": {
32877
- "text": "KeyboardEvent"
32878
- }
32879
- },
32880
- {
32881
- "name": "key",
32882
- "type": {
32883
- "text": "string"
32884
- }
32885
- }
32886
- ]
32934
+ "name": "distance",
32935
+ "type": {
32936
+ "text": "number"
32937
+ },
32938
+ "default": "0",
32939
+ "description": "The distance in pixels from which to offset the panel away from its anchor.",
32940
+ "fieldName": "distance"
32887
32941
  },
32888
32942
  {
32889
- "kind": "method",
32890
- "name": "_handleSlotChange",
32891
- "privacy": "private"
32943
+ "name": "skidding",
32944
+ "type": {
32945
+ "text": "number"
32946
+ },
32947
+ "default": "0",
32948
+ "description": "The distance in pixels from which to offset the panel along its anchor.",
32949
+ "fieldName": "skidding"
32892
32950
  },
32893
32951
  {
32894
- "kind": "method",
32895
- "name": "checkValidity",
32896
- "return": {
32897
- "type": {
32898
- "text": "boolean"
32899
- }
32952
+ "name": "arrow",
32953
+ "type": {
32954
+ "text": "boolean"
32900
32955
  },
32901
- "description": "Checks for validity but does not show a validation message."
32956
+ "default": "false",
32957
+ "description": "Attaches an arrow to the popup. The arrow's size and color can be customized using the `--arrow-size` and\n`--arrow-color` custom properties. For additional customizations, you can also target the arrow using\n`::part(arrow)` in your stylesheet.",
32958
+ "fieldName": "arrow"
32902
32959
  },
32903
32960
  {
32904
- "kind": "method",
32905
- "name": "getForm",
32906
- "return": {
32907
- "type": {
32908
- "text": "HTMLFormElement | null"
32909
- }
32961
+ "name": "arrow-placement",
32962
+ "type": {
32963
+ "text": "'start' | 'end' | 'center' | 'anchor'"
32910
32964
  },
32911
- "description": "Gets the associated form, if one exists."
32965
+ "default": "'anchor'",
32966
+ "description": "The placement of the arrow. The default is `anchor`, which will align the arrow as close to the center of the\nanchor as possible, considering available space and `arrow-padding`. A value of `start`, `end`, or `center` will\nalign the arrow to the start, end, or center of the popover instead.",
32967
+ "fieldName": "arrowPlacement"
32912
32968
  },
32913
32969
  {
32914
- "kind": "method",
32915
- "name": "reportValidity",
32916
- "return": {
32917
- "type": {
32918
- "text": "boolean"
32919
- }
32970
+ "name": "arrow-padding",
32971
+ "type": {
32972
+ "text": "number"
32920
32973
  },
32921
- "description": "Checks for validity and shows the browser's validation message if the control is invalid."
32974
+ "default": "10",
32975
+ "description": "The amount of padding between the arrow and the edges of the popup. If the popup has a border-radius, for example,\nthis will prevent it from overflowing the corners.",
32976
+ "fieldName": "arrowPadding"
32922
32977
  },
32923
32978
  {
32924
- "kind": "method",
32925
- "name": "setCustomValidity",
32926
- "parameters": [
32927
- {
32928
- "name": "_message",
32929
- "default": "''"
32930
- }
32931
- ],
32932
- "description": "Sets a custom validation message. Pass an empty string to restore validity."
32933
- }
32934
- ],
32935
- "events": [
32936
- {
32937
- "description": "Emitted when the order of items changes.",
32938
- "name": "zn-change"
32979
+ "name": "flip",
32980
+ "type": {
32981
+ "text": "boolean"
32982
+ },
32983
+ "default": "false",
32984
+ "description": "When set, placement of the popup will flip to the opposite site to keep it in view. You can use\n`flipFallbackPlacements` to further configure how the fallback placement is determined.",
32985
+ "fieldName": "flip"
32939
32986
  },
32940
32987
  {
32941
- "description": "Emitted when items are reordered. Call `getPriorityMap()` on the component to get the updated `{ key: string, priority: number }[]` array.",
32942
- "name": "zn-reorder"
32943
- }
32944
- ],
32945
- "attributes": [
32946
- {
32947
- "name": "name",
32988
+ "name": "flip-fallback-placements",
32948
32989
  "type": {
32949
32990
  "text": "string"
32950
32991
  },
32951
32992
  "default": "''",
32952
- "description": "The name prefix for form submission. Each item generates a hidden input named `{name}[{itemValue}]`\nwith the priority number as its value.",
32953
- "fieldName": "name"
32993
+ "description": "If the preferred placement doesn't fit, popup will be tested in these fallback placements until one fits. Must be a\nstring of any number of placements separated by a space, e.g. \"top bottom left\". If no placement fits, the flip\nfallback strategy will be used instead.",
32994
+ "fieldName": "flipFallbackPlacements"
32954
32995
  },
32955
32996
  {
32956
- "name": "value",
32997
+ "name": "flip-fallback-strategy",
32957
32998
  "type": {
32958
- "text": "string[]"
32999
+ "text": "'best-fit' | 'initial'"
32959
33000
  },
32960
- "description": "The current ordered list of item keys, reflecting the visual order. This is the source of truth for ordering.\nEach entry should match a `value` attribute on a slotted child element.",
32961
- "fieldName": "value"
33001
+ "default": "'best-fit'",
33002
+ "description": "When neither the preferred placement nor the fallback placements fit, this value will be used to determine whether\nthe popup should be positioned using the best available fit based on available space or as it was initially\npreferred.",
33003
+ "fieldName": "flipFallbackStrategy"
32962
33004
  },
32963
33005
  {
32964
- "name": "label",
33006
+ "name": "flipBoundary",
32965
33007
  "type": {
32966
- "text": "string"
33008
+ "text": "Element | Element[]"
32967
33009
  },
32968
- "default": "''",
32969
- "description": "The component's label. Required for proper accessibility.",
32970
- "fieldName": "label"
33010
+ "description": "The flip boundary describes clipping element(s) that overflow will be checked relative to when flipping. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
33011
+ "fieldName": "flipBoundary"
32971
33012
  },
32972
33013
  {
32973
- "name": "label-tooltip",
33014
+ "name": "flip-padding",
32974
33015
  "type": {
32975
- "text": "string"
33016
+ "text": "number"
32976
33017
  },
32977
- "default": "''",
32978
- "description": "Text that appears in a tooltip next to the label.",
32979
- "fieldName": "labelTooltip"
33018
+ "default": "0",
33019
+ "description": "The amount of padding, in pixels, to exceed before the flip behavior will occur.",
33020
+ "fieldName": "flipPadding"
32980
33021
  },
32981
33022
  {
32982
- "name": "help-text",
33023
+ "name": "shift",
32983
33024
  "type": {
32984
- "text": "string"
33025
+ "text": "boolean"
32985
33026
  },
32986
- "default": "''",
32987
- "description": "Help text that describes how to use the component.",
32988
- "fieldName": "helpText"
33027
+ "default": "false",
33028
+ "description": "Moves the popup along the axis to keep it in view when clipped.",
33029
+ "fieldName": "shift"
32989
33030
  },
32990
33031
  {
32991
- "name": "form",
33032
+ "name": "shiftBoundary",
32992
33033
  "type": {
32993
- "text": "string"
33034
+ "text": "Element | Element[]"
32994
33035
  },
32995
- "default": "''",
32996
- "description": "Associates the control with a form by id. The form must be in the same document or shadow root.",
32997
- "fieldName": "form"
33036
+ "description": "The shift boundary describes clipping element(s) that overflow will be checked relative to when shifting. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
33037
+ "fieldName": "shiftBoundary"
32998
33038
  },
32999
33039
  {
33000
- "name": "size",
33040
+ "name": "shift-padding",
33001
33041
  "type": {
33002
- "text": "'small' | 'medium' | 'large'"
33042
+ "text": "number"
33003
33043
  },
33004
- "default": "'medium'",
33005
- "description": "The size of the list items.",
33006
- "fieldName": "size"
33044
+ "default": "0",
33045
+ "description": "The amount of padding, in pixels, to exceed before the shift behavior will occur.",
33046
+ "fieldName": "shiftPadding"
33007
33047
  },
33008
33048
  {
33009
- "name": "disabled",
33049
+ "name": "auto-size",
33010
33050
  "type": {
33011
- "text": "boolean"
33051
+ "text": "'horizontal' | 'vertical' | 'both'"
33012
33052
  },
33013
- "default": "false",
33014
- "description": "Whether the priority list is disabled.",
33015
- "fieldName": "disabled"
33053
+ "description": "When set, this will cause the popup to automatically resize itself to prevent it from overflowing.",
33054
+ "fieldName": "autoSize"
33016
33055
  },
33017
33056
  {
33018
- "name": "required",
33057
+ "name": "sync",
33019
33058
  "type": {
33020
- "text": "boolean"
33059
+ "text": "'width' | 'height' | 'both'"
33021
33060
  },
33022
- "default": "false",
33023
- "description": "Ensures the form control has a value before allowing submission.",
33024
- "fieldName": "required"
33061
+ "description": "Syncs the popup's width or height to that of the anchor element.",
33062
+ "fieldName": "sync"
33025
33063
  },
33026
33064
  {
33027
- "name": "priority-start",
33065
+ "name": "autoSizeBoundary",
33028
33066
  "type": {
33029
- "text": "number"
33067
+ "text": "Element | Element[]"
33030
33068
  },
33031
- "default": "1",
33032
- "description": "The starting priority number. Defaults to 1.",
33033
- "fieldName": "priorityStart"
33069
+ "description": "The auto-size boundary describes clipping element(s) that overflow will be checked relative to when resizing. By\ndefault, the boundary includes overflow ancestors that will cause the element to be clipped. If needed, you can\nchange the boundary by passing a reference to one or more elements to this property.",
33070
+ "fieldName": "autoSizeBoundary"
33034
33071
  },
33035
33072
  {
33036
- "name": "formaction",
33073
+ "name": "auto-size-padding",
33037
33074
  "type": {
33038
- "text": "string"
33075
+ "text": "number"
33039
33076
  },
33040
- "description": "When set, the associated form will be submitted with the given action URL whenever items are reordered.\nIf set to an empty string, the form will be submitted using its existing action.",
33041
- "fieldName": "formAction"
33077
+ "default": "0",
33078
+ "description": "The amount of padding, in pixels, to exceed before the auto-size behavior will occur.",
33079
+ "fieldName": "autoSizePadding"
33042
33080
  },
33043
33081
  {
33044
- "name": "order",
33082
+ "name": "hover-bridge",
33045
33083
  "type": {
33046
- "text": "string"
33084
+ "text": "boolean"
33047
33085
  },
33048
- "default": "''",
33049
- "description": "A comma-separated list of item keys defining the initial display order.\nKeys must match the `value` attributes on slotted children.\nAny slotted items not listed are appended at the end in DOM order.",
33050
- "fieldName": "order"
33086
+ "default": "false",
33087
+ "description": "When a gap exists between the anchor and the popup element, this option will add a \"hover bridge\" that fills the\ngap using an invisible element. This makes listening for events such as `mouseenter` and `mouseleave` more sane\nbecause the pointer never technically leaves the element. The hover bridge will only be drawn when the popover is\nactive.",
33088
+ "fieldName": "hoverBridge"
33051
33089
  }
33052
33090
  ],
33053
33091
  "superclass": {
33054
33092
  "name": "ZincElement",
33055
33093
  "module": "/src/internal/zinc-element"
33056
33094
  },
33057
- "summary": "A reorderable list where each item receives a numerical priority based on its position. Supports drag-and-drop\nand keyboard reordering. Priority values are submitted as form data via hidden inputs.",
33058
- "tagNameWithoutPrefix": "priority-list",
33059
- "tagName": "zn-priority-list",
33095
+ "summary": "Short summary of the component's intended use.",
33096
+ "tagNameWithoutPrefix": "popup",
33097
+ "tagName": "zn-popup",
33060
33098
  "customElement": true,
33061
- "jsDoc": "/**\n * @summary A reorderable list where each item receives a numerical priority based on its position. Supports drag-and-drop\n * and keyboard reordering. Priority values are submitted as form data via hidden inputs.\n *\n * @documentation https://zinc.style/components/priority-list\n * @status experimental\n * @since 1.0\n *\n * @dependency zn-icon\n *\n * @slot - The default slot where list items are placed. Each slotted element must have a `value` attribute that\n * uniquely identifies the item. The component automatically assigns slot names to project each item into the\n * correct position. The item's position in the list determines its priority (top = `priority-start`, incrementing).\n * @slot label - The component's label. Required for proper accessibility. Alternatively, use the `label` attribute.\n * @slot label-tooltip - Used to add text displayed in a tooltip next to the label.\n * @slot help-text - Text that describes how to use the component. Alternatively, use the `help-text` attribute.\n *\n * @event zn-change - Emitted when the order of items changes.\n * @event zn-reorder - Emitted when items are reordered. Call `getPriorityMap()` on the component to get\n * the updated `{ key: string, priority: number }[]` array.\n *\n * @csspart form-control - The form control wrapper.\n * @csspart form-control-label - The label wrapper.\n * @csspart form-control-input - The input area wrapper.\n * @csspart form-control-help-text - The help text wrapper.\n * @csspart list - The list container.\n * @csspart item - An individual list item row.\n * @csspart drag-handle - The drag handle icon.\n * @csspart priority - The priority number badge.\n * @csspart content - The content area of an item.\n *\n * @cssproperty --zn-priority-list-item-gap - The gap between list items. Defaults to `var(--zn-spacing-2x-small)`.\n * @cssproperty --zn-priority-list-item-padding - The padding inside each item. Defaults to `var(--zn-spacing-small) var(--zn-spacing-medium)`.\n * @cssproperty --zn-priority-list-actions-gap - The gap between an item's slotted actions. Defaults to `var(--zn-spacing-x-small)`.\n * @cssproperty --zn-priority-list-handle-color - The color of the drag handle. Defaults to `var(--zn-color-neutral-500)`.\n * @cssproperty --zn-priority-list-priority-color - The color of the priority number. Defaults to `var(--zn-color-neutral-600)`.\n */",
33062
- "documentation": "https://zinc.style/components/priority-list",
33099
+ "jsDoc": "/**\n * @summary Short summary of the component's intended use.\n * @documentation https://zinc.style/components/popup\n * @status experimental\n * @since 1.0\n *\n * @dependency zn-example\n *\n * @event zn-event-name - Emitted as an example.\n *\n * @slot - The default slot.\n * @slot example - An example slot.\n *\n * @csspart base - The component's base wrapper.\n *\n * @cssproperty --example - An example CSS custom property.\n */",
33100
+ "documentation": "https://zinc.style/components/popup",
33063
33101
  "status": "experimental",
33064
33102
  "since": "1.0",
33065
33103
  "dependencies": [
33066
- "zn-icon"
33104
+ "zn-example"
33067
33105
  ]
33068
33106
  }
33069
33107
  ],
@@ -33072,8 +33110,8 @@
33072
33110
  "kind": "js",
33073
33111
  "name": "default",
33074
33112
  "declaration": {
33075
- "name": "ZnPriorityList",
33076
- "module": "components/priority-list/priority-list.js"
33113
+ "name": "ZnPopup",
33114
+ "module": "components/popup/popup.js"
33077
33115
  }
33078
33116
  }
33079
33117
  ]
@@ -40205,6 +40243,16 @@
40205
40243
  "default": "\"\"",
40206
40244
  "attribute": "conditional"
40207
40245
  },
40246
+ {
40247
+ "kind": "field",
40248
+ "name": "requires",
40249
+ "type": {
40250
+ "text": "string"
40251
+ },
40252
+ "default": "\"\"",
40253
+ "description": "Ids or names of controls that must have a value before this one becomes\nusable, comma separated. The control stays disabled until every one of them\nis filled, and is disabled again if any is cleared.",
40254
+ "attribute": "requires"
40255
+ },
40208
40256
  {
40209
40257
  "kind": "field",
40210
40258
  "name": "dataUri",
@@ -41129,6 +41177,15 @@
41129
41177
  "default": "\"\"",
41130
41178
  "fieldName": "conditional"
41131
41179
  },
41180
+ {
41181
+ "name": "requires",
41182
+ "type": {
41183
+ "text": "string"
41184
+ },
41185
+ "default": "\"\"",
41186
+ "description": "Ids or names of controls that must have a value before this one becomes\nusable, comma separated. The control stays disabled until every one of them\nis filled, and is disabled again if any is cleared.",
41187
+ "fieldName": "requires"
41188
+ },
41132
41189
  {
41133
41190
  "name": "data-uri",
41134
41191
  "type": {
@@ -52948,7 +53005,7 @@
52948
53005
  "package": {
52949
53006
  "name": "@kubex/zinc",
52950
53007
  "description": "A collection of web components for building web applications based off of @shoelace-style/Shoelace",
52951
- "version": "1.1.134",
53008
+ "version": "1.1.135",
52952
53009
  "author": "",
52953
53010
  "license": "MIT"
52954
53011
  }