@niibase/uniwind 1.1.4 → 1.1.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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Uniwind
3
+ Copyright (c) 2026 Uniwind
4
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  of this software and associated documentation files (the "Software"), to deal
6
6
  in the Software without restriction, including without limitation the rights
@@ -4,61 +4,80 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.generateCSSForInsets = void 0;
7
- const types = ["m", "p"];
8
- const sides = ["", "x", "y", "t", "b", "l", "r"];
7
+ const types = ["margin", "padding", "inset"];
8
+ const sides = ["inset", "x", "y", "top", "bottom", "left", "right"];
9
+ const safeAreaTypes = ["safe", "safe-or-*", "safe-offset-*"];
9
10
  const spacing = "--spacing(--value(integer))";
10
11
  const length = "--value([length])";
11
12
  const generateCSSForInsets = () => {
12
13
  let css = `@utility h-screen-safe {
13
14
  height: calc(100vh - (env(safe-area-inset-top) + env(safe-area-inset-bottom)));
14
15
  }
16
+
15
17
  `;
16
18
  const getInsetsForSide = side => {
17
19
  switch (side) {
18
- case "t":
20
+ case "top":
19
21
  return ["top"];
20
- case "b":
22
+ case "bottom":
21
23
  return ["bottom"];
22
- case "l":
24
+ case "left":
23
25
  return ["left"];
24
- case "r":
26
+ case "right":
25
27
  return ["right"];
26
28
  case "x":
27
29
  return ["left", "right"];
28
30
  case "y":
29
31
  return ["top", "bottom"];
30
- default:
32
+ case "inset":
31
33
  return ["top", "bottom", "left", "right"];
34
+ default:
35
+ side;
36
+ return [];
37
+ }
38
+ };
39
+ const getUtilityName = (typeName, side, safeAreaType) => {
40
+ if (typeName === "inset") {
41
+ return `${side}-${safeAreaType}`;
42
+ }
43
+ const sideSuffix = side === "inset" ? "" : side.at(0);
44
+ return `${typeName.at(0)}${sideSuffix}-${safeAreaType}`;
45
+ };
46
+ const getStyleProperty = (typeName, inset) => {
47
+ if (typeName === "inset") {
48
+ return inset;
49
+ }
50
+ return `${typeName}-${inset}`;
51
+ };
52
+ const getStylesForSafeAreaType = (safeAreaType, styles) => {
53
+ switch (safeAreaType) {
54
+ case "safe":
55
+ return styles;
56
+ case "safe-or-*":
57
+ return styles.flatMap(style => {
58
+ const styleWithoutSemicolon = style.replace(";", "");
59
+ return [styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`), styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`)];
60
+ });
61
+ case "safe-offset-*":
62
+ return styles.flatMap(style => {
63
+ const styleWithoutSemicolon = style.replace(";", "");
64
+ return [styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`), styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`)];
65
+ });
66
+ default:
67
+ safeAreaType;
68
+ return [];
32
69
  }
33
70
  };
34
71
  types.forEach(type => {
35
72
  sides.forEach(side => {
36
- const styleName = type === "m" ? "margin" : "padding";
37
73
  const insets = getInsetsForSide(side);
38
- const styles = insets.map(inset => `${styleName}-${inset}: env(safe-area-inset-${inset});`);
39
- const safeStyles = styles.flatMap(style => {
40
- const styleWithoutSemicolon = style.replace(";", "");
41
- return [styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`), styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`)];
42
- });
43
- const safeOffsetStyles = styles.flatMap(style => {
44
- const styleWithoutSemicolon = style.replace(";", "");
45
- return [styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`), styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`)];
74
+ const styles = insets.map(inset => `${getStyleProperty(type, inset)}: env(safe-area-inset-${inset});`);
75
+ safeAreaTypes.forEach(safeAreaType => {
76
+ const utilityName = getUtilityName(type, side, safeAreaType);
77
+ css += [`@utility ${utilityName} {`, ...getStylesForSafeAreaType(safeAreaType, styles).map(style => ` ${style}`), "}", "", ""].join("\n");
46
78
  });
47
- css += `
48
- @utility ${type}${side}-safe {
49
- ${styles.join("\n ")}
50
- }
51
-
52
- @utility ${type}${side}-safe-or-* {
53
- ${safeStyles.join("\n ")}
54
- }
55
-
56
- @utility ${type}${side}-safe-offset-* {
57
- ${safeOffsetStyles.join("\n ")}
58
- }
59
- `;
60
79
  });
61
80
  });
62
- return css.replaceAll(" ", "").trim() + "\n";
81
+ return css.slice(0, -1);
63
82
  };
64
83
  exports.generateCSSForInsets = generateCSSForInsets;
