nuvox 0.1.4 → 0.1.6

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
@@ -1,175 +1,94 @@
1
1
  # Changelog
2
2
 
3
3
  All notable changes to this project are documented here.
4
+
4
5
  Format loosely follows [Keep a Changelog](https://keepachangelog.com/).
5
6
 
7
+ ## [0.1.6]
8
+
9
+ ### Added
10
+
11
+ * Added new components: `Kanban`, `SearchBar`, `Image`, `Gallery`, `Lightbox`, `VideoPlayer`, `AudioPlayer`, `PDFViewer`, `ScrollArea`, and `StepWizard`.
12
+ * Expanded the component library to 55+ components.
13
+ * Expanded the icon library to 500+ icons.
14
+
15
+ ### Fixed
16
+
17
+ * Fixed various CSS and theming issues across multiple components.
18
+ * Fixed styling and behavior issues in `Tabs`, `Sidebar`, and `DropdownMenu`.
19
+ * Improved consistency and reliability across components and themes.
20
+
21
+ ## [0.1.5]
22
+
23
+ ### Added
24
+
25
+ * Added new components: `ChatBubble`, `Sidebar`, `ResizablePanel`, `CodeBlock`, `RichTextEditor`, and `SpeedDial`.
26
+
27
+ ### Fixed
28
+
29
+ * Fixed multiple CSS and theming issues across several components.
30
+ * Improved component styling consistency across themes.
31
+ * Fixed various layout, spacing, and visual issues.
32
+
6
33
  ## [0.1.4]
7
34
 
8
35
  ### Fixed
9
- - The `[data-nuvox-portal]` exemption added in 0.1.3 fixed a nested
10
- overlay closing its own container, but was too broad: it exempted
11
- a click inside ANY portal, including one belonging to a completely
12
- unrelated SIBLING overlay that merely shares a common enclosing
13
- overlay. Two `DropdownMenu`s both living inside the same `Popover`
14
- are siblings of each other, not nested in each other — opening one
15
- while the other was open left both on screen at once, only closing
16
- on a re-click or a selection. `useClickOutside` now walks the real
17
- relationship instead of doing a blanket portal check: it follows
18
- "which portal contains this click" → "whose trigger opened that
19
- portal" → "is that trigger contained in my own refs, or itself
20
- inside another portal" (repeating for arbitrarily deep nesting) —
21
- which correctly tells "genuinely nested inside me" apart from
22
- "elsewhere inside a shared ancestor," however many levels deep.
23
- `ThemedPortal` now tracks each portal's own anchor element for this
24
- to walk. See the "Sibling overlays" and first two "Nested overlay"
25
- cases in `tests/nested-overlays.test.tsx`.
26
- - A `DropdownMenu` (or `Select`/`Combobox`/`ColorPicker`) nested
27
- inside an open `Popover` rendered BEHIND it: each component's CSS
28
- sets a fixed z-index tier (`Popover` 1060, `DropdownMenu`/`Select`/
29
- `Combobox` 1050, `Tooltip` 1100, `Toast` 1200, ...), correct for
30
- independent, non-nested overlays but backwards for this one
31
- relationship — the nested overlay needs to paint above its own
32
- container regardless of which tier either belongs to. `ThemedPortal`
33
- now detects when an overlay's own trigger sits inside another,
34
- already-open overlay's portaled content, and in that case only,
35
- assigns it an inline z-index above the shared 1150 base (below
36
- `Toast`'s 1200, which stays on top of everything as a global
37
- notification regardless of nesting) via `position: relative` on the
38
- portal wrapper itself — not the component's own CSS class, so
39
- ordinary non-nested overlays are completely untouched. Verified safe
40
- for `Popover`/`DropdownMenu` specifically: both position their
41
- content with inline `position: fixed` (`useFloatingPosition`), which
42
- isn't affected by an ancestor's `position: relative` — only
43
- `transform`/`filter`/etc. would change a fixed descendant's
44
- containing block. Not verified against every possible pairing (e.g.
45
- a `position: absolute` `Tooltip` ending up as the nested one) — this
46
- covers the reported and tested composition, not every combination.
36
+
37
+ * Fixed nested overlay interactions so genuinely nested overlays work correctly without interfering with sibling overlays.
38
+ * Fixed z-index handling for nested overlays such as `DropdownMenu`, `Select`, `Combobox`, and `ColorPicker` inside other overlays.
39
+ * Improved overlay behavior across deeply nested portal structures.
40
+ * Added regression coverage for nested and sibling overlay scenarios.
47
41
 
48
42
  ## [0.1.3]
49
43
 
50
44
  ### Fixed
51
- - `neobrutalism`'s `warning.light` token (`#fef3c7`) was byte-identical
52
- to the theme's own `background` — every warning `Alert`, and anything
53
- else drawing from that token, rendered invisibly against the page.
54
- Now `#fde68a`, one step further into the same warm-amber family.
55
- - `neobrutalism`'s `Rating` stars had no visible outline once filled:
56
- the star icon's stroke and fill both come from `color`, so a filled
57
- star's outline was purple-on-purple, not the black border every
58
- other surface in this theme gets. Scoped override forces a black
59
- stroke on all three star states (`neobrutalism` only).
60
- - `gradient`'s `text`/`textMuted` were still `light` theme's values,
61
- measured at 2.79:1 and a barely-there 1.32:1 against the theme's own
62
- background gradient's darker stop — anything rendered directly on
63
- the page background (as `Timeline`/`Pagination`/`Tabs` are, per this
64
- library's own docs examples, with no wrapping surface assumed) was
65
- close to unreadable. Darkened both — see the measured before/after
66
- in the new `tests/theme-text-contrast.test.ts`. `textMuted` still
67
- can't clear full AA (4.5:1) against the gradient's darkest point
68
- with a single flat color; this is the best available compromise,
69
- not a complete fix.
70
- - `glass`'s `border` (`rgba(255,255,255,0.35)`) composited to literal
71
- `#ffffff` against a plain white backdrop — a 1.0:1 ratio, i.e.
72
- actually invisible (reported as `Progress`'s track outline
73
- vanishing). Retinted to a neutral slate that stays visible against
74
- both a plain white and a plain black fallback backdrop, since most
75
- consumers won't add the "rich background" this theme's own
76
- description says it needs.
77
- - `Slider`'s value-label bubble (`showValueLabel`) had no space
78
- reserved for it above the track and could overflow into the field's
79
- own `label` text above it — most visible with a thumb near 0%.
80
- `getRootClasses` (internal, not part of the public API surface) now
81
- takes `showValueLabel` and adds a modifier class that reserves the
82
- room the bubble actually needs.
83
- - Nesting one dismissible overlay inside another (e.g. a `DropdownMenu`
84
- inside a `Popover`) broke: every overlay portals its content to
85
- `document.body` via `ThemedPortal`, as a DOM sibling of wherever it
86
- was rendered rather than a descendant, so a click inside the nested
87
- one registered as "outside" the outer one's own refs and closed it
88
- before the click could register. `useClickOutside` now ignores
89
- clicks inside any `[data-nuvox-portal]` node, fixing every
90
- `Popover`/`DropdownMenu`/`Select`/`Combobox`/`ContextMenu`/
91
- `CommandPalette` pairing at once instead of one at a time. See
92
- `tests/nested-overlays.test.tsx`.
93
- - `Carousel`'s `CarouselPrevious`/`CarouselNext` centered against the
94
- whole `.nx-carousel` box (viewport + indicators + anything else
95
- below it), not the viewport alone — correct only by coincidence when
96
- the viewport was tall relative to everything else in the box.
97
- `.nx-carousel` is now a CSS grid with the viewport pinned to its own
98
- grid cell, which becomes the containing block for a same-cell
99
- absolutely-positioned item (CSS Grid §10.1). This holds regardless
100
- of `CarouselIndicators`' height or the viewport's own height, so an
101
- explicit height is no longer required for correct centering (still
102
- good practice for layout stability, just not load-bearing anymore).
103
- Wrapping the buttons in your own `<div>` is still unsupported, for a
104
- different reason than before: a plain wrapper isn't a positioning
105
- context, so the buttons fall through to `.nx-carousel` regardless of
106
- the grid fix.
107
- - `docs-site`'s live "Controlled" `Carousel` demo and `carousel.mdx`'s
108
- guidance both still reflected the pre-fix structure/requirements;
109
- updated to match the fix above.
45
+
46
+ * Fixed multiple theme contrast and visibility issues across `neobrutalism`, `gradient`, and `glass` themes.
47
+ * Fixed `neobrutalism` warning colors and `Rating` star outlines.
48
+ * Improved text contrast in the `gradient` theme.
49
+ * Fixed `glass` theme borders becoming invisible on plain backgrounds.
50
+ * Fixed `Slider` value labels overlapping with field labels.
51
+ * Fixed nested dismissible overlays closing unexpectedly when interacting with their child overlays.
52
+ * Fixed `Carousel` navigation buttons being incorrectly centered relative to the full carousel container.
53
+ * Updated the carousel documentation and live examples to match the corrected behavior.
110
54
 
111
55
  ### Added
112
- - `tests/nested-overlays.test.tsx` — regression coverage for the
113
- overlay-nesting fix above: fails against the old `useClickOutside`,
114
- passes against the new one.
115
- - `tests/theme-text-contrast.test.ts` — checks `text`/`textMuted`
116
- against `background` for every theme, including gradient stops
117
- extracted from non-solid backgrounds. `outline-text-contrast.test.ts`
118
- only ever checked the outline-button `color-mix()` blend and
119
- explicitly skipped non-solid backgrounds — a real coverage gap; this
120
- is what would have caught the `gradient` regression above before it
121
- shipped.
56
+
57
+ * Added regression tests for nested overlays and theme text contrast.
122
58
 
123
59
  ## [0.1.2]
124
60
 
125
61
  ### Fixed
126
- - `Select` now has a real `label` prop (previously only `aria-label`/
127
- `aria-labelledby` — every other form field had `label`, this was the
128
- one gap).
129
- - `Slider`'s `onChange` no longer forces the `number | readonly [number,
130
- number]` union in single-thumb mode. It's now generic, so a plain
131
- `<Slider value={n} onChange={setN} />` infers `(value: number) =>
132
- void` with no cast needed; range mode still infers the tuple.
133
- - `nuvox/react` now re-exports ~20 prop-relevant types that previously
134
- only lived in `"nuvox"` (`SliderValue`, `SelectOptionItem`,
135
- `CommandItem`/`CommandGroup`, `TableCoreProps`, `DrawerSide`/
136
- `DrawerSize`, `ModalSize`, `ProgressVariant`, and others) — a
137
- consumer typing a handler no longer needs to import from both
138
- entry points for one component.
62
+
63
+ * Added the missing `label` prop to `Select`.
64
+ * Improved `Slider` type inference for single-value and range modes.
65
+ * Re-exported commonly used component prop types from `nuvox/react`.
139
66
 
140
67
  ### Changed
141
- - **Breaking:** `Accordion`, `Combobox`, `Select`, and `Tabs` renamed
142
- `onValueChange` → `onChange`, unifying every controlled component in
143
- the library on one convention (`onChange` was already the majority —
144
- 9 of 13 controlled components used it before this). No deprecated
145
- alias was kept; see `CONTRACT.md` Rule 10 for why this was allowed
146
- as a one-time pre-1.0 exception.
68
+
69
+ * **Breaking:** Renamed `onValueChange` to `onChange` for `Accordion`, `Combobox`, `Select`, and `Tabs` to provide a consistent controlled-component API.
147
70
 
148
71
  ### Added
149
- - `docs-site/content/docs/css-variables.mdx` — a real reference page
150
- for the theme system's CSS custom properties (`--color-background`,
151
- `--color-text`, `--color-border`, etc.), previously only discoverable
152
- incidentally inside `card.mdx`.
153
- - `tests/no-on-value-change.test.ts` — fails the build if
154
- `onValueChange` is ever reintroduced as a real prop anywhere in
155
- `src/react/`. Added after an external review caught the drift above;
156
- this is the enforcement so it can't silently happen again.
157
- - `BUILDING-COMPONENTS.md`'s Category E section now explicitly states
158
- the `value`/`onChange` convention applies there too — it previously
159
- had no documented prop-naming rule at all for Tabs/Accordion's
160
- controlled state, which is how they drifted differently from
161
- Select/Combobox (Category D, which *did* already have this rule and
162
- violated it).
72
+
73
+ * Added dedicated documentation for theme CSS variables.
74
+ * Added tests to prevent `onValueChange` from being reintroduced.
75
+ * Updated component-building guidelines to document the `value` / `onChange` convention.
163
76
 
164
77
  ## [0.1.1]
165
78
 
166
- Published, but no record was kept of what changed from 0.1.0.
167
- If you're reading this after the fact: fill this in from `git log` /
168
- `npm diff nuvox@0.1.0 nuvox@0.1.1` before it's forgotten for good.
79
+ ### Fixed
80
+
81
+ * Fixed multiple CSS and theming issues across several components.
82
+ * Improved styling consistency and theme behavior throughout the component library.
83
+ * Fixed various component-specific layout, spacing, and visual issues.
169
84
 
170
85
  ## [0.1.0]
171
86
 
172
- Initial public release. Single consolidated `nuvox` package (core +
173
- React bindings, previously split across 7 scoped `@nuvox/*` packages —
174
- all deprecated/unpublished as part of this release) with a
175
- framework-agnostic core, 40+ components, 11 themes, 490+ icons.
87
+ Initial public release.
88
+
89
+ * Consolidated the core and React bindings into a single `nuvox` package.
90
+ * Deprecated and unpublished the previous 7 scoped `@nuvox/*` packages.
91
+ * Introduced a framework-agnostic core with React bindings.
92
+ * Added 40+ components.
93
+ * Added 11 themes.
94
+ * Added 490+ icons.