@noobsociety/nsds 0.3.0 → 0.4.1

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 (41) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/CONTRIBUTING.md +43 -2
  3. package/README.md +87 -36
  4. package/SECURITY.md +38 -4
  5. package/dist/client/index.cjs +1 -0
  6. package/dist/client/index.d.cts +6 -0
  7. package/dist/client/index.d.ts +6 -0
  8. package/dist/client/index.js +5 -0
  9. package/dist/components/_card-base.css +99 -0
  10. package/dist/components/hud/HUDBar.d.ts +16 -3
  11. package/dist/components/hud/HUDChat.d.ts +26 -0
  12. package/dist/components/hud/HUDJoystick.d.ts +21 -0
  13. package/dist/components/hud/HUDMinimap.d.ts +14 -0
  14. package/dist/components/hud/HUDPanel.d.ts +25 -0
  15. package/dist/components/hud/HUDTabWindow.d.ts +37 -0
  16. package/dist/components/hud-editor.css +197 -0
  17. package/dist/components/icons/RPGIcon.d.ts +15 -11
  18. package/dist/components/icons/registry.d.ts +37 -0
  19. package/dist/components/primitives.css +50 -20
  20. package/dist/components/react/index.d.ts +12 -2
  21. package/dist/components/scene-builder.css +740 -0
  22. package/dist/components/scene-builder.js +3039 -0
  23. package/dist/components/shared/constants.d.ts +41 -0
  24. package/dist/components/shared/styles.d.ts +1 -42
  25. package/dist/index.cjs +1 -1
  26. package/dist/index.js +6173 -1821
  27. package/dist/registry-BizUEm6W.js +136 -0
  28. package/dist/registry-Cyq-qspU.cjs +1 -0
  29. package/dist/styles.css +1 -0
  30. package/dist/tailwind/preset.cjs +108 -0
  31. package/dist/tailwind/preset.d.cts +3 -3
  32. package/dist/tokens/base.css +17 -4
  33. package/dist/tokens/colors.css +57 -53
  34. package/dist/tokens/hud.css +119 -78
  35. package/dist/tokens/motion.css +57 -23
  36. package/dist/tokens/spacing.css +39 -39
  37. package/dist/tokens/typography.css +20 -20
  38. package/package.json +41 -12
  39. package/dist/tailwind/package.json +0 -1
  40. package/dist/tailwind/preset.d.ts +0 -4
  41. package/dist/tailwind/preset.js +0 -144
package/CHANGELOG.md CHANGED
@@ -6,6 +6,48 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.4.1] - 2026-06-28
10
+
11
+ ### Added
12
+
13
+ - Added five HUD React components — `HUDChat`, `HUDJoystick`, `HUDMinimap`, `HUDPanel`, and `HUDTabWindow` — each with Storybook stories, component tests, and named exports from `@noobsociety/nsds` and `@noobsociety/nsds/react`.
14
+ - Expanded `RPGIcon` to 68 pixel-art glyphs across 11 groups, adding the attack, skills, items, equip, skins, menu, and emote categories with matching name, group, and type registries on `@noobsociety/nsds` and `@noobsociety/nsds/client`.
15
+ - Added `HUDBar` bar variants (`hp`, `mp`, `xp`, `stamina`) with optional or hidden labels and segmented fills.
16
+ - Added the `--hud-edit-*` editor-chrome token group, plus HUD text-scale, stamina, minimap-path, grid-overlay, and 24×24 canvas/grid tokens, to `tokens/hud.css`.
17
+ - Added `components/hud-editor.css` (token-driven in-game HUD editor chrome) to the CSS entry point, and shipped `components/scene-builder.css`, `components/scene-builder.js`, and `components/_card-base.css` as design-system source.
18
+
19
+ ### Changed
20
+
21
+ - Redrew `RPGIcon` artwork on a 24×24 viewBox (existing glyphs preserved) and renamed the chat emotes to NoobSociety command codes (`emote-tysm`, `emote-sos`, `emote-lol`, `emote-win`, `emote-lgo`, `emote-ugh`, `emote-myb`, `emote-wut`, `emote-grr`).
22
+ - Restructured `QuestCard` with a header (gate number and name) and per-status data attributes, and moved quest-card colours onto `--ns-quest-*` tokens.
23
+
24
+ ## [0.4.0] - 2026-06-22
25
+
26
+ ### Added
27
+
28
+ - Added a `@noobsociety/nsds/client` export for renderer-neutral 21.06 metadata, token references, quest status metadata, and RPG icon registries.
29
+ - Added a Node 22 local runtime pin for contributor setup parity with CI.
30
+
31
+ ### Changed
32
+
33
+ - Extracted shared token, quest status, and RPG icon registry metadata out of React-only modules.
34
+ - Removed duplicate primitive stylesheet links from static browser fixtures.
35
+
36
+ ### Fixed
37
+
38
+ - Added the missing `--hud-divider` alias used by HUD fixture surfaces.
39
+
40
+ ## [0.3.1] - 2026-06-20
41
+
42
+ ### Added
43
+
44
+ - Stored visual regression snapshots for the public component specimen and UI kit surfaces.
45
+
46
+ ### Changed
47
+
48
+ - Tailwind preset source is now first-class TypeScript with generated CommonJS and declaration output.
49
+ - Package validation now requires the visual fixture, visual snapshots, and generated Tailwind preset output.
50
+
9
51
  ## [0.3.0] - 2026-06-20
