@octaviaflow/core 3.0.9 → 3.0.11

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.
@@ -1 +1 @@
1
- {"version":3,"file":"AuthCard.d.ts","sourceRoot":"","sources":["../../../src/components/AuthCard/AuthCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAGjD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,oEAAoE;IACpE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,SAAS,GACV,EAAE,aAAa,2CAgBf;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAe,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAQ3E;AAKD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAYxF;AAKD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,aAAa,2CA8BvF;AAKD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,2CAIlF"}
1
+ {"version":3,"file":"AuthCard.d.ts","sourceRoot":"","sources":["../../../src/components/AuthCard/AuthCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,SAAS,EAA2B,MAAM,OAAO,CAAC;AAGpF,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,oEAAoE;IACpE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,SAAS,GACV,EAAE,aAAa,2CAgBf;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAe,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAQ3E;AAKD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAYxF;AAKD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,aAAa,2CA6EvF;AAKD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,2CAIlF"}
@@ -12,6 +12,13 @@ export interface DropdownMenuProps {
12
12
  items: DropdownMenuItem[];
13
13
  align?: "start" | "end";
14
14
  className?: string;
15
+ /**
16
+ * Override the className applied to the auto-generated trigger <button>.
17
+ * Defaults to "ods-dropdown__trigger". Useful when composing the
18
+ * DropdownMenu inside a host component (e.g. Sidebar user card) that
19
+ * supplies its own button styling.
20
+ */
21
+ triggerClassName?: string;
15
22
  /**
16
23
  * Accessible name for the trigger button. Required when `trigger` is not
17
24
  * a plain string (e.g. an icon-only trigger). When omitted and `trigger`
@@ -21,5 +28,5 @@ export interface DropdownMenuProps {
21
28
  /** id of an element that labels the trigger; alternative to aria-label. */
22
29
  "aria-labelledby"?: string;
23
30
  }
24
- export declare function DropdownMenu({ trigger, items, align, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, }: DropdownMenuProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function DropdownMenu({ trigger, items, align, className, triggerClassName, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, }: DropdownMenuProps): import("react/jsx-runtime").JSX.Element;
25
32
  //# sourceMappingURL=DropdownMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/components/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAQ/C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAsID,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,KAAe,EACf,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,GAClC,EAAE,iBAAiB,2CAsCnB"}
1
+ {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/components/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAQ/C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAsID,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,KAAe,EACf,SAAS,EACT,gBAAgB,EAChB,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,GAClC,EAAE,iBAAiB,2CA0CnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAA4C,MAAM,OAAO,CAAC;AAEjF,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,2EAA2E;IAC3E,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAClD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAGtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EACtB,OAAoB,EACpB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,aAAqB,EACrB,cAAc,EACd,aAAoC,EACpC,cAAoB,EACpB,eAAqB,EACrB,YAAkB,EAClB,MAAe,EACf,SAAS,GACV,EAAE,YAAY,2CA6Gd"}
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAA4C,MAAM,OAAO,CAAC;AAEjF,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,2EAA2E;IAC3E,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAClD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAGtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EACtB,OAAoB,EACpB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,aAAqB,EACrB,cAAc,EACd,aAAoC,EACpC,cAAoB,EACpB,eAAqB,EACrB,YAAkB,EAClB,MAAe,EACf,SAAS,GACV,EAAE,YAAY,2CAuId"}
package/dist/index.cjs CHANGED
@@ -415,24 +415,61 @@ function AuthTabs({ tabs, defaultTab, value, onChange, className }) {
415
415
  onChange?.(id);
416
416
  };
417
417
  const activeTab = tabs.find((t) => t.id === active) ?? tabs[0];
418
+ const scopeId = (0, import_react2.useId)();
419
+ const tabRefs = (0, import_react2.useRef)({});
420
+ const handleKeyDown = (e) => {
421
+ const ids = tabs.map((t) => t.id);
422
+ const currentIdx = ids.indexOf(active);
423
+ if (currentIdx === -1) return;
424
+ let nextIdx = null;
425
+ if (e.key === "ArrowRight") nextIdx = (currentIdx + 1) % ids.length;
426
+ else if (e.key === "ArrowLeft") nextIdx = (currentIdx - 1 + ids.length) % ids.length;
427
+ else if (e.key === "Home") nextIdx = 0;
428
+ else if (e.key === "End") nextIdx = ids.length - 1;
429
+ if (nextIdx === null) return;
430
+ e.preventDefault();
431
+ const nextId = ids[nextIdx];
432
+ select(nextId);
433
+ tabRefs.current[nextId]?.focus();
434
+ };
418
435
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: cn("ods-auth-tabs", className), children: [
419
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "ods-auth-tabs__list", role: "tablist", children: tabs.map((t) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
420
- "button",
436
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "ods-auth-tabs__list", role: "tablist", children: tabs.map((t) => {
437
+ const isActive2 = t.id === active;
438
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
439
+ "button",
440
+ {
441
+ ref: (el) => {
442
+ tabRefs.current[t.id] = el;
443
+ },
444
+ type: "button",
445
+ role: "tab",
446
+ id: `${scopeId}-tab-${t.id}`,
447
+ "aria-selected": isActive2,
448
+ "aria-controls": `${scopeId}-panel-${t.id}`,
449
+ tabIndex: isActive2 ? 0 : -1,
450
+ className: cn("ods-auth-tabs__tab", isActive2 && "ods-auth-tabs__tab--active"),
451
+ onClick: () => select(t.id),
452
+ onKeyDown: handleKeyDown,
453
+ children: [
454
+ t.icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "ods-auth-tabs__icon", children: t.icon }),
455
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "ods-auth-tabs__label", children: t.label }),
456
+ t.description && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "ods-auth-tabs__desc", children: t.description })
457
+ ]
458
+ },
459
+ t.id
460
+ );
461
+ }) }),
462
+ activeTab && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
463
+ "div",
421
464
  {
422
- type: "button",
423
- role: "tab",
424
- "aria-selected": t.id === active,
425
- className: cn("ods-auth-tabs__tab", t.id === active && "ods-auth-tabs__tab--active"),
426
- onClick: () => select(t.id),
427
- children: [
428
- t.icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "ods-auth-tabs__icon", children: t.icon }),
429
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "ods-auth-tabs__label", children: t.label }),
430
- t.description && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "ods-auth-tabs__desc", children: t.description })
431
- ]
432
- },
433
- t.id
434
- )) }),
435
- activeTab && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "ods-auth-tabs__panel", children: activeTab.content })
465
+ role: "tabpanel",
466
+ id: `${scopeId}-panel-${activeTab.id}`,
467
+ "aria-labelledby": `${scopeId}-tab-${activeTab.id}`,
468
+ tabIndex: 0,
469
+ className: "ods-auth-tabs__panel",
470
+ children: activeTab.content
471
+ }
472
+ )
436
473
  ] });
