codex-plus-patcher 0.7.1 → 0.8.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.
@@ -2,11 +2,67 @@ const { replaceOnce } = require("./replace");
2
2
  const { projectSelectorSearchHook, projectSelectorTriggerHook } = require("./hooks/project-selector");
3
3
 
4
4
  function patchLocalActiveWorkspaceRootDropdownProjectSelectorShortcut(text) {
5
+ if (text.includes("function rt(e){let t=(0,it.c)(44),") && text.includes("function St({activeProjectIdOverride:e,")) {
6
+ let patched = replaceOnce(
7
+ text,
8
+ "var et,tt,nt=e((()=>{et=L(),Je(),_e(),tt=o()}));function rt(e){let t=(0,it.c)(44),",
9
+ `var et,tt,nt=e((()=>{et=L(),Je(),_e(),tt=o()}));${projectSelectorSearchHook()}function rt(e){let t=(0,it.c)(44),`,
10
+ "project selector fuzzy search adapter insertion anchor",
11
+ );
12
+ patched = replaceOnce(
13
+ patched,
14
+ "let e=_.trim().toLowerCase();b=r.filter(t=>{if(!e)return!0;let n=t.repositoryData?.rootFolder??``;return[t.label,n,t.path??``,t.hostDisplayName??``].some(t=>t.toLowerCase().includes(e))});",
15
+ "b=CPXP.fuzzyFilter(r,_);",
16
+ "project selector fuzzy search filter anchor",
17
+ );
18
+ patched = replaceOnce(
19
+ patched,
20
+ "T=(0,X.jsx)(fe,{value:_,onChange:s,placeholder:c,className:`mb-1`})",
21
+ "T=(0,X.jsx)(fe,{value:_,onChange:s,onKeyDown:e=>CPXP.acceptFirst(e,b,o,_),placeholder:c,className:`mb-1`})",
22
+ "project selector accept first match keydown anchor",
23
+ );
24
+ patched = replaceOnce(
25
+ patched,
26
+ "(0,X.jsx)(`span`,{className:`truncate`,children:e.label})",
27
+ "(0,X.jsx)(`span`,{className:`truncate`,children:CPXP.fuzzyHighlight(e.label,_,X.jsx)})",
28
+ "project selector fuzzy search highlight anchor",
29
+ );
30
+ patched = replaceOnce(
31
+ patched,
32
+ "var wt,$,Tt=e((()=>{Se(),F(),r(),ge(),wt=t(b(),1),",
33
+ `${projectSelectorTriggerHook("wt")}var wt,$,Tt=e((()=>{Se(),F(),r(),ge(),wt=t(b(),1),`,
34
+ "project selector shortcut helper insertion anchor",
35
+ );
36
+ patched = replaceOnce(
37
+ patched,
38
+ "children:(0,$.jsx)(gt,{categoryLabel:(0,$.jsx)(z,{id:`composer.localCwdDropdown.footerCategory`",
39
+ "children:(0,$.jsx)(gt,{\"data-codex-plus-project-selector-trigger\":!0,\"data-codex-plus-project-selector-variant\":c,categoryLabel:(0,$.jsx)(z,{id:`composer.localCwdDropdown.footerCategory`",
40
+ "project selector default button marker anchor",
41
+ );
42
+ patched = replaceOnce(
43
+ patched,
44
+ "Ze=()=>(0,$.jsxs)(`button`,{className:a(`heading-xl text-token-text-tertiary",
45
+ "Ze=()=>(0,$.jsxs)(`button`,{\"data-codex-plus-project-selector-trigger\":!0,\"data-codex-plus-project-selector-variant\":c,className:a(`heading-xl text-token-text-tertiary",
46
+ "project selector hero button marker anchor",
47
+ );
48
+ patched = replaceOnce(
49
+ patched,
50
+ "triggerButton:h??J(),contentWidth:`menu`",
51
+ "triggerButton:CPXPST(h??J(),c),contentWidth:`menu`",
52
+ "project selector empty trigger anchor",
53
+ );
54
+ return replaceOnce(
55
+ patched,
56
+ "triggerButton:h??(c===`hero`?Ze():c===`home`?J():Je()),contentWidth:`workspace`",
57
+ "triggerButton:CPXPST(h??(c===`hero`?Ze():c===`home`?J():Je()),c),contentWidth:`workspace`",
58
+ "project selector shortcut final dropdown trigger anchor",
59
+ );
60
+ }
5
61
  if (text.includes("function Ti(e){let t=(0,Oi.c)(109),")) {
6
62
  return replaceOnce(
7
63
  text,
8
- "H=(0,X.jsx)(`button`,{type:`button`,className:`flex min-w-0 items-center gap-1.5 rounded-lg bg-token-foreground/5 px-2 py-0.5 text-base leading-6 font-medium tracking-[-0.13px] text-token-foreground`,disabled:M,children:de})",
9
- "H=(0,X.jsx)(`button`,{type:`button`,\"data-codex-plus-project-selector-trigger\":!0,\"data-codex-plus-project-selector-variant\":`default`,className:`flex min-w-0 items-center gap-1.5 rounded-lg bg-token-foreground/5 px-2 py-0.5 text-base leading-6 font-medium tracking-[-0.13px] text-token-foreground`,disabled:M,children:de})",
64
+ "de=(0,X.jsx)(`button`,{type:`button`,className:`flex min-w-0 items-center gap-1.5 rounded-lg bg-token-foreground/5 px-2 py-0.5 text-base leading-6 font-medium tracking-[-0.13px] text-token-foreground`,disabled:re,children:ue})",
65
+ "de=(0,X.jsx)(`button`,{type:`button`,\"data-codex-plus-project-selector-trigger\":!0,\"data-codex-plus-project-selector-variant\":`default`,className:`flex min-w-0 items-center gap-1.5 rounded-lg bg-token-foreground/5 px-2 py-0.5 text-base leading-6 font-medium tracking-[-0.13px] text-token-foreground`,disabled:re,children:ue})",
10
66
  "project selector shortcut final dropdown trigger anchor",
11
67
  );
12
68
  }
@@ -49,6 +105,62 @@ function patchLocalActiveWorkspaceRootDropdownProjectSelectorShortcut(text) {
49
105
  }
50
106
 
51
107
  function patchHomeProjectDropdownProjectSelectorShortcut(text) {
108
+ if (text.includes("function zn(e){let t=(0,Bn.c)(44),") && text.includes("function ar({activeProjectIdOverride:e,")) {
109
+ let patched = replaceOnce(
110
+ text,
111
+ "function zn(e){let t=(0,Bn.c)(44),",
112
+ `${projectSelectorSearchHook()}${projectSelectorTriggerHook("$")}function zn(e){let t=(0,Bn.c)(44),`,
113
+ "home project selector shortcut helper insertion anchor",
114
+ );
115
+ patched = replaceOnce(
116
+ patched,
117
+ "let e=_.trim().toLowerCase();b=r.filter(t=>{if(!e)return!0;let n=t.repositoryData?.rootFolder??``;return[t.label,n,t.path??``,t.hostDisplayName??``].some(t=>t.toLowerCase().includes(e))});",
118
+ "b=CPXP.fuzzyFilter(r,_);",
119
+ "home project selector fuzzy search filter anchor",
120
+ );
121
+ patched = replaceOnce(
122
+ patched,
123
+ "w=(0,Z.jsx)(_t,{value:_,onChange:s,placeholder:c,className:`mb-1`})",
124
+ "w=(0,Z.jsx)(_t,{value:_,onChange:s,onKeyDown:e=>CPXP.acceptFirst(e,b,o,_),placeholder:c,className:`mb-1`})",
125
+ "home project selector accept first match keydown anchor",
126
+ );
127
+ patched = replaceOnce(
128
+ patched,
129
+ "(0,Z.jsx)(`span`,{className:`truncate`,children:e.label})",
130
+ "(0,Z.jsx)(`span`,{className:`truncate`,children:CPXP.fuzzyHighlight(e.label,_,Z.jsx)})",
131
+ "home project selector fuzzy search highlight anchor",
132
+ );
133
+ patched = replaceOnce(
134
+ patched,
135
+ "children:(0,$.jsxs)(me,{size:`composerSm`,color:`ghost`,className:`min-w-0`,children:",
136
+ "children:(0,$.jsxs)(me,{\"data-codex-plus-project-selector-trigger\":!0,\"data-codex-plus-project-selector-variant\":u,size:`composerSm`,color:`ghost`,className:`min-w-0`,children:",
137
+ "home project selector default button marker anchor",
138
+ );
139
+ patched = replaceOnce(
140
+ patched,
141
+ "children:(0,$.jsx)($n,{categoryLabel:(0,$.jsx)(R,{id:`composer.localCwdDropdown.footerCategory`",
142
+ "children:(0,$.jsx)($n,{\"data-codex-plus-project-selector-trigger\":!0,\"data-codex-plus-project-selector-variant\":u,categoryLabel:(0,$.jsx)(R,{id:`composer.localCwdDropdown.footerCategory`",
143
+ "home project selector footer button marker anchor",
144
+ );
145
+ patched = replaceOnce(
146
+ patched,
147
+ "ze=()=>(0,$.jsxs)(`button`,{className:V(`heading-xl text-token-text-tertiary",
148
+ "ze=()=>(0,$.jsxs)(`button`,{\"data-codex-plus-project-selector-trigger\":!0,\"data-codex-plus-project-selector-variant\":u,className:V(`heading-xl text-token-text-tertiary",
149
+ "home project selector hero button marker anchor",
150
+ );
151
+ patched = replaceOnce(
152
+ patched,
153
+ "triggerButton:p??G(),contentWidth:`menu`",
154
+ "triggerButton:CPXPST(p??G(),u),contentWidth:`menu`",
155
+ "home project selector empty trigger anchor",
156
+ );
157
+ return replaceOnce(
158
+ patched,
159
+ "triggerButton:p??(u===`hero`?ze():u===`home`?G():Ie()),contentWidth:`workspace`",
160
+ "triggerButton:CPXPST(p??(u===`hero`?ze():u===`home`?G():Ie()),u),contentWidth:`workspace`",
161
+ "home project selector workspace trigger anchor",
162
+ );
163
+ }
52
164
  let patched = replaceOnce(
53
165
  text,
54
166
  "function St({activeProjectIdOverride:e,allowLocalProjects:t=!0,allowLocalProjectActions:n=t,allowRemoteProjects:r=!0,disabled:a=!1,hideLabel:o=!1,onWorkspaceRootSelected:s,variant:c=`default`,isOpen:l,onOpenChange:m,triggerButton:_}){",
@@ -107,6 +219,22 @@ function patchHomeProjectDropdownProjectSelectorShortcut(text) {
107
219
 
108
220
  function patchRunCommandProjectSelectorShortcut(text) {
109
221
  const runtimeCommandEntries = "...(window.CodexPlus?.commands?.all?.()??[]).map(e=>[e.id,()=>window.CodexPlus?.commands?.run?.(e.id)])";
222
+ if (text.includes("Xi(`toggleSidebar`,r);")) {
223
+ return replaceOnce(
224
+ text,
225
+ "Xi(`toggleSidebar`,r);",
226
+ "Xi(`toggleSidebar`,r);for(let e of window.CodexPlus?.commands?.all?.()??[])Xi(e.id,()=>window.CodexPlus?.commands?.run?.(e.id));",
227
+ "codex plus runtime command dispatch anchor",
228
+ );
229
+ }
230
+ if (text.includes("Jy(`toggleSidebar`,r);")) {
231
+ return replaceOnce(
232
+ text,
233
+ "Jy(`toggleSidebar`,r);",
234
+ "Jy(`toggleSidebar`,r);for(let e of window.CodexPlus?.commands?.all?.()??[])Jy(e.id,()=>window.CodexPlus?.commands?.run?.(e.id));",
235
+ "codex plus runtime command dispatch anchor",
236
+ );
237
+ }
110
238
  if (text.includes("],[`openFolder`,GTt],[`toggleSidebar`,")) {
111
239
  return replaceOnce(
112
240
  text,
@@ -40,8 +40,13 @@
40
40
  }
41
41
 
42
42
  function trigger(element, variant, React) {
43
- return React.isValidElement(element)
44
- ? React.cloneElement(element, {
43
+ const cloneElement = typeof React?.cloneElement === "function" ? React.cloneElement : React?.default?.cloneElement;
44
+ return typeof cloneElement === "function" &&
45
+ element != null &&
46
+ typeof element === "object" &&
47
+ "props" in element &&
48
+ "type" in element
49
+ ? cloneElement(element, {
45
50
  ...element.props,
46
51
  "data-codex-plus-project-selector-trigger": true,
47
52
  "data-codex-plus-project-selector-variant": variant,
@@ -201,8 +201,10 @@
201
201
  required: true,
202
202
  styles:
203
203
  ":root:not(.dark):not(.electron-dark) :is([data-app-action-sidebar-project-row],[data-app-action-sidebar-thread-row][data-codex-plus-project-sidebar-color],[data-app-action-sidebar-project-list-id][data-codex-plus-project-sidebar-color] [data-app-action-sidebar-thread-row]){border-radius:0;background-color:var(--codex-plus-project-soft-light);border-left-color:var(--codex-plus-project-accent)}" +
204
+ ":root:not(.dark):not(.electron-dark) [data-app-action-sidebar-project-list-id][data-codex-plus-project-sidebar-color]{background-color:var(--codex-plus-project-soft-light);border-left-color:var(--codex-plus-project-accent)}" +
204
205
  ":root:not(.dark):not(.electron-dark) :is([data-app-action-sidebar-thread-row][data-codex-plus-project-sidebar-color],[data-app-action-sidebar-project-list-id][data-codex-plus-project-sidebar-color] [data-app-action-sidebar-thread-row])[data-app-action-sidebar-thread-active=\"true\"]{background-color:var(--codex-plus-project-bg-light);box-shadow:inset 5px 0 0 var(--codex-plus-project-accent)}" +
205
206
  ":root.dark :is([data-app-action-sidebar-project-row],[data-app-action-sidebar-thread-row][data-codex-plus-project-sidebar-color],[data-app-action-sidebar-project-list-id][data-codex-plus-project-sidebar-color] [data-app-action-sidebar-thread-row]),:root.electron-dark :is([data-app-action-sidebar-project-row],[data-app-action-sidebar-thread-row][data-codex-plus-project-sidebar-color],[data-app-action-sidebar-project-list-id][data-codex-plus-project-sidebar-color] [data-app-action-sidebar-thread-row]){border-radius:0;background-color:var(--codex-plus-project-bg-dark);border-left-color:var(--codex-plus-project-border-dark)}" +
207
+ ":root.dark [data-app-action-sidebar-project-list-id][data-codex-plus-project-sidebar-color],:root.electron-dark [data-app-action-sidebar-project-list-id][data-codex-plus-project-sidebar-color]{background-color:var(--codex-plus-project-bg-dark);border-left-color:var(--codex-plus-project-border-dark)}" +
206
208
  ":root.dark :is([data-app-action-sidebar-thread-row][data-codex-plus-project-sidebar-color],[data-app-action-sidebar-project-list-id][data-codex-plus-project-sidebar-color] [data-app-action-sidebar-thread-row])[data-app-action-sidebar-thread-active=\"true\"],:root.electron-dark :is([data-app-action-sidebar-thread-row][data-codex-plus-project-sidebar-color],[data-app-action-sidebar-project-list-id][data-codex-plus-project-sidebar-color] [data-app-action-sidebar-thread-row])[data-app-action-sidebar-thread-active=\"true\"]{background-color:color-mix(in srgb,var(--codex-plus-project-accent) 38%,transparent);border-left-color:color-mix(in srgb,var(--codex-plus-project-accent) 88%,transparent);box-shadow:inset 5px 0 0 var(--codex-plus-project-accent)}" +
207
209
  ":root:not(.dark):not(.electron-dark) [data-codex-plus-project-color]{border-left-color:var(--codex-plus-project-accent)}" +
208
210
  ":root.dark [data-codex-plus-project-color],:root.electron-dark [data-codex-plus-project-color]{border-left-color:var(--codex-plus-project-border-dark)}" +
@@ -182,16 +182,30 @@
182
182
  return true;
183
183
  }
184
184
 
185
+ function elementRect(element) {
186
+ const rect = element?.getBoundingClientRect?.();
187
+ return rect && rect.width > 0 && rect.height > 0 ? rect : null;
188
+ }
189
+
190
+ function visibleTriggerTarget(trigger) {
191
+ const rect = elementRect(trigger);
192
+ if (rect) return { element: trigger, rect };
193
+
194
+ const child = trigger?.querySelector?.("button,[role='button'],[tabindex]");
195
+ const childRect = elementRect(child);
196
+ return childRect ? { element: child, rect: childRect } : null;
197
+ }
198
+
185
199
  function visibleTriggerCandidates() {
186
- return Array.from(document.querySelectorAll(triggerSelector)).filter((trigger) => {
200
+ return Array.from(document.querySelectorAll(triggerSelector)).map((trigger) => {
187
201
  if (!(trigger instanceof HTMLElement)) return false;
188
202
  if (trigger.disabled || trigger.getAttribute("aria-disabled") === "true") return false;
189
- const rect = trigger.getBoundingClientRect?.();
190
- return rect && rect.width > 0 && rect.height > 0;
191
- });
203
+ const target = visibleTriggerTarget(trigger);
204
+ return target ? { trigger, target } : false;
205
+ }).filter(Boolean);
192
206
  }
193
207
 
194
- function triggerPriority(trigger) {
208
+ function triggerPriority({ trigger }) {
195
209
  const variant = trigger.getAttribute("data-codex-plus-project-selector-variant");
196
210
  if (variant === "default") return 0;
197
211
  if (variant == null || variant === "") return 1;
@@ -199,20 +213,21 @@
199
213
  }
200
214
 
201
215
  function projectSelectorTrigger() {
202
- const [trigger] = visibleTriggerCandidates().sort((left, right) => {
216
+ const [candidate] = visibleTriggerCandidates().sort((left, right) => {
203
217
  const priority = triggerPriority(left) - triggerPriority(right);
204
218
  if (priority !== 0) return priority;
205
- const leftRect = left.getBoundingClientRect();
206
- const rightRect = right.getBoundingClientRect();
219
+ const leftRect = left.target.rect;
220
+ const rightRect = right.target.rect;
207
221
  return rightRect.top - leftRect.top || rightRect.left - leftRect.left;
208
222
  });
209
- return trigger ?? null;
223
+ return candidate ?? null;
210
224
  }
211
225
 
212
226
  function focusProjectSelector() {
213
- const trigger = projectSelectorTrigger();
214
- if (trigger == null) return false;
215
- trigger.focus?.();
227
+ const candidate = projectSelectorTrigger();
228
+ if (candidate == null) return false;
229
+ const { trigger, target } = candidate;
230
+ target.element.focus?.();
216
231
  const dispatched = [
217
232
  dispatchMouseEvent(trigger, "pointerdown"),
218
233
  dispatchMouseEvent(trigger, "mousedown"),
@@ -95,9 +95,13 @@
95
95
  styles:
96
96
  ':root:not(.dark):not(.electron-dark) :is([data-codex-plus-user-bubble],[data-codex-plus-user-entry]){background-color:var(--codex-plus-user-bubble-light-bg);color:var(--codex-plus-user-bubble-light-fg)}' +
97
97
  ':root:not(.dark):not(.electron-dark) [data-codex-plus-user-entry] :is(.ProseMirror,.ProseMirror *,textarea,[contenteditable="true"],[data-placeholder]),:root:not(.dark):not(.electron-dark) [data-codex-plus-user-entry] :is(button:not([class*="bg-token-foreground"]),[role="button"]:not([class*="bg-token-foreground"]),button:not([class*="bg-token-foreground"]) svg,[role="button"]:not([class*="bg-token-foreground"]) svg,[class*="text-token-foreground"],[class*="text-token-description-foreground"],[class*="text-token-input-placeholder-foreground"],[class*="text-token-text-link-foreground"],[class*="text-token-editor-warning-foreground"]){color:var(--codex-plus-user-bubble-light-fg)}' +
98
+ ':root:not(.dark):not(.electron-dark) [data-codex-plus-user-entry] :is(button[aria-disabled="true"],button[class*="opacity-25"],[role="button"][aria-disabled="true"],[role="button"][class*="opacity-25"]){opacity:1!important;color:var(--codex-plus-user-bubble-light-fg)!important;-webkit-text-fill-color:currentColor!important}' +
99
+ ':root:not(.dark):not(.electron-dark) [data-codex-plus-user-entry] :is(button[aria-disabled="true"],button[class*="opacity-25"],[role="button"][aria-disabled="true"],[role="button"][class*="opacity-25"]) *{animation:none!important;background-image:none!important;color:inherit!important;stroke:currentColor!important;-webkit-text-fill-color:currentColor!important}' +
98
100
  ':root:not(.dark):not(.electron-dark) [data-codex-plus-user-entry] :is([data-placeholder],[class*="text-token-input-placeholder-foreground"])::before,:root:not(.dark):not(.electron-dark) [data-codex-plus-user-entry] :is([data-placeholder],[class*="text-token-input-placeholder-foreground"])::after,:root:not(.dark):not(.electron-dark) [data-codex-plus-user-entry] :is(input,textarea,[contenteditable="true"],[class*="placeholder:text-token-input-placeholder-foreground"])::placeholder{color:var(--codex-plus-user-bubble-light-fg)}' +
99
101
  ':root.dark :is([data-codex-plus-user-bubble],[data-codex-plus-user-entry]),:root.electron-dark :is([data-codex-plus-user-bubble],[data-codex-plus-user-entry]){background-color:var(--codex-plus-user-bubble-dark-bg);color:var(--codex-plus-user-bubble-dark-fg)}' +
100
102
  ':root.dark [data-codex-plus-user-entry] :is(.ProseMirror,.ProseMirror *,textarea,[contenteditable="true"],[data-placeholder]),:root.electron-dark [data-codex-plus-user-entry] :is(.ProseMirror,.ProseMirror *,textarea,[contenteditable="true"],[data-placeholder]),:root.dark [data-codex-plus-user-entry] :is(button:not([class*="bg-token-foreground"]),[role="button"]:not([class*="bg-token-foreground"]),button:not([class*="bg-token-foreground"]) svg,[role="button"]:not([class*="bg-token-foreground"]) svg,[class*="text-token-foreground"],[class*="text-token-description-foreground"],[class*="text-token-input-placeholder-foreground"],[class*="text-token-text-link-foreground"],[class*="text-token-editor-warning-foreground"]),:root.electron-dark [data-codex-plus-user-entry] :is(button:not([class*="bg-token-foreground"]),[role="button"]:not([class*="bg-token-foreground"]),button:not([class*="bg-token-foreground"]) svg,[role="button"]:not([class*="bg-token-foreground"]) svg,[class*="text-token-foreground"],[class*="text-token-description-foreground"],[class*="text-token-input-placeholder-foreground"],[class*="text-token-text-link-foreground"],[class*="text-token-editor-warning-foreground"]){color:var(--codex-plus-user-bubble-dark-fg)}' +
103
+ ':root.dark [data-codex-plus-user-entry] :is(button[aria-disabled="true"],button[class*="opacity-25"],[role="button"][aria-disabled="true"],[role="button"][class*="opacity-25"]),:root.electron-dark [data-codex-plus-user-entry] :is(button[aria-disabled="true"],button[class*="opacity-25"],[role="button"][aria-disabled="true"],[role="button"][class*="opacity-25"]){opacity:1!important;color:var(--codex-plus-user-bubble-dark-fg)!important;-webkit-text-fill-color:currentColor!important}' +
104
+ ':root.dark [data-codex-plus-user-entry] :is(button[aria-disabled="true"],button[class*="opacity-25"],[role="button"][aria-disabled="true"],[role="button"][class*="opacity-25"]) *,:root.electron-dark [data-codex-plus-user-entry] :is(button[aria-disabled="true"],button[class*="opacity-25"],[role="button"][aria-disabled="true"],[role="button"][class*="opacity-25"]) *{animation:none!important;background-image:none!important;color:inherit!important;stroke:currentColor!important;-webkit-text-fill-color:currentColor!important}' +
101
105
  ':root.dark [data-codex-plus-user-entry] :is([data-placeholder],[class*="text-token-input-placeholder-foreground"])::before,:root.dark [data-codex-plus-user-entry] :is([data-placeholder],[class*="text-token-input-placeholder-foreground"])::after,:root.dark [data-codex-plus-user-entry] :is(input,textarea,[contenteditable="true"],[class*="placeholder:text-token-input-placeholder-foreground"])::placeholder,:root.electron-dark [data-codex-plus-user-entry] :is([data-placeholder],[class*="text-token-input-placeholder-foreground"])::before,:root.electron-dark [data-codex-plus-user-entry] :is([data-placeholder],[class*="text-token-input-placeholder-foreground"])::after,:root.electron-dark [data-codex-plus-user-entry] :is(input,textarea,[contenteditable="true"],[class*="placeholder:text-token-input-placeholder-foreground"])::placeholder{color:var(--codex-plus-user-bubble-dark-fg)}',
102
106
  exports: {
103
107
  defaultColor,