@sigx/zero-daisyui 0.2.0-beta.4 → 0.2.0-beta.5

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/dist/report.json CHANGED
@@ -8498,11 +8498,6 @@
8498
8498
  "what": "selectors[\"&[data-required]::after\"]",
8499
8499
  "detail": "not expressible in the class grammar — dropped; supply a lynx replacement in the recipe target section"
8500
8500
  },
8501
- {
8502
- "where": "lynx recipe for \"checkbox\".\"control\"",
8503
- "what": "border: var(--border) solid var(--checkbox-accent, color-mix(in oklab, var(--color-base-content) 20%, #0000))",
8504
- "detail": "a color function over --border cannot bake — only the theme's --color-* vocabulary has a literal per theme, and a recipe-local property's value depends on which compound matched; dropped, supply a lynx replacement in the recipe target section"
8505
- },
8506
8501
  {
8507
8502
  "where": "lynx recipe for \"checkbox\".\"indicator\"",
8508
8503
  "what": "at[\"forced-colors\"]",
@@ -8518,11 +8513,6 @@
8518
8513
  "what": "selectors[\"&[data-invalid] [data-part=\"item-control\"]\"]",
8519
8514
  "detail": "not expressible in the class grammar — dropped; supply a lynx replacement in the recipe target section"
8520
8515
  },
8521
- {
8522
- "where": "lynx recipe for \"radio-group\".\"item-control\"",
8523
- "what": "border: var(--border) solid var(--radio-accent, color-mix(in srgb, currentColor 20%, #0000))",
8524
- "detail": "a color function over currentColor cannot be evaluated at compile time on any target — dropped; supply a lynx replacement in the recipe target section"
8525
- },
8526
8516
  {
8527
8517
  "where": "lynx recipe for \"progress\".\"range\"",
8528
8518
  "what": "at[\"reduced-motion\"]",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sigx/zero-daisyui",
3
- "version": "0.2.0-beta.4",
3
+ "version": "0.2.0-beta.5",
4
4
  "description": "DaisyUI-flavored design system for SignalX Zero — daisy's token values and component look as a pure tokens+recipes skin over @sigx/zero primitives. No Tailwind, no daisyUI plugin required.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -44,12 +44,12 @@
44
44
  "url": "https://github.com/andtii/zero-wip/issues"
45
45
  },
46
46
  "peerDependencies": {
47
- "@sigx/zero": "^0.2.0-beta.4"
47
+ "@sigx/zero": "^0.2.0-beta.5"
48
48
  },
49
49
  "devDependencies": {
50
50
  "typescript": "^6.0.3",
51
- "@sigx/zero": "^0.2.0-beta.4",
52
- "@sigx/zero-kit": "^0.2.0-beta.4"
51
+ "@sigx/zero": "^0.2.0-beta.5",
52
+ "@sigx/zero-kit": "^0.2.0-beta.5"
53
53
  },
