@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
@@ -0,0 +1,37 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ import type { NSStyle } from '../shared/styles.js';
3
+ export interface HUDTab {
4
+ /** Unique identifier */
5
+ id: string;
6
+ /** Tab button label */
7
+ label: string;
8
+ /** Content rendered in the panel when this tab is active */
9
+ content?: ReactNode;
10
+ }
11
+ export interface HUDTabWindowProps {
12
+ /** Tab definitions */
13
+ tabs?: HUDTab[];
14
+ /** ID of the initially-active tab. Defaults to the first tab. */
15
+ defaultTab?: string;
16
+ /** Tab bar height in px. 1 grid cell ≈ 14 px. */
17
+ tabHeight?: number;
18
+ /**
19
+ * Minimum tab button width in px.
20
+ * Defaults to 48 px — two grid cells, the narrowest comfortably-readable
21
+ * tab label at HUD scale.
22
+ */
23
+ tabMinWidth?: number;
24
+ /** Label font size in px */
25
+ tabFontSize?: number;
26
+ /** Horizontal alignment of tab buttons within the tab bar */
27
+ tabAlign?: 'left' | 'center' | 'right';
28
+ style?: NSStyle;
29
+ }
30
+ /**
31
+ * HUDTabWindow — a resizable tabbed panel container.
32
+ *
33
+ * Each tab is at minimum 48 px (two grid cells) wide and 1 grid cell tall.
34
+ * The window fills its parent; size it with the surrounding grid.
35
+ * Pass `content` on each tab to render any HUD element inside.
36
+ */
37
+ export declare function HUDTabWindow({ tabs, defaultTab, tabHeight, tabMinWidth, tabFontSize, tabAlign, style, }: HUDTabWindowProps): ReactElement;
@@ -0,0 +1,197 @@
1
+ /* NoobSociety — In-game HUD editor chrome.
2
+ Toolbar, category tabs and the draggable element palette used by the
3
+ HUD Builder. Token-driven (no literals); import through styles.css.
4
+ Pairs with the 24×24 placement grid defined in tokens/hud.css. */
5
+
6
+ /* ── Rail container ─────────────────────────────────────────────── */
7
+ .ns-hud-panel {
8
+ display: flex;
9
+ flex-direction: column;
10
+ height: 100%;
11
+ min-height: 0;
12
+ background: var(--ns-bg-1);
13
+ border-left: 1px solid var(--ns-line);
14
+ color: var(--ns-ink);
15
+ font-family: var(--hud-font-ui);
16
+ overflow: hidden;
17
+ }
18
+
19
+ .ns-hud-panel__head {
20
+ display: flex;
21
+ align-items: center;
22
+ gap: var(--ns-space-2);
23
+ padding: var(--ns-space-3);
24
+ background: var(--ns-bg-0);
25
+ border-bottom: 1px solid var(--ns-line-soft);
26
+ flex-shrink: 0;
27
+ }
28
+
29
+ /* ── Pixel eyebrow / section label ──────────────────────────────── */
30
+ .ns-hud-eyebrow {
31
+ margin: 0;
32
+ color: var(--ns-gold);
33
+ font-family: var(--hud-font);
34
+ font-size: var(--hud-text-md);
35
+ line-height: 1;
36
+ letter-spacing: 0.16em;
37
+ text-transform: uppercase;
38
+ }
39
+
40
+ .ns-hud-eyebrow--muted {
41
+ color: var(--ns-ink-faint);
42
+ }
43
+
44
+ /* ── Toolbar ────────────────────────────────────────────────────── */
45
+ .ns-hud-toolbar {
46
+ display: flex;
47
+ gap: var(--ns-space-2);
48
+ padding: var(--ns-space-3);
49
+ flex-shrink: 0;
50
+ }
51
+
52
+ .ns-hud-tool {
53
+ flex: 1;
54
+ min-height: var(--hud-min-tap-h);
55
+ display: inline-flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ padding: var(--ns-space-2);
59
+ color: var(--ns-ink-dim);
60
+ background: var(--ns-bg-2);
61
+ border: 1px solid var(--ns-line);
62
+ border-radius: var(--hud-radius-sm);
63
+ font-family: var(--hud-font);
64
+ font-size: var(--hud-text-lg);
65
+ letter-spacing: 0.08em;
66
+ line-height: 1;
67
+ cursor: pointer;
68
+ transition:
69
+ color var(--ns-transition-fast),
70
+ background-color var(--ns-transition-fast),
71
+ border-color var(--ns-transition-fast);
72
+ }
73
+
74
+ .ns-hud-tool:hover {
75
+ color: var(--ns-ink);
76
+ border-color: var(--ns-line-strong);
77
+ }
78
+
79
+ .ns-hud-tool.is-on {
80
+ color: var(--ns-gold-btn-fg);
81
+ background: var(--ns-gold);
82
+ border-color: var(--ns-gold-deep);
83
+ }
84
+
85
+ .ns-hud-tool:active {
86
+ transform: translateY(1px);
87
+ }
88
+
89
+ /* ── Divider ────────────────────────────────────────────────────── */
90
+ .ns-hud-divider {
91
+ height: 1px;
92
+ margin-inline: var(--ns-space-3);
93
+ background: var(--ns-line-soft);
94
+ flex-shrink: 0;
95
+ }
96
+
97
+ /* ── Palette section ────────────────────────────────────────────── */
98
+ .ns-hud-section {
99
+ display: flex;
100
+ flex-direction: column;
101
+ gap: var(--ns-space-2);
102
+ padding: var(--ns-space-3);
103
+ flex: 1;
104
+ min-height: 0;
105
+ }
106
+
107
+ .ns-hud-tabs {
108
+ display: flex;
109
+ flex-wrap: wrap;
110
+ gap: var(--ns-space-1);
111
+ flex-shrink: 0;
112
+ }
113
+
114
+ .ns-hud-tab {
115
+ padding: var(--ns-space-1) 0.375rem;
116
+ color: var(--ns-ink-faint);
117
+ background: transparent;
118
+ border: 1px solid transparent;
119
+ border-radius: var(--hud-radius-sm);
120
+ font-family: var(--hud-font);
121
+ font-size: var(--hud-text-md);
122
+ letter-spacing: 0.04em;
123
+ line-height: 1;
124
+ cursor: pointer;
125
+ transition:
126
+ color var(--ns-transition-fast),
127
+ background-color var(--ns-transition-fast),
128
+ border-color var(--ns-transition-fast);
129
+ }
130
+
131
+ .ns-hud-tab:hover {
132
+ color: var(--ns-ink-dim);
133
+ background: var(--ns-line-soft);
134
+ }
135
+
136
+ .ns-hud-tab.is-active {
137
+ color: var(--ns-gold);
138
+ background: color-mix(in srgb, var(--ns-gold) 10%, transparent);
139
+ border-color: color-mix(in srgb, var(--ns-gold) 30%, transparent);
140
+ }
141
+
142
+ /* ── Element grid ───────────────────────────────────────────────── */
143
+ .ns-hud-palette {
144
+ display: flex;
145
+ flex-wrap: wrap;
146
+ align-content: flex-start;
147
+ gap: var(--ns-space-2);
148
+ padding-top: var(--ns-space-1);
149
+ flex: 1;
150
+ min-height: 0;
151
+ overflow-y: auto;
152
+ scrollbar-width: thin;
153
+ scrollbar-color: var(--ns-line-strong) transparent;
154
+ }
155
+
156
+ .ns-hud-slot {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ width: var(--ns-icon-slot-sm);
161
+ height: var(--ns-icon-slot-sm);
162
+ color: var(--ns-gold);
163
+ background: var(--ns-bg-2);
164
+ border: 1px solid transparent;
165
+ border-radius: var(--hud-radius-sm);
166
+ cursor: grab;
167
+ flex: 0 0 auto;
168
+ transition:
169
+ border-color var(--ns-transition-fast),
170
+ background-color var(--ns-transition-fast);
171
+ }
172
+
173
+ .ns-hud-slot:hover {
174
+ border-color: color-mix(in srgb, var(--ns-gold) 55%, transparent);
175
+ background: var(--ns-bg-0);
176
+ }
177
+
178
+ .ns-hud-slot:active {
179
+ cursor: grabbing;
180
+ }
181
+
182
+ .ns-hud-slot svg {
183
+ width: 16px;
184
+ height: 16px;
185
+ image-rendering: pixelated;
186
+ display: block;
187
+ }
188
+
189
+ .ns-hud-hint {
190
+ flex-basis: 100%;
191
+ margin-top: var(--ns-space-1);
192
+ color: var(--ns-ink-faint);
193
+ font-family: var(--hud-font);
194
+ font-size: var(--hud-text-xs);
195
+ letter-spacing: 0.04em;
196
+ line-height: var(--ns-leading-pixel);
197
+ }
@@ -1,11 +1,8 @@
1
1
  import type { CSSProperties, ReactElement } from 'react';
