@naeil/ui 0.1.0 → 0.3.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.
Files changed (170) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/DESIGN.md +186 -0
  3. package/LICENSE +21 -0
  4. package/README.md +85 -22
  5. package/THIRD_PARTY_NOTICES.md +49 -0
  6. package/dist/chunk-JBTDRVZ7.js +46 -0
  7. package/dist/chunk-QKVN6Q6C.js +438 -0
  8. package/dist/components/index.d.ts +87 -0
  9. package/dist/components/index.js +832 -0
  10. package/dist/components/ui/index.d.ts +105 -0
  11. package/dist/components/ui/index.js +736 -0
  12. package/dist/lib/utils.d.ts +5 -0
  13. package/dist/lib/utils.js +7 -0
  14. package/dist/source/components/footer.d.ts +15 -0
  15. package/dist/source/components/footer.js +172 -0
  16. package/dist/source/components/index.d.ts +11 -0
  17. package/dist/source/components/index.js +26 -0
  18. package/dist/source/components/locale-switcher.d.ts +17 -0
  19. package/dist/source/components/locale-switcher.js +66 -0
  20. package/dist/source/components/logo.d.ts +9 -0
  21. package/dist/source/components/logo.js +52 -0
  22. package/dist/source/components/nav.d.ts +39 -0
  23. package/dist/source/components/nav.js +412 -0
  24. package/dist/source/components/theme-provider.d.ts +6 -0
  25. package/dist/source/components/theme-provider.js +45 -0
  26. package/dist/source/components/theme-toggle-icon.d.ts +5 -0
  27. package/dist/source/components/theme-toggle-icon.js +62 -0
  28. package/dist/source/components/theme-toggle.d.ts +5 -0
  29. package/dist/source/components/theme-toggle.js +34 -0
  30. package/dist/source/components/typography.d.ts +12 -0
  31. package/dist/source/components/typography.js +49 -0
  32. package/dist/source/components/ui/avatar.d.ts +14 -0
  33. package/dist/source/components/ui/avatar.js +137 -0
  34. package/dist/source/components/ui/badge.d.ts +13 -0
  35. package/dist/source/components/ui/badge.js +76 -0
  36. package/dist/source/components/ui/button.d.ts +14 -0
  37. package/dist/source/components/ui/button.js +88 -0
  38. package/dist/source/components/ui/card.d.ts +13 -0
  39. package/dist/source/components/ui/card.js +135 -0
  40. package/dist/source/components/ui/checkbox.d.ts +7 -0
  41. package/dist/source/components/ui/checkbox.js +58 -0
  42. package/dist/source/components/ui/dialog.d.ts +20 -0
  43. package/dist/source/components/ui/dialog.js +182 -0
  44. package/dist/source/components/ui/dropdown-menu.d.ts +28 -0
  45. package/dist/source/components/ui/dropdown-menu.js +282 -0
  46. package/dist/source/components/ui/index.d.ts +19 -0
  47. package/dist/source/components/ui/index.js +131 -0
  48. package/dist/source/components/ui/input.d.ts +6 -0
  49. package/dist/source/components/ui/input.js +49 -0
  50. package/dist/source/components/ui/select.d.ts +16 -0
  51. package/dist/source/components/ui/select.js +197 -0
  52. package/dist/source/components/ui/sonner.d.ts +6 -0
  53. package/dist/source/components/ui/sonner.js +80 -0
  54. package/dist/source/components/ui/switch.d.ts +7 -0
  55. package/dist/source/components/ui/switch.js +54 -0
  56. package/dist/source/components/ui/tabs.d.ts +10 -0
  57. package/dist/source/components/ui/tabs.js +57 -0
  58. package/dist/source/components/ui/textarea.d.ts +6 -0
  59. package/dist/source/components/ui/textarea.js +46 -0
  60. package/dist/source/i18n/config.d.ts +6 -0
  61. package/dist/source/i18n/config.js +12 -0
  62. package/dist/source/i18n/routing.d.ts +371 -0
  63. package/dist/source/i18n/routing.js +17 -0
  64. package/dist/source/lib/design/modal-inert.d.ts +6 -0
  65. package/dist/source/lib/design/modal-inert.js +73 -0
  66. package/dist/source/lib/utils.d.ts +5 -0
  67. package/dist/source/lib/utils.js +8 -0
  68. package/dist/tokens.ts +217 -0
  69. package/docs/components/README.md +21 -0
  70. package/docs/components/avatar.md +47 -0
  71. package/docs/components/badge.md +29 -0
  72. package/docs/components/button.md +39 -0
  73. package/docs/components/card.md +32 -0
  74. package/docs/components/checkbox.md +35 -0
  75. package/docs/components/common.md +31 -0
  76. package/docs/components/composition.md +68 -0
  77. package/docs/components/dialog.md +41 -0
  78. package/docs/components/dropdown-menu.md +38 -0
  79. package/docs/components/input.md +32 -0
  80. package/docs/components/select.md +39 -0
  81. package/docs/components/sonner.md +37 -0
  82. package/docs/components/switch.md +33 -0
  83. package/docs/components/tabs.md +40 -0
  84. package/docs/components/textarea.md +35 -0
  85. package/docs/design/component-demand.md +30 -0
  86. package/docs/design/public-ui-final-verification.md +96 -0
  87. package/docs/design/public-ui-release-validation.md +86 -0
  88. package/docs/design/public-ui-stage3-verification.md +98 -0
  89. package/docs/design/public-ui-stage4-verification.md +129 -0
  90. package/docs/design/public-ui-support.md +40 -0
  91. package/docs/design/v2-migration.md +199 -0
  92. package/docs/package-release.md +89 -0
  93. package/licenses/Noto-Sans-JP-OFL.txt +93 -0
  94. package/licenses/Nunito-Sans-OFL.txt +93 -0
  95. package/licenses/Pretendard-OFL.txt +94 -0
  96. package/licenses/React-MIT.txt +21 -0
  97. package/licenses/Storybook-MIT.txt +21 -0
  98. package/licenses/popper-MIT.txt +25 -0
  99. package/licenses/react-remove-scroll-bar-MIT.txt +21 -0
  100. package/licenses/store2-MIT.txt +22 -0
  101. package/licenses/toggle-selection-MIT.txt +21 -0
  102. package/package.json +215 -26
  103. package/src/styles/components.css +276 -0
  104. package/src/styles/globals.css +18 -0
  105. package/src/styles/theme.css +293 -0
  106. package/messages/en.json +0 -221
  107. package/messages/ja.json +0 -221
  108. package/messages/ko.json +0 -221
  109. package/postcss.config.mjs +0 -7
  110. package/src/app/[locale]/(content)/baby-agent/page.tsx +0 -30
  111. package/src/app/[locale]/(content)/blog/page.tsx +0 -68
  112. package/src/app/[locale]/(content)/cc/page.tsx +0 -216
  113. package/src/app/[locale]/(content)/design/page.tsx +0 -703
  114. package/src/app/[locale]/(content)/layout.tsx +0 -7
  115. package/src/app/[locale]/(content)/pkm/page.tsx +0 -31
  116. package/src/app/[locale]/(content)/projects/page.tsx +0 -100
  117. package/src/app/[locale]/(content)/sa/page.tsx +0 -179
  118. package/src/app/[locale]/(landing)/page.tsx +0 -157
  119. package/src/app/[locale]/layout.tsx +0 -72
  120. package/src/app/[locale]/login/actions.ts +0 -10
  121. package/src/app/[locale]/login/oauth-buttons.tsx +0 -78
  122. package/src/app/[locale]/login/page.tsx +0 -85
  123. package/src/app/auth/callback/route.ts +0 -78
  124. package/src/app/favicon.ico +0 -0
  125. package/src/app/globals.css +0 -32
  126. package/src/app/layout.tsx +0 -22
  127. package/src/app/sitemap.ts +0 -26
  128. package/src/components/accent-picker.tsx +0 -62
  129. package/src/components/auth-slot.tsx +0 -96
  130. package/src/components/footer-wrapper.tsx +0 -8
  131. package/src/components/footer.tsx +0 -193
  132. package/src/components/hero-scene.tsx +0 -948
  133. package/src/components/hero-section.tsx +0 -57
  134. package/src/components/locale-switcher.tsx +0 -74
  135. package/src/components/logo.tsx +0 -51
  136. package/src/components/nav-server-wrapper.tsx +0 -22
  137. package/src/components/nav-wrapper.tsx +0 -45
  138. package/src/components/nav.tsx +0 -550
  139. package/src/components/paraglider-cursor.tsx +0 -112
  140. package/src/components/project-layout.tsx +0 -194
  141. package/src/components/theme-provider.tsx +0 -10
  142. package/src/components/theme-toggle-icon.tsx +0 -62
  143. package/src/components/theme-toggle.tsx +0 -39
  144. package/src/components/typography.tsx +0 -27
  145. package/src/components/ui/avatar.tsx +0 -109
  146. package/src/components/ui/badge.tsx +0 -47
  147. package/src/components/ui/button.tsx +0 -65
  148. package/src/components/ui/card.tsx +0 -106
  149. package/src/components/ui/dialog.tsx +0 -158
  150. package/src/components/ui/dropdown-menu.tsx +0 -257
  151. package/src/components/ui/input.tsx +0 -21
  152. package/src/components/ui/sonner.tsx +0 -54
  153. package/src/components/workflow-diagram.tsx +0 -414
  154. package/src/i18n/config.ts +0 -8
  155. package/src/i18n/request.ts +0 -16
  156. package/src/i18n/routing.ts +0 -12
  157. package/src/lib/supabase/client.ts +0 -18
  158. package/src/lib/supabase/middleware.ts +0 -42
  159. package/src/lib/supabase/server.ts +0 -37
  160. package/src/lib/utils.ts +0 -6
  161. package/src/proxy.ts +0 -62
  162. package/src/tokens/.gitkeep +0 -0
  163. package/src/tokens/color.json +0 -56
  164. package/src/tokens/radius.json +0 -9
  165. package/src/tokens/semantic.json +0 -81
  166. package/src/tokens/shadow.json +0 -7
  167. package/src/tokens/spacing.json +0 -16
  168. package/src/tokens/typography.json +0 -34
  169. package/src/types/i18n.d.ts +0 -6
  170. package/src/utils/.gitkeep +0 -0