10
52
 
11
53
  ### Added
@@ -91,7 +133,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
91
133
 
92
134
  - Initial NSDS package with tokens, CSS primitives, React components, and Tailwind support.
93
135
 
94
- [Unreleased]: https://github.com/noobsociety/nsds/compare/v0.3.0...HEAD
136
+ [Unreleased]: https://github.com/noobsociety/nsds/compare/v0.4.1...HEAD
137
+ [0.4.1]: https://github.com/noobsociety/nsds/compare/v0.4.0...v0.4.1
138
+ [0.4.0]: https://github.com/noobsociety/nsds/compare/v0.3.1...v0.4.0
139
+ [0.3.1]: https://github.com/noobsociety/nsds/compare/v0.3.0...v0.3.1
95
140
  [0.3.0]: https://github.com/noobsociety/nsds/compare/v0.2.1...v0.3.0
96
141
  [0.2.1]: https://github.com/noobsociety/nsds/compare/v0.2.0...v0.2.1
97
142
  [0.2.0]: https://github.com/noobsociety/nsds/compare/v0.1.2...v0.2.0
package/CONTRIBUTING.md CHANGED
@@ -4,13 +4,18 @@ NSDS is the NoobSociety Design System. Changes should keep the package small, re
4
4
 
5
5
  ## Local setup
6
6
 
7
- Use Node.js 22 or newer.
7
+ Use Node.js 22 or newer. The repo pins Node 22 in `.nvmrc` for parity with CI; with nvm, run
8
+ `nvm use` to match it.
8
9
 
9
10
  ```bash
11
+ nvm use
10
12
  npm install
11
13
  npm run check
12
14
  ```
13
15
 
16
+ See [QUALITY.md](./QUALITY.md) for the package gate, release evidence, visual baseline policy, and
17
+ tagging rules.
18
+
14
19
  Run Storybook while changing components:
15
20
 
16
21
  ```bash
@@ -73,7 +78,7 @@ npm run changeset:version
73
78
 
74
79
  This command applies the Changesets version plan and updates `CHANGELOG.md` from the `[Unreleased]` section. Open the result as a release pull request.
75
80
 
76
- Publishing is handled by the release workflow after the release pull request is merged to `main`, when `NPM_TOKEN` is configured:
81
+ Publishing is handled by the release workflow after the release pull request is merged to `main`, when `NPM_TOKEN` is configured. When the package version is not already on npm, the workflow publishes the package and creates an annotated `vX.Y.Z` tag on the published commit.
77
82
 
78
83
  ```bash
79
84
  npm run changeset:publish
@@ -107,9 +112,17 @@ npm run test:visual
107
112
  Install and export checks run as part of `npm run check`, and can be run directly:
108
113
 
109
114
  ```bash
115
+ npm run check:commits
116
+ npm run check:content
117
+ npm run check:deps
110
118
  npm run check:docs
111
119
  npm run check:exports
112
120
  npm run check:install
121
+ npm run check:markdown
122
+ npm run check:release
123
+ npm run check:workflows
124
+ npm run format:check
125
+ npm run lint
113
126
  ```
114
127
 
115
128
  ## Release checks
@@ -122,6 +135,26 @@ npm run build:storybook
122
135
  npm run release:dry-run
