@streamoid/ui 0.6.20 → 0.6.22

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.js CHANGED
@@ -26,6 +26,8 @@ __export(index_exports, {
26
26
  ProductCollapsedMark: () => ProductCollapsedMark,
27
27
  ProductWordmark: () => ProductWordmark,
28
28
  SIDEBAR_RESIZE_THRESHOLD_PX: () => SIDEBAR_RESIZE_THRESHOLD_PX,
29
+ STREAMOID_CHANGELOG_URL: () => STREAMOID_CHANGELOG_URL,
30
+ STREAMOID_STATUS_PAGE_URL: () => STREAMOID_STATUS_PAGE_URL,
29
31
  ScAccess: () => ScAccess,
30
32
  ScAppCard: () => ScAppCard,
31
33
  ScAppCardForCopilot: () => ScAppCardForCopilot,
@@ -155,8 +157,10 @@ __export(index_exports, {
155
157
  StreamoidWorkspaceSwitcher: () => StreamoidWorkspaceSwitcher,
156
158
  UsageHistoryMobile: () => UsageHistoryMobile,
157
159
  advanceSidebarResizeGesture: () => advanceSidebarResizeGesture,
160
+ createStreamoidAppSwitchUtilities: () => createStreamoidAppSwitchUtilities,
158
161
  formatSubAgentLabel: () => formatSubAgentLabel,
159
162
  hasCollapsedMark: () => hasCollapsedMark,
163
+ useStreamoidSidebarPopoverPosition: () => useStreamoidSidebarPopoverPosition,
160
164
  useStreamoidSidebarPreference: () => useStreamoidSidebarPreference,
161
165
  useStreamoidThemePreference: () => useStreamoidThemePreference
162
166
  });
@@ -379,6 +383,43 @@ function ScStreamoidMascot({
379
383
 
380
384
  // src/SC-AppSwitch/ScAppSwitchPanel.tsx
381
385
  var import_jsx_runtime5 = require("react/jsx-runtime");
386
+ var STREAMOID_CHANGELOG_URL = "https://doc.clickup.com/3414296/p/h/3868r-26044/13a22b6f796b2c8";
387
+ var STREAMOID_STATUS_PAGE_URL = "https://status.streamoid.com/";
388
+ function openExternal(url) {
389
+ if (typeof window !== "undefined") {
390
+ window.open(url, "_blank", "noopener,noreferrer");
391
+ }
392
+ }
393
+ function createStreamoidAppSwitchUtilities(utilities) {
394
+ const before = (action) => () => {
395
+ utilities.onClose?.();
396
+ action();
397
+ };
398
+ return [
399
+ {
400
+ key: "changelog",
401
+ label: "Changelog",
402
+ trailingText: utilities.appVersion,
403
+ external: true,
404
+ onSelect: before(
405
+ () => openExternal(utilities.changelogUrl ?? STREAMOID_CHANGELOG_URL)
406
+ )
407
+ },
408
+ {
409
+ key: "status",
410
+ label: "Status Page",
411
+ external: true,
412
+ onSelect: before(
413
+ () => openExternal(utilities.statusPageUrl ?? STREAMOID_STATUS_PAGE_URL)
414
+ )
415
+ },
416
+ {
417
+ key: "support",
418
+ label: "Help and Support",
419
+ onSelect: before(utilities.onHelpAndSupport)
420
+ }
421
+ ];
422
+ }
382
423
  var T = {
383
424
  primary: "var(--alias-text---icons-primary, #f5f5f5)",
384
425
  secondary: "var(--alias-text---icons-secondary, #dadada)",
@@ -597,12 +638,14 @@ var ScAppSwitchSystemRow = ({ item }) => {
597
638
  };
598
639
  var ScAppSwitchPanel = ({
599
640
  apps,
600
- systemItems = [],
641
+ systemItems,
642
+ utilities,
601
643
  systemLabel,
602
644
  className,
603
645
  style
604
646
  }) => {
605
647
  const ordered = [...apps].sort((a, b) => orderIndex(a) - orderIndex(b));
648
+ const resolvedSystemItems = systemItems ?? (utilities ? createStreamoidAppSwitchUtilities(utilities) : []);
606
649
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
607
650
  "div",
608
651
  {
@@ -617,7 +660,7 @@ var ScAppSwitchPanel = ({
617
660
  },
618
661
  children: [
619
662
  ordered.map((app) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ScAppSwitchRow, { item: app }, app.key)),
620
- systemItems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
663
+ resolvedSystemItems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
621
664
  "div",
622
665
  {
623
666
  style: {
@@ -642,7 +685,7 @@ var ScAppSwitchPanel = ({
642
685
  children: systemLabel
643
686
  }
644
687
  ) : null,
645
- systemItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ScAppSwitchSystemRow, { item }, item.key))
688
+ resolvedSystemItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ScAppSwitchSystemRow, { item }, item.key))
646
689
  ]
647
690
  }
648
691
  ) : null
@@ -4288,6 +4331,7 @@ function StreamoidSidebar({
4288
4331
  expandedLogo,
4289
4332
  collapsedLogo,
4290
4333
  profile,
4334
+ appIdentity,
4291
4335
  versionText = "v1.0.0",
4292
4336
  toggleIcon,
4293
4337
  toggleInProfile = false,
@@ -4347,6 +4391,7 @@ function StreamoidSidebar({
4347
4391
  /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
4348
4392
  "div",
4349
4393
  {
4394
+ "data-streamoid-sidebar-card": true,
4350
4395
  className: "flex flex-col h-full relative shrink-0",
4351
4396
  style: {
4352
4397
  backgroundColor: "var(--alias-surface-base)",
@@ -4542,7 +4587,26 @@ function StreamoidSidebar({
4542
4587
  }
4543
4588
  ) : null,
4544
4589
  /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(HDivider, { edgeToEdge: true }),
4545
- profile ? toggleInProfile && !effectiveHideFooter ? (
4590
+ appIdentity ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4591
+ "button",
4592
+ {
4593
+ type: "button",
4594
+ className: "flex items-center shrink-0 w-full",
4595
+ style: {
4596
+ minWidth: 0,
4597
+ minHeight: 48,
4598
+ padding: "var(--spacing-md) var(--spacing-xl)",
4599
+ border: 0,
4600
+ borderRadius: "var(--radius-xl)",
4601
+ background: "transparent",
4602
+ color: "inherit",
4603
+ cursor: "pointer"
4604
+ },
4605
+ onClick: appIdentity.onClick,
4606
+ "aria-label": appIdentity.ariaLabel ?? "Switch apps",
4607
+ children: appIdentity.content
4608
+ }
4609
+ ) : profile ? toggleInProfile && !effectiveHideFooter ? (
4546
4610
  /* Footer row: profile and collapse toggle are two SEPARATE
4547
4611
  interactive units side by side (own rounded hover bg each). */
4548
4612
  /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
@@ -4710,6 +4774,7 @@ function StreamoidSidebar({
4710
4774
  /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
4711
4775
  "div",
4712
4776
  {
4777
+ "data-streamoid-sidebar-card": true,
4713
4778
  className: "flex flex-col h-full items-center justify-center relative shrink-0",
4714
4779
  style: {
4715
4780
  backgroundColor: "var(--alias-surface-base)",
@@ -4857,7 +4922,26 @@ function StreamoidSidebar({
4857
4922
  }
4858
4923
  ) : null,
4859
4924
  /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(HDivider, { edgeToEdge: true }),
4860
- profile ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4925
+ appIdentity ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4926
+ "button",
4927
+ {
4928
+ type: "button",
4929
+ className: "flex items-center justify-center shrink-0",
4930
+ style: {
4931
+ width: 48,
4932
+ height: 48,
4933
+ padding: "var(--spacing-md)",
4934
+ border: 0,
4935
+ borderRadius: "var(--radius-3xl)",
4936
+ background: "transparent",
4937
+ color: "inherit",
4938
+ cursor: "pointer"
4939
+ },
4940
+ onClick: appIdentity.onClick,
4941
+ "aria-label": appIdentity.ariaLabel ?? "Switch apps",
4942
+ children: appIdentity.content
4943
+ }
4944
+ ) : profile ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4861
4945
  "div",
4862
4946
  {
4863
4947
  className: "flex items-center justify-center shrink-0 cursor-pointer",
@@ -5235,7 +5319,7 @@ function ScWorkspaceAccountMenu({
5235
5319
  Icon,
5236
5320
  {
5237
5321
  size: 20,
5238
- color: selected ? "var(--alias-text---icons-onfill, #fff)" : mutedIcon
5322
+ color: selected ? "#fff" : mutedIcon
5239
5323
  }
5240
5324
  )
5241
5325
  },
@@ -5446,8 +5530,73 @@ function useStreamoidSidebarPreference(options = {}) {
5446
5530
  return { expanded, setExpanded, toggle };
5447
5531
  }
5448
5532
 
5449
- // src/SC-Artifax-Sidebar/ScArtifaxSidebar.tsx
5533
+ // src/SC-SidebarShell/useStreamoidSidebarPopoverPosition.ts
5450
5534
  var import_react14 = require("react");
5535
+ var VIEWPORT_INSET = 16;
5536
+ function useStreamoidSidebarPopoverPosition(sidebarRef, {
5537
+ placement,
5538
+ width,
5539
+ gap = 8,
5540
+ inset = 24
5541
+ }) {
5542
+ const [position, setPosition] = (0, import_react14.useState)({
5543
+ position: "fixed",
5544
+ left: 0,
5545
+ top: 0,
5546
+ width,
5547
+ maxWidth: `calc(100vw - ${VIEWPORT_INSET * 2}px)`,
5548
+ maxHeight: `calc(100dvh - ${VIEWPORT_INSET * 2}px)`,
5549
+ visibility: "hidden"
5550
+ });
5551
+ (0, import_react14.useLayoutEffect)(() => {
5552
+ const sidebar = sidebarRef.current;
5553
+ if (!sidebar || typeof window === "undefined") return;
5554
+ const card = (sidebar.matches("[data-streamoid-sidebar-card]") ? sidebar : sidebar.querySelector(
5555
+ "[data-streamoid-sidebar-card]"
5556
+ )) ?? sidebar;
5557
+ const measure = () => {
5558
+ const bounds = card.getBoundingClientRect();
5559
+ const availableWidth = Math.max(0, window.innerWidth - VIEWPORT_INSET * 2);
5560
+ const panelWidth = Math.min(width, availableWidth);
5561
+ const preferredLeft = bounds.right + gap;
5562
+ const maximumLeft = Math.max(
5563
+ VIEWPORT_INSET,
5564
+ window.innerWidth - panelWidth - VIEWPORT_INSET
5565
+ );
5566
+ const left = Math.max(
5567
+ VIEWPORT_INSET,
5568
+ Math.min(preferredLeft, maximumLeft)
5569
+ );
5570
+ const vertical = placement === "top-right" ? { top: Math.max(VIEWPORT_INSET, bounds.top + inset) } : {
5571
+ bottom: Math.max(
5572
+ VIEWPORT_INSET,
5573
+ window.innerHeight - bounds.bottom + inset
5574
+ )
5575
+ };
5576
+ setPosition({
5577
+ position: "fixed",
5578
+ left,
5579
+ width: panelWidth,
5580
+ maxWidth: `calc(100vw - ${VIEWPORT_INSET * 2}px)`,
5581
+ maxHeight: `calc(100dvh - ${VIEWPORT_INSET * 2}px)`,
5582
+ visibility: "visible",
5583
+ ...vertical
5584
+ });
5585
+ };
5586
+ measure();
5587
+ window.addEventListener("resize", measure);
5588
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure);
5589
+ observer?.observe(card);
5590
+ return () => {
5591
+ window.removeEventListener("resize", measure);
5592
+ observer?.disconnect();
5593
+ };
5594
+ }, [gap, inset, placement, sidebarRef, width]);
5595
+ return position;
5596
+ }
5597
+
5598
+ // src/SC-Artifax-Sidebar/ScArtifaxSidebar.tsx
5599
+ var import_react15 = require("react");
5451
5600
 
5452
5601
  // src/SC-Artifax-Sidebar/ScArtifaxSidebar.module.css
5453
5602
  var ScArtifaxSidebar_default = {
@@ -5469,6 +5618,8 @@ var ScArtifaxSidebar_default = {
5469
5618
  sectionChevron: "ScArtifaxSidebar_sectionChevron",
5470
5619
  profileRow: "ScArtifaxSidebar_profileRow",
5471
5620
  profileMain: "ScArtifaxSidebar_profileMain",
5621
+ appIdentityMain: "ScArtifaxSidebar_appIdentityMain",
5622
+ appIdentityCollapsed: "ScArtifaxSidebar_appIdentityCollapsed",
5472
5623
  profileRowCollapsed: "ScArtifaxSidebar_profileRowCollapsed",
5473
5624
  profileAvatar: "ScArtifaxSidebar_profileAvatar",
5474
5625
  profileInfo: "ScArtifaxSidebar_profileInfo",
@@ -5536,6 +5687,7 @@ var ScArtifaxSidebar = ({
5536
5687
  creditWarning,
5537
5688
  assistantCta,
5538
5689
  profile,
5690
+ appIdentity,
5539
5691
  toggleIcon,
5540
5692
  hideToggle = false,
5541
5693
  openSections,
@@ -5551,7 +5703,7 @@ var ScArtifaxSidebar = ({
5551
5703
  }
5552
5704
  };
5553
5705
  const isControlled = !!openSections;
5554
- const [internalOpen, setInternalOpen] = (0, import_react14.useState)(
5706
+ const [internalOpen, setInternalOpen] = (0, import_react15.useState)(
5555
5707
  () => {
5556
5708
  const init = {};
5557
5709
  sections.forEach((s) => {
@@ -5561,7 +5713,7 @@ var ScArtifaxSidebar = ({
5561
5713
  }
5562
5714
  );
5563
5715
  const isSectionOpen = (id) => isControlled ? !!openSections?.[id] : !!internalOpen[id];
5564
- const handleSectionToggle = (0, import_react14.useCallback)(
5716
+ const handleSectionToggle = (0, import_react15.useCallback)(
5565
5717
  (id) => {
5566
5718
  const next = !isSectionOpen(id);
5567
5719
  if (isControlled) {
@@ -5603,72 +5755,88 @@ var ScArtifaxSidebar = ({
5603
5755
  onExpandedChange: changeExpanded
5604
5756
  }
5605
5757
  ) : null,
5606
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.container + " " + ScArtifaxSidebar_default.expanded, children: [
5607
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { "aria-hidden": "true", className: ScArtifaxSidebar_default.borderOverlayExpanded }),
5608
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.body, children: [
5609
- expandedLogo ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.logoUnitExpanded, children: expandedLogo }) : null,
5610
- sections.map((section, idx) => {
5611
- const open = section.label ? section.collapsible !== false ? isSectionOpen(section.id) : true : true;
5612
- const showHeader = !!section.label;
5613
- const canToggle = showHeader && section.collapsible !== false;
5614
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { children: [
5615
- idx > 0 ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScHDivider, {}) : null,
5616
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.sectionContainer, children: [
5617
- showHeader ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5618
- SectionHeader2,
5619
- {
5620
- label: section.label,
5621
- open,
5622
- onToggle: canToggle ? () => handleSectionToggle(section.id) : void 0
5623
- }
5624
- ) : null,
5625
- open ? section.items.map(
5626
- (item) => renderMenuItem2(item, section.id)
5627
- ) : null
5628
- ] })
5629
- ] }, section.id);
5630
- })
5631
- ] }),
5632
- creditWarning ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.creditWarningSlot, children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5633
- CreditWarningBanner,
5634
- {
5635
- availableCredits: creditWarning.availableCredits,
5636
- remainingPct: creditWarning.remainingPct,
5637
- level: creditWarning.level ?? "danger",
5638
- onBuyCredits: creditWarning.onBuyCredits,
5639
- expanded: true
5640
- }
5641
- ) }) : null,
5642
- assistantCta ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScAskAgentSlot, { cta: assistantCta }) : null,
5643
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScHDivider, {}),
5644
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.profileRow, children: [
5645
- profile ? /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
5646
- "button",
5647
- {
5648
- type: "button",
5649
- className: ScArtifaxSidebar_default.profileMain,
5650
- onClick: profile.onClick,
5651
- children: [
5652
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.profileAvatar, children: profile.avatar }),
5653
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.profileInfo, children: [
5654
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: ScArtifaxSidebar_default.profileName, children: profile.name }),
5655
- profile.subtitle ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: ScArtifaxSidebar_default.profileSubtitle, children: profile.subtitle }) : null
5656
- ] })
5657
- ]
5658
- }
5659
- ) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: ScArtifaxSidebar_default.profileMain, "aria-hidden": "true" }),
5660
- !hideToggle ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5661
- "button",
5662
- {
5663
- type: "button",
5664
- className: ScArtifaxSidebar_default.footerToggle,
5665
- onClick: onToggle,
5666
- "aria-label": "Collapse sidebar",
5667
- children: resolveToggleIcon2(toggleIcon, true)
5668
- }
5669
- ) : null
5670
- ] })
5671
- ] })
5758
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
5759
+ "div",
5760
+ {
5761
+ "data-streamoid-sidebar-card": true,
5762
+ className: ScArtifaxSidebar_default.container + " " + ScArtifaxSidebar_default.expanded,
5763
+ children: [
5764
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { "aria-hidden": "true", className: ScArtifaxSidebar_default.borderOverlayExpanded }),
5765
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.body, children: [
5766
+ expandedLogo ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.logoUnitExpanded, children: expandedLogo }) : null,
5767
+ sections.map((section, idx) => {
5768
+ const open = section.label ? section.collapsible !== false ? isSectionOpen(section.id) : true : true;
5769
+ const showHeader = !!section.label;
5770
+ const canToggle = showHeader && section.collapsible !== false;
5771
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { children: [
5772
+ idx > 0 ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScHDivider, {}) : null,
5773
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.sectionContainer, children: [
5774
+ showHeader ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5775
+ SectionHeader2,
5776
+ {
5777
+ label: section.label,
5778
+ open,
5779
+ onToggle: canToggle ? () => handleSectionToggle(section.id) : void 0
5780
+ }
5781
+ ) : null,
5782
+ open ? section.items.map(
5783
+ (item) => renderMenuItem2(item, section.id)
5784
+ ) : null
5785
+ ] })
5786
+ ] }, section.id);
5787
+ })
5788
+ ] }),
5789
+ creditWarning ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.creditWarningSlot, children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5790
+ CreditWarningBanner,
5791
+ {
5792
+ availableCredits: creditWarning.availableCredits,
5793
+ remainingPct: creditWarning.remainingPct,
5794
+ level: creditWarning.level ?? "danger",
5795
+ onBuyCredits: creditWarning.onBuyCredits,
5796
+ expanded: true
5797
+ }
5798
+ ) }) : null,
5799
+ assistantCta ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScAskAgentSlot, { cta: assistantCta }) : null,
5800
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScHDivider, {}),
5801
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.profileRow, children: [
5802
+ appIdentity ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5803
+ "button",
5804
+ {
5805
+ type: "button",
5806
+ className: ScArtifaxSidebar_default.appIdentityMain,
5807
+ onClick: appIdentity.onClick,
5808
+ "aria-label": appIdentity.ariaLabel ?? "Switch apps",
5809
+ children: appIdentity.content
5810
+ }
5811
+ ) : profile ? /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
5812
+ "button",
5813
+ {
5814
+ type: "button",
5815
+ className: ScArtifaxSidebar_default.profileMain,
5816
+ onClick: profile.onClick,
5817
+ children: [
5818
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.profileAvatar, children: profile.avatar }),
5819
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.profileInfo, children: [
5820
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: ScArtifaxSidebar_default.profileName, children: profile.name }),
5821
+ profile.subtitle ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: ScArtifaxSidebar_default.profileSubtitle, children: profile.subtitle }) : null
5822
+ ] })
5823
+ ]
5824
+ }
5825
+ ) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: ScArtifaxSidebar_default.profileMain, "aria-hidden": "true" }),
5826
+ !hideToggle ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5827
+ "button",
5828
+ {
5829
+ type: "button",
5830
+ className: ScArtifaxSidebar_default.footerToggle,
5831
+ onClick: onToggle,
5832
+ "aria-label": "Collapse sidebar",
5833
+ children: resolveToggleIcon2(toggleIcon, true)
5834
+ }
5835
+ ) : null
5836
+ ] })
5837
+ ]
5838
+ }
5839
+ )
5672
5840
  ]
