@humain/ui 2.1.62 → 2.1.65

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.
Files changed (160) hide show
  1. package/dist/components/organisms/ai/AIToolCall/AIToolCall.d.ts +9 -3
  2. package/dist/components/organisms/ai/AIToolRun/index.d.ts +1 -1
  3. package/dist/components/organisms/ai/AIToolRun/validation.d.ts +24 -3
  4. package/dist/components/organisms/ai/_shared/format-ai-duration.d.ts +1 -0
  5. package/dist/components/organisms/ai/_shared/workflow-step-renderer.d.ts +1 -0
  6. package/dist/index.js +52 -52
  7. package/dist/index151.js +1 -1
  8. package/dist/index174.js +10 -333
  9. package/dist/index174.js.map +1 -1
  10. package/dist/index175.js +310 -137
  11. package/dist/index175.js.map +1 -1
  12. package/dist/index176.js +148 -174
  13. package/dist/index176.js.map +1 -1
  14. package/dist/index177.js +186 -78
  15. package/dist/index177.js.map +1 -1
  16. package/dist/index178.js +74 -124
  17. package/dist/index178.js.map +1 -1
  18. package/dist/index179.js +133 -1
  19. package/dist/index179.js.map +1 -0
  20. package/dist/index180.js +2 -201
  21. package/dist/index181.js +201 -0
  22. package/dist/{index180.js.map → index181.js.map} +1 -1
  23. package/dist/index183.js +130 -166
  24. package/dist/index183.js.map +1 -1
  25. package/dist/index184.js +195 -983
  26. package/dist/index184.js.map +1 -1
  27. package/dist/index185.js +1069 -369
  28. package/dist/index185.js.map +1 -1
  29. package/dist/index186.js +395 -197
  30. package/dist/index186.js.map +1 -1
  31. package/dist/index187.js +198 -243
  32. package/dist/index187.js.map +1 -1
  33. package/dist/index188.js +263 -3
  34. package/dist/index188.js.map +1 -1
  35. package/dist/index189.js +3 -209
  36. package/dist/index189.js.map +1 -1
  37. package/dist/index190.js +190 -777
  38. package/dist/index190.js.map +1 -1
  39. package/dist/index191.js +771 -252
  40. package/dist/index191.js.map +1 -1
  41. package/dist/index192.js +250 -65
  42. package/dist/index192.js.map +1 -1
  43. package/dist/index193.js +72 -523
  44. package/dist/index193.js.map +1 -1
  45. package/dist/index194.js +537 -144
  46. package/dist/index194.js.map +1 -1
  47. package/dist/index195.js +139 -720
  48. package/dist/index195.js.map +1 -1
  49. package/dist/index196.js +707 -167
  50. package/dist/index196.js.map +1 -1
  51. package/dist/index197.js +175 -151
  52. package/dist/index197.js.map +1 -1
  53. package/dist/index198.js +152 -487
  54. package/dist/index198.js.map +1 -1
  55. package/dist/index199.js +472 -225
  56. package/dist/index199.js.map +1 -1
  57. package/dist/index200.js +236 -260
  58. package/dist/index200.js.map +1 -1
  59. package/dist/index201.js +265 -215
  60. package/dist/index201.js.map +1 -1
  61. package/dist/index202.js +207 -307
  62. package/dist/index202.js.map +1 -1
  63. package/dist/index203.js +302 -135
  64. package/dist/index203.js.map +1 -1
  65. package/dist/index204.js +140 -271
  66. package/dist/index204.js.map +1 -1
  67. package/dist/index205.js +263 -253
  68. package/dist/index205.js.map +1 -1
  69. package/dist/index206.js +244 -137
  70. package/dist/index206.js.map +1 -1
  71. package/dist/index207.js +100 -238
  72. package/dist/index207.js.map +1 -1
  73. package/dist/index208.js +278 -74
  74. package/dist/index208.js.map +1 -1
  75. package/dist/index209.js +56 -97
  76. package/dist/index209.js.map +1 -1
  77. package/dist/index210.js +142 -47
  78. package/dist/index210.js.map +1 -1
  79. package/dist/index211.js +38 -84
  80. package/dist/index211.js.map +1 -1
  81. package/dist/index212.js +72 -252
  82. package/dist/index212.js.map +1 -1
  83. package/dist/index213.js +274 -26
  84. package/dist/index213.js.map +1 -1
  85. package/dist/index214.js +29 -94
  86. package/dist/index214.js.map +1 -1
  87. package/dist/index215.js +98 -25
  88. package/dist/index215.js.map +1 -1
  89. package/dist/index216.js +20 -565
  90. package/dist/index216.js.map +1 -1
  91. package/dist/index217.js +564 -17
  92. package/dist/index217.js.map +1 -1
  93. package/dist/index218.js +20 -23
  94. package/dist/index218.js.map +1 -1
  95. package/dist/index219.js +20 -95
  96. package/dist/index219.js.map +1 -1
  97. package/dist/index220.js +92 -88
  98. package/dist/index220.js.map +1 -1
  99. package/dist/index221.js +97 -29
  100. package/dist/index221.js.map +1 -1
  101. package/dist/index222.js +24 -470
  102. package/dist/index222.js.map +1 -1
  103. package/dist/index223.js +446 -196
  104. package/dist/index223.js.map +1 -1
  105. package/dist/index224.js +199 -729
  106. package/dist/index224.js.map +1 -1
  107. package/dist/index225.js +750 -61
  108. package/dist/index225.js.map +1 -1
  109. package/dist/index226.js +58 -181
  110. package/dist/index226.js.map +1 -1
  111. package/dist/index227.js +175 -259
  112. package/dist/index227.js.map +1 -1
  113. package/dist/index228.js +246 -172
  114. package/dist/index228.js.map +1 -1
  115. package/dist/index229.js +195 -32
  116. package/dist/index229.js.map +1 -1
  117. package/dist/index230.js +12 -40
  118. package/dist/index230.js.map +1 -1
  119. package/dist/index231.js +23 -26
  120. package/dist/index231.js.map +1 -1
  121. package/dist/index232.js +45 -22
  122. package/dist/index232.js.map +1 -1
  123. package/dist/index233.js +27 -48
  124. package/dist/index233.js.map +1 -1
  125. package/dist/index234.js +52 -26
  126. package/dist/index234.js.map +1 -1
  127. package/dist/index235.js +40 -225
  128. package/dist/index235.js.map +1 -1
  129. package/dist/index236.js +217 -39
  130. package/dist/index236.js.map +1 -1
  131. package/dist/index237.js +50 -0
  132. package/dist/index237.js.map +1 -0
  133. package/dist/styles.css +1 -1
  134. package/dist/wc/AIToolCall.js +218 -0
  135. package/dist/wc/AIToolCall.js.map +1 -0
  136. package/dist/wc/hf-ai-tool-call.js +34 -219
  137. package/dist/wc/hf-ai-tool-call.js.map +1 -1
  138. package/dist/wc/hf-ai-tool-run.js +673 -576
  139. package/dist/wc/hf-ai-tool-run.js.map +1 -1
  140. package/dist/wc/workflow-step-renderer.js +94 -86
  141. package/dist/wc/workflow-step-renderer.js.map +1 -1
  142. package/dist/wc-react/AIToolCall.js +218 -0
  143. package/dist/wc-react/AIToolCall.js.map +1 -0
  144. package/dist/wc-react/hf-ai-tool-call.js +32 -217
  145. package/dist/wc-react/hf-ai-tool-call.js.map +1 -1
  146. package/dist/wc-react/hf-ai-tool-run.js +698 -601
  147. package/dist/wc-react/hf-ai-tool-run.js.map +1 -1
  148. package/dist/wc-react/workflow-step-renderer.js +76 -68
  149. package/dist/wc-react/workflow-step-renderer.js.map +1 -1
  150. package/package.json +1 -1
  151. package/skills/humain-ui/SKILL.md +1 -1
  152. package/skills/humain-ui-wc/SKILL.md +1 -1
  153. package/skills/humain-ui-wc.skill +0 -0
  154. package/skills/humain-ui.skill +0 -0
  155. package/dist/index182.js +0 -143
  156. package/dist/index182.js.map +0 -1
  157. package/dist/wc/wrench.js +0 -10
  158. package/dist/wc/wrench.js.map +0 -1
  159. package/dist/wc-react/wrench.js +0 -10
  160. package/dist/wc-react/wrench.js.map +0 -1
