bm-core-ui 2.9.5 → 2.10.1

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.
Files changed (56) hide show
  1. package/build/@types/index.d.ts +320 -61
  2. package/build/BMCollectionView/BMCollectionView.js +79 -41
  3. package/build/BMCollectionView/BMCollectionViewFlowLayout.js +18 -5
  4. package/build/BMCoreUI.css +45 -18
  5. package/build/BMView/BMMenu.js +135 -7
  6. package/build/BMView/BMView_v2.5.js +59 -0
  7. package/build/BMWindow/BMKeyboardShortcut.js +338 -88
  8. package/build/BMWindow/BMPopover/BMPopover.js +52 -11
  9. package/build/BMWindow/BMWindow.js +32 -6
  10. package/build/Core/BMCoreUI.js +20 -8
  11. package/build/images/AlignBottom.png +0 -0
  12. package/build/images/AlignCenterX.png +0 -0
  13. package/build/images/AlignCenterY.png +0 -0
  14. package/build/images/AlignLeading.png +0 -0
  15. package/build/images/AlignTop.png +0 -0
  16. package/build/images/AlignTrailing.png +0 -0
  17. package/build/images/AllConstraints.png +0 -0
  18. package/build/images/BottomConstraint.png +0 -0
  19. package/build/images/CenterXConstraint.png +0 -0
  20. package/build/images/CenterYConstraint.png +0 -0
  21. package/build/images/CoreUI2.png +0 -0
  22. package/build/images/CoreUI2@2x.png +0 -0
  23. package/build/images/Desktop.png +0 -0
  24. package/build/images/DesktopMini.png +0 -0
  25. package/build/images/EqualHeight.png +0 -0
  26. package/build/images/EqualHorizontalSpacing.png +0 -0
  27. package/build/images/EqualHorizontalSpacingInSuperview.png +0 -0
  28. package/build/images/EqualVerticalSpacing.png +0 -0
  29. package/build/images/EqualVerticalSpacingInSuperview.png +0 -0
  30. package/build/images/EqualWidth.png +0 -0
  31. package/build/images/HeightConstraint.png +0 -0
  32. package/build/images/InactiveConstraints.png +0 -0
  33. package/build/images/Layout.png +0 -0
  34. package/build/images/LayoutVariables.png +0 -0
  35. package/build/images/LeftConstraint.png +0 -0
  36. package/build/images/OwnConstraints.png +0 -0
  37. package/build/images/Phone.png +0 -0
  38. package/build/images/PhoneLandscape.png +0 -0
  39. package/build/images/PhoneLandscapeMini.png +0 -0
  40. package/build/images/PhoneMini.png +0 -0
  41. package/build/images/PhonePortrait.png +0 -0
  42. package/build/images/PhonePortraitMini.png +0 -0
  43. package/build/images/Properties.png +0 -0
  44. package/build/images/RightConstraint.png +0 -0
  45. package/build/images/SubviewConstraints.png +0 -0
  46. package/build/images/Tablet.png +0 -0
  47. package/build/images/TabletLandscape.png +0 -0
  48. package/build/images/TabletLandscapeMini.png +0 -0
  49. package/build/images/TabletMini.png +0 -0
  50. package/build/images/TabletPortrait.png +0 -0
  51. package/build/images/TabletPortraitMini.png +0 -0
  52. package/build/images/TopConstraint.png +0 -0
  53. package/build/images/WidthConstraint.png +0 -0
  54. package/lib/@types/BMCoreUI.min.d.ts +320 -61
  55. package/lib/BMCoreUI.min.js +3 -1
  56. package/package.json +9 -10
@@ -350,8 +350,17 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
350
350
  * The layout object managing this collection view's layout.
351
351
  */
352
352
  _layout: undefined, // <BMCollectionViewLayout>
