@getmicdrop/svelte-components 5.20.2 → 5.21.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 (259) hide show
  1. package/dist/calendar/AboutShow/AboutShow.spec.js +10 -10
  2. package/dist/calendar/AboutShow/AboutShow.svelte +11 -11
  3. package/dist/calendar/Calendar/MiniMonthCalendar.spec.js +9 -8
  4. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +22 -25
  5. package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -1
  6. package/dist/calendar/FAQs/FAQs.spec.js +6 -6
  7. package/dist/calendar/FAQs/FAQs.svelte +4 -4
  8. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +8 -12
  9. package/dist/calendar/OrderSummary/OrderSummary.svelte +36 -36
  10. package/dist/calendar/PublicCard/PublicCard.spec.js +3 -3
  11. package/dist/calendar/PublicCard/PublicCard.svelte +7 -7
  12. package/dist/calendar/ShowCard/ShowCard.spec.js +8 -8
  13. package/dist/calendar/ShowCard/ShowCard.svelte +8 -8
  14. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.js +4 -4
  15. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +4 -4
  16. package/dist/components/Heading.spec.js +1 -1
  17. package/dist/components/Heading.svelte +1 -1
  18. package/dist/components/Layout/AppShell.svelte +4 -4
  19. package/dist/components/Layout/ContentSection.svelte +2 -2
  20. package/dist/components/Layout/Heading.svelte +3 -3
  21. package/dist/components/Layout/PageContainer.svelte +2 -2
  22. package/dist/components/Layout/Section.spec.js +4 -4
  23. package/dist/components/Layout/Text.svelte +7 -7
  24. package/dist/components/Layout/__tests__/AppShell.test.js +5 -5
  25. package/dist/components/Layout/__tests__/ContentSection.test.js +1 -1
  26. package/dist/components/Layout/__tests__/Heading.test.js +3 -3
  27. package/dist/components/Layout/__tests__/PageContainer.test.js +4 -4
  28. package/dist/components/Layout/__tests__/Text.test.js +9 -9
  29. package/dist/components/Text.spec.js +4 -4
  30. package/dist/components/Text.svelte +7 -7
  31. package/dist/patterns/chat/ChatActivityNotice.spec.js +1 -1
  32. package/dist/patterns/chat/ChatActivityNotice.svelte +3 -3
  33. package/dist/patterns/chat/ChatBubble.spec.js +1 -1
  34. package/dist/patterns/chat/ChatBubble.svelte +7 -7
  35. package/dist/patterns/chat/ChatContainer.spec.js +1 -1
  36. package/dist/patterns/chat/ChatContainer.svelte +3 -3
  37. package/dist/patterns/chat/ChatDateDivider.svelte +1 -1
  38. package/dist/patterns/chat/ChatInvitationBubble.spec.js +2 -2
  39. package/dist/patterns/chat/ChatInvitationBubble.svelte +1 -1
  40. package/dist/patterns/chat/ChatInvitationNotice.spec.js +2 -2
  41. package/dist/patterns/chat/ChatInvitationNotice.svelte +1 -1
  42. package/dist/patterns/chat/ChatMessageGroup.svelte +2 -2
  43. package/dist/patterns/chat/ChatSlotUpdate.svelte +2 -2
  44. package/dist/patterns/chat/ChatStatusBadge.spec.js +10 -10
  45. package/dist/patterns/chat/ChatStatusBadge.svelte +8 -8
  46. package/dist/patterns/chat/ChatStatusTransition.spec.js +9 -9
  47. package/dist/patterns/chat/ChatStatusTransition.svelte +5 -5
  48. package/dist/patterns/chat/ChatTextBubble.spec.js +4 -4
  49. package/dist/patterns/chat/ChatTextBubble.svelte +2 -2
  50. package/dist/patterns/data/DataList.spec.js +5 -5
  51. package/dist/patterns/data/DataList.svelte +1 -1
  52. package/dist/patterns/data/DataTable.spec.js +18 -18
  53. package/dist/patterns/data/DataTable.svelte +3 -3
  54. package/dist/patterns/forms/FormActions.spec.js +6 -6
  55. package/dist/patterns/forms/FormActions.stories.svelte +1 -1
  56. package/dist/patterns/forms/FormActions.svelte +1 -1
  57. package/dist/patterns/forms/FormSection.spec.js +4 -4
  58. package/dist/patterns/forms/FormSection.svelte +2 -2
  59. package/dist/patterns/forms/FormValidationSummary.spec.js +2 -2
  60. package/dist/patterns/forms/FormValidationSummary.stories.svelte +4 -4
  61. package/dist/patterns/forms/FormValidationSummary.svelte +4 -4
  62. package/dist/patterns/navigation/BottomNav.stories.svelte +23 -23
  63. package/dist/patterns/navigation/BottomNav.svelte +3 -3
  64. package/dist/patterns/navigation/Header.spec.js +9 -9
  65. package/dist/patterns/navigation/Header.svelte +13 -15
  66. package/dist/patterns/navigation/Header.svelte.d.ts.map +1 -1
  67. package/dist/patterns/page/PageLayout.spec.js +5 -5
  68. package/dist/patterns/page/PageLayout.svelte +1 -1
  69. package/dist/patterns/page/PageLoader.stories.svelte +5 -5
  70. package/dist/patterns/page/SectionHeader.spec.js +8 -8
  71. package/dist/patterns/page/SectionHeader.svelte +2 -2
  72. package/dist/presets/buttons.js +1 -1
  73. package/dist/presets/buttons.spec.js +4 -4
  74. package/dist/primitives/Accordion/Accordion.spec.js +5 -5
  75. package/dist/primitives/Accordion/Accordion.stories.svelte +9 -9
  76. package/dist/primitives/Accordion/Accordion.svelte +2 -2
  77. package/dist/primitives/Accordion/AccordionItem.spec.js +19 -28
  78. package/dist/primitives/Accordion/AccordionItem.svelte +4 -4
  79. package/dist/primitives/Avatar/Avatar.spec.js +11 -11
  80. package/dist/primitives/Avatar/Avatar.stories.svelte +6 -5
  81. package/dist/primitives/Avatar/Avatar.stories.svelte.d.ts.map +1 -1
  82. package/dist/primitives/Avatar/Avatar.svelte +3 -3
  83. package/dist/primitives/Badges/Badge.spec.js +10 -10
  84. package/dist/primitives/BottomSheet/BottomSheet.spec.js +5 -5
  85. package/dist/primitives/BottomSheet/BottomSheet.svelte +7 -7
  86. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +4 -2
  87. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +4 -4
  88. package/dist/primitives/Button/Button.spec.js +15 -15
  89. package/dist/primitives/Button/Button.svelte +16 -16
  90. package/dist/primitives/Button/ButtonVariantShowcase.spec.js +1 -1
  91. package/dist/primitives/Button/ButtonVariantShowcase.svelte +18 -18
  92. package/dist/primitives/Card.spec.js +1 -1
  93. package/dist/primitives/Card.stories.svelte +1 -1
  94. package/dist/primitives/Card.svelte +1 -1
  95. package/dist/primitives/CardAction/CardAction.svelte +3 -3
  96. package/dist/primitives/Checkbox/Checkbox.spec.js +16 -16
  97. package/dist/primitives/Checkbox/Checkbox.stories.svelte +3 -3
  98. package/dist/primitives/Checkbox/Checkbox.svelte +9 -9
  99. package/dist/primitives/DarkModeToggle.spec.js +11 -11
  100. package/dist/primitives/DarkModeToggle.stories.svelte +8 -8
  101. package/dist/primitives/DarkModeToggle.svelte +4 -4
  102. package/dist/primitives/Drawer/Drawer.spec.js +4 -4
  103. package/dist/primitives/Drawer/Drawer.stories.svelte +6 -6
  104. package/dist/primitives/Drawer/Drawer.svelte +11 -11
  105. package/dist/primitives/Dropdown/Dropdown.spec.js +9 -9
  106. package/dist/primitives/Dropdown/Dropdown.stories.svelte +4 -4
  107. package/dist/primitives/Dropdown/Dropdown.svelte +2 -2
  108. package/dist/primitives/Dropdown/DropdownDivider.svelte +1 -1
  109. package/dist/primitives/Dropdown/DropdownItem.spec.js +8 -15
  110. package/dist/primitives/Dropdown/DropdownItem.svelte +3 -3
  111. package/dist/primitives/Helper/Helper.spec.js +6 -6
  112. package/dist/primitives/Helper/Helper.svelte +3 -3
  113. package/dist/primitives/Icons/Icon.stories.svelte +15 -15
  114. package/dist/primitives/Icons/IconGallery.stories.svelte +26 -26
  115. package/dist/primitives/Icons/Icons.spec.js +3 -3
  116. package/dist/primitives/Input/Input.spec.js +9 -9
  117. package/dist/primitives/Input/Input.svelte +11 -11
  118. package/dist/primitives/Input/Select.spec.js +7 -7
  119. package/dist/primitives/Input/Select.stories.svelte +1 -1
  120. package/dist/primitives/Input/Select.svelte +6 -6
  121. package/dist/primitives/Input/Textarea.spec.js +8 -8
  122. package/dist/primitives/Input/Textarea.stories.svelte +1 -1
  123. package/dist/primitives/Input/Textarea.svelte +2 -2
  124. package/dist/primitives/Label/Label.spec.js +20 -21
  125. package/dist/primitives/Label/Label.svelte +4 -4
  126. package/dist/primitives/LandingButton/LandingButton.svelte +3 -3
  127. package/dist/primitives/MenuItem/MenuItem.spec.js +5 -5
  128. package/dist/primitives/MenuItem/MenuItem.svelte +4 -4
  129. package/dist/primitives/Modal/Modal.stories.svelte +8 -8
  130. package/dist/primitives/Modal/Modal.svelte +4 -4
  131. package/dist/primitives/NavItem/NavItem.spec.js +2 -2
  132. package/dist/primitives/NavItem/NavItem.svelte +3 -3
  133. package/dist/primitives/NumberInput/NumberInput.spec.js +17 -17
  134. package/dist/primitives/NumberInput/NumberInput.svelte +8 -8
  135. package/dist/primitives/Pagination/DotIndicator.svelte +6 -6
  136. package/dist/primitives/Pagination/Pagination.spec.js +6 -6
  137. package/dist/primitives/Pagination/Pagination.stories.svelte +4 -4
  138. package/dist/primitives/Pagination/Pagination.svelte +3 -3
  139. package/dist/primitives/Radio/Radio.spec.js +19 -19
  140. package/dist/primitives/Radio/Radio.stories.svelte +5 -5
  141. package/dist/primitives/Radio/Radio.svelte +8 -8
  142. package/dist/primitives/SearchResultItem/SearchResultItem.svelte +5 -5
  143. package/dist/primitives/SidebarToggle/SidebarToggle.svelte +2 -2
  144. package/dist/primitives/Skeleton/CardPlaceholder.spec.js +1 -1
  145. package/dist/primitives/Skeleton/CardPlaceholder.svelte +11 -11
  146. package/dist/primitives/Skeleton/ImagePlaceholder.spec.js +2 -2
  147. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +7 -7
  148. package/dist/primitives/Skeleton/ListPlaceholder.spec.js +2 -2
  149. package/dist/primitives/Skeleton/ListPlaceholder.svelte +5 -5
  150. package/dist/primitives/Skeleton/Skeleton.spec.js +7 -7
  151. package/dist/primitives/Skeleton/Skeleton.stories.svelte +4 -4
  152. package/dist/primitives/Skeleton/Skeleton.svelte +1 -1
  153. package/dist/primitives/Spinner/Spinner.spec.js +4 -5
  154. package/dist/primitives/Spinner/Spinner.stories.svelte +2 -2
  155. package/dist/primitives/Spinner/Spinner.svelte +1 -1
  156. package/dist/primitives/Tabs/Tabs.spec.js +14 -14
  157. package/dist/primitives/Tabs/Tabs.stories.svelte +6 -6
  158. package/dist/primitives/Tabs/Tabs.svelte +8 -8
  159. package/dist/primitives/Toggle.spec.js +3 -5
  160. package/dist/primitives/Toggle.stories.svelte +7 -7
  161. package/dist/primitives/Toggle.svelte +7 -7
  162. package/dist/primitives/Tooltip/Tooltip.svelte +5 -5
  163. package/dist/primitives/ValidationError.spec.js +1 -1
  164. package/dist/primitives/ValidationError.stories.svelte +8 -8
  165. package/dist/primitives/ValidationError.svelte +1 -1
  166. package/dist/recipes/CropImage/CropImage.stories.svelte +8 -8
  167. package/dist/recipes/CropImage/CropImage.svelte +7 -7
  168. package/dist/recipes/ImageUploader/ImageUploader.spec.js +1 -1
  169. package/dist/recipes/ImageUploader/ImageUploader.svelte +34 -56
  170. package/dist/recipes/SuperLogin/SuperLogin.svelte +25 -25
  171. package/dist/recipes/Toaster/Toaster.stories.svelte +10 -10
  172. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
  173. package/dist/recipes/feedback/ErrorDisplay.spec.js +1 -1
  174. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +2 -2
  175. package/dist/recipes/feedback/ErrorDisplay.svelte +2 -2
  176. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +7 -7
  177. package/dist/recipes/fields/CheckboxField.spec.js +2 -2
  178. package/dist/recipes/fields/CheckboxField.svelte +2 -2
  179. package/dist/recipes/fields/FormField.spec.js +4 -4
  180. package/dist/recipes/fields/FormField.svelte +1 -1
  181. package/dist/recipes/fields/RadioGroup.spec.js +1 -1
  182. package/dist/recipes/fields/RadioGroup.svelte +2 -2
  183. package/dist/recipes/fields/SelectField.spec.js +2 -2
  184. package/dist/recipes/fields/TextareaField.spec.js +2 -2
  185. package/dist/recipes/fields/ToggleField.spec.js +2 -2
  186. package/dist/recipes/fields/ToggleField.svelte +1 -1
  187. package/dist/recipes/inputs/MultiSelect.stories.svelte +2 -2
  188. package/dist/recipes/inputs/MultiSelect.svelte +10 -10
  189. package/dist/recipes/inputs/OTPInput.stories.svelte +9 -9
  190. package/dist/recipes/inputs/OTPInput.svelte +1 -1
  191. package/dist/recipes/inputs/PasswordInput.spec.js +2 -2
  192. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +14 -14
  193. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +3 -3
  194. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte +2 -2
  195. package/dist/recipes/inputs/PhoneInput.svelte +5 -5
  196. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +10 -10
  197. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +7 -7
  198. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +11 -14
  199. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts.map +1 -1
  200. package/dist/recipes/inputs/Search.spec.js +3 -3
  201. package/dist/recipes/inputs/Search.svelte +1 -1
  202. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte +5 -5
  203. package/dist/recipes/modals/AlertModal.spec.js +36 -36
  204. package/dist/recipes/modals/AlertModal.svelte +8 -8
  205. package/dist/recipes/modals/ConfirmationModal.spec.js +20 -20
  206. package/dist/recipes/modals/ConfirmationModal.svelte +1 -1
  207. package/dist/recipes/modals/FeedbackModal.svelte +7 -7
  208. package/dist/recipes/modals/InputModal.spec.js +17 -17
  209. package/dist/recipes/modals/InputModal.svelte +3 -3
  210. package/dist/recipes/modals/ModalStateManager.spec.js +1 -1
  211. package/dist/recipes/modals/ModalStateManager.svelte +2 -2
  212. package/dist/recipes/modals/StatusModal.spec.js +7 -7
  213. package/dist/recipes/modals/StatusModal.svelte +10 -10
  214. package/dist/schemas/__tests__/order.test.js +1 -1
  215. package/dist/schemas/auth.d.ts +107 -17
  216. package/dist/schemas/auth.d.ts.map +1 -1
  217. package/dist/schemas/common.d.ts +41 -13
  218. package/dist/schemas/common.d.ts.map +1 -1
  219. package/dist/schemas/event.d.ts +147 -41
  220. package/dist/schemas/event.d.ts.map +1 -1
  221. package/dist/schemas/order.d.ts +208 -51
  222. package/dist/schemas/order.d.ts.map +1 -1
  223. package/dist/schemas/performer.d.ts +199 -44
  224. package/dist/schemas/performer.d.ts.map +1 -1
  225. package/dist/schemas/promo.d.ts +221 -55
  226. package/dist/schemas/promo.d.ts.map +1 -1
  227. package/dist/schemas/ticket.d.ts +187 -61
  228. package/dist/schemas/ticket.d.ts.map +1 -1
  229. package/dist/schemas/user.d.ts +114 -54
  230. package/dist/schemas/user.d.ts.map +1 -1
  231. package/dist/schemas/venue.d.ts +238 -20
  232. package/dist/schemas/venue.d.ts.map +1 -1
  233. package/dist/stories/ButtonAuditDashboard.spec.js +12 -12
  234. package/dist/stories/ButtonAuditDashboard.svelte +55 -55
  235. package/dist/stories/ButtonAuditReview.spec.js +8 -8
  236. package/dist/stories/ButtonAuditReview.svelte +87 -87
  237. package/dist/stories/ButtonGridView.spec.js +27 -27
  238. package/dist/stories/ButtonGridView.svelte +22 -22
  239. package/dist/stories/ButtonShowcase.spec.js +4 -4
  240. package/dist/stories/ButtonShowcase.svelte +119 -119
  241. package/dist/stories/ComponentConsolidation.stories.svelte +453 -453
  242. package/dist/stories/DesignSystemAudit.stories.svelte +127 -127
  243. package/dist/stories/PatternsGallery.spec.js +3 -3
  244. package/dist/stories/PatternsGallery.svelte +23 -23
  245. package/dist/stories/PrimitivesGallery.spec.js +9 -9
  246. package/dist/stories/PrimitivesGallery.svelte +68 -68
  247. package/dist/stories/RecipesGallery.svelte +26 -26
  248. package/dist/tokens/__tests__/typography-base.test.js +5 -5
  249. package/dist/tokens/__tests__/typography.test.js +32 -36
  250. package/dist/tokens/__tests__/variants.test.js +63 -78
  251. package/dist/tokens/tokens.css +15 -15
  252. package/dist/tokens/typography-base.css +16 -16
  253. package/dist/tokens/typography.d.ts +29 -29
  254. package/dist/tokens/typography.js +29 -29
  255. package/dist/tokens/utilities.css +35 -47
  256. package/dist/tokens/variants.d.ts +32 -32
  257. package/dist/tokens/variants.js +32 -32
  258. package/dist/utils/utils/utils.spec.js +2 -2
  259. package/package.json +1 -1