package/dist/index227.js CHANGED
@@ -1,277 +1,193 @@
1
1
  "use client";
2
2
  import { cn } from "./index2.js";
3
- import { useControllableState } from "./index12.js";
4
- import { createSafeContext } from "./index21.js";
5
- import { Switch } from "./index42.js";
6
- import { Kbd } from "./index106.js";
7
- import { PopoverPopup, PopoverRoot, PopoverTrigger } from "./index211.js";
8
- import { cva } from "class-variance-authority";
9
- import { ChevronRight, LogOut } from "lucide-react";
3
+ import { Avatar, AvatarGroup } from "./index70.js";
4
+ import { BrandIcon } from "./index71.js";
5
+ import { PageBackground } from "./index226.js";
10
6
  import * as React from "react";
11
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
12
- //#region src/components/templates/NavAccountMenu/NavAccountMenu.tsx
13
- var [NavAccountMenuContext, useNavAccountMenuContext] = createSafeContext("NavAccountMenu");
14
- function NavAccountMenu({ type = "card", open: controlledOpen, defaultOpen = false, onOpenChange, children }) {
15
- const [open, handleOpenChange] = useControllableState({
16
- value: controlledOpen,
17
- defaultValue: defaultOpen,
18
- onChange: onOpenChange
19
- });
20
- const contextValue = React.useMemo(() => ({
21
- type,
22
- open,
23
- onOpenChange: handleOpenChange
24
- }), [
25
- type,
26
- open,
27
- handleOpenChange
28
- ]);
29
- return /* @__PURE__ */ jsx(NavAccountMenuContext.Provider, {
30
- value: contextValue,
31
- children: /* @__PURE__ */ jsx(PopoverRoot, {
32
- open,
33
- onOpenChange: handleOpenChange,
34
- children: /* @__PURE__ */ jsx("div", {
35
- "data-slot": "nav-account-menu",
36
- children
37
- })
38
- })
39
- });
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/components/templates/AuthPageLayout/AuthPageLayout.tsx
9
+ var DEFAULT_AVATARS = [
10
+ {
11
+ fallback: "HA",
12
+ alt: "HUMAIN account member"
13
+ },
14
+ {
15
+ fallback: "OS",
16
+ alt: "HUMAIN OS member"
17
+ },
18
+ {
19
+ fallback: "AI",
20
+ alt: "HUMAIN AI member"
21
+ }
22
+ ];
23
+ function isAsideConfig(aside) {
24
+ return typeof aside === "object" && aside !== null && !Array.isArray(aside) && !React.isValidElement(aside);
40
25
  }
41
- var triggerVariants = cva("flex items-center gap-4 w-full text-left cursor-pointer transition-colors duration-200 ease-smooth outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring motion-reduce:transition-none", {
42
- variants: { type: {
43
- card: "bg-surface-1 border border-border rounded-xl shadow-xs p-3 hover:bg-surface-2",
44
- simple: "border border-border px-2 py-3 hover:bg-surface-2 rounded-lg"
45
- } },
46
- defaultVariants: { type: "card" }
47
- });
48
- function NavAccountMenuTrigger({ avatar, name, email, badge, showLogoutButton, onLogout, compact = false, className }) {
49
- const { type, open } = useNavAccountMenuContext();
50
- const handleLogoutClick = (e) => {
51
- e.stopPropagation();
52
- onLogout?.();
53
- };
54
- const avatarContent = avatar ? /* @__PURE__ */ jsx("div", {
55
- className: "shrink-0",
56
- children: avatar
57
- }) : null;
58
- const accountDetails = !compact ? /* @__PURE__ */ jsxs("div", {
59
- className: "flex min-w-0 flex-1 flex-col",
60
- children: [/* @__PURE__ */ jsxs("div", {
61
- className: "flex min-w-0 items-center gap-2",
62
- children: [/* @__PURE__ */ jsx("span", {
63
- className: "min-w-0 truncate text-sm font-semibold text-foreground",
64
- children: name
65
- }), badge && /* @__PURE__ */ jsx("span", {
66
- className: "shrink-0",
67
- children: badge
68
- })]
69
- }), email && /* @__PURE__ */ jsx("span", {
70
- className: "truncate text-sm text-muted-foreground",
71
- children: email
72
- })]
73
- }) : null;
74
- if (type === "simple" && showLogoutButton && !compact) return /* @__PURE__ */ jsxs("div", {
75
- "data-slot": "nav-account-menu-trigger",
76
- className: cn(triggerVariants({ type }), "group/trigger", className),
77
- children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
78
- render: /* @__PURE__ */ jsx("button", {
79
- type: "button",
80
- "aria-haspopup": "true",
81
- className: "flex min-w-0 flex-1 items-center gap-4 text-left outline-none"
82
- }),
83
- children: [avatarContent, accountDetails]
84
- }), /* @__PURE__ */ jsx("button", {
85
- type: "button",
86
- onClick: handleLogoutClick,
87
- className: "shrink-0 rounded-md p-1.5 text-text-quaternary transition-colors duration-200 ease-smooth hover:bg-muted hover:text-secondary-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring motion-reduce:transition-none",
88
- "aria-label": "Sign out",
89
- children: /* @__PURE__ */ jsx(LogOut, { className: "size-5" })
90
- })]
26
+ function renderActionElement(action, className) {
27
+ if (action.render) return React.cloneElement(action.render, {
28
+ className: cn(action.render.props.className, className),
29
+ onClick: action.onClick ?? action.render.props.onClick,
30
+ children: action.render.props.children ?? action.label
91
31
  });
92
- return /* @__PURE__ */ jsxs(PopoverTrigger, {
93
- render: /* @__PURE__ */ jsx("button", {
94
- type: "button",
95
- "data-slot": "nav-account-menu-trigger",
96
- "aria-haspopup": "true",
97
- "aria-label": compact ? `${name} account menu` : void 0,
98
- className: cn(triggerVariants({ type }), "group/trigger", compact ? "w-auto justify-center" : "max-w-[280px]", className)
99
- }),
100
- children: [avatarContent, !compact && /* @__PURE__ */ jsxs(Fragment, { children: [accountDetails, /* @__PURE__ */ jsx(ChevronRight, { className: cn("size-4 shrink-0 text-muted-foreground transition-transform duration-200 ease-smooth motion-reduce:transition-none", open ? "rotate-180" : "rtl:rotate-180") })] })]
32
+ if (action.href) return /* @__PURE__ */ jsx("a", {
33
+ className,
34
+ href: action.href,
35
+ onClick: action.onClick,
36
+ children: action.label
101
37
  });
102
- }
103
- function NavAccountMenuContent({ side = "right", align = "end", sideOffset = 8, children, className }) {
104
- return /* @__PURE__ */ jsx(PopoverPopup, {
105
- side,
106
- align,
107
- sideOffset,
108
- "aria-label": "Account menu",
109
- "data-slot": "nav-account-menu-content",
110
- className: cn("w-[300px] max-w-[calc(100vw-2rem)] p-0 gap-0 bg-popover border border-border rounded-[14px] overflow-hidden", "shadow-[0px_12px_16px_-4px_color-mix(in_srgb,var(--foreground)_8%,transparent),0px_4px_6px_-2px_color-mix(in_srgb,var(--foreground)_3%,transparent),0px_2px_2px_-1px_color-mix(in_srgb,var(--foreground)_4%,transparent)]", "data-open:animate-in data-closed:animate-out", "data-closed:fade-out-0 data-open:fade-in-0", "data-closed:zoom-out-95 data-open:zoom-in-95", "data-[side=bottom]:slide-in-from-top-2", "data-[side=left]:slide-in-from-right-2", "data-[side=right]:slide-in-from-left-2", "data-[side=top]:slide-in-from-bottom-2", "duration-200 motion-reduce:animate-none", className),
111
- children: /* @__PURE__ */ jsx("div", {
112
- className: "flex flex-col py-2",
113
- role: "menu",
114
- "aria-label": "Account menu",
115
- children
116
- })
38
+ return /* @__PURE__ */ jsx("button", {
39
+ className,
40
+ type: "button",
41
+ onClick: action.onClick,
42
+ children: action.label
117
43
  });
118
44
  }
119
- function NavAccountMenuHeader({ title, subtitle, className }) {
45
+ function AuthAsidePanel({ title, description, cardTitle, cardDescription, icon, avatars, avatarOverflowCount }) {
46
+ const resolvedAvatars = avatars ?? DEFAULT_AVATARS;
47
+ const defaultOverflowCount = avatars ? 0 : 3695;
48
+ const visibleAvatars = resolvedAvatars.slice(0, 3);
49
+ const overflowAvatarCount = Math.max(0, resolvedAvatars.length - visibleAvatars.length) + Math.max(0, avatarOverflowCount ?? defaultOverflowCount);
120
50
  return /* @__PURE__ */ jsxs("div", {
121
- "data-slot": "nav-account-menu-header",
122
- className: cn("px-6 pb-3 delight-fade-in", className),
123
- children: [/* @__PURE__ */ jsx("p", {
124
- className: "text-base font-semibold text-foreground",
125
- children: title
126
- }), subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx("p", {
127
- className: "mt-2 text-sm text-muted-foreground",
128
- children: subtitle
129
- }) : /* @__PURE__ */ jsx("div", {
130
- className: "mt-2",
131
- children: subtitle
132
- }))]
133
- });
134
- }
135
- function NavAccountMenuSection({ label, bordered = false, children, className }) {
136
- return /* @__PURE__ */ jsxs("section", {
137
- "data-slot": "nav-account-menu-section",
138
- "aria-label": label,
139
- className: cn("flex flex-col gap-1 py-1.5", bordered && "border-t border-border", className),
140
- children: [label && /* @__PURE__ */ jsx("div", {
141
- className: "px-3 pt-1.5 pb-1",
142
- children: /* @__PURE__ */ jsx("span", {
143
- className: "text-xs font-semibold text-muted-foreground",
144
- children: label
51
+ "data-slot": "auth-page-aside-panel",
52
+ className: "relative flex min-h-full w-full flex-col overflow-hidden rounded-xl bg-primary p-8 text-primary-foreground",
53
+ children: [
54
+ /* @__PURE__ */ jsx(BrandIcon, {
55
+ "aria-hidden": true,
56
+ className: "-start-16 top-1/3 absolute size-72 -rotate-12 text-primary-foreground/10",
57
+ icon: "mark",
58
+ size: "2xl"
59
+ }),
60
+ /* @__PURE__ */ jsxs("div", {
61
+ className: "relative z-10 flex max-w-xl flex-col gap-6",
62
+ children: [title && /* @__PURE__ */ jsx("h2", {
63
+ className: "text-display-md font-bold leading-tight text-primary-foreground lg:text-display-lg",
64
+ children: title
65
+ }), description && /* @__PURE__ */ jsx("p", {
66
+ className: "text-md leading-normal text-primary-foreground lg:text-xl",
67
+ children: description
68
+ })]
69
+ }),
70
+ (cardTitle || cardDescription) && /* @__PURE__ */ jsxs("div", {
71
+ "data-slot": "auth-page-aside-card",
72
+ className: "relative z-10 mt-auto flex min-h-[248px] flex-col overflow-visible rounded-2xl bg-card px-10 py-8 text-card-foreground",
73
+ children: [
74
+ /* @__PURE__ */ jsx("svg", {
75
+ "aria-hidden": true,
76
+ "data-slot": "auth-page-aside-notch",
77
+ className: "pointer-events-none absolute top-0 end-0 z-0 h-[94.5px] w-[95px] overflow-visible text-primary",
78
+ focusable: "false",
79
+ preserveAspectRatio: "none",
80
+ viewBox: "0 0 95 94.5",
81
+ children: /* @__PURE__ */ jsx("path", {
82
+ d: "M0 0H95V94.5C95 81.2452 84.2548 70.5 71 70.5H48C34.7452 70.5 24 59.7548 24 46.5V24C24 10.7452 13.2548 0 0 0Z",
83
+ fill: "currentColor"
84
+ })
85
+ }),
86
+ /* @__PURE__ */ jsx("div", {
87
+ "data-slot": "auth-page-aside-icon",
88
+ className: "absolute end-1 top-1 z-20 flex size-[60px] items-center justify-center rounded-[12px] bg-card text-primary",
89
+ children: icon ?? /* @__PURE__ */ jsx(BrandIcon, {
90
+ "aria-hidden": true,
91
+ className: "text-[40px]",
92
+ "data-slot": "auth-page-aside-symbol",
93
+ icon: "symbol",
94
+ size: "fluid"
95
+ })
96
+ }),
97
+ /* @__PURE__ */ jsxs("div", {
98
+ className: "relative z-10 flex flex-col gap-6 pe-16",
99
+ children: [cardTitle && /* @__PURE__ */ jsx("h3", {
100
+ className: "text-display-sm font-bold leading-tight text-card-foreground",
101
+ children: cardTitle
102
+ }), cardDescription && /* @__PURE__ */ jsx("p", {
103
+ className: "text-lg leading-normal text-card-foreground",
104
+ children: cardDescription
105
+ })]
106
+ }),
107
+ (visibleAvatars.length > 0 || overflowAvatarCount > 0) && /* @__PURE__ */ jsx("div", {
108
+ className: "relative z-10 mt-auto flex justify-end pt-5",
109
+ children: /* @__PURE__ */ jsxs(AvatarGroup, {
110
+ size: "sm",
111
+ children: [visibleAvatars.map((avatar, index) => /* @__PURE__ */ jsx(Avatar, {
112
+ alt: avatar.alt,
113
+ fallback: avatar.fallback,
114
+ src: avatar.src
115
+ }, `${avatar.fallback ?? avatar.alt ?? "avatar"}-${index}`)), overflowAvatarCount > 0 && /* @__PURE__ */ jsx("div", {
116
+ role: "img",
117
+ "aria-label": `${overflowAvatarCount} more account members`,
118
+ className: "relative flex size-8 shrink-0 items-center justify-center rounded-full bg-[color-mix(in_srgb,var(--background)_97%,var(--foreground)_3%)]",
119
+ children: /* @__PURE__ */ jsxs("span", {
120
+ "aria-hidden": "true",
121
+ className: "font-normal text-foreground text-xs leading-4",
122
+ children: ["+", overflowAvatarCount]
123
+ })
124
+ })]
125
+ })
126
+ })
127
+ ]
145
128
  })
146
- }), children]
147
- });
148
- }
149
- function NavAccountMenuItem({ icon, shortcut, destructive = false, disabled = false, onSelect, render, children, className }) {
150
- const { onOpenChange } = useNavAccountMenuContext();
151
- const handleClick = () => {
152
- if (disabled) return;
153
- onSelect?.();
154
- onOpenChange(false);
155
- };
156
- const content = /* @__PURE__ */ jsxs("div", {
157
- className: "flex flex-1 gap-2 items-center overflow-hidden p-2 rounded-md transition-[background-color] duration-200 ease-smooth delight-selection-press motion-reduce:transition-none",
158
- children: [/* @__PURE__ */ jsxs("div", {
159
- className: "flex flex-1 gap-2 items-center min-w-0",
160
- children: [icon && /* @__PURE__ */ jsx("span", {
161
- className: cn("shrink-0 [&>svg]:size-4 transition-transform duration-200 ease-smooth group-hover/menuitem:translate-x-0.5 motion-reduce:transition-none", destructive ? "text-destructive" : "text-foreground"),
162
- children: icon
163
- }), /* @__PURE__ */ jsx("span", {
164
- className: cn("flex-1 text-sm truncate", destructive ? "text-destructive" : "text-secondary-foreground"),
165
- children
166
- })]
167
- }), shortcut && /* @__PURE__ */ jsx(Kbd, {
168
- variant: "outline",
169
- size: "xs",
170
- className: "shrink-0",
171
- children: shortcut
172
- })]
173
- });
174
- const baseClassName = cn("group/menuitem flex items-center px-1.5 py-0 w-full text-left cursor-pointer outline-none", "hover:[&>div]:bg-muted focus-visible:[&>div]:bg-muted", "focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring", disabled && "pointer-events-none opacity-50", className);
175
- if (render) return render({
176
- className: baseClassName,
177
- onClick: handleClick,
178
- children: content
179
- });
180
- return /* @__PURE__ */ jsx("button", {
181
- type: "button",
182
- role: "menuitem",
183
- "data-slot": "nav-account-menu-item",
184
- className: baseClassName,
185
- onClick: handleClick,
186
- disabled,
187
- "aria-disabled": disabled || void 0,
188
- children: content
129
+ ]
189
130
  });
190
131
  }
191
- function NavAccountMenuAccount({ avatar, name, email, selected = false, onSelect, className }) {
192
- return /* @__PURE__ */ jsx("div", {
193
- "data-slot": "nav-account-menu-account",
194
- className: cn("flex items-center px-1.5 py-0 w-full", className),
195
- children: /* @__PURE__ */ jsxs("button", {
196
- type: "button",
197
- role: "menuitemradio",
198
- "aria-checked": selected,
199
- "aria-label": `Switch to ${name} (${email})`,
200
- className: cn("relative flex flex-1 gap-2 items-center overflow-hidden px-2 py-1.5 rounded-md cursor-pointer outline-none", "hover:bg-muted focus-visible:bg-muted", "transition-colors duration-200 ease-smooth motion-reduce:transition-none", "focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring", "text-left", selected && "bg-surface-2"),
201
- onClick: onSelect,
202
- children: [
203
- avatar && /* @__PURE__ */ jsx("div", {
204
- className: "shrink-0",
205
- children: avatar
206
- }),
207
- /* @__PURE__ */ jsxs("div", {
208
- className: "flex flex-col min-w-0 flex-1",
209
- children: [/* @__PURE__ */ jsx("span", {
210
- className: "text-sm font-semibold text-foreground truncate",
211
- children: name
212
- }), /* @__PURE__ */ jsx("span", {
213
- className: "text-sm text-muted-foreground truncate",
214
- children: email
215
- })]
216
- }),
217
- /* @__PURE__ */ jsx("div", {
218
- "aria-hidden": "true",
219
- className: cn("size-4 rounded-full border-2 shrink-0 flex items-center justify-center transition-colors duration-200 ease-smooth motion-reduce:transition-none", selected ? "bg-primary border-primary" : "border-border bg-transparent"),
220
- children: selected && /* @__PURE__ */ jsx("div", { className: "size-1.5 rounded-full bg-primary-foreground delight-check-bounce" })
132
+ function AuthPageLayout({ logo, title, description, aside, showAside = true, showAsideOnMobile = false, formMaxWidthClassName = "max-w-[520px]", formClassName, asideClassName, backgroundPattern = "none", className, children, ...props }) {
133
+ const shouldRenderAside = showAside && aside != null;
134
+ const stackAsideOnMobile = shouldRenderAside && showAsideOnMobile;
135
+ return /* @__PURE__ */ jsxs("main", {
136
+ ...props,
137
+ "data-slot": "auth-page-layout",
138
+ className: cn("relative isolate flex min-h-screen overflow-hidden bg-surface-1 text-foreground", stackAsideOnMobile ? "flex-col lg:flex-row" : "flex-row", className),
139
+ children: [
140
+ backgroundPattern !== "none" && /* @__PURE__ */ jsx(PageBackground, {
141
+ pattern: backgroundPattern,
142
+ offset: "icon-center",
143
+ className: "-z-10 opacity-70"
144
+ }),
145
+ /* @__PURE__ */ jsx("section", {
146
+ "aria-label": "Authentication form",
147
+ "data-slot": "auth-page-form-pane",
148
+ "data-testid": "auth-page-form-pane",
149
+ className: cn("flex min-w-0 items-center justify-center px-6 py-12 sm:px-8 lg:min-h-screen lg:py-24", shouldRenderAside ? "flex-1 lg:w-1/2 lg:flex-none" : "flex-1", stackAsideOnMobile ? "min-h-[50vh]" : "min-h-screen"),
150
+ children: /* @__PURE__ */ jsxs("div", {
151
+ className: cn("flex w-full min-w-0 flex-col gap-6", formMaxWidthClassName, formClassName),
152
+ children: [
153
+ /* @__PURE__ */ jsx("div", {
154
+ "data-slot": "auth-page-logo",
155
+ className: "flex h-8 items-center px-6 text-foreground",
156
+ children: logo ?? /* @__PURE__ */ jsx(BrandIcon, {
157
+ icon: "mark",
158
+ size: "lg"
159
+ })
160
+ }),
161
+ (title || description) && /* @__PURE__ */ jsxs("header", {
162
+ className: "flex flex-col gap-2 px-6",
163
+ children: [title && /* @__PURE__ */ jsx("h1", {
164
+ className: "text-display-xs font-semibold leading-tight text-foreground",
165
+ children: title
166
+ }), description && /* @__PURE__ */ jsx("p", {
167
+ className: "text-md leading-normal text-secondary-foreground",
168
+ children: description
169
+ })]
170
+ }),
171
+ /* @__PURE__ */ jsx("div", {
172
+ "data-slot": "auth-page-form-content",
173
+ className: "px-6",
174
+ children
175
+ })
176
+ ]
221
177
  })
222
- ]
223
- })
224
- });
225
- }
226
- function NavAccountMenuSeparator({ className }) {
227
- return /* @__PURE__ */ jsx("hr", {
228
- "data-slot": "nav-account-menu-separator",
229
- className: cn("h-px border-0 bg-border mx-5", className)
230
- });
231
- }
232
- function NavAccountMenuFooter({ children, className }) {
233
- return /* @__PURE__ */ jsx("div", {
234
- "data-slot": "nav-account-menu-footer",
235
- className: cn("flex items-center justify-center px-5 pt-4", className),
236
- children
237
- });
238
- }
239
- function NavAccountMenuThemeSwitch({ variant = "theme-gradient", size = "sm", checked, onCheckedChange, label, className }) {
240
- const switchId = React.useId();
241
- const labelId = label ? `${switchId}-label` : void 0;
242
- return /* @__PURE__ */ jsx("div", {
243
- "data-slot": "nav-account-menu-theme-switch",
244
- className: cn("flex items-center px-1.5 py-0", className),
245
- children: /* @__PURE__ */ jsxs("div", {
246
- className: "flex items-center gap-2.5 p-2",
247
- children: [/* @__PURE__ */ jsx(Switch, {
248
- id: switchId,
249
- variant,
250
- size,
251
- checked,
252
- onCheckedChange,
253
- "aria-labelledby": labelId,
254
- "aria-label": label ? void 0 : "Theme selector"
255
- }), label && /* @__PURE__ */ jsx("label", {
256
- htmlFor: switchId,
257
- id: labelId,
258
- className: "cursor-pointer text-sm text-secondary-foreground",
259
- children: label
260
- })]
261
- })
178
+ }),
179
+ shouldRenderAside && /* @__PURE__ */ jsx("section", {
180
+ "aria-label": "Authentication context",
181
+ "data-slot": "auth-page-aside-pane",
182
+ "data-testid": "auth-page-aside-pane",
183
+ className: cn("min-w-0 flex-1 bg-muted p-5 lg:min-h-screen", "lg:w-1/2 lg:flex-none", stackAsideOnMobile ? "min-h-[50vh]" : "min-h-screen", showAsideOnMobile ? "flex" : "hidden lg:flex", asideClassName),
184
+ children: isAsideConfig(aside) ? /* @__PURE__ */ jsx(AuthAsidePanel, { ...aside }) : aside
185
+ })
186
+ ]
262
187
  });
263
188
  }
264
- NavAccountMenu.displayName = "NavAccountMenu";
265
- NavAccountMenuTrigger.displayName = "NavAccountMenuTrigger";
266
- NavAccountMenuContent.displayName = "NavAccountMenuContent";
267
- NavAccountMenuHeader.displayName = "NavAccountMenuHeader";
268
- NavAccountMenuSection.displayName = "NavAccountMenuSection";
269
- NavAccountMenuItem.displayName = "NavAccountMenuItem";
270
- NavAccountMenuAccount.displayName = "NavAccountMenuAccount";
271
- NavAccountMenuSeparator.displayName = "NavAccountMenuSeparator";
272
- NavAccountMenuFooter.displayName = "NavAccountMenuFooter";
273
- NavAccountMenuThemeSwitch.displayName = "NavAccountMenuThemeSwitch";
189
+ AuthPageLayout.displayName = "AuthPageLayout";
274
190
  //#endregion
275
- export { NavAccountMenu, NavAccountMenuAccount, NavAccountMenuContent, NavAccountMenuFooter, NavAccountMenuHeader, NavAccountMenuItem, NavAccountMenuSection, NavAccountMenuSeparator, NavAccountMenuThemeSwitch, NavAccountMenuTrigger, triggerVariants as navAccountMenuTriggerVariants };
191
+ export { AuthAsidePanel, AuthPageLayout, renderActionElement };
276
192
 
277
193
  //# sourceMappingURL=index227.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index227.js","names":[],"sources":["../src/components/templates/NavAccountMenu/NavAccountMenu.tsx"],"sourcesContent":["'use client';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ChevronRight, LogOut } from 'lucide-react';\nimport * as React from 'react';\nimport { Switch } from '@/components/atoms/forms/Switch/Switch';\nimport { Kbd } from '@/components/molecules/data/Kbd';\nimport {\n PopoverRoot as PopoverBase,\n PopoverPopup as PopoverContentBase,\n PopoverTrigger as PopoverTriggerBase,\n} from '@/components/organisms/overlays/Popover';\nimport { useControllableState } from '@/hooks/use-controllable-state';\nimport { createSafeContext } from '@/lib/create-safe-context';\nimport { cn } from '@/lib/utils';\n\n// ============================================\n// Context for NavAccountMenu\n// ============================================\n\ninterface NavAccountMenuContextValue {\n type: 'card' | 'simple';\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nconst [NavAccountMenuContext, useNavAccountMenuContext] =\n createSafeContext<NavAccountMenuContextValue>('NavAccountMenu');\n\n// ============================================\n// NavAccountMenu (Root)\n// ============================================\n\nexport interface NavAccountMenuProps {\n /** Trigger variant style */\n type?: 'card' | 'simple';\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Initial open state for uncontrolled mode */\n defaultOpen?: boolean;\n /** Children (trigger + content) */\n children: React.ReactNode;\n}\n\nfunction NavAccountMenu({\n type = 'card',\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n children,\n}: NavAccountMenuProps) {\n const [open, handleOpenChange] = useControllableState({\n value: controlledOpen,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const contextValue = React.useMemo(\n () => ({\n type,\n open,\n onOpenChange: handleOpenChange,\n }),\n [type, open, handleOpenChange],\n );\n\n return (\n <NavAccountMenuContext.Provider value={contextValue}>\n <PopoverBase open={open} onOpenChange={handleOpenChange}>\n <div data-slot=\"nav-account-menu\">{children}</div>\n </PopoverBase>\n </NavAccountMenuContext.Provider>\n );\n}\n\n// ============================================\n// NavAccountMenuTrigger\n// ============================================\n\nconst triggerVariants = cva(\n 'flex items-center gap-4 w-full text-left cursor-pointer transition-colors duration-200 ease-smooth outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring motion-reduce:transition-none',\n {\n variants: {\n type: {\n card: 'bg-surface-1 border border-border rounded-xl shadow-xs p-3 hover:bg-surface-2',\n simple: 'border border-border px-2 py-3 hover:bg-surface-2 rounded-lg',\n },\n },\n defaultVariants: {\n type: 'card',\n },\n },\n);\n\nexport interface NavAccountMenuTriggerProps\n extends VariantProps<typeof triggerVariants> {\n /** Avatar element (use Avatar component) */\n avatar?: React.ReactNode;\n /** User display name */\n name: string;\n /** User email address */\n email?: string;\n /** Optional badge after name (e.g., \"External\" tag) */\n badge?: React.ReactNode;\n /** Show logout button instead of chevron (for 'simple' type) */\n showLogoutButton?: boolean;\n /** Logout callback for simple variant */\n onLogout?: () => void;\n /** Show only avatar without name/email - useful for collapsed sidebar */\n compact?: boolean;\n /** Additional className */\n className?: string;\n}\n\nfunction NavAccountMenuTrigger({\n avatar,\n name,\n email,\n badge,\n showLogoutButton,\n onLogout,\n compact = false,\n className,\n}: NavAccountMenuTriggerProps) {\n const { type, open } = useNavAccountMenuContext();\n\n const handleLogoutClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onLogout?.();\n };\n\n const avatarContent = avatar ? (\n <div className=\"shrink-0\">{avatar}</div>\n ) : null;\n const accountDetails = !compact ? (\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {name}\n </span>\n {badge && <span className=\"shrink-0\">{badge}</span>}\n </div>\n {email && (\n <span className=\"truncate text-sm text-muted-foreground\">{email}</span>\n )}\n </div>\n ) : null;\n\n if (type === 'simple' && showLogoutButton && !compact) {\n return (\n <div\n data-slot=\"nav-account-menu-trigger\"\n className={cn(triggerVariants({ type }), 'group/trigger', className)}\n >\n <PopoverTriggerBase\n render={\n <button\n type=\"button\"\n aria-haspopup=\"true\"\n className=\"flex min-w-0 flex-1 items-center gap-4 text-left outline-none\"\n />\n }\n >\n {avatarContent}\n {accountDetails}\n </PopoverTriggerBase>\n <button\n type=\"button\"\n onClick={handleLogoutClick}\n className=\"shrink-0 rounded-md p-1.5 text-text-quaternary transition-colors duration-200 ease-smooth hover:bg-muted hover:text-secondary-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring motion-reduce:transition-none\"\n aria-label=\"Sign out\"\n >\n <LogOut className=\"size-5\" />\n </button>\n </div>\n );\n }\n\n return (\n <PopoverTriggerBase\n render={\n <button\n type=\"button\"\n data-slot=\"nav-account-menu-trigger\"\n aria-haspopup=\"true\"\n aria-label={compact ? `${name} account menu` : undefined}\n className={cn(\n triggerVariants({ type }),\n 'group/trigger',\n compact ? 'w-auto justify-center' : 'max-w-[280px]',\n className,\n )}\n />\n }\n >\n {avatarContent}\n {!compact && (\n <>\n {accountDetails}\n <ChevronRight\n className={cn(\n 'size-4 shrink-0 text-muted-foreground transition-transform duration-200 ease-smooth motion-reduce:transition-none',\n open ? 'rotate-180' : 'rtl:rotate-180',\n )}\n />\n </>\n )}\n </PopoverTriggerBase>\n );\n}\n\n// ============================================\n// NavAccountMenuContent\n// ============================================\n\nexport interface NavAccountMenuContentProps {\n /** Popover side positioning */\n side?: 'top' | 'right' | 'bottom' | 'left';\n /** Popover alignment */\n align?: 'start' | 'center' | 'end';\n /** Side offset */\n sideOffset?: number;\n /** Children */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\nfunction NavAccountMenuContent({\n side = 'right',\n align = 'end',\n sideOffset = 8,\n children,\n className,\n}: NavAccountMenuContentProps) {\n return (\n <PopoverContentBase\n side={side}\n align={align}\n sideOffset={sideOffset}\n aria-label=\"Account menu\"\n data-slot=\"nav-account-menu-content\"\n className={cn(\n 'w-[300px] max-w-[calc(100vw-2rem)] p-0 gap-0 bg-popover border border-border rounded-[14px] overflow-hidden',\n 'shadow-[0px_12px_16px_-4px_color-mix(in_srgb,var(--foreground)_8%,transparent),0px_4px_6px_-2px_color-mix(in_srgb,var(--foreground)_3%,transparent),0px_2px_2px_-1px_color-mix(in_srgb,var(--foreground)_4%,transparent)]',\n 'data-open:animate-in data-closed:animate-out',\n 'data-closed:fade-out-0 data-open:fade-in-0',\n 'data-closed:zoom-out-95 data-open:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n 'duration-200 motion-reduce:animate-none',\n className,\n )}\n >\n <div className=\"flex flex-col py-2\" role=\"menu\" aria-label=\"Account menu\">\n {children}\n </div>\n </PopoverContentBase>\n );\n}\n\n// ============================================\n// NavAccountMenuHeader\n// ============================================\n\nexport interface NavAccountMenuHeaderProps {\n /** Header title (e.g. \"Profile\") */\n title: string;\n /** Subtitle text or custom React node (e.g. \"Last login 22 May, 2026 11:30pm\") */\n subtitle?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\nfunction NavAccountMenuHeader({\n title,\n subtitle,\n className,\n}: NavAccountMenuHeaderProps) {\n return (\n <div\n data-slot=\"nav-account-menu-header\"\n className={cn('px-6 pb-3 delight-fade-in', className)}\n >\n <p className=\"text-base font-semibold text-foreground\">{title}</p>\n {subtitle &&\n (typeof subtitle === 'string' ? (\n <p className=\"mt-2 text-sm text-muted-foreground\">{subtitle}</p>\n ) : (\n <div className=\"mt-2\">{subtitle}</div>\n ))}\n </div>\n );\n}\n\n// ============================================\n// NavAccountMenuSection\n// ============================================\n\nexport interface NavAccountMenuSectionProps {\n /** Optional section header label */\n label?: string;\n /** Show top border separator between sections */\n bordered?: boolean;\n /** Section content */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\nfunction NavAccountMenuSection({\n label,\n bordered = false,\n children,\n className,\n}: NavAccountMenuSectionProps) {\n return (\n <section\n data-slot=\"nav-account-menu-section\"\n aria-label={label}\n className={cn(\n 'flex flex-col gap-1 py-1.5',\n bordered && 'border-t border-border',\n className,\n )}\n >\n {label && (\n <div className=\"px-3 pt-1.5 pb-1\">\n <span className=\"text-xs font-semibold text-muted-foreground\">\n {label}\n </span>\n </div>\n )}\n {children}\n </section>\n );\n}\n\n// ============================================\n// NavAccountMenuItem\n// ============================================\n\n/**\n * Props passed to the render function for custom menu item rendering.\n */\nexport interface NavAccountMenuItemRenderProps {\n /** Combined className for styling */\n className: string;\n /** Click handler that closes menu and triggers onSelect */\n onClick: () => void;\n /** Menu item content (icon, label, shortcut) */\n children: React.ReactNode;\n}\n\n/**\n * Render prop type for polymorphic rendering.\n * Accepts a function that receives props and returns an element.\n */\ntype NavAccountMenuItemRenderFn = (\n props: NavAccountMenuItemRenderProps,\n) => React.ReactElement;\n\nexport interface NavAccountMenuItemProps {\n /** Left icon (20px) */\n icon?: React.ReactNode;\n /** Keyboard shortcut display */\n shortcut?: string;\n /** Destructive styling (red) */\n destructive?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Selection callback */\n onSelect?: () => void;\n /**\n * Render prop for polymorphic rendering.\n * Use this to render the menu item as a different element (e.g., link).\n * @example\n * <NavAccountMenuItem\n * icon={<User01 />}\n * render={(props) => <a {...props} href=\"/profile\" />}\n * >\n * View profile\n * </NavAccountMenuItem>\n */\n render?: NavAccountMenuItemRenderFn;\n /** Label text */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\nfunction NavAccountMenuItem({\n icon,\n shortcut,\n destructive = false,\n disabled = false,\n onSelect,\n render,\n children,\n className,\n}: NavAccountMenuItemProps) {\n const { onOpenChange } = useNavAccountMenuContext();\n\n const handleClick = () => {\n if (disabled) return;\n onSelect?.();\n onOpenChange(false);\n };\n\n const content = (\n <div className=\"flex flex-1 gap-2 items-center overflow-hidden p-2 rounded-md transition-[background-color] duration-200 ease-smooth delight-selection-press motion-reduce:transition-none\">\n <div className=\"flex flex-1 gap-2 items-center min-w-0\">\n {icon && (\n <span\n className={cn(\n 'shrink-0 [&>svg]:size-4 transition-transform duration-200 ease-smooth group-hover/menuitem:translate-x-0.5 motion-reduce:transition-none',\n destructive ? 'text-destructive' : 'text-foreground',\n )}\n >\n {icon}\n </span>\n )}\n <span\n className={cn(\n 'flex-1 text-sm truncate',\n destructive ? 'text-destructive' : 'text-secondary-foreground',\n )}\n >\n {children}\n </span>\n </div>\n {shortcut && (\n <Kbd variant=\"outline\" size=\"xs\" className=\"shrink-0\">\n {shortcut}\n </Kbd>\n )}\n </div>\n );\n\n const baseClassName = cn(\n 'group/menuitem flex items-center px-1.5 py-0 w-full text-left cursor-pointer outline-none',\n 'hover:[&>div]:bg-muted focus-visible:[&>div]:bg-muted',\n 'focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring',\n disabled && 'pointer-events-none opacity-50',\n className,\n );\n\n if (render) {\n return render({\n className: baseClassName,\n onClick: handleClick,\n children: content,\n });\n }\n\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n data-slot=\"nav-account-menu-item\"\n className={baseClassName}\n onClick={handleClick}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n >\n {content}\n </button>\n );\n}\n\n// ============================================\n// NavAccountMenuAccount\n// ============================================\n\nexport interface NavAccountMenuAccountProps {\n /** Avatar element */\n avatar?: React.ReactNode;\n /** Account display name */\n name: string;\n /** Account email */\n email: string;\n /** Whether this account is currently selected */\n selected?: boolean;\n /** Selection callback */\n onSelect?: () => void;\n /** Additional className */\n className?: string;\n}\n\nfunction NavAccountMenuAccount({\n avatar,\n name,\n email,\n selected = false,\n onSelect,\n className,\n}: NavAccountMenuAccountProps) {\n return (\n <div\n data-slot=\"nav-account-menu-account\"\n className={cn('flex items-center px-1.5 py-0 w-full', className)}\n >\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={selected}\n aria-label={`Switch to ${name} (${email})`}\n className={cn(\n 'relative flex flex-1 gap-2 items-center overflow-hidden px-2 py-1.5 rounded-md cursor-pointer outline-none',\n 'hover:bg-muted focus-visible:bg-muted',\n 'transition-colors duration-200 ease-smooth motion-reduce:transition-none',\n 'focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring',\n 'text-left',\n selected && 'bg-surface-2',\n )}\n onClick={onSelect}\n >\n {avatar && <div className=\"shrink-0\">{avatar}</div>}\n <div className=\"flex flex-col min-w-0 flex-1\">\n <span className=\"text-sm font-semibold text-foreground truncate\">\n {name}\n </span>\n <span className=\"text-sm text-muted-foreground truncate\">\n {email}\n </span>\n </div>\n {/* Radio indicator */}\n <div\n aria-hidden=\"true\"\n className={cn(\n 'size-4 rounded-full border-2 shrink-0 flex items-center justify-center transition-colors duration-200 ease-smooth motion-reduce:transition-none',\n selected\n ? 'bg-primary border-primary'\n : 'border-border bg-transparent',\n )}\n >\n {selected && (\n <div className=\"size-1.5 rounded-full bg-primary-foreground delight-check-bounce\" />\n )}\n </div>\n </button>\n </div>\n );\n}\n\n// ============================================\n// NavAccountMenuSeparator\n// ============================================\n\nexport interface NavAccountMenuSeparatorProps {\n /** Additional className */\n className?: string;\n}\n\nfunction NavAccountMenuSeparator({ className }: NavAccountMenuSeparatorProps) {\n return (\n <hr\n data-slot=\"nav-account-menu-separator\"\n className={cn('h-px border-0 bg-border mx-5', className)}\n />\n );\n}\n\n// ============================================\n// NavAccountMenuFooter\n// ============================================\n\nexport interface NavAccountMenuFooterProps {\n /** Footer content (typically buttons) */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\nfunction NavAccountMenuFooter({\n children,\n className,\n}: NavAccountMenuFooterProps) {\n return (\n <div\n data-slot=\"nav-account-menu-footer\"\n className={cn('flex items-center justify-center px-5 pt-4', className)}\n >\n {children}\n </div>\n );\n}\n\n// ============================================\n// NavAccountMenuThemeSwitch (uses Switch theme variant)\n// ============================================\n\nexport interface NavAccountMenuThemeSwitchProps {\n /** Switch theme variant to render */\n variant?:\n | 'theme-gradient'\n | 'theme-switch'\n | 'theme-pill'\n | 'theme-segmented';\n /** Switch size */\n size?: 'sm' | 'md' | 'lg';\n /** Controlled checked state (dark = checked) */\n checked?: boolean;\n /** Callback when checked state changes */\n onCheckedChange?: (checked: boolean) => void;\n /** Optional label displayed next to the switch (e.g. \"Light Mode\") */\n label?: string;\n /** Additional className */\n className?: string;\n}\n\nfunction NavAccountMenuThemeSwitch({\n variant = 'theme-gradient',\n size = 'sm',\n checked,\n onCheckedChange,\n label,\n className,\n}: NavAccountMenuThemeSwitchProps) {\n const switchId = React.useId();\n const labelId = label ? `${switchId}-label` : undefined;\n\n return (\n <div\n data-slot=\"nav-account-menu-theme-switch\"\n className={cn('flex items-center px-1.5 py-0', className)}\n >\n <div className=\"flex items-center gap-2.5 p-2\">\n <Switch\n id={switchId}\n variant={variant}\n size={size}\n checked={checked}\n onCheckedChange={onCheckedChange}\n aria-labelledby={labelId}\n aria-label={label ? undefined : 'Theme selector'}\n />\n {label && (\n <label\n htmlFor={switchId}\n id={labelId}\n className=\"cursor-pointer text-sm text-secondary-foreground\"\n >\n {label}\n </label>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================\n// Display Names\n// ============================================\n\nNavAccountMenu.displayName = 'NavAccountMenu';\nNavAccountMenuTrigger.displayName = 'NavAccountMenuTrigger';\nNavAccountMenuContent.displayName = 'NavAccountMenuContent';\nNavAccountMenuHeader.displayName = 'NavAccountMenuHeader';\nNavAccountMenuSection.displayName = 'NavAccountMenuSection';\nNavAccountMenuItem.displayName = 'NavAccountMenuItem';\nNavAccountMenuAccount.displayName = 'NavAccountMenuAccount';\nNavAccountMenuSeparator.displayName = 'NavAccountMenuSeparator';\nNavAccountMenuFooter.displayName = 'NavAccountMenuFooter';\nNavAccountMenuThemeSwitch.displayName = 'NavAccountMenuThemeSwitch';\n\n// ============================================\n// Exports\n// ============================================\n\nexport {\n NavAccountMenu,\n NavAccountMenuAccount,\n NavAccountMenuContent,\n NavAccountMenuFooter,\n NavAccountMenuHeader,\n NavAccountMenuItem,\n NavAccountMenuSection,\n NavAccountMenuSeparator,\n NavAccountMenuThemeSwitch,\n NavAccountMenuTrigger,\n triggerVariants as navAccountMenuTriggerVariants,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index227.js","names":[],"sources":["../src/components/templates/AuthPageLayout/AuthPageLayout.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Avatar, AvatarGroup } from '@/components/molecules/data/Avatar';\nimport { BrandIcon } from '@/components/molecules/data/BrandIcon';\nimport {\n PageBackground,\n type PageBackgroundProps,\n} from '@/components/templates/PageBackground';\nimport { cn } from '@/lib/utils';\n\nexport interface AuthPageActionElementProps {\n className?: string;\n children?: React.ReactNode;\n onClick?: React.MouseEventHandler<HTMLElement>;\n}\n\nexport type AuthPageActionElement =\n React.ReactElement<AuthPageActionElementProps>;\n\nexport interface AuthPageAction {\n label: React.ReactNode;\n href?: string;\n onClick?: React.MouseEventHandler<HTMLElement>;\n render?: AuthPageActionElement;\n}\n\nexport interface AuthPageAvatar {\n src?: string;\n alt?: string;\n fallback?: string;\n}\n\nexport interface AuthPageAsideConfig {\n title?: React.ReactNode;\n description?: React.ReactNode;\n cardTitle?: React.ReactNode;\n cardDescription?: React.ReactNode;\n icon?: React.ReactNode;\n avatars?: AuthPageAvatar[];\n avatarOverflowCount?: number;\n}\n\nexport type AuthPageBackgroundPattern = PageBackgroundProps['pattern'] | 'none';\n\nexport interface AuthPageLayoutProps\n extends Omit<React.ComponentProps<'main'>, 'title'> {\n logo?: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n aside?: AuthPageAsideConfig | React.ReactNode;\n showAside?: boolean;\n showAsideOnMobile?: boolean;\n formMaxWidthClassName?: string;\n formClassName?: string;\n asideClassName?: string;\n backgroundPattern?: AuthPageBackgroundPattern;\n}\n\nconst DEFAULT_AVATARS: AuthPageAvatar[] = [\n { fallback: 'HA', alt: 'HUMAIN account member' },\n { fallback: 'OS', alt: 'HUMAIN OS member' },\n { fallback: 'AI', alt: 'HUMAIN AI member' },\n];\n\nfunction isAsideConfig(\n aside: AuthPageAsideConfig | React.ReactNode,\n): aside is AuthPageAsideConfig {\n return (\n typeof aside === 'object' &&\n aside !== null &&\n !Array.isArray(aside) &&\n !React.isValidElement(aside)\n );\n}\n\nfunction renderActionElement(\n action: AuthPageAction,\n className?: string,\n): React.ReactElement {\n if (action.render) {\n return React.cloneElement(action.render, {\n className: cn(action.render.props.className, className),\n onClick: action.onClick ?? action.render.props.onClick,\n children: action.render.props.children ?? action.label,\n });\n }\n\n if (action.href) {\n return (\n <a className={className} href={action.href} onClick={action.onClick}>\n {action.label}\n </a>\n );\n }\n\n return (\n <button className={className} type=\"button\" onClick={action.onClick}>\n {action.label}\n </button>\n );\n}\n\nfunction AuthAsidePanel({\n title,\n description,\n cardTitle,\n cardDescription,\n icon,\n avatars,\n avatarOverflowCount,\n}: AuthPageAsideConfig): React.ReactElement {\n const resolvedAvatars = avatars ?? DEFAULT_AVATARS;\n const defaultOverflowCount = avatars ? 0 : 3695;\n const visibleAvatars = resolvedAvatars.slice(0, 3);\n const hiddenAvatarCount = Math.max(\n 0,\n resolvedAvatars.length - visibleAvatars.length,\n );\n const configuredOverflowCount = Math.max(\n 0,\n avatarOverflowCount ?? defaultOverflowCount,\n );\n const overflowAvatarCount = hiddenAvatarCount + configuredOverflowCount;\n\n return (\n <div\n data-slot=\"auth-page-aside-panel\"\n className=\"relative flex min-h-full w-full flex-col overflow-hidden rounded-xl bg-primary p-8 text-primary-foreground\"\n >\n <BrandIcon\n aria-hidden\n className=\"-start-16 top-1/3 absolute size-72 -rotate-12 text-primary-foreground/10\"\n icon=\"mark\"\n size=\"2xl\"\n />\n <div className=\"relative z-10 flex max-w-xl flex-col gap-6\">\n {title && (\n <h2 className=\"text-display-md font-bold leading-tight text-primary-foreground lg:text-display-lg\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"text-md leading-normal text-primary-foreground lg:text-xl\">\n {description}\n </p>\n )}\n </div>\n\n {(cardTitle || cardDescription) && (\n <div\n data-slot=\"auth-page-aside-card\"\n className=\"relative z-10 mt-auto flex min-h-[248px] flex-col overflow-visible rounded-2xl bg-card px-10 py-8 text-card-foreground\"\n >\n <svg\n aria-hidden\n data-slot=\"auth-page-aside-notch\"\n className=\"pointer-events-none absolute top-0 end-0 z-0 h-[94.5px] w-[95px] overflow-visible text-primary\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n viewBox=\"0 0 95 94.5\"\n >\n <path\n d=\"M0 0H95V94.5C95 81.2452 84.2548 70.5 71 70.5H48C34.7452 70.5 24 59.7548 24 46.5V24C24 10.7452 13.2548 0 0 0Z\"\n fill=\"currentColor\"\n />\n </svg>\n <div\n data-slot=\"auth-page-aside-icon\"\n className=\"absolute end-1 top-1 z-20 flex size-[60px] items-center justify-center rounded-[12px] bg-card text-primary\"\n >\n {icon ?? (\n <BrandIcon\n aria-hidden\n className=\"text-[40px]\"\n data-slot=\"auth-page-aside-symbol\"\n icon=\"symbol\"\n size=\"fluid\"\n />\n )}\n </div>\n <div className=\"relative z-10 flex flex-col gap-6 pe-16\">\n {cardTitle && (\n <h3 className=\"text-display-sm font-bold leading-tight text-card-foreground\">\n {cardTitle}\n </h3>\n )}\n {cardDescription && (\n <p className=\"text-lg leading-normal text-card-foreground\">\n {cardDescription}\n </p>\n )}\n </div>\n {(visibleAvatars.length > 0 || overflowAvatarCount > 0) && (\n <div className=\"relative z-10 mt-auto flex justify-end pt-5\">\n <AvatarGroup size=\"sm\">\n {visibleAvatars.map((avatar, index) => (\n <Avatar\n key={`${avatar.fallback ?? avatar.alt ?? 'avatar'}-${index}`}\n alt={avatar.alt}\n fallback={avatar.fallback}\n src={avatar.src}\n />\n ))}\n {overflowAvatarCount > 0 && (\n <div\n role=\"img\"\n aria-label={`${overflowAvatarCount} more account members`}\n className=\"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-[color-mix(in_srgb,var(--background)_97%,var(--foreground)_3%)]\"\n >\n <span\n aria-hidden=\"true\"\n className=\"font-normal text-foreground text-xs leading-4\"\n >\n +{overflowAvatarCount}\n </span>\n </div>\n )}\n </AvatarGroup>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction AuthPageLayout({\n logo,\n title,\n description,\n aside,\n showAside = true,\n showAsideOnMobile = false,\n formMaxWidthClassName = 'max-w-[520px]',\n formClassName,\n asideClassName,\n backgroundPattern = 'none',\n className,\n children,\n ...props\n}: AuthPageLayoutProps): React.ReactElement {\n const shouldRenderAside = showAside && aside != null;\n const stackAsideOnMobile = shouldRenderAside && showAsideOnMobile;\n\n return (\n <main\n {...props}\n data-slot=\"auth-page-layout\"\n className={cn(\n 'relative isolate flex min-h-screen overflow-hidden bg-surface-1 text-foreground',\n stackAsideOnMobile ? 'flex-col lg:flex-row' : 'flex-row',\n className,\n )}\n >\n {backgroundPattern !== 'none' && (\n <PageBackground\n pattern={backgroundPattern}\n offset=\"icon-center\"\n className=\"-z-10 opacity-70\"\n />\n )}\n <section\n aria-label=\"Authentication form\"\n data-slot=\"auth-page-form-pane\"\n data-testid=\"auth-page-form-pane\"\n className={cn(\n 'flex min-w-0 items-center justify-center px-6 py-12 sm:px-8 lg:min-h-screen lg:py-24',\n shouldRenderAside ? 'flex-1 lg:w-1/2 lg:flex-none' : 'flex-1',\n stackAsideOnMobile ? 'min-h-[50vh]' : 'min-h-screen',\n )}\n >\n <div\n className={cn(\n 'flex w-full min-w-0 flex-col gap-6',\n formMaxWidthClassName,\n formClassName,\n )}\n >\n <div\n data-slot=\"auth-page-logo\"\n className=\"flex h-8 items-center px-6 text-foreground\"\n >\n {logo ?? <BrandIcon icon=\"mark\" size=\"lg\" />}\n </div>\n {(title || description) && (\n <header className=\"flex flex-col gap-2 px-6\">\n {title && (\n <h1 className=\"text-display-xs font-semibold leading-tight text-foreground\">\n {title}\n </h1>\n )}\n {description && (\n <p className=\"text-md leading-normal text-secondary-foreground\">\n {description}\n </p>\n )}\n </header>\n )}\n <div data-slot=\"auth-page-form-content\" className=\"px-6\">\n {children}\n </div>\n </div>\n </section>\n\n {shouldRenderAside && (\n <section\n aria-label=\"Authentication context\"\n data-slot=\"auth-page-aside-pane\"\n data-testid=\"auth-page-aside-pane\"\n className={cn(\n 'min-w-0 flex-1 bg-muted p-5 lg:min-h-screen',\n 'lg:w-1/2 lg:flex-none',\n stackAsideOnMobile ? 'min-h-[50vh]' : 'min-h-screen',\n showAsideOnMobile ? 'flex' : 'hidden lg:flex',\n asideClassName,\n )}\n >\n {isAsideConfig(aside) ? <AuthAsidePanel {...aside} /> : aside}\n </section>\n )}\n </main>\n );\n}\n\nAuthPageLayout.displayName = 'AuthPageLayout';\n\nexport { AuthAsidePanel, AuthPageLayout, renderActionElement };\n"],"mappings":"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"}