@ngenux/ngage-whiteboarding 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -36720,7 +36720,7 @@ const BoardComponent = forwardRef(({ roomId = 'default-room', queueAction, hasTo
36720
36720
  state.tool === 'select' ? 'default' :
36721
36721
  state.tool === 'pan' ? 'grab' : 'crosshair'
36722
36722
  }), [hasToolAccess, state.tool]);
36723
- return (jsx("div", { ref: containerRef, className: "w-full h-full bg-white relative", children: jsx(Stage, { ref: stageRef, width: size.width, height: size.height, onMouseDown: handleMouseDown, onMousemove: handleMouseMove, onMouseup: handleMouseUp, onTouchStart: handleMouseDown, onTouchMove: handleMouseMove, onTouchEnd: handleMouseUp, style: cursorStyle, children: jsxs(Layer, { children: [useMemo(() => {
36723
+ return (jsx("div", { ref: containerRef, className: "w-full h-full relative", style: { backgroundColor: state.backgroundColor }, children: jsx(Stage, { ref: stageRef, width: size.width, height: size.height, onMouseDown: handleMouseDown, onMousemove: handleMouseMove, onMouseup: handleMouseUp, onTouchStart: handleMouseDown, onTouchMove: handleMouseMove, onTouchEnd: handleMouseUp, style: cursorStyle, children: jsxs(Layer, { children: [useMemo(() => {
36724
36724
  if (state.backgroundColor === 'transparent')
36725
36725
  return null;
36726
36726
  return (jsx(Rect, { x: 0, y: 0, width: size.width, height: size.height, fill: state.backgroundColor, listening: false }));
@@ -37030,7 +37030,7 @@ const Undo2 = createLucideIcon("Undo2", [
37030
37030
  ]);
37031
37031
 
37032
37032
  // Top Toolbar Component
37033
- const TopToolbar = ({ queueAction, handleExportImage, handleClear, handleLockToggle, isAdmin = false, hasToolAccess = false, isGloballyUnlocked = false, shouldBeOpenByDefault = true }) => {
37033
+ const TopToolbar = ({ queueAction, handleExportImage, handleClear, handleLockToggle, isAdmin = false, hasToolAccess = false, isGloballyUnlocked = false, shouldBeOpenByDefault = true, hasVideoBackground = false }) => {
37034
37034
  const { state, dispatch } = useWhiteboard();
37035
37035
  const [isVisible, setIsVisible] = useState(shouldBeOpenByDefault);
37036
37036
  const handleToggleVisibility = () => {
@@ -37094,16 +37094,16 @@ const TopToolbar = ({ queueAction, handleExportImage, handleClear, handleLockTog
37094
37094
  }
37095
37095
  }
37096
37096
  };
37097
- return (jsxs(Fragment, { children: [jsxs("div", { className: "absolute top-5 left-1/2 transform -translate-x-1/2 flex flex-col items-center z-40", children: [!isVisible && (jsx("button", { className: "w-10 h-10 flex items-center justify-center bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300", onClick: handleToggleVisibility, title: "Show Tools", children: jsx(ChevronDown, { size: 16, className: "text-current" }) })), isVisible && (jsx("div", { className: "bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg", children: jsxs("div", { className: "flex items-center gap-1 p-1", children: [isAdmin && (jsx("button", { className: `w-10 h-10 flex items-center justify-center rounded transition-colors ${isGloballyUnlocked
37097
+ return (jsxs(Fragment, { children: [jsxs("div", { className: "absolute top-5 left-1/2 transform -translate-x-1/2 flex flex-col items-center z-10", children: [!isVisible && (jsx("button", { className: "w-10 h-10 flex items-center justify-center bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300", onClick: handleToggleVisibility, title: "Show Tools", children: jsx(ChevronDown, { size: 16, className: "text-current" }) })), isVisible && (jsx("div", { className: "bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg", children: jsxs("div", { className: "flex items-center gap-1 p-1", children: [isAdmin && (jsx("button", { className: `w-10 h-10 flex items-center justify-center rounded transition-colors ${isGloballyUnlocked
37098
37098
  ? 'bg-green-100 dark:bg-green-900/50 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-900/70'
37099
37099
  : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-600'}`, onClick: handleLockToggle, title: isGloballyUnlocked ? 'Whiteboard unlocked for all users - Click to lock' : 'Whiteboard locked - Click to unlock for all users', children: isGloballyUnlocked ? jsx(LockOpen, { size: 16, className: "text-current" }) : jsx(Lock, { size: 16, className: "text-current" }) })), jsx("button", { className: `w-10 h-10 flex items-center justify-center rounded ${hasToolAccess ? 'hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300' : 'opacity-50 cursor-not-allowed text-gray-400 dark:text-gray-600'}`, onClick: handleUndo, disabled: !hasToolAccess, title: hasToolAccess ? 'Undo' : 'Access restricted', children: jsx(Undo2, { size: 16, className: "text-current" }) }), jsx("button", { className: `w-10 h-10 flex items-center justify-center rounded ${hasToolAccess ? 'hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300' : 'opacity-50 cursor-not-allowed text-gray-400 dark:text-gray-600'}`, onClick: handleRedo, disabled: !hasToolAccess, title: hasToolAccess ? 'Redo' : 'Access restricted', children: jsx(Redo2, { size: 16, className: "text-current" }) }), jsx("div", { className: "w-px h-6 bg-gray-300 dark:bg-gray-600 mx-1" }), tools.map((tool) => (jsx("button", { className: `w-10 h-10 flex items-center justify-center rounded transition-colors ${!hasToolAccess
37100
37100
  ? 'opacity-50 cursor-not-allowed text-gray-400 dark:text-gray-600'
37101
37101
  : state.tool === tool.type
37102
37102
  ? 'bg-purple-100 dark:bg-purple-900/50 text-purple-600 dark:text-purple-300'
37103
- : 'text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700'}`, onClick: () => handleToolSelect(tool.type), disabled: !hasToolAccess, title: hasToolAccess ? tool.label : `${tool.label} - Access restricted`, children: React__default.cloneElement(tool.icon, { className: 'text-current' }) }, tool.type))), jsx("button", { className: "w-10 h-10 flex items-center justify-center rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300", onClick: handleToggleVisibility, title: "Hide Tools", children: jsx(ChevronUp, { size: 16, className: "text-current" }) })] }) }))] }), jsxs("div", { className: "absolute top-5 right-20 flex items-center gap-2 z-40", children: [isAdmin && (jsxs("button", { className: "h-10 px-3 flex items-center gap-2 border border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700 rounded-lg text-sm bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-200 shadow-lg", onClick: handleClear, children: [jsx(Eraser, { size: 16, className: "text-current" }), "Clear"] })), jsxs("button", { className: "h-10 px-3 flex items-center gap-2 bg-purple-500 hover:bg-purple-600 dark:bg-purple-600 dark:hover:bg-purple-700 text-white rounded-lg text-sm shadow-lg", onClick: () => handleExportImage?.('png'), children: [jsx(Save, { size: 16, className: "text-current" }), "Save"] })] })] }));
37103
+ : 'text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700'}`, onClick: () => handleToolSelect(tool.type), disabled: !hasToolAccess, title: hasToolAccess ? tool.label : `${tool.label} - Access restricted`, children: React__default.cloneElement(tool.icon, { className: 'text-current' }) }, tool.type))), jsx("button", { className: "w-10 h-10 flex items-center justify-center rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300", onClick: handleToggleVisibility, title: "Hide Tools", children: jsx(ChevronUp, { size: 16, className: "text-current" }) })] }) }))] }), jsxs("div", { className: "absolute top-5 right-20 flex items-center gap-2 z-10", children: [isAdmin && (jsxs("button", { className: "h-10 px-3 flex items-center gap-2 border border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700 rounded-lg text-sm bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-200 shadow-lg", onClick: handleClear, children: [jsx(Eraser, { size: 16, className: "text-current" }), "Clear"] })), jsxs("button", { className: "h-10 px-3 flex items-center gap-2 bg-purple-500 hover:bg-purple-600 dark:bg-purple-600 dark:hover:bg-purple-700 text-white rounded-lg text-sm shadow-lg", onClick: () => handleExportImage?.('png'), children: [jsx(Save, { size: 16, className: "text-current" }), "Save"] })] })] }));
37104
37104
  };
37105
37105
  // Left Sidebar Component
37106
- const LeftSidebar = ({ queueAction, hasToolAccess = false, shouldBeOpenByDefault = false }) => {
37106
+ const LeftSidebar = ({ queueAction, hasToolAccess = false, shouldBeOpenByDefault = false, disableBackgroundChange = false, hasVideoBackground = false }) => {
37107
37107
  const { state, dispatch } = useWhiteboard();
37108
37108
  const [isVisible, setIsVisible] = useState(shouldBeOpenByDefault);
37109
37109
  const [isDragging, setIsDragging] = useState(false);
@@ -37111,6 +37111,13 @@ const LeftSidebar = ({ queueAction, hasToolAccess = false, shouldBeOpenByDefault
37111
37111
  const [position, setPosition] = useState({ x: 20, y: 80 });
37112
37112
  const [hasEverHadAccess, setHasEverHadAccess] = useState(hasToolAccess);
37113
37113
  const [wasManuallyClosedAfterAccess, setWasManuallyClosedAfterAccess] = useState(false);
37114
+ // Set white as default stroke color when video background is active
37115
+ useEffect(() => {
37116
+ if (hasVideoBackground && state.color === '#000000') {
37117
+ // Only change if currently black, to avoid overriding user's choice
37118
+ dispatch({ type: 'SET_COLOR', payload: '#FFFFFF' });
37119
+ }
37120
+ }, [hasVideoBackground, state.color, dispatch]);
37114
37121
  // Track initial access grant
37115
37122
  useEffect(() => {
37116
37123
  if (hasToolAccess && !hasEverHadAccess) {
@@ -37139,7 +37146,7 @@ const LeftSidebar = ({ queueAction, hasToolAccess = false, shouldBeOpenByDefault
37139
37146
  setWasManuallyClosedAfterAccess(false);
37140
37147
  };
37141
37148
  const strokeColors = [
37142
- '#000000', '#DC2626', '#059669', '#2563EB', '#EA580C', '#7C3AED'
37149
+ '#FFFFFF', '#000000', '#DC2626', '#059669', '#2563EB', '#EA580C', '#7C3AED'
37143
37150
  ];
37144
37151
  const backgroundColors = [
37145
37152
  '#FFFFFF', '#F8FAFC', '#FEF2F2', '#F0FDF4', '#EFF6FF', '#1F2937', 'transparent'
@@ -37188,7 +37195,7 @@ const LeftSidebar = ({ queueAction, hasToolAccess = false, shouldBeOpenByDefault
37188
37195
  dispatch({ type: 'SET_COLOR', payload: color });
37189
37196
  };
37190
37197
  const handleBackgroundColorChange = (color) => {
37191
- if (!hasToolAccess) {
37198
+ if (!hasToolAccess || disableBackgroundChange) {
37192
37199
  console.warn('[STYLE_ACCESS] User does not have access to change background');
37193
37200
  return;
37194
37201
  }
@@ -37229,9 +37236,9 @@ const LeftSidebar = ({ queueAction, hasToolAccess = false, shouldBeOpenByDefault
37229
37236
  if (!hasToolAccess) {
37230
37237
  return null;
37231
37238
  }
37232
- return (jsx("button", { className: "absolute top-20 left-4 w-10 h-10 flex items-center justify-center bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300 rounded-lg shadow-lg z-50", onClick: handleManualOpen, title: "Show Style Panel", children: jsx(ChevronRight, { size: 16, className: "text-current" }) }));
37239
+ return (jsx("button", { className: "absolute top-20 left-4 w-10 h-10 flex items-center justify-center bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300 rounded-lg shadow-lg z-10", onClick: handleManualOpen, title: "Show Style Panel", children: jsx(ChevronRight, { size: 16, className: "text-current" }) }));
37233
37240
  }
37234
- return (jsxs("div", { className: `absolute bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-40 ${isDragging ? 'shadow-2xl' : ''} ${!hasToolAccess ? 'opacity-75' : ''}`, style: {
37241
+ return (jsxs("div", { className: `absolute bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-10 ${isDragging ? 'shadow-2xl' : ''} ${!hasToolAccess ? 'opacity-75' : ''}`, style: {
37235
37242
  left: position.x,
37236
37243
  top: position.y,
37237
37244
  width: '250px',
@@ -37241,7 +37248,12 @@ const LeftSidebar = ({ queueAction, hasToolAccess = false, shouldBeOpenByDefault
37241
37248
  ? 'opacity-50 cursor-not-allowed border-gray-200 dark:border-gray-700'
37242
37249
  : state.color === color
37243
37250
  ? 'border-purple-400 dark:border-purple-500 scale-110'
37244
- : 'border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600'}`, style: { backgroundColor: color }, onClick: () => handleColorChange(color), disabled: !hasToolAccess, title: hasToolAccess ? color : 'Access restricted' }, color))) })] }), jsxs("div", { className: "mb-4", children: [jsx("div", { className: "text-xs font-medium text-gray-700 dark:text-gray-200 mb-2", children: "Background" }), jsx("div", { className: "grid grid-cols-6 gap-1", children: backgroundColors.map((color) => (jsx("button", { className: `w-6 h-6 rounded border-2 transition-all relative ${!hasToolAccess
37251
+ : color === '#FFFFFF'
37252
+ ? 'border-gray-400 dark:border-gray-500 hover:border-gray-500 dark:hover:border-gray-400'
37253
+ : 'border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600'}`, style: {
37254
+ backgroundColor: color,
37255
+ boxShadow: color === '#FFFFFF' ? 'inset 0 0 0 1px rgba(0,0,0,0.1)' : 'none'
37256
+ }, onClick: () => handleColorChange(color), disabled: !hasToolAccess, title: hasToolAccess ? (color === '#FFFFFF' ? 'White' : color) : 'Access restricted' }, color))) })] }), jsxs("div", { className: "mb-4", children: [jsx("div", { className: "text-xs font-medium text-gray-700 dark:text-gray-200 mb-2", children: "Background" }), disableBackgroundChange && (jsx("div", { className: "p-3 bg-blue-50 dark:bg-blue-900/30 border border-blue-200 dark:border-blue-800 rounded-lg text-center", children: jsx("div", { className: "text-blue-700 dark:text-blue-300 text-xs", title: "Disabled when video background is active", children: "\uD83D\uDD12 Background selection locked" }) })), !disableBackgroundChange && (jsx("div", { className: "grid grid-cols-6 gap-1", children: backgroundColors.map((color) => (jsx("button", { className: `w-6 h-6 rounded border-2 transition-all relative ${!hasToolAccess
37245
37257
  ? 'opacity-50 cursor-not-allowed border-gray-200 dark:border-gray-700'
37246
37258
  : state.backgroundColor === color
37247
37259
  ? 'border-blue-400 dark:border-blue-500 scale-110'
@@ -37249,7 +37261,7 @@ const LeftSidebar = ({ queueAction, hasToolAccess = false, shouldBeOpenByDefault
37249
37261
  backgroundColor: color === 'transparent' ? 'white' : color
37250
37262
  }, onClick: () => handleBackgroundColorChange(color), disabled: !hasToolAccess, title: hasToolAccess ? (color === 'transparent' ? 'Transparent' : color) : 'Access restricted', children: color === 'transparent' && (jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-red-500 to-red-500 opacity-50 rounded", style: {
37251
37263
  background: 'linear-gradient(45deg, transparent 40%, #ef4444 40%, #ef4444 60%, transparent 60%)'
37252
- } })) }, color))) })] }), jsxs("div", { className: "mb-4", children: [jsx("div", { className: "text-xs font-medium text-gray-700 dark:text-gray-200 mb-2", children: "Stroke width" }), jsx("div", { className: "flex gap-2", children: strokeWidths.map((width) => (jsx("button", { className: `flex-1 p-2 rounded flex items-center justify-center ${!hasToolAccess
37264
+ } })) }, color))) }))] }), jsxs("div", { className: "mb-4", children: [jsx("div", { className: "text-xs font-medium text-gray-700 dark:text-gray-200 mb-2", children: "Stroke width" }), jsx("div", { className: "flex gap-2", children: strokeWidths.map((width) => (jsx("button", { className: `flex-1 p-2 rounded flex items-center justify-center ${!hasToolAccess
37253
37265
  ? 'opacity-50 cursor-not-allowed text-gray-400 dark:text-gray-600'
37254
37266
  : state.strokeWidth === width
37255
37267
  ? 'bg-blue-100 dark:bg-blue-900 text-blue-600 dark:text-blue-300'
@@ -42234,7 +42246,7 @@ const disconnectSocket = () => {
42234
42246
  }
42235
42247
  };
42236
42248
 
42237
- const Whiteboard = ({ roomId, isAdmin = false, allowedUsers = [], userId }) => {
42249
+ const Whiteboard = ({ roomId, isAdmin = false, allowedUsers = [], userId, transparentBackground = false, videoStream }) => {
42238
42250
  const { state, dispatch, setQueueAction, requestStateFromPeers, webSocketUrl } = useWhiteboard();
42239
42251
  const [lastCollaborativeAction, setLastCollaborativeAction] = useState(null);
42240
42252
  const [hasRequestedState, setHasRequestedState] = useState(false);
@@ -42248,6 +42260,25 @@ const Whiteboard = ({ roomId, isAdmin = false, allowedUsers = [], userId }) => {
42248
42260
  useEffect(() => {
42249
42261
  dispatch({ type: 'SET_USER_ID', payload: userId });
42250
42262
  }, [userId, dispatch]);
42263
+ // Set background color based on transparentBackground prop or videoStream presence
42264
+ useEffect(() => {
42265
+ if (transparentBackground || videoStream) {
42266
+ // Force transparent background when transparentBackground flag is set or video is active
42267
+ dispatch({ type: 'SET_BACKGROUND_COLOR', payload: 'transparent' });
42268
+ }
42269
+ else if (!transparentBackground && !videoStream) {
42270
+ // Reset to white when screen share stops and transparentBackground is false
42271
+ dispatch({ type: 'SET_BACKGROUND_COLOR', payload: '#FFFFFF' });
42272
+ }
42273
+ }, [transparentBackground, videoStream, dispatch]);
42274
+ // Video ref for setting srcObject
42275
+ const videoRef = useRef(null);
42276
+ // Set video srcObject when videoStream changes
42277
+ useEffect(() => {
42278
+ if (videoRef.current && videoStream) {
42279
+ videoRef.current.srcObject = videoStream;
42280
+ }
42281
+ }, [videoStream]);
42251
42282
  // Determine if current user has tool access (using synced allowed users for cross-computer sync)
42252
42283
  const hasToolAccess = useMemo(() => {
42253
42284
  return isAdmin || syncedAllowedUsers.includes(userId) || isGloballyUnlocked;
@@ -42528,7 +42559,14 @@ const Whiteboard = ({ roomId, isAdmin = false, allowedUsers = [], userId }) => {
42528
42559
  disconnectSocket();
42529
42560
  };
42530
42561
  }, []);
42531
- return (jsxs("div", { className: "relative h-screen", children: [jsx(TopToolbar, { queueAction: queueAction, handleExportImage: handleExportImage, handleExportPDF: handleExportPDF, handleClear: handleClear, handleLockToggle: handleLockToggle, isAdmin: isAdmin, hasToolAccess: hasToolAccess, isGloballyUnlocked: isGloballyUnlocked }), jsxs("div", { className: "w-full h-full relative overflow-hidden", children: [jsx(Board, { roomId: roomId, queueAction: queueAction, hasToolAccess: hasToolAccess, ref: boardRef }), jsx(LeftSidebar, { queueAction: queueAction, hasToolAccess: hasToolAccess, shouldBeOpenByDefault: shouldSidebarBeOpen })] })] }));
42562
+ return (jsxs("div", { className: "relative w-full h-full overflow-hidden", style: { isolation: 'isolate' }, children: [jsx(TopToolbar, { queueAction: queueAction, handleExportImage: handleExportImage, handleExportPDF: handleExportPDF, handleClear: handleClear, handleLockToggle: handleLockToggle, isAdmin: isAdmin, hasToolAccess: hasToolAccess, isGloballyUnlocked: isGloballyUnlocked, hasVideoBackground: !!videoStream }), jsxs("div", { className: "w-full h-full relative overflow-hidden", style: { isolation: 'isolate' }, children: [videoStream && (jsx("div", { className: "absolute inset-0 bg-black", style: { zIndex: 0, pointerEvents: 'none' }, children: jsx("video", { ref: videoRef, autoPlay: true, playsInline: true, muted: true, style: {
42563
+ position: 'absolute',
42564
+ inset: 0,
42565
+ width: '100%',
42566
+ height: '100%',
42567
+ objectFit: 'contain',
42568
+ pointerEvents: 'none',
42569
+ } }) })), jsx("div", { className: "relative w-full h-full", style: { zIndex: 1 }, children: jsx(Board, { roomId: roomId, queueAction: queueAction, hasToolAccess: hasToolAccess, ref: boardRef }) }), jsx(LeftSidebar, { queueAction: queueAction, hasToolAccess: hasToolAccess, shouldBeOpenByDefault: shouldSidebarBeOpen, disableBackgroundChange: transparentBackground || !!videoStream, hasVideoBackground: !!videoStream })] })] }));
42532
42570
  };
42533
42571
 
42534
42572
  const useCapture = () => {
@@ -42591,5 +42629,2966 @@ const useCapture = () => {
42591
42629
  return { mediaStream };
42592
42630
  };
42593
42631
 
42594
- export { Whiteboard, WhiteboardProvider, useCapture as useWhiteboardStream };
42632
+ function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
42633
+
42634
+ const CLASS_PART_SEPARATOR = '-';
42635
+ const createClassGroupUtils = config => {
42636
+ const classMap = createClassMap(config);
42637
+ const {
42638
+ conflictingClassGroups,
42639
+ conflictingClassGroupModifiers
42640
+ } = config;
42641
+ const getClassGroupId = className => {
42642
+ const classParts = className.split(CLASS_PART_SEPARATOR);
42643
+ // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.
42644
+ if (classParts[0] === '' && classParts.length !== 1) {
42645
+ classParts.shift();
42646
+ }
42647
+ return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);
42648
+ };
42649
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
42650
+ const conflicts = conflictingClassGroups[classGroupId] || [];
42651
+ if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {
42652
+ return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];
42653
+ }
42654
+ return conflicts;
42655
+ };
42656
+ return {
42657
+ getClassGroupId,
42658
+ getConflictingClassGroupIds
42659
+ };
42660
+ };
42661
+ const getGroupRecursive = (classParts, classPartObject) => {
42662
+ if (classParts.length === 0) {
42663
+ return classPartObject.classGroupId;
42664
+ }
42665
+ const currentClassPart = classParts[0];
42666
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
42667
+ const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;
42668
+ if (classGroupFromNextClassPart) {
42669
+ return classGroupFromNextClassPart;
42670
+ }
42671
+ if (classPartObject.validators.length === 0) {
42672
+ return undefined;
42673
+ }
42674
+ const classRest = classParts.join(CLASS_PART_SEPARATOR);
42675
+ return classPartObject.validators.find(({
42676
+ validator
42677
+ }) => validator(classRest))?.classGroupId;
42678
+ };
42679
+ const arbitraryPropertyRegex = /^\[(.+)\]$/;
42680
+ const getGroupIdForArbitraryProperty = className => {
42681
+ if (arbitraryPropertyRegex.test(className)) {
42682
+ const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];
42683
+ const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));
42684
+ if (property) {
42685
+ // I use two dots here because one dot is used as prefix for class groups in plugins
42686
+ return 'arbitrary..' + property;
42687
+ }
42688
+ }
42689
+ };
42690
+ /**
42691
+ * Exported for testing only
42692
+ */
42693
+ const createClassMap = config => {
42694
+ const {
42695
+ theme,
42696
+ classGroups
42697
+ } = config;
42698
+ const classMap = {
42699
+ nextPart: new Map(),
42700
+ validators: []
42701
+ };
42702
+ for (const classGroupId in classGroups) {
42703
+ processClassesRecursively(classGroups[classGroupId], classMap, classGroupId, theme);
42704
+ }
42705
+ return classMap;
42706
+ };
42707
+ const processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
42708
+ classGroup.forEach(classDefinition => {
42709
+ if (typeof classDefinition === 'string') {
42710
+ const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);
42711
+ classPartObjectToEdit.classGroupId = classGroupId;
42712
+ return;
42713
+ }
42714
+ if (typeof classDefinition === 'function') {
42715
+ if (isThemeGetter(classDefinition)) {
42716
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
42717
+ return;
42718
+ }
42719
+ classPartObject.validators.push({
42720
+ validator: classDefinition,
42721
+ classGroupId
42722
+ });
42723
+ return;
42724
+ }
42725
+ Object.entries(classDefinition).forEach(([key, classGroup]) => {
42726
+ processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);
42727
+ });
42728
+ });
42729
+ };
42730
+ const getPart = (classPartObject, path) => {
42731
+ let currentClassPartObject = classPartObject;
42732
+ path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {
42733
+ if (!currentClassPartObject.nextPart.has(pathPart)) {
42734
+ currentClassPartObject.nextPart.set(pathPart, {
42735
+ nextPart: new Map(),
42736
+ validators: []
42737
+ });
42738
+ }
42739
+ currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);
42740
+ });
42741
+ return currentClassPartObject;
42742
+ };
42743
+ const isThemeGetter = func => func.isThemeGetter;
42744
+
42745
+ // LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance
42746
+ const createLruCache = maxCacheSize => {
42747
+ if (maxCacheSize < 1) {
42748
+ return {
42749
+ get: () => undefined,
42750
+ set: () => {}
42751
+ };
42752
+ }
42753
+ let cacheSize = 0;
42754
+ let cache = new Map();
42755
+ let previousCache = new Map();
42756
+ const update = (key, value) => {
42757
+ cache.set(key, value);
42758
+ cacheSize++;
42759
+ if (cacheSize > maxCacheSize) {
42760
+ cacheSize = 0;
42761
+ previousCache = cache;
42762
+ cache = new Map();
42763
+ }
42764
+ };
42765
+ return {
42766
+ get(key) {
42767
+ let value = cache.get(key);
42768
+ if (value !== undefined) {
42769
+ return value;
42770
+ }
42771
+ if ((value = previousCache.get(key)) !== undefined) {
42772
+ update(key, value);
42773
+ return value;
42774
+ }
42775
+ },
42776
+ set(key, value) {
42777
+ if (cache.has(key)) {
42778
+ cache.set(key, value);
42779
+ } else {
42780
+ update(key, value);
42781
+ }
42782
+ }
42783
+ };
42784
+ };
42785
+ const IMPORTANT_MODIFIER = '!';
42786
+ const MODIFIER_SEPARATOR = ':';
42787
+ const MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length;
42788
+ const createParseClassName = config => {
42789
+ const {
42790
+ prefix,
42791
+ experimentalParseClassName
42792
+ } = config;
42793
+ /**
42794
+ * Parse class name into parts.
42795
+ *
42796
+ * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS
42797
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js
42798
+ */
42799
+ let parseClassName = className => {
42800
+ const modifiers = [];
42801
+ let bracketDepth = 0;
42802
+ let parenDepth = 0;
42803
+ let modifierStart = 0;
42804
+ let postfixModifierPosition;
42805
+ for (let index = 0; index < className.length; index++) {
42806
+ let currentCharacter = className[index];
42807
+ if (bracketDepth === 0 && parenDepth === 0) {
42808
+ if (currentCharacter === MODIFIER_SEPARATOR) {
42809
+ modifiers.push(className.slice(modifierStart, index));
42810
+ modifierStart = index + MODIFIER_SEPARATOR_LENGTH;
42811
+ continue;
42812
+ }
42813
+ if (currentCharacter === '/') {
42814
+ postfixModifierPosition = index;
42815
+ continue;
42816
+ }
42817
+ }
42818
+ if (currentCharacter === '[') {
42819
+ bracketDepth++;
42820
+ } else if (currentCharacter === ']') {
42821
+ bracketDepth--;
42822
+ } else if (currentCharacter === '(') {
42823
+ parenDepth++;
42824
+ } else if (currentCharacter === ')') {
42825
+ parenDepth--;
42826
+ }
42827
+ }
42828
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);
42829
+ const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier);
42830
+ const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier;
42831
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;
42832
+ return {
42833
+ modifiers,
42834
+ hasImportantModifier,
42835
+ baseClassName,
42836
+ maybePostfixModifierPosition
42837
+ };
42838
+ };
42839
+ if (prefix) {
42840
+ const fullPrefix = prefix + MODIFIER_SEPARATOR;
42841
+ const parseClassNameOriginal = parseClassName;
42842
+ parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.substring(fullPrefix.length)) : {
42843
+ isExternal: true,
42844
+ modifiers: [],
42845
+ hasImportantModifier: false,
42846
+ baseClassName: className,
42847
+ maybePostfixModifierPosition: undefined
42848
+ };
42849
+ }
42850
+ if (experimentalParseClassName) {
42851
+ const parseClassNameOriginal = parseClassName;
42852
+ parseClassName = className => experimentalParseClassName({
42853
+ className,
42854
+ parseClassName: parseClassNameOriginal
42855
+ });
42856
+ }
42857
+ return parseClassName;
42858
+ };
42859
+ const stripImportantModifier = baseClassName => {
42860
+ if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {
42861
+ return baseClassName.substring(0, baseClassName.length - 1);
42862
+ }
42863
+ /**
42864
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
42865
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
42866
+ */
42867
+ if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {
42868
+ return baseClassName.substring(1);
42869
+ }
42870
+ return baseClassName;
42871
+ };
42872
+
42873
+ /**
42874
+ * Sorts modifiers according to following schema:
42875
+ * - Predefined modifiers are sorted alphabetically
42876
+ * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it
42877
+ */
42878
+ const createSortModifiers = config => {
42879
+ const orderSensitiveModifiers = Object.fromEntries(config.orderSensitiveModifiers.map(modifier => [modifier, true]));
42880
+ const sortModifiers = modifiers => {
42881
+ if (modifiers.length <= 1) {
42882
+ return modifiers;
42883
+ }
42884
+ const sortedModifiers = [];
42885
+ let unsortedModifiers = [];
42886
+ modifiers.forEach(modifier => {
42887
+ const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier];
42888
+ if (isPositionSensitive) {
42889
+ sortedModifiers.push(...unsortedModifiers.sort(), modifier);
42890
+ unsortedModifiers = [];
42891
+ } else {
42892
+ unsortedModifiers.push(modifier);
42893
+ }
42894
+ });
42895
+ sortedModifiers.push(...unsortedModifiers.sort());
42896
+ return sortedModifiers;
42897
+ };
42898
+ return sortModifiers;
42899
+ };
42900
+ const createConfigUtils = config => ({
42901
+ cache: createLruCache(config.cacheSize),
42902
+ parseClassName: createParseClassName(config),
42903
+ sortModifiers: createSortModifiers(config),
42904
+ ...createClassGroupUtils(config)
42905
+ });
42906
+ const SPLIT_CLASSES_REGEX = /\s+/;
42907
+ const mergeClassList = (classList, configUtils) => {
42908
+ const {
42909
+ parseClassName,
42910
+ getClassGroupId,
42911
+ getConflictingClassGroupIds,
42912
+ sortModifiers
42913
+ } = configUtils;
42914
+ /**
42915
+ * Set of classGroupIds in following format:
42916
+ * `{importantModifier}{variantModifiers}{classGroupId}`
42917
+ * @example 'float'
42918
+ * @example 'hover:focus:bg-color'
42919
+ * @example 'md:!pr'
42920
+ */
42921
+ const classGroupsInConflict = [];
42922
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
42923
+ let result = '';
42924
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
42925
+ const originalClassName = classNames[index];
42926
+ const {
42927
+ isExternal,
42928
+ modifiers,
42929
+ hasImportantModifier,
42930
+ baseClassName,
42931
+ maybePostfixModifierPosition
42932
+ } = parseClassName(originalClassName);
42933
+ if (isExternal) {
42934
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
42935
+ continue;
42936
+ }
42937
+ let hasPostfixModifier = !!maybePostfixModifierPosition;
42938
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
42939
+ if (!classGroupId) {
42940
+ if (!hasPostfixModifier) {
42941
+ // Not a Tailwind class
42942
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
42943
+ continue;
42944
+ }
42945
+ classGroupId = getClassGroupId(baseClassName);
42946
+ if (!classGroupId) {
42947
+ // Not a Tailwind class
42948
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
42949
+ continue;
42950
+ }
42951
+ hasPostfixModifier = false;
42952
+ }
42953
+ const variantModifier = sortModifiers(modifiers).join(':');
42954
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
42955
+ const classId = modifierId + classGroupId;
42956
+ if (classGroupsInConflict.includes(classId)) {
42957
+ // Tailwind class omitted due to conflict
42958
+ continue;
42959
+ }
42960
+ classGroupsInConflict.push(classId);
42961
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
42962
+ for (let i = 0; i < conflictGroups.length; ++i) {
42963
+ const group = conflictGroups[i];
42964
+ classGroupsInConflict.push(modifierId + group);
42965
+ }
42966
+ // Tailwind class not in conflict
42967
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
42968
+ }
42969
+ return result;
42970
+ };
42971
+
42972
+ /**
42973
+ * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.
42974
+ *
42975
+ * Specifically:
42976
+ * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js
42977
+ * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts
42978
+ *
42979
+ * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
42980
+ */
42981
+ function twJoin() {
42982
+ let index = 0;
42983
+ let argument;
42984
+ let resolvedValue;
42985
+ let string = '';
42986
+ while (index < arguments.length) {
42987
+ if (argument = arguments[index++]) {
42988
+ if (resolvedValue = toValue(argument)) {
42989
+ string && (string += ' ');
42990
+ string += resolvedValue;
42991
+ }
42992
+ }
42993
+ }
42994
+ return string;
42995
+ }
42996
+ const toValue = mix => {
42997
+ if (typeof mix === 'string') {
42998
+ return mix;
42999
+ }
43000
+ let resolvedValue;
43001
+ let string = '';
43002
+ for (let k = 0; k < mix.length; k++) {
43003
+ if (mix[k]) {
43004
+ if (resolvedValue = toValue(mix[k])) {
43005
+ string && (string += ' ');
43006
+ string += resolvedValue;
43007
+ }
43008
+ }
43009
+ }
43010
+ return string;
43011
+ };
43012
+ function createTailwindMerge(createConfigFirst, ...createConfigRest) {
43013
+ let configUtils;
43014
+ let cacheGet;
43015
+ let cacheSet;
43016
+ let functionToCall = initTailwindMerge;
43017
+ function initTailwindMerge(classList) {
43018
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
43019
+ configUtils = createConfigUtils(config);
43020
+ cacheGet = configUtils.cache.get;
43021
+ cacheSet = configUtils.cache.set;
43022
+ functionToCall = tailwindMerge;
43023
+ return tailwindMerge(classList);
43024
+ }
43025
+ function tailwindMerge(classList) {
43026
+ const cachedResult = cacheGet(classList);
43027
+ if (cachedResult) {
43028
+ return cachedResult;
43029
+ }
43030
+ const result = mergeClassList(classList, configUtils);
43031
+ cacheSet(classList, result);
43032
+ return result;
43033
+ }
43034
+ return function callTailwindMerge() {
43035
+ return functionToCall(twJoin.apply(null, arguments));
43036
+ };
43037
+ }
43038
+ const fromTheme = key => {
43039
+ const themeGetter = theme => theme[key] || [];
43040
+ themeGetter.isThemeGetter = true;
43041
+ return themeGetter;
43042
+ };
43043
+ const arbitraryValueRegex = /^\[(?:(\w[\w-]*):)?(.+)\]$/i;
43044
+ const arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
43045
+ const fractionRegex = /^\d+\/\d+$/;
43046
+ const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
43047
+ 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$/;
43048
+ const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
43049
+ // Shadow always begins with x and y offset separated by underscore optionally prepended by inset
43050
+ const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
43051
+ const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
43052
+ const isFraction = value => fractionRegex.test(value);
43053
+ const isNumber = value => !!value && !Number.isNaN(Number(value));
43054
+ const isInteger = value => !!value && Number.isInteger(Number(value));
43055
+ const isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));
43056
+ const isTshirtSize = value => tshirtUnitRegex.test(value);
43057
+ const isAny = () => true;
43058
+ const isLengthOnly = value =>
43059
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
43060
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
43061
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
43062
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value);
43063
+ const isNever = () => false;
43064
+ const isShadow = value => shadowRegex.test(value);
43065
+ const isImage = value => imageRegex.test(value);
43066
+ const isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);
43067
+ const isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);
43068
+ const isArbitraryValue = value => arbitraryValueRegex.test(value);
43069
+ const isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);
43070
+ const isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);
43071
+ const isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);
43072
+ const isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);
43073
+ const isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);
43074
+ const isArbitraryVariable = value => arbitraryVariableRegex.test(value);
43075
+ const isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);
43076
+ const isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);
43077
+ const isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);
43078
+ const isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);
43079
+ const isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);
43080
+ const isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);
43081
+ // Helpers
43082
+ const getIsArbitraryValue = (value, testLabel, testValue) => {
43083
+ const result = arbitraryValueRegex.exec(value);
43084
+ if (result) {
43085
+ if (result[1]) {
43086
+ return testLabel(result[1]);
43087
+ }
43088
+ return testValue(result[2]);
43089
+ }
43090
+ return false;
43091
+ };
43092
+ const getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {
43093
+ const result = arbitraryVariableRegex.exec(value);
43094
+ if (result) {
43095
+ if (result[1]) {
43096
+ return testLabel(result[1]);
43097
+ }
43098
+ return shouldMatchNoLabel;
43099
+ }
43100
+ return false;
43101
+ };
43102
+ // Labels
43103
+ const isLabelPosition = label => label === 'position' || label === 'percentage';
43104
+ const isLabelImage = label => label === 'image' || label === 'url';
43105
+ const isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';
43106
+ const isLabelLength = label => label === 'length';
43107
+ const isLabelNumber = label => label === 'number';
43108
+ const isLabelFamilyName = label => label === 'family-name';
43109
+ const isLabelShadow = label => label === 'shadow';
43110
+ const getDefaultConfig = () => {
43111
+ /**
43112
+ * Theme getters for theme variable namespaces
43113
+ * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces
43114
+ */
43115
+ /***/
43116
+ const themeColor = fromTheme('color');
43117
+ const themeFont = fromTheme('font');
43118
+ const themeText = fromTheme('text');
43119
+ const themeFontWeight = fromTheme('font-weight');
43120
+ const themeTracking = fromTheme('tracking');
43121
+ const themeLeading = fromTheme('leading');
43122
+ const themeBreakpoint = fromTheme('breakpoint');
43123
+ const themeContainer = fromTheme('container');
43124
+ const themeSpacing = fromTheme('spacing');
43125
+ const themeRadius = fromTheme('radius');
43126
+ const themeShadow = fromTheme('shadow');
43127
+ const themeInsetShadow = fromTheme('inset-shadow');
43128
+ const themeTextShadow = fromTheme('text-shadow');
43129
+ const themeDropShadow = fromTheme('drop-shadow');
43130
+ const themeBlur = fromTheme('blur');
43131
+ const themePerspective = fromTheme('perspective');
43132
+ const themeAspect = fromTheme('aspect');
43133
+ const themeEase = fromTheme('ease');
43134
+ const themeAnimate = fromTheme('animate');
43135
+ /**
43136
+ * Helpers to avoid repeating the same scales
43137
+ *
43138
+ * We use functions that create a new array every time they're called instead of static arrays.
43139
+ * 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.
43140
+ */
43141
+ /***/
43142
+ const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];
43143
+ const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',
43144
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
43145
+ 'left-top', 'top-right',
43146
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
43147
+ 'right-top', 'bottom-right',
43148
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
43149
+ 'right-bottom', 'bottom-left',
43150
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
43151
+ 'left-bottom'];
43152
+ const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];
43153
+ const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];
43154
+ const scaleOverscroll = () => ['auto', 'contain', 'none'];
43155
+ const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];
43156
+ const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];
43157
+ const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];
43158
+ const scaleGridColRowStartAndEnd = () => ['auto', {
43159
+ span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]
43160
+ }, isInteger, isArbitraryVariable, isArbitraryValue];
43161
+ const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];
43162
+ const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];
43163
+ const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];
43164
+ const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];
43165
+ const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];
43166
+ const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];
43167
+ const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];
43168
+ const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {
43169
+ position: [isArbitraryVariable, isArbitraryValue]
43170
+ }];
43171
+ const scaleBgRepeat = () => ['no-repeat', {
43172
+ repeat: ['', 'x', 'y', 'space', 'round']
43173
+ }];
43174
+ const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {
43175
+ size: [isArbitraryVariable, isArbitraryValue]
43176
+ }];
43177
+ const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];
43178
+ const scaleRadius = () => [
43179
+ // Deprecated since Tailwind CSS v4.0.0
43180
+ '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];
43181
+ const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];
43182
+ const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];
43183
+ const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];
43184
+ const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];
43185
+ const scaleBlur = () => [
43186
+ // Deprecated since Tailwind CSS v4.0.0
43187
+ '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];
43188
+ const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
43189
+ const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
43190
+ const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];
43191
+ const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];
43192
+ return {
43193
+ cacheSize: 500,
43194
+ theme: {
43195
+ animate: ['spin', 'ping', 'pulse', 'bounce'],
43196
+ aspect: ['video'],
43197
+ blur: [isTshirtSize],
43198
+ breakpoint: [isTshirtSize],
43199
+ color: [isAny],
43200
+ container: [isTshirtSize],
43201
+ 'drop-shadow': [isTshirtSize],
43202
+ ease: ['in', 'out', 'in-out'],
43203
+ font: [isAnyNonArbitrary],
43204
+ 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],
43205
+ 'inset-shadow': [isTshirtSize],
43206
+ leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],
43207
+ perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],
43208
+ radius: [isTshirtSize],
43209
+ shadow: [isTshirtSize],
43210
+ spacing: ['px', isNumber],
43211
+ text: [isTshirtSize],
43212
+ 'text-shadow': [isTshirtSize],
43213
+ tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']
43214
+ },
43215
+ classGroups: {
43216
+ // --------------
43217
+ // --- Layout ---
43218
+ // --------------
43219
+ /**
43220
+ * Aspect Ratio
43221
+ * @see https://tailwindcss.com/docs/aspect-ratio
43222
+ */
43223
+ aspect: [{
43224
+ aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]
43225
+ }],
43226
+ /**
43227
+ * Container
43228
+ * @see https://tailwindcss.com/docs/container
43229
+ * @deprecated since Tailwind CSS v4.0.0
43230
+ */
43231
+ container: ['container'],
43232
+ /**
43233
+ * Columns
43234
+ * @see https://tailwindcss.com/docs/columns
43235
+ */
43236
+ columns: [{
43237
+ columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]
43238
+ }],
43239
+ /**
43240
+ * Break After
43241
+ * @see https://tailwindcss.com/docs/break-after
43242
+ */
43243
+ 'break-after': [{
43244
+ 'break-after': scaleBreak()
43245
+ }],
43246
+ /**
43247
+ * Break Before
43248
+ * @see https://tailwindcss.com/docs/break-before
43249
+ */
43250
+ 'break-before': [{
43251
+ 'break-before': scaleBreak()
43252
+ }],
43253
+ /**
43254
+ * Break Inside
43255
+ * @see https://tailwindcss.com/docs/break-inside
43256
+ */
43257
+ 'break-inside': [{
43258
+ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']
43259
+ }],
43260
+ /**
43261
+ * Box Decoration Break
43262
+ * @see https://tailwindcss.com/docs/box-decoration-break
43263
+ */
43264
+ 'box-decoration': [{
43265
+ 'box-decoration': ['slice', 'clone']
43266
+ }],
43267
+ /**
43268
+ * Box Sizing
43269
+ * @see https://tailwindcss.com/docs/box-sizing
43270
+ */
43271
+ box: [{
43272
+ box: ['border', 'content']
43273
+ }],
43274
+ /**
43275
+ * Display
43276
+ * @see https://tailwindcss.com/docs/display
43277
+ */
43278
+ 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'],
43279
+ /**
43280
+ * Screen Reader Only
43281
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
43282
+ */
43283
+ sr: ['sr-only', 'not-sr-only'],
43284
+ /**
43285
+ * Floats
43286
+ * @see https://tailwindcss.com/docs/float
43287
+ */
43288
+ float: [{
43289
+ float: ['right', 'left', 'none', 'start', 'end']
43290
+ }],
43291
+ /**
43292
+ * Clear
43293
+ * @see https://tailwindcss.com/docs/clear
43294
+ */
43295
+ clear: [{
43296
+ clear: ['left', 'right', 'both', 'none', 'start', 'end']
43297
+ }],
43298
+ /**
43299
+ * Isolation
43300
+ * @see https://tailwindcss.com/docs/isolation
43301
+ */
43302
+ isolation: ['isolate', 'isolation-auto'],
43303
+ /**
43304
+ * Object Fit
43305
+ * @see https://tailwindcss.com/docs/object-fit
43306
+ */
43307
+ 'object-fit': [{
43308
+ object: ['contain', 'cover', 'fill', 'none', 'scale-down']
43309
+ }],
43310
+ /**
43311
+ * Object Position
43312
+ * @see https://tailwindcss.com/docs/object-position
43313
+ */
43314
+ 'object-position': [{
43315
+ object: scalePositionWithArbitrary()
43316
+ }],
43317
+ /**
43318
+ * Overflow
43319
+ * @see https://tailwindcss.com/docs/overflow
43320
+ */
43321
+ overflow: [{
43322
+ overflow: scaleOverflow()
43323
+ }],
43324
+ /**
43325
+ * Overflow X
43326
+ * @see https://tailwindcss.com/docs/overflow
43327
+ */
43328
+ 'overflow-x': [{
43329
+ 'overflow-x': scaleOverflow()
43330
+ }],
43331
+ /**
43332
+ * Overflow Y
43333
+ * @see https://tailwindcss.com/docs/overflow
43334
+ */
43335
+ 'overflow-y': [{
43336
+ 'overflow-y': scaleOverflow()
43337
+ }],
43338
+ /**
43339
+ * Overscroll Behavior
43340
+ * @see https://tailwindcss.com/docs/overscroll-behavior
43341
+ */
43342
+ overscroll: [{
43343
+ overscroll: scaleOverscroll()
43344
+ }],
43345
+ /**
43346
+ * Overscroll Behavior X
43347
+ * @see https://tailwindcss.com/docs/overscroll-behavior
43348
+ */
43349
+ 'overscroll-x': [{
43350
+ 'overscroll-x': scaleOverscroll()
43351
+ }],
43352
+ /**
43353
+ * Overscroll Behavior Y
43354
+ * @see https://tailwindcss.com/docs/overscroll-behavior
43355
+ */
43356
+ 'overscroll-y': [{
43357
+ 'overscroll-y': scaleOverscroll()
43358
+ }],
43359
+ /**
43360
+ * Position
43361
+ * @see https://tailwindcss.com/docs/position
43362
+ */
43363
+ position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],
43364
+ /**
43365
+ * Top / Right / Bottom / Left
43366
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
43367
+ */
43368
+ inset: [{
43369
+ inset: scaleInset()
43370
+ }],
43371
+ /**
43372
+ * Right / Left
43373
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
43374
+ */
43375
+ 'inset-x': [{
43376
+ 'inset-x': scaleInset()
43377
+ }],
43378
+ /**
43379
+ * Top / Bottom
43380
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
43381
+ */
43382
+ 'inset-y': [{
43383
+ 'inset-y': scaleInset()
43384
+ }],
43385
+ /**
43386
+ * Start
43387
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
43388
+ */
43389
+ start: [{
43390
+ start: scaleInset()
43391
+ }],
43392
+ /**
43393
+ * End
43394
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
43395
+ */
43396
+ end: [{
43397
+ end: scaleInset()
43398
+ }],
43399
+ /**
43400
+ * Top
43401
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
43402
+ */
43403
+ top: [{
43404
+ top: scaleInset()
43405
+ }],
43406
+ /**
43407
+ * Right
43408
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
43409
+ */
43410
+ right: [{
43411
+ right: scaleInset()
43412
+ }],
43413
+ /**
43414
+ * Bottom
43415
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
43416
+ */
43417
+ bottom: [{
43418
+ bottom: scaleInset()
43419
+ }],
43420
+ /**
43421
+ * Left
43422
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
43423
+ */
43424
+ left: [{
43425
+ left: scaleInset()
43426
+ }],
43427
+ /**
43428
+ * Visibility
43429
+ * @see https://tailwindcss.com/docs/visibility
43430
+ */
43431
+ visibility: ['visible', 'invisible', 'collapse'],
43432
+ /**
43433
+ * Z-Index
43434
+ * @see https://tailwindcss.com/docs/z-index
43435
+ */
43436
+ z: [{
43437
+ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]
43438
+ }],
43439
+ // ------------------------
43440
+ // --- Flexbox and Grid ---
43441
+ // ------------------------
43442
+ /**
43443
+ * Flex Basis
43444
+ * @see https://tailwindcss.com/docs/flex-basis
43445
+ */
43446
+ basis: [{
43447
+ basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]
43448
+ }],
43449
+ /**
43450
+ * Flex Direction
43451
+ * @see https://tailwindcss.com/docs/flex-direction
43452
+ */
43453
+ 'flex-direction': [{
43454
+ flex: ['row', 'row-reverse', 'col', 'col-reverse']
43455
+ }],
43456
+ /**
43457
+ * Flex Wrap
43458
+ * @see https://tailwindcss.com/docs/flex-wrap
43459
+ */
43460
+ 'flex-wrap': [{
43461
+ flex: ['nowrap', 'wrap', 'wrap-reverse']
43462
+ }],
43463
+ /**
43464
+ * Flex
43465
+ * @see https://tailwindcss.com/docs/flex
43466
+ */
43467
+ flex: [{
43468
+ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]
43469
+ }],
43470
+ /**
43471
+ * Flex Grow
43472
+ * @see https://tailwindcss.com/docs/flex-grow
43473
+ */
43474
+ grow: [{
43475
+ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]
43476
+ }],
43477
+ /**
43478
+ * Flex Shrink
43479
+ * @see https://tailwindcss.com/docs/flex-shrink
43480
+ */
43481
+ shrink: [{
43482
+ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]
43483
+ }],
43484
+ /**
43485
+ * Order
43486
+ * @see https://tailwindcss.com/docs/order
43487
+ */
43488
+ order: [{
43489
+ order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]
43490
+ }],
43491
+ /**
43492
+ * Grid Template Columns
43493
+ * @see https://tailwindcss.com/docs/grid-template-columns
43494
+ */
43495
+ 'grid-cols': [{
43496
+ 'grid-cols': scaleGridTemplateColsRows()
43497
+ }],
43498
+ /**
43499
+ * Grid Column Start / End
43500
+ * @see https://tailwindcss.com/docs/grid-column
43501
+ */
43502
+ 'col-start-end': [{
43503
+ col: scaleGridColRowStartAndEnd()
43504
+ }],
43505
+ /**
43506
+ * Grid Column Start
43507
+ * @see https://tailwindcss.com/docs/grid-column
43508
+ */
43509
+ 'col-start': [{
43510
+ 'col-start': scaleGridColRowStartOrEnd()
43511
+ }],
43512
+ /**
43513
+ * Grid Column End
43514
+ * @see https://tailwindcss.com/docs/grid-column
43515
+ */
43516
+ 'col-end': [{
43517
+ 'col-end': scaleGridColRowStartOrEnd()
43518
+ }],
43519
+ /**
43520
+ * Grid Template Rows
43521
+ * @see https://tailwindcss.com/docs/grid-template-rows
43522
+ */
43523
+ 'grid-rows': [{
43524
+ 'grid-rows': scaleGridTemplateColsRows()
43525
+ }],
43526
+ /**
43527
+ * Grid Row Start / End
43528
+ * @see https://tailwindcss.com/docs/grid-row
43529
+ */
43530
+ 'row-start-end': [{
43531
+ row: scaleGridColRowStartAndEnd()
43532
+ }],
43533
+ /**
43534
+ * Grid Row Start
43535
+ * @see https://tailwindcss.com/docs/grid-row
43536
+ */
43537
+ 'row-start': [{
43538
+ 'row-start': scaleGridColRowStartOrEnd()
43539
+ }],
43540
+ /**
43541
+ * Grid Row End
43542
+ * @see https://tailwindcss.com/docs/grid-row
43543
+ */
43544
+ 'row-end': [{
43545
+ 'row-end': scaleGridColRowStartOrEnd()
43546
+ }],
43547
+ /**
43548
+ * Grid Auto Flow
43549
+ * @see https://tailwindcss.com/docs/grid-auto-flow
43550
+ */
43551
+ 'grid-flow': [{
43552
+ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']
43553
+ }],
43554
+ /**
43555
+ * Grid Auto Columns
43556
+ * @see https://tailwindcss.com/docs/grid-auto-columns
43557
+ */
43558
+ 'auto-cols': [{
43559
+ 'auto-cols': scaleGridAutoColsRows()
43560
+ }],
43561
+ /**
43562
+ * Grid Auto Rows
43563
+ * @see https://tailwindcss.com/docs/grid-auto-rows
43564
+ */
43565
+ 'auto-rows': [{
43566
+ 'auto-rows': scaleGridAutoColsRows()
43567
+ }],
43568
+ /**
43569
+ * Gap
43570
+ * @see https://tailwindcss.com/docs/gap
43571
+ */
43572
+ gap: [{
43573
+ gap: scaleUnambiguousSpacing()
43574
+ }],
43575
+ /**
43576
+ * Gap X
43577
+ * @see https://tailwindcss.com/docs/gap
43578
+ */
43579
+ 'gap-x': [{
43580
+ 'gap-x': scaleUnambiguousSpacing()
43581
+ }],
43582
+ /**
43583
+ * Gap Y
43584
+ * @see https://tailwindcss.com/docs/gap
43585
+ */
43586
+ 'gap-y': [{
43587
+ 'gap-y': scaleUnambiguousSpacing()
43588
+ }],
43589
+ /**
43590
+ * Justify Content
43591
+ * @see https://tailwindcss.com/docs/justify-content
43592
+ */
43593
+ 'justify-content': [{
43594
+ justify: [...scaleAlignPrimaryAxis(), 'normal']
43595
+ }],
43596
+ /**
43597
+ * Justify Items
43598
+ * @see https://tailwindcss.com/docs/justify-items
43599
+ */
43600
+ 'justify-items': [{
43601
+ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']
43602
+ }],
43603
+ /**
43604
+ * Justify Self
43605
+ * @see https://tailwindcss.com/docs/justify-self
43606
+ */
43607
+ 'justify-self': [{
43608
+ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]
43609
+ }],
43610
+ /**
43611
+ * Align Content
43612
+ * @see https://tailwindcss.com/docs/align-content
43613
+ */
43614
+ 'align-content': [{
43615
+ content: ['normal', ...scaleAlignPrimaryAxis()]
43616
+ }],
43617
+ /**
43618
+ * Align Items
43619
+ * @see https://tailwindcss.com/docs/align-items
43620
+ */
43621
+ 'align-items': [{
43622
+ items: [...scaleAlignSecondaryAxis(), {
43623
+ baseline: ['', 'last']
43624
+ }]
43625
+ }],
43626
+ /**
43627
+ * Align Self
43628
+ * @see https://tailwindcss.com/docs/align-self
43629
+ */
43630
+ 'align-self': [{
43631
+ self: ['auto', ...scaleAlignSecondaryAxis(), {
43632
+ baseline: ['', 'last']
43633
+ }]
43634
+ }],
43635
+ /**
43636
+ * Place Content
43637
+ * @see https://tailwindcss.com/docs/place-content
43638
+ */
43639
+ 'place-content': [{
43640
+ 'place-content': scaleAlignPrimaryAxis()
43641
+ }],
43642
+ /**
43643
+ * Place Items
43644
+ * @see https://tailwindcss.com/docs/place-items
43645
+ */
43646
+ 'place-items': [{
43647
+ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']
43648
+ }],
43649
+ /**
43650
+ * Place Self
43651
+ * @see https://tailwindcss.com/docs/place-self
43652
+ */
43653
+ 'place-self': [{
43654
+ 'place-self': ['auto', ...scaleAlignSecondaryAxis()]
43655
+ }],
43656
+ // Spacing
43657
+ /**
43658
+ * Padding
43659
+ * @see https://tailwindcss.com/docs/padding
43660
+ */
43661
+ p: [{
43662
+ p: scaleUnambiguousSpacing()
43663
+ }],
43664
+ /**
43665
+ * Padding X
43666
+ * @see https://tailwindcss.com/docs/padding
43667
+ */
43668
+ px: [{
43669
+ px: scaleUnambiguousSpacing()
43670
+ }],
43671
+ /**
43672
+ * Padding Y
43673
+ * @see https://tailwindcss.com/docs/padding
43674
+ */
43675
+ py: [{
43676
+ py: scaleUnambiguousSpacing()
43677
+ }],
43678
+ /**
43679
+ * Padding Start
43680
+ * @see https://tailwindcss.com/docs/padding
43681
+ */
43682
+ ps: [{
43683
+ ps: scaleUnambiguousSpacing()
43684
+ }],
43685
+ /**
43686
+ * Padding End
43687
+ * @see https://tailwindcss.com/docs/padding
43688
+ */
43689
+ pe: [{
43690
+ pe: scaleUnambiguousSpacing()
43691
+ }],
43692
+ /**
43693
+ * Padding Top
43694
+ * @see https://tailwindcss.com/docs/padding
43695
+ */
43696
+ pt: [{
43697
+ pt: scaleUnambiguousSpacing()
43698
+ }],
43699
+ /**
43700
+ * Padding Right
43701
+ * @see https://tailwindcss.com/docs/padding
43702
+ */
43703
+ pr: [{
43704
+ pr: scaleUnambiguousSpacing()
43705
+ }],
43706
+ /**
43707
+ * Padding Bottom
43708
+ * @see https://tailwindcss.com/docs/padding
43709
+ */
43710
+ pb: [{
43711
+ pb: scaleUnambiguousSpacing()
43712
+ }],
43713
+ /**
43714
+ * Padding Left
43715
+ * @see https://tailwindcss.com/docs/padding
43716
+ */
43717
+ pl: [{
43718
+ pl: scaleUnambiguousSpacing()
43719
+ }],
43720
+ /**
43721
+ * Margin
43722
+ * @see https://tailwindcss.com/docs/margin
43723
+ */
43724
+ m: [{
43725
+ m: scaleMargin()
43726
+ }],
43727
+ /**
43728
+ * Margin X
43729
+ * @see https://tailwindcss.com/docs/margin
43730
+ */
43731
+ mx: [{
43732
+ mx: scaleMargin()
43733
+ }],
43734
+ /**
43735
+ * Margin Y
43736
+ * @see https://tailwindcss.com/docs/margin
43737
+ */
43738
+ my: [{
43739
+ my: scaleMargin()
43740
+ }],
43741
+ /**
43742
+ * Margin Start
43743
+ * @see https://tailwindcss.com/docs/margin
43744
+ */
43745
+ ms: [{
43746
+ ms: scaleMargin()
43747
+ }],
43748
+ /**
43749
+ * Margin End
43750
+ * @see https://tailwindcss.com/docs/margin
43751
+ */
43752
+ me: [{
43753
+ me: scaleMargin()
43754
+ }],
43755
+ /**
43756
+ * Margin Top
43757
+ * @see https://tailwindcss.com/docs/margin
43758
+ */
43759
+ mt: [{
43760
+ mt: scaleMargin()
43761
+ }],
43762
+ /**
43763
+ * Margin Right
43764
+ * @see https://tailwindcss.com/docs/margin
43765
+ */
43766
+ mr: [{
43767
+ mr: scaleMargin()
43768
+ }],
43769
+ /**
43770
+ * Margin Bottom
43771
+ * @see https://tailwindcss.com/docs/margin
43772
+ */
43773
+ mb: [{
43774
+ mb: scaleMargin()
43775
+ }],
43776
+ /**
43777
+ * Margin Left
43778
+ * @see https://tailwindcss.com/docs/margin
43779
+ */
43780
+ ml: [{
43781
+ ml: scaleMargin()
43782
+ }],
43783
+ /**
43784
+ * Space Between X
43785
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
43786
+ */
43787
+ 'space-x': [{
43788
+ 'space-x': scaleUnambiguousSpacing()
43789
+ }],
43790
+ /**
43791
+ * Space Between X Reverse
43792
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
43793
+ */
43794
+ 'space-x-reverse': ['space-x-reverse'],
43795
+ /**
43796
+ * Space Between Y
43797
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
43798
+ */
43799
+ 'space-y': [{
43800
+ 'space-y': scaleUnambiguousSpacing()
43801
+ }],
43802
+ /**
43803
+ * Space Between Y Reverse
43804
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
43805
+ */
43806
+ 'space-y-reverse': ['space-y-reverse'],
43807
+ // --------------
43808
+ // --- Sizing ---
43809
+ // --------------
43810
+ /**
43811
+ * Size
43812
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
43813
+ */
43814
+ size: [{
43815
+ size: scaleSizing()
43816
+ }],
43817
+ /**
43818
+ * Width
43819
+ * @see https://tailwindcss.com/docs/width
43820
+ */
43821
+ w: [{
43822
+ w: [themeContainer, 'screen', ...scaleSizing()]
43823
+ }],
43824
+ /**
43825
+ * Min-Width
43826
+ * @see https://tailwindcss.com/docs/min-width
43827
+ */
43828
+ 'min-w': [{
43829
+ 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
43830
+ 'none', ...scaleSizing()]
43831
+ }],
43832
+ /**
43833
+ * Max-Width
43834
+ * @see https://tailwindcss.com/docs/max-width
43835
+ */
43836
+ 'max-w': [{
43837
+ 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
43838
+ 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
43839
+ {
43840
+ screen: [themeBreakpoint]
43841
+ }, ...scaleSizing()]
43842
+ }],
43843
+ /**
43844
+ * Height
43845
+ * @see https://tailwindcss.com/docs/height
43846
+ */
43847
+ h: [{
43848
+ h: ['screen', 'lh', ...scaleSizing()]
43849
+ }],
43850
+ /**
43851
+ * Min-Height
43852
+ * @see https://tailwindcss.com/docs/min-height
43853
+ */
43854
+ 'min-h': [{
43855
+ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]
43856
+ }],
43857
+ /**
43858
+ * Max-Height
43859
+ * @see https://tailwindcss.com/docs/max-height
43860
+ */
43861
+ 'max-h': [{
43862
+ 'max-h': ['screen', 'lh', ...scaleSizing()]
43863
+ }],
43864
+ // ------------------
43865
+ // --- Typography ---
43866
+ // ------------------
43867
+ /**
43868
+ * Font Size
43869
+ * @see https://tailwindcss.com/docs/font-size
43870
+ */
43871
+ 'font-size': [{
43872
+ text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]
43873
+ }],
43874
+ /**
43875
+ * Font Smoothing
43876
+ * @see https://tailwindcss.com/docs/font-smoothing
43877
+ */
43878
+ 'font-smoothing': ['antialiased', 'subpixel-antialiased'],
43879
+ /**
43880
+ * Font Style
43881
+ * @see https://tailwindcss.com/docs/font-style
43882
+ */
43883
+ 'font-style': ['italic', 'not-italic'],
43884
+ /**
43885
+ * Font Weight
43886
+ * @see https://tailwindcss.com/docs/font-weight
43887
+ */
43888
+ 'font-weight': [{
43889
+ font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]
43890
+ }],
43891
+ /**
43892
+ * Font Stretch
43893
+ * @see https://tailwindcss.com/docs/font-stretch
43894
+ */
43895
+ 'font-stretch': [{
43896
+ 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]
43897
+ }],
43898
+ /**
43899
+ * Font Family
43900
+ * @see https://tailwindcss.com/docs/font-family
43901
+ */
43902
+ 'font-family': [{
43903
+ font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]
43904
+ }],
43905
+ /**
43906
+ * Font Variant Numeric
43907
+ * @see https://tailwindcss.com/docs/font-variant-numeric
43908
+ */
43909
+ 'fvn-normal': ['normal-nums'],
43910
+ /**
43911
+ * Font Variant Numeric
43912
+ * @see https://tailwindcss.com/docs/font-variant-numeric
43913
+ */
43914
+ 'fvn-ordinal': ['ordinal'],
43915
+ /**
43916
+ * Font Variant Numeric
43917
+ * @see https://tailwindcss.com/docs/font-variant-numeric
43918
+ */
43919
+ 'fvn-slashed-zero': ['slashed-zero'],
43920
+ /**
43921
+ * Font Variant Numeric
43922
+ * @see https://tailwindcss.com/docs/font-variant-numeric
43923
+ */
43924
+ 'fvn-figure': ['lining-nums', 'oldstyle-nums'],
43925
+ /**
43926
+ * Font Variant Numeric
43927
+ * @see https://tailwindcss.com/docs/font-variant-numeric
43928
+ */
43929
+ 'fvn-spacing': ['proportional-nums', 'tabular-nums'],
43930
+ /**
43931
+ * Font Variant Numeric
43932
+ * @see https://tailwindcss.com/docs/font-variant-numeric
43933
+ */
43934
+ 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],
43935
+ /**
43936
+ * Letter Spacing
43937
+ * @see https://tailwindcss.com/docs/letter-spacing
43938
+ */
43939
+ tracking: [{
43940
+ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]
43941
+ }],
43942
+ /**
43943
+ * Line Clamp
43944
+ * @see https://tailwindcss.com/docs/line-clamp
43945
+ */
43946
+ 'line-clamp': [{
43947
+ 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]
43948
+ }],
43949
+ /**
43950
+ * Line Height
43951
+ * @see https://tailwindcss.com/docs/line-height
43952
+ */
43953
+ leading: [{
43954
+ leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
43955
+ themeLeading, ...scaleUnambiguousSpacing()]
43956
+ }],
43957
+ /**
43958
+ * List Style Image
43959
+ * @see https://tailwindcss.com/docs/list-style-image
43960
+ */
43961
+ 'list-image': [{
43962
+ 'list-image': ['none', isArbitraryVariable, isArbitraryValue]
43963
+ }],
43964
+ /**
43965
+ * List Style Position
43966
+ * @see https://tailwindcss.com/docs/list-style-position
43967
+ */
43968
+ 'list-style-position': [{
43969
+ list: ['inside', 'outside']
43970
+ }],
43971
+ /**
43972
+ * List Style Type
43973
+ * @see https://tailwindcss.com/docs/list-style-type
43974
+ */
43975
+ 'list-style-type': [{
43976
+ list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]
43977
+ }],
43978
+ /**
43979
+ * Text Alignment
43980
+ * @see https://tailwindcss.com/docs/text-align
43981
+ */
43982
+ 'text-alignment': [{
43983
+ text: ['left', 'center', 'right', 'justify', 'start', 'end']
43984
+ }],
43985
+ /**
43986
+ * Placeholder Color
43987
+ * @deprecated since Tailwind CSS v3.0.0
43988
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
43989
+ */
43990
+ 'placeholder-color': [{
43991
+ placeholder: scaleColor()
43992
+ }],
43993
+ /**
43994
+ * Text Color
43995
+ * @see https://tailwindcss.com/docs/text-color
43996
+ */
43997
+ 'text-color': [{
43998
+ text: scaleColor()
43999
+ }],
44000
+ /**
44001
+ * Text Decoration
44002
+ * @see https://tailwindcss.com/docs/text-decoration
44003
+ */
44004
+ 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],
44005
+ /**
44006
+ * Text Decoration Style
44007
+ * @see https://tailwindcss.com/docs/text-decoration-style
44008
+ */
44009
+ 'text-decoration-style': [{
44010
+ decoration: [...scaleLineStyle(), 'wavy']
44011
+ }],
44012
+ /**
44013
+ * Text Decoration Thickness
44014
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
44015
+ */
44016
+ 'text-decoration-thickness': [{
44017
+ decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]
44018
+ }],
44019
+ /**
44020
+ * Text Decoration Color
44021
+ * @see https://tailwindcss.com/docs/text-decoration-color
44022
+ */
44023
+ 'text-decoration-color': [{
44024
+ decoration: scaleColor()
44025
+ }],
44026
+ /**
44027
+ * Text Underline Offset
44028
+ * @see https://tailwindcss.com/docs/text-underline-offset
44029
+ */
44030
+ 'underline-offset': [{
44031
+ 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]
44032
+ }],
44033
+ /**
44034
+ * Text Transform
44035
+ * @see https://tailwindcss.com/docs/text-transform
44036
+ */
44037
+ 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],
44038
+ /**
44039
+ * Text Overflow
44040
+ * @see https://tailwindcss.com/docs/text-overflow
44041
+ */
44042
+ 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],
44043
+ /**
44044
+ * Text Wrap
44045
+ * @see https://tailwindcss.com/docs/text-wrap
44046
+ */
44047
+ 'text-wrap': [{
44048
+ text: ['wrap', 'nowrap', 'balance', 'pretty']
44049
+ }],
44050
+ /**
44051
+ * Text Indent
44052
+ * @see https://tailwindcss.com/docs/text-indent
44053
+ */
44054
+ indent: [{
44055
+ indent: scaleUnambiguousSpacing()
44056
+ }],
44057
+ /**
44058
+ * Vertical Alignment
44059
+ * @see https://tailwindcss.com/docs/vertical-align
44060
+ */
44061
+ 'vertical-align': [{
44062
+ align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]
44063
+ }],
44064
+ /**
44065
+ * Whitespace
44066
+ * @see https://tailwindcss.com/docs/whitespace
44067
+ */
44068
+ whitespace: [{
44069
+ whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']
44070
+ }],
44071
+ /**
44072
+ * Word Break
44073
+ * @see https://tailwindcss.com/docs/word-break
44074
+ */
44075
+ break: [{
44076
+ break: ['normal', 'words', 'all', 'keep']
44077
+ }],
44078
+ /**
44079
+ * Overflow Wrap
44080
+ * @see https://tailwindcss.com/docs/overflow-wrap
44081
+ */
44082
+ wrap: [{
44083
+ wrap: ['break-word', 'anywhere', 'normal']
44084
+ }],
44085
+ /**
44086
+ * Hyphens
44087
+ * @see https://tailwindcss.com/docs/hyphens
44088
+ */
44089
+ hyphens: [{
44090
+ hyphens: ['none', 'manual', 'auto']
44091
+ }],
44092
+ /**
44093
+ * Content
44094
+ * @see https://tailwindcss.com/docs/content
44095
+ */
44096
+ content: [{
44097
+ content: ['none', isArbitraryVariable, isArbitraryValue]
44098
+ }],
44099
+ // -------------------
44100
+ // --- Backgrounds ---
44101
+ // -------------------
44102
+ /**
44103
+ * Background Attachment
44104
+ * @see https://tailwindcss.com/docs/background-attachment
44105
+ */
44106
+ 'bg-attachment': [{
44107
+ bg: ['fixed', 'local', 'scroll']
44108
+ }],
44109
+ /**
44110
+ * Background Clip
44111
+ * @see https://tailwindcss.com/docs/background-clip
44112
+ */
44113
+ 'bg-clip': [{
44114
+ 'bg-clip': ['border', 'padding', 'content', 'text']
44115
+ }],
44116
+ /**
44117
+ * Background Origin
44118
+ * @see https://tailwindcss.com/docs/background-origin
44119
+ */
44120
+ 'bg-origin': [{
44121
+ 'bg-origin': ['border', 'padding', 'content']
44122
+ }],
44123
+ /**
44124
+ * Background Position
44125
+ * @see https://tailwindcss.com/docs/background-position
44126
+ */
44127
+ 'bg-position': [{
44128
+ bg: scaleBgPosition()
44129
+ }],
44130
+ /**
44131
+ * Background Repeat
44132
+ * @see https://tailwindcss.com/docs/background-repeat
44133
+ */
44134
+ 'bg-repeat': [{
44135
+ bg: scaleBgRepeat()
44136
+ }],
44137
+ /**
44138
+ * Background Size
44139
+ * @see https://tailwindcss.com/docs/background-size
44140
+ */
44141
+ 'bg-size': [{
44142
+ bg: scaleBgSize()
44143
+ }],
44144
+ /**
44145
+ * Background Image
44146
+ * @see https://tailwindcss.com/docs/background-image
44147
+ */
44148
+ 'bg-image': [{
44149
+ bg: ['none', {
44150
+ linear: [{
44151
+ to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']
44152
+ }, isInteger, isArbitraryVariable, isArbitraryValue],
44153
+ radial: ['', isArbitraryVariable, isArbitraryValue],
44154
+ conic: [isInteger, isArbitraryVariable, isArbitraryValue]
44155
+ }, isArbitraryVariableImage, isArbitraryImage]
44156
+ }],
44157
+ /**
44158
+ * Background Color
44159
+ * @see https://tailwindcss.com/docs/background-color
44160
+ */
44161
+ 'bg-color': [{
44162
+ bg: scaleColor()
44163
+ }],
44164
+ /**
44165
+ * Gradient Color Stops From Position
44166
+ * @see https://tailwindcss.com/docs/gradient-color-stops
44167
+ */
44168
+ 'gradient-from-pos': [{
44169
+ from: scaleGradientStopPosition()
44170
+ }],
44171
+ /**
44172
+ * Gradient Color Stops Via Position
44173
+ * @see https://tailwindcss.com/docs/gradient-color-stops
44174
+ */
44175
+ 'gradient-via-pos': [{
44176
+ via: scaleGradientStopPosition()
44177
+ }],
44178
+ /**
44179
+ * Gradient Color Stops To Position
44180
+ * @see https://tailwindcss.com/docs/gradient-color-stops
44181
+ */
44182
+ 'gradient-to-pos': [{
44183
+ to: scaleGradientStopPosition()
44184
+ }],
44185
+ /**
44186
+ * Gradient Color Stops From
44187
+ * @see https://tailwindcss.com/docs/gradient-color-stops
44188
+ */
44189
+ 'gradient-from': [{
44190
+ from: scaleColor()
44191
+ }],
44192
+ /**
44193
+ * Gradient Color Stops Via
44194
+ * @see https://tailwindcss.com/docs/gradient-color-stops
44195
+ */
44196
+ 'gradient-via': [{
44197
+ via: scaleColor()
44198
+ }],
44199
+ /**
44200
+ * Gradient Color Stops To
44201
+ * @see https://tailwindcss.com/docs/gradient-color-stops
44202
+ */
44203
+ 'gradient-to': [{
44204
+ to: scaleColor()
44205
+ }],
44206
+ // ---------------
44207
+ // --- Borders ---
44208
+ // ---------------
44209
+ /**
44210
+ * Border Radius
44211
+ * @see https://tailwindcss.com/docs/border-radius
44212
+ */
44213
+ rounded: [{
44214
+ rounded: scaleRadius()
44215
+ }],
44216
+ /**
44217
+ * Border Radius Start
44218
+ * @see https://tailwindcss.com/docs/border-radius
44219
+ */
44220
+ 'rounded-s': [{
44221
+ 'rounded-s': scaleRadius()
44222
+ }],
44223
+ /**
44224
+ * Border Radius End
44225
+ * @see https://tailwindcss.com/docs/border-radius
44226
+ */
44227
+ 'rounded-e': [{
44228
+ 'rounded-e': scaleRadius()
44229
+ }],
44230
+ /**
44231
+ * Border Radius Top
44232
+ * @see https://tailwindcss.com/docs/border-radius
44233
+ */
44234
+ 'rounded-t': [{
44235
+ 'rounded-t': scaleRadius()
44236
+ }],
44237
+ /**
44238
+ * Border Radius Right
44239
+ * @see https://tailwindcss.com/docs/border-radius
44240
+ */
44241
+ 'rounded-r': [{
44242
+ 'rounded-r': scaleRadius()
44243
+ }],
44244
+ /**
44245
+ * Border Radius Bottom
44246
+ * @see https://tailwindcss.com/docs/border-radius
44247
+ */
44248
+ 'rounded-b': [{
44249
+ 'rounded-b': scaleRadius()
44250
+ }],
44251
+ /**
44252
+ * Border Radius Left
44253
+ * @see https://tailwindcss.com/docs/border-radius
44254
+ */
44255
+ 'rounded-l': [{
44256
+ 'rounded-l': scaleRadius()
44257
+ }],
44258
+ /**
44259
+ * Border Radius Start Start
44260
+ * @see https://tailwindcss.com/docs/border-radius
44261
+ */
44262
+ 'rounded-ss': [{
44263
+ 'rounded-ss': scaleRadius()
44264
+ }],
44265
+ /**
44266
+ * Border Radius Start End
44267
+ * @see https://tailwindcss.com/docs/border-radius
44268
+ */
44269
+ 'rounded-se': [{
44270
+ 'rounded-se': scaleRadius()
44271
+ }],
44272
+ /**
44273
+ * Border Radius End End
44274
+ * @see https://tailwindcss.com/docs/border-radius
44275
+ */
44276
+ 'rounded-ee': [{
44277
+ 'rounded-ee': scaleRadius()
44278
+ }],
44279
+ /**
44280
+ * Border Radius End Start
44281
+ * @see https://tailwindcss.com/docs/border-radius
44282
+ */
44283
+ 'rounded-es': [{
44284
+ 'rounded-es': scaleRadius()
44285
+ }],
44286
+ /**
44287
+ * Border Radius Top Left
44288
+ * @see https://tailwindcss.com/docs/border-radius
44289
+ */
44290
+ 'rounded-tl': [{
44291
+ 'rounded-tl': scaleRadius()
44292
+ }],
44293
+ /**
44294
+ * Border Radius Top Right
44295
+ * @see https://tailwindcss.com/docs/border-radius
44296
+ */
44297
+ 'rounded-tr': [{
44298
+ 'rounded-tr': scaleRadius()
44299
+ }],
44300
+ /**
44301
+ * Border Radius Bottom Right
44302
+ * @see https://tailwindcss.com/docs/border-radius
44303
+ */
44304
+ 'rounded-br': [{
44305
+ 'rounded-br': scaleRadius()
44306
+ }],
44307
+ /**
44308
+ * Border Radius Bottom Left
44309
+ * @see https://tailwindcss.com/docs/border-radius
44310
+ */
44311
+ 'rounded-bl': [{
44312
+ 'rounded-bl': scaleRadius()
44313
+ }],
44314
+ /**
44315
+ * Border Width
44316
+ * @see https://tailwindcss.com/docs/border-width
44317
+ */
44318
+ 'border-w': [{
44319
+ border: scaleBorderWidth()
44320
+ }],
44321
+ /**
44322
+ * Border Width X
44323
+ * @see https://tailwindcss.com/docs/border-width
44324
+ */
44325
+ 'border-w-x': [{
44326
+ 'border-x': scaleBorderWidth()
44327
+ }],
44328
+ /**
44329
+ * Border Width Y
44330
+ * @see https://tailwindcss.com/docs/border-width
44331
+ */
44332
+ 'border-w-y': [{
44333
+ 'border-y': scaleBorderWidth()
44334
+ }],
44335
+ /**
44336
+ * Border Width Start
44337
+ * @see https://tailwindcss.com/docs/border-width
44338
+ */
44339
+ 'border-w-s': [{
44340
+ 'border-s': scaleBorderWidth()
44341
+ }],
44342
+ /**
44343
+ * Border Width End
44344
+ * @see https://tailwindcss.com/docs/border-width
44345
+ */
44346
+ 'border-w-e': [{
44347
+ 'border-e': scaleBorderWidth()
44348
+ }],
44349
+ /**
44350
+ * Border Width Top
44351
+ * @see https://tailwindcss.com/docs/border-width
44352
+ */
44353
+ 'border-w-t': [{
44354
+ 'border-t': scaleBorderWidth()
44355
+ }],
44356
+ /**
44357
+ * Border Width Right
44358
+ * @see https://tailwindcss.com/docs/border-width
44359
+ */
44360
+ 'border-w-r': [{
44361
+ 'border-r': scaleBorderWidth()
44362
+ }],
44363
+ /**
44364
+ * Border Width Bottom
44365
+ * @see https://tailwindcss.com/docs/border-width
44366
+ */
44367
+ 'border-w-b': [{
44368
+ 'border-b': scaleBorderWidth()
44369
+ }],
44370
+ /**
44371
+ * Border Width Left
44372
+ * @see https://tailwindcss.com/docs/border-width
44373
+ */
44374
+ 'border-w-l': [{
44375
+ 'border-l': scaleBorderWidth()
44376
+ }],
44377
+ /**
44378
+ * Divide Width X
44379
+ * @see https://tailwindcss.com/docs/border-width#between-children
44380
+ */
44381
+ 'divide-x': [{
44382
+ 'divide-x': scaleBorderWidth()
44383
+ }],
44384
+ /**
44385
+ * Divide Width X Reverse
44386
+ * @see https://tailwindcss.com/docs/border-width#between-children
44387
+ */
44388
+ 'divide-x-reverse': ['divide-x-reverse'],
44389
+ /**
44390
+ * Divide Width Y
44391
+ * @see https://tailwindcss.com/docs/border-width#between-children
44392
+ */
44393
+ 'divide-y': [{
44394
+ 'divide-y': scaleBorderWidth()
44395
+ }],
44396
+ /**
44397
+ * Divide Width Y Reverse
44398
+ * @see https://tailwindcss.com/docs/border-width#between-children
44399
+ */
44400
+ 'divide-y-reverse': ['divide-y-reverse'],
44401
+ /**
44402
+ * Border Style
44403
+ * @see https://tailwindcss.com/docs/border-style
44404
+ */
44405
+ 'border-style': [{
44406
+ border: [...scaleLineStyle(), 'hidden', 'none']
44407
+ }],
44408
+ /**
44409
+ * Divide Style
44410
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
44411
+ */
44412
+ 'divide-style': [{
44413
+ divide: [...scaleLineStyle(), 'hidden', 'none']
44414
+ }],
44415
+ /**
44416
+ * Border Color
44417
+ * @see https://tailwindcss.com/docs/border-color
44418
+ */
44419
+ 'border-color': [{
44420
+ border: scaleColor()
44421
+ }],
44422
+ /**
44423
+ * Border Color X
44424
+ * @see https://tailwindcss.com/docs/border-color
44425
+ */
44426
+ 'border-color-x': [{
44427
+ 'border-x': scaleColor()
44428
+ }],
44429
+ /**
44430
+ * Border Color Y
44431
+ * @see https://tailwindcss.com/docs/border-color
44432
+ */
44433
+ 'border-color-y': [{
44434
+ 'border-y': scaleColor()
44435
+ }],
44436
+ /**
44437
+ * Border Color S
44438
+ * @see https://tailwindcss.com/docs/border-color
44439
+ */
44440
+ 'border-color-s': [{
44441
+ 'border-s': scaleColor()
44442
+ }],
44443
+ /**
44444
+ * Border Color E
44445
+ * @see https://tailwindcss.com/docs/border-color
44446
+ */
44447
+ 'border-color-e': [{
44448
+ 'border-e': scaleColor()
44449
+ }],
44450
+ /**
44451
+ * Border Color Top
44452
+ * @see https://tailwindcss.com/docs/border-color
44453
+ */
44454
+ 'border-color-t': [{
44455
+ 'border-t': scaleColor()
44456
+ }],
44457
+ /**
44458
+ * Border Color Right
44459
+ * @see https://tailwindcss.com/docs/border-color
44460
+ */
44461
+ 'border-color-r': [{
44462
+ 'border-r': scaleColor()
44463
+ }],
44464
+ /**
44465
+ * Border Color Bottom
44466
+ * @see https://tailwindcss.com/docs/border-color
44467
+ */
44468
+ 'border-color-b': [{
44469
+ 'border-b': scaleColor()
44470
+ }],
44471
+ /**
44472
+ * Border Color Left
44473
+ * @see https://tailwindcss.com/docs/border-color
44474
+ */
44475
+ 'border-color-l': [{
44476
+ 'border-l': scaleColor()
44477
+ }],
44478
+ /**
44479
+ * Divide Color
44480
+ * @see https://tailwindcss.com/docs/divide-color
44481
+ */
44482
+ 'divide-color': [{
44483
+ divide: scaleColor()
44484
+ }],
44485
+ /**
44486
+ * Outline Style
44487
+ * @see https://tailwindcss.com/docs/outline-style
44488
+ */
44489
+ 'outline-style': [{
44490
+ outline: [...scaleLineStyle(), 'none', 'hidden']
44491
+ }],
44492
+ /**
44493
+ * Outline Offset
44494
+ * @see https://tailwindcss.com/docs/outline-offset
44495
+ */
44496
+ 'outline-offset': [{
44497
+ 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]
44498
+ }],
44499
+ /**
44500
+ * Outline Width
44501
+ * @see https://tailwindcss.com/docs/outline-width
44502
+ */
44503
+ 'outline-w': [{
44504
+ outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]
44505
+ }],
44506
+ /**
44507
+ * Outline Color
44508
+ * @see https://tailwindcss.com/docs/outline-color
44509
+ */
44510
+ 'outline-color': [{
44511
+ outline: scaleColor()
44512
+ }],
44513
+ // ---------------
44514
+ // --- Effects ---
44515
+ // ---------------
44516
+ /**
44517
+ * Box Shadow
44518
+ * @see https://tailwindcss.com/docs/box-shadow
44519
+ */
44520
+ shadow: [{
44521
+ shadow: [
44522
+ // Deprecated since Tailwind CSS v4.0.0
44523
+ '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]
44524
+ }],
44525
+ /**
44526
+ * Box Shadow Color
44527
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
44528
+ */
44529
+ 'shadow-color': [{
44530
+ shadow: scaleColor()
44531
+ }],
44532
+ /**
44533
+ * Inset Box Shadow
44534
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
44535
+ */
44536
+ 'inset-shadow': [{
44537
+ 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]
44538
+ }],
44539
+ /**
44540
+ * Inset Box Shadow Color
44541
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
44542
+ */
44543
+ 'inset-shadow-color': [{
44544
+ 'inset-shadow': scaleColor()
44545
+ }],
44546
+ /**
44547
+ * Ring Width
44548
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
44549
+ */
44550
+ 'ring-w': [{
44551
+ ring: scaleBorderWidth()
44552
+ }],
44553
+ /**
44554
+ * Ring Width Inset
44555
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
44556
+ * @deprecated since Tailwind CSS v4.0.0
44557
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
44558
+ */
44559
+ 'ring-w-inset': ['ring-inset'],
44560
+ /**
44561
+ * Ring Color
44562
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
44563
+ */
44564
+ 'ring-color': [{
44565
+ ring: scaleColor()
44566
+ }],
44567
+ /**
44568
+ * Ring Offset Width
44569
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
44570
+ * @deprecated since Tailwind CSS v4.0.0
44571
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
44572
+ */
44573
+ 'ring-offset-w': [{
44574
+ 'ring-offset': [isNumber, isArbitraryLength]
44575
+ }],
44576
+ /**
44577
+ * Ring Offset Color
44578
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
44579
+ * @deprecated since Tailwind CSS v4.0.0
44580
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
44581
+ */
44582
+ 'ring-offset-color': [{
44583
+ 'ring-offset': scaleColor()
44584
+ }],
44585
+ /**
44586
+ * Inset Ring Width
44587
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
44588
+ */
44589
+ 'inset-ring-w': [{
44590
+ 'inset-ring': scaleBorderWidth()
44591
+ }],
44592
+ /**
44593
+ * Inset Ring Color
44594
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
44595
+ */
44596
+ 'inset-ring-color': [{
44597
+ 'inset-ring': scaleColor()
44598
+ }],
44599
+ /**
44600
+ * Text Shadow
44601
+ * @see https://tailwindcss.com/docs/text-shadow
44602
+ */
44603
+ 'text-shadow': [{
44604
+ 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]
44605
+ }],
44606
+ /**
44607
+ * Text Shadow Color
44608
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
44609
+ */
44610
+ 'text-shadow-color': [{
44611
+ 'text-shadow': scaleColor()
44612
+ }],
44613
+ /**
44614
+ * Opacity
44615
+ * @see https://tailwindcss.com/docs/opacity
44616
+ */
44617
+ opacity: [{
44618
+ opacity: [isNumber, isArbitraryVariable, isArbitraryValue]
44619
+ }],
44620
+ /**
44621
+ * Mix Blend Mode
44622
+ * @see https://tailwindcss.com/docs/mix-blend-mode
44623
+ */
44624
+ 'mix-blend': [{
44625
+ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']
44626
+ }],
44627
+ /**
44628
+ * Background Blend Mode
44629
+ * @see https://tailwindcss.com/docs/background-blend-mode
44630
+ */
44631
+ 'bg-blend': [{
44632
+ 'bg-blend': scaleBlendMode()
44633
+ }],
44634
+ /**
44635
+ * Mask Clip
44636
+ * @see https://tailwindcss.com/docs/mask-clip
44637
+ */
44638
+ 'mask-clip': [{
44639
+ 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']
44640
+ }, 'mask-no-clip'],
44641
+ /**
44642
+ * Mask Composite
44643
+ * @see https://tailwindcss.com/docs/mask-composite
44644
+ */
44645
+ 'mask-composite': [{
44646
+ mask: ['add', 'subtract', 'intersect', 'exclude']
44647
+ }],
44648
+ /**
44649
+ * Mask Image
44650
+ * @see https://tailwindcss.com/docs/mask-image
44651
+ */
44652
+ 'mask-image-linear-pos': [{
44653
+ 'mask-linear': [isNumber]
44654
+ }],
44655
+ 'mask-image-linear-from-pos': [{
44656
+ 'mask-linear-from': scaleMaskImagePosition()
44657
+ }],
44658
+ 'mask-image-linear-to-pos': [{
44659
+ 'mask-linear-to': scaleMaskImagePosition()
44660
+ }],
44661
+ 'mask-image-linear-from-color': [{
44662
+ 'mask-linear-from': scaleColor()
44663
+ }],
44664
+ 'mask-image-linear-to-color': [{
44665
+ 'mask-linear-to': scaleColor()
44666
+ }],
44667
+ 'mask-image-t-from-pos': [{
44668
+ 'mask-t-from': scaleMaskImagePosition()
44669
+ }],
44670
+ 'mask-image-t-to-pos': [{
44671
+ 'mask-t-to': scaleMaskImagePosition()
44672
+ }],
44673
+ 'mask-image-t-from-color': [{
44674
+ 'mask-t-from': scaleColor()
44675
+ }],
44676
+ 'mask-image-t-to-color': [{
44677
+ 'mask-t-to': scaleColor()
44678
+ }],
44679
+ 'mask-image-r-from-pos': [{
44680
+ 'mask-r-from': scaleMaskImagePosition()
44681
+ }],
44682
+ 'mask-image-r-to-pos': [{
44683
+ 'mask-r-to': scaleMaskImagePosition()
44684
+ }],
44685
+ 'mask-image-r-from-color': [{
44686
+ 'mask-r-from': scaleColor()
44687
+ }],
44688
+ 'mask-image-r-to-color': [{
44689
+ 'mask-r-to': scaleColor()
44690
+ }],
44691
+ 'mask-image-b-from-pos': [{
44692
+ 'mask-b-from': scaleMaskImagePosition()
44693
+ }],
44694
+ 'mask-image-b-to-pos': [{
44695
+ 'mask-b-to': scaleMaskImagePosition()
44696
+ }],
44697
+ 'mask-image-b-from-color': [{
44698
+ 'mask-b-from': scaleColor()
44699
+ }],
44700
+ 'mask-image-b-to-color': [{
44701
+ 'mask-b-to': scaleColor()
44702
+ }],
44703
+ 'mask-image-l-from-pos': [{
44704
+ 'mask-l-from': scaleMaskImagePosition()
44705
+ }],
44706
+ 'mask-image-l-to-pos': [{
44707
+ 'mask-l-to': scaleMaskImagePosition()
44708
+ }],
44709
+ 'mask-image-l-from-color': [{
44710
+ 'mask-l-from': scaleColor()
44711
+ }],
44712
+ 'mask-image-l-to-color': [{
44713
+ 'mask-l-to': scaleColor()
44714
+ }],
44715
+ 'mask-image-x-from-pos': [{
44716
+ 'mask-x-from': scaleMaskImagePosition()
44717
+ }],
44718
+ 'mask-image-x-to-pos': [{
44719
+ 'mask-x-to': scaleMaskImagePosition()
44720
+ }],
44721
+ 'mask-image-x-from-color': [{
44722
+ 'mask-x-from': scaleColor()
44723
+ }],
44724
+ 'mask-image-x-to-color': [{
44725
+ 'mask-x-to': scaleColor()
44726
+ }],
44727
+ 'mask-image-y-from-pos': [{
44728
+ 'mask-y-from': scaleMaskImagePosition()
44729
+ }],
44730
+ 'mask-image-y-to-pos': [{
44731
+ 'mask-y-to': scaleMaskImagePosition()
44732
+ }],
44733
+ 'mask-image-y-from-color': [{
44734
+ 'mask-y-from': scaleColor()
44735
+ }],
44736
+ 'mask-image-y-to-color': [{
44737
+ 'mask-y-to': scaleColor()
44738
+ }],
44739
+ 'mask-image-radial': [{
44740
+ 'mask-radial': [isArbitraryVariable, isArbitraryValue]
44741
+ }],
44742
+ 'mask-image-radial-from-pos': [{
44743
+ 'mask-radial-from': scaleMaskImagePosition()
44744
+ }],
44745
+ 'mask-image-radial-to-pos': [{
44746
+ 'mask-radial-to': scaleMaskImagePosition()
44747
+ }],
44748
+ 'mask-image-radial-from-color': [{
44749
+ 'mask-radial-from': scaleColor()
44750
+ }],
44751
+ 'mask-image-radial-to-color': [{
44752
+ 'mask-radial-to': scaleColor()
44753
+ }],
44754
+ 'mask-image-radial-shape': [{
44755
+ 'mask-radial': ['circle', 'ellipse']
44756
+ }],
44757
+ 'mask-image-radial-size': [{
44758
+ 'mask-radial': [{
44759
+ closest: ['side', 'corner'],
44760
+ farthest: ['side', 'corner']
44761
+ }]
44762
+ }],
44763
+ 'mask-image-radial-pos': [{
44764
+ 'mask-radial-at': scalePosition()
44765
+ }],
44766
+ 'mask-image-conic-pos': [{
44767
+ 'mask-conic': [isNumber]
44768
+ }],
44769
+ 'mask-image-conic-from-pos': [{
44770
+ 'mask-conic-from': scaleMaskImagePosition()
44771
+ }],
44772
+ 'mask-image-conic-to-pos': [{
44773
+ 'mask-conic-to': scaleMaskImagePosition()
44774
+ }],
44775
+ 'mask-image-conic-from-color': [{
44776
+ 'mask-conic-from': scaleColor()
44777
+ }],
44778
+ 'mask-image-conic-to-color': [{
44779
+ 'mask-conic-to': scaleColor()
44780
+ }],
44781
+ /**
44782
+ * Mask Mode
44783
+ * @see https://tailwindcss.com/docs/mask-mode
44784
+ */
44785
+ 'mask-mode': [{
44786
+ mask: ['alpha', 'luminance', 'match']
44787
+ }],
44788
+ /**
44789
+ * Mask Origin
44790
+ * @see https://tailwindcss.com/docs/mask-origin
44791
+ */
44792
+ 'mask-origin': [{
44793
+ 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']
44794
+ }],
44795
+ /**
44796
+ * Mask Position
44797
+ * @see https://tailwindcss.com/docs/mask-position
44798
+ */
44799
+ 'mask-position': [{
44800
+ mask: scaleBgPosition()
44801
+ }],
44802
+ /**
44803
+ * Mask Repeat
44804
+ * @see https://tailwindcss.com/docs/mask-repeat
44805
+ */
44806
+ 'mask-repeat': [{
44807
+ mask: scaleBgRepeat()
44808
+ }],
44809
+ /**
44810
+ * Mask Size
44811
+ * @see https://tailwindcss.com/docs/mask-size
44812
+ */
44813
+ 'mask-size': [{
44814
+ mask: scaleBgSize()
44815
+ }],
44816
+ /**
44817
+ * Mask Type
44818
+ * @see https://tailwindcss.com/docs/mask-type
44819
+ */
44820
+ 'mask-type': [{
44821
+ 'mask-type': ['alpha', 'luminance']
44822
+ }],
44823
+ /**
44824
+ * Mask Image
44825
+ * @see https://tailwindcss.com/docs/mask-image
44826
+ */
44827
+ 'mask-image': [{
44828
+ mask: ['none', isArbitraryVariable, isArbitraryValue]
44829
+ }],
44830
+ // ---------------
44831
+ // --- Filters ---
44832
+ // ---------------
44833
+ /**
44834
+ * Filter
44835
+ * @see https://tailwindcss.com/docs/filter
44836
+ */
44837
+ filter: [{
44838
+ filter: [
44839
+ // Deprecated since Tailwind CSS v3.0.0
44840
+ '', 'none', isArbitraryVariable, isArbitraryValue]
44841
+ }],
44842
+ /**
44843
+ * Blur
44844
+ * @see https://tailwindcss.com/docs/blur
44845
+ */
44846
+ blur: [{
44847
+ blur: scaleBlur()
44848
+ }],
44849
+ /**
44850
+ * Brightness
44851
+ * @see https://tailwindcss.com/docs/brightness
44852
+ */
44853
+ brightness: [{
44854
+ brightness: [isNumber, isArbitraryVariable, isArbitraryValue]
44855
+ }],
44856
+ /**
44857
+ * Contrast
44858
+ * @see https://tailwindcss.com/docs/contrast
44859
+ */
44860
+ contrast: [{
44861
+ contrast: [isNumber, isArbitraryVariable, isArbitraryValue]
44862
+ }],
44863
+ /**
44864
+ * Drop Shadow
44865
+ * @see https://tailwindcss.com/docs/drop-shadow
44866
+ */
44867
+ 'drop-shadow': [{
44868
+ 'drop-shadow': [
44869
+ // Deprecated since Tailwind CSS v4.0.0
44870
+ '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]
44871
+ }],
44872
+ /**
44873
+ * Drop Shadow Color
44874
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
44875
+ */
44876
+ 'drop-shadow-color': [{
44877
+ 'drop-shadow': scaleColor()
44878
+ }],
44879
+ /**
44880
+ * Grayscale
44881
+ * @see https://tailwindcss.com/docs/grayscale
44882
+ */
44883
+ grayscale: [{
44884
+ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]
44885
+ }],
44886
+ /**
44887
+ * Hue Rotate
44888
+ * @see https://tailwindcss.com/docs/hue-rotate
44889
+ */
44890
+ 'hue-rotate': [{
44891
+ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]
44892
+ }],
44893
+ /**
44894
+ * Invert
44895
+ * @see https://tailwindcss.com/docs/invert
44896
+ */
44897
+ invert: [{
44898
+ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]
44899
+ }],
44900
+ /**
44901
+ * Saturate
44902
+ * @see https://tailwindcss.com/docs/saturate
44903
+ */
44904
+ saturate: [{
44905
+ saturate: [isNumber, isArbitraryVariable, isArbitraryValue]
44906
+ }],
44907
+ /**
44908
+ * Sepia
44909
+ * @see https://tailwindcss.com/docs/sepia
44910
+ */
44911
+ sepia: [{
44912
+ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]
44913
+ }],
44914
+ /**
44915
+ * Backdrop Filter
44916
+ * @see https://tailwindcss.com/docs/backdrop-filter
44917
+ */
44918
+ 'backdrop-filter': [{
44919
+ 'backdrop-filter': [
44920
+ // Deprecated since Tailwind CSS v3.0.0
44921
+ '', 'none', isArbitraryVariable, isArbitraryValue]
44922
+ }],
44923
+ /**
44924
+ * Backdrop Blur
44925
+ * @see https://tailwindcss.com/docs/backdrop-blur
44926
+ */
44927
+ 'backdrop-blur': [{
44928
+ 'backdrop-blur': scaleBlur()
44929
+ }],
44930
+ /**
44931
+ * Backdrop Brightness
44932
+ * @see https://tailwindcss.com/docs/backdrop-brightness
44933
+ */
44934
+ 'backdrop-brightness': [{
44935
+ 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]
44936
+ }],
44937
+ /**
44938
+ * Backdrop Contrast
44939
+ * @see https://tailwindcss.com/docs/backdrop-contrast
44940
+ */
44941
+ 'backdrop-contrast': [{
44942
+ 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]
44943
+ }],
44944
+ /**
44945
+ * Backdrop Grayscale
44946
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
44947
+ */
44948
+ 'backdrop-grayscale': [{
44949
+ 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]
44950
+ }],
44951
+ /**
44952
+ * Backdrop Hue Rotate
44953
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
44954
+ */
44955
+ 'backdrop-hue-rotate': [{
44956
+ 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]
44957
+ }],
44958
+ /**
44959
+ * Backdrop Invert
44960
+ * @see https://tailwindcss.com/docs/backdrop-invert
44961
+ */
44962
+ 'backdrop-invert': [{
44963
+ 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]
44964
+ }],
44965
+ /**
44966
+ * Backdrop Opacity
44967
+ * @see https://tailwindcss.com/docs/backdrop-opacity
44968
+ */
44969
+ 'backdrop-opacity': [{
44970
+ 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]
44971
+ }],
44972
+ /**
44973
+ * Backdrop Saturate
44974
+ * @see https://tailwindcss.com/docs/backdrop-saturate
44975
+ */
44976
+ 'backdrop-saturate': [{
44977
+ 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]
44978
+ }],
44979
+ /**
44980
+ * Backdrop Sepia
44981
+ * @see https://tailwindcss.com/docs/backdrop-sepia
44982
+ */
44983
+ 'backdrop-sepia': [{
44984
+ 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]
44985
+ }],
44986
+ // --------------
44987
+ // --- Tables ---
44988
+ // --------------
44989
+ /**
44990
+ * Border Collapse
44991
+ * @see https://tailwindcss.com/docs/border-collapse
44992
+ */
44993
+ 'border-collapse': [{
44994
+ border: ['collapse', 'separate']
44995
+ }],
44996
+ /**
44997
+ * Border Spacing
44998
+ * @see https://tailwindcss.com/docs/border-spacing
44999
+ */
45000
+ 'border-spacing': [{
45001
+ 'border-spacing': scaleUnambiguousSpacing()
45002
+ }],
45003
+ /**
45004
+ * Border Spacing X
45005
+ * @see https://tailwindcss.com/docs/border-spacing
45006
+ */
45007
+ 'border-spacing-x': [{
45008
+ 'border-spacing-x': scaleUnambiguousSpacing()
45009
+ }],
45010
+ /**
45011
+ * Border Spacing Y
45012
+ * @see https://tailwindcss.com/docs/border-spacing
45013
+ */
45014
+ 'border-spacing-y': [{
45015
+ 'border-spacing-y': scaleUnambiguousSpacing()
45016
+ }],
45017
+ /**
45018
+ * Table Layout
45019
+ * @see https://tailwindcss.com/docs/table-layout
45020
+ */
45021
+ 'table-layout': [{
45022
+ table: ['auto', 'fixed']
45023
+ }],
45024
+ /**
45025
+ * Caption Side
45026
+ * @see https://tailwindcss.com/docs/caption-side
45027
+ */
45028
+ caption: [{
45029
+ caption: ['top', 'bottom']
45030
+ }],
45031
+ // ---------------------------------
45032
+ // --- Transitions and Animation ---
45033
+ // ---------------------------------
45034
+ /**
45035
+ * Transition Property
45036
+ * @see https://tailwindcss.com/docs/transition-property
45037
+ */
45038
+ transition: [{
45039
+ transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]
45040
+ }],
45041
+ /**
45042
+ * Transition Behavior
45043
+ * @see https://tailwindcss.com/docs/transition-behavior
45044
+ */
45045
+ 'transition-behavior': [{
45046
+ transition: ['normal', 'discrete']
45047
+ }],
45048
+ /**
45049
+ * Transition Duration
45050
+ * @see https://tailwindcss.com/docs/transition-duration
45051
+ */
45052
+ duration: [{
45053
+ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]
45054
+ }],
45055
+ /**
45056
+ * Transition Timing Function
45057
+ * @see https://tailwindcss.com/docs/transition-timing-function
45058
+ */
45059
+ ease: [{
45060
+ ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]
45061
+ }],
45062
+ /**
45063
+ * Transition Delay
45064
+ * @see https://tailwindcss.com/docs/transition-delay
45065
+ */
45066
+ delay: [{
45067
+ delay: [isNumber, isArbitraryVariable, isArbitraryValue]
45068
+ }],
45069
+ /**
45070
+ * Animation
45071
+ * @see https://tailwindcss.com/docs/animation
45072
+ */
45073
+ animate: [{
45074
+ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]
45075
+ }],
45076
+ // ------------------
45077
+ // --- Transforms ---
45078
+ // ------------------
45079
+ /**
45080
+ * Backface Visibility
45081
+ * @see https://tailwindcss.com/docs/backface-visibility
45082
+ */
45083
+ backface: [{
45084
+ backface: ['hidden', 'visible']
45085
+ }],
45086
+ /**
45087
+ * Perspective
45088
+ * @see https://tailwindcss.com/docs/perspective
45089
+ */
45090
+ perspective: [{
45091
+ perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]
45092
+ }],
45093
+ /**
45094
+ * Perspective Origin
45095
+ * @see https://tailwindcss.com/docs/perspective-origin
45096
+ */
45097
+ 'perspective-origin': [{
45098
+ 'perspective-origin': scalePositionWithArbitrary()
45099
+ }],
45100
+ /**
45101
+ * Rotate
45102
+ * @see https://tailwindcss.com/docs/rotate
45103
+ */
45104
+ rotate: [{
45105
+ rotate: scaleRotate()
45106
+ }],
45107
+ /**
45108
+ * Rotate X
45109
+ * @see https://tailwindcss.com/docs/rotate
45110
+ */
45111
+ 'rotate-x': [{
45112
+ 'rotate-x': scaleRotate()
45113
+ }],
45114
+ /**
45115
+ * Rotate Y
45116
+ * @see https://tailwindcss.com/docs/rotate
45117
+ */
45118
+ 'rotate-y': [{
45119
+ 'rotate-y': scaleRotate()
45120
+ }],
45121
+ /**
45122
+ * Rotate Z
45123
+ * @see https://tailwindcss.com/docs/rotate
45124
+ */
45125
+ 'rotate-z': [{
45126
+ 'rotate-z': scaleRotate()
45127
+ }],
45128
+ /**
45129
+ * Scale
45130
+ * @see https://tailwindcss.com/docs/scale
45131
+ */
45132
+ scale: [{
45133
+ scale: scaleScale()
45134
+ }],
45135
+ /**
45136
+ * Scale X
45137
+ * @see https://tailwindcss.com/docs/scale
45138
+ */
45139
+ 'scale-x': [{
45140
+ 'scale-x': scaleScale()
45141
+ }],
45142
+ /**
45143
+ * Scale Y
45144
+ * @see https://tailwindcss.com/docs/scale
45145
+ */
45146
+ 'scale-y': [{
45147
+ 'scale-y': scaleScale()
45148
+ }],
45149
+ /**
45150
+ * Scale Z
45151
+ * @see https://tailwindcss.com/docs/scale
45152
+ */
45153
+ 'scale-z': [{
45154
+ 'scale-z': scaleScale()
45155
+ }],
45156
+ /**
45157
+ * Scale 3D
45158
+ * @see https://tailwindcss.com/docs/scale
45159
+ */
45160
+ 'scale-3d': ['scale-3d'],
45161
+ /**
45162
+ * Skew
45163
+ * @see https://tailwindcss.com/docs/skew
45164
+ */
45165
+ skew: [{
45166
+ skew: scaleSkew()
45167
+ }],
45168
+ /**
45169
+ * Skew X
45170
+ * @see https://tailwindcss.com/docs/skew
45171
+ */
45172
+ 'skew-x': [{
45173
+ 'skew-x': scaleSkew()
45174
+ }],
45175
+ /**
45176
+ * Skew Y
45177
+ * @see https://tailwindcss.com/docs/skew
45178
+ */
45179
+ 'skew-y': [{
45180
+ 'skew-y': scaleSkew()
45181
+ }],
45182
+ /**
45183
+ * Transform
45184
+ * @see https://tailwindcss.com/docs/transform
45185
+ */
45186
+ transform: [{
45187
+ transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']
45188
+ }],
45189
+ /**
45190
+ * Transform Origin
45191
+ * @see https://tailwindcss.com/docs/transform-origin
45192
+ */
45193
+ 'transform-origin': [{
45194
+ origin: scalePositionWithArbitrary()
45195
+ }],
45196
+ /**
45197
+ * Transform Style
45198
+ * @see https://tailwindcss.com/docs/transform-style
45199
+ */
45200
+ 'transform-style': [{
45201
+ transform: ['3d', 'flat']
45202
+ }],
45203
+ /**
45204
+ * Translate
45205
+ * @see https://tailwindcss.com/docs/translate
45206
+ */
45207
+ translate: [{
45208
+ translate: scaleTranslate()
45209
+ }],
45210
+ /**
45211
+ * Translate X
45212
+ * @see https://tailwindcss.com/docs/translate
45213
+ */
45214
+ 'translate-x': [{
45215
+ 'translate-x': scaleTranslate()
45216
+ }],
45217
+ /**
45218
+ * Translate Y
45219
+ * @see https://tailwindcss.com/docs/translate
45220
+ */
45221
+ 'translate-y': [{
45222
+ 'translate-y': scaleTranslate()
45223
+ }],
45224
+ /**
45225
+ * Translate Z
45226
+ * @see https://tailwindcss.com/docs/translate
45227
+ */
45228
+ 'translate-z': [{
45229
+ 'translate-z': scaleTranslate()
45230
+ }],
45231
+ /**
45232
+ * Translate None
45233
+ * @see https://tailwindcss.com/docs/translate
45234
+ */
45235
+ 'translate-none': ['translate-none'],
45236
+ // ---------------------
45237
+ // --- Interactivity ---
45238
+ // ---------------------
45239
+ /**
45240
+ * Accent Color
45241
+ * @see https://tailwindcss.com/docs/accent-color
45242
+ */
45243
+ accent: [{
45244
+ accent: scaleColor()
45245
+ }],
45246
+ /**
45247
+ * Appearance
45248
+ * @see https://tailwindcss.com/docs/appearance
45249
+ */
45250
+ appearance: [{
45251
+ appearance: ['none', 'auto']
45252
+ }],
45253
+ /**
45254
+ * Caret Color
45255
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
45256
+ */
45257
+ 'caret-color': [{
45258
+ caret: scaleColor()
45259
+ }],
45260
+ /**
45261
+ * Color Scheme
45262
+ * @see https://tailwindcss.com/docs/color-scheme
45263
+ */
45264
+ 'color-scheme': [{
45265
+ scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']
45266
+ }],
45267
+ /**
45268
+ * Cursor
45269
+ * @see https://tailwindcss.com/docs/cursor
45270
+ */
45271
+ cursor: [{
45272
+ 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]
45273
+ }],
45274
+ /**
45275
+ * Field Sizing
45276
+ * @see https://tailwindcss.com/docs/field-sizing
45277
+ */
45278
+ 'field-sizing': [{
45279
+ 'field-sizing': ['fixed', 'content']
45280
+ }],
45281
+ /**
45282
+ * Pointer Events
45283
+ * @see https://tailwindcss.com/docs/pointer-events
45284
+ */
45285
+ 'pointer-events': [{
45286
+ 'pointer-events': ['auto', 'none']
45287
+ }],
45288
+ /**
45289
+ * Resize
45290
+ * @see https://tailwindcss.com/docs/resize
45291
+ */
45292
+ resize: [{
45293
+ resize: ['none', '', 'y', 'x']
45294
+ }],
45295
+ /**
45296
+ * Scroll Behavior
45297
+ * @see https://tailwindcss.com/docs/scroll-behavior
45298
+ */
45299
+ 'scroll-behavior': [{
45300
+ scroll: ['auto', 'smooth']
45301
+ }],
45302
+ /**
45303
+ * Scroll Margin
45304
+ * @see https://tailwindcss.com/docs/scroll-margin
45305
+ */
45306
+ 'scroll-m': [{
45307
+ 'scroll-m': scaleUnambiguousSpacing()
45308
+ }],
45309
+ /**
45310
+ * Scroll Margin X
45311
+ * @see https://tailwindcss.com/docs/scroll-margin
45312
+ */
45313
+ 'scroll-mx': [{
45314
+ 'scroll-mx': scaleUnambiguousSpacing()
45315
+ }],
45316
+ /**
45317
+ * Scroll Margin Y
45318
+ * @see https://tailwindcss.com/docs/scroll-margin
45319
+ */
45320
+ 'scroll-my': [{
45321
+ 'scroll-my': scaleUnambiguousSpacing()
45322
+ }],
45323
+ /**
45324
+ * Scroll Margin Start
45325
+ * @see https://tailwindcss.com/docs/scroll-margin
45326
+ */
45327
+ 'scroll-ms': [{
45328
+ 'scroll-ms': scaleUnambiguousSpacing()
45329
+ }],
45330
+ /**
45331
+ * Scroll Margin End
45332
+ * @see https://tailwindcss.com/docs/scroll-margin
45333
+ */
45334
+ 'scroll-me': [{
45335
+ 'scroll-me': scaleUnambiguousSpacing()
45336
+ }],
45337
+ /**
45338
+ * Scroll Margin Top
45339
+ * @see https://tailwindcss.com/docs/scroll-margin
45340
+ */
45341
+ 'scroll-mt': [{
45342
+ 'scroll-mt': scaleUnambiguousSpacing()
45343
+ }],
45344
+ /**
45345
+ * Scroll Margin Right
45346
+ * @see https://tailwindcss.com/docs/scroll-margin
45347
+ */
45348
+ 'scroll-mr': [{
45349
+ 'scroll-mr': scaleUnambiguousSpacing()
45350
+ }],
45351
+ /**
45352
+ * Scroll Margin Bottom
45353
+ * @see https://tailwindcss.com/docs/scroll-margin
45354
+ */
45355
+ 'scroll-mb': [{
45356
+ 'scroll-mb': scaleUnambiguousSpacing()
45357
+ }],
45358
+ /**
45359
+ * Scroll Margin Left
45360
+ * @see https://tailwindcss.com/docs/scroll-margin
45361
+ */
45362
+ 'scroll-ml': [{
45363
+ 'scroll-ml': scaleUnambiguousSpacing()
45364
+ }],
45365
+ /**
45366
+ * Scroll Padding
45367
+ * @see https://tailwindcss.com/docs/scroll-padding
45368
+ */
45369
+ 'scroll-p': [{
45370
+ 'scroll-p': scaleUnambiguousSpacing()
45371
+ }],
45372
+ /**
45373
+ * Scroll Padding X
45374
+ * @see https://tailwindcss.com/docs/scroll-padding
45375
+ */
45376
+ 'scroll-px': [{
45377
+ 'scroll-px': scaleUnambiguousSpacing()
45378
+ }],
45379
+ /**
45380
+ * Scroll Padding Y
45381
+ * @see https://tailwindcss.com/docs/scroll-padding
45382
+ */
45383
+ 'scroll-py': [{
45384
+ 'scroll-py': scaleUnambiguousSpacing()
45385
+ }],
45386
+ /**
45387
+ * Scroll Padding Start
45388
+ * @see https://tailwindcss.com/docs/scroll-padding
45389
+ */
45390
+ 'scroll-ps': [{
45391
+ 'scroll-ps': scaleUnambiguousSpacing()
45392
+ }],
45393
+ /**
45394
+ * Scroll Padding End
45395
+ * @see https://tailwindcss.com/docs/scroll-padding
45396
+ */
45397
+ 'scroll-pe': [{
45398
+ 'scroll-pe': scaleUnambiguousSpacing()
45399
+ }],
45400
+ /**
45401
+ * Scroll Padding Top
45402
+ * @see https://tailwindcss.com/docs/scroll-padding
45403
+ */
45404
+ 'scroll-pt': [{
45405
+ 'scroll-pt': scaleUnambiguousSpacing()
45406
+ }],
45407
+ /**
45408
+ * Scroll Padding Right
45409
+ * @see https://tailwindcss.com/docs/scroll-padding
45410
+ */
45411
+ 'scroll-pr': [{
45412
+ 'scroll-pr': scaleUnambiguousSpacing()
45413
+ }],
45414
+ /**
45415
+ * Scroll Padding Bottom
45416
+ * @see https://tailwindcss.com/docs/scroll-padding
45417
+ */
45418
+ 'scroll-pb': [{
45419
+ 'scroll-pb': scaleUnambiguousSpacing()
45420
+ }],
45421
+ /**
45422
+ * Scroll Padding Left
45423
+ * @see https://tailwindcss.com/docs/scroll-padding
45424
+ */
45425
+ 'scroll-pl': [{
45426
+ 'scroll-pl': scaleUnambiguousSpacing()
45427
+ }],
45428
+ /**
45429
+ * Scroll Snap Align
45430
+ * @see https://tailwindcss.com/docs/scroll-snap-align
45431
+ */
45432
+ 'snap-align': [{
45433
+ snap: ['start', 'end', 'center', 'align-none']
45434
+ }],
45435
+ /**
45436
+ * Scroll Snap Stop
45437
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
45438
+ */
45439
+ 'snap-stop': [{
45440
+ snap: ['normal', 'always']
45441
+ }],
45442
+ /**
45443
+ * Scroll Snap Type
45444
+ * @see https://tailwindcss.com/docs/scroll-snap-type
45445
+ */
45446
+ 'snap-type': [{
45447
+ snap: ['none', 'x', 'y', 'both']
45448
+ }],
45449
+ /**
45450
+ * Scroll Snap Type Strictness
45451
+ * @see https://tailwindcss.com/docs/scroll-snap-type
45452
+ */
45453
+ 'snap-strictness': [{
45454
+ snap: ['mandatory', 'proximity']
45455
+ }],
45456
+ /**
45457
+ * Touch Action
45458
+ * @see https://tailwindcss.com/docs/touch-action
45459
+ */
45460
+ touch: [{
45461
+ touch: ['auto', 'none', 'manipulation']
45462
+ }],
45463
+ /**
45464
+ * Touch Action X
45465
+ * @see https://tailwindcss.com/docs/touch-action
45466
+ */
45467
+ 'touch-x': [{
45468
+ 'touch-pan': ['x', 'left', 'right']
45469
+ }],
45470
+ /**
45471
+ * Touch Action Y
45472
+ * @see https://tailwindcss.com/docs/touch-action
45473
+ */
45474
+ 'touch-y': [{
45475
+ 'touch-pan': ['y', 'up', 'down']
45476
+ }],
45477
+ /**
45478
+ * Touch Action Pinch Zoom
45479
+ * @see https://tailwindcss.com/docs/touch-action
45480
+ */
45481
+ 'touch-pz': ['touch-pinch-zoom'],
45482
+ /**
45483
+ * User Select
45484
+ * @see https://tailwindcss.com/docs/user-select
45485
+ */
45486
+ select: [{
45487
+ select: ['none', 'text', 'all', 'auto']
45488
+ }],
45489
+ /**
45490
+ * Will Change
45491
+ * @see https://tailwindcss.com/docs/will-change
45492
+ */
45493
+ 'will-change': [{
45494
+ 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]
45495
+ }],
45496
+ // -----------
45497
+ // --- SVG ---
45498
+ // -----------
45499
+ /**
45500
+ * Fill
45501
+ * @see https://tailwindcss.com/docs/fill
45502
+ */
45503
+ fill: [{
45504
+ fill: ['none', ...scaleColor()]
45505
+ }],
45506
+ /**
45507
+ * Stroke Width
45508
+ * @see https://tailwindcss.com/docs/stroke-width
45509
+ */
45510
+ 'stroke-w': [{
45511
+ stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]
45512
+ }],
45513
+ /**
45514
+ * Stroke
45515
+ * @see https://tailwindcss.com/docs/stroke
45516
+ */
45517
+ stroke: [{
45518
+ stroke: ['none', ...scaleColor()]
45519
+ }],
45520
+ // ---------------------
45521
+ // --- Accessibility ---
45522
+ // ---------------------
45523
+ /**
45524
+ * Forced Color Adjust
45525
+ * @see https://tailwindcss.com/docs/forced-color-adjust
45526
+ */
45527
+ 'forced-color-adjust': [{
45528
+ 'forced-color-adjust': ['auto', 'none']
45529
+ }]
45530
+ },
45531
+ conflictingClassGroups: {
45532
+ overflow: ['overflow-x', 'overflow-y'],
45533
+ overscroll: ['overscroll-x', 'overscroll-y'],
45534
+ inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],
45535
+ 'inset-x': ['right', 'left'],
45536
+ 'inset-y': ['top', 'bottom'],
45537
+ flex: ['basis', 'grow', 'shrink'],
45538
+ gap: ['gap-x', 'gap-y'],
45539
+ p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],
45540
+ px: ['pr', 'pl'],
45541
+ py: ['pt', 'pb'],
45542
+ m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],
45543
+ mx: ['mr', 'ml'],
45544
+ my: ['mt', 'mb'],
45545
+ size: ['w', 'h'],
45546
+ 'font-size': ['leading'],
45547
+ 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],
45548
+ 'fvn-ordinal': ['fvn-normal'],
45549
+ 'fvn-slashed-zero': ['fvn-normal'],
45550
+ 'fvn-figure': ['fvn-normal'],
45551
+ 'fvn-spacing': ['fvn-normal'],
45552
+ 'fvn-fraction': ['fvn-normal'],
45553
+ 'line-clamp': ['display', 'overflow'],
45554
+ 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'],
45555
+ 'rounded-s': ['rounded-ss', 'rounded-es'],
45556
+ 'rounded-e': ['rounded-se', 'rounded-ee'],
45557
+ 'rounded-t': ['rounded-tl', 'rounded-tr'],
45558
+ 'rounded-r': ['rounded-tr', 'rounded-br'],
45559
+ 'rounded-b': ['rounded-br', 'rounded-bl'],
45560
+ 'rounded-l': ['rounded-tl', 'rounded-bl'],
45561
+ 'border-spacing': ['border-spacing-x', 'border-spacing-y'],
45562
+ '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'],
45563
+ 'border-w-x': ['border-w-r', 'border-w-l'],
45564
+ 'border-w-y': ['border-w-t', 'border-w-b'],
45565
+ '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'],
45566
+ 'border-color-x': ['border-color-r', 'border-color-l'],
45567
+ 'border-color-y': ['border-color-t', 'border-color-b'],
45568
+ translate: ['translate-x', 'translate-y', 'translate-none'],
45569
+ 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],
45570
+ 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],
45571
+ 'scroll-mx': ['scroll-mr', 'scroll-ml'],
45572
+ 'scroll-my': ['scroll-mt', 'scroll-mb'],
45573
+ 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],
45574
+ 'scroll-px': ['scroll-pr', 'scroll-pl'],
45575
+ 'scroll-py': ['scroll-pt', 'scroll-pb'],
45576
+ touch: ['touch-x', 'touch-y', 'touch-pz'],
45577
+ 'touch-x': ['touch'],
45578
+ 'touch-y': ['touch'],
45579
+ 'touch-pz': ['touch']
45580
+ },
45581
+ conflictingClassGroupModifiers: {
45582
+ 'font-size': ['leading']
45583
+ },
45584
+ orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']
45585
+ };
45586
+ };
45587
+ const twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);
45588
+
45589
+ function cn(...inputs) {
45590
+ return twMerge(clsx(inputs));
45591
+ }
45592
+
45593
+ export { Whiteboard, WhiteboardProvider, cn, useCapture as useWhiteboardStream };
42595
45594
  //# sourceMappingURL=index.esm.js.map