@aperture-browser/session-react 0.0.0-nightly.130.8809feddb141 → 0.0.0-nightly.131.764dc151c439

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/dist/index.d.ts CHANGED
@@ -39,9 +39,11 @@ interface SessionProps {
39
39
  readonly features?: SessionFeatures;
40
40
  /** Rendered at the start of the title bar row, before the tab strip. */
41
41
  readonly leading?: ReactNode;
42
+ /** Rendered at the end of the title bar row, after the participants. */
43
+ readonly trailing?: ReactNode;
42
44
  /** Rendered at the start of the toolbar row, before the navigation buttons. */
43
45
  readonly toolbarLeading?: ReactNode;
44
- /** Rendered at the end of the toolbar row, after the menus. */
46
+ /** Rendered at the end of the toolbar row, before the menus. */
45
47
  readonly toolbarTrailing?: ReactNode;
46
48
  }
47
49
  interface ApertureSessionProps extends SessionProps {
@@ -58,6 +60,7 @@ declare function Session({
58
60
  access,
59
61
  features,
60
62
  leading,
63
+ trailing,
61
64
  toolbarLeading,
62
65
  toolbarTrailing
63
66
  }: SessionProps): import("react").JSX.Element;
@@ -80,8 +83,9 @@ declare const copyTextWithToast: (value: string, onCopied?: () => void) => Effec
80
83
  //#region src/components/browser-control-pane.d.ts
81
84
  type BrowserControlPaneProps = {
82
85
  control: UseBrowserControlResult; /** Rendered at the start of the title bar row, before the tab strip. */
83
- leading?: ReactNode; /** Rendered at the start of the toolbar row, before the navigation buttons. */
84
- toolbarLeading?: ReactNode; /** Rendered at the end of the toolbar row, after the menus. */
86
+ leading?: ReactNode; /** Rendered at the end of the title bar row, after the participants. */
87
+ trailing?: ReactNode; /** Rendered at the start of the toolbar row, before the navigation buttons. */
88
+ toolbarLeading?: ReactNode; /** Rendered at the end of the toolbar row, before the browser menu. */
85
89
  toolbarTrailing?: ReactNode;
86
90
  features?: SessionFeatures;
87
91
  collaborationRole: CollaborationRole$1;
@@ -90,18 +94,25 @@ type BrowserControlPaneProps = {
90
94
  editor: string;
91
95
  viewer: string;
92
96
  } | null;
93
- onSessionDetails?: () => void;
97
+ onSessionDetails?: () => void; /** Extra items at the top of the browser menu, such as actions on the session. */
98
+ menuItems?: ReactNode; /** Extra items in the menu's "Share and connect" submenu. */
99
+ shareMenuItems?: ReactNode; /** Items at the end of the browser menu, such as deleting the session. */
100
+ menuFooterItems?: ReactNode;
94
101
  };
95
102
  declare function BrowserControlPane({
96
103
  control,
97
104
  leading,
105
+ trailing,
98
106
  toolbarLeading,
99
107
  toolbarTrailing,
100
108
  features: featureOverrides,
101
109
  collaborationRole,
102
110
  cdpUrl,
103
111
  shareUrls,
104
- onSessionDetails
112
+ onSessionDetails,
113
+ menuItems,
114
+ shareMenuItems,
115
+ menuFooterItems
105
116
  }: BrowserControlPaneProps): import("react").JSX.Element;
106
117
  //#endregion
107
118
  //#region src/components/browser-viewport.d.ts
package/dist/index.js CHANGED
@@ -199,7 +199,7 @@ function ContextMenuContent({ className, align = "start", alignOffset = 4, side
199
199
  sideOffset,
200
200
  children: /* @__PURE__ */ jsx(ContextMenu.Popup, {
201
201
  "data-slot": "context-menu-content",
202
- className: cn("aperture:z-50 aperture:max-h-(--available-height) aperture:min-w-36 aperture:origin-(--transform-origin) aperture:overflow-x-hidden aperture:overflow-y-auto aperture:rounded-lg aperture:bg-popover aperture:p-1 aperture:text-popover-foreground aperture:shadow-md aperture:ring-1 aperture:ring-foreground/10 aperture:duration-100 aperture:outline-none aperture:data-[side=bottom]:slide-in-from-top-2 aperture:data-[side=inline-end]:slide-in-from-left-2 aperture:data-[side=inline-start]:slide-in-from-right-2 aperture:data-[side=left]:slide-in-from-right-2 aperture:data-[side=right]:slide-in-from-left-2 aperture:data-[side=top]:slide-in-from-bottom-2 aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-open:zoom-in-95 aperture:data-closed:animate-out aperture:data-closed:fade-out-0 aperture:data-closed:zoom-out-95", className),
202
+ className: cn("aperture:z-50 aperture:max-h-(--available-height) aperture:min-w-36 aperture:origin-(--transform-origin) aperture:overflow-x-hidden aperture:overflow-y-auto aperture:rounded-lg aperture:bg-popover aperture:p-1 aperture:text-popover-foreground aperture:shadow-md aperture:ring-1 aperture:ring-foreground/10 aperture:duration-100 aperture:outline-none aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-closed:animate-out aperture:data-closed:fade-out-0", className),
203
203
  ...props
204
204
  })
205
205
  })
@@ -330,7 +330,7 @@ function TooltipContent({ className, side = "top", sideOffset = 4, align = "cent
330
330
  className: "aperture:isolate aperture:z-50",
331
331
  children: /* @__PURE__ */ jsxs(Tooltip.Popup, {
332
332
  "data-slot": "tooltip-content",
333
- className: cn("aperture:z-50 aperture:inline-flex aperture:w-fit aperture:max-w-xs aperture:origin-(--transform-origin) aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:bg-foreground aperture:px-3 aperture:py-1.5 aperture:text-xs aperture:text-background aperture:has-data-[slot=kbd]:pr-1.5 aperture:data-[side=bottom]:slide-in-from-top-2 aperture:data-[side=inline-end]:slide-in-from-left-2 aperture:data-[side=inline-start]:slide-in-from-right-2 aperture:data-[side=left]:slide-in-from-right-2 aperture:data-[side=right]:slide-in-from-left-2 aperture:data-[side=top]:slide-in-from-bottom-2 aperture:**:data-[slot=kbd]:relative aperture:**:data-[slot=kbd]:isolate aperture:**:data-[slot=kbd]:z-50 aperture:**:data-[slot=kbd]:rounded-sm aperture:data-[state=delayed-open]:animate-in aperture:data-[state=delayed-open]:fade-in-0 aperture:data-[state=delayed-open]:zoom-in-95 aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-open:zoom-in-95 aperture:data-closed:animate-out aperture:data-closed:fade-out-0 aperture:data-closed:zoom-out-95", className),
333
+ className: cn("aperture:z-50 aperture:inline-flex aperture:w-fit aperture:max-w-xs aperture:origin-(--transform-origin) aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:bg-foreground aperture:px-3 aperture:py-1.5 aperture:text-xs aperture:text-background aperture:has-data-[slot=kbd]:pr-1.5 aperture:**:data-[slot=kbd]:relative aperture:**:data-[slot=kbd]:isolate aperture:**:data-[slot=kbd]:z-50 aperture:**:data-[slot=kbd]:rounded-sm aperture:data-[state=delayed-open]:animate-in aperture:data-[state=delayed-open]:fade-in-0 aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-closed:animate-out aperture:data-closed:fade-out-0", className),
334
334
  ...props,
335
335
  children: [children, /* @__PURE__ */ jsx(Tooltip.Arrow, { className: "aperture:z-50 aperture:size-2.5 aperture:translate-y-[calc(-50%-2px)] aperture:rotate-45 aperture:rounded-[2px] aperture:bg-foreground aperture:fill-foreground aperture:data-[side=bottom]:top-1 aperture:data-[side=inline-end]:top-1/2! aperture:data-[side=inline-end]:-left-1 aperture:data-[side=inline-end]:-translate-y-1/2 aperture:data-[side=inline-start]:top-1/2! aperture:data-[side=inline-start]:-right-1 aperture:data-[side=inline-start]:-translate-y-1/2 aperture:data-[side=left]:top-1/2! aperture:data-[side=left]:-right-1 aperture:data-[side=left]:-translate-y-1/2 aperture:data-[side=right]:top-1/2! aperture:data-[side=right]:-left-1 aperture:data-[side=right]:-translate-y-1/2 aperture:data-[side=top]:-bottom-2.5" })]
336
336
  })
@@ -405,7 +405,7 @@ function ScrollBar({ className, orientation = "vertical", ...props }) {
405
405
  ...props,
406
406
  children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {
407
407
  "data-slot": "scroll-area-thumb",
408
- className: "aperture:relative aperture:flex-1 aperture:rounded-full aperture:bg-foreground/35 aperture:transition-colors aperture:hover:bg-foreground/55"
408
+ className: "aperture:relative aperture:flex-1 aperture:rounded-full aperture:bg-border aperture:transition-colors aperture:hover:bg-foreground/35"
409
409
  })
410
410
  });
411
411
  }
