@godxjp/ui 18.15.2 → 18.15.4

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.
@@ -258,13 +258,25 @@
258
258
  padding-top: var(--card-space-body-y);
259
259
  }
260
260
 
261
- /* Flush / tight body — symmetric plain header band */
262
- [data-slot="card"]:has([data-slot="card-content"][data-tight]:not(:has([data-slot="tabs-list"])))
261
+ /* Flush / tight body — symmetric plain header band.
262
+ *
263
+ * NOT written as `:has(…[data-tight]:not(:has(tabs-list)))`: the Selectors 4 spec forbids
264
+ * `:has()` anywhere inside `:has()`, and Chrome drops the WHOLE rule as invalid
265
+ * (CSS.supports=false, measured on Chrome 151) — the symmetric band never applied. Same
266
+ * failure class as the headerAlign selector (505f0e6): in the file, correct-looking, selects
267
+ * nothing. So: apply to every tight body, then the tabs case below restores the shell top. */
268
+ [data-slot="card"]:has([data-slot="card-content"][data-tight])
263
269
  [data-slot="card-header"]:not([data-banded]) {
264
270
  padding-top: var(--card-space-body-y);
265
271
  padding-bottom: var(--card-space-body-y);
266
272
  }
267
273
 
274
+ /* Tabs in a tight body: only the bottom band is managed (rule below) — keep the shell top. */
275
+ [data-slot="card"]:has([data-slot="card-content"][data-tight] [data-slot="tabs-list"])
276
+ [data-slot="card-header"]:not([data-banded]) {
277
+ padding-top: var(--card-space-shell-y, var(--card-space-inset));
278
+ }
279
+
268
280
  [data-slot="card"]:has([data-slot="card-content"][data-tight] [data-slot="tabs-list"])
269
281
  [data-slot="card-header"] {
270
282
  padding-bottom: var(--card-space-body-y);
@@ -283,15 +295,23 @@
283
295
  padding-bottom: var(--card-space-body-y);
284
296
  }
285
297
 
286
- [data-slot="card"]:has(
287
- [data-slot="card-header"]:has([data-slot="card-action"]):not(
288
- :has([data-slot="card-description"])
289
- )
290
- )
291
- [data-slot="card-content"]:not([data-tight]) {
298
+ /* NOT `:has(header:has(action):not(:has(description)))` — nested `:has()` is spec-invalid
299
+ * and Chrome drops the whole rule (measured, Chrome 151), so the toolbar body never lost its
300
+ * top padding. Valid equivalent: zero it for any header-hosted action, then the described
301
+ * (non-toolbar) header restores the gap in the equal-specificity rule after this one. */
302
+ /* Both halves of the pair exclude [data-flush]: flush content zeroes its padding by its own
303
+ * contract, and the description half would otherwise OVERRIDE that zero and float a flush
304
+ * table 18px off its header (measured on a consumer 関連ファイル section, gh#307). */
305
+ [data-slot="card"]:has([data-slot="card-header"] [data-slot="card-action"])
306
+ [data-slot="card-content"]:not([data-tight]):not([data-flush]) {
292
307
  padding-top: 0;
293
308
  }
294
309
 
310
+ [data-slot="card"]:has([data-slot="card-header"] [data-slot="card-description"])
311
+ [data-slot="card-content"]:not([data-tight]):not([data-flush]) {
312
+ padding-top: var(--card-space-body-y);
313
+ }
314
+
295
315
  /* Header-only card — terminal slot owns bottom shell */
296
316
  [data-slot="card"]:not(:has([data-slot="card-content"], [data-slot="card-footer"]))
297
317
  [data-slot="card-header"] {
@@ -349,11 +349,15 @@
349
349
 
350
350
  /* A bordered table sitting FLUSH inside a Card already has the card's frame around it —
351
351
  * its own outer frame doubles up as two nested rounded borders (measured on
352
- * customer-inquiries detail: TABLE 1px inside .ui-card 1px, gh#305). Drop only the outer
353
- * frame; the vertical column rules above and TableRow's horizontal rules stay, so the
354
- * grid inside the card is unchanged. A bordered table NOT in a flush card keeps its frame. */
352
+ * customer-inquiries detail: TABLE 1px inside .ui-card 1px, gh#305). Drop the three edges
353
+ * that coincide with the card frame, but KEEP border-block-start: the top edge meets the
354
+ * CardHeader area, not the card border, and without it the header band floats with no
355
+ * separating line (measured on a rental detail's 出荷伝票一覧 section, gh#306). The
356
+ * vertical column rules above and TableRow's horizontal rules stay, so the grid inside
357
+ * the card is unchanged. A bordered table NOT in a flush card keeps its full frame. */
355
358
  [data-slot="card-content"][data-flush] .ui-table-bordered {
356
359
  border: 0;
360
+ border-block-start: 1px solid var(--table-border-color, hsl(var(--border)));
357
361
  }
358
362
  }
359
363
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "18.15.2",
4
- "godxUiMcp": "18.15.2",
3
+ "version": "18.15.4",
4
+ "godxUiMcp": "18.15.4",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",