123
136
  ```
124
137
 
138
+ Use this order for package work: commit locally on a feature branch, open the
139
+ pull request from that branch, merge the reviewed PR to `main`, then let the
140
+ release workflow tag only after a version publishes.
141
+
142
+ Before opening the PR, squash local role-pass cleanup commits into the smallest
143
+ reviewable set that preserves the package-facing change. Use the PR title as the
144
+ intended squash commit subject, and keep the squash body as one contiguous
145
+ bullet list of meaningful branch changes. Commit generated API docs with the
146
+ source or TypeDoc configuration change that generated them.
147
+
148
+ Complete the pull request template before requesting review:
149
+
150
+ - Summary uses checklist items for concrete changes.
151
+ - PR description bullet items stay at or below 100 characters.
152
+ - Verification commands are fenced as `bash` blocks.
153
+ - PR text uses repo-relative paths and omits local-only workflow paths.
154
+ - Changeset and changelog status are declared.
155
+ - Release tag timing is declared.
156
+ - Squash shape is confirmed.
157
+
125
158
  Before publishing manually:
126
159
 
127
160
  ```bash
@@ -130,6 +163,14 @@ npm run release:dry-run
130
163
  npm run changeset:publish
131
164
  ```
132
165
 
166
+ When a release tag must be repaired manually, use the release tag helper on the final release
167
+ commit. Do not create or push tags before the reviewed release PR has merged unless the target
168
+ commit will not change.
169
+
170
+ ```bash
171
+ node scripts/tag-release.mjs
172
+ ```
173
+
133
174
  ## License guidance
134
175
 
135
176
  NSDS uses the [MIT License](./LICENSE), selected from [Choose a License](https://choosealicense.com/licenses/mit/).
package/README.md CHANGED
@@ -1,8 +1,13 @@
1
1
  # NoobSociety Design System
2
2
 
3
- Reusable design tokens, CSS primitives, Tailwind preset, and pixel-art React components for NoobSociety.
3
+ [![CI](https://github.com/noobsociety/nsds/actions/workflows/ci.yml/badge.svg)](https://github.com/noobsociety/nsds/actions/workflows/ci.yml)
4
+ [![Release](https://github.com/noobsociety/nsds/actions/workflows/release.yml/badge.svg)](https://github.com/noobsociety/nsds/actions/workflows/release.yml)
5
+ [![npm version](https://img.shields.io/npm/v/@noobsociety/nsds.svg)](https://www.npmjs.com/package/@noobsociety/nsds)
6
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
4
7
 
5
- NSDS is Tailwind-first and token-driven. It ships the public package surface needed by product apps: React components, CSS tokens, primitives, and a Tailwind preset.
8
+ Reusable design tokens, client registries, CSS primitives, Tailwind preset, and pixel-art React components for NoobSociety.
9
+
10
+ NSDS is Tailwind-first and token-driven. It ships the public package surface needed by product apps: client registries, React components, CSS tokens, primitives, and a Tailwind preset.
6
11
 
7
12
  ## Contents
8
13
 
@@ -11,6 +16,7 @@ NSDS is Tailwind-first and token-driven. It ships the public package surface nee
11
16
  - [Package exports](#package-exports)
12
17
  - [Components](#components)
13
18
  - [Documentation](#documentation)
19
+ - [Quality](#quality)
14
20
  - [Repository layout](#repository-layout)
15
21
  - [Development](#development)
16
22
  - [Versioning and releases](#versioning-and-releases)
@@ -36,6 +42,14 @@ Import the CSS entry once in your app:
36
42
  import '@noobsociety/nsds/styles';
37
43
  ```
38
44
 
45
+ Use renderer-neutral client registries when code needs shared names without React:
46
+
47
+ ```ts
48
+ import { nsClientRelease, rpgIconNames } from '@noobsociety/nsds/client';
49
+
50
+ console.log(nsClientRelease, rpgIconNames.includes('sword'));
51
+ ```
52
+
39
53
  Use React components from the package root:
40
54
 
