@kubex/zinc 1.1.117 → 1.1.119

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,6 +56,79 @@
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
+ },
59
132
  {
60
133
  "kind": "javascript-module",
61
134
  "path": "components/alert/alert.js",
@@ -250,79 +323,6 @@
250
323
  }
251
324
  ]
252
325
  },
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",
@@ -842,269 +842,6 @@
842
842
  }
843
843
  ]
844
844
  },
845
- {
846
- "kind": "javascript-module",
847
- "path": "components/background/background.js",
848
- "declarations": [
849
- {
850
- "kind": "class",
851
- "description": "",
852
- "name": "ZnBackground",
853
- "cssProperties": [
854
- {
855
- "description": "Fallback colour when the `color` attribute is not set.",
856
- "name": "--zn-background-color"
857
- },
858
- {
859
- "description": "Position of the background image. Defaults to `center`.",
860
- "name": "--zn-background-image-position"
861
- },
862
- {
863
- "description": "Direction of the overlay gradient. Defaults to `110deg`.",
864
- "name": "--zn-background-overlay-angle"
865
- },
866
- {
867
- "description": "Colour of the floating icons. Defaults to `currentColor`.",
868
- "name": "--zn-background-floating-icon-color"
869
- }
870
- ],
871
- "cssParts": [
872
- {
873
- "description": "The component's full-size background canvas.",
874
- "name": "base"
875
- },
876
- {
877
- "description": "The decorative background image.",
878
- "name": "image"
879
- },
880
- {
881
- "description": "The contrast overlay between the image and content.",
882
- "name": "overlay"
883
- },
884
- {
885
- "description": "The non-interactive layer containing the floating icons.",
886
- "name": "floating-icons"
887
- },
888
- {
889
- "description": "Each floating `zn-icon`.",
890
- "name": "floating-icon"
891
- },
892
- {
893
- "description": "The wrapper around the default slot.",
894
- "name": "content"
895
- }
896
- ],
897
- "slots": [
898
- {
899
- "description": "Content displayed above the background layers.",
900
- "name": ""
901
- }
902
- ],
903
- "members": [
904
- {
905
- "kind": "field",
906
- "name": "dependencies",
907
- "type": {
908
- "text": "object"
909
- },
910
- "static": true,
911
- "default": "{'zn-icon': ZnIcon}"
912
- },
913
- {
914
- "kind": "field",
915
- "name": "resizeObserver",
916
- "privacy": "private",
917
- "readonly": true,
918
- "default": "new ResizeController<number>(this, { callback: entries => { const width = entries[0]?.contentRect.width ?? this.offsetWidth; return Math.max(1, Math.min(width * 0.05, 150)); }, })"
919
- },
920
- {
921
- "kind": "field",
922
- "name": "image",
923
- "type": {
924
- "text": "string"
925
- },
926
- "default": "''",
927
- "description": "URL of the decorative background image.",
928
- "attribute": "image"
929
- },
930
- {
931
- "kind": "field",
932
- "name": "color",
933
- "type": {
934
- "text": "string"
935
- },
936
- "default": "''",
937
- "description": "CSS colour painted beneath the image.",
938
- "attribute": "color"
939
- },
940
- {
941
- "kind": "field",
942
- "name": "imageStrength",
943
- "type": {
944
- "text": "BackgroundImageStrength"
945
- },
946
- "default": "'full'",
947
- "description": "Visibility of the image: `soft` (30%), `medium` (62%) or `full` (100%).",
948
- "attribute": "image-strength",
949
- "reflects": true
950
- },
951
- {
952
- "kind": "field",
953
- "name": "motion",
954
- "type": {
955
- "text": "BackgroundMotion"
956
- },
957
- "default": "'none'",
958
- "description": "Subtle animation applied to the image. Motion stops when reduced motion is requested.",
959
- "attribute": "motion",
960
- "reflects": true
961
- },
962
- {
963
- "kind": "field",
964
- "name": "overlay",
965
- "type": {
966
- "text": "BackgroundOverlay"
967
- },
968
- "default": "'soft'",
969
- "description": "Strength of the contrast gradient above the image.",
970
- "attribute": "overlay",
971
- "reflects": true
972
- },
973
- {
974
- "kind": "field",
975
- "name": "overlayTone",
976
- "type": {
977
- "text": "BackgroundOverlayTone"
978
- },
979
- "default": "'light'",
980
- "description": "Whether the overlay uses a light or dark contrast treatment.",
981
- "attribute": "overlay-tone",
982
- "reflects": true
983
- },
984
- {
985
- "kind": "field",
986
- "name": "floatingIcons",
987
- "type": {
988
- "text": "string"
989
- },
990
- "default": "''",
991
- "description": "Comma-separated Zinc icon names placed as ambient decoration. At most eight are rendered.",
992
- "attribute": "floating-icons"
993
- },
994
- {
995
- "kind": "field",
996
- "name": "paused",
997
- "type": {
998
- "text": "boolean"
999
- },
1000
- "default": "false",
1001
- "description": "Pauses background motion without changing the selected motion treatment.",
1002
- "attribute": "paused",
1003
- "reflects": true
1004
- }
1005
- ],
1006
- "attributes": [
1007
- {
1008
- "name": "image",
1009
- "type": {
1010
- "text": "string"
1011
- },
1012
- "default": "''",
1013
- "description": "URL of the decorative background image.",
1014
- "fieldName": "image"
1015
- },
1016
- {
1017
- "name": "color",
1018
- "type": {
1019
- "text": "string"
1020
- },
1021
- "default": "''",
1022
- "description": "CSS colour painted beneath the image.",
1023
- "fieldName": "color"
1024
- },
1025
- {
1026
- "name": "image-strength",
1027
- "type": {
1028
- "text": "BackgroundImageStrength"
1029
- },
1030
- "default": "'full'",
1031
- "description": "Visibility of the image: `soft` (30%), `medium` (62%) or `full` (100%).",
1032
- "fieldName": "imageStrength"
1033
- },
1034
- {
1035
- "name": "motion",
1036
- "type": {
1037
- "text": "BackgroundMotion"
1038
- },
1039
- "default": "'none'",
1040
- "description": "Subtle animation applied to the image. Motion stops when reduced motion is requested.",
1041
- "fieldName": "motion"
1042
- },
1043
- {
1044
- "name": "overlay",
1045
- "type": {
1046
- "text": "BackgroundOverlay"
1047
- },
1048
- "default": "'soft'",
1049
- "description": "Strength of the contrast gradient above the image.",
1050
- "fieldName": "overlay"
1051
- },
1052
- {
1053
- "name": "overlay-tone",
1054
- "type": {
1055
- "text": "BackgroundOverlayTone"
1056
- },
1057
- "default": "'light'",
1058
- "description": "Whether the overlay uses a light or dark contrast treatment.",
1059
- "fieldName": "overlayTone"
1060
- },
1061
- {
1062
- "name": "floating-icons",
1063
- "type": {
1064
- "text": "string"
1065
- },
1066
- "default": "''",
1067
- "description": "Comma-separated Zinc icon names placed as ambient decoration. At most eight are rendered.",
1068
- "fieldName": "floatingIcons"
1069
- },
1070
- {
1071
- "name": "paused",
1072
- "type": {
1073
- "text": "boolean"
1074
- },
1075
- "default": "false",
1076
- "description": "Pauses background motion without changing the selected motion treatment.",
1077
- "fieldName": "paused"
1078
- }
1079
- ],
1080
- "superclass": {
1081
- "name": "ZincElement",
1082
- "module": "/src/internal/zinc-element"
1083
- },
1084
- "summary": "Composes a colour, decorative image, image strength, optional motion and contrast overlay behind slotted content.",
1085
- "tagNameWithoutPrefix": "background",
1086
- "tagName": "zn-background",
1087
- "customElement": true,
1088
- "jsDoc": "/**\n * @summary Composes a colour, decorative image, image strength, optional motion and contrast overlay behind slotted content.\n *\n * @documentation https://zinc.style/components/background\n * @status experimental\n * @since 1.0\n *\n * @dependency zn-icon\n *\n * @slot - Content displayed above the background layers.\n *\n * @csspart base - The component's full-size background canvas.\n * @csspart image - The decorative background image.\n * @csspart overlay - The contrast overlay between the image and content.\n * @csspart floating-icons - The non-interactive layer containing the floating icons.\n * @csspart floating-icon - Each floating `zn-icon`.\n * @csspart content - The wrapper around the default slot.\n *\n * @cssproperty --zn-background-color - Fallback colour when the `color` attribute is not set.\n * @cssproperty --zn-background-image-position - Position of the background image. Defaults to `center`.\n * @cssproperty --zn-background-overlay-angle - Direction of the overlay gradient. Defaults to `110deg`.\n * @cssproperty --zn-background-floating-icon-color - Colour of the floating icons. Defaults to `currentColor`.\n */",
1089
- "documentation": "https://zinc.style/components/background",
1090
- "status": "experimental",
1091
- "since": "1.0",
1092
- "dependencies": [
1093
- "zn-icon"
1094
- ]
1095
- }
1096
- ],
1097
- "exports": [
1098
- {
1099
- "kind": "js",
1100
- "name": "default",
1101
- "declaration": {
1102
- "name": "ZnBackground",
1103
- "module": "components/background/background.js"
1104
- }
1105
- }
1106
- ]
1107
- },
1108
845
  {
1109
846
  "kind": "javascript-module",
1110
847
  "path": "components/bulk-actions/bulk-actions.js",
@@ -1462,6 +1199,434 @@
1462
1199
  }
1463
1200
  ]
1464
1201
  },
1202
+ {
1203
+ "kind": "javascript-module",
1204
+ "path": "components/background/background.js",
1205
+ "declarations": [
1206
+ {
1207
+ "kind": "class",
1208
+ "description": "",
1209
+ "name": "ZnBackground",
1210
+ "cssProperties": [
1211
+ {
1212
+ "description": "Fallback colour when the `color` attribute is not set.",
1213
+ "name": "--zn-background-color"
1214
+ },
1215
+ {
1216
+ "description": "Position of the background image. Defaults to `center`.",
1217
+ "name": "--zn-background-image-position"
1218
+ },
1219
+ {
1220
+ "description": "Direction of the overlay gradient. Defaults to `110deg`.",
1221
+ "name": "--zn-background-overlay-angle"
1222
+ },
1223
+ {
1224
+ "description": "Colour of the floating icons. Defaults to `currentColor`.",
1225
+ "name": "--zn-background-floating-icon-color"
1226
+ }
1227
+ ],
1228
+ "cssParts": [
1229
+ {
1230
+ "description": "The component's full-size background canvas.",
1231
+ "name": "base"
1232
+ },
1233
+ {
1234
+ "description": "The decorative background image.",
1235
+ "name": "image"
1236
+ },
1237
+ {
1238
+ "description": "The contrast overlay between the image and content.",
1239
+ "name": "overlay"
1240
+ },
1241
+ {
1242
+ "description": "The non-interactive layer containing the floating icons.",
1243
+ "name": "floating-icons"
1244
+ },
1245
+ {
1246
+ "description": "Each floating `zn-icon`.",
1247
+ "name": "floating-icon"
1248
+ },
1249
+ {
1250
+ "description": "The wrapper around the default slot.",
1251
+ "name": "content"
1252
+ }
1253
+ ],
1254
+ "slots": [
1255
+ {
1256
+ "description": "Content displayed above the background layers.",
1257
+ "name": ""
1258
+ }
1259
+ ],
1260
+ "members": [
1261
+ {
1262
+ "kind": "field",
1263
+ "name": "dependencies",
1264
+ "type": {
1265
+ "text": "object"
1266
+ },
1267
+ "static": true,
1268
+ "default": "{'zn-icon': ZnIcon}"
1269
+ },
1270
+ {
1271
+ "kind": "field",
1272
+ "name": "resizeObserver",
1273
+ "privacy": "private",
1274
+ "readonly": true,
1275
+ "default": "new ResizeController<number>(this, { callback: entries => { const width = entries[0]?.contentRect.width ?? this.offsetWidth; return Math.max(1, Math.min(width * 0.05, 150)); }, })"
1276
+ },
1277
+ {
1278
+ "kind": "field",
1279
+ "name": "image",
1280
+ "type": {
1281
+ "text": "string"
1282
+ },
1283
+ "default": "''",
1284
+ "description": "URL of the decorative background image.",
1285
+ "attribute": "image"
1286
+ },
1287
+ {
1288
+ "kind": "field",
1289
+ "name": "color",
1290
+ "type": {
1291
+ "text": "string"
1292
+ },
1293
+ "default": "''",
1294
+ "description": "CSS colour painted beneath the image.",
1295
+ "attribute": "color"
1296
+ },
1297
+ {
1298
+ "kind": "field",
1299
+ "name": "imageStrength",
1300
+ "type": {
1301
+ "text": "BackgroundImageStrength"
1302
+ },
1303
+ "default": "'full'",
1304
+ "description": "Visibility of the image: `soft` (30%), `medium` (62%) or `full` (100%).",
1305
+ "attribute": "image-strength",
1306
+ "reflects": true
1307
+ },
1308
+ {
1309
+ "kind": "field",
1310
+ "name": "motion",
1311
+ "type": {
1312
+ "text": "BackgroundMotion"
1313
+ },
1314
+ "default": "'none'",
1315
+ "description": "Subtle animation applied to the image. Motion stops when reduced motion is requested.",
1316
+ "attribute": "motion",
1317
+ "reflects": true
1318
+ },
1319
+ {
1320
+ "kind": "field",
1321
+ "name": "overlay",
1322
+ "type": {
1323
+ "text": "BackgroundOverlay"
1324
+ },
1325
+ "default": "'soft'",
1326
+ "description": "Strength of the contrast gradient above the image.",
1327
+ "attribute": "overlay",
1328
+ "reflects": true
1329
+ },
1330
+ {
1331
+ "kind": "field",
1332
+ "name": "overlayTone",
1333
+ "type": {
1334
+ "text": "BackgroundOverlayTone"
1335
+ },
1336
+ "default": "'light'",
1337
+ "description": "Whether the overlay uses a light or dark contrast treatment.",
1338
+ "attribute": "overlay-tone",
1339
+ "reflects": true
1340
+ },
1341
+ {
1342
+ "kind": "field",
1343
+ "name": "floatingIcons",
1344
+ "type": {
1345
+ "text": "string"
1346
+ },
1347
+ "default": "''",
1348
+ "description": "Comma-separated Zinc icon names placed as ambient decoration. At most eight are rendered.",
1349
+ "attribute": "floating-icons"
1350
+ },
1351
+ {
1352
+ "kind": "field",
1353
+ "name": "paused",
1354
+ "type": {
1355
+ "text": "boolean"
1356
+ },
1357
+ "default": "false",
1358
+ "description": "Pauses background motion without changing the selected motion treatment.",
1359
+ "attribute": "paused",
1360
+ "reflects": true
1361
+ }
1362
+ ],
1363
+ "attributes": [
1364
+ {
1365
+ "name": "image",
1366
+ "type": {
1367
+ "text": "string"
1368
+ },
1369
+ "default": "''",
1370
+ "description": "URL of the decorative background image.",
1371
+ "fieldName": "image"
1372
+ },
1373
+ {
1374
+ "name": "color",
1375
+ "type": {
1376
+ "text": "string"
1377
+ },
1378
+ "default": "''",
1379
+ "description": "CSS colour painted beneath the image.",
1380
+ "fieldName": "color"
1381
+ },
1382
+ {
1383
+ "name": "image-strength",
1384
+ "type": {
1385
+ "text": "BackgroundImageStrength"
1386
+ },
1387
+ "default": "'full'",
1388
+ "description": "Visibility of the image: `soft` (30%), `medium` (62%) or `full` (100%).",
1389
+ "fieldName": "imageStrength"
1390
+ },
1391
+ {
1392
+ "name": "motion",
1393
+ "type": {
1394
+ "text": "BackgroundMotion"
1395
+ },
1396
+ "default": "'none'",
1397
+ "description": "Subtle animation applied to the image. Motion stops when reduced motion is requested.",
1398
+ "fieldName": "motion"
1399
+ },
1400
+ {
1401
+ "name": "overlay",
1402
+ "type": {
1403
+ "text": "BackgroundOverlay"
1404
+ },
1405
+ "default": "'soft'",
1406
+ "description": "Strength of the contrast gradient above the image.",
1407
+ "fieldName": "overlay"
1408
+ },
1409
+ {
1410
+ "name": "overlay-tone",
1411
+ "type": {
1412
+ "text": "BackgroundOverlayTone"
1413
+ },
1414
+ "default": "'light'",
1415
+ "description": "Whether the overlay uses a light or dark contrast treatment.",
1416
+ "fieldName": "overlayTone"
1417
+ },
1418
+ {
1419
+ "name": "floating-icons",
1420
+ "type": {
1421
+ "text": "string"
1422
+ },
1423
+ "default": "''",
1424
+ "description": "Comma-separated Zinc icon names placed as ambient decoration. At most eight are rendered.",
1425
+ "fieldName": "floatingIcons"
1426
+ },
1427
+ {
1428
+ "name": "paused",
1429
+ "type": {
1430
+ "text": "boolean"
1431
+ },
1432
+ "default": "false",
1433
+ "description": "Pauses background motion without changing the selected motion treatment.",
1434
+ "fieldName": "paused"
1435
+ }
1436
+ ],
1437
+ "superclass": {
1438
+ "name": "ZincElement",
1439
+ "module": "/src/internal/zinc-element"
1440
+ },
1441
+ "summary": "Composes a colour, decorative image, image strength, optional motion and contrast overlay behind slotted content.",
1442
+ "tagNameWithoutPrefix": "background",
1443
+ "tagName": "zn-background",
1444
+ "customElement": true,
1445
+ "jsDoc": "/**\n * @summary Composes a colour, decorative image, image strength, optional motion and contrast overlay behind slotted content.\n *\n * @documentation https://zinc.style/components/background\n * @status experimental\n * @since 1.0\n *\n * @dependency zn-icon\n *\n * @slot - Content displayed above the background layers.\n *\n * @csspart base - The component's full-size background canvas.\n * @csspart image - The decorative background image.\n * @csspart overlay - The contrast overlay between the image and content.\n * @csspart floating-icons - The non-interactive layer containing the floating icons.\n * @csspart floating-icon - Each floating `zn-icon`.\n * @csspart content - The wrapper around the default slot.\n *\n * @cssproperty --zn-background-color - Fallback colour when the `color` attribute is not set.\n * @cssproperty --zn-background-image-position - Position of the background image. Defaults to `center`.\n * @cssproperty --zn-background-overlay-angle - Direction of the overlay gradient. Defaults to `110deg`.\n * @cssproperty --zn-background-floating-icon-color - Colour of the floating icons. Defaults to `currentColor`.\n */",
1446
+ "documentation": "https://zinc.style/components/background",
1447
+ "status": "experimental",
1448
+ "since": "1.0",
1449
+ "dependencies": [
1450
+ "zn-icon"
1451
+ ]
1452
+ }
1453
+ ],
1454
+ "exports": [
1455
+ {
1456
+ "kind": "js",
1457
+ "name": "default",
1458
+ "declaration": {
1459
+ "name": "ZnBackground",
1460
+ "module": "components/background/background.js"
1461
+ }
1462
+ }
1463
+ ]
1464
+ },
1465
+ {
1466
+ "kind": "javascript-module",
1467
+ "path": "components/button-group/button-group.js",
1468
+ "declarations": [
1469
+ {
1470
+ "kind": "class",
1471
+ "description": "",
1472
+ "name": "ZnButtonGroup",
1473
+ "cssProperties": [
1474
+ {
1475
+ "description": "Use flex-grow to fill available space.",
1476
+ "name": "--grow"
1477
+ },
1478
+ {
1479
+ "description": "Justify content at the start of the flex space.",
1480
+ "name": "--start"
1481
+ }
1482
+ ],
1483
+ "cssParts": [
1484
+ {
1485
+ "description": "The component's base wrapper.",
1486
+ "name": "base"
1487
+ }
1488
+ ],
1489
+ "slots": [
1490
+ {
1491
+ "description": "The default slot.",
1492
+ "name": ""
1493
+ }
1494
+ ],
1495
+ "members": [
1496
+ {
1497
+ "kind": "field",
1498
+ "name": "direction",
1499
+ "type": {
1500
+ "text": "'horizontal' | 'vertical'"
1501
+ },
1502
+ "default": "'horizontal'",
1503
+ "attribute": "direction"
1504
+ },
1505
+ {
1506
+ "kind": "field",
1507
+ "name": "grow",
1508
+ "type": {
1509
+ "text": "boolean"
1510
+ },
1511
+ "default": "false",
1512
+ "attribute": "grow"
1513
+ },
1514
+ {
1515
+ "kind": "field",
1516
+ "name": "wrap",
1517
+ "type": {
1518
+ "text": "boolean"
1519
+ },
1520
+ "default": "false",
1521
+ "attribute": "wrap"
1522
+ },
1523
+ {
1524
+ "kind": "field",
1525
+ "name": "start",
1526
+ "type": {
1527
+ "text": "boolean"
1528
+ },
1529
+ "default": "false",
1530
+ "attribute": "start"
1531
+ },
1532
+ {
1533
+ "kind": "field",
1534
+ "name": "gap",
1535
+ "type": {
1536
+ "text": "boolean"
1537
+ },
1538
+ "default": "false",
1539
+ "attribute": "gap"
1540
+ },
1541
+ {
1542
+ "kind": "field",
1543
+ "name": "defaultSlot",
1544
+ "type": {
1545
+ "text": "HTMLSlotElement"
1546
+ }
1547
+ },
1548
+ {
1549
+ "kind": "method",
1550
+ "name": "handleSlotChange",
1551
+ "privacy": "private"
1552
+ }
1553
+ ],
1554
+ "events": [
1555
+ {
1556
+ "description": "Emitted as an example.",
1557
+ "name": "zn-event-name"
1558
+ }
1559
+ ],
1560
+ "attributes": [
1561
+ {
1562
+ "name": "direction",
1563
+ "type": {
1564
+ "text": "'horizontal' | 'vertical'"
1565
+ },
1566
+ "default": "'horizontal'",
1567
+ "fieldName": "direction"
1568
+ },
1569
+ {
1570
+ "name": "grow",
1571
+ "type": {
1572
+ "text": "boolean"
1573
+ },
1574
+ "default": "false",
1575
+ "fieldName": "grow"
1576
+ },
1577
+ {
1578
+ "name": "wrap",
1579
+ "type": {
1580
+ "text": "boolean"
1581
+ },
1582
+ "default": "false",
1583
+ "fieldName": "wrap"
1584
+ },
1585
+ {
1586
+ "name": "start",
1587
+ "type": {
1588
+ "text": "boolean"
1589
+ },
1590
+ "default": "false",
1591
+ "fieldName": "start"
1592
+ },
1593
+ {
1594
+ "name": "gap",
1595
+ "type": {
1596
+ "text": "boolean"
1597
+ },
1598
+ "default": "false",
1599
+ "fieldName": "gap"
1600
+ }
1601
+ ],
1602
+ "superclass": {
1603
+ "name": "ZincElement",
1604
+ "module": "/src/internal/zinc-element"
1605
+ },
1606
+ "summary": "Short summary of the component's intended use.",
1607
+ "tagNameWithoutPrefix": "button-group",
1608
+ "tagName": "zn-button-group",
1609
+ "customElement": true,
1610
+ "jsDoc": "/**\n * @summary Short summary of the component's intended use.\n * @documentation https://zinc.style/components/button-group\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 *\n * @csspart base - The component's base wrapper.\n *\n * @cssproperty --grow - Use flex-grow to fill available space.\n * @cssproperty --start - Justify content at the start of the flex space.\n */",
1611
+ "documentation": "https://zinc.style/components/button-group",
1612
+ "status": "experimental",
1613
+ "since": "1.0",
1614
+ "dependencies": [
1615
+ "zn-example"
1616
+ ]
1617
+ }
1618
+ ],
1619
+ "exports": [
1620
+ {
1621
+ "kind": "js",
1622
+ "name": "default",
1623
+ "declaration": {
1624
+ "name": "ZnButtonGroup",
1625
+ "module": "components/button-group/button-group.js"
1626
+ }
1627
+ }
1628
+ ]
1629
+ },
1465
1630
  {
1466
1631
  "kind": "javascript-module",
1467
1632
  "path": "components/button/button.js",
@@ -2417,171 +2582,6 @@
2417
2582
  }
