@maxhealth.tech/prefab 0.2.12 → 0.2.14

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.
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Theme application — CSS custom properties from theme field.
2
+ * Theme application — CSS custom properties from theme field,
3
+ * plus a built-in theme toggle button with two-way sync.
3
4
  */
4
5
  /**
5
6
  * Apply theme CSS custom properties to the root element.
@@ -66,4 +67,124 @@ function matchCombo(combo, e) {
66
67
  return false;
67
68
  return e.key.toLowerCase() === key;
68
69
  }
70
+ // ── Theme Toggle ─────────────────────────────────────────────────────────────
71
+ const SUN_SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"/></svg>`;
72
+ const MOON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z"/></svg>`;
73
+ const POSITION_MAP = {
74
+ 'top-right': 'top: 8px; right: 8px;',
75
+ 'top-left': 'top: 8px; left: 8px;',
76
+ 'bottom-right': 'bottom: 8px; right: 8px;',
77
+ 'bottom-left': 'bottom: 8px; left: 8px;',
78
+ };
79
+ /** Detect the current effective theme from an element's data-theme attribute or OS preference. */
80
+ function detectTheme(el, storageKey) {
81
+ try {
82
+ const stored = localStorage.getItem(storageKey);
83
+ if (stored === 'light' || stored === 'dark')
84
+ return stored;
85
+ }
86
+ catch { /* storage unavailable */ }
87
+ const attr = el.getAttribute('data-theme') ?? document.documentElement.getAttribute('data-theme');
88
+ if (attr === 'light' || attr === 'dark')
89
+ return attr;
90
+ if (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: light)').matches) {
91
+ return 'light';
92
+ }
93
+ return 'dark';
94
+ }
95
+ /**
96
+ * Create a theme toggle button inside a prefab root element.
97
+ *
98
+ * - Persists to localStorage
99
+ * - Syncs two-way with `document.documentElement[data-theme]` via MutationObserver
100
+ * - Uses sun/moon SVG icons (no external deps)
101
+ *
102
+ * @returns A cleanup function that removes the button and observer.
103
+ */
104
+ export function createThemeToggle(root, options) {
105
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
106
+ if (typeof document === 'undefined')
107
+ return () => { };
108
+ const position = options?.position ?? 'top-right';
109
+ const storageKey = options?.storageKey ?? 'prefab-theme';
110
+ const syncDocument = options?.syncDocument ?? true;
111
+ // Ensure root has relative/absolute/fixed positioning for the toggle
112
+ const rootPos = getComputedStyle(root).position;
113
+ if (rootPos === 'static' || rootPos === '') {
114
+ root.style.position = 'relative';
115
+ }
116
+ const btn = document.createElement('button');
117
+ btn.className = 'pf-theme-toggle';
118
+ btn.setAttribute('aria-label', 'Toggle theme');
119
+ btn.setAttribute('title', 'Toggle light/dark');
120
+ Object.assign(btn.style, {
121
+ position: 'absolute',
122
+ zIndex: '100',
123
+ width: '28px',
124
+ height: '28px',
125
+ border: '1px solid var(--border, #e5e7eb)',
126
+ borderRadius: '6px',
127
+ background: 'var(--card, rgba(255,255,255,0.8))',
128
+ color: 'var(--foreground, #333)',
129
+ cursor: 'pointer',
130
+ display: 'flex',
131
+ alignItems: 'center',
132
+ justifyContent: 'center',
133
+ padding: '0',
134
+ opacity: '0.7',
135
+ transition: 'opacity 0.15s, border-color 0.15s',
136
+ });
137
+ // Apply position
138
+ const posCSS = POSITION_MAP[position] ?? POSITION_MAP['top-right'];
139
+ for (const rule of posCSS.split(';')) {
140
+ const [prop, val] = rule.split(':').map(s => s.trim());
141
+ if (prop && val)
142
+ btn.style.setProperty(prop, val);
143
+ }
144
+ btn.addEventListener('mouseenter', () => { btn.style.opacity = '1'; });
145
+ btn.addEventListener('mouseleave', () => { btn.style.opacity = '0.7'; });
146
+ function applyThemeState(theme) {
147
+ root.setAttribute('data-theme', theme);
148
+ if (syncDocument)
149
+ document.documentElement.setAttribute('data-theme', theme);
150
+ btn.innerHTML = theme === 'dark' ? MOON_SVG : SUN_SVG;
151
+ try {
152
+ localStorage.setItem(storageKey, theme);
153
+ }
154
+ catch { /* noop */ }
155
+ }
156
+ // Initial state
157
+ const initial = detectTheme(root, storageKey);
158
+ applyThemeState(initial);
159
+ // Click handler
160
+ btn.addEventListener('click', () => {
161
+ const current = root.getAttribute('data-theme') ?? 'dark';
162
+ applyThemeState(current === 'dark' ? 'light' : 'dark');
163
+ });
164
+ root.appendChild(btn);
165
+ // Two-way sync: watch document.documentElement for external theme changes
166
+ let observer;
167
+ if (syncDocument) {
168
+ observer = new MutationObserver((mutations) => {
169
+ for (const m of mutations) {
170
+ if (m.type === 'attributes' && m.attributeName === 'data-theme') {
171
+ const docTheme = document.documentElement.getAttribute('data-theme');
172
+ if ((docTheme === 'light' || docTheme === 'dark') && docTheme !== root.getAttribute('data-theme')) {
173
+ root.setAttribute('data-theme', docTheme);
174
+ btn.innerHTML = docTheme === 'dark' ? MOON_SVG : SUN_SVG;
175
+ try {
176
+ localStorage.setItem(storageKey, docTheme);
177
+ }
178
+ catch { /* noop */ }
179
+ }
180
+ }
181
+ }
182
+ });
183
+ observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] });
184
+ }
185
+ return () => {
186
+ observer?.disconnect();
187
+ btn.remove();
188
+ };
189
+ }
69
190
  //# sourceMappingURL=theme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/renderer/theme.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;GAGG;AACH,oEAAoE;AACpE,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;AAC3C,CAAC;AAED,qEAAqE;AACrE,SAAS,gBAAgB,CAAC,KAAa;IACrC,qEAAqE;IACrE,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAiB,EAAE,KAAmB;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAM;IAElB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/E,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,uCAAuC;QACvC,MAAM,OAAO,GAAG,mBAAmB,CAAA;QACnC,IAAI,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAA4B,CAAA;QACzE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YACzC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAA;YACpB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACpC,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,gBAAgB,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;aAClF,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,OAAO,CAAC,WAAW,GAAG,0BAA0B,KAAK,oFAAoF,KAAK,UAAU,CAAA;IAC1J,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAA6C,EAC7C,QAA6C;IAE7C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,SAAS,CAAA;IAElE,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAQ,EAAE;QACzC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzB,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC7C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,CAAgB;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC/D,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAExC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IAC/D,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAClD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAE9C,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAA;AACpC,CAAC"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/renderer/theme.ts"],"names":[],"mappings":"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"}