41
55
  ```tsx
@@ -66,16 +80,17 @@ export default {
66
80
 
67
81
  ## Package exports
68
82
 
69
- | Export | Purpose |
70
- | --- | --- |
71
- | `@noobsociety/nsds` | React components |
72
- | `@noobsociety/nsds/react` | Compatibility alias for React components |
73
- | `@noobsociety/nsds/tailwind` | Tailwind preset mapped to `--ns-*` tokens |
74
- | `@noobsociety/nsds/styles` | Full CSS entry |
75
- | `@noobsociety/nsds/styles.css` | CSS entry compatibility alias |
76
- | `@noobsociety/nsds/tokens/*` | Individual token CSS files |
77
- | `@noobsociety/nsds/primitives` | Component primitive CSS |
78
- | `@noobsociety/nsds/components/primitives.css` | Component primitive CSS compatibility alias |
83
+ | Export | Purpose |
84
+ | --------------------------------------------- | ------------------------------------------------------ |
85
+ | `@noobsociety/nsds` | React components |
86
+ | `@noobsociety/nsds/react` | Compatibility alias for React components |
87
+ | `@noobsociety/nsds/client` | Renderer-neutral client registries and shared metadata |
88
+ | `@noobsociety/nsds/tailwind` | Tailwind preset mapped to `--ns-*` tokens |
89
+ | `@noobsociety/nsds/styles` | Full CSS entry |
90
+ | `@noobsociety/nsds/styles.css` | CSS entry compatibility alias |
91
+ | `@noobsociety/nsds/tokens/*` | Individual token CSS files |
92
+ | `@noobsociety/nsds/primitives` | Component primitive CSS |
93
+ | `@noobsociety/nsds/components/primitives.css` | Component primitive CSS compatibility alias |
79
94
 
80
95
  The npm package ships `dist/` plus package metadata, changelog, contribution guidance, security policy, and license.
81
96
 
@@ -87,12 +102,19 @@ Public React components:
87
102
  - `FeatureCard`
88
103
  - `QuestCard`
89
104
  - `HUDBar`
105
+ - `HUDChat`
90
106
  - `HUDDivider`
107
+ - `HUDJoystick`
91
108
  - `HUDLabel`
109
+ - `HUDMinimap`
110
+ - `HUDPanel`
111
+ - `HUDTabWindow`
92
112
  - `RPGIcon`
93
113
  - `HUDIcon`
94
114
  - `SectionArrow`
95
115
 
116
+ `RPGIcon` ships 68 pixel-art glyphs across 11 groups: weapons, elements, races, sizes, attack, skills, items, equip, skins, menu, and emotes. The renderer-neutral icon name, group, and type registries are also exported from `@noobsociety/nsds/client`.
117
+
96
118
  Run Storybook for component documentation:
97
119
 
98
120
  ```bash
@@ -122,43 +144,68 @@ npm run docs:api
122
144
 
123
145
  The static landing page lives in [`site/`](./site/index.html).
124
146
 
147
+ ## Quality
148
+
149
+ See [QUALITY.md](./QUALITY.md) for the package gate, release evidence, visual baseline policy, and
150
+ tagging rules.
151
+
152
+ Before opening a pull request, run:
153
+
154
+ ```bash
155
+ npm run check
156
+ npm run build:storybook
157
+ npm run release:dry-run
158
+ ```
159
+
125
160
  ## Repository layout
126
161
 
127
- | Path | Purpose |
128
- | --- | --- |
129
- | `styles.css` | Public CSS entry point |
130
- | `tokens/` | CSS custom properties for color, type, spacing, motion, and HUD values |
131
- | `components/` | TypeScript React source, primitive CSS, and Storybook stories |
132
- | `tailwind/` | Tailwind preset source |
133
- | `docs/` | Public documentation and generated API reference |
134
- | `site/` | Static public landing page |
135
- | `tests/` | Component and browser-rendered visual checks |
162
+ | Path | Purpose |
163
+ | ------------- | ---------------------------------------------------------------------- |
164
+ | `styles.css` | Public CSS entry point |
165
+ | `client/` | Renderer-neutral client registry entry point |
166
+ | `tokens/` | CSS custom properties for color, type, spacing, motion, and HUD values |
167
+ | `components/` | TypeScript React source, primitive CSS, and Storybook stories |
168
+ | `tailwind/` | Tailwind preset source |
169
+ | `docs/` | Public documentation and generated API reference |
170
+ | `site/` | Static public landing page |
171
+ | `tests/` | Component and browser-rendered visual checks |
136
172
 
137
173
  ## Development
138
174
 
139
- Use Node.js 22 or newer.
175
+ Use Node.js 22 or newer. The repo pins Node 22 in `.nvmrc` for parity with CI; with nvm, run
176
+ `nvm use` to match it.
140
177
 
141
178
  ```bash
179
+ nvm use
142
180
  npm install
143
181
  npm run check
144
182
  ```
145
183
 
146
184
  Common scripts:
147
185
 
148
- | Script | Purpose |
149
- | --- | --- |
150
- | `npm run build` | Build the package into `dist/` |
151
- | `npm run check` | Run build, package guards, type checks, tests, and import smoke checks |
152
- | `npm run check:docs` | Regenerate API docs and fail when generated docs drift |
153
- | `npm run check:exports` | Validate npm exports and declaration entry points |
154
- | `npm run check:install` | Install the packed package in a temporary consumer project |
155
- | `npm run docs:api` | Generate markdown API reference from TypeScript source |
156
- | `npm run storybook` | Start component documentation locally |
157
- | `npm run build:storybook` | Build static component documentation |
158
- | `npm run test:components` | Run component behavior tests |
159
- | `npm run test:visual` | Run browser-rendered visual checks |
160
- | `npm run release:dry-run` | Preview the npm package contents |
161
- | `npm run changeset` | Add a release note and version intent |
186
+ | Script | Purpose |
187
+ | ------------------------- | ---------------------------------------------------------------------- |
188
+ | `npm run build` | Build the package into `dist/` |
189
+ | `npm run check` | Run build, package guards, type checks, tests, and import smoke checks |
190
+ | `npm run check:content` | Catch local path leaks in committed text |
191
+ | `npm run check:commits` | Validate branch commit messages with Commitlint |
192
+ | `npm run check:deps` | Validate dependency pins and cross-platform lockfile coverage |
193
+ | `npm run check:docs` | Regenerate API docs and fail when generated docs drift |
194
+ | `npm run check:exports` | Validate npm exports and declaration entry points |
195
+ | `npm run check:install` | Install the packed package in a temporary consumer project |
196
+ | `npm run check:markdown` | Lint authored Markdown docs and templates |
197
+ | `npm run check:package` | Validate package metadata, required files, and dist shape |
198
+ | `npm run check:release` | Validate release scripts, changelog links, and tag workflow wiring |
199
+ | `npm run check:workflows` | Validate GitHub workflow syntax and Node 22 pins |
200
+ | `npm run docs:api` | Generate markdown API reference from TypeScript source |
201
+ | `npm run format:check` | Check repository formatting with Prettier |
202
+ | `npm run lint` | Lint source, tests, scripts, and configs with ESLint |
203
+ | `npm run storybook` | Start component documentation locally |
204
+ | `npm run build:storybook` | Build static component documentation |
205
+ | `npm run test:components` | Run component behavior tests |
206
+ | `npm run test:visual` | Run browser-rendered visual checks |
207
+ | `npm run release:dry-run` | Preview the npm package contents |
208
+ | `npm run changeset` | Add a release note and version intent |
162
209
 
163
210
  ## Versioning and releases
164
211
 
@@ -180,6 +227,10 @@ That command applies Changesets version bumps and promotes the current `[Unrelea
180
227
 
181
228
  Open and merge the version commit as a normal release pull request. The release workflow publishes from `main` when the package version is not already on npm and `NPM_TOKEN` is configured.
182
229
 
230
+ After a successful new publish, the workflow creates an annotated `vX.Y.Z` tag on the published
231
+ commit. Tag messages use the NoobSociety release-note style: one concise subject, one factual
232
+ paragraph, and a footprint sentence grounded in the release diff.
233
+
183
234
  Manual publishing remains available for maintainers after the version commit is prepared:
184
235
 
185
236
  ```bash
package/SECURITY.md CHANGED
@@ -1,11 +1,45 @@
1
1
  # Security
2
2
 
3
- NSDS is a design system package, but security issues can still happen through package metadata, published assets, examples, or dependency changes.
3
+ NSDS is a design system package, but security issues can still happen through package metadata,
4
+ published assets, examples, or dependency changes.
4
5
 
5
- Please report security issues through GitHub Security Advisories for this repository when available. Avoid opening a public issue for a vulnerability until it has been reviewed.
6
+ ## Scope
7
+
8
+ This policy covers the published `@noobsociety/nsds` npm package, repository automation, package
9
+ metadata, examples, and dependency changes.
10
+
11
+ ## What to report
12
+
13
+ - Package contents that execute unintended code in consumer projects
14
+ - Dependency or workflow changes that create a supply-chain risk
15
+ - Published assets or examples that expose private information
16
+ - Security issues in package metadata or release automation
17
+
18
+ Not in scope: design opinions, missing components, visual regressions, or normal dependency
19
+ freshness requests without a vulnerability.
20
+
21
+ ## How to report
22
+
23
+ Open a
24
+ [private security advisory](https://github.com/noobsociety/nsds/security/advisories/new)
25
+ on GitHub to report a vulnerability confidentially.
26
+
27
+ If you prefer email, write to **<ejelome@gmail.com>** with the subject line `[SECURITY] nsds`.
28
+
29
+ Avoid opening a public issue for a vulnerability until it has been reviewed.
6
30
 
7
31
  Supported release line:
8
32
 
9
33
  | Version | Supported |
10
- |---|---|
11
- | `0.x` | Yes |
34
+ | ------- | --------- |
35
+ | `0.x` | Yes |
36
+
37
+ ## Response commitment
38
+
39
+ We will acknowledge your report within **5 business days** and keep you updated until the issue is
40
+ resolved or confirmed as a non-issue.
41
+
42
+ ## Disclosure
43
+
44
+ Verified issues are fixed before public disclosure. Researchers who want to be credited will be
45
+ named in the changelog entry for the fix.
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../registry-Cyq-qspU.cjs");var t=`21.06`,n=[`web`,`game`];exports.NS=e.p,exports.icons=e.c,exports.rpgIconNames=e.c,exports.nsClientRelease=t,exports.nsClientTargets=n,exports.nsTokens=e.m,exports.questStatus=e.h,exports.rpgIconAttack=e.t,exports.rpgIconElements=e.n,exports.rpgIconEmotes=e.r,exports.rpgIconEquip=e.i,exports.rpgIconGroups=e.a,exports.rpgIconItems=e.o,exports.rpgIconMenu=e.s,exports.rpgIconRaces=e.l,exports.rpgIconSizes=e.u,exports.rpgIconSkills=e.d,exports.rpgIconWeapons=e.f;
@@ -0,0 +1,6 @@
1
+ export { NS, nsTokens, questStatus } from '../components/shared/constants.js';
2
+ export { rpgIconAttack, rpgIconElements, rpgIconEmotes, rpgIconEquip, rpgIconGroups, rpgIconItems, rpgIconMenu, rpgIconNames, rpgIconRaces, rpgIconSizes, rpgIconSkills, rpgIconWeapons, rpgIconNames as icons, } from '../components/icons/registry.js';
3
+ export type { RPGIconAttack, RPGIconElement, RPGIconEmote, RPGIconEquip, RPGIconItem, RPGIconMenu, RPGIconName, RPGIconRace, RPGIconSize, RPGIconSkin, RPGIconWeapon, } from '../components/icons/registry.js';
4
+ export declare const nsClientRelease: "21.06";
5
+ export declare const nsClientTargets: readonly ["web", "game"];
6
+ export type NSClientTarget = (typeof nsClientTargets)[number];
@@ -0,0 +1,6 @@
1
+ export { NS, nsTokens, questStatus } from '../components/shared/constants.js';
2
+ export { rpgIconAttack, rpgIconElements, rpgIconEmotes, rpgIconEquip, rpgIconGroups, rpgIconItems, rpgIconMenu, rpgIconNames, rpgIconRaces, rpgIconSizes, rpgIconSkills, rpgIconWeapons, rpgIconNames as icons, } from '../components/icons/registry.js';
3
+ export type { RPGIconAttack, RPGIconElement, RPGIconEmote, RPGIconEquip, RPGIconItem, RPGIconMenu, RPGIconName, RPGIconRace, RPGIconSize, RPGIconSkin, RPGIconWeapon, } from '../components/icons/registry.js';
4
+ export declare const nsClientRelease: "21.06";
5
+ export declare const nsClientTargets: readonly ["web", "game"];
6
+ export type NSClientTarget = (typeof nsClientTargets)[number];
@@ -0,0 +1,5 @@
1
+ import { a as e, c as t, d as n, f as r, h as i, i as a, l as o, m as s, n as c, o as l, p as u, r as d, s as f, t as p, u as m } from "../registry-BizUEm6W.js";
2
+ //#region client/index.ts
3
+ var h = "21.06", g = ["web", "game"];
4
+ //#endregion
5
+ export { u as NS, t as icons, t as rpgIconNames, h as nsClientRelease, g as nsClientTargets, s as nsTokens, i as questStatus, p as rpgIconAttack, c as rpgIconElements, d as rpgIconEmotes, a as rpgIconEquip, e as rpgIconGroups, l as rpgIconItems, f as rpgIconMenu, o as rpgIconRaces, m as rpgIconSizes, n as rpgIconSkills, r as rpgIconWeapons };
@@ -0,0 +1,99 @@
1
+ /* NoobSociety DS — Shared card base styles
2
+ Import this in every .card.html after styles.css:
3
+ <link rel="stylesheet" href="../_card-base.css">
4
+ (adjust path depth as needed)
5
+ Never override these fundamentals in per-card <style> blocks —
6
+ extend them instead.
7
+ */
8
+
9
+ *,
10
+ *::before,
11
+ *::after {
12
+ box-sizing: border-box;
13
+ margin: 0;
14
+ padding: 0;
15
+ }
16
+
17
+ body {
18
+ background: var(--ns-bg-0);
19
+ padding: 24px 28px;
20
+ font-family: var(--ns-font-pixel);
21
+ color: var(--ns-ink);
22
+ display: flex;
23
+ flex-direction: column;
24
+ gap: 20px;
25
+ overflow: auto;
26
+ }
27
+
28
+ /* ── Section ─────────────────────────────────── */
29
+ .card-section {
30
+ display: flex;
31
+ flex-direction: column;
32
+ }
33
+
34
+ .section-label {
35
+ font-size: 7px;
36
+ color: var(--ns-ink-faint);
37
+ letter-spacing: 0.08em;
38
+ text-transform: uppercase;
39
+ margin-bottom: 8px;
40
+ }
41
+
42
+ .divider {
43
+ border: none;
44
+ border-top: 1px solid var(--ns-line-soft);
45
+ }
46
+
47
+ /* ── Layout helpers ──────────────────────────── */
48
+ .row {
49
+ display: flex;
50
+ flex-wrap: wrap;
51
+ gap: 10px;
52
+ align-items: flex-end;
53
+ }
54
+
55
+ .col {
56
+ display: flex;
57
+ flex-direction: column;
58
+ gap: 6px;
59
+ align-items: flex-start;
60
+ }
61
+
62
+ /* ── Swatch / chip ───────────────────────────── */
63
+ .sw {
64
+ display: flex;
65
+ flex-direction: column;
66
+ gap: 5px;
67
+ align-items: flex-start;
68
+ }
69
+
70
+ .chip {
71
+ width: 56px;
72
+ height: 40px;
73
+ border-radius: var(--ns-radius-sm, 4px);
74
+ border: 1px solid var(--ns-line);
75
+ }
76
+
77
+ .chip-lg {
78
+ width: 80px;
79
+ height: 56px;
80
+ border-radius: var(--ns-radius-sm, 4px);
81
+ border: 1px solid var(--ns-line);
82
+ }
83
+
84
+ /* ── Labels ──────────────────────────────────── */
85
+ .tk {
86
+ font-size: 6px;
87
+ color: var(--ns-ink-faint);
88
+ white-space: nowrap;
89
+ }
90
+ .hex {
91
+ font-size: 6px;
92
+ color: var(--ns-ink-dim);
93
+ white-space: nowrap;
94
+ }
95
+ .sub {
96
+ font-size: 7px;
97
+ color: var(--ns-ink-dim);
98
+ white-space: nowrap;
99
+ }
@@ -1,16 +1,29 @@
1
1
  import type { HTMLAttributes, ReactElement } from 'react';