2418
2583
  ]
2419
2584
  },
2420
- {
2421
- "kind": "javascript-module",
2422
- "path": "components/button-group/button-group.js",
2423
- "declarations": [
2424
- {
2425
- "kind": "class",
2426
- "description": "",
2427
- "name": "ZnButtonGroup",
2428
- "cssProperties": [
2429
- {
2430
- "description": "Use flex-grow to fill available space.",
2431
- "name": "--grow"
2432
- },
2433
- {
2434
- "description": "Justify content at the start of the flex space.",
2435
- "name": "--start"
2436
- }
2437
- ],
2438
- "cssParts": [
2439
- {
2440
- "description": "The component's base wrapper.",
2441
- "name": "base"
2442
- }
2443
- ],
2444
- "slots": [
2445
- {
2446
- "description": "The default slot.",
2447
- "name": ""
2448
- }
2449
- ],
2450
- "members": [
2451
- {
2452
- "kind": "field",
2453
- "name": "direction",
2454
- "type": {
2455
- "text": "'horizontal' | 'vertical'"
2456
- },
2457
- "default": "'horizontal'",
2458
- "attribute": "direction"
2459
- },
2460
- {
2461
- "kind": "field",
2462
- "name": "grow",
2463
- "type": {
2464
- "text": "boolean"
2465
- },
2466
- "default": "false",
2467
- "attribute": "grow"
2468
- },
2469
- {
2470
- "kind": "field",
2471
- "name": "wrap",
2472
- "type": {
2473
- "text": "boolean"
2474
- },
2475
- "default": "false",
2476
- "attribute": "wrap"
2477
- },
2478
- {
2479
- "kind": "field",
2480
- "name": "start",
2481
- "type": {
2482
- "text": "boolean"
2483
- },
2484
- "default": "false",
2485
- "attribute": "start"
2486
- },
2487
- {
2488
- "kind": "field",
2489
- "name": "gap",
2490
- "type": {
2491
- "text": "boolean"
2492
- },
2493
- "default": "false",
2494
- "attribute": "gap"
2495
- },
2496
- {
2497
- "kind": "field",
2498
- "name": "defaultSlot",
2499
- "type": {
2500
- "text": "HTMLSlotElement"
2501
- }
2502
- },
2503
- {
2504
- "kind": "method",
2505
- "name": "handleSlotChange",
2506
- "privacy": "private"
2507
- }
2508
- ],
2509
- "events": [
2510
- {
2511
- "description": "Emitted as an example.",
2512
- "name": "zn-event-name"
2513
- }
2514
- ],
2515
- "attributes": [
2516
- {
2517
- "name": "direction",
2518
- "type": {
2519
- "text": "'horizontal' | 'vertical'"
2520
- },
2521
- "default": "'horizontal'",
2522
- "fieldName": "direction"
2523
- },
2524
- {
2525
- "name": "grow",
2526
- "type": {
2527
- "text": "boolean"
2528
- },
2529
- "default": "false",
2530
- "fieldName": "grow"
2531
- },
2532
- {
2533
- "name": "wrap",
2534
- "type": {
2535
- "text": "boolean"
2536
- },
2537
- "default": "false",
2538
- "fieldName": "wrap"
2539
- },
2540
- {
2541
- "name": "start",
2542
- "type": {
2543
- "text": "boolean"
2544
- },
2545
- "default": "false",
2546
- "fieldName": "start"
2547
- },
2548
- {
2549
- "name": "gap",
2550
- "type": {
2551
- "text": "boolean"
2552
- },
2553
- "default": "false",
2554
- "fieldName": "gap"
2555
- }
2556
- ],
2557
- "superclass": {
2558
- "name": "ZincElement",
2559
- "module": "/src/internal/zinc-element"
2560
- },
2561
- "summary": "Short summary of the component's intended use.",
2562
- "tagNameWithoutPrefix": "button-group",
2563
- "tagName": "zn-button-group",
2564
- "customElement": true,
2565
- "jsDoc": "/**\n * @summary Short summary of the component's intended use.\n * @documentation https://zinc.style/components/button-group\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 *\n * @csspart base - The component's base wrapper.\n *\n * @cssproperty --grow - Use flex-grow to fill available space.\n * @cssproperty --start - Justify content at the start of the flex space.\n */",
2566
- "documentation": "https://zinc.style/components/button-group",
2567
- "status": "experimental",
2568
- "since": "1.0",
2569
- "dependencies": [
2570
- "zn-example"
2571
- ]
2572
- }
2573
- ],
2574
- "exports": [
2575
- {
2576
- "kind": "js",
2577
- "name": "default",
2578
- "declaration": {
2579
- "name": "ZnButtonGroup",
2580
- "module": "components/button-group/button-group.js"
2581
- }
2582
- }
2583
- ]
2584
- },
2585
2585
  {
2586
2586
  "kind": "javascript-module",
2587
2587
  "path": "components/button-menu/button-menu.js",
@@ -16550,13 +16550,11 @@
16550
16550
  },
16551
16551
  {
16552
16552
  "kind": "field",
16553
- "name": "tracked",
16554
- "type": {
16555
- "text": "HTMLElement | null"
16556
- },
16553
+ "name": "clipped",
16557
16554
  "privacy": "private",
16558
- "default": "null",
16559
- "description": "The scroller the label is tracked against by hand; null while native sticky is enough."
16555
+ "readonly": true,
16556
+ "default": "new Map<HTMLElement, { x: string; y: string }>()",
16557
+ "description": "The scroll containers we have clipped, against the inline overflow each carried before."
16560
16558
  },
16561
16559
  {
16562
16560
  "kind": "field",
@@ -16567,24 +16565,6 @@
16567
16565
  "privacy": "private",
16568
16566
  "default": "0"
16569
16567
  },
16570
- {
16571
- "kind": "field",
16572
- "name": "rebind",
16573
- "type": {
16574
- "text": "boolean"
16575
- },
16576
- "privacy": "private",
16577
- "default": "false"
16578
- },
16579
- {
16580
- "kind": "field",
16581
- "name": "offset",
16582
- "type": {
16583
- "text": "number"
16584
- },
16585
- "privacy": "private",
16586
- "default": "0"
16587
- },
16588
16568
  {
16589
16569
  "kind": "field",
16590
16570
  "name": "resizeObserver",
@@ -16607,84 +16587,53 @@
16607
16587
  "kind": "method",
16608
16588
  "name": "schedule",
16609
16589
  "privacy": "private",
16610
- "parameters": [
16611
- {
16612
- "name": "rebind",
16613
- "default": "false",
16614
- "type": {
16615
- "text": "boolean"
16616
- }
16617
- }
16618
- ],
16619
- "description": "Coalesces scroll and resize work into one frame, and out of the ResizeObserver callback."
16590
+ "description": "Coalesces resize work into one frame, and out of the ResizeObserver callback."
16591
+ },
16592
+ {
16593
+ "kind": "field",
16594
+ "name": "onViewportResize",
16595
+ "privacy": "private",
16596
+ "readonly": true
16620
16597
  },
16621
16598
  {
16622
16599
  "kind": "method",
16623
- "name": "findScroller",
16600
+ "name": "freeSticky",
16624
16601
  "privacy": "private",
16625
- "description": "Native sticky only follows the nearest scroll container. Where that container isn't the one\nthe user actually scrolls — a `zn-panel` body sized to its content inside a scrolling\nslideout, say the label never moves, so it gets translated by hand instead."
16602
+ "description": "Native sticky anchors to the nearest scroll container, even one that cannot scroll — a `zn-panel` body sized to\nits content, say — where it then holds the label still for the whole scroll. `overflow: clip` clips without\nmaking a scroll container, so clipping those takes them out of sticky's search and the label follows the box the\nuser actually scrolls, moved by the compositor rather than by hand."
16626
16603
  },
16627
16604
  {
16628
16605
  "kind": "method",
16629
- "name": "trackScroller",
16606
+ "name": "clip",
16630
16607
  "privacy": "private",
16631
16608
  "parameters": [
16632
16609
  {
16633
- "name": "scroller",
16610
+ "name": "element",
16634
16611
  "type": {
16635
- "text": "HTMLElement | null"
16612
+ "text": "HTMLElement"
16636
16613
  }
16637
16614
  }
16638
16615
  ]
16639
16616
  },
16640
16617
  {
16641
16618
  "kind": "method",
16642
- "name": "scrollTarget",
16619
+ "name": "release",
16643
16620
  "privacy": "private",
16644
- "return": {
16645
- "type": {
16646
- "text": "EventTarget | null"
16647
- }
16648
- },
16649
16621
  "parameters": [
16650
16622
  {
16651
- "name": "scroller",
16623
+ "name": "elements",
16652
16624
  "type": {
16653
- "text": "HTMLElement | null"
16625
+ "text": "HTMLElement[]"
16654
16626
  }
16655
16627
  }
16656
- ],
16657
- "description": "The document scrolls through the window, every other scroller reports its own events."
16658
- },
16659
- {
16660
- "kind": "field",
16661
- "name": "onScroll",
16662
- "privacy": "private",
16663
- "readonly": true
16664
- },
16665
- {
16666
- "kind": "field",
16667
- "name": "onViewportResize",
16668
- "privacy": "private",
16669
- "readonly": true
16670
- },
16671
- {
16672
- "kind": "method",
16673
- "name": "positionLabel",
16674
- "privacy": "private"
16628
+ ]
16675
16629
  },
16676
16630
  {
16677
16631
  "kind": "method",
16678
- "name": "nearestScrollContainer",
16632
+ "name": "isStickyAnchor",
16679
16633
  "privacy": "private",
16680
- "return": {
16681
- "type": {
16682
- "text": "HTMLElement | null"
16683
- }
16684
- },
16685
16634
  "parameters": [
16686
16635
  {
16687
- "name": "from",
16636
+ "name": "element",
16688
16637
  "type": {
16689
16638
  "text": "HTMLElement"
16690
16639
  }
@@ -16694,32 +16643,26 @@
16694
16643
  },
16695
16644
  {
16696
16645
  "kind": "method",
16697
- "name": "scrollingAncestor",
16646
+ "name": "isScrollContainer",
16698
16647
  "privacy": "private",
16699
- "return": {
16700
- "type": {
16701
- "text": "HTMLElement | null"
16702
- }
16703
- },
16704
16648
  "parameters": [
16705
16649
  {
16706
- "name": "from",
16650
+ "name": "overflow",
16707
16651
  "type": {
16708
- "text": "HTMLElement"
16652
+ "text": "string"
16709
16653
  }
16710
16654
  }
16711
- ],
16712
- "description": "The nearest ancestor the user can actually scroll, falling back to the document."
16655
+ ]
16713
16656
  },
16714
16657
  {
16715
16658
  "kind": "method",
16716
- "name": "isScrollContainer",
16659
+ "name": "overflows",
16717
16660
  "privacy": "private",
16718
16661
  "parameters": [
16719
16662
  {
16720
- "name": "overflow",
16663
+ "name": "element",
16721
16664
  "type": {
16722
- "text": "string"
16665
+ "text": "HTMLElement"
16723
16666
  }
16724
16667
  }
16725
16668
  ]
@@ -28329,6 +28272,230 @@
28329
28272
  }
28330
28273
  ]
