whatsapp-ui-react 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +133 -0
  3. package/dist/components/Chat/Chat.d.ts +48 -0
  4. package/dist/components/Chat/Chat.d.ts.map +1 -0
  5. package/dist/components/Chat/ChatReplyContext.d.ts +22 -0
  6. package/dist/components/Chat/ChatReplyContext.d.ts.map +1 -0
  7. package/dist/components/Chat/DayDivider.d.ts +11 -0
  8. package/dist/components/Chat/DayDivider.d.ts.map +1 -0
  9. package/dist/components/Chat/Header.d.ts +16 -0
  10. package/dist/components/Chat/Header.d.ts.map +1 -0
  11. package/dist/components/Chat/Inputfield.d.ts +31 -0
  12. package/dist/components/Chat/Inputfield.d.ts.map +1 -0
  13. package/dist/components/Chat/InputfieldActions.d.ts +26 -0
  14. package/dist/components/Chat/InputfieldActions.d.ts.map +1 -0
  15. package/dist/components/Chat/MessageList.d.ts +11 -0
  16. package/dist/components/Chat/MessageList.d.ts.map +1 -0
  17. package/dist/components/Chat/index.d.ts +11 -0
  18. package/dist/components/Chat/index.d.ts.map +1 -0
  19. package/dist/components/Chat/index.parts.d.ts +13 -0
  20. package/dist/components/Chat/index.parts.d.ts.map +1 -0
  21. package/dist/components/Message/Audio/Audio.d.ts +13 -0
  22. package/dist/components/Message/Audio/Audio.d.ts.map +1 -0
  23. package/dist/components/Message/Audio/index.d.ts +3 -0
  24. package/dist/components/Message/Audio/index.d.ts.map +1 -0
  25. package/dist/components/Message/Contact/Contact.d.ts +9 -0
  26. package/dist/components/Message/Contact/Contact.d.ts.map +1 -0
  27. package/dist/components/Message/Contact/index.d.ts +3 -0
  28. package/dist/components/Message/Contact/index.d.ts.map +1 -0
  29. package/dist/components/Message/Emoji/Emoji.d.ts +16 -0
  30. package/dist/components/Message/Emoji/Emoji.d.ts.map +1 -0
  31. package/dist/components/Message/Emoji/index.d.ts +3 -0
  32. package/dist/components/Message/Emoji/index.d.ts.map +1 -0
  33. package/dist/components/Message/Event/Event.d.ts +9 -0
  34. package/dist/components/Message/Event/Event.d.ts.map +1 -0
  35. package/dist/components/Message/Event/index.d.ts +3 -0
  36. package/dist/components/Message/Event/index.d.ts.map +1 -0
  37. package/dist/components/Message/File/File.d.ts +9 -0
  38. package/dist/components/Message/File/File.d.ts.map +1 -0
  39. package/dist/components/Message/File/index.d.ts +3 -0
  40. package/dist/components/Message/File/index.d.ts.map +1 -0
  41. package/dist/components/Message/Gif/Gif.d.ts +9 -0
  42. package/dist/components/Message/Gif/Gif.d.ts.map +1 -0
  43. package/dist/components/Message/Gif/index.d.ts +3 -0
  44. package/dist/components/Message/Gif/index.d.ts.map +1 -0
  45. package/dist/components/Message/Image/Image.d.ts +15 -0
  46. package/dist/components/Message/Image/Image.d.ts.map +1 -0
  47. package/dist/components/Message/Image/index.d.ts +3 -0
  48. package/dist/components/Message/Image/index.d.ts.map +1 -0
  49. package/dist/components/Message/Location/Location.d.ts +9 -0
  50. package/dist/components/Message/Location/Location.d.ts.map +1 -0
  51. package/dist/components/Message/Location/index.d.ts +3 -0
  52. package/dist/components/Message/Location/index.d.ts.map +1 -0
  53. package/dist/components/Message/Message.d.ts +34 -0
  54. package/dist/components/Message/Message.d.ts.map +1 -0
  55. package/dist/components/Message/MessageContext.d.ts +32 -0
  56. package/dist/components/Message/MessageContext.d.ts.map +1 -0
  57. package/dist/components/Message/Poll/Poll.d.ts +9 -0
  58. package/dist/components/Message/Poll/Poll.d.ts.map +1 -0
  59. package/dist/components/Message/Poll/index.d.ts +3 -0
  60. package/dist/components/Message/Poll/index.d.ts.map +1 -0
  61. package/dist/components/Message/StatusIcon.d.ts +12 -0
  62. package/dist/components/Message/StatusIcon.d.ts.map +1 -0
  63. package/dist/components/Message/Sticker/Sticker.d.ts +13 -0
  64. package/dist/components/Message/Sticker/Sticker.d.ts.map +1 -0
  65. package/dist/components/Message/Sticker/index.d.ts +3 -0
  66. package/dist/components/Message/Sticker/index.d.ts.map +1 -0
  67. package/dist/components/Message/Text/Text.d.ts +11 -0
  68. package/dist/components/Message/Text/Text.d.ts.map +1 -0
  69. package/dist/components/Message/Text/index.d.ts +3 -0
  70. package/dist/components/Message/Text/index.d.ts.map +1 -0
  71. package/dist/components/Message/Video/Video.d.ts +9 -0
  72. package/dist/components/Message/Video/Video.d.ts.map +1 -0
  73. package/dist/components/Message/Video/index.d.ts +3 -0
  74. package/dist/components/Message/Video/index.d.ts.map +1 -0
  75. package/dist/components/Message/Voice/Voice.d.ts +13 -0
  76. package/dist/components/Message/Voice/Voice.d.ts.map +1 -0
  77. package/dist/components/Message/Voice/Waveform.d.ts +18 -0
  78. package/dist/components/Message/Voice/Waveform.d.ts.map +1 -0
  79. package/dist/components/Message/Voice/index.d.ts +3 -0
  80. package/dist/components/Message/Voice/index.d.ts.map +1 -0
  81. package/dist/components/Message/index.d.ts +31 -0
  82. package/dist/components/Message/index.d.ts.map +1 -0
  83. package/dist/components/Message/index.parts.d.ts +33 -0
  84. package/dist/components/Message/index.parts.d.ts.map +1 -0
  85. package/dist/components/Reply/Reply.d.ts +14 -0
  86. package/dist/components/Reply/Reply.d.ts.map +1 -0
  87. package/dist/components/Reply/index.d.ts +3 -0
  88. package/dist/components/Reply/index.d.ts.map +1 -0
  89. package/dist/hooks/useAudioPlayer.d.ts +26 -0
  90. package/dist/hooks/useAudioPlayer.d.ts.map +1 -0
  91. package/dist/hooks/useMessages.d.ts +13 -0
  92. package/dist/hooks/useMessages.d.ts.map +1 -0
  93. package/dist/hooks/useReply.d.ts +22 -0
  94. package/dist/hooks/useReply.d.ts.map +1 -0
  95. package/dist/icons/AttachIcon.d.ts +7 -0
  96. package/dist/icons/AttachIcon.d.ts.map +1 -0
  97. package/dist/icons/AudioFileIcon.d.ts +8 -0
  98. package/dist/icons/AudioFileIcon.d.ts.map +1 -0
  99. package/dist/icons/AvatarPlaceholderIcon.d.ts +7 -0
  100. package/dist/icons/AvatarPlaceholderIcon.d.ts.map +1 -0
  101. package/dist/icons/BubbleTailIcon.d.ts +4 -0
  102. package/dist/icons/BubbleTailIcon.d.ts.map +1 -0
  103. package/dist/icons/MicFillIcon.d.ts +7 -0
  104. package/dist/icons/MicFillIcon.d.ts.map +1 -0
  105. package/dist/icons/MicOutlineIcon.d.ts +7 -0
  106. package/dist/icons/MicOutlineIcon.d.ts.map +1 -0
  107. package/dist/icons/PauseIcon.d.ts +7 -0
  108. package/dist/icons/PauseIcon.d.ts.map +1 -0
  109. package/dist/icons/PlayIcon.d.ts +7 -0
  110. package/dist/icons/PlayIcon.d.ts.map +1 -0
  111. package/dist/icons/SendIcon.d.ts +7 -0
  112. package/dist/icons/SendIcon.d.ts.map +1 -0
  113. package/dist/icons/StatusDoubleCheckIcon.d.ts +7 -0
  114. package/dist/icons/StatusDoubleCheckIcon.d.ts.map +1 -0
  115. package/dist/icons/StatusSendingIcon.d.ts +7 -0
  116. package/dist/icons/StatusSendingIcon.d.ts.map +1 -0
  117. package/dist/icons/StatusSentIcon.d.ts +7 -0
  118. package/dist/icons/StatusSentIcon.d.ts.map +1 -0
  119. package/dist/icons/StickerIcon.d.ts +7 -0
  120. package/dist/icons/StickerIcon.d.ts.map +1 -0
  121. package/dist/icons/index.d.ts +14 -0
  122. package/dist/icons/index.d.ts.map +1 -0
  123. package/dist/index.cjs +4316 -0
  124. package/dist/index.cjs.map +1 -0
  125. package/dist/index.d.ts +11 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +4315 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/tailwind.css +49 -0
  130. package/dist/utils/audio.d.ts +14 -0
  131. package/dist/utils/audio.d.ts.map +1 -0
  132. package/dist/utils/cn.d.ts +4 -0
  133. package/dist/utils/cn.d.ts.map +1 -0
  134. package/dist/utils/color.d.ts +3 -0
  135. package/dist/utils/color.d.ts.map +1 -0
  136. package/dist/utils/date.d.ts +5 -0
  137. package/dist/utils/date.d.ts.map +1 -0
  138. package/dist/utils/extractText.d.ts +7 -0
  139. package/dist/utils/extractText.d.ts.map +1 -0
  140. package/dist/utils/groupMessages.d.ts +24 -0
  141. package/dist/utils/groupMessages.d.ts.map +1 -0
  142. package/dist/utils/message.d.ts +5 -0
  143. package/dist/utils/message.d.ts.map +1 -0
  144. package/dist/utils/string.d.ts +3 -0
  145. package/dist/utils/string.d.ts.map +1 -0
  146. package/dist/utils/time.d.ts +8 -0
  147. package/dist/utils/time.d.ts.map +1 -0
  148. package/package.json +96 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/icons/AttachIcon.tsx","../src/icons/AudioFileIcon.tsx","../src/icons/AvatarPlaceholderIcon.tsx","../src/icons/BubbleTailIcon.tsx","../src/icons/MicFillIcon.tsx","../src/icons/MicOutlineIcon.tsx","../src/icons/PauseIcon.tsx","../src/icons/PlayIcon.tsx","../src/icons/SendIcon.tsx","../src/icons/StatusDoubleCheckIcon.tsx","../src/icons/StatusSendingIcon.tsx","../src/icons/StatusSentIcon.tsx","../src/icons/StickerIcon.tsx","../node_modules/clsx/dist/clsx.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/utils/cn.ts","../src/components/Message/MessageContext.ts","../src/components/Message/StatusIcon.tsx","../src/components/Message/Message.tsx","../src/utils/color.ts","../src/components/Message/Text/Text.tsx","../src/components/Message/Emoji/Emoji.tsx","../src/hooks/useAudioPlayer.ts","../src/utils/audio.ts","../src/components/Message/Audio/Audio.tsx","../src/components/Message/Voice/Waveform.tsx","../src/components/Message/Voice/Voice.tsx","../src/components/Message/Sticker/Sticker.tsx","../src/components/Message/Video/Video.tsx","../src/components/Message/File/File.tsx","../src/components/Message/Location/Location.tsx","../src/components/Message/Contact/Contact.tsx","../src/components/Message/Poll/Poll.tsx","../src/components/Message/Event/Event.tsx","../src/components/Message/Gif/Gif.tsx","../src/components/Message/Image/Image.tsx","../src/utils/message.ts","../src/components/Chat/ChatReplyContext.ts","../src/utils/string.ts","../src/components/Chat/Header.tsx","../src/components/Chat/InputfieldActions.tsx","../src/components/Chat/Inputfield.tsx","../src/utils/date.ts","../src/utils/groupMessages.ts","../src/utils/time.ts","../src/components/Chat/DayDivider.tsx","../src/components/Chat/MessageList.tsx","../src/components/Chat/Chat.tsx","../src/components/Chat/index.ts","../src/utils/extractText.ts","../src/hooks/useReply.ts","../src/components/Reply/Reply.tsx","../src/hooks/useMessages.tsx"],"sourcesContent":["import React from 'react'\n\ninterface AttachIconProps {\n className?: string\n}\n\nfunction AttachIcon({ className }: AttachIconProps): React.JSX.Element {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" className={className}>\n <path\n d=\"M11 13H5.5C4.94772 13 4.5 12.5523 4.5 12C4.5 11.4477 4.94772 11 5.5 11H11V5.5C11 4.94772 11.4477 4.5 12 4.5C12.5523 4.5 13 4.94772 13 5.5V11H18.5C19.0523 11 19.5 11.4477 19.5 12C19.5 12.5523 19.0523 13 18.5 13H13V18.5C13 19.0523 12.5523 19.5 12 19.5C11.4477 19.5 11 19.0523 11 18.5V13Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport { AttachIcon }\n","import React from 'react'\n\ninterface AudioFileIconProps {\n className?: string | undefined\n title?: string | undefined\n}\n\nfunction AudioFileIcon({ className, title }: AudioFileIconProps): React.JSX.Element {\n return (\n <svg\n viewBox=\"0 0 55 55\"\n height=\"40\"\n width=\"40\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n className={className}\n >\n {title && <title>{title}</title>}\n <path fill=\"#FFAD1F\" d=\"M0,0h55v55H0V0z\" />\n <path\n fill=\"#FFFFFF\"\n d=\"M27.5,16c-5.6,0-10,4.4-10,10v7.8c0,1.9,1.4,3.3,3.3,3.3h3.3v-8.9h-4.4V26\n c0-4.3,3.4-7.8,7.8-7.8s7.8,3.4,7.8,7.8v2.2h-4.4v8.9h3.3c1.9,0,3.3-1.4,3.3-3.3V26\n C37.5,20.4,33.1,16,27.5,16z\"\n />\n </svg>\n )\n}\n\nexport { AudioFileIcon }\n","import React from 'react'\n\ninterface AvatarPlaceholderIconProps {\n className?: string\n}\n\nfunction AvatarPlaceholderIcon({ className }: AvatarPlaceholderIconProps): React.JSX.Element {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" className={className}>\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8V21h19.2v-1.8c0-3.2-6.4-4.8-9.6-4.8z\" />\n </svg>\n )\n}\n\nexport { AvatarPlaceholderIcon }\n","import React from 'react'\n\nfunction BubbleTailIcon(): React.JSX.Element {\n return (\n <svg\n viewBox=\"0 0 8 13\"\n height=\"13\"\n width=\"8\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n >\n <path opacity=\"0.13\" d=\"M5.188,1H0v11.193l6.467-8.625C7.526,2.156,6.958,1,5.188,1z\" />\n <path fill=\"currentColor\" d=\"M5.188,0H0v11.193l6.467-8.625C7.526,1.156,6.958,0,5.188,0z\" />\n </svg>\n )\n}\n\nexport { BubbleTailIcon }\n","import React from 'react'\n\ninterface MicFillIconProps {\n className?: string\n}\n\nfunction MicFillIcon({ className }: MicFillIconProps): React.JSX.Element {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" className={className}>\n <path\n d=\"M12 14a2.9 2.9 0 0 1-2.125-.875A2.9 2.9 0 0 1 9 11V5q0-1.25.875-2.125A2.9 2.9 0 0 1 12 2q1.25 0 2.125.875T15 5v6q0 1.25-.875 2.125A2.9 2.9 0 0 1 12 14m0 7a1 1 0 0 1-1-1v-2.075q-2.6-.35-4.3-2.325-1.37-1.59-1.636-3.603C4.992 11.45 5.448 11 6 11s.988.452 1.09.995q.274 1.443 1.373 2.543Q9.926 16 12 16q2.075 0 3.537-1.463 1.099-1.098 1.373-2.543c.102-.542.538-.994 1.09-.994s1.008.45.936.997Q18.669 14.01 17.3 15.6q-1.7 1.975-4.3 2.325V20a1 1 0 0 1-1 1\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport { MicFillIcon }\n","import React from 'react'\n\ninterface MicOutlineIconProps {\n className?: string\n}\n\nfunction MicOutlineIcon({ className }: MicOutlineIconProps): React.JSX.Element {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" className={className}>\n <path\n d=\"M12 14C11.1667 14 10.4583 13.7083 9.875 13.125C9.29167 12.5417 9 11.8333 9 11V5C9 4.16667 9.29167 3.45833 9.875 2.875C10.4583 2.29167 11.1667 2 12 2C12.8333 2 13.5417 2.29167 14.125 2.875C14.7083 3.45833 15 4.16667 15 5V11C15 11.8333 14.7083 12.5417 14.125 13.125C13.5417 13.7083 12.8333 14 12 14ZM12 21C11.4477 21 11 20.5523 11 20V17.925C9.26667 17.6917 7.83333 16.9167 6.7 15.6C5.78727 14.5396 5.24207 13.3387 5.06441 11.9973C4.9919 11.4498 5.44772 11 6 11C6.55228 11 6.98782 11.4518 7.0905 11.9945C7.27271 12.9574 7.73004 13.805 8.4625 14.5375C9.4375 15.5125 10.6167 16 12 16C13.3833 16 14.5625 15.5125 15.5375 14.5375C16.27 13.805 16.7273 12.9574 16.9095 11.9945C17.0122 11.4518 17.4477 11 18 11C18.5523 11 19.0081 11.4498 18.9356 11.9973C18.7579 13.3387 18.2127 14.5396 17.3 15.6C16.1667 16.9167 14.7333 17.6917 13 17.925V20C13 20.5523 12.5523 21 12 21ZM12 12C12.2833 12 12.5208 11.9042 12.7125 11.7125C12.9042 11.5208 13 11.2833 13 11V5C13 4.71667 12.9042 4.47917 12.7125 4.2875C12.5208 4.09583 12.2833 4 12 4C11.7167 4 11.4792 4.09583 11.2875 4.2875C11.0958 4.47917 11 4.71667 11 5V11C11 11.2833 11.0958 11.5208 11.2875 11.7125C11.4792 11.9042 11.7167 12 12 12Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport { MicOutlineIcon }\n","import React from 'react'\n\ninterface PauseIconProps {\n className?: string\n}\n\nfunction PauseIcon({ className }: PauseIconProps): React.JSX.Element {\n return (\n <svg\n viewBox=\"0 0 34 34\"\n height=\"24\"\n width=\"24\"\n preserveAspectRatio=\"xMidYMid meet\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M9.2,25c0,0.5,0.4,1,0.9,1h3.6c0.5,0,0.9-0.4,0.9-1V9c0-0.5-0.4-0.9-0.9-0.9h-3.6C9.7,8,9.2,8.4,9.2,9V25z M20.2,8c-0.5,0-1,0.4-1,0.9V25c0,0.5,0.4,1,1,1h3.6c0.5,0,1-0.4,1-1V9c0-0.5-0.4-0.9-1-0.9C23.8,8,20.2,8,20.2,8z\" />\n </svg>\n )\n}\n\nexport { PauseIcon }\n","import React from 'react'\n\ninterface PlayIconProps {\n className?: string\n}\n\nfunction PlayIcon({ className }: PlayIconProps): React.JSX.Element {\n return (\n <svg\n viewBox=\"0 0 34 34\"\n height=\"24\"\n width=\"24\"\n preserveAspectRatio=\"xMidYMid meet\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M8.5,8.7c0-1.7,1.2-2.4,2.6-1.5l14.4,8.3c1.4,0.8,1.4,2.2,0,3l-14.4,8.3c-1.4,0.8-2.6,0.2-2.6-1.5V8.7z\" />\n </svg>\n )\n}\n\nexport { PlayIcon }\n","import React from 'react'\n\ninterface SendIconProps {\n className?: string\n}\n\nfunction SendIcon({ className }: SendIconProps): React.JSX.Element {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" className={className}>\n <path d=\"M3.4 20.5l17.8-8.5a.5.5 0 000-.9L3.4 2.5a.5.5 0 00-.7.6l2.2 7.1c.1.2.2.4.5.4h7.4a.75.75 0 010 1.5H5.4a.5.5 0 00-.5.4l-2.2 7.1a.5.5 0 00.7.6z\" />\n </svg>\n )\n}\n\nexport { SendIcon }\n","import React from 'react'\n\ninterface StatusDoubleCheckIconProps {\n className?: string\n}\n\nfunction StatusDoubleCheckIcon({ className }: StatusDoubleCheckIconProps): React.JSX.Element {\n return (\n <svg viewBox=\"0 0 16 11\" fill=\"none\" aria-hidden=\"true\" className={className}>\n <path\n d=\"M11.0714 0.652832C10.991 0.585124 10.8894 0.55127 10.7667 0.55127C10.6186 0.55127 10.4916 0.610514 10.3858 0.729004L4.19688 8.36523L1.79112 6.09277C1.7488 6.04622 1.69802 6.01025 1.63877 5.98486C1.57953 5.95947 1.51817 5.94678 1.45469 5.94678C1.32351 5.94678 1.20925 5.99544 1.11192 6.09277L0.800883 6.40381C0.707784 6.49268 0.661235 6.60482 0.661235 6.74023C0.661235 6.87565 0.707784 6.98991 0.800883 7.08301L3.79698 10.0791C3.94509 10.2145 4.11224 10.2822 4.29844 10.2822C4.40424 10.2822 4.5058 10.259 4.60313 10.2124C4.70046 10.1659 4.78086 10.1003 4.84434 10.0156L11.4903 1.59863C11.5623 1.5013 11.5982 1.40186 11.5982 1.30029C11.5982 1.14372 11.5348 1.01888 11.4078 0.925781L11.0714 0.652832ZM8.6212 8.32715C8.43077 8.20866 8.2488 8.09017 8.0753 7.97168C7.99489 7.89128 7.8891 7.85107 7.75791 7.85107C7.6098 7.85107 7.4892 7.90397 7.3961 8.00977L7.10411 8.33984C7.01947 8.43717 6.97715 8.54508 6.97715 8.66357C6.97715 8.79476 7.0237 8.90902 7.1168 9.00635L8.1959 10.0791C8.33132 10.2145 8.49636 10.2822 8.69102 10.2822C8.79681 10.2822 8.89838 10.259 8.99571 10.2124C9.09304 10.1659 9.17556 10.1003 9.24327 10.0156L15.8639 1.62402C15.9358 1.53939 15.9718 1.43994 15.9718 1.32568C15.9718 1.1818 15.9125 1.05697 15.794 0.951172L15.4386 0.678223C15.3582 0.610514 15.2587 0.57666 15.1402 0.57666C14.9964 0.57666 14.8715 0.635905 14.7657 0.754395L8.6212 8.32715Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport { StatusDoubleCheckIcon }\n","import React from 'react'\n\ninterface StatusSendingIconProps {\n className?: string\n}\n\nfunction StatusSendingIcon({ className }: StatusSendingIconProps): React.JSX.Element {\n return (\n <svg viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" className={className}>\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )\n}\n\nexport { StatusSendingIcon }\n","import React from 'react'\n\ninterface StatusSentIconProps {\n className?: string\n}\n\nfunction StatusSentIcon({ className }: StatusSentIconProps): React.JSX.Element {\n return (\n <svg viewBox=\"0 0 16 11\" fill=\"none\" aria-hidden=\"true\" className={className}>\n <path\n d=\"M11.0714 0.652832C10.991 0.585124 10.8894 0.55127 10.7667 0.55127C10.6186 0.55127 10.4916 0.610514 10.3858 0.729004L4.19688 8.36523L1.79112 6.09277C1.7488 6.04622 1.69802 6.01025 1.63877 5.98486C1.57953 5.95947 1.51817 5.94678 1.45469 5.94678C1.32351 5.94678 1.20925 5.99544 1.11192 6.09277L0.800883 6.40381C0.707784 6.49268 0.661235 6.60482 0.661235 6.74023C0.661235 6.87565 0.707784 6.98991 0.800883 7.08301L3.79698 10.0791C3.94509 10.2145 4.11224 10.2822 4.29844 10.2822C4.40424 10.2822 4.5058 10.259 4.60313 10.2124C4.70046 10.1659 4.78086 10.1003 4.84434 10.0156L11.4903 1.59863C11.5623 1.5013 11.5982 1.40186 11.5982 1.30029C11.5982 1.14372 11.5348 1.01888 11.4078 0.925781L11.0714 0.652832Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport { StatusSentIcon }\n","import React from 'react'\n\ninterface StickerIconProps {\n className?: string\n}\n\nfunction StickerIcon({ className }: StickerIconProps): React.JSX.Element {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" className={className}>\n <path\n d=\"M8.49893 10.2521C9.32736 10.2521 9.99893 9.5805 9.99893 8.75208C9.99893 7.92365 9.32736 7.25208 8.49893 7.25208C7.6705 7.25208 6.99893 7.92365 6.99893 8.75208C6.99893 9.5805 7.6705 10.2521 8.49893 10.2521Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M17.0011 8.75208C17.0011 9.5805 16.3295 10.2521 15.5011 10.2521C14.6726 10.2521 14.0011 9.5805 14.0011 8.75208C14.0011 7.92365 14.6726 7.25208 15.5011 7.25208C16.3295 7.25208 17.0011 7.92365 17.0011 8.75208Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.8221 19.9799C15.5379 21.2537 13.8087 21.9781 12 22H9.27273C5.25611 22 2 18.7439 2 14.7273V9.27273C2 5.25611 5.25611 2 9.27273 2H14.7273C18.7439 2 22 5.25611 22 9.27273V11.8141C22 13.7532 21.2256 15.612 19.8489 16.9776L16.8221 19.9799ZM14.7273 4H9.27273C6.36068 4 4 6.36068 4 9.27273V14.7273C4 17.6393 6.36068 20 9.27273 20H11.3331C11.722 19.8971 12.0081 19.5417 12.0058 19.1204L11.9935 16.8564C11.9933 16.8201 11.9935 16.784 11.9941 16.7479C11.0454 16.7473 10.159 16.514 9.33502 16.0479C8.51002 15.5812 7.84752 14.9479 7.34752 14.1479C7.24752 13.9479 7.25585 13.7479 7.37252 13.5479C7.48919 13.3479 7.66419 13.2479 7.89752 13.2479L13.5939 13.2479C14.4494 12.481 15.5811 12.016 16.8216 12.0208L19.0806 12.0296C19.5817 12.0315 19.9889 11.6259 19.9889 11.1248V9.07648H19.9964C19.8932 6.25535 17.5736 4 14.7273 4ZM14.0057 19.1095C14.0066 19.2605 13.9959 19.4089 13.9744 19.5537C14.5044 19.3124 14.9926 18.9776 15.4136 18.5599L18.4405 15.5576C18.8989 15.1029 19.2653 14.5726 19.5274 13.996C19.3793 14.0187 19.2275 14.0301 19.0729 14.0295L16.8138 14.0208C15.252 14.0147 13.985 15.2837 13.9935 16.8455L14.0057 19.1095Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport { StickerIcon }\n","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}export 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}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst 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$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * 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.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n 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'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n 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]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n 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'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/** Merges Tailwind class names, resolving conflicts via `tailwind-merge`. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n","import React from 'react'\n\n/** Direction of a message bubble. */\nexport type MessageDirection = 'in' | 'out'\n\n/** Delivery status of an outgoing message. */\nexport type MessageStatus = 'sending' | 'sent' | 'delivered' | 'read'\n\n/** Discriminates the rendered content type. */\nexport type MessageType =\n | 'text'\n | 'image'\n | 'gif'\n | 'audio'\n | 'video'\n | 'sticker'\n | 'file'\n | 'custom'\n\n/** Context value provided by {@link Message} to its children. */\nexport interface MessageContextValue {\n /** Render direction of this message bubble. */\n direction: MessageDirection\n /** `true` for the first message in a consecutive sender run; controls bubble tail rendering. */\n top: boolean\n /** `true` when rendered inside a group chat; enables avatar and sender name display. */\n group: boolean\n /** Display name of the sender (group chats only). */\n senderName?: string\n /** Avatar URL of the sender (group chats only). */\n avatarUrl?: string\n /** Formatted send-time string. */\n time?: string\n /** Delivery status. */\n status?: MessageStatus\n}\n\nconst MessageContext = React.createContext<MessageContextValue>({\n direction: 'in',\n top: false,\n group: false,\n})\n\n/**\n * Returns the context provided by the nearest ancestor {@link Message}.\n * Use inside custom message content components.\n */\nfunction useMessage(): MessageContextValue {\n return React.useContext(MessageContext)\n}\n\nexport { MessageContext, useMessage }\n","import { StatusDoubleCheckIcon, StatusSendingIcon, StatusSentIcon } from '@/icons'\nimport { cn } from '@/utils/cn'\nimport React from 'react'\nimport type { MessageStatus } from './MessageContext'\n\n/** @internal */\nexport interface StatusIconProps {\n /** Delivery status to visualise. */\n status: MessageStatus\n /** Additional CSS class names applied to the icon. */\n className?: string\n}\n\nfunction StatusIcon({ status, className }: StatusIconProps): React.JSX.Element {\n if (status === 'sending') {\n return <StatusSendingIcon className={cn('size-3.5', className)} />\n }\n if (status === 'sent') {\n return <StatusSentIcon className={cn('size-4', className)} />\n }\n return (\n <StatusDoubleCheckIcon\n className={cn('size-4', status === 'read' && 'text-wa-read', className)}\n />\n )\n}\n\nexport { StatusIcon }\n","import { AvatarPlaceholderIcon, BubbleTailIcon } from '@/icons'\nimport { cn } from '@/utils/cn'\nimport React from 'react'\nimport type { MessageDirection, MessageStatus } from './MessageContext'\nimport { MessageContext } from './MessageContext'\nimport { StatusIcon } from './StatusIcon'\n\n/** Props for the {@link Message} component. */\nexport interface MessageProps {\n /** `'in'` for received messages, `'out'` for sent. */\n direction: MessageDirection\n /** First message in a consecutive run — renders the bubble tail. @defaultValue `false` */\n top?: boolean\n /** Part of a group chat — renders the sender avatar when `top` is `true`. @defaultValue `false` */\n group?: boolean\n /** Sender avatar URL (group chats). */\n avatarUrl?: string\n /** Sender display name (group chats). */\n senderName?: string\n /** Message content — typically one of the content components (`<Text>`, `<Image>`, etc.). */\n children: React.ReactNode\n /** Additional CSS class names applied to the root element. */\n className?: string\n /**\n * Layout mode.\n * - `'neutral'` — standard bubble with overlaid timestamp\n * - `'free'` — content fills the bubble, timestamp floats below\n * - `'custom'` — children render directly with no wrapper\n * @defaultValue `'custom'`\n */\n mode?: 'neutral' | 'free' | 'custom'\n /** Formatted time string shown in the bubble footer. */\n time?: string\n /** Delivery status icon shown on outgoing messages. */\n status?: MessageStatus\n}\n\nfunction Message({\n direction,\n top = false,\n group = false,\n avatarUrl,\n senderName,\n children,\n className,\n mode = 'custom',\n time,\n status,\n}: MessageProps): React.JSX.Element {\n const isOut = direction === 'out'\n\n const TimeRow = (): React.JSX.Element => (\n <span className=\"flex items-center gap-0.5 text-xs font-medium text-wa-text-secondary\">\n {time}\n {isOut && status !== undefined && <StatusIcon status={status} />}\n </span>\n )\n\n const Tail = (): React.JSX.Element | null =>\n top ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute top-0',\n isOut ? '-right-2 text-wa-bubble-out' : '-left-2 scale-x-[-1] text-wa-bubble-in'\n )}\n >\n <BubbleTailIcon />\n </span>\n ) : null\n\n const renderNeutral = (): React.JSX.Element => (\n <div\n className={cn(\n 'relative w-fit rounded-wa-bubble px-3 py-1.5 shadow-md',\n isOut ? 'bg-wa-bubble-out text-wa-text-primary' : 'bg-wa-bubble-in text-wa-text-primary',\n top && isOut && 'rounded-tr-none',\n top && !isOut && 'rounded-tl-none'\n )}\n >\n <Tail />\n {children}\n <div className=\"pointer-events-none absolute bottom-1 right-2\">\n <TimeRow />\n </div>\n </div>\n )\n\n const renderFree = (): React.JSX.Element => (\n <div className=\"flex flex-col\">\n {children}\n <div\n className={cn(\n 'mt-[5px] self-end rounded-full px-1.5 py-0.5',\n isOut ? 'bg-wa-bubble-out' : 'bg-wa-bubble-in'\n )}\n >\n <TimeRow />\n </div>\n </div>\n )\n\n return (\n <MessageContext.Provider\n value={{\n direction,\n top,\n group,\n ...(senderName !== undefined ? { senderName } : {}),\n ...(avatarUrl !== undefined ? { avatarUrl } : {}),\n ...(time !== undefined ? { time } : {}),\n ...(status !== undefined ? { status } : {}),\n }}\n >\n <div\n className={cn(\n '@container relative flex px-2',\n top ? 'pt-[10px] pb-0.5' : 'pt-[1px] pb-0.5',\n isOut ? 'justify-end' : 'justify-start',\n className\n )}\n >\n {top && group && !isOut && (\n <span\n className=\"absolute -left-10 top-2 flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-full bg-wa-avatar\"\n aria-hidden=\"true\"\n >\n {avatarUrl ? (\n <img src={avatarUrl} alt=\"\" className=\"size-full object-cover\" />\n ) : (\n <AvatarPlaceholderIcon className=\"size-5 text-wa-text-secondary\" />\n )}\n </span>\n )}\n\n {mode === 'neutral' && renderNeutral()}\n {mode === 'free' && renderFree()}\n {mode === 'custom' && children}\n </div>\n </MessageContext.Provider>\n )\n}\n\nexport { Message }\n","const SENDER_COLORS = [\n '#e91e8c',\n '#9c27b0',\n '#673ab7',\n '#2196f3',\n '#009688',\n '#4caf50',\n '#ff9800',\n '#ff5722',\n '#00bcd4',\n '#f06292',\n '#ef5350',\n '#26c6da',\n]\n\n/** Returns a deterministic accent color for a given sender name. */\nexport function senderColor(name: string): string {\n let hash = 0\n for (let i = 0; i < name.length; i++) {\n hash = (hash * 31 + name.charCodeAt(i)) & 0xffff\n }\n return SENDER_COLORS[hash % SENDER_COLORS.length] ?? '#2196f3'\n}\n","import { cn } from '@/utils/cn'\nimport { senderColor } from '@/utils/color'\nimport React from 'react'\nimport { useMessage } from '../MessageContext'\nimport { StatusIcon } from '../StatusIcon'\n\n/** Props for the {@link Text} component. */\nexport interface TextProps {\n /** Plain text content to render. Whitespace and line breaks are preserved. */\n content: string\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\nfunction Text({ content, className }: TextProps): React.JSX.Element {\n const { direction, top, group, senderName, time, status } = useMessage()\n const isOut = direction === 'out'\n\n return (\n <div className={cn('max-w-[65cqw] text-sm', className)}>\n {top && group && !isOut && senderName && (\n <p\n className=\"mb-0.5 text-xs font-semibold leading-tight\"\n style={{ color: senderColor(senderName) }}\n >\n {senderName}\n </p>\n )}\n\n <p className=\"whitespace-pre-wrap break-words leading-relaxed\">\n {content}\n <span\n className=\"pointer-events-none invisible inline-flex select-none items-end gap-0.5 pl-1 text-xs\"\n aria-hidden=\"true\"\n >\n {time}\n {isOut && status && <StatusIcon status={status} />}\n </span>\n </p>\n </div>\n )\n}\n\nexport { Text }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\nimport type { MessageStatus } from '../MessageContext'\nimport { useMessage } from '../MessageContext'\nimport { StatusIcon } from '../StatusIcon'\n\n/** Props for the {@link Emoji} component. */\nexport interface EmojiProps {\n /** The emoji character(s) to display at large size. */\n content: string\n /** Formatted time string rendered in the bottom-right corner overlay. */\n time: string\n /** Delivery status icon shown on outgoing messages. */\n status?: MessageStatus\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction Emoji({ content, time, status, className }: EmojiProps): React.JSX.Element {\n const { direction } = useMessage()\n const isOut = direction === 'out'\n\n return (\n <div className={cn('relative inline-block', className)}>\n <p className=\"select-none text-5xl leading-none [text-shadow:0_1px_3px_rgba(0,0,0,0.25)]\">\n {content}\n </p>\n <span\n className={cn(\n 'absolute bottom-0 right-0 flex items-center gap-0.5 rounded-full px-1.5 py-0.5',\n 'bg-black/40 text-[10px] leading-none text-white backdrop-blur-sm font-medium'\n )}\n >\n {time}\n {isOut && status && <StatusIcon status={status} className=\"text-white\" />}\n </span>\n </div>\n )\n}\n\nexport { Emoji }\n","import type React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\n/** State returned by {@link useAudioPlayer}. */\nexport interface AudioPlayerState {\n /** Ref to attach to an `<audio>` element. */\n audioRef: React.RefObject<HTMLAudioElement>\n /** Whether the audio is currently playing. */\n playing: boolean\n /** Current playback position in seconds. */\n currentTime: number\n /** Total audio duration in seconds. */\n totalDuration: number\n /** Playback progress in the range `0`–`1`. */\n progress: number\n /** Remaining playback time in seconds. */\n remaining: number\n /** Toggles between play and pause. */\n toggle: () => void\n /** Seeks to a fractional position (`0`–`1`). */\n seek: (fraction: number) => void\n}\n\n/**\n * Manages playback state for an audio element.\n * Attach `audioRef` to an `<audio src={src}>` element.\n */\nexport function useAudioPlayer(src: string): AudioPlayerState {\n const audioRef = useRef<HTMLAudioElement>(null)\n const rafRef = useRef<number>(0)\n const [playing, setPlaying] = useState(false)\n const [currentTime, setCurrentTime] = useState(0)\n const [totalDuration, setTotalDuration] = useState(0)\n\n useEffect(() => {\n if (!playing) {\n cancelAnimationFrame(rafRef.current)\n return\n }\n const tick = (): void => {\n const el = audioRef.current\n if (el) setCurrentTime(el.currentTime)\n rafRef.current = requestAnimationFrame(tick)\n }\n rafRef.current = requestAnimationFrame(tick)\n return () => {\n cancelAnimationFrame(rafRef.current)\n }\n }, [playing])\n\n useEffect(() => {\n const el = audioRef.current\n if (!el) return\n const onMeta = (): void => {\n setTotalDuration(el.duration)\n }\n const onEnded = (): void => {\n setPlaying(false)\n cancelAnimationFrame(rafRef.current)\n setCurrentTime(0)\n el.currentTime = 0\n }\n el.addEventListener('loadedmetadata', onMeta)\n el.addEventListener('ended', onEnded)\n return () => {\n el.removeEventListener('loadedmetadata', onMeta)\n el.removeEventListener('ended', onEnded)\n }\n }, [src])\n\n const toggle = useCallback((): void => {\n const el = audioRef.current\n if (!el) return\n if (playing) {\n el.pause()\n setPlaying(false)\n } else {\n void el\n .play()\n .then(() => {\n setPlaying(true)\n })\n .catch(() => {})\n }\n }, [playing])\n\n const seek = useCallback(\n (fraction: number): void => {\n const el = audioRef.current\n if (!el || !totalDuration) return\n const t = Math.max(0, Math.min(fraction, 1)) * totalDuration\n el.currentTime = t\n setCurrentTime(t)\n },\n [totalDuration]\n )\n\n const progress = totalDuration > 0 ? Math.min(currentTime / totalDuration, 1) : 0\n const remaining = totalDuration > 0 ? totalDuration - currentTime : 0\n\n return { audioRef, playing, currentTime, totalDuration, progress, remaining, toggle, seek }\n}\n","/** Number of bars in the waveform visualisation. */\nexport const BAR_COUNT = 44\n\n/**\n * Analyse an audio file at `url` using the Web Audio API and return an array\n * of `BAR_COUNT` amplitude values, each normalised to the range 0–10.\n *\n * Returns an array of zeros when no url is provided or on any error.\n */\nexport async function analyzeAudio(url: string, count: number = BAR_COUNT): Promise<number[]> {\n const ZEROS = (): number[] => Array<number>(count).fill(0)\n\n if (!url || typeof AudioContext === 'undefined') return ZEROS()\n\n try {\n const response = await fetch(url)\n const arrayBuffer = await response.arrayBuffer()\n\n const ctx = new AudioContext()\n const audioBuffer = await ctx.decodeAudioData(arrayBuffer)\n await ctx.close()\n\n const data = audioBuffer.getChannelData(0)\n const chunkSize = Math.floor(data.length / count)\n\n const rmsValues: number[] = []\n for (let i = 0; i < count; i++) {\n const start = i * chunkSize\n const end = Math.min(start + chunkSize, data.length)\n let sum = 0\n for (let j = start; j < end; j++) {\n sum += (data[j] ?? 0) ** 2\n }\n rmsValues.push(Math.sqrt(sum / (end - start)))\n }\n\n const max = Math.max(...rmsValues, 0.0001)\n return rmsValues.map(v => Math.round((v / max) * 10))\n } catch {\n return ZEROS()\n }\n}\n\n/** Formats a duration in seconds as `M:SS`. */\nexport function fmtTime(seconds: number): string {\n const m = Math.floor(seconds / 60)\n const s = Math.floor(seconds % 60)\n return `${String(m)}:${String(s).padStart(2, '0')}`\n}\n\n/** Draws a rounded rectangle path on a 2-D canvas context. */\nexport function roundRect(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number\n): void {\n const rr = Math.min(r, w / 2, h / 2)\n ctx.beginPath()\n ctx.moveTo(x + rr, y)\n ctx.lineTo(x + w - rr, y)\n ctx.arcTo(x + w, y, x + w, y + rr, rr)\n ctx.lineTo(x + w, y + h - rr)\n ctx.arcTo(x + w, y + h, x + w - rr, y + h, rr)\n ctx.lineTo(x + rr, y + h)\n ctx.arcTo(x, y + h, x, y + h - rr, rr)\n ctx.lineTo(x, y + rr)\n ctx.arcTo(x, y, x + rr, y, rr)\n ctx.closePath()\n}\n","import { useAudioPlayer } from '@/hooks/useAudioPlayer'\nimport { AudioFileIcon, PauseIcon, PlayIcon } from '@/icons'\nimport { fmtTime } from '@/utils/audio'\nimport { cn } from '@/utils/cn'\nimport React, { useEffect, useState } from 'react'\nimport { useMessage } from '../MessageContext'\n\n/** Props for the {@link Audio} component. */\nexport interface AudioProps {\n /** URL of the audio file. Streamed via an `<audio>` element. */\n src: string\n /** Fallback duration string (e.g. `'0:42'`) shown before audio metadata has loaded. */\n duration?: string\n /** File name shown as the icon tooltip. */\n fileName?: string\n}\n\nfunction Audio({ src, duration, fileName }: AudioProps): React.JSX.Element {\n const { direction } = useMessage()\n const isOut = direction === 'out'\n\n const { audioRef, playing, progress, remaining, totalDuration, toggle, seek } =\n useAudioPlayer(src)\n\n const [hasPlayed, setHasPlayed] = useState(false)\n useEffect(() => {\n if (progress > 0) setHasPlayed(true)\n }, [progress])\n\n const displayDuration = totalDuration > 0 ? fmtTime(remaining) : (duration ?? '0:00')\n const trackColor = isOut ? 'bg-wa-waveform-out' : 'bg-wa-waveform-in'\n const trackColorFaint = isOut ? 'bg-wa-waveform-out/40' : 'bg-wa-waveform-in/40'\n const dotColor = hasPlayed || isOut ? 'bg-wa-waveform-out' : 'bg-wa-waveform-in'\n\n return (\n <>\n <audio ref={audioRef} src={src} preload=\"metadata\" />\n\n <div className=\"flex h-13.75 w-84 min-w-84 shrink-0 items-center\">\n <span\n aria-hidden=\"true\"\n className=\"flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-full\"\n >\n <AudioFileIcon title={fileName} />\n </span>\n\n <span className=\"w-5.5 shrink-0\" />\n\n {/* Play / Pause */}\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={playing ? 'Pause' : 'Play'}\n className=\"shrink-0 text-wa-text-secondary transition-opacity hover:opacity-70\"\n >\n {playing ? <PauseIcon /> : <PlayIcon />}\n </button>\n\n <span className=\"w-6.25 shrink-0\" />\n\n {/* Track - fills remaining width, flex-1 */}\n <div className=\"relative h-6 flex-1\">\n <div\n className={cn(\n 'pointer-events-none absolute left-0 right-0 top-1/2 h-0.5 -translate-y-1/2 rounded-full',\n trackColorFaint\n )}\n />\n <div\n className={cn(\n 'pointer-events-none absolute left-0 top-1/2 h-0.5 -translate-y-1/2 rounded-full',\n trackColor\n )}\n style={{ width: `${progress * 100}%` }}\n />\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full',\n dotColor\n )}\n style={{ left: `${progress * 100}%` }}\n />\n <input\n type=\"range\"\n min={0}\n max={1000}\n step={1}\n value={Math.round(progress * 1000)}\n onChange={e => {\n seek(Number(e.target.value) / 1000)\n }}\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n aria-label=\"Seek\"\n />\n </div>\n </div>\n\n <span\n className=\"pointer-events-none absolute bottom-1 left-28 text-xs font-medium text-wa-text-secondary\"\n aria-hidden=\"true\"\n >\n {displayDuration}\n </span>\n </>\n )\n}\n\nexport { Audio }\n","import { BAR_COUNT, roundRect } from '@/utils/audio'\nimport { cn } from '@/utils/cn'\nimport React, { useEffect, useRef } from 'react'\n\n// Canvas dimensions - keep width in sync with the wrapper div (w-[200px])\nexport const CANVAS_WIDTH = 200\nconst CANVAS_HEIGHT = 30\n\nconst BAR_MAX_HEIGHT = 26\nconst BAR_WIDTH = 3\nconst SLOT_WIDTH = CANVAS_WIDTH / BAR_COUNT\n\nfunction readCssVar(name: string): string {\n return getComputedStyle(document.documentElement).getPropertyValue(name).trim()\n}\n\n/** @internal */\nexport interface WaveformProps {\n /** Amplitude bars to render — array of `BAR_COUNT` values in the range `0`–`10`. */\n bars: number[]\n /** Playback progress in the range `0`–`1`; determines the played/unplayed colour split. */\n progress: number\n /** `true` for outgoing messages; controls which CSS colour variables are used. */\n isOut: boolean\n /** `true` once the user has started playback; affects the unplayed colour. */\n hasPlayed: boolean\n /** Callback invoked with a fractional position (`0`–`1`) when the user clicks the waveform. */\n seek: (fraction: number) => void\n}\n\nfunction Waveform({ bars, progress, isOut, hasPlayed, seek }: WaveformProps): React.JSX.Element {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n\n useEffect(() => {\n const canvas = canvasRef.current\n if (!canvas) return\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n ctx.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT)\n\n const colorPlayed = isOut\n ? readCssVar('--color-wa-waveform-out')\n : readCssVar('--color-wa-waveform-in')\n const colorUnplayed = isOut\n ? readCssVar('--color-wa-waveform-out-faint')\n : readCssVar('--color-wa-waveform-in-faint')\n\n bars.forEach((amplitude, i) => {\n // Treat 0 (silence / not yet loaded) as 1 - every bar shows as a minimal dot\n const level = Math.max(1, amplitude)\n const barHeight = Math.round((level / 10) * BAR_MAX_HEIGHT)\n const x = i * SLOT_WIDTH + (SLOT_WIDTH - BAR_WIDTH) / 2\n const y = (CANVAS_HEIGHT - barHeight) / 2\n\n ctx.fillStyle = i / BAR_COUNT < progress ? colorPlayed : colorUnplayed\n roundRect(ctx, x, y, BAR_WIDTH, barHeight, BAR_WIDTH / 2)\n ctx.fill()\n })\n }, [bars, progress, isOut])\n\n return (\n <div className=\"relative h-7.5 w-50 shrink-0\">\n <canvas\n ref={canvasRef}\n width={CANVAS_WIDTH}\n height={CANVAS_HEIGHT}\n aria-hidden=\"true\"\n className=\"h-7.5 w-50\"\n />\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full',\n hasPlayed || isOut ? 'bg-wa-waveform-out' : 'bg-wa-waveform-in'\n )}\n style={{ left: `${progress * 100}%` }}\n />\n <input\n type=\"range\"\n min={0}\n max={1000}\n step={1}\n value={Math.round(progress * 1000)}\n onChange={e => {\n seek(Number(e.target.value) / 1000)\n }}\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n aria-label=\"Seek\"\n />\n </div>\n )\n}\n\nexport { Waveform }\n","import { useAudioPlayer } from '@/hooks/useAudioPlayer'\nimport { AvatarPlaceholderIcon, PauseIcon, PlayIcon } from '@/icons'\nimport { analyzeAudio, BAR_COUNT, fmtTime } from '@/utils/audio'\nimport React, { useEffect, useState } from 'react'\nimport { useMessage } from '../MessageContext'\nimport { Waveform } from './Waveform'\n\n/** Props for the {@link Voice} component. */\nexport interface VoiceProps {\n /** URL of the voice message audio file. Streamed via an `<audio>` element. */\n src: string\n /** Fallback duration string (e.g. `'0:07'`) shown before audio metadata has loaded. */\n duration?: string\n /** Avatar URL displayed next to the waveform. Falls back to the sender avatar from `MessageContext`. */\n avatarUrl?: string\n}\n\nfunction Voice({ src, duration, avatarUrl: avatarProp }: VoiceProps): React.JSX.Element {\n const { direction, avatarUrl: ctxAvatar } = useMessage()\n const isOut = direction === 'out'\n const avatar = avatarProp ?? ctxAvatar\n\n const { audioRef, playing, progress, remaining, totalDuration, toggle, seek } =\n useAudioPlayer(src)\n\n const [bars, setBars] = useState<number[]>(Array<number>(BAR_COUNT).fill(0))\n const [hasPlayed, setHasPlayed] = useState(false)\n\n useEffect(() => {\n if (progress > 0) setHasPlayed(true)\n }, [progress])\n\n useEffect(() => {\n setBars(Array<number>(BAR_COUNT).fill(0))\n if (!src) return\n analyzeAudio(src, BAR_COUNT)\n .then(result => {\n setBars(result)\n })\n .catch(() => {})\n }, [src])\n\n const displayDuration = totalDuration > 0 ? fmtTime(remaining) : (duration ?? '0:00')\n\n return (\n <>\n <audio ref={audioRef} src={src} preload=\"metadata\" />\n\n <div className=\"flex h-13.75 w-[336px] min-w-[336px] shrink-0 items-center\">\n {/* Avatar */}\n <span\n aria-hidden=\"true\"\n className=\"flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-full bg-wa-avatar\"\n >\n {avatar ? (\n <img src={avatar} alt=\"\" className=\"size-full object-cover\" />\n ) : (\n <AvatarPlaceholderIcon className=\"size-6 text-wa-text-secondary\" />\n )}\n </span>\n\n <span className=\"w-5.5 shrink-0\" />\n\n {/* Play / Pause */}\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={playing ? 'Pause' : 'Play'}\n className=\"shrink-0 text-wa-text-secondary transition-opacity hover:opacity-70\"\n >\n {playing ? <PauseIcon /> : <PlayIcon />}\n </button>\n\n <span className=\"w-6.25 shrink-0\" />\n\n {/* Waveform */}\n {src ? (\n <Waveform\n bars={bars}\n progress={progress}\n isOut={isOut}\n hasPlayed={hasPlayed}\n seek={seek}\n />\n ) : (\n <span className=\"flex-1 text-xs text-wa-text-secondary\">No audio source</span>\n )}\n </div>\n\n <span\n className=\"pointer-events-none absolute bottom-1 left-28 text-xs font-medium text-wa-text-secondary\"\n aria-hidden=\"true\"\n >\n {displayDuration}\n </span>\n </>\n )\n}\n\nexport { Voice }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** Props for the {@link Sticker} component. */\nexport interface StickerProps {\n /** URL of the sticker image. */\n src: string\n /** Accessible alt text for the sticker image. @defaultValue `''` */\n alt?: string\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction Sticker({ src, alt = '', className }: StickerProps): React.JSX.Element {\n return (\n <div className={cn('relative inline-block', className)}>\n <img\n src={src}\n alt={alt}\n className=\"size-48 select-none object-contain drop-shadow-sm\"\n draggable={false}\n />\n </div>\n )\n}\n\nexport { Sticker }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** Props for the {@link Video} component. */\nexport interface VideoProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction Video({ className }: VideoProps): React.JSX.Element {\n return <div className={cn('w-[336px]', className)} />\n}\n\nexport { Video }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** Props for the {@link File} component. */\nexport interface FileProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction File({ className }: FileProps): React.JSX.Element {\n return <div className={cn('w-[336px]', className)} />\n}\n\nexport { File }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** Props for the {@link Location} component. */\nexport interface LocationProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction Location({ className }: LocationProps): React.JSX.Element {\n return <div className={cn('w-[336px]', className)}>Location</div>\n}\n\nexport { Location }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** Props for the {@link Contact} component. */\nexport interface ContactProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction Contact({ className }: ContactProps): React.JSX.Element {\n return <div className={cn('w-[336px]', className)} />\n}\n\nexport { Contact }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** Props for the {@link Poll} component. */\nexport interface PollProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction Poll({ className }: PollProps): React.JSX.Element {\n return <div className={cn('w-[336px]', className)} />\n}\n\nexport { Poll }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** Props for the {@link Event} component. */\nexport interface EventProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction Event({ className }: EventProps): React.JSX.Element {\n return <div className={cn('w-[336px]', className)} />\n}\n\nexport { Event }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** Props for the {@link Gif} component. */\nexport interface GifProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction Gif({ className }: GifProps): React.JSX.Element {\n return <div className={cn('w-[336px]', className)} />\n}\n\nexport { Gif }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** Props for the {@link Image} component. */\nexport interface ImageProps {\n /** URL of the image to display. */\n src: string\n /** Accessible alt text for the image. @defaultValue `''` */\n alt?: string\n /** Reserved for the overlaid timestamp string; not rendered by this component directly. */\n time?: string\n /** Additional CSS class names applied to the root element. */\n className?: string\n}\n\nfunction Image({ src, alt = '', className }: ImageProps): React.JSX.Element {\n return (\n <div className={cn('w-[336px]', className)}>\n <img src={src} alt={alt} className=\"w-full rounded-wa-bubble object-cover\" />\n </div>\n )\n}\n\nexport { Image }\n","let _counter = 0\n\n/** Generates a sequential, locally-unique message id. */\nexport function uid(): string {\n return `chat-${++_counter}`\n}\n\n/** Returns the current local time as a `HH:MM` string. */\nexport function nowTime(): string {\n const d = new Date()\n return `${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}`\n}\n","import React from 'react'\nimport type { GroupedMessage } from './MessageList'\n\n/** Options for {@link ChatReplyContextValue.addMessage}. */\nexport interface AddMessageOptions {\n /** The React node to render as the new message. */\n node: React.ReactNode\n /** `senderId` stored on the resulting {@link GroupedMessage}. @defaultValue `'me'` */\n senderId?: string\n}\n\n/** Shape of the context provided by {@link Chat} to its descendants. */\nexport interface ChatReplyContextValue {\n /** Current ordered list of all messages in the chat. */\n messages: GroupedMessage[]\n /** Sends a plain-text message as the local user (`senderId: 'me'`). */\n sendMessage: (text: string) => void\n /** Programmatically appends an arbitrary message node to the chat. */\n addMessage: (options: AddMessageOptions) => void\n /** @internal `true` only when a real `<Chat>` component provides this context. */\n provided: boolean\n}\n\nexport const ChatReplyContext = React.createContext<ChatReplyContextValue>({\n messages: [],\n sendMessage: () => {},\n addMessage: () => {},\n provided: false,\n})\n","/** Returns up to two uppercase initials from a display name. */\nexport function getInitials(name: string): string {\n return name\n .split(' ')\n .slice(0, 2)\n .map(w => w[0]?.toUpperCase() ?? '')\n .join('')\n}\n","import { cn } from '@/utils/cn'\nimport { getInitials } from '@/utils/string'\nimport React from 'react'\n\n/** @internal */\ninterface ChatHeaderProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n /** Display name rendered as the primary heading. */\n name: string\n /** URL of the avatar image. Falls back to initials derived from `name` when omitted. */\n avatarUrl?: string\n /** Secondary line displayed below `name` (e.g. `\"online\"` or last-seen text). */\n subtitle?: string\n}\n\nfunction ChatHeader({ className, name, avatarUrl, subtitle }: ChatHeaderProps): React.JSX.Element {\n const initials = getInitials(name)\n\n return (\n <div\n className={cn(\n 'flex items-center gap-3 bg-wa-header px-4 py-3 shadow-[0_1px_4px_rgba(0,0,0,0.15)]',\n className\n )}\n >\n {/* Avatar */}\n <span className=\"shrink-0\">\n {avatarUrl ? (\n <img src={avatarUrl} alt={name} className=\"size-10 rounded-full object-cover\" />\n ) : (\n <span className=\"flex size-10 items-center justify-center rounded-full bg-wa-avatar text-sm font-medium text-wa-text-primary\">\n {initials}\n </span>\n )}\n </span>\n\n {/* Name + subtitle */}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-[15px] font-medium text-wa-text-primary\">{name}</span>\n {subtitle && <span className=\"truncate text-xs text-wa-text-secondary\">{subtitle}</span>}\n </span>\n </div>\n )\n}\n\nexport { ChatHeader }\nexport type { ChatHeaderProps }\n","import { AttachIcon, MicFillIcon, MicOutlineIcon, SendIcon, StickerIcon } from '@/icons'\nimport { cn } from '@/utils/cn'\nimport React from 'react'\n\n/** @internal */\ninterface InputfieldActionsProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n /** When `true` the send button is shown; when `false` the mic button is shown instead. @defaultValue `false` */\n hasValue?: boolean\n /** Content rendered in the expanding textarea slot between the icon buttons and the send/mic button. */\n textareaSlot?: React.ReactNode\n /** Handler for the emoji/sticker icon button. */\n onEmojiClick?: () => void\n /** Handler for the attachment icon button. */\n onAttachClick?: () => void\n /** Handler for the camera icon button (reserved, not yet rendered). */\n onCameraClick?: () => void\n /** Handler for the mic icon button. */\n onMicClick?: () => void\n /** Handler for the send button. */\n onSendClick?: () => void\n /** When `true` the send button is rendered in a disabled state. @defaultValue `false` */\n sendDisabled?: boolean\n}\n\nfunction ActionButton({\n label,\n onClick,\n children,\n}: {\n label: string\n onClick?: () => void\n children: React.ReactNode\n}): React.JSX.Element {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={label}\n className=\"inline-flex size-8 shrink-0 items-center justify-center rounded-full text-wa-icon transition-colors hover:text-wa-text-primary\"\n >\n {children}\n </button>\n )\n}\n\nfunction InputfieldActions({\n className,\n hasValue = false,\n textareaSlot,\n onEmojiClick,\n onAttachClick,\n onCameraClick: _onCameraClick,\n onMicClick,\n onSendClick,\n sendDisabled = false,\n}: InputfieldActionsProps): React.JSX.Element {\n return (\n <div className={cn('flex w-full items-end', className)}>\n <div className=\"flex min-h-10.5 flex-1 items-center gap-1 rounded-full bg-wa-input px-3\">\n <ActionButton label=\"Attachments\" {...(onAttachClick ? { onClick: onAttachClick } : {})}>\n <AttachIcon className=\"size-6\" />\n </ActionButton>\n\n <ActionButton label=\"Sticker\" {...(onEmojiClick ? { onClick: onEmojiClick } : {})}>\n <StickerIcon className=\"size-6\" />\n </ActionButton>\n\n <div className=\"flex flex-1 items-center px-2\">{textareaSlot}</div>\n\n {hasValue ? (\n <button\n type=\"button\"\n onClick={onSendClick}\n disabled={sendDisabled}\n aria-label=\"Send message\"\n className=\"inline-flex size-8 shrink-0 items-center justify-center rounded-full bg-wa-send text-white transition-colors hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <SendIcon className=\"ml-0.5 size-4\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={onMicClick}\n aria-label=\"Record voice message\"\n className=\"group inline-flex size-8 shrink-0 items-center justify-center rounded-full text-wa-icon transition-colors hover:bg-wa-teal hover:text-black\"\n >\n <MicOutlineIcon className=\"size-5 group-hover:hidden\" />\n <MicFillIcon className=\"hidden size-5 group-hover:block\" />\n </button>\n )}\n </div>\n </div>\n )\n}\n\nexport { InputfieldActions }\nexport type { InputfieldActionsProps }\n","import { cn } from '@/utils/cn'\nimport React from 'react'\nimport { InputfieldActions } from './InputfieldActions'\n\n/** Props for the {@link Inputfield} component. */\nexport interface InputfieldProps extends Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'value' | 'defaultValue'\n> {\n /** Additional CSS class names applied to the outer wrapper. */\n className?: string\n /** Additional CSS class names applied to the textarea element. */\n textareaClassName?: string\n /** Additional CSS class names applied to the actions row. */\n actionsClassName?: string\n /** Controlled textarea value. When provided, internal state is bypassed. */\n value?: string\n /** Uncontrolled initial textarea value. */\n defaultValue?: string\n /** Disables the send action without removing the input field. @defaultValue `false` */\n locked?: boolean\n /** Fired on every textarea change with the current string value. */\n onValueChange?: (value: string) => void\n /** Fired with the trimmed message string when the user sends; the field is cleared afterwards. */\n onSend?: (value: string) => void\n /** Handler for the emoji/sticker button. */\n onEmojiClick?: () => void\n /** Handler for the attachment button. */\n onAttachClick?: () => void\n /** Handler for the camera button. */\n onCameraClick?: () => void\n /** Handler for the microphone button. */\n onMicClick?: () => void\n}\n\nfunction Inputfield({\n className,\n textareaClassName,\n actionsClassName,\n value,\n defaultValue,\n locked = false,\n onValueChange,\n onSend,\n onEmojiClick,\n onAttachClick,\n onCameraClick,\n onMicClick,\n onChange,\n onKeyDown,\n placeholder = 'Enter a message.',\n ...props\n}: InputfieldProps): React.JSX.Element {\n const [internalValue, setInternalValue] = React.useState(defaultValue ?? '')\n const isControlled = typeof value === 'string'\n const currentValue = isControlled ? value : internalValue\n const hasValue = currentValue.trim().length > 0\n\n function updateValue(next: string): void {\n if (!isControlled) {\n setInternalValue(next)\n }\n onValueChange?.(next)\n }\n\n function handleChange(event: React.ChangeEvent<HTMLTextAreaElement>): void {\n updateValue(event.target.value)\n onChange?.(event)\n }\n\n function sendCurrentValue(): void {\n if (locked) return\n const trimmedValue = currentValue.trim()\n if (!trimmedValue) {\n return\n }\n onSend?.(trimmedValue)\n updateValue('')\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLTextAreaElement>): void {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n if (!locked) sendCurrentValue()\n }\n onKeyDown?.(event)\n }\n\n return (\n <div className={cn('px-3 pb-3 pt-1', className)}>\n <InputfieldActions\n hasValue={hasValue}\n onSendClick={sendCurrentValue}\n {...(onEmojiClick ? { onEmojiClick } : {})}\n {...(onAttachClick ? { onAttachClick } : {})}\n {...(onCameraClick ? { onCameraClick } : {})}\n {...(onMicClick ? { onMicClick } : {})}\n sendDisabled={locked}\n {...(actionsClassName ? { className: actionsClassName } : {})}\n textareaSlot={\n <textarea\n {...props}\n value={currentValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={1}\n className={cn(\n 'min-h-5 w-full resize-none bg-transparent px-1 py-0 text-sm text-wa-text-body outline-none placeholder:font-medium placeholder:text-wa-icon/70',\n textareaClassName\n )}\n />\n }\n />\n </div>\n )\n}\nexport { Inputfield }\n","/** Coerces a `Date` or ISO string to a `Date`, returning `null` on failure. */\nexport function toDate(value?: Date | string): Date | null {\n if (!value) return null\n const parsed = value instanceof Date ? value : new Date(value)\n if (Number.isNaN(parsed.getTime())) return null\n return parsed\n}\n\n/** Returns `true` when `a` and `b` fall on the same calendar day. */\nexport function isSameCalendarDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n","import type React from 'react'\nimport { isSameCalendarDay, toDate } from './date'\n\n/** A single message entry managed by {@link Chat}. */\nexport interface GroupedMessage {\n /** Unique React key — auto-generated by `<Chat>` when omitted. */\n id?: React.Key\n /** Identifies the sender; `'me'` denotes the local user. */\n senderId: string\n /** The rendered message node, typically a `<Message>` component tree. */\n node: React.ReactNode\n /** Creation timestamp; used to group messages by calendar day and compute day-divider labels. */\n timestamp?: Date | string\n}\n\n/** A run of consecutive messages from the same sender on the same calendar day. */\nexport interface MessageDayGroup {\n /** Sender id shared by all messages in this group. */\n senderId: string\n /** The calendar day for this group, or `null` when no timestamp was provided. */\n dayDate: Date | null\n /** Ordered list of messages belonging to this group. */\n messages: GroupedMessage[]\n}\n\n/** Groups a flat message list into per-sender, per-day segments. */\nexport function groupMessagesByDay(messages: GroupedMessage[]): MessageDayGroup[] {\n return messages.reduce<MessageDayGroup[]>((groups, message) => {\n const lastGroup = groups[groups.length - 1]\n const currentDate = toDate(message.timestamp)\n const lastMessage = lastGroup?.messages[lastGroup.messages.length - 1]\n const lastDate = toDate(lastMessage?.timestamp)\n const isSameDayAsLast =\n currentDate && lastDate ? isSameCalendarDay(currentDate, lastDate) : true\n\n if (lastGroup && lastGroup.senderId === message.senderId && isSameDayAsLast) {\n lastGroup.messages.push(message)\n return groups\n }\n\n groups.push({ senderId: message.senderId, dayDate: currentDate, messages: [message] })\n return groups\n }, [])\n}\n","/** Returns `time` as-is, or the current local time formatted as `HH:MM`. */\nexport function getDisplayTime(time?: string): string {\n return time ?? new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n}\n\n/**\n * Returns a human-readable date label for a day-divider:\n * `'Today'`, `'Yesterday'`, weekday name, or `D.M.YY`.\n */\nexport function getDisplayDate(date?: string): string {\n if (!date) return new Date().toLocaleDateString()\n\n const d = new Date(date)\n const now = new Date()\n\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate())\n const msgDay = new Date(d.getFullYear(), d.getMonth(), d.getDate()) // normalise to midnight\n\n const diffDays = Math.round((today.getTime() - msgDay.getTime()) / 86_400_000)\n\n if (diffDays === 0) return 'Today'\n if (diffDays === 1) return 'Yesterday'\n if (diffDays < 7) return d.toLocaleDateString('en-US', { weekday: 'long' })\n\n // Format as D.M.YY (e.g. 23.1.26)\n const yy = d.getFullYear() % 100\n return `${d.getDate()}.${d.getMonth() + 1}.${yy}`\n}\n","import { cn } from '@/utils/cn'\nimport { getDisplayDate } from '@/utils/time'\nimport React from 'react'\n\n/** @internal */\ninterface DayDividerProps {\n /** Additional CSS class names applied to the root element. */\n className?: string\n /** The calendar day this divider represents; formatted to a human-readable label. */\n date: Date\n}\n\nfunction DayDivider({ className, date }: DayDividerProps): React.JSX.Element {\n const displayDate = getDisplayDate(date.toISOString())\n\n return (\n <div className={cn('flex justify-center py-3', className)}>\n <span className=\"rounded-wa-divider bg-wa-divider px-3 py-1 text-[13px] font-medium text-wa-text-secondary shadow-sm\">\n {displayDate}\n </span>\n </div>\n )\n}\n\nexport { DayDivider, type DayDividerProps }\n","import { cn } from '@/utils/cn'\nimport { isSameCalendarDay } from '@/utils/date'\nimport { groupMessagesByDay, type GroupedMessage } from '@/utils/groupMessages'\nimport React from 'react'\nimport { DayDivider } from './DayDivider'\n\nexport type { GroupedMessage }\n\ninterface MessageListProps {\n className?: string\n messages: GroupedMessage[]\n}\n\nfunction MessageList({ className, messages }: MessageListProps): React.JSX.Element {\n const dayGroups = groupMessagesByDay(messages)\n\n const content = dayGroups.map((group, index) => {\n const previousGroup = dayGroups[index - 1]\n const dayDate = group.dayDate\n const shouldRenderDivider =\n dayDate !== null &&\n (!previousGroup?.dayDate || !isSameCalendarDay(dayDate, previousGroup.dayDate))\n\n return (\n <React.Fragment key={`${group.senderId}-${index}`}>\n {shouldRenderDivider && dayDate !== null && <DayDivider date={dayDate} />}\n {group.messages.map((message, msgIndex) => {\n const node =\n msgIndex === 0\n ? React.cloneElement(message.node as React.ReactElement<{ top?: boolean }>, {\n top: true,\n })\n : message.node\n return (\n <React.Fragment key={message.id ?? `${message.senderId}-${msgIndex}`}>\n {node}\n </React.Fragment>\n )\n })}\n </React.Fragment>\n )\n })\n\n if (className) {\n return <div className={cn(className)}>{content}</div>\n }\n\n return <>{content}</>\n}\n\nexport { MessageList }\nexport type { MessageListProps }\n","import { Message, Text } from '@/components/Message'\nimport { cn } from '@/utils/cn'\nimport { nowTime, uid } from '@/utils/message'\nimport React from 'react'\nimport { ChatReplyContext } from './ChatReplyContext'\nimport { ChatHeader } from './Header'\nimport { Inputfield } from './Inputfield'\nimport type { GroupedMessage } from './MessageList'\nimport { MessageList } from './MessageList'\n\nconst backgroundUrl = new URL('./background.png', import.meta.url).href\n\n/** Props for the {@link Chat} component. */\nexport interface ChatProps {\n /** Display name shown in the chat header. */\n name: string\n /** URL of the avatar image. Falls back to initials derived from `name` when omitted. */\n avatarUrl?: string\n /** Secondary line displayed below `name` in the header (e.g. `\"online\"` or `\"typing...\"`). */\n subtitle?: string\n /** Rendered in the message area when no messages exist yet and `messageHistory` is empty. */\n children?: React.ReactNode\n /** Additional CSS class names applied to the root element. */\n className?: string\n /** Initial message list. Copied into internal state on mount; subsequent external changes are ignored. */\n messageHistory?: GroupedMessage[]\n /** Controls visibility of the input bar. @defaultValue `true` */\n showInputfield?: boolean\n /** Disables the send action without removing the input field, preventing new messages from being added. @defaultValue `false` */\n locked?: boolean\n /** Placeholder text for the textarea. @defaultValue `'Enter a message.'` */\n inputPlaceholder?: string\n /** Controlled textarea value. When provided the component does not manage input state internally. */\n inputValue?: string\n /** Uncontrolled initial textarea value. */\n defaultInputValue?: string\n /** Fired on every textarea change with the current string value. */\n onInputValueChange?: (value: string) => void\n /** Fired after a message is sent with the trimmed message text. The message is also appended to the internal list. */\n onSendMessage?: (value: string) => void\n /** One or more `<Reply>` nodes rendered inside `ChatReplyContext` so they can subscribe to new messages. */\n onReply?: React.ReactNode\n /** Handler for the emoji/sticker button in the input bar. */\n onEmojiClick?: () => void\n /** Handler for the attachment button in the input bar. */\n onAttachClick?: () => void\n /** Handler for the camera button in the input bar. */\n onCameraClick?: () => void\n /** Handler for the microphone button in the input bar. */\n onMicClick?: () => void\n}\n\n/**\n * Top-level chat component. Manages the message list state and composes\n * the header, scrollable message list, and input bar.\n */\nfunction Chat({\n name,\n avatarUrl,\n subtitle,\n children,\n className,\n messageHistory,\n showInputfield = true,\n locked = false,\n inputPlaceholder,\n inputValue,\n defaultInputValue,\n onInputValueChange,\n onSendMessage,\n onReply,\n onEmojiClick,\n onAttachClick,\n onCameraClick,\n onMicClick,\n}: ChatProps): React.JSX.Element {\n const [messages, setMessages] = React.useState<GroupedMessage[]>(messageHistory ?? [])\n const scrollRef = React.useRef<HTMLDivElement>(null)\n\n React.useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight\n }\n }, [messages])\n\n function sendMessage(text: string): void {\n const trimmed = text.trim()\n if (!trimmed) return\n const time = nowTime()\n setMessages(prev => [\n ...prev,\n {\n id: uid(),\n senderId: 'me',\n timestamp: new Date(),\n node: (\n <Message direction=\"out\" mode=\"neutral\" time={time} status=\"sent\">\n <Text content={trimmed} />\n </Message>\n ),\n },\n ])\n onSendMessage?.(trimmed)\n }\n\n function addMessage({\n node,\n senderId = 'me',\n }: {\n node: React.ReactNode\n senderId?: string\n }): void {\n setMessages(prev => [\n ...prev,\n {\n id: uid(),\n senderId,\n timestamp: new Date(),\n node,\n },\n ])\n }\n\n return (\n <ChatReplyContext.Provider value={{ messages, sendMessage, addMessage, provided: true }}>\n <div className={cn('flex h-full min-h-0 flex-col bg-wa-bg', className)}>\n <ChatHeader\n name={name}\n {...(avatarUrl ? { avatarUrl } : {})}\n {...(subtitle ? { subtitle } : {})}\n />\n <div className=\"relative isolate flex min-h-0 flex-1 flex-col\">\n <div\n className=\"pointer-events-none absolute inset-0 -z-10 bg-repeat opacity-[0.06]\"\n style={{ backgroundImage: `url(${backgroundUrl})` }}\n />\n <div ref={scrollRef} className=\"scrollbar-wa flex-1 overflow-y-auto py-2 px-12\">\n {messages.length > 0 ? <MessageList messages={messages} /> : children}\n </div>\n {showInputfield && (\n <Inputfield\n placeholder={inputPlaceholder}\n locked={locked}\n {...(typeof inputValue === 'string' ? { value: inputValue } : {})}\n {...(typeof defaultInputValue === 'string'\n ? { defaultValue: defaultInputValue }\n : {})}\n {...(onInputValueChange ? { onValueChange: onInputValueChange } : {})}\n onSend={sendMessage}\n {...(onEmojiClick ? { onEmojiClick } : {})}\n {...(onAttachClick ? { onAttachClick } : {})}\n {...(onCameraClick ? { onCameraClick } : {})}\n {...(onMicClick ? { onMicClick } : {})}\n />\n )}\n </div>\n {onReply}\n </div>\n </ChatReplyContext.Provider>\n )\n}\n\nexport { Chat }\n","import { Chat as ChatRoot } from './Chat'\nimport * as ChatParts from './index.parts'\n\nconst Chat = Object.assign(ChatRoot, ChatParts)\n\nexport { Chat }\n\nexport type * from './Chat'\nexport type * from './DayDivider'\nexport type * from './Header'\nexport type * from './Inputfield'\nexport type * from './InputfieldActions'\nexport type * from './MessageList'\n","import React from 'react'\n\n/**\n * Recursively extracts all text from a React node tree.\n * Detects the `content` prop used by the <Text> component.\n */\nexport function extractTextFromNode(node: React.ReactNode): string {\n if (node === null || node === undefined) return ''\n if (typeof node === 'string') return node\n if (typeof node === 'number' || typeof node === 'boolean') return String(node)\n if (Array.isArray(node)) return node.map(extractTextFromNode).join('')\n if (!React.isValidElement(node)) return ''\n\n const el = node as React.ReactElement<Record<string, unknown>>\n\n if (typeof el.props['content'] === 'string') return el.props['content']\n\n return extractTextFromNode(el.props['children'] as React.ReactNode)\n}\n","import { ChatReplyContext } from '@/components/Chat/ChatReplyContext'\nimport { extractTextFromNode } from '@/utils/extractText'\nimport type { Key } from 'react'\nimport React from 'react'\n\n/** Options for {@link useReply}. */\nexport interface UseReplyOptions {\n /** React node whose extracted text is used as the match trigger. Compared case-insensitively against incoming message text. */\n onMessage: React.ReactNode\n /** React node appended to the chat when a match is found. Should be a fully-formed `<Message>` tree. */\n replyMessage: React.ReactNode\n /** Only match messages whose `senderId` equals this value. When omitted, messages from all senders are matched. */\n from?: string\n /** Limits the rule to fire at most once per hook lifetime. @defaultValue `false` */\n once?: boolean\n}\n\n/**\n * Subscribes to new messages in the nearest `<Chat>` and calls\n * {@link ChatReplyContextValue.addMessage} whenever an incoming message\n * matches the text extracted from `onMessage`.\n *\n * Must be rendered as a descendant of `<Chat>` (e.g. via the `onReply` prop).\n * The {@link Reply} component is the declarative wrapper for this hook.\n */\nexport function useReply({ onMessage, replyMessage, from, once = false }: UseReplyOptions): void {\n const { messages, addMessage } = React.useContext(ChatReplyContext)\n const firedRef = React.useRef(false)\n\n const seenIdsRef = React.useRef<Set<Key | undefined>>(new Set(messages.map(m => m.id)))\n\n React.useEffect(() => {\n if (once && firedRef.current) return\n\n const newMessages = messages.filter(m => !seenIdsRef.current.has(m.id))\n for (const m of newMessages) seenIdsRef.current.add(m.id)\n\n if (newMessages.length === 0) return\n\n const triggerText = extractTextFromNode(onMessage).trim().toLowerCase()\n if (!triggerText) return\n\n for (const msg of newMessages) {\n if (once && firedRef.current) break\n\n if (from !== undefined && msg.senderId !== from) continue\n\n const msgText = extractTextFromNode(msg.node).trim().toLowerCase()\n if (msgText === triggerText) {\n if (once) firedRef.current = true\n addMessage({ node: replyMessage })\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [messages])\n}\n","import { useReply } from '@/hooks/useReply'\nimport type React from 'react'\n\n/** Props for the {@link Reply} component. */\nexport interface ReplyProps {\n /** React node whose extracted text is used as the match trigger. Compared case-insensitively against incoming message text. */\n onMessage: React.ReactNode\n /** React node appended to the chat when a match is found. Should be a fully-formed `<Message>` tree. */\n replyMessage: React.ReactNode\n /** Only match messages whose `senderId` equals this value. @defaultValue `'me'` */\n from?: string\n /** Limits the rule to fire at most once per component lifetime. @defaultValue `false` */\n once?: boolean\n}\n\nexport function Reply({ onMessage, replyMessage, from = 'me', once }: ReplyProps): null {\n useReply({\n onMessage,\n replyMessage,\n from,\n ...(once !== undefined ? { once } : {}),\n })\n return null\n}\n","import { ChatReplyContext } from '@/components/Chat/ChatReplyContext'\nimport type { GroupedMessage } from '@/utils/groupMessages'\nimport type { Key } from 'react'\nimport React from 'react'\n\n/**\n * Event-listener hook — calls `callback` for every new message that arrives\n * in the nearest <Chat>.\n *\n * Must be rendered inside a component that is a descendant of <Chat>\n * (i.e. inside the `onReply` prop or any other child rendered in context).\n *\n * @example\n * useMessages(msg => console.log(msg.senderId, msg.node))\n */\nexport function useMessages(callback: (message: GroupedMessage) => void): void {\n const { messages } = React.useContext(ChatReplyContext)\n const seenIdsRef = React.useRef<Set<Key | undefined>>(new Set(messages.map(m => m.id)))\n const callbackRef = React.useRef(callback)\n callbackRef.current = callback\n\n React.useEffect(() => {\n const newMessages = messages.filter(m => !seenIdsRef.current.has(m.id))\n for (const m of newMessages) seenIdsRef.current.add(m.id)\n for (const m of newMessages) callbackRef.current(m)\n }, [messages])\n}\n"],"names":["r","Chat","ChatRoot"],"mappings":"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","x_google_ignoreList":[13,14]}