@vuu-ui/vuu-popups 0.8.1-debug → 0.8.2-debug

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.
package/esm/index.js CHANGED
@@ -181,14 +181,14 @@ var isDrawer = (component) => component.type === Drawer_default;
181
181
  var isVertical = ({ props: { position = "left" } }) => position.match(/top|bottom/);
182
182
  var DockLayout = (props) => {
183
183
  const { children, className: classNameProp, id, style } = props;
184
- const classBase11 = "vuuDockLayout";
184
+ const classBase12 = "vuuDockLayout";
185
185
  const [drawers, content] = partition(children, isDrawer);
186
186
  const [verticalDrawers, horizontalDrawers] = partition(drawers, isVertical);
187
187
  const orientation = verticalDrawers.length === 0 ? "horizontal" : horizontalDrawers.length === 0 ? "vertical" : "both";
188
- const className = cx5(classBase11, classNameProp, `${classBase11}-${orientation}`);
188
+ const className = cx5(classBase12, classNameProp, `${classBase12}-${orientation}`);
189
189
  return /* @__PURE__ */ jsxs3("div", { className, id, style, children: [
190
190
  drawers,
191
- /* @__PURE__ */ jsx4("div", { className: `${classBase11}-content`, children: content })
191
+ /* @__PURE__ */ jsx4("div", { className: `${classBase12}-content`, children: content })
192
192
  ] });
193
193
  };
194
194
  DockLayout.displayName = "DockLayout";
@@ -1353,10 +1353,13 @@ function useResizeObserver(ref, dimensions, onResize, reportInitialSize = false)
1353
1353
  const dimensionsRef = useRef5(dimensions);
1354
1354
  const measure = useCallback9((target) => {
1355
1355
  const rect = target.getBoundingClientRect();
1356
- return dimensionsRef.current.reduce((map, dim) => {
1357
- map[dim] = getTargetSize(target, rect, dim);
1358
- return map;
1359
- }, {});
1356
+ return dimensionsRef.current.reduce(
1357
+ (map, dim) => {
1358
+ map[dim] = getTargetSize(target, rect, dim);
1359
+ return map;
1360
+ },
1361
+ {}
1362
+ );
1360
1363
  }, []);
1361
1364
  useLayoutEffect(() => {
1362
1365
  const target = ref.current;
@@ -1382,7 +1385,9 @@ function useResizeObserver(ref, dimensions, onResize, reportInitialSize = false)
1382
1385
  }
1383
1386
  if (target) {
1384
1387
  if (observedMap.has(target)) {
1385
- throw Error("useResizeObserver attemping to observe same element twice");
1388
+ throw Error(
1389
+ "useResizeObserver attemping to observe same element twice"
1390
+ );
1386
1391
  }
1387
1392
  void registerObserver();
1388
1393
  }
@@ -1393,7 +1398,7 @@ function useResizeObserver(ref, dimensions, onResize, reportInitialSize = false)
1393
1398
  cleanedUp = true;
1394
1399
  }
1395
1400
  };