28331
28274
  },
28275
+ {
28276
+ "kind": "javascript-module",
28277
+ "path": "components/pagination/pagination.js",
28278
+ "declarations": [
28279
+ {
28280
+ "kind": "class",
28281
+ "description": "",
28282
+ "name": "ZnPagination",
28283
+ "members": [
28284
+ {
28285
+ "kind": "field",
28286
+ "name": "limit",
28287
+ "type": {
28288
+ "text": "number"
28289
+ },
28290
+ "default": "10",
28291
+ "attribute": "limit",
28292
+ "reflects": true
28293
+ },
28294
+ {
28295
+ "kind": "field",
28296
+ "name": "total",
28297
+ "type": {
28298
+ "text": "number"
28299
+ },
28300
+ "default": "0",
28301
+ "attribute": "total",
28302
+ "reflects": true
28303
+ },
28304
+ {
28305
+ "kind": "field",
28306
+ "name": "page",
28307
+ "type": {
28308
+ "text": "number"
28309
+ },
28310
+ "default": "1",
28311
+ "attribute": "page",
28312
+ "reflects": true
28313
+ },
28314
+ {
28315
+ "kind": "field",
28316
+ "name": "uri",
28317
+ "type": {
28318
+ "text": "string"
28319
+ },
28320
+ "default": "\"\"",
28321
+ "attribute": "uri",
28322
+ "reflects": true
28323
+ },
28324
+ {
28325
+ "kind": "method",
28326
+ "name": "_createLink",
28327
+ "privacy": "protected",
28328
+ "return": {
28329
+ "type": {
28330
+ "text": "string"
28331
+ }
28332
+ },
28333
+ "parameters": [
28334
+ {
28335
+ "name": "page",
28336
+ "type": {
28337
+ "text": "number"
28338
+ }
28339
+ }
28340
+ ]
28341
+ },
28342
+ {
28343
+ "kind": "method",
28344
+ "name": "_calculatePages",
28345
+ "privacy": "protected"
28346
+ }
28347
+ ],
28348
+ "attributes": [
28349
+ {
28350
+ "name": "limit",
28351
+ "type": {
28352
+ "text": "number"
28353
+ },
28354
+ "default": "10",
28355
+ "fieldName": "limit"
28356
+ },
28357
+ {
28358
+ "name": "total",
28359
+ "type": {
28360
+ "text": "number"
28361
+ },
28362
+ "default": "0",
28363
+ "fieldName": "total"
28364
+ },
28365
+ {
28366
+ "name": "page",
28367
+ "type": {
28368
+ "text": "number"
28369
+ },
28370
+ "default": "1",
28371
+ "fieldName": "page"
28372
+ },
28373
+ {
28374
+ "name": "uri",
28375
+ "type": {
28376
+ "text": "string"
28377
+ },
28378
+ "default": "\"\"",
28379
+ "fieldName": "uri"
28380
+ }
28381
+ ],
28382
+ "superclass": {
28383
+ "name": "ZincElement",
28384
+ "module": "/src/internal/zinc-element"
28385
+ },
28386
+ "summary": "Pagination component for navigating through pages of content.",
28387
+ "tagNameWithoutPrefix": "pagination",
28388
+ "tagName": "zn-pagination",
28389
+ "customElement": true,
28390
+ "jsDoc": "/**\n * @summary Pagination component for navigating through pages of content.\n * @documentation https://zinc.style/components/pagination\n * @status experimental\n * @since 1.0\n */",
28391
+ "documentation": "https://zinc.style/components/pagination",
28392
+ "status": "experimental",
28393
+ "since": "1.0"
28394
+ }
28395
+ ],
28396
+ "exports": [
28397
+ {
28398
+ "kind": "js",
28399
+ "name": "default",
28400
+ "declaration": {
28401
+ "name": "ZnPagination",
28402
+ "module": "components/pagination/pagination.js"
28403
+ }
28404
+ }
28405
+ ]
28406
+ },
28407
+ {
28408
+ "kind": "javascript-module",
28409
+ "path": "components/pane/pane.js",
28410
+ "declarations": [
28411
+ {
28412
+ "kind": "class",
28413
+ "description": "",
28414
+ "name": "ZnPane",
28415
+ "cssProperties": [
28416
+ {
28417
+ "description": "An example CSS custom property.",
28418
+ "name": "--example"
28419
+ }
28420
+ ],
28421
+ "cssParts": [
28422
+ {
28423
+ "description": "The component's base wrapper.",
28424
+ "name": "base"
28425
+ }
28426
+ ],
28427
+ "slots": [
28428
+ {
28429
+ "description": "The default slot.",
28430
+ "name": ""
28431
+ },
28432
+ {
28433
+ "description": "An example slot.",
28434
+ "name": "example"
28435
+ }
28436
+ ],
28437
+ "members": [
28438
+ {
28439
+ "kind": "field",
28440
+ "name": "flush",
28441
+ "type": {
28442
+ "text": "boolean"
28443
+ },
28444
+ "attribute": "flush"
28445
+ },
28446
+ {
28447
+ "kind": "field",
28448
+ "name": "_header",
28449
+ "type": {
28450
+ "text": "HTMLElement | null"
28451
+ },
28452
+ "privacy": "protected",
28453
+ "default": "null"
28454
+ }
28455
+ ],
28456
+ "events": [
28457
+ {
28458
+ "description": "Emitted as an example.",
28459
+ "name": "zn-event-name"
28460
+ }
28461
+ ],
28462
+ "attributes": [
28463
+ {
28464
+ "name": "flush",
28465
+ "type": {
28466
+ "text": "boolean"
28467
+ },
28468
+ "fieldName": "flush"
28469
+ }
28470
+ ],
28471
+ "superclass": {
28472
+ "name": "ZincElement",
28473
+ "module": "/src/internal/zinc-element"
28474
+ },
28475
+ "summary": "Short summary of the component's intended use.",
28476
+ "tagNameWithoutPrefix": "pane",
28477
+ "tagName": "zn-pane",
28478
+ "customElement": true,
28479
+ "jsDoc": "/**\n * @summary Short summary of the component's intended use.\n * @documentation https://zinc.style/components/pane\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 */",
28480
+ "documentation": "https://zinc.style/components/pane",
28481
+ "status": "experimental",
28482
+ "since": "1.0",
28483
+ "dependencies": [
28484
+ "zn-example"
28485
+ ]
28486
+ }
28487
+ ],
28488
+ "exports": [
28489
+ {
28490
+ "kind": "js",
28491
+ "name": "default",
28492
+ "declaration": {
28493
+ "name": "ZnPane",
28494
+ "module": "components/pane/pane.js"
28495
+ }
28496
+ }
28497
+ ]
28498
+ },
28332
28499
  {
28333
28500
  "kind": "javascript-module",
28334
28501
  "path": "components/page-nav/page-nav.js",
@@ -29603,230 +29770,6 @@
29603
29770
  }
29604
29771
  ]
29605
29772
  },
29606
- {
29607
- "kind": "javascript-module",
29608
- "path": "components/pagination/pagination.js",
29609
- "declarations": [
29610
- {
29611
- "kind": "class",
29612
- "description": "",
29613
- "name": "ZnPagination",
29614
- "members": [
29615
- {
29616
- "kind": "field",
29617
- "name": "limit",
29618
- "type": {
29619
- "text": "number"
29620
- },
29621
- "default": "10",
29622
- "attribute": "limit",
29623
- "reflects": true
29624
- },
29625
- {
29626
- "kind": "field",
29627
- "name": "total",
29628
- "type": {
29629
- "text": "number"
29630
- },
29631
- "default": "0",
29632
- "attribute": "total",
29633
- "reflects": true
29634
- },
29635
- {
29636
- "kind": "field",
29637
- "name": "page",
29638
- "type": {
29639
- "text": "number"
29640
- },
29641
- "default": "1",
29642
- "attribute": "page",
29643
- "reflects": true
29644
- },
29645
- {
29646
- "kind": "field",
29647
- "name": "uri",
29648
- "type": {
29649
- "text": "string"
29650
- },
29651
- "default": "\"\"",
29652
- "attribute": "uri",
29653
- "reflects": true
29654
- },
29655
- {
29656
- "kind": "method",
29657
- "name": "_createLink",
29658
- "privacy": "protected",
29659
- "return": {
29660
- "type": {
29661
- "text": "string"
29662
- }
29663
- },
29664
- "parameters": [
29665
- {
29666
- "name": "page",
29667
- "type": {
29668
- "text": "number"
29669
- }
29670
- }
29671
- ]
29672
- },
29673
- {
29674
- "kind": "method",
29675
- "name": "_calculatePages",
29676
- "privacy": "protected"
29677
- }
29678
- ],
29679
- "attributes": [
29680
- {
29681
- "name": "limit",
29682
- "type": {
29683
- "text": "number"
29684
- },
29685
- "default": "10",
29686
- "fieldName": "limit"
29687
- },
29688
- {
29689
- "name": "total",
29690
- "type": {
29691
- "text": "number"
29692
- },
29693
- "default": "0",
29694
- "fieldName": "total"
29695
- },
29696
- {
29697
- "name": "page",
29698
- "type": {
29699
- "text": "number"
29700
- },
29701
- "default": "1",
29702
- "fieldName": "page"
29703
- },
29704
- {
29705
- "name": "uri",
29706
- "type": {
29707
- "text": "string"
29708
- },
29709
- "default": "\"\"",
29710
- "fieldName": "uri"
29711
- }
29712
- ],
29713
- "superclass": {
29714
- "name": "ZincElement",
29715
- "module": "/src/internal/zinc-element"
29716
- },
29717
- "summary": "Pagination component for navigating through pages of content.",
29718
- "tagNameWithoutPrefix": "pagination",
29719
- "tagName": "zn-pagination",
29720
- "customElement": true,
29721
- "jsDoc": "/**\n * @summary Pagination component for navigating through pages of content.\n * @documentation https://zinc.style/components/pagination\n * @status experimental\n * @since 1.0\n */",
29722
- "documentation": "https://zinc.style/components/pagination",
29723
- "status": "experimental",
29724
- "since": "1.0"
29725
- }
29726
- ],
29727
- "exports": [
29728
- {
29729
- "kind": "js",
29730
- "name": "default",
29731
- "declaration": {
29732
- "name": "ZnPagination",
29733
- "module": "components/pagination/pagination.js"
29734
- }
29735
- }
29736
- ]
29737
- },
29738
- {
29739
- "kind": "javascript-module",
29740
- "path": "components/pane/pane.js",
29741
- "declarations": [
29742
- {
29743
- "kind": "class",
29744
- "description": "",
29745
- "name": "ZnPane",
29746
- "cssProperties": [
29747
- {
29748
- "description": "An example CSS custom property.",
29749
- "name": "--example"
29750
- }
29751
- ],
29752
- "cssParts": [
29753
- {
29754
- "description": "The component's base wrapper.",
29755
- "name": "base"
29756
- }
29757
- ],
29758
- "slots": [
29759
- {
29760
- "description": "The default slot.",
29761
- "name": ""
29762
- },
29763
- {
29764
- "description": "An example slot.",
29765
- "name": "example"
29766
- }
29767
- ],
29768
- "members": [
29769
- {
29770
- "kind": "field",
29771
- "name": "flush",
29772
- "type": {
29773
- "text": "boolean"
29774
- },
29775
- "attribute": "flush"
29776
- },
29777
- {
29778
- "kind": "field",
29779
- "name": "_header",
29780
- "type": {
29781
- "text": "HTMLElement | null"
29782
- },
29783
- "privacy": "protected",
29784
- "default": "null"
29785
- }
29786
- ],
29787
- "events": [
29788
- {
29789
- "description": "Emitted as an example.",
29790
- "name": "zn-event-name"
29791
- }
29792
- ],
29793
- "attributes": [
29794
- {
29795
- "name": "flush",
29796
- "type": {
29797
- "text": "boolean"
29798
- },
29799
- "fieldName": "flush"
29800
- }
29801
- ],
29802
- "superclass": {
29803
- "name": "ZincElement",
29804
- "module": "/src/internal/zinc-element"
29805
- },
29806
- "summary": "Short summary of the component's intended use.",
29807
- "tagNameWithoutPrefix": "pane",
29808
- "tagName": "zn-pane",
29809
- "customElement": true,
29810
- "jsDoc": "/**\n * @summary Short summary of the component's intended use.\n * @documentation https://zinc.style/components/pane\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 */",
29811
- "documentation": "https://zinc.style/components/pane",
29812
- "status": "experimental",
29813
- "since": "1.0",
29814
- "dependencies": [
29815
- "zn-example"
29816
- ]
29817
- }
29818
- ],
29819
- "exports": [
29820
- {
29821
- "kind": "js",
29822
- "name": "default",
29823
- "declaration": {
29824
- "name": "ZnPane",
29825
- "module": "components/pane/pane.js"
29826
- }
29827
- }
29828
- ]
29829
- },
29830
29773
  {
29831
29774
  "kind": "javascript-module",
29832
29775
  "path": "components/panel/panel.js",
@@ -30623,502 +30566,644 @@
30623
30566
  },
