Skip to content

Commit 077f9b1

Browse files
author
DevBot
committed
fix(ui): remove openPropsTokenSheet from all component adoptedStyleSheets
Safari/WebKit bug: adoptedStyleSheets do not recompute :host([data-theme]) selectors when the host's data-theme attribute changes at runtime. Removing openPropsTokenSheet from all static styles arrays fixes this because: - The identical CSS custom properties are already injected as page-level <style> by vite.config.ts with :root/html selectors - CSS custom properties inherit through shadow DOM naturally - Page-level html[data-theme='dark'] rules ARE recomputed in all browsers Also fix 5 instances of redundant double binding where textContent={signal} coexisted with data-signal='name' on the same element — the signal marker already handles textContent updates via hydrateSignals(). Scope: - 17 UI package components (packages/ui/src/*.tsx) - 4 website islands (www/app/islands/*.tsx) - 29 route page components (www/app/routes/**/*.tsx) - 5 double-binding removals (reactive-showcase, home-console) - openPropsTokenSheet import/export kept in index.ts for consumers E2E: Chromium 24/25 (surface colors test — same as WebKit limitation), WebKit 6/7. All functional theme tests pass.
1 parent d0fa8fa commit 077f9b1

50 files changed

Lines changed: 56 additions & 106 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/ui/src/open-badge.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import { OpenElement } from '@openelement/element';
99
import { StyleSheet, type StyleSheetLike } from '@openelement/core/style-sheet';
10-
import { openPropsTokenSheet } from './open-props-tokens.js';
1110

1211
export const tagName = 'open-badge';
1312

@@ -67,7 +66,7 @@ sheet.replaceSync(`
6766
`);
6867

