@naeil/ui 0.6.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +15 -10
  3. package/contracts/naeil-chrome.v1.json +12 -0
  4. package/dist/{chunk-VL7FS4QM.js → chunk-7JBLPGZ4.js} +4 -343
  5. package/dist/chunk-HSTDPY56.js +74 -0
  6. package/dist/chunk-MGCCKOGU.js +385 -0
  7. package/dist/{chunk-CE73AEJZ.js → chunk-QQQQZEPV.js} +249 -3
  8. package/dist/components/index.d.ts +2 -2
  9. package/dist/components/index.js +10 -8
  10. package/dist/components/naeil-footer.d.ts +16 -0
  11. package/dist/components/naeil-footer.js +76 -0
  12. package/dist/components/naeil-header.d.ts +23 -5
  13. package/dist/components/naeil-header.js +5 -2
  14. package/dist/components/ui/index.d.ts +2 -2
  15. package/dist/components/ui/index.js +6 -6
  16. package/dist/lib/ui-release.d.ts +1 -0
  17. package/dist/lib/ui-release.js +1 -0
  18. package/dist/naeil-header-content-BvISJ4RV.d.ts +4 -0
  19. package/dist/{navigation-CL10a6Eb.d.ts → navigation-CgPeL9tF.d.ts} +1 -1
  20. package/dist/{site-footer-B67meCDv.d.ts → site-footer-vXDa_6yr.d.ts} +4 -2
  21. package/dist/source/components/naeil-footer.d.ts +16 -0
  22. package/dist/source/components/naeil-footer.js +95 -0
  23. package/dist/source/components/naeil-header-account.d.ts +26 -0
  24. package/dist/source/components/naeil-header-account.js +67 -0
  25. package/dist/source/components/naeil-header-content.d.ts +1 -25
  26. package/dist/source/components/naeil-header-content.js +0 -28
  27. package/dist/source/components/naeil-header.d.ts +2 -1
  28. package/dist/source/components/naeil-header.js +6 -1
  29. package/dist/source/components/ui/site-footer.d.ts +4 -2
  30. package/dist/source/components/ui/site-footer.js +6 -2
  31. package/dist/source/lib/ui-release.d.ts +6 -0
  32. package/dist/source/lib/ui-release.js +4 -0
  33. package/docs/components/README.md +4 -3
  34. package/docs/components/application-layout.md +48 -15
  35. package/docs/components/naeil-footer.md +20 -0
  36. package/docs/components/naeil-header.md +25 -7
  37. package/docs/components/navigation.md +3 -1
  38. package/docs/design/v2-migration.md +11 -10
  39. package/docs/package-release.md +33 -12
  40. package/package.json +16 -4
  41. package/src/styles/components.css +35 -0
  42. package/dist/chunk-QSTGUEEI.js +0 -323