@@ -79,10 +79,8 @@ const nativeResolver = (extraComponents) => ({
79
79
  }) => {
80
80
  const resolution = resolver(context, moduleName, platform);
81
81
  const isInternal = isFromThisModule(context.originModulePath);
82
- const isReactNativeIndex = context.originModulePath.endsWith(
83
- `react-native${node_path.sep}index.js`
84
- );
85
- if (isInternal || resolution.type !== "sourceFile" || isReactNativeIndex) {
82
+ const isFromReactNative = context.originModulePath.includes(`${node_path.sep}react-native${node_path.sep}`) || context.originModulePath.includes(`${node_path.sep}@react-native${node_path.sep}`);
83
+ if (isInternal || resolution.type !== "sourceFile" || isFromReactNative) {
86
84
  return resolution;
87
85
  }
88
86
  if (moduleName === "react-native") {
@@ -71,10 +71,8 @@ const nativeResolver = (extraComponents) => ({
71
71
  }) => {
72
72
  const resolution = resolver(context, moduleName, platform);
73
73
  const isInternal = isFromThisModule(context.originModulePath);
74
- const isReactNativeIndex = context.originModulePath.endsWith(
75
- `react-native${sep}index.js`
76
- );
77
- if (isInternal || resolution.type !== "sourceFile" || isReactNativeIndex) {
74
+ const isFromReactNative = context.originModulePath.includes(`${sep}react-native${sep}`) || context.originModulePath.includes(`${sep}@react-native${sep}`);
75
+ if (isInternal || resolution.type !== "sourceFile" || isFromReactNative) {
78
76
  return resolution;
79
77
  }
80
78
  if (moduleName === "react-native") {
@@ -6,7 +6,7 @@ const common = require('../shared/uniwind.BDoX4wlN.cjs');
6
6
  const node = require('@tailwindcss/node');
7
7
  const oxide = require('@tailwindcss/oxide');
8
8
  const types = require('../shared/uniwind.BZIuaszw.cjs');
9
- const stringifyThemes = require('../shared/uniwind.DeQhDtT7.cjs');
9
+ const stringifyThemes = require('../shared/uniwind.DWS2R6_d.cjs');
10
10
  const lightningcss = require('lightningcss');
11
11
  const culori = require('culori');
12
12
 
@@ -4,7 +4,7 @@ import { p as pipe, r as roundToPrecision, i as isNumber, a as isValidJSValue, s
4
4
  import { compile } from '@tailwindcss/node';
5
5
  import { Scanner } from '@tailwindcss/oxide';
6
6
  import { P as Platform } from '../shared/uniwind.CyoRUwOj.mjs';
7
- import { L as Logger, p as processFunctions, s as stringifyThemes, b as buildDtsFile, a as buildCSS } from '../shared/uniwind.D8_HBWsJ.mjs';
7
+ import { L as Logger, p as processFunctions, s as stringifyThemes, b as buildDtsFile, a as buildCSS } from '../shared/uniwind.BiEpLI6n.mjs';
8
8
  import { transform as transform$1 } from 'lightningcss';
9
9
  import { converter, parse, formatHex, formatHex8 } from 'culori';
10
10
 
@@ -1,63 +1,88 @@
1
- const types = ["m", "p"];
2
- const sides = ["", "x", "y", "t", "b", "l", "r"];
1
+ const types = ["margin", "padding", "inset"];
2
+ const sides = ["inset", "x", "y", "top", "bottom", "left", "right"];
3
+ const safeAreaTypes = ["safe", "safe-or-*", "safe-offset-*"];
3
4
  const spacing = "--spacing(--value(integer))";
4
5
  const length = "--value([length])";
5
6
  export const generateCSSForInsets = () => {
6
7
  let css = `@utility h-screen-safe {
7
8
  height: calc(100vh - (env(safe-area-inset-top) + env(safe-area-inset-bottom)));
8
9
  }
10
+
9
11
  `;
10
12
  const getInsetsForSide = (side) => {
11
13
  switch (side) {
12
- case "t":
14
+ case "top":
13
15
  return ["top"];
14
- case "b":
16
+ case "bottom":
15
17
  return ["bottom"];
16
- case "l":
18
+ case "left":
17
19
  return ["left"];
18
- case "r":
20
+ case "right":
19
21
  return ["right"];
20
22
  case "x":
21
23
  return ["left", "right"];
22
24
  case "y":
23
25
  return ["top", "bottom"];
24
- default:
26
+ case "inset":
25
27
  return ["top", "bottom", "left", "right"];
28
+ default:
29
+ side;
30
+ return [];
31
+ }
32
+ };
33
+ const getUtilityName = (typeName, side, safeAreaType) => {
34
+ if (typeName === "inset") {
35
+ return `${side}-${safeAreaType}`;
36
+ }
37
+ const sideSuffix = side === "inset" ? "" : side.at(0);
38
+ return `${typeName.at(0)}${sideSuffix}-${safeAreaType}`;
39
+ };
40
+ const getStyleProperty = (typeName, inset) => {
41
+ if (typeName === "inset") {
42
+ return inset;
43
+ }
44
+ return `${typeName}-${inset}`;
45
+ };
46
+ const getStylesForSafeAreaType = (safeAreaType, styles) => {
47
+ switch (safeAreaType) {
48
+ case "safe":
49
+ return styles;
50
+ case "safe-or-*":
51
+ return styles.flatMap((style) => {
52
+ const styleWithoutSemicolon = style.replace(";", "");
53
+ return [
54
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`),
55
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`)
56
+ ];
57
+ });
58
+ case "safe-offset-*":
59
+ return styles.flatMap((style) => {
60
+ const styleWithoutSemicolon = style.replace(";", "");
61
+ return [
62
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`),
63
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`)
64
+ ];
65
+ });
66
+ default:
67
+ safeAreaType;
68
+ return [];
26
69
  }
27
70
  };
28
71
  types.forEach((type) => {
29
72
  sides.forEach((side) => {
30
- const styleName = type === "m" ? "margin" : "padding";
31
73
  const insets = getInsetsForSide(side);
32
- const styles = insets.map((inset) => `${styleName}-${inset}: env(safe-area-inset-${inset});`);
33
- const safeStyles = styles.flatMap((style) => {
34
- const styleWithoutSemicolon = style.replace(";", "");
35
- return [
36
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`),
37
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`)
38
- ];
39
- });
40
- const safeOffsetStyles = styles.flatMap((style) => {
41
- const styleWithoutSemicolon = style.replace(";", "");
42
- return [
43
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`),
44
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`)
45
- ];
74
+ const styles = insets.map((inset) => `${getStyleProperty(type, inset)}: env(safe-area-inset-${inset});`);
75
+ safeAreaTypes.forEach((safeAreaType) => {
76
+ const utilityName = getUtilityName(type, side, safeAreaType);
77
+ css += [
78
+ `@utility ${utilityName} {`,
79
+ ...getStylesForSafeAreaType(safeAreaType, styles).map((style) => ` ${style}`),
80
+ "}",
81
+ "",
82
+ ""
83
+ ].join("\n");
46
84
  });
47
- css += `
48
- @utility ${type}${side}-safe {
49
- ${styles.join("\n ")}
50
- }
51
-
52
- @utility ${type}${side}-safe-or-* {
53
- ${safeStyles.join("\n ")}
54
- }
55
-
56
- @utility ${type}${side}-safe-offset-* {
57
- ${safeOffsetStyles.join("\n ")}
58
- }
59
- `;
60
85
  });
61
86
  });
62
- return css.replaceAll(" ", "").trim() + "\n";
87
+ return css.slice(0, -1);
63
88
  };
@@ -76,68 +76,91 @@ const processFunctions = {
76
76
  hairlineWidth: () => ONE_PX
77
77
  };
78
78
 
79
- const types = ["m", "p"];
80
- const sides = ["", "x", "y", "t", "b", "l", "r"];
79
+ const types = ["margin", "padding", "inset"];
80
+ const sides = ["inset", "x", "y", "top", "bottom", "left", "right"];
81
+ const safeAreaTypes = ["safe", "safe-or-*", "safe-offset-*"];
81
82
  const spacing = "--spacing(--value(integer))";
82
83
  const length = "--value([length])";
83
84
  const generateCSSForInsets = () => {
84
85
  let css = `@utility h-screen-safe {
85
86
  height: calc(100vh - (env(safe-area-inset-top) + env(safe-area-inset-bottom)));
86
87
  }
88
+
87
89
  `;
88
90
  const getInsetsForSide = (side) => {
89
91
  switch (side) {
90
- case "t":
92
+ case "top":
91
93
  return ["top"];
92
- case "b":
94
+ case "bottom":
93
95
  return ["bottom"];
94
- case "l":
96
+ case "left":
95
97
  return ["left"];
96
- case "r":
98
+ case "right":
97
99
  return ["right"];
98
100
  case "x":
99
101
  return ["left", "right"];
100
102
  case "y":
101
103
  return ["top", "bottom"];
102
- default:
104
+ case "inset":
103
105
  return ["top", "bottom", "left", "right"];
106
+ default:
107
+ return [];
108
+ }
109
+ };
110
+ const getUtilityName = (typeName, side, safeAreaType) => {
111
+ if (typeName === "inset") {
112
+ return `${side}-${safeAreaType}`;
113
+ }
114
+ const sideSuffix = side === "inset" ? "" : side.at(0);
115
+ return `${typeName.at(0)}${sideSuffix}-${safeAreaType}`;
116
+ };
117
+ const getStyleProperty = (typeName, inset) => {
118
+ if (typeName === "inset") {
119
+ return inset;
120
+ }
121
+ return `${typeName}-${inset}`;
122
+ };
123
+ const getStylesForSafeAreaType = (safeAreaType, styles) => {
124
+ switch (safeAreaType) {
125
+ case "safe":
126
+ return styles;
127
+ case "safe-or-*":
128
+ return styles.flatMap((style) => {
129
+ const styleWithoutSemicolon = style.replace(";", "");
130
+ return [
131
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`),
132
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`)
133
+ ];
134
+ });
135
+ case "safe-offset-*":
136
+ return styles.flatMap((style) => {
137
+ const styleWithoutSemicolon = style.replace(";", "");
138
+ return [
139
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`),
140
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`)
141
+ ];
142
+ });
143
+ default:
144
+ return [];
104
145
  }
105
146
  };
106
147
  types.forEach((type) => {
107
148
  sides.forEach((side) => {
108
- const styleName = type === "m" ? "margin" : "padding";
109
149
  const insets = getInsetsForSide(side);
110
- const styles = insets.map((inset) => `${styleName}-${inset}: env(safe-area-inset-${inset});`);
111
- const safeStyles = styles.flatMap((style) => {
112
- const styleWithoutSemicolon = style.replace(";", "");
113
- return [
114
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`),
115
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`)
116
- ];
117
- });
118
- const safeOffsetStyles = styles.flatMap((style) => {
119
- const styleWithoutSemicolon = style.replace(";", "");
120
- return [
121
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`),
122
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`)
123
- ];
150
+ const styles = insets.map((inset) => `${getStyleProperty(type, inset)}: env(safe-area-inset-${inset});`);
151
+ safeAreaTypes.forEach((safeAreaType) => {
152
+ const utilityName = getUtilityName(type, side, safeAreaType);
153
+ css += [
154
+ `@utility ${utilityName} {`,
155
+ ...getStylesForSafeAreaType(safeAreaType, styles).map((style) => ` ${style}`),
156
+ "}",
157
+ "",
158
+ ""
159
+ ].join("\n");
124
160
  });
125
- css += `
126
- @utility ${type}${side}-safe {
127
- ${styles.join("\n ")}
128
- }
129
-
130
- @utility ${type}${side}-safe-or-* {
131
- ${safeStyles.join("\n ")}
132
- }
133
-
134
- @utility ${type}${side}-safe-offset-* {
135
- ${safeOffsetStyles.join("\n ")}
136
- }
137
- `;
138
161
  });
139
162
  });
140
- return css.replaceAll(" ", "").trim() + "\n";
163
+ return css.slice(0, -1);
141
164
  };
142
165
 
143
166
  const readFileSafe = (filePath) => {
@@ -83,68 +83,91 @@ const processFunctions = {
83
83
  hairlineWidth: () => ONE_PX
84
84
  };
85
85
 
86
- const types = ["m", "p"];
87
- const sides = ["", "x", "y", "t", "b", "l", "r"];
86
+ const types = ["margin", "padding", "inset"];
87
+ const sides = ["inset", "x", "y", "top", "bottom", "left", "right"];
88
+ const safeAreaTypes = ["safe", "safe-or-*", "safe-offset-*"];
88
89
  const spacing = "--spacing(--value(integer))";
89
90
  const length = "--value([length])";
90
91
  const generateCSSForInsets = () => {
91
92
  let css = `@utility h-screen-safe {
92
93
  height: calc(100vh - (env(safe-area-inset-top) + env(safe-area-inset-bottom)));
93
94
  }
95
+
94
96
  `;
95
97
  const getInsetsForSide = (side) => {
96
98
  switch (side) {
97
- case "t":
99
+ case "top":
98
100
  return ["top"];
99
- case "b":
101
+ case "bottom":
100
102
  return ["bottom"];
101
- case "l":
103
+ case "left":
102
104
  return ["left"];
103
- case "r":
105
+ case "right":
104
106
  return ["right"];
105
107
  case "x":
106
108
  return ["left", "right"];
107
109
  case "y":
108
110
  return ["top", "bottom"];
109
- default:
111
+ case "inset":
110
112
  return ["top", "bottom", "left", "right"];
113
+ default:
114
+ return [];
115
+ }
116
+ };
117
+ const getUtilityName = (typeName, side, safeAreaType) => {
118
+ if (typeName === "inset") {
119
+ return `${side}-${safeAreaType}`;
120
+ }
121
+ const sideSuffix = side === "inset" ? "" : side.at(0);
122
+ return `${typeName.at(0)}${sideSuffix}-${safeAreaType}`;
123
+ };
124
+ const getStyleProperty = (typeName, inset) => {
125
+ if (typeName === "inset") {
126
+ return inset;
127
+ }
128
+ return `${typeName}-${inset}`;
129
+ };
130
+ const getStylesForSafeAreaType = (safeAreaType, styles) => {
131
+ switch (safeAreaType) {
132
+ case "safe":
133
+ return styles;
134
+ case "safe-or-*":
135
+ return styles.flatMap((style) => {
136
+ const styleWithoutSemicolon = style.replace(";", "");
137
+ return [
138
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`),
139
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`)
140
+ ];
141
+ });
142
+ case "safe-offset-*":
143
+ return styles.flatMap((style) => {
144
+ const styleWithoutSemicolon = style.replace(";", "");
145
+ return [
146
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`),
147
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`)
148
+ ];
149
+ });
150
+ default:
151
+ return [];
111
152
  }
112
153
  };
113
154
  types.forEach((type) => {
114
155
  sides.forEach((side) => {
115
- const styleName = type === "m" ? "margin" : "padding";
116
156
  const insets = getInsetsForSide(side);
117
- const styles = insets.map((inset) => `${styleName}-${inset}: env(safe-area-inset-${inset});`);
118
- const safeStyles = styles.flatMap((style) => {
119
- const styleWithoutSemicolon = style.replace(";", "");
120
- return [
121
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`),
122
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`)
123
- ];
124
- });
125
- const safeOffsetStyles = styles.flatMap((style) => {
126
- const styleWithoutSemicolon = style.replace(";", "");
127
- return [
128
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`),
129
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`)
130
- ];
157
+ const styles = insets.map((inset) => `${getStyleProperty(type, inset)}: env(safe-area-inset-${inset});`);
158
+ safeAreaTypes.forEach((safeAreaType) => {
159
+ const utilityName = getUtilityName(type, side, safeAreaType);
160
+ css += [
161
+ `@utility ${utilityName} {`,
162
+ ...getStylesForSafeAreaType(safeAreaType, styles).map((style) => ` ${style}`),
163
+ "}",
164
+ "",
165
+ ""
166
+ ].join("\n");
131
167
  });
132
- css += `
133
- @utility ${type}${side}-safe {
134
- ${styles.join("\n ")}
135
- }
136
-
137
- @utility ${type}${side}-safe-or-* {
138
- ${safeStyles.join("\n ")}
139
- }
140
-
141
- @utility ${type}${side}-safe-offset-* {
142
- ${safeOffsetStyles.join("\n ")}
143
- }
144
- `;
145
168
  });
146
169
  });
147
- return css.replaceAll(" ", "").trim() + "\n";
170
+ return css.slice(0, -1);
148
171
  };
149
172
 
150
173
  const readFileSafe = (filePath) => {
@@ -3,7 +3,7 @@
3
3
  const node = require('@tailwindcss/node');
4
4
  const path = require('path');
5
5
  const common = require('../shared/uniwind.BDoX4wlN.cjs');
6
- const stringifyThemes = require('../shared/uniwind.DeQhDtT7.cjs');
6
+ const stringifyThemes = require('../shared/uniwind.DWS2R6_d.cjs');
7
7
  require('fs');
8
8
  require('lightningcss');
9
9
 
@@ -1,7 +1,7 @@
1
1
  import { normalizePath } from '@tailwindcss/node';
2
2
  import path from 'path';
3
3
  import { u as uniq, n as name } from '../shared/uniwind.DhluOugg.mjs';
4
- import { s as stringifyThemes, p as processFunctions, a as buildCSS, b as buildDtsFile } from '../shared/uniwind.D8_HBWsJ.mjs';
4
+ import { s as stringifyThemes, p as processFunctions, a as buildCSS, b as buildDtsFile } from '../shared/uniwind.BiEpLI6n.mjs';
5
5
  import 'fs';
6
6
  import 'lightningcss';
7
7
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@niibase/uniwind",
4
- "version": "1.1.4",
4
+ "version": "1.1.5",
5
5
  "description": "The fastest Tailwind bindings for React Native",
6
6
  "homepage": "https://uniwind.dev",
7
7
  "author": "Unistack",
package/readme.md CHANGED
@@ -1,4 +1,4 @@
1
- [<img alt="uniwind" src="assets/banner.png">](https://uniwind.dev/)
1
+ [<img alt="uniwind" src="https://raw.githubusercontent.com/uni-stack/uniwind/main/assets/banner.png">](https://uniwind.dev/)
2
2
 
3
3
  <div align="center">
4
4
  <p align="center">
package/src/css/insets.ts CHANGED
@@ -1,73 +1,106 @@
1
- const types = ['m', 'p'] as const
2
- const sides = ['', 'x', 'y', 't', 'b', 'l', 'r'] as const
1
+ const types = ['margin', 'padding', 'inset'] as const
2
+ const sides = ['inset', 'x', 'y', 'top', 'bottom', 'left', 'right'] as const
3
+ const safeAreaTypes = ['safe', 'safe-or-*', 'safe-offset-*'] as const
3
4
  const spacing = '--spacing(--value(integer))'
4
5
  const length = '--value([length])'
5
6
 
6
7
  type Side = (typeof sides)[number]
8
+ type TypeName = (typeof types)[number]
9
+ type SafeAreaType = (typeof safeAreaTypes)[number]
10
+ type Inset = 'top' | 'bottom' | 'left' | 'right'
7
11
 
8
12
  export const generateCSSForInsets = () => {
9
13
  let css = `@utility h-screen-safe {
10
14
  height: calc(100vh - (env(safe-area-inset-top) + env(safe-area-inset-bottom)));
11
- }\n`
15
+ }\n\n`
12
16
 
13
- const getInsetsForSide = (side: Side) => {
17
+ const getInsetsForSide = (side: Side): Array<Inset> => {
14
18
  switch (side) {
15
- case 't':
19
+ case 'top':
16
20
  return ['top']
17
- case 'b':
21
+ case 'bottom':
18
22
  return ['bottom']
19
- case 'l':
23
+ case 'left':
20
24
  return ['left']
21
- case 'r':
25
+ case 'right':
22
26
  return ['right']
23
27
  case 'x':
24
28
  return ['left', 'right']
25
29
  case 'y':
26
30
  return ['top', 'bottom']
27
- default:
31
+ case 'inset':
28
32
  return ['top', 'bottom', 'left', 'right']
33
+ default:
34
+ side satisfies never
35
+ return []
36
+ }
37
+ }
38
+
39
+ const getUtilityName = (typeName: TypeName, side: Side, safeAreaType: SafeAreaType) => {
40
+ if (typeName === 'inset') {
41
+ return `${side}-${safeAreaType}`
42
+ }
43
+
44
+ const sideSuffix = side === 'inset' ? '' : side.at(0)
45
+
46
+ return `${typeName.at(0)}${sideSuffix}-${safeAreaType}`
47
+ }
48
+
49
+ const getStyleProperty = (typeName: TypeName, inset: Inset) => {
50
+ if (typeName === 'inset') {
51
+ return inset
52
+ }
53
+
54
+ return `${typeName}-${inset}`
55
+ }
56
+
57
+ const getStylesForSafeAreaType = (safeAreaType: SafeAreaType, styles: Array<string>) => {
58
+ switch (safeAreaType) {
59
+ case 'safe':
60
+ return styles
61
+ case 'safe-or-*':
62
+ return styles.flatMap(style => {
63
+ const styleWithoutSemicolon = style.replace(';', '')
64
+
65
+ return [
66
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`),
67
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`),
68
+ ]
69
+ })
70
+ case 'safe-offset-*':
71
+ return styles.flatMap(style => {
72
+ const styleWithoutSemicolon = style.replace(';', '')
73
+
74
+ return [
75
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`),
76
+ styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`),
77
+ ]
78
+ })
79
+ default:
80
+ safeAreaType satisfies never
81
+ return []
29
82
  }
30
83
  }
31
84
 
32
85
  types.forEach(type => {
33
86
  sides.forEach(side => {
34
- const styleName = type === 'm' ? 'margin' : 'padding'
35
87
  const insets = getInsetsForSide(side)
36
- const styles = insets.map(inset => `${styleName}-${inset}: env(safe-area-inset-${inset});`)
37
- const safeStyles = styles.flatMap(style => {
38
- const styleWithoutSemicolon = style.replace(';', '')
88
+ const styles = insets.map(inset => `${getStyleProperty(type, inset)}: env(safe-area-inset-${inset});`)
39
89
 
40
- return [
41
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${spacing});`),
42
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: max(${env}, ${length});`),
43
- ]
44
- })
45
- const safeOffsetStyles = styles.flatMap(style => {
46
- const styleWithoutSemicolon = style.replace(';', '')
90
+ safeAreaTypes.forEach(safeAreaType => {
91
+ const utilityName = getUtilityName(type, side, safeAreaType)
47
92
 
48
- return [
49
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${spacing});`),
50
- styleWithoutSemicolon.replace(/: (env.*)/, (_, env) => `: calc(${env} + ${length});`),
51
- ]
93
+ css += [
94
+ `@utility ${utilityName} {`,
95
+ ...getStylesForSafeAreaType(safeAreaType, styles).map(style => ` ${style}`),
96
+ '}',
97
+ '',
98
+ '',
99
+ ].join('\n')
52
100
  })