@@ -805,7 +805,7 @@ function DropdownMenuContent({ align = "start", alignOffset = 0, side = "bottom"
805
805
  sideOffset,
806
806
  children: /* @__PURE__ */ jsx(Menu.Popup, {
807
807
  "data-slot": "dropdown-menu-content",
808
- className: cn("aperture:z-50 aperture:max-h-(--available-height) aperture:w-(--anchor-width) aperture:min-w-32 aperture:origin-(--transform-origin) aperture:overflow-x-hidden aperture:overflow-y-auto aperture:rounded-lg aperture:bg-popover aperture:p-1 aperture:text-popover-foreground aperture:shadow-md aperture:ring-1 aperture:ring-foreground/10 aperture:duration-100 aperture:outline-none aperture:data-[side=bottom]:slide-in-from-top-2 aperture:data-[side=inline-end]:slide-in-from-left-2 aperture:data-[side=inline-start]:slide-in-from-right-2 aperture:data-[side=left]:slide-in-from-right-2 aperture:data-[side=right]:slide-in-from-left-2 aperture:data-[side=top]:slide-in-from-bottom-2 aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-open:zoom-in-95 aperture:data-closed:animate-out aperture:data-closed:overflow-hidden aperture:data-closed:fade-out-0 aperture:data-closed:zoom-out-95", className),
808
+ className: cn("aperture:z-50 aperture:max-h-(--available-height) aperture:w-(--anchor-width) aperture:min-w-32 aperture:origin-(--transform-origin) aperture:overflow-x-hidden aperture:overflow-y-auto aperture:rounded-lg aperture:bg-popover aperture:p-1 aperture:text-popover-foreground aperture:shadow-md aperture:ring-1 aperture:ring-foreground/10 aperture:duration-100 aperture:outline-none aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-closed:animate-out aperture:data-closed:overflow-hidden aperture:data-closed:fade-out-0", className),
809
809
  ...props
810
810
  })
811
811
  })
@@ -830,7 +830,7 @@ function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
830
830
  "data-slot": "dropdown-menu-item",
831
831
  "data-inset": inset,
832
832
  "data-variant": variant,
