@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.
@@ -9,13 +9,13 @@ import {
9
9
  subscribeDynamicTokens,
10
10
  subscribeGlobalDarkMode,
11
11
  toggleGlobalDarkMode
12
- } from "./chunk-TS2EEVOE.mjs";
12
+ } from "./chunk-JENWPIJT.mjs";
13
13
  import {
14
14
  defaultTheme,
15
15
  getTheme,
16
16
  resolveClassName,
17
17
  setTheme
18
- } from "./chunk-AG7ZQ2K4.mjs";
18
+ } from "./chunk-TBDAJIR3.mjs";
19
19
 
20
20
  // src/config.ts
21
21
  function parseHexRgb(hex) {
@@ -729,6 +729,27 @@ function resolveNegatableLength(theme, parsed) {
729
729
  if (px === 0) return "0px";
730
730
  return `-${px}px`;
731
731
  }
732
+ function fractionPercent(value) {
733
+ const slashIdx = value.indexOf("/");
734
+ if (slashIdx === -1) return null;
735
+ const numStr = value.slice(0, slashIdx);
736
+ const denStr = value.slice(slashIdx + 1);
737
+ const num = Number(numStr);
738
+ const den = Number(denStr);
739
+ if (!Number.isFinite(num) || !Number.isFinite(den) || numStr.trim() === "" || denStr.trim() === "") return null;
740
+ if (den === 0) return null;
741
+ const pct = num / den * 100;
742
+ const formatted = pct.toFixed(6);
743
+ const trimmed = formatted.replace(/0+$/, "").replace(/\.$/, "");
744
+ return `${trimmed}%`;
745
+ }
746
+ function resolveNegatableSize(theme, parsed) {
747
+ if (!parsed.isArbitrary && parsed.value !== null) {
748
+ const pct = fractionPercent(parsed.value);
749
+ if (pct !== null) return parsed.negative ? `-${pct}` : pct;
750
+ }
751
+ return resolveNegatableLength(theme, parsed);
752
+ }
732
753
  function resolvePercent(parsed) {
733
754
  if (parsed.negative) return null;
734
755
  const value = parsed.value;
@@ -882,43 +903,44 @@ function resolve(parsed, theme) {
882
903
  case "shrink":
883
904
  return [decl("flex-shrink", parsed.value ?? "1")];
884
905
  // top/right/bottom/left/inset support real Tailwind's negative-value
885
- // convention ("-top-4") — see resolveNegatableLength's own doc comment.
906
+ // convention ("-top-4") AND its percentage-fraction scale ("top-1/2",
907
+ // "-inset-1/3") — see resolveNegatableSize's own doc comment.
886
908
  case "top": {
887
- const v = resolveNegatableLength(theme, parsed);
909
+ const v = resolveNegatableSize(theme, parsed);
888
910
  return v === null ? null : [decl("top", v)];
889
911
  }
890
912
  case "right": {
891
- const v = resolveNegatableLength(theme, parsed);
913
+ const v = resolveNegatableSize(theme, parsed);
892
914
  return v === null ? null : [decl("right", v)];
893
915
  }
894
916
  case "bottom": {
895
- const v = resolveNegatableLength(theme, parsed);
917
+ const v = resolveNegatableSize(theme, parsed);
896
918
  return v === null ? null : [decl("bottom", v)];
897
919
  }
898
920
  case "left": {
899
- const v = resolveNegatableLength(theme, parsed);
921
+ const v = resolveNegatableSize(theme, parsed);
900
922
  return v === null ? null : [decl("left", v)];
901
923
  }
902
924
  case "inset": {
903
- const v = resolveNegatableLength(theme, parsed);
925
+ const v = resolveNegatableSize(theme, parsed);
904
926
  return v === null ? null : [decl("inset", v)];
905
927
  }
906
928
  case "inset-x": {
907
- const v = resolveNegatableLength(theme, parsed);
929
+ const v = resolveNegatableSize(theme, parsed);
908
930
  return v === null ? null : [decl("left", v), decl("right", v)];
909
931
  }
910
932
  case "inset-y": {
911
- const v = resolveNegatableLength(theme, parsed);
933
+ const v = resolveNegatableSize(theme, parsed);
912
934
  return v === null ? null : [decl("top", v), decl("bottom", v)];
913
935
  }
914
936
  // Logical inset — just a different CSS property name, same reasoning
915
937
  // as Rust's layout.rs (no direction-tracking logic needed here).
916
938
  case "start": {
917
- const v = resolveNegatableLength(theme, parsed);
939
+ const v = resolveNegatableSize(theme, parsed);
918
940
  return v === null ? null : [decl("inset-inline-start", v)];
919
941
  }
920
942
  case "end": {
921
- const v = resolveNegatableLength(theme, parsed);
943
+ const v = resolveNegatableSize(theme, parsed);
922
944
  return v === null ? null : [decl("inset-inline-end", v)];
923
945
  }
924
946
  // "aspect-" is a registered VALUE_PREFIXES entry (parser.ts), so
@@ -1016,20 +1038,6 @@ function namedSize(key) {
1016
1038
  return null;
1017
1039
  }
1018
1040
  }
1019
- function fractionPercent(value) {
1020
- const slashIdx = value.indexOf("/");
1021
- if (slashIdx === -1) return null;
1022
- const numStr = value.slice(0, slashIdx);
1023
- const denStr = value.slice(slashIdx + 1);
1024
- const num = Number(numStr);
1025
- const den = Number(denStr);
1026
- if (!Number.isFinite(num) || !Number.isFinite(den) || numStr.trim() === "" || denStr.trim() === "") return null;
1027
- if (den === 0) return null;
1028
- const pct = num / den * 100;
1029
- const formatted = pct.toFixed(6);
1030
- const trimmed = formatted.replace(/0+$/, "").replace(/\.$/, "");
1031
- return `${trimmed}%`;
1032
- }
1033
1041
  function cssSizeKeyword(key) {
1034
1042
  switch (key) {
1035
1043
  case "min":