53
-
54
- css += `
55
- @utility ${type}${side}-safe {
56
- ${styles.join('\n ')}
57
- }
58
-
59
- @utility ${type}${side}-safe-or-* {
60
- ${safeStyles.join('\n ')}
61
- }
62
-
63
- @utility ${type}${side}-safe-offset-* {
64
- ${safeOffsetStyles.join('\n ')}
65
- }
66
- `
67
101
  })
68
102
  })
69
103
 
70
- // Remove all 8 spaces groups
71
- // eslint-disable-next-line prefer-template
72
- return css.replaceAll(' ', '').trim() + '\n'
104
+ // Remove the last newline character
105
+ return css.slice(0, -1)
73
106
  }
@@ -48,11 +48,10 @@ export const nativeResolver = (extraComponents: Record<string, string>) =>
48
48
  }: ResolverConfig) => {
49
49
  const resolution = resolver(context, moduleName, platform)
50
50
  const isInternal = isFromThisModule(context.originModulePath)
51
- const isReactNativeIndex = context.originModulePath.endsWith(
52
- `react-native${sep}index.js`,
53
- )
51
+ const isFromReactNative = context.originModulePath.includes(`${sep}react-native${sep}`)
52
+ || context.originModulePath.includes(`${sep}@react-native${sep}`)
54
53
 
55
- if (isInternal || resolution.type !== 'sourceFile' || isReactNativeIndex) {
54
+ if (isInternal || resolution.type !== 'sourceFile' || isFromReactNative) {
56
55
  return resolution
57
56
  }
58
57
 
package/uniwind.css CHANGED
@@ -35,7 +35,7 @@
35
35
  margin-right: calc(env(safe-area-inset-right) + --spacing(--value(integer)));
36
36
  margin-right: calc(env(safe-area-inset-right) + --value([length]));
37
37
  }
38
-
38
+
39
39
  @utility mx-safe {
40
40
  margin-left: env(safe-area-inset-left);
41
41
  margin-right: env(safe-area-inset-right);
@@ -54,7 +54,7 @@
54
54
  margin-right: calc(env(safe-area-inset-right) + --spacing(--value(integer)));
55
55
  margin-right: calc(env(safe-area-inset-right) + --value([length]));
56
56
  }
57
-
57
+
58
58
  @utility my-safe {
59
59
  margin-top: env(safe-area-inset-top);
60
60
  margin-bottom: env(safe-area-inset-bottom);
@@ -73,7 +73,7 @@
73
73
  margin-bottom: calc(env(safe-area-inset-bottom) + --spacing(--value(integer)));
74
74
  margin-bottom: calc(env(safe-area-inset-bottom) + --value([length]));
75
75
  }
76
-
76
+
77
77
  @utility mt-safe {
78
78
  margin-top: env(safe-area-inset-top);
79
79
  }
@@ -87,7 +87,7 @@
87
87
  margin-top: calc(env(safe-area-inset-top) + --spacing(--value(integer)));
88
88
  margin-top: calc(env(safe-area-inset-top) + --value([length]));
89
89
  }
