ingeniuscliq-core 0.4.24 → 0.4.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.
Files changed (221) hide show
  1. package/dist/_virtual/index.js +5 -0
  2. package/dist/_virtual/index2.js +3 -0
  3. package/dist/_virtual/jsx-runtime.js +5 -0
  4. package/dist/_virtual/jsx-runtime2.js +3 -0
  5. package/dist/_virtual/react-jsx-runtime.development.js +3 -0
  6. package/dist/_virtual/react-jsx-runtime.production.js +3 -0
  7. package/dist/_virtual/use-sync-external-store-shim.development.js +3 -0
  8. package/dist/_virtual/use-sync-external-store-shim.production.js +3 -0
  9. package/dist/components/common/carousel/CustomCarousel.tsx +6 -6
  10. package/dist/components/common/carousel/CustomCarouselSection.tsx +12 -12
  11. package/dist/components/common/form/CustomFormField.tsx +6 -6
  12. package/dist/components/common/form/FormCheckbox.tsx +5 -5
  13. package/dist/components/common/form/FormInput.tsx +3 -3
  14. package/dist/components/common/form/FormSelect.tsx +5 -5
  15. package/dist/components/common/form/FormTextArea.tsx +3 -3
  16. package/dist/components/common/form/FormWrapper.tsx +2 -2
  17. package/dist/components/common/logo/Logo.tsx +3 -3
  18. package/dist/components/common/pagination/CustomPagination.tsx +5 -5
  19. package/dist/components/common/select/CustomSelect.tsx +4 -4
  20. package/dist/components/common/spinner/Spinner.tsx +14 -14
  21. package/dist/components/common/stepper/Stepper.tsx +9 -9
  22. package/dist/components/layouts/CoreBaseLayout.tsx +5 -5
  23. package/dist/components/templates/CoreHomeLayout.tsx +2 -2
  24. package/dist/components/templates/CorePreviewLayout.tsx +2 -2
  25. package/dist/components/ui/accordion.tsx +14 -14
  26. package/dist/components/ui/alert-dialog.tsx +27 -27
  27. package/dist/components/ui/alert.tsx +5 -5
  28. package/dist/components/ui/avatar.tsx +11 -11
  29. package/dist/components/ui/badge.tsx +3 -3
  30. package/dist/components/ui/breadcrumb.tsx +14 -13
  31. package/dist/components/ui/button.tsx +4 -4
  32. package/dist/components/ui/card.tsx +8 -8
  33. package/dist/components/ui/carousel.tsx +14 -13
  34. package/dist/components/ui/checkbox.tsx +9 -9
  35. package/dist/components/ui/dialog.tsx +26 -26
  36. package/dist/components/ui/dropdown-menu.tsx +39 -37
  37. package/dist/components/ui/form.tsx +9 -9
  38. package/dist/components/ui/input.tsx +2 -2
  39. package/dist/components/ui/label.tsx +6 -6
  40. package/dist/components/ui/pagination.tsx +17 -15
  41. package/dist/components/ui/popover.tsx +8 -8
  42. package/dist/components/ui/radio-group.tsx +10 -10
  43. package/dist/components/ui/select.tsx +40 -38
  44. package/dist/components/ui/separator.tsx +5 -5
  45. package/dist/components/ui/sheet.tsx +27 -27
  46. package/dist/components/ui/skeleton.tsx +2 -2
  47. package/dist/components/ui/slider.tsx +9 -9
  48. package/dist/components/ui/stepper.tsx +34 -34
  49. package/dist/components/ui/switch.tsx +7 -7
  50. package/dist/components/ui/table.tsx +9 -9
  51. package/dist/components/ui/tabs.tsx +13 -13
  52. package/dist/components/ui/textarea.tsx +2 -2
  53. package/dist/components/ui/tooltip.tsx +8 -8
  54. package/dist/helpers/axiosGlobal.js +2 -1
  55. package/dist/hooks/useNotification.js +1 -1
  56. package/dist/lib/utils.js +2 -2
  57. package/dist/modules/CoreAuth/classes/CoreAuthBuilder.js +1 -1
  58. package/dist/modules/CoreAuth/context/AuthContext.tsx +1 -1
  59. package/dist/modules/CoreAuth/index.js +0 -1
  60. package/dist/modules/CoreCustomization/classes/CoreCustomizationBuilder.js +1 -1
  61. package/dist/modules/CoreCustomization/index.js +0 -1
  62. package/dist/modules/CoreOrder/classes/CoreOrderBuilder.js +1 -1
  63. package/dist/modules/CoreOrder/index.js +0 -1
  64. package/dist/modules/CorePayForm/classes/CorePayFormBuilder.js +1 -1
  65. package/dist/modules/CorePayForm/index.js +0 -1
  66. package/dist/modules/CoreProduct/classes/CoreProductBuilder.js +1 -1
  67. package/dist/modules/CoreProduct/index.js +0 -1
  68. package/dist/modules/CoreShipment/classes/CoreShipmentBuilder.js +1 -1
  69. package/dist/modules/CoreShipment/index.js +0 -1
  70. package/dist/modules/CoreShopCart/classes/CoreShopCartBuilder.js +1 -1
  71. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js +814 -0
  72. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +751 -0
  73. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js +350 -0
  74. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +161 -0
  75. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +137 -0
  76. package/dist/node_modules/@radix-ui/number/dist/index.js +6 -0
  77. package/dist/node_modules/@radix-ui/primitive/dist/index.js +11 -0
  78. package/dist/node_modules/@radix-ui/react-accordion/dist/index.js +305 -0
  79. package/dist/node_modules/@radix-ui/react-alert-dialog/dist/index.js +147 -0
  80. package/dist/node_modules/@radix-ui/react-arrow/dist/index.js +25 -0
  81. package/dist/node_modules/@radix-ui/react-avatar/dist/index.js +118 -0
  82. package/dist/node_modules/@radix-ui/react-checkbox/dist/index.js +270 -0
  83. package/dist/node_modules/@radix-ui/react-collapsible/dist/index.js +145 -0
  84. package/dist/node_modules/@radix-ui/react-collection/dist/index.js +70 -0
  85. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js +39 -0
  86. package/dist/node_modules/@radix-ui/react-context/dist/index.js +79 -0
  87. package/dist/node_modules/@radix-ui/react-dialog/dist/index.js +321 -0
  88. package/dist/node_modules/@radix-ui/react-direction/dist/index.js +11 -0
  89. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +211 -0
  90. package/dist/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +267 -0
  91. package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.js +29 -0
  92. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.js +207 -0
  93. package/dist/node_modules/@radix-ui/react-id/dist/index.js +15 -0
  94. package/dist/node_modules/@radix-ui/react-label/dist/index.js +24 -0
  95. package/dist/node_modules/@radix-ui/react-menu/dist/index.js +834 -0
  96. package/dist/node_modules/@radix-ui/react-popover/dist/index.js +299 -0
  97. package/dist/node_modules/@radix-ui/react-popper/dist/index.js +283 -0
  98. package/dist/node_modules/@radix-ui/react-portal/dist/index.js +17 -0
  99. package/dist/node_modules/@radix-ui/react-presence/dist/index.js +130 -0
  100. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js +43 -0
  101. package/dist/node_modules/@radix-ui/react-radio-group/dist/index.js +282 -0
  102. package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js +223 -0
  103. package/dist/node_modules/@radix-ui/react-select/dist/index.js +1156 -0
  104. package/dist/node_modules/@radix-ui/react-separator/dist/index.js +30 -0
  105. package/dist/node_modules/@radix-ui/react-slider/dist/index.js +554 -0
  106. package/dist/node_modules/@radix-ui/react-slot/dist/index.js +99 -0
  107. package/dist/node_modules/@radix-ui/react-switch/dist/index.js +152 -0
  108. package/dist/node_modules/@radix-ui/react-tabs/dist/index.js +187 -0
  109. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.js +482 -0
  110. package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.js +12 -0
  111. package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +70 -0
  112. package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js +18 -0
  113. package/dist/node_modules/@radix-ui/react-use-is-hydrated/dist/index.js +16 -0
  114. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +7 -0
  115. package/dist/node_modules/@radix-ui/react-use-previous/dist/index.js +15 -0
  116. package/dist/node_modules/@radix-ui/react-use-size/dist/index.js +40 -0
  117. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js +35 -0
  118. package/dist/node_modules/@stepperize/core/dist/index.js +3 -0
  119. package/dist/node_modules/@stepperize/react/dist/index.js +6 -0
  120. package/dist/node_modules/aria-hidden/dist/es2015/index.js +137 -0
  121. package/dist/node_modules/axios/index.js +25 -0
  122. package/dist/node_modules/axios/lib/adapters/adapters.js +81 -0
  123. package/dist/node_modules/axios/lib/adapters/fetch.js +229 -0
  124. package/dist/node_modules/axios/lib/adapters/xhr.js +199 -0
  125. package/dist/node_modules/axios/lib/axios.js +86 -0
  126. package/dist/node_modules/axios/lib/cancel/CancelToken.js +133 -0
  127. package/dist/node_modules/axios/lib/cancel/CanceledError.js +23 -0
  128. package/dist/node_modules/axios/lib/cancel/isCancel.js +5 -0
  129. package/dist/node_modules/axios/lib/core/Axios.js +238 -0
  130. package/dist/node_modules/axios/lib/core/AxiosError.js +101 -0
  131. package/dist/node_modules/axios/lib/core/AxiosHeaders.js +312 -0
  132. package/dist/node_modules/axios/lib/core/InterceptorManager.js +69 -0
  133. package/dist/node_modules/axios/lib/core/buildFullPath.js +22 -0
  134. package/dist/node_modules/axios/lib/core/dispatchRequest.js +81 -0
  135. package/dist/node_modules/axios/lib/core/mergeConfig.js +106 -0
  136. package/dist/node_modules/axios/lib/core/settle.js +27 -0
  137. package/dist/node_modules/axios/lib/core/transformData.js +28 -0
  138. package/dist/node_modules/axios/lib/defaults/index.js +159 -0
  139. package/dist/node_modules/axios/lib/defaults/transitional.js +7 -0
  140. package/dist/node_modules/axios/lib/env/data.js +3 -0
  141. package/dist/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +56 -0
  142. package/dist/node_modules/axios/lib/helpers/HttpStatusCode.js +71 -0
  143. package/dist/node_modules/axios/lib/helpers/bind.js +7 -0
  144. package/dist/node_modules/axios/lib/helpers/buildURL.js +69 -0
  145. package/dist/node_modules/axios/lib/helpers/combineURLs.js +15 -0
  146. package/dist/node_modules/axios/lib/helpers/composeSignals.js +48 -0
  147. package/dist/node_modules/axios/lib/helpers/cookies.js +43 -0
  148. package/dist/node_modules/axios/lib/helpers/formDataToJSON.js +93 -0
  149. package/dist/node_modules/axios/lib/helpers/isAbsoluteURL.js +15 -0
  150. package/dist/node_modules/axios/lib/helpers/isAxiosError.js +14 -0
  151. package/dist/node_modules/axios/lib/helpers/isURLSameOrigin.js +16 -0
  152. package/dist/node_modules/axios/lib/helpers/null.js +4 -0
  153. package/dist/node_modules/axios/lib/helpers/parseHeaders.js +55 -0
  154. package/dist/node_modules/axios/lib/helpers/parseProtocol.js +6 -0
  155. package/dist/node_modules/axios/lib/helpers/progressEventReducer.js +46 -0
  156. package/dist/node_modules/axios/lib/helpers/resolveConfig.js +58 -0
  157. package/dist/node_modules/axios/lib/helpers/speedometer.js +53 -0
  158. package/dist/node_modules/axios/lib/helpers/spread.js +28 -0
  159. package/dist/node_modules/axios/lib/helpers/throttle.js +44 -0
  160. package/dist/node_modules/axios/lib/helpers/toFormData.js +219 -0
  161. package/dist/node_modules/axios/lib/helpers/toURLEncodedForm.js +19 -0
  162. package/dist/node_modules/axios/lib/helpers/trackStream.js +88 -0
  163. package/dist/node_modules/axios/lib/helpers/validator.js +99 -0
  164. package/dist/node_modules/axios/lib/platform/browser/classes/Blob.js +3 -0
  165. package/dist/node_modules/axios/lib/platform/browser/classes/FormData.js +3 -0
  166. package/dist/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js +5 -0
  167. package/dist/node_modules/axios/lib/platform/browser/index.js +15 -0
  168. package/dist/node_modules/axios/lib/platform/common/utils.js +45 -0
  169. package/dist/node_modules/axios/lib/platform/index.js +9 -0
  170. package/dist/node_modules/axios/lib/utils.js +780 -0
  171. package/dist/node_modules/class-variance-authority/dist/index.js +44 -0
  172. package/dist/node_modules/clsx/dist/clsx.js +3 -0
  173. package/dist/node_modules/embla-carousel/esm/embla-carousel.esm.js +1669 -0
  174. package/dist/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js +37 -0
  175. package/dist/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js +38 -0
  176. package/dist/node_modules/get-nonce/dist/es2015/index.js +8 -0
  177. package/dist/node_modules/lucide-react/dist/esm/Icon.js +43 -0
  178. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +30 -0
  179. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +20 -0
  180. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-left.js +17 -0
  181. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-right.js +17 -0
  182. package/dist/node_modules/lucide-react/dist/esm/icons/check.js +14 -0
  183. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +14 -0
  184. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.js +14 -0
  185. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js +14 -0
  186. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +14 -0
  187. package/dist/node_modules/lucide-react/dist/esm/icons/circle.js +14 -0
  188. package/dist/node_modules/lucide-react/dist/esm/icons/ellipsis.js +18 -0
  189. package/dist/node_modules/lucide-react/dist/esm/icons/x.js +17 -0
  190. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js +28 -0
  191. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js +363 -0
  192. package/dist/node_modules/react/cjs/react-jsx-runtime.production.js +44 -0
  193. package/dist/node_modules/react/jsx-runtime.js +19 -0
  194. package/dist/node_modules/react-hook-form/dist/index.esm.js +560 -0
  195. package/dist/node_modules/react-remove-scroll/dist/es2015/Combination.js +9 -0
  196. package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +167 -0
  197. package/dist/node_modules/react-remove-scroll/dist/es2015/UI.js +38 -0
  198. package/dist/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js +21 -0
  199. package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +110 -0
  200. package/dist/node_modules/react-remove-scroll/dist/es2015/medium.js +5 -0
  201. package/dist/node_modules/react-remove-scroll/dist/es2015/sidecar.js +7 -0
  202. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/component.js +56 -0
  203. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/constants.js +10 -0
  204. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/utils.js +31 -0
  205. package/dist/node_modules/react-style-singleton/dist/es2015/component.js +19 -0
  206. package/dist/node_modules/react-style-singleton/dist/es2015/hook.js +25 -0
  207. package/dist/node_modules/react-style-singleton/dist/es2015/singleton.js +51 -0
  208. package/dist/node_modules/sonner/dist/index.js +299 -0
  209. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +3035 -0
  210. package/dist/node_modules/tslib/tslib.es6.js +56 -0
  211. package/dist/node_modules/use-callback-ref/dist/es2015/assignRef.js +24 -0
  212. package/dist/node_modules/use-callback-ref/dist/es2015/useMergeRef.js +48 -0
  213. package/dist/node_modules/use-callback-ref/dist/es2015/useRef.js +42 -0
  214. package/dist/node_modules/use-sidecar/dist/es2015/exports.js +21 -0
  215. package/dist/node_modules/use-sidecar/dist/es2015/medium.js +77 -0
  216. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +106 -0
  217. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +77 -0
  218. package/dist/node_modules/use-sync-external-store/shim/index.js +19 -0
  219. package/dist/node_modules/zustand/esm/react.js +22 -0
  220. package/dist/node_modules/zustand/esm/vanilla.js +24 -0
  221. package/package.json +1 -1
