@scripso-homepad/ui 0.4.35 → 0.4.37

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.
@@ -5382,7 +5382,7 @@ var require_react_dom_production_min = __commonJS({
5382
5382
  if (5 === d || 6 === d) a = a.stateNode, b ? c.insertBefore(a, b) : c.appendChild(a);
5383
5383
  else if (4 !== d && (a = a.child, null !== a)) for (Wj(a, b, c), a = a.sibling; null !== a; ) Wj(a, b, c), a = a.sibling;
5384
5384
  }
5385
- var X3 = null;
5385
+ var X2 = null;
5386
5386
  var Xj = false;
5387
5387
  function Yj(a, b, c) {
5388
5388
  for (c = c.child; null !== c; ) Zj(a, b, c), c = c.sibling;
@@ -5396,23 +5396,23 @@ var require_react_dom_production_min = __commonJS({
5396
5396
  case 5:
5397
5397
  U || Lj(c, b);
5398
5398
  case 6:
5399
- var d = X3, e = Xj;
5400
- X3 = null;
5399
+ var d = X2, e = Xj;
5400
+ X2 = null;
5401
5401
  Yj(a, b, c);
5402
- X3 = d;
5402
+ X2 = d;
5403
5403
  Xj = e;
5404
- null !== X3 && (Xj ? (a = X3, c = c.stateNode, 8 === a.nodeType ? a.parentNode.removeChild(c) : a.removeChild(c)) : X3.removeChild(c.stateNode));
5404
+ null !== X2 && (Xj ? (a = X2, c = c.stateNode, 8 === a.nodeType ? a.parentNode.removeChild(c) : a.removeChild(c)) : X2.removeChild(c.stateNode));
5405
5405
  break;
5406
5406
  case 18:
5407
- null !== X3 && (Xj ? (a = X3, c = c.stateNode, 8 === a.nodeType ? Kf(a.parentNode, c) : 1 === a.nodeType && Kf(a, c), bd(a)) : Kf(X3, c.stateNode));
5407
+ null !== X2 && (Xj ? (a = X2, c = c.stateNode, 8 === a.nodeType ? Kf(a.parentNode, c) : 1 === a.nodeType && Kf(a, c), bd(a)) : Kf(X2, c.stateNode));
5408
5408
  break;
5409
5409
  case 4:
5410
- d = X3;
5410
+ d = X2;
5411
5411
  e = Xj;
5412
- X3 = c.stateNode.containerInfo;
5412
+ X2 = c.stateNode.containerInfo;
5413
5413
  Xj = true;
5414
5414
  Yj(a, b, c);
5415
- X3 = d;
5415
+ X2 = d;
5416
5416
  Xj = e;
5417
5417
  break;
5418
5418
  case 0:
@@ -5469,23 +5469,23 @@ var require_react_dom_production_min = __commonJS({
5469
5469
  a: for (; null !== h; ) {
5470
5470
  switch (h.tag) {
5471
5471
  case 5:
5472
- X3 = h.stateNode;
5472
+ X2 = h.stateNode;
5473
5473
  Xj = false;
5474
5474
  break a;
5475
5475
  case 3:
5476
- X3 = h.stateNode.containerInfo;
5476
+ X2 = h.stateNode.containerInfo;
5477
5477
  Xj = true;
5478
5478
  break a;
5479
5479
  case 4:
5480
- X3 = h.stateNode.containerInfo;
5480
+ X2 = h.stateNode.containerInfo;
5481
5481
  Xj = true;
5482
5482
  break a;
5483
5483
  }
5484
5484
  h = h.return;
5485
5485
  }
5486
- if (null === X3) throw Error(p(160));
5486
+ if (null === X2) throw Error(p(160));
5487
5487
  Zj(f, g, e);
5488
- X3 = null;
5488
+ X2 = null;
5489
5489
  Xj = false;
5490
5490
  var k = e.alternate;
5491
5491
  null !== k && (k.return = null);
@@ -29500,6 +29500,62 @@ function AppHeader({
29500
29500
  }
29501
29501
  );
29502
29502
  }
29503
+ function SidebarCollapseIcon({
29504
+ className,
29505
+ size = 20,
29506
+ strokeWidth = 2
29507
+ }) {
29508
+ return /* @__PURE__ */ jsxRuntime.jsx(
29509
+ "svg",
29510
+ {
29511
+ width: size,
29512
+ height: size,
29513
+ viewBox: "0 0 20 20",
29514
+ fill: "none",
29515
+ xmlns: "http://www.w3.org/2000/svg",
29516
+ "aria-hidden": true,
29517
+ className,
29518
+ children: /* @__PURE__ */ jsxRuntime.jsx(
29519
+ "path",
29520
+ {
29521
+ d: "M12.5 2.5V17.5M8.33333 12.5L5.83333 10L8.33333 7.5M4.16667 2.5H15.8333C16.7538 2.5 17.5 3.24619 17.5 4.16667V15.8333C17.5 16.7538 16.7538 17.5 15.8333 17.5H4.16667C3.24619 17.5 2.5 16.7538 2.5 15.8333V4.16667C2.5 3.24619 3.24619 2.5 4.16667 2.5Z",
29522
+ stroke: "currentColor",
29523
+ strokeWidth,
29524
+ strokeLinecap: "round",
29525
+ strokeLinejoin: "round"
29526
+ }
29527
+ )
29528
+ }
29529
+ );
29530
+ }
29531
+ function SidebarExpandIcon({
29532
+ className,
29533
+ size = 20,
29534
+ strokeWidth = 2
29535
+ }) {
29536
+ return /* @__PURE__ */ jsxRuntime.jsx(
29537
+ "svg",
29538
+ {
29539
+ width: size,
29540
+ height: size,
29541
+ viewBox: "0 0 20 20",
29542
+ fill: "none",
29543
+ xmlns: "http://www.w3.org/2000/svg",
29544
+ "aria-hidden": true,
29545
+ className,
29546
+ children: /* @__PURE__ */ jsxRuntime.jsx(
29547
+ "path",
29548
+ {
29549
+ d: "M12.5 2.5V17.5M6.66667 7.5L9.16667 10L6.66667 12.5M4.16667 2.5H15.8333C16.7538 2.5 17.5 3.24619 17.5 4.16667V15.8333C17.5 16.7538 16.7538 17.5 15.8333 17.5H4.16667C3.24619 17.5 2.5 16.7538 2.5 15.8333V4.16667C2.5 3.24619 3.24619 2.5 4.16667 2.5Z",
29550
+ stroke: "currentColor",
29551
+ strokeWidth,
29552
+ strokeLinecap: "round",
29553
+ strokeLinejoin: "round"
29554
+ }
29555
+ )
29556
+ }
29557
+ );
29558
+ }
29503
29559
  function useMediaQuery(query) {
29504
29560
  const [matches, setMatches] = react.useState(() => {
29505
29561
  if (typeof window === "undefined") {
@@ -29726,6 +29782,7 @@ function Sidebar({
29726
29782
  className,
29727
29783
  mobileOpen,
29728
29784
  onMobileClose,
29785
+ onMobileOpen,
29729
29786
  onNavItemClick,
29730
29787
  collapseIcon,
29731
29788
  expandIcon,
@@ -29734,12 +29791,14 @@ function Sidebar({
29734
29791
  collapsed,
29735
29792
  onCollapsedChange
29736
29793
  }) {
29737
- const isDesktop = useMediaQuery("(min-width: 768px)");
29794
+ const isDesktop = useMediaQuery("(min-width: 1024px)");
29795
+ const isRailLayout = useMediaQuery("(min-width: 768px)");
29738
29796
  const [internalCollapsed, setInternalCollapsed] = react.useState(
29739
29797
  () => readInitialCollapsedState(sidebarStorageKey, initialCollapsed)
29740
29798
  );
29741
29799
  const isCollapsed = collapsed ?? internalCollapsed;
29742
- const isExpanded = isDesktop ? !isCollapsed : true;
29800
+ const isExpanded = isDesktop ? !isCollapsed : mobileOpen;
29801
+ const showCollapsedRail = isRailLayout && !isDesktop;
29743
29802
  const setCollapsed = react.useCallback(
29744
29803
  (next) => {
29745
29804
  if (collapsed === void 0) {
@@ -29758,8 +29817,12 @@ function Sidebar({
29758
29817
  toggleCollapsed();
29759
29818
  return;
29760
29819
  }
29761
- onMobileClose?.();
29762
- }, [isDesktop, onMobileClose, toggleCollapsed]);
29820
+ if (mobileOpen) {
29821
+ onMobileClose?.();
29822
+ return;
29823
+ }
29824
+ onMobileOpen?.();
29825
+ }, [isDesktop, mobileOpen, onMobileClose, onMobileOpen, toggleCollapsed]);
29763
29826
  const handleNavItemNavigate = react.useCallback(
29764
29827
  (item) => {
29765
29828
  onNavItemClick?.(item);
@@ -29799,23 +29862,26 @@ function Sidebar({
29799
29862
  "aria-label": labels.closeMenu,
29800
29863
  onClick: onMobileClose,
29801
29864
  className: cn(
29802
- "fixed inset-0 z-40 bg-navy-800/60 backdrop-blur-[1px] transition-opacity duration-300 ease-in-out md:hidden",
29865
+ "fixed inset-0 z-40 bg-navy-800/60 backdrop-blur-[1px] transition-opacity duration-300 ease-in-out lg:hidden",
29803
29866
  mobileOpen ? "opacity-100" : "pointer-events-none opacity-0"
29804
29867
  )
29805
29868
  }
29806
29869
  ),
29870
+ showCollapsedRail && mobileOpen ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-screen w-[76px] shrink-0", "aria-hidden": true }) : null,
29807
29871
  /* @__PURE__ */ jsxRuntime.jsxs(
29808
29872
  "aside",
29809
29873
  {
29810
29874
  className: cn(
29811
29875
  "fixed inset-y-0 left-0 z-50 flex h-screen w-[min(300px,85vw)] flex-col gap-8 overflow-hidden bg-navy p-4 shadow-xl",
29812
29876
  "transition-[transform,width,padding,gap] duration-300 ease-in-out will-change-[transform,width]",
29813
- mobileOpen ? "translate-x-0" : "-translate-x-full",
29814
- "md:relative md:z-auto md:w-[300px] md:translate-x-0 md:shadow-none",
29815
- isExpanded ? "md:w-[300px]" : "md:w-[76px] md:items-center md:gap-2 md:px-3 md:py-4",
29877
+ mobileOpen ? "translate-x-0" : "-translate-x-full pointer-events-none",
29878
+ "md:relative md:z-auto md:w-[76px] md:translate-x-0 md:pointer-events-auto md:shadow-none md:items-center md:gap-2 md:px-3 md:py-4",
29879
+ mobileOpen && "md:fixed md:z-50 md:w-[min(300px,85vw)] md:items-stretch md:gap-8 md:p-4 md:shadow-xl",
29880
+ "lg:relative lg:z-auto lg:translate-x-0 lg:pointer-events-auto lg:shadow-none",
29881
+ isExpanded ? "lg:w-[300px] lg:items-stretch lg:gap-8 lg:p-4" : "lg:w-[76px] lg:items-center lg:gap-2 lg:px-3 lg:py-4",
29816
29882
  className
29817
29883
  ),
29818
- "aria-hidden": !isDesktop && !mobileOpen,
29884
+ "aria-hidden": !isDesktop && !mobileOpen && !showCollapsedRail,
29819
29885
  children: [
29820
29886
  /* @__PURE__ */ jsxRuntime.jsxs(
29821
29887
  "div",
@@ -29847,8 +29913,8 @@ function Sidebar({
29847
29913
  type: "button",
29848
29914
  onClick: handleHeaderAction,
29849
29915
  className: "shrink-0 cursor-pointer text-white transition-[opacity,transform] duration-200 hover:opacity-80 active:scale-95",
29850
- "aria-label": isDesktop ? isExpanded ? labels.collapse : labels.expand : labels.closeMenu,
29851
- children: isDesktop ? isExpanded ? collapseIcon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PanelLeftClose, { size: 20, strokeWidth: 1.75 }) : expandIcon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PanelLeftOpen, { size: 20, strokeWidth: 1.75 }) : closeIcon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { size: 20, strokeWidth: 1.75 })
29916
+ "aria-label": isExpanded ? isDesktop ? labels.collapse : labels.closeMenu : labels.expand,
29917
+ children: isExpanded ? collapseIcon ?? closeIcon ?? /* @__PURE__ */ jsxRuntime.jsx(SidebarCollapseIcon, {}) : expandIcon ?? /* @__PURE__ */ jsxRuntime.jsx(SidebarExpandIcon, {})
29852
29918
  }
29853
29919
  )
29854
29920
  ]
@@ -29897,7 +29963,8 @@ function SidebarMobileHeader({
29897
29963
  openMenuLabel,
29898
29964
  onOpenMenu,
29899
29965
  menuOpen = false,
29900
- className
29966
+ className,
29967
+ end
29901
29968
  }) {
29902
29969
  return /* @__PURE__ */ jsxRuntime.jsxs(
29903
29970
  "header",
@@ -29915,16 +29982,17 @@ function SidebarMobileHeader({
29915
29982
  className: "flex size-10 items-center justify-center rounded-xl text-navy transition-colors hover:bg-storm-gray-50",
29916
29983
  "aria-label": openMenuLabel,
29917
29984
  "aria-expanded": menuOpen,
29918
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Menu, { size: 22, strokeWidth: 1.75 })
29985
+ children: /* @__PURE__ */ jsxRuntime.jsx(SidebarExpandIcon, { size: 22 })
29919
29986
  }
29920
29987
  ),
29921
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
29988
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
29922
29989
  /* @__PURE__ */ jsxRuntime.jsx("img", { src: branding.logoIconSrc, alt: "", className: "h-[30px] w-[42px] shrink-0" }),
29923
29990
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 leading-none", children: [
29924
29991
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-base font-bold tracking-tight text-navy", children: branding.logoTitle }),
29925
29992
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[6.5px] font-normal tracking-[-0.26px] text-navy-300 uppercase", children: branding.logoTagline })
29926
29993
  ] })
29927
- ] })
29994
+ ] }),
29995
+ end ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: end }) : null
29928
29996
  ]
29929
29997
  }
29930
29998
  );
@@ -29937,12 +30005,12 @@ function DashboardLayout({
29937
30005
  className,
29938
30006
  mainClassName
29939
30007
  }) {
29940
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex h-screen overflow-hidden flex-row bg-storm-gray-0", className), children: [
29941
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-screen shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(Sidebar, { ...sidebar }) }),
30008
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex h-screen min-w-0 overflow-hidden flex-row bg-storm-gray-0", className), children: [
30009
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-md:contents md:h-screen md:shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(Sidebar, { ...sidebar }) }),
29942
30010
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-screen min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [
29943
30011
  /* @__PURE__ */ jsxRuntime.jsx(SidebarMobileHeader, { ...mobileHeader }),
29944
30012
  /* @__PURE__ */ jsxRuntime.jsx(AppHeader, { ...header }),
29945
- /* @__PURE__ */ jsxRuntime.jsx("main", { className: mainClassName ?? "min-h-0 flex-1 overflow-y-auto p-4 md:p-6", children })
30013
+ /* @__PURE__ */ jsxRuntime.jsx("main", { className: mainClassName ?? "min-h-0 min-w-0 flex-1 overflow-x-hidden overflow-y-auto p-4 xl:p-6", children })
29946
30014
  ] })
