@kwtv/components 0.1.2 → 0.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kwtv/components",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "license": "UNLICENSED",
5
5
  "type": "module",
6
6
  "description": "KWTV UI components for Astro, with React islands. Built on the KWTV design tokens.",
@@ -34,6 +34,6 @@
34
34
  }
35
35
  },
36
36
  "dependencies": {
37
- "@kwtv/tokens": "^0.1.2"
37
+ "@kwtv/tokens": "^0.2.0"
38
38
  }
39
39
  }
@@ -1,5 +1,8 @@
1
1
  ---
2
- /** Decorative drifting dot field used behind short hero copy. */
2
+ /** Decorative drifting dot field used behind short hero copy.
3
+ * Override --dotgrid-color and --dotgrid-opacity for a different backing surface;
4
+ * verify the brightest moving dot against the copy, not only the flat surface.
5
+ */
3
6
  interface Props {
4
7
  compact?: boolean;
5
8
  class?: string;
@@ -29,9 +32,9 @@ const classes = ["pl-dotgrid", compact && "pl-dotgrid--compact", className]
29
32
  .pl-dotgrid__dots {
30
33
  position: absolute;
31
34
  inset: 0;
32
- background-image: radial-gradient(var(--sage-light) 1.4px, transparent 1.6px);
35
+ background-image: radial-gradient(var(--dotgrid-color, var(--sage-light)) 1.4px, transparent 1.6px);
33
36
  background-size: 28px 28px;
34
- opacity: 0.7;
37
+ opacity: var(--dotgrid-opacity, var(--dotgrid-theme-opacity, .7));
35
38
  animation: pl-drift 6s linear infinite;
36
39
  }
37
40
 
@@ -54,6 +57,12 @@ const classes = ["pl-dotgrid", compact && "pl-dotgrid--compact", className]
54
57
  font-size: var(--text-base);
55
58
  }
56
59
 
60
+ /* Explicit themes win over OS preference, as in the token cascade. */
61
+ :global([data-theme="dark"]) .pl-dotgrid { --dotgrid-theme-opacity: .2; }
62
+ @media (prefers-color-scheme: dark) {
63
+ :global(:root:not([data-theme])) .pl-dotgrid { --dotgrid-theme-opacity: .2; }
64
+ }
65
+
57
66
  @media (prefers-reduced-motion: reduce) {
58
67
  .pl-dotgrid__dots {
59
68
  animation: none;
@@ -52,8 +52,8 @@ const classes = ["ui-footer", `ui-footer--${variant}`, className]
52
52
  grid-template-columns: 1.5fr 1fr 1.3fr;
53
53
  gap: var(--space-10);
54
54
  padding: var(--space-10);
55
- background: var(--sage-xdark);
56
- color: var(--ivory-light);
55
+ background: var(--surface-inverse);
56
+ color: var(--surface-inverse-fg);
57
57
  }
58
58
 
59
59
  .ui-footer__brandblock {
@@ -71,13 +71,13 @@ const classes = ["ui-footer", `ui-footer--${variant}`, className]
71
71
  }
72
72
  .ui-footer__brand :global(span) {
73
73
  font-weight: var(--weight-regular);
74
- color: var(--sage-light);
74
+ color: var(--surface-inverse-muted);
75
75
  }
76
76
 
77
77
  .ui-footer__addr {
78
78
  font-size: var(--text-sm);
79
79
  line-height: var(--leading-sm);
80
- color: var(--ivory-light);
80
+ color: var(--surface-inverse-fg);
81
81
  }
82
82
  .ui-footer__addr :global(a) {
83
83
  color: inherit;
@@ -101,9 +101,9 @@ const classes = ["ui-footer", `ui-footer--${variant}`, className]
101
101
  flex-wrap: wrap;
102
102
  margin-top: var(--space-4);
103
103
  padding-top: var(--space-5);
104
- border-top: 1px solid var(--sage-text);
104
+ border-top: 1px solid var(--surface-inverse-border);
105
105
  font-size: var(--text-xs);
106
- color: var(--sage-light);
106
+ color: var(--surface-inverse-muted);
107
107
  }
108
108
 
109
109
  .ui-footer__policies {
@@ -112,7 +112,7 @@ const classes = ["ui-footer", `ui-footer--${variant}`, className]
112
112
  gap: var(--space-4);
113
113
  }
114
114
  .ui-footer__bar :global(a) {
115
- color: var(--ivory-light);
115
+ color: var(--surface-inverse-fg);
116
116
  text-decoration: underline;
117
117
  text-underline-offset: 2px;
118
118
  }
@@ -156,7 +156,7 @@ const classes = ["ui-footer", `ui-footer--${variant}`, className]
156
156
  order: 1;
157
157
  font-size: var(--text-lg);
158
158
  font-weight: var(--weight-regular);
159
- color: var(--sage-light);
159
+ color: var(--surface-inverse-muted);
160
160
  }