833
- className: cn("aperture:group/dropdown-menu-item aperture:relative aperture:flex aperture:cursor-default aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:px-1.5 aperture:py-1 aperture:text-sm aperture:outline-hidden aperture:select-none aperture:focus:bg-accent aperture:focus:text-accent-foreground aperture:not-data-[variant=destructive]:focus:**:text-accent-foreground aperture:data-inset:pl-7 aperture:data-[variant=destructive]:text-destructive aperture:data-[variant=destructive]:focus:bg-destructive/10 aperture:data-[variant=destructive]:focus:text-destructive aperture:dark:data-[variant=destructive]:focus:bg-destructive/20 aperture:data-disabled:pointer-events-none aperture:data-disabled:opacity-50 aperture:[&_svg]:pointer-events-none aperture:[&_svg]:shrink-0 aperture:[&_svg:not([class*='size-'])]:size-4 aperture:data-[variant=destructive]:*:[svg]:text-destructive", className),
833
+ className: cn("aperture:group/dropdown-menu-item aperture:relative aperture:flex aperture:cursor-default aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:px-1.5 aperture:py-1 aperture:text-sm aperture:outline-hidden aperture:select-none aperture:data-highlighted:bg-accent aperture:data-highlighted:text-accent-foreground aperture:not-data-[variant=destructive]:data-highlighted:**:[svg]:text-accent-foreground aperture:data-inset:pl-7 aperture:data-[variant=destructive]:text-destructive aperture:data-[variant=destructive]:data-highlighted:bg-destructive/10 aperture:data-[variant=destructive]:data-highlighted:text-destructive aperture:dark:data-[variant=destructive]:data-highlighted:bg-destructive/20 aperture:data-disabled:pointer-events-none aperture:data-disabled:opacity-50 aperture:[&_svg]:pointer-events-none aperture:[&_svg]:shrink-0 aperture:[&_svg:not([class*='size-'])]:size-4 aperture:data-[variant=destructive]:*:[svg]:text-destructive", className),
834
834
  ...props
835
835
  });
836
836
  }
@@ -844,7 +844,7 @@ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
844
844
  return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
845
845
  "data-slot": "dropdown-menu-sub-trigger",
846
846
  "data-inset": inset,
847
- className: cn("aperture:flex aperture:cursor-default aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:px-1.5 aperture:py-1 aperture:text-sm aperture:outline-hidden aperture:select-none aperture:focus:bg-accent aperture:focus:text-accent-foreground aperture:not-data-[variant=destructive]:focus:**:text-accent-foreground aperture:data-inset:pl-7 aperture:data-popup-open:bg-accent aperture:data-popup-open:text-accent-foreground aperture:data-open:bg-accent aperture:data-open:text-accent-foreground aperture:[&_svg]:pointer-events-none aperture:[&_svg]:shrink-0 aperture:[&_svg:not([class*='size-'])]:size-4", className),
847
+ className: cn("aperture:flex aperture:cursor-default aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:px-1.5 aperture:py-1 aperture:text-sm aperture:outline-hidden aperture:select-none aperture:data-highlighted:bg-accent aperture:data-highlighted:text-accent-foreground aperture:not-data-[variant=destructive]:data-highlighted:**:[svg]:text-accent-foreground aperture:data-inset:pl-7 aperture:data-popup-open:bg-accent aperture:data-popup-open:text-accent-foreground aperture:data-open:bg-accent aperture:data-open:text-accent-foreground aperture:[&_svg]:pointer-events-none aperture:[&_svg]:shrink-0 aperture:[&_svg:not([class*='size-'])]:size-4", className),
848
848
  ...props,
849
849
  children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "aperture:ml-auto" })]
850
850
  });