90
-
90
+
91
91
  @utility mb-safe {
92
92
  margin-bottom: env(safe-area-inset-bottom);
93
93
  }
@@ -101,7 +101,7 @@
101
101
  margin-bottom: calc(env(safe-area-inset-bottom) + --spacing(--value(integer)));
102
102
  margin-bottom: calc(env(safe-area-inset-bottom) + --value([length]));
103
103
  }
104
-
104
+
105
105
  @utility ml-safe {
106
106
  margin-left: env(safe-area-inset-left);
107
107
  }
@@ -115,7 +115,7 @@
115
115
  margin-left: calc(env(safe-area-inset-left) + --spacing(--value(integer)));
116
116
  margin-left: calc(env(safe-area-inset-left) + --value([length]));
117
117
  }
118
-
118
+
119
119
  @utility mr-safe {
120
120
  margin-right: env(safe-area-inset-right);
121
121
  }
@@ -129,7 +129,7 @@
129
129
  margin-right: calc(env(safe-area-inset-right) + --spacing(--value(integer)));
130
130
  margin-right: calc(env(safe-area-inset-right) + --value([length]));
131
131
  }
132
-
132
+
133
133
  @utility p-safe {
134
134
  padding-top: env(safe-area-inset-top);
135
135
  padding-bottom: env(safe-area-inset-bottom);
@@ -158,7 +158,7 @@
158
158
  padding-right: calc(env(safe-area-inset-right) + --spacing(--value(integer)));
159
159
  padding-right: calc(env(safe-area-inset-right) + --value([length]));
160
160
  }
