@adea-ai/ui 0.97.1 → 0.97.2
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/composites/account-menu/account-menu.d.ts.map +1 -1
- package/dist/components/composites/account-menu/account-menu.js +95 -99
- package/dist/components/composites/account-menu/account-menu.js.map +1 -1
- package/dist/r/src/components/composites/account-menu/account-menu.tsx +2 -1
- package/package.json +1 -1
- package/src/components/composites/account-menu/account-menu.tsx +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-menu.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/account-menu/account-menu.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAGnD,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EACL,YAAY,EAMb,MAAM,sCAAsC,CAAA;AAG7C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,KAAK,IAAI,CAAA;CACtE,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mFAAmF;IACnF,SAAS,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,WAAW,CAAC,CAAA;IAC5D,qDAAqD;IACrD,MAAM,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAA;IACtD,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1B,uCAAuC;IACvC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAA;IACjC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK,CAAA;IAC5B,kEAAkE;IAClE,aAAa,EAAE,OAAO,CAAA;IACtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"account-menu.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/account-menu/account-menu.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAGnD,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EACL,YAAY,EAMb,MAAM,sCAAsC,CAAA;AAG7C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,KAAK,IAAI,CAAA;CACtE,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mFAAmF;IACnF,SAAS,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,WAAW,CAAC,CAAA;IAC5D,qDAAqD;IACrD,MAAM,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAA;IACtD,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1B,uCAAuC;IACvC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAA;IACjC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK,CAAA;IAC5B,kEAAkE;IAClE,aAAa,EAAE,OAAO,CAAA;IACtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,eAoHlD;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAA;IAC/C,MAAM,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAA;IAC9C,UAAU,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAA;IAClD,SAAS,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAA;IACjD,UAAU,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAA;CACnD,GAAG,eAAe,EAAE,CAoCpB"}
|
|
@@ -48,7 +48,7 @@ function AccountMenu(props) {
|
|
|
48
48
|
},
|
|
49
49
|
onOpenChange: (open) => setTooltipOpen(open && !menuOpen()),
|
|
50
50
|
get children() {
|
|
51
|
-
return createComponent(DropdownMenu, {
|
|
51
|
+
return [createComponent(DropdownMenu, {
|
|
52
52
|
modal: false,
|
|
53
53
|
get placement() {
|
|
54
54
|
return local.placement ?? "top-start";
|
|
@@ -61,111 +61,107 @@ function AccountMenu(props) {
|
|
|
61
61
|
if (open) setTooltipOpen(false);
|
|
62
62
|
},
|
|
63
63
|
get children() {
|
|
64
|
-
return [
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
64
|
+
return [createComponent(TooltipTrigger, mergeProps({
|
|
65
|
+
as: AccountMenuButton,
|
|
66
|
+
ref: (element) => trigger = element,
|
|
67
|
+
variant: "ghost",
|
|
68
|
+
get size() {
|
|
69
|
+
return local.size ?? "icon-md";
|
|
70
|
+
},
|
|
71
|
+
get ["class"]() {
|
|
72
|
+
return cn("text-muted-foreground", local.class);
|
|
73
|
+
},
|
|
74
|
+
get ["aria-label"]() {
|
|
75
|
+
return local.label ?? "Account and settings";
|
|
76
|
+
},
|
|
77
|
+
onFocus: () => local.onIntent?.(),
|
|
78
|
+
onPointerEnter: () => local.onIntent?.()
|
|
79
|
+
}, rest, { get children() {
|
|
80
|
+
return createComponent(UserRound, { "aria-hidden": "true" });
|
|
81
|
+
} })), createComponent(DropdownMenuContent, {
|
|
82
|
+
get hideArrow() {
|
|
83
|
+
return local.hideArrow;
|
|
84
|
+
},
|
|
85
|
+
"class": "min-w-56 max-h-(--kb-popper-available-height) overflow-x-hidden overflow-y-auto",
|
|
86
|
+
onCloseAutoFocus: (event) => {
|
|
87
|
+
const selection = pendingAfterClose;
|
|
88
|
+
pendingAfterClose = void 0;
|
|
89
|
+
if (!selection) return;
|
|
90
|
+
event.preventDefault();
|
|
91
|
+
scheduledAfterClose = selection;
|
|
92
|
+
queueMicrotask(() => {
|
|
93
|
+
if (scheduledAfterClose !== selection) return;
|
|
94
|
+
scheduledAfterClose = void 0;
|
|
95
|
+
selection.callback(trigger);
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
get children() {
|
|
99
|
+
return [createComponent(DropdownMenuGroup, { get children() {
|
|
100
|
+
return createComponent(For, {
|
|
101
|
+
get each() {
|
|
102
|
+
return visible();
|
|
103
|
+
},
|
|
104
|
+
children: (item) => createComponent(DropdownMenuItem, {
|
|
105
|
+
get disabled() {
|
|
106
|
+
return item.disabled;
|
|
107
|
+
},
|
|
108
|
+
onSelect: () => {
|
|
109
|
+
pendingAfterClose = item.onSelectAfterClose ? { callback: item.onSelectAfterClose } : void 0;
|
|
110
|
+
item.onSelect?.();
|
|
111
111
|
},
|
|
112
|
-
|
|
112
|
+
get shortcut() {
|
|
113
|
+
return item.shortcut;
|
|
114
|
+
},
|
|
115
|
+
get children() {
|
|
116
|
+
return [memo(() => item.icon ?? renderFallbackIcon(item.id)), (() => {
|
|
117
|
+
var _el$2 = _tmpl$();
|
|
118
|
+
insert(_el$2, () => item.label);
|
|
119
|
+
return _el$2;
|
|
120
|
+
})()];
|
|
121
|
+
}
|
|
122
|
+
})
|
|
123
|
+
});
|
|
124
|
+
} }), createComponent(Show, {
|
|
125
|
+
get when() {
|
|
126
|
+
return local.showSession !== false;
|
|
127
|
+
},
|
|
128
|
+
get children() {
|
|
129
|
+
return [createComponent(DropdownMenuSeparator, {}), createComponent(DropdownMenuGroup, { get children() {
|
|
130
|
+
return createComponent(DropdownMenuItem, {
|
|
113
131
|
get disabled() {
|
|
114
|
-
return
|
|
115
|
-
},
|
|
116
|
-
onSelect: () => {
|
|
117
|
-
pendingAfterClose = item.onSelectAfterClose ? { callback: item.onSelectAfterClose } : void 0;
|
|
118
|
-
item.onSelect?.();
|
|
119
|
-
},
|
|
120
|
-
get shortcut() {
|
|
121
|
-
return item.shortcut;
|
|
132
|
+
return local.busy;
|
|
122
133
|
},
|
|
134
|
+
onSelect: () => local.authenticated ? local.onSignOut?.() : local.onSignIn?.(),
|
|
123
135
|
get children() {
|
|
124
|
-
return [
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
136
|
+
return [createComponent(Show, {
|
|
137
|
+
get when() {
|
|
138
|
+
return local.authenticated;
|
|
139
|
+
},
|
|
140
|
+
get fallback() {
|
|
141
|
+
return createComponent(LogIn, { "aria-hidden": "true" });
|
|
142
|
+
},
|
|
143
|
+
get children() {
|
|
144
|
+
return createComponent(LogOut, { "aria-hidden": "true" });
|
|
145
|
+
}
|
|
146
|
+
}), (() => {
|
|
147
|
+
var _el$ = _tmpl$();
|
|
148
|
+
insert(_el$, () => local.authenticated ? "Sign out" : "Sign in");
|
|
149
|
+
return _el$;
|
|
128
150
|
})()];
|
|
129
151
|
}
|
|
130
|
-
})
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
},
|
|
142
|
-
onSelect: () => local.authenticated ? local.onSignOut?.() : local.onSignIn?.(),
|
|
143
|
-
get children() {
|
|
144
|
-
return [createComponent(Show, {
|
|
145
|
-
get when() {
|
|
146
|
-
return local.authenticated;
|
|
147
|
-
},
|
|
148
|
-
get fallback() {
|
|
149
|
-
return createComponent(LogIn, { "aria-hidden": "true" });
|
|
150
|
-
},
|
|
151
|
-
get children() {
|
|
152
|
-
return createComponent(LogOut, { "aria-hidden": "true" });
|
|
153
|
-
}
|
|
154
|
-
}), (() => {
|
|
155
|
-
var _el$ = _tmpl$();
|
|
156
|
-
insert(_el$, () => local.authenticated ? "Sign out" : "Sign in");
|
|
157
|
-
return _el$;
|
|
158
|
-
})()];
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
} })];
|
|
162
|
-
}
|
|
163
|
-
})];
|
|
164
|
-
}
|
|
165
|
-
})
|
|
166
|
-
];
|
|
152
|
+
});
|
|
153
|
+
} })];
|
|
154
|
+
}
|
|
155
|
+
})];
|
|
156
|
+
}
|
|
157
|
+
})];
|
|
158
|
+
}
|
|
159
|
+
}), createComponent(TooltipContent, {
|
|
160
|
+
placement: "top",
|
|
161
|
+
get children() {
|
|
162
|
+
return local.label ?? "Account and settings";
|
|
167
163
|
}
|
|
168
|
-
});
|
|
164
|
+
})];
|
|
169
165
|
}
|
|
170
166
|
});
|
|
171
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-menu.js","names":["CircleHelp","Info","LogIn","LogOut","Megaphone","RefreshCw","Settings2","Smartphone","UserRound","ComponentProps","JSX","For","Show","createSignal","onCleanup","splitProps","cn","Button","ButtonProps","DropdownMenu","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","Tooltip","TooltipContent","TooltipTrigger","AccountMenuItem","id","label","icon","Element","shortcut","disabled","platform","onSelect","onSelectAfterClose","trigger","HTMLButtonElement","AccountMenuProps","class","placement","gutter","hideArrow","size","items","authenticated","showSession","busy","onSignIn","onSignOut","onIntent","FALLBACK_ICONS","Record","mobile","settings","about","help","feedback","updates","AccountMenu","props","local","rest","pendingAfterClose","callback","NonNullable","scheduledAfterClose","menuOpen","setMenuOpen","tooltipOpen","setTooltipOpen","undefined","visible","filter","item","_$createComponent","open","onOpenChange","children","modal","_$mergeProps","as","AccountMenuButton","ref","element","variant","aria-label","onFocus","onPointerEnter","onCloseAutoFocus","event","selection","preventDefault","queueMicrotask","each","_$memo","renderFallbackIcon","_el$2","_tmpl$","_$insert","when","fallback","_el$","createAppMenuItems","options","primaryItem","settingsShortcut","onAbout","onHelp","onFeedback","onUpdates","onSettings","Icon","_$createComponent","_$mergeProps","_$memo"],"sources":["../../../../src/components/composites/account-menu/account-menu.tsx"],"sourcesContent":["import {\n CircleHelp,\n Info,\n LogIn,\n LogOut,\n Megaphone,\n RefreshCw,\n Settings2,\n Smartphone,\n UserRound,\n} from 'lucide-solid'\nimport type { ComponentProps, JSX } from 'solid-js'\nimport { For, Show, createSignal, onCleanup, splitProps } from 'solid-js'\nimport { cn } from '#lib/utils'\nimport { Button, type ButtonProps } from '../../ui/button/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../ui/dropdown-menu/dropdown-menu'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip/tooltip'\n\n/**\n * AccountMenu.\n *\n * The trailing control in a rail or a top bar: the account, the way into settings,\n * and the way out. Every desktop application has one and they are all the same menu,\n * which is why it belongs here rather than being redrawn per app.\n *\n * ## The items are the caller's\n *\n * The menu takes a list rather than hard-coding one. An application adds and removes\n * entries — a mobile hand-off that only makes sense on desktop, a feedback link that\n * only exists once there is somewhere to send it — and a component that decided the\n * list could not be used by two products.\n *\n * `disabled` on an item is deliberately visible rather than hidden: a greyed \"Help\n * Center\" says the destination is coming, while an absent one says it does not exist.\n */\nexport type AccountMenuItem = {\n id: string\n label: string\n icon?: JSX.Element\n /** A chord drawn at the trailing edge, e.g. `⌘,`. */\n shortcut?: string\n disabled?: boolean\n /** Render only on this platform. Omit to always render. */\n platform?: 'desktop' | 'web'\n onSelect?: () => void\n /** Run after the menu's close-focus cycle, with its trigger as a stable opener. */\n onSelectAfterClose?: (trigger: HTMLButtonElement | undefined) => void\n}\n\nexport type AccountMenuProps = {\n class?: string\n /** Anchor a rail menu beside its trigger, or keep the default upward placement. */\n placement?: ComponentProps<typeof DropdownMenu>['placement']\n /** Space between the trigger and menu, in pixels. */\n gutter?: ComponentProps<typeof DropdownMenu>['gutter']\n /** Hide the menu pointer when aligning it beside a compact rail. */\n hideArrow?: boolean\n /** The trigger size. Icon-only menus default to the standard icon size. */\n size?: ButtonProps['size']\n /** The entries above the separator. */\n items: readonly AccountMenuItem[]\n /** Which platform this is rendered on, for items that declare one. */\n platform?: 'desktop' | 'web'\n /** Whether a session exists. Decides the sign-in/sign-out row. */\n authenticated: boolean\n /** Local-only applications can omit the session actions altogether. */\n showSession?: boolean\n /** Disable the session row while a sign-in or sign-out is in flight. */\n busy?: boolean\n /** The name shown on the trigger's accessible label. */\n label?: string\n onSignIn?: () => void\n onSignOut?: () => void\n /** Fires on hover or focus of the trigger — a chance to prefetch. */\n onIntent?: () => void\n}\n\nconst FALLBACK_ICONS: Record<string, typeof Settings2> = {\n mobile: Smartphone,\n settings: Settings2,\n about: Info,\n help: CircleHelp,\n feedback: Megaphone,\n updates: RefreshCw,\n}\n\nexport function AccountMenu(props: AccountMenuProps) {\n const [local, rest] = splitProps(props, [\n 'class',\n 'placement',\n 'gutter',\n 'hideArrow',\n 'size',\n 'items',\n 'platform',\n 'authenticated',\n 'showSession',\n 'busy',\n 'label',\n 'onSignIn',\n 'onSignOut',\n 'onIntent',\n ])\n\n let trigger: HTMLButtonElement | undefined\n let pendingAfterClose:\n | { callback: NonNullable<AccountMenuItem['onSelectAfterClose']> }\n | undefined\n let scheduledAfterClose:\n | { callback: NonNullable<AccountMenuItem['onSelectAfterClose']> }\n | undefined\n const [menuOpen, setMenuOpen] = createSignal(false)\n const [tooltipOpen, setTooltipOpen] = createSignal(false)\n\n onCleanup(() => {\n pendingAfterClose = undefined\n scheduledAfterClose = undefined\n })\n\n const visible = () =>\n local.items.filter((item) => !item.platform || item.platform === (local.platform ?? 'desktop'))\n\n return (\n <Tooltip open={tooltipOpen()} onOpenChange={(open) => setTooltipOpen(open && !menuOpen())}>\n <DropdownMenu\n modal={false}\n placement={local.placement ?? 'top-start'}\n gutter={local.gutter}\n onOpenChange={(open) => {\n setMenuOpen(open)\n if (open) setTooltipOpen(false)\n }}\n >\n <TooltipTrigger\n as={AccountMenuButton}\n ref={(element: HTMLButtonElement) => (trigger = element)}\n variant=\"ghost\"\n size={local.size ?? 'icon-md'}\n class={cn('text-muted-foreground', local.class)}\n aria-label={local.label ?? 'Account and settings'}\n onFocus={() => local.onIntent?.()}\n onPointerEnter={() => local.onIntent?.()}\n {...rest}\n >\n <UserRound aria-hidden=\"true\" />\n </TooltipTrigger>\n <TooltipContent placement=\"top\">{local.label ?? 'Account and settings'}</TooltipContent>\n <DropdownMenuContent\n hideArrow={local.hideArrow}\n class=\"min-w-56 max-h-(--kb-popper-available-height) overflow-x-hidden overflow-y-auto\"\n onCloseAutoFocus={(event) => {\n const selection = pendingAfterClose\n pendingAfterClose = undefined\n if (!selection) return\n\n event.preventDefault()\n scheduledAfterClose = selection\n queueMicrotask(() => {\n if (scheduledAfterClose !== selection) return\n scheduledAfterClose = undefined\n selection.callback(trigger)\n })\n }}\n >\n <DropdownMenuGroup>\n <For each={visible()}>\n {(item) => (\n <DropdownMenuItem\n disabled={item.disabled}\n onSelect={() => {\n pendingAfterClose = item.onSelectAfterClose\n ? { callback: item.onSelectAfterClose }\n : undefined\n item.onSelect?.()\n }}\n shortcut={item.shortcut}\n >\n {item.icon ?? renderFallbackIcon(item.id)}\n <span>{item.label}</span>\n </DropdownMenuItem>\n )}\n </For>\n </DropdownMenuGroup>\n <Show when={local.showSession !== false}>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem\n disabled={local.busy}\n onSelect={() => (local.authenticated ? local.onSignOut?.() : local.onSignIn?.())}\n >\n <Show when={local.authenticated} fallback={<LogIn aria-hidden=\"true\" />}>\n <LogOut aria-hidden=\"true\" />\n </Show>\n <span>{local.authenticated ? 'Sign out' : 'Sign in'}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </Show>\n </DropdownMenuContent>\n </DropdownMenu>\n </Tooltip>\n )\n}\n\n/** The common support menu, with one app-specific entry before the shared items. */\nexport function createAppMenuItems(options: {\n primaryItem?: AccountMenuItem\n settingsShortcut?: string\n onAbout?: AccountMenuItem['onSelectAfterClose']\n onHelp?: AccountMenuItem['onSelectAfterClose']\n onFeedback?: AccountMenuItem['onSelectAfterClose']\n onUpdates?: AccountMenuItem['onSelectAfterClose']\n onSettings?: AccountMenuItem['onSelectAfterClose']\n}): AccountMenuItem[] {\n return [\n ...(options.primaryItem ? [options.primaryItem] : []),\n {\n id: 'about',\n label: 'About',\n disabled: !options.onAbout,\n onSelectAfterClose: options.onAbout,\n },\n {\n id: 'help',\n label: 'Help Center',\n disabled: !options.onHelp,\n onSelectAfterClose: options.onHelp,\n },\n {\n id: 'feedback',\n label: 'Send Feedback',\n disabled: !options.onFeedback,\n onSelectAfterClose: options.onFeedback,\n },\n {\n id: 'updates',\n label: 'Updates',\n platform: 'desktop',\n disabled: !options.onUpdates,\n onSelectAfterClose: options.onUpdates,\n },\n {\n id: 'settings',\n label: 'Settings',\n shortcut: options.settingsShortcut,\n disabled: !options.onSettings,\n onSelectAfterClose: options.onSettings,\n },\n ]\n}\n\nfunction AccountMenuButton(props: ComponentProps<typeof Button>) {\n return <DropdownMenuTrigger as={Button} {...props} />\n}\n\n/**\n * A known item id gets its conventional glyph, so a caller that only wants the\n * standard menu does not have to import six icons to get it.\n */\nfunction renderFallbackIcon(id: string): JSX.Element {\n const Icon = FALLBACK_ICONS[id]\n return Icon ? <Icon aria-hidden=\"true\" /> : null\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"account-menu.js","names":["CircleHelp","Info","LogIn","LogOut","Megaphone","RefreshCw","Settings2","Smartphone","UserRound","ComponentProps","JSX","For","Show","createSignal","onCleanup","splitProps","cn","Button","ButtonProps","DropdownMenu","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","Tooltip","TooltipContent","TooltipTrigger","AccountMenuItem","id","label","icon","Element","shortcut","disabled","platform","onSelect","onSelectAfterClose","trigger","HTMLButtonElement","AccountMenuProps","class","placement","gutter","hideArrow","size","items","authenticated","showSession","busy","onSignIn","onSignOut","onIntent","FALLBACK_ICONS","Record","mobile","settings","about","help","feedback","updates","AccountMenu","props","local","rest","pendingAfterClose","callback","NonNullable","scheduledAfterClose","menuOpen","setMenuOpen","tooltipOpen","setTooltipOpen","undefined","visible","filter","item","_$createComponent","open","onOpenChange","children","modal","_$mergeProps","as","AccountMenuButton","ref","element","variant","aria-label","onFocus","onPointerEnter","onCloseAutoFocus","event","selection","preventDefault","queueMicrotask","each","_$memo","renderFallbackIcon","_el$2","_tmpl$","_$insert","when","fallback","_el$","createAppMenuItems","options","primaryItem","settingsShortcut","onAbout","onHelp","onFeedback","onUpdates","onSettings","Icon","_$createComponent","_$mergeProps","_$memo"],"sources":["../../../../src/components/composites/account-menu/account-menu.tsx"],"sourcesContent":["import {\n CircleHelp,\n Info,\n LogIn,\n LogOut,\n Megaphone,\n RefreshCw,\n Settings2,\n Smartphone,\n UserRound,\n} from 'lucide-solid'\nimport type { ComponentProps, JSX } from 'solid-js'\nimport { For, Show, createSignal, onCleanup, splitProps } from 'solid-js'\nimport { cn } from '#lib/utils'\nimport { Button, type ButtonProps } from '../../ui/button/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../ui/dropdown-menu/dropdown-menu'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip/tooltip'\n\n/**\n * AccountMenu.\n *\n * The trailing control in a rail or a top bar: the account, the way into settings,\n * and the way out. Every desktop application has one and they are all the same menu,\n * which is why it belongs here rather than being redrawn per app.\n *\n * ## The items are the caller's\n *\n * The menu takes a list rather than hard-coding one. An application adds and removes\n * entries — a mobile hand-off that only makes sense on desktop, a feedback link that\n * only exists once there is somewhere to send it — and a component that decided the\n * list could not be used by two products.\n *\n * `disabled` on an item is deliberately visible rather than hidden: a greyed \"Help\n * Center\" says the destination is coming, while an absent one says it does not exist.\n */\nexport type AccountMenuItem = {\n id: string\n label: string\n icon?: JSX.Element\n /** A chord drawn at the trailing edge, e.g. `⌘,`. */\n shortcut?: string\n disabled?: boolean\n /** Render only on this platform. Omit to always render. */\n platform?: 'desktop' | 'web'\n onSelect?: () => void\n /** Run after the menu's close-focus cycle, with its trigger as a stable opener. */\n onSelectAfterClose?: (trigger: HTMLButtonElement | undefined) => void\n}\n\nexport type AccountMenuProps = {\n class?: string\n /** Anchor a rail menu beside its trigger, or keep the default upward placement. */\n placement?: ComponentProps<typeof DropdownMenu>['placement']\n /** Space between the trigger and menu, in pixels. */\n gutter?: ComponentProps<typeof DropdownMenu>['gutter']\n /** Hide the menu pointer when aligning it beside a compact rail. */\n hideArrow?: boolean\n /** The trigger size. Icon-only menus default to the standard icon size. */\n size?: ButtonProps['size']\n /** The entries above the separator. */\n items: readonly AccountMenuItem[]\n /** Which platform this is rendered on, for items that declare one. */\n platform?: 'desktop' | 'web'\n /** Whether a session exists. Decides the sign-in/sign-out row. */\n authenticated: boolean\n /** Local-only applications can omit the session actions altogether. */\n showSession?: boolean\n /** Disable the session row while a sign-in or sign-out is in flight. */\n busy?: boolean\n /** The name shown on the trigger's accessible label. */\n label?: string\n onSignIn?: () => void\n onSignOut?: () => void\n /** Fires on hover or focus of the trigger — a chance to prefetch. */\n onIntent?: () => void\n}\n\nconst FALLBACK_ICONS: Record<string, typeof Settings2> = {\n mobile: Smartphone,\n settings: Settings2,\n about: Info,\n help: CircleHelp,\n feedback: Megaphone,\n updates: RefreshCw,\n}\n\nexport function AccountMenu(props: AccountMenuProps) {\n const [local, rest] = splitProps(props, [\n 'class',\n 'placement',\n 'gutter',\n 'hideArrow',\n 'size',\n 'items',\n 'platform',\n 'authenticated',\n 'showSession',\n 'busy',\n 'label',\n 'onSignIn',\n 'onSignOut',\n 'onIntent',\n ])\n\n let trigger: HTMLButtonElement | undefined\n let pendingAfterClose:\n | { callback: NonNullable<AccountMenuItem['onSelectAfterClose']> }\n | undefined\n let scheduledAfterClose:\n | { callback: NonNullable<AccountMenuItem['onSelectAfterClose']> }\n | undefined\n const [menuOpen, setMenuOpen] = createSignal(false)\n const [tooltipOpen, setTooltipOpen] = createSignal(false)\n\n onCleanup(() => {\n pendingAfterClose = undefined\n scheduledAfterClose = undefined\n })\n\n const visible = () =>\n local.items.filter((item) => !item.platform || item.platform === (local.platform ?? 'desktop'))\n\n return (\n <Tooltip open={tooltipOpen()} onOpenChange={(open) => setTooltipOpen(open && !menuOpen())}>\n <DropdownMenu\n modal={false}\n placement={local.placement ?? 'top-start'}\n gutter={local.gutter}\n onOpenChange={(open) => {\n setMenuOpen(open)\n if (open) setTooltipOpen(false)\n }}\n >\n <TooltipTrigger\n as={AccountMenuButton}\n ref={(element: HTMLButtonElement) => (trigger = element)}\n variant=\"ghost\"\n size={local.size ?? 'icon-md'}\n class={cn('text-muted-foreground', local.class)}\n aria-label={local.label ?? 'Account and settings'}\n onFocus={() => local.onIntent?.()}\n onPointerEnter={() => local.onIntent?.()}\n {...rest}\n >\n <UserRound aria-hidden=\"true\" />\n </TooltipTrigger>\n <DropdownMenuContent\n hideArrow={local.hideArrow}\n class=\"min-w-56 max-h-(--kb-popper-available-height) overflow-x-hidden overflow-y-auto\"\n onCloseAutoFocus={(event) => {\n const selection = pendingAfterClose\n pendingAfterClose = undefined\n if (!selection) return\n\n event.preventDefault()\n scheduledAfterClose = selection\n queueMicrotask(() => {\n if (scheduledAfterClose !== selection) return\n scheduledAfterClose = undefined\n selection.callback(trigger)\n })\n }}\n >\n <DropdownMenuGroup>\n <For each={visible()}>\n {(item) => (\n <DropdownMenuItem\n disabled={item.disabled}\n onSelect={() => {\n pendingAfterClose = item.onSelectAfterClose\n ? { callback: item.onSelectAfterClose }\n : undefined\n item.onSelect?.()\n }}\n shortcut={item.shortcut}\n >\n {item.icon ?? renderFallbackIcon(item.id)}\n <span>{item.label}</span>\n </DropdownMenuItem>\n )}\n </For>\n </DropdownMenuGroup>\n <Show when={local.showSession !== false}>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem\n disabled={local.busy}\n onSelect={() => (local.authenticated ? local.onSignOut?.() : local.onSignIn?.())}\n >\n <Show when={local.authenticated} fallback={<LogIn aria-hidden=\"true\" />}>\n <LogOut aria-hidden=\"true\" />\n </Show>\n <span>{local.authenticated ? 'Sign out' : 'Sign in'}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </Show>\n </DropdownMenuContent>\n </DropdownMenu>\n {/* Both overlays own a Popper context; the tooltip must stay outside the menu root. */}\n <TooltipContent placement=\"top\">{local.label ?? 'Account and settings'}</TooltipContent>\n </Tooltip>\n )\n}\n\n/** The common support menu, with one app-specific entry before the shared items. */\nexport function createAppMenuItems(options: {\n primaryItem?: AccountMenuItem\n settingsShortcut?: string\n onAbout?: AccountMenuItem['onSelectAfterClose']\n onHelp?: AccountMenuItem['onSelectAfterClose']\n onFeedback?: AccountMenuItem['onSelectAfterClose']\n onUpdates?: AccountMenuItem['onSelectAfterClose']\n onSettings?: AccountMenuItem['onSelectAfterClose']\n}): AccountMenuItem[] {\n return [\n ...(options.primaryItem ? [options.primaryItem] : []),\n {\n id: 'about',\n label: 'About',\n disabled: !options.onAbout,\n onSelectAfterClose: options.onAbout,\n },\n {\n id: 'help',\n label: 'Help Center',\n disabled: !options.onHelp,\n onSelectAfterClose: options.onHelp,\n },\n {\n id: 'feedback',\n label: 'Send Feedback',\n disabled: !options.onFeedback,\n onSelectAfterClose: options.onFeedback,\n },\n {\n id: 'updates',\n label: 'Updates',\n platform: 'desktop',\n disabled: !options.onUpdates,\n onSelectAfterClose: options.onUpdates,\n },\n {\n id: 'settings',\n label: 'Settings',\n shortcut: options.settingsShortcut,\n disabled: !options.onSettings,\n onSelectAfterClose: options.onSettings,\n },\n ]\n}\n\nfunction AccountMenuButton(props: ComponentProps<typeof Button>) {\n return <DropdownMenuTrigger as={Button} {...props} />\n}\n\n/**\n * A known item id gets its conventional glyph, so a caller that only wants the\n * standard menu does not have to import six icons to get it.\n */\nfunction renderFallbackIcon(id: string): JSX.Element {\n const Icon = FALLBACK_ICONS[id]\n return Icon ? <Icon aria-hidden=\"true\" /> : null\n}\n"],"mappings":"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"}
|
|
@@ -151,7 +151,6 @@ export function AccountMenu(props: AccountMenuProps) {
|
|
|
151
151
|
>
|
|
152
152
|
<UserRound aria-hidden="true" />
|
|
153
153
|
</TooltipTrigger>
|
|
154
|
-
<TooltipContent placement="top">{local.label ?? 'Account and settings'}</TooltipContent>
|
|
155
154
|
<DropdownMenuContent
|
|
156
155
|
hideArrow={local.hideArrow}
|
|
157
156
|
class="min-w-56 max-h-(--kb-popper-available-height) overflow-x-hidden overflow-y-auto"
|
|
@@ -204,6 +203,8 @@ export function AccountMenu(props: AccountMenuProps) {
|
|
|
204
203
|
</Show>
|
|
205
204
|
</DropdownMenuContent>
|
|
206
205
|
</DropdownMenu>
|
|
206
|
+
{/* Both overlays own a Popper context; the tooltip must stay outside the menu root. */}
|
|
207
|
+
<TooltipContent placement="top">{local.label ?? 'Account and settings'}</TooltipContent>
|
|
207
208
|
</Tooltip>
|
|
208
209
|
)
|
|
209
210
|
}
|
package/package.json
CHANGED
|
@@ -151,7 +151,6 @@ export function AccountMenu(props: AccountMenuProps) {
|
|
|
151
151
|
>
|
|
152
152
|
<UserRound aria-hidden="true" />
|
|
153
153
|
</TooltipTrigger>
|
|
154
|
-
<TooltipContent placement="top">{local.label ?? 'Account and settings'}</TooltipContent>
|
|
155
154
|
<DropdownMenuContent
|
|
156
155
|
hideArrow={local.hideArrow}
|
|
157
156
|
class="min-w-56 max-h-(--kb-popper-available-height) overflow-x-hidden overflow-y-auto"
|
|
@@ -204,6 +203,8 @@ export function AccountMenu(props: AccountMenuProps) {
|
|
|
204
203
|
</Show>
|
|
205
204
|
</DropdownMenuContent>
|
|
206
205
|
</DropdownMenu>
|
|
206
|
+
{/* Both overlays own a Popper context; the tooltip must stay outside the menu root. */}
|
|
207
|
+
<TooltipContent placement="top">{local.label ?? 'Account and settings'}</TooltipContent>
|
|
207
208
|
</Tooltip>
|
|
208
209
|
)
|
|
209
210
|
}
|