2
2
  import type { NSStyle } from '../shared/styles.js';
3
+ /** Built-in bar kinds. Each maps to its own fill + label-colour tokens. */
4
+ export type HUDBarVariant = 'hp' | 'mp' | 'xp' | 'stamina';
3
5
  export interface HUDBarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'style'> {
6
+ /** Built-in bar kind — sets fill colour, label colour and (for stamina) segmentation. */
7
+ variant?: HUDBarVariant;
4
8
  /** Current stat value. */
5
9
  value?: number;
6
10
  /** Maximum stat value. */
7
11
  max?: number;
8
- /** Bar fill color. */
12
+ /**
13
+ * Label text. Defaults to `"{value} / {max}"`.
14
+ * Pass a string to override, or `false`/`""` to hide the label entirely.
15
+ */
16
+ label?: string | false;
17
+ /** Render the fill as discrete notched segments (defaults to the variant's setting). */
18
+ segmented?: boolean;
19
+ /** Width of one segment + gutter in px, when `segmented`. */
20
+ segmentSize?: number;
21
+ /** Bar fill colour. Overrides the variant's fill. */
9
22
  fillColor?: string;
10
- /** Bar track color. */
23
+ /** Bar track colour. */
11
24
  trackColor?: string;
12
25
  /** Bar height in px. */
13
26
  height?: number;
14
27
  style?: NSStyle;
15
28
  }