@@ -0,0 +1,385 @@
1
+ "use client";
2
+ import {
3
+ Logo,
4
+ uiRelease
5
+ } from "./chunk-7JBLPGZ4.js";
6
+ import {
7
+ Badge,
8
+ Button,
9
+ DropdownMenu,
10
+ DropdownMenuContent,
11
+ DropdownMenuItem,
12
+ DropdownMenuLabel,
13
+ DropdownMenuSeparator,
14
+ DropdownMenuTrigger,
15
+ Navigation,
16
+ Select,
17
+ SelectContent,
18
+ SelectItem,
19
+ SelectTrigger,
20
+ SelectValue
21
+ } from "./chunk-QQQQZEPV.js";
22
+ import {
23
+ __objRest,
24
+ __spreadProps,
25
+ __spreadValues,
26
+ cn
27
+ } from "./chunk-JBTDRVZ7.js";
28
+
29
+ // src/components/naeil-header.tsx
30
+ import { useSyncExternalStore } from "react";
31
+ import { useTheme } from "next-themes";
32
+ import { Moon, Sun } from "lucide-react";
33
+
34
+ // src/components/naeil-header-content.ts
35
+ var headerLocales = ["en", "ko", "ja"];
36
+ var headerLocaleNames = { en: "English", ko: "\uD55C\uAD6D\uC5B4", ja: "\u65E5\u672C\u8A9E" };
37
+ var headerProjects = [
38
+ {
39
+ "key": "naeilUi",
40
+ "href": "/design",
41
+ "accent": "oklch(0.623 0.214 259)",
42
+ "icon": "whale",
43
+ "status": "active"
44
+ }
45
+ ];
46
+ var headerContent = {
47
+ "en": {
48
+ "nav": {
49
+ "home": "Home",
50
+ "projects": "Projects",
51
+ "blog": "Blog",
52
+ "navigation": "Main navigation",
53
+ "menu": "Menu",
54
+ "closeMenu": "Close menu"
55
+ },
56
+ "theme": {
57
+ "switchToLight": "Switch to light theme",
58
+ "switchToDark": "Switch to dark theme"
59
+ },
60
+ "locale": {
61
+ "switchLabel": "Language"
62
+ },
63
+ "projects": {
64
+ "cc": {
65
+ "name": "Content Collector",
66
+ "description": "Automated content collection from RSS, YouTube, Reddit + AI summarization"
67
+ },
68
+ "pkm": {
69
+ "name": "PKM",
70
+ "description": "Personal knowledge management \u2014 document parsing, embeddings, semantic search"
71
+ },
72
+ "naeilUi": {
73
+ "name": "naeil-ui",
74
+ "description": "Minimal design system \u2014 OKLCH tokens, Tailwind v4, shadcn"
75
+ },
76
+ "sa": {
77
+ "name": "Sustainability Analyzer",
78
+ "description": "AI-powered ESG report analysis \u2014 PDF parsing, qualitative assessment, comparison tables"
79
+ },
80
+ "babyAgent": {
81
+ "name": "Baby Agent",
82
+ "description": "Parenting AI agent \u2014 LINE-based Q&A, records, reminders"
83
+ },
84
+ "status": {
85
+ "active": "Active",
86
+ "coming": "Coming Soon"
87
+ }
88
+ }
89
+ },
90
+ "ko": {
91
+ "nav": {
92
+ "home": "\uD648",
93
+ "projects": "\uD504\uB85C\uC81D\uD2B8",
94
+ "blog": "\uBE14\uB85C\uADF8",
95
+ "navigation": "\uC8FC\uC694 \uBA54\uB274",
96
+ "menu": "\uBA54\uB274",
97
+ "closeMenu": "\uBA54\uB274 \uB2EB\uAE30"
98
+ },
99
+ "theme": {
100
+ "switchToLight": "\uBC1D\uC740 \uD14C\uB9C8\uB85C \uC804\uD658",
101
+ "switchToDark": "\uC5B4\uB450\uC6B4 \uD14C\uB9C8\uB85C \uC804\uD658"
102
+ },
103
+ "locale": {
104
+ "switchLabel": "\uC5B8\uC5B4"
105
+ },
106
+ "projects": {
107
+ "cc": {
108
+ "name": "Content Collector",
109
+ "description": "RSS, YouTube, Reddit \uC790\uB3D9 \uC218\uC9D1 + AI \uC694\uC57D"
110
+ },
111
+ "pkm": {
112
+ "name": "PKM",
113
+ "description": "\uAC1C\uC778 \uC9C0\uC2DD \uAD00\uB9AC \u2014 \uBB38\uC11C \uD30C\uC2F1, \uC784\uBCA0\uB529, \uC2DC\uB9E8\uD2F1 \uAC80\uC0C9"
114
+ },
115
+ "naeilUi": {
116
+ "name": "naeil-ui",
117
+ "description": "\uBBF8\uB2C8\uBA40 \uB514\uC790\uC778 \uC2DC\uC2A4\uD15C \u2014 OKLCH \uD1A0\uD070, Tailwind v4, shadcn"
118
+ },
119
+ "sa": {
120
+ "name": "Sustainability Analyzer",
121
+ "description": "ESG \uB9AC\uD3EC\uD2B8 AI \uBD84\uC11D \u2014 PDF \uD30C\uC2F1, \uC815\uC131\uD3C9\uAC00, \uBE44\uAD50\uD45C \uC790\uB3D9 \uC0DD\uC131"
122
+ },
123
+ "babyAgent": {
124
+ "name": "Baby Agent",
125
+ "description": "\uC721\uC544 AI \uC5D0\uC774\uC804\uD2B8 \u2014 LINE \uAE30\uBC18 Q&A, \uAE30\uB85D, \uB9AC\uB9C8\uC778\uB354"
126
+ },
127
+ "status": {
128
+ "active": "\uD65C\uC131",
129
+ "coming": "\uC900\uBE44 \uC911"
130
+ }
131
+ }
132
+ },
133
+ "ja": {
134
+ "nav": {
135
+ "home": "\u30DB\u30FC\u30E0",
136
+ "projects": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",
137
+ "blog": "\u30D6\u30ED\u30B0",
138
+ "navigation": "\u30E1\u30A4\u30F3\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3",
139
+ "menu": "\u30E1\u30CB\u30E5\u30FC",
140
+ "closeMenu": "\u30E1\u30CB\u30E5\u30FC\u3092\u9589\u3058\u308B"
141
+ },
142
+ "theme": {
143
+ "switchToLight": "\u30E9\u30A4\u30C8\u30C6\u30FC\u30DE\u306B\u5207\u308A\u66FF\u3048\u308B",
144
+ "switchToDark": "\u30C0\u30FC\u30AF\u30C6\u30FC\u30DE\u306B\u5207\u308A\u66FF\u3048\u308B"
145
+ },
146
+ "locale": {
147
+ "switchLabel": "\u8A00\u8A9E"
148
+ },
149
+ "projects": {
150
+ "cc": {
151
+ "name": "Content Collector",
152
+ "description": "RSS\u3001YouTube\u3001Reddit\u306E\u81EA\u52D5\u53CE\u96C6 + AI\u8981\u7D04"
153
+ },
154
+ "pkm": {
155
+ "name": "PKM",
156
+ "description": "\u500B\u4EBA\u30CA\u30EC\u30C3\u30B8\u7BA1\u7406 \u2014 \u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u89E3\u6790\u3001\u57CB\u3081\u8FBC\u307F\u3001\u30BB\u30DE\u30F3\u30C6\u30A3\u30C3\u30AF\u691C\u7D22"
157
+ },
158
+ "naeilUi": {
159
+ "name": "naeil-ui",
160
+ "description": "\u30DF\u30CB\u30DE\u30EB\u30C7\u30B6\u30A4\u30F3\u30B7\u30B9\u30C6\u30E0 \u2014 OKLCH\u30C8\u30FC\u30AF\u30F3\u3001Tailwind v4\u3001shadcn"
161
+ },
162
+ "sa": {
163
+ "name": "Sustainability Analyzer",
164
+ "description": "ESG\u30EC\u30DD\u30FC\u30C8AI\u5206\u6790 \u2014 PDF\u89E3\u6790\u3001\u5B9A\u6027\u8A55\u4FA1\u3001\u6BD4\u8F03\u8868\u306E\u81EA\u52D5\u751F\u6210"
165
+ },
166
+ "babyAgent": {
167
+ "name": "Baby Agent",
168
+ "description": "\u80B2\u5150AI\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8 \u2014 LINE Q&A\u3001\u8A18\u9332\u3001\u30EA\u30DE\u30A4\u30F3\u30C0\u30FC"
169
+ },
170
+ "status": {
171
+ "active": "\u30A2\u30AF\u30C6\u30A3\u30D6",
172
+ "coming": "\u6E96\u5099\u4E2D"
173
+ }
174
+ }
175
+ }
176
+ };
177
+
178
+ // src/components/naeil-header-account.tsx
179
+ import { UserRound } from "lucide-react";
180
+ import { jsx, jsxs } from "react/jsx-runtime";
181
+ var labels = {
182
+ en: { menu: "Account menu", account: "Account", login: "Log in", logout: "Log out", busy: "Logging out\u2026" },
183
+ ko: { menu: "\uACC4\uC815 \uBA54\uB274", account: "\uACC4\uC815", login: "\uB85C\uADF8\uC778", logout: "\uB85C\uADF8\uC544\uC6C3", busy: "\uB85C\uADF8\uC544\uC6C3 \uC911\u2026" },
184
+ ja: { menu: "\u30A2\u30AB\u30A6\u30F3\u30C8\u30E1\u30CB\u30E5\u30FC", account: "\u30A2\u30AB\u30A6\u30F3\u30C8", login: "\u30ED\u30B0\u30A4\u30F3", logout: "\u30ED\u30B0\u30A2\u30A6\u30C8", busy: "\u30ED\u30B0\u30A2\u30A6\u30C8\u4E2D\u2026" }
185
+ };
186
+ var NativeLink = (props) => /* @__PURE__ */ jsx("a", __spreadValues({}, props));
187
+ function NaeilHeaderAccountControl({ locale, account, Link = NativeLink }) {
188
+ const text = labels[locale];
189
+ if (account.status === "signed-out") {
190
+ return /* @__PURE__ */ jsx(Link, { href: account.loginHref, className: "ui-navigation-link ui-focus naeil-header-login", "data-naeil-account-state": "signed-out", children: text.login });
191
+ }
192
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
193
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
194
+ "button",
195
+ {
196
+ type: "button",
197
+ className: "ui-focus naeil-header-account-trigger",
198
+ "data-naeil-account-trigger": true,
199
+ "data-naeil-account-state": "signed-in",
200
+ "aria-label": text.menu,
201
+ "aria-busy": account.busy || void 0,
202
+ children: /* @__PURE__ */ jsx("span", { className: "naeil-header-account-avatar", "aria-hidden": "true", children: /* @__PURE__ */ jsx(UserRound, {}) })
203
+ }
204
+ ) }),
205
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", className: "w-56 max-w-[calc(100vw-2rem)]", "data-naeil-account-menu": true, children: [
206
+ /* @__PURE__ */ jsxs(DropdownMenuLabel, { className: "flex min-w-0 flex-col font-normal", children: [
207
+ /* @__PURE__ */ jsx("span", { className: "truncate text-base font-medium", children: account.displayName || text.account }),
208
+ account.email && /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-muted-foreground", children: account.email })
209
+ ] }),
210
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
211
+ /* @__PURE__ */ jsx(
212
+ DropdownMenuItem,
213
+ {
214
+ className: "min-h-11",
215
+ disabled: account.busy,
216
+ onSelect: () => {
217
+ if (!account.busy) account.onLogout();
218
+ },
219
+ children: account.busy ? text.busy : text.logout
220
+ }
221
+ )
222
+ ] })
223
+ ] });
224
+ }
225
+
226
+ // src/components/naeil-header.tsx
227
+ import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
228
+ var subscribe = () => () => {
229
+ };
230
+ function NaeilHeaderThemeControl({ locale }) {
231
+ const { resolvedTheme, setTheme } = useTheme();
232
+ const mounted = useSyncExternalStore(subscribe, () => true, () => false);
233
+ const dark = mounted && resolvedTheme === "dark";
234
+ return /* @__PURE__ */ jsx2(
235
+ Button,
236
+ {
237
+ variant: "ghost",
238
+ size: "icon",
239
+ className: "size-11 shrink-0",
240
+ disabled: !mounted,
241
+ "aria-label": headerContent[locale].theme[dark ? "switchToLight" : "switchToDark"],
242
+ onClick: () => setTheme(dark ? "light" : "dark"),
243
+ children: dark ? /* @__PURE__ */ jsx2(Sun, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx2(Moon, { "aria-hidden": "true" })
244
+ }
245
+ );
246
+ }
247
+ function NaeilHeaderLocaleControl({ locale, onLocaleChange }) {
248
+ return /* @__PURE__ */ jsxs2(Select, { value: locale, onValueChange: (value) => onLocaleChange(value), children: [
249
+ /* @__PURE__ */ jsx2(
250
+ SelectTrigger,
251
+ {
252
+ className: "h-11 w-auto min-w-20 border-transparent bg-transparent px-2",
253
+ "aria-label": headerContent[locale].locale.switchLabel,
254
+ children: /* @__PURE__ */ jsx2(SelectValue, { children: locale.toUpperCase() })
255
+ }
256
+ ),
257
+ /* @__PURE__ */ jsx2(SelectContent, { align: "end", children: headerLocales.map((value) => /* @__PURE__ */ jsx2(SelectItem, { value, className: "min-h-11", lang: value, children: headerLocaleNames[value] }, value)) })
258
+ ] });
259
+ }
260
+ var NativeLink2 = (props) => /* @__PURE__ */ jsx2("a", __spreadValues({}, props));
261
+ function NaeilHeader(_a) {
262
+ var _b = _a, {
263
+ locale,
264
+ resolveHref = (path) => `https://naeil.dev/${locale}${path === "/" ? "" : path}`,
265
+ brandHref,
266
+ brandSlot,
267
+ brandLinkProps,
268
+ brandLinkComponent,
269
+ onLocaleChange,
270
+ authSlot,
271
+ toolbarSlot,
272
+ projects,
273
+ projectsExternal = false,
274
+ translations,
275
+ showProjects = true,
276
+ showBlog = true,
277
+ subNav,
278
+ currentProjectKey,
279
+ currentProjectHref,
280
+ labels: labels2,
281
+ Link = NativeLink2,
282
+ currentHref,
283
+ onNavigate,
284
+ className,
285
+ containerClassName
286
+ } = _b, props = __objRest(_b, [
287
+ "locale",
288
+ "resolveHref",
289
+ "brandHref",
290
+ "brandSlot",
291
+ "brandLinkProps",
292
+ "brandLinkComponent",
293
+ "onLocaleChange",
294
+ "authSlot",
295
+ "toolbarSlot",
296
+ "projects",
297
+ "projectsExternal",
298
+ "translations",
299
+ "showProjects",
300
+ "showBlog",
301
+ "subNav",
302
+ "currentProjectKey",
303
+ "currentProjectHref",
304
+ "labels",
305
+ "Link",
306
+ "currentHref",
307
+ "onNavigate",
308
+ "className",
309
+ "containerClassName"
310
+ ]);
311
+ var _b2, _c;
312
+ const content = headerContent[locale];
313
+ const projectLinks = !showProjects ? [] : projects != null ? projects : headerProjects.map((project) => {
314
+ var _a3, _b3, _c2;
315
+ const current = project.key === currentProjectKey;
316
+ return {
317
+ id: project.key,
318
+ label: (_a3 = translations == null ? void 0 : translations.project(`${project.key}.name`)) != null ? _a3 : content.projects[project.key].name,
319
+ description: (_b3 = translations == null ? void 0 : translations.project(`${project.key}.description`)) != null ? _b3 : content.projects[project.key].description,
320
+ href: current ? currentProjectHref || "/" : resolveHref(project.href),
321
+ external: !current && projectsExternal,
322
+ active: current || currentHref === project.href || (currentHref == null ? void 0 : currentHref.startsWith(`${project.href}/`)) || currentHref === resolveHref(project.href),
323
+ icon: /* @__PURE__ */ jsx2("span", { className: "naeil-header-project-icon", style: {
324
+ borderColor: `color-mix(in oklch, ${project.accent} 30%, transparent)`,
325
+ backgroundColor: `color-mix(in oklch, ${project.accent} 8%, transparent)`
326
+ }, children: /* @__PURE__ */ jsx2("img", { src: `https://naeil.dev/images/${project.icon}.png`, alt: "", width: 24, height: 24 }) }),
327
+ badge: project.status === "coming" ? /* @__PURE__ */ jsx2(Badge, { variant: "outline", children: (_c2 = translations == null ? void 0 : translations.project("status.coming")) != null ? _c2 : content.projects.status.coming }) : void 0
328
+ };
329
+ });
330
+ const brandDestination = brandHref != null ? brandHref : resolveHref("/");
331
+ const BrandLink = brandLinkComponent != null ? brandLinkComponent : Link;
332
+ const _a2 = brandLinkProps != null ? brandLinkProps : {}, { onClick: onBrandClick } = _a2, brandProps = __objRest(_a2, ["onClick"]);
333
+ const toolbar = /* @__PURE__ */ jsx2("div", { "data-app-toolbar": true, className: "naeil-header-controls", children: toolbarSlot !== void 0 ? toolbarSlot : /* @__PURE__ */ jsxs2(Fragment, { children: [
334
+ /* @__PURE__ */ jsx2(NaeilHeaderThemeControl, { locale }),
335
+ onLocaleChange && /* @__PURE__ */ jsx2(NaeilHeaderLocaleControl, { locale, onLocaleChange }),
336
+ authSlot && /* @__PURE__ */ jsxs2(Fragment, { children: [
337
+ /* @__PURE__ */ jsx2("div", { "aria-hidden": "true", className: "naeil-header-separator" }),
338
+ authSlot
339
+ ] })
340
+ ] }) });
341
+ return /* @__PURE__ */ jsx2(
342
+ Navigation,
343
+ __spreadProps(__spreadValues({}, props), {
344
+ "data-global-header": true,
345
+ "data-naeil-header": true,
346
+ "data-naeil-ui-version": uiRelease.version,
347
+ "data-naeil-ui-contract": uiRelease.contractVersion,
348
+ Link,
349
+ currentHref,
350
+ onNavigate,
351
+ brand: /* @__PURE__ */ jsx2(
352
+ BrandLink,
353
+ __spreadProps(__spreadValues({
354
+ href: brandDestination,
355
+ "data-app-brand": true,
356
+ "aria-label": brandSlot == null ? ".naeil" : void 0
357
+ }, brandProps), {
358
+ onClick: (event) => {
359
+ onBrandClick == null ? void 0 : onBrandClick(event);
360
+ onNavigate == null ? void 0 : onNavigate(event, { id: "brand", href: brandDestination, label: ".naeil" });
361
+ },
362
+ children: brandSlot != null ? brandSlot : /* @__PURE__ */ jsx2(Logo, { variant: "horizontal", size: 28, className: "block", label: null })
363
+ })
364
+ ),
365
+ items: [
366
+ ...showProjects ? [{ id: "projects", label: (_b2 = translations == null ? void 0 : translations.projects) != null ? _b2 : content.nav.projects, items: projectLinks, columns: projectLinks.length > 1 ? 2 : 1 }] : [],
367
+ ...showBlog ? [{ id: "blog", label: (_c = translations == null ? void 0 : translations.blog) != null ? _c : content.nav.blog, href: resolveHref("/blog"), external: projectsExternal }] : [],
368
+ ...(subNav != null ? subNav : []).map((item) => __spreadProps(__spreadValues({}, item), { id: item.href }))
369
+ ],
370
+ labels: labels2 != null ? labels2 : { navigation: content.nav.navigation, menu: content.nav.menu, close: content.nav.closeMenu },
371
+ toolbar,
372
+ mobileToolbar: toolbar,
373
+ className: cn("naeil-header fixed top-0 w-full", className),
374
+ containerClassName: cn("naeil-header-frame", containerClassName)
375
+ })
376
+ );
377
+ }
378
+
379
+ export {
380
+ headerLocales,
381
+ NaeilHeaderAccountControl,
382
+ NaeilHeaderThemeControl,
383
+ NaeilHeaderLocaleControl,
384
+ NaeilHeader
385
+ };
@@ -646,13 +646,244 @@ function Navigation(_a) {
646
646
  );
647
647
  }