30624
30567
  {
30625
30568
  "kind": "javascript-module",
30626
- "path": "components/preview-frame/preview-frame.js",
30569
+ "path": "components/priority-list/priority-list.js",
30627
30570
  "declarations": [
30628
30571
  {
30629
30572
  "kind": "class",
30630
30573
  "description": "",
30631
- "name": "ZnPreviewFrame",
30574
+ "name": "ZnPriorityList",
30632
30575
  "cssProperties": [
30633
30576
  {
30634
- "description": "Spacing of the backdrop dot grid (`backdrop=\"dots\"`). Defaults to 20px.",
30635
- "name": "--zn-preview-frame-dot-spacing"
30577
+ "description": "The gap between list items. Defaults to `var(--zn-spacing-2x-small)`.",
30578
+ "name": "--zn-priority-list-item-gap"
30636
30579
  },
30637
30580
  {
30638
- "description": "Opacity of the backdrop dots (`backdrop=\"dots\"`). Defaults to 0.08.",
30639
- "name": "--zn-preview-frame-dot-opacity"
30581
+ "description": "The padding inside each item. Defaults to `var(--zn-spacing-small) var(--zn-spacing-medium)`.",
30582
+ "name": "--zn-priority-list-item-padding"
30583
+ },
30584
+ {
30585
+ "description": "The gap between an item's slotted actions. Defaults to `var(--zn-spacing-x-small)`.",
30586
+ "name": "--zn-priority-list-actions-gap"
30587
+ },
30588
+ {
30589
+ "description": "The color of the drag handle. Defaults to `var(--zn-color-neutral-500)`.",
30590
+ "name": "--zn-priority-list-handle-color"
30591
+ },
30592
+ {
30593
+ "description": "The color of the priority number. Defaults to `var(--zn-color-neutral-600)`.",
30594
+ "name": "--zn-priority-list-priority-color"
30640
30595
  }
30641
30596
  ],
30642
30597
  "cssParts": [
30643
30598
  {
30644
- "description": "The component's base wrapper.",
30645
- "name": "base"
30599
+ "description": "The form control wrapper.",
30600
+ "name": "form-control"
30646
30601
  },
30647
30602
  {
30648
- "description": "The device-width wrapper around the iframe.",
30649
- "name": "stage"
30603
+ "description": "The label wrapper.",
30604
+ "name": "form-control-label"
30650
30605
  },
30651
30606
  {
30652
- "description": "The preview iframe.",
30653
- "name": "iframe"
30607
+ "description": "The input area wrapper.",
30608
+ "name": "form-control-input"
30654
30609
  },
30655
30610
  {
30656
- "description": "The error overlay.",
30657
- "name": "error"
30611
+ "description": "The help text wrapper.",
30612
+ "name": "form-control-help-text"
30613
+ },
30614
+ {
30615
+ "description": "The list container.",
30616
+ "name": "list"
30617
+ },
30618
+ {
30619
+ "description": "An individual list item row.",
30620
+ "name": "item"
30621
+ },
30622
+ {
30623
+ "description": "The drag handle icon.",
30624
+ "name": "drag-handle"
30625
+ },
30626
+ {
30627
+ "description": "The priority number badge.",
30628
+ "name": "priority"
30629
+ },
30630
+ {
30631
+ "description": "The content area of an item.",
30632
+ "name": "content"
30633
+ }
30634
+ ],
30635
+ "slots": [
30636
+ {
30637
+ "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).",
30638
+ "name": ""
30639
+ },
30640
+ {
30641
+ "description": "The component's label. Required for proper accessibility. Alternatively, use the `label` attribute.",
30642
+ "name": "label"
30643
+ },
30644
+ {
30645
+ "description": "Used to add text displayed in a tooltip next to the label.",
30646
+ "name": "label-tooltip"
30647
+ },
30648
+ {
30649
+ "description": "Text that describes how to use the component. Alternatively, use the `help-text` attribute.",
30650
+ "name": "help-text"
30658
30651
  }
30659
30652
  ],
30660
30653
  "members": [
30661
30654
  {
30662
30655
  "kind": "field",
30663
- "name": "src",
30656
+ "name": "dependencies",
30664
30657
  "type": {
30665
- "text": "string"
30658
+ "text": "object"
30666
30659
  },
30667
- "default": "''",
30668
- "description": "URL of the preview shell page (tokened embed URL).",
30669
- "attribute": "src"
30660
+ "static": true,
30661
+ "default": "{ 'zn-icon': ZnIcon, }"
30670
30662
  },
30671
30663
  {
30672
30664
  "kind": "field",
30673
- "name": "frameOrigin",
30665
+ "name": "formControlController",
30666
+ "privacy": "protected",
30667
+ "readonly": true,
30668
+ "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[]; } }, })"
30669
+ },
30670
+ {
30671
+ "kind": "field",
30672
+ "name": "hasSlotController",
30673
+ "privacy": "private",
30674
+ "readonly": true,
30675
+ "default": "new HasSlotController(this, 'help-text', 'label')"
30676
+ },
30677
+ {
30678
+ "kind": "field",
30679
+ "name": "hiddenInputsContainer",
30674
30680
  "type": {
30675
- "text": "string"
30676
- },
30677
- "default": "''",
30678
- "description": "Expected origin of the iframe; all postMessage traffic is checked against it.",
30679
- "attribute": "frame-origin"
30681
+ "text": "HTMLDivElement"
30682
+ }
30680
30683
  },
30681
30684
  {
30682
30685
  "kind": "field",
30683
- "name": "dataUri",
30686
+ "name": "name",
30684
30687
  "type": {
30685
30688
  "text": "string"
30686
30689
  },
30687
30690
  "default": "''",
30688
- "description": "Endpoint returning the hp-preview:config payload JSON. The console proxy rewrites this attribute to an app-prefixed path for proper fetch resolution.",
30689
- "attribute": "data-uri"
30691
+ "description": "The name prefix for form submission. Each item generates a hidden input named `{name}[{itemValue}]`\nwith the priority number as its value.",
30692
+ "attribute": "name"
30690
30693
  },
30691
30694
  {
30692
30695
  "kind": "field",
30693
- "name": "watch",
30696
+ "name": "value",
30694
30697
  "type": {
30695
- "text": "string"
30698
+ "text": "string[]"
30696
30699
  },
30697
- "default": "'form[data-auto-save]'",
30698
- "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.",
30699
- "attribute": "watch"
30700
+ "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.",
30701
+ "attribute": "value"
30700
30702
  },
30701
30703
  {
30702
30704
  "kind": "field",
30703
- "name": "refreshOn",
30705
+ "name": "_value",
30704
30706
  "type": {
30705
- "text": "string"
30707
+ "text": "string[]"
30706
30708
  },
30707
- "default": "'form'",
30708
- "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.",
30709
- "attribute": "refresh-on"
30709
+ "privacy": "private",
30710
+ "default": "[]"
30710
30711
  },
30711
30712
  {
30712
30713
  "kind": "field",
30713
- "name": "debounce",
30714
+ "name": "defaultValue",
30714
30715
  "type": {
30715
- "text": "number"
30716
+ "text": "string[]"
30716
30717
  },
30717
- "default": "400",
30718
- "description": "Debounce in ms between a form change and its auto-save.",
30719
- "attribute": "debounce"
30718
+ "default": "[]"
30720
30719
  },
30721
30720
  {
30722
30721
  "kind": "field",
30723
- "name": "zoom",
30722
+ "name": "label",
30724
30723
  "type": {
30725
- "text": "number"
30724
+ "text": "string"
30726
30725
  },
30727
- "default": "1",
30728
- "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.",
30729
- "attribute": "zoom"
30726
+ "default": "''",
30727
+ "description": "The component's label. Required for proper accessibility.",
30728
+ "attribute": "label"
30730
30729
  },
30731
30730
  {
30732
30731
  "kind": "field",
30733
- "name": "minHeight",
30732
+ "name": "labelTooltip",
30734
30733
  "type": {
30735
- "text": "number"
30734
+ "text": "string"
30736
30735
  },
30737
- "default": "480",
30738
- "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.",
30739
- "attribute": "min-height"
30736
+ "default": "''",
30737
+ "description": "Text that appears in a tooltip next to the label.",
30738
+ "attribute": "label-tooltip"
30740
30739
  },
30741
30740
  {
30742
30741
  "kind": "field",
30743
- "name": "fill",
30742
+ "name": "helpText",
30744
30743
  "type": {
30745
- "text": "boolean"
30744
+ "text": "string"
30746
30745
  },
30747
- "default": "false",
30748
- "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.",
30749
- "attribute": "fill"
30746
+ "default": "''",
30747
+ "description": "Help text that describes how to use the component.",
30748
+ "attribute": "help-text"
30750
30749
  },
30751
30750
  {
30752
30751
  "kind": "field",
30753
- "name": "device",
30752
+ "name": "form",
30754
30753
  "type": {
30755
- "text": "PreviewFrameDevice"
30754
+ "text": "string"
30756
30755
  },
30757
- "default": "'desktop'",
30758
- "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.",
30759
- "attribute": "device",
30756
+ "default": "''",
30757
+ "description": "Associates the control with a form by id. The form must be in the same document or shadow root.",
30758
+ "attribute": "form",
30760
30759
  "reflects": true
30761
30760
  },
30762
30761
  {
30763
30762
  "kind": "field",
30764
- "name": "backdrop",
30763
+ "name": "size",
30765
30764
  "type": {
30766
- "text": "'dots' | 'panel'"
30765
+ "text": "'small' | 'medium' | 'large'"
30767
30766
  },
30768
- "default": "'dots'",
30769
- "description": "Backdrop behind the stage: `dots` (default) is the canvas dot grid; `panel` is a plain `rgb(var(--zn-panel))` fill.",
30770
- "attribute": "backdrop",
30767
+ "default": "'medium'",
30768
+ "description": "The size of the list items.",
30769
+ "attribute": "size",
30771
30770
  "reflects": true
30772
30771
  },
30773
30772
  {
30774
30773
  "kind": "field",
30775
- "name": "interactive",
30774
+ "name": "disabled",
30776
30775
  "type": {
30777
30776
  "text": "boolean"
30778
30777
  },
30779
30778
  "default": "false",
30780
- "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.",
30781
- "attribute": "interactive",
30779
+ "description": "Whether the priority list is disabled.",
30780
+ "attribute": "disabled",
30782
30781
  "reflects": true
30783
30782
  },
30784
30783
  {
30785
30784
  "kind": "field",
30786
- "name": "frame",
30787
- "type": {
30788
- "text": "HTMLIFrameElement"
30789
- }
30790
- },
30791
- {
30792
- "kind": "field",
30793
- "name": "error",
30785
+ "name": "required",
30794
30786
  "type": {
30795
- "text": "string"
30787
+ "text": "boolean"
30796
30788
  },
30797
- "privacy": "private",
30798
- "default": "''"
30789
+ "default": "false",
30790
+ "description": "Ensures the form control has a value before allowing submission.",
30791
+ "attribute": "required",
30792
+ "reflects": true
30799
30793
  },
30800
30794
  {
30801
30795
  "kind": "field",
30802
- "name": "_contentHeight",
30796
+ "name": "priorityStart",
30803
30797
  "type": {
30804
30798
  "text": "number"
30805
30799
  },
30806
- "privacy": "private",
30807
- "default": "0",
30808
- "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."
30800
+ "default": "1",
30801
+ "description": "The starting priority number. Defaults to 1.",
30802
+ "attribute": "priority-start"
30809
30803
  },
30810
30804
  {
30811
30805
  "kind": "field",
30812
- "name": "_generation",
30806
+ "name": "formAction",
30813
30807
  "type": {
30814
- "text": "number"
30808
+ "text": "string"
30815
30809
  },
30816
- "privacy": "private",
30817
- "default": "0"
30810
+ "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.",
30811
+ "attribute": "formaction"
30818
30812
  },
30819
30813
  {
30820
30814
  "kind": "field",
30821
- "name": "_theme",
30815
+ "name": "order",
30822
30816
  "type": {
30823
- "text": "Record<string, unknown> | undefined"
30817
+ "text": "string"
30824
30818
  },
30825
- "privacy": "private"
30819
+ "default": "''",
30820
+ "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.",
30821
+ "attribute": "order"
30826
30822
  },
30827
30823
  {
30828
30824
  "kind": "field",
30829
- "name": "_contentObserver",
30825
+ "name": "draggedKey",
30830
30826
  "type": {
30831
- "text": "ResizeObserver | undefined"
30827
+ "text": "string | null"
30832
30828
  },
30833
- "privacy": "private"
30834
- },
30835
- {
30836
- "kind": "field",
30837
- "name": "_watchedForms",
30838
30829
  "privacy": "private",
30839
- "readonly": true,
30840
- "default": "new Set<HTMLFormElement>()"
30830
+ "default": "null"
30841
30831
  },
30842
30832
  {
30843
30833
  "kind": "field",
30844
- "name": "_debounceTimers",
30834
+ "name": "isDragging",
30835
+ "type": {
30836
+ "text": "boolean"
30837
+ },
30845
30838
  "privacy": "private",
30846
- "readonly": true,
30847
- "default": "new Map<HTMLFormElement, number>()"
30839
+ "default": "false"
30848
30840
  },
30849
30841
  {
30850
30842
  "kind": "field",
30851
- "name": "_shellSaveRoots",
30843
+ "name": "dragOverKey",
30852
30844
  "type": {
30853
- "text": "EventTarget[]"
30845
+ "text": "string | null"
30854
30846
  },
30855
30847
  "privacy": "private",
30856
- "default": "[]"
30848
+ "default": "null"
30857
30849
  },
30858
30850
  {
30859
30851
  "kind": "field",
30860
- "name": "_lastShellSave",
30852
+ "name": "validity",
30861
30853
  "type": {
30862
- "text": "Event | undefined"
30854
+ "text": "ValidityState"
30863
30855
  },
30864
- "privacy": "private"
30856
+ "description": "Gets the validity state object.",
30857
+ "readonly": true
30865
30858
  },
30866
30859
  {
30867
30860
  "kind": "field",
30868
- "name": "_formObserver",
30869
- "privacy": "private",
30870
- "readonly": true,
30871
- "default": "new MutationController(this, { target: null, config: {subtree: true, childList: true}, callback: () => this._attachForms(), })"
30861
+ "name": "validationMessage",
30862
+ "type": {
30863
+ "text": "string"
30864
+ },
30865
+ "description": "Gets the validation message.",
30866
+ "readonly": true
30872
30867
  },
30873
30868
  {
30874
- "kind": "field",
30875
- "name": "_onMessage",
30869
+ "kind": "method",
30870
+ "name": "_initializeOrderFromSlot",
30876
30871
  "privacy": "private",
30877
- "readonly": true
30872
+ "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."
30878
30873
  },
30879
30874
  {
30880
30875
  "kind": "method",
30881
- "name": "_applyContentHeight",
30876
+ "name": "_getSlottedItems",
30882
30877
  "privacy": "private",
30883
- "parameters": [
30884
- {
30885
- "name": "height",
30886
- "type": {
30887
- "text": "unknown"
30888
- }
30878
+ "return": {
30879
+ "type": {
30880
+ "text": "HTMLElement[]"
30889
30881
  }
30890
- ]
30882
+ },
30883
+ "description": "Gets all direct children with a `value` attribute (excluding those in reserved slots)."
30891
30884
  },
30892
30885
  {
30893
30886
  "kind": "method",
30894
- "name": "_resetContentHeight",
30895
- "privacy": "private"
30887
+ "name": "_assignSlotNames",
30888
+ "privacy": "private",
30889
+ "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."
30896
30890
  },
30897
30891
  {
30898
- "kind": "field",
30899
- "name": "_onFrameLoad",
30900
- "privacy": "private",
30901
- "readonly": true
30892
+ "kind": "method",
30893
+ "name": "getPriorityMap",
30894
+ "return": {
30895
+ "type": {
30896
+ "text": "PriorityItem[]"
30897
+ }
30898
+ },
30899
+ "description": "Returns the priority map: an array of { key, priority } objects."
30902
30900
  },
30903
30901
  {
30904
30902
  "kind": "method",
30905
- "name": "refresh",
30906
- "description": "Re-fetches the payload and pushes a fresh config to the preview."
30903
+ "name": "_syncHiddenInputs",
30904
+ "privacy": "private",
30905
+ "description": "Syncs hidden inputs so form data includes priority values."
30907
30906
  },
30908
30907
  {
30909
30908
  "kind": "method",
30910
- "name": "setTheme",
30909
+ "name": "_moveItem",
30910
+ "privacy": "private",
30911
30911
  "parameters": [
30912
30912
  {
30913
- "name": "theme",
30913
+ "name": "fromIndex",
30914
30914
  "type": {
30915
- "text": "Record<string, unknown>"
30915
+ "text": "number"
30916
+ }
30917
+ },
30918
+ {
30919
+ "name": "toIndex",
30920
+ "type": {
30921
+ "text": "number"
30916
30922
  }
30917
30923
  }
30918
30924
  ],
30919
- "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."
30925
+ "description": "Moves an item from one index to another."
30920
30926
  },
30921
30927
  {
30922
30928
  "kind": "method",
30923
- "name": "_postTheme",
30924
- "privacy": "private"
30929
+ "name": "_submitForm",
30930
+ "privacy": "private",
30931
+ "description": "Submits the associated form if a `formaction` attribute is set."
30925
30932
  },
30926
30933
  {
30927
30934
  "kind": "method",
30928
- "name": "_sendConfig",
30929
- "privacy": "private"
30935
+ "name": "_handleDragStart",
30936
+ "privacy": "private",
30937
+ "parameters": [
30938
+ {
30939
+ "name": "event",
30940
+ "type": {
30941
+ "text": "DragEvent"
30942
+ }
30943
+ },
30944
+ {
30945
+ "name": "key",
30946
+ "type": {
30947
+ "text": "string"
30948
+ }
30949
+ }
30950
+ ]
30930
30951
  },
30931
30952
  {
30932
30953
  "kind": "method",
30933
- "name": "_attachForms",
30954
+ "name": "_handleDragEnd",
30934
30955
  "privacy": "private"
30935
30956
  },
30936
- {
30937
- "kind": "field",
30938
- "name": "_onShellSave",
30939
- "privacy": "private",
30940
- "readonly": true
30941
- },
30942
30957
  {
30943
30958
  "kind": "method",
30944
- "name": "_detachForm",
30959
+ "name": "_handleDragOver",
30945
30960
  "privacy": "private",
30946
30961
  "parameters": [
30947
30962
  {
30948
- "name": "form",
30963
+ "name": "event",
30949
30964
  "type": {
30950
- "text": "HTMLFormElement"
30965
+ "text": "DragEvent"
30966
+ }
30967
+ },
30968
+ {
30969
+ "name": "key",
30970
+ "type": {
30971
+ "text": "string"
30951
30972
  }
30952
30973
  }
30953
30974
  ]
30954
30975
  },
30955
30976
  {
30956
- "kind": "field",
30957
- "name": "_onChange",
30958
- "privacy": "private",
30959
- "readonly": true
30960
- },
30961
- {
30962
- "kind": "field",
30963
- "name": "_onSubmit",
30977
+ "kind": "method",
30978
+ "name": "_handleDragLeave",
30964
30979
  "privacy": "private",
30965
- "readonly": true
30980
+ "parameters": [
30981
+ {
30982
+ "name": "event",
30983
+ "type": {
30984
+ "text": "DragEvent"
30985
+ }
30986
+ },
30987
+ {
30988
+ "name": "key",
30989
+ "type": {
30990
+ "text": "string"
30991
+ }
30992
+ }
30993
+ ]
30966
30994
  },
30967
30995
  {
30968
30996
  "kind": "method",
30969
- "name": "_save",
30997
+ "name": "_handleDrop",
30970
30998
  "privacy": "private",
30971
30999
  "parameters": [
30972
31000
  {
30973
- "name": "form",
31001
+ "name": "event",
30974
31002
  "type": {
30975
- "text": "HTMLFormElement"
31003
+ "text": "DragEvent"
30976
31004
  }
30977
31005
  }
30978
31006
  ]
30979
31007
  },
30980
31008
  {
30981
31009
  "kind": "method",
30982
- "name": "_fail",
31010
+ "name": "_handleKeyDown",
30983
31011
  "privacy": "private",
30984
31012
  "parameters": [
30985
31013
  {
30986
- "name": "message",
31014
+ "name": "event",
31015
+ "type": {
31016
+ "text": "KeyboardEvent"
31017
+ }
31018
+ },
31019
+ {
31020
+ "name": "key",
30987
31021
  "type": {
30988
31022
  "text": "string"
30989
31023
  }
30990
31024
  }
30991
31025
  ]
31026
+ },
31027
+ {
31028
+ "kind": "method",
31029
+ "name": "_handleSlotChange",
31030
+ "privacy": "private"
31031
+ },
31032
+ {
31033
+ "kind": "method",
31034
+ "name": "checkValidity",
31035
+ "return": {
31036
+ "type": {
31037
+ "text": "boolean"
31038
+ }
31039
+ },
31040
+ "description": "Checks for validity but does not show a validation message."
31041
+ },
31042
+ {
31043
+ "kind": "method",
31044
+ "name": "getForm",
31045
+ "return": {
31046
+ "type": {
31047
+ "text": "HTMLFormElement | null"
31048
+ }
31049
+ },
31050
+ "description": "Gets the associated form, if one exists."
31051
+ },
31052
+ {
31053
+ "kind": "method",
31054
+ "name": "reportValidity",
31055
+ "return": {
31056
+ "type": {
31057
+ "text": "boolean"
31058
+ }
31059
+ },
31060
+ "description": "Checks for validity and shows the browser's validation message if the control is invalid."
31061
+ },
31062
+ {
31063
+ "kind": "method",
31064
+ "name": "setCustomValidity",
31065
+ "parameters": [
31066
+ {
31067
+ "name": "_message",
31068
+ "default": "''"
31069
+ }
31070
+ ],
31071
+ "description": "Sets a custom validation message. Pass an empty string to restore validity."
30992
31072
  }
30993
31073
  ],
30994
31074
  "events": [
30995
31075
  {
30996
- "description": "Emitted when the preview reports a render error or a save fails.",
30997
- "name": "zn-error"
31076
+ "description": "Emitted when the order of items changes.",
31077
+ "name": "zn-change"
31078
+ },
31079
+ {
31080
+ "description": "Emitted when items are reordered. Call `getPriorityMap()` on the component to get the updated `{ key: string, priority: number }[]` array.",
31081
+ "name": "zn-reorder"
30998
31082
  }
30999
31083
  ],
31000
31084
  "attributes": [
31001
31085
  {
31002
- "name": "src",
31086
+ "name": "name",
31003
31087
  "type": {
31004
31088
  "text": "string"
31005
31089
  },
31006
31090
  "default": "''",
31007
- "description": "URL of the preview shell page (tokened embed URL).",
31008
- "fieldName": "src"
31091
+ "description": "The name prefix for form submission. Each item generates a hidden input named `{name}[{itemValue}]`\nwith the priority number as its value.",
31092
+ "fieldName": "name"
31009
31093
  },
31010
31094
  {
31011
- "name": "frame-origin",
31095
+ "name": "value",
31012
31096
  "type": {
31013
- "text": "string"
31097
+ "text": "string[]"
31014
31098
  },
31015
- "default": "''",
31016
- "description": "Expected origin of the iframe; all postMessage traffic is checked against it.",
31017
- "fieldName": "frameOrigin"
31099
+ "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.",
31100
+ "fieldName": "value"
31018
31101
  },
31019
31102
  {
31020
- "name": "data-uri",
31103
+ "name": "label",
31021
31104
  "type": {
31022
31105
  "text": "string"
31023
31106
  },
31024
31107
  "default": "''",
31025
- "description": "Endpoint returning the hp-preview:config payload JSON. The console proxy rewrites this attribute to an app-prefixed path for proper fetch resolution.",
31026
- "fieldName": "dataUri"
31108
+ "description": "The component's label. Required for proper accessibility.",
31109
+ "fieldName": "label"
31027
31110
  },
31028
31111
  {
31029
- "name": "watch",
31112
+ "name": "label-tooltip",
31030
31113
  "type": {
31031
31114
  "text": "string"
31032
31115
  },
31033
- "default": "'form[data-auto-save]'",
31034
- "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.",
31035
- "fieldName": "watch"
31116
+ "default": "''",
31117
+ "description": "Text that appears in a tooltip next to the label.",
31118
+ "fieldName": "labelTooltip"
31036
31119
  },
31037
31120
  {
31038
- "name": "refresh-on",
31121
+ "name": "help-text",
31039
31122
  "type": {
31040
31123
  "text": "string"
31041
31124
  },
31042
- "default": "'form'",
31043
- "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.",
31044
- "fieldName": "refreshOn"
31125
+ "default": "''",
31126
+ "description": "Help text that describes how to use the component.",
31127
+ "fieldName": "helpText"
31045
31128
  },
31046
31129
  {
31047
- "name": "debounce",
31130
+ "name": "form",
31048
31131
  "type": {
31049
- "text": "number"
31132
+ "text": "string"
31050
31133
  },
31051
- "default": "400",
31052
- "description": "Debounce in ms between a form change and its auto-save.",
31053
- "fieldName": "debounce"
31134
+ "default": "''",
31135
+ "description": "Associates the control with a form by id. The form must be in the same document or shadow root.",
31136
+ "fieldName": "form"
31054
31137
  },
31055
31138
  {
31056
- "name": "zoom",
31139
+ "name": "size",
31057
31140
  "type": {
31058
- "text": "number"
31141
+ "text": "'small' | 'medium' | 'large'"
31059
31142
  },
31060
- "default": "1",
31061
- "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.",
31062
- "fieldName": "zoom"
31143
+ "default": "'medium'",
31144
+ "description": "The size of the list items.",
31145
+ "fieldName": "size"
31063
31146
  },
31064
31147
  {
31065
- "name": "min-height",
31148
+ "name": "disabled",
31066
31149
  "type": {
31067
- "text": "number"
31150
+ "text": "boolean"
31068
31151
  },
31069
- "default": "480",
31070
- "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.",
31071
- "fieldName": "minHeight"
31152
+ "default": "false",
31153
+ "description": "Whether the priority list is disabled.",
31154
+ "fieldName": "disabled"
31072
31155
  },
31073
31156
  {
31074
- "name": "fill",
31157
+ "name": "required",
31075
31158
  "type": {
31076
31159
  "text": "boolean"
31077
31160
  },
31078
31161
  "default": "false",
31079
- "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.",
31080
- "fieldName": "fill"
31162
+ "description": "Ensures the form control has a value before allowing submission.",
31163
+ "fieldName": "required"
31081
31164
  },
31082
31165
  {
31083
- "name": "device",
31166
+ "name": "priority-start",
31084
31167
  "type": {
31085
- "text": "PreviewFrameDevice"
31168
+ "text": "number"
31086
31169
  },
31087
- "default": "'desktop'",
31088
- "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.",
31089
- "fieldName": "device"
31170
+ "default": "1",
31171
+ "description": "The starting priority number. Defaults to 1.",
31172
+ "fieldName": "priorityStart"
31090
31173
  },
31091
31174
  {
31092
- "name": "backdrop",
31175
+ "name": "formaction",
31093
31176
  "type": {
31094
- "text": "'dots' | 'panel'"
31177
+ "text": "string"
31095
31178
  },
31096
- "default": "'dots'",
31097
- "description": "Backdrop behind the stage: `dots` (default) is the canvas dot grid; `panel` is a plain `rgb(var(--zn-panel))` fill.",
31098
- "fieldName": "backdrop"
31179
+ "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.",
31180
+ "fieldName": "formAction"
31099
31181
  },
31100
31182
  {
31101
- "name": "interactive",
31183
+ "name": "order",
31102
31184
  "type": {
31103
- "text": "boolean"
31185
+ "text": "string"
31104
31186
  },
31105
- "default": "false",
31106
- "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.",
31107
- "fieldName": "interactive"
31187
+ "default": "''",
31188
+ "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.",
31189
+ "fieldName": "order"
31108
31190
  }
31109
31191
  ],
31110
31192
  "superclass": {
31111
31193
  "name": "ZincElement",
31112
31194
  "module": "/src/internal/zinc-element"
31113
31195
  },
31114
- "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.",
31115
- "tagNameWithoutPrefix": "preview-frame",
31116
- "tagName": "zn-preview-frame",
31196
+ "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.",
31197
+ "tagNameWithoutPrefix": "priority-list",
31198
+ "tagName": "zn-priority-list",
31117
31199
  "customElement": true,
31118
- "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 */",
31119
- "documentation": "https://zinc.style/components/preview-frame",
31200
+ "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 */",
31201
+ "documentation": "https://zinc.style/components/priority-list",
31120
31202
  "status": "experimental",
31121
- "since": "1.0"
31203
+ "since": "1.0",
31204
+ "dependencies": [
31205
+ "zn-icon"
31206
+ ]
31122
31207
  }
31123
31208
  ],
31124
31209
  "exports": [
@@ -31126,825 +31211,683 @@
31126
31211
  "kind": "js",
31127
31212
  "name": "default",
31128
31213
  "declaration": {
31129
- "name": "ZnPreviewFrame",
31130
- "module": "components/preview-frame/preview-frame.js"
31214
+ "name": "ZnPriorityList",
31215
+ "module": "components/priority-list/priority-list.js"
31131
31216
  }
31132
31217
  }
31133
31218
  ]
