@noobsociety/nsds 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.3.0] - 2026-06-20
10
+
11
+ ### Added
12
+
13
+ - First-class TypeScript component source with generated declaration output.
14
+ - Component tests for class names, variants, invalid runtime values, and accessibility attributes.
15
+ - Package export linting, packed install checks, and Tailwind preset type validation.
16
+ - Diataxis-style public docs, generated API reference, and static landing page.
17
+ - Browser-rendered visual checks for the public component specimen surface.
18
+
19
+ ### Changed
20
+
21
+ - Storybook stories now use typed `.tsx` examples and include a full component showcase.
22
+ - CI and release checks now install the browser needed for visual coverage.
23
+
9
24
  ## [0.2.1] - 2026-06-20
10
25
 
11
26
  ### Added
@@ -76,7 +91,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
76
91
 
77
92
  - Initial NSDS package with tokens, CSS primitives, React components, and Tailwind support.
78
93
 
79
- [Unreleased]: https://github.com/noobsociety/nsds/compare/v0.2.1...HEAD
94
+ [Unreleased]: https://github.com/noobsociety/nsds/compare/v0.3.0...HEAD
95
+ [0.3.0]: https://github.com/noobsociety/nsds/compare/v0.2.1...v0.3.0
80
96
  [0.2.1]: https://github.com/noobsociety/nsds/compare/v0.2.0...v0.2.1
81
97
  [0.2.0]: https://github.com/noobsociety/nsds/compare/v0.1.2...v0.2.0
82
98
  [0.1.2]: https://github.com/noobsociety/nsds/compare/v0.1.1...v0.1.2
package/CONTRIBUTING.md CHANGED
@@ -23,7 +23,9 @@ npm run storybook
23
23
  - Prefer CSS tokens and shared primitives over one-off styles.
24
24
  - Keep React components small and framework-light.
25
25
  - Add or update Storybook stories when changing public component behavior or props.
26
- - Add or update smoke coverage when changing import behavior, package exports, or runtime behavior.
26
+ - Add or update component tests when changing class names, variants, props, or accessibility behavior.
27
+ - Add or update package checks when changing import behavior, package exports, or generated types.
28
+ - Run `npm run docs:api` when public TypeScript types change.
27
29
  - Keep third-party code and assets license-compatible with MIT.
28
30
 
29
31
  ## Versioning
@@ -88,6 +90,28 @@ npm run build:storybook
88
90
 
89
91
  Stories should show the stable public props, common variants, disabled or edge states when relevant, and realistic token-backed styling. Avoid documenting private implementation details as API.
90
92
 
93
+ ## Tests
94
+
95
+ Component behavior tests run with:
96
+
97
+ ```bash
98
+ npm run test:components
99
+ ```
100
+
101
+ Browser-rendered visual checks run with:
102
+
103
+ ```bash
104
+ npm run test:visual
105
+ ```
106
+
107
+ Install and export checks run as part of `npm run check`, and can be run directly:
108
+
109
+ ```bash
110
+ npm run check:docs
111
+ npm run check:exports
112
+ npm run check:install
113
+ ```
114
+
91
115
  ## Release checks
92
116
 
93
117
  Before merging a package-impacting change:
