@orion-studios/payload-studio 0.6.0-beta.140 → 0.6.0-beta.142

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.
@@ -1125,7 +1125,8 @@ var registerProjectDynamicComponents = (editor, adapter) => {
1125
1125
  name: `data-orion-${trait.name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)}`,
1126
1126
  options: trait.options,
1127
1127
  placeholder: trait.placeholder,
1128
- type: trait.type
1128
+ type: trait.type,
1129
+ ...trait.type === "checkbox" ? { valueFalse: "false", valueTrue: "true" } : {}
1129
1130
  }))
1130
1131
  ]
1131
1132
  }
@@ -1405,10 +1406,89 @@ var decorateBuilderNumericSteppers = (root = document) => {
1405
1406
  field.appendChild(stepper);
1406
1407
  });
1407
1408
  };
1409
+ var getStylePanelTabFields = (panel) => Array.from(
1410
+ panel.querySelectorAll(
1411
+ [
1412
+ 'input:not([type="hidden"]):not([type="radio"]):not([disabled])',
1413
+ "select:not([disabled])",
1414
+ "textarea:not([disabled])"
1415
+ ].join(",")
1416
+ )
1417
+ ).filter((element) => element.tabIndex >= 0 && element.offsetParent !== null).sort((first, second) => {
1418
+ const firstRect = first.getBoundingClientRect();
1419
+ const secondRect = second.getBoundingClientRect();
1420
+ const rowDelta = firstRect.top - secondRect.top;
1421
+ if (Math.abs(rowDelta) > 4) {
1422
+ return rowDelta;
1423
+ }
1424
+ return firstRect.left - secondRect.left;
1425
+ });
1426
+ var decorateStylePanelTabOrder = () => {
1427
+ const panel = document.getElementById("orion-builder-v2-styles");
1428
+ if (!panel) {
1429
+ return;
1430
+ }
1431
+ panel.querySelectorAll('input[type="radio"]').forEach((input) => {
1432
+ input.tabIndex = -1;
1433
+ });
1434
+ if (panel.dataset.orionTabOrderBound === "true") {
1435
+ return;
1436
+ }
1437
+ panel.dataset.orionTabOrderBound = "true";
1438
+ panel.addEventListener(
1439
+ "keydown",
1440
+ (event) => {
1441
+ if (event.key !== "Tab" || event.defaultPrevented) {
1442
+ return;
1443
+ }
1444
+ const activeElement = document.activeElement;
1445
+ if (!activeElement || !panel.contains(activeElement)) {
1446
+ return;
1447
+ }
1448
+ const fields = getStylePanelTabFields(panel);
1449
+ const currentIndex = fields.indexOf(activeElement);
1450
+ if (currentIndex < 0) {
1451
+ return;
1452
+ }
1453
+ const nextIndex = event.shiftKey ? currentIndex - 1 : currentIndex + 1;
1454
+ const nextField = fields[nextIndex];
1455
+ if (!nextField) {
1456
+ return;
1457
+ }
1458
+ event.preventDefault();
1459
+ nextField.focus();
1460
+ if (nextField instanceof HTMLInputElement || nextField instanceof HTMLTextAreaElement) {
1461
+ nextField.select?.();
1462
+ }
1463
+ },
1464
+ true
1465
+ );
1466
+ };
1467
+ var decorateBuilderTraitToggles = () => {
1468
+ const traitsRoot = document.getElementById("orion-builder-v2-traits");
1469
+ if (!traitsRoot) {
1470
+ return;
1471
+ }
1472
+ traitsRoot.querySelectorAll('input[type="checkbox"]').forEach((input) => {
1473
+ const trait = input.closest(".gjs-trt-trait");
1474
+ trait?.classList.add("has-orion-builder-toggle-trait");
1475
+ input.setAttribute("role", "switch");
1476
+ input.setAttribute("aria-checked", input.checked ? "true" : "false");
1477
+ if (input.dataset.orionToggleBound === "true") {
1478
+ return;
1479
+ }
1480
+ input.dataset.orionToggleBound = "true";
1481
+ input.addEventListener("change", () => {
1482
+ input.setAttribute("aria-checked", input.checked ? "true" : "false");
1483
+ });
1484
+ });
1485
+ };
1408
1486
  var decorateBuilderControls = (root = document) => {
1409
1487
  decorateBuilderSettingHelp(root);
1410
1488
  decorateBuilderColorEyeDroppers(root);
1411
1489
  decorateBuilderNumericSteppers(root);
1490
+ decorateStylePanelTabOrder();
1491
+ decorateBuilderTraitToggles();
1412
1492
  };
