@poodle64/ui 2026.10.11 → 2026.10.12

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.
@@ -81,7 +81,7 @@
81
81
  </span>
82
82
  {/if}
83
83
  <div class="min-w-0 flex-1">
84
- <Dialog.Title class="font-display text-lg leading-tight font-semibold tracking-tight"
84
+ <Dialog.Title class="font-display text-lg leading-tight font-semibold tracking-[var(--ds-font-display-tracking,-0.025em)]"
85
85
  >{title}</Dialog.Title
86
86
  >
87
87
  {#if subtitle}
@@ -457,7 +457,7 @@
457
457
  slot to re-earn a behaviour the shell could give everyone is the shell
458
458
  failing to ship something good.
459
459
  -->
460
- <span class="font-display text-body hidden font-semibold tracking-tight sm:inline"
460
+ <span class="font-display text-body hidden font-semibold tracking-[var(--ds-font-display-tracking,-0.025em)] sm:inline"
461
461
  >{brandTitle}</span
462
462
  >
463
463
  {/if}
@@ -62,7 +62,7 @@
62
62
  {...restProps}
63
63
  >
64
64
  <div class="flex flex-none items-center gap-2 px-5 pt-5 pb-3">
65
- <h2 class="font-display text-display flex-1 truncate font-semibold tracking-tight">
65
+ <h2 class="font-display text-display flex-1 truncate font-semibold tracking-[var(--ds-font-display-tracking,-0.025em)]">
66
66
  {title}
67
67
  </h2>
68
68
  {#if actions}{@render actions()}{/if}
@@ -95,7 +95,7 @@
95
95
  {/if}
96
96
  {#if title}
97
97
  <div class="flex items-center gap-2">
98
- <h1 class="font-display text-display leading-tight font-semibold tracking-[-0.02em]">
98
+ <h1 class="font-display text-display leading-tight font-semibold tracking-[var(--ds-font-display-tracking,-0.02em)]">
99
99
  {title}
100
100
  </h1>
101
101
  {#if info}
@@ -67,7 +67,7 @@
67
67
  {/if}
68
68
  <span
69
69
  class="ds-tabular text-stat font-mono leading-none font-semibold {item.muted
70
- ? 'text-muted-foreground/60'
70
+ ? 'text-muted-foreground'
71
71
  : ''}">{item.value}</span
72
72
  >
73
73
  {#if item.sub}
package/dist/styles.css CHANGED
@@ -446,6 +446,19 @@
446
446
  var(--ds-shadow-sm);
447
447
  }
448
448
 
449
+ /**
450
+ * How the display face is set. An app says it once in its palette
451
+ * (`--ds-font-display-transform: uppercase; --ds-font-display-tracking:
452
+ * 0.04em`) and every place the factory sets --ds-font-display follows: this
453
+ * rule for `.font-display`, the components' own tracking, .ds-prose and the
454
+ * librarian's markdown. Unset, each falls back to `inherit`, which is what the
455
+ * property did before, so an app that sets neither renders as it always did.
456
+ */
457
+ .font-display {
458
+ text-transform: var(--ds-font-display-transform, inherit);
459
+ letter-spacing: var(--ds-font-display-tracking, inherit);
460
+ }
461
+
449
462
  /** Tabular figures, so a column of numbers aligns. */
450
463
  .ds-tabular {
451
464
  font-variant-numeric: tabular-nums;
@@ -737,7 +750,7 @@
737
750
  form. The literal keeps this rule correct on its own; the var keeps an
738
751
  app's override flowing through. */
739
752
  letter-spacing: var(--tracking-eyebrow, 0.06em);
740
- color: color-mix(in oklch, var(--ds-nav-ink-muted) 70%, transparent);
753
+ color: var(--ds-nav-ink-muted);
741
754
  }
742
755
 
743
756
  /* A count badge is small text on a tint, so it carries the 4.5:1 text floor
@@ -1144,6 +1157,8 @@
1144
1157
  .ds-prose h3,
1145
1158
  .ds-prose h4 {
1146
1159
  font-family: var(--ds-font-display);
1160
+ text-transform: var(--ds-font-display-transform, inherit);
1161
+ letter-spacing: var(--ds-font-display-tracking, inherit);
1147
1162
  font-weight: 600;
1148
1163
  line-height: 1.25;
1149
1164
  margin-block: var(--ds-spacing-lg) var(--ds-spacing-sm);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poodle64/ui",
3
- "version": "2026.10.11",
3
+ "version": "2026.10.12",
4
4
  "description": "Household shared component layer: shadcn-svelte primitives (bits-ui) plus the composed page chrome every app builds its routes from, restyled by each app's @poodle64/design-tokens alias layer. One fix reaches every app.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "meta": {
3
3
  "package": "@poodle64/ui",
4
- "version": "2026.10.11",
4
+ "version": "2026.10.12",
5
5
  "generatedBy": "scripts/generate-registry.mjs",
6
6
  "source": "scripts/situations.json + package source (DO NOT EDIT the outputs by hand)",
7
7
  "componentCount": 68,
@@ -1,7 +1,7 @@
1
1
  # @poodle64/ui — situation → component map
2
2
 
3
3
  <!-- GENERATED by scripts/generate-registry.mjs from scripts/situations.json + package source. DO NOT EDIT. -->
4
- Generated from `@poodle64/ui@2026.10.11`. 68 components, 19 situations.
4
+ Generated from `@poodle64/ui@2026.10.12`. 68 components, 19 situations.
5
5
 
6
6
  **Read this before writing a `<div>`.** Find the SITUATION you are in below, then compose the component named for it — do not hand-build it from raw `Card` or utility classes. Import is `import { Name } from '<import path>'`. Props marked `?` are optional. This map is the retrieval step the [`frontend-design` skill] makes mandatory; the [CHI 2026 study] measured composing-from-a-registry at 95% design-system compliance against 71% for writing the CSS from a prose style guide.
7
7