nuvox 0.1.3 → 0.1.5

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.
@@ -437,6 +437,8 @@ good at telling you.
437
437
  | 42 | Carousel | F | ✅ | ❌ | ❌ *(own baseline: arrow keys, pause-on-hover, not Rule 11)* | ✅ | ✅ *(active slide)* | 🛠️ Built |
438
438
  | 43 | Rating | B | ✅ | ❌ | ❌ | ➖ | ✅ *(selected value)* | 🛠️ Built *(added outside the original plan — a single-value control, same shape as Slider)* |
439
439
  | 44 | StatCard | A | ✅ | ❌ | ❌ | ➖ | ❌ | 🛠️ Built *(added outside the original plan — composes `Card` for chrome)* |
440
+ | 45 | CodeBlock | A | ✅ *(forwards to the scrollable `<pre>`)* | ❌ | ❌ | ➖ | ❌ | 🛠️ Built *(added outside the original plan — tokenizer lives in the shared `core/code-highlight.ts` primitive, not owned solely by this component; `highlighter` prop is a pluggable escape hatch, see that file's header)* |
441
+ | 46 | RichTextEditor | F | ✅ *(`RichTextContent` forwards to the contentEditable element)* | ➖ *(the link editor's popover panel portals via the real `Popover`, not directly)* | ➖ *(inherited transitively through `Popover`)* | ✅ *(link editor composes `Popover`, Rule 12)* | ✅ *(`value`/`onChange`, HTML string)* | 🛠️ Built *(added outside the original plan — by far the largest component; deliberately NOT a ProseMirror-style document model, see `core/rich-text.ts`'s header for the v1 scope boundary and the `engine` escape hatch for consumers who need one)* |
440
442
 
441
443
  A few things worth noting from the table itself, not just the rows:
442
444
 
package/CHANGELOG.md CHANGED
@@ -3,131 +3,77 @@
3
3
  All notable changes to this project are documented here.
4
4
  Format loosely follows [Keep a Changelog](https://keepachangelog.com/).
5
5
 
6
+ ## [0.1.5]
7
+
8
+ ### Added
9
+
10
+ * Added new components: `ChatBubble`, `Sidebar`, `ResizablePanel`, `CodeBlock`, `RichTextEditor`, and `SpeedDial`.
11
+
12
+ ### Fixed
13
+
14
+ * Fixed multiple CSS and theming issues across several components.
15
+ * Improved component styling consistency across themes.
16
+ * Fixed various layout, spacing, and visual issues.
17
+
18
+ ## [0.1.4]
19
+
20
+ ### Fixed
21
+
22
+ * Fixed nested overlay interactions so genuinely nested overlays work correctly without interfering with sibling overlays.
23
+ * Fixed z-index handling for nested overlays such as `DropdownMenu`, `Select`, `Combobox`, and `ColorPicker` inside other overlays.
24
+ * Improved overlay behavior across deeply nested portal structures.
25
+ * Added regression coverage for nested and sibling overlay scenarios.
26
+
6
27
  ## [0.1.3]
7
28
 
8
29
  ### Fixed
9
- - `neobrutalism`'s `warning.light` token (`#fef3c7`) was byte-identical
10
- to the theme's own `background` — every warning `Alert`, and anything
11
- else drawing from that token, rendered invisibly against the page.
12
- Now `#fde68a`, one step further into the same warm-amber family.
13
- - `neobrutalism`'s `Rating` stars had no visible outline once filled:
14
- the star icon's stroke and fill both come from `color`, so a filled
15
- star's outline was purple-on-purple, not the black border every
16
- other surface in this theme gets. Scoped override forces a black
17
- stroke on all three star states (`neobrutalism` only).
18
- - `gradient`'s `text`/`textMuted` were still `light` theme's values,
19
- measured at 2.79:1 and a barely-there 1.32:1 against the theme's own
20
- background gradient's darker stop — anything rendered directly on
21
- the page background (as `Timeline`/`Pagination`/`Tabs` are, per this
22
- library's own docs examples, with no wrapping surface assumed) was
23
- close to unreadable. Darkened both — see the measured before/after
24
- in the new `tests/theme-text-contrast.test.ts`. `textMuted` still
25
- can't clear full AA (4.5:1) against the gradient's darkest point
26
- with a single flat color; this is the best available compromise,
27
- not a complete fix.
28
- - `glass`'s `border` (`rgba(255,255,255,0.35)`) composited to literal
29
- `#ffffff` against a plain white backdrop — a 1.0:1 ratio, i.e.
30
- actually invisible (reported as `Progress`'s track outline
31
- vanishing). Retinted to a neutral slate that stays visible against
32
- both a plain white and a plain black fallback backdrop, since most
33
- consumers won't add the "rich background" this theme's own
34
- description says it needs.
35
- - `Slider`'s value-label bubble (`showValueLabel`) had no space
36
- reserved for it above the track and could overflow into the field's
37
- own `label` text above it — most visible with a thumb near 0%.
38
- `getRootClasses` (internal, not part of the public API surface) now
39
- takes `showValueLabel` and adds a modifier class that reserves the
40
- room the bubble actually needs.
41
- - Nesting one dismissible overlay inside another (e.g. a `DropdownMenu`
42
- inside a `Popover`) broke: every overlay portals its content to
43
- `document.body` via `ThemedPortal`, as a DOM sibling of wherever it
44
- was rendered rather than a descendant, so a click inside the nested
45
- one registered as "outside" the outer one's own refs and closed it
46
- before the click could register. `useClickOutside` now ignores
47
- clicks inside any `[data-nuvox-portal]` node, fixing every
48
- `Popover`/`DropdownMenu`/`Select`/`Combobox`/`ContextMenu`/
49
- `CommandPalette` pairing at once instead of one at a time. See
50
- `tests/nested-overlays.test.tsx`.
51
- - `Carousel`'s `CarouselPrevious`/`CarouselNext` centered against the
52
- whole `.nx-carousel` box (viewport + indicators + anything else
53
- below it), not the viewport alone — correct only by coincidence when
54
- the viewport was tall relative to everything else in the box.
55
- `.nx-carousel` is now a CSS grid with the viewport pinned to its own
56
- grid cell, which becomes the containing block for a same-cell
57
- absolutely-positioned item (CSS Grid §10.1). This holds regardless
58
- of `CarouselIndicators`' height or the viewport's own height, so an
59
- explicit height is no longer required for correct centering (still
60
- good practice for layout stability, just not load-bearing anymore).
61
- Wrapping the buttons in your own `<div>` is still unsupported, for a
62
- different reason than before: a plain wrapper isn't a positioning
63
- context, so the buttons fall through to `.nx-carousel` regardless of
64
- the grid fix.
65
- - `docs-site`'s live "Controlled" `Carousel` demo and `carousel.mdx`'s
66
- guidance both still reflected the pre-fix structure/requirements;
67
- updated to match the fix above.
30
+
31
+ * Fixed multiple theme contrast and visibility issues across `neobrutalism`, `gradient`, and `glass` themes.
32
+ * Fixed `neobrutalism` warning colors and `Rating` star outlines.
33
+ * Improved text contrast in the `gradient` theme.
34
+ * Fixed `glass` theme borders becoming invisible on plain backgrounds.
35
+ * Fixed `Slider` value labels overlapping with field labels.
36
+ * Fixed nested dismissible overlays closing unexpectedly when interacting with their child overlays.
37
+ * Fixed `Carousel` navigation buttons being incorrectly centered relative to the full carousel container.
38
+ * Updated the carousel documentation and live examples to match the corrected behavior.
68
39
 
69
40
  ### Added
70
- - `tests/nested-overlays.test.tsx` — regression coverage for the
71
- overlay-nesting fix above: fails against the old `useClickOutside`,
72
- passes against the new one.
73
- - `tests/theme-text-contrast.test.ts` — checks `text`/`textMuted`
74
- against `background` for every theme, including gradient stops
75
- extracted from non-solid backgrounds. `outline-text-contrast.test.ts`
76
- only ever checked the outline-button `color-mix()` blend and
77
- explicitly skipped non-solid backgrounds — a real coverage gap; this
78
- is what would have caught the `gradient` regression above before it
79
- shipped.
41
+
42
+ * Added regression tests for nested overlays and theme text contrast.
80
43
 
81
44
  ## [0.1.2]
82
45
 
83
46
  ### Fixed
84
- - `Select` now has a real `label` prop (previously only `aria-label`/
85
- `aria-labelledby` — every other form field had `label`, this was the
86
- one gap).
87
- - `Slider`'s `onChange` no longer forces the `number | readonly [number,
88
- number]` union in single-thumb mode. It's now generic, so a plain
89
- `<Slider value={n} onChange={setN} />` infers `(value: number) =>
90
- void` with no cast needed; range mode still infers the tuple.
91
- - `nuvox/react` now re-exports ~20 prop-relevant types that previously
92
- only lived in `"nuvox"` (`SliderValue`, `SelectOptionItem`,
93
- `CommandItem`/`CommandGroup`, `TableCoreProps`, `DrawerSide`/
94
- `DrawerSize`, `ModalSize`, `ProgressVariant`, and others) — a
95
- consumer typing a handler no longer needs to import from both
96
- entry points for one component.
47
+
48
+ * Added the missing `label` prop to `Select`.
49
+ * Improved `Slider` type inference for single-value and range modes.
50
+ * Re-exported commonly used component prop types from `nuvox/react`.
97
51
 
98
52
  ### Changed
99
- - **Breaking:** `Accordion`, `Combobox`, `Select`, and `Tabs` renamed
100
- `onValueChange` → `onChange`, unifying every controlled component in
101
- the library on one convention (`onChange` was already the majority —
102
- 9 of 13 controlled components used it before this). No deprecated
103
- alias was kept; see `CONTRACT.md` Rule 10 for why this was allowed
104
- as a one-time pre-1.0 exception.
53
+
54
+ * **Breaking:** Renamed `onValueChange` to `onChange` for `Accordion`, `Combobox`, `Select`, and `Tabs` to provide a consistent controlled-component API.
105
55
 
106
56
  ### Added
107
- - `docs-site/content/docs/css-variables.mdx` — a real reference page
108
- for the theme system's CSS custom properties (`--color-background`,
109
- `--color-text`, `--color-border`, etc.), previously only discoverable
110
- incidentally inside `card.mdx`.
111
- - `tests/no-on-value-change.test.ts` — fails the build if
112
- `onValueChange` is ever reintroduced as a real prop anywhere in
113
- `src/react/`. Added after an external review caught the drift above;
114
- this is the enforcement so it can't silently happen again.
115
- - `BUILDING-COMPONENTS.md`'s Category E section now explicitly states
116
- the `value`/`onChange` convention applies there too — it previously
117
- had no documented prop-naming rule at all for Tabs/Accordion's
118
- controlled state, which is how they drifted differently from
119
- Select/Combobox (Category D, which *did* already have this rule and
120
- violated it).
57
+
58
+ * Added dedicated documentation for theme CSS variables.
59
+ * Added tests to prevent `onValueChange` from being reintroduced.
60
+ * Updated component-building guidelines to document the `value` / `onChange` convention.
121
61
 
122
62
  ## [0.1.1]
123
63
 
124
- Published, but no record was kept of what changed from 0.1.0.
125
- If you're reading this after the fact: fill this in from `git log` /
126
- `npm diff nuvox@0.1.0 nuvox@0.1.1` before it's forgotten for good.
64
+ ### Fixed
65
+
66
+ * Fixed multiple CSS and theming issues across several components.
67
+ * Improved styling consistency and theme behavior throughout the component library.
68
+ * Fixed various component-specific layout, spacing, and visual issues.
127
69
 
128
70
  ## [0.1.0]
129
71
 
130
- Initial public release. Single consolidated `nuvox` package (core +
131
- React bindings, previously split across 7 scoped `@nuvox/*` packages —
132
- all deprecated/unpublished as part of this release) with a
133
- framework-agnostic core, 40+ components, 11 themes, 490+ icons.
72
+ Initial public release.
73
+
74
+ * Consolidated the core and React bindings into a single `nuvox` package.
75
+ * Deprecated and unpublished the previous 7 scoped `@nuvox/*` packages.
76
+ * Introduced a framework-agnostic core with React bindings.
77
+ * Added 40+ components.
78
+ * Added 11 themes.
79
+ * Added 490+ icons.