161
161
  .ui-footer--mobile.ui-footer--site .ui-footer__addr {
162
162
  order: 2;
@@ -178,7 +178,7 @@ const classes = ["ui-footer", `ui-footer--${variant}`, className]
178
178
  .ui-footer--mobile.ui-footer--site .ui-footer__social :global(.ui-social) {
179
179
  width: 48px;
180
180
  height: 48px;
181
- border: 1px solid var(--sage-text);
181
+ border: 1px solid var(--surface-inverse-border);
182
182
  border-radius: var(--radius-full);
183
183
  }
184
184
  .ui-footer--mobile.ui-footer--site :global(.ui-footer__newsletter) {
@@ -38,11 +38,11 @@ const { items, divider = "✦", class: className } = Astro.props;
38
38
 
39
39
  <style>
40
40
  .ui-marquee {
41
- background: var(--sage-xdark);
42
- color: var(--ivory-light);
41
+ background: var(--surface-banner);
42
+ color: var(--surface-inverse-fg);
43
43
  overflow: hidden;
44
44
  padding-block: var(--space-3);
45
- border-block: 1px solid var(--sage-text);
45
+ border-block: 1px solid var(--surface-inverse-border);
46
46
  transform: rotate(-1.2deg) scale(1.02);
47
47
  }
48
48
  .ui-marquee__track {
@@ -69,21 +69,21 @@ const classes = ["ui-news", stacked && "ui-news--stacked", className]
69
69
  min-width: 0;
70
70
  min-height: 48px;
71
71
  padding: 0 var(--space-4);
72
- background: var(--ivory-xlight);
73
- border: 1px solid transparent;
72
+ background: var(--surface-light);
73
+ border: 1px solid var(--border-strong-light);
74
74
  border-radius: var(--radius-md);
75
75
  font-family: var(--font-sans);
76
76
  font-size: var(--text-sm);
77
- color: var(--text);
77
+ color: var(--text-light);
78
78
  }
79
79
  .ui-news__input::placeholder {
80
- color: var(--text-muted);
80
+ color: var(--text-muted-light);
81
81
  }
82
82
  .ui-news__input:focus-visible,
83
83
  .ui-news__input.is-focus {
84
- outline: 2px solid var(--ivory-xlight);
84
+ outline: 2px solid var(--focus);
85
85
  outline-offset: 2px;
86
- box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.25);
86
+ box-shadow: 0 0 0 4px var(--focus-outer);
87
87
  }
88
88
 
89
89
  .ui-news__btn {
@@ -105,9 +105,9 @@ const classes = ["ui-news", stacked && "ui-news--stacked", className]
105
105
  background: var(--sage-xlight);
106
106
  }
107
107
  .ui-news__btn:focus-visible {
108
- outline: 2px solid var(--ivory-xlight);
108
+ outline: 2px solid var(--focus);
109
109
  outline-offset: 2px;
110
- box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.25);
110
+ box-shadow: 0 0 0 4px var(--focus-outer);
111
111
  }
112
112
 
113
113
  @media (prefers-reduced-motion: reduce) {
@@ -14,7 +14,7 @@ const classes = ["pl-sticker", `pl-sticker--${size}`, className]
14
14
 
15
15
  <span class={classes} aria-hidden="true" {...rest}>
16
16
  <svg class="pl-sticker__disc" viewBox="0 0 112 112">
17
- <circle cx="56" cy="56" r="52" fill="var(--sage-xdark)"></circle>
17
+ <circle cx="56" cy="56" r="52" fill="var(--surface-inverse)"></circle>
18
18
  <circle class="pl-sticker__ring" cx="56" cy="56" r="47" fill="none" stroke="var(--sage-light)" stroke-width="1.5" stroke-dasharray="5 7"></circle>
19
19
  </svg>
20
20
  <span class="pl-sticker__content">
@@ -58,7 +58,7 @@ const classes = ["pl-sticker", `pl-sticker--${size}`, className]
58
58
  align-items: center;
59
59
  justify-content: center;
60
60
  gap: var(--space-1);
61
- color: var(--ivory-light);
61
+ color: var(--surface-inverse-fg);
62
62
  text-align: center;
63
63
  font-size: var(--text-xs);
64
64
  font-weight: var(--weight-semibold);
@@ -144,7 +144,7 @@ const charCount = count && maxlength ? `${String(value).length} / ${maxlength}`
144
144
  min-height: 40px;
145
145
  padding: var(--space-2) var(--space-3);
146
146
  background: var(--surface);
147
- border: 1px solid var(--border);
147
+ border: 1px solid var(--border-strong);
148
148
  border-radius: var(--radius-md);
149
149
  font-family: var(--font-sans);
150
150
  font-size: var(--text-sm);
@@ -97,7 +97,7 @@
97
97
  padding: 0;
98
98
  border: 0;
99
99
  border-radius: var(--radius-full);
100
- background: var(--border);
100
+ background: var(--border-strong);
101
101
  cursor: pointer;
102
102
  transition:
103
103
  width var(--duration-base) var(--ease-enter),
@@ -107,7 +107,7 @@
107
107
 
108
108
  .pl-news-dot[data-on] {
109
109
  width: 22px;
110
- background: var(--sage-xdark);
110
+ background: var(--primary);
111
111
  }
112
112
 
113
113
  .pl-news-dot:focus-visible {
@@ -46,7 +46,7 @@
46
46
  min-height: 40px;
47
47
  padding: 0 var(--space-3);
48
48
  background: var(--surface);
49
- border: 1px solid var(--border);
49
+ border: 1px solid var(--border-strong);
50
50
  border-radius: var(--radius-md);
51
51
  color: var(--text);
52
52
  font-family: var(--font-sans);