54
54
  "publishConfig": {
55
55
  "access": "public"
package/src/recipes.ts CHANGED
@@ -463,18 +463,35 @@ export const tabs: RecipeInput = {
463
463
  defaultVariants: { size: 'md', variant: 'border' },
464
464
  targets: {
465
465
  lynx: {
466
+ parts: {
467
+ // The default active ink — base-content, exactly what the
468
+ // shared `states.active.color` paints. One class, so any
469
+ // color-axis definition below (host + two classes, baked per
470
+ // theme) wins on specificity.
471
+ tab: { base: { '--tab-active-ink': 'var(--color-base-content)' } },
472
+ },
466
473
  variants: {
474
+ // `currentColor` never resolves on lynx (measured on device
475
+ // on both platforms, signalxjs/lynx#1079 — the underline was
476
+ // transparent everywhere), so the color axis restates its
477
+ // active ink as a plain custom property. `roleInk` reads
478
+ // theme colors through color-mix(), which the emitter bakes
479
+ // once per theme — the same per-color/per-theme literal the
480
+ // active `color:` rules already land as.
481
+ color: Object.fromEntries(
482
+ ROLES.map((c) => [c, { tab: { base: { '--tab-active-ink': roleInk(c) } } }]),
483
+ ),
467
484
  variant: {
468
485
  // The underline is a ::before on the web, which lynx
469
486
  // drops — redrawn as a real bottom border on the tab
470
487
  // itself (transparent at rest so activation never moves
471
- // the row). `currentColor` keeps it following the color
472
- // axis ink, the same mechanism switch's shared border
473
- // already relies on for lynx.
488
+ // the row). The active ink rides `--tab-active-ink`
489
+ // above — a plain var() chain, device-proven — instead
490
+ // of `currentColor`, which lynx never resolves.
474
491
  border: {
475
492
  tab: {
476
493
  base: { borderBottom: '3px solid transparent' },
477
- states: { active: { borderBottomColor: 'currentColor' } },
494
+ states: { active: { borderBottomColor: 'var(--tab-active-ink)' } },
478
495
  },
479
496
  },
480
497
  // `min()` does not exist on lynx (signalxjs/lynx#1066) and
@@ -1475,6 +1492,29 @@ export const checkbox: RecipeInput = {
1475
1492
  // control and its text. Declared rather than left implicit so the
1476
1493
  // delegation reads as a decision.
1477
1494
  skipStates: { root: ['focus-visible'] },
1495
+ // `currentColor` never resolves on lynx (measured on device on both
1496
+ // platforms, signalxjs/lynx#1079), so the tick shipped invisible and the
1497
+ // ring's color-mix-over-currentColor fallback dropped the whole border.
1498
+ // Both restated with the named accents the web spellings resolve to —
1499
+ // plain var() chains, the switch's device-proven #380 mechanism.
1500
+ targets: {
1501
+ lynx: {
1502
+ parts: {
1503
+ control: {
1504
+ // The web fallback (`color-mix(in oklab, … currentColor …)`)
1505
+ // exists for consumers that unset the accent; this package
1506
+ // always defines it, so the plain accent IS the ring.
1507
+ base: { border: 'var(--border) solid var(--checkbox-accent)' },
1508
+ },
1509
+ indicator: {
1510
+ // The tick's fill: the control's `color:` names
1511
+ // `--checkbox-on-accent`, and `currentColor` was that
1512
+ // ink by inheritance — spend it directly.
1513
+ base: { backgroundColor: 'var(--checkbox-on-accent)' },
1514
+ },
1515
+ },
1516
+ },
1517
+ },
1478
1518
  };
1479
1519
 
1480
1520
  // --------------------------------------------------------------------------
@@ -1592,6 +1632,25 @@ export const radioGroup: RecipeInput = {
1592
1632
  // wraps it. Declared rather than left implicit so the delegation reads
1593
1633
  // as a decision.
1594
1634
  skipStates: { item: ['focus-visible'] },
1635
+ // `currentColor` never resolves on lynx (measured on device on both
1636
+ // platforms, signalxjs/lynx#1079), so the checked ring and dot shipped
1637
+ // invisible, and the unchecked ring's color-mix-over-currentColor
1638
+ // fallback dropped the whole border. All three restated with the accent
1639
+ // the control's own `color:` names — plain var() chains, the switch's
1640
+ // device-proven #380 mechanism.
1641
+ targets: {
1642
+ lynx: {
1643
+ parts: {
1644
+ 'item-control': {
1645
+ base: { border: 'var(--border) solid var(--radio-accent)' },
1646
+ states: { checked: { borderColor: 'var(--radio-accent)' } },
1647
+ },
1648
+ 'item-indicator': {
1649
+ states: { checked: { backgroundColor: 'var(--radio-accent)' } },
1650
+ },
1651
+ },
1652
+ },
1653
+ },
1595
1654
  };
1596
1655
 
1597
1656
  // --------------------------------------------------------------------------