@naeil/ui 0.10.0 → 0.11.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 +7 -0
- package/README.md +5 -5
- package/dist/{chunk-F7XM5HJ4.js → chunk-KWEWR46R.js} +1 -1
- package/dist/{chunk-GQO6NMXK.js → chunk-U3IZCFM4.js} +1 -1
- package/dist/components/index.js +2 -2
- package/dist/components/naeil-footer.js +1 -1
- package/dist/components/naeil-header.js +2 -2
- package/dist/lib/ui-release.d.ts +1 -1
- package/dist/lib/ui-release.js +1 -1
- package/dist/naeil-locale/checker.d.ts +1 -1
- package/dist/naeil-locale/checker.js +1 -1
- package/dist/naeil-locale/chrome.js +1 -1
- package/dist/naeil-locale/{chunk-D37JHNUN.js → chunk-4U64K4J3.js} +1 -1
- package/dist/naeil-locale/{chunk-QWHIELL2.js → chunk-U65OQHZY.js} +6 -0
- package/dist/naeil-locale/client.d.ts +1 -1
- package/dist/naeil-locale/client.js +6 -0
- package/dist/naeil-locale/index.d.ts +4 -4
- package/dist/naeil-locale/index.js +1 -1
- package/dist/naeil-locale/{messages-BQ-fnCAJ.d.ts → messages-BuQvB-u2.d.ts} +79 -78
- package/dist/naeil-locale/messages.d.ts +1 -1
- package/dist/naeil-locale/messages.js +2 -2
- package/dist/naeil-locale/server.d.ts +5 -5
- package/dist/naeil-locale/server.js +3 -3
- package/dist/source/lib/ui-release.d.ts +1 -1
- package/dist/source/lib/ui-release.js +1 -1
- package/docs/components/naeil-locale.md +6 -0
- package/docs/package-release.md +20 -6
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.11.0 — AB Storm locale registration (unpublished candidate)
|
|
4
|
+
|
|
5
|
+
- Add the exact owned `abstorm` origin and five protected UI routes to the opt-in locale runtime, with English, Korean and Japanese paths. Keep auth/API/health endpoints outside localized UI routing.
|
|
6
|
+
- Render localized fail-closed documents with the app’s `abstorm` identity; no favicon is declared by the current app.
|
|
7
|
+
- Fix generated locale declarations: JSON imports previously left variable initializers in `.d.ts` output and failed installed-consumer TypeScript checks with library checking enabled. Normalize only those declarations to ambient JSON types; runtime imports and message loading remain unchanged. Clean packed-consumer tests now import the locale API and run `tsc` without `skipLibCheck`.
|
|
8
|
+
- Additive public API release; existing services, default chrome/footer catalogs, messages and chrome contract 1 remain unchanged. Publish the reviewed exact archive to `next`; package publication and consumer adoption remain separate.
|
|
9
|
+
|
|
3
10
|
## 0.10.0 — shared language runtime (unpublished candidate)
|
|
4
11
|
|
|
5
12
|
- Add opt-in `naeil-locale` root, client, server, messages, checker and chrome entries for the owned Next applications. English uses unprefixed paths; Korean/Japanese use `/ko` and `/ja`. Strict route/protocol parsing, legacy receiving aliases, selected JSON loading, ICU validation and committed-intent preference writes share one implementation.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
React components, semantic design tokens, and shared styles for naeil products. The approved system uses a neutral light/dark palette, Pretendard, 16px controls, comfortable or compact density, purpose-specific content widths, and restrained motion. Radix supplies interaction behavior.
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
**0.10.0 published and registry-verified — 2026-11-04.** This release adds the shared language runtime and preserves the page-root scrollbar reservation and scroll-lock correction. The registry archive matches frozen SHA-256 `a4a1e312f2f608358a10f9019c248af37a8172bb116d3bc506144442cb963fb4` (175 files, source/tag `455f2f9aedb108606af2f429c18281260eafd2dd`); verified tags were `latest=0.7.2`, `next=0.10.0`. See the [publication and service acceptance receipts](https://github.com/naeil-dev/naeil-ui/blob/main/docs/design/shared-language-2026-11-04/implementation-progress.md). Hosted Docs remain separately recorded. The retained [local runner](https://github.com/naeil-dev/naeil-ui/blob/main/docs/rollout/local-runner.md) supports historical **0.7.x only** and cannot deploy or recover the current 0.10.0 release.
|
|
6
6
|
|
|
7
7
|
This repository also contains the **naeil.dev brand/example website** and an **optional agent reference workflow**. Choose the path you need:
|
|
8
8
|
|
|
@@ -15,13 +15,13 @@ This repository also contains the **naeil.dev brand/example website** and an **o
|
|
|
15
15
|
|
|
16
16
|
## Use the UI
|
|
17
17
|
|
|
18
|
-
Use React 19 / ReactDOM 19 and Tailwind 4. UI v2 names the design generation independently of npm versioning. The installation example targets 0.
|
|
18
|
+
Use React 19 / ReactDOM 19 and Tailwind 4. UI v2 names the design generation independently of npm versioning. The installation example targets the verified exact 0.10.0 release:
|
|
19
19
|
|
|
20
20
|
```sh
|
|
21
|
-
pnpm add --save-exact @naeil/ui@0.
|
|
21
|
+
pnpm add --save-exact @naeil/ui@0.10.0
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
The [npm 0.
|
|
24
|
+
The [npm 0.10.0 archive](https://registry.npmjs.org/@naeil/ui/-/ui-0.10.0.tgz) is byte-identical to its frozen release archive. Bundled guides record the preparation snapshot; maintained guides record later publication outcomes. For local development, `pnpm build:pkg` and `npm pack --ignore-scripts --pack-destination /tmp` produce `/tmp/naeil-ui-VERSION.tgz`, where `VERSION` is the checked-out `package.json` version (currently the unpublished 0.11.0 candidate). Use the exact reviewed archive for release verification; later source or guide changes require a new freeze. The [0.6.0 release record](https://github.com/naeil-dev/naeil-ui/releases/tag/v0.6.0) retains its archive, publication and deployment evidence.
|
|
25
25
|
|
|
26
26
|
The preceding [0.5.0 release](https://github.com/naeil-dev/naeil-ui/releases/tag/v0.5.0) was published on 2026-10-15 and introduced the whole shared header. Version 0.6.0 adds the shared 1600px frame; existing applications must upgrade and adopt its layout composition.
|
|
27
27
|
|
|
@@ -109,7 +109,7 @@ pnpm pack --pack-destination /tmp
|
|
|
109
109
|
| `pnpm build:pkg` / `pnpm check:package` | Build package / inspect package boundary and independently install/build packed React + Next consumers |
|
|
110
110
|
| `pnpm dev` / `pnpm build` | Brand/example website development / build |
|
|
111
111
|
|
|
112
|
-
A [reusable React consumer example](https://github.com/naeil-dev/naeil-ui/tree/main/examples/react) composes the packaged header, a settings form and footer. [Release policy](docs/package-release.md) and [changelog](CHANGELOG.md) distinguish implementation, publication and deployment. CI verifies the package and separate website/Storybook. Downloadable preview artifacts include notices and local fonts. The current Storybook source defines 17 Docs pages (15 UI families and Brand / Logo plus NaeilHeader), including Usage, JapaneseApplication, ReferenceFull, ReferenceCompact and AccountStates examples. This does not establish a new hosted deployment. [Hosted Docs](https://naeil-dev.github.io/naeil-ui/) have recorded [0.5.0 verification](https://github.com/naeil-dev/naeil-ui/releases/download/v0.5.0/hosted-docs-verification.json); subsequent deployments require their own source and HTTP checks. The same approved brand is live on [naeil.dev](https://naeil.dev/). See [preview instructions](docs/package-release.md#storybook-preview-artifact) and [support limits](docs/design/public-ui-support.md). Native/manual platform acceptance retains its documented limits; service adoption and
|
|
112
|
+
A [reusable React consumer example](https://github.com/naeil-dev/naeil-ui/tree/main/examples/react) composes the packaged header, a settings form and footer. [Release policy](docs/package-release.md) and [changelog](CHANGELOG.md) distinguish implementation, publication and deployment. CI verifies the package and separate website/Storybook. Downloadable preview artifacts include notices and local fonts. The current Storybook source defines 17 Docs pages (15 UI families and Brand / Logo plus NaeilHeader), including Usage, JapaneseApplication, ReferenceFull, ReferenceCompact and AccountStates examples. This does not establish a new hosted deployment. [Hosted Docs](https://naeil-dev.github.io/naeil-ui/) have recorded [0.5.0 verification](https://github.com/naeil-dev/naeil-ui/releases/download/v0.5.0/hosted-docs-verification.json); subsequent deployments require their own source and HTTP checks. The same approved brand is live on [naeil.dev](https://naeil.dev/). See [preview instructions](docs/package-release.md#storybook-preview-artifact) and [support limits](docs/design/public-ui-support.md). Native/manual platform acceptance retains its documented limits; service adoption and rollout have separate [dated records](https://github.com/naeil-dev/naeil-ui/tree/main/docs/rollout).
|
|
113
113
|
|
|
114
114
|
Read [DESIGN.md](DESIGN.md) before shared UI changes. Numeric values live in `src/tokens/`; generated CSS is not edited by hand. Shared styles live in `src/styles/`, site-only styles in `src/app/`. Hero art, 3D scenes, cursor effects, and site content belong to the example website.
|
|
115
115
|
|
|
@@ -1425,7 +1425,7 @@ function NaeilStandaloneMessages({ locale, children }) {
|
|
|
1425
1425
|
}
|
|
1426
1426
|
|
|
1427
1427
|
// src/lib/ui-release.ts
|
|
1428
|
-
var uiRelease = { version: "0.
|
|
1428
|
+
var uiRelease = { version: "0.11.0", contractVersion: "1" };
|
|
1429
1429
|
|
|
1430
1430
|
export {
|
|
1431
1431
|
Logo,
|
package/dist/components/index.js
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
NaeilHeader,
|
|
4
4
|
headerLocales
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-KWEWR46R.js";
|
|
6
6
|
import {
|
|
7
7
|
Logo,
|
|
8
8
|
en_default,
|
|
9
9
|
ja_default,
|
|
10
10
|
ko_default
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-U3IZCFM4.js";
|
|
12
12
|
import {
|
|
13
13
|
SiteFooter
|
|
14
14
|
} from "../chunk-HSTDPY56.js";
|
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
NaeilHeaderAccountControl,
|
|
6
6
|
NaeilHeaderLocaleControl,
|
|
7
7
|
NaeilHeaderThemeControl
|
|
8
|
-
} from "../chunk-
|
|
9
|
-
import "../chunk-
|
|
8
|
+
} from "../chunk-KWEWR46R.js";
|
|
9
|
+
import "../chunk-U3IZCFM4.js";
|
|
10
10
|
import "../chunk-KPE4KKYM.js";
|
|
11
11
|
import "../chunk-JBTDRVZ7.js";
|
|
12
12
|
export {
|
package/dist/lib/ui-release.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const uiRelease: Readonly<{version: "0.
|
|
1
|
+
export declare const uiRelease: Readonly<{version: "0.11.0"; contractVersion: "1"}>;
|
package/dist/lib/ui-release.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const uiRelease = Object.freeze({"version":"0.
|
|
1
|
+
export const uiRelease = Object.freeze({"version":"0.11.0","contractVersion":"1"});
|
|
@@ -1886,7 +1886,7 @@ function Navigation(_a) {
|
|
|
1886
1886
|
}
|
|
1887
1887
|
|
|
1888
1888
|
// src/lib/ui-release.ts
|
|
1889
|
-
var uiRelease = { version: "0.
|
|
1889
|
+
var uiRelease = { version: "0.11.0", contractVersion: "1" };
|
|
1890
1890
|
|
|
1891
1891
|
// src/components/naeil-header-data.ts
|
|
1892
1892
|
var headerLocales = ["en", "ko", "ja"];
|
|
@@ -22,6 +22,7 @@ function assertLocale(value) {
|
|
|
22
22
|
return value;
|
|
23
23
|
}
|
|
24
24
|
var origins = {
|
|
25
|
+
abstorm: "https://abstorm.naeil.dev",
|
|
25
26
|
main: "https://naeil.dev",
|
|
26
27
|
jev: "https://jev.naeil.dev",
|
|
27
28
|
estimate: "https://abestimate.naeil.dev"
|
|
@@ -42,6 +43,11 @@ function defineLocaleService(service) {
|
|
|
42
43
|
}
|
|
43
44
|
var main = defineLocaleService({ id: "main", origin: origins.main, routes: ["/", "/projects", "/design", "/blog", "/blog/[slug]", "/login", { path: "/login/change-password", protected: true }] });
|
|
44
45
|
var naeilServices = {
|
|
46
|
+
abstorm: defineLocaleService({
|
|
47
|
+
id: "abstorm",
|
|
48
|
+
origin: origins.abstorm,
|
|
49
|
+
routes: ["/", "/new", "/runs/[id]", "/runs/[id]/report", "/experts"].map((path) => ({ path, protected: true }))
|
|
50
|
+
}),
|
|
45
51
|
main,
|
|
46
52
|
site: main,
|
|
47
53
|
jev: defineLocaleService({ id: "jev", origin: origins.jev, routes: [{ path: "/", protected: true }, "/login"] }),
|
|
@@ -4,7 +4,7 @@ import { ReactNode } from 'react';
|
|
|
4
4
|
/** Opt-in owned-service routing. The legacy public i18n/routing entry is unchanged. */
|
|
5
5
|
declare const naeilLocales: readonly ["en", "ko", "ja"];
|
|
6
6
|
type NaeilLocale = (typeof naeilLocales)[number];
|
|
7
|
-
type NaeilServiceId = "main" | "jev" | "estimate";
|
|
7
|
+
type NaeilServiceId = "main" | "jev" | "estimate" | "abstorm";
|
|
8
8
|
interface NaeilRoute {
|
|
9
9
|
path: string;
|
|
10
10
|
protected?: boolean;
|
|
@@ -21,6 +21,7 @@ function assertLocale(value) {
|
|
|
21
21
|
return value;
|
|
22
22
|
}
|
|
23
23
|
var origins = {
|
|
24
|
+
abstorm: "https://abstorm.naeil.dev",
|
|
24
25
|
main: "https://naeil.dev",
|
|
25
26
|
jev: "https://jev.naeil.dev",
|
|
26
27
|
estimate: "https://abestimate.naeil.dev"
|
|
@@ -41,6 +42,11 @@ function defineLocaleService(service) {
|
|
|
41
42
|
}
|
|
42
43
|
var main = defineLocaleService({ id: "main", origin: origins.main, routes: ["/", "/projects", "/design", "/blog", "/blog/[slug]", "/login", { path: "/login/change-password", protected: true }] });
|
|
43
44
|
var naeilServices = {
|
|
45
|
+
abstorm: defineLocaleService({
|
|
46
|
+
id: "abstorm",
|
|
47
|
+
origin: origins.abstorm,
|
|
48
|
+
routes: ["/", "/new", "/runs/[id]", "/runs/[id]/report", "/experts"].map((path) => ({ path, protected: true }))
|
|
49
|
+
}),
|
|
44
50
|
main,
|
|
45
51
|
site: main,
|
|
46
52
|
jev: defineLocaleService({ id: "jev", origin: origins.jev, routes: [{ path: "/", protected: true }, "/login"] }),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { N as NaeilLocale, a as LocaleServiceInput } from './messages-
|
|
2
|
-
export { b as LocaleMessageLoaders, L as LocaleMessages, c as LocaleUrlResolution, d as NaeilLocaleService, e as NaeilRoute, f as NaeilServiceId, R as ResolvedLocaleRoute, S as SharedMessages, g as assertLocale, h as defaultLocale, i as defineLocaleService, j as getLocaleService, k as isNaeilLocale, l as localeHref, m as localePath, n as naeilLocales, o as naeilRouting, p as naeilServices, r as resolveLocaleUrl, s as sameLogicalRoute } from './messages-
|
|
1
|
+
import { N as NaeilLocale, a as LocaleServiceInput } from './messages-BuQvB-u2.js';
|
|
2
|
+
export { b as LocaleMessageLoaders, L as LocaleMessages, c as LocaleUrlResolution, d as NaeilLocaleService, e as NaeilRoute, f as NaeilServiceId, R as ResolvedLocaleRoute, S as SharedMessages, g as assertLocale, h as defaultLocale, i as defineLocaleService, j as getLocaleService, k as isNaeilLocale, l as localeHref, m as localePath, n as naeilLocales, o as naeilRouting, p as naeilServices, r as resolveLocaleUrl, s as sameLogicalRoute } from './messages-BuQvB-u2.js';
|
|
3
3
|
|
|
4
|
-
declare const localePreferenceCookie
|
|
5
|
-
declare const developmentPreferenceCookie
|
|
4
|
+
declare const localePreferenceCookie: string;
|
|
5
|
+
declare const developmentPreferenceCookie: string;
|
|
6
6
|
declare function readLocalePreference(cookie: string, development?: boolean): NaeilLocale | undefined;
|
|
7
7
|
declare function preferenceCookieWrites(locale: NaeilLocale, location: {
|
|
8
8
|
hostname: string;
|
|
@@ -12,7 +12,7 @@ declare const naeilRouting: {
|
|
|
12
12
|
};
|
|
13
13
|
declare function isNaeilLocale(value: unknown): value is NaeilLocale;
|
|
14
14
|
declare function assertLocale(value: unknown): NaeilLocale;
|
|
15
|
-
type NaeilServiceId = "main" | "jev" | "estimate";
|
|
15
|
+
type NaeilServiceId = "main" | "jev" | "estimate" | "abstorm";
|
|
16
16
|
interface NaeilRoute {
|
|
17
17
|
path: string;
|
|
18
18
|
protected?: boolean;
|
|
@@ -27,6 +27,7 @@ interface NaeilLocaleService {
|
|
|
27
27
|
}
|
|
28
28
|
declare function defineLocaleService(service: NaeilLocaleService): NaeilLocaleService;
|
|
29
29
|
declare const naeilServices: {
|
|
30
|
+
readonly abstorm: NaeilLocaleService;
|
|
30
31
|
readonly main: NaeilLocaleService;
|
|
31
32
|
readonly site: NaeilLocaleService;
|
|
32
33
|
readonly jev: NaeilLocaleService;
|
|
@@ -60,84 +61,84 @@ declare function localePath(inputService: LocaleServiceInput, unlocalizedRoute:
|
|
|
60
61
|
declare function localeHref(service: LocaleServiceInput, unlocalizedRoute: string, locale: NaeilLocale): string;
|
|
61
62
|
declare function sameLogicalRoute(service: LocaleServiceInput, left: string, right: string): boolean;
|
|
62
63
|
|
|
63
|
-
var naeil
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
64
|
+
declare var naeil: {
|
|
65
|
+
header: {
|
|
66
|
+
nav: {
|
|
67
|
+
home: string;
|
|
68
|
+
projects: string;
|
|
69
|
+
blog: string;
|
|
70
|
+
navigation: string;
|
|
71
|
+
menu: string;
|
|
72
|
+
closeMenu: string;
|
|
73
|
+
};
|
|
74
|
+
theme: {
|
|
75
|
+
switchToLight: string;
|
|
76
|
+
switchToDark: string;
|
|
77
|
+
};
|
|
78
|
+
locale: {
|
|
79
|
+
switchLabel: string;
|
|
80
|
+
};
|
|
81
|
+
projects: {
|
|
82
|
+
cc: {
|
|
83
|
+
name: string;
|
|
84
|
+
description: string;
|
|
85
|
+
};
|
|
86
|
+
pkm: {
|
|
87
|
+
name: string;
|
|
88
|
+
description: string;
|
|
89
|
+
};
|
|
90
|
+
naeilUi: {
|
|
91
|
+
name: string;
|
|
92
|
+
description: string;
|
|
93
|
+
};
|
|
94
|
+
sa: {
|
|
95
|
+
name: string;
|
|
96
|
+
description: string;
|
|
97
|
+
};
|
|
98
|
+
babyAgent: {
|
|
99
|
+
name: string;
|
|
100
|
+
description: string;
|
|
101
|
+
};
|
|
102
|
+
status: {
|
|
103
|
+
active: string;
|
|
104
|
+
coming: string;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
account: {
|
|
109
|
+
menu: string;
|
|
110
|
+
account: string;
|
|
111
|
+
login: string;
|
|
112
|
+
logout: string;
|
|
113
|
+
busy: string;
|
|
114
|
+
};
|
|
115
|
+
footer: {
|
|
116
|
+
navigation: string;
|
|
117
|
+
projects: string;
|
|
118
|
+
blog: string;
|
|
119
|
+
social: string;
|
|
120
|
+
description: string;
|
|
121
|
+
};
|
|
122
|
+
locale: {
|
|
123
|
+
names: {
|
|
124
|
+
en: string;
|
|
125
|
+
ko: string;
|
|
126
|
+
ja: string;
|
|
127
|
+
};
|
|
128
|
+
pending: string;
|
|
129
|
+
failed: string;
|
|
130
|
+
retry: string;
|
|
131
|
+
errors: {
|
|
132
|
+
badRequest: string;
|
|
133
|
+
notFound: string;
|
|
134
|
+
unauthenticated: string;
|
|
135
|
+
forbidden: string;
|
|
136
|
+
unavailable: string;
|
|
137
|
+
};
|
|
138
|
+
};
|
|
138
139
|
};
|
|
139
|
-
var en
|
|
140
|
-
|
|
140
|
+
declare var en: {
|
|
141
|
+
naeil: typeof naeil;
|
|
141
142
|
};
|
|
142
143
|
|
|
143
144
|
declare const __messages_en_json_naeil: typeof naeil;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { b as LocaleMessageLoaders, L as LocaleMessages, M as MessageModule, S as SharedMessages, q as createLocaleMessageLoader, t as loadSharedMessages, u as mergeLocaleMessages, v as recoverMissingMessages } from './messages-
|
|
1
|
+
export { b as LocaleMessageLoaders, L as LocaleMessages, M as MessageModule, S as SharedMessages, q as createLocaleMessageLoader, t as loadSharedMessages, u as mergeLocaleMessages, v as recoverMissingMessages } from './messages-BuQvB-u2.js';
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
loadSharedMessages,
|
|
4
4
|
mergeLocaleMessages,
|
|
5
5
|
recoverMissingMessages
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-4U64K4J3.js";
|
|
7
|
+
import "./chunk-U65OQHZY.js";
|
|
8
8
|
import "./chunk-N3ETBM74.js";
|
|
9
9
|
export {
|
|
10
10
|
createLocaleMessageLoader,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as next_intl_server from 'next-intl/server';
|
|
2
2
|
import { NextResponse, NextRequest } from 'next/server';
|
|
3
|
-
import { a as LocaleServiceInput, R as ResolvedLocaleRoute, N as NaeilLocale, b as LocaleMessageLoaders } from './messages-
|
|
4
|
-
export { q as createLocaleMessageLoader, o as naeilRouting } from './messages-
|
|
3
|
+
import { a as LocaleServiceInput, R as ResolvedLocaleRoute, N as NaeilLocale, b as LocaleMessageLoaders } from './messages-BuQvB-u2.js';
|
|
4
|
+
export { q as createLocaleMessageLoader, o as naeilRouting } from './messages-BuQvB-u2.js';
|
|
5
5
|
|
|
6
|
-
declare const localeRequestHeader
|
|
7
|
-
declare const accessRequestHeader
|
|
8
|
-
declare const pathRequestHeader
|
|
6
|
+
declare const localeRequestHeader: string;
|
|
7
|
+
declare const accessRequestHeader: string;
|
|
8
|
+
declare const pathRequestHeader: string;
|
|
9
9
|
type LocaleRequestKind = "document" | "rsc" | "action" | "other";
|
|
10
10
|
declare function localeRequestKind(request: Pick<NextRequest, "method" | "headers">): LocaleRequestKind;
|
|
11
11
|
/** Only read after createNaeilLocaleProxy has replaced external marker headers. */
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
createLocaleMessageLoader,
|
|
3
3
|
loadSharedMessages,
|
|
4
4
|
recoverMissingMessages
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-4U64K4J3.js";
|
|
6
6
|
import {
|
|
7
7
|
assertLocale,
|
|
8
8
|
getLocaleService,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
naeilLocales,
|
|
12
12
|
naeilRouting,
|
|
13
13
|
resolveLocaleUrl
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-U65OQHZY.js";
|
|
15
15
|
import "./chunk-N3ETBM74.js";
|
|
16
16
|
|
|
17
17
|
// src/naeil-locale/server.ts
|
|
@@ -94,7 +94,7 @@ async function invalidResponse(status, service, kind, locale = "en") {
|
|
|
94
94
|
const copy = (await loadSharedMessages(locale)).naeil.locale;
|
|
95
95
|
const message = copy.errors[status === 400 ? "badRequest" : status === 401 ? "unauthenticated" : status === 403 ? "forbidden" : status === 503 ? "unavailable" : "notFound"];
|
|
96
96
|
const id = getLocaleService(service).id;
|
|
97
|
-
const identity = { main: { name: ".naeil", icon: "/icon.svg" }, jev: { name: "Jev", icon: null }, estimate: { name: "AB Estimate", icon: "/favicon.svg" } }[id];
|
|
97
|
+
const identity = { abstorm: { name: "abstorm", icon: null }, main: { name: ".naeil", icon: "/icon.svg" }, jev: { name: "Jev", icon: null }, estimate: { name: "AB Estimate", icon: "/favicon.svg" } }[id];
|
|
98
98
|
const links = naeilLocales.map((language) => `<li><a lang="${language}" href="${escapeHtml(localePath(service, "/", language))}">${escapeHtml(copy.names[language])}</a></li>`).join("");
|
|
99
99
|
return markPrivate(new NextResponse(`<!doctype html><html lang="${locale}"><head><meta name="robots" content="noindex"><meta name="viewport" content="width=device-width,initial-scale=1">${identity.icon ? `<link rel="icon" href="${identity.icon}">` : ""}<title>${escapeHtml(message)} \u2014 ${identity.name}</title></head><body><h1>${status}</h1><p>${escapeHtml(message)}</p><ul>${links}</ul></body></html>`, { status, headers: { "Content-Type": "text/html; charset=utf-8" } }));
|
|
100
100
|
}
|
|
@@ -37,6 +37,12 @@ Render complete paths with `localePath` for same-service navigation and `localeH
|
|
|
37
37
|
|
|
38
38
|
The canonical chrome can be imported from `/naeil-locale/chrome` under the shared provider. Existing `/naeil-header` and `/naeil-footer` remain standalone compatibility adapters and include the small three-language common dictionary. Consumer Link, auth, save guards, frame overrides, desktop/mobile account locks and project data remain consumer-owned.
|
|
39
39
|
|
|
40
|
+
## AB Storm registration (0.11.0 candidate)
|
|
41
|
+
|
|
42
|
+
`service="abstorm"` binds to exactly `https://abstorm.naeil.dev`. Its protected UI inventory is `/`, `/new`, `/runs/[id]`, `/runs/[id]/report` and `/experts`; `/new?copy=<id>` uses the same registered page. All support English, Korean and Japanese paths. `/auth/session`, `/auth/logout`, `/api/*` and `/health` remain unlocalized protocol endpoints, with no UI exceptions. Unknown UI paths are rejected instead of inheriting the app’s catch-all history fallback.
|
|
43
|
+
|
|
44
|
+
The inventory was checked against AB Storm source `087e67239db26506a73c51fde7a6d246e4a0d0d9`. Generic error documents use its existing `abstorm` title and no favicon. This registration does not add a default header/footer destination or application translations. Consumer provider, routing, authentication, message loading and upgrade remain app-owned; package registration alone does not establish production adoption.
|
|
45
|
+
|
|
40
46
|
## Security and rollout
|
|
41
47
|
|
|
42
48
|
The proxy runs exact existing protocol boundaries first, strips external private markers, strictly classifies UI paths, applies the existing app authorizer, and then runs next-intl. Protected entries without an authorizer fail closed. A marker is only a rendering hint: every protected server data read must independently authorize. RSC denial renders a valid localized access boundary and retains the root draft; it must not send login HTML or redirect an in-progress editor to another document. Keep the root beforeunload guard active during RSC failure and access recovery.
|
package/docs/package-release.md
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
# Package verification and release policy
|
|
2
2
|
|
|
3
|
-
**Published exact baseline: 0.
|
|
3
|
+
**Published exact baseline: 0.10.0 — 2026-11-04.** Source/tag `455f2f9aedb108606af2f429c18281260eafd2dd`, frozen archive SHA-256 `a4a1e312f2f608358a10f9019c248af37a8172bb116d3bc506144442cb963fb4`, 175 regular files. Registry bytes matched; verified tags were `latest=0.7.2`, `next=0.10.0`. See the [publication and three-service acceptance receipts](https://github.com/naeil-dev/naeil-ui/blob/main/docs/design/shared-language-2026-11-04/implementation-progress.md). Historical releases, archives and receipts remain immutable; hosted Docs require their own receipt. The retained [local runner](https://github.com/naeil-dev/naeil-ui/blob/main/docs/rollout/local-runner.md) is a **0.7.x-only, contract 1** release/recovery tool, outside the current 0.10.0 deployment and recovery procedure. UI v2 names a design generation, not an npm major. Version-scoped installation is in the [README](../README.md#use-the-ui).
|
|
4
|
+
|
|
5
|
+
## 0.11.0 candidate — AB Storm locale registry
|
|
6
|
+
|
|
7
|
+
This additive API candidate registers AB Storm's five protected UI routes and error-document identity. Use the manual exact-archive procedure below, publish to `next` and preserve `latest`; the intended tag is `v0.11.0` at the frozen source. The historical 0.7.x runner transaction and chrome contract 1 remain unchanged. Package version, generated `/release` metadata and clean consumer fixture versions move together. Freeze only after all bundled documentation edits, and record source, digest, inventory and final checks outside the archive. Publication, registry verification, consumer adoption, GitHub Release and hosted Docs remain separate maintainer steps.
|
|
4
8
|
|
|
5
9
|
## Architecture
|
|
6
10
|
|
|
7
11
|
One repository contains the shared package and the separate Next.js brand/example website. `@naeil/ui/ui` provides React primitives and generic Navigation/SiteFooter. The opt-in React-only `@naeil/ui/naeil-header` provides the complete actual naeil.dev branded header and `NaeilHeaderAccountControl`; see [its consumer contract](components/naeil-header.md). Owned apps render that control in `authSlot` and supply session state, pending state and guarded callbacks above the header. The legacy root is a framework compatibility entry with static Next/next-intl imports, even when selecting only Logo or a heading; React-only consumers use the documented shared deep modules. Next and next-intl are optional peers, not optional behavior inside the root. Supply them when importing that entry, Nav, Footer, or i18n/routing. Theme controls and Toaster use the framework-independent React library next-themes, retained as a runtime dependency.
|
|
8
12
|
|
|
9
|
-
Owned services use `@naeil/ui/naeil-footer` for the canonical localized destinations in full/compact variants; generic SiteFooter and legacy Footer retain their APIs. Footer navigation adapters preserve application save/flush decisions and modified-click behavior. `@naeil/ui/release` is server-safe metadata; it contains no application artifact, credential or environment. Applications compile their own allowlisted artifact/source identity. See [the footer contract](components/naeil-footer.md).
|
|
13
|
+
Owned services use `@naeil/ui/naeil-footer` for the canonical localized destinations in full/compact variants; generic SiteFooter and legacy Footer retain their APIs. Footer navigation adapters preserve application save/flush decisions and modified-click behavior. `@naeil/ui/release` is server-safe metadata; it contains no application artifact, credential or environment. Applications compile their own allowlisted artifact/source identity. See [the footer contract](components/naeil-footer.md). Historical 0.7.x release plans and transaction recovery use the [local rollout runner](https://github.com/naeil-dev/naeil-ui/blob/main/docs/rollout/local-runner.md); the [rollout records](https://github.com/naeil-dev/naeil-ui/tree/main/docs/rollout) preserve dated evidence and historical policies. Publishing a package, creating an update PR or merging it never establishes complete consumer rollout. Home Console is outside the selected shared-UI rollout.
|
|
10
14
|
|
|
11
15
|
Website tools remain development dependencies so maintainers can develop both products. npm tarball consumers install only component runtime dependencies and their host React/ReactDOM. Build entries, package exports and packed checks constrain the public boundary. There is no bundled website action, Supabase helper, Three/hero/cursor module, blog engine or full application message catalog. The opt-in header includes only its three header dictionaries and canonical project catalog. Its 0.7.2 default catalog contains naeil-ui and references the official `https://naeil.dev/images/whale.png` URL and require network access; no image bytes are bundled, and unresolved artwork redistribution provenance remains in [third-party notices](../THIRD_PARTY_NOTICES.md).
|
|
12
16
|
|
|
@@ -61,6 +65,14 @@ The explicit font-notice regression gate copies the real React fixture config in
|
|
|
61
65
|
|
|
62
66
|
## Publication and deployment
|
|
63
67
|
|
|
68
|
+
### Verified 0.10.0 publication and service acceptance — 2026-11-04
|
|
69
|
+
|
|
70
|
+
The [registry receipt](https://github.com/naeil-dev/naeil-ui/releases/download/v0.10.0/npm-registry-verification.json) verifies the exact frozen archive listed above, including all 175 regular members. [Release v0.10.0](https://github.com/naeil-dev/naeil-ui/releases/tag/v0.10.0) retains its assets at the frozen source. [Implementation progress](https://github.com/naeil-dev/naeil-ui/blob/main/docs/design/shared-language-2026-11-04/implementation-progress.md) and [acceptance](https://github.com/naeil-dev/naeil-ui/blob/main/docs/design/shared-language-2026-11-04/acceptance.md) record Site, Jev and Estimate separately. Those service identities and recovery procedures are outside the old 0.7.x runner; its preserved approval and transaction must not be reused for this release.
|
|
71
|
+
|
|
72
|
+
### Historical 0.8.0 registry checkpoint — 2026-10-29
|
|
73
|
+
|
|
74
|
+
The published 0.8.0 archive matched frozen SHA-256 `6feb5a8cd50265ace584a0855432683b4127119377e08235282eaebd27081084` (139 files, source/tag `3f708e27d05212af7f7a5be769f13f871e8d10c7`). Registry tags at that dated checkpoint were `latest=0.7.2`, `next=0.8.0`. Its Home menu/brand/status/controlled-sheet APIs and package-owned chrome typography remain part of the current public API. This receipt remains historical and does not establish the current registry tags or hosted Docs source.
|
|
75
|
+
|
|
64
76
|
### Verified 0.7.1 registry publication and maintained Docs — 2026-10-23
|
|
65
77
|
|
|
66
78
|
The published release preserves these immutable identities:
|
|
@@ -77,7 +89,7 @@ The frozen archive was published directly with scripts disabled. npm records pub
|
|
|
77
89
|
|
|
78
90
|
The archive's bundled guides are an immutable preparation snapshot, including 0.6.0 installation copy. Release notes must point to maintained instructions. Deploy Docs from a separately reviewed commit containing current guidance, the `v0.7.1` link correction and the corrected manual workflow. Record that Docs SHA, workflow run, deployment and actual hosted checks separately; retain `v0.7.1` at the frozen package source.
|
|
79
91
|
|
|
80
|
-
Postpublication registry checks passed on 2026-10-23. Separate fresh React/Next fixtures installed exact `@naeil/ui@0.7.1` from npmjs with independent empty caches and no repository dependency symlinks; every installed file matched the frozen 139-file inventory in both fixtures. Types, production builds, public root/deep import boundaries, release/footer/account SSR and browser checks passed, including the React fixture's absence of Next/Supabase/Three. The retained `registry-receipt.json` and successful `npm-publication-verification.json` bind these checks to the frozen source/archive; the latter records `checkedAt: 2026-10-23T01:19:50.385Z`. At the 01:19 UTC registry checkpoint, the tag had been pushed and the Release draft prepared. GitHub Release publication, hosted Docs and
|
|
92
|
+
Postpublication registry checks passed on 2026-10-23. Separate fresh React/Next fixtures installed exact `@naeil/ui@0.7.1` from npmjs with independent empty caches and no repository dependency symlinks; every installed file matched the frozen 139-file inventory in both fixtures. Types, production builds, public root/deep import boundaries, release/footer/account SSR and browser checks passed, including the React fixture's absence of Next/Supabase/Three. The retained `registry-receipt.json` and successful `npm-publication-verification.json` bind these checks to the frozen source/archive; the latter records `checkedAt: 2026-10-23T01:19:50.385Z`. At the 01:19 UTC registry checkpoint, the tag had been pushed and the Release draft prepared. GitHub Release publication, hosted Docs and service rollout require separate receipts; see the release assets and [historical 0.7.x rollout runbook](https://github.com/naeil-dev/naeil-ui/blob/main/docs/rollout/local-runner.md). Native/manual, real OAuth and global service-discovery evidence retain their separate scopes and limits.
|
|
81
93
|
|
|
82
94
|
### 0.6.0 release scope — 2026-10-16
|
|
83
95
|
|
|
@@ -115,7 +127,7 @@ The immutable npm archive's bundled guides are the release-preparation snapshot.
|
|
|
115
127
|
|
|
116
128
|
### Release procedure
|
|
117
129
|
|
|
118
|
-
Maintained Storybook resolves relative Markdown guide links against the published `v0.7.2` source `40a3928e24cd2f0141be3e605eed0a75260938fd`.
|
|
130
|
+
Maintained Storybook resolves relative Markdown guide links against the published `v0.7.2` source `40a3928e24cd2f0141be3e605eed0a75260938fd`. Package releases keep that published guide-link target until a separately reviewed Docs release. That tag is independent of the reviewed Docs deployment SHA. Hosted verification checks that the pinned links resolve; the unpublished `v0.7.0` tag is not a valid target. Historical foundation/source-authority links remain at their original revisions. Freeze subsequent documentation changes separately from immutable release archives.
|
|
119
131
|
|
|
120
132
|
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.
|
|
121
133
|
|
|
@@ -132,9 +144,11 @@ npm publication, GitHub Releases, main merge and hosted Docs are distinct operat
|
|
|
132
144
|
`vercel.json` disables Git deployments only for `feat/public-ui-readiness`. Other branches retain Vercel's default behavior, so merging or pushing another branch requires a separate deployment decision. The automatic GitHub Actions checks are verification-only; enabling repository workflows is not evidence of a hosted site or approved release.
|
|
133
145
|
|
|
134
146
|
|
|
135
|
-
###
|
|
147
|
+
### Historical manual exact-archive preparation for 0.9.0 (following 0.8.0)
|
|
148
|
+
|
|
149
|
+
The following preparation requirements and deployment hold describe the October 29 checkpoint. The November 4 release and accepted service state are recorded above; this historical section does not describe current service versions or pending approval.
|
|
136
150
|
|
|
137
|
-
The
|
|
151
|
+
The retained `scripts/rollout/prepare-release.mjs` accepts consecutive stable 0.7.x releases only. Do not change rollout policy, `release.json` or the chrome contract to admit 0.9.0. Use the manual release procedure above: complete G1–G7 from the [adopted root-frame contract](https://github.com/naeil-dev/naeil-ui/blob/434b7d07235316097ca3a55265ee02c1422b0cfd/docs/superpowers/specs/2026-10-29-page-root-scrollbar-gutter.md), including the retained 0.8.0 P1–P5 regressions, freeze the exact source SHA/archive, then run boundary and clean React/Next checks with `NAEIL_UI_EXPECTED_ARCHIVE_SHA256`. The paired browser gate accepts `NAEIL_UI_CHROME_PACKAGE=/absolute/extracted/package` to exercise that exact archive, alongside SHA-512-pinned 0.7.2 and SHA-256-pinned frozen 0.8.0. Reference-only root/lock CSS adjustments are separate hashed fixture files; immutable archives stay untouched. Both classic and overlay jobs require actual probes. Viewport captures have geometry guards; all acceptance measurement precedes any terminal fullPage capture. It retains numeric differences and screenshots for human review; new renders never replace expectations automatically.
|
|
138
152
|
|
|
139
153
|
Before npm publication, the separately approved source push must make the linked adopted contract at `434b7d07235316097ca3a55265ee02c1422b0cfd` public. Immediately after that push, verify an anonymous HTTP 200 for the exact guide URL and confirm its status says **rev 1, adopted 2026-10-29**. Local link/boundary checks do not establish public reachability. Source push may trigger Vercel deployment and retains its own approval boundary.
|
|
140
154
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naeil/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"sideEffects": [
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
"scripts": {
|
|
175
175
|
"dev": "next dev",
|
|
176
176
|
"build": "next build",
|
|
177
|
-
"build:pkg": "pnpm check:messages && pnpm build:release && pnpm check:brand && tsup && tsup --config tsup.deep.config.ts && tsup --config tsup.locale.config.ts && tsx scripts/copy-locale-json.ts && tsx scripts/fix-deep-imports.ts && pnpm build:tokens && node scripts/build-release-entry.mjs && pnpm check:locale:package",
|
|
177
|
+
"build:pkg": "pnpm check:messages && pnpm build:release && pnpm check:brand && tsup && tsup --config tsup.deep.config.ts && tsup --config tsup.locale.config.ts && tsx scripts/fix-locale-declarations.ts && tsx scripts/copy-locale-json.ts && tsx scripts/fix-deep-imports.ts && pnpm build:tokens && node scripts/build-release-entry.mjs && pnpm check:locale:package",
|
|
178
178
|
"start": "next start",
|
|
179
179
|
"lint": "eslint",
|
|
180
180
|
"test": "vitest run",
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
"build:brand": "tsx scripts/build-brand.ts",
|
|
192
192
|
"check:brand": "tsx scripts/build-brand.ts --check",
|
|
193
193
|
"build:release": "node scripts/build-ui-release.mjs",
|
|
194
|
-
"rollout": "node scripts/rollout/
|
|
194
|
+
"rollout": "node scripts/rollout/local-cli.mjs",
|
|
195
195
|
"test:rollout": "node --test scripts/rollout/*.test.mjs scripts/verify-ui-production.test.mjs",
|
|
196
196
|
"check:messages": "tsx scripts/check-locale-messages.ts",
|
|
197
197
|
"check:locale:package": "tsx scripts/check-locale-package.ts"
|