@naeil/ui 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -2
- package/DESIGN.md +8 -0
- package/README.md +7 -7
- package/THIRD_PARTY_NOTICES.md +2 -0
- package/dist/components/index.d.ts +15 -6
- package/dist/components/index.js +1269 -242
- package/dist/components/ui/index.d.ts +1 -1
- package/dist/source/components/brand-artwork.generated.d.ts +162 -0
- package/dist/source/components/brand-artwork.generated.js +1103 -0
- package/dist/source/components/footer.js +2 -46
- package/dist/source/components/index.d.ts +1 -1
- package/dist/source/components/logo.d.ts +13 -4
- package/dist/source/components/logo.js +83 -44
- package/dist/source/components/nav.d.ts +2 -2
- package/dist/source/components/nav.js +2 -39
- package/docs/components/README.md +1 -1
- package/docs/components/common.md +1 -1
- package/docs/design/public-ui-support.md +4 -2
- package/docs/design/v2-migration.md +35 -5
- package/docs/package-release.md +25 -6
- package/licenses/Lato-OFL.txt +93 -0
- package/package.json +6 -4
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useTranslations } from "next-intl";
|
|
4
|
+
import { Logo } from "./logo.js";
|
|
4
5
|
function NavLink({
|
|
5
6
|
href,
|
|
6
7
|
children,
|
|
@@ -29,10 +30,7 @@ function Footer({ Link, linksExternal = false }) {
|
|
|
29
30
|
const t = useTranslations("footer");
|
|
30
31
|
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
32
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
32
|
-
/* @__PURE__ */
|
|
33
|
-
/* @__PURE__ */ jsx(Logo, { size: 20 }),
|
|
34
|
-
/* @__PURE__ */ jsx("span", { className: "text-foreground text-sm font-semibold tracking-tight", children: ".naeil" })
|
|
35
|
-
] }),
|
|
33
|
+
/* @__PURE__ */ jsx(Logo, { variant: "footer", size: 20, className: "block" }),
|
|
36
34
|
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground max-w-[240px] text-sm leading-relaxed", children: t("tagline") }),
|
|
37
35
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
38
36
|
/* @__PURE__ */ jsx(
|
|
@@ -99,48 +97,6 @@ function Footer({ Link, linksExternal = false }) {
|
|
|
99
97
|
] })
|
|
100
98
|
] }) });
|
|
101
99
|
}
|
|
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
100
|
function GitHubIcon() {
|
|
145
101
|
return /* @__PURE__ */ jsx(
|
|
146
102
|
"svg",
|
|
@@ -4,7 +4,7 @@ export { LocaleSwitcher } from './locale-switcher.js';
|
|
|
4
4
|
export { ThemeToggle } from './theme-toggle.js';
|
|
5
5
|
export { ThemeProvider } from './theme-provider.js';
|
|
6
6
|
export { ThemeToggleIcon } from './theme-toggle-icon.js';
|
|
7
|
-
export { Logo } from './logo.js';
|
|
7
|
+
export { Logo, LogoProps } from './logo.js';
|
|
8
8
|
export { PageTitle, SectionTitle, pageTitleClass, sectionTitleClass } from './typography.js';
|
|
9
9
|
import 'react/jsx-runtime';
|
|
10
10
|
import 'next-themes';
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { SVGProps } from 'react';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
interface LogoProps extends Omit<SVGProps<SVGSVGElement>, "children" | "width" | "height" | "viewBox"> {
|
|
5
|
+
/** Rendered height. Symbol stays square; lockups preserve their aspect ratio. */
|
|
4
6
|
size?: number;
|
|
7
|
+
/** Legacy single-ink currentColor silhouette. Prefer tone="gray" for tonal detail. */
|
|
5
8
|
mono?: boolean;
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
variant?: "symbol" | "horizontal" | "footer" | "stacked" | "wordmark";
|
|
10
|
+
tone?: "color" | "gray";
|
|
11
|
+
/** Auto follows the nearest .light/.dark or data-theme ancestor, then the OS. */
|
|
12
|
+
theme?: "auto" | "light" | "dark";
|
|
13
|
+
/** null marks a decorative logo; label the containing link instead. */
|
|
14
|
+
label?: string | null;
|
|
15
|
+
}
|
|
16
|
+
declare function Logo({ size, mono, variant, tone, theme, label, className, ...props }: LogoProps): react_jsx_runtime.JSX.Element;
|
|
8
17
|
|
|
9
|
-
export { Logo };
|
|
18
|
+
export { Logo, type LogoProps };
|
|
@@ -1,50 +1,89 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __spreadValues = (a, b) => {
|
|
10
|
+
for (var prop in b || (b = {}))
|
|
11
|
+
if (__hasOwnProp.call(b, prop))
|
|
12
|
+
__defNormalProp(a, prop, b[prop]);
|
|
13
|
+
if (__getOwnPropSymbols)
|
|
14
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
+
if (__propIsEnum.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
}
|
|
18
|
+
return a;
|
|
19
|
+
};
|
|
20
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
|
+
var __objRest = (source, exclude) => {
|
|
22
|
+
var target = {};
|
|
23
|
+
for (var prop in source)
|
|
24
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
25
|
+
target[prop] = source[prop];
|
|
26
|
+
if (source != null && __getOwnPropSymbols)
|
|
27
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
28
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
29
|
+
target[prop] = source[prop];
|
|
30
|
+
}
|
|
31
|
+
return target;
|
|
32
|
+
};
|
|
33
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
34
|
+
import { useId } from "react";
|
|
35
|
+
import { BrandArtwork, brandDimensions, brandVersion } from "./brand-artwork.generated.js";
|
|
36
|
+
const autoThemeCSS = `
|
|
37
|
+
:where(.light,[data-theme="light"]){--naeil-logo-light:inline;--naeil-logo-dark:none}
|
|
38
|
+
:where(.dark,[data-theme="dark"]){--naeil-logo-light:none;--naeil-logo-dark:inline}
|
|
39
|
+
@media(prefers-color-scheme:dark){[data-naeil-theme="auto"]{--naeil-logo-os-light:none;--naeil-logo-os-dark:inline}}
|
|
40
|
+
`;
|
|
41
|
+
function Logo(_a) {
|
|
42
|
+
var _b = _a, {
|
|
43
|
+
size = 20,
|
|
44
|
+
mono = false,
|
|
45
|
+
variant = "symbol",
|
|
46
|
+
tone = "color",
|
|
47
|
+
theme = "auto",
|
|
48
|
+
label = "naeil",
|
|
49
|
+
className
|
|
50
|
+
} = _b, props = __objRest(_b, [
|
|
51
|
+
"size",
|
|
52
|
+
"mono",
|
|
53
|
+
"variant",
|
|
54
|
+
"tone",
|
|
55
|
+
"theme",
|
|
56
|
+
"label",
|
|
57
|
+
"className"
|
|
58
|
+
]);
|
|
59
|
+
const id = `naeil-${useId()}`;
|
|
60
|
+
const form = variant === "symbol" && size <= 48 ? "symbol-small" : variant;
|
|
61
|
+
const mode = mono ? "mono" : `${tone}${theme === "dark" ? "-dark" : ""}`;
|
|
62
|
+
const asset = `${form}-${mode}`;
|
|
63
|
+
const geometry = brandDimensions[asset];
|
|
64
|
+
const auto = !mono && theme === "auto";
|
|
65
|
+
return /* @__PURE__ */ jsx(
|
|
9
66
|
"svg",
|
|
10
|
-
{
|
|
11
|
-
width: size,
|
|
67
|
+
__spreadProps(__spreadValues({
|
|
68
|
+
width: size * geometry.width / geometry.height,
|
|
12
69
|
height: size,
|
|
13
|
-
viewBox:
|
|
70
|
+
viewBox: geometry.viewBox,
|
|
14
71
|
fill: "none",
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
),
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
}
|
|
72
|
+
role: label === null ? void 0 : "img",
|
|
73
|
+
"aria-label": label != null ? label : void 0,
|
|
74
|
+
"aria-hidden": label === null ? true : void 0,
|
|
75
|
+
focusable: "false",
|
|
76
|
+
"data-naeil-brand": brandVersion,
|
|
77
|
+
"data-naeil-variant": variant,
|
|
78
|
+
"data-naeil-theme": auto ? "auto" : theme,
|
|
79
|
+
className
|
|
80
|
+
}, props), {
|
|
81
|
+
children: auto ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
82
|
+
/* @__PURE__ */ jsx("style", { children: autoThemeCSS }),
|
|
83
|
+
/* @__PURE__ */ jsx("g", { "data-naeil-palette": "light", style: { display: "var(--naeil-logo-light, var(--naeil-logo-os-light, inline))" }, children: /* @__PURE__ */ jsx(BrandArtwork, { asset, id: `${id}-light` }) }),
|
|
84
|
+
/* @__PURE__ */ jsx("g", { "data-naeil-palette": "dark", style: { display: "var(--naeil-logo-dark, var(--naeil-logo-os-dark, none))" }, children: /* @__PURE__ */ jsx(BrandArtwork, { asset: `${form}-${tone}-dark`, id: `${id}-dark` }) })
|
|
85
|
+
] }) : /* @__PURE__ */ jsx(BrandArtwork, { asset, id })
|
|
86
|
+
})
|
|
48
87
|
);
|
|
49
88
|
}
|
|
50
89
|
export {
|
|
@@ -7,11 +7,11 @@ interface NavProps {
|
|
|
7
7
|
}>;
|
|
8
8
|
/** Current pathname value (already resolved, not a hook) */
|
|
9
9
|
usePathname: () => string;
|
|
10
|
-
/** Where the
|
|
10
|
+
/** Where the naeil logo links to. Default: "/" */
|
|
11
11
|
brandHref?: string;
|
|
12
12
|
/** Whether brandHref is external (renders <a>) or internal (renders Link). Default: false */
|
|
13
13
|
brandExternal?: boolean;
|
|
14
|
-
/** Custom brand content (replaces default
|
|
14
|
+
/** Custom brand content (replaces the default naeil wordmark lockup) */
|
|
15
15
|
brandSlot?: React.ReactNode;
|
|
16
16
|
/** When true, project links (except current) are rendered as external <a> to externalBaseUrl. Default: false */
|
|
17
17
|
projectsExternal?: boolean;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useState } from "react";
|
|
4
4
|
import { useTranslations } from "next-intl";
|
|
5
|
+
import { Logo } from "./logo.js";
|
|
5
6
|
import { Badge } from "./ui/badge.js";
|
|
6
7
|
import Image from "next/image";
|
|
7
8
|
const PROJECTS = [
|
|
@@ -95,10 +96,7 @@ function Nav({
|
|
|
95
96
|
}
|
|
96
97
|
return { href: project.href, external: false };
|
|
97
98
|
}
|
|
98
|
-
const brandContent = brandSlot != null ? brandSlot : /* @__PURE__ */
|
|
99
|
-
/* @__PURE__ */ jsx(Logo, { size: 28 }),
|
|
100
|
-
".naeil"
|
|
101
|
-
] });
|
|
99
|
+
const brandContent = brandSlot != null ? brandSlot : /* @__PURE__ */ jsx(Logo, { variant: "horizontal", size: 28, className: "block" });
|
|
102
100
|
const brandElement = brandExternal ? /* @__PURE__ */ jsx("a", { href: brandHref, children: brandContent }) : /* @__PURE__ */ jsx(Link, { href: brandHref, children: brandContent });
|
|
103
101
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
104
102
|
/* @__PURE__ */ jsx(
|
|
@@ -340,41 +338,6 @@ function Nav({
|
|
|
340
338
|
] }) })
|
|
341
339
|
] });
|
|
342
340
|
}
|
|
343
|
-
function Logo({
|
|
344
|
-
size = 20
|
|
345
|
-
}) {
|
|
346
|
-
const id = `naeil-nav-logo-${size}`;
|
|
347
|
-
return /* @__PURE__ */ jsxs(
|
|
348
|
-
"svg",
|
|
349
|
-
{
|
|
350
|
-
width: size,
|
|
351
|
-
height: size,
|
|
352
|
-
viewBox: "0 0 24 24",
|
|
353
|
-
fill: "none",
|
|
354
|
-
"aria-label": "naeil",
|
|
355
|
-
children: [
|
|
356
|
-
/* @__PURE__ */ jsx(
|
|
357
|
-
"path",
|
|
358
|
-
{
|
|
359
|
-
d: "M6 4 L6 16 L20 16",
|
|
360
|
-
stroke: "currentColor",
|
|
361
|
-
strokeWidth: "2",
|
|
362
|
-
strokeLinecap: "square",
|
|
363
|
-
strokeLinejoin: "miter"
|
|
364
|
-
}
|
|
365
|
-
),
|
|
366
|
-
/* @__PURE__ */ jsx("circle", { cx: "15", cy: "16", r: "3.5", fill: `url(#${id}-grad)`, mask: `url(#${id})` }),
|
|
367
|
-
/* @__PURE__ */ jsxs("defs", { children: [
|
|
368
|
-
/* @__PURE__ */ jsxs("linearGradient", { id: `${id}-grad`, x1: "15", y1: "12.5", x2: "15", y2: "16", children: [
|
|
369
|
-
/* @__PURE__ */ jsx("stop", { stopColor: "#eab308" }),
|
|
370
|
-
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#dc2626" })
|
|
371
|
-
] }),
|
|
372
|
-
/* @__PURE__ */ jsx("mask", { id, children: /* @__PURE__ */ jsx("rect", { x: "0", y: "0", width: "24", height: "16", fill: "white" }) })
|
|
373
|
-
] })
|
|
374
|
-
]
|
|
375
|
-
}
|
|
376
|
-
);
|
|
377
|
-
}
|
|
378
341
|
function MenuIcon() {
|
|
379
342
|
return /* @__PURE__ */ jsx(
|
|
380
343
|
"svg",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Component usage guides
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Published `@naeil/ui@0.3.0` (2026-10-03; [release](https://github.com/naeil-dev/naeil-ui/releases/tag/v0.3.0)). [Setup, themes, fonts and shared responsibilities](common.md). Open the [live Storybook](https://naeil-dev.github.io/naeil-ui/) or run `pnpm storybook` and choose each family’s Docs or Usage entry. Select chooses a value; DropdownMenu chooses an action.
|
|
4
4
|
|
|
5
5
|
| Family | Guide | Runnable story |
|
|
6
6
|
| --- | --- | --- |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Shared usage contract
|
|
2
2
|
|
|
3
|
-
These guides describe
|
|
3
|
+
These guides describe **@naeil/ui 0.3.0, published 2026-10-03** ([release](https://github.com/naeil-dev/naeil-ui/releases/tag/v0.3.0)); [live Docs and Usage examples](https://naeil-dev.github.io/naeil-ui/) are available. Start with the [consumer setup and migration](../design/v2-migration.md). All listed exports are available from `@naeil/ui/ui`; the legacy root needs the optional Next/next-intl peers. Examples import real wrappers; product state, validation and network requests belong to consumers.
|
|
4
4
|
|
|
5
5
|
## Styling, themes and overrides
|
|
6
6
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# Public UI support and manual acceptance
|
|
2
2
|
|
|
3
|
-
This support matrix targets `@naeil/ui@0.3.0
|
|
3
|
+
This support matrix targets published `@naeil/ui@0.3.0` (2026-10-03); see [registry/clean-consumer evidence](https://github.com/naeil-dev/naeil-ui/releases/download/v0.3.0/npm-publication-verification.json) and the [release](https://github.com/naeil-dev/naeil-ui/releases/tag/v0.3.0) for npm identity and [live Docs](https://naeil-dev.github.io/naeil-ui/) deployment. Current documentation covers 13 families. This matrix describes the current examples/checks, not every consumer or every allowed dependency version. [Dated Stage 3 results](public-ui-stage3-verification.md) identify commands, source hashes and local limitations. [Stage 4 extension results](public-ui-stage4-verification.md) separately cover Tabs/Textarea and native field/choice composition.
|
|
4
4
|
|
|
5
5
|
Linux CI at `bcf99fca3467ae2b1cd29d54fa24f2569fb6001c` passed package-and-site in both the [push run](https://github.com/naeil-dev/naeil-ui/actions/runs/36945564443) and [PR run](https://github.com/naeil-dev/naeil-ui/actions/runs/36945943651). Their browser jobs failed: respectively 207 passed/4 skipped/2 failed (axe scan collision and Avatar Docs ambiguity), and 208 passed/4 skipped/1 failed (Avatar Docs ambiguity). Firefox application tests passed in both Linux runs. These failed baseline results remain historical evidence in the [final correction follow-up](public-ui-final-verification.md).
|
|
6
6
|
|
|
7
|
-
The corrected source `9f90493abb4fb1186c948084026c3f4c04074013` passed independent scoped review with no actionable findings and both actual Linux workflows: [push](https://github.com/naeil-dev/naeil-ui/actions/runs/36948276767) and [PR](https://github.com/naeil-dev/naeil-ui/actions/runs/36948280881). The PR browser suite passed **209 tests with 4 expected forced-colors skips** (two each in Firefox/WebKit); package-and-site and optional helper checks also passed. Root verified the downloaded PR Storybook artifact and its `/naeil-ui/` navigation/fonts in Chromium/WebKit. This evidence applies to that exact source; [
|
|
7
|
+
The corrected source `9f90493abb4fb1186c948084026c3f4c04074013` passed independent scoped review with no actionable findings and both actual Linux workflows: [push](https://github.com/naeil-dev/naeil-ui/actions/runs/36948276767) and [PR](https://github.com/naeil-dev/naeil-ui/actions/runs/36948280881). The PR browser suite passed **209 tests with 4 expected forced-colors skips** (two each in Firefox/WebKit); package-and-site and optional helper checks also passed. Root verified the downloaded PR Storybook artifact and its `/naeil-ui/` navigation/fonts in Chromium/WebKit. This evidence applies to that exact source; [merged PR checks](https://github.com/naeil-dev/naeil-ui/pull/1/checks) retain the release-preparation checks. Subsequent documentation changes require their own verification. Review/CI acceptance applies to its recorded source and does not complete native/manual platform coverage. Publication completed separately on 2026-10-03; unrun checks remain limitations rather than completed results.
|
|
8
|
+
|
|
9
|
+
Fresh npm-registry installs in clean-cache React/Next apps passed types/build, production fonts and blocked-font fallback, mixed-import ownership/StrictMode, Chromium/WebKit Tabs/Textarea contracts and Next 16.1.7 root/deep prerender; the [publication receipt](https://github.com/naeil-dev/naeil-ui/releases/download/v0.3.0/npm-publication-verification.json) gives their scope. The development overlay replay probe retains 34 Vite font allowlist warnings; it certifies overlay replay only, and font success applies to production. These fixtures do not establish adoption in a real consumer product.
|
|
8
10
|
|
|
9
11
|
| Environment / capability | Contract and evidence |
|
|
10
12
|
| --- | --- |
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
이 안내는 `@naeil/ui`의 기본 모양과 재사용 규칙을 설명한다. 패키지 소비와 소비 사이트 배포는 별도 작업이다.
|
|
4
4
|
|
|
5
|
-
이 안내는 **@naeil/ui 0.
|
|
5
|
+
이 안내는 **@naeil/ui 0.4.0**의 CSS·API·패키지 경계를 대상으로 한다. UI v2는 디자인 세대 이름이며 npm 2.0을 뜻하지 않는다. 기존 npm 0.2.0에 이 기능이 모두 구현됐다고 가정하지 않는다. Registry의 게시 여부와 latest 태그는 별도로 확인한다.
|
|
6
6
|
|
|
7
7
|
## 시작하기
|
|
8
8
|
|
|
9
9
|
React 19/ReactDOM 19와 Tailwind 4 앱에서 `/ui`를 사용한다. API 키와 Next.js는 필요 없다. 소비 앱에서 정확한 버전을 지정한다.
|
|
10
10
|
|
|
11
11
|
```sh
|
|
12
|
-
pnpm add --save-exact @naeil/ui@0.
|
|
13
|
-
# npm install --save-exact @naeil/ui@0.
|
|
12
|
+
pnpm add --save-exact @naeil/ui@0.4.0
|
|
13
|
+
# npm install --save-exact @naeil/ui@0.4.0
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
이 명령은 해당 버전이 registry에 있을 때 사용할 수 있다. 게시 전 소스 검증은 저장소에서 `pnpm build:pkg` 후 `npm pack --ignore-scripts --pack-destination /tmp`를 실행하고, 소비 앱에 `/tmp/naeil-ui-0.
|
|
16
|
+
이 명령은 해당 버전이 registry에 있을 때 사용할 수 있다. 게시 전 소스 검증은 저장소에서 `pnpm build:pkg` 후 `npm pack --ignore-scripts --pack-destination /tmp`를 실행하고, 소비 앱에 `/tmp/naeil-ui-0.4.0.tgz`를 설치한다. [독립 React 예제](https://github.com/naeil-dev/naeil-ui/blob/81fd395031dc5b20074c4d915a8585360ce2d28a/examples/react/README.md)와 [검증/릴리스 정책](../package-release.md)을 참고한다.
|
|
17
17
|
|
|
18
18
|
공통 UI 소비에는 Supabase, 21st 또는 다른 API 키가 필요하지 않다. React/ReactDOM 19는 소비 앱의 peer이며, Next 15/16과 next-intl 4는 호환 경로에 필요한 선택적 peer다. next-themes 0.4와 tailwind-merge 3은 공통 런타임 의존성으로 설치된다. 사이트의 Supabase·MDX·Three 의존성과 코드는 공통 소비 경계에서 제외했다.
|
|
19
19
|
|
|
20
|
-
버전을 생략한 설치는 registry의 latest 태그를 따른다. 이 안내와 동일한 경계를 사용하려면 0.
|
|
20
|
+
버전을 생략한 설치는 registry의 latest 태그를 따른다. 이 안내와 동일한 경계를 사용하려면 0.4.0을 지정하고 [변경 기록](../../CHANGELOG.md)을 확인한다.
|
|
21
21
|
|
|
22
22
|
Tailwind 4를 사용하는 앱의 전역 CSS에서 공통 스타일을 한 번 불러온다.
|
|
23
23
|
|
|
@@ -197,3 +197,33 @@ The reachable Next consumer's observed deep imports (Nav, Footer, ThemeProvider,
|
|
|
197
197
|
## Demand-led extension
|
|
198
198
|
|
|
199
199
|
Version 0.3.0 also adds `Tabs`, `TabsList`, `TabsTrigger`, `TabsContent` and `Textarea` to `/ui`, plus exact `components/ui/tabs` and `components/ui/textarea` deep entries. Existing root stays the brand/framework barrel. No new dependency or existing default is changed. See the [13-family index](../components/README.md), [Tabs defaults/mount responsibilities](../components/tabs.md), [native Textarea contract](../components/textarea.md), [field/native-radio composition](../components/composition.md), and [demand decision](component-demand.md). Publishing does not update consumers that use locally copied primitives.
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
## Brand Logo integration (0.4.0)
|
|
203
|
+
|
|
204
|
+
Version 0.4.0 connects the approved **brand 1.1.1** to the shared components. It is not a claim that npm 0.3.0 already contains the new logo. Package publication and consumer upgrades remain separate.
|
|
205
|
+
|
|
206
|
+
```tsx
|
|
207
|
+
// React-only, no Next.js peer required for this deep import:
|
|
208
|
+
import { Logo, type LogoProps } from '@naeil/ui/components/logo';
|
|
209
|
+
|
|
210
|
+
<Logo size={32} />
|
|
211
|
+
<Logo variant="horizontal" size={28} />
|
|
212
|
+
<Logo variant="footer" size={20} />
|
|
213
|
+
<Logo tone="gray" size={40} />
|
|
214
|
+
<Logo variant="horizontal" size={28} theme="dark" />
|
|
215
|
+
<a href="/" aria-label="naeil 홈"><Logo size={28} label={null} /></a>
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Root and `components/index` continue to export Logo; root still has the existing Next/next-intl compatibility peers. `LogoProps` is also exported. No brand export is added to `/ui`.
|
|
219
|
+
|
|
220
|
+
- `size` remains the rendered height, default 20px. Default `variant="symbol"` remains square. The 16–48px symbol uses the reviewed small artwork; larger symbols use the detailed source. `horizontal`, `footer`, `stacked` and `wordmark` preserve their aspect ratio. Header height 28px and footer height 20px are recommended. For stacked use a minimum height of 140px (160px width).
|
|
221
|
+
- `className`, standard SVG props and consumer style overrides are retained. Avoid stretching width and height independently. Artwork contains paths, not text or external images; Lato installation is unnecessary.
|
|
222
|
+
- `theme="auto"` follows the nearest `.light`, `.dark`, `data-theme="light"` or `data-theme="dark"` ancestor, with OS preference as fallback. It uses embedded SVG CSS and React useId, so SSR markup does not branch on browser state. For strict CSP or manual control, provide `theme="light"` or `theme="dark"`; that form emits no theme style element. Multiple independently hydrated React roots should use distinct React identifierPrefix values as usual.
|
|
223
|
+
- `tone="color"` is default. `tone="gray"` uses the selected grayscale A, including islands. Existing `mono` remains a **single currentColor silhouette** for compatibility; its one-ink shape loses the internal sun/island distinction. It is not the preferred grayscale version or a separately approved print master. `mono` takes precedence over tone/theme colors.
|
|
224
|
+
- Default accessible name is naeil with role=img. Use `label={null}` for decorative use and name the enclosing link/button. `aria-label` and other standard SVG attributes remain consumer overrides.
|
|
225
|
+
- Nav now uses the horizontal wordmark at 28px; Footer uses the footer lockup at 20px. Their official visible spelling remains `.naeil`: the period marks an ending, followed by tomorrow. Nav's `brandSlot`, brandHref, external/internal links, layout frame and other slots are preserved. Check custom layouts on upgrade because the new artwork has a different width.
|
|
226
|
+
|
|
227
|
+
The independent kit lives in the repository's `brand/naeil/1.1.1/` directory with its own usage guide, SVG/PNG/icons, OFL and checksums. Copy it for non-React uses without installing @naeil/ui. It is intentionally not copied into the npm tarball. The package carries only generated React artwork and the [Lato notice](../../licenses/Lato-OFL.txt). A favicon is application-owned: Next file conventions can use the kit's favicon.ico, favicon.svg and apple-touch-icon.png; each consumer chooses its own app manifest and deployment.
|
|
228
|
+
|
|
229
|
+
Maintainers run `pnpm build:brand` after explicitly selecting a reviewed version in `brand/current.json`, then `pnpm check:brand`. Package/Storybook builds check that generated artwork, notices and this site's icon files match that version. Shared color tokens and Pretendard do not change. In Storybook, **Brand / Logo / Docs, Usage, Application** demonstrates the actual adapter, canonical SVG comparisons and Nav/Footer composition.
|
package/docs/package-release.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Package verification and release policy
|
|
2
2
|
|
|
3
|
-
This policy covers `@naeil/ui@0.3.0
|
|
3
|
+
This policy covers `@naeil/ui@0.4.0`; the 0.3.0 publication evidence below is retained as history. UI v2 names a design generation, not an npm major. A 0.x minor increment communicates this dependency/export boundary change; future breaking changes must receive an explicit migration and version decision. The historical registry baseline on 2026-10-02 was npm latest at `0.2.0`; the 2026-10-03 publication evidence below records npm 0.3.0, its GitHub Release and live hosted Docs separately. Version-scoped installation is in the [README](../README.md#use-the-ui).
|
|
4
4
|
|
|
5
5
|
## Architecture
|
|
6
6
|
|
|
@@ -33,17 +33,36 @@ pnpm test:browser
|
|
|
33
33
|
|
|
34
34
|
CI runs these checks and a separate actual Storybook/browser job. Configured browser projects run Chromium, Firefox and WebKit in CI. Local Chromium/WebKit results and the Firefox environment launch block are distinguished in the [current support matrix](design/public-ui-support.md) and [dated Stage 3 verification](design/public-ui-stage3-verification.md) and [Stage 4 extension verification](design/public-ui-stage4-verification.md); configured CI is not a recorded remote pass. Automated axe/keyboard checks are not manual screen-reader or native Safari certification. The website build checks compatibility independently from package consumption; fonts fetched through next/font may require network access. Supabase OAuth and deployed behavior remain separate checks.
|
|
35
35
|
|
|
36
|
-
At baseline `bcf99fca3467ae2b1cd29d54fa24f2569fb6001c`, both [push CI](https://github.com/naeil-dev/naeil-ui/actions/runs/36945564443) and [PR CI](https://github.com/naeil-dev/naeil-ui/actions/runs/36945943651) passed package-and-site and failed the browser job. Linux Firefox application coverage passed in those runs. The [final correction follow-up](design/public-ui-final-verification.md) preserves that baseline and the initial local freeze evidence, then records independent scoped review approval and successful [push CI](https://github.com/naeil-dev/naeil-ui/actions/runs/36948276767) and [PR CI](https://github.com/naeil-dev/naeil-ui/actions/runs/36948280881) at exact correction commit `9f90493abb4fb1186c948084026c3f4c04074013`. The PR browser job passed 209 tests with 4 expected Firefox/WebKit forced-colors skips; package-and-site and optional helper checks passed. The downloaded CI preview also passed actual Chromium/WebKit subpath navigation/font checks. This acceptance applies to that source; [
|
|
36
|
+
At baseline `bcf99fca3467ae2b1cd29d54fa24f2569fb6001c`, both [push CI](https://github.com/naeil-dev/naeil-ui/actions/runs/36945564443) and [PR CI](https://github.com/naeil-dev/naeil-ui/actions/runs/36945943651) passed package-and-site and failed the browser job. Linux Firefox application coverage passed in those runs. The [final correction follow-up](design/public-ui-final-verification.md) preserves that baseline and the initial local freeze evidence, then records independent scoped review approval and successful [push CI](https://github.com/naeil-dev/naeil-ui/actions/runs/36948276767) and [PR CI](https://github.com/naeil-dev/naeil-ui/actions/runs/36948280881) at exact correction commit `9f90493abb4fb1186c948084026c3f4c04074013`. The PR browser job passed 209 tests with 4 expected Firefox/WebKit forced-colors skips; package-and-site and optional helper checks passed. The downloaded CI preview also passed actual Chromium/WebKit subpath navigation/font checks. This acceptance applies to that source; [merged PR checks](https://github.com/naeil-dev/naeil-ui/pull/1/checks) retain the release-preparation checks. Subsequent documentation changes require their own verification. Publication and manual platform acceptance remain separate.
|
|
37
37
|
|
|
38
38
|
The explicit font-notice regression gate copies the real React fixture config into scratch and installs only its existing Vite/Tailwind-plugin/font dependencies, with scripts disabled. It loads the installed fixture Vite and checks output ownership and exact OFL bytes. Like clean-consumer checks, it requires network for uncached npm dependencies and cleans scratch on failure.
|
|
39
39
|
|
|
40
40
|
## Publication and deployment
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
### 0.4.0 release scope — 2026-10-11
|
|
43
43
|
|
|
44
|
-
The authorized
|
|
44
|
+
The user authorized repository integration, npm publication, hosted Docs and naeil.dev deployment for the approved `.naeil` logo. Brand 1.1.1 is independent of npm 0.4.0. Existing imports/props/slots remain supported; new Logo variants, grayscale and theme controls justify a minor package increment. New consumers should use the 0.4.0 instructions above the historical records.
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
Follow the release procedure below with version 0.4.0, freeze and publish the inspected archive, and record actual registry/tag/site/Docs outcomes in the v0.4.0 GitHub Release. Authorization is not itself evidence of publication. The previous Supabase-local-runtime and manual-device limitations remain documented; verify production behavior at its actual URL after Vercel deployment.
|
|
47
|
+
|
|
48
|
+
### Verified 0.3.0 publication — 2026-10-03
|
|
49
|
+
|
|
50
|
+
- npm published `@naeil/ui@0.3.0` at `2026-10-03T04:14:17.028Z`; `latest` was verified as `0.3.0` that day. [Public machine-readable evidence](https://github.com/naeil-dev/naeil-ui/releases/download/v0.3.0/npm-publication-verification.json) records registry integrity and fresh consumption.
|
|
51
|
+
- [PR #1](https://github.com/naeil-dev/naeil-ui/pull/1) merged as `71464f3985d0146c85087411d1e2f07ddaaaaab0`, with the same tree as independently approved `0d51755160b3d8e986c9b464b123fa4beed2689a`. Tag `v0.3.0` points to the merge commit; the [GitHub Release](https://github.com/naeil-dev/naeil-ui/releases/tag/v0.3.0) retains the reviewed archive.
|
|
52
|
+
- The registry archive matches the reviewed bytes: **105 files**, **453,120 unpacked bytes**, SHA-256 `b71a81b22354f6b7c17610ef9c02650fbd2a84e4309706e311dd62fe32a66d27`.
|
|
53
|
+
- [Hosted Docs](https://naeil-dev.github.io/naeil-ui/) are live following the 2026-10-02 [Pages run 36963256014](https://github.com/naeil-dev/naeil-ui/actions/runs/36963256014). Recorded Chromium/WebKit checks covered all 13 Docs pages, Docs-to-Usage navigation, local fonts and pinned links.
|
|
54
|
+
|
|
55
|
+
Fresh actual npm installs in separate React/Next apps with empty caches passed types and production builds, production font/fallback checks, mixed-import ownership/StrictMode checks, Chromium/WebKit extension contracts and Next 16.1.7 root/deep prerender. The development overlay probe retains 34 Vite font allowlist warnings and certifies overlay replay only; font success applies to production. Publication did not rerun the full CI/browser suite for unchanged reviewed source/runtime bytes. Native/manual coverage and real-product adoption remain open; see [support limits](design/public-ui-support.md).
|
|
56
|
+
|
|
57
|
+
The immutable npm archive's bundled guides are the release-preparation snapshot. Maintained GitHub guides record subsequent publication status; documentation-only changes do not alter npm 0.3.0, its tag or release asset. Hosted Docs reflect their separately deployed source.
|
|
58
|
+
|
|
59
|
+
### Release procedure
|
|
60
|
+
|
|
61
|
+
The Storybook guide URL base and README documentation index use publication-status documentation snapshot `04c5b8cce145a4c387763db6f28d29e62f7664c7`. Runtime/API source-authority links retain tested component snapshot `81fd395031dc5b20074c4d915a8585360ce2d28a`; that original evidence remains valid and is not replaced by this documentation-only snapshot. Verify targets at their respective pinned revisions and preserve original upstream sources, dated approval scope and runtime evidence. Freeze subsequent documentation changes separately from the immutable 0.3.0 archive.
|
|
62
|
+
|
|
63
|
+
The authorized 0.3.0 release completed main merge, npm 0.3.0, a GitHub Release and hosted Docs as recorded above. The release maintainer performs external authentication and publication; documentation preparation does not itself execute those operations. The automatic verification workflow does not publish or deploy. Record native/manual observations with their actual scope and carry unrun checks as limitations; do not substitute automated WebKit/axe checks or publication authorization for human certification.
|
|
64
|
+
|
|
65
|
+
The 0.3.0 publication procedure below preserves the distinction between preparation and external verification; future releases require their own version, authorization and frozen source/archive:
|
|
47
66
|
|
|
48
67
|
1. Review the changelog, migration, dated verification and the [2026-10-02 native environment report](design/public-ui-release-validation.md). Its capability blockers leave all native/manual acceptance rows open and add no native component pass. Confirm maintained links, actual Storybook Docs/Usage and legal notices for the intended source. Record unresolved manual coverage without inventing passes.
|
|
49
68
|
2. Build and inspect a fresh archive with `npm pack --ignore-scripts --json --pack-destination /path/to/candidate`; preserve its SHA-256, file list and source revision outside the archive. Run boundary/relative-link checks and clean packed consumers on that candidate.
|
|
@@ -71,7 +90,7 @@ Run the command from this checkout after installing its dependencies. It serves
|
|
|
71
90
|
|
|
72
91
|
### Authorized GitHub Pages publication
|
|
73
92
|
|
|
74
|
-
The public Docs destination
|
|
93
|
+
The public Docs destination [https://naeil-dev.github.io/naeil-ui/](https://naeil-dev.github.io/naeil-ui/) is live following the 2026-10-02 [Pages run 36963256014](https://github.com/naeil-dev/naeil-ui/actions/runs/36963256014). The [release](https://github.com/naeil-dev/naeil-ui/releases/tag/v0.3.0) records deployed source and hosted HTTP/navigation checks. Pages uses `build_type=workflow` and a **github-pages** main-only deployment branch policy. See [Docs workflow status](https://github.com/naeil-dev/naeil-ui/actions/workflows/publish-docs-manual.yml) for subsequent deployments; preview artifact checks above establish local artifact behavior only.
|
|
75
94
|
|
|
76
95
|
`.github/workflows/publish-docs-manual.yml` is an explicit `workflow_dispatch` recipe with no PR/push trigger. Pages is configured to use **GitHub Actions**; the **github-pages** environment permits deployment from main only. Run the authorized workflow from main with the exact reviewed source SHA; configuration alone does not establish a successful deployment. The workflow file does not enable Pages itself. A default-branch merge can separately invoke the brand site's existing Vercel integration; that production deployment and its asset/font provenance require separate handling.
|
|
77
96
|
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright (c) 2010-2014 by tyPoland Lukasz Dziedzic (team@latofonts.com) with Reserved Font Name "Lato"
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naeil/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"sideEffects": [
|
|
@@ -130,12 +130,12 @@
|
|
|
130
130
|
"scripts": {
|
|
131
131
|
"dev": "next dev",
|
|
132
132
|
"build": "next build",
|
|
133
|
-
"build:pkg": "tsup && tsup --config tsup.deep.config.ts && tsx scripts/fix-deep-imports.ts && pnpm build:tokens",
|
|
133
|
+
"build:pkg": "pnpm check:brand && tsup && tsup --config tsup.deep.config.ts && tsx scripts/fix-deep-imports.ts && pnpm build:tokens",
|
|
134
134
|
"start": "next start",
|
|
135
135
|
"lint": "eslint",
|
|
136
136
|
"test": "vitest run",
|
|
137
137
|
"storybook": "tsx scripts/prepare-storybook.ts && storybook dev -p 6006",
|
|
138
|
-
"build:storybook": "tsx scripts/prepare-storybook.ts && storybook build && tsx scripts/check-storybook.ts",
|
|
138
|
+
"build:storybook": "pnpm check:brand && tsx scripts/prepare-storybook.ts && storybook build && tsx scripts/check-storybook.ts",
|
|
139
139
|
"build:tokens": "tsx scripts/build-tokens.ts",
|
|
140
140
|
"check:contrast": "tsx scripts/check-contrast.ts",
|
|
141
141
|
"test:browser": "playwright test",
|
|
@@ -143,7 +143,9 @@
|
|
|
143
143
|
"check:types": "tsc --noEmit",
|
|
144
144
|
"check:package:boundary": "tsx scripts/check-package.ts",
|
|
145
145
|
"check:consumers": "tsx scripts/check-consumers.ts",
|
|
146
|
-
"preview:storybook": "tsx scripts/serve-storybook.ts"
|
|
146
|
+
"preview:storybook": "tsx scripts/serve-storybook.ts",
|
|
147
|
+
"build:brand": "tsx scripts/build-brand.ts",
|
|
148
|
+
"check:brand": "tsx scripts/build-brand.ts --check"
|
|
147
149
|
},
|
|
148
150
|
"peerDependencies": {
|
|
149
151
|
"next": "^15 || ^16",
|