@@ -852,7 +852,7 @@ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
852
852
  function DropdownMenuSubContent({ align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props }) {
853
853
  return /* @__PURE__ */ jsx(DropdownMenuContent, {
854
854
  "data-slot": "dropdown-menu-sub-content",
855
- className: cn("aperture:w-auto aperture:min-w-[96px] aperture:rounded-lg aperture:bg-popover aperture:p-1 aperture:text-popover-foreground aperture:shadow-lg aperture:ring-1 aperture:ring-foreground/10 aperture:duration-100 aperture:data-[side=bottom]:slide-in-from-top-2 aperture:data-[side=left]:slide-in-from-right-2 aperture:data-[side=right]:slide-in-from-left-2 aperture:data-[side=top]:slide-in-from-bottom-2 aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-open:zoom-in-95 aperture:data-closed:animate-out aperture:data-closed:fade-out-0 aperture:data-closed:zoom-out-95", className),
855
+ className: cn("aperture:w-auto aperture:min-w-[96px] aperture:rounded-lg aperture:bg-popover aperture:p-1 aperture:text-popover-foreground aperture:shadow-lg aperture:ring-1 aperture:ring-foreground/10 aperture:duration-100 aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-closed:animate-out aperture:data-closed:fade-out-0", className),
856
856
  align,
857
857
  alignOffset,
858
858
  side,
@@ -864,7 +864,7 @@ function DropdownMenuCheckboxItem({ className, children, checked, inset, ...prop
864
864
  return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
865
865
  "data-slot": "dropdown-menu-checkbox-item",
866
866
  "data-inset": inset,
867
- className: cn("aperture:relative aperture:flex aperture:cursor-default aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:py-1 aperture:pr-8 aperture:pl-1.5 aperture:text-sm aperture:outline-hidden aperture:select-none aperture:focus:bg-accent aperture:focus:text-accent-foreground aperture:focus:**:text-accent-foreground aperture:data-inset:pl-7 aperture:data-disabled:pointer-events-none aperture:data-disabled:opacity-50 aperture:[&_svg]:pointer-events-none aperture:[&_svg]:shrink-0 aperture:[&_svg:not([class*='size-'])]:size-4", className),
867
+ className: cn("aperture:relative aperture:flex aperture:cursor-default aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:py-1 aperture:pr-8 aperture:pl-1.5 aperture:text-sm aperture:outline-hidden aperture:select-none aperture:data-highlighted:bg-accent aperture:data-highlighted:text-accent-foreground aperture:data-highlighted:**:[svg]:text-accent-foreground aperture:data-inset:pl-7 aperture:data-disabled:pointer-events-none aperture:data-disabled:opacity-50 aperture:[&_svg]:pointer-events-none aperture:[&_svg]:shrink-0 aperture:[&_svg:not([class*='size-'])]:size-4", className),
868
868
  checked,
869
869
  ...props,
870
870
  children: [/* @__PURE__ */ jsx("span", {
@@ -884,7 +884,7 @@ function DropdownMenuRadioItem({ className, children, inset, ...props }) {
884
884
  return /* @__PURE__ */ jsxs(Menu.RadioItem, {
885
885
  "data-slot": "dropdown-menu-radio-item",
886
886
  "data-inset": inset,
887
- className: cn("aperture:relative aperture:flex aperture:cursor-default aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:py-1 aperture:pr-8 aperture:pl-1.5 aperture:text-sm aperture:outline-hidden aperture:select-none aperture:focus:bg-accent aperture:focus:text-accent-foreground aperture:focus:**:text-accent-foreground aperture:data-inset:pl-7 aperture:data-disabled:pointer-events-none aperture:data-disabled:opacity-50 aperture:[&_svg]:pointer-events-none aperture:[&_svg]:shrink-0 aperture:[&_svg:not([class*='size-'])]:size-4", className),
887
+ className: cn("aperture:relative aperture:flex aperture:cursor-default aperture:items-center aperture:gap-1.5 aperture:rounded-md aperture:py-1 aperture:pr-8 aperture:pl-1.5 aperture:text-sm aperture:outline-hidden aperture:select-none aperture:data-highlighted:bg-accent aperture:data-highlighted:text-accent-foreground aperture:data-highlighted:**:[svg]:text-accent-foreground aperture:data-inset:pl-7 aperture:data-disabled:pointer-events-none aperture:data-disabled:opacity-50 aperture:[&_svg]:pointer-events-none aperture:[&_svg]:shrink-0 aperture:[&_svg:not([class*='size-'])]:size-4", className),
888
888
  ...props,
889
889
  children: [/* @__PURE__ */ jsx("span", {
890
890
  className: "aperture:pointer-events-none aperture:absolute aperture:right-2 aperture:flex aperture:items-center aperture:justify-center",
@@ -1197,7 +1197,12 @@ const VIEWPORT_LIMITS = {
1197
1197
  max: 4
1198
1198
  }
1199
1199
  };
1200
- function BrowserMenus({ control, cdpUrl, shareUrls, busy, connected, localCursorEnabled, onLocalCursorChange, onReconnect, onSessionDetails, now }) {
1200
+ /**
1201
+ * The toolbar's end: drawing, recording and viewport buttons, then one menu with the embedder's
1202
+ * own items first, control, tools and sharing, and the embedder's closing items (such as
1203
+ * deleting the session) last.
1204
+ */
1205
+ function BrowserMenus({ control, cdpUrl, shareUrls, busy, connected, localCursorEnabled, onLocalCursorChange, onReconnect, onSessionDetails, menuItems, shareMenuItems, menuFooterItems, drawing, devTools, now }) {
1201
1206
  const { settings, updateSettings } = useRecordingSettings();
1202
1207
  const runningRecordings = control.recordings.filter((recording) => recording.status === "starting" || recording.status === "running");
1203
1208
  const recordingActive = runningRecordings.length > 0;
@@ -1216,53 +1221,35 @@ function BrowserMenus({ control, cdpUrl, shareUrls, busy, connected, localCursor
1216
1221
  capture: "continuous"
1217
1222
  });
1218
1223
  }
1219
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
1220
- className: "aperture:shrink-0 aperture:sm:hidden",
1221
- children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsxs(Tooltip$1, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
1222
- render: /* @__PURE__ */ jsx(DropdownMenuTrigger, { render: /* @__PURE__ */ jsx(Button$1, {
1223
- type: "button",
1224
- variant: recordingActive ? "destructive" : "ghost",
1225
- size: "icon-sm",
1226
- "aria-label": recordingActive ? "Browser menu, recording active" : "Browser menu"
1227
- }) }),
1228
- children: recordingActive ? /* @__PURE__ */ jsx(Circle, { fill: "currentColor" }) : /* @__PURE__ */ jsx(MoreVertical, {})
1229
- }), /* @__PURE__ */ jsx(TooltipContent, {
1230
- side: "bottom",
1231
- children: recordingActive ? "Browser menu, recording active" : "Browser menu"
1232
- })] }), /* @__PURE__ */ jsxs(DropdownMenuContent, {
1233
- align: "end",
1234
- className: "aperture:w-72",
1235
- children: [
1236
- /* @__PURE__ */ jsx(RestMenuItems, {
1237
- control,
1238
- cdpUrl,
1239
- shareUrls,
1240
- onSessionDetails
1241
- }),
1242
- /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
1243
- /* @__PURE__ */ jsx(RecordingMenuItems, {
1244
- control,
1245
- connected,
1246
- runningRecordings,
1247
- now,
1248
- settings,
1249
- onSettingsChange: updateSettings,
1250
- onStartRecording: startRecording
1251
- }),
1252
- /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
1253
- /* @__PURE__ */ jsx(ViewportStreamMenuItems, {
1254
- control,
1255
- connected: viewportConnected,
1256
- localCursorEnabled,
1257
- onLocalCursorChange,
1258
- busy,
1259
- onReconnect
1260
- })
1261
- ]
1262
- })] })
1263
- }), /* @__PURE__ */ jsxs("div", {
1264
- className: "aperture:hidden aperture:shrink-0 aperture:items-center aperture:gap-0.5 aperture:sm:flex",
1224
+ const recordingItems = /* @__PURE__ */ jsx(RecordingMenuItems, {
1225
+ control,
1226
+ connected,
1227
+ runningRecordings,
1228
+ now,
1229
+ settings,
1230
+ onSettingsChange: updateSettings,
1231
+ onStartRecording: startRecording
1232
+ });
1233
+ const sizeController = viewportSizeController(control);
1234
+ const viewportPaused = control.viewportAutoSync && !control.viewportAutoSizeActive && sizeController !== null;
1235
+ return /* @__PURE__ */ jsxs("div", {
1236
+ className: "aperture:flex aperture:shrink-0 aperture:items-center aperture:gap-0.5",
1265
1237
  children: [
1238
+ drawing ? /* @__PURE__ */ jsxs(Tooltip$1, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
1239
+ render: /* @__PURE__ */ jsx(Button$1, {
1240
+ type: "button",
1241
+ variant: drawing.enabled ? "secondary" : "ghost",
1242
+ size: "icon-sm",
1243
+ disabled: !drawing.enabled && !drawing.available,
1244
+ "aria-label": drawing.enabled ? "Stop drawing" : "Draw on this tab",
1245
+ "aria-pressed": drawing.enabled,
1246
+ onClick: () => drawing.onChange(!drawing.enabled)
1247
+ }),
1248
+ children: /* @__PURE__ */ jsx(Pencil, {})
1249
+ }), /* @__PURE__ */ jsx(TooltipContent, {
1250
+ side: "bottom",
1251
+ children: drawing.enabled ? "Stop drawing" : "Draw on this tab"
1252
+ })] }) : null,
1266
1253
  /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsxs(Tooltip$1, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
1267
1254
  render: /* @__PURE__ */ jsx(DropdownMenuTrigger, { render: /* @__PURE__ */ jsx(Button$1, {
1268
1255
  type: "button",
@@ -1277,31 +1264,19 @@ function BrowserMenus({ control, cdpUrl, shareUrls, busy, connected, localCursor
1277
1264
  })] }), /* @__PURE__ */ jsx(DropdownMenuContent, {
1278
1265
  align: "end",
1279
1266
  className: "aperture:w-72",
1280
- children: /* @__PURE__ */ jsx(RecordingMenuItems, {
1281
- control,
1282
- connected,
1283
- runningRecordings,
1284
- now,
1285
- settings,
1286
- onSettingsChange: updateSettings,
1287
- onStartRecording: startRecording
1288
- })
1267
+ children: recordingItems
1289
1268
  })] }),
1290
- /* @__PURE__ */ jsx(ViewportPausedIndicator, {
1291
- control,
1292
- connected: viewportConnected
1293
- }),
1294
1269
  /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsxs(Tooltip$1, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
1295
1270
  render: /* @__PURE__ */ jsx(DropdownMenuTrigger, { render: /* @__PURE__ */ jsx(Button$1, {
1296
1271
  type: "button",
1297
1272
  variant: "ghost",
1298
1273
  size: "icon-sm",
1299
- "aria-label": "Viewport and stream"
1274
+ "aria-label": viewportPaused ? `Viewport and stream. Auto-size paused. ${sizeController}` : "Viewport and stream"
1300
1275
  }) }),
1301
- children: /* @__PURE__ */ jsx(Monitor, {})
1276
+ children: viewportPaused ? /* @__PURE__ */ jsx(MonitorPause, {}) : /* @__PURE__ */ jsx(Monitor, {})
1302
1277
  }), /* @__PURE__ */ jsx(TooltipContent, {
1303
1278
  side: "bottom",
1304
- children: "Viewport and stream"
1279
+ children: viewportPaused ? sizeController : "Viewport and stream"
1305
1280
  })] }), /* @__PURE__ */ jsx(DropdownMenuContent, {
1306
1281
  align: "end",
1307
1282
  className: "aperture:w-56",
@@ -1319,56 +1294,82 @@ function BrowserMenus({ control, cdpUrl, shareUrls, busy, connected, localCursor
1319
1294
  type: "button",
1320
1295
  variant: "ghost",
1321
1296
  size: "icon-sm",
1322
- "aria-label": "More browser actions"
1297
+ "aria-label": "Browser menu"
1323
1298
  }) }),
1324
1299
  children: /* @__PURE__ */ jsx(MoreVertical, {})
1325
1300
  }), /* @__PURE__ */ jsx(TooltipContent, {
1326
1301
  side: "bottom",
1327
- children: "More browser actions"
1328
- })] }), /* @__PURE__ */ jsx(DropdownMenuContent, {
1302
+ children: "Browser menu"
1303
+ })] }), /* @__PURE__ */ jsxs(DropdownMenuContent, {
1329
1304
  align: "end",
1330
- className: "aperture:w-48",
1331
- children: /* @__PURE__ */ jsx(RestMenuItems, {
1332
- control,
1333
- cdpUrl,
1334
- shareUrls,
1335
- onSessionDetails
1336
- })
1305
+ className: "aperture:w-60",
1306
+ children: [
1307
+ menuItems ? /* @__PURE__ */ jsxs(Fragment$1, { children: [menuItems, /* @__PURE__ */ jsx(DropdownMenuSeparator, {})] }) : null,
1308
+ /* @__PURE__ */ jsxs(DropdownMenuGroup, { children: [
1309
+ onSessionDetails ? /* @__PURE__ */ jsxs(DropdownMenuItem, {
1310
+ onClick: onSessionDetails,
1311
+ children: [/* @__PURE__ */ jsx(Info, {}), "Session details"]
1312
+ }) : null,
1313
+ /* @__PURE__ */ jsx(InputControlMenuItem, { control }),
1314
+ devTools ? /* @__PURE__ */ jsxs(DropdownMenuSub, { children: [/* @__PURE__ */ jsxs(DropdownMenuSubTrigger, {
1315
+ disabled: !devTools.open && !devTools.available,
1316
+ children: [/* @__PURE__ */ jsx(Wrench, {}), "Developer tools"]
1317
+ }), /* @__PURE__ */ jsxs(DropdownMenuSubContent, {
1318
+ className: "aperture:w-44",
1319
+ children: [
1320
+ /* @__PURE__ */ jsx(DropdownMenuCheckboxItem, {
1321
+ checked: devTools.open,
1322
+ disabled: !devTools.open && !devTools.available,
1323
+ onCheckedChange: devTools.onOpenChange,
1324
+ children: "Open DevTools"
1325
+ }),
1326
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
1327
+ /* @__PURE__ */ jsxs(DropdownMenuGroup, { children: [/* @__PURE__ */ jsx(DropdownMenuLabel, { children: "Dock side" }), /* @__PURE__ */ jsxs(DropdownMenuRadioGroup, {
1328
+ value: devTools.dock,
1329
+ onValueChange: (value) => {
1330
+ if (value === "bottom" || value === "right") devTools.onDockChange(value);
1331
+ },
1332
+ children: [/* @__PURE__ */ jsxs(DropdownMenuRadioItem, {
1333
+ value: "bottom",
1334
+ children: [/* @__PURE__ */ jsx(PanelBottom, {}), "Bottom"]
1335
+ }), /* @__PURE__ */ jsxs(DropdownMenuRadioItem, {
1336
+ value: "right",
1337
+ children: [/* @__PURE__ */ jsx(PanelRight, {}), "Right"]
1338
+ })]
1339
+ })] })
1340
+ ]
1341
+ })] }) : null,
1342
+ /* @__PURE__ */ jsxs(DropdownMenuSub, { children: [/* @__PURE__ */ jsxs(DropdownMenuSubTrigger, { children: [/* @__PURE__ */ jsx(Share2, {}), "Share and connect"] }), /* @__PURE__ */ jsxs(DropdownMenuSubContent, {
1343
+ className: "aperture:w-56",
1344
+ children: [shareMenuItems, /* @__PURE__ */ jsx(ShareMenuItems, {
1345
+ cdpUrl,
1346
+ shareUrls
1347
+ })]
1348
+ })] })
1349
+ ] }),
1350
+ menuFooterItems ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(DropdownMenuSeparator, {}), menuFooterItems] }) : null
1351
+ ]
1337
1352
  })] })