161
-
161
+
162
162
  @utility px-safe {
163
163
  padding-left: env(safe-area-inset-left);
164
164
  padding-right: env(safe-area-inset-right);
@@ -177,7 +177,7 @@
177
177
  padding-right: calc(env(safe-area-inset-right) + --spacing(--value(integer)));
178
178
  padding-right: calc(env(safe-area-inset-right) + --value([length]));
179
179
  }
180
-
180
+
181
181
  @utility py-safe {
182
182
  padding-top: env(safe-area-inset-top);
183
183
  padding-bottom: env(safe-area-inset-bottom);
@@ -196,7 +196,7 @@
196
196
  padding-bottom: calc(env(safe-area-inset-bottom) + --spacing(--value(integer)));
197
197
  padding-bottom: calc(env(safe-area-inset-bottom) + --value([length]));
198
198
  }
199
-
199
+
200
200
  @utility pt-safe {
201
201
  padding-top: env(safe-area-inset-top);
202
202
  }
@@ -210,7 +210,7 @@
210
210
  padding-top: calc(env(safe-area-inset-top) + --spacing(--value(integer)));
211
211
  padding-top: calc(env(safe-area-inset-top) + --value([length]));
212
212
  }
213
-
213
+
214
214
  @utility pb-safe {
215
215
  padding-bottom: env(safe-area-inset-bottom);
216
216
  }