@@ -0,0 +1,5 @@
1
+ import { ClassValue } from 'clsx';
2
+
3
+ declare function cn(...inputs: ClassValue[]): string;
4
+
5
+ export { cn };
@@ -0,0 +1,7 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "../chunk-JBTDRVZ7.js";
5
+ export {
6
+ cn
7
+ };
@@ -0,0 +1,15 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface FooterProps {
4
+ /** Link component from consumer */
5
+ Link?: React.ComponentType<{
6
+ href: string;
7
+ children: React.ReactNode;
8
+ className?: string;
9
+ }>;
10
+ /** Whether links go to naeil.dev (external) or are internal. Default: false */
11
+ linksExternal?: boolean;
12
+ }
13
+ declare function Footer({ Link, linksExternal }: FooterProps): react_jsx_runtime.JSX.Element;
14
+
15
+ export { Footer };
@@ -0,0 +1,172 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useTranslations } from "next-intl";
4
+ function NavLink({
5
+ href,
6
+ children,
7
+ className,
8
+ linksExternal,
9
+ Link
10
+ }) {
11
+ if (linksExternal) {
12
+ return /* @__PURE__ */ jsx(
13
+ "a",
14
+ {
15
+ href: `https://naeil.dev${href}`,
16
+ target: "_blank",
17
+ rel: "noopener noreferrer",
18
+ className,
19
+ children
20
+ }
21
+ );
22
+ }
23
+ if (Link) {
24
+ return /* @__PURE__ */ jsx(Link, { href, className, children });
25
+ }
26
+ return /* @__PURE__ */ jsx("a", { href, className, children });
27
+ }
28
+ function Footer({ Link, linksExternal = false }) {
29
+ const t = useTranslations("footer");
30
+ return /* @__PURE__ */ jsx("footer", { className: "border-border/40 border-t", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex max-w-7xl flex-col gap-10 px-6 py-16 sm:flex-row sm:justify-between", children: [
31
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
32
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
33
+ /* @__PURE__ */ jsx(Logo, { size: 20 }),
34
+ /* @__PURE__ */ jsx("span", { className: "text-foreground text-sm font-semibold tracking-tight", children: ".naeil" })
35
+ ] }),
36
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground max-w-[240px] text-sm leading-relaxed", children: t("tagline") }),
37
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
38
+ /* @__PURE__ */ jsx(
39
+ "a",
40
+ {
41
+ href: "https://github.com/naeil-dev",
42
+ target: "_blank",
43
+ rel: "noopener noreferrer",
44
+ className: "text-muted-foreground hover:text-foreground transition-colors",
45
+ "aria-label": "GitHub",
46
+ children: /* @__PURE__ */ jsx(GitHubIcon, {})
47
+ }
48
+ ),
49
+ /* @__PURE__ */ jsx(
50
+ "a",
51
+ {
52
+ href: "https://x.com",
53
+ target: "_blank",
54
+ rel: "noopener noreferrer",
55
+ className: "text-muted-foreground hover:text-foreground transition-colors",
56
+ "aria-label": "X",
57
+ children: /* @__PURE__ */ jsx(XIcon, {})
58
+ }
59
+ )
60
+ ] })
61
+ ] }),
62
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-10 sm:gap-16", children: [
63
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
64
+ /* @__PURE__ */ jsx("span", { className: "text-foreground text-xs font-medium uppercase tracking-wider", children: t("navigation") }),
65
+ /* @__PURE__ */ jsx(
66
+ NavLink,
67
+ {
68
+ href: "/projects",
69
+ className: "text-muted-foreground hover:text-foreground text-sm transition-colors",
70
+ linksExternal,
71
+ Link,
72
+ children: t("projects")
73
+ }
74
+ ),
75
+ /* @__PURE__ */ jsx(
76
+ NavLink,
77
+ {
78
+ href: "/blog",
79
+ className: "text-muted-foreground hover:text-foreground text-sm transition-colors",
80
+ linksExternal,
81
+ Link,
82
+ children: t("blog")
83
+ }
84
+ )
85
+ ] }),
86
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
87
+ /* @__PURE__ */ jsx("span", { className: "text-foreground text-xs font-medium uppercase tracking-wider", children: t("social") }),
88
+ /* @__PURE__ */ jsx(
89
+ "a",
90
+ {
91
+ href: "https://github.com/naeil-dev",
92
+ target: "_blank",
93
+ rel: "noopener noreferrer",
94
+ className: "text-muted-foreground hover:text-foreground text-sm transition-colors",
95
+ children: "GitHub \u2197"
96
+ }
97
+ )
98
+ ] })
99
+ ] })
100
+ ] }) });
101
+ }
102
+ function Logo({ size = 20 }) {
103
+ const id = `naeil-footer-logo-${size}`;
104
+ return /* @__PURE__ */ jsxs(
105
+ "svg",
106
+ {
107
+ width: size,
108
+ height: size,
109
+ viewBox: "0 0 24 24",
110
+ fill: "none",
111
+ "aria-label": "naeil",
112
+ children: [
113
+ /* @__PURE__ */ jsx(
114
+ "path",
115
+ {
116
+ d: "M6 4 L6 16 L20 16",
117
+ stroke: "currentColor",
118
+ strokeWidth: "2",
119
+ strokeLinecap: "square",
120
+ strokeLinejoin: "miter"
121
+ }
122
+ ),
123
+ /* @__PURE__ */ jsx(
124
+ "circle",
125
+ {
126
+ cx: "15",
127
+ cy: "16",
128
+ r: "3.5",
129
+ fill: `url(#${id}-grad)`,
130
+ mask: `url(#${id})`
131
+ }
132
+ ),
133
+ /* @__PURE__ */ jsxs("defs", { children: [
134
+ /* @__PURE__ */ jsxs("linearGradient", { id: `${id}-grad`, x1: "15", y1: "12.5", x2: "15", y2: "16", children: [
135
+ /* @__PURE__ */ jsx("stop", { stopColor: "#eab308" }),
136
+ /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#dc2626" })
137
+ ] }),
138
+ /* @__PURE__ */ jsx("mask", { id, children: /* @__PURE__ */ jsx("rect", { x: "0", y: "0", width: "24", height: "16", fill: "white" }) })
139
+ ] })
140
+ ]
141
+ }
142
+ );
143
+ }
144
+ function GitHubIcon() {
145
+ return /* @__PURE__ */ jsx(
146
+ "svg",
147
+ {
148
+ width: "16",
149
+ height: "16",
150
+ viewBox: "0 0 24 24",
151
+ fill: "currentColor",
152
+ "aria-hidden": "true",
153
+ children: /* @__PURE__ */ jsx("path", { d: "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" })
154
+ }
155
+ );
156
+ }
157
+ function XIcon() {
158
+ return /* @__PURE__ */ jsx(
159
+ "svg",
160
+ {
161
+ width: "14",
162
+ height: "14",
163
+ viewBox: "0 0 24 24",
164
+ fill: "currentColor",
165
+ "aria-hidden": "true",
166
+ children: /* @__PURE__ */ jsx("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" })
167
+ }
168
+ );
169
+ }
170
+ export {
171
+ Footer
172
+ };
@@ -0,0 +1,11 @@
1
+ export { Nav } from './nav.js';
2
+ export { Footer } from './footer.js';
3
+ export { LocaleSwitcher } from './locale-switcher.js';
4
+ export { ThemeToggle } from './theme-toggle.js';
5
+ export { ThemeProvider } from './theme-provider.js';
6
+ export { ThemeToggleIcon } from './theme-toggle-icon.js';
7
+ export { Logo } from './logo.js';
8
+ export { PageTitle, SectionTitle, pageTitleClass, sectionTitleClass } from './typography.js';
9
+ import 'react/jsx-runtime';
10
+ import 'next-themes';
11
+ import 'react';
@@ -0,0 +1,26 @@
1
+ import { Nav } from "./nav.js";
2
+ import { Footer } from "./footer.js";
3
+ import { LocaleSwitcher } from "./locale-switcher.js";
4
+ import { ThemeToggle } from "./theme-toggle.js";
5
+ import { ThemeProvider } from "./theme-provider.js";
6
+ import { ThemeToggleIcon } from "./theme-toggle-icon.js";
7
+ import { Logo } from "./logo.js";
8
+ import {
9
+ PageTitle,
10
+ SectionTitle,
11
+ pageTitleClass,
12
+ sectionTitleClass
13
+ } from "./typography.js";
14
+ export {
15
+ Footer,
16
+ LocaleSwitcher,
17
+ Logo,
18
+ Nav,
19
+ PageTitle,
20
+ SectionTitle,
21
+ ThemeProvider,
22
+ ThemeToggle,
23
+ ThemeToggleIcon,
24
+ pageTitleClass,
25
+ sectionTitleClass
26
+ };
@@ -0,0 +1,17 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface LocaleSwitcherProps {
4
+ /** Available locales */
5
+ locales: Array<{
6
+ code: string;
7
+ short: string;
8
+ full: string;
9
+ }>;
10
+ /** Current locale */
11
+ currentLocale: string;
12
+ /** Called when user selects a new locale */
13
+ onLocaleChange: (locale: string) => void;
14
+ }
15
+ declare function LocaleSwitcher({ locales, currentLocale, onLocaleChange, }: LocaleSwitcherProps): react_jsx_runtime.JSX.Element;
16
+
17
+ export { LocaleSwitcher };
@@ -0,0 +1,66 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import {
4
+ DropdownMenu,
5
+ DropdownMenuTrigger,
6
+ DropdownMenuContent,
7
+ DropdownMenuItem
8
+ } from "./ui/dropdown-menu.js";
9
+ function LocaleSwitcher({
10
+ locales,
11
+ currentLocale,
12
+ onLocaleChange
13
+ }) {
14
+ var _a, _b;
15
+ const current = locales.find((l) => l.code === currentLocale);
16
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
17
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
18
+ "button",
19
+ {
20
+ className: "text-muted-foreground hover:text-foreground flex items-center gap-1.5 text-sm transition-colors focus:outline-none",
21
+ "aria-label": `Change language \u2014 current: ${(_a = current == null ? void 0 : current.short) != null ? _a : currentLocale}`,
22
+ children: [
23
+ /* @__PURE__ */ jsx(GlobeIcon, {}),
24
+ (_b = current == null ? void 0 : current.short) != null ? _b : currentLocale.toUpperCase()
25
+ ]
26
+ }
27
+ ) }),
28
+ /* @__PURE__ */ jsx(DropdownMenuContent, { align: "end", className: "min-w-[120px]", children: locales.map((l) => /* @__PURE__ */ jsxs(
29
+ DropdownMenuItem,
30
+ {
31
+ onClick: () => onLocaleChange(l.code),
32
+ className: l.code === currentLocale ? "font-medium" : "",
33
+ children: [
34
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground mr-2 w-5 text-xs", children: l.short }),
35
+ l.full
36
+ ]
37
+ },
38
+ l.code
39
+ )) })
40
+ ] });
41
+ }
42
+ function GlobeIcon() {
43
+ return /* @__PURE__ */ jsxs(
44
+ "svg",
45
+ {
46
+ xmlns: "http://www.w3.org/2000/svg",
47
+ width: "14",
48
+ height: "14",
49
+ viewBox: "0 0 24 24",
50
+ fill: "none",
51
+ stroke: "currentColor",
52
+ strokeWidth: "1.5",
53
+ strokeLinecap: "round",
54
+ strokeLinejoin: "round",
55
+ className: "shrink-0",
56
+ children: [
57
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
58
+ /* @__PURE__ */ jsx("path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" }),
59
+ /* @__PURE__ */ jsx("path", { d: "M2 12h20" })
60
+ ]
61
+ }
62
+ );
63
+ }
64
+ export {
65
+ LocaleSwitcher
66
+ };
@@ -0,0 +1,9 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function Logo({ size, mono, className, }: {
4
+ size?: number;
5
+ mono?: boolean;
6
+ className?: string;
7
+ }): react_jsx_runtime.JSX.Element;
8
+
9
+ export { Logo };
@@ -0,0 +1,52 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ function Logo({
3
+ size = 20,
4
+ mono = false,
5
+ className
6
+ }) {
7
+ const id = `naeil-logo-${size}`;
8
+ return /* @__PURE__ */ jsxs(
9
+ "svg",
10
+ {
11
+ width: size,
12
+ height: size,
13
+ viewBox: "0 0 24 24",
14
+ fill: "none",
15
+ "aria-label": "naeil",
16
+ className,
17
+ children: [
18
+ /* @__PURE__ */ jsx(
19
+ "path",
20
+ {
21
+ d: "M6 4 L6 16 L20 16",
22
+ stroke: "currentColor",
23
+ strokeWidth: "2",
24
+ strokeLinecap: "square",
25
+ strokeLinejoin: "miter"
26
+ }
27
+ ),
28
+ mono ? /* @__PURE__ */ jsx("circle", { cx: "15", cy: "16", r: "3.5", fill: "currentColor", mask: `url(#${id})` }) : /* @__PURE__ */ jsx("circle", { cx: "15", cy: "16", r: "3.5", fill: `url(#${id}-grad)`, mask: `url(#${id})` }),
29
+ /* @__PURE__ */ jsxs("defs", { children: [
30
+ !mono && /* @__PURE__ */ jsxs(
31
+ "linearGradient",
32
+ {
33
+ id: `${id}-grad`,
34
+ x1: "15",
35
+ y1: "12.5",
36
+ x2: "15",
37
+ y2: "16",
38
+ children: [
39
+ /* @__PURE__ */ jsx("stop", { stopColor: "#eab308" }),
40
+ /* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#dc2626" })
41
+ ]
42
+ }
43
+ ),
44
+ /* @__PURE__ */ jsx("mask", { id, children: /* @__PURE__ */ jsx("rect", { x: "0", y: "0", width: "24", height: "16", fill: "white" }) })
45
+ ] })
46
+ ]
47
+ }
48
+ );
49
+ }
50
+ export {
51
+ Logo
52
+ };
@@ -0,0 +1,39 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface NavProps {
4
+ /** Internal Link component (from consumer's next-intl routing) */
5
+ Link: React.ComponentType<React.ComponentPropsWithoutRef<"a"> & {
6
+ href: string;
7
+ }>;
8
+ /** Current pathname value (already resolved, not a hook) */
9
+ usePathname: () => string;
10
+ /** Where the .naeil logo links to. Default: "/" */
11
+ brandHref?: string;
12
+ /** Whether brandHref is external (renders <a>) or internal (renders Link). Default: false */
13
+ brandExternal?: boolean;
14
+ /** Custom brand content (replaces default Logo + ".naeil" text) */
15
+ brandSlot?: React.ReactNode;
16
+ /** When true, project links (except current) are rendered as external <a> to externalBaseUrl. Default: false */
17
+ projectsExternal?: boolean;
18
+ /** Base URL for external project links. Default: "https://naeil.dev" */
19
+ externalBaseUrl?: string;
20
+ /** Override href for the current project in the dropdown */
21
+ currentProjectKey?: string;
22
+ currentProjectHref?: string;
23
+ /** App-specific sub-navigation items after the project dropdown */
24
+ subNav?: Array<{
25
+ label: string;
26
+ href: string;
27
+ }>;
28
+ /** React node for auth UI (rendered in desktop right side + mobile bottom) */
29
+ authSlot?: React.ReactNode;
30
+ /** Show Projects dropdown in nav. Default: true */
31
+ showProjects?: boolean;
32
+ /** Show blog link in nav. Default: true */
33
+ showBlog?: boolean;
34
+ /** Right-side toolbar (theme toggle, locale switcher, etc.) */
35
+ toolbarSlot?: React.ReactNode;
36
+ }
37
+ declare function Nav({ Link, usePathname, brandHref, brandExternal, brandSlot, projectsExternal, externalBaseUrl, currentProjectKey, currentProjectHref, subNav, authSlot, showProjects, showBlog, toolbarSlot, }: NavProps): react_jsx_runtime.JSX.Element;
38
+
39
+ export { Nav };