353
- get layout() { return this._layout; },
353
+ get layout() {
354
+ if (this._transitionLayout && this._layout == this._transitionLayout) {
355
+ return this._layout.targetLayout;
356
+ }
357
+ else {
358
+ return this._layout;
359
+ }
360
+ },
354
361
  set layout(layout) {
362
+ // If data is being updated, wait for the update to finish before updating the
363
+ // layout
355
364
  if (this.isUpdatingData) {
356
365
  var self = this;
357
366
  this.registerDataCompletionCallback(function () {
@@ -360,6 +369,7 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
360
369
  return;
361
370
  }
362
371
 
372
+ // If an animation context is active, perform this change with an animation
363
373
  if (BMAnimationContextGetCurrent()) {
364
374
  if (!this.initialized) {
365
375
  this._layout = layout || new BMCollectionViewFlowLayout();
@@ -378,6 +388,12 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
378
388
  this.invalidateLayout();
379
389
  }
380
390
  },
391
+
392
+ /**
393
+ * Set to a transition layout while an animated layout update is in progress. Undefined
394
+ * in all other cases.
395
+ */
396
+ _transitionLayout: undefined, // <BMCollectionViewLayout, nullable>
381
397
 
382
398
  // MARK: Managed attributes
383
399
 
@@ -388,7 +404,10 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
388
404
  get frame() { return this._frame; },
389
405
  set frame(frame) {
390
406
  // If this frame is assigned as part of a layout animation, don't perform any changes
391
- if (this._layoutAnimator) return Object.getOwnPropertyDescriptor(BMView.prototype, 'frame').set.call(this, frame);
407
+ if (this._layoutAnimator) {
408
+ Object.getOwnPropertyDescriptor(BMView.prototype, 'frame').set.call(this, frame);
409
+ return;
410
+ }
392
411
 
393
412
  const currentFrame = this._frame && this._frame.copy();
394
413
 
@@ -747,8 +766,47 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
747
766
  this._supplementaryViewClasses[args.forReuseIdentifier] = supplementaryViewClass;
748
767
  },
749
768
 
750
- // @override - BMView
751
- initWithDOMNode(node) {
769
+
770
+ /**
771
+ * Initializes this collection view with the specified DOM node and default properties.
772
+ * The collection view will use a `BMCollectionViewFlowLayout` layout object.
773
+ * A valid object should be assigned to the `dataSet` property to fully initialize and use this collection view.
774
+ * @param node <DOMNode> The container that the collection view will manage. This should be an empty div element,
775
+ * otherwise the behaviour of the collection view will be undefined.
776
+ * {
777
+ * @param customScroll <Boolean, nullable> Defaults to `NO`. When set to `YES`, collection view will use custom scrolling in
778
+ * place of regular scrolling. Otherwise, it will use native scrolling. This should only be
779
+ * used with layouts where cell positions depend on the scroll position of collection view.
780
+ * This property cannot be changed after being set in the intializer.
781
+ * }
782
+ * @return <BMCollectionView> A collection view.
783
+ */
784
+ initWithDOMNode(node, args) {
785
+ var customScrollRequired = args && args.customScroll;
786
+
787
+ _BMCollectionViews.set(this, true);
788
+
789
+ this._container = BMJQueryShim.shimWithDOMNode(node);
790
+ this.layout = new BMCollectionViewFlowLayout();
791
+ this.cellCache = {};
792
+ this.retainedCells = [];
793
+ this.allCells = [];
794
+ this.supplementaryViewCache = {};
795
+
796
+ this.attributeCache = {};
797
+
798
+ this._selectedIndexPaths = [];
799
+
800
+ this.customScrollRequired = customScrollRequired;
801
+
802
+ this._cellClasses = {};
803
+ this._supplementaryViewClasses = {};
804
+
805
+ this._measures = {};
806
+ this._measuredIndexPaths = [];
807
+
808
+ this._cellLayoutQueue = BMViewLayoutQueue.layoutQueue();
809
+
752
810
  return BMView.prototype.initWithDOMNode.apply(this, arguments);
753
811
  },
754
812
 
@@ -787,7 +845,8 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
787
845
  },
788
846
 
789
847
  /**
790
- * Should not be invoked manually. It is invoked by collection view to create the initial layout and cells.
848
+ * Should not be invoked manually. Invoked by collection view the first time a data set is assigned
849
+ * to it to create the initial layout and cells.
791
850
  */
792
851
  _init: function () {
793
852
  // If currently invisible, delay the init
@@ -3417,6 +3476,10 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
3417
3476
  if (i == event.changedTouches.length) return;
3418
3477
  }
3419
3478
 
3479
+ if (this.delegate && this.delegate.collectionViewWillFinishInteractiveMovementForCell) {
3480
+ this.delegate.collectionViewWillFinishInteractiveMovementForCell(this, cell, {atIndexPath: cell.indexPath});
3481
+ }
3482
+
3420
3483
  // Remove the previously added handlers from window
3421
3484
  window.removeEventListener(touchIdentifier !== undefined ? 'touchmove' : 'mousemove', mousemoveHandler, {capture: YES, passive: NO});
3422
3485
  window.removeEventListener(touchIdentifier !== undefined ? 'touchend' : 'mouseup', mouseupHandler, {capture: YES, passive: NO});
@@ -3440,10 +3503,6 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
3440
3503
  let sourceRect = BMRectMakeWithNodeFrame(draggingShadow);
3441
3504
  let targetRect = BMRectMakeWithNodeFrame(cell.node);
3442
3505
 
3443
- if (this.delegate && this.delegate.collectionViewWillFinishInteractiveMovementForCell) {
3444
- this.delegate.collectionViewWillFinishInteractiveMovementForCell(this, cell, {atIndexPath: cell.indexPath});
3445
- }
3446
-
3447
3506
  // Resolve the current dragging operation
3448
3507
  resolveIsDragging();
3449
3508
 
@@ -4710,6 +4769,7 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
4710
4769
 
4711
4770
  // Temporarily make the transition layout the current layout
4712
4771
  this._layout = transitionLayout;
4772
+ this._transitionLayout = transitionLayout;
4713
4773
 
4714
4774
  // Retain all transitioning cells during this change
4715
4775
  let retainedCells = [];
@@ -4781,6 +4841,7 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
4781
4841
  });
4782
4842
 
4783
4843
  self._layout = layout;
4844
+ self._transitionLayout = undefined;
4784
4845
 
4785
4846
  if (self.iScroll) self.iScroll.refresh();
4786
4847
 
@@ -5018,6 +5079,8 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
5018
5079
  if (BM_COLLECTION_VIEW_USE_STATIC_CONTEXT) BMAnimationContextBeginStatic();
5019
5080
 
5020
5081
  if (animated === undefined) animated = YES;
5082
+
5083
+ var self = this;
5021
5084
 
5022
5085
  let resolveUpdateData;
5023
5086
  this._dataUpdatePromise = new Promise(function (resolve, reject) {resolveUpdateData = resolve});
@@ -5026,8 +5089,13 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
5026
5089
  this._updateSelectionIndexPaths();
5027
5090
 
5028
5091
  if (!animated) {
5092
+ this.layout.collectionViewWillStartUpdates(undefined);
5093
+
5029
5094
  // Instant data set changes are identical to layout invalidations.
5030
5095
  this.invalidateLayout();
5096
+
5097
+ // Inform the layout that the full data update has finished preparing and all animations were started
5098
+ self.layout.collectionViewDidStartUpdates();
5031
5099
 
5032
5100
  // Have the data set refresh the contents of each cell
5033
5101
  for (var i = 0; i < this.allCells.length; i++) {
@@ -5361,8 +5429,6 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
5361
5429
 
5362
5430
  this.dataSet.useOldData(NO);
5363
5431
 
5364
- var self = this;
5365
-
5366
5432
  var contentSizeWidthApplied = NO;
5367
5433
  var contentSizeHeightApplied = NO;
5368
5434
 
@@ -6162,7 +6228,7 @@ BMCollectionView.prototype = BMExtend(BM_COLLECTION_VIEW_USE_BMVIEW_SUBCLASS ? O
6162
6228
  * @return <BMCollectionView> A collection view.
6163
6229
  */
6164
6230
  BMCollectionView.collectionViewForNode = function (node, args) {
6165
- let collectionView = BMCollectionViewMakeWithContainer(BMJQueryShim.shimWithDOMNode(node), args);
6231
+ let collectionView = new this().initWithDOMNode(node, args);
6166
6232
 
6167
6233
  return collectionView;
6168
6234
  }
@@ -6193,35 +6259,7 @@ BMCollectionView.collectionView = function () {
6193
6259
  * @return <BMCollectionView> A collection view.
6194
6260
  */
6195
6261
  export function BMCollectionViewMakeWithContainer(container, options) {
6196
- var customScrollRequired = options && options.customScroll;
6197
- var collectionView = new BMCollectionView();
6198
-
6199
- _BMCollectionViews.set(collectionView, true);
6200
-
6201
- collectionView._container = container;
6202
- collectionView.layout = new BMCollectionViewFlowLayout();
6203
- collectionView.cellCache = {};
6204
- collectionView.retainedCells = [];
6205
- collectionView.allCells = [];
6206
- collectionView.supplementaryViewCache = {};
6207
-
6208
- collectionView.attributeCache = {};
6209
-
6210
- collectionView._selectedIndexPaths = [];
6211
-
6212
- collectionView.customScrollRequired = customScrollRequired;
6213
-
6214
- collectionView._cellClasses = {};
6215
- collectionView._supplementaryViewClasses = {};
6216
-
6217
- collectionView._measures = {};
6218
- collectionView._measuredIndexPaths = [];
6219
-
6220
- collectionView._cellLayoutQueue = BMViewLayoutQueue.layoutQueue();
6221
-
6222
- collectionView.initWithDOMNode(container[0]);
6223
-
6224
- return collectionView;
6262
+ return new BMCollectionView().initWithDOMNode(container[0], options);
6225
6263
  }
6226
6264
 
6227
6265
  // @endtype
@@ -22,20 +22,20 @@ export var BMCollectionViewTableLayoutSupplementaryView = Object.freeze({ // <en
22
22
  /**
23
23
  * Indicates that this supplementary view is a footer.
24
24
  */
25
- Footer: "Footer", // <enum>
25
+ Footer: "Footer", // <string>
26
26
 
27
27
  /**
28
28
  * Indicates that this supplementary view is a header.
29
29
  */
30
- Header: "Header", // <enum>
30
+ Header: "Header", // <string>
31
31
 
32
32
  /**
33
33
  * Indicates that this supplementary is an empty content view.
34
34
  */
35
- Empty: "Empty" // <enum>
35
+ Empty: "Empty" // <string>
36
36
  });
37
37
 
38
- // @type
38
+ // @endtype
39
39
 
40
40
  // @type BMCollectionViewTableLayout extends BMCollectionViewLayout
41
41
 
@@ -1394,7 +1394,7 @@ export var BMCollectionViewFlowLayoutOrientation = Object.freeze({ // <enum>
1394
1394
  * As the flow layout only provides supplementary views for section headers and footers and empty data sets just like the table layout,
1395
1395
  * the identifiers used by the table layout are reused in this case.
1396
1396
  */
1397
- export var BMCollectionViewFlowLayoutSupplementaryView = BMCollectionViewTableLayoutSupplementaryView;
1397
+ export var BMCollectionViewFlowLayoutSupplementaryView = BMCollectionViewTableLayoutSupplementaryView; // <typeof BMCollectionViewTableLayoutSupplementaryView>
1398
1398
 
1399
1399
  /**
1400
1400
  * The flow layout arranges cells in a horiztonally (TO DO) or vertically scrolling container.
@@ -1758,6 +1758,18 @@ BMCollectionViewFlowLayout.prototype = BMExtend(Object.create(BMCollectionViewLa
1758
1758
  // When using custom cell sizes, the layout will pre-compute the entire layout attributes
1759
1759
  this.cachedLayout = { sections: [] };
1760
1760
 
1761
+ // If this is invoked as part of a batch or animated layout update, ensure that the new layout
1762
+ // is measured up to at least the current collection view bounds
1763
+ if (this._expectedCellSize && this._copy) {
1764
+ target = target || {};
1765
+ if (target.targetRect) {
1766
+ target.targetRect = target.targetRect.rectByUnionWithRect(this.collectionView.bounds)
1767
+ }
1768
+ else {
1769
+ target.targetRect = this.collectionView.bounds;
1770
+ }
1771
+ }
1772
+
1761
1773
  /*
1762
1774
  declare interface BMCollectionViewFlowLayoutCache {
1763
1775
  availableWidth: number;
@@ -4885,6 +4897,7 @@ BMCollectionViewFlowLayout.prototype = BMExtend(Object.create(BMCollectionViewLa
4885
4897
  var copy = new BMCollectionViewFlowLayout();
4886
4898
 
4887
4899
  copy.cellSize = this.cellSize && this.cellSize.copy();
4900
+ copy.expectedCellSize = this.expectedCellSize && this.expectedCellSize.copy();
4888
4901
  copy.rowSpacing = this.rowSpacing;
4889
4902
 
4890
4903
  copy.showsHeaders = this.showsHeaders;
@@ -256,24 +256,24 @@
256
256
  }
257
257
 
258
258
  @media (prefers-color-scheme: dark) {
259
- .BMWindow {
259
+ .BMDarkModeAuto.BMWindow {
260
260
  box-shadow: rgba(0, 0, 0, .66) 0px 0px 0px 1px, rgba(0, 0, 0, .66) 0px 12px 64px;
261
261
  background-color: rgba(255, 255, 255, .6);
262
262
  }
263
263
 
264
- .BMWindowInactive {
264
+ .BMDarkModeAuto.BMWindowInactive {
265
265
  background: rgba(70, 70, 70, 1);
266
266
  }
267
267
 
268
- .BMNonModalWindow {
268
+ .BMDarkModeAuto.BMNonModalWindow {
269
269
  box-shadow: rgba(0, 0, 0, .66) 0px 0px 0px 1px, rgba(0, 0, 0, .66) 0px 6px 32px;
270
270
  }
271
271
 
272
- .BMWindow.BMKeyWindow, .BMToolWindow {
272
+ .BMDarkModeAuto.BMWindow.BMKeyWindow, .BMDarkModeAuto.BMToolWindow {
273
273
  box-shadow: rgba(0, 0, 0, .66) 0px 0px 0px 1px, rgba(0, 0, 0, .66) 0px 12px 64px;
274
274
  }
275
275
 
276
- .BMWindow::after {
276
+ .BMDarkModeAuto.BMWindow::after {
277
277
  content: '';
278
278
  position: absolute;
279
279
  pointer-events: none;
@@ -288,7 +288,7 @@
288
288
  box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, .25) inset;
289
289
  }
290
290
 
291
- .BMWindowDragHandle {
291
+ .BMDarkModeAuto.BMWindowDragHandle {
292
292
  color: rgba(255, 255, 255, .33);
293
293
  }
294
294
  }
@@ -313,7 +313,7 @@
313
313
  /* In theory, this would break browsers that support dark mode but not backdrop filter;
314
314
  In practice, only Safari supports both. */
315
315
  @media (prefers-color-scheme: dark) {
316
- .BMWindowContent {
316
+ .BMDarkModeAuto.BMWindowContent {
317
317
  background-color: rgba(0, 0, 0, .75) !important;
318
318
  }
319
319
  }
@@ -323,7 +323,7 @@
323
323
  }
324
324
 
325
325
  @media (prefers-color-scheme: dark) {
326
- .BMWindowBackground {
326
+ .BMDarkModeAuto.BMWindowBackground {
327
327
  background-color: #1e1e1e !important; /* tw-important */
328
328
  }
329
329
  }
@@ -1294,6 +1294,10 @@ input:not(:checked) + .BMWindowSwitchGutter > .BMWindowSwitchKnob, .BMWindowSwit
1294
1294
  -webkit-tap-highlight-color: transparent;
1295
1295
  }
1296
1296
 
1297
+ .BMMenuItemDisabled.BMMenuItem {
1298
+ color: rgba(0, 0, 0, .4);
1299
+ }
1300
+
1297
1301
  .BMLayoutEditorConstraintPopupOption {
1298
1302
  padding-right: 64px;
1299
1303
  }
@@ -1330,11 +1334,21 @@ input:not(:checked) + .BMWindowSwitchGutter > .BMWindowSwitchKnob, .BMWindowSwit
1330
1334
  flex-grow: 1;
1331
1335
  }
1332
1336
 
1337
+ .BMMenuItemHint {
1338
+ margin-left: 48px;
1339
+
1340
+ display: flex;
1341
+ align-items: center;
1342
+ justify-content: center;
1343
+
1344
+ padding: 0px 16px;
1345
+
1346
+ opacity: .33;
1347
+ }
1348
+
1333
1349
  .BMMenuItemDisclosure {
1334
1350
  width: 24px;
1335
1351
  height: 24px;
1336
-
1337
- margin-left: 48px;
1338
1352
 
1339
1353
  font-weight: 600;
1340
1354
 
@@ -1343,6 +1357,12 @@ input:not(:checked) + .BMWindowSwitchGutter > .BMWindowSwitchKnob, .BMWindowSwit
1343
1357
  display: flex;
1344
1358
  align-items: center;
1345
1359
  justify-content: center;
1360
+
1361
+ display: none;
1362
+ }
1363
+
1364
+ .BMMenuItemDisclosure.BMMenuItemDisclosureSubmenu {
1365
+ display: block;
1346
1366
  }
1347
1367
 
1348
1368
  .BMMenuItemDisclosureSubmenu::after {
@@ -1371,7 +1391,7 @@ input:not(:checked) + .BMWindowSwitchGutter > .BMWindowSwitchKnob, .BMWindowSwit
1371
1391
  }
1372
1392
  }
1373
1393
 
1374
- .BMLayoutEditorConstraintPopupOption:hover, .BMMenuTouch > .BMMenuItem:active, .BMMenuItem.BMMenuItemHighlighted {
1394
+ .BMLayoutEditorConstraintPopupOption:hover, .BMMenuTouch > .BMMenuItem:not(.BMMenuItemDisabled):active, .BMMenuItem.BMMenuItemHighlighted {
1375
1395
  background: rgb(0, 128, 255);
1376
1396
  color: white;
1377
1397
  }
@@ -1381,7 +1401,7 @@ input:not(:checked) + .BMWindowSwitchGutter > .BMWindowSwitchKnob, .BMWindowSwit
1381
1401
  color: rgba(0, 0, 0, .8);
1382
1402
  }
1383
1403
 
1384
- .BMLayoutEditorConstraintPopupOption:active, .BMMenuTouch > .BMMenuItem:hover {
1404
+ .BMLayoutEditorConstraintPopupOption:active, .BMMenuTouch > .BMMenuItem:not(.BMMenuItemDisabled):hover {
1385
1405
  background: transparent;
1386
1406
  color: rgba(0, 0, 0, .8);
1387
1407
  }
@@ -1410,7 +1430,11 @@ input:not(:checked) + .BMWindowSwitchGutter > .BMWindowSwitchKnob, .BMWindowSwit
1410
1430
  color: rgba(255, 255, 255, .9);
1411
1431
  }
1412
1432
 
1413
- .BMLayoutEditorConstraintPopupOption:active, .BMMenuTouch > .BMMenuItem:hover {
1433
+ .BMMenuItem.BMMenuItemDisabled {
1434
+ color: rgba(255, 255, 255, .45);
1435
+ }
1436
+
1437
+ .BMLayoutEditorConstraintPopupOption:active, .BMMenuTouch > .BMMenuItem:not(.BMMenuItemDisabled):hover {
1414
1438
  background: transparent;
1415
1439
  color: white;
1416
1440
  }
@@ -2528,6 +2552,9 @@ input:not(:checked) + .BMWindowSwitchGutter > .BMWindowSwitchKnob, .BMWindowSwit
2528
2552
 
2529
2553
  .BMPopover {
2530
2554
  position: absolute;
2555
+
2556
+ /* This is required otherwise the mix-blend-mode on the drop shadow layer doesn't work */
2557
+ z-index: unset !important;
2531
2558
  }
2532
2559
 
2533
2560
  .BMPopoverOverlay {
@@ -2605,7 +2632,7 @@ The drop shadow layer contains the drop shadow effect only.
2605
2632
  }
2606
2633
 
2607
2634
  @media (prefers-color-scheme: dark) {
2608
- .BMPopoverDropShadowContainer {
2635
+ .BMDarkModeAuto.BMPopoverDropShadowContainer {
2609
2636
  filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 1)) drop-shadow(0px 12px 64px rgba(0, 0, 0, .66));
2610
2637
  }
2611
2638
  }
@@ -2642,11 +2669,11 @@ The background layer contains the background.
2642
2669
  }
2643
2670
 
2644
2671
  @media (prefers-color-scheme: dark) {
2645
- .BMPopoverBackground {
2672
+ .BMDarkModeAuto.BMPopoverBackground {
2646
2673
  background: transparent;
2647
2674
  }
2648
2675
 
2649
- .BMPopoverBackgroundDarkModeContainer {
2676
+ .BMDarkModeAuto.BMPopoverBackgroundDarkModeContainer {
2650
2677
  display: block;
2651
2678
 
2652
2679
  position: absolute;
@@ -2659,7 +2686,7 @@ The background layer contains the background.
2659
2686
  opacity: .8;
2660
2687
  }
2661
2688
 
2662
- .BMPopoverBackgroundDarkModeOutline {
2689
+ .BMDarkModeAuto.BMPopoverBackgroundDarkModeOutline {
2663
2690
  background-color: rgb(100, 100, 100);
2664
2691
 
2665
2692
  position: absolute;
@@ -2670,7 +2697,7 @@ The background layer contains the background.
2670
2697
  top: 0px;
2671
2698
  }
2672
2699
 
2673
- .BMPopoverBackgroundDarkModeFill {
2700
+ .BMDarkModeAuto.BMPopoverBackgroundDarkModeFill {
2674
2701
  background-color: rgb(40, 40, 40);
2675
2702
 
2676
2703
  position: absolute;