648
648
 
649
+ // src/components/ui/dropdown-menu.tsx
650
+ import { CheckIcon as CheckIcon2, ChevronRightIcon, CircleIcon } from "lucide-react";
651
+ import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
652
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
653
+ function DropdownMenu(_a) {
654
+ var props = __objRest(_a, []);
655
+ return /* @__PURE__ */ jsx5(DropdownMenuPrimitive.Root, __spreadValues({ "data-slot": "dropdown-menu" }, props));
656
+ }
657
+ function DropdownMenuPortal(_a) {
658
+ var props = __objRest(_a, []);
659
+ return /* @__PURE__ */ jsx5(DropdownMenuPrimitive.Portal, __spreadValues({ "data-slot": "dropdown-menu-portal" }, props));
660
+ }
661
+ function DropdownMenuTrigger(_a) {
662
+ var props = __objRest(_a, []);
663
+ return /* @__PURE__ */ jsx5(
664
+ DropdownMenuPrimitive.Trigger,
665
+ __spreadValues({
666
+ "data-slot": "dropdown-menu-trigger"
667
+ }, props)
668
+ );
669
+ }
670
+ function DropdownMenuContent(_a) {
671
+ var _b = _a, {
672
+ ref,
673
+ className,
674
+ sideOffset = 4
675
+ } = _b, props = __objRest(_b, [
676
+ "ref",
677
+ "className",
678
+ "sideOffset"
679
+ ]);
680
+ const [content, contentRef] = useOverlayRef(ref);
681
+ useRadixHiddenInert(content);
682
+ return /* @__PURE__ */ jsx5(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx5(
683
+ DropdownMenuPrimitive.Content,
684
+ __spreadValues({
685
+ ref: contentRef,
686
+ "data-slot": "dropdown-menu-content",
687
+ sideOffset,
688
+ className: cn(
689
+ "ui-menu ui-popup z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border-strong p-1 shadow-md",
690
+ className
691
+ )
692
+ }, props)
693
+ ) });
694
+ }
695
+ function DropdownMenuGroup(_a) {
696
+ var props = __objRest(_a, []);
697
+ return /* @__PURE__ */ jsx5(DropdownMenuPrimitive.Group, __spreadValues({ "data-slot": "dropdown-menu-group" }, props));
698
+ }
699
+ function DropdownMenuItem(_a) {
700
+ var _b = _a, {
701
+ className,
702
+ inset,
703
+ variant = "default"
704
+ } = _b, props = __objRest(_b, [
705
+ "className",
706
+ "inset",
707
+ "variant"
708
+ ]);
709
+ return /* @__PURE__ */ jsx5(
710
+ DropdownMenuPrimitive.Item,
711
+ __spreadValues({
712
+ "data-slot": "dropdown-menu-item",
713
+ "data-inset": inset,
714
+ "data-variant": variant,
715
+ className: cn(
716
+ "focus:bg-surface-subtle data-[variant=destructive]:text-error data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-error data-[variant=destructive]:*:[svg]:!text-error [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-base outline-hidden select-none transition-colors duration-(--ui-motion-fast) data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
717
+ className
718
+ )
719
+ }, props)
720
+ );
721
+ }
722
+ function DropdownMenuCheckboxItem(_a) {
723
+ var _b = _a, {
724
+ className,
725
+ children,
726
+ checked
727
+ } = _b, props = __objRest(_b, [
728
+ "className",
729
+ "children",
730
+ "checked"
731
+ ]);
732
+ return /* @__PURE__ */ jsxs3(
733
+ DropdownMenuPrimitive.CheckboxItem,
734
+ __spreadProps(__spreadValues({
735
+ "data-slot": "dropdown-menu-checkbox-item",
736
+ className: cn(
737
+ "focus:bg-surface-subtle relative flex cursor-default items-center gap-2 rounded-md py-1.5 pr-2 pl-8 text-base outline-hidden select-none transition-colors duration-(--ui-motion-fast) data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
738
+ className
739
+ ),
740
+ checked
741
+ }, props), {
742
+ children: [
743
+ /* @__PURE__ */ jsx5("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx5(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx5(CheckIcon2, { className: "size-4" }) }) }),
744
+ children
745
+ ]
746
+ })
747
+ );
748
+ }
749
+ function DropdownMenuRadioGroup(_a) {
750
+ var props = __objRest(_a, []);
751
+ return /* @__PURE__ */ jsx5(
752
+ DropdownMenuPrimitive.RadioGroup,
753
+ __spreadValues({
754
+ "data-slot": "dropdown-menu-radio-group"
755
+ }, props)
756
+ );
757
+ }
758
+ function DropdownMenuRadioItem(_a) {
759
+ var _b = _a, {
760
+ className,
761
+ children
762
+ } = _b, props = __objRest(_b, [
763
+ "className",
764
+ "children"
765
+ ]);
766
+ return /* @__PURE__ */ jsxs3(
767
+ DropdownMenuPrimitive.RadioItem,
768
+ __spreadProps(__spreadValues({
769
+ "data-slot": "dropdown-menu-radio-item",
770
+ className: cn(
771
+ "focus:bg-surface-subtle relative flex cursor-default items-center gap-2 rounded-md py-1.5 pr-2 pl-8 text-base outline-hidden select-none transition-colors duration-(--ui-motion-fast) data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
772
+ className
773
+ )
774
+ }, props), {
775
+ children: [
776
+ /* @__PURE__ */ jsx5("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx5(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx5(CircleIcon, { className: "size-2 fill-current" }) }) }),
777
+ children
778
+ ]
779
+ })
780
+ );
781
+ }
782
+ function DropdownMenuLabel(_a) {
783
+ var _b = _a, {
784
+ className,
785
+ inset
786
+ } = _b, props = __objRest(_b, [
787
+ "className",
788
+ "inset"
789
+ ]);
790
+ return /* @__PURE__ */ jsx5(
791
+ DropdownMenuPrimitive.Label,
792
+ __spreadValues({
793
+ "data-slot": "dropdown-menu-label",
794
+ "data-inset": inset,
795
+ className: cn(
796
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
797
+ className
798
+ )
799
+ }, props)
800
+ );
801
+ }
802
+ function DropdownMenuSeparator(_a) {
803
+ var _b = _a, {
804
+ className
805
+ } = _b, props = __objRest(_b, [
806
+ "className"
807
+ ]);
808
+ return /* @__PURE__ */ jsx5(
809
+ DropdownMenuPrimitive.Separator,
810
+ __spreadValues({
811
+ "data-slot": "dropdown-menu-separator",
812
+ className: cn("bg-border-subtle -mx-1 my-1 h-px", className)
813
+ }, props)
814
+ );
815
+ }
816
+ function DropdownMenuShortcut(_a) {
817
+ var _b = _a, {
818
+ className
819
+ } = _b, props = __objRest(_b, [
820
+ "className"
821
+ ]);
822
+ return /* @__PURE__ */ jsx5(
823
+ "span",
824
+ __spreadValues({
825
+ "data-slot": "dropdown-menu-shortcut",
826
+ className: cn(
827
+ "text-muted-foreground ml-auto text-xs tracking-widest",
828
+ className
829
+ )
830
+ }, props)
831
+ );
832
+ }
833
+ function DropdownMenuSub(_a) {
834
+ var props = __objRest(_a, []);
835
+ return /* @__PURE__ */ jsx5(DropdownMenuPrimitive.Sub, __spreadValues({ "data-slot": "dropdown-menu-sub" }, props));
836
+ }
837
+ function DropdownMenuSubTrigger(_a) {
838
+ var _b = _a, {
839
+ className,
840
+ inset,
841
+ children
842
+ } = _b, props = __objRest(_b, [
843
+ "className",
844
+ "inset",
845
+ "children"
846
+ ]);
847
+ return /* @__PURE__ */ jsxs3(
848
+ DropdownMenuPrimitive.SubTrigger,
849
+ __spreadProps(__spreadValues({
850
+ "data-slot": "dropdown-menu-sub-trigger",
851
+ "data-inset": inset,
852
+ className: cn(
853
+ "focus:bg-surface-subtle data-[state=open]:bg-surface-subtle [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-base outline-hidden select-none transition-colors duration-(--ui-motion-fast) data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
854
+ className
855
+ )
856
+ }, props), {
857
+ children: [
858
+ children,
859
+ /* @__PURE__ */ jsx5(ChevronRightIcon, { className: "ml-auto size-4" })
860
+ ]
861
+ })
862
+ );
863
+ }
864
+ function DropdownMenuSubContent(_a) {
865
+ var _b = _a, {
866
+ className
867
+ } = _b, props = __objRest(_b, [
868
+ "className"
869
+ ]);
870
+ return /* @__PURE__ */ jsx5(
871
+ DropdownMenuPrimitive.SubContent,
872
+ __spreadValues({
873
+ "data-slot": "dropdown-menu-sub-content",
874
+ className: cn(
875
+ "ui-menu ui-popup z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-border-strong p-1 shadow-lg",
876
+ className
877
+ )
878
+ }, props)
879
+ );
880
+ }
881
+
649
882
  export {
650
883
  badgeVariants,
651
884
  Badge,
652
885
  buttonVariants,
653
886
  Button,
654
- useRadixHiddenInert,
655
- useOverlayRef,
656
887
  Select,
657
888
  SelectValue,
658
889
  SelectGroup,
@@ -663,5 +894,20 @@ export {
663
894
  SelectSeparator,
664
895
  SelectScrollUpButton,
665
896
  SelectScrollDownButton,
666
- Navigation
897
+ Navigation,
898
+ DropdownMenu,
899
+ DropdownMenuPortal,
900
+ DropdownMenuTrigger,
901
+ DropdownMenuContent,
902
+ DropdownMenuGroup,
903
+ DropdownMenuItem,
904
+ DropdownMenuCheckboxItem,
905
+ DropdownMenuRadioGroup,
906
+ DropdownMenuRadioItem,
907
+ DropdownMenuLabel,
908
+ DropdownMenuSeparator,
909
+ DropdownMenuShortcut,
910
+ DropdownMenuSub,
911
+ DropdownMenuSubTrigger,
912
+ DropdownMenuSubContent
667
913
  };
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { N as NavigationLink, a as NavigationProps } from '../navigation-CL10a6Eb.js';
3
- import { S as SiteFooterProps } from '../site-footer-B67meCDv.js';
2
+ import { N as NavigationLink, a as NavigationProps } from '../navigation-CgPeL9tF.js';
3
+ import { S as SiteFooterProps } from '../site-footer-vXDa_6yr.js';
4
4
  import { ThemeProvider as ThemeProvider$1 } from 'next-themes';
5
5
  import * as React$1 from 'react';
6
6
  import { SVGProps } from 'react';
@@ -1,19 +1,21 @@
1
1
  "use client";
2
2
  import {
3
- Logo,
4
3
  NaeilHeader,
5
4
  headerLocales
6
- } from "../chunk-VL7FS4QM.js";
5
+ } from "../chunk-MGCCKOGU.js";
6
+ import {
7
+ Logo
8
+ } from "../chunk-7JBLPGZ4.js";
9
+ import {
10
+ SiteFooter
11
+ } from "../chunk-HSTDPY56.js";
7
12
  import {
13
+ Button,
8
14
  DropdownMenu,
9
15
  DropdownMenuContent,
10
16
  DropdownMenuItem,
11
- DropdownMenuTrigger,
12
- SiteFooter
13
- } from "../chunk-QSTGUEEI.js";
14
- import {
15
- Button
16
- } from "../chunk-CE73AEJZ.js";
17
+ DropdownMenuTrigger
18
+ } from "../chunk-QQQQZEPV.js";
17
19
  import {
18
20
  __objRest,
19
21
  __spreadProps,