@cntyclub/ui-react 0.5.0 → 0.6.0

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
@@ -1277,10 +1277,18 @@ type SidebarContextProps = {
1277
1277
  toggleSidebar: () => void;
1278
1278
  };
1279
1279
  declare function useSidebar(): SidebarContextProps;
1280
- declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }: React$1.ComponentProps<"div"> & {
1280
+ declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, persistKey, className, style, children, ...props }: React$1.ComponentProps<"div"> & {
1281
1281
  defaultOpen?: boolean;
1282
1282
  open?: boolean;
1283
1283
  onOpenChange?: (open: boolean) => void;
1284
+ /**
1285
+ * Remember the expanded/collapsed state in `localStorage` under this key and
1286
+ * restore it on the next load (desktop rail only; the mobile sheet is always
1287
+ * closed on load). Opt-in — omit to keep the sidebar un-persisted. Ignored in
1288
+ * controlled mode (when `open` is provided). The restore runs before first
1289
+ * paint, so there's no expand→collapse flash.
1290
+ */
1291
+ persistKey?: string;
1284
1292
  }): React$1.JSX.Element;
1285
1293
  declare function Sidebar({ side, variant, collapsible, className, children, ...props }: React$1.ComponentProps<"div"> & {
1286
1294
  side?: "left" | "right";
package/dist/index.js CHANGED
@@ -7615,6 +7615,7 @@ function SidebarProvider({
7615
7615
  defaultOpen = true,
7616
7616
  open: openProp,
7617
7617
  onOpenChange: setOpenProp,
7618
+ persistKey,
7618
7619
  className,
7619
7620
  style,
7620
7621
  children,
@@ -7641,11 +7642,24 @@ function SidebarProvider({
7641
7642
  }
7642
7643
  try {
7643
7644
  document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
7645
+ if (persistKey) {
7646
+ window.localStorage.setItem(persistKey, openState ? "true" : "false");
7647
+ }
7644
7648
  } catch {
7645
7649
  }
7646
7650
  },
7647
- [setOpenProp, open]
7651
+ [setOpenProp, open, persistKey]
7648
7652
  );
7653
+ useIsomorphicLayoutEffect(() => {
7654
+ if (!persistKey || openProp !== void 0) return;
7655
+ try {
7656
+ const stored = window.localStorage.getItem(persistKey);
7657
+ if (stored === "true" || stored === "false") {
7658
+ _setOpen(stored === "true");
7659
+ }
7660
+ } catch {
7661
+ }
7662
+ }, [persistKey, openProp]);
7649
7663
  const toggleSidebar = React17.useCallback(() => {
7650
7664
  return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
7651
7665
  }, [isMobile, setOpen]);