5673
5841
  }
5674
5842
  );
@@ -5686,57 +5854,73 @@ var ScArtifaxSidebar = ({
5686
5854
  onExpandedChange: changeExpanded
5687
5855
  }
5688
5856
  ) : null,
5689
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.container + " " + ScArtifaxSidebar_default.collapsed, children: [
5690
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { "aria-hidden": "true", className: ScArtifaxSidebar_default.borderOverlayCollapsed }),
5691
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.body + " " + ScArtifaxSidebar_default.bodyCollapsed, children: [
5692
- collapsedLogo ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.logoUnitCollapsed, children: collapsedLogo }) : null,
5693
- sections.map((section, idx) => /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { children: [
5694
- idx > 0 ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScHDivider, {}) : null,
5695
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.sectionContainerCollapsed, children: section.items.map((item) => renderMenuItem2(item, section.id)) })
5696
- ] }, section.id))
5697
- ] }),
5698
- creditWarning ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.creditWarningSlot, children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5699
- CreditWarningBanner,
5700
- {
5701
- availableCredits: creditWarning.availableCredits,
5702
- remainingPct: creditWarning.remainingPct,
5703
- level: creditWarning.level ?? "danger",
5704
- onBuyCredits: creditWarning.onBuyCredits,
5705
- expanded: false
5706
- }
5707
- ) }) : null,
5708
- assistantCta ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScAskAgentSlot, { cta: assistantCta, collapsed: true }) : null,
5709
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScHDivider, {}),
5710
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.footerCollapsed, children: [
5711
- profile ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5712
- "button",
5713
- {
5714
- type: "button",
5715
- className: ScArtifaxSidebar_default.profileRowCollapsed,
5716
- onClick: profile.onClick,
5717
- "aria-label": profile.name,
5718
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.profileAvatar, children: profile.avatar })
5719
- }
5720
- ) : null,
5721
- !hideToggle ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5722
- "button",
5723
- {
5724
- type: "button",
5725
- className: ScArtifaxSidebar_default.footerToggle,
5726
- onClick: onToggle,
5727
- "aria-label": "Expand sidebar",
5728
- children: resolveToggleIcon2(toggleIcon, false)
5729
- }
5730
- ) : null
5731
- ] })
5732
- ] })
5857
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
5858
+ "div",
5859
+ {
5860
+ "data-streamoid-sidebar-card": true,
5861
+ className: ScArtifaxSidebar_default.container + " " + ScArtifaxSidebar_default.collapsed,
5862
+ children: [
5863
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { "aria-hidden": "true", className: ScArtifaxSidebar_default.borderOverlayCollapsed }),
5864
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.body + " " + ScArtifaxSidebar_default.bodyCollapsed, children: [
5865
+ collapsedLogo ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.logoUnitCollapsed, children: collapsedLogo }) : null,
5866
+ sections.map((section, idx) => /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { children: [
5867
+ idx > 0 ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScHDivider, {}) : null,
5868
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.sectionContainerCollapsed, children: section.items.map((item) => renderMenuItem2(item, section.id)) })
5869
+ ] }, section.id))
5870
+ ] }),
5871
+ creditWarning ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.creditWarningSlot, children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5872
+ CreditWarningBanner,
5873
+ {
5874
+ availableCredits: creditWarning.availableCredits,
5875
+ remainingPct: creditWarning.remainingPct,
5876
+ level: creditWarning.level ?? "danger",
5877
+ onBuyCredits: creditWarning.onBuyCredits,
5878
+ expanded: false
5879
+ }
5880
+ ) }) : null,
5881
+ assistantCta ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScAskAgentSlot, { cta: assistantCta, collapsed: true }) : null,
5882
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ScHDivider, {}),
5883
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: ScArtifaxSidebar_default.footerCollapsed, children: [
5884
+ appIdentity ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5885
+ "button",
5886
+ {
5887
+ type: "button",
5888
+ className: ScArtifaxSidebar_default.appIdentityCollapsed,
5889
+ onClick: appIdentity.onClick,
5890
+ "aria-label": appIdentity.ariaLabel ?? "Switch apps",
5891
+ children: appIdentity.content
5892
+ }
5893
+ ) : profile ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5894
+ "button",
5895
+ {
5896
+ type: "button",
5897
+ className: ScArtifaxSidebar_default.profileRowCollapsed,
5898
+ onClick: profile.onClick,
5899
+ "aria-label": profile.name,
5900
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: ScArtifaxSidebar_default.profileAvatar, children: profile.avatar })
5901
+ }
5902
+ ) : null,
5903
+ !hideToggle ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
5904
+ "button",
5905
+ {
5906
+ type: "button",
5907
+ className: ScArtifaxSidebar_default.footerToggle,
5908
+ onClick: onToggle,
5909
+ "aria-label": "Expand sidebar",
5910
+ children: resolveToggleIcon2(toggleIcon, false)
5911
+ }
5912
+ ) : null
5913
+ ] })
5914
+ ]
5915
+ }
5916
+ )
5733
5917
  ]