31134
31219
  },
31135
31220
  {
31136
31221
  "kind": "javascript-module",
31137
- "path": "components/priority-list/priority-list.js",
31222
+ "path": "components/progress-bar/progress-bar.js",
31138
31223
  "declarations": [
31139
31224
  {
31140
31225
  "kind": "class",
31141
31226
  "description": "",
31142
- "name": "ZnPriorityList",
31227
+ "name": "ZnProgressBar",
31143
31228
  "cssProperties": [
31144
31229
  {
31145
- "description": "The gap between list items. Defaults to `var(--zn-spacing-2x-small)`.",
31146
- "name": "--zn-priority-list-item-gap"
31230
+ "description": "The color of the progress bar background track.",
31231
+ "name": "--zn-border-color"
31147
31232
  },
31148
31233
  {
31149
- "description": "The padding inside each item. Defaults to `var(--zn-spacing-small) var(--zn-spacing-medium)`.",
31150
- "name": "--zn-priority-list-item-padding"
31234
+ "description": "The color of the progress bar fill.",
31235
+ "name": "--zn-progress-bar-color"
31151
31236
  },
31152
31237
  {
31153
- "description": "The gap between an item's slotted actions. Defaults to `var(--zn-spacing-x-small)`.",
31154
- "name": "--zn-priority-list-actions-gap"
31238
+ "description": "The color of the caption text.",
31239
+ "name": "--zn-text-heading"
31155
31240
  },
31156
31241
  {
31157
- "description": "The color of the drag handle. Defaults to `var(--zn-color-neutral-500)`.",
31158
- "name": "--zn-priority-list-handle-color"
31242
+ "description": "The color of the progress percentage and description text.",
31243
+ "name": "--zn-text"
31159
31244
  },
31160
31245
  {
31161
- "description": "The color of the priority number. Defaults to `var(--zn-color-neutral-600)`.",
31162
- "name": "--zn-priority-list-priority-color"
31246
+ "description": "The spacing between header/footer and the progress bar.",
31247
+ "name": "--zn-spacing-x-small"
31163
31248
  }
31164
31249
  ],
31165
31250
  "cssParts": [
31166
31251
  {
31167
- "description": "The form control wrapper.",
31168
- "name": "form-control"
31169
- },
31170
- {
31171
- "description": "The label wrapper.",
31172
- "name": "form-control-label"
31252
+ "description": "The header container that contains the caption and progress text.",
31253
+ "name": "header"
31173
31254
  },
31174
31255
  {
31175
- "description": "The input area wrapper.",
31176
- "name": "form-control-input"
31256
+ "description": "The caption text element.",
31257
+ "name": "caption"
31177
31258
  },
31178
31259
  {
31179
- "description": "The help text wrapper.",
31180
- "name": "form-control-help-text"
31260
+ "description": "The progress percentage text element.",
31261
+ "name": "progress"
31181
31262
  },
31182
31263
  {
31183
- "description": "The list container.",
31184
- "name": "list"
31264
+ "description": "The SVG element containing the progress bar.",
31265
+ "name": "bar"
31185
31266
  },
31186
31267
  {
31187
- "description": "An individual list item row.",
31188
- "name": "item"
31268
+ "description": "The background track of the progress bar.",
31269
+ "name": "track"
31189
31270
  },
31190
31271
  {
31191
- "description": "The drag handle icon.",
31192
- "name": "drag-handle"
31272
+ "description": "The filled portion of the progress bar indicating progress.",
31273
+ "name": "fill"
31193
31274
  },
31194
31275
  {
31195
- "description": "The priority number badge.",
31196
- "name": "priority"
31276
+ "description": "The footer container that contains the description.",
31277
+ "name": "footer"
31197
31278
  },
31198
31279
  {
31199
- "description": "The content area of an item.",
31200
- "name": "content"
31280
+ "description": "The description text element.",
31281
+ "name": "info"
31201
31282
  }
31202
31283
  ],
31203
- "slots": [
31204
- {
31205
- "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).",
31206
- "name": ""
31207
- },
31284
+ "members": [
31208
31285
  {
31209
- "description": "The component's label. Required for proper accessibility. Alternatively, use the `label` attribute.",
31210
- "name": "label"
31286
+ "kind": "field",
31287
+ "name": "caption",
31288
+ "type": {
31289
+ "text": "string | undefined"
31290
+ },
31291
+ "attribute": "caption",
31292
+ "reflects": true
31211
31293
  },
31212
31294
  {
31213
- "description": "Used to add text displayed in a tooltip next to the label.",
31214
- "name": "label-tooltip"
31295
+ "kind": "field",
31296
+ "name": "color",
31297
+ "type": {
31298
+ "text": "ProgressBarColor"
31299
+ },
31300
+ "default": "'current'",
31301
+ "attribute": "color",
31302
+ "reflects": true
31215
31303
  },
31216
- {
31217
- "description": "Text that describes how to use the component. Alternatively, use the `help-text` attribute.",
31218
- "name": "help-text"
31219
- }
31220
- ],
31221
- "members": [
31222
31304
  {
31223
31305
  "kind": "field",
31224
- "name": "dependencies",
31306
+ "name": "description",
31225
31307
  "type": {
31226
- "text": "object"
31308
+ "text": "string | undefined"
31227
31309
  },
31228
- "static": true,
31229
- "default": "{ 'zn-icon': ZnIcon, }"
31310
+ "attribute": "description",
31311
+ "reflects": true
31230
31312
  },
31231
31313
  {
31232
31314
  "kind": "field",
31233
- "name": "formControlController",
31234
- "privacy": "protected",
31235
- "readonly": true,
31236
- "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[]; } }, })"
31315
+ "name": "value",
31316
+ "type": {
31317
+ "text": "number | undefined"
31318
+ },
31319
+ "attribute": "value",
31320
+ "reflects": true
31237
31321
  },
31238
31322
  {
31239
31323
  "kind": "field",
31240
- "name": "hasSlotController",
31241
- "privacy": "private",
31242
- "readonly": true,
31243
- "default": "new HasSlotController(this, 'help-text', 'label')"
31324
+ "name": "showProgress",
31325
+ "type": {
31326
+ "text": "boolean | undefined"
31327
+ },
31328
+ "attribute": "show-progress",
31329
+ "reflects": true
31330
+ }
31331
+ ],
31332
+ "attributes": [
31333
+ {
31334
+ "name": "caption",
31335
+ "type": {
31336
+ "text": "string | undefined"
31337
+ },
31338
+ "fieldName": "caption"
31244
31339
  },
31245
31340
  {
31246
- "kind": "field",
31247
- "name": "hiddenInputsContainer",
31341
+ "name": "color",
31248
31342
  "type": {
31249
- "text": "HTMLDivElement"
31250
- }
31343
+ "text": "ProgressBarColor"
31344
+ },
31345
+ "default": "'current'",
31346
+ "fieldName": "color"
31251
31347
  },
31252
31348
  {
31253
- "kind": "field",
31254
- "name": "name",
31349
+ "name": "description",
31255
31350
  "type": {
31256
- "text": "string"
31351
+ "text": "string | undefined"
31257
31352
  },
31258
- "default": "''",
31259
- "description": "The name prefix for form submission. Each item generates a hidden input named `{name}[{itemValue}]`\nwith the priority number as its value.",
31260
- "attribute": "name"
31353
+ "fieldName": "description"
31261
31354
  },
31262
31355
  {
31263
- "kind": "field",
31264
31356
  "name": "value",
31265
31357
  "type": {
31266
- "text": "string[]"
31358
+ "text": "number | undefined"
31267
31359
  },
31268
- "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.",
31269
- "attribute": "value"
31360
+ "fieldName": "value"
31270
31361
  },
31271
31362
  {
31272
- "kind": "field",
31273
- "name": "_value",
31363
+ "name": "show-progress",
31274
31364
  "type": {
31275
- "text": "string[]"
31365
+ "text": "boolean | undefined"
31276
31366
  },
31277
- "privacy": "private",
31278
- "default": "[]"
31367
+ "fieldName": "showProgress"
31368
+ }
31369
+ ],
31370
+ "superclass": {
31371
+ "name": "ZincElement",
31372
+ "module": "/src/internal/zinc-element"
31373
+ },
31374
+ "summary": "Progress bars provide visual feedback about the completion status of a task or process.",
31375
+ "tagNameWithoutPrefix": "progress-bar",
31376
+ "tagName": "zn-progress-bar",
31377
+ "customElement": true,
31378
+ "jsDoc": "/**\n * @summary Progress bars provide visual feedback about the completion status of a task or process.\n * @documentation https://zinc.style/components/progress-bar\n * @status experimental\n * @since 1.0\n *\n * @csspart header - The header container that contains the caption and progress text.\n * @csspart caption - The caption text element.\n * @csspart progress - The progress percentage text element.\n * @csspart bar - The SVG element containing the progress bar.\n * @csspart track - The background track of the progress bar.\n * @csspart fill - The filled portion of the progress bar indicating progress.\n * @csspart footer - The footer container that contains the description.\n * @csspart info - The description text element.\n *\n * @cssproperty --zn-border-color - The color of the progress bar background track.\n * @cssproperty --zn-progress-bar-color - The color of the progress bar fill.\n * @cssproperty --zn-text-heading - The color of the caption text.\n * @cssproperty --zn-text - The color of the progress percentage and description text.\n * @cssproperty --zn-spacing-x-small - The spacing between header/footer and the progress bar.\n */",
31379
+ "documentation": "https://zinc.style/components/progress-bar",
31380
+ "status": "experimental",
31381
+ "since": "1.0"
31382
+ }
31383
+ ],
31384
+ "exports": [
31385
+ {
31386
+ "kind": "js",
31387
+ "name": "default",
31388
+ "declaration": {
31389
+ "name": "ZnProgressBar",
31390
+ "module": "components/progress-bar/progress-bar.js"
31391
+ }
31392
+ }
31393
+ ]
31394
+ },
31395
+ {
31396
+ "kind": "javascript-module",
31397
+ "path": "components/preview-frame/preview-frame.js",
31398
+ "declarations": [
31399
+ {
31400
+ "kind": "class",
31401
+ "description": "",
31402
+ "name": "ZnPreviewFrame",
31403
+ "cssProperties": [
31404
+ {
31405
+ "description": "Spacing of the backdrop dot grid (`backdrop=\"dots\"`). Defaults to 20px.",
31406
+ "name": "--zn-preview-frame-dot-spacing"
31407
+ },
31408
+ {
31409
+ "description": "Opacity of the backdrop dots (`backdrop=\"dots\"`). Defaults to 0.08.",
31410
+ "name": "--zn-preview-frame-dot-opacity"
31411
+ }
31412
+ ],
31413
+ "cssParts": [
31414
+ {
31415
+ "description": "The component's base wrapper.",
31416
+ "name": "base"
31417
+ },
31418
+ {
31419
+ "description": "The device-width wrapper around the iframe.",
31420
+ "name": "stage"
31279
31421
  },
31422
+ {
31423
+ "description": "The preview iframe.",
31424
+ "name": "iframe"
31425
+ },
31426
+ {
31427
+ "description": "The error overlay.",
31428
+ "name": "error"
31429
+ }
31430
+ ],
31431
+ "members": [
31280
31432
  {
31281
31433
  "kind": "field",
31282
- "name": "defaultValue",
31434
+ "name": "src",
31283
31435
  "type": {
31284
- "text": "string[]"
31436
+ "text": "string"
31285
31437
  },
31286
- "default": "[]"
31438
+ "default": "''",
31439
+ "description": "URL of the preview shell page (tokened embed URL).",
31440
+ "attribute": "src"
31287
31441
  },
31288
31442
  {
31289
31443
  "kind": "field",
31290
- "name": "label",
31444
+ "name": "frameOrigin",
31291
31445
  "type": {
31292
31446
  "text": "string"
31293
31447
  },
31294
31448
  "default": "''",
31295
- "description": "The component's label. Required for proper accessibility.",
31296
- "attribute": "label"
31449
+ "description": "Expected origin of the iframe; all postMessage traffic is checked against it.",
31450
+ "attribute": "frame-origin"
31297
31451
  },
31298
31452
  {
31299
31453
  "kind": "field",
31300
- "name": "labelTooltip",
31454
+ "name": "dataUri",
31301
31455
  "type": {
31302
31456
  "text": "string"
31303
31457
  },
31304
31458
  "default": "''",
31305
- "description": "Text that appears in a tooltip next to the label.",
31306
- "attribute": "label-tooltip"
31459
+ "description": "Endpoint returning the hp-preview:config payload JSON. The console proxy rewrites this attribute to an app-prefixed path for proper fetch resolution.",
31460
+ "attribute": "data-uri"
31307
31461
  },
31308
31462
  {
31309
31463
  "kind": "field",
31310
- "name": "helpText",
31464
+ "name": "watch",
31311
31465
  "type": {
31312
31466
  "text": "string"
31313
31467
  },
31314
- "default": "''",
31315
- "description": "Help text that describes how to use the component.",
31316
- "attribute": "help-text"
31468
+ "default": "'form[data-auto-save]'",
31469
+ "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.",
31470
+ "attribute": "watch"
31317
31471
  },
31318
31472
  {
31319
31473
  "kind": "field",
31320
- "name": "form",
31474
+ "name": "refreshOn",
31321
31475
  "type": {
31322
31476
  "text": "string"
31323
31477
  },
31324
- "default": "''",
31325
- "description": "Associates the control with a form by id. The form must be in the same document or shadow root.",
31326
- "attribute": "form",
31327
- "reflects": true
31478
+ "default": "'form'",
31479
+ "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.",
31480
+ "attribute": "refresh-on"
31328
31481
  },
31329
31482
  {
31330
31483
  "kind": "field",
31331
- "name": "size",
31484
+ "name": "debounce",
31332
31485
  "type": {
31333
- "text": "'small' | 'medium' | 'large'"
31486
+ "text": "number"
31334
31487
  },
31335
- "default": "'medium'",
31336
- "description": "The size of the list items.",
31337
- "attribute": "size",
31338
- "reflects": true
31488
+ "default": "400",
31489
+ "description": "Debounce in ms between a form change and its auto-save.",
31490
+ "attribute": "debounce"
31339
31491
  },
31340
31492
  {
31341
31493
  "kind": "field",
31342
- "name": "disabled",
31494
+ "name": "zoom",
31343
31495
  "type": {
31344
- "text": "boolean"
31496
+ "text": "number"
31345
31497
  },
31346
- "default": "false",
31347
- "description": "Whether the priority list is disabled.",
31348
- "attribute": "disabled",
31349
- "reflects": true
31498
+ "default": "1",
31499
+ "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.",
31500
+ "attribute": "zoom"
31350
31501
  },
31351
31502
  {
31352
31503
  "kind": "field",
31353
- "name": "required",
31504
+ "name": "minHeight",
31505
+ "type": {
31506
+ "text": "number"
31507
+ },
31508
+ "default": "480",
31509
+ "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.",
31510
+ "attribute": "min-height"
31511
+ },
31512
+ {
31513
+ "kind": "field",
31514
+ "name": "fill",
31354
31515
  "type": {
31355
31516
  "text": "boolean"
31356
31517
  },
31357
31518
  "default": "false",
31358
- "description": "Ensures the form control has a value before allowing submission.",
31359
- "attribute": "required",
31360
- "reflects": true
31519
+ "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.",
31520
+ "attribute": "fill"
31361
31521
  },
31362
31522
  {
31363
31523
  "kind": "field",
31364
- "name": "priorityStart",
31524
+ "name": "device",
31365
31525
  "type": {
31366
- "text": "number"
31526
+ "text": "PreviewFrameDevice"
31367
31527
  },
31368
- "default": "1",
31369
- "description": "The starting priority number. Defaults to 1.",
31370
- "attribute": "priority-start"
31528
+ "default": "'desktop'",
31529
+ "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.",
31530
+ "attribute": "device",
31531
+ "reflects": true
31371
31532
  },
31372
31533
  {
31373
31534
  "kind": "field",
31374
- "name": "formAction",
31535
+ "name": "backdrop",
31375
31536
  "type": {
31376
- "text": "string"
31537
+ "text": "'dots' | 'panel'"
31377
31538
  },
31378
- "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.",
31379
- "attribute": "formaction"
31539
+ "default": "'dots'",
31540
+ "description": "Backdrop behind the stage: `dots` (default) is the canvas dot grid; `panel` is a plain `rgb(var(--zn-panel))` fill.",
31541
+ "attribute": "backdrop",
31542
+ "reflects": true
31380
31543
  },
31381
31544
  {
31382
31545
  "kind": "field",
31383
- "name": "order",
31546
+ "name": "interactive",
31384
31547
  "type": {
31385
- "text": "string"
31548
+ "text": "boolean"
31386
31549
  },
31387
- "default": "''",
31388
- "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.",
31389
- "attribute": "order"
31550
+ "default": "false",
31551
+ "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.",
31552
+ "attribute": "interactive",
31553
+ "reflects": true
31390
31554
  },
31391
31555
  {
31392
31556
  "kind": "field",
31393
- "name": "draggedKey",
31557
+ "name": "frame",
31394
31558
  "type": {
31395
- "text": "string | null"
31559
+ "text": "HTMLIFrameElement"
31560
+ }
31561
+ },
31562
+ {
31563
+ "kind": "field",
31564
+ "name": "error",
31565
+ "type": {
31566
+ "text": "string"
31396
31567
  },
31397
31568
  "privacy": "private",
31398
- "default": "null"
31569
+ "default": "''"
31399
31570
  },
31400
31571
  {
31401
31572
  "kind": "field",
31402
- "name": "isDragging",
31573
+ "name": "_contentHeight",
31403
31574
  "type": {
31404
- "text": "boolean"
31575
+ "text": "number"
31405
31576
  },
31406
31577
  "privacy": "private",
31407
- "default": "false"
31578
+ "default": "0",
31579
+ "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."
31408
31580
  },
31409
31581
  {
31410
31582
  "kind": "field",
31411
- "name": "dragOverKey",
31583
+ "name": "_generation",
31412
31584
  "type": {
31413
- "text": "string | null"
31585
+ "text": "number"
31414
31586
  },
31415
31587
  "privacy": "private",
31416
- "default": "null"
31588
+ "default": "0"
31417
31589
  },
31418
31590
  {
31419
31591
  "kind": "field",
31420
- "name": "validity",
31592
+ "name": "_theme",
31421
31593
  "type": {
31422
- "text": "ValidityState"
31594
+ "text": "Record<string, unknown> | undefined"
31423
31595
  },
31424
- "description": "Gets the validity state object.",
31425
- "readonly": true
31596
+ "privacy": "private"
31426
31597
  },
31427
31598
  {
31428
31599
  "kind": "field",
31429
- "name": "validationMessage",
31600
+ "name": "_contentObserver",
31430
31601
  "type": {
31431
- "text": "string"
31602
+ "text": "ResizeObserver | undefined"
31432
31603
  },
31433
- "description": "Gets the validation message.",
31434
- "readonly": true
31604
+ "privacy": "private"
31435
31605
  },
31436
31606
  {
31437
- "kind": "method",
31438
- "name": "_initializeOrderFromSlot",
31607
+ "kind": "field",
31608
+ "name": "_watchedForms",
31439
31609
  "privacy": "private",
31440
- "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."
31610
+ "readonly": true,
31611
+ "default": "new Set<HTMLFormElement>()"
31441
31612
  },
31442
31613
  {
31443
- "kind": "method",
31444
- "name": "_getSlottedItems",
31614
+ "kind": "field",
31615
+ "name": "_debounceTimers",
31445
31616
  "privacy": "private",
31446
- "return": {
31447
- "type": {
31448
- "text": "HTMLElement[]"
31449
- }
31450
- },
31451
- "description": "Gets all direct children with a `value` attribute (excluding those in reserved slots)."
31617
+ "readonly": true,
31618
+ "default": "new Map<HTMLFormElement, number>()"
31452
31619
  },
31453
31620
  {
31454
- "kind": "method",
31455
- "name": "_assignSlotNames",
31621
+ "kind": "field",
31622
+ "name": "_shellSaveRoots",
31623
+ "type": {
31624
+ "text": "EventTarget[]"
31625
+ },
31456
31626
  "privacy": "private",
31457
- "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."
31627
+ "default": "[]"
31458
31628
  },
31459
31629
  {
31460
- "kind": "method",
31461
- "name": "getPriorityMap",
31462
- "return": {
31463
- "type": {
31464
- "text": "PriorityItem[]"
31465
- }
31630
+ "kind": "field",
31631
+ "name": "_lastShellSave",
31632
+ "type": {
31633
+ "text": "Event | undefined"
31466
31634
  },
31467
- "description": "Returns the priority map: an array of { key, priority } objects."
31635
+ "privacy": "private"
31468
31636
  },
31469
31637
  {
31470
- "kind": "method",
31471
- "name": "_syncHiddenInputs",
31638
+ "kind": "field",
31639
+ "name": "_formObserver",
31472
31640
  "privacy": "private",
31473
- "description": "Syncs hidden inputs so form data includes priority values."
31641
+ "readonly": true,
31642
+ "default": "new MutationController(this, { target: null, config: {subtree: true, childList: true}, callback: () => this._attachForms(), })"
31643
+ },
31644
+ {
31645
+ "kind": "field",
31646
+ "name": "_onMessage",
31647
+ "privacy": "private",
31648
+ "readonly": true
31474
31649
  },
31475
31650
  {
31476
31651
  "kind": "method",
31477
- "name": "_moveItem",
31652
+ "name": "_applyContentHeight",
31478
31653
  "privacy": "private",
31479
31654
  "parameters": [
31480
31655
  {
31481
- "name": "fromIndex",
31482
- "type": {
31483
- "text": "number"
31484
- }
31485
- },
31486
- {
31487
- "name": "toIndex",
31656
+ "name": "height",
31488
31657
  "type": {
31489
- "text": "number"
31658
+ "text": "unknown"
31490
31659
  }
31491
31660
  }
31492
- ],
31493
- "description": "Moves an item from one index to another."
31661
+ ]
31494
31662
  },
31495
31663
  {
31496
31664
  "kind": "method",
31497
- "name": "_submitForm",
31665
+ "name": "_resetContentHeight",
31666
+ "privacy": "private"
31667
+ },
31668
+ {
31669
+ "kind": "field",
31670
+ "name": "_onFrameLoad",
31498
31671
  "privacy": "private",
31499
- "description": "Submits the associated form if a `formaction` attribute is set."
31672
+ "readonly": true
31500
31673
  },
31501
31674
  {
31502
31675
  "kind": "method",
31503
- "name": "_handleDragStart",
31504
- "privacy": "private",
31676
+ "name": "refresh",
31677
+ "description": "Re-fetches the payload and pushes a fresh config to the preview."
31678
+ },
31679
+ {
31680
+ "kind": "method",
31681
+ "name": "setTheme",
31505
31682
  "parameters": [
31506
31683
  {
31507
- "name": "event",
31508
- "type": {
31509
- "text": "DragEvent"
31510
- }
31511
- },
31512
- {
31513
- "name": "key",
31684
+ "name": "theme",
31514
31685
  "type": {
31515
- "text": "string"
31686
+ "text": "Record<string, unknown>"
31516
31687
  }
31517
31688
  }
31518
- ]
31689
+ ],
31690
+ "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."
31519
31691
  },
31520
31692
  {
31521
31693
  "kind": "method",
31522
- "name": "_handleDragEnd",
31694
+ "name": "_postTheme",
31523
31695
  "privacy": "private"
31524
31696
  },
31525
31697
  {
31526
31698
  "kind": "method",
31527
- "name": "_handleDragOver",
31528
- "privacy": "private",
31529
- "parameters": [
31530
- {
31531
- "name": "event",
31532
- "type": {
31533
- "text": "DragEvent"
31534
- }
31535
- },
31536
- {
31537
- "name": "key",
31538
- "type": {
31539
- "text": "string"
31540
- }
31541
- }
31542
- ]
31699
+ "name": "_sendConfig",
31700
+ "privacy": "private"
31543
31701
  },
31544
31702
  {
31545
31703
  "kind": "method",
31546
- "name": "_handleDragLeave",
31547
- "privacy": "private",
31548
- "parameters": [
31549
- {
31550
- "name": "event",
31551
- "type": {
31552
- "text": "DragEvent"
31553
- }
31554
- },
31555
- {
31556
- "name": "key",
31557
- "type": {
31558
- "text": "string"
31559
- }
31560
- }
31561
- ]
31704
+ "name": "_attachForms",
31705
+ "privacy": "private"
31562
31706
  },
31563
31707
  {
31564
- "kind": "method",
31565
- "name": "_handleDrop",
31708
+ "kind": "field",
31709
+ "name": "_onShellSave",
31566
31710
  "privacy": "private",
31567
- "parameters": [
31568
- {
31569
- "name": "event",
31570
- "type": {
31571
- "text": "DragEvent"
31572
- }
31573
- }
31574
- ]
31711
+ "readonly": true
31575
31712
  },
31576
31713
  {
31577
31714
  "kind": "method",
31578
- "name": "_handleKeyDown",
31715
+ "name": "_detachForm",
31579
31716
  "privacy": "private",
31580
31717
  "parameters": [
31581
31718
  {
31582
- "name": "event",
31583
- "type": {
31584
- "text": "KeyboardEvent"
31585
- }
31586
- },
31587
- {
31588
- "name": "key",
31719
+ "name": "form",
31589
31720
  "type": {
31590
- "text": "string"
31721
+ "text": "HTMLFormElement"
31591
31722
  }
31592
31723
  }
31593
31724
  ]
31594
31725
  },
31595
31726
  {
31596
- "kind": "method",
31597
- "name": "_handleSlotChange",
31598
- "privacy": "private"
31599
- },
31600
- {
31601
- "kind": "method",
31602
- "name": "checkValidity",
31603
- "return": {
31604
- "type": {
31605
- "text": "boolean"
31606
- }
31607
- },
31608
- "description": "Checks for validity but does not show a validation message."
31727
+ "kind": "field",
31728
+ "name": "_onChange",
31729
+ "privacy": "private",
31730
+ "readonly": true
31609
31731
  },
31610
31732
  {
31611
- "kind": "method",
31612
- "name": "getForm",
31613
- "return": {
31614
- "type": {
31615
- "text": "HTMLFormElement | null"
31616
- }
31617
- },
31618
- "description": "Gets the associated form, if one exists."
31733
+ "kind": "field",
31734
+ "name": "_onSubmit",
31735
+ "privacy": "private",
31736
+ "readonly": true
31619
31737
  },
31620
31738
  {
31621
31739
  "kind": "method",
31622
- "name": "reportValidity",
31623
- "return": {
31624
- "type": {
31625
- "text": "boolean"
31740
+ "name": "_save",
31741
+ "privacy": "private",
31742
+ "parameters": [
31743
+ {
31744
+ "name": "form",
31745
+ "type": {
31746
+ "text": "HTMLFormElement"
31747
+ }
31626
31748
  }
31627
- },
31628
- "description": "Checks for validity and shows the browser's validation message if the control is invalid."
31749
+ ]
31629
31750
  },
31630
31751
  {
31631
31752
  "kind": "method",
31632
- "name": "setCustomValidity",
31753
+ "name": "_fail",
31754
+ "privacy": "private",
31633
31755
  "parameters": [
31634
31756
  {
31635
- "name": "_message",
31636
- "default": "''"
31757
+ "name": "message",
31758
+ "type": {
31759
+ "text": "string"
31760
+ }
31637
31761
  }
31638
- ],
31639
- "description": "Sets a custom validation message. Pass an empty string to restore validity."
31762
+ ]
31640
31763
  }
31641
31764
  ],
31642
31765
  "events": [
31643
31766
  {
31644
- "description": "Emitted when the order of items changes.",
31645
- "name": "zn-change"
31646
- },
31647
- {
31648
- "description": "Emitted when items are reordered. Call `getPriorityMap()` on the component to get the updated `{ key: string, priority: number }[]` array.",
31649
- "name": "zn-reorder"
31767
+ "description": "Emitted when the preview reports a render error or a save fails.",
31768
+ "name": "zn-error"
31650
31769
  }
31651
31770
  ],
31652
31771
  "attributes": [
31653
31772
  {
31654
- "name": "name",
31773
+ "name": "src",
31655
31774
  "type": {
31656
31775
  "text": "string"
31657
31776
  },
31658
31777
  "default": "''",
31659
- "description": "The name prefix for form submission. Each item generates a hidden input named `{name}[{itemValue}]`\nwith the priority number as its value.",
31660
- "fieldName": "name"
31661
- },
31662
- {
31663
- "name": "value",
31664
- "type": {
31665
- "text": "string[]"
31666
- },
31667
- "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.",
31668
- "fieldName": "value"
31778
+ "description": "URL of the preview shell page (tokened embed URL).",
31779
+ "fieldName": "src"
31669
31780
  },
31670
31781
  {
31671
- "name": "label",
31782
+ "name": "frame-origin",
31672
31783
  "type": {
31673
31784
  "text": "string"
31674
31785
  },
31675
31786
  "default": "''",
31676
- "description": "The component's label. Required for proper accessibility.",
31677
- "fieldName": "label"
31787
+ "description": "Expected origin of the iframe; all postMessage traffic is checked against it.",
31788
+ "fieldName": "frameOrigin"
31678
31789
  },
31679
31790
  {
31680
- "name": "label-tooltip",
31791
+ "name": "data-uri",
31681
31792
  "type": {
31682
31793
  "text": "string"
31683
31794
  },
31684
31795
  "default": "''",
31685
- "description": "Text that appears in a tooltip next to the label.",
31686
- "fieldName": "labelTooltip"
31796
+ "description": "Endpoint returning the hp-preview:config payload JSON. The console proxy rewrites this attribute to an app-prefixed path for proper fetch resolution.",
31797
+ "fieldName": "dataUri"
31687
31798
  },
31688
31799
  {
31689
- "name": "help-text",
31800
+ "name": "watch",
31690
31801
  "type": {
31691
31802
  "text": "string"
31692
31803
  },
31693
- "default": "''",
31694
- "description": "Help text that describes how to use the component.",
31695
- "fieldName": "helpText"
31804
+ "default": "'form[data-auto-save]'",
31805
+ "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.",
31806
+ "fieldName": "watch"
31696
31807
  },
31697
31808
  {
31698
- "name": "form",
31809
+ "name": "refresh-on",
31699
31810
  "type": {
31700
31811
  "text": "string"
31701
31812
  },
31702
- "default": "''",
31703
- "description": "Associates the control with a form by id. The form must be in the same document or shadow root.",
31704
- "fieldName": "form"
31705
- },
31706
- {
31707
- "name": "size",
31708
- "type": {
31709
- "text": "'small' | 'medium' | 'large'"
31710
- },
31711
- "default": "'medium'",
31712
- "description": "The size of the list items.",
31713
- "fieldName": "size"
31714
- },
31715
- {
31716
- "name": "disabled",
31717
- "type": {
31718
- "text": "boolean"
31719
- },
31720
- "default": "false",
31721
- "description": "Whether the priority list is disabled.",
31722
- "fieldName": "disabled"
31813
+ "default": "'form'",
31814
+ "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.",
31815
+ "fieldName": "refreshOn"
31723
31816
  },
31724
31817
  {
31725
- "name": "required",
31818
+ "name": "debounce",
31726
31819
  "type": {
31727
- "text": "boolean"
31820
+ "text": "number"
31728
31821
  },
31729
- "default": "false",
31730
- "description": "Ensures the form control has a value before allowing submission.",
31731
- "fieldName": "required"
31822
+ "default": "400",
31823
+ "description": "Debounce in ms between a form change and its auto-save.",
31824
+ "fieldName": "debounce"
31732
31825
  },
31733
31826
  {
31734
- "name": "priority-start",
31827
+ "name": "zoom",
31735
31828
  "type": {
31736
31829
  "text": "number"
31737
31830
  },
31738
31831
  "default": "1",
31739
- "description": "The starting priority number. Defaults to 1.",
31740
- "fieldName": "priorityStart"
31741
- },
31742
- {
31743
- "name": "formaction",
31744
- "type": {
31745
- "text": "string"
31746
- },
31747
- "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.",
31748
- "fieldName": "formAction"
31749
- },
31750
- {
31751
- "name": "order",
31752
- "type": {
31753
- "text": "string"
31754
- },
31755
- "default": "''",
31756
- "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.",
31757
- "fieldName": "order"
31758
- }
31759
- ],
31760
- "superclass": {
31761
- "name": "ZincElement",
31762
- "module": "/src/internal/zinc-element"
31763
- },
31764
- "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.",
31765
- "tagNameWithoutPrefix": "priority-list",
31766
- "tagName": "zn-priority-list",
31767
- "customElement": true,
31768
- "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 */",
31769
- "documentation": "https://zinc.style/components/priority-list",
31770
- "status": "experimental",
31771
- "since": "1.0",
31772
- "dependencies": [
31773
- "zn-icon"
31774
- ]
31775
- }
31776
- ],
31777
- "exports": [
31778
- {
31779
- "kind": "js",
31780
- "name": "default",
31781
- "declaration": {
31782
- "name": "ZnPriorityList",
31783
- "module": "components/priority-list/priority-list.js"
31784
- }
31785
- }
31786
- ]
31787
- },
31788
- {
31789
- "kind": "javascript-module",
31790
- "path": "components/progress-bar/progress-bar.js",
31791
- "declarations": [
31792
- {
31793
- "kind": "class",
31794
- "description": "",
31795
- "name": "ZnProgressBar",
31796
- "cssProperties": [
31797
- {
31798
- "description": "The color of the progress bar background track.",
31799
- "name": "--zn-border-color"
31800
- },
31801
- {
31802
- "description": "The color of the progress bar fill.",
31803
- "name": "--zn-progress-bar-color"
31804
- },
31805
- {
31806
- "description": "The color of the caption text.",
31807
- "name": "--zn-text-heading"
31808
- },
31809
- {
31810
- "description": "The color of the progress percentage and description text.",
31811
- "name": "--zn-text"
31812
- },
31813
- {
31814
- "description": "The spacing between header/footer and the progress bar.",
31815
- "name": "--zn-spacing-x-small"
31816
- }
31817
- ],
31818
- "cssParts": [
31819
- {
31820
- "description": "The header container that contains the caption and progress text.",
31821
- "name": "header"
31822
- },
31823
- {
31824
- "description": "The caption text element.",
31825
- "name": "caption"
31826
- },
31827
- {
31828
- "description": "The progress percentage text element.",
31829
- "name": "progress"
31830
- },
31831
- {
31832
- "description": "The SVG element containing the progress bar.",
31833
- "name": "bar"
31834
- },
31835
- {
31836
- "description": "The background track of the progress bar.",
31837
- "name": "track"
31838
- },
31839
- {
31840
- "description": "The filled portion of the progress bar indicating progress.",
31841
- "name": "fill"
31842
- },
31843
- {
31844
- "description": "The footer container that contains the description.",
31845
- "name": "footer"
31846
- },
31847
- {
31848
- "description": "The description text element.",
31849
- "name": "info"
31850
- }
31851
- ],
31852
- "members": [
31853
- {
31854
- "kind": "field",
31855
- "name": "caption",
31856
- "type": {
31857
- "text": "string | undefined"
31858
- },
31859
- "attribute": "caption",
31860
- "reflects": true
31861
- },
31862
- {
31863
- "kind": "field",
31864
- "name": "color",
31865
- "type": {
31866
- "text": "ProgressBarColor"
31867
- },
31868
- "default": "'current'",
31869
- "attribute": "color",
31870
- "reflects": true
31871
- },
31872
- {
31873
- "kind": "field",
31874
- "name": "description",
31875
- "type": {
31876
- "text": "string | undefined"
31877
- },
31878
- "attribute": "description",
31879
- "reflects": true
31880
- },
31881
- {
31882
- "kind": "field",
31883
- "name": "value",
31884
- "type": {
31885
- "text": "number | undefined"
31886
- },
31887
- "attribute": "value",
31888
- "reflects": true
31832
+ "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.",
31833
+ "fieldName": "zoom"
31889
31834
  },
31890
31835
  {
31891
- "kind": "field",
31892
- "name": "showProgress",
31893
- "type": {
31894
- "text": "boolean | undefined"
31895
- },
31896
- "attribute": "show-progress",
31897
- "reflects": true
31898
- }
31899
- ],
31900
- "attributes": [
31901
- {
31902
- "name": "caption",
31836
+ "name": "min-height",
31903
31837
  "type": {
31904
- "text": "string | undefined"
31838
+ "text": "number"
31905
31839
  },
31906
- "fieldName": "caption"
31840
+ "default": "480",
31841
+ "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.",
31842
+ "fieldName": "minHeight"
31907
31843
  },
31908
31844
  {
31909
- "name": "color",
31845
+ "name": "fill",
31910
31846
  "type": {
31911
- "text": "ProgressBarColor"
31847
+ "text": "boolean"
31912
31848
  },
31913
- "default": "'current'",
31914
- "fieldName": "color"
31849
+ "default": "false",
31850
+ "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.",
31851
+ "fieldName": "fill"
31915
31852
  },
31916
31853
  {
31917
- "name": "description",
31854
+ "name": "device",
31918
31855
  "type": {
31919
- "text": "string | undefined"
31856
+ "text": "PreviewFrameDevice"
31920
31857
  },
31921
- "fieldName": "description"
31858
+ "default": "'desktop'",
31859
+ "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.",
31860
+ "fieldName": "device"
31922
31861
  },
31923
31862
  {
31924
- "name": "value",
31863
+ "name": "backdrop",
31925
31864
  "type": {
31926
- "text": "number | undefined"
31865
+ "text": "'dots' | 'panel'"
31927
31866
  },
31928
- "fieldName": "value"
31867
+ "default": "'dots'",
31868
+ "description": "Backdrop behind the stage: `dots` (default) is the canvas dot grid; `panel` is a plain `rgb(var(--zn-panel))` fill.",
31869
+ "fieldName": "backdrop"
31929
31870
  },
31930
31871
  {
31931
- "name": "show-progress",
31872
+ "name": "interactive",
31932
31873
  "type": {
31933
- "text": "boolean | undefined"
31874
+ "text": "boolean"
31934
31875
  },
31935
- "fieldName": "showProgress"
31876
+ "default": "false",
31877
+ "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.",
31878
+ "fieldName": "interactive"
31936
31879
  }
31937
31880
  ],
31938
31881
  "superclass": {
31939
31882
  "name": "ZincElement",
31940
31883
  "module": "/src/internal/zinc-element"
31941
31884
  },
31942
- "summary": "Progress bars provide visual feedback about the completion status of a task or process.",
31943
- "tagNameWithoutPrefix": "progress-bar",
31944
- "tagName": "zn-progress-bar",
31885
+ "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.",
31886
+ "tagNameWithoutPrefix": "preview-frame",
31887
+ "tagName": "zn-preview-frame",
31945
31888
  "customElement": true,
31946
- "jsDoc": "/**\n * @summary Progress bars provide visual feedback about the completion status of a task or process.\n * @documentation https://zinc.style/components/progress-bar\n * @status experimental\n * @since 1.0\n *\n * @csspart header - The header container that contains the caption and progress text.\n * @csspart caption - The caption text element.\n * @csspart progress - The progress percentage text element.\n * @csspart bar - The SVG element containing the progress bar.\n * @csspart track - The background track of the progress bar.\n * @csspart fill - The filled portion of the progress bar indicating progress.\n * @csspart footer - The footer container that contains the description.\n * @csspart info - The description text element.\n *\n * @cssproperty --zn-border-color - The color of the progress bar background track.\n * @cssproperty --zn-progress-bar-color - The color of the progress bar fill.\n * @cssproperty --zn-text-heading - The color of the caption text.\n * @cssproperty --zn-text - The color of the progress percentage and description text.\n * @cssproperty --zn-spacing-x-small - The spacing between header/footer and the progress bar.\n */",
31947
- "documentation": "https://zinc.style/components/progress-bar",
31889
+ "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 */",
31890
+ "documentation": "https://zinc.style/components/preview-frame",
31948
31891
  "status": "experimental",
31949
31892
  "since": "1.0"
31950
31893
  }
@@ -31954,8 +31897,8 @@
31954
31897
  "kind": "js",
31955
31898
  "name": "default",
31956
31899
  "declaration": {
31957
- "name": "ZnProgressBar",
31958
- "module": "components/progress-bar/progress-bar.js"
31900
+ "name": "ZnPreviewFrame",
31901
+ "module": "components/preview-frame/preview-frame.js"
31959
31902
  }
31960
31903
  }
31961
31904
  ]
