@marianmeres/stuic 3.66.0 → 3.67.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/dist/actions/autoscroll.d.ts +7 -0
- package/dist/actions/autoscroll.js +7 -0
- package/dist/actions/focus-trap.d.ts +7 -0
- package/dist/actions/focus-trap.js +8 -3
- package/dist/actions/typeahead.svelte.js +40 -4
- package/dist/components/Carousel/Carousel.svelte +9 -2
- package/dist/components/Carousel/README.md +8 -2
- package/dist/components/Cart/Cart.svelte +3 -0
- package/dist/components/Cart/README.md +18 -1
- package/dist/components/Checkout/CheckoutOrderReview.svelte +4 -14
- package/dist/components/Checkout/README.md +184 -0
- package/dist/components/Checkout/_internal/checkout-utils.d.ts +6 -0
- package/dist/components/Checkout/_internal/checkout-utils.js +24 -0
- package/dist/components/Checkout/index.d.ts +1 -1
- package/dist/components/Checkout/index.js +1 -1
- package/dist/components/CommandMenu/CommandMenu.svelte +23 -7
- package/dist/components/CommandMenu/CommandMenu.svelte.d.ts +2 -0
- package/dist/components/CronInput/CronInput.svelte +44 -9
- package/dist/components/CronInput/CronInput.svelte.d.ts +2 -0
- package/dist/components/CronInput/README.md +145 -0
- package/dist/components/CronInput/cron-next-run.svelte.d.ts +11 -0
- package/dist/components/CronInput/cron-next-run.svelte.js +11 -0
- package/dist/components/CronInput/index.css +0 -8
- package/dist/components/DataTable/DataTable.svelte +99 -62
- package/dist/components/DataTable/DataTable.svelte.d.ts +13 -3
- package/dist/components/DataTable/README.md +79 -25
- package/dist/components/DataTable/index.css +7 -0
- package/dist/components/DropdownMenu/DropdownMenu.svelte +43 -26
- package/dist/components/DropdownMenu/DropdownMenu.svelte.d.ts +5 -1
- package/dist/components/DropdownMenu/README.md +37 -9
- package/dist/components/Input/FieldAssets.svelte +9 -7
- package/dist/components/Input/FieldAssets.svelte.d.ts +3 -7
- package/dist/components/Input/FieldFile.svelte +13 -7
- package/dist/components/Input/FieldFile.svelte.d.ts +4 -7
- package/dist/components/Input/FieldInput.svelte +10 -8
- package/dist/components/Input/FieldInput.svelte.d.ts +3 -8
- package/dist/components/Input/FieldInputLocalized.svelte +8 -7
- package/dist/components/Input/FieldInputLocalized.svelte.d.ts +2 -7
- package/dist/components/Input/FieldKeyValues.svelte +8 -7
- package/dist/components/Input/FieldKeyValues.svelte.d.ts +2 -7
- package/dist/components/Input/FieldLikeButton.svelte +9 -7
- package/dist/components/Input/FieldLikeButton.svelte.d.ts +3 -7
- package/dist/components/Input/FieldObject.svelte +8 -7
- package/dist/components/Input/FieldObject.svelte.d.ts +2 -7
- package/dist/components/Input/FieldOptions.svelte +9 -7
- package/dist/components/Input/FieldOptions.svelte.d.ts +3 -7
- package/dist/components/Input/FieldPhoneNumber.svelte +7 -8
- package/dist/components/Input/FieldPhoneNumber.svelte.d.ts +3 -8
- package/dist/components/Input/FieldSelect.svelte +9 -8
- package/dist/components/Input/FieldSelect.svelte.d.ts +3 -8
- package/dist/components/Input/FieldSwitch.svelte +9 -7
- package/dist/components/Input/FieldSwitch.svelte.d.ts +3 -7
- package/dist/components/Input/FieldTextarea.svelte +7 -8
- package/dist/components/Input/FieldTextarea.svelte.d.ts +3 -8
- package/dist/components/Input/README.md +20 -0
- package/dist/components/Input/_internal/InputWrap.svelte +2 -10
- package/dist/components/Input/_internal/InputWrap.svelte.d.ts +2 -10
- package/dist/components/Input/types.d.ts +28 -0
- package/dist/components/Nav/Nav.svelte +5 -4
- package/dist/components/Nav/Nav.svelte.d.ts +2 -2
- package/dist/components/Nav/README.md +2 -2
- package/dist/components/Nav/index.css +4 -0
- package/dist/components/Tree/README.md +189 -0
- package/dist/components/Tree/Tree.svelte +46 -2
- package/dist/components/Tree/Tree.svelte.d.ts +5 -0
- package/dist/utils/input-history.svelte.d.ts +12 -0
- package/dist/utils/input-history.svelte.js +12 -0
- package/dist/utils/observe-exists.svelte.d.ts +1 -0
- package/dist/utils/observe-exists.svelte.js +11 -3
- package/dist/utils/switch.svelte.d.ts +12 -0
- package/dist/utils/switch.svelte.js +12 -1
- package/docs/architecture.md +0 -1
- package/docs/testing.md +72 -0
- package/docs/upgrading.md +281 -0
- package/package.json +18 -19
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Upgrading STUIC
|
|
2
|
+
|
|
3
|
+
Notes for coding agents (and humans) maintaining a project that consumes `@marianmeres/stuic`. This doc describes the deltas introduced on top of **v3.66.1** — grouped by what a consumer actually cares about, not by commit.
|
|
4
|
+
|
|
5
|
+
## TL;DR
|
|
6
|
+
|
|
7
|
+
**Everything is additive or internal.** No props removed, no snippets renamed, no public-type signatures changed in a breaking way. You can upgrade without changing any consumer code. The reasons to make targeted adjustments afterwards are:
|
|
8
|
+
|
|
9
|
+
1. Adopt new opt-in features (`unstyled` now on DropdownMenu / CronInput / CommandMenu; new Tree/DataTable snippets; cart/checkout helpers).
|
|
10
|
+
2. Take advantage of new a11y wiring (the library now emits `aria-current`, `role="combobox"`, `aria-live` announcements, etc. — your CSS may want to react).
|
|
11
|
+
3. Spot-check the few subtle behavior changes listed under *Subtle behavior deltas* below.
|
|
12
|
+
|
|
13
|
+
**Recommended post-upgrade check:** run the Browser Verification Checklist at the end of this doc.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## How to adopt
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pnpm add @marianmeres/stuic@latest
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
No codemod needed. The library is backwards-compatible with v3.66.1 call sites.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## What's new (opt-in)
|
|
28
|
+
|
|
29
|
+
The following features are new and **only activate when you pass the prop**. Existing call sites continue to render exactly as before.
|
|
30
|
+
|
|
31
|
+
### Component-level `unstyled` prop coverage
|
|
32
|
+
|
|
33
|
+
`unstyled?: boolean` now exists on every Tier-1 component in the library. When set, the component strips its `stuic-*` base classes and you're expected to supply all styling through the `class*` escape hatches.
|
|
34
|
+
|
|
35
|
+
Newly gained in this release: **DropdownMenu**, **CronInput**, **CommandMenu** (the remaining holdouts — Button, DataTable, Tree, Nav, Cart, Carousel, most Field components already had it).
|
|
36
|
+
|
|
37
|
+
### DropdownMenu
|
|
38
|
+
|
|
39
|
+
| Prop | Type | Notes |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| `unstyled` | `boolean` | Strips base classes; keeps functional layout. |
|
|
42
|
+
| `el` | `HTMLDivElement` (bindable) | Wrapper element ref. |
|
|
43
|
+
|
|
44
|
+
### DataTable
|
|
45
|
+
|
|
46
|
+
| Prop | Type | Notes |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| `row` | `Snippet<[{ row, columns, rowIndex, isSelected }]>` | Desktop-only — replaces the entire `<tr>`. Parallel to the existing `mobileRow`. |
|
|
49
|
+
| `selectDisabledBy` | `(row, index) => boolean` | Per-row selection disable. Respected by "select all". |
|
|
50
|
+
|
|
51
|
+
The `cell` snippet gained an extra parameter:
|
|
52
|
+
|
|
53
|
+
```svelte
|
|
54
|
+
<!-- before -->
|
|
55
|
+
{#snippet cell({ column, row, value, rowIndex })} ... {/snippet}
|
|
56
|
+
|
|
57
|
+
<!-- after (both shapes compile; old callers ignore the new param) -->
|
|
58
|
+
{#snippet cell({ column, row, value, rowIndex, variant })} ... {/snippet}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`variant` is `"desktop" | "mobile"` — lets a single snippet adapt to the layout.
|
|
62
|
+
|
|
63
|
+
Also dropped: the **dead `children?: Snippet` prop** that was declared but never rendered. No consumer was using it.
|
|
64
|
+
|
|
65
|
+
### Tree
|
|
66
|
+
|
|
67
|
+
First README in this release. Also:
|
|
68
|
+
|
|
69
|
+
| Prop | Type | Notes |
|
|
70
|
+
| --- | --- | --- |
|
|
71
|
+
| `t` | `TranslateFn` | Translation function (used only for a11y move-announcements). |
|
|
72
|
+
| `getNodeLabel` | `(item) => string` | How to stringify a node for the a11y announcement. Defaults to `String(item.value)`. |
|
|
73
|
+
|
|
74
|
+
On a successful `onMove`, the component now announces the move via a visually-hidden `aria-live="polite"` region. Translation keys: `move_before`, `move_after`, `move_inside` with `{source}` and `{target}` placeholders.
|
|
75
|
+
|
|
76
|
+
### Input family (shared wrapper class props)
|
|
77
|
+
|
|
78
|
+
Every `Field*` component that uses `InputWrap` now accepts the full set of **9 wrapper class props**, exposed as a reusable interface:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
import type { InputWrapClassProps } from "@marianmeres/stuic";
|
|
82
|
+
|
|
83
|
+
interface InputWrapClassProps {
|
|
84
|
+
classLabel?: string;
|
|
85
|
+
classLabelBox?: string;
|
|
86
|
+
classInputBox?: string;
|
|
87
|
+
classInputBoxWrap?: string;
|
|
88
|
+
classInputBoxWrapInvalid?: string;
|
|
89
|
+
classDescBox?: string;
|
|
90
|
+
classDescBoxToggle?: string; // newly forwarded
|
|
91
|
+
classBelowBox?: string;
|
|
92
|
+
classValidationBox?: string; // newly forwarded
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Previously most fields only accepted 5–7 of these. You can now pass any of them to **FieldInput, FieldTextarea, FieldSelect, FieldSwitch, FieldFile, FieldLikeButton, FieldObject, FieldOptions, FieldAssets, FieldPhoneNumber, FieldInputLocalized, FieldKeyValues** uniformly. `FieldCheckbox` and `FieldRadios` use bespoke layouts and keep their own narrower class-prop surface.
|
|
97
|
+
|
|
98
|
+
### Checkout
|
|
99
|
+
|
|
100
|
+
New util:
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
import { addressesEqual } from "@marianmeres/stuic";
|
|
104
|
+
|
|
105
|
+
addressesEqual(a, b); // true if both missing or all fields match (incl. label, is_default)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
First README for the Checkout family (explains the kit-of-parts composition model).
|
|
109
|
+
|
|
110
|
+
### Cart
|
|
111
|
+
|
|
112
|
+
New translation key:
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
remove_item_aria: "Remove {name}" // used as aria-label on the remove button
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Override via your `t` prop to localize. README now also explains the `summary` variant and the caller's responsibility to keep `lineTotal` in sync after quantity changes.
|
|
119
|
+
|
|
120
|
+
### CronInput
|
|
121
|
+
|
|
122
|
+
First README. `unstyled` prop is the user-facing addition. Internals unchanged.
|
|
123
|
+
|
|
124
|
+
`CronNextRun` now has a prominent JSDoc note reminding consumers to call `destroy()` manually — it starts a 60s interval on construction and doesn't self-clean. If you already do `onDestroy(() => nr.destroy())`, no change needed.
|
|
125
|
+
|
|
126
|
+
### CommandMenu
|
|
127
|
+
|
|
128
|
+
`unstyled` prop added. Everything else about its public API is unchanged.
|
|
129
|
+
|
|
130
|
+
### Carousel
|
|
131
|
+
|
|
132
|
+
**Zero API changes.** 6 previously-undocumented props are now in the README: `syncActiveOnScroll`, `wheelScroll`, `scrollbar`, `arrows`, `classArrow`, `minItemWidth`. They existed before — just weren't documented.
|
|
133
|
+
|
|
134
|
+
Internally: programmatic scrolling now respects `prefers-reduced-motion: reduce`. When set, arrows, keyboard, and wheel navigation switch to `scrollBehavior: "instant"` automatically regardless of the `scrollBehavior` prop.
|
|
135
|
+
|
|
136
|
+
### Nav
|
|
137
|
+
|
|
138
|
+
**Doc/code drift fixed.** `NavGroup.defaultCollapsed` in the README was wrong — the real prop name is `defaultExpanded` (and always was). If you were blindly following the README, audit your call sites:
|
|
139
|
+
|
|
140
|
+
```svelte
|
|
141
|
+
<!-- incorrect (never worked) -->
|
|
142
|
+
<Nav groups={[{ title: "…", items: […], defaultCollapsed: true }]} />
|
|
143
|
+
|
|
144
|
+
<!-- correct -->
|
|
145
|
+
<Nav groups={[{ title: "…", items: […], defaultExpanded: false }]} />
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Also added: `aria-current="page"` on active anchor items, `:root.dark` override for the hover background. See *Subtle behavior deltas* below.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Subtle behavior deltas (BC-safe, but noticeable)
|
|
153
|
+
|
|
154
|
+
These don't break existing code, but output or rendering may differ in visible ways.
|
|
155
|
+
|
|
156
|
+
### Nav active-anchor styling
|
|
157
|
+
|
|
158
|
+
Active anchors now emit `aria-current="page"` **in addition to** the existing `[data-active]` data attribute. If your custom CSS targets only `[data-active]`, nothing changes. If you add new CSS targeting `[aria-current="page"]`, make sure it doesn't conflict with the existing active rule.
|
|
159
|
+
|
|
160
|
+
### Nav hover in dark mode
|
|
161
|
+
|
|
162
|
+
The hover background was previously `rgb(0 0 0 / 0.1)` with no dark-mode override — effectively invisible on dark surfaces. Now:
|
|
163
|
+
|
|
164
|
+
```css
|
|
165
|
+
:root.dark {
|
|
166
|
+
--stuic-nav-item-bg-hover: rgb(255 255 255 / 0.08);
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Dark-mode hover is now actually visible. If you had been overriding `--stuic-nav-item-bg-hover` globally and relied on it applying in both themes, you may want to add a `:root.dark` override of your own.
|
|
171
|
+
|
|
172
|
+
### Checkout: address equality now compares `label` + `is_default`
|
|
173
|
+
|
|
174
|
+
`CheckoutOrderReview` internally uses the new `addressesEqual` helper to decide whether to render a separate billing block. The helper now compares **all** `CheckoutAddressData` fields, including `label` and `is_default`, not just the 6 visible fields. If you populate `label` differently on shipping vs. billing (e.g. "home" vs "work") for the same street address, the review will now render them as two distinct blocks where it previously treated them as one. This is the correct behavior for the intent of those fields.
|
|
175
|
+
|
|
176
|
+
### DataTable: "Select all" aria-label
|
|
177
|
+
|
|
178
|
+
Default text changed from `"Select all rows"` → `"Select all rows on this page"`. Only visible to screen readers. Override via the `t` prop (`select_all_rows` key).
|
|
179
|
+
|
|
180
|
+
### DataTable: mobile card checkbox class
|
|
181
|
+
|
|
182
|
+
The mobile checkbox wrapper no longer uses inline Tailwind utilities; it uses `stuic-data-table-card-checkbox` (defined in the library's CSS). If you had any custom CSS targeting the old combo `.stuic-checkbox.flex.items-center.gap-2.mb-1` inside a mobile card, re-target to `.stuic-data-table-card-checkbox`.
|
|
183
|
+
|
|
184
|
+
### DropdownMenu fallback-mode width
|
|
185
|
+
|
|
186
|
+
When CSS anchor-positioning is unavailable (Safari <17.4, Firefox <115, or `forceFallback={true}`), the modal-style fallback is now **384px max-width** (`max-w-sm`) instead of the previously-buggy 128px (`max-w-32`). Longer menu items no longer get clipped into a nearly-unusable column.
|
|
187
|
+
|
|
188
|
+
### DropdownMenu default `position`
|
|
189
|
+
|
|
190
|
+
The README was wrong — the default was always `"bottom-span-right"`, not `"bottom-span-left"`. Updated. Your call sites are unaffected.
|
|
191
|
+
|
|
192
|
+
### observeExists
|
|
193
|
+
|
|
194
|
+
`forceCheck()` was previously a no-op due to a missing assignment. It now actually updates `current`. If you had been calling it (the flag was documented but didn't do anything), you'll now see reactive updates where you previously didn't.
|
|
195
|
+
|
|
196
|
+
Also, `observeExists` now observes attribute mutations (not just `childList`). Selectors like `.active` or `[data-busy]` that match based on class/attribute now react when those attributes toggle on existing elements. Previously, only DOM add/remove triggered rechecks.
|
|
197
|
+
|
|
198
|
+
### typeahead
|
|
199
|
+
|
|
200
|
+
- Stale asynchronous results are now discarded when a newer search has started (previously they could clobber the more recent results).
|
|
201
|
+
- Escape key now dismisses an active suggestion and **stops propagation**. If your typeahead is inside a `Modal`, pressing Escape while a suggestion is visible now clears the suggestion without closing the Modal. Pressing Escape again (with no active suggestion) closes the Modal as before.
|
|
202
|
+
- Parent element's inline `position` is now restored on teardown (it's still mutated to `relative` at setup when needed). If you're disabling/re-enabling typeahead repeatedly on the same container, you'll no longer see the parent stuck in `position: relative` after teardown.
|
|
203
|
+
- Main input now emits `role="combobox"`, `aria-autocomplete="inline"`, and `aria-expanded` reflecting whether a suggestion is active. All removed on teardown.
|
|
204
|
+
|
|
205
|
+
### CommandMenu `isFetching`
|
|
206
|
+
|
|
207
|
+
Previously flickered back to `false` whenever any in-flight request resolved, including stale ones. Now only the latest request toggles it off. The spinner stays visible as long as *any* fresh request is still in flight.
|
|
208
|
+
|
|
209
|
+
### Tree `data-tree-id` query
|
|
210
|
+
|
|
211
|
+
Internal: uses `CSS.escape()` when matching `data-tree-id` values to DOM elements. If you're using IDs with special characters (quotes, backslashes, etc.), they now work. Normal IDs are unaffected.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Tree-shaking / dependency changes
|
|
216
|
+
|
|
217
|
+
- **`esm-env` removed** from direct dependencies (it's still resolvable as a transitive dep via `runed` and `svelte`). Nothing in STUIC imports it directly. If your project imports `esm-env` from your own code and relied on `@marianmeres/stuic` pulling it in transitively, add it to your own `package.json`.
|
|
218
|
+
- No other deps changed shape.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Design-tokens update (visual)
|
|
223
|
+
|
|
224
|
+
`@marianmeres/design-tokens` bumped from **1.3.1 → 1.4.0**. This touches all 42 theme CSS files (small tweaks — no structural token renames). If you customize themes at the app level, this is low-risk; if you ship pixel-perfect branding, eyeball the themes you actually use.
|
|
225
|
+
|
|
226
|
+
No token names changed. No new tokens you need to adopt.
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Browser verification checklist
|
|
231
|
+
|
|
232
|
+
After upgrading, spot-check the following in a real browser. Tiered by likelihood of surprise.
|
|
233
|
+
|
|
234
|
+
### Tier 1 — definitely check
|
|
235
|
+
|
|
236
|
+
- [ ] **Themes**: load 2–3 of your in-use themes in light **and** dark. Scan for anything that looks off (color shifts are the most likely artifact of the design-tokens bump).
|
|
237
|
+
- [ ] **DropdownMenu in anchor-less browsers** (Safari <17.4 / Firefox <115) **or** with `forceFallback={true}`: verify the fallback-mode width is comfortable (~384px) and items aren't clipped.
|
|
238
|
+
- [ ] **Nav in dark mode**: hover over an item. The hover state should now be visible. Check that no CSS rule you own fights with the new `:root.dark` override.
|
|
239
|
+
- [ ] **DataTable**:
|
|
240
|
+
- If you use `selectDisabledBy`, verify the disabled rows' checkboxes are disabled and excluded from "select all".
|
|
241
|
+
- If you opted into the new `row` snippet, make sure your custom `<tr>` renders.
|
|
242
|
+
- Mobile view: checkbox wrapper still lays out correctly (new `stuic-data-table-card-checkbox` class replaced the old inline Tailwind).
|
|
243
|
+
- [ ] **Cart summary variant**: if you use `variant="summary"`, check the compact receipt layout.
|
|
244
|
+
|
|
245
|
+
### Tier 2 — smoke test
|
|
246
|
+
|
|
247
|
+
- [ ] **Input family forms with validation errors**: verify the invalid-state styling looks right — the newly-forwarded `classInputBoxWrapInvalid` / `classValidationBox` won't change anything if you don't pass them, but a few field components are now forwarding more props by default.
|
|
248
|
+
- [ ] **Carousel with OS reduced-motion enabled**: arrow / keyboard / wheel nav should no longer animate.
|
|
249
|
+
- [ ] **typeahead inside a Modal**: Escape with an active suggestion clears it; Escape with no suggestion closes the Modal.
|
|
250
|
+
|
|
251
|
+
### Tier 3 — network & assistive-tech
|
|
252
|
+
|
|
253
|
+
- [ ] **CommandMenu with throttled network**: rapid typing with "Slow 3G" Chrome throttle — spinner should stay on, no stale results should leak.
|
|
254
|
+
- [ ] **Tree drag-drop with a screen reader**: perform a move; listen for the polite-live announcement.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## For coding agents specifically
|
|
259
|
+
|
|
260
|
+
When the user asks you to upgrade this library:
|
|
261
|
+
|
|
262
|
+
1. **Run `pnpm add @marianmeres/stuic@latest`, then `pnpm run build && pnpm run check && pnpm run test`.** If all three pass, the upgrade is functionally complete. No codemod required.
|
|
263
|
+
2. **Grep the consuming project for these strings** and confirm they still match your intent:
|
|
264
|
+
- `defaultCollapsed` — if found on a `NavGroup`, this never worked; change to `defaultExpanded` and invert your boolean.
|
|
265
|
+
- `classInputBoxWrap="..."` on a `FieldCheckbox` — `FieldCheckbox` uses a bespoke layout and doesn't forward this prop (it never did). No change needed.
|
|
266
|
+
- `"bottom-span-left"` as a DropdownMenu position default — explicit values still work; it was only the *default* that was documented wrong. No change needed if you were passing it explicitly.
|
|
267
|
+
- `stuic-checkbox.*flex.*items-center.*gap-2.*mb-1` (as a CSS selector combo in the consumer's own CSS) — re-target to `.stuic-data-table-card-checkbox`.
|
|
268
|
+
3. **If the consuming project has its own dark-mode CSS for Nav**, scan for overrides of `--stuic-nav-item-bg-hover` and confirm your rule still makes sense alongside the library's new `:root.dark` override.
|
|
269
|
+
4. **If the project exposes an `esm-env` import** in its own source, add `esm-env` to its own `package.json` — it's no longer a direct dep of STUIC.
|
|
270
|
+
5. **Run the Browser Verification Checklist** above manually, or delegate it to the human if you can't run browsers. Explicitly tell the user: "I cannot verify X visually — please eyeball it."
|
|
271
|
+
6. **Don't claim success if you skipped #5.** Type-checks + builds passing is necessary, not sufficient, for a library upgrade that touched this much a11y + CSS surface area.
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## If something does break
|
|
276
|
+
|
|
277
|
+
None of the above should cause failures in `pnpm run build` / `pnpm run check` / existing tests. If it does:
|
|
278
|
+
|
|
279
|
+
- Run `git diff` on the consumer project to see if you accidentally edited a call site while upgrading.
|
|
280
|
+
- Check that the TypeScript version and `svelte-check` versions match what STUIC was built against (see STUIC's own `package.json` `devDependencies`).
|
|
281
|
+
- Open an issue with: the failing file, the full error, and which version you came from.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marianmeres/stuic",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.67.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist",
|
|
6
6
|
"!dist/**/*.test.*",
|
|
@@ -35,43 +35,42 @@
|
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@eslint/js": "^9.39.4",
|
|
38
|
-
"@marianmeres/random-human-readable": "^1.
|
|
38
|
+
"@marianmeres/random-human-readable": "^1.9.0",
|
|
39
39
|
"@sveltejs/adapter-auto": "^4.0.0",
|
|
40
|
-
"@sveltejs/kit": "^2.
|
|
40
|
+
"@sveltejs/kit": "^2.57.1",
|
|
41
41
|
"@sveltejs/package": "^2.5.7",
|
|
42
42
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
43
43
|
"@tailwindcss/cli": "^4.2.2",
|
|
44
44
|
"@tailwindcss/forms": "^0.5.11",
|
|
45
45
|
"@tailwindcss/typography": "^0.5.19",
|
|
46
46
|
"@tailwindcss/vite": "^4.2.2",
|
|
47
|
-
"@types/node": "^25.
|
|
47
|
+
"@types/node": "^25.6.0",
|
|
48
48
|
"dotenv": "^16.6.1",
|
|
49
49
|
"eslint": "^9.39.4",
|
|
50
50
|
"globals": "^16.5.0",
|
|
51
|
-
"prettier": "^3.8.
|
|
51
|
+
"prettier": "^3.8.3",
|
|
52
52
|
"prettier-plugin-svelte": "^3.5.1",
|
|
53
53
|
"publint": "^0.3.18",
|
|
54
|
-
"svelte": "^5.55.
|
|
55
|
-
"svelte-check": "^4.4.
|
|
54
|
+
"svelte": "^5.55.4",
|
|
55
|
+
"svelte-check": "^4.4.6",
|
|
56
56
|
"tailwindcss": "^4.2.2",
|
|
57
57
|
"tsx": "^4.21.0",
|
|
58
58
|
"typescript": "^5.9.3",
|
|
59
|
-
"typescript-eslint": "^8.
|
|
60
|
-
"vite": "^7.3.
|
|
59
|
+
"typescript-eslint": "^8.58.2",
|
|
60
|
+
"vite": "^7.3.2",
|
|
61
61
|
"vitest": "^3.2.4"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@marianmeres/clog": "^3.
|
|
65
|
-
"@marianmeres/cron": "^
|
|
66
|
-
"@marianmeres/design-tokens": "^1.
|
|
64
|
+
"@marianmeres/clog": "^3.17.1",
|
|
65
|
+
"@marianmeres/cron": "^2.0.0",
|
|
66
|
+
"@marianmeres/design-tokens": "^1.4.0",
|
|
67
67
|
"@marianmeres/icons-fns": "^5.0.0",
|
|
68
|
-
"@marianmeres/item-collection": "^1.
|
|
69
|
-
"@marianmeres/paging-store": "^2.
|
|
70
|
-
"@marianmeres/parse-boolean": "^2.0
|
|
71
|
-
"@marianmeres/ticker": "^1.
|
|
72
|
-
"@marianmeres/tree": "^2.
|
|
73
|
-
"
|
|
74
|
-
"libphonenumber-js": "^1.12.40",
|
|
68
|
+
"@marianmeres/item-collection": "^1.4.2",
|
|
69
|
+
"@marianmeres/paging-store": "^2.1.1",
|
|
70
|
+
"@marianmeres/parse-boolean": "^2.1.0",
|
|
71
|
+
"@marianmeres/ticker": "^1.17.1",
|
|
72
|
+
"@marianmeres/tree": "^2.3.0",
|
|
73
|
+
"libphonenumber-js": "^1.12.41",
|
|
75
74
|
"runed": "^0.23.4",
|
|
76
75
|
"tailwind-merge": "^3.5.0"
|
|
77
76
|
},
|