@burdenoff/fe-libs 2026.930.3 → 2026.930.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.
@@ -12,7 +12,7 @@ function n({ filters: n }) {
12
12
  }), /* @__PURE__ */ t("select", {
13
13
  value: n.sortBy,
14
14
  onChange: (e) => n.setSortBy(e.target.value),
15
- className: "flex-1 h-7 text-xs rounded-input border border-border-subtle bg-bg-surface text-text-primary px-2 outline-none focus:border-border-strong transition-colors",
15
+ className: "flex-1 h-7 text-xs rounded-input border border-border-subtle bg-bg-surface text-text-primary px-2 outline-none focus:border-border-strong scheme-normal dark:scheme-dark transition-colors [&_option]:bg-bg-surface [&_option]:text-text-primary",
16
16
  children: [
17
17
  /* @__PURE__ */ e("option", {
18
18
  value: "SCORE_DESC",
@@ -207,7 +207,7 @@ function n({ filters: n }) {
207
207
  "aria-label": "Metadata operator filter",
208
208
  value: n.metadataOperator,
209
209
  onChange: (e) => n.setMetadataOperator(e.target.value),
210
- className: "h-7 text-xs rounded-input border border-border-subtle bg-bg-surface text-text-primary px-2 outline-none focus:border-border-strong transition-colors",
210
+ className: "h-7 text-xs rounded-input border border-border-subtle bg-bg-surface text-text-primary px-2 outline-none focus:border-border-strong scheme-normal dark:scheme-dark transition-colors [&_option]:bg-bg-surface [&_option]:text-text-primary",
211
211
  children: [
212
212
  /* @__PURE__ */ e("option", {
213
213
  value: "EQUALS",
@@ -24,7 +24,7 @@ var a = ({ filterTab: a, typeFilter: o, appFilter: s, sortBy: c, appNames: l, on
24
24
  }, e.value)), /* @__PURE__ */ i("select", {
25
25
  value: c,
26
26
  onChange: (e) => p(e.target.value),
27
- className: "ml-auto text-[11px] text-text-secondary bg-transparent border-none cursor-pointer focus:outline-none",
27
+ className: "ml-auto text-[11px] text-text-secondary bg-transparent border-none cursor-pointer scheme-normal dark:scheme-dark focus:outline-none [&_option]:bg-bg-surface [&_option]:text-text-primary",
28
28
  "aria-label": "Sort notifications",
29
29
  children: [
30
30
  /* @__PURE__ */ r("option", {
@@ -22,7 +22,7 @@ var i = ({ method: i }) => i ? /* @__PURE__ */ r(t, { children: [i.description &
22
22
  value: u ? u.key : "",
23
23
  onChange: (e) => a(e.target.value),
24
24
  disabled: o,
25
- className: c ? "max-w-[16rem] truncate rounded-md border border-border-subtle bg-bg-surface px-2.5 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary disabled:opacity-50" : "w-full px-3 py-2 border border-border-subtle rounded-md bg-bg-surface text-sm focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary disabled:opacity-50",
25
+ className: c ? "max-w-[16rem] truncate rounded-md border border-border-subtle bg-bg-surface px-2.5 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary disabled:opacity-50 scheme-normal dark:scheme-dark [&_option]:bg-bg-surface [&_option]:text-text-primary" : "w-full px-3 py-2 border border-border-subtle rounded-md bg-bg-surface text-sm focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary disabled:opacity-50 scheme-normal dark:scheme-dark [&_option]:bg-bg-surface [&_option]:text-text-primary",
26
26
  children: [!u && /* @__PURE__ */ n("option", {
27
27
  value: "",
28
28
  disabled: !0,
@@ -130,7 +130,7 @@ var f = typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("-
130
130
  value: String(u ?? c.default ?? ""),
131
131
  onChange: (e) => m(e.target.value),
132
132
  disabled: p,
133
- className: C,
133
+ className: `${C} scheme-normal dark:scheme-dark [&_option]:bg-bg-surface [&_option]:text-text-primary`,
134
134
  children: [/* @__PURE__ */ a("option", {
135
135
  value: "",
136
136
  children: ["Select ", y.toLowerCase()]
@@ -39,7 +39,7 @@ var l = "__match__", u = () => {
39
39
  let t = e.target.value;
40
40
  p(t === "" ? null : t);
41
41
  },
42
- className: "absolute inset-0 cursor-pointer opacity-0",
42
+ className: "absolute inset-0 cursor-pointer opacity-0 scheme-normal dark:scheme-dark [&_option]:bg-bg-surface [&_option]:text-text-primary",
43
43
  children: [/* @__PURE__ */ s("option", {
44
44
  value: "",
45
45
  children: u("voice.languageFollowApp", "Same as interface")
@@ -69,7 +69,7 @@ var l = "__match__", u = () => {
69
69
  let t = e.target.value;
70
70
  h(t === l ? null : t);
71
71
  },
72
- className: "absolute inset-0 cursor-pointer opacity-0",
72
+ className: "absolute inset-0 cursor-pointer opacity-0 scheme-normal dark:scheme-dark [&_option]:bg-bg-surface [&_option]:text-text-primary",
73
73
  children: [/* @__PURE__ */ c("option", {
74
74
  value: l,
75
75
  children: [
@@ -37,7 +37,7 @@ var l = "__match__", u = () => {
37
37
  let t = e.target.value;
38
38
  m(t === l ? null : t);
39
39
  },
40
- className: "absolute inset-0 cursor-pointer opacity-0",
40
+ className: "absolute inset-0 cursor-pointer opacity-0 scheme-normal dark:scheme-dark [&_option]:bg-bg-surface [&_option]:text-text-primary",
41
41
  children: [/* @__PURE__ */ c("option", {
42
42
  value: l,
43
43
  children: [
@@ -26,7 +26,7 @@ var a = ({ current: a, selected: s, onChange: c, disabled: l = !1 }) => {
26
26
  let t = e.target.value;
27
27
  c(t === "__app__" ? null : t);
28
28
  },
29
- className: "absolute inset-0 cursor-pointer opacity-0 disabled:cursor-not-allowed",
29
+ className: "absolute inset-0 cursor-pointer opacity-0 scheme-normal dark:scheme-dark disabled:cursor-not-allowed [&_option]:bg-bg-surface [&_option]:text-text-primary",
30
30
  children: [/* @__PURE__ */ r("option", {
31
31
  value: o,
32
32
  children: u("voice.languageFollowApp", "Same as interface")
@@ -22,7 +22,7 @@ var a = ({ disabled: a = !1 }) => {
22
22
  let t = e.target.value;
23
23
  d(t === "__auto__" ? null : t);
24
24
  },
25
- className: "absolute inset-0 cursor-pointer opacity-0 disabled:cursor-not-allowed",
25
+ className: "absolute inset-0 cursor-pointer opacity-0 scheme-normal dark:scheme-dark disabled:cursor-not-allowed [&_option]:bg-bg-surface [&_option]:text-text-primary",
26
26
  children: [/* @__PURE__ */ r("option", {
27
27
  value: o,
28
28
  children: l ? `${s("voice.voiceAuto", "Best available")} (${l})` : s("voice.voiceAuto", "Best available")
@@ -281,7 +281,7 @@ function i({ entityTypeOptions: i, selectedTypes: a, excludedTypes: o, available
281
281
  "aria-label": `Metadata operator ${i + 1}`,
282
282
  value: e.operator,
283
283
  onChange: (e) => U(i, { operator: e.target.value }),
284
- className: "h-9 px-3 text-sm rounded-md border border-border-default bg-bg-canvas text-text-primary focus:outline-none focus:ring-2 focus:ring-primary-default",
284
+ className: "h-9 px-3 text-sm rounded-md border border-border-default bg-bg-canvas text-text-primary scheme-normal dark:scheme-dark focus:outline-none focus:ring-2 focus:ring-primary-default [&_option]:bg-bg-surface [&_option]:text-text-primary",
285
285
  children: [
286
286
  /* @__PURE__ */ n("option", {
287
287
  value: "EQUALS",
@@ -25,7 +25,7 @@ function c({ searchMode: c, sortBy: l, showFilters: u, activeFilterCount: d, onS
25
25
  children: [/* @__PURE__ */ o(n, { className: "size-4 text-text-tertiary" }), /* @__PURE__ */ o("select", {
26
26
  value: l,
27
27
  onChange: (e) => p(e.target.value),
28
- className: "h-9 px-3 text-sm rounded-md border border-border-default bg-bg-surface text-text-primary focus:outline-none focus:ring-2 focus:ring-primary-default",
28
+ className: "h-9 px-3 text-sm rounded-md border border-border-default bg-bg-surface text-text-primary scheme-normal dark:scheme-dark focus:outline-none focus:ring-2 focus:ring-primary-default [&_option]:bg-bg-surface [&_option]:text-text-primary",
29
29
  children: t.map((e) => /* @__PURE__ */ o("option", {
30
30
  value: e.value,
31
31
  children: e.label
@@ -189,7 +189,7 @@ var C = ({ resource: C, controller: w, open: T, onOpenChange: ae, workspaceId: E
189
189
  value: V,
190
190
  onChange: (e) => H(e.target.value),
191
191
  "data-testid": "share-user-expiry",
192
- className: "flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
192
+ className: "flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary scheme-normal dark:scheme-dark focus:outline-none focus:ring-2 focus:ring-action-primary-bg [&_option]:bg-bg-surface [&_option]:text-text-primary",
193
193
  children: b.map((e) => /* @__PURE__ */ v("option", {
194
194
  value: e.value,
195
195
  children: e.label
@@ -268,7 +268,7 @@ var C = ({ resource: C, controller: w, open: T, onOpenChange: ae, workspaceId: E
268
268
  value: q,
269
269
  onChange: (e) => oe(e.target.value),
270
270
  "data-testid": "share-link-expiry",
271
- className: "flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
271
+ className: "flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary scheme-normal dark:scheme-dark focus:outline-none focus:ring-2 focus:ring-action-primary-bg [&_option]:bg-bg-surface [&_option]:text-text-primary",
272
272
  children: b.map((e) => /* @__PURE__ */ v("option", {
273
273
  value: e.value,
274
274
  children: e.label
@@ -70,7 +70,7 @@ function c({ workspaceId: i, value: c, onChange: l, operations: u, initialParent
70
70
  onChange: (e) => {
71
71
  l(m.find((t) => t.id === e.target.value) ?? null);
72
72
  },
73
- className: "w-full rounded-md border border-border-subtle bg-bg-surface px-2 py-1.5 text-sm",
73
+ className: "w-full rounded-md border border-border-subtle bg-bg-surface text-text-primary px-2 py-1.5 text-sm scheme-normal dark:scheme-dark [&_option]:bg-bg-surface [&_option]:text-text-primary",
74
74
  "aria-label": "Folder",
75
75
  children: [/* @__PURE__ */ n("option", {
76
76
  value: "",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.930.3",
3
+ "version": "2026.930.4",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {
@@ -200,6 +200,40 @@
200
200
  --color-status-warning-subtle: var(--color-status-warning-bgSubtle);
201
201
  --color-status-info: var(--color-status-info-bg);
202
202
  --color-status-info-subtle: var(--color-status-info-bgSubtle);
203
+
204
+ /* BOFF-7280: shadcn-default token aliases.
205
+ * Many MFE components use shadcn/ui default class names
206
+ * (bg-popover, bg-background, text-muted-foreground, ring-ring, etc.)
207
+ * that are NOT defined in the Boff UI design system. Without these
208
+ * aliases, those classes resolve to undefined CSS variables, which
209
+ * renders as a transparent / browser-default panel in Dark Mode.
210
+ * Map every shadcn-default token used by microfe-* dropdowns to the
211
+ * corresponding semantic value so the rendered colors stay consistent
212
+ * with the rest of the FluidGrids UI. Pixel-level duplicates of the
213
+ * semantic tokens, no new tokens, no new Tailwind utilities. */
214
+ --color-background: var(--color-bg-surface);
215
+ --color-foreground: var(--color-text-primary);
216
+ --color-muted: var(--color-bg-sunken);
217
+ --color-muted-foreground: var(--color-text-muted);
218
+ --color-accent: var(--color-bg-accentSubtle);
219
+ --color-accent-foreground: var(--color-text-primary);
220
+ --color-card: var(--color-bg-surface);
221
+ --color-card-foreground: var(--color-text-primary);
222
+ --color-secondary: var(--color-bg-sunken);
223
+ --color-secondary-foreground: var(--color-text-primary);
224
+ --color-popover: var(--color-bg-surface);
225
+ --color-popover-foreground: var(--color-text-primary);
226
+ --color-input: var(--color-border-default);
227
+ --color-ring: var(--color-action-primary-bg);
228
+ --color-destructive: var(--color-status-error-bg);
229
+ --color-destructive-foreground: var(--color-status-error-text);
230
+ --color-primary: var(--color-action-primary-bg);
231
+ --color-primary-foreground: var(--color-action-primary-text);
232
+ --color-background-primary: var(--color-bg-canvas);
233
+ --color-background-secondary: var(--color-bg-sunken);
234
+ --color-background-tertiary: var(--color-bg-sunken);
235
+ --color-border-secondary: var(--color-border-subtle);
236
+ --color-focus-ring: var(--color-action-primary-bg);
203
237
  }
204
238
 
205
239
  /* Semantic Tokens - Dark Mode - Auto-generated */
@@ -344,6 +378,37 @@
344
378
  --color-status-warning-subtle: var(--color-status-warning-bgSubtle);
345
379
  --color-status-info: var(--color-status-info-bg);
346
380
  --color-status-info-subtle: var(--color-status-info-bgSubtle);
381
+
382
+ /* BOFF-7280: shadcn-default token aliases — DARK MODE values.
383
+ * Same set as the light-mode block above, mapped to the dark-mode
384
+ * equivalents of each semantic token. Required because the consuming
385
+ * MFEs write class names like \`bg-popover\` / \`ring-ring\` directly
386
+ * and Tailwind v4's default theme supplies those names with hard-coded
387
+ * OKLCH values that disagree with the FluidGrids palette. Pinning
388
+ * them here keeps every dropdown in the app on-brand without forcing
389
+ * MFE-by-MFE component rewrites. */
390
+ --color-background: var(--color-bg-surface);
391
+ --color-foreground: var(--color-text-primary);
392
+ --color-muted: var(--color-bg-sunken);
393
+ --color-muted-foreground: var(--color-text-muted);
394
+ --color-accent: var(--color-bg-accentSubtle);
395
+ --color-accent-foreground: var(--color-text-primary);
396
+ --color-card: var(--color-bg-surface);
397
+ --color-card-foreground: var(--color-text-primary);
398
+ --color-secondary: var(--color-bg-sunken);
399
+ --color-secondary-foreground: var(--color-text-primary);
400
+ --color-popover: var(--color-bg-elevated);
401
+ --color-popover-foreground: var(--color-text-primary);
402
+ --color-input: var(--color-border-default);
403
+ --color-ring: var(--color-action-primary-bg);
404
+ --color-destructive: var(--color-status-error-bg);
405
+ --color-destructive-foreground: var(--color-status-error-text);
406
+ --color-primary: var(--color-action-primary-bg);
407
+ --color-primary-foreground: var(--color-action-primary-text);
408
+ --color-background-primary: var(--color-bg-canvas);
409
+ --color-background-secondary: var(--color-bg-sunken);
410
+ --color-background-tertiary: var(--color-bg-sunken);
411
+ --color-border-secondary: var(--color-border-subtle);
347
412
  }
348
413
 
349
414
  /* Compact Density - Auto-generated */
@@ -376,6 +441,71 @@
376
441
  --size-controlHeight-lg: 52px;
377
442
  }
378
443
 
444
+ /* BOFF-7280: UNLAYERED shadcn-default token aliases (FINAL OVERRIDE).
445
+ *
446
+ * Declared at the TOP LEVEL (no @layer wrapper) so they win the cascade
447
+ * over BOTH Tailwind v4's built-in @layer theme defaults (e.g.
448
+ * `--color-popover: 222.2 84% 4.9%` from the shadcn palette, which
449
+ * otherwise bleeds into every microfe-* dropdown panel) AND any
450
+ * same-token aliases that landed in @layer semantic.
451
+ *
452
+ * Unlayered CSS wins any layered CSS per the CSS Cascade Level 5 spec,
453
+ * so these two blocks — one for the default :root and one for the
454
+ * dark-mode selectors — guarantee every shadcn-default class used by
455
+ * FluidGrids MFEs (microfe-rbac, microfe-files, microfe-tags,
456
+ * microfe-conversations, etc.) renders with the FluidGrids palette in
457
+ * BOTH light and dark mode. */
458
+ :root {
459
+ --color-background: var(--color-bg-surface);
460
+ --color-foreground: var(--color-text-primary);
461
+ --color-muted: var(--color-bg-sunken);
462
+ --color-muted-foreground: var(--color-text-muted);
463
+ --color-accent: var(--color-bg-accentSubtle);
464
+ --color-accent-foreground: var(--color-text-primary);
465
+ --color-card: var(--color-bg-surface);
466
+ --color-card-foreground: var(--color-text-primary);
467
+ --color-secondary: var(--color-bg-sunken);
468
+ --color-secondary-foreground: var(--color-text-primary);
469
+ --color-popover: var(--color-bg-surface);
470
+ --color-popover-foreground: var(--color-text-primary);
471
+ --color-input: var(--color-border-default);
472
+ --color-ring: var(--color-action-primary-bg);
473
+ --color-destructive: var(--color-status-error-bg);
474
+ --color-destructive-foreground: var(--color-status-error-text);
475
+ --color-primary: var(--color-action-primary-bg);
476
+ --color-primary-foreground: var(--color-action-primary-text);
477
+ --color-background-primary: var(--color-bg-canvas);
478
+ --color-background-secondary: var(--color-bg-sunken);
479
+ --color-background-tertiary: var(--color-bg-sunken);
480
+ --color-border-secondary: var(--color-border-subtle);
481
+ --color-focus-ring: var(--color-action-primary-bg);
482
+ }
483
+ [data-theme="dark"], .dark, :root.dark {
484
+ --color-background: var(--color-bg-surface);
485
+ --color-foreground: var(--color-text-primary);
486
+ --color-muted: var(--color-bg-sunken);
487
+ --color-muted-foreground: var(--color-text-muted);
488
+ --color-accent: var(--color-bg-accentSubtle);
489
+ --color-accent-foreground: var(--color-text-primary);
490
+ --color-card: var(--color-bg-elevated);
491
+ --color-card-foreground: var(--color-text-primary);
492
+ --color-secondary: var(--color-bg-sunken);
493
+ --color-secondary-foreground: var(--color-text-primary);
494
+ --color-popover: var(--color-bg-elevated);
495
+ --color-popover-foreground: var(--color-text-primary);
496
+ --color-input: var(--color-border-default);
497
+ --color-ring: var(--color-action-primary-bg);
498
+ --color-destructive: var(--color-status-error-bg);
499
+ --color-destructive-foreground: var(--color-status-error-text);
500
+ --color-primary: var(--color-action-primary-bg);
501
+ --color-primary-foreground: var(--color-action-primary-text);
502
+ --color-background-primary: var(--color-bg-canvas);
503
+ --color-background-secondary: var(--color-bg-sunken);
504
+ --color-background-tertiary: var(--color-bg-sunken);
505
+ --color-border-secondary: var(--color-border-subtle);
506
+ --color-focus-ring: var(--color-action-primary-bg);
507
+ }
508
+
379
509
  /* Large Typography Scale - Auto-generated */
380
510
  [data-typography="large"] {
381
511
  --font-size-body-sm: 16px;
@@ -397,3 +527,4 @@
397
527
  --font-size-heading-h3: 20px;
398
528
  --font-size-heading-h4: 18px;
399
529
  }
530
+