1396
- }, [ref, measure]);
1401
+ }, [ref, measure, reportInitialSize, onResize]);
1397
1402
  useLayoutEffect(() => {
1398
1403
  const target = ref.current;
1399
1404
  const record = observedMap.get(target);
@@ -1920,6 +1925,7 @@ var View = forwardRef5(function View2(props, forwardedRef) {
1920
1925
  className,
1921
1926
  collapsed,
1922
1927
  closeable,
1928
+ "data-path": dataPath,
1923
1929
  "data-resizeable": dataResizeable,
1924
1930
  dropTargets,
1925
1931
  expanded,
@@ -1927,7 +1933,7 @@ var View = forwardRef5(function View2(props, forwardedRef) {
1927
1933
  id: idProp,
1928
1934
  header,
1929
1935
  orientation = "horizontal",
1930
- path,
1936
+ path = dataPath,
1931
1937
  resize = "responsive",
1932
1938
  resizeable = dataResizeable,
1933
1939
  tearOut,
@@ -2064,7 +2070,7 @@ var Header = ({
2064
2070
  const [editing, setEditing] = useState8(false);
2065
2071
  const viewDispatch = useViewDispatch();
2066
2072
  const handleClose = (evt) => viewDispatch == null ? void 0 : viewDispatch({ type: "remove" }, evt);
2067
- const classBase11 = "vuuHeader";
2073
+ const classBase12 = "vuuHeader";
2068
2074
  const handleTitleMouseDown = () => {
2069
2075
  var _a;
2070
2076
  (_a = labelFieldRef.current) == null ? void 0 : _a.focus();
@@ -2074,9 +2080,9 @@ var Header = ({
2074
2080
  };
2075
2081
  const orientation = collapsed || orientationProp;
2076
2082
  const className = classnames2(
2077
- classBase11,
2083
+ classBase12,
2078
2084
  classNameProp,
2079
- `${classBase11}-${orientation}`
2085
+ `${classBase12}-${orientation}`
2080
2086
  );
2081
2087
  const handleEnterEditMode = () => {
2082
2088
  setEditing(true);
@@ -2209,7 +2215,7 @@ var Palette = ({
2209
2215
  ...props
2210
2216
  }) => {
2211
2217
  const dispatch = useLayoutProviderDispatch();
2212
- const classBase11 = "vuuPalette";
2218
+ const classBase12 = "vuuPalette";
2213
2219
  function handleMouseDown(evt) {
2214
2220
  var _a;
2215
2221
  const target = evt.target;
@@ -2256,7 +2262,7 @@ var Palette = ({
2256
2262
  {
2257
2263
  ...props,
2258
2264
  borderless: true,
2259
- className: cx12(classBase11, className, `${classBase11}-${orientation}`),
2265
+ className: cx12(classBase12, className, `${classBase12}-${orientation}`),
2260
2266
  maxHeight: 800,
2261
2267
  selected: null,
2262
2268
  children: children.map(
@@ -2646,7 +2652,15 @@ import { jsx as jsx28, jsxs as jsxs10 } from "react/jsx-runtime";
2646
2652
 
2647
2653
  // ../vuu-shell/src/login/login-utils.ts
2648
2654
  import { getCookieValue } from "@vuu-ui/vuu-utils";
2649
- var redirectToLogin = (loginUrl = "login.html") => {
2655
+ var getAuthModeFromCookies = () => {
2656
+ const mode = getCookieValue("vuu-auth-mode");
2657
+ return mode != null ? mode : "";
2658
+ };
2659
+ var getDefaultLoginUrl = () => {
2660
+ const authMode = getAuthModeFromCookies();
2661
+ return authMode === "login" ? "login.html" : "demo.html";
2662
+ };
2663
+ var redirectToLogin = (loginUrl = getDefaultLoginUrl()) => {
2650
2664
  window.location.href = loginUrl;
2651
2665
  };
2652
2666
  var logout = (loginUrl) => {
@@ -3754,6 +3768,7 @@ var Viewport = class {
3754
3768
  // TODO roll disabled/suspended into status
3755
3769
  this.status = "";
3756
3770
  this.suspended = false;
3771
+ this.suspendTimer = null;
3757
3772
  this.rangeRequestAlreadyPending = (range) => {
3758
3773
  const { bufferSize } = this;
3759
3774
  const bufferThreshold = bufferSize * 0.25;
@@ -4131,6 +4146,7 @@ var Viewport = class {
4131
4146
  disable(requestId) {
4132
4147
  this.awaitOperation(requestId, { type: "disable" });
4133
4148
  info2 == null ? void 0 : info2(\`disable: \${this.serverViewportId}\`);
4149
+ this.suspended = false;
4134
4150
  return {
4135
4151
  type: DISABLE_VP,
4136
4152
  viewPortId: this.serverViewportId
@@ -4561,7 +4577,19 @@ var ServerProxy = class {
4561
4577
  this.sendIfReady(request, requestId, viewport.status === "subscribed");
4562
4578
  }
4563
4579
  }
4580
+ suspendViewport(viewport) {
4581
+ viewport.suspend();
4582
+ viewport.suspendTimer = setTimeout(() => {
4583
+ info3 == null ? void 0 : info3("suspendTimer expired, escalate suspend to disable");
4584
+ this.disableViewport(viewport);
4585
+ }, 3e3);
4586
+ }
4564
4587
  resumeViewport(viewport) {
4588
+ if (viewport.suspendTimer) {
4589
+ debug4 == null ? void 0 : debug4("clear suspend timer");
4590
+ clearTimeout(viewport.suspendTimer);
4591
+ viewport.suspendTimer = null;
4592
+ }
4565
4593
  const rows = viewport.resume();
4566
4594
  this.postMessageToClient({
4567
4595
  clientViewportId: viewport.clientViewportId,
@@ -4681,7 +4709,7 @@ var ServerProxy = class {
4681
4709
  case "select":
4682
4710
  return this.select(viewport, message);
4683
4711
  case "suspend":
4684
- return viewport.suspend();
4712
+ return this.suspendViewport(viewport);
4685
4713
  case "resume":
4686
4714
  return this.resumeViewport(viewport);
4687
4715
  case "enable":
@@ -6761,8 +6789,8 @@ var Stack3 = class {
6761
6789
  // Start an empty stack
6762
6790
  /// @internal
6763
6791
  static start(p, state, pos = 0) {
6764
- let cx28 = p.parser.context;
6765
- return new Stack3(p, [], state, pos, pos, 0, [], 0, cx28 ? new StackContext(cx28, cx28.start) : null, 0, null);
6792
+ let cx29 = p.parser.context;
6793
+ return new Stack3(p, [], state, pos, pos, 0, [], 0, cx29 ? new StackContext(cx29, cx29.start) : null, 0, null);
6766
6794
  }
6767
6795
  /// The stack's current [context](#lr.ContextTracker) value, if
6768
6796
  /// any. Its type will depend on the context tracker's type
@@ -8263,10 +8291,10 @@ var LRParser = class extends Parser {
8263
8291
  if (config.props)
8264
8292
  copy.nodeSet = this.nodeSet.extend(...config.props);
8265
8293
  if (config.top) {
8266
- let info = this.topRules[config.top];
8267
- if (!info)
8294
+ let info2 = this.topRules[config.top];
8295
+ if (!info2)
8268
8296
  throw new RangeError(`Invalid top rule name ${config.top}`);
8269
- copy.top = info;
8297
+ copy.top = info2;
8270
8298
  }
8271
8299
  if (config.tokenizers)
8272
8300
  copy.tokenizers = this.tokenizers.map((t) => {
@@ -9473,9 +9501,11 @@ import {
9473
9501
  debounce,
9474
9502
  EventEmitter as EventEmitter4,
9475
9503
  itemsOrOrderChanged,
9504
+ logger as logger2,
9476
9505
  throttle,
9477
9506
  uuid as uuid10
9478
9507
  } from "@vuu-ui/vuu-utils";
9508
+ var { info } = logger2("RemoteDataSource");
9479
9509
  var _config2, _groupBy2, _optimize, _range3, _selectedRowsCount3, _size3, _title3;
9480
9510
  var RemoteDataSource = class extends EventEmitter4 {
9481
9511
  constructor({
@@ -9493,8 +9523,6 @@ var RemoteDataSource = class extends EventEmitter4 {
9493
9523
  super();
9494
9524
  this.server = null;
9495
9525
  this.status = "initialising";
9496
- this.disabled = false;
9497
- this.suspended = false;
9498
9526
  __privateAdd(this, _config2, vanillaConfig);
9499
9527
  __privateAdd(this, _groupBy2, []);
9500
9528
  __privateAdd(this, _optimize, "throttle");
@@ -9633,6 +9661,7 @@ var RemoteDataSource = class extends EventEmitter4 {
9633
9661
  }
9634
9662
  unsubscribe() {
9635
9663
  var _a, _b;
9664
+ info == null ? void 0 : info(`unsubscribe #${this.viewport}`);
9636
9665
  if (this.viewport) {
9637
9666
  (_a = this.server) == null ? void 0 : _a.unsubscribe(this.viewport);
9638
9667
  }
@@ -9641,8 +9670,9 @@ var RemoteDataSource = class extends EventEmitter4 {
9641
9670
  }
9642
9671
  suspend() {
9643
9672
  var _a;
9673
+ info == null ? void 0 : info(`suspend #${this.viewport}, current status ${this.status}`);
9644
9674
  if (this.viewport) {
9645
- this.suspended = true;
9675
+ this.status = "suspended";
9646
9676
  (_a = this.server) == null ? void 0 : _a.send({
9647
9677
  type: "suspend",
9648
9678
  viewport: this.viewport
@@ -9652,20 +9682,25 @@ var RemoteDataSource = class extends EventEmitter4 {
9652
9682
  }
9653
9683
  resume() {
9654
9684
  var _a;
9655
- if (this.viewport && this.suspended) {
9656
- (_a = this.server) == null ? void 0 : _a.send({
9657
- type: "resume",
9658
- viewport: this.viewport
9659
- });
9660
- this.suspended = false;
9685
+ info == null ? void 0 : info(`resume #${this.viewport}, current status ${this.status}`);
9686
+ if (this.viewport) {
9687
+ if (this.status === "disabled" || this.status === "disabling") {
9688
+ this.enable();
9689
+ } else if (this.status === "suspended") {
9690
+ (_a = this.server) == null ? void 0 : _a.send({
9691
+ type: "resume",
9692
+ viewport: this.viewport
9693
+ });
9694
+ this.status = "subscribed";
9695
+ }
9661
9696
  }
9662
9697
  return this;
9663
9698
  }
9664
9699
  disable() {
9665
9700
  var _a;
9701
+ info == null ? void 0 : info(`disable #${this.viewport}, current status ${this.status}`);
9666
9702
  if (this.viewport) {
9667
9703
  this.status = "disabling";
9668
- this.disabled = true;
9669
9704
  (_a = this.server) == null ? void 0 : _a.send({
9670
9705
  viewport: this.viewport,
9671
9706
  type: "disable"
@@ -9675,13 +9710,13 @@ var RemoteDataSource = class extends EventEmitter4 {
9675
9710
  }
9676
9711
  enable() {
9677
9712
  var _a;
9678
- if (this.viewport && this.disabled) {
9713
+ info == null ? void 0 : info(`enable #${this.viewport}, current status ${this.status}`);
9714
+ if (this.viewport && (this.status === "disabled" || this.status === "disabling")) {
9679
9715
  this.status = "enabling";
9680
9716
  (_a = this.server) == null ? void 0 : _a.send({
9681
9717
  viewport: this.viewport,
9682
9718
  type: "enable"
9683
9719
  });
9684
- this.disabled = false;
9685
9720
  }
9686
9721
  return this;
9687
9722
  }
@@ -10161,7 +10196,7 @@ var ThemeProvider = ({
10161
10196
  ThemeProvider.displayName = "ThemeProvider";
10162
10197
 
10163
10198
  // ../vuu-shell/src/shell.tsx
10164
- import { logger as logger2 } from "@vuu-ui/vuu-utils";
10199
+ import { logger as logger3 } from "@vuu-ui/vuu-utils";
10165
10200
 
10166
10201
  // ../vuu-shell/src/shell-layouts/context-panel/ContextPanel.tsx
10167
10202
  import { Button as Button6 } from "@salt-ds/core";
@@ -10183,7 +10218,7 @@ import { jsx as jsx38, jsxs as jsxs19 } from "react/jsx-runtime";
10183
10218
 
10184
10219
  // ../vuu-shell/src/shell.tsx
10185
10220
  import { jsx as jsx39, jsxs as jsxs20 } from "react/jsx-runtime";
10186
- var { error } = logger2("Shell");
10221
+ var { error } = logger3("Shell");
10187
10222
 
10188
10223
  // ../vuu-shell/src/ShellContextProvider.tsx
10189
10224
  import { createContext as createContext3, useContext as useContext4 } from "react";
@@ -11384,7 +11419,7 @@ var Popup = (props) => {
11384
11419
 
11385
11420
  // src/menu/useContextMenu.tsx
11386
11421
  import { jsx as jsx45 } from "react/jsx-runtime";
11387
- var useContextMenu = (menuBuilder) => {
11422
+ var useContextMenu = (menuBuilder, menuActionHandler) => {
11388
11423
  const ctx = useContext5(ContextMenuContext);
11389
11424
  const [themeClass, densityClass, dataMode] = useThemeAttributes();
11390
11425
  const buildMenuOptions = useCallback32(
@@ -11412,11 +11447,12 @@ var useContextMenu = (menuBuilder) => {
11412
11447
  console.log({
11413
11448
  menuItemDescriptors
11414
11449
  });
11415
- if (menuItemDescriptors.length && (ctx == null ? void 0 : ctx.menuActionHandler)) {
11450
+ const menuHandler = menuActionHandler != null ? menuActionHandler : ctx == null ? void 0 : ctx.menuActionHandler;
11451
+ if (menuItemDescriptors.length && menuHandler) {
11416
11452
  console.log(`showContextMenu ${location2}`, {
11417
11453
  options
11418
11454
  });
11419
- showContextMenu(e, menuItemDescriptors, ctx.menuActionHandler, {
11455
+ showContextMenu(e, menuItemDescriptors, menuHandler, {
11420
11456
  ...ContextMenuProps2,
11421
11457
  className: cx27(
11422
11458
  ContextMenuProps2 == null ? void 0 : ContextMenuProps2.className,
@@ -11438,6 +11474,7 @@ var useContextMenu = (menuBuilder) => {
11438
11474
  ctx == null ? void 0 : ctx.menuBuilders,
11439
11475
  dataMode,
11440
11476
  densityClass,
11477
+ menuActionHandler,
11441
11478
  menuBuilder,
11442
11479
  themeClass
11443
11480
  ]
@@ -11485,6 +11522,60 @@ var showContextMenu = (e, menuDescriptors, handleContextMenuAction, {
11485
11522
  );
11486
11523
  PopupService.showPopup({ left: 0, top: 0, component });
11487
11524
  };
11525
+
11526
+ // src/popup-menu/PopupMenu.tsx
11527
+ import {
11528
+ useCallback as useCallback33,
11529
+ useRef as useRef22,
11530
+ useState as useState18
11531
+ } from "react";
11532
+ import cx28 from "classnames";
11533
+ import { jsx as jsx46 } from "react/jsx-runtime";
11534
+ var classBase11 = "vuuPopupMenu";
11535
+ var getPosition3 = (element) => {
11536
+ if (element) {
11537
+ const { bottom, left } = element.getBoundingClientRect();
11538
+ return { x: left, y: bottom + 6 };
11539
+ }
11540
+ };
11541
+ var PopupMenu = ({
11542
+ className,
11543
+ menuActionHandler,
11544
+ menuBuilder,
11545
+ menuLocation = "header",
11546
+ ...htmlAttributes
11547
+ }) => {
11548
+ const rootRef = useRef22(null);
11549
+ const [menuOpen, setMenuOpen] = useState18(false);
11550
+ const showContextMenu2 = useContextMenu(menuBuilder, menuActionHandler);
11551
+ const handleMenuClose = useCallback33(() => {
11552
+ setMenuOpen(false);
11553
+ }, []);
11554
+ const showColumnMenu = useCallback33(
11555
+ (e) => {
11556
+ setMenuOpen(true);
11557
+ showContextMenu2(e, menuLocation, {
11558
+ ContextMenuProps: {
11559
+ onClose: handleMenuClose,
11560
+ position: getPosition3(rootRef.current)
11561
+ }
11562
+ });
11563
+ },
11564
+ [handleMenuClose, menuLocation, showContextMenu2]
11565
+ );
11566
+ return /* @__PURE__ */ jsx46(
11567
+ "span",
11568
+ {
11569
+ ...htmlAttributes,
11570
+ className: cx28(classBase11, className, {
11571
+ [`${classBase11}-open`]: menuOpen
11572
+ }),
11573
+ "data-icon": "more-vert",
11574
+ onClick: showColumnMenu,
11575
+ ref: rootRef
11576
+ }
11577
+ );
11578
+ };
11488
11579
  export {
11489
11580
  ContextMenu,
11490
11581
  ContextMenuContext,
@@ -11494,6 +11585,7 @@ export {
11494
11585
  MenuItem,
11495
11586
  MenuItemGroup,
11496
11587
  Popup,
11588
+ PopupMenu,
11497
11589
  PopupService,
11498
11590
  Portal,
11499
11591
  Separator,