@brainfish-ai/components 0.23.14 → 0.24.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/esm/chunks/{header-nav.CCJ9OYeY.js → header-nav.BxK3FN1j.js} +2 -2
- package/dist/esm/chunks/{header-nav.CCJ9OYeY.js.map → header-nav.BxK3FN1j.js.map} +1 -1
- package/dist/esm/chunks/{layout.DxPhNLks.js → layout.qbMLkE1I.js} +32 -5
- package/dist/esm/chunks/layout.qbMLkE1I.js.map +1 -0
- package/dist/esm/components/convos.js +3 -0
- package/dist/esm/components/convos.js.map +1 -1
- package/dist/esm/global.css +1 -1
- package/dist/esm/index.js +5 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/layouts/full-layout.js +2 -2
- package/dist/esm/layouts/header-nav.js +1 -1
- package/dist/esm/logos/microsoft-logo.js +67 -0
- package/dist/esm/logos/microsoft-logo.js.map +1 -0
- package/dist/esm/logos/microsoft-teams-logo.js +113 -0
- package/dist/esm/logos/microsoft-teams-logo.js.map +1 -0
- package/dist/esm/logos/slack-logo.js +40 -0
- package/dist/esm/logos/slack-logo.js.map +1 -0
- package/dist/esm/scenes/knowledge-review.js +1 -1
- package/dist/esm/scenes/knowledge-review.js.map +1 -1
- package/dist/index.d.ts +30 -0
- package/dist/logos/microsoft-logo.d.ts +2 -0
- package/dist/logos/microsoft-teams-logo.d.ts +2 -0
- package/dist/logos/slack-logo.d.ts +2 -0
- package/dist/microsoft-logo.d.ts +15 -0
- package/dist/microsoft-teams-logo.d.ts +15 -0
- package/dist/slack-logo.d.ts +15 -0
- package/dist/stats.html +1 -1
- package/package.json +1 -1
- package/dist/esm/chunks/layout.DxPhNLks.js.map +0 -1
|
@@ -114,7 +114,7 @@ const HeaderNav = React.forwardRef(function HeaderNav2({
|
|
|
114
114
|
}, ref) {
|
|
115
115
|
const hasSuggestionAction = showSuggestionAction && !!suggestionAction && !!onSuggestionActionClick;
|
|
116
116
|
const brainfishNativeEnabled = useBooleanFlagValue("platform.brainfish-native.enabled", false);
|
|
117
|
-
return /* @__PURE__ */ React.createElement("header", { ref, ...props, className: cn("px-4 py-3", className) }, /* @__PURE__ */ React.createElement("nav", { "aria-label": "Account navigation", className: "flex justify-between items-center" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React.createElement(
|
|
117
|
+
return /* @__PURE__ */ React.createElement("header", { ref, ...props, className: cn("px-4 py-3 relative", className) }, /* @__PURE__ */ React.createElement("nav", { "aria-label": "Account navigation", className: "flex justify-between items-center" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React.createElement(
|
|
118
118
|
"a",
|
|
119
119
|
{
|
|
120
120
|
href: "/",
|
|
@@ -192,4 +192,4 @@ const HeaderNav = React.forwardRef(function HeaderNav2({
|
|
|
192
192
|
});
|
|
193
193
|
|
|
194
194
|
export { HEADER_NAV_HEIGHT as H, HeaderNav as a };
|
|
195
|
-
//# sourceMappingURL=header-nav.
|
|
195
|
+
//# sourceMappingURL=header-nav.BxK3FN1j.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header-nav.CCJ9OYeY.js","sources":["../../../src/layouts/header-nav/account-dropdown.tsx","../../../src/layouts/header-nav/header-nav.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Copy, Crown } from '@phosphor-icons/react';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '../../components/ui/dropdown-menu';\nimport { Avatar, AvatarFallback, AvatarImage, AvatarBadge } from '../../components/ui/avatar';\nimport { Button } from '../../components/ui/button';\n\nimport { cn } from '@/lib/utils';\n\nexport type AccountDropdownActionItem = {\n type?: 'action';\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick: () => void;\n /** Second line (e.g. \"ID: xyz\"); copy button shown when copyValue is set. */\n secondaryLabel?: React.ReactNode;\n copyValue?: string;\n onCopy?: (value: string) => void;\n /** Keyboard shortcut hint (e.g. \"⌘K\") shown on the right. */\n shortcut?: string;\n};\n\nexport type AccountDropdownSubOption = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n /** Required for radio mode. */\n value?: string;\n /** Used in plain (non-radio) mode. */\n onClick?: () => void;\n /** Keyboard shortcut hint (e.g. \"⌘K\") shown on the right. */\n shortcut?: string;\n};\n\n/** Sub-option with a required `value`, used in radio-mode submenus. */\nexport type AccountDropdownRadioSubOption = Omit<AccountDropdownSubOption, 'value' | 'onClick'> & {\n value: string;\n};\n\ntype AccountDropdownSubmenuBase = {\n type: 'submenu';\n id: string;\n label: string;\n icon?: React.ReactNode;\n /** Second line on the submenu trigger (e.g. \"ID: xyz\"); copy button when copyValue is set. */\n secondaryLabel?: React.ReactNode;\n copyValue?: string;\n onCopy?: (value: string) => void;\n};\n\nexport type AccountDropdownSubmenuItem = AccountDropdownSubmenuBase &\n (\n | {\n /** The currently selected value. When provided with onValueChange, renders items as a radio group with selection indicators. */\n value: string;\n onValueChange: (value: string) => void;\n items: AccountDropdownRadioSubOption[];\n }\n | {\n value?: never;\n onValueChange?: never;\n items: AccountDropdownSubOption[];\n }\n );\n\nexport type AccountDropdownItem = AccountDropdownActionItem | AccountDropdownSubmenuItem;\n\nexport type AccountDropdownTeam = {\n id: string;\n name: string;\n isCurrent: boolean;\n logoUrl?: string;\n};\n\nexport interface AccountDropdownProps extends React.ComponentPropsWithoutRef<typeof DropdownMenu> {\n accountPhoto: string;\n accountName: string;\n /** Pass a flat array for a single group, or an array of arrays for multiple groups separated by dividers. */\n accountDropdownItems: AccountDropdownItem[] | AccountDropdownItem[][];\n teams: AccountDropdownTeam[];\n /** Side the dropdown opens on relative to the trigger. Defaults to 'bottom'. */\n side?: React.ComponentPropsWithoutRef<typeof DropdownMenuContent>['side'];\n /** Alignment of the dropdown relative to the trigger. Defaults to 'end'. */\n align?: React.ComponentPropsWithoutRef<typeof DropdownMenuContent>['align'];\n isSuperAdmin?: boolean;\n}\n\nexport function AccountDropdown({\n accountPhoto,\n accountName,\n accountDropdownItems,\n teams,\n side = 'bottom',\n align = 'end',\n isSuperAdmin = false,\n ...props\n}: AccountDropdownProps) {\n const showTeamName = teams?.length > 1 || isSuperAdmin;\n const currentTeamName = (showTeamName && teams?.find((el) => el.isCurrent)?.name) || '';\n const initial = accountName[0];\n\n const groups: AccountDropdownItem[][] = Array.isArray(accountDropdownItems[0])\n ? (accountDropdownItems as AccountDropdownItem[][])\n : [accountDropdownItems as AccountDropdownItem[]];\n\n const handleCopy = React.useCallback((value: string, onCopy?: (value: string) => void) => {\n return (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onCopy) onCopy(value);\n else navigator.clipboard.writeText(value);\n };\n }, []);\n\n const renderCopyRow = (\n secondaryLabel: React.ReactNode,\n copyValue: string | undefined,\n onCopy?: (value: string) => void,\n ) =>\n secondaryLabel && (\n <div className=\"flex w-full items-center gap-1 text-xs text-subtlest ml-7\">\n {secondaryLabel}\n {copyValue != null && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-4 shrink-0 p-0 [&>svg]:!size-3\"\n onClick={handleCopy(copyValue, onCopy)}\n aria-label=\"Copy ID\"\n >\n <Copy className=\"size-3\" />\n </Button>\n )}\n </div>\n );\n\n return (\n <DropdownMenu {...props}>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"default\"\n variant=\"ghost\"\n className=\"rounded-full p-[1px] border border-dark-300 relative\"\n aria-label=\"Toggle account dropdown\"\n >\n <Avatar>\n <AvatarImage\n src={accountPhoto}\n alt={`${accountName}'s account`}\n className={cn(\n 'block rounded-full border border-background',\n isSuperAdmin && 'border-2 border-solid border-red-700 inset-1',\n )}\n />\n <AvatarFallback>{initial}</AvatarFallback>\n {isSuperAdmin && (\n <AvatarBadge className=\"bg-red-700 text-white\">\n <Crown />\n </AvatarBadge>\n )}\n </Avatar>\n {showTeamName && <span className=\"text-xs text-default font-semibold pr-1\">{currentTeamName}</span>}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n side={side}\n align={align}\n className=\"border-none shadow-[2px_4px_12px_0px_rgba(0,0,0,0.14)] dark:shadow-[2px_4px_12px_0px_rgba(255,255,255,0.14)]\"\n >\n {groups.map((group, groupIndex) => (\n <React.Fragment key={groupIndex}>\n {groupIndex > 0 && <DropdownMenuSeparator />}\n <DropdownMenuGroup>\n {group.map((item) =>\n item.type === 'submenu' ? (\n <DropdownMenuSub key={item.id}>\n <DropdownMenuSubTrigger\n secondaryRow={renderCopyRow(item.secondaryLabel, item.copyValue, item.onCopy)}\n >\n {item.icon}\n {item.label}\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent className=\"border-none shadow-[2px_4px_12px_0px_rgba(0,0,0,0.14)] dark:shadow-[2px_4px_12px_0px_rgba(255,255,255,0.14)]\">\n {item.value != null && item.onValueChange ? (\n <DropdownMenuRadioGroup value={item.value} onValueChange={item.onValueChange}>\n {item.items.map((option) => (\n <DropdownMenuRadioItem key={option.id} value={option.value}>\n {option.icon}\n {option.label}\n {option.shortcut != null && (\n <DropdownMenuShortcut>{option.shortcut}</DropdownMenuShortcut>\n )}\n </DropdownMenuRadioItem>\n ))}\n </DropdownMenuRadioGroup>\n ) : (\n item.items.map((option) => (\n <DropdownMenuItem key={option.id} onClick={option.onClick}>\n {option.icon}\n {option.label}\n {option.shortcut != null && (\n <DropdownMenuShortcut>{option.shortcut}</DropdownMenuShortcut>\n )}\n </DropdownMenuItem>\n ))\n )}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n ) : (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onClick}\n secondaryRow={renderCopyRow(item.secondaryLabel, item.copyValue, item.onCopy)}\n >\n {item.icon}\n {item.label}\n {item.shortcut != null && <DropdownMenuShortcut>{item.shortcut}</DropdownMenuShortcut>}\n </DropdownMenuItem>\n ),\n )}\n </DropdownMenuGroup>\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","import * as React from 'react';\nimport { Question, SidebarSimple, Lightning, Sparkle } from '@phosphor-icons/react';\n\nimport { Logo } from '../../components/logo';\nimport { Button } from '../../components/ui/button';\nimport { AccountDropdown, AccountDropdownProps } from './account-dropdown';\n\nimport { cn } from '@/lib/utils';\nimport { useBooleanFlagValue } from '@/lib/feature-flags';\n\ninterface HeaderNavProps extends React.ComponentPropsWithoutRef<'header'>, Omit<AccountDropdownProps, 'dir'> {\n isSideNavOpen?: boolean;\n onSideNavigationToggle: () => void;\n onHelpClick: () => void;\n onBrainfishNativeClick: () => void;\n onLogoNav: () => void;\n isHomePath?: boolean;\n showSuggestionAction?: boolean;\n suggestionAction?: React.ReactNode;\n onSuggestionActionClick?: () => void;\n showSidebarToggle?: boolean;\n isSuperAdmin?: boolean;\n /** Ref for the sidebar toggle button; used by layout to move focus here when sidebar is collapsed. */\n sidebarToggleRef?: React.Ref<HTMLButtonElement>;\n}\n\nexport const HEADER_NAV_HEIGHT = 60;\n\nexport const HeaderNav = React.forwardRef<HTMLElement, HeaderNavProps>(function HeaderNav(\n {\n className,\n isSideNavOpen = false,\n onSideNavigationToggle,\n onHelpClick,\n onBrainfishNativeClick,\n accountName,\n accountPhoto,\n accountDropdownItems,\n teams,\n side,\n align,\n showSuggestionAction,\n suggestionAction,\n onSuggestionActionClick,\n onLogoNav,\n isHomePath = false,\n showSidebarToggle = true,\n sidebarToggleRef,\n isSuperAdmin,\n ...props\n },\n ref,\n) {\n const hasSuggestionAction = showSuggestionAction && !!suggestionAction && !!onSuggestionActionClick;\n const brainfishNativeEnabled = useBooleanFlagValue('platform.brainfish-native.enabled', false);\n\n return (\n <header ref={ref} {...props} className={cn('px-4 py-3', className)}>\n <nav aria-label=\"Account navigation\" className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <a\n href=\"/\"\n onClick={(e) => {\n const isPlainLeftClick = e.button === 0 && !e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey;\n\n if (isPlainLeftClick) {\n e.preventDefault();\n onLogoNav();\n }\n }}\n aria-current={isHomePath ? 'page' : undefined}\n >\n <Logo\n variant=\"full\"\n color={isHomePath ? 'fill' : 'outline'}\n width={130}\n height={20}\n className=\"hidden md:block\"\n />\n <Logo\n variant=\"mark\"\n color={isHomePath ? 'fill' : 'outline'}\n width={37}\n height={20}\n className=\"block md:hidden\"\n />\n </a>\n {showSidebarToggle && (\n <Button\n ref={sidebarToggleRef}\n size=\"icon\"\n variant=\"ghost\"\n aria-label=\"Toggle side navigation\"\n className=\"[&_svg]:size-6\"\n onClick={onSideNavigationToggle}\n >\n <SidebarSimple aria-hidden=\"true\" weight={isSideNavOpen ? 'fill' : 'regular'} />\n </Button>\n )}\n </div>\n <div className=\"flex items-center gap-4\">\n {hasSuggestionAction && (\n <Button variant=\"suggestion\" onClick={onSuggestionActionClick}>\n <Lightning weight=\"fill\" aria-hidden=\"true\" /> {suggestionAction}\n </Button>\n )}\n <Button size=\"icon\" variant=\"ghost\" aria-label=\"Open help\" className=\"[&_svg]:size-6\" onClick={onHelpClick}>\n <Question aria-hidden=\"true\" />\n </Button>\n {brainfishNativeEnabled && (\n <Button\n size=\"icon\"\n aria-label=\"Open Brainfish Native\"\n className=\"[&_svg]:size-4 size-6 rounded-3xl bg-yellowfin-gradient hover:bg-yellowfin-gradient-reverse focus-visible:bg-yellowfin-gradient-reverse\"\n style={\n {\n cornerShape: 'squircle',\n } as React.CSSProperties\n }\n onClick={onBrainfishNativeClick}\n >\n <span className=\"relative\">\n <Sparkle aria-hidden=\"true\" weight=\"fill\" color=\"white\" className=\"relative z-10\" />\n <Sparkle\n aria-hidden=\"true\"\n weight=\"fill\"\n className=\"text-dark-800 opacity-20 absolute z-0 left-[1px] top-[1px]\"\n />\n </span>\n </Button>\n )}\n <AccountDropdown\n accountName={accountName}\n accountPhoto={accountPhoto}\n accountDropdownItems={accountDropdownItems}\n teams={teams}\n side={side}\n align={align}\n isSuperAdmin={isSuperAdmin}\n />\n </div>\n </nav>\n </header>\n );\n});\n"],"names":["HeaderNav"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"header-nav.BxK3FN1j.js","sources":["../../../src/layouts/header-nav/account-dropdown.tsx","../../../src/layouts/header-nav/header-nav.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Copy, Crown } from '@phosphor-icons/react';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '../../components/ui/dropdown-menu';\nimport { Avatar, AvatarFallback, AvatarImage, AvatarBadge } from '../../components/ui/avatar';\nimport { Button } from '../../components/ui/button';\n\nimport { cn } from '@/lib/utils';\n\nexport type AccountDropdownActionItem = {\n type?: 'action';\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick: () => void;\n /** Second line (e.g. \"ID: xyz\"); copy button shown when copyValue is set. */\n secondaryLabel?: React.ReactNode;\n copyValue?: string;\n onCopy?: (value: string) => void;\n /** Keyboard shortcut hint (e.g. \"⌘K\") shown on the right. */\n shortcut?: string;\n};\n\nexport type AccountDropdownSubOption = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n /** Required for radio mode. */\n value?: string;\n /** Used in plain (non-radio) mode. */\n onClick?: () => void;\n /** Keyboard shortcut hint (e.g. \"⌘K\") shown on the right. */\n shortcut?: string;\n};\n\n/** Sub-option with a required `value`, used in radio-mode submenus. */\nexport type AccountDropdownRadioSubOption = Omit<AccountDropdownSubOption, 'value' | 'onClick'> & {\n value: string;\n};\n\ntype AccountDropdownSubmenuBase = {\n type: 'submenu';\n id: string;\n label: string;\n icon?: React.ReactNode;\n /** Second line on the submenu trigger (e.g. \"ID: xyz\"); copy button when copyValue is set. */\n secondaryLabel?: React.ReactNode;\n copyValue?: string;\n onCopy?: (value: string) => void;\n};\n\nexport type AccountDropdownSubmenuItem = AccountDropdownSubmenuBase &\n (\n | {\n /** The currently selected value. When provided with onValueChange, renders items as a radio group with selection indicators. */\n value: string;\n onValueChange: (value: string) => void;\n items: AccountDropdownRadioSubOption[];\n }\n | {\n value?: never;\n onValueChange?: never;\n items: AccountDropdownSubOption[];\n }\n );\n\nexport type AccountDropdownItem = AccountDropdownActionItem | AccountDropdownSubmenuItem;\n\nexport type AccountDropdownTeam = {\n id: string;\n name: string;\n isCurrent: boolean;\n logoUrl?: string;\n};\n\nexport interface AccountDropdownProps extends React.ComponentPropsWithoutRef<typeof DropdownMenu> {\n accountPhoto: string;\n accountName: string;\n /** Pass a flat array for a single group, or an array of arrays for multiple groups separated by dividers. */\n accountDropdownItems: AccountDropdownItem[] | AccountDropdownItem[][];\n teams: AccountDropdownTeam[];\n /** Side the dropdown opens on relative to the trigger. Defaults to 'bottom'. */\n side?: React.ComponentPropsWithoutRef<typeof DropdownMenuContent>['side'];\n /** Alignment of the dropdown relative to the trigger. Defaults to 'end'. */\n align?: React.ComponentPropsWithoutRef<typeof DropdownMenuContent>['align'];\n isSuperAdmin?: boolean;\n}\n\nexport function AccountDropdown({\n accountPhoto,\n accountName,\n accountDropdownItems,\n teams,\n side = 'bottom',\n align = 'end',\n isSuperAdmin = false,\n ...props\n}: AccountDropdownProps) {\n const showTeamName = teams?.length > 1 || isSuperAdmin;\n const currentTeamName = (showTeamName && teams?.find((el) => el.isCurrent)?.name) || '';\n const initial = accountName[0];\n\n const groups: AccountDropdownItem[][] = Array.isArray(accountDropdownItems[0])\n ? (accountDropdownItems as AccountDropdownItem[][])\n : [accountDropdownItems as AccountDropdownItem[]];\n\n const handleCopy = React.useCallback((value: string, onCopy?: (value: string) => void) => {\n return (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onCopy) onCopy(value);\n else navigator.clipboard.writeText(value);\n };\n }, []);\n\n const renderCopyRow = (\n secondaryLabel: React.ReactNode,\n copyValue: string | undefined,\n onCopy?: (value: string) => void,\n ) =>\n secondaryLabel && (\n <div className=\"flex w-full items-center gap-1 text-xs text-subtlest ml-7\">\n {secondaryLabel}\n {copyValue != null && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-4 shrink-0 p-0 [&>svg]:!size-3\"\n onClick={handleCopy(copyValue, onCopy)}\n aria-label=\"Copy ID\"\n >\n <Copy className=\"size-3\" />\n </Button>\n )}\n </div>\n );\n\n return (\n <DropdownMenu {...props}>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"default\"\n variant=\"ghost\"\n className=\"rounded-full p-[1px] border border-dark-300 relative\"\n aria-label=\"Toggle account dropdown\"\n >\n <Avatar>\n <AvatarImage\n src={accountPhoto}\n alt={`${accountName}'s account`}\n className={cn(\n 'block rounded-full border border-background',\n isSuperAdmin && 'border-2 border-solid border-red-700 inset-1',\n )}\n />\n <AvatarFallback>{initial}</AvatarFallback>\n {isSuperAdmin && (\n <AvatarBadge className=\"bg-red-700 text-white\">\n <Crown />\n </AvatarBadge>\n )}\n </Avatar>\n {showTeamName && <span className=\"text-xs text-default font-semibold pr-1\">{currentTeamName}</span>}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n side={side}\n align={align}\n className=\"border-none shadow-[2px_4px_12px_0px_rgba(0,0,0,0.14)] dark:shadow-[2px_4px_12px_0px_rgba(255,255,255,0.14)]\"\n >\n {groups.map((group, groupIndex) => (\n <React.Fragment key={groupIndex}>\n {groupIndex > 0 && <DropdownMenuSeparator />}\n <DropdownMenuGroup>\n {group.map((item) =>\n item.type === 'submenu' ? (\n <DropdownMenuSub key={item.id}>\n <DropdownMenuSubTrigger\n secondaryRow={renderCopyRow(item.secondaryLabel, item.copyValue, item.onCopy)}\n >\n {item.icon}\n {item.label}\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent className=\"border-none shadow-[2px_4px_12px_0px_rgba(0,0,0,0.14)] dark:shadow-[2px_4px_12px_0px_rgba(255,255,255,0.14)]\">\n {item.value != null && item.onValueChange ? (\n <DropdownMenuRadioGroup value={item.value} onValueChange={item.onValueChange}>\n {item.items.map((option) => (\n <DropdownMenuRadioItem key={option.id} value={option.value}>\n {option.icon}\n {option.label}\n {option.shortcut != null && (\n <DropdownMenuShortcut>{option.shortcut}</DropdownMenuShortcut>\n )}\n </DropdownMenuRadioItem>\n ))}\n </DropdownMenuRadioGroup>\n ) : (\n item.items.map((option) => (\n <DropdownMenuItem key={option.id} onClick={option.onClick}>\n {option.icon}\n {option.label}\n {option.shortcut != null && (\n <DropdownMenuShortcut>{option.shortcut}</DropdownMenuShortcut>\n )}\n </DropdownMenuItem>\n ))\n )}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n ) : (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onClick}\n secondaryRow={renderCopyRow(item.secondaryLabel, item.copyValue, item.onCopy)}\n >\n {item.icon}\n {item.label}\n {item.shortcut != null && <DropdownMenuShortcut>{item.shortcut}</DropdownMenuShortcut>}\n </DropdownMenuItem>\n ),\n )}\n </DropdownMenuGroup>\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","import * as React from 'react';\nimport { Question, SidebarSimple, Lightning, Sparkle } from '@phosphor-icons/react';\n\nimport { Logo } from '../../components/logo';\nimport { Button } from '../../components/ui/button';\nimport { AccountDropdown, AccountDropdownProps } from './account-dropdown';\n\nimport { cn } from '@/lib/utils';\nimport { useBooleanFlagValue } from '@/lib/feature-flags';\n\ninterface HeaderNavProps extends React.ComponentPropsWithoutRef<'header'>, Omit<AccountDropdownProps, 'dir'> {\n isSideNavOpen?: boolean;\n onSideNavigationToggle: () => void;\n onHelpClick: () => void;\n onBrainfishNativeClick: () => void;\n onLogoNav: () => void;\n isHomePath?: boolean;\n showSuggestionAction?: boolean;\n suggestionAction?: React.ReactNode;\n onSuggestionActionClick?: () => void;\n showSidebarToggle?: boolean;\n isSuperAdmin?: boolean;\n /** Ref for the sidebar toggle button; used by layout to move focus here when sidebar is collapsed. */\n sidebarToggleRef?: React.Ref<HTMLButtonElement>;\n}\n\nexport const HEADER_NAV_HEIGHT = 60;\n\nexport const HeaderNav = React.forwardRef<HTMLElement, HeaderNavProps>(function HeaderNav(\n {\n className,\n isSideNavOpen = false,\n onSideNavigationToggle,\n onHelpClick,\n onBrainfishNativeClick,\n accountName,\n accountPhoto,\n accountDropdownItems,\n teams,\n side,\n align,\n showSuggestionAction,\n suggestionAction,\n onSuggestionActionClick,\n onLogoNav,\n isHomePath = false,\n showSidebarToggle = true,\n sidebarToggleRef,\n isSuperAdmin,\n ...props\n },\n ref,\n) {\n const hasSuggestionAction = showSuggestionAction && !!suggestionAction && !!onSuggestionActionClick;\n const brainfishNativeEnabled = useBooleanFlagValue('platform.brainfish-native.enabled', false);\n\n return (\n <header ref={ref} {...props} className={cn('px-4 py-3 relative', className)}>\n <nav aria-label=\"Account navigation\" className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <a\n href=\"/\"\n onClick={(e) => {\n const isPlainLeftClick = e.button === 0 && !e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey;\n\n if (isPlainLeftClick) {\n e.preventDefault();\n onLogoNav();\n }\n }}\n aria-current={isHomePath ? 'page' : undefined}\n >\n <Logo\n variant=\"full\"\n color={isHomePath ? 'fill' : 'outline'}\n width={130}\n height={20}\n className=\"hidden md:block\"\n />\n <Logo\n variant=\"mark\"\n color={isHomePath ? 'fill' : 'outline'}\n width={37}\n height={20}\n className=\"block md:hidden\"\n />\n </a>\n {showSidebarToggle && (\n <Button\n ref={sidebarToggleRef}\n size=\"icon\"\n variant=\"ghost\"\n aria-label=\"Toggle side navigation\"\n className=\"[&_svg]:size-6\"\n onClick={onSideNavigationToggle}\n >\n <SidebarSimple aria-hidden=\"true\" weight={isSideNavOpen ? 'fill' : 'regular'} />\n </Button>\n )}\n </div>\n <div className=\"flex items-center gap-4\">\n {hasSuggestionAction && (\n <Button variant=\"suggestion\" onClick={onSuggestionActionClick}>\n <Lightning weight=\"fill\" aria-hidden=\"true\" /> {suggestionAction}\n </Button>\n )}\n <Button size=\"icon\" variant=\"ghost\" aria-label=\"Open help\" className=\"[&_svg]:size-6\" onClick={onHelpClick}>\n <Question aria-hidden=\"true\" />\n </Button>\n {brainfishNativeEnabled && (\n <Button\n size=\"icon\"\n aria-label=\"Open Brainfish Native\"\n className=\"[&_svg]:size-4 size-6 rounded-3xl bg-yellowfin-gradient hover:bg-yellowfin-gradient-reverse focus-visible:bg-yellowfin-gradient-reverse\"\n style={\n {\n cornerShape: 'squircle',\n } as React.CSSProperties\n }\n onClick={onBrainfishNativeClick}\n >\n <span className=\"relative\">\n <Sparkle aria-hidden=\"true\" weight=\"fill\" color=\"white\" className=\"relative z-10\" />\n <Sparkle\n aria-hidden=\"true\"\n weight=\"fill\"\n className=\"text-dark-800 opacity-20 absolute z-0 left-[1px] top-[1px]\"\n />\n </span>\n </Button>\n )}\n <AccountDropdown\n accountName={accountName}\n accountPhoto={accountPhoto}\n accountDropdownItems={accountDropdownItems}\n teams={teams}\n side={side}\n align={align}\n isSuperAdmin={isSuperAdmin}\n />\n </div>\n </nav>\n </header>\n );\n});\n"],"names":["HeaderNav"],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React__default, { useContext, useState, useMemo, useRef, useEffect, useCallback, isValidElement } from 'react';
|
|
2
2
|
import { useMediaQuery } from 'usehooks-ts';
|
|
3
|
-
import { a as HeaderNav, H as HEADER_NAV_HEIGHT } from './header-nav.
|
|
3
|
+
import { a as HeaderNav, H as HEADER_NAV_HEIGHT } from './header-nav.BxK3FN1j.js';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { c as cn } from './utils.Cwtlq8dh.js';
|
|
4
6
|
import { ScrollArea } from '../components/ui/scroll-area.js';
|
|
5
7
|
import { F as FeatureFlagProvider } from './feature-flags.C57XMODn.js';
|
|
6
|
-
import { c as cn } from './utils.Cwtlq8dh.js';
|
|
7
8
|
import { Item } from '../components/ui/item.js';
|
|
8
9
|
import { S as Sidebar } from './sidebar.BFzx4WQ0.js';
|
|
9
10
|
|
|
@@ -198,6 +199,22 @@ function RightSidebar({ children }) {
|
|
|
198
199
|
}
|
|
199
200
|
RightSidebar.displayName = "FullLayout.RightSidebar";
|
|
200
201
|
|
|
202
|
+
const blurryBlob = cva("blurry-blob", {
|
|
203
|
+
variants: {
|
|
204
|
+
variant: {
|
|
205
|
+
topLeft: "",
|
|
206
|
+
bottomRight: "!top-auto !left-auto !-bottom-[10%] !right-0 rotate-180"
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
defaultVariants: {
|
|
210
|
+
variant: "topLeft"
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
const GooFilter = () => /* @__PURE__ */ React__default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "fixed top-0 left-0 w-0 h-0" }, /* @__PURE__ */ React__default.createElement("defs", null, /* @__PURE__ */ React__default.createElement("filter", { id: "goo" }, /* @__PURE__ */ React__default.createElement("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "10", result: "blur" }), /* @__PURE__ */ React__default.createElement("feColorMatrix", { in: "blur", mode: "matrix", values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -8", result: "goo" }), /* @__PURE__ */ React__default.createElement("feBlend", { in: "SourceGraphic", in2: "goo" }))));
|
|
214
|
+
const BlurryBlob = ({ className, variant }) => {
|
|
215
|
+
return /* @__PURE__ */ React__default.createElement("div", { className: cn(blurryBlob({ variant }), className) }, /* @__PURE__ */ React__default.createElement("div", { className: "gradients-container" }, /* @__PURE__ */ React__default.createElement("div", { className: "g1" }), /* @__PURE__ */ React__default.createElement("div", { className: "g2" }), /* @__PURE__ */ React__default.createElement("div", { className: "g3" }), /* @__PURE__ */ React__default.createElement("div", { className: "g4" })));
|
|
216
|
+
};
|
|
217
|
+
|
|
201
218
|
const MIN_SIDENAV_WIDTH = 260;
|
|
202
219
|
const CLOSE_SIDENAV_THRESHOLD = MIN_SIDENAV_WIDTH - 32;
|
|
203
220
|
const MAX_SIDENAV_WIDTH = 330;
|
|
@@ -419,7 +436,8 @@ function FullLayoutRoot({
|
|
|
419
436
|
Main: Main
|
|
420
437
|
});
|
|
421
438
|
const hasRightSidebar = rightSidebar != null;
|
|
422
|
-
|
|
439
|
+
const mainPanelClasses = "md:shadow-[2px_4px_12px_0_rgba(0,0,0,0.14)] md:dark:shadow-[2px_4px_12px_0_rgba(255,255,255,0.14)] md:rounded-lg";
|
|
440
|
+
return /* @__PURE__ */ React__default.createElement(FullLayoutProvider, { value: layoutContextValue }, /* @__PURE__ */ React__default.createElement(GooFilter, null), /* @__PURE__ */ React__default.createElement(BlurryBlob, { variant: "topLeft" }), /* @__PURE__ */ React__default.createElement(BlurryBlob, { variant: "bottomRight" }), /* @__PURE__ */ React__default.createElement(
|
|
423
441
|
"div",
|
|
424
442
|
{
|
|
425
443
|
className: cn(
|
|
@@ -447,7 +465,16 @@ function FullLayoutRoot({
|
|
|
447
465
|
}
|
|
448
466
|
},
|
|
449
467
|
disableLeftSideNav ? /* @__PURE__ */ React__default.createElement("div", { className: "w-0" }) : leftSidebar,
|
|
450
|
-
/* @__PURE__ */ React__default.createElement("div", { className: cn("isolate relative md:mr-4", { "md:mx-4": !isSideNavOpen || disableLeftSideNav }) }, disableMainScrollArea ? /* @__PURE__ */ React__default.createElement("div", { className: "bg-surface
|
|
468
|
+
/* @__PURE__ */ React__default.createElement("div", { className: cn("isolate relative md:mr-4", { "md:mx-4": !isSideNavOpen || disableLeftSideNav }) }, disableMainScrollArea ? /* @__PURE__ */ React__default.createElement("div", { className: cn("bg-surface", mainPanelClasses) }, /* @__PURE__ */ React__default.createElement("main", { className: "min-w-0 relative" }, main)) : /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
|
|
469
|
+
ScrollArea,
|
|
470
|
+
{
|
|
471
|
+
className: cn(
|
|
472
|
+
"bg-surface h-[calc(100dvh-var(--header-nav-height))] md:h-[calc(100dvh-var(--header-nav-height)-1rem)]",
|
|
473
|
+
mainPanelClasses
|
|
474
|
+
)
|
|
475
|
+
},
|
|
476
|
+
/* @__PURE__ */ React__default.createElement("div", { className: "min-h-full" }, /* @__PURE__ */ React__default.createElement("main", { className: cn("min-w-0 overflow-visible relative p-4 md:p-8") }, main))
|
|
477
|
+
), /* @__PURE__ */ React__default.createElement(
|
|
451
478
|
"div",
|
|
452
479
|
{
|
|
453
480
|
"aria-hidden": true,
|
|
@@ -476,4 +503,4 @@ const FullLayout = Object.assign(FullLayoutWithFlags, {
|
|
|
476
503
|
});
|
|
477
504
|
|
|
478
505
|
export { FullLayout as F, FullLayoutLeftSidebar as a, FullLayoutNavStateContext as b, FullLayoutProvider as c, FullLayoutRightSidebar as d, useRightSidebar as e, useFullLayoutContext as u };
|
|
479
|
-
//# sourceMappingURL=layout.
|
|
506
|
+
//# sourceMappingURL=layout.qbMLkE1I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.qbMLkE1I.js","sources":["../../../src/layouts/full-layout/context.tsx","../../../src/layouts/full-layout/components/main-area.tsx","../../../src/layouts/full-layout/components/body.tsx","../../../src/layouts/full-layout/components/header.tsx","../../../src/layouts/full-layout/left-sidebar-pane.tsx","../../../src/layouts/full-layout/components/left-sidebar.tsx","../../../src/layouts/full-layout/components/main.tsx","../../../src/layouts/full-layout/right-sidebar-pane.tsx","../../../src/layouts/full-layout/components/right-sidebar.tsx","../../../src/layouts/full-layout/blurry-blob.tsx","../../../src/layouts/full-layout/layout.tsx"],"sourcesContent":["import React from 'react';\n\n/** Nav state derived from route (e.g. active ids). Provided by Platform; when null, layout uses props only. */\nexport interface FullLayoutNavState {\n appNavActiveId?: string;\n sectionNavActiveId?: string;\n activeArticleId?: string;\n}\n\nconst FullLayoutNavStateContext = React.createContext<FullLayoutNavState | null>(null);\n\nexport { FullLayoutNavStateContext };\n\nexport interface FullLayoutContextValue {\n isSideNavOpen: boolean;\n isRightSidebarOpen: boolean;\n toggleSidebar: () => void;\n openRightSidebar: () => void;\n closeRightSidebar: () => void;\n toggleRightSidebar: () => void;\n showSidenav: () => void;\n disableLeftSideNav: boolean;\n leftNavWidth: number;\n isMobile: boolean;\n sideNavRef: React.RefObject<HTMLDivElement | null>;\n rightSidebarRef: React.RefObject<HTMLElement | null>;\n sidebarToggleRef: React.RefObject<HTMLButtonElement | null>;\n handleResizeStart: (e: React.MouseEvent) => void;\n handleResizeKeyDown: (e: React.KeyboardEvent) => void;\n ariaValuenow: number;\n ariaValuemin: number;\n ariaValuemax: number;\n /** Mirrors `FullLayout` prop; `FullLayout.Main` uses it for viewport height when Radix ScrollArea is off. */\n disableMainScrollArea: boolean;\n}\n\nconst FullLayoutContext = React.createContext<FullLayoutContextValue | null>(null);\n\nexport interface FullLayoutProviderProps {\n value: FullLayoutContextValue;\n children: React.ReactNode;\n}\n\nexport function FullLayoutProvider({ value, children }: FullLayoutProviderProps) {\n return <FullLayoutContext.Provider value={value}>{children}</FullLayoutContext.Provider>;\n}\n\nexport function useFullLayoutContext(): FullLayoutContextValue | null {\n return React.useContext(FullLayoutContext);\n}\n\nexport interface UseRightSidebarReturn {\n /** Whether the right sidebar is currently open. */\n isOpen: boolean;\n /** Open the right sidebar (no-op if already open). */\n open: () => void;\n /** Close the right sidebar (no-op if already closed). */\n close: () => void;\n /** Toggle the right sidebar open/closed. */\n toggle: () => void;\n}\n\n/**\n * Convenience hook for programmatically controlling the right sidebar.\n *\n * Must be used inside a `<FullLayout>` tree.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const rightSidebar = useRightSidebar();\n * return <button onClick={rightSidebar.open}>Open sidebar</button>;\n * }\n * ```\n */\nexport function useRightSidebar(): UseRightSidebarReturn {\n const ctx = React.useContext(FullLayoutContext);\n if (!ctx) {\n throw new Error('useRightSidebar must be used within a <FullLayout> component.');\n }\n\n return {\n isOpen: ctx.isRightSidebarOpen,\n open: ctx.openRightSidebar,\n close: ctx.closeRightSidebar,\n toggle: ctx.toggleRightSidebar,\n };\n}\n","import React from 'react';\n\nexport function MainArea({ children }: { children?: React.ReactNode }) {\n return <>{children}</>;\n}\nMainArea.displayName = 'FullLayout.MainArea';\n","import React from 'react';\n\nexport function Body({ children }: { children?: React.ReactNode }) {\n return <>{children}</>;\n}\nBody.displayName = 'FullLayout.Body';\n","import React, { ComponentProps } from 'react';\n\nimport { HeaderNav } from '../../header-nav';\nimport { useFullLayoutContext } from '../context';\n\nexport function Header(props: ComponentProps<typeof HeaderNav>) {\n const ctx = useFullLayoutContext();\n if (!ctx) return null;\n\n return (\n <HeaderNav\n {...props}\n showSidebarToggle={!ctx.disableLeftSideNav}\n isSideNavOpen={ctx.isSideNavOpen}\n onSideNavigationToggle={ctx.toggleSidebar}\n onBrainfishNativeClick={ctx.toggleRightSidebar}\n sidebarToggleRef={ctx.sidebarToggleRef as React.Ref<HTMLButtonElement>}\n />\n );\n}\nHeader.displayName = 'FullLayout.Header';\n","import React, { ComponentProps } from 'react';\n\nimport { Sidebar } from '../sidebar';\n\nimport { cn } from '@/lib/utils';\n\nexport interface FullLayoutLeftSidebarProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n open: boolean;\n widthPx: number;\n onResizeStart: (e: React.MouseEvent) => void;\n onResizeKeyDown: (e: React.KeyboardEvent) => void;\n ariaValuenow: number;\n ariaValuemin: number;\n ariaValuemax: number;\n sidebarProps: ComponentProps<typeof Sidebar>;\n}\n\nconst FullLayoutLeftSidebar = React.forwardRef<HTMLDivElement, FullLayoutLeftSidebarProps>(\n (\n {\n open,\n widthPx,\n onResizeStart,\n onResizeKeyDown,\n ariaValuenow,\n ariaValuemin,\n ariaValuemax,\n sidebarProps,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n id=\"left-sidebar-pane\"\n data-slot=\"full-layout-left-sidebar\"\n tabIndex={-1}\n data-state={open ? 'open' : 'closed'}\n className={cn(\n 'min-w-0 overflow-hidden flex flex-col relative transition-[width] data-[state=closed]:w-0 data-[state=closed]:pointer-events-none data-[state=open]:w-full md:data-[state=open]:w-[var(--left-nav-width)]',\n className,\n )}\n style={{\n ['--left-nav-width' as string]: `${widthPx}px`,\n }}\n {...props}\n >\n <Sidebar\n {...sidebarProps}\n collapsed={!open}\n className=\"transition-[width] w-[var(--left-nav-width)] h-[calc(100dvh-var(--header-nav-height,0))]\"\n />\n\n {/* Window Splitter per APG: https://www.w3.org/ARIA/apg/patterns/windowsplitter/ */}\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- focusable separator per APG Window Splitter pattern */}\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-valuenow={ariaValuenow}\n aria-valuemin={ariaValuemin}\n aria-valuemax={ariaValuemax}\n aria-label=\"Resize left sidebar\"\n aria-controls=\"left-sidebar-pane\"\n data-slot=\"full-layout-left-sidebar-resize-handle\"\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- focusable separator per APG Window Splitter pattern */\n tabIndex={0}\n onMouseDown={onResizeStart}\n onKeyDown={onResizeKeyDown}\n className=\"hidden lg:block absolute top-0 right-0 bottom-0 w-1 bg-transparent hover:bg-blue-500 cursor-ew-resize shrink-0 [&>div]:pointer-events-none\"\n >\n <div className=\"absolute inset-y-0 -right-1 w-3\" />\n </div>\n </div>\n );\n },\n);\n\nFullLayoutLeftSidebar.displayName = 'FullLayoutLeftSidebar';\n\nexport { FullLayoutLeftSidebar };\n","import React, { ComponentProps, useContext } from 'react';\n\nimport { Sidebar } from '../../sidebar';\nimport { FullLayoutNavStateContext, useFullLayoutContext } from '../context';\nimport { FullLayoutLeftSidebar } from '../left-sidebar-pane';\n\nexport function LeftSidebar(props: ComponentProps<typeof Sidebar>) {\n const ctx = useFullLayoutContext();\n const navState = useContext(FullLayoutNavStateContext);\n if (!ctx) return null;\n if (ctx.disableLeftSideNav) return null;\n\n const sidebarProps: ComponentProps<typeof Sidebar> =\n navState != null\n ? {\n ...props,\n appNavActiveId: navState.appNavActiveId ?? props.appNavActiveId,\n sectionNavActiveId: navState.sectionNavActiveId ?? props.sectionNavActiveId,\n activeArticleId: navState.activeArticleId ?? props.activeArticleId,\n }\n : props;\n\n return (\n <FullLayoutLeftSidebar\n ref={ctx.sideNavRef as React.Ref<HTMLDivElement>}\n open={ctx.isSideNavOpen}\n widthPx={ctx.leftNavWidth}\n onResizeStart={ctx.handleResizeStart}\n onResizeKeyDown={ctx.handleResizeKeyDown}\n ariaValuenow={ctx.ariaValuenow}\n ariaValuemin={ctx.ariaValuemin}\n ariaValuemax={ctx.ariaValuemax}\n sidebarProps={sidebarProps}\n />\n );\n}\nLeftSidebar.displayName = 'FullLayout.LeftSidebar';\n","import React from 'react';\n\nimport { useFullLayoutContext } from '../context';\n\nimport { Item } from '@/components/ui/item';\nimport { cn } from '@/lib/utils';\n\nexport function Main({ children, className }: { children?: React.ReactNode; className?: string }) {\n const ctx = useFullLayoutContext();\n const mainIsScrollContainer = ctx?.disableMainScrollArea ?? false;\n\n return (\n <Item\n className={cn(\n 'p-0',\n mainIsScrollContainer &&\n 'h-[calc(100dvh-var(--header-nav-height))] md:h-[calc(100dvh-var(--header-nav-height)-1rem)] min-h-0 overflow-y-auto p-4 md:p-8',\n className,\n )}\n >\n {children}\n </Item>\n );\n}\nMain.displayName = 'FullLayout.Main';\n","import React from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { ScrollArea } from '@/components/ui/scroll-area';\n\nexport interface FullLayoutRightSidebarProps extends Omit<React.ComponentPropsWithoutRef<'aside'>, 'children'> {\n open: boolean;\n children: React.ReactNode;\n}\n\nconst FullLayoutRightSidebar = React.forwardRef<HTMLElement, FullLayoutRightSidebarProps>(\n ({ open, className, children, ...props }, ref) => {\n return (\n <aside\n ref={ref as React.Ref<HTMLDivElement>}\n data-slot=\"full-layout-right-sidebar\"\n data-state={open ? 'open' : 'closed'}\n className={cn(\n 'bg-background shadow-lg flex flex-col',\n 'fixed h-[calc(100dvh-var(--header-nav-height))] z-10 w-screen transition-transform duration-300 ease-in-out data-[state=closed]:translate-x-full data-[state=open]:translate-x-0',\n 'md:relative md:h-full md:w-80 md:top-0',\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-col flex-1 min-h-0 overflow-hidden\" data-slot=\"full-layout-right-sidebar-content\">\n <ScrollArea className=\"h-[calc(100dvh-var(--header-nav-height))]\">{children}</ScrollArea>\n </div>\n </aside>\n );\n },\n);\n\nFullLayoutRightSidebar.displayName = 'FullLayoutRightSidebar';\n\nexport { FullLayoutRightSidebar };\n","import React from 'react';\n\nimport { useFullLayoutContext } from '../context';\nimport { FullLayoutRightSidebar } from '../right-sidebar-pane';\n\nexport function RightSidebar({ children }: { children?: React.ReactNode }) {\n const ctx = useFullLayoutContext();\n if (!ctx) return null;\n\n return (\n <FullLayoutRightSidebar\n ref={ctx.rightSidebarRef as React.Ref<HTMLElement>}\n open={ctx.isRightSidebarOpen}\n className=\"top-[var(--header-nav-height)]\"\n >\n {children}\n </FullLayoutRightSidebar>\n );\n}\nRightSidebar.displayName = 'FullLayout.RightSidebar';\n","import React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst blurryBlob = cva('blurry-blob', {\n variants: {\n variant: {\n topLeft: '',\n bottomRight: '!top-auto !left-auto !-bottom-[10%] !right-0 rotate-180',\n },\n },\n defaultVariants: {\n variant: 'topLeft',\n },\n});\n\ninterface BlurryBlobProps extends VariantProps<typeof blurryBlob> {\n className?: string;\n}\n\nexport const GooFilter = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"fixed top-0 left-0 w-0 h-0\">\n <defs>\n <filter id=\"goo\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"10\" result=\"blur\" />\n <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -8\" result=\"goo\" />\n <feBlend in=\"SourceGraphic\" in2=\"goo\" />\n </filter>\n </defs>\n </svg>\n);\n\nconst BlurryBlob = ({ className, variant }: BlurryBlobProps) => {\n return (\n <div className={cn(blurryBlob({ variant }), className)}>\n <div className=\"gradients-container\">\n <div className=\"g1\" />\n <div className=\"g2\" />\n <div className=\"g3\" />\n <div className=\"g4\" />\n </div>\n </div>\n );\n};\n\nexport default BlurryBlob;\n","import React, { useState, useRef, useEffect, useCallback, isValidElement, useMemo } from 'react';\nimport { useMediaQuery } from 'usehooks-ts';\n\nimport { FullLayoutProvider } from './context';\nimport { HEADER_NAV_HEIGHT } from '../header-nav';\nimport * as Compounds from './components';\nimport BlurryBlob, { GooFilter } from './blurry-blob';\n\nimport { ScrollArea } from '@/components/ui/scroll-area';\nimport { FeatureFlagProvider } from '@/lib/feature-flags';\nimport type { FeatureFlags } from '@/lib/feature-flags';\nimport { cn } from '@/lib/utils';\n\nconst MIN_SIDENAV_WIDTH = 260;\nconst CLOSE_SIDENAV_THRESHOLD = MIN_SIDENAV_WIDTH - 32;\nconst MAX_SIDENAV_WIDTH = 330;\nconst RIGHT_SIDEBAR_WIDTH = 320;\n\nexport interface FullLayoutRootProps {\n children?: React.ReactNode;\n disableLeftSideNav?: boolean;\n /** When true, main column uses a plain div (no Radix ScrollArea); viewport height is applied on `FullLayout.Main`. */\n disableMainScrollArea?: boolean;\n className?: string;\n}\n\n// Helper function to extract slots from children\nfunction extractSlots<T extends Record<string, React.ComponentType<any>>>(\n children: React.ReactNode,\n refs: T,\n): { [K in keyof T]: React.ReactElement | null } {\n const out = {} as { [K in keyof T]: React.ReactElement | null };\n const arr = React.Children.toArray(children);\n for (const key of Object.keys(refs) as (keyof T)[]) {\n const match = arr.find((c): c is React.ReactElement => isValidElement(c) && c.type === refs[key]);\n out[key] = match ?? null;\n }\n\n return out;\n}\n\n// --- Root component ---\n\nfunction FullLayoutRoot({\n children,\n disableLeftSideNav = false,\n disableMainScrollArea = false,\n className,\n}: FullLayoutRootProps) {\n // Match isMobile breakpoint (max-width: 767px) so no flash on 768–1023px\n const [isSideNavOpen, setIsSideNavOpen] = useState(() => typeof window !== 'undefined' && window.innerWidth > 767);\n const [isRightSidebarOpen, setIsRightSidebarOpen] = useState(false);\n const [isResizing, setIsResizing] = useState(false);\n const [gridWidth, setGridWidth] = useState(() => (typeof window !== 'undefined' ? window.innerWidth : 0));\n\n const newMinNavWidth = useMemo(\n () =>\n gridWidth > 0\n ? Math.max(MIN_SIDENAV_WIDTH, Math.min(MAX_SIDENAV_WIDTH, Math.round(gridWidth * 0.18)))\n : MIN_SIDENAV_WIDTH,\n [gridWidth],\n );\n const [leftNavWidth, setLeftNavWidth] = useState(newMinNavWidth);\n\n const sideNavRef = useRef<HTMLDivElement>(null);\n const rightSidebarRef = useRef<HTMLElement>(null);\n const sidebarToggleRef = useRef<HTMLButtonElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n const prevSideNavOpenRef = useRef(isSideNavOpen);\n const resizeAcRef = useRef<AbortController | null>(null);\n const isMobile = useMediaQuery('(max-width: 767px)');\n const isWideDesktop = useMediaQuery('(min-width: 1280px)');\n\n // Prevent native scrollbar from appearing\n useEffect(() => {\n if (!document.body.querySelector('.sbdocs')) {\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n // Handle grid width changes\n useEffect(() => {\n const el = gridRef.current;\n if (!el) return;\n\n const ro = new ResizeObserver(([entry]) => {\n setGridWidth(entry.contentRect.width);\n });\n ro.observe(el);\n\n return () => ro.disconnect();\n }, []);\n\n // Close other sidebar if opening a new one on wide desktop\n const closeOtherSidebar = useCallback(\n (opening: 'left' | 'right') => {\n if (isWideDesktop) return;\n if (opening === 'left') setIsRightSidebarOpen(false);\n else setIsSideNavOpen(false);\n },\n [isWideDesktop],\n );\n\n // Show left sidebar\n const showSidenav = useCallback(() => {\n closeOtherSidebar('left');\n setIsSideNavOpen(true);\n setLeftNavWidth(newMinNavWidth);\n sideNavRef.current?.focus();\n }, [closeOtherSidebar, newMinNavWidth]);\n\n // Toggle left sidebar\n const toggleSidebar = useCallback(() => {\n closeOtherSidebar('left');\n setIsSideNavOpen((prev) => !prev);\n }, [closeOtherSidebar]);\n\n // Open right sidebar (no-op if already open)\n const openRightSidebar = useCallback(() => {\n closeOtherSidebar('right');\n setIsRightSidebarOpen(true);\n }, [closeOtherSidebar]);\n\n // Close right sidebar (no-op if already closed)\n const closeRightSidebar = useCallback(() => {\n setIsRightSidebarOpen(false);\n }, []);\n\n // Toggle right sidebar\n const toggleRightSidebar = useCallback(() => {\n closeOtherSidebar('right');\n setIsRightSidebarOpen((prev) => !prev);\n }, [closeOtherSidebar]);\n\n // Apply left nav width - used for resizing left sidebar\n const applyLeftNavWidth = useCallback(\n (newWidth: number): boolean => {\n if (newWidth < CLOSE_SIDENAV_THRESHOLD) {\n setLeftNavWidth(newMinNavWidth);\n setIsSideNavOpen(false);\n\n return true;\n } else {\n // clamp to MAX_SIDENAV_WIDTH\n setLeftNavWidth(Math.min(MAX_SIDENAV_WIDTH, newWidth));\n\n return false;\n }\n },\n [newMinNavWidth],\n );\n\n // Handle resize start\n const handleResizeStart = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n resizeAcRef.current = new AbortController();\n setIsResizing(true);\n }, []);\n\n // Handle resize end\n const endResize = useCallback(() => {\n setIsResizing(false);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }, []);\n\n // Handle mouse move during resize\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isResizing) return;\n if (applyLeftNavWidth(e.clientX)) {\n endResize();\n }\n },\n [isResizing, applyLeftNavWidth, endResize],\n );\n\n // Handle mouse up during resize\n const handleMouseUp = useCallback(() => endResize(), [endResize]);\n\n // Set inert attribute on side nav and right sidebar - disables tabbing to elements inside when sidebar is closed\n const setInert = useCallback((el: HTMLElement | null, open: boolean) => {\n if (!el) return;\n if (open) el.removeAttribute('inert');\n else el.setAttribute('inert', '');\n }, []);\n\n useEffect(() => {\n setInert(sideNavRef.current, isSideNavOpen);\n setInert(rightSidebarRef.current, isRightSidebarOpen);\n }, [isSideNavOpen, isRightSidebarOpen]);\n\n // Attach resize listeners when isResizing becomes true (controller already set in handleResizeStart)\n useEffect(() => {\n if (!isResizing || !resizeAcRef.current) return;\n\n const { signal } = resizeAcRef.current;\n document.body.style.cursor = 'ew-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener('mousemove', handleMouseMove, { signal });\n document.addEventListener('mouseup', handleMouseUp, { signal });\n window.addEventListener('mouseup', handleMouseUp, { signal });\n setInert(sideNavRef.current, false);\n\n return () => {\n resizeAcRef.current?.abort();\n resizeAcRef.current = null;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n setInert(sideNavRef.current, true);\n };\n }, [isResizing]);\n\n // Handle resize key down\n const handleResizeKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const step = 16;\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n applyLeftNavWidth(leftNavWidth - step);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n applyLeftNavWidth(Math.min(MAX_SIDENAV_WIDTH, leftNavWidth + step));\n }\n },\n [leftNavWidth, applyLeftNavWidth],\n );\n\n const leftCol = disableLeftSideNav ? 0 : isSideNavOpen ? (isMobile ? gridWidth : leftNavWidth) : 0;\n const rightCol = isMobile ? 0 : isRightSidebarOpen ? RIGHT_SIDEBAR_WIDTH : 0;\n\n // Set left sidebar open state based on mobile\n useEffect(() => {\n setIsSideNavOpen(isMobile ? false : true);\n }, [isMobile]);\n\n // Focus sidebar toggle when left sidebar is closed\n useEffect(() => {\n if (prevSideNavOpenRef.current && !isSideNavOpen) {\n sidebarToggleRef.current?.focus();\n }\n prevSideNavOpenRef.current = isSideNavOpen;\n }, [isSideNavOpen]);\n\n const ariaRange = MAX_SIDENAV_WIDTH - newMinNavWidth;\n const ariaValuenow = ariaRange === 0 ? 100 : Math.round(((leftNavWidth - newMinNavWidth) / ariaRange) * 100);\n\n const layoutContextValue = useMemo(\n () => ({\n isSideNavOpen,\n isRightSidebarOpen,\n toggleSidebar,\n openRightSidebar,\n closeRightSidebar,\n toggleRightSidebar,\n showSidenav,\n disableLeftSideNav: disableLeftSideNav ?? false,\n leftNavWidth,\n isMobile,\n sideNavRef,\n rightSidebarRef,\n sidebarToggleRef,\n handleResizeStart,\n handleResizeKeyDown,\n ariaValuenow,\n ariaValuemin: 0,\n ariaValuemax: 100,\n disableMainScrollArea,\n }),\n [\n isSideNavOpen,\n isRightSidebarOpen,\n toggleSidebar,\n openRightSidebar,\n closeRightSidebar,\n toggleRightSidebar,\n showSidenav,\n leftNavWidth,\n isMobile,\n disableLeftSideNav,\n disableMainScrollArea,\n handleResizeStart,\n handleResizeKeyDown,\n ariaValuenow,\n ],\n );\n\n // --- Extract slots from children ---\n const { MainArea: mainArea, RightSidebar: rightSidebar } = extractSlots(children, {\n MainArea: Compounds.MainArea,\n RightSidebar: Compounds.RightSidebar,\n });\n const mainAreaChildren = isValidElement(mainArea)\n ? (mainArea.props as { children?: React.ReactNode }).children\n : null;\n const { Header: header, Body: body } = extractSlots(mainAreaChildren ?? null, {\n Header: Compounds.Header,\n Body: Compounds.Body,\n });\n const bodyChildren = isValidElement(body) ? (body.props as { children?: React.ReactNode }).children : null;\n const { LeftSidebar: leftSidebar, Main: main } = extractSlots(bodyChildren ?? null, {\n LeftSidebar: Compounds.LeftSidebar,\n Main: Compounds.Main,\n });\n\n const hasRightSidebar = rightSidebar != null;\n const mainPanelClasses =\n 'md:shadow-[2px_4px_12px_0_rgba(0,0,0,0.14)] md:dark:shadow-[2px_4px_12px_0_rgba(255,255,255,0.14)] md:rounded-lg';\n\n // --- Render the layout ---\n return (\n <FullLayoutProvider value={layoutContextValue}>\n <GooFilter />\n <BlurryBlob variant=\"topLeft\" />\n <BlurryBlob variant=\"bottomRight\" />\n <div\n className={cn(\n 'min-h-screen w-screen bg-background grid transition-[grid-template-columns] duration-300 ease-in-out',\n className,\n )}\n style={{\n gridTemplateColumns: hasRightSidebar ? 'minmax(0, 1fr) var(--right-col)' : 'minmax(0, 1fr)',\n ['--right-col' as string]: hasRightSidebar ? `${rightCol}px` : '0px',\n ['--header-nav-height' as string]: `${HEADER_NAV_HEIGHT}px`,\n }}\n >\n <div className=\"min-w-0 grid grid-rows-[auto_1fr]\">\n {header}\n\n <div\n ref={gridRef}\n data-sidenav-state={isSideNavOpen ? 'open' : 'closed'}\n data-right-sidebar-state={isRightSidebarOpen ? 'open' : 'closed'}\n className={cn(\n 'group/sidenav group/rightsidebar min-h-0 min-w-0 grid transition-[grid-template-columns] ease-linear',\n )}\n style={{\n gridTemplateColumns: `var(--left-col) minmax(0, 1fr)`,\n ['--left-col' as string]: `${leftCol}px`,\n }}\n >\n {disableLeftSideNav ? <div className=\"w-0\" /> : leftSidebar}\n <div className={cn('isolate relative md:mr-4', { 'md:mx-4': !isSideNavOpen || disableLeftSideNav })}>\n {disableMainScrollArea ? (\n <div className={cn('bg-surface', mainPanelClasses)}>\n <main className=\"min-w-0 relative\">{main}</main>\n </div>\n ) : (\n <>\n <ScrollArea\n className={cn(\n 'bg-surface h-[calc(100dvh-var(--header-nav-height))] md:h-[calc(100dvh-var(--header-nav-height)-1rem)]',\n mainPanelClasses,\n )}\n >\n <div className=\"min-h-full\">\n <main className={cn('min-w-0 overflow-visible relative p-4 md:p-8')}>{main}</main>\n </div>\n </ScrollArea>\n <div\n aria-hidden\n className=\"main-scroll-fade pointer-events-none sticky bottom-4 left-0 right-0 h-16 bg-gradient-to-t from-surface to-transparent md:rounded-b-lg\"\n />\n </>\n )}\n </div>\n </div>\n </div>\n\n {hasRightSidebar ? rightSidebar : null}\n </div>\n </FullLayoutProvider>\n );\n}\n\n/**\n * Custom memo comparator: re-render only when these props change by reference/value.\n * Use this so changing other props (e.g. from a parent) does not force the layout shell to re-render.\n */\nfunction fullLayoutRootPropsAreEqual(prev: FullLayoutRootProps, next: FullLayoutRootProps): boolean {\n return (\n prev.children === next.children &&\n prev.className === next.className &&\n prev.disableLeftSideNav === next.disableLeftSideNav &&\n prev.disableMainScrollArea === next.disableMainScrollArea\n );\n}\n\nconst FullLayoutRootMemo = React.memo(FullLayoutRoot, fullLayoutRootPropsAreEqual);\n\nexport interface FullLayoutProps extends FullLayoutRootProps {\n /** Feature flags for layout/header (e.g. platform.brainfish-native.enabled). Passed through to FeatureFlagProvider. */\n featureFlags?: FeatureFlags;\n}\n\nfunction FullLayoutWithFlags(props: FullLayoutProps) {\n const { featureFlags, ...layoutProps } = props;\n\n return (\n <FeatureFlagProvider flags={featureFlags}>\n <FullLayoutRootMemo {...layoutProps} />\n </FeatureFlagProvider>\n );\n}\n\ntype FullLayoutCompound = typeof FullLayoutWithFlags & {\n MainArea: typeof Compounds.MainArea;\n Body: typeof Compounds.Body;\n Header: typeof Compounds.Header;\n LeftSidebar: typeof Compounds.LeftSidebar;\n Main: typeof Compounds.Main;\n RightSidebar: typeof Compounds.RightSidebar;\n};\n\nconst FullLayout: FullLayoutCompound = Object.assign(FullLayoutWithFlags, {\n MainArea: Compounds.MainArea,\n Body: Compounds.Body,\n Header: Compounds.Header,\n LeftSidebar: Compounds.LeftSidebar,\n Main: Compounds.Main,\n RightSidebar: Compounds.RightSidebar,\n});\n\nexport default FullLayout;\n"],"names":["React","Compounds.MainArea","Compounds.RightSidebar","Compounds.Header","Compounds.Body","Compounds.LeftSidebar","Compounds.Main"],"mappings":";;;;;;;;;;AASA,MAAM,yBAAA,GAA4BA,cAAA,CAAM,aAAA,CAAyC,IAAI;AA2BrF,MAAM,iBAAA,GAAoBA,cAAA,CAAM,aAAA,CAA6C,IAAI,CAAA;AAO1E,SAAS,kBAAA,CAAmB,EAAE,KAAA,EAAO,QAAA,EAAS,EAA4B;AAC/E,EAAA,uBAAOA,cAAA,CAAA,aAAA,CAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,SAAe,QAAS,CAAA;AAC7D;AAEO,SAAS,oBAAA,GAAsD;AACpE,EAAA,OAAOA,cAAA,CAAM,WAAW,iBAAiB,CAAA;AAC3C;AA0BO,SAAS,eAAA,GAAyC;AACvD,EAAA,MAAM,GAAA,GAAMA,cAAA,CAAM,UAAA,CAAW,iBAAiB,CAAA;AAC9C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,EACjF;AAEA,EAAA,OAAO;AAAA,IACL,QAAQ,GAAA,CAAI,kBAAA;AAAA,IACZ,MAAM,GAAA,CAAI,gBAAA;AAAA,IACV,OAAO,GAAA,CAAI,iBAAA;AAAA,IACX,QAAQ,GAAA,CAAI;AAAA,GACd;AACF;;ACrFO,SAAS,QAAA,CAAS,EAAE,QAAA,EAAS,EAAmC;AACrE,EAAA,mFAAU,QAAS,CAAA;AACrB;AACA,QAAA,CAAS,WAAA,GAAc,qBAAA;;ACHhB,SAAS,IAAA,CAAK,EAAE,QAAA,EAAS,EAAmC;AACjE,EAAA,mFAAU,QAAS,CAAA;AACrB;AACA,IAAA,CAAK,WAAA,GAAc,iBAAA;;ACAZ,SAAS,OAAO,KAAA,EAAyC;AAC9D,EAAA,MAAM,MAAM,oBAAA,EAAqB;AACjC,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,EAAA,uBACEA,cAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,iBAAA,EAAmB,CAAC,GAAA,CAAI,kBAAA;AAAA,MACxB,eAAe,GAAA,CAAI,aAAA;AAAA,MACnB,wBAAwB,GAAA,CAAI,aAAA;AAAA,MAC5B,wBAAwB,GAAA,CAAI,kBAAA;AAAA,MAC5B,kBAAkB,GAAA,CAAI;AAAA;AAAA,GACxB;AAEJ;AACA,MAAA,CAAO,WAAA,GAAc,mBAAA;;ACHrB,MAAM,wBAAwBA,cAAA,CAAM,UAAA;AAAA,EAClC,CACE;AAAA,IACE,IAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACEA,cAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,EAAA,EAAG,mBAAA;AAAA,QACH,WAAA,EAAU,0BAAA;AAAA,QACV,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,QAC5B,SAAA,EAAW,EAAA;AAAA,UACT,2MAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,CAAC,kBAA4B,GAAG,CAAA,EAAG,OAAO,CAAA,EAAA;AAAA,SAC5C;AAAA,QACC,GAAG;AAAA,OAAA;AAAA,sBAEJA,cAAA,CAAA,aAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACE,GAAG,YAAA;AAAA,UACJ,WAAW,CAAC,IAAA;AAAA,UACZ,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBAIAA,cAAA,CAAA,aAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,WAAA;AAAA,UACL,kBAAA,EAAiB,UAAA;AAAA,UACjB,eAAA,EAAe,YAAA;AAAA,UACf,eAAA,EAAe,YAAA;AAAA,UACf,eAAA,EAAe,YAAA;AAAA,UACf,YAAA,EAAW,qBAAA;AAAA,UACX,eAAA,EAAc,mBAAA;AAAA,UACd,WAAA,EAAU,wCAAA;AAAA,UAEV,QAAA,EAAU,CAAA;AAAA,UACV,WAAA,EAAa,aAAA;AAAA,UACb,SAAA,EAAW,eAAA;AAAA,UACX,SAAA,EAAU;AAAA,SAAA;AAAA,wBAEVA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EAAkC;AAAA;AACnD,KACF;AAAA,EAEJ;AACF;AAEA,qBAAA,CAAsB,WAAA,GAAc,uBAAA;;ACzE7B,SAAS,YAAY,KAAA,EAAuC;AACjE,EAAA,MAAM,MAAM,oBAAA,EAAqB;AACjC,EAAA,MAAM,QAAA,GAAW,WAAW,yBAAyB,CAAA;AACrD,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,IAAI,GAAA,CAAI,oBAAoB,OAAO,IAAA;AAEnC,EAAA,MAAM,YAAA,GACJ,YAAY,IAAA,GACR;AAAA,IACE,GAAG,KAAA;AAAA,IACH,cAAA,EAAgB,QAAA,CAAS,cAAA,IAAkB,KAAA,CAAM,cAAA;AAAA,IACjD,kBAAA,EAAoB,QAAA,CAAS,kBAAA,IAAsB,KAAA,CAAM,kBAAA;AAAA,IACzD,eAAA,EAAiB,QAAA,CAAS,eAAA,IAAmB,KAAA,CAAM;AAAA,GACrD,GACA,KAAA;AAEN,EAAA,uBACEA,cAAA,CAAA,aAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,KAAK,GAAA,CAAI,UAAA;AAAA,MACT,MAAM,GAAA,CAAI,aAAA;AAAA,MACV,SAAS,GAAA,CAAI,YAAA;AAAA,MACb,eAAe,GAAA,CAAI,iBAAA;AAAA,MACnB,iBAAiB,GAAA,CAAI,mBAAA;AAAA,MACrB,cAAc,GAAA,CAAI,YAAA;AAAA,MAClB,cAAc,GAAA,CAAI,YAAA;AAAA,MAClB,cAAc,GAAA,CAAI,YAAA;AAAA,MAClB;AAAA;AAAA,GACF;AAEJ;AACA,WAAA,CAAY,WAAA,GAAc,wBAAA;;AC7BnB,SAAS,IAAA,CAAK,EAAE,QAAA,EAAU,SAAA,EAAU,EAAuD;AAChG,EAAA,MAAM,MAAM,oBAAA,EAAqB;AACjC,EAAA,MAAM,qBAAA,GAAwB,KAAK,qBAAA,IAAyB,KAAA;AAE5D,EAAA,uBACEA,cAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,KAAA;AAAA,QACA,qBAAA,IACE,gIAAA;AAAA,QACF;AAAA;AACF,KAAA;AAAA,IAEC;AAAA,GACH;AAEJ;AACA,IAAA,CAAK,WAAA,GAAc,iBAAA;;ACdnB,MAAM,yBAAyBA,cAAA,CAAM,UAAA;AAAA,EACnC,CAAC,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChD,IAAA,uBACEA,cAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,2BAAA;AAAA,QACV,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,QAC5B,SAAA,EAAW,EAAA;AAAA,UACT,uCAAA;AAAA,UACA,kLAAA;AAAA,UACA,wCAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG;AAAA,OAAA;AAAA,sBAEJA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EAA+C,WAAA,EAAU,mCAAA,EAAA,kBACtEA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,2CAAA,EAAA,EAA6C,QAAS,CAC9E;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,sBAAA,CAAuB,WAAA,GAAc,wBAAA;;AC5B9B,SAAS,YAAA,CAAa,EAAE,QAAA,EAAS,EAAmC;AACzE,EAAA,MAAM,MAAM,oBAAA,EAAqB;AACjC,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,EAAA,uBACEA,cAAA,CAAA,aAAA;AAAA,IAAC,sBAAA;AAAA,IAAA;AAAA,MACC,KAAK,GAAA,CAAI,eAAA;AAAA,MACT,MAAM,GAAA,CAAI,kBAAA;AAAA,MACV,SAAA,EAAU;AAAA,KAAA;AAAA,IAET;AAAA,GACH;AAEJ;AACA,YAAA,CAAa,WAAA,GAAc,yBAAA;;ACd3B,MAAM,UAAA,GAAa,IAAI,aAAA,EAAe;AAAA,EACpC,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC,CAAA;AAMM,MAAM,YAAY,sBACvBA,cAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAM,4BAAA,EAA6B,WAAU,4BAAA,EAAA,kBAChDA,cAAA,CAAA,aAAA,CAAC,8BACCA,cAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAO,IAAG,KAAA,EAAA,kBACTA,cAAA,CAAA,aAAA,CAAC,oBAAe,EAAA,EAAG,eAAA,EAAgB,cAAa,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,CAAA,+CAClE,eAAA,EAAA,EAAc,EAAA,EAAG,QAAO,IAAA,EAAK,QAAA,EAAS,QAAO,8CAAA,EAA+C,MAAA,EAAO,OAAM,CAAA,kBAC1GA,cAAA,CAAA,aAAA,CAAC,aAAQ,EAAA,EAAG,eAAA,EAAgB,KAAI,KAAA,EAAM,CACxC,CACF,CACF,CAAA;AAGF,MAAM,UAAA,GAAa,CAAC,EAAE,SAAA,EAAW,SAAQ,KAAuB;AAC9D,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,WAAW,EAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAA,kBACnDA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCACbA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,IAAA,EAAK,mBACpBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,IAAA,EAAK,mBACpBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,IAAA,EAAK,mBACpBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,IAAA,EAAK,CACtB,CACF,CAAA;AAEJ,CAAA;;AC/BA,MAAM,iBAAA,GAAoB,GAAA;AAC1B,MAAM,0BAA0B,iBAAA,GAAoB,EAAA;AACpD,MAAM,iBAAA,GAAoB,GAAA;AAC1B,MAAM,mBAAA,GAAsB,GAAA;AAW5B,SAAS,YAAA,CACP,UACA,IAAA,EAC+C;AAC/C,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,MAAM,GAAA,GAAMA,cAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AAC3C,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAkB;AAClD,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAA+B,cAAA,CAAe,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AAChG,IAAA,GAAA,CAAI,GAAG,IAAI,KAAA,IAAS,IAAA;AAAA,EACtB;AAEA,EAAA,OAAO,GAAA;AACT;AAIA,SAAS,cAAA,CAAe;AAAA,EACtB,QAAA;AAAA,EACA,kBAAA,GAAqB,KAAA;AAAA,EACrB,qBAAA,GAAwB,KAAA;AAAA,EACxB;AACF,CAAA,EAAwB;AAEtB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAA,CAAS,MAAM,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,UAAA,GAAa,GAAG,CAAA;AACjH,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,KAAK,CAAA;AAClE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAAA,CAAS,MAAO,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,UAAA,GAAa,CAAE,CAAA;AAExG,EAAA,MAAM,cAAA,GAAiB,OAAA;AAAA,IACrB,MACE,SAAA,GAAY,CAAA,GACR,IAAA,CAAK,IAAI,iBAAA,EAAmB,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,KAAK,KAAA,CAAM,SAAA,GAAY,IAAI,CAAC,CAAC,CAAA,GACrF,iBAAA;AAAA,IACN,CAAC,SAAS;AAAA,GACZ;AACA,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,cAAc,CAAA;AAE/D,EAAA,MAAM,UAAA,GAAa,OAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,eAAA,GAAkB,OAAoB,IAAI,CAAA;AAChD,EAAA,MAAM,gBAAA,GAAmB,OAA0B,IAAI,CAAA;AACvD,EAAA,MAAM,OAAA,GAAU,OAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,kBAAA,GAAqB,OAAO,aAAa,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,OAA+B,IAAI,CAAA;AACvD,EAAA,MAAM,QAAA,GAAW,cAAc,oBAAoB,CAAA;AACnD,EAAA,MAAM,aAAA,GAAgB,cAAc,qBAAqB,CAAA;AAGzD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,aAAA,CAAc,SAAS,CAAA,EAAG;AAC3C,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAAA,IACjC;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAAA,IACjC,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,KAAK,OAAA,CAAQ,OAAA;AACnB,IAAA,IAAI,CAAC,EAAA,EAAI;AAET,IAAA,MAAM,KAAK,IAAI,cAAA,CAAe,CAAC,CAAC,KAAK,CAAA,KAAM;AACzC,MAAA,YAAA,CAAa,KAAA,CAAM,YAAY,KAAK,CAAA;AAAA,IACtC,CAAC,CAAA;AACD,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AAEb,IAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,IACxB,CAAC,OAAA,KAA8B;AAC7B,MAAA,IAAI,aAAA,EAAe;AACnB,MAAA,IAAI,OAAA,KAAY,MAAA,EAAQ,qBAAA,CAAsB,KAAK,CAAA;AAAA,4BAC7B,KAAK,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAGA,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,iBAAA,CAAkB,MAAM,CAAA;AACxB,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,eAAA,CAAgB,cAAc,CAAA;AAC9B,IAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAAA,EAC5B,CAAA,EAAG,CAAC,iBAAA,EAAmB,cAAc,CAAC,CAAA;AAGtC,EAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,iBAAA,CAAkB,MAAM,CAAA;AACxB,IAAA,gBAAA,CAAiB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAGtB,EAAA,MAAM,gBAAA,GAAmB,YAAY,MAAM;AACzC,IAAA,iBAAA,CAAkB,OAAO,CAAA;AACzB,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAGtB,EAAA,MAAM,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAA,iBAAA,CAAkB,OAAO,CAAA;AACzB,IAAA,qBAAA,CAAsB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,EACvC,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAGtB,EAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,IACxB,CAAC,QAAA,KAA8B;AAC7B,MAAA,IAAI,WAAW,uBAAA,EAAyB;AACtC,QAAA,eAAA,CAAgB,cAAc,CAAA;AAC9B,QAAA,gBAAA,CAAiB,KAAK,CAAA;AAEtB,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,MAAO;AAEL,QAAA,eAAA,CAAgB,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,QAAQ,CAAC,CAAA;AAErD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAGA,EAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,CAAC,CAAA,KAAwB;AAC7D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,WAAA,CAAY,OAAA,GAAU,IAAI,eAAA,EAAgB;AAC1C,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,MAAA,GAAS,EAAA;AAC7B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,EAAA;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,CAAA,KAAkB;AACjB,MAAA,IAAI,CAAC,UAAA,EAAY;AACjB,MAAA,IAAI,iBAAA,CAAkB,CAAA,CAAE,OAAO,CAAA,EAAG;AAChC,QAAA,SAAA,EAAU;AAAA,MACZ;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,iBAAA,EAAmB,SAAS;AAAA,GAC3C;AAGA,EAAA,MAAM,gBAAgB,WAAA,CAAY,MAAM,WAAU,EAAG,CAAC,SAAS,CAAC,CAAA;AAGhE,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,CAAC,EAAA,EAAwB,IAAA,KAAkB;AACtE,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,IAAI,IAAA,EAAM,EAAA,CAAG,eAAA,CAAgB,OAAO,CAAA;AAAA,SAC/B,EAAA,CAAG,YAAA,CAAa,OAAA,EAAS,EAAE,CAAA;AAAA,EAClC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,UAAA,CAAW,SAAS,aAAa,CAAA;AAC1C,IAAA,QAAA,CAAS,eAAA,CAAgB,SAAS,kBAAkB,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,aAAA,EAAe,kBAAkB,CAAC,CAAA;AAGtC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,WAAA,CAAY,OAAA,EAAS;AAEzC,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,WAAA,CAAY,OAAA;AAC/B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,MAAA,GAAS,WAAA;AAC7B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,MAAA;AACjC,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,EAAa,eAAA,EAAiB,EAAE,QAAQ,CAAA;AAClE,IAAA,QAAA,CAAS,gBAAA,CAAiB,SAAA,EAAW,aAAA,EAAe,EAAE,QAAQ,CAAA;AAC9D,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,aAAA,EAAe,EAAE,QAAQ,CAAA;AAC5D,IAAA,QAAA,CAAS,UAAA,CAAW,SAAS,KAAK,CAAA;AAElC,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,CAAY,SAAS,KAAA,EAAM;AAC3B,MAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,MAAA,GAAS,EAAA;AAC7B,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,EAAA;AACjC,MAAA,QAAA,CAAS,UAAA,CAAW,SAAS,IAAI,CAAA;AAAA,IACnC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,MAAM,mBAAA,GAAsB,WAAA;AAAA,IAC1B,CAAC,CAAA,KAA2B;AAC1B,MAAA,MAAM,IAAA,GAAO,EAAA;AACb,MAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACzB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,iBAAA,CAAkB,eAAe,IAAI,CAAA;AAAA,MACvC,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc;AACjC,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,iBAAA,CAAkB,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,YAAA,GAAe,IAAI,CAAC,CAAA;AAAA,MACpE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAc,iBAAiB;AAAA,GAClC;AAEA,EAAA,MAAM,UAAU,kBAAA,GAAqB,CAAA,GAAI,aAAA,GAAiB,QAAA,GAAW,YAAY,YAAA,GAAgB,CAAA;AACjG,EAAA,MAAM,QAAA,GAAW,QAAA,GAAW,CAAA,GAAI,kBAAA,GAAqB,mBAAA,GAAsB,CAAA;AAG3E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,gBAAA,CAAiB,QAAA,GAAW,QAAQ,IAAI,CAAA;AAAA,EAC1C,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,kBAAA,CAAmB,OAAA,IAAW,CAAC,aAAA,EAAe;AAChD,MAAA,gBAAA,CAAiB,SAAS,KAAA,EAAM;AAAA,IAClC;AACA,IAAA,kBAAA,CAAmB,OAAA,GAAU,aAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,YAAY,iBAAA,GAAoB,cAAA;AACtC,EAAA,MAAM,YAAA,GAAe,cAAc,CAAA,GAAI,GAAA,GAAM,KAAK,KAAA,CAAA,CAAQ,YAAA,GAAe,cAAA,IAAkB,SAAA,GAAa,GAAG,CAAA;AAE3G,EAAA,MAAM,kBAAA,GAAqB,OAAA;AAAA,IACzB,OAAO;AAAA,MACL,aAAA;AAAA,MACA,kBAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAA;AAAA,MACA,WAAA;AAAA,MACA,oBAAoB,kBAAA,IAAsB,KAAA;AAAA,MAC1C,YAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA,EAAc,CAAA;AAAA,MACd,YAAA,EAAc,GAAA;AAAA,MACd;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,aAAA;AAAA,MACA,kBAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,kBAAA;AAAA,MACA,qBAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA;AACF,GACF;AAGA,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAU,cAAc,YAAA,EAAa,GAAI,aAAa,QAAA,EAAU;AAAA,IAChF,UAAUC,QAAU;AAAA,IACpB,cAAcC;AAAU,GACzB,CAAA;AACD,EAAA,MAAM,mBAAmB,cAAA,CAAe,QAAQ,CAAA,GAC3C,QAAA,CAAS,MAAyC,QAAA,GACnD,IAAA;AACJ,EAAA,MAAM,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAK,GAAI,YAAA,CAAa,oBAAoB,IAAA,EAAM;AAAA,IAC5E,QAAQC,MAAU;AAAA,IAClB,MAAMC;AAAU,GACjB,CAAA;AACD,EAAA,MAAM,eAAe,cAAA,CAAe,IAAI,CAAA,GAAK,IAAA,CAAK,MAAyC,QAAA,GAAW,IAAA;AACtG,EAAA,MAAM,EAAE,aAAa,WAAA,EAAa,IAAA,EAAM,MAAK,GAAI,YAAA,CAAa,gBAAgB,IAAA,EAAM;AAAA,IAClF,aAAaC,WAAU;AAAA,IACvB,MAAMC;AAAU,GACjB,CAAA;AAED,EAAA,MAAM,kBAAkB,YAAA,IAAgB,IAAA;AACxC,EAAA,MAAM,gBAAA,GACJ,kHAAA;AAGF,EAAA,oDACG,kBAAA,EAAA,EAAmB,KAAA,EAAO,kBAAA,EAAA,kBACzBN,cAAA,CAAA,aAAA,CAAC,eAAU,CAAA,kBACXA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,WAAU,CAAA,kBAC9BA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,eAAc,CAAA,kBAClCA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,sGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,mBAAA,EAAqB,kBAAkB,iCAAA,GAAoC,gBAAA;AAAA,QAC3E,CAAC,aAAuB,GAAG,eAAA,GAAkB,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAA,GAAO,KAAA;AAAA,QAC/D,CAAC,qBAA+B,GAAG,CAAA,EAAG,iBAAiB,CAAA,EAAA;AAAA;AACzD,KAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAA,EACZ,MAAA,kBAEDA,cAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,OAAA;AAAA,QACL,oBAAA,EAAoB,gBAAgB,MAAA,GAAS,QAAA;AAAA,QAC7C,0BAAA,EAA0B,qBAAqB,MAAA,GAAS,QAAA;AAAA,QACxD,SAAA,EAAW,EAAA;AAAA,UACT;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,mBAAA,EAAqB,CAAA,8BAAA,CAAA;AAAA,UACrB,CAAC,YAAsB,GAAG,CAAA,EAAG,OAAO,CAAA,EAAA;AAAA;AACtC,OAAA;AAAA,MAEC,kBAAA,mBAAqBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,OAAM,CAAA,GAAK,WAAA;AAAA,sBAChDA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,EAAE,SAAA,EAAW,CAAC,aAAA,IAAiB,kBAAA,EAAoB,CAAA,EAAA,EAC/F,qBAAA,mBACCA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,gBAAgB,CAAA,EAAA,kBAC/CA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAA,EAAoB,IAAK,CAC3C,CAAA,mBAEAA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,wGAAA;AAAA,YACA;AAAA;AACF,SAAA;AAAA,wBAEAA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,8CAA8C,CAAA,EAAA,EAAI,IAAK,CAC7E;AAAA,OACF,kBACAA,cAAA,CAAA,aAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAW,IAAA;AAAA,UACX,SAAA,EAAU;AAAA;AAAA,OAEd,CAEJ;AAAA,KAEJ,CAAA;AAAA,IAEC,kBAAkB,YAAA,GAAe;AAAA,GAEtC,CAAA;AAEJ;AAMA,SAAS,2BAAA,CAA4B,MAA2B,IAAA,EAAoC;AAClG,EAAA,OACE,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,QAAA,IACvB,KAAK,SAAA,KAAc,IAAA,CAAK,SAAA,IACxB,IAAA,CAAK,kBAAA,KAAuB,IAAA,CAAK,kBAAA,IACjC,IAAA,CAAK,0BAA0B,IAAA,CAAK,qBAAA;AAExC;AAEA,MAAM,kBAAA,GAAqBA,cAAA,CAAM,IAAA,CAAK,cAAA,EAAgB,2BAA2B,CAAA;AAOjF,SAAS,oBAAoB,KAAA,EAAwB;AACnD,EAAA,MAAM,EAAE,YAAA,EAAc,GAAG,WAAA,EAAY,GAAI,KAAA;AAEzC,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,uBAAoB,KAAA,EAAO,YAAA,EAAA,+CACzB,kBAAA,EAAA,EAAoB,GAAG,aAAa,CACvC,CAAA;AAEJ;AAWA,MAAM,UAAA,GAAiC,MAAA,CAAO,MAAA,CAAO,mBAAA,EAAqB;AAAA,EACxE,UAAUC,QAAU;AAAA,EACpB,MAAMG,IAAU;AAAA,EAChB,QAAQD,MAAU;AAAA,EAClB,aAAaE,WAAU;AAAA,EACvB,MAAMC,IAAU;AAAA,EAChB,cAAcJ;AAChB,CAAC;;;;"}
|
|
@@ -40,6 +40,9 @@ import './ui/button-group.js';
|
|
|
40
40
|
import './ui/calendar.js';
|
|
41
41
|
import './ui/icon.js';
|
|
42
42
|
import './ui/separator.js';
|
|
43
|
+
import '../logos/microsoft-teams-logo.js';
|
|
44
|
+
import '../logos/slack-logo.js';
|
|
45
|
+
import '../logos/microsoft-logo.js';
|
|
43
46
|
import { d as dark } from '../chunks/dark.Cl9Z44CU.js';
|
|
44
47
|
|
|
45
48
|
function AnswerDiagnosticsSection({ messageId }) {
|