437
474
  }
438
475
  function AuthBadge({ tone = "neutral", children, className }) {
@@ -6569,6 +6606,7 @@ function DropdownMenu({
6569
6606
  items,
6570
6607
  align = "start",
6571
6608
  className,
6609
+ triggerClassName,
6572
6610
  "aria-label": ariaLabel,
6573
6611
  "aria-labelledby": ariaLabelledby
6574
6612
  }) {
@@ -6587,7 +6625,15 @@ function DropdownMenu({
6587
6625
  );
6588
6626
  const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeTriggerProps } = buttonProps;
6589
6627
  return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
6590
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("button", { ...safeTriggerProps, ref: triggerRef, className: "ods-dropdown__trigger", children: trigger }),
6628
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
6629
+ "button",
6630
+ {
6631
+ ...safeTriggerProps,
6632
+ ref: triggerRef,
6633
+ className: triggerClassName ?? "ods-dropdown__trigger",
6634
+ children: trigger
6635
+ }
6636
+ ),
6591
6637
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
6592
6638
  MenuPopup,
6593
6639
  {
@@ -11253,15 +11299,17 @@ function Sidebar({
11253
11299
  className
11254
11300
  }) {
11255
11301
  const allSections = sections ?? (items ? [{ items }] : []);
11256
- const [internalPinned, setInternalPinned] = (0, import_react53.useState)(() => {
11257
- if (typeof window === "undefined") return defaultPinned;
11302
+ const [internalPinned, setInternalPinned] = (0, import_react53.useState)(defaultPinned);
11303
+ (0, import_react53.useEffect)(() => {
11304
+ if (pinnedProp !== void 0) return;
11258
11305
  try {
11259
11306
  const stored = window.localStorage.getItem(pinStorageKey);
11260
- if (stored !== null) return stored === "true";
11307
+ if (stored !== null && stored !== String(internalPinned)) {
11308
+ setInternalPinned(stored === "true");
11309
+ }
11261
11310
  } catch {
11262
11311
  }
11263
- return defaultPinned;
11264
- });
11312
+ }, []);
11265
11313
  const pinned = pinnedProp ?? internalPinned;
11266
11314
  const setPinned = (0, import_react53.useCallback)(
11267
11315
  (p) => {
@@ -11299,6 +11347,17 @@ function Sidebar({
11299
11347
  const autoMode = variant === "auto";
11300
11348
  const showAsRail = autoMode ? !pinned : variant === "rail";
11301
11349
  const overlayOpen = autoMode && !pinned && hoverOpen;
11350
+ (0, import_react53.useEffect)(() => {
11351
+ if (!overlayOpen) return;
11352
+ const handler = (e) => {
11353
+ if (e.key === "Escape") {
11354
+ clearTimers();
11355
+ setHoverOpen(false);
11356
+ }
11357
+ };
11358
+ window.addEventListener("keydown", handler);
11359
+ return () => window.removeEventListener("keydown", handler);
11360
+ }, [overlayOpen]);
11302
11361
  return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
11303
11362
  "nav",
11304
11363
  {
@@ -11404,17 +11463,34 @@ function RailLayout({
11404
11463
  },
11405
11464
  item.id
11406
11465
  )) }),
11407
- user && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
11408
- "button",
11466
+ user && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SidebarUserRail, { user })
11467
+ ] });
11468
+ }
11469
+ function SidebarUserRail({ user }) {
11470
+ const labelText = typeof user.name === "string" ? user.name : "User";
11471
+ const avatar = user.avatar ?? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: user.initial ?? (typeof user.name === "string" ? user.name.charAt(0).toUpperCase() : "?") });
11472
+ if (user.menu && user.menu.length > 0) {
11473
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
11474
+ DropdownMenu,
11409
11475
  {
11410
- type: "button",
11411
- className: "ods-sidebar__user-rail",
11412
- onClick: user.onClick,
11413
- "aria-label": typeof user.name === "string" ? user.name : "User",
11414
- children: user.avatar ?? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: user.initial ?? (typeof user.name === "string" ? user.name.charAt(0).toUpperCase() : "?") })
11476
+ trigger: avatar,
11477
+ items: user.menu,
11478
+ align: "end",
11479
+ "aria-label": labelText,
11480
+ triggerClassName: "ods-sidebar__user-rail"
11415
11481
  }