@@ -0,0 +1,3035 @@
1
+ /**
2
+ * Concatenates two arrays faster than the array spread operator.
3
+ */
4
+ const concatArrays = (array1, array2) => {
5
+ // Pre-allocate for better V8 optimization
6
+ const combinedArray = new Array(array1.length + array2.length);
7
+ for (let i = 0; i < array1.length; i++) {
8
+ combinedArray[i] = array1[i];
9
+ }
10
+ for (let i = 0; i < array2.length; i++) {
11
+ combinedArray[array1.length + i] = array2[i];
12
+ }
13
+ return combinedArray;
14
+ };
15
+
16
+ // Factory function ensures consistent object shapes
17
+ const createClassValidatorObject = (classGroupId, validator) => ({
18
+ classGroupId,
19
+ validator
20
+ });
21
+ // Factory ensures consistent ClassPartObject shape
22
+ const createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({
23
+ nextPart,
24
+ validators,
25
+ classGroupId
26
+ });
27
+ const CLASS_PART_SEPARATOR = '-';
28
+ const EMPTY_CONFLICTS = [];
29
+ // I use two dots here because one dot is used as prefix for class groups in plugins
30
+ const ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';
31
+ const createClassGroupUtils = config => {
32
+ const classMap = createClassMap(config);
33
+ const {
34
+ conflictingClassGroups,
35
+ conflictingClassGroupModifiers
36
+ } = config;
37
+ const getClassGroupId = className => {
38
+ if (className.startsWith('[') && className.endsWith(']')) {
39
+ return getGroupIdForArbitraryProperty(className);
40
+ }
41
+ const classParts = className.split(CLASS_PART_SEPARATOR);
42
+ // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.
43
+ const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;
44
+ return getGroupRecursive(classParts, startIndex, classMap);
45
+ };
46
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
47
+ if (hasPostfixModifier) {
48
+ const modifierConflicts = conflictingClassGroupModifiers[classGroupId];
49
+ const baseConflicts = conflictingClassGroups[classGroupId];
50
+ if (modifierConflicts) {
51
+ if (baseConflicts) {
52
+ // Merge base conflicts with modifier conflicts
53
+ return concatArrays(baseConflicts, modifierConflicts);
54
+ }
55
+ // Only modifier conflicts
56
+ return modifierConflicts;
57
+ }
58
+ // Fall back to without postfix if no modifier conflicts
59
+ return baseConflicts || EMPTY_CONFLICTS;
60
+ }
61
+ return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;
62
+ };
63
+ return {
64
+ getClassGroupId,
65
+ getConflictingClassGroupIds
66
+ };
67
+ };
68
+ const getGroupRecursive = (classParts, startIndex, classPartObject) => {
69
+ const classPathsLength = classParts.length - startIndex;
70
+ if (classPathsLength === 0) {
71
+ return classPartObject.classGroupId;
72
+ }
73
+ const currentClassPart = classParts[startIndex];
74
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
75
+ if (nextClassPartObject) {
76
+ const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);
77
+ if (result) return result;
78
+ }
79
+ const validators = classPartObject.validators;
80
+ if (validators === null) {
81
+ return undefined;
82
+ }
83
+ // Build classRest string efficiently by joining from startIndex onwards
84
+ const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);
85
+ const validatorsLength = validators.length;
86
+ for (let i = 0; i < validatorsLength; i++) {
87
+ const validatorObj = validators[i];
88
+ if (validatorObj.validator(classRest)) {
89
+ return validatorObj.classGroupId;
90
+ }
91
+ }
92
+ return undefined;
93
+ };
94
+ /**
95
+ * Get the class group ID for an arbitrary property.
96
+ *
97
+ * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.
98
+ */
99
+ const getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {
100
+ const content = className.slice(1, -1);
101
+ const colonIndex = content.indexOf(':');
102
+ const property = content.slice(0, colonIndex);
103
+ return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;
104
+ })();
105
+ /**
106
+ * Exported for testing only
107
+ */
108
+ const createClassMap = config => {
109
+ const {
110
+ theme,
111
+ classGroups
112
+ } = config;
113
+ return processClassGroups(classGroups, theme);
114
+ };
115
+ // Split into separate functions to maintain monomorphic call sites
116
+ const processClassGroups = (classGroups, theme) => {
117
+ const classMap = createClassPartObject();
118
+ for (const classGroupId in classGroups) {
119
+ const group = classGroups[classGroupId];
120
+ processClassesRecursively(group, classMap, classGroupId, theme);
121
+ }
122
+ return classMap;
123
+ };
124
+ const processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
125
+ const len = classGroup.length;
126
+ for (let i = 0; i < len; i++) {
127
+ const classDefinition = classGroup[i];
128
+ processClassDefinition(classDefinition, classPartObject, classGroupId, theme);
129
+ }
130
+ };
131
+ // Split into separate functions for each type to maintain monomorphic call sites
132
+ const processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
133
+ if (typeof classDefinition === 'string') {
134
+ processStringDefinition(classDefinition, classPartObject, classGroupId);
135
+ return;
136
+ }
137
+ if (typeof classDefinition === 'function') {
138
+ processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);
139
+ return;
140
+ }
141
+ processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);
142
+ };
143
+ const processStringDefinition = (classDefinition, classPartObject, classGroupId) => {
144
+ const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);
145
+ classPartObjectToEdit.classGroupId = classGroupId;
146
+ };
147
+ const processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
148
+ if (isThemeGetter(classDefinition)) {
149
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
150
+ return;
151
+ }
152
+ if (classPartObject.validators === null) {
153
+ classPartObject.validators = [];
154
+ }
155
+ classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));
156
+ };
157
+ const processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
158
+ const entries = Object.entries(classDefinition);
159
+ const len = entries.length;
160
+ for (let i = 0; i < len; i++) {
161
+ const [key, value] = entries[i];
162
+ processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);
163
+ }
164
+ };
165
+ const getPart = (classPartObject, path) => {
166
+ let current = classPartObject;
167
+ const parts = path.split(CLASS_PART_SEPARATOR);
168
+ const len = parts.length;
169
+ for (let i = 0; i < len; i++) {
170
+ const part = parts[i];
171
+ let next = current.nextPart.get(part);
172
+ if (!next) {
173
+ next = createClassPartObject();
174
+ current.nextPart.set(part, next);
175
+ }
176
+ current = next;
177
+ }
178
+ return current;
179
+ };
180
+ // Type guard maintains monomorphic check
181
+ const isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;
182
+
183
+ // LRU cache implementation using plain objects for simplicity
184
+ const createLruCache = maxCacheSize => {
185
+ if (maxCacheSize < 1) {
186
+ return {
187
+ get: () => undefined,
188
+ set: () => {}
189
+ };
190
+ }
191
+ let cacheSize = 0;
192
+ let cache = Object.create(null);
193
+ let previousCache = Object.create(null);
194
+ const update = (key, value) => {
195
+ cache[key] = value;
196
+ cacheSize++;
197
+ if (cacheSize > maxCacheSize) {
198
+ cacheSize = 0;
199
+ previousCache = cache;
200
+ cache = Object.create(null);
201
+ }
202
+ };
203
+ return {
204
+ get(key) {
205
+ let value = cache[key];
206
+ if (value !== undefined) {
207
+ return value;
208
+ }
209
+ if ((value = previousCache[key]) !== undefined) {
210
+ update(key, value);
211
+ return value;
212
+ }
213
+ },
214
+ set(key, value) {
215
+ if (key in cache) {
216
+ cache[key] = value;
217
+ } else {
218
+ update(key, value);
219
+ }
220
+ }
221
+ };
222
+ };
223
+ const IMPORTANT_MODIFIER = '!';
224
+ const MODIFIER_SEPARATOR = ':';
225
+ const EMPTY_MODIFIERS = [];
226
+ // Pre-allocated result object shape for consistency
227
+ const createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({
228
+ modifiers,
229
+ hasImportantModifier,
230
+ baseClassName,
231
+ maybePostfixModifierPosition,
232
+ isExternal
233
+ });
234
+ const createParseClassName = config => {
235
+ const {
236
+ prefix,
237
+ experimentalParseClassName
238
+ } = config;
239
+ /**
240
+ * Parse class name into parts.
241
+ *
242
+ * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS
243
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js
244
+ */
245
+ let parseClassName = className => {
246
+ // Use simple array with push for better performance
247
+ const modifiers = [];
248
+ let bracketDepth = 0;
249
+ let parenDepth = 0;
250
+ let modifierStart = 0;
251
+ let postfixModifierPosition;
252
+ const len = className.length;
253
+ for (let index = 0; index < len; index++) {
254
+ const currentCharacter = className[index];
255
+ if (bracketDepth === 0 && parenDepth === 0) {
256
+ if (currentCharacter === MODIFIER_SEPARATOR) {
257
+ modifiers.push(className.slice(modifierStart, index));
258
+ modifierStart = index + 1;
259
+ continue;
260
+ }
261
+ if (currentCharacter === '/') {
262
+ postfixModifierPosition = index;
263
+ continue;
264
+ }
265
+ }
266
+ if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;
267
+ }
268
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);
269
+ // Inline important modifier check
270
+ let baseClassName = baseClassNameWithImportantModifier;
271
+ let hasImportantModifier = false;
272
+ if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {
273
+ baseClassName = baseClassNameWithImportantModifier.slice(0, -1);
274
+ hasImportantModifier = true;
275
+ } else if (
276
+ /**
277
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
278
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
279
+ */
280
+ baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {
281
+ baseClassName = baseClassNameWithImportantModifier.slice(1);
282
+ hasImportantModifier = true;
283
+ }
284
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;
285
+ return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);
286
+ };
287
+ if (prefix) {
288
+ const fullPrefix = prefix + MODIFIER_SEPARATOR;
289
+ const parseClassNameOriginal = parseClassName;
290
+ parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);
291
+ }
292
+ if (experimentalParseClassName) {
293
+ const parseClassNameOriginal = parseClassName;
294
+ parseClassName = className => experimentalParseClassName({
295
+ className,
296
+ parseClassName: parseClassNameOriginal
297
+ });
298
+ }
299
+ return parseClassName;
300
+ };
301
+
302
+ /**
303
+ * Sorts modifiers according to following schema:
304
+ * - Predefined modifiers are sorted alphabetically
305
+ * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it
306
+ */
307
+ const createSortModifiers = config => {
308
+ // Pre-compute weights for all known modifiers for O(1) comparison
309
+ const modifierWeights = new Map();
310
+ // Assign weights to sensitive modifiers (highest priority, but preserve order)
311
+ config.orderSensitiveModifiers.forEach((mod, index) => {
312
+ modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods
313
+ });
314
+ return modifiers => {
315
+ const result = [];
316
+ let currentSegment = [];
317
+ // Process modifiers in one pass
318
+ for (let i = 0; i < modifiers.length; i++) {
319
+ const modifier = modifiers[i];
320
+ // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)
321
+ const isArbitrary = modifier[0] === '[';
322
+ const isOrderSensitive = modifierWeights.has(modifier);
323
+ if (isArbitrary || isOrderSensitive) {
324
+ // Sort and flush current segment alphabetically
325
+ if (currentSegment.length > 0) {
326
+ currentSegment.sort();
327
+ result.push(...currentSegment);
328
+ currentSegment = [];
329
+ }
330
+ result.push(modifier);
331
+ } else {
332
+ // Regular modifier - add to current segment for batch sorting
333
+ currentSegment.push(modifier);
334
+ }
335
+ }
336
+ // Sort and add any remaining segment items
337
+ if (currentSegment.length > 0) {
338
+ currentSegment.sort();
339
+ result.push(...currentSegment);
340
+ }
341
+ return result;
342
+ };
343
+ };
344
+ const createConfigUtils = config => ({
345
+ cache: createLruCache(config.cacheSize),
346
+ parseClassName: createParseClassName(config),
347
+ sortModifiers: createSortModifiers(config),
348
+ ...createClassGroupUtils(config)
349
+ });
350
+ const SPLIT_CLASSES_REGEX = /\s+/;
351
+ const mergeClassList = (classList, configUtils) => {
352
+ const {
353
+ parseClassName,
354
+ getClassGroupId,
355
+ getConflictingClassGroupIds,
356
+ sortModifiers
357
+ } = configUtils;
358
+ /**
359
+ * Set of classGroupIds in following format:
360
+ * `{importantModifier}{variantModifiers}{classGroupId}`
361
+ * @example 'float'
362
+ * @example 'hover:focus:bg-color'
363
+ * @example 'md:!pr'
364
+ */
365
+ const classGroupsInConflict = [];
366
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
367
+ let result = '';
368
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
369
+ const originalClassName = classNames[index];
370
+ const {
371
+ isExternal,
372
+ modifiers,
373
+ hasImportantModifier,
374
+ baseClassName,
375
+ maybePostfixModifierPosition
376
+ } = parseClassName(originalClassName);
377
+ if (isExternal) {
378
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
379
+ continue;
380
+ }
381
+ let hasPostfixModifier = !!maybePostfixModifierPosition;
382
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
383
+ if (!classGroupId) {
384
+ if (!hasPostfixModifier) {
385
+ // Not a Tailwind class
386
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
387
+ continue;
388
+ }
389
+ classGroupId = getClassGroupId(baseClassName);
390
+ if (!classGroupId) {
391
+ // Not a Tailwind class
392
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
393
+ continue;
394
+ }
395
+ hasPostfixModifier = false;
396
+ }
397
+ // Fast path: skip sorting for empty or single modifier
398
+ const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');
399
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
400
+ const classId = modifierId + classGroupId;
401
+ if (classGroupsInConflict.indexOf(classId) > -1) {
402
+ // Tailwind class omitted due to conflict
403
+ continue;
404
+ }
405
+ classGroupsInConflict.push(classId);
406
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
407
+ for (let i = 0; i < conflictGroups.length; ++i) {
408
+ const group = conflictGroups[i];
409
+ classGroupsInConflict.push(modifierId + group);
410
+ }
411
+ // Tailwind class not in conflict
412
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
413
+ }
414
+ return result;
415
+ };
416
+
417
+ /**
418
+ * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.
419
+ *
420
+ * Specifically:
421
+ * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js
422
+ * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts
423
+ *
424
+ * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
425
+ */
426
+ const twJoin = (...classLists) => {
427
+ let index = 0;
428
+ let argument;
429
+ let resolvedValue;
430
+ let string = '';
431
+ while (index < classLists.length) {
432
+ if (argument = classLists[index++]) {
433
+ if (resolvedValue = toValue(argument)) {
434
+ string && (string += ' ');
435
+ string += resolvedValue;
436
+ }
437
+ }
438
+ }
439
+ return string;
440
+ };
441
+ const toValue = mix => {
442
+ // Fast path for strings
443
+ if (typeof mix === 'string') {
444
+ return mix;
445
+ }
446
+ let resolvedValue;
447
+ let string = '';
448
+ for (let k = 0; k < mix.length; k++) {
449
+ if (mix[k]) {
450
+ if (resolvedValue = toValue(mix[k])) {
451
+ string && (string += ' ');
452
+ string += resolvedValue;
453
+ }
454
+ }
455
+ }
456
+ return string;
457
+ };
458
+ const createTailwindMerge = (createConfigFirst, ...createConfigRest) => {
459
+ let configUtils;
460
+ let cacheGet;
461
+ let cacheSet;
462
+ let functionToCall;
463
+ const initTailwindMerge = classList => {
464
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
465
+ configUtils = createConfigUtils(config);
466
+ cacheGet = configUtils.cache.get;
467
+ cacheSet = configUtils.cache.set;
468
+ functionToCall = tailwindMerge;
469
+ return tailwindMerge(classList);
470
+ };
471
+ const tailwindMerge = classList => {
472
+ const cachedResult = cacheGet(classList);
473
+ if (cachedResult) {
474
+ return cachedResult;
475
+ }
476
+ const result = mergeClassList(classList, configUtils);
477
+ cacheSet(classList, result);
478
+ return result;
479
+ };
480
+ functionToCall = initTailwindMerge;
481
+ return (...args) => functionToCall(twJoin(...args));
482
+ };
483
+ const fallbackThemeArr = [];
484
+ const fromTheme = key => {
485
+ const themeGetter = theme => theme[key] || fallbackThemeArr;
486
+ themeGetter.isThemeGetter = true;
487
+ return themeGetter;
488
+ };
489
+ const arbitraryValueRegex = /^\[(?:(\w[\w-]*):)?(.+)\]$/i;
490
+ const arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
491
+ const fractionRegex = /^\d+\/\d+$/;
492
+ const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
493
+ const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
494
+ const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
495
+ // Shadow always begins with x and y offset separated by underscore optionally prepended by inset
496
+ const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
497
+ const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
498
+ const isFraction = value => fractionRegex.test(value);
499
+ const isNumber = value => !!value && !Number.isNaN(Number(value));
500
+ const isInteger = value => !!value && Number.isInteger(Number(value));
501
+ const isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));
502
+ const isTshirtSize = value => tshirtUnitRegex.test(value);
503
+ const isAny = () => true;
504
+ const isLengthOnly = value =>
505
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
506
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
507
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
508
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value);
509
+ const isNever = () => false;
510
+ const isShadow = value => shadowRegex.test(value);
511
+ const isImage = value => imageRegex.test(value);
512
+ const isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);
513
+ const isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);
514
+ const isArbitraryValue = value => arbitraryValueRegex.test(value);
515
+ const isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);
516
+ const isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);
517
+ const isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);
518
+ const isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);
519
+ const isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);
520
+ const isArbitraryVariable = value => arbitraryVariableRegex.test(value);
521
+ const isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);
522
+ const isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);
523
+ const isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);
524
+ const isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);
525
+ const isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);
526
+ const isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);
527
+ // Helpers
528
+ const getIsArbitraryValue = (value, testLabel, testValue) => {
529
+ const result = arbitraryValueRegex.exec(value);
530
+ if (result) {
531
+ if (result[1]) {
532
+ return testLabel(result[1]);
533
+ }
534
+ return testValue(result[2]);
535
+ }
536
+ return false;
537
+ };
538
+ const getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {
539
+ const result = arbitraryVariableRegex.exec(value);
540
+ if (result) {
541
+ if (result[1]) {
542
+ return testLabel(result[1]);
543
+ }
544
+ return shouldMatchNoLabel;
545
+ }
546
+ return false;
547
+ };
548
+ // Labels
549
+ const isLabelPosition = label => label === 'position' || label === 'percentage';
550
+ const isLabelImage = label => label === 'image' || label === 'url';
551
+ const isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';
552
+ const isLabelLength = label => label === 'length';
553
+ const isLabelNumber = label => label === 'number';
554
+ const isLabelFamilyName = label => label === 'family-name';
555
+ const isLabelShadow = label => label === 'shadow';
556
+ const getDefaultConfig = () => {
557
+ /**
558
+ * Theme getters for theme variable namespaces
559
+ * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces
560
+ */
561
+ /***/
562
+ const themeColor = fromTheme('color');
563
+ const themeFont = fromTheme('font');
564
+ const themeText = fromTheme('text');
565
+ const themeFontWeight = fromTheme('font-weight');
566
+ const themeTracking = fromTheme('tracking');
567
+ const themeLeading = fromTheme('leading');
568
+ const themeBreakpoint = fromTheme('breakpoint');
569
+ const themeContainer = fromTheme('container');
570
+ const themeSpacing = fromTheme('spacing');
571
+ const themeRadius = fromTheme('radius');
572
+ const themeShadow = fromTheme('shadow');
573
+ const themeInsetShadow = fromTheme('inset-shadow');
574
+ const themeTextShadow = fromTheme('text-shadow');
575
+ const themeDropShadow = fromTheme('drop-shadow');
576
+ const themeBlur = fromTheme('blur');
577
+ const themePerspective = fromTheme('perspective');
578
+ const themeAspect = fromTheme('aspect');
579
+ const themeEase = fromTheme('ease');
580
+ const themeAnimate = fromTheme('animate');
581
+ /**
582
+ * Helpers to avoid repeating the same scales
583
+ *
584
+ * We use functions that create a new array every time they're called instead of static arrays.
585
+ * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.
586
+ */
587
+ /***/
588
+ const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];
589
+ const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',
590
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
591
+ 'left-top', 'top-right',
592
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
593
+ 'right-top', 'bottom-right',
594
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
595
+ 'right-bottom', 'bottom-left',
596
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
597
+ 'left-bottom'];
598
+ const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];
599
+ const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];
600
+ const scaleOverscroll = () => ['auto', 'contain', 'none'];
601
+ const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];
602
+ const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];
603
+ const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];
604
+ const scaleGridColRowStartAndEnd = () => ['auto', {
605
+ span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]
606
+ }, isInteger, isArbitraryVariable, isArbitraryValue];
607
+ const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];
608
+ const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];
609
+ const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];
610
+ const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];
611
+ const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];
612
+ const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];
613
+ const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];
614
+ const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {
615
+ position: [isArbitraryVariable, isArbitraryValue]
616
+ }];
617
+ const scaleBgRepeat = () => ['no-repeat', {
618
+ repeat: ['', 'x', 'y', 'space', 'round']
619
+ }];
620
+ const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {
621
+ size: [isArbitraryVariable, isArbitraryValue]
622
+ }];
623
+ const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];
624
+ const scaleRadius = () => [
625
+ // Deprecated since Tailwind CSS v4.0.0
626
+ '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];
627
+ const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];
628
+ const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];
629
+ const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];
630
+ const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];
631
+ const scaleBlur = () => [
632
+ // Deprecated since Tailwind CSS v4.0.0
633
+ '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];
634
+ const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
635
+ const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
636
+ const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];
637
+ const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];
638
+ return {
639
+ cacheSize: 500,
640
+ theme: {
641
+ animate: ['spin', 'ping', 'pulse', 'bounce'],
642
+ aspect: ['video'],
643
+ blur: [isTshirtSize],
644
+ breakpoint: [isTshirtSize],
645
+ color: [isAny],
646
+ container: [isTshirtSize],
647
+ 'drop-shadow': [isTshirtSize],
648
+ ease: ['in', 'out', 'in-out'],
649
+ font: [isAnyNonArbitrary],
650
+ 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],
651
+ 'inset-shadow': [isTshirtSize],
652
+ leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],
653
+ perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],
654
+ radius: [isTshirtSize],
655
+ shadow: [isTshirtSize],
656
+ spacing: ['px', isNumber],
657
+ text: [isTshirtSize],
658
+ 'text-shadow': [isTshirtSize],
659
+ tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']
660
+ },
661
+ classGroups: {
662
+ // --------------
663
+ // --- Layout ---
664
+ // --------------
665
+ /**
666
+ * Aspect Ratio
667
+ * @see https://tailwindcss.com/docs/aspect-ratio
668
+ */
669
+ aspect: [{
670
+ aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]
671
+ }],
672
+ /**
673
+ * Container
674
+ * @see https://tailwindcss.com/docs/container
675
+ * @deprecated since Tailwind CSS v4.0.0
676
+ */
677
+ container: ['container'],
678
+ /**
679
+ * Columns
680
+ * @see https://tailwindcss.com/docs/columns
681
+ */
682
+ columns: [{
683
+ columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]
684
+ }],
685
+ /**
686
+ * Break After
687
+ * @see https://tailwindcss.com/docs/break-after
688
+ */
689
+ 'break-after': [{
690
+ 'break-after': scaleBreak()
691
+ }],
692
+ /**
693
+ * Break Before
694
+ * @see https://tailwindcss.com/docs/break-before
695
+ */
696
+ 'break-before': [{
697
+ 'break-before': scaleBreak()
698
+ }],
699
+ /**
700
+ * Break Inside
701
+ * @see https://tailwindcss.com/docs/break-inside
702
+ */
703
+ 'break-inside': [{
704
+ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']
705
+ }],
706
+ /**
707
+ * Box Decoration Break
708
+ * @see https://tailwindcss.com/docs/box-decoration-break
709
+ */
710
+ 'box-decoration': [{
711
+ 'box-decoration': ['slice', 'clone']
712
+ }],
713
+ /**
714
+ * Box Sizing
715
+ * @see https://tailwindcss.com/docs/box-sizing
716
+ */
717
+ box: [{
718
+ box: ['border', 'content']
719
+ }],
720
+ /**
721
+ * Display
722
+ * @see https://tailwindcss.com/docs/display
723
+ */
724
+ display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],
725
+ /**
726
+ * Screen Reader Only
727
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
728
+ */
729
+ sr: ['sr-only', 'not-sr-only'],
730
+ /**
731
+ * Floats
732
+ * @see https://tailwindcss.com/docs/float
733
+ */
734
+ float: [{
735
+ float: ['right', 'left', 'none', 'start', 'end']
736
+ }],
737
+ /**
738
+ * Clear
739
+ * @see https://tailwindcss.com/docs/clear
740
+ */
741
+ clear: [{
742
+ clear: ['left', 'right', 'both', 'none', 'start', 'end']
743
+ }],
744
+ /**
745
+ * Isolation
746
+ * @see https://tailwindcss.com/docs/isolation
747
+ */
748
+ isolation: ['isolate', 'isolation-auto'],
749
+ /**
750
+ * Object Fit
751
+ * @see https://tailwindcss.com/docs/object-fit
752
+ */
753
+ 'object-fit': [{
754
+ object: ['contain', 'cover', 'fill', 'none', 'scale-down']
755
+ }],
756
+ /**
757
+ * Object Position
758
+ * @see https://tailwindcss.com/docs/object-position
759
+ */
760
+ 'object-position': [{
761
+ object: scalePositionWithArbitrary()
762
+ }],
763
+ /**
764
+ * Overflow
765
+ * @see https://tailwindcss.com/docs/overflow
766
+ */
767
+ overflow: [{
768
+ overflow: scaleOverflow()
769
+ }],
770
+ /**
771
+ * Overflow X
772
+ * @see https://tailwindcss.com/docs/overflow
773
+ */
774
+ 'overflow-x': [{
775
+ 'overflow-x': scaleOverflow()
776
+ }],
777
+ /**
778
+ * Overflow Y
779
+ * @see https://tailwindcss.com/docs/overflow
780
+ */
781
+ 'overflow-y': [{
782
+ 'overflow-y': scaleOverflow()
783
+ }],
784
+ /**
785
+ * Overscroll Behavior
786
+ * @see https://tailwindcss.com/docs/overscroll-behavior
787
+ */
788
+ overscroll: [{
789
+ overscroll: scaleOverscroll()
790
+ }],
791
+ /**
792
+ * Overscroll Behavior X
793
+ * @see https://tailwindcss.com/docs/overscroll-behavior
794
+ */
795
+ 'overscroll-x': [{
796
+ 'overscroll-x': scaleOverscroll()
797
+ }],
798
+ /**
799
+ * Overscroll Behavior Y
800
+ * @see https://tailwindcss.com/docs/overscroll-behavior
801
+ */
802
+ 'overscroll-y': [{
803
+ 'overscroll-y': scaleOverscroll()
804
+ }],
805
+ /**
806
+ * Position
807
+ * @see https://tailwindcss.com/docs/position
808
+ */
809
+ position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],
810
+ /**
811
+ * Top / Right / Bottom / Left
812
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
813
+ */
814
+ inset: [{
815
+ inset: scaleInset()
816
+ }],
817
+ /**
818
+ * Right / Left
819
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
820
+ */
821
+ 'inset-x': [{
822
+ 'inset-x': scaleInset()
823
+ }],
824
+ /**
825
+ * Top / Bottom
826
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
827
+ */
828
+ 'inset-y': [{
829
+ 'inset-y': scaleInset()
830
+ }],
831
+ /**
832
+ * Start
833
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
834
+ */
835
+ start: [{
836
+ start: scaleInset()
837
+ }],
838
+ /**
839
+ * End
840
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
841
+ */
842
+ end: [{
843
+ end: scaleInset()
844
+ }],
845
+ /**
846
+ * Top
847
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
848
+ */
849
+ top: [{
850
+ top: scaleInset()
851
+ }],
852
+ /**
853
+ * Right
854
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
855
+ */
856
+ right: [{
857
+ right: scaleInset()
858
+ }],
859
+ /**
860
+ * Bottom
861
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
862
+ */
863
+ bottom: [{
864
+ bottom: scaleInset()
865
+ }],
866
+ /**
867
+ * Left
868
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
869
+ */
870
+ left: [{
871
+ left: scaleInset()
872
+ }],
873
+ /**
874
+ * Visibility
875
+ * @see https://tailwindcss.com/docs/visibility
876
+ */
877
+ visibility: ['visible', 'invisible', 'collapse'],
878
+ /**
879
+ * Z-Index
880
+ * @see https://tailwindcss.com/docs/z-index
881
+ */
882
+ z: [{
883
+ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]
884
+ }],
885
+ // ------------------------
886
+ // --- Flexbox and Grid ---
887
+ // ------------------------
888
+ /**
889
+ * Flex Basis
890
+ * @see https://tailwindcss.com/docs/flex-basis
891
+ */
892
+ basis: [{
893
+ basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]
894
+ }],
895
+ /**
896
+ * Flex Direction
897
+ * @see https://tailwindcss.com/docs/flex-direction
898
+ */
899
+ 'flex-direction': [{
900
+ flex: ['row', 'row-reverse', 'col', 'col-reverse']
901
+ }],
902
+ /**
903
+ * Flex Wrap
904
+ * @see https://tailwindcss.com/docs/flex-wrap
905
+ */
906
+ 'flex-wrap': [{
907
+ flex: ['nowrap', 'wrap', 'wrap-reverse']
908
+ }],
909
+ /**
910
+ * Flex
911
+ * @see https://tailwindcss.com/docs/flex
912
+ */
913
+ flex: [{
914
+ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]
915
+ }],
916
+ /**
917
+ * Flex Grow
918
+ * @see https://tailwindcss.com/docs/flex-grow
919
+ */
920
+ grow: [{
921
+ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]
922
+ }],
923
+ /**
924
+ * Flex Shrink
925
+ * @see https://tailwindcss.com/docs/flex-shrink
926
+ */
927
+ shrink: [{
928
+ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]
929
+ }],
930
+ /**
931
+ * Order
932
+ * @see https://tailwindcss.com/docs/order
933
+ */
934
+ order: [{
935
+ order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]
936
+ }],
937
+ /**
938
+ * Grid Template Columns
939
+ * @see https://tailwindcss.com/docs/grid-template-columns
940
+ */
941
+ 'grid-cols': [{
942
+ 'grid-cols': scaleGridTemplateColsRows()
943
+ }],
944
+ /**
945
+ * Grid Column Start / End
946
+ * @see https://tailwindcss.com/docs/grid-column
947
+ */
948
+ 'col-start-end': [{
949
+ col: scaleGridColRowStartAndEnd()
950
+ }],
951
+ /**
952
+ * Grid Column Start
953
+ * @see https://tailwindcss.com/docs/grid-column
954
+ */
955
+ 'col-start': [{
956
+ 'col-start': scaleGridColRowStartOrEnd()
957
+ }],
958
+ /**
959
+ * Grid Column End
960
+ * @see https://tailwindcss.com/docs/grid-column
961
+ */
962
+ 'col-end': [{
963
+ 'col-end': scaleGridColRowStartOrEnd()
964
+ }],
965
+ /**
966
+ * Grid Template Rows
967
+ * @see https://tailwindcss.com/docs/grid-template-rows
968
+ */
969
+ 'grid-rows': [{
970
+ 'grid-rows': scaleGridTemplateColsRows()
971
+ }],
972
+ /**
973
+ * Grid Row Start / End
974
+ * @see https://tailwindcss.com/docs/grid-row
975
+ */
976
+ 'row-start-end': [{
977
+ row: scaleGridColRowStartAndEnd()
978
+ }],
979
+ /**
980
+ * Grid Row Start
981
+ * @see https://tailwindcss.com/docs/grid-row
982
+ */
983
+ 'row-start': [{
984
+ 'row-start': scaleGridColRowStartOrEnd()
985
+ }],
986
+ /**
987
+ * Grid Row End
988
+ * @see https://tailwindcss.com/docs/grid-row
989
+ */
990
+ 'row-end': [{
991
+ 'row-end': scaleGridColRowStartOrEnd()
992
+ }],
993
+ /**
994
+ * Grid Auto Flow
995
+ * @see https://tailwindcss.com/docs/grid-auto-flow
996
+ */
997
+ 'grid-flow': [{
998
+ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']
999
+ }],
1000
+ /**
1001
+ * Grid Auto Columns
1002
+ * @see https://tailwindcss.com/docs/grid-auto-columns
1003
+ */
1004
+ 'auto-cols': [{
1005
+ 'auto-cols': scaleGridAutoColsRows()
1006
+ }],
1007
+ /**
1008
+ * Grid Auto Rows
1009
+ * @see https://tailwindcss.com/docs/grid-auto-rows
1010
+ */
1011
+ 'auto-rows': [{
1012
+ 'auto-rows': scaleGridAutoColsRows()
1013
+ }],
1014
+ /**
1015
+ * Gap
1016
+ * @see https://tailwindcss.com/docs/gap
1017
+ */
1018
+ gap: [{
1019
+ gap: scaleUnambiguousSpacing()
1020
+ }],
1021
+ /**
1022
+ * Gap X
1023
+ * @see https://tailwindcss.com/docs/gap
1024
+ */
1025
+ 'gap-x': [{
1026
+ 'gap-x': scaleUnambiguousSpacing()
1027
+ }],
1028
+ /**
1029
+ * Gap Y
1030
+ * @see https://tailwindcss.com/docs/gap
1031
+ */
1032
+ 'gap-y': [{
1033
+ 'gap-y': scaleUnambiguousSpacing()
1034
+ }],
1035
+ /**
1036
+ * Justify Content
1037
+ * @see https://tailwindcss.com/docs/justify-content
1038
+ */
1039
+ 'justify-content': [{
1040
+ justify: [...scaleAlignPrimaryAxis(), 'normal']
1041
+ }],
1042
+ /**
1043
+ * Justify Items
1044
+ * @see https://tailwindcss.com/docs/justify-items
1045
+ */
1046
+ 'justify-items': [{
1047
+ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']
1048
+ }],
1049
+ /**
1050
+ * Justify Self
1051
+ * @see https://tailwindcss.com/docs/justify-self
1052
+ */
1053
+ 'justify-self': [{
1054
+ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]
1055
+ }],
1056
+ /**
1057
+ * Align Content
1058
+ * @see https://tailwindcss.com/docs/align-content
1059
+ */
1060
+ 'align-content': [{
1061
+ content: ['normal', ...scaleAlignPrimaryAxis()]
1062
+ }],
1063
+ /**
1064
+ * Align Items
1065
+ * @see https://tailwindcss.com/docs/align-items
1066
+ */
1067
+ 'align-items': [{
1068
+ items: [...scaleAlignSecondaryAxis(), {
1069
+ baseline: ['', 'last']
1070
+ }]
1071
+ }],
1072
+ /**
1073
+ * Align Self
1074
+ * @see https://tailwindcss.com/docs/align-self
1075
+ */
1076
+ 'align-self': [{
1077
+ self: ['auto', ...scaleAlignSecondaryAxis(), {
1078
+ baseline: ['', 'last']
1079
+ }]
1080
+ }],
1081
+ /**
1082
+ * Place Content
1083
+ * @see https://tailwindcss.com/docs/place-content
1084
+ */
1085
+ 'place-content': [{
1086
+ 'place-content': scaleAlignPrimaryAxis()
1087
+ }],
1088
+ /**
1089
+ * Place Items
1090
+ * @see https://tailwindcss.com/docs/place-items
1091
+ */
1092
+ 'place-items': [{
1093
+ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']
1094
+ }],
1095
+ /**
1096
+ * Place Self
1097
+ * @see https://tailwindcss.com/docs/place-self
1098
+ */
1099
+ 'place-self': [{
1100
+ 'place-self': ['auto', ...scaleAlignSecondaryAxis()]
1101
+ }],
1102
+ // Spacing
1103
+ /**
1104
+ * Padding
1105
+ * @see https://tailwindcss.com/docs/padding
1106
+ */
1107
+ p: [{
1108
+ p: scaleUnambiguousSpacing()
1109
+ }],
1110
+ /**
1111
+ * Padding X
1112
+ * @see https://tailwindcss.com/docs/padding
1113
+ */
1114
+ px: [{
1115
+ px: scaleUnambiguousSpacing()
1116
+ }],
1117
+ /**
1118
+ * Padding Y
1119
+ * @see https://tailwindcss.com/docs/padding
1120
+ */
1121
+ py: [{
1122
+ py: scaleUnambiguousSpacing()
1123
+ }],
1124
+ /**
1125
+ * Padding Start
1126
+ * @see https://tailwindcss.com/docs/padding
1127
+ */
1128
+ ps: [{
1129
+ ps: scaleUnambiguousSpacing()
1130
+ }],
1131
+ /**
1132
+ * Padding End
1133
+ * @see https://tailwindcss.com/docs/padding
1134
+ */
1135
+ pe: [{
1136
+ pe: scaleUnambiguousSpacing()
1137
+ }],
1138
+ /**
1139
+ * Padding Top
1140
+ * @see https://tailwindcss.com/docs/padding
1141
+ */
1142
+ pt: [{
1143
+ pt: scaleUnambiguousSpacing()
1144
+ }],
1145
+ /**
1146
+ * Padding Right
1147
+ * @see https://tailwindcss.com/docs/padding
1148
+ */
1149
+ pr: [{
1150
+ pr: scaleUnambiguousSpacing()
1151
+ }],
1152
+ /**
1153
+ * Padding Bottom
1154
+ * @see https://tailwindcss.com/docs/padding
1155
+ */
1156
+ pb: [{
1157
+ pb: scaleUnambiguousSpacing()
1158
+ }],
1159
+ /**
1160
+ * Padding Left
1161
+ * @see https://tailwindcss.com/docs/padding
1162
+ */
1163
+ pl: [{
1164
+ pl: scaleUnambiguousSpacing()
1165
+ }],
1166
+ /**
1167
+ * Margin
1168
+ * @see https://tailwindcss.com/docs/margin
1169
+ */
1170
+ m: [{
1171
+ m: scaleMargin()
1172
+ }],
1173
+ /**
1174
+ * Margin X
1175
+ * @see https://tailwindcss.com/docs/margin
1176
+ */
1177
+ mx: [{
1178
+ mx: scaleMargin()
1179
+ }],
1180
+ /**
1181
+ * Margin Y
1182
+ * @see https://tailwindcss.com/docs/margin
1183
+ */
1184
+ my: [{
1185
+ my: scaleMargin()
1186
+ }],
1187
+ /**
1188
+ * Margin Start
1189
+ * @see https://tailwindcss.com/docs/margin
1190
+ */
1191
+ ms: [{
1192
+ ms: scaleMargin()
1193
+ }],
1194
+ /**
1195
+ * Margin End
1196
+ * @see https://tailwindcss.com/docs/margin
1197
+ */
1198
+ me: [{
1199
+ me: scaleMargin()
1200
+ }],
1201
+ /**
1202
+ * Margin Top
1203
+ * @see https://tailwindcss.com/docs/margin
1204
+ */
1205
+ mt: [{
1206
+ mt: scaleMargin()
1207
+ }],
1208
+ /**
1209
+ * Margin Right
1210
+ * @see https://tailwindcss.com/docs/margin
1211
+ */
1212
+ mr: [{
1213
+ mr: scaleMargin()
1214
+ }],
1215
+ /**
1216
+ * Margin Bottom
1217
+ * @see https://tailwindcss.com/docs/margin
1218
+ */
1219
+ mb: [{
1220
+ mb: scaleMargin()
1221
+ }],
1222
+ /**
1223
+ * Margin Left
1224
+ * @see https://tailwindcss.com/docs/margin
1225
+ */
1226
+ ml: [{
1227
+ ml: scaleMargin()
1228
+ }],
1229
+ /**
1230
+ * Space Between X
1231
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1232
+ */
1233
+ 'space-x': [{
1234
+ 'space-x': scaleUnambiguousSpacing()
1235
+ }],
1236
+ /**
1237
+ * Space Between X Reverse
1238
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1239
+ */
1240
+ 'space-x-reverse': ['space-x-reverse'],
1241
+ /**
1242
+ * Space Between Y
1243
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1244
+ */
1245
+ 'space-y': [{
1246
+ 'space-y': scaleUnambiguousSpacing()
1247
+ }],
1248
+ /**
1249
+ * Space Between Y Reverse
1250
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1251
+ */
1252
+ 'space-y-reverse': ['space-y-reverse'],
1253
+ // --------------
1254
+ // --- Sizing ---
1255
+ // --------------
1256
+ /**
1257
+ * Size
1258
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
1259
+ */
1260
+ size: [{
1261
+ size: scaleSizing()
1262
+ }],
1263
+ /**
1264
+ * Width
1265
+ * @see https://tailwindcss.com/docs/width
1266
+ */
1267
+ w: [{
1268
+ w: [themeContainer, 'screen', ...scaleSizing()]
1269
+ }],
1270
+ /**
1271
+ * Min-Width
1272
+ * @see https://tailwindcss.com/docs/min-width
1273
+ */
1274
+ 'min-w': [{
1275
+ 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1276
+ 'none', ...scaleSizing()]
1277
+ }],
1278
+ /**
1279
+ * Max-Width
1280
+ * @see https://tailwindcss.com/docs/max-width
1281
+ */
1282
+ 'max-w': [{
1283
+ 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1284
+ 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1285
+ {
1286
+ screen: [themeBreakpoint]
1287
+ }, ...scaleSizing()]
1288
+ }],
1289
+ /**
1290
+ * Height
1291
+ * @see https://tailwindcss.com/docs/height
1292
+ */
1293
+ h: [{
1294
+ h: ['screen', 'lh', ...scaleSizing()]
1295
+ }],
1296
+ /**
1297
+ * Min-Height
1298
+ * @see https://tailwindcss.com/docs/min-height
1299
+ */
1300
+ 'min-h': [{
1301
+ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]
1302
+ }],
1303
+ /**
1304
+ * Max-Height
1305
+ * @see https://tailwindcss.com/docs/max-height
1306
+ */
1307
+ 'max-h': [{
1308
+ 'max-h': ['screen', 'lh', ...scaleSizing()]
1309
+ }],
1310
+ // ------------------
1311
+ // --- Typography ---
1312
+ // ------------------
1313
+ /**
1314
+ * Font Size
1315
+ * @see https://tailwindcss.com/docs/font-size
1316
+ */
1317
+ 'font-size': [{
1318
+ text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]
1319
+ }],
1320
+ /**
1321
+ * Font Smoothing
1322
+ * @see https://tailwindcss.com/docs/font-smoothing
1323
+ */
1324
+ 'font-smoothing': ['antialiased', 'subpixel-antialiased'],
1325
+ /**
1326
+ * Font Style
1327
+ * @see https://tailwindcss.com/docs/font-style
1328
+ */
1329
+ 'font-style': ['italic', 'not-italic'],
1330
+ /**
1331
+ * Font Weight
1332
+ * @see https://tailwindcss.com/docs/font-weight
1333
+ */
1334
+ 'font-weight': [{
1335
+ font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]
1336
+ }],
1337
+ /**
1338
+ * Font Stretch
1339
+ * @see https://tailwindcss.com/docs/font-stretch
1340
+ */
1341
+ 'font-stretch': [{
1342
+ 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]
1343
+ }],
1344
+ /**
1345
+ * Font Family
1346
+ * @see https://tailwindcss.com/docs/font-family
1347
+ */
1348
+ 'font-family': [{
1349
+ font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]
1350
+ }],
1351
+ /**
1352
+ * Font Variant Numeric
1353
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1354
+ */
1355
+ 'fvn-normal': ['normal-nums'],
1356
+ /**
1357
+ * Font Variant Numeric
1358
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1359
+ */
1360
+ 'fvn-ordinal': ['ordinal'],
1361
+ /**
1362
+ * Font Variant Numeric
1363
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1364
+ */
1365
+ 'fvn-slashed-zero': ['slashed-zero'],
1366
+ /**
1367
+ * Font Variant Numeric
1368
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1369
+ */
1370
+ 'fvn-figure': ['lining-nums', 'oldstyle-nums'],
1371
+ /**
1372
+ * Font Variant Numeric
1373
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1374
+ */
1375
+ 'fvn-spacing': ['proportional-nums', 'tabular-nums'],
1376
+ /**
1377
+ * Font Variant Numeric
1378
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1379
+ */
1380
+ 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],
1381
+ /**
1382
+ * Letter Spacing
1383
+ * @see https://tailwindcss.com/docs/letter-spacing
1384
+ */
1385
+ tracking: [{
1386
+ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]
1387
+ }],
1388
+ /**
1389
+ * Line Clamp
1390
+ * @see https://tailwindcss.com/docs/line-clamp
1391
+ */
1392
+ 'line-clamp': [{
1393
+ 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]
1394
+ }],
1395
+ /**
1396
+ * Line Height
1397
+ * @see https://tailwindcss.com/docs/line-height
1398
+ */
1399
+ leading: [{
1400
+ leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1401
+ themeLeading, ...scaleUnambiguousSpacing()]
1402
+ }],
1403
+ /**
1404
+ * List Style Image
1405
+ * @see https://tailwindcss.com/docs/list-style-image
1406
+ */
1407
+ 'list-image': [{
1408
+ 'list-image': ['none', isArbitraryVariable, isArbitraryValue]
1409
+ }],
1410
+ /**
1411
+ * List Style Position
1412
+ * @see https://tailwindcss.com/docs/list-style-position
1413
+ */
1414
+ 'list-style-position': [{
1415
+ list: ['inside', 'outside']
1416
+ }],
1417
+ /**
1418
+ * List Style Type
1419
+ * @see https://tailwindcss.com/docs/list-style-type
1420
+ */
1421
+ 'list-style-type': [{
1422
+ list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]
1423
+ }],
1424
+ /**
1425
+ * Text Alignment
1426
+ * @see https://tailwindcss.com/docs/text-align
1427
+ */
1428
+ 'text-alignment': [{
1429
+ text: ['left', 'center', 'right', 'justify', 'start', 'end']
1430
+ }],
1431
+ /**
1432
+ * Placeholder Color
1433
+ * @deprecated since Tailwind CSS v3.0.0
1434
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
1435
+ */
1436
+ 'placeholder-color': [{
1437
+ placeholder: scaleColor()
1438
+ }],
1439
+ /**
1440
+ * Text Color
1441
+ * @see https://tailwindcss.com/docs/text-color
1442
+ */
1443
+ 'text-color': [{
1444
+ text: scaleColor()
1445
+ }],
1446
+ /**
1447
+ * Text Decoration
1448
+ * @see https://tailwindcss.com/docs/text-decoration
1449
+ */
1450
+ 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],
1451
+ /**
1452
+ * Text Decoration Style
1453
+ * @see https://tailwindcss.com/docs/text-decoration-style
1454
+ */
1455
+ 'text-decoration-style': [{
1456
+ decoration: [...scaleLineStyle(), 'wavy']
1457
+ }],
1458
+ /**
1459
+ * Text Decoration Thickness
1460
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1461
+ */
1462
+ 'text-decoration-thickness': [{
1463
+ decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]
1464
+ }],
1465
+ /**
1466
+ * Text Decoration Color
1467
+ * @see https://tailwindcss.com/docs/text-decoration-color
1468
+ */
1469
+ 'text-decoration-color': [{
1470
+ decoration: scaleColor()
1471
+ }],
1472
+ /**
1473
+ * Text Underline Offset
1474
+ * @see https://tailwindcss.com/docs/text-underline-offset
1475
+ */
1476
+ 'underline-offset': [{
1477
+ 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]
1478
+ }],
1479
+ /**
1480
+ * Text Transform
1481
+ * @see https://tailwindcss.com/docs/text-transform
1482
+ */
1483
+ 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],
1484
+ /**
1485
+ * Text Overflow
1486
+ * @see https://tailwindcss.com/docs/text-overflow
1487
+ */
1488
+ 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],
1489
+ /**
1490
+ * Text Wrap
1491
+ * @see https://tailwindcss.com/docs/text-wrap
1492
+ */
1493
+ 'text-wrap': [{
1494
+ text: ['wrap', 'nowrap', 'balance', 'pretty']
1495
+ }],
1496
+ /**
1497
+ * Text Indent
1498
+ * @see https://tailwindcss.com/docs/text-indent
1499
+ */
1500
+ indent: [{
1501
+ indent: scaleUnambiguousSpacing()
1502
+ }],
1503
+ /**
1504
+ * Vertical Alignment
1505
+ * @see https://tailwindcss.com/docs/vertical-align
1506
+ */
1507
+ 'vertical-align': [{
1508
+ align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]
1509
+ }],
1510
+ /**
1511
+ * Whitespace
1512
+ * @see https://tailwindcss.com/docs/whitespace
1513
+ */
1514
+ whitespace: [{
1515
+ whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']
1516
+ }],
1517
+ /**
1518
+ * Word Break
1519
+ * @see https://tailwindcss.com/docs/word-break
1520
+ */
1521
+ break: [{
1522
+ break: ['normal', 'words', 'all', 'keep']
1523
+ }],
1524
+ /**
1525
+ * Overflow Wrap
1526
+ * @see https://tailwindcss.com/docs/overflow-wrap
1527
+ */
1528
+ wrap: [{
1529
+ wrap: ['break-word', 'anywhere', 'normal']
1530
+ }],
1531
+ /**
1532
+ * Hyphens
1533
+ * @see https://tailwindcss.com/docs/hyphens
1534
+ */
1535
+ hyphens: [{
1536
+ hyphens: ['none', 'manual', 'auto']
1537
+ }],
1538
+ /**
1539
+ * Content
1540
+ * @see https://tailwindcss.com/docs/content
1541
+ */
1542
+ content: [{
1543
+ content: ['none', isArbitraryVariable, isArbitraryValue]
1544
+ }],
1545
+ // -------------------
1546
+ // --- Backgrounds ---
1547
+ // -------------------
1548
+ /**
1549
+ * Background Attachment
1550
+ * @see https://tailwindcss.com/docs/background-attachment
1551
+ */
1552
+ 'bg-attachment': [{
1553
+ bg: ['fixed', 'local', 'scroll']
1554
+ }],
1555
+ /**
1556
+ * Background Clip
1557
+ * @see https://tailwindcss.com/docs/background-clip
1558
+ */
1559
+ 'bg-clip': [{
1560
+ 'bg-clip': ['border', 'padding', 'content', 'text']
1561
+ }],
1562
+ /**
1563
+ * Background Origin
1564
+ * @see https://tailwindcss.com/docs/background-origin
1565
+ */
1566
+ 'bg-origin': [{
1567
+ 'bg-origin': ['border', 'padding', 'content']
1568
+ }],
1569
+ /**
1570
+ * Background Position
1571
+ * @see https://tailwindcss.com/docs/background-position
1572
+ */
1573
+ 'bg-position': [{
1574
+ bg: scaleBgPosition()
1575
+ }],
1576
+ /**
1577
+ * Background Repeat
1578
+ * @see https://tailwindcss.com/docs/background-repeat
1579
+ */
1580
+ 'bg-repeat': [{
1581
+ bg: scaleBgRepeat()
1582
+ }],
1583
+ /**
1584
+ * Background Size
1585
+ * @see https://tailwindcss.com/docs/background-size
1586
+ */
1587
+ 'bg-size': [{
1588
+ bg: scaleBgSize()
1589
+ }],
1590
+ /**
1591
+ * Background Image
1592
+ * @see https://tailwindcss.com/docs/background-image
1593
+ */
1594
+ 'bg-image': [{
1595
+ bg: ['none', {
1596
+ linear: [{
1597
+ to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']
1598
+ }, isInteger, isArbitraryVariable, isArbitraryValue],
1599
+ radial: ['', isArbitraryVariable, isArbitraryValue],
1600
+ conic: [isInteger, isArbitraryVariable, isArbitraryValue]
1601
+ }, isArbitraryVariableImage, isArbitraryImage]
1602
+ }],
1603
+ /**
1604
+ * Background Color
1605
+ * @see https://tailwindcss.com/docs/background-color
1606
+ */
1607
+ 'bg-color': [{
1608
+ bg: scaleColor()
1609
+ }],
1610
+ /**
1611
+ * Gradient Color Stops From Position
1612
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1613
+ */
1614
+ 'gradient-from-pos': [{
1615
+ from: scaleGradientStopPosition()
1616
+ }],
1617
+ /**
1618
+ * Gradient Color Stops Via Position
1619
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1620
+ */
1621
+ 'gradient-via-pos': [{
1622
+ via: scaleGradientStopPosition()
1623
+ }],
1624
+ /**
1625
+ * Gradient Color Stops To Position
1626
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1627
+ */
1628
+ 'gradient-to-pos': [{
1629
+ to: scaleGradientStopPosition()
1630
+ }],
1631
+ /**
1632
+ * Gradient Color Stops From
1633
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1634
+ */
1635
+ 'gradient-from': [{
1636
+ from: scaleColor()
1637
+ }],
1638
+ /**
1639
+ * Gradient Color Stops Via
1640
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1641
+ */
1642
+ 'gradient-via': [{
1643
+ via: scaleColor()
1644
+ }],
1645
+ /**
1646
+ * Gradient Color Stops To
1647
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1648
+ */
1649
+ 'gradient-to': [{
1650
+ to: scaleColor()
1651
+ }],
1652
+ // ---------------
1653
+ // --- Borders ---
1654
+ // ---------------
1655
+ /**
1656
+ * Border Radius
1657
+ * @see https://tailwindcss.com/docs/border-radius
1658
+ */
1659
+ rounded: [{
1660
+ rounded: scaleRadius()
1661
+ }],
1662
+ /**
1663
+ * Border Radius Start
1664
+ * @see https://tailwindcss.com/docs/border-radius
1665
+ */
1666
+ 'rounded-s': [{
1667
+ 'rounded-s': scaleRadius()
1668
+ }],
1669
+ /**
1670
+ * Border Radius End
1671
+ * @see https://tailwindcss.com/docs/border-radius
1672
+ */
1673
+ 'rounded-e': [{
1674
+ 'rounded-e': scaleRadius()
1675
+ }],
1676
+ /**
1677
+ * Border Radius Top
1678
+ * @see https://tailwindcss.com/docs/border-radius
1679
+ */
1680
+ 'rounded-t': [{
1681
+ 'rounded-t': scaleRadius()
1682
+ }],
1683
+ /**
1684
+ * Border Radius Right
1685
+ * @see https://tailwindcss.com/docs/border-radius
1686
+ */
1687
+ 'rounded-r': [{
1688
+ 'rounded-r': scaleRadius()
1689
+ }],
1690
+ /**
1691
+ * Border Radius Bottom
1692
+ * @see https://tailwindcss.com/docs/border-radius
1693
+ */
1694
+ 'rounded-b': [{
1695
+ 'rounded-b': scaleRadius()
1696
+ }],
1697
+ /**
1698
+ * Border Radius Left
1699
+ * @see https://tailwindcss.com/docs/border-radius
1700
+ */
1701
+ 'rounded-l': [{
1702
+ 'rounded-l': scaleRadius()
1703
+ }],
1704
+ /**
1705
+ * Border Radius Start Start
1706
+ * @see https://tailwindcss.com/docs/border-radius
1707
+ */
1708
+ 'rounded-ss': [{
1709
+ 'rounded-ss': scaleRadius()
1710
+ }],
1711
+ /**
1712
+ * Border Radius Start End
1713
+ * @see https://tailwindcss.com/docs/border-radius
1714
+ */
1715
+ 'rounded-se': [{
1716
+ 'rounded-se': scaleRadius()
1717
+ }],
1718
+ /**
1719
+ * Border Radius End End
1720
+ * @see https://tailwindcss.com/docs/border-radius
1721
+ */
1722
+ 'rounded-ee': [{
1723
+ 'rounded-ee': scaleRadius()
1724
+ }],
1725
+ /**
1726
+ * Border Radius End Start
1727
+ * @see https://tailwindcss.com/docs/border-radius
1728
+ */
1729
+ 'rounded-es': [{
1730
+ 'rounded-es': scaleRadius()
1731
+ }],
1732
+ /**
1733
+ * Border Radius Top Left
1734
+ * @see https://tailwindcss.com/docs/border-radius
1735
+ */
1736
+ 'rounded-tl': [{
1737
+ 'rounded-tl': scaleRadius()
1738
+ }],
1739
+ /**
1740
+ * Border Radius Top Right
1741
+ * @see https://tailwindcss.com/docs/border-radius
1742
+ */
1743
+ 'rounded-tr': [{
1744
+ 'rounded-tr': scaleRadius()
1745
+ }],
1746
+ /**
1747
+ * Border Radius Bottom Right
1748
+ * @see https://tailwindcss.com/docs/border-radius
1749
+ */
1750
+ 'rounded-br': [{
1751
+ 'rounded-br': scaleRadius()
1752
+ }],
1753
+ /**
1754
+ * Border Radius Bottom Left
1755
+ * @see https://tailwindcss.com/docs/border-radius
1756
+ */
1757
+ 'rounded-bl': [{
1758
+ 'rounded-bl': scaleRadius()
1759
+ }],
1760
+ /**
1761
+ * Border Width
1762
+ * @see https://tailwindcss.com/docs/border-width
1763
+ */
1764
+ 'border-w': [{
1765
+ border: scaleBorderWidth()
1766
+ }],
1767
+ /**
1768
+ * Border Width X
1769
+ * @see https://tailwindcss.com/docs/border-width
1770
+ */
1771
+ 'border-w-x': [{
1772
+ 'border-x': scaleBorderWidth()
1773
+ }],
1774
+ /**
1775
+ * Border Width Y
1776
+ * @see https://tailwindcss.com/docs/border-width
1777
+ */
1778
+ 'border-w-y': [{
1779
+ 'border-y': scaleBorderWidth()
1780
+ }],
1781
+ /**
1782
+ * Border Width Start
1783
+ * @see https://tailwindcss.com/docs/border-width
1784
+ */
1785
+ 'border-w-s': [{
1786
+ 'border-s': scaleBorderWidth()
1787
+ }],
1788
+ /**
1789
+ * Border Width End
1790
+ * @see https://tailwindcss.com/docs/border-width
1791
+ */
1792
+ 'border-w-e': [{
1793
+ 'border-e': scaleBorderWidth()
1794
+ }],
1795
+ /**
1796
+ * Border Width Top
1797
+ * @see https://tailwindcss.com/docs/border-width
1798
+ */
1799
+ 'border-w-t': [{
1800
+ 'border-t': scaleBorderWidth()
1801
+ }],
1802
+ /**
1803
+ * Border Width Right
1804
+ * @see https://tailwindcss.com/docs/border-width
1805
+ */
1806
+ 'border-w-r': [{
1807
+ 'border-r': scaleBorderWidth()
1808
+ }],
1809
+ /**
1810
+ * Border Width Bottom
1811
+ * @see https://tailwindcss.com/docs/border-width
1812
+ */
1813
+ 'border-w-b': [{
1814
+ 'border-b': scaleBorderWidth()
1815
+ }],
1816
+ /**
1817
+ * Border Width Left
1818
+ * @see https://tailwindcss.com/docs/border-width
1819
+ */
1820
+ 'border-w-l': [{
1821
+ 'border-l': scaleBorderWidth()
1822
+ }],
1823
+ /**
1824
+ * Divide Width X
1825
+ * @see https://tailwindcss.com/docs/border-width#between-children
1826
+ */
1827
+ 'divide-x': [{
1828
+ 'divide-x': scaleBorderWidth()
1829
+ }],
1830
+ /**
1831
+ * Divide Width X Reverse
1832
+ * @see https://tailwindcss.com/docs/border-width#between-children
1833
+ */
1834
+ 'divide-x-reverse': ['divide-x-reverse'],
1835
+ /**
1836
+ * Divide Width Y
1837
+ * @see https://tailwindcss.com/docs/border-width#between-children
1838
+ */
1839
+ 'divide-y': [{
1840
+ 'divide-y': scaleBorderWidth()
1841
+ }],
1842
+ /**
1843
+ * Divide Width Y Reverse
1844
+ * @see https://tailwindcss.com/docs/border-width#between-children
1845
+ */
1846
+ 'divide-y-reverse': ['divide-y-reverse'],
1847
+ /**
1848
+ * Border Style
1849
+ * @see https://tailwindcss.com/docs/border-style
1850
+ */
1851
+ 'border-style': [{
1852
+ border: [...scaleLineStyle(), 'hidden', 'none']
1853
+ }],
1854
+ /**
1855
+ * Divide Style
1856
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
1857
+ */
1858
+ 'divide-style': [{
1859
+ divide: [...scaleLineStyle(), 'hidden', 'none']
1860
+ }],
1861
+ /**
1862
+ * Border Color
1863
+ * @see https://tailwindcss.com/docs/border-color
1864
+ */
1865
+ 'border-color': [{
1866
+ border: scaleColor()
1867
+ }],
1868
+ /**
1869
+ * Border Color X
1870
+ * @see https://tailwindcss.com/docs/border-color
1871
+ */
1872
+ 'border-color-x': [{
1873
+ 'border-x': scaleColor()
1874
+ }],
1875
+ /**
1876
+ * Border Color Y
1877
+ * @see https://tailwindcss.com/docs/border-color
1878
+ */
1879
+ 'border-color-y': [{
1880
+ 'border-y': scaleColor()
1881
+ }],
1882
+ /**
1883
+ * Border Color S
1884
+ * @see https://tailwindcss.com/docs/border-color
1885
+ */
1886
+ 'border-color-s': [{
1887
+ 'border-s': scaleColor()
1888
+ }],
1889
+ /**
1890
+ * Border Color E
1891
+ * @see https://tailwindcss.com/docs/border-color
1892
+ */
1893
+ 'border-color-e': [{
1894
+ 'border-e': scaleColor()
1895
+ }],
1896
+ /**
1897
+ * Border Color Top
1898
+ * @see https://tailwindcss.com/docs/border-color
1899
+ */
1900
+ 'border-color-t': [{
1901
+ 'border-t': scaleColor()
1902
+ }],
1903
+ /**
1904
+ * Border Color Right
1905
+ * @see https://tailwindcss.com/docs/border-color
1906
+ */
1907
+ 'border-color-r': [{
1908
+ 'border-r': scaleColor()
1909
+ }],
1910
+ /**
1911
+ * Border Color Bottom
1912
+ * @see https://tailwindcss.com/docs/border-color
1913
+ */
1914
+ 'border-color-b': [{
1915
+ 'border-b': scaleColor()
1916
+ }],
1917
+ /**
1918
+ * Border Color Left
1919
+ * @see https://tailwindcss.com/docs/border-color
1920
+ */
1921
+ 'border-color-l': [{
1922
+ 'border-l': scaleColor()
1923
+ }],
1924
+ /**
1925
+ * Divide Color
1926
+ * @see https://tailwindcss.com/docs/divide-color
1927
+ */
1928
+ 'divide-color': [{
1929
+ divide: scaleColor()
1930
+ }],
1931
+ /**
1932
+ * Outline Style
1933
+ * @see https://tailwindcss.com/docs/outline-style
1934
+ */
1935
+ 'outline-style': [{
1936
+ outline: [...scaleLineStyle(), 'none', 'hidden']
1937
+ }],
1938
+ /**
1939
+ * Outline Offset
1940
+ * @see https://tailwindcss.com/docs/outline-offset
1941
+ */
1942
+ 'outline-offset': [{
1943
+ 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]
1944
+ }],
1945
+ /**
1946
+ * Outline Width
1947
+ * @see https://tailwindcss.com/docs/outline-width
1948
+ */
1949
+ 'outline-w': [{
1950
+ outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]
1951
+ }],
1952
+ /**
1953
+ * Outline Color
1954
+ * @see https://tailwindcss.com/docs/outline-color
1955
+ */
1956
+ 'outline-color': [{
1957
+ outline: scaleColor()
1958
+ }],
1959
+ // ---------------
1960
+ // --- Effects ---
1961
+ // ---------------
1962
+ /**
1963
+ * Box Shadow
1964
+ * @see https://tailwindcss.com/docs/box-shadow
1965
+ */
1966
+ shadow: [{
1967
+ shadow: [
1968
+ // Deprecated since Tailwind CSS v4.0.0
1969
+ '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]
1970
+ }],
1971
+ /**
1972
+ * Box Shadow Color
1973
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
1974
+ */
1975
+ 'shadow-color': [{
1976
+ shadow: scaleColor()
1977
+ }],
1978
+ /**
1979
+ * Inset Box Shadow
1980
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
1981
+ */
1982
+ 'inset-shadow': [{
1983
+ 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]
1984
+ }],
1985
+ /**
1986
+ * Inset Box Shadow Color
1987
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
1988
+ */
1989
+ 'inset-shadow-color': [{
1990
+ 'inset-shadow': scaleColor()
1991
+ }],
1992
+ /**
1993
+ * Ring Width
1994
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
1995
+ */
1996
+ 'ring-w': [{
1997
+ ring: scaleBorderWidth()
1998
+ }],
1999
+ /**
2000
+ * Ring Width Inset
2001
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
2002
+ * @deprecated since Tailwind CSS v4.0.0
2003
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2004
+ */
2005
+ 'ring-w-inset': ['ring-inset'],
2006
+ /**
2007
+ * Ring Color
2008
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
2009
+ */
2010
+ 'ring-color': [{
2011
+ ring: scaleColor()
2012
+ }],
2013
+ /**
2014
+ * Ring Offset Width
2015
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
2016
+ * @deprecated since Tailwind CSS v4.0.0
2017
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2018
+ */
2019
+ 'ring-offset-w': [{
2020
+ 'ring-offset': [isNumber, isArbitraryLength]
2021
+ }],
2022
+ /**
2023
+ * Ring Offset Color
2024
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
2025
+ * @deprecated since Tailwind CSS v4.0.0
2026
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2027
+ */
2028
+ 'ring-offset-color': [{
2029
+ 'ring-offset': scaleColor()
2030
+ }],
2031
+ /**
2032
+ * Inset Ring Width
2033
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
2034
+ */
2035
+ 'inset-ring-w': [{
2036
+ 'inset-ring': scaleBorderWidth()
2037
+ }],
2038
+ /**
2039
+ * Inset Ring Color
2040
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
2041
+ */
2042
+ 'inset-ring-color': [{
2043
+ 'inset-ring': scaleColor()
2044
+ }],
2045
+ /**
2046
+ * Text Shadow
2047
+ * @see https://tailwindcss.com/docs/text-shadow
2048
+ */
2049
+ 'text-shadow': [{
2050
+ 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]
2051
+ }],
2052
+ /**
2053
+ * Text Shadow Color
2054
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
2055
+ */
2056
+ 'text-shadow-color': [{
2057
+ 'text-shadow': scaleColor()
2058
+ }],
2059
+ /**
2060
+ * Opacity
2061
+ * @see https://tailwindcss.com/docs/opacity
2062
+ */
2063
+ opacity: [{
2064
+ opacity: [isNumber, isArbitraryVariable, isArbitraryValue]
2065
+ }],
2066
+ /**
2067
+ * Mix Blend Mode
2068
+ * @see https://tailwindcss.com/docs/mix-blend-mode
2069
+ */
2070
+ 'mix-blend': [{
2071
+ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']
2072
+ }],
2073
+ /**
2074
+ * Background Blend Mode
2075
+ * @see https://tailwindcss.com/docs/background-blend-mode
2076
+ */
2077
+ 'bg-blend': [{
2078
+ 'bg-blend': scaleBlendMode()
2079
+ }],
2080
+ /**
2081
+ * Mask Clip
2082
+ * @see https://tailwindcss.com/docs/mask-clip
2083
+ */
2084
+ 'mask-clip': [{
2085
+ 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']
2086
+ }, 'mask-no-clip'],
2087
+ /**
2088
+ * Mask Composite
2089
+ * @see https://tailwindcss.com/docs/mask-composite
2090
+ */
2091
+ 'mask-composite': [{
2092
+ mask: ['add', 'subtract', 'intersect', 'exclude']
2093
+ }],
2094
+ /**
2095
+ * Mask Image
2096
+ * @see https://tailwindcss.com/docs/mask-image
2097
+ */
2098
+ 'mask-image-linear-pos': [{
2099
+ 'mask-linear': [isNumber]
2100
+ }],
2101
+ 'mask-image-linear-from-pos': [{
2102
+ 'mask-linear-from': scaleMaskImagePosition()
2103
+ }],
2104
+ 'mask-image-linear-to-pos': [{
2105
+ 'mask-linear-to': scaleMaskImagePosition()
2106
+ }],
2107
+ 'mask-image-linear-from-color': [{
2108
+ 'mask-linear-from': scaleColor()
2109
+ }],
2110
+ 'mask-image-linear-to-color': [{
2111
+ 'mask-linear-to': scaleColor()
2112
+ }],
2113
+ 'mask-image-t-from-pos': [{
2114
+ 'mask-t-from': scaleMaskImagePosition()
2115
+ }],
2116
+ 'mask-image-t-to-pos': [{
2117
+ 'mask-t-to': scaleMaskImagePosition()
2118
+ }],
2119
+ 'mask-image-t-from-color': [{
2120
+ 'mask-t-from': scaleColor()
2121
+ }],
2122
+ 'mask-image-t-to-color': [{
2123
+ 'mask-t-to': scaleColor()
2124
+ }],
2125
+ 'mask-image-r-from-pos': [{
2126
+ 'mask-r-from': scaleMaskImagePosition()
2127
+ }],
2128
+ 'mask-image-r-to-pos': [{
2129
+ 'mask-r-to': scaleMaskImagePosition()
2130
+ }],
2131
+ 'mask-image-r-from-color': [{
2132
+ 'mask-r-from': scaleColor()
2133
+ }],
2134
+ 'mask-image-r-to-color': [{
2135
+ 'mask-r-to': scaleColor()
2136
+ }],
2137
+ 'mask-image-b-from-pos': [{
2138
+ 'mask-b-from': scaleMaskImagePosition()
2139
+ }],
2140
+ 'mask-image-b-to-pos': [{
2141
+ 'mask-b-to': scaleMaskImagePosition()
2142
+ }],
2143
+ 'mask-image-b-from-color': [{
2144
+ 'mask-b-from': scaleColor()
2145
+ }],
2146
+ 'mask-image-b-to-color': [{
2147
+ 'mask-b-to': scaleColor()
2148
+ }],
2149
+ 'mask-image-l-from-pos': [{
2150
+ 'mask-l-from': scaleMaskImagePosition()
2151
+ }],
2152
+ 'mask-image-l-to-pos': [{
2153
+ 'mask-l-to': scaleMaskImagePosition()
2154
+ }],
2155
+ 'mask-image-l-from-color': [{
2156
+ 'mask-l-from': scaleColor()
2157
+ }],
2158
+ 'mask-image-l-to-color': [{
2159
+ 'mask-l-to': scaleColor()
2160
+ }],
2161
+ 'mask-image-x-from-pos': [{
2162
+ 'mask-x-from': scaleMaskImagePosition()
2163
+ }],
2164
+ 'mask-image-x-to-pos': [{
2165
+ 'mask-x-to': scaleMaskImagePosition()
2166
+ }],
2167
+ 'mask-image-x-from-color': [{
2168
+ 'mask-x-from': scaleColor()
2169
+ }],
2170
+ 'mask-image-x-to-color': [{
2171
+ 'mask-x-to': scaleColor()
2172
+ }],
2173
+ 'mask-image-y-from-pos': [{
2174
+ 'mask-y-from': scaleMaskImagePosition()
2175
+ }],
2176
+ 'mask-image-y-to-pos': [{
2177
+ 'mask-y-to': scaleMaskImagePosition()
2178
+ }],
2179
+ 'mask-image-y-from-color': [{
2180
+ 'mask-y-from': scaleColor()
2181
+ }],
2182
+ 'mask-image-y-to-color': [{
2183
+ 'mask-y-to': scaleColor()
2184
+ }],
2185
+ 'mask-image-radial': [{
2186
+ 'mask-radial': [isArbitraryVariable, isArbitraryValue]
2187
+ }],
2188
+ 'mask-image-radial-from-pos': [{
2189
+ 'mask-radial-from': scaleMaskImagePosition()
2190
+ }],
2191
+ 'mask-image-radial-to-pos': [{
2192
+ 'mask-radial-to': scaleMaskImagePosition()
2193
+ }],
2194
+ 'mask-image-radial-from-color': [{
2195
+ 'mask-radial-from': scaleColor()
2196
+ }],
2197
+ 'mask-image-radial-to-color': [{
2198
+ 'mask-radial-to': scaleColor()
2199
+ }],
2200
+ 'mask-image-radial-shape': [{
2201
+ 'mask-radial': ['circle', 'ellipse']
2202
+ }],
2203
+ 'mask-image-radial-size': [{
2204
+ 'mask-radial': [{
2205
+ closest: ['side', 'corner'],
2206
+ farthest: ['side', 'corner']
2207
+ }]
2208
+ }],
2209
+ 'mask-image-radial-pos': [{
2210
+ 'mask-radial-at': scalePosition()
2211
+ }],
2212
+ 'mask-image-conic-pos': [{
2213
+ 'mask-conic': [isNumber]
2214
+ }],
2215
+ 'mask-image-conic-from-pos': [{
2216
+ 'mask-conic-from': scaleMaskImagePosition()
2217
+ }],
2218
+ 'mask-image-conic-to-pos': [{
2219
+ 'mask-conic-to': scaleMaskImagePosition()
2220
+ }],
2221
+ 'mask-image-conic-from-color': [{
2222
+ 'mask-conic-from': scaleColor()
2223
+ }],
2224
+ 'mask-image-conic-to-color': [{
2225
+ 'mask-conic-to': scaleColor()
2226
+ }],
2227
+ /**
2228
+ * Mask Mode
2229
+ * @see https://tailwindcss.com/docs/mask-mode
2230
+ */
2231
+ 'mask-mode': [{
2232
+ mask: ['alpha', 'luminance', 'match']
2233
+ }],
2234
+ /**
2235
+ * Mask Origin
2236
+ * @see https://tailwindcss.com/docs/mask-origin
2237
+ */
2238
+ 'mask-origin': [{
2239
+ 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']
2240
+ }],
2241
+ /**
2242
+ * Mask Position
2243
+ * @see https://tailwindcss.com/docs/mask-position
2244
+ */
2245
+ 'mask-position': [{
2246
+ mask: scaleBgPosition()
2247
+ }],
2248
+ /**
2249
+ * Mask Repeat
2250
+ * @see https://tailwindcss.com/docs/mask-repeat
2251
+ */
2252
+ 'mask-repeat': [{
2253
+ mask: scaleBgRepeat()
2254
+ }],
2255
+ /**
2256
+ * Mask Size
2257
+ * @see https://tailwindcss.com/docs/mask-size
2258
+ */
2259
+ 'mask-size': [{
2260
+ mask: scaleBgSize()
2261
+ }],
2262
+ /**
2263
+ * Mask Type
2264
+ * @see https://tailwindcss.com/docs/mask-type
2265
+ */
2266
+ 'mask-type': [{
2267
+ 'mask-type': ['alpha', 'luminance']
2268
+ }],
2269
+ /**
2270
+ * Mask Image
2271
+ * @see https://tailwindcss.com/docs/mask-image
2272
+ */
2273
+ 'mask-image': [{
2274
+ mask: ['none', isArbitraryVariable, isArbitraryValue]
2275
+ }],
2276
+ // ---------------
2277
+ // --- Filters ---
2278
+ // ---------------
2279
+ /**
2280
+ * Filter
2281
+ * @see https://tailwindcss.com/docs/filter
2282
+ */
2283
+ filter: [{
2284
+ filter: [
2285
+ // Deprecated since Tailwind CSS v3.0.0
2286
+ '', 'none', isArbitraryVariable, isArbitraryValue]
2287
+ }],
2288
+ /**
2289
+ * Blur
2290
+ * @see https://tailwindcss.com/docs/blur
2291
+ */
2292
+ blur: [{
2293
+ blur: scaleBlur()
2294
+ }],
2295
+ /**
2296
+ * Brightness
2297
+ * @see https://tailwindcss.com/docs/brightness
2298
+ */
2299
+ brightness: [{
2300
+ brightness: [isNumber, isArbitraryVariable, isArbitraryValue]
2301
+ }],
2302
+ /**
2303
+ * Contrast
2304
+ * @see https://tailwindcss.com/docs/contrast
2305
+ */
2306
+ contrast: [{
2307
+ contrast: [isNumber, isArbitraryVariable, isArbitraryValue]
2308
+ }],
2309
+ /**
2310
+ * Drop Shadow
2311
+ * @see https://tailwindcss.com/docs/drop-shadow
2312
+ */
2313
+ 'drop-shadow': [{
2314
+ 'drop-shadow': [
2315
+ // Deprecated since Tailwind CSS v4.0.0
2316
+ '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]
2317
+ }],
2318
+ /**
2319
+ * Drop Shadow Color
2320
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
2321
+ */
2322
+ 'drop-shadow-color': [{
2323
+ 'drop-shadow': scaleColor()
2324
+ }],
2325
+ /**
2326
+ * Grayscale
2327
+ * @see https://tailwindcss.com/docs/grayscale
2328
+ */
2329
+ grayscale: [{
2330
+ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]
2331
+ }],
2332
+ /**
2333
+ * Hue Rotate
2334
+ * @see https://tailwindcss.com/docs/hue-rotate
2335
+ */
2336
+ 'hue-rotate': [{
2337
+ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]
2338
+ }],
2339
+ /**
2340
+ * Invert
2341
+ * @see https://tailwindcss.com/docs/invert
2342
+ */
2343
+ invert: [{
2344
+ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]
2345
+ }],
2346
+ /**
2347
+ * Saturate
2348
+ * @see https://tailwindcss.com/docs/saturate
2349
+ */
2350
+ saturate: [{
2351
+ saturate: [isNumber, isArbitraryVariable, isArbitraryValue]
2352
+ }],
2353
+ /**
2354
+ * Sepia
2355
+ * @see https://tailwindcss.com/docs/sepia
2356
+ */
2357
+ sepia: [{
2358
+ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]
2359
+ }],
2360
+ /**
2361
+ * Backdrop Filter
2362
+ * @see https://tailwindcss.com/docs/backdrop-filter
2363
+ */
2364
+ 'backdrop-filter': [{
2365
+ 'backdrop-filter': [
2366
+ // Deprecated since Tailwind CSS v3.0.0
2367
+ '', 'none', isArbitraryVariable, isArbitraryValue]
2368
+ }],
2369
+ /**
2370
+ * Backdrop Blur
2371
+ * @see https://tailwindcss.com/docs/backdrop-blur
2372
+ */
2373
+ 'backdrop-blur': [{
2374
+ 'backdrop-blur': scaleBlur()
2375
+ }],
2376
+ /**
2377
+ * Backdrop Brightness
2378
+ * @see https://tailwindcss.com/docs/backdrop-brightness
2379
+ */
2380
+ 'backdrop-brightness': [{
2381
+ 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]
2382
+ }],
2383
+ /**
2384
+ * Backdrop Contrast
2385
+ * @see https://tailwindcss.com/docs/backdrop-contrast
2386
+ */
2387
+ 'backdrop-contrast': [{
2388
+ 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]
2389
+ }],
2390
+ /**
2391
+ * Backdrop Grayscale
2392
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
2393
+ */
2394
+ 'backdrop-grayscale': [{
2395
+ 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]
2396
+ }],
2397
+ /**
2398
+ * Backdrop Hue Rotate
2399
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
2400
+ */
2401
+ 'backdrop-hue-rotate': [{
2402
+ 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]
2403
+ }],
2404
+ /**
2405
+ * Backdrop Invert
2406
+ * @see https://tailwindcss.com/docs/backdrop-invert
2407
+ */
2408
+ 'backdrop-invert': [{
2409
+ 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]
2410
+ }],
2411
+ /**
2412
+ * Backdrop Opacity
2413
+ * @see https://tailwindcss.com/docs/backdrop-opacity
2414
+ */
2415
+ 'backdrop-opacity': [{
2416
+ 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]
2417
+ }],
2418
+ /**
2419
+ * Backdrop Saturate
2420
+ * @see https://tailwindcss.com/docs/backdrop-saturate
2421
+ */
2422
+ 'backdrop-saturate': [{
2423
+ 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]
2424
+ }],
2425
+ /**
2426
+ * Backdrop Sepia
2427
+ * @see https://tailwindcss.com/docs/backdrop-sepia
2428
+ */
2429
+ 'backdrop-sepia': [{
2430
+ 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]
2431
+ }],
2432
+ // --------------
2433
+ // --- Tables ---
2434
+ // --------------
2435
+ /**
2436
+ * Border Collapse
2437
+ * @see https://tailwindcss.com/docs/border-collapse
2438
+ */
2439
+ 'border-collapse': [{
2440
+ border: ['collapse', 'separate']
2441
+ }],
2442
+ /**
2443
+ * Border Spacing
2444
+ * @see https://tailwindcss.com/docs/border-spacing
2445
+ */
2446
+ 'border-spacing': [{
2447
+ 'border-spacing': scaleUnambiguousSpacing()
2448
+ }],
2449
+ /**
2450
+ * Border Spacing X
2451
+ * @see https://tailwindcss.com/docs/border-spacing
2452
+ */
2453
+ 'border-spacing-x': [{
2454
+ 'border-spacing-x': scaleUnambiguousSpacing()
2455
+ }],
2456
+ /**
2457
+ * Border Spacing Y
2458
+ * @see https://tailwindcss.com/docs/border-spacing
2459
+ */
2460
+ 'border-spacing-y': [{
2461
+ 'border-spacing-y': scaleUnambiguousSpacing()
2462
+ }],
2463
+ /**
2464
+ * Table Layout
2465
+ * @see https://tailwindcss.com/docs/table-layout
2466
+ */
2467
+ 'table-layout': [{
2468
+ table: ['auto', 'fixed']
2469
+ }],
2470
+ /**
2471
+ * Caption Side
2472
+ * @see https://tailwindcss.com/docs/caption-side
2473
+ */
2474
+ caption: [{
2475
+ caption: ['top', 'bottom']
2476
+ }],
2477
+ // ---------------------------------
2478
+ // --- Transitions and Animation ---
2479
+ // ---------------------------------
2480
+ /**
2481
+ * Transition Property
2482
+ * @see https://tailwindcss.com/docs/transition-property
2483
+ */
2484
+ transition: [{
2485
+ transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]
2486
+ }],
2487
+ /**
2488
+ * Transition Behavior
2489
+ * @see https://tailwindcss.com/docs/transition-behavior
2490
+ */
2491
+ 'transition-behavior': [{
2492
+ transition: ['normal', 'discrete']
2493
+ }],
2494
+ /**
2495
+ * Transition Duration
2496
+ * @see https://tailwindcss.com/docs/transition-duration
2497
+ */
2498
+ duration: [{
2499
+ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]
2500
+ }],
2501
+ /**
2502
+ * Transition Timing Function
2503
+ * @see https://tailwindcss.com/docs/transition-timing-function
2504
+ */
2505
+ ease: [{
2506
+ ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]
2507
+ }],
2508
+ /**
2509
+ * Transition Delay
2510
+ * @see https://tailwindcss.com/docs/transition-delay
2511
+ */
2512
+ delay: [{
2513
+ delay: [isNumber, isArbitraryVariable, isArbitraryValue]
2514
+ }],
2515
+ /**
2516
+ * Animation
2517
+ * @see https://tailwindcss.com/docs/animation
2518
+ */
2519
+ animate: [{
2520
+ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]
2521
+ }],
2522
+ // ------------------
2523
+ // --- Transforms ---
2524
+ // ------------------
2525
+ /**
2526
+ * Backface Visibility
2527
+ * @see https://tailwindcss.com/docs/backface-visibility
2528
+ */
2529
+ backface: [{
2530
+ backface: ['hidden', 'visible']
2531
+ }],
2532
+ /**
2533
+ * Perspective
2534
+ * @see https://tailwindcss.com/docs/perspective
2535
+ */
2536
+ perspective: [{
2537
+ perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]
2538
+ }],
2539
+ /**
2540
+ * Perspective Origin
2541
+ * @see https://tailwindcss.com/docs/perspective-origin
2542
+ */
2543
+ 'perspective-origin': [{
2544
+ 'perspective-origin': scalePositionWithArbitrary()
2545
+ }],
2546
+ /**
2547
+ * Rotate
2548
+ * @see https://tailwindcss.com/docs/rotate
2549
+ */
2550
+ rotate: [{
2551
+ rotate: scaleRotate()
2552
+ }],
2553
+ /**
2554
+ * Rotate X
2555
+ * @see https://tailwindcss.com/docs/rotate
2556
+ */
2557
+ 'rotate-x': [{
2558
+ 'rotate-x': scaleRotate()
2559
+ }],
2560
+ /**
2561
+ * Rotate Y
2562
+ * @see https://tailwindcss.com/docs/rotate
2563
+ */
2564
+ 'rotate-y': [{
2565
+ 'rotate-y': scaleRotate()
2566
+ }],
2567
+ /**
2568
+ * Rotate Z
2569
+ * @see https://tailwindcss.com/docs/rotate
2570
+ */
2571
+ 'rotate-z': [{
2572
+ 'rotate-z': scaleRotate()
2573
+ }],
2574
+ /**
2575
+ * Scale
2576
+ * @see https://tailwindcss.com/docs/scale
2577
+ */
2578
+ scale: [{
2579
+ scale: scaleScale()
2580
+ }],
2581
+ /**
2582
+ * Scale X
2583
+ * @see https://tailwindcss.com/docs/scale
2584
+ */
2585
+ 'scale-x': [{
2586
+ 'scale-x': scaleScale()
2587
+ }],
2588
+ /**
2589
+ * Scale Y
2590
+ * @see https://tailwindcss.com/docs/scale
2591
+ */
2592
+ 'scale-y': [{
2593
+ 'scale-y': scaleScale()
2594
+ }],
2595
+ /**
2596
+ * Scale Z
2597
+ * @see https://tailwindcss.com/docs/scale
2598
+ */
2599
+ 'scale-z': [{
2600
+ 'scale-z': scaleScale()
2601
+ }],
2602
+ /**
2603
+ * Scale 3D
2604
+ * @see https://tailwindcss.com/docs/scale
2605
+ */
2606
+ 'scale-3d': ['scale-3d'],
2607
+ /**
2608
+ * Skew
2609
+ * @see https://tailwindcss.com/docs/skew
2610
+ */
2611
+ skew: [{
2612
+ skew: scaleSkew()
2613
+ }],
2614
+ /**
2615
+ * Skew X
2616
+ * @see https://tailwindcss.com/docs/skew
2617
+ */
2618
+ 'skew-x': [{
2619
+ 'skew-x': scaleSkew()
2620
+ }],
2621
+ /**
2622
+ * Skew Y
2623
+ * @see https://tailwindcss.com/docs/skew
2624
+ */
2625
+ 'skew-y': [{
2626
+ 'skew-y': scaleSkew()
2627
+ }],
2628
+ /**
2629
+ * Transform
2630
+ * @see https://tailwindcss.com/docs/transform
2631
+ */
2632
+ transform: [{
2633
+ transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']
2634
+ }],
2635
+ /**
2636
+ * Transform Origin
2637
+ * @see https://tailwindcss.com/docs/transform-origin
2638
+ */
2639
+ 'transform-origin': [{
2640
+ origin: scalePositionWithArbitrary()
2641
+ }],
2642
+ /**
2643
+ * Transform Style
2644
+ * @see https://tailwindcss.com/docs/transform-style
2645
+ */
2646
+ 'transform-style': [{
2647
+ transform: ['3d', 'flat']
2648
+ }],
2649
+ /**
2650
+ * Translate
2651
+ * @see https://tailwindcss.com/docs/translate
2652
+ */
2653
+ translate: [{
2654
+ translate: scaleTranslate()
2655
+ }],
2656
+ /**
2657
+ * Translate X
2658
+ * @see https://tailwindcss.com/docs/translate
2659
+ */
2660
+ 'translate-x': [{
2661
+ 'translate-x': scaleTranslate()
2662
+ }],
2663
+ /**
2664
+ * Translate Y
2665
+ * @see https://tailwindcss.com/docs/translate
2666
+ */
2667
+ 'translate-y': [{
2668
+ 'translate-y': scaleTranslate()
2669
+ }],
2670
+ /**
2671
+ * Translate Z
2672
+ * @see https://tailwindcss.com/docs/translate
2673
+ */
2674
+ 'translate-z': [{
2675
+ 'translate-z': scaleTranslate()
2676
+ }],
2677
+ /**
2678
+ * Translate None
2679
+ * @see https://tailwindcss.com/docs/translate
2680
+ */
2681
+ 'translate-none': ['translate-none'],
2682
+ // ---------------------
2683
+ // --- Interactivity ---
2684
+ // ---------------------
2685
+ /**
2686
+ * Accent Color
2687
+ * @see https://tailwindcss.com/docs/accent-color
2688
+ */
2689
+ accent: [{
2690
+ accent: scaleColor()
2691
+ }],
2692
+ /**
2693
+ * Appearance
2694
+ * @see https://tailwindcss.com/docs/appearance
2695
+ */
2696
+ appearance: [{
2697
+ appearance: ['none', 'auto']
2698
+ }],
2699
+ /**
2700
+ * Caret Color
2701
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2702
+ */
2703
+ 'caret-color': [{
2704
+ caret: scaleColor()
2705
+ }],
2706
+ /**
2707
+ * Color Scheme
2708
+ * @see https://tailwindcss.com/docs/color-scheme
2709
+ */
2710
+ 'color-scheme': [{
2711
+ scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']
2712
+ }],
2713
+ /**
2714
+ * Cursor
2715
+ * @see https://tailwindcss.com/docs/cursor
2716
+ */
2717
+ cursor: [{
2718
+ cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]
2719
+ }],
2720
+ /**
2721
+ * Field Sizing
2722
+ * @see https://tailwindcss.com/docs/field-sizing
2723
+ */
2724
+ 'field-sizing': [{
2725
+ 'field-sizing': ['fixed', 'content']
2726
+ }],
2727
+ /**
2728
+ * Pointer Events
2729
+ * @see https://tailwindcss.com/docs/pointer-events
2730
+ */
2731
+ 'pointer-events': [{
2732
+ 'pointer-events': ['auto', 'none']
2733
+ }],
2734
+ /**
2735
+ * Resize
2736
+ * @see https://tailwindcss.com/docs/resize
2737
+ */
2738
+ resize: [{
2739
+ resize: ['none', '', 'y', 'x']
2740
+ }],
2741
+ /**
2742
+ * Scroll Behavior
2743
+ * @see https://tailwindcss.com/docs/scroll-behavior
2744
+ */
2745
+ 'scroll-behavior': [{
2746
+ scroll: ['auto', 'smooth']
2747
+ }],
2748
+ /**
2749
+ * Scroll Margin
2750
+ * @see https://tailwindcss.com/docs/scroll-margin
2751
+ */
2752
+ 'scroll-m': [{
2753
+ 'scroll-m': scaleUnambiguousSpacing()
2754
+ }],
2755
+ /**
2756
+ * Scroll Margin X
2757
+ * @see https://tailwindcss.com/docs/scroll-margin
2758
+ */
2759
+ 'scroll-mx': [{
2760
+ 'scroll-mx': scaleUnambiguousSpacing()
2761
+ }],
2762
+ /**
2763
+ * Scroll Margin Y
2764
+ * @see https://tailwindcss.com/docs/scroll-margin
2765
+ */
2766
+ 'scroll-my': [{
2767
+ 'scroll-my': scaleUnambiguousSpacing()
2768
+ }],
2769
+ /**
2770
+ * Scroll Margin Start
2771
+ * @see https://tailwindcss.com/docs/scroll-margin
2772
+ */
2773
+ 'scroll-ms': [{
2774
+ 'scroll-ms': scaleUnambiguousSpacing()
2775
+ }],
2776
+ /**
2777
+ * Scroll Margin End
2778
+ * @see https://tailwindcss.com/docs/scroll-margin
2779
+ */
2780
+ 'scroll-me': [{
2781
+ 'scroll-me': scaleUnambiguousSpacing()
2782
+ }],
2783
+ /**
2784
+ * Scroll Margin Top
2785
+ * @see https://tailwindcss.com/docs/scroll-margin
2786
+ */
2787
+ 'scroll-mt': [{
2788
+ 'scroll-mt': scaleUnambiguousSpacing()
2789
+ }],
2790
+ /**
2791
+ * Scroll Margin Right
2792
+ * @see https://tailwindcss.com/docs/scroll-margin
2793
+ */
2794
+ 'scroll-mr': [{
2795
+ 'scroll-mr': scaleUnambiguousSpacing()
2796
+ }],
2797
+ /**
2798
+ * Scroll Margin Bottom
2799
+ * @see https://tailwindcss.com/docs/scroll-margin
2800
+ */
2801
+ 'scroll-mb': [{
2802
+ 'scroll-mb': scaleUnambiguousSpacing()
2803
+ }],
2804
+ /**
2805
+ * Scroll Margin Left
2806
+ * @see https://tailwindcss.com/docs/scroll-margin
2807
+ */
2808
+ 'scroll-ml': [{
2809
+ 'scroll-ml': scaleUnambiguousSpacing()
2810
+ }],
2811
+ /**
2812
+ * Scroll Padding
2813
+ * @see https://tailwindcss.com/docs/scroll-padding
2814
+ */
2815
+ 'scroll-p': [{
2816
+ 'scroll-p': scaleUnambiguousSpacing()
2817
+ }],
2818
+ /**
2819
+ * Scroll Padding X
2820
+ * @see https://tailwindcss.com/docs/scroll-padding
2821
+ */
2822
+ 'scroll-px': [{
2823
+ 'scroll-px': scaleUnambiguousSpacing()
2824
+ }],
2825
+ /**
2826
+ * Scroll Padding Y
2827
+ * @see https://tailwindcss.com/docs/scroll-padding
2828
+ */
2829
+ 'scroll-py': [{
2830
+ 'scroll-py': scaleUnambiguousSpacing()
2831
+ }],
2832
+ /**
2833
+ * Scroll Padding Start
2834
+ * @see https://tailwindcss.com/docs/scroll-padding
2835
+ */
2836
+ 'scroll-ps': [{
2837
+ 'scroll-ps': scaleUnambiguousSpacing()
2838
+ }],
2839
+ /**
2840
+ * Scroll Padding End
2841
+ * @see https://tailwindcss.com/docs/scroll-padding
2842
+ */
2843
+ 'scroll-pe': [{
2844
+ 'scroll-pe': scaleUnambiguousSpacing()
2845
+ }],
2846
+ /**
2847
+ * Scroll Padding Top
2848
+ * @see https://tailwindcss.com/docs/scroll-padding
2849
+ */
2850
+ 'scroll-pt': [{
2851
+ 'scroll-pt': scaleUnambiguousSpacing()
2852
+ }],
2853
+ /**
2854
+ * Scroll Padding Right
2855
+ * @see https://tailwindcss.com/docs/scroll-padding
2856
+ */
2857
+ 'scroll-pr': [{
2858
+ 'scroll-pr': scaleUnambiguousSpacing()
2859
+ }],
2860
+ /**
2861
+ * Scroll Padding Bottom
2862
+ * @see https://tailwindcss.com/docs/scroll-padding
2863
+ */
2864
+ 'scroll-pb': [{
2865
+ 'scroll-pb': scaleUnambiguousSpacing()
2866
+ }],
2867
+ /**
2868
+ * Scroll Padding Left
2869
+ * @see https://tailwindcss.com/docs/scroll-padding
2870
+ */
2871
+ 'scroll-pl': [{
2872
+ 'scroll-pl': scaleUnambiguousSpacing()
2873
+ }],
2874
+ /**
2875
+ * Scroll Snap Align
2876
+ * @see https://tailwindcss.com/docs/scroll-snap-align
2877
+ */
2878
+ 'snap-align': [{
2879
+ snap: ['start', 'end', 'center', 'align-none']
2880
+ }],
2881
+ /**
2882
+ * Scroll Snap Stop
2883
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
2884
+ */
2885
+ 'snap-stop': [{
2886
+ snap: ['normal', 'always']
2887
+ }],
2888
+ /**
2889
+ * Scroll Snap Type
2890
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2891
+ */
2892
+ 'snap-type': [{
2893
+ snap: ['none', 'x', 'y', 'both']
2894
+ }],
2895
+ /**
2896
+ * Scroll Snap Type Strictness
2897
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2898
+ */
2899
+ 'snap-strictness': [{
2900
+ snap: ['mandatory', 'proximity']
2901
+ }],
2902
+ /**
2903
+ * Touch Action
2904
+ * @see https://tailwindcss.com/docs/touch-action
2905
+ */
2906
+ touch: [{
2907
+ touch: ['auto', 'none', 'manipulation']
2908
+ }],
2909
+ /**
2910
+ * Touch Action X
2911
+ * @see https://tailwindcss.com/docs/touch-action
2912
+ */
2913
+ 'touch-x': [{
2914
+ 'touch-pan': ['x', 'left', 'right']
2915
+ }],
2916
+ /**
2917
+ * Touch Action Y
2918
+ * @see https://tailwindcss.com/docs/touch-action
2919
+ */
2920
+ 'touch-y': [{
2921
+ 'touch-pan': ['y', 'up', 'down']
2922
+ }],
2923
+ /**
2924
+ * Touch Action Pinch Zoom
2925
+ * @see https://tailwindcss.com/docs/touch-action
2926
+ */
2927
+ 'touch-pz': ['touch-pinch-zoom'],
2928
+ /**
2929
+ * User Select
2930
+ * @see https://tailwindcss.com/docs/user-select
2931
+ */
2932
+ select: [{
2933
+ select: ['none', 'text', 'all', 'auto']
2934
+ }],
2935
+ /**
2936
+ * Will Change
2937
+ * @see https://tailwindcss.com/docs/will-change
2938
+ */
2939
+ 'will-change': [{
2940
+ 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]
2941
+ }],
2942
+ // -----------
2943
+ // --- SVG ---
2944
+ // -----------
2945
+ /**
2946
+ * Fill
2947
+ * @see https://tailwindcss.com/docs/fill
2948
+ */
2949
+ fill: [{
2950
+ fill: ['none', ...scaleColor()]
2951
+ }],
2952
+ /**
2953
+ * Stroke Width
2954
+ * @see https://tailwindcss.com/docs/stroke-width
2955
+ */
2956
+ 'stroke-w': [{
2957
+ stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]
2958
+ }],
2959
+ /**
2960
+ * Stroke
2961
+ * @see https://tailwindcss.com/docs/stroke
2962
+ */
2963
+ stroke: [{
2964
+ stroke: ['none', ...scaleColor()]
2965
+ }],
2966
+ // ---------------------
2967
+ // --- Accessibility ---
2968
+ // ---------------------
2969
+ /**
2970
+ * Forced Color Adjust
2971
+ * @see https://tailwindcss.com/docs/forced-color-adjust
2972
+ */
2973
+ 'forced-color-adjust': [{
2974
+ 'forced-color-adjust': ['auto', 'none']
2975
+ }]
2976
+ },
2977
+ conflictingClassGroups: {
2978
+ overflow: ['overflow-x', 'overflow-y'],
2979
+ overscroll: ['overscroll-x', 'overscroll-y'],
2980
+ inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],
2981
+ 'inset-x': ['right', 'left'],
2982
+ 'inset-y': ['top', 'bottom'],
2983
+ flex: ['basis', 'grow', 'shrink'],
2984
+ gap: ['gap-x', 'gap-y'],
2985
+ p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],
2986
+ px: ['pr', 'pl'],
2987
+ py: ['pt', 'pb'],
2988
+ m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],
2989
+ mx: ['mr', 'ml'],
2990
+ my: ['mt', 'mb'],
2991
+ size: ['w', 'h'],
2992
+ 'font-size': ['leading'],
2993
+ 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],
2994
+ 'fvn-ordinal': ['fvn-normal'],
2995
+ 'fvn-slashed-zero': ['fvn-normal'],
2996
+ 'fvn-figure': ['fvn-normal'],
2997
+ 'fvn-spacing': ['fvn-normal'],
2998
+ 'fvn-fraction': ['fvn-normal'],
2999
+ 'line-clamp': ['display', 'overflow'],
3000
+ rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],
3001
+ 'rounded-s': ['rounded-ss', 'rounded-es'],
3002
+ 'rounded-e': ['rounded-se', 'rounded-ee'],
3003
+ 'rounded-t': ['rounded-tl', 'rounded-tr'],
3004
+ 'rounded-r': ['rounded-tr', 'rounded-br'],
3005
+ 'rounded-b': ['rounded-br', 'rounded-bl'],
3006
+ 'rounded-l': ['rounded-tl', 'rounded-bl'],
3007
+ 'border-spacing': ['border-spacing-x', 'border-spacing-y'],
3008
+ 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],
3009
+ 'border-w-x': ['border-w-r', 'border-w-l'],
3010
+ 'border-w-y': ['border-w-t', 'border-w-b'],
3011
+ 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],
3012
+ 'border-color-x': ['border-color-r', 'border-color-l'],
3013
+ 'border-color-y': ['border-color-t', 'border-color-b'],
3014
+ translate: ['translate-x', 'translate-y', 'translate-none'],
3015
+ 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],
3016
+ 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],
3017
+ 'scroll-mx': ['scroll-mr', 'scroll-ml'],
3018
+ 'scroll-my': ['scroll-mt', 'scroll-mb'],
3019
+ 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],
3020
+ 'scroll-px': ['scroll-pr', 'scroll-pl'],
3021
+ 'scroll-py': ['scroll-pt', 'scroll-pb'],
3022
+ touch: ['touch-x', 'touch-y', 'touch-pz'],
3023
+ 'touch-x': ['touch'],
3024
+ 'touch-y': ['touch'],
3025
+ 'touch-pz': ['touch']
3026
+ },
3027
+ conflictingClassGroupModifiers: {
3028
+ 'font-size': ['leading']
3029
+ },
3030
+ orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']
3031
+ };
3032
+ };
3033
+ const twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);
3034
+
3035
+ export { createTailwindMerge, fromTheme, getDefaultConfig, twJoin, twMerge };