29947
30015
  ] });
29948
30016
  }
@@ -30278,21 +30346,22 @@ function Pagination({
30278
30346
  const visiblePages = getVisiblePageNumbers(safePage, totalPages, maxPageButtons);
30279
30347
  const canGoPrevious = safePage > 1;
30280
30348
  const canGoNext = safePage < totalPages;
30281
- if (hideOnSinglePage && totalPages <= 1) {
30349
+ const showPageControls = totalPages > 1;
30350
+ if (hideOnSinglePage && !showPageControls) {
30282
30351
  return null;
30283
30352
  }
30284
30353
  return /* @__PURE__ */ jsxRuntime.jsxs(
30285
30354
  "div",
30286
30355
  {
30287
30356
  className: cn(
30288
- "flex flex-col gap-4 px-4 pb-4 pt-4 font-[family-name:var(--font-sans)] sm:flex-row sm:items-center sm:justify-between",
30357
+ "flex flex-col items-center gap-4 px-4 pb-4 pt-4 text-center font-[family-name:var(--font-sans)] sm:flex-row sm:items-center sm:justify-between sm:text-left",
30289
30358
  variant === "standalone" && cn("rounded-xl border bg-storm-gray-0", "border-storm-gray-50"),
30290
30359
  dataTableClassNames.pagination,
30291
30360
  className
30292
30361
  ),
30293
30362
  children: [
30294
30363
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "typography-12 font-medium text-storm-gray-200", children: mergedLabels.showing({ start, end, total }) }),
30295
- /* @__PURE__ */ jsxRuntime.jsxs(
30364
+ showPageControls ? /* @__PURE__ */ jsxRuntime.jsxs(
30296
30365
  "nav",
30297
30366
  {
30298
30367
  "aria-label": "Pagination",
@@ -30360,7 +30429,7 @@ function Pagination({
30360
30429
  )
30361
30430
  ]
30362
30431
  }
30363
- )
30432
+ ) : null
30364
30433
  ]
30365
30434
  }
30366
30435
  );
@@ -30802,7 +30871,7 @@ function TableScrollArea({
30802
30871
  "div",
30803
30872
  {
30804
30873
  className: cn(
30805
- "table-scroll-area w-full overflow-auto",
30874
+ "table-scroll-area w-full min-w-0 max-w-full overflow-auto",
30806
30875
  fillHeight && "min-h-0 flex-1",
30807
30876
  className
30808
30877
  ),
@@ -30856,7 +30925,7 @@ function DataTable({
30856
30925
  }),
30857
30926
  [className, classNames, footerClassName, scrollClassName, tableClassName]
30858
30927
  );
30859
- return /* @__PURE__ */ jsxRuntime.jsx(DataTableClassNamesContext.Provider, { value: mergedClassNames, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col", fillHeight && "min-h-0 flex-1", mergedClassNames.root), children: [
30928
+ return /* @__PURE__ */ jsxRuntime.jsx(DataTableClassNamesContext.Provider, { value: mergedClassNames, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex min-w-0 flex-col", fillHeight && "min-h-0 flex-1", mergedClassNames.root), children: [
30860
30929
  /* @__PURE__ */ jsxRuntime.jsx(
30861
30930
  "div",
30862
30931
  {
@@ -30884,6 +30953,7 @@ function DataTable({
30884
30953
  "div",
30885
30954
  {
30886
30955
  className: cn(
30956
+ "shrink-0",
30887
30957
  tableFooterShellClassName,
30888
30958
  tableBorderClassName,
30889
30959
  mergedClassNames.footer
@@ -31036,7 +31106,7 @@ function Button({
31036
31106
  const customIcon = icon != null && typeof icon !== "boolean" ? icon : void 0;
31037
31107
  const hasIcon = showIcon || icon === true || customIcon != null;
31038
31108
  const resolvedContainerClassName = [
31039
- reactNative.Platform.OS === "web" ? "max-md:px-4!" : "",
31109
+ reactNative.Platform.OS === "web" ? hasIcon ? "max-md:pl-4! pr-2!" : "max-md:px-4!" : "",
31040
31110
  className
31041
31111
  ].filter(Boolean).join(" ");
31042
31112
  useApplyWebClassName(containerRef, resolvedContainerClassName || void 0);
@@ -31389,7 +31459,7 @@ function Drawer({
31389
31459
  type: "button",
31390
31460
  "aria-label": closeAriaLabel,
31391
31461
  className: cn(
31392
- "absolute inset-0 bg-storm-gray-850/40 backdrop-blur-[12px] transition-opacity duration-300 ease-in-out",
31462
+ "absolute inset-0 z-0 cursor-pointer bg-storm-gray-850/40 backdrop-blur-[12px] transition-opacity duration-300 ease-in-out",
31393
31463
  isAnimatedIn ? "opacity-100" : "opacity-0"
31394
31464
  ),
31395
31465
  onClick: onClose
@@ -31403,7 +31473,7 @@ function Drawer({
31403
31473
  "aria-labelledby": "homepad-drawer-title",
31404
31474
  ...subtitle ? { "aria-describedby": "homepad-drawer-subtitle" } : {},
31405
31475
  className: cn(
31406
- "relative z-10 flex h-[calc(100dvh-16px)] min-h-0 flex-col overflow-hidden rounded-[16px] bg-white shadow-2xl transition-transform duration-300 ease-in-out max-md:h-dvh max-md:rounded-none",
31476
+ "relative z-10 flex h-[calc(100dvh-16px)] min-h-0 cursor-auto flex-col overflow-hidden rounded-[16px] bg-white shadow-2xl transition-transform duration-300 ease-in-out max-md:h-dvh max-md:rounded-none",
31407
31477
  // Keep GPU transform only while animating — settled translate-x-0 blurs text.
31408
31478
  !isTransformSettled && "will-change-transform",
31409
31479
  isAnimatedIn ? isTransformSettled ? "transform-none" : "translate-x-0" : "translate-x-full",
@@ -31899,6 +31969,8 @@ exports.HistoryTimeline = HistoryTimeline;
31899
31969
  exports.Modal = Modal;
31900
31970
  exports.Pagination = Pagination;
31901
31971
  exports.Sidebar = Sidebar;
31972
+ exports.SidebarCollapseIcon = SidebarCollapseIcon;
31973
+ exports.SidebarExpandIcon = SidebarExpandIcon;
31902
31974
  exports.SidebarMobileHeader = SidebarMobileHeader;
31903
31975
  exports.SidebarNavItem = SidebarNavItem;
31904
31976
  exports.SidebarUserCard = SidebarUserCard;