@@ -224,7 +224,7 @@
224
224
  padding-bottom: calc(env(safe-area-inset-bottom) + --spacing(--value(integer)));
225
225
  padding-bottom: calc(env(safe-area-inset-bottom) + --value([length]));
226
226
  }
227
-
227
+
228
228
  @utility pl-safe {
229
229
  padding-left: env(safe-area-inset-left);
230
230
  }
@@ -238,7 +238,7 @@
238
238
  padding-left: calc(env(safe-area-inset-left) + --spacing(--value(integer)));
239
239
  padding-left: calc(env(safe-area-inset-left) + --value([length]));
240
240
  }
241
-
241
+
242
242
  @utility pr-safe {
243
243
  padding-right: env(safe-area-inset-right);
244
244
  }
@@ -253,5 +253,128 @@
253
253
  padding-right: calc(env(safe-area-inset-right) + --value([length]));
254
254
  }
255
255
 
256
+ @utility inset-safe {
257
+ top: env(safe-area-inset-top);
258
+ bottom: env(safe-area-inset-bottom);
259
+ left: env(safe-area-inset-left);
260
+ right: env(safe-area-inset-right);
261
+ }
262
+
263
+ @utility inset-safe-or-* {
264
+ top: max(env(safe-area-inset-top), --spacing(--value(integer)));
265
+ top: max(env(safe-area-inset-top), --value([length]));
266
+ bottom: max(env(safe-area-inset-bottom), --spacing(--value(integer)));
267
+ bottom: max(env(safe-area-inset-bottom), --value([length]));
268
+ left: max(env(safe-area-inset-left), --spacing(--value(integer)));
269
+ left: max(env(safe-area-inset-left), --value([length]));
270
+ right: max(env(safe-area-inset-right), --spacing(--value(integer)));
271
+ right: max(env(safe-area-inset-right), --value([length]));
272
+ }
273
+
274
+ @utility inset-safe-offset-* {
275
+ top: calc(env(safe-area-inset-top) + --spacing(--value(integer)));
276
+ top: calc(env(safe-area-inset-top) + --value([length]));
277
+ bottom: calc(env(safe-area-inset-bottom) + --spacing(--value(integer)));
278
+ bottom: calc(env(safe-area-inset-bottom) + --value([length]));
279
+ left: calc(env(safe-area-inset-left) + --spacing(--value(integer)));
280
+ left: calc(env(safe-area-inset-left) + --value([length]));
281
+ right: calc(env(safe-area-inset-right) + --spacing(--value(integer)));
282
+ right: calc(env(safe-area-inset-right) + --value([length]));
283
+ }
284
+
285
+ @utility x-safe {
286
+ left: env(safe-area-inset-left);
287
+ right: env(safe-area-inset-right);
288
+ }
289
+
290
+ @utility x-safe-or-* {
291
+ left: max(env(safe-area-inset-left), --spacing(--value(integer)));
292
+ left: max(env(safe-area-inset-left), --value([length]));
293
+ right: max(env(safe-area-inset-right), --spacing(--value(integer)));
294
+ right: max(env(safe-area-inset-right), --value([length]));
295
+ }
296
+
297
+ @utility x-safe-offset-* {
298
+ left: calc(env(safe-area-inset-left) + --spacing(--value(integer)));
299
+ left: calc(env(safe-area-inset-left) + --value([length]));
300
+ right: calc(env(safe-area-inset-right) + --spacing(--value(integer)));
301
+ right: calc(env(safe-area-inset-right) + --value([length]));
302
+ }
303
+
304
+ @utility y-safe {
305
+ top: env(safe-area-inset-top);
306
+ bottom: env(safe-area-inset-bottom);
307
+ }
308
+
309
+ @utility y-safe-or-* {
310
+ top: max(env(safe-area-inset-top), --spacing(--value(integer)));
311
+ top: max(env(safe-area-inset-top), --value([length]));
312
+ bottom: max(env(safe-area-inset-bottom), --spacing(--value(integer)));
313
+ bottom: max(env(safe-area-inset-bottom), --value([length]));
314
+ }
315
+
316
+ @utility y-safe-offset-* {
317
+ top: calc(env(safe-area-inset-top) + --spacing(--value(integer)));
318
+ top: calc(env(safe-area-inset-top) + --value([length]));
319
+ bottom: calc(env(safe-area-inset-bottom) + --spacing(--value(integer)));
320
+ bottom: calc(env(safe-area-inset-bottom) + --value([length]));
321
+ }
322
+
323
+ @utility top-safe {
324
+ top: env(safe-area-inset-top);
325
+ }
326
+
327
+ @utility top-safe-or-* {
328
+ top: max(env(safe-area-inset-top), --spacing(--value(integer)));
329
+ top: max(env(safe-area-inset-top), --value([length]));
330
+ }
331
+
332
+ @utility top-safe-offset-* {
333
+ top: calc(env(safe-area-inset-top) + --spacing(--value(integer)));
334
+ top: calc(env(safe-area-inset-top) + --value([length]));
335
+ }
336
+
337
+ @utility bottom-safe {
338
+ bottom: env(safe-area-inset-bottom);
339
+ }
340
+
341
+ @utility bottom-safe-or-* {
342
+ bottom: max(env(safe-area-inset-bottom), --spacing(--value(integer)));
343
+ bottom: max(env(safe-area-inset-bottom), --value([length]));
344
+ }
345
+
346
+ @utility bottom-safe-offset-* {
347
+ bottom: calc(env(safe-area-inset-bottom) + --spacing(--value(integer)));
348
+ bottom: calc(env(safe-area-inset-bottom) + --value([length]));
349
+ }
350
+
351
+ @utility left-safe {
352
+ left: env(safe-area-inset-left);
353
+ }
354
+
355
+ @utility left-safe-or-* {
356
+ left: max(env(safe-area-inset-left), --spacing(--value(integer)));
357
+ left: max(env(safe-area-inset-left), --value([length]));
358
+ }
359
+
360
+ @utility left-safe-offset-* {
361
+ left: calc(env(safe-area-inset-left) + --spacing(--value(integer)));
362
+ left: calc(env(safe-area-inset-left) + --value([length]));
363
+ }
364
+
365
+ @utility right-safe {
366
+ right: env(safe-area-inset-right);
367
+ }
368
+
369
+ @utility right-safe-or-* {
370
+ right: max(env(safe-area-inset-right), --spacing(--value(integer)));
371
+ right: max(env(safe-area-inset-right), --value([length]));
372
+ }
373
+
374
+ @utility right-safe-offset-* {
375
+ right: calc(env(safe-area-inset-right) + --spacing(--value(integer)));
376
+ right: calc(env(safe-area-inset-right) + --value([length]));
377
+ }
378
+
256
379
  @custom-variant light (&:where(.light, .light *));
257
- @custom-variant dark (&:where(.dark, .dark *));
380
+ @custom-variant dark (&:where(.dark, .dark *));