1338
1353
  ]
1339
- })] });
1354
+ });
1340
1355
  }
1341
- function RestMenuItems({ control, cdpUrl, shareUrls, onSessionDetails }) {
1356
+ function ShareMenuItems({ cdpUrl, shareUrls }) {
1342
1357
  const copy = useEffectCallback((value, copied) => copyTextWithToast(value, () => toast.success(copied)), []);
1343
1358
  return /* @__PURE__ */ jsxs(DropdownMenuGroup, { children: [
1344
- /* @__PURE__ */ jsx(InputControlMenuItem, { control }),
1345
- onSessionDetails ? /* @__PURE__ */ jsxs(DropdownMenuItem, {
1346
- onClick: onSessionDetails,
1347
- children: [/* @__PURE__ */ jsx(Info, {}), "Session details"]
1348
- }) : null,
1349
1359
  /* @__PURE__ */ jsxs(DropdownMenuItem, {
1350
- disabled: !cdpUrl,
1351
- onClick: () => {
1352
- if (!cdpUrl) return;
1353
- copy(cdpUrl, "CDP URL copied");
1354
- },
1355
- children: [/* @__PURE__ */ jsx(Copy, {}), "Copy CDP URL"]
1360
+ disabled: !shareUrls,
1361
+ onClick: () => shareUrls && copy(shareUrls.editor, "Editor link copied"),
1362
+ children: [/* @__PURE__ */ jsx(Copy, {}), "Copy editor link"]
1356
1363
  }),
1357
1364
  /* @__PURE__ */ jsxs(DropdownMenuItem, {
1358
1365
  disabled: !shareUrls,
1359
- onClick: () => {
1360
- if (!shareUrls) return;
1361
- copy(shareUrls.editor, "Editor URL copied");
1362
- },
1363
- children: [/* @__PURE__ */ jsx(Share2, {}), "Copy editor URL"]
1366
+ onClick: () => shareUrls && copy(shareUrls.viewer, "Viewer link copied"),
1367
+ children: [/* @__PURE__ */ jsx(Copy, {}), "Copy viewer link"]
1364
1368
  }),
1365
1369
  /* @__PURE__ */ jsxs(DropdownMenuItem, {
1366
- disabled: !shareUrls,
1367
- onClick: () => {
1368
- if (!shareUrls) return;
1369
- copy(shareUrls.viewer, "Viewer URL copied");
1370
- },
1371
- children: [/* @__PURE__ */ jsx(Share2, {}), "Copy viewer URL"]
1370
+ disabled: !cdpUrl,
1371
+ onClick: () => cdpUrl && copy(cdpUrl, "CDP URL copied"),
1372
+ children: [/* @__PURE__ */ jsx(Copy, {}), "Copy CDP URL"]
1372
1373
  })
1373
1374
  ] });
1374
1375
  }
@@ -1618,31 +1619,6 @@ function viewportSizeController(control) {
1618
1619
  if (ownerName !== null) return `Size controlled by ${ownerName}`;
1619
1620
  return control.viewportAutoSync ? "Paused: size was set explicitly" : null;
1620
1621
  }
1621
- function ViewportPausedIndicator({ control, connected }) {
1622
- const sizeController = viewportSizeController(control);
1623
- if (!control.viewportAutoSync || control.viewportAutoSizeActive || sizeController === null) return null;
1624
- return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsxs(Tooltip$1, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
1625
- render: /* @__PURE__ */ jsx(DropdownMenuTrigger, { render: /* @__PURE__ */ jsx(Button$1, {
1626
- type: "button",
1627
- variant: "ghost",
1628
- size: "icon-sm",
1629
- className: "aperture:text-muted-foreground",
1630
- "aria-label": `Auto-size paused. ${sizeController}`
1631
- }) }),
1632
- children: /* @__PURE__ */ jsx(MonitorPause, {})
1633
- }), /* @__PURE__ */ jsx(TooltipContent, {
1634
- side: "bottom",
1635
- children: sizeController
1636
- })] }), /* @__PURE__ */ jsx(DropdownMenuContent, {
1637
- align: "end",
1638
- className: "aperture:w-56",
1639
- children: /* @__PURE__ */ jsxs(DropdownMenuGroup, { children: [/* @__PURE__ */ jsx(DropdownMenuLabel, { children: sizeController }), /* @__PURE__ */ jsxs(DropdownMenuItem, {
1640
- disabled: !connected,
1641
- onClick: () => control.takeOverViewport(),
1642
- children: [/* @__PURE__ */ jsx(Hand, {}), "Take over size"]
1643
- })] })
1644
- })] });
1645
- }
1646
1622
  function ViewportMenu({ control, connected }) {
1647
1623
  const sizeController = viewportSizeController(control);
1648
1624
  return /* @__PURE__ */ jsxs(DropdownMenuSub, { children: [/* @__PURE__ */ jsxs(DropdownMenuSubTrigger, { children: [/* @__PURE__ */ jsx(Monitor, {}), "Viewport"] }), /* @__PURE__ */ jsxs(DropdownMenuSubContent, {
@@ -1963,7 +1939,7 @@ function PopoverContent({ className, align = "center", alignOffset = 0, side = "
1963
1939
  className: "aperture:isolate aperture:z-50",
1964
1940
  children: /* @__PURE__ */ jsx(Popover.Popup, {
1965
1941
  "data-slot": "popover-content",
1966
- className: cn("aperture:z-50 aperture:flex aperture:w-72 aperture:origin-(--transform-origin) aperture:flex-col aperture:gap-2.5 aperture:rounded-lg aperture:bg-popover aperture:p-2.5 aperture:text-sm aperture:text-popover-foreground aperture:shadow-md aperture:ring-1 aperture:ring-foreground/10 aperture:outline-hidden aperture:duration-100 aperture:data-[side=bottom]:slide-in-from-top-2 aperture:data-[side=inline-end]:slide-in-from-left-2 aperture:data-[side=inline-start]:slide-in-from-right-2 aperture:data-[side=left]:slide-in-from-right-2 aperture:data-[side=right]:slide-in-from-left-2 aperture:data-[side=top]:slide-in-from-bottom-2 aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-open:zoom-in-95 aperture:data-closed:animate-out aperture:data-closed:fade-out-0 aperture:data-closed:zoom-out-95", className),
1942
+ className: cn("aperture:z-50 aperture:flex aperture:w-72 aperture:origin-(--transform-origin) aperture:flex-col aperture:gap-2.5 aperture:rounded-lg aperture:bg-popover aperture:p-2.5 aperture:text-sm aperture:text-popover-foreground aperture:shadow-md aperture:ring-1 aperture:ring-foreground/10 aperture:outline-hidden aperture:duration-100 aperture:data-open:animate-in aperture:data-open:fade-in-0 aperture:data-closed:animate-out aperture:data-closed:fade-out-0", className),
1967
1943
  ...props
1968
1944
  })
1969
1945
  })
@@ -2089,7 +2065,7 @@ function initials(name) {
2089
2065
  }
2090
2066
  //#endregion
2091
2067
  //#region src/components/browser-toolbar.tsx
2092
- function BrowserToolbar({ control, leading, toolbarLeading, toolbarTrailing, features, collaborationRole, cdpUrl, shareUrls, localCursorEnabled, onLocalCursorChange, paintingEnabled, onPaintingEnabledChange, devToolsOpen, devToolsTargetIds, devToolsDock, onDevToolsOpenChange, onDevToolsDockChange, onSessionDetails }) {
2068
+ function BrowserToolbar({ control, leading, trailing, toolbarLeading, toolbarTrailing, features, collaborationRole, cdpUrl, shareUrls, localCursorEnabled, onLocalCursorChange, paintingEnabled, onPaintingEnabledChange, devToolsOpen, devToolsTargetIds, devToolsDock, onDevToolsOpenChange, onDevToolsDockChange, onSessionDetails, menuItems, shareMenuItems, menuFooterItems }) {
2093
2069
  const [urlDraft, setUrlDraft] = useState(null);
2094
2070
  const displayUrl = control.activeTarget?.url ?? "";
2095
2071
  const busy = control.phase === "connecting";
@@ -2110,9 +2086,10 @@ function BrowserToolbar({ control, leading, toolbarLeading, toolbarTrailing, fea
2110
2086
  control.navigate(normalizeUrl(nextUrl));
2111
2087
  setUrlDraft(null);
2112
2088
  }
2089
+ const devToolsAvailable = collaborationRole === "owner" && connected && Boolean(cdpUrl && control.activeTargetId);
2113
2090
  return /* @__PURE__ */ jsxs("div", {
2114
2091
  className: "aperture:flex aperture:min-w-0 aperture:flex-col aperture:bg-background",
2115
- children: [leading || features.tabs || features.presence ? /* @__PURE__ */ jsxs("div", {
2092
+ children: [leading || trailing || features.tabs || features.presence ? /* @__PURE__ */ jsxs("div", {
2116
2093
  "data-workbench-titlebar": true,
2117
2094
  className: "aperture:flex aperture:min-w-0 aperture:shrink-0 aperture:items-stretch aperture:border-b aperture:bg-muted/35",
2118
2095
  children: [
@@ -2132,7 +2109,8 @@ function BrowserToolbar({ control, leading, toolbarLeading, toolbarTrailing, fea
2132
2109
  onReorder: control.reorderTargets,
2133
2110
  loadThumbnail: control.loadTargetThumbnail
2134
2111
  }) : /* @__PURE__ */ jsx("div", { className: "aperture:min-w-0 aperture:flex-1" }),
2135
- features.presence ? /* @__PURE__ */ jsx(CollaborationPresence, { collaboration: control.collaboration }) : null
2112
+ features.presence ? /* @__PURE__ */ jsx(CollaborationPresence, { collaboration: control.collaboration }) : null,
2113
+ trailing
2136
2114
  ]
2137
2115
  }) : null, toolbarLeading || toolbarTrailing || features.navigation || features.addressBar || features.drawing || features.devTools || features.menus ? /* @__PURE__ */ jsxs("div", {
2138
2116
  className: "aperture:flex aperture:h-9 aperture:items-center aperture:gap-1 aperture:px-1.5",
@@ -2185,29 +2163,17 @@ function BrowserToolbar({ control, leading, toolbarLeading, toolbarTrailing, fea
2185
2163
  })
2186
2164
  }) : /* @__PURE__ */ jsx("div", { className: "aperture:min-w-0 aperture:flex-1" }),
2187
2165
  busy ? /* @__PURE__ */ jsx(Loader2, { className: "aperture:size-4 aperture:shrink-0 aperture:animate-spin aperture:text-muted-foreground" }) : null,
2188
- features.drawing ? /* @__PURE__ */ jsxs(Tooltip$1, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
2189
- render: /* @__PURE__ */ jsx(Button$1, {
2190
- type: "button",
2191
- variant: paintingEnabled ? "secondary" : "ghost",
2192
- size: "icon-sm",
2193
- className: "aperture:shrink-0",
2194
- disabled: !paintingEnabled && !drawingAvailable,
2195
- "aria-label": paintingEnabled ? "Stop drawing" : "Draw on this tab",
2196
- "aria-pressed": paintingEnabled,
2197
- onClick: () => onPaintingEnabledChange(!paintingEnabled)
2198
- }),
2199
- children: /* @__PURE__ */ jsx(Pencil, {})
2200
- }), /* @__PURE__ */ jsx(TooltipContent, {
2201
- side: "bottom",
2202
- children: paintingEnabled ? "Stop drawing" : "Draw on this tab"
2203
- })] }) : null,
2204
- features.devTools ? /* @__PURE__ */ jsx(DevToolsButton, {
2166
+ features.devTools && devToolsOpen ? /* @__PURE__ */ jsx(DevToolsButton, {
2205
2167
  open: devToolsOpen,
2206
2168
  dock: devToolsDock,
2207
- available: collaborationRole === "owner" && connected && Boolean(cdpUrl && control.activeTargetId),
2169
+ available: devToolsAvailable,
2208
2170
  onOpenChange: onDevToolsOpenChange,
2209
2171
  onDockChange: onDevToolsDockChange
2210
2172
  }) : null,
2173
+ toolbarTrailing ? /* @__PURE__ */ jsx("div", {
2174
+ className: "aperture:flex aperture:shrink-0 aperture:items-center aperture:gap-0.5",
2175
+ children: toolbarTrailing
2176
+ }) : null,
2211
2177
  features.menus ? /* @__PURE__ */ jsx(BrowserMenus, {
2212
2178
  control,
2213
2179
  cdpUrl,
@@ -2218,11 +2184,22 @@ function BrowserToolbar({ control, leading, toolbarLeading, toolbarTrailing, fea
2218
2184
  onLocalCursorChange,
2219
2185
  onReconnect: () => control.reconnect(),
2220
2186
  onSessionDetails,
2187
+ menuItems,
2188
+ shareMenuItems,
2189
+ menuFooterItems,
2190
+ drawing: features.drawing ? {
2191
+ enabled: paintingEnabled,
2192
+ available: drawingAvailable,
2193
+ onChange: onPaintingEnabledChange
2194
+ } : null,
2195
+ devTools: features.devTools ? {
2196
+ open: devToolsOpen,
2197
+ dock: devToolsDock,
2198
+ available: devToolsAvailable,
2199
+ onOpenChange: onDevToolsOpenChange,
2200
+ onDockChange: onDevToolsDockChange
2201
+ } : null,
2221
2202
  now: recordingNow
2222
- }) : null,
2223
- toolbarTrailing ? /* @__PURE__ */ jsx("div", {
2224
- className: "aperture:flex aperture:shrink-0 aperture:items-center aperture:gap-0.5",
2225
- children: toolbarTrailing
2226
2203
  }) : null
2227
2204
  ]
2228
2205
  }) : null]
@@ -2452,7 +2429,7 @@ function ResizableHandle({ withHandle, className, ...props }) {
2452
2429
  //#endregion
2453
2430
  //#region src/components/browser-control-pane.tsx
2454
2431
  const LOCAL_CURSOR_STORAGE_KEY = "aperture.workbench.localCursorEnabled";
2455
- function BrowserControlPane({ control, leading, toolbarLeading, toolbarTrailing, features: featureOverrides, collaborationRole, cdpUrl, shareUrls, onSessionDetails }) {
2432
+ function BrowserControlPane({ control, leading, trailing, toolbarLeading, toolbarTrailing, features: featureOverrides, collaborationRole, cdpUrl, shareUrls, onSessionDetails, menuItems, shareMenuItems, menuFooterItems }) {
2456
2433
  const features = resolveSessionFeatures(featureOverrides);
2457
2434
  const [localCursorEnabled, setLocalCursorEnabled] = useState(true);
2458
2435
  const [paintingEnabled, setPaintingEnabled] = useState(false);
@@ -2508,6 +2485,7 @@ function BrowserControlPane({ control, leading, toolbarLeading, toolbarTrailing,
2508
2485
  children: [/* @__PURE__ */ jsx(BrowserToolbar, {
2509
2486
  control,
2510
2487
  leading,
2488
+ trailing,
2511
2489
  toolbarLeading,
2512
2490
  toolbarTrailing,
2513
2491
  features,
@@ -2523,7 +2501,10 @@ function BrowserControlPane({ control, leading, toolbarLeading, toolbarTrailing,
2523
2501
  devToolsDock,
2524
2502
  onDevToolsOpenChange: handleDevToolsOpenChange,
2525
2503
  onDevToolsDockChange: setDevToolsDock,
2526
- onSessionDetails
2504
+ onSessionDetails,
2505
+ menuItems,
2506
+ shareMenuItems,
2507
+ menuFooterItems
2527
2508
  }), features.devTools ? /* @__PURE__ */ jsxs(ResizablePanelGroup, {
2528
2509
  orientation: devToolsDock === "bottom" ? "vertical" : "horizontal",
2529
2510
  className: "aperture:min-h-0 aperture:min-w-0 aperture:flex-1 aperture:has-[[data-separator=active]]:[&_iframe]:pointer-events-none",
@@ -2600,7 +2581,7 @@ function ApertureSession({ theme = "system", className, ...props }) {
2600
2581
  })
2601
2582
  });
2602
2583
  }
2603
- function Session({ access, features, leading, toolbarLeading, toolbarTrailing }) {
2584
+ function Session({ access, features, leading, trailing, toolbarLeading, toolbarTrailing }) {
2604
2585
  const { status, control } = useSession({
2605
2586
  access,
2606
2587
  onNotice: showNotice
@@ -2638,6 +2619,7 @@ function Session({ access, features, leading, toolbarLeading, toolbarTrailing })
2638
2619
  cdpUrl: null,
2639
2620
  shareUrls: null,
2640
2621
  leading,
2622
+ trailing,
2641
2623
  toolbarLeading,
2642
2624
  toolbarTrailing,
2643
2625
  features: {