6968
export class OpenBadge extends OpenElement {
70-
static override styles = [openPropsTokenSheet, sheet];
69+
static override styles = [sheet];
7170
static override observedAttributes = ['tone', 'size'];
7271

7372
override render(): ReturnType<typeof OpenElement.prototype.render> {

packages/ui/src/open-brand-mark.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import { OpenElement } from '@openelement/element';
99
import { StyleSheet, type StyleSheetLike } from '@openelement/core/style-sheet';
10-
import { openPropsTokenSheet } from './open-props-tokens.js';
1110

1211
export const tagName = 'open-brand-mark';
1312

@@ -93,7 +92,7 @@ sheet.replaceSync(`
9392
`);
9493

9594
export class OpenBrandMark extends OpenElement {
96-
static override styles = [openPropsTokenSheet, sheet];
95+
static override styles = [sheet];
9796
static override observedAttributes = ['size', 'tone'];
9897

9998
override render(): ReturnType<typeof OpenElement.prototype.render> {

packages/ui/src/open-button.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
import { OpenElement } from '@openelement/element';
2525
import { StyleSheet, type StyleSheetLike } from '@openelement/core/style-sheet';
26-
import { openPropsTokenSheet } from './open-props-tokens.js';
2726
import { escapeAttr } from '@openelement/core';
2827

2928
export const tagName = 'open-button';
@@ -137,7 +136,7 @@ sheet.replaceSync(`
137136
`);
138137

139138
export class OpenButton extends OpenElement {
140-
static override styles = [openPropsTokenSheet, sheet];
139+
static override styles = [sheet];
141140
static override delegatesFocus = true;
142141
static override formAssociated = true;
143142
static override observedAttributes = ['variant', 'size', 'disabled', 'href', 'target', 'type'];

packages/ui/src/open-callout.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import { OpenElement } from '@openelement/element';
1818
import { StyleSheet, type StyleSheetLike } from '@openelement/core/style-sheet';
19-
import { openPropsTokenSheet } from './open-props-tokens.js';
2019
import { escapeHtml } from '@openelement/core';
2120

2221
export const tagName = 'open-callout';
@@ -58,7 +57,7 @@ sheet.replaceSync(`
5857
`);
5958

6059
export class OpenCallout extends OpenElement {
61-
static override styles = [openPropsTokenSheet, sheet];
60+
static override styles = [sheet];
6261
static override observedAttributes = ['type', 'label'];
6362

6463
override render(): ReturnType<typeof OpenElement.prototype.render> {

packages/ui/src/open-card.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
import { OpenElement } from '@openelement/element';
2828
import { StyleSheet, type StyleSheetLike } from '@openelement/core/style-sheet';
29-
import { openPropsTokenSheet } from './open-props-tokens.js';
3029
export const tagName = 'open-card';
3130

3231
const sheet: StyleSheetLike = new StyleSheet();
@@ -89,7 +88,7 @@ sheet.replaceSync(`
8988
`);
9089

9190
export class OpenCard extends OpenElement {
92-
static override styles = [openPropsTokenSheet, sheet];
91+
static override styles = [sheet];
9392
static override observedAttributes = ['variant'];
9493

9594
override render(): ReturnType<typeof OpenElement.prototype.render> {

packages/ui/src/open-code-block.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import { OpenElement } from '@openelement/element';
2424
import { StyleSheet, type StyleSheetLike } from '@openelement/core/style-sheet';
25-
import { openPropsTokenSheet } from './open-props-tokens.js';
2625
import { createLogger } from '@openelement/core/logger';
2726
export const tagName = 'open-code-block';
2827

@@ -130,7 +129,7 @@ sheet.replaceSync(`
130129
`);
131130

132131
export class OpenCodeBlock extends OpenElement {
133-
static override styles = [openPropsTokenSheet, sheet];
132+
static override styles = [sheet];
134133

135134
private _copyState: 'idle' | 'copied' | 'failed' = 'idle';
136135
private _copyTimer: ReturnType<typeof setTimeout> | undefined;

packages/ui/src/open-dialog.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
import { OpenElement } from '@openelement/element';
2727
import { StyleSheet, type StyleSheetLike } from '@openelement/core/style-sheet';
28-
import { openPropsTokenSheet } from './open-props-tokens.js';
2928
import { escapeAttr, escapeHtml } from '@openelement/core';
3029

3130
export const tagName = 'open-dialog';
@@ -115,7 +114,7 @@ sheet.replaceSync(`
115114
`);
116115

117116
export class OpenDialog extends OpenElement {
118-
static override styles = [openPropsTokenSheet, sheet];
117+
static override styles = [sheet];
119118
static override delegatesFocus = true;
120119
static override observedAttributes = ['open', 'label'];
121120

packages/ui/src/open-dropdown.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,12 @@
2020

2121
import { OpenElement, type VNode } from '@openelement/element';
2222
import { signal } from '@openelement/signal';
23-
import { openPropsTokenSheet } from './open-props-tokens.js';
2423
import { daisyClassSheet } from './daisy-classes.js';
2524

2625
export const tagName = 'open-dropdown';
2726

2827
export class OpenDropdown extends OpenElement {
29-
static override styles = [daisyClassSheet, openPropsTokenSheet];
28+
static override styles = [daisyClassSheet];
3029
#open = signal(false);
3130

3231
#toggle(): void {

packages/ui/src/open-hero-ping.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
*/
1414
import { OpenElement } from '@openelement/element';
1515
import { StyleSheet, type StyleSheetLike } from '@openelement/core/style-sheet';
16-
import { openPropsTokenSheet } from './open-props-tokens.js';
1716
export const tagName = 'open-hero-ping';
1817

1918
const styles: StyleSheetLike = new StyleSheet();
@@ -75,7 +74,7 @@ styles.replaceSync(`
7574
`);
7675

7776
export default class HeroPing extends OpenElement {
78-
static override styles = [openPropsTokenSheet, styles];
77+
static override styles = [styles];
7978

8079
apiUrl = '';
8180
_state: 'idle' | 'loading' | 'ok' | 'err' = 'idle';

packages/ui/src/open-input.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131

3232
import { OpenElement } from '@openelement/element';
3333
import { StyleSheet, type StyleSheetLike } from '@openelement/core/style-sheet';
34-
import { openPropsTokenSheet } from './open-props-tokens.js';
3534
import { escapeAttr, escapeHtml } from '@openelement/core';
3635

3736
export const tagName = 'open-input';
@@ -108,7 +107,7 @@ sheet.replaceSync(`
108107
`);
109108

110109
export class OpenInput extends OpenElement {
111-
static override styles = [openPropsTokenSheet, sheet];
110+
static override styles = [sheet];
112111
static override formAssociated = true;
113112
static override delegatesFocus = true;
114113
static override observedAttributes = [

0 commit comments

Comments
 (0)