2
- export type RPGIconWeapon = 'sword' | 'staff' | 'bow' | 'katar' | 'book' | 'hammer';
3
- export type RPGIconElement = 'neutral' | 'earth' | 'wind' | 'water' | 'fire' | 'light' | 'dark' | 'void';
4
- export type RPGIconRace = 'human' | 'beast' | 'demon' | 'angel' | 'spirit';
5
- export type RPGIconSize = 'small' | 'medium' | 'large';
6
- export type RPGIconName = RPGIconWeapon | RPGIconElement | RPGIconRace | RPGIconSize;
2
+ import type { RPGIconName } from './registry.js';
3
+ export type { RPGIconAttack, RPGIconElement, RPGIconEmote, RPGIconEquip, RPGIconItem, RPGIconMenu, RPGIconName, RPGIconRace, RPGIconSize, RPGIconSkin, RPGIconWeapon, } from './registry.js';
7
4
  export interface RPGIconProps {
8
- /** Icon name across weapon, element, race, and size groups. */
5
+ /** Icon name across all eleven groups (weapons, elements, races, sizes, attack, skills, items, equip, skins, menu, emotes). */
9
6
  name?: RPGIconName;
10
7
  /** Rendered size in px. */
11
8
  size?: number;
@@ -13,17 +10,24 @@ export interface RPGIconProps {
13
10
  }
14
11
  export declare const icons: RPGIconName[];
15
12
  /**
16
- * RPGIcon — 22 original pixel-art icons.
13
+ * RPGIcon — 68 original pixel-art icons across 11 groups.
17
14
  *
18
- * Weapons (6): sword · staff · bow · katar · book · hammer
19
- * Elements (8): neutral · earth · wind · water · fire · light · dark · void
15
+ * Weapons (6): sword · bow · staff · katar · book · hammer
16
+ * Elements (8): neutral · fire · earth · wind · water · light · dark · void
20
17
  * Races (5): human · beast · demon · angel · spirit
21
18
  * Sizes (3): small · medium · large
19
+ * Attack (6): attack-sword · attack-bow · attack-staff · attack-katar · attack-book · attack-hammer
20
+ * Skills (6): passive · active · combo · stance · buff · debuff
21
+ * Items (6): potion · ether · scroll · gem · relic · key
22
+ * Equip (6): helm · armor · cloak · shield · ring · greaves
23
+ * Skins (5): hat · emblem · cape · badge · boots
24
+ * Menu (8): menu · inventory · party · quest · map · shop · settings · save
25
+ * Emotes (9): emote-tysm · emote-sos · emote-lol · emote-win · emote-lgo · emote-ugh · emote-myb · emote-wut · emote-grr
22
26
  */
23
- export declare const RPGIcon: (({ name, size, style, }: RPGIconProps) => ReactElement) & {
27
+ export declare const RPGIcon: (({ name, size, style }: RPGIconProps) => ReactElement) & {
24
28
  icons: RPGIconName[];
25
29
  };
26
30
  /** @deprecated Use RPGIcon — kept for backward compatibility */
27
- export declare const HUDIcon: (({ name, size, style, }: RPGIconProps) => ReactElement) & {
31
+ export declare const HUDIcon: (({ name, size, style }: RPGIconProps) => ReactElement) & {
28
32
  icons: RPGIconName[];
29
33
  };
@@ -0,0 +1,37 @@
1
+ export type RPGIconWeapon = 'sword' | 'bow' | 'staff' | 'katar' | 'book' | 'hammer';
2
+ export type RPGIconElement = 'neutral' | 'fire' | 'earth' | 'wind' | 'water' | 'light' | 'dark' | 'void';
3
+ export type RPGIconRace = 'human' | 'beast' | 'demon' | 'angel' | 'spirit';
4
+ export type RPGIconSize = 'small' | 'medium' | 'large';
5
+ export type RPGIconAttack = 'attack-sword' | 'attack-bow' | 'attack-staff' | 'attack-katar' | 'attack-book' | 'attack-hammer';
6
+ export type RPGIconSkill = 'passive' | 'active' | 'combo' | 'stance' | 'buff' | 'debuff';
7
+ export type RPGIconItem = 'potion' | 'ether' | 'scroll' | 'gem' | 'relic' | 'key';
8
+ export type RPGIconEquip = 'helm' | 'armor' | 'cloak' | 'shield' | 'ring' | 'greaves';
9
+ export type RPGIconSkin = 'hat' | 'emblem' | 'cape' | 'badge' | 'boots';
10
+ export type RPGIconMenu = 'menu' | 'inventory' | 'party' | 'quest' | 'map' | 'shop' | 'settings' | 'save';
11
+ export type RPGIconEmote = 'emote-tysm' | 'emote-sos' | 'emote-lol' | 'emote-win' | 'emote-lgo' | 'emote-ugh' | 'emote-myb' | 'emote-wut' | 'emote-grr';
12
+ export type RPGIconName = RPGIconWeapon | RPGIconElement | RPGIconRace | RPGIconSize | RPGIconAttack | RPGIconSkill | RPGIconItem | RPGIconEquip | RPGIconSkin | RPGIconMenu | RPGIconEmote;
13
+ export declare const rpgIconWeapons: readonly ["sword", "bow", "staff", "katar", "book", "hammer"];
14
+ export declare const rpgIconElements: readonly ["neutral", "fire", "earth", "wind", "water", "light", "dark", "void"];
15
+ export declare const rpgIconRaces: readonly ["human", "beast", "demon", "angel", "spirit"];
16
+ export declare const rpgIconSizes: readonly ["small", "medium", "large"];
17
+ export declare const rpgIconAttack: readonly ["attack-sword", "attack-bow", "attack-staff", "attack-katar", "attack-book", "attack-hammer"];
18
+ export declare const rpgIconSkills: readonly ["passive", "active", "combo", "stance", "buff", "debuff"];
19
+ export declare const rpgIconItems: readonly ["potion", "ether", "scroll", "gem", "relic", "key"];
20
+ export declare const rpgIconEquip: readonly ["helm", "armor", "cloak", "shield", "ring", "greaves"];
21
+ export declare const rpgIconSkins: readonly ["hat", "emblem", "cape", "badge", "boots"];
22
+ export declare const rpgIconMenu: readonly ["menu", "inventory", "party", "quest", "map", "shop", "settings", "save"];
23
+ export declare const rpgIconEmotes: readonly ["emote-tysm", "emote-sos", "emote-lol", "emote-win", "emote-lgo", "emote-ugh", "emote-myb", "emote-wut", "emote-grr"];
24
+ export declare const rpgIconGroups: {
25
+ readonly weapons: readonly ["sword", "bow", "staff", "katar", "book", "hammer"];
26
+ readonly elements: readonly ["neutral", "fire", "earth", "wind", "water", "light", "dark", "void"];
27
+ readonly races: readonly ["human", "beast", "demon", "angel", "spirit"];
28
+ readonly sizes: readonly ["small", "medium", "large"];
29
+ readonly attack: readonly ["attack-sword", "attack-bow", "attack-staff", "attack-katar", "attack-book", "attack-hammer"];
30
+ readonly skills: readonly ["passive", "active", "combo", "stance", "buff", "debuff"];
31
+ readonly items: readonly ["potion", "ether", "scroll", "gem", "relic", "key"];
32
+ readonly equip: readonly ["helm", "armor", "cloak", "shield", "ring", "greaves"];
33
+ readonly skins: readonly ["hat", "emblem", "cape", "badge", "boots"];
34
+ readonly menu: readonly ["menu", "inventory", "party", "quest", "map", "shop", "settings", "save"];
35
+ readonly emotes: readonly ["emote-tysm", "emote-sos", "emote-lol", "emote-win", "emote-lgo", "emote-ugh", "emote-myb", "emote-wut", "emote-grr"];
36
+ };
37
+ export declare const rpgIconNames: RPGIconName[];
@@ -130,7 +130,7 @@
130
130
  }
131
131
 
132
132
  .ns-button:disabled,
133
- .ns-button[aria-disabled="true"] {
133
+ .ns-button[aria-disabled='true'] {
134
134
  cursor: not-allowed;
135
135
  opacity: 0.5;
136
136
  pointer-events: none;
@@ -221,12 +221,11 @@
221
221
  }
222
222
 
223
223
  .ns-quest-card {
224
- --ns-quest-color: var(--ns-status-later);
225
- --ns-quest-pill-bg: rgba(255, 255, 255, 0.05);
226
- display: grid;
227
- grid-template-columns: auto minmax(0, 1fr);
228
- align-items: start;
229
- gap: var(--ns-space-3);
224
+ display: flex;
225
+ flex-direction: column;
226
+ box-sizing: border-box;
227
+ height: 100%;
228
+ gap: 0;
230
229
  padding: 0.875rem;
231
230
  border: var(--ns-border-card);
232
231
  border-left: 4px solid rgba(255, 255, 255, 0.18);
@@ -238,32 +237,51 @@
238
237
  }
239
238
 
240
239
  .ns-quest-card--done {
241
- --ns-quest-color: var(--ns-status-holds);
242
- --ns-quest-pill-bg: rgba(166, 226, 46, 0.1);
243
240
  border-left-color: var(--ns-status-holds);
244
241
  }
245
242
 
246
243
  .ns-quest-card--active {
247
- --ns-quest-color: var(--ns-status-building);
248
- --ns-quest-pill-bg: rgba(253, 151, 31, 0.12);
249
244
  background: rgba(253, 151, 31, 0.06);
250
245
  border-left-color: var(--ns-status-building);
251
246
  }
252
247
 
253
248
  .ns-quest-card--planned {
254
- --ns-quest-color: var(--ns-status-planned);
255
- --ns-quest-pill-bg: rgba(102, 217, 232, 0.12);
256
249
  border-left-color: var(--ns-status-planned);
257
250
  }
258
251
 
252
+ /* Per-status token overrides — [data-*] scope is allowed by the DS compiler */
253
+ [data-quest-status='done'] {
254
+ --ns-quest-color: var(--ns-status-holds);
255
+ --ns-quest-pill-bg: var(--ns-quest-pill-done);
256
+ }
257
+
258
+ [data-quest-status='active'] {
259
+ --ns-quest-color: var(--ns-status-building);
260
+ --ns-quest-pill-bg: var(--ns-quest-pill-active);
261
+ }
262
+
263
+ [data-quest-status='planned'] {
264
+ --ns-quest-color: var(--ns-status-planned);
265
+ --ns-quest-pill-bg: var(--ns-quest-pill-planned);
266
+ }
267
+
259
268
  .ns-quest-card--locked {
260
269
  opacity: 0.5;
261
270
  }
262
271
 
272
+ .ns-quest-card__header {
273
+ display: flex;
274
+ align-items: flex-start;
275
+ gap: var(--ns-space-3);
276
+ margin-bottom: var(--ns-space-3);
277
+ }
278
+
263
279
  .ns-quest-card__icon {
264
280
  display: flex;
265
281
  align-items: center;
266
282
  justify-content: center;
283
+ flex-shrink: 0;
284
+ margin-top: 2px;
267
285
  width: var(--ns-icon-slot-sm);
268
286
  height: var(--ns-icon-slot-sm);
269
287
  color: var(--ns-quest-color);
@@ -276,18 +294,29 @@
276
294
 
277
295
  .ns-quest-card__body {
278
296
  display: flex;
279
- min-width: 0;
280
- flex: 1;
281
297
  flex-direction: column;
298
+ align-items: flex-start;
299
+ min-width: 0;
300
+ gap: var(--ns-space-2);
282
301
  }
283
302
 
284
- .ns-quest-card__title {
285
- margin: 0 0 0.375rem;
303
+ .ns-quest-card__gate {
304
+ margin: 0 0 0.2rem;
286
305
  color: var(--ns-ink);
287
306
  font-family: var(--ns-font-pixel);
288
307
  font-size: 9.5px;
289
308
  line-height: var(--ns-leading-pixel);
290
- text-wrap: balance;
309
+ }
310
+
311
+ .ns-quest-card__name {
312
+ margin: 0 0 0.375rem;
313
+ color: var(--ns-ink-dim);
314
+ font-family: var(--ns-font-pixel);
315
+ font-size: 9.5px;
316
+ line-height: var(--ns-leading-pixel);
317
+ display: flex;
318
+ align-items: center;
319
+ gap: 3px;
291
320
  }
292
321
 
293
322
  .ns-quest-card__desc {
@@ -298,7 +327,8 @@
298
327
  }
299
328
 
300
329
  .ns-status-pill {
301
- margin-top: auto;
330
+ margin-top: var(--ns-space-3);
331
+ align-self: flex-start;
302
332
  color: var(--ns-quest-color);
303
333
  background: var(--ns-quest-pill-bg);
304
334
  font-size: var(--ns-pixel-2xs);
@@ -363,7 +393,7 @@
363
393
  }
364
394
 
365
395
  .ns-nav-links a:hover,
366
- .ns-nav-links a[aria-current="page"],
396
+ .ns-nav-links a[aria-current='page'],
367
397
  .ns-nav-links a.is-active {
368
398
  color: var(--ns-gold);
369
399
  border-bottom-color: var(--ns-gold);
@@ -5,13 +5,23 @@ export type { FeatureCardProps } from '../cards/FeatureCard.js';
5
5
  export { QuestCard } from '../cards/QuestCard.js';
6
6
  export type { QuestCardProps, QuestCardStatus } from '../cards/QuestCard.js';
7
7
  export { HUDBar } from '../hud/HUDBar.js';
8
- export type { HUDBarProps } from '../hud/HUDBar.js';
8
+ export type { HUDBarProps, HUDBarVariant } from '../hud/HUDBar.js';
9
+ export { HUDChat } from '../hud/HUDChat.js';
10
+ export type { HUDChatMessage, HUDChatProps } from '../hud/HUDChat.js';
9
11
  export { HUDDivider } from '../hud/HUDDivider.js';
10
12
  export type { HUDDividerProps } from '../hud/HUDDivider.js';
13
+ export { HUDJoystick } from '../hud/HUDJoystick.js';
14
+ export type { HUDJoystickProps } from '../hud/HUDJoystick.js';
11
15
  export { HUDLabel } from '../hud/HUDLabel.js';
12
16
  export type { HUDLabelProps } from '../hud/HUDLabel.js';
17
+ export { HUDMinimap } from '../hud/HUDMinimap.js';
18
+ export type { HUDMinimapProps } from '../hud/HUDMinimap.js';
19
+ export { HUDPanel } from '../hud/HUDPanel.js';
20
+ export type { HUDPanelProps } from '../hud/HUDPanel.js';
21
+ export { HUDTabWindow } from '../hud/HUDTabWindow.js';
22
+ export type { HUDTab, HUDTabWindowProps } from '../hud/HUDTabWindow.js';
13
23
  export { RPGIcon, HUDIcon, icons } from '../icons/RPGIcon.js';
14
- export type { RPGIconElement, RPGIconName, RPGIconProps, RPGIconRace, RPGIconSize, RPGIconWeapon, } from '../icons/RPGIcon.js';
24
+ export type { RPGIconAttack, RPGIconElement, RPGIconEmote, RPGIconEquip, RPGIconItem, RPGIconMenu, RPGIconName, RPGIconProps, RPGIconRace, RPGIconSize, RPGIconSkin, RPGIconWeapon, } from '../icons/RPGIcon.js';
15
25
  export { SectionArrow } from '../navigation/SectionArrow.js';
16
26
  export type { SectionArrowProps } from '../navigation/SectionArrow.js';
17
27
  export type { NSStyle } from '../shared/styles.js';