16
- export declare function HUDBar({ value, max, fillColor, trackColor, height, style, role, ...props }: HUDBarProps): ReactElement;
29
+ export declare function HUDBar({ variant, value, max, label, segmented, segmentSize, fillColor, trackColor, height, style, role, ...props }: HUDBarProps): ReactElement;
@@ -0,0 +1,26 @@
1
+ import type { HTMLAttributes, ReactElement } from 'react';
2
+ import type { NSStyle } from '../shared/styles.js';
3
+ export interface HUDChatMessage {
4
+ /** Sender display name */
5
+ sender: string;
6
+ /** Message text */
7
+ text: string;
8
+ /** Sender name color — defaults to var(--ns-ink) */
9
+ color?: string;
10
+ }
11
+ export interface HUDChatProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'style'> {
12
+ /** Chat messages to display, oldest first */
13
+ messages?: HUDChatMessage[];
14
+ /** Panel height in px */
15
+ height?: number;
16
+ /** Message font size in px */
17
+ fontSize?: number;
18
+ style?: NSStyle;
19
+ }
20
+ /**
21
+ * HUDChat — compact scrollable chat log.
22
+ *
23
+ * Each message row: `[sender]:` in a player colour + message text in dim white.
24
+ * Designed for small HUD footprints (fontSize 4–6 px).
25
+ */
26
+ export declare function HUDChat({ messages, height, fontSize, style, ...props }: HUDChatProps): ReactElement;
@@ -0,0 +1,21 @@
1
+ import { type HTMLAttributes, type ReactElement } from 'react';
2
+ import type { NSStyle } from '../shared/styles.js';
3
+ export interface HUDJoystickProps extends Omit<HTMLAttributes<HTMLDivElement>, 'style' | 'onChange'> {
4
+ /** Outer diameter in px. The component renders a square of this size. */
5
+ size?: number;
6
+ /** Thumb diameter as a fraction of size (0–1). */
7
+ thumbSize?: number;
8
+ /**
9
+ * Fires continuously during drag with normalised x, y values in [-1, 1].
10
+ * Emits (0, 0) when the thumb is released.
11
+ */
12
+ onChange?: (x: number, y: number) => void;
13
+ style?: NSStyle;
14
+ }
15
+ /**
16
+ * HUDJoystick — interactive virtual thumbstick.
17
+ *
18
+ * Drag the thumb within the circular pad; onChange fires normalised
19
+ * x/y coordinates in [-1, 1]. The thumb snaps back to centre on release.
20
+ */
21
+ export declare function HUDJoystick({ size, thumbSize, onChange, style, ...props }: HUDJoystickProps): ReactElement;
@@ -0,0 +1,14 @@
1
+ import type { HTMLAttributes, ReactElement } from 'react';
2
+ import type { NSStyle } from '../shared/styles.js';
3
+ export interface HUDMinimapProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'style'> {
4
+ /** Map background color. */
5
+ mapColor?: string;
6
+ /** Player marker color. */
7
+ markerColor?: string;
8
+ /** Accent color for paths / points of interest. */
9
+ accentColor?: string;
10
+ /** Whether to show a border frame. */
11
+ framed?: boolean;
12
+ style?: NSStyle;
13
+ }
14
+ export declare function HUDMinimap({ mapColor, markerColor, accentColor, framed, style, ...props }: HUDMinimapProps): ReactElement;
@@ -0,0 +1,25 @@
1
+ import type { HTMLAttributes, ReactElement } from 'react';
2
+ import type { NSStyle } from '../shared/styles.js';
3
+ declare const VARIANTS: {
4
+ readonly dark: {
5
+ readonly background: "rgba(12,16,22,0.72)";
6
+ readonly border: "1px solid rgba(255,255,255,0.10)";
7
+ };
8
+ readonly light: {
9
+ readonly background: "rgba(255,255,255,0.05)";
10
+ readonly border: "1px solid rgba(255,255,255,0.14)";
11
+ };
12
+ readonly clear: {
13
+ readonly background: "transparent";
14
+ readonly border: "1px solid rgba(255,255,255,0.08)";
15
+ };
16
+ };
17
+ export interface HUDPanelProps extends Omit<HTMLAttributes<HTMLDivElement>, 'style'> {
18
+ /** Visual treatment of the panel surface. */
19
+ variant?: keyof typeof VARIANTS;
20
+ /** Corner radius in px. */
21
+ radius?: number;
22
+ style?: NSStyle;
23
+ }
24
+ export declare function HUDPanel({ variant, radius, style, children, ...props }: HUDPanelProps): ReactElement;
25
+ export {};