package/README.md CHANGED
@@ -10,6 +10,7 @@ NSDS is Tailwind-first and token-driven. It ships the public package surface nee
10
10
  - [Quick start](#quick-start)
11
11
  - [Package exports](#package-exports)
12
12
  - [Components](#components)
13
+ - [Documentation](#documentation)
13
14
  - [Repository layout](#repository-layout)
14
15
  - [Development](#development)
15
16
  - [Versioning and releases](#versioning-and-releases)
@@ -104,14 +105,34 @@ Build static Storybook documentation:
104
105
  npm run build:storybook
105
106
  ```
106
107
 
108
+ ## Documentation
109
+
110
+ Public docs live in [`docs/`](./docs/README.md) and follow the Diataxis model:
111
+
112
+ - tutorials for first-time setup
113
+ - how-to guides for integration tasks
114
+ - reference pages for exports, tokens, classes, and generated API details
115
+ - explanation pages for design, accessibility, and versioning decisions
116
+
117
+ Generate the API reference from TypeScript source:
118
+
119
+ ```bash
120
+ npm run docs:api
121
+ ```
122
+
123
+ The static landing page lives in [`site/`](./site/index.html).
124
+
107
125
  ## Repository layout
108
126
 
109
127
  | Path | Purpose |
110
128
  | --- | --- |
111
129
  | `styles.css` | Public CSS entry point |
112
130
  | `tokens/` | CSS custom properties for color, type, spacing, motion, and HUD values |
113
- | `components/` | React components, TypeScript declarations, primitive CSS, and stories |
131
+ | `components/` | TypeScript React source, primitive CSS, and Storybook stories |
114
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 |
115
136
 
116
137
  ## Development
117
138
 
@@ -127,9 +148,15 @@ Common scripts:
127
148
  | Script | Purpose |
128
149
  | --- | --- |
129
150
  | `npm run build` | Build the package into `dist/` |
130
- | `npm run check` | Build, validate package metadata, type-check, and smoke-test imports |
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 |
131
156
  | `npm run storybook` | Start component documentation locally |
132
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 |
133
160
  | `npm run release:dry-run` | Preview the npm package contents |
134
161
  | `npm run changeset` | Add a release note and version intent |
135
162
 
@@ -1,21 +1,18 @@
1
- /**
2
- * @startingPoint section="Components" subtitle="Play and Ghost button variants" viewport="700x180"
3
- */
4
- import type * as React from 'react';
5
-
6
- export interface ButtonProps {
7
- /** Visual style */
8
- variant?: 'play' | 'ghost';
9
- /** Size */
10
- size?: 'sm' | 'md' | 'lg';
11
- /** Render as <a> when provided */
12
- href?: string;
13
- onClick?: React.MouseEventHandler<HTMLAnchorElement | HTMLButtonElement>;
14
- children?: React.ReactNode;
15
- disabled?: boolean;
16
- className?: string;
17
- style?: React.CSSProperties;
18
- type?: 'button' | 'submit' | 'reset';
1
+ import type { AnchorHTMLAttributes, HTMLAttributes, MouseEventHandler, ReactElement, ReactNode } from 'react';
2
+ export type ButtonVariant = 'play' | 'ghost';
3
+ export type ButtonSize = 'sm' | 'md' | 'lg';
4
+ export interface ButtonProps extends Omit<HTMLAttributes<HTMLElement>, 'onClick'> {
5
+ /** Visual style. */
6
+ variant?: ButtonVariant;
7
+ /** Control size. */
8
+ size?: ButtonSize;
9
+ /** Render as an anchor when provided. */
10
+ href?: string;
11
+ rel?: string;
12
+ target?: AnchorHTMLAttributes<HTMLAnchorElement>['target'];
13
+ onClick?: MouseEventHandler<HTMLAnchorElement | HTMLButtonElement>;
14
+ children?: ReactNode;
15
+ disabled?: boolean;
16
+ type?: 'button' | 'submit' | 'reset';
19
17
  }
20
-
21
- export declare function Button(props: ButtonProps): React.ReactElement;
18
+ export declare function Button({ variant, size, href, onClick, children, disabled, className, type, ...props }: ButtonProps): ReactElement;
@@ -1,18 +1,16 @@
1
- import type * as React from 'react';
2
-
3
- export interface FeatureCardProps {
4
- /** Pixel-art icon element */
5
- icon: React.ReactNode;
6
- /** Card heading — Press Start 2P */
7
- title: string;
8
- /** Body copy — Inter 14px */
9
- body: string;
10
- /** Small tag label in top-right (e.g. "Spatial", "Live") */
11
- tag?: string;
12
- /** Icon color — defaults to gold #e6db74 */
13
- iconColor?: string;
14
- className?: string;
15
- style?: React.CSSProperties;
1
+ import type { LiHTMLAttributes, ReactElement, ReactNode } from 'react';
2
+ import type { NSStyle } from '../shared/styles.js';
3
+ export interface FeatureCardProps extends Omit<LiHTMLAttributes<HTMLLIElement>, 'children' | 'style' | 'title'> {
4
+ /** Pixel-art icon element. */
5
+ icon: ReactNode;
6
+ /** Card heading. */
7
+ title: string;
8
+ /** Body copy. */
9
+ body: string;
10
+ /** Small tag label. */
11
+ tag?: string;
12
+ /** Icon accent color. */
13
+ iconColor?: string;
14
+ style?: NSStyle;
16
15
  }
17
-
18
- export declare function FeatureCard(props: FeatureCardProps): React.ReactElement;
16
+ export declare function FeatureCard({ icon, title, body, tag, iconColor, className, style, ...props }: FeatureCardProps): ReactElement;
@@ -1,16 +1,13 @@
1
- import type * as React from 'react';
2
-
3
- export interface QuestCardProps {
4
- /** Gate number shown in the title */
5
- gate: number;
6
- /** Short gate name (e.g. "Space", "Movement") */
7
- title: string;
8
- /** One-sentence description */
9
- body: string;
10
- /** Controls border color, bg tint, icon, and pill label */
11
- status?: 'done' | 'active' | 'planned' | 'locked';
12
- className?: string;
13
- style?: React.CSSProperties;
1
+ import type { LiHTMLAttributes, ReactElement } from 'react';
2
+ export type QuestCardStatus = 'done' | 'active' | 'planned' | 'locked';
3
+ export interface QuestCardProps extends Omit<LiHTMLAttributes<HTMLLIElement>, 'children' | 'title'> {
4
+ /** Gate number shown in the title. */
5
+ gate: number;
6
+ /** Short gate name. */
7
+ title: string;
8
+ /** One-sentence description. */
9
+ body: string;
10
+ /** Controls border color, tint, icon, and pill label. */
11
+ status?: QuestCardStatus;
14
12
  }
15
-
16
- export declare function QuestCard(props: QuestCardProps): React.ReactElement;
13
+ export declare function QuestCard({ gate, title, body, status, className, ...props }: QuestCardProps): ReactElement;
@@ -1,17 +1,16 @@
1
- import type * as React from 'react';
2
-
3
- export interface HUDBarProps {
4
- /** Current stat value */
5
- value?: number;
6
- /** Maximum stat value */
7
- max?: number;
8
- /** Bar fill color */
9
- fillColor?: string;
10
- /** Bar track color */
11
- trackColor?: string;
12
- /** Bar height in px */
13
- height?: number;
14
- style?: React.CSSProperties;
1
+ import type { HTMLAttributes, ReactElement } from 'react';
2
+ import type { NSStyle } from '../shared/styles.js';
3
+ export interface HUDBarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'style'> {
4
+ /** Current stat value. */
5
+ value?: number;
6
+ /** Maximum stat value. */
7
+ max?: number;
8
+ /** Bar fill color. */
9
+ fillColor?: string;
10
+ /** Bar track color. */
11
+ trackColor?: string;
12
+ /** Bar height in px. */
13
+ height?: number;
14
+ style?: NSStyle;
15
15
  }
16
-
17
- export declare function HUDBar(props: HUDBarProps): React.ReactElement;
16
+ export declare function HUDBar({ value, max, fillColor, trackColor, height, style, role, ...props }: HUDBarProps): ReactElement;
@@ -1,11 +1,10 @@
1
- import type * as React from 'react';
2
-
3
- export interface HUDDividerProps {
4
- /** Vertical by default; use horizontal for a 1px row rule. */
5
- direction?: 'vertical' | 'horizontal';
6
- /** Line color */
7
- color?: string;
8
- style?: React.CSSProperties;
1
+ import type { HTMLAttributes, ReactElement } from 'react';
2
+ import type { NSStyle } from '../shared/styles.js';
3
+ export interface HUDDividerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'style'> {
4
+ /** Vertical by default; use horizontal for a 1px row rule. */
5
+ direction?: 'vertical' | 'horizontal';
6
+ /** Line color. */
7
+ color?: string;
8
+ style?: NSStyle;
9
9
  }
10
-
11
- export declare function HUDDivider(props: HUDDividerProps): React.ReactElement;
10
+ export declare function HUDDivider({ direction, color, style, role, ...props }: HUDDividerProps): ReactElement;
@@ -1,17 +1,22 @@
1
- import type * as React from 'react';
2
-
3
- export interface HUDLabelProps {
4
- /** Display text */
5
- text?: string;
6
- /** Text alignment within the container */
7
- align?: 'left' | 'center' | 'right';
8
- /** Uniform scale multiplier applied to fontSize */
9
- scale?: number;
10
- /** Text color */
11
- color?: string;
12
- /** Base font size in px, before scale */
13
- fontSize?: number;
14
- style?: React.CSSProperties;
1
+ import type { HTMLAttributes, ReactElement } from 'react';
2
+ import type { NSStyle } from '../shared/styles.js';
3
+ declare const JUSTIFY: {
4
+ readonly left: "flex-start";
5
+ readonly center: "center";
6
+ readonly right: "flex-end";
7
+ };
8
+ export interface HUDLabelProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'style'> {
9
+ /** Display text. */
10
+ text?: string;
11
+ /** Text alignment within the container. */
12
+ align?: keyof typeof JUSTIFY;
13
+ /** Uniform scale multiplier applied to fontSize. */
14
+ scale?: number;
15
+ /** Text color. */
16
+ color?: string;
17
+ /** Base font size in px, before scale. */
18
+ fontSize?: number;
19
+ style?: NSStyle;
15
20
  }
16
-
17
- export declare function HUDLabel(props: HUDLabelProps): React.ReactElement;
21
+ export declare function HUDLabel({ text, align, scale, color, fontSize, style, ...props }: HUDLabelProps): ReactElement;
22
+ export {};
@@ -1,42 +1,29 @@
1
- import type * as React from 'react';
2
-
3
- export type RPGIconWeapon = 'sword' | 'staff' | 'bow' | 'katar' | 'book' | 'hammer';
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ export type RPGIconWeapon = 'sword' | 'staff' | 'bow' | 'katar' | 'book' | 'hammer';
4
3
  export type RPGIconElement = 'neutral' | 'earth' | 'wind' | 'water' | 'fire' | 'light' | 'dark' | 'void';
5
- export type RPGIconRace = 'human' | 'beast' | 'demon' | 'angel' | 'spirit';
6
- export type RPGIconSize = 'small' | 'medium' | 'large';
7
-
8
- export type RPGIconName =
9
- | RPGIconWeapon
10
- | RPGIconElement
11
- | RPGIconRace
12
- | RPGIconSize;
13
-
4
+ export type RPGIconRace = 'human' | 'beast' | 'demon' | 'angel' | 'spirit';
5
+ export type RPGIconSize = 'small' | 'medium' | 'large';
6
+ export type RPGIconName = RPGIconWeapon | RPGIconElement | RPGIconRace | RPGIconSize;
14
7
  export interface RPGIconProps {
15
- /**
16
- * 22 original pixel-art icons across 4 canonical categories:
17
- *
18
- * Weapons (6): sword · staff · bow · katar · book · hammer
19
- * (from game/items/index.ts weapon hand-slot items)
20
- *
21
- * Elements (8): neutral · earth · wind · water · fire · light · dark · void
22
- * (from identity.ts ELEMENTS + ELEMENT_DISPLAY)
23
- *
24
- * Races (5): human · beast · demon · angel · spirit
25
- * (illustrative — race is free text in the game)
26
- *
27
- * Sizes (3): small · medium · large
28
- * (from identity.ts BODY_SIZES)
29
- */
30
- name?: RPGIconName;
31
- /** Rendered size in px (width = height). Default: 22 */
32
- size?: number;
33
- style?: React.CSSProperties;
8
+ /** Icon name across weapon, element, race, and size groups. */
9
+ name?: RPGIconName;
10
+ /** Rendered size in px. */
11
+ size?: number;
12
+ style?: CSSProperties;
34
13
  }
35
-
36
- export declare function RPGIcon(props: RPGIconProps): React.ReactElement;
37
-
38
- /** Sorted list of all valid icon names */
39
14
  export declare const icons: RPGIconName[];
40
-
41
- /** @deprecated Use RPGIcon — HUDIcon is kept for backward compatibility */
42
- export declare const HUDIcon: typeof RPGIcon;
15
+ /**
16
+ * RPGIcon — 22 original pixel-art icons.
17
+ *
18
+ * Weapons (6): sword · staff · bow · katar · book · hammer
19
+ * Elements (8): neutral · earth · wind · water · fire · light · dark · void
20
+ * Races (5): human · beast · demon · angel · spirit
21
+ * Sizes (3): small · medium · large
22
+ */
23
+ export declare const RPGIcon: (({ name, size, style, }: RPGIconProps) => ReactElement) & {
24
+ icons: RPGIconName[];
25
+ };
26
+ /** @deprecated Use RPGIcon — kept for backward compatibility */
27
+ export declare const HUDIcon: (({ name, size, style, }: RPGIconProps) => ReactElement) & {
28
+ icons: RPGIconName[];
29
+ };
@@ -1,13 +1,9 @@
1
- import type * as React from 'react';
2
-
3
- export interface SectionArrowProps {
4
- /** href of the next section (e.g. "#why") */
5
- href: string;
6
- /** Accessible label for screen readers */
7
- label: string;
8
- children?: React.ReactNode;
9
- className?: string;
10
- style?: React.CSSProperties;
1
+ import type { AnchorHTMLAttributes, ReactElement, ReactNode } from 'react';
2
+ export interface SectionArrowProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'children' | 'href'> {
3
+ /** href of the next section. */
4
+ href: string;
5
+ /** Accessible label for screen readers. */
6
+ label: string;
7
+ children?: ReactNode;
11
8
  }
12
-
13
- export declare function SectionArrow(props: SectionArrowProps): React.ReactElement;
9
+ export declare function SectionArrow({ href, label, className, children, ...props }: SectionArrowProps): ReactElement;
@@ -0,0 +1,17 @@
1
+ export { Button } from '../buttons/Button.js';
2
+ export type { ButtonProps, ButtonSize, ButtonVariant } from '../buttons/Button.js';
3
+ export { FeatureCard } from '../cards/FeatureCard.js';
4
+ export type { FeatureCardProps } from '../cards/FeatureCard.js';
5
+ export { QuestCard } from '../cards/QuestCard.js';
6
+ export type { QuestCardProps, QuestCardStatus } from '../cards/QuestCard.js';
7
+ export { HUDBar } from '../hud/HUDBar.js';
8
+ export type { HUDBarProps } from '../hud/HUDBar.js';
9
+ export { HUDDivider } from '../hud/HUDDivider.js';
10
+ export type { HUDDividerProps } from '../hud/HUDDivider.js';
11
+ export { HUDLabel } from '../hud/HUDLabel.js';
12
+ export type { HUDLabelProps } from '../hud/HUDLabel.js';
13
+ export { RPGIcon, HUDIcon, icons } from '../icons/RPGIcon.js';
14
+ export type { RPGIconElement, RPGIconName, RPGIconProps, RPGIconRace, RPGIconSize, RPGIconWeapon, } from '../icons/RPGIcon.js';
15
+ export { SectionArrow } from '../navigation/SectionArrow.js';
16
+ export type { SectionArrowProps } from '../navigation/SectionArrow.js';
17
+ export type { NSStyle } from '../shared/styles.js';
@@ -0,0 +1,47 @@
1
+ import type { CSSProperties } from 'react';
2
+ export type NSStyle = CSSProperties & Record<`--${string}`, string | number | undefined>;
3
+ export type ClassValue = string | false | null | undefined;
4
+ export declare const cx: (...parts: ClassValue[]) => string;
5
+ export declare function mergeStyles(base: NSStyle, override?: NSStyle): NSStyle;
6
+ /** Token shortcuts for inline style props — lowercase to avoid DS compiler treating this as a component */
7
+ export declare const nsTokens: {
8
+ readonly gold: "var(--ns-gold)";
9
+ readonly pink: "var(--ns-pink)";
10
+ readonly purple: "var(--ns-purple)";
11
+ readonly cyan: "var(--ns-cyan)";
12
+ readonly green: "var(--ns-green)";
13
+ readonly orange: "var(--ns-orange)";
14
+ readonly later: "var(--ns-ink-faint)";
15
+ };
16
+ /** @deprecated Use nsTokens */
17
+ export declare const NS: {
18
+ readonly gold: "var(--ns-gold)";
19
+ readonly pink: "var(--ns-pink)";
20
+ readonly purple: "var(--ns-purple)";
21
+ readonly cyan: "var(--ns-cyan)";
22
+ readonly green: "var(--ns-green)";
23
+ readonly orange: "var(--ns-orange)";
24
+ readonly later: "var(--ns-ink-faint)";
25
+ };
26
+ export declare const questStatus: {
27
+ readonly done: {
28
+ readonly className: "ns-quest-card--done";
29
+ readonly label: "HOLDS";
30
+ readonly icon: "✓";
31
+ };
32
+ readonly active: {
33
+ readonly className: "ns-quest-card--active";
34
+ readonly label: "BUILDING";
35
+ readonly icon: "▶";
36
+ };
37
+ readonly planned: {
38
+ readonly className: "ns-quest-card--planned";
39
+ readonly label: "PLANNED";
40
+ readonly icon: "◌";
41
+ };
42
+ readonly locked: {
43
+ readonly className: "ns-quest-card--locked";
44
+ readonly label: "LATER";
45
+ readonly icon: "✦";
46
+ };
47
+ };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react/jsx-runtime");var t=(...e)=>e.filter(Boolean).join(` `);function n(e,t){return t?{...e,...t}:e}var r={gold:`var(--ns-gold)`,pink:`var(--ns-pink)`,purple:`var(--ns-purple)`,cyan:`var(--ns-cyan)`,green:`var(--ns-green)`,orange:`var(--ns-orange)`,later:`var(--ns-ink-faint)`},i={done:{className:`ns-quest-card--done`,label:`HOLDS`,icon:`✓`},active:{className:`ns-quest-card--active`,label:`BUILDING`,icon:`▶`},planned:{className:`ns-quest-card--planned`,label:`PLANNED`,icon:`◌`},locked:{className:`ns-quest-card--locked`,label:`LATER`,icon:`✦`}},a=new Set([`play`,`ghost`]),o=new Set([`sm`,`md`,`lg`]);function s({variant:n=`play`,size:r=`md`,href:i,onClick:s,children:c,disabled:l=!1,className:u,type:d=`button`,...f}){let p=a.has(n)?n:`play`,m=o.has(r)?r:`md`,h=t(`ns-button`,`ns-button--${p}`,`ns-button--${m}`,u),g={...f,className:h,onClick:l?void 0:s};return i?(0,e.jsx)(`a`,{...g,href:l?void 0:i,"aria-disabled":l||void 0,tabIndex:l?-1:f.tabIndex,children:c}):(0,e.jsx)(`button`,{...g,type:d,disabled:l,children:c})}function c({icon:i,title:a,body:o,tag:s,iconColor:c=r.gold,className:l,style:u,...d}){return(0,e.jsxs)(`li`,{...d,className:t(`ns-card ns-feature-card`,l),style:n({"--ns-feature-accent":c},u),children:[(0,e.jsx)(`span`,{className:`ns-icon-slot ns-feature-card__icon`,"aria-hidden":`true`,children:i}),(0,e.jsxs)(`div`,{children:[(0,e.jsx)(`h3`,{className:`ns-feature-card__title`,children:a}),(0,e.jsx)(`p`,{className:`ns-feature-card__body`,children:o})]}),s&&(0,e.jsx)(`span`,{className:`ns-tag ns-feature-card__tag`,children:s})]})}function l({gate:n,title:r,body:a,status:o=`locked`,className:s,...c}){let l=i[o]||i.locked;return(0,e.jsxs)(`li`,{...c,className:t(`ns-quest-card`,l.className,s),children:[(0,e.jsx)(`span`,{className:`ns-quest-card__icon`,"aria-hidden":`true`,children:l.icon}),(0,e.jsxs)(`div`,{className:`ns-quest-card__body`,children:[(0,e.jsx)(`p`,{className:`ns-quest-card__title`,children:`Gate ${n} · ${r}`}),(0,e.jsx)(`p`,{className:`ns-quest-card__desc`,children:a}),(0,e.jsx)(`span`,{className:`ns-status-pill`,children:l.label})]})]})}var u=`var(--ns-font-pixel, "Press Start 2P", monospace)`;function d({value:t=40,max:n=40,fillColor:r=`var(--hud-hp-fill, #4caf73)`,trackColor:i=`var(--hud-track, rgba(255, 255, 255, 0.10))`,height:a=14,style:o}){let s=n>0?Math.max(0,Math.min(100,t/n*100)):0;return(0,e.jsxs)(`div`,{style:{position:`relative`,background:i,height:a,overflow:`hidden`,fontFamily:u,...o},children:[(0,e.jsx)(`div`,{style:{position:`absolute`,inset:0,width:`${s}%`,background:r,transition:`width .35s ease-out`}}),(0,e.jsxs)(`span`,{style:{position:`absolute`,inset:0,display:`flex`,alignItems:`center`,paddingLeft:4,fontSize:4,color:`#fff`,pointerEvents:`none`},children:[t,` / `,n]})]})}function f({direction:t=`vertical`,color:n=`var(--ns-line)`,style:r}){let i=t===`vertical`;return(0,e.jsx)(`div`,{style:{width:i?`1px`:`100%`,height:i?`100%`:`1px`,background:n,flexShrink:0,alignSelf:`stretch`,...r}})}var p=`var(--ns-font-pixel, "Press Start 2P", monospace)`,m={left:`flex-start`,center:`center`,right:`flex-end`};function h({text:t=`Label`,align:n=`left`,scale:r=1,color:i=`var(--ns-ink)`,fontSize:a=5,style:o}){return(0,e.jsx)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:m[n]||m.left,paddingLeft:n===`right`?0:3,paddingRight:n===`left`?0:3,fontFamily:p,fontSize:a*r,color:i,whiteSpace:`nowrap`,overflow:`hidden`,width:`100%`,height:`100%`,...o},children:t})}function g(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`line`,{x1:`13`,y1:`2`,x2:`4`,y2:`11`,stroke:`#cfd8e2`,strokeWidth:`2`,strokeLinecap:`square`}),(0,e.jsx)(`line`,{x1:`6`,y1:`5`,x2:`10`,y2:`9`,stroke:`#e6db74`,strokeWidth:`2`,strokeLinecap:`square`}),(0,e.jsx)(`line`,{x1:`4`,y1:`10`,x2:`2`,y2:`13`,stroke:`#b07040`,strokeWidth:`1.5`,strokeLinecap:`square`})]})}function _(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`3`,y:`1`,width:`3`,height:`2`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`2`,y:`3`,width:`2`,height:`10`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`3`,y:`13`,width:`3`,height:`2`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`6`,y:`2`,width:`1`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`7`,y:`3`,width:`1`,height:`10`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`6`,y:`13`,width:`1`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`7`,height:`2`,fill:`#c8a878`}),(0,e.jsx)(`rect`,{x:`13`,y:`6`,width:`2`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`14`,y:`7`,width:`2`,height:`2`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`13`,y:`9`,width:`2`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`7`,y:`5`,width:`2`,height:`2`,fill:`#ae81ff`}),(0,e.jsx)(`rect`,{x:`7`,y:`9`,width:`2`,height:`2`,fill:`#ae81ff`})]})}function v(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`1`,width:`6`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`4`,y:`2`,width:`8`,height:`4`,fill:`#ae81ff`}),(0,e.jsx)(`rect`,{x:`5`,y:`6`,width:`6`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`6`,y:`3`,width:`4`,height:`2`,fill:`#d4b8ff`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`2`,height:`8`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`6`,y:`10`,width:`4`,height:`1`,fill:`#b07040`})]})}function y(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`1`,width:`2`,height:`8`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`2`,y:`9`,width:`2`,height:`3`,fill:`#a8b0bc`}),(0,e.jsx)(`rect`,{x:`12`,y:`1`,width:`2`,height:`8`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`12`,y:`9`,width:`2`,height:`3`,fill:`#a8b0bc`}),(0,e.jsx)(`rect`,{x:`2`,y:`8`,width:`12`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`6`,y:`10`,width:`4`,height:`5`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`3`,y:`0`,width:`1`,height:`1`,fill:`#eef0f4`}),(0,e.jsx)(`rect`,{x:`12`,y:`0`,width:`1`,height:`1`,fill:`#eef0f4`})]})}function b(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`2`,width:`2`,height:`12`,fill:`#6a4a6a`}),(0,e.jsx)(`rect`,{x:`4`,y:`2`,width:`10`,height:`12`,fill:`#8855aa`}),(0,e.jsx)(`rect`,{x:`13`,y:`3`,width:`1`,height:`10`,fill:`#f4f0e8`}),(0,e.jsx)(`rect`,{x:`7`,y:`4`,width:`2`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`6`,y:`5`,width:`4`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`7`,y:`6`,width:`2`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`6`,y:`8`,width:`4`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`7`,y:`9`,width:`2`,height:`2`,fill:`#e6db74`})]})}function x(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`4`,y:`1`,width:`8`,height:`1`,fill:`#a8b0bc`}),(0,e.jsx)(`rect`,{x:`3`,y:`2`,width:`10`,height:`5`,fill:`#a8b0bc`}),(0,e.jsx)(`rect`,{x:`3`,y:`2`,width:`10`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`1`,height:`3`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`3`,y:`7`,width:`10`,height:`1`,fill:`#5a6570`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`2`,height:`8`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`6`,y:`10`,width:`4`,height:`1`,fill:`#b07040`})]})}function S(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`6`,width:`12`,height:`4`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`6`,y:`2`,width:`4`,height:`12`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`2`,height:`2`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`11`,y:`3`,width:`2`,height:`2`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`3`,y:`11`,width:`2`,height:`2`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`11`,y:`11`,width:`2`,height:`2`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`2`,height:`2`,fill:`#b0b0c0`}),(0,e.jsx)(`rect`,{x:`7`,y:`4`,width:`2`,height:`1`,fill:`#b0b0c0`}),(0,e.jsx)(`rect`,{x:`7`,y:`11`,width:`2`,height:`1`,fill:`#b0b0c0`}),(0,e.jsx)(`rect`,{x:`4`,y:`7`,width:`1`,height:`2`,fill:`#b0b0c0`}),(0,e.jsx)(`rect`,{x:`11`,y:`7`,width:`1`,height:`2`,fill:`#b0b0c0`})]})}function C(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`7`,y:`2`,width:`2`,height:`2`,fill:`#c8a050`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`4`,height:`2`,fill:`#c8a050`}),(0,e.jsx)(`rect`,{x:`5`,y:`6`,width:`6`,height:`2`,fill:`#8b6914`}),(0,e.jsx)(`rect`,{x:`4`,y:`8`,width:`8`,height:`2`,fill:`#8b6914`}),(0,e.jsx)(`rect`,{x:`3`,y:`10`,width:`10`,height:`2`,fill:`#6a5010`}),(0,e.jsx)(`rect`,{x:`1`,y:`12`,width:`14`,height:`3`,fill:`#5a4008`}),(0,e.jsx)(`rect`,{x:`7`,y:`2`,width:`2`,height:`1`,fill:`#f0ece0`}),(0,e.jsx)(`rect`,{x:`6`,y:`3`,width:`4`,height:`1`,fill:`#f0ece0`}),(0,e.jsx)(`rect`,{x:`5`,y:`8`,width:`1`,height:`1`,fill:`#a07820`}),(0,e.jsx)(`rect`,{x:`10`,y:`9`,width:`1`,height:`1`,fill:`#a07820`})]})}function w(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`4`,width:`10`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`3`,y:`5`,width:`2`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`12`,y:`3`,width:`2`,height:`2`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`13`,y:`5`,width:`1`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`1`,y:`7`,width:`11`,height:`2`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`12`,y:`6`,width:`2`,height:`4`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`11`,y:`10`,width:`2`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`2`,y:`12`,width:`9`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`2`,y:`11`,width:`2`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`11`,y:`12`,width:`2`,height:`2`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`10`,y:`14`,width:`2`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`2`,y:`3`,width:`8`,height:`1`,fill:`#90e8cc`}),(0,e.jsx)(`rect`,{x:`2`,y:`8`,width:`9`,height:`1`,fill:`#90e8cc`})]})}function T(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`6`,y:`1`,width:`4`,height:`1`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`5`,y:`2`,width:`6`,height:`2`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`4`,y:`4`,width:`8`,height:`6`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`5`,y:`10`,width:`6`,height:`2`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`6`,y:`12`,width:`4`,height:`2`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`7`,y:`14`,width:`2`,height:`1`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`3`,height:`4`,fill:`#70b8f0`}),(0,e.jsx)(`rect`,{x:`7`,y:`3`,width:`2`,height:`1`,fill:`#70b8f0`}),(0,e.jsx)(`rect`,{x:`5`,y:`7`,width:`2`,height:`1`,fill:`#1a5a9a`}),(0,e.jsx)(`rect`,{x:`9`,y:`8`,width:`2`,height:`1`,fill:`#1a5a9a`})]})}function E(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`4`,y:`11`,width:`8`,height:`4`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`3`,y:`8`,width:`10`,height:`3`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`4`,y:`5`,width:`8`,height:`3`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`5`,y:`3`,width:`6`,height:`2`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`6`,y:`1`,width:`4`,height:`2`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`5`,y:`9`,width:`6`,height:`5`,fill:`#e8882a`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`4`,height:`2`,fill:`#e8882a`}),(0,e.jsx)(`rect`,{x:`6`,y:`10`,width:`4`,height:`3`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`7`,y:`9`,width:`2`,height:`1`,fill:`#e6db74`})]})}function D(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`2`,width:`6`,height:`2`,fill:`#888780`}),(0,e.jsx)(`rect`,{x:`3`,y:`4`,width:`8`,height:`8`,fill:`#888780`}),(0,e.jsx)(`rect`,{x:`5`,y:`12`,width:`6`,height:`2`,fill:`#888780`}),(0,e.jsx)(`rect`,{x:`4`,y:`3`,width:`1`,height:`10`,fill:`#888780`}),(0,e.jsx)(`rect`,{x:`8`,y:`4`,width:`4`,height:`8`,fill:`#1a1a20`}),(0,e.jsx)(`rect`,{x:`7`,y:`5`,width:`5`,height:`6`,fill:`#1a1a20`}),(0,e.jsx)(`rect`,{x:`11`,y:`2`,width:`1`,height:`1`,fill:`#c8c8d0`}),(0,e.jsx)(`rect`,{x:`13`,y:`5`,width:`1`,height:`1`,fill:`#c8c8d0`}),(0,e.jsx)(`rect`,{x:`12`,y:`9`,width:`1`,height:`1`,fill:`#c8c8d0`})]})}function O(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`5`,width:`6`,height:`6`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`4`,height:`1`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`6`,y:`11`,width:`4`,height:`1`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`4`,y:`6`,width:`1`,height:`4`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`11`,y:`6`,width:`1`,height:`4`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`7`,y:`1`,width:`2`,height:`3`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`7`,y:`12`,width:`2`,height:`3`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`1`,y:`7`,width:`3`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`12`,y:`7`,width:`3`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`2`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`11`,y:`3`,width:`2`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`3`,y:`11`,width:`2`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`11`,y:`11`,width:`2`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`6`,y:`6`,width:`4`,height:`4`,fill:`#fff8e0`})]})}function k(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`1`,width:`6`,height:`2`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`10`,height:`2`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`2`,y:`5`,width:`12`,height:`6`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`3`,y:`11`,width:`10`,height:`2`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`5`,y:`13`,width:`6`,height:`2`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`4`,y:`4`,width:`8`,height:`8`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`5`,y:`3`,width:`6`,height:`1`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`5`,y:`12`,width:`6`,height:`1`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`3`,y:`5`,width:`1`,height:`6`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`12`,y:`5`,width:`1`,height:`6`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`6`,y:`6`,width:`4`,height:`4`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`7`,y:`5`,width:`2`,height:`1`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`7`,y:`10`,width:`2`,height:`1`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`5`,y:`7`,width:`1`,height:`2`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`10`,y:`7`,width:`1`,height:`2`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`2`,height:`2`,fill:`#c8c0ff`})]})}function A(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`1`,width:`6`,height:`5`,fill:`#e8c87a`}),(0,e.jsx)(`rect`,{x:`7`,y:`6`,width:`2`,height:`1`,fill:`#d4a85a`}),(0,e.jsx)(`rect`,{x:`3`,y:`7`,width:`10`,height:`5`,fill:`#c8873a`}),(0,e.jsx)(`rect`,{x:`1`,y:`7`,width:`2`,height:`4`,fill:`#c8873a`}),(0,e.jsx)(`rect`,{x:`13`,y:`7`,width:`2`,height:`4`,fill:`#c8873a`}),(0,e.jsx)(`rect`,{x:`4`,y:`12`,width:`3`,height:`3`,fill:`#8a5c2a`}),(0,e.jsx)(`rect`,{x:`9`,y:`12`,width:`3`,height:`3`,fill:`#8a5c2a`})]})}function j(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`1`,width:`3`,height:`4`,fill:`#c8a060`}),(0,e.jsx)(`rect`,{x:`11`,y:`1`,width:`3`,height:`4`,fill:`#c8a060`}),(0,e.jsx)(`rect`,{x:`3`,y:`2`,width:`1`,height:`2`,fill:`#e8886a`}),(0,e.jsx)(`rect`,{x:`12`,y:`2`,width:`1`,height:`2`,fill:`#e8886a`}),(0,e.jsx)(`rect`,{x:`3`,y:`4`,width:`10`,height:`6`,fill:`#c8a060`}),(0,e.jsx)(`rect`,{x:`5`,y:`8`,width:`6`,height:`3`,fill:`#d4b070`}),(0,e.jsx)(`rect`,{x:`7`,y:`8`,width:`2`,height:`1`,fill:`#5a3020`}),(0,e.jsx)(`rect`,{x:`4`,y:`6`,width:`3`,height:`2`,fill:`#e8a020`}),(0,e.jsx)(`rect`,{x:`9`,y:`6`,width:`3`,height:`2`,fill:`#e8a020`}),(0,e.jsx)(`rect`,{x:`5`,y:`6`,width:`1`,height:`2`,fill:`#1a1008`}),(0,e.jsx)(`rect`,{x:`10`,y:`6`,width:`1`,height:`2`,fill:`#1a1008`}),(0,e.jsx)(`rect`,{x:`3`,y:`11`,width:`10`,height:`4`,fill:`#a87840`}),(0,e.jsx)(`rect`,{x:`1`,y:`11`,width:`2`,height:`3`,fill:`#a87840`}),(0,e.jsx)(`rect`,{x:`13`,y:`11`,width:`2`,height:`3`,fill:`#a87840`})]})}function M(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`3`,y:`1`,width:`2`,height:`5`,fill:`#cc3030`}),(0,e.jsx)(`rect`,{x:`11`,y:`1`,width:`2`,height:`5`,fill:`#cc3030`}),(0,e.jsx)(`rect`,{x:`2`,y:`1`,width:`2`,height:`2`,fill:`#cc3030`}),(0,e.jsx)(`rect`,{x:`12`,y:`1`,width:`2`,height:`2`,fill:`#cc3030`}),(0,e.jsx)(`rect`,{x:`3`,y:`5`,width:`10`,height:`6`,fill:`#7a2a2a`}),(0,e.jsx)(`rect`,{x:`4`,y:`7`,width:`3`,height:`2`,fill:`#ff2020`}),(0,e.jsx)(`rect`,{x:`9`,y:`7`,width:`3`,height:`2`,fill:`#ff2020`}),(0,e.jsx)(`rect`,{x:`5`,y:`7`,width:`1`,height:`2`,fill:`#ff8080`}),(0,e.jsx)(`rect`,{x:`10`,y:`7`,width:`1`,height:`2`,fill:`#ff8080`}),(0,e.jsx)(`rect`,{x:`6`,y:`11`,width:`1`,height:`2`,fill:`#f0e8d0`}),(0,e.jsx)(`rect`,{x:`9`,y:`11`,width:`1`,height:`2`,fill:`#f0e8d0`}),(0,e.jsx)(`rect`,{x:`2`,y:`12`,width:`12`,height:`4`,fill:`#5a1a1a`}),(0,e.jsx)(`rect`,{x:`1`,y:`12`,width:`2`,height:`3`,fill:`#5a1a1a`}),(0,e.jsx)(`rect`,{x:`13`,y:`12`,width:`2`,height:`3`,fill:`#5a1a1a`})]})}function N(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`4`,y:`1`,width:`8`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`3`,y:`2`,width:`10`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`2`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`11`,y:`3`,width:`2`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`5`,y:`4`,width:`6`,height:`5`,fill:`#f4e4c0`}),(0,e.jsx)(`rect`,{x:`6`,y:`6`,width:`2`,height:`1`,fill:`#6090e0`}),(0,e.jsx)(`rect`,{x:`10`,y:`6`,width:`2`,height:`1`,fill:`#6090e0`}),(0,e.jsx)(`rect`,{x:`1`,y:`9`,width:`4`,height:`5`,fill:`#f0f0f8`}),(0,e.jsx)(`rect`,{x:`11`,y:`9`,width:`4`,height:`5`,fill:`#f0f0f8`}),(0,e.jsx)(`rect`,{x:`1`,y:`9`,width:`2`,height:`3`,fill:`#ffffff`}),(0,e.jsx)(`rect`,{x:`13`,y:`9`,width:`2`,height:`3`,fill:`#ffffff`}),(0,e.jsx)(`rect`,{x:`5`,y:`9`,width:`6`,height:`6`,fill:`#d4c8f0`}),(0,e.jsx)(`rect`,{x:`4`,y:`10`,width:`1`,height:`4`,fill:`#d4c8f0`}),(0,e.jsx)(`rect`,{x:`11`,y:`10`,width:`1`,height:`4`,fill:`#d4c8f0`})]})}function P(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`6`,y:`1`,width:`4`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`5`,y:`3`,width:`6`,height:`4`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`4`,y:`7`,width:`8`,height:`4`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`5`,y:`11`,width:`6`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`4`,y:`13`,width:`2`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`7`,y:`13`,width:`2`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`10`,y:`13`,width:`2`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`4`,height:`3`,fill:`#b0eff6`}),(0,e.jsx)(`rect`,{x:`7`,y:`3`,width:`2`,height:`1`,fill:`#b0eff6`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`2`,height:`2`,fill:`#ffffff`}),(0,e.jsx)(`rect`,{x:`9`,y:`7`,width:`2`,height:`2`,fill:`#ffffff`}),(0,e.jsx)(`rect`,{x:`7`,y:`8`,width:`1`,height:`1`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`10`,y:`8`,width:`1`,height:`1`,fill:`#66d9e8`})]})}function F(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`1`,y:`11`,width:`3`,height:`4`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`4`,height:`8`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`12`,y:`4`,width:`3`,height:`11`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`1`,y:`15`,width:`14`,height:`1`,fill:`#5a5a6a`}),(0,e.jsx)(`rect`,{x:`1`,y:`8`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`3`,y:`10`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`2`,y:`10`,width:`1`,height:`1`,fill:`#e6db74`})]})}function I(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`1`,y:`11`,width:`3`,height:`4`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`4`,height:`8`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`12`,y:`4`,width:`3`,height:`11`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`1`,y:`15`,width:`14`,height:`1`,fill:`#5a5a6a`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`9`,y:`4`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`7`,y:`5`,width:`2`,height:`1`,fill:`#e6db74`})]})}function L(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`1`,y:`11`,width:`3`,height:`4`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`4`,height:`8`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`12`,y:`4`,width:`3`,height:`11`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`1`,y:`15`,width:`14`,height:`1`,fill:`#5a5a6a`}),(0,e.jsx)(`rect`,{x:`13`,y:`1`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`14`,y:`1`,width:`1`,height:`3`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`13`,y:`3`,width:`1`,height:`1`,fill:`#e6db74`})]})}var R={sword:g,staff:v,bow:_,katar:y,book:b,hammer:x,neutral:S,earth:C,wind:w,water:T,fire:E,light:O,dark:D,void:k,human:A,beast:j,demon:M,angel:N,spirit:P,small:F,medium:I,large:L},z=Object.keys(R);function B({name:t=`sword`,size:n=22,style:r}){let i=R[t]||g;return(0,e.jsx)(`span`,{style:{display:`inline-flex`,alignItems:`center`,justifyContent:`center`,width:n,height:n,imageRendering:`pixelated`,flexShrink:0,...r},children:(0,e.jsx)(i,{})})}B.icons=z;var V=B;function H(){return(0,e.jsx)(`svg`,{viewBox:`0 0 12 8`,width:12,height:12,"aria-hidden":`true`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,e.jsx)(`polyline`,{points:`1,1.5 6,6.5 11,1.5`})})}function U({href:n,label:r,className:i,children:a,...o}){return(0,e.jsx)(`a`,{...o,href:n,"aria-label":r,className:t(`ns-section-arrow`,i),children:a||(0,e.jsx)(H,{})})}exports.Button=s,exports.FeatureCard=c,exports.HUDBar=d,exports.HUDDivider=f,exports.HUDIcon=V,exports.HUDLabel=h,exports.QuestCard=l,exports.RPGIcon=B,exports.SectionArrow=U,exports.icons=z;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react/jsx-runtime");var t=(...e)=>e.filter(Boolean).join(` `);function n(e,t){return t?{...e,...t}:e}var r={gold:`var(--ns-gold)`,pink:`var(--ns-pink)`,purple:`var(--ns-purple)`,cyan:`var(--ns-cyan)`,green:`var(--ns-green)`,orange:`var(--ns-orange)`,later:`var(--ns-ink-faint)`},i={done:{className:`ns-quest-card--done`,label:`HOLDS`,icon:`✓`},active:{className:`ns-quest-card--active`,label:`BUILDING`,icon:`▶`},planned:{className:`ns-quest-card--planned`,label:`PLANNED`,icon:`◌`},locked:{className:`ns-quest-card--locked`,label:`LATER`,icon:`✦`}},a=new Set([`play`,`ghost`]),o=new Set([`sm`,`md`,`lg`]);function s({variant:n=`play`,size:r=`md`,href:i,onClick:s,children:c,disabled:l=!1,className:u,type:d=`button`,...f}){let p=a.has(n)?n:`play`,m=o.has(r)?r:`md`,h=t(`ns-button`,`ns-button--${p}`,`ns-button--${m}`,u),g={...f,className:h,onClick:l?void 0:s};return i?(0,e.jsx)(`a`,{...g,href:l?void 0:i,"aria-disabled":l||void 0,tabIndex:l?-1:f.tabIndex,children:c}):(0,e.jsx)(`button`,{...g,type:d,disabled:l,children:c})}function c({icon:i,title:a,body:o,tag:s,iconColor:c=r.gold,className:l,style:u,...d}){return(0,e.jsxs)(`li`,{...d,className:t(`ns-card ns-feature-card`,l),style:n({"--ns-feature-accent":c},u),children:[(0,e.jsx)(`span`,{className:`ns-icon-slot ns-feature-card__icon`,"aria-hidden":`true`,children:i}),(0,e.jsxs)(`div`,{children:[(0,e.jsx)(`h3`,{className:`ns-feature-card__title`,children:a}),(0,e.jsx)(`p`,{className:`ns-feature-card__body`,children:o})]}),s&&(0,e.jsx)(`span`,{className:`ns-tag ns-feature-card__tag`,children:s})]})}function l({gate:n,title:r,body:a,status:o=`locked`,className:s,...c}){let l=i[o]||i.locked;return(0,e.jsxs)(`li`,{...c,className:t(`ns-quest-card`,l.className,s),children:[(0,e.jsx)(`span`,{className:`ns-quest-card__icon`,"aria-hidden":`true`,children:l.icon}),(0,e.jsxs)(`div`,{className:`ns-quest-card__body`,children:[(0,e.jsx)(`p`,{className:`ns-quest-card__title`,children:`Gate ${n} · ${r}`}),(0,e.jsx)(`p`,{className:`ns-quest-card__desc`,children:a}),(0,e.jsx)(`span`,{className:`ns-status-pill`,children:l.label})]})]})}var u=`var(--ns-font-pixel, "Press Start 2P", monospace)`;function d({value:t=40,max:n=40,fillColor:r=`var(--hud-hp-fill, #4caf73)`,trackColor:i=`var(--hud-track, rgba(255, 255, 255, 0.10))`,height:a=14,style:o,role:s=`meter`,...c}){let l=n>0?Math.max(0,Math.min(100,t/n*100)):0;return(0,e.jsxs)(`div`,{...c,role:s,"aria-valuemin":0,"aria-valuemax":n,"aria-valuenow":Math.max(0,Math.min(t,n)),style:{position:`relative`,background:i,height:a,overflow:`hidden`,fontFamily:u,...o},children:[(0,e.jsx)(`div`,{style:{position:`absolute`,inset:0,width:`${l}%`,background:r,transition:`width .35s ease-out`}}),(0,e.jsxs)(`span`,{style:{position:`absolute`,inset:0,display:`flex`,alignItems:`center`,paddingLeft:4,fontSize:4,color:`#fff`,pointerEvents:`none`},children:[t,` / `,n]})]})}function f({direction:t=`vertical`,color:n=`var(--ns-line)`,style:r,role:i=`separator`,...a}){let o=t===`vertical`;return(0,e.jsx)(`div`,{...a,role:i,"aria-orientation":t,style:{width:o?`1px`:`100%`,height:o?`100%`:`1px`,background:n,flexShrink:0,alignSelf:`stretch`,...r}})}var p=`var(--ns-font-pixel, "Press Start 2P", monospace)`,m={left:`flex-start`,center:`center`,right:`flex-end`};function h({text:t=`Label`,align:n=`left`,scale:r=1,color:i=`var(--ns-ink)`,fontSize:a=5,style:o,...s}){return(0,e.jsx)(`div`,{...s,style:{display:`flex`,alignItems:`center`,justifyContent:m[n]||m.left,paddingLeft:n===`right`?0:3,paddingRight:n===`left`?0:3,fontFamily:p,fontSize:a*r,color:i,whiteSpace:`nowrap`,overflow:`hidden`,width:`100%`,height:`100%`,...o},children:t})}function g(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`line`,{x1:`13`,y1:`2`,x2:`4`,y2:`11`,stroke:`#cfd8e2`,strokeWidth:`2`,strokeLinecap:`square`}),(0,e.jsx)(`line`,{x1:`6`,y1:`5`,x2:`10`,y2:`9`,stroke:`#e6db74`,strokeWidth:`2`,strokeLinecap:`square`}),(0,e.jsx)(`line`,{x1:`4`,y1:`10`,x2:`2`,y2:`13`,stroke:`#b07040`,strokeWidth:`1.5`,strokeLinecap:`square`})]})}function _(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`3`,y:`1`,width:`3`,height:`2`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`2`,y:`3`,width:`2`,height:`10`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`3`,y:`13`,width:`3`,height:`2`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`6`,y:`2`,width:`1`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`7`,y:`3`,width:`1`,height:`10`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`6`,y:`13`,width:`1`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`7`,height:`2`,fill:`#c8a878`}),(0,e.jsx)(`rect`,{x:`13`,y:`6`,width:`2`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`14`,y:`7`,width:`2`,height:`2`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`13`,y:`9`,width:`2`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`7`,y:`5`,width:`2`,height:`2`,fill:`#ae81ff`}),(0,e.jsx)(`rect`,{x:`7`,y:`9`,width:`2`,height:`2`,fill:`#ae81ff`})]})}function v(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`1`,width:`6`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`4`,y:`2`,width:`8`,height:`4`,fill:`#ae81ff`}),(0,e.jsx)(`rect`,{x:`5`,y:`6`,width:`6`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`6`,y:`3`,width:`4`,height:`2`,fill:`#d4b8ff`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`2`,height:`8`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`6`,y:`10`,width:`4`,height:`1`,fill:`#b07040`})]})}function y(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`1`,width:`2`,height:`8`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`2`,y:`9`,width:`2`,height:`3`,fill:`#a8b0bc`}),(0,e.jsx)(`rect`,{x:`12`,y:`1`,width:`2`,height:`8`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`12`,y:`9`,width:`2`,height:`3`,fill:`#a8b0bc`}),(0,e.jsx)(`rect`,{x:`2`,y:`8`,width:`12`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`6`,y:`10`,width:`4`,height:`5`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`3`,y:`0`,width:`1`,height:`1`,fill:`#eef0f4`}),(0,e.jsx)(`rect`,{x:`12`,y:`0`,width:`1`,height:`1`,fill:`#eef0f4`})]})}function b(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`2`,width:`2`,height:`12`,fill:`#6a4a6a`}),(0,e.jsx)(`rect`,{x:`4`,y:`2`,width:`10`,height:`12`,fill:`#8855aa`}),(0,e.jsx)(`rect`,{x:`13`,y:`3`,width:`1`,height:`10`,fill:`#f4f0e8`}),(0,e.jsx)(`rect`,{x:`7`,y:`4`,width:`2`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`6`,y:`5`,width:`4`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`7`,y:`6`,width:`2`,height:`1`,fill:`#c8a8ff`}),(0,e.jsx)(`rect`,{x:`6`,y:`8`,width:`4`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`7`,y:`9`,width:`2`,height:`2`,fill:`#e6db74`})]})}function x(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`4`,y:`1`,width:`8`,height:`1`,fill:`#a8b0bc`}),(0,e.jsx)(`rect`,{x:`3`,y:`2`,width:`10`,height:`5`,fill:`#a8b0bc`}),(0,e.jsx)(`rect`,{x:`3`,y:`2`,width:`10`,height:`1`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`1`,height:`3`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`3`,y:`7`,width:`10`,height:`1`,fill:`#5a6570`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`2`,height:`8`,fill:`#8a6540`}),(0,e.jsx)(`rect`,{x:`6`,y:`10`,width:`4`,height:`1`,fill:`#b07040`})]})}function S(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`6`,width:`12`,height:`4`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`6`,y:`2`,width:`4`,height:`12`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`2`,height:`2`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`11`,y:`3`,width:`2`,height:`2`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`3`,y:`11`,width:`2`,height:`2`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`11`,y:`11`,width:`2`,height:`2`,fill:`#7a7a8a`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`2`,height:`2`,fill:`#b0b0c0`}),(0,e.jsx)(`rect`,{x:`7`,y:`4`,width:`2`,height:`1`,fill:`#b0b0c0`}),(0,e.jsx)(`rect`,{x:`7`,y:`11`,width:`2`,height:`1`,fill:`#b0b0c0`}),(0,e.jsx)(`rect`,{x:`4`,y:`7`,width:`1`,height:`2`,fill:`#b0b0c0`}),(0,e.jsx)(`rect`,{x:`11`,y:`7`,width:`1`,height:`2`,fill:`#b0b0c0`})]})}function C(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`7`,y:`2`,width:`2`,height:`2`,fill:`#c8a050`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`4`,height:`2`,fill:`#c8a050`}),(0,e.jsx)(`rect`,{x:`5`,y:`6`,width:`6`,height:`2`,fill:`#8b6914`}),(0,e.jsx)(`rect`,{x:`4`,y:`8`,width:`8`,height:`2`,fill:`#8b6914`}),(0,e.jsx)(`rect`,{x:`3`,y:`10`,width:`10`,height:`2`,fill:`#6a5010`}),(0,e.jsx)(`rect`,{x:`1`,y:`12`,width:`14`,height:`3`,fill:`#5a4008`}),(0,e.jsx)(`rect`,{x:`7`,y:`2`,width:`2`,height:`1`,fill:`#f0ece0`}),(0,e.jsx)(`rect`,{x:`6`,y:`3`,width:`4`,height:`1`,fill:`#f0ece0`}),(0,e.jsx)(`rect`,{x:`5`,y:`8`,width:`1`,height:`1`,fill:`#a07820`}),(0,e.jsx)(`rect`,{x:`10`,y:`9`,width:`1`,height:`1`,fill:`#a07820`})]})}function w(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`4`,width:`10`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`3`,y:`5`,width:`2`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`12`,y:`3`,width:`2`,height:`2`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`13`,y:`5`,width:`1`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`1`,y:`7`,width:`11`,height:`2`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`12`,y:`6`,width:`2`,height:`4`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`11`,y:`10`,width:`2`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`2`,y:`12`,width:`9`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`2`,y:`11`,width:`2`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`11`,y:`12`,width:`2`,height:`2`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`10`,y:`14`,width:`2`,height:`1`,fill:`#5dcaa5`}),(0,e.jsx)(`rect`,{x:`2`,y:`3`,width:`8`,height:`1`,fill:`#90e8cc`}),(0,e.jsx)(`rect`,{x:`2`,y:`8`,width:`9`,height:`1`,fill:`#90e8cc`})]})}function T(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`6`,y:`1`,width:`4`,height:`1`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`5`,y:`2`,width:`6`,height:`2`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`4`,y:`4`,width:`8`,height:`6`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`5`,y:`10`,width:`6`,height:`2`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`6`,y:`12`,width:`4`,height:`2`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`7`,y:`14`,width:`2`,height:`1`,fill:`#378add`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`3`,height:`4`,fill:`#70b8f0`}),(0,e.jsx)(`rect`,{x:`7`,y:`3`,width:`2`,height:`1`,fill:`#70b8f0`}),(0,e.jsx)(`rect`,{x:`5`,y:`7`,width:`2`,height:`1`,fill:`#1a5a9a`}),(0,e.jsx)(`rect`,{x:`9`,y:`8`,width:`2`,height:`1`,fill:`#1a5a9a`})]})}function E(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`4`,y:`11`,width:`8`,height:`4`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`3`,y:`8`,width:`10`,height:`3`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`4`,y:`5`,width:`8`,height:`3`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`5`,y:`3`,width:`6`,height:`2`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`6`,y:`1`,width:`4`,height:`2`,fill:`#ba7517`}),(0,e.jsx)(`rect`,{x:`5`,y:`9`,width:`6`,height:`5`,fill:`#e8882a`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`4`,height:`2`,fill:`#e8882a`}),(0,e.jsx)(`rect`,{x:`6`,y:`10`,width:`4`,height:`3`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`7`,y:`9`,width:`2`,height:`1`,fill:`#e6db74`})]})}function D(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`2`,width:`6`,height:`2`,fill:`#888780`}),(0,e.jsx)(`rect`,{x:`3`,y:`4`,width:`8`,height:`8`,fill:`#888780`}),(0,e.jsx)(`rect`,{x:`5`,y:`12`,width:`6`,height:`2`,fill:`#888780`}),(0,e.jsx)(`rect`,{x:`4`,y:`3`,width:`1`,height:`10`,fill:`#888780`}),(0,e.jsx)(`rect`,{x:`8`,y:`4`,width:`4`,height:`8`,fill:`#1a1a20`}),(0,e.jsx)(`rect`,{x:`7`,y:`5`,width:`5`,height:`6`,fill:`#1a1a20`}),(0,e.jsx)(`rect`,{x:`11`,y:`2`,width:`1`,height:`1`,fill:`#c8c8d0`}),(0,e.jsx)(`rect`,{x:`13`,y:`5`,width:`1`,height:`1`,fill:`#c8c8d0`}),(0,e.jsx)(`rect`,{x:`12`,y:`9`,width:`1`,height:`1`,fill:`#c8c8d0`})]})}function O(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`5`,width:`6`,height:`6`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`4`,height:`1`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`6`,y:`11`,width:`4`,height:`1`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`4`,y:`6`,width:`1`,height:`4`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`11`,y:`6`,width:`1`,height:`4`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`7`,y:`1`,width:`2`,height:`3`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`7`,y:`12`,width:`2`,height:`3`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`1`,y:`7`,width:`3`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`12`,y:`7`,width:`3`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`2`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`11`,y:`3`,width:`2`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`3`,y:`11`,width:`2`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`11`,y:`11`,width:`2`,height:`2`,fill:`#fac775`}),(0,e.jsx)(`rect`,{x:`6`,y:`6`,width:`4`,height:`4`,fill:`#fff8e0`})]})}function k(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`1`,width:`6`,height:`2`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`10`,height:`2`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`2`,y:`5`,width:`12`,height:`6`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`3`,y:`11`,width:`10`,height:`2`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`5`,y:`13`,width:`6`,height:`2`,fill:`#7f77dd`}),(0,e.jsx)(`rect`,{x:`4`,y:`4`,width:`8`,height:`8`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`5`,y:`3`,width:`6`,height:`1`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`5`,y:`12`,width:`6`,height:`1`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`3`,y:`5`,width:`1`,height:`6`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`12`,y:`5`,width:`1`,height:`6`,fill:`#1a1828`}),(0,e.jsx)(`rect`,{x:`6`,y:`6`,width:`4`,height:`4`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`7`,y:`5`,width:`2`,height:`1`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`7`,y:`10`,width:`2`,height:`1`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`5`,y:`7`,width:`1`,height:`2`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`10`,y:`7`,width:`1`,height:`2`,fill:`#4a44aa`}),(0,e.jsx)(`rect`,{x:`7`,y:`7`,width:`2`,height:`2`,fill:`#c8c0ff`})]})}function A(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`5`,y:`1`,width:`6`,height:`5`,fill:`#e8c87a`}),(0,e.jsx)(`rect`,{x:`7`,y:`6`,width:`2`,height:`1`,fill:`#d4a85a`}),(0,e.jsx)(`rect`,{x:`3`,y:`7`,width:`10`,height:`5`,fill:`#c8873a`}),(0,e.jsx)(`rect`,{x:`1`,y:`7`,width:`2`,height:`4`,fill:`#c8873a`}),(0,e.jsx)(`rect`,{x:`13`,y:`7`,width:`2`,height:`4`,fill:`#c8873a`}),(0,e.jsx)(`rect`,{x:`4`,y:`12`,width:`3`,height:`3`,fill:`#8a5c2a`}),(0,e.jsx)(`rect`,{x:`9`,y:`12`,width:`3`,height:`3`,fill:`#8a5c2a`})]})}function j(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`2`,y:`1`,width:`3`,height:`4`,fill:`#c8a060`}),(0,e.jsx)(`rect`,{x:`11`,y:`1`,width:`3`,height:`4`,fill:`#c8a060`}),(0,e.jsx)(`rect`,{x:`3`,y:`2`,width:`1`,height:`2`,fill:`#e8886a`}),(0,e.jsx)(`rect`,{x:`12`,y:`2`,width:`1`,height:`2`,fill:`#e8886a`}),(0,e.jsx)(`rect`,{x:`3`,y:`4`,width:`10`,height:`6`,fill:`#c8a060`}),(0,e.jsx)(`rect`,{x:`5`,y:`8`,width:`6`,height:`3`,fill:`#d4b070`}),(0,e.jsx)(`rect`,{x:`7`,y:`8`,width:`2`,height:`1`,fill:`#5a3020`}),(0,e.jsx)(`rect`,{x:`4`,y:`6`,width:`3`,height:`2`,fill:`#e8a020`}),(0,e.jsx)(`rect`,{x:`9`,y:`6`,width:`3`,height:`2`,fill:`#e8a020`}),(0,e.jsx)(`rect`,{x:`5`,y:`6`,width:`1`,height:`2`,fill:`#1a1008`}),(0,e.jsx)(`rect`,{x:`10`,y:`6`,width:`1`,height:`2`,fill:`#1a1008`}),(0,e.jsx)(`rect`,{x:`3`,y:`11`,width:`10`,height:`4`,fill:`#a87840`}),(0,e.jsx)(`rect`,{x:`1`,y:`11`,width:`2`,height:`3`,fill:`#a87840`}),(0,e.jsx)(`rect`,{x:`13`,y:`11`,width:`2`,height:`3`,fill:`#a87840`})]})}function M(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`3`,y:`1`,width:`2`,height:`5`,fill:`#cc3030`}),(0,e.jsx)(`rect`,{x:`11`,y:`1`,width:`2`,height:`5`,fill:`#cc3030`}),(0,e.jsx)(`rect`,{x:`2`,y:`1`,width:`2`,height:`2`,fill:`#cc3030`}),(0,e.jsx)(`rect`,{x:`12`,y:`1`,width:`2`,height:`2`,fill:`#cc3030`}),(0,e.jsx)(`rect`,{x:`3`,y:`5`,width:`10`,height:`6`,fill:`#7a2a2a`}),(0,e.jsx)(`rect`,{x:`4`,y:`7`,width:`3`,height:`2`,fill:`#ff2020`}),(0,e.jsx)(`rect`,{x:`9`,y:`7`,width:`3`,height:`2`,fill:`#ff2020`}),(0,e.jsx)(`rect`,{x:`5`,y:`7`,width:`1`,height:`2`,fill:`#ff8080`}),(0,e.jsx)(`rect`,{x:`10`,y:`7`,width:`1`,height:`2`,fill:`#ff8080`}),(0,e.jsx)(`rect`,{x:`6`,y:`11`,width:`1`,height:`2`,fill:`#f0e8d0`}),(0,e.jsx)(`rect`,{x:`9`,y:`11`,width:`1`,height:`2`,fill:`#f0e8d0`}),(0,e.jsx)(`rect`,{x:`2`,y:`12`,width:`12`,height:`4`,fill:`#5a1a1a`}),(0,e.jsx)(`rect`,{x:`1`,y:`12`,width:`2`,height:`3`,fill:`#5a1a1a`}),(0,e.jsx)(`rect`,{x:`13`,y:`12`,width:`2`,height:`3`,fill:`#5a1a1a`})]})}function N(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`4`,y:`1`,width:`8`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`3`,y:`2`,width:`10`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`3`,y:`3`,width:`2`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`11`,y:`3`,width:`2`,height:`1`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`5`,y:`4`,width:`6`,height:`5`,fill:`#f4e4c0`}),(0,e.jsx)(`rect`,{x:`6`,y:`6`,width:`2`,height:`1`,fill:`#6090e0`}),(0,e.jsx)(`rect`,{x:`10`,y:`6`,width:`2`,height:`1`,fill:`#6090e0`}),(0,e.jsx)(`rect`,{x:`1`,y:`9`,width:`4`,height:`5`,fill:`#f0f0f8`}),(0,e.jsx)(`rect`,{x:`11`,y:`9`,width:`4`,height:`5`,fill:`#f0f0f8`}),(0,e.jsx)(`rect`,{x:`1`,y:`9`,width:`2`,height:`3`,fill:`#ffffff`}),(0,e.jsx)(`rect`,{x:`13`,y:`9`,width:`2`,height:`3`,fill:`#ffffff`}),(0,e.jsx)(`rect`,{x:`5`,y:`9`,width:`6`,height:`6`,fill:`#d4c8f0`}),(0,e.jsx)(`rect`,{x:`4`,y:`10`,width:`1`,height:`4`,fill:`#d4c8f0`}),(0,e.jsx)(`rect`,{x:`11`,y:`10`,width:`1`,height:`4`,fill:`#d4c8f0`})]})}function P(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`6`,y:`1`,width:`4`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`5`,y:`3`,width:`6`,height:`4`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`4`,y:`7`,width:`8`,height:`4`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`5`,y:`11`,width:`6`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`4`,y:`13`,width:`2`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`7`,y:`13`,width:`2`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`10`,y:`13`,width:`2`,height:`2`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`4`,height:`3`,fill:`#b0eff6`}),(0,e.jsx)(`rect`,{x:`7`,y:`3`,width:`2`,height:`1`,fill:`#b0eff6`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`2`,height:`2`,fill:`#ffffff`}),(0,e.jsx)(`rect`,{x:`9`,y:`7`,width:`2`,height:`2`,fill:`#ffffff`}),(0,e.jsx)(`rect`,{x:`7`,y:`8`,width:`1`,height:`1`,fill:`#66d9e8`}),(0,e.jsx)(`rect`,{x:`10`,y:`8`,width:`1`,height:`1`,fill:`#66d9e8`})]})}function F(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`1`,y:`11`,width:`3`,height:`4`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`4`,height:`8`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`12`,y:`4`,width:`3`,height:`11`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`1`,y:`15`,width:`14`,height:`1`,fill:`#5a5a6a`}),(0,e.jsx)(`rect`,{x:`1`,y:`8`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`3`,y:`10`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`2`,y:`10`,width:`1`,height:`1`,fill:`#e6db74`})]})}function I(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`1`,y:`11`,width:`3`,height:`4`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`4`,height:`8`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`12`,y:`4`,width:`3`,height:`11`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`1`,y:`15`,width:`14`,height:`1`,fill:`#5a5a6a`}),(0,e.jsx)(`rect`,{x:`6`,y:`4`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`9`,y:`4`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`7`,y:`5`,width:`2`,height:`1`,fill:`#e6db74`})]})}function L(){return(0,e.jsxs)(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,e.jsx)(`rect`,{x:`1`,y:`11`,width:`3`,height:`4`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`6`,y:`7`,width:`4`,height:`8`,fill:`#4a4a5a`}),(0,e.jsx)(`rect`,{x:`12`,y:`4`,width:`3`,height:`11`,fill:`#cfd8e2`}),(0,e.jsx)(`rect`,{x:`1`,y:`15`,width:`14`,height:`1`,fill:`#5a5a6a`}),(0,e.jsx)(`rect`,{x:`13`,y:`1`,width:`1`,height:`2`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`14`,y:`1`,width:`1`,height:`3`,fill:`#e6db74`}),(0,e.jsx)(`rect`,{x:`13`,y:`3`,width:`1`,height:`1`,fill:`#e6db74`})]})}var R={sword:g,staff:v,bow:_,katar:y,book:b,hammer:x,neutral:S,earth:C,wind:w,water:T,fire:E,light:O,dark:D,void:k,human:A,beast:j,demon:M,angel:N,spirit:P,small:F,medium:I,large:L},z=Object.keys(R),B=Object.assign(function({name:t=`sword`,size:n=22,style:r}){let i=R[t]||g;return(0,e.jsx)(`span`,{style:{display:`inline-flex`,alignItems:`center`,justifyContent:`center`,width:n,height:n,imageRendering:`pixelated`,flexShrink:0,...r},children:(0,e.jsx)(i,{})})},{icons:z}),V=B;function H(){return(0,e.jsx)(`svg`,{viewBox:`0 0 12 8`,width:12,height:12,"aria-hidden":`true`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,e.jsx)(`polyline`,{points:`1,1.5 6,6.5 11,1.5`})})}function U({href:n,label:r,className:i,children:a,...o}){return(0,e.jsx)(`a`,{...o,href:n,"aria-label":r,className:t(`ns-section-arrow`,i),children:a||(0,e.jsx)(H,{})})}exports.Button=s,exports.FeatureCard=c,exports.HUDBar=d,exports.HUDDivider=f,exports.HUDIcon=V,exports.HUDLabel=h,exports.QuestCard=l,exports.RPGIcon=B,exports.SectionArrow=U,exports.icons=z;
@@ -0,0 +1 @@
1
+ export * from './components/react/index.js';
package/dist/index.d.ts CHANGED
@@ -1,18 +1 @@
1
- export { Button, type ButtonProps } from './components/buttons/Button';
2
- export { FeatureCard, type FeatureCardProps } from './components/cards/FeatureCard';
3
- export { QuestCard, type QuestCardProps } from './components/cards/QuestCard';
4
- export { HUDBar, type HUDBarProps } from './components/hud/HUDBar';
5
- export { HUDDivider, type HUDDividerProps } from './components/hud/HUDDivider';
6
- export { HUDLabel, type HUDLabelProps } from './components/hud/HUDLabel';
7
- export {
8
- RPGIcon,
9
- HUDIcon,
10
- icons,
11
- type RPGIconElement,
12
- type RPGIconName,
13
- type RPGIconProps,
14
- type RPGIconRace,
15
- type RPGIconSize,
16
- type RPGIconWeapon,
17
- } from './components/icons/RPGIcon';
18
- export { SectionArrow, type SectionArrowProps } from './components/navigation/SectionArrow';
1
+ export * from './components/react/index.js';
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
- //#region components/shared/styles.js
2
+ //#region components/shared/styles.ts
3
3
  var n = (...e) => e.filter(Boolean).join(" ");
4
4
  function r(e, t) {
5
5
  return t ? {
@@ -61,7 +61,7 @@ function c({ variant: t = "play", size: r = "md", href: i, onClick: a, children:
61
61
  });
62
62
  }
63
63
  //#endregion
64
- //#region components/cards/FeatureCard.jsx
64
+ //#region components/cards/FeatureCard.tsx
65
65
  function l({ icon: a, title: o, body: s, tag: c, iconColor: l = i.gold, className: u, style: d, ...f }) {
66
66
  return /* @__PURE__ */ t("li", {
67
67
  ...f,
@@ -88,7 +88,7 @@ function l({ icon: a, title: o, body: s, tag: c, iconColor: l = i.gold, classNam
88
88
  });
89
89
  }
90
90
  //#endregion
91
- //#region components/cards/QuestCard.jsx
91
+ //#region components/cards/QuestCard.tsx
92
92
  function u({ gate: r, title: i, body: o, status: s = "locked", className: c, ...l }) {
93
93
  let u = a[s] || a.locked;
94
94
  return /* @__PURE__ */ t("li", {
@@ -118,11 +118,16 @@ function u({ gate: r, title: i, body: o, status: s = "locked", className: c, ...
118
118
  });
119
119
  }
120
120
  //#endregion
121
- //#region components/hud/HUDBar.jsx
121
+ //#region components/hud/HUDBar.tsx
122
122
  var d = "var(--ns-font-pixel, \"Press Start 2P\", monospace)";
123
- function f({ value: n = 40, max: r = 40, fillColor: i = "var(--hud-hp-fill, #4caf73)", trackColor: a = "var(--hud-track, rgba(255, 255, 255, 0.10))", height: o = 14, style: s }) {
124
- let c = r > 0 ? Math.max(0, Math.min(100, n / r * 100)) : 0;
123
+ function f({ value: n = 40, max: r = 40, fillColor: i = "var(--hud-hp-fill, #4caf73)", trackColor: a = "var(--hud-track, rgba(255, 255, 255, 0.10))", height: o = 14, style: s, role: c = "meter", ...l }) {
124
+ let u = r > 0 ? Math.max(0, Math.min(100, n / r * 100)) : 0;
125
125
  return /* @__PURE__ */ t("div", {
126
+ ...l,
127
+ role: c,
128
+ "aria-valuemin": 0,
129
+ "aria-valuemax": r,
130
+ "aria-valuenow": Math.max(0, Math.min(n, r)),
126
131
  style: {
127
132
  position: "relative",
128
133
  background: a,
@@ -134,7 +139,7 @@ function f({ value: n = 40, max: r = 40, fillColor: i = "var(--hud-hp-fill, #4ca
134
139
  children: [/* @__PURE__ */ e("div", { style: {
135
140
  position: "absolute",
136
141
  inset: 0,
137
- width: `${c}%`,
142
+ width: `${u}%`,
138
143
  background: i,
139
144
  transition: "width .35s ease-out"
140
145
  } }), /* @__PURE__ */ t("span", {
@@ -157,27 +162,33 @@ function f({ value: n = 40, max: r = 40, fillColor: i = "var(--hud-hp-fill, #4ca
157
162
  });
158
163
  }
159
164
  //#endregion
160
- //#region components/hud/HUDDivider.jsx
161
- function p({ direction: t = "vertical", color: n = "var(--ns-line)", style: r }) {
162
- let i = t === "vertical";
163
- return /* @__PURE__ */ e("div", { style: {
164
- width: i ? "1px" : "100%",
165
- height: i ? "100%" : "1px",
166
- background: n,
167
- flexShrink: 0,
168
- alignSelf: "stretch",
169
- ...r
170
- } });
165
+ //#region components/hud/HUDDivider.tsx
166
+ function p({ direction: t = "vertical", color: n = "var(--ns-line)", style: r, role: i = "separator", ...a }) {
167
+ let o = t === "vertical";
168
+ return /* @__PURE__ */ e("div", {
169
+ ...a,
170
+ role: i,
171
+ "aria-orientation": t,
172
+ style: {
173
+ width: o ? "1px" : "100%",
174
+ height: o ? "100%" : "1px",
175
+ background: n,
176
+ flexShrink: 0,
177
+ alignSelf: "stretch",
178
+ ...r
179
+ }
180
+ });
171
181
  }
172
182
  //#endregion
173
- //#region components/hud/HUDLabel.jsx
183
+ //#region components/hud/HUDLabel.tsx
174
184
  var m = "var(--ns-font-pixel, \"Press Start 2P\", monospace)", h = {
175
185
  left: "flex-start",
176
186
  center: "center",
177
187
  right: "flex-end"
178
188
  };
179
- function g({ text: t = "Label", align: n = "left", scale: r = 1, color: i = "var(--ns-ink)", fontSize: a = 5, style: o }) {
189
+ function g({ text: t = "Label", align: n = "left", scale: r = 1, color: i = "var(--ns-ink)", fontSize: a = 5, style: o, ...s }) {
180
190
  return /* @__PURE__ */ e("div", {
191
+ ...s,
181
192
  style: {
182
193
  display: "flex",
183
194
  alignItems: "center",
@@ -197,7 +208,7 @@ function g({ text: t = "Label", align: n = "left", scale: r = 1, color: i = "var
197
208
  });
198
209
  }
199
210
  //#endregion
200
- //#region components/icons/RPGIcon.jsx
211
+ //#region components/icons/RPGIcon.tsx
201
212
  function _() {
202
213
  return /* @__PURE__ */ t("svg", {
203
214
  viewBox: "0 0 16 16",
@@ -1936,8 +1947,7 @@ var z = {
1936
1947
  small: I,
1937
1948
  medium: L,
1938
1949
  large: R
1939
- }, B = Object.keys(z);
1940
- function V({ name: t = "sword", size: n = 22, style: r }) {
1950
+ }, B = Object.keys(z), V = Object.assign(function({ name: t = "sword", size: n = 22, style: r }) {
1941
1951
  let i = z[t] || _;
1942
1952
  return /* @__PURE__ */ e("span", {
1943
1953
  style: {
@@ -1952,11 +1962,9 @@ function V({ name: t = "sword", size: n = 22, style: r }) {
1952
1962
  },
1953
1963
  children: /* @__PURE__ */ e(i, {})
1954
1964
  });
1955
- }
1956
- V.icons = B;
1957
- var H = V;
1965
+ }, { icons: B }), H = V;
1958
1966
  //#endregion
1959
- //#region components/navigation/SectionArrow.jsx
1967
+ //#region components/navigation/SectionArrow.tsx
1960
1968
  function U() {
1961
1969
  return /* @__PURE__ */ e("svg", {
1962
1970
  viewBox: "0 0 12 8",
@@ -0,0 +1,4 @@
1
+ import type { Config } from 'tailwindcss';
2
+
3
+ declare const preset: Config;
4
+ export = preset;
@@ -0,0 +1,4 @@
1
+ import type { Config } from 'tailwindcss';
2
+
3
+ declare const preset: Config;
4
+ export = preset;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noobsociety/nsds",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "NoobSociety Design System — Monokai dark tokens, Tailwind preset, and pixel-art React components",
5
5
  "keywords": [
6
6
  "design-system",
@@ -13,17 +13,23 @@
13
13
  "author": "NoobSociety",
14
14
  "license": "MIT",
15
15
  "scripts": {
16
- "build": "vite build",
16
+ "build": "vite build && tsc -p tsconfig.build.json && node scripts/prepare-types.mjs",
17
17
  "build:storybook": "storybook build --disable-telemetry",
18
18
  "changeset": "changeset",
19
19
  "changeset:publish": "changeset publish",
20
20
  "changeset:version": "changeset version && node scripts/release-changelog.mjs",
21
- "check": "npm run build && npm run check:package && npm run check:types && npm run test:smoke",
21
+ "check": "npm run build && npm run check:package && npm run check:exports && npm run check:install && npm run check:types && npm run check:docs && npm run test:components && npm run test:visual && npm run test:smoke",
22
+ "check:docs": "npm run docs:api && git diff --exit-code docs/reference/api",
23
+ "check:exports": "publint run --pack npm --level warning && attw --pack . --profile node16 --entrypoints . ./react ./tailwind --format table --no-emoji",
24
+ "check:install": "node scripts/check-install.mjs",
22
25
  "check:package": "node scripts/check-package.mjs",
23
26
  "check:types": "tsc --noEmit",
27
+ "docs:api": "typedoc --options typedoc.json",
24
28
  "prepublishOnly": "npm run build",
25
29
  "storybook": "storybook dev -p 6006 --disable-telemetry",
26
30
  "test": "npm run check",
31
+ "test:components": "vitest run",
32
+ "test:visual": "playwright test",
27
33
  "test:smoke": "node scripts/smoke-imports.mjs",
28
34
  "release:dry-run": "npm pack --dry-run"
29
35
  },
@@ -56,16 +62,35 @@
56
62
  ],
57
63
  "exports": {
58
64
  ".": {
59
- "types": "./dist/index.d.ts",
60
- "import": "./dist/index.js",
61
- "require": "./dist/index.cjs"
65
+ "import": {
66
+ "types": "./dist/index.d.ts",
67
+ "default": "./dist/index.js"
68
+ },
69
+ "require": {
70
+ "types": "./dist/index.d.cts",
71
+ "default": "./dist/index.cjs"
72
+ }
62
73
  },
63
74
  "./react": {
64
- "types": "./dist/index.d.ts",
65
- "import": "./dist/index.js",
66
- "require": "./dist/index.cjs"
75
+ "import": {
76
+ "types": "./dist/index.d.ts",
77
+ "default": "./dist/index.js"
78
+ },
79
+ "require": {
80
+ "types": "./dist/index.d.cts",
81
+ "default": "./dist/index.cjs"
82
+ }
83
+ },
84
+ "./tailwind": {
85
+ "import": {
86
+ "types": "./dist/tailwind/preset.d.ts",
87
+ "default": "./dist/tailwind/preset.js"
88
+ },
89
+ "require": {
90
+ "types": "./dist/tailwind/preset.d.cts",
91
+ "default": "./dist/tailwind/preset.js"
92
+ }
67
93
  },
68
- "./tailwind": "./dist/tailwind/preset.js",
69
94
  "./styles": "./dist/styles.css",
70
95
  "./styles.css": "./dist/styles.css",
71
96
  "./tokens/*": "./dist/tokens/*",
@@ -78,16 +103,25 @@
78
103
  "react-dom": ">=18.0.0"
79
104
  },
80
105
  "devDependencies": {
106
+ "@arethetypeswrong/cli": "^0.18.3",
81
107
  "@changesets/cli": "^2.31.0",
108
+ "@playwright/test": "^1.61.0",
82
109
  "@storybook/addon-docs": "^10.4.6",
83
110
  "@storybook/react-vite": "^10.4.6",
111
+ "@testing-library/jest-dom": "^6.9.1",
112
+ "@testing-library/react": "^16.3.2",
84
113
  "@types/react": "^19.2.17",
85
114
  "@vitejs/plugin-react": "^6.0.2",
115
+ "jsdom": "^29.1.1",
116
+ "publint": "^0.3.21",
86
117
  "react": "^19.2.7",
87
118
  "react-dom": "^19.2.7",
88
119
  "storybook": "^10.4.6",
89
120
  "tailwindcss": "^3.0.0",
121
+ "typedoc": "^0.28.19",
122
+ "typedoc-plugin-markdown": "^4.12.0",
90
123
  "typescript": "^6.0.3",
91
- "vite": "^8.0.16"
124
+ "vite": "^8.0.16",
125
+ "vitest": "^4.1.9"
92
126
  }
93
127
  }