@hraness/design-kit 0.36.2 → 0.36.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hraness/design-kit",
3
- "version": "0.36.2",
3
+ "version": "0.36.4",
4
4
  "description": "React components and CSS for Hraness apps and product sites: application shells, marketing sections, charts, themes, effects, and syntax highlighting. Built on @hraness/ui.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -6,7 +6,7 @@
6
6
  "name": "@hraness/design-kit",
7
7
  "path": ".",
8
8
  "visibility": "public",
9
- "version": "0.36.2"
9
+ "version": "0.36.4"
10
10
  }
11
11
  ],
12
12
  "contract": "hraness.portfolio-inventory/v1",
@@ -101,7 +101,7 @@
101
101
  .hraness-palette.hraness-palette[data-palette],
102
102
  :root[data-palette][data-theme],
103
103
  [data-palette][data-theme],
104
- :root[data-palette]:not([data-theme]),
104
+ :root[data-palette][data-palette]:not([data-theme]),
105
105
  [data-palette]:not([data-theme]),
106
106
  :root.hraness-palette.hraness-palette[data-theme],
107
107
  .hraness-palette.hraness-palette[data-theme] {
@@ -1,5 +1,5 @@
1
1
  /* Generated by scripts/generate-palettes.ts. System-first palette paint without JavaScript. */
2
- :root[data-palette="catppuccin"]:not([data-theme]),
2
+ :root[data-palette][data-palette="catppuccin"]:not([data-theme]),
3
3
  [data-palette="catppuccin"]:not([data-theme]) {
4
4
  color-scheme: light dark;
5
5
  --hraness-palette-background: light-dark(#eff1f5, #1e1e2e);
@@ -143,7 +143,7 @@
143
143
  --hraness-palette-chart4: #f9e2af;
144
144
  --hraness-palette-chart5: #cda9f7;
145
145
  }
146
- :root[data-palette="gruvbox"]:not([data-theme]),
146
+ :root[data-palette][data-palette="gruvbox"]:not([data-theme]),
147
147
  [data-palette="gruvbox"]:not([data-theme]) {
148
148
  color-scheme: light dark;
149
149
  --hraness-palette-background: light-dark(#fbf1c7, #282828);
@@ -287,7 +287,7 @@
287
287
  --hraness-palette-chart4: #fabd2f;
288
288
  --hraness-palette-chart5: #e2aebc;
289
289
  }
290
- :root[data-palette="rose-pine"]:not([data-theme]),
290
+ :root[data-palette][data-palette="rose-pine"]:not([data-theme]),
291
291
  [data-palette="rose-pine"]:not([data-theme]) {
292
292
  color-scheme: light dark;
293
293
  --hraness-palette-background: light-dark(#faf4ed, #191724);
@@ -431,7 +431,7 @@
431
431
  --hraness-palette-chart4: #f6c177;
432
432
  --hraness-palette-chart5: #c4a7e7;
433
433
  }
434
- :root[data-palette="tokyo-night"]:not([data-theme]),
434
+ :root[data-palette][data-palette="tokyo-night"]:not([data-theme]),
435
435
  [data-palette="tokyo-night"]:not([data-theme]) {
436
436
  color-scheme: light dark;
437
437
  --hraness-palette-background: light-dark(#e1e2e7, #1a1b26);
@@ -575,7 +575,7 @@
575
575
  --hraness-palette-chart4: #e0af68;
576
576
  --hraness-palette-chart5: #bb9af7;
577
577
  }
578
- :root[data-palette="paper"]:not([data-theme]),
578
+ :root[data-palette][data-palette="paper"]:not([data-theme]),
579
579
  [data-palette="paper"]:not([data-theme]) {
580
580
  color-scheme: light dark;
581
581
  --hraness-palette-background: light-dark(#f8f7f4, #12100f);
@@ -725,8 +725,10 @@
725
725
  text-underline-offset: 0.18em;
726
726
  }
727
727
 
728
- .plain-site.plain-publication.plain-publication--embedded .plain-publication__article-body a:is(:hover, :focus-visible) {
729
- text-decoration-color: currentColor;
728
+ @media (forced-colors: none) {
729
+ .plain-site.plain-publication.plain-publication--embedded .plain-publication__article-body a:is(:hover, :focus-visible) {
730
+ text-decoration-color: currentColor;
731
+ }
730
732
  }
731
733
 
732
734
  .plain-site.plain-publication.plain-publication--embedded .plain-publication__article-body pre {
@@ -952,6 +954,7 @@
952
954
  background: Canvas;
953
955
  }
954
956
 
957
+ .plain-site.plain-publication.plain-publication--embedded .plain-publication__byline a,
955
958
  .plain-site.plain-publication.plain-publication--embedded .plain-publication__article-body a {
956
959
  text-decoration-color: LinkText;
957
960
  }
@@ -286,14 +286,14 @@ export function DesignSystemGallery({
286
286
  <section className="design-gallery__section" id="paper-theme">
287
287
  <h2>Paper theme</h2>
288
288
  <p>Import paper-theme.css to share warm neutral colors and compact typography without replacing layouts or saved appearance choices.</p>
289
- <div className="design-gallery__paper" data-hraness-theme="paper" data-theme="light">
289
+ <div className="design-gallery__paper" data-hraness-theme="paper" data-palette="paper" data-theme="light">
290
290
  <MarketingSiteHeader brand="Light paper" brandHref="#paper-theme" links={[{ href: "#foundation", label: "Foundation" }]} sticky={false} />
291
291
  <TopBar surface="glass" title="Glass application header" data-gallery-glass-top-bar="" />
292
292
  <h3>Light paper</h3><p>Headers blur scrolling content and become opaque when reduced transparency is preferred.</p>
293
293
  <p><a className="design-gallery__paper-link" href="#foundation">Read about the foundation</a></p>
294
294
  <Button variant="primary">Create note</Button>
295
295
  </div>
296
- <div className="design-gallery__paper" data-hraness-theme="paper" data-theme="dark">
296
+ <div className="design-gallery__paper" data-hraness-theme="paper" data-palette="paper" data-theme="dark">
297
297
  <MarketingSiteHeader brand="Dark paper" brandHref="#paper-theme" links={[{ href: "#foundation", label: "Foundation" }]} sticky={false} />
298
298
  <TopBar surface="glass" title="Glass application header" data-gallery-glass-top-bar="" />
299
299
  <h3>Dark paper</h3><p>The same header treatment follows an explicit dark preference.</p>
@@ -593,7 +593,7 @@ export function DesignSystemGallery({
593
593
  { label: "Bring your model", values: [true, { status: "optional", label: "On some plans" }] },
594
594
  { label: "Local storage", values: [true, { status: "depends", detail: "Check the provider's export format." }] },
595
595
  { label: "Cost", values: ["Free locally", "Subscription"] },
596
- ]} note="An illustrative comparison. Product pages supply current facts and sources." />
596
+ ]} note={<span>An illustrative comparison. Product pages supply current facts and <a href="#articles">sources</a>.</span>} />
597
597
  <MarketingAccount id="gallery-account" summary="Keep your preferences and shared work together.">
598
598
  <MarketingAccountActions primary={{ href: "#gallery-account", label: "Create account" }} signIn={{ href: "#gallery-account" }} />
599
599
  </MarketingAccount>
@@ -695,7 +695,7 @@ export function DesignSystemGallery({
695
695
  ]}
696
696
  />
697
697
  )}
698
- author={{ kind: "organization", name: "Hraness" }}
698
+ author={{ kind: "organization", name: "Hraness", href: "https://hraness.com" }}
699
699
  dek="Relay replays a failed webhook from the stored request body, so the retry sends the same bytes the provider signed."
700
700
  eyebrow="Technique"
701
701
  heading="Replaying webhooks without breaking signatures"
@@ -714,7 +714,7 @@ export function DesignSystemGallery({
714
714
  >
715
715
  <h2 id="gallery-article-problem">The problem</h2>
716
716
  <p>
717
- A provider signs the exact request body. Parsing the JSON and serializing it again changes
717
+ A provider signs the <a href="#gallery-article-approach">exact request body</a>. Parsing the JSON and serializing it again changes
718
718
  whitespace and key order, and the signature check then fails on every retry.
719
719
  </p>
720
720
  <ArticleCallout label="Limit" tone="limit">
@@ -758,6 +758,7 @@ export function DesignSystemGallery({
758
758
  },
759
759
  ]}
760
760
  />
761
+ <p className="plain-publication__provenance"><a href="#gallery-article-title">Read the article</a></p>
761
762
  <div className="hraness-prose">
762
763
  <h3>Shared reading scale</h3>
763
764
  <p>
@@ -94,7 +94,7 @@
94
94
  /* Prose and secondary text actions share a quiet, persistent link affordance. */
95
95
  .hraness-text-link,
96
96
  .hraness-prose :where(a:not([role="button"], [data-emphasis], [data-foil])),
97
- .plain-publication__article-body :where(a:not([role="button"], [data-emphasis], [data-foil])),
97
+ :is(.plain-publication__article-body, .plain-publication__sources, .plain-publication__provenance, .hraness-marketing-comparison__note) :where(a:not([role="button"], [data-emphasis], [data-foil])),
98
98
  .plain-page :where(p, li, dd, dt, figcaption) a:not([role="button"], [data-emphasis], [data-foil]) {
99
99
  text-decoration-line: underline;
100
100
  text-decoration-style: dotted;
@@ -103,16 +103,20 @@
103
103
  text-underline-offset: 0.2em;
104
104
  }
105
105
 
106
- .hraness-text-link:is(:hover, :focus-visible),
107
- .hraness-prose :where(a:not([role="button"], [data-emphasis], [data-foil])):is(:hover, :focus-visible),
108
- .plain-page :where(p, li, dd, dt, figcaption) a:not([role="button"], [data-emphasis], [data-foil]):is(:hover, :focus-visible) {
109
- text-decoration-color: currentColor;
106
+ @media (forced-colors: none) {
107
+ .hraness-text-link:is(:hover, :focus-visible),
108
+ .hraness-prose :where(a:not([role="button"], [data-emphasis], [data-foil])):is(:hover, :focus-visible),
109
+ :is(.plain-publication__article-body, .plain-publication__sources, .plain-publication__provenance, .hraness-marketing-comparison__note) :where(a:not([role="button"], [data-emphasis], [data-foil])):is(:hover, :focus-visible),
110
+ .plain-page :where(p, li, dd, dt, figcaption) a:not([role="button"], [data-emphasis], [data-foil]):is(:hover, :focus-visible) {
111
+ text-decoration-color: currentColor;
112
+ }
110
113
  }
111
114
 
112
115
  @media (forced-colors: active) {
113
116
  .hraness-text-link,
114
- .hraness-prose :where(a),
115
- .plain-page :where(p, li, dd, dt, figcaption) a {
117
+ .hraness-prose :where(a:not([role="button"], [data-emphasis], [data-foil])),
118
+ :is(.plain-publication__article-body, .plain-publication__sources, .plain-publication__provenance, .hraness-marketing-comparison__note) :where(a:not([role="button"], [data-emphasis], [data-foil])),
119
+ .plain-page :where(p, li, dd, dt, figcaption) a:not([role="button"], [data-emphasis], [data-foil]) {
116
120
  text-decoration-color: LinkText;
117
121
  }
118
122
  }