@@ -34649,7 +34592,7 @@
34649
34592
  "name": "slashController",
34650
34593
  "privacy": "private",
34651
34594
  "readonly": true,
34652
- "default": "new SlashMenuController(this, { menu: () => this.mountSlashMenu(), // The menu only belongs in a block that is nothing but the slash command — a // block prefix like \"## \" is not valid remarkd part-way through a line. items: () => this.isSlashBlock() ? SLASH_ITEMS.filter(item => item.action !== 'include' || !!this.includeUrl) : [], onSelect: item => this.handleSlashSelect(item) })"
34595
+ "default": "new SlashMenuController(this, { menu: () => this.mountSlashMenu(), // The menu only belongs in a block that is nothing but the slash command — a // block prefix like \"## \" is not valid remarkd part-way through a line. items: () => this.isSlashBlock() ? SLASH_ITEMS.filter(item => this.slashItemAvailable(item)) : [], onSelect: item => this.handleSlashSelect(item) })"
34653
34596
  },
34654
34597
  {
34655
34598
  "kind": "field",
@@ -34847,6 +34790,84 @@
34847
34790
  "privacy": "private",
34848
34791
  "default": "''"
34849
34792
  },
34793
+ {
34794
+ "kind": "field",
34795
+ "name": "linkPickerOpen",
34796
+ "type": {
34797
+ "text": "boolean"
34798
+ },
34799
+ "privacy": "private",
34800
+ "default": "false"
34801
+ },
34802
+ {
34803
+ "kind": "field",
34804
+ "name": "linkQuery",
34805
+ "type": {
34806
+ "text": "string"
34807
+ },
34808
+ "privacy": "private",
34809
+ "default": "''"
34810
+ },
34811
+ {
34812
+ "kind": "field",
34813
+ "name": "linkResults",
34814
+ "type": {
34815
+ "text": "LinkOption[] | null"
34816
+ },
34817
+ "privacy": "private",
34818
+ "default": "null"
34819
+ },
34820
+ {
34821
+ "kind": "field",
34822
+ "name": "linkSearchFailed",
34823
+ "type": {
34824
+ "text": "boolean"
34825
+ },
34826
+ "privacy": "private",
34827
+ "default": "false"
34828
+ },
34829
+ {
34830
+ "kind": "field",
34831
+ "name": "linkSelection",
34832
+ "type": {
34833
+ "text": "[number, number] | null"
34834
+ },
34835
+ "privacy": "private",
34836
+ "default": "null"
34837
+ },
34838
+ {
34839
+ "kind": "field",
34840
+ "name": "linkSearchTimer",
34841
+ "type": {
34842
+ "text": "ReturnType<typeof setTimeout> | undefined"
34843
+ },
34844
+ "privacy": "private"
34845
+ },
34846
+ {
34847
+ "kind": "field",
34848
+ "name": "linkSearchToken",
34849
+ "type": {
34850
+ "text": "number"
34851
+ },
34852
+ "privacy": "private",
34853
+ "default": "0"
34854
+ },
34855
+ {
34856
+ "kind": "field",
34857
+ "name": "linkRefs",
34858
+ "privacy": "private",
34859
+ "default": "new Map<string, LinkOption | null>()",
34860
+ "description": "Resolved link targets by reference; a null value is one the app does not know."
34861
+ },
34862
+ {
34863
+ "kind": "field",
34864
+ "name": "linkRefsPending",
34865
+ "type": {
34866
+ "text": "boolean"
34867
+ },
34868
+ "privacy": "private",
34869
+ "default": "false"
34870
+ },
34850
34871
  {
34851
34872
  "kind": "field",
34852
34873
  "name": "pendingDragHandle",
@@ -34960,6 +34981,16 @@
34960
34981
  "description": "Endpoint listing the Includes this document may embed, as\n`{\"items\":[{id,title,description,scope,keywords,languages,url}]}`. Labels the\nchips rendered for `include::` directives and feeds the include picker.",
34961
34982
  "attribute": "include-url"
34962
34983
  },
