@octaviaflow/core 3.0.8 → 3.0.10
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/components/Button/Button.d.ts +14 -1
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +8 -1
- package/dist/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/components/Sidebar/Sidebar.d.ts.map +1 -1
- package/dist/index.cjs +88 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +88 -27
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -7,6 +7,19 @@ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement
|
|
|
7
7
|
rightIcon?: ReactNode;
|
|
8
8
|
fullWidth?: boolean;
|
|
9
9
|
children?: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* Override the cursor shown on hover. When omitted, the cursor auto-resolves:
|
|
12
|
+
* - `not-allowed` when disabled (CSS handles this — see Button.module.scss)
|
|
13
|
+
* - `progress` when loading (request in flight)
|
|
14
|
+
* - `pointer` when the button has an action (onClick, type="submit",
|
|
15
|
+
* or type="reset"). Anchors (href) get pointer too.
|
|
16
|
+
* - `default` otherwise (decorative / placeholder buttons)
|
|
17
|
+
* Pass an explicit value (e.g. `"text"`, `"grab"`) to override the
|
|
18
|
+
* auto-resolve for the specific story / use case.
|
|
19
|
+
*/
|
|
20
|
+
cursor?: ButtonHTMLAttributes<HTMLButtonElement>["style"] extends infer S ? S extends {
|
|
21
|
+
cursor?: infer C;
|
|
22
|
+
} ? C : string : string;
|
|
10
23
|
}
|
|
11
|
-
export declare function Button({ variant, size, loading, disabled, leftIcon, rightIcon, fullWidth, className, children, type, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare function Button({ variant, size, loading, disabled, leftIcon, rightIcon, fullWidth, className, children, type, cursor, style, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
12
25
|
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAK1E,MAAM,WAAW,WACf,SAAQ,IAAI,CACV,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,kBAAkB,CAC5D;IACD,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAK1E,MAAM,WAAW,WACf,SAAQ,IAAI,CACV,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,kBAAkB,CAC5D;IACD,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,CAAC,GACrE,CAAC,SAAS;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;KAAE,GAC5B,CAAC,GACD,MAAM,GACR,MAAM,CAAC;CACZ;AAED,wBAAgB,MAAM,CAAC,EACrB,OAAmB,EACnB,IAAW,EACX,OAAe,EACf,QAAgB,EAChB,QAAQ,EACR,SAAS,EACT,SAAiB,EACjB,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,KAAK,EACL,GAAG,KAAK,EACT,EAAE,WAAW,2CAwIb"}
|
|
@@ -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,
|
|
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,
|
|
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
|
@@ -815,10 +815,14 @@ function Button({
|
|
|
815
815
|
className,
|
|
816
816
|
children,
|
|
817
817
|
type,
|
|
818
|
+
cursor,
|
|
819
|
+
style,
|
|
818
820
|
...props
|
|
819
821
|
}) {
|
|
820
822
|
const ref = (0, import_react4.useRef)(null);
|
|
821
823
|
const isDisabled = disabled || loading;
|
|
824
|
+
const hasAction = Boolean(props.onClick) || type === "submit" || type === "reset" || Boolean(props.href);
|
|
825
|
+
const resolvedCursor = cursor ?? (disabled ? "not-allowed" : loading ? "progress" : hasAction ? "pointer" : "default");
|
|
822
826
|
const resolvedType = type ?? "button";
|
|
823
827
|
const hasVisibleText = typeof children === "string" ? children.trim().length > 0 : Boolean(children);
|
|
824
828
|
const needsAriaName = !hasVisibleText;
|
|
@@ -863,6 +867,7 @@ function Button({
|
|
|
863
867
|
fullWidth && "ods-btn--full",
|
|
864
868
|
className
|
|
865
869
|
),
|
|
870
|
+
style: { cursor: resolvedCursor, ...style },
|
|
866
871
|
"data-loading": loading || void 0,
|
|
867
872
|
whileTap: isDisabled ? void 0 : { scale: 0.97 },
|
|
868
873
|
transition: { duration: 0.1 },
|
|
@@ -6564,6 +6569,7 @@ function DropdownMenu({
|
|
|
6564
6569
|
items,
|
|
6565
6570
|
align = "start",
|
|
6566
6571
|
className,
|
|
6572
|
+
triggerClassName,
|
|
6567
6573
|
"aria-label": ariaLabel,
|
|
6568
6574
|
"aria-labelledby": ariaLabelledby
|
|
6569
6575
|
}) {
|
|
@@ -6582,7 +6588,15 @@ function DropdownMenu({
|
|
|
6582
6588
|
);
|
|
6583
6589
|
const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeTriggerProps } = buttonProps;
|
|
6584
6590
|
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
|
|
6585
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
6591
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
6592
|
+
"button",
|
|
6593
|
+
{
|
|
6594
|
+
...safeTriggerProps,
|
|
6595
|
+
ref: triggerRef,
|
|
6596
|
+
className: triggerClassName ?? "ods-dropdown__trigger",
|
|
6597
|
+
children: trigger
|
|
6598
|
+
}
|
|
6599
|
+
),
|
|
6586
6600
|
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
6587
6601
|
MenuPopup,
|
|
6588
6602
|
{
|
|
@@ -11248,15 +11262,17 @@ function Sidebar({
|
|
|
11248
11262
|
className
|
|
11249
11263
|
}) {
|
|
11250
11264
|
const allSections = sections ?? (items ? [{ items }] : []);
|
|
11251
|
-
const [internalPinned, setInternalPinned] = (0, import_react53.useState)(
|
|
11252
|
-
|
|
11265
|
+
const [internalPinned, setInternalPinned] = (0, import_react53.useState)(defaultPinned);
|
|
11266
|
+
(0, import_react53.useEffect)(() => {
|
|
11267
|
+
if (pinnedProp !== void 0) return;
|
|
11253
11268
|
try {
|
|
11254
11269
|
const stored = window.localStorage.getItem(pinStorageKey);
|
|
11255
|
-
if (stored !== null
|
|
11270
|
+
if (stored !== null && stored !== String(internalPinned)) {
|
|
11271
|
+
setInternalPinned(stored === "true");
|
|
11272
|
+
}
|
|
11256
11273
|
} catch {
|
|
11257
11274
|
}
|
|
11258
|
-
|
|
11259
|
-
});
|
|
11275
|
+
}, []);
|
|
11260
11276
|
const pinned = pinnedProp ?? internalPinned;
|
|
11261
11277
|
const setPinned = (0, import_react53.useCallback)(
|
|
11262
11278
|
(p) => {
|
|
@@ -11294,6 +11310,17 @@ function Sidebar({
|
|
|
11294
11310
|
const autoMode = variant === "auto";
|
|
11295
11311
|
const showAsRail = autoMode ? !pinned : variant === "rail";
|
|
11296
11312
|
const overlayOpen = autoMode && !pinned && hoverOpen;
|
|
11313
|
+
(0, import_react53.useEffect)(() => {
|
|
11314
|
+
if (!overlayOpen) return;
|
|
11315
|
+
const handler = (e) => {
|
|
11316
|
+
if (e.key === "Escape") {
|
|
11317
|
+
clearTimers();
|
|
11318
|
+
setHoverOpen(false);
|
|
11319
|
+
}
|
|
11320
|
+
};
|
|
11321
|
+
window.addEventListener("keydown", handler);
|
|
11322
|
+
return () => window.removeEventListener("keydown", handler);
|
|
11323
|
+
}, [overlayOpen]);
|
|
11297
11324
|
return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
|
|
11298
11325
|
"nav",
|
|
11299
11326
|
{
|
|
@@ -11399,17 +11426,34 @@ function RailLayout({
|
|
|
11399
11426
|
},
|
|
11400
11427
|
item.id
|
|
11401
11428
|
)) }),
|
|
11402
|
-
user && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
11403
|
-
|
|
11429
|
+
user && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SidebarUserRail, { user })
|
|
11430
|
+
] });
|
|
11431
|
+
}
|
|
11432
|
+
function SidebarUserRail({ user }) {
|
|
11433
|
+
const labelText = typeof user.name === "string" ? user.name : "User";
|
|
11434
|
+
const avatar = user.avatar ?? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: user.initial ?? (typeof user.name === "string" ? user.name.charAt(0).toUpperCase() : "?") });
|
|
11435
|
+
if (user.menu && user.menu.length > 0) {
|
|
11436
|
+
return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
11437
|
+
DropdownMenu,
|
|
11404
11438
|
{
|
|
11405
|
-
|
|
11406
|
-
|
|
11407
|
-
|
|
11408
|
-
"aria-label":
|
|
11409
|
-
|
|
11439
|
+
trigger: avatar,
|
|
11440
|
+
items: user.menu,
|
|
11441
|
+
align: "end",
|
|
11442
|
+
"aria-label": labelText,
|
|
11443
|
+
triggerClassName: "ods-sidebar__user-rail"
|
|
11410
11444
|
}
|
|
11411
|
-
)
|
|
11412
|
-
|
|
11445
|
+
);
|
|
11446
|
+
}
|
|
11447
|
+
return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
11448
|
+
"button",
|
|
11449
|
+
{
|
|
11450
|
+
type: "button",
|
|
11451
|
+
className: "ods-sidebar__user-rail",
|
|
11452
|
+
onClick: user.onClick,
|
|
11453
|
+
"aria-label": labelText,
|
|
11454
|
+
children: avatar
|
|
11455
|
+
}
|
|
11456
|
+
);
|
|
11413
11457
|
}
|
|
11414
11458
|
function RailItem({
|
|
11415
11459
|
item,
|
|
@@ -11528,18 +11572,7 @@ function ExpandedLayout({
|
|
|
11528
11572
|
] }, section.id ?? sIdx)) }),
|
|
11529
11573
|
(footerItems || user) && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ods-sidebar__footer", children: [
|
|
11530
11574
|
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)) }),
|
|
11531
|
-
user && /* @__PURE__ */ (0, import_jsx_runtime69.
|
|
11532
|
-
/* @__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() : "?") }) }),
|
|
11533
|
-
/* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: "ods-sidebar__user-info", children: [
|
|
11534
|
-
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-name", children: user.name }),
|
|
11535
|
-
user.email && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-email", children: user.email })
|
|
11536
|
-
] }),
|
|
11537
|
-
/* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [
|
|
11538
|
-
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "3", r: "1.3", fill: "currentColor" }),
|
|
11539
|
-
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "8", r: "1.3", fill: "currentColor" }),
|
|
11540
|
-
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "13", r: "1.3", fill: "currentColor" })
|
|
11541
|
-
] })
|
|
11542
|
-
] })
|
|
11575
|
+
user && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SidebarUserCard, { user })
|
|
11543
11576
|
] })
|
|
11544
11577
|
] });
|
|
11545
11578
|
}
|
|
@@ -11629,6 +11662,34 @@ function ExpandedItem({ item, level }) {
|
|
|
11629
11662
|
}
|
|
11630
11663
|
);
|
|
11631
11664
|
}
|
|
11665
|
+
function SidebarUserCard({ user }) {
|
|
11666
|
+
const labelText = typeof user.name === "string" ? user.name : "User";
|
|
11667
|
+
const body = /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
|
|
11668
|
+
/* @__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() : "?") }) }),
|
|
11669
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: "ods-sidebar__user-info", children: [
|
|
11670
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-name", children: user.name }),
|
|
11671
|
+
user.email && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ods-sidebar__user-email", children: user.email })
|
|
11672
|
+
] }),
|
|
11673
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [
|
|
11674
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "3", r: "1.3", fill: "currentColor" }),
|
|
11675
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "8", r: "1.3", fill: "currentColor" }),
|
|
11676
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "8", cy: "13", r: "1.3", fill: "currentColor" })
|
|
11677
|
+
] })
|
|
11678
|
+
] });
|
|
11679
|
+
if (user.menu && user.menu.length > 0) {
|
|
11680
|
+
return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
11681
|
+
DropdownMenu,
|
|
11682
|
+
{
|
|
11683
|
+
trigger: body,
|
|
11684
|
+
items: user.menu,
|
|
11685
|
+
align: "end",
|
|
11686
|
+
"aria-label": labelText,
|
|
11687
|
+
triggerClassName: "ods-sidebar__user-card"
|
|
11688
|
+
}
|
|
11689
|
+
);
|
|
11690
|
+
}
|
|
11691
|
+
return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("button", { type: "button", className: "ods-sidebar__user-card", onClick: user.onClick, children: body });
|
|
11692
|
+
}
|
|
11632
11693
|
function hasActiveDescendant(item) {
|
|
11633
11694
|
if (!item.children) return false;
|
|
11634
11695
|
for (const c of item.children) {
|