1413
1493
  var closeBuilderHelpPopovers = (except) => {
1414
1494
  document.querySelectorAll(".is-builder-help-open").forEach((element) => {
@@ -1001,7 +1001,8 @@ var registerProjectDynamicComponents = (editor, adapter) => {
1001
1001
  name: `data-orion-${trait.name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)}`,
1002
1002
  options: trait.options,
1003
1003
  placeholder: trait.placeholder,
1004
- type: trait.type
1004
+ type: trait.type,
1005
+ ...trait.type === "checkbox" ? { valueFalse: "false", valueTrue: "true" } : {}
1005
1006
  }))
1006
1007
  ]
1007
1008
  }
@@ -1281,10 +1282,89 @@ var decorateBuilderNumericSteppers = (root = document) => {
1281
1282
  field.appendChild(stepper);
1282
1283
  });
1283
1284
  };
1285
+ var getStylePanelTabFields = (panel) => Array.from(
1286
+ panel.querySelectorAll(
1287
+ [
1288
+ 'input:not([type="hidden"]):not([type="radio"]):not([disabled])',
1289
+ "select:not([disabled])",
1290
+ "textarea:not([disabled])"
1291
+ ].join(",")
1292
+ )
1293
+ ).filter((element) => element.tabIndex >= 0 && element.offsetParent !== null).sort((first, second) => {
1294
+ const firstRect = first.getBoundingClientRect();
1295
+ const secondRect = second.getBoundingClientRect();
1296
+ const rowDelta = firstRect.top - secondRect.top;
1297
+ if (Math.abs(rowDelta) > 4) {
1298
+ return rowDelta;
1299
+ }
1300
+ return firstRect.left - secondRect.left;
1301
+ });
1302
+ var decorateStylePanelTabOrder = () => {
1303
+ const panel = document.getElementById("orion-builder-v2-styles");
1304
+ if (!panel) {
1305
+ return;
1306
+ }
1307
+ panel.querySelectorAll('input[type="radio"]').forEach((input) => {
1308
+ input.tabIndex = -1;
1309
+ });
1310
+ if (panel.dataset.orionTabOrderBound === "true") {
1311
+ return;
1312
+ }
1313
+ panel.dataset.orionTabOrderBound = "true";
1314
+ panel.addEventListener(
1315
+ "keydown",
1316
+ (event) => {
1317
+ if (event.key !== "Tab" || event.defaultPrevented) {
1318
+ return;
1319
+ }
1320
+ const activeElement = document.activeElement;
1321
+ if (!activeElement || !panel.contains(activeElement)) {
1322
+ return;
1323
+ }
1324
+ const fields = getStylePanelTabFields(panel);
1325
+ const currentIndex = fields.indexOf(activeElement);
1326
+ if (currentIndex < 0) {
1327
+ return;
1328
+ }
1329
+ const nextIndex = event.shiftKey ? currentIndex - 1 : currentIndex + 1;
1330
+ const nextField = fields[nextIndex];
1331
+ if (!nextField) {
1332
+ return;
1333
+ }
1334
+ event.preventDefault();
1335
+ nextField.focus();
1336
+ if (nextField instanceof HTMLInputElement || nextField instanceof HTMLTextAreaElement) {
1337
+ nextField.select?.();
1338
+ }
1339
+ },
1340
+ true
1341
+ );
1342
+ };
1343
+ var decorateBuilderTraitToggles = () => {
1344
+ const traitsRoot = document.getElementById("orion-builder-v2-traits");
1345
+ if (!traitsRoot) {
1346
+ return;
1347
+ }
1348
+ traitsRoot.querySelectorAll('input[type="checkbox"]').forEach((input) => {
1349
+ const trait = input.closest(".gjs-trt-trait");
1350
+ trait?.classList.add("has-orion-builder-toggle-trait");
1351
+ input.setAttribute("role", "switch");
1352
+ input.setAttribute("aria-checked", input.checked ? "true" : "false");
1353
+ if (input.dataset.orionToggleBound === "true") {
1354
+ return;
1355
+ }
1356
+ input.dataset.orionToggleBound = "true";
1357
+ input.addEventListener("change", () => {
1358
+ input.setAttribute("aria-checked", input.checked ? "true" : "false");
1359
+ });
1360
+ });
1361
+ };
1284
1362
  var decorateBuilderControls = (root = document) => {
1285
1363
  decorateBuilderSettingHelp(root);
1286
1364
  decorateBuilderColorEyeDroppers(root);
1287
1365
  decorateBuilderNumericSteppers(root);
1366
+ decorateStylePanelTabOrder();
1367
+ decorateBuilderTraitToggles();
1288
1368
  };