11416
- )
11417
- ] });
11482
+ );
11483
+ }
11484
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
11485
+ "button",
11486
+ {
11487
+ type: "button",
11488
+ className: "ods-sidebar__user-rail",
11489
+ onClick: user.onClick,
11490
+ "aria-label": labelText,
11491
+ children: avatar
11492
+ }
11493
+ );
11418
11494
  }
11419
11495
  function RailItem({
11420
11496
  item,
@@ -11533,18 +11609,7 @@ function ExpandedLayout({
11533
11609
  ] }, section.id ?? sIdx)) }),
11534
11610
  (footerItems || user) && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ods-sidebar__footer", children: [
11535
11611
  footerItems && footerItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "ods-sidebar__footer-list", children: footerItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(ExpandedItem, { item, level: 0 }, item.id)) }),
11536
- user && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("button", { type: "button", className: "ods-sidebar__user-card", onClick: user.onClick, children: [
11537
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-avatar", children: user.avatar ?? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: user.initial ?? (typeof user.name === "string" ? user.name.charAt(0).toUpperCase() : "?") }) }),
11538
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: "ods-sidebar__user-info", children: [
11539
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-name", children: user.name }),
11540
- user.email && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-email", children: user.email })
11541
- ] }),
11542
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [
11543
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "3", r: "1.3", fill: "currentColor" }),
11544
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "8", r: "1.3", fill: "currentColor" }),
11545
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "13", r: "1.3", fill: "currentColor" })
11546
- ] })
11547
- ] })
11612
+ user && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SidebarUserCard, { user })
11548
11613
  ] })
11549
11614
  ] });
11550
11615
  }
@@ -11634,6 +11699,34 @@ function ExpandedItem({ item, level }) {
11634
11699
  }
11635
11700
  );
11636
11701
  }
11702
+ function SidebarUserCard({ user }) {
11703
+ const labelText = typeof user.name === "string" ? user.name : "User";
11704
+ const body = /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
11705
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-avatar", children: user.avatar ?? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: user.initial ?? (typeof user.name === "string" ? user.name.charAt(0).toUpperCase() : "?") }) }),
11706
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: "ods-sidebar__user-info", children: [
11707
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-name", children: user.name }),
11708
+ user.email && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-email", children: user.email })
11709
+ ] }),
11710
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [
11711
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "3", r: "1.3", fill: "currentColor" }),
11712
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "8", r: "1.3", fill: "currentColor" }),
11713
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "13", r: "1.3", fill: "currentColor" })
11714
+ ] })
11715
+ ] });
11716
+ if (user.menu && user.menu.length > 0) {
11717
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
11718
+ DropdownMenu,
11719
+ {
11720
+ trigger: body,
11721
+ items: user.menu,
11722
+ align: "end",
11723
+ "aria-label": labelText,
11724
+ triggerClassName: "ods-sidebar__user-card"
11725
+ }
11726
+ );
11727
+ }
11728
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("button", { type: "button", className: "ods-sidebar__user-card", onClick: user.onClick, children: body });
11729
+ }
11637
11730
  function hasActiveDescendant(item) {
11638
11731
  if (!item.children) return false;
11639
11732
  for (const c of item.children) {