5734
5918
  }
5735
5919
  );
5736
5920
  };
5737
5921
 
5738
5922
  // src/SC-Catalogix-Sidebar/ScCatalogixSidebar.tsx
5739
- var import_react15 = require("react");
5923
+ var import_react16 = require("react");
5740
5924
 
5741
5925
  // src/SC-Sidebar Switch menu/ScSidebarSwitchMenu.module.css
5742
5926
  var ScSidebarSwitchMenu_default = {
@@ -6378,7 +6562,7 @@ var ScCatalogixSidebar = ({
6378
6562
  className,
6379
6563
  style
6380
6564
  }) => {
6381
- const [appListOpen, setAppListOpen] = (0, import_react15.useState)(false);
6565
+ const [appListOpen, setAppListOpen] = (0, import_react16.useState)(false);
6382
6566
  const handleSwitch = () => {
6383
6567
  setAppListOpen((prev) => !prev);
6384
6568
  onLogoClick?.();
@@ -6621,7 +6805,7 @@ var ScSlider = ({
6621
6805
  };
6622
6806
 
6623
6807
  // src/SC-WorkspaceSwitcher/streamoid-workspace-switcher.tsx
6624
- var import_react16 = require("react");
6808
+ var import_react17 = require("react");
6625
6809
  var import_icons42 = require("@streamoid/icons");
6626
6810
  var import_jsx_runtime59 = require("react/jsx-runtime");
6627
6811
  var PRIMARY_ICON = "var(--alias-text---icons-primary)";
@@ -6812,12 +6996,12 @@ function StreamoidWorkspaceSwitcher({
6812
6996
  onSwitchWorkspace,
6813
6997
  config
6814
6998
  }) {
6815
- const modalRef = (0, import_react16.useRef)(null);
6999
+ const modalRef = (0, import_react17.useRef)(null);
6816
7000
  const title = config?.title || "Switch workspace";
6817
7001
  const loadingText = config?.loadingText || "Loading workspaces\u2026";
6818
7002
  const currentWorkspaceText = config?.currentWorkspaceText || "Current workspace";
6819
7003
  const switchWorkspaceText = config?.switchWorkspaceText || "Switch workspace";
6820
- (0, import_react16.useEffect)(() => {
7004
+ (0, import_react17.useEffect)(() => {
6821
7005
  if (!open) return;
6822
7006
  function handleKeyDown(e) {
6823
7007
  if (e.key === "Escape") onClose();
@@ -8228,7 +8412,7 @@ var ScWorkspaceCard = ({
8228
8412
  };
8229
8413
 
8230
8414
  // src/SC-WorkspaceSwitchCard/ScWorkspaceSwitchCard.tsx
8231
- var import_react17 = require("react");
8415
+ var import_react18 = require("react");
8232
8416
  var import_icons62 = require("@streamoid/icons");
8233
8417
 
8234
8418
  // src/SC-WorkspaceSwitchCard/ScWorkspaceSwitchCard.module.css
@@ -8269,7 +8453,7 @@ function ScWorkspaceSwitchCard({
8269
8453
  onSettings,
8270
8454
  onLeave
8271
8455
  }) {
8272
- const [internalHover, setInternalHover] = (0, import_react17.useState)(false);
8456
+ const [internalHover, setInternalHover] = (0, import_react18.useState)(false);
8273
8457
  const isHover = hover !== void 0 ? hover : internalHover;
8274
8458
  const isCurrent = type === "currentWS";
8275
8459
  const isOther = type === "otherWS";
@@ -8397,7 +8581,7 @@ function ScWorkspaceSwitchCard({
8397
8581
  var NscWorkspaceSwitch = ScWorkspaceSwitchCard;
8398
8582
 
8399
8583
  // src/SC-Modal/ScModal.tsx
8400
- var import_react18 = require("react");
8584
+ var import_react19 = require("react");
8401
8585
  var import_react_dom = require("react-dom");
8402
8586
 
8403
8587
  // src/SC-Modal/ScModal.module.css
@@ -8419,7 +8603,7 @@ var ScModal = ({
8419
8603
  closeOnBackdrop = true,
8420
8604
  closeOnEsc = true
8421
8605
  }) => {
8422
- (0, import_react18.useEffect)(() => {
8606
+ (0, import_react19.useEffect)(() => {
8423
8607
  if (!open || !closeOnEsc) return;
8424
8608
  const onKey = (e) => {
8425
8609
  if (e.key === "Escape") onClose?.();
@@ -8452,7 +8636,7 @@ var ScModal = ({
8452
8636
  };
8453
8637
 
8454
8638
  // src/SC-Drawer/ScDrawer.tsx
8455
- var import_react19 = require("react");
8639
+ var import_react20 = require("react");
8456
8640
  var import_react_dom2 = require("react-dom");
8457
8641
 
8458
8642
  // src/SC-Drawer/ScDrawer.module.css
@@ -8480,8 +8664,8 @@ var ScDrawer = ({
8480
8664
  backdrop = false,
8481
8665
  zIndex
8482
8666
  }) => {
8483
- const panelRef = (0, import_react19.useRef)(null);
8484
- (0, import_react19.useEffect)(() => {
8667
+ const panelRef = (0, import_react20.useRef)(null);
8668
+ (0, import_react20.useEffect)(() => {
8485
8669
  if (!open) return;
8486
8670
  const onKey = (e) => {
8487
8671
  if (closeOnEsc && e.key === "Escape") onClose?.();
@@ -8579,7 +8763,7 @@ var ScTabs = ({
8579
8763
  };
8580
8764
 
8581
8765
  // src/SC-Counter/ScCounter.tsx
8582
- var import_react20 = require("react");
8766
+ var import_react21 = require("react");
8583
8767
  var import_icons63 = require("@streamoid/icons");
8584
8768
 
8585
8769
  // src/SC-Counter/ScCounter.module.css
@@ -8601,7 +8785,7 @@ var ScCounter = ({
8601
8785
  className,
8602
8786
  style
8603
8787
  }) => {
8604
- const [showInput, setShowInput] = (0, import_react20.useState)(false);
8788
+ const [showInput, setShowInput] = (0, import_react21.useState)(false);
8605
8789
  const set = (n) => {
8606
8790
  let v = n;
8607
8791
  if (min !== void 0) v = Math.max(min, v);
@@ -9690,7 +9874,7 @@ var ScSelectionList = ({
9690
9874
  };
9691
9875
 
9692
9876
  // src/SC-textArea/ScTextArea.tsx
9693
- var import_react21 = require("react");
9877
+ var import_react22 = require("react");
9694
9878
 
9695
9879
  // src/SC-textArea/ScTextArea.module.css
9696
9880
  var ScTextArea_default = {
@@ -9720,7 +9904,7 @@ var ScTextArea = ({
9720
9904
  style,
9721
9905
  ...props
9722
9906
  }) => {
9723
- const [focused, setFocused] = (0, import_react21.useState)(false);
9907
+ const [focused, setFocused] = (0, import_react22.useState)(false);
9724
9908
  const derivedState = state ?? (props.disabled ? "disabled" : focused ? "active" : (props.value !== void 0 ? String(props.value).length > 0 : false) ? "filled" : "default");
9725
9909
  const stateClass = ScTextArea_default["state-" + derivedState];
9726
9910
  const labelGroupClass = ScTextArea_default["label-group-" + (labelGroup || "none")];
@@ -9762,7 +9946,7 @@ var ScTextArea = ({
9762
9946
  };
9763
9947
 
9764
9948
  // src/SC-select/ScSelect.tsx
9765
- var import_react22 = require("react");
9949
+ var import_react23 = require("react");
9766
9950
 
9767
9951
  // src/SC-select/ScSelect.module.css
9768
9952
  var ScSelect_default = {
@@ -9799,9 +9983,9 @@ var ScSelect = (props) => {
9799
9983
  disabled = false,
9800
9984
  className
9801
9985
  } = props;
9802
- const [open, setOpen] = (0, import_react22.useState)(false);
9803
- const rootRef = (0, import_react22.useRef)(null);
9804
- (0, import_react22.useEffect)(() => {
9986
+ const [open, setOpen] = (0, import_react23.useState)(false);
9987
+ const rootRef = (0, import_react23.useRef)(null);
9988
+ (0, import_react23.useEffect)(() => {
9805
9989
  if (!open) return;
9806
9990
  const handleClick = (e) => {
9807
9991
  if (rootRef.current && !rootRef.current.contains(e.target)) {
@@ -9892,7 +10076,7 @@ var ScSelect = (props) => {
9892
10076
  };
9893
10077
 
9894
10078
  // src/SC-fileField/ScFileField.tsx
9895
- var import_react23 = require("react");
10079
+ var import_react24 = require("react");
9896
10080
 
9897
10081
  // src/SC-fileField/ScFileField.module.css
9898
10082
  var ScFileField_default = {
@@ -9930,7 +10114,7 @@ var ScFileField = (props) => {
9930
10114
  label,
9931
10115
  className
9932
10116
  } = props;
9933
- const inputRef = (0, import_react23.useRef)(null);
10117
+ const inputRef = (0, import_react24.useRef)(null);
9934
10118
  const hasFile = Boolean(fileName);
9935
10119
  const isUploading = Boolean(uploading);
9936
10120
  const clampedProgress = Math.max(0, Math.min(100, progress));
@@ -10049,7 +10233,7 @@ var ScFileField = (props) => {
10049
10233
  };
10050
10234
 
10051
10235
  // src/SC-mediaApproval/ScMediaApproval.tsx
10052
- var import_react24 = require("react");
10236
+ var import_react25 = require("react");
10053
10237
 
10054
10238
  // src/SC-mediaApproval/ScMediaApproval.module.css
10055
10239
  var ScMediaApproval_default = {
@@ -10096,9 +10280,9 @@ var ScMediaApproval = (props) => {
10096
10280
  className
10097
10281
  } = props;
10098
10282
  const total = mediaUrls.length;
10099
- const [index, setIndex] = (0, import_react24.useState)(activeIndex ?? 0);
10100
- const [mediaLoading, setMediaLoading] = (0, import_react24.useState)(false);
10101
- (0, import_react24.useEffect)(() => {
10283
+ const [index, setIndex] = (0, import_react25.useState)(activeIndex ?? 0);
10284
+ const [mediaLoading, setMediaLoading] = (0, import_react25.useState)(false);
10285
+ (0, import_react25.useEffect)(() => {
10102
10286
  if (typeof activeIndex === "number") {
10103
10287
  setIndex(activeIndex);
10104
10288
  }
@@ -10233,7 +10417,7 @@ var ScMediaApproval = (props) => {
10233
10417
  };
10234
10418
 
10235
10419
  // src/SC-mediaSelect/ScMediaSelect.tsx
10236
- var import_react25 = require("react");
10420
+ var import_react26 = require("react");
10237
10421
 
10238
10422
  // src/SC-mediaSelect/ScMediaSelect.module.css
10239
10423
  var ScMediaSelect_default = {
@@ -10289,7 +10473,7 @@ var ScMediaSelect = (props) => {
10289
10473
  } = props;
10290
10474
  const total = items.length;
10291
10475
  const resolvedMax = typeof max === "number" ? max : total;
10292
- const selectedSet = (0, import_react25.useMemo)(() => new Set(selected), [selected]);
10476
+ const selectedSet = (0, import_react26.useMemo)(() => new Set(selected), [selected]);
10293
10477
  const selectedCount = selectedSet.size;
10294
10478
  let countLabel = selectedCount + " of " + total + " selected";
10295
10479
  if (min > 0) countLabel += " (min " + min + ")";
@@ -10358,7 +10542,7 @@ var ScMediaSelect = (props) => {
10358
10542
  };
10359
10543
 
10360
10544
  // src/SC-todoList/ScTodoList.tsx
10361
- var import_react26 = require("react");
10545
+ var import_react27 = require("react");
10362
10546
 
10363
10547
  // src/SC-todoList/ScTodoList.module.css
10364
10548
  var ScTodoList_default = {
@@ -10391,9 +10575,9 @@ var ScTodoList = ({
10391
10575
  addPlaceholder = "Add an item",
10392
10576
  className
10393
10577
  }) => {
10394
- const [editingId, setEditingId] = (0, import_react26.useState)(null);
10395
- const [editValue, setEditValue] = (0, import_react26.useState)("");
10396
- const [newValue, setNewValue] = (0, import_react26.useState)("");
10578
+ const [editingId, setEditingId] = (0, import_react27.useState)(null);
10579
+ const [editValue, setEditValue] = (0, import_react27.useState)("");
10580
+ const [newValue, setNewValue] = (0, import_react27.useState)("");
10397
10581
  const total = items.length;
10398
10582
  const completed = items.filter((i) => i.status === "completed").length;
10399
10583
  const startEditing = (item) => {
@@ -11247,7 +11431,7 @@ var ScWorkspaceSwitchMobileV2 = ({
11247
11431
  };
11248
11432
 
11249
11433
  // src/SC-imageField/ScImageField.tsx
11250
- var import_react27 = require("react");
11434
+ var import_react28 = require("react");
11251
11435
 
11252
11436
  // src/SC-imageField/ScImageField.module.css
11253
11437
  var ScImageField_default = {
@@ -11274,7 +11458,7 @@ var ScImageField = ({
11274
11458
  onRemove,
11275
11459
  className
11276
11460
  }) => {
11277
- const inputRef = (0, import_react27.useRef)(null);
11461
+ const inputRef = (0, import_react28.useRef)(null);
11278
11462
  const hasImage = !!imagePreview;
11279
11463
  function handleClick() {
11280
11464
  if (!hasImage) {
@@ -11510,7 +11694,7 @@ var ScPlanDetailsCardMobile = ({
11510
11694
  };
11511
11695
 
11512
11696
  // src/SC-ProfilePopup/ScProfilePopup.tsx
11513
- var import_react28 = require("react");
11697
+ var import_react29 = require("react");
11514
11698
 
11515
11699
  // src/SC-ProfilePopup/ScProfilePopup.module.css
11516
11700
  var ScProfilePopup_default = {
@@ -11544,7 +11728,7 @@ var activateOnKey = (handler) => (event) => {
11544
11728
  handler();
11545
11729
  }
11546
11730
  };
11547
- var ScProfilePopup = (0, import_react28.forwardRef)(
11731
+ var ScProfilePopup = (0, import_react29.forwardRef)(
11548
11732
  ({
11549
11733
  name = "Chris Hemsworth",
11550
11734
  email = "chris@kepler.com",