34984
+ {
34985
+ "kind": "field",
34986
+ "name": "linkUrl",
34987
+ "type": {
34988
+ "text": "string"
34989
+ },
34990
+ "default": "''",
34991
+ "description": "Endpoint the article link picker searches, as\n`{\"items\":[{ref,kind,title,context,status}]}`. Queried with `?q=<term>` as\nthe author types and with `?refs=a,b` to resolve the references a body\nalready carries.",
34992
+ "attribute": "link-url"
34993
+ },
34963
34994
  {
34964
34995
  "kind": "field",
34965
34996
  "name": "allowRaw",
@@ -35082,6 +35113,10 @@
35082
35113
  "kind": "method",
35083
35114
  "name": "handleIncludeUrlChange"
35084
35115
  },
35116
+ {
35117
+ "kind": "method",
35118
+ "name": "handleLinkUrlChange"
35119
+ },
35085
35120
  {
35086
35121
  "kind": "method",
35087
35122
  "name": "splitBlocks",
@@ -35690,6 +35725,31 @@
35690
35725
  }
35691
35726
  ]
35692
35727
  },
35728
+ {
35729
+ "kind": "method",
35730
+ "name": "pickLink",
35731
+ "privacy": "private",
35732
+ "description": "Opens the picker over the block being edited. The caret range is captured\nnow: the picker's own filter takes focus, so the textarea's selection is\ngone by the time an option is chosen."
35733
+ },
35734
+ {
35735
+ "kind": "field",
35736
+ "name": "closeLinkPicker",
35737
+ "privacy": "private"
35738
+ },
35739
+ {
35740
+ "kind": "method",
35741
+ "name": "searchLinks",
35742
+ "privacy": "private",
35743
+ "parameters": [
35744
+ {
35745
+ "name": "term",
35746
+ "type": {
35747
+ "text": "string"
35748
+ }
35749
+ }
35750
+ ],
35751
+ "description": "Debounced; only the newest response is kept."
35752
+ },
35693
35753
  {
35694
35754
  "kind": "field",
35695
35755
  "name": "closeIncludePicker",
@@ -35795,6 +35855,25 @@
35795
35855
  },