1289
1369
  var closeBuilderHelpPopovers = (except) => {
1290
1370
  document.querySelectorAll(".is-builder-help-open").forEach((element) => {
@@ -1180,6 +1180,79 @@
1180
1180
  resize: vertical;
1181
1181
  }
1182
1182
 
1183
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait {
1184
+ border: 1px solid #e4c6b3;
1185
+ border-radius: 8px;
1186
+ margin-bottom: 8px !important;
1187
+ min-height: 54px;
1188
+ padding: 10px 12px;
1189
+ }
1190
+
1191
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait .gjs-trt-trait__wrp {
1192
+ align-items: center !important;
1193
+ display: grid !important;
1194
+ gap: 12px !important;
1195
+ grid-template-columns: minmax(0, 1fr) auto !important;
1196
+ width: 100% !important;
1197
+ }
1198
+
1199
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait .gjs-label-wrp,
1200
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait .gjs-field-wrp,
1201
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait .gjs-trt-trait__cnt {
1202
+ display: block !important;
1203
+ margin: 0 !important;
1204
+ width: auto !important;
1205
+ }
1206
+
1207
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait .gjs-trt-trait__label,
1208
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait .gjs-label {
1209
+ margin: 0 !important;
1210
+ white-space: normal !important;
1211
+ }
1212
+
1213
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait .gjs-field {
1214
+ background: transparent !important;
1215
+ border: 0 !important;
1216
+ box-shadow: none !important;
1217
+ height: auto !important;
1218
+ min-height: 0 !important;
1219
+ overflow: visible !important;
1220
+ padding: 0 !important;
1221
+ width: auto !important;
1222
+ }
1223
+
1224
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait input[type='checkbox'] {
1225
+ appearance: none;
1226
+ background: radial-gradient(circle at 8px 50%, #ffffff 0 6px, transparent 6.5px), #f1e3d6;
1227
+ border: 1px solid #d6b7a1 !important;
1228
+ border-radius: 999px;
1229
+ box-shadow: none;
1230
+ box-sizing: border-box;
1231
+ cursor: pointer;
1232
+ display: block;
1233
+ height: 18px !important;
1234
+ margin: 0 !important;
1235
+ max-width: none !important;
1236
+ min-height: 0 !important;
1237
+ min-width: 0 !important;
1238
+ padding: 0 !important;
1239
+ transition:
1240
+ background-color 0.15s ease,
1241
+ border-color 0.15s ease,
1242
+ box-shadow 0.15s ease;
1243
+ width: 34px !important;
1244
+ }
1245
+
1246
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait input[type='checkbox']:checked {
1247
+ background: radial-gradient(circle at calc(100% - 8px) 50%, #ffffff 0 6px, transparent 6.5px), var(--builder-v2-accent);
1248
+ border-color: rgba(255, 255, 255, 0.72) !important;
1249
+ }
1250
+
1251
+ .orion-builder-v2-inspector #orion-builder-v2-traits .gjs-trt-trait.has-orion-builder-toggle-trait input[type='checkbox']:focus-visible {
1252
+ outline: 2px solid rgba(35, 54, 84, 0.32) !important;
1253
+ outline-offset: 3px;
1254
+ }
1255
+
1183
1256
  .orion-builder-v2-editor .gjs-sm-sectors {
1184
1257
  display: grid;
1185
1258
  gap: 10px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-studios/payload-studio",
3
- "version": "0.6.0-beta.140",
3
+ "version": "0.6.0-beta.142",
4
4
  "description": "Base CMS, builder, and custom admin toolkit for Orion Studios websites",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",