@brightspot/ui 1.10.0 → 3.0.0

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 (264) hide show
  1. package/dist/components/action-bar/ActionBar.d.ts +163 -0
  2. package/dist/components/action-bar/ActionBar.d.ts.map +1 -0
  3. package/dist/components/action-bar/ActionBar.js +479 -0
  4. package/dist/components/action-bar/ActionBar.js.map +1 -0
  5. package/dist/components/action-bar/ActionItem.d.ts +103 -0
  6. package/dist/components/action-bar/ActionItem.d.ts.map +1 -0
  7. package/dist/components/action-bar/ActionItem.js +237 -0
  8. package/dist/components/action-bar/ActionItem.js.map +1 -0
  9. package/dist/components/avatar/AvatarGroup.d.ts +3 -0
  10. package/dist/components/avatar/AvatarGroup.d.ts.map +1 -1
  11. package/dist/components/avatar/AvatarGroup.js +3 -0
  12. package/dist/components/avatar/AvatarGroup.js.map +1 -1
  13. package/dist/components/badge/Badge.d.ts +3 -1
  14. package/dist/components/badge/Badge.d.ts.map +1 -1
  15. package/dist/components/badge/Badge.js +2 -0
  16. package/dist/components/badge/Badge.js.map +1 -1
  17. package/dist/components/button-group/ButtonGroup.d.ts +138 -0
  18. package/dist/components/button-group/ButtonGroup.d.ts.map +1 -0
  19. package/dist/components/button-group/ButtonGroup.js +436 -0
  20. package/dist/components/button-group/ButtonGroup.js.map +1 -0
  21. package/dist/components/checkbox/Checkbox.d.ts +107 -0
  22. package/dist/components/checkbox/Checkbox.d.ts.map +1 -0
  23. package/dist/components/checkbox/Checkbox.js +224 -0
  24. package/dist/components/checkbox/Checkbox.js.map +1 -0
  25. package/dist/components/circular-progress/CircularProgress.d.ts +2 -2
  26. package/dist/components/circular-progress/CircularProgress.js +2 -2
  27. package/dist/components/copy-to-clipboard/CopyToClipboard.d.ts +7 -2
  28. package/dist/components/copy-to-clipboard/CopyToClipboard.d.ts.map +1 -1
  29. package/dist/components/copy-to-clipboard/CopyToClipboard.js +10 -5
  30. package/dist/components/copy-to-clipboard/CopyToClipboard.js.map +1 -1
  31. package/dist/components/dropdown/Dropdown.d.ts +8 -6
  32. package/dist/components/dropdown/Dropdown.d.ts.map +1 -1
  33. package/dist/components/dropdown/Dropdown.js +33 -22
  34. package/dist/components/dropdown/Dropdown.js.map +1 -1
  35. package/dist/components/dropdown/DropdownItem.d.ts +28 -7
  36. package/dist/components/dropdown/DropdownItem.d.ts.map +1 -1
  37. package/dist/components/dropdown/DropdownItem.js +41 -16
  38. package/dist/components/dropdown/DropdownItem.js.map +1 -1
  39. package/dist/components/dropdown/DropdownMenu.d.ts +6 -8
  40. package/dist/components/dropdown/DropdownMenu.d.ts.map +1 -1
  41. package/dist/components/dropdown/DropdownMenu.js +22 -37
  42. package/dist/components/dropdown/DropdownMenu.js.map +1 -1
  43. package/dist/components/empty-state/EmptyState.css +4 -0
  44. package/dist/components/empty-state/EmptyState.d.ts +103 -0
  45. package/dist/components/empty-state/EmptyState.d.ts.map +1 -0
  46. package/dist/components/empty-state/EmptyState.js +209 -0
  47. package/dist/components/empty-state/EmptyState.js.map +1 -0
  48. package/dist/components/icon/Icon.d.ts +23 -10
  49. package/dist/components/icon/Icon.d.ts.map +1 -1
  50. package/dist/components/icon/Icon.js +40 -9
  51. package/dist/components/icon/Icon.js.map +1 -1
  52. package/dist/components/icon-button/IconButton.d.ts +7 -21
  53. package/dist/components/icon-button/IconButton.d.ts.map +1 -1
  54. package/dist/components/icon-button/IconButton.js +12 -18
  55. package/dist/components/icon-button/IconButton.js.map +1 -1
  56. package/dist/components/linear-progress/LinearProgress.d.ts +2 -2
  57. package/dist/components/linear-progress/LinearProgress.js +2 -2
  58. package/dist/components/pagination/Pagination.d.ts +33 -4
  59. package/dist/components/pagination/Pagination.d.ts.map +1 -1
  60. package/dist/components/pagination/Pagination.js +88 -24
  61. package/dist/components/pagination/Pagination.js.map +1 -1
  62. package/dist/components/popover/Popover.d.ts +6 -0
  63. package/dist/components/popover/Popover.d.ts.map +1 -1
  64. package/dist/components/popover/Popover.js +6 -0
  65. package/dist/components/popover/Popover.js.map +1 -1
  66. package/dist/components/switch/Switch.d.ts +5 -1
  67. package/dist/components/switch/Switch.d.ts.map +1 -1
  68. package/dist/components/switch/Switch.js +10 -6
  69. package/dist/components/switch/Switch.js.map +1 -1
  70. package/dist/components/tabs/Tab.d.ts +108 -0
  71. package/dist/components/tabs/Tab.d.ts.map +1 -0
  72. package/dist/components/tabs/Tab.js +152 -0
  73. package/dist/components/tabs/Tab.js.map +1 -0
  74. package/dist/components/tabs/Tabs.d.ts +126 -0
  75. package/dist/components/tabs/Tabs.d.ts.map +1 -0
  76. package/dist/components/tabs/Tabs.js +390 -0
  77. package/dist/components/tabs/Tabs.js.map +1 -0
  78. package/dist/components/upload/Upload.d.ts +157 -0
  79. package/dist/components/upload/Upload.d.ts.map +1 -0
  80. package/dist/components/upload/Upload.js +538 -0
  81. package/dist/components/upload/Upload.js.map +1 -0
  82. package/dist/components/upload/UploadItem.d.ts +73 -0
  83. package/dist/components/upload/UploadItem.d.ts.map +1 -0
  84. package/dist/components/upload/UploadItem.js +180 -0
  85. package/dist/components/upload/UploadItem.js.map +1 -0
  86. package/dist/components/widget/Widget.d.ts +1 -6
  87. package/dist/components/widget/Widget.d.ts.map +1 -1
  88. package/dist/components/widget/Widget.js +1 -6
  89. package/dist/components/widget/Widget.js.map +1 -1
  90. package/dist/custom-elements.json +8445 -1989
  91. package/dist/storybook/assets/ActionBar.stories-DRIVI-W2.js +408 -0
  92. package/dist/storybook/assets/ActionItem.stories-5qlgxYNB.js +203 -0
  93. package/dist/storybook/assets/{Avatar.stories-B26mRkkZ.js → Avatar.stories-B3VkhRhP.js} +2 -2
  94. package/dist/storybook/assets/{AvatarGroup.stories-J7lVGsMY.js → AvatarGroup.stories-DOfim2NY.js} +5 -5
  95. package/dist/storybook/assets/{Badge.stories-BpTIV61M.js → Badge.stories-B04VNAcc.js} +2 -2
  96. package/dist/storybook/assets/{Button-Dg-fIrzT.js → Button-CILTcGRT.js} +1 -1
  97. package/dist/storybook/assets/{Button.stories-gPKRVbxk.js → Button.stories-CzWAltrX.js} +1 -1
  98. package/dist/storybook/assets/ButtonGroup.stories-1uAJf79o.js +588 -0
  99. package/dist/storybook/assets/{Celebrate.stories-DbY-sKEe.js → Celebrate.stories-BEqj0VnW.js} +7 -7
  100. package/dist/storybook/assets/Checkbox.stories-DXAGFS0M.js +141 -0
  101. package/dist/storybook/assets/{CircularProgress.stories-DeH5JYX_.js → CircularProgress.stories-D4rftw22.js} +7 -7
  102. package/dist/storybook/assets/{ClipboardMixin.stories-C-lZ4uuw.js → ClipboardMixin.stories-z2n2HWt1.js} +31 -28
  103. package/dist/storybook/assets/{Color-6BZIO3FS-Cu6zVIuG.js → Color-6BZIO3FS-C6KyMgZz.js} +1 -1
  104. package/dist/storybook/assets/{Colors.stories-D6XYMrTD.js → Colors.stories-CX-Ny3B_.js} +1 -1
  105. package/dist/storybook/assets/{CombinedEffects.stories-jFekKTYg.js → CombinedEffects.stories-BkqtiVHp.js} +33 -33
  106. package/dist/storybook/assets/{ComponentStatesMixin-g50hRCPT.js → ComponentStatesMixin-DLd0feFg.js} +1 -1
  107. package/dist/storybook/assets/{ComponentStatesMixin.stories-D3Q5pR38.js → ComponentStatesMixin.stories-D6Yc5Jgl.js} +3 -3
  108. package/dist/storybook/assets/{CopyToClipboard.stories-COZZ1VC2.js → CopyToClipboard.stories-B-omwDDJ.js} +16 -16
  109. package/dist/storybook/assets/{Debounce.stories-Dl10LAnx.js → Debounce.stories-B2vE5QIx.js} +9 -9
  110. package/dist/storybook/assets/{DocsRenderer-LL677BLK-CFLtMbUx.js → DocsRenderer-LL677BLK-DNUlRvMg.js} +3 -3
  111. package/dist/storybook/assets/{Dropdown.stories-Drwq-0Z2.js → Dropdown.stories-_bx4WDLr.js} +95 -68
  112. package/dist/storybook/assets/EmptyState.stories-CGMbmo77.js +318 -0
  113. package/dist/storybook/assets/{Events.stories-dODeR-g-.js → Events.stories-CkQYKcoZ.js} +1 -1
  114. package/dist/storybook/assets/{Heading.stories-CH7_-_q3.js → Heading.stories-BU5Do_od.js} +1 -1
  115. package/dist/storybook/assets/{HueRipple.stories-CH1Y739k.js → HueRipple.stories-Di2zmxo3.js} +11 -11
  116. package/dist/storybook/assets/Icon.stories-Dk4ZXhhJ.js +441 -0
  117. package/dist/storybook/assets/{IconButton.stories-DuzqvcnN.js → IconButton.stories-BSCiXPXa.js} +126 -146
  118. package/dist/storybook/assets/{LinearProgress.stories-C7IdnJd3.js → LinearProgress.stories-BGxPZuni.js} +7 -7
  119. package/dist/storybook/assets/Pagination.stories-z3Zq8b4f.js +252 -0
  120. package/dist/storybook/assets/{Popover.stories-Ca1F-wrI.js → Popover.stories-C9GxWcax.js} +33 -62
  121. package/dist/storybook/assets/ReadyMixin-CQw8N6P9.js +1 -0
  122. package/dist/storybook/assets/RovingTabindexMixin.stories-ByxLBi6m.js +192 -0
  123. package/dist/storybook/assets/{Rtc.stories-BVJc1vCA.js → Rtc.stories-DQJlCXWR.js} +3 -3
  124. package/dist/storybook/assets/ScrollShadow.stories-gjTIAbUA.js +17 -0
  125. package/dist/storybook/assets/{Switch.stories-BEEHP8mD.js → Switch.stories-BEeqPZiP.js} +21 -21
  126. package/dist/storybook/assets/Tab.stories-DpB3I-WZ.js +218 -0
  127. package/dist/storybook/assets/Tabs.stories-C6mG6Xi7.js +211 -0
  128. package/dist/storybook/assets/{Throttle.stories-C4xsYeAb.js → Throttle.stories-x9tpGeQh.js} +10 -10
  129. package/dist/storybook/assets/{Tooltip.stories-Ccm4AnSv.js → Tooltip.stories-CqcLqdmc.js} +2 -2
  130. package/dist/storybook/assets/Upload.stories-CMaAbCSH.js +447 -0
  131. package/dist/storybook/assets/UploadItem.stories-GB98L3JQ.js +167 -0
  132. package/dist/storybook/assets/{Welcome.stories-Degjk-M0.js → Welcome.stories-6h9cUZ7v.js} +1 -1
  133. package/dist/storybook/assets/{Widget.stories-OKnZ9sDs.js → Widget.stories-DiA1PR6Y.js} +13 -13
  134. package/dist/storybook/assets/{WithTooltip-65CFNBJE-CXL3TyJ2.js → WithTooltip-65CFNBJE-DTsHhBb_.js} +2 -2
  135. package/dist/storybook/assets/{blocks-DLdUKG_W.js → blocks-IXdn9TGW.js} +5 -5
  136. package/dist/storybook/assets/{formatter-EIJCOSYU-29NCxjfM.js → formatter-EIJCOSYU-Cum4J6N4.js} +1 -1
  137. package/dist/storybook/assets/if-defined-CgfCxQoV.js +1 -0
  138. package/dist/storybook/assets/iframe-BgFj0b5u.css +1 -0
  139. package/dist/storybook/assets/{iframe-BqvwP3or.js → iframe-Sf9RHZFu.js} +200 -200
  140. package/dist/storybook/assets/{index-BIyTv1BF.js → index-D605PvQH.js} +1 -1
  141. package/dist/storybook/assets/onFind-C41m8c_a.js +1 -0
  142. package/dist/storybook/assets/{onFind.stories-D64-QZqf.js → onFind.stories-MOTfGlJd.js} +53 -77
  143. package/dist/storybook/assets/{onRemove.stories-BICsnIJL.js → onRemove.stories-DX58Bf6f.js} +6 -10
  144. package/dist/storybook/assets/{onVisible.stories-DpDZP9_5.js → onVisible.stories-NNFeFeD8.js} +3 -3
  145. package/dist/storybook/assets/style-map-B99QiqCo.js +1 -0
  146. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-Bz_DuQj8.js → syntaxhighlighter-ED5Y7EFY-BqQ-o9mS.js} +1 -1
  147. package/dist/storybook/box-illustration.svg +51 -0
  148. package/dist/storybook/cloud-illustration.svg +49 -0
  149. package/dist/storybook/docs-illustration.svg +92 -0
  150. package/dist/storybook/iframe.html +2 -2
  151. package/dist/storybook/index.json +1 -1
  152. package/dist/storybook/project.json +1 -1
  153. package/dist/tailwind-plugin-action-bar.d.ts +2 -0
  154. package/dist/tailwind-plugin-action-bar.d.ts.map +1 -0
  155. package/dist/tailwind-plugin-action-bar.js +120 -0
  156. package/dist/tailwind-plugin-action-bar.js.map +1 -0
  157. package/dist/tailwind-plugin-action-bar.ts +134 -0
  158. package/dist/tailwind-plugin-badge.js +5 -6
  159. package/dist/tailwind-plugin-badge.js.map +1 -1
  160. package/dist/tailwind-plugin-badge.ts +5 -6
  161. package/dist/tailwind-plugin-button-group.d.ts +2 -0
  162. package/dist/tailwind-plugin-button-group.d.ts.map +1 -0
  163. package/dist/tailwind-plugin-button-group.js +215 -0
  164. package/dist/tailwind-plugin-button-group.js.map +1 -0
  165. package/dist/tailwind-plugin-button-group.ts +238 -0
  166. package/dist/tailwind-plugin-button.js +2 -1
  167. package/dist/tailwind-plugin-button.js.map +1 -1
  168. package/dist/tailwind-plugin-button.ts +2 -1
  169. package/dist/tailwind-plugin-checkbox.d.ts +2 -0
  170. package/dist/tailwind-plugin-checkbox.d.ts.map +1 -0
  171. package/dist/tailwind-plugin-checkbox.js +246 -0
  172. package/dist/tailwind-plugin-checkbox.js.map +1 -0
  173. package/dist/tailwind-plugin-checkbox.ts +281 -0
  174. package/dist/tailwind-plugin-empty-state.d.ts +2 -0
  175. package/dist/tailwind-plugin-empty-state.d.ts.map +1 -0
  176. package/dist/tailwind-plugin-empty-state.js +113 -0
  177. package/dist/tailwind-plugin-empty-state.js.map +1 -0
  178. package/dist/tailwind-plugin-empty-state.ts +124 -0
  179. package/dist/tailwind-plugin-icon.js +122 -18
  180. package/dist/tailwind-plugin-icon.js.map +1 -1
  181. package/dist/tailwind-plugin-icon.ts +131 -18
  182. package/dist/tailwind-plugin-loader.js +3 -3
  183. package/dist/tailwind-plugin-loader.ts +3 -3
  184. package/dist/tailwind-plugin-pagination.js +13 -23
  185. package/dist/tailwind-plugin-pagination.js.map +1 -1
  186. package/dist/tailwind-plugin-pagination.ts +15 -25
  187. package/dist/tailwind-plugin-tabs.d.ts +2 -0
  188. package/dist/tailwind-plugin-tabs.d.ts.map +1 -0
  189. package/dist/tailwind-plugin-tabs.js +158 -0
  190. package/dist/tailwind-plugin-tabs.js.map +1 -0
  191. package/dist/tailwind-plugin-tabs.ts +169 -0
  192. package/dist/tailwind-plugin-upload.d.ts +2 -0
  193. package/dist/tailwind-plugin-upload.d.ts.map +1 -0
  194. package/dist/tailwind-plugin-upload.js +322 -0
  195. package/dist/tailwind-plugin-upload.js.map +1 -0
  196. package/dist/tailwind-plugin-upload.ts +362 -0
  197. package/dist/tailwind.config.d.ts.map +1 -1
  198. package/dist/tailwind.config.js +1 -0
  199. package/dist/tailwind.config.js.map +1 -1
  200. package/dist/tailwind.config.ts +1 -0
  201. package/dist/util/ClipboardMixin.d.ts +7 -2
  202. package/dist/util/ClipboardMixin.d.ts.map +1 -1
  203. package/dist/util/ClipboardMixin.js +15 -13
  204. package/dist/util/ClipboardMixin.js.map +1 -1
  205. package/dist/util/ComponentStatesMixin.d.ts +2 -1
  206. package/dist/util/ComponentStatesMixin.d.ts.map +1 -1
  207. package/dist/util/ComponentStatesMixin.js +4 -0
  208. package/dist/util/ComponentStatesMixin.js.map +1 -1
  209. package/dist/util/EventEmitterMixin.d.ts +58 -4
  210. package/dist/util/EventEmitterMixin.d.ts.map +1 -1
  211. package/dist/util/EventEmitterMixin.js +5 -2
  212. package/dist/util/EventEmitterMixin.js.map +1 -1
  213. package/dist/util/ProgressMixin.d.ts +9 -2
  214. package/dist/util/ProgressMixin.d.ts.map +1 -1
  215. package/dist/util/ProgressMixin.js +22 -18
  216. package/dist/util/ProgressMixin.js.map +1 -1
  217. package/dist/util/RovingTabindexMixin.d.ts +46 -0
  218. package/dist/util/RovingTabindexMixin.d.ts.map +1 -0
  219. package/dist/util/RovingTabindexMixin.js +83 -0
  220. package/dist/util/RovingTabindexMixin.js.map +1 -0
  221. package/dist/util/TetherLayout.d.ts.map +1 -1
  222. package/dist/util/TetherLayout.js +3 -0
  223. package/dist/util/TetherLayout.js.map +1 -1
  224. package/dist/util/TooltipMixin.d.ts.map +1 -1
  225. package/dist/util/TooltipMixin.js +5 -4
  226. package/dist/util/TooltipMixin.js.map +1 -1
  227. package/dist/util/upload.d.ts +53 -0
  228. package/dist/util/upload.d.ts.map +1 -0
  229. package/dist/util/upload.js +113 -0
  230. package/dist/util/upload.js.map +1 -0
  231. package/docs/components/ActionBar.md +77 -0
  232. package/docs/components/ActionItem.md +101 -0
  233. package/docs/components/Avatar.md +42 -12
  234. package/docs/components/AvatarGroup.md +4 -3
  235. package/docs/components/Badge.md +13 -1
  236. package/docs/components/ButtonGroup.md +91 -0
  237. package/docs/components/Checkbox.md +91 -0
  238. package/docs/components/CircularProgress.md +41 -12
  239. package/docs/components/CopyToClipboard.md +13 -11
  240. package/docs/components/Dropdown.md +51 -26
  241. package/docs/components/DropdownItem.md +44 -27
  242. package/docs/components/DropdownMenu.md +14 -14
  243. package/docs/components/EmptyState.md +75 -0
  244. package/docs/components/Icon.md +22 -14
  245. package/docs/components/IconButton.md +46 -21
  246. package/docs/components/LinearProgress.md +43 -4
  247. package/docs/components/Pagination.md +38 -34
  248. package/docs/components/Popover.md +16 -0
  249. package/docs/components/README.md +9 -0
  250. package/docs/components/Switch.md +21 -16
  251. package/docs/components/Tab.md +79 -0
  252. package/docs/components/Tabs.md +85 -0
  253. package/docs/components/Upload.md +112 -0
  254. package/docs/components/UploadItem.md +61 -0
  255. package/docs/components/Widget.md +12 -6
  256. package/package.json +4 -2
  257. package/dist/storybook/assets/Icon.stories-CPjM-jTU.js +0 -264
  258. package/dist/storybook/assets/Pagination.stories-C4cLjS_9.js +0 -272
  259. package/dist/storybook/assets/ReadyMixin-DNZ5dCsZ.js +0 -1
  260. package/dist/storybook/assets/ScrollShadow.stories-C3W5o9ZW.js +0 -17
  261. package/dist/storybook/assets/if-defined-BZFPaJjl.js +0 -1
  262. package/dist/storybook/assets/iframe-C5bIZMJ5.css +0 -1
  263. package/dist/storybook/assets/onFind-1l3EPW-I.js +0 -1
  264. package/dist/storybook/assets/style-map-CBrSnxRe.js +0 -1