@@ -31,7 +31,7 @@
31
31
 
32
32
  <div class="px-4 pt-4 pb-20 md:pb-6 {className}">
33
33
  {#if variant === 'card'}
34
- <Card className="bg-white dark:bg-gray-800 {maxWidth}">
34
+ <Card className="bg-card {maxWidth}">
35
35
  {@render children?.()}
36
36
  </Card>
37
37
  {:else}
@@ -89,13 +89,13 @@
89
89
  <div class="space-y-4">
90
90
  <div class="flex gap-2">
91
91
  <button
92
- class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
92
+ class="px-4 py-2 bg-brand-primary text-white rounded hover:bg-brand-primary"
93
93
  onclick={simulateLoading}
94
94
  >
95
95
  Simulate Loading
96
96
  </button>
97
97
  <button
98
- class="px-4 py-2 bg-red-500 text-white rounded hover:bg-red-600"
98
+ class="px-4 py-2 bg-accent-danger text-white rounded hover:bg-accent-danger"
99
99
  onclick={simulateError}
100
100
  >
101
101
  Simulate Error
@@ -109,9 +109,9 @@
109
109
  showRetry={true}
110
110
  onRetry={simulateLoading}
111
111
  >
112
- <div class="p-8 bg-green-50 rounded-lg">
113
- <h3 class="text-xl font-bold text-green-800">Success!</h3>
114
- <p class="text-green-600 mt-2">Your content has loaded successfully.</p>
112
+ <div class="p-8 bg-status-success-bg rounded-lg">
113
+ <h3 class="text-xl font-bold text-status-success-text">Success!</h3>
114
+ <p class="text-accent-success mt-2">Your content has loaded successfully.</p>
115
115
  </div>
116
116
  </PageLoader>
117
117
  </div>
@@ -83,10 +83,10 @@ describe('SectionHeader Count', () => {
83
83
  expect(badge).toHaveClass('justify-center');
84
84
  });
85
85
 
86
- test('count badge has bg-gray-100', () => {
86
+ test('count badge has bg-muted', () => {
87
87
  const { container } = render(SectionHeader, { props: { title: 'Test', count: 10 } });
88
88
  const badge = container.querySelector('span');
89
- expect(badge).toHaveClass('bg-gray-100');
89
+ expect(badge).toHaveClass('bg-muted');
90
90
  });
91
91
 
92
92
  test('count badge has rounded-full', () => {
@@ -95,10 +95,10 @@ describe('SectionHeader Count', () => {
95
95
  expect(badge).toHaveClass('rounded-full');
96
96
  });
97
97
 
98
- test('count badge has dark mode bg', () => {
98
+ test('count badge uses token-based bg class', () => {
99
99
  const { container } = render(SectionHeader, { props: { title: 'Test', count: 10 } });
100
100
  const badge = container.querySelector('span');
101
- expect(badge).toHaveClass('dark:bg-gray-700');
101
+ expect(badge).toHaveClass('bg-muted');
102
102
  });
103
103
 
104
104
  test('count badge has padding', () => {
@@ -125,16 +125,16 @@ describe('SectionHeader Divider', () => {
125
125
  expect(container.querySelector('hr')).not.toBeInTheDocument();
126
126
  });
127
127
 
128
- test('divider has border-gray-200', () => {
128
+ test('divider has border-border', () => {
129
129
  const { container } = render(SectionHeader, { props: { divider: true } });
130
130
  const hr = container.querySelector('hr');
131
- expect(hr).toHaveClass('border-gray-200');
131
+ expect(hr).toHaveClass('border-border');
132
132
  });
133
133
 
134
- test('divider has dark mode class', () => {
134
+ test('divider uses token-based border class', () => {
135
135
  const { container } = render(SectionHeader, { props: { divider: true } });
136
136
  const hr = container.querySelector('hr');
137
- expect(hr).toHaveClass('dark:border-gray-700');
137
+ expect(hr).toHaveClass('border-border');
138
138
  });
139
139
 
140
140
  test('divider has mb-4 margin', () => {
@@ -23,7 +23,7 @@
23
23
 
24
24
  <div class={className}>
25
25
  {#if divider}
26
- <hr class="border-gray-200 dark:border-gray-700 mb-4" />
26
+ <hr class="border-border mb-4" />
27
27
  {/if}
28
28
 
29
29
  <div class="flex items-center justify-between gap-4">
@@ -32,7 +32,7 @@
32
32
  <h2 class={typography.h3}>{title}</h2>
33
33
  {/if}
34
34
  {#if count !== null}
35
- <span class={`inline-flex items-center justify-center px-2 py-0.5 ${typography.xsMuted} bg-gray-100 dark:bg-gray-700 rounded-full`}>
35
+ <span class={`inline-flex items-center justify-center px-2 py-0.5 ${typography.xsMuted} bg-muted rounded-full`}>
36
36
  {count}
37
37
  </span>
38
38
  {/if}
@@ -71,6 +71,6 @@ export const ICON_BUTTON_PRESETS = {
71
71
  destructive: {
72
72
  variant: 'ghost',
73
73
  size: 'sm',
74
- className: 'p-2 text-red-600 hover:bg-red-100 dark:text-red-400 dark:hover:bg-red-900',
74
+ className: 'p-2 text-accent-danger hover:bg-status-error-bg',
75
75
  },
76
76
  };
@@ -103,13 +103,13 @@ describe('Icon Button Presets', () => {
103
103
  });
104
104
 
105
105
  it('has red color classes', () => {
106
- expect(ICON_BUTTON_PRESETS.destructive.className).toContain('text-red-600');
107
- expect(ICON_BUTTON_PRESETS.destructive.className).toContain('hover:bg-red-100');
106
+ expect(ICON_BUTTON_PRESETS.destructive.className).toContain('text-accent-danger');
107
+ expect(ICON_BUTTON_PRESETS.destructive.className).toContain('hover:bg-status-error-bg');
108
108
  });
109
109
 
110
110
  it('has dark mode red classes', () => {
111
- expect(ICON_BUTTON_PRESETS.destructive.className).toContain('dark:text-red-400');
112
- expect(ICON_BUTTON_PRESETS.destructive.className).toContain('dark:hover:bg-red-900');
111
+ expect(ICON_BUTTON_PRESETS.destructive.className).toContain('');
112
+ expect(ICON_BUTTON_PRESETS.destructive.className).toContain('');
113
113
  });
114
114
  });
115
115
  });
@@ -71,19 +71,19 @@ describe('Accordion Component', () => {
71
71
  const { container } = render(Accordion);
72
72
  const accordion = container.querySelector('[data-accordion]');
73
73
  expect(accordion).toHaveClass('divide-y');
74
- expect(accordion).toHaveClass('divide-gray-200');
74
+ expect(accordion).toHaveClass('divide-border');
75
75
  });
76
76
 
77
- test('has dark mode divide classes', () => {
77
+ test('has token-based divide classes', () => {
78
78
  const { container } = render(Accordion);
79
79
  const accordion = container.querySelector('[data-accordion]');
80
- expect(accordion).toHaveClass('dark:divide-gray-700');
80
+ expect(accordion).toHaveClass('divide-border');
81
81
  });
82
82
 
83
- test('has dark mode border classes when not flush', () => {
83
+ test('has border class when not flush', () => {
84
84
  const { container } = render(Accordion);
85
85
  const accordion = container.querySelector('[data-accordion]');
86
- expect(accordion).toHaveClass('dark:border-gray-700');
86
+ expect(accordion).toHaveClass('border');
87
87
  });
88
88
 
89
89
  test('renders children snippet content', () => {
@@ -22,13 +22,13 @@
22
22
  <div class="max-w-xl">
23
23
  <Accordion>
24
24
  <AccordionItem title="What is Micdrop?">
25
- <p class="text-gray-600">Micdrop is a platform for comedians and venues to manage shows, ticket sales, and performer booking.</p>
25
+ <p class="text-text-secondary">Micdrop is a platform for comedians and venues to manage shows, ticket sales, and performer booking.</p>
26
26
  </AccordionItem>
27
27
  <AccordionItem title="How do I get started?">
28
- <p class="text-gray-600">Sign up for an account, set up your venue or performer profile, and start creating shows.</p>
28
+ <p class="text-text-secondary">Sign up for an account, set up your venue or performer profile, and start creating shows.</p>
29
29
  </AccordionItem>
30
30
  <AccordionItem title="What are the fees?">
31
- <p class="text-gray-600">Micdrop charges a small percentage per ticket sold. There are no monthly fees.</p>
31
+ <p class="text-text-secondary">Micdrop charges a small percentage per ticket sold. There are no monthly fees.</p>
32
32
  </AccordionItem>
33
33
  </Accordion>
34
34
  </div>
@@ -40,10 +40,10 @@
40
40
  <div class="max-w-xl">
41
41
  <Accordion>
42
42
  <AccordionItem title="Expanded by default" open={true}>
43
- <p class="text-gray-600">This item starts expanded.</p>
43
+ <p class="text-text-secondary">This item starts expanded.</p>
44
44
  </AccordionItem>
45
45
  <AccordionItem title="Collapsed item">
46
- <p class="text-gray-600">Click to expand this item.</p>
46
+ <p class="text-text-secondary">Click to expand this item.</p>
47
47
  </AccordionItem>
48
48
  </Accordion>
49
49
  </div>
@@ -55,7 +55,7 @@
55
55
  <div class="max-w-xl">
56
56
  <Accordion>
57
57
  <AccordionItem title="Features">
58
- <ul class="list-disc list-inside text-gray-600 space-y-2">
58
+ <ul class="list-disc list-inside text-text-secondary space-y-2">
59
59
  <li>Online ticket sales</li>
60
60
  <li>Performer management</li>
61
61
  <li>Show scheduling</li>
@@ -64,9 +64,9 @@
64
64
  </AccordionItem>
65
65
  <AccordionItem title="Pricing">
66
66
  <div class="space-y-2">
67
- <p class="text-gray-600"><strong>Basic:</strong> Free</p>
68
- <p class="text-gray-600"><strong>Pro:</strong> $29/month</p>
69
- <p class="text-gray-600"><strong>Enterprise:</strong> Contact us</p>
67
+ <p class="text-text-secondary"><strong>Basic:</strong> Free</p>
68
+ <p class="text-text-secondary"><strong>Pro:</strong> $29/month</p>
69
+ <p class="text-text-secondary"><strong>Enterprise:</strong> Contact us</p>
70
70
  </div>
71
71
  </AccordionItem>
72
72
  </Accordion>
@@ -53,8 +53,8 @@
53
53
  // Flowbite-native classes
54
54
  // Note: overflow-hidden was removed to allow dropdowns/menus inside accordion items to render outside the container
55
55
  let containerClasses = $derived(flush
56
- ? "divide-y divide-gray-200 dark:divide-gray-700"
57
- : "border border-gray-200 dark:border-gray-700 rounded-lg divide-y divide-gray-200 dark:divide-gray-700");
56
+ ? "divide-y divide-border"
57
+ : "border border-border rounded-lg divide-y divide-border");
58
58
  </script>
59
59
 
60
60
  <div class="{containerClasses} {className}" data-accordion={multiple ? "open" : "collapse"} {...restProps}>
@@ -290,25 +290,19 @@ describe('AccordionItem - Styling (Flowbite Native)', () => {
290
290
  test('button has gray background', () => {
291
291
  const { container } = render(AccordionItemWrapper);
292
292
  const button = container.querySelector('button');
293
- expect(button).toHaveClass('bg-gray-100');
293
+ expect(button).toHaveClass('bg-muted');
294
294
  });
295
295
 
296
- test('button has dark mode background', () => {
296
+ test('button has token-based background', () => {
297
297
  const { container } = render(AccordionItemWrapper);
298
298
  const button = container.querySelector('button');
299
- expect(button).toHaveClass('dark:bg-gray-800');
299
+ expect(button).toHaveClass('bg-muted');
300
300
  });
301
301
 
302
302
  test('button has hover state', () => {
303
303
  const { container } = render(AccordionItemWrapper);
304
304
  const button = container.querySelector('button');
305
- expect(button).toHaveClass('hover:bg-gray-200');
306
- });
307
-
308
- test('button has dark mode hover state', () => {
309
- const { container } = render(AccordionItemWrapper);
310
- const button = container.querySelector('button');
311
- expect(button).toHaveClass('dark:hover:bg-gray-700');
305
+ expect(button).toHaveClass('hover:bg-bg-tertiary');
312
306
  });
313
307
 
314
308
  test('content has p-5 padding', async () => {
@@ -340,7 +334,7 @@ describe('AccordionItem - Styling (Flowbite Native)', () => {
340
334
  const contentWrapper = container.querySelector('p').parentElement;
341
335
  expect(contentWrapper).toHaveClass('border');
342
336
  expect(contentWrapper).toHaveClass('border-t-0');
343
- expect(contentWrapper).toHaveClass('border-gray-200');
337
+ expect(contentWrapper).toHaveClass('border-border');
344
338
  });
345
339
  });
346
340
 
@@ -360,7 +354,7 @@ describe('AccordionItem - Styling (Flowbite Native)', () => {
360
354
  });
361
355
  });
362
356
 
363
- test('content has dark mode border', async () => {
357
+ test('content has token-based border', async () => {
364
358
  const user = userEvent.setup();
365
359
  const { container } = render(AccordionItemWrapper, {
366
360
  props: { flush: false }
@@ -372,7 +366,7 @@ describe('AccordionItem - Styling (Flowbite Native)', () => {
372
366
 
373
367
  await waitFor(() => {
374
368
  const contentWrapper = container.querySelector('p').parentElement;
375
- expect(contentWrapper).toHaveClass('dark:border-gray-700');
369
+ expect(contentWrapper).toHaveClass('border-border');
376
370
  });
377
371
  });
378
372
  });
@@ -381,10 +375,9 @@ describe('AccordionItem - Typography Integration', () => {
381
375
  test('header uses typography.body class', () => {
382
376
  const { container } = render(AccordionItemWrapper);
383
377
  const headerSpan = container.querySelector('button span');
384
- // typography.body = "text-base text-gray-900 dark:text-white leading-relaxed"
378
+ // typography.body = "text-base text-text-primary leading-relaxed"
385
379
  expect(headerSpan).toHaveClass('text-base');
386
- expect(headerSpan).toHaveClass('text-gray-900');
387
- expect(headerSpan).toHaveClass('dark:text-white');
380
+ expect(headerSpan).toHaveClass('text-text-primary');
388
381
  expect(headerSpan).toHaveClass('leading-relaxed');
389
382
  });
390
383
 
@@ -398,10 +391,9 @@ describe('AccordionItem - Typography Integration', () => {
398
391
 
399
392
  await waitFor(() => {
400
393
  const content = container.querySelector('p');
401
- // typography.bodyMuted = "text-base text-gray-500 dark:text-gray-400 leading-relaxed"
394
+ // typography.bodyMuted = "text-base text-muted-foreground leading-relaxed"
402
395
  expect(content).toHaveClass('text-base');
403
- expect(content).toHaveClass('text-gray-500');
404
- expect(content).toHaveClass('dark:text-gray-400');
396
+ expect(content).toHaveClass('text-muted-foreground');
405
397
  expect(content).toHaveClass('leading-relaxed');
406
398
  });
407
399
  });
@@ -409,10 +401,9 @@ describe('AccordionItem - Typography Integration', () => {
409
401
  test('button header text uses typography.smMuted', () => {
410
402
  const { container } = render(AccordionItemWrapper);
411
403
  const button = container.querySelector('button');
412
- // typography.smMuted = "text-sm text-gray-500 dark:text-gray-400"
404
+ // typography.smMuted = "text-sm text-muted-foreground"
413
405
  expect(button).toHaveClass('text-sm');
414
- expect(button).toHaveClass('text-gray-500');
415
- expect(button).toHaveClass('dark:text-gray-400');
406
+ expect(button).toHaveClass('text-muted-foreground');
416
407
  });
417
408
  });
418
409
 
@@ -420,13 +411,13 @@ describe('AccordionItem - Border Props', () => {
420
411
  test('applies borderOpenClass when open', async () => {
421
412
  const user = userEvent.setup();
422
413
  const { container } = render(AccordionItemWrapper, {
423
- props: { borderOpenClass: 'border-blue-500' }
414
+ props: { borderOpenClass: 'border-interactive-border' }
424
415
  });
425
416
  const button = container.querySelector('button');
426
417
 
427
418
  // Initially closed - no borderOpenClass
428
419
  const wrapper = container.querySelector('div');
429
- expect(wrapper).not.toHaveClass('border-blue-500');
420
+ expect(wrapper).not.toHaveClass('border-interactive-border');
430
421
 
431
422
  // Click to open
432
423
  await user.click(button);
@@ -434,14 +425,14 @@ describe('AccordionItem - Border Props', () => {
434
425
 
435
426
  await waitFor(() => {
436
427
  const wrapper = container.querySelector('div');
437
- expect(wrapper).toHaveClass('border-blue-500');
428
+ expect(wrapper).toHaveClass('border-interactive-border');
438
429
  });
439
430
  });
440
431
 
441
432
  test('removes borderOpenClass when closed', async () => {
442
433
  const user = userEvent.setup();
443
434
  const { container } = render(AccordionItemWrapper, {
444
- props: { open: true, borderOpenClass: 'border-red-500' }
435
+ props: { open: true, borderOpenClass: 'border-status-error-border' }
445
436
  });
446
437
 
447
438
  await tick();
@@ -450,7 +441,7 @@ describe('AccordionItem - Border Props', () => {
450
441
  // Initially open - has borderOpenClass
451
442
  await waitFor(() => {
452
443
  const wrapper = container.querySelector('div');
453
- expect(wrapper).toHaveClass('border-red-500');
444
+ expect(wrapper).toHaveClass('border-status-error-border');
454
445
  });
455
446
 
456
447
  // Click to close
@@ -459,7 +450,7 @@ describe('AccordionItem - Border Props', () => {
459
450
 
460
451
  await waitFor(() => {
461
452
  const wrapper = container.querySelector('div');
462
- expect(wrapper).not.toHaveClass('border-red-500');
453
+ expect(wrapper).not.toHaveClass('border-status-error-border');
463
454
  });
464
455
  });
465
456
 
@@ -67,11 +67,11 @@
67
67
  let headerClasses = $derived([
68
68
  "flex items-center justify-between w-full p-5 font-medium text-left",
69
69
  typography.smMuted,
70
- "bg-gray-100 dark:bg-gray-800",
71
- "hover:bg-gray-200 dark:hover:bg-gray-700",
70
+ "bg-muted",
71
+ "hover:bg-bg-tertiary",
72
72
  "focus:outline-hidden",
73
73
  "gap-3",
74
- isOpen ? "bg-gray-100 dark:bg-gray-800" : "",
74
+ isOpen ? "bg-muted" : "",
75
75
  ].join(" "));
76
76
  </script>
77
77
 
@@ -93,7 +93,7 @@
93
93
 
94
94
  {#if isOpen}
95
95
  <div transition:safeSlide={{ duration: 200 }}>
96
- <div class="p-5 {flush ? '' : 'border border-t-0 border-gray-200 dark:border-gray-700'}">
96
+ <div class="p-5 {flush ? '' : 'border border-t-0 border-border'}">
97
97
  <p class={typography.bodyMuted}>
98
98
  {#if children}{@render children()}{/if}
99
99
  </p>
@@ -63,15 +63,15 @@ describe('Avatar with Initials', () => {
63
63
  test('initials container has gray colors', () => {
64
64
  const { container } = render(Avatar, { props: { initials: 'EF' } });
65
65
  const div = container.querySelector('div');
66
- expect(div).toHaveClass('text-gray-600');
67
- expect(div).toHaveClass('bg-gray-200');
66
+ expect(div).toHaveClass('text-text-secondary');
67
+ expect(div).toHaveClass('bg-bg-tertiary');
68
68
  });
69
69
 
70
- test('initials container has dark mode colors', () => {
70
+ test('initials container uses token-based colors', () => {
71
71
  const { container } = render(Avatar, { props: { initials: 'GH' } });
72
72
  const div = container.querySelector('div');
73
- expect(div).toHaveClass('dark:bg-gray-700');
74
- expect(div).toHaveClass('dark:text-gray-300');
73
+ expect(div).toHaveClass('text-text-secondary');
74
+ expect(div).toHaveClass('bg-bg-tertiary');
75
75
  });
76
76
  });
77
77
 
@@ -81,16 +81,16 @@ describe('Avatar Default Placeholder', () => {
81
81
  expect(container.querySelector('svg')).toBeInTheDocument();
82
82
  });
83
83
 
84
- test('placeholder container has bg-gray-200', () => {
84
+ test('placeholder container has bg-bg-tertiary', () => {
85
85
  const { container } = render(Avatar);
86
86
  const div = container.querySelector('div');
87
- expect(div).toHaveClass('bg-gray-200');
87
+ expect(div).toHaveClass('bg-bg-tertiary');
88
88
  });
89
89
 
90
- test('placeholder container has dark mode bg', () => {
90
+ test('placeholder container uses token-based bg', () => {
91
91
  const { container } = render(Avatar);
92
92
  const div = container.querySelector('div');
93
- expect(div).toHaveClass('dark:bg-gray-700');
93
+ expect(div).toHaveClass('bg-bg-tertiary');
94
94
  });
95
95
 
96
96
  test('svg has correct sizing classes', () => {
@@ -100,10 +100,10 @@ describe('Avatar Default Placeholder', () => {
100
100
  expect(svg).toHaveClass('h-1/2');
101
101
  });
102
102
 
103
- test('svg has text-gray-400 color', () => {
103
+ test('svg has text-muted-foreground color', () => {
104
104
  const { container } = render(Avatar);
105
105
  const svg = container.querySelector('svg');
106
- expect(svg).toHaveClass('text-gray-400');
106
+ expect(svg).toHaveClass('text-muted-foreground');
107
107
  });
108
108
  });
109
109
 
@@ -37,6 +37,7 @@
37
37
  {/snippet}
38
38
  </Story>
39
39
 
40
+ <!-- Note: fill colors in data URIs cannot use CSS custom properties; hardcoded hex values are required here -->
40
41
  <Story name="With Image" args={{ src: 'data:image/svg+xml,' + encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150"><rect width="150" height="150" fill="#6366f1"/><circle cx="75" cy="55" r="30" fill="#fff"/><ellipse cx="75" cy="130" rx="45" ry="35" fill="#fff"/></svg>'), alt: 'User avatar' }}>
41
42
  {#snippet template(args)}
42
43
  <Avatar {...args} />
@@ -48,23 +49,23 @@
48
49
  <div class="flex items-end gap-4">
49
50
  <div class="text-center">
50
51
  <Avatar size="xs" initials="XS" />
51
- <p class="text-xs text-gray-500 mt-1">xs</p>
52
+ <p class="text-xs text-muted-foreground mt-1">xs</p>
52
53
  </div>
53
54
  <div class="text-center">
54
55
  <Avatar size="sm" initials="SM" />
55
- <p class="text-xs text-gray-500 mt-1">sm</p>
56
+ <p class="text-xs text-muted-foreground mt-1">sm</p>
56
57
  </div>
57
58
  <div class="text-center">
58
59
  <Avatar size="md" initials="MD" />
59
- <p class="text-xs text-gray-500 mt-1">md</p>
60
+ <p class="text-xs text-muted-foreground mt-1">md</p>
60
61
  </div>
61
62
  <div class="text-center">
62
63
  <Avatar size="lg" initials="LG" />
63
- <p class="text-xs text-gray-500 mt-1">lg</p>
64
+ <p class="text-xs text-muted-foreground mt-1">lg</p>
64
65
  </div>
65
66
  <div class="text-center">
66
67
  <Avatar size="xl" initials="XL" />
67
- <p class="text-xs text-gray-500 mt-1">xl</p>
68
+ <p class="text-xs text-muted-foreground mt-1">xl</p>
68
69
  </div>
69
70
  </div>
70
71
  {/snippet}
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.stories.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Avatar/Avatar.stories.svelte.js"],"names":[],"mappings":";;;;;;;;AA4GA;;;;mBAAkH;mBAxG7F,iBAAiB;6CA+FO,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Avatar.stories.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Avatar/Avatar.stories.svelte.js"],"names":[],"mappings":";;;;;;;;AA6GA;;;;mBAAkH;mBAzG7F,iBAAiB;6CAgGO,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,eAAe,QAAQ,CAAC"}
@@ -50,16 +50,16 @@
50
50
  />
51
51
  {:else if initials}
52
52
  <div
53
- class="flex items-center justify-center font-medium text-gray-600 bg-gray-200 dark:bg-gray-700 dark:text-gray-300 {sizeClass} {roundedClass} {className}"
53
+ class="flex items-center justify-center font-medium text-text-secondary bg-bg-tertiary {sizeClass} {roundedClass} {className}"
54
54
  >
55
55
  {initials}
56
56
  </div>
57
57
  {:else}
58
58
  <!-- Default placeholder -->
59
59
  <div
60
- class="flex items-center justify-center bg-gray-200 dark:bg-gray-700 {sizeClass} {roundedClass} {className}"
60
+ class="flex items-center justify-center bg-bg-tertiary {sizeClass} {roundedClass} {className}"
61
61
  >
62
- <svg class="w-1/2 h-1/2 text-gray-400" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
62
+ <svg class="w-1/2 h-1/2 text-muted-foreground" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
63
63
  <path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd"></path>
64
64
  </svg>
65
65
  </div>
@@ -35,43 +35,43 @@ describe('Badge Component Tests', () => {
35
35
  // neutral variant (default)
36
36
  const { container: neutralContainer } = render(Badge, { variant: 'neutral' });
37
37
  const neutralBadge = neutralContainer.querySelector('div');
38
- expect(neutralBadge).toHaveClass('bg-gray-100');
38
+ expect(neutralBadge).toHaveClass('bg-muted');
39
39
 
40
40
  // success variant
41
41
  const { container: successContainer } = render(Badge, { variant: 'success' });
42
42
  const successBadge = successContainer.querySelector('div');
43
- expect(successBadge).toHaveClass('bg-green-100');
43
+ expect(successBadge).toHaveClass('bg-status-success-bg');
44
44
 
45
45
  // warning variant
46
46
  const { container: warningContainer } = render(Badge, { variant: 'warning' });
47
47
  const warningBadge = warningContainer.querySelector('div');
48
- expect(warningBadge).toHaveClass('bg-yellow-100');
48
+ expect(warningBadge).toHaveClass('bg-status-warning-bg');
49
49
 
50
50
  // error variant
51
51
  const { container: errorContainer } = render(Badge, { variant: 'error' });
52
52
  const errorBadge = errorContainer.querySelector('div');
53
- expect(errorBadge).toHaveClass('bg-red-100');
53
+ expect(errorBadge).toHaveClass('bg-status-error-bg');
54
54
 
55
55
  // info variant
56
56
  const { container: infoContainer } = render(Badge, { variant: 'info' });
57
57
  const infoBadge = infoContainer.querySelector('div');
58
- expect(infoBadge).toHaveClass('bg-blue-100');
58
+ expect(infoBadge).toHaveClass('bg-status-info-bg');
59
59
  });
60
60
 
61
61
  test('Handles case-insensitive variants', () => {
62
62
  const { container: upperContainer } = render(Badge, { variant: 'SUCCESS' });
63
63
  const upperBadge = upperContainer.querySelector('div');
64
- expect(upperBadge).toHaveClass('bg-green-100');
64
+ expect(upperBadge).toHaveClass('bg-status-success-bg');
65
65
 
66
66
  const { container: mixedContainer } = render(Badge, { variant: 'Warning' });
67
67
  const mixedBadge = mixedContainer.querySelector('div');
68
- expect(mixedBadge).toHaveClass('bg-yellow-100');
68
+ expect(mixedBadge).toHaveClass('bg-status-warning-bg');
69
69
  });
70
70
 
71
71
  test('Falls back to neutral variant for unknown variants', () => {
72
72
  const { container } = render(Badge, { variant: 'unknown' });
73
73
  const badge = container.querySelector('div');
74
- expect(badge).toHaveClass('bg-gray-100');
74
+ expect(badge).toHaveClass('bg-muted');
75
75
  });
76
76
 
77
77
  test('Shows status dot when showDot is true', () => {
@@ -114,14 +114,14 @@ describe('Badge Component Tests', () => {
114
114
  });
115
115
 
116
116
  test('Applies custom text color', () => {
117
- const { container } = render(Badge, { textColor: '#ff0000' });
117
+ const { container } = render(Badge, { textColor: 'hsl(var(--accent-danger))' });
118
118
  const badge = container.querySelector('div');
119
119
  // Browser may convert hex to rgb
120
120
  expect(badge.style.color).toBeTruthy();
121
121
  });
122
122
 
123
123
  test('Applies custom background color', () => {
124
- const { container } = render(Badge, { bgColor: '#00ff00' });
124
+ const { container } = render(Badge, { bgColor: 'hsl(var(--accent-success))' });
125
125
  const badge = container.querySelector('div');
126
126
  // Browser may convert hex to rgb
127
127
  expect(badge.style.backgroundColor).toBeTruthy();
@@ -82,7 +82,7 @@ describe('BottomSheet Component', () => {
82
82
  const { container } = render(BottomSheet, {
83
83
  props: { open: true, onclose }
84
84
  });
85
- const sheet = container.querySelector('.bg-white, .dark\\:bg-gray-800');
85
+ const sheet = container.querySelector('.bg-card, .dark\\:bg-bg-secondary');
86
86
 
87
87
  await fireEvent.click(sheet);
88
88
  expect(closeCalled).toBe(false);
@@ -115,7 +115,7 @@ describe('BottomSheet Component', () => {
115
115
  it('has handle bar element', () => {
116
116
  const { container } = render(BottomSheet, { props: { open: true } });
117
117
  // The handle is the gray bar with rounded corners
118
- const handle = container.querySelector('.w-10.h-1.bg-gray-300');
118
+ const handle = container.querySelector('.w-10.h-1.bg-bg-quaternary');
119
119
  expect(handle).toBeTruthy();
120
120
  });
121
121
 
@@ -150,7 +150,7 @@ describe('BottomSheet Component', () => {
150
150
  it('does not render actions area when no actions snippet is provided', () => {
151
151
  const { container } = render(BottomSheet, { props: { open: true } });
152
152
  // The actions footer area should not exist if no actions snippet
153
- const actionsArea = container.querySelector('.border-t.border-gray-200');
153
+ const actionsArea = container.querySelector('.border-t.border-border');
154
154
  expect(actionsArea).toBeFalsy();
155
155
  });
156
156
 
@@ -182,7 +182,7 @@ describe('BottomSheet Component', () => {
182
182
  props: { open: true, onclose }
183
183
  });
184
184
  // Click the inner sheet panel (not the backdrop itself)
185
- const sheetPanel = container.querySelector('.bg-white');
185
+ const sheetPanel = container.querySelector('.bg-card');
186
186
  await fireEvent.click(sheetPanel);
187
187
  expect(closeCalled).toBe(false);
188
188
  });
@@ -217,7 +217,7 @@ describe('BottomSheet Component', () => {
217
217
  props: { open: true, onclose }
218
218
  });
219
219
  // Click the handle bar (a child of the backdrop)
220
- const handleBar = container.querySelector('.w-10.h-1.bg-gray-300');
220
+ const handleBar = container.querySelector('.w-10.h-1.bg-bg-quaternary');
221
221
  await fireEvent.click(handleBar);
222
222
  expect(closeCalled).toBe(false);
223
223
  });