@kbach/react-native 1.0.0-beta.24 → 1.0.0-beta.25

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/index.js CHANGED
@@ -341,6 +341,27 @@ function resolveNegatableLength(theme, parsed) {
341
341
  if (px === 0) return "0px";
342
342
  return `-${px}px`;
343
343
  }
344
+ function fractionPercent(value) {
345
+ const slashIdx = value.indexOf("/");
346
+ if (slashIdx === -1) return null;
347
+ const numStr = value.slice(0, slashIdx);
348
+ const denStr = value.slice(slashIdx + 1);
349
+ const num = Number(numStr);
350
+ const den = Number(denStr);
351
+ if (!Number.isFinite(num) || !Number.isFinite(den) || numStr.trim() === "" || denStr.trim() === "") return null;
352
+ if (den === 0) return null;
353
+ const pct = num / den * 100;
354
+ const formatted = pct.toFixed(6);
355
+ const trimmed = formatted.replace(/0+$/, "").replace(/\.$/, "");
356
+ return `${trimmed}%`;
357
+ }
358
+ function resolveNegatableSize(theme, parsed) {
359
+ if (!parsed.isArbitrary && parsed.value !== null) {
360
+ const pct = fractionPercent(parsed.value);
361
+ if (pct !== null) return parsed.negative ? `-${pct}` : pct;
362
+ }
363
+ return resolveNegatableLength(theme, parsed);
364
+ }
344
365
  function resolvePercent(parsed) {
345
366
  if (parsed.negative) return null;
346
367
  const value = parsed.value;
@@ -494,43 +515,44 @@ function resolve(parsed, theme) {
494
515
  case "shrink":
495
516
  return [decl("flex-shrink", parsed.value ?? "1")];
496
517
  // top/right/bottom/left/inset support real Tailwind's negative-value
497
- // convention ("-top-4") — see resolveNegatableLength's own doc comment.
518
+ // convention ("-top-4") AND its percentage-fraction scale ("top-1/2",
519
+ // "-inset-1/3") — see resolveNegatableSize's own doc comment.
498
520
  case "top": {
499
- const v = resolveNegatableLength(theme, parsed);
521
+ const v = resolveNegatableSize(theme, parsed);
500
522
  return v === null ? null : [decl("top", v)];
501
523
  }
502
524
  case "right": {
503
- const v = resolveNegatableLength(theme, parsed);
525
+ const v = resolveNegatableSize(theme, parsed);
504
526
  return v === null ? null : [decl("right", v)];
505
527
  }
506
528
  case "bottom": {
507
- const v = resolveNegatableLength(theme, parsed);
529
+ const v = resolveNegatableSize(theme, parsed);
508
530
  return v === null ? null : [decl("bottom", v)];
509
531
  }
510
532
  case "left": {
511
- const v = resolveNegatableLength(theme, parsed);
533
+ const v = resolveNegatableSize(theme, parsed);
512
534
  return v === null ? null : [decl("left", v)];
513
535
  }
514
536
  case "inset": {
515
- const v = resolveNegatableLength(theme, parsed);
537
+ const v = resolveNegatableSize(theme, parsed);
516
538
  return v === null ? null : [decl("inset", v)];
517
539
  }
518
540
  case "inset-x": {
519
- const v = resolveNegatableLength(theme, parsed);
541
+ const v = resolveNegatableSize(theme, parsed);
520
542
  return v === null ? null : [decl("left", v), decl("right", v)];
521
543
  }
522
544
  case "inset-y": {
523
- const v = resolveNegatableLength(theme, parsed);
545
+ const v = resolveNegatableSize(theme, parsed);
524
546
  return v === null ? null : [decl("top", v), decl("bottom", v)];
525
547
  }
526
548
  // Logical inset — just a different CSS property name, same reasoning
527
549
  // as Rust's layout.rs (no direction-tracking logic needed here).
528
550
  case "start": {
529
- const v = resolveNegatableLength(theme, parsed);
551
+ const v = resolveNegatableSize(theme, parsed);
530
552
  return v === null ? null : [decl("inset-inline-start", v)];
531
553
  }
532
554
  case "end": {
533
- const v = resolveNegatableLength(theme, parsed);
555
+ const v = resolveNegatableSize(theme, parsed);
534
556
  return v === null ? null : [decl("inset-inline-end", v)];
535
557
  }
536
558
  // "aspect-" is a registered VALUE_PREFIXES entry (parser.ts), so
@@ -628,20 +650,6 @@ function namedSize(key) {
628
650
  return null;
629
651
  }
630
652
  }
631
- function fractionPercent(value) {
632
- const slashIdx = value.indexOf("/");
633
- if (slashIdx === -1) return null;
634
- const numStr = value.slice(0, slashIdx);
635
- const denStr = value.slice(slashIdx + 1);
636
- const num = Number(numStr);
637
- const den = Number(denStr);
638
- if (!Number.isFinite(num) || !Number.isFinite(den) || numStr.trim() === "" || denStr.trim() === "") return null;
639
- if (den === 0) return null;
640
- const pct = num / den * 100;
641
- const formatted = pct.toFixed(6);
642
- const trimmed = formatted.replace(/0+$/, "").replace(/\.$/, "");
643
- return `${trimmed}%`;
644
- }
645
653
  function cssSizeKeyword(key) {
646
654
  switch (key) {
647
655
  case "min":