@@ -0,0 +1,158 @@
1
+ import plugin from 'tailwindcss/plugin';
2
+ /**
3
+ * NOTE on btu-tab-button carve-out:
4
+ * `btu-tab-button` is a standalone button primitive, NOT composed from `btu-button-*`.
5
+ * This is intentional — tabs require a bottom-edge active-state indicator (::after)
6
+ * and a tab-specific height/padding model that the generic action-button anatomy
7
+ * cannot express. See `.ai/LESSONS-BUTTON-REUSE.md` §4. Do not "fix" this by
8
+ * migrating to btu-button; either extend btu-button with a new variant or leave as-is.
9
+ *
10
+ * Tabs component styles.
11
+ *
12
+ * Class Names:
13
+ *
14
+ * btu-tabs - Root container
15
+ * btu-tabs-xs - Extra small container padding
16
+ * btu-tabs-sm - Small container padding
17
+ * btu-tabs-md - Medium container padding (default)
18
+ * btu-tabs-lg - Large container padding
19
+ * btu-tab - Individual tab wrapper
20
+ * btu-tab-button - Inner tab button
21
+ * btu-tab-button-xs - Extra small button height/text
22
+ * btu-tab-button-sm - Small button height/text
23
+ * btu-tab-button-md - Medium button height/text (default)
24
+ * btu-tab-button-lg - Large button height/text
25
+ * btu-tab-indicator - Active tab underline indicator
26
+ * btu-tabs-menu-mode - Menu variant overflow override
27
+ * btu-tab-menu-wrapper - Menu variant wrapper for label and dropdown
28
+ * btu-tab-menu-label - Menu variant active tab label
29
+ *
30
+ * CSS Custom Properties:
31
+ *
32
+ * --tabs-active-color - Text and icon color of the active tab (default: gray-700)
33
+ * --tabs-active-indicator-color - Color of the active tab underline indicator (default: primary gradient)
34
+ * --tabs-border-color - Bottom border divider color (default: gray-200)
35
+ * --tabs-color - Text and icon color for all tabs (default: gray-500)
36
+ * --tabs-background - Background color for all tab buttons (default: transparent)
37
+ * --tabs-container-background - Background color of the tabs container (default: theme white)
38
+ * --tabs-hover-background - Background color of a tab on hover (default: gray-100)
39
+ * --tabs-hover-color - Text and icon color of a tab on hover (default: gray-700)
40
+ * --tabs-gap - Spacing between tabs (default: 1rem)
41
+ */
42
+ module.exports = plugin(function ({ addComponents, addBase, config, theme }) {
43
+ const fontSize_xs = config('theme.fontSize.xs')?.[0] ?? '0.75rem';
44
+ const fontSize_sm = config('theme.fontSize.sm')?.[0] ?? '0.875rem';
45
+ const fontSize_base = config('theme.fontSize.base')?.[0] ?? '1rem';
46
+ addBase({
47
+ '@keyframes btu-tab-draw': {
48
+ from: { transform: 'scaleX(0)' },
49
+ to: { transform: 'scaleX(1)' },
50
+ },
51
+ });
52
+ addComponents({
53
+ '.btu-tabs': {
54
+ display: 'flex',
55
+ alignItems: 'center',
56
+ gap: 'var(--tabs-gap, 1rem)',
57
+ position: 'relative',
58
+ borderBottom: '1px solid var(--tabs-border-color, oklch(var(--btu-theme-gray-200)))',
59
+ backgroundColor: 'var(--tabs-container-background, var(--btu-theme-white))',
60
+ overflowX: 'auto',
61
+ overflowY: 'clip',
62
+ },
63
+ // In menu mode, disable scrolling so the dropdown can extend beyond the container
64
+ '.btu-tabs-menu-mode': {
65
+ overflowX: 'visible',
66
+ overflowY: 'visible',
67
+ },
68
+ '.btu-tabs-xs': { paddingInline: '1rem' },
69
+ '.btu-tabs-sm': { paddingInline: '1rem' },
70
+ '.btu-tabs-md': { paddingInline: '1.5rem' },
71
+ '.btu-tabs-lg': { paddingInline: '1.5rem' },
72
+ '.btu-tab': {
73
+ display: 'inline-flex',
74
+ flexDirection: 'column',
75
+ alignItems: 'center',
76
+ flexShrink: '0',
77
+ },
78
+ '.btu-tab-button': {
79
+ position: 'relative',
80
+ display: 'inline-flex',
81
+ alignItems: 'center',
82
+ justifyContent: 'center',
83
+ gap: '0.5rem',
84
+ paddingInline: '0.5rem',
85
+ cursor: 'pointer',
86
+ whiteSpace: 'nowrap',
87
+ boxSizing: 'border-box',
88
+ backgroundColor: 'var(--tabs-background, transparent)',
89
+ color: 'var(--tabs-color, oklch(var(--btu-theme-gray-500)))',
90
+ transitionProperty: 'color, background-color',
91
+ transitionDuration: '150ms',
92
+ transitionTimingFunction: 'ease',
93
+ '&:hover:not([aria-disabled="true"])': {
94
+ backgroundColor: 'var(--tabs-hover-background, oklch(var(--btu-theme-gray-100)))',
95
+ color: 'var(--tabs-hover-color, oklch(var(--btu-theme-gray-700)))',
96
+ },
97
+ '&[aria-selected="true"]:not([aria-disabled="true"])': {
98
+ color: 'var(--tabs-active-color, oklch(var(--btu-theme-gray-700)))',
99
+ },
100
+ '&[aria-disabled="true"]': {
101
+ color: 'oklch(var(--btu-theme-gray-300))',
102
+ cursor: 'not-allowed',
103
+ },
104
+ '&:focus-visible': {
105
+ outline: 'none',
106
+ boxShadow: 'inset 0 0 0 3px oklch(var(--btu-theme-primary-100)), inset 0 0 0 4px oklch(var(--btu-theme-primary-600))',
107
+ },
108
+ '@media (prefers-reduced-motion: reduce)': {
109
+ transitionDuration: '0.01ms',
110
+ },
111
+ },
112
+ '.btu-tab-button-xs': {
113
+ height: '2.25rem',
114
+ fontSize: fontSize_xs,
115
+ fontWeight: '400',
116
+ },
117
+ '.btu-tab-button-sm': {
118
+ height: '2.75rem',
119
+ fontSize: fontSize_sm,
120
+ fontWeight: '500',
121
+ },
122
+ '.btu-tab-button-md': {
123
+ height: '3.25rem',
124
+ fontSize: fontSize_sm,
125
+ fontWeight: '500',
126
+ },
127
+ '.btu-tab-button-lg': {
128
+ height: '3.5rem',
129
+ fontSize: fontSize_base,
130
+ fontWeight: '500',
131
+ },
132
+ '.btu-tab-indicator': {
133
+ position: 'absolute',
134
+ bottom: '0',
135
+ left: '0',
136
+ right: '0',
137
+ height: '0.125rem',
138
+ background: `var(--tabs-active-indicator-color, ${theme('backgroundImage.primary-gradient')})`,
139
+ transformOrigin: 'left',
140
+ animation: 'btu-tab-draw 200ms ease-out',
141
+ '@media (prefers-reduced-motion: reduce)': {
142
+ animationDuration: '0.01ms',
143
+ },
144
+ },
145
+ '.btu-tab-menu-wrapper': {
146
+ display: 'inline-flex',
147
+ alignItems: 'center',
148
+ gap: '0.5rem',
149
+ },
150
+ '.btu-tab-menu-label': {
151
+ fontSize: fontSize_sm,
152
+ fontWeight: '500',
153
+ color: 'var(--tabs-active-color, oklch(var(--btu-theme-gray-700)))',
154
+ whiteSpace: 'nowrap',
155
+ },
156
+ });
157
+ });
158
+ //# sourceMappingURL=tailwind-plugin-tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-plugin-tabs.js","sourceRoot":"","sources":["../src/tailwind-plugin-tabs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ import plugin from 'tailwindcss/plugin'
2
+ declare let module: any
3
+
4
+ /**
5
+ * NOTE on btu-tab-button carve-out:
6
+ * `btu-tab-button` is a standalone button primitive, NOT composed from `btu-button-*`.
7
+ * This is intentional — tabs require a bottom-edge active-state indicator (::after)
8
+ * and a tab-specific height/padding model that the generic action-button anatomy
9
+ * cannot express. See `.ai/LESSONS-BUTTON-REUSE.md` §4. Do not "fix" this by
10
+ * migrating to btu-button; either extend btu-button with a new variant or leave as-is.
11
+ *
12
+ * Tabs component styles.
13
+ *
14
+ * Class Names:
15
+ *
16
+ * btu-tabs - Root container
17
+ * btu-tabs-xs - Extra small container padding
18
+ * btu-tabs-sm - Small container padding
19
+ * btu-tabs-md - Medium container padding (default)
20
+ * btu-tabs-lg - Large container padding
21
+ * btu-tab - Individual tab wrapper
22
+ * btu-tab-button - Inner tab button
23
+ * btu-tab-button-xs - Extra small button height/text
24
+ * btu-tab-button-sm - Small button height/text
25
+ * btu-tab-button-md - Medium button height/text (default)
26
+ * btu-tab-button-lg - Large button height/text
27
+ * btu-tab-indicator - Active tab underline indicator
28
+ * btu-tabs-menu-mode - Menu variant overflow override
29
+ * btu-tab-menu-wrapper - Menu variant wrapper for label and dropdown
30
+ * btu-tab-menu-label - Menu variant active tab label
31
+ *
32
+ * CSS Custom Properties:
33
+ *
34
+ * --tabs-active-color - Text and icon color of the active tab (default: gray-700)
35
+ * --tabs-active-indicator-color - Color of the active tab underline indicator (default: primary gradient)
36
+ * --tabs-border-color - Bottom border divider color (default: gray-200)
37
+ * --tabs-color - Text and icon color for all tabs (default: gray-500)
38
+ * --tabs-background - Background color for all tab buttons (default: transparent)
39
+ * --tabs-container-background - Background color of the tabs container (default: theme white)
40
+ * --tabs-hover-background - Background color of a tab on hover (default: gray-100)
41
+ * --tabs-hover-color - Text and icon color of a tab on hover (default: gray-700)
42
+ * --tabs-gap - Spacing between tabs (default: 1rem)
43
+ */
44
+
45
+ module.exports = plugin(function ({ addComponents, addBase, config, theme }) {
46
+ const fontSize_xs = config('theme.fontSize.xs')?.[0] ?? '0.75rem'
47
+ const fontSize_sm = config('theme.fontSize.sm')?.[0] ?? '0.875rem'
48
+ const fontSize_base = config('theme.fontSize.base')?.[0] ?? '1rem'
49
+
50
+ addBase({
51
+ '@keyframes btu-tab-draw': {
52
+ from: { transform: 'scaleX(0)' },
53
+ to: { transform: 'scaleX(1)' },
54
+ },
55
+ })
56
+
57
+ addComponents({
58
+ '.btu-tabs': {
59
+ display: 'flex',
60
+ alignItems: 'center',
61
+ gap: 'var(--tabs-gap, 1rem)',
62
+ position: 'relative',
63
+ borderBottom: '1px solid var(--tabs-border-color, oklch(var(--btu-theme-gray-200)))',
64
+ backgroundColor: 'var(--tabs-container-background, var(--btu-theme-white))',
65
+ overflowX: 'auto',
66
+ overflowY: 'clip',
67
+ },
68
+ // In menu mode, disable scrolling so the dropdown can extend beyond the container
69
+ '.btu-tabs-menu-mode': {
70
+ overflowX: 'visible',
71
+ overflowY: 'visible',
72
+ },
73
+ '.btu-tabs-xs': { paddingInline: '1rem' },
74
+ '.btu-tabs-sm': { paddingInline: '1rem' },
75
+ '.btu-tabs-md': { paddingInline: '1.5rem' },
76
+ '.btu-tabs-lg': { paddingInline: '1.5rem' },
77
+
78
+ '.btu-tab': {
79
+ display: 'inline-flex',
80
+ flexDirection: 'column',
81
+ alignItems: 'center',
82
+ flexShrink: '0',
83
+ },
84
+
85
+ '.btu-tab-button': {
86
+ position: 'relative',
87
+ display: 'inline-flex',
88
+ alignItems: 'center',
89
+ justifyContent: 'center',
90
+ gap: '0.5rem',
91
+ paddingInline: '0.5rem',
92
+ cursor: 'pointer',
93
+ whiteSpace: 'nowrap',
94
+ boxSizing: 'border-box',
95
+ backgroundColor: 'var(--tabs-background, transparent)',
96
+ color: 'var(--tabs-color, oklch(var(--btu-theme-gray-500)))',
97
+ transitionProperty: 'color, background-color',
98
+ transitionDuration: '150ms',
99
+ transitionTimingFunction: 'ease',
100
+ '&:hover:not([aria-disabled="true"])': {
101
+ backgroundColor: 'var(--tabs-hover-background, oklch(var(--btu-theme-gray-100)))',
102
+ color: 'var(--tabs-hover-color, oklch(var(--btu-theme-gray-700)))',
103
+ },
104
+ '&[aria-selected="true"]:not([aria-disabled="true"])': {
105
+ color: 'var(--tabs-active-color, oklch(var(--btu-theme-gray-700)))',
106
+ },
107
+ '&[aria-disabled="true"]': {
108
+ color: 'oklch(var(--btu-theme-gray-300))',
109
+ cursor: 'not-allowed',
110
+ },
111
+ '&:focus-visible': {
112
+ outline: 'none',
113
+ boxShadow:
114
+ 'inset 0 0 0 3px oklch(var(--btu-theme-primary-100)), inset 0 0 0 4px oklch(var(--btu-theme-primary-600))',
115
+ },
116
+ '@media (prefers-reduced-motion: reduce)': {
117
+ transitionDuration: '0.01ms',
118
+ },
119
+ },
120
+
121
+ '.btu-tab-button-xs': {
122
+ height: '2.25rem',
123
+ fontSize: fontSize_xs,
124
+ fontWeight: '400',
125
+ },
126
+ '.btu-tab-button-sm': {
127
+ height: '2.75rem',
128
+ fontSize: fontSize_sm,
129
+ fontWeight: '500',
130
+ },
131
+ '.btu-tab-button-md': {
132
+ height: '3.25rem',
133
+ fontSize: fontSize_sm,
134
+ fontWeight: '500',
135
+ },
136
+ '.btu-tab-button-lg': {
137
+ height: '3.5rem',
138
+ fontSize: fontSize_base,
139
+ fontWeight: '500',
140
+ },
141
+
142
+ '.btu-tab-indicator': {
143
+ position: 'absolute',
144
+ bottom: '0',
145
+ left: '0',
146
+ right: '0',
147
+ height: '0.125rem',
148
+ background: `var(--tabs-active-indicator-color, ${theme('backgroundImage.primary-gradient')})`,
149
+ transformOrigin: 'left',
150
+ animation: 'btu-tab-draw 200ms ease-out',
151
+ '@media (prefers-reduced-motion: reduce)': {
152
+ animationDuration: '0.01ms',
153
+ },
154
+ },
155
+
156
+ '.btu-tab-menu-wrapper': {
157
+ display: 'inline-flex',
158
+ alignItems: 'center',
159
+ gap: '0.5rem',
160
+ },
161
+
162
+ '.btu-tab-menu-label': {
163
+ fontSize: fontSize_sm,
164
+ fontWeight: '500',
165
+ color: 'var(--tabs-active-color, oklch(var(--btu-theme-gray-700)))',
166
+ whiteSpace: 'nowrap',
167
+ },
168
+ })
169
+ })
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tailwind-plugin-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-plugin-upload.d.ts","sourceRoot":"","sources":["../src/tailwind-plugin-upload.ts"],"names":[],"mappings":""}
@@ -0,0 +1,322 @@
1
+ import plugin from 'tailwindcss/plugin';
2
+ /**
3
+ * Upload component styling.
4
+ *
5
+ * Class Names:
6
+ *
7
+ * btu-upload - Base upload container
8
+ * btu-upload-dropzone - Drop zone area
9
+ * btu-upload-dropzone-icon - Drop zone icon circle
10
+ * btu-upload-dropzone-prompt - Prompt layer wrap hosting text + drag overlay
11
+ * btu-upload-dropzone-text - Drop zone text (resting prompt)
12
+ * btu-upload-dropzone-drag-message - Drag-over message overlay (absolute, fades in on dragover)
13
+ * btu-upload-dropzone-action - Drop zone "select" link
14
+ * btu-upload-dropzone-count - Corner count pill (visible only when max-files is finite and > 1)
15
+ * btu-upload-dropzone-dragover - Drag-over state (dashed border + crossfade)
16
+ * btu-upload-dropzone-disabled - Disabled drop zone
17
+ * btu-upload-list - File list container
18
+ * btu-upload-item - Individual file item
19
+ * btu-upload-item-active - Active/uploading item
20
+ * btu-upload-item-complete - Completed upload item
21
+ * btu-upload-item-error - Error state item
22
+ * btu-upload-item-icon - File type icon (uses btu-icon emphasize)
23
+ * btu-upload-item-icon-error - Error variant icon color
24
+ * btu-upload-item-info - File info container
25
+ * btu-upload-item-name - File name text
26
+ * btu-upload-item-size - File size text
27
+ * btu-upload-item-progress - Progress bar container
28
+ * btu-upload-item-percent - Progress percentage text
29
+ * btu-upload-item-check - Success color override for the completion btu-icon (uses emphasize="pulse")
30
+ * btu-upload-item-remove - Remove button positioning (uses btu-icon-button)
31
+ * btu-upload-item-error-text - Error message text
32
+ * btu-upload-item-error-filename - Error state filename
33
+ * btu-upload-item-retry - Retry link
34
+ *
35
+ * @cssprop --upload-dropzone-bg - Drop zone background color
36
+ * @cssprop --upload-dropzone-border-color - Drop zone border color
37
+ * @cssprop --upload-dropzone-border-radius - Drop zone border radius
38
+ * @cssprop --upload-dropzone-hover-bg - Drop zone hover background (hover default: gray-50; drag-over default: primary-25)
39
+ * @cssprop --upload-dropzone-hover-border-color - Drop zone hover border
40
+ * @cssprop --upload-dropzone-focus-ring-color - Drop zone focus ring
41
+ * @cssprop --upload-item-bg - Item background
42
+ * @cssprop --upload-item-border-color - Item border color
43
+ * @cssprop --upload-item-active-border-color - Item active/in-progress border
44
+ * @cssprop --upload-item-complete-border-color - Item completed border
45
+ * @cssprop --upload-item-error-bg - Item error background
46
+ * @cssprop --upload-item-error-border-color - Item error border
47
+ */
48
+ module.exports = plugin(function ({ addComponents, theme, config }) {
49
+ const fontSizeSm = config('theme.fontSize.sm')?.[0] ?? '0.875rem';
50
+ const lineHeightSm = config('theme.fontSize.sm')?.[1] ?? '1.25rem';
51
+ const fontSizeXs = config('theme.fontSize.xs')?.[0] ?? '0.75rem';
52
+ const lineHeightXs = config('theme.fontSize.xs')?.[1] ?? '1.125rem';
53
+ const components = {
54
+ /* ─── Upload Container ─── */
55
+ '.btu-upload': {
56
+ display: 'flex',
57
+ flexDirection: 'column',
58
+ gap: '0.75rem',
59
+ width: '100%',
60
+ },
61
+ /* ─── Drop Zone ─── */
62
+ '.btu-upload-dropzone': {
63
+ position: 'relative',
64
+ display: 'flex',
65
+ flexDirection: 'column',
66
+ alignItems: 'center',
67
+ justifyContent: 'center',
68
+ gap: '0.5rem',
69
+ padding: '16px 24px',
70
+ borderWidth: '1px',
71
+ borderStyle: 'solid',
72
+ borderColor: 'var(--upload-dropzone-border-color, oklch(var(--btu-theme-gray-300)))',
73
+ borderRadius: `var(--upload-dropzone-border-radius, ${theme('borderRadius.lg')})`,
74
+ backgroundColor: 'var(--upload-dropzone-bg, oklch(var(--btu-theme-gray-25)))',
75
+ cursor: 'pointer',
76
+ transition: 'background-color 150ms ease, border-color 150ms ease, box-shadow 150ms ease',
77
+ textAlign: 'center',
78
+ '@media (prefers-reduced-motion: reduce)': {
79
+ transition: 'background-color 0.01ms ease, border-color 0.01ms ease, box-shadow 0.01ms ease',
80
+ },
81
+ '&:hover': {
82
+ backgroundColor: 'var(--upload-dropzone-hover-bg, oklch(var(--btu-theme-gray-50)))',
83
+ borderColor: 'var(--upload-dropzone-hover-border-color, oklch(var(--btu-theme-primary-300)))',
84
+ },
85
+ '&:focus-within': {
86
+ boxShadow: '0 0 0 4px var(--upload-dropzone-focus-ring-color, oklch(var(--btu-theme-primary-100)))',
87
+ borderColor: 'var(--upload-dropzone-hover-border-color, oklch(var(--btu-theme-primary-300)))',
88
+ },
89
+ /* High-contrast */
90
+ ':root.is-moreContrast &': {
91
+ borderColor: 'var(--upload-dropzone-border-color, oklch(var(--btu-theme-gray-400)))',
92
+ },
93
+ '@media screen and (prefers-contrast: more) and (forced-colors: none)': {
94
+ ':root:not(.is-normalContrast) &': {
95
+ borderColor: 'var(--upload-dropzone-border-color, oklch(var(--btu-theme-gray-400)))',
96
+ },
97
+ },
98
+ },
99
+ '.btu-upload-dropzone-icon': {
100
+ display: 'flex',
101
+ alignItems: 'center',
102
+ justifyContent: 'center',
103
+ width: '2.5rem',
104
+ height: '2.5rem',
105
+ borderRadius: '9999px',
106
+ backgroundColor: 'oklch(var(--btu-theme-gray-100))',
107
+ color: 'oklch(var(--btu-theme-gray-500))',
108
+ transition: 'transform 150ms ease',
109
+ '@media (prefers-reduced-motion: reduce)': {
110
+ transition: 'transform 0.01ms ease',
111
+ },
112
+ },
113
+ /* Prompt layer wrap — hosts both the resting text and the drag-over overlay. */
114
+ '.btu-upload-dropzone-prompt': {
115
+ position: 'relative',
116
+ display: 'flex',
117
+ alignItems: 'center',
118
+ justifyContent: 'center',
119
+ width: '100%',
120
+ },
121
+ '.btu-upload-dropzone-text': {
122
+ fontSize: fontSizeSm,
123
+ lineHeight: lineHeightSm,
124
+ color: 'oklch(var(--btu-theme-gray-500))',
125
+ transition: 'opacity 150ms ease',
126
+ '@media (prefers-reduced-motion: reduce)': {
127
+ transition: 'opacity 0.01ms ease',
128
+ },
129
+ },
130
+ /* Drag-over message — absolutely positioned overlay so the dropzone height stays constant. */
131
+ '.btu-upload-dropzone-drag-message': {
132
+ position: 'absolute',
133
+ inset: '0',
134
+ display: 'flex',
135
+ alignItems: 'center',
136
+ justifyContent: 'center',
137
+ fontSize: fontSizeSm,
138
+ lineHeight: lineHeightSm,
139
+ color: 'oklch(var(--btu-theme-gray-500))',
140
+ opacity: '0',
141
+ pointerEvents: 'none',
142
+ transition: 'opacity 150ms ease',
143
+ '@media (prefers-reduced-motion: reduce)': {
144
+ transition: 'opacity 0.01ms ease',
145
+ },
146
+ },
147
+ '.btu-upload-dropzone-action': {
148
+ // Button reset — the element is a <button> so default UA chrome must be cleared.
149
+ background: 'transparent',
150
+ border: '0',
151
+ padding: '0',
152
+ font: 'inherit',
153
+ color: 'oklch(var(--btu-theme-primary-600))',
154
+ fontWeight: '600',
155
+ cursor: 'pointer',
156
+ textDecoration: 'none',
157
+ '&:hover': {
158
+ textDecoration: 'underline',
159
+ },
160
+ '&:disabled': {
161
+ cursor: 'not-allowed',
162
+ opacity: '0.6',
163
+ },
164
+ },
165
+ /* Corner count pill — shown when max-files is finite and > 1. */
166
+ '.btu-upload-dropzone-count': {
167
+ position: 'absolute',
168
+ top: '0.5rem',
169
+ right: '0.5rem',
170
+ padding: '0.125rem 0.5rem',
171
+ borderRadius: '9999px',
172
+ fontSize: fontSizeXs,
173
+ lineHeight: lineHeightXs,
174
+ fontWeight: '500',
175
+ backgroundColor: 'oklch(var(--btu-theme-gray-100))',
176
+ color: 'oklch(var(--btu-theme-gray-700))',
177
+ pointerEvents: 'none',
178
+ },
179
+ /* Drag-over state — dashed border + crossfade overlay. */
180
+ '.btu-upload-dropzone-dragover': {
181
+ borderStyle: 'dashed',
182
+ borderWidth: '2px',
183
+ borderColor: 'var(--upload-dropzone-hover-border-color, oklch(var(--btu-theme-primary-400)))',
184
+ backgroundColor: 'var(--upload-dropzone-hover-bg, oklch(var(--btu-theme-primary-25)))',
185
+ '& .btu-upload-dropzone-text': {
186
+ opacity: '0',
187
+ },
188
+ '& .btu-upload-dropzone-drag-message': {
189
+ opacity: '1',
190
+ },
191
+ '& .btu-upload-dropzone-icon': {
192
+ transform: 'scale(1.15)',
193
+ },
194
+ },
195
+ /* Disabled state */
196
+ '.btu-upload-dropzone-disabled': {
197
+ opacity: '0.5',
198
+ pointerEvents: 'none',
199
+ cursor: 'default',
200
+ backgroundColor: 'var(--upload-dropzone-bg, oklch(var(--btu-theme-gray-50)))',
201
+ borderColor: 'var(--upload-dropzone-border-color, oklch(var(--btu-theme-gray-200)))',
202
+ },
203
+ /* ─── File List ─── */
204
+ '.btu-upload-list': {
205
+ display: 'flex',
206
+ flexDirection: 'column',
207
+ gap: '0.5rem',
208
+ margin: '0',
209
+ padding: '0',
210
+ listStyle: 'none',
211
+ },
212
+ /* ─── Upload Item ─── */
213
+ '.btu-upload-item': {
214
+ display: 'flex',
215
+ alignItems: 'flex-start',
216
+ gap: '0.75rem',
217
+ padding: '0.75rem 1rem',
218
+ borderWidth: '1px',
219
+ borderStyle: 'solid',
220
+ borderColor: 'var(--upload-item-border-color, oklch(var(--btu-theme-gray-200)))',
221
+ borderRadius: theme('borderRadius.lg'),
222
+ backgroundColor: 'var(--upload-item-bg, var(--btu-theme-white))',
223
+ },
224
+ /* Active/uploading state */
225
+ '.btu-upload-item-active': {
226
+ borderColor: 'var(--upload-item-active-border-color, oklch(var(--btu-theme-gray-300)))',
227
+ },
228
+ /* Complete state */
229
+ '.btu-upload-item-complete': {
230
+ borderColor: 'var(--upload-item-complete-border-color, oklch(var(--btu-theme-primary-500)))',
231
+ },
232
+ /* Error state */
233
+ '.btu-upload-item-error': {
234
+ backgroundColor: 'var(--upload-item-error-bg, oklch(var(--btu-theme-error-25)))',
235
+ borderColor: 'var(--upload-item-error-border-color, oklch(var(--btu-theme-error-300)))',
236
+ },
237
+ /* ─── Icon (uses btu-icon emphasize for tonal circle) ─── */
238
+ '.btu-upload-item-icon': {
239
+ flexShrink: '0',
240
+ color: 'oklch(var(--btu-theme-primary-600))',
241
+ },
242
+ '.btu-upload-item-icon-error': {
243
+ color: 'oklch(var(--btu-theme-error-600))',
244
+ },
245
+ /* ─── Item Info ─── */
246
+ '.btu-upload-item-info': {
247
+ display: 'flex',
248
+ flexDirection: 'column',
249
+ flex: '1',
250
+ minWidth: '0',
251
+ gap: '0.25rem',
252
+ },
253
+ '.btu-upload-item-name': {
254
+ fontSize: fontSizeSm,
255
+ lineHeight: lineHeightSm,
256
+ fontWeight: '500',
257
+ color: 'oklch(var(--btu-theme-gray-700))',
258
+ overflow: 'hidden',
259
+ textOverflow: 'ellipsis',
260
+ whiteSpace: 'nowrap',
261
+ },
262
+ '.btu-upload-item-size': {
263
+ fontSize: fontSizeXs,
264
+ lineHeight: lineHeightXs,
265
+ color: 'oklch(var(--btu-theme-gray-500))',
266
+ },
267
+ '.btu-upload-item-progress': {
268
+ display: 'flex',
269
+ alignItems: 'center',
270
+ gap: '0.5rem',
271
+ width: '100%',
272
+ },
273
+ '.btu-upload-item-percent': {
274
+ fontSize: fontSizeXs,
275
+ lineHeight: lineHeightXs,
276
+ color: 'oklch(var(--btu-theme-gray-500))',
277
+ flexShrink: '0',
278
+ minWidth: '2rem',
279
+ textAlign: 'right',
280
+ },
281
+ /* Double-class selector beats .btu-icon-emphasize's default primary color; flex-shrink: 0 keeps the circle round inside the progress row's flex layout. */
282
+ '.btu-icon-emphasize.btu-upload-item-check': {
283
+ flexShrink: '0',
284
+ color: 'oklch(var(--btu-theme-success-600))',
285
+ },
286
+ /* ─── Remove Button (uses btu-icon-button destructive) ─── */
287
+ '.btu-upload-item-remove': {
288
+ alignSelf: 'flex-start',
289
+ flexShrink: '0',
290
+ },
291
+ /* ─── Error Text ─── */
292
+ '.btu-upload-item-error-text': {
293
+ fontSize: fontSizeSm,
294
+ lineHeight: lineHeightSm,
295
+ color: 'oklch(var(--btu-theme-error-600))',
296
+ },
297
+ '.btu-upload-item-error-filename': {
298
+ fontSize: fontSizeXs,
299
+ lineHeight: lineHeightXs,
300
+ color: 'oklch(var(--btu-theme-gray-500))',
301
+ },
302
+ /* ─── Retry Link ─── */
303
+ '.btu-upload-item-retry': {
304
+ fontSize: fontSizeSm,
305
+ lineHeight: lineHeightSm,
306
+ fontWeight: '600',
307
+ color: 'oklch(var(--btu-theme-error-600))',
308
+ cursor: 'pointer',
309
+ textDecoration: 'none',
310
+ textAlign: 'left',
311
+ alignSelf: 'flex-start',
312
+ background: 'none',
313
+ border: 'none',
314
+ padding: '0',
315
+ '&:hover': {
316
+ textDecoration: 'underline',
317
+ },
318
+ },
319
+ };
320
+ addComponents(components);
321
+ });
322
+ //# sourceMappingURL=tailwind-plugin-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-plugin-upload.js","sourceRoot":"","sources":["../src/tailwind-plugin-upload.ts"],"names":[],"mappings":"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"}