synthesisui 0.16.334 → 0.16.335

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.
@@ -198,10 +198,35 @@ const NON_RENDERING = new Set([
198
198
  */
199
199
  "root",
200
200
  ]);
201
- /** `BaseDialog.Portal` → true. `BaseSelect.Positioner` with `z-50 pt-1` → false. */
201
+ /**
202
+ * `BaseDialog.Portal` → true. `BaseSelect.Positioner` with `z-50 pt-1` → false.
203
+ *
204
+ * AND THE ROLE IS READ AT THE END OF THE NAME, not only as the whole of it. React's own
205
+ * vocabulary composes: a context provider is spelled `ThemeProvider`, `ConfigProvider`,
206
+ * `LocalizationProvider` - never the bare word - and every one of them renders no element
207
+ * at all. Reading only the exact word meant the list named the role and missed every
208
+ * component that carries it.
209
+ *
210
+ * Measured on the two populations before widening (29/08), and the class gate is what keeps
211
+ * it honest - it is still the fact that separates a role from a real box:
212
+ *
213
+ * frontend-hub 14 nodes end in `Provider`, and NONE of them carries a class
214
+ * 3 end in `Root` (`DialogRoot`, `RadioCardRoot`), none with classes
215
+ * codelevel-ui none of either
216
+ *
217
+ * A styled `Positioner` still survives as a real box, which is exactly what happens in
218
+ * their Select - the gate above reads the class list first and answers `false`.
219
+ */
202
220
  export function rendersNothing(tag, classes) {
203
221
  if (classes?.trim())
204
222
  return false;
205
- const member = tag.includes(".") ? tag.split(".").pop() : tag;
206
- return NON_RENDERING.has((member ?? "").toLowerCase());
223
+ const member = (tag.includes(".") ? tag.split(".").pop() : tag)?.toLowerCase();
224
+ if (!member)
225
+ return false;
226
+ if (NON_RENDERING.has(member))
227
+ return true;
228
+ for (const role of NON_RENDERING)
229
+ if (member.endsWith(role))
230
+ return true;
231
+ return false;
207
232
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synthesisui",
3
- "version": "0.16.334",
3
+ "version": "0.16.335",
4
4
  "description": "Bring SynthesisUI design systems into any project - tokens, typed components, whole pages and an agent-ready CLAUDE.md manifest.",
5
5
  "type": "module",
6
6
  "bin": {