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