35796
35856
  "description": "Fetches the include list once; every later caller shares the same promise."
35797
35857
  },
35858
+ {
35859
+ "kind": "method",
35860
+ "name": "resolveContentLinks",
35861
+ "privacy": "private",
35862
+ "description": "Resolves the references in the body that have not been resolved yet, so a\nlink whose target is gone can be marked. A failed request records nothing:\nan unanswered reference is not a broken one."
35863
+ },
35864
+ {
35865
+ "kind": "method",
35866
+ "name": "markContentLinks",
35867
+ "privacy": "private",
35868
+ "parameters": [
35869
+ {
35870
+ "name": "root",
35871
+ "type": {
35872
+ "text": "Element"
35873
+ }
35874
+ }
35875
+ ]
35876
+ },
35798
35877
  {
35799
35878
  "kind": "method",
35800
35879
  "name": "autosize",
@@ -35972,7 +36051,44 @@
35972
36051
  }
35973
36052
  }
35974
36053
  ],
35975
- "description": "An inline action needs an open block to apply its mark to."
36054
+ "description": "Inline marks and the article link both apply into an open block, not a new one."
36055
+ },
36056
+ {
36057
+ "kind": "method",
36058
+ "name": "actionAvailable",
36059
+ "privacy": "private",
36060
+ "return": {
36061
+ "type": {
36062
+ "text": "boolean"
36063
+ }
36064
+ },
36065
+ "parameters": [
36066
+ {
36067
+ "name": "action",
36068
+ "type": {
36069
+ "text": "EditorAction"
36070
+ }
36071
+ }
36072
+ ],
36073
+ "description": "A picker action with no endpoint configured is not offered at all."
36074
+ },
36075
+ {
36076
+ "kind": "method",
36077
+ "name": "slashItemAvailable",
36078
+ "privacy": "private",
36079
+ "return": {
36080
+ "type": {
36081
+ "text": "boolean"
36082
+ }
36083
+ },
36084
+ "parameters": [
36085
+ {
36086
+ "name": "item",
36087
+ "type": {
36088
+ "text": "SlashMenuItem"
36089
+ }
36090
+ }
36091
+ ]
35976
36092
  },
35977
36093
  {
35978
36094
  "kind": "method",
@@ -36032,6 +36148,24 @@
36032
36148
  "name": "renderIncludePicker",
36033
36149
  "privacy": "private"
36034
36150
  },
36151
+ {
36152
+ "kind": "method",
36153
+ "name": "renderLinkPicker",
36154
+ "privacy": "private"
36155
+ },
36156
+ {
36157
+ "kind": "method",
36158
+ "name": "insertLink",
36159
+ "privacy": "private",
36160
+ "parameters": [
36161
+ {
36162
+ "name": "item",
36163
+ "type": {
36164
+ "text": "LinkOption"
36165
+ }
36166
+ }
36167
+ ]
36168
+ },
36035
36169
  {
36036
36170
  "kind": "method",
36037
36171
  "name": "renderImagePicker",
@@ -36103,6 +36237,15 @@
36103
36237
  "description": "Endpoint listing the Includes this document may embed, as\n`{\"items\":[{id,title,description,scope,keywords,languages,url}]}`. Labels the\nchips rendered for `include::` directives and feeds the include picker.",
36104
36238
  "fieldName": "includeUrl"
36105
36239
  },
36240
+ {
36241
+ "name": "link-url",
36242
+ "type": {
36243
+ "text": "string"
36244
+ },
36245
+ "default": "''",
36246
+ "description": "Endpoint the article link picker searches, as\n`{\"items\":[{ref,kind,title,context,status}]}`. Queried with `?q=<term>` as\nthe author types and with `?refs=a,b` to resolve the references a body\nalready carries.",
36247
+ "fieldName": "linkUrl"
36248
+ },
36106
36249
  {
36107
36250
  "name": "allow-raw",
36108
36251
  "type": {
@@ -49712,12 +49855,16 @@
49712
49855
  "module": "src/components/panel/panel.component.ts"
49713
49856
  }
49714
49857
  },
49858
+ {
49859
+ "description": "The form group holding the caption, the language select and the fields.",
49860
+ "name": "form-group"
49861
+ },
49715
49862
  {
49716
49863
  "description": "The row of buttons at the bottom of the body.",
49717
49864
  "name": "actions"
49718
49865
  },
49719
49866
  {
49720
- "description": "The label and select that choose the language every child is editing.",
49867
+ "description": "The select that chooses the language every child is editing, in the group's chip slot.",
49721
49868
  "name": "language-field"
49722
49869
  },
49723
49870
  {
@@ -49743,7 +49890,7 @@
49743
49890
  }
49744
49891
  },
49745
49892
  {
49746
- "description": "Content displayed in the grey panel footer. The header belongs to the language select; nothing else is slotted into it.",
49893
+ "description": "Content displayed in the grey panel footer.",
49747
49894
  "name": "footer",
49748
49895
  "inheritedFrom": {
49749
49896
  "name": "ZnPanel",
@@ -49759,7 +49906,7 @@
49759
49906
  "text": "object"
49760
49907
  },
49761
49908
  "static": true,
49762
- "default": "{ 'zn-chip': ZnChip, 'zn-header': ZnHeader, 'zn-option': ZnOption, 'zn-select': ZnSelect }"
49909
+ "default": "{ 'zn-chip': ZnChip, 'zn-form-group': ZnFormGroup, 'zn-option': ZnOption, 'zn-select': ZnSelect }"
49763
49910
  },
49764
49911
  {
49765
49912
  "kind": "field",
@@ -49775,9 +49922,19 @@
49775
49922
  "text": "string"
49776
49923
  },
49777
49924
  "default": "''",
49778
- "description": "The caption shown in the panel header. An alias for the inherited `caption`, which wins where both are set.",
49925
+ "description": "The form group's label. An alias for the inherited `caption`, which wins where both are set.",
49779
49926
  "attribute": "label"
49780
49927
  },
49928
+ {
49929
+ "kind": "field",
49930
+ "name": "helpText",
49931
+ "type": {
49932
+ "text": "string"
49933
+ },
49934
+ "default": "''",
49935
+ "description": "Sits under the label, above the language select, as help text does in any other form group.",
49936
+ "attribute": "help-text"
49937
+ },
49781
49938
  {
49782
49939
  "kind": "field",
49783
49940
  "name": "inline",
@@ -49785,7 +49942,7 @@
49785
49942
  "text": "boolean"
49786
49943
  },
49787
49944
  "default": "false",
49788
- "description": "Drops the panel chrome — border, background and padding — so the group reads as a section of the form around it\nrather than a panel of its own. For groups nested inside another panel, where the fields would otherwise sit\nindented behind a second border.",
49945
+ "description": "Drops the panel chrome — border, background and padding — so the group reads as a section of the surrounding form\nrather than a panel of its own. For groups nested inside another panel, where the fields would otherwise sit\nindented behind a second border.",
49789
49946
  "attribute": "inline",
49790
49947
  "reflects": true
49791
49948
  },
@@ -49881,7 +50038,7 @@
49881
50038
  }
49882
50039
  }
49883
50040
  ],
49884
- "description": "`English (EN)`, or the code alone where the configured name already is the code."
50041
+ "description": "The configured name, or the code where `languages` does not name the language."
49885
50042
  },
49886
50043
  {
49887
50044
  "kind": "method",
@@ -50100,16 +50257,25 @@
50100
50257
  "text": "string"
50101
50258
  },
50102
50259
  "default": "''",
50103
- "description": "The caption shown in the panel header. An alias for the inherited `caption`, which wins where both are set.",
50260
+ "description": "The form group's label. An alias for the inherited `caption`, which wins where both are set.",
50104
50261
  "fieldName": "label"
50105
50262
  },
50263
+ {
50264
+ "name": "help-text",
50265
+ "type": {
50266
+ "text": "string"
50267
+ },
50268
+ "default": "''",
50269
+ "description": "Sits under the label, above the language select, as help text does in any other form group.",
50270
+ "fieldName": "helpText"
50271
+ },
50106
50272
  {
50107
50273
  "name": "inline",
50108
50274
  "type": {
50109
50275
  "text": "boolean"
50110
50276
  },
50111
50277
  "default": "false",
50112
- "description": "Drops the panel chrome — border, background and padding — so the group reads as a section of the form around it\nrather than a panel of its own. For groups nested inside another panel, where the fields would otherwise sit\nindented behind a second border.",
50278
+ "description": "Drops the panel chrome — border, background and padding — so the group reads as a section of the surrounding form\nrather than a panel of its own. For groups nested inside another panel, where the fields would otherwise sit\nindented behind a second border.",
50113
50279
  "fieldName": "inline"
50114
50280
  },
50115
50281
  {
@@ -50271,13 +50437,13 @@
50271
50437
  "tagNameWithoutPrefix": "translation-group",
50272
50438
  "tagName": "zn-translation-group",
50273
50439
  "customElement": true,
50274
- "jsDoc": "/**\n * @summary Puts several zn-translations fields behind one language select, so a whole form's worth of copy is\n * translated a language at a time.\n * @documentation https://zinc.style/components/translation-group\n * @status experimental\n * @since 1.0\n *\n * The select sits at the top right of the header, opposite the caption. Choosing a language switches every child at\n * once, and each child hides its own select while it is in a group — `grouped` is set on them here.\n *\n * Closed, the select carries how many target languages are done — `1/5`. Its options each carry a chip aggregated\n * across the children:\n *\n * - `Translated` — every child has a value for it\n * - `Partial` — only some children do\n * - `English` — none do, so all of them fall back to the English text\n *\n * `Empty` replaces the last of those for English itself, which has nothing to fall back to. English is the source\n * rather than a translation, so it is also left out of the `n of m translated` count beside the label.\n *\n * The children own their values; this component only chooses which language is shown and reports on what they hold.\n * It reads them back on every child `zn-change`, so the chips and the count follow an edit as it is typed.\n *\n * Extends `zn-panel`, so `caption`, `icon`, `flush`, `transparent` and the `footer` slot behave as they do there.\n * Nested inside another panel, add `inline` to drop the chrome and keep the fields aligned with the surrounding form.\n *\n * @dependency zn-chip\n * @dependency zn-header\n * @dependency zn-option\n * @dependency zn-select\n *\n * @event zn-language-change - Emitted when the active language changes. Detail: `{ language: string }`.\n *\n * @slot - The `zn-translations` fields the select drives.\n * @slot actions - Buttons for the bottom of the panel, on the white body rather than the grey footer. They sit on\n * the right, as zinc's form action rows do; `align=\"start\"` moves one to the left. Write them in the order they\n * should be read — the sides are set by CSS ordering, so markup order is what a keyboard follows.\n * @slot footer - Content displayed in the grey panel footer. The header belongs to the language select; nothing\n * else is slotted into it.\n *\n * @csspart base - The component's base wrapper.\n * @csspart actions - The row of buttons at the bottom of the body.\n * @csspart language-field - The label and select that choose the language every child is editing.\n * @csspart language-select - The select itself.\n */",
50440
+ "jsDoc": "/**\n * @summary Puts several zn-translations fields behind one language select, so a whole form's worth of copy is\n * translated a language at a time.\n * @documentation https://zinc.style/components/translation-group\n * @status experimental\n * @since 1.0\n *\n * The fields sit in a `zn-form-group`, so the caption, help text and the language select share its label column and\n * the fields line up with every other form group around them. Choosing a language switches every child at once, and\n * each child hides its own select while it is in a group — `grouped` is set on them here.\n *\n * The select is searchable. Each option holds its language code as its value, so typing `de` finds German without the\n * code being on show.\n *\n * Closed, the select carries how many target languages are done — `1/5`. Its options each carry a chip aggregated\n * across the children:\n *\n * - `Translated` — every child has a value for it\n * - `Partial` — only some children do\n * - `English` — none do, so all of them fall back to the English text\n *\n * `Empty` replaces the last of those for English itself, which has nothing to fall back to. English is the source\n * rather than a translation, so it is also left out of the `n of m translated` count beside the label.\n *\n * The children own their values; this component only chooses which language is shown and reports on what they hold.\n * It reads them back on every child `zn-change`, so the chips and the count follow an edit as it is typed.\n *\n * Extends `zn-panel`, so `caption`, `flush`, `transparent` and the `footer` slot behave as they do there. Nested\n * inside another panel, add `inline` to drop the chrome and keep the fields aligned with the surrounding form.\n *\n * @dependency zn-chip\n * @dependency zn-form-group\n * @dependency zn-option\n * @dependency zn-select\n *\n * @event zn-language-change - Emitted when the active language changes. Detail: `{ language: string }`.\n *\n * @slot - The `zn-translations` fields the select drives.\n * @slot actions - Buttons for the bottom of the panel, on the white body rather than the grey footer. They sit on\n * the right, as zinc's form action rows do; `align=\"start\"` moves one to the left. Write them in the order they\n * should be read — the sides are set by CSS ordering, so markup order is what a keyboard follows.\n * @slot footer - Content displayed in the grey panel footer.\n *\n * @csspart base - The component's base wrapper.\n * @csspart form-group - The form group holding the caption, the language select and the fields.\n * @csspart actions - The row of buttons at the bottom of the body.\n * @csspart language-field - The select that chooses the language every child is editing, in the group's chip slot.\n * @csspart language-select - The select itself.\n */",
50275
50441
  "documentation": "https://zinc.style/components/translation-group",
50276
50442
  "status": "experimental",
50277
50443
  "since": "1.0",
50278
50444
  "dependencies": [
50279
50445
  "zn-chip",
50280
- "zn-header",
50446
+ "zn-form-group",
50281
50447
  "zn-option",
50282
50448
  "zn-select"
50283
50449
  ],
@@ -50725,7 +50891,7 @@
50725
50891
  }
50726
50892
  }
50727
50893
  ],
50728
- "description": "`English (EN)` — the configured name plus its code, unless the name already is the code, in which case the code\nalone. `languages` is written both ways: `{\"en\": \"English\"}` and `{\"en\": \"EN\"}`."
50894
+ "description": "The configured name, or the code where `languages` does not name the language."
50729
50895
  },
50730
50896
  {
50731
50897
  "kind": "method",
@@ -51332,7 +51498,7 @@
51332
51498
  "package": {
51333
51499
  "name": "@kubex/zinc",
51334
51500
  "description": "A collection of web components for building web applications based off of @shoelace-style/Shoelace",
51335
- "version": "1.1.117",
51501
+ "version": "1.1.119",
51336
51502
  "author": "",
51337
51503
  "license": "MIT"
51338
51504
  }